]> git.zerfleddert.de Git - proxmark3-svn/commitdiff
Merge pull request #168 from zhovner/master
authorMartin Holst Swende <martin@swende.se>
Sun, 3 Apr 2016 19:55:54 +0000 (21:55 +0200)
committerMartin Holst Swende <martin@swende.se>
Sun, 3 Apr 2016 19:55:54 +0000 (21:55 +0200)
mfkey64: Added optional decryption of communication using keystream

184 files changed:
.gitignore
CHANGELOG.md
Makefile
armsrc/BigBuf.c
armsrc/BigBuf.h
armsrc/Makefile
armsrc/aes.c
armsrc/appmain.c
armsrc/apps.h
armsrc/des.c
armsrc/epa.c
armsrc/epa.h
armsrc/fpgaloader.c
armsrc/fpgaloader.h [new file with mode: 0644]
armsrc/hfsnoop.c [new file with mode: 0644]
armsrc/hitag2.c
armsrc/iclass.c
armsrc/iso14443.c [deleted file]
armsrc/iso14443a.c
armsrc/iso14443a.h
armsrc/iso14443b.c [new file with mode: 0644]
armsrc/iso14443b.h [new file with mode: 0644]
armsrc/iso15693.c
armsrc/ldscript
armsrc/lfops.c
armsrc/lfsampling.c
armsrc/lfsampling.h
armsrc/mifarecmd.c
armsrc/mifareutil.c
armsrc/mifareutil.h
armsrc/optimized_cipher.c
armsrc/pcf7931.c [new file with mode: 0644]
armsrc/pcf7931.h [new file with mode: 0644]
armsrc/start.c
armsrc/util.c
client/Makefile
client/cmddata.c
client/cmddata.h
client/cmdhf.c
client/cmdhf14a.c
client/cmdhf14b.c
client/cmdhf14b.h
client/cmdhfepa.c
client/cmdhficlass.c
client/cmdhficlass.h
client/cmdhflegic.c
client/cmdhfmf.c
client/cmdhfmfu.c
client/cmdhfmfu.h
client/cmdhftopaz.c [new file with mode: 0644]
client/cmdhftopaz.h [new file with mode: 0644]
client/cmdhw.c
client/cmdlf.c
client/cmdlfawid.c [new file with mode: 0644]
client/cmdlfawid.h [new file with mode: 0644]
client/cmdlfem4x.c
client/cmdlfio.c
client/cmdlfpcf7931.c
client/cmdlfpcf7931.h
client/cmdlft55xx.c
client/cmdlft55xx.h
client/cmdlfviking.c [new file with mode: 0644]
client/cmdlfviking.h [new file with mode: 0644]
client/cmdmain.c
client/cmdmain.h
client/cmdparser.c
client/cmdparser.h
client/default_pwd.dic [new file with mode: 0644]
client/fpga_compress.c [new file with mode: 0644]
client/graph.c
client/hid-flasher/usb_cmd.h
client/loclass/cipher.c
client/loclass/cipher.h
client/loclass/cipherutils.c
client/loclass/elite_crack.c
client/loclass/main.c
client/lualibs/commands.lua
client/lualibs/mf_default_keys.lua
client/lualibs/utils.lua
client/mifarehost.c
client/mifarehost.h
client/nonce2key/nonce2key.c
client/proxmark3.c
client/proxmark3.h
client/scripting.c
client/scripts/didump.lua [new file with mode: 0644]
client/scripts/dumptoemul.lua
client/scripts/mifare_autopwn.lua
client/util.c
client/util.h
common/Makefile.common
common/crc.h
common/crc16.c
common/crc16.h
common/default_version.c
common/lfdemod.c
common/lfdemod.h
common/protocols.c
common/protocols.h
common/sha1.c [new file with mode: 0644]
common/sha1.h [new file with mode: 0644]
common/usb_cdc.c
common/usb_cdc.h
doc/RFID_Antenna-Basic-Form.stl [new file with mode: 0755]
doc/RFID_Antenna-With-Lanyard-Hook.stl [new file with mode: 0755]
fpga/Makefile
fpga/fpga_hf.bit
fpga/fpga_hf.v
fpga/hi_read_rx_xcorr.v
fpga/hi_sniffer.v [new file with mode: 0644]
include/mifare.h
include/proxmark3.h
include/usb_cmd.h
pcb/lf-antenna/CAD/lf-antenna.brd [new file with mode: 0644]
pcb/lf-antenna/CAM/lf-antenna.GBL [new file with mode: 0644]
pcb/lf-antenna/CAM/lf-antenna.GBO [new file with mode: 0644]
pcb/lf-antenna/CAM/lf-antenna.GBP [new file with mode: 0644]
pcb/lf-antenna/CAM/lf-antenna.GBS [new file with mode: 0644]
pcb/lf-antenna/CAM/lf-antenna.GML [new file with mode: 0644]
pcb/lf-antenna/CAM/lf-antenna.GTL [new file with mode: 0644]
pcb/lf-antenna/CAM/lf-antenna.GTO [new file with mode: 0644]
pcb/lf-antenna/CAM/lf-antenna.GTP [new file with mode: 0644]
pcb/lf-antenna/CAM/lf-antenna.GTS [new file with mode: 0644]
pcb/lf-antenna/CAM/lf-antenna.TXT [new file with mode: 0644]
pcb/lf-antenna/CAM/lf-antenna.do [new file with mode: 0644]
pcb/lf-antenna/CAM/lf-antenna.dri [new file with mode: 0644]
pcb/lf-antenna/CAM/lf-antenna.gpi [new file with mode: 0644]
pcb/lf-antenna/MFG/lf-antenna_bot.pdf [new file with mode: 0644]
pcb/lf-antenna/MFG/lf-antenna_cam.zip [new file with mode: 0644]
pcb/lf-antenna/MFG/lf-antenna_top.pdf [new file with mode: 0644]
pcb/lf-antenna/README.md [new file with mode: 0644]
pcb/proxmark3_fix/BOT_layer_preview.png [new file with mode: 0644]
pcb/proxmark3_fix/CAD/change_log.txt [new file with mode: 0644]
pcb/proxmark3_fix/CAD/proxmark3.brd [new file with mode: 0644]
pcb/proxmark3_fix/CAD/proxmark3.sch [new file with mode: 0644]
pcb/proxmark3_fix/CAD/proxmark3_exported_and_modified_components.lbr [new file with mode: 0644]
pcb/proxmark3_fix/CAM/README.txt [new file with mode: 0644]
pcb/proxmark3_fix/CAM/proxmark3.GBL [new file with mode: 0644]
pcb/proxmark3_fix/CAM/proxmark3.GBO [new file with mode: 0644]
pcb/proxmark3_fix/CAM/proxmark3.GBP [new file with mode: 0644]
pcb/proxmark3_fix/CAM/proxmark3.GBS [new file with mode: 0644]
pcb/proxmark3_fix/CAM/proxmark3.GL1 [new file with mode: 0644]
pcb/proxmark3_fix/CAM/proxmark3.GL2 [new file with mode: 0644]
pcb/proxmark3_fix/CAM/proxmark3.GML [new file with mode: 0644]
pcb/proxmark3_fix/CAM/proxmark3.GTL [new file with mode: 0644]
pcb/proxmark3_fix/CAM/proxmark3.GTO [new file with mode: 0644]
pcb/proxmark3_fix/CAM/proxmark3.GTP [new file with mode: 0644]
pcb/proxmark3_fix/CAM/proxmark3.GTS [new file with mode: 0644]
pcb/proxmark3_fix/CAM/proxmark3.TXT [new file with mode: 0644]
pcb/proxmark3_fix/CAM/proxmark3.do [new file with mode: 0644]
pcb/proxmark3_fix/CAM/proxmark3.dri [new file with mode: 0644]
pcb/proxmark3_fix/CAM/proxmark3.gpi [new file with mode: 0644]
pcb/proxmark3_fix/IN1_layer_preview.png [new file with mode: 0644]
pcb/proxmark3_fix/IN2_layer_preview.png [new file with mode: 0644]
pcb/proxmark3_fix/MFG/proxmark3_IN1.pdf [new file with mode: 0644]
pcb/proxmark3_fix/MFG/proxmark3_IN2.pdf [new file with mode: 0644]
pcb/proxmark3_fix/MFG/proxmark3_bot.pdf [new file with mode: 0644]
pcb/proxmark3_fix/MFG/proxmark3_cam.zip [new file with mode: 0644]
pcb/proxmark3_fix/MFG/proxmark3_sch.pdf [new file with mode: 0644]
pcb/proxmark3_fix/MFG/proxmark3_top.pdf [new file with mode: 0644]
pcb/proxmark3_fix/README.md [new file with mode: 0644]
pcb/proxmark3_fix/TOP_layer_preview.png [new file with mode: 0644]
pcb/proxmark3_original_cad_cam_zip_files/README.md [new file with mode: 0644]
pcb/proxmark3_original_cad_cam_zip_files/proxmark3-eagle.zip [new file with mode: 0644]
pcb/proxmark3_original_cad_cam_zip_files/proxmark3-mfgr-data.zip [new file with mode: 0644]
zlib/ChangeLog [new file with mode: 0644]
zlib/FAQ [new file with mode: 0644]
zlib/README [new file with mode: 0644]
zlib/adler32.c [new file with mode: 0644]
zlib/deflate.c [new file with mode: 0644]
zlib/deflate.h [new file with mode: 0644]
zlib/inffast.c [new file with mode: 0644]
zlib/inffast.h [new file with mode: 0644]
zlib/inffixed.h [new file with mode: 0644]
zlib/inflate.c [new file with mode: 0644]
zlib/inflate.h [new file with mode: 0644]
zlib/inftrees.c [new file with mode: 0644]
zlib/inftrees.h [new file with mode: 0644]
zlib/trees.c [new file with mode: 0644]
zlib/trees.h [new file with mode: 0644]
zlib/zconf.h [new file with mode: 0644]
zlib/zlib.h [new file with mode: 0644]
zlib/zutil.c [new file with mode: 0644]
zlib/zutil.h [new file with mode: 0644]

index 07669e14a240ae9125fef7ea6cc66387cae3211b..fa74326ed6f9297683b6124cb138becaa61bc94f 100644 (file)
@@ -1,6 +1,7 @@
 # .gitignore
 # don't push these files to the repository
 
+.history
 *.log
 *.eml
 *.o
@@ -12,6 +13,7 @@
 *.bin
 *.dll
 *.moc.cpp
+*.z
 *.exe
 proxmark
 proxmark3
index 85e7f91527753d1443066bed07527383b18c5b2c..d3d71de5c3e3cc7a8d06d796f2d5bfd83d3703e3 100644 (file)
@@ -2,8 +2,79 @@
 All notable changes to this project will be documented in this file.
 This project uses the changelog in accordance with [keepchangelog](http://keepachangelog.com/). Please use this to write notable changes, which is not the same as git commit log...
 
-## [Unreleased][unreleased]
+## [unreleased][unreleased]
+
+### Added
+- Added a LF ASK Sequence Terminator detection option to the standard ask demod - and applied it to `lf search u`, `lf t55xx detect`, and `data rawdemod am s` (marshmellow)
+- `lf t55xx bruteforce <start password> <end password> [i <*.dic>]` - Simple bruteforce attack to find password - (iceman and others)
+- `lf viking clone`- clone viking tag to t55x7 or Q5 from 4byte hex ID input 
+- `lf viking sim`  - sim full viking tag from 4byte hex ID input
+- `lf viking read` - read viking tag and output ID
+- `lf t55xx wipe`  - sets t55xx back to factory defaults
+- Added viking demod to `lf search` (marshmellow)
+- `data askvikingdemod` demod viking id tag from graphbuffer (marshmellow)
+- `lf t55xx resetread` added reset then read command - should allow determining start
+of stream transmissions (marshmellow)
+- `lf t55xx wakeup` added wake with password (AOR) to allow lf search or standard lf read after (iceman, marshmellow)
+- `hf iclass managekeys` to save, load and manage iclass keys.  (adjusted most commands to accept a loaded key in memory) (marshmellow)
+- `hf iclass readblk` to select, authenticate, and read 1 block from an iclass card (marshmellow)
+- `hf iclass writeblk` to select, authenticate, and write 1 block to an iclass card (or picopass) (marshmellow + others)
+- `hf iclass clone` to take a saved dump file and clone selected blocks to a new tag (marshmellow + others)
+- `hf iclass calcnewkey` - to calculate the div_key change to change a key - (experimental) (marshmellow + others)
+- `hf iclass encryptblk` - to encrypt a data block hex to prep for writing that block (marshmellow)
+- ISO14443a stand-alone operation with ARM CFLAG="WITH_ISO14443a_StandAlone". This code can read & emulate two banks of 14a tag UIDs and write to "magic" cards  (Craig Young) 
+- AWID26 command context added as 'lf awid' containing realtime demodulation as well as cloning/simulation based on tag numbers (Craig Young)
+- Added 'hw status'. This command makes the ARM print out some runtime information. (holiman) 
+- Added 'hw ping'. This command just sends a usb packets and checks if the pm3 is responsive. Can be used to abort certain operations which supports abort over usb. (holiman)
+- Added `data hex2bin` and `data bin2hex` for command line conversion between binary and hexadecimal (holiman)
+- Added 'hf snoop'. This command take digitalized signal from FPGA and put in BigBuffer. (pwpiwi + enio)
+- Added Topaz (NFC type 1) protocol support ('hf topaz reader', 'hf list topaz', 'hf 14a raw -T', 'hf topaz snoop'). (piwi)
+- Added option c to 'hf list' (mark CRC bytes) (piwi)
+
+### Changed
+- Added `[l] <length>` option to data printdemodbuffer
+- Adjusted lf awid clone to optionally clone to Q5 tags
+- Adjusted lf t55xx detect to find Q5 tags (t5555) instead of just t55x7
+- Adjusted all lf NRZ demods - works more accurately and consistently (as long as you have strong signal)
+- Adjusted lf pskindalademod to reduce false positive reads.
+- Small adjustments to psk, nrz, and ask clock detect routines - more reliable.
+- Adjusted lf em410x em410xsim to accept a clock argument
+- Adjusted lf t55xx dump to allow overriding the safety check and warning text (marshmellow)
+- Adjusted lf t55xx write input variables (marshmellow)
+- Adjusted lf t55xx read with password safety check and warning text and adjusted the input variables (marshmellow & iceman)
+- Adjusted LF FSK demod to account for cross threshold fluctuations (898 count waves will adjust the 9 to 8 now...) more accurate.
+- Adjusted timings for t55xx commands.  more reliable now. (marshmellow & iceman)
+- `lf cmdread` adjusted input methods and added help text (marshmellow & iceman)
+- changed `lf config t <threshold>` to be 0 - 128 and will trigger on + or - threshold value (marshmellow) 
+- `hf iclass dump` cli options - can now dump AA1 and AA2 with different keys in one run (does not go to multiple pages for the larger tags yet)
+- Revised workflow for StandAloneMode14a (Craig Young)
+- EPA functions (`hf epa`) now support both ISO 14443-A and 14443-B cards (frederikmoellers)
+- 'hw version' only talks to ARM at startup, after that the info is cached. (pwpiwi)
+- Added `r` option to iclass functions - allows key to be provided in raw block 3/4 format 
+
+## [2.2.0][2015-07-12]
+
+### Changed
+- Added `hf 14b raw -s` option to auto select a 14b std tag before raw command 
+- Changed `hf 14b write` to `hf 14b sriwrite` as it only applied to sri tags (marshmellow)
+- Added `hf 14b info` to `hf search` (marshmellow)
+- Added compression of fpga config and data, *BOOTROM REFLASH REQUIRED* (piwi)
+- Implemented better detection of mifare-tags that are not vulnerable to classic attacks (`hf mf mifare`, `hf mf nested`) (piwi)
+
+### Added
+- Add `hf 14b info` to find and print info about std 14b tags and sri tags (using 14b raw commands in the client)  (marshmellow)
+- Add PACE replay functionality (frederikmoellers)
+
+### Fixed 
+- t55xx write timing (marshmellow)
+
+
+## [2.1.0][2015-06-23]
+
 ### Changed
+- Added ultralight/ntag tag type detection to `hf 14a read` (marshmellow)
+- Improved ultralight dump command to auto detect tag type, take authentication, and dump full memory (or subset specified) of known tag types (iceman1001 / marshmellow)
+- Combined ultralight read/write commands and added authentication (iceman1001)
 - Improved LF manchester and biphase demodulation and ask clock detection especially for reads with heavy clipping. (marshmellow)
 - Iclass read, `hf iclass read` now also reads tag config and prints configuration. (holiman)
 - *bootrom* needs to be flashed, due to new address boundaries between os and fpga, after a size optimization (piwi)
@@ -11,8 +82,12 @@ This project uses the changelog in accordance with [keepchangelog](http://keepac
 ### Fixed
 - Fixed EM4x50 read/demod of the tags broadcasted memory blocks. 'lf em4x em4x50read' (not page read) (marshmellow)
 - Fixed issue #19, problems with LF T55xx commands (iceman1001, marshmellow)
+- Fixed various problems with iso14443b, issue #103 (piwi, marshmellow)
 
 ### Added
+- Added `hf search` - currently tests for 14443a tags, iclass tags, and 15693 tags (marshmellow) 
+- Added `hf mfu info` Ultralight/NTAG info command - reads tag configuration and info, allows authentication if needed (iceman1001, marshmellow)
+- Added Mifare Ultralight C and Ultralight EV1/NTAG authentication. (iceman1001)
 - Added changelog
 
 ## [2.0.0] - 2015-03-25
index b558da2d74a5dfcdbadd47d3bb37a89ae3eb7b47..bafd816102dc3cd1156edc8a54e4cfb5046a149a 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -1,9 +1,8 @@
 include common/Makefile.common
 
-GZIP=gzip
 FLASH_PORT=/dev/ttyACM0
 
-all clean: %: bootrom/% armsrc/% client/% recovery/%
+all clean: %: client/% bootrom/% armsrc/% recovery/%
 
 bootrom/%: FORCE
        $(MAKE) -C bootrom $(patsubst bootrom/%,%,$@)
@@ -15,18 +14,16 @@ recovery/%: FORCE
        $(MAKE) -C recovery $(patsubst recovery/%,%,$@)
 FORCE: # Dummy target to force remake in the subdirectories, even if files exist (this Makefile doesn't know about the prerequisites)
 
+.PHONY: all clean help _test flash-bootrom flash-os flash-all FORCE
 
-.PHONY: all clean help _test flash-bootrom flash-os flash-fpga flash-both flash-all FORCE
 help:
        @echo Multi-OS Makefile, you are running on $(DETECTED_OS)
        @echo Possible targets:
        @echo + all           - Make bootrom, armsrc and the OS-specific host directory
        @echo + client        - Make only the OS-specific host directory
        @echo + flash-bootrom - Make bootrom and flash it
-       @echo + flash-os      - Make armsrc and flash os (includes fpga)
-       @echo + flash-fpga    - (Deprecated:) Make armsrc and flash fpga
-       @echo + flash-both    - Make armsrc and flash os and fpga image
-       @echo + flash-all     - Make bootrom and armsrc and flash bootrom, os and fpga image
+       @echo + flash-os      - Make armsrc and flash os \(includes fpga\)
+       @echo + flash-all     - Make bootrom and armsrc and flash bootrom and os image
        @echo + clean         - Clean in bootrom, armsrc and the OS-specific host directory
 
 client: client/all
@@ -34,16 +31,10 @@ client: client/all
 flash-bootrom: bootrom/obj/bootrom.elf $(FLASH_TOOL)
        $(FLASH_TOOL) $(FLASH_PORT) -b $(subst /,$(PATHSEP),$<)
 
-flash-os: armsrc/obj/osimage.elf $(FLASH_TOOL)
+flash-os: armsrc/obj/fullimage.elf $(FLASH_TOOL)
        $(FLASH_TOOL) $(FLASH_PORT) $(subst /,$(PATHSEP),$<)
 
-#flash-fpga: armsrc/obj/fpgaimage.elf $(FLASH_TOOL)
-#      $(FLASH_TOOL) $(FLASH_PORT) $(subst /,$(PATHSEP),$<)
-
-flash-both: armsrc/obj/osimage.elf $(FLASH_TOOL)
-       $(FLASH_TOOL) $(FLASH_PORT) $(subst /,$(PATHSEP),$(filter-out $(FLASH_TOOL),$^))
-
-flash-all: bootrom/obj/bootrom.elf armsrc/obj/osimage.elf $(FLASH_TOOL)
+flash-all: bootrom/obj/bootrom.elf armsrc/obj/fullimage.elf $(FLASH_TOOL)
        $(FLASH_TOOL) $(FLASH_PORT) -b $(subst /,$(PATHSEP),$(filter-out $(FLASH_TOOL),$^))
 
 newtarbin:
index 703ade658da348db04f80b2824269a32c738cb55..851cf390e795faf4c6d3b3f58411e6d9966a2d5b 100644 (file)
@@ -50,11 +50,21 @@ uint8_t *BigBuf_get_EM_addr(void)
 
 // clear ALL of BigBuf
 void BigBuf_Clear(void)
+{
+       BigBuf_Clear_ext(true);
+}
+// clear ALL of BigBuf
+void BigBuf_Clear_ext(bool verbose)
 {
        memset(BigBuf,0,BIGBUF_SIZE);
-       Dbprintf("Buffer cleared (%i bytes)",BIGBUF_SIZE);
+       if (verbose) 
+               Dbprintf("Buffer cleared (%i bytes)",BIGBUF_SIZE);
 }
 
+void BigBuf_Clear_keep_EM(void)
+{
+       memset(BigBuf,0,BigBuf_hi);
+}
 
 // allocate a chunk of memory from BigBuf. We allocate high memory first. The unallocated memory
 // at the beginning of BigBuf is always for traces/samples
@@ -88,6 +98,16 @@ void BigBuf_free_keep_EM(void)
        }
 }
 
+void BigBuf_print_status(void)
+{
+       Dbprintf("Memory");
+       Dbprintf("  BIGBUF_SIZE.............%d", BIGBUF_SIZE);
+       Dbprintf("  BigBuf_hi  .............%d", BigBuf_hi);
+       Dbprintf("Tracing");
+       Dbprintf("  tracing ................%d", tracing);
+       Dbprintf("  traceLen ...............%d", traceLen);
+}
+
 
 // return the maximum trace length (i.e. the unallocated size of BigBuf)
 uint16_t BigBuf_max_traceLen(void)
@@ -96,9 +116,6 @@ uint16_t BigBuf_max_traceLen(void)
 }
 
 void clear_trace() {
-       uint8_t *trace = BigBuf_get_addr();
-       uint16_t max_traceLen = BigBuf_max_traceLen();
-       memset(trace, 0x44, max_traceLen);
        traceLen = 0;
 }
 
@@ -171,18 +188,19 @@ bool RAMFUNC LogTrace(const uint8_t *btBytes, uint16_t iLen, uint32_t timestamp_
        traceLen += iLen;
 
        // parity bytes
-       if (parity != NULL && iLen != 0) {
-               memcpy(trace + traceLen, parity, num_paritybytes);
+       if (num_paritybytes != 0) {
+               if (parity != NULL) {
+                       memcpy(trace + traceLen, parity, num_paritybytes);
+               } else {
+                       memset(trace + traceLen, 0x00, num_paritybytes);
+               }
        }
        traceLen += num_paritybytes;
 
-       if(traceLen +4 < max_traceLen)
-       {       //If it hadn't been cleared, for whatever reason..
-               memset(trace+traceLen,0x44, 4);
-       }
-
        return TRUE;
 }
+
+
 int LogTraceHitag(const uint8_t * btBytes, int iBits, int iSamples, uint32_t dwParity, int readerToTag)
 {
        /**
@@ -224,6 +242,8 @@ int LogTraceHitag(const uint8_t * btBytes, int iBits, int iSamples, uint32_t dwP
 
        return TRUE;
 }
+
+
 // Emulator memory
 uint8_t emlSet(uint8_t *data, uint32_t offset, uint32_t length){
        uint8_t* mem = BigBuf_get_EM_addr();
index b44a12630ec52b60cd86b4d0faada7d0de020222..11e02c7ade8bf840ce3052c6e55512f7d89f311c 100644 (file)
 extern uint8_t *BigBuf_get_addr(void);
 extern uint8_t *BigBuf_get_EM_addr(void);
 extern uint16_t BigBuf_max_traceLen(void);
-void BigBuf_Clear(void);
+extern void BigBuf_Clear(void);
+extern void BigBuf_Clear_ext(bool verbose);
+extern void BigBuf_Clear_keep_EM(void);
 extern uint8_t *BigBuf_malloc(uint16_t);
 extern void BigBuf_free(void);
 extern void BigBuf_free_keep_EM(void);
-
-uint16_t BigBuf_get_traceLen(void);
-void clear_trace();
-void set_tracing(bool enable);
-bool RAMFUNC LogTrace(const uint8_t *btBytes, uint16_t iLen, uint32_t timestamp_start, uint32_t timestamp_end, uint8_t *parity, bool readerToTag);
-int LogTraceHitag(const uint8_t * btBytes, int iBits, int iSamples, uint32_t dwParity, int bReader);
-uint8_t emlSet(uint8_t *data, uint32_t offset, uint32_t length);
+extern void BigBuf_print_status(void);
+extern uint16_t BigBuf_get_traceLen(void);
+extern void clear_trace();
+extern void set_tracing(bool enable);
+extern bool RAMFUNC LogTrace(const uint8_t *btBytes, uint16_t iLen, uint32_t timestamp_start, uint32_t timestamp_end, uint8_t *parity, bool readerToTag);
+extern int LogTraceHitag(const uint8_t * btBytes, int iBits, int iSamples, uint32_t dwParity, int bReader);
+extern uint8_t emlSet(uint8_t *data, uint32_t offset, uint32_t length);
 #endif /* __BIGBUF_H */
index 899b03075af35d1d51a0d61f318d1028959ae09f..69ea23006c54c4a8008880179bc8c9d67628a63c 100644 (file)
@@ -9,22 +9,39 @@
 APP_INCLUDES = apps.h
 
 #remove one of the following defines and comment out the relevant line
-#in the next section to remove that particular feature from compilation  
-APP_CFLAGS     = -DWITH_LF -DWITH_ISO15693 -DWITH_ISO14443a -DWITH_ISO14443b -DWITH_ICLASS -DWITH_LEGICRF -DWITH_HITAG  -DWITH_CRC -DON_DEVICE -fno-strict-aliasing -ffunction-sections -fdata-sections
-#-DWITH_LCD 
+#in the next section to remove that particular feature from compilation
+APP_CFLAGS     = -DWITH_ISO14443a_StandAlone -DWITH_LF -DWITH_ISO15693 -DWITH_ISO14443a -DWITH_ISO14443b -DWITH_ICLASS -DWITH_LEGICRF -DWITH_HITAG  -DWITH_CRC -DON_DEVICE -DWITH_HFSNOOP \
+                               -fno-strict-aliasing -ffunction-sections -fdata-sections
+#-DWITH_LCD
 
 #SRC_LCD = fonts.c LCD.c
-SRC_LF = lfops.c hitag2.c lfsampling.c
+SRC_LF = lfops.c hitag2.c lfsampling.c pcf7931.c lfdemod.c protocols.c
 SRC_ISO15693 = iso15693.c iso15693tools.c
 SRC_ISO14443a = epa.c iso14443a.c mifareutil.c mifarecmd.c mifaresniff.c
-SRC_ISO14443b = iso14443.c
-SRC_CRAPTO1 = crapto1.c crypto1.c des.c aes.c 
-SRC_CRC = iso14443crc.c crc.c crc16.c crc32.c 
+SRC_ISO14443b = iso14443b.c
+SRC_CRAPTO1 = crapto1.c crypto1.c des.c aes.c
+SRC_CRC = iso14443crc.c crc.c crc16.c crc32.c
 
+#the FPGA bitstream files. Note: order matters!
+FPGA_BITSTREAMS = fpga_lf.bit fpga_hf.bit
+
+#the zlib source files required for decompressing the fpga config at run time
+SRC_ZLIB = inflate.c inffast.c inftrees.c adler32.c zutil.c
+#additional defines required to compile zlib
+ZLIB_CFLAGS = -DZ_SOLO -DZ_PREFIX -DNO_GZIP -DZLIB_PM3_TUNED
+APP_CFLAGS += $(ZLIB_CFLAGS)
+# zlib includes:
+APP_CFLAGS += -I../zlib
+
+# stdint.h provided locally until GCC 4.5 becomes C99 compliant
+APP_CFLAGS += -I.
+
+# Compile these in thumb mode (small size)
 THUMBSRC = start.c \
        $(SRC_LCD) \
        $(SRC_ISO15693) \
        $(SRC_LF) \
+       $(SRC_ZLIB) \
        appmain.c \
        printf.c \
        util.c \
@@ -35,7 +52,6 @@ THUMBSRC = start.c \
 # These are to be compiled in ARM mode
 ARMSRC = fpgaloader.c \
        legicrf.c \
-       lfdemod.c \
        $(SRC_ISO14443a) \
        $(SRC_ISO14443b) \
        $(SRC_CRAPTO1) \
@@ -43,52 +59,66 @@ ARMSRC = fpgaloader.c \
        legic_prng.c \
        iclass.c \
        BigBuf.c \
-       optimized_cipher.c
-
-# stdint.h provided locally until GCC 4.5 becomes C99 compliant
-APP_CFLAGS += -I.
+       optimized_cipher.c \
+       hfsnoop.c
 
 # Do not move this inclusion before the definition of {THUMB,ASM,ARM}SRC
 include ../common/Makefile.common
 
-OBJS = $(OBJDIR)/osimage.s19 
-#$(OBJDIR)/fpgaimage.s19
+OBJS = $(OBJDIR)/fullimage.s19
+FPGA_COMPRESSOR = ../client/fpga_compress
 
 all: $(OBJS)
 
-$(OBJDIR)/fpga_lf.o: fpga_lf.bit
-       $(OBJCOPY) -O elf32-littlearm -I binary -B arm --redefine-sym _binary____fpga_fpga_lf_bit_start=_binary_fpga_lf_bit_start --redefine-sym _binary____fpga_fpga_lf_bit_end=_binary_fpga_lf_bit_end --prefix-sections=fpga_lf_bit  $^ $@
+.DELETE_ON_ERROR:
 
-$(OBJDIR)/fpga_hf.o: fpga_hf.bit
-       $(OBJCOPY) -O elf32-littlearm -I binary -B arm --redefine-sym _binary____fpga_fpga_hf_bit_start=_binary_fpga_hf_bit_start --redefine-sym _binary____fpga_fpga_hf_bit_end=_binary_fpga_hf_bit_end --prefix-sections=fpga_hf_bit  $^ $@
+$(OBJDIR)/fpga_all.o: $(OBJDIR)/fpga_all.bit.z
+       $(OBJCOPY) -O elf32-littlearm -I binary -B arm --prefix-sections=fpga_all_bit $^ $@
 
-$(OBJDIR)/fullimage.elf: $(VERSIONOBJ) $(OBJDIR)/fpga_lf.o $(OBJDIR)/fpga_hf.o $(THUMBOBJ) $(ARMOBJ)
+$(OBJDIR)/fpga_all.bit.z: $(FPGA_BITSTREAMS) $(FPGA_COMPRESSOR)
+       $(FPGA_COMPRESSOR) $(filter %.bit,$^) $@
+
+$(FPGA_COMPRESSOR):
+               make -C ../client $(notdir $(FPGA_COMPRESSOR))
+
+$(OBJDIR)/fullimage.stage1.elf: $(VERSIONOBJ) $(OBJDIR)/fpga_all.o $(THUMBOBJ) $(ARMOBJ)
        $(CC) $(LDFLAGS) -Wl,-T,ldscript,-Map,$(patsubst %.elf,%.map,$@) -o $@ $^ $(LIBS)
 
-#$(OBJDIR)/fpgaimage.elf: $(OBJDIR)/fullimage.elf
-#      $(OBJCOPY) -F elf32-littlearm --only-section .fpgaimage $^ $@  
+$(OBJDIR)/fullimage.nodata.bin: $(OBJDIR)/fullimage.stage1.elf
+       $(OBJCOPY) -O binary -I elf32-littlearm --remove-section .data $^ $@
+
+$(OBJDIR)/fullimage.nodata.o: $(OBJDIR)/fullimage.nodata.bin
+       $(OBJCOPY) -O elf32-littlearm -I binary -B arm --rename-section .data=stage1_image $^ $@
+
+$(OBJDIR)/fullimage.data.bin: $(OBJDIR)/fullimage.stage1.elf
+       $(OBJCOPY) -O binary -I elf32-littlearm --only-section .data $^ $@
 
-$(OBJDIR)/osimage.elf: $(OBJDIR)/fullimage.elf
-       $(OBJCOPY) -F elf32-littlearm $^ $@
+$(OBJDIR)/fullimage.data.bin.z: $(OBJDIR)/fullimage.data.bin $(FPGA_COMPRESSOR)
+       $(FPGA_COMPRESSOR) $(filter %.bin,$^) $@
+
+$(OBJDIR)/fullimage.data.o: $(OBJDIR)/fullimage.data.bin.z
+       $(OBJCOPY) -O elf32-littlearm -I binary -B arm --rename-section .data=compressed_data $^ $@
+
+$(OBJDIR)/fullimage.elf: $(OBJDIR)/fullimage.nodata.o $(OBJDIR)/fullimage.data.o
+       $(CC) $(LDFLAGS) -Wl,-T,ldscript,-Map,$(patsubst %.elf,%.map,$@) -o $@ $^
 
 tarbin: $(OBJS)
        $(TAR) $(TARFLAGS) ../proxmark3-$(platform)-bin.tar $(OBJS:%=armsrc/%) $(OBJS:%.s19=armsrc/%.elf)
 
-
 clean:
        $(DELETE) $(OBJDIR)$(PATHSEP)*.o
        $(DELETE) $(OBJDIR)$(PATHSEP)*.elf
        $(DELETE) $(OBJDIR)$(PATHSEP)*.s19
        $(DELETE) $(OBJDIR)$(PATHSEP)*.map
        $(DELETE) $(OBJDIR)$(PATHSEP)*.d
+       $(DELETE) $(OBJDIR)$(PATHSEP)*.z
+       $(DELETE) $(OBJDIR)$(PATHSEP)*.bin
        $(DELETE) version.c
 
 .PHONY: all clean help
 help:
        @echo Multi-OS Makefile, you are running on $(DETECTED_OS)
        @echo Possible targets:
-       @echo + all               - Make both:
-       @echo + $(OBJDIR)/osimage.s19   - The OS image
-       @echo + $(OBJDIR)/fpgaimage.s19 - The FPGA image
-       @echo + clean             - Clean $(OBJDIR)
+       @echo + all    - Build the full image $(OBJDIR)/fullimage.s19
+       @echo + clean  - Clean $(OBJDIR)
 
index 3df006bb355f2b0f7db494b36f98c8fd53355868..a199d04b7dc8d48bacbf446de619406385320159 100644 (file)
@@ -1,4 +1,3 @@
-#include "stdio.h"
 #include "aes.h"
 
 static const unsigned int Te0[256] = {
@@ -1138,6 +1137,9 @@ int AesDecrypt(AesCtx *pCtx, unsigned char *pCipher, unsigned char *pData, unsig
 //////////////////////////////////////////////////////////////////////////////
 
 #ifndef EMBEDDED
+
+#include <stdio.h>
+
 int main()
 {
     AesCtx ctx;
index 96644b9a09e039062130d5fae52c34952c3032d1..782c57fab10aa4371ce60d3ae64424bf81975874 100644 (file)
 #include <hitag2.h>
 #include "lfsampling.h"
 #include "BigBuf.h"
+#include "mifareutil.h"
+#include "pcf7931.h"
 #ifdef WITH_LCD
  #include "LCD.h"
 #endif
 
+// Craig Young - 14a stand-alone code
+#ifdef WITH_ISO14443a_StandAlone
+ #include "iso14443a.h"
+#endif
+
 #define abs(x) ( ((x)<0) ? -(x) : (x) )
 
 //=============================================================================
@@ -250,55 +257,6 @@ void MeasureAntennaTuningHf(void)
 }
 
 
-void SimulateTagHfListen(void)
-{
-       // ToDo: historically this used the free buffer, which was 2744 Bytes long. 
-       // There might be a better size to be defined:
-       #define HF_14B_SNOOP_BUFFER_SIZE 2744
-       uint8_t *dest = BigBuf_malloc(HF_14B_SNOOP_BUFFER_SIZE);
-       uint8_t v = 0;
-       int i;
-       int p = 0;
-
-       // We're using this mode just so that I can test it out; the simulated
-       // tag mode would work just as well and be simpler.
-       FpgaDownloadAndGo(FPGA_BITSTREAM_HF);
-       FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_READER_RX_XCORR | FPGA_HF_READER_RX_XCORR_848_KHZ | FPGA_HF_READER_RX_XCORR_SNOOP);
-
-       // We need to listen to the high-frequency, peak-detected path.
-       SetAdcMuxFor(GPIO_MUXSEL_HIPKD);
-
-       FpgaSetupSsc();
-
-       i = 0;
-       for(;;) {
-               if(AT91C_BASE_SSC->SSC_SR & (AT91C_SSC_TXRDY)) {
-                       AT91C_BASE_SSC->SSC_THR = 0xff;
-               }
-               if(AT91C_BASE_SSC->SSC_SR & (AT91C_SSC_RXRDY)) {
-                       uint8_t r = (uint8_t)AT91C_BASE_SSC->SSC_RHR;
-
-                       v <<= 1;
-                       if(r & 1) {
-                               v |= 1;
-                       }
-                       p++;
-
-                       if(p >= 8) {
-                               dest[i] = v;
-                               v = 0;
-                               p = 0;
-                               i++;
-
-                               if(i >= HF_14B_SNOOP_BUFFER_SIZE) {
-                                       break;
-                               }
-                       }
-               }
-       }
-       DbpString("simulate tag (now type bitsamples)");
-}
-
 void ReadMem(int addr)
 {
        const uint8_t *data = ((uint8_t *)addr);
@@ -310,11 +268,11 @@ void ReadMem(int addr)
 /* osimage version information is linked in */
 extern struct version_information version_information;
 /* bootrom version information is pointed to from _bootphase1_version_pointer */
-extern char *_bootphase1_version_pointer, _flash_start, _flash_end;
+extern char *_bootphase1_version_pointer, _flash_start, _flash_end, _bootrom_start, _bootrom_end, __data_src_start__;
 void SendVersion(void)
 {
-       char temp[512]; /* Limited data payload in USB packets */
-       DbpString("Prox/RFID mark3 RFID instrument");
+       char temp[USB_CMD_DATA_SIZE]; /* Limited data payload in USB packets */
+       char VersionString[USB_CMD_DATA_SIZE] = { '\0' };
 
        /* Try to find the bootrom version information. Expect to find a pointer at
         * symbol _bootphase1_version_pointer, perform slight sanity checks on the
@@ -322,33 +280,79 @@ void SendVersion(void)
         */
        char *bootrom_version = *(char**)&_bootphase1_version_pointer;
        if( bootrom_version < &_flash_start || bootrom_version >= &_flash_end ) {
-               DbpString("bootrom version information appears invalid");
+               strcat(VersionString, "bootrom version information appears invalid\n");
        } else {
                FormatVersionInformation(temp, sizeof(temp), "bootrom: ", bootrom_version);
-               DbpString(temp);
+               strncat(VersionString, temp, sizeof(VersionString) - strlen(VersionString) - 1);
        }
 
        FormatVersionInformation(temp, sizeof(temp), "os: ", &version_information);
-       DbpString(temp);
+       strncat(VersionString, temp, sizeof(VersionString) - strlen(VersionString) - 1);
 
-       FpgaGatherVersion(temp, sizeof(temp));
-       DbpString(temp);
-       // Send Chip ID
-       cmd_send(CMD_ACK,*(AT91C_DBGU_CIDR),0,0,NULL,0);
+       FpgaGatherVersion(FPGA_BITSTREAM_LF, temp, sizeof(temp));
+       strncat(VersionString, temp, sizeof(VersionString) - strlen(VersionString) - 1);
+       FpgaGatherVersion(FPGA_BITSTREAM_HF, temp, sizeof(temp));
+       strncat(VersionString, temp, sizeof(VersionString) - strlen(VersionString) - 1);
+
+       // Send Chip ID and used flash memory
+       uint32_t text_and_rodata_section_size = (uint32_t)&__data_src_start__ - (uint32_t)&_flash_start;
+       uint32_t compressed_data_section_size = common_area.arg1;
+       cmd_send(CMD_ACK, *(AT91C_DBGU_CIDR), text_and_rodata_section_size + compressed_data_section_size, 0, VersionString, strlen(VersionString));
 }
 
-#ifdef WITH_LF
-// samy's sniff and repeat routine
-void SamyRun()
+// measure the USB Speed by sending SpeedTestBufferSize bytes to client and measuring the elapsed time.
+// Note: this mimics GetFromBigbuf(), i.e. we have the overhead of the UsbCommand structure included.
+void printUSBSpeed(void) 
 {
-       DbpString("Stand-alone mode! No PC necessary.");
-       FpgaDownloadAndGo(FPGA_BITSTREAM_LF);
+       Dbprintf("USB Speed:");
+       Dbprintf("  Sending USB packets to client...");
 
-       // 3 possible options? no just 2 for now
-#define OPTS 2
+       #define USB_SPEED_TEST_MIN_TIME 1500    // in milliseconds
+       uint8_t *test_data = BigBuf_get_addr();
+       uint32_t end_time;
 
-       int high[OPTS], low[OPTS];
+       uint32_t start_time = end_time = GetTickCount();
+       uint32_t bytes_transferred = 0;
+       
+       LED_B_ON();
+       while(end_time < start_time + USB_SPEED_TEST_MIN_TIME) {
+               cmd_send(CMD_DOWNLOADED_RAW_ADC_SAMPLES_125K, 0, USB_CMD_DATA_SIZE, 0, test_data, USB_CMD_DATA_SIZE);
+               end_time = GetTickCount();
+               bytes_transferred += USB_CMD_DATA_SIZE;
+       }
+       LED_B_OFF();
+
+       Dbprintf("  Time elapsed:      %dms", end_time - start_time);
+       Dbprintf("  Bytes transferred: %d", bytes_transferred);
+       Dbprintf("  USB Transfer Speed PM3 -> Client = %d Bytes/s", 
+               1000 * bytes_transferred / (end_time - start_time));
 
+}
+       
+/**
+  * Prints runtime information about the PM3.
+**/
+void SendStatus(void)
+{
+       BigBuf_print_status();
+       Fpga_print_status();
+       printConfig(); //LF Sampling config
+       printUSBSpeed();
+       Dbprintf("Various");
+       Dbprintf("  MF_DBGLEVEL......%d", MF_DBGLEVEL);
+       Dbprintf("  ToSendMax........%d",ToSendMax);
+       Dbprintf("  ToSendBit........%d",ToSendBit);
+
+       cmd_send(CMD_ACK,1,0,0,0,0);
+}
+
+#if defined(WITH_ISO14443a_StandAlone) || defined(WITH_LF)
+
+#define OPTS 2
+
+void StandAloneMode()
+{
+       DbpString("Stand-alone mode! No PC necessary.");
        // Oooh pretty -- notify user we're in elite samy mode now
        LED(LED_RED,    200);
        LED(LED_ORANGE, 200);
@@ -360,6 +364,270 @@ void SamyRun()
        LED(LED_ORANGE, 200);
        LED(LED_RED,    200);
 
+}
+
+#endif
+
+
+
+#ifdef WITH_ISO14443a_StandAlone
+void StandAloneMode14a()
+{
+       StandAloneMode();
+       FpgaDownloadAndGo(FPGA_BITSTREAM_HF);
+
+       int selected = 0;
+       int playing = 0, iGotoRecord = 0, iGotoClone = 0;
+       int cardRead[OPTS] = {0};
+       uint8_t readUID[10] = {0};
+       uint32_t uid_1st[OPTS]={0};
+       uint32_t uid_2nd[OPTS]={0};
+       uint32_t uid_tmp1 = 0;
+       uint32_t uid_tmp2 = 0;
+       iso14a_card_select_t hi14a_card[OPTS];
+
+       LED(selected + 1, 0);
+
+       for (;;)
+       {
+               usb_poll();
+               WDT_HIT();
+               SpinDelay(300);
+
+               if (iGotoRecord == 1 || cardRead[selected] == 0)
+               {
+                       iGotoRecord = 0;
+                       LEDsoff();
+                       LED(selected + 1, 0);
+                       LED(LED_RED2, 0);
+
+                       // record
+                       Dbprintf("Enabling iso14443a reader mode for [Bank: %u]...", selected);
+                       /* need this delay to prevent catching some weird data */
+                       SpinDelay(500);
+                       /* Code for reading from 14a tag */
+                       uint8_t uid[10]  ={0};
+                       uint32_t cuid;
+                       iso14443a_setup(FPGA_HF_ISO14443A_READER_MOD);
+
+                       for ( ; ; )
+                       {
+                               WDT_HIT();
+                               if (BUTTON_PRESS()) {
+                                       if (cardRead[selected]) {
+                                               Dbprintf("Button press detected -- replaying card in bank[%d]", selected);
+                                               break;
+                                       }
+                                       else if (cardRead[(selected+1)%OPTS]) {
+                                               Dbprintf("Button press detected but no card in bank[%d] so playing from bank[%d]", selected, (selected+1)%OPTS);
+                                               selected = (selected+1)%OPTS;
+                                               break; // playing = 1;
+                                       }
+                                       else {
+                                               Dbprintf("Button press detected but no stored tag to play. (Ignoring button)");
+                                               SpinDelay(300);
+                                       }
+                               }
+                               if (!iso14443a_select_card(uid, &hi14a_card[selected], &cuid))
+                                       continue;
+                               else
+                               {
+                                       Dbprintf("Read UID:"); Dbhexdump(10,uid,0);
+                                       memcpy(readUID,uid,10*sizeof(uint8_t));
+                                       uint8_t *dst = (uint8_t *)&uid_tmp1;
+                                       // Set UID byte order
+                                       for (int i=0; i<4; i++)
+                                               dst[i] = uid[3-i];
+                                       dst = (uint8_t *)&uid_tmp2;
+                                       for (int i=0; i<4; i++)
+                                               dst[i] = uid[7-i];
+                                       if (uid_1st[(selected+1)%OPTS] == uid_tmp1 && uid_2nd[(selected+1)%OPTS] == uid_tmp2) {
+                                               Dbprintf("Card selected has same UID as what is stored in the other bank. Skipping.");
+                                       }
+                                       else {
+                                               if (uid_tmp2) {
+                                                       Dbprintf("Bank[%d] received a 7-byte UID",selected);
+                                                       uid_1st[selected] = (uid_tmp1)>>8;
+                                                       uid_2nd[selected] = (uid_tmp1<<24) + (uid_tmp2>>8);
+                                               }
+                                               else {
+                                                       Dbprintf("Bank[%d] received a 4-byte UID",selected);
+                                                       uid_1st[selected] = uid_tmp1;
+                                                       uid_2nd[selected] = uid_tmp2;
+                                               }
+                                               break;
+                                       }
+                               }
+                       }
+                       Dbprintf("ATQA = %02X%02X",hi14a_card[selected].atqa[0],hi14a_card[selected].atqa[1]);
+                       Dbprintf("SAK = %02X",hi14a_card[selected].sak);
+                       LEDsoff();
+                       LED(LED_GREEN,  200);
+                       LED(LED_ORANGE, 200);
+                       LED(LED_GREEN,  200);
+                       LED(LED_ORANGE, 200);
+
+                       LEDsoff();
+                       LED(selected + 1, 0);
+
+                       // Next state is replay:
+                       playing = 1;
+
+                       cardRead[selected] = 1;
+               }
+               /* MF Classic UID clone */
+               else if (iGotoClone==1)
+               {
+                       iGotoClone=0;
+                       LEDsoff();
+                       LED(selected + 1, 0);
+                       LED(LED_ORANGE, 250);
+
+
+                       // record
+                       Dbprintf("Preparing to Clone card [Bank: %x]; uid: %08x", selected, uid_1st[selected]);
+
+                       // wait for button to be released
+                       while(BUTTON_PRESS())
+                       {
+                               // Delay cloning until card is in place
+                               WDT_HIT();
+                       }
+                       Dbprintf("Starting clone. [Bank: %u]", selected);
+                       // need this delay to prevent catching some weird data
+                       SpinDelay(500);
+                       // Begin clone function here:
+                       /* Example from client/mifarehost.c for commanding a block write for "magic Chinese" cards:
+                                       UsbCommand c = {CMD_MIFARE_CSETBLOCK, {wantWipe, params & (0xFE | (uid == NULL ? 0:1)), blockNo}};
+                                       memcpy(c.d.asBytes, data, 16);
+                                       SendCommand(&c);
+
+                                       Block read is similar:
+                                       UsbCommand c = {CMD_MIFARE_CGETBLOCK, {params, 0, blockNo}};
+                                       We need to imitate that call with blockNo 0 to set a uid.
+
+                                       The get and set commands are handled in this file:
+                                       // Work with "magic Chinese" card
+                                       case CMD_MIFARE_CSETBLOCK:
+                                               MifareCSetBlock(c->arg[0], c->arg[1], c->arg[2], c->d.asBytes);
+                                               break;
+                                       case CMD_MIFARE_CGETBLOCK:
+                                               MifareCGetBlock(c->arg[0], c->arg[1], c->arg[2], c->d.asBytes);
+                                               break;
+
+                               mfCSetUID provides example logic for UID set workflow:
+                                       -Read block0 from card in field with MifareCGetBlock()
+                                       -Configure new values without replacing reserved bytes
+                                                       memcpy(block0, uid, 4); // Copy UID bytes from byte array
+                                                       // Mifare UID BCC
+                                                       block0[4] = block0[0]^block0[1]^block0[2]^block0[3]; // BCC on byte 5
+                                                       Bytes 5-7 are reserved SAK and ATQA for mifare classic
+                                       -Use mfCSetBlock(0, block0, oldUID, wantWipe, CSETBLOCK_SINGLE_OPER) to write it
+                       */
+                       uint8_t oldBlock0[16] = {0}, newBlock0[16] = {0}, testBlock0[16] = {0};
+                       // arg0 = Flags == CSETBLOCK_SINGLE_OPER=0x1F, arg1=returnSlot, arg2=blockNo
+                       MifareCGetBlock(0x3F, 1, 0, oldBlock0);
+                       if (oldBlock0[0] == 0 && oldBlock0[0] == oldBlock0[1]  && oldBlock0[1] == oldBlock0[2] && oldBlock0[2] == oldBlock0[3]) {
+                               Dbprintf("No changeable tag detected. Returning to replay mode for bank[%d]", selected);
+                               playing = 1;
+                       }
+                       else {
+                               Dbprintf("UID from target tag: %02X%02X%02X%02X", oldBlock0[0],oldBlock0[1],oldBlock0[2],oldBlock0[3]);
+                               memcpy(newBlock0,oldBlock0,16);
+                               // Copy uid_1st for bank (2nd is for longer UIDs not supported if classic)
+
+                               newBlock0[0] = uid_1st[selected]>>24;
+                               newBlock0[1] = 0xFF & (uid_1st[selected]>>16);
+                               newBlock0[2] = 0xFF & (uid_1st[selected]>>8);
+                               newBlock0[3] = 0xFF & (uid_1st[selected]);
+                               newBlock0[4] = newBlock0[0]^newBlock0[1]^newBlock0[2]^newBlock0[3];
+                               // arg0 = needWipe, arg1 = workFlags, arg2 = blockNo, datain
+                               MifareCSetBlock(0, 0xFF,0, newBlock0);
+                               MifareCGetBlock(0x3F, 1, 0, testBlock0);
+                               if (memcmp(testBlock0,newBlock0,16)==0)
+                               {
+                                       DbpString("Cloned successfull!");
+                                       cardRead[selected] = 0; // Only if the card was cloned successfully should we clear it
+                                       playing = 0;
+                                       iGotoRecord = 1;
+                                       selected = (selected+1) % OPTS;
+                               }
+                               else {
+                                       Dbprintf("Clone failed. Back to replay mode on bank[%d]", selected);
+                                       playing = 1;
+                               }
+                       }
+                       LEDsoff();
+                       LED(selected + 1, 0);
+
+               }
+               // Change where to record (or begin playing)
+               else if (playing==1) // button_pressed == BUTTON_SINGLE_CLICK && cardRead[selected])
+               {
+                       LEDsoff();
+                       LED(selected + 1, 0);
+
+                       // Begin transmitting
+                       if (playing)
+                       {
+                               LED(LED_GREEN, 0);
+                               DbpString("Playing");
+                               for ( ; ; ) {
+                                       WDT_HIT();
+                                       int button_action = BUTTON_HELD(1000);
+                                       if (button_action == 0) { // No button action, proceed with sim
+                                               uint8_t data[512] = {0}; // in case there is a read command received we shouldn't break
+                                               Dbprintf("Simulating ISO14443a tag with uid[0]: %08x, uid[1]: %08x [Bank: %u]", uid_1st[selected],uid_2nd[selected],selected);
+                                               if (hi14a_card[selected].sak == 8 && hi14a_card[selected].atqa[0] == 4 && hi14a_card[selected].atqa[1] == 0) {
+                                                       DbpString("Mifare Classic");
+                                                       SimulateIso14443aTag(1,uid_1st[selected], uid_2nd[selected], data); // Mifare Classic
+                                               }
+                                               else if (hi14a_card[selected].sak == 0 && hi14a_card[selected].atqa[0] == 0x44 && hi14a_card[selected].atqa[1] == 0) {
+                                                       DbpString("Mifare Ultralight");
+                                                       SimulateIso14443aTag(2,uid_1st[selected],uid_2nd[selected],data); // Mifare Ultralight
+                                               }
+                                               else if (hi14a_card[selected].sak == 20 && hi14a_card[selected].atqa[0] == 0x44 && hi14a_card[selected].atqa[1] == 3) {
+                                                       DbpString("Mifare DESFire");
+                                                       SimulateIso14443aTag(3,uid_1st[selected],uid_2nd[selected],data); // Mifare DESFire
+                                               }
+                                               else {
+                                                       Dbprintf("Unrecognized tag type -- defaulting to Mifare Classic emulation");
+                                                       SimulateIso14443aTag(1,uid_1st[selected], uid_2nd[selected], data);
+                                               }
+                                       }
+                                       else if (button_action == BUTTON_SINGLE_CLICK) {
+                                               selected = (selected + 1) % OPTS;
+                                               Dbprintf("Done playing. Switching to record mode on bank %d",selected);
+                                               iGotoRecord = 1;
+                                               break;
+                                       }
+                                       else if (button_action == BUTTON_HOLD) {
+                                               Dbprintf("Playtime over. Begin cloning...");
+                                               iGotoClone = 1;
+                                               break;
+                                       }
+                                       WDT_HIT();
+                               }
+
+                               /* We pressed a button so ignore it here with a delay */
+                               SpinDelay(300);
+                               LEDsoff();
+                               LED(selected + 1, 0);
+                       }
+                       else
+                               while(BUTTON_PRESS())
+                                       WDT_HIT();
+               }
+       }
+}
+#elif WITH_LF
+// samy's sniff and repeat routine
+void SamyRun()
+{
+       StandAloneMode();
+       FpgaDownloadAndGo(FPGA_BITSTREAM_LF);
+
+       int high[OPTS], low[OPTS];
        int selected = 0;
        int playing = 0;
        int cardRead = 0;
@@ -370,7 +638,7 @@ void SamyRun()
        for (;;)
        {
                usb_poll();
-    WDT_HIT();
+               WDT_HIT();
 
                // Was our button held down or pressed?
                int button_pressed = BUTTON_HELD(1000);
@@ -394,7 +662,7 @@ void SamyRun()
                        SpinDelay(500);
 
                        CmdHIDdemodFSK(1, &high[selected], &low[selected], 0);
-                       Dbprintf("Recorded %x %x %x", selected, high[selected], low[selected]);
+                       Dbprintf("Recorded %x %x%08x", selected, high[selected], low[selected]);
 
                        LEDsoff();
                        LED(selected + 1, 0);
@@ -415,7 +683,7 @@ void SamyRun()
                                        LED(LED_ORANGE, 0);
 
                                        // record
-                                       Dbprintf("Cloning %x %x %x", selected, high[selected], low[selected]);
+                                       Dbprintf("Cloning %x %x%08x", selected, high[selected], low[selected]);
 
                                        // wait for button to be released
                                        while(BUTTON_PRESS())
@@ -424,8 +692,8 @@ void SamyRun()
                                        /* need this delay to prevent catching some weird data */
                                        SpinDelay(500);
 
-                                       CopyHIDtoT55x7(high[selected], low[selected], 0, 0);
-                                       Dbprintf("Cloned %x %x %x", selected, high[selected], low[selected]);
+                                       CopyHIDtoT55x7(0, high[selected], low[selected], 0);
+                                       Dbprintf("Cloned %x %x%08x", selected, high[selected], low[selected]);
 
                                        LEDsoff();
                                        LED(selected + 1, 0);
@@ -458,7 +726,7 @@ void SamyRun()
                                // wait for button to be released
                                while(BUTTON_PRESS())
                                        WDT_HIT();
-                               Dbprintf("%x %x %x", selected, high[selected], low[selected]);
+                               Dbprintf("%x %x%08x", selected, high[selected], low[selected]);
                                CmdHIDsimTAG(high[selected], low[selected], 0);
                                DbpString("Done playing");
                                if (BUTTON_HELD(1000) > 0)
@@ -483,8 +751,8 @@ void SamyRun()
                }
        }
 }
-#endif
 
+#endif
 /*
 OBJECTIVE
 Listen and detect an external reader. Determine the best location
@@ -678,7 +946,7 @@ void UsbPacketReceived(uint8_t *packet, int len)
                        CmdIOdemodFSK(c->arg[0], 0, 0, 1);
                        break;
                case CMD_IO_CLONE_TAG:
-                       CopyIOtoT55x7(c->arg[0], c->arg[1], c->d.asBytes[0]);
+                       CopyIOtoT55x7(c->arg[0], c->arg[1]);
                        break;
                case CMD_EM410X_DEMOD:
                        CmdEM410xdemod(c->arg[0], 0, 0, 1);
@@ -707,17 +975,22 @@ void UsbPacketReceived(uint8_t *packet, int len)
                        CopyIndala224toT55x7(c->d.asDwords[0], c->d.asDwords[1], c->d.asDwords[2], c->d.asDwords[3], c->d.asDwords[4], c->d.asDwords[5], c->d.asDwords[6]);
                        break;
                case CMD_T55XX_READ_BLOCK:
-                       T55xxReadBlock(c->arg[1], c->arg[2],c->d.asBytes[0]);
+                       T55xxReadBlock(c->arg[0], c->arg[1], c->arg[2]);
                        break;
                case CMD_T55XX_WRITE_BLOCK:
                        T55xxWriteBlock(c->arg[0], c->arg[1], c->arg[2], c->d.asBytes[0]);
                        break;
-               case CMD_T55XX_READ_TRACE:
-                       T55xxReadTrace();
+               case CMD_T55XX_WAKEUP:
+                       T55xxWakeUp(c->arg[0]);
+                       break;
+               case CMD_T55XX_RESET_READ:
+                       T55xxResetRead();
                        break;
                case CMD_PCF7931_READ:
                        ReadPCF7931();
-                       cmd_send(CMD_ACK,0,0,0,0,0);
+                       break;
+               case CMD_PCF7931_WRITE:
+                       WritePCF7931(c->d.asBytes[0],c->d.asBytes[1],c->d.asBytes[2],c->d.asBytes[3],c->d.asBytes[4],c->d.asBytes[5],c->d.asBytes[6], c->d.asBytes[9], c->d.asBytes[7]-128,c->d.asBytes[8]-128, c->arg[0], c->arg[1], c->arg[2]);
                        break;
                case CMD_EM4X_READ_WORD:
                        EM4xReadWord(c->arg[1], c->arg[2],c->d.asBytes[0]);
@@ -725,6 +998,12 @@ void UsbPacketReceived(uint8_t *packet, int len)
                case CMD_EM4X_WRITE_WORD:
                        EM4xWriteWord(c->arg[0], c->arg[1], c->arg[2], c->d.asBytes[0]);
                        break;
+               case CMD_AWID_DEMOD_FSK: // Set realtime AWID demodulation
+                       CmdAWIDdemodFSK(c->arg[0], 0, 0, 1);
+                       break;
+               case CMD_VIKING_CLONE_TAG:
+                       CopyVikingtoT55xx(c->arg[0], c->arg[1], c->arg[2]);
+                       break;
 #endif
 
 #ifdef WITH_HITAG
@@ -782,20 +1061,17 @@ void UsbPacketReceived(uint8_t *packet, int len)
 #endif
 
 #ifdef WITH_ISO14443b
-               case CMD_ACQUIRE_RAW_ADC_SAMPLES_ISO_14443:
-                       AcquireRawAdcSamplesIso14443(c->arg[0]);
-                       break;
                case CMD_READ_SRI512_TAG:
-                       ReadSTMemoryIso14443(0x0F);
+                       ReadSTMemoryIso14443b(0x0F);
                        break;
                case CMD_READ_SRIX4K_TAG:
-                       ReadSTMemoryIso14443(0x7F);
+                       ReadSTMemoryIso14443b(0x7F);
                        break;
-               case CMD_SNOOP_ISO_14443:
-                       SnoopIso14443();
+               case CMD_SNOOP_ISO_14443B:
+                       SnoopIso14443b();
                        break;
-               case CMD_SIMULATE_TAG_ISO_14443:
-                       SimulateIso14443Tag();
+               case CMD_SIMULATE_TAG_ISO_14443B:
+                       SimulateIso14443bTag();
                        break;
                case CMD_ISO_14443B_COMMAND:
                        SendRawCommand14443B(c->arg[0],c->arg[1],c->arg[2],c->d.asBytes);
@@ -816,6 +1092,9 @@ void UsbPacketReceived(uint8_t *packet, int len)
                case CMD_EPA_PACE_COLLECT_NONCE:
                        EPA_PACE_Collect_Nonce(c);
                        break;
+               case CMD_EPA_PACE_REPLAY:
+                       EPA_PACE_Replay(c);
+                       break;
                        
                case CMD_READER_MIFARE:
                        ReaderMifare(c->arg[0]);
@@ -841,11 +1120,11 @@ void UsbPacketReceived(uint8_t *packet, int len)
                case CMD_MIFARE_WRITEBL:
                        MifareWriteBlock(c->arg[0], c->arg[1], c->arg[2], c->d.asBytes);
                        break;
-               case CMD_MIFAREU_WRITEBL_COMPAT:
-                       MifareUWriteBlock(c->arg[0], c->d.asBytes);
-                       break;
+               //case CMD_MIFAREU_WRITEBL_COMPAT:
+                       //MifareUWriteBlockCompat(c->arg[0], c->d.asBytes);
+                       //break;
                case CMD_MIFAREU_WRITEBL:
-                       MifareUWriteBlock_Special(c->arg[0], c->d.asBytes);
+                       MifareUWriteBlock(c->arg[0], c->arg[1], c->d.asBytes);
                        break;
                case CMD_MIFARE_NESTED:
                        MifareNested(c->arg[0], c->arg[1], c->arg[2], c->d.asBytes);
@@ -904,16 +1183,35 @@ void UsbPacketReceived(uint8_t *packet, int len)
                        ReaderIClass(c->arg[0]);
                        break;
                case CMD_READER_ICLASS_REPLAY:
-                   ReaderIClass_Replay(c->arg[0], c->d.asBytes);
+                       ReaderIClass_Replay(c->arg[0], c->d.asBytes);
                        break;
-       case CMD_ICLASS_EML_MEMSET:
+               case CMD_ICLASS_EML_MEMSET:
                        emlSet(c->d.asBytes,c->arg[0], c->arg[1]);
                        break;
+               case CMD_ICLASS_WRITEBLOCK:
+                       iClass_WriteBlock(c->arg[0], c->d.asBytes);
+                       break;
+               case CMD_ICLASS_READCHECK:  // auth step 1
+                       iClass_ReadCheck(c->arg[0], c->arg[1]);
+                       break;
+               case CMD_ICLASS_READBLOCK:
+                       iClass_ReadBlk(c->arg[0]);
+                       break;
+               case CMD_ICLASS_AUTHENTICATION: //check
+                       iClass_Authentication(c->d.asBytes);
+                       break;
+               case CMD_ICLASS_DUMP:
+                       iClass_Dump(c->arg[0], c->arg[1]);
+                       break;
+               case CMD_ICLASS_CLONE:
+                       iClass_Clone(c->arg[0], c->arg[1], c->d.asBytes);
+                       break;
 #endif
-
-               case CMD_SIMULATE_TAG_HF_LISTEN:
-                       SimulateTagHfListen();
+#ifdef WITH_HFSNOOP
+               case CMD_HF_SNIFFER:
+                       HfSnoop(c->arg[0], c->arg[1]);
                        break;
+#endif
 
                case CMD_BUFF_CLEAR:
                        BigBuf_Clear();
@@ -977,7 +1275,12 @@ void UsbPacketReceived(uint8_t *packet, int len)
                case CMD_VERSION:
                        SendVersion();
                        break;
-
+               case CMD_STATUS:
+                       SendStatus();
+                       break;
+               case CMD_PING:
+                       cmd_send(CMD_ACK,0,0,0,0,0);
+                       break;
 #ifdef WITH_LCD
                case CMD_LCD_RESET:
                        LCDReset();
@@ -1045,7 +1348,7 @@ void  __attribute__((noreturn)) AppMain(void)
        AT91C_BASE_PMC->PMC_SCER = AT91C_PMC_PCK0;
        // PCK0 is PLL clock / 4 = 96Mhz / 4 = 24Mhz
        AT91C_BASE_PMC->PMC_PCKR[0] = AT91C_PMC_CSS_PLL_CLK |
-               AT91C_PMC_PRES_CLK_4;
+               AT91C_PMC_PRES_CLK_4; //  4 for 24Mhz pck0, 2 for 48 MHZ pck0
        AT91C_BASE_PIOA->PIO_OER = GPIO_PCK0;
 
        // Reset SPI
@@ -1076,8 +1379,16 @@ void  __attribute__((noreturn)) AppMain(void)
                WDT_HIT();
 
 #ifdef WITH_LF
+#ifndef WITH_ISO14443a_StandAlone
                if (BUTTON_HELD(1000) > 0)
                        SamyRun();
+#endif
+#endif
+#ifdef WITH_ISO14443a
+#ifdef WITH_ISO14443a_StandAlone
+               if (BUTTON_HELD(1000) > 0)
+                       StandAloneMode14a();
+#endif
 #endif
        }
 }
index 57fb55fd3d38c051c3f3a2b509cf672462173b42..c8397c38cdf225cc1d810f8dc75916e653c428c4 100644 (file)
@@ -19,6 +19,7 @@
 #include "mifare.h"
 #include "../common/crc32.h"
 #include "BigBuf.h"
+#include "fpgaloader.h"
 
 extern const uint8_t OddByteParity[256];
 extern int rsamples;   // = 0;
@@ -50,60 +51,6 @@ void ListenReaderField(int limit);
 extern int ToSendMax;
 extern uint8_t ToSend[];
 
-/// fpga.h
-void FpgaSendCommand(uint16_t cmd, uint16_t v);
-void FpgaWriteConfWord(uint8_t v);
-void FpgaDownloadAndGo(int bitstream_version);
-int FpgaGatherBitstreamVersion();
-void FpgaGatherVersion(char *dst, int len);
-void FpgaSetupSsc(void);
-void SetupSpi(int mode);
-bool FpgaSetupSscDma(uint8_t *buf, int len);
-#define FpgaDisableSscDma(void)        AT91C_BASE_PDC_SSC->PDC_PTCR = AT91C_PDC_RXTDIS;
-#define FpgaEnableSscDma(void) AT91C_BASE_PDC_SSC->PDC_PTCR = AT91C_PDC_RXTEN;
-void SetAdcMuxFor(uint32_t whichGpio);
-
-// Definitions for the FPGA commands.
-#define FPGA_CMD_SET_CONFREG                                   (1<<12)
-#define FPGA_CMD_SET_DIVISOR                                   (2<<12)
-#define FPGA_CMD_SET_USER_BYTE1                                        (3<<12)
-// Definitions for the FPGA configuration word.
-// LF
-#define FPGA_MAJOR_MODE_LF_ADC                                 (0<<5)
-#define FPGA_MAJOR_MODE_LF_EDGE_DETECT                 (1<<5)
-#define FPGA_MAJOR_MODE_LF_PASSTHRU                            (2<<5)
-// HF
-#define FPGA_MAJOR_MODE_HF_READER_TX                           (0<<5)
-#define FPGA_MAJOR_MODE_HF_READER_RX_XCORR                     (1<<5)
-#define FPGA_MAJOR_MODE_HF_SIMULATOR                           (2<<5)
-#define FPGA_MAJOR_MODE_HF_ISO14443A                           (3<<5)
-// BOTH
-#define FPGA_MAJOR_MODE_OFF                                    (7<<5)
-// Options for LF_ADC
-#define FPGA_LF_ADC_READER_FIELD                               (1<<0)
-// Options for LF_EDGE_DETECT
-#define FPGA_CMD_SET_EDGE_DETECT_THRESHOLD                     FPGA_CMD_SET_USER_BYTE1
-#define FPGA_LF_EDGE_DETECT_READER_FIELD                       (1<<0)
-#define FPGA_LF_EDGE_DETECT_TOGGLE_MODE                                (1<<1)
-// Options for the HF reader, tx to tag
-#define FPGA_HF_READER_TX_SHALLOW_MOD                          (1<<0)
-// Options for the HF reader, correlating against rx from tag
-#define FPGA_HF_READER_RX_XCORR_848_KHZ                                (1<<0)
-#define FPGA_HF_READER_RX_XCORR_SNOOP                          (1<<1)
-#define FPGA_HF_READER_RX_XCORR_QUARTER_FREQ                   (1<<2)
-// Options for the HF simulated tag, how to modulate
-#define FPGA_HF_SIMULATOR_NO_MODULATION                                (0<<0)
-#define FPGA_HF_SIMULATOR_MODULATE_BPSK                                (1<<0)
-#define FPGA_HF_SIMULATOR_MODULATE_212K                                (2<<0)
-#define FPGA_HF_SIMULATOR_MODULATE_424K                                (4<<0)
-#define FPGA_HF_SIMULATOR_MODULATE_424K_8BIT           0x5//101
-
-// Options for ISO14443A
-#define FPGA_HF_ISO14443A_SNIFFER                              (0<<0)
-#define FPGA_HF_ISO14443A_TAGSIM_LISTEN                                (1<<0)
-#define FPGA_HF_ISO14443A_TAGSIM_MOD                           (2<<0)
-#define FPGA_HF_ISO14443A_READER_LISTEN                                (3<<0)
-#define FPGA_HF_ISO14443A_READER_MOD                           (4<<0)
 
 /// lfops.h
 extern uint8_t decimation;
@@ -111,40 +58,42 @@ extern uint8_t bits_per_sample ;
 extern bool averaging;
 
 void AcquireRawAdcSamples125k(int divisor);
-void ModThenAcquireRawAdcSamples125k(int delay_off,int period_0,int period_1,uint8_t *command);
+void ModThenAcquireRawAdcSamples125k(uint32_t delay_off, uint32_t period_0, uint32_t period_1, uint8_t *command);
 void ReadTItag(void);
 void WriteTItag(uint32_t idhi, uint32_t idlo, uint16_t crc);
+
 void AcquireTiType(void);
 void AcquireRawBitsTI(void);
 void SimulateTagLowFrequency(int period, int gap, int ledcontrol);
+void SimulateTagLowFrequencyBidir(int divisor, int max_bitlen);
 void CmdHIDsimTAG(int hi, int lo, int ledcontrol);
 void CmdFSKsimTAG(uint16_t arg1, uint16_t arg2, size_t size, uint8_t *BitStream);
 void CmdASKsimTag(uint16_t arg1, uint16_t arg2, size_t size, uint8_t *BitStream);
 void CmdPSKsimTag(uint16_t arg1, uint16_t arg2, size_t size, uint8_t *BitStream);
 void CmdHIDdemodFSK(int findone, int *high, int *low, int ledcontrol);
+void CmdAWIDdemodFSK(int findone, int *high, int *low, int ledcontrol); // Realtime demodulation mode for AWID26
 void CmdEM410xdemod(int findone, int *high, int *low, int ledcontrol);
 void CmdIOdemodFSK(int findone, int *high, int *low, int ledcontrol);
-void CopyIOtoT55x7(uint32_t hi, uint32_t lo, uint8_t longFMT); // Clone an ioProx card to T5557/T5567
-void SimulateTagLowFrequencyBidir(int divisor, int max_bitlen);
+void CopyIOtoT55x7(uint32_t hi, uint32_t lo); // Clone an ioProx card to T5557/T5567
 void CopyHIDtoT55x7(uint32_t hi2, uint32_t hi, uint32_t lo, uint8_t longFMT); // Clone an HID card to T5557/T5567
+void CopyVikingtoT55xx(uint32_t block1, uint32_t block2, uint8_t Q5);
 void WriteEM410x(uint32_t card, uint32_t id_hi, uint32_t id_lo);
-void CopyIndala64toT55x7(int hi, int lo); // Clone Indala 64-bit tag by UID to T55x7
-void CopyIndala224toT55x7(int uid1, int uid2, int uid3, int uid4, int uid5, int uid6, int uid7); // Clone Indala 224-bit tag by UID to T55x7
+void CopyIndala64toT55x7(uint32_t hi, uint32_t lo); // Clone Indala 64-bit tag by UID to T55x7
+void CopyIndala224toT55x7(uint32_t uid1, uint32_t uid2, uint32_t uid3, uint32_t uid4, uint32_t uid5, uint32_t uid6, uint32_t uid7); // Clone Indala 224-bit tag by UID to T55x7
+void T55xxResetRead(void);
 void T55xxWriteBlock(uint32_t Data, uint32_t Block, uint32_t Pwd, uint8_t PwdMode);
-void T55xxReadBlock(uint32_t Block, uint32_t Pwd, uint8_t PwdMode );
-void T55xxReadTrace(void);
-int DemodPCF7931(uint8_t **outBlocks);
-int IsBlock0PCF7931(uint8_t *Block);
-int IsBlock1PCF7931(uint8_t *Block);
-void ReadPCF7931();
+void T55xxReadBlock(uint16_t arg0, uint8_t Block, uint32_t Pwd);
+void T55xxWakeUp(uint32_t Pwd);
+void TurnReadLFOn();
+//void T55xxReadTrace(void);
 void EM4xReadWord(uint8_t Address, uint32_t Pwd, uint8_t PwdMode);
 void EM4xWriteWord(uint32_t Data, uint8_t Address, uint32_t Pwd, uint8_t PwdMode);
 
 /// iso14443.h
-void SimulateIso14443Tag(void);
-void AcquireRawAdcSamplesIso14443(uint32_t parameter);
-void ReadSTMemoryIso14443(uint32_t);
-void RAMFUNC SnoopIso14443(void);
+void SimulateIso14443bTag(void);
+void AcquireRawAdcSamplesIso14443b(uint32_t parameter);
+void ReadSTMemoryIso14443b(uint32_t);
+void RAMFUNC SnoopIso14443b(void);
 void SendRawCommand14443B(uint32_t, uint32_t, uint8_t, uint8_t[]);
 
 /// iso14443a.h
@@ -160,6 +109,7 @@ void RAMFUNC SniffMifare(uint8_t param);
 
 /// epa.h
 void EPA_PACE_Collect_Nonce(UsbCommand * c);
+void EPA_PACE_Replay(UsbCommand *c);
 
 // mifarecmd.h
 void ReaderMifare(bool first_try);
@@ -170,10 +120,10 @@ void MifareUC_Auth(uint8_t arg0, uint8_t *datain);
 void MifareUReadCard(uint8_t arg0, uint16_t arg1, uint8_t arg2, uint8_t *datain);
 void MifareReadSector(uint8_t arg0, uint8_t arg1, uint8_t arg2, uint8_t *datain);
 void MifareWriteBlock(uint8_t arg0, uint8_t arg1, uint8_t arg2, uint8_t *datain);
-void MifareUWriteBlock(uint8_t arg0,uint8_t *datain);
-void MifareUWriteBlock_Special(uint8_t arg0,uint8_t *datain);
+//void MifareUWriteBlockCompat(uint8_t arg0,uint8_t *datain);
+void MifareUWriteBlock(uint8_t arg0, uint8_t arg1, uint8_t *datain);
 void MifareNested(uint32_t arg0, uint32_t arg1, uint32_t arg2, uint8_t *datain);
-void MifareChkKeys(uint8_t arg0, uint8_t arg1, uint8_t arg2, uint8_t *datain);
+void MifareChkKeys(uint16_t arg0, uint8_t arg1, uint8_t arg2, uint8_t *datain);
 void Mifare1ksim(uint8_t arg0, uint8_t arg1, uint8_t arg2, uint8_t *datain);
 void MifareSetDbgLvl(uint32_t arg0, uint32_t arg1, uint32_t arg2, uint8_t *datain);
 void MifareEMemClr(uint32_t arg0, uint32_t arg1, uint32_t arg2, uint8_t *datain);
@@ -201,9 +151,6 @@ void        OnSuccess();
 void   OnError(uint8_t reason);
 
 
-
-
-
 /// iso15693.h
 void RecordRawAdcSamplesIso15693(void);
 void AcquireRawAdcSamplesIso15693(void);
@@ -219,6 +166,13 @@ void SimulateIClass(uint32_t arg0, uint32_t arg1, uint32_t arg2, uint8_t *datain
 void ReaderIClass(uint8_t arg0);
 void ReaderIClass_Replay(uint8_t arg0,uint8_t *MAC);
 void IClass_iso14443A_GetPublic(uint8_t arg0);
+void iClass_Authentication(uint8_t *MAC);
+void iClass_WriteBlock(uint8_t blockNo, uint8_t *data);
+void iClass_ReadBlk(uint8_t blockNo);
+bool iClass_ReadBlock(uint8_t blockNo, uint8_t *readdata);
+void iClass_Dump(uint8_t blockno, uint8_t numblks);
+void iClass_Clone(uint8_t startblock, uint8_t endblock, uint8_t *data);
+void iClass_ReadCheck(uint8_t  blockNo, uint8_t keyType);
 
 // hitag2.h
 void SnoopHitag(uint32_t type);
@@ -230,5 +184,6 @@ bool cmd_receive(UsbCommand* cmd);
 bool cmd_send(uint32_t cmd, uint32_t arg0, uint32_t arg1, uint32_t arg2, void* data, size_t len);
 
 /// util.h
+void HfSnoop(int , int);
 
 #endif
index a81df9c8d4234c7bd2bd5432b0a503f9a1c6ba36..f1aa80da20a0f4d8eedc7c4b0d84a9d6d882d555 100644 (file)
@@ -274,7 +274,7 @@ uint32_t des_f(uint32_t r, uint8_t* kr){
        uint64_t data;
        uint8_t *sbp; /* sboxpointer */ 
        permute((uint8_t*)e_permtab, (uint8_t*)&r, (uint8_t*)&data);
-       for(i=0; i<7; ++i)
+       for(i=0; i<6; ++i)
                ((uint8_t*)&data)[i] ^= kr[i];
        
        /* Sbox substitution */
index 0006d59d01c03fd4944caefef829771b1b8068fc..50c7d87804dbcd2fc9bc846387ef46ec613bdf05 100644 (file)
@@ -5,17 +5,18 @@
 // at your option, any later version. See the LICENSE.txt file for the text of
 // the license.
 //-----------------------------------------------------------------------------
-// Routines to support the German eletronic "Personalausweis" (ID card)
+// Routines to support the German electronic "Personalausweis" (ID card)
 // Note that the functions which do not implement USB commands do NOT initialize
 // the card (with iso14443a_select_card etc.). If You want to use these
 // functions, You need to do the setup before calling them!
 //-----------------------------------------------------------------------------
 
 #include "iso14443a.h"
+#include "iso14443b.h"
 #include "epa.h"
 #include "cmd.h"
 
-// Protocol and Parameter Selection Request
+// Protocol and Parameter Selection Request for ISO 14443 type A cards
 // use regular (1x) speed in both directions
 // CRC is already included
 static const uint8_t pps[] = {0xD0, 0x11, 0x00, 0x52, 0xA6};
@@ -74,6 +75,54 @@ static const uint8_t oid_pace_start[] = {
     0x04 // id-PACE
 };
 
+// APDUs for replaying:
+// MSE: Set AT (initiate PACE)
+static uint8_t apdu_replay_mse_set_at_pace[41];
+// General Authenticate (Get Nonce)
+static uint8_t apdu_replay_general_authenticate_pace_get_nonce[8];
+// General Authenticate (Map Nonce)
+static uint8_t apdu_replay_general_authenticate_pace_map_nonce[75];
+// General Authenticate (Mutual Authenticate)
+static uint8_t apdu_replay_general_authenticate_pace_mutual_authenticate[75];
+// General Authenticate (Perform Key Agreement)
+static uint8_t apdu_replay_general_authenticate_pace_perform_key_agreement[18];
+// pointers to the APDUs (for iterations)
+static struct {
+       uint8_t len;
+       uint8_t *data;
+} const apdus_replay[] = {
+       {sizeof(apdu_replay_mse_set_at_pace), apdu_replay_mse_set_at_pace},
+       {sizeof(apdu_replay_general_authenticate_pace_get_nonce), apdu_replay_general_authenticate_pace_get_nonce},
+       {sizeof(apdu_replay_general_authenticate_pace_map_nonce), apdu_replay_general_authenticate_pace_map_nonce},
+       {sizeof(apdu_replay_general_authenticate_pace_mutual_authenticate), apdu_replay_general_authenticate_pace_mutual_authenticate},
+       {sizeof(apdu_replay_general_authenticate_pace_perform_key_agreement), apdu_replay_general_authenticate_pace_perform_key_agreement}
+};
+
+// lengths of the replay APDUs
+static uint8_t apdu_lengths_replay[5];
+
+// type of card (ISO 14443 A or B)
+static char iso_type = 0;
+
+//-----------------------------------------------------------------------------
+// Wrapper for sending APDUs to type A and B cards
+//-----------------------------------------------------------------------------
+int EPA_APDU(uint8_t *apdu, size_t length, uint8_t *response)
+{
+       switch(iso_type)
+       {
+               case 'a':
+                       return iso14_apdu(apdu, (uint16_t) length, response);
+                       break;
+               case 'b':
+                       return iso14443b_apdu(apdu, length, response);
+                       break;
+               default:
+                       return 0;
+                       break;
+       }
+}
+
 //-----------------------------------------------------------------------------
 // Closes the communication channel and turns off the field
 //-----------------------------------------------------------------------------
@@ -81,6 +130,7 @@ void EPA_Finish()
 {
        FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF);
        LEDsoff();
+       iso_type = 0;
 }
 
 //-----------------------------------------------------------------------------
@@ -101,7 +151,7 @@ size_t EPA_Parse_CardAccess(uint8_t *data,
                             pace_version_info_t *pace_info)
 {
        size_t index = 0;
-       
+
        while (index <= length - 2) {
                // determine type of element
                // SET or SEQUENCE
@@ -158,7 +208,7 @@ size_t EPA_Parse_CardAccess(uint8_t *data,
                        index += 2 + data[index + 1];
                }
        }
-       
+
        // TODO: We should check whether we reached the end in error, but for that
        //       we need a better parser (e.g. with states like IN_SET or IN_PACE_INFO)
        return 0;
@@ -176,31 +226,31 @@ int EPA_Read_CardAccess(uint8_t *buffer, size_t max_length)
        // we reserve 262 bytes here just to be safe (256-byte APDU + SW + ISO frame)
        uint8_t response_apdu[262];
        int rapdu_length = 0;
-       
+
        // select the file EF.CardAccess
-       rapdu_length = iso14_apdu((uint8_t *)apdu_select_binary_cardaccess,
+       rapdu_length = EPA_APDU((uint8_t *)apdu_select_binary_cardaccess,
                                  sizeof(apdu_select_binary_cardaccess),
                                  response_apdu);
-       if (rapdu_length != 6
+       if (rapdu_length < 6
            || response_apdu[rapdu_length - 4] != 0x90
            || response_apdu[rapdu_length - 3] != 0x00)
        {
-               Dbprintf("epa - no select cardaccess");
+               DbpString("Failed to select EF.CardAccess!");
                return -1;
        }
-       
+
        // read the file
-       rapdu_length = iso14_apdu((uint8_t *)apdu_read_binary,
+       rapdu_length = EPA_APDU((uint8_t *)apdu_read_binary,
                                  sizeof(apdu_read_binary),
                                  response_apdu);
        if (rapdu_length <= 6
            || response_apdu[rapdu_length - 4] != 0x90
            || response_apdu[rapdu_length - 3] != 0x00)
        {
-               Dbprintf("epa - no read cardaccess");
+               Dbprintf("Failed to read EF.CardAccess!");
                return -1;
        }
-       
+
        // copy the content into the buffer
        // length of data available: apdu_length - 4 (ISO frame) - 2 (SW)
        size_t to_copy = rapdu_length - 6;
@@ -215,16 +265,11 @@ int EPA_Read_CardAccess(uint8_t *buffer, size_t max_length)
 //-----------------------------------------------------------------------------
 static void EPA_PACE_Collect_Nonce_Abort(uint8_t step, int func_return)
 {
-//     // step in which the failure occured
-//     ack->arg[0] = step;
-//     // last return code
-//     ack->arg[1] = func_return;
-
        // power down the field
        EPA_Finish();
-       
+
        // send the USB packet
-  cmd_send(CMD_ACK,step,func_return,0,0,0);
+       cmd_send(CMD_ACK,step,func_return,0,0,0);
 }
 
 //-----------------------------------------------------------------------------
@@ -246,10 +291,6 @@ void EPA_PACE_Collect_Nonce(UsbCommand *c)
        // return value of a function
        int func_return = 0;
 
-//     // initialize ack with 0s
-//     memset(ack->arg, 0, 12);
-//     memset(ack->d.asBytes, 0, 48);
-       
        // set up communication
        func_return = EPA_Setup();
        if (func_return != 0) {
@@ -277,11 +318,11 @@ void EPA_PACE_Collect_Nonce(UsbCommand *c)
                EPA_PACE_Collect_Nonce_Abort(3, func_return);
                return;
        }
-       
+
        // initiate the PACE protocol
        // use the CAN for the password since that doesn't change
        func_return = EPA_PACE_MSE_Set_AT(pace_version_info, 2);
-       
+
        // now get the nonce
        uint8_t nonce[256] = {0};
        uint8_t requested_size = (uint8_t)c->arg[0];
@@ -292,14 +333,12 @@ void EPA_PACE_Collect_Nonce(UsbCommand *c)
                EPA_PACE_Collect_Nonce_Abort(4, func_return);
                return;
        }
-  
-  // all done, return
+
+       // all done, return
        EPA_Finish();
-       
+
        // save received information
-//     ack->arg[1] = func_return;
-//     memcpy(ack->d.asBytes, nonce, func_return);
-  cmd_send(CMD_ACK,0,func_return,0,nonce,func_return);
+       cmd_send(CMD_ACK,0,func_return,0,nonce,func_return);
 }
 
 //-----------------------------------------------------------------------------
@@ -320,10 +359,10 @@ int EPA_PACE_Get_Nonce(uint8_t requested_length, uint8_t *nonce)
               sizeof(apdu_general_authenticate_pace_get_nonce));
        // append Le (requested length + 2 due to tag/length taking 2 bytes) in RAPDU
        apdu[sizeof(apdu_general_authenticate_pace_get_nonce)] = requested_length + 4;
-       
+
        // send it
        uint8_t response_apdu[262];
-       int send_return = iso14_apdu(apdu,
+       int send_return = EPA_APDU(apdu,
                                     sizeof(apdu),
                                     response_apdu);
        // check if the command succeeded
@@ -333,7 +372,7 @@ int EPA_PACE_Get_Nonce(uint8_t requested_length, uint8_t *nonce)
        {
                return -1;
        }
-       
+
        // if there is no nonce in the RAPDU, return here
        if (send_return < 10)
        {
@@ -348,7 +387,7 @@ int EPA_PACE_Get_Nonce(uint8_t requested_length, uint8_t *nonce)
        }
        // copy the nonce
        memcpy(nonce, response_apdu + 6, nonce_length);
-       
+
        return nonce_length;
 }
 
@@ -394,7 +433,7 @@ int EPA_PACE_MSE_Set_AT(pace_version_info_t pace_version_info, uint8_t password)
        apdu[4] = apdu_length - 5;
        // send it
        uint8_t response_apdu[6];
-       int send_return = iso14_apdu(apdu,
+       int send_return = EPA_APDU(apdu,
                                     apdu_length,
                                     response_apdu);
        // check if the command succeeded
@@ -407,35 +446,109 @@ int EPA_PACE_MSE_Set_AT(pace_version_info_t pace_version_info, uint8_t password)
        return 0;
 }
 
+//-----------------------------------------------------------------------------
+// Perform the PACE protocol by replaying given APDUs
+//-----------------------------------------------------------------------------
+void EPA_PACE_Replay(UsbCommand *c)
+{
+       uint32_t timings[sizeof(apdu_lengths_replay) / sizeof(apdu_lengths_replay[0])] = {0};
+
+       // if an APDU has been passed, save it
+       if (c->arg[0] != 0) {
+               // make sure it's not too big
+               if(c->arg[2] > apdus_replay[c->arg[0] - 1].len)
+               {
+                       cmd_send(CMD_ACK, 1, 0, 0, NULL, 0);
+               }
+               memcpy(apdus_replay[c->arg[0] - 1].data + c->arg[1],
+                  c->d.asBytes,
+                  c->arg[2]);
+               // save/update APDU length
+               if (c->arg[1] == 0) {
+                       apdu_lengths_replay[c->arg[0] - 1] = c->arg[2];
+               } else {
+                       apdu_lengths_replay[c->arg[0] - 1] += c->arg[2];
+               }
+               cmd_send(CMD_ACK, 0, 0, 0, NULL, 0);
+               return;
+       }
+
+       // return value of a function
+       int func_return;
+
+       // set up communication
+       func_return = EPA_Setup();
+       if (func_return != 0) {
+               EPA_Finish();
+               cmd_send(CMD_ACK, 2, func_return, 0, NULL, 0);
+               return;
+       }
+
+       // response APDU
+       uint8_t response_apdu[300] = {0};
+
+       // now replay the data and measure the timings
+       for (int i = 0; i < sizeof(apdu_lengths_replay); i++) {
+               StartCountUS();
+               func_return = EPA_APDU(apdus_replay[i].data,
+                                        apdu_lengths_replay[i],
+                                        response_apdu);
+               timings[i] = GetCountUS();
+               // every step but the last one should succeed
+               if (i < sizeof(apdu_lengths_replay) - 1
+                   && (func_return < 6
+                       || response_apdu[func_return - 4] != 0x90
+                       || response_apdu[func_return - 3] != 0x00))
+               {
+                       EPA_Finish();
+                       cmd_send(CMD_ACK, 3 + i, func_return, 0, timings, 20);
+                       return;
+               }
+       }
+       EPA_Finish();
+       cmd_send(CMD_ACK,0,0,0,timings,20);
+       return;
+}
+
 //-----------------------------------------------------------------------------
 // Set up a communication channel (Card Select, PPS)
 // Returns 0 on success or a non-zero error code on failure
 //-----------------------------------------------------------------------------
 int EPA_Setup()
 {
-
        int return_code = 0;
        uint8_t uid[10];
        uint8_t pps_response[3];
        uint8_t pps_response_par[1];
        iso14a_card_select_t card_select_info;
 
+       // first, look for type A cards
        // power up the field
        iso14443a_setup(FPGA_HF_ISO14443A_READER_MOD);
-
        // select the card
        return_code = iso14443a_select_card(uid, &card_select_info, NULL);
-       if (return_code != 1) {
-               Dbprintf("Epa: Can't select card");
-               return 1;
+       if (return_code == 1) {
+               // send the PPS request
+               ReaderTransmit((uint8_t *)pps, sizeof(pps), NULL);
+               return_code = ReaderReceive(pps_response, pps_response_par);
+               if (return_code != 3 || pps_response[0] != 0xD0) {
+                       return return_code == 0 ? 2 : return_code;
+               }
+               Dbprintf("ISO 14443 Type A");
+               iso_type = 'a';
+               return 0;
        }
 
-       // send the PPS request
-       ReaderTransmit((uint8_t *)pps, sizeof(pps), NULL);
-       return_code = ReaderReceive(pps_response, pps_response_par);
-       if (return_code != 3 || pps_response[0] != 0xD0) {
-               return return_code == 0 ? 2 : return_code;
+       // if we're here, there is no type A card, so we look for type B
+       // power up the field
+       iso14443b_setup();
+       // select the card
+       return_code = iso14443b_select_card();
+       if (return_code == 1) {
+               Dbprintf("ISO 14443 Type B");
+               iso_type = 'b';
+               return 0;
        }
-       
-       return 0;
-}
\ No newline at end of file
+       Dbprintf("No card found.");
+       return 1;
+}
index 730652b79ef8b8afd31d0e20523dec6f83965ccf..d2ebed57a4e75381a5aa25d6c041d1a97cee090b 100644 (file)
@@ -19,7 +19,7 @@ typedef struct {
        uint8_t parameter_id;
 } pace_version_info_t;
 
-// note: EPA_PACE_GetNonce is declared in apps.h
+// note: EPA_PACE_Collect_Nonce and EPA_PACE_Replay are declared in apps.h
 
 // general functions
 void EPA_Finish();
@@ -33,4 +33,4 @@ int EPA_Setup();
 int EPA_PACE_MSE_Set_AT(pace_version_info_t pace_version_info, uint8_t password);
 int EPA_PACE_Get_Nonce(uint8_t requested_length, uint8_t *nonce);
 
-#endif /* __EPA_H */
\ No newline at end of file
+#endif /* __EPA_H */
index 077b378a918b438cb0dc625642d22a7543eaabbf..308dda8c09e6ebf8fd0a691df91ccb0c0c3189d2 100644 (file)
@@ -9,10 +9,32 @@
 // Routines to load the FPGA image, and then to configure the FPGA's major
 // mode once it is configured.
 //-----------------------------------------------------------------------------
+
+#include <stdint.h>
+#include <stddef.h>
+#include <stdbool.h>
+#include "fpgaloader.h"
 #include "proxmark3.h"
-#include "apps.h"
 #include "util.h"
 #include "string.h"
+#include "BigBuf.h"
+#include "zlib.h"
+
+extern void Dbprintf(const char *fmt, ...);
+
+// remember which version of the bitstream we have already downloaded to the FPGA
+static int downloaded_bitstream = FPGA_BITSTREAM_ERR;
+
+// this is where the bitstreams are located in memory:
+extern uint8_t _binary_obj_fpga_all_bit_z_start, _binary_obj_fpga_all_bit_z_end;
+
+static uint8_t *fpga_image_ptr = NULL;
+static uint32_t uncompressed_bytes_cnt;
+
+static const uint8_t _bitparse_fixed_header[] = {0x00, 0x09, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x00, 0x00, 0x01};
+#define FPGA_BITSTREAM_FIXED_HEADER_SIZE       sizeof(_bitparse_fixed_header)
+#define OUTPUT_BUFFER_LEN              80
+#define FPGA_INTERLEAVE_SIZE   288
 
 //-----------------------------------------------------------------------------
 // Set up the Serial Peripheral Interface as master
@@ -150,6 +172,94 @@ bool FpgaSetupSscDma(uint8_t *buf, int len)
     return true;
 }
 
+
+//----------------------------------------------------------------------------
+// Uncompress (inflate) the FPGA data. Returns one decompressed byte with
+// each call. 
+//----------------------------------------------------------------------------
+static int get_from_fpga_combined_stream(z_streamp compressed_fpga_stream, uint8_t *output_buffer)
+{
+       if (fpga_image_ptr == compressed_fpga_stream->next_out) {       // need more data
+               compressed_fpga_stream->next_out = output_buffer;
+               compressed_fpga_stream->avail_out = OUTPUT_BUFFER_LEN;
+               fpga_image_ptr = output_buffer;
+               int res = inflate(compressed_fpga_stream, Z_SYNC_FLUSH);
+               if (res != Z_OK) {
+                       Dbprintf("inflate returned: %d, %s", res, compressed_fpga_stream->msg);
+               }
+               if (res < 0) {
+                       return res;
+               }
+       }
+
+       uncompressed_bytes_cnt++;
+       
+       return *fpga_image_ptr++;
+}
+
+//----------------------------------------------------------------------------
+// Undo the interleaving of several FPGA config files. FPGA config files
+// are combined into one big file:
+// 288 bytes from FPGA file 1, followed by 288 bytes from FGPA file 2, etc.
+//----------------------------------------------------------------------------
+static int get_from_fpga_stream(int bitstream_version, z_streamp compressed_fpga_stream, uint8_t *output_buffer)
+{
+       while((uncompressed_bytes_cnt / FPGA_INTERLEAVE_SIZE) % FPGA_BITSTREAM_MAX != (bitstream_version - 1)) {
+               // skip undesired data belonging to other bitstream_versions
+               get_from_fpga_combined_stream(compressed_fpga_stream, output_buffer);
+       }
+
+       return get_from_fpga_combined_stream(compressed_fpga_stream, output_buffer);
+       
+}
+
+
+static voidpf fpga_inflate_malloc(voidpf opaque, uInt items, uInt size)
+{
+       return BigBuf_malloc(items*size);
+}
+
+
+static void fpga_inflate_free(voidpf opaque, voidpf address)
+{
+       BigBuf_free();
+}
+
+
+//----------------------------------------------------------------------------
+// Initialize decompression of the respective (HF or LF) FPGA stream 
+//----------------------------------------------------------------------------
+static bool reset_fpga_stream(int bitstream_version, z_streamp compressed_fpga_stream, uint8_t *output_buffer)
+{
+       uint8_t header[FPGA_BITSTREAM_FIXED_HEADER_SIZE];
+       
+       uncompressed_bytes_cnt = 0;
+       
+       // initialize z_stream structure for inflate:
+       compressed_fpga_stream->next_in = &_binary_obj_fpga_all_bit_z_start;
+       compressed_fpga_stream->avail_in = &_binary_obj_fpga_all_bit_z_start - &_binary_obj_fpga_all_bit_z_end;
+       compressed_fpga_stream->next_out = output_buffer;
+       compressed_fpga_stream->avail_out = OUTPUT_BUFFER_LEN;
+       compressed_fpga_stream->zalloc = &fpga_inflate_malloc;
+       compressed_fpga_stream->zfree = &fpga_inflate_free;
+
+       inflateInit2(compressed_fpga_stream, 0);
+
+       fpga_image_ptr = output_buffer;
+
+       for (uint16_t i = 0; i < FPGA_BITSTREAM_FIXED_HEADER_SIZE; i++) {
+               header[i] = get_from_fpga_stream(bitstream_version, compressed_fpga_stream, output_buffer);
+       }
+       
+       // Check for a valid .bit file (starts with _bitparse_fixed_header)
+       if(memcmp(_bitparse_fixed_header, header, FPGA_BITSTREAM_FIXED_HEADER_SIZE) == 0) {
+               return true;
+       } else {
+               return false;
+       }
+}
+
+
 static void DownloadFPGA_byte(unsigned char w)
 {
 #define SEND_BIT(x) { if(w & (1<<x) ) HIGH(GPIO_FPGA_DIN); else LOW(GPIO_FPGA_DIN); HIGH(GPIO_FPGA_CCLK); LOW(GPIO_FPGA_CCLK); }
@@ -163,10 +273,12 @@ static void DownloadFPGA_byte(unsigned char w)
        SEND_BIT(0);
 }
 
-// Download the fpga image starting at FpgaImage and with length FpgaImageLen bytes
-// If bytereversal is set: reverse the byte order in each 4-byte word
-static void DownloadFPGA(const char *FpgaImage, int FpgaImageLen, int bytereversal)
+// Download the fpga image starting at current stream position with length FpgaImageLen bytes
+static void DownloadFPGA(int bitstream_version, int FpgaImageLen, z_streamp compressed_fpga_stream, uint8_t *output_buffer)
 {
+
+       Dbprintf("DownloadFPGA(len: %d)", FpgaImageLen);
+       
        int i=0;
 
        AT91C_BASE_PIOA->PIO_OER = GPIO_FPGA_ON;
@@ -218,23 +330,15 @@ static void DownloadFPGA(const char *FpgaImage, int FpgaImageLen, int byterevers
                return;
        }
 
-       if(bytereversal) {
-               /* This is only supported for uint32_t aligned images */
-               if( ((int)FpgaImage % sizeof(uint32_t)) == 0 ) {
-                       i=0;
-                       while(FpgaImageLen-->0)
-                               DownloadFPGA_byte(FpgaImage[(i++)^0x3]);
-                       /* Explanation of the magic in the above line:
-                        * i^0x3 inverts the lower two bits of the integer i, counting backwards
-                        * for each 4 byte increment. The generated sequence of (i++)^3 is
-                        * 3 2 1 0 7 6 5 4 11 10 9 8 15 14 13 12 etc. pp.
-                        */
+       for(i = 0; i < FpgaImageLen; i++) {
+               int b = get_from_fpga_stream(bitstream_version, compressed_fpga_stream, output_buffer);
+               if (b < 0) {
+                       Dbprintf("Error %d during FpgaDownload", b);
+                       break;
                }
-       } else {
-               while(FpgaImageLen-->0)
-                       DownloadFPGA_byte(*FpgaImage++);
+               DownloadFPGA_byte(b);
        }
-
+       
        // continue to clock FPGA until ready signal goes high
        i=100000;
        while ( (i--) && ( !(AT91C_BASE_PIOA->PIO_PDSR & GPIO_FPGA_DONE ) ) ) {
@@ -250,39 +354,21 @@ static void DownloadFPGA(const char *FpgaImage, int FpgaImageLen, int byterevers
        LED_D_OFF();
 }
 
-static char *bitparse_headers_start;
-static char *bitparse_bitstream_end;
-static int bitparse_initialized = 0;
+
 /* Simple Xilinx .bit parser. The file starts with the fixed opaque byte sequence
  * 00 09 0f f0 0f f0 0f f0 0f f0 00 00 01
  * After that the format is 1 byte section type (ASCII character), 2 byte length
  * (big endian), <length> bytes content. Except for section 'e' which has 4 bytes
  * length.
  */
-static const char _bitparse_fixed_header[] = {0x00, 0x09, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x00, 0x00, 0x01};
-static int bitparse_init(void * start_address, void *end_address)
-{
-       bitparse_initialized = 0;
-
-       if(memcmp(_bitparse_fixed_header, start_address, sizeof(_bitparse_fixed_header)) != 0) {
-               return 0; /* Not matched */
-       } else {
-               bitparse_headers_start= ((char*)start_address) + sizeof(_bitparse_fixed_header);
-               bitparse_bitstream_end= (char*)end_address;
-               bitparse_initialized = 1;
-               return 1;
-       }
-}
-
-int bitparse_find_section(char section_name, char **section_start, unsigned int *section_length)
+static int bitparse_find_section(int bitstream_version, char section_name, unsigned int *section_length, z_streamp compressed_fpga_stream, uint8_t *output_buffer)
 {
-       char *pos = bitparse_headers_start;
        int result = 0;
-
-       if(!bitparse_initialized) return 0;
-
-       while(pos < bitparse_bitstream_end) {
-               char current_name = *pos++;
+       #define MAX_FPGA_BIT_STREAM_HEADER_SEARCH 100  // maximum number of bytes to search for the requested section
+       uint16_t numbytes = 0;
+       while(numbytes < MAX_FPGA_BIT_STREAM_HEADER_SEARCH) {
+               char current_name = get_from_fpga_stream(bitstream_version, compressed_fpga_stream, output_buffer);
+               numbytes++;
                unsigned int current_length = 0;
                if(current_name < 'a' || current_name > 'e') {
                        /* Strange section name, abort */
@@ -292,11 +378,13 @@ int bitparse_find_section(char section_name, char **section_start, unsigned int
                switch(current_name) {
                case 'e':
                        /* Four byte length field */
-                       current_length += (*pos++) << 24;
-                       current_length += (*pos++) << 16;
+                       current_length += get_from_fpga_stream(bitstream_version, compressed_fpga_stream, output_buffer) << 24;
+                       current_length += get_from_fpga_stream(bitstream_version, compressed_fpga_stream, output_buffer) << 16;
+                       numbytes += 2;
                default: /* Fall through, two byte length field */
-                       current_length += (*pos++) << 8;
-                       current_length += (*pos++) << 0;
+                       current_length += get_from_fpga_stream(bitstream_version, compressed_fpga_stream, output_buffer) << 8;
+                       current_length += get_from_fpga_stream(bitstream_version, compressed_fpga_stream, output_buffer) << 0;
+                       numbytes += 2;
                }
 
                if(current_name != 'e' && current_length > 255) {
@@ -306,111 +394,123 @@ int bitparse_find_section(char section_name, char **section_start, unsigned int
 
                if(current_name == section_name) {
                        /* Found it */
-                       *section_start = pos;
                        *section_length = current_length;
                        result = 1;
                        break;
                }
 
-               pos += current_length; /* Skip section */
+               for (uint16_t i = 0; i < current_length && numbytes < MAX_FPGA_BIT_STREAM_HEADER_SEARCH; i++) {
+                       get_from_fpga_stream(bitstream_version, compressed_fpga_stream, output_buffer);
+                       numbytes++;
+               }
        }
 
        return result;
 }
 
-//-----------------------------------------------------------------------------
-// Find out which FPGA image format is stored in flash, then call DownloadFPGA
-// with the right parameters to download the image
-//-----------------------------------------------------------------------------
-extern char _binary_fpga_lf_bit_start, _binary_fpga_lf_bit_end;
-extern char _binary_fpga_hf_bit_start, _binary_fpga_hf_bit_end;
+
+//----------------------------------------------------------------------------
+// Check which FPGA image is currently loaded (if any). If necessary 
+// decompress and load the correct (HF or LF) image to the FPGA
+//----------------------------------------------------------------------------
 void FpgaDownloadAndGo(int bitstream_version)
 {
-       void *bit_start;
-       void *bit_end;
-
+       z_stream compressed_fpga_stream;
+       uint8_t output_buffer[OUTPUT_BUFFER_LEN];
+       
        // check whether or not the bitstream is already loaded
-       if (FpgaGatherBitstreamVersion() == bitstream_version)
+       if (downloaded_bitstream == bitstream_version)
                return;
 
-       if (bitstream_version == FPGA_BITSTREAM_LF) {
-               bit_start = &_binary_fpga_lf_bit_start;
-               bit_end = &_binary_fpga_lf_bit_end;
-       } else if (bitstream_version == FPGA_BITSTREAM_HF) {
-               bit_start = &_binary_fpga_hf_bit_start;
-               bit_end = &_binary_fpga_hf_bit_end;
-       } else
+       // make sure that we have enough memory to decompress
+       BigBuf_free();
+       
+       if (!reset_fpga_stream(bitstream_version, &compressed_fpga_stream, output_buffer)) {
                return;
-       /* Check for the new flash image format: Should have the .bit file at &_binary_fpga_bit_start
-        */
-       if(bitparse_init(bit_start, bit_end)) {
-               /* Successfully initialized the .bit parser. Find the 'e' section and
-                * send its contents to the FPGA.
-                */
-               char *bitstream_start;
-               unsigned int bitstream_length;
-               if(bitparse_find_section('e', &bitstream_start, &bitstream_length)) {
-                       DownloadFPGA(bitstream_start, bitstream_length, 0);
-
-                       return; /* All done */
-               }
        }
 
-       /* Fallback for the old flash image format: Check for the magic marker 0xFFFFFFFF
-        * 0xAA995566 at address 0x102000. This is raw bitstream with a size of 336,768 bits
-        * = 10,524 uint32_t, stored as uint32_t e.g. little-endian in memory, but each DWORD
-        * is still to be transmitted in MSBit first order. Set the invert flag to indicate
-        * that the DownloadFPGA function should invert every 4 byte sequence when doing
-        * the bytewise download.
-        */
-       if( *(uint32_t*)0x102000 == 0xFFFFFFFF && *(uint32_t*)0x102004 == 0xAA995566 )
-               DownloadFPGA((char*)0x102000, 10524*4, 1);
-}
+       unsigned int bitstream_length;
+       if(bitparse_find_section(bitstream_version, 'e', &bitstream_length, &compressed_fpga_stream, output_buffer)) {
+               DownloadFPGA(bitstream_version, bitstream_length, &compressed_fpga_stream, output_buffer);
+               downloaded_bitstream = bitstream_version;
+       }
+
+       inflateEnd(&compressed_fpga_stream);
+}      
 
-int FpgaGatherBitstreamVersion()
-{
-       char temp[256];
-       FpgaGatherVersion(temp, sizeof (temp));
-       if (!memcmp("LF", temp, 2))
-               return FPGA_BITSTREAM_LF;
-       else if (!memcmp("HF", temp, 2))
-               return FPGA_BITSTREAM_HF;
-       return FPGA_BITSTREAM_ERR;
-}
 
-void FpgaGatherVersion(char *dst, int len)
+//-----------------------------------------------------------------------------
+// Gather version information from FPGA image. Needs to decompress the begin 
+// of the respective (HF or LF) image.
+// Note: decompression makes use of (i.e. overwrites) BigBuf[]. It is therefore
+// advisable to call this only once and store the results for later use.
+//-----------------------------------------------------------------------------
+void FpgaGatherVersion(int bitstream_version, char *dst, int len)
 {
-       char *fpga_info;
        unsigned int fpga_info_len;
-       dst[0] = 0;
-       if(!bitparse_find_section('e', &fpga_info, &fpga_info_len)) {
-               strncat(dst, "FPGA image: legacy image without version information", len-1);
-       } else {
-               /* USB packets only have 48 bytes data payload, so be terse */
-               if(bitparse_find_section('a', &fpga_info, &fpga_info_len) && fpga_info[fpga_info_len-1] == 0 ) {
-                       if (!memcmp("fpga_lf", fpga_info, 7))
-                               strncat(dst, "LF ", len-1);
-                       else if (!memcmp("fpga_hf", fpga_info, 7))
-                               strncat(dst, "HF ", len-1);
+       char tempstr[40];
+       z_stream compressed_fpga_stream;
+       uint8_t output_buffer[OUTPUT_BUFFER_LEN];
+       
+       dst[0] = '\0';
+
+       // ensure that we can allocate enough memory for decompression:
+       BigBuf_free();
+
+       if (!reset_fpga_stream(bitstream_version, &compressed_fpga_stream, output_buffer)) {
+               return;
+       }
+
+       if(bitparse_find_section(bitstream_version, 'a', &fpga_info_len, &compressed_fpga_stream, output_buffer)) {
+               for (uint16_t i = 0; i < fpga_info_len; i++) {
+                       char c = (char)get_from_fpga_stream(bitstream_version, &compressed_fpga_stream, output_buffer);
+                       if (i < sizeof(tempstr)) {
+                               tempstr[i] = c;
+                       }
                }
-               strncat(dst, "FPGA image built", len-1);
-#if 0
-               if(bitparse_find_section('b', &fpga_info, &fpga_info_len) && fpga_info[fpga_info_len-1] == 0 ) {
-                       strncat(dst, " for ", len-1);
-                       strncat(dst, fpga_info, len-1);
+               if (!memcmp("fpga_lf", tempstr, 7))
+                       strncat(dst, "LF ", len-1);
+               else if (!memcmp("fpga_hf", tempstr, 7))
+                       strncat(dst, "HF ", len-1);
+       }
+       strncat(dst, "FPGA image built", len-1);
+       if(bitparse_find_section(bitstream_version, 'b', &fpga_info_len, &compressed_fpga_stream, output_buffer)) {
+               strncat(dst, " for ", len-1);
+               for (uint16_t i = 0; i < fpga_info_len; i++) {
+                       char c = (char)get_from_fpga_stream(bitstream_version, &compressed_fpga_stream, output_buffer);
+                       if (i < sizeof(tempstr)) {
+                               tempstr[i] = c;
+                       }
                }
-#endif
-               if(bitparse_find_section('c', &fpga_info, &fpga_info_len) && fpga_info[fpga_info_len-1] == 0 ) {
-                       strncat(dst, " on ", len-1);
-                       strncat(dst, fpga_info, len-1);
+               strncat(dst, tempstr, len-1);
+       }
+       if(bitparse_find_section(bitstream_version, 'c', &fpga_info_len, &compressed_fpga_stream, output_buffer)) {
+               strncat(dst, " on ", len-1);
+               for (uint16_t i = 0; i < fpga_info_len; i++) {
+                       char c = (char)get_from_fpga_stream(bitstream_version, &compressed_fpga_stream, output_buffer);
+                       if (i < sizeof(tempstr)) {
+                               tempstr[i] = c;
+                       }
                }
-               if(bitparse_find_section('d', &fpga_info, &fpga_info_len) && fpga_info[fpga_info_len-1] == 0 ) {
-                       strncat(dst, " at ", len-1);
-                       strncat(dst, fpga_info, len-1);
+               strncat(dst, tempstr, len-1);
+       }
+       if(bitparse_find_section(bitstream_version, 'd', &fpga_info_len, &compressed_fpga_stream, output_buffer)) {
+               strncat(dst, " at ", len-1);
+               for (uint16_t i = 0; i < fpga_info_len; i++) {
+                       char c = (char)get_from_fpga_stream(bitstream_version, &compressed_fpga_stream, output_buffer);
+                       if (i < sizeof(tempstr)) {
+                               tempstr[i] = c;
+                       }
                }
+               strncat(dst, tempstr, len-1);
        }
+       
+       strncat(dst, "\n", len-1);
+
+       inflateEnd(&compressed_fpga_stream);
 }
 
+
 //-----------------------------------------------------------------------------
 // Send a 16 bit command/data pair to the FPGA.
 // The bit format is:  C3 C2 C1 C0 D11 D10 D9 D8 D7 D6 D5 D4 D3 D2 D1 D0
@@ -458,3 +558,11 @@ void SetAdcMuxFor(uint32_t whichGpio)
 
        HIGH(whichGpio);
 }
+
+void Fpga_print_status(void)
+{
+       Dbprintf("Fgpa");
+       if(downloaded_bitstream == FPGA_BITSTREAM_HF) Dbprintf("  mode.............HF");
+       else if(downloaded_bitstream == FPGA_BITSTREAM_LF) Dbprintf("  mode.............LF");
+       else Dbprintf("  mode.............%d", downloaded_bitstream);
+}
diff --git a/armsrc/fpgaloader.h b/armsrc/fpgaloader.h
new file mode 100644 (file)
index 0000000..38724cd
--- /dev/null
@@ -0,0 +1,73 @@
+//-----------------------------------------------------------------------------
+// Jonathan Westhues, April 2006
+// iZsh <izsh at fail0verflow.com>, 2014
+//
+// This code is licensed to you under the terms of the GNU GPL, version 2 or,
+// at your option, any later version. See the LICENSE.txt file for the text of
+// the license.
+//-----------------------------------------------------------------------------
+// Routines to load the FPGA image, and then to configure the FPGA's major
+// mode once it is configured.
+//-----------------------------------------------------------------------------
+
+void FpgaSendCommand(uint16_t cmd, uint16_t v);
+void FpgaWriteConfWord(uint8_t v);
+void FpgaDownloadAndGo(int bitstream_version);
+void FpgaGatherVersion(int bitstream_version, char *dst, int len);
+void FpgaSetupSsc(void);
+void SetupSpi(int mode);
+bool FpgaSetupSscDma(uint8_t *buf, int len);
+void Fpga_print_status();
+#define FpgaDisableSscDma(void)        AT91C_BASE_PDC_SSC->PDC_PTCR = AT91C_PDC_RXTDIS;
+#define FpgaEnableSscDma(void) AT91C_BASE_PDC_SSC->PDC_PTCR = AT91C_PDC_RXTEN;
+void SetAdcMuxFor(uint32_t whichGpio);
+
+// definitions for multiple FPGA config files support
+#define FPGA_BITSTREAM_MAX 2   // the total number of FPGA bitstreams (configs)
+#define FPGA_BITSTREAM_ERR 0
+#define FPGA_BITSTREAM_LF 1
+#define FPGA_BITSTREAM_HF 2
+
+
+// Definitions for the FPGA commands.
+#define FPGA_CMD_SET_CONFREG                                           (1<<12)
+#define FPGA_CMD_SET_DIVISOR                                           (2<<12)
+#define FPGA_CMD_SET_USER_BYTE1                                                (3<<12)
+// Definitions for the FPGA configuration word.
+// LF
+#define FPGA_MAJOR_MODE_LF_ADC                                         (0<<5)
+#define FPGA_MAJOR_MODE_LF_EDGE_DETECT                         (1<<5)
+#define FPGA_MAJOR_MODE_LF_PASSTHRU                                    (2<<5)
+// HF
+#define FPGA_MAJOR_MODE_HF_READER_TX                           (0<<5)
+#define FPGA_MAJOR_MODE_HF_READER_RX_XCORR                     (1<<5)
+#define FPGA_MAJOR_MODE_HF_SIMULATOR                           (2<<5)
+#define FPGA_MAJOR_MODE_HF_ISO14443A                           (3<<5)
+#define FPGA_MAJOR_MODE_HF_SNOOP                               (4<<5)
+// BOTH
+#define FPGA_MAJOR_MODE_OFF                                                    (7<<5)
+// Options for LF_ADC
+#define FPGA_LF_ADC_READER_FIELD                                       (1<<0)
+// Options for LF_EDGE_DETECT
+#define FPGA_CMD_SET_EDGE_DETECT_THRESHOLD                     FPGA_CMD_SET_USER_BYTE1
+#define FPGA_LF_EDGE_DETECT_READER_FIELD                       (1<<0)
+#define FPGA_LF_EDGE_DETECT_TOGGLE_MODE                                (1<<1)
+// Options for the HF reader, tx to tag
+#define FPGA_HF_READER_TX_SHALLOW_MOD                          (1<<0)
+// Options for the HF reader, correlating against rx from tag
+#define FPGA_HF_READER_RX_XCORR_848_KHZ                                (1<<0)
+#define FPGA_HF_READER_RX_XCORR_SNOOP                          (1<<1)
+#define FPGA_HF_READER_RX_XCORR_QUARTER_FREQ           (1<<2)
+// Options for the HF simulated tag, how to modulate
+#define FPGA_HF_SIMULATOR_NO_MODULATION                                (0<<0)
+#define FPGA_HF_SIMULATOR_MODULATE_BPSK                                (1<<0)
+#define FPGA_HF_SIMULATOR_MODULATE_212K                                (2<<0)
+#define FPGA_HF_SIMULATOR_MODULATE_424K                                (4<<0)
+#define FPGA_HF_SIMULATOR_MODULATE_424K_8BIT           0x5//101
+
+// Options for ISO14443A
+#define FPGA_HF_ISO14443A_SNIFFER                                      (0<<0)
+#define FPGA_HF_ISO14443A_TAGSIM_LISTEN                                (1<<0)
+#define FPGA_HF_ISO14443A_TAGSIM_MOD                           (2<<0)
+#define FPGA_HF_ISO14443A_READER_LISTEN                                (3<<0)
+#define FPGA_HF_ISO14443A_READER_MOD                           (4<<0)
diff --git a/armsrc/hfsnoop.c b/armsrc/hfsnoop.c
new file mode 100644 (file)
index 0000000..56774bd
--- /dev/null
@@ -0,0 +1,79 @@
+#include "proxmark3.h"
+#include "apps.h"
+#include "BigBuf.h"
+#include "util.h"
+
+static void RAMFUNC optimizedSnoop(void);
+
+static void RAMFUNC optimizedSnoop(void)
+{
+       int n = BigBuf_max_traceLen() / sizeof(uint16_t); // take all memory
+
+       uint16_t *dest = (uint16_t *)BigBuf_get_addr();
+       uint16_t *destend = dest + n;
+
+       AT91C_BASE_SSC->SSC_RFMR = SSC_FRAME_MODE_BITS_IN_WORD(16); // Setting Frame mode, 16 bits per word
+       // Reading data loop
+       while(dest <= destend)
+       {
+               if(AT91C_BASE_SSC->SSC_SR & AT91C_SSC_RXRDY)
+               {
+                       *dest = (uint16_t)(AT91C_BASE_SSC->SSC_RHR);
+                       dest = dest + 1;
+               }
+       }
+       //Resetting Frame mode (First set in fpgaloader.c)
+       AT91C_BASE_SSC->SSC_RFMR = SSC_FRAME_MODE_BITS_IN_WORD(8) | AT91C_SSC_MSBF | SSC_FRAME_MODE_WORDS_PER_TRANSFER(0);
+}
+
+void HfSnoop(int samplesToSkip, int triggersToSkip)
+{
+       Dbprintf("Skipping first %d sample pairs, Skipping %d triggers.", samplesToSkip, triggersToSkip);
+       bool trigger_cnt;
+       LED_D_ON();
+       // Select correct configs
+       FpgaDownloadAndGo(FPGA_BITSTREAM_HF);
+       // Set up the synchronous serial port
+       FpgaSetupSsc();
+       // connect Demodulated Signal to ADC:
+       SetAdcMuxFor(GPIO_MUXSEL_HIPKD);
+       FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_SNOOP);
+       SpinDelay(100);
+
+       BigBuf_free();
+       BigBuf_Clear();
+       
+       AT91C_BASE_SSC->SSC_RFMR = SSC_FRAME_MODE_BITS_IN_WORD(16); // Setting Frame Mode For better performance on high speed data transfer.
+
+       trigger_cnt = 0;
+       uint16_t r = 0;
+       while(!BUTTON_PRESS()) {
+               WDT_HIT();
+               if(AT91C_BASE_SSC->SSC_SR & (AT91C_SSC_RXRDY)) {
+                       r = (uint16_t)AT91C_BASE_SSC->SSC_RHR;
+                       r = MAX(r & 0xff, r >> 8); 
+                       if (r >= 240) 
+                       {
+                               if (++trigger_cnt > triggersToSkip) {
+                                       break;
+                               }
+                       } 
+               }
+       }
+
+       if(!BUTTON_PRESS()) {
+               int waitcount = samplesToSkip; // lets wait 40000 ticks of pck0
+               while(waitcount != 0) {
+                       if(AT91C_BASE_SSC->SSC_SR & (AT91C_SSC_RXRDY)) {
+                               waitcount--;
+                       }
+               }
+               optimizedSnoop();
+               Dbprintf("Trigger kicked! Value: %d, Dumping Samples Hispeed now.", r);
+       }
+
+       DbpString("HF Snoop end");
+       FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF);
+       LED_D_OFF();
+}
+
index 4b173d6f223845620eeb47e96e35c89ffb78f628..508157de9c9c2eb5e1f1e77cbfb14fa3b2e2ebc2 100644 (file)
@@ -411,7 +411,7 @@ static void hitag_reader_send_bit(int bit) {
        // Binary puls length modulation (BPLM) is used to encode the data stream
        // This means that a transmission of a one takes longer than that of a zero
        
-       // Enable modulation, which means, drop the the field
+       // Enable modulation, which means, drop the field
        HIGH(GPIO_SSC_DOUT);
        
        // Wait for 4-10 times the carrier period
@@ -442,7 +442,7 @@ static void hitag_reader_send_frame(const byte_t* frame, size_t frame_len)
        }
        // Send EOF 
        AT91C_BASE_TC0->TC_CCR = AT91C_TC_SWTRG;
-       // Enable modulation, which means, drop the the field
+       // Enable modulation, which means, drop the field
        HIGH(GPIO_SSC_DOUT);
        // Wait for 4-10 times the carrier period
        while(AT91C_BASE_TC0->TC_CV < T0*6);
@@ -710,22 +710,24 @@ void SnoopHitag(uint32_t type) {
        byte_t rx[HITAG_FRAME_LEN];
        size_t rxlen=0;
        
+       FpgaDownloadAndGo(FPGA_BITSTREAM_LF);
+
+       // Clean up trace and prepare it for storing frames
+       set_tracing(TRUE);
+       clear_trace();
+       
        auth_table_len = 0;
        auth_table_pos = 0;
+
        BigBuf_free();
     auth_table = (byte_t *)BigBuf_malloc(AUTH_TABLE_LENGTH);
        memset(auth_table, 0x00, AUTH_TABLE_LENGTH);
 
-       // Clean up trace and prepare it for storing frames
-       set_tracing(TRUE);
-       clear_trace();
-       
        DbpString("Starting Hitag2 snoop");
        LED_D_ON();
        
        // Set up eavesdropping mode, frequency divisor which will drive the FPGA
        // and analog mux selection.
-       FpgaDownloadAndGo(FPGA_BITSTREAM_LF);
        FpgaWriteConfWord(FPGA_MAJOR_MODE_LF_EDGE_DETECT  | FPGA_LF_EDGE_DETECT_TOGGLE_MODE);
        FpgaSendCommand(FPGA_CMD_SET_DIVISOR, 95); //125Khz
        SetAdcMuxFor(GPIO_MUXSEL_LOPKD);
@@ -922,6 +924,12 @@ void SimulateHitagTag(bool tag_mem_supplied, byte_t* data) {
        bool bQuitTraceFull = false;
        bQuiet = false;
        
+       FpgaDownloadAndGo(FPGA_BITSTREAM_LF);
+
+       // Clean up trace and prepare it for storing frames
+       set_tracing(TRUE);
+       clear_trace();
+
        auth_table_len = 0;
        auth_table_pos = 0;
     byte_t* auth_table;
@@ -929,10 +937,6 @@ void SimulateHitagTag(bool tag_mem_supplied, byte_t* data) {
     auth_table = (byte_t *)BigBuf_malloc(AUTH_TABLE_LENGTH);
        memset(auth_table, 0x00, AUTH_TABLE_LENGTH);
 
-       // Clean up trace and prepare it for storing frames
-       set_tracing(TRUE);
-       clear_trace();
-
        DbpString("Starting Hitag2 simulation");
        LED_D_ON();
        hitag2_init();
@@ -953,7 +957,6 @@ void SimulateHitagTag(bool tag_mem_supplied, byte_t* data) {
        
        // Set up simulator mode, frequency divisor which will drive the FPGA
        // and analog mux selection.
-       FpgaDownloadAndGo(FPGA_BITSTREAM_LF);
        FpgaWriteConfWord(FPGA_MAJOR_MODE_LF_EDGE_DETECT | FPGA_LF_EDGE_DETECT_READER_FIELD);
        FpgaSendCommand(FPGA_CMD_SET_DIVISOR, 95); //125Khz
        SetAdcMuxFor(GPIO_MUXSEL_LOPKD);
index 9139d3bd9f5a0734f4b2e651ca4b503e4b0a6485..f99d0ecac4dc18d421433d310c73b160d696eecd 100644 (file)
@@ -1125,7 +1125,6 @@ int doIClassSimulation( int simulationMode, uint8_t *reader_mac_buf)
        int resp_cc_len;
 
        uint8_t *receivedCmd = BigBuf_malloc(MAX_FRAME_SIZE);
-       memset(receivedCmd, 0x44, MAX_FRAME_SIZE);
        int len;
 
        // Prepare card messages
@@ -1336,7 +1335,6 @@ int doIClassSimulation( int simulationMode, uint8_t *reader_mac_buf)
                        }
 
                }
-               memset(receivedCmd, 0x44, MAX_FRAME_SIZE);
        }
 
        //Dbprintf("%x", cmdsRecvd);
@@ -1449,7 +1447,7 @@ static void TransmitIClassCommand(const uint8_t *cmd, int len, int *samples, int
     }
     WDT_HIT();
   }
-  if (samples) *samples = (c + *wait) << 3;
+  if (samples && wait) *samples = (c + *wait) << 3;
 }
 
 
@@ -1603,16 +1601,16 @@ void setupIclassReader()
 
 }
 
-size_t sendCmdGetResponseWithRetries(uint8_t* command, size_t cmdsize, uint8_t* resp, uint8_t expected_size, uint8_t retries)
+bool sendCmdGetResponseWithRetries(uint8_t* command, size_t cmdsize, uint8_t* resp, uint8_t expected_size, uint8_t retries)
 {
        while(retries-- > 0)
        {
                ReaderTransmitIClass(command, cmdsize);
                if(expected_size == ReaderReceiveIClass(resp)){
-                       return 0;
+                       return true;
                }
        }
-       return 1;//Error
+       return false;//Error
 }
 
 /**
@@ -1622,14 +1620,17 @@ size_t sendCmdGetResponseWithRetries(uint8_t* command, size_t cmdsize, uint8_t*
  *         1 = Got CSN
  *         2 = Got CSN and CC
  */
-uint8_t handshakeIclassTag(uint8_t *card_data)
+uint8_t handshakeIclassTag_ext(uint8_t *card_data, bool use_credit_key)
 {
        static uint8_t act_all[]     = { 0x0a };
-       static uint8_t identify[]    = { 0x0c };
+       //static uint8_t identify[]    = { 0x0c };
+       static uint8_t identify[]    = { 0x0c, 0x00, 0x73, 0x33 };
        static uint8_t select[]      = { 0x81, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
-
-
-       static uint8_t readcheck_cc[]= { 0x88, 0x02,};
+       static uint8_t readcheck_cc[]= { 0x88, 0x02 };
+       if (use_credit_key)
+               readcheck_cc[0] = 0x18;
+       else
+               readcheck_cc[0] = 0x88;
 
        uint8_t resp[ICLASS_BUFFER_SIZE];
 
@@ -1670,6 +1671,9 @@ uint8_t handshakeIclassTag(uint8_t *card_data)
 
        return read_status;
 }
+uint8_t handshakeIclassTag(uint8_t *card_data){
+       return handshakeIclassTag_ext(card_data, false);
+}
 
 
 // Reader iClass Anticollission
@@ -1689,6 +1693,9 @@ void ReaderIClass(uint8_t arg0) {
        uint8_t result_status = 0;
        bool abort_after_read = arg0 & FLAG_ICLASS_READER_ONLY_ONCE;
        bool try_once = arg0 & FLAG_ICLASS_READER_ONE_TRY;
+       bool use_credit_key = false;
+       if (arg0 & FLAG_ICLASS_READER_CEDITKEY)
+               use_credit_key = true;
        set_tracing(TRUE);
        setupIclassReader();
 
@@ -1703,7 +1710,7 @@ void ReaderIClass(uint8_t arg0) {
                }
                WDT_HIT();
 
-               read_status = handshakeIclassTag(card_data);
+               read_status = handshakeIclassTag_ext(card_data, use_credit_key);
 
                if(read_status == 0) continue;
                if(read_status == 1) result_status = FLAG_ICLASS_READER_CSN;
@@ -1717,11 +1724,10 @@ void ReaderIClass(uint8_t arg0) {
                if(arg0 & FLAG_ICLASS_READER_CONF)
                {
                        if(sendCmdGetResponseWithRetries(readConf, sizeof(readConf),card_data+8, 10, 10))
-                       {
-                               Dbprintf("Failed to dump config block");
-                       }else
                        {
                                result_status |= FLAG_ICLASS_READER_CONF;
+                       } else {
+                               Dbprintf("Failed to dump config block");
                        }
                }
 
@@ -1729,10 +1735,9 @@ void ReaderIClass(uint8_t arg0) {
                if(arg0 & FLAG_ICLASS_READER_AA){
                        if(sendCmdGetResponseWithRetries(readAA, sizeof(readAA),card_data+(8*4), 10, 10))
                        {
-//                             Dbprintf("Failed to dump AA block");
-                       }else
-                       {
                                result_status |= FLAG_ICLASS_READER_AA;
+                       } else {
+                               //Dbprintf("Failed to dump AA block");
                        }
                }
 
@@ -1764,8 +1769,8 @@ void ReaderIClass(uint8_t arg0) {
                }
                LED_B_OFF();
        }
-    cmd_send(CMD_ACK,0,0,0,card_data, 0);
-    LED_A_OFF();
+       cmd_send(CMD_ACK,0,0,0,card_data, 0);
+       LED_A_OFF();
 }
 
 void ReaderIClass_Replay(uint8_t arg0, uint8_t *MAC) {
@@ -1816,7 +1821,7 @@ void ReaderIClass_Replay(uint8_t arg0, uint8_t *MAC) {
                //for now replay captured auth (as cc not updated)
                memcpy(check+5,MAC,4);
 
-               if(sendCmdGetResponseWithRetries(check, sizeof(check),resp, 4, 5))
+               if(!sendCmdGetResponseWithRetries(check, sizeof(check),resp, 4, 5))
                {
                        Dbprintf("Error: Authentication Fail!");
                        continue;
@@ -1828,7 +1833,7 @@ void ReaderIClass_Replay(uint8_t arg0, uint8_t *MAC) {
                read[2] = crc >> 8;
                read[3] = crc & 0xff;
 
-               if(sendCmdGetResponseWithRetries(read, sizeof(read),resp, 10, 10))
+               if(!sendCmdGetResponseWithRetries(read, sizeof(read),resp, 10, 10))
                {
                        Dbprintf("Dump config (block 1) failed");
                        continue;
@@ -1855,7 +1860,7 @@ void ReaderIClass_Replay(uint8_t arg0, uint8_t *MAC) {
                        read[2] = crc >> 8;
                        read[3] = crc & 0xff;
 
-                       if(!sendCmdGetResponseWithRetries(read, sizeof(read), resp, 10, 10))
+                       if(sendCmdGetResponseWithRetries(read, sizeof(read), resp, 10, 10))
                        {
                                Dbprintf("     %02x: %02x %02x %02x %02x %02x %02x %02x %02x",
                                                 block, resp[0], resp[1], resp[2],
@@ -1906,130 +1911,129 @@ void ReaderIClass_Replay(uint8_t arg0, uint8_t *MAC) {
        LED_A_OFF();
 }
 
-//2. Create Read method (cut-down from above) based off responses from 1. 
-//   Since we have the MAC could continue to use replay function.
-//3. Create Write method
-/*
-void IClass_iso14443A_write(uint8_t arg0, uint8_t blockNo, uint8_t *data, uint8_t *MAC) {
-       uint8_t act_all[]     = { 0x0a };
-       uint8_t identify[]    = { 0x0c };
-       uint8_t select[]      = { 0x81, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
-       uint8_t readcheck_cc[]= { 0x88, 0x02 };
-       uint8_t check[]       = { 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
-       uint8_t read[]        = { 0x0c, 0x00, 0x00, 0x00 };
-       uint8_t write[]       = { 0x87, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
-       
-    uint16_t crc = 0;
-       
-       uint8_t* resp = (((uint8_t *)BigBuf) + 3560);
-
-       // Reset trace buffer
-    memset(trace, 0x44, RECV_CMD_OFFSET);
-       traceLen = 0;
+void iClass_ReadCheck(uint8_t  blockNo, uint8_t keyType) {
+       uint8_t readcheck[] = { keyType, blockNo };
+       uint8_t resp[] = {0,0,0,0,0,0,0,0};
+       size_t isOK = 0;
+       isOK = sendCmdGetResponseWithRetries(readcheck, sizeof(readcheck), resp, sizeof(resp), 6);
+       cmd_send(CMD_ACK,isOK,0,0,0,0);
+}
 
-       // Setup SSC
-       FpgaSetupSsc();
-       // Start from off (no field generated)
-       // Signal field is off with the appropriate LED
-       LED_D_OFF();
-       FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF);
-       SpinDelay(200);
+void iClass_Authentication(uint8_t *MAC) {
+       uint8_t check[] = { ICLASS_CMD_CHECK, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
+       uint8_t resp[ICLASS_BUFFER_SIZE];
+       memcpy(check+5,MAC,4);
+       bool isOK;
+       isOK = sendCmdGetResponseWithRetries(check, sizeof(check), resp, 4, 6);
+       cmd_send(CMD_ACK,isOK,0,0,0,0);
+}
+bool iClass_ReadBlock(uint8_t blockNo, uint8_t *readdata) {
+       uint8_t readcmd[] = {ICLASS_CMD_READ_OR_IDENTIFY, blockNo, 0x00, 0x00}; //0x88, 0x00 // can i use 0C?
+       char bl = blockNo;
+       uint16_t rdCrc = iclass_crc16(&bl, 1);
+       readcmd[2] = rdCrc >> 8;
+       readcmd[3] = rdCrc & 0xff;
+       uint8_t resp[] = {0,0,0,0,0,0,0,0,0,0};
+       bool isOK = false;
+
+       //readcmd[1] = blockNo;
+       isOK = sendCmdGetResponseWithRetries(readcmd, sizeof(readcmd), resp, 10, 10);
+       memcpy(readdata, resp, sizeof(resp));
+
+       return isOK;
+}
 
-       SetAdcMuxFor(GPIO_MUXSEL_HIPKD);
+void iClass_ReadBlk(uint8_t blockno) {
+       uint8_t readblockdata[] = {0,0,0,0,0,0,0,0,0,0};
+       bool isOK = false;
+       isOK = iClass_ReadBlock(blockno, readblockdata);
+       cmd_send(CMD_ACK, isOK, 0, 0, readblockdata, 8);
+}
 
-       // Now give it time to spin up.
-       // Signal field is on with the appropriate LED
-       FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_ISO14443A | FPGA_HF_ISO14443A_READER_MOD);
-       SpinDelay(200);
+void iClass_Dump(uint8_t blockno, uint8_t numblks) {
+       uint8_t readblockdata[] = {0,0,0,0,0,0,0,0,0,0};
+       bool isOK = false;
+       uint8_t blkCnt = 0;
 
-       LED_A_ON();
+       BigBuf_free();
+       uint8_t *dataout = BigBuf_malloc(255*8);
+       if (dataout == NULL){
+               Dbprintf("out of memory");
+               OnError(1);
+               return;
+       }
+       memset(dataout,0xFF,255*8);
+
+       for (;blkCnt < numblks; blkCnt++) {
+               isOK = iClass_ReadBlock(blockno+blkCnt, readblockdata);
+               if (!isOK || (readblockdata[0] == 0xBB || readblockdata[7] == 0xBB || readblockdata[2] == 0xBB)) { //try again
+                       isOK = iClass_ReadBlock(blockno+blkCnt, readblockdata);
+                       if (!isOK) {
+                               Dbprintf("Block %02X failed to read", blkCnt+blockno);
+                               break;
+                       }
+               }
+               memcpy(dataout+(blkCnt*8),readblockdata,8);
+       }
+       //return pointer to dump memory in arg3
+       cmd_send(CMD_ACK,isOK,blkCnt,BigBuf_max_traceLen(),0,0);
+       FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF);
+       LEDsoff();
+       BigBuf_free();
+}
 
-       for(int i=0;i<1;i++) {
-       
-               if(traceLen > TRACE_SIZE) {
-                       DbpString("Trace full");
-                       break;
+bool iClass_WriteBlock_ext(uint8_t blockNo, uint8_t *data) {
+       uint8_t write[] = { ICLASS_CMD_UPDATE, blockNo, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
+       //uint8_t readblockdata[10];
+       //write[1] = blockNo;
+       memcpy(write+2, data, 12); // data + mac
+       uint8_t resp[] = {0,0,0,0,0,0,0,0,0,0};
+       bool isOK;
+       isOK = sendCmdGetResponseWithRetries(write,sizeof(write),resp,sizeof(resp),10);
+       if (isOK) {
+               //Dbprintf("WriteResp: %02X%02X%02X%02X%02X%02X%02X%02X%02X%02X",resp[0],resp[1],resp[2],resp[3],resp[4],resp[5],resp[6],resp[7],resp[8],resp[9]);
+               if (memcmp(write+2,resp,8)) {
+                       //error try again
+                       isOK = sendCmdGetResponseWithRetries(write,sizeof(write),resp,sizeof(resp),10);
                }
-               
-               if (BUTTON_PRESS()) break;
-
-               // Send act_all
-               ReaderTransmitIClass(act_all, 1);
-               // Card present?
-               if(ReaderReceiveIClass(resp)) {
-                       ReaderTransmitIClass(identify, 1);
-                       if(ReaderReceiveIClass(resp) == 10) {
-                               // Select card          
-                               memcpy(&select[1],resp,8);
-                               ReaderTransmitIClass(select, sizeof(select));
-
-                               if(ReaderReceiveIClass(resp) == 10) {
-                                       Dbprintf("     Selected CSN: %02x %02x %02x %02x %02x %02x %02x %02x",
-                                       resp[0], resp[1], resp[2],
-                                       resp[3], resp[4], resp[5],
-                                       resp[6], resp[7]);
-                               }
-                               // Card selected
-                               Dbprintf("Readcheck on Sector 2");
-                               ReaderTransmitIClass(readcheck_cc, sizeof(readcheck_cc));
-                               if(ReaderReceiveIClass(resp) == 8) {
-                                  Dbprintf("     CC: %02x %02x %02x %02x %02x %02x %02x %02x",
-                                       resp[0], resp[1], resp[2],
-                                       resp[3], resp[4], resp[5],
-                                       resp[6], resp[7]);
-                               }else return;
-                               Dbprintf("Authenticate");
-                               //for now replay captured auth (as cc not updated)
-                               memcpy(check+5,MAC,4);
-                               Dbprintf("     AA: %02x %02x %02x %02x",
-                                       check[5], check[6], check[7],check[8]);
-                               ReaderTransmitIClass(check, sizeof(check));
-                               if(ReaderReceiveIClass(resp) == 4) {
-                                  Dbprintf("     AR: %02x %02x %02x %02x",
-                                       resp[0], resp[1], resp[2],resp[3]);
-                               }else {
-                                 Dbprintf("Error: Authentication Fail!");
-                                 return;
-                               }
-                               Dbprintf("Write Block");
-                               
-                               //read configuration for max block number
-                               read_success=false;
-                               read[1]=1;
-                               uint8_t *blockno=&read[1];
-                               crc = iclass_crc16((char *)blockno,1);
-                               read[2] = crc >> 8;
-                               read[3] = crc & 0xff;
-                               while(!read_success){
-                                     ReaderTransmitIClass(read, sizeof(read));
-                                     if(ReaderReceiveIClass(resp) == 10) {
-                                        read_success=true;
-                                        mem=resp[5];
-                                        memory.k16= (mem & 0x80);
-                                        memory.book= (mem & 0x20);
-                                        memory.k2= (mem & 0x8);
-                                        memory.lockauth= (mem & 0x2);
-                                        memory.keyaccess= (mem & 0x1);
-
-                                     }
-                               }
-                               if (memory.k16){
-                                 cardsize=255;
-                               }else cardsize=32;
-                               //check card_size
-                               
-                               memcpy(write+1,blockNo,1);
-                               memcpy(write+2,data,8);
-                               memcpy(write+10,mac,4);
-                               while(!send_success){
-                                 ReaderTransmitIClass(write, sizeof(write));
-                                 if(ReaderReceiveIClass(resp) == 10) {
-                                   write_success=true;
-                               }
-                       }//
+       }
+       return isOK;
+}
+
+void iClass_WriteBlock(uint8_t blockNo, uint8_t *data) {
+       bool isOK = iClass_WriteBlock_ext(blockNo, data);
+       if (isOK){
+               Dbprintf("Write block [%02x] successful",blockNo);
+       } else {
+               Dbprintf("Write block [%02x] failed",blockNo);          
+       }
+       cmd_send(CMD_ACK,isOK,0,0,0,0); 
+}
+
+void iClass_Clone(uint8_t startblock, uint8_t endblock, uint8_t *data) {
+       int i;
+       int written = 0;
+       int total_block = (endblock - startblock) + 1;
+       for (i = 0; i < total_block;i++){
+               // block number
+               if (iClass_WriteBlock_ext(i+startblock, data+(i*12))){
+                       Dbprintf("Write block [%02x] successful",i + startblock);
+                       written++;
+               } else {
+                       if (iClass_WriteBlock_ext(i+startblock, data+(i*12))){
+                               Dbprintf("Write block [%02x] successful",i + startblock);
+                               written++;
+                       } else {
+                               Dbprintf("Write block [%02x] failed",i + startblock);
+                       }
                }
-               WDT_HIT();
        }
-       
-       LED_A_OFF();
-}*/
+       if (written == total_block)
+               Dbprintf("Clone complete");
+       else
+               Dbprintf("Clone incomplete");   
+
+       cmd_send(CMD_ACK,1,0,0,0,0);
+       FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF);
+       LEDsoff();
+}
diff --git a/armsrc/iso14443.c b/armsrc/iso14443.c
deleted file mode 100644 (file)
index c7f49f1..0000000
+++ /dev/null
@@ -1,1250 +0,0 @@
-//-----------------------------------------------------------------------------
-// Jonathan Westhues, split Nov 2006
-//
-// This code is licensed to you under the terms of the GNU GPL, version 2 or,
-// at your option, any later version. See the LICENSE.txt file for the text of
-// the license.
-//-----------------------------------------------------------------------------
-// Routines to support ISO 14443. This includes both the reader software and
-// the `fake tag' modes. At the moment only the Type B modulation is
-// supported.
-//-----------------------------------------------------------------------------
-
-#include "proxmark3.h"
-#include "apps.h"
-#include "util.h"
-#include "string.h"
-
-#include "iso14443crc.h"
-
-//static void GetSamplesFor14443(int weTx, int n);
-
-/*#define DEMOD_TRACE_SIZE 4096
-#define READER_TAG_BUFFER_SIZE 2048
-#define TAG_READER_BUFFER_SIZE 2048
-#define DEMOD_DMA_BUFFER_SIZE 1024
-*/
-//=============================================================================
-// An ISO 14443 Type B tag. We listen for commands from the reader, using
-// a UART kind of thing that's implemented in software. When we get a
-// frame (i.e., a group of bytes between SOF and EOF), we check the CRC.
-// If it's good, then we can do something appropriate with it, and send
-// a response.
-//=============================================================================
-
-//-----------------------------------------------------------------------------
-// Code up a string of octets at layer 2 (including CRC, we don't generate
-// that here) so that they can be transmitted to the reader. Doesn't transmit
-// them yet, just leaves them ready to send in ToSend[].
-//-----------------------------------------------------------------------------
-static void CodeIso14443bAsTag(const uint8_t *cmd, int len)
-{
-       int i;
-
-       ToSendReset();
-
-       // Transmit a burst of ones, as the initial thing that lets the
-       // reader get phase sync. This (TR1) must be > 80/fs, per spec,
-       // but tag that I've tried (a Paypass) exceeds that by a fair bit,
-       // so I will too.
-       for(i = 0; i < 20; i++) {
-               ToSendStuffBit(1);
-               ToSendStuffBit(1);
-               ToSendStuffBit(1);
-               ToSendStuffBit(1);
-       }
-
-       // Send SOF.
-       for(i = 0; i < 10; i++) {
-               ToSendStuffBit(0);
-               ToSendStuffBit(0);
-               ToSendStuffBit(0);
-               ToSendStuffBit(0);
-       }
-       for(i = 0; i < 2; i++) {
-               ToSendStuffBit(1);
-               ToSendStuffBit(1);
-               ToSendStuffBit(1);
-               ToSendStuffBit(1);
-       }
-
-       for(i = 0; i < len; i++) {
-               int j;
-               uint8_t b = cmd[i];
-
-               // Start bit
-               ToSendStuffBit(0);
-               ToSendStuffBit(0);
-               ToSendStuffBit(0);
-               ToSendStuffBit(0);
-
-               // Data bits
-               for(j = 0; j < 8; j++) {
-                       if(b & 1) {
-                               ToSendStuffBit(1);
-                               ToSendStuffBit(1);
-                               ToSendStuffBit(1);
-                               ToSendStuffBit(1);
-                       } else {
-                               ToSendStuffBit(0);
-                               ToSendStuffBit(0);
-                               ToSendStuffBit(0);
-                               ToSendStuffBit(0);
-                       }
-                       b >>= 1;
-               }
-
-               // Stop bit
-               ToSendStuffBit(1);
-               ToSendStuffBit(1);
-               ToSendStuffBit(1);
-               ToSendStuffBit(1);
-       }
-
-       // Send SOF.
-       for(i = 0; i < 10; i++) {
-               ToSendStuffBit(0);
-               ToSendStuffBit(0);
-               ToSendStuffBit(0);
-               ToSendStuffBit(0);
-       }
-       for(i = 0; i < 10; i++) {
-               ToSendStuffBit(1);
-               ToSendStuffBit(1);
-               ToSendStuffBit(1);
-               ToSendStuffBit(1);
-       }
-
-       // Convert from last byte pos to length
-       ToSendMax++;
-
-       // Add a few more for slop
-       ToSendMax += 2;
-}
-
-//-----------------------------------------------------------------------------
-// The software UART that receives commands from the reader, and its state
-// variables.
-//-----------------------------------------------------------------------------
-static struct {
-       enum {
-               STATE_UNSYNCD,
-               STATE_GOT_FALLING_EDGE_OF_SOF,
-               STATE_AWAITING_START_BIT,
-               STATE_RECEIVING_DATA,
-               STATE_ERROR_WAIT
-       }       state;
-       uint16_t    shiftReg;
-       int     bitCnt;
-       int     byteCnt;
-       int     byteCntMax;
-       int     posCnt;
-       uint8_t   *output;
-} Uart;
-
-/* Receive & handle a bit coming from the reader.
- *
- * LED handling:
- * LED A -> ON once we have received the SOF and are expecting the rest.
- * LED A -> OFF once we have received EOF or are in error state or unsynced
- *
- * Returns: true if we received a EOF
- *          false if we are still waiting for some more
- */
-static int Handle14443UartBit(int bit)
-{
-       switch(Uart.state) {
-               case STATE_UNSYNCD:
-                       LED_A_OFF();
-                       if(!bit) {
-                               // we went low, so this could be the beginning
-                               // of an SOF
-                               Uart.state = STATE_GOT_FALLING_EDGE_OF_SOF;
-                               Uart.posCnt = 0;
-                               Uart.bitCnt = 0;
-                       }
-                       break;
-
-               case STATE_GOT_FALLING_EDGE_OF_SOF:
-                       Uart.posCnt++;
-                       if(Uart.posCnt == 2) {
-                               if(bit) {
-                                       if(Uart.bitCnt >= 10) {
-                                               // we've seen enough consecutive
-                                               // zeros that it's a valid SOF
-                                               Uart.posCnt = 0;
-                                               Uart.byteCnt = 0;
-                                               Uart.state = STATE_AWAITING_START_BIT;
-                                               LED_A_ON(); // Indicate we got a valid SOF
-                                       } else {
-                                               // didn't stay down long enough
-                                               // before going high, error
-                                               Uart.state = STATE_ERROR_WAIT;
-                                       }
-                               } else {
-                                       // do nothing, keep waiting
-                               }
-                               Uart.bitCnt++;
-                       }
-                       if(Uart.posCnt >= 4) Uart.posCnt = 0;
-                       if(Uart.bitCnt > 14) {
-                               // Give up if we see too many zeros without
-                               // a one, too.
-                               Uart.state = STATE_ERROR_WAIT;
-                       }
-                       break;
-
-               case STATE_AWAITING_START_BIT:
-                       Uart.posCnt++;
-                       if(bit) {
-                               if(Uart.posCnt > 25) {
-                                       // stayed high for too long between
-                                       // characters, error
-                                       Uart.state = STATE_ERROR_WAIT;
-                               }
-                       } else {
-                               // falling edge, this starts the data byte
-                               Uart.posCnt = 0;
-                               Uart.bitCnt = 0;
-                               Uart.shiftReg = 0;
-                               Uart.state = STATE_RECEIVING_DATA;
-                               LED_A_ON(); // Indicate we're receiving
-                       }
-                       break;
-
-               case STATE_RECEIVING_DATA:
-                       Uart.posCnt++;
-                       if(Uart.posCnt == 2) {
-                               // time to sample a bit
-                               Uart.shiftReg >>= 1;
-                               if(bit) {
-                                       Uart.shiftReg |= 0x200;
-                               }
-                               Uart.bitCnt++;
-                       }
-                       if(Uart.posCnt >= 4) {
-                               Uart.posCnt = 0;
-                       }
-                       if(Uart.bitCnt == 10) {
-                               if((Uart.shiftReg & 0x200) && !(Uart.shiftReg & 0x001))
-                               {
-                                       // this is a data byte, with correct
-                                       // start and stop bits
-                                       Uart.output[Uart.byteCnt] = (Uart.shiftReg >> 1) & 0xff;
-                                       Uart.byteCnt++;
-
-                                       if(Uart.byteCnt >= Uart.byteCntMax) {
-                                               // Buffer overflowed, give up
-                                               Uart.posCnt = 0;
-                                               Uart.state = STATE_ERROR_WAIT;
-                                       } else {
-                                               // so get the next byte now
-                                               Uart.posCnt = 0;
-                                               Uart.state = STATE_AWAITING_START_BIT;
-                                       }
-                               } else if(Uart.shiftReg == 0x000) {
-                                       // this is an EOF byte
-                                       LED_A_OFF(); // Finished receiving
-                                       return TRUE;
-                               } else {
-                                       // this is an error
-                                       Uart.posCnt = 0;
-                                       Uart.state = STATE_ERROR_WAIT;
-                               }
-                       }
-                       break;
-
-               case STATE_ERROR_WAIT:
-                       // We're all screwed up, so wait a little while
-                       // for whatever went wrong to finish, and then
-                       // start over.
-                       Uart.posCnt++;
-                       if(Uart.posCnt > 10) {
-                               Uart.state = STATE_UNSYNCD;
-                       }
-                       break;
-
-               default:
-                       Uart.state = STATE_UNSYNCD;
-                       break;
-       }
-
-       // This row make the error blew circular buffer in hf 14b snoop
-       //if (Uart.state == STATE_ERROR_WAIT) LED_A_OFF(); // Error
-
-       return FALSE;
-}
-
-//-----------------------------------------------------------------------------
-// Receive a command (from the reader to us, where we are the simulated tag),
-// and store it in the given buffer, up to the given maximum length. Keeps
-// spinning, waiting for a well-framed command, until either we get one
-// (returns TRUE) or someone presses the pushbutton on the board (FALSE).
-//
-// Assume that we're called with the SSC (to the FPGA) and ADC path set
-// correctly.
-//-----------------------------------------------------------------------------
-static int GetIso14443CommandFromReader(uint8_t *received, int *len, int maxLen)
-{
-       uint8_t mask;
-       int i, bit;
-
-       // Set FPGA mode to "simulated ISO 14443 tag", no modulation (listen
-       // only, since we are receiving, not transmitting).
-       // Signal field is off with the appropriate LED
-       LED_D_OFF();
-       FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_SIMULATOR | FPGA_HF_SIMULATOR_NO_MODULATION);
-
-
-       // Now run a `software UART' on the stream of incoming samples.
-       Uart.output = received;
-       Uart.byteCntMax = maxLen;
-       Uart.state = STATE_UNSYNCD;
-
-       for(;;) {
-               WDT_HIT();
-
-               if(BUTTON_PRESS()) return FALSE;
-
-               if(AT91C_BASE_SSC->SSC_SR & (AT91C_SSC_TXRDY)) {
-                       AT91C_BASE_SSC->SSC_THR = 0x00;
-               }
-               if(AT91C_BASE_SSC->SSC_SR & (AT91C_SSC_RXRDY)) {
-                       uint8_t b = (uint8_t)AT91C_BASE_SSC->SSC_RHR;
-
-                       mask = 0x80;
-                       for(i = 0; i < 8; i++, mask >>= 1) {
-                               bit = (b & mask);
-                               if(Handle14443UartBit(bit)) {
-                                       *len = Uart.byteCnt;
-                                       return TRUE;
-                               }
-                       }
-               }
-       }
-}
-
-//-----------------------------------------------------------------------------
-// Main loop of simulated tag: receive commands from reader, decide what
-// response to send, and send it.
-//-----------------------------------------------------------------------------
-void SimulateIso14443Tag(void)
-{
-       static const uint8_t cmd1[] = { 0x05, 0x00, 0x08, 0x39, 0x73 };
-       static const uint8_t response1[] = {
-               0x50, 0x82, 0x0d, 0xe1, 0x74, 0x20, 0x38, 0x19, 0x22,
-               0x00, 0x21, 0x85, 0x5e, 0xd7
-       };
-
-       uint8_t *resp;
-       int respLen;
-
-       uint8_t *resp1 = BigBuf_get_addr() + 800;
-       int resp1Len;
-
-       uint8_t *receivedCmd = BigBuf_get_addr();
-       int len;
-
-       int i;
-
-       int cmdsRecvd = 0;
-
-       FpgaDownloadAndGo(FPGA_BITSTREAM_HF);
-       memset(receivedCmd, 0x44, 400);
-
-       CodeIso14443bAsTag(response1, sizeof(response1));
-       memcpy(resp1, ToSend, ToSendMax); resp1Len = ToSendMax;
-
-       // We need to listen to the high-frequency, peak-detected path.
-       SetAdcMuxFor(GPIO_MUXSEL_HIPKD);
-       FpgaSetupSsc();
-
-       cmdsRecvd = 0;
-
-       for(;;) {
-               uint8_t b1, b2;
-
-               if(!GetIso14443CommandFromReader(receivedCmd, &len, 100)) {
-               Dbprintf("button pressed, received %d commands", cmdsRecvd);
-               break;
-               }
-
-               // Good, look at the command now.
-
-               if(len == sizeof(cmd1) && memcmp(receivedCmd, cmd1, len)==0) {
-                       resp = resp1; respLen = resp1Len;
-               } else {
-                       Dbprintf("new cmd from reader: len=%d, cmdsRecvd=%d", len, cmdsRecvd);
-                       // And print whether the CRC fails, just for good measure
-                       ComputeCrc14443(CRC_14443_B, receivedCmd, len-2, &b1, &b2);
-                       if(b1 != receivedCmd[len-2] || b2 != receivedCmd[len-1]) {
-                               // Not so good, try again.
-                               DbpString("+++CRC fail");
-                       } else {
-                               DbpString("CRC passes");
-                       }
-                       break;
-               }
-
-               memset(receivedCmd, 0x44, 32);
-
-               cmdsRecvd++;
-
-               if(cmdsRecvd > 0x30) {
-                       DbpString("many commands later...");
-                       break;
-               }
-
-               if(respLen <= 0) continue;
-
-               // Modulate BPSK
-               // Signal field is off with the appropriate LED
-               LED_D_OFF();
-               FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_SIMULATOR | FPGA_HF_SIMULATOR_MODULATE_BPSK);
-               AT91C_BASE_SSC->SSC_THR = 0xff;
-               FpgaSetupSsc();
-
-               // Transmit the response.
-               i = 0;
-               for(;;) {
-                       if(AT91C_BASE_SSC->SSC_SR & (AT91C_SSC_TXRDY)) {
-                               uint8_t b = resp[i];
-
-                               AT91C_BASE_SSC->SSC_THR = b;
-
-                               i++;
-                               if(i > respLen) {
-                                       break;
-                               }
-                       }
-                       if(AT91C_BASE_SSC->SSC_SR & (AT91C_SSC_RXRDY)) {
-                               volatile uint8_t b = (uint8_t)AT91C_BASE_SSC->SSC_RHR;
-                               (void)b;
-                       }
-               }
-       }
-}
-
-//=============================================================================
-// An ISO 14443 Type B reader. We take layer two commands, code them
-// appropriately, and then send them to the tag. We then listen for the
-// tag's response, which we leave in the buffer to be demodulated on the
-// PC side.
-//=============================================================================
-
-static struct {
-       enum {
-               DEMOD_UNSYNCD,
-               DEMOD_PHASE_REF_TRAINING,
-               DEMOD_AWAITING_FALLING_EDGE_OF_SOF,
-               DEMOD_GOT_FALLING_EDGE_OF_SOF,
-               DEMOD_AWAITING_START_BIT,
-               DEMOD_RECEIVING_DATA,
-               DEMOD_ERROR_WAIT
-       }       state;
-       int     bitCount;
-       int     posCount;
-       int     thisBit;
-       int     metric;
-       int     metricN;
-       uint16_t    shiftReg;
-       uint8_t   *output;
-       int     len;
-       int     sumI;
-       int     sumQ;
-} Demod;
-
-/*
- * Handles reception of a bit from the tag
- *
- * LED handling:
- * LED C -> ON once we have received the SOF and are expecting the rest.
- * LED C -> OFF once we have received EOF or are unsynced
- *
- * Returns: true if we received a EOF
- *          false if we are still waiting for some more
- *
- */
-static RAMFUNC int Handle14443SamplesDemod(int ci, int cq)
-{
-       int v;
-
-       // The soft decision on the bit uses an estimate of just the
-       // quadrant of the reference angle, not the exact angle.
-#define MAKE_SOFT_DECISION() { \
-               if(Demod.sumI > 0) { \
-                       v = ci; \
-               } else { \
-                       v = -ci; \
-               } \
-               if(Demod.sumQ > 0) { \
-                       v += cq; \
-               } else { \
-                       v -= cq; \
-               } \
-       }
-
-       switch(Demod.state) {
-               case DEMOD_UNSYNCD:
-                       v = ci;
-                       if(v < 0) v = -v;
-                       if(cq > 0) {
-                               v += cq;
-                       } else {
-                               v -= cq;
-                       }
-                       if(v > 40) {
-                               Demod.posCount = 0;
-                               Demod.state = DEMOD_PHASE_REF_TRAINING;
-                               Demod.sumI = 0;
-                               Demod.sumQ = 0;
-                       }
-                       break;
-
-               case DEMOD_PHASE_REF_TRAINING:
-                       if(Demod.posCount < 8) {
-                               Demod.sumI += ci;
-                               Demod.sumQ += cq;
-                       } else if(Demod.posCount > 100) {
-                               // error, waited too long
-                               Demod.state = DEMOD_UNSYNCD;
-                       } else {
-                               MAKE_SOFT_DECISION();
-                               if(v < 0) {
-                                       Demod.state = DEMOD_AWAITING_FALLING_EDGE_OF_SOF;
-                                       Demod.posCount = 0;
-                               }
-                       }
-                       Demod.posCount++;
-                       break;
-
-               case DEMOD_AWAITING_FALLING_EDGE_OF_SOF:
-                       MAKE_SOFT_DECISION();
-                       if(v < 0) {
-                               Demod.state = DEMOD_GOT_FALLING_EDGE_OF_SOF;
-                               Demod.posCount = 0;
-                       } else {
-                               if(Demod.posCount > 100) {
-                                       Demod.state = DEMOD_UNSYNCD;
-                               }
-                       }
-                       Demod.posCount++;
-                       break;
-
-               case DEMOD_GOT_FALLING_EDGE_OF_SOF:
-                       MAKE_SOFT_DECISION();
-                       if(v > 0) {
-                               if(Demod.posCount < 12) {
-                                       Demod.state = DEMOD_UNSYNCD;
-                               } else {
-                                       LED_C_ON(); // Got SOF
-                                       Demod.state = DEMOD_AWAITING_START_BIT;
-                                       Demod.posCount = 0;
-                                       Demod.len = 0;
-                                       Demod.metricN = 0;
-                                       Demod.metric = 0;
-                               }
-                       } else {
-                               if(Demod.posCount > 100) {
-                                       Demod.state = DEMOD_UNSYNCD;
-                               }
-                       }
-                       Demod.posCount++;
-                       break;
-
-               case DEMOD_AWAITING_START_BIT:
-                       MAKE_SOFT_DECISION();
-                       if(v > 0) {
-                               if(Demod.posCount > 10) {
-                                       Demod.state = DEMOD_UNSYNCD;
-                               }
-                       } else {
-                               Demod.bitCount = 0;
-                               Demod.posCount = 1;
-                               Demod.thisBit = v;
-                               Demod.shiftReg = 0;
-                               Demod.state = DEMOD_RECEIVING_DATA;
-                       }
-                       break;
-
-               case DEMOD_RECEIVING_DATA:
-                       MAKE_SOFT_DECISION();
-                       if(Demod.posCount == 0) {
-                               Demod.thisBit = v;
-                               Demod.posCount = 1;
-                       } else {
-                               Demod.thisBit += v;
-
-                               if(Demod.thisBit > 0) {
-                                       Demod.metric += Demod.thisBit;
-                               } else {
-                                       Demod.metric -= Demod.thisBit;
-                               }
-                               (Demod.metricN)++;
-
-                               Demod.shiftReg >>= 1;
-                               if(Demod.thisBit > 0) {
-                                       Demod.shiftReg |= 0x200;
-                               }
-
-                               Demod.bitCount++;
-                               if(Demod.bitCount == 10) {
-                                       uint16_t s = Demod.shiftReg;
-                                       if((s & 0x200) && !(s & 0x001)) {
-                                               uint8_t b = (s >> 1);
-                                               Demod.output[Demod.len] = b;
-                                               Demod.len++;
-                                               Demod.state = DEMOD_AWAITING_START_BIT;
-                                       } else if(s == 0x000) {
-                                               // This is EOF
-                                               LED_C_OFF();
-                                               Demod.state = DEMOD_UNSYNCD;
-                                               return TRUE;
-                                       } else {
-                                               Demod.state = DEMOD_UNSYNCD;
-                                       }
-                               }
-                               Demod.posCount = 0;
-                       }
-                       break;
-
-               default:
-                       Demod.state = DEMOD_UNSYNCD;
-                       break;
-       }
-
-       if (Demod.state == DEMOD_UNSYNCD) LED_C_OFF(); // Not synchronized...
-       return FALSE;
-}
-static void DemodReset()
-{
-       // Clear out the state of the "UART" that receives from the tag.
-       Demod.len = 0;
-       Demod.state = DEMOD_UNSYNCD;
-       memset(Demod.output, 0x00, MAX_FRAME_SIZE);
-}
-static void DemodInit(uint8_t *data)
-{
-       Demod.output = data;
-       DemodReset();
-}
-
-static void UartReset()
-{
-       Uart.byteCntMax = MAX_FRAME_SIZE;
-       Uart.state = STATE_UNSYNCD;
-       Uart.byteCnt = 0;
-       Uart.bitCnt = 0;
-}
-static void UartInit(uint8_t *data)
-{
-       Uart.output = data;
-       UartReset();
-}
-
-/*
- *  Demodulate the samples we received from the tag, also log to tracebuffer
- *  weTx: set to 'TRUE' if we behave like a reader
- *        set to 'FALSE' if we behave like a snooper
- *  quiet: set to 'TRUE' to disable debug output
- */
-static void GetSamplesFor14443Demod(int weTx, int n, int quiet)
-{
-       int max = 0;
-       int gotFrame = FALSE;
-       int lastRxCounter, ci, cq, samples = 0;
-
-       // Allocate memory from BigBuf for some buffers
-       // free all previous allocations first
-       BigBuf_free();
-       
-       // The command (reader -> tag) that we're receiving.
-       uint8_t *receivedCmd = BigBuf_malloc(MAX_FRAME_SIZE);
-       
-       // The response (tag -> reader) that we're receiving.
-       uint8_t *receivedResponse = BigBuf_malloc(MAX_FRAME_SIZE);
-       
-       // The DMA buffer, used to stream samples from the FPGA
-       uint8_t *dmaBuf = BigBuf_malloc(DMA_BUFFER_SIZE);
-
-       // Set up the demodulator for tag -> reader responses.
-       DemodInit(receivedResponse);
-       // Set up the demodulator for the reader -> tag commands
-       UartInit(receivedCmd);
-
-       // Setup and start DMA.
-       FpgaSetupSscDma(dmaBuf, DMA_BUFFER_SIZE);
-
-       uint8_t *upTo= dmaBuf;
-       lastRxCounter = DMA_BUFFER_SIZE;
-
-       // Signal field is ON with the appropriate LED:
-       if (weTx) LED_D_ON(); else LED_D_OFF();
-       // And put the FPGA in the appropriate mode
-       FpgaWriteConfWord(
-               FPGA_MAJOR_MODE_HF_READER_RX_XCORR | FPGA_HF_READER_RX_XCORR_848_KHZ |
-               (weTx ? 0 : FPGA_HF_READER_RX_XCORR_SNOOP));
-
-       for(;;) {
-               int behindBy = lastRxCounter - AT91C_BASE_PDC_SSC->PDC_RCR;
-               if(behindBy > max) max = behindBy;
-
-               while(((lastRxCounter-AT91C_BASE_PDC_SSC->PDC_RCR) & (DMA_BUFFER_SIZE-1))
-                                       > 2)
-               {
-                       ci = upTo[0];
-                       cq = upTo[1];
-                       upTo += 2;
-                       if(upTo - dmaBuf > DMA_BUFFER_SIZE) {
-                               upTo -= DMA_BUFFER_SIZE;
-                               AT91C_BASE_PDC_SSC->PDC_RNPR = (uint32_t) upTo;
-                               AT91C_BASE_PDC_SSC->PDC_RNCR = DMA_BUFFER_SIZE;
-                       }
-                       lastRxCounter -= 2;
-                       if(lastRxCounter <= 0) {
-                               lastRxCounter += DMA_BUFFER_SIZE;
-                       }
-
-                       samples += 2;
-
-                       Handle14443UartBit(1);
-                       Handle14443UartBit(1);
-
-                       if(Handle14443SamplesDemod(ci, cq)) {
-                               gotFrame = 1;
-                       }
-               }
-
-               if(samples > 2000) {
-                       break;
-               }
-       }
-       AT91C_BASE_PDC_SSC->PDC_PTCR = AT91C_PDC_RXTDIS;
-       if (!quiet) Dbprintf("%x %x %x", max, gotFrame, Demod.len);
-       //Tracing
-       if (tracing && Demod.len > 0) {
-               uint8_t parity[MAX_PARITY_SIZE];
-               GetParity(Demod.output , Demod.len, parity);
-               LogTrace(Demod.output,Demod.len, 0, 0, parity, FALSE);
-       }
-}
-
-//-----------------------------------------------------------------------------
-// Read the tag's response. We just receive a stream of slightly-processed
-// samples from the FPGA, which we will later do some signal processing on,
-// to get the bits.
-//-----------------------------------------------------------------------------
-/*static void GetSamplesFor14443(int weTx, int n)
-{
-       uint8_t *dest = (uint8_t *)BigBuf;
-       int c;
-
-       FpgaWriteConfWord(
-               FPGA_MAJOR_MODE_HF_READER_RX_XCORR | FPGA_HF_READER_RX_XCORR_848_KHZ |
-               (weTx ? 0 : FPGA_HF_READER_RX_XCORR_SNOOP));
-
-       c = 0;
-       for(;;) {
-               if(AT91C_BASE_SSC->SSC_SR & (AT91C_SSC_TXRDY)) {
-                       AT91C_BASE_SSC->SSC_THR = 0x43;
-               }
-               if(AT91C_BASE_SSC->SSC_SR & (AT91C_SSC_RXRDY)) {
-                       int8_t b;
-                       b = (int8_t)AT91C_BASE_SSC->SSC_RHR;
-
-                       dest[c++] = (uint8_t)b;
-
-                       if(c >= n) {
-                               break;
-                       }
-               }
-       }
-}*/
-
-//-----------------------------------------------------------------------------
-// Transmit the command (to the tag) that was placed in ToSend[].
-//-----------------------------------------------------------------------------
-static void TransmitFor14443(void)
-{
-       int c;
-
-       FpgaSetupSsc();
-
-       while(AT91C_BASE_SSC->SSC_SR & (AT91C_SSC_TXRDY)) {
-               AT91C_BASE_SSC->SSC_THR = 0xff;
-       }
-
-       // Signal field is ON with the appropriate Red LED
-       LED_D_ON();
-       // Signal we are transmitting with the Green LED
-       LED_B_ON();
-       FpgaWriteConfWord(
-               FPGA_MAJOR_MODE_HF_READER_TX | FPGA_HF_READER_TX_SHALLOW_MOD);
-
-       for(c = 0; c < 10;) {
-               if(AT91C_BASE_SSC->SSC_SR & (AT91C_SSC_TXRDY)) {
-                       AT91C_BASE_SSC->SSC_THR = 0xff;
-                       c++;
-               }
-               if(AT91C_BASE_SSC->SSC_SR & (AT91C_SSC_RXRDY)) {
-                       volatile uint32_t r = AT91C_BASE_SSC->SSC_RHR;
-                       (void)r;
-               }
-               WDT_HIT();
-       }
-
-       c = 0;
-       for(;;) {
-               if(AT91C_BASE_SSC->SSC_SR & (AT91C_SSC_TXRDY)) {
-                       AT91C_BASE_SSC->SSC_THR = ToSend[c];
-                       c++;
-                       if(c >= ToSendMax) {
-                               break;
-                       }
-               }
-               if(AT91C_BASE_SSC->SSC_SR & (AT91C_SSC_RXRDY)) {
-                       volatile uint32_t r = AT91C_BASE_SSC->SSC_RHR;
-                       (void)r;
-               }
-               WDT_HIT();
-       }
-       LED_B_OFF(); // Finished sending
-}
-
-//-----------------------------------------------------------------------------
-// Code a layer 2 command (string of octets, including CRC) into ToSend[],
-// so that it is ready to transmit to the tag using TransmitFor14443().
-//-----------------------------------------------------------------------------
-static void CodeIso14443bAsReader(const uint8_t *cmd, int len)
-{
-       int i, j;
-       uint8_t b;
-
-       ToSendReset();
-
-       // Establish initial reference level
-       for(i = 0; i < 40; i++) {
-               ToSendStuffBit(1);
-       }
-       // Send SOF
-       for(i = 0; i < 10; i++) {
-               ToSendStuffBit(0);
-       }
-
-       for(i = 0; i < len; i++) {
-               // Stop bits/EGT
-               ToSendStuffBit(1);
-               ToSendStuffBit(1);
-               // Start bit
-               ToSendStuffBit(0);
-               // Data bits
-               b = cmd[i];
-               for(j = 0; j < 8; j++) {
-                       if(b & 1) {
-                               ToSendStuffBit(1);
-                       } else {
-                               ToSendStuffBit(0);
-                       }
-                       b >>= 1;
-               }
-       }
-       // Send EOF
-       ToSendStuffBit(1);
-       for(i = 0; i < 10; i++) {
-               ToSendStuffBit(0);
-       }
-       for(i = 0; i < 8; i++) {
-               ToSendStuffBit(1);
-       }
-
-       // And then a little more, to make sure that the last character makes
-       // it out before we switch to rx mode.
-       for(i = 0; i < 24; i++) {
-               ToSendStuffBit(1);
-       }
-
-       // Convert from last character reference to length
-       ToSendMax++;
-}
-
-//-----------------------------------------------------------------------------
-// Read an ISO 14443 tag. We send it some set of commands, and record the
-// responses.
-// The command name is misleading, it actually decodes the reponse in HEX
-// into the output buffer (read the result using hexsamples, not hisamples)
-//
-// obsolete function only for test
-//-----------------------------------------------------------------------------
-void AcquireRawAdcSamplesIso14443(uint32_t parameter)
-{
-       uint8_t cmd1[] = { 0x05, 0x00, 0x08, 0x39, 0x73 };
-
-       SendRawCommand14443B(sizeof(cmd1),1,1,cmd1);
-}
-
-/**
-  Convenience function to encode, transmit and trace iso 14443b comms
-  **/
-static void CodeAndTransmit14443bAsReader(const uint8_t *cmd, int len)
-{
-       CodeIso14443bAsReader(cmd, len);
-       TransmitFor14443();
-       if (tracing) {
-               uint8_t parity[MAX_PARITY_SIZE];
-               GetParity(cmd, len, parity);
-               LogTrace(cmd,len, 0, 0, parity, TRUE);
-       }
-}
-
-//-----------------------------------------------------------------------------
-// Read a SRI512 ISO 14443 tag.
-//
-// SRI512 tags are just simple memory tags, here we're looking at making a dump
-// of the contents of the memory. No anticollision algorithm is done, we assume
-// we have a single tag in the field.
-//
-// I tried to be systematic and check every answer of the tag, every CRC, etc...
-//-----------------------------------------------------------------------------
-void ReadSTMemoryIso14443(uint32_t dwLast)
-{
-       clear_trace();
-       set_tracing(TRUE);
-
-       uint8_t i = 0x00;
-
-       FpgaDownloadAndGo(FPGA_BITSTREAM_HF);
-       // Make sure that we start from off, since the tags are stateful;
-       // confusing things will happen if we don't reset them between reads.
-       LED_D_OFF();
-       FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF);
-       SpinDelay(200);
-
-       SetAdcMuxFor(GPIO_MUXSEL_HIPKD);
-       FpgaSetupSsc();
-
-       // Now give it time to spin up.
-       // Signal field is on with the appropriate LED
-       LED_D_ON();
-       FpgaWriteConfWord(
-               FPGA_MAJOR_MODE_HF_READER_RX_XCORR | FPGA_HF_READER_RX_XCORR_848_KHZ);
-       SpinDelay(200);
-
-       // First command: wake up the tag using the INITIATE command
-       uint8_t cmd1[] = { 0x06, 0x00, 0x97, 0x5b};
-
-       CodeAndTransmit14443bAsReader(cmd1, sizeof(cmd1));
-//    LED_A_ON();
-       GetSamplesFor14443Demod(TRUE, 2000,TRUE);
-//    LED_A_OFF();
-
-       if (Demod.len == 0) {
-       DbpString("No response from tag");
-       return;
-       } else {
-       Dbprintf("Randomly generated UID from tag (+ 2 byte CRC): %x %x %x",
-               Demod.output[0], Demod.output[1],Demod.output[2]);
-       }
-       // There is a response, SELECT the uid
-       DbpString("Now SELECT tag:");
-       cmd1[0] = 0x0E; // 0x0E is SELECT
-       cmd1[1] = Demod.output[0];
-       ComputeCrc14443(CRC_14443_B, cmd1, 2, &cmd1[2], &cmd1[3]);
-       CodeAndTransmit14443bAsReader(cmd1, sizeof(cmd1));
-
-//    LED_A_ON();
-       GetSamplesFor14443Demod(TRUE, 2000,TRUE);
-//    LED_A_OFF();
-       if (Demod.len != 3) {
-       Dbprintf("Expected 3 bytes from tag, got %d", Demod.len);
-       return;
-       }
-       // Check the CRC of the answer:
-       ComputeCrc14443(CRC_14443_B, Demod.output, 1 , &cmd1[2], &cmd1[3]);
-       if(cmd1[2] != Demod.output[1] || cmd1[3] != Demod.output[2]) {
-       DbpString("CRC Error reading select response.");
-       return;
-       }
-       // Check response from the tag: should be the same UID as the command we just sent:
-       if (cmd1[1] != Demod.output[0]) {
-       Dbprintf("Bad response to SELECT from Tag, aborting: %x %x", cmd1[1], Demod.output[0]);
-       return;
-       }
-       // Tag is now selected,
-       // First get the tag's UID:
-       cmd1[0] = 0x0B;
-       ComputeCrc14443(CRC_14443_B, cmd1, 1 , &cmd1[1], &cmd1[2]);
-       CodeAndTransmit14443bAsReader(cmd1, 3); // Only first three bytes for this one
-
-//    LED_A_ON();
-       GetSamplesFor14443Demod(TRUE, 2000,TRUE);
-//    LED_A_OFF();
-       if (Demod.len != 10) {
-       Dbprintf("Expected 10 bytes from tag, got %d", Demod.len);
-       return;
-       }
-       // The check the CRC of the answer (use cmd1 as temporary variable):
-       ComputeCrc14443(CRC_14443_B, Demod.output, 8, &cmd1[2], &cmd1[3]);
-                  if(cmd1[2] != Demod.output[8] || cmd1[3] != Demod.output[9]) {
-       Dbprintf("CRC Error reading block! - Below: expected, got %x %x",
-               (cmd1[2]<<8)+cmd1[3], (Demod.output[8]<<8)+Demod.output[9]);
-       // Do not return;, let's go on... (we should retry, maybe ?)
-       }
-       Dbprintf("Tag UID (64 bits): %08x %08x",
-       (Demod.output[7]<<24) + (Demod.output[6]<<16) + (Demod.output[5]<<8) + Demod.output[4],
-       (Demod.output[3]<<24) + (Demod.output[2]<<16) + (Demod.output[1]<<8) + Demod.output[0]);
-
-       // Now loop to read all 16 blocks, address from 0 to last block
-       Dbprintf("Tag memory dump, block 0 to %d",dwLast);
-       cmd1[0] = 0x08;
-       i = 0x00;
-       dwLast++;
-       for (;;) {
-                  if (i == dwLast) {
-                       DbpString("System area block (0xff):");
-                       i = 0xff;
-               }
-               cmd1[1] = i;
-               ComputeCrc14443(CRC_14443_B, cmd1, 2, &cmd1[2], &cmd1[3]);
-               CodeAndTransmit14443bAsReader(cmd1, sizeof(cmd1));
-
-//         LED_A_ON();
-               GetSamplesFor14443Demod(TRUE, 2000,TRUE);
-//         LED_A_OFF();
-               if (Demod.len != 6) { // Check if we got an answer from the tag
-               DbpString("Expected 6 bytes from tag, got less...");
-               return;
-               }
-               // The check the CRC of the answer (use cmd1 as temporary variable):
-               ComputeCrc14443(CRC_14443_B, Demod.output, 4, &cmd1[2], &cmd1[3]);
-                       if(cmd1[2] != Demod.output[4] || cmd1[3] != Demod.output[5]) {
-               Dbprintf("CRC Error reading block! - Below: expected, got %x %x",
-                       (cmd1[2]<<8)+cmd1[3], (Demod.output[4]<<8)+Demod.output[5]);
-               // Do not return;, let's go on... (we should retry, maybe ?)
-               }
-               // Now print out the memory location:
-               Dbprintf("Address=%x, Contents=%x, CRC=%x", i,
-               (Demod.output[3]<<24) + (Demod.output[2]<<16) + (Demod.output[1]<<8) + Demod.output[0],
-               (Demod.output[4]<<8)+Demod.output[5]);
-               if (i == 0xff) {
-               break;
-               }
-               i++;
-       }
-}
-
-
-//=============================================================================
-// Finally, the `sniffer' combines elements from both the reader and
-// simulated tag, to show both sides of the conversation.
-//=============================================================================
-
-//-----------------------------------------------------------------------------
-// Record the sequence of commands sent by the reader to the tag, with
-// triggering so that we start recording at the point that the tag is moved
-// near the reader.
-//-----------------------------------------------------------------------------
-/*
- * Memory usage for this function, (within BigBuf)
- * 0-4095 : Demodulated samples receive (4096 bytes) - DEMOD_TRACE_SIZE
- * 4096-6143 : Last Received command, 2048 bytes (reader->tag) - READER_TAG_BUFFER_SIZE
- * 6144-8191 : Last Received command, 2048 bytes(tag->reader) - TAG_READER_BUFFER_SIZE
- * 8192-9215 : DMA Buffer, 1024 bytes (samples) - DEMOD_DMA_BUFFER_SIZE
- */
-void RAMFUNC SnoopIso14443(void)
-{
-       // We won't start recording the frames that we acquire until we trigger;
-       // a good trigger condition to get started is probably when we see a
-       // response from the tag.
-       int triggered = TRUE;
-
-       FpgaDownloadAndGo(FPGA_BITSTREAM_HF);
-       BigBuf_free();
-
-       clear_trace();
-       set_tracing(TRUE);
-
-       // The DMA buffer, used to stream samples from the FPGA
-       uint8_t *dmaBuf = BigBuf_malloc(DMA_BUFFER_SIZE);
-       int lastRxCounter;
-       uint8_t *upTo;
-       int ci, cq;
-       int maxBehindBy = 0;
-
-       // Count of samples received so far, so that we can include timing
-       // information in the trace buffer.
-       int samples = 0;
-
-       DemodInit(BigBuf_malloc(MAX_FRAME_SIZE));
-       UartInit(BigBuf_malloc(MAX_FRAME_SIZE));
-
-       // Print some debug information about the buffer sizes
-       Dbprintf("Snooping buffers initialized:");
-       Dbprintf("  Trace: %i bytes", BigBuf_max_traceLen());
-       Dbprintf("  Reader -> tag: %i bytes", MAX_FRAME_SIZE);
-       Dbprintf("  tag -> Reader: %i bytes", MAX_FRAME_SIZE);
-       Dbprintf("  DMA: %i bytes", DMA_BUFFER_SIZE);
-
-       // Signal field is off with the appropriate LED
-       LED_D_OFF();
-
-       // And put the FPGA in the appropriate mode
-       FpgaWriteConfWord(
-               FPGA_MAJOR_MODE_HF_READER_RX_XCORR | FPGA_HF_READER_RX_XCORR_848_KHZ |
-               FPGA_HF_READER_RX_XCORR_SNOOP);
-       SetAdcMuxFor(GPIO_MUXSEL_HIPKD);
-
-       // Setup for the DMA.
-       FpgaSetupSsc();
-       upTo = dmaBuf;
-       lastRxCounter = DMA_BUFFER_SIZE;
-       FpgaSetupSscDma((uint8_t *)dmaBuf, DMA_BUFFER_SIZE);
-       uint8_t parity[MAX_PARITY_SIZE];
-       LED_A_ON();
-               
-       // And now we loop, receiving samples.
-       for(;;) {
-               int behindBy = (lastRxCounter - AT91C_BASE_PDC_SSC->PDC_RCR) &
-                                                               (DMA_BUFFER_SIZE-1);
-               if(behindBy > maxBehindBy) {
-                       maxBehindBy = behindBy;
-                       if(behindBy > (9*DMA_BUFFER_SIZE/10)) { // TODO: understand whether we can increase/decrease as we want or not?
-                               Dbprintf("blew circular buffer! behindBy=0x%x", behindBy);
-                               break;
-                       }
-               }
-               if(behindBy < 2) continue;
-
-               ci = upTo[0];
-               cq = upTo[1];
-               upTo += 2;
-               lastRxCounter -= 2;
-               if(upTo - dmaBuf > DMA_BUFFER_SIZE) {
-                       upTo -= DMA_BUFFER_SIZE;
-                       lastRxCounter += DMA_BUFFER_SIZE;
-                       AT91C_BASE_PDC_SSC->PDC_RNPR = (uint32_t) upTo;
-                       AT91C_BASE_PDC_SSC->PDC_RNCR = DMA_BUFFER_SIZE;
-               }
-
-               samples += 2;
-
-               if(Handle14443UartBit(ci & 1)) {
-                       if(triggered && tracing) {
-                               GetParity(Uart.output, Uart.byteCnt, parity);
-                               LogTrace(Uart.output,Uart.byteCnt,samples, samples,parity,TRUE);
-                       }
-                       if(Uart.byteCnt==0) Dbprintf("[1] Error, Uart.byteCnt==0, Uart.bitCnt=%d", Uart.bitCnt);
-
-                       /* And ready to receive another command. */
-                       UartReset();
-                       /* And also reset the demod code, which might have been */
-                       /* false-triggered by the commands from the reader. */
-                       DemodReset();
-               }
-               if(Handle14443UartBit(cq & 1)) {
-                       if(triggered && tracing) {
-                               GetParity(Uart.output, Uart.byteCnt, parity);
-                               LogTrace(Uart.output,Uart.byteCnt,samples, samples,parity,TRUE);
-                       }
-                       if(Uart.byteCnt==0) Dbprintf("[2] Error, Uart.byteCnt==0, Uart.bitCnt=%d", Uart.bitCnt);
-
-                       /* And ready to receive another command. */
-                       UartReset();
-                       /* And also reset the demod code, which might have been */
-                       /* false-triggered by the commands from the reader. */
-                       DemodReset();
-               }
-
-               if(Handle14443SamplesDemod(ci, cq)) {
-
-                       //Use samples as a time measurement
-                       if(tracing)
-                       {
-                               uint8_t parity[MAX_PARITY_SIZE];
-                               GetParity(Demod.output, Demod.len, parity);
-                               LogTrace(Demod.output,Demod.len,samples, samples,parity,FALSE);
-                       }
-                       triggered = TRUE;
-                       LED_A_OFF();
-                       LED_B_ON();
-
-                       // And ready to receive another response.
-                       DemodReset();
-               }
-               WDT_HIT();
-
-               if(!tracing) {
-                       DbpString("Reached trace limit");
-                       break;
-               }
-
-               if(BUTTON_PRESS()) {
-                       DbpString("cancelled");
-                       break;
-               }
-       }
-       FpgaDisableSscDma();
-       LED_A_OFF();
-       LED_B_OFF();
-       LED_C_OFF();
-       AT91C_BASE_PDC_SSC->PDC_PTCR = AT91C_PDC_RXTDIS;
-       DbpString("Snoop statistics:");
-       Dbprintf("  Max behind by: %i", maxBehindBy);
-       Dbprintf("  Uart State: %x", Uart.state);
-       Dbprintf("  Uart ByteCnt: %i", Uart.byteCnt);
-       Dbprintf("  Uart ByteCntMax: %i", Uart.byteCntMax);
-       Dbprintf("  Trace length: %i", BigBuf_get_traceLen());
-}
-
-/*
- * Send raw command to tag ISO14443B
- * @Input
- * datalen     len of buffer data
- * recv        bool when true wait for data from tag and send to client
- * powerfield  bool leave the field on when true
- * data        buffer with byte to send
- *
- * @Output
- * none
- *
- */
-
-void SendRawCommand14443B(uint32_t datalen, uint32_t recv,uint8_t powerfield, uint8_t data[])
-{
-       FpgaDownloadAndGo(FPGA_BITSTREAM_HF);
-       if(!powerfield)
-       {
-               // Make sure that we start from off, since the tags are stateful;
-               // confusing things will happen if we don't reset them between reads.
-               FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF);
-               LED_D_OFF();
-               SpinDelay(200);
-       }
-
-       if(!GETBIT(GPIO_LED_D))
-       {
-               SetAdcMuxFor(GPIO_MUXSEL_HIPKD);
-               FpgaSetupSsc();
-
-               // Now give it time to spin up.
-               // Signal field is on with the appropriate LED
-               LED_D_ON();
-               FpgaWriteConfWord(
-                       FPGA_MAJOR_MODE_HF_READER_RX_XCORR | FPGA_HF_READER_RX_XCORR_848_KHZ);
-               SpinDelay(200);
-       }
-
-       CodeAndTransmit14443bAsReader(data, datalen);
-
-       if(recv)
-       {
-               uint16_t iLen = MIN(Demod.len,USB_CMD_DATA_SIZE);
-               GetSamplesFor14443Demod(TRUE, 2000, TRUE);
-               cmd_send(CMD_ACK,iLen,0,0,Demod.output,iLen);
-       }
-       if(!powerfield)
-       {
-               FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF);
-               LED_D_OFF();
-       }
-}
-
index 64bbcbf50eaaa456123163bc16bd115a13e77ef2..27574dad2601cceda2f59b785445a1915a958892 100644 (file)
@@ -213,6 +213,12 @@ void AppendCrc14443a(uint8_t* data, int len)
        ComputeCrc14443(CRC_14443_A,data,len,data+len,data+len+1);
 }
 
+void AppendCrc14443b(uint8_t* data, int len)
+{
+       ComputeCrc14443(CRC_14443_B,data,len,data+len,data+len+1);
+}
+
+
 //=============================================================================
 // ISO 14443 Type A - Miller decoder
 //=============================================================================
@@ -232,13 +238,17 @@ void AppendCrc14443a(uint8_t* data, int len)
 static tUart Uart;
 
 // Lookup-Table to decide if 4 raw bits are a modulation.
-// We accept two or three consecutive "0" in any position with the rest "1"
+// We accept the following:
+// 0001  -   a 3 tick wide pause
+// 0011  -   a 2 tick wide pause, or a three tick wide pause shifted left
+// 0111  -   a 2 tick wide pause shifted left
+// 1001  -   a 2 tick wide pause shifted right
 const bool Mod_Miller_LUT[] = {
-       TRUE,  TRUE,  FALSE, TRUE,  FALSE, FALSE, FALSE, FALSE,
-       TRUE,  TRUE,  FALSE, FALSE, TRUE,  FALSE, FALSE, FALSE
+       FALSE,  TRUE, FALSE, TRUE,  FALSE, FALSE, FALSE, TRUE,
+       FALSE,  TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE
 };
-#define IsMillerModulationNibble1(b) (Mod_Miller_LUT[(b & 0x00F0) >> 4])
-#define IsMillerModulationNibble2(b) (Mod_Miller_LUT[(b & 0x000F)])
+#define IsMillerModulationNibble1(b) (Mod_Miller_LUT[(b & 0x000000F0) >> 4])
+#define IsMillerModulationNibble2(b) (Mod_Miller_LUT[(b & 0x0000000F)])
 
 void UartReset()
 {
@@ -248,8 +258,6 @@ void UartReset()
        Uart.parityLen = 0;                                     // number of decoded parity bytes
        Uart.shiftReg = 0;                                      // shiftreg to hold decoded data bits
        Uart.parityBits = 0;                            // holds 8 parity bits
-       Uart.twoBits = 0x0000;                          // buffer for 2 Bits
-       Uart.highCnt = 0;
        Uart.startTime = 0;
        Uart.endTime = 0;
 }
@@ -258,6 +266,7 @@ void UartInit(uint8_t *data, uint8_t *parity)
 {
        Uart.output = data;
        Uart.parity = parity;
+       Uart.fourBits = 0x00000000;                     // clear the buffer for 4 Bits
        UartReset();
 }
 
@@ -265,40 +274,37 @@ void UartInit(uint8_t *data, uint8_t *parity)
 static RAMFUNC bool MillerDecoding(uint8_t bit, uint32_t non_real_time)
 {
 
-       Uart.twoBits = (Uart.twoBits << 8) | bit;
+       Uart.fourBits = (Uart.fourBits << 8) | bit;
        
        if (Uart.state == STATE_UNSYNCD) {                                                                                      // not yet synced
        
-               if (Uart.highCnt < 2) {                                                                                                 // wait for a stable unmodulated signal
-                       if (Uart.twoBits == 0xffff) {
-                               Uart.highCnt++;
-                       } else {
-                               Uart.highCnt = 0;
-                       }
-               } else {        
-                       Uart.syncBit = 0xFFFF;                                                                                          // not set
-                                                                                                                                                               // we look for a ...1111111100x11111xxxxxx pattern (the start bit)
-                       if              ((Uart.twoBits & 0xDF00) == 0x1F00) Uart.syncBit = 8;           // mask is   11x11111 xxxxxxxx, 
-                                                                                                                                                               // check for 00x11111 xxxxxxxx
-                       else if ((Uart.twoBits & 0xEF80) == 0x8F80) Uart.syncBit = 7;           // both masks shifted right one bit, left padded with '1'
-                       else if ((Uart.twoBits & 0xF7C0) == 0xC7C0) Uart.syncBit = 6;           // ...
-                       else if ((Uart.twoBits & 0xFBE0) == 0xE3E0) Uart.syncBit = 5;
-                       else if ((Uart.twoBits & 0xFDF0) == 0xF1F0) Uart.syncBit = 4;
-                       else if ((Uart.twoBits & 0xFEF8) == 0xF8F8) Uart.syncBit = 3;
-                       else if ((Uart.twoBits & 0xFF7C) == 0xFC7C) Uart.syncBit = 2;
-                       else if ((Uart.twoBits & 0xFFBE) == 0xFE3E) Uart.syncBit = 1;
-                       if (Uart.syncBit != 0xFFFF) {                                                                           // found a sync bit
-                               Uart.startTime = non_real_time?non_real_time:(GetCountSspClk() & 0xfffffff8);
-                               Uart.startTime -= Uart.syncBit;
-                               Uart.endTime = Uart.startTime;
-                               Uart.state = STATE_START_OF_COMMUNICATION;
-                       }
+               Uart.syncBit = 9999;                                                                                                    // not set
+               // The start bit is one ore more Sequence Y followed by a Sequence Z (... 11111111 00x11111). We need to distinguish from
+               // Sequence X followed by Sequence Y followed by Sequence Z (111100x1 11111111 00x11111)
+               // we therefore look for a ...xx11111111111100x11111xxxxxx... pattern 
+               // (12 '1's followed by 2 '0's, eventually followed by another '0', followed by 5 '1's)
+               #define ISO14443A_STARTBIT_MASK         0x07FFEF80                                                      // mask is    00000111 11111111 11101111 10000000
+               #define ISO14443A_STARTBIT_PATTERN      0x07FF8F80                                                      // pattern is 00000111 11111111 10001111 10000000
+               if              ((Uart.fourBits & (ISO14443A_STARTBIT_MASK >> 0)) == ISO14443A_STARTBIT_PATTERN >> 0) Uart.syncBit = 7;
+               else if ((Uart.fourBits & (ISO14443A_STARTBIT_MASK >> 1)) == ISO14443A_STARTBIT_PATTERN >> 1) Uart.syncBit = 6;
+               else if ((Uart.fourBits & (ISO14443A_STARTBIT_MASK >> 2)) == ISO14443A_STARTBIT_PATTERN >> 2) Uart.syncBit = 5;
+               else if ((Uart.fourBits & (ISO14443A_STARTBIT_MASK >> 3)) == ISO14443A_STARTBIT_PATTERN >> 3) Uart.syncBit = 4;
+               else if ((Uart.fourBits & (ISO14443A_STARTBIT_MASK >> 4)) == ISO14443A_STARTBIT_PATTERN >> 4) Uart.syncBit = 3;
+               else if ((Uart.fourBits & (ISO14443A_STARTBIT_MASK >> 5)) == ISO14443A_STARTBIT_PATTERN >> 5) Uart.syncBit = 2;
+               else if ((Uart.fourBits & (ISO14443A_STARTBIT_MASK >> 6)) == ISO14443A_STARTBIT_PATTERN >> 6) Uart.syncBit = 1;
+               else if ((Uart.fourBits & (ISO14443A_STARTBIT_MASK >> 7)) == ISO14443A_STARTBIT_PATTERN >> 7) Uart.syncBit = 0;
+
+               if (Uart.syncBit != 9999) {                                                                                             // found a sync bit
+                       Uart.startTime = non_real_time?non_real_time:(GetCountSspClk() & 0xfffffff8);
+                       Uart.startTime -= Uart.syncBit;
+                       Uart.endTime = Uart.startTime;
+                       Uart.state = STATE_START_OF_COMMUNICATION;
                }
 
        } else {
 
-               if (IsMillerModulationNibble1(Uart.twoBits >> Uart.syncBit)) {                  
-                       if (IsMillerModulationNibble2(Uart.twoBits >> Uart.syncBit)) {          // Modulation in both halves - error
+               if (IsMillerModulationNibble1(Uart.fourBits >> Uart.syncBit)) {                 
+                       if (IsMillerModulationNibble2(Uart.fourBits >> Uart.syncBit)) {         // Modulation in both halves - error
                                UartReset();
                        } else {                                                                                                                        // Modulation in first half = Sequence Z = logic "0"
                                if (Uart.state == STATE_MILLER_X) {                                                             // error - must not follow after X
@@ -322,7 +328,7 @@ static RAMFUNC bool MillerDecoding(uint8_t bit, uint32_t non_real_time)
                                }
                        }
                } else {
-                       if (IsMillerModulationNibble2(Uart.twoBits >> Uart.syncBit)) {          // Modulation second half = Sequence X = logic "1"
+                       if (IsMillerModulationNibble2(Uart.fourBits >> Uart.syncBit)) {         // Modulation second half = Sequence X = logic "1"
                                Uart.bitCount++;
                                Uart.shiftReg = (Uart.shiftReg >> 1) | 0x100;                                   // add a 1 to the shiftreg
                                Uart.state = STATE_MILLER_X;
@@ -358,12 +364,10 @@ static RAMFUNC bool MillerDecoding(uint8_t bit, uint32_t non_real_time)
                                                return TRUE;                                                                                    // we are finished with decoding the raw data sequence
                                        } else {
                                                UartReset();                                                                                    // Nothing received - start over
-                                               Uart.highCnt = 1;
                                        }
                                }
                                if (Uart.state == STATE_START_OF_COMMUNICATION) {                               // error - must not follow directly after SOC
                                        UartReset();
-                                       Uart.highCnt = 1;
                                } else {                                                                                                                // a logic "0"
                                        Uart.bitCount++;
                                        Uart.shiftReg = (Uart.shiftReg >> 1);                                           // add a 0 to the shiftreg
@@ -551,12 +555,8 @@ void RAMFUNC SnoopIso14443a(uint8_t param) {
        
        LEDsoff();
 
-       // We won't start recording the frames that we acquire until we trigger;
-       // a good trigger condition to get started is probably when we see a
-       // response from the tag.
-       // triggered == FALSE -- to wait first for card
-       bool triggered = !(param & 0x03); 
-       
+       iso14443a_setup(FPGA_HF_ISO14443A_SNIFFER);
+
        // Allocate memory from BigBuf for some buffers
        // free all previous allocations first
        BigBuf_free();
@@ -583,8 +583,6 @@ void RAMFUNC SnoopIso14443a(uint8_t param) {
        bool TagIsActive = FALSE;
        bool ReaderIsActive = FALSE;
        
-       iso14443a_setup(FPGA_HF_ISO14443A_SNIFFER);
-
        // Set up the demodulator for tag -> reader responses.
        DemodInit(receivedResponse, receivedResponsePar);
        
@@ -594,6 +592,12 @@ void RAMFUNC SnoopIso14443a(uint8_t param) {
        // Setup and start DMA.
        FpgaSetupSscDma((uint8_t *)dmaBuf, DMA_BUFFER_SIZE);
        
+       // We won't start recording the frames that we acquire until we trigger;
+       // a good trigger condition to get started is probably when we see a
+       // response from the tag.
+       // triggered == FALSE -- to wait first for card
+       bool triggered = !(param & 0x03); 
+       
        // And now we loop, receiving samples.
        for(uint32_t rsamples = 0; TRUE; ) {
 
@@ -680,6 +684,9 @@ void RAMFUNC SnoopIso14443a(uint8_t param) {
 
                                        // And ready to receive another response.
                                        DemodReset();
+                                       // And reset the Miller decoder including itS (now outdated) input buffer
+                                       UartInit(receivedCmd, receivedCmdPar);
+
                                        LED_C_OFF();
                                } 
                                TagIsActive = (Demod.state != DEMOD_UNSYNCD);
@@ -1026,6 +1033,9 @@ void SimulateIso14443aTag(int tagType, int uid_1st, int uid_2nd, byte_t* data)
                .modulation_n = 0
        };
   
+       // We need to listen to the high-frequency, peak-detected path.
+       iso14443a_setup(FPGA_HF_ISO14443A_TAGSIM_LISTEN);
+
        BigBuf_free_keep_EM();
 
        // allocate buffers:
@@ -1054,16 +1064,12 @@ void SimulateIso14443aTag(int tagType, int uid_1st, int uid_2nd, byte_t* data)
        int happened2 = 0;
        int cmdsRecvd = 0;
 
-       // We need to listen to the high-frequency, peak-detected path.
-       iso14443a_setup(FPGA_HF_ISO14443A_TAGSIM_LISTEN);
-
        cmdsRecvd = 0;
        tag_response_info_t* p_response;
 
        LED_A_ON();
        for(;;) {
                // Clean receive command buffer
-               
                if(!GetIso14443aCommandFromReader(receivedCmd, receivedCmdPar, &len)) {
                        DbpString("Button press");
                        break;
@@ -1337,7 +1343,7 @@ void CodeIso14443aBitsAsReaderPar(const uint8_t *cmd, uint16_t bits, const uint8
                }
 
                // Only transmit parity bit if we transmitted a complete byte
-               if (j == 8) {
+               if (j == 8 && parity != NULL) {
                        // Get the parity bit
                        if (parity[i>>3] & (0x80 >> (i&0x0007))) {
                                // Sequence X
@@ -1631,6 +1637,7 @@ static int GetIso14443aAnswerFromTag(uint8_t *receivedResponse, uint8_t *receive
        }
 }
 
+
 void ReaderTransmitBitsPar(uint8_t* frame, uint16_t bits, uint8_t *par, uint32_t *timing)
 {
        CodeIso14443aBitsAsReaderPar(frame, bits, par);
@@ -1646,11 +1653,13 @@ void ReaderTransmitBitsPar(uint8_t* frame, uint16_t bits, uint8_t *par, uint32_t
        }
 }
 
+
 void ReaderTransmitPar(uint8_t* frame, uint16_t len, uint8_t *par, uint32_t *timing)
 {
   ReaderTransmitBitsPar(frame, len*8, par, timing);
 }
 
+
 void ReaderTransmitBits(uint8_t* frame, uint16_t len, uint32_t *timing)
 {
   // Generate parity and redirect
@@ -1659,6 +1668,7 @@ void ReaderTransmitBits(uint8_t* frame, uint16_t len, uint32_t *timing)
   ReaderTransmitBitsPar(frame, len, par, timing);
 }
 
+
 void ReaderTransmit(uint8_t* frame, uint16_t len, uint32_t *timing)
 {
   // Generate parity and redirect
@@ -1719,6 +1729,11 @@ int iso14443a_select_card(byte_t *uid_ptr, iso14a_card_select_t *p_hi14a_card, u
                memset(uid_ptr,0,10);
        }
 
+       // check for proprietary anticollision:
+       if ((resp[0] & 0x1F) == 0) {
+               return 3;
+       }
+       
        // OK we will select at least at cascade 1, lets see if first byte of UID was 0x88 in
        // which case we need to make a cascade 2 request and select - this is a long UID
        // While the UID is not complete, the 3nd bit (from the right) is set in the SAK.
@@ -1927,15 +1942,38 @@ void ReaderIso14443a(UsbCommand *c)
 
        if(param & ISO14A_RAW) {
                if(param & ISO14A_APPEND_CRC) {
-                       AppendCrc14443a(cmd,len);
+                       if(param & ISO14A_TOPAZMODE) {
+                               AppendCrc14443b(cmd,len);
+                       } else {
+                               AppendCrc14443a(cmd,len);
+                       }
                        len += 2;
                        if (lenbits) lenbits += 16;
                }
-               if(lenbits>0) {
-                       GetParity(cmd, lenbits/8, par);
-                       ReaderTransmitBitsPar(cmd, lenbits, par, NULL);
-               } else {
-                       ReaderTransmit(cmd,len, NULL);
+               if(lenbits>0) {                         // want to send a specific number of bits (e.g. short commands)
+                       if(param & ISO14A_TOPAZMODE) {
+                               int bits_to_send = lenbits;
+                               uint16_t i = 0;
+                               ReaderTransmitBitsPar(&cmd[i++], MIN(bits_to_send, 7), NULL, NULL);             // first byte is always short (7bits) and no parity
+                               bits_to_send -= 7;
+                               while (bits_to_send > 0) {
+                                       ReaderTransmitBitsPar(&cmd[i++], MIN(bits_to_send, 8), NULL, NULL);     // following bytes are 8 bit and no parity
+                                       bits_to_send -= 8;
+                               }
+                       } else {
+                               GetParity(cmd, lenbits/8, par);
+                               ReaderTransmitBitsPar(cmd, lenbits, par, NULL);                                                 // bytes are 8 bit with odd parity
+                       }
+               } else {                                        // want to send complete bytes only
+                       if(param & ISO14A_TOPAZMODE) {
+                               uint16_t i = 0;
+                               ReaderTransmitBitsPar(&cmd[i++], 7, NULL, NULL);                                                // first byte: 7 bits, no paritiy
+                               while (i < len) {
+                                       ReaderTransmitBitsPar(&cmd[i++], 8, NULL, NULL);                                        // following bytes: 8 bits, no paritiy
+                               }
+                       } else {
+                               ReaderTransmit(cmd,len, NULL);                                                                                  // 8 bits, odd parity
+                       }
                }
                arg0 = ReaderReceive(buf, par);
                cmd_send(CMD_ACK,arg0,0,0,buf,sizeof(buf));
@@ -1971,7 +2009,7 @@ int32_t dist_nt(uint32_t nt1, uint32_t nt2) {
                nttmp1 = prng_successor(nttmp1, 1);
                if (nttmp1 == nt2) return i;
                nttmp2 = prng_successor(nttmp2, 1);
-                       if (nttmp2 == nt1) return -i;
+               if (nttmp2 == nt1) return -i;
                }
        
        return(-99999); // either nt1 or nt2 are invalid nonces
@@ -1994,6 +2032,10 @@ void ReaderMifare(bool first_try)
        uint8_t receivedAnswer[MAX_MIFARE_FRAME_SIZE];
        uint8_t receivedAnswerPar[MAX_MIFARE_PARITY_SIZE];
 
+       if (first_try) { 
+               iso14443a_setup(FPGA_HF_ISO14443A_READER_MOD);
+       }
+       
        // free eventually allocated BigBuf memory. We want all for tracing.
        BigBuf_free();
        
@@ -2013,20 +2055,20 @@ void ReaderMifare(bool first_try)
        byte_t par_list[8] = {0x00};
        byte_t ks_list[8] = {0x00};
 
+       #define PRNG_SEQUENCE_LENGTH  (1 << 16);
        static uint32_t sync_time;
-       static uint32_t sync_cycles;
+       static int32_t sync_cycles;
        int catch_up_cycles = 0;
        int last_catch_up = 0;
+       uint16_t elapsed_prng_sequences;
        uint16_t consecutive_resyncs = 0;
        int isOK = 0;
 
        if (first_try) { 
                mf_nr_ar3 = 0;
-               iso14443a_setup(FPGA_HF_ISO14443A_READER_MOD);
                sync_time = GetCountSspClk() & 0xfffffff8;
-               sync_cycles = 65536;                                                                    // theory: Mifare Classic's random generator repeats every 2^16 cycles (and so do the nonces).
+               sync_cycles = PRNG_SEQUENCE_LENGTH;                                                     // theory: Mifare Classic's random generator repeats every 2^16 cycles (and so do the tag nonces).
                nt_attacked = 0;
-               nt = 0;
                par[0] = 0;
        }
        else {
@@ -2040,33 +2082,84 @@ void ReaderMifare(bool first_try)
        LED_B_OFF();
        LED_C_OFF();
        
-  
+
+       #define MAX_UNEXPECTED_RANDOM   4               // maximum number of unexpected (i.e. real) random numbers when trying to sync. Then give up.
+       #define MAX_SYNC_TRIES                  32
+       #define NUM_DEBUG_INFOS                 8               // per strategy
+       #define MAX_STRATEGY                    3
+       uint16_t unexpected_random = 0;
+       uint16_t sync_tries = 0;
+       int16_t debug_info_nr = -1;
+       uint16_t strategy = 0;
+       int32_t debug_info[MAX_STRATEGY][NUM_DEBUG_INFOS];
+       uint32_t select_time;
+       uint32_t halt_time;
+       
        for(uint16_t i = 0; TRUE; i++) {
                
+               LED_C_ON();
                WDT_HIT();
 
                // Test if the action was cancelled
                if(BUTTON_PRESS()) {
+                       isOK = -1;
                        break;
                }
                
-               LED_C_ON();
+               if (strategy == 2) {
+                       // test with additional hlt command
+                       halt_time = 0;
+                       int len = mifare_sendcmd_short(NULL, false, 0x50, 0x00, receivedAnswer, receivedAnswerPar, &halt_time);
+                       if (len && MF_DBGLEVEL >= 3) {
+                               Dbprintf("Unexpected response of %d bytes to hlt command (additional debugging).", len);
+                       }
+               }
 
+               if (strategy == 3) {
+                       // test with FPGA power off/on
+                       FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF);
+                       SpinDelay(200);
+                       iso14443a_setup(FPGA_HF_ISO14443A_READER_MOD);
+                       SpinDelay(100);
+               }
+               
                if(!iso14443a_select_card(uid, NULL, &cuid)) {
                        if (MF_DBGLEVEL >= 1)   Dbprintf("Mifare: Can't select card");
                        continue;
                }
+               select_time = GetCountSspClk();
 
-               sync_time = (sync_time & 0xfffffff8) + sync_cycles + catch_up_cycles;
-               catch_up_cycles = 0;
+               elapsed_prng_sequences = 1;
+               if (debug_info_nr == -1) {
+                       sync_time = (sync_time & 0xfffffff8) + sync_cycles + catch_up_cycles;
+                       catch_up_cycles = 0;
 
-               // if we missed the sync time already, advance to the next nonce repeat
-               while(GetCountSspClk() > sync_time) {
-                       sync_time = (sync_time & 0xfffffff8) + sync_cycles;
-               }
+                       // if we missed the sync time already, advance to the next nonce repeat
+                       while(GetCountSspClk() > sync_time) {
+                               elapsed_prng_sequences++;
+                               sync_time = (sync_time & 0xfffffff8) + sync_cycles;
+                       }
 
-               // Transmit MIFARE_CLASSIC_AUTH at synctime. Should result in returning the same tag nonce (== nt_attacked) 
-               ReaderTransmit(mf_auth, sizeof(mf_auth), &sync_time);
+                       // Transmit MIFARE_CLASSIC_AUTH at synctime. Should result in returning the same tag nonce (== nt_attacked) 
+                       ReaderTransmit(mf_auth, sizeof(mf_auth), &sync_time);
+               } else {
+                       // collect some information on tag nonces for debugging:
+                       #define DEBUG_FIXED_SYNC_CYCLES PRNG_SEQUENCE_LENGTH
+                       if (strategy == 0) {
+                               // nonce distances at fixed time after card select:
+                               sync_time = select_time + DEBUG_FIXED_SYNC_CYCLES;
+                       } else if (strategy == 1) {
+                               // nonce distances at fixed time between authentications:
+                               sync_time = sync_time + DEBUG_FIXED_SYNC_CYCLES;
+                       } else if (strategy == 2) {
+                               // nonce distances at fixed time after halt:
+                               sync_time = halt_time + DEBUG_FIXED_SYNC_CYCLES;
+                       } else {
+                               // nonce_distances at fixed time after power on
+                               sync_time = DEBUG_FIXED_SYNC_CYCLES;
+                       }
+                       ReaderTransmit(mf_auth, sizeof(mf_auth), &sync_time);
+               }                       
 
                // Receive the (4 Byte) "random" nonce
                if (!ReaderReceive(receivedAnswer, receivedAnswerPar)) {
@@ -2084,13 +2177,37 @@ void ReaderMifare(bool first_try)
                        int nt_distance = dist_nt(previous_nt, nt);
                        if (nt_distance == 0) {
                                nt_attacked = nt;
-                       }
-                       else {
-                               if (nt_distance == -99999) { // invalid nonce received, try again
-                                       continue;
+                       } else {
+                               if (nt_distance == -99999) { // invalid nonce received
+                                       unexpected_random++;
+                                       if (unexpected_random > MAX_UNEXPECTED_RANDOM) {
+                                               isOK = -3;              // Card has an unpredictable PRNG. Give up      
+                                               break;
+                                       } else {
+                                               continue;               // continue trying...
+                                       }
+                               }
+                               if (++sync_tries > MAX_SYNC_TRIES) {
+                                       if (strategy > MAX_STRATEGY || MF_DBGLEVEL < 3) {
+                                               isOK = -4;                      // Card's PRNG runs at an unexpected frequency or resets unexpectedly
+                                               break;
+                                       } else {                                // continue for a while, just to collect some debug info
+                                               debug_info[strategy][debug_info_nr] = nt_distance;
+                                               debug_info_nr++;
+                                               if (debug_info_nr == NUM_DEBUG_INFOS) {
+                                                       strategy++;
+                                                       debug_info_nr = 0;
+                                               }
+                                               continue;
+                                       }
+                               }
+                               sync_cycles = (sync_cycles - nt_distance/elapsed_prng_sequences);
+                               if (sync_cycles <= 0) {
+                                       sync_cycles += PRNG_SEQUENCE_LENGTH;
+                               }
+                               if (MF_DBGLEVEL >= 3) {
+                                       Dbprintf("calibrating in cycle %d. nt_distance=%d, elapsed_prng_sequences=%d, new sync_cycles: %d\n", i, nt_distance, elapsed_prng_sequences, sync_cycles);
                                }
-                               sync_cycles = (sync_cycles - nt_distance);
-                               if (MF_DBGLEVEL >= 3) Dbprintf("calibrating in cycle %d. nt_distance=%d, Sync_cycles: %d\n", i, nt_distance, sync_cycles);
                                continue;
                        }
                }
@@ -2101,6 +2218,7 @@ void ReaderMifare(bool first_try)
                                catch_up_cycles = 0;
                                continue;
                        }
+                       catch_up_cycles /= elapsed_prng_sequences;
                        if (catch_up_cycles == last_catch_up) {
                                consecutive_resyncs++;
                        }
@@ -2114,6 +2232,9 @@ void ReaderMifare(bool first_try)
                        else {  
                                sync_cycles = sync_cycles + catch_up_cycles;
                                if (MF_DBGLEVEL >= 3) Dbprintf("Lost sync in cycle %d for the fourth time consecutively (nt_distance = %d). Adjusting sync_cycles to %d.\n", i, -catch_up_cycles, sync_cycles);
+                               last_catch_up = 0;
+                               catch_up_cycles = 0;
+                               consecutive_resyncs = 0;
                        }
                        continue;
                }
@@ -2121,12 +2242,10 @@ void ReaderMifare(bool first_try)
                consecutive_resyncs = 0;
                
                // Receive answer. This will be a 4 Bit NACK when the 8 parity bits are OK after decoding
-               if (ReaderReceive(receivedAnswer, receivedAnswerPar))
-               {
+               if (ReaderReceive(receivedAnswer, receivedAnswerPar)) {
                        catch_up_cycles = 8;    // the PRNG is delayed by 8 cycles due to the NAC (4Bits = 0x05 encrypted) transfer
        
-                       if (nt_diff == 0)
-                       {
+                       if (nt_diff == 0) {
                                par_low = par[0] & 0xE0; // there is no need to check all parities for other nt_diff. Parity Bits for mf_nr_ar[0..2] won't change
                        }
 
@@ -2149,6 +2268,10 @@ void ReaderMifare(bool first_try)
                        if (nt_diff == 0 && first_try)
                        {
                                par[0]++;
+                               if (par[0] == 0x00) {           // tried all 256 possible parities without success. Card doesn't send NACK.
+                                       isOK = -2;
+                                       break;
+                               }
                        } else {
                                par[0] = ((par[0] & 0x1F) + 1) | par_low;
                        }
@@ -2157,6 +2280,16 @@ void ReaderMifare(bool first_try)
 
 
        mf_nr_ar[3] &= 0x1F;
+
+       if (isOK == -4) {
+               if (MF_DBGLEVEL >= 3) {
+                       for (uint16_t i = 0; i <= MAX_STRATEGY; i++) {
+                               for(uint16_t j = 0; j < NUM_DEBUG_INFOS; j++) {
+                                       Dbprintf("collected debug info[%d][%d] = %d", i, j, debug_info[i][j]);
+                               }
+                       }
+               }
+       }
        
        byte_t buf[28];
        memcpy(buf + 0,  uid, 4);
@@ -2165,7 +2298,7 @@ void ReaderMifare(bool first_try)
        memcpy(buf + 16, ks_list, 8);
        memcpy(buf + 24, mf_nr_ar, 4);
                
-       cmd_send(CMD_ACK,isOK,0,0,buf,28);
+       cmd_send(CMD_ACK, isOK, 0, 0, buf, 28);
 
        // Thats it...
        FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF);
@@ -2226,13 +2359,6 @@ void Mifare1ksim(uint8_t flags, uint8_t exitAfterNReads, uint8_t arg2, uint8_t *
        uint32_t ar_nr_responses[] = {0,0,0,0,0,0,0,0};
        uint8_t ar_nr_collected = 0;
 
-       // free eventually allocated BigBuf memory but keep Emulator Memory
-       BigBuf_free_keep_EM();
-
-       // clear trace
-       clear_trace();
-       set_tracing(TRUE);
-
        // Authenticate response - nonce
        uint32_t nonce = bytes_to_num(rAUTH_NT, 4);
        
@@ -2274,10 +2400,6 @@ void Mifare1ksim(uint8_t flags, uint8_t exitAfterNReads, uint8_t arg2, uint8_t *
                rUIDBCC2[4] = rUIDBCC2[0] ^ rUIDBCC2[1] ^ rUIDBCC2[2] ^ rUIDBCC2[3];
        }
 
-       // We need to listen to the high-frequency, peak-detected path.
-       iso14443a_setup(FPGA_HF_ISO14443A_TAGSIM_LISTEN);
-
-
        if (MF_DBGLEVEL >= 1)   {
                if (!_7BUID) {
                        Dbprintf("4B UID: %02x%02x%02x%02x", 
@@ -2289,6 +2411,17 @@ void Mifare1ksim(uint8_t flags, uint8_t exitAfterNReads, uint8_t arg2, uint8_t *
                }
        }
 
+       // We need to listen to the high-frequency, peak-detected path.
+       iso14443a_setup(FPGA_HF_ISO14443A_TAGSIM_LISTEN);
+
+       // free eventually allocated BigBuf memory but keep Emulator Memory
+       BigBuf_free_keep_EM();
+
+       // clear trace
+       clear_trace();
+       set_tracing(TRUE);
+
+
        bool finished = FALSE;
        while (!BUTTON_PRESS() && !finished) {
                WDT_HIT();
@@ -2510,13 +2643,13 @@ void Mifare1ksim(uint8_t flags, uint8_t exitAfterNReads, uint8_t arg2, uint8_t *
                                                || receivedCmd[0] == 0xB0) { // transfer
                                        if (receivedCmd[1] >= 16 * 4) {
                                                EmSend4bit(mf_crypto1_encrypt4bit(pcs, CARD_NACK_NA));
-                                               if (MF_DBGLEVEL >= 2) Dbprintf("Reader tried to operate (0x%02) on out of range block: %d (0x%02x), nacking",receivedCmd[0],receivedCmd[1],receivedCmd[1]);
+                                               if (MF_DBGLEVEL >= 2) Dbprintf("Reader tried to operate (0x%02x) on out of range block: %d (0x%02x), nacking",receivedCmd[0],receivedCmd[1],receivedCmd[1]);
                                                break;
                                        }
 
                                        if (receivedCmd[1] / 4 != cardAUTHSC) {
                                                EmSend4bit(mf_crypto1_encrypt4bit(pcs, CARD_NACK_NA));
-                                               if (MF_DBGLEVEL >= 2) Dbprintf("Reader tried to operate (0x%02) on block (0x%02x) not authenticated for (0x%02x), nacking",receivedCmd[0],receivedCmd[1],cardAUTHSC);
+                                               if (MF_DBGLEVEL >= 2) Dbprintf("Reader tried to operate (0x%02x) on block (0x%02x) not authenticated for (0x%02x), nacking",receivedCmd[0],receivedCmd[1],cardAUTHSC);
                                                break;
                                        }
                                }
@@ -2707,10 +2840,8 @@ void RAMFUNC SniffMifare(uint8_t param) {
        uint8_t receivedResponse[MAX_MIFARE_FRAME_SIZE];
        uint8_t receivedResponsePar[MAX_MIFARE_PARITY_SIZE];
 
-       // As we receive stuff, we copy it from receivedCmd or receivedResponse
-       // into trace, along with its length and other annotations.
-       //uint8_t *trace = (uint8_t *)BigBuf;
-       
+       iso14443a_setup(FPGA_HF_ISO14443A_SNIFFER);
+
        // free eventually allocated BigBuf memory
        BigBuf_free();
        // allocate the DMA buffer, used to stream samples from the FPGA
@@ -2722,8 +2853,6 @@ void RAMFUNC SniffMifare(uint8_t param) {
        bool ReaderIsActive = FALSE;
        bool TagIsActive = FALSE;
 
-       iso14443a_setup(FPGA_HF_ISO14443A_SNIFFER);
-
        // Set up the demodulator for tag -> reader responses.
        DemodInit(receivedResponse, receivedResponsePar);
 
@@ -2803,7 +2932,7 @@ void RAMFUNC SniffMifare(uint8_t param) {
                                        if (MfSniffLogic(receivedCmd, Uart.len, Uart.parity, Uart.bitCount, TRUE)) break;
 
                                        /* And ready to receive another command. */
-                                       UartReset();
+                                       UartInit(receivedCmd, receivedCmdPar);
                                        
                                        /* And also reset the demod code */
                                        DemodReset();
@@ -2820,6 +2949,8 @@ void RAMFUNC SniffMifare(uint8_t param) {
 
                                        // And ready to receive another response.
                                        DemodReset();
+                                       // And reset the Miller decoder including its (now outdated) input buffer
+                                       UartInit(receivedCmd, receivedCmdPar);
                                }
                                TagIsActive = (Demod.state != DEMOD_UNSYNCD);
                        }
index 1e978e8808fa683f7744211e8bd4060c32eb59c5..ec99ab99a4f7426628d73ace74f10237b81838c3 100644 (file)
@@ -56,15 +56,14 @@ typedef struct {
                // DROP_FIRST_HALF,
                } state;
        uint16_t shiftReg;
-       uint16_t bitCount;
+       int16_t  bitCount;
        uint16_t len;
        uint16_t byteCntMax;
        uint16_t posCnt;
        uint16_t syncBit;
        uint8_t  parityBits;
        uint8_t  parityLen;
-       uint16_t highCnt;
-       uint16_t twoBits;
+       uint32_t fourBits;
        uint32_t startTime, endTime;
     uint8_t *output;
        uint8_t *parity;
diff --git a/armsrc/iso14443b.c b/armsrc/iso14443b.c
new file mode 100644 (file)
index 0000000..82e5dd6
--- /dev/null
@@ -0,0 +1,1343 @@
+//-----------------------------------------------------------------------------
+// Jonathan Westhues, split Nov 2006
+//
+// This code is licensed to you under the terms of the GNU GPL, version 2 or,
+// at your option, any later version. See the LICENSE.txt file for the text of
+// the license.
+//-----------------------------------------------------------------------------
+// Routines to support ISO 14443B. This includes both the reader software and
+// the `fake tag' modes.
+//-----------------------------------------------------------------------------
+
+#include "proxmark3.h"
+#include "apps.h"
+#include "util.h"
+#include "string.h"
+
+#include "iso14443crc.h"
+
+#define RECEIVE_SAMPLES_TIMEOUT 2000
+#define ISO14443B_DMA_BUFFER_SIZE 256
+
+// PCB Block number for APDUs
+static uint8_t pcb_blocknum = 0;
+
+//=============================================================================
+// An ISO 14443 Type B tag. We listen for commands from the reader, using
+// a UART kind of thing that's implemented in software. When we get a
+// frame (i.e., a group of bytes between SOF and EOF), we check the CRC.
+// If it's good, then we can do something appropriate with it, and send
+// a response.
+//=============================================================================
+
+//-----------------------------------------------------------------------------
+// Code up a string of octets at layer 2 (including CRC, we don't generate
+// that here) so that they can be transmitted to the reader. Doesn't transmit
+// them yet, just leaves them ready to send in ToSend[].
+//-----------------------------------------------------------------------------
+static void CodeIso14443bAsTag(const uint8_t *cmd, int len)
+{
+       int i;
+
+       ToSendReset();
+
+       // Transmit a burst of ones, as the initial thing that lets the
+       // reader get phase sync. This (TR1) must be > 80/fs, per spec,
+       // but tag that I've tried (a Paypass) exceeds that by a fair bit,
+       // so I will too.
+       for(i = 0; i < 20; i++) {
+               ToSendStuffBit(1);
+               ToSendStuffBit(1);
+               ToSendStuffBit(1);
+               ToSendStuffBit(1);
+       }
+
+       // Send SOF.
+       for(i = 0; i < 10; i++) {
+               ToSendStuffBit(0);
+               ToSendStuffBit(0);
+               ToSendStuffBit(0);
+               ToSendStuffBit(0);
+       }
+       for(i = 0; i < 2; i++) {
+               ToSendStuffBit(1);
+               ToSendStuffBit(1);
+               ToSendStuffBit(1);
+               ToSendStuffBit(1);
+       }
+
+       for(i = 0; i < len; i++) {
+               int j;
+               uint8_t b = cmd[i];
+
+               // Start bit
+               ToSendStuffBit(0);
+               ToSendStuffBit(0);
+               ToSendStuffBit(0);
+               ToSendStuffBit(0);
+
+               // Data bits
+               for(j = 0; j < 8; j++) {
+                       if(b & 1) {
+                               ToSendStuffBit(1);
+                               ToSendStuffBit(1);
+                               ToSendStuffBit(1);
+                               ToSendStuffBit(1);
+                       } else {
+                               ToSendStuffBit(0);
+                               ToSendStuffBit(0);
+                               ToSendStuffBit(0);
+                               ToSendStuffBit(0);
+                       }
+                       b >>= 1;
+               }
+
+               // Stop bit
+               ToSendStuffBit(1);
+               ToSendStuffBit(1);
+               ToSendStuffBit(1);
+               ToSendStuffBit(1);
+       }
+
+       // Send EOF.
+       for(i = 0; i < 10; i++) {
+               ToSendStuffBit(0);
+               ToSendStuffBit(0);
+               ToSendStuffBit(0);
+               ToSendStuffBit(0);
+       }
+       for(i = 0; i < 2; i++) {
+               ToSendStuffBit(1);
+               ToSendStuffBit(1);
+               ToSendStuffBit(1);
+               ToSendStuffBit(1);
+       }
+
+       // Convert from last byte pos to length
+       ToSendMax++;
+}
+
+//-----------------------------------------------------------------------------
+// The software UART that receives commands from the reader, and its state
+// variables.
+//-----------------------------------------------------------------------------
+static struct {
+       enum {
+               STATE_UNSYNCD,
+               STATE_GOT_FALLING_EDGE_OF_SOF,
+               STATE_AWAITING_START_BIT,
+               STATE_RECEIVING_DATA
+       }       state;
+       uint16_t    shiftReg;
+       int     bitCnt;
+       int     byteCnt;
+       int     byteCntMax;
+       int     posCnt;
+       uint8_t   *output;
+} Uart;
+
+/* Receive & handle a bit coming from the reader.
+ *
+ * This function is called 4 times per bit (every 2 subcarrier cycles).
+ * Subcarrier frequency fs is 848kHz, 1/fs = 1,18us, i.e. function is called every 2,36us
+ *
+ * LED handling:
+ * LED A -> ON once we have received the SOF and are expecting the rest.
+ * LED A -> OFF once we have received EOF or are in error state or unsynced
+ *
+ * Returns: true if we received a EOF
+ *          false if we are still waiting for some more
+ */
+static RAMFUNC int Handle14443bUartBit(uint8_t bit)
+{
+       switch(Uart.state) {
+               case STATE_UNSYNCD:
+                       if(!bit) {
+                               // we went low, so this could be the beginning
+                               // of an SOF
+                               Uart.state = STATE_GOT_FALLING_EDGE_OF_SOF;
+                               Uart.posCnt = 0;
+                               Uart.bitCnt = 0;
+                       }
+                       break;
+
+               case STATE_GOT_FALLING_EDGE_OF_SOF:
+                       Uart.posCnt++;
+                       if(Uart.posCnt == 2) {  // sample every 4 1/fs in the middle of a bit
+                               if(bit) {
+                                       if(Uart.bitCnt > 9) {
+                                               // we've seen enough consecutive
+                                               // zeros that it's a valid SOF
+                                               Uart.posCnt = 0;
+                                               Uart.byteCnt = 0;
+                                               Uart.state = STATE_AWAITING_START_BIT;
+                                               LED_A_ON(); // Indicate we got a valid SOF
+                                       } else {
+                                               // didn't stay down long enough
+                                               // before going high, error
+                                               Uart.state = STATE_UNSYNCD;
+                                       }
+                               } else {
+                                       // do nothing, keep waiting
+                               }
+                               Uart.bitCnt++;
+                       }
+                       if(Uart.posCnt >= 4) Uart.posCnt = 0;
+                       if(Uart.bitCnt > 12) {
+                               // Give up if we see too many zeros without
+                               // a one, too.
+                               LED_A_OFF();
+                               Uart.state = STATE_UNSYNCD;
+                       }
+                       break;
+
+               case STATE_AWAITING_START_BIT:
+                       Uart.posCnt++;
+                       if(bit) {
+                               if(Uart.posCnt > 50/2) {        // max 57us between characters = 49 1/fs, max 3 etus after low phase of SOF = 24 1/fs
+                                       // stayed high for too long between
+                                       // characters, error
+                                       Uart.state = STATE_UNSYNCD;
+                               }
+                       } else {
+                               // falling edge, this starts the data byte
+                               Uart.posCnt = 0;
+                               Uart.bitCnt = 0;
+                               Uart.shiftReg = 0;
+                               Uart.state = STATE_RECEIVING_DATA;
+                       }
+                       break;
+
+               case STATE_RECEIVING_DATA:
+                       Uart.posCnt++;
+                       if(Uart.posCnt == 2) {
+                               // time to sample a bit
+                               Uart.shiftReg >>= 1;
+                               if(bit) {
+                                       Uart.shiftReg |= 0x200;
+                               }
+                               Uart.bitCnt++;
+                       }
+                       if(Uart.posCnt >= 4) {
+                               Uart.posCnt = 0;
+                       }
+                       if(Uart.bitCnt == 10) {
+                               if((Uart.shiftReg & 0x200) && !(Uart.shiftReg & 0x001))
+                               {
+                                       // this is a data byte, with correct
+                                       // start and stop bits
+                                       Uart.output[Uart.byteCnt] = (Uart.shiftReg >> 1) & 0xff;
+                                       Uart.byteCnt++;
+
+                                       if(Uart.byteCnt >= Uart.byteCntMax) {
+                                               // Buffer overflowed, give up
+                                               LED_A_OFF();
+                                               Uart.state = STATE_UNSYNCD;
+                                       } else {
+                                               // so get the next byte now
+                                               Uart.posCnt = 0;
+                                               Uart.state = STATE_AWAITING_START_BIT;
+                                       }
+                               } else if (Uart.shiftReg == 0x000) {
+                                       // this is an EOF byte
+                                       LED_A_OFF(); // Finished receiving
+                                       Uart.state = STATE_UNSYNCD;
+                                       if (Uart.byteCnt != 0) {
+                                               return TRUE;
+                                       }
+                               } else {
+                                       // this is an error
+                                       LED_A_OFF();
+                                       Uart.state = STATE_UNSYNCD;
+                               }
+                       }
+                       break;
+
+               default:
+                       LED_A_OFF();
+                       Uart.state = STATE_UNSYNCD;
+                       break;
+       }
+
+       return FALSE;
+}
+
+
+static void UartReset()
+{
+       Uart.byteCntMax = MAX_FRAME_SIZE;
+       Uart.state = STATE_UNSYNCD;
+       Uart.byteCnt = 0;
+       Uart.bitCnt = 0;
+}
+
+
+static void UartInit(uint8_t *data)
+{
+       Uart.output = data;
+       UartReset();
+}
+
+
+//-----------------------------------------------------------------------------
+// Receive a command (from the reader to us, where we are the simulated tag),
+// and store it in the given buffer, up to the given maximum length. Keeps
+// spinning, waiting for a well-framed command, until either we get one
+// (returns TRUE) or someone presses the pushbutton on the board (FALSE).
+//
+// Assume that we're called with the SSC (to the FPGA) and ADC path set
+// correctly.
+//-----------------------------------------------------------------------------
+static int GetIso14443bCommandFromReader(uint8_t *received, uint16_t *len)
+{
+       // Set FPGA mode to "simulated ISO 14443B tag", no modulation (listen
+       // only, since we are receiving, not transmitting).
+       // Signal field is off with the appropriate LED
+       LED_D_OFF();
+       FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_SIMULATOR | FPGA_HF_SIMULATOR_NO_MODULATION);
+
+       // Now run a `software UART' on the stream of incoming samples.
+       UartInit(received);
+
+       for(;;) {
+               WDT_HIT();
+
+               if(BUTTON_PRESS()) return FALSE;
+
+               if(AT91C_BASE_SSC->SSC_SR & (AT91C_SSC_RXRDY)) {
+                       uint8_t b = (uint8_t)AT91C_BASE_SSC->SSC_RHR;
+                       for(uint8_t mask = 0x80; mask != 0x00; mask >>= 1) {
+                               if(Handle14443bUartBit(b & mask)) {
+                                       *len = Uart.byteCnt;
+                                       return TRUE;
+                               }
+                       }
+               }
+       }
+
+       return FALSE;
+}
+
+//-----------------------------------------------------------------------------
+// Main loop of simulated tag: receive commands from reader, decide what
+// response to send, and send it.
+//-----------------------------------------------------------------------------
+void SimulateIso14443bTag(void)
+{
+       // the only commands we understand is WUPB, AFI=0, Select All, N=1:
+       static const uint8_t cmd1[] = { 0x05, 0x00, 0x08, 0x39, 0x73 }; // WUPB
+       // ... and REQB, AFI=0, Normal Request, N=1:
+       static const uint8_t cmd2[] = { 0x05, 0x00, 0x00, 0x71, 0xFF }; // REQB
+       // ... and HLTB
+       static const uint8_t cmd3[] = { 0x50, 0xff, 0xff, 0xff, 0xff }; // HLTB
+       // ... and ATTRIB
+       static const uint8_t cmd4[] = { 0x1D, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}; // ATTRIB
+
+       // ... and we always respond with ATQB, PUPI = 820de174, Application Data = 0x20381922,
+       // supports only 106kBit/s in both directions, max frame size = 32Bytes,
+       // supports ISO14443-4, FWI=8 (77ms), NAD supported, CID not supported:
+       static const uint8_t response1[] = {
+               0x50, 0x82, 0x0d, 0xe1, 0x74, 0x20, 0x38, 0x19, 0x22,
+               0x00, 0x21, 0x85, 0x5e, 0xd7
+       };
+       // response to HLTB and ATTRIB
+       static const uint8_t response2[] = {0x00, 0x78, 0xF0};
+
+
+       FpgaDownloadAndGo(FPGA_BITSTREAM_HF);
+
+       clear_trace();
+       set_tracing(TRUE);
+
+       const uint8_t *resp;
+       uint8_t *respCode;
+       uint16_t respLen, respCodeLen;
+
+       // allocate command receive buffer
+       BigBuf_free();
+       uint8_t *receivedCmd = BigBuf_malloc(MAX_FRAME_SIZE);
+
+       uint16_t len;
+       uint16_t cmdsRecvd = 0;
+
+       // prepare the (only one) tag answer:
+       CodeIso14443bAsTag(response1, sizeof(response1));
+       uint8_t *resp1Code = BigBuf_malloc(ToSendMax);
+       memcpy(resp1Code, ToSend, ToSendMax);
+       uint16_t resp1CodeLen = ToSendMax;
+
+       // prepare the (other) tag answer:
+       CodeIso14443bAsTag(response2, sizeof(response2));
+       uint8_t *resp2Code = BigBuf_malloc(ToSendMax);
+       memcpy(resp2Code, ToSend, ToSendMax);
+       uint16_t resp2CodeLen = ToSendMax;
+
+       // We need to listen to the high-frequency, peak-detected path.
+       SetAdcMuxFor(GPIO_MUXSEL_HIPKD);
+       FpgaSetupSsc();
+
+       cmdsRecvd = 0;
+
+       for(;;) {
+
+               if(!GetIso14443bCommandFromReader(receivedCmd, &len)) {
+                       Dbprintf("button pressed, received %d commands", cmdsRecvd);
+                       break;
+               }
+
+               if (tracing) {
+                       uint8_t parity[MAX_PARITY_SIZE];
+                       LogTrace(receivedCmd, len, 0, 0, parity, TRUE);
+               }
+
+               // Good, look at the command now.
+               if ( (len == sizeof(cmd1) && memcmp(receivedCmd, cmd1, len) == 0)
+                       || (len == sizeof(cmd2) && memcmp(receivedCmd, cmd2, len) == 0) ) {
+                       resp = response1;
+                       respLen = sizeof(response1);
+                       respCode = resp1Code;
+                       respCodeLen = resp1CodeLen;
+               } else if ( (len == sizeof(cmd3) && receivedCmd[0] == cmd3[0])
+                       || (len == sizeof(cmd4) && receivedCmd[0] == cmd4[0]) ) {
+                       resp = response2;
+                       respLen = sizeof(response2);
+                       respCode = resp2Code;
+                       respCodeLen = resp2CodeLen;
+               } else {
+                       Dbprintf("new cmd from reader: len=%d, cmdsRecvd=%d", len, cmdsRecvd);
+                       // And print whether the CRC fails, just for good measure
+                       uint8_t b1, b2;
+                       if (len >= 3){ // if crc exists
+                               ComputeCrc14443(CRC_14443_B, receivedCmd, len-2, &b1, &b2);
+                               if(b1 != receivedCmd[len-2] || b2 != receivedCmd[len-1]) {
+                                       // Not so good, try again.
+                                       DbpString("+++CRC fail");
+               
+                               } else {
+                                       DbpString("CRC passes");
+                               }
+                       }
+                       //get rid of compiler warning
+                       respCodeLen = 0;
+                       resp = response1;
+                       respLen = 0;
+                       respCode = resp1Code;
+                       //don't crash at new command just wait and see if reader will send other new cmds.
+                       //break;
+               }
+
+               cmdsRecvd++;
+
+               if(cmdsRecvd > 0x30) {
+                       DbpString("many commands later...");
+                       break;
+               }
+
+               if(respCodeLen <= 0) continue;
+
+               // Modulate BPSK
+               // Signal field is off with the appropriate LED
+               LED_D_OFF();
+               FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_SIMULATOR | FPGA_HF_SIMULATOR_MODULATE_BPSK);
+               AT91C_BASE_SSC->SSC_THR = 0xff;
+               FpgaSetupSsc();
+
+               // Transmit the response.
+               uint16_t i = 0;
+               for(;;) {
+                       if(AT91C_BASE_SSC->SSC_SR & (AT91C_SSC_TXRDY)) {
+                               uint8_t b = respCode[i];
+
+                               AT91C_BASE_SSC->SSC_THR = b;
+
+                               i++;
+                               if(i > respCodeLen) {
+                                       break;
+                               }
+                       }
+                       if(AT91C_BASE_SSC->SSC_SR & (AT91C_SSC_RXRDY)) {
+                               volatile uint8_t b = (uint8_t)AT91C_BASE_SSC->SSC_RHR;
+                               (void)b;
+                       }
+               }
+
+               // trace the response:
+               if (tracing) {
+                       uint8_t parity[MAX_PARITY_SIZE];
+                       LogTrace(resp, respLen, 0, 0, parity, FALSE);
+               }
+
+       }
+}
+
+//=============================================================================
+// An ISO 14443 Type B reader. We take layer two commands, code them
+// appropriately, and then send them to the tag. We then listen for the
+// tag's response, which we leave in the buffer to be demodulated on the
+// PC side.
+//=============================================================================
+
+static struct {
+       enum {
+               DEMOD_UNSYNCD,
+               DEMOD_PHASE_REF_TRAINING,
+               DEMOD_AWAITING_FALLING_EDGE_OF_SOF,
+               DEMOD_GOT_FALLING_EDGE_OF_SOF,
+               DEMOD_AWAITING_START_BIT,
+               DEMOD_RECEIVING_DATA
+       }       state;
+       int     bitCount;
+       int     posCount;
+       int     thisBit;
+/* this had been used to add RSSI (Received Signal Strength Indication) to traces. Currently not implemented.
+       int     metric;
+       int     metricN;
+*/
+       uint16_t    shiftReg;
+       uint8_t   *output;
+       int     len;
+       int     sumI;
+       int     sumQ;
+} Demod;
+
+/*
+ * Handles reception of a bit from the tag
+ *
+ * This function is called 2 times per bit (every 4 subcarrier cycles).
+ * Subcarrier frequency fs is 848kHz, 1/fs = 1,18us, i.e. function is called every 4,72us
+ *
+ * LED handling:
+ * LED C -> ON once we have received the SOF and are expecting the rest.
+ * LED C -> OFF once we have received EOF or are unsynced
+ *
+ * Returns: true if we received a EOF
+ *          false if we are still waiting for some more
+ *
+ */
+static RAMFUNC int Handle14443bSamplesDemod(int ci, int cq)
+{
+       int v;
+
+// The soft decision on the bit uses an estimate of just the
+// quadrant of the reference angle, not the exact angle.
+#define MAKE_SOFT_DECISION() { \
+               if(Demod.sumI > 0) { \
+                       v = ci; \
+               } else { \
+                       v = -ci; \
+               } \
+               if(Demod.sumQ > 0) { \
+                       v += cq; \
+               } else { \
+                       v -= cq; \
+               } \
+       }
+
+#define SUBCARRIER_DETECT_THRESHOLD    8
+
+// Subcarrier amplitude v = sqrt(ci^2 + cq^2), approximated here by abs(ci) + abs(cq)
+/* #define CHECK_FOR_SUBCARRIER() { \
+               v = ci; \
+               if(v < 0) v = -v; \
+               if(cq > 0) { \
+                       v += cq; \
+               } else { \
+                       v -= cq; \
+               } \
+       }
+ */
+// Subcarrier amplitude v = sqrt(ci^2 + cq^2), approximated here by max(abs(ci),abs(cq)) + 1/2*min(abs(ci),abs(cq)))
+#define CHECK_FOR_SUBCARRIER() { \
+               if(ci < 0) { \
+                       if(cq < 0) { /* ci < 0, cq < 0 */ \
+                               if (cq < ci) { \
+                                       v = -cq - (ci >> 1); \
+                               } else { \
+                                       v = -ci - (cq >> 1); \
+                               } \
+                       } else {        /* ci < 0, cq >= 0 */ \
+                               if (cq < -ci) { \
+                                       v = -ci + (cq >> 1); \
+                               } else { \
+                                       v = cq - (ci >> 1); \
+                               } \
+                       } \
+               } else { \
+                       if(cq < 0) { /* ci >= 0, cq < 0 */ \
+                               if (-cq < ci) { \
+                                       v = ci - (cq >> 1); \
+                               } else { \
+                                       v = -cq + (ci >> 1); \
+                               } \
+                       } else {        /* ci >= 0, cq >= 0 */ \
+                               if (cq < ci) { \
+                                       v = ci + (cq >> 1); \
+                               } else { \
+                                       v = cq + (ci >> 1); \
+                               } \
+                       } \
+               } \
+       }
+
+       switch(Demod.state) {
+               case DEMOD_UNSYNCD:
+                       CHECK_FOR_SUBCARRIER();
+                       if(v > SUBCARRIER_DETECT_THRESHOLD) {   // subcarrier detected
+                               Demod.state = DEMOD_PHASE_REF_TRAINING;
+                               Demod.sumI = ci;
+                               Demod.sumQ = cq;
+                               Demod.posCount = 1;
+                               }
+                       break;
+
+               case DEMOD_PHASE_REF_TRAINING:
+                       if(Demod.posCount < 8) {
+                               CHECK_FOR_SUBCARRIER();
+                               if (v > SUBCARRIER_DETECT_THRESHOLD) {
+                                       // set the reference phase (will code a logic '1') by averaging over 32 1/fs.
+                                       // note: synchronization time > 80 1/fs
+                                       Demod.sumI += ci;
+                                       Demod.sumQ += cq;
+                                       Demod.posCount++;
+                               } else {                // subcarrier lost
+                                       Demod.state = DEMOD_UNSYNCD;
+                               }
+                       } else {
+                               Demod.state = DEMOD_AWAITING_FALLING_EDGE_OF_SOF;
+                       }
+                       break;
+
+               case DEMOD_AWAITING_FALLING_EDGE_OF_SOF:
+                       MAKE_SOFT_DECISION();
+                       if(v < 0) {     // logic '0' detected
+                               Demod.state = DEMOD_GOT_FALLING_EDGE_OF_SOF;
+                               Demod.posCount = 0;     // start of SOF sequence
+                       } else {
+                               if(Demod.posCount > 200/4) {    // maximum length of TR1 = 200 1/fs
+                                       Demod.state = DEMOD_UNSYNCD;
+                               }
+                       }
+                       Demod.posCount++;
+                       break;
+
+               case DEMOD_GOT_FALLING_EDGE_OF_SOF:
+                       Demod.posCount++;
+                       MAKE_SOFT_DECISION();
+                       if(v > 0) {
+                               if(Demod.posCount < 9*2) { // low phase of SOF too short (< 9 etu). Note: spec is >= 10, but FPGA tends to "smear" edges
+                                       Demod.state = DEMOD_UNSYNCD;
+                               } else {
+                                       LED_C_ON(); // Got SOF
+                                       Demod.state = DEMOD_AWAITING_START_BIT;
+                                       Demod.posCount = 0;
+                                       Demod.len = 0;
+/* this had been used to add RSSI (Received Signal Strength Indication) to traces. Currently not implemented.
+                                       Demod.metricN = 0;
+                                       Demod.metric = 0;
+*/
+                               }
+                       } else {
+                               if(Demod.posCount > 12*2) { // low phase of SOF too long (> 12 etu)
+                                       Demod.state = DEMOD_UNSYNCD;
+                                       LED_C_OFF();
+                               }
+                       }
+                       break;
+
+               case DEMOD_AWAITING_START_BIT:
+                       Demod.posCount++;
+                       MAKE_SOFT_DECISION();
+                       if(v > 0) {
+                               if(Demod.posCount > 3*2) {              // max 19us between characters = 16 1/fs, max 3 etu after low phase of SOF = 24 1/fs
+                                       Demod.state = DEMOD_UNSYNCD;
+                                       LED_C_OFF();
+                               }
+                       } else {                                                        // start bit detected
+                               Demod.bitCount = 0;
+                               Demod.posCount = 1;                             // this was the first half
+                               Demod.thisBit = v;
+                               Demod.shiftReg = 0;
+                               Demod.state = DEMOD_RECEIVING_DATA;
+                       }
+                       break;
+
+               case DEMOD_RECEIVING_DATA:
+                       MAKE_SOFT_DECISION();
+                       if(Demod.posCount == 0) {                       // first half of bit
+                               Demod.thisBit = v;
+                               Demod.posCount = 1;
+                       } else {                                                        // second half of bit
+                               Demod.thisBit += v;
+
+/* this had been used to add RSSI (Received Signal Strength Indication) to traces. Currently not implemented.
+                               if(Demod.thisBit > 0) {
+                                       Demod.metric += Demod.thisBit;
+                               } else {
+                                       Demod.metric -= Demod.thisBit;
+                               }
+                               (Demod.metricN)++;
+*/
+
+                               Demod.shiftReg >>= 1;
+                               if(Demod.thisBit > 0) { // logic '1'
+                                       Demod.shiftReg |= 0x200;
+                               }
+
+                               Demod.bitCount++;
+                               if(Demod.bitCount == 10) {
+                                       uint16_t s = Demod.shiftReg;
+                                       if((s & 0x200) && !(s & 0x001)) { // stop bit == '1', start bit == '0'
+                                               uint8_t b = (s >> 1);
+                                               Demod.output[Demod.len] = b;
+                                               Demod.len++;
+                                               Demod.state = DEMOD_AWAITING_START_BIT;
+                                       } else {
+                                               Demod.state = DEMOD_UNSYNCD;
+                                               LED_C_OFF();
+                                               if(s == 0x000) {
+                                                       // This is EOF (start, stop and all data bits == '0'
+                                                       return TRUE;
+                                               }
+                                       }
+                               }
+                               Demod.posCount = 0;
+                       }
+                       break;
+
+               default:
+                       Demod.state = DEMOD_UNSYNCD;
+                       LED_C_OFF();
+                       break;
+       }
+
+       return FALSE;
+}
+
+
+static void DemodReset()
+{
+       // Clear out the state of the "UART" that receives from the tag.
+       Demod.len = 0;
+       Demod.state = DEMOD_UNSYNCD;
+       Demod.posCount = 0;
+       memset(Demod.output, 0x00, MAX_FRAME_SIZE);
+}
+
+
+static void DemodInit(uint8_t *data)
+{
+       Demod.output = data;
+       DemodReset();
+}
+
+
+/*
+ *  Demodulate the samples we received from the tag, also log to tracebuffer
+ *  quiet: set to 'TRUE' to disable debug output
+ */
+static void GetSamplesFor14443bDemod(int n, bool quiet)
+{
+       int max = 0;
+       bool gotFrame = FALSE;
+       int lastRxCounter, ci, cq, samples = 0;
+
+       // Allocate memory from BigBuf for some buffers
+       // free all previous allocations first
+       BigBuf_free();
+
+       // The response (tag -> reader) that we're receiving.
+       uint8_t *receivedResponse = BigBuf_malloc(MAX_FRAME_SIZE);
+
+       // The DMA buffer, used to stream samples from the FPGA
+       int8_t *dmaBuf = (int8_t*) BigBuf_malloc(ISO14443B_DMA_BUFFER_SIZE);
+
+       // Set up the demodulator for tag -> reader responses.
+       DemodInit(receivedResponse);
+
+       // Setup and start DMA.
+       FpgaSetupSscDma((uint8_t*) dmaBuf, ISO14443B_DMA_BUFFER_SIZE);
+
+       int8_t *upTo = dmaBuf;
+       lastRxCounter = ISO14443B_DMA_BUFFER_SIZE;
+
+       // Signal field is ON with the appropriate LED:
+       LED_D_ON();
+       // And put the FPGA in the appropriate mode
+       FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_READER_RX_XCORR | FPGA_HF_READER_RX_XCORR_848_KHZ);
+
+       for(;;) {
+               int behindBy = lastRxCounter - AT91C_BASE_PDC_SSC->PDC_RCR;
+               if(behindBy > max) max = behindBy;
+
+               while(((lastRxCounter-AT91C_BASE_PDC_SSC->PDC_RCR) & (ISO14443B_DMA_BUFFER_SIZE-1)) > 2) {
+                       ci = upTo[0];
+                       cq = upTo[1];
+                       upTo += 2;
+                       if(upTo >= dmaBuf + ISO14443B_DMA_BUFFER_SIZE) {
+                               upTo = dmaBuf;
+                               AT91C_BASE_PDC_SSC->PDC_RNPR = (uint32_t) upTo;
+                               AT91C_BASE_PDC_SSC->PDC_RNCR = ISO14443B_DMA_BUFFER_SIZE;
+                       }
+                       lastRxCounter -= 2;
+                       if(lastRxCounter <= 0) {
+                               lastRxCounter += ISO14443B_DMA_BUFFER_SIZE;
+                       }
+
+                       samples += 2;
+
+                       if(Handle14443bSamplesDemod(ci, cq)) {
+                               gotFrame = TRUE;
+                               break;
+                       }
+               }
+
+               if(samples > n || gotFrame) {
+                       break;
+               }
+       }
+
+       AT91C_BASE_PDC_SSC->PDC_PTCR = AT91C_PDC_RXTDIS;
+
+       if (!quiet) Dbprintf("max behindby = %d, samples = %d, gotFrame = %d, Demod.len = %d, Demod.sumI = %d, Demod.sumQ = %d", max, samples, gotFrame, Demod.len, Demod.sumI, Demod.sumQ);
+       //Tracing
+       if (tracing && Demod.len > 0) {
+               uint8_t parity[MAX_PARITY_SIZE];
+               LogTrace(Demod.output, Demod.len, 0, 0, parity, FALSE);
+       }
+}
+
+
+//-----------------------------------------------------------------------------
+// Transmit the command (to the tag) that was placed in ToSend[].
+//-----------------------------------------------------------------------------
+static void TransmitFor14443b(void)
+{
+       int c;
+
+       FpgaSetupSsc();
+
+       while(AT91C_BASE_SSC->SSC_SR & (AT91C_SSC_TXRDY)) {
+               AT91C_BASE_SSC->SSC_THR = 0xff;
+       }
+
+       // Signal field is ON with the appropriate Red LED
+       LED_D_ON();
+       // Signal we are transmitting with the Green LED
+       LED_B_ON();
+       FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_READER_TX | FPGA_HF_READER_TX_SHALLOW_MOD);
+
+       for(c = 0; c < 10;) {
+               if(AT91C_BASE_SSC->SSC_SR & (AT91C_SSC_TXRDY)) {
+                       AT91C_BASE_SSC->SSC_THR = 0xff;
+                       c++;
+               }
+               if(AT91C_BASE_SSC->SSC_SR & (AT91C_SSC_RXRDY)) {
+                       volatile uint32_t r = AT91C_BASE_SSC->SSC_RHR;
+                       (void)r;
+               }
+               WDT_HIT();
+       }
+
+       c = 0;
+       for(;;) {
+               if(AT91C_BASE_SSC->SSC_SR & (AT91C_SSC_TXRDY)) {
+                       AT91C_BASE_SSC->SSC_THR = ToSend[c];
+                       c++;
+                       if(c >= ToSendMax) {
+                               break;
+                       }
+               }
+               if(AT91C_BASE_SSC->SSC_SR & (AT91C_SSC_RXRDY)) {
+                       volatile uint32_t r = AT91C_BASE_SSC->SSC_RHR;
+                       (void)r;
+               }
+               WDT_HIT();
+       }
+       LED_B_OFF(); // Finished sending
+}
+
+
+//-----------------------------------------------------------------------------
+// Code a layer 2 command (string of octets, including CRC) into ToSend[],
+// so that it is ready to transmit to the tag using TransmitFor14443b().
+//-----------------------------------------------------------------------------
+static void CodeIso14443bAsReader(const uint8_t *cmd, int len)
+{
+       int i, j;
+       uint8_t b;
+
+       ToSendReset();
+
+       // Establish initial reference level
+       for(i = 0; i < 40; i++) {
+               ToSendStuffBit(1);
+       }
+       // Send SOF
+       for(i = 0; i < 10; i++) {
+               ToSendStuffBit(0);
+       }
+
+       for(i = 0; i < len; i++) {
+               // Stop bits/EGT
+               ToSendStuffBit(1);
+               ToSendStuffBit(1);
+               // Start bit
+               ToSendStuffBit(0);
+               // Data bits
+               b = cmd[i];
+               for(j = 0; j < 8; j++) {
+                       if(b & 1) {
+                               ToSendStuffBit(1);
+                       } else {
+                               ToSendStuffBit(0);
+                       }
+                       b >>= 1;
+               }
+       }
+       // Send EOF
+       ToSendStuffBit(1);
+       for(i = 0; i < 10; i++) {
+               ToSendStuffBit(0);
+       }
+       for(i = 0; i < 8; i++) {
+               ToSendStuffBit(1);
+       }
+
+       // And then a little more, to make sure that the last character makes
+       // it out before we switch to rx mode.
+       for(i = 0; i < 24; i++) {
+               ToSendStuffBit(1);
+       }
+
+       // Convert from last character reference to length
+       ToSendMax++;
+}
+
+
+/**
+  Convenience function to encode, transmit and trace iso 14443b comms
+  **/
+static void CodeAndTransmit14443bAsReader(const uint8_t *cmd, int len)
+{
+       CodeIso14443bAsReader(cmd, len);
+       TransmitFor14443b();
+       if (tracing) {
+               uint8_t parity[MAX_PARITY_SIZE];
+               LogTrace(cmd,len, 0, 0, parity, TRUE);
+       }
+}
+
+/* Sends an APDU to the tag
+ * TODO: check CRC and preamble
+ */
+int iso14443b_apdu(uint8_t const *message, size_t message_length, uint8_t *response)
+{
+       uint8_t message_frame[message_length + 4];
+       // PCB
+       message_frame[0] = 0x0A | pcb_blocknum;
+       pcb_blocknum ^= 1;
+       // CID
+       message_frame[1] = 0;
+       // INF
+       memcpy(message_frame + 2, message, message_length);
+       // EDC (CRC)
+       ComputeCrc14443(CRC_14443_B, message_frame, message_length + 2, &message_frame[message_length + 2], &message_frame[message_length + 3]);
+       // send
+       CodeAndTransmit14443bAsReader(message_frame, message_length + 4);
+       // get response
+       GetSamplesFor14443bDemod(RECEIVE_SAMPLES_TIMEOUT*100, TRUE);
+       if(Demod.len < 3)
+       {
+               return 0;
+       }
+       // TODO: Check CRC
+       // copy response contents
+       if(response != NULL)
+       {
+               memcpy(response, Demod.output, Demod.len);
+       }
+       return Demod.len;
+}
+
+/* Perform the ISO 14443 B Card Selection procedure
+ * Currently does NOT do any collision handling.
+ * It expects 0-1 cards in the device's range.
+ * TODO: Support multiple cards (perform anticollision)
+ * TODO: Verify CRC checksums
+ */
+int iso14443b_select_card()
+{
+       // WUPB command (including CRC)
+       // Note: WUPB wakes up all tags, REQB doesn't wake up tags in HALT state
+       static const uint8_t wupb[] = { 0x05, 0x00, 0x08, 0x39, 0x73 };
+       // ATTRIB command (with space for CRC)
+       uint8_t attrib[] = { 0x1D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00};
+
+       // first, wake up the tag
+       CodeAndTransmit14443bAsReader(wupb, sizeof(wupb));
+       GetSamplesFor14443bDemod(RECEIVE_SAMPLES_TIMEOUT, TRUE);
+       // ATQB too short?
+       if (Demod.len < 14)
+       {
+               return 2;
+       }
+
+    // select the tag
+    // copy the PUPI to ATTRIB
+    memcpy(attrib + 1, Demod.output + 1, 4);
+    /* copy the protocol info from ATQB (Protocol Info -> Protocol_Type) into
+    ATTRIB (Param 3) */
+    attrib[7] = Demod.output[10] & 0x0F;
+    ComputeCrc14443(CRC_14443_B, attrib, 9, attrib + 9, attrib + 10);
+    CodeAndTransmit14443bAsReader(attrib, sizeof(attrib));
+    GetSamplesFor14443bDemod(RECEIVE_SAMPLES_TIMEOUT, TRUE);
+    // Answer to ATTRIB too short?
+    if(Demod.len < 3)
+       {
+               return 2;
+       }
+       // reset PCB block number
+       pcb_blocknum = 0;
+       return 1;
+}
+
+// Set up ISO 14443 Type B communication (similar to iso14443a_setup)
+void iso14443b_setup() {
+       FpgaDownloadAndGo(FPGA_BITSTREAM_HF);
+       // Set up the synchronous serial port
+       FpgaSetupSsc();
+       // connect Demodulated Signal to ADC:
+       SetAdcMuxFor(GPIO_MUXSEL_HIPKD);
+
+       // Signal field is on with the appropriate LED
+    LED_D_ON();
+       FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_READER_TX | FPGA_HF_READER_TX_SHALLOW_MOD);
+
+       // Start the timer
+       StartCountSspClk();
+
+       DemodReset();
+       UartReset();
+}
+
+//-----------------------------------------------------------------------------
+// Read a SRI512 ISO 14443B tag.
+//
+// SRI512 tags are just simple memory tags, here we're looking at making a dump
+// of the contents of the memory. No anticollision algorithm is done, we assume
+// we have a single tag in the field.
+//
+// I tried to be systematic and check every answer of the tag, every CRC, etc...
+//-----------------------------------------------------------------------------
+void ReadSTMemoryIso14443b(uint32_t dwLast)
+{
+       uint8_t i = 0x00;
+
+       FpgaDownloadAndGo(FPGA_BITSTREAM_HF);
+       // Make sure that we start from off, since the tags are stateful;
+       // confusing things will happen if we don't reset them between reads.
+       LED_D_OFF();
+       FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF);
+       SpinDelay(200);
+
+       SetAdcMuxFor(GPIO_MUXSEL_HIPKD);
+       FpgaSetupSsc();
+
+       // Now give it time to spin up.
+       // Signal field is on with the appropriate LED
+       LED_D_ON();
+       FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_READER_RX_XCORR | FPGA_HF_READER_RX_XCORR_848_KHZ);
+       SpinDelay(200);
+
+       clear_trace();
+       set_tracing(TRUE);
+
+       // First command: wake up the tag using the INITIATE command
+       uint8_t cmd1[] = {0x06, 0x00, 0x97, 0x5b};
+       CodeAndTransmit14443bAsReader(cmd1, sizeof(cmd1));
+       GetSamplesFor14443bDemod(RECEIVE_SAMPLES_TIMEOUT, TRUE);
+
+       if (Demod.len == 0) {
+               DbpString("No response from tag");
+               return;
+       } else {
+               Dbprintf("Randomly generated Chip ID (+ 2 byte CRC): %02x %02x %02x",
+                               Demod.output[0], Demod.output[1], Demod.output[2]);
+       }
+
+       // There is a response, SELECT the uid
+       DbpString("Now SELECT tag:");
+       cmd1[0] = 0x0E; // 0x0E is SELECT
+       cmd1[1] = Demod.output[0];
+       ComputeCrc14443(CRC_14443_B, cmd1, 2, &cmd1[2], &cmd1[3]);
+       CodeAndTransmit14443bAsReader(cmd1, sizeof(cmd1));
+       GetSamplesFor14443bDemod(RECEIVE_SAMPLES_TIMEOUT, TRUE);
+       if (Demod.len != 3) {
+               Dbprintf("Expected 3 bytes from tag, got %d", Demod.len);
+               return;
+       }
+       // Check the CRC of the answer:
+       ComputeCrc14443(CRC_14443_B, Demod.output, 1 , &cmd1[2], &cmd1[3]);
+       if(cmd1[2] != Demod.output[1] || cmd1[3] != Demod.output[2]) {
+               DbpString("CRC Error reading select response.");
+               return;
+       }
+       // Check response from the tag: should be the same UID as the command we just sent:
+       if (cmd1[1] != Demod.output[0]) {
+               Dbprintf("Bad response to SELECT from Tag, aborting: %02x %02x", cmd1[1], Demod.output[0]);
+               return;
+       }
+
+       // Tag is now selected,
+       // First get the tag's UID:
+       cmd1[0] = 0x0B;
+       ComputeCrc14443(CRC_14443_B, cmd1, 1 , &cmd1[1], &cmd1[2]);
+       CodeAndTransmit14443bAsReader(cmd1, 3); // Only first three bytes for this one
+       GetSamplesFor14443bDemod(RECEIVE_SAMPLES_TIMEOUT, TRUE);
+       if (Demod.len != 10) {
+               Dbprintf("Expected 10 bytes from tag, got %d", Demod.len);
+               return;
+       }
+       // The check the CRC of the answer (use cmd1 as temporary variable):
+       ComputeCrc14443(CRC_14443_B, Demod.output, 8, &cmd1[2], &cmd1[3]);
+       if(cmd1[2] != Demod.output[8] || cmd1[3] != Demod.output[9]) {
+               Dbprintf("CRC Error reading block! Expected: %04x got: %04x",
+                               (cmd1[2]<<8)+cmd1[3], (Demod.output[8]<<8)+Demod.output[9]);
+               // Do not return;, let's go on... (we should retry, maybe ?)
+       }
+       Dbprintf("Tag UID (64 bits): %08x %08x",
+                       (Demod.output[7]<<24) + (Demod.output[6]<<16) + (Demod.output[5]<<8) + Demod.output[4],
+                       (Demod.output[3]<<24) + (Demod.output[2]<<16) + (Demod.output[1]<<8) + Demod.output[0]);
+
+       // Now loop to read all 16 blocks, address from 0 to last block
+       Dbprintf("Tag memory dump, block 0 to %d", dwLast);
+       cmd1[0] = 0x08;
+       i = 0x00;
+       dwLast++;
+       for (;;) {
+               if (i == dwLast) {
+                       DbpString("System area block (0xff):");
+                       i = 0xff;
+               }
+               cmd1[1] = i;
+               ComputeCrc14443(CRC_14443_B, cmd1, 2, &cmd1[2], &cmd1[3]);
+               CodeAndTransmit14443bAsReader(cmd1, sizeof(cmd1));
+               GetSamplesFor14443bDemod(RECEIVE_SAMPLES_TIMEOUT, TRUE);
+               if (Demod.len != 6) { // Check if we got an answer from the tag
+                       DbpString("Expected 6 bytes from tag, got less...");
+                       return;
+               }
+               // The check the CRC of the answer (use cmd1 as temporary variable):
+               ComputeCrc14443(CRC_14443_B, Demod.output, 4, &cmd1[2], &cmd1[3]);
+               if(cmd1[2] != Demod.output[4] || cmd1[3] != Demod.output[5]) {
+                       Dbprintf("CRC Error reading block! Expected: %04x got: %04x",
+                                       (cmd1[2]<<8)+cmd1[3], (Demod.output[4]<<8)+Demod.output[5]);
+                       // Do not return;, let's go on... (we should retry, maybe ?)
+               }
+               // Now print out the memory location:
+               Dbprintf("Address=%02x, Contents=%08x, CRC=%04x", i,
+                               (Demod.output[3]<<24) + (Demod.output[2]<<16) + (Demod.output[1]<<8) + Demod.output[0],
+                               (Demod.output[4]<<8)+Demod.output[5]);
+               if (i == 0xff) {
+                       break;
+               }
+               i++;
+       }
+}
+
+
+//=============================================================================
+// Finally, the `sniffer' combines elements from both the reader and
+// simulated tag, to show both sides of the conversation.
+//=============================================================================
+
+//-----------------------------------------------------------------------------
+// Record the sequence of commands sent by the reader to the tag, with
+// triggering so that we start recording at the point that the tag is moved
+// near the reader.
+//-----------------------------------------------------------------------------
+/*
+ * Memory usage for this function, (within BigBuf)
+ * Last Received command (reader->tag) - MAX_FRAME_SIZE
+ * Last Received command (tag->reader) - MAX_FRAME_SIZE
+ * DMA Buffer - ISO14443B_DMA_BUFFER_SIZE
+ * Demodulated samples received - all the rest
+ */
+void RAMFUNC SnoopIso14443b(void)
+{
+       // We won't start recording the frames that we acquire until we trigger;
+       // a good trigger condition to get started is probably when we see a
+       // response from the tag.
+       int triggered = TRUE;                   // TODO: set and evaluate trigger condition
+
+       FpgaDownloadAndGo(FPGA_BITSTREAM_HF);
+       BigBuf_free();
+
+       clear_trace();
+       set_tracing(TRUE);
+
+       // The DMA buffer, used to stream samples from the FPGA
+       int8_t *dmaBuf = (int8_t*) BigBuf_malloc(ISO14443B_DMA_BUFFER_SIZE);
+       int lastRxCounter;
+       int8_t *upTo;
+       int ci, cq;
+       int maxBehindBy = 0;
+
+       // Count of samples received so far, so that we can include timing
+       // information in the trace buffer.
+       int samples = 0;
+
+       DemodInit(BigBuf_malloc(MAX_FRAME_SIZE));
+       UartInit(BigBuf_malloc(MAX_FRAME_SIZE));
+
+       // Print some debug information about the buffer sizes
+       Dbprintf("Snooping buffers initialized:");
+       Dbprintf("  Trace: %i bytes", BigBuf_max_traceLen());
+       Dbprintf("  Reader -> tag: %i bytes", MAX_FRAME_SIZE);
+       Dbprintf("  tag -> Reader: %i bytes", MAX_FRAME_SIZE);
+       Dbprintf("  DMA: %i bytes", ISO14443B_DMA_BUFFER_SIZE);
+
+       // Signal field is off, no reader signal, no tag signal
+       LEDsoff();
+
+       // And put the FPGA in the appropriate mode
+       FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_READER_RX_XCORR | FPGA_HF_READER_RX_XCORR_848_KHZ | FPGA_HF_READER_RX_XCORR_SNOOP);
+       SetAdcMuxFor(GPIO_MUXSEL_HIPKD);
+
+       // Setup for the DMA.
+       FpgaSetupSsc();
+       upTo = dmaBuf;
+       lastRxCounter = ISO14443B_DMA_BUFFER_SIZE;
+       FpgaSetupSscDma((uint8_t*) dmaBuf, ISO14443B_DMA_BUFFER_SIZE);
+       uint8_t parity[MAX_PARITY_SIZE];
+
+       bool TagIsActive = FALSE;
+       bool ReaderIsActive = FALSE;
+
+       // And now we loop, receiving samples.
+       for(;;) {
+               int behindBy = (lastRxCounter - AT91C_BASE_PDC_SSC->PDC_RCR) &
+                                                               (ISO14443B_DMA_BUFFER_SIZE-1);
+               if(behindBy > maxBehindBy) {
+                       maxBehindBy = behindBy;
+               }
+
+               if(behindBy < 2) continue;
+
+               ci = upTo[0];
+               cq = upTo[1];
+               upTo += 2;
+               lastRxCounter -= 2;
+               if(upTo >= dmaBuf + ISO14443B_DMA_BUFFER_SIZE) {
+                       upTo = dmaBuf;
+                       lastRxCounter += ISO14443B_DMA_BUFFER_SIZE;
+                       AT91C_BASE_PDC_SSC->PDC_RNPR = (uint32_t) dmaBuf;
+                       AT91C_BASE_PDC_SSC->PDC_RNCR = ISO14443B_DMA_BUFFER_SIZE;
+                       WDT_HIT();
+                       if(behindBy > (9*ISO14443B_DMA_BUFFER_SIZE/10)) { // TODO: understand whether we can increase/decrease as we want or not?
+                               Dbprintf("blew circular buffer! behindBy=%d", behindBy);
+                               break;
+                       }
+                       if(!tracing) {
+                               DbpString("Reached trace limit");
+                               break;
+                       }
+                       if(BUTTON_PRESS()) {
+                               DbpString("cancelled");
+                               break;
+                       }
+               }
+
+               samples += 2;
+
+               if (!TagIsActive) {                                                     // no need to try decoding reader data if the tag is sending
+                       if(Handle14443bUartBit(ci & 0x01)) {
+                               if(triggered && tracing) {
+                                       LogTrace(Uart.output, Uart.byteCnt, samples, samples, parity, TRUE);
+                               }
+                               /* And ready to receive another command. */
+                               UartReset();
+                               /* And also reset the demod code, which might have been */
+                               /* false-triggered by the commands from the reader. */
+                               DemodReset();
+                       }
+                       if(Handle14443bUartBit(cq & 0x01)) {
+                               if(triggered && tracing) {
+                                       LogTrace(Uart.output, Uart.byteCnt, samples, samples, parity, TRUE);
+                               }
+                               /* And ready to receive another command. */
+                               UartReset();
+                               /* And also reset the demod code, which might have been */
+                               /* false-triggered by the commands from the reader. */
+                               DemodReset();
+                       }
+                       ReaderIsActive = (Uart.state > STATE_GOT_FALLING_EDGE_OF_SOF);
+               }
+
+               if(!ReaderIsActive) {                                           // no need to try decoding tag data if the reader is sending - and we cannot afford the time
+                       if(Handle14443bSamplesDemod(ci | 0x01, cq | 0x01)) {
+
+                               //Use samples as a time measurement
+                               if(tracing)
+                               {
+                                       uint8_t parity[MAX_PARITY_SIZE];
+                                       LogTrace(Demod.output, Demod.len, samples, samples, parity, FALSE);
+                               }
+                               triggered = TRUE;
+
+                               // And ready to receive another response.
+                               DemodReset();
+                       }
+                       TagIsActive = (Demod.state > DEMOD_GOT_FALLING_EDGE_OF_SOF);
+               }
+
+       }
+
+       FpgaDisableSscDma();
+       LEDsoff();
+       AT91C_BASE_PDC_SSC->PDC_PTCR = AT91C_PDC_RXTDIS;
+       DbpString("Snoop statistics:");
+       Dbprintf("  Max behind by: %i", maxBehindBy);
+       Dbprintf("  Uart State: %x", Uart.state);
+       Dbprintf("  Uart ByteCnt: %i", Uart.byteCnt);
+       Dbprintf("  Uart ByteCntMax: %i", Uart.byteCntMax);
+       Dbprintf("  Trace length: %i", BigBuf_get_traceLen());
+}
+
+
+/*
+ * Send raw command to tag ISO14443B
+ * @Input
+ * datalen     len of buffer data
+ * recv        bool when true wait for data from tag and send to client
+ * powerfield  bool leave the field on when true
+ * data        buffer with byte to send
+ *
+ * @Output
+ * none
+ *
+ */
+void SendRawCommand14443B(uint32_t datalen, uint32_t recv, uint8_t powerfield, uint8_t data[])
+{
+       FpgaDownloadAndGo(FPGA_BITSTREAM_HF);
+       SetAdcMuxFor(GPIO_MUXSEL_HIPKD);
+       FpgaSetupSsc();
+
+       if (datalen){
+               set_tracing(TRUE);
+               
+               CodeAndTransmit14443bAsReader(data, datalen);
+
+               if(recv) {
+                       GetSamplesFor14443bDemod(RECEIVE_SAMPLES_TIMEOUT, TRUE);
+                       uint16_t iLen = MIN(Demod.len, USB_CMD_DATA_SIZE);
+                       cmd_send(CMD_ACK, iLen, 0, 0, Demod.output, iLen);
+               }
+       }
+
+       if(!powerfield) {
+               FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF);
+               LED_D_OFF();
+       }
+}
+
diff --git a/armsrc/iso14443b.h b/armsrc/iso14443b.h
new file mode 100644 (file)
index 0000000..f90c54f
--- /dev/null
@@ -0,0 +1,21 @@
+//-----------------------------------------------------------------------------
+// Merlok - June 2011
+// Gerhard de Koning Gans - May 2008
+// Hagen Fritsch - June 2010
+//
+// This code is licensed to you under the terms of the GNU GPL, version 2 or,
+// at your option, any later version. See the LICENSE.txt file for the text of
+// the license.
+//-----------------------------------------------------------------------------
+// Routines to support ISO 14443 type A.
+//-----------------------------------------------------------------------------
+
+#ifndef __ISO14443B_H
+#define __ISO14443B_H
+#include "common.h"
+
+int iso14443b_apdu(uint8_t const *message, size_t message_length, uint8_t *response);
+void iso14443b_setup();
+int iso14443b_select_card();
+
+#endif /* __ISO14443B_H */
index 94040a85796a36eb38b7e5976b2339123845234f..e7145c5c9e84b3d6dd5399c145e74123e72be077 100644 (file)
@@ -877,12 +877,12 @@ int SendDataTag(uint8_t *send, int sendlen, int init, int speed, uint8_t **recv)
        LED_C_OFF();
        LED_D_OFF();
        
+       if (init) Iso15693InitReader();
+
        int answerLen=0;
        uint8_t *answer = BigBuf_get_addr() + 3660;
        if (recv != NULL) memset(answer, 0, 100);
 
-       if (init) Iso15693InitReader();
-       
        if (!speed) {
                // low speed (1 out of 256)
                CodeIso15693AsReader256(send, sendlen);
@@ -999,10 +999,6 @@ void ReaderIso15693(uint32_t parameter)
        LED_C_OFF();
        LED_D_OFF();
 
-       uint8_t *answer1 = BigBuf_get_addr() + 3660;
-       uint8_t *answer2 = BigBuf_get_addr() + 3760;
-       uint8_t *answer3 = BigBuf_get_addr() + 3860;
-
        int answerLen1 = 0;
        int answerLen2 = 0;
        int answerLen3 = 0;
@@ -1013,19 +1009,21 @@ void ReaderIso15693(uint32_t parameter)
        int elapsed = 0;
        uint8_t TagUID[8] = {0x00};
 
+       FpgaDownloadAndGo(FPGA_BITSTREAM_HF);
 
+       uint8_t *answer1 = BigBuf_get_addr() + 3660;
+       uint8_t *answer2 = BigBuf_get_addr() + 3760;
+       uint8_t *answer3 = BigBuf_get_addr() + 3860;
        // Blank arrays
        memset(answer1, 0x00, 300);
 
-       FpgaDownloadAndGo(FPGA_BITSTREAM_HF);
-
        SetAdcMuxFor(GPIO_MUXSEL_HIPKD);
        // Setup SSC
        FpgaSetupSsc();
 
        // Start from off (no field generated)
-       FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF);
-       SpinDelay(200);
+       FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF);
+       SpinDelay(200);
 
        // Give the tags time to energize
        FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_READER_RX_XCORR);
@@ -1111,24 +1109,22 @@ void SimTagIso15693(uint32_t parameter, uint8_t *uid)
        LED_C_OFF();
        LED_D_OFF();
 
-       uint8_t *buf = BigBuf_get_addr() + 3660;
-       
        int answerLen1 = 0;
        int samples = 0;
        int tsamples = 0;
        int wait = 0;
        int elapsed = 0;
 
-       memset(buf, 0x00, 100);
-
        FpgaDownloadAndGo(FPGA_BITSTREAM_HF);
 
+       uint8_t *buf = BigBuf_get_addr() + 3660;
+       memset(buf, 0x00, 100);
+       
        SetAdcMuxFor(GPIO_MUXSEL_HIPKD);
-
        FpgaSetupSsc();
 
        // Start from off (no field generated)
-       FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF);
+       FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF);
        SpinDelay(200);
 
        LED_A_OFF();
index 840b819643dcb21e49b7fc4159f138706e142fb6..34da26bcdfd8cee58e6bfa99cb6bfb4c57eb59af 100644 (file)
@@ -24,6 +24,7 @@ SECTIONS
        } >osimage :text
 
        .text : {
+               KEEP(*(stage1_image))
                *(.text)
                *(.text.*)
                *(.eh_frame)
@@ -34,14 +35,13 @@ SECTIONS
        .rodata : {
                *(.rodata)
                *(.rodata.*)
-               *(fpga_lf_bit.data)
-               *(fpga_hf_bit.data)
+               *(fpga_all_bit.data)
                KEEP(*(.version_information))
+               . = ALIGN(8);
        } >osimage :text
 
-       . = ALIGN(4);
-
        .data : {
+               KEEP(*(compressed_data))
                *(.data)
                *(.data.*)
                *(.ramfunc)
@@ -51,6 +51,7 @@ SECTIONS
        __data_src_start__ = LOADADDR(.data);
        __data_start__ = ADDR(.data);
        __data_end__ = __data_start__ + SIZEOF(.data);
+       __os_size__ = SIZEOF(.text) + SIZEOF(.data) + SIZEOF(.rodata);
        
        .bss : {
                __bss_start__ = .; 
index c3fa8a0e630f2f743aaedd247b2d711c89610385..14b62673f0b540b29445b78b83574039d6160513 100644 (file)
@@ -16,8 +16,8 @@
 #include "string.h"
 #include "lfdemod.h"
 #include "lfsampling.h"
-#include "usb_cdc.h"
-
+#include "protocols.h"
+#include "usb_cdc.h" // for usb_poll_validate_length
 
 /**
  * Function to do a modulation and then get samples.
@@ -26,7 +26,7 @@
  * @param period_1
  * @param command
  */
-void ModThenAcquireRawAdcSamples125k(int delay_off, int period_0, int period_1, uint8_t *command)
+void ModThenAcquireRawAdcSamples125k(uint32_t delay_off, uint32_t period_0, uint32_t period_1, uint8_t *command)
 {
 
        int divisor_used = 95; // 125 KHz
@@ -37,6 +37,8 @@ void ModThenAcquireRawAdcSamples125k(int delay_off, int period_0, int period_1,
 
        sample_config sc = { 0,0,1, divisor_used, 0};
        setSamplingConfig(&sc);
+       //clear read buffer
+       BigBuf_Clear_keep_EM();
 
        /* Make sure the tag is reset */
        FpgaDownloadAndGo(FPGA_BITSTREAM_LF);
@@ -73,8 +75,6 @@ void ModThenAcquireRawAdcSamples125k(int delay_off, int period_0, int period_1,
        DoAcquisition_config(false);
 }
 
-
-
 /* blank r/w tag data stream
 ...0000000000000000 01111111
 1010101010101010101010101010101010101010101010101010101010101010
@@ -248,7 +248,7 @@ void AcquireTiType(void)
 
        // clear buffer
        uint32_t *BigBuf = (uint32_t *)BigBuf_get_addr();
-       memset(BigBuf,0,BigBuf_max_traceLen()/sizeof(uint32_t));
+       BigBuf_Clear_ext(false);
 
        // Set up the synchronous serial port
        AT91C_BASE_PIOA->PIO_PDR = GPIO_SSC_DIN;
@@ -395,14 +395,14 @@ void SimulateTagLowFrequency(int period, int gap, int ledcontrol)
        AT91C_BASE_PIOA->PIO_OER = GPIO_SSC_DOUT;
        AT91C_BASE_PIOA->PIO_ODR = GPIO_SSC_CLK;
 
- #define SHORT_COIL()  LOW(GPIO_SSC_DOUT)
- #define OPEN_COIL()           HIGH(GPIO_SSC_DOUT)
+ #define SHORT_COIL()   LOW(GPIO_SSC_DOUT)
+ #define OPEN_COIL()    HIGH(GPIO_SSC_DOUT)
 
        i = 0;
        for(;;) {
                //wait until SSC_CLK goes HIGH
                while(!(AT91C_BASE_PIOA->PIO_PDSR & GPIO_SSC_CLK)) {
-                       if(BUTTON_PRESS() || usb_poll()) {
+                       if(BUTTON_PRESS() || (usb_poll_validate_length() )) {
                                DbpString("Stopped");
                                return;
                        }
@@ -642,7 +642,6 @@ static void biphaseSimBit(uint8_t c, int *n, uint8_t clock, uint8_t *phase)
                memset(dest+(*n), c ^ *phase, clock);
                *phase ^= 1;
        }
-
 }
 
 // args clock, ask/man or askraw, invert, transmission separator
@@ -687,13 +686,9 @@ void CmdASKsimTag(uint16_t arg1, uint16_t arg2, size_t size, uint8_t *BitStream)
        //i+=16;
        //Dbprintf("%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d", dest[i],dest[i+1],dest[i+2],dest[i+3],dest[i+4],dest[i+5],dest[i+6],dest[i+7],dest[i+8],dest[i+9],dest[i+10],dest[i+11],dest[i+12],dest[i+13],dest[i+14],dest[i+15]);
 
-       if (ledcontrol)
-               LED_A_ON();
-       
+       if (ledcontrol) LED_A_ON();
        SimulateTagLowFrequency(n, 0, ledcontrol);
-
-       if (ledcontrol)
-               LED_A_OFF();
+       if (ledcontrol) LED_A_OFF();
 }
 
 //carrier can be 2,4 or 8
@@ -743,12 +738,9 @@ void CmdPSKsimTag(uint16_t arg1, uint16_t arg2, size_t size, uint8_t *BitStream)
        //i+=16;
        //Dbprintf("%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d", dest[i],dest[i+1],dest[i+2],dest[i+3],dest[i+4],dest[i+5],dest[i+6],dest[i+7],dest[i+8],dest[i+9],dest[i+10],dest[i+11],dest[i+12],dest[i+13],dest[i+14],dest[i+15]);
                   
-       if (ledcontrol)
-               LED_A_ON();
+       if (ledcontrol) LED_A_ON();
        SimulateTagLowFrequency(n, 0, ledcontrol);
-
-       if (ledcontrol)
-               LED_A_OFF();
+       if (ledcontrol) LED_A_OFF();
 }
 
 // loop to get raw HID waveform then FSK demodulate the TAG ID from it
@@ -762,7 +754,10 @@ void CmdHIDdemodFSK(int findone, int *high, int *low, int ledcontrol)
        // Configure to go in 125Khz listen mode
        LFSetupFPGAForADC(95, true);
 
-       while(!BUTTON_PRESS()) {
+       //clear read buffer
+       BigBuf_Clear_keep_EM();
+
+       while(!BUTTON_PRESS() && !usb_poll_validate_length()) {
 
                WDT_HIT();
                if (ledcontrol) LED_A_ON();
@@ -841,6 +836,96 @@ void CmdHIDdemodFSK(int findone, int *high, int *low, int ledcontrol)
        if (ledcontrol) LED_A_OFF();
 }
 
+// loop to get raw HID waveform then FSK demodulate the TAG ID from it
+void CmdAWIDdemodFSK(int findone, int *high, int *low, int ledcontrol)
+{
+       uint8_t *dest = BigBuf_get_addr();
+       size_t size; 
+       int idx=0;
+       //clear read buffer
+       BigBuf_Clear_keep_EM();
+       // Configure to go in 125Khz listen mode
+       LFSetupFPGAForADC(95, true);
+
+       while(!BUTTON_PRESS() && !usb_poll_validate_length()) {
+
+               WDT_HIT();
+               if (ledcontrol) LED_A_ON();
+
+               DoAcquisition_default(-1,true);
+               // FSK demodulator
+               size = 50*128*2; //big enough to catch 2 sequences of largest format
+               idx = AWIDdemodFSK(dest, &size);
+               
+               if (idx<=0 || size!=96) continue;
+               // Index map
+               // 0            10            20            30              40            50              60
+               // |            |             |             |               |             |               |
+               // 01234567 890 1 234 5 678 9 012 3 456 7 890 1 234 5 678 9 012 3 456 7 890 1 234 5 678 9 012 3 - to 96
+               // -----------------------------------------------------------------------------
+               // 00000001 000 1 110 1 101 1 011 1 101 1 010 0 000 1 000 1 010 0 001 0 110 1 100 0 000 1 000 1
+               // premable bbb o bbb o bbw o fff o fff o ffc o ccc o ccc o ccc o ccc o ccc o wxx o xxx o xxx o - to 96
+               //          |---26 bit---|    |-----117----||-------------142-------------|
+               // b = format bit len, o = odd parity of last 3 bits
+               // f = facility code, c = card number
+               // w = wiegand parity
+               // (26 bit format shown)
+
+               //get raw ID before removing parities
+               uint32_t rawLo = bytebits_to_byte(dest+idx+64,32);
+               uint32_t rawHi = bytebits_to_byte(dest+idx+32,32);
+               uint32_t rawHi2 = bytebits_to_byte(dest+idx,32);
+
+               size = removeParity(dest, idx+8, 4, 1, 88);
+               if (size != 66) continue;
+               // ok valid card found!
+
+               // Index map
+               // 0           10         20        30          40        50        60
+               // |           |          |         |           |         |         |
+               // 01234567 8 90123456 7890123456789012 3 456789012345678901234567890123456
+               // -----------------------------------------------------------------------------
+               // 00011010 1 01110101 0000000010001110 1 000000000000000000000000000000000
+               // bbbbbbbb w ffffffff cccccccccccccccc w xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+               // |26 bit|   |-117--| |-----142------|
+               // b = format bit len, o = odd parity of last 3 bits
+               // f = facility code, c = card number
+               // w = wiegand parity
+               // (26 bit format shown)
+
+               uint32_t fc = 0;
+               uint32_t cardnum = 0;
+               uint32_t code1 = 0;
+               uint32_t code2 = 0;
+               uint8_t fmtLen = bytebits_to_byte(dest,8);
+               if (fmtLen==26){
+                       fc = bytebits_to_byte(dest+9, 8);
+                       cardnum = bytebits_to_byte(dest+17, 16);
+                       code1 = bytebits_to_byte(dest+8,fmtLen);
+                       Dbprintf("AWID Found - BitLength: %d, FC: %d, Card: %d - Wiegand: %x, Raw: %08x%08x%08x", fmtLen, fc, cardnum, code1, rawHi2, rawHi, rawLo);
+               } else {
+                       cardnum = bytebits_to_byte(dest+8+(fmtLen-17), 16);
+                       if (fmtLen>32){
+                               code1 = bytebits_to_byte(dest+8,fmtLen-32);
+                               code2 = bytebits_to_byte(dest+8+(fmtLen-32),32);
+                               Dbprintf("AWID Found - BitLength: %d -unknown BitLength- (%d) - Wiegand: %x%08x, Raw: %08x%08x%08x", fmtLen, cardnum, code1, code2, rawHi2, rawHi, rawLo);
+                       } else{
+                               code1 = bytebits_to_byte(dest+8,fmtLen);
+                               Dbprintf("AWID Found - BitLength: %d -unknown BitLength- (%d) - Wiegand: %x, Raw: %08x%08x%08x", fmtLen, cardnum, code1, rawHi2, rawHi, rawLo);
+                       }
+               }
+               if (findone){
+                       if (ledcontrol) LED_A_OFF();
+                       return;
+               }
+               // reset
+               idx = 0;
+               WDT_HIT();
+       }
+       DbpString("Stopped");
+       if (ledcontrol) LED_A_OFF();
+}
+
 void CmdEM410xdemod(int findone, int *high, int *low, int ledcontrol)
 {
        uint8_t *dest = BigBuf_get_addr();
@@ -849,10 +934,12 @@ void CmdEM410xdemod(int findone, int *high, int *low, int ledcontrol)
        int clk=0, invert=0, errCnt=0, maxErr=20;
        uint32_t hi=0;
        uint64_t lo=0;
+       //clear read buffer
+       BigBuf_Clear_keep_EM();
        // Configure to go in 125Khz listen mode
        LFSetupFPGAForADC(95, true);
 
-       while(!BUTTON_PRESS()) {
+       while(!BUTTON_PRESS() && !usb_poll_validate_length()) {
 
                WDT_HIT();
                if (ledcontrol) LED_A_ON();
@@ -908,10 +995,12 @@ void CmdIOdemodFSK(int findone, int *high, int *low, int ledcontrol)
        uint8_t version=0;
        uint8_t facilitycode=0;
        uint16_t number=0;
+       //clear read buffer
+       BigBuf_Clear_keep_EM();
        // Configure to go in 125Khz listen mode
        LFSetupFPGAForADC(95, true);
 
-       while(!BUTTON_PRESS()) {
+       while(!BUTTON_PRESS() && !usb_poll_validate_length()) {
                WDT_HIT();
                if (ledcontrol) LED_A_ON();
                DoAcquisition_default(-1,true);
@@ -966,237 +1055,206 @@ void CmdIOdemodFSK(int findone, int *high, int *low, int ledcontrol)
 }
 
 /*------------------------------
- * T5555/T5557/T5567 routines
+ * T5555/T5557/T5567/T5577 routines
  *------------------------------
- */
-
-/* T55x7 configuration register definitions */
-#define T55x7_POR_DELAY                        0x00000001
-#define T55x7_ST_TERMINATOR            0x00000008
-#define T55x7_PWD                      0x00000010
-#define T55x7_MAXBLOCK_SHIFT           5
-#define T55x7_AOR                      0x00000200
-#define T55x7_PSKCF_RF_2               0
-#define T55x7_PSKCF_RF_4               0x00000400
-#define T55x7_PSKCF_RF_8               0x00000800
-#define T55x7_MODULATION_DIRECT                0
-#define T55x7_MODULATION_PSK1          0x00001000
-#define T55x7_MODULATION_PSK2          0x00002000
-#define T55x7_MODULATION_PSK3          0x00003000
-#define T55x7_MODULATION_FSK1          0x00004000
-#define T55x7_MODULATION_FSK2          0x00005000
-#define T55x7_MODULATION_FSK1a         0x00006000
-#define T55x7_MODULATION_FSK2a         0x00007000
-#define T55x7_MODULATION_MANCHESTER    0x00008000
-#define T55x7_MODULATION_BIPHASE       0x00010000
-#define T55x7_BITRATE_RF_8             0
-#define T55x7_BITRATE_RF_16            0x00040000
-#define T55x7_BITRATE_RF_32            0x00080000
-#define T55x7_BITRATE_RF_40            0x000C0000
-#define T55x7_BITRATE_RF_50            0x00100000
-#define T55x7_BITRATE_RF_64            0x00140000
-#define T55x7_BITRATE_RF_100           0x00180000
-#define T55x7_BITRATE_RF_128           0x001C0000
-
-/* T5555 (Q5) configuration register definitions */
-#define T5555_ST_TERMINATOR            0x00000001
-#define T5555_MAXBLOCK_SHIFT           0x00000001
-#define T5555_MODULATION_MANCHESTER    0
-#define T5555_MODULATION_PSK1          0x00000010
-#define T5555_MODULATION_PSK2          0x00000020
-#define T5555_MODULATION_PSK3          0x00000030
-#define T5555_MODULATION_FSK1          0x00000040
-#define T5555_MODULATION_FSK2          0x00000050
-#define T5555_MODULATION_BIPHASE       0x00000060
-#define T5555_MODULATION_DIRECT                0x00000070
-#define T5555_INVERT_OUTPUT            0x00000080
-#define T5555_PSK_RF_2                 0
-#define T5555_PSK_RF_4                 0x00000100
-#define T5555_PSK_RF_8                 0x00000200
-#define T5555_USE_PWD                  0x00000400
-#define T5555_USE_AOR                  0x00000800
-#define T5555_BITRATE_SHIFT            12
-#define T5555_FAST_WRITE               0x00004000
-#define T5555_PAGE_SELECT              0x00008000
-
-/*
- * Relevant times in microsecond
+ * NOTE: T55x7/T5555 configuration register definitions moved to protocols.h
+ *
+ * Relevant communication times in microsecond
  * To compensate antenna falling times shorten the write times
  * and enlarge the gap ones.
+ * Q5 tags seems to have issues when these values changes. 
  */
-#define START_GAP 50*8 // 10 - 50fc 250
-#define WRITE_GAP 20*8 //    - 30fc 160
-#define WRITE_0   24*8 // 16 - 63fc 54fc 144
-#define WRITE_1   54*8 // 48 - 63fc 54fc 432 for T55x7; 448 for E5550 //400
+#define START_GAP 31*8 // was 250 // SPEC:  1*8 to 50*8 - typ 15*8 (or 15fc)
+#define WRITE_GAP 20*8 // was 160 // SPEC:  1*8 to 20*8 - typ 10*8 (or 10fc)
+#define WRITE_0   18*8 // was 144 // SPEC: 16*8 to 32*8 - typ 24*8 (or 24fc)
+#define WRITE_1   50*8 // was 400 // SPEC: 48*8 to 64*8 - typ 56*8 (or 56fc)  432 for T55x7; 448 for E5550
+#define READ_GAP  15*8 
 
-#define T55xx_SAMPLES_SIZE      12000 // 32 x 32 x 10  (32 bit times numofblock (7), times clock skip..)
+void TurnReadLFOn(int delay) {
+       FpgaWriteConfWord(FPGA_MAJOR_MODE_LF_ADC | FPGA_LF_ADC_READER_FIELD);
+       // Give it a bit of time for the resonant antenna to settle.
+       SpinDelayUs(delay); //155*8 //50*8
+}
 
 // Write one bit to card
-void T55xxWriteBit(int bit)
-{
-       FpgaDownloadAndGo(FPGA_BITSTREAM_LF);
-       FpgaSendCommand(FPGA_CMD_SET_DIVISOR, 95); //125Khz
-       FpgaWriteConfWord(FPGA_MAJOR_MODE_LF_ADC | FPGA_LF_ADC_READER_FIELD);
-       if (bit == 0)
-               SpinDelayUs(WRITE_0);
+void T55xxWriteBit(int bit) {
+       if (!bit)
+               TurnReadLFOn(WRITE_0);
        else
-               SpinDelayUs(WRITE_1);
+               TurnReadLFOn(WRITE_1);
        FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF);
        SpinDelayUs(WRITE_GAP);
 }
 
+// Send T5577 reset command then read stream (see if we can identify the start of the stream)
+void T55xxResetRead(void) {
+       LED_A_ON();
+       //clear buffer now so it does not interfere with timing later
+       BigBuf_Clear_keep_EM();
+
+       // Set up FPGA, 125kHz
+       LFSetupFPGAForADC(95, true);
+
+       // Trigger T55x7 in mode.
+       FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF);
+       SpinDelayUs(START_GAP);
+
+       // reset tag - op code 00
+       T55xxWriteBit(0);
+       T55xxWriteBit(0);
+
+       // Turn field on to read the response
+       TurnReadLFOn(READ_GAP);
+
+       // Acquisition
+       doT55x7Acquisition(BigBuf_max_traceLen());
+
+       // Turn the field off
+       FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF); // field off
+       cmd_send(CMD_ACK,0,0,0,0,0);    
+       LED_A_OFF();
+}
+
 // Write one card block in page 0, no lock
-void T55xxWriteBlock(uint32_t Data, uint32_t Block, uint32_t Pwd, uint8_t PwdMode)
-{
+void T55xxWriteBlockExt(uint32_t Data, uint32_t Block, uint32_t Pwd, uint8_t arg) {
+       LED_A_ON();
+       bool PwdMode = arg & 0x1;
+       uint8_t Page = (arg & 0x2)>>1;
        uint32_t i = 0;
 
        // Set up FPGA, 125kHz
-       // Wait for config.. (192+8190xPOW)x8 == 67ms
-       LFSetupFPGAForADC(0, true);
+       LFSetupFPGAForADC(95, true);
 
-       // Now start writting
+       // Trigger T55x7 in mode.
        FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF);
        SpinDelayUs(START_GAP);
 
-       // Opcode
+       // Opcode 10
        T55xxWriteBit(1);
-       T55xxWriteBit(0); //Page 0
-       if (PwdMode == 1){
-               // Pwd
+       T55xxWriteBit(Page); //Page 0
+       if (PwdMode){
+               // Send Pwd
                for (i = 0x80000000; i != 0; i >>= 1)
                        T55xxWriteBit(Pwd & i);
        }
-       // Lock bit
+       // Send Lock bit
        T55xxWriteBit(0);
 
-       // Data
+       // Send Data
        for (i = 0x80000000; i != 0; i >>= 1)
                T55xxWriteBit(Data & i);
 
-       // Block
+       // Send Block number
        for (i = 0x04; i != 0; i >>= 1)
                T55xxWriteBit(Block & i);
 
-       // Now perform write (nominal is 5.6 ms for T55x7 and 18ms for E5550,
+       // Perform write (nominal is 5.6 ms for T55x7 and 18ms for E5550,
        // so wait a little more)
-       FpgaSendCommand(FPGA_CMD_SET_DIVISOR, 95); //125Khz
-       FpgaWriteConfWord(FPGA_MAJOR_MODE_LF_ADC | FPGA_LF_ADC_READER_FIELD);
-       SpinDelay(20);
+       TurnReadLFOn(20 * 1000);
+               //could attempt to do a read to confirm write took
+               // as the tag should repeat back the new block 
+               // until it is reset, but to confirm it we would 
+               // need to know the current block 0 config mode
+
+       // turn field off
        FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF);
+       LED_A_OFF();
 }
 
-void TurnReadLFOn(){
-       FpgaWriteConfWord(FPGA_MAJOR_MODE_LF_ADC | FPGA_LF_ADC_READER_FIELD);
-       // Give it a bit of time for the resonant antenna to settle.
-       SpinDelayUs(8*150);
+// Write one card block in page 0, no lock
+void T55xxWriteBlock(uint32_t Data, uint32_t Block, uint32_t Pwd, uint8_t arg) {
+       T55xxWriteBlockExt(Data, Block, Pwd, arg);
+       cmd_send(CMD_ACK,0,0,0,0,0);
 }
 
-
-// Read one card block in page 0
-void T55xxReadBlock(uint32_t Block, uint32_t Pwd, uint8_t PwdMode)
-{
+// Read one card block in page [page]
+void T55xxReadBlock(uint16_t arg0, uint8_t Block, uint32_t Pwd) {
+       LED_A_ON();
+       bool PwdMode = arg0 & 0x1;
+       uint8_t Page = (arg0 & 0x2) >> 1;
        uint32_t i = 0;
-       uint8_t *dest = BigBuf_get_addr();
-       uint16_t bufferlength = BigBuf_max_traceLen();
-       if ( bufferlength > T55xx_SAMPLES_SIZE )
-               bufferlength = T55xx_SAMPLES_SIZE;
+       bool RegReadMode = (Block == 0xFF);
 
-       // Clear destination buffer before sending the command
-       memset(dest, 0x80, bufferlength);
+       //clear buffer now so it does not interfere with timing later
+       BigBuf_Clear_ext(false);
 
-       // Set up FPGA, 125kHz
-       // Wait for config.. (192+8190xPOW)x8 == 67ms
-       LFSetupFPGAForADC(0, true);
+       //make sure block is at max 7
+       Block &= 0x7;
+
+       // Set up FPGA, 125kHz to power up the tag
+       LFSetupFPGAForADC(95, true);
+
+       // Trigger T55x7 Direct Access Mode with start gap
        FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF);
        SpinDelayUs(START_GAP);
 
-       // Opcode
+       // Opcode 1[page]
        T55xxWriteBit(1);
-       T55xxWriteBit(0); //Page 0
-       if (PwdMode == 1){
-               // Pwd
+       T55xxWriteBit(Page); //Page 0
+
+       if (PwdMode){
+               // Send Pwd
                for (i = 0x80000000; i != 0; i >>= 1)
                        T55xxWriteBit(Pwd & i);
        }
-       // Lock bit
+       // Send a zero bit separation
        T55xxWriteBit(0);
-       // Block
-       for (i = 0x04; i != 0; i >>= 1)
-               T55xxWriteBit(Block & i);
+
+       // Send Block number (if direct access mode)
+       if (!RegReadMode)
+               for (i = 0x04; i != 0; i >>= 1)
+                       T55xxWriteBit(Block & i);               
 
        // Turn field on to read the response
-       TurnReadLFOn();
-       // Now do the acquisition
-       i = 0;
-       for(;;) {
-               if (AT91C_BASE_SSC->SSC_SR & AT91C_SSC_TXRDY) {
-                       AT91C_BASE_SSC->SSC_THR = 0x43;
-                       LED_D_ON();
-               }
-               if (AT91C_BASE_SSC->SSC_SR & AT91C_SSC_RXRDY) {
-                       dest[i] = (uint8_t)AT91C_BASE_SSC->SSC_RHR;
-                       i++;
-                       LED_D_OFF();
-                       if (i >= bufferlength) break;
-               }
-       }
+       TurnReadLFOn(READ_GAP);
 
-       cmd_send(CMD_ACK,0,0,0,0,0);    
+       // Acquisition
+       doT55x7Acquisition(12000);
+
+       // Turn the field off
        FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF); // field off
-       LED_D_OFF();
+       cmd_send(CMD_ACK,0,0,0,0,0);    
+       LED_A_OFF();
 }
 
-// Read card traceability data (page 1)
-void T55xxReadTrace(void){
-       
+void T55xxWakeUp(uint32_t Pwd){
+       LED_B_ON();
        uint32_t i = 0;
-       uint8_t *dest = BigBuf_get_addr();
-       uint16_t bufferlength = BigBuf_max_traceLen();
-       if ( bufferlength > T55xx_SAMPLES_SIZE )
-               bufferlength= T55xx_SAMPLES_SIZE;
-
-       // Clear destination buffer before sending the command
-       memset(dest, 0x80, bufferlength);
-
-       LFSetupFPGAForADC(0, true);
+       
+       // Set up FPGA, 125kHz
+       LFSetupFPGAForADC(95, true);
+       
+       // Trigger T55x7 Direct Access Mode
        FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF);
        SpinDelayUs(START_GAP);
-
-       // Opcode
+       
+       // Opcode 10
        T55xxWriteBit(1);
-       T55xxWriteBit(1); //Page 1
+       T55xxWriteBit(0); //Page 0
 
-       // Turn field on to read the response
-       TurnReadLFOn();
+       // Send Pwd
+       for (i = 0x80000000; i != 0; i >>= 1)
+               T55xxWriteBit(Pwd & i);
 
-       // Now do the acquisition
-       for(;;) {
-               if (AT91C_BASE_SSC->SSC_SR & AT91C_SSC_TXRDY) {
-                       AT91C_BASE_SSC->SSC_THR = 0x43;
-                       LED_D_ON();
-               }
-               if (AT91C_BASE_SSC->SSC_SR & AT91C_SSC_RXRDY) {
-                       dest[i] = (uint8_t)AT91C_BASE_SSC->SSC_RHR;
-                       i++;
-                       LED_D_OFF();
+       // Turn and leave field on to let the begin repeating transmission
+       TurnReadLFOn(20*1000);
+}
 
-                       if (i >= bufferlength) break;
-               }
-       }
+/*-------------- Cloning routines -----------*/
 
-       cmd_send(CMD_ACK,0,0,0,0,0);
-       FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF); // field off
-       LED_D_OFF();
+void WriteT55xx(uint32_t *blockdata, uint8_t startblock, uint8_t numblocks) {
+       // write last block first and config block last (if included)
+       for (uint8_t i = numblocks+startblock; i > startblock; i--) {
+               T55xxWriteBlockExt(blockdata[i-1],i-1,0,0);
+       }
 }
 
-/*-------------- Cloning routines -----------*/
 // Copy HID id to card and setup block 0 config
-void CopyHIDtoT55x7(uint32_t hi2, uint32_t hi, uint32_t lo, uint8_t longFMT)
-{
-       int data1=0, data2=0, data3=0, data4=0, data5=0, data6=0; //up to six blocks for long format
-       int last_block = 0;
+void CopyHIDtoT55x7(uint32_t hi2, uint32_t hi, uint32_t lo, uint8_t longFMT) {
+       uint32_t data[] = {0,0,0,0,0,0,0};
+       uint8_t last_block = 0;
 
-       if (longFMT){
+       if (longFMT) {
                // Ensure no more than 84 bits supplied
                if (hi2>0xFFFFF) {
                        DbpString("Tags can only have 84 bits.");
@@ -1204,140 +1262,100 @@ void CopyHIDtoT55x7(uint32_t hi2, uint32_t hi, uint32_t lo, uint8_t longFMT)
                }
                // Build the 6 data blocks for supplied 84bit ID
                last_block = 6;
-               data1 = 0x1D96A900; // load preamble (1D) & long format identifier (9E manchester encoded)
-               for (int i=0;i<4;i++) {
-                       if (hi2 & (1<<(19-i)))
-                               data1 |= (1<<(((3-i)*2)+1)); // 1 -> 10
-                       else
-                               data1 |= (1<<((3-i)*2)); // 0 -> 01
-               }
-
-               data2 = 0;
-               for (int i=0;i<16;i++) {
-                       if (hi2 & (1<<(15-i)))
-                               data2 |= (1<<(((15-i)*2)+1)); // 1 -> 10
-                       else
-                               data2 |= (1<<((15-i)*2)); // 0 -> 01
-               }
-
-               data3 = 0;
-               for (int i=0;i<16;i++) {
-                       if (hi & (1<<(31-i)))
-                               data3 |= (1<<(((15-i)*2)+1)); // 1 -> 10
-                       else
-                               data3 |= (1<<((15-i)*2)); // 0 -> 01
-               }
-
-               data4 = 0;
-               for (int i=0;i<16;i++) {
-                       if (hi & (1<<(15-i)))
-                               data4 |= (1<<(((15-i)*2)+1)); // 1 -> 10
-                       else
-                               data4 |= (1<<((15-i)*2)); // 0 -> 01
-               }
-
-               data5 = 0;
-               for (int i=0;i<16;i++) {
-                       if (lo & (1<<(31-i)))
-                               data5 |= (1<<(((15-i)*2)+1)); // 1 -> 10
-                       else
-                               data5 |= (1<<((15-i)*2)); // 0 -> 01
-               }
-
-               data6 = 0;
-               for (int i=0;i<16;i++) {
-                       if (lo & (1<<(15-i)))
-                               data6 |= (1<<(((15-i)*2)+1)); // 1 -> 10
-                       else
-                               data6 |= (1<<((15-i)*2)); // 0 -> 01
-               }
-       }
-       else {
+               // load preamble (1D) & long format identifier (9E manchester encoded)
+               data[1] = 0x1D96A900 | (manchesterEncode2Bytes((hi2 >> 16) & 0xF) & 0xFF);
+               // load raw id from hi2, hi, lo to data blocks (manchester encoded)
+               data[2] = manchesterEncode2Bytes(hi2 & 0xFFFF);
+               data[3] = manchesterEncode2Bytes(hi >> 16);
+               data[4] = manchesterEncode2Bytes(hi & 0xFFFF);
+               data[5] = manchesterEncode2Bytes(lo >> 16);
+               data[6] = manchesterEncode2Bytes(lo & 0xFFFF);
+       }       else {
                // Ensure no more than 44 bits supplied
                if (hi>0xFFF) {
                        DbpString("Tags can only have 44 bits.");
                        return;
                }
-
                // Build the 3 data blocks for supplied 44bit ID
                last_block = 3;
-
-               data1 = 0x1D000000; // load preamble
-
-               for (int i=0;i<12;i++) {
-                       if (hi & (1<<(11-i)))
-                               data1 |= (1<<(((11-i)*2)+1)); // 1 -> 10
-                       else
-                               data1 |= (1<<((11-i)*2)); // 0 -> 01
-               }
-
-               data2 = 0;
-               for (int i=0;i<16;i++) {
-                       if (lo & (1<<(31-i)))
-                               data2 |= (1<<(((15-i)*2)+1)); // 1 -> 10
-                       else
-                               data2 |= (1<<((15-i)*2)); // 0 -> 01
-               }
-
-               data3 = 0;
-               for (int i=0;i<16;i++) {
-                       if (lo & (1<<(15-i)))
-                               data3 |= (1<<(((15-i)*2)+1)); // 1 -> 10
-                       else
-                               data3 |= (1<<((15-i)*2)); // 0 -> 01
-               }
+               // load preamble
+               data[1] = 0x1D000000 | (manchesterEncode2Bytes(hi) & 0xFFFFFF);
+               data[2] = manchesterEncode2Bytes(lo >> 16);
+               data[3] = manchesterEncode2Bytes(lo & 0xFFFF);
        }
+       // load chip config block
+       data[0] = T55x7_BITRATE_RF_50 | T55x7_MODULATION_FSK2a | last_block << T55x7_MAXBLOCK_SHIFT;
+
+       //TODO add selection of chip for Q5 or T55x7
+       // data[0] = (((50-2)/2)<<T5555_BITRATE_SHIFT) | T5555_MODULATION_FSK2 | T5555_INVERT_OUTPUT | last_block << T5555_MAXBLOCK_SHIFT;
 
        LED_D_ON();
        // Program the data blocks for supplied ID
        // and the block 0 for HID format
-       T55xxWriteBlock(data1,1,0,0);
-       T55xxWriteBlock(data2,2,0,0);
-       T55xxWriteBlock(data3,3,0,0);
-
-       if (longFMT) { // if long format there are 6 blocks
-               T55xxWriteBlock(data4,4,0,0);
-               T55xxWriteBlock(data5,5,0,0);
-               T55xxWriteBlock(data6,6,0,0);
-       }
-
-       // Config for HID (RF/50, FSK2a, Maxblock=3 for short/6 for long)
-       T55xxWriteBlock(T55x7_BITRATE_RF_50    |
-                                       T55x7_MODULATION_FSK2a |
-                                       last_block << T55x7_MAXBLOCK_SHIFT,
-                                       0,0,0);
+       WriteT55xx(data, 0, last_block+1);
 
        LED_D_OFF();
 
        DbpString("DONE!");
 }
 
-void CopyIOtoT55x7(uint32_t hi, uint32_t lo, uint8_t longFMT)
-{
-       int data1=0, data2=0; //up to six blocks for long format
-
-       data1 = hi;  // load preamble
-       data2 = lo;
+void CopyIOtoT55x7(uint32_t hi, uint32_t lo) {
+       uint32_t data[] = {T55x7_BITRATE_RF_64 | T55x7_MODULATION_FSK2a | (2 << T55x7_MAXBLOCK_SHIFT), hi, lo};
+       //TODO add selection of chip for Q5 or T55x7
+       // data[0] = (((64-2)/2)<<T5555_BITRATE_SHIFT) | T5555_MODULATION_FSK2 | T5555_INVERT_OUTPUT | 2 << T5555_MAXBLOCK_SHIFT;
 
        LED_D_ON();
        // Program the data blocks for supplied ID
-       // and the block 0 for HID format
-       T55xxWriteBlock(data1,1,0,0);
-       T55xxWriteBlock(data2,2,0,0);
+       // and the block 0 config
+       WriteT55xx(data, 0, 3);
 
-       //Config Block
-       T55xxWriteBlock(0x00147040,0,0,0);
        LED_D_OFF();
 
        DbpString("DONE!");
 }
 
+// Clone Indala 64-bit tag by UID to T55x7
+void CopyIndala64toT55x7(uint32_t hi, uint32_t lo) {
+       //Program the 2 data blocks for supplied 64bit UID
+       // and the Config for Indala 64 format (RF/32;PSK1 with RF/2;Maxblock=2)
+       uint32_t data[] = { T55x7_BITRATE_RF_32 | T55x7_MODULATION_PSK1 | (2 << T55x7_MAXBLOCK_SHIFT), hi, lo};
+       //TODO add selection of chip for Q5 or T55x7
+       // data[0] = (((32-2)/2)<<T5555_BITRATE_SHIFT) | T5555_MODULATION_PSK1 | 2 << T5555_MAXBLOCK_SHIFT;
+
+       WriteT55xx(data, 0, 3);
+       //Alternative config for Indala (Extended mode;RF/32;PSK1 with RF/2;Maxblock=2;Inverse data)
+       //      T5567WriteBlock(0x603E1042,0);
+       DbpString("DONE!");
+}
+// Clone Indala 224-bit tag by UID to T55x7
+void CopyIndala224toT55x7(uint32_t uid1, uint32_t uid2, uint32_t uid3, uint32_t uid4, uint32_t uid5, uint32_t uid6, uint32_t uid7) {
+       //Program the 7 data blocks for supplied 224bit UID
+       uint32_t data[] = {0, uid1, uid2, uid3, uid4, uid5, uid6, uid7};
+       // and the block 0 for Indala224 format 
+       //Config for Indala (RF/32;PSK1 with RF/2;Maxblock=7)
+       data[0] = T55x7_BITRATE_RF_32 | T55x7_MODULATION_PSK1 | (7 << T55x7_MAXBLOCK_SHIFT);
+       //TODO add selection of chip for Q5 or T55x7
+       // data[0] = (((32-2)/2)<<T5555_BITRATE_SHIFT) | T5555_MODULATION_PSK1 | 7 << T5555_MAXBLOCK_SHIFT;
+       WriteT55xx(data, 0, 8);
+       //Alternative config for Indala (Extended mode;RF/32;PSK1 with RF/2;Maxblock=7;Inverse data)
+       //      T5567WriteBlock(0x603E10E2,0);
+       DbpString("DONE!");
+}
+// clone viking tag to T55xx
+void CopyVikingtoT55xx(uint32_t block1, uint32_t block2, uint8_t Q5) {
+       uint32_t data[] = {T55x7_BITRATE_RF_32 | T55x7_MODULATION_MANCHESTER | (2 << T55x7_MAXBLOCK_SHIFT), block1, block2};
+       if (Q5) data[0] = (32 << T5555_BITRATE_SHIFT) | T5555_MODULATION_MANCHESTER | 2 << T5555_MAXBLOCK_SHIFT;
+       // Program the data blocks for supplied ID and the block 0 config
+       WriteT55xx(data, 0, 3);
+       LED_D_OFF();
+       cmd_send(CMD_ACK,0,0,0,0,0);
+}
+
 // Define 9bit header for EM410x tags
-#define EM410X_HEADER          0x1FF
+#define EM410X_HEADER            0x1FF
 #define EM410X_ID_LENGTH       40
 
-void WriteEM410x(uint32_t card, uint32_t id_hi, uint32_t id_lo)
-{
+void WriteEM410x(uint32_t card, uint32_t id_hi, uint32_t id_lo) {
        int i, id_bit;
        uint64_t id = EM410X_HEADER;
        uint64_t rev_id = 0;    // reversed ID
@@ -1397,360 +1415,30 @@ void WriteEM410x(uint32_t card, uint32_t id_hi, uint32_t id_lo)
        LED_D_ON();
 
        // Write EM410x ID
-       T55xxWriteBlock((uint32_t)(id >> 32), 1, 0, 0);
-       T55xxWriteBlock((uint32_t)id, 2, 0, 0);
-
-       // Config for EM410x (RF/64, Manchester, Maxblock=2)
-       if (card) {
-               // Clock rate is stored in bits 8-15 of the card value
-               clock = (card & 0xFF00) >> 8;
-               Dbprintf("Clock rate: %d", clock);
-               switch (clock)
-               {
-               case 32:
-                       clock = T55x7_BITRATE_RF_32;
-                       break;
-               case 16:
-                       clock = T55x7_BITRATE_RF_16;
-                       break;
-               case 0:
-                       // A value of 0 is assumed to be 64 for backwards-compatibility
-                       // Fall through...
-               case 64:
-                       clock = T55x7_BITRATE_RF_64;
-                       break;
-               default:
+       uint32_t data[] = {0, id>>32, id & 0xFFFFFFFF};
+
+       clock = (card & 0xFF00) >> 8;
+       clock = (clock == 0) ? 64 : clock;
+       Dbprintf("Clock rate: %d", clock);
+       if (card & 0xFF) { //t55x7
+               clock = GetT55xxClockBit(clock);                        
+               if (clock == 0) {
                        Dbprintf("Invalid clock rate: %d", clock);
                        return;
                }
-
-               // Writing configuration for T55x7 tag
-               T55xxWriteBlock(clock       |
-                                               T55x7_MODULATION_MANCHESTER |
-                                               2 << T55x7_MAXBLOCK_SHIFT,
-                                               0, 0, 0);
+               data[0] = clock | T55x7_MODULATION_MANCHESTER | (2 << T55x7_MAXBLOCK_SHIFT);
+       } else { //t5555 (Q5)
+               clock = (clock-2)>>1;  //n = (RF-2)/2
+               data[0] = (clock << T5555_BITRATE_SHIFT) | T5555_MODULATION_MANCHESTER | (2 << T5555_MAXBLOCK_SHIFT);
        }
-       else
-               // Writing configuration for T5555(Q5) tag
-               T55xxWriteBlock(0x1F << T5555_BITRATE_SHIFT |
-                                               T5555_MODULATION_MANCHESTER |
-                                               2 << T5555_MAXBLOCK_SHIFT,
-                                               0, 0, 0);
+
+       WriteT55xx(data, 0, 3);
 
        LED_D_OFF();
        Dbprintf("Tag %s written with 0x%08x%08x\n", card ? "T55x7":"T5555",
                         (uint32_t)(id >> 32), (uint32_t)id);
 }
 
-// Clone Indala 64-bit tag by UID to T55x7
-void CopyIndala64toT55x7(int hi, int lo)
-{
-
-       //Program the 2 data blocks for supplied 64bit UID
-       // and the block 0 for Indala64 format
-       T55xxWriteBlock(hi,1,0,0);
-       T55xxWriteBlock(lo,2,0,0);
-       //Config for Indala (RF/32;PSK1 with RF/2;Maxblock=2)
-       T55xxWriteBlock(T55x7_BITRATE_RF_32    |
-                                       T55x7_MODULATION_PSK1 |
-                                       2 << T55x7_MAXBLOCK_SHIFT,
-                                       0, 0, 0);
-       //Alternative config for Indala (Extended mode;RF/32;PSK1 with RF/2;Maxblock=2;Inverse data)
-       //      T5567WriteBlock(0x603E1042,0);
-
-       DbpString("DONE!");
-
-}
-
-void CopyIndala224toT55x7(int uid1, int uid2, int uid3, int uid4, int uid5, int uid6, int uid7)
-{
-
-       //Program the 7 data blocks for supplied 224bit UID
-       // and the block 0 for Indala224 format
-       T55xxWriteBlock(uid1,1,0,0);
-       T55xxWriteBlock(uid2,2,0,0);
-       T55xxWriteBlock(uid3,3,0,0);
-       T55xxWriteBlock(uid4,4,0,0);
-       T55xxWriteBlock(uid5,5,0,0);
-       T55xxWriteBlock(uid6,6,0,0);
-       T55xxWriteBlock(uid7,7,0,0);
-       //Config for Indala (RF/32;PSK1 with RF/2;Maxblock=7)
-       T55xxWriteBlock(T55x7_BITRATE_RF_32    |
-                                       T55x7_MODULATION_PSK1 |
-                                       7 << T55x7_MAXBLOCK_SHIFT,
-                                       0,0,0);
-       //Alternative config for Indala (Extended mode;RF/32;PSK1 with RF/2;Maxblock=7;Inverse data)
-       //      T5567WriteBlock(0x603E10E2,0);
-
-       DbpString("DONE!");
-
-}
-
-
-#define abs(x) ( ((x)<0) ? -(x) : (x) )
-#define max(x,y) ( x<y ? y:x)
-
-int DemodPCF7931(uint8_t **outBlocks) {
-       uint8_t BitStream[256];
-       uint8_t Blocks[8][16];
-       uint8_t *GraphBuffer = BigBuf_get_addr();
-       int GraphTraceLen = BigBuf_max_traceLen();
-       int i, j, lastval, bitidx, half_switch;
-       int clock = 64;
-       int tolerance = clock / 8;
-       int pmc, block_done;
-       int lc, warnings = 0;
-       int num_blocks = 0;
-       int lmin=128, lmax=128;
-       uint8_t dir;
-
-       LFSetupFPGAForADC(95, true);
-       DoAcquisition_default(0, 0);
-
-
-       lmin = 64;
-       lmax = 192;
-
-       i = 2;
-
-       /* Find first local max/min */
-       if(GraphBuffer[1] > GraphBuffer[0]) {
-               while(i < GraphTraceLen) {
-                       if( !(GraphBuffer[i] > GraphBuffer[i-1]) && GraphBuffer[i] > lmax)
-                               break;
-                       i++;
-               }
-               dir = 0;
-       }
-       else {
-               while(i < GraphTraceLen) {
-                       if( !(GraphBuffer[i] < GraphBuffer[i-1]) && GraphBuffer[i] < lmin)
-                               break;
-                       i++;
-               }
-               dir = 1;
-       }
-
-       lastval = i++;
-       half_switch = 0;
-       pmc = 0;
-       block_done = 0;
-
-       for (bitidx = 0; i < GraphTraceLen; i++)
-       {
-               if ( (GraphBuffer[i-1] > GraphBuffer[i] && dir == 1 && GraphBuffer[i] > lmax) || (GraphBuffer[i-1] < GraphBuffer[i] && dir == 0 && GraphBuffer[i] < lmin))
-               {
-                       lc = i - lastval;
-                       lastval = i;
-
-                       // Switch depending on lc length:
-                       // Tolerance is 1/8 of clock rate (arbitrary)
-                       if (abs(lc-clock/4) < tolerance) {
-                               // 16T0
-                               if((i - pmc) == lc) { /* 16T0 was previous one */
-                                       /* It's a PMC ! */
-                                       i += (128+127+16+32+33+16)-1;
-                                       lastval = i;
-                                       pmc = 0;
-                                       block_done = 1;
-                               }
-                               else {
-                                       pmc = i;
-                               }
-                       } else if (abs(lc-clock/2) < tolerance) {
-                               // 32TO
-                               if((i - pmc) == lc) { /* 16T0 was previous one */
-                                       /* It's a PMC ! */
-                                       i += (128+127+16+32+33)-1;
-                                       lastval = i;
-                                       pmc = 0;
-                                       block_done = 1;
-                               }
-                               else if(half_switch == 1) {
-                                       BitStream[bitidx++] = 0;
-                                       half_switch = 0;
-                               }
-                               else
-                                       half_switch++;
-                       } else if (abs(lc-clock) < tolerance) {
-                               // 64TO
-                               BitStream[bitidx++] = 1;
-                       } else {
-                               // Error
-                               warnings++;
-                               if (warnings > 10)
-                               {
-                                       Dbprintf("Error: too many detection errors, aborting.");
-                                       return 0;
-                               }
-                       }
-
-                       if(block_done == 1) {
-                               if(bitidx == 128) {
-                                       for(j=0; j<16; j++) {
-                                               Blocks[num_blocks][j] = 128*BitStream[j*8+7]+
-                                                               64*BitStream[j*8+6]+
-                                                               32*BitStream[j*8+5]+
-                                                               16*BitStream[j*8+4]+
-                                                               8*BitStream[j*8+3]+
-                                                               4*BitStream[j*8+2]+
-                                                               2*BitStream[j*8+1]+
-                                                               BitStream[j*8];
-                                       }
-                                       num_blocks++;
-                               }
-                               bitidx = 0;
-                               block_done = 0;
-                               half_switch = 0;
-                       }
-                       if(i < GraphTraceLen)
-                       {
-                               if (GraphBuffer[i-1] > GraphBuffer[i]) dir=0;
-                               else dir = 1;
-                       }
-               }
-               if(bitidx==255)
-                       bitidx=0;
-               warnings = 0;
-               if(num_blocks == 4) break;
-       }
-       memcpy(outBlocks, Blocks, 16*num_blocks);
-       return num_blocks;
-}
-
-int IsBlock0PCF7931(uint8_t *Block) {
-       // Assume RFU means 0 :)
-       if((memcmp(Block, "\x00\x00\x00\x00\x00\x00\x00\x01", 8) == 0) && memcmp(Block+9, "\x00\x00\x00\x00\x00\x00\x00", 7) == 0) // PAC enabled
-               return 1;
-       if((memcmp(Block+9, "\x00\x00\x00\x00\x00\x00\x00", 7) == 0) && Block[7] == 0) // PAC disabled, can it *really* happen ?
-               return 1;
-       return 0;
-}
-
-int IsBlock1PCF7931(uint8_t *Block) {
-       // Assume RFU means 0 :)
-       if(Block[10] == 0 && Block[11] == 0 && Block[12] == 0 && Block[13] == 0)
-               if((Block[14] & 0x7f) <= 9 && Block[15] <= 9)
-                       return 1;
-
-       return 0;
-}
-
-#define ALLOC 16
-
-void ReadPCF7931() {
-       uint8_t Blocks[8][17];
-       uint8_t tmpBlocks[4][16];
-       int i, j, ind, ind2, n;
-       int num_blocks = 0;
-       int max_blocks = 8;
-       int ident = 0;
-       int error = 0;
-       int tries = 0;
-
-       memset(Blocks, 0, 8*17*sizeof(uint8_t));
-
-       do {
-               memset(tmpBlocks, 0, 4*16*sizeof(uint8_t));
-               n = DemodPCF7931((uint8_t**)tmpBlocks);
-               if(!n)
-                       error++;
-               if(error==10 && num_blocks == 0) {
-                       Dbprintf("Error, no tag or bad tag");
-                       return;
-               }
-               else if (tries==20 || error==10) {
-                       Dbprintf("Error reading the tag");
-                       Dbprintf("Here is the partial content");
-                       goto end;
-               }
-
-               for(i=0; i<n; i++)
-                       Dbprintf("(dbg) %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x",
-                                        tmpBlocks[i][0], tmpBlocks[i][1], tmpBlocks[i][2], tmpBlocks[i][3], tmpBlocks[i][4], tmpBlocks[i][5], tmpBlocks[i][6], tmpBlocks[i][7],
-                                       tmpBlocks[i][8], tmpBlocks[i][9], tmpBlocks[i][10], tmpBlocks[i][11], tmpBlocks[i][12], tmpBlocks[i][13], tmpBlocks[i][14], tmpBlocks[i][15]);
-               if(!ident) {
-                       for(i=0; i<n; i++) {
-                               if(IsBlock0PCF7931(tmpBlocks[i])) {
-                                       // Found block 0 ?
-                                       if(i < n-1 && IsBlock1PCF7931(tmpBlocks[i+1])) {
-                                               // Found block 1!
-                                               // \o/
-                                               ident = 1;
-                                               memcpy(Blocks[0], tmpBlocks[i], 16);
-                                               Blocks[0][ALLOC] = 1;
-                                               memcpy(Blocks[1], tmpBlocks[i+1], 16);
-                                               Blocks[1][ALLOC] = 1;
-                                               max_blocks = max((Blocks[1][14] & 0x7f), Blocks[1][15]) + 1;
-                                               // Debug print
-                                               Dbprintf("(dbg) Max blocks: %d", max_blocks);
-                                               num_blocks = 2;
-                                               // Handle following blocks
-                                               for(j=i+2, ind2=2; j!=i; j++, ind2++, num_blocks++) {
-                                                       if(j==n) j=0;
-                                                       if(j==i) break;
-                                                       memcpy(Blocks[ind2], tmpBlocks[j], 16);
-                                                       Blocks[ind2][ALLOC] = 1;
-                                               }
-                                               break;
-                                       }
-                               }
-                       }
-               }
-               else {
-                       for(i=0; i<n; i++) { // Look for identical block in known blocks
-                               if(memcmp(tmpBlocks[i], "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", 16)) { // Block is not full of 00
-                                       for(j=0; j<max_blocks; j++) {
-                                               if(Blocks[j][ALLOC] == 1 && !memcmp(tmpBlocks[i], Blocks[j], 16)) {
-                                                       // Found an identical block
-                                                       for(ind=i-1,ind2=j-1; ind >= 0; ind--,ind2--) {
-                                                               if(ind2 < 0)
-                                                                       ind2 = max_blocks;
-                                                               if(!Blocks[ind2][ALLOC]) { // Block ind2 not already found
-                                                                       // Dbprintf("Tmp %d -> Block %d", ind, ind2);
-                                                                       memcpy(Blocks[ind2], tmpBlocks[ind], 16);
-                                                                       Blocks[ind2][ALLOC] = 1;
-                                                                       num_blocks++;
-                                                                       if(num_blocks == max_blocks) goto end;
-                                                               }
-                                                       }
-                                                       for(ind=i+1,ind2=j+1; ind < n; ind++,ind2++) {
-                                                               if(ind2 > max_blocks)
-                                                                       ind2 = 0;
-                                                               if(!Blocks[ind2][ALLOC]) { // Block ind2 not already found
-                                                                       // Dbprintf("Tmp %d -> Block %d", ind, ind2);
-                                                                       memcpy(Blocks[ind2], tmpBlocks[ind], 16);
-                                                                       Blocks[ind2][ALLOC] = 1;
-                                                                       num_blocks++;
-                                                                       if(num_blocks == max_blocks) goto end;
-                                                               }
-                                                       }
-                                               }
-                                       }
-                               }
-                       }
-               }
-               tries++;
-               if (BUTTON_PRESS()) return;
-       } while (num_blocks != max_blocks);
- end:
-       Dbprintf("-----------------------------------------");
-       Dbprintf("Memory content:");
-       Dbprintf("-----------------------------------------");
-       for(i=0; i<max_blocks; i++) {
-               if(Blocks[i][ALLOC]==1)
-                       Dbprintf("%02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x",
-                                        Blocks[i][0], Blocks[i][1], Blocks[i][2], Blocks[i][3], Blocks[i][4], Blocks[i][5], Blocks[i][6], Blocks[i][7],
-                                       Blocks[i][8], Blocks[i][9], Blocks[i][10], Blocks[i][11], Blocks[i][12], Blocks[i][13], Blocks[i][14], Blocks[i][15]);
-               else
-                       Dbprintf("<missing block %d>", i);
-       }
-       Dbprintf("-----------------------------------------");
-
-       return ;
-}
-
-
 //-----------------------------------
 // EM4469 / EM4305 routines
 //-----------------------------------
@@ -1759,7 +1447,6 @@ void ReadPCF7931() {
 #define FWD_CMD_READ 0x9
 #define FWD_CMD_DISABLE 0x5
 
-
 uint8_t forwardLink_data[64]; //array of forwarded bits
 uint8_t * forward_ptr; //ptr for forward message preparation
 uint8_t fwd_bit_sz; //forwardlink bit counter
@@ -1770,8 +1457,15 @@ uint8_t * fwd_write_ptr; //forwardlink bit pointer
 // see EM4469 spec
 //====================================================================
 //--------------------------------------------------------------------
+//  VALUES TAKEN FROM EM4x function: SendForward
+//  START_GAP = 440;       (55*8) cycles at 125Khz (8us = 1cycle)
+//  WRITE_GAP = 128;       (16*8)
+//  WRITE_1   = 256 32*8;  (32*8) 
+
+//  These timings work for 4469/4269/4305 (with the 55*8 above)
+//  WRITE_0 = 23*8 , 9*8  SpinDelayUs(23*8); 
+
 uint8_t Prepare_Cmd( uint8_t cmd ) {
-       //--------------------------------------------------------------------
 
        *forward_ptr++ = 0; //start bit
        *forward_ptr++ = 0; //second pause for 4050 code
@@ -1791,10 +1485,7 @@ uint8_t Prepare_Cmd( uint8_t cmd ) {
 // prepares address bits
 // see EM4469 spec
 //====================================================================
-
-//--------------------------------------------------------------------
 uint8_t Prepare_Addr( uint8_t addr ) {
-       //--------------------------------------------------------------------
 
        register uint8_t line_parity;
 
@@ -1815,10 +1506,7 @@ uint8_t Prepare_Addr( uint8_t addr ) {
 // prepares data bits intreleaved with parity bits
 // see EM4469 spec
 //====================================================================
-
-//--------------------------------------------------------------------
 uint8_t Prepare_Data( uint16_t data_low, uint16_t data_hi) {
-       //--------------------------------------------------------------------
 
        register uint8_t line_parity;
        register uint8_t column_parity;
@@ -1862,21 +1550,14 @@ void SendForward(uint8_t fwd_bit_count) {
 
        LED_D_ON();
 
-       //Field on
-       FpgaDownloadAndGo(FPGA_BITSTREAM_LF);
-       FpgaSendCommand(FPGA_CMD_SET_DIVISOR, 95); //125Khz
-       FpgaWriteConfWord(FPGA_MAJOR_MODE_LF_ADC | FPGA_LF_ADC_READER_FIELD);
-
-       // Give it a bit of time for the resonant antenna to settle.
-       // And for the tag to fully power up
-       SpinDelay(150);
+       // Set up FPGA, 125kHz
+       LFSetupFPGAForADC(95, true);
 
        // force 1st mod pulse (start gap must be longer for 4305)
        fwd_bit_sz--; //prepare next bit modulation
        fwd_write_ptr++;
        FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF); // field off
        SpinDelayUs(55*8); //55 cycles off (8us each)for 4305
-       FpgaSendCommand(FPGA_CMD_SET_DIVISOR, 95); //125Khz
        FpgaWriteConfWord(FPGA_MAJOR_MODE_LF_ADC | FPGA_LF_ADC_READER_FIELD);//field on
        SpinDelayUs(16*8); //16 cycles on (8us each)
 
@@ -1888,7 +1569,6 @@ void SendForward(uint8_t fwd_bit_count) {
                        //These timings work for 4469/4269/4305 (with the 55*8 above)
                        FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF); // field off
                        SpinDelayUs(23*8); //16-4 cycles off (8us each)
-                       FpgaSendCommand(FPGA_CMD_SET_DIVISOR, 95); //125Khz
                        FpgaWriteConfWord(FPGA_MAJOR_MODE_LF_ADC | FPGA_LF_ADC_READER_FIELD);//field on
                        SpinDelayUs(9*8); //16 cycles on (8us each)
                }
@@ -1907,14 +1587,17 @@ void EM4xLogin(uint32_t Password) {
 
        //Wait for command to complete
        SpinDelay(20);
-
 }
 
 void EM4xReadWord(uint8_t Address, uint32_t Pwd, uint8_t PwdMode) {
 
        uint8_t fwd_bit_count;
        uint8_t *dest = BigBuf_get_addr();
-       int m=0, i=0;
+       uint16_t bufferlength = BigBuf_max_traceLen();
+       uint32_t i = 0;
+
+       // Clear destination buffer before sending the command
+       BigBuf_Clear_ext(false);
 
        //If password mode do login
        if (PwdMode == 1) EM4xLogin(Pwd);
@@ -1923,9 +1606,6 @@ void EM4xReadWord(uint8_t Address, uint32_t Pwd, uint8_t PwdMode) {
        fwd_bit_count = Prepare_Cmd( FWD_CMD_READ );
        fwd_bit_count += Prepare_Addr( Address );
 
-       m = BigBuf_max_traceLen();
-       // Clear destination buffer before sending the command
-       memset(dest, 128, m);
        // Connect the A/D to the peak-detected low-frequency path.
        SetAdcMuxFor(GPIO_MUXSEL_LOPKD);
        // Now set up the SSC to get the ADC samples that are now streaming at us.
@@ -1942,10 +1622,11 @@ void EM4xReadWord(uint8_t Address, uint32_t Pwd, uint8_t PwdMode) {
                if (AT91C_BASE_SSC->SSC_SR & AT91C_SSC_RXRDY) {
                        dest[i] = (uint8_t)AT91C_BASE_SSC->SSC_RHR;
                        i++;
-                       if (i >= m) break;
+                       if (i >= bufferlength) break;
                }
        }
        FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF); // field off
+       cmd_send(CMD_ACK,0,0,0,0,0);
        LED_D_OFF();
 }
 
index 120c0801de6ccecc3e7e558e10c078e3b187c980..88df543f74022e4657b871e061c662c61c8a610d 100644 (file)
 #include "apps.h"
 #include "util.h"
 #include "string.h"
-
+#include "usb_cdc.h" // for usb_poll_validate_length
 #include "lfsampling.h"
 
 sample_config config = { 1, 8, 1, 95, 0 } ;
 
 void printConfig()
 {
-       Dbprintf("Sampling config: ");
+       Dbprintf("LF Sampling config: ");
        Dbprintf("  [q] divisor:           %d ", config.divisor);
        Dbprintf("  [b] bps:               %d ", config.bits_per_sample);
        Dbprintf("  [d] decimation:        %d ", config.decimation);
@@ -103,7 +103,6 @@ void LFSetupFPGAForADC(int divisor, bool lf_field)
        FpgaSetupSsc();
 }
 
-
 /**
  * Does the sample acquisition. If threshold is specified, the actual sampling
  * is not commenced until the threshold has been reached.
@@ -119,14 +118,13 @@ void LFSetupFPGAForADC(int divisor, bool lf_field)
  * @param silent - is true, now outputs are made. If false, dbprints the status
  * @return the number of bits occupied by the samples.
  */
-
-uint32_t DoAcquisition(uint8_t decimation, uint32_t bits_per_sample, bool averaging, int trigger_threshold,bool silent)
+uint32_t DoAcquisition(uint8_t decimation, uint32_t bits_per_sample, bool averaging, int trigger_threshold, bool silent)
 {
        //.
        uint8_t *dest = BigBuf_get_addr();
     int bufsize = BigBuf_max_traceLen();
 
-       memset(dest, 0, bufsize);
+       //memset(dest, 0, bufsize); //creates issues with cmdread (marshmellow)
 
        if(bits_per_sample < 1) bits_per_sample = 1;
        if(bits_per_sample > 8) bits_per_sample = 8;
@@ -151,9 +149,10 @@ uint32_t DoAcquisition(uint8_t decimation, uint32_t bits_per_sample, bool averag
                if (AT91C_BASE_SSC->SSC_SR & AT91C_SSC_RXRDY) {
                        sample = (uint8_t)AT91C_BASE_SSC->SSC_RHR;
                        LED_D_OFF();
-                       if (trigger_threshold > 0 && sample < trigger_threshold)
+                       // threshold either high or low values 128 = center 0.  if trigger = 178 
+                       if ((trigger_threshold > 0) && (sample < (trigger_threshold+128)) && (sample > (128-trigger_threshold))) // 
                                continue;
-
+               
                        trigger_threshold = 0;
                        sample_total_numbers++;
 
@@ -249,3 +248,70 @@ uint32_t SnoopLF()
 {
        return ReadLF(false, true);
 }
+
+/**
+* acquisition of T55x7 LF signal. Similart to other LF, but adjusted with @marshmellows thresholds
+* the data is collected in BigBuf.
+**/
+void doT55x7Acquisition(size_t sample_size) {
+
+       #define T55xx_READ_UPPER_THRESHOLD 128+60  // 60 grph
+       #define T55xx_READ_LOWER_THRESHOLD 128-60  // -60 grph
+       #define T55xx_READ_TOL   5
+
+       uint8_t *dest = BigBuf_get_addr();
+       uint16_t bufsize = BigBuf_max_traceLen();
+       
+       if ( bufsize > sample_size )
+               bufsize = sample_size;
+
+       uint16_t i = 0;
+       bool startFound = false;
+       bool highFound = false;
+       bool lowFound = false;
+       uint8_t curSample = 0;
+       uint8_t lastSample = 0;
+       uint16_t skipCnt = 0;
+       while(!BUTTON_PRESS() && !usb_poll_validate_length() && skipCnt<1000 && i<bufsize ) {
+               WDT_HIT();
+               if (AT91C_BASE_SSC->SSC_SR & AT91C_SSC_TXRDY) {
+                       AT91C_BASE_SSC->SSC_THR = 0x43;
+                       LED_D_ON();
+               }
+               if (AT91C_BASE_SSC->SSC_SR & AT91C_SSC_RXRDY) {
+                       curSample = (uint8_t)AT91C_BASE_SSC->SSC_RHR;
+                       LED_D_OFF();
+
+                       // skip until the first high sample above threshold
+                       if (!startFound && curSample > T55xx_READ_UPPER_THRESHOLD) {
+                               //if (curSample > lastSample) 
+                               //      lastSample = curSample;
+                               highFound = true;
+                       } else if (!highFound) {
+                               skipCnt++;
+                               continue;
+                       }
+                       // skip until the first Low sample below threshold
+                       if (!startFound && curSample < T55xx_READ_LOWER_THRESHOLD) {
+                               //if (curSample > lastSample) 
+                               lastSample = curSample;
+                               lowFound = true;
+                       } else if (!lowFound) {
+                               skipCnt++;
+                               continue;
+                       }
+
+
+                       // skip until first high samples begin to change
+                       if (startFound || curSample > T55xx_READ_LOWER_THRESHOLD+T55xx_READ_TOL){
+                               // if just found start - recover last sample
+                               if (!startFound) {
+                                       dest[i++] = lastSample;
+                                       startFound = true;
+                               }
+                               // collect samples
+                               dest[i++] = curSample;
+                       }
+               }
+       }
+}
index 6c671ec8ca7a295b49a2d9200401a3ca69d49753..bd8ad1d0833c33de6d53d448bf6ec8a70eb174d4 100644 (file)
@@ -1,6 +1,12 @@
 #ifndef LFSAMPLING_H
 #define LFSAMPLING_H
 
+/**
+* acquisition of T55x7 LF signal. Similart to other LF, but adjusted with @marshmellows thresholds
+* the data is collected in BigBuf.
+**/
+void doT55x7Acquisition(size_t sample_size);
+
 /**
 * Initializes the FPGA for reader-mode (field on), and acquires the samples.
 * @return number of bits sampled
@@ -41,7 +47,6 @@ uint32_t DoAcquisition_config( bool silent);
 **/
 void LFSetupFPGAForADC(int divisor, bool lf_field);
 
-
 /**
  * Called from the USB-handler to set the sampling configuration
  * The sampling config is used for std reading and snooping.
@@ -56,4 +61,8 @@ void LFSetupFPGAForADC(int divisor, bool lf_field);
 void setSamplingConfig(sample_config *sc);
 
 sample_config * getSamplingConfig();
+
+void printConfig();
+
+
 #endif // LFSAMPLING_H
index 8355cd1946172da7c7cdf272938179bc95fef66a..a3d6609db3413a136b6d5415e3296e103f90a28a 100644 (file)
@@ -16,7 +16,6 @@
 #include "mifarecmd.h"\r
 #include "apps.h"\r
 #include "util.h"\r
-\r
 #include "crc.h"\r
 \r
 // the block number for the ISO14443-4 PCB\r
@@ -24,7 +23,6 @@ uint8_t pcb_blocknum = 0;
 // Deselect card by sending a s-block. the crc is precalced for speed\r
 static  uint8_t deselect_cmd[] = {0xc2,0xe0,0xb4};\r
 \r
-\r
 //-----------------------------------------------------------------------------\r
 // Select, Authenticate, Read a MIFARE tag. \r
 // read block\r
@@ -46,10 +44,10 @@ void MifareReadBlock(uint8_t arg0, uint8_t arg1, uint8_t arg2, uint8_t *datain)
        struct Crypto1State *pcs;\r
        pcs = &mpcs;\r
 \r
-       // clear trace\r
-       clear_trace();\r
        iso14443a_setup(FPGA_HF_ISO14443A_READER_LISTEN);\r
 \r
+       clear_trace();\r
+\r
        LED_A_ON();\r
        LED_B_OFF();\r
        LED_C_OFF();\r
@@ -97,9 +95,11 @@ void MifareUC_Auth(uint8_t arg0, uint8_t *keybytes){
        bool turnOffField = (arg0 == 1);\r
 \r
        LED_A_ON(); LED_B_OFF(); LED_C_OFF();\r
-       clear_trace();\r
+\r
        iso14443a_setup(FPGA_HF_ISO14443A_READER_LISTEN);\r
 \r
+       clear_trace();\r
+\r
        if(!iso14443a_select_card(NULL, NULL, NULL)) {\r
                if (MF_DBGLEVEL >= MF_DBG_ERROR) Dbprintf("Can't select card");\r
                OnError(0);\r
@@ -131,9 +131,10 @@ void MifareUReadBlock(uint8_t arg0, uint8_t arg1, uint8_t *datain)
 \r
        LEDsoff();\r
        LED_A_ON();\r
-       clear_trace();\r
        iso14443a_setup(FPGA_HF_ISO14443A_READER_LISTEN);\r
 \r
+       clear_trace();\r
+\r
        int len = iso14443a_select_card(NULL, NULL, NULL);\r
        if(!len) {\r
                if (MF_DBGLEVEL >= MF_DBG_ERROR) Dbprintf("Can't select card (RC:%02X)",len);\r
@@ -201,11 +202,10 @@ void MifareReadSector(uint8_t arg0, uint8_t arg1, uint8_t arg2, uint8_t *datain)
        struct Crypto1State *pcs;\r
        pcs = &mpcs;\r
 \r
-       // clear trace\r
-       clear_trace();\r
-\r
        iso14443a_setup(FPGA_HF_ISO14443A_READER_LISTEN);\r
 \r
+       clear_trace();\r
+\r
        LED_A_ON();\r
        LED_B_OFF();\r
        LED_C_OFF();\r
@@ -248,11 +248,18 @@ void MifareReadSector(uint8_t arg0, uint8_t arg1, uint8_t arg2, uint8_t *datain)
        LEDsoff();\r
 }\r
 \r
+// arg0 = blockNo (start)\r
+// arg1 = Pages (number of blocks)\r
+// arg2 = useKey\r
+// datain = KEY bytes\r
 void MifareUReadCard(uint8_t arg0, uint16_t arg1, uint8_t arg2, uint8_t *datain)\r
 {\r
+       LEDsoff();\r
+       LED_A_ON();\r
+       iso14443a_setup(FPGA_HF_ISO14443A_READER_LISTEN);\r
+\r
        // free eventually allocated BigBuf memory\r
        BigBuf_free();\r
-       // clear trace\r
        clear_trace();\r
 \r
        // params\r
@@ -268,10 +275,6 @@ void MifareUReadCard(uint8_t arg0, uint16_t arg1, uint8_t arg2, uint8_t *datain)
                return;\r
        }\r
 \r
-       LEDsoff();\r
-       LED_A_ON();\r
-       iso14443a_setup(FPGA_HF_ISO14443A_READER_LISTEN);\r
-\r
        int len = iso14443a_select_card(NULL, NULL, NULL);\r
        if (!len) {\r
                if (MF_DBGLEVEL >= MF_DBG_ERROR) Dbprintf("Can't select card (RC:%d)",len);\r
@@ -303,7 +306,7 @@ void MifareUReadCard(uint8_t arg0, uint16_t arg1, uint8_t arg2, uint8_t *datain)
        }\r
 \r
        for (int i = 0; i < blocks; i++){\r
-               if ((i*4) + 4 > CARD_MEMORY_SIZE) {\r
+               if ((i*4) + 4 >= CARD_MEMORY_SIZE) {\r
                        Dbprintf("Data exceeds buffer!!");\r
                        break;\r
                }\r
@@ -335,9 +338,11 @@ void MifareUReadCard(uint8_t arg0, uint16_t arg1, uint8_t arg2, uint8_t *datain)
        if (MF_DBGLEVEL >= MF_DBG_EXTENDED) Dbprintf("Blocks read %d", countblocks);\r
 \r
        countblocks *= 4;\r
+\r
        cmd_send(CMD_ACK, 1, countblocks, BigBuf_max_traceLen(), 0, 0);\r
        FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF);\r
        LEDsoff();\r
+       BigBuf_free();\r
 }\r
 \r
 //-----------------------------------------------------------------------------\r
@@ -363,11 +368,10 @@ void MifareWriteBlock(uint8_t arg0, uint8_t arg1, uint8_t arg2, uint8_t *datain)
        struct Crypto1State *pcs;\r
        pcs = &mpcs;\r
 \r
-       // clear trace\r
-       clear_trace();\r
-\r
        iso14443a_setup(FPGA_HF_ISO14443A_READER_LISTEN);\r
 \r
+       clear_trace();\r
+\r
        LED_A_ON();\r
        LED_B_OFF();\r
        LED_C_OFF();\r
@@ -412,7 +416,8 @@ void MifareWriteBlock(uint8_t arg0, uint8_t arg1, uint8_t arg2, uint8_t *datain)
        LEDsoff();\r
 }\r
 \r
-void MifareUWriteBlock(uint8_t arg0, uint8_t *datain)\r
+/* // Command not needed but left for future testing \r
+void MifareUWriteBlockCompat(uint8_t arg0, uint8_t *datain)\r
 {\r
        uint8_t blockNo = arg0;\r
        byte_t blockdata[16] = {0x00};\r
@@ -432,7 +437,7 @@ void MifareUWriteBlock(uint8_t arg0, uint8_t *datain)
                return;\r
        };\r
 \r
-       if(mifare_ultra_writeblock(blockNo, blockdata)) {\r
+       if(mifare_ultra_writeblock_compat(blockNo, blockdata)) {\r
                if (MF_DBGLEVEL >= 1)   Dbprintf("Write block error");\r
                OnError(0);\r
                return; };\r
@@ -449,26 +454,58 @@ void MifareUWriteBlock(uint8_t arg0, uint8_t *datain)
        FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF);\r
        LEDsoff();\r
 }\r
-\r
-void MifareUWriteBlock_Special(uint8_t arg0, uint8_t *datain)\r
+*/\r
+\r
+// Arg0   : Block to write to.\r
+// Arg1   : 0 = use no authentication.\r
+//          1 = use 0x1A authentication.\r
+//          2 = use 0x1B authentication.\r
+// datain : 4 first bytes is data to be written.\r
+//        : 4/16 next bytes is authentication key.\r
+void MifareUWriteBlock(uint8_t arg0, uint8_t arg1, uint8_t *datain)\r
 {\r
        uint8_t blockNo = arg0;\r
+       bool useKey = (arg1 == 1); //UL_C\r
+       bool usePwd = (arg1 == 2); //UL_EV1/NTAG\r
        byte_t blockdata[4] = {0x00};\r
 \r
        memcpy(blockdata, datain,4);\r
        \r
        LEDsoff();\r
        LED_A_ON();\r
-       clear_trace();\r
        iso14443a_setup(FPGA_HF_ISO14443A_READER_LISTEN);\r
 \r
+       clear_trace();\r
+\r
        if(!iso14443a_select_card(NULL, NULL, NULL)) {\r
                if (MF_DBGLEVEL >= 1) Dbprintf("Can't select card");\r
                OnError(0);\r
                return;\r
        };\r
 \r
-       if(mifare_ultra_special_writeblock(blockNo, blockdata)) {\r
+       // UL-C authentication\r
+       if ( useKey ) {\r
+               uint8_t key[16] = {0x00};\r
+               memcpy(key, datain+4, sizeof(key) );\r
+\r
+               if ( !mifare_ultra_auth(key) ) {\r
+                       OnError(1);\r
+                       return;\r
+               }\r
+       }\r
+       \r
+       // UL-EV1 / NTAG authentication\r
+       if (usePwd) {\r
+               uint8_t pwd[4] = {0x00};\r
+               memcpy(pwd, datain+4, 4);\r
+               uint8_t pack[4] = {0,0,0,0};\r
+               if (!mifare_ul_ev1_auth(pwd, pack)) {\r
+                       OnError(1);\r
+                       return;\r
+               }\r
+       }\r
+\r
+       if(mifare_ultra_writeblock(blockNo, blockdata)) {\r
                if (MF_DBGLEVEL >= 1) Dbprintf("Write block error");\r
                OnError(0);\r
                return;\r
@@ -495,9 +532,10 @@ void MifareUSetPwd(uint8_t arg0, uint8_t *datain){
        memcpy(pwd, datain, 16);\r
        \r
        LED_A_ON(); LED_B_OFF(); LED_C_OFF();\r
-       clear_trace();\r
        iso14443a_setup(FPGA_HF_ISO14443A_READER_LISTEN);\r
 \r
+       clear_trace();\r
+\r
        if(!iso14443a_select_card(NULL, NULL, NULL)) {\r
                if (MF_DBGLEVEL >= 1) Dbprintf("Can't select card");\r
                OnError(0);\r
@@ -508,7 +546,7 @@ void MifareUSetPwd(uint8_t arg0, uint8_t *datain){
        blockdata[1] = pwd[6];\r
        blockdata[2] = pwd[5];\r
        blockdata[3] = pwd[4];\r
-       if(mifare_ultra_special_writeblock( 44, blockdata)) {\r
+       if(mifare_ultra_writeblock( 44, blockdata)) {\r
                if (MF_DBGLEVEL >= 1) Dbprintf("Write block error");\r
                OnError(44);\r
                return;\r
@@ -518,7 +556,7 @@ void MifareUSetPwd(uint8_t arg0, uint8_t *datain){
        blockdata[1] = pwd[2];\r
        blockdata[2] = pwd[1];\r
        blockdata[3] = pwd[0];\r
-       if(mifare_ultra_special_writeblock( 45, blockdata)) {\r
+       if(mifare_ultra_writeblock( 45, blockdata)) {\r
                if (MF_DBGLEVEL >= 1) Dbprintf("Write block error");\r
                OnError(45);\r
                return;\r
@@ -528,7 +566,7 @@ void MifareUSetPwd(uint8_t arg0, uint8_t *datain){
        blockdata[1] = pwd[14];\r
        blockdata[2] = pwd[13];\r
        blockdata[3] = pwd[12];\r
-       if(mifare_ultra_special_writeblock( 46, blockdata)) {\r
+       if(mifare_ultra_writeblock( 46, blockdata)) {\r
                if (MF_DBGLEVEL >= 1) Dbprintf("Write block error");\r
                OnError(46);\r
                return;\r
@@ -538,7 +576,7 @@ void MifareUSetPwd(uint8_t arg0, uint8_t *datain){
        blockdata[1] = pwd[10];\r
        blockdata[2] = pwd[9];\r
        blockdata[3] = pwd[8];\r
-       if(mifare_ultra_special_writeblock( 47, blockdata)) {\r
+       if(mifare_ultra_writeblock( 47, blockdata)) {\r
                if (MF_DBGLEVEL >= 1) Dbprintf("Write block error");\r
                OnError(47);\r
                return;\r
@@ -597,19 +635,20 @@ void MifareNested(uint32_t arg0, uint32_t arg1, uint32_t calibrate, uint8_t *dat
        uint32_t auth1_time, auth2_time;\r
        static uint16_t delta_time;\r
 \r
-       // free eventually allocated BigBuf memory\r
-       BigBuf_free();\r
-       // clear trace\r
-       clear_trace();\r
-       set_tracing(false);\r
-       \r
-       iso14443a_setup(FPGA_HF_ISO14443A_READER_LISTEN);\r
-\r
        LED_A_ON();\r
        LED_C_OFF();\r
+       iso14443a_setup(FPGA_HF_ISO14443A_READER_LISTEN);\r
 \r
+       // free eventually allocated BigBuf memory\r
+       BigBuf_free();\r
 \r
+       if (calibrate) clear_trace();\r
+       set_tracing(true);\r
+       \r
        // statistics on nonce distance\r
+       int16_t isOK = 0;\r
+       #define NESTED_MAX_TRIES 12\r
+       uint16_t unsuccessfull_tries = 0;\r
        if (calibrate) {        // for first call only. Otherwise reuse previous calibration\r
                LED_B_ON();\r
                WDT_HIT();\r
@@ -620,6 +659,12 @@ void MifareNested(uint32_t arg0, uint32_t arg1, uint32_t calibrate, uint8_t *dat
                \r
                for (rtr = 0; rtr < 17; rtr++) {\r
 \r
+                       // Test if the action was cancelled\r
+                       if(BUTTON_PRESS()) {\r
+                               isOK = -2;\r
+                               break;\r
+                       }\r
+\r
                        // prepare next select. No need to power down the card.\r
                        if(mifare_classic_halt(pcs, cuid)) {\r
                                if (MF_DBGLEVEL >= 1)   Dbprintf("Nested: Halt error");\r
@@ -667,14 +712,17 @@ void MifareNested(uint32_t arg0, uint32_t arg1, uint32_t calibrate, uint8_t *dat
                                        delta_time = auth2_time - auth1_time + 32;  // allow some slack for proper timing\r
                                }\r
                                if (MF_DBGLEVEL >= 3) Dbprintf("Nested: calibrating... ntdist=%d", i);\r
+                       } else {\r
+                               unsuccessfull_tries++;\r
+                               if (unsuccessfull_tries > NESTED_MAX_TRIES) {   // card isn't vulnerable to nested attack (random numbers are not predictable)\r
+                                       isOK = -3;\r
+                               }\r
                        }\r
                }\r
-               \r
-               if (rtr <= 1)   return;\r
 \r
                davg = (davg + (rtr - 1)/2) / (rtr - 1);\r
                \r
-               if (MF_DBGLEVEL >= 3) Dbprintf("min=%d max=%d avg=%d, delta_time=%d", dmin, dmax, davg, delta_time);\r
+               if (MF_DBGLEVEL >= 3) Dbprintf("rtr=%d isOK=%d min=%d max=%d avg=%d, delta_time=%d", rtr, isOK, dmin, dmax, davg, delta_time);\r
 \r
                dmin = davg - 2;\r
                dmax = davg + 2;\r
@@ -682,12 +730,12 @@ void MifareNested(uint32_t arg0, uint32_t arg1, uint32_t calibrate, uint8_t *dat
                LED_B_OFF();\r
        \r
        }\r
-//  -------------------------------------------------------------------------------------------------  \r
+       //  -------------------------------------------------------------------------------------------------   \r
        \r
        LED_C_ON();\r
 \r
        //  get crypted nonces for target sector\r
-       for(i=0; i < 2; i++) { // look for exactly two different nonces\r
+       for(i=0; i < 2 && !isOK; i++) { // look for exactly two different nonces\r
 \r
                target_nt[i] = 0;\r
                while(target_nt[i] == 0) { // continue until we have an unambiguous nonce\r
@@ -711,7 +759,7 @@ void MifareNested(uint32_t arg0, uint32_t arg1, uint32_t calibrate, uint8_t *dat
 \r
                        // nested authentication\r
                        auth2_time = auth1_time + delta_time;\r
-                       len = mifare_sendcmd_shortex(pcs, AUTH_NESTED, 0x60 + (targetKeyType & 0x01), targetBlockNo, receivedAnswer, par, &auth2_time);\r
+                       len = mifare_sendcmd_short(pcs, AUTH_NESTED, 0x60 + (targetKeyType & 0x01), targetBlockNo, receivedAnswer, par, &auth2_time);\r
                        if (len != 4) {\r
                                if (MF_DBGLEVEL >= 1)   Dbprintf("Nested: Auth2 error len=%d", len);\r
                                continue;\r
@@ -765,25 +813,25 @@ void MifareNested(uint32_t arg0, uint32_t arg1, uint32_t calibrate, uint8_t *dat
        memcpy(buf+16, &target_ks[1], 4);\r
        \r
        LED_B_ON();\r
-       cmd_send(CMD_ACK, 0, 2, targetBlockNo + (targetKeyType * 0x100), buf, sizeof(buf));\r
+       cmd_send(CMD_ACK, isOK, 0, targetBlockNo + (targetKeyType * 0x100), buf, sizeof(buf));\r
        LED_B_OFF();\r
 \r
        if (MF_DBGLEVEL >= 3)   DbpString("NESTED FINISHED");\r
 \r
        FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF);\r
        LEDsoff();\r
-       set_tracing(TRUE);\r
 }\r
 \r
 //-----------------------------------------------------------------------------\r
 // MIFARE check keys. key count up to 85. \r
 // \r
 //-----------------------------------------------------------------------------\r
-void MifareChkKeys(uint8_t arg0, uint8_t arg1, uint8_t arg2, uint8_t *datain)\r
+void MifareChkKeys(uint16_t arg0, uint8_t arg1, uint8_t arg2, uint8_t *datain)\r
 {\r
   // params\r
-       uint8_t blockNo = arg0;\r
-       uint8_t keyType = arg1;\r
+       uint8_t blockNo = arg0 & 0xff;\r
+       uint8_t keyType = (arg0 >> 8) & 0xff;\r
+       bool clearTrace = arg1;\r
        uint8_t keyCount = arg2;\r
        uint64_t ui64Key = 0;\r
        \r
@@ -800,15 +848,13 @@ void MifareChkKeys(uint8_t arg0, uint8_t arg1, uint8_t arg2, uint8_t *datain)
        int OLD_MF_DBGLEVEL = MF_DBGLEVEL;      \r
        MF_DBGLEVEL = MF_DBG_NONE;\r
        \r
-       // clear trace\r
-       clear_trace();\r
-       set_tracing(TRUE);\r
-\r
-       iso14443a_setup(FPGA_HF_ISO14443A_READER_LISTEN);\r
-\r
        LED_A_ON();\r
        LED_B_OFF();\r
        LED_C_OFF();\r
+       iso14443a_setup(FPGA_HF_ISO14443A_READER_LISTEN);\r
+\r
+       if (clearTrace) clear_trace();\r
+       set_tracing(TRUE);\r
 \r
        for (i = 0; i < keyCount; i++) {\r
                if(mifare_classic_halt(pcs, cuid)) {\r
@@ -855,16 +901,23 @@ void MifareSetDbgLvl(uint32_t arg0, uint32_t arg1, uint32_t arg2, uint8_t *datai
 //-----------------------------------------------------------------------------\r
 // Work with emulator memory\r
 // \r
+// Note: we call FpgaDownloadAndGo(FPGA_BITSTREAM_HF) here although FPGA is not\r
+// involved in dealing with emulator memory. But if it is called later, it might\r
+// destroy the Emulator Memory.\r
 //-----------------------------------------------------------------------------\r
+\r
 void MifareEMemClr(uint32_t arg0, uint32_t arg1, uint32_t arg2, uint8_t *datain){\r
+       FpgaDownloadAndGo(FPGA_BITSTREAM_HF);\r
        emlClearMem();\r
 }\r
 \r
 void MifareEMemSet(uint32_t arg0, uint32_t arg1, uint32_t arg2, uint8_t *datain){\r
+       FpgaDownloadAndGo(FPGA_BITSTREAM_HF);\r
        emlSetMem(datain, arg0, arg1); // data, block num, blocks count\r
 }\r
 \r
 void MifareEMemGet(uint32_t arg0, uint32_t arg1, uint32_t arg2, uint8_t *datain){\r
+       FpgaDownloadAndGo(FPGA_BITSTREAM_HF);\r
        byte_t buf[USB_CMD_DATA_SIZE];\r
        emlGetMem(buf, arg0, arg1); // data, block num, blocks count (max 4)\r
 \r
@@ -891,15 +944,13 @@ void MifareECardLoad(uint32_t arg0, uint32_t arg1, uint32_t arg2, uint8_t *datai
        byte_t dataoutbuf2[16];\r
        uint8_t uid[10];\r
 \r
-       // clear trace\r
-       clear_trace();\r
-       set_tracing(false);\r
-       \r
-       iso14443a_setup(FPGA_HF_ISO14443A_READER_LISTEN);\r
-\r
        LED_A_ON();\r
        LED_B_OFF();\r
        LED_C_OFF();\r
+       iso14443a_setup(FPGA_HF_ISO14443A_READER_LISTEN);\r
+       \r
+       clear_trace();\r
+       set_tracing(false);\r
        \r
        bool isOK = true;\r
 \r
@@ -993,10 +1044,10 @@ void MifareCSetBlock(uint32_t arg0, uint32_t arg1, uint32_t arg2, uint8_t *datai
                LED_A_ON();\r
                LED_B_OFF();\r
                LED_C_OFF();\r
+               iso14443a_setup(FPGA_HF_ISO14443A_READER_LISTEN);\r
        \r
                clear_trace();\r
                set_tracing(TRUE);\r
-               iso14443a_setup(FPGA_HF_ISO14443A_READER_LISTEN);\r
        }\r
 \r
        while (true) {\r
@@ -1092,6 +1143,7 @@ void MifareCGetBlock(uint32_t arg0, uint32_t arg1, uint32_t arg2, uint8_t *datai
        // bit 2 - need HALT after sequence\r
        // bit 3 - need init FPGA and field before sequence\r
        // bit 4 - need reset FPGA and LED\r
+       // bit 5 - need to set datain instead of issuing USB reply (called via ARM for StandAloneMode14a)\r
        uint8_t workFlags = arg0;\r
        uint8_t blockNo = arg2;\r
        \r
@@ -1111,10 +1163,10 @@ void MifareCGetBlock(uint32_t arg0, uint32_t arg1, uint32_t arg2, uint8_t *datai
                LED_A_ON();\r
                LED_B_OFF();\r
                LED_C_OFF();\r
-       \r
+               iso14443a_setup(FPGA_HF_ISO14443A_READER_LISTEN);\r
+\r
                clear_trace();\r
                set_tracing(TRUE);\r
-               iso14443a_setup(FPGA_HF_ISO14443A_READER_LISTEN);\r
        }\r
 \r
        while (true) {\r
@@ -1151,7 +1203,12 @@ void MifareCGetBlock(uint32_t arg0, uint32_t arg1, uint32_t arg2, uint8_t *datai
        }\r
        \r
        LED_B_ON();\r
-       cmd_send(CMD_ACK,isOK,0,0,data,18);\r
+       if (workFlags & 0x20) {\r
+               if (isOK)\r
+                       memcpy(datain, data, 18);\r
+       }\r
+       else\r
+               cmd_send(CMD_ACK,isOK,0,0,data,18);\r
        LED_B_OFF();\r
 \r
        if ((workFlags & 0x10) || (!isOK)) {\r
@@ -1189,7 +1246,7 @@ void MifareCIdent(){
        cmd_send(CMD_ACK,isOK,0,0,0,0);\r
 }\r
 \r
-                       //\r
+//\r
 // DESFIRE\r
 //\r
 \r
@@ -1199,8 +1256,8 @@ void Mifare_DES_Auth1(uint8_t arg0, uint8_t *datain){
        uint8_t uid[10] = {0x00};\r
        uint32_t cuid;\r
     \r
-       clear_trace();\r
        iso14443a_setup(FPGA_HF_ISO14443A_READER_LISTEN);\r
+       clear_trace();\r
 \r
        int len = iso14443a_select_card(uid, NULL, &cuid);\r
        if(!len) {\r
@@ -1231,14 +1288,12 @@ void Mifare_DES_Auth2(uint32_t arg0, uint8_t *datain){
        isOK = mifare_desfire_des_auth2(cuid, key, dataout);\r
        \r
        if( isOK) {\r
-           if (MF_DBGLEVEL >= MF_DBG_EXTENDED) \r
-                       Dbprintf("Authentication part2: Failed");  \r
-               //OnError(4);\r
+               if (MF_DBGLEVEL >= MF_DBG_EXTENDED) Dbprintf("Authentication part2: Failed");  \r
+               OnError(4);\r
                return;\r
        }\r
 \r
-       if (MF_DBGLEVEL >= MF_DBG_EXTENDED) \r
-               DbpString("AUTH 2 FINISHED");\r
+       if (MF_DBGLEVEL >= MF_DBG_EXTENDED) DbpString("AUTH 2 FINISHED");\r
 \r
        cmd_send(CMD_ACK, isOK, 0, 0, dataout, sizeof(dataout));\r
        FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF);\r
index 2f84797b92e015384d8b2755410bd4c553431efd..8ef364c259f0d16216834a87dac9bef073be1e92 100644 (file)
@@ -65,74 +65,25 @@ uint8_t mf_crypto1_encrypt4bit(struct Crypto1State *pcs, uint8_t data) {
        return bt;\r
 }\r
 \r
-// send commands\r
-int mifare_sendcmd_short(struct Crypto1State *pcs, uint8_t crypted, uint8_t cmd, uint8_t data, uint8_t* answer, uint8_t *answer_parity, uint32_t *timing)\r
+// send X byte basic commands\r
+int mifare_sendcmd(uint8_t cmd, uint8_t* data, uint8_t data_size, uint8_t* answer, uint8_t *answer_parity, uint32_t *timing)\r
 {\r
-       return mifare_sendcmd_shortex(pcs, crypted, cmd, data, answer, answer_parity, timing);\r
-}\r
-\r
-int mifare_sendcmd_short_special(struct Crypto1State *pcs, uint8_t crypted, uint8_t cmd, uint8_t* data, uint8_t* answer, uint8_t *answer_parity, uint32_t *timing)\r
-{\r
-       uint8_t dcmd[8];\r
-    dcmd[0] = cmd;\r
-    dcmd[1] = data[0];\r
-       dcmd[2] = data[1];\r
-       dcmd[3] = data[2];\r
-       dcmd[4] = data[3];\r
-       dcmd[5] = data[4];\r
-       AppendCrc14443a(dcmd, 6);\r
-       ReaderTransmit(dcmd, sizeof(dcmd), NULL);\r
-       int len = ReaderReceive(answer, answer_parity);\r
-       if(!len) {\r
-                if (MF_DBGLEVEL >= 1)   Dbprintf("Authentication failed. Card timeout.");\r
-                return 2;\r
-    }\r
-       return len;\r
-}\r
-\r
-int mifare_sendcmd_short_mfucauth(struct Crypto1State *pcs, uint8_t crypted, uint8_t cmd, uint8_t *data, uint8_t *answer, uint8_t *answer_parity, uint32_t *timing)\r
-{\r
-    uint8_t dcmd[19];\r
-       int len; \r
-    dcmd[0] = cmd;\r
-    memcpy(dcmd+1,data,16);\r
-       AppendCrc14443a(dcmd, 17);\r
-       \r
-       ReaderTransmit(dcmd, sizeof(dcmd), timing);\r
-       len = ReaderReceive(answer, answer_parity);\r
-       if(!len) {\r
-        if (MF_DBGLEVEL >= MF_DBG_ERROR)   Dbprintf("Authentication failed. Card timeout.");\r
-        len = ReaderReceive(answer,answer_parity);\r
-    }\r
-    if(len==1) {\r
-               if (MF_DBGLEVEL >= MF_DBG_ERROR)   Dbprintf("NAK - Authentication failed.");\r
-               return 1;\r
-        }\r
-       return len;\r
-}\r
-\r
-int mifare_sendcmd_short_mfuev1auth(struct Crypto1State *pcs, uint8_t crypted, uint8_t cmd, uint8_t *data, uint8_t *answer, uint8_t *answer_parity, uint32_t *timing)\r
-{\r
-    uint8_t dcmd[7];\r
-       int len; \r
-    dcmd[0] = cmd;\r
-    memcpy(dcmd+1,data,4);\r
-       AppendCrc14443a(dcmd, 5);\r
-       \r
+       uint8_t dcmd[data_size+3];\r
+       dcmd[0] = cmd;\r
+       memcpy(dcmd+1,data,data_size);\r
+       AppendCrc14443a(dcmd, data_size+1);\r
        ReaderTransmit(dcmd, sizeof(dcmd), timing);\r
-       len = ReaderReceive(answer, answer_parity);\r
+       int len = ReaderReceive(answer, answer_parity);\r
        if(!len) {\r
-        if (MF_DBGLEVEL >= MF_DBG_ERROR)   Dbprintf("Authentication failed. Card timeout.");\r
-        len = ReaderReceive(answer,answer_parity);\r
-    }\r
-    if(len==1) {\r
-               if (MF_DBGLEVEL >= MF_DBG_ERROR)   Dbprintf("NAK - Authentication failed.");\r
-               return 1;\r
-        }\r
+               if (MF_DBGLEVEL >= MF_DBG_ERROR)   Dbprintf("%02X Cmd failed. Card timeout.", cmd);\r
+                       len = ReaderReceive(answer,answer_parity);\r
+               //return 0;\r
+       }\r
        return len;\r
 }\r
 \r
-int mifare_sendcmd_shortex(struct Crypto1State *pcs, uint8_t crypted, uint8_t cmd, uint8_t data, uint8_t *answer, uint8_t *answer_parity, uint32_t *timing)\r
+// send 2 byte commands\r
+int mifare_sendcmd_short(struct Crypto1State *pcs, uint8_t crypted, uint8_t cmd, uint8_t data, uint8_t *answer, uint8_t *answer_parity, uint32_t *timing)\r
 {\r
        uint8_t dcmd[4], ecmd[4];\r
        uint16_t pos, res;\r
@@ -318,8 +269,10 @@ int mifare_ul_ev1_auth(uint8_t *keybytes, uint8_t *pack){
        uint8_t key[4] = {0x00};\r
        memcpy(key, keybytes, 4);\r
 \r
-       Dbprintf("EV1 Auth : %02x%02x%02x%02x", key[0], key[1], key[2], key[3]);\r
-       len = mifare_sendcmd_short_mfuev1auth(NULL, 0, 0x1B, key, resp, respPar, NULL);\r
+       if (MF_DBGLEVEL >= MF_DBG_EXTENDED)\r
+               Dbprintf("EV1 Auth : %02x%02x%02x%02x", key[0], key[1], key[2], key[3]);\r
+       len = mifare_sendcmd(0x1B, key, sizeof(key), resp, respPar, NULL);\r
+       //len = mifare_sendcmd_short_mfuev1auth(NULL, 0, 0x1B, key, resp, respPar, NULL);\r
        if (len != 4) {\r
                if (MF_DBGLEVEL >= MF_DBG_ERROR) Dbprintf("Cmd Error: %02x %u", resp[0], len);\r
                return 0;\r
@@ -380,8 +333,8 @@ int mifare_ultra_auth(uint8_t *keybytes){
 \r
        // encrypt    out, in, length, key, iv\r
        tdes_2key_enc(rnd_ab, rnd_ab, sizeof(rnd_ab), key, enc_random_b);\r
-\r
-       len = mifare_sendcmd_short_mfucauth(NULL, 1, 0xAF, rnd_ab, resp, respPar, NULL);\r
+       //len = mifare_sendcmd_short_mfucauth(NULL, 1, 0xAF, rnd_ab, resp, respPar, NULL);\r
+       len = mifare_sendcmd(0xAF, rnd_ab, sizeof(rnd_ab), resp, respPar, NULL);\r
        if (len != 11) {\r
                if (MF_DBGLEVEL >= MF_DBG_ERROR) Dbprintf("Cmd Error: %02x", resp[0]);\r
                return 0;\r
@@ -425,6 +378,7 @@ int mifare_ultra_readblock(uint8_t blockNo, uint8_t *blockData)
        uint8_t receivedAnswer[MAX_FRAME_SIZE];\r
        uint8_t receivedAnswerPar[MAX_PARITY_SIZE];\r
        \r
+\r
        len = mifare_sendcmd_short(NULL, 1, 0x30, blockNo, receivedAnswer, receivedAnswerPar, NULL);\r
        if (len == 1) {\r
                if (MF_DBGLEVEL >= MF_DBG_ERROR) Dbprintf("Cmd Error: %02x", receivedAnswer[0]);\r
@@ -493,7 +447,8 @@ int mifare_classic_writeblock(struct Crypto1State *pcs, uint32_t uid, uint8_t bl
        return 0;\r
 }\r
 \r
-int mifare_ultra_writeblock(uint8_t blockNo, uint8_t *blockData) \r
+/* // command not needed, but left for future testing\r
+int mifare_ultra_writeblock_compat(uint8_t blockNo, uint8_t *blockData) \r
 {\r
        uint16_t len;\r
        uint8_t par[3] = {0};  // enough for 18 parity bits\r
@@ -501,7 +456,6 @@ int mifare_ultra_writeblock(uint8_t blockNo, uint8_t *blockData)
        uint8_t receivedAnswer[MAX_FRAME_SIZE];\r
        uint8_t receivedAnswerPar[MAX_PARITY_SIZE];\r
 \r
-       // command MIFARE_CLASSIC_WRITEBLOCK\r
        len = mifare_sendcmd_short(NULL, true, 0xA0, blockNo, receivedAnswer, receivedAnswerPar, NULL);\r
 \r
        if ((len != 1) || (receivedAnswer[0] != 0x0A)) {   //  0x0a - ACK\r
@@ -524,20 +478,21 @@ int mifare_ultra_writeblock(uint8_t blockNo, uint8_t *blockData)
        }\r
        return 0;\r
 }\r
+*/\r
 \r
-int mifare_ultra_special_writeblock(uint8_t blockNo, uint8_t *blockData)\r
+int mifare_ultra_writeblock(uint8_t blockNo, uint8_t *blockData)\r
 {\r
        uint16_t len;\r
-       uint8_t d_block[8] = {0x00};\r
+       uint8_t d_block[5] = {0x00};\r
        uint8_t receivedAnswer[MAX_MIFARE_FRAME_SIZE];\r
        uint8_t receivedAnswerPar[MAX_MIFARE_PARITY_SIZE];\r
 \r
        // command MIFARE_CLASSIC_WRITEBLOCK\r
        d_block[0]= blockNo;\r
        memcpy(d_block+1,blockData,4);\r
-       AppendCrc14443a(d_block, 6);\r
+       //AppendCrc14443a(d_block, 6);\r
 \r
-       len = mifare_sendcmd_short_special(NULL, 1, 0xA2, d_block, receivedAnswer, receivedAnswerPar, NULL);\r
+       len = mifare_sendcmd(0xA2, d_block, sizeof(d_block), receivedAnswer, receivedAnswerPar, NULL);\r
 \r
        if (receivedAnswer[0] != 0x0A) {   //  0x0a - ACK\r
                if (MF_DBGLEVEL >= MF_DBG_ERROR)\r
index d4fcd818932e4cf66299edd53044e00f9432fb2f..7a09ce64cdac33707a13abdef1de3294d778cd58 100644 (file)
@@ -8,6 +8,7 @@
 //-----------------------------------------------------------------------------\r
 // code for work with mifare cards.\r
 //-----------------------------------------------------------------------------\r
+#include "crapto1.h"\r
 \r
 #ifndef __MIFAREUTIL_H\r
 #define __MIFAREUTIL_H\r
@@ -53,23 +54,22 @@ extern int MF_DBGLEVEL;
 #define cardSTATE_TO_IDLE() cardSTATE = MFEMUL_IDLE; LED_B_OFF(); LED_C_OFF();\r
 \r
 //functions\r
+int mifare_sendcmd(uint8_t cmd, uint8_t *data, uint8_t data_size, uint8_t* answer, uint8_t *answer_parity, uint32_t *timing);\r
 int mifare_sendcmd_short(struct Crypto1State *pcs, uint8_t crypted, uint8_t cmd, uint8_t data, uint8_t* answer, uint8_t *answer_parity, uint32_t *timing);\r
-int mifare_sendcmd_short_special(struct Crypto1State *pcs, uint8_t crypted, uint8_t cmd, uint8_t *data, uint8_t* answer, uint8_t *answer_parity, uint32_t *timing);\r
-\r
-int mifare_sendcmd_short_mfucauth(struct Crypto1State *pcs, uint8_t crypted, uint8_t cmd, uint8_t *data, uint8_t *answer, uint8_t *answer_parity, uint32_t *timing);\r
-int mifare_sendcmd_short_mfuev1auth(struct Crypto1State *pcs, uint8_t crypted, uint8_t cmd, uint8_t *data, uint8_t *answer, uint8_t *answer_parity, uint32_t *timing);\r
-int mifare_sendcmd_shortex(struct Crypto1State *pcs, uint8_t crypted, uint8_t cmd, uint8_t data, uint8_t* answer, uint8_t *answer_parity, uint32_t *timing);\r
 \r
+// mifare classic\r
 int mifare_classic_auth(struct Crypto1State *pcs, uint32_t uid, uint8_t blockNo, uint8_t keyType, uint64_t ui64Key, uint8_t isNested);\r
 int mifare_classic_authex(struct Crypto1State *pcs, uint32_t uid, uint8_t blockNo, uint8_t keyType, uint64_t ui64Key, uint8_t isNested, uint32_t * ntptr, uint32_t *timing);\r
 int mifare_classic_readblock(struct Crypto1State *pcs, uint32_t uid, uint8_t blockNo, uint8_t *blockData);\r
+int mifare_classic_halt(struct Crypto1State *pcs, uint32_t uid); \r
+int mifare_classic_writeblock(struct Crypto1State *pcs, uint32_t uid, uint8_t blockNo, uint8_t *blockData);\r
+\r
+// Ultralight/NTAG...\r
 int mifare_ul_ev1_auth(uint8_t *key, uint8_t *pack);\r
 int mifare_ultra_auth(uint8_t *key);\r
 int mifare_ultra_readblock(uint8_t blockNo, uint8_t *blockData);\r
-int mifare_classic_writeblock(struct Crypto1State *pcs, uint32_t uid, uint8_t blockNo, uint8_t *blockData);\r
+//int mifare_ultra_writeblock_compat(uint8_t blockNo, uint8_t *blockData);\r
 int mifare_ultra_writeblock(uint8_t blockNo, uint8_t *blockData);\r
-int mifare_ultra_special_writeblock(uint8_t blockNo, uint8_t *blockData);\r
-int mifare_classic_halt(struct Crypto1State *pcs, uint32_t uid); \r
 int mifare_ultra_halt();\r
 \r
 // desfire\r
index 444b93d09f688db68b71d152745c3a92f84c6b43..bfaf5088fa4ae7cba28e2cc58a489c81b16c3180 100644 (file)
 **/
 
 #include "optimized_cipher.h"
-#include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
 #include <stdbool.h>
 #include <stdint.h>
-#include <time.h>
 
 
 #define opt_T(s) (0x1 & ((s->t >> 15) ^ (s->t >> 14)^ (s->t >> 10)^ (s->t >> 8)^ (s->t >> 5)^ (s->t >> 4)^ (s->t >> 1)^ s->t))
diff --git a/armsrc/pcf7931.c b/armsrc/pcf7931.c
new file mode 100644 (file)
index 0000000..165319c
--- /dev/null
@@ -0,0 +1,528 @@
+#include "proxmark3.h"
+#include "apps.h"
+#include "lfsampling.h"
+#include "pcf7931.h"
+#include "string.h"
+
+#define T0_PCF 8 //period for the pcf7931 in us
+#define ALLOC 16
+
+#define abs(x) ( ((x)<0) ? -(x) : (x) )
+#define max(x,y) ( x<y ? y:x)
+
+int DemodPCF7931(uint8_t **outBlocks) {
+
+    uint8_t bits[256] = {0x00};
+       uint8_t blocks[8][16];
+    uint8_t *dest = BigBuf_get_addr();
+    
+       int GraphTraceLen = BigBuf_max_traceLen();
+       if (  GraphTraceLen > 18000 )
+               GraphTraceLen = 18000;
+       
+       
+       int i, j, lastval, bitidx, half_switch;
+       int clock = 64;
+       int tolerance = clock / 8;
+       int pmc, block_done;
+       int lc, warnings = 0;
+       int num_blocks = 0;
+       int lmin=128, lmax=128;
+       uint8_t dir;
+       //clear read buffer
+       BigBuf_Clear_keep_EM();
+
+       LFSetupFPGAForADC(95, true);
+       DoAcquisition_default(0, true);
+
+       lmin = 64;
+       lmax = 192;
+
+       i = 2;
+
+       /* Find first local max/min */
+    if(dest[1] > dest[0]) {
+               while(i < GraphTraceLen) {
+            if( !(dest[i] > dest[i-1]) && dest[i] > lmax)
+                               break;
+                       i++;
+               }
+               dir = 0;
+       }
+       else {
+               while(i < GraphTraceLen) {
+            if( !(dest[i] < dest[i-1]) && dest[i] < lmin)
+                               break;
+                       i++;
+               }
+               dir = 1;
+       }
+
+       lastval = i++;
+       half_switch = 0;
+       pmc = 0;
+       block_done = 0;
+
+       for (bitidx = 0; i < GraphTraceLen; i++)
+       {
+        if ( (dest[i-1] > dest[i] && dir == 1 && dest[i] > lmax) || (dest[i-1] < dest[i] && dir == 0 && dest[i] < lmin))
+               {
+                       lc = i - lastval;
+                       lastval = i;
+
+                       // Switch depending on lc length:
+                       // Tolerance is 1/8 of clock rate (arbitrary)
+                       if (abs(lc-clock/4) < tolerance) {
+                               // 16T0
+                               if((i - pmc) == lc) { /* 16T0 was previous one */
+                                       /* It's a PMC ! */
+                                       i += (128+127+16+32+33+16)-1;
+                                       lastval = i;
+                                       pmc = 0;
+                                       block_done = 1;
+                               }
+                               else {
+                                       pmc = i;
+                               }
+                       } else if (abs(lc-clock/2) < tolerance) {
+                               // 32TO
+                               if((i - pmc) == lc) { /* 16T0 was previous one */
+                                       /* It's a PMC ! */
+                                       i += (128+127+16+32+33)-1;
+                                       lastval = i;
+                                       pmc = 0;
+                                       block_done = 1;
+                               }
+                               else if(half_switch == 1) {
+                    bits[bitidx++] = 0;
+                                       half_switch = 0;
+                               }
+                               else
+                                       half_switch++;
+                       } else if (abs(lc-clock) < tolerance) {
+                               // 64TO
+                bits[bitidx++] = 1;
+                       } else {
+                               // Error
+                               warnings++;
+                               if (warnings > 10)
+                               {
+                                       Dbprintf("Error: too many detection errors, aborting.");
+                                       return 0;
+                               }
+                       }
+
+                       if(block_done == 1) {
+                               if(bitidx == 128) {
+                                       for(j=0; j<16; j++) {
+                        blocks[num_blocks][j] = 128*bits[j*8+7]+
+                                64*bits[j*8+6]+
+                                32*bits[j*8+5]+
+                                16*bits[j*8+4]+
+                                8*bits[j*8+3]+
+                                4*bits[j*8+2]+
+                                2*bits[j*8+1]+
+                                bits[j*8];
+                                               
+                                       }
+                                       num_blocks++;
+                               }
+                               bitidx = 0;
+                               block_done = 0;
+                               half_switch = 0;
+                       }
+                       if(i < GraphTraceLen)
+                dir =(dest[i-1] > dest[i]) ? 0 : 1;
+               }
+               if(bitidx==255)
+                       bitidx=0;
+               warnings = 0;
+               if(num_blocks == 4) break;
+       }
+    memcpy(outBlocks, blocks, 16*num_blocks);
+       return num_blocks;
+}
+
+int IsBlock0PCF7931(uint8_t *Block) {
+       // Assume RFU means 0 :)
+       if((memcmp(Block, "\x00\x00\x00\x00\x00\x00\x00\x01", 8) == 0) && memcmp(Block+9, "\x00\x00\x00\x00\x00\x00\x00", 7) == 0) // PAC enabled
+               return 1;
+       if((memcmp(Block+9, "\x00\x00\x00\x00\x00\x00\x00", 7) == 0) && Block[7] == 0) // PAC disabled, can it *really* happen ?
+               return 1;
+       return 0;
+}
+
+int IsBlock1PCF7931(uint8_t *Block) {
+       // Assume RFU means 0 :)
+       if(Block[10] == 0 && Block[11] == 0 && Block[12] == 0 && Block[13] == 0)
+               if((Block[14] & 0x7f) <= 9 && Block[15] <= 9)
+                       return 1;
+
+       return 0;
+}
+
+void ReadPCF7931() {
+       uint8_t Blocks[8][17];
+       uint8_t tmpBlocks[4][16];
+       int i, j, ind, ind2, n;
+       int num_blocks = 0;
+       int max_blocks = 8;
+       int ident = 0;
+       int error = 0;
+       int tries = 0;
+
+       memset(Blocks, 0, 8*17*sizeof(uint8_t));
+
+       do {
+               memset(tmpBlocks, 0, 4*16*sizeof(uint8_t));
+               n = DemodPCF7931((uint8_t**)tmpBlocks);
+               if(!n)
+                       error++;
+               if(error==10 && num_blocks == 0) {
+                       Dbprintf("Error, no tag or bad tag");
+                       return;
+               }
+               else if (tries==20 || error==10) {
+                       Dbprintf("Error reading the tag");
+                       Dbprintf("Here is the partial content");
+                       goto end;
+               }
+
+               for(i=0; i<n; i++)
+                       Dbprintf("(dbg) %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x",
+                                        tmpBlocks[i][0], tmpBlocks[i][1], tmpBlocks[i][2], tmpBlocks[i][3], tmpBlocks[i][4], tmpBlocks[i][5], tmpBlocks[i][6], tmpBlocks[i][7],
+                                       tmpBlocks[i][8], tmpBlocks[i][9], tmpBlocks[i][10], tmpBlocks[i][11], tmpBlocks[i][12], tmpBlocks[i][13], tmpBlocks[i][14], tmpBlocks[i][15]);
+               if(!ident) {
+                       for(i=0; i<n; i++) {
+                               if(IsBlock0PCF7931(tmpBlocks[i])) {
+                                       // Found block 0 ?
+                                       if(i < n-1 && IsBlock1PCF7931(tmpBlocks[i+1])) {
+                                               // Found block 1!
+                                               // \o/
+                                               ident = 1;
+                                               memcpy(Blocks[0], tmpBlocks[i], 16);
+                                               Blocks[0][ALLOC] = 1;
+                                               memcpy(Blocks[1], tmpBlocks[i+1], 16);
+                                               Blocks[1][ALLOC] = 1;
+                                               max_blocks = max((Blocks[1][14] & 0x7f), Blocks[1][15]) + 1;
+                                               // Debug print
+                                               Dbprintf("(dbg) Max blocks: %d", max_blocks);
+                                               num_blocks = 2;
+                                               // Handle following blocks
+                                               for(j=i+2, ind2=2; j!=i; j++, ind2++, num_blocks++) {
+                                                       if(j==n) j=0;
+                                                       if(j==i) break;
+                                                       memcpy(Blocks[ind2], tmpBlocks[j], 16);
+                                                       Blocks[ind2][ALLOC] = 1;
+                                               }
+                                               break;
+                                       }
+                               }
+                       }
+               }
+               else {
+                       for(i=0; i<n; i++) { // Look for identical block in known blocks
+                               if(memcmp(tmpBlocks[i], "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", 16)) { // Block is not full of 00
+                                       for(j=0; j<max_blocks; j++) {
+                                               if(Blocks[j][ALLOC] == 1 && !memcmp(tmpBlocks[i], Blocks[j], 16)) {
+                                                       // Found an identical block
+                                                       for(ind=i-1,ind2=j-1; ind >= 0; ind--,ind2--) {
+                                                               if(ind2 < 0)
+                                                                       ind2 = max_blocks;
+                                                               if(!Blocks[ind2][ALLOC]) { // Block ind2 not already found
+                                                                       // Dbprintf("Tmp %d -> Block %d", ind, ind2);
+                                                                       memcpy(Blocks[ind2], tmpBlocks[ind], 16);
+                                                                       Blocks[ind2][ALLOC] = 1;
+                                                                       num_blocks++;
+                                                                       if(num_blocks == max_blocks) goto end;
+                                                               }
+                                                       }
+                                                       for(ind=i+1,ind2=j+1; ind < n; ind++,ind2++) {
+                                                               if(ind2 > max_blocks)
+                                                                       ind2 = 0;
+                                                               if(!Blocks[ind2][ALLOC]) { // Block ind2 not already found
+                                                                       // Dbprintf("Tmp %d -> Block %d", ind, ind2);
+                                                                       memcpy(Blocks[ind2], tmpBlocks[ind], 16);
+                                                                       Blocks[ind2][ALLOC] = 1;
+                                                                       num_blocks++;
+                                                                       if(num_blocks == max_blocks) goto end;
+                                                               }
+                                                       }
+                                               }
+                                       }
+                               }
+                       }
+               }
+               tries++;
+               if (BUTTON_PRESS()) return;
+       } while (num_blocks != max_blocks);
+ end:
+       Dbprintf("-----------------------------------------");
+       Dbprintf("Memory content:");
+       Dbprintf("-----------------------------------------");
+       for(i=0; i<max_blocks; i++) {
+               if(Blocks[i][ALLOC]==1)
+                       Dbprintf("%02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x",
+                                        Blocks[i][0], Blocks[i][1], Blocks[i][2], Blocks[i][3], Blocks[i][4], Blocks[i][5], Blocks[i][6], Blocks[i][7],
+                                       Blocks[i][8], Blocks[i][9], Blocks[i][10], Blocks[i][11], Blocks[i][12], Blocks[i][13], Blocks[i][14], Blocks[i][15]);
+               else
+                       Dbprintf("<missing block %d>", i);
+       }
+       Dbprintf("-----------------------------------------");
+
+       cmd_send(CMD_ACK,0,0,0,0,0);
+}
+
+
+/* Write on a byte of a PCF7931 tag
+ * @param address : address of the block to write
+   @param byte : address of the byte to write
+    @param data : data to write
+ */
+void WritePCF7931(uint8_t pass1, uint8_t pass2, uint8_t pass3, uint8_t pass4, uint8_t pass5, uint8_t pass6, uint8_t pass7, uint16_t init_delay, int32_t l, int32_t p, uint8_t address, uint8_t byte, uint8_t data)
+{
+
+       uint32_t tab[1024]={0}; // data times frame
+       uint32_t u = 0;
+       uint8_t parity = 0;
+       bool comp = 0;
+
+       //BUILD OF THE DATA FRAME
+
+       //alimentation of the tag (time for initializing)
+       AddPatternPCF7931(init_delay, 0, 8192/2*T0_PCF, tab);
+
+       //PMC
+       Dbprintf("Initialization delay : %d us", init_delay);
+       AddPatternPCF7931(8192/2*T0_PCF + 319*T0_PCF+70, 3*T0_PCF, 29*T0_PCF, tab);
+
+       Dbprintf("Offsets : %d us on the low pulses width, %d us on the low pulses positions", l, p);
+
+       //password indication bit
+       AddBitPCF7931(1, tab, l, p);
+
+
+       //password (on 56 bits)
+       Dbprintf("Password (LSB first on each byte) : %02x %02x %02x %02x %02x %02x %02x", pass1,pass2,pass3,pass4,pass5,pass6,pass7);
+       AddBytePCF7931(pass1, tab, l, p);
+       AddBytePCF7931(pass2, tab, l, p);
+       AddBytePCF7931(pass3, tab, l, p);
+       AddBytePCF7931(pass4, tab, l, p);
+       AddBytePCF7931(pass5, tab, l, p);
+       AddBytePCF7931(pass6, tab, l, p);
+       AddBytePCF7931(pass7, tab, l, p);
+
+       //programming mode (0 or 1)
+       AddBitPCF7931(0, tab, l, p);
+
+       //block adress on 6 bits
+       Dbprintf("Block address : %02x", address);
+       for (u=0; u<6; u++)
+       {
+               if (address&(1<<u)) {   // bit 1
+                        parity++;
+                        AddBitPCF7931(1, tab, l, p);
+               } else{                                 // bit 0
+                        AddBitPCF7931(0, tab, l, p);
+               }
+       }
+
+       //byte address on 4 bits
+       Dbprintf("Byte address : %02x", byte);
+       for (u=0; u<4; u++)
+       {
+               if (byte&(1<<u)) {      // bit 1
+                        parity++;
+                        AddBitPCF7931(1, tab, l, p);
+               } else{                         // bit 0
+                        AddBitPCF7931(0, tab, l, p);
+               }
+       }
+
+       //data on 8 bits
+       Dbprintf("Data : %02x", data);
+       for (u=0; u<8; u++)
+       {
+               if (data&(1<<u)) {      // bit 1
+                        parity++;
+                        AddBitPCF7931(1, tab, l, p);
+               } else{                         //bit 0
+                        AddBitPCF7931(0, tab, l, p);
+               }
+       }
+
+
+       //parity bit
+       if((parity%2)==0){
+               AddBitPCF7931(0, tab, l, p); //even parity
+       }else{
+               AddBitPCF7931(1, tab, l, p);//odd parity
+       }
+
+       //time access memory
+       AddPatternPCF7931(5120+2680, 0, 0, tab);
+
+       //conversion of the scale time
+       for(u=0;u<500;u++){
+               tab[u]=(tab[u] * 3)/2;
+       }
+
+
+       //compennsation of the counter reload
+       while (!comp){
+               comp = 1;
+               for(u=0;tab[u]!=0;u++){
+                       if(tab[u] > 0xFFFF){
+                         tab[u] -= 0xFFFF;
+                         comp = 0;
+                       }
+               }
+       }
+
+       SendCmdPCF7931(tab);
+}
+
+
+
+/* Send a trame to a PCF7931 tags
+ * @param tab : array of the data frame
+ */
+
+void SendCmdPCF7931(uint32_t * tab){
+       uint16_t u=0;
+       uint16_t tempo=0;
+
+       Dbprintf("SENDING DATA FRAME...");
+
+       FpgaDownloadAndGo(FPGA_BITSTREAM_LF);
+
+       FpgaSendCommand(FPGA_CMD_SET_DIVISOR, 95); //125Khz
+
+       FpgaWriteConfWord(FPGA_MAJOR_MODE_LF_PASSTHRU );
+
+       LED_A_ON();
+
+       // steal this pin from the SSP and use it to control the modulation
+       AT91C_BASE_PIOA->PIO_PER = GPIO_SSC_DOUT;
+       AT91C_BASE_PIOA->PIO_OER = GPIO_SSC_DOUT;
+
+       //initialization of the timer
+       AT91C_BASE_PMC->PMC_PCER |= (0x1 << 12) | (0x1 << 13) | (0x1 << 14);
+       AT91C_BASE_TCB->TCB_BMR = AT91C_TCB_TC0XC0S_NONE | AT91C_TCB_TC1XC1S_TIOA0 | AT91C_TCB_TC2XC2S_NONE;
+       AT91C_BASE_TC0->TC_CCR = AT91C_TC_CLKDIS; // timer disable
+       AT91C_BASE_TC0->TC_CMR = AT91C_TC_CLKS_TIMER_DIV3_CLOCK;  //clock at 48/32 MHz
+       AT91C_BASE_TC0->TC_CCR = AT91C_TC_CLKEN;
+       AT91C_BASE_TCB->TCB_BCR = 1;
+
+
+       tempo = AT91C_BASE_TC0->TC_CV;
+       for(u=0;tab[u]!= 0;u+=3){
+
+
+               // modulate antenna
+               HIGH(GPIO_SSC_DOUT);
+               while(tempo !=  tab[u]){
+                       tempo = AT91C_BASE_TC0->TC_CV;
+               }
+
+               // stop modulating antenna
+               LOW(GPIO_SSC_DOUT);
+               while(tempo !=  tab[u+1]){
+                       tempo = AT91C_BASE_TC0->TC_CV;
+               }
+
+
+               // modulate antenna
+               HIGH(GPIO_SSC_DOUT);
+               while(tempo !=  tab[u+2]){
+                       tempo = AT91C_BASE_TC0->TC_CV;
+               }
+
+
+       }
+
+       LED_A_OFF();
+       FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF);
+       SpinDelay(200);
+
+
+       AT91C_BASE_TC0->TC_CCR = AT91C_TC_CLKDIS; // timer disable
+       DbpString("FINISH !");
+       DbpString("(Could be usefull to send the same trame many times)");
+       LED(0xFFFF, 1000);
+}
+
+
+/* Add a byte for building the data frame of PCF7931 tags 
+ * @param b : byte to add
+ * @param tab : array of the data frame
+ * @param l : offset on low pulse width
+ * @param p : offset on low pulse positioning
+ */
+
+bool AddBytePCF7931(uint8_t byte, uint32_t * tab, int32_t l, int32_t p){
+
+       uint32_t u;
+       for (u=0; u<8; u++)
+       {
+               if (byte&(1<<u)) {      //bit Ã  1
+                       if(AddBitPCF7931(1, tab, l, p)==1)return 1;
+               } else { //bit Ã  0
+                       if(AddBitPCF7931(0, tab, l, p)==1)return 1;
+               }
+       }
+
+       return 0;
+}
+
+/* Add a bits for building the data frame of PCF7931 tags 
+ * @param b : bit to add
+ * @param tab : array of the data frame
+ * @param l : offset on low pulse width
+ * @param p : offset on low pulse positioning
+ */
+bool AddBitPCF7931(bool b, uint32_t * tab, int32_t l, int32_t p){
+       uint8_t u = 0;
+
+       for(u=0;tab[u]!=0;u+=3){} //we put the cursor at the last value of the array
+       
+
+       if(b==1){       //add a bit 1
+               if(u==0) tab[u] = 34*T0_PCF+p;
+               else     tab[u] = 34*T0_PCF+tab[u-1]+p;
+
+               tab[u+1] = 6*T0_PCF+tab[u]+l;
+               tab[u+2] = 88*T0_PCF+tab[u+1]-l-p;
+               return 0;
+       }else{          //add a bit 0
+
+               if(u==0) tab[u] = 98*T0_PCF+p;
+               else     tab[u] = 98*T0_PCF+tab[u-1]+p;
+
+               tab[u+1] = 6*T0_PCF+tab[u]+l;
+               tab[u+2] = 24*T0_PCF+tab[u+1]-l-p;
+               return 0;
+       }
+
+       
+       return 1;
+}
+
+/* Add a custom pattern in the data frame
+ * @param a : delay of the first high pulse
+ * @param b : delay of the low pulse
+ * @param c : delay of the last high pulse
+ * @param tab : array of the data frame
+ */
+bool AddPatternPCF7931(uint32_t a, uint32_t b, uint32_t c, uint32_t * tab){
+       uint32_t u = 0;
+       for(u=0;tab[u]!=0;u+=3){} //we put the cursor at the last value of the array
+
+       if(u==0) tab[u] = a;
+       else tab[u] = a + tab[u-1];
+
+       tab[u+1] = b+tab[u];
+       tab[u+2] = c+tab[u+1];
+
+       return 0;
+}
diff --git a/armsrc/pcf7931.h b/armsrc/pcf7931.h
new file mode 100644 (file)
index 0000000..26aaff6
--- /dev/null
@@ -0,0 +1,14 @@
+#ifndef __PCF7931_H
+#define __PCF7931_H
+
+int DemodPCF7931(uint8_t **outBlocks);
+int IsBlock0PCF7931(uint8_t *Block);
+int IsBlock1PCF7931(uint8_t *Block);
+void ReadPCF7931();
+void SendCmdPCF7931(uint32_t * tab);
+bool AddBytePCF7931(uint8_t byte, uint32_t * tab, int32_t l, int32_t p);
+bool AddBitPCF7931(bool b, uint32_t * tab, int32_t l, int32_t p);
+bool AddPatternPCF7931(uint32_t a, uint32_t b, uint32_t c, uint32_t * tab);
+void WritePCF7931(uint8_t pass1, uint8_t pass2, uint8_t pass3, uint8_t pass4, uint8_t pass5, uint8_t pass6, uint8_t pass7, uint16_t init_delay, int32_t l, int32_t p, uint8_t address, uint8_t byte, uint8_t data);
+
+#endif
index d7332bda5682255bb03e4d306e87763d97218a51..f1e58ab0ed9359e80714c4be2fd146494b9fa4d4 100644 (file)
 
 #include "proxmark3.h"
 #include "apps.h"
+#include "zlib.h"
+#include "BigBuf.h"
+
+static uint8_t *next_free_memory;
+extern struct common_area common_area;
+extern char __data_src_start__, __data_start__, __data_end__, __bss_start__, __bss_end__;
+
+
+static voidpf inflate_malloc(voidpf opaque, uInt items, uInt size)
+{
+       uint8_t *allocated_memory;
+       
+       allocated_memory = next_free_memory;
+       next_free_memory += items*size;
+       return allocated_memory;
+}
+
+
+static void inflate_free(voidpf opaque, voidpf address)
+{
+       // nothing to do
+       
+}
+
+static void uncompress_data_section(void)
+{
+       z_stream data_section;
+
+       next_free_memory = BigBuf_get_addr();
+       
+       // initialize zstream structure
+       data_section.next_in = (uint8_t *) &__data_src_start__;
+       data_section.avail_in = &__data_end__ - &__data_start__;  // uncompressed size. Wrong but doesn't matter.
+       data_section.next_out = (uint8_t *) &__data_start__;
+       data_section.avail_out = &__data_end__ - &__data_start__;  // uncompressed size. Correct.
+       data_section.zalloc = &inflate_malloc;
+       data_section.zfree = &inflate_free;
+       data_section.opaque = NULL;
+
+       // initialize zlib for inflate
+       inflateInit2(&data_section, 15);
+
+       // uncompress data segment to RAM
+       inflate(&data_section, Z_FINISH);
+       
+       // save the size of the compressed data section
+       common_area.arg1 = data_section.total_in;
+}
+
 
-extern char __data_start__, __data_src_start__,  __data_end__, __bss_start__, __bss_end__;
 void __attribute__((section(".startos"))) Vector(void)
 {
        /* Stack should have been set up by the bootloader */
-       char *src, *dst, *end;
+       // char *src;
+       char *dst, *end;
+       
+       uncompress_data_section();
 
        /* Set up (that is: clear) BSS. */
        dst = &__bss_start__;
        end = &__bss_end__;
        while(dst < end) *dst++ = 0;
 
-       /* Set up data segment: Copy from flash to ram */
-       src = &__data_src_start__;
-       dst = &__data_start__;
-       end = &__data_end__;
-       while(dst < end) *dst++ = *src++;
+       // Set up data segment: Copy from flash to ram
+       // src = &__data_src_start__;
+       // dst = &__data_start__;
+       // end = &__data_end__;
+       // while(dst < end) *dst++ = *src++;
+
 
        AppMain();
 }
index 74fba94b764db748cf6a377ba23b96f5d06bc304..1dd8dc7544fe1cb2989548692f8449f19b6ca621 100644 (file)
@@ -268,15 +268,15 @@ void FormatVersionInformation(char *dst, int len, const char *prefix, void *vers
        dst[0] = 0;
        strncat(dst, prefix, len-1);
        if(v->magic != VERSION_INFORMATION_MAGIC) {
-               strncat(dst, "Missing/Invalid version information", len - strlen(dst) - 1);
+               strncat(dst, "Missing/Invalid version information\n", len - strlen(dst) - 1);
                return;
        }
        if(v->versionversion != 1) {
-               strncat(dst, "Version information not understood", len - strlen(dst) - 1);
+               strncat(dst, "Version information not understood\n", len - strlen(dst) - 1);
                return;
        }
        if(!v->present) {
-               strncat(dst, "Version information not available", len - strlen(dst) - 1);
+               strncat(dst, "Version information not available\n", len - strlen(dst) - 1);
                return;
        }
 
@@ -289,6 +289,7 @@ void FormatVersionInformation(char *dst, int len, const char *prefix, void *vers
 
        strncat(dst, " ", len - strlen(dst) - 1);
        strncat(dst, v->buildtime, len - strlen(dst) - 1);
+       strncat(dst, "\n", len - strlen(dst) - 1);
 }
 
 //  -------------------------------------------------------------------------
@@ -303,11 +304,12 @@ void FormatVersionInformation(char *dst, int len, const char *prefix, void *vers
 
 void StartTickCount()
 {
-//  must be 0x40, but on my cpu - included divider is optimal
-//  0x20 - 1 ms / bit 
-//  0x40 - 2 ms / bit
-
-       AT91C_BASE_RTTC->RTTC_RTMR = AT91C_RTTC_RTTRST + 0x001D; // was 0x003B
+       // This timer is based on the slow clock. The slow clock frequency is between 22kHz and 40kHz.
+       // We can determine the actual slow clock frequency by looking at the Main Clock Frequency Register.
+    uint16_t mainf = AT91C_BASE_PMC->PMC_MCFR & 0xffff;                // = 16 * main clock frequency (16MHz) / slow clock frequency
+       // set RealTimeCounter divider to count at 1kHz:
+       AT91C_BASE_RTTC->RTTC_RTMR = AT91C_RTTC_RTTRST | ((256000 + (mainf/2)) / mainf);
+       // note: worst case precision is approx 2.5%
 }
 
 /*
index 7954d1ea2de3aa3cfc3f768974b4ea708f7fe881..0972f441912280439ca04265472a76ab0d31af6c 100644 (file)
@@ -9,12 +9,13 @@ include ../common/Makefile.common
 CC=gcc
 CXX=g++
 #COMMON_FLAGS = -m32
-VPATH = ../common
+VPATH = ../common ../zlib
 OBJDIR = obj
 
-LDLIBS = -L/opt/local/lib -L/usr/local/lib ../liblua/liblua.a -lreadline -lpthread -lm
+LDLIBS = -L/opt/local/lib -L/usr/local/lib -lreadline -lpthread -lm
+LUALIB = ../liblua/liblua.a
 LDFLAGS = $(COMMON_FLAGS)
-CFLAGS = -std=c99 -I. -I../include -I../common -I/opt/local/include -I../liblua -Wall $(COMMON_FLAGS) -g -O4
+CFLAGS = -std=c99 -I. -I../include -I../common -I../zlib -I/opt/local/include -I../liblua -Wall $(COMMON_FLAGS) -g -O4
 LUAPLATFORM = generic
 
 ifneq (,$(findstring MINGW,$(platform)))
@@ -35,14 +36,13 @@ else ifeq ($(platform),Darwin)
 else
     CXXFLAGS = $(shell pkg-config --cflags QtCore QtGui 2>/dev/null) -Wall -O4
     QTLDLIBS = $(shell pkg-config --libs QtCore QtGui 2>/dev/null)
+    LUALIB +=  -ldl
     MOC = $(shell pkg-config --variable=moc_location QtCore)
-    LDLIBS +=  -ldl
     # Below is a variant you can use if you have problems compiling with QT5 on ubuntu. see http://www.proxmark.org/forum/viewtopic.php?id=1661 for more info. 
     #MOC = /usr/lib/x86_64-linux-gnu/qt4/bin/moc
     LUAPLATFORM = linux
 endif
 
-
 ifneq ($(QTLDLIBS),)
     QTGUI = $(OBJDIR)/proxgui.o $(OBJDIR)/proxguiqt.o $(OBJDIR)/proxguiqt.moc.o
     CFLAGS += -DHAVE_GUI
@@ -57,14 +57,14 @@ CORESRCS =  uart.c \
 
 
 CMDSRCS =      nonce2key/crapto1.c\
-               nonce2key/crypto1.c\
-               nonce2key/nonce2key.c\
-               loclass/cipher.c \
-               loclass/cipherutils.c \
-               loclass/des.c \
-               loclass/ikeys.c \
-               loclass/elite_crack.c\
-               loclass/fileutils.c\
+                       nonce2key/crypto1.c\
+                       nonce2key/nonce2key.c\
+                       loclass/cipher.c \
+                       loclass/cipherutils.c \
+                       loclass/des.c \
+                       loclass/ikeys.c \
+                       loclass/elite_crack.c\
+                       loclass/fileutils.c\
                        mifarehost.c\
                        crc.c \
                        crc16.c \
@@ -85,10 +85,12 @@ CMDSRCS =   nonce2key/crapto1.c\
                        cmdhficlass.c \
                        cmdhfmf.c \
             cmdhfmfu.c \
+                       cmdhftopaz.c \
                        cmdhw.c \
                        cmdlf.c \
                        cmdlfio.c \
                        cmdlfhid.c \
+                       cmdlfawid.c \
                        cmdlfem4x.c \
                        cmdlfhitag.c \
                        cmdlfti.c \
@@ -96,27 +98,34 @@ CMDSRCS =   nonce2key/crapto1.c\
                        cmdmain.c \
                        cmdlft55xx.c \
                        cmdlfpcf7931.c\
+                       cmdlfviking.c\
                        pm3_binlib.c\
                        scripting.c\
                        cmdscript.c\
                        pm3_bitlib.c\
                        aes.c\
                        protocols.c\
+                       sha1.c\
+
+ZLIBSRCS = deflate.c adler32.c trees.c zutil.c inflate.c inffast.c inftrees.c
+ZLIB_FLAGS = -DZ_SOLO -DZ_PREFIX -DNO_GZIP -DZLIB_PM3_TUNED 
+#-DDEBUG -Dverbose=1
 
 
 COREOBJS = $(CORESRCS:%.c=$(OBJDIR)/%.o)
 CMDOBJS = $(CMDSRCS:%.c=$(OBJDIR)/%.o)
+ZLIBOBJS = $(ZLIBSRCS:%.c=$(OBJDIR)/%.o)
 
 RM = rm -f
-BINS = proxmark3 flasher #snooper cli
-CLEAN = cli cli.exe flasher flasher.exe proxmark3 proxmark3.exe snooper snooper.exe $(CMDOBJS) $(OBJDIR)/*.o *.o *.moc.cpp
+BINS = proxmark3 flasher fpga_compress #snooper cli
+CLEAN = cli cli.exe flasher flasher.exe proxmark3 proxmark3.exe fpga_compress fpga_compress.exe snooper snooper.exe $(CMDOBJS) $(OBJDIR)/*.o *.o *.moc.cpp
 
 all: lua_build $(BINS) 
 
 all-static: LDLIBS:=-static $(LDLIBS)
-all-static: snooper cli flasher
-       
-proxmark3: LDLIBS+=$(QTLDLIBS)
+all-static: snooper cli flasher fpga_compress
+
+proxmark3: LDLIBS+=$(LUALIB) $(QTLDLIBS)
 proxmark3: $(OBJDIR)/proxmark3.o $(COREOBJS) $(CMDOBJS) $(QTGUI)
        $(CXX) $(CXXFLAGS) $^ $(LDLIBS) -o $@
 
@@ -129,8 +138,11 @@ cli: $(OBJDIR)/cli.o $(COREOBJS) $(CMDOBJS) $(OBJDIR)/guidummy.o
 flasher: $(OBJDIR)/flash.o $(OBJDIR)/flasher.o $(COREOBJS)
        $(CXX) $(CXXFLAGS) $^ $(LDLIBS) -o $@
 
+fpga_compress: $(OBJDIR)/fpga_compress.o $(ZLIBOBJS)
+       $(CXX) $(CXXFLAGS) $(ZLIB_FLAGS) $^ $(LDLIBS) -o $@
+
 $(OBJDIR)/%.o: %.c
-       $(CC) $(CFLAGS) -c -o $@ $<
+       $(CC) $(CFLAGS) $(ZLIB_FLAGS) -c -o $@ $<
 
 $(OBJDIR)/%.o: %.cpp
        $(CXX) $(CXXFLAGS) -c -o $@ $<
index b9069bc19cb82b150b05de62345a188a56e5f6aa..c7fdc91e36a79cfe17052e3299f9dcc880e1915c 100644 (file)
 #include "lfdemod.h"
 #include "usb_cmd.h"
 #include "crc.h"
+#include "crc16.h"
+#include "loclass/cipherutils.h"
 
 uint8_t DemodBuffer[MAX_DEMOD_BUF_LEN];
-uint8_t g_debugMode;
-size_t DemodBufferLen;
+uint8_t g_debugMode=0;
+size_t DemodBufferLen=0;
 static int CmdHelp(const char *Cmd);
 
 //set the demod buffer with given array of binary (one bit per byte)
@@ -55,6 +57,16 @@ int CmdSetDebugMode(const char *Cmd)
        return 1;
 }
 
+int usage_data_printdemodbuf(){
+               PrintAndLog("Usage: data printdemodbuffer x o <offset> l <length>");
+               PrintAndLog("Options:        ");
+               PrintAndLog("       h          This help");
+               PrintAndLog("       x          output in hex (omit for binary output)");
+               PrintAndLog("       o <offset> enter offset in # of bits");
+               PrintAndLog("       l <length> enter length to print in # of bits or hex characters respectively");
+               return 0;       
+}
+
 //by marshmellow
 void printDemodBuff(void)
 {
@@ -73,23 +85,56 @@ void printDemodBuff(void)
 
 int CmdPrintDemodBuff(const char *Cmd)
 {
-       char hex;
-       char printBuff[512]={0x00};
-       uint8_t numBits = DemodBufferLen & 0xFFFC;
-       sscanf(Cmd, "%c", &hex);
-       if (hex == 'h'){
-               PrintAndLog("Usage: data printdemodbuffer [x]");
-               PrintAndLog("Options:        ");
-               PrintAndLog("       h       This help");
-               PrintAndLog("       x       output in hex (omit for binary output)");
-               return 0;
+       char hex[512]={0x00};
+       bool hexMode = false;
+       bool errors = false;
+       uint32_t offset = 0; //could be size_t but no param_get16...
+       uint32_t length = 512;
+       char cmdp = 0;
+       while(param_getchar(Cmd, cmdp) != 0x00)
+       {
+               switch(param_getchar(Cmd, cmdp))
+               {
+               case 'h':
+               case 'H':
+                       return usage_data_printdemodbuf();
+               case 'x':
+               case 'X':
+                       hexMode = true;
+                       cmdp++;
+                       break;
+               case 'o':
+               case 'O':
+                       offset = param_get32ex(Cmd, cmdp+1, 0, 10);
+                       if (!offset) errors = true;
+                       cmdp += 2;
+                       break;
+               case 'l':
+               case 'L':
+                       length = param_get32ex(Cmd, cmdp+1, 512, 10);
+                       if (!length) errors = true;
+                       cmdp += 2;
+                       break;
+               default:
+                       PrintAndLog("Unknown parameter '%c'", param_getchar(Cmd, cmdp));
+                       errors = true;
+                       break;
+               }
+               if(errors) break;
        }
-       if (hex == 'x'){
-               numBits = binarraytohex(printBuff, (char *)DemodBuffer, numBits);
+       //Validations
+       if(errors) return usage_data_printdemodbuf();
+       length = (length > (DemodBufferLen-offset)) ? DemodBufferLen-offset : length; 
+       int numBits = (length) & 0x00FFC; //make sure we don't exceed our string
+
+       if (hexMode){
+               char *buf = (char *) (DemodBuffer + offset);
+               numBits = (numBits > sizeof(hex)) ? sizeof(hex) : numBits;
+               numBits = binarraytohex(hex, buf, numBits);
                if (numBits==0) return 0;
-               PrintAndLog("DemodBuffer: %s",printBuff);
+               PrintAndLog("DemodBuffer: %s",hex);             
        } else {
-               printDemodBuff();
+               PrintAndLog("DemodBuffer:\n%s", sprint_bin_break(DemodBuffer+offset,numBits,16));
        }
        return 1;
 }
@@ -232,7 +277,8 @@ int AskEm410xDecode(bool verbose, uint32_t *hi, uint64_t *lo )
 
 int AskEm410xDemod(const char *Cmd, uint32_t *hi, uint64_t *lo, bool verbose)
 {
-       if (!ASKDemod(Cmd, FALSE, FALSE, 1)) return 0;
+       bool st = TRUE;
+       if (!ASKDemod_ext(Cmd, FALSE, FALSE, 1, &st)) return 0;
        return AskEm410xDecode(verbose, hi, lo);
 }
 
@@ -267,8 +313,7 @@ int CmdAskEM410xDemod(const char *Cmd)
 //verbose will print results and demoding messages
 //emSearch will auto search for EM410x format in bitstream
 //askType switches decode: ask/raw = 0, ask/manchester = 1 
-int ASKDemod(const char *Cmd, bool verbose, bool emSearch, uint8_t askType)
-{
+int ASKDemod_ext(const char *Cmd, bool verbose, bool emSearch, uint8_t askType, bool *stCheck) {
        int invert=0;
        int clk=0;
        int maxErr=100;
@@ -277,7 +322,7 @@ int ASKDemod(const char *Cmd, bool verbose, bool emSearch, uint8_t askType)
        char amp = param_getchar(Cmd, 0);
        uint8_t BitStream[MAX_GRAPH_TRACE_LEN]={0};
        sscanf(Cmd, "%i %i %i %i %c", &clk, &invert, &maxErr, &maxLen, &amp);
-       if (!maxLen) maxLen = 512*64;
+       if (!maxLen) maxLen = BIGBUF_SIZE;
        if (invert != 0 && invert != 1) {
                PrintAndLog("Invalid argument: %s", Cmd);
                return 0;
@@ -289,15 +334,22 @@ int ASKDemod(const char *Cmd, bool verbose, bool emSearch, uint8_t askType)
        if (amp == 'a' || amp == 'A') askAmp=1; 
        size_t BitLen = getFromGraphBuf(BitStream);
        if (g_debugMode) PrintAndLog("DEBUG: Bitlen from grphbuff: %d",BitLen);
-       if (BitLen<255) return 0;
-       if (maxLen<BitLen && maxLen != 0) BitLen = maxLen;
-
+       if (BitLen < 255) return 0;
+       if (maxLen < BitLen && maxLen != 0) BitLen = maxLen;
+       int foundclk = 0;
+       bool st = false;
+       if (*stCheck) st = DetectST(BitStream, &BitLen, &foundclk);
+       if (st) {
+               *stCheck = st;
+               clk = (clk == 0) ? foundclk : clk;
+               if (verbose || g_debugMode) PrintAndLog("\nFound Sequence Terminator");
+       }
        int errCnt = askdemod(BitStream, &BitLen, &clk, &invert, maxErr, askAmp, askType);
        if (errCnt<0 || BitLen<16){  //if fatal error (or -1)
                if (g_debugMode) PrintAndLog("DEBUG: no data found %d, errors:%d, bitlen:%d, clock:%d",errCnt,invert,BitLen,clk);
                return 0;
        }
-       if (errCnt>maxErr){
+       if (errCnt > maxErr){
                if (g_debugMode) PrintAndLog("DEBUG: Too many errors found, errors:%d, bits:%d, clock:%d",errCnt, BitLen, clk);
                return 0;
        }
@@ -307,8 +359,8 @@ int ASKDemod(const char *Cmd, bool verbose, bool emSearch, uint8_t askType)
        setDemodBuf(BitStream,BitLen,0);
        if (verbose || g_debugMode){
                if (errCnt>0) PrintAndLog("# Errors during Demoding (shown as 7 in bit stream): %d",errCnt);
-               if (askType) PrintAndLog("ASK/Manchester decoded bitstream:");
-               else PrintAndLog("ASK/Raw decoded bitstream:");
+               if (askType) PrintAndLog("ASK/Manchester - Clock: %d - Decoded bitstream:",clk);
+               else PrintAndLog("ASK/Raw - Clock: %d - Decoded bitstream:",clk);
                // Now output the bitstream to the scrollback by line of 16 bits
                printDemodBuff();
                
@@ -320,6 +372,10 @@ int ASKDemod(const char *Cmd, bool verbose, bool emSearch, uint8_t askType)
        }
        return 1;
 }
+int ASKDemod(const char *Cmd, bool verbose, bool emSearch, uint8_t askType) {
+       bool st = false;
+       return ASKDemod_ext(Cmd, verbose, emSearch, askType, &st);
+}
 
 //by marshmellow
 //takes 5 arguments - clock, invert, maxErr, maxLen as integers and amplify as char == 'a'
@@ -329,7 +385,8 @@ int Cmdaskmandemod(const char *Cmd)
 {
        char cmdp = param_getchar(Cmd, 0);
        if (strlen(Cmd) > 25 || cmdp == 'h' || cmdp == 'H') {
-               PrintAndLog("Usage:  data rawdemod am [clock] <invert> [maxError] [maxLen] [amplify]");
+               PrintAndLog("Usage:  data rawdemod am <s> [clock] <invert> [maxError] [maxLen] [amplify]");
+               PrintAndLog("     ['s'] optional, check for Sequence Terminator");
                PrintAndLog("     [set clock as integer] optional, if not set, autodetect");
                PrintAndLog("     <invert>, 1 to invert output");
                PrintAndLog("     [set maximum allowed errors], default = 100");
@@ -343,7 +400,13 @@ int Cmdaskmandemod(const char *Cmd)
                PrintAndLog("          : data rawdemod am 64 1 0 = demod an ask/manchester tag from GraphBuffer using a clock of RF/64, inverting data and allowing 0 demod errors");
                return 0;
        }
-       return ASKDemod(Cmd, TRUE, TRUE, 1);
+       bool st = TRUE;
+       if (Cmd[0]=='s') 
+               return ASKDemod_ext(Cmd++, TRUE, TRUE, 1, &st);
+       else if (Cmd[1] == 's')
+               return ASKDemod_ext(Cmd+=2, TRUE, TRUE, 1, &st);
+       else
+               return ASKDemod(Cmd, TRUE, TRUE, 1);
 }
 
 //by marshmellow
@@ -355,7 +418,7 @@ int Cmdmandecoderaw(const char *Cmd)
        int errCnt=0;
        size_t size=0;
        int invert=0;
-       size_t maxErr = 20;
+       int maxErr = 20;
        char cmdp = param_getchar(Cmd, 0);
        if (strlen(Cmd) > 5 || cmdp == 'h' || cmdp == 'H') {
                PrintAndLog("Usage:  data manrawdecode [invert] [maxErr]");
@@ -461,22 +524,20 @@ int CmdBiphaseDecodeRaw(const char *Cmd)
 int ASKbiphaseDemod(const char *Cmd, bool verbose)
 {
        //ask raw demod GraphBuffer first
-       int offset=0, clk=0, invert=0, maxErr=0, ans=0;
-       ans = sscanf(Cmd, "%i %i %i %i", &offset, &clk, &invert, &maxErr);
-       if (ans>0)
-               ans = ASKDemod(Cmd+1, FALSE, FALSE, 0);
-       else
-               ans = ASKDemod(Cmd, FALSE, FALSE, 0);
-       if (!ans) {
-               if (g_debugMode || verbose) PrintAndLog("Error AskDemod: %d", ans);
-               return 0;
-       }
+       int offset=0, clk=0, invert=0, maxErr=0;
+       sscanf(Cmd, "%i %i %i %i", &offset, &clk, &invert, &maxErr);
+
+       uint8_t BitStream[MAX_DEMOD_BUF_LEN];     
+       size_t size = getFromGraphBuf(BitStream);         
+       //invert here inverts the ask raw demoded bits which has no effect on the demod, but we need the pointer
+       int errCnt = askdemod(BitStream, &size, &clk, &invert, maxErr, 0, 0);  
+       if ( errCnt < 0 || errCnt > maxErr ) {   
+               if (g_debugMode) PrintAndLog("DEBUG: no data or error found %d, clock: %d", errCnt, clk);  
+                       return 0;  
+       } 
 
-       //attempt to Biphase decode DemodBuffer
-       size_t size = DemodBufferLen;
-       uint8_t BitStream[MAX_DEMOD_BUF_LEN];
-       memcpy(BitStream, DemodBuffer, DemodBufferLen); 
-       int errCnt = BiphaseRawDecode(BitStream, &size, offset, 0);
+       //attempt to Biphase decode BitStream
+       errCnt = BiphaseRawDecode(BitStream, &size, offset, invert);
        if (errCnt < 0){
                if (g_debugMode || verbose) PrintAndLog("Error BiphaseRawDecode: %d", errCnt);
                return 0;
@@ -488,7 +549,7 @@ int ASKbiphaseDemod(const char *Cmd, bool verbose)
        //success set DemodBuffer and return
        setDemodBuf(BitStream, size, 0);
        if (g_debugMode || verbose){
-               PrintAndLog("Biphase Decoded using offset: %d - # errors:%d - data:",offset,errCnt);
+               PrintAndLog("Biphase Decoded using offset: %d - clock: %d - # errors:%d - data:",offset,clk,errCnt);
                printDemodBuff();
        }
        return 1;
@@ -552,7 +613,7 @@ int CmdG_Prox_II_Demod(const char *Cmd)
                if ((idx+1) % 5 == 0){
                        //spacer bit - should be 0
                        if (DemodBuffer[startIdx+idx] != 0) {
-                               if (g_debugMode) PrintAndLog("Error spacer not 0: %d, pos: %d",DemodBuffer[startIdx+idx],startIdx+idx);
+                               if (g_debugMode) PrintAndLog("Error spacer not 0: %u, pos: %u", (unsigned int)DemodBuffer[startIdx+idx],(unsigned int)(startIdx+idx));
                                return 0;
                        }
                        continue;
@@ -560,21 +621,21 @@ int CmdG_Prox_II_Demod(const char *Cmd)
                if (keyCnt<8){ //lsb first
                        xorKey = xorKey | (DemodBuffer[startIdx+idx]<<keyCnt);
                        keyCnt++;
-                       if (keyCnt==8 && g_debugMode) PrintAndLog("xorKey Found: %02x", xorKey);
+                       if (keyCnt==8 && g_debugMode) PrintAndLog("xorKey Found: %02x", (unsigned int)xorKey);
                        continue;
                }
                //lsb first
                ByteStream[ByteCnt] = ByteStream[ByteCnt] | (DemodBuffer[startIdx+idx]<<bitCnt);
                bitCnt++;
                if (bitCnt % 8 == 0){
-                       if (g_debugMode) PrintAndLog("byte %d: %02x",ByteCnt,ByteStream[ByteCnt]);
+                       if (g_debugMode) PrintAndLog("byte %u: %02x", (unsigned int)ByteCnt, ByteStream[ByteCnt]);
                        bitCnt=0;
                        ByteCnt++;
                }
        }
        for (uint8_t i = 0; i < ByteCnt; i++){
                ByteStream[i] ^= xorKey; //xor
-               if (g_debugMode) PrintAndLog("byte %d after xor: %02x", i, ByteStream[i]);
+               if (g_debugMode) PrintAndLog("byte %u after xor: %02x", (unsigned int)i, ByteStream[i]);
        }
        //now ByteStream contains 64 bytes of decrypted raw tag data
        // 
@@ -588,19 +649,45 @@ int CmdG_Prox_II_Demod(const char *Cmd)
        if (fmtLen==36){
                FC = ((ByteStream[3] & 0x7F)<<7) | (ByteStream[4]>>1);
                Card = ((ByteStream[4]&1)<<19) | (ByteStream[5]<<11) | (ByteStream[6]<<3) | (ByteStream[7]>>5);
-               PrintAndLog("G-Prox-II Found: FmtLen %d, FC %d, Card %d",fmtLen,FC,Card);
+               PrintAndLog("G-Prox-II Found: FmtLen %d, FC %d, Card %d", fmtLen, FC, Card);
        } else if(fmtLen==26){
                FC = ((ByteStream[3] & 0x7F)<<1) | (ByteStream[4]>>7);
                Card = ((ByteStream[4]&0x7F)<<9) | (ByteStream[5]<<1) | (ByteStream[6]>>7);
-               PrintAndLog("G-Prox-II Found: FmtLen %d, FC %d, Card %d",fmtLen,FC,Card);    
+               PrintAndLog("G-Prox-II Found: FmtLen %d, FC %d, Card %d",(unsigned int)fmtLen,FC,Card);
        } else {
-               PrintAndLog("Unknown G-Prox-II Fmt Found: FmtLen %d",fmtLen);
+               PrintAndLog("Unknown G-Prox-II Fmt Found: FmtLen %d",(int)fmtLen);
        }
        PrintAndLog("Raw: %08x%08x%08x", raw1,raw2,raw3);
        setDemodBuf(DemodBuffer+ans, 96, 0);
        return 1;
 }
 
+//by marshmellow
+//see ASKDemod for what args are accepted
+int CmdVikingDemod(const char *Cmd)
+{
+       if (!ASKDemod(Cmd, false, false, 1)) {
+               if (g_debugMode) PrintAndLog("ASKDemod failed");
+               return 0;
+       }
+       size_t size = DemodBufferLen;
+       //call lfdemod.c demod for Viking
+       int ans = VikingDemod_AM(DemodBuffer, &size);
+       if (ans < 0) {
+               if (g_debugMode) PrintAndLog("Error Viking_Demod %d", ans);
+               return 0;
+       }
+       //got a good demod
+       uint32_t raw1 = bytebits_to_byte(DemodBuffer+ans, 32);
+       uint32_t raw2 = bytebits_to_byte(DemodBuffer+ans+32, 32);
+       uint32_t cardid = bytebits_to_byte(DemodBuffer+ans+24, 32);
+       uint8_t  checksum = bytebits_to_byte(DemodBuffer+ans+32+24, 8);
+       PrintAndLog("Viking Tag Found: Card ID %08X, Checksum: %02X", cardid, (unsigned int) checksum);
+       PrintAndLog("Raw: %08X%08X", raw1,raw2);
+       setDemodBuf(DemodBuffer+ans, 64, 0);
+       return 1;
+}
+
 //by marshmellow - see ASKDemod
 int Cmdaskrawdemod(const char *Cmd)
 {
@@ -850,19 +937,21 @@ int CmdDetectClockRate(const char *Cmd)
 
 char *GetFSKType(uint8_t fchigh, uint8_t fclow, uint8_t invert)
 {
-       char *fskType;
+       static char fType[8];
+       memset(fType, 0x00, 8);
+       char *fskType = fType;
        if (fchigh==10 && fclow==8){
                if (invert) //fsk2a
-                       fskType = "FSK2a";
+                       memcpy(fskType, "FSK2a", 5);
                else //fsk2
-                       fskType = "FSK2";
+                       memcpy(fskType, "FSK2", 4);
        } else if (fchigh == 8 && fclow == 5) {
                if (invert)
-                       fskType = "FSK1";
+                       memcpy(fskType, "FSK1", 4);
                else
-                       fskType = "FSK1a";
+                       memcpy(fskType, "FSK1a", 5);
        } else {
-               fskType = "FSK??";
+               memcpy(fskType, "FSK??", 5);
        }
        return fskType;
 }
@@ -874,55 +963,53 @@ char *GetFSKType(uint8_t fchigh, uint8_t fclow, uint8_t invert)
 int FSKrawDemod(const char *Cmd, bool verbose)
 {
        //raw fsk demod  no manchester decoding no start bit finding just get binary from wave
+       uint8_t rfLen, invert, fchigh, fclow;
        //set defaults
-       int rfLen = 0;
-       int invert = 0;
-       int fchigh = 0;
-       int fclow = 0;
-
        //set options from parameters entered with the command
-       sscanf(Cmd, "%i %i %i %i", &rfLen, &invert, &fchigh, &fclow);
+       rfLen = param_get8(Cmd, 0);
+       invert = param_get8(Cmd, 1);
+       fchigh = param_get8(Cmd, 2);
+       fclow = param_get8(Cmd, 3);
 
        if (strlen(Cmd)>0 && strlen(Cmd)<=2) {
-                if (rfLen==1){
+               if (rfLen==1) {
                        invert = 1;   //if invert option only is used
                        rfLen = 0;
-                }
+               }
        }
-
        uint8_t BitStream[MAX_GRAPH_TRACE_LEN]={0};
        size_t BitLen = getFromGraphBuf(BitStream);
        if (BitLen==0) return 0;
        //get field clock lengths
        uint16_t fcs=0;
-       if (fchigh==0 || fclow == 0){
+       if (!fchigh || !fclow) {
                fcs = countFC(BitStream, BitLen, 1);
-               if (fcs==0){
-                       fchigh=10;
-                       fclow=8;
-               }else{
-                       fchigh = (fcs >> 8) & 0xFF;
-                       fclow = fcs & 0xFF;
+               if (!fcs) {
+                       fchigh = 10;
+                       fclow = 8;
+               } else {
+                       fchigh = (fcs >> 8) & 0x00FF;
+                       fclow = fcs & 0x00FF;
                }
        }
        //get bit clock length
-       if (rfLen==0){
+       if (!rfLen) {
                rfLen = detectFSKClk(BitStream, BitLen, fchigh, fclow);
-               if (rfLen == 0) rfLen = 50;
+               if (!rfLen) rfLen = 50;
        }
-       int size = fskdemod(BitStream,BitLen,(uint8_t)rfLen,(uint8_t)invert,(uint8_t)fchigh,(uint8_t)fclow);
-       if (size>0){
+       int size = fskdemod(BitStream, BitLen, rfLen, invert, fchigh, fclow);
+       if (size > 0) {
                setDemodBuf(BitStream,size,0);
 
                // Now output the bitstream to the scrollback by line of 16 bits
                if (verbose || g_debugMode) {
-                       PrintAndLog("\nUsing Clock:%d, invert:%d, fchigh:%d, fclow:%d", rfLen, invert, fchigh, fclow);
+                       PrintAndLog("\nUsing Clock:%u, invert:%u, fchigh:%u, fclow:%u", (unsigned int)rfLen, (unsigned int)invert, (unsigned int)fchigh, (unsigned int)fclow);
                        PrintAndLog("%s decoded bitstream:",GetFSKType(fchigh,fclow,invert));
                        printDemodBuff();
                }
 
                return 1;
-       } else{
+       } else {
                if (g_debugMode) PrintAndLog("no FSK data found");
        }
        return 0;
@@ -1094,8 +1181,6 @@ int CmdFSKdemodParadox(const char *Cmd)
 //print ioprox ID and some format details
 int CmdFSKdemodIO(const char *Cmd)
 {
-       //raw fsk demod no manchester decoding no start bit finding just get binary from wave
-       //set defaults
        int idx=0;
        //something in graphbuffer?
        if (GraphTraceLen < 65) {
@@ -1184,11 +1269,6 @@ int CmdFSKdemodIO(const char *Cmd)
 //print full AWID Prox ID and some bit format details if found
 int CmdFSKdemodAWID(const char *Cmd)
 {
-
-       //int verbose=1;
-       //sscanf(Cmd, "%i", &verbose);
-
-       //raw fsk demod no manchester decoding no start bit finding just get binary from wave
        uint8_t BitStream[MAX_GRAPH_TRACE_LEN]={0};
        size_t size = getFromGraphBuf(BitStream);
        if (size==0) return 0;
@@ -1387,7 +1467,6 @@ int CmdFSKdemodPyramid(const char *Cmd)
        uint32_t fc = 0;
        uint32_t cardnum = 0;
        uint32_t code1 = 0;
-       //uint32_t code2 = 0;
        if (fmtLen==26){
                fc = bytebits_to_byte(BitStream+73, 8);
                cardnum = bytebits_to_byte(BitStream+81, 16);
@@ -1421,6 +1500,98 @@ int CmdFSKdemodPyramid(const char *Cmd)
        return 1;
 }
 
+// FDX-B ISO11784/85 demod  (aka animal tag)  BIPHASE, inverted, rf/32,  with preamble of 00000000001 (128bits)
+// 8 databits + 1 parity (1)
+// CIITT 16 chksum
+// NATIONAL CODE, ICAR database
+// COUNTRY CODE (ISO3166) or http://cms.abvma.ca/uploads/ManufacturersISOsandCountryCodes.pdf
+// FLAG (animal/non-animal)
+/*
+38 IDbits   
+10 country code 
+1 extra app bit
+14 reserved bits
+1 animal bit
+16 ccitt CRC chksum over 64bit ID CODE.
+24 appli bits.
+
+-- sample: 985121004515220  [ 37FF65B88EF94 ]
+*/
+int CmdFDXBdemodBI(const char *Cmd){
+
+       int invert = 1;
+       int clk = 32;           
+       int errCnt = 0;
+       int maxErr = 0;
+       uint8_t BitStream[MAX_DEMOD_BUF_LEN];   
+       size_t size = getFromGraphBuf(BitStream);       
+       
+       errCnt = askdemod(BitStream, &size, &clk, &invert, maxErr, 0, 0);
+       if ( errCnt < 0 || errCnt > maxErr ) { 
+               if (g_debugMode) PrintAndLog("DEBUG: no data or error found %d, clock: %d", errCnt, clk);
+               return 0;
+       }
+
+       errCnt = BiphaseRawDecode(BitStream, &size, maxErr, 1);
+       if (errCnt < 0 || errCnt > maxErr ) {
+               if (g_debugMode) PrintAndLog("Error BiphaseRawDecode: %d", errCnt);
+               return 0;
+       } 
+
+       int preambleIndex = FDXBdemodBI(BitStream, &size);
+       if (preambleIndex < 0){
+               if (g_debugMode) PrintAndLog("Error FDXBDemod , no startmarker found :: %d",preambleIndex);
+               return 0;
+       }
+       if (size != 128) {
+               if (g_debugMode) PrintAndLog("Error incorrect data length found");
+               return 0;
+       }
+
+       setDemodBuf(BitStream, 128, preambleIndex);
+
+       // remove marker bits (1's every 9th digit after preamble) (pType = 2)
+       size = removeParity(BitStream, preambleIndex + 11, 9, 2, 117);
+       if ( size != 104 ) {
+               if (g_debugMode) PrintAndLog("Error removeParity:: %d", size);
+               return 0;
+       }
+       if (g_debugMode) {
+               char *bin = sprint_bin_break(BitStream,size,16);
+               PrintAndLog("DEBUG BinStream:\n%s",bin);
+       }
+       PrintAndLog("\nFDX-B / ISO 11784/5 Animal Tag ID Found:");
+       if (g_debugMode) PrintAndLog("Start marker %d;   Size %d", preambleIndex, size);
+
+       //got a good demod
+       uint64_t NationalCode = ((uint64_t)(bytebits_to_byteLSBF(BitStream+32,6)) << 32) | bytebits_to_byteLSBF(BitStream,32);
+       uint32_t countryCode = bytebits_to_byteLSBF(BitStream+38,10);
+       uint8_t dataBlockBit = BitStream[48];
+       uint32_t reservedCode = bytebits_to_byteLSBF(BitStream+49,14);
+       uint8_t animalBit = BitStream[63];
+       uint32_t crc16 = bytebits_to_byteLSBF(BitStream+64,16);
+       uint32_t extended = bytebits_to_byteLSBF(BitStream+80,24);
+
+       uint64_t rawid = ((uint64_t)bytebits_to_byte(BitStream,32)<<32) | bytebits_to_byte(BitStream+32,32);
+       uint8_t raw[8];
+       num_to_bytes(rawid, 8, raw);
+
+       if (g_debugMode) PrintAndLog("Raw ID Hex: %s", sprint_hex(raw,8));
+
+       uint16_t calcCrc = crc16_ccitt_kermit(raw, 8);
+       PrintAndLog("Animal ID:     %04u-%012llu", countryCode, NationalCode);
+       PrintAndLog("National Code: %012llu", NationalCode);
+       PrintAndLog("CountryCode:   %04u", countryCode);
+       PrintAndLog("Extended Data: %s", dataBlockBit ? "True" : "False");
+       PrintAndLog("reserved Code: %u", reservedCode);
+       PrintAndLog("Animal Tag:    %s", animalBit ? "True" : "False");
+       PrintAndLog("CRC:           0x%04X - [%04X] - %s", crc16, calcCrc, (calcCrc == crc16) ? "Passed" : "Failed");
+       PrintAndLog("Extended:      0x%X\n", extended);
+       
+       return 1;
+}
+
+
 //by marshmellow
 //attempt to psk1 demod graph buffer
 int PSKDemod(const char *Cmd, bool verbose)
@@ -1434,17 +1605,20 @@ int PSKDemod(const char *Cmd, bool verbose)
                clk=0;
        }
        if (invert != 0 && invert != 1) {
-               if (verbose) PrintAndLog("Invalid argument: %s", Cmd);
+               if (g_debugMode || verbose) PrintAndLog("Invalid argument: %s", Cmd);
                return 0;
        }
        uint8_t BitStream[MAX_GRAPH_TRACE_LEN]={0};
        size_t BitLen = getFromGraphBuf(BitStream);
-       if (BitLen==0) return -1;
+       if (BitLen==0) return 0;
        uint8_t carrier=countFC(BitStream, BitLen, 0);
        if (carrier!=2 && carrier!=4 && carrier!=8){
                //invalid carrier
                return 0;
        }
+       if (g_debugMode){
+               PrintAndLog("Carrier: rf/%d",carrier);
+       }
        int errCnt=0;
        errCnt = pskRawDemod(BitStream, &BitLen, &clk, &invert);
        if (errCnt > maxErr){
@@ -1484,61 +1658,33 @@ int CmdIndalaDecode(const char *Cmd)
                return 0;
        }
        uint8_t invert=0;
-       ans = indala26decode(DemodBuffer, &DemodBufferLen, &invert);
-       if (ans < 1) {
+       size_t size = DemodBufferLen;
+       size_t startIdx = indala26decode(DemodBuffer, &size, &invert);
+       if (startIdx < 1 || size > 224) {
                if (g_debugMode==1)
                        PrintAndLog("Error2: %d",ans);
                return -1;
        }
-       char showbits[251]={0x00};
+       setDemodBuf(DemodBuffer, size, startIdx);
        if (invert)
                if (g_debugMode==1)
                        PrintAndLog("Had to invert bits");
 
+       PrintAndLog("BitLen: %d",DemodBufferLen);
        //convert UID to HEX
        uint32_t uid1, uid2, uid3, uid4, uid5, uid6, uid7;
-       int idx;
-       uid1=0;
-       uid2=0;
-       PrintAndLog("BitLen: %d",DemodBufferLen);
-       if (DemodBufferLen==64){
-               for( idx=0; idx<64; idx++) {
-                       uid1=(uid1<<1)|(uid2>>31);
-                       if (DemodBuffer[idx] == 0) {
-                               uid2=(uid2<<1)|0;
-                               showbits[idx]='0';
-                       } else {
-                               uid2=(uid2<<1)|1;
-                               showbits[idx]='1';
-                       }
-               }
-               showbits[idx]='\0';
-               PrintAndLog("Indala UID=%s (%x%08x)", showbits, uid1, uid2);
-       }
-       else {
-               uid3=0;
-               uid4=0;
-               uid5=0;
-               uid6=0;
-               uid7=0;
-               for( idx=0; idx<DemodBufferLen; idx++) {
-                       uid1=(uid1<<1)|(uid2>>31);
-                       uid2=(uid2<<1)|(uid3>>31);
-                       uid3=(uid3<<1)|(uid4>>31);
-                       uid4=(uid4<<1)|(uid5>>31);
-                       uid5=(uid5<<1)|(uid6>>31);
-                       uid6=(uid6<<1)|(uid7>>31);
-                       if (DemodBuffer[idx] == 0) {
-                               uid7=(uid7<<1)|0;
-                               showbits[idx]='0';
-                       }
-                       else {
-                               uid7=(uid7<<1)|1;
-                               showbits[idx]='1';
-                       }
-               }
-               showbits[idx]='\0';
-               PrintAndLog("Indala UID=%s (%x%08x%08x%08x%08x%08x%08x)", showbits, uid1, uid2, uid3, uid4, uid5, uid6, uid7);
+       uid1=bytebits_to_byte(DemodBuffer,32);
+       uid2=bytebits_to_byte(DemodBuffer+32,32);
+       if (DemodBufferLen==64) {
+               PrintAndLog("Indala UID=%s (%x%08x)", sprint_bin_break(DemodBuffer,DemodBufferLen,16), uid1, uid2);
+       } else {
+               uid3=bytebits_to_byte(DemodBuffer+64,32);
+               uid4=bytebits_to_byte(DemodBuffer+96,32);
+               uid5=bytebits_to_byte(DemodBuffer+128,32);
+               uid6=bytebits_to_byte(DemodBuffer+160,32);
+               uid7=bytebits_to_byte(DemodBuffer+192,32);
+               PrintAndLog("Indala UID=%s (%x%08x%08x%08x%08x%08x%08x)", 
+                   sprint_bin_break(DemodBuffer,DemodBufferLen,16), uid1, uid2, uid3, uid4, uid5, uid6, uid7);
        }
        if (g_debugMode){
                PrintAndLog("DEBUG: printing demodbuffer:");
@@ -1608,7 +1754,7 @@ int NRZrawDemod(const char *Cmd, bool verbose)
        size_t BitLen = getFromGraphBuf(BitStream);
        if (BitLen==0) return 0;
        int errCnt=0;
-       errCnt = nrzRawDemod(BitStream, &BitLen, &clk, &invert, maxErr);
+       errCnt = nrzRawDemod(BitStream, &BitLen, &clk, &invert);
        if (errCnt > maxErr){
                if (g_debugMode) PrintAndLog("Too many errors found, clk: %d, invert: %d, numbits: %d, errCnt: %d",clk,invert,BitLen,errCnt);
                return 0;
@@ -1831,26 +1977,14 @@ int CmdHpf(const char *Cmd)
        RepaintGraphWindow();
        return 0;
 }
-typedef struct {
-       uint8_t * buffer;
-       uint32_t numbits;
-       uint32_t position;
-}BitstreamOut;
-
-bool _headBit( BitstreamOut *stream)
-{
-       int bytepos = stream->position >> 3; // divide by 8
-       int bitpos = (stream->position++) & 7; // mask out 00000111
-       return (*(stream->buffer + bytepos) >> (7-bitpos)) & 1;
-}
 
-uint8_t getByte(uint8_t bits_per_sample, BitstreamOut* b)
+uint8_t getByte(uint8_t bits_per_sample, BitstreamIn* b)
 {
        int i;
        uint8_t val = 0;
        for(i =0 ; i < bits_per_sample; i++)
        {
-               val |= (_headBit(b) << (7-i));
+               val |= (headBit(b) << (7-i));
        }
        return val;
 }
@@ -1866,10 +2000,7 @@ int getSamples(const char *Cmd, bool silent)
 
        int n = strtol(Cmd, NULL, 0);
 
-       if (n == 0)
-               n = sizeof(got);
-
-       if (n > sizeof(got))
+       if (n == 0 || n > sizeof(got))
                n = sizeof(got);
 
        PrintAndLog("Reading %d bytes from device memory\n", n);
@@ -1890,7 +2021,7 @@ int getSamples(const char *Cmd, bool silent)
        if(bits_per_sample < 8)
        {
                PrintAndLog("Unpacking...");
-               BitstreamOut bout = { got, bits_per_sample * n,  0};
+               BitstreamIn bout = { got, bits_per_sample * n,  0};
                int j =0;
                for (j = 0; j * bits_per_sample < n * 8 && j < n; j++) {
                        uint8_t sample = getByte(bits_per_sample, &bout);
@@ -2153,18 +2284,114 @@ int CmdZerocrossings(const char *Cmd)
        return 0;
 }
 
+int usage_data_bin2hex(){
+               PrintAndLog("Usage: data bin2hex <binary_digits>");
+               PrintAndLog("       This function will ignore all characters not 1 or 0 (but stop reading on whitespace)");
+               return 0;
+}
+
+/**
+ * @brief Utility for conversion via cmdline.
+ * @param Cmd
+ * @return
+ */
+int Cmdbin2hex(const char *Cmd)
+{
+       int bg =0, en =0;
+       if(param_getptr(Cmd, &bg, &en, 0))
+       {
+               return usage_data_bin2hex();
+       }
+       //Number of digits supplied as argument
+       size_t length = en  - bg +1;
+       size_t bytelen = (length+7) / 8;
+       uint8_t* arr = (uint8_t *) malloc(bytelen);
+       memset(arr, 0, bytelen);
+       BitstreamOut bout = { arr, 0, 0 };
+
+       for(; bg <= en ;bg++)
+       {
+               char c = Cmd[bg];
+               if( c == '1')   pushBit(&bout, 1);
+               else if( c == '0')      pushBit(&bout, 0);
+               else PrintAndLog("Ignoring '%c'", c);
+       }
+
+       if(bout.numbits % 8 != 0)
+       {
+               printf("[padded with %d zeroes]\n", 8-(bout.numbits % 8));
+       }
+
+       //Uses printf instead of PrintAndLog since the latter
+       // adds linebreaks to each printout - this way was more convenient since we don't have to
+       // allocate a string and write to that first...
+       for(size_t x = 0; x  < bytelen ; x++)
+       {
+               printf("%02X", arr[x]);
+       }
+       printf("\n");
+       free(arr);
+       return 0;
+}
+
+int usage_data_hex2bin(){
+
+       PrintAndLog("Usage: data bin2hex <binary_digits>");
+       PrintAndLog("       This function will ignore all non-hexadecimal characters (but stop reading on whitespace)");
+       return 0;
+
+}
+
+int Cmdhex2bin(const char *Cmd)
+{
+       int bg =0, en =0;
+       if(param_getptr(Cmd, &bg, &en, 0))
+       {
+               return usage_data_hex2bin();
+       }
+
+
+       while(bg <= en )
+       {
+               char x = Cmd[bg++];
+               // capitalize
+               if (x >= 'a' && x <= 'f')
+                       x -= 32;
+               // convert to numeric value
+               if (x >= '0' && x <= '9')
+                       x -= '0';
+               else if (x >= 'A' && x <= 'F')
+                       x -= 'A' - 10;
+               else
+                       continue;
+
+               //Uses printf instead of PrintAndLog since the latter
+               // adds linebreaks to each printout - this way was more convenient since we don't have to
+               // allocate a string and write to that first...
+
+               for(int i= 0 ; i < 4 ; ++i)
+                       printf("%d",(x >> (3 - i)) & 1);
+       }
+       printf("\n");
+
+       return 0;
+}
+
 static command_t CommandTable[] =
 {
        {"help",            CmdHelp,            1, "This help"},
        {"askedgedetect",   CmdAskEdgeDetect,   1, "[threshold] Adjust Graph for manual ask demod using the length of sample differences to detect the edge of a wave (use 20-45, def:25)"},
        {"askem410xdemod",  CmdAskEM410xDemod,  1, "[clock] [invert<0|1>] [maxErr] -- Demodulate an EM410x tag from GraphBuffer (args optional)"},
        {"askgproxiidemod", CmdG_Prox_II_Demod, 1, "Demodulate a G Prox II tag from GraphBuffer"},
+       {"askvikingdemod",  CmdVikingDemod,     1, "Demodulate a Viking tag from GraphBuffer"},
        {"autocorr",        CmdAutoCorr,        1, "[window length] [g] -- Autocorrelation over window - g to save back to GraphBuffer (overwrite)"},
        {"biphaserawdecode",CmdBiphaseDecodeRaw,1, "[offset] [invert<0|1>] [maxErr] -- Biphase decode bin stream in DemodBuffer (offset = 0|1 bits to shift the decode start)"},
+       {"bin2hex",         Cmdbin2hex,         1, "bin2hex <digits>     -- Converts binary to hexadecimal"},
        {"bitsamples",      CmdBitsamples,      0, "Get raw samples as bitstring"},
        {"buffclear",       CmdBuffClear,       1, "Clear sample buffer and graph window"},
        {"dec",             CmdDec,             1, "Decimate samples"},
        {"detectclock",     CmdDetectClockRate, 1, "[modulation] Detect clock rate of wave in GraphBuffer (options: 'a','f','n','p' for ask, fsk, nrz, psk respectively)"},
+       {"fdxbdemod",       CmdFDXBdemodBI    , 1, "Demodulate a FDX-B ISO11784/85 Biphase tag from GraphBuffer"},
        {"fskawiddemod",    CmdFSKdemodAWID,    1, "Demodulate an AWID FSK tag from GraphBuffer"},
        //{"fskfcdetect",   CmdFSKfcDetect,     1, "Try to detect the Field Clock of an FSK wave"},
        {"fskhiddemod",     CmdFSKdemodHID,     1, "Demodulate a HID FSK tag from GraphBuffer"},
@@ -2174,6 +2401,7 @@ static command_t CommandTable[] =
        {"getbitstream",    CmdGetBitStream,    1, "Convert GraphBuffer's >=1 values to 1 and <1 to 0"},
        {"grid",            CmdGrid,            1, "<x> <y> -- overlay grid on graph window, use zero value to turn off either"},
        {"hexsamples",      CmdHexsamples,      0, "<bytes> [<offset>] -- Dump big buffer as hex bytes"},
+       {"hex2bin",         Cmdhex2bin,         1, "hex2bin <hexadecimal> -- Converts hexadecimal to binary"},
        {"hide",            CmdHide,            1, "Hide graph window"},
        {"hpf",             CmdHpf,             1, "Remove DC offset from trace"},
        {"load",            CmdLoad,            1, "<filename> -- Load trace (to graph window"},
@@ -2182,14 +2410,14 @@ static command_t CommandTable[] =
        {"manrawdecode",    Cmdmandecoderaw,    1, "[invert] [maxErr] -- Manchester decode binary stream in DemodBuffer"},
        {"norm",            CmdNorm,            1, "Normalize max/min to +/-128"},
        {"plot",            CmdPlot,            1, "Show graph window (hit 'h' in window for keystroke help)"},
-       {"printdemodbuffer",CmdPrintDemodBuff,  1, "[x] -- print the data in the DemodBuffer - 'x' for hex output"},
+       {"printdemodbuffer",CmdPrintDemodBuff,  1, "[x] [o] <offset> [l] <length> -- print the data in the DemodBuffer - 'x' for hex output"},
        {"pskindalademod",  CmdIndalaDecode,    1, "[clock] [invert<0|1>] -- Demodulate an indala tag (PSK1) from GraphBuffer (args optional)"},
        {"psknexwatchdemod",CmdPSKNexWatch,     1, "Demodulate a NexWatch tag (nexkey, quadrakey) (PSK1) from GraphBuffer"},
        {"rawdemod",        CmdRawDemod,        1, "[modulation] ... <options> -see help (h option) -- Demodulate the data in the GraphBuffer and output binary"},  
        {"samples",         CmdSamples,         0, "[512 - 40000] -- Get raw samples for graph window (GraphBuffer)"},
        {"save",            CmdSave,            1, "<filename> -- Save trace (from graph window)"},
        {"scale",           CmdScale,           1, "<int> -- Set cursor display scale"},
-       {"setdebugmode",    CmdSetDebugMode,    1, "<0|1> -- Turn on or off Debugging Mode for demods"},
+       {"setdebugmode",    CmdSetDebugMode,    1, "<0|1|2> -- Turn on or off Debugging Level for lf demods"},
        {"shiftgraphzero",  CmdGraphShiftZero,  1, "<shift> -- Shift 0 for Graphed wave + or - shift value"},
        {"dirthreshold",    CmdDirectionalThreshold,   1, "<thres up> <thres down> -- Max rising higher up-thres/ Min falling lower down-thres, keep rest as prev."},
        {"tune",            CmdTuneSamples,     0, "Get hw tune samples for graph window"},
index c62307368d6ef3965a3d7dad3ae2842b9afc36d5..20bdbd2b193d5e4de45b94310a1f3b54cdddc6a1 100644 (file)
@@ -17,6 +17,7 @@ int CmdData(const char *Cmd);
 void printDemodBuff(void);
 void setDemodBuf(uint8_t *buff, size_t size, size_t startIdx);
 int CmdAskEM410xDemod(const char *Cmd);
+int CmdVikingDemod(const char *Cmd);
 int CmdG_Prox_II_Demod(const char *Cmd);
 int Cmdaskrawdemod(const char *Cmd);
 int Cmdaskmandemod(const char *Cmd);
@@ -27,6 +28,7 @@ int CmdBitsamples(const char *Cmd);
 int CmdBuffClear(const char *Cmd);
 int CmdDec(const char *Cmd);
 int CmdDetectClockRate(const char *Cmd);
+int CmdFDXBdemodBI(const char *Cmd);
 int CmdFSKdemodAWID(const char *Cmd);
 int CmdFSKdemodHID(const char *Cmd);
 int CmdFSKdemodIO(const char *Cmd);
@@ -61,6 +63,7 @@ int AskEm410xDecode(bool verbose, uint32_t *hi, uint64_t *lo );
 int AskEm410xDemod(const char *Cmd, uint32_t *hi, uint64_t *lo, bool verbose);
 int ASKbiphaseDemod(const char *Cmd, bool verbose);
 int ASKDemod(const char *Cmd, bool verbose, bool emSearch, uint8_t askType);
+int ASKDemod_ext(const char *Cmd, bool verbose, bool emSearch, uint8_t askType, bool *stCheck);
 int FSKrawDemod(const char *Cmd, bool verbose);
 int PSKDemod(const char *Cmd, bool verbose);
 int NRZrawDemod(const char *Cmd, bool verbose);
index 16f7bb0f39f661c180723bd0c52bd1306407f8bd..e3671a4267fa1c7cb0a2710d48ddc960f7f0badf 100644 (file)
@@ -23,6 +23,7 @@
 #include "cmdhficlass.h"
 #include "cmdhfmf.h"
 #include "cmdhfmfu.h"
+#include "cmdhftopaz.h"
 #include "protocols.h"
 
 static int CmdHelp(const char *Cmd);
@@ -187,6 +188,26 @@ void annotateIso15693(char *exp, size_t size, uint8_t* cmd, uint8_t cmdsize)
        }
 }
 
+
+void annotateTopaz(char *exp, size_t size, uint8_t* cmd, uint8_t cmdsize)
+{
+       switch(cmd[0]) {
+               case TOPAZ_REQA                                         :snprintf(exp, size, "REQA");break;
+               case TOPAZ_WUPA                                         :snprintf(exp, size, "WUPA");break;
+               case TOPAZ_RID                                          :snprintf(exp, size, "RID");break;
+               case TOPAZ_RALL                                         :snprintf(exp, size, "RALL");break;
+               case TOPAZ_READ                                         :snprintf(exp, size, "READ");break;
+               case TOPAZ_WRITE_E                                      :snprintf(exp, size, "WRITE-E");break;
+               case TOPAZ_WRITE_NE                                     :snprintf(exp, size, "WRITE-NE");break;
+               case TOPAZ_RSEG                                         :snprintf(exp, size, "RSEG");break;
+               case TOPAZ_READ8                                        :snprintf(exp, size, "READ8");break;
+               case TOPAZ_WRITE_E8                                     :snprintf(exp, size, "WRITE-E8");break;
+               case TOPAZ_WRITE_NE8                            :snprintf(exp, size, "WRITE-NE8");break;
+               default:                            snprintf(exp,size,"?"); break;
+       }
+}
+
+
 /**
 06 00 = INITIATE
 0E xx = SELECT ID (xx = Chip-ID)
@@ -218,7 +239,34 @@ void annotateIso14443b(char *exp, size_t size, uint8_t* cmd, uint8_t cmdsize)
 }
 
 /**
- * @brief iso14443B_CRC_Ok Checks CRC in command or response
+ * @brief iso14443A_CRC_check Checks CRC in command or response
+ * @param isResponse
+ * @param data
+ * @param len
+ * @return  0 : CRC-command, CRC not ok
+ *          1 : CRC-command, CRC ok
+ *          2 : Not crc-command
+ */
+
+uint8_t iso14443A_CRC_check(bool isResponse, uint8_t* data, uint8_t len)
+{
+       uint8_t b1,b2;
+
+       if(len <= 2) return 2;
+
+       if(isResponse & (len < 6)) return 2;
+       
+       ComputeCrc14443(CRC_14443_A, data, len-2, &b1, &b2);
+       if (b1 != data[len-2] || b2 != data[len-1]) {
+               return 0;
+       } else {
+               return 1;
+       }
+}
+
+
+/**
+ * @brief iso14443B_CRC_check Checks CRC in command or response
  * @param isResponse
  * @param data
  * @param len
@@ -235,9 +283,10 @@ uint8_t iso14443B_CRC_check(bool isResponse, uint8_t* data, uint8_t len)
 
        ComputeCrc14443(CRC_14443_B, data, len-2, &b1, &b2);
        if(b1 != data[len-2] || b2 != data[len-1]) {
-         return 0;
+               return 0;
+       } else {
+               return 1;
        }
-       return 1;
 }
 
 /**
@@ -301,11 +350,66 @@ uint8_t iclass_CRC_check(bool isResponse, uint8_t* data, uint8_t len)
        }
 }
 
-uint16_t printTraceLine(uint16_t tracepos, uint16_t traceLen, uint8_t *trace, uint8_t protocol, bool showWaitCycles)
+
+bool is_last_record(uint16_t tracepos, uint8_t *trace, uint16_t traceLen)
+{
+       return(tracepos + sizeof(uint32_t) + sizeof(uint16_t) + sizeof(uint16_t) >= traceLen);
+}
+
+
+bool next_record_is_response(uint16_t tracepos, uint8_t *trace)
 {
-       bool isResponse;
-       uint16_t duration, data_len, parity_len;
+       uint16_t next_records_datalen = *((uint16_t *)(trace + tracepos + sizeof(uint32_t) + sizeof(uint16_t)));
+       
+       return(next_records_datalen & 0x8000);
+}
+
+
+bool merge_topaz_reader_frames(uint32_t timestamp, uint32_t *duration, uint16_t *tracepos, uint16_t traceLen, uint8_t *trace, uint8_t *frame, uint8_t *topaz_reader_command, uint16_t *data_len)
+{
+
+#define MAX_TOPAZ_READER_CMD_LEN       16
+
+       uint32_t last_timestamp = timestamp + *duration;
+
+       if ((*data_len != 1) || (frame[0] == TOPAZ_WUPA) || (frame[0] == TOPAZ_REQA)) return false;
+
+       memcpy(topaz_reader_command, frame, *data_len);
+
+       while (!is_last_record(*tracepos, trace, traceLen) && !next_record_is_response(*tracepos, trace)) {
+               uint32_t next_timestamp = *((uint32_t *)(trace + *tracepos));
+               *tracepos += sizeof(uint32_t);
+               uint16_t next_duration = *((uint16_t *)(trace + *tracepos));
+               *tracepos += sizeof(uint16_t);
+               uint16_t next_data_len = *((uint16_t *)(trace + *tracepos)) & 0x7FFF;
+               *tracepos += sizeof(uint16_t);
+               uint8_t *next_frame = (trace + *tracepos);
+               *tracepos += next_data_len;
+               if ((next_data_len == 1) && (*data_len + next_data_len <= MAX_TOPAZ_READER_CMD_LEN)) {
+                       memcpy(topaz_reader_command + *data_len, next_frame, next_data_len);
+                       *data_len += next_data_len;
+                       last_timestamp = next_timestamp + next_duration;
+               } else {
+                       // rewind and exit
+                       *tracepos = *tracepos - next_data_len - sizeof(uint16_t) - sizeof(uint16_t) - sizeof(uint32_t);
+                       break;
+               }
+               uint16_t next_parity_len = (next_data_len-1)/8 + 1;
+               *tracepos += next_parity_len;
+       }
 
+       *duration = last_timestamp - timestamp;
+       
+       return true;
+}
+
+
+uint16_t printTraceLine(uint16_t tracepos, uint16_t traceLen, uint8_t *trace, uint8_t protocol, bool showWaitCycles, bool markCRCBytes)
+{
+       bool isResponse;
+       uint16_t data_len, parity_len;
+       uint32_t duration;
+       uint8_t topaz_reader_command[9];
        uint32_t timestamp, first_timestamp, EndOfTransmissionTimestamp;
        char explanation[30] = {0};
 
@@ -336,29 +440,31 @@ uint16_t printTraceLine(uint16_t tracepos, uint16_t traceLen, uint8_t *trace, ui
        uint8_t *parityBytes = trace + tracepos;
        tracepos += parity_len;
 
+       if (protocol == TOPAZ && !isResponse) {
+               // topaz reader commands come in 1 or 9 separate frames with 7 or 8 Bits each.
+               // merge them:
+               if (merge_topaz_reader_frames(timestamp, &duration, &tracepos, traceLen, trace, frame, topaz_reader_command, &data_len)) {
+                       frame = topaz_reader_command;
+               }
+       }
+       
        //Check the CRC status
        uint8_t crcStatus = 2;
 
        if (data_len > 2) {
-               uint8_t b1, b2;
-               if(protocol == ICLASS)
-               {
-                       crcStatus = iclass_CRC_check(isResponse, frame, data_len);
-
-               }else if (protocol == ISO_14443B)
-               {
-                       crcStatus = iso14443B_CRC_check(isResponse, frame, data_len);
-               }
-               else if (protocol == ISO_14443A){//Iso 14443a
-
-                       ComputeCrc14443(CRC_14443_A, frame, data_len-2, &b1, &b2);
-
-                       if (b1 != frame[data_len-2] || b2 != frame[data_len-1]) {
-                               if(!(isResponse & (data_len < 6)))
-                               {
-                                               crcStatus = 0;
-                               }
-                       }
+               switch (protocol) {
+                       case ICLASS:
+                               crcStatus = iclass_CRC_check(isResponse, frame, data_len);
+                               break;
+                       case ISO_14443B:
+                       case TOPAZ:
+                               crcStatus = iso14443B_CRC_check(isResponse, frame, data_len); 
+                               break;
+                       case ISO_14443A:
+                               crcStatus = iso14443A_CRC_check(isResponse, frame, data_len);
+                               break;
+                       default: 
+                               break;
                }
        }
        //0 CRC-command, CRC not ok
@@ -378,21 +484,24 @@ uint16_t printTraceLine(uint16_t tracepos, uint16_t traceLen, uint8_t *trace, ui
                        oddparity ^= (((frame[j] & 0xFF) >> k) & 0x01);
                }
                uint8_t parityBits = parityBytes[j>>3];
-               if (isResponse && (oddparity != ((parityBits >> (7-(j&0x0007))) & 0x01))) {
+               if (protocol != ISO_14443B && (isResponse || protocol == ISO_14443A) && (oddparity != ((parityBits >> (7-(j&0x0007))) & 0x01))) {
                        snprintf(line[j/16]+(( j % 16) * 4),110, "%02x! ", frame[j]);
-
                } else {
-                       snprintf(line[j/16]+(( j % 16) * 4),110, "%02x  ", frame[j]);
+                       snprintf(line[j/16]+(( j % 16) * 4), 110, " %02x ", frame[j]);
                }
 
        }
-       if(crcStatus == 1)
-       {//CRC-command
-               char *pos1 = line[(data_len-2)/16]+(((data_len-2) % 16) * 4)-1;
-               (*pos1) = '[';
-               char *pos2 = line[(data_len)/16]+(((data_len) % 16) * 4)-2;
-               (*pos2) = ']';
+
+       if (markCRCBytes) {
+               if(crcStatus == 0 || crcStatus == 1)
+               {//CRC-command
+                       char *pos1 = line[(data_len-2)/16]+(((data_len-2) % 16) * 4);
+                       (*pos1) = '[';
+                       char *pos2 = line[(data_len)/16]+(((data_len) % 16) * 4);
+                       sprintf(pos2, "%c", ']');
+               }
        }
+
        if(data_len == 0)
        {
                if(data_len == 0){
@@ -407,18 +516,19 @@ uint16_t printTraceLine(uint16_t tracepos, uint16_t traceLen, uint8_t *trace, ui
 
        if(!isResponse)
        {
-               if(protocol == ICLASS)
-                       annotateIclass(explanation,sizeof(explanation),frame,data_len);
-               else if (protocol == ISO_14443A)
-                       annotateIso14443a(explanation,sizeof(explanation),frame,data_len);
-               else if(protocol == ISO_14443B)
-                       annotateIso14443b(explanation,sizeof(explanation),frame,data_len);
+               switch(protocol) {
+                       case ICLASS:            annotateIclass(explanation,sizeof(explanation),frame,data_len); break;
+                       case ISO_14443A:        annotateIso14443a(explanation,sizeof(explanation),frame,data_len); break;
+                       case ISO_14443B:        annotateIso14443b(explanation,sizeof(explanation),frame,data_len); break;
+                       case TOPAZ:                     annotateTopaz(explanation,sizeof(explanation),frame,data_len); break;
+                       default:                        break;
+               }
        }
 
        int num_lines = MIN((data_len - 1)/16 + 1, 16);
        for (int j = 0; j < num_lines ; j++) {
                if (j == 0) {
-                       PrintAndLog(" %9d | %9d | %s | %-64s| %s| %s",
+                       PrintAndLog(" %10d | %10d | %s |%-64s | %s| %s",
                                (timestamp - first_timestamp),
                                (EndOfTransmissionTimestamp - first_timestamp),
                                (isResponse ? "Tag" : "Rdr"),
@@ -426,26 +536,22 @@ uint16_t printTraceLine(uint16_t tracepos, uint16_t traceLen, uint8_t *trace, ui
                                (j == num_lines-1) ? crc : "    ",
                                (j == num_lines-1) ? explanation : "");
                } else {
-                       PrintAndLog("           |           |     | %-64s| %s| %s",
+                       PrintAndLog("            |            |     |%-64s | %s| %s",
                                line[j],
-                               (j == num_lines-1)?crc:"    ",
+                               (j == num_lines-1) ? crc : "    ",
                                (j == num_lines-1) ? explanation : "");
                }
        }
 
-       if (tracepos + sizeof(uint32_t) + sizeof(uint16_t) + sizeof(uint16_t) > traceLen) return traceLen;
+       if (is_last_record(tracepos, trace, traceLen)) return traceLen;
        
-       bool next_isResponse = *((uint16_t *)(trace + tracepos + 6)) & 0x8000;
-
-       if (showWaitCycles && !isResponse && next_isResponse) {
+       if (showWaitCycles && !isResponse && next_record_is_response(tracepos, trace)) {
                uint32_t next_timestamp = *((uint32_t *)(trace + tracepos));
-               if (next_timestamp != 0x44444444) {
-                       PrintAndLog(" %9d | %9d | %s | fdt (Frame Delay Time): %d",
-                               (EndOfTransmissionTimestamp - first_timestamp),
-                               (next_timestamp - first_timestamp),
-                               "   ",
-                               (next_timestamp - EndOfTransmissionTimestamp));
-               }
+               PrintAndLog(" %9d | %9d | %s | fdt (Frame Delay Time): %d",
+                       (EndOfTransmissionTimestamp - first_timestamp),
+                       (next_timestamp - first_timestamp),
+                       "   ",
+                       (next_timestamp - EndOfTransmissionTimestamp));
        }
 
        return tracepos;
@@ -455,49 +561,52 @@ uint16_t printTraceLine(uint16_t tracepos, uint16_t traceLen, uint8_t *trace, ui
 int CmdHFList(const char *Cmd)
 {
        bool showWaitCycles = false;
+       bool markCRCBytes = false;
        char type[40] = {0};
        int tlen = param_getstr(Cmd,0,type);
-       char param = param_getchar(Cmd, 1);
+       char param1 = param_getchar(Cmd, 1);
+       char param2 = param_getchar(Cmd, 2);
        bool errors = false;
        uint8_t protocol = 0;
        //Validate params
-       if(tlen == 0)
-       {
+
+       if(tlen == 0) {
                errors = true;
        }
-       if(param == 'h' || (param !=0 && param != 'f'))
-       {
+
+       if(param1 == 'h'
+                       || (param1 != 0 && param1 != 'f' && param1 != 'c')
+                       || (param2 != 0 && param2 != 'f' && param2 != 'c')) {
                errors = true;
        }
-       if(!errors)
-       {
-               if(strcmp(type, "iclass") == 0)
-               {
+
+       if(!errors) {
+               if(strcmp(type, "iclass") == 0) {
                        protocol = ICLASS;
-               }else if(strcmp(type, "14a") == 0)
-               {
+               } else if(strcmp(type, "14a") == 0) {
                        protocol = ISO_14443A;
-               }
-               else if(strcmp(type, "14b") == 0)
-               {
+               } else if(strcmp(type, "14b") == 0)     {
                        protocol = ISO_14443B;
-               }else if(strcmp(type,"raw")== 0)
-               {
+               } else if(strcmp(type,"topaz")== 0) {
+                       protocol = TOPAZ;
+               } else if(strcmp(type,"raw")== 0) {
                        protocol = -1;//No crc, no annotations
-               }else{
+               } else {
                        errors = true;
                }
        }
 
        if (errors) {
                PrintAndLog("List protocol data in trace buffer.");
-               PrintAndLog("Usage:  hf list <protocol> [f]");
+               PrintAndLog("Usage:  hf list <protocol> [f][c]");
                PrintAndLog("    f      - show frame delay times as well");
+               PrintAndLog("    c      - mark CRC bytes");
                PrintAndLog("Supported <protocol> values:");
                PrintAndLog("    raw    - just show raw data without annotations");
                PrintAndLog("    14a    - interpret data as iso14443a communications");
                PrintAndLog("    14b    - interpret data as iso14443b communications");
                PrintAndLog("    iclass - interpret data as iclass communications");
+               PrintAndLog("    topaz  - interpret data as topaz communications");
                PrintAndLog("");
                PrintAndLog("example: hf list 14a f");
                PrintAndLog("example: hf list iclass");
@@ -505,10 +614,13 @@ int CmdHFList(const char *Cmd)
        }
 
 
-       if (param == 'f') {
+       if (param1 == 'f' || param2 == 'f') {
                showWaitCycles = true;
        }
 
+       if (param1 == 'c' || param2 == 'c') {
+               markCRCBytes = true;
+       }
 
        uint8_t *trace;
        uint16_t tracepos = 0;
@@ -537,12 +649,12 @@ int CmdHFList(const char *Cmd)
        PrintAndLog("iso14443a - All times are in carrier periods (1/13.56Mhz)");
        PrintAndLog("iClass    - Timings are not as accurate");
        PrintAndLog("");
-       PrintAndLog("     Start |       End | Src | Data (! denotes parity error)                                   | CRC | Annotation         |");
-       PrintAndLog("-----------|-----------|-----|-----------------------------------------------------------------|-----|--------------------|");
+       PrintAndLog("      Start |        End | Src | Data (! denotes parity error)                                   | CRC | Annotation         |");
+       PrintAndLog("------------|------------|-----|-----------------------------------------------------------------|-----|--------------------|");
 
        while(tracepos < traceLen)
        {
-               tracepos = printTraceLine(tracepos, traceLen, trace, protocol, showWaitCycles);
+               tracepos = printTraceLine(tracepos, traceLen, trace, protocol, showWaitCycles, markCRCBytes);
        }
 
        free(trace);
@@ -556,41 +668,51 @@ int CmdHFSearch(const char *Cmd){
        if (ans > 0) {
                PrintAndLog("\nValid ISO14443A Tag Found - Quiting Search\n");
                return ans;
-       } 
+       }
        ans = HFiClassReader("", false, false);
        if (ans) {
                PrintAndLog("\nValid iClass Tag (or PicoPass Tag) Found - Quiting Search\n");
                return ans;
        }
+       ans = HF14BInfo(false);
+       if (ans) {
+               PrintAndLog("\nValid ISO14443B Tag Found - Quiting Search\n");
+               return ans;
+       }
        ans = HF15Reader("", false);
        if (ans) {
                PrintAndLog("\nValid ISO15693 Tag Found - Quiting Search\n");
                return ans;
        }
+       PrintAndLog("\nno known/supported 13.56 MHz tags found\n");
+       return 0;
+}
 
-
-       //14b has issues currently...
-       //ans = CmdHF14BRead(Cmd);
-       //if (ans > 0) return ans;
-
+int CmdHFSnoop(const char *Cmd)
+{
+       char * pEnd;
+       UsbCommand c = {CMD_HF_SNIFFER, {strtol(Cmd, &pEnd,0),strtol(pEnd, &pEnd,0),0}};
+       SendCommand(&c);
        return 0;
 }
 
 static command_t CommandTable[] = 
 {
-  {"help",        CmdHelp,          1, "This help"},
-  {"14a",         CmdHF14A,         1, "{ ISO14443A RFIDs... }"},
-  {"14b",         CmdHF14B,         1, "{ ISO14443B RFIDs... }"},
-  {"15",          CmdHF15,          1, "{ ISO15693 RFIDs... }"},
-  {"epa",         CmdHFEPA,         1, "{ German Identification Card... }"},
-  {"legic",       CmdHFLegic,       0, "{ LEGIC RFIDs... }"},
-  {"iclass",      CmdHFiClass,      1, "{ ICLASS RFIDs... }"},
-  {"mf",          CmdHFMF,          1, "{ MIFARE RFIDs... }"},
-  {"mfu",         CmdHFMFUltra,     1, "{ MIFARE Ultralight RFIDs... }"},
-  {"tune",        CmdHFTune,        0, "Continuously measure HF antenna tuning"},
-  {"list",        CmdHFList,        1, "List protocol data in trace buffer"},
-  {"search",      CmdHFSearch,      1, "Search for known HF tags [preliminary]"},
-       {NULL, NULL, 0, NULL}
+       {"help",        CmdHelp,                1, "This help"},
+       {"14a",         CmdHF14A,               1, "{ ISO14443A RFIDs... }"},
+       {"14b",         CmdHF14B,               1, "{ ISO14443B RFIDs... }"},
+       {"15",          CmdHF15,                1, "{ ISO15693 RFIDs... }"},
+       {"epa",         CmdHFEPA,               1, "{ German Identification Card... }"},
+       {"legic",       CmdHFLegic,             0, "{ LEGIC RFIDs... }"},
+       {"iclass",      CmdHFiClass,    1, "{ ICLASS RFIDs... }"},
+       {"mf",          CmdHFMF,                1, "{ MIFARE RFIDs... }"},
+       {"mfu",         CmdHFMFUltra,   1, "{ MIFARE Ultralight RFIDs... }"},
+       {"topaz",       CmdHFTopaz,             1, "{ TOPAZ (NFC Type 1) RFIDs... }"},
+       {"tune",        CmdHFTune,              0, "Continuously measure HF antenna tuning"},
+       {"list",        CmdHFList,              1, "List protocol data in trace buffer"},
+       {"search",      CmdHFSearch,    1, "Search for known HF tags [preliminary]"},
+       {"snoop",   CmdHFSnoop,     0, "<samples to skip (10000)> <triggers to skip (1)> Generic HF Snoop"},
+       {NULL,          NULL,                   0, NULL}
 };
 
 int CmdHF(const char *Cmd)
index 9a761864b3fbc984ef21d839b0db886a69aeb647..81716db32c4e5d3842fe634af7b23c1b1884991f 100644 (file)
@@ -141,7 +141,7 @@ int CmdHF14AReader(const char *Cmd)
        iso14a_card_select_t card;
        memcpy(&card, (iso14a_card_select_t *)resp.d.asBytes, sizeof(iso14a_card_select_t));
 
-       uint64_t select_status = resp.arg[0];           // 0: couldn't read, 1: OK, with ATS, 2: OK, no ATS
+       uint64_t select_status = resp.arg[0];           // 0: couldn't read, 1: OK, with ATS, 2: OK, no ATS, 3: proprietary Anticollision
        
        if(select_status == 0) {
                if (Cmd[0] != 's') PrintAndLog("iso14443a card select failed");
@@ -352,16 +352,16 @@ int CmdHF14AReader(const char *Cmd)
                                                PrintAndLog("                     x0 -> <1 kByte");
                                                break;
                                        case 0x01:
-                                               PrintAndLog("                     x0 -> 1 kByte");
+                                               PrintAndLog("                     x1 -> 1 kByte");
                                                break;
                                        case 0x02:
-                                               PrintAndLog("                     x0 -> 2 kByte");
+                                               PrintAndLog("                     x2 -> 2 kByte");
                                                break;
                                        case 0x03:
-                                               PrintAndLog("                     x0 -> 4 kByte");
+                                               PrintAndLog("                     x3 -> 4 kByte");
                                                break;
                                        case 0x04:
-                                               PrintAndLog("                     x0 -> 8 kByte");
+                                               PrintAndLog("                     x4 -> 8 kByte");
                                                break;
                                }
                                switch (card.ats[pos + 3] & 0xf0) {
@@ -565,20 +565,22 @@ int CmdHF14ASnoop(const char *Cmd) {
   return 0;
 }
 
+
 int CmdHF14ACmdRaw(const char *cmd) {
     UsbCommand c = {CMD_READER_ISO_14443a, {0, 0, 0}};
-    uint8_t reply=1;
-    uint8_t crc=0;
-    uint8_t power=0;
-    uint8_t active=0;
-    uint8_t active_select=0;
-    uint16_t numbits=0;
-       uint32_t timeout=0;
-       uint8_t bTimeout=0;
+    bool reply=1;
+    bool crc = FALSE;
+    bool power = FALSE;
+    bool active = FALSE;
+    bool active_select = FALSE;
+    uint16_t numbits = 0;
+       bool bTimeout = FALSE;
+       uint32_t timeout = 0;
+       bool topazmode = FALSE;
     char buf[5]="";
-    int i=0;
+    int i = 0;
     uint8_t data[USB_CMD_DATA_SIZE];
-       uint16_t datalen=0;
+       uint16_t datalen = 0;
        uint32_t temp;
 
     if (strlen(cmd)<2) {
@@ -590,9 +592,11 @@ int CmdHF14ACmdRaw(const char *cmd) {
         PrintAndLog("       -s    active signal field ON with select");
         PrintAndLog("       -b    number of bits to send. Useful for send partial byte");
                PrintAndLog("       -t    timeout in ms");
+               PrintAndLog("       -T    use Topaz protocol to send command");
         return 0;
     }
 
+       
     // strip
     while (*cmd==' ' || *cmd=='\t') cmd++;
 
@@ -601,19 +605,19 @@ int CmdHF14ACmdRaw(const char *cmd) {
         if (cmd[i]=='-') {
             switch (cmd[i+1]) {
                 case 'r': 
-                    reply=0;
+                    reply = FALSE;
                     break;
                 case 'c':
-                    crc=1;
+                    crc = TRUE;
                     break;
                 case 'p':
-                    power=1;
+                    power = TRUE;
                     break;
                 case 'a':
-                    active=1;
+                    active = TRUE;
                     break;
                 case 's':
-                    active_select=1;
+                    active_select = TRUE;
                     break;
                 case 'b': 
                     sscanf(cmd+i+2,"%d",&temp);
@@ -623,13 +627,16 @@ int CmdHF14ACmdRaw(const char *cmd) {
                     i-=2;
                     break;
                                case 't':
-                                       bTimeout=1;
+                                       bTimeout = TRUE;
                                        sscanf(cmd+i+2,"%d",&temp);
                                        timeout = temp;
                                        i+=3;
                                        while(cmd[i]!=' ' && cmd[i]!='\0') { i++; }
                                        i-=2;
                                        break;
+                case 'T':
+                                       topazmode = TRUE;
+                                       break;
                 default:
                     PrintAndLog("Invalid option");
                     return 0;
@@ -659,10 +666,15 @@ int CmdHF14ACmdRaw(const char *cmd) {
         PrintAndLog("Invalid char on input");
         return 0;
     }
+
     if(crc && datalen>0 && datalen<sizeof(data)-2)
     {
         uint8_t first, second;
-        ComputeCrc14443(CRC_14443_A, data, datalen, &first, &second);
+               if (topazmode) {
+                       ComputeCrc14443(CRC_14443_B, data, datalen, &first, &second);
+               } else {
+                       ComputeCrc14443(CRC_14443_A, data, datalen, &first, &second);
+               }
         data[datalen++] = first;
         data[datalen++] = second;
     }
@@ -675,7 +687,7 @@ int CmdHF14ACmdRaw(const char *cmd) {
     }
 
        if(bTimeout){
-           #define MAX_TIMEOUT 40542464        // (2^32-1) * (8*16) / 13560000Hz * 1000ms/s = 
+           #define MAX_TIMEOUT 40542464        // = (2^32-1) * (8*16) / 13560000Hz * 1000ms/s
         c.arg[0] |= ISO14A_SET_TIMEOUT;
         if(timeout > MAX_TIMEOUT) {
             timeout = MAX_TIMEOUT;
@@ -683,11 +695,16 @@ int CmdHF14ACmdRaw(const char *cmd) {
         }
                c.arg[2] = 13560000 / 1000 / (8*16) * timeout; // timeout in ETUs (time to transfer 1 bit, approx. 9.4 us)
        }
+
     if(power)
         c.arg[0] |= ISO14A_NO_DISCONNECT;
-    if(datalen>0)
+
+       if(datalen > 0)
         c.arg[0] |= ISO14A_RAW;
 
+       if(topazmode)
+               c.arg[0] |= ISO14A_TOPAZMODE;
+               
        // Max buffer is USB_CMD_DATA_SIZE
     c.arg[1] = (datalen & 0xFFFF) | (numbits << 16);
     memcpy(c.d.asBytes,data,datalen);
@@ -703,6 +720,7 @@ int CmdHF14ACmdRaw(const char *cmd) {
     return 0;
 }
 
+
 static void waitCmd(uint8_t iSelect)
 {
     uint8_t *recv;
@@ -712,7 +730,7 @@ static void waitCmd(uint8_t iSelect)
     if (WaitForResponseTimeout(CMD_ACK,&resp,1500)) {
         recv = resp.d.asBytes;
         uint8_t iLen = iSelect ? resp.arg[1] : resp.arg[0];
-        PrintAndLog("received %i octets",iLen);
+        PrintAndLog("received %i octets", iLen);
         if(!iLen)
             return;
         hexout = (char *)malloc(iLen * 3 + 1);
index 525ffcc63d1d62a79c14c1845ff8099fe3390b06..36932cbd31d887f252afc29852a883706ef2e9c7 100644 (file)
 #include "cmdparser.h"
 #include "cmdhf14b.h"
 #include "cmdmain.h"
+#include "cmdhf14a.h"
 
 static int CmdHelp(const char *Cmd);
 
-int CmdHF14BDemod(const char *Cmd)
-{
-  int i, j, iold;
-  int isum, qsum;
-  int outOfWeakAt;
-  bool negateI, negateQ;
-
-  uint8_t data[256];
-  int dataLen = 0;
-
-  // As received, the samples are pairs, correlations against I and Q
-  // square waves. So estimate angle of initial carrier (or just
-  // quadrant, actually), and then do the demod.
-
-  // First, estimate where the tag starts modulating.
-  for (i = 0; i < GraphTraceLen; i += 2) {
-    if (abs(GraphBuffer[i]) + abs(GraphBuffer[i + 1]) > 40) {
-      break;
-    }
-  }
-  if (i >= GraphTraceLen) {
-    PrintAndLog("too weak to sync");
-    return 0;
-  }
-  PrintAndLog("out of weak at %d", i);
-  outOfWeakAt = i;
-
-  // Now, estimate the phase in the initial modulation of the tag
-  isum = 0;
-  qsum = 0;
-  for (; i < (outOfWeakAt + 16); i += 2) {
-    isum += GraphBuffer[i + 0];
-    qsum += GraphBuffer[i + 1];
-  }
-  negateI = (isum < 0);
-  negateQ = (qsum < 0);
-
-  // Turn the correlation pairs into soft decisions on the bit.
-  j = 0;
-  for (i = 0; i < GraphTraceLen / 2; i++) {
-    int si = GraphBuffer[j];
-    int sq = GraphBuffer[j + 1];
-    if (negateI) si = -si;
-    if (negateQ) sq = -sq;
-    GraphBuffer[i] = si + sq;
-    j += 2;
-  }
-  GraphTraceLen = i;
-
-  i = outOfWeakAt / 2;
-  while (GraphBuffer[i] > 0 && i < GraphTraceLen)
-    i++;
-  if (i >= GraphTraceLen) goto demodError;
-
-  iold = i;
-  while (GraphBuffer[i] < 0 && i < GraphTraceLen)
-    i++;
-  if (i >= GraphTraceLen) goto demodError;
-  if ((i - iold) > 23) goto demodError;
-
-  PrintAndLog("make it to demod loop");
-
-  for (;;) {
-    iold = i;
-    while (GraphBuffer[i] >= 0 && i < GraphTraceLen)
-      i++;
-    if (i >= GraphTraceLen) goto demodError;
-    if ((i - iold) > 6) goto demodError;
-
-    uint16_t shiftReg = 0;
-    if (i + 20 >= GraphTraceLen) goto demodError;
-
-    for (j = 0; j < 10; j++) {
-      int soft = GraphBuffer[i] + GraphBuffer[i + 1];
-
-      if (abs(soft) < (abs(isum) + abs(qsum)) / 20) {
-        PrintAndLog("weak bit");
-      }
-
-      shiftReg >>= 1;
-      if(GraphBuffer[i] + GraphBuffer[i+1] >= 0) {
-        shiftReg |= 0x200;
-      }
-
-      i+= 2;
-    }
-
-    if ((shiftReg & 0x200) && !(shiftReg & 0x001))
-    {
-      // valid data byte, start and stop bits okay
-      PrintAndLog("   %02x", (shiftReg >> 1) & 0xff);
-      data[dataLen++] = (shiftReg >> 1) & 0xff;
-      if (dataLen >= sizeof(data)) {
-        return 0;
-      }
-    } else if (shiftReg == 0x000) {
-      // this is EOF
-      break;
-    } else {
-      goto demodError;
-    }
-  }
-
-  uint8_t first, second;
-  ComputeCrc14443(CRC_14443_B, data, dataLen-2, &first, &second);
-  PrintAndLog("CRC: %02x %02x (%s)\n", first, second,
-    (first == data[dataLen-2] && second == data[dataLen-1]) ?
-      "ok" : "****FAIL****");
-
-  RepaintGraphWindow();
-  return 0;
-
-demodError:
-  PrintAndLog("demod error");
-  RepaintGraphWindow();
-  return 0;
-}
-
 int CmdHF14BList(const char *Cmd)
 {
        PrintAndLog("Deprecated command, use 'hf list 14b' instead");
 
        return 0;
 }
-int CmdHF14BRead(const char *Cmd)
-{
-  UsbCommand c = {CMD_ACQUIRE_RAW_ADC_SAMPLES_ISO_14443, {strtol(Cmd, NULL, 0), 0, 0}};
-  SendCommand(&c);
-  return 0;
-}
 
-int CmdHF14Sim(const char *Cmd)
+int CmdHF14BSim(const char *Cmd)
 {
-  UsbCommand c={CMD_SIMULATE_TAG_ISO_14443};
-  SendCommand(&c);
-  return 0;
-}
-
-int CmdHFSimlisten(const char *Cmd)
-{
-  UsbCommand c = {CMD_SIMULATE_TAG_HF_LISTEN};
+  UsbCommand c={CMD_SIMULATE_TAG_ISO_14443B};
+  clearCommandBuffer();
   SendCommand(&c);
   return 0;
 }
 
 int CmdHF14BSnoop(const char *Cmd)
 {
-  UsbCommand c = {CMD_SNOOP_ISO_14443};
+  UsbCommand c = {CMD_SNOOP_ISO_14443B};
+  clearCommandBuffer();
   SendCommand(&c);
   return 0;
 }
@@ -184,6 +56,7 @@ int CmdHF14BSnoop(const char *Cmd)
 int CmdSri512Read(const char *Cmd)
 {
   UsbCommand c = {CMD_READ_SRI512_TAG, {strtol(Cmd, NULL, 0), 0, 0}};
+  clearCommandBuffer();
   SendCommand(&c);
   return 0;
 }
@@ -195,127 +68,559 @@ int CmdSri512Read(const char *Cmd)
 int CmdSrix4kRead(const char *Cmd)
 {
   UsbCommand c = {CMD_READ_SRIX4K_TAG, {strtol(Cmd, NULL, 0), 0, 0}};
+  clearCommandBuffer();
   SendCommand(&c);
   return 0;
 }
 
-int CmdHF14BCmdRaw (const char *cmd) {
-    UsbCommand resp;
-    uint8_t *recv;
-    UsbCommand c = {CMD_ISO_14443B_COMMAND, {0, 0, 0}}; // len,recv?
-    uint8_t reply=1;
-    uint8_t crc=0;
-    uint8_t power=0;
-    char buf[5]="";
-    int i=0;
-    uint8_t data[100] = {0x00};
-    unsigned int datalen=0, temp;
-    char *hexout;
-    
-    if (strlen(cmd)<3) {
-        PrintAndLog("Usage: hf 14b raw [-r] [-c] [-p] <0A 0B 0C ... hex>");
-        PrintAndLog("       -r    do not read response");
-        PrintAndLog("       -c    calculate and append CRC");
-        PrintAndLog("       -p    leave the field on after receive");
-        return 0;    
-    }
-
-    // strip
-    while (*cmd==' ' || *cmd=='\t') cmd++;
-    
-    while (cmd[i]!='\0') {
-        if (cmd[i]==' ' || cmd[i]=='\t') { i++; continue; }
-        if (cmd[i]=='-') {
-            switch (cmd[i+1]) {
-                case 'r': 
-                case 'R': 
-                    reply=0;
-                    break;
-                case 'c':
-                case 'C':                
-                    crc=1;
-                    break;
-                case 'p': 
-                case 'P': 
-                    power=1;
-                    break;
-                default:
-                    PrintAndLog("Invalid option");
-                    return 0;
-            }
-            i+=2;
-            continue;
-        }
-        if ((cmd[i]>='0' && cmd[i]<='9') ||
-            (cmd[i]>='a' && cmd[i]<='f') ||
-            (cmd[i]>='A' && cmd[i]<='F') ) {
-            buf[strlen(buf)+1]=0;
-            buf[strlen(buf)]=cmd[i];
-            i++;
-            
-            if (strlen(buf)>=2) {
-                sscanf(buf,"%x",&temp);
-                data[datalen]=(uint8_t)(temp & 0xff);
-                datalen++;
-                *buf=0;
-            }
-            continue;
-        }
-        PrintAndLog("Invalid char on input");
-        return 1;
-    }
-    if (datalen == 0)
-    {
-      PrintAndLog("Missing data input");
-      return 0;
-    }
-    if(crc)
-    {
-        uint8_t first, second;
-        ComputeCrc14443(CRC_14443_B, data, datalen, &first, &second);
-        data[datalen++] = first;
-        data[datalen++] = second;
-    }
-    
-    c.arg[0] = datalen;
-    c.arg[1] = reply;
-    c.arg[2] = power;
-    memcpy(c.d.asBytes,data,datalen);
-    
-    SendCommand(&c);
-    
-    if (reply) {
-        if (WaitForResponseTimeout(CMD_ACK,&resp,1000)) {
-            recv = resp.d.asBytes;
-            PrintAndLog("received %i octets",resp.arg[0]);
-            if(!resp.arg[0])
-                return 0;
-            hexout = (char *)malloc(resp.arg[0] * 3 + 1);
-            if (hexout != NULL) {
-                uint8_t first, second;
-                for (int i = 0; i < resp.arg[0]; i++) { // data in hex
-                    sprintf(&hexout[i * 3], "%02X ", recv[i]);
-                }
-                PrintAndLog("%s", hexout);
-                free(hexout);
-                ComputeCrc14443(CRC_14443_B, recv, resp.arg[0]-2, &first, &second);
-                if(recv[resp.arg[0]-2]==first && recv[resp.arg[0]-1]==second) {
-                    PrintAndLog("CRC OK");
-                } else {
-                    PrintAndLog("CRC failed");
-                }
-            } else {
-                PrintAndLog("malloc failed your client has low memory?");
-            }
-        } else {
-            PrintAndLog("timeout while waiting for reply.");
-        }
-    } // if reply
-    return 0;
+int rawClose(void){
+       UsbCommand resp;
+       UsbCommand c = {CMD_ISO_14443B_COMMAND, {0, 0, 0}};
+       clearCommandBuffer();
+       SendCommand(&c);
+       if (!WaitForResponseTimeout(CMD_ACK,&resp,1000)) {
+               return 0;
+       }
+       return 0;
 }
 
-int CmdHF14BWrite( const char *Cmd){
+int HF14BCmdRaw(bool reply, bool *crc, bool power, uint8_t *data, uint8_t *datalen, bool verbose){
+       UsbCommand resp;
+       UsbCommand c = {CMD_ISO_14443B_COMMAND, {0, 0, 0}}; // len,recv,power
+       if(*crc)
+       {
+               uint8_t first, second;
+               ComputeCrc14443(CRC_14443_B, data, *datalen, &first, &second);
+               data[*datalen] = first;
+               data[*datalen + 1] = second;
+               *datalen += 2;
+       }
+       
+       c.arg[0] = *datalen;
+       c.arg[1] = reply;
+       c.arg[2] = power;
+       memcpy(c.d.asBytes,data,*datalen);
+       clearCommandBuffer();
+       SendCommand(&c);
+       
+       if (!reply) return 1; 
+
+       if (!WaitForResponseTimeout(CMD_ACK,&resp,1000)) {
+               if (verbose) PrintAndLog("timeout while waiting for reply.");
+               return 0;
+       }
+       *datalen = resp.arg[0];
+       if (verbose) PrintAndLog("received %u octets", *datalen);
+       if(*datalen<2) return 0;
+
+       memcpy(data, resp.d.asBytes, *datalen);
+       if (verbose) PrintAndLog("%s", sprint_hex(data, *datalen));
+
+       uint8_t first, second;
+       ComputeCrc14443(CRC_14443_B, data, *datalen-2, &first, &second);
+       if(data[*datalen-2] == first && data[*datalen-1] == second) {
+               if (verbose) PrintAndLog("CRC OK");
+               *crc = true;
+       } else {
+               if (verbose) PrintAndLog("CRC failed");
+               *crc = false;
+       }
+       return 1;
+}
+
+int CmdHF14BCmdRaw (const char *Cmd) {
+       bool reply = true;
+       bool crc = false;
+       bool power = false;
+       bool select = false;
+       bool SRx = false;
+       char buf[5] = "";
+       uint8_t data[100] = {0x00};
+       uint8_t datalen = 0;
+       unsigned int temp;
+       int i = 0;
+       if (strlen(Cmd)<3) {
+                       PrintAndLog("Usage: hf 14b raw [-r] [-c] [-p] [-s || -ss] <0A 0B 0C ... hex>");
+                       PrintAndLog("       -r    do not read response");
+                       PrintAndLog("       -c    calculate and append CRC");
+                       PrintAndLog("       -p    leave the field on after receive");
+                       PrintAndLog("       -s    active signal field ON with select");
+                       PrintAndLog("       -ss   active signal field ON with select for SRx ST Microelectronics tags");
+                       return 0;
+       }
+
+       // strip
+       while (*Cmd==' ' || *Cmd=='\t') Cmd++;
+       
+       while (Cmd[i]!='\0') {
+               if (Cmd[i]==' ' || Cmd[i]=='\t') { i++; continue; }
+               if (Cmd[i]=='-') {
+                       switch (Cmd[i+1]) {
+                               case 'r': 
+                               case 'R': 
+                                       reply = false;
+                                       break;
+                               case 'c':
+                               case 'C':                
+                                       crc = true;
+                                       break;
+                               case 'p': 
+                               case 'P': 
+                                       power = true;
+                                       break;
+                               case 's':
+                               case 'S':
+                                       select = true;
+                                       if (Cmd[i+2]=='s' || Cmd[i+2]=='S') {
+                                               SRx = true;
+                                               i++;
+                                       }
+                                       break;
+                               default:
+                                       PrintAndLog("Invalid option");
+                                       return 0;
+                       }
+                       i+=2;
+                       continue;
+               }
+               if ((Cmd[i]>='0' && Cmd[i]<='9') ||
+                   (Cmd[i]>='a' && Cmd[i]<='f') ||
+                   (Cmd[i]>='A' && Cmd[i]<='F') ) {
+                       buf[strlen(buf)+1]=0;
+                       buf[strlen(buf)]=Cmd[i];
+                       i++;
+                       
+                       if (strlen(buf)>=2) {
+                               sscanf(buf,"%x",&temp);
+                               data[datalen++]=(uint8_t)(temp & 0xff);
+                               *buf=0;
+                       }
+                       continue;
+               }
+               PrintAndLog("Invalid char on input");
+               return 0;
+       }
+       if (datalen == 0)
+       {
+               PrintAndLog("Missing data input");
+               return 0;
+       }
+
+       if (select){ //auto select 14b tag
+               uint8_t cmd2[16];
+               bool crc2 = true;
+               uint8_t cmdLen;
+
+               if (SRx) {
+                       // REQ SRx
+                       cmdLen = 2;
+                       cmd2[0] = 0x06;
+                       cmd2[1] = 0x00;
+               } else {
+                       cmdLen = 3;
+                       // REQB
+                       cmd2[0] = 0x05;
+                       cmd2[1] = 0x00;
+                       cmd2[2] = 0x08;
+               }
+
+               if (HF14BCmdRaw(true, &crc2, true, cmd2, &cmdLen, false)==0) return rawClose();
+
+               if ( SRx && (cmdLen != 3 || !crc2) ) return rawClose();
+               else if (cmd2[0] != 0x50 || cmdLen != 14 || !crc2) return rawClose();
+               
+               uint8_t chipID = 0;
+               if (SRx) {
+                       // select
+                       chipID = cmd2[0];
+                       cmd2[0] = 0x0E;
+                       cmd2[1] = chipID;
+                       cmdLen = 2;
+               } else {
+                       // attrib
+                       cmd2[0] = 0x1D; 
+                       // UID from cmd2[1 - 4]
+                       cmd2[5] = 0x00;
+                       cmd2[6] = 0x08;
+                       cmd2[7] = 0x01;
+                       cmd2[8] = 0x00;
+                       cmdLen = 9;
+               }
+
+               if (HF14BCmdRaw(true, &crc2, true, cmd2, &cmdLen, false)==0) return rawClose();
+
+               if (cmdLen != 3 || !crc2) return rawClose();
+               if (SRx && cmd2[0] != chipID) return rawClose();
+       }
+       return HF14BCmdRaw(reply, &crc, power, data, &datalen, true);
+}
+
+// print full atqb info
+static void print_atqb_resp(uint8_t *data){
+       //PrintAndLog ("           UID: %s", sprint_hex(data+1,4));
+       PrintAndLog ("      App Data: %s", sprint_hex(data+5,4));
+       PrintAndLog ("      Protocol: %s", sprint_hex(data+9,3));
+       uint8_t BitRate = data[9];
+       if (!BitRate) 
+               PrintAndLog ("      Bit Rate: 106 kbit/s only PICC <-> PCD");
+       if (BitRate & 0x10)
+               PrintAndLog ("      Bit Rate: 212 kbit/s PICC -> PCD supported");
+       if (BitRate & 0x20)
+               PrintAndLog ("      Bit Rate: 424 kbit/s PICC -> PCD supported"); 
+       if (BitRate & 0x40)
+               PrintAndLog ("      Bit Rate: 847 kbit/s PICC -> PCD supported"); 
+       if (BitRate & 0x01)
+               PrintAndLog ("      Bit Rate: 212 kbit/s PICC <- PCD supported");
+       if (BitRate & 0x02)
+               PrintAndLog ("      Bit Rate: 424 kbit/s PICC <- PCD supported"); 
+       if (BitRate & 0x04)
+               PrintAndLog ("      Bit Rate: 847 kbit/s PICC <- PCD supported"); 
+       if (BitRate & 0x80) 
+               PrintAndLog ("                Same bit rate <-> required");
+
+       uint16_t maxFrame = data[10]>>4;
+       if (maxFrame < 5) 
+               maxFrame = 8*maxFrame + 16;
+       else if (maxFrame == 5)
+               maxFrame = 64;
+       else if (maxFrame == 6)
+               maxFrame = 96;
+       else if (maxFrame == 7)
+               maxFrame = 128;
+       else if (maxFrame == 8)
+               maxFrame = 256;
+       else
+               maxFrame = 257;
+
+       PrintAndLog ("Max Frame Size: %u%s",maxFrame, (maxFrame == 257) ? "+ RFU" : "");
+
+       uint8_t protocolT = data[10] & 0xF;
+       PrintAndLog (" Protocol Type: Protocol is %scompliant with ISO/IEC 14443-4",(protocolT) ? "" : "not " );
+       PrintAndLog ("Frame Wait Int: %u", data[11]>>4);
+       PrintAndLog (" App Data Code: Application is %s",(data[11]&4) ? "Standard" : "Proprietary");
+       PrintAndLog (" Frame Options: NAD is %ssupported",(data[11]&2) ? "" : "not ");
+       PrintAndLog (" Frame Options: CID is %ssupported",(data[11]&1) ? "" : "not ");
+       PrintAndLog ("Max Buf Length: %u (MBLI) %s",data[14]>>4, (data[14] & 0xF0) ? "" : "not supported");
+       
+       return;
+}
+
+// get SRx chip model (from UID) // from ST Microelectronics
+char *get_ST_Chip_Model(uint8_t data){
+       static char model[20];
+       char *retStr = model;
+       memset(model,0, sizeof(model));
+
+       switch (data) {
+               case 0x0: sprintf(retStr, "SRIX4K (Special)"); break;
+               case 0x2: sprintf(retStr, "SR176"); break;
+               case 0x3: sprintf(retStr, "SRIX4K"); break;
+               case 0x4: sprintf(retStr, "SRIX512"); break;
+               case 0x6: sprintf(retStr, "SRI512"); break;
+               case 0x7: sprintf(retStr, "SRI4K"); break;
+               case 0xC: sprintf(retStr, "SRT512"); break;
+               default : sprintf(retStr, "Unknown"); break;
+       }
+       return retStr;
+}
+
+int print_ST_Lock_info(uint8_t model){
+       //assume connection open and tag selected...
+       uint8_t data[16] = {0x00};
+       uint8_t datalen = 2;
+       bool crc = true;
+       uint8_t resplen;
+       uint8_t blk1;
+       data[0] = 0x08;
+
+       if (model == 0x2) { //SR176 has special command:
+               data[1] = 0xf;
+               resplen = 4;                    
+       } else {
+               data[1] = 0xff;
+               resplen = 6;
+       }
+
+       //std read cmd
+       if (HF14BCmdRaw(true, &crc, true, data, &datalen, false)==0) return rawClose();
+
+       if (datalen != resplen || !crc) return rawClose();
+
+       PrintAndLog("Chip Write Protection Bits:");
+       // now interpret the data
+       switch (model){
+               case 0x0: //fall through (SRIX4K special)
+               case 0x3: //fall through (SRIx4K)
+               case 0x7: //             (SRI4K)
+                       //only need data[3]
+                       blk1 = 9;
+                       PrintAndLog("   raw: %s",printBits(1,data+3));
+                       PrintAndLog(" 07/08:%slocked", (data[3] & 1) ? " not " : " " );
+                       for (uint8_t i = 1; i<8; i++){
+                               PrintAndLog("    %02u:%slocked", blk1, (data[3] & (1 << i)) ? " not " : " " );
+                               blk1++;
+                       }
+                       break;
+               case 0x4: //fall through (SRIX512)
+               case 0x6: //fall through (SRI512)
+               case 0xC: //             (SRT512)
+                       //need data[2] and data[3]
+                       blk1 = 0;
+                       PrintAndLog("   raw: %s",printBits(2,data+2));
+                       for (uint8_t b=2; b<4; b++){
+                               for (uint8_t i=0; i<8; i++){
+                                       PrintAndLog("    %02u:%slocked", blk1, (data[b] & (1 << i)) ? " not " : " " );
+                                       blk1++;
+                               }
+                       }
+                       break;
+               case 0x2: //             (SR176)
+                       //need data[2]
+                       blk1 = 0;
+                       PrintAndLog("   raw: %s",printBits(1,data+2));
+                       for (uint8_t i = 0; i<8; i++){
+                               PrintAndLog(" %02u/%02u:%slocked", blk1, blk1+1, (data[2] & (1 << i)) ? " " : " not " );
+                               blk1+=2;
+                       }
+                       break;
+               default:
+                       return rawClose();
+       }
+       return 1;
+}
+
+// print UID info from SRx chips (ST Microelectronics)
+static void print_st_general_info(uint8_t *data){
+       //uid = first 8 bytes in data
+       PrintAndLog("   UID: %s", sprint_hex(SwapEndian64(data,8,8),8));
+       PrintAndLog("   MFG: %02X, %s", data[6], getTagInfo(data[6]));
+       PrintAndLog("  Chip: %02X, %s", data[5]>>2, get_ST_Chip_Model(data[5]>>2));
+       return;
+}
+
+// 14b get and print UID only (general info)
+int HF14BStdReader(uint8_t *data, uint8_t *datalen){
+       //05 00 00 = find one tag in field
+       //1d xx xx xx xx 00 08 01 00 = attrib xx=UID (resp 10 [f9 e0])
+       //a3 = ?  (resp 03 [e2 c2])
+       //02 = ?  (resp 02 [6a d3])
+       // 022b (resp 02 67 00 [29  5b])
+       // 0200a40400 (resp 02 67 00 [29 5b])
+       // 0200a4040c07a0000002480300 (resp 02 67 00 [29 5b])
+       // 0200a4040c07a0000002480200 (resp 02 67 00 [29 5b])
+       // 0200a4040006a0000000010100 (resp 02 6a 82 [4b 4c])
+       // 0200a4040c09d27600002545500200 (resp 02 67 00 [29 5b])
+       // 0200a404000cd2760001354b414e4d30310000 (resp 02 6a 82 [4b 4c])
+       // 0200a404000ca000000063504b43532d313500 (resp 02 6a 82 [4b 4c])
+       // 0200a4040010a000000018300301000000000000000000 (resp 02 6a 82 [4b 4c])
+       //03 = ?  (resp 03 [e3 c2])
+       //c2 = ?  (resp c2 [66 15])
+       //b2 = ?  (resp a3 [e9 67])
+       //a2 = ?  (resp 02 [6a d3])
+       bool crc = true;
+       *datalen = 3;
+       //std read cmd
+       data[0] = 0x05;
+       data[1] = 0x00;
+       data[2] = 0x08;
+
+       if (HF14BCmdRaw(true, &crc, true, data, datalen, false)==0) return rawClose();
+
+       if (data[0] != 0x50 || *datalen != 14 || !crc) return rawClose();
+
+       PrintAndLog ("\n14443-3b tag found:");
+       PrintAndLog ("           UID: %s", sprint_hex(data+1,4));
+
+       uint8_t cmd2[16];
+       uint8_t cmdLen = 3;
+       bool crc2 = true;
+
+       cmd2[0] = 0x1D; 
+       // UID from data[1 - 4]
+       cmd2[1] = data[1];
+       cmd2[2] = data[2];
+       cmd2[3] = data[3];
+       cmd2[4] = data[4];
+       cmd2[5] = 0x00;
+       cmd2[6] = 0x08;
+       cmd2[7] = 0x01;
+       cmd2[8] = 0x00;
+       cmdLen = 9;
+
+       // attrib
+       if (HF14BCmdRaw(true, &crc2, true, cmd2, &cmdLen, false)==0) return rawClose();
+
+       if (cmdLen != 3 || !crc2) return rawClose();
+       // add attrib responce to data
+       data[14] = cmd2[0];
+       rawClose();
+       return 1;
+}
+
+// 14b get and print Full Info (as much as we know)
+int HF14BStdInfo(uint8_t *data, uint8_t *datalen){
+       if (!HF14BStdReader(data,datalen)) return 0;
+
+       //add more info here
+       print_atqb_resp(data);
+
+
+       return 1;
+}
+
+// SRx get and print general info about SRx chip from UID
+int HF14B_ST_Reader(uint8_t *data, uint8_t *datalen, bool closeCon){
+       bool crc = true;
+       *datalen = 2;
+       //wake cmd
+       data[0] = 0x06;
+       data[1] = 0x00;
+
+       //leave power on
+       // verbose on for now for testing - turn off when functional
+       if (HF14BCmdRaw(true, &crc, true, data, datalen, false)==0) return rawClose();
+
+       if (*datalen != 3 || !crc) return rawClose();
+
+       uint8_t chipID = data[0];
+       // select
+       data[0] = 0x0E;
+       data[1] = chipID;
+       *datalen = 2;
+
+       //leave power on
+       if (HF14BCmdRaw(true, &crc, true, data, datalen, false)==0) return rawClose();
+
+       if (*datalen != 3 || !crc || data[0] != chipID) return rawClose();
+
+       // get uid
+       data[0] = 0x0B;
+       *datalen = 1;
+
+       //leave power on
+       if (HF14BCmdRaw(true, &crc, true, data, datalen, false)==0) return rawClose();
+
+       if (*datalen != 10 || !crc) return rawClose();
+
+       //power off ?
+       if (closeCon) rawClose();
+
+       PrintAndLog("\n14443-3b ST tag found:");
+       print_st_general_info(data);
+       return 1;
+}
+
+// SRx get and print full info (needs more info...)
+int HF14B_ST_Info(uint8_t *data, uint8_t *datalen){
+       if (!HF14B_ST_Reader(data, datalen, false)) return 0;
+       
+       //add locking bit information here.
+       if (print_ST_Lock_info(data[5]>>2)) 
+               rawClose();
+
+       return 1;
+}
+
+// test for other 14b type tags (mimic another reader - don't have tags to identify)
+int HF14B_Other_Reader(uint8_t *data, uint8_t *datalen){
+       bool crc = true;
+       *datalen = 4;
+       //std read cmd
+       data[0] = 0x00;
+       data[1] = 0x0b;
+       data[2] = 0x3f;
+       data[3] = 0x80;
+
+       if (HF14BCmdRaw(true, &crc, true, data, datalen, false)!=0) {
+               if (*datalen > 2 || !crc) {
+                       PrintAndLog ("\n14443-3b tag found:");
+                       PrintAndLog ("Unknown tag type answered to a 0x000b3f80 command ans:");
+                       PrintAndLog ("%s",sprint_hex(data,*datalen));
+                       rawClose();
+                       return 1;
+               }
+       }
+
+       crc = false;
+       *datalen = 1;
+       data[0] = 0x0a;
+
+       if (HF14BCmdRaw(true, &crc, true, data, datalen, false)!=0) {
+               if (*datalen > 0) {
+                       PrintAndLog ("\n14443-3b tag found:");
+                       PrintAndLog ("Unknown tag type answered to a 0x0A command ans:");
+                       PrintAndLog ("%s",sprint_hex(data,*datalen));
+                       rawClose();
+                       return 1;
+               }
+       }
+       
+       crc = false;
+       *datalen = 1;
+       data[0] = 0x0c;
+
+       if (HF14BCmdRaw(true, &crc, true, data, datalen, false)!=0) {
+               if (*datalen > 0) {
+                       PrintAndLog ("\n14443-3b tag found:");
+                       PrintAndLog ("Unknown tag type answered to a 0x0C command ans:");
+                       PrintAndLog ("%s",sprint_hex(data,*datalen));
+                       rawClose();
+                       return 1;
+               }
+       }
+       rawClose();
+       return 0;
+}
+
+// get and print all info known about any known 14b tag
+int HF14BInfo(bool verbose){
+       uint8_t data[100];
+       uint8_t datalen = 5;
+       
+       // try std 14b (atqb)
+       if (HF14BStdInfo(data, &datalen)) return 1;
+
+       // try st 14b
+       if (HF14B_ST_Info(data, &datalen)) return 1;
+
+       // try unknown 14b read commands (to be identified later)
+       //   could be read of calypso, CEPAS, moneo, or pico pass.
+       if (HF14B_Other_Reader(data, &datalen)) return 1;
+
+       if (verbose) PrintAndLog("no 14443B tag found");
+       return 0;
+}
+
+// menu command to get and print all info known about any known 14b tag
+int CmdHF14Binfo(const char *Cmd){
+       return HF14BInfo(true);
+}
+
+// get and print general info about all known 14b chips
+int HF14BReader(bool verbose){
+       uint8_t data[100];
+       uint8_t datalen = 5;
+       
+       // try std 14b (atqb)
+       if (HF14BStdReader(data, &datalen)) return 1;
+
+       // try st 14b
+       if (HF14B_ST_Reader(data, &datalen, true)) return 1;
+
+       // try unknown 14b read commands (to be identified later)
+       //   could be read of calypso, CEPAS, moneo, or pico pass.
+       if (HF14B_Other_Reader(data, &datalen)) return 1;
+
+       if (verbose) PrintAndLog("no 14443B tag found");
+       return 0;
+}
+
+// menu command to get and print general info about all known 14b chips
+int CmdHF14BReader(const char *Cmd){
+       return HF14BReader(true);
+}
 
+int CmdSriWrite( const char *Cmd){
 /*
  * For SRIX4K  blocks 00 - 7F
  * hf 14b raw -c -p 09 $srix4kwblock $srix4kwdata
@@ -385,16 +690,15 @@ int CmdHF14BWrite( const char *Cmd){
 static command_t CommandTable[] = 
 {
   {"help",        CmdHelp,        1, "This help"},
-  {"demod",       CmdHF14BDemod,  1, "Demodulate ISO14443 Type B from tag"},
-  {"list",        CmdHF14BList,   0, "[Deprecated] List ISO 14443b history"},
-  {"read",        CmdHF14BRead,   0, "Read HF tag (ISO 14443)"},
-  {"sim",         CmdHF14Sim,     0, "Fake ISO 14443 tag"},
-  {"simlisten",   CmdHFSimlisten, 0, "Get HF samples as fake tag"},
-  {"snoop",       CmdHF14BSnoop,  0, "Eavesdrop ISO 14443"},
+  {"info",        CmdHF14Binfo,   0, "Find and print details about a 14443B tag"},
+  {"list",        CmdHF14BList,   0, "[Deprecated] List ISO 14443B history"},
+  {"reader",      CmdHF14BReader, 0, "Act as a 14443B reader to identify a tag"},
+  {"sim",         CmdHF14BSim,    0, "Fake ISO 14443B tag"},
+  {"snoop",       CmdHF14BSnoop,  0, "Eavesdrop ISO 14443B"},
   {"sri512read",  CmdSri512Read,  0, "Read contents of a SRI512 tag"},
   {"srix4kread",  CmdSrix4kRead,  0, "Read contents of a SRIX4K tag"},
+  {"sriwrite",    CmdSriWrite,    0, "Write data to a SRI512 | SRIX4K tag"},
   {"raw",         CmdHF14BCmdRaw, 0, "Send raw hex data to tag"},
-  {"write",       CmdHF14BWrite,  0, "Write data to a SRI512 | SRIX4K tag"},
   {NULL, NULL, 0, NULL}
 };
 
index cc8b9dbd810c15a889c40e406f6d4f980b5c5ca2..a45b74341ced2cd82a733472f7abd4939fc29744 100644 (file)
 #define CMDHF14B_H__
 
 int CmdHF14B(const char *Cmd);
-
-int CmdHF14BDemod(const char *Cmd);
 int CmdHF14BList(const char *Cmd);
-int CmdHF14BRead(const char *Cmd);
-int CmdHF14Sim(const char *Cmd);
-int CmdHFSimlisten(const char *Cmd);
+int CmdHF14BInfo(const char *Cmd);
+int CmdHF14BSim(const char *Cmd);
 int CmdHF14BSnoop(const char *Cmd);
 int CmdSri512Read(const char *Cmd);
 int CmdSrix4kRead(const char *Cmd);
 int CmdHF14BWrite( const char *cmd);
+int HF14BInfo(bool verbose);
 
 #endif
index 3286ceb9cce45a2f9d9738219347044db63a303a..f9f69a885c7f149db1e1b8fbe9643b8f6373c171 100644 (file)
@@ -9,7 +9,7 @@
 //-----------------------------------------------------------------------------
 
 #include "util.h"
-//#include "proxusb.h"
+
 #include "proxmark3.h"
 #include "ui.h"
 #include "cmdparser.h"
@@ -29,9 +29,9 @@ int CmdHFEPACollectPACENonces(const char *Cmd)
        unsigned int n = 0;
        // delay between requests
        unsigned int d = 0;
-       
+
        sscanf(Cmd, "%u %u %u", &m, &n, &d);
-       
+
        // values are expected to be > 0
        m = m > 0 ? m : 1;
        n = n > 0 ? n : 1;
@@ -44,7 +44,7 @@ int CmdHFEPACollectPACENonces(const char *Cmd)
                UsbCommand c = {CMD_EPA_PACE_COLLECT_NONCE, {(int)m, 0, 0}};
                SendCommand(&c);
                UsbCommand resp;
-    
+
                WaitForResponse(CMD_ACK,&resp);
 
                // check if command failed
@@ -58,6 +58,7 @@ int CmdHFEPACollectPACENonces(const char *Cmd)
                        }
                        // print nonce
                        PrintAndLog("Length: %d, Nonce: %s", nonce_length, nonce);
+                       free(nonce);
                }
                if (i < n - 1) {
                        sleep(d);
@@ -68,13 +69,123 @@ int CmdHFEPACollectPACENonces(const char *Cmd)
        return 1;
 }
 
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+////////////////////////////////The commands lie below here/////////////////////////////////////////////////////////////////////////////////////////
+
+// perform the PACE protocol by replaying APDUs
+int CmdHFEPAPACEReplay(const char *Cmd)
+{
+       // the 4 APDUs which are replayed + their lengths
+       uint8_t msesa_apdu[41], gn_apdu[8], map_apdu[75];
+       uint8_t pka_apdu[75], ma_apdu[18], apdu_lengths[5] = {0};
+       // pointers to the arrays to be able to iterate
+       uint8_t *apdus[] = {msesa_apdu, gn_apdu, map_apdu, pka_apdu, ma_apdu};
+
+       // usage message
+       static const char const *usage_msg =
+               "Please specify 5 APDUs separated by spaces. "
+               "Example:\n preplay 0022C1A4 1068000000 1086000002 1234ABCDEF 1A2B3C4D";
+
+       // Proxmark response
+       UsbCommand resp;
+
+       int skip = 0, skip_add = 0, scan_return = 0;
+       // for each APDU
+       for (int i = 0; i < sizeof(apdu_lengths); i++) {
+               // scan to next space or end of string
+               while (Cmd[skip] != ' ' && Cmd[skip] != '\0') {
+                       // convert
+                       scan_return = sscanf(Cmd + skip, "%2X%n",
+                                            (unsigned int *) (apdus[i] + apdu_lengths[i]),
+                                            &skip_add);
+                       if (scan_return < 1) {
+                               PrintAndLog((char *)usage_msg);
+                               PrintAndLog("Not enough APDUs! Try again!");
+                               return 0;
+                       }
+                       skip += skip_add;
+            apdu_lengths[i]++;
+               }
+
+               // break on EOF
+               if (Cmd[skip] == '\0') {
+                       if (i < sizeof(apdu_lengths) - 1) {
+
+                               PrintAndLog((char *)usage_msg);
+                               return 0;
+                       }
+                       break;
+               }
+               // skip the space
+               skip++;
+       }
+
+       // transfer the APDUs to the Proxmark
+       UsbCommand usb_cmd;
+       usb_cmd.cmd = CMD_EPA_PACE_REPLAY;
+       for (int i = 0; i < sizeof(apdu_lengths); i++) {
+               // APDU number
+               usb_cmd.arg[0] = i + 1;
+               // transfer the APDU in several parts if necessary
+               for (int j = 0; j * sizeof(usb_cmd.d.asBytes) < apdu_lengths[i]; j++) {
+                       // offset into the APDU
+                       usb_cmd.arg[1] = j * sizeof(usb_cmd.d.asBytes);
+                       // amount of data in this packet
+                       int packet_length = apdu_lengths[i] - (j * sizeof(usb_cmd.d.asBytes));
+                       if (packet_length > sizeof(usb_cmd.d.asBytes)) {
+                               packet_length = sizeof(usb_cmd.d.asBytes);
+                       }
+                       usb_cmd.arg[2] = packet_length;
+
+                       memcpy(usb_cmd.d.asBytes, // + (j * sizeof(usb_cmd.d.asBytes)),
+                              apdus[i] + (j * sizeof(usb_cmd.d.asBytes)),
+                              packet_length);
+                       SendCommand(&usb_cmd);
+                       WaitForResponse(CMD_ACK, &resp);
+                       if (resp.arg[0] != 0) {
+                               PrintAndLog("Transfer of APDU #%d Part %d failed!", i, j);
+                               return 0;
+                       }
+               }
+       }
+
+       // now perform the replay
+       usb_cmd.arg[0] = 0;
+       SendCommand(&usb_cmd);
+       WaitForResponse(CMD_ACK, &resp);
+       if (resp.arg[0] != 0) {
+               PrintAndLog("\nPACE replay failed in step %u!", (uint32_t)resp.arg[0]);
+               PrintAndLog("Measured times:");
+               PrintAndLog("MSE Set AT: %u us", resp.d.asDwords[0]);
+               PrintAndLog("GA Get Nonce: %u us", resp.d.asDwords[1]);
+               PrintAndLog("GA Map Nonce: %u us", resp.d.asDwords[2]);
+               PrintAndLog("GA Perform Key Agreement: %u us", resp.d.asDwords[3]);
+               PrintAndLog("GA Mutual Authenticate: %u us", resp.d.asDwords[4]);
+       } else {
+               PrintAndLog("PACE replay successfull!");
+               PrintAndLog("MSE Set AT: %u us", resp.d.asDwords[0]);
+               PrintAndLog("GA Get Nonce: %u us", resp.d.asDwords[1]);
+               PrintAndLog("GA Map Nonce: %u us", resp.d.asDwords[2]);
+               PrintAndLog("GA Perform Key Agreement: %u us", resp.d.asDwords[3]);
+               PrintAndLog("GA Mutual Authenticate: %u us", resp.d.asDwords[4]);
+       }
+
+
+       return 1;
+}
+
+////////////////////////////////The new commands lie above here/////////////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
 // UI-related stuff
 
-static const command_t CommandTable[] = 
+static const command_t CommandTable[] =
 {
   {"help",    CmdHelp,                   1, "This help"},
   {"cnonces", CmdHFEPACollectPACENonces, 0,
               "<m> <n> <d> Acquire n>0 encrypted PACE nonces of size m>0 with d sec pauses"},
+  {"preplay", CmdHFEPAPACEReplay,        0,
+   "<mse> <get> <map> <pka> <ma> Perform PACE protocol by replaying given APDUs"},
   {NULL, NULL, 0, NULL}
 };
 
@@ -92,4 +203,4 @@ int CmdHFEPA(const char *Cmd)
        // parse
   CmdsParse(CommandTable, Cmd);
   return 0;
-}
\ No newline at end of file
+}
index 824aaa3674cc1bd5cf84d38174968d0e3fbd468e..309880d2bf77b72fb8a129b6de8c68dd03611e3f 100644 (file)
 #include "loclass/fileutils.h"
 #include "protocols.h"
 #include "usb_cmd.h"
+#include "cmdhfmfu.h"
 
 static int CmdHelp(const char *Cmd);
 
-int xorbits_8(uint8_t val)
-{
+#define ICLASS_KEYS_MAX 8
+static uint8_t iClass_Key_Table[ICLASS_KEYS_MAX][8] = {
+               { 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,0x00,0x00,0x00 },
+               { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
+               { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }
+};
+
+typedef struct iclass_block {
+    uint8_t d[8];
+} iclass_block_t;
+
+int xorbits_8(uint8_t val) {
        uint8_t res = val ^ (val >> 1); //1st pass
        res = res ^ (res >> 1);                 // 2nd pass
        res = res ^ (res >> 2);                 // 3rd pass
@@ -43,20 +59,18 @@ int xorbits_8(uint8_t val)
        return res & 1;
 }
 
-int CmdHFiClassList(const char *Cmd)
-{
+int CmdHFiClassList(const char *Cmd) {
        PrintAndLog("Deprecated command, use 'hf list iclass' instead");
        return 0;
 }
 
-int CmdHFiClassSnoop(const char *Cmd)
-{
+int CmdHFiClassSnoop(const char *Cmd) {
        UsbCommand c = {CMD_SNOOP_ICLASS};
        SendCommand(&c);
        return 0;
 }
-int usage_hf_iclass_sim()
-{
+
+int usage_hf_iclass_sim(void) {
        PrintAndLog("Usage:  hf iclass sim <option> [CSN]");
        PrintAndLog("        options");
        PrintAndLog("                0 <CSN> simulate the given CSN");
@@ -71,8 +85,7 @@ int usage_hf_iclass_sim()
 }
 
 #define NUM_CSNS 15
-int CmdHFiClassSim(const char *Cmd)
-{
+int CmdHFiClassSim(const char *Cmd) {
        uint8_t simType = 0;
        uint8_t CSN[8] = {0, 0, 0, 0, 0, 0, 0, 0};
 
@@ -165,15 +178,15 @@ int CmdHFiClassSim(const char *Cmd)
        return 0;
 }
 
-int HFiClassReader(const char *Cmd, bool loop, bool verbose)
-{
+int HFiClassReader(const char *Cmd, bool loop, bool verbose) {
        bool tagFound = false;
        UsbCommand c = {CMD_READER_ICLASS, {FLAG_ICLASS_READER_CSN|
                                        FLAG_ICLASS_READER_CONF|FLAG_ICLASS_READER_AA}};
-       if (!loop) c.arg[0] |= FLAG_ICLASS_READER_ONLY_ONCE | FLAG_ICLASS_READER_ONE_TRY;
-       SendCommand(&c);
+       // loop in client not device - else on windows have a communication error
+       c.arg[0] |= FLAG_ICLASS_READER_ONLY_ONCE | FLAG_ICLASS_READER_ONE_TRY;
        UsbCommand resp;
        while(!ukbhit()){
+               SendCommand(&c);
                if (WaitForResponseTimeout(CMD_ACK,&resp, 4500)) {
                        uint8_t readStatus = resp.arg[0] & 0xff;
                        uint8_t *data = resp.d.asBytes;
@@ -200,16 +213,13 @@ int HFiClassReader(const char *Cmd, bool loop, bool verbose)
                if (!loop) break;
        }
        return 0;
-
 }
 
-int CmdHFiClassReader(const char *Cmd)
-{
+int CmdHFiClassReader(const char *Cmd) {
        return HFiClassReader(Cmd, true, true);
 }
 
-int CmdHFiClassReader_Replay(const char *Cmd)
-{
+int CmdHFiClassReader_Replay(const char *Cmd) {
        uint8_t readerType = 0;
        uint8_t MAC[4]={0x00, 0x00, 0x00, 0x00};
 
@@ -231,181 +241,22 @@ int CmdHFiClassReader_Replay(const char *Cmd)
        return 0;
 }
 
-int CmdHFiClassReader_Dump(const char *Cmd)
-{
-       uint8_t readerType = 0;
-       uint8_t MAC[4]={0x00,0x00,0x00,0x00};
-       uint8_t KEY[8]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
-       uint8_t CSN[8]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
-       uint8_t CCNR[12]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
-       //uint8_t CC_temp[8]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
-       uint8_t div_key[8]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
-       uint8_t keytable[128] = {0};
-       int elite = 0;
-       uint8_t *used_key;
-       int i;
-       if (strlen(Cmd)<1)
-       {
-               PrintAndLog("Usage:  hf iclass dump <Key> [e]");
-               PrintAndLog("        Key    - A 16 byte master key");
-               PrintAndLog("        e      - If 'e' is specified, the key is interpreted as the 16 byte");
-               PrintAndLog("                 Custom Key (KCus), which can be obtained via reader-attack");
-               PrintAndLog("                 See 'hf iclass sim 2'. This key should be on iclass-format");
-               PrintAndLog("        sample: hf iclass dump 0011223344556677");
-
-
-               return 0;
-       }
-
-       if (param_gethex(Cmd, 0, KEY, 16))
-       {
-               PrintAndLog("KEY must include 16 HEX symbols");
-               return 1;
-       }
-
-       if (param_getchar(Cmd, 1) == 'e')
-       {
-               PrintAndLog("Elite switch on");
-               elite = 1;
-
-               //calc h2
-               hash2(KEY, keytable);
-               printarr_human_readable("keytable", keytable, 128);
-
-       }
-
-       UsbCommand resp;
-       uint8_t key_sel[8] = {0};
-       uint8_t key_sel_p[8] = { 0 };
-
-       UsbCommand c = {CMD_READER_ICLASS, {0}};
-       c.arg[0] = FLAG_ICLASS_READER_ONLY_ONCE| FLAG_ICLASS_READER_CC;
+int iclassEmlSetMem(uint8_t *data, int blockNum, int blocksCount) {
+       UsbCommand c = {CMD_MIFARE_EML_MEMSET, {blockNum, blocksCount, 0}};
+       memcpy(c.d.asBytes, data, blocksCount * 16);
        SendCommand(&c);
-
-
-
-       if (!WaitForResponseTimeout(CMD_ACK,&resp,4500))
-       {
-               PrintAndLog("Command execute timeout");
-               return 0;
-       }
-
-       uint8_t isOK    = resp.arg[0] & 0xff;
-       uint8_t * data  = resp.d.asBytes;
-
-       memcpy(CSN,data,8);
-       memcpy(CCNR,data+16,8);
-
-       PrintAndLog("isOk:%02x", isOK);
-
-       if(isOK > 0)
-       {
-               PrintAndLog("CSN: %s",sprint_hex(CSN,8));
-       }
-       if(isOK <= 1){
-               PrintAndLog("Failed to obtain CC! Aborting");
-               return 0;
-       }
-       //Status 2 or higher
-
-       if(elite)
-       {
-               //Get the key index (hash1)
-               uint8_t key_index[8] = {0};
-
-               hash1(CSN, key_index);
-               printvar("hash1", key_index,8);
-               for(i = 0; i < 8 ; i++)
-                       key_sel[i] = keytable[key_index[i]] & 0xFF;
-               PrintAndLog("Pre-fortified 'permuted' HS key that would be needed by an iclass reader to talk to above CSN:");
-               printvar("k_sel", key_sel,8);
-               //Permute from iclass format to standard format
-               permutekey_rev(key_sel,key_sel_p);
-               used_key = key_sel_p;
-       }else{
-               used_key = KEY;
-       }
-
-       PrintAndLog("Pre-fortified key that would be needed by the OmniKey reader to talk to above CSN:");
-       printvar("Used key",used_key,8);
-       diversifyKey(CSN,used_key, div_key);
-       PrintAndLog("Hash0, a.k.a diversified key, that is computed using Ksel and stored in the card (Block 3):");
-       printvar("Div key", div_key, 8);
-       printvar("CC_NR:",CCNR,12);
-       doMAC(CCNR,div_key, MAC);
-       printvar("MAC", MAC, 4);
-
-       uint8_t iclass_data[32000] = {0};
-       uint32_t iclass_datalen = 0;
-       uint32_t iclass_blocksFailed = 0;//Set to 1 if dump was incomplete
-
-       UsbCommand d = {CMD_READER_ICLASS_REPLAY, {readerType}};
-       memcpy(d.d.asBytes, MAC, 4);
-       clearCommandBuffer();
-       SendCommand(&d);
-       PrintAndLog("Waiting for device to dump data. Press button on device and key on keyboard to abort...");
-       while (true) {
-               printf(".");
-               if (ukbhit()) {
-                       getchar();
-                       printf("\naborted via keyboard!\n");
-                       break;
-               }
-               if(WaitForResponseTimeout(CMD_ACK,&resp,4500))
-               {
-                       uint32_t dataLength = resp.arg[0];
-                       iclass_blocksFailed |= resp.arg[1];
-                       if(dataLength > 0)
-                       {
-                               PrintAndLog("Got %d bytes data (total so far %d)" ,dataLength,iclass_datalen);
-                               memcpy(iclass_data+iclass_datalen, resp.d.asBytes,dataLength);
-                               iclass_datalen += dataLength;
-                       }else
-                       {//Last transfer, datalength 0 means the dump is finished
-                               PrintAndLog("Dumped %d bytes of data from tag. ", iclass_datalen);
-                               if(iclass_blocksFailed)
-                               {
-                                       PrintAndLog("OBS! Some blocks failed to be dumped correctly!");
-                               }
-                               if(iclass_datalen > 0)
-                               {
-                                       char filename[100] = {0};
-                                       //create a preferred filename
-                                       snprintf(filename, 100,"iclass_tagdump-%02x%02x%02x%02x%02x%02x%02x%02x",
-                                                        CSN[0],CSN[1],CSN[2],CSN[3],
-                                                       CSN[4],CSN[5],CSN[6],CSN[7]);
-                                       //Place the div_key in block 3
-                                       memcpy(iclass_data+(3*8), div_key, 8);
-                                       saveFile(filename,"bin",iclass_data, iclass_datalen );
-                               }
-                               //Aaaand we're finished
-                               return 0;
-                       }
-               }
-       }
-
-
        return 0;
 }
 
-int hf_iclass_eload_usage()
-{
+int hf_iclass_eload_usage(void) {
        PrintAndLog("Loads iclass tag-dump into emulator memory on device");
        PrintAndLog("Usage:  hf iclass eload f <filename>");
        PrintAndLog("");
        PrintAndLog("Example: hf iclass eload f iclass_tagdump-aa162d30f8ff12f1.bin");
        return 0;
-
 }
 
-int iclassEmlSetMem(uint8_t *data, int blockNum, int blocksCount) {
-       UsbCommand c = {CMD_MIFARE_EML_MEMSET, {blockNum, blocksCount, 0}};
-       memcpy(c.d.asBytes, data, blocksCount * 16);
-       SendCommand(&c);
-       return 0;
-}
-int CmdHFiClassELoad(const char *Cmd)
-{
+int CmdHFiClassELoad(const char *Cmd) {
 
        char opt = param_getchar(Cmd, 0);
        if (strlen(Cmd)<1 || opt == 'h')
@@ -430,8 +281,13 @@ int CmdHFiClassELoad(const char *Cmd)
        long fsize = ftell(f);
        fseek(f, 0, SEEK_SET);
 
-       uint8_t *dump = malloc(fsize);
+       if (fsize < 0) {
+               PrintAndLog("Error, when getting filesize");
+               fclose(f);
+               return 1;
+       }
 
+       uint8_t *dump = malloc(fsize);
 
        size_t bytes_read = fread(dump, 1, fsize, f);
        fclose(f);
@@ -462,23 +318,7 @@ int CmdHFiClassELoad(const char *Cmd)
        return 0;
 }
 
-int usage_hf_iclass_decrypt()
-{
-       PrintAndLog("Usage: hf iclass decrypt f <tagdump> o ");
-       PrintAndLog("");
-       PrintAndLog("OBS! In order to use this function, the file 'iclass_decryptionkey.bin' must reside");
-       PrintAndLog("in the working directory. The file should be 16 bytes binary data");
-       PrintAndLog("");
-       PrintAndLog("example: hf iclass decrypt f tagdump_12312342343.bin");
-       PrintAndLog("");
-       PrintAndLog("OBS! This is pretty stupid implementation, it tries to decrypt every block after block 6. ");
-       PrintAndLog("Correct behaviour would be to decrypt only the application areas where the key is valid,");
-       PrintAndLog("which is defined by the configuration block.");
-       return 1;
-}
-
-int readKeyfile(const char *filename, size_t len, uint8_t* buffer)
-{
+static int readKeyfile(const char *filename, size_t len, uint8_t* buffer) {
        FILE *f = fopen(filename, "rb");
        if(!f) {
                PrintAndLog("Failed to read from file '%s'", filename);
@@ -502,8 +342,21 @@ int readKeyfile(const char *filename, size_t len, uint8_t* buffer)
        return 0;
 }
 
-int CmdHFiClassDecrypt(const char *Cmd)
-{
+int usage_hf_iclass_decrypt(void) {
+       PrintAndLog("Usage: hf iclass decrypt f <tagdump>");
+       PrintAndLog("");
+       PrintAndLog("OBS! In order to use this function, the file 'iclass_decryptionkey.bin' must reside");
+       PrintAndLog("in the working directory. The file should be 16 bytes binary data");
+       PrintAndLog("");
+       PrintAndLog("example: hf iclass decrypt f tagdump_12312342343.bin");
+       PrintAndLog("");
+       PrintAndLog("OBS! This is pretty stupid implementation, it tries to decrypt every block after block 6. ");
+       PrintAndLog("Correct behaviour would be to decrypt only the application areas where the key is valid,");
+       PrintAndLog("which is defined by the configuration block.");
+       return 1;
+}
+
+int CmdHFiClassDecrypt(const char *Cmd) {
        uint8_t key[16] = { 0 };
        if(readKeyfile("iclass_decryptionkey.bin", 16, key))
        {
@@ -518,10 +371,13 @@ int CmdHFiClassDecrypt(const char *Cmd)
        //Open the tagdump-file
        FILE *f;
        char filename[FILE_PATH_SIZE];
-       if(opt == 'f' && param_getstr(Cmd, 1, filename) > 0)
-       {
+       if(opt == 'f' && param_getstr(Cmd, 1, filename) > 0) {
                f = fopen(filename, "rb");
-       }else{
+               if ( f == NULL ) {
+                       PrintAndLog("Could not find file %s", filename);
+                       return 1;
+               }
+       } else {
                return usage_hf_iclass_decrypt();
        }
 
@@ -556,89 +412,804 @@ int CmdHFiClassDecrypt(const char *Cmd)
        fclose(f);
 
        saveFile(outfilename,"bin", decrypted, blocknum*8);
+       free(decrypted);
+       return 0;
+}
 
+int usage_hf_iclass_encrypt(void) {
+       PrintAndLog("Usage: hf iclass encrypt <BlockData>");
+       PrintAndLog("");
+       PrintAndLog("OBS! In order to use this function, the file 'iclass_decryptionkey.bin' must reside");
+       PrintAndLog("in the working directory. The file should be 16 bytes binary data");
+       PrintAndLog("");
+       PrintAndLog("example: hf iclass encrypt 0102030405060708");
+       PrintAndLog("");
        return 0;
 }
 
-int CmdHFiClass_iso14443A_write(const char *Cmd)
-{
-       uint8_t readerType = 0;
-       uint8_t MAC[4]={0x00,0x00,0x00,0x00};
-       uint8_t KEY[8]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
-       uint8_t CSN[8]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
-       uint8_t CCNR[12]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
-       uint8_t div_key[8]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
+static int iClassEncryptBlkData(uint8_t *blkData) {
+       uint8_t key[16] = { 0 };
+       if(readKeyfile("iclass_decryptionkey.bin", 16, key))
+       {
+               usage_hf_iclass_encrypt();
+               return 1;
+       }
+       PrintAndLog("Decryption file found... ");
+
+       uint8_t encryptedData[16];
+       uint8_t *encrypted = encryptedData;
+       des3_context ctx = { DES_DECRYPT ,{ 0 } };
+       des3_set2key_enc( &ctx, key);
+       
+       des3_crypt_ecb(&ctx, blkData,encrypted);
+       //printvar("decrypted block", decrypted, 8);
+       memcpy(blkData,encrypted,8);
+
+       return 1;
+}
 
-       uint8_t blockNo=0;
-       uint8_t bldata[8]={0};
+int CmdHFiClassEncryptBlk(const char *Cmd) {
+       uint8_t blkData[8] = {0};
+       char opt = param_getchar(Cmd, 0);
+       if (strlen(Cmd)<1 || opt == 'h')
+               return usage_hf_iclass_encrypt();
 
-       if (strlen(Cmd)<3)
+       //get the bytes to encrypt
+       if (param_gethex(Cmd, 0, blkData, 16))
        {
-               PrintAndLog("Usage:  hf iclass write <Key> <Block> <Data>");
-               PrintAndLog("        sample: hf iclass write 0011223344556677 10 AAAAAAAAAAAAAAAA");
+               PrintAndLog("BlockData must include 16 HEX symbols");
                return 0;
        }
+       if (!iClassEncryptBlkData(blkData)) return 0;
+
+       printvar("encrypted block", blkData, 8);
+       return 1;
+}
+
+void Calc_wb_mac(uint8_t blockno, uint8_t *data, uint8_t *div_key, uint8_t MAC[4]) {
+       uint8_t WB[9];
+       WB[0] = blockno;
+       memcpy(WB + 1,data,8);
+       doMAC_N(WB,sizeof(WB),div_key,MAC);
+       //printf("Cal wb mac block [%02x][%02x%02x%02x%02x%02x%02x%02x%02x] : MAC [%02x%02x%02x%02x]",WB[0],WB[1],WB[2],WB[3],WB[4],WB[5],WB[6],WB[7],WB[8],MAC[0],MAC[1],MAC[2],MAC[3]);
+}
+
+static bool select_only(uint8_t *CSN, uint8_t *CCNR, bool use_credit_key, bool verbose) {
+       UsbCommand resp;
+
+       UsbCommand c = {CMD_READER_ICLASS, {0}};
+       c.arg[0] = FLAG_ICLASS_READER_ONLY_ONCE | FLAG_ICLASS_READER_CC | FLAG_ICLASS_READER_ONE_TRY;
+       if (use_credit_key)
+               c.arg[0] |= FLAG_ICLASS_READER_CEDITKEY;
 
-       if (param_gethex(Cmd, 0, KEY, 16))
+       clearCommandBuffer();
+       SendCommand(&c);
+       if (!WaitForResponseTimeout(CMD_ACK,&resp,4500))
        {
-               PrintAndLog("KEY must include 16 HEX symbols");
-               return 1;
+               PrintAndLog("Command execute timeout");
+               return false;
        }
 
-       blockNo = param_get8(Cmd, 1);
-       if (blockNo>32)
+       uint8_t isOK = resp.arg[0] & 0xff;
+       uint8_t *data = resp.d.asBytes;
+
+       memcpy(CSN,data,8);
+       if (CCNR!=NULL)memcpy(CCNR,data+16,8);
+       if(isOK > 0)
        {
-               PrintAndLog("Error: Maximum number of blocks is 32 for iClass 2K Cards!");
-               return 1;
+               if (verbose) PrintAndLog("CSN: %s",sprint_hex(CSN,8));
+       }
+       if(isOK <= 1){
+               PrintAndLog("Failed to obtain CC! Aborting");
+               return false;
+       }
+       return true;    
+}
+
+static bool select_and_auth(uint8_t *KEY, uint8_t *MAC, uint8_t *div_key, bool use_credit_key, bool elite, bool rawkey, bool verbose) {
+       uint8_t CSN[8]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
+       uint8_t CCNR[12]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
+
+       if (!select_only(CSN, CCNR, use_credit_key, verbose))
+               return false;
+
+       //get div_key
+       if(rawkey)
+               memcpy(div_key, KEY, 8);
+       else
+               HFiClassCalcDivKey(CSN, KEY, div_key, elite);
+       PrintAndLog("Authing with %s: %02x%02x%02x%02x%02x%02x%02x%02x", rawkey ? "raw key" : "diversified key", div_key[0],div_key[1],div_key[2],div_key[3],div_key[4],div_key[5],div_key[6],div_key[7]);
+
+       doMAC(CCNR, div_key, MAC);
+       UsbCommand resp;
+       UsbCommand d = {CMD_ICLASS_AUTHENTICATION, {0}};
+       memcpy(d.d.asBytes, MAC, 4);
+       clearCommandBuffer();
+       SendCommand(&d);
+       if (!WaitForResponseTimeout(CMD_ACK,&resp,4500))
+       {
+               PrintAndLog("Auth Command execute timeout");
+               return false;
        }
-       if (param_gethex(Cmd, 2, bldata, 8))
+       uint8_t isOK = resp.arg[0] & 0xff;
+       if (!isOK) {
+               PrintAndLog("Authentication error");
+               return false;
+       }
+       return true;
+}
+
+int usage_hf_iclass_dump(void) {
+       PrintAndLog("Usage:  hf iclass dump f <fileName> k <Key> c <CreditKey> e|r\n");
+       PrintAndLog("Options:");
+       PrintAndLog("  f <filename> : specify a filename to save dump to");
+       PrintAndLog("  k <Key>      : *Access Key as 16 hex symbols or 1 hex to select key from memory");
+       PrintAndLog("  c <CreditKey>: Credit Key as 16 hex symbols or 1 hex to select key from memory");
+       PrintAndLog("  e            : If 'e' is specified, the key is interpreted as the 16 byte");
+       PrintAndLog("                 Custom Key (KCus), which can be obtained via reader-attack");
+       PrintAndLog("                 See 'hf iclass sim 2'. This key should be on iclass-format");
+       PrintAndLog("  r            : If 'r' is specified, the key is interpreted as raw block 3/4");
+       PrintAndLog("  NOTE: * = required");
+  PrintAndLog("Samples:");
+       PrintAndLog("  hf iclass dump k 001122334455667B");
+       PrintAndLog("  hf iclass dump k AAAAAAAAAAAAAAAA c 001122334455667B");
+       PrintAndLog("  hf iclass dump k AAAAAAAAAAAAAAAA e");
+       return 0;
+}
+
+int CmdHFiClassReader_Dump(const char *Cmd) {
+
+       uint8_t MAC[4] = {0x00,0x00,0x00,0x00};
+       uint8_t div_key[8] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
+       uint8_t c_div_key[8] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
+       uint8_t blockno = 0;
+       uint8_t numblks = 0;
+       uint8_t maxBlk = 31;
+       uint8_t app_areas = 1;
+       uint8_t kb = 2;
+       uint8_t KEY[8] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
+       uint8_t CreditKEY[8] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
+       uint8_t keyNbr = 0;
+       uint8_t dataLen = 0;
+       uint8_t fileNameLen = 0;
+       char filename[FILE_PATH_SIZE]={0};
+       char tempStr[50] = {0};
+       bool have_debit_key = false;
+       bool have_credit_key = false;
+       bool use_credit_key = false;
+       bool elite = false;
+       bool rawkey = false;
+       bool errors = false;
+       uint8_t cmdp = 0;
+
+       while(param_getchar(Cmd, cmdp) != 0x00)
        {
-               PrintAndLog("Block data must include 8 HEX symbols");
-               return 1;
+               switch(param_getchar(Cmd, cmdp))
+               {
+               case 'h':
+               case 'H':
+                       return usage_hf_iclass_dump();
+               case 'c':
+               case 'C':
+                       have_credit_key = true;
+                       dataLen = param_getstr(Cmd, cmdp+1, tempStr);
+                       if (dataLen == 16) {
+                               errors = param_gethex(tempStr, 0, CreditKEY, dataLen);
+                       } else if (dataLen == 1) {
+                               keyNbr = param_get8(Cmd, cmdp+1);
+                               if (keyNbr < ICLASS_KEYS_MAX) {
+                                       memcpy(CreditKEY, iClass_Key_Table[keyNbr], 8);
+                               } else {
+                                       PrintAndLog("\nERROR: Credit KeyNbr is invalid\n");
+                                       errors = true;
+                               }
+                       } else {
+                               PrintAndLog("\nERROR: Credit Key is incorrect length\n");
+                               errors = true;
+                       }
+                       cmdp += 2;
+                       break;
+               case 'e':
+               case 'E':
+                       elite = true;
+                       cmdp++;
+                       break;
+               case 'f':
+               case 'F':
+                       fileNameLen = param_getstr(Cmd, cmdp+1, filename); 
+                       if (fileNameLen < 1) {
+                               PrintAndLog("No filename found after f");
+                               errors = true;
+                       }
+                       cmdp += 2;
+                       break;
+               case 'k':
+               case 'K':
+                       have_debit_key = true;
+                       dataLen = param_getstr(Cmd, cmdp+1, tempStr);
+                       if (dataLen == 16) { 
+                               errors = param_gethex(tempStr, 0, KEY, dataLen);
+                       } else if (dataLen == 1) {
+                               keyNbr = param_get8(Cmd, cmdp+1);
+                               if (keyNbr < ICLASS_KEYS_MAX) {
+                                       memcpy(KEY, iClass_Key_Table[keyNbr], 8);
+                               } else {
+                                       PrintAndLog("\nERROR: Credit KeyNbr is invalid\n");
+                                       errors = true;
+                               }
+                       } else {
+                               PrintAndLog("\nERROR: Credit Key is incorrect length\n");
+                               errors = true;
+                       }
+                       cmdp += 2;
+                       break;
+               case 'r':
+               case 'R':
+                       rawkey = true;
+                       cmdp++;
+                       break;
+               default:
+                       PrintAndLog("Unknown parameter '%c'\n", param_getchar(Cmd, cmdp));
+                       errors = true;
+                       break;
+               }
+               if(errors) return usage_hf_iclass_dump();
        }
 
-       UsbCommand c = {CMD_ICLASS_ISO14443A_WRITE, {0}};
+       if (cmdp < 2) return usage_hf_iclass_dump();
+       // if no debit key given try credit key on AA1 (not for iclass but for some picopass this will work)
+       if (!have_debit_key && have_credit_key) use_credit_key = true;
+
+       //get config and first 3 blocks
+       UsbCommand c = {CMD_READER_ICLASS, {FLAG_ICLASS_READER_CSN |
+                                       FLAG_ICLASS_READER_CONF | FLAG_ICLASS_READER_ONLY_ONCE | FLAG_ICLASS_READER_ONE_TRY}};
+       UsbCommand resp;
+       uint8_t tag_data[255*8];
+
+       clearCommandBuffer();
        SendCommand(&c);
+       if (!WaitForResponseTimeout(CMD_ACK, &resp, 4500)) {
+               PrintAndLog("Command execute timeout");
+               ul_switch_off_field();
+               return 0;
+       }
+       uint8_t readStatus = resp.arg[0] & 0xff;
+       uint8_t *data = resp.d.asBytes;
+
+       if(readStatus == 0){
+               PrintAndLog("No tag found...");
+               ul_switch_off_field();
+               return 0;
+       }
+       if( readStatus & (FLAG_ICLASS_READER_CSN|FLAG_ICLASS_READER_CONF|FLAG_ICLASS_READER_CC)){
+               memcpy(tag_data, data, 8*3);
+               blockno+=2; // 2 to force re-read of block 2 later. (seems to respond differently..)
+               numblks = data[8];
+               getMemConfig(data[13], data[12], &maxBlk, &app_areas, &kb);
+               // large memory - not able to dump pages currently
+               if (numblks > maxBlk) numblks = maxBlk;
+       }
+       ul_switch_off_field();
+       // authenticate debit key and get div_key - later store in dump block 3
+       if (!select_and_auth(KEY, MAC, div_key, use_credit_key, elite, rawkey, false)){
+               //try twice - for some reason it sometimes fails the first time...
+               if (!select_and_auth(KEY, MAC, div_key, use_credit_key, elite, rawkey, false)){
+                       ul_switch_off_field();
+                       return 0;
+               }
+       }
+       
+       // begin dump
+       UsbCommand w = {CMD_ICLASS_DUMP, {blockno, numblks-blockno+1}};
+       clearCommandBuffer();
+       SendCommand(&w);
+       if (!WaitForResponseTimeout(CMD_ACK, &resp, 4500)) {
+               PrintAndLog("Command execute time-out 1");
+               ul_switch_off_field();
+               return 1;
+       }
+       uint32_t blocksRead = resp.arg[1];
+       uint8_t isOK = resp.arg[0] & 0xff;
+       if (!isOK && !blocksRead) {
+               PrintAndLog("Read Block Failed");
+               ul_switch_off_field();
+               return 0;
+       }
+       uint32_t startindex = resp.arg[2];
+       if (blocksRead*8 > sizeof(tag_data)-(blockno*8)) {
+               PrintAndLog("Data exceeded Buffer size!");
+               blocksRead = (sizeof(tag_data)/8) - blockno;
+       }
+       // response ok - now get bigbuf content of the dump
+       GetFromBigBuf(tag_data+(blockno*8), blocksRead*8, startindex);
+       WaitForResponse(CMD_ACK,NULL);
+       size_t gotBytes = blocksRead*8 + blockno*8;
+
+       // try AA2
+       if (have_credit_key) {
+               //turn off hf field before authenticating with different key
+               ul_switch_off_field();
+               memset(MAC,0,4);
+               // AA2 authenticate credit key and git c_div_key - later store in dump block 4
+               if (!select_and_auth(CreditKEY, MAC, c_div_key, true, false, false, false)){
+                       //try twice - for some reason it sometimes fails the first time...
+                       if (!select_and_auth(CreditKEY, MAC, c_div_key, true, false, false, false)){
+                               ul_switch_off_field();
+                               return 0;
+                       }
+               }
+               // do we still need to read more block?  (aa2 enabled?)
+               if (maxBlk > blockno+numblks+1) {
+                       // setup dump and start
+                       w.arg[0] = blockno + blocksRead;
+                       w.arg[1] = maxBlk - (blockno + blocksRead);
+                       clearCommandBuffer();
+                       SendCommand(&w);
+                       if (!WaitForResponseTimeout(CMD_ACK, &resp, 4500)) {
+                               PrintAndLog("Command execute timeout 2");
+                               ul_switch_off_field();
+                               return 0;
+                       }
+                       uint8_t isOK = resp.arg[0] & 0xff;
+                       blocksRead = resp.arg[1];
+                       if (!isOK && !blocksRead) {
+                               PrintAndLog("Read Block Failed 2");
+                               ul_switch_off_field();
+                               return 0;
+                       }               
+
+                       startindex = resp.arg[2];
+                       if (blocksRead*8 > sizeof(tag_data)-gotBytes) {
+                               PrintAndLog("Data exceeded Buffer size!");
+                               blocksRead = (sizeof(tag_data) - gotBytes)/8;
+                       }
+                       // get dumped data from bigbuf
+                       GetFromBigBuf(tag_data+gotBytes, blocksRead*8, startindex);
+                       WaitForResponse(CMD_ACK,NULL);
+
+                       gotBytes += blocksRead*8;                       
+               } else { //field is still on - turn it off...
+                       ul_switch_off_field();
+               }
+       }
+
+       // add diversified keys to dump
+       if (have_debit_key) memcpy(tag_data+(3*8),div_key,8);
+       if (have_credit_key) memcpy(tag_data+(4*8),c_div_key,8);
+       // print the dump
+       printf("CSN   |00| %02X %02X %02X %02X %02X %02X %02X %02X |\n",tag_data[0],tag_data[1],tag_data[2]
+                 ,tag_data[3],tag_data[4],tag_data[5],tag_data[6],tag_data[7]);
+       printIclassDumpContents(tag_data, 1, (gotBytes/8)-1, gotBytes-8);
+
+       if (filename[0] == 0){
+               snprintf(filename, FILE_PATH_SIZE,"iclass_tagdump-%02x%02x%02x%02x%02x%02x%02x%02x",
+                   tag_data[0],tag_data[1],tag_data[2],tag_data[3],
+                   tag_data[4],tag_data[5],tag_data[6],tag_data[7]);
+       }
+
+       // save the dump to .bin file
+       PrintAndLog("Saving dump file - %d blocks read", gotBytes/8);
+       saveFile(filename, "bin", tag_data, gotBytes);
+       return 1;
+}
+
+static int WriteBlock(uint8_t blockno, uint8_t *bldata, uint8_t *KEY, bool use_credit_key, bool elite, bool rawkey, bool verbose) {
+       uint8_t MAC[4]={0x00,0x00,0x00,0x00};
+       uint8_t div_key[8]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
+       if (!select_and_auth(KEY, MAC, div_key, use_credit_key, elite, rawkey, verbose))
+               return 0;
+
        UsbCommand resp;
 
-       if (WaitForResponseTimeout(CMD_ACK,&resp,4500)) {
-               uint8_t isOK    = resp.arg[0] & 0xff;
-               uint8_t * data  = resp.d.asBytes;
+       Calc_wb_mac(blockno,bldata,div_key,MAC);
+       UsbCommand w = {CMD_ICLASS_WRITEBLOCK, {blockno}};
+       memcpy(w.d.asBytes, bldata, 8);
+       memcpy(w.d.asBytes + 8, MAC, 4);
+       
+       clearCommandBuffer();
+       SendCommand(&w);
+       if (!WaitForResponseTimeout(CMD_ACK,&resp,4500))
+       {
+               PrintAndLog("Write Command execute timeout");
+               return 0;
+       }
+       uint8_t isOK = resp.arg[0] & 0xff;
+       if (!isOK) {
+               PrintAndLog("Write Block Failed");
+               return 0;
+       }
+       PrintAndLog("Write Block Successful");
+       return 1;
+}
 
-               memcpy(CSN,data,8);
-               memcpy(CCNR,data+8,8);
-               PrintAndLog("DEBUG: %s",sprint_hex(CSN,8));
-               PrintAndLog("DEBUG: %s",sprint_hex(CCNR,8));
-               PrintAndLog("isOk:%02x", isOK);
-       } else {
-               PrintAndLog("Command execute timeout");
+int usage_hf_iclass_writeblock(void) {
+       PrintAndLog("Options:");
+  PrintAndLog("  b <Block> : The block number as 2 hex symbols");
+  PrintAndLog("  d <data>  : Set the Data to write as 16 hex symbols");
+       PrintAndLog("  k <Key>   : Access Key as 16 hex symbols or 1 hex to select key from memory");
+  PrintAndLog("  c         : If 'c' is specified, the key set is assumed to be the credit key\n");
+  PrintAndLog("  e         : If 'e' is specified, elite computations applied to key");
+  PrintAndLog("  r         : If 'r' is specified, no computations applied to key");
+  PrintAndLog("Samples:");
+       PrintAndLog("  hf iclass writeblk b 0A d AAAAAAAAAAAAAAAA k 001122334455667B");
+       PrintAndLog("  hf iclass writeblk b 1B d AAAAAAAAAAAAAAAA k 001122334455667B c");
+       PrintAndLog("  hf iclass writeblk b 0A d AAAAAAAAAAAAAAAA n 0");
+       return 0;
+}
+
+int CmdHFiClass_WriteBlock(const char *Cmd) {
+       uint8_t blockno=0;
+       uint8_t bldata[8]={0,0,0,0,0,0,0,0};
+       uint8_t KEY[8]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
+       uint8_t keyNbr = 0;
+       uint8_t dataLen = 0;
+       char tempStr[50] = {0};
+       bool use_credit_key = false;
+       bool elite = false;
+       bool rawkey= false;
+       bool errors = false;
+       uint8_t cmdp = 0;
+       while(param_getchar(Cmd, cmdp) != 0x00)
+       {
+               switch(param_getchar(Cmd, cmdp))
+               {
+               case 'h':
+               case 'H':
+                       return usage_hf_iclass_writeblock();
+               case 'b':
+               case 'B':
+                       if (param_gethex(Cmd, cmdp+1, &blockno, 2)) {
+                               PrintAndLog("Block No must include 2 HEX symbols\n");
+                               errors = true;
+                       }
+                       cmdp += 2;
+                       break;
+               case 'c':
+               case 'C':
+                       use_credit_key = true;
+                       cmdp++;
+                       break;
+               case 'd':
+               case 'D':
+                       if (param_gethex(Cmd, cmdp+1, bldata, 16))
+                       {
+                               PrintAndLog("KEY must include 16 HEX symbols\n");
+                               errors = true;
+                       }
+                       cmdp += 2;
+                       break;
+               case 'e':
+               case 'E':
+                       elite = true;
+                       cmdp++;
+                       break;
+               case 'k':
+               case 'K':
+                       dataLen = param_getstr(Cmd, cmdp+1, tempStr);
+                       if (dataLen == 16) { 
+                               errors = param_gethex(tempStr, 0, KEY, dataLen);
+                       } else if (dataLen == 1) {
+                               keyNbr = param_get8(Cmd, cmdp+1);
+                               if (keyNbr < ICLASS_KEYS_MAX) {
+                                       memcpy(KEY, iClass_Key_Table[keyNbr], 8);
+                               } else {
+                                       PrintAndLog("\nERROR: Credit KeyNbr is invalid\n");
+                                       errors = true;
+                               }
+                       } else {
+                               PrintAndLog("\nERROR: Credit Key is incorrect length\n");
+                               errors = true;
+                       }
+                       cmdp += 2;
+                       break;
+               case 'r':
+               case 'R':
+                       rawkey = true;
+                       cmdp++;
+                       break;
+               default:
+                       PrintAndLog("Unknown parameter '%c'\n", param_getchar(Cmd, cmdp));
+                       errors = true;
+                       break;
+               }
+               if(errors) return usage_hf_iclass_writeblock();
        }
 
-       diversifyKey(CSN,KEY, div_key);
+       if (cmdp < 6) return usage_hf_iclass_writeblock();
+       int ans = WriteBlock(blockno, bldata, KEY, use_credit_key, elite, rawkey, true);
+       ul_switch_off_field();
+       return ans;
+}
+
+int usage_hf_iclass_clone(void) {
+       PrintAndLog("Usage:  hf iclass clone f <tagfile.bin> b <first block> l <last block> k <KEY> c e|r");
+       PrintAndLog("Options:");
+       PrintAndLog("  f <filename>: specify a filename to clone from");
+       PrintAndLog("  b <Block>   : The first block to clone as 2 hex symbols");
+       PrintAndLog("  l <Last Blk>: Set the Data to write as 16 hex symbols");
+       PrintAndLog("  k <Key>     : Access Key as 16 hex symbols or 1 hex to select key from memory");
+       PrintAndLog("  c           : If 'c' is specified, the key set is assumed to be the credit key\n");
+       PrintAndLog("  e           : If 'e' is specified, elite computations applied to key");
+       PrintAndLog("  r           : If 'r' is specified, no computations applied to key");
+       PrintAndLog("Samples:");
+       PrintAndLog("  hf iclass clone f iclass_tagdump-121345.bin b 06 l 1A k 1122334455667788 e");
+       PrintAndLog("  hf iclass clone f iclass_tagdump-121345.bin b 05 l 19 k 0");
+       PrintAndLog("  hf iclass clone f iclass_tagdump-121345.bin b 06 l 19 k 0 e");
+       return -1;
+}
 
-       PrintAndLog("Div Key: %s",sprint_hex(div_key,8));
-       doMAC(CCNR, div_key, MAC);
+int CmdHFiClassCloneTag(const char *Cmd) {
+       char filename[FILE_PATH_SIZE] = {0};
+       char tempStr[50]={0};
+       uint8_t KEY[8]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
+       uint8_t keyNbr = 0;
+       uint8_t fileNameLen = 0;
+       uint8_t startblock = 0;
+       uint8_t endblock = 0;
+       uint8_t dataLen = 0;
+       bool use_credit_key = false;
+       bool elite = false;
+       bool rawkey = false;
+       bool errors = false;
+       uint8_t cmdp = 0;
+       while(param_getchar(Cmd, cmdp) != 0x00)
+       {
+               switch(param_getchar(Cmd, cmdp))
+               {
+               case 'h':
+               case 'H':
+                       return usage_hf_iclass_clone();
+               case 'b':
+               case 'B':
+                       if (param_gethex(Cmd, cmdp+1, &startblock, 2)) {
+                               PrintAndLog("Start Block No must include 2 HEX symbols\n");
+                               errors = true;
+                       }
+                       cmdp += 2;
+                       break;
+               case 'c':
+               case 'C':
+                       use_credit_key = true;
+                       cmdp++;
+                       break;
+               case 'e':
+               case 'E':
+                       elite = true;
+                       cmdp++;
+                       break;
+               case 'f':
+               case 'F':
+                       fileNameLen = param_getstr(Cmd, cmdp+1, filename); 
+                       if (fileNameLen < 1) {
+                               PrintAndLog("No filename found after f");
+                               errors = true;
+                       }
+                       cmdp += 2;
+                       break;
+               case 'k':
+               case 'K':
+                       dataLen = param_getstr(Cmd, cmdp+1, tempStr);
+                       if (dataLen == 16) { 
+                               errors = param_gethex(tempStr, 0, KEY, dataLen);
+                       } else if (dataLen == 1) {
+                               keyNbr = param_get8(Cmd, cmdp+1);
+                               if (keyNbr < ICLASS_KEYS_MAX) {
+                                       memcpy(KEY, iClass_Key_Table[keyNbr], 8);
+                               } else {
+                                       PrintAndLog("\nERROR: Credit KeyNbr is invalid\n");
+                                       errors = true;
+                               }
+                       } else {
+                               PrintAndLog("\nERROR: Credit Key is incorrect length\n");
+                               errors = true;
+                       }
+                       cmdp += 2;
+                       break;
+               case 'l':
+               case 'L':
+                       if (param_gethex(Cmd, cmdp+1, &endblock, 2)) {
+                               PrintAndLog("Start Block No must include 2 HEX symbols\n");
+                               errors = true;
+                       }
+                       cmdp += 2;
+                       break;
+               case 'r':
+               case 'R':
+                       rawkey = true;
+                       cmdp++;
+                       break;
+               default:
+                       PrintAndLog("Unknown parameter '%c'\n", param_getchar(Cmd, cmdp));
+                       errors = true;
+                       break;
+               }
+               if(errors) return usage_hf_iclass_clone();
+       }
+
+       if (cmdp < 8) return usage_hf_iclass_clone();
 
-       UsbCommand c2 = {CMD_ICLASS_ISO14443A_WRITE, {readerType,blockNo}};
-       memcpy(c2.d.asBytes, bldata, 8);
-       memcpy(c2.d.asBytes+8, MAC, 4);
-       SendCommand(&c2);
+       FILE *f;
 
-       if (WaitForResponseTimeout(CMD_ACK,&resp,1500)) {
-               uint8_t isOK    = resp.arg[0] & 0xff;
-               uint8_t * data  = resp.d.asBytes;
+       iclass_block_t tag_data[USB_CMD_DATA_SIZE/12];
 
-               if (isOK)
-                       PrintAndLog("isOk:%02x data:%s", isOK, sprint_hex(data, 4));
-               else
-                       PrintAndLog("isOk:%02x", isOK);
-       } else {
+       if ((endblock-startblock+1)*12 > USB_CMD_DATA_SIZE) {
+               PrintAndLog("Trying to write too many blocks at once.  Max: %d", USB_CMD_DATA_SIZE/8);
+       }
+       // file handling and reading
+       f = fopen(filename,"rb");
+       if(!f) {
+               PrintAndLog("Failed to read from file '%s'", filename);
+               return 1;
+       }
+
+       if (startblock<5) {
+               PrintAndLog("You cannot write key blocks this way. yet... make your start block > 4");
+               fclose(f);
+               return 0;
+       }
+       // now read data from the file from block 6 --- 19
+       // ok we will use this struct [data 8 bytes][MAC 4 bytes] for each block calculate all mac number for each data
+       // then copy to usbcommand->asbytes; the max is 32 - 6 = 24 block 12 bytes each block 288 bytes then we can only accept to clone 21 blocks at the time,
+       // else we have to create a share memory
+       int i;
+       fseek(f,startblock*8,SEEK_SET);
+       if ( fread(tag_data,sizeof(iclass_block_t),endblock - startblock + 1,f) == 0 ) {
+               PrintAndLog("File reading error.");
+               fclose(f);
+               return 2;
+       }
+
+       uint8_t MAC[4]={0x00,0x00,0x00,0x00};
+       uint8_t div_key[8]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
+
+       if (!select_and_auth(KEY, MAC, div_key, use_credit_key, elite, rawkey, true))
+               return 0;
+
+       UsbCommand w = {CMD_ICLASS_CLONE,{startblock,endblock}};
+       uint8_t *ptr;
+       // calculate all mac for every the block we will write
+       for (i = startblock; i <= endblock; i++){
+           Calc_wb_mac(i,tag_data[i - startblock].d,div_key,MAC);
+           // usb command d start pointer = d + (i - 6) * 12
+           // memcpy(pointer,tag_data[i - 6],8) 8 bytes
+           // memcpy(pointer + 8,mac,sizoof(mac) 4 bytes;
+           // next one
+           ptr = w.d.asBytes + (i - startblock) * 12;
+           memcpy(ptr, &(tag_data[i - startblock].d[0]), 8);
+           memcpy(ptr + 8,MAC, 4);
+       }
+       uint8_t p[12];
+       for (i = 0; i <= endblock - startblock;i++){
+           memcpy(p,w.d.asBytes + (i * 12),12);
+           printf("Block |%02x|",i + startblock);
+           printf(" %02x%02x%02x%02x%02x%02x%02x%02x |",p[0],p[1],p[2],p[3],p[4],p[5],p[6],p[7]);
+           printf(" MAC |%02x%02x%02x%02x|\n",p[8],p[9],p[10],p[11]);
+       }
+       UsbCommand resp;
+       SendCommand(&w);
+       if (!WaitForResponseTimeout(CMD_ACK,&resp,4500))
+       {
+               PrintAndLog("Command execute timeout");
+               return 0;
+       }
+       return 1;
+}
+
+static int ReadBlock(uint8_t *KEY, uint8_t blockno, uint8_t keyType, bool elite, bool rawkey, bool verbose) {
+       uint8_t MAC[4]={0x00,0x00,0x00,0x00};
+       uint8_t div_key[8]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
+
+       if (!select_and_auth(KEY, MAC, div_key, (keyType==0x18), elite, rawkey, verbose))
+               return 0;
+
+       UsbCommand resp;
+       UsbCommand w = {CMD_ICLASS_READBLOCK, {blockno}};
+       clearCommandBuffer();
+       SendCommand(&w);
+       if (!WaitForResponseTimeout(CMD_ACK,&resp,4500))
+       {
                PrintAndLog("Command execute timeout");
+               return 0;
+       }
+       uint8_t isOK = resp.arg[0] & 0xff;
+       if (!isOK) {
+               PrintAndLog("Read Block Failed");
+               return 0;
        }
+       //data read is stored in: resp.d.asBytes[0-15]
+       if (verbose) PrintAndLog("Block %02X: %s\n",blockno, sprint_hex(resp.d.asBytes,8));
+       return 1;
+}
+
+int usage_hf_iclass_readblock(void) {
+       PrintAndLog("Usage:  hf iclass readblk b <Block> k <Key> c e|r\n");
+       PrintAndLog("Options:");
+  PrintAndLog("  b <Block> : The block number as 2 hex symbols");
+       PrintAndLog("  k <Key>   : Access Key as 16 hex symbols or 1 hex to select key from memory");
+  PrintAndLog("  c         : If 'c' is specified, the key set is assumed to be the credit key\n");
+  PrintAndLog("  e         : If 'e' is specified, elite computations applied to key");
+  PrintAndLog("  r         : If 'r' is specified, no computations applied to key");
+  PrintAndLog("Samples:");
+       PrintAndLog("  hf iclass readblk b 06 k 0011223344556677");
+       PrintAndLog("  hf iclass readblk b 1B k 0011223344556677 c");
+       PrintAndLog("  hf iclass readblk b 0A k 0");
        return 0;
 }
-int CmdHFiClass_loclass(const char *Cmd)
-{
+
+int CmdHFiClass_ReadBlock(const char *Cmd) {
+       uint8_t blockno=0;
+       uint8_t keyType = 0x88; //debit key
+       uint8_t KEY[8]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
+       uint8_t keyNbr = 0;
+       uint8_t dataLen = 0;
+       char tempStr[50] = {0};
+       bool elite = false;
+       bool rawkey = false;
+       bool errors = false;
+       uint8_t cmdp = 0;
+       while(param_getchar(Cmd, cmdp) != 0x00)
+       {
+               switch(param_getchar(Cmd, cmdp))
+               {
+               case 'h':
+               case 'H':
+                       return usage_hf_iclass_readblock();
+               case 'b':
+               case 'B':
+                       if (param_gethex(Cmd, cmdp+1, &blockno, 2)) {
+                               PrintAndLog("Block No must include 2 HEX symbols\n");
+                               errors = true;
+                       }
+                       cmdp += 2;
+                       break;
+               case 'c':
+               case 'C':
+                       keyType = 0x18;
+                       cmdp++;
+                       break;
+               case 'e':
+               case 'E':
+                       elite = true;
+                       cmdp++;
+                       break;
+               case 'k':
+               case 'K':
+                       dataLen = param_getstr(Cmd, cmdp+1, tempStr);
+                       if (dataLen == 16) { 
+                               errors = param_gethex(tempStr, 0, KEY, dataLen);
+                       } else if (dataLen == 1) {
+                               keyNbr = param_get8(Cmd, cmdp+1);
+                               if (keyNbr < ICLASS_KEYS_MAX) {
+                                       memcpy(KEY, iClass_Key_Table[keyNbr], 8);
+                               } else {
+                                       PrintAndLog("\nERROR: Credit KeyNbr is invalid\n");
+                                       errors = true;
+                               }
+                       } else {
+                               PrintAndLog("\nERROR: Credit Key is incorrect length\n");
+                               errors = true;
+                       }
+                       cmdp += 2;
+                       break;
+               case 'r':
+               case 'R':
+                       rawkey = true;
+                       cmdp++;
+                       break;
+               default:
+                       PrintAndLog("Unknown parameter '%c'\n", param_getchar(Cmd, cmdp));
+                       errors = true;
+                       break;
+               }
+               if(errors) return usage_hf_iclass_readblock();
+       }
+
+       if (cmdp < 4) return usage_hf_iclass_readblock();
+
+       return ReadBlock(KEY, blockno, keyType, elite, rawkey, true);
+}
+
+int CmdHFiClass_loclass(const char *Cmd) {
        char opt = param_getchar(Cmd, 0);
 
        if (strlen(Cmd)<1 || opt == 'h') {
@@ -649,7 +1220,7 @@ int CmdHFiClass_loclass(const char *Cmd)
                PrintAndLog("f <filename>  Bruteforce iclass dumpfile");
                PrintAndLog("                   An iclass dumpfile is assumed to consist of an arbitrary number of");
                PrintAndLog("                   malicious CSNs, and their protocol responses");
-               PrintAndLog("                   The the binary format of the file is expected to be as follows: ");
+               PrintAndLog("                   The binary format of the file is expected to be as follows: ");
                PrintAndLog("                   <8 byte CSN><8 byte CC><4 byte NR><4 byte MAC>");
                PrintAndLog("                   <8 byte CSN><8 byte CC><4 byte NR><4 byte MAC>");
                PrintAndLog("                   <8 byte CSN><8 byte CC><4 byte NR><4 byte MAC>");
@@ -683,19 +1254,446 @@ int CmdHFiClass_loclass(const char *Cmd)
        return 0;
 }
 
+void printIclassDumpContents(uint8_t *iclass_dump, uint8_t startblock, uint8_t endblock, size_t filesize) {
+       uint8_t blockdata[8];
+       uint8_t mem_config;
+       memcpy(&mem_config, iclass_dump + 13,1);
+       uint8_t maxmemcount;
+       uint8_t filemaxblock = filesize / 8;
+       if (mem_config & 0x80)
+               maxmemcount = 255;
+       else
+               maxmemcount = 31;
+       //PrintAndLog   ("endblock: %d, filesize: %d, maxmemcount: %d, filemaxblock: %d", endblock,filesize, maxmemcount, filemaxblock);
+
+       if (startblock == 0)
+               startblock = 6;
+       if ((endblock > maxmemcount) || (endblock == 0))
+               endblock = maxmemcount;
+       if (endblock > filemaxblock)
+               endblock = filemaxblock;
+       int i = startblock;
+       int j;
+       while (i <= endblock){
+               printf("Block |%02X| ",i);
+               memcpy(blockdata,iclass_dump + (i * 8),8);
+               for (j = 0;j < 8;j++)
+                       printf("%02X ",blockdata[j]);
+               printf("|\n");
+               i++;
+       }
+}
+
+int usage_hf_iclass_readtagfile() {
+       PrintAndLog("Usage: hf iclass readtagfile <filename> [startblock] [endblock]");
+       return 1;
+}
+
+int CmdHFiClassReadTagFile(const char *Cmd) {
+       int startblock = 0;
+       int endblock = 0;
+       char tempnum[5];
+       FILE *f;
+       char filename[FILE_PATH_SIZE];
+       if (param_getstr(Cmd, 0, filename) < 1)
+               return usage_hf_iclass_readtagfile();
+       if (param_getstr(Cmd,1,(char *)&tempnum) < 1)
+               startblock = 0;
+       else
+               sscanf(tempnum,"%d",&startblock);
+
+       if (param_getstr(Cmd,2,(char *)&tempnum) < 1)
+               endblock = 0;
+       else
+               sscanf(tempnum,"%d",&endblock);
+       // file handling and reading
+       f = fopen(filename,"rb");
+       if(!f) {
+               PrintAndLog("Failed to read from file '%s'", filename);
+               return 1;
+       }
+       fseek(f, 0, SEEK_END);
+       long fsize = ftell(f);
+       fseek(f, 0, SEEK_SET);
+
+       if ( fsize < 0 ) {
+               PrintAndLog("Error, when getting filesize");
+               fclose(f);
+               return 1;
+       }
+
+       uint8_t *dump = malloc(fsize);
+
+       size_t bytes_read = fread(dump, 1, fsize, f);
+       fclose(f);
+       uint8_t *csn = dump;
+       printf("CSN   [00] | %02X %02X %02X %02X %02X %02X %02X %02X |\n",csn[0],csn[1],csn[2],csn[3],csn[4],csn[5],csn[6],csn[7]);
+       //    printIclassDumpInfo(dump);
+       printIclassDumpContents(dump,startblock,endblock,bytes_read);
+       free(dump);
+       return 0;
+}
+
+/*
+uint64_t xorcheck(uint64_t sdiv,uint64_t hdiv) {
+       uint64_t new_div = 0x00;
+       new_div ^= sdiv;
+       new_div ^= hdiv;
+       return new_div;
+}
+
+uint64_t hexarray_to_uint64(uint8_t *key) {
+       char temp[17];
+       uint64_t uint_key;
+       for (int i = 0;i < 8;i++)
+               sprintf(&temp[(i *2)],"%02X",key[i]);
+       temp[16] = '\0';
+       if (sscanf(temp,"%016"llx,&uint_key) < 1)
+               return 0;
+       return uint_key;
+}
+*/
+void HFiClassCalcDivKey(uint8_t        *CSN, uint8_t   *KEY, uint8_t *div_key, bool elite){
+       uint8_t keytable[128] = {0};
+       uint8_t key_index[8] = {0};
+       if (elite) {
+               uint8_t key_sel[8] = { 0 };
+               uint8_t key_sel_p[8] = { 0 };
+               hash2(KEY, keytable);
+               hash1(CSN, key_index);
+               for(uint8_t i = 0; i < 8 ; i++)
+                       key_sel[i] = keytable[key_index[i]] & 0xFF;
+
+               //Permute from iclass format to standard format
+               permutekey_rev(key_sel, key_sel_p);
+               diversifyKey(CSN, key_sel_p, div_key);  
+       } else {
+               diversifyKey(CSN, KEY, div_key);
+       }               
+}
+
+//when told CSN, oldkey, newkey, if new key is elite (elite), and if old key was elite (oldElite)
+//calculate and return xor_div_key (ready for a key write command)
+//print all div_keys if verbose
+static void HFiClassCalcNewKey(uint8_t *CSN, uint8_t *OLDKEY, uint8_t *NEWKEY, uint8_t *xor_div_key, bool elite, bool oldElite, bool verbose){
+       uint8_t old_div_key[8] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
+       uint8_t new_div_key[8] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
+       //get old div key
+       HFiClassCalcDivKey(CSN, OLDKEY, old_div_key, oldElite);
+       //get new div key
+       HFiClassCalcDivKey(CSN, NEWKEY, new_div_key, elite);
+       
+       for (uint8_t i = 0; i < sizeof(old_div_key); i++){
+               xor_div_key[i] = old_div_key[i] ^ new_div_key[i];
+       }
+       if (verbose) {
+               printf("Old Div Key : %s\n",sprint_hex(old_div_key,8));
+               printf("New Div Key : %s\n",sprint_hex(new_div_key,8));
+               printf("Xor Div Key : %s\n",sprint_hex(xor_div_key,8));         
+       }
+}
+
+int usage_hf_iclass_calc_newkey(void) {
+       PrintAndLog("HELP :  Manage iClass Keys in client memory:\n");
+       PrintAndLog("Usage:  hf iclass calc_newkey o <Old key> n <New key> s [csn] e");
+       PrintAndLog("  Options:");
+       PrintAndLog("  o <oldkey> : *specify a key as 16 hex symbols or a key number as 1 symbol");
+       PrintAndLog("  n <newkey> : *specify a key as 16 hex symbols or a key number as 1 symbol");
+       PrintAndLog("  s <csn>    : specify a card Serial number to diversify the key (if omitted will attempt to read a csn)");
+       PrintAndLog("  e          : specify new key as elite calc");
+       PrintAndLog("  ee         : specify old and new key as elite calc");
+       PrintAndLog("Samples:");
+       PrintAndLog(" e key to e key given csn : hf iclass calcnewkey o 1122334455667788 n 2233445566778899 s deadbeafdeadbeaf ee");
+       PrintAndLog(" std key to e key read csn: hf iclass calcnewkey o 1122334455667788 n 2233445566778899 e");
+       PrintAndLog(" std to std read csn      : hf iclass calcnewkey o 1122334455667788 n 2233445566778899");
+       PrintAndLog("NOTE: * = required\n");
+
+       return 1;
+}
+
+int CmdHFiClassCalcNewKey(const char *Cmd) {
+       uint8_t OLDKEY[8] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
+       uint8_t NEWKEY[8] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
+       uint8_t xor_div_key[8] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
+       uint8_t CSN[8] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
+       uint8_t CCNR[12] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
+       uint8_t keyNbr = 0;
+       uint8_t dataLen = 0;
+       char tempStr[50] = {0};
+       bool givenCSN = false;
+       bool oldElite = false;
+       bool elite = false;
+       bool errors = false;
+       uint8_t cmdp = 0;
+       while(param_getchar(Cmd, cmdp) != 0x00)
+       {
+               switch(param_getchar(Cmd, cmdp))
+               {
+               case 'h':
+               case 'H':
+                       return usage_hf_iclass_calc_newkey();
+               case 'e':
+               case 'E':
+                       dataLen = param_getstr(Cmd, cmdp, tempStr);
+                       if (dataLen==2)
+                               oldElite = true;
+                       elite = true;
+                       cmdp++;
+                       break;
+               case 'n':
+               case 'N':
+                       dataLen = param_getstr(Cmd, cmdp+1, tempStr);
+                       if (dataLen == 16) { 
+                               errors = param_gethex(tempStr, 0, NEWKEY, dataLen);
+                       } else if (dataLen == 1) {
+                               keyNbr = param_get8(Cmd, cmdp+1);
+                               if (keyNbr < ICLASS_KEYS_MAX) {
+                                       memcpy(NEWKEY, iClass_Key_Table[keyNbr], 8);
+                               } else {
+                                       PrintAndLog("\nERROR: NewKey Nbr is invalid\n");
+                                       errors = true;
+                               }
+                       } else {
+                               PrintAndLog("\nERROR: NewKey is incorrect length\n");
+                               errors = true;
+                       }
+                       cmdp += 2;
+                       break;
+               case 'o':
+               case 'O':
+                       dataLen = param_getstr(Cmd, cmdp+1, tempStr);
+                       if (dataLen == 16) { 
+                               errors = param_gethex(tempStr, 0, OLDKEY, dataLen);
+                       } else if (dataLen == 1) {
+                               keyNbr = param_get8(Cmd, cmdp+1);
+                               if (keyNbr < ICLASS_KEYS_MAX) {
+                                       memcpy(OLDKEY, iClass_Key_Table[keyNbr], 8);
+                               } else {
+                                       PrintAndLog("\nERROR: Credit KeyNbr is invalid\n");
+                                       errors = true;
+                               }
+                       } else {
+                               PrintAndLog("\nERROR: Credit Key is incorrect length\n");
+                               errors = true;
+                       }
+                       cmdp += 2;
+                       break;
+               case 's':
+               case 'S':
+                       givenCSN = true;
+                       if (param_gethex(Cmd, cmdp+1, CSN, 16))
+                               return usage_hf_iclass_calc_newkey();
+                       cmdp += 2;
+                       break;
+               default:
+                       PrintAndLog("Unknown parameter '%c'\n", param_getchar(Cmd, cmdp));
+                       errors = true;
+                       break;
+               }
+               if(errors) return usage_hf_iclass_calc_newkey();
+       }
+
+       if (cmdp < 4) return usage_hf_iclass_calc_newkey();
+
+       if (!givenCSN)
+               if (!select_only(CSN, CCNR, false, true))
+                       return 0;
+       
+       HFiClassCalcNewKey(CSN, OLDKEY, NEWKEY, xor_div_key, elite, oldElite, true);
+       return 0;
+}
+
+static int loadKeys(char *filename) {
+       FILE *f;
+       f = fopen(filename,"rb");
+       if(!f) {
+               PrintAndLog("Failed to read from file '%s'", filename);
+               return 0;
+       }
+       fseek(f, 0, SEEK_END);
+       long fsize = ftell(f);
+       fseek(f, 0, SEEK_SET);
+
+       if ( fsize < 0 ) {
+               PrintAndLog("Error, when getting filesize");
+               fclose(f);
+               return 1;
+       }
+
+       uint8_t *dump = malloc(fsize);
+
+       size_t bytes_read = fread(dump, 1, fsize, f);
+       fclose(f);
+       if (bytes_read > ICLASS_KEYS_MAX * 8){
+               PrintAndLog("File is too long to load - bytes: %u", bytes_read);
+               free(dump);
+               return 0;
+       }
+       uint8_t i = 0;
+       for (; i < bytes_read/8; i++){
+               memcpy(iClass_Key_Table[i],dump+(i*8),8);
+       }
+       free(dump);
+       PrintAndLog("%u keys loaded", i);
+       return 1;
+}
+
+static int saveKeys(char *filename) {
+       FILE *f;
+       f = fopen(filename,"wb");
+       if (f == NULL) {
+               printf("error opening file %s\n",filename);
+               return 0;
+       }
+       for (uint8_t i = 0; i < ICLASS_KEYS_MAX; i++){
+               if (fwrite(iClass_Key_Table[i],8,1,f) != 1){
+                       PrintAndLog("save key failed to write to file: %s", filename);
+                       break;
+               }
+       }
+       fclose(f);
+       return 0;
+}
+
+static int printKeys(void) {
+       PrintAndLog("");
+       for (uint8_t i = 0; i < ICLASS_KEYS_MAX; i++){
+               PrintAndLog("%u: %s",i,sprint_hex(iClass_Key_Table[i],8));
+       }
+       PrintAndLog("");        
+       return 0;
+}
+
+int usage_hf_iclass_managekeys(void) {
+       PrintAndLog("HELP :  Manage iClass Keys in client memory:\n");
+       PrintAndLog("Usage:  hf iclass managekeys n [keynbr] k [key] f [filename] s l p\n");
+       PrintAndLog("  Options:");
+       PrintAndLog("  n <keynbr>  : specify the keyNbr to set in memory");
+       PrintAndLog("  k <key>     : set a key in memory");
+       PrintAndLog("  f <filename>: specify a filename to use with load or save operations");
+       PrintAndLog("  s           : save keys in memory to file specified by filename");
+       PrintAndLog("  l           : load keys to memory from file specified by filename");
+       PrintAndLog("  p           : print keys loaded into memory\n");
+       PrintAndLog("Samples:");
+       PrintAndLog(" set key      : hf iclass managekeys n 0 k 1122334455667788");
+       PrintAndLog(" save key file: hf iclass managekeys f mykeys.bin s");
+       PrintAndLog(" load key file: hf iclass managekeys f mykeys.bin l");
+       PrintAndLog(" print keys   : hf iclass managekeys p\n");
+       return 0;
+}
+
+int CmdHFiClassManageKeys(const char *Cmd) {
+       uint8_t keyNbr = 0;
+       uint8_t dataLen = 0;
+       uint8_t KEY[8] = {0};
+       char filename[FILE_PATH_SIZE];
+       uint8_t fileNameLen = 0;
+       bool errors = false;
+       uint8_t operation = 0;
+       char tempStr[20];
+       uint8_t cmdp = 0;
+
+       while(param_getchar(Cmd, cmdp) != 0x00)
+       {
+               switch(param_getchar(Cmd, cmdp))
+               {
+               case 'h':
+               case 'H':
+                       return usage_hf_iclass_managekeys();
+               case 'f':
+               case 'F':
+                       fileNameLen = param_getstr(Cmd, cmdp+1, filename); 
+                       if (fileNameLen < 1) {
+                               PrintAndLog("No filename found after f");
+                               errors = true;
+                       }
+                       cmdp += 2;
+                       break;
+               case 'n':
+               case 'N':
+                       keyNbr = param_get8(Cmd, cmdp+1);
+                       if (keyNbr >= ICLASS_KEYS_MAX) {
+                               PrintAndLog("Invalid block number");
+                               errors = true;
+                       }
+                       cmdp += 2;
+                       break;
+               case 'k':
+               case 'K':
+                       operation += 3; //set key 
+                       dataLen = param_getstr(Cmd, cmdp+1, tempStr);
+                       if (dataLen == 16) { //ul-c or ev1/ntag key length
+                               errors = param_gethex(tempStr, 0, KEY, dataLen);
+                       } else {
+                               PrintAndLog("\nERROR: Key is incorrect length\n");
+                               errors = true;
+                       }
+                       cmdp += 2;
+                       break;
+               case 'p':
+               case 'P':
+                       operation += 4; //print keys in memory
+                       cmdp++;
+                       break;
+               case 'l':
+               case 'L':
+                       operation += 5; //load keys from file
+                       cmdp++;
+                       break;
+               case 's':
+               case 'S':
+                       operation += 6; //save keys to file
+                       cmdp++;
+                       break;
+               default:
+                       PrintAndLog("Unknown parameter '%c'\n", param_getchar(Cmd, cmdp));
+                       errors = true;
+                       break;
+               }
+               if(errors) return usage_hf_iclass_managekeys();
+       }
+       if (operation == 0){
+               PrintAndLog("no operation specified (load, save, or print)\n");
+               return usage_hf_iclass_managekeys();
+       }
+       if (operation > 6){
+               PrintAndLog("Too many operations specified\n");
+               return usage_hf_iclass_managekeys();
+       }
+       if (operation > 4 && fileNameLen == 0){
+               PrintAndLog("You must enter a filename when loading or saving\n");
+               return usage_hf_iclass_managekeys();
+       }
+
+       switch (operation){
+               case 3: memcpy(iClass_Key_Table[keyNbr], KEY, 8); return 1;
+               case 4: return printKeys();
+               case 5: return loadKeys(filename);
+               case 6: return saveKeys(filename);
+               break;
+       }
+       return 0;
+}
+
 static command_t CommandTable[] = 
 {
-       {"help",        CmdHelp,                        1,      "This help"},
-       {"list",        CmdHFiClassList,        0,      "[Deprecated] List iClass history"},
-       {"snoop",       CmdHFiClassSnoop,       0,      "Eavesdrop iClass communication"},
-       {"sim", CmdHFiClassSim,         0,      "Simulate iClass tag"},
-       {"reader",CmdHFiClassReader,    0,      "Read an iClass tag"},
-       {"replay",CmdHFiClassReader_Replay,     0,      "Read an iClass tag via Reply Attack"},
-       {"dump",        CmdHFiClassReader_Dump, 0,              "Authenticate and Dump iClass tag"},
-//     {"write",       CmdHFiClass_iso14443A_write,    0,      "Authenticate and Write iClass block"},
-       {"loclass",     CmdHFiClass_loclass,    1,      "Use loclass to perform bruteforce of reader attack dump"},
-       {"eload",   CmdHFiClassELoad,    0,     "[experimental] Load data into iclass emulator memory"},
-       {"decrypt", CmdHFiClassDecrypt,  1,     "Decrypt tagdump" },
+       {"help",        CmdHelp,                        1,      "This help"},
+       {"calcnewkey",  CmdHFiClassCalcNewKey,          1,      "[options..] Calc Diversified keys (blocks 3 & 4) to write new keys"},
+       {"clone",       CmdHFiClassCloneTag,            0,      "[options..] Authenticate and Clone from iClass bin file"},
+       {"decrypt",     CmdHFiClassDecrypt,             1,      "[f <fname>] Decrypt tagdump" },
+       {"dump",        CmdHFiClassReader_Dump,         0,      "[options..] Authenticate and Dump iClass tag's AA1"},
+       {"eload",       CmdHFiClassELoad,               0,      "[f <fname>] (experimental) Load data into iClass emulator memory"},
+       {"encryptblk",  CmdHFiClassEncryptBlk,          1,      "<BlockData> Encrypt given block data"},
+       {"list",        CmdHFiClassList,                0,      "            (Deprecated) List iClass history"},
+       {"loclass",     CmdHFiClass_loclass,            1,      "[options..] Use loclass to perform bruteforce of reader attack dump"},
+       {"managekeys",  CmdHFiClassManageKeys,          1,      "[options..] Manage the keys to use with iClass"},
+       {"readblk",     CmdHFiClass_ReadBlock,          0,      "[options..] Authenticate and Read iClass block"},
+       {"reader",      CmdHFiClassReader,              0,      "            Read an iClass tag"},
+       {"readtagfile", CmdHFiClassReadTagFile,         1,      "[options..] Display Content from tagfile"},
+       {"replay",      CmdHFiClassReader_Replay,       0,      "<mac>       Read an iClass tag via Reply Attack"},
+       {"sim",         CmdHFiClassSim,                 0,      "[options..] Simulate iClass tag"},
+       {"snoop",       CmdHFiClassSnoop,               0,      "            Eavesdrop iClass communication"},
+       {"writeblk",    CmdHFiClass_WriteBlock,         0,      "[options..] Authenticate and Write iClass block"},
        {NULL, NULL, 0, NULL}
 };
 
index 30c6a8a7b1907f2bedf6f121b79ffad46293c9a1..9a3adf504b93ef59d322d62bb1cd9a6c3c13f7f7 100644 (file)
 
 int CmdHFiClass(const char *Cmd);
 
-int CmdHFiClassSnoop(const char *Cmd);
-int CmdHFiClassSim(const char *Cmd);
+int CmdHFiClassCalcNewKey(const char *Cmd);
+int CmdHFiClassCloneTag(const char *Cmd);
+int CmdHFiClassDecrypt(const char *Cmd);
+int CmdHFiClassEncryptBlk(const char *Cmd);
+int CmdHFiClassELoad(const char *Cmd);
 int CmdHFiClassList(const char *Cmd);
 int HFiClassReader(const char *Cmd, bool loop, bool verbose);
 int CmdHFiClassReader(const char *Cmd);
+int CmdHFiClassReader_Dump(const char *Cmd);
 int CmdHFiClassReader_Replay(const char *Cmd);
-
+int CmdHFiClassReadKeyFile(const char *filename);
+int CmdHFiClassReadTagFile(const char *Cmd);
+int CmdHFiClass_ReadBlock(const char *Cmd);
+int CmdHFiClass_TestMac(const char *Cmd);
+int CmdHFiClassManageKeys(const char *Cmd);
+int CmdHFiClass_loclass(const char *Cmd);
+int CmdHFiClassSnoop(const char *Cmd);
+int CmdHFiClassSim(const char *Cmd);
+int CmdHFiClassWriteKeyFile(const char *Cmd);
+int CmdHFiClass_WriteBlock(const char *Cmd);
+void printIclassDumpContents(uint8_t *iclass_dump, uint8_t startblock, uint8_t endblock, size_t filesize);
+void HFiClassCalcDivKey(uint8_t        *CSN, uint8_t   *KEY, uint8_t *div_key, bool elite);
 #endif
index 7ee601b232888aaece3aa1fe70b42d1731879d85..4e52c35c168574b0c2af3c1e6682aa8572fa6747 100644 (file)
@@ -58,7 +58,7 @@ int CmdLegicDecode(const char *Cmd)
   int crc = 0;
   int wrp = 0;
   int wrc = 0;
-  uint8_t data_buf[1024]; // receiver buffer
+  uint8_t data_buf[1052]; // receiver buffer
   char out_string[3076]; // just use big buffer - bad practice
   char token_type[4];
   
index 2b5a5b87965dd7b36e283e9f94fe876f2e740dc7..48e78b1c2fcad2a74a90de187356d346ed54492c 100644 (file)
@@ -17,15 +17,14 @@ int CmdHF14AMifare(const char *Cmd)
        uint32_t uid = 0;\r
        uint32_t nt = 0, nr = 0;\r
        uint64_t par_list = 0, ks_list = 0, r_key = 0;\r
-       uint8_t isOK = 0;\r
-       uint8_t keyBlock[8] = {0};\r
+       int16_t isOK = 0;\r
 \r
        UsbCommand c = {CMD_READER_MIFARE, {true, 0, 0}};\r
 \r
        // message\r
        printf("-------------------------------------------------------------------------\n");\r
        printf("Executing command. Expected execution time: 25sec on average  :-)\n");\r
-       printf("Press the key on the proxmark3 device to abort both proxmark3 and client.\n");\r
+       printf("Press button on the proxmark3 device to abort both proxmark3 and client.\n");\r
        printf("-------------------------------------------------------------------------\n");\r
 \r
        \r
@@ -47,15 +46,22 @@ start:
                }\r
                \r
                UsbCommand resp;\r
-               if (WaitForResponseTimeout(CMD_ACK,&resp,1000)) {\r
-                       isOK  = resp.arg[0] & 0xff;\r
+               if (WaitForResponseTimeout(CMD_ACK, &resp, 1000)) {\r
+                       isOK  = resp.arg[0];\r
                        uid = (uint32_t)bytes_to_num(resp.d.asBytes +  0, 4);\r
                        nt =  (uint32_t)bytes_to_num(resp.d.asBytes +  4, 4);\r
                        par_list = bytes_to_num(resp.d.asBytes +  8, 8);\r
                        ks_list = bytes_to_num(resp.d.asBytes +  16, 8);\r
                        nr = bytes_to_num(resp.d.asBytes + 24, 4);\r
                        printf("\n\n");\r
-                       if (!isOK) PrintAndLog("Proxmark can't get statistic info. Execution aborted.\n");\r
+                       switch (isOK) {\r
+                               case -1 : PrintAndLog("Button pressed. Aborted.\n"); break;\r
+                               case -2 : PrintAndLog("Card is not vulnerable to Darkside attack (doesn't send NACK on authentication requests).\n"); break;\r
+                               case -3 : PrintAndLog("Card is not vulnerable to Darkside attack (its random number generator is not predictable).\n"); break;\r
+                               case -4 : PrintAndLog("Card is not vulnerable to Darkside attack (its random number generator seems to be based on the wellknown");\r
+                                                       PrintAndLog("generating polynomial with 16 effective bits only, but shows unexpected behaviour.\n"); break;\r
+                               default: ;\r
+                       }\r
                        break;\r
                }\r
        }       \r
@@ -69,22 +75,13 @@ start:
        if (nonce2key(uid, nt, nr, par_list, ks_list, &r_key)) {\r
                isOK = 2;\r
                PrintAndLog("Key not found (lfsr_common_prefix list is null). Nt=%08x", nt);    \r
-       } else {\r
-               printf("------------------------------------------------------------------\n");\r
-               PrintAndLog("Key found:%012"llx" \n", r_key);\r
-\r
-               num_to_bytes(r_key, 6, keyBlock);\r
-               isOK = mfCheckKeys(0, 0, 1, keyBlock, &r_key);\r
-       }\r
-       \r
-       if (!isOK) \r
-               PrintAndLog("Found valid key:%012"llx, r_key);\r
-       else\r
-       {\r
-               if (isOK != 2) PrintAndLog("Found invalid key. ");      \r
                PrintAndLog("Failing is expected to happen in 25%% of all cases. Trying again with a different reader nonce...");\r
                c.arg[0] = false;\r
                goto start;\r
+       } else {\r
+               isOK = 0;\r
+               printf("------------------------------------------------------------------\n");\r
+               PrintAndLog("Found valid key:%012"llx" \n", r_key);\r
        }\r
        \r
        PrintAndLog("");\r
@@ -622,8 +619,14 @@ int CmdHF14AMfNested(const char *Cmd)
        \r
        if (cmdp == 'o') {\r
                PrintAndLog("--target block no:%3d, target key type:%c ", trgBlockNo, trgKeyType?'B':'A');\r
-               if (mfnested(blockNo, keyType, key, trgBlockNo, trgKeyType, keyBlock, true)) {\r
-                       PrintAndLog("Nested error.");\r
+               int16_t isOK = mfnested(blockNo, keyType, key, trgBlockNo, trgKeyType, keyBlock, true);\r
+               if (isOK) {\r
+                       switch (isOK) {\r
+                               case -1 : PrintAndLog("Error: No response from Proxmark.\n"); break;\r
+                               case -2 : PrintAndLog("Button pressed. Aborted.\n"); break;\r
+                               case -3 : PrintAndLog("Tag isn't vulnerable to Nested Attack (random numbers are not predictable).\n"); break;\r
+                               default : PrintAndLog("Unknown Error.\n");\r
+                       }\r
                        return 2;\r
                }\r
                key64 = bytes_to_num(keyBlock, 6);\r
@@ -678,7 +681,7 @@ int CmdHF14AMfNested(const char *Cmd)
                        for (j = 0; j < 2; j++) {\r
                                if (e_sector[i].foundKey[j]) continue;\r
                                \r
-                               res = mfCheckKeys(FirstBlockOfSector(i), j, 6, keyBlock, &key64);\r
+                               res = mfCheckKeys(FirstBlockOfSector(i), j, true, 6, keyBlock, &key64);\r
                                \r
                                if (!res) {\r
                                        e_sector[i].Key[j] = key64;\r
@@ -696,11 +699,17 @@ int CmdHF14AMfNested(const char *Cmd)
                                for (trgKeyType = 0; trgKeyType < 2; trgKeyType++) { \r
                                        if (e_sector[sectorNo].foundKey[trgKeyType]) continue;\r
                                        PrintAndLog("-----------------------------------------------");\r
-                                       if(mfnested(blockNo, keyType, key, FirstBlockOfSector(sectorNo), trgKeyType, keyBlock, calibrate)) {\r
-                                               PrintAndLog("Nested error.\n");\r
+                                       int16_t isOK = mfnested(blockNo, keyType, key, FirstBlockOfSector(sectorNo), trgKeyType, keyBlock, calibrate);\r
+                                       if(isOK) {\r
+                                               switch (isOK) {\r
+                                                       case -1 : PrintAndLog("Error: No response from Proxmark.\n"); break;\r
+                                                       case -2 : PrintAndLog("Button pressed. Aborted.\n"); break;\r
+                                                       case -3 : PrintAndLog("Tag isn't vulnerable to Nested Attack (random numbers are not predictable).\n"); break;\r
+                                                       default : PrintAndLog("Unknown Error.\n");\r
+                                               }\r
                                                free(e_sector);\r
-                                               return 2;                                       }\r
-                                       else {\r
+                                               return 2;\r
+                                       else {\r
                                                calibrate = false;\r
                                        }\r
                                        \r
@@ -956,7 +965,7 @@ int CmdHF14AMfChk(const char *Cmd)
                        uint32_t max_keys = keycnt>USB_CMD_DATA_SIZE/6?USB_CMD_DATA_SIZE/6:keycnt;\r
                        for (uint32_t c = 0; c < keycnt; c+=max_keys) {\r
                                uint32_t size = keycnt-c>max_keys?max_keys:keycnt-c;\r
-                               res = mfCheckKeys(b, t, size, &keyBlock[6*c], &key64);\r
+                               res = mfCheckKeys(b, t, true, size, &keyBlock[6*c], &key64);\r
                                if (res != 1) {\r
                                        if (!res) {\r
                                                PrintAndLog("Found valid key:[%012"llx"]",key64);\r
@@ -1750,10 +1759,13 @@ int CmdHF14AMfCSave(const char *Cmd) {
                        // get filename\r
                        if (mfCGetBlock(0, buf, CSETBLOCK_SINGLE_OPER)) {\r
                                PrintAndLog("Cant get block: %d", 0);\r
-                               return 1;\r
+                               len = sprintf(fnameptr, "dump");\r
+                               fnameptr += len;\r
+                       }\r
+                       else {\r
+                               for (j = 0; j < 7; j++, fnameptr += 2)\r
+                                       sprintf(fnameptr, "%02x", buf[j]); \r
                        }\r
-                       for (j = 0; j < 7; j++, fnameptr += 2)\r
-                               sprintf(fnameptr, "%02x", buf[j]); \r
                } else {\r
                        memcpy(filename, Cmd, len);\r
                        fnameptr += len;\r
@@ -1939,6 +1951,13 @@ int CmdHF14AMfSniff(const char *Cmd){
        return 0;\r
 }\r
 \r
+//needs nt, ar, at, Data to decrypt\r
+int CmdDecryptTraceCmds(const char *Cmd){\r
+       uint8_t data[50];\r
+       int len = 0;\r
+       param_gethex_ex(Cmd,3,data,&len);\r
+       return tryDecryptWord(param_get32ex(Cmd,0,0,16),param_get32ex(Cmd,1,0,16),param_get32ex(Cmd,2,0,16),data,len/2);\r
+}\r
 \r
 static command_t CommandTable[] =\r
 {\r
@@ -1967,6 +1986,7 @@ static command_t CommandTable[] =
   {"cgetsc",   CmdHF14AMfCGetSc,               0, "Read sector - Magic Chinese card"},\r
   {"cload",            CmdHF14AMfCLoad,                0, "Load dump into magic Chinese card"},\r
   {"csave",            CmdHF14AMfCSave,                0, "Save dump from magic Chinese card into file or emulator"},\r
+  {"decrypt", CmdDecryptTraceCmds,1, "[nt] [ar_enc] [at_enc] [data] - to decrypt snoop or trace"},\r
   {NULL, NULL, 0, NULL}\r
 };\r
 \r
index 191032984929b77e34a998b0b1b5bdfc29c74fba..25a073d34440b2de98b3c56d67597dbc2df14111 100644 (file)
 #include "protocols.h"
 #include "data.h"
 
-#define MAX_UL_BLOCKS     0x0f
-#define MAX_ULC_BLOCKS    0x2b
-#define MAX_ULEV1a_BLOCKS 0x13
-#define MAX_ULEV1b_BLOCKS 0x28
-#define MAX_NTAG_203      0x29
-#define MAX_NTAG_210      0x13
-#define MAX_NTAG_212      0x28
-#define MAX_NTAG_213      0x2c
-#define MAX_NTAG_215      0x86
-#define MAX_NTAG_216      0xe6
+#define MAX_UL_BLOCKS      0x0f
+#define MAX_ULC_BLOCKS     0x2b
+#define MAX_ULEV1a_BLOCKS  0x13
+#define MAX_ULEV1b_BLOCKS  0x28
+#define MAX_NTAG_203       0x29
+#define MAX_NTAG_210       0x13
+#define MAX_NTAG_212       0x28
+#define MAX_NTAG_213       0x2c
+#define MAX_NTAG_215       0x86
+#define MAX_NTAG_216       0xe6
+#define MAX_MY_D_NFC       0xff
+#define MAX_MY_D_MOVE      0x25
+#define MAX_MY_D_MOVE_LEAN 0x0f
 
 #define KEYS_3DES_COUNT 7
 uint8_t default_3des_keys[KEYS_3DES_COUNT][16] = {
@@ -54,17 +57,18 @@ uint8_t default_pwd_pack[KEYS_PWD_COUNT][4] = {
        {0x32,0x0C,0x16,0x17}, // PACK 0x80,0x80 -- AMiiboo (sniffed) 
 };
 
-#define MAX_UL_TYPES 16
-uint16_t UL_TYPES_ARRAY[MAX_UL_TYPES] = {UNKNOWN, UL, UL_C, UL_EV1_48, UL_EV1_128, NTAG, NTAG_203,
-           NTAG_210, NTAG_212, NTAG_213, NTAG_215, NTAG_216, MY_D, MY_D_NFC, MY_D_MOVE, MY_D_MOVE_NFC};
+#define MAX_UL_TYPES 18
+uint32_t UL_TYPES_ARRAY[MAX_UL_TYPES] = {UNKNOWN, UL, UL_C, UL_EV1_48, UL_EV1_128, NTAG, NTAG_203,
+           NTAG_210, NTAG_212, NTAG_213, NTAG_215, NTAG_216, MY_D, MY_D_NFC, MY_D_MOVE, MY_D_MOVE_NFC, MY_D_MOVE_LEAN, FUDAN_UL};
 
 uint8_t UL_MEMORY_ARRAY[MAX_UL_TYPES] = {MAX_UL_BLOCKS, MAX_UL_BLOCKS, MAX_ULC_BLOCKS, MAX_ULEV1a_BLOCKS,
            MAX_ULEV1b_BLOCKS, MAX_NTAG_203, MAX_NTAG_203, MAX_NTAG_210, MAX_NTAG_212, MAX_NTAG_213,
-           MAX_NTAG_215, MAX_NTAG_216, MAX_UL_BLOCKS, MAX_UL_BLOCKS, MAX_UL_BLOCKS, MAX_UL_BLOCKS};
+           MAX_NTAG_215, MAX_NTAG_216, MAX_UL_BLOCKS, MAX_MY_D_NFC, MAX_MY_D_MOVE, MAX_MY_D_MOVE, MAX_MY_D_MOVE_LEAN, MAX_UL_BLOCKS};
 
 
 static int CmdHelp(const char *Cmd);
 
+// get version nxp product type 
 char *getProductTypeStr( uint8_t id){
 
        static char buf[20];
@@ -102,17 +106,20 @@ char *getUlev1CardSizeStr( uint8_t fsize ){
 
 static void ul_switch_on_field(void) {
        UsbCommand c = {CMD_READER_ISO_14443a, {ISO14A_CONNECT | ISO14A_NO_DISCONNECT, 0, 0}};
+       clearCommandBuffer();
        SendCommand(&c);
 }
 
 void ul_switch_off_field(void) {
        UsbCommand c = {CMD_READER_ISO_14443a, {0, 0, 0}};
+       clearCommandBuffer();
        SendCommand(&c);
 }
 
 static int ul_send_cmd_raw( uint8_t *cmd, uint8_t cmdlen, uint8_t *response, uint16_t responseLength ) {
        UsbCommand c = {CMD_READER_ISO_14443a, {ISO14A_RAW | ISO14A_NO_DISCONNECT | ISO14A_APPEND_CRC, cmdlen, 0}};
        memcpy(c.d.asBytes, cmd, cmdlen);
+       clearCommandBuffer();
        SendCommand(&c);
        UsbCommand resp;
        if (!WaitForResponseTimeout(CMD_ACK, &resp, 1500)) return -1;
@@ -129,6 +136,7 @@ static int ul_send_cmd_raw_crc( uint8_t *cmd, uint8_t cmdlen, uint8_t *response,
                c.arg[0] |= ISO14A_APPEND_CRC;
 
        memcpy(c.d.asBytes, cmd, cmdlen);       
+       clearCommandBuffer();
        SendCommand(&c);
        UsbCommand resp;
        if (!WaitForResponseTimeout(CMD_ACK, &resp, 1500)) return -1;
@@ -193,6 +201,7 @@ static int ulc_authentication( uint8_t *key, bool switch_off_field ){
 
        UsbCommand c = {CMD_MIFAREUC_AUTH, {switch_off_field}};
        memcpy(c.d.asBytes, key, 16);
+       clearCommandBuffer();
        SendCommand(&c);
        UsbCommand resp;
        if ( !WaitForResponseTimeout(CMD_ACK, &resp, 1500) ) return 0;
@@ -267,6 +276,38 @@ static int ulev1_readSignature( uint8_t *response, uint16_t responseLength ){
        return len;
 }
 
+
+// Fudan check checks for which error is given for a command with incorrect crc
+// NXP UL chip responds with 01, fudan 00.
+// other possible checks:
+//  send a0 + crc 
+//  UL responds with 00, fudan doesn't respond
+//  or
+//  send a200 + crc
+//  UL doesn't respond, fudan responds with 00
+//  or
+//  send 300000 + crc (read with extra byte(s))
+//  UL responds with read of page 0, fudan doesn't respond.
+//
+// make sure field is off before calling this function
+static int ul_fudan_check( void ){
+       iso14a_card_select_t card;
+       if ( !ul_select(&card) ) 
+               return UL_ERROR;
+
+       UsbCommand c = {CMD_READER_ISO_14443a, {ISO14A_RAW | ISO14A_NO_DISCONNECT, 4, 0}};
+
+       uint8_t cmd[4] = {0x30,0x00,0x02,0xa7}; //wrong crc on purpose  should be 0xa8
+       memcpy(c.d.asBytes, cmd, 4);
+       clearCommandBuffer();
+       SendCommand(&c);
+       UsbCommand resp;
+       if (!WaitForResponseTimeout(CMD_ACK, &resp, 1500)) return UL_ERROR;
+       if (resp.arg[0] != 1) return UL_ERROR;
+
+       return (!resp.d.asBytes[0]) ? FUDAN_UL : UL; //if response == 0x00 then Fudan, else Genuine NXP
+}
+
 static int ul_print_default( uint8_t *data){
 
        uint8_t uid[7];
@@ -279,13 +320,13 @@ static int ul_print_default( uint8_t *data){
        uid[6] = data[7];
 
        PrintAndLog("       UID : %s ", sprint_hex(uid, 7));
-       PrintAndLog("    UID[0] : %02X, Manufacturer: %s",  uid[0], getTagInfo(uid[0]) );
-       if ( uid[0] == 0x05 ) {
+       PrintAndLog("    UID[0] : %02X, %s",  uid[0], getTagInfo(uid[0]) );
+       if ( uid[0] == 0x05 && ((uid[1] & 0xf0) >> 4) == 2 ) { // is infineon and 66RxxP
                uint8_t chip = (data[8] & 0xC7); // 11000111  mask, bit 3,4,5 RFU
                switch (chip){
-                       case 0xc2: PrintAndLog("   IC type : SLE 66R04P"); break;
-                       case 0xc4: PrintAndLog("   IC type : SLE 66R16P"); break;
-                       case 0xc6: PrintAndLog("   IC type : SLE 66R32P"); break;
+                       case 0xc2: PrintAndLog("   IC type : SLE 66R04P 770 Bytes"); break; //77 pages
+                       case 0xc4: PrintAndLog("   IC type : SLE 66R16P 2560 Bytes"); break; //256 pages
+                       case 0xc6: PrintAndLog("   IC type : SLE 66R32P 5120 Bytes"); break; //512 pages /2 sectors
                }
        }
        // CT (cascade tag byte) 0x88 xor SN0 xor SN1 xor SN2 
@@ -371,13 +412,17 @@ int ul_print_type(uint32_t tagtype, uint8_t spaces){
        else if ( tagtype & NTAG_I2C_2K )       
                PrintAndLog("%sTYPE : NTAG I%sC 1904bytes (NT3H1201FHK)", spacer, "\xFD");
        else if ( tagtype & MY_D )
-               PrintAndLog("%sTYPE : INFINEON my-d\x99", spacer);
+               PrintAndLog("%sTYPE : INFINEON my-d\x99 (SLE 66RxxS)", spacer);
        else if ( tagtype & MY_D_NFC )
-               PrintAndLog("%sTYPE : INFINEON my-d\x99 NFC", spacer);
+               PrintAndLog("%sTYPE : INFINEON my-d\x99 NFC (SLE 66RxxP)", spacer);
        else if ( tagtype & MY_D_MOVE )
-               PrintAndLog("%sTYPE : INFINEON my-d\x99 move", spacer);
+               PrintAndLog("%sTYPE : INFINEON my-d\x99 move (SLE 66R01P)", spacer);
        else if ( tagtype & MY_D_MOVE_NFC )
-               PrintAndLog("%sTYPE : INFINEON my-d\x99 move NFC", spacer);
+               PrintAndLog("%sTYPE : INFINEON my-d\x99 move NFC (SLE 66R01P)", spacer);
+       else if ( tagtype & MY_D_MOVE_LEAN )
+               PrintAndLog("%sTYPE : INFINEON my-d\x99 move lean (SLE 66R01L)", spacer);
+       else if ( tagtype & FUDAN_UL )
+               PrintAndLog("%sTYPE : FUDAN Ultralight Compatible (or other compatible) %s", spacer, (tagtype & MAGIC) ? "<magic>" : "" );
        else
                PrintAndLog("%sTYPE : Unknown %06x", spacer, tagtype);
        return 0;
@@ -611,13 +656,20 @@ uint32_t GetHF14AMfU_Type(void){
                                ul_switch_off_field();
                        }
                }
+               if (tagtype & UL) {
+                       tagtype = ul_fudan_check(); 
+                       ul_switch_off_field();
+               }
        } else {
+               ul_switch_off_field();
                // Infinition MY-D tests   Exam high nibble 
                uint8_t nib = (card.uid[1] & 0xf0) >> 4;
                switch ( nib ){
-                       case 1: tagtype =  MY_D; break;
-                       case 2: tagtype = (MY_D | MY_D_NFC); break; //notice: we can not currently distinguish between these two
-                       case 3: tagtype = (MY_D_MOVE | MY_D_MOVE_NFC); break; //notice: we can not currently distinguish between these two
+                       // case 0: tagtype =  SLE66R35E7; break; //or SLE 66R35E7 - mifare compat... should have different sak/atqa for mf 1k
+                       case 1: tagtype =  MY_D; break; //or SLE 66RxxS ... up to 512 pages of 8 user bytes...
+                       case 2: tagtype = (MY_D_NFC); break; //or SLE 66RxxP ... up to 512 pages of 8 user bytes... (or in nfc mode FF pages of 4 bytes)
+                       case 3: tagtype = (MY_D_MOVE | MY_D_MOVE_NFC); break; //or SLE 66R01P // 38 pages of 4 bytes //notice: we can not currently distinguish between these two
+                       case 7: tagtype =  MY_D_MOVE_LEAN; break; //or SLE 66R01L  // 16 pages of 4 bytes
                }
        }
 
@@ -839,105 +891,239 @@ int CmdHF14AMfUInfo(const char *Cmd){
 }
 
 //
-//  Mifare Ultralight Write Single Block
+//  Write Single Block
 //
 int CmdHF14AMfUWrBl(const char *Cmd){
-       uint8_t blockNo    = -1;
-       bool chinese_card  = FALSE;
-       uint8_t bldata[16] = {0x00};
-       UsbCommand resp;
 
-       char cmdp = param_getchar(Cmd, 0);
-       if (strlen(Cmd) < 3 || cmdp == 'h' || cmdp == 'H') {
-               PrintAndLog("Usage:  hf mfu wrbl <block number> <block data (8 hex symbols)> [w]");
-               PrintAndLog("       [block number]");
-               PrintAndLog("       [block data] - (8 hex symbols)");
-               PrintAndLog("       [w] - Chinese magic ultralight tag");
-               PrintAndLog("");
-               PrintAndLog("        sample: hf mfu wrbl 0 01020304");
-               PrintAndLog("");                
-               return 0;
-       }       
-       
-       blockNo = param_get8(Cmd, 0);
+       int blockNo = -1;
+       bool errors = false;
+       bool hasAuthKey = false;
+       bool hasPwdKey = false;
+       bool swapEndian = false;
 
-       if (blockNo > MAX_UL_BLOCKS){
-               PrintAndLog("Error: Maximum number of blocks is 15 for Ultralight Cards!");
-               return 1;
+       uint8_t cmdp = 0;
+       uint8_t keylen = 0;
+       uint8_t blockdata[20] = {0x00};
+       uint8_t data[16] = {0x00};
+       uint8_t authenticationkey[16] = {0x00};
+       uint8_t *authKeyPtr = authenticationkey;
+
+       while(param_getchar(Cmd, cmdp) != 0x00)
+       {
+               switch(param_getchar(Cmd, cmdp))
+               {
+                       case 'h':
+                       case 'H':
+                               return usage_hf_mfu_wrbl();
+                       case 'k':
+                       case 'K':
+                               // EV1/NTAG size key
+                               keylen = param_gethex(Cmd, cmdp+1, data, 8);
+                               if ( !keylen ) {
+                                       memcpy(authenticationkey, data, 4);
+                                       cmdp += 2;
+                                       hasPwdKey = true;
+                                       break;
+                               }
+                               // UL-C size key        
+                               keylen = param_gethex(Cmd, cmdp+1, data, 32);
+                               if (!keylen){
+                                       memcpy(authenticationkey, data, 16);
+                                       cmdp += 2;
+                                       hasAuthKey = true;
+                                       break;
+                               }
+                               PrintAndLog("\nERROR: Key is incorrect length\n");
+                               errors = true; 
+                               break;
+                       case 'b':
+                       case 'B':
+                               blockNo = param_get8(Cmd, cmdp+1);
+                               if (blockNo < 0) {
+                                       PrintAndLog("Wrong block number");
+                                       errors = true;
+                               }
+                               cmdp += 2;
+                               break;
+                       case 'l':
+                       case 'L':
+                               swapEndian = true;
+                               cmdp++; 
+                               break;
+                       case 'd':
+                       case 'D':
+                               if ( param_gethex(Cmd, cmdp+1, blockdata, 8) ) {
+                                       PrintAndLog("Block data must include 8 HEX symbols");
+                                       errors = true;
+                                       break;
+                               }
+                               cmdp += 2;
+                               break;
+                       default:
+                               PrintAndLog("Unknown parameter '%c'", param_getchar(Cmd, cmdp));
+                               errors = true;
+                               break;
+               }
+               //Validations
+               if(errors) return usage_hf_mfu_wrbl();
        }
-       
-       if (param_gethex(Cmd, 1, bldata, 8)) {
-               PrintAndLog("Block data must include 8 HEX symbols");
-               return 1;
+
+       if ( blockNo == -1 ) return usage_hf_mfu_wrbl();
+       // starting with getting tagtype
+       TagTypeUL_t tagtype = GetHF14AMfU_Type();
+       if (tagtype == UL_ERROR) return -1;
+
+       uint8_t maxblockno = 0;
+       for (uint8_t idx = 0; idx < MAX_UL_TYPES; idx++){
+               if (tagtype & UL_TYPES_ARRAY[idx])
+                       maxblockno = UL_MEMORY_ARRAY[idx];
        }
-       
-       if (strchr(Cmd,'w') != 0  || strchr(Cmd,'W') != 0 ) {
-               chinese_card = TRUE; 
+       if (blockNo > maxblockno){
+               PrintAndLog("block number too large. Max block is %u/0x%02X \n", maxblockno,maxblockno);
+               return usage_hf_mfu_wrbl();
        }
-       
-       if ( blockNo <= 3) {
-               if (!chinese_card){
-                       PrintAndLog("Access Denied");
-               } else {
-                       PrintAndLog("--specialblock no:%02x", blockNo);
-                       PrintAndLog("--data: %s", sprint_hex(bldata, 4));
-                       UsbCommand d = {CMD_MIFAREU_WRITEBL, {blockNo}};
-                       memcpy(d.d.asBytes,bldata, 4);
-                       SendCommand(&d);
-                       if (WaitForResponseTimeout(CMD_ACK,&resp,1500)) {
-                               uint8_t isOK  = resp.arg[0] & 0xff;
-                               PrintAndLog("isOk:%02x", isOK);
-                       } else {
-                               PrintAndLog("Command execute timeout");
-                       }  
-               }
+
+       // Swap endianness 
+       if (swapEndian && hasAuthKey) authKeyPtr = SwapEndian64(authenticationkey, 16, 8);
+       if (swapEndian && hasPwdKey)  authKeyPtr = SwapEndian64(authenticationkey, 4, 4);
+
+       if ( blockNo <= 3)
+               PrintAndLog("Special Block: %0d (0x%02X) [ %s]", blockNo, blockNo, sprint_hex(blockdata, 4));
+       else
+               PrintAndLog("Block: %0d (0x%02X) [ %s]", blockNo, blockNo, sprint_hex(blockdata, 4));
+
+       //Send write Block
+       UsbCommand c = {CMD_MIFAREU_WRITEBL, {blockNo}};
+       memcpy(c.d.asBytes,blockdata,4);
+
+       if ( hasAuthKey ) {
+               c.arg[1] = 1;
+               memcpy(c.d.asBytes+4,authKeyPtr,16);
+       }
+       else if ( hasPwdKey ) {
+               c.arg[1] = 2;
+               memcpy(c.d.asBytes+4,authKeyPtr,4);
+       }
+
+       clearCommandBuffer();
+       SendCommand(&c);
+       UsbCommand resp;
+       if (WaitForResponseTimeout(CMD_ACK,&resp,1500)) {
+               uint8_t isOK  = resp.arg[0] & 0xff;
+               PrintAndLog("isOk:%02x", isOK);
        } else {
-               PrintAndLog("--block no:%02x", blockNo);
-               PrintAndLog("--data: %s", sprint_hex(bldata, 4));               
-               UsbCommand e = {CMD_MIFAREU_WRITEBL, {blockNo}};
-               memcpy(e.d.asBytes,bldata, 4);
-               SendCommand(&e);
-               if (WaitForResponseTimeout(CMD_ACK,&resp,1500)) {
-                       uint8_t isOK  = resp.arg[0] & 0xff;
-                       PrintAndLog("isOk:%02x", isOK);
-               } else {
-                       PrintAndLog("Command execute timeout");
-               }
+               PrintAndLog("Command execute timeout");
        }
+
        return 0;
 }
-
 //
-//  Mifare Ultralight Read Single Block
+//  Read Single Block
 //
 int CmdHF14AMfURdBl(const char *Cmd){
 
-       UsbCommand resp;
-       uint8_t blockNo = -1;   
-       char cmdp = param_getchar(Cmd, 0);
-       
-       if (strlen(Cmd) < 1 || cmdp == 'h' || cmdp == 'H') {    
-               PrintAndLog("Usage:  hf mfu rdbl <block number>");
-               PrintAndLog("        sample: hfu mfu rdbl 0");
-               return 0;
+       int blockNo = -1;       
+       bool errors = false;
+       bool hasAuthKey = false;
+       bool hasPwdKey = false;
+       bool swapEndian = false;
+       uint8_t cmdp = 0;
+       uint8_t keylen = 0;
+       uint8_t data[16] = {0x00};
+       uint8_t authenticationkey[16] = {0x00};
+       uint8_t *authKeyPtr = authenticationkey;
+
+       while(param_getchar(Cmd, cmdp) != 0x00)
+       {
+               switch(param_getchar(Cmd, cmdp))
+               {
+                       case 'h':
+                       case 'H':
+                               return usage_hf_mfu_rdbl();
+                       case 'k':
+                       case 'K':
+                               // EV1/NTAG size key
+                               keylen = param_gethex(Cmd, cmdp+1, data, 8);
+                               if ( !keylen ) {
+                                       memcpy(authenticationkey, data, 4);
+                                       cmdp += 2;
+                                       hasPwdKey = true;
+                                       break;
+                               }
+                               // UL-C size key        
+                               keylen = param_gethex(Cmd, cmdp+1, data, 32);
+                               if (!keylen){
+                                       memcpy(authenticationkey, data, 16);
+                                       cmdp += 2;
+                                       hasAuthKey = true;
+                                       break;
+                               }
+                               PrintAndLog("\nERROR: Key is incorrect length\n");
+                               errors = true; 
+                               break;
+                       case 'b':
+                       case 'B':
+                               blockNo = param_get8(Cmd, cmdp+1);
+                               if (blockNo < 0) {
+                                       PrintAndLog("Wrong block number");
+                                       errors = true;
+                               }
+                               cmdp += 2;
+                               break;
+                       case 'l':
+                       case 'L':
+                               swapEndian = true;
+                               cmdp++;
+                               break;
+                       default:
+                               PrintAndLog("Unknown parameter '%c'", param_getchar(Cmd, cmdp));
+                               errors = true;
+                               break;
+               }
+               //Validations
+               if(errors) return usage_hf_mfu_rdbl();
        }
 
-       blockNo = param_get8(Cmd, 0);
+       if ( blockNo == -1 ) return usage_hf_mfu_rdbl();
+       // start with getting tagtype
+       TagTypeUL_t tagtype = GetHF14AMfU_Type();
+       if (tagtype == UL_ERROR) return -1;
 
-       if (blockNo > MAX_UL_BLOCKS){
-               PrintAndLog("Error: Maximum number of blocks is 15 for Ultralight");
-               return 1;
+       uint8_t maxblockno = 0;
+       for (uint8_t idx = 0; idx < MAX_UL_TYPES; idx++){
+               if (tagtype & UL_TYPES_ARRAY[idx])
+                       maxblockno = UL_MEMORY_ARRAY[idx];
+       }
+       if (blockNo > maxblockno){
+               PrintAndLog("block number to large. Max block is %u/0x%02X \n", maxblockno,maxblockno);
+               return usage_hf_mfu_rdbl();
        }
 
-       UsbCommand c = {CMD_MIFAREU_READBL, {blockNo}};
-       SendCommand(&c);
+       // Swap endianness 
+       if (swapEndian && hasAuthKey) authKeyPtr = SwapEndian64(authenticationkey, 16, 8);
+       if (swapEndian && hasPwdKey)  authKeyPtr = SwapEndian64(authenticationkey, 4, 4);
 
+       //Read Block
+       UsbCommand c = {CMD_MIFAREU_READBL, {blockNo}};
+       if ( hasAuthKey ){
+               c.arg[1] = 1;
+               memcpy(c.d.asBytes,authKeyPtr,16);
+       }
+       else if ( hasPwdKey ) {
+               c.arg[1] = 2;
+               memcpy(c.d.asBytes,authKeyPtr,4);
+       }
 
+       clearCommandBuffer();
+       SendCommand(&c);
+       UsbCommand resp;
        if (WaitForResponseTimeout(CMD_ACK,&resp,1500)) {
                uint8_t isOK = resp.arg[0] & 0xff;
                if (isOK) {
                        uint8_t *data = resp.d.asBytes;
-                       PrintAndLog("Block: %0d (0x%02X) [ %s]", (int)blockNo, blockNo, sprint_hex(data, 4));
+                       PrintAndLog("\nBlock#  | Data        | Ascii");
+                       PrintAndLog("-----------------------------");
+                       PrintAndLog("%02d/0x%02X | %s| %.4s\n", blockNo, blockNo, sprint_hex(data, 4), data);
                }
                else {
                        PrintAndLog("Failed reading block: (%02x)", isOK);
@@ -945,7 +1131,6 @@ int CmdHF14AMfURdBl(const char *Cmd){
        } else {
                PrintAndLog("Command execute time-out");
        }
-
        return 0;
 }
 
@@ -988,6 +1173,34 @@ int usage_hf_mfu_dump(void) {
        return 0;
 }
 
+int usage_hf_mfu_rdbl(void) {
+       PrintAndLog("Read a block and print. It autodetects card type.\n");     
+       PrintAndLog("Usage:  hf mfu rdbl b <block number> k <key> l\n");
+       PrintAndLog("  Options:");
+       PrintAndLog("  b <no>  : block to read");
+       PrintAndLog("  k <key> : (optional) key for authentication [UL-C 16bytes, EV1/NTAG 4bytes]");
+       PrintAndLog("  l       : (optional) swap entered key's endianness");    
+       PrintAndLog("");
+       PrintAndLog("   sample : hf mfu rdbl b 0");
+       PrintAndLog("          : hf mfu rdbl b 0 k 00112233445566778899AABBCCDDEEFF");
+       PrintAndLog("          : hf mfu rdbl b 0 k AABBCCDDD\n");
+       return 0;
+}
+
+int usage_hf_mfu_wrbl(void) {
+       PrintAndLog("Write a block. It autodetects card type.\n");              
+       PrintAndLog("Usage:  hf mfu wrbl b <block number> d <data> k <key> l\n");
+       PrintAndLog("  Options:");
+       PrintAndLog("  b <no>   : block to write");
+       PrintAndLog("  d <data> : block data - (8 hex symbols)");
+       PrintAndLog("  k <key>  : (optional) key for authentication [UL-C 16bytes, EV1/NTAG 4bytes]");
+       PrintAndLog("  l        : (optional) swap entered key's endianness");   
+       PrintAndLog("");
+       PrintAndLog("    sample : hf mfu wrbl b 0 d 01234567");
+       PrintAndLog("           : hf mfu wrbl b 0 d 01234567 k AABBCCDDD\n");
+       return 0;
+}
+
 //
 //  Mifare Ultralight / Ultralight-C / Ultralight-EV1
 //  Read and Dump Card Contents,  using auto detection of tag size.
@@ -1079,10 +1292,10 @@ int CmdHF14AMfUDump(const char *Cmd){
        TagTypeUL_t tagtype = GetHF14AMfU_Type();
        if (tagtype == UL_ERROR) return -1;
 
-       if (!manualPages)
+       if (!manualPages) //get number of pages to read
                for (uint8_t idx = 0; idx < MAX_UL_TYPES; idx++)
                        if (tagtype & UL_TYPES_ARRAY[idx])
-                               Pages = UL_MEMORY_ARRAY[idx]+1;
+                               Pages = UL_MEMORY_ARRAY[idx]+1; //add one as maxblks starts at 0
 
        ul_print_type(tagtype, 0);
        PrintAndLog("Reading tag memory...");
@@ -1095,6 +1308,8 @@ int CmdHF14AMfUDump(const char *Cmd){
 
                memcpy(c.d.asBytes, authKeyPtr, dataLen);
        }
+
+       clearCommandBuffer();
        SendCommand(&c);
        UsbCommand resp;
        if (!WaitForResponseTimeout(CMD_ACK, &resp,1500)) {
@@ -1153,9 +1368,11 @@ int CmdHF14AMfUDump(const char *Cmd){
                }
        }
 
+       PrintAndLog("\nBlock#  | Data        |lck| Ascii");
+       PrintAndLog("---------------------------------");
        for (i = 0; i < Pages; ++i) {
                if ( i < 3 ) {
-                       PrintAndLog("Block %02x:%s ", i,sprint_hex(data + i * 4, 4));
+                       PrintAndLog("%02d/0x%02X | %s|   | ", i+startPage, i+startPage, sprint_hex(data + i * 4, 4));
                        continue;
                }
                switch(i){
@@ -1202,8 +1419,9 @@ int CmdHF14AMfUDump(const char *Cmd){
                        case 43: tmplockbit = bit2[9]; break;  //auth1
                        default: break;
                }
-               PrintAndLog("Block %02X:%s [%d] {%.4s}", i, sprint_hex(data + i * 4, 4), tmplockbit, data+i*4);
+               PrintAndLog("%02d/0x%02X | %s| %d | %.4s", i+startPage, i+startPage, sprint_hex(data + i * 4, 4), tmplockbit, data+i*4);
        }
+       PrintAndLog("---------------------------------");
 
        // user supplied filename?
        if (fileNlen < 1) {
@@ -1369,142 +1587,6 @@ int CmdTestDES(const char * cmd)
 }
 **/
 
-//
-// Ultralight C Read Single Block
-//
-int CmdHF14AMfUCRdBl(const char *Cmd)
-{
-       UsbCommand resp;
-       bool hasPwd = FALSE;
-       uint8_t blockNo = -1;
-       uint8_t key[16];
-       char cmdp = param_getchar(Cmd, 0);
-
-       if (strlen(Cmd) < 1 || cmdp == 'h' || cmdp == 'H') {
-               PrintAndLog("Usage:  hf mfu crdbl  <block number> <key>");
-               PrintAndLog("");
-               PrintAndLog("sample: hf mfu crdbl 0");
-               PrintAndLog("        hf mfu crdbl 0 00112233445566778899AABBCCDDEEFF");
-               return 0;
-       }
-
-       blockNo = param_get8(Cmd, 0);
-       if (blockNo < 0) {
-               PrintAndLog("Wrong block number");
-               return 1;
-       }
-
-       if (blockNo > MAX_ULC_BLOCKS ){
-               PrintAndLog("Error: Maximum number of blocks is 47 for Ultralight-C");
-               return 1;
-       } 
-       
-       // key
-       if ( strlen(Cmd) > 3){
-               if (param_gethex(Cmd, 1, key, 32)) {
-                       PrintAndLog("Key must include %d HEX symbols", 32);
-                       return 1;
-               } else {
-                       hasPwd = TRUE;
-               }       
-       }       
-
-       //Read Block
-       UsbCommand c = {CMD_MIFAREU_READBL, {blockNo}};
-       if ( hasPwd ) {
-               c.arg[1] = 1;
-               memcpy(c.d.asBytes,key,16);
-       }
-       SendCommand(&c);
-
-       if (WaitForResponseTimeout(CMD_ACK,&resp,1500)) {
-               uint8_t isOK = resp.arg[0] & 0xff;
-               if (isOK) {
-                       uint8_t *data = resp.d.asBytes;
-                       PrintAndLog("Block: %0d (0x%02X) [ %s]", (int)blockNo, blockNo, sprint_hex(data, 4));
-               }
-               else {
-                       PrintAndLog("Failed reading block: (%02x)", isOK);
-               }
-       } else {
-               PrintAndLog("Command execute time-out");
-       }
-       return 0;
-}
-
-//
-//  Mifare Ultralight C Write Single Block
-//
-int CmdHF14AMfUCWrBl(const char *Cmd){
-       
-       uint8_t blockNo = -1;
-       bool chinese_card = FALSE;
-       uint8_t bldata[16] = {0x00};
-       UsbCommand resp;
-
-       char cmdp = param_getchar(Cmd, 0);
-       
-       if (strlen(Cmd) < 3 || cmdp == 'h' || cmdp == 'H') {    
-               PrintAndLog("Usage:  hf mfu cwrbl <block number> <block data (8 hex symbols)> [w]");
-               PrintAndLog("       [block number]");
-               PrintAndLog("       [block data] - (8 hex symbols)");
-               PrintAndLog("       [w] - Chinese magic ultralight tag");
-               PrintAndLog("");
-               PrintAndLog("        sample: hf mfu cwrbl 0 01020304");
-               PrintAndLog("");
-               return 0;
-       }
-       
-       blockNo = param_get8(Cmd, 0);
-       if (blockNo > MAX_ULC_BLOCKS ){
-               PrintAndLog("Error: Maximum number of blocks is 47 for Ultralight-C Cards!");
-               return 1;
-       }
-       
-       if (param_gethex(Cmd, 1, bldata, 8)) {
-               PrintAndLog("Block data must include 8 HEX symbols");
-               return 1;
-       }
-
-       if (strchr(Cmd,'w') != 0  || strchr(Cmd,'W') != 0 ) {
-               chinese_card = TRUE; 
-       }
-
-       if ( blockNo <= 3 ) {
-               if (!chinese_card){
-                       PrintAndLog("Access Denied");  
-                       return 1;
-               } else {
-                       PrintAndLog("--Special block no: 0x%02x", blockNo);
-                       PrintAndLog("--Data: %s", sprint_hex(bldata, 4));
-                       UsbCommand d = {CMD_MIFAREU_WRITEBL, {blockNo}};
-                       memcpy(d.d.asBytes,bldata, 4);
-                       SendCommand(&d);
-                       if (WaitForResponseTimeout(CMD_ACK,&resp,1500)) {
-                               uint8_t isOK  = resp.arg[0] & 0xff;
-                               PrintAndLog("isOk:%02x", isOK);
-                       } else {
-                               PrintAndLog("Command execute timeout");
-                               return 1;
-                       }
-               }
-       } else {
-                       PrintAndLog("--Block no : 0x%02x", blockNo);
-                       PrintAndLog("--Data: %s", sprint_hex(bldata, 4));               
-                       UsbCommand e = {CMD_MIFAREU_WRITEBL, {blockNo}};
-                       memcpy(e.d.asBytes,bldata, 4);
-                       SendCommand(&e);
-                       if (WaitForResponseTimeout(CMD_ACK,&resp,1500)) {
-                               uint8_t isOK  = resp.arg[0] & 0xff;
-                               PrintAndLog("isOk : %02x", isOK);
-                       } else {
-                               PrintAndLog("Command execute timeout");
-                               return 1;
-                       }
-       }
-       return 0;
-}
-
 // 
 // Mifare Ultralight C - Set password
 //
@@ -1530,6 +1612,7 @@ int CmdHF14AMfucSetPwd(const char *Cmd){
        
        UsbCommand c = {CMD_MIFAREUC_SETPWD};   
        memcpy( c.d.asBytes, pwd, 16);
+       clearCommandBuffer();
        SendCommand(&c);
 
        UsbCommand resp;
@@ -1578,6 +1661,7 @@ int CmdHF14AMfucSetUid(const char *Cmd){
        // read block2. 
        c.cmd = CMD_MIFAREU_READBL;
        c.arg[0] = 2;
+       clearCommandBuffer();
        SendCommand(&c);
        if (!WaitForResponseTimeout(CMD_ACK,&resp,1500)) {
                PrintAndLog("Command execute timeout");
@@ -1595,6 +1679,7 @@ int CmdHF14AMfucSetUid(const char *Cmd){
        c.d.asBytes[1] = uid[1];
        c.d.asBytes[2] = uid[2];
        c.d.asBytes[3] =  0x88 ^ uid[0] ^ uid[1] ^ uid[2];
+       clearCommandBuffer();
        SendCommand(&c);
        if (!WaitForResponseTimeout(CMD_ACK,&resp,1500)) {
                PrintAndLog("Command execute timeout");
@@ -1607,6 +1692,7 @@ int CmdHF14AMfucSetUid(const char *Cmd){
        c.d.asBytes[1] = uid[4];
        c.d.asBytes[2] = uid[5];
        c.d.asBytes[3] = uid[6];
+       clearCommandBuffer();
        SendCommand(&c);
        if (!WaitForResponseTimeout(CMD_ACK,&resp,1500) ) {
                PrintAndLog("Command execute timeout");
@@ -1619,6 +1705,7 @@ int CmdHF14AMfucSetUid(const char *Cmd){
        c.d.asBytes[1] = oldblock2[1];
        c.d.asBytes[2] = oldblock2[2];
        c.d.asBytes[3] = oldblock2[3];
+       clearCommandBuffer();
        SendCommand(&c);
        if (!WaitForResponseTimeout(CMD_ACK,&resp,1500) ) {
                PrintAndLog("Command execute timeout");
@@ -1629,10 +1716,10 @@ int CmdHF14AMfucSetUid(const char *Cmd){
 }
 
 int CmdHF14AMfuGenDiverseKeys(const char *Cmd){
-       
+
        uint8_t iv[8] = { 0x00 };
        uint8_t block = 0x07;
-       
+
        // UL-EV1
        //04 57 b6 e2 05 3f 80 UID
        //4a f8 4b 19   PWD
@@ -1646,14 +1733,14 @@ int CmdHF14AMfuGenDiverseKeys(const char *Cmd){
        
        uint8_t mix[8] = { 0x00 };
        uint8_t divkey[8] = { 0x00 };
-       
+
        memcpy(mix, mifarekeyA, 4);
-       
+
        mix[4] = mifarekeyA[4] ^ uid[0];
        mix[5] = mifarekeyA[5] ^ uid[1];
        mix[6] = block ^ uid[2];
        mix[7] = uid[3];
-       
+
        des3_context ctx = { 0x00 };
        des3_set2key_enc(&ctx, masterkey);
 
@@ -1672,9 +1759,9 @@ int CmdHF14AMfuGenDiverseKeys(const char *Cmd){
        PrintAndLog("Mifare key   :\t %s", sprint_hex(mifarekeyA, sizeof(mifarekeyA)));
        PrintAndLog("Message      :\t %s", sprint_hex(mix, sizeof(mix)));
        PrintAndLog("Diversified key: %s", sprint_hex(divkey+1, 6));
-               
+
        PrintAndLog("\n DES version");
-       
+
        for (int i=0; i < sizeof(mifarekeyA); ++i){
                dkeyA[i] = (mifarekeyA[i] << 1) & 0xff;
                dkeyA[6] |=  ((mifarekeyA[i] >> 7) & 1) << (i+1);
@@ -1692,7 +1779,7 @@ int CmdHF14AMfuGenDiverseKeys(const char *Cmd){
        memcpy(dmkey+8, dkeyB, 8);
        memcpy(dmkey+16, dkeyA, 8);
        memset(iv, 0x00, 8);
-       
+
        des3_set3key_enc(&ctx, dmkey);
 
        des3_crypt_cbc(&ctx  // des3_context
@@ -1735,11 +1822,9 @@ static command_t CommandTable[] =
        {"help",        CmdHelp,                        1, "This help"},
        {"dbg",         CmdHF14AMfDbg,          0, "Set default debug mode"},
        {"info",        CmdHF14AMfUInfo,        0, "Tag information"},
-       {"dump",        CmdHF14AMfUDump,        0, "Dump Ultralight / Ultralight-C tag to binary file"},
-       {"rdbl",        CmdHF14AMfURdBl,        0, "Read block  - Ultralight"},
-       {"wrbl",        CmdHF14AMfUWrBl,        0, "Write block - Ultralight"},    
-       {"crdbl",       CmdHF14AMfUCRdBl,       0, "Read block        - Ultralight C"},
-       {"cwrbl",       CmdHF14AMfUCWrBl,       0, "Write block       - Ultralight C"},
+       {"dump",        CmdHF14AMfUDump,        0, "Dump Ultralight / Ultralight-C / NTAG tag to binary file"},
+       {"rdbl",        CmdHF14AMfURdBl,        0, "Read block"},
+       {"wrbl",        CmdHF14AMfUWrBl,        0, "Write block"},
        {"cauth",       CmdHF14AMfucAuth,       0, "Authentication    - Ultralight C"},
        {"setpwd",      CmdHF14AMfucSetPwd, 1, "Set 3des password - Ultralight-C"},
        {"setuid",      CmdHF14AMfucSetUid, 1, "Set UID - MAGIC tags only"},
index 83f2840316c06d111597a80ce09a632fe1b7a21c..6c9e3ea1b66834d54b6e166c51f6e5a4d326b4c7 100644 (file)
@@ -4,25 +4,24 @@
 #ifndef CMDHFMFU_H__
 #define CMDHFMFU_H__
 
-//standard ultralight
 int CmdHF14AMfUWrBl(const char *Cmd);
 int CmdHF14AMfURdBl(const char *Cmd);
 
 //Crypto Cards
-int CmdHF14AMfUCRdBl(const char *Cmd);
-int CmdHF14AMfUCRdCard(const char *Cmd);
 int CmdHF14AMfucAuth(const char *Cmd);
 
 //general stuff
 int CmdHF14AMfUDump(const char *Cmd);
 int CmdHF14AMfUInfo(const char *Cmd);
-uint32_t GetHF14AMfU_Type(void);
 
+uint32_t GetHF14AMfU_Type(void);
 int ul_print_type(uint32_t tagtype, uint8_t spacer);
 void ul_switch_off_field(void);
 
 int usage_hf_mfu_dump(void);
 int usage_hf_mfu_info(void);
+int usage_hf_mfu_rdbl(void);
+int usage_hf_mfu_wrbl(void);
 
 int CmdHFMFUltra(const char *Cmd);
 
@@ -43,9 +42,11 @@ typedef enum TAGTYPE_UL {
        MY_D_NFC      = 0x001000,
        MY_D_MOVE     = 0x002000,
        MY_D_MOVE_NFC = 0x004000,
-       NTAG_I2C_1K   = 0x008000,
-       NTAG_I2C_2K   = 0x010000,
-       MAGIC         = 0x020000,
+       MY_D_MOVE_LEAN= 0x008000,
+       NTAG_I2C_1K   = 0x010000,
+       NTAG_I2C_2K   = 0x020000,
+       FUDAN_UL      = 0x040000,
+       MAGIC         = 0x080000,
        UL_MAGIC      = UL | MAGIC,
        UL_C_MAGIC    = UL_C | MAGIC,
        UL_ERROR      = 0xFFFFFF,
diff --git a/client/cmdhftopaz.c b/client/cmdhftopaz.c
new file mode 100644 (file)
index 0000000..bf0f5dc
--- /dev/null
@@ -0,0 +1,571 @@
+//-----------------------------------------------------------------------------
+// Copyright (C) 2015 Piwi
+//
+// This code is licensed to you under the terms of the GNU GPL, version 2 or,
+// at your option, any later version. See the LICENSE.txt file for the text of
+// the license.
+//-----------------------------------------------------------------------------
+// High frequency Topaz (NFC Type 1) commands
+//-----------------------------------------------------------------------------
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+#include "cmdmain.h"
+#include "cmdparser.h"
+#include "cmdhftopaz.h"
+#include "cmdhf14a.h"
+#include "ui.h"
+#include "mifare.h"
+#include "proxmark3.h"
+#include "iso14443crc.h"
+#include "protocols.h"
+
+#define TOPAZ_STATIC_MEMORY    (0x0f * 8)              // 15 blocks with 8 Bytes each
+
+// a struct to describe a memory area which contains lock bits and the corresponding lockable memory area
+typedef struct dynamic_lock_area {
+       struct dynamic_lock_area *next;
+       uint16_t        byte_offset;                    // the address of the lock bits
+       uint16_t        size_in_bits;
+       uint16_t        first_locked_byte;              // the address of the lockable area
+       uint16_t        bytes_locked_per_bit;
+} dynamic_lock_area_t;
+
+
+static struct {
+       uint8_t HR01[2];
+       uint8_t uid[7];
+       uint16_t size;
+       uint8_t data_blocks[TOPAZ_STATIC_MEMORY/8][8];  // this memory is always there
+       uint8_t *dynamic_memory;                                                // this memory can be there
+       dynamic_lock_area_t *dynamic_lock_areas;                // lock area descriptors
+} topaz_tag;
+
+
+static void topaz_switch_on_field(void)
+{
+       UsbCommand c = {CMD_READER_ISO_14443a, {ISO14A_CONNECT | ISO14A_NO_SELECT | ISO14A_NO_DISCONNECT | ISO14A_TOPAZMODE, 0, 0}};
+       SendCommand(&c);
+}
+
+
+static void topaz_switch_off_field(void)
+{
+       UsbCommand c = {CMD_READER_ISO_14443a, {0, 0, 0}};
+       SendCommand(&c);
+}
+
+
+// send a raw topaz command, returns the length of the response (0 in case of error)
+static int topaz_send_cmd_raw(uint8_t *cmd, uint8_t len, uint8_t *response)
+{
+       UsbCommand c = {CMD_READER_ISO_14443a, {ISO14A_RAW | ISO14A_NO_DISCONNECT | ISO14A_TOPAZMODE, len, 0}};
+       memcpy(c.d.asBytes, cmd, len);
+       SendCommand(&c);
+
+       UsbCommand resp;
+       WaitForResponse(CMD_ACK, &resp);
+
+       if (resp.arg[0] > 0) {
+               memcpy(response, resp.d.asBytes, resp.arg[0]);
+       }
+       
+       return resp.arg[0];
+}
+
+
+// calculate CRC bytes and send topaz command, returns the length of the response (0 in case of error) 
+static int topaz_send_cmd(uint8_t *cmd, uint8_t len, uint8_t *response)
+{
+       if (len > 1) {
+        uint8_t first, second;
+               ComputeCrc14443(CRC_14443_B, cmd, len-2, &first, &second);
+        cmd[len-2] = first;
+        cmd[len-1] = second;
+       }
+
+       return topaz_send_cmd_raw(cmd, len, response);
+}
+
+
+// select a topaz tag. Send WUPA and RID.
+static int topaz_select(uint8_t *atqa, uint8_t *rid_response)
+{
+       // ToDo: implement anticollision
+
+       uint8_t wupa_cmd[] = {TOPAZ_WUPA};
+       uint8_t rid_cmd[] = {TOPAZ_RID, 0, 0, 0, 0, 0, 0, 0, 0};
+
+       topaz_switch_on_field();
+
+       if (!topaz_send_cmd(wupa_cmd, sizeof(wupa_cmd), atqa)) {
+               topaz_switch_off_field();
+               return -1;              // WUPA failed
+       }
+
+       if (!topaz_send_cmd(rid_cmd, sizeof(rid_cmd), rid_response)) {
+               topaz_switch_off_field();
+               return -2;              // RID failed
+       }
+       
+       return 0;               // OK
+}
+
+
+// read all of the static memory of a selected Topaz tag.
+static int topaz_rall(uint8_t *uid, uint8_t *response)
+{
+       uint8_t rall_cmd[] = {TOPAZ_RALL, 0, 0, 0, 0, 0, 0, 0, 0};
+
+       memcpy(&rall_cmd[3], uid, 4);
+       if (!topaz_send_cmd(rall_cmd, sizeof(rall_cmd), response)) {
+               topaz_switch_off_field();
+               return -1;              // RALL failed
+       }
+       
+       return 0;
+}
+
+
+// read a block (8 Bytes) of a selected Topaz tag.
+static int topaz_read_block(uint8_t *uid, uint8_t blockno, uint8_t *block_data)
+{
+       uint8_t read8_cmd[] = {TOPAZ_READ8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+       uint8_t read8_response[11];
+       
+       read8_cmd[1] = blockno;
+       memcpy(&read8_cmd[10], uid, 4);
+       if (!topaz_send_cmd(read8_cmd, sizeof(read8_cmd), read8_response)) {
+               topaz_switch_off_field();
+               return -1;              // READ8 failed
+       }
+       
+       memcpy(block_data, &read8_response[1], 8);
+       
+       return 0;
+}
+
+
+// read a segment (16 blocks = 128 Bytes) of a selected Topaz tag. Works only for tags with dynamic memory.
+static int topaz_read_segment(uint8_t *uid, uint8_t segno, uint8_t *segment_data)
+{
+       uint8_t rseg_cmd[] = {TOPAZ_RSEG, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+       uint8_t rseg_response[131];
+       
+       rseg_cmd[1] = segno << 4;
+       memcpy(&rseg_cmd[10], uid, 4);
+       if (!topaz_send_cmd(rseg_cmd, sizeof(rseg_cmd), rseg_response)) {
+               topaz_switch_off_field();
+               return -1;              // RSEG failed
+       }
+       
+       memcpy(segment_data, &rseg_response[1], 128);
+       
+       return 0;
+}
+
+
+// search for the lock area descriptor for the lockable area including byteno 
+static dynamic_lock_area_t *get_dynamic_lock_area(uint16_t byteno)
+{
+       dynamic_lock_area_t *lock_area;
+       
+       lock_area = topaz_tag.dynamic_lock_areas;
+       
+       while (lock_area != NULL) {
+               if (byteno < lock_area->first_locked_byte) {
+                       lock_area = lock_area->next;
+               } else {
+                       return lock_area;
+               }
+       }
+
+       return NULL;
+}
+
+
+// check if a memory byte is locked.
+static bool topaz_byte_is_locked(uint16_t byteno)
+{
+       uint8_t *lockbits;
+       uint16_t locked_bytes_per_bit;
+       dynamic_lock_area_t *lock_area;
+       
+       if (byteno < TOPAZ_STATIC_MEMORY) {
+               lockbits = &topaz_tag.data_blocks[0x0e][0];
+               locked_bytes_per_bit = 8;
+       } else {
+               lock_area = get_dynamic_lock_area(byteno);
+               if (lock_area == NULL) {
+                       return false;
+               } else {
+                       lockbits = &topaz_tag.dynamic_memory[lock_area->byte_offset - TOPAZ_STATIC_MEMORY];
+                       locked_bytes_per_bit = lock_area->bytes_locked_per_bit;
+                       byteno = byteno - lock_area->first_locked_byte;
+               }
+       }
+
+       uint16_t blockno = byteno / locked_bytes_per_bit;
+       if(lockbits[blockno/8] & (0x01 << (blockno % 8))) {
+               return true;
+       } else {
+               return false;
+       }
+}
+
+
+// read and print the Capability Container
+static int topaz_print_CC(uint8_t *data)
+{
+       if(data[0] != 0xe1) {
+               topaz_tag.size = TOPAZ_STATIC_MEMORY;
+               return -1;              // no NDEF message
+       }
+
+       PrintAndLog("Capability Container: %02x %02x %02x %02x", data[0], data[1], data[2], data[3]);
+       PrintAndLog("  %02x: NDEF Magic Number", data[0]); 
+       PrintAndLog("  %02x: version %d.%d supported by tag", data[1], (data[1] & 0xF0) >> 4, data[1] & 0x0f);
+       uint16_t memsize = (data[2] + 1) * 8;
+       topaz_tag.size = memsize;
+       topaz_tag.dynamic_memory = malloc(memsize - TOPAZ_STATIC_MEMORY);
+       PrintAndLog("  %02x: Physical Memory Size of this tag: %d bytes", data[2], memsize);
+       PrintAndLog("  %02x: %s / %s", data[3], 
+                               (data[3] & 0xF0) ? "(RFU)" : "Read access granted without any security", 
+                               (data[3] & 0x0F)==0 ? "Write access granted without any security" : (data[3] & 0x0F)==0x0F ? "No write access granted at all" : "(RFU)");
+       return 0;                               
+}
+
+
+// return type, length and value of a TLV, starting at memory position *TLV_ptr 
+static void get_TLV(uint8_t **TLV_ptr, uint8_t *TLV_type, uint16_t *TLV_length, uint8_t **TLV_value)
+{
+       *TLV_length = 0;
+       *TLV_value = NULL;
+
+       *TLV_type = **TLV_ptr;
+       *TLV_ptr += 1;
+       switch (*TLV_type) {
+               case 0x00:                      // NULL TLV.
+               case 0xFE:                      // Terminator TLV.
+                       break;
+               case 0x01:                      // Lock Control TLV
+               case 0x02:                      // Reserved Memory TLV
+               case 0x03:                      // NDEF message TLV
+               case 0xFD:                      // proprietary TLV
+                       *TLV_length = **TLV_ptr;
+                       *TLV_ptr += 1;
+                       if (*TLV_length == 0xff) {
+                               *TLV_length = **TLV_ptr << 8;
+                               *TLV_ptr += 1;
+                               *TLV_length |= **TLV_ptr;
+                               *TLV_ptr += 1;
+                       }
+                       *TLV_value = *TLV_ptr;
+                       *TLV_ptr += *TLV_length;
+                       break;
+               default:                        // RFU
+                       break;
+       }
+}
+
+
+// lock area TLVs contain no information on the start of the respective lockable area. Lockable areas
+// do not include the lock bits and reserved memory. We therefore need to adjust the start of the 
+// respective lockable areas accordingly
+static void adjust_lock_areas(uint16_t block_start, uint16_t block_size)
+{
+       dynamic_lock_area_t *lock_area = topaz_tag.dynamic_lock_areas;
+       while (lock_area != NULL) {
+               if (lock_area->first_locked_byte <= block_start) {
+                       lock_area->first_locked_byte += block_size;
+               }
+               lock_area = lock_area->next;
+       }
+}
+
+
+// read and print the lock area and reserved memory TLVs
+static void topaz_print_control_TLVs(uint8_t *memory)
+{
+       uint8_t *TLV_ptr = memory;
+       uint8_t TLV_type = 0;
+       uint16_t TLV_length;
+       uint8_t *TLV_value;
+       bool lock_TLV_present = false;
+       bool reserved_memory_control_TLV_present = false;
+       uint16_t next_lockable_byte = 0x0f * 8;                         // first byte after static memory area
+       
+       while(*TLV_ptr != 0x03 && *TLV_ptr != 0xFD && *TLV_ptr != 0xFE) {       
+               // all Lock Control TLVs shall be present before the NDEF message TLV, the proprietary TLV (and the Terminator TLV)
+               get_TLV(&TLV_ptr, &TLV_type, &TLV_length, &TLV_value);
+               if (TLV_type == 0x01) {                 // a Lock Control TLV
+                       uint8_t pages_addr = TLV_value[0] >> 4;
+                       uint8_t byte_offset = TLV_value[0] & 0x0f;
+                       uint16_t size_in_bits = TLV_value[1] ? TLV_value[1] : 256;
+                       uint16_t size_in_bytes = (size_in_bits + 7)/8;
+                       uint16_t bytes_per_page = 1 << (TLV_value[2] & 0x0f);
+                       uint16_t bytes_locked_per_bit = 1 << (TLV_value[2] >> 4);
+                       uint16_t area_start = pages_addr * bytes_per_page + byte_offset;
+                       PrintAndLog("Lock Area of %d bits at byte offset 0x%04x. Each Lock Bit locks %d bytes.", 
+                                               size_in_bits,
+                                               area_start,
+                                               bytes_locked_per_bit);
+                       lock_TLV_present = true;
+                       dynamic_lock_area_t *old = topaz_tag.dynamic_lock_areas;
+                       dynamic_lock_area_t *new = topaz_tag.dynamic_lock_areas;
+                       if (old == NULL) {
+                               new = topaz_tag.dynamic_lock_areas = (dynamic_lock_area_t *)malloc(sizeof(dynamic_lock_area_t));
+                       } else {
+                               while(old->next != NULL) {
+                                       old = old->next;
+                               }
+                               new = old->next = (dynamic_lock_area_t *)malloc(sizeof(dynamic_lock_area_t));
+                       }
+                       new->next = NULL;
+                       if (area_start <= next_lockable_byte) {
+                               // lock areas are not lockable
+                               next_lockable_byte += size_in_bytes;
+                       }
+                       new->first_locked_byte = next_lockable_byte;
+                       new->byte_offset = area_start;
+                       new->size_in_bits = size_in_bits;
+                       new->bytes_locked_per_bit = bytes_locked_per_bit;
+                       next_lockable_byte += size_in_bits * bytes_locked_per_bit;              
+               }
+               if (TLV_type == 0x02) {                 // a Reserved Memory Control TLV
+                       uint8_t pages_addr = TLV_value[0] >> 4;
+                       uint8_t byte_offset = TLV_value[0] & 0x0f;
+                       uint8_t size_in_bytes = TLV_value[1] ? TLV_value[1] : 256;
+                       uint8_t bytes_per_page = 1 << (TLV_value[2] & 0x0f);
+                       uint16_t area_start = pages_addr * bytes_per_page + byte_offset;
+                       PrintAndLog("Reserved Memory of %d bytes at byte offset 0x%02x.", 
+                                               size_in_bytes,
+                                               area_start);
+                       reserved_memory_control_TLV_present = true;
+                       adjust_lock_areas(area_start, size_in_bytes);  // reserved memory areas are not lockable
+                       if (area_start <= next_lockable_byte) {
+                               next_lockable_byte += size_in_bytes;
+                       }
+               }
+       }
+       
+       if (!lock_TLV_present) {
+               PrintAndLog("(No Lock Control TLV present)");
+       }
+       
+       if (!reserved_memory_control_TLV_present) {
+               PrintAndLog("(No Reserved Memory Control TLV present)");
+       }       
+}
+
+
+// read all of the dynamic memory
+static int topaz_read_dynamic_data(void)
+{
+       // first read the remaining block of segment 0
+       if(topaz_read_block(topaz_tag.uid, 0x0f, &topaz_tag.dynamic_memory[0]) == -1) {
+               PrintAndLog("Error while reading dynamic memory block %02x. Aborting...", 0x0f);
+               return -1;
+       }
+       
+       // read the remaining segments
+       uint8_t max_segment = topaz_tag.size / 128 - 1;
+       for(uint8_t segment = 1; segment <= max_segment; segment++) {
+               if(topaz_read_segment(topaz_tag.uid, segment, &topaz_tag.dynamic_memory[(segment-1)*128+8]) == -1) {
+                       PrintAndLog("Error while reading dynamic memory block %02x. Aborting...", 0x0f);
+                       return -1;
+               }
+       }
+       
+       return 0;
+}
+       
+
+// read and print the dynamic memory
+static void topaz_print_dynamic_data(void)
+{
+       if (topaz_tag.size > TOPAZ_STATIC_MEMORY) {
+               PrintAndLog("Dynamic Data blocks:");
+               if (topaz_read_dynamic_data() == 0) {
+                       PrintAndLog("block# | offset | Data                    | Locked(y/n)");
+                       char line[80];
+                       for (uint16_t blockno = 0x0f; blockno < topaz_tag.size/8; blockno++) {
+                               uint8_t *block_data = &topaz_tag.dynamic_memory[(blockno-0x0f)*8];
+                               char lockbits[9];
+                               for (uint16_t j = 0; j < 8; j++) {
+                                       sprintf(&line[3*j], "%02x ", block_data[j]);
+                                       lockbits[j] = topaz_byte_is_locked(blockno*8+j) ? 'y' : 'n';
+                               }
+                               lockbits[8] = '\0';
+                               PrintAndLog("  0x%02x | 0x%04x | %s|   %-3s", blockno, blockno*8, line, lockbits);
+                       }
+               }
+       }
+}
+
+
+static void topaz_print_lifecycle_state(uint8_t *data)
+{
+       // to be done
+}
+
+
+static void topaz_print_NDEF(uint8_t *data)
+{
+       // to be done. 
+}
+
+
+// read a Topaz tag and print some usefull information 
+int CmdHFTopazReader(const char *Cmd)
+{
+       int status;
+       uint8_t atqa[2];
+       uint8_t rid_response[8];
+       uint8_t *uid_echo = &rid_response[2];
+       uint8_t rall_response[124];
+       
+       status = topaz_select(atqa, rid_response);
+       
+       if (status == -1) {
+               PrintAndLog("Error: couldn't receive ATQA");
+               return -1;
+       }
+
+       PrintAndLog("ATQA : %02x %02x", atqa[1], atqa[0]);
+       if (atqa[1] != 0x0c && atqa[0] != 0x00) {
+               PrintAndLog("Tag doesn't support the Topaz protocol.");
+               topaz_switch_off_field();
+               return -1;
+       }
+       
+       if (status == -2) {
+               PrintAndLog("Error: tag didn't answer to RID");
+               topaz_switch_off_field();
+               return -1;
+       }
+
+       topaz_tag.HR01[0] = rid_response[0];
+       topaz_tag.HR01[1] = rid_response[1];
+       
+       // ToDo: CRC check
+       PrintAndLog("HR0  : %02x (%sa Topaz tag (%scapable of carrying a NDEF message), %s memory map)", rid_response[0], 
+                                               (rid_response[0] & 0xF0) == 0x10 ? "" : "not ",
+                                               (rid_response[0] & 0xF0) == 0x10 ? "" : "not ",
+                                               (rid_response[0] & 0x0F) == 0x10 ? "static" : "dynamic");
+       PrintAndLog("HR1  : %02x", rid_response[1]);
+       
+       status = topaz_rall(uid_echo, rall_response);
+
+       if(status == -1) {
+               PrintAndLog("Error: tag didn't answer to RALL");
+               topaz_switch_off_field();
+               return -1;
+       }
+
+       memcpy(topaz_tag.uid, rall_response+2, 7);
+       PrintAndLog("UID  : %02x %02x %02x %02x %02x %02x %02x", 
+                       topaz_tag.uid[6], 
+                       topaz_tag.uid[5], 
+                       topaz_tag.uid[4], 
+                       topaz_tag.uid[3], 
+                       topaz_tag.uid[2], 
+                       topaz_tag.uid[1], 
+                       topaz_tag.uid[0]);
+       PrintAndLog("       UID[6] (Manufacturer Byte) = %02x, Manufacturer: %s", 
+                       topaz_tag.uid[6], 
+                       getTagInfo(topaz_tag.uid[6]));
+
+       memcpy(topaz_tag.data_blocks, rall_response+2, 0x0f*8);
+       PrintAndLog("");
+       PrintAndLog("Static Data blocks 00 to 0c:");
+       PrintAndLog("block# | offset | Data                    | Locked(y/n)");
+       char line[80];
+       for (uint16_t i = 0; i <= 0x0c; i++) {
+               char lockbits[9];
+               for (uint16_t j = 0; j < 8; j++) {
+                       sprintf(&line[3*j], "%02x ", topaz_tag.data_blocks[i][j] /*rall_response[2 + 8*i + j]*/);
+                       lockbits[j] = topaz_byte_is_locked(i*8+j) ? 'y' : 'n';
+               }
+               lockbits[8] = '\0';
+               PrintAndLog("  0x%02x | 0x%04x | %s|   %-3s", i, i*8, line, lockbits);
+       }
+       
+       PrintAndLog("");
+       PrintAndLog("Static Reserved block 0d:");
+       for (uint16_t j = 0; j < 8; j++) {
+               sprintf(&line[3*j], "%02x ", topaz_tag.data_blocks[0x0d][j]);
+       }
+       PrintAndLog("  0x%02x | 0x%04x | %s|   %-3s", 0x0d, 0x0d*8, line, "n/a");
+       
+       PrintAndLog("");
+       PrintAndLog("Static Lockbits and OTP Bytes:");
+       for (uint16_t j = 0; j < 8; j++) {
+               sprintf(&line[3*j], "%02x ", topaz_tag.data_blocks[0x0e][j]);
+       }
+       PrintAndLog("  0x%02x | 0x%04x | %s|   %-3s", 0x0e, 0x0e*8, line, "n/a");
+
+       PrintAndLog("");
+
+       status = topaz_print_CC(&topaz_tag.data_blocks[1][0]);
+       
+       if (status == -1) {
+               PrintAndLog("No NDEF message data present");
+               topaz_switch_off_field();
+               return 0;
+       }
+
+       PrintAndLog("");
+       topaz_print_control_TLVs(&topaz_tag.data_blocks[1][4]);
+
+       PrintAndLog("");
+       topaz_print_dynamic_data();
+       
+       topaz_print_lifecycle_state(&topaz_tag.data_blocks[1][0]);
+
+       topaz_print_NDEF(&topaz_tag.data_blocks[1][0]);
+       
+       topaz_switch_off_field();
+       return 0;
+}
+
+
+int CmdHFTopazCmdRaw(const char *Cmd)
+{
+       PrintAndLog("not yet implemented. Use hf 14 raw with option -T.");
+       return 0;
+}
+
+
+static int CmdHelp(const char *Cmd);
+
+
+static command_t CommandTable[] = 
+{
+       {"help",        CmdHelp,                        1, "This help"},
+       {"reader",      CmdHFTopazReader,       0, "Act like a Topaz reader"},
+       {"snoop",       CmdHF14ASnoop,          0, "Eavesdrop a Topaz reader-tag communication"},
+       {"raw",         CmdHFTopazCmdRaw,       0, "Send raw hex data to tag"},
+       {NULL,          NULL,                           0, NULL}
+};
+
+
+int CmdHFTopaz(const char *Cmd) {
+       // flush
+       WaitForResponseTimeout(CMD_ACK,NULL,100);
+
+       // parse
+       CmdsParse(CommandTable, Cmd);
+       return 0;
+}
+
+
+static int CmdHelp(const char *Cmd)
+{
+       CmdsHelp(CommandTable);
+       return 0;
+}
+
+
diff --git a/client/cmdhftopaz.h b/client/cmdhftopaz.h
new file mode 100644 (file)
index 0000000..8d5428d
--- /dev/null
@@ -0,0 +1,16 @@
+//-----------------------------------------------------------------------------
+// Copyright (C) 2015 Piwi
+//
+// This code is licensed to you under the terms of the GNU GPL, version 2 or,
+// at your option, any later version. See the LICENSE.txt file for the text of
+// the license.
+//-----------------------------------------------------------------------------
+// High frequency Topaz (NFC Type 1) commands
+//-----------------------------------------------------------------------------
+
+#ifndef CMDHFTOPAZ_H__
+#define CMDHFTOPAZ_H__
+
+int CmdHFTopaz(const char *Cmd);
+
+#endif
index 5ec0aa601eb8024676220ca340a1431930fb861b..33dc78aeb523c5731ec297e9432159336d774580 100644 (file)
 #include "cmdhw.h"
 #include "cmdmain.h"
 #include "cmddata.h"
+#include "data.h"
 
 /* low-level hardware control */
 
 static int CmdHelp(const char *Cmd);
 
-static void lookupChipID(uint32_t iChipID)
+static void lookupChipID(uint32_t iChipID, uint32_t mem_used)
 {
        char asBuff[100];
+       uint32_t mem_avail = 0;
+       
        switch(iChipID)
        {
                case 0x270B0A40:
@@ -103,37 +106,43 @@ static void lookupChipID(uint32_t iChipID)
        switch((iChipID&0xF00)>>8)
        {
                case 0:
-                       sprintf(asBuff,"None");
+                       mem_avail = 0;
                        break;
                case 1:
-                       sprintf(asBuff,"8K bytes");
+                       mem_avail = 8;
                        break;
                case 2:
-                       sprintf(asBuff,"16K bytes");
+                       mem_avail = 16;
                        break;
                case 3:
-                       sprintf(asBuff,"32K bytes");
+                       mem_avail = 32;
                        break;
                case 5:
-                       sprintf(asBuff,"64K bytes");
+                       mem_avail = 64;
                        break;
                case 7:
-                       sprintf(asBuff,"128K bytes");
+                       mem_avail = 128;
                        break;
                case 9:
-                       sprintf(asBuff,"256K bytes");
+                       mem_avail = 256;
                        break;
                case 10:
-                       sprintf(asBuff,"512K bytes");
+                       mem_avail = 512;
                        break;
                case 12:
-                       sprintf(asBuff,"1024K bytes");
+                       mem_avail = 1024;
                        break;
                case 14:
-                       sprintf(asBuff,"2048K bytes");
+                       mem_avail = 2048;
                        break;
        }
-       PrintAndLog("Nonvolatile Program Memory Size: %s",asBuff);
+       PrintAndLog("Nonvolatile Program Memory Size: %dK bytes. Used: %d bytes (%2.0f\%). Free: %d bytes (%2.0f\%).", 
+                               mem_avail, 
+                               mem_used, 
+                               mem_avail == 0 ? 0 : (float)mem_used/(mem_avail*1024)*100,
+                               mem_avail*1024 - mem_used,
+                               mem_avail == 0 ? 0 : (float)(mem_avail*1024-mem_used)/(mem_avail*1024)*100
+                               );
        switch((iChipID&0xF000)>>12)
        {
                case 0:
@@ -396,29 +405,73 @@ int CmdTune(const char *Cmd)
 
 int CmdVersion(const char *Cmd)
 {
-  UsbCommand c = {CMD_VERSION};
-  UsbCommand resp;
-  SendCommand(&c);
-  if (WaitForResponseTimeout(CMD_ACK,&resp,1000)) {
-      lookupChipID(resp.arg[0]);
-  }
-  return 0;
+
+       clearCommandBuffer();
+       UsbCommand c = {CMD_VERSION};
+       static UsbCommand resp = {0, {0, 0, 0}};
+
+       if (resp.arg[0] == 0 && resp.arg[1] == 0) { // no cached information available
+               SendCommand(&c);
+               if (WaitForResponseTimeout(CMD_ACK,&resp,1000)) {
+                       PrintAndLog("Prox/RFID mark3 RFID instrument");
+                       PrintAndLog((char*)resp.d.asBytes);
+                       lookupChipID(resp.arg[0], resp.arg[1]);
+               }
+       } else {
+               PrintAndLog("[[[ Cached information ]]]\n");
+               PrintAndLog("Prox/RFID mark3 RFID instrument");
+               PrintAndLog((char*)resp.d.asBytes);
+               lookupChipID(resp.arg[0], resp.arg[1]);
+               PrintAndLog("");
+       }
+       return 0;
+}
+
+int CmdStatus(const char *Cmd)
+{
+       uint8_t speed_test_buffer[USB_CMD_DATA_SIZE];
+       sample_buf = speed_test_buffer;
+
+       clearCommandBuffer();
+       UsbCommand c = {CMD_STATUS};
+       SendCommand(&c);
+       if (!WaitForResponseTimeout(CMD_ACK,&c,1900)) {
+               PrintAndLog("Status command failed. USB Speed Test timed out");
+       }
+       return 0;
+}
+
+
+int CmdPing(const char *Cmd)
+{
+       clearCommandBuffer();
+       UsbCommand resp;
+       UsbCommand c = {CMD_PING};
+       SendCommand(&c);
+       if (WaitForResponseTimeout(CMD_ACK,&resp,1000)) {
+               PrintAndLog("Ping successfull");
+       }else{
+               PrintAndLog("Ping failed");
+       }
+       return 0;
 }
 
 static command_t CommandTable[] = 
 {
-  {"help",          CmdHelp,        1, "This help"},
-  {"detectreader",  CmdDetectReader,0, "['l'|'h'] -- Detect external reader field (option 'l' or 'h' to limit to LF or HF)"},
-  {"fpgaoff",       CmdFPGAOff,     0, "Set FPGA off"},
-  {"lcd",           CmdLCD,         0, "<HEX command> <count> -- Send command/data to LCD"},
-  {"lcdreset",      CmdLCDReset,    0, "Hardware reset LCD"},
-  {"readmem",       CmdReadmem,     0, "[address] -- Read memory at decimal address from flash"},
-  {"reset",         CmdReset,       0, "Reset the Proxmark3"},
-  {"setlfdivisor",  CmdSetDivisor,  0, "<19 - 255> -- Drive LF antenna at 12Mhz/(divisor+1)"},
-  {"setmux",        CmdSetMux,      0, "<loraw|hiraw|lopkd|hipkd> -- Set the ADC mux to a specific value"},
-  {"tune",          CmdTune,        0, "Measure antenna tuning"},
-  {"version",       CmdVersion,     0, "Show version information about the connected Proxmark"},
-  {NULL, NULL, 0, NULL}
+       {"help",          CmdHelp,        1, "This help"},
+       {"detectreader",  CmdDetectReader,0, "['l'|'h'] -- Detect external reader field (option 'l' or 'h' to limit to LF or HF)"},
+       {"fpgaoff",       CmdFPGAOff,     0, "Set FPGA off"},
+       {"lcd",           CmdLCD,         0, "<HEX command> <count> -- Send command/data to LCD"},
+       {"lcdreset",      CmdLCDReset,    0, "Hardware reset LCD"},
+       {"readmem",       CmdReadmem,     0, "[address] -- Read memory at decimal address from flash"},
+       {"reset",         CmdReset,       0, "Reset the Proxmark3"},
+       {"setlfdivisor",  CmdSetDivisor,  0, "<19 - 255> -- Drive LF antenna at 12Mhz/(divisor+1)"},
+       {"setmux",        CmdSetMux,      0, "<loraw|hiraw|lopkd|hipkd> -- Set the ADC mux to a specific value"},
+       {"tune",          CmdTune,        0, "Measure antenna tuning"},
+       {"version",       CmdVersion,     0, "Show version information about the connected Proxmark"},
+       {"status",        CmdStatus,      0, "Show runtime status information about the connected Proxmark"},
+       {"ping",          CmdPing,        0, "Test if the pm3 is responsive"},
+       {NULL, NULL, 0, NULL}
 };
 
 int CmdHW(const char *Cmd)
index dfbbe992a76a6a3bdeadb0d01becdc2cb7a051e5..93a1398d7d76d85944179fdd711ffa9676767235 100644 (file)
 #include "util.h"
 #include "cmdlf.h"
 #include "cmdlfhid.h"
+#include "cmdlfawid.h"
 #include "cmdlfti.h"
 #include "cmdlfem4x.h"
 #include "cmdlfhitag.h"
 #include "cmdlft55xx.h"
 #include "cmdlfpcf7931.h"
 #include "cmdlfio.h"
+#include "cmdlfviking.h"
 #include "lfdemod.h"
 
 static int CmdHelp(const char *Cmd);
 
+
+
+int usage_lf_cmdread()
+{
+       PrintAndLog("Usage: lf cmdread d <delay period> z <zero period> o <one period> c <cmdbytes> [H] ");
+       PrintAndLog("Options:        ");
+       PrintAndLog("       h             This help");
+       PrintAndLog("       L             Low frequency (125 KHz)");
+       PrintAndLog("       H             High frequency (134 KHz)");
+       PrintAndLog("       d <delay>     delay OFF period");
+       PrintAndLog("       z <zero>      time period ZERO");
+       PrintAndLog("       o <one>       time period ONE");
+       PrintAndLog("       c <cmd>       Command bytes");
+       PrintAndLog("       ************* All periods in microseconds");
+       PrintAndLog("Examples:");
+       PrintAndLog("      lf cmdread d 80 z 100 o 200 c 11000");
+       PrintAndLog("      lf cmdread d 80 z 100 o 100 c 11000 H");
+       return 0;
+}
+
 /* send a command before reading */
 int CmdLFCommandRead(const char *Cmd)
 {
-       static char dummy[3];
-
-       dummy[0]= ' ';
-
+       static char dummy[3] = {0x20,0x00,0x00};
        UsbCommand c = {CMD_MOD_THEN_ACQUIRE_RAW_ADC_SAMPLES_125K};
-       sscanf(Cmd, "%"lli" %"lli" %"lli" %s %s", &c.arg[0], &c.arg[1], &c.arg[2],(char*)(&c.d.asBytes),(char*)(&dummy+1));
-       // in case they specified 'h'
+       bool errors = FALSE;
+       //uint8_t divisor = 95; //125khz
+       uint8_t cmdp = 0;
+       int strLength = 0;
+       while(param_getchar(Cmd, cmdp) != 0x00)
+       {
+               switch(param_getchar(Cmd, cmdp))
+               {
+               case 'h':
+                       return usage_lf_cmdread();
+               case 'H':
+                       //divisor = 88;
+                       dummy[1]='h';
+                       cmdp++;
+                       break;
+               case 'L':
+                       cmdp++;
+                       break;
+               case 'c':
+                       strLength = param_getstr(Cmd, cmdp+1, (char *)&c.d.asBytes);
+                       cmdp+=2;
+                       break;
+               case 'd':
+                       c.arg[0] = param_get32ex(Cmd, cmdp+1, 0, 10);
+                       cmdp+=2;
+                       break;
+               case 'z':
+                       c.arg[1] = param_get32ex(Cmd, cmdp+1, 0, 10);
+                       cmdp+=2;
+                       break;
+               case 'o':
+                       c.arg[2] = param_get32ex(Cmd, cmdp+1, 0, 10);
+                       cmdp+=2;
+                       break;
+               default:
+                       PrintAndLog("Unknown parameter '%c'", param_getchar(Cmd, cmdp));
+                       errors = 1;
+                       break;
+               }
+               if(errors) break;
+       }
+       // No args
+       if(cmdp == 0) errors = 1;
+
+       //Validations
+       if(errors) return usage_lf_cmdread();
+       
+       // in case they specified 'H'
        strcpy((char *)&c.d.asBytes + strlen((char *)c.d.asBytes), dummy);
+
+       clearCommandBuffer();
        SendCommand(&c);
        return 0;
 }
@@ -58,7 +125,7 @@ int CmdFlexdemod(const char *Cmd)
                }
        }
 
-#define LONG_WAIT 100
+ #define LONG_WAIT 100
        int start;
        for (start = 0; start < GraphTraceLen - LONG_WAIT; start++) {
                int first = GraphBuffer[start];
@@ -140,10 +207,13 @@ int CmdIndalaDemod(const char *Cmd)
        uint8_t rawbits[4096];
        int rawbit = 0;
        int worst = 0, worstPos = 0;
- // PrintAndLog("Expecting a bit less than %d raw bits", GraphTraceLen / 32);
+       // PrintAndLog("Expecting a bit less than %d raw bits", GraphTraceLen / 32);
+       
+       // loop through raw signal - since we know it is psk1 rf/32 fc/2 skip every other value (+=2)
        for (i = 0; i < GraphTraceLen-1; i += 2) {
                count += 1;
                if ((GraphBuffer[i] > GraphBuffer[i + 1]) && (state != 1)) {
+                       // appears redundant - marshmellow
                        if (state == 0) {
                                for (j = 0; j <  count - 8; j += 16) {
                                        rawbits[rawbit++] = 0;
@@ -156,6 +226,7 @@ int CmdIndalaDemod(const char *Cmd)
                        state = 1;
                        count = 0;
                } else if ((GraphBuffer[i] < GraphBuffer[i + 1]) && (state != 0)) {
+                       //appears redundant
                        if (state == 1) {
                                for (j = 0; j <  count - 8; j += 16) {
                                        rawbits[rawbit++] = 1;
@@ -353,6 +424,7 @@ int CmdIndalaClone(const char *Cmd)
                c.arg[1] = uid2;
        }
 
+       clearCommandBuffer();
        SendCommand(&c);
        return 0;
 }
@@ -388,7 +460,7 @@ int usage_lf_config()
        PrintAndLog("       b <bps>       Sets resolution of bits per sample. Default (max): 8");
        PrintAndLog("       d <decim>     Sets decimation. A value of N saves only 1 in N samples. Default: 1");
        PrintAndLog("       a [0|1]       Averaging - if set, will average the stored sample value when decimating. Default: 1");
-       PrintAndLog("       t <threshold> Sets trigger threshold. 0 means no threshold");
+       PrintAndLog("       t <threshold> Sets trigger threshold. 0 means no threshold (range: 0-128)");
        PrintAndLog("Examples:");
        PrintAndLog("      lf config b 8 L");
        PrintAndLog("                    Samples at 125KHz, 8bps.");
@@ -475,6 +547,7 @@ int CmdLFSetConfig(const char *Cmd)
        //Averaging is a flag on high-bit of arg[1]
        UsbCommand c = {CMD_SET_LF_SAMPLING_CONFIG};
        memcpy(c.d.asBytes,&config,sizeof(sample_config));
+       clearCommandBuffer();
        SendCommand(&c);
        return 0;
 }
@@ -491,8 +564,14 @@ int CmdLFRead(const char *Cmd)
        if (param_getchar(Cmd, cmdp) == 's') arg1 = true; //suppress print
        //And ship it to device
        UsbCommand c = {CMD_ACQUIRE_RAW_ADC_SAMPLES_125K, {arg1,0,0}};
+       clearCommandBuffer();
        SendCommand(&c);
-       WaitForResponse(CMD_ACK,NULL);
+       //WaitForResponse(CMD_ACK,NULL);        
+       if ( !WaitForResponseTimeout(CMD_ACK,NULL,2500) ) {
+               PrintAndLog("command execution time out");
+               return 1;
+       }
+
        return 0;
 }
 
@@ -505,6 +584,7 @@ int CmdLFSnoop(const char *Cmd)
        }
 
        UsbCommand c = {CMD_LF_SNOOP_RAW_ADC_SAMPLES};
+       clearCommandBuffer();
        SendCommand(&c);
        WaitForResponse(CMD_ACK,NULL);
        return 0;
@@ -551,6 +631,7 @@ int CmdLFSim(const char *Cmd)
        printf("\n");
        PrintAndLog("Starting to simulate");
        UsbCommand c = {CMD_SIMULATE_TAG_125K, {GraphTraceLen, gap, 0}};
+       clearCommandBuffer();
        SendCommand(&c);
        return 0;
 }
@@ -700,6 +781,7 @@ int CmdLFfskSim(const char *Cmd)
        UsbCommand c = {CMD_FSK_SIM_TAG, {arg1, arg2, size}};
 
        memcpy(c.d.asBytes, DemodBuffer, size);
+       clearCommandBuffer();
        SendCommand(&c);
        return 0;
 }
@@ -793,6 +875,7 @@ int CmdLFaskSim(const char *Cmd)
        UsbCommand c = {CMD_ASK_SIM_TAG, {arg1, arg2, size}};
        PrintAndLog("preparing to sim ask data: %d bits", size);
        memcpy(c.d.asBytes, DemodBuffer, size);
+       clearCommandBuffer();
        SendCommand(&c);
        return 0;
 }
@@ -900,6 +983,7 @@ int CmdLFpskSim(const char *Cmd)
        UsbCommand c = {CMD_PSK_SIM_TAG, {arg1, arg2, size}};
        PrintAndLog("DEBUG: Sending DemodBuffer Length: %d", size);
        memcpy(c.d.asBytes, DemodBuffer, size);
+       clearCommandBuffer();
        SendCommand(&c);
        
        return 0;
@@ -1053,13 +1137,6 @@ int CmdLFfind(const char *Cmd)
                return 1;
        }
 
-       //add psk and indala
-       ans=CmdIndalaDecode("");
-       if (ans>0) {
-               PrintAndLog("\nValid Indala ID Found!");
-               return 1;
-       }
-
        ans=CmdAskEM410xDemod("");
        if (ans>0) {
                PrintAndLog("\nValid EM410x ID Found!");
@@ -1072,12 +1149,30 @@ int CmdLFfind(const char *Cmd)
                return 1;
        }
 
+       ans=CmdFDXBdemodBI("");
+       if (ans>0) {
+               PrintAndLog("\nValid FDX-B ID Found!");
+               return 1;
+       }
+
        ans=EM4x50Read("", false);
        if (ans>0) {
                PrintAndLog("\nValid EM4x50 ID Found!");
                return 1;
        }       
 
+       ans=CmdVikingDemod("");
+       if (ans>0) {
+               PrintAndLog("\nValid Viking ID Found!");
+               return 1;
+       }       
+
+       ans=CmdIndalaDecode("");
+       if (ans>0) {
+               PrintAndLog("\nValid Indala ID Found!");
+               return 1;
+       }
+
        ans=CmdPSKNexWatch("");
        if (ans>0) {
                PrintAndLog("\nValid NexWatch ID Found!");
@@ -1098,7 +1193,8 @@ int CmdLFfind(const char *Cmd)
                                return 1;
                        }
                }
-               ans=ASKDemod("0 0 0",TRUE,FALSE,1);
+               bool st = TRUE;
+               ans=ASKDemod_ext("0 0 0",TRUE,FALSE,1,&st);
                if (ans>0) {
                        PrintAndLog("\nUnknown ASK Modulated and Manchester encoded Tag Found!");
                        PrintAndLog("\nif it does not look right it could instead be ASK/Biphase - try 'data rawdemod ab'");
@@ -1119,27 +1215,29 @@ int CmdLFfind(const char *Cmd)
 static command_t CommandTable[] = 
 {
        {"help",        CmdHelp,            1, "This help"},
-       {"cmdread",     CmdLFCommandRead,   0, "<off period> <'0' period> <'1' period> <command> ['h'] -- Modulate LF reader field to send command before read (all periods in microseconds) (option 'h' for 134)"},
-       {"em4x",        CmdLFEM4X,          1, "{ EM4X RFIDs... }"},
+       {"awid",        CmdLFAWID,          1, "{ AWID RFIDs...    }"},
+       {"em4x",        CmdLFEM4X,          1, "{ EM4X RFIDs...    }"},
+       {"hid",         CmdLFHID,           1, "{ HID RFIDs...     }"},
+       {"hitag",       CmdLFHitag,         1, "{ Hitag tags and transponders... }"},
+       {"io",          CmdLFIO,            1, "{ ioProx tags...   }"},
+       {"pcf7931",     CmdLFPCF7931,       1, "{ PCF7931 RFIDs... }"},
+       {"t55xx",       CmdLFT55XX,         1, "{ T55xx RFIDs...   }"},
+       {"ti",          CmdLFTI,            1, "{ TI RFIDs...      }"},
+       {"viking",      CmdLFViking,        1, "{ Viking tags...   }"},
+       {"cmdread",     CmdLFCommandRead,   0, "<d period> <z period> <o period> <c command> ['H'] -- Modulate LF reader field to send command before read (all periods in microseconds) (option 'H' for 134)"},
        {"config",      CmdLFSetConfig,     0, "Set config for LF sampling, bit/sample, decimation, frequency"},
        {"flexdemod",   CmdFlexdemod,       1, "Demodulate samples for FlexPass"},
-       {"hid",         CmdLFHID,           1, "{ HID RFIDs... }"},
-       {"io",            CmdLFIO,                1, "{ ioProx tags... }"},
        {"indalademod", CmdIndalaDemod,     1, "['224'] -- Demodulate samples for Indala 64 bit UID (option '224' for 224 bit)"},
        {"indalaclone", CmdIndalaClone,     0, "<UID> ['l']-- Clone Indala to T55x7 (tag must be in antenna)(UID in HEX)(option 'l' for 224 UID"},
        {"read",        CmdLFRead,          0, "['s' silent] Read 125/134 kHz LF ID-only tag. Do 'lf read h' for help"},
        {"search",      CmdLFfind,          1, "[offline] ['u'] Read and Search for valid known tag (in offline mode it you can load first then search) - 'u' to search for unknown tags"},
        {"sim",         CmdLFSim,           0, "[GAP] -- Simulate LF tag from buffer with optional GAP (in microseconds)"},
-       {"simask",      CmdLFaskSim,        0, "[clock] [invert <1|0>] [manchester/raw <'m'|'r'>] [msg separator 's'] [d <hexdata>] -- Simulate LF ASK tag from demodbuffer or input"},
+       {"simask",      CmdLFaskSim,        0, "[clock] [invert <1|0>] [biphase/manchester/raw <'b'|'m'|'r'>] [msg separator 's'] [d <hexdata>] -- Simulate LF ASK tag from demodbuffer or input"},
        {"simfsk",      CmdLFfskSim,        0, "[c <clock>] [i] [H <fcHigh>] [L <fcLow>] [d <hexdata>] -- Simulate LF FSK tag from demodbuffer or input"},
        {"simpsk",      CmdLFpskSim,        0, "[1|2|3] [c <clock>] [i] [r <carrier>] [d <raw hex to sim>] -- Simulate LF PSK tag from demodbuffer or input"},
        {"simbidir",    CmdLFSimBidir,      0, "Simulate LF tag (with bidirectional data transmission between reader and tag)"},
        {"snoop",       CmdLFSnoop,         0, "['l'|'h'|<divisor>] [trigger threshold]-- Snoop LF (l:125khz, h:134khz)"},
-       {"ti",          CmdLFTI,            1, "{ TI RFIDs... }"},
-       {"hitag",       CmdLFHitag,         1, "{ Hitag tags and transponders... }"},
        {"vchdemod",    CmdVchDemod,        1, "['clone'] -- Demodulate samples for VeriChip"},
-       {"t55xx",       CmdLFT55XX,         1, "{ T55xx RFIDs... }"},
-       {"pcf7931",     CmdLFPCF7931,       1, "{PCF7931 RFIDs...}"},
        {NULL, NULL, 0, NULL}
 };
 
diff --git a/client/cmdlfawid.c b/client/cmdlfawid.c
new file mode 100644 (file)
index 0000000..309f411
--- /dev/null
@@ -0,0 +1,207 @@
+//-----------------------------------------------------------------------------
+// Authored by Craig Young <cyoung@tripwire.com> based on cmdlfhid.c structure
+//
+// cmdlfhid.c is Copyright (C) 2010 iZsh <izsh at fail0verflow.com>
+//
+// This code is licensed to you under the terms of the GNU GPL, version 2 or,
+// at your option, any later version. See the LICENSE.txt file for the text of
+// the license.
+//-----------------------------------------------------------------------------
+// Low frequency AWID26 commands
+//-----------------------------------------------------------------------------
+
+#include <stdio.h>      // sscanf
+#include "proxmark3.h"  // Definitions, USB controls, etc
+#include "ui.h"         // PrintAndLog
+#include "cmdparser.h"  // CmdsParse, CmdsHelp
+#include "cmdlfawid.h"  // AWID function declarations
+#include "lfdemod.h"    // parityTest
+#include "util.h"       // weigandparity
+#include "protocols.h"  // for T55xx config register definitions
+#include "cmdmain.h"
+
+static int CmdHelp(const char *Cmd);
+
+int usage_lf_awid_fskdemod(void) {
+       PrintAndLog("Enables AWID26 compatible reader mode printing details of scanned AWID26 tags.");
+       PrintAndLog("By default, values are printed and logged until the button is pressed or another USB command is issued.");
+       PrintAndLog("If the ['1'] option is provided, reader mode is exited after reading a single AWID26 card.");
+       PrintAndLog("");
+       PrintAndLog("Usage:  lf awid fskdemod ['1']");
+       PrintAndLog("Options : ");
+       PrintAndLog("  1 : (optional) stop after reading a single card");
+       PrintAndLog("");
+       PrintAndLog("Samples : lf awid fskdemod");
+       PrintAndLog("        : lf awid fskdemod 1");
+       return 0;
+}
+
+int usage_lf_awid_sim(void) {
+       PrintAndLog("Enables simulation of AWID26 card with specified facility-code and card number.");
+       PrintAndLog("Simulation runs until the button is pressed or another USB command is issued.");
+       PrintAndLog("Per AWID26 format, the facility-code is 8-bit and the card number is 16-bit.  Larger values are truncated.");
+       PrintAndLog("");
+       PrintAndLog("Usage:  lf awid sim <Facility-Code> <Card-Number>");
+       PrintAndLog("Options : ");
+       PrintAndLog("  <Facility-Code> : 8-bit value representing the AWID facility code");
+       PrintAndLog("  <Card Number>   : 16-bit value representing the AWID card number");
+       PrintAndLog("");
+       PrintAndLog("Sample : lf awid sim 224 1337");
+       return 0;
+}
+
+int usage_lf_awid_clone(void) {
+       PrintAndLog("Enables cloning of AWID26 card with specified facility-code and card number onto T55x7.");
+       PrintAndLog("The T55x7 must be on the antenna when issuing this command.  T55x7 blocks are calculated and printed in the process.");
+       PrintAndLog("Per AWID26 format, the facility-code is 8-bit and the card number is 16-bit.  Larger values are truncated.");
+       PrintAndLog("");
+       PrintAndLog("Usage:  lf awid clone <Facility-Code> <Card-Number>");
+       PrintAndLog("Options : ");
+       PrintAndLog("  <Facility-Code> : 8-bit value representing the AWID facility code");
+       PrintAndLog("  <Card Number>   : 16-bit value representing the AWID card number");
+       PrintAndLog("  Q5              : optional - clone to Q5 (T5555) instead of T55x7 chip");
+       PrintAndLog("");
+       PrintAndLog("Sample  : lf awid clone 224 1337");
+       return 0;
+}
+
+int CmdAWIDDemodFSK(const char *Cmd) {
+       int findone=0;
+       if (Cmd[0] == 'h' || Cmd[0] == 'H') return usage_lf_awid_fskdemod();
+       if (Cmd[0] == '1') findone = 1;
+
+       UsbCommand c = {CMD_AWID_DEMOD_FSK, {findone, 0, 0}};
+       clearCommandBuffer();
+       SendCommand(&c);
+       return 0;   
+}
+
+//refactored by marshmellow
+int getAWIDBits(uint32_t fc, uint32_t cn, uint8_t      *AWIDBits) {
+       uint8_t pre[66];
+       memset(pre, 0, sizeof(pre));
+       AWIDBits[7]=1;
+       num_to_bytebits(26, 8, pre);
+
+       uint8_t wiegand[24];
+       num_to_bytebits(fc, 8, wiegand);
+       num_to_bytebits(cn, 16, wiegand+8);
+
+       wiegand_add_parity(pre+8, wiegand, 24);
+
+       size_t bitLen = addParity(pre, AWIDBits+8, 66, 4, 1);
+       if (bitLen != 88) return 0;
+       //for (uint8_t i = 0; i<3; i++){
+       //      PrintAndLog("DEBUG: %08X", bytebits_to_byte(AWIDBits+(32*i),32));
+       //}
+       return 1;
+}
+
+int CmdAWIDSim(const char *Cmd) {
+       uint32_t fcode = 0, cnum = 0, fc=0, cn=0;
+       uint8_t BitStream[96];
+       uint8_t *bs = BitStream;
+       size_t size = sizeof(BitStream);
+       memset(bs, 0, size);
+
+       uint64_t arg1 = (10<<8) + 8; // fcHigh = 10, fcLow = 8
+       uint64_t arg2 = 50; // clk RF/50 invert=0
+       
+       if (sscanf(Cmd, "%u %u", &fc, &cn ) != 2) return usage_lf_awid_sim();
+
+       fcode = (fc & 0x000000FF);
+       cnum = (cn & 0x0000FFFF);
+
+       if (fc != fcode) PrintAndLog("Facility-Code (%u) truncated to 8-bits: %u",fc,fcode);
+       if (cn != cnum) PrintAndLog("Card number (%u) truncated to 16-bits: %u",cn,cnum);
+
+       PrintAndLog("Emulating AWID26 -- FC: %u; CN: %u\n",fcode,cnum);
+       PrintAndLog("Press pm3-button to abort simulation or run another command");
+
+       if (!getAWIDBits(fc, cn, bs)) {
+               PrintAndLog("Error with tag bitstream generation.");
+               return 1;
+       }
+       // AWID uses: fcHigh: 10, fcLow: 8, clk: 50, invert: 0
+       UsbCommand c = {CMD_FSK_SIM_TAG, {arg1, arg2, size}};
+       memcpy(c.d.asBytes, bs, size);
+       clearCommandBuffer();
+       SendCommand(&c);
+       return 0;
+}
+
+int CmdAWIDClone(const char *Cmd) {
+       uint32_t blocks[4] = {T55x7_MODULATION_FSK2a | T55x7_BITRATE_RF_50 | 3<<T55x7_MAXBLOCK_SHIFT, 0, 0, 0};
+       uint32_t fc=0,cn=0;
+       uint8_t BitStream[96];
+       uint8_t *bs=BitStream;
+       memset(bs,0,sizeof(BitStream));
+
+       if (sscanf(Cmd, "%u %u", &fc, &cn ) != 2) return usage_lf_awid_clone();
+
+       if (param_getchar(Cmd, 3) == 'Q' || param_getchar(Cmd, 3) == 'q')
+               blocks[0] = T5555_MODULATION_FSK2 | T5555_INVERT_OUTPUT | 50<<T5555_BITRATE_SHIFT | 3<<T5555_MAXBLOCK_SHIFT;
+
+       if ((fc & 0xFF) != fc) {
+               fc &= 0xFF;
+               PrintAndLog("Facility-Code Truncated to 8-bits (AWID26): %u", fc);
+       }
+       if ((cn & 0xFFFF) != cn) {
+               cn &= 0xFFFF;
+               PrintAndLog("Card Number Truncated to 16-bits (AWID26): %u", cn);
+       }
+
+       if ( !getAWIDBits(fc, cn, bs)) {
+               PrintAndLog("Error with tag bitstream generation.");
+               return 1;
+       }
+
+       blocks[1] = bytebits_to_byte(bs,32);
+       blocks[2] = bytebits_to_byte(bs+32,32);
+       blocks[3] = bytebits_to_byte(bs+64,32);
+
+       PrintAndLog("Preparing to clone AWID26 to T55x7 with FC: %u, CN: %u", 
+           fc, cn);
+       PrintAndLog("Blk | Data ");
+       PrintAndLog("----+------------");
+       PrintAndLog(" 00 | 0x%08x", blocks[0]);
+       PrintAndLog(" 01 | 0x%08x", blocks[1]);
+       PrintAndLog(" 02 | 0x%08x", blocks[2]);
+       PrintAndLog(" 03 | 0x%08x", blocks[3]);
+
+       UsbCommand resp;
+       UsbCommand c = {CMD_T55XX_WRITE_BLOCK, {0,0,0}};
+
+       for (uint8_t i=0; i<4; i++) {
+               c.cmd = CMD_T55XX_WRITE_BLOCK;
+               c.arg[0] = blocks[i];
+               c.arg[1] = i;
+               c.arg[2] = 0;
+               clearCommandBuffer();
+               SendCommand(&c);
+               if (!WaitForResponseTimeout(CMD_ACK, &resp, 1000)){
+                       PrintAndLog("Error occurred, device did not respond during write operation.");
+                       return -1;
+               }
+
+       }
+       return 0;
+}
+
+static command_t CommandTable[] = {
+       {"help",      CmdHelp,         1, "This help"},
+       {"fskdemod",  CmdAWIDDemodFSK, 0, "['1'] Realtime AWID FSK demodulator (option '1' for one tag only)"},
+       {"sim",       CmdAWIDSim,      0, "<Facility-Code> <Card Number> -- AWID tag simulator"},
+       {"clone",     CmdAWIDClone,    0, "<Facility-Code> <Card Number> <Q5> -- Clone AWID to T55x7 (tag must be in range of antenna)"},
+       {NULL, NULL, 0, NULL}
+};
+
+int CmdLFAWID(const char *Cmd) {
+       CmdsParse(CommandTable, Cmd);
+       return 0;
+}
+
+int CmdHelp(const char *Cmd) {
+       CmdsHelp(CommandTable);
+       return 0;
+}
diff --git a/client/cmdlfawid.h b/client/cmdlfawid.h
new file mode 100644 (file)
index 0000000..0062292
--- /dev/null
@@ -0,0 +1,24 @@
+//-----------------------------------------------------------------------------
+// Copyright (C) 2010 iZsh <izsh at fail0verflow.com>
+//
+// This code is licensed to you under the terms of the GNU GPL, version 2 or,
+// at your option, any later version. See the LICENSE.txt file for the text of
+// the license.
+//-----------------------------------------------------------------------------
+// Low frequency AWID commands
+//-----------------------------------------------------------------------------
+
+#ifndef CMDLFAWID_H__
+#define CMDLFAWID_H__
+
+int CmdLFAWID(const char *Cmd);
+//int CmdAWIDDemod(const char *Cmd);
+int CmdAWIDDemodFSK(const char *Cmd);
+int CmdAWIDSim(const char *Cmd);
+int CmdAWIDClone(const char *Cmd);
+int getAWIDBits(unsigned int fc, unsigned int cn, uint8_t *AWIDBits);
+int usage_lf_awid_fskdemod(void);
+int usage_lf_awid_clone(void);
+int usage_lf_awid_sim(void);
+
+#endif
index c492a64d52e5c4e056202302142836a2f893ae80..aa0fc856e002b20e2c3e882341bff765b1d74416 100644 (file)
@@ -20,6 +20,7 @@
 #include "cmdlf.h"
 #include "cmdlfem4x.h"
 #include "lfdemod.h"
+
 char *global_em410xId;
 
 static int CmdHelp(const char *Cmd);
@@ -55,7 +56,7 @@ int CmdEM410xRead(const char *Cmd)
                return 0;
        }
        char id[12] = {0x00};
-       sprintf(id, "%010llx",lo);
+       sprintf(id, "%010"PRIx64,lo);
        
        global_em410xId = id;
        return 1;
@@ -70,22 +71,23 @@ int CmdEM410xSim(const char *Cmd)
        uint8_t uid[5] = {0x00};
 
        if (cmdp == 'h' || cmdp == 'H') {
-               PrintAndLog("Usage:  lf em4x 410xsim <UID>");
+               PrintAndLog("Usage:  lf em4x em410xsim <UID> <clock>");
                PrintAndLog("");
-               PrintAndLog("     sample: lf em4x 410xsim 0F0368568B");
+               PrintAndLog("     sample: lf em4x em410xsim 0F0368568B");
                return 0;
        }
+       /* clock is 64 in EM410x tags */
+       uint8_t clock = 64;
 
        if (param_gethex(Cmd, 0, uid, 10)) {
                PrintAndLog("UID must include 10 HEX symbols");
                return 0;
        }
-       
-       PrintAndLog("Starting simulating UID %02X%02X%02X%02X%02X", uid[0],uid[1],uid[2],uid[3],uid[4]);
+       param_getdec(Cmd,1, &clock);
+
+       PrintAndLog("Starting simulating UID %02X%02X%02X%02X%02X  clock: %d", uid[0],uid[1],uid[2],uid[3],uid[4],clock);
        PrintAndLog("Press pm3-button to about simulation");
 
-       /* clock is 64 in EM410x tags */
-       int clock = 64;
 
        /* clear our graph */
        ClearGraph(0);
@@ -194,21 +196,13 @@ int CmdEM410xWrite(const char *Cmd)
        }
 
        // Check Clock
-       if (card == 1)
-       {
-               // Default: 64
-               if (clock == 0)
-                       clock = 64;
-
-               // Allowed clock rates: 16, 32 and 64
-               if ((clock != 16) && (clock != 32) && (clock != 64)) {
-                       PrintAndLog("Error! Clock rate %d not valid. Supported clock rates are 16, 32 and 64.\n", clock);
-                       return 0;
-               }
-       }
-       else if (clock != 0)
-       {
-               PrintAndLog("Error! Clock rate is only supported on T55x7 tags.\n");
+       // Default: 64
+       if (clock == 0)
+               clock = 64;
+
+       // Allowed clock rates: 16, 32, 40 and 64
+       if ((clock != 16) && (clock != 32) && (clock != 64) && (clock != 40)) {
+               PrintAndLog("Error! Clock rate %d not valid. Supported clock rates are 16, 32, 40 and 64.\n", clock);
                return 0;
        }
 
@@ -218,11 +212,11 @@ int CmdEM410xWrite(const char *Cmd)
                //   provide for backwards-compatibility for older firmware, and to avoid
                //   having to add another argument to CMD_EM410X_WRITE_TAG, we just store
                //   the clock rate in bits 8-15 of the card value
-               card = (card & 0xFF) | (((uint64_t)clock << 8) & 0xFF00);
-       }
-       else if (card == 0)
+               card = (card & 0xFF) | ((clock << 8) & 0xFF00);
+       }       else if (card == 0) {
                PrintAndLog("Writing %s tag with UID 0x%010" PRIx64, "T5555", id, clock);
-       else {
+               card = (card & 0xFF) | ((clock << 8) & 0xFF00);
+       } else {
                PrintAndLog("Error! Bad card type selected.\n");
                return 0;
        }
@@ -605,7 +599,7 @@ static command_t CommandTable[] =
        {"help", CmdHelp, 1, "This help"},
        {"em410xdemod", CmdEMdemodASK, 0, "[findone] -- Extract ID from EM410x tag (option 0 for continuous loop, 1 for only 1 tag)"},  
        {"em410xread", CmdEM410xRead, 1, "[clock rate] -- Extract ID from EM410x tag in GraphBuffer"},
-       {"em410xsim", CmdEM410xSim, 0, "<UID> -- Simulate EM410x tag"},
+       {"em410xsim", CmdEM410xSim, 0, "<UID> [clock rate] -- Simulate EM410x tag"},
        {"em410xwatch", CmdEM410xWatch, 0, "['h'] -- Watches for EM410x 125/134 kHz tags (option 'h' for 134)"},
        {"em410xspoof", CmdEM410xWatchnSpoof, 0, "['h'] --- Watches for EM410x 125/134 kHz tags, and replays them. (option 'h' for 134)" },
        {"em410xwrite", CmdEM410xWrite, 0, "<UID> <'0' T5555> <'1' T55x7> [clock rate] -- Write EM410x UID to T5555(Q5) or T55x7 tag, optionally setting clock rate"},
index aa21c44babed25eaf079db697c7351afcb7fcc84..e376951124fb8842cb3f7e55cbd1e1c27271e24e 100644 (file)
@@ -67,9 +67,9 @@ int CmdIOClone(const char *Cmd)
 static command_t CommandTable[] = 
 {
   {"help",        CmdHelp,            1, "This help"},
-  //{"demod",    CmdIOProxDemod,     1, "Demodulate Stream"},
+  //{"demod",       CmdIOProxDemod,     1, "Demodulate Stream"},
   {"fskdemod",    CmdIODemodFSK,      0, "['1'] Realtime IO FSK demodulator (option '1' for one tag only)"},
-  {"clone",      CmdIOClone,         0, "Clone ioProx Tag"},
+  {"clone",       CmdIOClone,         0, "Clone ioProx Tag"},
   {NULL, NULL, 0, NULL}
 };
 
index 0d8fb93d4c2d89024d26507f8039e2657a66b4b5..ffaf946f48e4c689eaac7d73cb703a3dab1ba04f 100644 (file)
@@ -1,17 +1,18 @@
 //-----------------------------------------------------------------------------
 // Copyright (C) 2012 Chalk <chalk.secu at gmail.com>
-//
+//               2015 Dake <thomas.cayrou at gmail.com>
+
 // This code is licensed to you under the terms of the GNU GPL, version 2 or,
 // at your option, any later version. See the LICENSE.txt file for the text of
 // the license.
 //-----------------------------------------------------------------------------
 // Low frequency PCF7931 commands
 //-----------------------------------------------------------------------------
-
 #include <stdio.h>
 #include <string.h>
 #include "proxmark3.h"
 #include "ui.h"
+#include "util.h"
 #include "graph.h"
 #include "cmdparser.h"
 #include "cmddata.h"
 
 static int CmdHelp(const char *Cmd);
 
-int CmdLFPCF7931Read(const char *Cmd)
-{
-  UsbCommand c = {CMD_PCF7931_READ};
-  SendCommand(&c);
-  UsbCommand resp;
-  WaitForResponse(CMD_ACK,&resp);
-  return 0;
+#define PCF7931_DEFAULT_INITDELAY 17500
+#define PCF7931_DEFAULT_OFFSET_WIDTH 0
+#define PCF7931_DEFAULT_OFFSET_POSITION 0
+
+// Default values - Configuration
+struct pcf7931_config configPcf = {
+       {0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF},
+       PCF7931_DEFAULT_INITDELAY,
+       PCF7931_DEFAULT_OFFSET_WIDTH, 
+       PCF7931_DEFAULT_OFFSET_POSITION
+       };
+
+// Resets the configuration settings to default values.
+int pcf7931_resetConfig(){
+       memset(configPcf.Pwd, 0xFF, sizeof(configPcf.Pwd) );
+       configPcf.InitDelay = PCF7931_DEFAULT_INITDELAY;
+       configPcf.OffsetWidth = PCF7931_DEFAULT_OFFSET_WIDTH; 
+       configPcf.OffsetPosition = PCF7931_DEFAULT_OFFSET_POSITION; 
+       return 0;
+}
+
+int pcf7931_printConfig(){
+       PrintAndLog("Password (LSB first on bytes) : %s", sprint_hex( configPcf.Pwd, sizeof(configPcf.Pwd)));
+       PrintAndLog("Tag initialization delay      : %d us", configPcf.InitDelay);
+       PrintAndLog("Offset low pulses width       : %d us", configPcf.OffsetWidth);
+       PrintAndLog("Offset low pulses position    : %d us", configPcf.OffsetPosition);
+       return 0;
+}
+
+int usage_pcf7931_read(){
+       PrintAndLog("Usage: lf pcf7931 read [h] ");
+       PrintAndLog("This command tries to read a PCF7931 tag.");
+       PrintAndLog("Options:");
+       PrintAndLog("       h   This help");
+       PrintAndLog("Examples:");
+       PrintAndLog("      lf pcf7931 read");
+       return 0;
+}
+
+int usage_pcf7931_write(){
+       PrintAndLog("Usage: lf pcf7931 write [h] <block address> <byte address> <data>");
+       PrintAndLog("This command tries to write a PCF7931 tag.");
+       PrintAndLog("Options:");
+       PrintAndLog("       h          This help");
+       PrintAndLog("       blockaddress   Block to save [0-7]");
+       PrintAndLog("       byteaddress    Index of byte inside block to write [0-15]");
+       PrintAndLog("       data           one byte of data (hex)");
+       PrintAndLog("Examples:");
+       PrintAndLog("      lf pcf7931 write 2 1 FF");
+       return 0;
+}
+
+int usage_pcf7931_config(){
+       PrintAndLog("Usage: lf pcf7931 config [h] [r] <pwd> <delay> <offset width> <offset position>");
+       PrintAndLog("This command tries to set the configuration used with PCF7931 commands");
+       PrintAndLog("The time offsets could be useful to correct slew rate generated by the antenna");
+       PrintAndLog("Caling without some parameter will print the current configuration.");
+       PrintAndLog("Options:");
+       PrintAndLog("       h       This help");
+       PrintAndLog("       r       Reset configuration to default values");
+       PrintAndLog("       pwd     Password, hex, 7bytes, LSB-order");
+       PrintAndLog("       delay   Tag initialization delay (in us) decimal");
+       PrintAndLog("       offset  Low pulses width (in us) decimal");
+       PrintAndLog("       offset  Low pulses position (in us) decimal");  
+       PrintAndLog("Examples:");
+       PrintAndLog("      lf pcf7931 config");
+       PrintAndLog("      lf pcf7931 config r");
+       PrintAndLog("      lf pcf7931 config 11223344556677 20000");
+       PrintAndLog("      lf pcf7931 config 11223344556677 17500 -10 30");
+       return 0;
+}
+
+int CmdLFPCF7931Read(const char *Cmd){  
+
+       uint8_t ctmp = param_getchar(Cmd, 0);
+       if ( ctmp == 'H' || ctmp == 'h' ) return usage_pcf7931_read();
+
+       UsbCommand resp;
+       UsbCommand c = {CMD_PCF7931_READ, {0, 0, 0}};
+       clearCommandBuffer();
+       SendCommand(&c);
+       if ( !WaitForResponseTimeout(CMD_ACK, &resp, 2500) ) {
+               PrintAndLog("command execution time out");
+               return 1;
+       }
+       return 0;
+}
+
+int CmdLFPCF7931Config(const char *Cmd){ 
+
+       uint8_t ctmp = param_getchar(Cmd, 0);
+       if ( ctmp == 0) return pcf7931_printConfig();
+       if ( ctmp == 'H' || ctmp == 'h' ) return usage_pcf7931_config();
+       if ( ctmp == 'R' || ctmp == 'r' ) return pcf7931_resetConfig(); 
+
+       if ( param_gethex(Cmd, 0, configPcf.Pwd, 14) ) return usage_pcf7931_config();
+
+       configPcf.InitDelay = (param_get32ex(Cmd,1,0,10) & 0xFFFF);
+       configPcf.OffsetWidth = (int)(param_get32ex(Cmd,2,0,10) & 0xFFFF);
+       configPcf.OffsetPosition = (int)(param_get32ex(Cmd,3,0,10) & 0xFFFF);
+
+       pcf7931_printConfig();
+       return 0;
+}
+
+int CmdLFPCF7931Write(const char *Cmd){
+
+       uint8_t ctmp = param_getchar(Cmd, 0);
+       if (strlen(Cmd) < 1 || ctmp == 'h' || ctmp == 'H') return usage_pcf7931_write();  
+
+       uint8_t block = 0, bytepos = 0, data = 0;
+       
+       if ( param_getdec(Cmd, 0, &block) ) return usage_pcf7931_write();
+       if ( param_getdec(Cmd, 1, &bytepos) ) return usage_pcf7931_write();
+       
+       if ( (block > 7) || (bytepos > 15) ) return usage_pcf7931_write();
+
+       data  = param_get8ex(Cmd, 2, 0, 16);
+       
+       PrintAndLog("Writing block: %d", block);
+       PrintAndLog("          pos: %d", bytepos);
+       PrintAndLog("         data: 0x%02X", data);
+
+       UsbCommand c = {CMD_PCF7931_WRITE, { block, bytepos, data} };
+       memcpy(c.d.asDwords, configPcf.Pwd, sizeof(configPcf.Pwd) );
+         c.d.asDwords[7] = (configPcf.OffsetWidth + 128);
+         c.d.asDwords[8] = (configPcf.OffsetPosition + 128);
+         c.d.asDwords[9] = configPcf.InitDelay;
+
+       clearCommandBuffer();
+       SendCommand(&c);
+       //no ack?
+       return 0;
 }
 
 static command_t CommandTable[] = 
 {
-  {"help", CmdHelp, 1, "This help"},
-  {"read", CmdLFPCF7931Read, 1, "Read content of a PCF7931 transponder"},
-  {NULL, NULL, 0, NULL}
+       {"help",   CmdHelp,            1, "This help"},
+       {"read",   CmdLFPCF7931Read,   0, "Read content of a PCF7931 transponder"},
+       {"write",  CmdLFPCF7931Write,  0, "Write data on a PCF7931 transponder."},
+       {"config", CmdLFPCF7931Config, 1, "Configure the password, the tags initialization delay and time offsets (optional)"},
+       {NULL,     NULL,               0, NULL}
 };
 
 int CmdLFPCF7931(const char *Cmd)
 {
-  CmdsParse(CommandTable, Cmd);
-  return 0;
+       CmdsParse(CommandTable, Cmd);
+       return 0;
 }
 
 int CmdHelp(const char *Cmd)
 {
-  CmdsHelp(CommandTable);
-  return 0;
+       CmdsHelp(CommandTable);
+       return 0;
 }
index ed60bc9102d39b99467ac6164cd9a0882718a42b..e093039c98726988d57815488ab3185d2a8b79c7 100644 (file)
@@ -1,6 +1,7 @@
 //-----------------------------------------------------------------------------
 // Copyright (C) 2012 Chalk <chalk.secu at gmail.com>
-//
+//                              2015 Dake <thomas.cayrou at gmail.com>
+
 // This code is licensed to you under the terms of the GNU GPL, version 2 or,
 // at your option, any later version. See the LICENSE.txt file for the text of
 // the license.
 #ifndef CMDLFPCF7931_H__
 #define CMDLFPCF7931_H__
 
+struct pcf7931_config{
+       uint8_t Pwd[7];
+       uint16_t InitDelay;
+       int16_t OffsetWidth;
+       int16_t OffsetPosition;
+};
+
+int pcf7931_resetConfig();
+int pcf7931_printConfig();
+
+int usage_pcf7931_read();
+int usage_pcf7931_write();
+int usage_pcf7931_config();
+
 int CmdLFPCF7931(const char *Cmd);
 
 int CmdLFPCF7931Read(const char *Cmd);
+int CmdLFPCF7931Write(const char *Cmd);
+int CmdLFPCF7931Config(const char *Cmd);
 
 #endif
index d4b72b3279bbbaf0844f0703334c1d016d6c4176..7d9543532fbb5257721414dbebc9ee870772182f 100644 (file)
@@ -10,7 +10,6 @@
 #include <stdio.h>\r
 #include <string.h>\r
 #include <inttypes.h>\r
-#include <time.h>\r
 #include "proxmark3.h"\r
 #include "ui.h"\r
 #include "graph.h"\r
 #include "util.h"\r
 #include "data.h"\r
 #include "lfdemod.h"\r
-#include "../common/crc.h"\r
-#include "../common/iso14443crc.h"\r
-#include "cmdhf14a.h"\r
+#include "cmdhf14a.h" //for getTagInfo\r
 \r
-#define CONFIGURATION_BLOCK 0x00\r
-#define TRACE_BLOCK 0x01\r
+#define T55x7_CONFIGURATION_BLOCK 0x00\r
+#define T55x7_PAGE0 0x00\r
+#define T55x7_PAGE1 0x01\r
+//#define T55x7_PWD    0x00000010\r
+#define REGULAR_READ_MODE_BLOCK 0xFF\r
 \r
 // Default configuration\r
-t55xx_conf_block_t config = { .modulation = DEMOD_ASK, .inverted = FALSE, .offset = 0x00, .block0 = 0x00};\r
+t55xx_conf_block_t config = { .modulation = DEMOD_ASK, .inverted = FALSE, .offset = 0x00, .block0 = 0x00, .Q5 = FALSE };\r
+\r
+t55xx_conf_block_t Get_t55xx_Config(){\r
+       return config;\r
+}\r
+void Set_t55xx_Config(t55xx_conf_block_t conf){\r
+       config = conf;\r
+}\r
 \r
 int usage_t55xx_config(){\r
-       PrintAndLog("Usage: lf t55xx config [d <demodulation>] [i 1] [o <offset>]");\r
-       PrintAndLog("Options:        ");\r
+       PrintAndLog("Usage: lf t55xx config [d <demodulation>] [i 1] [o <offset>] [Q5]");\r
+       PrintAndLog("Options:");\r
        PrintAndLog("       h                        This help");\r
-       PrintAndLog("       b <8|16|32|40|50|64|100|128>     Set bitrate");\r
-       PrintAndLog("       d <FSK|FSK1|FSK1a|FSK2|FSK2a|ASK|PSK1|PSK2|NZ|BI|BIa>  Set demodulation FSK / ASK / PSK / NZ / Biphase / Biphase A");\r
-       PrintAndLog("       i [1]                            Invert data signal, defaults to normal");\r
-       PrintAndLog("       o [offset]                       Set offset, where data should start decode in bitstream");\r
+       PrintAndLog("       b <8|16|32|40|50|64|100|128>  Set bitrate");\r
+       PrintAndLog("       d <FSK|FSK1|FSK1a|FSK2|FSK2a|ASK|PSK1|PSK2|NRZ|BI|BIa>  Set demodulation FSK / ASK / PSK / NRZ / Biphase / Biphase A");\r
+       PrintAndLog("       i [1]                         Invert data signal, defaults to normal");\r
+       PrintAndLog("       o [offset]                    Set offset, where data should start decode in bitstream");\r
+       PrintAndLog("       Q5                            Set as Q5(T5555) chip instead of T55x7");\r
+       PrintAndLog("       ST                            Set Sequence Terminator on");\r
        PrintAndLog("");\r
        PrintAndLog("Examples:");\r
        PrintAndLog("      lf t55xx config d FSK          - FSK demodulation");\r
@@ -49,31 +58,41 @@ int usage_t55xx_config(){
        return 0;\r
 }\r
 int usage_t55xx_read(){\r
-       PrintAndLog("Usage:  lf t55xx read <block> <password>");\r
-    PrintAndLog("     <block>, block number to read. Between 0-7");\r
-    PrintAndLog("     <password>, OPTIONAL password (8 hex characters)");\r
-    PrintAndLog("");\r
+       PrintAndLog("Usage:  lf t55xx read [b <block>] [p <password>] <override_safety> <page1>");\r
+       PrintAndLog("Options:");\r
+       PrintAndLog("     b <block>    - block number to read. Between 0-7");\r
+       PrintAndLog("     p <password> - OPTIONAL password (8 hex characters)");\r
+       PrintAndLog("     o            - OPTIONAL override safety check");\r
+       PrintAndLog("     1            - OPTIONAL read Page 1 instead of Page 0");\r
+       PrintAndLog("     ****WARNING****");\r
+       PrintAndLog("     Use of read with password on a tag not configured for a pwd");\r
+       PrintAndLog("     can damage the tag");\r
+       PrintAndLog("");\r
        PrintAndLog("Examples:");\r
-    PrintAndLog("      lf t55xx read 0           - read data from block 0");\r
-       PrintAndLog("      lf t55xx read 0 feedbeef  - read data from block 0 password feedbeef");\r
+       PrintAndLog("      lf t55xx read b 0              - read data from block 0");\r
+       PrintAndLog("      lf t55xx read b 0 p feedbeef   - read data from block 0 password feedbeef");\r
+       PrintAndLog("      lf t55xx read b 0 p feedbeef o - read data from block 0 password feedbeef safety check");\r
        PrintAndLog("");\r
        return 0;\r
 }\r
 int usage_t55xx_write(){\r
-       PrintAndLog("Usage:  lf t55xx wr <block> <data> [password]");\r
-    PrintAndLog("     <block>, block number to read. Between 0-7");\r
-       PrintAndLog("     <data>,  4 bytes of data to write (8 hex characters)");\r
-    PrintAndLog("     [password], OPTIONAL password 4bytes (8 hex characters)");\r
-    PrintAndLog("");\r
+       PrintAndLog("Usage:  lf t55xx wr [b <block>] [d <data>] [p <password>] [1]");\r
+       PrintAndLog("Options:");\r
+       PrintAndLog("     b <block>    - block number to write. Between 0-7");\r
+       PrintAndLog("     d <data>     - 4 bytes of data to write (8 hex characters)");\r
+       PrintAndLog("     p <password> - OPTIONAL password 4bytes (8 hex characters)");\r
+       PrintAndLog("     1            - OPTIONAL write Page 1 instead of Page 0");\r
+       PrintAndLog("");\r
        PrintAndLog("Examples:");\r
-    PrintAndLog("      lf t55xx wd 3 11223344           - write 11223344 to block 3");\r
-       PrintAndLog("      lf t55xx wd 3 11223344 feedbeef  - write 11223344 to block 3 password feedbeef");\r
+       PrintAndLog("      lf t55xx wr b 3 d 11223344            - write 11223344 to block 3");\r
+       PrintAndLog("      lf t55xx wr b 3 d 11223344 p feedbeef - write 11223344 to block 3 password feedbeef");\r
        PrintAndLog("");\r
        return 0;\r
 }\r
 int usage_t55xx_trace() {\r
        PrintAndLog("Usage:  lf t55xx trace [1]");\r
-       PrintAndLog("     [graph buffer data], if set, use Graphbuffer otherwise read data from tag.");\r
+       PrintAndLog("Options:");\r
+       PrintAndLog("     [graph buffer data]  - if set, use Graphbuffer otherwise read data from tag.");\r
        PrintAndLog("");\r
        PrintAndLog("Examples:");\r
        PrintAndLog("      lf t55xx trace");\r
@@ -83,7 +102,8 @@ int usage_t55xx_trace() {
 }\r
 int usage_t55xx_info() {\r
        PrintAndLog("Usage:  lf t55xx info [1]");\r
-       PrintAndLog("     [graph buffer data], if set, use Graphbuffer otherwise read data from tag.");\r
+       PrintAndLog("Options:");\r
+       PrintAndLog("     [graph buffer data]  - if set, use Graphbuffer otherwise read data from tag.");\r
        PrintAndLog("");\r
        PrintAndLog("Examples:");\r
        PrintAndLog("      lf t55xx info");\r
@@ -92,36 +112,89 @@ int usage_t55xx_info() {
        return 0;\r
 }\r
 int usage_t55xx_dump(){\r
-       PrintAndLog("Usage:  lf t55xx dump <password>");\r
-    PrintAndLog("     <password>, OPTIONAL password 4bytes (8 hex symbols)");\r
+       PrintAndLog("Usage:  lf t55xx dump <password> [o]");\r
+       PrintAndLog("Options:");\r
+       PrintAndLog("     <password>  - OPTIONAL password 4bytes (8 hex symbols)");\r
+       PrintAndLog("     o           - OPTIONAL override, force pwd read despite danger to card");\r
        PrintAndLog("");\r
        PrintAndLog("Examples:");\r
        PrintAndLog("      lf t55xx dump");\r
-       PrintAndLog("      lf t55xx dump feedbeef");\r
+       PrintAndLog("      lf t55xx dump feedbeef o");\r
        PrintAndLog("");\r
        return 0;\r
 }\r
 int usage_t55xx_detect(){\r
-       PrintAndLog("Usage:  lf t55xx detect");\r
+       PrintAndLog("Usage:  lf t55xx detect [1] [p <password>]");\r
+       PrintAndLog("Options:");\r
+       PrintAndLog("     1             - if set, use Graphbuffer otherwise read data from tag.");\r
+       PrintAndLog("     p <password>  - OPTIONAL password (8 hex characters)");\r
        PrintAndLog("");\r
        PrintAndLog("Examples:");\r
        PrintAndLog("      lf t55xx detect");\r
        PrintAndLog("      lf t55xx detect 1");\r
+       PrintAndLog("      lf t55xx detect p 11223344");\r
+       PrintAndLog("");\r
+       return 0;\r
+}\r
+int usage_t55xx_wakup(){\r
+       PrintAndLog("Usage:  lf t55xx wakeup [h] p <password>");\r
+       PrintAndLog("This commands send the Answer-On-Request command and leaves the readerfield ON afterwards.");\r
+       PrintAndLog("Options:");\r
+       PrintAndLog("     h             - this help");\r
+       PrintAndLog("     p <password>  - password 4bytes (8 hex symbols)");\r
+       PrintAndLog("");\r
+       PrintAndLog("Examples:");\r
+               PrintAndLog("      lf t55xx wakeup p 11223344  - send wakeup password");\r
+       return 0;\r
+}\r
+int usage_t55xx_bruteforce(){\r
+       PrintAndLog("This command uses A) bruteforce to scan a number range");\r
+       PrintAndLog("                  B) a dictionary attack");\r
+       PrintAndLog("Usage: lf t55xx bruteforce <start password> <end password> [i <*.dic>]");\r
+       PrintAndLog("       password must be 4 bytes (8 hex symbols)");\r
+       PrintAndLog("Options:");\r
+       PrintAndLog("     h           - this help");\r
+       PrintAndLog("     <start_pwd> - 4 byte hex value to start pwd search at");\r
+       PrintAndLog("     <end_pwd>   - 4 byte hex value to end pwd search at");\r
+       PrintAndLog("     i <*.dic>   - loads a default keys dictionary file <*.dic>");\r
        PrintAndLog("");\r
+       PrintAndLog("Examples:");\r
+       PrintAndLog("       lf t55xx bruteforce aaaaaaaa bbbbbbbb");\r
+       PrintAndLog("       lf t55xx bruteforce i default_pwd.dic");\r
+       PrintAndLog("");\r
+       return 0;\r
+}\r
+int usage_t55xx_wipe(){\r
+       PrintAndLog("Usage:  lf t55xx wipe [h] [Q5]");\r
+       PrintAndLog("This commands wipes a tag, fills blocks 1-7 with zeros and a default configuration block");\r
+       PrintAndLog("Options:");\r
+       PrintAndLog("     h   - this help");\r
+       PrintAndLog("     Q5  - indicates to use the T5555 (Q5) default configuration block");\r
+       PrintAndLog("");\r
+       PrintAndLog("Examples:");\r
+       PrintAndLog("      lf t55xx wipe    -  wipes a t55x7 tag,    config block 0x000880E0");\r
+       PrintAndLog("      lf t55xx wipe Q5 -  wipes a t5555 Q5 tag, config block 0x6001F004");\r
        return 0;\r
 }\r
 \r
+\r
 static int CmdHelp(const char *Cmd);\r
 \r
+void printT5xxHeader(uint8_t page){\r
+       PrintAndLog("Reading Page %d:", page);\r
+       PrintAndLog("blk | hex data | binary");\r
+       PrintAndLog("----+----------+---------------------------------");       \r
+}\r
+\r
 int CmdT55xxSetConfig(const char *Cmd) {\r
 \r
        uint8_t offset = 0;\r
-       bool errors = FALSE;\r
-       uint8_t cmdp = 0;\r
        char modulation[5] = {0x00};\r
        char tmp = 0x00;\r
        uint8_t bitRate = 0;\r
        uint8_t rates[9] = {8,16,32,40,50,64,100,128,0};\r
+       uint8_t cmdp = 0;\r
+       bool errors = FALSE;\r
        while(param_getchar(Cmd, cmdp) != 0x00 && !errors)\r
        {\r
                tmp = param_getchar(Cmd, cmdp);\r
@@ -193,6 +266,16 @@ int CmdT55xxSetConfig(const char *Cmd) {
                                config.offset = offset;\r
                        cmdp+=2;\r
                        break;\r
+               case 'Q':\r
+               case 'q':               \r
+                       config.Q5 = TRUE;\r
+                       cmdp++;\r
+                       break;\r
+               case 'S':\r
+               case 's':               \r
+                       config.ST = TRUE;\r
+                       cmdp++;\r
+                       break;\r
                default:\r
                        PrintAndLog("Unknown parameter '%c'", param_getchar(Cmd, cmdp));\r
                        errors = TRUE;\r
@@ -201,63 +284,91 @@ int CmdT55xxSetConfig(const char *Cmd) {
        }\r
 \r
        // No args\r
-       if (cmdp == 0) {\r
-               printConfiguration( config );\r
-               return 0;\r
-       }\r
+       if (cmdp == 0) return printConfiguration( config );\r
+\r
        //Validations\r
-       if (errors)\r
-               return usage_t55xx_config();\r
+       if (errors) return usage_t55xx_config();\r
 \r
-       config.block0 = 0;\r
-       printConfiguration ( config );\r
-       return 0;\r
+       config.block0 = 0;\r
+       return printConfiguration ( config );\r
 }\r
 \r
-int CmdT55xxReadBlock(const char *Cmd) {\r
-       int block = -1;\r
-       int password = 0xFFFFFFFF; //default to blank Block 7\r
+int T55xxReadBlock(uint8_t block, bool page1, bool usepwd, bool override, uint32_t password){\r
+       //Password mode\r
+       if ( usepwd ) {\r
+               // try reading the config block and verify that PWD bit is set before doing this!\r
+               if ( !override ) {\r
+                       if ( !AquireData(T55x7_PAGE0, T55x7_CONFIGURATION_BLOCK, false, 0 ) ) return 0;\r
+                       if ( !tryDetectModulation() ) {\r
+                               PrintAndLog("Safety Check: Could not detect if PWD bit is set in config block. Exits.");\r
+                               return 0;\r
+                       } else {\r
+                               PrintAndLog("Safety Check: PWD bit is NOT set in config block. Reading without password...");   \r
+                               usepwd = false;\r
+                               page1 = false;\r
+                       }\r
+               } else {\r
+                       PrintAndLog("Safety Check Overriden - proceeding despite risk");\r
+               }\r
+       }\r
 \r
-       char cmdp = param_getchar(Cmd, 0);\r
-       if (cmdp == 'h' || cmdp == 'H')\r
-               return usage_t55xx_read();\r
+       if (!AquireData(page1, block, usepwd, password) )       return 0;\r
+       if (!DecodeT55xxBlock()) return 0;\r
 \r
-       int res = sscanf(Cmd, "%d %x", &block, &password);\r
+       char blk[10]={0};\r
+       sprintf(blk,"%d", block);\r
+       printT55xxBlock(blk);   \r
+       return 1;\r
+}\r
 \r
-       if ( res < 1 || res > 2 )\r
-               return usage_t55xx_read();\r
+int CmdT55xxReadBlock(const char *Cmd) {\r
+       uint8_t block = REGULAR_READ_MODE_BLOCK;\r
+       uint32_t password = 0; //default to blank Block 7\r
+       bool usepwd = false;\r
+       bool override = false;\r
+       bool page1 = false;\r
+       bool errors = false;\r
+       uint8_t cmdp = 0;\r
+       while(param_getchar(Cmd, cmdp) != 0x00 && !errors) {\r
+               switch(param_getchar(Cmd, cmdp)) {\r
+               case 'h':\r
+               case 'H':\r
+                       return usage_t55xx_read();\r
+               case 'b':\r
+               case 'B':\r
+                       errors |= param_getdec(Cmd, cmdp+1, &block);\r
+                       cmdp += 2;\r
+                       break;\r
+               case 'o':\r
+               case 'O':\r
+                       override = true;\r
+                       cmdp++;\r
+                       break;\r
+               case 'p':\r
+               case 'P':\r
+                       password = param_get32ex(Cmd, cmdp+1, 0, 16);\r
+                       usepwd = true;\r
+                       cmdp += 2;\r
+                       break;\r
+               case '1':\r
+                       page1 = true;\r
+                       cmdp++;\r
+                       break;\r
+               default:\r
+                       PrintAndLog("Unknown parameter '%c'", param_getchar(Cmd, cmdp));\r
+                       errors = true;\r
+                       break;\r
+               }\r
+       }\r
+       if (errors) return usage_t55xx_read();\r
 \r
-       \r
-       if ((block < 0) | (block > 7)) {\r
+       if (block > 7 && block != REGULAR_READ_MODE_BLOCK       ) {\r
                PrintAndLog("Block must be between 0 and 7");\r
-               return 1;\r
-       }       \r
-\r
-       UsbCommand c = {CMD_T55XX_READ_BLOCK, {0, block, 0}};\r
-       c.d.asBytes[0] = 0x0; \r
-\r
-       //Password mode\r
-       if ( res == 2 ) {\r
-               c.arg[2] = password;\r
-               c.d.asBytes[0] = 0x1; \r
+               return 0;\r
        }\r
 \r
-       SendCommand(&c);\r
-       if ( !WaitForResponseTimeout(CMD_ACK,NULL,2500) ) {\r
-               PrintAndLog("command execution time out");\r
-               return 2;\r
-       }\r
-       \r
-       uint8_t got[12000];\r
-       GetFromBigBuf(got,sizeof(got),0);\r
-       WaitForResponse(CMD_ACK,NULL);\r
-       setGraphBuf(got, 12000);\r
-       DemodBufferLen=0;\r
-       if (!DecodeT55xxBlock()) return 3;\r
-       char blk[10]={0};\r
-       sprintf(blk,"%d", block);\r
-       printT55xxBlock(blk);\r
-       return 0;\r
+       printT5xxHeader(page1);\r
+       return T55xxReadBlock(block, page1, usepwd, override, password);\r
 }\r
 \r
 bool DecodeT55xxBlock(){\r
@@ -265,12 +376,10 @@ bool DecodeT55xxBlock(){
        char buf[30] = {0x00};\r
        char *cmdStr = buf;\r
        int ans = 0;\r
+       bool ST = config.ST;\r
        uint8_t bitRate[8] = {8,16,32,40,50,64,100,128};\r
        DemodBufferLen = 0x00;\r
 \r
-       //trim 1/2 a clock from beginning\r
-       snprintf(cmdStr, sizeof(buf),"%d", bitRate[config.bitrate]/2 );\r
-       CmdLtrim(cmdStr);\r
        switch( config.modulation ){\r
                case DEMOD_FSK:\r
                        snprintf(cmdStr, sizeof(buf),"%d %d", bitRate[config.bitrate], config.inverted );\r
@@ -287,18 +396,28 @@ bool DecodeT55xxBlock(){
                        ans = FSKrawDemod(cmdStr, FALSE);\r
                        break;\r
                case DEMOD_ASK:\r
-                       snprintf(cmdStr, sizeof(buf),"%d %d 0", bitRate[config.bitrate], config.inverted );\r
-                       ans = ASKDemod(cmdStr, FALSE, FALSE, 1);\r
+                       snprintf(cmdStr, sizeof(buf),"%d %d 1", bitRate[config.bitrate], config.inverted );\r
+                       ans = ASKDemod_ext(cmdStr, FALSE, FALSE, 1, &ST);\r
                        break;\r
                case DEMOD_PSK1:\r
-                       snprintf(cmdStr, sizeof(buf),"%d %d 0", bitRate[config.bitrate], config.inverted );\r
+                       // skip first 160 samples to allow antenna to settle in (psk gets inverted occasionally otherwise)\r
+                       save_restoreGB(1);\r
+                       CmdLtrim("160");\r
+                       snprintf(cmdStr, sizeof(buf),"%d %d 6", bitRate[config.bitrate], config.inverted );\r
                        ans = PSKDemod(cmdStr, FALSE);\r
+                       //undo trim samples\r
+                       save_restoreGB(0);\r
                        break;\r
                case DEMOD_PSK2: //inverted won't affect this\r
                case DEMOD_PSK3: //not fully implemented\r
-                       snprintf(cmdStr, sizeof(buf),"%d 0 1", bitRate[config.bitrate] );\r
+                       // skip first 160 samples to allow antenna to settle in (psk gets inverted occasionally otherwise)\r
+                       save_restoreGB(1);\r
+                       CmdLtrim("160");\r
+                       snprintf(cmdStr, sizeof(buf),"%d 0 6", bitRate[config.bitrate] );\r
                        ans = PSKDemod(cmdStr, FALSE);\r
                        psk1TOpsk2(DemodBuffer, DemodBufferLen);\r
+                       //undo trim samples\r
+                       save_restoreGB(0);\r
                        break;\r
                case DEMOD_NRZ:\r
                        snprintf(cmdStr, sizeof(buf),"%d %d 1", bitRate[config.bitrate], config.inverted );\r
@@ -306,7 +425,7 @@ bool DecodeT55xxBlock(){
                        break;\r
                case DEMOD_BI:\r
                case DEMOD_BIa:\r
-                       snprintf(cmdStr, sizeof(buf),"0 %d %d 0", bitRate[config.bitrate], config.inverted );\r
+                       snprintf(cmdStr, sizeof(buf),"0 %d %d 1", bitRate[config.bitrate], config.inverted );\r
                        ans = ASKbiphaseDemod(cmdStr, FALSE);\r
                        break;\r
                default:\r
@@ -315,164 +434,204 @@ bool DecodeT55xxBlock(){
        return (bool) ans;\r
 }\r
 \r
+bool DecodeT5555TraceBlock() {\r
+       DemodBufferLen = 0x00;\r
+       \r
+       // According to datasheet. Always: RF/64, not inverted, Manchester\r
+       return (bool) ASKDemod("64 0 1", FALSE, FALSE, 1);\r
+}\r
+\r
 int CmdT55xxDetect(const char *Cmd){\r
+       bool errors = FALSE;\r
+       bool useGB = FALSE;\r
+       bool usepwd = FALSE;\r
+       uint32_t password = 0;\r
+       uint8_t cmdp = 0;\r
 \r
-       char cmdp = param_getchar(Cmd, 0);\r
-       if (strlen(Cmd) > 1 || cmdp == 'h' || cmdp == 'H')\r
-               return usage_t55xx_detect();\r
+       while(param_getchar(Cmd, cmdp) != 0x00 && !errors) {\r
+               switch(param_getchar(Cmd, cmdp)) {\r
+               case 'h':\r
+               case 'H':\r
+                       return usage_t55xx_detect();\r
+               case 'p':\r
+               case 'P':\r
+                       password = param_get32ex(Cmd, cmdp+1, 0, 16);\r
+                       usepwd = TRUE;\r
+                       cmdp += 2;\r
+                       break;\r
+               case '1':\r
+                       // use Graphbuffer data\r
+                       useGB = TRUE;\r
+                       cmdp++;\r
+                       break;\r
+               default:\r
+                       PrintAndLog("Unknown parameter '%c'", param_getchar(Cmd, cmdp));\r
+                       errors = true;\r
+                       break;\r
+               }\r
+       }\r
+       if (errors) return usage_t55xx_detect();\r
+       \r
+       if ( !useGB) {\r
+               if ( !AquireData(T55x7_PAGE0, T55x7_CONFIGURATION_BLOCK, usepwd, password) )\r
+                       return 0;\r
+       }\r
        \r
-       if (strlen(Cmd)==0)\r
-               AquireData( CONFIGURATION_BLOCK );\r
-\r
        if ( !tryDetectModulation() )\r
                PrintAndLog("Could not detect modulation automatically. Try setting it manually with \'lf t55xx config\'");\r
 \r
-       return 0;\r
+       return 1;\r
 }\r
 \r
 // detect configuration?\r
 bool tryDetectModulation(){\r
-       char cmdStr[8] = {0};\r
        uint8_t hits = 0;\r
        t55xx_conf_block_t tests[15];\r
        int bitRate=0;\r
        uint8_t fc1 = 0, fc2 = 0, clk=0;\r
-       save_restoreGB(1);\r
        if (GetFskClock("", FALSE, FALSE)){ \r
                fskClocks(&fc1, &fc2, &clk, FALSE);\r
-               sprintf(cmdStr,"%d", clk/2);\r
-               CmdLtrim(cmdStr);\r
-               if ( FSKrawDemod("0 0", FALSE) && test(DEMOD_FSK, &tests[hits].offset, &bitRate)){\r
+               if ( FSKrawDemod("0 0", FALSE) && test(DEMOD_FSK, &tests[hits].offset, &bitRate, clk, &tests[hits].Q5)) {\r
                        tests[hits].modulation = DEMOD_FSK;\r
                        if (fc1==8 && fc2 == 5)\r
                                tests[hits].modulation = DEMOD_FSK1a;\r
-                       else if (fc1==10 && fc2 == 8)\r
+                       else if (fc1==10 && fc2 == 8)\r
                                tests[hits].modulation = DEMOD_FSK2;\r
                        tests[hits].bitrate = bitRate;\r
                        tests[hits].inverted = FALSE;\r
                        tests[hits].block0 = PackBits(tests[hits].offset, 32, DemodBuffer);\r
+                       tests[hits].ST = FALSE;\r
                        ++hits;\r
                }\r
-               if ( FSKrawDemod("0 1", FALSE) && test(DEMOD_FSK, &tests[hits].offset, &bitRate)) {\r
+               if ( FSKrawDemod("0 1", FALSE) && test(DEMOD_FSK, &tests[hits].offset, &bitRate, clk, &tests[hits].Q5)) {\r
                        tests[hits].modulation = DEMOD_FSK;\r
                        if (fc1 == 8 && fc2 == 5)\r
                                tests[hits].modulation = DEMOD_FSK1;\r
                        else if (fc1 == 10 && fc2 == 8)\r
                                tests[hits].modulation = DEMOD_FSK2a;\r
-\r
                        tests[hits].bitrate = bitRate;\r
                        tests[hits].inverted = TRUE;\r
                        tests[hits].block0 = PackBits(tests[hits].offset, 32, DemodBuffer);\r
+                       tests[hits].ST = FALSE;\r
                        ++hits;\r
                }\r
        } else {\r
                clk = GetAskClock("", FALSE, FALSE);\r
                if (clk>0) {\r
-                       sprintf(cmdStr,"%d", clk/2);\r
-                       CmdLtrim(cmdStr);\r
-                       if ( ASKDemod("0 0 0", FALSE, FALSE, 1) && test(DEMOD_ASK, &tests[hits].offset, &bitRate)) {\r
+                       tests[hits].ST = TRUE;\r
+                       if ( ASKDemod_ext("0 0 1", FALSE, FALSE, 1, &tests[hits].ST) && test(DEMOD_ASK, &tests[hits].offset, &bitRate, clk, &tests[hits].Q5)) {\r
                                tests[hits].modulation = DEMOD_ASK;\r
                                tests[hits].bitrate = bitRate;\r
                                tests[hits].inverted = FALSE;\r
                                tests[hits].block0 = PackBits(tests[hits].offset, 32, DemodBuffer);\r
                                ++hits;\r
                        }\r
-                       if ( ASKDemod("0 1 0", FALSE, FALSE, 1)  && test(DEMOD_ASK, &tests[hits].offset, &bitRate)) {\r
+                       tests[hits].ST = TRUE;\r
+                       if ( ASKDemod_ext("0 1 1", FALSE, FALSE, 1, &tests[hits].ST)  && test(DEMOD_ASK, &tests[hits].offset, &bitRate, clk, &tests[hits].Q5)) {\r
                                tests[hits].modulation = DEMOD_ASK;\r
                                tests[hits].bitrate = bitRate;\r
                                tests[hits].inverted = TRUE;\r
                                tests[hits].block0 = PackBits(tests[hits].offset, 32, DemodBuffer);\r
                                ++hits;\r
                        }\r
-                       if ( ASKbiphaseDemod("0 0 0 0", FALSE) && test(DEMOD_BI, &tests[hits].offset, &bitRate) ) {\r
+                       if ( ASKbiphaseDemod("0 0 0 2", FALSE) && test(DEMOD_BI, &tests[hits].offset, &bitRate, clk, &tests[hits].Q5) ) {\r
                                tests[hits].modulation = DEMOD_BI;\r
                                tests[hits].bitrate = bitRate;\r
                                tests[hits].inverted = FALSE;\r
                                tests[hits].block0 = PackBits(tests[hits].offset, 32, DemodBuffer);\r
+                               tests[hits].ST = FALSE;\r
                                ++hits;\r
                        }\r
-                       if ( ASKbiphaseDemod("0 0 1 0", FALSE) && test(DEMOD_BIa, &tests[hits].offset, &bitRate) ) {\r
+                       if ( ASKbiphaseDemod("0 0 1 2", FALSE) && test(DEMOD_BIa, &tests[hits].offset, &bitRate, clk, &tests[hits].Q5) ) {\r
                                tests[hits].modulation = DEMOD_BIa;\r
                                tests[hits].bitrate = bitRate;\r
                                tests[hits].inverted = TRUE;\r
                                tests[hits].block0 = PackBits(tests[hits].offset, 32, DemodBuffer);\r
+                               tests[hits].ST = FALSE;\r
                                ++hits;\r
                        }\r
                }\r
                //undo trim from ask\r
-               save_restoreGB(0);\r
+               //save_restoreGB(0);\r
                clk = GetNrzClock("", FALSE, FALSE);\r
                if (clk>0) {\r
-                       sprintf(cmdStr,"%d", clk/2);\r
-                       CmdLtrim(cmdStr);\r
-                       if ( NRZrawDemod("0 0 1", FALSE)  && test(DEMOD_NRZ, &tests[hits].offset, &bitRate)) {\r
+                       if ( NRZrawDemod("0 0 1", FALSE)  && test(DEMOD_NRZ, &tests[hits].offset, &bitRate, clk, &tests[hits].Q5)) {\r
                                tests[hits].modulation = DEMOD_NRZ;\r
                                tests[hits].bitrate = bitRate;\r
                                tests[hits].inverted = FALSE;\r
                                tests[hits].block0 = PackBits(tests[hits].offset, 32, DemodBuffer);\r
+                               tests[hits].ST = FALSE;\r
                                ++hits;\r
                        }\r
 \r
-                       if ( NRZrawDemod("0 1 1", FALSE)  && test(DEMOD_NRZ, &tests[hits].offset, &bitRate)) {\r
+                       if ( NRZrawDemod("0 1 1", FALSE)  && test(DEMOD_NRZ, &tests[hits].offset, &bitRate, clk, &tests[hits].Q5)) {\r
                                tests[hits].modulation = DEMOD_NRZ;\r
                                tests[hits].bitrate = bitRate;\r
                                tests[hits].inverted = TRUE;\r
                                tests[hits].block0 = PackBits(tests[hits].offset, 32, DemodBuffer);\r
+                               tests[hits].ST = FALSE;\r
                                ++hits;\r
                        }\r
                }\r
                \r
-               //undo trim from nrz\r
-               save_restoreGB(0);\r
+               // allow undo\r
+               // skip first 160 samples to allow antenna to settle in (psk gets inverted occasionally otherwise)\r
+               save_restoreGB(1);\r
+               CmdLtrim("160");\r
                clk = GetPskClock("", FALSE, FALSE);\r
                if (clk>0) {\r
-                       PrintAndLog("clk %d",clk);\r
-                       sprintf(cmdStr,"%d", clk/2);\r
-                       CmdLtrim(cmdStr);       \r
-                       if ( PSKDemod("0 0 1", FALSE) && test(DEMOD_PSK1, &tests[hits].offset, &bitRate)) {\r
+                       if ( PSKDemod("0 0 6", FALSE) && test(DEMOD_PSK1, &tests[hits].offset, &bitRate, clk, &tests[hits].Q5)) {\r
                                tests[hits].modulation = DEMOD_PSK1;\r
                                tests[hits].bitrate = bitRate;\r
                                tests[hits].inverted = FALSE;\r
                                tests[hits].block0 = PackBits(tests[hits].offset, 32, DemodBuffer);\r
+                               tests[hits].ST = FALSE;\r
                                ++hits;\r
                        }\r
-                       if ( PSKDemod("0 1 1", FALSE) && test(DEMOD_PSK1, &tests[hits].offset, &bitRate)) {\r
+                       if ( PSKDemod("0 1 6", FALSE) && test(DEMOD_PSK1, &tests[hits].offset, &bitRate, clk, &tests[hits].Q5)) {\r
                                tests[hits].modulation = DEMOD_PSK1;\r
                                tests[hits].bitrate = bitRate;\r
                                tests[hits].inverted = TRUE;\r
                                tests[hits].block0 = PackBits(tests[hits].offset, 32, DemodBuffer);\r
+                               tests[hits].ST = FALSE;\r
                                ++hits;\r
                        }\r
                        // PSK2 - needs a call to psk1TOpsk2.\r
-                       if ( PSKDemod("0 0 1", FALSE)) {\r
+                       if ( PSKDemod("0 0 6", FALSE)) {\r
                                psk1TOpsk2(DemodBuffer, DemodBufferLen);\r
-                               if (test(DEMOD_PSK2, &tests[hits].offset, &bitRate)){\r
+                               if (test(DEMOD_PSK2, &tests[hits].offset, &bitRate, clk, &tests[hits].Q5)){\r
                                        tests[hits].modulation = DEMOD_PSK2;\r
                                        tests[hits].bitrate = bitRate;\r
                                        tests[hits].inverted = FALSE;\r
                                        tests[hits].block0 = PackBits(tests[hits].offset, 32, DemodBuffer);\r
+                                       tests[hits].ST = FALSE;\r
                                        ++hits;\r
                                }\r
                        } // inverse waves does not affect this demod\r
                        // PSK3 - needs a call to psk1TOpsk2.\r
-                       if ( PSKDemod("0 0 1", FALSE)) {\r
+                       if ( PSKDemod("0 0 6", FALSE)) {\r
                                psk1TOpsk2(DemodBuffer, DemodBufferLen);\r
-                               if (test(DEMOD_PSK3, &tests[hits].offset, &bitRate)){\r
+                               if (test(DEMOD_PSK3, &tests[hits].offset, &bitRate, clk, &tests[hits].Q5)){\r
                                        tests[hits].modulation = DEMOD_PSK3;\r
                                        tests[hits].bitrate = bitRate;\r
                                        tests[hits].inverted = FALSE;\r
                                        tests[hits].block0 = PackBits(tests[hits].offset, 32, DemodBuffer);\r
+                                       tests[hits].ST = FALSE;\r
                                        ++hits;\r
                                }\r
                        } // inverse waves does not affect this demod\r
                }\r
-       }               \r
+               //undo trim samples\r
+               save_restoreGB(0);\r
+       }       \r
        if ( hits == 1) {\r
                config.modulation = tests[0].modulation;\r
                config.bitrate = tests[0].bitrate;\r
                config.inverted = tests[0].inverted;\r
                config.offset = tests[0].offset;\r
                config.block0 = tests[0].block0;\r
+               config.Q5 = tests[0].Q5;\r
+               config.ST = tests[0].ST;\r
                printConfiguration( config );\r
                return TRUE;\r
        }\r
@@ -490,7 +649,7 @@ bool tryDetectModulation(){
 bool testModulation(uint8_t mode, uint8_t modread){\r
        switch( mode ){\r
                case DEMOD_FSK:\r
-                       if (modread > 3 && modread < 8) return TRUE;\r
+                       if (modread >= DEMOD_FSK1 && modread <= DEMOD_FSK2a) return TRUE;\r
                        break;\r
                case DEMOD_ASK:\r
                        if (modread == DEMOD_ASK) return TRUE;\r
@@ -519,37 +678,28 @@ bool testModulation(uint8_t mode, uint8_t modread){
        return FALSE;\r
 }\r
 \r
-bool testBitRate(uint8_t readRate, uint8_t mod){\r
-       uint8_t expected[8] = {8, 16, 32, 40, 50, 64, 100, 128};\r
-       uint8_t detRate = 0;\r
-       switch( mod ){\r
+bool testQ5Modulation(uint8_t  mode, uint8_t   modread){\r
+       switch( mode ){\r
                case DEMOD_FSK:\r
-               case DEMOD_FSK1:\r
-               case DEMOD_FSK1a:\r
-               case DEMOD_FSK2:\r
-               case DEMOD_FSK2a:\r
-                       detRate = GetFskClock("",FALSE, FALSE); \r
-                       if (expected[readRate] == detRate) \r
-                               return TRUE;\r
+                       if (modread >= 4 && modread <= 5) return TRUE;\r
                        break;\r
                case DEMOD_ASK:\r
-               case DEMOD_BI:\r
-               case DEMOD_BIa:\r
-                       detRate = GetAskClock("",FALSE, FALSE); \r
-                       if (expected[readRate] == detRate) \r
-                               return TRUE;\r
+                       if (modread == 0) return TRUE;\r
                        break;\r
                case DEMOD_PSK1:\r
+                       if (modread == 1) return TRUE;\r
+                       break;\r
                case DEMOD_PSK2:\r
+                       if (modread == 2) return TRUE;\r
+                       break;\r
                case DEMOD_PSK3:\r
-                       detRate = GetPskClock("",FALSE, FALSE); \r
-                       if (expected[readRate] == detRate)\r
-                               return TRUE;\r
+                       if (modread == 3) return TRUE;\r
                        break;\r
                case DEMOD_NRZ:\r
-                       detRate = GetNrzClock("",FALSE, FALSE); \r
-                       if (expected[readRate] == detRate)\r
-                               return TRUE;\r
+                       if (modread == 7) return TRUE;\r
+                       break;\r
+               case DEMOD_BI:\r
+                       if (modread == 6) return TRUE;\r
                        break;\r
                default:\r
                        return FALSE;\r
@@ -557,13 +707,70 @@ bool testBitRate(uint8_t readRate, uint8_t mod){
        return FALSE;\r
 }\r
 \r
-bool test(uint8_t mode, uint8_t *offset, int *fndBitRate){\r
+int convertQ5bitRate(uint8_t bitRateRead) {\r
+       uint8_t expected[] = {8, 16, 32, 40, 50, 64, 100, 128};\r
+       for (int i=0; i<8; i++)\r
+               if (expected[i] == bitRateRead)\r
+                       return i;\r
+\r
+       return -1;\r
+}\r
+\r
+bool testQ5(uint8_t mode, uint8_t *offset, int *fndBitRate, uint8_t    clk){\r
 \r
        if ( DemodBufferLen < 64 ) return FALSE;\r
        uint8_t si = 0;\r
-       for (uint8_t idx = 0; idx < 64; idx++){\r
+       for (uint8_t idx = 28; idx < 64; idx++){\r
                si = idx;\r
-               if ( PackBits(si, 32, DemodBuffer) == 0x00 ) continue;\r
+               if ( PackBits(si, 28, DemodBuffer) == 0x00 ) continue;\r
+\r
+               uint8_t safer     = PackBits(si, 4, DemodBuffer); si += 4;     //master key\r
+               uint8_t resv      = PackBits(si, 8, DemodBuffer); si += 8;\r
+               // 2nibble must be zeroed.\r
+               if (safer != 0x6 && safer != 0x9) continue;\r
+               if ( resv > 0x00) continue;\r
+               //uint8_t       pageSel   = PackBits(si, 1, DemodBuffer); si += 1;\r
+               //uint8_t fastWrite = PackBits(si, 1, DemodBuffer); si += 1;\r
+               si += 1+1;\r
+               int bitRate       = PackBits(si, 6, DemodBuffer)*2 + 2; si += 6;     //bit rate\r
+               if (bitRate > 128 || bitRate < 8) continue;\r
+\r
+               //uint8_t AOR       = PackBits(si, 1, DemodBuffer); si += 1;   \r
+               //uint8_t PWD       = PackBits(si, 1, DemodBuffer); si += 1; \r
+               //uint8_t pskcr     = PackBits(si, 2, DemodBuffer); si += 2;  //could check psk cr\r
+               //uint8_t inverse   = PackBits(si, 1, DemodBuffer); si += 1;\r
+               si += 1+1+2+1;\r
+               uint8_t modread   = PackBits(si, 3, DemodBuffer); si += 3;\r
+               uint8_t maxBlk    = PackBits(si, 3, DemodBuffer); si += 3;\r
+               //uint8_t ST        = PackBits(si, 1, DemodBuffer); si += 1;\r
+               if (maxBlk == 0) continue;\r
+               //test modulation\r
+               if (!testQ5Modulation(mode, modread)) continue;\r
+               if (bitRate != clk) continue;\r
+               *fndBitRate = convertQ5bitRate(bitRate);\r
+               if (*fndBitRate < 0) continue;\r
+               *offset = idx;\r
+\r
+               return TRUE;\r
+       }\r
+       return FALSE;\r
+}\r
+\r
+bool testBitRate(uint8_t readRate, uint8_t clk){\r
+       uint8_t expected[] = {8, 16, 32, 40, 50, 64, 100, 128};\r
+       if (expected[readRate] == clk)\r
+               return true;\r
+\r
+       return false;\r
+}\r
+\r
+bool test(uint8_t mode, uint8_t *offset, int *fndBitRate, uint8_t clk, bool *Q5){\r
+\r
+       if ( DemodBufferLen < 64 ) return FALSE;\r
+       uint8_t si = 0;\r
+       for (uint8_t idx = 28; idx < 64; idx++){\r
+               si = idx;\r
+               if ( PackBits(si, 28, DemodBuffer) == 0x00 ) continue;\r
 \r
                uint8_t safer    = PackBits(si, 4, DemodBuffer); si += 4;     //master key\r
                uint8_t resv     = PackBits(si, 4, DemodBuffer); si += 4;     //was 7 & +=7+3 //should be only 4 bits if extended mode\r
@@ -572,25 +779,30 @@ bool test(uint8_t mode, uint8_t *offset, int *fndBitRate){
                if ( resv > 0x00) continue;\r
 \r
                uint8_t xtRate   = PackBits(si, 3, DemodBuffer); si += 3;     //extended mode part of rate\r
-               int bitRate  = PackBits(si, 3, DemodBuffer); si += 3;     //bit rate\r
+               int bitRate      = PackBits(si, 3, DemodBuffer); si += 3;     //bit rate\r
                if (bitRate > 7) continue;\r
                uint8_t extend   = PackBits(si, 1, DemodBuffer); si += 1;     //bit 15 extended mode\r
                uint8_t modread  = PackBits(si, 5, DemodBuffer); si += 5+2+1; \r
                //uint8_t pskcr   = PackBits(si, 2, DemodBuffer); si += 2+1;  //could check psk cr\r
-               uint8_t nml01    = PackBits(si, 1, DemodBuffer); si += 1+5;   //bit 24, 30, 31 could be tested for 0 if not extended mode\r
-               uint8_t nml02    = PackBits(si, 2, DemodBuffer); si += 2;\r
+               //uint8_t nml01    = PackBits(si, 1, DemodBuffer); si += 1+5;   //bit 24, 30, 31 could be tested for 0 if not extended mode\r
+               //uint8_t nml02    = PackBits(si, 2, DemodBuffer); si += 2;\r
                \r
                //if extended mode\r
                bool extMode =( (safer == 0x6 || safer == 0x9) && extend) ? TRUE : FALSE;\r
 \r
                if (!extMode){\r
-                       if (nml01 || nml02 || xtRate) continue;\r
+                       if (xtRate) continue;  //nml01 || nml02 ||  caused issues on noralys tags\r
                }\r
                //test modulation\r
                if (!testModulation(mode, modread)) continue;\r
-               if (!testBitRate(bitRate, mode)) continue;\r
+               if (!testBitRate(bitRate, clk)) continue;\r
                *fndBitRate = bitRate;\r
                *offset = idx;\r
+               *Q5 = FALSE;\r
+               return TRUE;\r
+       }\r
+       if (testQ5(mode, offset, fndBitRate, clk)) {\r
+               *Q5 = TRUE;\r
                return TRUE;\r
        }\r
        return FALSE;\r
@@ -614,14 +826,15 @@ void printT55xxBlock(const char *blockNum){
                bits[i - config.offset]=DemodBuffer[i];\r
 \r
        blockData = PackBits(0, 32, bits);\r
-       PrintAndLog("[%s] 0x%08X  %s", blockNum, blockData, sprint_bin(bits,32));\r
+\r
+       PrintAndLog("  %s | %08X | %s", blockNum, blockData, sprint_bin(bits,32));\r
 }\r
 \r
 int special(const char *Cmd) {\r
        uint32_t blockData = 0;\r
        uint8_t bits[32] = {0x00};\r
 \r
-       PrintAndLog("[OFFSET] [DATA] [BINARY]");\r
+       PrintAndLog("OFFSET | DATA       | BINARY");\r
        PrintAndLog("----------------------------------------------------");\r
        int i,j = 0;\r
        for (; j < 64; ++j){\r
@@ -631,120 +844,235 @@ int special(const char *Cmd) {
        \r
                blockData = PackBits(0, 32, bits);\r
                \r
-               PrintAndLog("[%02d] 0x%08X  %s",j , blockData, sprint_bin(bits,32));    \r
+               PrintAndLog("    %02d | 0x%08X | %s",j , blockData, sprint_bin(bits,32));       \r
        }\r
        return 0;\r
 }\r
 \r
-void printConfiguration( t55xx_conf_block_t b){\r
+int printConfiguration( t55xx_conf_block_t b){\r
+       PrintAndLog("Chip Type  : %s", (b.Q5) ? "T5555(Q5)" : "T55x7");\r
        PrintAndLog("Modulation : %s", GetSelectedModulationStr(b.modulation) );\r
        PrintAndLog("Bit Rate   : %s", GetBitRateStr(b.bitrate) );\r
        PrintAndLog("Inverted   : %s", (b.inverted) ? "Yes" : "No" );\r
        PrintAndLog("Offset     : %d", b.offset);\r
+       PrintAndLog("Seq. Term. : %s", (b.ST) ? "Yes" : "No" );\r
        PrintAndLog("Block0     : 0x%08X", b.block0);\r
        PrintAndLog("");\r
+       return 0;\r
 }\r
 \r
-int CmdT55xxWriteBlock(const char *Cmd)\r
-{\r
-       int block = 8; //default to invalid block\r
-       int data = 0xFFFFFFFF; //default to blank Block \r
-       int password = 0xFFFFFFFF; //default to blank Block 7\r
-       \r
-       char cmdp = param_getchar(Cmd, 0);\r
-       if (cmdp == 'h' || cmdp == 'H') {\r
-               usage_t55xx_write();\r
-               return 0;\r
+int CmdT55xxWakeUp(const char *Cmd) {\r
+       uint32_t password = 0;\r
+       uint8_t cmdp = 0;\r
+       bool errors = true;\r
+       while(param_getchar(Cmd, cmdp) != 0x00) {\r
+               switch(param_getchar(Cmd, cmdp)) {\r
+               case 'h':\r
+               case 'H':\r
+                       return usage_t55xx_wakup();\r
+               case 'p':\r
+               case 'P':\r
+                       password = param_get32ex(Cmd, cmdp+1, 0xFFFFFFFF, 16);\r
+                       cmdp += 2;\r
+                       errors = false;\r
+                       break;\r
+               default:\r
+                       PrintAndLog("Unknown parameter '%c'", param_getchar(Cmd, cmdp));\r
+                       errors = true;\r
+                       break;\r
+               }\r
        }\r
-  \r
-       int res = sscanf(Cmd, "%d %x %x",&block, &data, &password);\r
-       \r
-       if ( res < 2 || res > 3) {\r
-               usage_t55xx_write();\r
-               return 1;\r
+       if (errors) return usage_t55xx_wakup();\r
+\r
+       UsbCommand c = {CMD_T55XX_WAKEUP, {password, 0, 0}};\r
+       clearCommandBuffer();\r
+       SendCommand(&c);\r
+       PrintAndLog("Wake up command sent. Try read now");\r
+       return 0;\r
+}\r
+\r
+int CmdT55xxWriteBlock(const char *Cmd) {\r
+       uint8_t block = 0xFF; //default to invalid block\r
+       uint32_t data = 0; //default to blank Block \r
+       uint32_t password = 0; //default to blank Block 7\r
+       bool usepwd = false;\r
+       bool page1 = false;     \r
+       bool gotdata = false;\r
+       bool errors = false;\r
+       uint8_t cmdp = 0;\r
+       while(param_getchar(Cmd, cmdp) != 0x00 && !errors) {\r
+               switch(param_getchar(Cmd, cmdp)) {\r
+               case 'h':\r
+               case 'H':\r
+                       return usage_t55xx_write();\r
+               case 'b':\r
+               case 'B':\r
+                       errors |= param_getdec(Cmd, cmdp+1, &block);\r
+                       cmdp += 2;\r
+                       break;\r
+               case 'd':\r
+               case 'D':\r
+                       data = param_get32ex(Cmd, cmdp+1, 0, 16);\r
+                       gotdata = true;\r
+                       cmdp += 2;\r
+                       break;\r
+               case 'p':\r
+               case 'P':\r
+                       password = param_get32ex(Cmd, cmdp+1, 0, 16);\r
+                       usepwd = true;\r
+                       cmdp += 2;\r
+                       break;\r
+               case '1':\r
+                       page1 = true;\r
+                       cmdp++;\r
+                       break;\r
+               default:\r
+                       PrintAndLog("Unknown parameter '%c'", param_getchar(Cmd, cmdp));\r
+                       errors = true;\r
+                       break;\r
+               }\r
        }\r
+       if (errors || !gotdata) return usage_t55xx_write();\r
 \r
        if (block > 7) {\r
                PrintAndLog("Block number must be between 0 and 7");\r
-               return 1;\r
+               return 0;\r
        }\r
        \r
        UsbCommand c = {CMD_T55XX_WRITE_BLOCK, {data, block, 0}};\r
-       c.d.asBytes[0] = 0x0; \r
+       UsbCommand resp;\r
+       c.d.asBytes[0] = (page1) ? 0x2 : 0; \r
 \r
-       PrintAndLog("Writing to block: %d  data  : 0x%08X", block, data);\r
+       char pwdStr[16] = {0};\r
+       snprintf(pwdStr, sizeof(pwdStr), "pwd: 0x%08X", password);\r
+\r
+       PrintAndLog("Writing page %d  block: %02d  data: 0x%08X %s", page1, block, data,  (usepwd) ? pwdStr : "" );\r
 \r
        //Password mode\r
-       if (res == 3) {\r
+       if (usepwd) {\r
                c.arg[2] = password;\r
-               c.d.asBytes[0] = 0x1; \r
-               PrintAndLog("pwd   : 0x%08X", password);\r
+               c.d.asBytes[0] |= 0x1; \r
        }\r
+       clearCommandBuffer();\r
        SendCommand(&c);\r
-       return 0;\r
+       if (!WaitForResponseTimeout(CMD_ACK, &resp, 1000)){\r
+               PrintAndLog("Error occurred, device did not ACK write operation. (May be due to old firmware)");\r
+               return 0;\r
+       }\r
+       return 1;\r
 }\r
 \r
-int CmdT55xxReadTrace(const char *Cmd)\r
-{\r
+int CmdT55xxReadTrace(const char *Cmd) {\r
        char cmdp = param_getchar(Cmd, 0);\r
-       \r
+       bool pwdmode = false;\r
+       uint32_t password = 0;\r
        if (strlen(Cmd) > 1 || cmdp == 'h' || cmdp == 'H') \r
                return usage_t55xx_trace();\r
 \r
        if (strlen(Cmd)==0)\r
-               AquireData( TRACE_BLOCK );\r
-       \r
-       if (!DecodeT55xxBlock()) return 1;\r
+               if ( !AquireData( T55x7_PAGE1, REGULAR_READ_MODE_BLOCK, pwdmode, password ) )\r
+                       return 0;\r
+\r
+       if ( config.Q5 ) {\r
+               if (!DecodeT5555TraceBlock()) return 0;\r
+       } else {\r
+               if (!DecodeT55xxBlock()) return 0;\r
+       }\r
+\r
+       if ( !DemodBufferLen ) return 0;\r
 \r
-       if ( !DemodBufferLen) return 1;\r
-       \r
        RepaintGraphWindow();\r
-       uint8_t repeat = 0;\r
-       if (config.offset > 5) \r
-               repeat = 32;\r
+       uint8_t repeat = (config.offset > 5) ? 32 : 0;\r
+\r
        uint8_t si = config.offset+repeat;\r
-       uint32_t bl0     = PackBits(si, 32, DemodBuffer);\r
-       uint32_t bl1     = PackBits(si+32, 32, DemodBuffer);\r
-       \r
-       uint32_t acl     = PackBits(si, 8,  DemodBuffer); si += 8;\r
-       uint32_t mfc     = PackBits(si, 8,  DemodBuffer); si += 8;\r
-       uint32_t cid     = PackBits(si, 5,  DemodBuffer); si += 5;\r
-       uint32_t icr     = PackBits(si, 3,  DemodBuffer); si += 3;\r
-       uint32_t year    = PackBits(si, 4,  DemodBuffer); si += 4;\r
-       uint32_t quarter = PackBits(si, 2,  DemodBuffer); si += 2;\r
-       uint32_t lotid   = PackBits(si, 14, DemodBuffer); si += 14;\r
-       uint32_t wafer   = PackBits(si, 5,  DemodBuffer); si += 5;\r
-       uint32_t dw      = PackBits(si, 15, DemodBuffer); \r
-       \r
-       time_t t = time(NULL);\r
-       struct tm tm = *localtime(&t);\r
-       if ( year > tm.tm_year-110)\r
-               year += 2000;\r
-       else\r
-               year += 2010;\r
+       uint32_t bl1     = PackBits(si, 32, DemodBuffer);\r
+       uint32_t bl2     = PackBits(si+32, 32, DemodBuffer);\r
+\r
+       if (config.Q5) {\r
+               uint32_t hdr = PackBits(si, 9,  DemodBuffer); si += 9;\r
+\r
+               if (hdr != 0x1FF) {\r
+                       PrintAndLog("Invalid Q5 Trace data header (expected 0x1FF, found %X)", hdr);\r
+                       return 0;\r
+               }\r
+\r
+               t5555_tracedata_t data = {.bl1 = bl1, .bl2 = bl2, .icr = 0, .lotidc = '?', .lotid = 0, .wafer = 0, .dw =0};\r
 \r
-       if ( acl != 0xE0 ) {\r
-               PrintAndLog("The modulation is most likely wrong since the ACL is not 0xE0. ");\r
-               return 1;\r
+               data.icr     = PackBits(si, 2,  DemodBuffer); si += 2;\r
+               data.lotidc  = 'Z' - PackBits(si, 2,  DemodBuffer); si += 3;\r
+\r
+               data.lotid   = PackBits(si, 4,  DemodBuffer); si += 5;\r
+               data.lotid <<= 4;\r
+               data.lotid  |= PackBits(si, 4,  DemodBuffer); si += 5;\r
+               data.lotid <<= 4;\r
+               data.lotid  |= PackBits(si, 4,  DemodBuffer); si += 5;\r
+               data.lotid <<= 4;\r
+               data.lotid  |= PackBits(si, 4,  DemodBuffer); si += 5;\r
+               data.lotid <<= 1;\r
+               data.lotid  |= PackBits(si, 1,  DemodBuffer); si += 1;\r
+\r
+               data.wafer   = PackBits(si, 3,  DemodBuffer); si += 4;\r
+               data.wafer <<= 2;\r
+               data.wafer  |= PackBits(si, 2,  DemodBuffer); si += 2;\r
+\r
+               data.dw      = PackBits(si, 2,  DemodBuffer); si += 3;\r
+               data.dw    <<= 4;\r
+               data.dw     |= PackBits(si, 4,  DemodBuffer); si += 5;\r
+               data.dw    <<= 4;\r
+               data.dw     |= PackBits(si, 4,  DemodBuffer); si += 5;\r
+               data.dw    <<= 4;\r
+               data.dw     |= PackBits(si, 4,  DemodBuffer); si += 5;\r
+\r
+               printT5555Trace(data, repeat);\r
+\r
+       } else {\r
+\r
+               t55x7_tracedata_t data = {.bl1 = bl1, .bl2 = bl2, .acl = 0, .mfc = 0, .cid = 0, .year = 0, .quarter = 0, .icr = 0,  .lotid = 0, .wafer = 0, .dw = 0};\r
+               \r
+               data.acl = PackBits(si, 8,  DemodBuffer); si += 8;\r
+               if ( data.acl != 0xE0 ) {\r
+                       PrintAndLog("The modulation is most likely wrong since the ACL is not 0xE0. ");\r
+                       return 0;\r
+               }\r
+\r
+               data.mfc     = PackBits(si, 8,  DemodBuffer); si += 8;\r
+               data.cid     = PackBits(si, 5,  DemodBuffer); si += 5;\r
+               data.icr     = PackBits(si, 3,  DemodBuffer); si += 3;\r
+               data.year    = PackBits(si, 4,  DemodBuffer); si += 4;\r
+               data.quarter = PackBits(si, 2,  DemodBuffer); si += 2;\r
+               data.lotid   = PackBits(si, 14, DemodBuffer); si += 14;\r
+               data.wafer   = PackBits(si, 5,  DemodBuffer); si += 5;\r
+               data.dw      = PackBits(si, 15, DemodBuffer); \r
+\r
+               time_t t = time(NULL);\r
+               struct tm tm = *localtime(&t);\r
+               if ( data.year > tm.tm_year-110)\r
+                       data.year += 2000;\r
+               else\r
+                       data.year += 2010;\r
+\r
+               printT55x7Trace(data, repeat);\r
        }\r
+       return 0;\r
+}\r
 \r
-       PrintAndLog("");\r
-       PrintAndLog("-- T55xx Trace Information ----------------------------------");\r
+void printT55x7Trace( t55x7_tracedata_t data, uint8_t repeat ){\r
+       PrintAndLog("-- T55x7 Trace Information ----------------------------------");\r
        PrintAndLog("-------------------------------------------------------------");\r
-       PrintAndLog(" ACL Allocation class (ISO/IEC 15963-1)  : 0x%02X (%d)", acl, acl);\r
-       PrintAndLog(" MFC Manufacturer ID (ISO/IEC 7816-6)    : 0x%02X (%d) - %s", mfc, mfc, getTagInfo(mfc));\r
-       PrintAndLog(" CID                                     : 0x%02X (%d) - %s", cid, cid, GetModelStrFromCID(cid));\r
-       PrintAndLog(" ICR IC Revision                         : %d",icr );\r
+       PrintAndLog(" ACL Allocation class (ISO/IEC 15963-1)  : 0x%02X (%d)", data.acl, data.acl);\r
+       PrintAndLog(" MFC Manufacturer ID (ISO/IEC 7816-6)    : 0x%02X (%d) - %s", data.mfc, data.mfc, getTagInfo(data.mfc));\r
+       PrintAndLog(" CID                                     : 0x%02X (%d) - %s", data.cid, data.cid, GetModelStrFromCID(data.cid));\r
+       PrintAndLog(" ICR IC Revision                         : %d", data.icr );\r
        PrintAndLog(" Manufactured");\r
-       PrintAndLog("     Year/Quarter : %d/%d",year, quarter);\r
-       PrintAndLog("     Lot ID       : %d", lotid );\r
-       PrintAndLog("     Wafer number : %d", wafer);\r
-       PrintAndLog("     Die Number   : %d", dw);\r
+       PrintAndLog("     Year/Quarter : %d/%d", data.year, data.quarter);\r
+       PrintAndLog("     Lot ID       : %d", data.lotid );\r
+       PrintAndLog("     Wafer number : %d", data.wafer);\r
+       PrintAndLog("     Die Number   : %d", data.dw);\r
        PrintAndLog("-------------------------------------------------------------");\r
        PrintAndLog(" Raw Data - Page 1");\r
-       PrintAndLog("     Block 0  : 0x%08X  %s", bl0, sprint_bin(DemodBuffer+config.offset+repeat,32) );\r
-       PrintAndLog("     Block 1  : 0x%08X  %s", bl1, sprint_bin(DemodBuffer+config.offset+repeat+32,32) );\r
-       PrintAndLog("-------------------------------------------------------------");\r
+       PrintAndLog("     Block 1  : 0x%08X  %s", data.bl1, sprint_bin(DemodBuffer+config.offset+repeat,32) );\r
+       PrintAndLog("     Block 2  : 0x%08X  %s", data.bl2, sprint_bin(DemodBuffer+config.offset+repeat+32,32) );\r
+       PrintAndLog("-------------------------------------------------------------");   \r
 \r
        /*\r
        TRACE - BLOCK O\r
@@ -762,26 +1090,56 @@ int CmdT55xxReadTrace(const char *Cmd)
                13-17   Wafer number\r
                18-32   DW,  die number sequential\r
        */\r
+}\r
+\r
+void printT5555Trace( t5555_tracedata_t data, uint8_t repeat ){\r
+       PrintAndLog("-- T5555 (Q5) Trace Information -----------------------------");\r
+       PrintAndLog("-------------------------------------------------------------");\r
+       PrintAndLog(" ICR IC Revision  : %d", data.icr );       \r
+       PrintAndLog("     Lot          : %c%d", data.lotidc, data.lotid);\r
+       PrintAndLog("     Wafer number : %d", data.wafer);\r
+       PrintAndLog("     Die Number   : %d", data.dw);\r
+       PrintAndLog("-------------------------------------------------------------");\r
+       PrintAndLog(" Raw Data - Page 1");\r
+       PrintAndLog("     Block 1  : 0x%08X  %s", data.bl1, sprint_bin(DemodBuffer+config.offset+repeat,32) );\r
+       PrintAndLog("     Block 2  : 0x%08X  %s", data.bl2, sprint_bin(DemodBuffer+config.offset+repeat+32,32) );\r
        \r
-  return 0;\r
+       /*\r
+               ** Q5 **\r
+               TRACE - BLOCK O and BLOCK1\r
+               Bits    Definition                              HEX\r
+               1-9             Header                  0x1FF\r
+               10-11 IC Revision\r
+               12-13 Lot ID char\r
+               15-35 Lot ID (NB parity)\r
+               36-41 Wafer number (NB parity)\r
+               42-58 DW, die number sequential (NB parity)\r
+               60-63 Parity bits\r
+               64    Always zero\r
+       */\r
 }\r
 \r
+//need to add Q5 info...\r
 int CmdT55xxInfo(const char *Cmd){\r
        /*\r
                Page 0 Block 0 Configuration data.\r
                Normal mode\r
                Extended mode\r
        */\r
+       bool pwdmode = false;\r
+       uint32_t password = 0;\r
        char cmdp = param_getchar(Cmd, 0);\r
 \r
        if (strlen(Cmd) > 1 || cmdp == 'h' || cmdp == 'H')\r
                return usage_t55xx_info();\r
        \r
        if (strlen(Cmd)==0)\r
-               AquireData( CONFIGURATION_BLOCK );\r
+               if ( !AquireData( T55x7_PAGE0, T55x7_CONFIGURATION_BLOCK, pwdmode, password ) )\r
+                       return 1;\r
 \r
        if (!DecodeT55xxBlock()) return 1;\r
 \r
+       // too little space to start with\r
        if ( DemodBufferLen < 32) return 1;\r
 \r
        uint8_t si = config.offset;\r
@@ -801,9 +1159,10 @@ int CmdT55xxInfo(const char *Cmd){
        uint32_t fw       = PackBits(si, 1, DemodBuffer); si += 1;\r
        uint32_t inv      = PackBits(si, 1, DemodBuffer); si += 1;      \r
        uint32_t por      = PackBits(si, 1, DemodBuffer); si += 1;\r
-               \r
+       \r
+       if (config.Q5) PrintAndLog("*** Warning *** Config Info read off a Q5 will not display as expected");\r
        PrintAndLog("");\r
-       PrintAndLog("-- T55xx Configuration & Tag Information --------------------");\r
+       PrintAndLog("-- T55x7 Configuration & Tag Information --------------------");\r
        PrintAndLog("-------------------------------------------------------------");\r
        PrintAndLog(" Safer key                 : %s", GetSaferStr(safer));\r
        PrintAndLog(" reserved                  : %d", resv);\r
@@ -829,106 +1188,69 @@ int CmdT55xxInfo(const char *Cmd){
 \r
 int CmdT55xxDump(const char *Cmd){\r
 \r
-       char s[20] = {0x00};\r
-       uint8_t pwd[4] = {0x00};\r
-\r
+       uint32_t password = 0;\r
        char cmdp = param_getchar(Cmd, 0);\r
-       if ( cmdp == 'h' || cmdp == 'H') {\r
-               usage_t55xx_dump();\r
-               return 0;\r
-       }\r
-\r
-       bool hasPwd = ( strlen(Cmd) > 0);       \r
-       if ( hasPwd ){\r
-               if (param_gethex(Cmd, 0, pwd, 8)) {\r
-                       PrintAndLog("password must include 8 HEX symbols");\r
-                       return 1;\r
-               }\r
+       bool override = false;\r
+       if ( cmdp == 'h' || cmdp == 'H') return usage_t55xx_dump();\r
+\r
+       bool usepwd = ( strlen(Cmd) > 0);       \r
+       if ( usepwd ){\r
+               password = param_get32ex(Cmd, 0, 0, 16);\r
+               if (param_getchar(Cmd, 1) =='o' )\r
+                       override = true;\r
        }\r
        \r
-       for ( int i = 0; i <8; ++i){\r
-               memset(s,0,sizeof(s));\r
-               if ( hasPwd ) {\r
-                       sprintf(s,"%d %02x%02x%02x%02x", i, pwd[0],pwd[1],pwd[2],pwd[3]);\r
-               } else {\r
-                       sprintf(s,"%d", i);\r
-               }\r
-               CmdT55xxReadBlock(s);\r
-       }\r
-       return 0;\r
-}\r
+       printT5xxHeader(0);\r
+       for ( uint8_t i = 0; i <8; ++i)\r
+               T55xxReadBlock(i, 0, usepwd, override, password);\r
 \r
-int AquireData( uint8_t block ){\r
+       printT5xxHeader(1);\r
+       for ( uint8_t   i = 0; i<4; i++)\r
+               T55xxReadBlock(i, 1, usepwd, override, password);               \r
 \r
-       UsbCommand c;\r
-       \r
-       if ( block == CONFIGURATION_BLOCK ) \r
-               c.cmd = CMD_T55XX_READ_BLOCK;\r
-       else if (block == TRACE_BLOCK )\r
-               c.cmd = CMD_T55XX_READ_TRACE;\r
-               \r
-       c.arg[0] = 0x00;\r
-       c.arg[1] = 0x00;\r
-       c.arg[2] = 0x00;\r
-       c.d.asBytes[0] = 0x0; \r
+       return 1;\r
+}\r
 \r
-       //Password mode\r
-       // if ( res == 2 ) {\r
-               // c.arg[2] = password;\r
-               // c.d.asBytes[0] = 0x1; \r
-       // }\r
+int AquireData( uint8_t page, uint8_t block, bool pwdmode, uint32_t password ){\r
+       // arg0 bitmodes:\r
+       // bit0 = pwdmode\r
+       // bit1 = page to read from\r
+       uint8_t arg0 = (page<<1) | pwdmode;\r
+       UsbCommand c = {CMD_T55XX_READ_BLOCK, {arg0, block, password}};\r
 \r
+       clearCommandBuffer();\r
        SendCommand(&c);\r
        if ( !WaitForResponseTimeout(CMD_ACK,NULL,2500) ) {\r
                PrintAndLog("command execution time out");\r
-               return 1;\r
+               return 0;\r
        }\r
 \r
        uint8_t got[12000];\r
        GetFromBigBuf(got,sizeof(got),0);\r
        WaitForResponse(CMD_ACK,NULL);\r
-       setGraphBuf(got, 12000);\r
-       return 0;\r
+       setGraphBuf(got, sizeof(got));\r
+       return 1;\r
 }\r
 \r
-char * GetBitRateStr(uint32_t id){\r
-       static char buf[25];\r
+char * GetBitRateStr(uint32_t id) {\r
+       static char buf[25];\r
 \r
        char *retStr = buf;\r
-               switch (id){\r
-               case 0: \r
-                       snprintf(retStr,sizeof(buf),"%d - RF/8",id);\r
-                       break;\r
-               case 1:\r
-                       snprintf(retStr,sizeof(buf),"%d - RF/16",id);\r
-                       break;\r
-               case 2:         \r
-                       snprintf(retStr,sizeof(buf),"%d - RF/32",id);\r
-                       break;\r
-               case 3:\r
-                       snprintf(retStr,sizeof(buf),"%d - RF/40",id);\r
-                       break;\r
-               case 4:\r
-                       snprintf(retStr,sizeof(buf),"%d - RF/50",id);\r
-                       break;\r
-               case 5:\r
-                       snprintf(retStr,sizeof(buf),"%d - RF/64",id);\r
-                       break;\r
-               case 6:\r
-                       snprintf(retStr,sizeof(buf),"%d - RF/100",id);\r
-                       break;\r
-               case 7:\r
-                       snprintf(retStr,sizeof(buf),"%d - RF/128",id);\r
-                       break;\r
-               default:\r
-                       snprintf(retStr,sizeof(buf),"%d - (Unknown)",id);\r
-                       break;\r
-               }\r
-\r
+       switch (id) {\r
+               case 0:   snprintf(retStr,sizeof(buf),"%d - RF/8",id);   break;\r
+               case 1:   snprintf(retStr,sizeof(buf),"%d - RF/16",id);  break;\r
+               case 2:   snprintf(retStr,sizeof(buf),"%d - RF/32",id);  break;\r
+               case 3:   snprintf(retStr,sizeof(buf),"%d - RF/40",id);  break;\r
+               case 4:   snprintf(retStr,sizeof(buf),"%d - RF/50",id);  break;\r
+               case 5:   snprintf(retStr,sizeof(buf),"%d - RF/64",id);  break;\r
+               case 6:   snprintf(retStr,sizeof(buf),"%d - RF/100",id); break;\r
+               case 7:   snprintf(retStr,sizeof(buf),"%d - RF/128",id); break;\r
+               default:  snprintf(retStr,sizeof(buf),"%d - (Unknown)",id); break;\r
+       }\r
        return buf;\r
 }\r
 \r
-char * GetSaferStr(uint32_t id){\r
+char * GetSaferStr(uint32_t id) {\r
        static char buf[40];\r
        char *retStr = buf;\r
        \r
@@ -948,45 +1270,19 @@ char * GetModulationStr( uint32_t id){
        char *retStr = buf;\r
        \r
        switch (id){\r
-               case 0: \r
-                       snprintf(retStr,sizeof(buf),"%d - DIRECT (ASK/NRZ)",id);\r
-                       break;\r
-               case 1:\r
-                       snprintf(retStr,sizeof(buf),"%d - PSK 1 phase change when input changes",id);\r
-                       break;\r
-               case 2:         \r
-                       snprintf(retStr,sizeof(buf),"%d - PSK 2 phase change on bitclk if input high",id);\r
-                       break;\r
-               case 3:\r
-                       snprintf(retStr,sizeof(buf),"%d - PSK 3 phase change on rising edge of input",id);\r
-                       break;\r
-               case 4:\r
-                       snprintf(retStr,sizeof(buf),"%d - FSK 1 RF/8  RF/5",id);\r
-                       break;\r
-               case 5:\r
-                       snprintf(retStr,sizeof(buf),"%d - FSK 2 RF/8  RF/10",id);\r
-                       break;\r
-               case 6:\r
-                       snprintf(retStr,sizeof(buf),"%d - FSK 1a RF/5  RF/8",id);\r
-                       break;\r
-               case 7:\r
-                       snprintf(retStr,sizeof(buf),"%d - FSK 2a RF/10  RF/8",id);\r
-                       break;\r
-               case 8:\r
-                       snprintf(retStr,sizeof(buf),"%d - Manchester",id);\r
-                       break;\r
-               case 16:\r
-                       snprintf(retStr,sizeof(buf),"%d - Biphase",id);\r
-                       break;\r
-               case 0x18:\r
-                       snprintf(retStr,sizeof(buf),"%d - Biphase a - AKA Conditional Dephase Encoding(CDP)",id);\r
-                       break;\r
-               case 17:\r
-                       snprintf(retStr,sizeof(buf),"%d - Reserved",id);\r
-                       break;\r
-               default:\r
-                       snprintf(retStr,sizeof(buf),"0x%02X (Unknown)",id);\r
-                       break;\r
+               case 0: snprintf(retStr,sizeof(buf),"%d - DIRECT (ASK/NRZ)",id); break;\r
+               case 1: snprintf(retStr,sizeof(buf),"%d - PSK 1 phase change when input changes",id); break;\r
+               case 2: snprintf(retStr,sizeof(buf),"%d - PSK 2 phase change on bitclk if input high",id); break;\r
+               case 3: snprintf(retStr,sizeof(buf),"%d - PSK 3 phase change on rising edge of input",id); break;\r
+               case 4: snprintf(retStr,sizeof(buf),"%d - FSK 1 RF/8  RF/5",id); break;\r
+               case 5: snprintf(retStr,sizeof(buf),"%d - FSK 2 RF/8  RF/10",id); break;\r
+               case 6: snprintf(retStr,sizeof(buf),"%d - FSK 1a RF/5  RF/8",id); break;\r
+               case 7: snprintf(retStr,sizeof(buf),"%d - FSK 2a RF/10  RF/8",id); break;\r
+               case 8: snprintf(retStr,sizeof(buf),"%d - Manchester",id); break;\r
+               case 16: snprintf(retStr,sizeof(buf),"%d - Biphase",id); break;\r
+               case 0x18: snprintf(retStr,sizeof(buf),"%d - Biphase a - AKA Conditional Dephase Encoding(CDP)",id); break;\r
+               case 17: snprintf(retStr,sizeof(buf),"%d - Reserved",id); break;\r
+               default: snprintf(retStr,sizeof(buf),"0x%02X (Unknown)",id); break;\r
                }\r
        return buf;\r
 }\r
@@ -1006,47 +1302,21 @@ char * GetSelectedModulationStr( uint8_t id){
        static char buf[20];\r
        char *retStr = buf;\r
 \r
-       switch (id){\r
-               case DEMOD_FSK:\r
-                       snprintf(retStr,sizeof(buf),"FSK");\r
-                       break;\r
-               case DEMOD_FSK1:\r
-                       snprintf(retStr,sizeof(buf),"FSK1");\r
-                       break;\r
-               case DEMOD_FSK1a:\r
-                       snprintf(retStr,sizeof(buf),"FSK1a");\r
-                       break;\r
-               case DEMOD_FSK2:\r
-                       snprintf(retStr,sizeof(buf),"FSK2");\r
-                       break;\r
-               case DEMOD_FSK2a:\r
-                       snprintf(retStr,sizeof(buf),"FSK2a");\r
-                       break;\r
-               case DEMOD_ASK:         \r
-                       snprintf(retStr,sizeof(buf),"ASK");\r
-                       break;\r
-               case DEMOD_NRZ:\r
-                       snprintf(retStr,sizeof(buf),"DIRECT/NRZ");\r
-                       break;\r
-               case DEMOD_PSK1:\r
-                       snprintf(retStr,sizeof(buf),"PSK1");\r
-                       break;\r
-               case DEMOD_PSK2:\r
-                       snprintf(retStr,sizeof(buf),"PSK2");\r
-                       break;\r
-               case DEMOD_PSK3:\r
-                       snprintf(retStr,sizeof(buf),"PSK3");\r
-                       break;\r
-               case DEMOD_BI:\r
-                       snprintf(retStr,sizeof(buf),"BIPHASE");\r
-                       break;\r
-               case DEMOD_BIa:\r
-                       snprintf(retStr,sizeof(buf),"BIPHASEa - (CDP)");\r
-                       break;\r
-               default:\r
-                       snprintf(retStr,sizeof(buf),"(Unknown)");\r
-                       break;\r
-               }\r
+       switch (id) {\r
+               case DEMOD_FSK: snprintf(retStr,sizeof(buf),"FSK");     break;\r
+               case DEMOD_FSK1: snprintf(retStr,sizeof(buf),"FSK1"); break;\r
+               case DEMOD_FSK1a: snprintf(retStr,sizeof(buf),"FSK1a"); break;\r
+               case DEMOD_FSK2: snprintf(retStr,sizeof(buf),"FSK2"); break;\r
+               case DEMOD_FSK2a: snprintf(retStr,sizeof(buf),"FSK2a"); break;\r
+               case DEMOD_ASK: snprintf(retStr,sizeof(buf),"ASK"); break;\r
+               case DEMOD_NRZ: snprintf(retStr,sizeof(buf),"DIRECT/NRZ"); break;\r
+               case DEMOD_PSK1: snprintf(retStr,sizeof(buf),"PSK1"); break;\r
+               case DEMOD_PSK2: snprintf(retStr,sizeof(buf),"PSK2"); break;\r
+               case DEMOD_PSK3: snprintf(retStr,sizeof(buf),"PSK3"); break;\r
+               case DEMOD_BI: snprintf(retStr,sizeof(buf),"BIPHASE"); break;\r
+               case DEMOD_BIa: snprintf(retStr,sizeof(buf),"BIPHASEa - (CDP)"); break;\r
+               default: snprintf(retStr,sizeof(buf),"(Unknown)"); break;\r
+       }\r
        return buf;\r
 }\r
 \r
@@ -1064,28 +1334,233 @@ uint32_t PackBits(uint8_t start, uint8_t len, uint8_t* bits){
        return tmp;\r
 }\r
 \r
-static command_t CommandTable[] =\r
-{\r
-  {"help",   CmdHelp,           1, "This help"},\r
-  {"config", CmdT55xxSetConfig, 1, "Set/Get T55XX configuration (modulation, inverted, offset, rate)"},\r
-  {"detect", CmdT55xxDetect,    0, "[1] Try detecting the tag modulation from reading the configuration block."},\r
-  {"read",   CmdT55xxReadBlock, 0, "<block> [password] -- Read T55xx block data (page 0) [optional password]"},\r
-  {"write",  CmdT55xxWriteBlock,0, "<block> <data> [password] -- Write T55xx block data (page 0) [optional password]"},\r
-  {"trace",  CmdT55xxReadTrace, 0, "[1] Show T55xx traceability data (page 1/ blk 0-1)"},\r
-  {"info",   CmdT55xxInfo,      0, "[1] Show T55xx configuration data (page 0/ blk 0)"},\r
-  {"dump",   CmdT55xxDump,      0, "[password] Dump T55xx card block 0-7. [optional password]"},\r
-  {"special", special,          0, "Show block changes with 64 different offsets"},\r
+int CmdResetRead(const char *Cmd) {\r
+       UsbCommand c = {CMD_T55XX_RESET_READ, {0,0,0}};\r
+\r
+       clearCommandBuffer();\r
+       SendCommand(&c);\r
+       if ( !WaitForResponseTimeout(CMD_ACK,NULL,2500) ) {\r
+               PrintAndLog("command execution time out");\r
+               return 0;\r
+       }\r
+\r
+       uint8_t got[BIGBUF_SIZE-1];\r
+       GetFromBigBuf(got,sizeof(got),0);\r
+       WaitForResponse(CMD_ACK,NULL);\r
+       setGraphBuf(got, sizeof(got));\r
+       return 1;\r
+}\r
+\r
+int CmdT55xxWipe(const char *Cmd) {\r
+       char writeData[20] = {0};\r
+       char *ptrData = writeData;\r
+\r
+       char cmdp = param_getchar(Cmd, 0);      \r
+       if ( cmdp == 'h' || cmdp == 'H') return usage_t55xx_wipe();\r
+\r
+       bool Q5 = (cmdp == 'q' || cmdp == 'Q');\r
+\r
+       // Try with the default password to reset block 0\r
+       // With a pwd should work even if pwd bit not set\r
+       PrintAndLog("\nBeginning Wipe of a T55xx tag (assuming the tag is not password protected)\n");\r
+\r
+       if ( Q5 ){\r
+               snprintf(ptrData,sizeof(writeData),"b 0 d 6001F004 p 0");\r
+       } else {\r
+               snprintf(ptrData,sizeof(writeData),"b 0 d 00088040 p 0");\r
+       }\r
+\r
+       if (!CmdT55xxWriteBlock(ptrData)) PrintAndLog("Error writing blk 0");\r
+\r
+       for (uint8_t blk = 1; blk<8; blk++) {\r
+               snprintf(ptrData,sizeof(writeData),"b %d d 0", blk);\r
+               if (!CmdT55xxWriteBlock(ptrData))\r
+                       PrintAndLog("Error writing blk %d", blk);\r
+\r
+               memset(writeData, 0x00, sizeof(writeData));\r
+       }\r
+       return 0;\r
+}\r
+\r
+int CmdT55xxBruteForce(const char *Cmd) {\r
+\r
+       // load a default pwd file.\r
+       char buf[9];\r
+       char filename[FILE_PATH_SIZE]={0};\r
+       int keycnt = 0;\r
+       int ch;\r
+       uint8_t stKeyBlock = 20;\r
+       uint8_t *keyBlock = NULL, *p = NULL;\r
+       uint32_t start_password = 0x00000000; //start password\r
+       uint32_t end_password   = 0xFFFFFFFF; //end   password\r
+       bool found = false;\r
+\r
+       char cmdp = param_getchar(Cmd, 0);\r
+       if (cmdp == 'h' || cmdp == 'H') return usage_t55xx_bruteforce();\r
+\r
+       keyBlock = calloc(stKeyBlock, 6);\r
+       if (keyBlock == NULL) return 1;\r
+\r
+       if (cmdp == 'i' || cmdp == 'I') {\r
+\r
+               int len = strlen(Cmd+2);\r
+               if (len > FILE_PATH_SIZE) len = FILE_PATH_SIZE;\r
+               memcpy(filename, Cmd+2, len);\r
+\r
+               FILE * f = fopen( filename , "r");\r
+\r
+               if ( !f ) {\r
+                       PrintAndLog("File: %s: not found or locked.", filename);\r
+                       free(keyBlock);\r
+                       return 1;\r
+               }\r
+\r
+               while( fgets(buf, sizeof(buf), f) ) {\r
+                       if (strlen(buf) < 8 || buf[7] == '\n') continue;\r
+\r
+                       while (fgetc(f) != '\n' && !feof(f)) ;  //goto next line\r
+\r
+                       //The line start with # is comment, skip\r
+                       if( buf[0]=='#' ) continue;\r
+\r
+                       if (!isxdigit(buf[0])) {\r
+                               PrintAndLog("File content error. '%s' must include 8 HEX symbols", buf);\r
+                               continue;\r
+                       }\r
+                       \r
+                       buf[8] = 0;\r
+\r
+                       if ( stKeyBlock - keycnt < 2) {\r
+                               p = realloc(keyBlock, 6*(stKeyBlock+=10));\r
+                               if (!p) {\r
+                                       PrintAndLog("Cannot allocate memory for defaultKeys");\r
+                                       free(keyBlock);\r
+                                       fclose(f);\r
+                                       return 2;\r
+                               }\r
+                               keyBlock = p;\r
+                       }\r
+                       memset(keyBlock + 4 * keycnt, 0, 4);\r
+                       num_to_bytes(strtoll(buf, NULL, 16), 4, keyBlock + 4*keycnt);\r
+                       PrintAndLog("chk custom pwd[%2d] %08X", keycnt, bytes_to_num(keyBlock + 4*keycnt, 4));\r
+                       keycnt++;\r
+                       memset(buf, 0, sizeof(buf));\r
+               }\r
+               fclose(f);\r
+               \r
+               if (keycnt == 0) {\r
+                       PrintAndLog("No keys found in file");\r
+                       free(keyBlock);\r
+                       return 1;\r
+               }\r
+               PrintAndLog("Loaded %d keys", keycnt);\r
+               \r
+               // loop\r
+               uint64_t testpwd = 0x00;\r
+               for (uint16_t c = 0; c < keycnt; ++c ) {\r
+\r
+                       if (ukbhit()) {\r
+                               ch = getchar();\r
+                               (void)ch;\r
+                               printf("\naborted via keyboard!\n");\r
+                               free(keyBlock);\r
+                               return 0;\r
+                       }\r
+\r
+                       testpwd = bytes_to_num(keyBlock + 4*c, 4);\r
+\r
+                       PrintAndLog("Testing %08X", testpwd);\r
+\r
+                       if ( !AquireData(T55x7_PAGE0, T55x7_CONFIGURATION_BLOCK, TRUE, testpwd)) {\r
+                               PrintAndLog("Aquireing data from device failed. Quitting");\r
+                               free(keyBlock);\r
+                               return 0;\r
+                       }\r
+\r
+                       found = tryDetectModulation();\r
+\r
+                       if ( found ) {\r
+                               PrintAndLog("Found valid password: [%08X]", testpwd);\r
+                               free(keyBlock);\r
+                               return 0;\r
+                       }\r
+               }\r
+               PrintAndLog("Password NOT found.");\r
+               free(keyBlock);\r
+               return 0;\r
+       }\r
+\r
+       // Try to read Block 7, first :)\r
+\r
+       // incremental pwd range search\r
+       start_password = param_get32ex(Cmd, 0, 0, 16);\r
+       end_password = param_get32ex(Cmd, 1, 0, 16);\r
+\r
+       if ( start_password >= end_password ) {\r
+               free(keyBlock);\r
+               return usage_t55xx_bruteforce();\r
+       }\r
+       PrintAndLog("Search password range [%08X -> %08X]", start_password, end_password);\r
+\r
+       uint32_t i = start_password;\r
+\r
+       while ((!found) && (i <= end_password)) {\r
+\r
+               printf(".");\r
+               fflush(stdout);\r
+               if (ukbhit()) {\r
+                       ch = getchar();\r
+                       (void)ch;\r
+                       printf("\naborted via keyboard!\n");\r
+                       free(keyBlock);\r
+                       return 0;\r
+               }\r
+\r
+               if (!AquireData(T55x7_PAGE0, T55x7_CONFIGURATION_BLOCK, TRUE, i)) {\r
+                       PrintAndLog("Aquireing data from device failed. Quitting");\r
+                       free(keyBlock);\r
+                       return 0;\r
+               }\r
+               found = tryDetectModulation();\r
+\r
+               if (found) break;\r
+               i++;\r
+       }\r
+\r
+       PrintAndLog("");\r
+\r
+       if (found)\r
+               PrintAndLog("Found valid password: [%08x]", i);\r
+       else\r
+               PrintAndLog("Password NOT found. Last tried: [%08x]", --i);\r
+\r
+       free(keyBlock);\r
+       return 0;\r
+}\r
+\r
+static command_t CommandTable[] = {\r
+  {"help",      CmdHelp,           1, "This help"},\r
+       {"bruteforce",CmdT55xxBruteForce,0, "<start password> <end password> [i <*.dic>] Simple bruteforce attack to find password"},\r
+  {"config",    CmdT55xxSetConfig, 1, "Set/Get T55XX configuration (modulation, inverted, offset, rate)"},\r
+  {"detect",    CmdT55xxDetect,    1, "[1] Try detecting the tag modulation from reading the configuration block."},\r
+  {"read",      CmdT55xxReadBlock, 0, "b <block> p [password] [o] [1] -- Read T55xx block data. Optional [p password], [override], [page1]"},\r
+  {"resetread", CmdResetRead,      0, "Send Reset Cmd then lf read the stream to attempt to identify the start of it (needs a demod and/or plot after)"},\r
+  {"write",     CmdT55xxWriteBlock,0, "b <block> d <data> p [password] [1] -- Write T55xx block data. Optional [p password], [page1]"},\r
+  {"trace",     CmdT55xxReadTrace, 1, "[1] Show T55x7 traceability data (page 1/ blk 0-1)"},\r
+  {"info",      CmdT55xxInfo,      1, "[1] Show T55x7 configuration data (page 0/ blk 0)"},\r
+  {"dump",      CmdT55xxDump,      0, "[password] [o] Dump T55xx card block 0-7. Optional [password], [override]"},\r
+  {"special",   special,           0, "Show block changes with 64 different offsets"},\r
+  {"wakeup",    CmdT55xxWakeUp,    0, "Send AOR wakeup command"},\r
+  {"wipe",      CmdT55xxWipe,      0, "[q] Wipe a T55xx tag and set defaults (will destroy any data on tag)"},\r
   {NULL, NULL, 0, NULL}\r
 };\r
 \r
-int CmdLFT55XX(const char *Cmd)\r
-{\r
+int CmdLFT55XX(const char *Cmd) {\r
   CmdsParse(CommandTable, Cmd);\r
   return 0;\r
 }\r
 \r
-int CmdHelp(const char *Cmd)\r
-{\r
+int CmdHelp(const char *Cmd) {\r
   CmdsHelp(CommandTable);\r
   return 0;\r
 }\r
index 364f0271f472d18ef3f9a39d80e94ab816b81d0a..5c2ec79d11eb8d2c3afcdaf0bdfe9e05cc21eb55 100644 (file)
 #ifndef CMDLFT55XX_H__\r
 #define CMDLFT55XX_H__\r
 \r
+typedef struct {\r
+       uint32_t bl1;\r
+       uint32_t bl2; \r
+       uint32_t acl; \r
+       uint32_t mfc; \r
+       uint32_t cid; \r
+       uint32_t year; \r
+       uint32_t quarter; \r
+       uint32_t icr;\r
+       uint32_t lotid; \r
+       uint32_t wafer; \r
+       uint32_t dw;\r
+} t55x7_tracedata_t;\r
+\r
+typedef struct {\r
+       uint32_t bl1;\r
+       uint32_t bl2;\r
+       uint32_t icr;\r
+       char lotidc;\r
+       uint32_t lotid;\r
+       uint32_t wafer;\r
+       uint32_t dw;\r
+} t5555_tracedata_t;\r
+\r
 typedef struct {\r
        enum {\r
                DEMOD_NRZ  = 0x00,    \r
@@ -38,15 +62,23 @@ typedef struct {
                RF_100 = 0x06,\r
                RF_128 = 0x07,\r
        } bitrate;\r
+       bool Q5;\r
+       bool ST;\r
 } t55xx_conf_block_t;\r
+t55xx_conf_block_t Get_t55xx_Config();\r
+void Set_t55xx_Config(t55xx_conf_block_t conf);\r
+\r
 \r
 int CmdLFT55XX(const char *Cmd);\r
+int CmdT55xxBruteForce(const char *Cmd);\r
 int CmdT55xxSetConfig(const char *Cmd);\r
 int CmdT55xxReadBlock(const char *Cmd);\r
 int CmdT55xxWriteBlock(const char *Cmd);\r
 int CmdT55xxReadTrace(const char *Cmd);\r
 int CmdT55xxInfo(const char *Cmd);\r
 int CmdT55xxDetect(const char *Cmd);\r
+int CmdResetRead(const char *Cmd);\r
+int CmdT55xxWipe(const char *Cmd);\r
 \r
 char * GetBitRateStr(uint32_t id);\r
 char * GetSaferStr(uint32_t id);\r
@@ -54,13 +86,17 @@ char * GetModulationStr( uint32_t id);
 char * GetModelStrFromCID(uint32_t cid);\r
 char * GetSelectedModulationStr( uint8_t id);\r
 uint32_t PackBits(uint8_t start, uint8_t len, uint8_t *bitstream);\r
+void printT5xxHeader(uint8_t page);\r
 void printT55xxBlock(const char *demodStr);\r
-void printConfiguration( t55xx_conf_block_t b);\r
+int printConfiguration( t55xx_conf_block_t b);\r
 \r
 bool DecodeT55xxBlock();\r
 bool tryDetectModulation();\r
-bool test(uint8_t mode, uint8_t *offset, int *fndBitRate);\r
+bool test(uint8_t mode, uint8_t *offset, int *fndBitRate, uint8_t clk, bool *Q5);\r
 int special(const char *Cmd);\r
-int AquireData( uint8_t block );\r
+int AquireData( uint8_t page, uint8_t block, bool pwdmode, uint32_t password );\r
+\r
+void printT55x7Trace( t55x7_tracedata_t data, uint8_t repeat );\r
+void printT5555Trace( t5555_tracedata_t data, uint8_t repeat );\r
 \r
 #endif\r
diff --git a/client/cmdlfviking.c b/client/cmdlfviking.c
new file mode 100644 (file)
index 0000000..45e4b1d
--- /dev/null
@@ -0,0 +1,127 @@
+//-----------------------------------------------------------------------------
+//
+// This code is licensed to you under the terms of the GNU GPL, version 2 or,
+// at your option, any later version. See the LICENSE.txt file for the text of
+// the license.
+//-----------------------------------------------------------------------------
+// Low frequency Viking tag commands
+//-----------------------------------------------------------------------------
+#include <stdio.h>
+#include <string.h>
+#include <inttypes.h>
+#include "proxmark3.h"
+#include "ui.h"
+#include "util.h"
+#include "graph.h"
+#include "cmdparser.h"
+#include "cmddata.h"
+#include "cmdmain.h"
+#include "cmdlf.h"
+#include "cmdlfviking.h"
+#include "lfdemod.h"
+static int CmdHelp(const char *Cmd);
+
+int usage_lf_viking_clone(void) {
+       PrintAndLog("clone a Viking AM tag to a T55x7 tag.");
+       PrintAndLog("Usage: lf viking clone <Card ID - 8 hex digits> <Q5>");
+  PrintAndLog("Options :");
+  PrintAndLog("  <Card Number>  : 8 digit hex viking card number");
+  PrintAndLog("  <Q5>           : specify write to Q5 (t5555 instead of t55x7)");
+  PrintAndLog("");
+  PrintAndLog("Sample  : lf viking clone 1A337 Q5");
+       return 0;
+}
+
+int usage_lf_viking_sim(void) {
+  PrintAndLog("Enables simulation of viking card with specified card number.");
+  PrintAndLog("Simulation runs until the button is pressed or another USB command is issued.");
+  PrintAndLog("Per viking format, the card number is 8 digit hex number.  Larger values are truncated.");
+  PrintAndLog("");
+  PrintAndLog("Usage:  lf viking sim <Card-Number>");
+  PrintAndLog("Options :");
+  PrintAndLog("  <Card Number>   : 8 digit hex viking card number");
+  PrintAndLog("");
+  PrintAndLog("Sample  : lf viking sim 1A337");
+  return 0;
+}
+
+uint64_t getVikingBits(uint32_t id) {
+       //calc checksum
+       uint8_t checksum = (id>>24) ^ ((id>>16) & 0xFF) ^ ((id>>8) & 0xFF) ^ (id & 0xFF) ^ 0xF2 ^ 0xA8;
+       return ((uint64_t)0xF2 << 56) | (id << 8) | checksum;
+}
+//by marshmellow
+//see ASKDemod for what args are accepted
+int CmdVikingRead(const char *Cmd) {
+       // read lf silently
+       CmdLFRead("s");
+       // get samples silently
+       getSamples("30000",false);
+       // demod and output viking ID   
+       return CmdVikingDemod(Cmd);
+}
+
+int CmdVikingClone(const char *Cmd) {
+       uint32_t id = 0;
+       uint64_t rawID = 0;
+       bool Q5 = false;
+       char cmdp = param_getchar(Cmd, 0);
+       if (strlen(Cmd) == 0 || cmdp == 'h' || cmdp == 'H') return usage_lf_viking_clone();
+
+       id = param_get32ex(Cmd, 0, 0, 16);
+       if (id == 0) return usage_lf_viking_clone();
+       if (param_getchar(Cmd, 1)=='Q' || param_getchar(Cmd, 1)=='q')
+               Q5 = true;
+
+       rawID = getVikingBits(id);
+       PrintAndLog("Cloning - ID: %08X, Raw: %08X%08X",id,(uint32_t)(rawID >> 32),(uint32_t) (rawID & 0xFFFFFFFF));
+       UsbCommand c = {CMD_VIKING_CLONE_TAG,{rawID >> 32, rawID & 0xFFFFFFFF, Q5}};
+       clearCommandBuffer();
+       SendCommand(&c);
+       //check for ACK
+       WaitForResponse(CMD_ACK,NULL);
+       return 0;
+}
+
+int CmdVikingSim(const char *Cmd) {
+       uint32_t id = 0;
+       uint64_t rawID = 0;
+       uint8_t clk = 32, encoding = 1, separator = 0, invert = 0;
+       char cmdp = param_getchar(Cmd, 0);
+
+       if (strlen(Cmd) == 0 || cmdp == 'h' || cmdp == 'H') return usage_lf_viking_sim();
+       id = param_get32ex(Cmd, 0, 0, 16);
+       if (id == 0) return usage_lf_viking_sim();
+
+       rawID = getVikingBits(id);
+
+  uint16_t arg1, arg2;
+  size_t size = 64;
+  arg1 = clk << 8 | encoding;
+  arg2 = invert << 8 | separator;
+
+  UsbCommand c = {CMD_ASK_SIM_TAG, {arg1, arg2, size}};
+  PrintAndLog("preparing to sim ask data: %d bits", size);
+  num_to_bytebits(rawID, 64, c.d.asBytes);
+       clearCommandBuffer();
+  SendCommand(&c);
+  return 0;
+}
+
+static command_t CommandTable[] = {
+       {"help",  CmdHelp,        1, "This help"},
+       {"read",  CmdVikingRead,  0, "Attempt to read and Extract tag data"},
+       {"clone", CmdVikingClone, 0, "<8 digit ID number> clone viking tag"},
+       {"sim",   CmdVikingSim,   0, "<8 digit ID number> simulate viking tag"},
+       {NULL, NULL, 0, NULL}
+};
+
+int CmdLFViking(const char *Cmd) {
+       CmdsParse(CommandTable, Cmd);
+       return 0;
+}
+
+int CmdHelp(const char *Cmd) {
+       CmdsHelp(CommandTable);
+       return 0;
+}
diff --git a/client/cmdlfviking.h b/client/cmdlfviking.h
new file mode 100644 (file)
index 0000000..2e8ac47
--- /dev/null
@@ -0,0 +1,16 @@
+//-----------------------------------------------------------------------------
+//
+// This code is licensed to you under the terms of the GNU GPL, version 2 or,
+// at your option, any later version. See the LICENSE.txt file for the text of
+// the license.
+//-----------------------------------------------------------------------------
+// Low frequency T55xx commands
+//-----------------------------------------------------------------------------
+#ifndef CMDLFVIKING_H__
+#define CMDLFVIKING_H__
+int CmdLFViking(const char *Cmd);
+int CmdVikingRead(const char *Cmd);
+int CmdVikingClone(const char *Cmd);
+int CmdVikingSim(const char *Cmd);
+#endif
+
index 512aa13cc91d7e6e950de83346e9342900aef9a1..c1d730ee636f13cf92b01f59b71b607ad1791a20 100644 (file)
@@ -42,15 +42,15 @@ static int cmd_tail;//Starts as 0
 
 static command_t CommandTable[] = 
 {
-  {"help",  CmdHelp,  1, "This help. Use '<command> help' for details of a particular command."},
-  {"data",  CmdData,  1, "{ Plot window / data buffer manipulation... }"},
-  {"hf",       CmdHF,          1, "{ High Frequency commands... }"},
-  {"hw",    CmdHW,    1, "{ Hardware commands... }"},
-  {"lf",       CmdLF,          1, "{ Low Frequency commands... }"},
-  {"script", CmdScript,   1,"{ Scripting commands }"},
-  {"quit",  CmdQuit,  1, "Exit program"},
-  {"exit",  CmdQuit,  1, "Exit program"},
-  {NULL, NULL, 0, NULL}
+       {"help",        CmdHelp,        1, "This help. Use '<command> help' for details of a particular command."},
+       {"data",        CmdData,        1, "{ Plot window / data buffer manipulation... }"},
+       {"hf",          CmdHF,          1, "{ High Frequency commands... }"},
+       {"hw",          CmdHW,          1, "{ Hardware commands... }"},
+       {"lf",          CmdLF,          1, "{ Low Frequency commands... }"},
+       {"script",      CmdScript,      1, "{ Scripting commands }"},
+       {"quit",        CmdQuit,        1, "Exit program"},
+       {"exit",        CmdQuit,        1, "Exit program"},
+       {NULL, NULL, 0, NULL}
 };
 
 command_t* getTopLevelCommandTable()
@@ -65,8 +65,7 @@ int CmdHelp(const char *Cmd)
 
 int CmdQuit(const char *Cmd)
 {
-  exit(0);
-  return 0;
+  return 99;
 }
 /**
  * @brief This method should be called when sending a new command to the pm3. In case any old
@@ -97,8 +96,9 @@ void storeCommand(UsbCommand *command)
     memcpy(destination, command, sizeof(UsbCommand));
 
     cmd_head = (cmd_head +1) % CMD_BUFFER_SIZE; //increment head and wrap
-
 }
+
+
 /**
  * @brief getCommand gets a command from an internal circular buffer.
  * @param response location to write command
@@ -117,9 +117,9 @@ int getCommand(UsbCommand* response)
     cmd_tail = (cmd_tail +1 ) % CMD_BUFFER_SIZE;
 
     return 1;
-
 }
 
+
 /**
  * Waits for a certain response type. This method waits for a maximum of
  * ms_timeout milliseconds for a specified response command.
@@ -131,41 +131,43 @@ int getCommand(UsbCommand* response)
  */
 bool WaitForResponseTimeout(uint32_t cmd, UsbCommand* response, size_t ms_timeout) {
   
-  UsbCommand resp;
+       UsbCommand resp;
        
-       if (response == NULL)
-    response = &resp;
-
-
-  // Wait until the command is received
-  for(size_t dm_seconds=0; dm_seconds < ms_timeout/10; dm_seconds++) {
+       if (response == NULL) {
+               response = &resp;
+       }
 
+       // Wait until the command is received
+       for(size_t dm_seconds=0; dm_seconds < ms_timeout/10; dm_seconds++) {
                while(getCommand(response)) {
-          if(response->cmd == cmd){
-          return true;
-          }
-      }
-        msleep(10); // XXX ugh
-        if (dm_seconds == 200) { // Two seconds elapsed
-          PrintAndLog("Waiting for a response from the proxmark...");
-          PrintAndLog("Don't forget to cancel its operation first by pressing on the button");
-        }
+                       if(response->cmd == cmd){
+                               return true;
+                       }
+               }
+               msleep(10); // XXX ugh
+               if (dm_seconds == 200) { // Two seconds elapsed
+                       PrintAndLog("Waiting for a response from the proxmark...");
+                       PrintAndLog("Don't forget to cancel its operation first by pressing on the button");
+               }
        }
-    return false;
+       return false;
 }
 
+
 bool WaitForResponse(uint32_t cmd, UsbCommand* response) {
        return WaitForResponseTimeout(cmd,response,-1);
 }
 
+
 //-----------------------------------------------------------------------------
 // Entry point into our code: called whenever the user types a command and
 // then presses Enter, which the full command line that they typed.
 //-----------------------------------------------------------------------------
-void CommandReceived(char *Cmd) {
-  CmdsParse(CommandTable, Cmd);
+int CommandReceived(char *Cmd) {
+       return CmdsParse(CommandTable, Cmd);
 }
 
+
 //-----------------------------------------------------------------------------
 // Entry point into our code: called whenever we received a packet over USB
 // that we weren't necessarily expecting, for example a debug print.
@@ -175,10 +177,11 @@ void UsbCommandReceived(UsbCommand *UC)
        switch(UC->cmd) {
                // First check if we are handling a debug message
                case CMD_DEBUG_PRINT_STRING: {
-                       char s[USB_CMD_DATA_SIZE+1] = {0x00};
+                       char s[USB_CMD_DATA_SIZE+1];
+                       memset(s, 0x00, sizeof(s));
                        size_t len = MIN(UC->arg[0],USB_CMD_DATA_SIZE);
                        memcpy(s,UC->d.asBytes,len);
-                       PrintAndLog("#db# %s       ", s);
+                       PrintAndLog("#db# %s", s);
                        return;
                } break;
 
@@ -189,12 +192,13 @@ void UsbCommandReceived(UsbCommand *UC)
 
                case CMD_DOWNLOADED_RAW_ADC_SAMPLES_125K: {
                        memcpy(sample_buf+(UC->arg[0]),UC->d.asBytes,UC->arg[1]);
+                       return;
                } break;
 
                default:
+                       storeCommand(UC);
                        break;
        }
 
-       storeCommand(UC);
 }
 
index 0cf2b35d436e5656d2aaf11c087f4ecc791e5c86..500320ee4fd474ab486dd3429e57868f77adcdb1 100644 (file)
@@ -14,7 +14,7 @@
 #include "usb_cmd.h"
 #include "cmdparser.h"
 void UsbCommandReceived(UsbCommand *UC);
-void CommandReceived(char *Cmd);
+int CommandReceived(char *Cmd);
 bool WaitForResponseTimeout(uint32_t cmd, UsbCommand* response, size_t ms_timeout);
 bool WaitForResponse(uint32_t cmd, UsbCommand* response);
 void clearCommandBuffer();
index 6910e86a535b7fd8154a9e1a94acfa4cc5583650..3250899795d92fd47c1b0af1ebcebb7644cc43fd 100644 (file)
@@ -15,6 +15,7 @@
 #include "cmdparser.h"
 #include "proxmark3.h"
 
+
 void CmdsHelp(const command_t Commands[])
 {
   if (Commands[0].Name == NULL)
@@ -28,48 +29,51 @@ void CmdsHelp(const command_t Commands[])
   }
 }
 
-void CmdsParse(const command_t Commands[], const char *Cmd)
+
+int CmdsParse(const command_t Commands[], const char *Cmd)
 {
-  if(strcmp( Cmd, "XX_internal_command_dump_XX") == 0)
-  {// Help dump children
-      dumpCommandsRecursive(Commands, 0);
-      return;
-  }
-  if(strcmp( Cmd, "XX_internal_command_dump_markdown_XX") == 0)
-  {// Markdown help dump children
-      dumpCommandsRecursive(Commands, 1);
-      return;
-  }
-  char cmd_name[32];
-  int len = 0;
-  memset(cmd_name, 0, 32);
-  sscanf(Cmd, "%31s%n", cmd_name, &len);
-  int i = 0;
-  while (Commands[i].Name && strcmp(Commands[i].Name, cmd_name))
-    ++i;
+       if(strcmp( Cmd, "XX_internal_command_dump_XX") == 0)
+       {// Help dump children
+               dumpCommandsRecursive(Commands, 0);
+               return 0;
+       }
+       if(strcmp( Cmd, "XX_internal_command_dump_markdown_XX") == 0)
+       {// Markdown help dump children
+               dumpCommandsRecursive(Commands, 1);
+               return 0;
+       }
+       char cmd_name[32];
+       int len = 0;
+       memset(cmd_name, 0, 32);
+       sscanf(Cmd, "%31s%n", cmd_name, &len);
+       int i = 0;
+       while (Commands[i].Name && strcmp(Commands[i].Name, cmd_name))
+               ++i;
 
-  /* try to find exactly one prefix-match */
-  if(!Commands[i].Name) {
-    int last_match = 0;
-    int matches = 0;
-
-    for(i=0;Commands[i].Name;i++) {
-      if( !strncmp(Commands[i].Name, cmd_name, strlen(cmd_name)) ) {
-        last_match = i;
-        matches++;
-      }
-    }
-    if(matches == 1) i=last_match;
-  }
+       /* try to find exactly one prefix-match */
+       if(!Commands[i].Name) {
+               int last_match = 0;
+               int matches = 0;
 
-  if (Commands[i].Name) {
-    while (Cmd[len] == ' ')
-      ++len;
-    Commands[i].Parse(Cmd + len);
-  } else {
-    // show help for selected hierarchy or if command not recognised
-    CmdsHelp(Commands);
-  }
+               for(i=0;Commands[i].Name;i++) {
+                       if( !strncmp(Commands[i].Name, cmd_name, strlen(cmd_name)) ) {
+                               last_match = i;
+                               matches++;
+                       }
+               }
+               if(matches == 1) i=last_match;
+       }
+
+       if (Commands[i].Name) {
+               while (Cmd[len] == ' ')
+                       ++len;
+       return Commands[i].Parse(Cmd + len);
+       } else {
+               // show help for selected hierarchy or if command not recognised
+               CmdsHelp(Commands);
+       }
+
+       return 0;
 }
 
 char pparent[512] = {0};
index b7997eccec61e14fa3a285b50574b1bd0887de57..5217d04b692282e87e810bfbf82b218eb06d3042 100644 (file)
@@ -24,7 +24,7 @@ typedef struct command_s
 // Print help for each command in the command array
 void CmdsHelp(const command_t Commands[]);
 // Parse a command line
-void CmdsParse(const command_t Commands[], const char *Cmd);
+int CmdsParse(const command_t Commands[], const char *Cmd);
 void dumpCommandsRecursive(const command_t cmds[], int markdown);
 
 #endif
diff --git a/client/default_pwd.dic b/client/default_pwd.dic
new file mode 100644 (file)
index 0000000..5edb83e
--- /dev/null
@@ -0,0 +1,75 @@
+# known cloners
+# ref. http://www.proxmark.org/forum/viewtopic.php?id=2022
+51243648,
+000D8787,
+# Default pwd, simple:
+00000000,
+11111111,
+22222222,
+33333333,
+44444444,
+55555555,
+66666666,
+77777777,
+88888888,
+99999999,
+AAAAAAAA,
+BBBBBBBB,
+CCCCCCCC,
+DDDDDDDD,
+EEEEEEEE,
+FFFFFFFF,
+a0a1a2a3,
+b0b1b2b3,
+aabbccdd,
+bbccddee,
+ccddeeff,
+00000001,
+00000002,
+0000000a,
+0000000b,
+01020304,
+02030405,
+03040506,
+04050607,
+05060708,
+06070809,
+0708090A,
+08090A0B,
+090A0B0C,
+0A0B0C0D,
+0B0C0D0E,
+0C0D0E0F,
+01234567,
+12345678,
+10000000,
+20000000,
+30000000,
+40000000,
+50000000,
+60000000,
+70000000,
+80000000,
+90000000,
+A0000000,
+B0000000,
+C0000000,
+D0000000,
+E0000000,
+F0000000,
+10101010,
+01010101,
+11223344,
+22334455,
+33445566,
+44556677,
+55667788,
+66778899,
+778899AA,
+8899AABB,
+99AABBCC,
+AABBCCDD,
+BBCCDDEE,
+CCDDEEFF,
+0CB7E7FC,  //rfidler?
+FABADA11,  //china?
\ No newline at end of file
diff --git a/client/fpga_compress.c b/client/fpga_compress.c
new file mode 100644 (file)
index 0000000..0c40f22
--- /dev/null
@@ -0,0 +1,289 @@
+//-----------------------------------------------------------------------------
+// This code is licensed to you under the terms of the GNU GPL, version 2 or,
+// at your option, any later version. See the LICENSE.txt file for the text of
+// the license.
+//-----------------------------------------------------------------------------
+// Compression tool for FPGA config files. Compress several *.bit files at
+// compile time. Decompression is done at run time (see fpgaloader.c).
+// This uses the zlib library tuned to this specific case. The small file sizes
+// allow to use "insane" parameters for optimum compression ratio.
+//-----------------------------------------------------------------------------
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <stdint.h>
+#include <stdbool.h>
+#include "zlib.h"
+
+#define MAX(a,b) ((a)>(b)?(a):(b))
+
+// zlib configuration
+#define COMPRESS_LEVEL                 9               // use best possible compression
+#define COMPRESS_WINDOW_BITS   15              // default = max = 15 for a window of 2^15 = 32KBytes
+#define COMPRESS_MEM_LEVEL             9               // determines the amount of memory allocated during compression. Default = 8.
+/* COMPRESS_STRATEGY can be 
+       Z_DEFAULT_STRATEGY (the default), 
+       Z_FILTERED (more huffmann, less string matching),
+       Z_HUFFMAN_ONLY (huffman only, no string matching)
+       Z_RLE (distances limited to one)
+       Z_FIXED (prevents the use of dynamic Huffman codes)
+*/     
+#define        COMPRESS_STRATEGY               Z_DEFAULT_STRATEGY
+// zlib tuning parameters:
+#define COMPRESS_GOOD_LENGTH           258
+#define        COMPRESS_MAX_LAZY                       258     
+#define        COMPRESS_MAX_NICE_LENGTH        258
+#define        COMPRESS_MAX_CHAIN                      8192
+
+#define FPGA_INTERLEAVE_SIZE   288     // (the FPGA's internal config frame size is 288 bits. Interleaving with 288 bytes should give best compression)
+#define FPGA_CONFIG_SIZE               42336   // our current fpga_[lh]f.bit files are 42175 bytes. Rounded up to next multiple of FPGA_INTERLEAVE_SIZE
+
+static void usage(void)
+{
+       fprintf(stderr, "Usage: fpga_compress <infile1> <infile2> ... <infile_n> <outfile>\n");
+       fprintf(stderr, "          Combine n FPGA bitstream files and compress them into one.\n\n");
+       fprintf(stderr, "       fpga_compress -d <infile> <outfile>");
+       fprintf(stderr, "          Decompress <infile>. Write result to <outfile>");
+}
+
+
+static voidpf fpga_deflate_malloc(voidpf opaque, uInt items, uInt size)
+{
+       return malloc(items*size);
+}
+
+
+static void fpga_deflate_free(voidpf opaque, voidpf address)
+{
+       return free(address);
+}
+
+
+static bool all_feof(FILE *infile[], uint8_t num_infiles)
+{
+       for (uint16_t i = 0; i < num_infiles; i++) {
+               if (!feof(infile[i])) {
+                       return false;
+               }
+       }
+       
+       return true;
+}
+
+
+int zlib_compress(FILE *infile[], uint8_t num_infiles, FILE *outfile)
+{
+       uint8_t *fpga_config;
+       uint32_t i;
+       int ret;
+       uint8_t c;              
+       z_stream compressed_fpga_stream;
+
+       fpga_config = malloc(num_infiles * FPGA_CONFIG_SIZE);
+       
+       // read the input files. Interleave them into fpga_config[]
+       i = 0;
+       do {
+
+               if (i >= num_infiles * FPGA_CONFIG_SIZE) {
+                       fprintf(stderr, "Input files too big (total > %lu bytes). These are probably not PM3 FPGA config files.\n", num_infiles*FPGA_CONFIG_SIZE);
+                       for(uint16_t j = 0; j < num_infiles; j++) {
+                               fclose(infile[j]);
+                       }
+                       free(fpga_config);
+                       return(EXIT_FAILURE);
+               }
+
+               for(uint16_t j = 0; j < num_infiles; j++) {
+                       for(uint16_t k = 0; k < FPGA_INTERLEAVE_SIZE; k++) {
+                               c = fgetc(infile[j]);
+                               if (!feof(infile[j])) {
+                                       fpga_config[i++] = c;
+                               } else if (num_infiles > 1) {
+                                       fpga_config[i++] = '\0';
+                               }
+                       }
+               }
+
+       } while (!all_feof(infile, num_infiles));
+
+       // initialize zlib structures
+       compressed_fpga_stream.next_in = fpga_config;
+       compressed_fpga_stream.avail_in = i;
+       compressed_fpga_stream.zalloc = fpga_deflate_malloc;
+       compressed_fpga_stream.zfree = fpga_deflate_free;
+       compressed_fpga_stream.opaque = Z_NULL;
+       ret = deflateInit2(&compressed_fpga_stream, 
+                                               COMPRESS_LEVEL,
+                                               Z_DEFLATED,
+                                               COMPRESS_WINDOW_BITS,
+                                               COMPRESS_MEM_LEVEL,
+                                               COMPRESS_STRATEGY);
+
+       // estimate the size of the compressed output
+       unsigned int outsize_max = deflateBound(&compressed_fpga_stream, compressed_fpga_stream.avail_in);
+       uint8_t *outbuf = malloc(outsize_max);
+       compressed_fpga_stream.next_out = outbuf;
+       compressed_fpga_stream.avail_out = outsize_max;
+                                       
+       if (ret == Z_OK) {
+               ret = deflateTune(&compressed_fpga_stream,
+                                                       COMPRESS_GOOD_LENGTH,
+                                                       COMPRESS_MAX_LAZY,
+                                                       COMPRESS_MAX_NICE_LENGTH,
+                                                       COMPRESS_MAX_CHAIN);
+       }
+       
+       if (ret == Z_OK) {
+               ret = deflate(&compressed_fpga_stream, Z_FINISH);
+       }
+       
+       fprintf(stderr, "compressed %lu input bytes to %lu output bytes\n", i, compressed_fpga_stream.total_out);
+
+       if (ret != Z_STREAM_END) {
+               fprintf(stderr, "Error in deflate(): %d %s\n", ret, compressed_fpga_stream.msg);
+               free(outbuf);
+               deflateEnd(&compressed_fpga_stream);
+               for(uint16_t j = 0; j < num_infiles; j++) {
+                       fclose(infile[j]);
+               }
+               fclose(outfile);
+               free(infile);
+               free(fpga_config);
+               return(EXIT_FAILURE);
+               }
+               
+       for (i = 0; i < compressed_fpga_stream.total_out; i++) {
+               fputc(outbuf[i], outfile);
+       }       
+
+       free(outbuf);
+       deflateEnd(&compressed_fpga_stream);
+       for(uint16_t j = 0; j < num_infiles; j++) {
+               fclose(infile[j]);
+       }
+       fclose(outfile);
+       free(infile);
+       free(fpga_config);
+       
+       return(EXIT_SUCCESS);
+       
+}
+
+
+int zlib_decompress(FILE *infile, FILE *outfile)
+{
+       #define DECOMPRESS_BUF_SIZE 1024
+       uint8_t outbuf[DECOMPRESS_BUF_SIZE];
+       uint8_t inbuf[DECOMPRESS_BUF_SIZE];
+       int ret;
+       
+       z_stream compressed_fpga_stream;
+
+       // initialize zlib structures
+       compressed_fpga_stream.next_in = inbuf;
+       compressed_fpga_stream.avail_in = 0;
+       compressed_fpga_stream.next_out = outbuf;
+       compressed_fpga_stream.avail_out = DECOMPRESS_BUF_SIZE;
+       compressed_fpga_stream.zalloc = fpga_deflate_malloc;
+       compressed_fpga_stream.zfree = fpga_deflate_free;
+       compressed_fpga_stream.opaque = Z_NULL;
+       
+       ret = inflateInit2(&compressed_fpga_stream, 0);
+       
+       do {
+               if (compressed_fpga_stream.avail_in == 0) {
+                       compressed_fpga_stream.next_in = inbuf;
+                       uint16_t i = 0;
+                       do {
+                               int c = fgetc(infile);
+                               if (!feof(infile)) {
+                                       inbuf[i++] = c & 0xFF;
+                                       compressed_fpga_stream.avail_in++;
+                               } else {
+                                       break;
+                               }
+                       } while (i < DECOMPRESS_BUF_SIZE);
+               }
+
+               ret = inflate(&compressed_fpga_stream, Z_SYNC_FLUSH);
+
+               if (ret != Z_OK && ret != Z_STREAM_END) {
+                       break;
+               }
+
+               if (compressed_fpga_stream.avail_out == 0) {
+                       for (uint16_t i = 0; i < DECOMPRESS_BUF_SIZE; i++) {
+                               fputc(outbuf[i], outfile);
+                       }
+                       compressed_fpga_stream.avail_out = DECOMPRESS_BUF_SIZE;
+                       compressed_fpga_stream.next_out = outbuf;
+               }
+       } while (ret == Z_OK);
+
+       if (ret == Z_STREAM_END) {  // reached end of input
+               uint16_t i = 0;
+               while (compressed_fpga_stream.avail_out < DECOMPRESS_BUF_SIZE) {
+                       fputc(outbuf[i++], outfile);
+                       compressed_fpga_stream.avail_out++;
+               }
+               fclose(outfile);
+               fclose(infile);
+               return(EXIT_SUCCESS);
+       } else {
+               fprintf(stderr, "Error. Inflate() returned error %d, %s", ret, compressed_fpga_stream.msg);
+               fclose(outfile);
+               fclose(infile);
+               return(EXIT_FAILURE);
+       }
+       
+}
+
+
+int main(int argc, char **argv)
+{
+       FILE **infiles;
+       FILE *outfile;
+       
+       if (argc == 1 || argc == 2) {
+               usage();
+               return(EXIT_FAILURE);
+       }
+       
+       if (!strcmp(argv[1], "-d")) {                   // Decompress
+               infiles = calloc(1, sizeof(FILE*));
+               if (argc != 4) {
+                       usage();
+                       return(EXIT_FAILURE);
+               } 
+               infiles[0] = fopen(argv[2], "rb");
+               if (infiles[0] == NULL) {
+                       fprintf(stderr, "Error. Cannot open input file %s", argv[2]);
+                       return(EXIT_FAILURE);
+               }
+               outfile = fopen(argv[3], "wb");
+               if (outfile == NULL) {
+                       fprintf(stderr, "Error. Cannot open output file %s", argv[3]);
+                       return(EXIT_FAILURE);
+               }
+               return zlib_decompress(infiles[0], outfile);
+
+       } else {                                                                // Compress
+
+               infiles = calloc(argc-2, sizeof(FILE*));
+               for (uint16_t i = 0; i < argc-2; i++) { 
+                       infiles[i] = fopen(argv[i+1], "rb");
+                       if (infiles[i] == NULL) {
+                               fprintf(stderr, "Error. Cannot open input file %s", argv[i+1]);
+                               return(EXIT_FAILURE);
+                       }
+               }
+               outfile = fopen(argv[argc-1], "wb");
+               if (outfile == NULL) {
+                       fprintf(stderr, "Error. Cannot open output file %s", argv[argc-1]);
+                       return(EXIT_FAILURE);
+               }
+               return zlib_compress(infiles, argc-2, outfile);
+       }
+}
index 062798482821c0873df2db766e39e8413f22dd84..319cde39217791bd3cc0a909aa228a8241509d96 100644 (file)
@@ -143,9 +143,13 @@ int GetAskClock(const char str[], bool printAns, bool verbose)
                        PrintAndLog("Failed to copy from graphbuffer");
                return -1;
        }
-       int start = DetectASKClock(grph, size, &clock, 20);
+       bool st = DetectST(grph, &size, &clock);
+       int start = 0;
+       if (st == false) {
+               start = DetectASKClock(grph, size, &clock, 20);
+       }
        // Only print this message if we're not looping something
-       if (printAns){
+       if (printAns) {
                PrintAndLog("Auto-detected clock rate: %d, Best Starting Position: %d", clock, start);
        }
        return clock;
index c5b91f99783830e3274d54169aa4ae4a289f02bb..46738181e4c04453cde39e6fa4c3d259163a5645 100644 (file)
@@ -73,7 +73,7 @@ typedef struct {
 #define CMD_INDALA_CLONE_TAG_L                                            0x0213
 #define CMD_T55XX_READ_BLOCK                                              0x0214
 #define CMD_T55XX_WRITE_BLOCK                                             0x0215
-#define CMD_T55XX_READ_TRACE                                              0x0216
+#define CMD_T55XX_RESET_READ                                              0x0216
 #define CMD_PCF7931_READ                                                  0x0217
 #define CMD_EM4X_READ_WORD                                                0x0218
 #define CMD_EM4X_WRITE_WORD                                               0x0219
@@ -84,12 +84,14 @@ typedef struct {
 #define CMD_FSK_SIM_TAG                                                   0x021E
 #define CMD_ASK_SIM_TAG                                                   0x021F
 #define CMD_PSK_SIM_TAG                                                   0x0220
+#define CMD_AWID_DEMOD_FSK                                                0x0221
+#define CMD_VIKING_CLONE_TAG                                              0x0223
+#define CMD_T55XX_WAKEUP                                                  0x0224
 
 /* CMD_SET_ADC_MUX: ext1 is 0 for lopkd, 1 for loraw, 2 for hipkd, 3 for hiraw */
 
 // For the 13.56 MHz tags
 #define CMD_ACQUIRE_RAW_ADC_SAMPLES_ISO_15693                             0x0300
-#define CMD_ACQUIRE_RAW_ADC_SAMPLES_ISO_14443                             0x0301
 #define CMD_READ_SRI512_TAG                                               0x0303
 #define CMD_READ_SRIX4K_TAG                                               0x0304
 #define CMD_READER_ISO_15693                                              0x0310
@@ -105,9 +107,8 @@ typedef struct {
 #define CMD_SIMULATE_HITAG                                                0x0371
 #define CMD_READER_HITAG                                                  0x0372
 
-#define CMD_SIMULATE_TAG_HF_LISTEN                                        0x0380
-#define CMD_SIMULATE_TAG_ISO_14443                                        0x0381
-#define CMD_SNOOP_ISO_14443                                               0x0382
+#define CMD_SIMULATE_TAG_ISO_14443B                                       0x0381
+#define CMD_SNOOP_ISO_14443B                                              0x0382
 #define CMD_SNOOP_ISO_14443a                                              0x0383
 #define CMD_SIMULATE_TAG_ISO_14443a                                       0x0384
 #define CMD_READER_ISO_14443a                                             0x0385
@@ -116,9 +117,17 @@ typedef struct {
 #define CMD_WRITER_LEGIC_RF                                               0x0389
 #define CMD_EPA_PACE_COLLECT_NONCE                                        0x038A
 
+#define CMD_ICLASS_READCHECK                                              0x038F
+#define CMD_ICLASS_CLONE                                                  0x0390
+#define CMD_ICLASS_DUMP                                                   0x0391
 #define CMD_SNOOP_ICLASS                                                  0x0392
 #define CMD_SIMULATE_TAG_ICLASS                                           0x0393
 #define CMD_READER_ICLASS                                                 0x0394
+#define CMD_READER_ICLASS_REPLAY                                          0x0395
+#define CMD_ICLASS_READBLOCK                                              0x0396
+#define CMD_ICLASS_WRITEBLOCK                                             0x0397
+#define CMD_ICLASS_EML_MEMSET                                             0x0398
+#define CMD_ICLASS_AUTHENTICATION                                         0x0399
 
 // For measurements of the antenna tuning
 #define CMD_MEASURE_ANTENNA_TUNING                                        0x0400
index 7c9cc873a019f1ae67c9c84ba8cabd789d4e88bd..a701da31934164630e4df7f80605149a449c3dbd 100644 (file)
@@ -224,23 +224,44 @@ void MAC(uint8_t* k, BitstreamIn input, BitstreamOut out)
 void doMAC(uint8_t *cc_nr_p, uint8_t *div_key_p, uint8_t mac[4])
 {
        uint8_t cc_nr[13] = { 0 };
-    uint8_t div_key[8];
+       uint8_t div_key[8];
        //cc_nr=(uint8_t*)malloc(length+1);
 
-       memcpy(cc_nr,cc_nr_p,12);
-    memcpy(div_key,div_key_p,8);
+       memcpy(cc_nr, cc_nr_p, 12);
+       memcpy(div_key, div_key_p, 8);
 
        reverse_arraybytes(cc_nr,12);
-       BitstreamIn bitstream = {cc_nr,12 * 8,0};
-    uint8_t dest []= {0,0,0,0,0,0,0,0};
-    BitstreamOut out = { dest, sizeof(dest)*8, 0 };
-    MAC(div_key,bitstream, out);
-    //The output MAC must also be reversed
-    reverse_arraybytes(dest, sizeof(dest));
-    memcpy(mac, dest, 4);
+       BitstreamIn bitstream = {cc_nr, 12 * 8, 0};
+       uint8_t dest []= {0,0,0,0,0,0,0,0};
+       BitstreamOut out = { dest, sizeof(dest)*8, 0 };
+       MAC(div_key,bitstream, out);
+       //The output MAC must also be reversed
+       reverse_arraybytes(dest, sizeof(dest));
+       memcpy(mac, dest, 4);
        //free(cc_nr);
-    return;
+       return;
 }
+void doMAC_N(uint8_t *address_data_p, uint8_t address_data_size, uint8_t *div_key_p, uint8_t mac[4])
+{
+       uint8_t *address_data;
+       uint8_t div_key[8];
+       address_data = (uint8_t*) malloc(address_data_size);
+
+       memcpy(address_data, address_data_p, address_data_size);
+       memcpy(div_key, div_key_p, 8);
+
+       reverse_arraybytes(address_data, address_data_size);
+       BitstreamIn bitstream = {address_data, address_data_size * 8, 0};
+       uint8_t dest []= {0,0,0,0,0,0,0,0};
+       BitstreamOut out = { dest, sizeof(dest)*8, 0 };
+       MAC(div_key, bitstream, out);
+       //The output MAC must also be reversed
+       reverse_arraybytes(dest, sizeof(dest));
+       memcpy(mac, dest, 4);
+       free(address_data);
+       return;
+}
+
 #ifndef ON_DEVICE
 int testMAC()
 {
index bdea94322a82aba0e06c95933a6b08e3e6123dd9..7afdb524cc4393273b5bd3e1af1c84c05f246bee 100644 (file)
@@ -42,6 +42,8 @@
 #include <stdint.h>
 
 void doMAC(uint8_t *cc_nr_p, uint8_t *div_key_p, uint8_t mac[4]);
+void doMAC_N(uint8_t *address_data_p,uint8_t address_data_size, uint8_t *div_key_p, uint8_t mac[4]);
+
 #ifndef ON_DEVICE
 int testMAC();
 #endif
index 83b3c9fa2476f6454ac507e777224617795a3bd3..9a8256bb38a700990fe6bddf4701116cdbaeac40 100644 (file)
@@ -171,6 +171,7 @@ void printarr(char * name, uint8_t* arr, int len)
        }
        cx += snprintf(output+cx,outsize-cx,"};");
        prnlog(output);
+       free(output);
 }
 
 void printvar(char * name, uint8_t* arr, int len)
@@ -188,6 +189,7 @@ void printvar(char * name, uint8_t* arr, int len)
        }
 
        prnlog(output);
+       free(output);
 }
 
 void printarr_human_readable(char * title, uint8_t* arr, int len)
index c824eaa188ed45c56fce156718c4dfeda90f5b19..e9814e95e6d13604b98931f5e7aae6638addad17 100644 (file)
@@ -522,8 +522,8 @@ int bruteforceDump(uint8_t dump[], size_t dumpsize, uint16_t keytable[])
                errors += bruteforceItem(*attack, keytable);
        }
        free(attack);
-       clock_t t2 = clock();
-       float diff = (((float)t2 - (float)t1) / CLOCKS_PER_SEC );
+       t1 = clock() - t1;
+       float diff = ((float)t1 / CLOCKS_PER_SEC );
        prnlog("\nPerformed full crack in %f seconds",diff);
 
        // Pick out the first 16 bytes of the keytable.
@@ -563,15 +563,23 @@ int bruteforceFile(const char *filename, uint16_t keytable[])
        long fsize = ftell(f);
        fseek(f, 0, SEEK_SET);
 
+       if (fsize < 0) {
+               prnlog("Error, when getting fsize");
+               fclose(f);
+               return 1;
+       }
+
        uint8_t *dump = malloc(fsize);
        size_t bytes_read = fread(dump, 1, fsize, f);
 
        fclose(f);
-    if (bytes_read < fsize)
-    {
-        prnlog("Error, could only read %d bytes (should be %d)",bytes_read, fsize );
-    }
-       return bruteforceDump(dump,fsize,keytable);
+       if (bytes_read < fsize) {
+               prnlog("Error, could only read %d bytes (should be %d)",bytes_read, fsize );
+       }
+
+       uint8_t res = bruteforceDump(dump,fsize,keytable);
+       free(dump);
+       return res;
 }
 /**
  *
index d1b0359b3c2702921a183118c8dd7516afbf1fea..95112f7decafe7a79f05c2651d7dd9b2aa848216 100644 (file)
@@ -69,7 +69,7 @@ int showHelp()
        prnlog("-h                 Show this help");
        prnlog("-f <filename>      Bruteforce iclass dumpfile");
        prnlog("                   An iclass dumpfile is assumed to consist of an arbitrary number of malicious CSNs, and their protocol responses");
-       prnlog("                   The the binary format of the file is expected to be as follows: ");
+       prnlog("                   The binary format of the file is expected to be as follows: ");
        prnlog("                   <8 byte CSN><8 byte CC><4 byte NR><4 byte MAC>");
        prnlog("                   <8 byte CSN><8 byte CC><4 byte NR><4 byte MAC>");
        prnlog("                   <8 byte CSN><8 byte CC><4 byte NR><4 byte MAC>");
index 678c745ec65cc2afd8b0583ed99ec3d74489c80f..fcf0f07cb578a0fd93de52c43a28c8fb9a3ec47b 100644 (file)
@@ -20,7 +20,8 @@ local _commands = {
        CMD_BUFF_CLEAR =                                                     0x0105,
        CMD_READ_MEM =                                                       0x0106,
        CMD_VERSION =                                                        0x0107,
-
+       CMD_STATUS =                                                         0x0108,
+       CMD_PING =                                                           0x0109,
        --// For low-frequency tags
        CMD_READ_TI_TYPE =                                                   0x0202,
        CMD_WRITE_TI_TYPE =                                                  0x0203,
@@ -43,7 +44,7 @@ local _commands = {
        CMD_INDALA_CLONE_TAG_L =                                             0x0213,
        CMD_T55XX_READ_BLOCK =                                               0x0214,
        CMD_T55XX_WRITE_BLOCK =                                              0x0215,
-       CMD_T55XX_READ_TRACE =                                               0x0216,
+       CMD_T55XX_RESET_READ =                                               0x0216,
        CMD_PCF7931_READ =                                                   0x0217,
        CMD_EM4X_READ_WORD =                                                 0x0218,
        CMD_EM4X_WRITE_WORD =                                                0x0219,
@@ -54,12 +55,13 @@ local _commands = {
        CMD_FSK_SIM_TAG =                                                    0x021E,
        CMD_ASK_SIM_TAG =                                                    0x021F,
        CMD_PSK_SIM_TAG =                                                    0x0220,
-
+       CMD_AWID_DEMOD_FSK =                                                 0x0221,
+       CMD_VIKING_CLONE_TAG =                                               0x0223,
+       CMD_T55XX_WAKEUP =                                                   0x0224,
        --/* CMD_SET_ADC_MUX: ext1 is 0 for lopkd, 1 for loraw, 2 for hipkd, 3 for hiraw */
 
        --// For the 13.56 MHz tags
        CMD_ACQUIRE_RAW_ADC_SAMPLES_ISO_15693 =                              0x0300,
-       CMD_ACQUIRE_RAW_ADC_SAMPLES_ISO_14443 =                              0x0301,
        CMD_READ_SRI512_TAG =                                                0x0303,
        CMD_READ_SRIX4K_TAG =                                                0x0304,
        CMD_READER_ISO_15693 =                                               0x0310,
@@ -76,9 +78,8 @@ local _commands = {
        CMD_SIMULATE_HITAG =                                                 0x0371,
        CMD_READER_HITAG =                                                   0x0372,
 
-       CMD_SIMULATE_TAG_HF_LISTEN =                                         0x0380,
-       CMD_SIMULATE_TAG_ISO_14443 =                                         0x0381,
-       CMD_SNOOP_ISO_14443 =                                                0x0382,
+       CMD_SIMULATE_TAG_ISO_14443B =                                        0x0381,
+       CMD_SNOOP_ISO_14443B =                                               0x0382,
        CMD_SNOOP_ISO_14443a =                                               0x0383,
        CMD_SIMULATE_TAG_ISO_14443a =                                        0x0384,
        CMD_READER_ISO_14443a =                                              0x0385,
@@ -88,11 +89,17 @@ local _commands = {
        CMD_EPA_PACE_COLLECT_NONCE =                                         0x038A,
        --//CMD_EPA_ =                                                         0x038B,
 
+       CMD_ICLASS_READCHECK =                                               0x038F,
+       CMD_ICLASS_CLONE =                                                   0x0390,
+       CMD_ICLASS_DUMP =                                                    0x0391,
        CMD_SNOOP_ICLASS =                                                   0x0392,
        CMD_SIMULATE_TAG_ICLASS =                                            0x0393,
        CMD_READER_ICLASS =                                                  0x0394,
-       CMD_READER_ICLASS_REPLAY =                                                                                       0x0395,
-       CMD_ICLASS_ISO14443A_WRITE =                                                                             0x0397,
+       CMD_READER_ICLASS_REPLAY =                                           0x0395,
+       CMD_ICLASS_READBLOCK =                                               0x0396,
+       CMD_ICLASS_WRITEBLOCK =                                              0x0397,
+       CMD_ICLASS_EML_MEMSET =                                              0x0398,
+       CMD_ICLASS_AUTHENTICATION =                                          0x0399,
 
        --// For measurements of the antenna tuning
        CMD_MEASURE_ANTENNA_TUNING =                                         0x0400,
index 804d4a842f1de78587a2cc3406af3b3947698d62..4dee8b4d05d4773c45b76cb3a5a1ee74deed8b2f 100644 (file)
@@ -106,7 +106,7 @@ local _keys = {
     '776974687573', -- RKF Ã–stgötaTrafiken Key B
 
     --[[
-    The keys below are taken from from https://code.google.com/p/mifare-key-cracker/downloads/list
+    The keys below are taken from https://code.google.com/p/mifare-key-cracker/downloads/list
     --]]
 
     'bd493a3962b6',
@@ -129,7 +129,7 @@ local _keys = {
     '123456789abc',
        
        --[[
-    The keys below are taken from from https://github.com/4ZM/mfterm/blob/master/dictionary.txt
+    The keys below are taken from https://github.com/4ZM/mfterm/blob/master/dictionary.txt
     --]]
        
        'abcdef123456', -- Key from ladyada.net
@@ -199,7 +199,7 @@ local function uniq(list)
             table.insert(foobar, value);
         end
     end
-    --print("final list length length ", #foobar)
+    --print("final list length ", #foobar)
     return foobar
 end
 
index a968fde2a90c3b2218b6e67aa005bdeec7486db6..592d0477d9f1ead73a754860e218e4d8ba2eb77d 100644 (file)
@@ -99,6 +99,32 @@ local Utils =
                end\r
                return nil\r
        end,\r
+\r
+       ------------ SHA1 hash\r
+       -- Takes a string and calculates a SHA1 hash\r
+       Sha1 = function(s)\r
+               if s == nil then return nil end\r
+               if #s == 0 then return nil end\r
+               if  type(s) == 'string' then\r
+                       local utils = require('utils')\r
+                       --local asc = utils.ConvertHexToAscii(s)\r
+                       local hash = core.sha1(s)\r
+                       return hash\r
+               end\r
+               return nil\r
+       end,\r
+       -- Takes a hex string and calculates a SHA1 hash\r
+       Sha1Hex = function(s)\r
+               if s == nil then return nil end\r
+               if #s == 0 then return nil end\r
+               if  type(s) == 'string' then\r
+                       local utils = require('utils')\r
+                       local asc = utils.ConvertHexToAscii(s)\r
+                       local hash = core.sha1(asc)\r
+                       return hash\r
+               end\r
+               return nil\r
+       end,\r
        \r
        \r
        -- input parameter is a string\r
@@ -288,4 +314,4 @@ local Utils =
 -- end\r
 \r
 }\r
-return Utils
\ No newline at end of file
+return Utils\r
index 237979c1bfaaefc13ca0940093c2a47d5b954f40..4abb1137c41d0baf045f2d5e8fed9109cedb7873 100644 (file)
@@ -69,7 +69,7 @@ void* nested_worker_thread(void *arg)
 \r
 int mfnested(uint8_t blockNo, uint8_t keyType, uint8_t * key, uint8_t trgBlockNo, uint8_t trgKeyType, uint8_t * resultKey, bool calibrate) \r
 {\r
-       uint16_t i, len;\r
+       uint16_t i;\r
        uint32_t uid;\r
        UsbCommand resp;\r
 \r
@@ -77,31 +77,29 @@ int mfnested(uint8_t blockNo, uint8_t keyType, uint8_t * key, uint8_t trgBlockNo
        struct Crypto1State *p1, *p2, *p3, *p4;\r
        \r
        // flush queue\r
-       WaitForResponseTimeout(CMD_ACK,NULL,100);\r
+       WaitForResponseTimeout(CMD_ACK, NULL, 100);\r
        \r
        UsbCommand c = {CMD_MIFARE_NESTED, {blockNo + keyType * 0x100, trgBlockNo + trgKeyType * 0x100, calibrate}};\r
        memcpy(c.d.asBytes, key, 6);\r
        SendCommand(&c);\r
 \r
-       if (WaitForResponseTimeout(CMD_ACK,&resp,1500)) {\r
-               len = resp.arg[1];\r
-               if (len == 2) { \r
-                       memcpy(&uid, resp.d.asBytes, 4);\r
-                       PrintAndLog("uid:%08x len=%d trgbl=%d trgkey=%x", uid, len, (uint16_t)resp.arg[2] & 0xff, (uint16_t)resp.arg[2] >> 8);\r
-                       \r
-                       for (i = 0; i < 2; i++) {\r
-                               statelists[i].blockNo = resp.arg[2] & 0xff;\r
-                               statelists[i].keyType = (resp.arg[2] >> 8) & 0xff;\r
-                               statelists[i].uid = uid;\r
+       if (!WaitForResponseTimeout(CMD_ACK, &resp, 1500)) {\r
+               return -1;\r
+       }\r
 \r
-                               memcpy(&statelists[i].nt,  (void *)(resp.d.asBytes + 4 + i * 8 + 0), 4);\r
-                               memcpy(&statelists[i].ks1, (void *)(resp.d.asBytes + 4 + i * 8 + 4), 4);\r
-                       }\r
-               }\r
-               else {\r
-                       PrintAndLog("Got 0 keys from proxmark."); \r
-                       return 1;\r
-               }\r
+       if (resp.arg[0]) {\r
+               return resp.arg[0];  // error during nested\r
+       }\r
+               \r
+       memcpy(&uid, resp.d.asBytes, 4);\r
+       PrintAndLog("uid:%08x trgbl=%d trgkey=%x", uid, (uint16_t)resp.arg[2] & 0xff, (uint16_t)resp.arg[2] >> 8);\r
+       \r
+       for (i = 0; i < 2; i++) {\r
+               statelists[i].blockNo = resp.arg[2] & 0xff;\r
+               statelists[i].keyType = (resp.arg[2] >> 8) & 0xff;\r
+               statelists[i].uid = uid;\r
+               memcpy(&statelists[i].nt,  (void *)(resp.d.asBytes + 4 + i * 8 + 0), 4);\r
+               memcpy(&statelists[i].ks1, (void *)(resp.d.asBytes + 4 + i * 8 + 4), 4);\r
        }\r
        \r
        // calc keys\r
@@ -183,7 +181,7 @@ int mfnested(uint8_t blockNo, uint8_t keyType, uint8_t * key, uint8_t trgBlockNo
                crypto1_get_lfsr(statelists[0].head.slhead + i, &key64);\r
                num_to_bytes(key64, 6, keyBlock);\r
                key64 = 0;\r
-               if (!mfCheckKeys(statelists[0].blockNo, statelists[0].keyType, 1, keyBlock, &key64)) {\r
+               if (!mfCheckKeys(statelists[0].blockNo, statelists[0].keyType, false, 1, keyBlock, &key64)) {\r
                        num_to_bytes(key64, 6, resultKey);\r
                        break;\r
                }\r
@@ -195,11 +193,11 @@ int mfnested(uint8_t blockNo, uint8_t keyType, uint8_t * key, uint8_t trgBlockNo
        return 0;\r
 }\r
 \r
-int mfCheckKeys (uint8_t blockNo, uint8_t keyType, uint8_t keycnt, uint8_t * keyBlock, uint64_t * key){\r
+int mfCheckKeys (uint8_t blockNo, uint8_t keyType, bool clear_trace, uint8_t keycnt, uint8_t * keyBlock, uint64_t * key){\r
 \r
        *key = 0;\r
 \r
-       UsbCommand c = {CMD_MIFARE_CHKKEYS, {blockNo, keyType, keycnt}};\r
+       UsbCommand c = {CMD_MIFARE_CHKKEYS, {((blockNo & 0xff) | ((keyType&0xff)<<8)), clear_trace, keycnt}};\r
        memcpy(c.d.asBytes, keyBlock, 6 * keycnt);\r
        SendCommand(&c);\r
 \r
@@ -621,3 +619,23 @@ int mfTraceDecode(uint8_t *data_src, int len, bool wantSaveToEmlFile) {
 \r
        return 0;\r
 }\r
+\r
+int tryDecryptWord(uint32_t nt, uint32_t ar_enc, uint32_t at_enc, uint8_t *data, int len){\r
+       /*\r
+       uint32_t nt;      // tag challenge\r
+       uint32_t ar_enc;  // encrypted reader response\r
+       uint32_t at_enc;  // encrypted tag response\r
+       */\r
+       if (traceCrypto1) {\r
+               crypto1_destroy(traceCrypto1);\r
+       }\r
+       ks2 = ar_enc ^ prng_successor(nt, 64);\r
+       ks3 = at_enc ^ prng_successor(nt, 96);\r
+       traceCrypto1 = lfsr_recovery64(ks2, ks3);\r
+\r
+       mf_crypto1_decrypt(traceCrypto1, data, len, 0);\r
+\r
+       PrintAndLog("Decrypted data: [%s]", sprint_hex(data,len) );\r
+       crypto1_destroy(traceCrypto1);\r
+       return 0;\r
+}\r
index a11f11d5068465597b0528ed188736a6bd31752e..9ccb8960ffb0cfb353caa6998ef376010739f108 100644 (file)
@@ -50,7 +50,7 @@ typedef struct {
 extern char logHexFileName[FILE_PATH_SIZE];\r
 \r
 int mfnested(uint8_t blockNo, uint8_t keyType, uint8_t * key, uint8_t trgBlockNo, uint8_t trgKeyType, uint8_t * ResultKeys, bool calibrate);\r
-int mfCheckKeys (uint8_t blockNo, uint8_t keyType, uint8_t keycnt, uint8_t * keyBlock, uint64_t * key);\r
+int mfCheckKeys (uint8_t blockNo, uint8_t keyType, bool clear_trace, uint8_t keycnt, uint8_t * keyBlock, uint64_t * key);\r
 \r
 int mfEmlGetMem(uint8_t *data, int blockNum, int blocksCount);\r
 int mfEmlSetMem(uint8_t *data, int blockNum, int blocksCount);\r
@@ -67,3 +67,4 @@ int isBlockEmpty(int blockN);
 int isBlockTrailer(int blockN);\r
 int loadTraceCard(uint8_t *tuid);\r
 int saveTraceCard(void);\r
+int tryDecryptWord(uint32_t nt, uint32_t ar_enc, uint32_t at_enc, uint8_t *data, int len);\r
index 111f58cd6b07a8d21ddff7e006e5de485bf4830b..70d874fe88600c2a8a60014306e480b3f04a42a2 100644 (file)
@@ -133,7 +133,7 @@ int nonce2key(uint32_t uid, uint32_t nt, uint32_t nr, uint64_t par_info, uint64_
                key64 = *(last_keylist + i);
                num_to_bytes(key64, 6, keyBlock);
                key64 = 0;
-               if (!mfCheckKeys(0, 0, 1, keyBlock, &key64)) {
+               if (!mfCheckKeys(0, 0, false, 1, keyBlock, &key64)) {
                        *key = key64;
                        free(last_keylist);
                        last_keylist = NULL;
index 0e2a698c1b8ca3783f2a1bc16d980539c423ce22..f184d9e995e3f7078d75812aa6d907609dbb1597 100644 (file)
@@ -24,7 +24,7 @@
 #include "ui.h"
 #include "sleep.h"
 #include "cmdparser.h"
-#include "cmdmain.h"
+#include "cmdhw.h"
 
 // a global mutex to prevent interlaced printing from different threads
 pthread_mutex_t print_lock;
@@ -105,6 +105,8 @@ static void *main_loop(void *targ) {
        if (arg->usb_present == 1) {
                rarg.run = 1;
                pthread_create(&reader_thread, NULL, &uart_receiver, &rarg);
+               // cache Version information now:
+               CmdVersion(NULL);
        }
 
        FILE *script_file = NULL;
@@ -153,12 +155,11 @@ static void *main_loop(void *targ) {
                                cmd[strlen(cmd) - 1] = 0x00;
                        
                        if (cmd[0] != 0x00) {
-                               if (strncmp(cmd, "quit", 4) == 0) {
-                                       exit(0);
+                               int ret = CommandReceived(cmd);
+                               add_history(cmd);
+                               if (ret == 99) {  // exit or quit
                                        break;
                                }
-                               CommandReceived(cmd);
-                               add_history(cmd);
                        }
                        free(cmd);
                } else {
@@ -221,7 +222,7 @@ int main(int argc, char* argv[]) {
                .usb_present = 0,
                .script_cmds_file = NULL
        };
-       pthread_t main_loop_t;
+       pthread_t main_loop_threat;
 
   
        sp = uart_open(argv[1]);
@@ -256,18 +257,20 @@ int main(int argc, char* argv[]) {
        // create a mutex to avoid interlacing print commands from our different threads
        pthread_mutex_init(&print_lock, NULL);
 
-       pthread_create(&main_loop_t, NULL, &main_loop, &marg);
+       pthread_create(&main_loop_threat, NULL, &main_loop, &marg);
        InitGraphics(argc, argv);
 
        MainGraphics();
 
-       pthread_join(main_loop_t, NULL);
+       pthread_join(main_loop_threat, NULL);
 
        // Clean up the port
-       uart_close(sp);
-  
+       if (offline == 0) {
+               uart_close(sp);
+       }
+
        // clean up mutex
        pthread_mutex_destroy(&print_lock);
-  
-  return 0;
+
+       exit(0);
 }
index 8236bfe71fb345cbd5c3b3066cc40f779cae8277..616d9c70aebfd1373262fb689938fcadfe741b0a 100644 (file)
@@ -16,6 +16,7 @@
 #include <inttypes.h>
 #define llx PRIx64
 #define lli PRIi64
+#define llu PRIu64
 #define hhu PRIu8
 
 #include "usb_cmd.h"
index 152fd9d44335236ffe3def9237d3bb38eccb68b3..a188ecf047de8eda6c35bd4e5434ed3845c14147 100644 (file)
 #include "util.h"
 #include "nonce2key/nonce2key.h"
 #include "../common/iso15693tools.h"
+#include "iso14443crc.h"
 #include "../common/crc16.h"
 #include "../common/crc64.h"
+#include "../common/sha1.h"
 #include "aes.h"
 /**
  * The following params expected:
@@ -227,11 +229,32 @@ static int l_iso15693_crc(lua_State *L)
        return 1;
 }
 
+static int l_iso14443b_crc(lua_State *L)
+{
+       /* void ComputeCrc14443(int CrcType,
+                     const unsigned char *Data, int Length,
+                     unsigned char *TransmitFirst,
+                     unsigned char *TransmitSecond)
+       */
+       unsigned char buf[USB_CMD_DATA_SIZE];
+       size_t len = 0;
+       const char *data = luaL_checklstring(L, 1, &len);
+       if (USB_CMD_DATA_SIZE < len)
+               len =  USB_CMD_DATA_SIZE-2;
+
+       for (int i = 0; i < len; i += 2) {
+               sscanf(&data[i], "%02x", (unsigned int *)&buf[i / 2]);
+       }
+       ComputeCrc14443(CRC_14443_B, buf, len, &buf[len], &buf[len+1]);
+
+       lua_pushlstring(L, (const char *)&buf, len+2);
+       return 1;
+}
 /*
  Simple AES 128 cbc hook up to OpenSSL.
  params:  key, input
 */
-static int l_aes128decrypt(lua_State *L)
+static int l_aes128decrypt_cbc(lua_State *L)
 {
        //Check number of arguments
        int i;
@@ -260,7 +283,36 @@ static int l_aes128decrypt(lua_State *L)
        lua_pushlstring(L,(const char *)&outdata, sizeof(outdata));
        return 1;// return 1 to signal one return value
 }
-static int l_aes128encrypt(lua_State *L)
+static int l_aes128decrypt_ecb(lua_State *L)
+{
+       //Check number of arguments
+       int i;
+       size_t size;
+       const char *p_key = luaL_checklstring(L, 1, &size);
+       if(size != 32)  return returnToLuaWithError(L,"Wrong size of key, got %d bytes, expected 32", (int) size);
+
+       const char *p_encTxt = luaL_checklstring(L, 2, &size);
+
+       unsigned char indata[16] = {0x00};
+       unsigned char outdata[16] = {0x00};
+       unsigned char aes_key[16] = {0x00};
+
+       // convert key to bytearray and convert input to bytearray
+       for (i = 0; i < 32; i += 2) {
+               sscanf(&p_encTxt[i], "%02x", (unsigned int *)&indata[i / 2]);
+               sscanf(&p_key[i], "%02x", (unsigned int *)&aes_key[i / 2]);
+       }
+       aes_context ctx;
+       aes_init(&ctx);
+       aes_setkey_dec(&ctx, aes_key, 128);
+       aes_crypt_ecb(&ctx, AES_DECRYPT, indata, outdata );
+
+       //Push decrypted array as a string
+       lua_pushlstring(L,(const char *)&outdata, sizeof(outdata));
+       return 1;// return 1 to signal one return value
+}
+
+static int l_aes128encrypt_cbc(lua_State *L)
 {
        //Check number of arguments
        int i;
@@ -289,6 +341,33 @@ static int l_aes128encrypt(lua_State *L)
        return 1;// return 1 to signal one return value
 }
 
+static int l_aes128encrypt_ecb(lua_State *L)
+{
+       //Check number of arguments
+       int i;
+       size_t size;
+       const char *p_key = luaL_checklstring(L, 1, &size);
+       if(size != 32)  return returnToLuaWithError(L,"Wrong size of key, got %d bytes, expected 32", (int) size);
+
+       const char *p_txt = luaL_checklstring(L, 2, &size);
+
+       unsigned char indata[16] = {0x00};
+       unsigned char outdata[16] = {0x00};
+       unsigned char aes_key[16] = {0x00};
+
+       for (i = 0; i < 32; i += 2) {
+               sscanf(&p_txt[i], "%02x", (unsigned int *)&indata[i / 2]);
+               sscanf(&p_key[i], "%02x", (unsigned int *)&aes_key[i / 2]);
+       }
+       aes_context ctx;
+       aes_init(&ctx);
+       aes_setkey_enc(&ctx, aes_key, 128);
+       aes_crypt_ecb(&ctx, AES_ENCRYPT, indata, outdata );
+       //Push encrypted array as a string
+       lua_pushlstring(L,(const char *)&outdata, sizeof(outdata));
+       return 1;// return 1 to signal one return value
+}
+
 static int l_crc16(lua_State *L)
 {
        size_t size;
@@ -321,6 +400,16 @@ static int l_crc64(lua_State *L)
        return 1;
 }
 
+static int l_sha1(lua_State *L)
+{
+       size_t size;
+       const char *p_str = luaL_checklstring(L, 1, &size);
+       unsigned char outdata[20] = {0x00};
+       sha1( (uint8_t*) p_str, size, outdata);
+       lua_pushlstring(L,(const char *)&outdata, sizeof(outdata));
+       return 1;
+}
+
 /**
  * @brief Sets the lua path to include "./lualibs/?.lua", in order for a script to be
  * able to do "require('foobar')" if foobar.lua is within lualibs folder.
@@ -359,10 +448,14 @@ int set_pm3_libraries(lua_State *L)
                {"clearCommandBuffer",          l_clearCommandBuffer},
                {"console",                     l_CmdConsole},
                {"iso15693_crc",                l_iso15693_crc},
-               {"aes128_decrypt",              l_aes128decrypt},
-               {"aes128_encrypt",              l_aes128encrypt},
+               {"iso14443b_crc",               l_iso14443b_crc},
+               {"aes128_decrypt",              l_aes128decrypt_cbc},
+               {"aes128_decrypt_ecb",          l_aes128decrypt_ecb},
+               {"aes128_encrypt",              l_aes128encrypt_cbc},
+               {"aes128_encrypt_ecb",          l_aes128encrypt_ecb},
                {"crc16",                       l_crc16},
                {"crc64",                       l_crc64},
+               {"sha1",                        l_sha1},
                {NULL, NULL}
        };
 
diff --git a/client/scripts/didump.lua b/client/scripts/didump.lua
new file mode 100644 (file)
index 0000000..2386d42
--- /dev/null
@@ -0,0 +1,473 @@
+local cmds = require('commands')
+local getopt = require('getopt')
+local utils = require('utils')
+local lib14a = require('read14a')
+
+example =[[
+       script run didump
+       script run didump -k aabbccddeeff
+]]
+author = "Iceman"
+usage = "script run didump -k <key> "
+desc = [[
+This is a script to dump and decrypt the data of a specific type of Mifare Mini token.
+
+Arguments:
+       -h             : this help
+       -k <key>       : Mifare Key A.
+]]
+
+local band=bit32.band
+local bor=bit32.bor
+local bnot=bit32.bnot
+local bxor=bit32.bxor
+local lshift=bit32.lshift
+local rshift=bit32.rshift
+
+local FOO = 'AF62D2EC0491968CC52A1A7165F865FE'
+local BAR = '286329204469736E65792032303133'
+local RANDOM = FOO..BAR
+local outputTemplate = os.date("toydump_%Y-%m-%d_%H%M%S");
+local TIMEOUT = 2000
+local DEBUG = false
+local numBlocks = 20
+local numSectors = 5
+local CHECKSUM_OFFSET = 12; -- +1???
+--- 
+-- A debug printout-function
+function dbg(args)
+       if DEBUG then
+               print("###", args)
+       end
+end 
+--- 
+-- This is only meant to be used when errors occur
+function oops(err)
+       print("ERROR: ",err)
+       core.clearCommandBuffer()
+end
+--- 
+-- Usage help
+function help()
+       print(desc)
+       print("Example usage")
+       print(example)
+end
+---
+-- Get checksum,
+-- called: data is string (32 hex digits)
+-- returns: number
+local function getChecksum(data)
+       local chksum = data:sub(25,32)
+       return tonumber(chksum,16)
+end
+---
+-- calculate checksum
+-- called: data is bytes  (24 hex digits)
+-- returns: number
+local function calculateChecksum(data)
+
+       -- Generate table
+       local _tbl = {}
+_tbl[0] = { 0x0 }
+_tbl[1] = { 0x77073096 }
+_tbl[2] = { 0xEE0E612C }
+_tbl[3] = { 0x990951BA }
+_tbl[4] = { 0x76DC419 }
+_tbl[5] = { 0x706AF48F }
+_tbl[6] = { 0xE963A535 }
+_tbl[7] = { 0x9E6495A3 }
+_tbl[8] = { 0xEDB8832 }
+_tbl[9] = { 0x79DCB8A4 }
+_tbl[10] = { 0xE0D5E91E }
+_tbl[11] = { 0x97D2D988 }
+_tbl[12] = { 0x9B64C2B }
+_tbl[13] = { 0x7EB17CBD }
+_tbl[14] = { 0xE7B82D07 }
+_tbl[15] = { 0x90BF1D91 }
+_tbl[16] = { 0x1DB71064 }
+_tbl[17] = { 0x6AB020F2 }
+_tbl[18] = { 0xF3B97148 }
+_tbl[19] = { 0x84BE41DE }
+_tbl[20] = { 0x1ADAD47D }
+_tbl[21] = { 0x6DDDE4EB }
+_tbl[22] = { 0xF4D4B551 }
+_tbl[23] = { 0x83D385C7 }
+_tbl[24] = { 0x136C9856 }
+_tbl[25] = { 0x646BA8C0 }
+_tbl[26] = { 0xFD62F97A }
+_tbl[27] = { 0x8A65C9EC }
+_tbl[28] = { 0x14015C4F }
+_tbl[29] = { 0x63066CD9 }
+_tbl[30] = { 0xFA0F3D63 }
+_tbl[31] = { 0x8D080DF5 }
+_tbl[32] = { 0x3B6E20C8 }
+_tbl[33] = { 0x4C69105E }
+_tbl[34] = { 0xD56041E4 }
+_tbl[35] = { 0xA2677172 }
+_tbl[36] = { 0x3C03E4D1 }
+_tbl[37] = { 0x4B04D447 }
+_tbl[38] = { 0xD20D85FD }
+_tbl[39] = { 0xA50AB56B }
+_tbl[40] = { 0x35B5A8FA }
+_tbl[41] = { 0x42B2986C }
+_tbl[42] = { 0xDBBBC9D6 }
+_tbl[43] = { 0xACBCF940 }
+_tbl[44] = { 0x32D86CE3 }
+_tbl[45] = { 0x45DF5C75 }
+_tbl[46] = { 0xDCD60DCF }
+_tbl[47] = { 0xABD13D59 }
+_tbl[48] = { 0x26D930AC }
+_tbl[49] = { 0x51DE003A }
+_tbl[50] = { 0xC8D75180 }
+_tbl[51] = { 0xBFD06116 }
+_tbl[52] = { 0x21B4F4B5 }
+_tbl[53] = { 0x56B3C423 }
+_tbl[54] = { 0xCFBA9599 }
+_tbl[55] = { 0xB8BDA50F }
+_tbl[56] = { 0x2802B89E }
+_tbl[57] = { 0x5F058808 }
+_tbl[58] = { 0xC60CD9B2 }
+_tbl[59] = { 0xB10BE924 }
+_tbl[60] = { 0x2F6F7C87 }
+_tbl[61] = { 0x58684C11 }
+_tbl[62] = { 0xC1611DAB }
+_tbl[63] = { 0xB6662D3D }
+_tbl[64] = { 0x76DC4190 }
+_tbl[65] = { 0x1DB7106 }
+_tbl[66] = { 0x98D220BC }
+_tbl[67] = { 0xEFD5102A }
+_tbl[68] = { 0x71B18589 }
+_tbl[69] = { 0x6B6B51F }
+_tbl[70] = { 0x9FBFE4A5 }
+_tbl[71] = { 0xE8B8D433 }
+_tbl[72] = { 0x7807C9A2 }
+_tbl[73] = { 0xF00F934 }
+_tbl[74] = { 0x9609A88E }
+_tbl[75] = { 0xE10E9818 }
+_tbl[76] = { 0x7F6A0DBB }
+_tbl[77] = { 0x86D3D2D }
+_tbl[78] = { 0x91646C97 }
+_tbl[79] = { 0xE6635C01 }
+_tbl[80] = { 0x6B6B51F4 }
+_tbl[81] = { 0x1C6C6162 }
+_tbl[82] = { 0x856530D8 }
+_tbl[83] = { 0xF262004E }
+_tbl[84] = { 0x6C0695ED }
+_tbl[85] = { 0x1B01A57B }
+_tbl[86] = { 0x8208F4C1 }
+_tbl[87] = { 0xF50FC457 }
+_tbl[88] = { 0x65B0D9C6 }
+_tbl[89] = { 0x12B7E950 }
+_tbl[90] = { 0x8BBEB8EA }
+_tbl[91] = { 0xFCB9887C }
+_tbl[92] = { 0x62DD1DDF }
+_tbl[93] = { 0x15DA2D49 }
+_tbl[94] = { 0x8CD37CF3 }
+_tbl[95] = { 0xFBD44C65 }
+_tbl[96] = { 0x4DB26158 }
+_tbl[97] = { 0x3AB551CE }
+_tbl[98] = { 0xA3BC0074 }
+_tbl[99] = { 0xD4BB30E2 }
+_tbl[100] = { 0x4ADFA541 }
+_tbl[101] = { 0x3DD895D7 }
+_tbl[102] = { 0xA4D1C46D }
+_tbl[103] = { 0xD3D6F4FB }
+_tbl[104] = { 0x4369E96A }
+_tbl[105] = { 0x346ED9FC }
+_tbl[106] = { 0xAD678846 }
+_tbl[107] = { 0xDA60B8D0 }
+_tbl[108] = { 0x44042D73 }
+_tbl[109] = { 0x33031DE5 }
+_tbl[110] = { 0xAA0A4C5F }
+_tbl[111] = { 0xDD0D7CC9 }
+_tbl[112] = { 0x5005713C }
+_tbl[113] = { 0x270241AA }
+_tbl[114] = { 0xBE0B1010 }
+_tbl[115] = { 0xC90C2086 }
+_tbl[116] = { 0x5768B525 }
+_tbl[117] = { 0x206F85B3 }
+_tbl[118] = { 0xB966D409 }
+_tbl[119] = { 0xCE61E49F }
+_tbl[120] = { 0x5EDEF90E }
+_tbl[121] = { 0x29D9C998 }
+_tbl[122] = { 0xB0D09822 }
+_tbl[123] = { 0xC7D7A8B4 }
+_tbl[124] = { 0x59B33D17 }
+_tbl[125] = { 0x2EB40D81 }
+_tbl[126] = { 0xB7BD5C3B }
+_tbl[127] = { 0xC0BA6CAD }
+_tbl[128] = { 0xEDB88320 }
+_tbl[129] = { 0x9ABFB3B6 }
+_tbl[130] = { 0x3B6E20C }
+_tbl[131] = { 0x74B1D29A }
+_tbl[132] = { 0xEAD54739 }
+_tbl[133] = { 0x9DD277AF }
+_tbl[134] = { 0x4DB2615 }
+_tbl[135] = { 0x73DC1683 }
+_tbl[136] = { 0xE3630B12 }
+_tbl[137] = { 0x94643B84 }
+_tbl[138] = { 0xD6D6A3E }
+_tbl[139] = { 0x7A6A5AA8 }
+_tbl[140] = { 0xE40ECF0B }
+_tbl[141] = { 0x9309FF9D }
+_tbl[142] = { 0xA00AE27 }
+_tbl[143] = { 0x7D079EB1 }
+_tbl[144] = { 0xF00F9344 }
+_tbl[145] = { 0x8708A3D2 }
+_tbl[146] = { 0x1E01F268 }
+_tbl[147] = { 0x6906C2FE }
+_tbl[148] = { 0xF762575D }
+_tbl[149] = { 0x806567CB }
+_tbl[150] = { 0x196C3671 }
+_tbl[151] = { 0x6E6B06E7 }
+_tbl[152] = { 0xFED41B76 }
+_tbl[153] = { 0x89D32BE0 }
+_tbl[154] = { 0x10DA7A5A }
+_tbl[155] = { 0x67DD4ACC }
+_tbl[156] = { 0xF9B9DF6F }
+_tbl[157] = { 0x8EBEEFF9 }
+_tbl[158] = { 0x17B7BE43 }
+_tbl[159] = { 0x60B08ED5 }
+_tbl[160] = { 0xD6D6A3E8 }
+_tbl[161] = { 0xA1D1937E }
+_tbl[162] = { 0x38D8C2C4 }
+_tbl[163] = { 0x4FDFF252 }
+_tbl[164] = { 0xD1BB67F1 }
+_tbl[165] = { 0xA6BC5767 }
+_tbl[166] = { 0x3FB506DD }
+_tbl[167] = { 0x48B2364B }
+_tbl[168] = { 0xD80D2BDA }
+_tbl[169] = { 0xAF0A1B4C }
+_tbl[170] = { 0x36034AF6 }
+_tbl[171] = { 0x41047A60 }
+_tbl[172] = { 0xDF60EFC3 }
+_tbl[173] = { 0xA867DF55 }
+_tbl[174] = { 0x316E8EEF }
+_tbl[175] = { 0x4669BE79 }
+_tbl[176] = { 0xCB61B38C }
+_tbl[177] = { 0xBC66831A }
+_tbl[178] = { 0x256FD2A0 }
+_tbl[179] = { 0x5268E236 }
+_tbl[180] = { 0xCC0C7795 }
+_tbl[181] = { 0xBB0B4703 }
+_tbl[182] = { 0x220216B9 }
+_tbl[183] = { 0x5505262F }
+_tbl[184] = { 0xC5BA3BBE }
+_tbl[185] = { 0xB2BD0B28 }
+_tbl[186] = { 0x2BB45A92 }
+_tbl[187] = { 0x5CB36A04 }
+_tbl[188] = { 0xC2D7FFA7 }
+_tbl[189] = { 0xB5D0CF31 }
+_tbl[190] = { 0x2CD99E8B }
+_tbl[191] = { 0x5BDEAE1D }
+_tbl[192] = { 0x9B64C2B0 }
+_tbl[193] = { 0xEC63F226 }
+_tbl[194] = { 0x756AA39C }
+_tbl[195] = { 0x26D930A }
+_tbl[196] = { 0x9C0906A9 }
+_tbl[197] = { 0xEB0E363F }
+_tbl[198] = { 0x72076785 }
+_tbl[199] = { 0x5005713 }
+_tbl[200] = { 0x95BF4A82 }
+_tbl[201] = { 0xE2B87A14 }
+_tbl[202] = { 0x7BB12BAE }
+_tbl[203] = { 0xCB61B38 }
+_tbl[204] = { 0x92D28E9B }
+_tbl[205] = { 0xE5D5BE0D }
+_tbl[206] = { 0x7CDCEFB7 }
+_tbl[207] = { 0xBDBDF21 }
+_tbl[208] = { 0x86D3D2D4 }
+_tbl[209] = { 0xF1D4E242 }
+_tbl[210] = { 0x68DDB3F8 }
+_tbl[211] = { 0x1FDA836E }
+_tbl[212] = { 0x81BE16CD }
+_tbl[213] = { 0xF6B9265B }
+_tbl[214] = { 0x6FB077E1 }
+_tbl[215] = { 0x18B74777 }
+_tbl[216] = { 0x88085AE6 }
+_tbl[217] = { 0xFF0F6A70 }
+_tbl[218] = { 0x66063BCA }
+_tbl[219] = { 0x11010B5C }
+_tbl[220] = { 0x8F659EFF }
+_tbl[221] = { 0xF862AE69 }
+_tbl[222] = { 0x616BFFD3 }
+_tbl[223] = { 0x166CCF45 }
+_tbl[224] = { 0xA00AE278 }
+_tbl[225] = { 0xD70DD2EE }
+_tbl[226] = { 0x4E048354 }
+_tbl[227] = { 0x3903B3C2 }
+_tbl[228] = { 0xA7672661 }
+_tbl[229] = { 0xD06016F7 }
+_tbl[230] = { 0x4969474D }
+_tbl[231] = { 0x3E6E77DB }
+_tbl[232] = { 0xAED16A4A }
+_tbl[233] = { 0xD9D65ADC }
+_tbl[234] = { 0x40DF0B66 }
+_tbl[235] = { 0x37D83BF0 }
+_tbl[236] = { 0xA9BCAE53 }
+_tbl[237] = { 0xDEBB9EC5 }
+_tbl[238] = { 0x47B2CF7F }
+_tbl[239] = { 0x30B5FFE9 }
+_tbl[240] = { 0xBDBDF21C }
+_tbl[241] = { 0xCABAC28A }
+_tbl[242] = { 0x53B39330 }
+_tbl[243] = { 0x24B4A3A6 }
+_tbl[244] = { 0xBAD03605 }
+_tbl[245] = { 0xCDD70693 }
+_tbl[246] = { 0x54DE5729 }
+_tbl[247] = { 0x23D967BF }
+_tbl[248] = { 0xB3667A2E }
+_tbl[249] = { 0xC4614AB8 }
+_tbl[250] = { 0x5D681B02 }
+_tbl[251] = { 0x2A6F2B94 }
+_tbl[252] = { 0xB40BBE37 }
+_tbl[253] = { 0xC30C8EA1 }
+_tbl[254] = { 0x5A05DF1B }
+_tbl[255] = { 0x2D02EF8D }
+
+
+       -- Calculate it
+       local ret = 0
+       for i,item in pairs(data) do
+               local tmp =  band(ret, 0xFF)
+               local index = band( bxor(tmp, item), 0xFF)
+               ret = bxor(rshift(ret,8), _tbl[index][1])
+       end
+       return ret
+end
+---
+-- update checksum
+-- called: data is string, ( >= 24 hex digits )
+-- returns: string, (data concat new checksum)
+local function updateChecksum(data)
+       local part = data:sub(1,24)
+       local chksum = calculateChecksum( utils.ConvertHexToBytes(part))        
+       return string.format("%s%X", part, chksum)
+end
+---
+-- receives the answer from deviceside, used with a readblock command
+local function waitCmd()
+       local response = core.WaitForResponseTimeout(cmds.CMD_ACK,TIMEOUT)
+       if response then
+               local count,cmd,arg0 = bin.unpack('LL',response)
+               if(arg0==1) then
+                       local count,arg1,arg2,data = bin.unpack('LLH511',response,count)
+                       return data:sub(1,32)
+               else
+                       return nil, "Couldn't read block.." 
+               end
+       end
+       return nil, "No response from device"
+end
+
+local function selftest()
+       local testdata = '000F42430D0A14000001D11F'..'5D738517'
+       local chksum = getChecksum(testdata)
+       local calc = calculateChecksum( utils.ConvertHexToBytes(testdata:sub(1,24)))    
+       print  ('TESTDATA    :: '..testdata)
+       print  ('DATA        :: '..testdata:sub(1,24))
+       print (('CHKSUM      :: %X'):format(chksum))    
+       print (('CHKSUM CALC :: %X'):format(calc))      
+       print ('UPDATE CHKSUM :: '..updateChecksum(testdata))
+       
+       
+end
+--- 
+-- The main entry point
+-- -d decrypt
+-- -e encrypt
+-- -v validate
+function main(args)
+
+       local cmd, result, err, blockNo, keyA
+       local blocks = {}
+       local decryptkey = ''
+       
+       -- Read the parameters
+       for o, a in getopt.getopt(args, 'hk:') do
+               if o == "h" then help() return end
+               if o == "k" then keyA = a end
+       end
+       
+       selftest()
+       
+       local tst2 = '00100100030209094312356432324E34B79A349B'
+       
+       -- validate input args.
+       keyA =  keyA or '6dd747e86975'
+       if #(keyA) ~= 12 then
+               return oops( string.format('Wrong length of write key (was %d) expected 12', #keyA))
+       end
+       
+       -- Turn off Debug
+       local cmdSetDbgOff = "hf mf dbg 0"
+       core.console( cmdSetDbgOff) 
+
+       -- GET TAG UID
+       
+       result, err = lib14a.read1443a(false)
+       if not result then
+               return oops(err)
+       end
+
+       core.clearCommandBuffer()
+
+       print(result.uid, keyA)
+
+       local my = result.uid
+       if 1 == 1 then 
+               return
+       end
+       
+       -- Show tag info
+       print((' Found tag %s'):format(result.name))
+       
+       local longrandom = RANDOM..result.uid
+       local res = utils.Sha1Hex(longrandom)
+       res  = utils.ConvertBytesToHex(utils.ConvertAsciiToBytes(res:sub(1,16)))
+       decryptkey = utils.SwapEndiannessStr(res:sub(1,8) , 32)
+       decryptkey = decryptkey..utils.SwapEndiannessStr( res:sub(9,16),32)
+       decryptkey = decryptkey..utils.SwapEndiannessStr( res:sub(17,24),32)
+       decryptkey = decryptkey..utils.SwapEndiannessStr( res:sub(25,32),32)
+       print('Decrypt key::',decryptkey)
+       print('Reading card data')
+       print('Raw','Decrypted')
+       for blockNo = 0, numBlocks-1, 1 do
+
+               if core.ukbhit() then
+                       print("aborted by user")
+                       break
+               end
+
+               cmd = Command:new{cmd = cmds.CMD_MIFARE_READBL, arg1 = blockNo ,arg2 = 0,arg3 = 0, data = keyA}
+               local err = core.SendCommand(cmd:getBytes())
+               if err then return oops(err) end
+               local blockdata, err = waitCmd()
+               if err then return oops(err) end        
+                       
+               if  blockNo%4 ~= 3 then
+                       
+                       -- blocks with zero not encrypted.
+                       if string.find(blockdata, '^0+$') then
+                               print(blockdata, blockdata)
+                       else
+                               local aes = core.aes128_decrypt_ecb(decryptkey, blockdata)
+                               local bytes =  utils.ConvertAsciiToBytes(aes)
+                               local hex = utils.ConvertBytesToHex(bytes)
+                               print(blockdata , hex)
+                       end
+               elseif blockNo == 0 then
+                       print(blockdata,blockdata)
+               else
+                       -- Sectorblocks, not encrypted
+                       local sectortrailer = keyA..blockdata:sub(13,20)..keyA
+                       print(sectortrailer, sectortrailer, blockdata:sub(13,20))
+               end
+       end
+       -- checksum fyra sista bytes i varje rad.  (kanske inte för s0)
+       -- s0b1,s1b0,s2b0,s3b0
+       -- 
+end
+
+main(args)
index f9b715091c7e2ebe92b2532d02f4249c13538501..f8cc11d455da2fa0bbea72fab9bb0c389b680d0d 100644 (file)
@@ -73,7 +73,8 @@ local function convert_to_emulform(hexdata)
        for i = 1, string.len(hexdata),32 do
                ascii = ascii  ..string.sub(hexdata,i,i+31).."\n"
        end
-       return ascii
+       
+       return string.sub(ascii,1,-1)
 end
 
 local function main(args)
index eb98ffbf753809d64188a47448286e5760735498..ce6db3c00767091c2ab5cd3a61e7d643bcea8d5a 100644 (file)
@@ -88,10 +88,35 @@ function mfcrack_inner()
        while not core.ukbhit() do              
                local result = core.WaitForResponseTimeout(cmds.CMD_ACK,1000)
                if result then
-                       -- Unpacking the three arg-parameters
-                       local count,cmd,isOK = bin.unpack('LL',result)
 
-                       if isOK ~= 1 then return nil, "Error occurred" end
+                       --[[
+                       I don't understand, they cmd and args are defined as uint32_t, however, 
+                       looking at the returned data, they all look like 64-bit things: 
+
+                       print("result", bin.unpack("HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH", result))
+
+                       FF      00      00      00      00      00      00      00      <-- 64 bits of data
+                       FE      FF      FF      FF      00      00      00      00      <-- 64 bits of data
+                       00      00      00      00      00      00      00      00      <-- 64 bits of data
+                       00      00      00      00      00      00      00      00      <-- 64 bits of data
+                       04      7F      12      E2      00             <-- this is where 'data' starts
+
+                       So below I use LI to pick out the "FEFF FFFF", don't know why it works.. 
+                       --]]
+                       -- Unpacking the arg-parameters
+                       local count,cmd,isOK = bin.unpack('LI',result)
+                       --print("response", isOK)--FF FF FF FF
+                       if isOK == 0xFFFFFFFF then
+                               return nil, "Button pressed. Aborted."
+                       elseif isOK == 0xFFFFFFFE then
+                               return nil, "Card is not vulnerable to Darkside attack (doesn't send NACK on authentication requests). You can try 'script run mfkeys' or 'hf mf chk' to test various known keys."
+                       elseif isOK == 0xFFFFFFFD then
+                               return nil, "Card is not vulnerable to Darkside attack (its random number generator is not predictable). You can try 'script run mfkeys' or 'hf mf chk' to test various known keys."
+                       elseif isOK == 0xFFFFFFFC then
+                               return nil, "The card's random number generator behaves somewhat weird (Mifare clone?). You can try 'script run mfkeys' or 'hf mf chk' to test various known keys."
+                       elseif isOK ~= 1 then 
+                               return nil, "Error occurred" 
+                       end
 
 
                        -- The data-part is left
index cea9f7d734a81150d1f5536118364552dcbfa807..9b99cdf1a9fbe0a037248fd1a4de2b4701fb1342 100644 (file)
@@ -9,11 +9,13 @@
 //-----------------------------------------------------------------------------
 
 #include "util.h"
+#define MAX_BIN_BREAK_LENGTH   (3072+384+1)
 
 #ifndef _WIN32
 #include <termios.h>
 #include <sys/ioctl.h> 
 
+
 int ukbhit(void)
 {
   int cnt = 0;
@@ -21,7 +23,7 @@ int ukbhit(void)
   static struct termios Otty, Ntty;
 
 
-  tcgetattr( 0, &Otty);
+  if ( tcgetattr( 0, &Otty) == -1 ) return -1;
   Ntty = Otty;
 
   Ntty.c_iflag          = 0;       /* input mode                */
@@ -92,7 +94,7 @@ void FillFileNameByUID(char *fileName, uint8_t * uid, char *ext, int byteCount)
        memset(fileName, 0x00, 200);
        
        for (int j = 0; j < byteCount; j++, fnameptr += 2)
-               sprintf(fnameptr, "%02x", uid[j]); 
+               sprintf(fnameptr, "%02x", (unsigned int) uid[j]); 
        sprintf(fnameptr, "%s", ext); 
 }
 
@@ -108,31 +110,46 @@ void print_hex(const uint8_t * data, const size_t len)
        printf("\n");
 }
 
-char * sprint_hex(const uint8_t * data, const size_t len) {
+char *sprint_hex(const uint8_t *data, const size_t len) {
        
        int maxLen = ( len > 1024/3) ? 1024/3 : len;
        static char buf[1024];
        memset(buf, 0x00, 1024);
-       char * tmp = buf;
+       char *tmp = buf;
        size_t i;
 
        for (i=0; i < maxLen; ++i, tmp += 3)
-               sprintf(tmp, "%02x ", data[i]);
+               sprintf(tmp, "%02x ", (unsigned int) data[i]);
 
        return buf;
 }
 
 char *sprint_bin_break(const uint8_t *data, const size_t len, const uint8_t breaks) {
-       
-       int maxLen = ( len > 1020) ? 1020 : len;
-       static char buf[1024];
-       memset(buf, 0x00, 1024);
+       // make sure we don't go beyond our char array memory
+       int max_len;
+       if (breaks==0)
+               max_len = ( len > MAX_BIN_BREAK_LENGTH ) ? MAX_BIN_BREAK_LENGTH : len;
+       else
+               max_len = ( len+(len/breaks) > MAX_BIN_BREAK_LENGTH ) ? MAX_BIN_BREAK_LENGTH : len+(len/breaks);
+
+       static char buf[MAX_BIN_BREAK_LENGTH]; // 3072 + end of line characters if broken at 8 bits
+       //clear memory
+       memset(buf, 0x00, sizeof(buf));
        char *tmp = buf;
 
-       for (size_t i=0; i < maxLen; ++i){
-               sprintf(tmp++, "%u", data[i]);
-               if (breaks > 0 && !((i+1) % breaks))
+       size_t in_index = 0;
+       // loop through the out_index to make sure we don't go too far
+       for (size_t out_index=0; out_index < max_len; out_index++) {
+               // set character - (should be binary but verify it isn't more than 1 digit)
+               if (data[in_index]<10)
+                       sprintf(tmp++, "%u", (unsigned int) data[in_index]);
+               // check if a line break is needed and we have room to print it in our array
+               if ( (breaks > 0) && !((in_index+1) % breaks) && (out_index+1 != max_len) ) {
+                       // increment and print line break
+                       out_index++;
                        sprintf(tmp++, "%s","\n");
+               }
+               in_index++;
        }
 
        return buf;
@@ -160,6 +177,13 @@ uint64_t bytes_to_num(uint8_t* src, size_t len)
        return num;
 }
 
+void num_to_bytebits(uint64_t  n, size_t len, uint8_t *dest) {
+       while (len--) {
+               dest[len] = n & 1;
+               n >>= 1;
+       }
+}
+
 // aa,bb,cc,dd,ee,ff,gg,hh, ii,jj,kk,ll,mm,nn,oo,pp
 // to
 // hh,gg,ff,ee,dd,cc,bb,aa, pp,oo,nn,mm,ll,kk,jj,ii
@@ -191,7 +215,7 @@ char * printBits(size_t const size, void const * const ptr)
         {
             byte = b[i] & (1<<j);
             byte >>= j;
-            sprintf(tmp, "%u", byte);
+            sprintf(tmp, "%u", (unsigned int)byte);
                        tmp++;
         }
     }
@@ -248,7 +272,7 @@ char param_getchar(const char *line, int paramnum)
 
 uint8_t param_get8(const char *line, int paramnum)
 {
-       return param_get8ex(line, paramnum, 10, 0);
+       return param_get8ex(line, paramnum, 0, 10);
 }
 
 /**
@@ -333,7 +357,28 @@ int param_gethex(const char *line, int paramnum, uint8_t * data, int hexcnt)
 
        return 0;
 }
+int param_gethex_ex(const char *line, int paramnum, uint8_t * data, int *hexcnt)
+{
+       int bg, en, temp, i;
+
+       //if (hexcnt % 2)
+       //      return 1;
+       
+       if (param_getptr(line, &bg, &en, paramnum)) return 1;
 
+       *hexcnt = en - bg + 1;
+       if (*hexcnt % 2) //error if not complete hex bytes
+               return 1;
+
+       for(i = 0; i < *hexcnt; i += 2) {
+               if (!(isxdigit(line[bg + i]) && isxdigit(line[bg + i + 1])) )   return 1;
+               
+               sscanf((char[]){line[bg + i], line[bg + i + 1], 0}, "%X", &temp);
+               data[i / 2] = temp & 0xff;
+       }       
+
+       return 0;
+}
 int param_getstr(const char *line, int paramnum, char * str)
 {
        int bg, en;
@@ -394,7 +439,7 @@ int hextobinstring(char *target, char *source)
 
 // convert binary array of 0x00/0x01 values to hex (safe to do in place as target will always be shorter than source)
 // return number of bits converted
-int binarraytohex(char *target, char *source, int length)
+int binarraytohex(char *target,char *source, int length)
 {
     unsigned char i, x;
     int j = length;
@@ -406,7 +451,7 @@ int binarraytohex(char *target, char *source, int length)
     {
         for(i= x= 0 ; i < 4 ; ++i)
             x +=  ( source[i] << (3 - i));
-        sprintf(target,"%X", x);
+        sprintf(target,"%X", (unsigned int)x);
         ++target;
         source += 4;
         j -= 4;
@@ -425,7 +470,7 @@ void binarraytobinstring(char *target, char *source,  int length)
 }
 
 // return parity bit required to match type
-uint8_t GetParity( char *bits, uint8_t type, int length)
+uint8_t GetParity( uint8_t *bits, uint8_t type, int length)
 {
     int x;
 
@@ -437,10 +482,29 @@ uint8_t GetParity( char *bits, uint8_t type, int length)
 }
 
 // add HID parity to binary array: EVEN prefix for 1st half of ID, ODD suffix for 2nd half
-void wiegand_add_parity(char *target, char *source, char length)
+void wiegand_add_parity(uint8_t *target, uint8_t *source, uint8_t length)
 {
     *(target++)= GetParity(source, EVEN, length / 2);
     memcpy(target, source, length);
     target += length;
     *(target)= GetParity(source + length / 2, ODD, length / 2);
 }
+
+void xor(unsigned char *dst, unsigned char *src, size_t len) {
+   for( ; len > 0; len--,dst++,src++)
+       *dst ^= *src;
+}
+
+int32_t le24toh (uint8_t data[3]) {
+    return (data[2] << 16) | (data[1] << 8) | data[0];
+}
+
+// RotateLeft - Ultralight, Desfire, works on byte level
+// 00-01-02  >> 01-02-00
+void rol(uint8_t *data, const size_t len){
+    uint8_t first = data[0];
+    for (size_t i = 0; i < len-1; i++) {
+        data[i] = data[i+1];
+    }
+    data[len-1] = first;
+}
index f58f64cb47200defd20fb82aa084bebd5dccf18e..5674adcfdd07e26666b04560b242a1b03b8acf14 100644 (file)
@@ -17,6 +17,9 @@
 #include <time.h>
 #include "data.h"
 
+#ifndef ROTR
+# define ROTR(x,n) (((uintmax_t)(x) >> (n)) | ((uintmax_t)(x) << ((sizeof(x) * 8) - (n))))
+#endif
 #ifndef MIN
 # define MIN(a, b) (((a) < (b)) ? (a) : (b))
 #endif
@@ -43,10 +46,12 @@ char * sprint_bin_break(const uint8_t *data, const size_t len, const uint8_t bre
 
 void num_to_bytes(uint64_t n, size_t len, uint8_t* dest);
 uint64_t bytes_to_num(uint8_t* src, size_t len);
+void num_to_bytebits(uint64_t  n, size_t len, uint8_t *dest);
 char * printBits(size_t const size, void const * const ptr);
 uint8_t *SwapEndian64(const uint8_t *src, const size_t len, const uint8_t blockSize);
 
 char param_getchar(const char *line, int paramnum);
+int param_getptr(const char *line, int *bg, int *en, int paramnum);
 uint8_t param_get8(const char *line, int paramnum);
 uint8_t param_get8ex(const char *line, int paramnum, int deflt, int base);
 uint32_t param_get32ex(const char *line, int paramnum, int deflt, int base);
@@ -54,12 +59,16 @@ uint64_t param_get64ex(const char *line, int paramnum, int deflt, int base);
 uint8_t param_getdec(const char *line, int paramnum, uint8_t *destination);
 uint8_t param_isdec(const char *line, int paramnum);
 int param_gethex(const char *line, int paramnum, uint8_t * data, int hexcnt);
+int param_gethex_ex(const char *line, int paramnum, uint8_t * data, int *hexcnt);
 int param_getstr(const char *line, int paramnum, char * str);
 
  int hextobinarray( char *target,  char *source);
  int hextobinstring( char *target,  char *source);
  int binarraytohex( char *target,  char *source,  int length);
 void binarraytobinstring(char *target,  char *source,  int length);
-uint8_t GetParity( char *string, uint8_t type,  int length);
-void wiegand_add_parity(char *target, char *source, char length);
+uint8_t GetParity( uint8_t *string, uint8_t type,  int length);
+void wiegand_add_parity(uint8_t *target, uint8_t *source, uint8_t length);
 
+void xor(unsigned char *dst, unsigned char *src, size_t len);
+int32_t le24toh(uint8_t data[3]);
+void rol(uint8_t *data, const size_t len);
index 2b2bb2fbd7c47fa514d5d2c05dadd890b9a69400..7c94e041cee0551313f7494d74dc5e1752089d17 100644 (file)
@@ -25,6 +25,7 @@ CC    = $(CROSS)gcc
 AS     = $(CROSS)as
 LD     = $(CROSS)ld
 OBJCOPY = $(CROSS)objcopy
+GZIP=gzip
 
 OBJDIR = obj
 
@@ -61,19 +62,19 @@ DETECTED_OS=Windows
 endif
 
 
-# Also search prerequisites in the common directory (for usb.c), and the fpga directory (for fpga.bit)
-VPATH = . ../common/ ../fpga/
+# Also search prerequisites in the common directory (for usb.c), the fpga directory (for fpga.bit), and the zlib directory
+VPATH = . ../common ../fpga ../zlib
 
 INCLUDES = ../include/proxmark3.h ../include/at91sam7s512.h ../include/config_gpio.h ../include/usb_cmd.h $(APP_INCLUDES)
 
-CFLAGS =  -c $(INCLUDE) -Wall -Werror -pedantic -std=c99 $(APP_CFLAGS) -Os
+CFLAGS =  -c $(INCLUDE) -Wall -Werror -pedantic -std=c99 -Os $(APP_CFLAGS)
 LDFLAGS = -nostartfiles -nodefaultlibs -Wl,-gc-sections -n
 
 LIBS = -lgcc
 
-THUMBOBJ = $(patsubst %.c,$(OBJDIR)/%.o,$(THUMBSRC))
-ARMOBJ   = $(ARMSRC:%.c=$(OBJDIR)/%.o)
-ASMOBJ   = $(patsubst %.s,$(OBJDIR)/%.o,$(ASMSRC))
+THUMBOBJ = $(patsubst %.c,$(OBJDIR)/%.o,$(notdir $(THUMBSRC)))
+ARMOBJ   = $(patsubst %.c,$(OBJDIR)/%.o,$(notdir $(ARMSRC)))
+ASMOBJ   = $(patsubst %.s,$(OBJDIR)/%.o,$(notdir $(ASMSRC)))
 VERSIONOBJ = $(OBJDIR)/version.o
 
 $(THUMBOBJ): $(OBJDIR)/%.o: %.c $(INCLUDES)
@@ -109,6 +110,7 @@ DEPENDENCY_FILES = $(patsubst %.c,$(OBJDIR)/%.d,$(notdir $(THUMBSRC))) \
        $(patsubst %.s,$(OBJDIR)/%.d,$(notdir $(ASMSRC)))
 
 $(DEPENDENCY_FILES): Makefile ../common/Makefile.common
+
 $(patsubst %.o,%.d,$(THUMBOBJ) $(ARMOBJ)): $(OBJDIR)/%.d: %.c
        @$(CC) -MM -MT "$(@) $(@:.d=.o)" $(CFLAGS) $< > $@
 $(patsubst %.o,%.d,$(ASMOBJ)):$(OBJDIR)/%.d: %.s
index adbfb237c8cd3671dc26db260833af94c6188640..946be8a1a4be31cd1b98935988a07f3d9bc38ce8 100644 (file)
@@ -26,7 +26,7 @@ typedef struct crc {
  * final_xor is XORed onto the state before returning it from crc_result(). */
 extern void crc_init(crc_t *crc, int order, uint32_t polynom, uint32_t initial_value, uint32_t final_xor);
 
-/* Update the crc state. data is the data of length data_width bits (only the the
+/* Update the crc state. data is the data of length data_width bits (only the
  * data_width lower-most bits are used).
  */
 extern void crc_update(crc_t *crc, uint32_t data, int data_width);
index 973cd103c009b16697b7523b1cbf60b107500f7a..a37f1d7e35f69e63e6fba2259f0a011b8f1bf4ec 100644 (file)
@@ -8,38 +8,54 @@
 
 #include "crc16.h"
 
-
 unsigned short update_crc16( unsigned short crc, unsigned char c )
 {
-  unsigned short i, v, tcrc = 0;
+       unsigned short i, v, tcrc = 0;
 
-  v = (crc ^ c) & 0xff;
-  for (i = 0; i < 8; i++) {
-      tcrc = ( (tcrc ^ v) & 1 ) ? ( tcrc >> 1 ) ^ 0x8408 : tcrc >> 1;
-      v >>= 1;
-  }
+       v = (crc ^ c) & 0xff;
+       for (i = 0; i < 8; i++) {
+               tcrc = ( (tcrc ^ v) & 1 ) ? ( tcrc >> 1 ) ^ 0x8408 : tcrc >> 1;
+               v >>= 1;
+       }
 
-  return ((crc >> 8) ^ tcrc)&0xffff;
+       return ((crc >> 8) ^ tcrc)&0xffff;
 }
 
 uint16_t crc16(uint8_t const *message, int length, uint16_t remainder, uint16_t polynomial) {
-    
-       if (length == 0)
-        return (~remainder);
-                       
-    for (int byte = 0; byte < length; ++byte) {
-        remainder ^= (message[byte] << 8);
-        for (uint8_t bit = 8; bit > 0; --bit) {
-            if (remainder & 0x8000) {
-                remainder = (remainder << 1) ^ polynomial;
-            } else {
-                remainder = (remainder << 1);
-            }
-        }
-    }
-    return remainder;
+
+       if (length == 0) return (~remainder);
+
+       for (int byte = 0; byte < length; ++byte) {
+               remainder ^= (message[byte] << 8);
+               for (uint8_t bit = 8; bit > 0; --bit) {
+                       if (remainder & 0x8000) {
+                               remainder = (remainder << 1) ^ polynomial;
+                       } else {
+                               remainder = (remainder << 1);
+                       }
+               }
+       }
+       return remainder;
 }
 
 uint16_t crc16_ccitt(uint8_t const *message, int length) {
-    return crc16(message, length, 0xffff, 0x1021);
+       return crc16(message, length, 0xffff, 0x1021);
+}
+
+uint16_t crc16_ccitt_kermit(uint8_t const *message, int length) {
+       return bit_reverse_uint16(crc16(message, length, 0x0000, 0x1021));
+}
+
+uint16_t bit_reverse_uint16 (uint16_t value) {
+       const uint16_t mask0 = 0x5555;
+       const uint16_t mask1 = 0x3333;
+       const uint16_t mask2 = 0x0F0F;
+       const uint16_t mask3 = 0x00FF;
+
+       value = (((~mask0) & value) >> 1) | ((mask0 & value) << 1);
+       value = (((~mask1) & value) >> 2) | ((mask1 & value) << 2);
+       value = (((~mask2) & value) >> 4) | ((mask2 & value) << 4);
+       value = (((~mask3) & value) >> 8) | ((mask3 & value) << 8);
+
+       return value;
 }
index d16d83b5afdb162c088e35e4a01aee33e2760e3d..8eb4befbcf1d7566cf0d7f8f73c370f29080e0ba 100644 (file)
@@ -12,4 +12,6 @@
 unsigned short update_crc16(unsigned short crc, unsigned char c);
 uint16_t crc16(uint8_t const *message, int length, uint16_t remainder, uint16_t polynomial);
 uint16_t crc16_ccitt(uint8_t const *message, int length);
+uint16_t crc16_ccitt_kermit(uint8_t const *message, int length);
+uint16_t bit_reverse_uint16 (uint16_t value);
 #endif
index 9f818beda95d583ca299624aa913031ab9ca0dce..b564681c73d2357079bfb2ec620f97b509d0fdcc 100644 (file)
@@ -2,7 +2,7 @@
 /* This is the default version.c file that Makefile.common falls back to if perl is not available */
 const struct version_information __attribute__((section(".version_information"))) version_information = { 
                VERSION_INFORMATION_MAGIC, 
-               1, /* version version 1 */
+               1, /* version 1 */
                0, /* version information not present */
                2, /* cleanliness couldn't be determined */
                /* Remaining fields: zero */
index 7d40d22e5aa44551835ae4ada1f69947f132e488..7398f1b2d74b5ec586a3b3a11ff0f0e6b25cf344 100644 (file)
@@ -9,8 +9,22 @@
 //-----------------------------------------------------------------------------
 
 #include <stdlib.h>
-#include <string.h>
 #include "lfdemod.h"
+#include <string.h>
+
+//to allow debug print calls when used not on device
+void dummy(char *fmt, ...){}
+
+#ifndef ON_DEVICE
+#include "ui.h"
+#include "cmdparser.h"
+#include "cmddata.h"
+#define prnt PrintAndLog
+#else 
+       uint8_t g_debugMode=0;
+#define prnt dummy
+#endif
+
 uint8_t justNoise(uint8_t *BitStream, size_t size)
 {
        static const uint8_t THRESHOLD = 123;
@@ -52,6 +66,81 @@ uint8_t parityTest(uint32_t bits, uint8_t bitLen, uint8_t pType)
        return (ans == pType);
 }
 
+// by marshmellow
+// takes a array of binary values, start position, length of bits per parity (includes parity bit),
+//   Parity Type (1 for odd; 0 for even; 2 Always 1's), and binary Length (length to run) 
+size_t removeParity(uint8_t *BitStream, size_t startIdx, uint8_t pLen, uint8_t pType, size_t bLen)
+{
+       uint32_t parityWd = 0;
+       size_t j = 0, bitCnt = 0;
+       for (int word = 0; word < (bLen); word+=pLen){
+               for (int bit=0; bit < pLen; bit++){
+                       parityWd = (parityWd << 1) | BitStream[startIdx+word+bit];
+                       BitStream[j++] = (BitStream[startIdx+word+bit]);
+               }
+               j--; // overwrite parity with next data
+               // if parity fails then return 0
+               if (pType == 2) { // then marker bit which should be a 1
+                       if (!BitStream[j]) return 0;
+               } else {
+                       if (parityTest(parityWd, pLen, pType) == 0) return 0;                   
+               }
+               bitCnt+=(pLen-1);
+               parityWd = 0;
+       }
+       // if we got here then all the parities passed
+       //return ID start index and size
+       return bitCnt;
+}
+
+// by marshmellow
+// takes a array of binary values, length of bits per parity (includes parity bit),
+//   Parity Type (1 for odd; 0 for even; 2 Always 1's), and binary Length (length to run)
+size_t addParity(uint8_t *BitSource, uint8_t *dest, uint8_t sourceLen, uint8_t pLen, uint8_t pType)
+{
+       uint32_t parityWd = 0;
+       size_t j = 0, bitCnt = 0;
+       for (int word = 0; word < sourceLen; word+=pLen-1) {
+               for (int bit=0; bit < pLen-1; bit++){
+                       parityWd = (parityWd << 1) | BitSource[word+bit];
+                       dest[j++] = (BitSource[word+bit]);
+               }
+               // if parity fails then return 0
+               if (pType == 2) { // then marker bit which should be a 1
+                       dest[j++]=1;
+               } else {
+                       dest[j++] = parityTest(parityWd, pLen-1, pType) ^ 1;
+               }
+               bitCnt += pLen;
+               parityWd = 0;
+       }
+       // if we got here then all the parities passed
+       //return ID start index and size
+       return bitCnt;
+}
+
+uint32_t bytebits_to_byte(uint8_t *src, size_t numbits)
+{
+       uint32_t num = 0;
+       for(int i = 0 ; i < numbits ; i++)
+       {
+               num = (num << 1) | (*src);
+               src++;
+       }
+       return num;
+}
+
+//least significant bit first
+uint32_t bytebits_to_byteLSBF(uint8_t *src, size_t numbits)
+{
+       uint32_t num = 0;
+       for(int i = 0 ; i < numbits ; i++)
+       {
+               num = (num << 1) | *(src + (numbits-(i+1)));
+       }
+       return num;
+}
+
 //by marshmellow
 //search for given preamble in given BitStream and return success=1 or fail=0 and startIndex and length
 uint8_t preambleSearch(uint8_t *BitStream, uint8_t *preamble, size_t pLen, size_t *size, size_t *startIdx)
@@ -128,6 +217,7 @@ int cleanAskRawDemod(uint8_t *BinStream, size_t *size, int clk, int invert, int
                                if (smplCnt > clk-(clk/4)-1) { //full clock
                                        if (smplCnt > clk + (clk/4)+1) { //too many samples
                                                errCnt++;
+                                               if (g_debugMode==2) prnt("DEBUG ASK: Modulation Error at: %u", i);
                                                BinStream[bitCnt++]=7;
                                        } else if (waveHigh) {
                                                BinStream[bitCnt++] = invert;
@@ -184,6 +274,7 @@ int askdemod(uint8_t *BinStream, size_t *size, int *clk, int *invert, int maxErr
        if (*clk==0 || start < 0) return -3;
        if (*invert != 1) *invert = 0;
        if (amp==1) askAmp(BinStream, *size);
+       if (g_debugMode==2) prnt("DEBUG ASK: clk %d, beststart %d", *clk, start);
 
        uint8_t initLoopMax = 255;
        if (initLoopMax > *size) initLoopMax = *size;
@@ -196,19 +287,21 @@ int askdemod(uint8_t *BinStream, size_t *size, int *clk, int *invert, int maxErr
        size_t errCnt = 0;
        // if clean clipped waves detected run alternate demod
        if (DetectCleanAskWave(BinStream, *size, high, low)) {
+               if (g_debugMode==2) prnt("DEBUG ASK: Clean Wave Detected - using clean wave demod");
                errCnt = cleanAskRawDemod(BinStream, size, *clk, *invert, high, low);
                if (askType) //askman
                        return manrawdecode(BinStream, size, 0);        
                else //askraw
                        return errCnt;
        }
+       if (g_debugMode==2) prnt("DEBUG ASK: Weak Wave Detected - using weak wave demod");
 
-       int lastBit;  //set first clock check - can go negative
+       int lastBit;              //set first clock check - can go negative
        size_t i, bitnum = 0;     //output counter
        uint8_t midBit = 0;
        uint8_t tol = 0;  //clock tolerance adjust - waves will be accepted as within the clock if they fall + or - this value + clock from last valid wave
-       if (*clk <= 32) tol = 1;    //clock tolerance may not be needed anymore currently set to + or - 1 but could be increased for poor waves or removed entirely
-       size_t MaxBits = 1024;
+       if (*clk <= 32) tol = 1;  //clock tolerance may not be needed anymore currently set to + or - 1 but could be increased for poor waves or removed entirely
+       size_t MaxBits = 3072;    //max bits to collect
        lastBit = start - *clk;
 
        for (i = start; i < *size; ++i) {
@@ -219,6 +312,7 @@ int askdemod(uint8_t *BinStream, size_t *size, int *clk, int *invert, int maxErr
                                BinStream[bitnum++] = *invert ^ 1;
                        } else if (i-lastBit >= *clk+tol) {
                                if (bitnum > 0) {
+                                       if (g_debugMode==2) prnt("DEBUG ASK: Modulation Error at: %u", i);
                                        BinStream[bitnum++]=7;
                                        errCnt++;                                               
                                } 
@@ -282,6 +376,16 @@ int manrawdecode(uint8_t * BitStream, size_t *size, uint8_t invert)
        return bestErr;
 }
 
+uint32_t manchesterEncode2Bytes(uint16_t datain) {
+       uint32_t output = 0;
+       uint8_t curBit = 0;
+       for (uint8_t i=0; i<16; i++) {
+               curBit = (datain >> (15-i) & 1);
+               output |= (1<<(((15-i)*2)+curBit));
+       }
+       return output;
+}
+
 //by marshmellow
 //encode binary data into binary manchester 
 int ManchesterEncode(uint8_t *BitStream, size_t size)
@@ -369,19 +473,21 @@ size_t fsk_wave_demod(uint8_t * dest, size_t size, uint8_t fchigh, uint8_t fclow
        if (fclow==0) fclow=8;
        //set the threshold close to 0 (graph) or 128 std to avoid static
        uint8_t threshold_value = 123; 
-
+       size_t preLastSample = 0;
+       size_t LastSample = 0;
+       size_t currSample = 0;
        // sync to first lo-hi transition, and threshold
 
        // Need to threshold first sample
-
-       if(dest[0] < threshold_value) dest[0] = 0;
+       // skip 160 samples to allow antenna/samples to settle
+       if(dest[160] < threshold_value) dest[0] = 0;
        else dest[0] = 1;
 
        size_t numBits = 0;
        // count cycles between consecutive lo-hi transitions, there should be either 8 (fc/8)
-       // or 10 (fc/10) cycles but in practice due to noise etc we may end up with with anywhere
+       // or 10 (fc/10) cycles but in practice due to noise etc we may end up with anywhere
        // between 7 to 11 cycles so fuzz it by treat anything <9 as 8 and anything else as 10
-       for(idx = 1; idx < size; idx++) {
+       for(idx = 161; idx < size-20; idx++) {
                // threshold current value
 
                if (dest[idx] < threshold_value) dest[idx] = 0;
@@ -389,13 +495,22 @@ size_t fsk_wave_demod(uint8_t * dest, size_t size, uint8_t fchigh, uint8_t fclow
 
                // Check for 0->1 transition
                if (dest[idx-1] < dest[idx]) { // 0 -> 1 transition
-                       if ((idx-last_transition)<(fclow-2)){            //0-5 = garbage noise
+                       preLastSample = LastSample;
+                       LastSample = currSample;
+                       currSample = idx-last_transition;
+                       if (currSample < (fclow-2)){            //0-5 = garbage noise (or 0-3)
                                //do nothing with extra garbage
-                       } else if ((idx-last_transition) < (fchigh-1)) { //6-8 = 8 waves
+                       } else if (currSample < (fchigh-1)) { //6-8 = 8 sample waves  or 3-6 = 5
+                               if (LastSample > (fchigh-2) && (preLastSample < (fchigh-1) || preLastSample     == 0 )){
+                                       dest[numBits-1]=1;  //correct previous 9 wave surrounded by 8 waves
+                               }
                                dest[numBits++]=1;
-                       } else if ((idx-last_transition) > (fchigh+1) && !numBits) { //12 + and first bit = garbage 
+
+                       } else if (currSample > (fchigh) && !numBits) { //12 + and first bit = garbage 
                                //do nothing with beginning garbage
-                       } else {                                         //9+ = 10 waves
+                       } else if (currSample == (fclow+1) && LastSample == (fclow-1)) { // had a 7 then a 9 should be two 8's
+                               dest[numBits++]=1;
+                       } else {                                         //9+ = 10 sample waves
                                dest[numBits++]=0;
                        }
                        last_transition = idx;
@@ -418,19 +533,8 @@ size_t aggregate_bits(uint8_t *dest, size_t size, uint8_t rfLen,
                
                //if lastval was 1, we have a 1->0 crossing
                if (dest[idx-1]==1) {
-                       if (!numBits && n < rfLen/fclow) {
-                               n=0;
-                               lastval = dest[idx];
-                               continue;
-                       }
                        n = (n * fclow + rfLen/2) / rfLen;
                } else {// 0->1 crossing 
-                       //test first bitsample too small
-                       if (!numBits && n < rfLen/fchigh) {
-                               n=0;
-                               lastval = dest[idx];
-                               continue;
-                       }
                        n = (n * fchigh + rfLen/2) / rfLen; 
                }
                if (n == 0) n = 1;
@@ -452,6 +556,7 @@ size_t aggregate_bits(uint8_t *dest, size_t size, uint8_t rfLen,
        }
        return numBits;
 }
+
 //by marshmellow  (from holiman's base)
 // full fsk demod from GraphBuffer wave to decoded 1s and 0s (no mandemod)
 int fskdemod(uint8_t *dest, size_t size, uint8_t rfLen, uint8_t invert, uint8_t fchigh, uint8_t fclow)
@@ -526,17 +631,6 @@ int ParadoxdemodFSK(uint8_t *dest, size_t *size, uint32_t *hi2, uint32_t *hi, ui
        return (int)startIdx;
 }
 
-uint32_t bytebits_to_byte(uint8_t* src, size_t numbits)
-{
-       uint32_t num = 0;
-       for(int i = 0 ; i < numbits ; i++)
-       {
-               num = (num << 1) | (*src);
-               src++;
-       }
-       return num;
-}
-
 int IOdemodFSK(uint8_t *dest, size_t size)
 {
        if (justNoise(dest, size)) return -1;
@@ -565,29 +659,40 @@ int IOdemodFSK(uint8_t *dest, size_t size)
                return (int) startIdx;
        }
        return -5;
-}
+} 
 
 // by marshmellow
-// takes a array of binary values, start position, length of bits per parity (includes parity bit),
-//   Parity Type (1 for odd 0 for even), and binary Length (length to run) 
-size_t removeParity(uint8_t *BitStream, size_t startIdx, uint8_t pLen, uint8_t pType, size_t bLen)
+// find viking preamble 0xF200 in already demoded data
+int VikingDemod_AM(uint8_t *dest, size_t *size) {
+       //make sure buffer has data
+       if (*size < 64*2) return -2;
+
+       size_t startIdx = 0;
+       uint8_t preamble[] = {1,1,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
+       uint8_t errChk = preambleSearch(dest, preamble, sizeof(preamble), size, &startIdx);
+       if (errChk == 0) return -4; //preamble not found
+       uint32_t checkCalc = bytebits_to_byte(dest+startIdx,8) ^ bytebits_to_byte(dest+startIdx+8,8) ^ bytebits_to_byte(dest+startIdx+16,8)
+           ^ bytebits_to_byte(dest+startIdx+24,8) ^ bytebits_to_byte(dest+startIdx+32,8) ^ bytebits_to_byte(dest+startIdx+40,8) 
+           ^ bytebits_to_byte(dest+startIdx+48,8) ^ bytebits_to_byte(dest+startIdx+56,8);
+       if ( checkCalc != 0xA8 ) return -5;
+       if (*size != 64) return -6;
+       //return start position
+       return (int) startIdx;
+}
+
+// Ask/Biphase Demod then try to locate an ISO 11784/85 ID
+// BitStream must contain previously askrawdemod and biphasedemoded data
+int FDXBdemodBI(uint8_t *dest, size_t *size)
 {
-       uint32_t parityWd = 0;
-       size_t j = 0, bitCnt = 0;
-       for (int word = 0; word < (bLen); word+=pLen){
-               for (int bit=0; bit < pLen; bit++){
-                       parityWd = (parityWd << 1) | BitStream[startIdx+word+bit];
-                       BitStream[j++] = (BitStream[startIdx+word+bit]);
-               }
-               j--;
-               // if parity fails then return 0
-               if (parityTest(parityWd, pLen, pType) == 0) return -1;
-               bitCnt+=(pLen-1);
-               parityWd = 0;
-       }
-       // if we got here then all the parities passed
-       //return ID start index and size
-       return bitCnt;
+       //make sure buffer has enough data
+       if (*size < 128) return -1;
+
+       size_t startIdx = 0;
+       uint8_t preamble[] = {0,0,0,0,0,0,0,0,0,0,1};
+
+       uint8_t errChk = preambleSearch(dest, preamble, sizeof(preamble), size, &startIdx);
+       if (errChk == 0) return -2; //preamble not found
+       return (int)startIdx;
 }
 
 // by marshmellow
@@ -612,7 +717,7 @@ int AWIDdemodFSK(uint8_t *dest, size_t *size)
 }
 
 // by marshmellow
-// FSK Demod then try to locate an Farpointe Data (pyramid) ID
+// FSK Demod then try to locate a Farpointe Data (pyramid) ID
 int PyramiddemodFSK(uint8_t *dest, size_t *size)
 {
        //make sure buffer has data
@@ -637,22 +742,21 @@ int PyramiddemodFSK(uint8_t *dest, size_t *size)
 // to detect a wave that has heavily clipped (clean) samples
 uint8_t DetectCleanAskWave(uint8_t dest[], size_t size, uint8_t high, uint8_t low)
 {
-       uint16_t allPeaks=1;
+       bool allArePeaks = true;
        uint16_t cntPeaks=0;
-       size_t loopEnd = 512+60;
+       size_t loopEnd = 512+160;
        if (loopEnd > size) loopEnd = size;
-       for (size_t i=60; i<loopEnd; i++){
+       for (size_t i=160; i<loopEnd; i++){
                if (dest[i]>low && dest[i]<high) 
-                       allPeaks=0;
+                       allArePeaks = false;
                else
                        cntPeaks++;
        }
-       if (allPeaks == 0){
-               if (cntPeaks > 300) return 1;
+       if (!allArePeaks){
+               if (cntPeaks > 300) return true;
        }
-       return allPeaks;
+       return allArePeaks;
 }
-
 // by marshmellow
 // to help detect clocks on heavily clipped samples
 // based on count of low to low
@@ -660,7 +764,7 @@ int DetectStrongAskClock(uint8_t dest[], size_t size, uint8_t high, uint8_t low)
 {
        uint8_t fndClk[] = {8,16,32,40,50,64,128};
        size_t startwave;
-       size_t i = 0;
+       size_t i = 100;
        size_t minClk = 255;
                // get to first full low to prime loop and skip incomplete first pulse
        while ((dest[i] < high) && (i < size))
@@ -683,6 +787,7 @@ int DetectStrongAskClock(uint8_t dest[], size_t size, uint8_t high, uint8_t low)
                        minClk = i - startwave;
        }
        // set clock
+       if (g_debugMode==2) prnt("DEBUG ASK: detectstrongASKclk smallest wave: %d",minClk);
        for (uint8_t clkCnt = 0; clkCnt<7; clkCnt++) {
                if (minClk >= fndClk[clkCnt]-(fndClk[clkCnt]/8) && minClk <= fndClk[clkCnt]+1)
                        return fndClk[clkCnt];
@@ -700,8 +805,8 @@ int DetectASKClock(uint8_t dest[], size_t size, int *clock, int maxErr)
        uint8_t clk[] = {255,8,16,32,40,50,64,100,128,255};
        uint8_t clkEnd = 9;
        uint8_t loopCnt = 255;  //don't need to loop through entire array...
-       if (size <= loopCnt) return -1; //not enough samples
-
+       if (size <= loopCnt+60) return -1; //not enough samples
+       size -= 60; //sometimes there is a strange end wave - filter out this....
        //if we already have a valid clock
        uint8_t clockFnd=0;
        for (;i<clkEnd;++i)
@@ -716,6 +821,7 @@ int DetectASKClock(uint8_t dest[], size_t size, int *clock, int maxErr)
        if (!clockFnd){
                if (DetectCleanAskWave(dest, size, peak, low)==1){
                        int ans = DetectStrongAskClock(dest, size, peak, low);
+                       if (g_debugMode==2) prnt("DEBUG ASK: detectaskclk Clean Ask Wave Detected: clk %d",ans);
                        for (i=clkEnd-1; i>0; i--){
                                if (clk[i] == ans) {
                                        *clock = ans;
@@ -726,7 +832,6 @@ int DetectASKClock(uint8_t dest[], size_t size, int *clock, int maxErr)
                        }
                }
        }
-       
        uint8_t ii;
        uint8_t clkCnt, tol = 0;
        uint16_t bestErr[]={1000,1000,1000,1000,1000,1000,1000,1000,1000};
@@ -768,7 +873,7 @@ int DetectASKClock(uint8_t dest[], size_t size, int *clock, int maxErr)
                        }
                        //if we found no errors then we can stop here and a low clock (common clocks)
                        //  this is correct one - return this clock
-                                       //PrintAndLog("DEBUG: clk %d, err %d, ii %d, i %d",clk[clkCnt],errCnt,ii,i);
+                       if (g_debugMode == 2) prnt("DEBUG ASK: clk %d, err %d, startpos %d, endpos %d",clk[clkCnt],errCnt,ii,i);
                        if(errCnt==0 && clkCnt<7) { 
                                if (!clockFnd) *clock = clk[clkCnt];
                                return ii;
@@ -790,8 +895,8 @@ int DetectASKClock(uint8_t dest[], size_t size, int *clock, int maxErr)
                                best = iii;
                        }
                }
+               if (g_debugMode == 2) prnt("DEBUG ASK: clk %d, # Errors %d, Current Best Clk %d, bestStart %d",clk[iii],bestErr[iii],clk[best],bestStart[best]);
        }
-       //if (bestErr[best] > maxErr) return -1;
        if (!clockFnd) *clock = clk[best];
        return bestStart[best];
 }
@@ -804,7 +909,7 @@ int DetectPSKClock(uint8_t dest[], size_t size, int clock)
        uint8_t clk[]={255,16,32,40,50,64,100,128,255}; //255 is not a valid clock
        uint16_t loopCnt = 4096;  //don't need to loop through entire array...
        if (size == 0) return 0;
-       if (size<loopCnt) loopCnt = size;
+       if (size<loopCnt) loopCnt = size-20;
 
        //if we already have a valid clock quit
        size_t i=1;
@@ -818,17 +923,17 @@ int DetectPSKClock(uint8_t dest[], size_t size, int clock)
        uint16_t peaksdet[]={0,0,0,0,0,0,0,0,0};
        fc = countFC(dest, size, 0);
        if (fc!=2 && fc!=4 && fc!=8) return -1;
-       //PrintAndLog("DEBUG: FC: %d",fc);
+       if (g_debugMode==2) prnt("DEBUG PSK: FC: %d",fc);
 
        //find first full wave
-       for (i=0; i<loopCnt; i++){
+       for (i=160; i<loopCnt; i++){
                if (dest[i] < dest[i+1] && dest[i+1] >= dest[i+2]){
                        if (waveStart == 0) {
                                waveStart = i+1;
-                               //PrintAndLog("DEBUG: waveStart: %d",waveStart);
+                               //prnt("DEBUG: waveStart: %d",waveStart);
                        } else {
                                waveEnd = i+1;
-                               //PrintAndLog("DEBUG: waveEnd: %d",waveEnd);
+                               //prnt("DEBUG: waveEnd: %d",waveEnd);
                                waveLenCnt = waveEnd-waveStart;
                                if (waveLenCnt > fc){
                                        firstFullWave = waveStart;
@@ -839,7 +944,7 @@ int DetectPSKClock(uint8_t dest[], size_t size, int clock)
                        }
                }
        }
-       //PrintAndLog("DEBUG: firstFullWave: %d, waveLen: %d",firstFullWave,fullWaveLen);
+       if (g_debugMode ==2) prnt("DEBUG PSK: firstFullWave: %d, waveLen: %d",firstFullWave,fullWaveLen);
        
        //test each valid clock from greatest to smallest to see which lines up
        for(clkCnt=7; clkCnt >= 1 ; clkCnt--){
@@ -847,7 +952,7 @@ int DetectPSKClock(uint8_t dest[], size_t size, int clock)
                waveStart = 0;
                errCnt=0;
                peakcnt=0;
-               //PrintAndLog("DEBUG: clk: %d, lastClkBit: %d",clk[clkCnt],lastClkBit);
+               if (g_debugMode == 2) prnt("DEBUG PSK: clk: %d, lastClkBit: %d",clk[clkCnt],lastClkBit);
 
                for (i = firstFullWave+fullWaveLen-1; i < loopCnt-2; i++){
                        //top edge of wave = start of new wave 
@@ -860,7 +965,7 @@ int DetectPSKClock(uint8_t dest[], size_t size, int clock)
                                        waveLenCnt = waveEnd-waveStart;
                                        if (waveLenCnt > fc){ 
                                                //if this wave is a phase shift
-                                               //PrintAndLog("DEBUG: phase shift at: %d, len: %d, nextClk: %d, ii: %d, fc: %d",waveStart,waveLenCnt,lastClkBit+clk[clkCnt]-tol,ii+1,fc);
+                                               if (g_debugMode == 2) prnt("DEBUG PSK: phase shift at: %d, len: %d, nextClk: %d, i: %d, fc: %d",waveStart,waveLenCnt,lastClkBit+clk[clkCnt]-tol,i+1,fc);
                                                if (i+1 >= lastClkBit + clk[clkCnt] - tol){ //should be a clock bit
                                                        peakcnt++;
                                                        lastClkBit+=clk[clkCnt];
@@ -889,11 +994,40 @@ int DetectPSKClock(uint8_t dest[], size_t size, int clock)
                if (peaksdet[i] > peaksdet[best]) {
                        best = i;
                }
-               //PrintAndLog("DEBUG: Clk: %d, peaks: %d, errs: %d, bestClk: %d",clk[iii],peaksdet[iii],bestErr[iii],clk[best]);
+               if (g_debugMode == 2) prnt("DEBUG PSK: Clk: %d, peaks: %d, errs: %d, bestClk: %d",clk[i],peaksdet[i],bestErr[i],clk[best]);
        }
        return clk[best];
 }
 
+int DetectStrongNRZClk(uint8_t *dest, size_t size, int peak, int low){
+       //find shortest transition from high to low
+       size_t i = 0;
+       size_t transition1 = 0;
+       int lowestTransition = 255;
+       bool lastWasHigh = false;
+
+       //find first valid beginning of a high or low wave
+       while ((dest[i] >= peak || dest[i] <= low) && (i < size))
+               ++i;
+       while ((dest[i] < peak && dest[i] > low) && (i < size))
+               ++i;
+       lastWasHigh = (dest[i] >= peak);
+
+       if (i==size) return 0;
+       transition1 = i;
+
+       for (;i < size; i++) {
+               if ((dest[i] >= peak && !lastWasHigh) || (dest[i] <= low && lastWasHigh)) {
+                       lastWasHigh = (dest[i] >= peak);
+                       if (i-transition1 < lowestTransition) lowestTransition = i-transition1;
+                       transition1 = i;
+               }
+       }
+       if (lowestTransition == 255) lowestTransition = 0;
+       if (g_debugMode==2) prnt("DEBUG NRZ: detectstrongNRZclk smallest wave: %d",lowestTransition);
+       return lowestTransition;
+}
+
 //by marshmellow
 //detect nrz clock by reading #peaks vs no peaks(or errors)
 int DetectNRZClock(uint8_t dest[], size_t size, int clock)
@@ -902,8 +1036,7 @@ int DetectNRZClock(uint8_t dest[], size_t size, int clock)
        uint8_t clk[]={8,16,32,40,50,64,100,128,255};
        size_t loopCnt = 4096;  //don't need to loop through entire array...
        if (size == 0) return 0;
-       if (size<loopCnt) loopCnt = size;
-
+       if (size<loopCnt) loopCnt = size-20;
        //if we already have a valid clock quit
        for (; i < 8; ++i)
                if (clk[i] == clock) return clock;
@@ -912,38 +1045,82 @@ int DetectNRZClock(uint8_t dest[], size_t size, int clock)
        int peak, low;
        if (getHiLo(dest, loopCnt, &peak, &low, 75, 75) < 1) return 0;
 
-       //PrintAndLog("DEBUG: peak: %d, low: %d",peak,low);
+       int lowestTransition = DetectStrongNRZClk(dest, size-20, peak, low);
        size_t ii;
        uint8_t clkCnt;
        uint8_t tol = 0;
-       uint16_t peakcnt=0;
-       uint16_t peaksdet[]={0,0,0,0,0,0,0,0};
-       uint16_t maxPeak=0;
+       uint16_t smplCnt = 0;
+       int16_t peakcnt = 0;
+       int16_t peaksdet[] = {0,0,0,0,0,0,0,0};
+       uint16_t maxPeak = 255;
+       bool firstpeak = false;
        //test for large clipped waves
        for (i=0; i<loopCnt; i++){
                if (dest[i] >= peak || dest[i] <= low){
-                       peakcnt++;
+                       if (!firstpeak) continue;
+                       smplCnt++;
                } else {
-                       if (peakcnt>0 && maxPeak < peakcnt){
-                               maxPeak = peakcnt;
+                       firstpeak=true;
+                       if (smplCnt > 6 ){
+                               if (maxPeak > smplCnt){
+                                       maxPeak = smplCnt;
+                                       //prnt("maxPk: %d",maxPeak);
+                               }
+                               peakcnt++;
+                               //prnt("maxPk: %d, smplCnt: %d, peakcnt: %d",maxPeak,smplCnt,peakcnt);
+                               smplCnt=0;
                        }
-                       peakcnt=0;
                }
        }
+       bool errBitHigh = 0;
+       bool bitHigh = 0;
+       uint8_t ignoreCnt = 0;
+       uint8_t ignoreWindow = 4;
+       bool lastPeakHigh = 0;
+       int lastBit = 0; 
        peakcnt=0;
        //test each valid clock from smallest to greatest to see which lines up
        for(clkCnt=0; clkCnt < 8; ++clkCnt){
-               //ignore clocks smaller than largest peak
-               if (clk[clkCnt]<maxPeak) continue;
-
+               //ignore clocks smaller than smallest peak
+               if (clk[clkCnt] < maxPeak - (clk[clkCnt]/4)) continue;
                //try lining up the peaks by moving starting point (try first 256)
-               for (ii=0; ii< loopCnt; ++ii){
+               for (ii=20; ii < loopCnt; ++ii){
                        if ((dest[ii] >= peak) || (dest[ii] <= low)){
-                               peakcnt=0;
-                               // now that we have the first one lined up test rest of wave array
-                               for (i=0; i < ((int)((size-ii-tol)/clk[clkCnt])-1); ++i){
-                                       if (dest[ii+(i*clk[clkCnt])]>=peak || dest[ii+(i*clk[clkCnt])]<=low){
-                                               peakcnt++;
+                               peakcnt = 0;
+                               bitHigh = false;
+                               ignoreCnt = 0;
+                               lastBit = ii-clk[clkCnt]; 
+                               //loop through to see if this start location works
+                               for (i = ii; i < size-20; ++i) {
+                                       //if we are at a clock bit
+                                       if ((i >= lastBit + clk[clkCnt] - tol) && (i <= lastBit + clk[clkCnt] + tol)) {
+                                               //test high/low
+                                               if (dest[i] >= peak || dest[i] <= low) {
+                                                       //if same peak don't count it
+                                                       if ((dest[i] >= peak && !lastPeakHigh) || (dest[i] <= low && lastPeakHigh)) {
+                                                               peakcnt++;
+                                                       }
+                                                       lastPeakHigh = (dest[i] >= peak);
+                                                       bitHigh = true;
+                                                       errBitHigh = false;
+                                                       ignoreCnt = ignoreWindow;
+                                                       lastBit += clk[clkCnt];
+                                               } else if (i == lastBit + clk[clkCnt] + tol) {
+                                                       lastBit += clk[clkCnt];
+                                               }
+                                       //else if not a clock bit and no peaks
+                                       } else if (dest[i] < peak && dest[i] > low){
+                                               if (ignoreCnt==0){
+                                                       bitHigh=false;
+                                                       if (errBitHigh==true) peakcnt--;
+                                                       errBitHigh=false;
+                                               } else {
+                                                       ignoreCnt--;
+                                               }
+                                               // else if not a clock bit but we have a peak
+                                       } else if ((dest[i]>=peak || dest[i]<=low) && (!bitHigh)) {
+                                               //error bar found no clock...
+                                               errBitHigh=true;
                                        }
                                }
                                if(peakcnt>peaksdet[clkCnt]) {
@@ -955,11 +1132,16 @@ int DetectNRZClock(uint8_t dest[], size_t size, int clock)
        int iii=7;
        uint8_t best=0;
        for (iii=7; iii > 0; iii--){
-               if (peaksdet[iii] > peaksdet[best]){
+               if ((peaksdet[iii] >= (peaksdet[best]-1)) && (peaksdet[iii] <= peaksdet[best]+1) && lowestTransition) {
+                       if (clk[iii] > (lowestTransition - (clk[iii]/8)) && clk[iii] < (lowestTransition + (clk[iii]/8))) {
+                               best = iii;
+                       }
+               } else if (peaksdet[iii] > peaksdet[best]){
                        best = iii;
                }
-               //PrintAndLog("DEBUG: Clk: %d, peaks: %d, errs: %d, bestClk: %d",clk[iii],peaksdet[iii],bestErr[iii],clk[best]);
+               if (g_debugMode==2) prnt("DEBUG NRZ: Clk: %d, peaks: %d, maxPeak: %d, bestClk: %d, lowestTrs: %d",clk[iii],peaksdet[iii],maxPeak, clk[best], lowestTransition);
        }
+
        return clk[best];
 }
 
@@ -1003,182 +1185,53 @@ void psk2TOpsk1(uint8_t *BitStream, size_t size)
 int indala26decode(uint8_t *bitStream, size_t *size, uint8_t *invert)
 {
        //26 bit 40134 format  (don't know other formats)
-       int i;
-       int long_wait=29;//29 leading zeros in format
-       int start;
-       int first = 0;
-       int first2 = 0;
-       int bitCnt = 0;
-       int ii;
-       // Finding the start of a UID
-       for (start = 0; start <= *size - 250; start++) {
-               first = bitStream[start];
-               for (i = start; i < start + long_wait; i++) {
-                       if (bitStream[i] != first) {
-                               break;
-                       }
-               }
-               if (i == (start + long_wait)) {
-                       break;
-               }
-       }
-       if (start == *size - 250 + 1) {
-               // did not find start sequence
-               return -1;
-       }
-       // Inverting signal if needed
-       if (first == 1) {
-               for (i = start; i < *size; i++) {
-                       bitStream[i] = !bitStream[i];
-               }
-               *invert = 1;
-       }else *invert=0;
-
-       int iii;
-       //found start once now test length by finding next one
-       for (ii=start+29; ii <= *size - 250; ii++) {
-               first2 = bitStream[ii];
-               for (iii = ii; iii < ii + long_wait; iii++) {
-                       if (bitStream[iii] != first2) {
-                               break;
-                       }
-               }
-               if (iii == (ii + long_wait)) {
-                       break;
-               }
-       }
-       if (ii== *size - 250 + 1){
-               // did not find second start sequence
-               return -2;
-       }
-       bitCnt=ii-start;
+       uint8_t preamble[] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1};
+       uint8_t preamble_i[] = {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0};
+       size_t startidx = 0; 
+       if (!preambleSearch(bitStream, preamble, sizeof(preamble), size, &startidx)){
+               // if didn't find preamble try again inverting
+               if (!preambleSearch(bitStream, preamble_i, sizeof(preamble_i), size, &startidx)) return -1;
+               *invert ^= 1;
+       } 
+       if (*size != 64 && *size != 224) return -2;
+       if (*invert==1)
+               for (size_t i = startidx; i < *size; i++)
+                       bitStream[i] ^= 1;
 
-       // Dumping UID
-       i = start;
-       for (ii = 0; ii < bitCnt; ii++) {
-               bitStream[ii] = bitStream[i++];
-       }
-       *size=bitCnt;
-       return 1;
+       return (int) startidx;
 }
 
-// by marshmellow - demodulate NRZ wave (both similar enough)
+// by marshmellow - demodulate NRZ wave - requires a read with strong signal
 // peaks invert bit (high=1 low=0) each clock cycle = 1 bit determined by last peak
-// there probably is a much simpler way to do this.... 
-int nrzRawDemod(uint8_t *dest, size_t *size, int *clk, int *invert, int maxErr)
-{
+int nrzRawDemod(uint8_t *dest, size_t *size, int *clk, int *invert){
        if (justNoise(dest, *size)) return -1;
        *clk = DetectNRZClock(dest, *size, *clk);
        if (*clk==0) return -2;
        size_t i, gLen = 4096;
-       if (gLen>*size) gLen = *size;
+       if (gLen>*size) gLen = *size-20;
        int high, low;
        if (getHiLo(dest, gLen, &high, &low, 75, 75) < 1) return -3; //25% fuzz on high 25% fuzz on low
-       int lastBit = 0;  //set first clock check
-       size_t iii = 0, bitnum = 0; //bitnum counter
-       uint16_t errCnt = 0, MaxBits = 1000;
-       size_t bestErrCnt = maxErr+1;
-       size_t bestPeakCnt = 0, bestPeakStart = 0;
-       uint8_t bestFirstPeakHigh=0, firstPeakHigh=0, curBit=0, bitHigh=0, errBitHigh=0;
-       uint8_t tol = 1;  //clock tolerance adjust - waves will be accepted as within the clock if they fall + or - this value + clock from last valid wave
-       uint16_t peakCnt=0;
-       uint8_t ignoreWindow=4;
-       uint8_t ignoreCnt=ignoreWindow; //in case of noise near peak
-       //loop to find first wave that works - align to clock
-       for (iii=0; iii < gLen; ++iii){
-               if ((dest[iii]>=high) || (dest[iii]<=low)){
-                       if (dest[iii]>=high) firstPeakHigh=1;
-                       else firstPeakHigh=0;
-                       lastBit=iii-*clk;
-                       peakCnt=0;
-                       errCnt=0;
-                       //loop through to see if this start location works
-                       for (i = iii; i < *size; ++i) {
-                               // if we are at a clock bit
-                               if ((i >= lastBit + *clk - tol) && (i <= lastBit + *clk + tol)) {
-                                       //test high/low
-                                       if (dest[i] >= high || dest[i] <= low) {
-                                               bitHigh = 1;
-                                               peakCnt++;
-                                               errBitHigh = 0;
-                                               ignoreCnt = ignoreWindow;
-                                               lastBit += *clk;
-                                       } else if (i == lastBit + *clk + tol) {
-                                               lastBit += *clk;
-                                       }
-                               //else if no bars found
-                               } else if (dest[i] < high && dest[i] > low){
-                                       if (ignoreCnt==0){
-                                               bitHigh=0;
-                                               if (errBitHigh==1) errCnt++;
-                                               errBitHigh=0;
-                                       } else {
-                                               ignoreCnt--;
-                                       }
-                               } else if ((dest[i]>=high || dest[i]<=low) && (bitHigh==0)) {
-                                       //error bar found no clock...
-                                       errBitHigh=1;
-                               }
-                               if (((i-iii) / *clk)>=MaxBits) break;
-                       }
-                       //we got more than 64 good bits and not all errors
-                       if (((i-iii) / *clk) > 64 && (errCnt <= (maxErr))) {
-                               //possible good read
-                               if (!errCnt || peakCnt > bestPeakCnt){
-                                       bestFirstPeakHigh=firstPeakHigh;
-                                       bestErrCnt = errCnt;
-                                       bestPeakCnt = peakCnt;
-                                       bestPeakStart = iii;
-                                       if (!errCnt) break;  //great read - finish
-                               }
-                       }
-               }
+       
+       uint8_t bit=0;
+       //convert wave samples to 1's and 0's
+       for(i=20; i < *size-20; i++){
+               if (dest[i] >= high) bit = 1;
+               if (dest[i] <= low)  bit = 0;
+               dest[i] = bit;
        }
-       //PrintAndLog("DEBUG: bestErrCnt: %d, maxErr: %d, bestStart: %d, bestPeakCnt: %d, bestPeakStart: %d",bestErrCnt,maxErr,bestStart,bestPeakCnt,bestPeakStart);
-       if (bestErrCnt > maxErr) return bestErrCnt;             
-
-       //best run is good enough set to best run and set overwrite BinStream
-       lastBit = bestPeakStart - *clk;
-       memset(dest, bestFirstPeakHigh^1, bestPeakStart / *clk);
-       bitnum += (bestPeakStart / *clk);
-       for (i = bestPeakStart; i < *size; ++i) {
-               // if expecting a clock bit
-               if ((i >= lastBit + *clk - tol) && (i <= lastBit + *clk + tol)) {
-                       // test high/low
-                       if (dest[i] >= high || dest[i] <= low) {
-                               peakCnt++;
-                               bitHigh = 1;
-                               errBitHigh = 0;
-                               ignoreCnt = ignoreWindow;
-                               curBit = *invert;
-                               if (dest[i] >= high) curBit ^= 1;
-                               dest[bitnum++] = curBit;
-                               lastBit += *clk;
-                       //else no bars found in clock area
-                       } else if (i == lastBit + *clk + tol) {
-                               dest[bitnum++] = curBit;
-                               lastBit += *clk;
-                       }
-               //else if no bars found
-               } else if (dest[i] < high && dest[i] > low){
-                       if (ignoreCnt == 0){
-                               bitHigh = 0;
-                               if (errBitHigh == 1){
-                                       dest[bitnum++] = 7;
-                                       errCnt++;
-                               }
-                               errBitHigh=0;
-                       } else {
-                               ignoreCnt--;
-                       }
-               } else if ((dest[i] >= high || dest[i] <= low) && (bitHigh == 0)) {
-                       //error bar found no clock...
-                       errBitHigh=1;
+       //now demod based on clock (rf/32 = 32 1's for one 1 bit, 32 0's for one 0 bit) 
+       size_t lastBit = 0;
+       size_t numBits = 0;
+       for(i=21; i < *size-20; i++) {
+               //if transition detected or large number of same bits - store the passed bits
+               if (dest[i] != dest[i-1] || (i-lastBit) == (10 * *clk)) {
+                       memset(dest+numBits, dest[i-1] ^ *invert, (i - lastBit + (*clk/4)) / *clk);
+                       numBits += (i - lastBit + (*clk/4)) / *clk;
+                       lastBit = i-1;
                }
-               if (bitnum >= MaxBits) break;
        }
-       *size = bitnum;
-       return bestErrCnt;
+       *size = numBits;
+       return 0;
 }
 
 //by marshmellow
@@ -1196,18 +1249,18 @@ uint8_t detectFSKClk(uint8_t *BitStream, size_t size, uint8_t fcHigh, uint8_t fc
        size_t i;
        if (size == 0) return 0;
 
-       uint8_t fcTol = (uint8_t)(0.5+(float)(fcHigh-fcLow)/2);
+       uint8_t fcTol = ((fcHigh*100 - fcLow*100)/2 + 50)/100; //(uint8_t)(0.5+(float)(fcHigh-fcLow)/2);
        rfLensFnd=0;
        fcCounter=0;
        rfCounter=0;
        firstBitFnd=0;
        //PrintAndLog("DEBUG: fcTol: %d",fcTol);
-       // prime i to first up transition
-       for (i = 1; i < size-1; i++)
+       // prime i to first peak / up transition
+       for (i = 160; i < size-20; i++)
                if (BitStream[i] > BitStream[i-1] && BitStream[i]>=BitStream[i+1])
                        break;
 
-       for (; i < size-1; i++){
+       for (; i < size-20; i++){
                fcCounter++;
                rfCounter++;
 
@@ -1225,7 +1278,7 @@ uint8_t detectFSKClk(uint8_t *BitStream, size_t size, uint8_t fcHigh, uint8_t fc
                        //not the same size as the last wave - start of new bit sequence
                        if (firstBitFnd > 1){ //skip first wave change - probably not a complete bit
                                for (int ii=0; ii<15; ii++){
-                                       if (rfLens[ii] == rfCounter){
+                                       if (rfLens[ii] >= (rfCounter-4) && rfLens[ii] <= (rfCounter+4)){
                                                rfCnts[ii]++;
                                                rfCounter = 0;
                                                break;
@@ -1247,7 +1300,6 @@ uint8_t detectFSKClk(uint8_t *BitStream, size_t size, uint8_t fcHigh, uint8_t fc
        uint8_t rfHighest=15, rfHighest2=15, rfHighest3=15;
 
        for (i=0; i<15; i++){
-               //PrintAndLog("DEBUG: RF %d, cnts %d",rfLens[i], rfCnts[i]);
                //get highest 2 RF values  (might need to get more values to compare or compare all?)
                if (rfCnts[i]>rfCnts[rfHighest]){
                        rfHighest3=rfHighest2;
@@ -1259,20 +1311,23 @@ uint8_t detectFSKClk(uint8_t *BitStream, size_t size, uint8_t fcHigh, uint8_t fc
                } else if(rfCnts[i]>rfCnts[rfHighest3]){
                        rfHighest3=i;
                }
+               if (g_debugMode==2) prnt("DEBUG FSK: RF %d, cnts %d",rfLens[i], rfCnts[i]);
        }  
        // set allowed clock remainder tolerance to be 1 large field clock length+1 
        //   we could have mistakenly made a 9 a 10 instead of an 8 or visa versa so rfLens could be 1 FC off  
        uint8_t tol1 = fcHigh+1; 
        
-       //PrintAndLog("DEBUG: hightest: 1 %d, 2 %d, 3 %d",rfLens[rfHighest],rfLens[rfHighest2],rfLens[rfHighest3]);
+       if (g_debugMode==2) prnt("DEBUG FSK: most counted rf values: 1 %d, 2 %d, 3 %d",rfLens[rfHighest],rfLens[rfHighest2],rfLens[rfHighest3]);
 
        // loop to find the highest clock that has a remainder less than the tolerance
        //   compare samples counted divided by
+       // test 128 down to 32 (shouldn't be possible to have fc/10 & fc/8 and rf/16 or less)
        int ii=7;
-       for (; ii>=0; ii--){
+       for (; ii>=2; ii--){
                if (rfLens[rfHighest] % clk[ii] < tol1 || rfLens[rfHighest] % clk[ii] > clk[ii]-tol1){
                        if (rfLens[rfHighest2] % clk[ii] < tol1 || rfLens[rfHighest2] % clk[ii] > clk[ii]-tol1){
                                if (rfLens[rfHighest3] % clk[ii] < tol1 || rfLens[rfHighest3] % clk[ii] > clk[ii]-tol1){
+                                       if (g_debugMode==2) prnt("DEBUG FSK: clk %d divides into the 3 most rf values within tolerance",clk[ii]);
                                        break;
                                }
                        }
@@ -1290,8 +1345,8 @@ uint8_t detectFSKClk(uint8_t *BitStream, size_t size, uint8_t fcHigh, uint8_t fc
 //mainly used for FSK field clock detection
 uint16_t countFC(uint8_t *BitStream, size_t size, uint8_t fskAdj)
 {
-       uint8_t fcLens[] = {0,0,0,0,0,0,0,0,0,0};
-       uint16_t fcCnts[] = {0,0,0,0,0,0,0,0,0,0};
+       uint8_t fcLens[] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
+       uint16_t fcCnts[] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
        uint8_t fcLensFnd = 0;
        uint8_t lastFCcnt=0;
        uint8_t fcCounter = 0;
@@ -1299,11 +1354,11 @@ uint16_t countFC(uint8_t *BitStream, size_t size, uint8_t fskAdj)
        if (size == 0) return 0;
 
        // prime i to first up transition
-       for (i = 1; i < size-1; i++)
+       for (i = 160; i < size-20; i++)
                if (BitStream[i] > BitStream[i-1] && BitStream[i] >= BitStream[i+1])
                        break;
 
-       for (; i < size-1; i++){
+       for (; i < size-20; i++){
                if (BitStream[i] > BitStream[i-1] && BitStream[i] >= BitStream[i+1]){
                        // new up transition
                        fcCounter++;
@@ -1316,14 +1371,14 @@ uint16_t countFC(uint8_t *BitStream, size_t size, uint8_t fskAdj)
                        lastFCcnt = fcCounter;
                        }
                        // find which fcLens to save it to:
-                       for (int ii=0; ii<10; ii++){
+                       for (int ii=0; ii<15; ii++){
                                if (fcLens[ii]==fcCounter){
                                        fcCnts[ii]++;
                                        fcCounter=0;
                                        break;
                                }
                        }
-                       if (fcCounter>0 && fcLensFnd<10){
+                       if (fcCounter>0 && fcLensFnd<15){
                                //add new fc length 
                                fcCnts[fcLensFnd]++;
                                fcLens[fcLensFnd++]=fcCounter;
@@ -1335,11 +1390,10 @@ uint16_t countFC(uint8_t *BitStream, size_t size, uint8_t fskAdj)
                }
        }
        
-       uint8_t best1=9, best2=9, best3=9;
+       uint8_t best1=14, best2=14, best3=14;
        uint16_t maxCnt1=0;
        // go through fclens and find which ones are bigest 2  
-       for (i=0; i<10; i++){
-               // PrintAndLog("DEBUG: FC %d, Cnt %d, Errs %d",fcLens[i],fcCnts[i],errCnt);    
+       for (i=0; i<15; i++){
                // get the 3 best FC values
                if (fcCnts[i]>maxCnt1) {
                        best3=best2;
@@ -1352,7 +1406,9 @@ uint16_t countFC(uint8_t *BitStream, size_t size, uint8_t fskAdj)
                } else if(fcCnts[i]>fcCnts[best3]){
                        best3=i;
                }
+               if (g_debugMode==2) prnt("DEBUG countfc: FC %u, Cnt %u, best fc: %u, best2 fc: %u",fcLens[i],fcCnts[i],fcLens[best1],fcLens[best2]);
        }
+       if (fcLens[best1]==0) return 0;
        uint8_t fcH=0, fcL=0;
        if (fcLens[best1]>fcLens[best2]){
                fcH=fcLens[best1];
@@ -1361,11 +1417,13 @@ uint16_t countFC(uint8_t *BitStream, size_t size, uint8_t fskAdj)
                fcH=fcLens[best2];
                fcL=fcLens[best1];
        }
-
+       if ((size-180)/fcH/3 > fcCnts[best1]+fcCnts[best2]) {
+               if (g_debugMode==2) prnt("DEBUG countfc: fc is too large: %u > %u. Not psk or fsk",(size-180)/fcH/3,fcCnts[best1]+fcCnts[best2]);
+               return 0; //lots of waves not psk or fsk
+       }
        // TODO: take top 3 answers and compare to known Field clocks to get top 2
 
        uint16_t fcs = (((uint16_t)fcH)<<8) | fcL;
-       // PrintAndLog("DEBUG: Best %d  best2 %d best3 %d",fcLens[best1],fcLens[best2],fcLens[best3]);
        if (fskAdj) return fcs; 
        return fcLens[best1];
 }
@@ -1378,6 +1436,7 @@ int pskRawDemod(uint8_t dest[], size_t *size, int *clock, int *invert)
        uint16_t loopCnt = 4096;  //don't need to loop through entire array...
        if (*size<loopCnt) loopCnt = *size;
 
+       size_t numBits=0;
        uint8_t curPhase = *invert;
        size_t i, waveStart=1, waveEnd=0, firstFullWave=0, lastClkBit=0;
        uint8_t fc=0, fullWaveLen=0, tol=1;
@@ -1394,7 +1453,7 @@ int pskRawDemod(uint8_t dest[], size_t *size, int *clock, int *invert)
                        waveEnd = i+1;
                        //PrintAndLog("DEBUG: waveEnd: %d",waveEnd);
                        waveLenCnt = waveEnd-waveStart;
-                       if (waveLenCnt > fc && waveStart > fc){ //not first peak and is a large wave 
+                       if (waveLenCnt > fc && waveStart > fc && !(waveLenCnt > fc+2)){ //not first peak and is a large wave but not out of whack
                                lastAvgWaveVal = avgWaveVal/(waveLenCnt);
                                firstFullWave = waveStart;
                                fullWaveLen=waveLenCnt;
@@ -1407,14 +1466,21 @@ int pskRawDemod(uint8_t dest[], size_t *size, int *clock, int *invert)
                }
                avgWaveVal += dest[i+2];
        }
+       if (firstFullWave == 0) {
+               // no phase shift detected - could be all 1's or 0's - doesn't matter where we start
+               // so skip a little to ensure we are past any Start Signal
+               firstFullWave = 160;
+               memset(dest, curPhase, firstFullWave / *clock);
+       } else {
+               memset(dest, curPhase^1, firstFullWave / *clock);
+       }
+       //advance bits
+       numBits += (firstFullWave / *clock);
+       //set start of wave as clock align
+       lastClkBit = firstFullWave;
        //PrintAndLog("DEBUG: firstFullWave: %d, waveLen: %d",firstFullWave,fullWaveLen);  
-       lastClkBit = firstFullWave; //set start of wave as clock align
        //PrintAndLog("DEBUG: clk: %d, lastClkBit: %d", *clock, lastClkBit);
        waveStart = 0;
-       size_t numBits=0;
-       //set skipped bits
-       memset(dest, curPhase^1, firstFullWave / *clock);
-       numBits += (firstFullWave / *clock);
        dest[numBits++] = curPhase; //set first read bit
        for (i = firstFullWave + fullWaveLen - 1; i < *size-3; i++){
                //top edge of wave = start of new wave 
@@ -1454,3 +1520,166 @@ int pskRawDemod(uint8_t dest[], size_t *size, int *clock, int *invert)
        *size = numBits;
        return errCnt;
 }
+
+//by marshmellow
+//attempt to identify a Sequence Terminator in ASK modulated raw wave
+bool DetectST(uint8_t buffer[], size_t *size, int *foundclock) {
+       size_t bufsize = *size;
+       //need to loop through all samples and identify our clock, look for the ST pattern
+       uint8_t fndClk[] = {8,16,32,40,50,64,128};
+       int clk = 0; 
+       int tol = 0;
+       int i, j, skip, start, end, low, high, minClk, waveStart;
+       bool complete = false;
+       int tmpbuff[bufsize / 64];
+       int waveLen[bufsize / 64];
+       size_t testsize = (bufsize < 512) ? bufsize : 512;
+       int phaseoff = 0;
+       high = low = 128;
+       memset(tmpbuff, 0, sizeof(tmpbuff));
+
+       if ( getHiLo(buffer, testsize, &high, &low, 80, 80) == -1 ) {
+               if (g_debugMode==2) prnt("DEBUG STT: just noise detected - quitting");
+               return false; //just noise
+       }
+       i = 0;
+       j = 0;
+       minClk = 255;
+       // get to first full low to prime loop and skip incomplete first pulse
+       while ((buffer[i] < high) && (i < bufsize))
+               ++i;
+       while ((buffer[i] > low) && (i < bufsize))
+               ++i;
+       skip = i;
+
+       // populate tmpbuff buffer with pulse lengths
+       while (i < bufsize) {
+               // measure from low to low
+               while ((buffer[i] > low) && (i < bufsize))
+                       ++i;
+               start= i;
+               while ((buffer[i] < high) && (i < bufsize))
+                       ++i;
+               //first high point for this wave
+               waveStart = i;
+               while ((buffer[i] > low) && (i < bufsize))
+                       ++i;
+               if (j >= (bufsize/64)) {
+                       break;
+               }
+               waveLen[j] = i - waveStart; //first high to first low
+               tmpbuff[j++] = i - start;
+               if (i-start < minClk && i < bufsize) {
+                       minClk = i - start;
+               }
+       }
+       // set clock  - might be able to get this externally and remove this work...
+       if (!clk) {
+               for (uint8_t clkCnt = 0; clkCnt<7; clkCnt++) {
+                       tol = fndClk[clkCnt]/8;
+                       if (minClk >= fndClk[clkCnt]-tol && minClk <= fndClk[clkCnt]+1) { 
+                               clk=fndClk[clkCnt];
+                               break;
+                       }
+               }
+               // clock not found - ERROR
+               if (!clk) {
+                       if (g_debugMode==2) prnt("DEBUG STT: clock not found - quitting");
+                       return false;
+               }
+       } else tol = clk/8;
+
+       *foundclock = clk;
+
+       // look for Sequence Terminator - should be pulses of clk*(1 or 1.5), clk*2, clk*(1.5 or 2)
+       start = -1;
+       for (i = 0; i < j - 4; ++i) {
+               skip += tmpbuff[i];
+               if (tmpbuff[i] >= clk*1-tol && tmpbuff[i] <= (clk*2)+tol && waveLen[i] < clk+tol) {           //1 to 2 clocks depending on 2 bits prior
+                       if (tmpbuff[i+1] >= clk*2-tol && tmpbuff[i+1] <= clk*2+tol && waveLen[i+1] > clk*3/2-tol) {       //2 clocks and wave size is 1 1/2
+                               if (tmpbuff[i+2] >= (clk*3)/2-tol && tmpbuff[i+2] <= clk*2+tol && waveLen[i+2] > clk-tol) { //1 1/2 to 2 clocks and at least one full clock wave
+                                       if (tmpbuff[i+3] >= clk*1-tol && tmpbuff[i+3] <= clk*2+tol) { //1 to 2 clocks for end of ST + first bit
+                                               start = i + 3;
+                                               break;
+                                       }
+                               }
+                       }
+               }
+       }
+       // first ST not found - ERROR
+       if (start < 0) {
+               if (g_debugMode==2) prnt("DEBUG STT: first STT not found - quitting");
+               return false;
+       }
+       if (waveLen[i+2] > clk*1+tol)
+               phaseoff = 0;
+       else
+               phaseoff = clk/2;
+       
+       // skip over the remainder of ST
+       skip += clk*7/2; //3.5 clocks from tmpbuff[i] = end of st - also aligns for ending point
+
+       // now do it again to find the end
+       end = skip;
+       for (i += 3; i < j - 4; ++i) {
+               end += tmpbuff[i];
+               if (tmpbuff[i] >= clk*1-tol && tmpbuff[i] <= (clk*2)+tol) {           //1 to 2 clocks depending on 2 bits prior
+                       if (tmpbuff[i+1] >= clk*2-tol && tmpbuff[i+1] <= clk*2+tol && waveLen[i+1] > clk*3/2-tol) {       //2 clocks and wave size is 1 1/2
+                               if (tmpbuff[i+2] >= (clk*3)/2-tol && tmpbuff[i+2] <= clk*2+tol && waveLen[i+2] > clk-tol) { //1 1/2 to 2 clocks and at least one full clock wave
+                                       if (tmpbuff[i+3] >= clk*1-tol && tmpbuff[i+3] <= clk*2+tol) { //1 to 2 clocks for end of ST + first bit
+                                               complete = true;
+                                               break;
+                                       }
+                               }
+                       }
+               }
+       }
+       end -= phaseoff;
+       //didn't find second ST - ERROR
+       if (!complete) {
+               if (g_debugMode==2) prnt("DEBUG STT: second STT not found - quitting");
+               return false;
+       }
+       if (g_debugMode==2) prnt("DEBUG STT: start of data: %d end of data: %d, datalen: %d, clk: %d, bits: %d, phaseoff: %d", skip, end, end-skip, clk, (end-skip)/clk, phaseoff);
+       //now begin to trim out ST so we can use normal demod cmds
+       start = skip;
+       size_t datalen = end - start;
+       // check validity of datalen (should be even clock increments)  - use a tolerance of up to 1/8th a clock
+       if (datalen % clk > clk/8) {
+               if (g_debugMode==2) prnt("DEBUG STT: datalen not divisible by clk: %u %% %d = %d - quitting", datalen, clk, datalen % clk);
+               return false;
+       } else {
+               // padd the amount off - could be problematic...  but shouldn't happen often
+               datalen += datalen % clk;
+       }
+       // if datalen is less than one t55xx block - ERROR
+       if (datalen/clk < 8*4) {
+               if (g_debugMode==2) prnt("DEBUG STT: datalen is less than 1 full t55xx block - quitting");              
+               return false;
+       }
+       size_t dataloc = start;
+       size_t newloc = 0;
+       i=0;
+       // warning - overwriting buffer given with raw wave data with ST removed...
+       while ( dataloc < bufsize-(clk/2) ) {
+               //compensate for long high at end of ST not being high... (we cut out the high part)
+               if (buffer[dataloc]<high && buffer[dataloc]>low && buffer[dataloc+3]<high && buffer[dataloc+3]>low) {
+                       for(i=0; i < clk/2-tol; ++i) {
+                               buffer[dataloc+i] = high+5;
+                       }
+               }
+               for (i=0; i<datalen; ++i) {
+                       if (i+newloc < bufsize) {
+                               if (i+newloc < dataloc)
+                                       buffer[i+newloc] = buffer[dataloc];
+
+                               dataloc++;                              
+                       }
+               }
+               newloc += i;
+               //skip next ST
+               dataloc += clk*4;
+       }
+       *size = newloc;
+       return true;
+}
index ab81c34c459ef327cbe3ea595af3f1ecf1d5a72b..d4a1fda06e47aaf28f62310cc7e95f8c6cd12dce 100644 (file)
 #ifndef LFDEMOD_H__
 #define LFDEMOD_H__
 #include <stdint.h>
+#include "common.h"  //for bool
 
 //generic
+size_t   addParity(uint8_t *BitSource, uint8_t *dest, uint8_t sourceLen, uint8_t pLen, uint8_t pType);
 int      askdemod(uint8_t *BinStream, size_t *size, int *clk, int *invert, int maxErr, uint8_t amp, uint8_t askType);
 int      BiphaseRawDecode(uint8_t * BitStream, size_t *size, int offset, int invert);
 uint32_t bytebits_to_byte(uint8_t* src, size_t numbits);
+uint32_t bytebits_to_byteLSBF(uint8_t* src, size_t numbits);
 uint16_t countFC(uint8_t *BitStream, size_t size, uint8_t fskAdj);
 int      DetectASKClock(uint8_t dest[], size_t size, int *clock, int maxErr);
 uint8_t  DetectCleanAskWave(uint8_t dest[], size_t size, uint8_t high, uint8_t low);
@@ -26,12 +29,13 @@ uint8_t  detectFSKClk(uint8_t *BitStream, size_t size, uint8_t fcHigh, uint8_t f
 int      DetectNRZClock(uint8_t dest[], size_t size, int clock);
 int      DetectPSKClock(uint8_t dest[], size_t size, int clock);
 int      DetectStrongAskClock(uint8_t dest[], size_t size, uint8_t high, uint8_t low);
-uint8_t  Em410xDecode(uint8_t *BitStream, size_t *size, size_t *startIdx, uint32_t *hi, uint64_t *lo);
+bool     DetectST(uint8_t buffer[], size_t *size, int *foundclock);
 int      fskdemod(uint8_t *dest, size_t size, uint8_t rfLen, uint8_t invert, uint8_t fchigh, uint8_t fclow);
 int      getHiLo(uint8_t *BitStream, size_t size, int *high, int *low, uint8_t fuzzHi, uint8_t fuzzLo);
+uint32_t manchesterEncode2Bytes(uint16_t datain);
 int      ManchesterEncode(uint8_t *BitStream, size_t size);
 int      manrawdecode(uint8_t *BitStream, size_t *size, uint8_t invert);
-int      nrzRawDemod(uint8_t *dest, size_t *size, int *clk, int *invert, int maxErr);
+int      nrzRawDemod(uint8_t *dest, size_t *size, int *clk, int *invert);
 uint8_t  parityTest(uint32_t bits, uint8_t bitLen, uint8_t pType);
 uint8_t  preambleSearch(uint8_t *BitStream, uint8_t *preamble, size_t pLen, size_t *size, size_t *startIdx);
 int      pskRawDemod(uint8_t dest[], size_t *size, int *clock, int *invert);
@@ -41,11 +45,14 @@ size_t   removeParity(uint8_t *BitStream, size_t startIdx, uint8_t pLen, uint8_t
 
 //tag specific
 int AWIDdemodFSK(uint8_t *dest, size_t *size);
+uint8_t  Em410xDecode(uint8_t *BitStream, size_t *size, size_t *startIdx, uint32_t *hi, uint64_t *lo);
+int FDXBdemodBI(uint8_t *dest, size_t *size);
 int gProxII_Demod(uint8_t BitStream[], size_t *size);
 int HIDdemodFSK(uint8_t *dest, size_t *size, uint32_t *hi2, uint32_t *hi, uint32_t *lo);
 int IOdemodFSK(uint8_t *dest, size_t size);
 int indala26decode(uint8_t *bitStream, size_t *size, uint8_t *invert);
-int PyramiddemodFSK(uint8_t *dest, size_t *size);
 int ParadoxdemodFSK(uint8_t *dest, size_t *size, uint32_t *hi2, uint32_t *hi, uint32_t *lo);
+int PyramiddemodFSK(uint8_t *dest, size_t *size);
+int VikingDemod_AM(uint8_t *dest, size_t *size);
 
 #endif
index 6a4c9a103bff1a03ebb21215e968b54bc9aa7f09..69631f580f491a4810d24dcc3495919388cb4880 100644 (file)
@@ -1,26 +1,46 @@
-#include <stdio.h>
-#include <strings.h>
 #include <string.h>
 #include <stdint.h>
 #include <stdarg.h>
 #include "protocols.h"
+
+// ATA55xx shared presets & routines
+uint32_t GetT55xxClockBit(uint32_t clock) {
+       switch (clock) {
+               case 128:
+                       return T55x7_BITRATE_RF_128;
+               case 100:
+                       return T55x7_BITRATE_RF_100;
+               case 64:
+                       return T55x7_BITRATE_RF_64;
+               case 50:
+                       return T55x7_BITRATE_RF_50;
+               case 40:
+                       return T55x7_BITRATE_RF_40;
+               case 32:
+                       return T55x7_BITRATE_RF_32;
+               case 16:
+                       return T55x7_BITRATE_RF_16;
+               case 8:
+                       return T55x7_BITRATE_RF_8;
+               default:
+                       return 0;
+       }
+}
+
 #ifndef ON_DEVICE
 #include "ui.h"
 #define prnt PrintAndLog
-#endif
-
-
 
+// iclass / picopass chip config structures and shared routines
 typedef struct {
-       uint8_t app_limit;
-       uint8_t otp[2];
-       uint8_t block_writelock;
-       uint8_t chip_config;
-       uint8_t mem_config;
-       uint8_t eas;
-       uint8_t fuses;
-}picopass_conf_block;
-
+       uint8_t app_limit;      //[8]
+       uint8_t otp[2];         //[9-10]
+       uint8_t block_writelock;//[11]
+       uint8_t chip_config;    //[12]
+       uint8_t mem_config;     //[13]
+       uint8_t eas;            //[14]
+       uint8_t fuses;          //[15]
+} picopass_conf_block;
 
 typedef struct {
        uint8_t csn[8];
@@ -29,32 +49,17 @@ typedef struct {
        uint8_t key_d[8];
        uint8_t key_c[8];
        uint8_t app_issuer_area[8];
+} picopass_hdr;
 
-}picopass_hdr;
-
-
-//#define prnt printf
-/*void prnt(char *fmt,...)
-{
-       va_list argptr;
-       va_start(argptr, fmt);
-       vprintf(fmt, argptr);
-       printf("          "); // cleaning prompt
-       va_end(argptr);
-       printf("\n");
-}
-*/
-uint8_t isset(uint8_t val, uint8_t mask)
-{
+uint8_t isset(uint8_t val, uint8_t mask) {
        return (val & mask);
 }
 
-uint8_t notset(uint8_t val, uint8_t mask){
+uint8_t notset(uint8_t val, uint8_t mask) {
        return !(val & mask);
 }
 
-void fuse_config(const picopass_hdr *hdr)
-{
+void fuse_config(const picopass_hdr *hdr) {
        uint8_t fuses = hdr->conf.fuses;
 
        if (isset(fuses,FUSE_FPERS))prnt("      Mode: Personalization [Programmable]");
@@ -75,42 +80,68 @@ void fuse_config(const picopass_hdr *hdr)
        if( isset( fuses, FUSE_RA)) prnt("      RA: Read access enabled");
        else prnt("     RA: Read access not enabled");
 }
-void mem_config(const picopass_hdr *hdr)
-{
-       uint8_t mem = hdr->conf.mem_config;
-       if( isset (mem, 0x80)) prnt("   Mem: 16KBits (255 * 8 bytes)");
-       else prnt("     Mem: 2 KBits ( 32 * 8 bytes)");
 
+void getMemConfig(uint8_t mem_cfg, uint8_t chip_cfg, uint8_t *max_blk, uint8_t *app_areas, uint8_t *kb) {
+       // mem-bit 5, mem-bit 7, chip-bit 4: defines chip type
+       if(isset(chip_cfg, 0x10) && notset(mem_cfg, 0x80) && notset(mem_cfg, 0x20)) {
+               *kb = 2;
+               *app_areas = 2;
+               *max_blk = 31;
+       } else if(isset(chip_cfg, 0x10) && isset(mem_cfg, 0x80) && notset(mem_cfg, 0x20)) {
+               *kb = 16;
+               *app_areas = 2;
+               *max_blk = 255; //16kb
+       } else if(notset(chip_cfg, 0x10) && notset(mem_cfg, 0x80) && notset(mem_cfg, 0x20)) {
+               *kb = 16;
+               *app_areas = 16;
+               *max_blk = 255; //16kb
+       } else if(isset(chip_cfg, 0x10) && isset(mem_cfg, 0x80) && isset(mem_cfg, 0x20)) {
+               *kb = 32;
+               *app_areas = 3;
+               *max_blk = 255; //16kb
+       } else if(notset(chip_cfg, 0x10) && notset(mem_cfg, 0x80) && isset(mem_cfg, 0x20)) {
+               *kb = 32;
+               *app_areas = 17;
+               *max_blk = 255; //16kb
+       } else {
+               *kb = 32;
+               *app_areas = 2;
+               *max_blk = 255;
+       }
 }
-void applimit_config(const picopass_hdr *hdr)
-{
+
+void mem_app_config(const picopass_hdr *hdr) {
+       uint8_t mem = hdr->conf.mem_config;
+       uint8_t chip = hdr->conf.chip_config;
        uint8_t applimit = hdr->conf.app_limit;
-       prnt("  AA1: blocks 6-%d", applimit);
-       prnt("  AA2: blocks %d-", (applimit+1));
+       if (applimit < 6) applimit = 26;
+       uint8_t kb = 2;
+       uint8_t app_areas = 2;
+       uint8_t max_blk = 31;
+       getMemConfig(mem, chip, &max_blk, &app_areas, &kb);
+       prnt("  Mem: %u KBits/%u App Areas (%u * 8 bytes) [%02X]", kb, app_areas, max_blk, mem);
+       prnt("  AA1: blocks 06-%02X", applimit);
+       prnt("  AA2: blocks %02X-%02X", applimit+1, max_blk);
 }
-void print_picopass_info(const picopass_hdr *hdr)
-{
+void print_picopass_info(const picopass_hdr *hdr) {
        fuse_config(hdr);
-       mem_config(hdr);
-       applimit_config(hdr);
+       mem_app_config(hdr);
 }
-void printIclassDumpInfo(uint8_t* iclass_dump)
-{
-//     picopass_hdr hdr;
-//     memcpy(&hdr, iclass_dump, sizeof(picopass_hdr));
+void printIclassDumpInfo(uint8_t* iclass_dump) {
        print_picopass_info((picopass_hdr *) iclass_dump);
 }
 
 /*
-void test()
-{
+void test() {
        picopass_hdr hdr = {0x27,0xaf,0x48,0x01,0xf9,0xff,0x12,0xe0,0x12,0xff,0xff,0xff,0x7f,0x1f,0xff,0x3c};
        prnt("Picopass configuration:");
        print_picopass_info(&hdr);
 }
-int main(int argc, char *argv[])
-{
+int main(int argc, char *argv[]) {
        test();
        return 0;
 }
 */
+
+#endif
+//ON_DEVICE
index 580342728b866ee7f76d3f09537580da1c43c72d..cdcf720b8b2546dfbd80fbe99d5f7335d0cd1bfc 100644 (file)
@@ -99,7 +99,7 @@ NXP/Philips CUSTOM COMMANDS
 #define ICLASS_CMD_CHECK            0x05
 #define ICLASS_CMD_DETECT           0x0F
 #define ICLASS_CMD_HALT             0x00
-#define ICLASS_CMD_UPDATE                      0x87
+#define ICLASS_CMD_UPDATE           0x87
 #define ICLASS_CMD_ACT              0x8E
 #define ICLASS_CMD_READ4            0x06
 
@@ -180,9 +180,25 @@ NXP/Philips CUSTOM COMMANDS
 #define ISO15693_READ_MULTI_SECSTATUS 0x2C
 
 
-#define ISO_14443A 0
-#define ICLASS     1
-#define ISO_14443B 2
+// Topaz command set:
+#define        TOPAZ_REQA                                              0x26    // Request
+#define        TOPAZ_WUPA                                              0x52    // WakeUp
+#define        TOPAZ_RID                                               0x78    // Read ID
+#define        TOPAZ_RALL                                              0x00    // Read All (all bytes)
+#define        TOPAZ_READ                                              0x01    // Read (a single byte)
+#define        TOPAZ_WRITE_E                                   0x53    // Write-with-erase (a single byte)
+#define        TOPAZ_WRITE_NE                                  0x1a    // Write-no-erase (a single byte)
+// additional commands for Dynamic Memory Model
+#define TOPAZ_RSEG                                             0x10    // Read segment
+#define TOPAZ_READ8                                            0x02    // Read (eight bytes)
+#define TOPAZ_WRITE_E8                                 0x54    // Write-with-erase (eight bytes)
+#define TOPAZ_WRITE_NE8                                        0x1B    // Write-no-erase (eight bytes)
+
+
+#define ISO_14443A     0
+#define ICLASS         1
+#define ISO_14443B     2
+#define TOPAZ          3
 
 //-- Picopass fuses
 #define FUSE_FPERS   0x80
@@ -194,7 +210,60 @@ NXP/Philips CUSTOM COMMANDS
 #define FUSE_FPROD0  0x02
 #define FUSE_RA      0x01
 
-
 void printIclassDumpInfo(uint8_t* iclass_dump);
+void getMemConfig(uint8_t mem_cfg, uint8_t chip_cfg, uint8_t *max_blk, uint8_t *app_areas, uint8_t *kb);
+
+/* T55x7 configuration register definitions */
+#define T55x7_POR_DELAY             0x00000001
+#define T55x7_ST_TERMINATOR         0x00000008
+#define T55x7_PWD                   0x00000010
+#define T55x7_MAXBLOCK_SHIFT        5
+#define T55x7_AOR                   0x00000200
+#define T55x7_PSKCF_RF_2            0
+#define T55x7_PSKCF_RF_4            0x00000400
+#define T55x7_PSKCF_RF_8            0x00000800
+#define T55x7_MODULATION_DIRECT     0
+#define T55x7_MODULATION_PSK1       0x00001000
+#define T55x7_MODULATION_PSK2       0x00002000
+#define T55x7_MODULATION_PSK3       0x00003000
+#define T55x7_MODULATION_FSK1       0x00004000
+#define T55x7_MODULATION_FSK2       0x00005000
+#define T55x7_MODULATION_FSK1a      0x00006000
+#define T55x7_MODULATION_FSK2a      0x00007000
+#define T55x7_MODULATION_MANCHESTER 0x00008000
+#define T55x7_MODULATION_BIPHASE    0x00010000
+#define T55x7_MODULATION_DIPHASE    0x00018000
+#define T55x7_BITRATE_RF_8          0
+#define T55x7_BITRATE_RF_16         0x00040000
+#define T55x7_BITRATE_RF_32         0x00080000
+#define T55x7_BITRATE_RF_40         0x000C0000
+#define T55x7_BITRATE_RF_50         0x00100000
+#define T55x7_BITRATE_RF_64         0x00140000
+#define T55x7_BITRATE_RF_100        0x00180000
+#define T55x7_BITRATE_RF_128        0x001C0000
+
+/* T5555 (Q5) configuration register definitions */
+#define T5555_ST_TERMINATOR         0x00000001
+#define T5555_MAXBLOCK_SHIFT        0x00000001
+#define T5555_MODULATION_MANCHESTER 0
+#define T5555_MODULATION_PSK1       0x00000010
+#define T5555_MODULATION_PSK2       0x00000020
+#define T5555_MODULATION_PSK3       0x00000030
+#define T5555_MODULATION_FSK1       0x00000040
+#define T5555_MODULATION_FSK2       0x00000050
+#define T5555_MODULATION_BIPHASE    0x00000060
+#define T5555_MODULATION_DIRECT     0x00000070
+#define T5555_INVERT_OUTPUT         0x00000080
+#define T5555_PSK_RF_2              0
+#define T5555_PSK_RF_4              0x00000100
+#define T5555_PSK_RF_8              0x00000200
+#define T5555_USE_PWD               0x00000400
+#define T5555_USE_AOR               0x00000800
+#define T5555_BITRATE_SHIFT         12 //(RF=2n+2)   ie 64=2*0x1F+2   or n = (RF-2)/2
+#define T5555_FAST_WRITE            0x00004000
+#define T5555_PAGE_SELECT           0x00008000
+
+uint32_t GetT55xxClockBit(uint32_t clock);
 
-#endif // PROTOCOLS_H
+#endif 
+// PROTOCOLS_H
diff --git a/common/sha1.c b/common/sha1.c
new file mode 100644 (file)
index 0000000..d20c54a
--- /dev/null
@@ -0,0 +1,665 @@
+/*
+ *  FIPS-180-1 compliant SHA-1 implementation
+ *
+ *  Copyright (C) 2006-2014, ARM Limited, All Rights Reserved
+ *  This file is part of mbed TLS (https://tls.mbed.org)
+ *
+ *  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 2 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, write to the Free Software Foundation, Inc.,
+ *  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+/*
+ *  The SHA-1 standard was published by NIST in 1993.
+ *
+ *  http://www.itl.nist.gov/fipspubs/fip180-1.htm
+ */
+
+#if !defined(POLARSSL_CONFIG_FILE)
+//#include "polarssl/config.h"
+#define POLARSSL_SHA1_C
+
+#else
+#include POLARSSL_CONFIG_FILE
+#endif
+
+#if defined(POLARSSL_SHA1_C)
+
+#include "sha1.h"
+
+#include <string.h>
+
+#if defined(POLARSSL_FS_IO)
+#include <stdio.h>
+#endif
+
+#if defined(POLARSSL_SELF_TEST)
+#if defined(POLARSSL_PLATFORM_C)
+#include "polarssl/platform.h"
+#else
+#include <stdio.h>
+#define polarssl_printf printf
+#endif /* POLARSSL_PLATFORM_C */
+#endif /* POLARSSL_SELF_TEST */
+
+/* Implementation that should never be optimized out by the compiler */
+static void polarssl_zeroize( void *v, size_t n ) {
+    volatile unsigned char *p = v; while( n-- ) *p++ = 0;
+}
+
+#if !defined(POLARSSL_SHA1_ALT)
+
+/*
+ * 32-bit integer manipulation macros (big endian)
+ */
+#ifndef GET_UINT32_BE
+#define GET_UINT32_BE(n,b,i)                            \
+{                                                       \
+    (n) = ( (uint32_t) (b)[(i)    ] << 24 )             \
+        | ( (uint32_t) (b)[(i) + 1] << 16 )             \
+        | ( (uint32_t) (b)[(i) + 2] <<  8 )             \
+        | ( (uint32_t) (b)[(i) + 3]       );            \
+}
+#endif
+
+#ifndef PUT_UINT32_BE
+#define PUT_UINT32_BE(n,b,i)                            \
+{                                                       \
+    (b)[(i)    ] = (unsigned char) ( (n) >> 24 );       \
+    (b)[(i) + 1] = (unsigned char) ( (n) >> 16 );       \
+    (b)[(i) + 2] = (unsigned char) ( (n) >>  8 );       \
+    (b)[(i) + 3] = (unsigned char) ( (n)       );       \
+}
+#endif
+
+void sha1_init( sha1_context *ctx )
+{
+    memset( ctx, 0, sizeof( sha1_context ) );
+}
+
+void sha1_free( sha1_context *ctx )
+{
+    if( ctx == NULL )
+        return;
+
+    polarssl_zeroize( ctx, sizeof( sha1_context ) );
+}
+
+/*
+ * SHA-1 context setup
+ */
+void sha1_starts( sha1_context *ctx )
+{
+    ctx->total[0] = 0;
+    ctx->total[1] = 0;
+
+    ctx->state[0] = 0x67452301;
+    ctx->state[1] = 0xEFCDAB89;
+    ctx->state[2] = 0x98BADCFE;
+    ctx->state[3] = 0x10325476;
+    ctx->state[4] = 0xC3D2E1F0;
+}
+
+void sha1_process( sha1_context *ctx, const unsigned char data[64] )
+{
+    uint32_t temp, W[16], A, B, C, D, E;
+
+    GET_UINT32_BE( W[ 0], data,  0 );
+    GET_UINT32_BE( W[ 1], data,  4 );
+    GET_UINT32_BE( W[ 2], data,  8 );
+    GET_UINT32_BE( W[ 3], data, 12 );
+    GET_UINT32_BE( W[ 4], data, 16 );
+    GET_UINT32_BE( W[ 5], data, 20 );
+    GET_UINT32_BE( W[ 6], data, 24 );
+    GET_UINT32_BE( W[ 7], data, 28 );
+    GET_UINT32_BE( W[ 8], data, 32 );
+    GET_UINT32_BE( W[ 9], data, 36 );
+    GET_UINT32_BE( W[10], data, 40 );
+    GET_UINT32_BE( W[11], data, 44 );
+    GET_UINT32_BE( W[12], data, 48 );
+    GET_UINT32_BE( W[13], data, 52 );
+    GET_UINT32_BE( W[14], data, 56 );
+    GET_UINT32_BE( W[15], data, 60 );
+
+#define S(x,n) ((x << n) | ((x & 0xFFFFFFFF) >> (32 - n)))
+
+#define R(t)                                            \
+(                                                       \
+    temp = W[( t -  3 ) & 0x0F] ^ W[( t - 8 ) & 0x0F] ^ \
+           W[( t - 14 ) & 0x0F] ^ W[  t       & 0x0F],  \
+    ( W[t & 0x0F] = S(temp,1) )                         \
+)
+
+#define P(a,b,c,d,e,x)                                  \
+{                                                       \
+    e += S(a,5) + F(b,c,d) + K + x; b = S(b,30);        \
+}
+
+    A = ctx->state[0];
+    B = ctx->state[1];
+    C = ctx->state[2];
+    D = ctx->state[3];
+    E = ctx->state[4];
+
+#define F(x,y,z) (z ^ (x & (y ^ z)))
+#define K 0x5A827999
+
+    P( A, B, C, D, E, W[0]  );
+    P( E, A, B, C, D, W[1]  );
+    P( D, E, A, B, C, W[2]  );
+    P( C, D, E, A, B, W[3]  );
+    P( B, C, D, E, A, W[4]  );
+    P( A, B, C, D, E, W[5]  );
+    P( E, A, B, C, D, W[6]  );
+    P( D, E, A, B, C, W[7]  );
+    P( C, D, E, A, B, W[8]  );
+    P( B, C, D, E, A, W[9]  );
+    P( A, B, C, D, E, W[10] );
+    P( E, A, B, C, D, W[11] );
+    P( D, E, A, B, C, W[12] );
+    P( C, D, E, A, B, W[13] );
+    P( B, C, D, E, A, W[14] );
+    P( A, B, C, D, E, W[15] );
+    P( E, A, B, C, D, R(16) );
+    P( D, E, A, B, C, R(17) );
+    P( C, D, E, A, B, R(18) );
+    P( B, C, D, E, A, R(19) );
+
+#undef K
+#undef F
+
+#define F(x,y,z) (x ^ y ^ z)
+#define K 0x6ED9EBA1
+
+    P( A, B, C, D, E, R(20) );
+    P( E, A, B, C, D, R(21) );
+    P( D, E, A, B, C, R(22) );
+    P( C, D, E, A, B, R(23) );
+    P( B, C, D, E, A, R(24) );
+    P( A, B, C, D, E, R(25) );
+    P( E, A, B, C, D, R(26) );
+    P( D, E, A, B, C, R(27) );
+    P( C, D, E, A, B, R(28) );
+    P( B, C, D, E, A, R(29) );
+    P( A, B, C, D, E, R(30) );
+    P( E, A, B, C, D, R(31) );
+    P( D, E, A, B, C, R(32) );
+    P( C, D, E, A, B, R(33) );
+    P( B, C, D, E, A, R(34) );
+    P( A, B, C, D, E, R(35) );
+    P( E, A, B, C, D, R(36) );
+    P( D, E, A, B, C, R(37) );
+    P( C, D, E, A, B, R(38) );
+    P( B, C, D, E, A, R(39) );
+
+#undef K
+#undef F
+
+#define F(x,y,z) ((x & y) | (z & (x | y)))
+#define K 0x8F1BBCDC
+
+    P( A, B, C, D, E, R(40) );
+    P( E, A, B, C, D, R(41) );
+    P( D, E, A, B, C, R(42) );
+    P( C, D, E, A, B, R(43) );
+    P( B, C, D, E, A, R(44) );
+    P( A, B, C, D, E, R(45) );
+    P( E, A, B, C, D, R(46) );
+    P( D, E, A, B, C, R(47) );
+    P( C, D, E, A, B, R(48) );
+    P( B, C, D, E, A, R(49) );
+    P( A, B, C, D, E, R(50) );
+    P( E, A, B, C, D, R(51) );
+    P( D, E, A, B, C, R(52) );
+    P( C, D, E, A, B, R(53) );
+    P( B, C, D, E, A, R(54) );
+    P( A, B, C, D, E, R(55) );
+    P( E, A, B, C, D, R(56) );
+    P( D, E, A, B, C, R(57) );
+    P( C, D, E, A, B, R(58) );
+    P( B, C, D, E, A, R(59) );
+
+#undef K
+#undef F
+
+#define F(x,y,z) (x ^ y ^ z)
+#define K 0xCA62C1D6
+
+    P( A, B, C, D, E, R(60) );
+    P( E, A, B, C, D, R(61) );
+    P( D, E, A, B, C, R(62) );
+    P( C, D, E, A, B, R(63) );
+    P( B, C, D, E, A, R(64) );
+    P( A, B, C, D, E, R(65) );
+    P( E, A, B, C, D, R(66) );
+    P( D, E, A, B, C, R(67) );
+    P( C, D, E, A, B, R(68) );
+    P( B, C, D, E, A, R(69) );
+    P( A, B, C, D, E, R(70) );
+    P( E, A, B, C, D, R(71) );
+    P( D, E, A, B, C, R(72) );
+    P( C, D, E, A, B, R(73) );
+    P( B, C, D, E, A, R(74) );
+    P( A, B, C, D, E, R(75) );
+    P( E, A, B, C, D, R(76) );
+    P( D, E, A, B, C, R(77) );
+    P( C, D, E, A, B, R(78) );
+    P( B, C, D, E, A, R(79) );
+
+#undef K
+#undef F
+
+    ctx->state[0] += A;
+    ctx->state[1] += B;
+    ctx->state[2] += C;
+    ctx->state[3] += D;
+    ctx->state[4] += E;
+}
+
+/*
+ * SHA-1 process buffer
+ */
+void sha1_update( sha1_context *ctx, const unsigned char *input, size_t ilen )
+{
+    size_t fill;
+    uint32_t left;
+
+    if( ilen == 0 )
+        return;
+
+    left = ctx->total[0] & 0x3F;
+    fill = 64 - left;
+
+    ctx->total[0] += (uint32_t) ilen;
+    ctx->total[0] &= 0xFFFFFFFF;
+
+    if( ctx->total[0] < (uint32_t) ilen )
+        ctx->total[1]++;
+
+    if( left && ilen >= fill )
+    {
+        memcpy( (void *) (ctx->buffer + left), input, fill );
+        sha1_process( ctx, ctx->buffer );
+        input += fill;
+        ilen  -= fill;
+        left = 0;
+    }
+
+    while( ilen >= 64 )
+    {
+        sha1_process( ctx, input );
+        input += 64;
+        ilen  -= 64;
+    }
+
+    if( ilen > 0 )
+        memcpy( (void *) (ctx->buffer + left), input, ilen );
+}
+
+static const unsigned char sha1_padding[64] =
+{
+ 0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+};
+
+/*
+ * SHA-1 final digest
+ */
+void sha1_finish( sha1_context *ctx, unsigned char output[20] )
+{
+    uint32_t last, padn;
+    uint32_t high, low;
+    unsigned char msglen[8];
+
+    high = ( ctx->total[0] >> 29 )
+         | ( ctx->total[1] <<  3 );
+    low  = ( ctx->total[0] <<  3 );
+
+    PUT_UINT32_BE( high, msglen, 0 );
+    PUT_UINT32_BE( low,  msglen, 4 );
+
+    last = ctx->total[0] & 0x3F;
+    padn = ( last < 56 ) ? ( 56 - last ) : ( 120 - last );
+
+    sha1_update( ctx, sha1_padding, padn );
+    sha1_update( ctx, msglen, 8 );
+
+    PUT_UINT32_BE( ctx->state[0], output,  0 );
+    PUT_UINT32_BE( ctx->state[1], output,  4 );
+    PUT_UINT32_BE( ctx->state[2], output,  8 );
+    PUT_UINT32_BE( ctx->state[3], output, 12 );
+    PUT_UINT32_BE( ctx->state[4], output, 16 );
+}
+
+#endif /* !POLARSSL_SHA1_ALT */
+
+/*
+ * output = SHA-1( input buffer )
+ */
+void sha1( const unsigned char *input, size_t ilen, unsigned char output[20] )
+{
+    sha1_context ctx;
+
+    sha1_init( &ctx );
+    sha1_starts( &ctx );
+    sha1_update( &ctx, input, ilen );
+    sha1_finish( &ctx, output );
+    sha1_free( &ctx );
+}
+
+#if defined(POLARSSL_FS_IO)
+/*
+ * output = SHA-1( file contents )
+ */
+int sha1_file( const char *path, unsigned char output[20] )
+{
+    FILE *f;
+    size_t n;
+    sha1_context ctx;
+    unsigned char buf[1024];
+
+    if( ( f = fopen( path, "rb" ) ) == NULL )
+        return( POLARSSL_ERR_SHA1_FILE_IO_ERROR );
+
+    sha1_init( &ctx );
+    sha1_starts( &ctx );
+
+    while( ( n = fread( buf, 1, sizeof( buf ), f ) ) > 0 )
+        sha1_update( &ctx, buf, n );
+
+    sha1_finish( &ctx, output );
+    sha1_free( &ctx );
+
+    if( ferror( f ) != 0 )
+    {
+        fclose( f );
+        return( POLARSSL_ERR_SHA1_FILE_IO_ERROR );
+    }
+
+    fclose( f );
+    return( 0 );
+}
+#endif /* POLARSSL_FS_IO */
+
+/*
+ * SHA-1 HMAC context setup
+ */
+void sha1_hmac_starts( sha1_context *ctx, const unsigned char *key,
+                       size_t keylen )
+{
+    size_t i;
+    unsigned char sum[20];
+
+    if( keylen > 64 )
+    {
+        sha1( key, keylen, sum );
+        keylen = 20;
+        key = sum;
+    }
+
+    memset( ctx->ipad, 0x36, 64 );
+    memset( ctx->opad, 0x5C, 64 );
+
+    for( i = 0; i < keylen; i++ )
+    {
+        ctx->ipad[i] = (unsigned char)( ctx->ipad[i] ^ key[i] );
+        ctx->opad[i] = (unsigned char)( ctx->opad[i] ^ key[i] );
+    }
+
+    sha1_starts( ctx );
+    sha1_update( ctx, ctx->ipad, 64 );
+
+    polarssl_zeroize( sum, sizeof( sum ) );
+}
+
+/*
+ * SHA-1 HMAC process buffer
+ */
+void sha1_hmac_update( sha1_context *ctx, const unsigned char *input,
+                       size_t ilen )
+{
+    sha1_update( ctx, input, ilen );
+}
+
+/*
+ * SHA-1 HMAC final digest
+ */
+void sha1_hmac_finish( sha1_context *ctx, unsigned char output[20] )
+{
+    unsigned char tmpbuf[20];
+
+    sha1_finish( ctx, tmpbuf );
+    sha1_starts( ctx );
+    sha1_update( ctx, ctx->opad, 64 );
+    sha1_update( ctx, tmpbuf, 20 );
+    sha1_finish( ctx, output );
+
+    polarssl_zeroize( tmpbuf, sizeof( tmpbuf ) );
+}
+
+/*
+ * SHA1 HMAC context reset
+ */
+void sha1_hmac_reset( sha1_context *ctx )
+{
+    sha1_starts( ctx );
+    sha1_update( ctx, ctx->ipad, 64 );
+}
+
+/*
+ * output = HMAC-SHA-1( hmac key, input buffer )
+ */
+void sha1_hmac( const unsigned char *key, size_t keylen,
+                const unsigned char *input, size_t ilen,
+                unsigned char output[20] )
+{
+    sha1_context ctx;
+
+    sha1_init( &ctx );
+    sha1_hmac_starts( &ctx, key, keylen );
+    sha1_hmac_update( &ctx, input, ilen );
+    sha1_hmac_finish( &ctx, output );
+    sha1_free( &ctx );
+}
+
+#if defined(POLARSSL_SELF_TEST)
+/*
+ * FIPS-180-1 test vectors
+ */
+static const unsigned char sha1_test_buf[3][57] =
+{
+    { "abc" },
+    { "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq" },
+    { "" }
+};
+
+static const int sha1_test_buflen[3] =
+{
+    3, 56, 1000
+};
+
+static const unsigned char sha1_test_sum[3][20] =
+{
+    { 0xA9, 0x99, 0x3E, 0x36, 0x47, 0x06, 0x81, 0x6A, 0xBA, 0x3E,
+      0x25, 0x71, 0x78, 0x50, 0xC2, 0x6C, 0x9C, 0xD0, 0xD8, 0x9D },
+    { 0x84, 0x98, 0x3E, 0x44, 0x1C, 0x3B, 0xD2, 0x6E, 0xBA, 0xAE,
+      0x4A, 0xA1, 0xF9, 0x51, 0x29, 0xE5, 0xE5, 0x46, 0x70, 0xF1 },
+    { 0x34, 0xAA, 0x97, 0x3C, 0xD4, 0xC4, 0xDA, 0xA4, 0xF6, 0x1E,
+      0xEB, 0x2B, 0xDB, 0xAD, 0x27, 0x31, 0x65, 0x34, 0x01, 0x6F }
+};
+
+/*
+ * RFC 2202 test vectors
+ */
+static const unsigned char sha1_hmac_test_key[7][26] =
+{
+    { "\x0B\x0B\x0B\x0B\x0B\x0B\x0B\x0B\x0B\x0B\x0B\x0B\x0B\x0B\x0B\x0B"
+      "\x0B\x0B\x0B\x0B" },
+    { "Jefe" },
+    { "\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA"
+      "\xAA\xAA\xAA\xAA" },
+    { "\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0A\x0B\x0C\x0D\x0E\x0F\x10"
+      "\x11\x12\x13\x14\x15\x16\x17\x18\x19" },
+    { "\x0C\x0C\x0C\x0C\x0C\x0C\x0C\x0C\x0C\x0C\x0C\x0C\x0C\x0C\x0C\x0C"
+      "\x0C\x0C\x0C\x0C" },
+    { "" }, /* 0xAA 80 times */
+    { "" }
+};
+
+static const int sha1_hmac_test_keylen[7] =
+{
+    20, 4, 20, 25, 20, 80, 80
+};
+
+static const unsigned char sha1_hmac_test_buf[7][74] =
+{
+    { "Hi There" },
+    { "what do ya want for nothing?" },
+    { "\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD"
+      "\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD"
+      "\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD"
+      "\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD"
+      "\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD" },
+    { "\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD"
+      "\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD"
+      "\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD"
+      "\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD"
+      "\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD" },
+    { "Test With Truncation" },
+    { "Test Using Larger Than Block-Size Key - Hash Key First" },
+    { "Test Using Larger Than Block-Size Key and Larger"
+      " Than One Block-Size Data" }
+};
+
+static const int sha1_hmac_test_buflen[7] =
+{
+    8, 28, 50, 50, 20, 54, 73
+};
+
+static const unsigned char sha1_hmac_test_sum[7][20] =
+{
+    { 0xB6, 0x17, 0x31, 0x86, 0x55, 0x05, 0x72, 0x64, 0xE2, 0x8B,
+      0xC0, 0xB6, 0xFB, 0x37, 0x8C, 0x8E, 0xF1, 0x46, 0xBE, 0x00 },
+    { 0xEF, 0xFC, 0xDF, 0x6A, 0xE5, 0xEB, 0x2F, 0xA2, 0xD2, 0x74,
+      0x16, 0xD5, 0xF1, 0x84, 0xDF, 0x9C, 0x25, 0x9A, 0x7C, 0x79 },
+    { 0x12, 0x5D, 0x73, 0x42, 0xB9, 0xAC, 0x11, 0xCD, 0x91, 0xA3,
+      0x9A, 0xF4, 0x8A, 0xA1, 0x7B, 0x4F, 0x63, 0xF1, 0x75, 0xD3 },
+    { 0x4C, 0x90, 0x07, 0xF4, 0x02, 0x62, 0x50, 0xC6, 0xBC, 0x84,
+      0x14, 0xF9, 0xBF, 0x50, 0xC8, 0x6C, 0x2D, 0x72, 0x35, 0xDA },
+    { 0x4C, 0x1A, 0x03, 0x42, 0x4B, 0x55, 0xE0, 0x7F, 0xE7, 0xF2,
+      0x7B, 0xE1 },
+    { 0xAA, 0x4A, 0xE5, 0xE1, 0x52, 0x72, 0xD0, 0x0E, 0x95, 0x70,
+      0x56, 0x37, 0xCE, 0x8A, 0x3B, 0x55, 0xED, 0x40, 0x21, 0x12 },
+    { 0xE8, 0xE9, 0x9D, 0x0F, 0x45, 0x23, 0x7D, 0x78, 0x6D, 0x6B,
+      0xBA, 0xA7, 0x96, 0x5C, 0x78, 0x08, 0xBB, 0xFF, 0x1A, 0x91 }
+};
+
+/*
+ * Checkup routine
+ */
+int sha1_self_test( int verbose )
+{
+    int i, j, buflen, ret = 0;
+    unsigned char buf[1024];
+    unsigned char sha1sum[20];
+    sha1_context ctx;
+
+    sha1_init( &ctx );
+
+    /*
+     * SHA-1
+     */
+    for( i = 0; i < 3; i++ )
+    {
+        if( verbose != 0 )
+            polarssl_printf( "  SHA-1 test #%d: ", i + 1 );
+
+        sha1_starts( &ctx );
+
+        if( i == 2 )
+        {
+            memset( buf, 'a', buflen = 1000 );
+
+            for( j = 0; j < 1000; j++ )
+                sha1_update( &ctx, buf, buflen );
+        }
+        else
+            sha1_update( &ctx, sha1_test_buf[i],
+                               sha1_test_buflen[i] );
+
+        sha1_finish( &ctx, sha1sum );
+
+        if( memcmp( sha1sum, sha1_test_sum[i], 20 ) != 0 )
+        {
+            if( verbose != 0 )
+                polarssl_printf( "failed\n" );
+
+            ret = 1;
+            goto exit;
+        }
+
+        if( verbose != 0 )
+            polarssl_printf( "passed\n" );
+    }
+
+    if( verbose != 0 )
+        polarssl_printf( "\n" );
+
+    for( i = 0; i < 7; i++ )
+    {
+        if( verbose != 0 )
+            polarssl_printf( "  HMAC-SHA-1 test #%d: ", i + 1 );
+
+        if( i == 5 || i == 6 )
+        {
+            memset( buf, 0xAA, buflen = 80 );
+            sha1_hmac_starts( &ctx, buf, buflen );
+        }
+        else
+            sha1_hmac_starts( &ctx, sha1_hmac_test_key[i],
+                                    sha1_hmac_test_keylen[i] );
+
+        sha1_hmac_update( &ctx, sha1_hmac_test_buf[i],
+                                sha1_hmac_test_buflen[i] );
+
+        sha1_hmac_finish( &ctx, sha1sum );
+
+        buflen = ( i == 4 ) ? 12 : 20;
+
+        if( memcmp( sha1sum, sha1_hmac_test_sum[i], buflen ) != 0 )
+        {
+            if( verbose != 0 )
+                polarssl_printf( "failed\n" );
+
+            ret = 1;
+            goto exit;
+        }
+
+        if( verbose != 0 )
+            polarssl_printf( "passed\n" );
+    }
+
+    if( verbose != 0 )
+        polarssl_printf( "\n" );
+
+exit:
+    sha1_free( &ctx );
+
+    return( ret );
+}
+
+#endif /* POLARSSL_SELF_TEST */
+
+#endif /* POLARSSL_SHA1_C */
+
diff --git a/common/sha1.h b/common/sha1.h
new file mode 100644 (file)
index 0000000..056bba7
--- /dev/null
@@ -0,0 +1,213 @@
+/**
+ * \file sha1.h
+ *
+ * \brief SHA-1 cryptographic hash function
+ *
+ *  Copyright (C) 2006-2014, ARM Limited, All Rights Reserved
+ *
+ *  This file is part of mbed TLS (https://tls.mbed.org)
+ *
+ *  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 2 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, write to the Free Software Foundation, Inc.,
+ *  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+#ifndef POLARSSL_SHA1_H
+#define POLARSSL_SHA1_H
+
+#if !defined(POLARSSL_CONFIG_FILE)
+//#include "config.h"
+/**
+ * \def POLARSSL_SHA1_C
+ *
+ * Enable the SHA1 cryptographic hash algorithm.
+ *
+ * Module:  library/sha1.c
+ * Caller:  library/md.c
+ *          library/ssl_cli.c
+ *          library/ssl_srv.c
+ *          library/ssl_tls.c
+ *          library/x509write_crt.c
+ *
+ * This module is required for SSL/TLS and SHA1-signed certificates.
+ */
+#define POLARSSL_SHA1_C
+
+#else
+#include POLARSSL_CONFIG_FILE
+#endif
+
+#include <stddef.h>
+
+#if defined(_MSC_VER) && !defined(EFIX64) && !defined(EFI32)
+#include <basetsd.h>
+typedef UINT32 uint32_t;
+#else
+#include <inttypes.h>
+#endif
+
+#define POLARSSL_ERR_SHA1_FILE_IO_ERROR                -0x0076  /**< Read/write error in file. */
+
+#if !defined(POLARSSL_SHA1_ALT)
+// Regular implementation
+//
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * \brief          SHA-1 context structure
+ */
+typedef struct
+{
+    uint32_t total[2];          /*!< number of bytes processed  */
+    uint32_t state[5];          /*!< intermediate digest state  */
+    unsigned char buffer[64];   /*!< data block being processed */
+
+    unsigned char ipad[64];     /*!< HMAC: inner padding        */
+    unsigned char opad[64];     /*!< HMAC: outer padding        */
+}
+sha1_context;
+
+/**
+ * \brief          Initialize SHA-1 context
+ *
+ * \param ctx      SHA-1 context to be initialized
+ */
+void sha1_init( sha1_context *ctx );
+
+/**
+ * \brief          Clear SHA-1 context
+ *
+ * \param ctx      SHA-1 context to be cleared
+ */
+void sha1_free( sha1_context *ctx );
+
+/**
+ * \brief          SHA-1 context setup
+ *
+ * \param ctx      context to be initialized
+ */
+void sha1_starts( sha1_context *ctx );
+
+/**
+ * \brief          SHA-1 process buffer
+ *
+ * \param ctx      SHA-1 context
+ * \param input    buffer holding the  data
+ * \param ilen     length of the input data
+ */
+void sha1_update( sha1_context *ctx, const unsigned char *input, size_t ilen );
+
+/**
+ * \brief          SHA-1 final digest
+ *
+ * \param ctx      SHA-1 context
+ * \param output   SHA-1 checksum result
+ */
+void sha1_finish( sha1_context *ctx, unsigned char output[20] );
+
+/* Internal use */
+void sha1_process( sha1_context *ctx, const unsigned char data[64] );
+
+#ifdef __cplusplus
+}
+#endif
+
+#else  /* POLARSSL_SHA1_ALT */
+#include "sha1_alt.h"
+#endif /* POLARSSL_SHA1_ALT */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * \brief          Output = SHA-1( input buffer )
+ *
+ * \param input    buffer holding the  data
+ * \param ilen     length of the input data
+ * \param output   SHA-1 checksum result
+ */
+void sha1( const unsigned char *input, size_t ilen, unsigned char output[20] );
+
+/**
+ * \brief          Output = SHA-1( file contents )
+ *
+ * \param path     input file name
+ * \param output   SHA-1 checksum result
+ *
+ * \return         0 if successful, or POLARSSL_ERR_SHA1_FILE_IO_ERROR
+ */
+int sha1_file( const char *path, unsigned char output[20] );
+
+/**
+ * \brief          SHA-1 HMAC context setup
+ *
+ * \param ctx      HMAC context to be initialized
+ * \param key      HMAC secret key
+ * \param keylen   length of the HMAC key
+ */
+void sha1_hmac_starts( sha1_context *ctx, const unsigned char *key,
+                       size_t keylen );
+
+/**
+ * \brief          SHA-1 HMAC process buffer
+ *
+ * \param ctx      HMAC context
+ * \param input    buffer holding the  data
+ * \param ilen     length of the input data
+ */
+void sha1_hmac_update( sha1_context *ctx, const unsigned char *input,
+                       size_t ilen );
+
+/**
+ * \brief          SHA-1 HMAC final digest
+ *
+ * \param ctx      HMAC context
+ * \param output   SHA-1 HMAC checksum result
+ */
+void sha1_hmac_finish( sha1_context *ctx, unsigned char output[20] );
+
+/**
+ * \brief          SHA-1 HMAC context reset
+ *
+ * \param ctx      HMAC context to be reset
+ */
+void sha1_hmac_reset( sha1_context *ctx );
+
+/**
+ * \brief          Output = HMAC-SHA-1( hmac key, input buffer )
+ *
+ * \param key      HMAC secret key
+ * \param keylen   length of the HMAC key
+ * \param input    buffer holding the  data
+ * \param ilen     length of the input data
+ * \param output   HMAC-SHA-1 result
+ */
+void sha1_hmac( const unsigned char *key, size_t keylen,
+                const unsigned char *input, size_t ilen,
+                unsigned char output[20] );
+
+/**
+ * \brief          Checkup routine
+ *
+ * \return         0 if successful, or 1 if the test failed
+ */
+int sha1_self_test( int verbose );
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* sha1.h */
index ccbb3c50e91389a4d733e25f75c7f94e50e77ef5..7fd2933c322463f5d5790b9397d5c7aeb8d3b72a 100644 (file)
@@ -293,31 +293,47 @@ bool usb_poll()
   return (pUdp->UDP_CSR[AT91C_EP_OUT] & btReceiveBank);\r
 }\r
 \r
+/**\r
+       In github PR #129, some users appears to get a false positive from\r
+       usb_poll, which returns true, but the usb_read operation\r
+       still returns 0.\r
+       This check is basically the same as above, but also checks\r
+       that the length available to read is non-zero, thus hopefully fixes the\r
+       bug.\r
+**/\r
+bool usb_poll_validate_length()\r
+{\r
+\r
+       if (!usb_check()) return false;\r
+       if (!(pUdp->UDP_CSR[AT91C_EP_OUT] & btReceiveBank)) return false;\r
+       return (pUdp->UDP_CSR[AT91C_EP_OUT] >> 16) >  0;\r
+}\r
+\r
 //*----------------------------------------------------------------------------\r
 //* \fn    usb_read\r
 //* \brief Read available data from Endpoint OUT\r
 //*----------------------------------------------------------------------------\r
 uint32_t usb_read(byte_t* data, size_t len) {\r
-  byte_t bank = btReceiveBank;\r
+       byte_t bank = btReceiveBank;\r
        uint32_t packetSize, nbBytesRcv = 0;\r
-  uint32_t time_out = 0;\r
+       uint32_t time_out = 0;\r
   \r
        while (len)  {\r
                if (!usb_check()) break;\r
 \r
                if ( pUdp->UDP_CSR[AT91C_EP_OUT] & bank ) {\r
                        packetSize = MIN(pUdp->UDP_CSR[AT91C_EP_OUT] >> 16, len);\r
-      len -= packetSize;\r
+                       len -= packetSize;\r
                        while(packetSize--)\r
                                data[nbBytesRcv++] = pUdp->UDP_FDR[AT91C_EP_OUT];\r
                        pUdp->UDP_CSR[AT91C_EP_OUT] &= ~(bank);\r
                        if (bank == AT91C_UDP_RX_DATA_BK0) {\r
                                bank = AT91C_UDP_RX_DATA_BK1;\r
-      } else {\r
+                       } else {\r
                                bank = AT91C_UDP_RX_DATA_BK0;\r
-      }\r
+                       }\r
                }\r
-    if (time_out++ == 0x1fff) break;\r
+               if (time_out++ == 0x1fff) break;\r
        }\r
 \r
        btReceiveBank = bank;\r
@@ -346,7 +362,7 @@ uint32_t usb_write(const byte_t* data, const size_t len) {
                cpt = MIN(length, AT91C_EP_IN_SIZE-1);\r
                length -= cpt;\r
                while (cpt--) pUdp->UDP_FDR[AT91C_EP_IN] = *data++;\r
-               // Wait for the the first bank to be sent\r
+               // Wait for the first bank to be sent\r
                while (!(pUdp->UDP_CSR[AT91C_EP_IN] & AT91C_UDP_TXCOMP)) {\r
                        if (!usb_check()) return length;\r
     }\r
index 59e73a478f6f37334c681068ed5b22b7bb258b9d..c42da8db90d1717c7c0188c84c29cb652c753d66 100644 (file)
@@ -41,6 +41,7 @@ void usb_disable();
 void usb_enable();\r
 bool usb_check();\r
 bool usb_poll();\r
+bool usb_poll_validate_length();\r
 uint32_t usb_read(byte_t* data, size_t len);\r
 uint32_t usb_write(const byte_t* data, const size_t len);\r
 \r
diff --git a/doc/RFID_Antenna-Basic-Form.stl b/doc/RFID_Antenna-Basic-Form.stl
new file mode 100755 (executable)
index 0000000..6679ae8
Binary files /dev/null and b/doc/RFID_Antenna-Basic-Form.stl differ
diff --git a/doc/RFID_Antenna-With-Lanyard-Hook.stl b/doc/RFID_Antenna-With-Lanyard-Hook.stl
new file mode 100755 (executable)
index 0000000..62f5397
Binary files /dev/null and b/doc/RFID_Antenna-With-Lanyard-Hook.stl differ
index fad2ff04c13ab90f4285e631932c4ae803d97335..2f93e741d7f9bbfd4564e5cd2a391b5f736de646 100644 (file)
@@ -5,7 +5,7 @@ clean:
        $(DELETE) *.bgn *.drc *.ncd *.ngd *_par.xrpt *-placed.* *-placed_pad.* *_usage.xml xst_hf.srp xst_lf.srp
        $(DELETE) *.map *.ngc *.xrpt *.pcf *.rbt *_auto_* *.bld *.mrp *.ngm *.unroutes *_summary.xml netlist.lst xst
 
-fpga_hf.ngc: fpga_hf.v fpga.ucf xst_hf.scr util.v hi_simulate.v hi_read_tx.v hi_read_rx_xcorr.v hi_iso14443a.v
+fpga_hf.ngc: fpga_hf.v fpga.ucf xst_hf.scr util.v hi_simulate.v hi_read_tx.v hi_read_rx_xcorr.v hi_iso14443a.v hi_sniffer.v
        $(DELETE) $@
        $(XILINX_TOOLS_PREFIX)xst -ifn xst_hf.scr
 
index 20fb2bd4401254d899d6273451bfccbd827f562b..6e6b9794b7ee55312bd98688d4f406b7e3f92020 100644 (file)
Binary files a/fpga/fpga_hf.bit and b/fpga/fpga_hf.bit differ
index a2100df65f5212761b03b1f4ba1e7a53d8d67ca0..264e1b0c61beea3dc1b3248f1b73293b5d41311f 100644 (file)
@@ -17,6 +17,7 @@
 `include "hi_read_rx_xcorr.v"
 `include "hi_simulate.v"
 `include "hi_iso14443a.v"
+`include "hi_sniffer.v"
 `include "util.v"
 
 module fpga_hf(
@@ -73,9 +74,6 @@ wire hi_read_rx_xcorr_848 = conf_word[0];
 // and whether to drive the coil (reader) or just short it (snooper)
 wire hi_read_rx_xcorr_snoop = conf_word[1];
 
-// Divide the expected subcarrier frequency for hi_read_rx_xcorr by 4
-wire hi_read_rx_xcorr_quarter = conf_word[2];
-
 // For the high-frequency simulated tag: what kind of modulation to use.
 wire [2:0] hi_simulate_mod_type = conf_word[2:0];
 
@@ -102,7 +100,7 @@ hi_read_rx_xcorr hrxc(
        hrxc_ssp_frame, hrxc_ssp_din, ssp_dout, hrxc_ssp_clk,
        cross_hi, cross_lo,
        hrxc_dbg,
-       hi_read_rx_xcorr_848, hi_read_rx_xcorr_snoop, hi_read_rx_xcorr_quarter
+       hi_read_rx_xcorr_848, hi_read_rx_xcorr_snoop
 );
 
 hi_simulate hs(
@@ -125,25 +123,36 @@ hi_iso14443a hisn(
        hi_simulate_mod_type
 );
 
+hi_sniffer he(
+       pck0, ck_1356meg, ck_1356megb,
+       he_pwr_lo, he_pwr_hi, he_pwr_oe1, he_pwr_oe2, he_pwr_oe3,       he_pwr_oe4,
+       adc_d, he_adc_clk,
+       he_ssp_frame, he_ssp_din, ssp_dout, he_ssp_clk,
+       cross_hi, cross_lo,
+       he_dbg,
+       hi_read_rx_xcorr_848, hi_read_rx_xcorr_snoop, hi_read_rx_xcorr_quarter
+);
+
 // Major modes:
 
 //   000 --  HF reader, transmitting to tag; modulation depth selectable
 //   001 --  HF reader, receiving from tag, correlating as it goes; frequency selectable
 //   010 --  HF simulated tag
 //   011 --  HF ISO14443-A
+//   100 --  HF Snoop
 //   111 --  everything off
 
-mux8 mux_ssp_clk               (major_mode, ssp_clk,   ht_ssp_clk,   hrxc_ssp_clk,   hs_ssp_clk,   hisn_ssp_clk,   1'b0, 1'b0, 1'b0, 1'b0);
-mux8 mux_ssp_din               (major_mode, ssp_din,   ht_ssp_din,   hrxc_ssp_din,   hs_ssp_din,   hisn_ssp_din,   1'b0, 1'b0, 1'b0, 1'b0);
-mux8 mux_ssp_frame             (major_mode, ssp_frame, ht_ssp_frame, hrxc_ssp_frame, hs_ssp_frame, hisn_ssp_frame, 1'b0, 1'b0, 1'b0, 1'b0);
-mux8 mux_pwr_oe1               (major_mode, pwr_oe1,   ht_pwr_oe1,   hrxc_pwr_oe1,   hs_pwr_oe1,   hisn_pwr_oe1,   1'b0, 1'b0, 1'b0, 1'b0);
-mux8 mux_pwr_oe2               (major_mode, pwr_oe2,   ht_pwr_oe2,   hrxc_pwr_oe2,   hs_pwr_oe2,   hisn_pwr_oe2,   1'b0, 1'b0, 1'b0, 1'b0);
-mux8 mux_pwr_oe3               (major_mode, pwr_oe3,   ht_pwr_oe3,   hrxc_pwr_oe3,   hs_pwr_oe3,   hisn_pwr_oe3,   1'b0, 1'b0, 1'b0, 1'b0);
-mux8 mux_pwr_oe4               (major_mode, pwr_oe4,   ht_pwr_oe4,   hrxc_pwr_oe4,   hs_pwr_oe4,   hisn_pwr_oe4,   1'b0, 1'b0, 1'b0, 1'b0);
-mux8 mux_pwr_lo                        (major_mode, pwr_lo,    ht_pwr_lo,    hrxc_pwr_lo,    hs_pwr_lo,    hisn_pwr_lo,    1'b0, 1'b0, 1'b0, 1'b0);
-mux8 mux_pwr_hi                        (major_mode, pwr_hi,    ht_pwr_hi,    hrxc_pwr_hi,    hs_pwr_hi,    hisn_pwr_hi,    1'b0, 1'b0, 1'b0, 1'b0);
-mux8 mux_adc_clk               (major_mode, adc_clk,   ht_adc_clk,   hrxc_adc_clk,   hs_adc_clk,   hisn_adc_clk,   1'b0, 1'b0, 1'b0, 1'b0);
-mux8 mux_dbg                   (major_mode, dbg,       ht_dbg,       hrxc_dbg,       hs_dbg,       hisn_dbg,       1'b0, 1'b0, 1'b0, 1'b0);
+mux8 mux_ssp_clk               (major_mode, ssp_clk,   ht_ssp_clk,   hrxc_ssp_clk,   hs_ssp_clk,   hisn_ssp_clk,   he_ssp_clk, 1'b0, 1'b0, 1'b0);
+mux8 mux_ssp_din               (major_mode, ssp_din,   ht_ssp_din,   hrxc_ssp_din,   hs_ssp_din,   hisn_ssp_din,   he_ssp_din, 1'b0, 1'b0, 1'b0);
+mux8 mux_ssp_frame             (major_mode, ssp_frame, ht_ssp_frame, hrxc_ssp_frame, hs_ssp_frame, hisn_ssp_frame, he_ssp_frame, 1'b0, 1'b0, 1'b0);
+mux8 mux_pwr_oe1               (major_mode, pwr_oe1,   ht_pwr_oe1,   hrxc_pwr_oe1,   hs_pwr_oe1,   hisn_pwr_oe1,   he_pwr_oe1, 1'b0, 1'b0, 1'b0);
+mux8 mux_pwr_oe2               (major_mode, pwr_oe2,   ht_pwr_oe2,   hrxc_pwr_oe2,   hs_pwr_oe2,   hisn_pwr_oe2,   he_pwr_oe2, 1'b0, 1'b0, 1'b0);
+mux8 mux_pwr_oe3               (major_mode, pwr_oe3,   ht_pwr_oe3,   hrxc_pwr_oe3,   hs_pwr_oe3,   hisn_pwr_oe3,   he_pwr_oe3, 1'b0, 1'b0, 1'b0);
+mux8 mux_pwr_oe4               (major_mode, pwr_oe4,   ht_pwr_oe4,   hrxc_pwr_oe4,   hs_pwr_oe4,   hisn_pwr_oe4,   he_pwr_oe4, 1'b0, 1'b0, 1'b0);
+mux8 mux_pwr_lo                        (major_mode, pwr_lo,    ht_pwr_lo,    hrxc_pwr_lo,    hs_pwr_lo,    hisn_pwr_lo,    he_pwr_lo, 1'b0, 1'b0, 1'b0);
+mux8 mux_pwr_hi                        (major_mode, pwr_hi,    ht_pwr_hi,    hrxc_pwr_hi,    hs_pwr_hi,    hisn_pwr_hi,    he_pwr_hi, 1'b0, 1'b0, 1'b0);
+mux8 mux_adc_clk               (major_mode, adc_clk,   ht_adc_clk,   hrxc_adc_clk,   hs_adc_clk,   hisn_adc_clk,   he_adc_clk, 1'b0, 1'b0, 1'b0);
+mux8 mux_dbg                   (major_mode, dbg,       ht_dbg,       hrxc_dbg,       hs_dbg,       hisn_dbg,       he_dbg, 1'b0, 1'b0, 1'b0);
 
 // In all modes, let the ADC's outputs be enabled.
 assign adc_noe = 1'b0;
index dece2db3195844ce9ce2d371d09a1ff7df0069bf..afaf7cb6fb17ae0a1f5687a9b48601ead3d65c23 100644 (file)
@@ -10,7 +10,7 @@ module hi_read_rx_xcorr(
     ssp_frame, ssp_din, ssp_dout, ssp_clk,
     cross_hi, cross_lo,
     dbg,
-    xcorr_is_848, snoop, xcorr_quarter_freq
+    xcorr_is_848, snoop
 );
     input pck0, ck_1356meg, ck_1356megb;
     output pwr_lo, pwr_hi, pwr_oe1, pwr_oe2, pwr_oe3, pwr_oe4;
@@ -20,58 +20,24 @@ module hi_read_rx_xcorr(
     output ssp_frame, ssp_din, ssp_clk;
     input cross_hi, cross_lo;
     output dbg;
-    input xcorr_is_848, snoop, xcorr_quarter_freq;
+    input xcorr_is_848, snoop;
 
 // Carrier is steady on through this, unless we're snooping.
 assign pwr_hi = ck_1356megb & (~snoop);
 assign pwr_oe1 = 1'b0;
-assign pwr_oe2 = 1'b0;
 assign pwr_oe3 = 1'b0;
 assign pwr_oe4 = 1'b0;
 
-reg ssp_clk;
-reg ssp_frame;
+wire adc_clk = ck_1356megb;
 
 reg fc_div_2;
-always @(posedge ck_1356meg)
-    fc_div_2 = ~fc_div_2;
-
-reg fc_div_4;
-always @(posedge fc_div_2)
-    fc_div_4 = ~fc_div_4;
-
-reg fc_div_8;
-always @(posedge fc_div_4)
-    fc_div_8 = ~fc_div_8;
-
-reg adc_clk;
-
-always @(xcorr_is_848 or xcorr_quarter_freq or ck_1356meg)
-    if(~xcorr_quarter_freq)
-    begin
-           if(xcorr_is_848)
-               // The subcarrier frequency is fc/16; we will sample at fc, so that 
-               // means the subcarrier is 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 1 1 ...
-               adc_clk <= ck_1356meg;
-           else
-               // The subcarrier frequency is fc/32; we will sample at fc/2, and
-               // the subcarrier will look identical.
-               adc_clk <= fc_div_2;
-    end
-    else
-    begin
-           if(xcorr_is_848)
-               // The subcarrier frequency is fc/64
-               adc_clk <= fc_div_4;
-           else
-               // The subcarrier frequency is fc/128
-               adc_clk <= fc_div_8;
-       end
+always @(negedge ck_1356megb)
+    fc_div_2 <= fc_div_2 + 1;
 
 // When we're a reader, we just need to do the BPSK demod; but when we're an
 // eavesdropper, we also need to pick out the commands sent by the reader,
 // using AM. Do this the same way that we do it for the simulated tag.
-reg after_hysteresis, after_hysteresis_prev;
+reg after_hysteresis, after_hysteresis_prev, after_hysteresis_prev_prev;
 reg [11:0] has_been_low_for;
 always @(negedge adc_clk)
 begin
@@ -97,12 +63,24 @@ end
 // Let us report a correlation every 4 subcarrier cycles, or 4*16 samples,
 // so we need a 6-bit counter.
 reg [5:0] corr_i_cnt;
-reg [5:0] corr_q_cnt;
 // And a couple of registers in which to accumulate the correlations.
-reg signed [15:0] corr_i_accum;
-reg signed [15:0] corr_q_accum;
+// we would add at most 32 times adc_d, the result can be held in 13 bits. 
+// Need one additional bit because it can be negative as well
+reg signed [13:0] corr_i_accum;
+reg signed [13:0] corr_q_accum;
 reg signed [7:0] corr_i_out;
 reg signed [7:0] corr_q_out;
+// clock and frame signal for communication to ARM
+reg ssp_clk;
+reg ssp_frame;
+
+
+always @(negedge adc_clk)
+begin
+       if (xcorr_is_848 | fc_div_2)
+               corr_i_cnt <= corr_i_cnt + 1;
+end            
+               
 
 // ADC data appears on the rising edge, so sample it on the falling edge
 always @(negedge adc_clk)
@@ -110,24 +88,24 @@ begin
     // These are the correlators: we correlate against in-phase and quadrature
     // versions of our reference signal, and keep the (signed) result to
     // send out later over the SSP.
-    if(corr_i_cnt == 7'd63)
+    if(corr_i_cnt == 6'd0)
     begin
         if(snoop)
         begin
-            corr_i_out <= {corr_i_accum[12:6], after_hysteresis_prev};
-            corr_q_out <= {corr_q_accum[12:6], after_hysteresis};
+                       // Send only 7 most significant bits of tag signal (signed), LSB is reader signal:
+            corr_i_out <= {corr_i_accum[13:7], after_hysteresis_prev_prev};
+            corr_q_out <= {corr_q_accum[13:7], after_hysteresis_prev};
+                       after_hysteresis_prev_prev <= after_hysteresis;
         end
         else
         begin
-            // Only correlations need to be delivered.
+            // 8 most significant bits of tag signal
             corr_i_out <= corr_i_accum[13:6];
             corr_q_out <= corr_q_accum[13:6];
         end
 
         corr_i_accum <= adc_d;
         corr_q_accum <= adc_d;
-        corr_q_cnt <= 4;
-        corr_i_cnt <= 0;
     end
     else
     begin
@@ -136,18 +114,16 @@ begin
         else
             corr_i_accum <= corr_i_accum + adc_d;
 
-        if(corr_q_cnt[3])
-            corr_q_accum <= corr_q_accum - adc_d;
-        else
+        if(corr_i_cnt[3] == corr_i_cnt[2])                     // phase shifted by pi/2
             corr_q_accum <= corr_q_accum + adc_d;
+        else
+            corr_q_accum <= corr_q_accum - adc_d;
 
-        corr_i_cnt <= corr_i_cnt + 1;
-        corr_q_cnt <= corr_q_cnt + 1;
     end
 
     // The logic in hi_simulate.v reports 4 samples per bit. We report two
     // (I, Q) pairs per bit, so we should do 2 samples per pair.
-    if(corr_i_cnt == 6'd31)
+    if(corr_i_cnt == 6'd32)
         after_hysteresis_prev <= after_hysteresis;
 
     // Then the result from last time is serialized and send out to the ARM.
@@ -168,7 +144,9 @@ begin
         end
     end
 
-    if(corr_i_cnt[5:2] == 4'b000 || corr_i_cnt[5:2] == 4'b1000)
+       // set ssp_frame signal for corr_i_cnt = 0..3 and corr_i_cnt = 32..35
+       // (send two frames with 8 Bits each)
+    if(corr_i_cnt[5:2] == 4'b0000 || corr_i_cnt[5:2] == 4'b1000)
         ssp_frame = 1'b1;
     else
         ssp_frame = 1'b0;
@@ -181,5 +159,6 @@ assign dbg = corr_i_cnt[3];
 
 // Unused.
 assign pwr_lo = 1'b0;
+assign pwr_oe2 = 1'b0;
 
 endmodule
diff --git a/fpga/hi_sniffer.v b/fpga/hi_sniffer.v
new file mode 100644 (file)
index 0000000..3a989ce
--- /dev/null
@@ -0,0 +1,57 @@
+module hi_sniffer(
+    pck0, ck_1356meg, ck_1356megb,
+    pwr_lo, pwr_hi, pwr_oe1, pwr_oe2, pwr_oe3, pwr_oe4,
+    adc_d, adc_clk,
+    ssp_frame, ssp_din, ssp_dout, ssp_clk,
+    cross_hi, cross_lo,
+    dbg,
+    xcorr_is_848, snoop, xcorr_quarter_freq // not used.
+);
+    input pck0, ck_1356meg, ck_1356megb;
+    output pwr_lo, pwr_hi, pwr_oe1, pwr_oe2, pwr_oe3, pwr_oe4;
+    input [7:0] adc_d;
+    output adc_clk;
+    input ssp_dout;
+    output ssp_frame, ssp_din, ssp_clk;
+    input cross_hi, cross_lo;
+    output dbg;
+    input xcorr_is_848, snoop, xcorr_quarter_freq; // not used.
+
+// We are only snooping, all off.
+assign pwr_hi  = 1'b0;
+assign pwr_lo  = 1'b0;
+assign pwr_oe1 = 1'b0;
+assign pwr_oe2 = 1'b0;
+assign pwr_oe3 = 1'b0;
+assign pwr_oe4 = 1'b0;
+
+reg ssp_frame;
+reg [7:0] adc_d_out = 8'd0;
+reg [2:0] ssp_cnt = 3'd0;
+
+assign adc_clk = ck_1356meg;
+assign ssp_clk = ~ck_1356meg;
+
+always @(posedge ssp_clk)
+begin
+    if(ssp_cnt[2:0] == 3'd7)
+        ssp_cnt[2:0] <= 3'd0;
+    else
+        ssp_cnt <= ssp_cnt + 1;
+
+    if(ssp_cnt[2:0] == 3'b000) // set frame length
+        begin
+            adc_d_out[7:0] <= adc_d;
+            ssp_frame <= 1'b1;
+        end
+    else
+        begin
+            adc_d_out[7:0] <= {1'b0, adc_d_out[7:1]};
+            ssp_frame <= 1'b0;
+        end
+
+end
+
+assign ssp_din = adc_d_out[0];
+
+endmodule
index e2b7a7c5548e2fd37dde3864173cfe08ea95a8b7..ad86886dbc0b69afc29ce453b08ec94be5cd23fb 100644 (file)
@@ -26,14 +26,15 @@ typedef struct {
 } __attribute__((__packed__)) iso14a_card_select_t;
 
 typedef enum ISO14A_COMMAND {
-       ISO14A_CONNECT = 1,
-       ISO14A_NO_DISCONNECT = 2,
-       ISO14A_APDU = 4,
-       ISO14A_RAW = 8,
-       ISO14A_REQUEST_TRIGGER = 0x10,
-       ISO14A_APPEND_CRC = 0x20,
-       ISO14A_SET_TIMEOUT = 0x40,
-       ISO14A_NO_SELECT = 0x80
+       ISO14A_CONNECT =                        (1 << 0),
+       ISO14A_NO_DISCONNECT =          (1 << 1),
+       ISO14A_APDU =                           (1 << 2),
+       ISO14A_RAW =                            (1 << 3),
+       ISO14A_REQUEST_TRIGGER =        (1 << 4),
+       ISO14A_APPEND_CRC =                     (1 << 5),
+       ISO14A_SET_TIMEOUT =            (1 << 6),
+       ISO14A_NO_SELECT =                      (1 << 7),
+       ISO14A_TOPAZMODE =                      (1 << 8)
 } iso14a_command_t;
 
 #endif // _MIFARE_H_
index b3530c64f2ae22b920458e05e4f483340b1baac4..4a59636e7f6cc156e438a332208116ccd3eb9439 100644 (file)
 #define SPI_FPGA_MODE  0
 #define SPI_LCD_MODE   1
 
-#define FPGA_BITSTREAM_ERR 0
-#define FPGA_BITSTREAM_LF 1
-#define FPGA_BITSTREAM_HF 2
-
 #define TRUE 1
 #define FALSE 0
 
index 357395d43f3103eb01a66144648dbd2e97d001e9..38f8617a84c14c2c23e152c8b45b1742aa025738 100644 (file)
@@ -60,6 +60,8 @@ typedef struct{
 #define CMD_BUFF_CLEAR                                                    0x0105
 #define CMD_READ_MEM                                                      0x0106
 #define CMD_VERSION                                                       0x0107
+#define CMD_STATUS                                                                                                               0x0108
+#define CMD_PING                                                                                                                 0x0109
 
 // For low-frequency tags
 #define CMD_READ_TI_TYPE                                                  0x0202
@@ -83,8 +85,9 @@ typedef struct{
 #define CMD_INDALA_CLONE_TAG_L                                            0x0213
 #define CMD_T55XX_READ_BLOCK                                              0x0214
 #define CMD_T55XX_WRITE_BLOCK                                             0x0215
-#define CMD_T55XX_READ_TRACE                                              0x0216
+#define CMD_T55XX_RESET_READ                                              0x0216
 #define CMD_PCF7931_READ                                                  0x0217
+#define CMD_PCF7931_WRITE                                                 0x0222
 #define CMD_EM4X_READ_WORD                                                0x0218
 #define CMD_EM4X_WRITE_WORD                                               0x0219
 #define CMD_IO_DEMOD_FSK                                                  0x021A
@@ -95,12 +98,15 @@ typedef struct{
 #define CMD_FSK_SIM_TAG                                                   0x021E
 #define CMD_ASK_SIM_TAG                                                   0x021F
 #define CMD_PSK_SIM_TAG                                                   0x0220
+#define CMD_AWID_DEMOD_FSK                                                0x0221
+#define CMD_VIKING_CLONE_TAG                                              0x0223
+#define CMD_T55XX_WAKEUP                                                  0x0224
+
 
 /* CMD_SET_ADC_MUX: ext1 is 0 for lopkd, 1 for loraw, 2 for hipkd, 3 for hiraw */
 
 // For the 13.56 MHz tags
 #define CMD_ACQUIRE_RAW_ADC_SAMPLES_ISO_15693                             0x0300
-#define CMD_ACQUIRE_RAW_ADC_SAMPLES_ISO_14443                             0x0301
 #define CMD_READ_SRI512_TAG                                               0x0303
 #define CMD_READ_SRIX4K_TAG                                               0x0304
 #define CMD_ISO_14443B_COMMAND                                            0x0305
@@ -118,9 +124,8 @@ typedef struct{
 #define CMD_SIMULATE_HITAG                                                0x0371
 #define CMD_READER_HITAG                                                  0x0372
 
-#define CMD_SIMULATE_TAG_HF_LISTEN                                        0x0380
-#define CMD_SIMULATE_TAG_ISO_14443                                        0x0381
-#define CMD_SNOOP_ISO_14443                                               0x0382
+#define CMD_SIMULATE_TAG_ISO_14443B                                       0x0381
+#define CMD_SNOOP_ISO_14443B                                              0x0382
 #define CMD_SNOOP_ISO_14443a                                              0x0383
 #define CMD_SIMULATE_TAG_ISO_14443a                                       0x0384
 #define CMD_READER_ISO_14443a                                             0x0385
@@ -128,13 +133,19 @@ typedef struct{
 #define CMD_READER_LEGIC_RF                                               0x0388
 #define CMD_WRITER_LEGIC_RF                                               0x0389
 #define CMD_EPA_PACE_COLLECT_NONCE                                        0x038A
+#define CMD_EPA_PACE_REPLAY                                               0x038B
 
+#define CMD_ICLASS_READCHECK                                              0x038F
+#define CMD_ICLASS_CLONE                                                  0x0390
+#define CMD_ICLASS_DUMP                                                   0x0391
 #define CMD_SNOOP_ICLASS                                                  0x0392
 #define CMD_SIMULATE_TAG_ICLASS                                           0x0393
 #define CMD_READER_ICLASS                                                 0x0394
 #define CMD_READER_ICLASS_REPLAY                                          0x0395
-#define CMD_ICLASS_ISO14443A_WRITE                                        0x0397
+#define CMD_ICLASS_READBLOCK                                              0x0396
+#define CMD_ICLASS_WRITEBLOCK                                             0x0397
 #define CMD_ICLASS_EML_MEMSET                                             0x0398
+#define CMD_ICLASS_AUTHENTICATION                                         0x0399
 
 // For measurements of the antenna tuning
 #define CMD_MEASURE_ANTENNA_TUNING                                        0x0400
@@ -188,6 +199,8 @@ typedef struct{
 #define CMD_MIFARE_DESFIRE_INFO                                           0x072d
 #define CMD_MIFARE_DESFIRE                                                0x072e
 
+#define CMD_HF_SNIFFER                                                    0x0800
+
 #define CMD_UNKNOWN                                                       0xFFFF
 
 
@@ -205,6 +218,7 @@ typedef struct{
 #define FLAG_ICLASS_READER_CONF         0x08
 #define FLAG_ICLASS_READER_AA           0x10
 #define FLAG_ICLASS_READER_ONE_TRY      0x20
+#define FLAG_ICLASS_READER_CEDITKEY     0x40
 
 
 
diff --git a/pcb/lf-antenna/CAD/lf-antenna.brd b/pcb/lf-antenna/CAD/lf-antenna.brd
new file mode 100644 (file)
index 0000000..af0954c
Binary files /dev/null and b/pcb/lf-antenna/CAD/lf-antenna.brd differ
diff --git a/pcb/lf-antenna/CAM/lf-antenna.GBL b/pcb/lf-antenna/CAM/lf-antenna.GBL
new file mode 100644 (file)
index 0000000..0ba8b5b
--- /dev/null
@@ -0,0 +1,8309 @@
+G75*
+G70*
+%OFA0B0*%
+%FSLAX24Y24*%
+%IPPOS*%
+%LPD*%
+%AMOC8*
+5,1,8,0,0,1.08239X$1,22.5*
+%
+%ADD10C,0.0010*%
+%ADD11C,0.0140*%
+%ADD12C,0.0000*%
+%ADD13C,0.0700*%
+%ADD14C,0.0150*%
+%ADD15C,0.0591*%
+D10*
+X040496Y015646D02*
+X040231Y014683D01*
+X039920Y013735D01*
+X039562Y012803D01*
+X039160Y011890D01*
+X038714Y010997D01*
+X038225Y010127D01*
+X037694Y009282D01*
+X037122Y008463D01*
+X036512Y007674D01*
+X035864Y006915D01*
+X035179Y006188D01*
+X034460Y005496D01*
+X033708Y004839D01*
+X032925Y004220D01*
+X032113Y003640D01*
+X031274Y003100D01*
+X030409Y002601D01*
+X029521Y002146D01*
+X028612Y001733D01*
+X027684Y001366D01*
+X026739Y001044D01*
+X025780Y000769D01*
+X024808Y000541D01*
+X023827Y000360D01*
+X022838Y000227D01*
+X021843Y000142D01*
+X020846Y000106D01*
+X019847Y000119D01*
+X018851Y000180D01*
+X017859Y000290D01*
+X016874Y000447D01*
+X015897Y000653D01*
+X014931Y000906D01*
+X013979Y001205D01*
+X013043Y001551D01*
+X012124Y001941D01*
+X011226Y002376D01*
+X010350Y002854D01*
+X009498Y003375D01*
+X008672Y003936D01*
+X007875Y004536D01*
+X007108Y005175D01*
+X006373Y005850D01*
+X005672Y006560D01*
+X005006Y007304D01*
+X004377Y008079D01*
+X003787Y008884D01*
+X003236Y009716D01*
+X002727Y010574D01*
+X002260Y011457D01*
+X001836Y012360D01*
+X001457Y013284D01*
+X001123Y014224D01*
+X000836Y015180D01*
+X000595Y016149D01*
+X000402Y017128D01*
+X000257Y018116D01*
+X000160Y019109D01*
+X000111Y020106D01*
+X000111Y021104D01*
+X000160Y022101D01*
+X000257Y023094D01*
+X000402Y024082D01*
+X000595Y025061D01*
+X000836Y026030D01*
+X001123Y026986D01*
+X001457Y027926D01*
+X001836Y028850D01*
+X002260Y029753D01*
+X002727Y030636D01*
+X003236Y031494D01*
+X003787Y032326D01*
+X004377Y033131D01*
+X005006Y033906D01*
+X005672Y034650D01*
+X006373Y035360D01*
+X007108Y036035D01*
+X007875Y036674D01*
+X008672Y037274D01*
+X009498Y037835D01*
+X010350Y038356D01*
+X011226Y038834D01*
+X012124Y039269D01*
+X013043Y039659D01*
+X013979Y040005D01*
+X014931Y040304D01*
+X015897Y040557D01*
+X016874Y040763D01*
+X017859Y040920D01*
+X018851Y041030D01*
+X019847Y041091D01*
+X020846Y041104D01*
+X021843Y041068D01*
+X022838Y040983D01*
+X023827Y040850D01*
+X024808Y040669D01*
+X025780Y040441D01*
+X026739Y040166D01*
+X027684Y039844D01*
+X028612Y039477D01*
+X029521Y039064D01*
+X030409Y038609D01*
+X031274Y038110D01*
+X032113Y037570D01*
+X032925Y036990D01*
+X033708Y036371D01*
+X034460Y035714D01*
+X035179Y035022D01*
+X035864Y034295D01*
+X036512Y033536D01*
+X037122Y032747D01*
+X037694Y031928D01*
+X038225Y031083D01*
+X038714Y030213D01*
+X039160Y029320D01*
+X039562Y028407D01*
+X039920Y027475D01*
+X040231Y026527D01*
+X040496Y025564D01*
+X040510Y025515D01*
+X040527Y025467D01*
+X040548Y025421D01*
+X040572Y025376D01*
+X040599Y025333D01*
+X040629Y025291D01*
+X040662Y025252D01*
+X040697Y025216D01*
+X040735Y025182D01*
+X040775Y025150D01*
+X040817Y025122D01*
+X040862Y025096D01*
+X040907Y025074D01*
+X040955Y025055D01*
+X044355Y022105D02*
+X044355Y019105D01*
+X040955Y016105D02*
+X040908Y016091D01*
+X040862Y016074D01*
+X040818Y016054D01*
+X040776Y016030D01*
+X040736Y016002D01*
+X040697Y015972D01*
+X040662Y015939D01*
+X040629Y015903D01*
+X040598Y015865D01*
+X040571Y015825D01*
+X040547Y015782D01*
+X040527Y015738D01*
+X040509Y015692D01*
+X040496Y015646D01*
+X044355Y022105D02*
+X044204Y022372D01*
+X044040Y022632D01*
+X043864Y022883D01*
+X043676Y023125D01*
+X043476Y023358D01*
+X043265Y023581D01*
+X043043Y023793D01*
+X042811Y023994D01*
+X042570Y024183D01*
+X042319Y024361D01*
+X042061Y024526D01*
+X041794Y024678D01*
+X041521Y024818D01*
+X041241Y024943D01*
+X040955Y025055D01*
+X044355Y019105D02*
+X044265Y018887D01*
+X044164Y018674D01*
+X044053Y018467D01*
+X043932Y018264D01*
+X043802Y018068D01*
+X043663Y017878D01*
+X043515Y017695D01*
+X043358Y017519D01*
+X043193Y017351D01*
+X043020Y017191D01*
+X042840Y017039D01*
+X042652Y016896D01*
+X042459Y016763D01*
+X042258Y016638D01*
+X042053Y016524D01*
+X041842Y016419D01*
+X041626Y016325D01*
+X041406Y016241D01*
+X041182Y016167D01*
+X040955Y016105D01*
+D11*
+X041125Y016825D02*
+X041312Y017012D01*
+X041125Y017199D01*
+X041685Y017199D01*
+X041685Y016825D02*
+X041125Y016825D01*
+X041218Y017470D02*
+X041405Y017470D01*
+X041499Y017563D01*
+X041499Y017750D01*
+X041405Y017843D01*
+X041312Y017843D01*
+X041312Y017470D01*
+X041218Y017470D02*
+X041125Y017563D01*
+X041125Y017750D01*
+X041125Y018114D02*
+X041125Y018394D01*
+X041218Y018488D01*
+X041312Y018394D01*
+X041312Y018208D01*
+X041405Y018114D01*
+X041499Y018208D01*
+X041499Y018488D01*
+X041499Y018759D02*
+X041499Y018945D01*
+X041592Y018852D02*
+X041218Y018852D01*
+X041125Y018945D01*
+X041125Y019188D02*
+X041685Y019188D01*
+X041499Y019282D02*
+X041499Y019469D01*
+X041405Y019562D01*
+X041125Y019562D01*
+X041218Y019833D02*
+X041125Y019926D01*
+X041125Y020207D01*
+X041499Y020207D01*
+X041405Y020477D02*
+X041499Y020571D01*
+X041499Y020758D01*
+X041405Y020851D01*
+X041312Y020851D01*
+X041312Y020477D01*
+X041405Y020477D02*
+X041218Y020477D01*
+X041125Y020571D01*
+X041125Y020758D01*
+X041125Y021122D02*
+X041125Y021402D01*
+X041218Y021496D01*
+X041312Y021402D01*
+X041312Y021215D01*
+X041405Y021122D01*
+X041499Y021215D01*
+X041499Y021496D01*
+X041499Y019833D02*
+X041218Y019833D01*
+X041499Y019282D02*
+X041405Y019188D01*
+X042075Y019370D02*
+X042075Y019463D01*
+X042168Y019463D01*
+X042168Y019370D01*
+X042075Y019370D01*
+X042168Y019005D02*
+X042635Y019005D01*
+X042635Y018912D02*
+X042635Y019099D01*
+X042168Y019005D02*
+X042075Y018912D01*
+X042075Y018818D01*
+X042168Y018725D01*
+X041335Y023225D02*
+X040775Y023225D01*
+X040775Y023599D01*
+X040775Y023870D02*
+X041335Y023870D01*
+X041335Y024243D01*
+X041055Y024056D02*
+X041055Y023870D01*
+D12*
+X017834Y018484D02*
+X017836Y018534D01*
+X017842Y018584D01*
+X017852Y018634D01*
+X017865Y018682D01*
+X017882Y018730D01*
+X017903Y018776D01*
+X017927Y018820D01*
+X017955Y018862D01*
+X017986Y018902D01*
+X018020Y018939D01*
+X018057Y018974D01*
+X018096Y019005D01*
+X018137Y019034D01*
+X018181Y019059D01*
+X018227Y019081D01*
+X018274Y019099D01*
+X018322Y019113D01*
+X018371Y019124D01*
+X018421Y019131D01*
+X018471Y019134D01*
+X018522Y019133D01*
+X018572Y019128D01*
+X018622Y019119D01*
+X018670Y019107D01*
+X018718Y019090D01*
+X018764Y019070D01*
+X018809Y019047D01*
+X018852Y019020D01*
+X018892Y018990D01*
+X018930Y018957D01*
+X018965Y018921D01*
+X018998Y018882D01*
+X019027Y018841D01*
+X019053Y018798D01*
+X019076Y018753D01*
+X019095Y018706D01*
+X019110Y018658D01*
+X019122Y018609D01*
+X019130Y018559D01*
+X019134Y018509D01*
+X019134Y018459D01*
+X019130Y018409D01*
+X019122Y018359D01*
+X019110Y018310D01*
+X019095Y018262D01*
+X019076Y018215D01*
+X019053Y018170D01*
+X019027Y018127D01*
+X018998Y018086D01*
+X018965Y018047D01*
+X018930Y018011D01*
+X018892Y017978D01*
+X018852Y017948D01*
+X018809Y017921D01*
+X018764Y017898D01*
+X018718Y017878D01*
+X018670Y017861D01*
+X018622Y017849D01*
+X018572Y017840D01*
+X018522Y017835D01*
+X018471Y017834D01*
+X018421Y017837D01*
+X018371Y017844D01*
+X018322Y017855D01*
+X018274Y017869D01*
+X018227Y017887D01*
+X018181Y017909D01*
+X018137Y017934D01*
+X018096Y017963D01*
+X018057Y017994D01*
+X018020Y018029D01*
+X017986Y018066D01*
+X017955Y018106D01*
+X017927Y018148D01*
+X017903Y018192D01*
+X017882Y018238D01*
+X017865Y018286D01*
+X017852Y018334D01*
+X017842Y018384D01*
+X017836Y018434D01*
+X017834Y018484D01*
+X016955Y020605D02*
+X016957Y020655D01*
+X016963Y020705D01*
+X016973Y020755D01*
+X016986Y020803D01*
+X017003Y020851D01*
+X017024Y020897D01*
+X017048Y020941D01*
+X017076Y020983D01*
+X017107Y021023D01*
+X017141Y021060D01*
+X017178Y021095D01*
+X017217Y021126D01*
+X017258Y021155D01*
+X017302Y021180D01*
+X017348Y021202D01*
+X017395Y021220D01*
+X017443Y021234D01*
+X017492Y021245D01*
+X017542Y021252D01*
+X017592Y021255D01*
+X017643Y021254D01*
+X017693Y021249D01*
+X017743Y021240D01*
+X017791Y021228D01*
+X017839Y021211D01*
+X017885Y021191D01*
+X017930Y021168D01*
+X017973Y021141D01*
+X018013Y021111D01*
+X018051Y021078D01*
+X018086Y021042D01*
+X018119Y021003D01*
+X018148Y020962D01*
+X018174Y020919D01*
+X018197Y020874D01*
+X018216Y020827D01*
+X018231Y020779D01*
+X018243Y020730D01*
+X018251Y020680D01*
+X018255Y020630D01*
+X018255Y020580D01*
+X018251Y020530D01*
+X018243Y020480D01*
+X018231Y020431D01*
+X018216Y020383D01*
+X018197Y020336D01*
+X018174Y020291D01*
+X018148Y020248D01*
+X018119Y020207D01*
+X018086Y020168D01*
+X018051Y020132D01*
+X018013Y020099D01*
+X017973Y020069D01*
+X017930Y020042D01*
+X017885Y020019D01*
+X017839Y019999D01*
+X017791Y019982D01*
+X017743Y019970D01*
+X017693Y019961D01*
+X017643Y019956D01*
+X017592Y019955D01*
+X017542Y019958D01*
+X017492Y019965D01*
+X017443Y019976D01*
+X017395Y019990D01*
+X017348Y020008D01*
+X017302Y020030D01*
+X017258Y020055D01*
+X017217Y020084D01*
+X017178Y020115D01*
+X017141Y020150D01*
+X017107Y020187D01*
+X017076Y020227D01*
+X017048Y020269D01*
+X017024Y020313D01*
+X017003Y020359D01*
+X016986Y020407D01*
+X016973Y020455D01*
+X016963Y020505D01*
+X016957Y020555D01*
+X016955Y020605D01*
+X017834Y022726D02*
+X017836Y022776D01*
+X017842Y022826D01*
+X017852Y022876D01*
+X017865Y022924D01*
+X017882Y022972D01*
+X017903Y023018D01*
+X017927Y023062D01*
+X017955Y023104D01*
+X017986Y023144D01*
+X018020Y023181D01*
+X018057Y023216D01*
+X018096Y023247D01*
+X018137Y023276D01*
+X018181Y023301D01*
+X018227Y023323D01*
+X018274Y023341D01*
+X018322Y023355D01*
+X018371Y023366D01*
+X018421Y023373D01*
+X018471Y023376D01*
+X018522Y023375D01*
+X018572Y023370D01*
+X018622Y023361D01*
+X018670Y023349D01*
+X018718Y023332D01*
+X018764Y023312D01*
+X018809Y023289D01*
+X018852Y023262D01*
+X018892Y023232D01*
+X018930Y023199D01*
+X018965Y023163D01*
+X018998Y023124D01*
+X019027Y023083D01*
+X019053Y023040D01*
+X019076Y022995D01*
+X019095Y022948D01*
+X019110Y022900D01*
+X019122Y022851D01*
+X019130Y022801D01*
+X019134Y022751D01*
+X019134Y022701D01*
+X019130Y022651D01*
+X019122Y022601D01*
+X019110Y022552D01*
+X019095Y022504D01*
+X019076Y022457D01*
+X019053Y022412D01*
+X019027Y022369D01*
+X018998Y022328D01*
+X018965Y022289D01*
+X018930Y022253D01*
+X018892Y022220D01*
+X018852Y022190D01*
+X018809Y022163D01*
+X018764Y022140D01*
+X018718Y022120D01*
+X018670Y022103D01*
+X018622Y022091D01*
+X018572Y022082D01*
+X018522Y022077D01*
+X018471Y022076D01*
+X018421Y022079D01*
+X018371Y022086D01*
+X018322Y022097D01*
+X018274Y022111D01*
+X018227Y022129D01*
+X018181Y022151D01*
+X018137Y022176D01*
+X018096Y022205D01*
+X018057Y022236D01*
+X018020Y022271D01*
+X017986Y022308D01*
+X017955Y022348D01*
+X017927Y022390D01*
+X017903Y022434D01*
+X017882Y022480D01*
+X017865Y022528D01*
+X017852Y022576D01*
+X017842Y022626D01*
+X017836Y022676D01*
+X017834Y022726D01*
+X019955Y023605D02*
+X019957Y023655D01*
+X019963Y023705D01*
+X019973Y023755D01*
+X019986Y023803D01*
+X020003Y023851D01*
+X020024Y023897D01*
+X020048Y023941D01*
+X020076Y023983D01*
+X020107Y024023D01*
+X020141Y024060D01*
+X020178Y024095D01*
+X020217Y024126D01*
+X020258Y024155D01*
+X020302Y024180D01*
+X020348Y024202D01*
+X020395Y024220D01*
+X020443Y024234D01*
+X020492Y024245D01*
+X020542Y024252D01*
+X020592Y024255D01*
+X020643Y024254D01*
+X020693Y024249D01*
+X020743Y024240D01*
+X020791Y024228D01*
+X020839Y024211D01*
+X020885Y024191D01*
+X020930Y024168D01*
+X020973Y024141D01*
+X021013Y024111D01*
+X021051Y024078D01*
+X021086Y024042D01*
+X021119Y024003D01*
+X021148Y023962D01*
+X021174Y023919D01*
+X021197Y023874D01*
+X021216Y023827D01*
+X021231Y023779D01*
+X021243Y023730D01*
+X021251Y023680D01*
+X021255Y023630D01*
+X021255Y023580D01*
+X021251Y023530D01*
+X021243Y023480D01*
+X021231Y023431D01*
+X021216Y023383D01*
+X021197Y023336D01*
+X021174Y023291D01*
+X021148Y023248D01*
+X021119Y023207D01*
+X021086Y023168D01*
+X021051Y023132D01*
+X021013Y023099D01*
+X020973Y023069D01*
+X020930Y023042D01*
+X020885Y023019D01*
+X020839Y022999D01*
+X020791Y022982D01*
+X020743Y022970D01*
+X020693Y022961D01*
+X020643Y022956D01*
+X020592Y022955D01*
+X020542Y022958D01*
+X020492Y022965D01*
+X020443Y022976D01*
+X020395Y022990D01*
+X020348Y023008D01*
+X020302Y023030D01*
+X020258Y023055D01*
+X020217Y023084D01*
+X020178Y023115D01*
+X020141Y023150D01*
+X020107Y023187D01*
+X020076Y023227D01*
+X020048Y023269D01*
+X020024Y023313D01*
+X020003Y023359D01*
+X019986Y023407D01*
+X019973Y023455D01*
+X019963Y023505D01*
+X019957Y023555D01*
+X019955Y023605D01*
+X022076Y022726D02*
+X022078Y022776D01*
+X022084Y022826D01*
+X022094Y022876D01*
+X022107Y022924D01*
+X022124Y022972D01*
+X022145Y023018D01*
+X022169Y023062D01*
+X022197Y023104D01*
+X022228Y023144D01*
+X022262Y023181D01*
+X022299Y023216D01*
+X022338Y023247D01*
+X022379Y023276D01*
+X022423Y023301D01*
+X022469Y023323D01*
+X022516Y023341D01*
+X022564Y023355D01*
+X022613Y023366D01*
+X022663Y023373D01*
+X022713Y023376D01*
+X022764Y023375D01*
+X022814Y023370D01*
+X022864Y023361D01*
+X022912Y023349D01*
+X022960Y023332D01*
+X023006Y023312D01*
+X023051Y023289D01*
+X023094Y023262D01*
+X023134Y023232D01*
+X023172Y023199D01*
+X023207Y023163D01*
+X023240Y023124D01*
+X023269Y023083D01*
+X023295Y023040D01*
+X023318Y022995D01*
+X023337Y022948D01*
+X023352Y022900D01*
+X023364Y022851D01*
+X023372Y022801D01*
+X023376Y022751D01*
+X023376Y022701D01*
+X023372Y022651D01*
+X023364Y022601D01*
+X023352Y022552D01*
+X023337Y022504D01*
+X023318Y022457D01*
+X023295Y022412D01*
+X023269Y022369D01*
+X023240Y022328D01*
+X023207Y022289D01*
+X023172Y022253D01*
+X023134Y022220D01*
+X023094Y022190D01*
+X023051Y022163D01*
+X023006Y022140D01*
+X022960Y022120D01*
+X022912Y022103D01*
+X022864Y022091D01*
+X022814Y022082D01*
+X022764Y022077D01*
+X022713Y022076D01*
+X022663Y022079D01*
+X022613Y022086D01*
+X022564Y022097D01*
+X022516Y022111D01*
+X022469Y022129D01*
+X022423Y022151D01*
+X022379Y022176D01*
+X022338Y022205D01*
+X022299Y022236D01*
+X022262Y022271D01*
+X022228Y022308D01*
+X022197Y022348D01*
+X022169Y022390D01*
+X022145Y022434D01*
+X022124Y022480D01*
+X022107Y022528D01*
+X022094Y022576D01*
+X022084Y022626D01*
+X022078Y022676D01*
+X022076Y022726D01*
+X019955Y020605D02*
+X019957Y020655D01*
+X019963Y020705D01*
+X019973Y020755D01*
+X019986Y020803D01*
+X020003Y020851D01*
+X020024Y020897D01*
+X020048Y020941D01*
+X020076Y020983D01*
+X020107Y021023D01*
+X020141Y021060D01*
+X020178Y021095D01*
+X020217Y021126D01*
+X020258Y021155D01*
+X020302Y021180D01*
+X020348Y021202D01*
+X020395Y021220D01*
+X020443Y021234D01*
+X020492Y021245D01*
+X020542Y021252D01*
+X020592Y021255D01*
+X020643Y021254D01*
+X020693Y021249D01*
+X020743Y021240D01*
+X020791Y021228D01*
+X020839Y021211D01*
+X020885Y021191D01*
+X020930Y021168D01*
+X020973Y021141D01*
+X021013Y021111D01*
+X021051Y021078D01*
+X021086Y021042D01*
+X021119Y021003D01*
+X021148Y020962D01*
+X021174Y020919D01*
+X021197Y020874D01*
+X021216Y020827D01*
+X021231Y020779D01*
+X021243Y020730D01*
+X021251Y020680D01*
+X021255Y020630D01*
+X021255Y020580D01*
+X021251Y020530D01*
+X021243Y020480D01*
+X021231Y020431D01*
+X021216Y020383D01*
+X021197Y020336D01*
+X021174Y020291D01*
+X021148Y020248D01*
+X021119Y020207D01*
+X021086Y020168D01*
+X021051Y020132D01*
+X021013Y020099D01*
+X020973Y020069D01*
+X020930Y020042D01*
+X020885Y020019D01*
+X020839Y019999D01*
+X020791Y019982D01*
+X020743Y019970D01*
+X020693Y019961D01*
+X020643Y019956D01*
+X020592Y019955D01*
+X020542Y019958D01*
+X020492Y019965D01*
+X020443Y019976D01*
+X020395Y019990D01*
+X020348Y020008D01*
+X020302Y020030D01*
+X020258Y020055D01*
+X020217Y020084D01*
+X020178Y020115D01*
+X020141Y020150D01*
+X020107Y020187D01*
+X020076Y020227D01*
+X020048Y020269D01*
+X020024Y020313D01*
+X020003Y020359D01*
+X019986Y020407D01*
+X019973Y020455D01*
+X019963Y020505D01*
+X019957Y020555D01*
+X019955Y020605D01*
+X022076Y018484D02*
+X022078Y018534D01*
+X022084Y018584D01*
+X022094Y018634D01*
+X022107Y018682D01*
+X022124Y018730D01*
+X022145Y018776D01*
+X022169Y018820D01*
+X022197Y018862D01*
+X022228Y018902D01*
+X022262Y018939D01*
+X022299Y018974D01*
+X022338Y019005D01*
+X022379Y019034D01*
+X022423Y019059D01*
+X022469Y019081D01*
+X022516Y019099D01*
+X022564Y019113D01*
+X022613Y019124D01*
+X022663Y019131D01*
+X022713Y019134D01*
+X022764Y019133D01*
+X022814Y019128D01*
+X022864Y019119D01*
+X022912Y019107D01*
+X022960Y019090D01*
+X023006Y019070D01*
+X023051Y019047D01*
+X023094Y019020D01*
+X023134Y018990D01*
+X023172Y018957D01*
+X023207Y018921D01*
+X023240Y018882D01*
+X023269Y018841D01*
+X023295Y018798D01*
+X023318Y018753D01*
+X023337Y018706D01*
+X023352Y018658D01*
+X023364Y018609D01*
+X023372Y018559D01*
+X023376Y018509D01*
+X023376Y018459D01*
+X023372Y018409D01*
+X023364Y018359D01*
+X023352Y018310D01*
+X023337Y018262D01*
+X023318Y018215D01*
+X023295Y018170D01*
+X023269Y018127D01*
+X023240Y018086D01*
+X023207Y018047D01*
+X023172Y018011D01*
+X023134Y017978D01*
+X023094Y017948D01*
+X023051Y017921D01*
+X023006Y017898D01*
+X022960Y017878D01*
+X022912Y017861D01*
+X022864Y017849D01*
+X022814Y017840D01*
+X022764Y017835D01*
+X022713Y017834D01*
+X022663Y017837D01*
+X022613Y017844D01*
+X022564Y017855D01*
+X022516Y017869D01*
+X022469Y017887D01*
+X022423Y017909D01*
+X022379Y017934D01*
+X022338Y017963D01*
+X022299Y017994D01*
+X022262Y018029D01*
+X022228Y018066D01*
+X022197Y018106D01*
+X022169Y018148D01*
+X022145Y018192D01*
+X022124Y018238D01*
+X022107Y018286D01*
+X022094Y018334D01*
+X022084Y018384D01*
+X022078Y018434D01*
+X022076Y018484D01*
+X019955Y017605D02*
+X019957Y017655D01*
+X019963Y017705D01*
+X019973Y017755D01*
+X019986Y017803D01*
+X020003Y017851D01*
+X020024Y017897D01*
+X020048Y017941D01*
+X020076Y017983D01*
+X020107Y018023D01*
+X020141Y018060D01*
+X020178Y018095D01*
+X020217Y018126D01*
+X020258Y018155D01*
+X020302Y018180D01*
+X020348Y018202D01*
+X020395Y018220D01*
+X020443Y018234D01*
+X020492Y018245D01*
+X020542Y018252D01*
+X020592Y018255D01*
+X020643Y018254D01*
+X020693Y018249D01*
+X020743Y018240D01*
+X020791Y018228D01*
+X020839Y018211D01*
+X020885Y018191D01*
+X020930Y018168D01*
+X020973Y018141D01*
+X021013Y018111D01*
+X021051Y018078D01*
+X021086Y018042D01*
+X021119Y018003D01*
+X021148Y017962D01*
+X021174Y017919D01*
+X021197Y017874D01*
+X021216Y017827D01*
+X021231Y017779D01*
+X021243Y017730D01*
+X021251Y017680D01*
+X021255Y017630D01*
+X021255Y017580D01*
+X021251Y017530D01*
+X021243Y017480D01*
+X021231Y017431D01*
+X021216Y017383D01*
+X021197Y017336D01*
+X021174Y017291D01*
+X021148Y017248D01*
+X021119Y017207D01*
+X021086Y017168D01*
+X021051Y017132D01*
+X021013Y017099D01*
+X020973Y017069D01*
+X020930Y017042D01*
+X020885Y017019D01*
+X020839Y016999D01*
+X020791Y016982D01*
+X020743Y016970D01*
+X020693Y016961D01*
+X020643Y016956D01*
+X020592Y016955D01*
+X020542Y016958D01*
+X020492Y016965D01*
+X020443Y016976D01*
+X020395Y016990D01*
+X020348Y017008D01*
+X020302Y017030D01*
+X020258Y017055D01*
+X020217Y017084D01*
+X020178Y017115D01*
+X020141Y017150D01*
+X020107Y017187D01*
+X020076Y017227D01*
+X020048Y017269D01*
+X020024Y017313D01*
+X020003Y017359D01*
+X019986Y017407D01*
+X019973Y017455D01*
+X019963Y017505D01*
+X019957Y017555D01*
+X019955Y017605D01*
+X022955Y020605D02*
+X022957Y020655D01*
+X022963Y020705D01*
+X022973Y020755D01*
+X022986Y020803D01*
+X023003Y020851D01*
+X023024Y020897D01*
+X023048Y020941D01*
+X023076Y020983D01*
+X023107Y021023D01*
+X023141Y021060D01*
+X023178Y021095D01*
+X023217Y021126D01*
+X023258Y021155D01*
+X023302Y021180D01*
+X023348Y021202D01*
+X023395Y021220D01*
+X023443Y021234D01*
+X023492Y021245D01*
+X023542Y021252D01*
+X023592Y021255D01*
+X023643Y021254D01*
+X023693Y021249D01*
+X023743Y021240D01*
+X023791Y021228D01*
+X023839Y021211D01*
+X023885Y021191D01*
+X023930Y021168D01*
+X023973Y021141D01*
+X024013Y021111D01*
+X024051Y021078D01*
+X024086Y021042D01*
+X024119Y021003D01*
+X024148Y020962D01*
+X024174Y020919D01*
+X024197Y020874D01*
+X024216Y020827D01*
+X024231Y020779D01*
+X024243Y020730D01*
+X024251Y020680D01*
+X024255Y020630D01*
+X024255Y020580D01*
+X024251Y020530D01*
+X024243Y020480D01*
+X024231Y020431D01*
+X024216Y020383D01*
+X024197Y020336D01*
+X024174Y020291D01*
+X024148Y020248D01*
+X024119Y020207D01*
+X024086Y020168D01*
+X024051Y020132D01*
+X024013Y020099D01*
+X023973Y020069D01*
+X023930Y020042D01*
+X023885Y020019D01*
+X023839Y019999D01*
+X023791Y019982D01*
+X023743Y019970D01*
+X023693Y019961D01*
+X023643Y019956D01*
+X023592Y019955D01*
+X023542Y019958D01*
+X023492Y019965D01*
+X023443Y019976D01*
+X023395Y019990D01*
+X023348Y020008D01*
+X023302Y020030D01*
+X023258Y020055D01*
+X023217Y020084D01*
+X023178Y020115D01*
+X023141Y020150D01*
+X023107Y020187D01*
+X023076Y020227D01*
+X023048Y020269D01*
+X023024Y020313D01*
+X023003Y020359D01*
+X022986Y020407D01*
+X022973Y020455D01*
+X022963Y020505D01*
+X022957Y020555D01*
+X022955Y020605D01*
+X042741Y020014D02*
+X042743Y020041D01*
+X042749Y020068D01*
+X042758Y020094D01*
+X042771Y020118D01*
+X042787Y020141D01*
+X042806Y020160D01*
+X042828Y020177D01*
+X042852Y020191D01*
+X042877Y020201D01*
+X042904Y020208D01*
+X042931Y020211D01*
+X042959Y020210D01*
+X042986Y020205D01*
+X043012Y020197D01*
+X043036Y020185D01*
+X043059Y020169D01*
+X043080Y020151D01*
+X043097Y020130D01*
+X043112Y020106D01*
+X043123Y020081D01*
+X043131Y020055D01*
+X043135Y020028D01*
+X043135Y020000D01*
+X043131Y019973D01*
+X043123Y019947D01*
+X043112Y019922D01*
+X043097Y019898D01*
+X043080Y019877D01*
+X043059Y019859D01*
+X043037Y019843D01*
+X043012Y019831D01*
+X042986Y019823D01*
+X042959Y019818D01*
+X042931Y019817D01*
+X042904Y019820D01*
+X042877Y019827D01*
+X042852Y019837D01*
+X042828Y019851D01*
+X042806Y019868D01*
+X042787Y019887D01*
+X042771Y019910D01*
+X042758Y019934D01*
+X042749Y019960D01*
+X042743Y019987D01*
+X042741Y020014D01*
+X042741Y021196D02*
+X042743Y021223D01*
+X042749Y021250D01*
+X042758Y021276D01*
+X042771Y021300D01*
+X042787Y021323D01*
+X042806Y021342D01*
+X042828Y021359D01*
+X042852Y021373D01*
+X042877Y021383D01*
+X042904Y021390D01*
+X042931Y021393D01*
+X042959Y021392D01*
+X042986Y021387D01*
+X043012Y021379D01*
+X043036Y021367D01*
+X043059Y021351D01*
+X043080Y021333D01*
+X043097Y021312D01*
+X043112Y021288D01*
+X043123Y021263D01*
+X043131Y021237D01*
+X043135Y021210D01*
+X043135Y021182D01*
+X043131Y021155D01*
+X043123Y021129D01*
+X043112Y021104D01*
+X043097Y021080D01*
+X043080Y021059D01*
+X043059Y021041D01*
+X043037Y021025D01*
+X043012Y021013D01*
+X042986Y021005D01*
+X042959Y021000D01*
+X042931Y020999D01*
+X042904Y021002D01*
+X042877Y021009D01*
+X042852Y021019D01*
+X042828Y021033D01*
+X042806Y021050D01*
+X042787Y021069D01*
+X042771Y021092D01*
+X042758Y021116D01*
+X042749Y021142D01*
+X042743Y021169D01*
+X042741Y021196D01*
+D13*
+X042855Y023105D03*
+X042855Y018105D03*
+D14*
+X040605Y020605D02*
+X040605Y021455D01*
+X042255Y023105D01*
+X042855Y023105D01*
+X040345Y020670D02*
+X040345Y020605D01*
+X040085Y020605D02*
+X040085Y020670D01*
+X039825Y020670D02*
+X039825Y020605D01*
+X039565Y020605D02*
+X039565Y020670D01*
+X039305Y020670D02*
+X039305Y020605D01*
+X039045Y020605D02*
+X039045Y020670D01*
+X038785Y020670D02*
+X038785Y020605D01*
+X038525Y020605D02*
+X038525Y020670D01*
+X038265Y020670D02*
+X038265Y020605D01*
+X038005Y020605D02*
+X038005Y020670D01*
+X037745Y020670D02*
+X037745Y020605D01*
+X037485Y020605D02*
+X037485Y020670D01*
+X037225Y020670D02*
+X037225Y020605D01*
+X036965Y020605D02*
+X036965Y020670D01*
+X036705Y020670D02*
+X036705Y020605D01*
+X036445Y020605D02*
+X036445Y020670D01*
+X036185Y020670D02*
+X036185Y020605D01*
+X035925Y020605D02*
+X035925Y020670D01*
+X035665Y020670D02*
+X035665Y020605D01*
+X035405Y020605D02*
+X035405Y020670D01*
+X035145Y020670D02*
+X035145Y020605D01*
+X034885Y020605D02*
+X034885Y020670D01*
+X034625Y020670D02*
+X034625Y020605D01*
+X034365Y020605D02*
+X034365Y020670D01*
+X034105Y020670D02*
+X034105Y020605D01*
+X033845Y020605D02*
+X033845Y020670D01*
+X033585Y020670D02*
+X033585Y020605D01*
+X033325Y020605D02*
+X033325Y020670D01*
+X033065Y020670D02*
+X033065Y020605D01*
+X032805Y020605D02*
+X032805Y020670D01*
+X032545Y020670D02*
+X032545Y020605D01*
+X032285Y020605D02*
+X032285Y020670D01*
+X032025Y020670D02*
+X032025Y020605D01*
+X031765Y020605D02*
+X031765Y020670D01*
+X031505Y020670D02*
+X031505Y020605D01*
+X031245Y020605D02*
+X031245Y020670D01*
+X030985Y020670D02*
+X030985Y020605D01*
+X030725Y020605D02*
+X030725Y020670D01*
+X030465Y020670D02*
+X030465Y020605D01*
+X030205Y020605D02*
+X030205Y020670D01*
+X029945Y020670D02*
+X029945Y020605D01*
+X029685Y020605D02*
+X029685Y020670D01*
+X029425Y020670D02*
+X029425Y020605D01*
+X029165Y020605D02*
+X029165Y020670D01*
+X028905Y020670D02*
+X028905Y020605D01*
+X028645Y020605D02*
+X028645Y020670D01*
+X028385Y020670D02*
+X028385Y020605D01*
+X028125Y020605D02*
+X028125Y020670D01*
+X027865Y020670D02*
+X027865Y020605D01*
+X027605Y020605D02*
+X027605Y020670D01*
+X027605Y020605D02*
+X026605Y020605D01*
+X026355Y020605D01*
+X026605Y020605D02*
+X026605Y020605D01*
+X035665Y020605D02*
+X035648Y019892D01*
+X035597Y019180D01*
+X035512Y018471D01*
+X035394Y017767D01*
+X035242Y017070D01*
+X035058Y016380D01*
+X034840Y015701D01*
+X034591Y015032D01*
+X034310Y014376D01*
+X033998Y013734D01*
+X033656Y013108D01*
+X033285Y012498D01*
+X032885Y011907D01*
+X032457Y011336D01*
+X032002Y010785D01*
+X031522Y010257D01*
+X031018Y009753D01*
+X030490Y009272D01*
+X029939Y008818D01*
+X029368Y008390D01*
+X028777Y007990D01*
+X028167Y007619D01*
+X027541Y007277D01*
+X026899Y006965D01*
+X026243Y006684D01*
+X025574Y006435D01*
+X024894Y006217D01*
+X024205Y006033D01*
+X023508Y005881D01*
+X022804Y005763D01*
+X022095Y005678D01*
+X021383Y005627D01*
+X020670Y005610D01*
+X020605Y005610D01*
+X020605Y005350D02*
+X020670Y005350D01*
+X020670Y005090D02*
+X020605Y005090D01*
+X020605Y004830D02*
+X020670Y004830D01*
+X020670Y004570D02*
+X020605Y004570D01*
+X020605Y004310D02*
+X020670Y004310D01*
+X020670Y004050D02*
+X020605Y004050D01*
+X020605Y003790D02*
+X020670Y003790D01*
+X020670Y003530D02*
+X020605Y003530D01*
+X020605Y003270D02*
+X020670Y003270D01*
+X020670Y003010D02*
+X020605Y003010D01*
+X020605Y002750D02*
+X020670Y002750D01*
+X020670Y002490D02*
+X020605Y002490D01*
+X020605Y002230D02*
+X020670Y002230D01*
+X020670Y001970D02*
+X020605Y001970D01*
+X020605Y001710D02*
+X020670Y001710D01*
+X020670Y001450D02*
+X020605Y001450D01*
+X020605Y001190D02*
+X020670Y001190D01*
+X020670Y000930D02*
+X020605Y000930D01*
+X020605Y000670D02*
+X020670Y000670D01*
+X020670Y005870D02*
+X020605Y005870D01*
+X020605Y006130D02*
+X020670Y006130D01*
+X020670Y006390D02*
+X020605Y006390D01*
+X020605Y006650D02*
+X020670Y006650D01*
+X020670Y006910D02*
+X020605Y006910D01*
+X020605Y007170D02*
+X020670Y007170D01*
+X020670Y007430D02*
+X020605Y007430D01*
+X020605Y007690D02*
+X020670Y007690D01*
+X020670Y007950D02*
+X020605Y007950D01*
+X020605Y008210D02*
+X020670Y008210D01*
+X020670Y008470D02*
+X020605Y008470D01*
+X020605Y008730D02*
+X020670Y008730D01*
+X020670Y008990D02*
+X020605Y008990D01*
+X020605Y009250D02*
+X020670Y009250D01*
+X020670Y009510D02*
+X020605Y009510D01*
+X020605Y009770D02*
+X020670Y009770D01*
+X020670Y010030D02*
+X020605Y010030D01*
+X020605Y010290D02*
+X020670Y010290D01*
+X020670Y010550D02*
+X020605Y010550D01*
+X020605Y010810D02*
+X020670Y010810D01*
+X020670Y011070D02*
+X020605Y011070D01*
+X020605Y011330D02*
+X020670Y011330D01*
+X020670Y011590D02*
+X020605Y011590D01*
+X020605Y011850D02*
+X020670Y011850D01*
+X020670Y012110D02*
+X020605Y012110D01*
+X020605Y012370D02*
+X020670Y012370D01*
+X020670Y012630D02*
+X020605Y012630D01*
+X020605Y012890D02*
+X020670Y012890D01*
+X020670Y013150D02*
+X020605Y013150D01*
+X020605Y013410D02*
+X020670Y013410D01*
+X020605Y006130D02*
+X019920Y006146D01*
+X019235Y006195D01*
+X018554Y006277D01*
+X017878Y006390D01*
+X017208Y006536D01*
+X016545Y006714D01*
+X015892Y006922D01*
+X015249Y007162D01*
+X014619Y007432D01*
+X014002Y007732D01*
+X013400Y008061D01*
+X012814Y008418D01*
+X012246Y008802D01*
+X011697Y009213D01*
+X011168Y009650D01*
+X010661Y010111D01*
+X010176Y010596D01*
+X009715Y011103D01*
+X009278Y011632D01*
+X008867Y012181D01*
+X008483Y012749D01*
+X008126Y013335D01*
+X007797Y013937D01*
+X007497Y014554D01*
+X007227Y015184D01*
+X006987Y015827D01*
+X006779Y016480D01*
+X006601Y017143D01*
+X006455Y017813D01*
+X006342Y018489D01*
+X006260Y019170D01*
+X006211Y019855D01*
+X006195Y020540D01*
+X006195Y020605D01*
+X005935Y020605D02*
+X005935Y020540D01*
+X005675Y020540D02*
+X005675Y020605D01*
+X005415Y020605D02*
+X005415Y020540D01*
+X005155Y020540D02*
+X005155Y020605D01*
+X004895Y020605D02*
+X004895Y020540D01*
+X004635Y020540D02*
+X004635Y020605D01*
+X004375Y020605D02*
+X004375Y020540D01*
+X004115Y020540D02*
+X004115Y020605D01*
+X003855Y020605D02*
+X003855Y020540D01*
+X003595Y020540D02*
+X003595Y020605D01*
+X003335Y020605D02*
+X003335Y020540D01*
+X003075Y020540D02*
+X003075Y020605D01*
+X002815Y020605D02*
+X002815Y020540D01*
+X002555Y020540D02*
+X002555Y020605D01*
+X002295Y020605D02*
+X002295Y020540D01*
+X002035Y020540D02*
+X002035Y020605D01*
+X001775Y020605D02*
+X001775Y020540D01*
+X001515Y020540D02*
+X001515Y020605D01*
+X001255Y020605D02*
+X001255Y020540D01*
+X000995Y020540D02*
+X000995Y020605D01*
+X000735Y020605D02*
+X000735Y020540D01*
+X006455Y020540D02*
+X006455Y020605D01*
+X006715Y020605D02*
+X006715Y020540D01*
+X006975Y020540D02*
+X006975Y020605D01*
+X007235Y020605D02*
+X007235Y020540D01*
+X007495Y020540D02*
+X007495Y020605D01*
+X007755Y020605D02*
+X007755Y020540D01*
+X008015Y020540D02*
+X008015Y020605D01*
+X008275Y020605D02*
+X008275Y020540D01*
+X008535Y020540D02*
+X008535Y020605D01*
+X008795Y020605D02*
+X008795Y020540D01*
+X009055Y020540D02*
+X009055Y020605D01*
+X009315Y020605D02*
+X009315Y020540D01*
+X009575Y020540D02*
+X009575Y020605D01*
+X009835Y020605D02*
+X009835Y020540D01*
+X010095Y020540D02*
+X010095Y020605D01*
+X010355Y020605D02*
+X010355Y020540D01*
+X010615Y020540D02*
+X010615Y020605D01*
+X010875Y020605D02*
+X010875Y020540D01*
+X011135Y020540D02*
+X011135Y020605D01*
+X011395Y020605D02*
+X011395Y020540D01*
+X011655Y020540D02*
+X011655Y020605D01*
+X011915Y020605D02*
+X011915Y020540D01*
+X012175Y020540D02*
+X012175Y020605D01*
+X012435Y020605D02*
+X012435Y020540D01*
+X012695Y020540D02*
+X012695Y020605D01*
+X012955Y020605D02*
+X012955Y020540D01*
+X013215Y020540D02*
+X013215Y020605D01*
+X013475Y020605D02*
+X013475Y020540D01*
+X004115Y020605D02*
+X004134Y021386D01*
+X004189Y022166D01*
+X004282Y022942D01*
+X004412Y023713D01*
+X004578Y024477D01*
+X004780Y025232D01*
+X005018Y025977D01*
+X005292Y026709D01*
+X005599Y027428D01*
+X005941Y028131D01*
+X006316Y028817D01*
+X006722Y029485D01*
+X007161Y030132D01*
+X007629Y030758D01*
+X008127Y031361D01*
+X008653Y031940D01*
+X009205Y032492D01*
+X009784Y033018D01*
+X010387Y033516D01*
+X011013Y033984D01*
+X011660Y034423D01*
+X012328Y034830D01*
+X013014Y035204D01*
+X013717Y035546D01*
+X014436Y035853D01*
+X015168Y036127D01*
+X015913Y036365D01*
+X016668Y036567D01*
+X017432Y036733D01*
+X018203Y036863D01*
+X018979Y036956D01*
+X019759Y037011D01*
+X020540Y037030D01*
+X020605Y037030D01*
+X020605Y037290D02*
+X020540Y037290D01*
+X020540Y037550D02*
+X020605Y037550D01*
+X020605Y037810D02*
+X020540Y037810D01*
+X020540Y038070D02*
+X020605Y038070D01*
+X020605Y038330D02*
+X020540Y038330D01*
+X020540Y038590D02*
+X020605Y038590D01*
+X020605Y038850D02*
+X020540Y038850D01*
+X020540Y039110D02*
+X020605Y039110D01*
+X020605Y039370D02*
+X020540Y039370D01*
+X020540Y039630D02*
+X020605Y039630D01*
+X020605Y039890D02*
+X020540Y039890D01*
+X020540Y040150D02*
+X020605Y040150D01*
+X020605Y040410D02*
+X020540Y040410D01*
+X020540Y036770D02*
+X020605Y036770D01*
+X020605Y036510D02*
+X020540Y036510D01*
+X020540Y036250D02*
+X020605Y036250D01*
+X020605Y035990D02*
+X020540Y035990D01*
+X020540Y035730D02*
+X020605Y035730D01*
+X020605Y035470D02*
+X020540Y035470D01*
+X020540Y035210D02*
+X020605Y035210D01*
+X020605Y034950D02*
+X020540Y034950D01*
+X020540Y034690D02*
+X020605Y034690D01*
+X020605Y034430D02*
+X020540Y034430D01*
+X020540Y034170D02*
+X020605Y034170D01*
+X020605Y033910D02*
+X020540Y033910D01*
+X020540Y033650D02*
+X020605Y033650D01*
+X020605Y033390D02*
+X020540Y033390D01*
+X020540Y033130D02*
+X020605Y033130D01*
+X020605Y032870D02*
+X020540Y032870D01*
+X020540Y032610D02*
+X020605Y032610D01*
+X020605Y032350D02*
+X020540Y032350D01*
+X020540Y032090D02*
+X020605Y032090D01*
+X020605Y031830D02*
+X020540Y031830D01*
+X020540Y031570D02*
+X020605Y031570D01*
+X020605Y031310D02*
+X020540Y031310D01*
+X020540Y031050D02*
+X020605Y031050D01*
+X020605Y030790D02*
+X020540Y030790D01*
+X020540Y030530D02*
+X020605Y030530D01*
+X020605Y030270D02*
+X020540Y030270D01*
+X020540Y030010D02*
+X020605Y030010D01*
+X020605Y029750D02*
+X020540Y029750D01*
+X020540Y029490D02*
+X020605Y029490D01*
+X020605Y029230D02*
+X020540Y029230D01*
+X020540Y028970D02*
+X020605Y028970D01*
+X020605Y028710D02*
+X020540Y028710D01*
+X020540Y028450D02*
+X020605Y028450D01*
+X020605Y028190D02*
+X020540Y028190D01*
+X020540Y027930D02*
+X020605Y027930D01*
+X020605Y027670D02*
+X020540Y027670D01*
+X020605Y040150D02*
+X021532Y040128D01*
+X022457Y040062D01*
+X023377Y039952D01*
+X024291Y039798D01*
+X025197Y039601D01*
+X026093Y039361D01*
+X026976Y039079D01*
+X027845Y038755D01*
+X028697Y038390D01*
+X029531Y037985D01*
+X030345Y037540D01*
+X031137Y037058D01*
+X031904Y036538D01*
+X032647Y035982D01*
+X033362Y035392D01*
+X034048Y034768D01*
+X034703Y034113D01*
+X035327Y033427D01*
+X035917Y032712D01*
+X036473Y031969D01*
+X036993Y031202D01*
+X037475Y030410D01*
+X037920Y029596D01*
+X038325Y028762D01*
+X038690Y027910D01*
+X039014Y027041D01*
+X039296Y026158D01*
+X039536Y025262D01*
+X039733Y024356D01*
+X039887Y023442D01*
+X039997Y022521D01*
+X040063Y021597D01*
+X040085Y020670D01*
+X038785Y020605D02*
+X038764Y019743D01*
+X038703Y018883D01*
+X038601Y018027D01*
+X038458Y017177D01*
+X038274Y016334D01*
+X038051Y015501D01*
+X037789Y014680D01*
+X037487Y013872D01*
+X037148Y013080D01*
+X036771Y012304D01*
+X036358Y011548D01*
+X035909Y010811D01*
+X035426Y010097D01*
+X034909Y009407D01*
+X034360Y008742D01*
+X033780Y008104D01*
+X033171Y007495D01*
+X032533Y006915D01*
+X031868Y006366D01*
+X031178Y005849D01*
+X030464Y005366D01*
+X029727Y004917D01*
+X028971Y004504D01*
+X028195Y004127D01*
+X027403Y003788D01*
+X026595Y003486D01*
+X025774Y003224D01*
+X024941Y003001D01*
+X024098Y002817D01*
+X023248Y002674D01*
+X022392Y002572D01*
+X021532Y002511D01*
+X020670Y002490D01*
+X020605Y006910D02*
+X019957Y006925D01*
+X019310Y006972D01*
+X018665Y007049D01*
+X018026Y007156D01*
+X017392Y007294D01*
+X016765Y007462D01*
+X016147Y007660D01*
+X015539Y007886D01*
+X014943Y008142D01*
+X014359Y008425D01*
+X013790Y008736D01*
+X013236Y009074D01*
+X012699Y009437D01*
+X012180Y009826D01*
+X011679Y010239D01*
+X011199Y010676D01*
+X010740Y011134D01*
+X010304Y011614D01*
+X009891Y012115D01*
+X009502Y012634D01*
+X009139Y013171D01*
+X008801Y013725D01*
+X008490Y014294D01*
+X008207Y014878D01*
+X007951Y015474D01*
+X007725Y016082D01*
+X007527Y016700D01*
+X007359Y017327D01*
+X007221Y017961D01*
+X007114Y018600D01*
+X007037Y019245D01*
+X006990Y019892D01*
+X006975Y020540D01*
+X008015Y020605D02*
+X008029Y021201D01*
+X008072Y021795D01*
+X008142Y022387D01*
+X008241Y022975D01*
+X008368Y023558D01*
+X008522Y024134D01*
+X008704Y024701D01*
+X008912Y025260D01*
+X009147Y025808D01*
+X009407Y026344D01*
+X009693Y026867D01*
+X010003Y027377D01*
+X010337Y027870D01*
+X010695Y028347D01*
+X011074Y028807D01*
+X011475Y029248D01*
+X011897Y029670D01*
+X012338Y030071D01*
+X012798Y030450D01*
+X013275Y030808D01*
+X013769Y031142D01*
+X014278Y031452D01*
+X014801Y031738D01*
+X015337Y031998D01*
+X015885Y032233D01*
+X016444Y032441D01*
+X017011Y032623D01*
+X017587Y032777D01*
+X018170Y032904D01*
+X018758Y033003D01*
+X019350Y033073D01*
+X019944Y033116D01*
+X020540Y033130D01*
+X020605Y028450D02*
+X020975Y028441D01*
+X021344Y028415D01*
+X021712Y028371D01*
+X022077Y028309D01*
+X022439Y028231D01*
+X022797Y028135D01*
+X023149Y028022D01*
+X023496Y027893D01*
+X023837Y027747D01*
+X024170Y027585D01*
+X024495Y027408D01*
+X024811Y027215D01*
+X025118Y027007D01*
+X025414Y026785D01*
+X025700Y026550D01*
+X025974Y026301D01*
+X026236Y026039D01*
+X026485Y025765D01*
+X026721Y025479D01*
+X026942Y025183D01*
+X027150Y024876D01*
+X027343Y024560D01*
+X027520Y024235D01*
+X027682Y023902D01*
+X027828Y023561D01*
+X027957Y023214D01*
+X028070Y022862D01*
+X028166Y022504D01*
+X028244Y022142D01*
+X028306Y021777D01*
+X028350Y021409D01*
+X028376Y021040D01*
+X028385Y020670D01*
+X039565Y020605D02*
+X039544Y019706D01*
+X039479Y018809D01*
+X039373Y017916D01*
+X039224Y017029D01*
+X039032Y016150D01*
+X038800Y015282D01*
+X038526Y014425D01*
+X038212Y013582D01*
+X037858Y012756D01*
+X037465Y011947D01*
+X037034Y011157D01*
+X036565Y010390D01*
+X036061Y009645D01*
+X035522Y008925D01*
+X034950Y008231D01*
+X034345Y007566D01*
+X033709Y006930D01*
+X033044Y006325D01*
+X032350Y005752D01*
+X031630Y005214D01*
+X030885Y004709D01*
+X030117Y004241D01*
+X029328Y003810D01*
+X028519Y003417D01*
+X027692Y003063D01*
+X026850Y002749D01*
+X025993Y002475D01*
+X025125Y002243D01*
+X024246Y002051D01*
+X023359Y001902D01*
+X022466Y001796D01*
+X021569Y001731D01*
+X020670Y001710D01*
+X020605Y003010D02*
+X019771Y003030D01*
+X018939Y003089D01*
+X018110Y003188D01*
+X017288Y003327D01*
+X016472Y003504D01*
+X015666Y003720D01*
+X014872Y003974D01*
+X014090Y004266D01*
+X013323Y004594D01*
+X012572Y004959D01*
+X011840Y005359D01*
+X011128Y005793D01*
+X010437Y006260D01*
+X009769Y006760D01*
+X009125Y007292D01*
+X008508Y007853D01*
+X007918Y008443D01*
+X007357Y009060D01*
+X006825Y009704D01*
+X006325Y010372D01*
+X005858Y011063D01*
+X005424Y011775D01*
+X005024Y012507D01*
+X004659Y013258D01*
+X004331Y014025D01*
+X004039Y014807D01*
+X003785Y015601D01*
+X003569Y016407D01*
+X003392Y017223D01*
+X003253Y018045D01*
+X003154Y018874D01*
+X003095Y019706D01*
+X003075Y020540D01*
+X001775Y020605D02*
+X001796Y021498D01*
+X001860Y022389D01*
+X001966Y023275D01*
+X002114Y024156D01*
+X002304Y025029D01*
+X002535Y025892D01*
+X002807Y026742D01*
+X003119Y027579D01*
+X003471Y028400D01*
+X003861Y029204D01*
+X004289Y029987D01*
+X004754Y030750D01*
+X005254Y031490D01*
+X005790Y032205D01*
+X006358Y032893D01*
+X006959Y033554D01*
+X007591Y034186D01*
+X008252Y034787D01*
+X008940Y035355D01*
+X009655Y035891D01*
+X010395Y036391D01*
+X011158Y036856D01*
+X011941Y037284D01*
+X012745Y037674D01*
+X013566Y038026D01*
+X014403Y038338D01*
+X015253Y038610D01*
+X016116Y038841D01*
+X016989Y039031D01*
+X017870Y039179D01*
+X018756Y039285D01*
+X019647Y039349D01*
+X020540Y039370D01*
+X020605Y030530D02*
+X021074Y030519D01*
+X021542Y030485D01*
+X022008Y030430D01*
+X022471Y030352D01*
+X022929Y030252D01*
+X023383Y030131D01*
+X023830Y029988D01*
+X024269Y029824D01*
+X024701Y029639D01*
+X025123Y029434D01*
+X025535Y029209D01*
+X025936Y028965D01*
+X026324Y028702D01*
+X026700Y028421D01*
+X027062Y028122D01*
+X027409Y027806D01*
+X027741Y027474D01*
+X028057Y027127D01*
+X028355Y026765D01*
+X028637Y026389D01*
+X028900Y026001D01*
+X029144Y025600D01*
+X029369Y025188D01*
+X029574Y024766D01*
+X029759Y024335D01*
+X029923Y023895D01*
+X030066Y023448D01*
+X030187Y022994D01*
+X030287Y022536D01*
+X030365Y022073D01*
+X030420Y021607D01*
+X030454Y021139D01*
+X030465Y020670D01*
+X033845Y020605D02*
+X033830Y019978D01*
+X033785Y019353D01*
+X033711Y018730D01*
+X033607Y018112D01*
+X033474Y017499D01*
+X033311Y016893D01*
+X033120Y016296D01*
+X032901Y015708D01*
+X032654Y015132D01*
+X032380Y014568D01*
+X032080Y014017D01*
+X031754Y013482D01*
+X031402Y012963D01*
+X031026Y012461D01*
+X030627Y011977D01*
+X030205Y011513D01*
+X029762Y011070D01*
+X029298Y010648D01*
+X028814Y010249D01*
+X028312Y009873D01*
+X027793Y009521D01*
+X027257Y009195D01*
+X026707Y008895D01*
+X026143Y008621D01*
+X025567Y008374D01*
+X024979Y008155D01*
+X024382Y007964D01*
+X023776Y007801D01*
+X023163Y007668D01*
+X022545Y007564D01*
+X021922Y007490D01*
+X021297Y007445D01*
+X020670Y007430D01*
+X020605Y008990D02*
+X020056Y009003D01*
+X019507Y009042D01*
+X018961Y009108D01*
+X018419Y009199D01*
+X017882Y009316D01*
+X017351Y009458D01*
+X016827Y009625D01*
+X016312Y009817D01*
+X015807Y010034D01*
+X015313Y010274D01*
+X014830Y010537D01*
+X014361Y010823D01*
+X013905Y011132D01*
+X013465Y011461D01*
+X013041Y011811D01*
+X012635Y012181D01*
+X012246Y012570D01*
+X011876Y012976D01*
+X011526Y013400D01*
+X011197Y013840D01*
+X010888Y014296D01*
+X010602Y014765D01*
+X010339Y015248D01*
+X010099Y015742D01*
+X009882Y016247D01*
+X009690Y016762D01*
+X009523Y017286D01*
+X009381Y017817D01*
+X009264Y018354D01*
+X009173Y018896D01*
+X009107Y019442D01*
+X009068Y019991D01*
+X009055Y020540D01*
+X009575Y020605D02*
+X009587Y021127D01*
+X009625Y021647D01*
+X009687Y022165D01*
+X009773Y022680D01*
+X009884Y023190D01*
+X010019Y023694D01*
+X010178Y024191D01*
+X010360Y024680D01*
+X010566Y025160D01*
+X010794Y025629D01*
+X011044Y026087D01*
+X011316Y026533D01*
+X011608Y026965D01*
+X011921Y027383D01*
+X012253Y027786D01*
+X012604Y028172D01*
+X012973Y028541D01*
+X013359Y028892D01*
+X013762Y029224D01*
+X014180Y029537D01*
+X014612Y029829D01*
+X015058Y030101D01*
+X015516Y030351D01*
+X015985Y030579D01*
+X016465Y030785D01*
+X016954Y030967D01*
+X017451Y031126D01*
+X017955Y031261D01*
+X018465Y031372D01*
+X018980Y031458D01*
+X019498Y031520D01*
+X020018Y031558D01*
+X020540Y031570D01*
+X020605Y037810D02*
+X021420Y037791D01*
+X022234Y037732D01*
+X023044Y037636D01*
+X023849Y037500D01*
+X024646Y037327D01*
+X025434Y037116D01*
+X026211Y036867D01*
+X026975Y036582D01*
+X027725Y036261D01*
+X028459Y035905D01*
+X029175Y035514D01*
+X029872Y035089D01*
+X030547Y034632D01*
+X031200Y034143D01*
+X031829Y033624D01*
+X032433Y033075D01*
+X033010Y032498D01*
+X033559Y031894D01*
+X034078Y031265D01*
+X034567Y030612D01*
+X035024Y029937D01*
+X035449Y029240D01*
+X035840Y028524D01*
+X036196Y027790D01*
+X036517Y027040D01*
+X036802Y026276D01*
+X037051Y025499D01*
+X037262Y024711D01*
+X037435Y023914D01*
+X037571Y023109D01*
+X037667Y022299D01*
+X037726Y021485D01*
+X037745Y020670D01*
+X031505Y020605D02*
+X031493Y020090D01*
+X031456Y019575D01*
+X031395Y019063D01*
+X031309Y018555D01*
+X031200Y018051D01*
+X031066Y017552D01*
+X030909Y017061D01*
+X030729Y016578D01*
+X030526Y016104D01*
+X030301Y015640D01*
+X030053Y015187D01*
+X029785Y014747D01*
+X029496Y014320D01*
+X029187Y013907D01*
+X028859Y013510D01*
+X028512Y013128D01*
+X028147Y012763D01*
+X027765Y012416D01*
+X027368Y012088D01*
+X026955Y011779D01*
+X026528Y011490D01*
+X026087Y011222D01*
+X025635Y010974D01*
+X025171Y010749D01*
+X024697Y010546D01*
+X024214Y010366D01*
+X023722Y010209D01*
+X023224Y010075D01*
+X022720Y009966D01*
+X022212Y009880D01*
+X021700Y009819D01*
+X021185Y009782D01*
+X020670Y009770D01*
+X020605Y010810D02*
+X020142Y010821D01*
+X019680Y010854D01*
+X019220Y010909D01*
+X018764Y010986D01*
+X018311Y011084D01*
+X017864Y011204D01*
+X017423Y011345D01*
+X016989Y011507D01*
+X016563Y011689D01*
+X016147Y011892D01*
+X015740Y012114D01*
+X015345Y012355D01*
+X014961Y012614D01*
+X014590Y012892D01*
+X014233Y013187D01*
+X013891Y013498D01*
+X013563Y013826D01*
+X013252Y014168D01*
+X012957Y014525D01*
+X012679Y014896D01*
+X012420Y015280D01*
+X012179Y015675D01*
+X011957Y016082D01*
+X011754Y016498D01*
+X011572Y016924D01*
+X011410Y017358D01*
+X011269Y017799D01*
+X011149Y018246D01*
+X011051Y018699D01*
+X010974Y019155D01*
+X010919Y019615D01*
+X010886Y020077D01*
+X010875Y020540D01*
+X002555Y020605D02*
+X002575Y021461D01*
+X002636Y022314D01*
+X002738Y023164D01*
+X002880Y024009D01*
+X003062Y024845D01*
+X003284Y025672D01*
+X003544Y026487D01*
+X003843Y027289D01*
+X004180Y028076D01*
+X004554Y028846D01*
+X004965Y029597D01*
+X005410Y030328D01*
+X005890Y031037D01*
+X006403Y031723D01*
+X006948Y032383D01*
+X007524Y033016D01*
+X008129Y033621D01*
+X008762Y034197D01*
+X009422Y034742D01*
+X010108Y035255D01*
+X010817Y035735D01*
+X011548Y036181D01*
+X012299Y036591D01*
+X013069Y036965D01*
+X013856Y037302D01*
+X014658Y037601D01*
+X015473Y037862D01*
+X016300Y038083D01*
+X017136Y038265D01*
+X017981Y038407D01*
+X018831Y038509D01*
+X019684Y038570D01*
+X020540Y038590D01*
+X020605Y036770D02*
+X021371Y036752D01*
+X022135Y036697D01*
+X022896Y036606D01*
+X023652Y036479D01*
+X024401Y036316D01*
+X025141Y036118D01*
+X025871Y035885D01*
+X026589Y035617D01*
+X027293Y035315D01*
+X027982Y034980D01*
+X028655Y034613D01*
+X029309Y034214D01*
+X029944Y033785D01*
+X030557Y033325D01*
+X031148Y032838D01*
+X031715Y032322D01*
+X032257Y031780D01*
+X032773Y031213D01*
+X033260Y030622D01*
+X033720Y030009D01*
+X034149Y029374D01*
+X034548Y028720D01*
+X034915Y028047D01*
+X035250Y027358D01*
+X035552Y026654D01*
+X035820Y025936D01*
+X036053Y025206D01*
+X036251Y024466D01*
+X036414Y023717D01*
+X036541Y022961D01*
+X036632Y022200D01*
+X036687Y021436D01*
+X036705Y020670D01*
+X030985Y020605D02*
+X030973Y020114D01*
+X030938Y019625D01*
+X030880Y019137D01*
+X030799Y018653D01*
+X030694Y018173D01*
+X030567Y017699D01*
+X030418Y017231D01*
+X030246Y016771D01*
+X030053Y016320D01*
+X029838Y015878D01*
+X029603Y015447D01*
+X029348Y015028D01*
+X029072Y014622D01*
+X028778Y014229D01*
+X028466Y013850D01*
+X028135Y013487D01*
+X027788Y013140D01*
+X027425Y012809D01*
+X027046Y012497D01*
+X026653Y012203D01*
+X026247Y011927D01*
+X025827Y011672D01*
+X025397Y011437D01*
+X024955Y011222D01*
+X024504Y011029D01*
+X024044Y010857D01*
+X023576Y010708D01*
+X023102Y010581D01*
+X022622Y010476D01*
+X022138Y010395D01*
+X021650Y010337D01*
+X021161Y010302D01*
+X020670Y010290D01*
+X020605Y009770D02*
+X020093Y009782D01*
+X019581Y009819D01*
+X019072Y009880D01*
+X018567Y009965D01*
+X018066Y010074D01*
+X017571Y010206D01*
+X017083Y010362D01*
+X016602Y010541D01*
+X016131Y010743D01*
+X015670Y010967D01*
+X015220Y011213D01*
+X014782Y011480D01*
+X014358Y011767D01*
+X013947Y012074D01*
+X013552Y012401D01*
+X013173Y012745D01*
+X012810Y013108D01*
+X012466Y013487D01*
+X012139Y013882D01*
+X011832Y014293D01*
+X011545Y014717D01*
+X011278Y015155D01*
+X011032Y015605D01*
+X010808Y016066D01*
+X010606Y016537D01*
+X010427Y017018D01*
+X010271Y017506D01*
+X010139Y018001D01*
+X010030Y018502D01*
+X009945Y019007D01*
+X009884Y019516D01*
+X009847Y020028D01*
+X009835Y020540D01*
+X007235Y020605D02*
+X007250Y021238D01*
+X007295Y021870D01*
+X007370Y022498D01*
+X007475Y023123D01*
+X007610Y023742D01*
+X007774Y024353D01*
+X007967Y024957D01*
+X008188Y025550D01*
+X008437Y026132D01*
+X008714Y026702D01*
+X009018Y027257D01*
+X009347Y027798D01*
+X009702Y028323D01*
+X010082Y028830D01*
+X010485Y029318D01*
+X010911Y029787D01*
+X011359Y030234D01*
+X011827Y030660D01*
+X012315Y031063D01*
+X012822Y031443D01*
+X013347Y031798D01*
+X013888Y032128D01*
+X014443Y032431D01*
+X015013Y032708D01*
+X015595Y032957D01*
+X016188Y033178D01*
+X016792Y033371D01*
+X017403Y033535D01*
+X018022Y033670D01*
+X018647Y033775D01*
+X019275Y033850D01*
+X019907Y033895D01*
+X020540Y033910D01*
+X020605Y037550D02*
+X021408Y037531D01*
+X022209Y037474D01*
+X023007Y037378D01*
+X023799Y037245D01*
+X024584Y037074D01*
+X025360Y036866D01*
+X026126Y036622D01*
+X026879Y036341D01*
+X027617Y036025D01*
+X028340Y035674D01*
+X029045Y035289D01*
+X029731Y034870D01*
+X030396Y034420D01*
+X031039Y033939D01*
+X031659Y033427D01*
+X032254Y032887D01*
+X032822Y032319D01*
+X033362Y031724D01*
+X033874Y031105D01*
+X034355Y030461D01*
+X034805Y029796D01*
+X035224Y029110D01*
+X035609Y028405D01*
+X035960Y027682D01*
+X036276Y026944D01*
+X036557Y026191D01*
+X036801Y025426D01*
+X037009Y024649D01*
+X037180Y023864D01*
+X037313Y023072D01*
+X037409Y022274D01*
+X037466Y021473D01*
+X037485Y020670D01*
+X029945Y020605D02*
+X029934Y020164D01*
+X029903Y019723D01*
+X029851Y019285D01*
+X029777Y018850D01*
+X029684Y018418D01*
+X029569Y017992D01*
+X029435Y017571D01*
+X029281Y017158D01*
+X029107Y016752D01*
+X028914Y016355D01*
+X028702Y015967D01*
+X028473Y015591D01*
+X028225Y015225D01*
+X027961Y014872D01*
+X027680Y014531D01*
+X027383Y014204D01*
+X027070Y013892D01*
+X026744Y013595D01*
+X026403Y013314D01*
+X026050Y013050D01*
+X025684Y012802D01*
+X025307Y012573D01*
+X024920Y012361D01*
+X024523Y012168D01*
+X024117Y011994D01*
+X023703Y011840D01*
+X023283Y011706D01*
+X022857Y011591D01*
+X022425Y011498D01*
+X021990Y011424D01*
+X021552Y011372D01*
+X021111Y011340D01*
+X020670Y011330D01*
+X020605Y004050D02*
+X019820Y004069D01*
+X019038Y004125D01*
+X018258Y004218D01*
+X017484Y004348D01*
+X016717Y004515D01*
+X015959Y004718D01*
+X015212Y004957D01*
+X014476Y005231D01*
+X013755Y005540D01*
+X013049Y005883D01*
+X012360Y006259D01*
+X011690Y006668D01*
+X011040Y007108D01*
+X010412Y007578D01*
+X009806Y008078D01*
+X009226Y008606D01*
+X008671Y009161D01*
+X008143Y009741D01*
+X007643Y010347D01*
+X007173Y010975D01*
+X006733Y011625D01*
+X006324Y012295D01*
+X005948Y012984D01*
+X005605Y013690D01*
+X005296Y014411D01*
+X005022Y015147D01*
+X004783Y015894D01*
+X004580Y016652D01*
+X004413Y017419D01*
+X004283Y018193D01*
+X004190Y018973D01*
+X004134Y019756D01*
+X004115Y020540D01*
+X013475Y020605D02*
+X013483Y020941D01*
+X013507Y021276D01*
+X013547Y021610D01*
+X013603Y021942D01*
+X013674Y022271D01*
+X013761Y022595D01*
+X013864Y022916D01*
+X013981Y023231D01*
+X014113Y023540D01*
+X014260Y023842D01*
+X014422Y024137D01*
+X014597Y024425D01*
+X014785Y024703D01*
+X014987Y024972D01*
+X015201Y025232D01*
+X015427Y025480D01*
+X015665Y025718D01*
+X015913Y025944D01*
+X016173Y026159D01*
+X016442Y026360D01*
+X016720Y026549D01*
+X017008Y026724D01*
+X017303Y026885D01*
+X017605Y027032D01*
+X017914Y027164D01*
+X018229Y027281D01*
+X018550Y027384D01*
+X018875Y027471D01*
+X019203Y027542D01*
+X019535Y027598D01*
+X019869Y027638D01*
+X020204Y027662D01*
+X020540Y027670D01*
+X020605Y037290D02*
+X021396Y037271D01*
+X022185Y037215D01*
+X022970Y037121D01*
+X023750Y036990D01*
+X024523Y036822D01*
+X025287Y036617D01*
+X026041Y036376D01*
+X026782Y036100D01*
+X027509Y035788D01*
+X028221Y035442D01*
+X028915Y035063D01*
+X029590Y034652D01*
+X030246Y034208D01*
+X030879Y033734D01*
+X031489Y033231D01*
+X032074Y032698D01*
+X032633Y032139D01*
+X033166Y031554D01*
+X033669Y030944D01*
+X034143Y030311D01*
+X034587Y029655D01*
+X034998Y028980D01*
+X035377Y028286D01*
+X035723Y027574D01*
+X036035Y026847D01*
+X036311Y026106D01*
+X036552Y025352D01*
+X036757Y024588D01*
+X036925Y023815D01*
+X037056Y023035D01*
+X037150Y022250D01*
+X037206Y021461D01*
+X037225Y020670D01*
+X028645Y020605D02*
+X028636Y020226D01*
+X028609Y019847D01*
+X028564Y019470D01*
+X028501Y019096D01*
+X028420Y018725D01*
+X028322Y018358D01*
+X028206Y017997D01*
+X028074Y017641D01*
+X027924Y017292D01*
+X027758Y016951D01*
+X027577Y016618D01*
+X027379Y016293D01*
+X027166Y015979D01*
+X026939Y015675D01*
+X026697Y015382D01*
+X026442Y015102D01*
+X026173Y014833D01*
+X025892Y014578D01*
+X025600Y014336D01*
+X025296Y014109D01*
+X024982Y013896D01*
+X024657Y013698D01*
+X024324Y013517D01*
+X023983Y013351D01*
+X023634Y013201D01*
+X023278Y013069D01*
+X022917Y012953D01*
+X022550Y012855D01*
+X022179Y012774D01*
+X021805Y012711D01*
+X021428Y012666D01*
+X021049Y012639D01*
+X020670Y012630D01*
+X020605Y007950D02*
+X020006Y007964D01*
+X019408Y008007D01*
+X018813Y008078D01*
+X018222Y008178D01*
+X017637Y008305D01*
+X017058Y008460D01*
+X016487Y008642D01*
+X015926Y008852D01*
+X015375Y009088D01*
+X014836Y009350D01*
+X014310Y009637D01*
+X013798Y009949D01*
+X013302Y010284D01*
+X012822Y010644D01*
+X012360Y011025D01*
+X011917Y011428D01*
+X011493Y011852D01*
+X011090Y012295D01*
+X010709Y012757D01*
+X010349Y013237D01*
+X010014Y013733D01*
+X009702Y014245D01*
+X009415Y014771D01*
+X009153Y015310D01*
+X008917Y015861D01*
+X008707Y016422D01*
+X008525Y016993D01*
+X008370Y017572D01*
+X008242Y018157D01*
+X008143Y018748D01*
+X008072Y019343D01*
+X008029Y019941D01*
+X008015Y020540D01*
+X003595Y020605D02*
+X003614Y021411D01*
+X003672Y022216D01*
+X003767Y023016D01*
+X003901Y023812D01*
+X004073Y024600D01*
+X004281Y025379D01*
+X004527Y026147D01*
+X004809Y026903D01*
+X005126Y027644D01*
+X005479Y028370D01*
+X005865Y029077D01*
+X006285Y029766D01*
+X006737Y030434D01*
+X007220Y031080D01*
+X007734Y031702D01*
+X008276Y032298D01*
+X008847Y032869D01*
+X009443Y033411D01*
+X010065Y033925D01*
+X010711Y034408D01*
+X011379Y034860D01*
+X012068Y035280D01*
+X012775Y035666D01*
+X013501Y036019D01*
+X014242Y036336D01*
+X014998Y036618D01*
+X015766Y036864D01*
+X016545Y037072D01*
+X017333Y037244D01*
+X018129Y037378D01*
+X018929Y037473D01*
+X019734Y037531D01*
+X020540Y037550D01*
+X020605Y034170D02*
+X021247Y034155D01*
+X021888Y034109D01*
+X022526Y034033D01*
+X023160Y033926D01*
+X023788Y033789D01*
+X024408Y033623D01*
+X025020Y033428D01*
+X025622Y033203D01*
+X026213Y032950D01*
+X026791Y032669D01*
+X027355Y032361D01*
+X027904Y032027D01*
+X028436Y031667D01*
+X028950Y031282D01*
+X029446Y030873D01*
+X029921Y030440D01*
+X030375Y029986D01*
+X030808Y029511D01*
+X031217Y029015D01*
+X031602Y028501D01*
+X031962Y027969D01*
+X032296Y027420D01*
+X032604Y026856D01*
+X032885Y026278D01*
+X033138Y025687D01*
+X033363Y025085D01*
+X033558Y024473D01*
+X033724Y023853D01*
+X033861Y023225D01*
+X033968Y022591D01*
+X034044Y021953D01*
+X034090Y021312D01*
+X034105Y020670D01*
+X034625Y020605D02*
+X034609Y019941D01*
+X034562Y019279D01*
+X034483Y018619D01*
+X034373Y017964D01*
+X034232Y017315D01*
+X034060Y016673D01*
+X033857Y016041D01*
+X033625Y015418D01*
+X033364Y014808D01*
+X033074Y014210D01*
+X032755Y013627D01*
+X032410Y013060D01*
+X032037Y012510D01*
+X031639Y011979D01*
+X031216Y011466D01*
+X030770Y010975D01*
+X030300Y010505D01*
+X029809Y010058D01*
+X029296Y009636D01*
+X028765Y009238D01*
+X028215Y008865D01*
+X027647Y008520D01*
+X027064Y008201D01*
+X026467Y007911D01*
+X025856Y007650D01*
+X025234Y007417D01*
+X024601Y007215D01*
+X023960Y007043D01*
+X023311Y006902D01*
+X022656Y006792D01*
+X021996Y006713D01*
+X021334Y006666D01*
+X020670Y006650D01*
+X020605Y011330D02*
+X020167Y011340D01*
+X019730Y011372D01*
+X019294Y011424D01*
+X018862Y011496D01*
+X018434Y011590D01*
+X018010Y011703D01*
+X017593Y011837D01*
+X017182Y011990D01*
+X016779Y012162D01*
+X016385Y012354D01*
+X016000Y012564D01*
+X015626Y012792D01*
+X015263Y013038D01*
+X014912Y013300D01*
+X014574Y013580D01*
+X014249Y013874D01*
+X013939Y014184D01*
+X013645Y014509D01*
+X013365Y014847D01*
+X013103Y015198D01*
+X012857Y015561D01*
+X012629Y015935D01*
+X012419Y016320D01*
+X012227Y016714D01*
+X012055Y017117D01*
+X011902Y017528D01*
+X011768Y017945D01*
+X011655Y018369D01*
+X011561Y018797D01*
+X011489Y019229D01*
+X011437Y019665D01*
+X011405Y020102D01*
+X011395Y020540D01*
+X011655Y020605D02*
+X011665Y021028D01*
+X011695Y021449D01*
+X011745Y021869D01*
+X011816Y022286D01*
+X011905Y022700D01*
+X012015Y023108D01*
+X012144Y023511D01*
+X012291Y023907D01*
+X012458Y024296D01*
+X012643Y024676D01*
+X012845Y025047D01*
+X013065Y025409D01*
+X013302Y025759D01*
+X013556Y026097D01*
+X013825Y026423D01*
+X014110Y026736D01*
+X014409Y027035D01*
+X014722Y027320D01*
+X015048Y027589D01*
+X015386Y027843D01*
+X015736Y028080D01*
+X016098Y028300D01*
+X016469Y028502D01*
+X016849Y028687D01*
+X017238Y028854D01*
+X017634Y029001D01*
+X018037Y029130D01*
+X018445Y029240D01*
+X018859Y029329D01*
+X019276Y029400D01*
+X019696Y029450D01*
+X020117Y029480D01*
+X020540Y029490D01*
+X020605Y032090D02*
+X021148Y032077D01*
+X021690Y032038D01*
+X022230Y031974D01*
+X022766Y031884D01*
+X023297Y031768D01*
+X023822Y031627D01*
+X024340Y031462D01*
+X024849Y031272D01*
+X025349Y031058D01*
+X025838Y030821D01*
+X026315Y030560D01*
+X026779Y030277D01*
+X027229Y029972D01*
+X027664Y029647D01*
+X028084Y029301D01*
+X028486Y028935D01*
+X028870Y028551D01*
+X029236Y028148D01*
+X029582Y027729D01*
+X029907Y027294D01*
+X030212Y026844D01*
+X030495Y026380D01*
+X030756Y025903D01*
+X030993Y025414D01*
+X031207Y024914D01*
+X031397Y024405D01*
+X031562Y023887D01*
+X031703Y023362D01*
+X031819Y022831D01*
+X031909Y022295D01*
+X031973Y021755D01*
+X032012Y021213D01*
+X032025Y020670D01*
+X029685Y020605D02*
+X029675Y020176D01*
+X029644Y019748D01*
+X029593Y019322D01*
+X029522Y018899D01*
+X029431Y018480D01*
+X029320Y018065D01*
+X029189Y017657D01*
+X029039Y017255D01*
+X028870Y016860D01*
+X028683Y016474D01*
+X028477Y016098D01*
+X028254Y015731D01*
+X028013Y015376D01*
+X027756Y015032D01*
+X027483Y014701D01*
+X027194Y014384D01*
+X026891Y014081D01*
+X026574Y013792D01*
+X026243Y013519D01*
+X025899Y013262D01*
+X025544Y013021D01*
+X025177Y012798D01*
+X024801Y012592D01*
+X024415Y012405D01*
+X024020Y012236D01*
+X023618Y012086D01*
+X023210Y011955D01*
+X022795Y011844D01*
+X022376Y011753D01*
+X021953Y011682D01*
+X021527Y011631D01*
+X021099Y011600D01*
+X020670Y011590D01*
+X020605Y011590D02*
+X020179Y011600D01*
+X019754Y011631D01*
+X019331Y011681D01*
+X018911Y011752D01*
+X018495Y011842D01*
+X018084Y011953D01*
+X017678Y012082D01*
+X017279Y012231D01*
+X016887Y012399D01*
+X016504Y012585D01*
+X016130Y012789D01*
+X015766Y013011D01*
+X015414Y013250D01*
+X015072Y013505D01*
+X014744Y013776D01*
+X014429Y014063D01*
+X014128Y014364D01*
+X013841Y014679D01*
+X013570Y015008D01*
+X013315Y015349D01*
+X013076Y015701D01*
+X012854Y016065D01*
+X012650Y016439D01*
+X012464Y016822D01*
+X012296Y017214D01*
+X012147Y017613D01*
+X012018Y018019D01*
+X011907Y018430D01*
+X011817Y018846D01*
+X011746Y019266D01*
+X011696Y019689D01*
+X011665Y020114D01*
+X011655Y020540D01*
+X005415Y020605D02*
+X005432Y021325D01*
+X005483Y022043D01*
+X005569Y022757D01*
+X005688Y023467D01*
+X005841Y024171D01*
+X006028Y024866D01*
+X006247Y025552D01*
+X006498Y026226D01*
+X006782Y026888D01*
+X007096Y027536D01*
+X007441Y028167D01*
+X007816Y028782D01*
+X008220Y029378D01*
+X008651Y029955D01*
+X009109Y030510D01*
+X009594Y031042D01*
+X010103Y031551D01*
+X010635Y032036D01*
+X011190Y032494D01*
+X011767Y032925D01*
+X012363Y033329D01*
+X012978Y033704D01*
+X013609Y034049D01*
+X014257Y034363D01*
+X014919Y034647D01*
+X015593Y034898D01*
+X016279Y035117D01*
+X016974Y035304D01*
+X017678Y035457D01*
+X018388Y035576D01*
+X019102Y035662D01*
+X019820Y035713D01*
+X020540Y035730D01*
+X020605Y033130D02*
+X021198Y033116D01*
+X021789Y033074D01*
+X022378Y033003D01*
+X022963Y032905D01*
+X023542Y032779D01*
+X024115Y032625D01*
+X024680Y032445D01*
+X025236Y032237D01*
+X025781Y032004D01*
+X026314Y031745D01*
+X026835Y031461D01*
+X027341Y031152D01*
+X027833Y030820D01*
+X028307Y030464D01*
+X028765Y030087D01*
+X029203Y029688D01*
+X029623Y029268D01*
+X030022Y028830D01*
+X030399Y028372D01*
+X030755Y027897D01*
+X031087Y027406D01*
+X031396Y026900D01*
+X031680Y026379D01*
+X031939Y025846D01*
+X032173Y025301D01*
+X032380Y024745D01*
+X032560Y024180D01*
+X032714Y023607D01*
+X032840Y023028D01*
+X032938Y022443D01*
+X033009Y021854D01*
+X033051Y021263D01*
+X033065Y020670D01*
+X028125Y020605D02*
+X028117Y020250D01*
+X028091Y019896D01*
+X028049Y019544D01*
+X027990Y019194D01*
+X027915Y018847D01*
+X027823Y018505D01*
+X027715Y018167D01*
+X027591Y017834D01*
+X027451Y017508D01*
+X027296Y017189D01*
+X027126Y016878D01*
+X026942Y016575D01*
+X026743Y016281D01*
+X026530Y015997D01*
+X026304Y015723D01*
+X026065Y015460D01*
+X025815Y015210D01*
+X025552Y014971D01*
+X025278Y014745D01*
+X024994Y014532D01*
+X024700Y014333D01*
+X024397Y014149D01*
+X024086Y013979D01*
+X023767Y013824D01*
+X023441Y013684D01*
+X023108Y013560D01*
+X022770Y013452D01*
+X022427Y013360D01*
+X022081Y013285D01*
+X021731Y013226D01*
+X021379Y013184D01*
+X021025Y013158D01*
+X020670Y013150D01*
+X020605Y013150D02*
+X020254Y013158D01*
+X019903Y013183D01*
+X019553Y013225D01*
+X019207Y013284D01*
+X018863Y013358D01*
+X018523Y013449D01*
+X018188Y013556D01*
+X017858Y013679D01*
+X017535Y013818D01*
+X017219Y013971D01*
+X016910Y014140D01*
+X016610Y014323D01*
+X016318Y014520D01*
+X016037Y014731D01*
+X015766Y014955D01*
+X015505Y015192D01*
+X015257Y015440D01*
+X015020Y015701D01*
+X014796Y015972D01*
+X014585Y016253D01*
+X014388Y016545D01*
+X014205Y016845D01*
+X014036Y017154D01*
+X013883Y017470D01*
+X013744Y017794D01*
+X013621Y018123D01*
+X013514Y018458D01*
+X013423Y018798D01*
+X013349Y019142D01*
+X013290Y019488D01*
+X013248Y019838D01*
+X013223Y020189D01*
+X013215Y020540D01*
+X001515Y020605D02*
+X001537Y021510D01*
+X001601Y022413D01*
+X001709Y023312D01*
+X001859Y024205D01*
+X002051Y025090D01*
+X002286Y025965D01*
+X002561Y026827D01*
+X002878Y027676D01*
+X003234Y028508D01*
+X003630Y029323D01*
+X004064Y030118D01*
+X004535Y030891D01*
+X005043Y031641D01*
+X005585Y032365D01*
+X006162Y033064D01*
+X006771Y033734D01*
+X007411Y034374D01*
+X008081Y034983D01*
+X008780Y035560D01*
+X009504Y036102D01*
+X010254Y036610D01*
+X011028Y037081D01*
+X011822Y037515D01*
+X012637Y037911D01*
+X013469Y038267D01*
+X014318Y038584D01*
+X015180Y038859D01*
+X016055Y039094D01*
+X016940Y039286D01*
+X017833Y039436D01*
+X018732Y039544D01*
+X019635Y039608D01*
+X020540Y039630D01*
+X020605Y039630D02*
+X021507Y039609D01*
+X022407Y039544D01*
+X023303Y039437D01*
+X024193Y039287D01*
+X025075Y039096D01*
+X025947Y038862D01*
+X026806Y038587D01*
+X027652Y038272D01*
+X028481Y037917D01*
+X029293Y037522D01*
+X030085Y037090D01*
+X030856Y036620D01*
+X031603Y036114D01*
+X032325Y035574D01*
+X033021Y034999D01*
+X033689Y034392D01*
+X034327Y033754D01*
+X034934Y033086D01*
+X035509Y032390D01*
+X036049Y031668D01*
+X036555Y030920D01*
+X037025Y030150D01*
+X037457Y029358D01*
+X037852Y028546D01*
+X038207Y027717D01*
+X038522Y026871D01*
+X038797Y026012D01*
+X039031Y025140D01*
+X039222Y024258D01*
+X039372Y023368D01*
+X039479Y022472D01*
+X039544Y021572D01*
+X039565Y020670D01*
+X038525Y020605D02*
+X038505Y019755D01*
+X038444Y018908D01*
+X038343Y018064D01*
+X038202Y017226D01*
+X038022Y016396D01*
+X037802Y015575D01*
+X037543Y014765D01*
+X037246Y013969D01*
+X036911Y013188D01*
+X036540Y012423D01*
+X036133Y011677D01*
+X035691Y010952D01*
+X035214Y010248D01*
+X034705Y009568D01*
+X034164Y008912D01*
+X033592Y008284D01*
+X032991Y007683D01*
+X032363Y007111D01*
+X031707Y006570D01*
+X031027Y006061D01*
+X030323Y005584D01*
+X029597Y005142D01*
+X028852Y004735D01*
+X028087Y004363D01*
+X027306Y004029D01*
+X026510Y003732D01*
+X025700Y003473D01*
+X024879Y003253D01*
+X024049Y003073D01*
+X023211Y002932D01*
+X022367Y002831D01*
+X021519Y002770D01*
+X020670Y002750D01*
+X020605Y000670D02*
+X019660Y000693D01*
+X018716Y000760D01*
+X017777Y000872D01*
+X016845Y001029D01*
+X015921Y001230D01*
+X015007Y001475D01*
+X014106Y001763D01*
+X013220Y002093D01*
+X012351Y002466D01*
+X011500Y002879D01*
+X010670Y003332D01*
+X009862Y003824D01*
+X009079Y004354D01*
+X008322Y004921D01*
+X007593Y005523D01*
+X006893Y006159D01*
+X006224Y006828D01*
+X005588Y007528D01*
+X004986Y008257D01*
+X004419Y009014D01*
+X003889Y009798D01*
+X003397Y010605D01*
+X002944Y011435D01*
+X002531Y012286D01*
+X002158Y013155D01*
+X001828Y014041D01*
+X001540Y014942D01*
+X001295Y015856D01*
+X001094Y016780D01*
+X000937Y017712D01*
+X000825Y018651D01*
+X000757Y019595D01*
+X000735Y020540D01*
+X010615Y020605D02*
+X010626Y021077D01*
+X010660Y021548D01*
+X010716Y022017D01*
+X010794Y022483D01*
+X010895Y022945D01*
+X011017Y023401D01*
+X011161Y023851D01*
+X011326Y024294D01*
+X011512Y024728D01*
+X011718Y025153D01*
+X011945Y025567D01*
+X012191Y025971D01*
+X012455Y026362D01*
+X012738Y026740D01*
+X013039Y027104D01*
+X013357Y027454D01*
+X013691Y027788D01*
+X014041Y028106D01*
+X014405Y028407D01*
+X014783Y028690D01*
+X015174Y028954D01*
+X015578Y029200D01*
+X015992Y029427D01*
+X016417Y029633D01*
+X016851Y029819D01*
+X017294Y029984D01*
+X017744Y030128D01*
+X018200Y030250D01*
+X018662Y030351D01*
+X019128Y030429D01*
+X019597Y030485D01*
+X020068Y030519D01*
+X020540Y030530D01*
+X020605Y031830D02*
+X021136Y031817D01*
+X021666Y031779D01*
+X022193Y031716D01*
+X022717Y031628D01*
+X023236Y031515D01*
+X023749Y031378D01*
+X024255Y031216D01*
+X024753Y031031D01*
+X025241Y030822D01*
+X025719Y030589D01*
+X026185Y030335D01*
+X026639Y030058D01*
+X027078Y029761D01*
+X027504Y029442D01*
+X027913Y029104D01*
+X028306Y028747D01*
+X028682Y028371D01*
+X029039Y027978D01*
+X029377Y027569D01*
+X029696Y027143D01*
+X029993Y026704D01*
+X030270Y026250D01*
+X030524Y025784D01*
+X030757Y025306D01*
+X030966Y024818D01*
+X031151Y024320D01*
+X031313Y023814D01*
+X031450Y023301D01*
+X031563Y022782D01*
+X031651Y022258D01*
+X031714Y021731D01*
+X031752Y021201D01*
+X031765Y020670D01*
+X037225Y020605D02*
+X037206Y019817D01*
+X037150Y019031D01*
+X037056Y018249D01*
+X036926Y017472D01*
+X036758Y016702D01*
+X036554Y015941D01*
+X036314Y015190D01*
+X036039Y014452D01*
+X035729Y013728D01*
+X035385Y013019D01*
+X035007Y012327D01*
+X034597Y011655D01*
+X034155Y011002D01*
+X033683Y010371D01*
+X033181Y009764D01*
+X032651Y009181D01*
+X032094Y008624D01*
+X031511Y008094D01*
+X030904Y007592D01*
+X030273Y007120D01*
+X029620Y006678D01*
+X028947Y006268D01*
+X028256Y005890D01*
+X027547Y005546D01*
+X026823Y005236D01*
+X026085Y004960D01*
+X025334Y004721D01*
+X024573Y004517D01*
+X023803Y004349D01*
+X023026Y004218D01*
+X022244Y004125D01*
+X021458Y004069D01*
+X020670Y004050D01*
+X020605Y002230D02*
+X019734Y002251D01*
+X018865Y002313D01*
+X017999Y002416D01*
+X017140Y002561D01*
+X016288Y002746D01*
+X015447Y002972D01*
+X014616Y003237D01*
+X013800Y003542D01*
+X012999Y003885D01*
+X012215Y004265D01*
+X011450Y004683D01*
+X010706Y005137D01*
+X009984Y005625D01*
+X009287Y006147D01*
+X008615Y006702D01*
+X007970Y007288D01*
+X007353Y007905D01*
+X006767Y008550D01*
+X006212Y009222D01*
+X005690Y009919D01*
+X005202Y010641D01*
+X004748Y011385D01*
+X004330Y012150D01*
+X003950Y012934D01*
+X003607Y013735D01*
+X003302Y014551D01*
+X003037Y015382D01*
+X002811Y016223D01*
+X002626Y017075D01*
+X002481Y017934D01*
+X002378Y018800D01*
+X002316Y019669D01*
+X002295Y020540D01*
+X006715Y020605D02*
+X006731Y021263D01*
+X006778Y021919D01*
+X006856Y022572D01*
+X006965Y023221D01*
+X007105Y023864D01*
+X007275Y024500D01*
+X007475Y025127D01*
+X007705Y025743D01*
+X007964Y026348D01*
+X008252Y026940D01*
+X008567Y027517D01*
+X008910Y028079D01*
+X009278Y028624D01*
+X009673Y029151D01*
+X010092Y029658D01*
+X010534Y030145D01*
+X011000Y030611D01*
+X011487Y031053D01*
+X011994Y031472D01*
+X012521Y031867D01*
+X013066Y032235D01*
+X013628Y032578D01*
+X014205Y032893D01*
+X014797Y033181D01*
+X015402Y033440D01*
+X016018Y033670D01*
+X016645Y033870D01*
+X017281Y034040D01*
+X017924Y034180D01*
+X018573Y034289D01*
+X019226Y034367D01*
+X019882Y034414D01*
+X020540Y034430D01*
+X020605Y029230D02*
+X021012Y029220D01*
+X021419Y029191D01*
+X021823Y029143D01*
+X022225Y029075D01*
+X022623Y028989D01*
+X023017Y028883D01*
+X023405Y028759D01*
+X023786Y028617D01*
+X024161Y028456D01*
+X024527Y028278D01*
+X024885Y028083D01*
+X025233Y027871D01*
+X025570Y027643D01*
+X025896Y027399D01*
+X026211Y027139D01*
+X026512Y026865D01*
+X026800Y026577D01*
+X027074Y026276D01*
+X027334Y025961D01*
+X027578Y025635D01*
+X027806Y025298D01*
+X028018Y024950D01*
+X028213Y024592D01*
+X028391Y024226D01*
+X028552Y023851D01*
+X028694Y023470D01*
+X028818Y023082D01*
+X028924Y022688D01*
+X029010Y022290D01*
+X029078Y021888D01*
+X029126Y021484D01*
+X029155Y021077D01*
+X029165Y020670D01*
+X035145Y020605D02*
+X035129Y019916D01*
+X035079Y019229D01*
+X034998Y018545D01*
+X034883Y017866D01*
+X034737Y017192D01*
+X034559Y016527D01*
+X034349Y015871D01*
+X034108Y015225D01*
+X033837Y014592D01*
+X033536Y013972D01*
+X033206Y013368D01*
+X032847Y012779D01*
+X032461Y012209D01*
+X032048Y011657D01*
+X031609Y011126D01*
+X031146Y010616D01*
+X030659Y010129D01*
+X030149Y009666D01*
+X029618Y009227D01*
+X029066Y008814D01*
+X028496Y008428D01*
+X027907Y008069D01*
+X027303Y007739D01*
+X026683Y007438D01*
+X026050Y007167D01*
+X025404Y006926D01*
+X024748Y006716D01*
+X024083Y006538D01*
+X023409Y006392D01*
+X022730Y006277D01*
+X022046Y006196D01*
+X021359Y006146D01*
+X020670Y006130D01*
+X020605Y004830D02*
+X019858Y004848D01*
+X019112Y004901D01*
+X018369Y004990D01*
+X017632Y005114D01*
+X016901Y005273D01*
+X016179Y005466D01*
+X015467Y005694D01*
+X014766Y005955D01*
+X014079Y006250D01*
+X013406Y006576D01*
+X012750Y006935D01*
+X012112Y007324D01*
+X011492Y007743D01*
+X010894Y008191D01*
+X010317Y008667D01*
+X009764Y009170D01*
+X009235Y009699D01*
+X008732Y010252D01*
+X008256Y010829D01*
+X007808Y011427D01*
+X007389Y012047D01*
+X007000Y012685D01*
+X006641Y013341D01*
+X006315Y014014D01*
+X006020Y014701D01*
+X005759Y015402D01*
+X005531Y016114D01*
+X005338Y016836D01*
+X005179Y017567D01*
+X005055Y018304D01*
+X004966Y019047D01*
+X004913Y019793D01*
+X004895Y020540D01*
+X006975Y020605D02*
+X006990Y021250D01*
+X007036Y021894D01*
+X007113Y022535D01*
+X007220Y023172D01*
+X007357Y023803D01*
+X007524Y024427D01*
+X007721Y025042D01*
+X007947Y025647D01*
+X008201Y026240D01*
+X008483Y026821D01*
+X008792Y027387D01*
+X009128Y027939D01*
+X009490Y028473D01*
+X009877Y028990D01*
+X010288Y029488D01*
+X010723Y029966D01*
+X011179Y030422D01*
+X011657Y030857D01*
+X012155Y031268D01*
+X012672Y031655D01*
+X013206Y032017D01*
+X013758Y032353D01*
+X014324Y032662D01*
+X014905Y032944D01*
+X015498Y033198D01*
+X016103Y033424D01*
+X016718Y033621D01*
+X017342Y033788D01*
+X017973Y033925D01*
+X018610Y034032D01*
+X019251Y034109D01*
+X019895Y034155D01*
+X020540Y034170D01*
+X020605Y028190D02*
+X020963Y028181D01*
+X021320Y028156D01*
+X021675Y028113D01*
+X022028Y028054D01*
+X022378Y027978D01*
+X022724Y027885D01*
+X023064Y027776D01*
+X023400Y027651D01*
+X023729Y027510D01*
+X024051Y027354D01*
+X024365Y027183D01*
+X024671Y026996D01*
+X024967Y026796D01*
+X025254Y026581D01*
+X025530Y026353D01*
+X025794Y026112D01*
+X026047Y025859D01*
+X026288Y025595D01*
+X026516Y025319D01*
+X026731Y025032D01*
+X026931Y024736D01*
+X027118Y024430D01*
+X027289Y024116D01*
+X027445Y023794D01*
+X027586Y023465D01*
+X027711Y023129D01*
+X027820Y022789D01*
+X027913Y022443D01*
+X027989Y022093D01*
+X028048Y021740D01*
+X028091Y021385D01*
+X028116Y021028D01*
+X028125Y020670D01*
+X033065Y020605D02*
+X033051Y020015D01*
+X033009Y019427D01*
+X032939Y018841D01*
+X032841Y018259D01*
+X032716Y017683D01*
+X032563Y017113D01*
+X032383Y016551D01*
+X032177Y015998D01*
+X031945Y015456D01*
+X031687Y014925D01*
+X031404Y014408D01*
+X031097Y013904D01*
+X030767Y013415D01*
+X030413Y012943D01*
+X030038Y012488D01*
+X029641Y012051D01*
+X029224Y011634D01*
+X028787Y011237D01*
+X028332Y010862D01*
+X027860Y010508D01*
+X027371Y010178D01*
+X026867Y009871D01*
+X026350Y009588D01*
+X025819Y009330D01*
+X025277Y009098D01*
+X024724Y008892D01*
+X024162Y008712D01*
+X023592Y008559D01*
+X023016Y008434D01*
+X022434Y008336D01*
+X021848Y008266D01*
+X021260Y008224D01*
+X020670Y008210D01*
+X020605Y003270D02*
+X019783Y003290D01*
+X018963Y003348D01*
+X018147Y003446D01*
+X017337Y003582D01*
+X016533Y003757D01*
+X015740Y003970D01*
+X014957Y004220D01*
+X014186Y004507D01*
+X013431Y004831D01*
+X012691Y005190D01*
+X011970Y005584D01*
+X011268Y006012D01*
+X010587Y006472D01*
+X009929Y006965D01*
+X009296Y007488D01*
+X008687Y008041D01*
+X008106Y008622D01*
+X007553Y009231D01*
+X007030Y009864D01*
+X006537Y010522D01*
+X006077Y011203D01*
+X005649Y011905D01*
+X005255Y012626D01*
+X004896Y013366D01*
+X004572Y014121D01*
+X004285Y014892D01*
+X004035Y015675D01*
+X003822Y016469D01*
+X003647Y017272D01*
+X003511Y018082D01*
+X003413Y018898D01*
+X003355Y019718D01*
+X003335Y020540D01*
+X008275Y020605D02*
+X008289Y021188D01*
+X008331Y021771D01*
+X008400Y022350D01*
+X008497Y022926D01*
+X008621Y023496D01*
+X008772Y024060D01*
+X008950Y024616D01*
+X009154Y025163D01*
+X009383Y025700D01*
+X009638Y026225D01*
+X009918Y026737D01*
+X010222Y027236D01*
+X010549Y027719D01*
+X010899Y028187D01*
+X011271Y028637D01*
+X011663Y029069D01*
+X012076Y029482D01*
+X012508Y029874D01*
+X012958Y030246D01*
+X013426Y030596D01*
+X013909Y030923D01*
+X014408Y031227D01*
+X014920Y031507D01*
+X015445Y031762D01*
+X015982Y031991D01*
+X016529Y032195D01*
+X017085Y032373D01*
+X017649Y032524D01*
+X018219Y032648D01*
+X018795Y032745D01*
+X019374Y032814D01*
+X019957Y032856D01*
+X020540Y032870D01*
+X020605Y035730D02*
+X021321Y035713D01*
+X022036Y035662D01*
+X022748Y035577D01*
+X023455Y035458D01*
+X024155Y035306D01*
+X024848Y035120D01*
+X025531Y034902D01*
+X026202Y034651D01*
+X026861Y034369D01*
+X027506Y034056D01*
+X028135Y033712D01*
+X028747Y033339D01*
+X029341Y032938D01*
+X029914Y032508D01*
+X030467Y032052D01*
+X030998Y031569D01*
+X031504Y031063D01*
+X031987Y030532D01*
+X032443Y029979D01*
+X032873Y029406D01*
+X033274Y028812D01*
+X033647Y028200D01*
+X033991Y027571D01*
+X034304Y026926D01*
+X034586Y026267D01*
+X034837Y025596D01*
+X035055Y024913D01*
+X035241Y024220D01*
+X035393Y023520D01*
+X035512Y022813D01*
+X035597Y022101D01*
+X035648Y021386D01*
+X035665Y020670D01*
+X032805Y020605D02*
+X032791Y020028D01*
+X032750Y019452D01*
+X032681Y018878D01*
+X032586Y018308D01*
+X032463Y017744D01*
+X032313Y017186D01*
+X032138Y016636D01*
+X031936Y016095D01*
+X031708Y015564D01*
+X031456Y015044D01*
+X031179Y014538D01*
+X030879Y014044D01*
+X030555Y013566D01*
+X030209Y013104D01*
+X029841Y012658D01*
+X029453Y012231D01*
+X029044Y011822D01*
+X028617Y011434D01*
+X028171Y011066D01*
+X027709Y010720D01*
+X027231Y010396D01*
+X026737Y010096D01*
+X026231Y009819D01*
+X025711Y009567D01*
+X025180Y009339D01*
+X024639Y009137D01*
+X024089Y008962D01*
+X023531Y008812D01*
+X022967Y008689D01*
+X022397Y008594D01*
+X021823Y008525D01*
+X021247Y008484D01*
+X020670Y008470D01*
+X020605Y006650D02*
+X019944Y006666D01*
+X019285Y006713D01*
+X018628Y006791D01*
+X017976Y006901D01*
+X017330Y007042D01*
+X016692Y007213D01*
+X016062Y007414D01*
+X015443Y007645D01*
+X014835Y007905D01*
+X014240Y008194D01*
+X013660Y008511D01*
+X013096Y008855D01*
+X012548Y009226D01*
+X012019Y009622D01*
+X011509Y010043D01*
+X011020Y010487D01*
+X010552Y010955D01*
+X010108Y011444D01*
+X009687Y011954D01*
+X009291Y012483D01*
+X008920Y013031D01*
+X008576Y013595D01*
+X008259Y014175D01*
+X007970Y014770D01*
+X007710Y015378D01*
+X007479Y015997D01*
+X007278Y016627D01*
+X007107Y017265D01*
+X006966Y017911D01*
+X006856Y018563D01*
+X006778Y019220D01*
+X006731Y019879D01*
+X006715Y020540D01*
+X012175Y020605D02*
+X012184Y021003D01*
+X012213Y021400D01*
+X012260Y021795D01*
+X012326Y022188D01*
+X012411Y022577D01*
+X012514Y022962D01*
+X012635Y023341D01*
+X012774Y023714D01*
+X012931Y024080D01*
+X013105Y024438D01*
+X013296Y024787D01*
+X013503Y025127D01*
+X013726Y025457D01*
+X013965Y025776D01*
+X014218Y026083D01*
+X014486Y026378D01*
+X014767Y026659D01*
+X015062Y026927D01*
+X015369Y027180D01*
+X015688Y027419D01*
+X016018Y027642D01*
+X016358Y027849D01*
+X016707Y028040D01*
+X017065Y028214D01*
+X017431Y028371D01*
+X017804Y028510D01*
+X018183Y028631D01*
+X018568Y028734D01*
+X018957Y028819D01*
+X019350Y028885D01*
+X019745Y028932D01*
+X020142Y028961D01*
+X020540Y028970D01*
+X020605Y031050D02*
+X021099Y031038D01*
+X021592Y031003D01*
+X022082Y030944D01*
+X022569Y030862D01*
+X023052Y030757D01*
+X023529Y030630D01*
+X024000Y030479D01*
+X024463Y030306D01*
+X024917Y030112D01*
+X025361Y029896D01*
+X025795Y029659D01*
+X026217Y029402D01*
+X026626Y029125D01*
+X027021Y028829D01*
+X027402Y028515D01*
+X027768Y028182D01*
+X028117Y027833D01*
+X028450Y027467D01*
+X028764Y027086D01*
+X029060Y026691D01*
+X029337Y026282D01*
+X029594Y025860D01*
+X029831Y025426D01*
+X030047Y024982D01*
+X030241Y024528D01*
+X030414Y024065D01*
+X030565Y023594D01*
+X030692Y023117D01*
+X030797Y022634D01*
+X030879Y022147D01*
+X030938Y021657D01*
+X030973Y021164D01*
+X030985Y020670D01*
+X040345Y020605D02*
+X040323Y019669D01*
+X040256Y018735D01*
+X040145Y017805D01*
+X039989Y016882D01*
+X039790Y015966D01*
+X039548Y015062D01*
+X039263Y014170D01*
+X038936Y013293D01*
+X038567Y012432D01*
+X038158Y011589D01*
+X037709Y010768D01*
+X037222Y009968D01*
+X036697Y009192D01*
+X036136Y008443D01*
+X035539Y007721D01*
+X034909Y007028D01*
+X034247Y006366D01*
+X033554Y005736D01*
+X032832Y005139D01*
+X032083Y004578D01*
+X031307Y004053D01*
+X030507Y003566D01*
+X029686Y003117D01*
+X028843Y002708D01*
+X027982Y002339D01*
+X027105Y002012D01*
+X026213Y001727D01*
+X025308Y001485D01*
+X024393Y001286D01*
+X023470Y001130D01*
+X022540Y001019D01*
+X021606Y000952D01*
+X020670Y000930D01*
+X020605Y007690D02*
+X019994Y007705D01*
+X019384Y007748D01*
+X018776Y007821D01*
+X018173Y007922D01*
+X017576Y008052D01*
+X016985Y008210D01*
+X016402Y008397D01*
+X015829Y008610D01*
+X015267Y008851D01*
+X014717Y009118D01*
+X014180Y009412D01*
+X013658Y009730D01*
+X013151Y010073D01*
+X012662Y010439D01*
+X012190Y010829D01*
+X011737Y011240D01*
+X011305Y011672D01*
+X010894Y012125D01*
+X010504Y012597D01*
+X010138Y013086D01*
+X009795Y013593D01*
+X009477Y014115D01*
+X009183Y014652D01*
+X008916Y015202D01*
+X008675Y015764D01*
+X008462Y016337D01*
+X008275Y016920D01*
+X008117Y017511D01*
+X007987Y018108D01*
+X007886Y018711D01*
+X007813Y019319D01*
+X007770Y019929D01*
+X007755Y020540D01*
+X001255Y020605D02*
+X001277Y021523D01*
+X001342Y022438D01*
+X001451Y023349D01*
+X001603Y024255D01*
+X001799Y025152D01*
+X002036Y026038D01*
+X002316Y026912D01*
+X002636Y027772D01*
+X002998Y028616D01*
+X003399Y029442D01*
+X003839Y030247D01*
+X004316Y031031D01*
+X004831Y031791D01*
+X005381Y032526D01*
+X005965Y033234D01*
+X006583Y033913D01*
+X007232Y034562D01*
+X007911Y035180D01*
+X008619Y035764D01*
+X009354Y036314D01*
+X010114Y036829D01*
+X010898Y037306D01*
+X011703Y037746D01*
+X012529Y038147D01*
+X013373Y038509D01*
+X014233Y038829D01*
+X015107Y039109D01*
+X015994Y039346D01*
+X016890Y039542D01*
+X017796Y039694D01*
+X018707Y039803D01*
+X019623Y039868D01*
+X020540Y039890D01*
+X020605Y027930D02*
+X020950Y027922D01*
+X021295Y027897D01*
+X021638Y027856D01*
+X021979Y027799D01*
+X022317Y027725D01*
+X022650Y027636D01*
+X022979Y027531D01*
+X023303Y027410D01*
+X023621Y027274D01*
+X023932Y027123D01*
+X024235Y026957D01*
+X024530Y026778D01*
+X024816Y026584D01*
+X025093Y026377D01*
+X025359Y026157D01*
+X025615Y025924D01*
+X025859Y025680D01*
+X026092Y025424D01*
+X026312Y025158D01*
+X026519Y024881D01*
+X026713Y024595D01*
+X026892Y024300D01*
+X027058Y023997D01*
+X027209Y023686D01*
+X027345Y023368D01*
+X027466Y023044D01*
+X027571Y022715D01*
+X027660Y022381D01*
+X027734Y022044D01*
+X027791Y021703D01*
+X027832Y021360D01*
+X027857Y021015D01*
+X027865Y020670D01*
+X038265Y020605D02*
+X038245Y019768D01*
+X038185Y018933D01*
+X038086Y018101D01*
+X037947Y017275D01*
+X037769Y016457D01*
+X037552Y015648D01*
+X037297Y014850D01*
+X037005Y014066D01*
+X036675Y013296D01*
+X036309Y012543D01*
+X035908Y011808D01*
+X035472Y011092D01*
+X035002Y010399D01*
+X034501Y009728D01*
+X033967Y009083D01*
+X033404Y008463D01*
+X032812Y007871D01*
+X032192Y007308D01*
+X031546Y006774D01*
+X030876Y006273D01*
+X030183Y005803D01*
+X029467Y005367D01*
+X028732Y004966D01*
+X027979Y004600D01*
+X027209Y004270D01*
+X026425Y003978D01*
+X025627Y003723D01*
+X024818Y003506D01*
+X024000Y003328D01*
+X023174Y003189D01*
+X022342Y003090D01*
+X021507Y003030D01*
+X020670Y003010D01*
+X020605Y008470D02*
+X020031Y008484D01*
+X019458Y008525D01*
+X018887Y008593D01*
+X018321Y008688D01*
+X017759Y008810D01*
+X017205Y008959D01*
+X016657Y009134D01*
+X016119Y009335D01*
+X015591Y009561D01*
+X015074Y009812D01*
+X014570Y010087D01*
+X014079Y010386D01*
+X013604Y010708D01*
+X013144Y011052D01*
+X012701Y011418D01*
+X012276Y011805D01*
+X011870Y012211D01*
+X011483Y012636D01*
+X011117Y013079D01*
+X010773Y013539D01*
+X010451Y014015D01*
+X010152Y014505D01*
+X009877Y015009D01*
+X009626Y015526D01*
+X009400Y016054D01*
+X009199Y016592D01*
+X009024Y017140D01*
+X008875Y017695D01*
+X008753Y018256D01*
+X008658Y018822D01*
+X008590Y019393D01*
+X008549Y019966D01*
+X008535Y020540D01*
+X003855Y020605D02*
+X003874Y021399D01*
+X003931Y022191D01*
+X004025Y022979D01*
+X004157Y023763D01*
+X004325Y024539D01*
+X004531Y025306D01*
+X004773Y026062D01*
+X005050Y026806D01*
+X005363Y027536D01*
+X005710Y028250D01*
+X006090Y028947D01*
+X006504Y029626D01*
+X006949Y030283D01*
+X007425Y030919D01*
+X007930Y031531D01*
+X008465Y032119D01*
+X009026Y032681D01*
+X009614Y033215D01*
+X010226Y033720D01*
+X010862Y034196D01*
+X011519Y034641D01*
+X012198Y035055D01*
+X012895Y035435D01*
+X013609Y035782D01*
+X014339Y036095D01*
+X015083Y036372D01*
+X015839Y036614D01*
+X016606Y036820D01*
+X017382Y036988D01*
+X018166Y037120D01*
+X018954Y037214D01*
+X019746Y037271D01*
+X020540Y037290D01*
+X020605Y038070D02*
+X021433Y038050D01*
+X022259Y037991D01*
+X023081Y037893D01*
+X023898Y037756D01*
+X024707Y037580D01*
+X025507Y037365D01*
+X026296Y037113D01*
+X027072Y036824D01*
+X027833Y036498D01*
+X028578Y036136D01*
+X029305Y035739D01*
+X030012Y035308D01*
+X030698Y034844D01*
+X031361Y034347D01*
+X032000Y033820D01*
+X032612Y033263D01*
+X033198Y032677D01*
+X033755Y032065D01*
+X034282Y031426D01*
+X034779Y030763D01*
+X035243Y030077D01*
+X035674Y029370D01*
+X036071Y028643D01*
+X036433Y027898D01*
+X036759Y027137D01*
+X037048Y026361D01*
+X037300Y025572D01*
+X037515Y024772D01*
+X037691Y023963D01*
+X037828Y023146D01*
+X037926Y022324D01*
+X037985Y021498D01*
+X038005Y020670D01*
+X033585Y020605D02*
+X033570Y019991D01*
+X033527Y019377D01*
+X033454Y018767D01*
+X033352Y018161D01*
+X033221Y017560D01*
+X033062Y016966D01*
+X032875Y016381D01*
+X032660Y015805D01*
+X032418Y015240D01*
+X032149Y014687D01*
+X031855Y014148D01*
+X031535Y013623D01*
+X031190Y013114D01*
+X030822Y012621D01*
+X030430Y012147D01*
+X030017Y011693D01*
+X029582Y011258D01*
+X029128Y010844D01*
+X028654Y010453D01*
+X028161Y010085D01*
+X027652Y009740D01*
+X027127Y009420D01*
+X026588Y009126D01*
+X026035Y008857D01*
+X025470Y008615D01*
+X024894Y008400D01*
+X024309Y008213D01*
+X023715Y008054D01*
+X023114Y007923D01*
+X022508Y007821D01*
+X021898Y007748D01*
+X021284Y007705D01*
+X020670Y007690D01*
+X020605Y008730D02*
+X020043Y008743D01*
+X019482Y008783D01*
+X018924Y008850D01*
+X018370Y008943D01*
+X017821Y009063D01*
+X017278Y009208D01*
+X016742Y009380D01*
+X016216Y009576D01*
+X015699Y009797D01*
+X015193Y010043D01*
+X014700Y010312D01*
+X014220Y010605D01*
+X013755Y010920D01*
+X013305Y011257D01*
+X012871Y011615D01*
+X012455Y011993D01*
+X012058Y012390D01*
+X011680Y012806D01*
+X011322Y013240D01*
+X010985Y013690D01*
+X010670Y014155D01*
+X010377Y014635D01*
+X010108Y015128D01*
+X009862Y015634D01*
+X009641Y016151D01*
+X009445Y016677D01*
+X009273Y017213D01*
+X009128Y017756D01*
+X009008Y018305D01*
+X008915Y018859D01*
+X008848Y019418D01*
+X008808Y019978D01*
+X008795Y020540D01*
+X004635Y020605D02*
+X004653Y021362D01*
+X004707Y022117D01*
+X004797Y022868D01*
+X004922Y023615D01*
+X005083Y024355D01*
+X005279Y025086D01*
+X005510Y025807D01*
+X005774Y026516D01*
+X006072Y027212D01*
+X006403Y027893D01*
+X006766Y028557D01*
+X007160Y029204D01*
+X007584Y029831D01*
+X008038Y030437D01*
+X008520Y031021D01*
+X009029Y031581D01*
+X009564Y032116D01*
+X010124Y032625D01*
+X010708Y033107D01*
+X011314Y033561D01*
+X011941Y033985D01*
+X012588Y034379D01*
+X013252Y034742D01*
+X013933Y035073D01*
+X014629Y035371D01*
+X015338Y035635D01*
+X016059Y035866D01*
+X016790Y036062D01*
+X017530Y036223D01*
+X018277Y036348D01*
+X019028Y036438D01*
+X019783Y036492D01*
+X020540Y036510D01*
+X020605Y037030D02*
+X021383Y037011D01*
+X022160Y036956D01*
+X022933Y036863D01*
+X023701Y036734D01*
+X024462Y036569D01*
+X025214Y036367D01*
+X025956Y036130D01*
+X026685Y035858D01*
+X027401Y035552D01*
+X028102Y035211D01*
+X028785Y034838D01*
+X029450Y034433D01*
+X030095Y033996D01*
+X030718Y033530D01*
+X031319Y033034D01*
+X031895Y032510D01*
+X032445Y031960D01*
+X032969Y031383D01*
+X033465Y030783D01*
+X033931Y030160D01*
+X034368Y029515D01*
+X034773Y028850D01*
+X035146Y028167D01*
+X035487Y027466D01*
+X035793Y026750D01*
+X036065Y026021D01*
+X036302Y025279D01*
+X036504Y024527D01*
+X036669Y023766D01*
+X036798Y022998D01*
+X036891Y022225D01*
+X036946Y021448D01*
+X036965Y020670D01*
+X032545Y020605D02*
+X032532Y020040D01*
+X032491Y019476D01*
+X032424Y018915D01*
+X032330Y018358D01*
+X032210Y017805D01*
+X032064Y017259D01*
+X031892Y016721D01*
+X031694Y016192D01*
+X031472Y015672D01*
+X031225Y015164D01*
+X030954Y014668D01*
+X030660Y014185D01*
+X030343Y013717D01*
+X030004Y013264D01*
+X029645Y012829D01*
+X029264Y012410D01*
+X028865Y012011D01*
+X028446Y011630D01*
+X028011Y011271D01*
+X027558Y010932D01*
+X027090Y010615D01*
+X026607Y010321D01*
+X026111Y010050D01*
+X025603Y009803D01*
+X025083Y009581D01*
+X024554Y009383D01*
+X024016Y009211D01*
+X023470Y009065D01*
+X022917Y008945D01*
+X022360Y008851D01*
+X021799Y008784D01*
+X021235Y008743D01*
+X020670Y008730D01*
+X020605Y010290D02*
+X020117Y010302D01*
+X019631Y010336D01*
+X019146Y010394D01*
+X018665Y010475D01*
+X018189Y010579D01*
+X017717Y010705D01*
+X017253Y010854D01*
+X016795Y011024D01*
+X016347Y011216D01*
+X015908Y011429D01*
+X015480Y011663D01*
+X015063Y011917D01*
+X014659Y012191D01*
+X014269Y012483D01*
+X013893Y012794D01*
+X013532Y013122D01*
+X013187Y013467D01*
+X012859Y013828D01*
+X012548Y014204D01*
+X012256Y014594D01*
+X011982Y014998D01*
+X011728Y015415D01*
+X011494Y015843D01*
+X011281Y016282D01*
+X011089Y016731D01*
+X010919Y017188D01*
+X010770Y017652D01*
+X010644Y018124D01*
+X010540Y018600D01*
+X010459Y019081D01*
+X010401Y019566D01*
+X010367Y020052D01*
+X010355Y020540D01*
+X010355Y020605D02*
+X010367Y021090D01*
+X010401Y021573D01*
+X010459Y022054D01*
+X010539Y022533D01*
+X010642Y023006D01*
+X010768Y023474D01*
+X010915Y023936D01*
+X011085Y024390D01*
+X011275Y024836D01*
+X011487Y025272D01*
+X011720Y025698D01*
+X011972Y026111D01*
+X012244Y026513D01*
+X012534Y026901D01*
+X012843Y027275D01*
+X013169Y027633D01*
+X013512Y027976D01*
+X013870Y028302D01*
+X014244Y028611D01*
+X014632Y028901D01*
+X015034Y029173D01*
+X015448Y029426D01*
+X015873Y029658D01*
+X016309Y029870D01*
+X016755Y030060D01*
+X017209Y030230D01*
+X017671Y030377D01*
+X018139Y030503D01*
+X018613Y030606D01*
+X019091Y030686D01*
+X019572Y030744D01*
+X020055Y030778D01*
+X020540Y030790D01*
+X020605Y034950D02*
+X021284Y034934D01*
+X021962Y034885D01*
+X022637Y034805D01*
+X023307Y034692D01*
+X023972Y034547D01*
+X024628Y034372D01*
+X025275Y034165D01*
+X025912Y033927D01*
+X026537Y033660D01*
+X027148Y033363D01*
+X027745Y033037D01*
+X028325Y032683D01*
+X028888Y032302D01*
+X029432Y031895D01*
+X029956Y031462D01*
+X030459Y031005D01*
+X030940Y030524D01*
+X031397Y030021D01*
+X031830Y029497D01*
+X032237Y028953D01*
+X032618Y028390D01*
+X032972Y027810D01*
+X033298Y027213D01*
+X033595Y026602D01*
+X033862Y025977D01*
+X034100Y025340D01*
+X034307Y024693D01*
+X034482Y024037D01*
+X034627Y023372D01*
+X034740Y022702D01*
+X034820Y022027D01*
+X034869Y021349D01*
+X034885Y020670D01*
+X030465Y020605D02*
+X030454Y020139D01*
+X030421Y019674D01*
+X030365Y019211D01*
+X030288Y018751D01*
+X030189Y018296D01*
+X030068Y017845D01*
+X029926Y017401D01*
+X029763Y016965D01*
+X029580Y016536D01*
+X029376Y016117D01*
+X029153Y015708D01*
+X028910Y015309D01*
+X028649Y014923D01*
+X028369Y014550D01*
+X028073Y014191D01*
+X027759Y013846D01*
+X027429Y013516D01*
+X027084Y013202D01*
+X026725Y012906D01*
+X026352Y012626D01*
+X025966Y012365D01*
+X025567Y012122D01*
+X025158Y011899D01*
+X024739Y011695D01*
+X024310Y011512D01*
+X023874Y011349D01*
+X023430Y011207D01*
+X022979Y011086D01*
+X022524Y010987D01*
+X022064Y010910D01*
+X021601Y010854D01*
+X021136Y010821D01*
+X020670Y010810D01*
+X020605Y012630D02*
+X020229Y012639D01*
+X019853Y012666D01*
+X019479Y012711D01*
+X019108Y012773D01*
+X018740Y012853D01*
+X018377Y012950D01*
+X018018Y013065D01*
+X017665Y013197D01*
+X017319Y013345D01*
+X016980Y013509D01*
+X016650Y013690D01*
+X016329Y013886D01*
+X016017Y014097D01*
+X015715Y014322D01*
+X015425Y014562D01*
+X015146Y014815D01*
+X014880Y015082D01*
+X014627Y015360D01*
+X014387Y015650D01*
+X014162Y015952D01*
+X013951Y016264D01*
+X013755Y016585D01*
+X013574Y016916D01*
+X013410Y017254D01*
+X013262Y017600D01*
+X013130Y017953D01*
+X013015Y018312D01*
+X012918Y018675D01*
+X012838Y019043D01*
+X012775Y019414D01*
+X012731Y019788D01*
+X012704Y020164D01*
+X012695Y020540D01*
+X006195Y020605D02*
+X006211Y021287D01*
+X006260Y021968D01*
+X006341Y022646D01*
+X006454Y023320D01*
+X006599Y023987D01*
+X006776Y024646D01*
+X006984Y025297D01*
+X007223Y025936D01*
+X007491Y026564D01*
+X007790Y027178D01*
+X008117Y027777D01*
+X008472Y028360D01*
+X008855Y028926D01*
+X009264Y029472D01*
+X009699Y029999D01*
+X010158Y030504D01*
+X010641Y030987D01*
+X011146Y031446D01*
+X011673Y031881D01*
+X012219Y032290D01*
+X012785Y032673D01*
+X013368Y033028D01*
+X013967Y033355D01*
+X014581Y033654D01*
+X015209Y033922D01*
+X015848Y034161D01*
+X016499Y034369D01*
+X017158Y034546D01*
+X017825Y034691D01*
+X018499Y034804D01*
+X019177Y034885D01*
+X019858Y034934D01*
+X020540Y034950D01*
+X020605Y031570D02*
+X021124Y031558D01*
+X021641Y031521D01*
+X022156Y031459D01*
+X022668Y031373D01*
+X023175Y031263D01*
+X023676Y031128D01*
+X024170Y030971D01*
+X024656Y030789D01*
+X025133Y030585D01*
+X025600Y030358D01*
+X026055Y030110D01*
+X026498Y029840D01*
+X026928Y029549D01*
+X027343Y029238D01*
+X027743Y028908D01*
+X028127Y028559D01*
+X028494Y028192D01*
+X028843Y027808D01*
+X029173Y027408D01*
+X029484Y026993D01*
+X029775Y026563D01*
+X030045Y026120D01*
+X030293Y025665D01*
+X030520Y025198D01*
+X030724Y024721D01*
+X030906Y024235D01*
+X031063Y023741D01*
+X031198Y023240D01*
+X031308Y022733D01*
+X031394Y022221D01*
+X031456Y021706D01*
+X031493Y021189D01*
+X031505Y020670D01*
+X039305Y020605D02*
+X039284Y019718D01*
+X039221Y018834D01*
+X039115Y017953D01*
+X038968Y017078D01*
+X038780Y016212D01*
+X038550Y015355D01*
+X038280Y014510D01*
+X037970Y013679D01*
+X037621Y012864D01*
+X037233Y012066D01*
+X036808Y011287D01*
+X036347Y010530D01*
+X035850Y009796D01*
+X035318Y009086D01*
+X034753Y008402D01*
+X034157Y007745D01*
+X033530Y007118D01*
+X032873Y006522D01*
+X032189Y005957D01*
+X031479Y005425D01*
+X030745Y004928D01*
+X029987Y004467D01*
+X029209Y004042D01*
+X028411Y003654D01*
+X027596Y003305D01*
+X026765Y002995D01*
+X025920Y002725D01*
+X025063Y002495D01*
+X024197Y002307D01*
+X023322Y002160D01*
+X022441Y002054D01*
+X021557Y001991D01*
+X020670Y001970D01*
+X020605Y001190D02*
+X019684Y001212D01*
+X018766Y001278D01*
+X017851Y001387D01*
+X016943Y001540D01*
+X016043Y001735D01*
+X015154Y001974D01*
+X014276Y002254D01*
+X013413Y002576D01*
+X012567Y002939D01*
+X011738Y003341D01*
+X010930Y003782D01*
+X010144Y004262D01*
+X009381Y004778D01*
+X008644Y005330D01*
+X007933Y005916D01*
+X007252Y006536D01*
+X006601Y007187D01*
+X005981Y007868D01*
+X005395Y008579D01*
+X004843Y009316D01*
+X004327Y010079D01*
+X003847Y010865D01*
+X003406Y011673D01*
+X003004Y012502D01*
+X002641Y013348D01*
+X002319Y014211D01*
+X002039Y015089D01*
+X001800Y015978D01*
+X001605Y016878D01*
+X001452Y017786D01*
+X001343Y018701D01*
+X001277Y019619D01*
+X001255Y020540D01*
+X007755Y020605D02*
+X007769Y021213D01*
+X007813Y021820D01*
+X007885Y022424D01*
+X007986Y023025D01*
+X008115Y023619D01*
+X008273Y024207D01*
+X008458Y024787D01*
+X008671Y025357D01*
+X008910Y025916D01*
+X009176Y026463D01*
+X009468Y026997D01*
+X009785Y027517D01*
+X010126Y028021D01*
+X010490Y028508D01*
+X010878Y028977D01*
+X011287Y029428D01*
+X011717Y029858D01*
+X012168Y030267D01*
+X012637Y030655D01*
+X013124Y031019D01*
+X013628Y031360D01*
+X014148Y031677D01*
+X014682Y031969D01*
+X015229Y032235D01*
+X015788Y032474D01*
+X016358Y032687D01*
+X016938Y032872D01*
+X017526Y033030D01*
+X018120Y033159D01*
+X018721Y033260D01*
+X019325Y033332D01*
+X019932Y033376D01*
+X020540Y033390D01*
+X020605Y035990D02*
+X021334Y035973D01*
+X022061Y035921D01*
+X022785Y035834D01*
+X023504Y035713D01*
+X024217Y035558D01*
+X024921Y035369D01*
+X025616Y035147D01*
+X026299Y034893D01*
+X026969Y034606D01*
+X027625Y034287D01*
+X028265Y033938D01*
+X028888Y033558D01*
+X029491Y033149D01*
+X030075Y032712D01*
+X030637Y032248D01*
+X031177Y031758D01*
+X031693Y031242D01*
+X032183Y030702D01*
+X032647Y030140D01*
+X033084Y029556D01*
+X033493Y028953D01*
+X033873Y028330D01*
+X034222Y027690D01*
+X034541Y027034D01*
+X034828Y026364D01*
+X035082Y025681D01*
+X035304Y024986D01*
+X035493Y024282D01*
+X035648Y023569D01*
+X035769Y022850D01*
+X035856Y022126D01*
+X035908Y021399D01*
+X035925Y020670D01*
+X039045Y020605D02*
+X039024Y019731D01*
+X038962Y018858D01*
+X038858Y017990D01*
+X038713Y017128D01*
+X038527Y016273D01*
+X038301Y015428D01*
+X038034Y014595D01*
+X037729Y013776D01*
+X037384Y012972D01*
+X037002Y012185D01*
+X036583Y011417D01*
+X036128Y010671D01*
+X035638Y009946D01*
+X035114Y009246D01*
+X034557Y008572D01*
+X033969Y007925D01*
+X033350Y007306D01*
+X032703Y006718D01*
+X032029Y006161D01*
+X031329Y005637D01*
+X030604Y005147D01*
+X029857Y004692D01*
+X029090Y004273D01*
+X028303Y003890D01*
+X027499Y003546D01*
+X026680Y003241D01*
+X025847Y002974D01*
+X025002Y002748D01*
+X024147Y002562D01*
+X023285Y002417D01*
+X022417Y002313D01*
+X021544Y002251D01*
+X020670Y002230D01*
+X020605Y001450D02*
+X019697Y001472D01*
+X018790Y001536D01*
+X017888Y001644D01*
+X016992Y001795D01*
+X016104Y001988D01*
+X015227Y002223D01*
+X014361Y002500D01*
+X013510Y002817D01*
+X012675Y003175D01*
+X011857Y003572D01*
+X011060Y004008D01*
+X010284Y004480D01*
+X009532Y004990D01*
+X008804Y005534D01*
+X008104Y006113D01*
+X007431Y006724D01*
+X006789Y007366D01*
+X006178Y008039D01*
+X005599Y008739D01*
+X005055Y009467D01*
+X004545Y010219D01*
+X004073Y010995D01*
+X003637Y011793D01*
+X003240Y012610D01*
+X002882Y013445D01*
+X002565Y014296D01*
+X002288Y015162D01*
+X002053Y016039D01*
+X001860Y016927D01*
+X001709Y017823D01*
+X001601Y018725D01*
+X001537Y019632D01*
+X001515Y020540D01*
+X000995Y020605D02*
+X001017Y021535D01*
+X001083Y022463D01*
+X001194Y023386D01*
+X001348Y024304D01*
+X001546Y025213D01*
+X001787Y026111D01*
+X002070Y026998D01*
+X002395Y027869D01*
+X002761Y028724D01*
+X003168Y029561D01*
+X003614Y030377D01*
+X004098Y031172D01*
+X004619Y031942D01*
+X005177Y032687D01*
+X005769Y033404D01*
+X006395Y034093D01*
+X007052Y034750D01*
+X007741Y035376D01*
+X008458Y035968D01*
+X009203Y036526D01*
+X009973Y037047D01*
+X010768Y037531D01*
+X011584Y037977D01*
+X012421Y038384D01*
+X013276Y038750D01*
+X014148Y039075D01*
+X015034Y039358D01*
+X015932Y039599D01*
+X016841Y039797D01*
+X017759Y039951D01*
+X018682Y040062D01*
+X019610Y040128D01*
+X020540Y040150D01*
+X020605Y029490D02*
+X021025Y029480D01*
+X021443Y029450D01*
+X021860Y029400D01*
+X022274Y029331D01*
+X022684Y029241D01*
+X023090Y029133D01*
+X023490Y029005D01*
+X023883Y028858D01*
+X024269Y028693D01*
+X024647Y028510D01*
+X025015Y028308D01*
+X025373Y028090D01*
+X025721Y027855D01*
+X026057Y027603D01*
+X026381Y027336D01*
+X026691Y027053D01*
+X026988Y026756D01*
+X027271Y026446D01*
+X027538Y026122D01*
+X027790Y025786D01*
+X028025Y025438D01*
+X028243Y025080D01*
+X028445Y024712D01*
+X028628Y024334D01*
+X028793Y023948D01*
+X028940Y023555D01*
+X029068Y023155D01*
+X029176Y022749D01*
+X029266Y022339D01*
+X029335Y021925D01*
+X029385Y021508D01*
+X029415Y021090D01*
+X029425Y020670D01*
+X037745Y020605D02*
+X037726Y019793D01*
+X037668Y018982D01*
+X037571Y018175D01*
+X037436Y017374D01*
+X037264Y016579D01*
+X037053Y015794D01*
+X036806Y015020D01*
+X036522Y014259D01*
+X036202Y013512D01*
+X035847Y012781D01*
+X035457Y012068D01*
+X035034Y011374D01*
+X034579Y010701D01*
+X034092Y010050D01*
+X033574Y009423D01*
+X033028Y008822D01*
+X032453Y008247D01*
+X031852Y007701D01*
+X031225Y007183D01*
+X030574Y006696D01*
+X029901Y006241D01*
+X029207Y005818D01*
+X028494Y005428D01*
+X027763Y005073D01*
+X027016Y004753D01*
+X026255Y004469D01*
+X025481Y004222D01*
+X024696Y004011D01*
+X023901Y003839D01*
+X023100Y003704D01*
+X022293Y003607D01*
+X021482Y003549D01*
+X020670Y003530D01*
+X020605Y001970D02*
+X019722Y001991D01*
+X018840Y002054D01*
+X017962Y002159D01*
+X017091Y002306D01*
+X016227Y002493D01*
+X015373Y002722D01*
+X014531Y002991D01*
+X013703Y003300D01*
+X012891Y003648D01*
+X012096Y004034D01*
+X011320Y004458D01*
+X010565Y004918D01*
+X009833Y005413D01*
+X009126Y005943D01*
+X008444Y006506D01*
+X007790Y007100D01*
+X007165Y007725D01*
+X006571Y008379D01*
+X006008Y009061D01*
+X005478Y009768D01*
+X004983Y010500D01*
+X004523Y011255D01*
+X004099Y012031D01*
+X003713Y012826D01*
+X003365Y013638D01*
+X003056Y014466D01*
+X002787Y015308D01*
+X002558Y016162D01*
+X002371Y017026D01*
+X002224Y017897D01*
+X002119Y018775D01*
+X002056Y019657D01*
+X002035Y020540D01*
+X006455Y020605D02*
+X006471Y021275D01*
+X006519Y021944D01*
+X006598Y022609D01*
+X006710Y023271D01*
+X006852Y023926D01*
+X007026Y024573D01*
+X007230Y025212D01*
+X007464Y025840D01*
+X007728Y026456D01*
+X008021Y027059D01*
+X008342Y027648D01*
+X008691Y028220D01*
+X009067Y028775D01*
+X009468Y029312D01*
+X009895Y029829D01*
+X010346Y030325D01*
+X010820Y030799D01*
+X011316Y031250D01*
+X011833Y031677D01*
+X012370Y032078D01*
+X012925Y032454D01*
+X013498Y032803D01*
+X014086Y033124D01*
+X014689Y033417D01*
+X015305Y033681D01*
+X015933Y033915D01*
+X016572Y034119D01*
+X017219Y034293D01*
+X017874Y034435D01*
+X018536Y034547D01*
+X019201Y034626D01*
+X019870Y034674D01*
+X020540Y034690D01*
+X020605Y039370D02*
+X021495Y039349D01*
+X022383Y039285D01*
+X023266Y039180D01*
+X024144Y039032D01*
+X025014Y038843D01*
+X025873Y038613D01*
+X026721Y038342D01*
+X027555Y038030D01*
+X028373Y037680D01*
+X029174Y037291D01*
+X029955Y036865D01*
+X030715Y036401D01*
+X031452Y035903D01*
+X032165Y035369D01*
+X032851Y034803D01*
+X033509Y034204D01*
+X034139Y033574D01*
+X034738Y032916D01*
+X035304Y032230D01*
+X035838Y031517D01*
+X036336Y030780D01*
+X036800Y030020D01*
+X037226Y029239D01*
+X037615Y028438D01*
+X037965Y027620D01*
+X038277Y026786D01*
+X038548Y025938D01*
+X038778Y025079D01*
+X038967Y024209D01*
+X039115Y023331D01*
+X039220Y022447D01*
+X039284Y021560D01*
+X039305Y020670D01*
+X035405Y020605D02*
+X035388Y019904D01*
+X035338Y019204D01*
+X035255Y018508D01*
+X035139Y017816D01*
+X034990Y017131D01*
+X034808Y016454D01*
+X034595Y015786D01*
+X034350Y015129D01*
+X034073Y014484D01*
+X033767Y013853D01*
+X033431Y013237D01*
+X033066Y012639D01*
+X032673Y012058D01*
+X032252Y011496D01*
+X031806Y010956D01*
+X031334Y010437D01*
+X030838Y009941D01*
+X030319Y009469D01*
+X029779Y009022D01*
+X029217Y008602D01*
+X028636Y008209D01*
+X028037Y007844D01*
+X027422Y007508D01*
+X026791Y007202D01*
+X026146Y006925D01*
+X025489Y006680D01*
+X024821Y006467D01*
+X024144Y006285D01*
+X023459Y006136D01*
+X022767Y006020D01*
+X022071Y005937D01*
+X021371Y005887D01*
+X020670Y005870D01*
+X020605Y002490D02*
+X019746Y002510D01*
+X018889Y002572D01*
+X018036Y002674D01*
+X017189Y002816D01*
+X016350Y002999D01*
+X015520Y003221D01*
+X014701Y003483D01*
+X013897Y003783D01*
+X013107Y004121D01*
+X012334Y004497D01*
+X011580Y004908D01*
+X010846Y005355D01*
+X010135Y005837D01*
+X009447Y006352D01*
+X008785Y006899D01*
+X008149Y007477D01*
+X007542Y008084D01*
+X006964Y008720D01*
+X006417Y009382D01*
+X005902Y010070D01*
+X005420Y010781D01*
+X004973Y011515D01*
+X004561Y012269D01*
+X004186Y013042D01*
+X003848Y013832D01*
+X003548Y014636D01*
+X003286Y015455D01*
+X003064Y016285D01*
+X002881Y017124D01*
+X002739Y017971D01*
+X002637Y018824D01*
+X002575Y019681D01*
+X002555Y020540D01*
+X002815Y020605D02*
+X002835Y021448D01*
+X002895Y022290D01*
+X002995Y023127D01*
+X003135Y023959D01*
+X003315Y024784D01*
+X003533Y025599D01*
+X003790Y026402D01*
+X004085Y027193D01*
+X004417Y027968D01*
+X004785Y028727D01*
+X005190Y029467D01*
+X005629Y030188D01*
+X006102Y030887D01*
+X006607Y031562D01*
+X007144Y032212D01*
+X007712Y032837D01*
+X008308Y033433D01*
+X008933Y034001D01*
+X009583Y034538D01*
+X010259Y035043D01*
+X010957Y035516D01*
+X011678Y035955D01*
+X012418Y036360D01*
+X013177Y036728D01*
+X013952Y037060D01*
+X014743Y037355D01*
+X015546Y037612D01*
+X016361Y037830D01*
+X017186Y038010D01*
+X018018Y038150D01*
+X018855Y038250D01*
+X019697Y038310D01*
+X020540Y038330D01*
+X020605Y036250D02*
+X021346Y036232D01*
+X022086Y036179D01*
+X022822Y036091D01*
+X023554Y035968D01*
+X024278Y035811D01*
+X024994Y035619D01*
+X025701Y035393D01*
+X026396Y035134D01*
+X027077Y034842D01*
+X027744Y034518D01*
+X028395Y034163D01*
+X029028Y033777D01*
+X029642Y033361D01*
+X030236Y032917D01*
+X030808Y032445D01*
+X031356Y031946D01*
+X031881Y031421D01*
+X032380Y030873D01*
+X032852Y030301D01*
+X033296Y029707D01*
+X033712Y029093D01*
+X034098Y028460D01*
+X034453Y027809D01*
+X034777Y027142D01*
+X035069Y026460D01*
+X035328Y025766D01*
+X035554Y025059D01*
+X035746Y024343D01*
+X035903Y023619D01*
+X036026Y022887D01*
+X036114Y022151D01*
+X036167Y021411D01*
+X036185Y020670D01*
+X034365Y020605D02*
+X034349Y019953D01*
+X034303Y019303D01*
+X034226Y018656D01*
+X034118Y018013D01*
+X033979Y017376D01*
+X033810Y016747D01*
+X033612Y016126D01*
+X033384Y015515D01*
+X033127Y014916D01*
+X032843Y014330D01*
+X032530Y013757D01*
+X032191Y013201D01*
+X031826Y012661D01*
+X031435Y012139D01*
+X031020Y011637D01*
+X030582Y011154D01*
+X030121Y010693D01*
+X029638Y010255D01*
+X029136Y009840D01*
+X028614Y009449D01*
+X028074Y009084D01*
+X027517Y008745D01*
+X026945Y008432D01*
+X026359Y008148D01*
+X025760Y007891D01*
+X025149Y007663D01*
+X024528Y007465D01*
+X023899Y007296D01*
+X023262Y007157D01*
+X022619Y007049D01*
+X021972Y006972D01*
+X021322Y006926D01*
+X020670Y006910D01*
+X020605Y005870D02*
+X019907Y005887D01*
+X019211Y005936D01*
+X018517Y006019D01*
+X017829Y006135D01*
+X017146Y006284D01*
+X016472Y006464D01*
+X015807Y006677D01*
+X015153Y006921D01*
+X014511Y007196D01*
+X013883Y007501D01*
+X013270Y007835D01*
+X012674Y008199D01*
+X012096Y008590D01*
+X011537Y009009D01*
+X010998Y009453D01*
+X010482Y009923D01*
+X009988Y010417D01*
+X009518Y010933D01*
+X009074Y011472D01*
+X008655Y012031D01*
+X008264Y012609D01*
+X007900Y013205D01*
+X007566Y013818D01*
+X007261Y014446D01*
+X006986Y015088D01*
+X006742Y015742D01*
+X006529Y016407D01*
+X006349Y017081D01*
+X006200Y017764D01*
+X006084Y018452D01*
+X006001Y019146D01*
+X005952Y019842D01*
+X005935Y020540D01*
+X005935Y020605D02*
+X005952Y021300D01*
+X006001Y021993D01*
+X006084Y022683D01*
+X006199Y023369D01*
+X006347Y024048D01*
+X006527Y024720D01*
+X006738Y025382D01*
+X006981Y026033D01*
+X007255Y026672D01*
+X007559Y027297D01*
+X007892Y027907D01*
+X008253Y028501D01*
+X008643Y029077D01*
+X009060Y029633D01*
+X009502Y030169D01*
+X009970Y030684D01*
+X010461Y031175D01*
+X010976Y031643D01*
+X011512Y032085D01*
+X012068Y032502D01*
+X012644Y032892D01*
+X013238Y033253D01*
+X013848Y033586D01*
+X014473Y033890D01*
+X015112Y034164D01*
+X015763Y034407D01*
+X016425Y034618D01*
+X017097Y034798D01*
+X017776Y034946D01*
+X018462Y035061D01*
+X019152Y035144D01*
+X019845Y035193D01*
+X020540Y035210D01*
+X020605Y035210D02*
+X021297Y035194D01*
+X021987Y035144D01*
+X022674Y035062D01*
+X023357Y034947D01*
+X024033Y034800D01*
+X024701Y034621D01*
+X025361Y034410D01*
+X026009Y034168D01*
+X026645Y033896D01*
+X027268Y033594D01*
+X027875Y033262D01*
+X028466Y032902D01*
+X029039Y032514D01*
+X029593Y032099D01*
+X030127Y031659D01*
+X030639Y031193D01*
+X031128Y030704D01*
+X031594Y030192D01*
+X032034Y029658D01*
+X032449Y029104D01*
+X032837Y028531D01*
+X033197Y027940D01*
+X033529Y027333D01*
+X033831Y026710D01*
+X034103Y026074D01*
+X034345Y025426D01*
+X034556Y024766D01*
+X034735Y024098D01*
+X034882Y023422D01*
+X034997Y022739D01*
+X035079Y022052D01*
+X035129Y021362D01*
+X035145Y020670D01*
+X037485Y020605D02*
+X037466Y019805D01*
+X037409Y019007D01*
+X037314Y018212D01*
+X037181Y017423D01*
+X037011Y016641D01*
+X036804Y015868D01*
+X036560Y015105D01*
+X036281Y014355D01*
+X035965Y013620D01*
+X035616Y012900D01*
+X035232Y012198D01*
+X034816Y011514D01*
+X034367Y010851D01*
+X033887Y010211D01*
+X033378Y009594D01*
+X032840Y009001D01*
+X032274Y008435D01*
+X031681Y007897D01*
+X031064Y007388D01*
+X030424Y006908D01*
+X029761Y006459D01*
+X029078Y006043D01*
+X028375Y005659D01*
+X027655Y005310D01*
+X026920Y004994D01*
+X026170Y004715D01*
+X025407Y004471D01*
+X024634Y004264D01*
+X023852Y004094D01*
+X023063Y003961D01*
+X022268Y003866D01*
+X021470Y003809D01*
+X020670Y003790D01*
+X020605Y007170D02*
+X019969Y007185D01*
+X019334Y007231D01*
+X018702Y007306D01*
+X018075Y007412D01*
+X017453Y007547D01*
+X016838Y007712D01*
+X016232Y007905D01*
+X015636Y008128D01*
+X015051Y008378D01*
+X014479Y008656D01*
+X013920Y008961D01*
+X013377Y009292D01*
+X012850Y009649D01*
+X012340Y010030D01*
+X011850Y010436D01*
+X011379Y010864D01*
+X010929Y011314D01*
+X010501Y011785D01*
+X010095Y012275D01*
+X009714Y012785D01*
+X009357Y013312D01*
+X009026Y013855D01*
+X008721Y014414D01*
+X008443Y014986D01*
+X008193Y015571D01*
+X007970Y016167D01*
+X007777Y016773D01*
+X007612Y017388D01*
+X007477Y018010D01*
+X007371Y018637D01*
+X007296Y019269D01*
+X007250Y019904D01*
+X007235Y020540D01*
+X011915Y020605D02*
+X011925Y021015D01*
+X011954Y021425D01*
+X012003Y021832D01*
+X012071Y022237D01*
+X012158Y022638D01*
+X012264Y023035D01*
+X012389Y023426D01*
+X012533Y023811D01*
+X012694Y024188D01*
+X012874Y024557D01*
+X013071Y024918D01*
+X013284Y025268D01*
+X013514Y025608D01*
+X013760Y025937D01*
+X014022Y026253D01*
+X014298Y026557D01*
+X014588Y026847D01*
+X014892Y027123D01*
+X015208Y027385D01*
+X015537Y027631D01*
+X015877Y027861D01*
+X016228Y028075D01*
+X016588Y028271D01*
+X016957Y028451D01*
+X017334Y028612D01*
+X017719Y028756D01*
+X018110Y028881D01*
+X018507Y028987D01*
+X018908Y029074D01*
+X019313Y029142D01*
+X019720Y029191D01*
+X020130Y029220D01*
+X020540Y029230D01*
+X020605Y036510D02*
+X021359Y036492D01*
+X022111Y036438D01*
+X022859Y036349D01*
+X023603Y036224D01*
+X024339Y036064D01*
+X025068Y035868D01*
+X025786Y035639D01*
+X026492Y035375D01*
+X027185Y035079D01*
+X027863Y034749D01*
+X028525Y034388D01*
+X029169Y033995D01*
+X029793Y033573D01*
+X030397Y033121D01*
+X030978Y032641D01*
+X031536Y032134D01*
+X032069Y031601D01*
+X032576Y031043D01*
+X033056Y030462D01*
+X033508Y029858D01*
+X033930Y029234D01*
+X034323Y028590D01*
+X034684Y027928D01*
+X035014Y027250D01*
+X035310Y026557D01*
+X035574Y025851D01*
+X035803Y025133D01*
+X035999Y024404D01*
+X036159Y023668D01*
+X036284Y022924D01*
+X036373Y022176D01*
+X036427Y021424D01*
+X036445Y020670D01*
+X034885Y020605D02*
+X034869Y019929D01*
+X034821Y019254D01*
+X034740Y018582D01*
+X034628Y017915D01*
+X034484Y017254D01*
+X034309Y016600D01*
+X034103Y015956D01*
+X033867Y015322D01*
+X033600Y014700D01*
+X033305Y014091D01*
+X032981Y013497D01*
+X032628Y012920D01*
+X032249Y012359D01*
+X031844Y011818D01*
+X031413Y011296D01*
+X030958Y010795D01*
+X030479Y010317D01*
+X029979Y009862D01*
+X029457Y009431D01*
+X028915Y009026D01*
+X028355Y008647D01*
+X027777Y008294D01*
+X027184Y007970D01*
+X026575Y007675D01*
+X025953Y007408D01*
+X025319Y007172D01*
+X024675Y006966D01*
+X024021Y006791D01*
+X023360Y006647D01*
+X022693Y006535D01*
+X022021Y006454D01*
+X021346Y006406D01*
+X020670Y006390D01*
+X020605Y008210D02*
+X020018Y008224D01*
+X019433Y008266D01*
+X018850Y008335D01*
+X018272Y008433D01*
+X017698Y008558D01*
+X017131Y008709D01*
+X016572Y008888D01*
+X016022Y009093D01*
+X015483Y009324D01*
+X014955Y009581D01*
+X014440Y009862D01*
+X013939Y010167D01*
+X013453Y010496D01*
+X012983Y010848D01*
+X012531Y011222D01*
+X012096Y011616D01*
+X011681Y012031D01*
+X011287Y012466D01*
+X010913Y012918D01*
+X010561Y013388D01*
+X010232Y013874D01*
+X009927Y014375D01*
+X009646Y014890D01*
+X009389Y015418D01*
+X009158Y015957D01*
+X008953Y016507D01*
+X008774Y017066D01*
+X008623Y017633D01*
+X008498Y018207D01*
+X008400Y018785D01*
+X008331Y019368D01*
+X008289Y019953D01*
+X008275Y020540D01*
+X004895Y020605D02*
+X004913Y021349D01*
+X004966Y022092D01*
+X005054Y022831D01*
+X005178Y023566D01*
+X005336Y024293D01*
+X005529Y025013D01*
+X005755Y025722D01*
+X006016Y026420D01*
+X006309Y027104D01*
+X006634Y027774D01*
+X006991Y028427D01*
+X007379Y029063D01*
+X007796Y029680D01*
+X008242Y030276D01*
+X008716Y030850D01*
+X009217Y031401D01*
+X009744Y031928D01*
+X010295Y032429D01*
+X010869Y032903D01*
+X011465Y033349D01*
+X012082Y033766D01*
+X012718Y034154D01*
+X013371Y034511D01*
+X014041Y034836D01*
+X014725Y035129D01*
+X015423Y035390D01*
+X016132Y035616D01*
+X016852Y035809D01*
+X017579Y035967D01*
+X018314Y036091D01*
+X019053Y036179D01*
+X019796Y036232D01*
+X020540Y036250D01*
+X020605Y029750D02*
+X021037Y029740D01*
+X021468Y029709D01*
+X021897Y029658D01*
+X022323Y029586D01*
+X022746Y029494D01*
+X023163Y029382D01*
+X023575Y029251D01*
+X023980Y029100D01*
+X024377Y028929D01*
+X024766Y028741D01*
+X025145Y028534D01*
+X025514Y028309D01*
+X025872Y028066D01*
+X026218Y027807D01*
+X026551Y027532D01*
+X026871Y027242D01*
+X027177Y026936D01*
+X027467Y026616D01*
+X027742Y026283D01*
+X028001Y025937D01*
+X028244Y025579D01*
+X028469Y025210D01*
+X028676Y024831D01*
+X028864Y024442D01*
+X029035Y024045D01*
+X029186Y023640D01*
+X029317Y023228D01*
+X029429Y022811D01*
+X029521Y022388D01*
+X029593Y021962D01*
+X029644Y021533D01*
+X029675Y021102D01*
+X029685Y020670D01*
+X032025Y020605D02*
+X032012Y020065D01*
+X031974Y019526D01*
+X031909Y018989D01*
+X031820Y018456D01*
+X031705Y017928D01*
+X031565Y017406D01*
+X031400Y016891D01*
+X031212Y016385D01*
+X030999Y015888D01*
+X030763Y015402D01*
+X030504Y014928D01*
+X030222Y014466D01*
+X029920Y014018D01*
+X029596Y013586D01*
+X029252Y013169D01*
+X028888Y012769D01*
+X028506Y012387D01*
+X028106Y012023D01*
+X027689Y011679D01*
+X027257Y011355D01*
+X026809Y011053D01*
+X026348Y010771D01*
+X025873Y010512D01*
+X025387Y010276D01*
+X024890Y010063D01*
+X024384Y009875D01*
+X023869Y009710D01*
+X023347Y009570D01*
+X022819Y009455D01*
+X022286Y009366D01*
+X021749Y009301D01*
+X021210Y009263D01*
+X020670Y009250D01*
+X020605Y012110D02*
+X020204Y012120D01*
+X019804Y012148D01*
+X019405Y012196D01*
+X019010Y012262D01*
+X018618Y012348D01*
+X018230Y012451D01*
+X017848Y012574D01*
+X017472Y012714D01*
+X017103Y012872D01*
+X016742Y013047D01*
+X016390Y013239D01*
+X016047Y013448D01*
+X015715Y013673D01*
+X015394Y013914D01*
+X015085Y014169D01*
+X014788Y014439D01*
+X014504Y014723D01*
+X014234Y015020D01*
+X013979Y015329D01*
+X013738Y015650D01*
+X013513Y015982D01*
+X013304Y016325D01*
+X013112Y016677D01*
+X012937Y017038D01*
+X012779Y017407D01*
+X012639Y017783D01*
+X012516Y018165D01*
+X012413Y018553D01*
+X012327Y018945D01*
+X012261Y019340D01*
+X012213Y019739D01*
+X012185Y020139D01*
+X012175Y020540D01*
+X008535Y020605D02*
+X008549Y021176D01*
+X008589Y021746D01*
+X008657Y022313D01*
+X008752Y022877D01*
+X008873Y023435D01*
+X009021Y023987D01*
+X009195Y024531D01*
+X009395Y025067D01*
+X009620Y025592D01*
+X009870Y026106D01*
+X010143Y026607D01*
+X010441Y027095D01*
+X010761Y027569D01*
+X011103Y028026D01*
+X011467Y028467D01*
+X011852Y028889D01*
+X012256Y029293D01*
+X012678Y029678D01*
+X013119Y030042D01*
+X013576Y030384D01*
+X014050Y030704D01*
+X014538Y031002D01*
+X015039Y031275D01*
+X015553Y031525D01*
+X016078Y031750D01*
+X016614Y031950D01*
+X017158Y032124D01*
+X017710Y032272D01*
+X018268Y032393D01*
+X018832Y032488D01*
+X019399Y032556D01*
+X019969Y032596D01*
+X020540Y032610D01*
+X020605Y032350D02*
+X021161Y032337D01*
+X021715Y032297D01*
+X022267Y032231D01*
+X022815Y032139D01*
+X023359Y032021D01*
+X023896Y031877D01*
+X024425Y031708D01*
+X024946Y031513D01*
+X025457Y031294D01*
+X025957Y031052D01*
+X026445Y030785D01*
+X026920Y030496D01*
+X027380Y030184D01*
+X027825Y029851D01*
+X028254Y029497D01*
+X028665Y029123D01*
+X029058Y028730D01*
+X029432Y028319D01*
+X029786Y027890D01*
+X030119Y027445D01*
+X030431Y026985D01*
+X030720Y026510D01*
+X030987Y026022D01*
+X031230Y025522D01*
+X031448Y025011D01*
+X031643Y024490D01*
+X031812Y023961D01*
+X031956Y023424D01*
+X032074Y022880D01*
+X032166Y022332D01*
+X032232Y021780D01*
+X032272Y021226D01*
+X032285Y020670D01*
+X028385Y020605D02*
+X028376Y020238D01*
+X028350Y019872D01*
+X028306Y019507D01*
+X028246Y019145D01*
+X028168Y018786D01*
+X028072Y018431D01*
+X027961Y018082D01*
+X027832Y017738D01*
+X027688Y017400D01*
+X027527Y017070D01*
+X027351Y016748D01*
+X027160Y016434D01*
+X026954Y016130D01*
+X026734Y015836D01*
+X026501Y015553D01*
+X026254Y015281D01*
+X025994Y015021D01*
+X025722Y014774D01*
+X025439Y014541D01*
+X025145Y014321D01*
+X024841Y014115D01*
+X024528Y013924D01*
+X024205Y013748D01*
+X023875Y013587D01*
+X023537Y013443D01*
+X023193Y013314D01*
+X022844Y013203D01*
+X022489Y013107D01*
+X022130Y013029D01*
+X021768Y012969D01*
+X021403Y012925D01*
+X021037Y012899D01*
+X020670Y012890D01*
+X020605Y000930D02*
+X019672Y000952D01*
+X018741Y001019D01*
+X017814Y001130D01*
+X016894Y001284D01*
+X015982Y001483D01*
+X015080Y001724D01*
+X014191Y002009D01*
+X013317Y002335D01*
+X012459Y002702D01*
+X011619Y003110D01*
+X010800Y003557D01*
+X010003Y004043D01*
+X009230Y004566D01*
+X008483Y005126D01*
+X007763Y005720D01*
+X007073Y006348D01*
+X006413Y007008D01*
+X005785Y007698D01*
+X005190Y008418D01*
+X004631Y009165D01*
+X004108Y009938D01*
+X003622Y010735D01*
+X003175Y011554D01*
+X002767Y012394D01*
+X002400Y013252D01*
+X002074Y014126D01*
+X001789Y015015D01*
+X001548Y015917D01*
+X001349Y016829D01*
+X001195Y017749D01*
+X001084Y018676D01*
+X001017Y019607D01*
+X000995Y020540D01*
+X009315Y020605D02*
+X009328Y021139D01*
+X009366Y021672D01*
+X009429Y022202D01*
+X009518Y022729D01*
+X009631Y023251D01*
+X009770Y023767D01*
+X009932Y024276D01*
+X010119Y024777D01*
+X010329Y025268D01*
+X010563Y025749D01*
+X010819Y026217D01*
+X011097Y026674D01*
+X011396Y027116D01*
+X011717Y027544D01*
+X012057Y027956D01*
+X012416Y028351D01*
+X012794Y028729D01*
+X013189Y029088D01*
+X013601Y029428D01*
+X014029Y029749D01*
+X014471Y030048D01*
+X014928Y030326D01*
+X015396Y030582D01*
+X015877Y030816D01*
+X016368Y031026D01*
+X016869Y031213D01*
+X017378Y031375D01*
+X017894Y031514D01*
+X018416Y031627D01*
+X018943Y031716D01*
+X019473Y031779D01*
+X020006Y031817D01*
+X020540Y031830D01*
+X020605Y031310D02*
+X021111Y031298D01*
+X021616Y031262D01*
+X022119Y031202D01*
+X022619Y031118D01*
+X023113Y031010D01*
+X023603Y030879D01*
+X024085Y030725D01*
+X024559Y030548D01*
+X025025Y030348D01*
+X025481Y030127D01*
+X025925Y029885D01*
+X026357Y029621D01*
+X026777Y029337D01*
+X027182Y029034D01*
+X027573Y028711D01*
+X027947Y028371D01*
+X028306Y028012D01*
+X028646Y027638D01*
+X028969Y027247D01*
+X029272Y026842D01*
+X029556Y026422D01*
+X029820Y025990D01*
+X030062Y025546D01*
+X030283Y025090D01*
+X030483Y024624D01*
+X030660Y024150D01*
+X030814Y023668D01*
+X030945Y023178D01*
+X031053Y022684D01*
+X031137Y022184D01*
+X031197Y021681D01*
+X031233Y021176D01*
+X031245Y020670D01*
+X036445Y020605D02*
+X036427Y019854D01*
+X036374Y019105D01*
+X036284Y018360D01*
+X036160Y017620D01*
+X036000Y016886D01*
+X035806Y016161D01*
+X035577Y015446D01*
+X035315Y014742D01*
+X035019Y014052D01*
+X034691Y013376D01*
+X034332Y012718D01*
+X033941Y012076D01*
+X033520Y011455D01*
+X033070Y010854D01*
+X032592Y010275D01*
+X032087Y009719D01*
+X031556Y009188D01*
+X031000Y008683D01*
+X030421Y008205D01*
+X029820Y007755D01*
+X029199Y007334D01*
+X028558Y006943D01*
+X027899Y006584D01*
+X027223Y006256D01*
+X026533Y005960D01*
+X025829Y005698D01*
+X025114Y005469D01*
+X024389Y005275D01*
+X023655Y005115D01*
+X022915Y004991D01*
+X022170Y004901D01*
+X021421Y004848D01*
+X020670Y004830D01*
+X020605Y003790D02*
+X019808Y003809D01*
+X019013Y003866D01*
+X018221Y003960D01*
+X017435Y004093D01*
+X016656Y004262D01*
+X015886Y004468D01*
+X015127Y004711D01*
+X014380Y004990D01*
+X013647Y005304D01*
+X012930Y005652D01*
+X012230Y006034D01*
+X011549Y006449D01*
+X010889Y006896D01*
+X010251Y007374D01*
+X009636Y007881D01*
+X009046Y008417D01*
+X008482Y008981D01*
+X007946Y009571D01*
+X007439Y010186D01*
+X006961Y010824D01*
+X006514Y011484D01*
+X006099Y012165D01*
+X005717Y012865D01*
+X005369Y013582D01*
+X005055Y014315D01*
+X004776Y015062D01*
+X004533Y015821D01*
+X004327Y016591D01*
+X004158Y017370D01*
+X004025Y018156D01*
+X003931Y018948D01*
+X003874Y019743D01*
+X003855Y020540D01*
+X011135Y020605D02*
+X011146Y021053D01*
+X011178Y021499D01*
+X011231Y021943D01*
+X011305Y022385D01*
+X011400Y022822D01*
+X011516Y023255D01*
+X011652Y023681D01*
+X011809Y024101D01*
+X011985Y024512D01*
+X012181Y024915D01*
+X012395Y025308D01*
+X012628Y025690D01*
+X012879Y026060D01*
+X013147Y026419D01*
+X013432Y026764D01*
+X013733Y027095D01*
+X014050Y027412D01*
+X014381Y027713D01*
+X014726Y027998D01*
+X015085Y028266D01*
+X015455Y028517D01*
+X015838Y028750D01*
+X016230Y028965D01*
+X016633Y029160D01*
+X017045Y029336D01*
+X017464Y029493D01*
+X017890Y029629D01*
+X018323Y029745D01*
+X018760Y029840D01*
+X019202Y029914D01*
+X019646Y029967D01*
+X020093Y029999D01*
+X020540Y030010D01*
+X020605Y040410D02*
+X021544Y040388D01*
+X022481Y040321D01*
+X023414Y040209D01*
+X024341Y040053D01*
+X025259Y039854D01*
+X026166Y039610D01*
+X027061Y039324D01*
+X027942Y038996D01*
+X028805Y038626D01*
+X029650Y038216D01*
+X030475Y037765D01*
+X031277Y037276D01*
+X032055Y036750D01*
+X032807Y036187D01*
+X033532Y035588D01*
+X034227Y034956D01*
+X034892Y034292D01*
+X035524Y033597D01*
+X036122Y032872D01*
+X036685Y032120D01*
+X037211Y031342D01*
+X037700Y030540D01*
+X038151Y029715D01*
+X038561Y028870D01*
+X038931Y028007D01*
+X039259Y027126D01*
+X039545Y026231D01*
+X039789Y025324D01*
+X039988Y024406D01*
+X040144Y023479D01*
+X040256Y022546D01*
+X040323Y021609D01*
+X040345Y020670D01*
+X039825Y020605D02*
+X039803Y019694D01*
+X039738Y018784D01*
+X039630Y017879D01*
+X039479Y016980D01*
+X039285Y016089D01*
+X039049Y015208D01*
+X038771Y014340D01*
+X038453Y013486D01*
+X038094Y012648D01*
+X037696Y011828D01*
+X037259Y011027D01*
+X036784Y010249D01*
+X036273Y009494D01*
+X035727Y008764D01*
+X035146Y008061D01*
+X034533Y007387D01*
+X033888Y006742D01*
+X033214Y006129D01*
+X032511Y005548D01*
+X031781Y005002D01*
+X031026Y004491D01*
+X030247Y004016D01*
+X029447Y003579D01*
+X028627Y003181D01*
+X027789Y002822D01*
+X026935Y002504D01*
+X026067Y002226D01*
+X025186Y001990D01*
+X024295Y001796D01*
+X023396Y001645D01*
+X022491Y001537D01*
+X021581Y001472D01*
+X020670Y001450D01*
+X020605Y005090D02*
+X019870Y005107D01*
+X019136Y005160D01*
+X018406Y005247D01*
+X017681Y005369D01*
+X016963Y005525D01*
+X016252Y005716D01*
+X015552Y005940D01*
+X014863Y006197D01*
+X014187Y006486D01*
+X013525Y006807D01*
+X012880Y007160D01*
+X012252Y007543D01*
+X011643Y007955D01*
+X011054Y008395D01*
+X010487Y008864D01*
+X009943Y009358D01*
+X009423Y009878D01*
+X008929Y010422D01*
+X008460Y010989D01*
+X008020Y011578D01*
+X007608Y012187D01*
+X007225Y012815D01*
+X006872Y013460D01*
+X006551Y014122D01*
+X006262Y014798D01*
+X006005Y015487D01*
+X005781Y016187D01*
+X005590Y016898D01*
+X005434Y017616D01*
+X005312Y018341D01*
+X005225Y019071D01*
+X005172Y019805D01*
+X005155Y020540D01*
+X013215Y020605D02*
+X013223Y020954D01*
+X013248Y021301D01*
+X013290Y021647D01*
+X013347Y021991D01*
+X013421Y022332D01*
+X013512Y022669D01*
+X013618Y023001D01*
+X013740Y023327D01*
+X013877Y023648D01*
+X014029Y023961D01*
+X014196Y024267D01*
+X014378Y024565D01*
+X014573Y024854D01*
+X014782Y025133D01*
+X015004Y025402D01*
+X015239Y025660D01*
+X015485Y025906D01*
+X015743Y026141D01*
+X016012Y026363D01*
+X016291Y026572D01*
+X016580Y026767D01*
+X016878Y026949D01*
+X017184Y027116D01*
+X017497Y027268D01*
+X017818Y027405D01*
+X018144Y027527D01*
+X018476Y027633D01*
+X018813Y027724D01*
+X019154Y027798D01*
+X019498Y027855D01*
+X019844Y027897D01*
+X020191Y027922D01*
+X020540Y027930D01*
+X020605Y038590D02*
+X021458Y038570D01*
+X022308Y038509D01*
+X023155Y038408D01*
+X023996Y038266D01*
+X024830Y038085D01*
+X025654Y037864D01*
+X026466Y037604D01*
+X027265Y037306D01*
+X028049Y036971D01*
+X028816Y036598D01*
+X029565Y036189D01*
+X030293Y035745D01*
+X031000Y035267D01*
+X031682Y034756D01*
+X032340Y034213D01*
+X032971Y033639D01*
+X033574Y033036D01*
+X034148Y032405D01*
+X034691Y031747D01*
+X035202Y031065D01*
+X035680Y030358D01*
+X036124Y029630D01*
+X036533Y028881D01*
+X036906Y028114D01*
+X037241Y027330D01*
+X037539Y026531D01*
+X037799Y025719D01*
+X038020Y024895D01*
+X038201Y024061D01*
+X038343Y023220D01*
+X038444Y022373D01*
+X038505Y021523D01*
+X038525Y020670D01*
+X038005Y020605D02*
+X037985Y019780D01*
+X037927Y018957D01*
+X037829Y018138D01*
+X037692Y017324D01*
+X037516Y016518D01*
+X037303Y015721D01*
+X037052Y014935D01*
+X036763Y014162D01*
+X036438Y013404D01*
+X036078Y012662D01*
+X035683Y011937D01*
+X035253Y011233D01*
+X034791Y010550D01*
+X034296Y009889D01*
+X033771Y009253D01*
+X033216Y008642D01*
+X032633Y008059D01*
+X032022Y007504D01*
+X031386Y006979D01*
+X030725Y006484D01*
+X030042Y006022D01*
+X029337Y005592D01*
+X028613Y005197D01*
+X027871Y004837D01*
+X027113Y004512D01*
+X026340Y004223D01*
+X025554Y003972D01*
+X024757Y003759D01*
+X023951Y003583D01*
+X023137Y003446D01*
+X022318Y003348D01*
+X021495Y003290D01*
+X020670Y003270D01*
+X020605Y005610D02*
+X019895Y005627D01*
+X019186Y005678D01*
+X018480Y005762D01*
+X017780Y005880D01*
+X017085Y006031D01*
+X016399Y006215D01*
+X015722Y006431D01*
+X015056Y006679D01*
+X014403Y006959D01*
+X013764Y007270D01*
+X013140Y007610D01*
+X012533Y007980D01*
+X011945Y008378D01*
+X011376Y008804D01*
+X010828Y009257D01*
+X010302Y009735D01*
+X009800Y010237D01*
+X009322Y010763D01*
+X008869Y011311D01*
+X008443Y011880D01*
+X008045Y012468D01*
+X007675Y013075D01*
+X007335Y013699D01*
+X007024Y014338D01*
+X006744Y014991D01*
+X006496Y015657D01*
+X006280Y016334D01*
+X006096Y017020D01*
+X005945Y017715D01*
+X005827Y018415D01*
+X005743Y019121D01*
+X005692Y019830D01*
+X005675Y020540D01*
+X003075Y020605D02*
+X003095Y021436D01*
+X003154Y022265D01*
+X003253Y023090D01*
+X003391Y023910D01*
+X003567Y024723D01*
+X003782Y025525D01*
+X004036Y026317D01*
+X004326Y027096D01*
+X004653Y027860D01*
+X005016Y028608D01*
+X005415Y029337D01*
+X005848Y030047D01*
+X006313Y030736D01*
+X006812Y031401D01*
+X007341Y032042D01*
+X007900Y032657D01*
+X008488Y033245D01*
+X009103Y033804D01*
+X009744Y034333D01*
+X010409Y034832D01*
+X011098Y035297D01*
+X011808Y035730D01*
+X012537Y036129D01*
+X013285Y036492D01*
+X014049Y036819D01*
+X014828Y037109D01*
+X015620Y037363D01*
+X016422Y037578D01*
+X017235Y037754D01*
+X018055Y037892D01*
+X018880Y037991D01*
+X019709Y038050D01*
+X020540Y038070D01*
+X020605Y038330D02*
+X021445Y038310D01*
+X022284Y038250D01*
+X023118Y038150D01*
+X023947Y038011D01*
+X024769Y037832D01*
+X025580Y037615D01*
+X026381Y037359D01*
+X027169Y037065D01*
+X027941Y036734D01*
+X028697Y036367D01*
+X029435Y035964D01*
+X030153Y035527D01*
+X030849Y035055D01*
+X031522Y034552D01*
+X032170Y034017D01*
+X032792Y033451D01*
+X033386Y032857D01*
+X033952Y032235D01*
+X034487Y031587D01*
+X034990Y030914D01*
+X035462Y030218D01*
+X035899Y029500D01*
+X036302Y028762D01*
+X036669Y028006D01*
+X037000Y027234D01*
+X037294Y026446D01*
+X037550Y025645D01*
+X037767Y024833D01*
+X037946Y024012D01*
+X038085Y023183D01*
+X038185Y022349D01*
+X038245Y021510D01*
+X038265Y020670D01*
+X035925Y020605D02*
+X035907Y019856D01*
+X035852Y019110D01*
+X035760Y018367D01*
+X035632Y017629D01*
+X035468Y016898D01*
+X035268Y016177D01*
+X035033Y015466D01*
+X034764Y014767D01*
+X034460Y014083D01*
+X034124Y013414D01*
+X033755Y012762D01*
+X033354Y012130D01*
+X032923Y011518D01*
+X032462Y010927D01*
+X031973Y010360D01*
+X031457Y009818D01*
+X030915Y009302D01*
+X030348Y008813D01*
+X029757Y008352D01*
+X029145Y007921D01*
+X028513Y007520D01*
+X027861Y007151D01*
+X027192Y006815D01*
+X026508Y006511D01*
+X025809Y006242D01*
+X025098Y006007D01*
+X024377Y005807D01*
+X023646Y005643D01*
+X022908Y005515D01*
+X022165Y005423D01*
+X021419Y005368D01*
+X020670Y005350D01*
+X020605Y011850D02*
+X020192Y011860D01*
+X019779Y011889D01*
+X019368Y011938D01*
+X018960Y012007D01*
+X018556Y012095D01*
+X018157Y012202D01*
+X017763Y012328D01*
+X017375Y012472D01*
+X016995Y012635D01*
+X016623Y012816D01*
+X016260Y013014D01*
+X015907Y013230D01*
+X015564Y013461D01*
+X015233Y013709D01*
+X014914Y013973D01*
+X014608Y014251D01*
+X014316Y014543D01*
+X014038Y014849D01*
+X013774Y015168D01*
+X013526Y015499D01*
+X013294Y015842D01*
+X013079Y016195D01*
+X012881Y016558D01*
+X012700Y016930D01*
+X012537Y017310D01*
+X012393Y017698D01*
+X012267Y018092D01*
+X012160Y018491D01*
+X012072Y018896D01*
+X012003Y019303D01*
+X011954Y019714D01*
+X011925Y020127D01*
+X011915Y020540D01*
+X003335Y020605D02*
+X003354Y021424D01*
+X003413Y022240D01*
+X003510Y023053D01*
+X003646Y023861D01*
+X003820Y024661D01*
+X004032Y025452D01*
+X004281Y026232D01*
+X004567Y026999D01*
+X004890Y027752D01*
+X005248Y028489D01*
+X005640Y029208D01*
+X006066Y029907D01*
+X006525Y030585D01*
+X007016Y031240D01*
+X007537Y031872D01*
+X008088Y032478D01*
+X008667Y033057D01*
+X009273Y033608D01*
+X009905Y034129D01*
+X010560Y034620D01*
+X011238Y035079D01*
+X011938Y035505D01*
+X012656Y035897D01*
+X013393Y036255D01*
+X014146Y036578D01*
+X014913Y036864D01*
+X015693Y037113D01*
+X016484Y037325D01*
+X017284Y037499D01*
+X018092Y037635D01*
+X018905Y037732D01*
+X019721Y037791D01*
+X020540Y037810D01*
+X020605Y033910D02*
+X021235Y033895D01*
+X021864Y033850D01*
+X022489Y033775D01*
+X023111Y033671D01*
+X023726Y033537D01*
+X024335Y033374D01*
+X024935Y033182D01*
+X025526Y032962D01*
+X026105Y032714D01*
+X026672Y032438D01*
+X027225Y032136D01*
+X027763Y031808D01*
+X028285Y031455D01*
+X028789Y031077D01*
+X029275Y030676D01*
+X029742Y030252D01*
+X030187Y029807D01*
+X030611Y029340D01*
+X031012Y028854D01*
+X031390Y028350D01*
+X031743Y027828D01*
+X032071Y027290D01*
+X032373Y026737D01*
+X032649Y026170D01*
+X032897Y025591D01*
+X033117Y025000D01*
+X033309Y024400D01*
+X033472Y023791D01*
+X033606Y023176D01*
+X033710Y022554D01*
+X033785Y021929D01*
+X033830Y021300D01*
+X033845Y020670D01*
+X034105Y020605D02*
+X034090Y019966D01*
+X034044Y019328D01*
+X033968Y018693D01*
+X033862Y018062D01*
+X033726Y017438D01*
+X033561Y016820D01*
+X033366Y016211D01*
+X033143Y015612D01*
+X032891Y015024D01*
+X032611Y014449D01*
+X032305Y013887D01*
+X031972Y013341D01*
+X031614Y012812D01*
+X031231Y012300D01*
+X030823Y011807D01*
+X030393Y011334D01*
+X029941Y010882D01*
+X029468Y010451D01*
+X028975Y010044D01*
+X028463Y009661D01*
+X027933Y009303D01*
+X027387Y008970D01*
+X026826Y008663D01*
+X026251Y008384D01*
+X025663Y008132D01*
+X025064Y007909D01*
+X024455Y007714D01*
+X023837Y007549D01*
+X023213Y007413D01*
+X022582Y007307D01*
+X021947Y007231D01*
+X021309Y007185D01*
+X020670Y007170D01*
+X020605Y012890D02*
+X020241Y012899D01*
+X019878Y012925D01*
+X019516Y012968D01*
+X019157Y013028D01*
+X018801Y013106D01*
+X018450Y013200D01*
+X018103Y013311D01*
+X017762Y013438D01*
+X017427Y013581D01*
+X017100Y013740D01*
+X016780Y013915D01*
+X016469Y014104D01*
+X016168Y014309D01*
+X015876Y014527D01*
+X015595Y014759D01*
+X015326Y015003D01*
+X015068Y015261D01*
+X014823Y015530D01*
+X014592Y015811D01*
+X014373Y016103D01*
+X014169Y016404D01*
+X013980Y016715D01*
+X013805Y017035D01*
+X013646Y017362D01*
+X013503Y017697D01*
+X013376Y018038D01*
+X013265Y018385D01*
+X013171Y018737D01*
+X013093Y019092D01*
+X013033Y019451D01*
+X012990Y019813D01*
+X012964Y020176D01*
+X012955Y020540D01*
+X004375Y020605D02*
+X004393Y021374D01*
+X004448Y022142D01*
+X004540Y022905D01*
+X004667Y023664D01*
+X004831Y024416D01*
+X005030Y025159D01*
+X005264Y025892D01*
+X005533Y026613D01*
+X005836Y027320D01*
+X006172Y028012D01*
+X006541Y028687D01*
+X006941Y029344D01*
+X007372Y029982D01*
+X007833Y030598D01*
+X008323Y031191D01*
+X008841Y031760D01*
+X009385Y032304D01*
+X009954Y032822D01*
+X010547Y033312D01*
+X011163Y033773D01*
+X011801Y034204D01*
+X012458Y034604D01*
+X013133Y034973D01*
+X013825Y035309D01*
+X014532Y035612D01*
+X015253Y035881D01*
+X015986Y036115D01*
+X016729Y036314D01*
+X017481Y036478D01*
+X018240Y036605D01*
+X019003Y036697D01*
+X019771Y036752D01*
+X020540Y036770D01*
+X020605Y032870D02*
+X021186Y032856D01*
+X021765Y032815D01*
+X022341Y032746D01*
+X022914Y032650D01*
+X023481Y032526D01*
+X024042Y032376D01*
+X024595Y032199D01*
+X025139Y031996D01*
+X025673Y031768D01*
+X026195Y031514D01*
+X026705Y031236D01*
+X027201Y030933D01*
+X027682Y030608D01*
+X028147Y030260D01*
+X028594Y029890D01*
+X029024Y029500D01*
+X029435Y029089D01*
+X029825Y028659D01*
+X030195Y028212D01*
+X030543Y027747D01*
+X030868Y027266D01*
+X031171Y026770D01*
+X031449Y026260D01*
+X031703Y025738D01*
+X031931Y025204D01*
+X032134Y024660D01*
+X032311Y024107D01*
+X032461Y023546D01*
+X032585Y022979D01*
+X032681Y022406D01*
+X032750Y021830D01*
+X032791Y021250D01*
+X032805Y020670D01*
+X032285Y020605D02*
+X032272Y020052D01*
+X032232Y019501D01*
+X032167Y018952D01*
+X032075Y018407D01*
+X031958Y017867D01*
+X031815Y017333D01*
+X031646Y016806D01*
+X031453Y016288D01*
+X031235Y015780D01*
+X030994Y015283D01*
+X030729Y014797D01*
+X030441Y014325D01*
+X030131Y013868D01*
+X029800Y013425D01*
+X029448Y012999D01*
+X029076Y012590D01*
+X028685Y012199D01*
+X028276Y011827D01*
+X027850Y011475D01*
+X027407Y011144D01*
+X026950Y010834D01*
+X026477Y010546D01*
+X025992Y010281D01*
+X025495Y010040D01*
+X024987Y009822D01*
+X024469Y009629D01*
+X023942Y009460D01*
+X023408Y009317D01*
+X022868Y009200D01*
+X022323Y009108D01*
+X021774Y009043D01*
+X021223Y009003D01*
+X020670Y008990D01*
+X020605Y010030D02*
+X020105Y010042D01*
+X019606Y010078D01*
+X019109Y010137D01*
+X018616Y010220D01*
+X018127Y010326D01*
+X017644Y010456D01*
+X017168Y010608D01*
+X016699Y010783D01*
+X016239Y010980D01*
+X015789Y011198D01*
+X015350Y011438D01*
+X014923Y011698D01*
+X014509Y011979D01*
+X014108Y012279D01*
+X013722Y012597D01*
+X013352Y012934D01*
+X012999Y013287D01*
+X012662Y013657D01*
+X012344Y014043D01*
+X012044Y014444D01*
+X011763Y014858D01*
+X011503Y015285D01*
+X011263Y015724D01*
+X011045Y016174D01*
+X010848Y016634D01*
+X010673Y017103D01*
+X010521Y017579D01*
+X010391Y018062D01*
+X010285Y018551D01*
+X010202Y019044D01*
+X010143Y019541D01*
+X010107Y020040D01*
+X010095Y020540D01*
+X005675Y020605D02*
+X005692Y021312D01*
+X005742Y022018D01*
+X005826Y022721D01*
+X005944Y023418D01*
+X006094Y024110D01*
+X006277Y024793D01*
+X006493Y025467D01*
+X006740Y026130D01*
+X007018Y026780D01*
+X007327Y027417D01*
+X007667Y028038D01*
+X008035Y028642D01*
+X008431Y029228D01*
+X008855Y029794D01*
+X009306Y030340D01*
+X009782Y030863D01*
+X010282Y031363D01*
+X010806Y031839D01*
+X011351Y032290D01*
+X011917Y032714D01*
+X012503Y033110D01*
+X013108Y033478D01*
+X013729Y033818D01*
+X014365Y034127D01*
+X015015Y034405D01*
+X015678Y034652D01*
+X016352Y034868D01*
+X017036Y035051D01*
+X017727Y035201D01*
+X018425Y035319D01*
+X019127Y035403D01*
+X019833Y035453D01*
+X020540Y035470D01*
+X020605Y030790D02*
+X021087Y030779D01*
+X021567Y030744D01*
+X022045Y030687D01*
+X022520Y030607D01*
+X022991Y030505D01*
+X023456Y030380D01*
+X023915Y030233D01*
+X024366Y030065D01*
+X024809Y029875D01*
+X025242Y029665D01*
+X025665Y029434D01*
+X026076Y029183D01*
+X026475Y028913D01*
+X026861Y028625D01*
+X027232Y028318D01*
+X027589Y027994D01*
+X027929Y027654D01*
+X028253Y027297D01*
+X028560Y026926D01*
+X028849Y026540D01*
+X029119Y026141D01*
+X029369Y025730D01*
+X029600Y025307D01*
+X029810Y024874D01*
+X030000Y024431D01*
+X030168Y023980D01*
+X030315Y023521D01*
+X030440Y023056D01*
+X030542Y022585D01*
+X030622Y022110D01*
+X030679Y021632D01*
+X030714Y021151D01*
+X030725Y020670D01*
+X031765Y020605D02*
+X031752Y020077D01*
+X031715Y019550D01*
+X031652Y019026D01*
+X031564Y018505D01*
+X031452Y017989D01*
+X031316Y017479D01*
+X031155Y016976D01*
+X030970Y016481D01*
+X030762Y015996D01*
+X030532Y015521D01*
+X030279Y015057D01*
+X030004Y014607D01*
+X029708Y014169D01*
+X029391Y013747D01*
+X029055Y013339D01*
+X028700Y012949D01*
+X028326Y012575D01*
+X027936Y012220D01*
+X027528Y011884D01*
+X027106Y011567D01*
+X026668Y011271D01*
+X026217Y010996D01*
+X025754Y010743D01*
+X025279Y010513D01*
+X024794Y010305D01*
+X024299Y010120D01*
+X023796Y009959D01*
+X023286Y009823D01*
+X022770Y009710D01*
+X022249Y009623D01*
+X021725Y009560D01*
+X021198Y009523D01*
+X020670Y009510D01*
+X020605Y004570D02*
+X019845Y004588D01*
+X019087Y004642D01*
+X018332Y004733D01*
+X017583Y004859D01*
+X016840Y005020D01*
+X016106Y005217D01*
+X015382Y005448D01*
+X014670Y005714D01*
+X013971Y006013D01*
+X013287Y006345D01*
+X012620Y006710D01*
+X011971Y007105D01*
+X011341Y007531D01*
+X010733Y007987D01*
+X010147Y008471D01*
+X009584Y008982D01*
+X009047Y009519D01*
+X008536Y010082D01*
+X008052Y010668D01*
+X007596Y011276D01*
+X007170Y011906D01*
+X006775Y012555D01*
+X006410Y013222D01*
+X006078Y013906D01*
+X005779Y014605D01*
+X005513Y015317D01*
+X005282Y016041D01*
+X005085Y016775D01*
+X004924Y017518D01*
+X004798Y018267D01*
+X004707Y019022D01*
+X004653Y019780D01*
+X004635Y020540D01*
+X011395Y020605D02*
+X011405Y021040D01*
+X011436Y021474D01*
+X011488Y021906D01*
+X011560Y022336D01*
+X011653Y022761D01*
+X011765Y023181D01*
+X011898Y023596D01*
+X012050Y024004D01*
+X012221Y024404D01*
+X012412Y024795D01*
+X012620Y025177D01*
+X012847Y025549D01*
+X013091Y025910D01*
+X013352Y026258D01*
+X013629Y026594D01*
+X013921Y026916D01*
+X014229Y027224D01*
+X014551Y027516D01*
+X014887Y027793D01*
+X015235Y028054D01*
+X015596Y028298D01*
+X015968Y028525D01*
+X016350Y028733D01*
+X016741Y028924D01*
+X017141Y029095D01*
+X017549Y029247D01*
+X017964Y029380D01*
+X018384Y029492D01*
+X018809Y029585D01*
+X019239Y029657D01*
+X019671Y029709D01*
+X020105Y029740D01*
+X020540Y029750D01*
+X020605Y027670D02*
+X020938Y027662D01*
+X021270Y027638D01*
+X021601Y027599D01*
+X021930Y027543D01*
+X022255Y027473D01*
+X022577Y027386D01*
+X022895Y027285D01*
+X023207Y027169D01*
+X023513Y027037D01*
+X023813Y026892D01*
+X024105Y026732D01*
+X024390Y026559D01*
+X024665Y026372D01*
+X024932Y026172D01*
+X025189Y025960D01*
+X025436Y025736D01*
+X025671Y025501D01*
+X025895Y025254D01*
+X026107Y024997D01*
+X026307Y024730D01*
+X026494Y024454D01*
+X026667Y024170D01*
+X026827Y023878D01*
+X026972Y023578D01*
+X027104Y023272D01*
+X027220Y022959D01*
+X027321Y022642D01*
+X027408Y022320D01*
+X027479Y021995D01*
+X027534Y021666D01*
+X027573Y021335D01*
+X027597Y021003D01*
+X027605Y020670D01*
+X031245Y020605D02*
+X031233Y020102D01*
+X031197Y019600D01*
+X031137Y019100D01*
+X031054Y018604D01*
+X030947Y018112D01*
+X030817Y017626D01*
+X030663Y017146D01*
+X030487Y016675D01*
+X030289Y016212D01*
+X030069Y015759D01*
+X029828Y015317D01*
+X029566Y014888D01*
+X029284Y014471D01*
+X028982Y014068D01*
+X028662Y013680D01*
+X028323Y013307D01*
+X027968Y012951D01*
+X027595Y012613D01*
+X027207Y012292D01*
+X026804Y011991D01*
+X026387Y011709D01*
+X025957Y011447D01*
+X025516Y011206D01*
+X025063Y010986D01*
+X024600Y010788D01*
+X024129Y010612D01*
+X023649Y010458D01*
+X023163Y010328D01*
+X022671Y010221D01*
+X022175Y010138D01*
+X021675Y010078D01*
+X021173Y010042D01*
+X020670Y010030D01*
+X020605Y007430D02*
+X019981Y007445D01*
+X019359Y007489D01*
+X018739Y007563D01*
+X018124Y007667D01*
+X017514Y007800D01*
+X016912Y007961D01*
+X016317Y008151D01*
+X015733Y008369D01*
+X015159Y008615D01*
+X014598Y008887D01*
+X014050Y009186D01*
+X013517Y009511D01*
+X013000Y009861D01*
+X012501Y010235D01*
+X012020Y010632D01*
+X011558Y011052D01*
+X011117Y011493D01*
+X010697Y011955D01*
+X010300Y012436D01*
+X009926Y012935D01*
+X009576Y013452D01*
+X009251Y013985D01*
+X008952Y014533D01*
+X008680Y015094D01*
+X008434Y015668D01*
+X008216Y016252D01*
+X008026Y016847D01*
+X007865Y017449D01*
+X007732Y018059D01*
+X007628Y018674D01*
+X007554Y019294D01*
+X007510Y019916D01*
+X007495Y020540D01*
+X012435Y020605D02*
+X012444Y020991D01*
+X012472Y021375D01*
+X012517Y021758D01*
+X012581Y022139D01*
+X012663Y022516D01*
+X012763Y022888D01*
+X012881Y023256D01*
+X013016Y023617D01*
+X013167Y023972D01*
+X013336Y024319D01*
+X013521Y024657D01*
+X013722Y024987D01*
+X013938Y025306D01*
+X014169Y025615D01*
+X014415Y025913D01*
+X014674Y026198D01*
+X014947Y026471D01*
+X015232Y026730D01*
+X015530Y026976D01*
+X015839Y027207D01*
+X016158Y027423D01*
+X016488Y027624D01*
+X016826Y027809D01*
+X017173Y027978D01*
+X017528Y028129D01*
+X017889Y028264D01*
+X018257Y028382D01*
+X018629Y028482D01*
+X019006Y028564D01*
+X019387Y028628D01*
+X019770Y028673D01*
+X020154Y028701D01*
+X020540Y028710D01*
+X020605Y032610D02*
+X021173Y032596D01*
+X021740Y032556D01*
+X022304Y032488D01*
+X022865Y032394D01*
+X023420Y032273D01*
+X023969Y032126D01*
+X024510Y031953D01*
+X025043Y031755D01*
+X025565Y031531D01*
+X026076Y031283D01*
+X026575Y031010D01*
+X027060Y030715D01*
+X027531Y030396D01*
+X027986Y030055D01*
+X028424Y029694D01*
+X028845Y029311D01*
+X029246Y028910D01*
+X029629Y028489D01*
+X029991Y028051D01*
+X030331Y027596D01*
+X030650Y027125D01*
+X030945Y026640D01*
+X031218Y026141D01*
+X031466Y025630D01*
+X031690Y025108D01*
+X031888Y024575D01*
+X032061Y024034D01*
+X032208Y023485D01*
+X032329Y022930D01*
+X032423Y022369D01*
+X032491Y021805D01*
+X032531Y021238D01*
+X032545Y020670D01*
+X027865Y020605D02*
+X027857Y020263D01*
+X027832Y019921D01*
+X027792Y019581D01*
+X027735Y019243D01*
+X027662Y018909D01*
+X027574Y018578D01*
+X027469Y018252D01*
+X027350Y017931D01*
+X027215Y017616D01*
+X027065Y017308D01*
+X026901Y017007D01*
+X026723Y016715D01*
+X026531Y016431D01*
+X026326Y016157D01*
+X026108Y015893D01*
+X025877Y015640D01*
+X025635Y015398D01*
+X025382Y015167D01*
+X025118Y014949D01*
+X024843Y014744D01*
+X024560Y014552D01*
+X024267Y014374D01*
+X023967Y014210D01*
+X023659Y014060D01*
+X023344Y013925D01*
+X023023Y013806D01*
+X022697Y013701D01*
+X022366Y013613D01*
+X022032Y013540D01*
+X021694Y013483D01*
+X021354Y013443D01*
+X021012Y013418D01*
+X020670Y013410D01*
+X020605Y003530D02*
+X019796Y003549D01*
+X018988Y003607D01*
+X018184Y003703D01*
+X017386Y003837D01*
+X016595Y004009D01*
+X015813Y004219D01*
+X015042Y004466D01*
+X014283Y004748D01*
+X013539Y005067D01*
+X012811Y005421D01*
+X012100Y005809D01*
+X011409Y006230D01*
+X010738Y006684D01*
+X010090Y007169D01*
+X009466Y007685D01*
+X008867Y008229D01*
+X008294Y008802D01*
+X007750Y009401D01*
+X007234Y010025D01*
+X006749Y010673D01*
+X006295Y011344D01*
+X005874Y012035D01*
+X005486Y012746D01*
+X005132Y013474D01*
+X004813Y014218D01*
+X004531Y014977D01*
+X004284Y015748D01*
+X004074Y016530D01*
+X003902Y017321D01*
+X003768Y018119D01*
+X003672Y018923D01*
+X003614Y019731D01*
+X003595Y020540D01*
+X009835Y020605D02*
+X009847Y021114D01*
+X009883Y021623D01*
+X009944Y022128D01*
+X010028Y022631D01*
+X010137Y023129D01*
+X010269Y023621D01*
+X010424Y024106D01*
+X010602Y024584D01*
+X010802Y025052D01*
+X011025Y025510D01*
+X011269Y025958D01*
+X011534Y026393D01*
+X011820Y026815D01*
+X012125Y027222D01*
+X012450Y027615D01*
+X012792Y027992D01*
+X013153Y028353D01*
+X013530Y028695D01*
+X013923Y029020D01*
+X014331Y029325D01*
+X014752Y029611D01*
+X015188Y029876D01*
+X015635Y030120D01*
+X016093Y030343D01*
+X016561Y030543D01*
+X017039Y030721D01*
+X017524Y030876D01*
+X018016Y031008D01*
+X018514Y031117D01*
+X019017Y031201D01*
+X019522Y031262D01*
+X020031Y031298D01*
+X020540Y031310D01*
+X020605Y030010D02*
+X021049Y029999D01*
+X021493Y029968D01*
+X021934Y029915D01*
+X022373Y029841D01*
+X022807Y029747D01*
+X023236Y029632D01*
+X023660Y029496D01*
+X024076Y029341D01*
+X024485Y029166D01*
+X024885Y028972D01*
+X025275Y028759D01*
+X025655Y028527D01*
+X026023Y028278D01*
+X026379Y028012D01*
+X026721Y027729D01*
+X027050Y027430D01*
+X027365Y027115D01*
+X027664Y026786D01*
+X027947Y026444D01*
+X028213Y026088D01*
+X028462Y025720D01*
+X028694Y025340D01*
+X028907Y024950D01*
+X029101Y024550D01*
+X029276Y024141D01*
+X029431Y023725D01*
+X029567Y023301D01*
+X029682Y022872D01*
+X029776Y022438D01*
+X029850Y021999D01*
+X029903Y021558D01*
+X029934Y021114D01*
+X029945Y020670D01*
+X033325Y020605D02*
+X033310Y019984D01*
+X033264Y019365D01*
+X033188Y018748D01*
+X033082Y018136D01*
+X032946Y017530D01*
+X032780Y016931D01*
+X032585Y016342D01*
+X032362Y015762D01*
+X032110Y015194D01*
+X031831Y014639D01*
+X031525Y014099D01*
+X031192Y013574D01*
+X030835Y013066D01*
+X030452Y012577D01*
+X030047Y012106D01*
+X029618Y011657D01*
+X029169Y011228D01*
+X028698Y010823D01*
+X028209Y010440D01*
+X027701Y010083D01*
+X027176Y009750D01*
+X026636Y009444D01*
+X026081Y009165D01*
+X025513Y008913D01*
+X024933Y008690D01*
+X024344Y008495D01*
+X023745Y008329D01*
+X023139Y008193D01*
+X022527Y008087D01*
+X021910Y008011D01*
+X021291Y007965D01*
+X020670Y007950D01*
+X020605Y004310D02*
+X019833Y004328D01*
+X019062Y004383D01*
+X018295Y004475D01*
+X017533Y004603D01*
+X016779Y004767D01*
+X016032Y004967D01*
+X015297Y005203D01*
+X014573Y005473D01*
+X013863Y005777D01*
+X013168Y006114D01*
+X012490Y006484D01*
+X011830Y006886D01*
+X011191Y007319D01*
+X010572Y007782D01*
+X009977Y008274D01*
+X009405Y008794D01*
+X008859Y009340D01*
+X008339Y009912D01*
+X007847Y010507D01*
+X007384Y011126D01*
+X006951Y011765D01*
+X006549Y012425D01*
+X006179Y013103D01*
+X005842Y013798D01*
+X005538Y014508D01*
+X005268Y015232D01*
+X005032Y015968D01*
+X004832Y016714D01*
+X004668Y017468D01*
+X004540Y018230D01*
+X004448Y018997D01*
+X004393Y019768D01*
+X004375Y020540D01*
+X012695Y020605D02*
+X012704Y020978D01*
+X012731Y021351D01*
+X012775Y021721D01*
+X012837Y022090D01*
+X012916Y022455D01*
+X013013Y022815D01*
+X013126Y023171D01*
+X013257Y023521D01*
+X013404Y023864D01*
+X013567Y024200D01*
+X013746Y024528D01*
+X013940Y024846D01*
+X014150Y025156D01*
+X014373Y025454D01*
+X014611Y025742D01*
+X014862Y026019D01*
+X015126Y026283D01*
+X015403Y026534D01*
+X015691Y026772D01*
+X015989Y026995D01*
+X016299Y027205D01*
+X016618Y027399D01*
+X016945Y027578D01*
+X017281Y027741D01*
+X017624Y027888D01*
+X017974Y028019D01*
+X018330Y028132D01*
+X018691Y028229D01*
+X019055Y028308D01*
+X019424Y028370D01*
+X019794Y028414D01*
+X020167Y028441D01*
+X020540Y028450D01*
+X020605Y028970D02*
+X021000Y028961D01*
+X021394Y028932D01*
+X021786Y028886D01*
+X022176Y028820D01*
+X022562Y028736D01*
+X022943Y028634D01*
+X023320Y028514D01*
+X023690Y028375D01*
+X024053Y028220D01*
+X024408Y028047D01*
+X024755Y027858D01*
+X025092Y027652D01*
+X025419Y027431D01*
+X025736Y027194D01*
+X026040Y026943D01*
+X026333Y026677D01*
+X026612Y026398D01*
+X026878Y026105D01*
+X027129Y025801D01*
+X027366Y025484D01*
+X027587Y025157D01*
+X027793Y024820D01*
+X027982Y024473D01*
+X028155Y024118D01*
+X028310Y023755D01*
+X028449Y023385D01*
+X028569Y023008D01*
+X028671Y022627D01*
+X028755Y022241D01*
+X028821Y021851D01*
+X028867Y021459D01*
+X028896Y021065D01*
+X028905Y020670D01*
+X040085Y020605D02*
+X040063Y019681D01*
+X039997Y018759D01*
+X039887Y017842D01*
+X039734Y016931D01*
+X039538Y016028D01*
+X039299Y015135D01*
+X039017Y014255D01*
+X038694Y013389D01*
+X038331Y012540D01*
+X037927Y011709D01*
+X037484Y010898D01*
+X037003Y010108D01*
+X036485Y009343D01*
+X035931Y008603D01*
+X035343Y007891D01*
+X034721Y007207D01*
+X034068Y006554D01*
+X033384Y005932D01*
+X032672Y005344D01*
+X031932Y004790D01*
+X031167Y004272D01*
+X030378Y003791D01*
+X029566Y003348D01*
+X028735Y002944D01*
+X027886Y002581D01*
+X027020Y002258D01*
+X026140Y001976D01*
+X025247Y001737D01*
+X024344Y001541D01*
+X023433Y001388D01*
+X022516Y001278D01*
+X021594Y001212D01*
+X020670Y001190D01*
+X020605Y005350D02*
+X019882Y005367D01*
+X019161Y005419D01*
+X018443Y005505D01*
+X017730Y005625D01*
+X017024Y005778D01*
+X016325Y005965D01*
+X015637Y006185D01*
+X014959Y006438D01*
+X014295Y006723D01*
+X013645Y007039D01*
+X013010Y007385D01*
+X012393Y007761D01*
+X011794Y008167D01*
+X011215Y008600D01*
+X010658Y009060D01*
+X010123Y009546D01*
+X009611Y010058D01*
+X009125Y010593D01*
+X008665Y011150D01*
+X008232Y011729D01*
+X007826Y012328D01*
+X007450Y012945D01*
+X007104Y013580D01*
+X006788Y014230D01*
+X006503Y014894D01*
+X006250Y015572D01*
+X006030Y016261D01*
+X005843Y016959D01*
+X005689Y017665D01*
+X005570Y018378D01*
+X005484Y019096D01*
+X005432Y019817D01*
+X005415Y020540D01*
+X012955Y020605D02*
+X012964Y020966D01*
+X012989Y021326D01*
+X013032Y021684D01*
+X013092Y022040D01*
+X013169Y022393D01*
+X013262Y022742D01*
+X013372Y023086D01*
+X013498Y023424D01*
+X013640Y023756D01*
+X013798Y024081D01*
+X013971Y024397D01*
+X014159Y024706D01*
+X014361Y025005D01*
+X014578Y025294D01*
+X014808Y025572D01*
+X015050Y025839D01*
+X015306Y026095D01*
+X015573Y026337D01*
+X015851Y026567D01*
+X016140Y026784D01*
+X016439Y026986D01*
+X016748Y027174D01*
+X017064Y027347D01*
+X017389Y027505D01*
+X017721Y027647D01*
+X018059Y027773D01*
+X018403Y027883D01*
+X018752Y027976D01*
+X019105Y028053D01*
+X019461Y028113D01*
+X019819Y028156D01*
+X020179Y028181D01*
+X020540Y028190D01*
+X020605Y039890D02*
+X021520Y039868D01*
+X022432Y039803D01*
+X023340Y039694D01*
+X024242Y039543D01*
+X025136Y039348D01*
+X026020Y039111D01*
+X026891Y038833D01*
+X027748Y038513D01*
+X028589Y038153D01*
+X029412Y037753D01*
+X030215Y037315D01*
+X030996Y036839D01*
+X031754Y036326D01*
+X032486Y035778D01*
+X033191Y035195D01*
+X033868Y034580D01*
+X034515Y033933D01*
+X035131Y033256D01*
+X035713Y032551D01*
+X036261Y031819D01*
+X036774Y031061D01*
+X037250Y030280D01*
+X037688Y029477D01*
+X038088Y028654D01*
+X038448Y027813D01*
+X038768Y026956D01*
+X039046Y026085D01*
+X039283Y025201D01*
+X039478Y024307D01*
+X039629Y023405D01*
+X039738Y022497D01*
+X039803Y021584D01*
+X039825Y020670D01*
+X040605Y020605D02*
+X040582Y019656D01*
+X040515Y018710D01*
+X040402Y017768D01*
+X040245Y016832D01*
+X040043Y015905D01*
+X039797Y014989D01*
+X039509Y014085D01*
+X039177Y013196D01*
+X038804Y012324D01*
+X038389Y011470D01*
+X037934Y010638D01*
+X037440Y009827D01*
+X036909Y009042D01*
+X036340Y008282D01*
+X035736Y007550D01*
+X035098Y006848D01*
+X034427Y006177D01*
+X033725Y005539D01*
+X032993Y004935D01*
+X032233Y004366D01*
+X031448Y003835D01*
+X030638Y003341D01*
+X029805Y002886D01*
+X028951Y002471D01*
+X028079Y002098D01*
+X027190Y001766D01*
+X026286Y001478D01*
+X025370Y001232D01*
+X024443Y001030D01*
+X023507Y000873D01*
+X022565Y000760D01*
+X021619Y000693D01*
+X020670Y000670D01*
+X020605Y009250D02*
+X020068Y009263D01*
+X019532Y009301D01*
+X018998Y009365D01*
+X018468Y009454D01*
+X017943Y009568D01*
+X017424Y009707D01*
+X016912Y009871D01*
+X016409Y010059D01*
+X015915Y010270D01*
+X015432Y010505D01*
+X014960Y010763D01*
+X014501Y011042D01*
+X014056Y011343D01*
+X013626Y011665D01*
+X013212Y012008D01*
+X012814Y012369D01*
+X012434Y012749D01*
+X012073Y013147D01*
+X011730Y013561D01*
+X011408Y013991D01*
+X011107Y014436D01*
+X010828Y014895D01*
+X010570Y015367D01*
+X010335Y015850D01*
+X010124Y016344D01*
+X009936Y016847D01*
+X009772Y017359D01*
+X009633Y017878D01*
+X009519Y018403D01*
+X009430Y018933D01*
+X009366Y019467D01*
+X009328Y020003D01*
+X009315Y020540D01*
+X007495Y020605D02*
+X007510Y021226D01*
+X007554Y021845D01*
+X007628Y022461D01*
+X007731Y023074D01*
+X007863Y023680D01*
+X008023Y024280D01*
+X008212Y024872D01*
+X008429Y025453D01*
+X008674Y026024D01*
+X008945Y026583D01*
+X009243Y027128D01*
+X009566Y027658D01*
+X009914Y028172D01*
+X010286Y028669D01*
+X010681Y029148D01*
+X011099Y029607D01*
+X011538Y030046D01*
+X011997Y030464D01*
+X012476Y030859D01*
+X012973Y031231D01*
+X013487Y031579D01*
+X014017Y031902D01*
+X014562Y032200D01*
+X015121Y032471D01*
+X015692Y032716D01*
+X016273Y032933D01*
+X016865Y033122D01*
+X017465Y033282D01*
+X018071Y033414D01*
+X018684Y033517D01*
+X019300Y033591D01*
+X019919Y033635D01*
+X020540Y033650D01*
+X020605Y038850D02*
+X021470Y038829D01*
+X022333Y038768D01*
+X023192Y038665D01*
+X024046Y038521D01*
+X024891Y038338D01*
+X025727Y038114D01*
+X026551Y037850D01*
+X027362Y037548D01*
+X028157Y037207D01*
+X028936Y036829D01*
+X029695Y036414D01*
+X030434Y035964D01*
+X031150Y035479D01*
+X031843Y034960D01*
+X032510Y034410D01*
+X033151Y033827D01*
+X033762Y033216D01*
+X034345Y032575D01*
+X034895Y031908D01*
+X035414Y031215D01*
+X035899Y030499D01*
+X036349Y029760D01*
+X036764Y029001D01*
+X037142Y028222D01*
+X037483Y027427D01*
+X037785Y026616D01*
+X038049Y025792D01*
+X038273Y024956D01*
+X038456Y024111D01*
+X038600Y023257D01*
+X038703Y022398D01*
+X038764Y021535D01*
+X038785Y020670D01*
+X036185Y020605D02*
+X036167Y019867D01*
+X036115Y019130D01*
+X036027Y018397D01*
+X035905Y017669D01*
+X035748Y016947D01*
+X035557Y016234D01*
+X035332Y015531D01*
+X035074Y014839D01*
+X034783Y014160D01*
+X034460Y013496D01*
+X034106Y012848D01*
+X033722Y012217D01*
+X033308Y011605D01*
+X032866Y011014D01*
+X032395Y010445D01*
+X031899Y009898D01*
+X031377Y009376D01*
+X030830Y008880D01*
+X030261Y008409D01*
+X029670Y007967D01*
+X029058Y007553D01*
+X028428Y007169D01*
+X027779Y006815D01*
+X027115Y006492D01*
+X026436Y006201D01*
+X025744Y005943D01*
+X025041Y005718D01*
+X024328Y005527D01*
+X023606Y005370D01*
+X022878Y005248D01*
+X022145Y005160D01*
+X021408Y005108D01*
+X020670Y005090D01*
+X020605Y006390D02*
+X019911Y006407D01*
+X019218Y006458D01*
+X018529Y006543D01*
+X017844Y006662D01*
+X017167Y006814D01*
+X016497Y006999D01*
+X015838Y007217D01*
+X015190Y007467D01*
+X014555Y007749D01*
+X013935Y008061D01*
+X013330Y008403D01*
+X012744Y008775D01*
+X012176Y009175D01*
+X011628Y009602D01*
+X011102Y010056D01*
+X010599Y010534D01*
+X010121Y011037D01*
+X009667Y011563D01*
+X009240Y012111D01*
+X008840Y012679D01*
+X008468Y013265D01*
+X008126Y013870D01*
+X007814Y014490D01*
+X007532Y015125D01*
+X007282Y015773D01*
+X007064Y016432D01*
+X006879Y017102D01*
+X006727Y017779D01*
+X006608Y018464D01*
+X006523Y019153D01*
+X006472Y019846D01*
+X006455Y020540D01*
+X010875Y020605D02*
+X010886Y021065D01*
+X010919Y021524D01*
+X010973Y021980D01*
+X011050Y022434D01*
+X011147Y022884D01*
+X011267Y023328D01*
+X011407Y023766D01*
+X011567Y024197D01*
+X011748Y024620D01*
+X011949Y025034D01*
+X012170Y025438D01*
+X012409Y025830D01*
+X012667Y026211D01*
+X012943Y026580D01*
+X013236Y026934D01*
+X013545Y027275D01*
+X013870Y027600D01*
+X014211Y027909D01*
+X014566Y028202D01*
+X014934Y028478D01*
+X015315Y028736D01*
+X015708Y028975D01*
+X016111Y029196D01*
+X016525Y029397D01*
+X016948Y029578D01*
+X017379Y029738D01*
+X017817Y029879D01*
+X018261Y029998D01*
+X018711Y030095D01*
+X019165Y030172D01*
+X019621Y030226D01*
+X020080Y030259D01*
+X020540Y030270D01*
+X020605Y033390D02*
+X021210Y033376D01*
+X021814Y033332D01*
+X022415Y033261D01*
+X023012Y033160D01*
+X023604Y033031D01*
+X024189Y032875D01*
+X024765Y032690D01*
+X025333Y032479D01*
+X025889Y032241D01*
+X026434Y031976D01*
+X026965Y031686D01*
+X027482Y031371D01*
+X027983Y031031D01*
+X028468Y030669D01*
+X028935Y030283D01*
+X029383Y029876D01*
+X029811Y029448D01*
+X030218Y029000D01*
+X030604Y028533D01*
+X030966Y028048D01*
+X031306Y027547D01*
+X031621Y027030D01*
+X031911Y026499D01*
+X032176Y025954D01*
+X032414Y025398D01*
+X032625Y024830D01*
+X032810Y024254D01*
+X032966Y023669D01*
+X033095Y023077D01*
+X033196Y022480D01*
+X033267Y021879D01*
+X033311Y021275D01*
+X033325Y020670D01*
+X030725Y020605D02*
+X030713Y020112D01*
+X030677Y019619D01*
+X030616Y019130D01*
+X030532Y018643D01*
+X030424Y018162D01*
+X030292Y017686D01*
+X030137Y017218D01*
+X029960Y016757D01*
+X029760Y016306D01*
+X029538Y015865D01*
+X029294Y015436D01*
+X029030Y015019D01*
+X028746Y014615D01*
+X028443Y014226D01*
+X028120Y013852D01*
+X027780Y013495D01*
+X027423Y013155D01*
+X027049Y012832D01*
+X026660Y012529D01*
+X026256Y012245D01*
+X025839Y011981D01*
+X025410Y011737D01*
+X024969Y011515D01*
+X024518Y011315D01*
+X024057Y011138D01*
+X023589Y010983D01*
+X023113Y010851D01*
+X022632Y010743D01*
+X022145Y010659D01*
+X021656Y010598D01*
+X021163Y010562D01*
+X020670Y010550D01*
+X020605Y010550D02*
+X020130Y010561D01*
+X019655Y010595D01*
+X019183Y010652D01*
+X018714Y010731D01*
+X018250Y010832D01*
+X017790Y010955D01*
+X017338Y011099D01*
+X016892Y011266D01*
+X016455Y011453D01*
+X016027Y011661D01*
+X015610Y011888D01*
+X015204Y012136D01*
+X014810Y012402D01*
+X014430Y012687D01*
+X014063Y012990D01*
+X013711Y013310D01*
+X013375Y013646D01*
+X013055Y013998D01*
+X012752Y014365D01*
+X012467Y014745D01*
+X012201Y015139D01*
+X011953Y015545D01*
+X011726Y015962D01*
+X011518Y016390D01*
+X011331Y016827D01*
+X011164Y017273D01*
+X011020Y017726D01*
+X010897Y018185D01*
+X010796Y018649D01*
+X010717Y019118D01*
+X010660Y019590D01*
+X010626Y020065D01*
+X010615Y020540D01*
+X009055Y020605D02*
+X009068Y021151D01*
+X009107Y021697D01*
+X009172Y022239D01*
+X009263Y022779D01*
+X009379Y023313D01*
+X009520Y023841D01*
+X009687Y024361D01*
+X009878Y024874D01*
+X010093Y025376D01*
+X010332Y025868D01*
+X010594Y026348D01*
+X010878Y026814D01*
+X011185Y027267D01*
+X011512Y027705D01*
+X011860Y028126D01*
+X012228Y028531D01*
+X012614Y028917D01*
+X013019Y029285D01*
+X013440Y029633D01*
+X013878Y029960D01*
+X014331Y030267D01*
+X014798Y030551D01*
+X015277Y030813D01*
+X015769Y031052D01*
+X016272Y031267D01*
+X016784Y031458D01*
+X017304Y031625D01*
+X017832Y031766D01*
+X018367Y031882D01*
+X018906Y031973D01*
+X019448Y032038D01*
+X019994Y032077D01*
+X020540Y032090D01*
+X020605Y030270D02*
+X021062Y030259D01*
+X021518Y030227D01*
+X021971Y030172D01*
+X022422Y030097D01*
+X022868Y029999D01*
+X023310Y029881D01*
+X023745Y029742D01*
+X024173Y029582D01*
+X024593Y029402D01*
+X025004Y029203D01*
+X025405Y028984D01*
+X025795Y028746D01*
+X026174Y028490D01*
+X026539Y028216D01*
+X026892Y027925D01*
+X027230Y027618D01*
+X027553Y027295D01*
+X027860Y026957D01*
+X028151Y026604D01*
+X028425Y026239D01*
+X028681Y025860D01*
+X028919Y025470D01*
+X029138Y025069D01*
+X029337Y024658D01*
+X029517Y024238D01*
+X029677Y023810D01*
+X029816Y023375D01*
+X029934Y022933D01*
+X030032Y022487D01*
+X030107Y022036D01*
+X030162Y021583D01*
+X030194Y021127D01*
+X030205Y020670D01*
+X036965Y020605D02*
+X036947Y019830D01*
+X036891Y019056D01*
+X036799Y018286D01*
+X036671Y017521D01*
+X036506Y016763D01*
+X036305Y016014D01*
+X036069Y015275D01*
+X035798Y014549D01*
+X035492Y013836D01*
+X035154Y013138D01*
+X034782Y012457D01*
+X034378Y011795D01*
+X033944Y011153D01*
+X033479Y010532D01*
+X032985Y009934D01*
+X032463Y009360D01*
+X031915Y008812D01*
+X031341Y008290D01*
+X030743Y007796D01*
+X030122Y007331D01*
+X029480Y006897D01*
+X028817Y006493D01*
+X028137Y006121D01*
+X027439Y005783D01*
+X026726Y005477D01*
+X026000Y005206D01*
+X025261Y004970D01*
+X024512Y004769D01*
+X023754Y004604D01*
+X022989Y004476D01*
+X022219Y004384D01*
+X021445Y004328D01*
+X020670Y004310D01*
+X020605Y011070D02*
+X020140Y011081D01*
+X019677Y011116D01*
+X019215Y011173D01*
+X018757Y011252D01*
+X018304Y011354D01*
+X017856Y011478D01*
+X017415Y011624D01*
+X016981Y011791D01*
+X016556Y011979D01*
+X016141Y012188D01*
+X015736Y012417D01*
+X015344Y012666D01*
+X014964Y012934D01*
+X014597Y013220D01*
+X014245Y013523D01*
+X013909Y013844D01*
+X013588Y014180D01*
+X013285Y014532D01*
+X012999Y014899D01*
+X012731Y015279D01*
+X012482Y015671D01*
+X012253Y016076D01*
+X012044Y016491D01*
+X011856Y016916D01*
+X011689Y017350D01*
+X011543Y017791D01*
+X011419Y018239D01*
+X011317Y018692D01*
+X011237Y019150D01*
+X011181Y019612D01*
+X011146Y020075D01*
+X011135Y020540D01*
+X000735Y020605D02*
+X000759Y021577D01*
+X000830Y022546D01*
+X000949Y023511D01*
+X001116Y024469D01*
+X001329Y025417D01*
+X001588Y026354D01*
+X001893Y027277D01*
+X002243Y028184D01*
+X002636Y029073D01*
+X003074Y029941D01*
+X003553Y030787D01*
+X004073Y031608D01*
+X004632Y032403D01*
+X005231Y033169D01*
+X005865Y033905D01*
+X006536Y034609D01*
+X007240Y035280D01*
+X007976Y035914D01*
+X008742Y036513D01*
+X009537Y037072D01*
+X010358Y037592D01*
+X011204Y038071D01*
+X012072Y038508D01*
+X012961Y038902D01*
+X013868Y039252D01*
+X014791Y039557D01*
+X015728Y039816D01*
+X016676Y040029D01*
+X017634Y040196D01*
+X018599Y040315D01*
+X019568Y040386D01*
+X020540Y040410D01*
+X020605Y028710D02*
+X020988Y028701D01*
+X021369Y028674D01*
+X021749Y028628D01*
+X022127Y028565D01*
+X022501Y028483D01*
+X022870Y028384D01*
+X023235Y028268D01*
+X023593Y028134D01*
+X023945Y027983D01*
+X024289Y027816D01*
+X024625Y027633D01*
+X024952Y027434D01*
+X025269Y027219D01*
+X025575Y026990D01*
+X025870Y026746D01*
+X026153Y026489D01*
+X026424Y026218D01*
+X026681Y025935D01*
+X026925Y025640D01*
+X027154Y025334D01*
+X027369Y025017D01*
+X027568Y024690D01*
+X027751Y024354D01*
+X027918Y024010D01*
+X028069Y023658D01*
+X028203Y023300D01*
+X028319Y022935D01*
+X028418Y022565D01*
+X028500Y022192D01*
+X028563Y021814D01*
+X028609Y021434D01*
+X028636Y021053D01*
+X028645Y020670D01*
+X036705Y020605D02*
+X036686Y019818D01*
+X036628Y019033D01*
+X036531Y018252D01*
+X036397Y017477D01*
+X036224Y016709D01*
+X036015Y015950D01*
+X035768Y015203D01*
+X035484Y014469D01*
+X035165Y013749D01*
+X034812Y013046D01*
+X034424Y012361D01*
+X034003Y011696D01*
+X033549Y011053D01*
+X033065Y010432D01*
+X032551Y009837D01*
+X032008Y009267D01*
+X031438Y008724D01*
+X030843Y008210D01*
+X030222Y007726D01*
+X029579Y007272D01*
+X028914Y006851D01*
+X028229Y006463D01*
+X027526Y006110D01*
+X026806Y005791D01*
+X026072Y005507D01*
+X025325Y005260D01*
+X024566Y005051D01*
+X023798Y004878D01*
+X023023Y004744D01*
+X022242Y004647D01*
+X021457Y004589D01*
+X020670Y004570D01*
+X020605Y012370D02*
+X020204Y012380D01*
+X019804Y012409D01*
+X019406Y012458D01*
+X019011Y012527D01*
+X018620Y012615D01*
+X018233Y012722D01*
+X017853Y012848D01*
+X017478Y012992D01*
+X017112Y013154D01*
+X016754Y013335D01*
+X016405Y013532D01*
+X016066Y013747D01*
+X015738Y013978D01*
+X015422Y014225D01*
+X015118Y014486D01*
+X014828Y014763D01*
+X014551Y015053D01*
+X014289Y015357D01*
+X014043Y015673D01*
+X013812Y016001D01*
+X013597Y016340D01*
+X013400Y016689D01*
+X013219Y017047D01*
+X013057Y017413D01*
+X012913Y017788D01*
+X012787Y018168D01*
+X012680Y018555D01*
+X012592Y018946D01*
+X012523Y019341D01*
+X012474Y019739D01*
+X012445Y020139D01*
+X012435Y020540D01*
+X008795Y020605D02*
+X008809Y021181D01*
+X008852Y021756D01*
+X008922Y022328D01*
+X009021Y022896D01*
+X009147Y023459D01*
+X009301Y024014D01*
+X009482Y024562D01*
+X009689Y025100D01*
+X009923Y025627D01*
+X010182Y026142D01*
+X010466Y026643D01*
+X010774Y027130D01*
+X011106Y027601D01*
+X011461Y028056D01*
+X011838Y028492D01*
+X012235Y028910D01*
+X012653Y029307D01*
+X013089Y029684D01*
+X013544Y030039D01*
+X014015Y030371D01*
+X014502Y030679D01*
+X015003Y030963D01*
+X015518Y031222D01*
+X016045Y031456D01*
+X016583Y031663D01*
+X017131Y031844D01*
+X017686Y031998D01*
+X018249Y032124D01*
+X018817Y032223D01*
+X019389Y032293D01*
+X019964Y032336D01*
+X020540Y032350D01*
+X020605Y034690D02*
+X021293Y034673D01*
+X021979Y034622D01*
+X022662Y034538D01*
+X023340Y034421D01*
+X024012Y034270D01*
+X024675Y034086D01*
+X025328Y033870D01*
+X025970Y033623D01*
+X026599Y033344D01*
+X027214Y033035D01*
+X027813Y032695D01*
+X028394Y032327D01*
+X028957Y031931D01*
+X029499Y031508D01*
+X030020Y031058D01*
+X030519Y030584D01*
+X030993Y030085D01*
+X031443Y029564D01*
+X031866Y029022D01*
+X032262Y028459D01*
+X032630Y027878D01*
+X032970Y027279D01*
+X033279Y026664D01*
+X033558Y026035D01*
+X033805Y025393D01*
+X034021Y024740D01*
+X034205Y024077D01*
+X034356Y023405D01*
+X034473Y022727D01*
+X034557Y022044D01*
+X034608Y021358D01*
+X034625Y020670D01*
+X029425Y020605D02*
+X029414Y020175D01*
+X029383Y019747D01*
+X029330Y019320D01*
+X029257Y018897D01*
+X029163Y018478D01*
+X029048Y018064D01*
+X028913Y017655D01*
+X028759Y017255D01*
+X028584Y016862D01*
+X028391Y016478D01*
+X028179Y016104D01*
+X027950Y015741D01*
+X027702Y015390D01*
+X027438Y015051D01*
+X027157Y014725D01*
+X026861Y014414D01*
+X026550Y014118D01*
+X026224Y013837D01*
+X025885Y013573D01*
+X025534Y013325D01*
+X025171Y013096D01*
+X024797Y012884D01*
+X024413Y012691D01*
+X024020Y012516D01*
+X023620Y012362D01*
+X023211Y012227D01*
+X022797Y012112D01*
+X022378Y012018D01*
+X021955Y011945D01*
+X021528Y011892D01*
+X021100Y011861D01*
+X020670Y011850D01*
+X020605Y013410D02*
+X020255Y013419D01*
+X019906Y013444D01*
+X019559Y013487D01*
+X019214Y013547D01*
+X018873Y013624D01*
+X018535Y013717D01*
+X018203Y013827D01*
+X017876Y013953D01*
+X017557Y014095D01*
+X017244Y014252D01*
+X016939Y014424D01*
+X016644Y014612D01*
+X016358Y014813D01*
+X016082Y015028D01*
+X015817Y015257D01*
+X015563Y015498D01*
+X015322Y015752D01*
+X015093Y016017D01*
+X014878Y016293D01*
+X014677Y016579D01*
+X014489Y016874D01*
+X014317Y017179D01*
+X014160Y017492D01*
+X014018Y017811D01*
+X013892Y018138D01*
+X013782Y018470D01*
+X013689Y018808D01*
+X013612Y019149D01*
+X013552Y019494D01*
+X013509Y019841D01*
+X013484Y020190D01*
+X013475Y020540D01*
+X002035Y020605D02*
+X002057Y021513D01*
+X002124Y022419D01*
+X002235Y023320D01*
+X002391Y024215D01*
+X002590Y025101D01*
+X002832Y025977D01*
+X003117Y026839D01*
+X003444Y027687D01*
+X003812Y028517D01*
+X004220Y029328D01*
+X004668Y030118D01*
+X005154Y030886D01*
+X005677Y031628D01*
+X006235Y032344D01*
+X006829Y033032D01*
+X007455Y033690D01*
+X008113Y034316D01*
+X008801Y034910D01*
+X009517Y035468D01*
+X010259Y035991D01*
+X011027Y036477D01*
+X011817Y036925D01*
+X012628Y037333D01*
+X013458Y037701D01*
+X014306Y038028D01*
+X015168Y038313D01*
+X016044Y038555D01*
+X016930Y038754D01*
+X017825Y038910D01*
+X018726Y039021D01*
+X019632Y039088D01*
+X020540Y039110D01*
+X020605Y039110D02*
+X021510Y039088D01*
+X022412Y039021D01*
+X023311Y038910D01*
+X024202Y038756D01*
+X025086Y038557D01*
+X025958Y038316D01*
+X026817Y038032D01*
+X027662Y037706D01*
+X028489Y037340D01*
+X029298Y036933D01*
+X030085Y036487D01*
+X030850Y036002D01*
+X031590Y035481D01*
+X032303Y034924D01*
+X032989Y034333D01*
+X033644Y033709D01*
+X034268Y033054D01*
+X034859Y032368D01*
+X035416Y031655D01*
+X035937Y030915D01*
+X036422Y030150D01*
+X036868Y029363D01*
+X037275Y028554D01*
+X037641Y027727D01*
+X037967Y026882D01*
+X038251Y026023D01*
+X038492Y025151D01*
+X038691Y024267D01*
+X038845Y023376D01*
+X038956Y022477D01*
+X039023Y021575D01*
+X039045Y020670D01*
+X028905Y020605D02*
+X028895Y020201D01*
+X028865Y019798D01*
+X028816Y019397D01*
+X028747Y018998D01*
+X028658Y018604D01*
+X028550Y018214D01*
+X028424Y017831D01*
+X028278Y017454D01*
+X028114Y017084D01*
+X027933Y016723D01*
+X027733Y016371D01*
+X027517Y016030D01*
+X027284Y015699D01*
+X027036Y015381D01*
+X026772Y015075D01*
+X026493Y014782D01*
+X026200Y014503D01*
+X025894Y014239D01*
+X025576Y013991D01*
+X025245Y013758D01*
+X024904Y013542D01*
+X024552Y013342D01*
+X024191Y013161D01*
+X023821Y012997D01*
+X023444Y012851D01*
+X023061Y012725D01*
+X022671Y012617D01*
+X022277Y012528D01*
+X021878Y012459D01*
+X021477Y012410D01*
+X021074Y012380D01*
+X020670Y012370D01*
+X020605Y001710D02*
+X019681Y001733D01*
+X018759Y001801D01*
+X017842Y001914D01*
+X016931Y002072D01*
+X016030Y002274D01*
+X015139Y002521D01*
+X014261Y002811D01*
+X013399Y003143D01*
+X012554Y003518D01*
+X011729Y003933D01*
+X010924Y004389D01*
+X010144Y004883D01*
+X009388Y005416D01*
+X008659Y005984D01*
+X007960Y006588D01*
+X007290Y007225D01*
+X006653Y007895D01*
+X006049Y008594D01*
+X005481Y009323D01*
+X004948Y010079D01*
+X004454Y010859D01*
+X003998Y011664D01*
+X003583Y012489D01*
+X003208Y013334D01*
+X002876Y014196D01*
+X002586Y015074D01*
+X002339Y015965D01*
+X002137Y016866D01*
+X001979Y017777D01*
+X001866Y018694D01*
+X001798Y019616D01*
+X001775Y020540D01*
+X010095Y020605D02*
+X010107Y021102D01*
+X010142Y021598D01*
+X010201Y022091D01*
+X010284Y022582D01*
+X010389Y023067D01*
+X010518Y023548D01*
+X010669Y024021D01*
+X010843Y024487D01*
+X011039Y024944D01*
+X011256Y025391D01*
+X011494Y025827D01*
+X011753Y026252D01*
+X012032Y026664D01*
+X012330Y027062D01*
+X012646Y027445D01*
+X012981Y027813D01*
+X013332Y028164D01*
+X013700Y028499D01*
+X014083Y028815D01*
+X014481Y029113D01*
+X014893Y029392D01*
+X015318Y029651D01*
+X015754Y029889D01*
+X016201Y030106D01*
+X016658Y030302D01*
+X017124Y030476D01*
+X017597Y030627D01*
+X018078Y030756D01*
+X018563Y030861D01*
+X019054Y030944D01*
+X019547Y031003D01*
+X020043Y031038D01*
+X020540Y031050D01*
+X020605Y034430D02*
+X021280Y034413D01*
+X021954Y034364D01*
+X022624Y034281D01*
+X023289Y034166D01*
+X023948Y034018D01*
+X024599Y033837D01*
+X025241Y033626D01*
+X025871Y033383D01*
+X026488Y033109D01*
+X027091Y032805D01*
+X027679Y032472D01*
+X028250Y032111D01*
+X028802Y031722D01*
+X029334Y031307D01*
+X029846Y030865D01*
+X030335Y030400D01*
+X030800Y029911D01*
+X031242Y029399D01*
+X031657Y028867D01*
+X032046Y028315D01*
+X032407Y027744D01*
+X032740Y027156D01*
+X033044Y026553D01*
+X033318Y025936D01*
+X033561Y025306D01*
+X033773Y024664D01*
+X033953Y024013D01*
+X034101Y023354D01*
+X034216Y022689D01*
+X034299Y022019D01*
+X034348Y021345D01*
+X034365Y020670D01*
+X030205Y020605D02*
+X030194Y020137D01*
+X030159Y019670D01*
+X030102Y019206D01*
+X030022Y018745D01*
+X029919Y018288D01*
+X029794Y017837D01*
+X029648Y017393D01*
+X029479Y016956D01*
+X029290Y016528D01*
+X029079Y016110D01*
+X028848Y015703D01*
+X028598Y015308D01*
+X028329Y014925D01*
+X028041Y014556D01*
+X027735Y014202D01*
+X027412Y013863D01*
+X027073Y013540D01*
+X026719Y013234D01*
+X026350Y012946D01*
+X025967Y012677D01*
+X025572Y012427D01*
+X025165Y012196D01*
+X024747Y011985D01*
+X024319Y011796D01*
+X023882Y011627D01*
+X023438Y011481D01*
+X022987Y011356D01*
+X022530Y011253D01*
+X022069Y011173D01*
+X021605Y011116D01*
+X021138Y011081D01*
+X020670Y011070D01*
+X020605Y009510D02*
+X020080Y009522D01*
+X019556Y009560D01*
+X019035Y009622D01*
+X018518Y009709D01*
+X018005Y009821D01*
+X017497Y009957D01*
+X016997Y010117D01*
+X016506Y010300D01*
+X016023Y010507D01*
+X015551Y010736D01*
+X015090Y010988D01*
+X014642Y011261D01*
+X014207Y011555D01*
+X013787Y011870D01*
+X013382Y012204D01*
+X012993Y012557D01*
+X012622Y012928D01*
+X012269Y013317D01*
+X011935Y013722D01*
+X011620Y014142D01*
+X011326Y014577D01*
+X011053Y015025D01*
+X010801Y015486D01*
+X010572Y015958D01*
+X010365Y016441D01*
+X010182Y016932D01*
+X010022Y017433D01*
+X009886Y017940D01*
+X009774Y018453D01*
+X009687Y018970D01*
+X009625Y019492D01*
+X009587Y020015D01*
+X009575Y020540D01*
+X005155Y020605D02*
+X005172Y021337D01*
+X005225Y022067D01*
+X005312Y022795D01*
+X005433Y023517D01*
+X005589Y024232D01*
+X005778Y024939D01*
+X006001Y025637D01*
+X006257Y026323D01*
+X006545Y026996D01*
+X006865Y027655D01*
+X007216Y028298D01*
+X007597Y028923D01*
+X008008Y029529D01*
+X008447Y030115D01*
+X008913Y030680D01*
+X009405Y031222D01*
+X009923Y031740D01*
+X010465Y032232D01*
+X011030Y032698D01*
+X011616Y033137D01*
+X012222Y033548D01*
+X012847Y033929D01*
+X013490Y034280D01*
+X014149Y034600D01*
+X014822Y034888D01*
+X015508Y035144D01*
+X016206Y035367D01*
+X016913Y035556D01*
+X017628Y035712D01*
+X018350Y035833D01*
+X019078Y035920D01*
+X019808Y035973D01*
+X020540Y035990D01*
+X020605Y035470D02*
+X021331Y035452D01*
+X022056Y035399D01*
+X022777Y035310D01*
+X023492Y035186D01*
+X024201Y035026D01*
+X024901Y034833D01*
+X025591Y034605D01*
+X026269Y034343D01*
+X026933Y034049D01*
+X027582Y033722D01*
+X028214Y033364D01*
+X028827Y032976D01*
+X029421Y032557D01*
+X029994Y032111D01*
+X030544Y031636D01*
+X031070Y031135D01*
+X031571Y030609D01*
+X032046Y030059D01*
+X032492Y029486D01*
+X032911Y028892D01*
+X033299Y028279D01*
+X033657Y027647D01*
+X033984Y026998D01*
+X034278Y026334D01*
+X034540Y025656D01*
+X034768Y024966D01*
+X034961Y024266D01*
+X035121Y023557D01*
+X035245Y022842D01*
+X035334Y022121D01*
+X035387Y021396D01*
+X035405Y020670D01*
+X029165Y020605D02*
+X029155Y020188D01*
+X029124Y019772D01*
+X029073Y019358D01*
+X029002Y018948D01*
+X028910Y018541D01*
+X028799Y018139D01*
+X028668Y017743D01*
+X028518Y017354D01*
+X028349Y016973D01*
+X028162Y016600D01*
+X027956Y016238D01*
+X027733Y015885D01*
+X027493Y015544D01*
+X027237Y015216D01*
+X026964Y014900D01*
+X026677Y014598D01*
+X026375Y014311D01*
+X026059Y014038D01*
+X025730Y013782D01*
+X025390Y013542D01*
+X025037Y013319D01*
+X024675Y013113D01*
+X024302Y012926D01*
+X023921Y012757D01*
+X023532Y012607D01*
+X023136Y012476D01*
+X022734Y012365D01*
+X022327Y012273D01*
+X021916Y012202D01*
+X021503Y012151D01*
+X021087Y012120D01*
+X020670Y012110D01*
+X020605Y002750D02*
+X019732Y002771D01*
+X018861Y002836D01*
+X017995Y002943D01*
+X017134Y003092D01*
+X016282Y003283D01*
+X015441Y003516D01*
+X014612Y003790D01*
+X013797Y004104D01*
+X012999Y004458D01*
+X012219Y004851D01*
+X011459Y005281D01*
+X010721Y005748D01*
+X010007Y006251D01*
+X009319Y006788D01*
+X008658Y007358D01*
+X008026Y007961D01*
+X007423Y008593D01*
+X006853Y009254D01*
+X006316Y009943D01*
+X005813Y010656D01*
+X005346Y011394D01*
+X004916Y012154D01*
+X004523Y012934D01*
+X004169Y013732D01*
+X003855Y014547D01*
+X003581Y015376D01*
+X003348Y016217D01*
+X003157Y017069D01*
+X003008Y017930D01*
+X002901Y018796D01*
+X002836Y019667D01*
+X002815Y020540D01*
+X002295Y020605D02*
+X002317Y021500D01*
+X002383Y022393D01*
+X002492Y023282D01*
+X002646Y024164D01*
+X002842Y025038D01*
+X003081Y025901D01*
+X003362Y026752D01*
+X003684Y027587D01*
+X004047Y028406D01*
+X004449Y029206D01*
+X004891Y029985D01*
+X005370Y030741D01*
+X005886Y031474D01*
+X006436Y032180D01*
+X007021Y032858D01*
+X007639Y033506D01*
+X008287Y034124D01*
+X008966Y034709D01*
+X009671Y035260D01*
+X010404Y035775D01*
+X011160Y036254D01*
+X011939Y036696D01*
+X012739Y037098D01*
+X013558Y037461D01*
+X014393Y037783D01*
+X015244Y038064D01*
+X016107Y038303D01*
+X016981Y038499D01*
+X017863Y038653D01*
+X018752Y038762D01*
+X019645Y038828D01*
+X020540Y038850D01*
+X020605Y033650D02*
+X021242Y033634D01*
+X021877Y033587D01*
+X022510Y033510D01*
+X023137Y033401D01*
+X023759Y033261D01*
+X024373Y033091D01*
+X024978Y032891D01*
+X025572Y032662D01*
+X026155Y032404D01*
+X026724Y032117D01*
+X027278Y031803D01*
+X027816Y031462D01*
+X028337Y031096D01*
+X028839Y030704D01*
+X029322Y030288D01*
+X029783Y029848D01*
+X030223Y029387D01*
+X030639Y028904D01*
+X031031Y028402D01*
+X031397Y027881D01*
+X031738Y027343D01*
+X032052Y026789D01*
+X032339Y026220D01*
+X032597Y025637D01*
+X032826Y025043D01*
+X033026Y024438D01*
+X033196Y023824D01*
+X033336Y023202D01*
+X033445Y022575D01*
+X033522Y021942D01*
+X033569Y021307D01*
+X033585Y020670D01*
+D15*
+X027105Y020605D03*
+X026355Y020605D03*
+M02*
diff --git a/pcb/lf-antenna/CAM/lf-antenna.GBO b/pcb/lf-antenna/CAM/lf-antenna.GBO
new file mode 100644 (file)
index 0000000..26d3755
--- /dev/null
@@ -0,0 +1,1032 @@
+G75*
+G70*
+%OFA0B0*%
+%FSLAX24Y24*%
+%IPPOS*%
+%LPD*%
+%AMOC8*
+5,1,8,0,0,1.08239X$1,22.5*
+%
+%ADD10C,0.0010*%
+%ADD11C,0.0000*%
+D10*
+X040496Y015646D02*
+X040231Y014683D01*
+X039920Y013735D01*
+X039562Y012803D01*
+X039160Y011890D01*
+X038714Y010997D01*
+X038225Y010127D01*
+X037694Y009282D01*
+X037122Y008463D01*
+X036512Y007674D01*
+X035864Y006915D01*
+X035179Y006188D01*
+X034460Y005496D01*
+X033708Y004839D01*
+X032925Y004220D01*
+X032113Y003640D01*
+X031274Y003100D01*
+X030409Y002601D01*
+X029521Y002146D01*
+X028612Y001733D01*
+X027684Y001366D01*
+X026739Y001044D01*
+X025780Y000769D01*
+X024808Y000541D01*
+X023827Y000360D01*
+X022838Y000227D01*
+X021843Y000142D01*
+X020846Y000106D01*
+X019847Y000119D01*
+X018851Y000180D01*
+X017859Y000290D01*
+X016874Y000447D01*
+X015897Y000653D01*
+X014931Y000906D01*
+X013979Y001205D01*
+X013043Y001551D01*
+X012124Y001941D01*
+X011226Y002376D01*
+X010350Y002854D01*
+X009498Y003375D01*
+X008672Y003936D01*
+X007875Y004536D01*
+X007108Y005175D01*
+X006373Y005850D01*
+X005672Y006560D01*
+X005006Y007304D01*
+X004377Y008079D01*
+X003787Y008884D01*
+X003236Y009716D01*
+X002727Y010574D01*
+X002260Y011457D01*
+X001836Y012360D01*
+X001457Y013284D01*
+X001123Y014224D01*
+X000836Y015180D01*
+X000595Y016149D01*
+X000402Y017128D01*
+X000257Y018116D01*
+X000160Y019109D01*
+X000111Y020106D01*
+X000111Y021104D01*
+X000160Y022101D01*
+X000257Y023094D01*
+X000402Y024082D01*
+X000595Y025061D01*
+X000836Y026030D01*
+X001123Y026986D01*
+X001457Y027926D01*
+X001836Y028850D01*
+X002260Y029753D01*
+X002727Y030636D01*
+X003236Y031494D01*
+X003787Y032326D01*
+X004377Y033131D01*
+X005006Y033906D01*
+X005672Y034650D01*
+X006373Y035360D01*
+X007108Y036035D01*
+X007875Y036674D01*
+X008672Y037274D01*
+X009498Y037835D01*
+X010350Y038356D01*
+X011226Y038834D01*
+X012124Y039269D01*
+X013043Y039659D01*
+X013979Y040005D01*
+X014931Y040304D01*
+X015897Y040557D01*
+X016874Y040763D01*
+X017859Y040920D01*
+X018851Y041030D01*
+X019847Y041091D01*
+X020846Y041104D01*
+X021843Y041068D01*
+X022838Y040983D01*
+X023827Y040850D01*
+X024808Y040669D01*
+X025780Y040441D01*
+X026739Y040166D01*
+X027684Y039844D01*
+X028612Y039477D01*
+X029521Y039064D01*
+X030409Y038609D01*
+X031274Y038110D01*
+X032113Y037570D01*
+X032925Y036990D01*
+X033708Y036371D01*
+X034460Y035714D01*
+X035179Y035022D01*
+X035864Y034295D01*
+X036512Y033536D01*
+X037122Y032747D01*
+X037694Y031928D01*
+X038225Y031083D01*
+X038714Y030213D01*
+X039160Y029320D01*
+X039562Y028407D01*
+X039920Y027475D01*
+X040231Y026527D01*
+X040496Y025564D01*
+X040510Y025515D01*
+X040527Y025467D01*
+X040548Y025421D01*
+X040572Y025376D01*
+X040599Y025333D01*
+X040629Y025291D01*
+X040662Y025252D01*
+X040697Y025216D01*
+X040735Y025182D01*
+X040775Y025150D01*
+X040817Y025122D01*
+X040862Y025096D01*
+X040907Y025074D01*
+X040955Y025055D01*
+X044355Y022105D02*
+X044355Y019105D01*
+X040955Y016105D02*
+X040908Y016091D01*
+X040862Y016074D01*
+X040818Y016054D01*
+X040776Y016030D01*
+X040736Y016002D01*
+X040697Y015972D01*
+X040662Y015939D01*
+X040629Y015903D01*
+X040598Y015865D01*
+X040571Y015825D01*
+X040547Y015782D01*
+X040527Y015738D01*
+X040509Y015692D01*
+X040496Y015646D01*
+X044355Y022105D02*
+X044204Y022372D01*
+X044040Y022632D01*
+X043864Y022883D01*
+X043676Y023125D01*
+X043476Y023358D01*
+X043265Y023581D01*
+X043043Y023793D01*
+X042811Y023994D01*
+X042570Y024183D01*
+X042319Y024361D01*
+X042061Y024526D01*
+X041794Y024678D01*
+X041521Y024818D01*
+X041241Y024943D01*
+X040955Y025055D01*
+X044355Y019105D02*
+X044265Y018887D01*
+X044164Y018674D01*
+X044053Y018467D01*
+X043932Y018264D01*
+X043802Y018068D01*
+X043663Y017878D01*
+X043515Y017695D01*
+X043358Y017519D01*
+X043193Y017351D01*
+X043020Y017191D01*
+X042840Y017039D01*
+X042652Y016896D01*
+X042459Y016763D01*
+X042258Y016638D01*
+X042053Y016524D01*
+X041842Y016419D01*
+X041626Y016325D01*
+X041406Y016241D01*
+X041182Y016167D01*
+X040955Y016105D01*
+D11*
+X017834Y018484D02*
+X017836Y018534D01*
+X017842Y018584D01*
+X017852Y018634D01*
+X017865Y018682D01*
+X017882Y018730D01*
+X017903Y018776D01*
+X017927Y018820D01*
+X017955Y018862D01*
+X017986Y018902D01*
+X018020Y018939D01*
+X018057Y018974D01*
+X018096Y019005D01*
+X018137Y019034D01*
+X018181Y019059D01*
+X018227Y019081D01*
+X018274Y019099D01*
+X018322Y019113D01*
+X018371Y019124D01*
+X018421Y019131D01*
+X018471Y019134D01*
+X018522Y019133D01*
+X018572Y019128D01*
+X018622Y019119D01*
+X018670Y019107D01*
+X018718Y019090D01*
+X018764Y019070D01*
+X018809Y019047D01*
+X018852Y019020D01*
+X018892Y018990D01*
+X018930Y018957D01*
+X018965Y018921D01*
+X018998Y018882D01*
+X019027Y018841D01*
+X019053Y018798D01*
+X019076Y018753D01*
+X019095Y018706D01*
+X019110Y018658D01*
+X019122Y018609D01*
+X019130Y018559D01*
+X019134Y018509D01*
+X019134Y018459D01*
+X019130Y018409D01*
+X019122Y018359D01*
+X019110Y018310D01*
+X019095Y018262D01*
+X019076Y018215D01*
+X019053Y018170D01*
+X019027Y018127D01*
+X018998Y018086D01*
+X018965Y018047D01*
+X018930Y018011D01*
+X018892Y017978D01*
+X018852Y017948D01*
+X018809Y017921D01*
+X018764Y017898D01*
+X018718Y017878D01*
+X018670Y017861D01*
+X018622Y017849D01*
+X018572Y017840D01*
+X018522Y017835D01*
+X018471Y017834D01*
+X018421Y017837D01*
+X018371Y017844D01*
+X018322Y017855D01*
+X018274Y017869D01*
+X018227Y017887D01*
+X018181Y017909D01*
+X018137Y017934D01*
+X018096Y017963D01*
+X018057Y017994D01*
+X018020Y018029D01*
+X017986Y018066D01*
+X017955Y018106D01*
+X017927Y018148D01*
+X017903Y018192D01*
+X017882Y018238D01*
+X017865Y018286D01*
+X017852Y018334D01*
+X017842Y018384D01*
+X017836Y018434D01*
+X017834Y018484D01*
+X016955Y020605D02*
+X016957Y020655D01*
+X016963Y020705D01*
+X016973Y020755D01*
+X016986Y020803D01*
+X017003Y020851D01*
+X017024Y020897D01*
+X017048Y020941D01*
+X017076Y020983D01*
+X017107Y021023D01*
+X017141Y021060D01*
+X017178Y021095D01*
+X017217Y021126D01*
+X017258Y021155D01*
+X017302Y021180D01*
+X017348Y021202D01*
+X017395Y021220D01*
+X017443Y021234D01*
+X017492Y021245D01*
+X017542Y021252D01*
+X017592Y021255D01*
+X017643Y021254D01*
+X017693Y021249D01*
+X017743Y021240D01*
+X017791Y021228D01*
+X017839Y021211D01*
+X017885Y021191D01*
+X017930Y021168D01*
+X017973Y021141D01*
+X018013Y021111D01*
+X018051Y021078D01*
+X018086Y021042D01*
+X018119Y021003D01*
+X018148Y020962D01*
+X018174Y020919D01*
+X018197Y020874D01*
+X018216Y020827D01*
+X018231Y020779D01*
+X018243Y020730D01*
+X018251Y020680D01*
+X018255Y020630D01*
+X018255Y020580D01*
+X018251Y020530D01*
+X018243Y020480D01*
+X018231Y020431D01*
+X018216Y020383D01*
+X018197Y020336D01*
+X018174Y020291D01*
+X018148Y020248D01*
+X018119Y020207D01*
+X018086Y020168D01*
+X018051Y020132D01*
+X018013Y020099D01*
+X017973Y020069D01*
+X017930Y020042D01*
+X017885Y020019D01*
+X017839Y019999D01*
+X017791Y019982D01*
+X017743Y019970D01*
+X017693Y019961D01*
+X017643Y019956D01*
+X017592Y019955D01*
+X017542Y019958D01*
+X017492Y019965D01*
+X017443Y019976D01*
+X017395Y019990D01*
+X017348Y020008D01*
+X017302Y020030D01*
+X017258Y020055D01*
+X017217Y020084D01*
+X017178Y020115D01*
+X017141Y020150D01*
+X017107Y020187D01*
+X017076Y020227D01*
+X017048Y020269D01*
+X017024Y020313D01*
+X017003Y020359D01*
+X016986Y020407D01*
+X016973Y020455D01*
+X016963Y020505D01*
+X016957Y020555D01*
+X016955Y020605D01*
+X017834Y022726D02*
+X017836Y022776D01*
+X017842Y022826D01*
+X017852Y022876D01*
+X017865Y022924D01*
+X017882Y022972D01*
+X017903Y023018D01*
+X017927Y023062D01*
+X017955Y023104D01*
+X017986Y023144D01*
+X018020Y023181D01*
+X018057Y023216D01*
+X018096Y023247D01*
+X018137Y023276D01*
+X018181Y023301D01*
+X018227Y023323D01*
+X018274Y023341D01*
+X018322Y023355D01*
+X018371Y023366D01*
+X018421Y023373D01*
+X018471Y023376D01*
+X018522Y023375D01*
+X018572Y023370D01*
+X018622Y023361D01*
+X018670Y023349D01*
+X018718Y023332D01*
+X018764Y023312D01*
+X018809Y023289D01*
+X018852Y023262D01*
+X018892Y023232D01*
+X018930Y023199D01*
+X018965Y023163D01*
+X018998Y023124D01*
+X019027Y023083D01*
+X019053Y023040D01*
+X019076Y022995D01*
+X019095Y022948D01*
+X019110Y022900D01*
+X019122Y022851D01*
+X019130Y022801D01*
+X019134Y022751D01*
+X019134Y022701D01*
+X019130Y022651D01*
+X019122Y022601D01*
+X019110Y022552D01*
+X019095Y022504D01*
+X019076Y022457D01*
+X019053Y022412D01*
+X019027Y022369D01*
+X018998Y022328D01*
+X018965Y022289D01*
+X018930Y022253D01*
+X018892Y022220D01*
+X018852Y022190D01*
+X018809Y022163D01*
+X018764Y022140D01*
+X018718Y022120D01*
+X018670Y022103D01*
+X018622Y022091D01*
+X018572Y022082D01*
+X018522Y022077D01*
+X018471Y022076D01*
+X018421Y022079D01*
+X018371Y022086D01*
+X018322Y022097D01*
+X018274Y022111D01*
+X018227Y022129D01*
+X018181Y022151D01*
+X018137Y022176D01*
+X018096Y022205D01*
+X018057Y022236D01*
+X018020Y022271D01*
+X017986Y022308D01*
+X017955Y022348D01*
+X017927Y022390D01*
+X017903Y022434D01*
+X017882Y022480D01*
+X017865Y022528D01*
+X017852Y022576D01*
+X017842Y022626D01*
+X017836Y022676D01*
+X017834Y022726D01*
+X019955Y023605D02*
+X019957Y023655D01*
+X019963Y023705D01*
+X019973Y023755D01*
+X019986Y023803D01*
+X020003Y023851D01*
+X020024Y023897D01*
+X020048Y023941D01*
+X020076Y023983D01*
+X020107Y024023D01*
+X020141Y024060D01*
+X020178Y024095D01*
+X020217Y024126D01*
+X020258Y024155D01*
+X020302Y024180D01*
+X020348Y024202D01*
+X020395Y024220D01*
+X020443Y024234D01*
+X020492Y024245D01*
+X020542Y024252D01*
+X020592Y024255D01*
+X020643Y024254D01*
+X020693Y024249D01*
+X020743Y024240D01*
+X020791Y024228D01*
+X020839Y024211D01*
+X020885Y024191D01*
+X020930Y024168D01*
+X020973Y024141D01*
+X021013Y024111D01*
+X021051Y024078D01*
+X021086Y024042D01*
+X021119Y024003D01*
+X021148Y023962D01*
+X021174Y023919D01*
+X021197Y023874D01*
+X021216Y023827D01*
+X021231Y023779D01*
+X021243Y023730D01*
+X021251Y023680D01*
+X021255Y023630D01*
+X021255Y023580D01*
+X021251Y023530D01*
+X021243Y023480D01*
+X021231Y023431D01*
+X021216Y023383D01*
+X021197Y023336D01*
+X021174Y023291D01*
+X021148Y023248D01*
+X021119Y023207D01*
+X021086Y023168D01*
+X021051Y023132D01*
+X021013Y023099D01*
+X020973Y023069D01*
+X020930Y023042D01*
+X020885Y023019D01*
+X020839Y022999D01*
+X020791Y022982D01*
+X020743Y022970D01*
+X020693Y022961D01*
+X020643Y022956D01*
+X020592Y022955D01*
+X020542Y022958D01*
+X020492Y022965D01*
+X020443Y022976D01*
+X020395Y022990D01*
+X020348Y023008D01*
+X020302Y023030D01*
+X020258Y023055D01*
+X020217Y023084D01*
+X020178Y023115D01*
+X020141Y023150D01*
+X020107Y023187D01*
+X020076Y023227D01*
+X020048Y023269D01*
+X020024Y023313D01*
+X020003Y023359D01*
+X019986Y023407D01*
+X019973Y023455D01*
+X019963Y023505D01*
+X019957Y023555D01*
+X019955Y023605D01*
+X022076Y022726D02*
+X022078Y022776D01*
+X022084Y022826D01*
+X022094Y022876D01*
+X022107Y022924D01*
+X022124Y022972D01*
+X022145Y023018D01*
+X022169Y023062D01*
+X022197Y023104D01*
+X022228Y023144D01*
+X022262Y023181D01*
+X022299Y023216D01*
+X022338Y023247D01*
+X022379Y023276D01*
+X022423Y023301D01*
+X022469Y023323D01*
+X022516Y023341D01*
+X022564Y023355D01*
+X022613Y023366D01*
+X022663Y023373D01*
+X022713Y023376D01*
+X022764Y023375D01*
+X022814Y023370D01*
+X022864Y023361D01*
+X022912Y023349D01*
+X022960Y023332D01*
+X023006Y023312D01*
+X023051Y023289D01*
+X023094Y023262D01*
+X023134Y023232D01*
+X023172Y023199D01*
+X023207Y023163D01*
+X023240Y023124D01*
+X023269Y023083D01*
+X023295Y023040D01*
+X023318Y022995D01*
+X023337Y022948D01*
+X023352Y022900D01*
+X023364Y022851D01*
+X023372Y022801D01*
+X023376Y022751D01*
+X023376Y022701D01*
+X023372Y022651D01*
+X023364Y022601D01*
+X023352Y022552D01*
+X023337Y022504D01*
+X023318Y022457D01*
+X023295Y022412D01*
+X023269Y022369D01*
+X023240Y022328D01*
+X023207Y022289D01*
+X023172Y022253D01*
+X023134Y022220D01*
+X023094Y022190D01*
+X023051Y022163D01*
+X023006Y022140D01*
+X022960Y022120D01*
+X022912Y022103D01*
+X022864Y022091D01*
+X022814Y022082D01*
+X022764Y022077D01*
+X022713Y022076D01*
+X022663Y022079D01*
+X022613Y022086D01*
+X022564Y022097D01*
+X022516Y022111D01*
+X022469Y022129D01*
+X022423Y022151D01*
+X022379Y022176D01*
+X022338Y022205D01*
+X022299Y022236D01*
+X022262Y022271D01*
+X022228Y022308D01*
+X022197Y022348D01*
+X022169Y022390D01*
+X022145Y022434D01*
+X022124Y022480D01*
+X022107Y022528D01*
+X022094Y022576D01*
+X022084Y022626D01*
+X022078Y022676D01*
+X022076Y022726D01*
+X019955Y020605D02*
+X019957Y020655D01*
+X019963Y020705D01*
+X019973Y020755D01*
+X019986Y020803D01*
+X020003Y020851D01*
+X020024Y020897D01*
+X020048Y020941D01*
+X020076Y020983D01*
+X020107Y021023D01*
+X020141Y021060D01*
+X020178Y021095D01*
+X020217Y021126D01*
+X020258Y021155D01*
+X020302Y021180D01*
+X020348Y021202D01*
+X020395Y021220D01*
+X020443Y021234D01*
+X020492Y021245D01*
+X020542Y021252D01*
+X020592Y021255D01*
+X020643Y021254D01*
+X020693Y021249D01*
+X020743Y021240D01*
+X020791Y021228D01*
+X020839Y021211D01*
+X020885Y021191D01*
+X020930Y021168D01*
+X020973Y021141D01*
+X021013Y021111D01*
+X021051Y021078D01*
+X021086Y021042D01*
+X021119Y021003D01*
+X021148Y020962D01*
+X021174Y020919D01*
+X021197Y020874D01*
+X021216Y020827D01*
+X021231Y020779D01*
+X021243Y020730D01*
+X021251Y020680D01*
+X021255Y020630D01*
+X021255Y020580D01*
+X021251Y020530D01*
+X021243Y020480D01*
+X021231Y020431D01*
+X021216Y020383D01*
+X021197Y020336D01*
+X021174Y020291D01*
+X021148Y020248D01*
+X021119Y020207D01*
+X021086Y020168D01*
+X021051Y020132D01*
+X021013Y020099D01*
+X020973Y020069D01*
+X020930Y020042D01*
+X020885Y020019D01*
+X020839Y019999D01*
+X020791Y019982D01*
+X020743Y019970D01*
+X020693Y019961D01*
+X020643Y019956D01*
+X020592Y019955D01*
+X020542Y019958D01*
+X020492Y019965D01*
+X020443Y019976D01*
+X020395Y019990D01*
+X020348Y020008D01*
+X020302Y020030D01*
+X020258Y020055D01*
+X020217Y020084D01*
+X020178Y020115D01*
+X020141Y020150D01*
+X020107Y020187D01*
+X020076Y020227D01*
+X020048Y020269D01*
+X020024Y020313D01*
+X020003Y020359D01*
+X019986Y020407D01*
+X019973Y020455D01*
+X019963Y020505D01*
+X019957Y020555D01*
+X019955Y020605D01*
+X022076Y018484D02*
+X022078Y018534D01*
+X022084Y018584D01*
+X022094Y018634D01*
+X022107Y018682D01*
+X022124Y018730D01*
+X022145Y018776D01*
+X022169Y018820D01*
+X022197Y018862D01*
+X022228Y018902D01*
+X022262Y018939D01*
+X022299Y018974D01*
+X022338Y019005D01*
+X022379Y019034D01*
+X022423Y019059D01*
+X022469Y019081D01*
+X022516Y019099D01*
+X022564Y019113D01*
+X022613Y019124D01*
+X022663Y019131D01*
+X022713Y019134D01*
+X022764Y019133D01*
+X022814Y019128D01*
+X022864Y019119D01*
+X022912Y019107D01*
+X022960Y019090D01*
+X023006Y019070D01*
+X023051Y019047D01*
+X023094Y019020D01*
+X023134Y018990D01*
+X023172Y018957D01*
+X023207Y018921D01*
+X023240Y018882D01*
+X023269Y018841D01*
+X023295Y018798D01*
+X023318Y018753D01*
+X023337Y018706D01*
+X023352Y018658D01*
+X023364Y018609D01*
+X023372Y018559D01*
+X023376Y018509D01*
+X023376Y018459D01*
+X023372Y018409D01*
+X023364Y018359D01*
+X023352Y018310D01*
+X023337Y018262D01*
+X023318Y018215D01*
+X023295Y018170D01*
+X023269Y018127D01*
+X023240Y018086D01*
+X023207Y018047D01*
+X023172Y018011D01*
+X023134Y017978D01*
+X023094Y017948D01*
+X023051Y017921D01*
+X023006Y017898D01*
+X022960Y017878D01*
+X022912Y017861D01*
+X022864Y017849D01*
+X022814Y017840D01*
+X022764Y017835D01*
+X022713Y017834D01*
+X022663Y017837D01*
+X022613Y017844D01*
+X022564Y017855D01*
+X022516Y017869D01*
+X022469Y017887D01*
+X022423Y017909D01*
+X022379Y017934D01*
+X022338Y017963D01*
+X022299Y017994D01*
+X022262Y018029D01*
+X022228Y018066D01*
+X022197Y018106D01*
+X022169Y018148D01*
+X022145Y018192D01*
+X022124Y018238D01*
+X022107Y018286D01*
+X022094Y018334D01*
+X022084Y018384D01*
+X022078Y018434D01*
+X022076Y018484D01*
+X019955Y017605D02*
+X019957Y017655D01*
+X019963Y017705D01*
+X019973Y017755D01*
+X019986Y017803D01*
+X020003Y017851D01*
+X020024Y017897D01*
+X020048Y017941D01*
+X020076Y017983D01*
+X020107Y018023D01*
+X020141Y018060D01*
+X020178Y018095D01*
+X020217Y018126D01*
+X020258Y018155D01*
+X020302Y018180D01*
+X020348Y018202D01*
+X020395Y018220D01*
+X020443Y018234D01*
+X020492Y018245D01*
+X020542Y018252D01*
+X020592Y018255D01*
+X020643Y018254D01*
+X020693Y018249D01*
+X020743Y018240D01*
+X020791Y018228D01*
+X020839Y018211D01*
+X020885Y018191D01*
+X020930Y018168D01*
+X020973Y018141D01*
+X021013Y018111D01*
+X021051Y018078D01*
+X021086Y018042D01*
+X021119Y018003D01*
+X021148Y017962D01*
+X021174Y017919D01*
+X021197Y017874D01*
+X021216Y017827D01*
+X021231Y017779D01*
+X021243Y017730D01*
+X021251Y017680D01*
+X021255Y017630D01*
+X021255Y017580D01*
+X021251Y017530D01*
+X021243Y017480D01*
+X021231Y017431D01*
+X021216Y017383D01*
+X021197Y017336D01*
+X021174Y017291D01*
+X021148Y017248D01*
+X021119Y017207D01*
+X021086Y017168D01*
+X021051Y017132D01*
+X021013Y017099D01*
+X020973Y017069D01*
+X020930Y017042D01*
+X020885Y017019D01*
+X020839Y016999D01*
+X020791Y016982D01*
+X020743Y016970D01*
+X020693Y016961D01*
+X020643Y016956D01*
+X020592Y016955D01*
+X020542Y016958D01*
+X020492Y016965D01*
+X020443Y016976D01*
+X020395Y016990D01*
+X020348Y017008D01*
+X020302Y017030D01*
+X020258Y017055D01*
+X020217Y017084D01*
+X020178Y017115D01*
+X020141Y017150D01*
+X020107Y017187D01*
+X020076Y017227D01*
+X020048Y017269D01*
+X020024Y017313D01*
+X020003Y017359D01*
+X019986Y017407D01*
+X019973Y017455D01*
+X019963Y017505D01*
+X019957Y017555D01*
+X019955Y017605D01*
+X022955Y020605D02*
+X022957Y020655D01*
+X022963Y020705D01*
+X022973Y020755D01*
+X022986Y020803D01*
+X023003Y020851D01*
+X023024Y020897D01*
+X023048Y020941D01*
+X023076Y020983D01*
+X023107Y021023D01*
+X023141Y021060D01*
+X023178Y021095D01*
+X023217Y021126D01*
+X023258Y021155D01*
+X023302Y021180D01*
+X023348Y021202D01*
+X023395Y021220D01*
+X023443Y021234D01*
+X023492Y021245D01*
+X023542Y021252D01*
+X023592Y021255D01*
+X023643Y021254D01*
+X023693Y021249D01*
+X023743Y021240D01*
+X023791Y021228D01*
+X023839Y021211D01*
+X023885Y021191D01*
+X023930Y021168D01*
+X023973Y021141D01*
+X024013Y021111D01*
+X024051Y021078D01*
+X024086Y021042D01*
+X024119Y021003D01*
+X024148Y020962D01*
+X024174Y020919D01*
+X024197Y020874D01*
+X024216Y020827D01*
+X024231Y020779D01*
+X024243Y020730D01*
+X024251Y020680D01*
+X024255Y020630D01*
+X024255Y020580D01*
+X024251Y020530D01*
+X024243Y020480D01*
+X024231Y020431D01*
+X024216Y020383D01*
+X024197Y020336D01*
+X024174Y020291D01*
+X024148Y020248D01*
+X024119Y020207D01*
+X024086Y020168D01*
+X024051Y020132D01*
+X024013Y020099D01*
+X023973Y020069D01*
+X023930Y020042D01*
+X023885Y020019D01*
+X023839Y019999D01*
+X023791Y019982D01*
+X023743Y019970D01*
+X023693Y019961D01*
+X023643Y019956D01*
+X023592Y019955D01*
+X023542Y019958D01*
+X023492Y019965D01*
+X023443Y019976D01*
+X023395Y019990D01*
+X023348Y020008D01*
+X023302Y020030D01*
+X023258Y020055D01*
+X023217Y020084D01*
+X023178Y020115D01*
+X023141Y020150D01*
+X023107Y020187D01*
+X023076Y020227D01*
+X023048Y020269D01*
+X023024Y020313D01*
+X023003Y020359D01*
+X022986Y020407D01*
+X022973Y020455D01*
+X022963Y020505D01*
+X022957Y020555D01*
+X022955Y020605D01*
+X042741Y020014D02*
+X042743Y020041D01*
+X042749Y020068D01*
+X042758Y020094D01*
+X042771Y020118D01*
+X042787Y020141D01*
+X042806Y020160D01*
+X042828Y020177D01*
+X042852Y020191D01*
+X042877Y020201D01*
+X042904Y020208D01*
+X042931Y020211D01*
+X042959Y020210D01*
+X042986Y020205D01*
+X043012Y020197D01*
+X043036Y020185D01*
+X043059Y020169D01*
+X043080Y020151D01*
+X043097Y020130D01*
+X043112Y020106D01*
+X043123Y020081D01*
+X043131Y020055D01*
+X043135Y020028D01*
+X043135Y020000D01*
+X043131Y019973D01*
+X043123Y019947D01*
+X043112Y019922D01*
+X043097Y019898D01*
+X043080Y019877D01*
+X043059Y019859D01*
+X043037Y019843D01*
+X043012Y019831D01*
+X042986Y019823D01*
+X042959Y019818D01*
+X042931Y019817D01*
+X042904Y019820D01*
+X042877Y019827D01*
+X042852Y019837D01*
+X042828Y019851D01*
+X042806Y019868D01*
+X042787Y019887D01*
+X042771Y019910D01*
+X042758Y019934D01*
+X042749Y019960D01*
+X042743Y019987D01*
+X042741Y020014D01*
+X042741Y021196D02*
+X042743Y021223D01*
+X042749Y021250D01*
+X042758Y021276D01*
+X042771Y021300D01*
+X042787Y021323D01*
+X042806Y021342D01*
+X042828Y021359D01*
+X042852Y021373D01*
+X042877Y021383D01*
+X042904Y021390D01*
+X042931Y021393D01*
+X042959Y021392D01*
+X042986Y021387D01*
+X043012Y021379D01*
+X043036Y021367D01*
+X043059Y021351D01*
+X043080Y021333D01*
+X043097Y021312D01*
+X043112Y021288D01*
+X043123Y021263D01*
+X043131Y021237D01*
+X043135Y021210D01*
+X043135Y021182D01*
+X043131Y021155D01*
+X043123Y021129D01*
+X043112Y021104D01*
+X043097Y021080D01*
+X043080Y021059D01*
+X043059Y021041D01*
+X043037Y021025D01*
+X043012Y021013D01*
+X042986Y021005D01*
+X042959Y021000D01*
+X042931Y020999D01*
+X042904Y021002D01*
+X042877Y021009D01*
+X042852Y021019D01*
+X042828Y021033D01*
+X042806Y021050D01*
+X042787Y021069D01*
+X042771Y021092D01*
+X042758Y021116D01*
+X042749Y021142D01*
+X042743Y021169D01*
+X042741Y021196D01*
+M02*
diff --git a/pcb/lf-antenna/CAM/lf-antenna.GBP b/pcb/lf-antenna/CAM/lf-antenna.GBP
new file mode 100644 (file)
index 0000000..26d3755
--- /dev/null
@@ -0,0 +1,1032 @@
+G75*
+G70*
+%OFA0B0*%
+%FSLAX24Y24*%
+%IPPOS*%
+%LPD*%
+%AMOC8*
+5,1,8,0,0,1.08239X$1,22.5*
+%
+%ADD10C,0.0010*%
+%ADD11C,0.0000*%
+D10*
+X040496Y015646D02*
+X040231Y014683D01*
+X039920Y013735D01*
+X039562Y012803D01*
+X039160Y011890D01*
+X038714Y010997D01*
+X038225Y010127D01*
+X037694Y009282D01*
+X037122Y008463D01*
+X036512Y007674D01*
+X035864Y006915D01*
+X035179Y006188D01*
+X034460Y005496D01*
+X033708Y004839D01*
+X032925Y004220D01*
+X032113Y003640D01*
+X031274Y003100D01*
+X030409Y002601D01*
+X029521Y002146D01*
+X028612Y001733D01*
+X027684Y001366D01*
+X026739Y001044D01*
+X025780Y000769D01*
+X024808Y000541D01*
+X023827Y000360D01*
+X022838Y000227D01*
+X021843Y000142D01*
+X020846Y000106D01*
+X019847Y000119D01*
+X018851Y000180D01*
+X017859Y000290D01*
+X016874Y000447D01*
+X015897Y000653D01*
+X014931Y000906D01*
+X013979Y001205D01*
+X013043Y001551D01*
+X012124Y001941D01*
+X011226Y002376D01*
+X010350Y002854D01*
+X009498Y003375D01*
+X008672Y003936D01*
+X007875Y004536D01*
+X007108Y005175D01*
+X006373Y005850D01*
+X005672Y006560D01*
+X005006Y007304D01*
+X004377Y008079D01*
+X003787Y008884D01*
+X003236Y009716D01*
+X002727Y010574D01*
+X002260Y011457D01*
+X001836Y012360D01*
+X001457Y013284D01*
+X001123Y014224D01*
+X000836Y015180D01*
+X000595Y016149D01*
+X000402Y017128D01*
+X000257Y018116D01*
+X000160Y019109D01*
+X000111Y020106D01*
+X000111Y021104D01*
+X000160Y022101D01*
+X000257Y023094D01*
+X000402Y024082D01*
+X000595Y025061D01*
+X000836Y026030D01*
+X001123Y026986D01*
+X001457Y027926D01*
+X001836Y028850D01*
+X002260Y029753D01*
+X002727Y030636D01*
+X003236Y031494D01*
+X003787Y032326D01*
+X004377Y033131D01*
+X005006Y033906D01*
+X005672Y034650D01*
+X006373Y035360D01*
+X007108Y036035D01*
+X007875Y036674D01*
+X008672Y037274D01*
+X009498Y037835D01*
+X010350Y038356D01*
+X011226Y038834D01*
+X012124Y039269D01*
+X013043Y039659D01*
+X013979Y040005D01*
+X014931Y040304D01*
+X015897Y040557D01*
+X016874Y040763D01*
+X017859Y040920D01*
+X018851Y041030D01*
+X019847Y041091D01*
+X020846Y041104D01*
+X021843Y041068D01*
+X022838Y040983D01*
+X023827Y040850D01*
+X024808Y040669D01*
+X025780Y040441D01*
+X026739Y040166D01*
+X027684Y039844D01*
+X028612Y039477D01*
+X029521Y039064D01*
+X030409Y038609D01*
+X031274Y038110D01*
+X032113Y037570D01*
+X032925Y036990D01*
+X033708Y036371D01*
+X034460Y035714D01*
+X035179Y035022D01*
+X035864Y034295D01*
+X036512Y033536D01*
+X037122Y032747D01*
+X037694Y031928D01*
+X038225Y031083D01*
+X038714Y030213D01*
+X039160Y029320D01*
+X039562Y028407D01*
+X039920Y027475D01*
+X040231Y026527D01*
+X040496Y025564D01*
+X040510Y025515D01*
+X040527Y025467D01*
+X040548Y025421D01*
+X040572Y025376D01*
+X040599Y025333D01*
+X040629Y025291D01*
+X040662Y025252D01*
+X040697Y025216D01*
+X040735Y025182D01*
+X040775Y025150D01*
+X040817Y025122D01*
+X040862Y025096D01*
+X040907Y025074D01*
+X040955Y025055D01*
+X044355Y022105D02*
+X044355Y019105D01*
+X040955Y016105D02*
+X040908Y016091D01*
+X040862Y016074D01*
+X040818Y016054D01*
+X040776Y016030D01*
+X040736Y016002D01*
+X040697Y015972D01*
+X040662Y015939D01*
+X040629Y015903D01*
+X040598Y015865D01*
+X040571Y015825D01*
+X040547Y015782D01*
+X040527Y015738D01*
+X040509Y015692D01*
+X040496Y015646D01*
+X044355Y022105D02*
+X044204Y022372D01*
+X044040Y022632D01*
+X043864Y022883D01*
+X043676Y023125D01*
+X043476Y023358D01*
+X043265Y023581D01*
+X043043Y023793D01*
+X042811Y023994D01*
+X042570Y024183D01*
+X042319Y024361D01*
+X042061Y024526D01*
+X041794Y024678D01*
+X041521Y024818D01*
+X041241Y024943D01*
+X040955Y025055D01*
+X044355Y019105D02*
+X044265Y018887D01*
+X044164Y018674D01*
+X044053Y018467D01*
+X043932Y018264D01*
+X043802Y018068D01*
+X043663Y017878D01*
+X043515Y017695D01*
+X043358Y017519D01*
+X043193Y017351D01*
+X043020Y017191D01*
+X042840Y017039D01*
+X042652Y016896D01*
+X042459Y016763D01*
+X042258Y016638D01*
+X042053Y016524D01*
+X041842Y016419D01*
+X041626Y016325D01*
+X041406Y016241D01*
+X041182Y016167D01*
+X040955Y016105D01*
+D11*
+X017834Y018484D02*
+X017836Y018534D01*
+X017842Y018584D01*
+X017852Y018634D01*
+X017865Y018682D01*
+X017882Y018730D01*
+X017903Y018776D01*
+X017927Y018820D01*
+X017955Y018862D01*
+X017986Y018902D01*
+X018020Y018939D01*
+X018057Y018974D01*
+X018096Y019005D01*
+X018137Y019034D01*
+X018181Y019059D01*
+X018227Y019081D01*
+X018274Y019099D01*
+X018322Y019113D01*
+X018371Y019124D01*
+X018421Y019131D01*
+X018471Y019134D01*
+X018522Y019133D01*
+X018572Y019128D01*
+X018622Y019119D01*
+X018670Y019107D01*
+X018718Y019090D01*
+X018764Y019070D01*
+X018809Y019047D01*
+X018852Y019020D01*
+X018892Y018990D01*
+X018930Y018957D01*
+X018965Y018921D01*
+X018998Y018882D01*
+X019027Y018841D01*
+X019053Y018798D01*
+X019076Y018753D01*
+X019095Y018706D01*
+X019110Y018658D01*
+X019122Y018609D01*
+X019130Y018559D01*
+X019134Y018509D01*
+X019134Y018459D01*
+X019130Y018409D01*
+X019122Y018359D01*
+X019110Y018310D01*
+X019095Y018262D01*
+X019076Y018215D01*
+X019053Y018170D01*
+X019027Y018127D01*
+X018998Y018086D01*
+X018965Y018047D01*
+X018930Y018011D01*
+X018892Y017978D01*
+X018852Y017948D01*
+X018809Y017921D01*
+X018764Y017898D01*
+X018718Y017878D01*
+X018670Y017861D01*
+X018622Y017849D01*
+X018572Y017840D01*
+X018522Y017835D01*
+X018471Y017834D01*
+X018421Y017837D01*
+X018371Y017844D01*
+X018322Y017855D01*
+X018274Y017869D01*
+X018227Y017887D01*
+X018181Y017909D01*
+X018137Y017934D01*
+X018096Y017963D01*
+X018057Y017994D01*
+X018020Y018029D01*
+X017986Y018066D01*
+X017955Y018106D01*
+X017927Y018148D01*
+X017903Y018192D01*
+X017882Y018238D01*
+X017865Y018286D01*
+X017852Y018334D01*
+X017842Y018384D01*
+X017836Y018434D01*
+X017834Y018484D01*
+X016955Y020605D02*
+X016957Y020655D01*
+X016963Y020705D01*
+X016973Y020755D01*
+X016986Y020803D01*
+X017003Y020851D01*
+X017024Y020897D01*
+X017048Y020941D01*
+X017076Y020983D01*
+X017107Y021023D01*
+X017141Y021060D01*
+X017178Y021095D01*
+X017217Y021126D01*
+X017258Y021155D01*
+X017302Y021180D01*
+X017348Y021202D01*
+X017395Y021220D01*
+X017443Y021234D01*
+X017492Y021245D01*
+X017542Y021252D01*
+X017592Y021255D01*
+X017643Y021254D01*
+X017693Y021249D01*
+X017743Y021240D01*
+X017791Y021228D01*
+X017839Y021211D01*
+X017885Y021191D01*
+X017930Y021168D01*
+X017973Y021141D01*
+X018013Y021111D01*
+X018051Y021078D01*
+X018086Y021042D01*
+X018119Y021003D01*
+X018148Y020962D01*
+X018174Y020919D01*
+X018197Y020874D01*
+X018216Y020827D01*
+X018231Y020779D01*
+X018243Y020730D01*
+X018251Y020680D01*
+X018255Y020630D01*
+X018255Y020580D01*
+X018251Y020530D01*
+X018243Y020480D01*
+X018231Y020431D01*
+X018216Y020383D01*
+X018197Y020336D01*
+X018174Y020291D01*
+X018148Y020248D01*
+X018119Y020207D01*
+X018086Y020168D01*
+X018051Y020132D01*
+X018013Y020099D01*
+X017973Y020069D01*
+X017930Y020042D01*
+X017885Y020019D01*
+X017839Y019999D01*
+X017791Y019982D01*
+X017743Y019970D01*
+X017693Y019961D01*
+X017643Y019956D01*
+X017592Y019955D01*
+X017542Y019958D01*
+X017492Y019965D01*
+X017443Y019976D01*
+X017395Y019990D01*
+X017348Y020008D01*
+X017302Y020030D01*
+X017258Y020055D01*
+X017217Y020084D01*
+X017178Y020115D01*
+X017141Y020150D01*
+X017107Y020187D01*
+X017076Y020227D01*
+X017048Y020269D01*
+X017024Y020313D01*
+X017003Y020359D01*
+X016986Y020407D01*
+X016973Y020455D01*
+X016963Y020505D01*
+X016957Y020555D01*
+X016955Y020605D01*
+X017834Y022726D02*
+X017836Y022776D01*
+X017842Y022826D01*
+X017852Y022876D01*
+X017865Y022924D01*
+X017882Y022972D01*
+X017903Y023018D01*
+X017927Y023062D01*
+X017955Y023104D01*
+X017986Y023144D01*
+X018020Y023181D01*
+X018057Y023216D01*
+X018096Y023247D01*
+X018137Y023276D01*
+X018181Y023301D01*
+X018227Y023323D01*
+X018274Y023341D01*
+X018322Y023355D01*
+X018371Y023366D01*
+X018421Y023373D01*
+X018471Y023376D01*
+X018522Y023375D01*
+X018572Y023370D01*
+X018622Y023361D01*
+X018670Y023349D01*
+X018718Y023332D01*
+X018764Y023312D01*
+X018809Y023289D01*
+X018852Y023262D01*
+X018892Y023232D01*
+X018930Y023199D01*
+X018965Y023163D01*
+X018998Y023124D01*
+X019027Y023083D01*
+X019053Y023040D01*
+X019076Y022995D01*
+X019095Y022948D01*
+X019110Y022900D01*
+X019122Y022851D01*
+X019130Y022801D01*
+X019134Y022751D01*
+X019134Y022701D01*
+X019130Y022651D01*
+X019122Y022601D01*
+X019110Y022552D01*
+X019095Y022504D01*
+X019076Y022457D01*
+X019053Y022412D01*
+X019027Y022369D01*
+X018998Y022328D01*
+X018965Y022289D01*
+X018930Y022253D01*
+X018892Y022220D01*
+X018852Y022190D01*
+X018809Y022163D01*
+X018764Y022140D01*
+X018718Y022120D01*
+X018670Y022103D01*
+X018622Y022091D01*
+X018572Y022082D01*
+X018522Y022077D01*
+X018471Y022076D01*
+X018421Y022079D01*
+X018371Y022086D01*
+X018322Y022097D01*
+X018274Y022111D01*
+X018227Y022129D01*
+X018181Y022151D01*
+X018137Y022176D01*
+X018096Y022205D01*
+X018057Y022236D01*
+X018020Y022271D01*
+X017986Y022308D01*
+X017955Y022348D01*
+X017927Y022390D01*
+X017903Y022434D01*
+X017882Y022480D01*
+X017865Y022528D01*
+X017852Y022576D01*
+X017842Y022626D01*
+X017836Y022676D01*
+X017834Y022726D01*
+X019955Y023605D02*
+X019957Y023655D01*
+X019963Y023705D01*
+X019973Y023755D01*
+X019986Y023803D01*
+X020003Y023851D01*
+X020024Y023897D01*
+X020048Y023941D01*
+X020076Y023983D01*
+X020107Y024023D01*
+X020141Y024060D01*
+X020178Y024095D01*
+X020217Y024126D01*
+X020258Y024155D01*
+X020302Y024180D01*
+X020348Y024202D01*
+X020395Y024220D01*
+X020443Y024234D01*
+X020492Y024245D01*
+X020542Y024252D01*
+X020592Y024255D01*
+X020643Y024254D01*
+X020693Y024249D01*
+X020743Y024240D01*
+X020791Y024228D01*
+X020839Y024211D01*
+X020885Y024191D01*
+X020930Y024168D01*
+X020973Y024141D01*
+X021013Y024111D01*
+X021051Y024078D01*
+X021086Y024042D01*
+X021119Y024003D01*
+X021148Y023962D01*
+X021174Y023919D01*
+X021197Y023874D01*
+X021216Y023827D01*
+X021231Y023779D01*
+X021243Y023730D01*
+X021251Y023680D01*
+X021255Y023630D01*
+X021255Y023580D01*
+X021251Y023530D01*
+X021243Y023480D01*
+X021231Y023431D01*
+X021216Y023383D01*
+X021197Y023336D01*
+X021174Y023291D01*
+X021148Y023248D01*
+X021119Y023207D01*
+X021086Y023168D01*
+X021051Y023132D01*
+X021013Y023099D01*
+X020973Y023069D01*
+X020930Y023042D01*
+X020885Y023019D01*
+X020839Y022999D01*
+X020791Y022982D01*
+X020743Y022970D01*
+X020693Y022961D01*
+X020643Y022956D01*
+X020592Y022955D01*
+X020542Y022958D01*
+X020492Y022965D01*
+X020443Y022976D01*
+X020395Y022990D01*
+X020348Y023008D01*
+X020302Y023030D01*
+X020258Y023055D01*
+X020217Y023084D01*
+X020178Y023115D01*
+X020141Y023150D01*
+X020107Y023187D01*
+X020076Y023227D01*
+X020048Y023269D01*
+X020024Y023313D01*
+X020003Y023359D01*
+X019986Y023407D01*
+X019973Y023455D01*
+X019963Y023505D01*
+X019957Y023555D01*
+X019955Y023605D01*
+X022076Y022726D02*
+X022078Y022776D01*
+X022084Y022826D01*
+X022094Y022876D01*
+X022107Y022924D01*
+X022124Y022972D01*
+X022145Y023018D01*
+X022169Y023062D01*
+X022197Y023104D01*
+X022228Y023144D01*
+X022262Y023181D01*
+X022299Y023216D01*
+X022338Y023247D01*
+X022379Y023276D01*
+X022423Y023301D01*
+X022469Y023323D01*
+X022516Y023341D01*
+X022564Y023355D01*
+X022613Y023366D01*
+X022663Y023373D01*
+X022713Y023376D01*
+X022764Y023375D01*
+X022814Y023370D01*
+X022864Y023361D01*
+X022912Y023349D01*
+X022960Y023332D01*
+X023006Y023312D01*
+X023051Y023289D01*
+X023094Y023262D01*
+X023134Y023232D01*
+X023172Y023199D01*
+X023207Y023163D01*
+X023240Y023124D01*
+X023269Y023083D01*
+X023295Y023040D01*
+X023318Y022995D01*
+X023337Y022948D01*
+X023352Y022900D01*
+X023364Y022851D01*
+X023372Y022801D01*
+X023376Y022751D01*
+X023376Y022701D01*
+X023372Y022651D01*
+X023364Y022601D01*
+X023352Y022552D01*
+X023337Y022504D01*
+X023318Y022457D01*
+X023295Y022412D01*
+X023269Y022369D01*
+X023240Y022328D01*
+X023207Y022289D01*
+X023172Y022253D01*
+X023134Y022220D01*
+X023094Y022190D01*
+X023051Y022163D01*
+X023006Y022140D01*
+X022960Y022120D01*
+X022912Y022103D01*
+X022864Y022091D01*
+X022814Y022082D01*
+X022764Y022077D01*
+X022713Y022076D01*
+X022663Y022079D01*
+X022613Y022086D01*
+X022564Y022097D01*
+X022516Y022111D01*
+X022469Y022129D01*
+X022423Y022151D01*
+X022379Y022176D01*
+X022338Y022205D01*
+X022299Y022236D01*
+X022262Y022271D01*
+X022228Y022308D01*
+X022197Y022348D01*
+X022169Y022390D01*
+X022145Y022434D01*
+X022124Y022480D01*
+X022107Y022528D01*
+X022094Y022576D01*
+X022084Y022626D01*
+X022078Y022676D01*
+X022076Y022726D01*
+X019955Y020605D02*
+X019957Y020655D01*
+X019963Y020705D01*
+X019973Y020755D01*
+X019986Y020803D01*
+X020003Y020851D01*
+X020024Y020897D01*
+X020048Y020941D01*
+X020076Y020983D01*
+X020107Y021023D01*
+X020141Y021060D01*
+X020178Y021095D01*
+X020217Y021126D01*
+X020258Y021155D01*
+X020302Y021180D01*
+X020348Y021202D01*
+X020395Y021220D01*
+X020443Y021234D01*
+X020492Y021245D01*
+X020542Y021252D01*
+X020592Y021255D01*
+X020643Y021254D01*
+X020693Y021249D01*
+X020743Y021240D01*
+X020791Y021228D01*
+X020839Y021211D01*
+X020885Y021191D01*
+X020930Y021168D01*
+X020973Y021141D01*
+X021013Y021111D01*
+X021051Y021078D01*
+X021086Y021042D01*
+X021119Y021003D01*
+X021148Y020962D01*
+X021174Y020919D01*
+X021197Y020874D01*
+X021216Y020827D01*
+X021231Y020779D01*
+X021243Y020730D01*
+X021251Y020680D01*
+X021255Y020630D01*
+X021255Y020580D01*
+X021251Y020530D01*
+X021243Y020480D01*
+X021231Y020431D01*
+X021216Y020383D01*
+X021197Y020336D01*
+X021174Y020291D01*
+X021148Y020248D01*
+X021119Y020207D01*
+X021086Y020168D01*
+X021051Y020132D01*
+X021013Y020099D01*
+X020973Y020069D01*
+X020930Y020042D01*
+X020885Y020019D01*
+X020839Y019999D01*
+X020791Y019982D01*
+X020743Y019970D01*
+X020693Y019961D01*
+X020643Y019956D01*
+X020592Y019955D01*
+X020542Y019958D01*
+X020492Y019965D01*
+X020443Y019976D01*
+X020395Y019990D01*
+X020348Y020008D01*
+X020302Y020030D01*
+X020258Y020055D01*
+X020217Y020084D01*
+X020178Y020115D01*
+X020141Y020150D01*
+X020107Y020187D01*
+X020076Y020227D01*
+X020048Y020269D01*
+X020024Y020313D01*
+X020003Y020359D01*
+X019986Y020407D01*
+X019973Y020455D01*
+X019963Y020505D01*
+X019957Y020555D01*
+X019955Y020605D01*
+X022076Y018484D02*
+X022078Y018534D01*
+X022084Y018584D01*
+X022094Y018634D01*
+X022107Y018682D01*
+X022124Y018730D01*
+X022145Y018776D01*
+X022169Y018820D01*
+X022197Y018862D01*
+X022228Y018902D01*
+X022262Y018939D01*
+X022299Y018974D01*
+X022338Y019005D01*
+X022379Y019034D01*
+X022423Y019059D01*
+X022469Y019081D01*
+X022516Y019099D01*
+X022564Y019113D01*
+X022613Y019124D01*
+X022663Y019131D01*
+X022713Y019134D01*
+X022764Y019133D01*
+X022814Y019128D01*
+X022864Y019119D01*
+X022912Y019107D01*
+X022960Y019090D01*
+X023006Y019070D01*
+X023051Y019047D01*
+X023094Y019020D01*
+X023134Y018990D01*
+X023172Y018957D01*
+X023207Y018921D01*
+X023240Y018882D01*
+X023269Y018841D01*
+X023295Y018798D01*
+X023318Y018753D01*
+X023337Y018706D01*
+X023352Y018658D01*
+X023364Y018609D01*
+X023372Y018559D01*
+X023376Y018509D01*
+X023376Y018459D01*
+X023372Y018409D01*
+X023364Y018359D01*
+X023352Y018310D01*
+X023337Y018262D01*
+X023318Y018215D01*
+X023295Y018170D01*
+X023269Y018127D01*
+X023240Y018086D01*
+X023207Y018047D01*
+X023172Y018011D01*
+X023134Y017978D01*
+X023094Y017948D01*
+X023051Y017921D01*
+X023006Y017898D01*
+X022960Y017878D01*
+X022912Y017861D01*
+X022864Y017849D01*
+X022814Y017840D01*
+X022764Y017835D01*
+X022713Y017834D01*
+X022663Y017837D01*
+X022613Y017844D01*
+X022564Y017855D01*
+X022516Y017869D01*
+X022469Y017887D01*
+X022423Y017909D01*
+X022379Y017934D01*
+X022338Y017963D01*
+X022299Y017994D01*
+X022262Y018029D01*
+X022228Y018066D01*
+X022197Y018106D01*
+X022169Y018148D01*
+X022145Y018192D01*
+X022124Y018238D01*
+X022107Y018286D01*
+X022094Y018334D01*
+X022084Y018384D01*
+X022078Y018434D01*
+X022076Y018484D01*
+X019955Y017605D02*
+X019957Y017655D01*
+X019963Y017705D01*
+X019973Y017755D01*
+X019986Y017803D01*
+X020003Y017851D01*
+X020024Y017897D01*
+X020048Y017941D01*
+X020076Y017983D01*
+X020107Y018023D01*
+X020141Y018060D01*
+X020178Y018095D01*
+X020217Y018126D01*
+X020258Y018155D01*
+X020302Y018180D01*
+X020348Y018202D01*
+X020395Y018220D01*
+X020443Y018234D01*
+X020492Y018245D01*
+X020542Y018252D01*
+X020592Y018255D01*
+X020643Y018254D01*
+X020693Y018249D01*
+X020743Y018240D01*
+X020791Y018228D01*
+X020839Y018211D01*
+X020885Y018191D01*
+X020930Y018168D01*
+X020973Y018141D01*
+X021013Y018111D01*
+X021051Y018078D01*
+X021086Y018042D01*
+X021119Y018003D01*
+X021148Y017962D01*
+X021174Y017919D01*
+X021197Y017874D01*
+X021216Y017827D01*
+X021231Y017779D01*
+X021243Y017730D01*
+X021251Y017680D01*
+X021255Y017630D01*
+X021255Y017580D01*
+X021251Y017530D01*
+X021243Y017480D01*
+X021231Y017431D01*
+X021216Y017383D01*
+X021197Y017336D01*
+X021174Y017291D01*
+X021148Y017248D01*
+X021119Y017207D01*
+X021086Y017168D01*
+X021051Y017132D01*
+X021013Y017099D01*
+X020973Y017069D01*
+X020930Y017042D01*
+X020885Y017019D01*
+X020839Y016999D01*
+X020791Y016982D01*
+X020743Y016970D01*
+X020693Y016961D01*
+X020643Y016956D01*
+X020592Y016955D01*
+X020542Y016958D01*
+X020492Y016965D01*
+X020443Y016976D01*
+X020395Y016990D01*
+X020348Y017008D01*
+X020302Y017030D01*
+X020258Y017055D01*
+X020217Y017084D01*
+X020178Y017115D01*
+X020141Y017150D01*
+X020107Y017187D01*
+X020076Y017227D01*
+X020048Y017269D01*
+X020024Y017313D01*
+X020003Y017359D01*
+X019986Y017407D01*
+X019973Y017455D01*
+X019963Y017505D01*
+X019957Y017555D01*
+X019955Y017605D01*
+X022955Y020605D02*
+X022957Y020655D01*
+X022963Y020705D01*
+X022973Y020755D01*
+X022986Y020803D01*
+X023003Y020851D01*
+X023024Y020897D01*
+X023048Y020941D01*
+X023076Y020983D01*
+X023107Y021023D01*
+X023141Y021060D01*
+X023178Y021095D01*
+X023217Y021126D01*
+X023258Y021155D01*
+X023302Y021180D01*
+X023348Y021202D01*
+X023395Y021220D01*
+X023443Y021234D01*
+X023492Y021245D01*
+X023542Y021252D01*
+X023592Y021255D01*
+X023643Y021254D01*
+X023693Y021249D01*
+X023743Y021240D01*
+X023791Y021228D01*
+X023839Y021211D01*
+X023885Y021191D01*
+X023930Y021168D01*
+X023973Y021141D01*
+X024013Y021111D01*
+X024051Y021078D01*
+X024086Y021042D01*
+X024119Y021003D01*
+X024148Y020962D01*
+X024174Y020919D01*
+X024197Y020874D01*
+X024216Y020827D01*
+X024231Y020779D01*
+X024243Y020730D01*
+X024251Y020680D01*
+X024255Y020630D01*
+X024255Y020580D01*
+X024251Y020530D01*
+X024243Y020480D01*
+X024231Y020431D01*
+X024216Y020383D01*
+X024197Y020336D01*
+X024174Y020291D01*
+X024148Y020248D01*
+X024119Y020207D01*
+X024086Y020168D01*
+X024051Y020132D01*
+X024013Y020099D01*
+X023973Y020069D01*
+X023930Y020042D01*
+X023885Y020019D01*
+X023839Y019999D01*
+X023791Y019982D01*
+X023743Y019970D01*
+X023693Y019961D01*
+X023643Y019956D01*
+X023592Y019955D01*
+X023542Y019958D01*
+X023492Y019965D01*
+X023443Y019976D01*
+X023395Y019990D01*
+X023348Y020008D01*
+X023302Y020030D01*
+X023258Y020055D01*
+X023217Y020084D01*
+X023178Y020115D01*
+X023141Y020150D01*
+X023107Y020187D01*
+X023076Y020227D01*
+X023048Y020269D01*
+X023024Y020313D01*
+X023003Y020359D01*
+X022986Y020407D01*
+X022973Y020455D01*
+X022963Y020505D01*
+X022957Y020555D01*
+X022955Y020605D01*
+X042741Y020014D02*
+X042743Y020041D01*
+X042749Y020068D01*
+X042758Y020094D01*
+X042771Y020118D01*
+X042787Y020141D01*
+X042806Y020160D01*
+X042828Y020177D01*
+X042852Y020191D01*
+X042877Y020201D01*
+X042904Y020208D01*
+X042931Y020211D01*
+X042959Y020210D01*
+X042986Y020205D01*
+X043012Y020197D01*
+X043036Y020185D01*
+X043059Y020169D01*
+X043080Y020151D01*
+X043097Y020130D01*
+X043112Y020106D01*
+X043123Y020081D01*
+X043131Y020055D01*
+X043135Y020028D01*
+X043135Y020000D01*
+X043131Y019973D01*
+X043123Y019947D01*
+X043112Y019922D01*
+X043097Y019898D01*
+X043080Y019877D01*
+X043059Y019859D01*
+X043037Y019843D01*
+X043012Y019831D01*
+X042986Y019823D01*
+X042959Y019818D01*
+X042931Y019817D01*
+X042904Y019820D01*
+X042877Y019827D01*
+X042852Y019837D01*
+X042828Y019851D01*
+X042806Y019868D01*
+X042787Y019887D01*
+X042771Y019910D01*
+X042758Y019934D01*
+X042749Y019960D01*
+X042743Y019987D01*
+X042741Y020014D01*
+X042741Y021196D02*
+X042743Y021223D01*
+X042749Y021250D01*
+X042758Y021276D01*
+X042771Y021300D01*
+X042787Y021323D01*
+X042806Y021342D01*
+X042828Y021359D01*
+X042852Y021373D01*
+X042877Y021383D01*
+X042904Y021390D01*
+X042931Y021393D01*
+X042959Y021392D01*
+X042986Y021387D01*
+X043012Y021379D01*
+X043036Y021367D01*
+X043059Y021351D01*
+X043080Y021333D01*
+X043097Y021312D01*
+X043112Y021288D01*
+X043123Y021263D01*
+X043131Y021237D01*
+X043135Y021210D01*
+X043135Y021182D01*
+X043131Y021155D01*
+X043123Y021129D01*
+X043112Y021104D01*
+X043097Y021080D01*
+X043080Y021059D01*
+X043059Y021041D01*
+X043037Y021025D01*
+X043012Y021013D01*
+X042986Y021005D01*
+X042959Y021000D01*
+X042931Y020999D01*
+X042904Y021002D01*
+X042877Y021009D01*
+X042852Y021019D01*
+X042828Y021033D01*
+X042806Y021050D01*
+X042787Y021069D01*
+X042771Y021092D01*
+X042758Y021116D01*
+X042749Y021142D01*
+X042743Y021169D01*
+X042741Y021196D01*
+M02*
diff --git a/pcb/lf-antenna/CAM/lf-antenna.GBS b/pcb/lf-antenna/CAM/lf-antenna.GBS
new file mode 100644 (file)
index 0000000..94b85d0
--- /dev/null
@@ -0,0 +1,1066 @@
+G75*
+G70*
+%OFA0B0*%
+%FSLAX24Y24*%
+%IPPOS*%
+%LPD*%
+%AMOC8*
+5,1,8,0,0,1.08239X$1,22.5*
+%
+%ADD10C,0.0010*%
+%ADD11C,0.0140*%
+%ADD12C,0.0000*%
+%ADD13C,0.1379*%
+%ADD14C,0.0474*%
+%ADD15C,0.0780*%
+%ADD16C,0.0671*%
+D10*
+X040496Y015646D02*
+X040231Y014683D01*
+X039920Y013735D01*
+X039562Y012803D01*
+X039160Y011890D01*
+X038714Y010997D01*
+X038225Y010127D01*
+X037694Y009282D01*
+X037122Y008463D01*
+X036512Y007674D01*
+X035864Y006915D01*
+X035179Y006188D01*
+X034460Y005496D01*
+X033708Y004839D01*
+X032925Y004220D01*
+X032113Y003640D01*
+X031274Y003100D01*
+X030409Y002601D01*
+X029521Y002146D01*
+X028612Y001733D01*
+X027684Y001366D01*
+X026739Y001044D01*
+X025780Y000769D01*
+X024808Y000541D01*
+X023827Y000360D01*
+X022838Y000227D01*
+X021843Y000142D01*
+X020846Y000106D01*
+X019847Y000119D01*
+X018851Y000180D01*
+X017859Y000290D01*
+X016874Y000447D01*
+X015897Y000653D01*
+X014931Y000906D01*
+X013979Y001205D01*
+X013043Y001551D01*
+X012124Y001941D01*
+X011226Y002376D01*
+X010350Y002854D01*
+X009498Y003375D01*
+X008672Y003936D01*
+X007875Y004536D01*
+X007108Y005175D01*
+X006373Y005850D01*
+X005672Y006560D01*
+X005006Y007304D01*
+X004377Y008079D01*
+X003787Y008884D01*
+X003236Y009716D01*
+X002727Y010574D01*
+X002260Y011457D01*
+X001836Y012360D01*
+X001457Y013284D01*
+X001123Y014224D01*
+X000836Y015180D01*
+X000595Y016149D01*
+X000402Y017128D01*
+X000257Y018116D01*
+X000160Y019109D01*
+X000111Y020106D01*
+X000111Y021104D01*
+X000160Y022101D01*
+X000257Y023094D01*
+X000402Y024082D01*
+X000595Y025061D01*
+X000836Y026030D01*
+X001123Y026986D01*
+X001457Y027926D01*
+X001836Y028850D01*
+X002260Y029753D01*
+X002727Y030636D01*
+X003236Y031494D01*
+X003787Y032326D01*
+X004377Y033131D01*
+X005006Y033906D01*
+X005672Y034650D01*
+X006373Y035360D01*
+X007108Y036035D01*
+X007875Y036674D01*
+X008672Y037274D01*
+X009498Y037835D01*
+X010350Y038356D01*
+X011226Y038834D01*
+X012124Y039269D01*
+X013043Y039659D01*
+X013979Y040005D01*
+X014931Y040304D01*
+X015897Y040557D01*
+X016874Y040763D01*
+X017859Y040920D01*
+X018851Y041030D01*
+X019847Y041091D01*
+X020846Y041104D01*
+X021843Y041068D01*
+X022838Y040983D01*
+X023827Y040850D01*
+X024808Y040669D01*
+X025780Y040441D01*
+X026739Y040166D01*
+X027684Y039844D01*
+X028612Y039477D01*
+X029521Y039064D01*
+X030409Y038609D01*
+X031274Y038110D01*
+X032113Y037570D01*
+X032925Y036990D01*
+X033708Y036371D01*
+X034460Y035714D01*
+X035179Y035022D01*
+X035864Y034295D01*
+X036512Y033536D01*
+X037122Y032747D01*
+X037694Y031928D01*
+X038225Y031083D01*
+X038714Y030213D01*
+X039160Y029320D01*
+X039562Y028407D01*
+X039920Y027475D01*
+X040231Y026527D01*
+X040496Y025564D01*
+X040510Y025515D01*
+X040527Y025467D01*
+X040548Y025421D01*
+X040572Y025376D01*
+X040599Y025333D01*
+X040629Y025291D01*
+X040662Y025252D01*
+X040697Y025216D01*
+X040735Y025182D01*
+X040775Y025150D01*
+X040817Y025122D01*
+X040862Y025096D01*
+X040907Y025074D01*
+X040955Y025055D01*
+X044355Y022105D02*
+X044355Y019105D01*
+X040955Y016105D02*
+X040908Y016091D01*
+X040862Y016074D01*
+X040818Y016054D01*
+X040776Y016030D01*
+X040736Y016002D01*
+X040697Y015972D01*
+X040662Y015939D01*
+X040629Y015903D01*
+X040598Y015865D01*
+X040571Y015825D01*
+X040547Y015782D01*
+X040527Y015738D01*
+X040509Y015692D01*
+X040496Y015646D01*
+X044355Y022105D02*
+X044204Y022372D01*
+X044040Y022632D01*
+X043864Y022883D01*
+X043676Y023125D01*
+X043476Y023358D01*
+X043265Y023581D01*
+X043043Y023793D01*
+X042811Y023994D01*
+X042570Y024183D01*
+X042319Y024361D01*
+X042061Y024526D01*
+X041794Y024678D01*
+X041521Y024818D01*
+X041241Y024943D01*
+X040955Y025055D01*
+X044355Y019105D02*
+X044265Y018887D01*
+X044164Y018674D01*
+X044053Y018467D01*
+X043932Y018264D01*
+X043802Y018068D01*
+X043663Y017878D01*
+X043515Y017695D01*
+X043358Y017519D01*
+X043193Y017351D01*
+X043020Y017191D01*
+X042840Y017039D01*
+X042652Y016896D01*
+X042459Y016763D01*
+X042258Y016638D01*
+X042053Y016524D01*
+X041842Y016419D01*
+X041626Y016325D01*
+X041406Y016241D01*
+X041182Y016167D01*
+X040955Y016105D01*
+D11*
+X040775Y023225D02*
+X040775Y023599D01*
+X040775Y023870D02*
+X041335Y023870D01*
+X041335Y024243D01*
+X041055Y024056D02*
+X041055Y023870D01*
+X041335Y023225D02*
+X040775Y023225D01*
+D12*
+X042741Y021196D02*
+X042743Y021223D01*
+X042749Y021250D01*
+X042758Y021276D01*
+X042771Y021300D01*
+X042787Y021323D01*
+X042806Y021342D01*
+X042828Y021359D01*
+X042852Y021373D01*
+X042877Y021383D01*
+X042904Y021390D01*
+X042931Y021393D01*
+X042959Y021392D01*
+X042986Y021387D01*
+X043012Y021379D01*
+X043036Y021367D01*
+X043059Y021351D01*
+X043080Y021333D01*
+X043097Y021312D01*
+X043112Y021288D01*
+X043123Y021263D01*
+X043131Y021237D01*
+X043135Y021210D01*
+X043135Y021182D01*
+X043131Y021155D01*
+X043123Y021129D01*
+X043112Y021104D01*
+X043097Y021080D01*
+X043080Y021059D01*
+X043059Y021041D01*
+X043037Y021025D01*
+X043012Y021013D01*
+X042986Y021005D01*
+X042959Y021000D01*
+X042931Y020999D01*
+X042904Y021002D01*
+X042877Y021009D01*
+X042852Y021019D01*
+X042828Y021033D01*
+X042806Y021050D01*
+X042787Y021069D01*
+X042771Y021092D01*
+X042758Y021116D01*
+X042749Y021142D01*
+X042743Y021169D01*
+X042741Y021196D01*
+X042741Y020014D02*
+X042743Y020041D01*
+X042749Y020068D01*
+X042758Y020094D01*
+X042771Y020118D01*
+X042787Y020141D01*
+X042806Y020160D01*
+X042828Y020177D01*
+X042852Y020191D01*
+X042877Y020201D01*
+X042904Y020208D01*
+X042931Y020211D01*
+X042959Y020210D01*
+X042986Y020205D01*
+X043012Y020197D01*
+X043036Y020185D01*
+X043059Y020169D01*
+X043080Y020151D01*
+X043097Y020130D01*
+X043112Y020106D01*
+X043123Y020081D01*
+X043131Y020055D01*
+X043135Y020028D01*
+X043135Y020000D01*
+X043131Y019973D01*
+X043123Y019947D01*
+X043112Y019922D01*
+X043097Y019898D01*
+X043080Y019877D01*
+X043059Y019859D01*
+X043037Y019843D01*
+X043012Y019831D01*
+X042986Y019823D01*
+X042959Y019818D01*
+X042931Y019817D01*
+X042904Y019820D01*
+X042877Y019827D01*
+X042852Y019837D01*
+X042828Y019851D01*
+X042806Y019868D01*
+X042787Y019887D01*
+X042771Y019910D01*
+X042758Y019934D01*
+X042749Y019960D01*
+X042743Y019987D01*
+X042741Y020014D01*
+X022955Y020605D02*
+X022957Y020655D01*
+X022963Y020705D01*
+X022973Y020755D01*
+X022986Y020803D01*
+X023003Y020851D01*
+X023024Y020897D01*
+X023048Y020941D01*
+X023076Y020983D01*
+X023107Y021023D01*
+X023141Y021060D01*
+X023178Y021095D01*
+X023217Y021126D01*
+X023258Y021155D01*
+X023302Y021180D01*
+X023348Y021202D01*
+X023395Y021220D01*
+X023443Y021234D01*
+X023492Y021245D01*
+X023542Y021252D01*
+X023592Y021255D01*
+X023643Y021254D01*
+X023693Y021249D01*
+X023743Y021240D01*
+X023791Y021228D01*
+X023839Y021211D01*
+X023885Y021191D01*
+X023930Y021168D01*
+X023973Y021141D01*
+X024013Y021111D01*
+X024051Y021078D01*
+X024086Y021042D01*
+X024119Y021003D01*
+X024148Y020962D01*
+X024174Y020919D01*
+X024197Y020874D01*
+X024216Y020827D01*
+X024231Y020779D01*
+X024243Y020730D01*
+X024251Y020680D01*
+X024255Y020630D01*
+X024255Y020580D01*
+X024251Y020530D01*
+X024243Y020480D01*
+X024231Y020431D01*
+X024216Y020383D01*
+X024197Y020336D01*
+X024174Y020291D01*
+X024148Y020248D01*
+X024119Y020207D01*
+X024086Y020168D01*
+X024051Y020132D01*
+X024013Y020099D01*
+X023973Y020069D01*
+X023930Y020042D01*
+X023885Y020019D01*
+X023839Y019999D01*
+X023791Y019982D01*
+X023743Y019970D01*
+X023693Y019961D01*
+X023643Y019956D01*
+X023592Y019955D01*
+X023542Y019958D01*
+X023492Y019965D01*
+X023443Y019976D01*
+X023395Y019990D01*
+X023348Y020008D01*
+X023302Y020030D01*
+X023258Y020055D01*
+X023217Y020084D01*
+X023178Y020115D01*
+X023141Y020150D01*
+X023107Y020187D01*
+X023076Y020227D01*
+X023048Y020269D01*
+X023024Y020313D01*
+X023003Y020359D01*
+X022986Y020407D01*
+X022973Y020455D01*
+X022963Y020505D01*
+X022957Y020555D01*
+X022955Y020605D01*
+X022076Y022726D02*
+X022078Y022776D01*
+X022084Y022826D01*
+X022094Y022876D01*
+X022107Y022924D01*
+X022124Y022972D01*
+X022145Y023018D01*
+X022169Y023062D01*
+X022197Y023104D01*
+X022228Y023144D01*
+X022262Y023181D01*
+X022299Y023216D01*
+X022338Y023247D01*
+X022379Y023276D01*
+X022423Y023301D01*
+X022469Y023323D01*
+X022516Y023341D01*
+X022564Y023355D01*
+X022613Y023366D01*
+X022663Y023373D01*
+X022713Y023376D01*
+X022764Y023375D01*
+X022814Y023370D01*
+X022864Y023361D01*
+X022912Y023349D01*
+X022960Y023332D01*
+X023006Y023312D01*
+X023051Y023289D01*
+X023094Y023262D01*
+X023134Y023232D01*
+X023172Y023199D01*
+X023207Y023163D01*
+X023240Y023124D01*
+X023269Y023083D01*
+X023295Y023040D01*
+X023318Y022995D01*
+X023337Y022948D01*
+X023352Y022900D01*
+X023364Y022851D01*
+X023372Y022801D01*
+X023376Y022751D01*
+X023376Y022701D01*
+X023372Y022651D01*
+X023364Y022601D01*
+X023352Y022552D01*
+X023337Y022504D01*
+X023318Y022457D01*
+X023295Y022412D01*
+X023269Y022369D01*
+X023240Y022328D01*
+X023207Y022289D01*
+X023172Y022253D01*
+X023134Y022220D01*
+X023094Y022190D01*
+X023051Y022163D01*
+X023006Y022140D01*
+X022960Y022120D01*
+X022912Y022103D01*
+X022864Y022091D01*
+X022814Y022082D01*
+X022764Y022077D01*
+X022713Y022076D01*
+X022663Y022079D01*
+X022613Y022086D01*
+X022564Y022097D01*
+X022516Y022111D01*
+X022469Y022129D01*
+X022423Y022151D01*
+X022379Y022176D01*
+X022338Y022205D01*
+X022299Y022236D01*
+X022262Y022271D01*
+X022228Y022308D01*
+X022197Y022348D01*
+X022169Y022390D01*
+X022145Y022434D01*
+X022124Y022480D01*
+X022107Y022528D01*
+X022094Y022576D01*
+X022084Y022626D01*
+X022078Y022676D01*
+X022076Y022726D01*
+X019955Y023605D02*
+X019957Y023655D01*
+X019963Y023705D01*
+X019973Y023755D01*
+X019986Y023803D01*
+X020003Y023851D01*
+X020024Y023897D01*
+X020048Y023941D01*
+X020076Y023983D01*
+X020107Y024023D01*
+X020141Y024060D01*
+X020178Y024095D01*
+X020217Y024126D01*
+X020258Y024155D01*
+X020302Y024180D01*
+X020348Y024202D01*
+X020395Y024220D01*
+X020443Y024234D01*
+X020492Y024245D01*
+X020542Y024252D01*
+X020592Y024255D01*
+X020643Y024254D01*
+X020693Y024249D01*
+X020743Y024240D01*
+X020791Y024228D01*
+X020839Y024211D01*
+X020885Y024191D01*
+X020930Y024168D01*
+X020973Y024141D01*
+X021013Y024111D01*
+X021051Y024078D01*
+X021086Y024042D01*
+X021119Y024003D01*
+X021148Y023962D01*
+X021174Y023919D01*
+X021197Y023874D01*
+X021216Y023827D01*
+X021231Y023779D01*
+X021243Y023730D01*
+X021251Y023680D01*
+X021255Y023630D01*
+X021255Y023580D01*
+X021251Y023530D01*
+X021243Y023480D01*
+X021231Y023431D01*
+X021216Y023383D01*
+X021197Y023336D01*
+X021174Y023291D01*
+X021148Y023248D01*
+X021119Y023207D01*
+X021086Y023168D01*
+X021051Y023132D01*
+X021013Y023099D01*
+X020973Y023069D01*
+X020930Y023042D01*
+X020885Y023019D01*
+X020839Y022999D01*
+X020791Y022982D01*
+X020743Y022970D01*
+X020693Y022961D01*
+X020643Y022956D01*
+X020592Y022955D01*
+X020542Y022958D01*
+X020492Y022965D01*
+X020443Y022976D01*
+X020395Y022990D01*
+X020348Y023008D01*
+X020302Y023030D01*
+X020258Y023055D01*
+X020217Y023084D01*
+X020178Y023115D01*
+X020141Y023150D01*
+X020107Y023187D01*
+X020076Y023227D01*
+X020048Y023269D01*
+X020024Y023313D01*
+X020003Y023359D01*
+X019986Y023407D01*
+X019973Y023455D01*
+X019963Y023505D01*
+X019957Y023555D01*
+X019955Y023605D01*
+X017834Y022726D02*
+X017836Y022776D01*
+X017842Y022826D01*
+X017852Y022876D01*
+X017865Y022924D01*
+X017882Y022972D01*
+X017903Y023018D01*
+X017927Y023062D01*
+X017955Y023104D01*
+X017986Y023144D01*
+X018020Y023181D01*
+X018057Y023216D01*
+X018096Y023247D01*
+X018137Y023276D01*
+X018181Y023301D01*
+X018227Y023323D01*
+X018274Y023341D01*
+X018322Y023355D01*
+X018371Y023366D01*
+X018421Y023373D01*
+X018471Y023376D01*
+X018522Y023375D01*
+X018572Y023370D01*
+X018622Y023361D01*
+X018670Y023349D01*
+X018718Y023332D01*
+X018764Y023312D01*
+X018809Y023289D01*
+X018852Y023262D01*
+X018892Y023232D01*
+X018930Y023199D01*
+X018965Y023163D01*
+X018998Y023124D01*
+X019027Y023083D01*
+X019053Y023040D01*
+X019076Y022995D01*
+X019095Y022948D01*
+X019110Y022900D01*
+X019122Y022851D01*
+X019130Y022801D01*
+X019134Y022751D01*
+X019134Y022701D01*
+X019130Y022651D01*
+X019122Y022601D01*
+X019110Y022552D01*
+X019095Y022504D01*
+X019076Y022457D01*
+X019053Y022412D01*
+X019027Y022369D01*
+X018998Y022328D01*
+X018965Y022289D01*
+X018930Y022253D01*
+X018892Y022220D01*
+X018852Y022190D01*
+X018809Y022163D01*
+X018764Y022140D01*
+X018718Y022120D01*
+X018670Y022103D01*
+X018622Y022091D01*
+X018572Y022082D01*
+X018522Y022077D01*
+X018471Y022076D01*
+X018421Y022079D01*
+X018371Y022086D01*
+X018322Y022097D01*
+X018274Y022111D01*
+X018227Y022129D01*
+X018181Y022151D01*
+X018137Y022176D01*
+X018096Y022205D01*
+X018057Y022236D01*
+X018020Y022271D01*
+X017986Y022308D01*
+X017955Y022348D01*
+X017927Y022390D01*
+X017903Y022434D01*
+X017882Y022480D01*
+X017865Y022528D01*
+X017852Y022576D01*
+X017842Y022626D01*
+X017836Y022676D01*
+X017834Y022726D01*
+X016955Y020605D02*
+X016957Y020655D01*
+X016963Y020705D01*
+X016973Y020755D01*
+X016986Y020803D01*
+X017003Y020851D01*
+X017024Y020897D01*
+X017048Y020941D01*
+X017076Y020983D01*
+X017107Y021023D01*
+X017141Y021060D01*
+X017178Y021095D01*
+X017217Y021126D01*
+X017258Y021155D01*
+X017302Y021180D01*
+X017348Y021202D01*
+X017395Y021220D01*
+X017443Y021234D01*
+X017492Y021245D01*
+X017542Y021252D01*
+X017592Y021255D01*
+X017643Y021254D01*
+X017693Y021249D01*
+X017743Y021240D01*
+X017791Y021228D01*
+X017839Y021211D01*
+X017885Y021191D01*
+X017930Y021168D01*
+X017973Y021141D01*
+X018013Y021111D01*
+X018051Y021078D01*
+X018086Y021042D01*
+X018119Y021003D01*
+X018148Y020962D01*
+X018174Y020919D01*
+X018197Y020874D01*
+X018216Y020827D01*
+X018231Y020779D01*
+X018243Y020730D01*
+X018251Y020680D01*
+X018255Y020630D01*
+X018255Y020580D01*
+X018251Y020530D01*
+X018243Y020480D01*
+X018231Y020431D01*
+X018216Y020383D01*
+X018197Y020336D01*
+X018174Y020291D01*
+X018148Y020248D01*
+X018119Y020207D01*
+X018086Y020168D01*
+X018051Y020132D01*
+X018013Y020099D01*
+X017973Y020069D01*
+X017930Y020042D01*
+X017885Y020019D01*
+X017839Y019999D01*
+X017791Y019982D01*
+X017743Y019970D01*
+X017693Y019961D01*
+X017643Y019956D01*
+X017592Y019955D01*
+X017542Y019958D01*
+X017492Y019965D01*
+X017443Y019976D01*
+X017395Y019990D01*
+X017348Y020008D01*
+X017302Y020030D01*
+X017258Y020055D01*
+X017217Y020084D01*
+X017178Y020115D01*
+X017141Y020150D01*
+X017107Y020187D01*
+X017076Y020227D01*
+X017048Y020269D01*
+X017024Y020313D01*
+X017003Y020359D01*
+X016986Y020407D01*
+X016973Y020455D01*
+X016963Y020505D01*
+X016957Y020555D01*
+X016955Y020605D01*
+X017834Y018484D02*
+X017836Y018534D01*
+X017842Y018584D01*
+X017852Y018634D01*
+X017865Y018682D01*
+X017882Y018730D01*
+X017903Y018776D01*
+X017927Y018820D01*
+X017955Y018862D01*
+X017986Y018902D01*
+X018020Y018939D01*
+X018057Y018974D01*
+X018096Y019005D01*
+X018137Y019034D01*
+X018181Y019059D01*
+X018227Y019081D01*
+X018274Y019099D01*
+X018322Y019113D01*
+X018371Y019124D01*
+X018421Y019131D01*
+X018471Y019134D01*
+X018522Y019133D01*
+X018572Y019128D01*
+X018622Y019119D01*
+X018670Y019107D01*
+X018718Y019090D01*
+X018764Y019070D01*
+X018809Y019047D01*
+X018852Y019020D01*
+X018892Y018990D01*
+X018930Y018957D01*
+X018965Y018921D01*
+X018998Y018882D01*
+X019027Y018841D01*
+X019053Y018798D01*
+X019076Y018753D01*
+X019095Y018706D01*
+X019110Y018658D01*
+X019122Y018609D01*
+X019130Y018559D01*
+X019134Y018509D01*
+X019134Y018459D01*
+X019130Y018409D01*
+X019122Y018359D01*
+X019110Y018310D01*
+X019095Y018262D01*
+X019076Y018215D01*
+X019053Y018170D01*
+X019027Y018127D01*
+X018998Y018086D01*
+X018965Y018047D01*
+X018930Y018011D01*
+X018892Y017978D01*
+X018852Y017948D01*
+X018809Y017921D01*
+X018764Y017898D01*
+X018718Y017878D01*
+X018670Y017861D01*
+X018622Y017849D01*
+X018572Y017840D01*
+X018522Y017835D01*
+X018471Y017834D01*
+X018421Y017837D01*
+X018371Y017844D01*
+X018322Y017855D01*
+X018274Y017869D01*
+X018227Y017887D01*
+X018181Y017909D01*
+X018137Y017934D01*
+X018096Y017963D01*
+X018057Y017994D01*
+X018020Y018029D01*
+X017986Y018066D01*
+X017955Y018106D01*
+X017927Y018148D01*
+X017903Y018192D01*
+X017882Y018238D01*
+X017865Y018286D01*
+X017852Y018334D01*
+X017842Y018384D01*
+X017836Y018434D01*
+X017834Y018484D01*
+X019955Y017605D02*
+X019957Y017655D01*
+X019963Y017705D01*
+X019973Y017755D01*
+X019986Y017803D01*
+X020003Y017851D01*
+X020024Y017897D01*
+X020048Y017941D01*
+X020076Y017983D01*
+X020107Y018023D01*
+X020141Y018060D01*
+X020178Y018095D01*
+X020217Y018126D01*
+X020258Y018155D01*
+X020302Y018180D01*
+X020348Y018202D01*
+X020395Y018220D01*
+X020443Y018234D01*
+X020492Y018245D01*
+X020542Y018252D01*
+X020592Y018255D01*
+X020643Y018254D01*
+X020693Y018249D01*
+X020743Y018240D01*
+X020791Y018228D01*
+X020839Y018211D01*
+X020885Y018191D01*
+X020930Y018168D01*
+X020973Y018141D01*
+X021013Y018111D01*
+X021051Y018078D01*
+X021086Y018042D01*
+X021119Y018003D01*
+X021148Y017962D01*
+X021174Y017919D01*
+X021197Y017874D01*
+X021216Y017827D01*
+X021231Y017779D01*
+X021243Y017730D01*
+X021251Y017680D01*
+X021255Y017630D01*
+X021255Y017580D01*
+X021251Y017530D01*
+X021243Y017480D01*
+X021231Y017431D01*
+X021216Y017383D01*
+X021197Y017336D01*
+X021174Y017291D01*
+X021148Y017248D01*
+X021119Y017207D01*
+X021086Y017168D01*
+X021051Y017132D01*
+X021013Y017099D01*
+X020973Y017069D01*
+X020930Y017042D01*
+X020885Y017019D01*
+X020839Y016999D01*
+X020791Y016982D01*
+X020743Y016970D01*
+X020693Y016961D01*
+X020643Y016956D01*
+X020592Y016955D01*
+X020542Y016958D01*
+X020492Y016965D01*
+X020443Y016976D01*
+X020395Y016990D01*
+X020348Y017008D01*
+X020302Y017030D01*
+X020258Y017055D01*
+X020217Y017084D01*
+X020178Y017115D01*
+X020141Y017150D01*
+X020107Y017187D01*
+X020076Y017227D01*
+X020048Y017269D01*
+X020024Y017313D01*
+X020003Y017359D01*
+X019986Y017407D01*
+X019973Y017455D01*
+X019963Y017505D01*
+X019957Y017555D01*
+X019955Y017605D01*
+X022076Y018484D02*
+X022078Y018534D01*
+X022084Y018584D01*
+X022094Y018634D01*
+X022107Y018682D01*
+X022124Y018730D01*
+X022145Y018776D01*
+X022169Y018820D01*
+X022197Y018862D01*
+X022228Y018902D01*
+X022262Y018939D01*
+X022299Y018974D01*
+X022338Y019005D01*
+X022379Y019034D01*
+X022423Y019059D01*
+X022469Y019081D01*
+X022516Y019099D01*
+X022564Y019113D01*
+X022613Y019124D01*
+X022663Y019131D01*
+X022713Y019134D01*
+X022764Y019133D01*
+X022814Y019128D01*
+X022864Y019119D01*
+X022912Y019107D01*
+X022960Y019090D01*
+X023006Y019070D01*
+X023051Y019047D01*
+X023094Y019020D01*
+X023134Y018990D01*
+X023172Y018957D01*
+X023207Y018921D01*
+X023240Y018882D01*
+X023269Y018841D01*
+X023295Y018798D01*
+X023318Y018753D01*
+X023337Y018706D01*
+X023352Y018658D01*
+X023364Y018609D01*
+X023372Y018559D01*
+X023376Y018509D01*
+X023376Y018459D01*
+X023372Y018409D01*
+X023364Y018359D01*
+X023352Y018310D01*
+X023337Y018262D01*
+X023318Y018215D01*
+X023295Y018170D01*
+X023269Y018127D01*
+X023240Y018086D01*
+X023207Y018047D01*
+X023172Y018011D01*
+X023134Y017978D01*
+X023094Y017948D01*
+X023051Y017921D01*
+X023006Y017898D01*
+X022960Y017878D01*
+X022912Y017861D01*
+X022864Y017849D01*
+X022814Y017840D01*
+X022764Y017835D01*
+X022713Y017834D01*
+X022663Y017837D01*
+X022613Y017844D01*
+X022564Y017855D01*
+X022516Y017869D01*
+X022469Y017887D01*
+X022423Y017909D01*
+X022379Y017934D01*
+X022338Y017963D01*
+X022299Y017994D01*
+X022262Y018029D01*
+X022228Y018066D01*
+X022197Y018106D01*
+X022169Y018148D01*
+X022145Y018192D01*
+X022124Y018238D01*
+X022107Y018286D01*
+X022094Y018334D01*
+X022084Y018384D01*
+X022078Y018434D01*
+X022076Y018484D01*
+X019955Y020605D02*
+X019957Y020655D01*
+X019963Y020705D01*
+X019973Y020755D01*
+X019986Y020803D01*
+X020003Y020851D01*
+X020024Y020897D01*
+X020048Y020941D01*
+X020076Y020983D01*
+X020107Y021023D01*
+X020141Y021060D01*
+X020178Y021095D01*
+X020217Y021126D01*
+X020258Y021155D01*
+X020302Y021180D01*
+X020348Y021202D01*
+X020395Y021220D01*
+X020443Y021234D01*
+X020492Y021245D01*
+X020542Y021252D01*
+X020592Y021255D01*
+X020643Y021254D01*
+X020693Y021249D01*
+X020743Y021240D01*
+X020791Y021228D01*
+X020839Y021211D01*
+X020885Y021191D01*
+X020930Y021168D01*
+X020973Y021141D01*
+X021013Y021111D01*
+X021051Y021078D01*
+X021086Y021042D01*
+X021119Y021003D01*
+X021148Y020962D01*
+X021174Y020919D01*
+X021197Y020874D01*
+X021216Y020827D01*
+X021231Y020779D01*
+X021243Y020730D01*
+X021251Y020680D01*
+X021255Y020630D01*
+X021255Y020580D01*
+X021251Y020530D01*
+X021243Y020480D01*
+X021231Y020431D01*
+X021216Y020383D01*
+X021197Y020336D01*
+X021174Y020291D01*
+X021148Y020248D01*
+X021119Y020207D01*
+X021086Y020168D01*
+X021051Y020132D01*
+X021013Y020099D01*
+X020973Y020069D01*
+X020930Y020042D01*
+X020885Y020019D01*
+X020839Y019999D01*
+X020791Y019982D01*
+X020743Y019970D01*
+X020693Y019961D01*
+X020643Y019956D01*
+X020592Y019955D01*
+X020542Y019958D01*
+X020492Y019965D01*
+X020443Y019976D01*
+X020395Y019990D01*
+X020348Y020008D01*
+X020302Y020030D01*
+X020258Y020055D01*
+X020217Y020084D01*
+X020178Y020115D01*
+X020141Y020150D01*
+X020107Y020187D01*
+X020076Y020227D01*
+X020048Y020269D01*
+X020024Y020313D01*
+X020003Y020359D01*
+X019986Y020407D01*
+X019973Y020455D01*
+X019963Y020505D01*
+X019957Y020555D01*
+X019955Y020605D01*
+D13*
+X018484Y018484D03*
+X020605Y017605D03*
+X022726Y018484D03*
+X023605Y020605D03*
+X022726Y022726D03*
+X020605Y023605D03*
+X018484Y022726D03*
+X017605Y020605D03*
+X020605Y020605D03*
+D14*
+X042938Y020014D03*
+X042938Y021196D03*
+D15*
+X042855Y023105D03*
+X042855Y018105D03*
+D16*
+X027105Y020605D03*
+X026355Y020605D03*
+M02*
diff --git a/pcb/lf-antenna/CAM/lf-antenna.GML b/pcb/lf-antenna/CAM/lf-antenna.GML
new file mode 100644 (file)
index 0000000..26d3755
--- /dev/null
@@ -0,0 +1,1032 @@
+G75*
+G70*
+%OFA0B0*%
+%FSLAX24Y24*%
+%IPPOS*%
+%LPD*%
+%AMOC8*
+5,1,8,0,0,1.08239X$1,22.5*
+%
+%ADD10C,0.0010*%
+%ADD11C,0.0000*%
+D10*
+X040496Y015646D02*
+X040231Y014683D01*
+X039920Y013735D01*
+X039562Y012803D01*
+X039160Y011890D01*
+X038714Y010997D01*
+X038225Y010127D01*
+X037694Y009282D01*
+X037122Y008463D01*
+X036512Y007674D01*
+X035864Y006915D01*
+X035179Y006188D01*
+X034460Y005496D01*
+X033708Y004839D01*
+X032925Y004220D01*
+X032113Y003640D01*
+X031274Y003100D01*
+X030409Y002601D01*
+X029521Y002146D01*
+X028612Y001733D01*
+X027684Y001366D01*
+X026739Y001044D01*
+X025780Y000769D01*
+X024808Y000541D01*
+X023827Y000360D01*
+X022838Y000227D01*
+X021843Y000142D01*
+X020846Y000106D01*
+X019847Y000119D01*
+X018851Y000180D01*
+X017859Y000290D01*
+X016874Y000447D01*
+X015897Y000653D01*
+X014931Y000906D01*
+X013979Y001205D01*
+X013043Y001551D01*
+X012124Y001941D01*
+X011226Y002376D01*
+X010350Y002854D01*
+X009498Y003375D01*
+X008672Y003936D01*
+X007875Y004536D01*
+X007108Y005175D01*
+X006373Y005850D01*
+X005672Y006560D01*
+X005006Y007304D01*
+X004377Y008079D01*
+X003787Y008884D01*
+X003236Y009716D01*
+X002727Y010574D01*
+X002260Y011457D01*
+X001836Y012360D01*
+X001457Y013284D01*
+X001123Y014224D01*
+X000836Y015180D01*
+X000595Y016149D01*
+X000402Y017128D01*
+X000257Y018116D01*
+X000160Y019109D01*
+X000111Y020106D01*
+X000111Y021104D01*
+X000160Y022101D01*
+X000257Y023094D01*
+X000402Y024082D01*
+X000595Y025061D01*
+X000836Y026030D01*
+X001123Y026986D01*
+X001457Y027926D01*
+X001836Y028850D01*
+X002260Y029753D01*
+X002727Y030636D01*
+X003236Y031494D01*
+X003787Y032326D01*
+X004377Y033131D01*
+X005006Y033906D01*
+X005672Y034650D01*
+X006373Y035360D01*
+X007108Y036035D01*
+X007875Y036674D01*
+X008672Y037274D01*
+X009498Y037835D01*
+X010350Y038356D01*
+X011226Y038834D01*
+X012124Y039269D01*
+X013043Y039659D01*
+X013979Y040005D01*
+X014931Y040304D01*
+X015897Y040557D01*
+X016874Y040763D01*
+X017859Y040920D01*
+X018851Y041030D01*
+X019847Y041091D01*
+X020846Y041104D01*
+X021843Y041068D01*
+X022838Y040983D01*
+X023827Y040850D01*
+X024808Y040669D01*
+X025780Y040441D01*
+X026739Y040166D01*
+X027684Y039844D01*
+X028612Y039477D01*
+X029521Y039064D01*
+X030409Y038609D01*
+X031274Y038110D01*
+X032113Y037570D01*
+X032925Y036990D01*
+X033708Y036371D01*
+X034460Y035714D01*
+X035179Y035022D01*
+X035864Y034295D01*
+X036512Y033536D01*
+X037122Y032747D01*
+X037694Y031928D01*
+X038225Y031083D01*
+X038714Y030213D01*
+X039160Y029320D01*
+X039562Y028407D01*
+X039920Y027475D01*
+X040231Y026527D01*
+X040496Y025564D01*
+X040510Y025515D01*
+X040527Y025467D01*
+X040548Y025421D01*
+X040572Y025376D01*
+X040599Y025333D01*
+X040629Y025291D01*
+X040662Y025252D01*
+X040697Y025216D01*
+X040735Y025182D01*
+X040775Y025150D01*
+X040817Y025122D01*
+X040862Y025096D01*
+X040907Y025074D01*
+X040955Y025055D01*
+X044355Y022105D02*
+X044355Y019105D01*
+X040955Y016105D02*
+X040908Y016091D01*
+X040862Y016074D01*
+X040818Y016054D01*
+X040776Y016030D01*
+X040736Y016002D01*
+X040697Y015972D01*
+X040662Y015939D01*
+X040629Y015903D01*
+X040598Y015865D01*
+X040571Y015825D01*
+X040547Y015782D01*
+X040527Y015738D01*
+X040509Y015692D01*
+X040496Y015646D01*
+X044355Y022105D02*
+X044204Y022372D01*
+X044040Y022632D01*
+X043864Y022883D01*
+X043676Y023125D01*
+X043476Y023358D01*
+X043265Y023581D01*
+X043043Y023793D01*
+X042811Y023994D01*
+X042570Y024183D01*
+X042319Y024361D01*
+X042061Y024526D01*
+X041794Y024678D01*
+X041521Y024818D01*
+X041241Y024943D01*
+X040955Y025055D01*
+X044355Y019105D02*
+X044265Y018887D01*
+X044164Y018674D01*
+X044053Y018467D01*
+X043932Y018264D01*
+X043802Y018068D01*
+X043663Y017878D01*
+X043515Y017695D01*
+X043358Y017519D01*
+X043193Y017351D01*
+X043020Y017191D01*
+X042840Y017039D01*
+X042652Y016896D01*
+X042459Y016763D01*
+X042258Y016638D01*
+X042053Y016524D01*
+X041842Y016419D01*
+X041626Y016325D01*
+X041406Y016241D01*
+X041182Y016167D01*
+X040955Y016105D01*
+D11*
+X017834Y018484D02*
+X017836Y018534D01*
+X017842Y018584D01*
+X017852Y018634D01*
+X017865Y018682D01*
+X017882Y018730D01*
+X017903Y018776D01*
+X017927Y018820D01*
+X017955Y018862D01*
+X017986Y018902D01*
+X018020Y018939D01*
+X018057Y018974D01*
+X018096Y019005D01*
+X018137Y019034D01*
+X018181Y019059D01*
+X018227Y019081D01*
+X018274Y019099D01*
+X018322Y019113D01*
+X018371Y019124D01*
+X018421Y019131D01*
+X018471Y019134D01*
+X018522Y019133D01*
+X018572Y019128D01*
+X018622Y019119D01*
+X018670Y019107D01*
+X018718Y019090D01*
+X018764Y019070D01*
+X018809Y019047D01*
+X018852Y019020D01*
+X018892Y018990D01*
+X018930Y018957D01*
+X018965Y018921D01*
+X018998Y018882D01*
+X019027Y018841D01*
+X019053Y018798D01*
+X019076Y018753D01*
+X019095Y018706D01*
+X019110Y018658D01*
+X019122Y018609D01*
+X019130Y018559D01*
+X019134Y018509D01*
+X019134Y018459D01*
+X019130Y018409D01*
+X019122Y018359D01*
+X019110Y018310D01*
+X019095Y018262D01*
+X019076Y018215D01*
+X019053Y018170D01*
+X019027Y018127D01*
+X018998Y018086D01*
+X018965Y018047D01*
+X018930Y018011D01*
+X018892Y017978D01*
+X018852Y017948D01*
+X018809Y017921D01*
+X018764Y017898D01*
+X018718Y017878D01*
+X018670Y017861D01*
+X018622Y017849D01*
+X018572Y017840D01*
+X018522Y017835D01*
+X018471Y017834D01*
+X018421Y017837D01*
+X018371Y017844D01*
+X018322Y017855D01*
+X018274Y017869D01*
+X018227Y017887D01*
+X018181Y017909D01*
+X018137Y017934D01*
+X018096Y017963D01*
+X018057Y017994D01*
+X018020Y018029D01*
+X017986Y018066D01*
+X017955Y018106D01*
+X017927Y018148D01*
+X017903Y018192D01*
+X017882Y018238D01*
+X017865Y018286D01*
+X017852Y018334D01*
+X017842Y018384D01*
+X017836Y018434D01*
+X017834Y018484D01*
+X016955Y020605D02*
+X016957Y020655D01*
+X016963Y020705D01*
+X016973Y020755D01*
+X016986Y020803D01*
+X017003Y020851D01*
+X017024Y020897D01*
+X017048Y020941D01*
+X017076Y020983D01*
+X017107Y021023D01*
+X017141Y021060D01*
+X017178Y021095D01*
+X017217Y021126D01*
+X017258Y021155D01*
+X017302Y021180D01*
+X017348Y021202D01*
+X017395Y021220D01*
+X017443Y021234D01*
+X017492Y021245D01*
+X017542Y021252D01*
+X017592Y021255D01*
+X017643Y021254D01*
+X017693Y021249D01*
+X017743Y021240D01*
+X017791Y021228D01*
+X017839Y021211D01*
+X017885Y021191D01*
+X017930Y021168D01*
+X017973Y021141D01*
+X018013Y021111D01*
+X018051Y021078D01*
+X018086Y021042D01*
+X018119Y021003D01*
+X018148Y020962D01*
+X018174Y020919D01*
+X018197Y020874D01*
+X018216Y020827D01*
+X018231Y020779D01*
+X018243Y020730D01*
+X018251Y020680D01*
+X018255Y020630D01*
+X018255Y020580D01*
+X018251Y020530D01*
+X018243Y020480D01*
+X018231Y020431D01*
+X018216Y020383D01*
+X018197Y020336D01*
+X018174Y020291D01*
+X018148Y020248D01*
+X018119Y020207D01*
+X018086Y020168D01*
+X018051Y020132D01*
+X018013Y020099D01*
+X017973Y020069D01*
+X017930Y020042D01*
+X017885Y020019D01*
+X017839Y019999D01*
+X017791Y019982D01*
+X017743Y019970D01*
+X017693Y019961D01*
+X017643Y019956D01*
+X017592Y019955D01*
+X017542Y019958D01*
+X017492Y019965D01*
+X017443Y019976D01*
+X017395Y019990D01*
+X017348Y020008D01*
+X017302Y020030D01*
+X017258Y020055D01*
+X017217Y020084D01*
+X017178Y020115D01*
+X017141Y020150D01*
+X017107Y020187D01*
+X017076Y020227D01*
+X017048Y020269D01*
+X017024Y020313D01*
+X017003Y020359D01*
+X016986Y020407D01*
+X016973Y020455D01*
+X016963Y020505D01*
+X016957Y020555D01*
+X016955Y020605D01*
+X017834Y022726D02*
+X017836Y022776D01*
+X017842Y022826D01*
+X017852Y022876D01*
+X017865Y022924D01*
+X017882Y022972D01*
+X017903Y023018D01*
+X017927Y023062D01*
+X017955Y023104D01*
+X017986Y023144D01*
+X018020Y023181D01*
+X018057Y023216D01*
+X018096Y023247D01*
+X018137Y023276D01*
+X018181Y023301D01*
+X018227Y023323D01*
+X018274Y023341D01*
+X018322Y023355D01*
+X018371Y023366D01*
+X018421Y023373D01*
+X018471Y023376D01*
+X018522Y023375D01*
+X018572Y023370D01*
+X018622Y023361D01*
+X018670Y023349D01*
+X018718Y023332D01*
+X018764Y023312D01*
+X018809Y023289D01*
+X018852Y023262D01*
+X018892Y023232D01*
+X018930Y023199D01*
+X018965Y023163D01*
+X018998Y023124D01*
+X019027Y023083D01*
+X019053Y023040D01*
+X019076Y022995D01*
+X019095Y022948D01*
+X019110Y022900D01*
+X019122Y022851D01*
+X019130Y022801D01*
+X019134Y022751D01*
+X019134Y022701D01*
+X019130Y022651D01*
+X019122Y022601D01*
+X019110Y022552D01*
+X019095Y022504D01*
+X019076Y022457D01*
+X019053Y022412D01*
+X019027Y022369D01*
+X018998Y022328D01*
+X018965Y022289D01*
+X018930Y022253D01*
+X018892Y022220D01*
+X018852Y022190D01*
+X018809Y022163D01*
+X018764Y022140D01*
+X018718Y022120D01*
+X018670Y022103D01*
+X018622Y022091D01*
+X018572Y022082D01*
+X018522Y022077D01*
+X018471Y022076D01*
+X018421Y022079D01*
+X018371Y022086D01*
+X018322Y022097D01*
+X018274Y022111D01*
+X018227Y022129D01*
+X018181Y022151D01*
+X018137Y022176D01*
+X018096Y022205D01*
+X018057Y022236D01*
+X018020Y022271D01*
+X017986Y022308D01*
+X017955Y022348D01*
+X017927Y022390D01*
+X017903Y022434D01*
+X017882Y022480D01*
+X017865Y022528D01*
+X017852Y022576D01*
+X017842Y022626D01*
+X017836Y022676D01*
+X017834Y022726D01*
+X019955Y023605D02*
+X019957Y023655D01*
+X019963Y023705D01*
+X019973Y023755D01*
+X019986Y023803D01*
+X020003Y023851D01*
+X020024Y023897D01*
+X020048Y023941D01*
+X020076Y023983D01*
+X020107Y024023D01*
+X020141Y024060D01*
+X020178Y024095D01*
+X020217Y024126D01*
+X020258Y024155D01*
+X020302Y024180D01*
+X020348Y024202D01*
+X020395Y024220D01*
+X020443Y024234D01*
+X020492Y024245D01*
+X020542Y024252D01*
+X020592Y024255D01*
+X020643Y024254D01*
+X020693Y024249D01*
+X020743Y024240D01*
+X020791Y024228D01*
+X020839Y024211D01*
+X020885Y024191D01*
+X020930Y024168D01*
+X020973Y024141D01*
+X021013Y024111D01*
+X021051Y024078D01*
+X021086Y024042D01*
+X021119Y024003D01*
+X021148Y023962D01*
+X021174Y023919D01*
+X021197Y023874D01*
+X021216Y023827D01*
+X021231Y023779D01*
+X021243Y023730D01*
+X021251Y023680D01*
+X021255Y023630D01*
+X021255Y023580D01*
+X021251Y023530D01*
+X021243Y023480D01*
+X021231Y023431D01*
+X021216Y023383D01*
+X021197Y023336D01*
+X021174Y023291D01*
+X021148Y023248D01*
+X021119Y023207D01*
+X021086Y023168D01*
+X021051Y023132D01*
+X021013Y023099D01*
+X020973Y023069D01*
+X020930Y023042D01*
+X020885Y023019D01*
+X020839Y022999D01*
+X020791Y022982D01*
+X020743Y022970D01*
+X020693Y022961D01*
+X020643Y022956D01*
+X020592Y022955D01*
+X020542Y022958D01*
+X020492Y022965D01*
+X020443Y022976D01*
+X020395Y022990D01*
+X020348Y023008D01*
+X020302Y023030D01*
+X020258Y023055D01*
+X020217Y023084D01*
+X020178Y023115D01*
+X020141Y023150D01*
+X020107Y023187D01*
+X020076Y023227D01*
+X020048Y023269D01*
+X020024Y023313D01*
+X020003Y023359D01*
+X019986Y023407D01*
+X019973Y023455D01*
+X019963Y023505D01*
+X019957Y023555D01*
+X019955Y023605D01*
+X022076Y022726D02*
+X022078Y022776D01*
+X022084Y022826D01*
+X022094Y022876D01*
+X022107Y022924D01*
+X022124Y022972D01*
+X022145Y023018D01*
+X022169Y023062D01*
+X022197Y023104D01*
+X022228Y023144D01*
+X022262Y023181D01*
+X022299Y023216D01*
+X022338Y023247D01*
+X022379Y023276D01*
+X022423Y023301D01*
+X022469Y023323D01*
+X022516Y023341D01*
+X022564Y023355D01*
+X022613Y023366D01*
+X022663Y023373D01*
+X022713Y023376D01*
+X022764Y023375D01*
+X022814Y023370D01*
+X022864Y023361D01*
+X022912Y023349D01*
+X022960Y023332D01*
+X023006Y023312D01*
+X023051Y023289D01*
+X023094Y023262D01*
+X023134Y023232D01*
+X023172Y023199D01*
+X023207Y023163D01*
+X023240Y023124D01*
+X023269Y023083D01*
+X023295Y023040D01*
+X023318Y022995D01*
+X023337Y022948D01*
+X023352Y022900D01*
+X023364Y022851D01*
+X023372Y022801D01*
+X023376Y022751D01*
+X023376Y022701D01*
+X023372Y022651D01*
+X023364Y022601D01*
+X023352Y022552D01*
+X023337Y022504D01*
+X023318Y022457D01*
+X023295Y022412D01*
+X023269Y022369D01*
+X023240Y022328D01*
+X023207Y022289D01*
+X023172Y022253D01*
+X023134Y022220D01*
+X023094Y022190D01*
+X023051Y022163D01*
+X023006Y022140D01*
+X022960Y022120D01*
+X022912Y022103D01*
+X022864Y022091D01*
+X022814Y022082D01*
+X022764Y022077D01*
+X022713Y022076D01*
+X022663Y022079D01*
+X022613Y022086D01*
+X022564Y022097D01*
+X022516Y022111D01*
+X022469Y022129D01*
+X022423Y022151D01*
+X022379Y022176D01*
+X022338Y022205D01*
+X022299Y022236D01*
+X022262Y022271D01*
+X022228Y022308D01*
+X022197Y022348D01*
+X022169Y022390D01*
+X022145Y022434D01*
+X022124Y022480D01*
+X022107Y022528D01*
+X022094Y022576D01*
+X022084Y022626D01*
+X022078Y022676D01*
+X022076Y022726D01*
+X019955Y020605D02*
+X019957Y020655D01*
+X019963Y020705D01*
+X019973Y020755D01*
+X019986Y020803D01*
+X020003Y020851D01*
+X020024Y020897D01*
+X020048Y020941D01*
+X020076Y020983D01*
+X020107Y021023D01*
+X020141Y021060D01*
+X020178Y021095D01*
+X020217Y021126D01*
+X020258Y021155D01*
+X020302Y021180D01*
+X020348Y021202D01*
+X020395Y021220D01*
+X020443Y021234D01*
+X020492Y021245D01*
+X020542Y021252D01*
+X020592Y021255D01*
+X020643Y021254D01*
+X020693Y021249D01*
+X020743Y021240D01*
+X020791Y021228D01*
+X020839Y021211D01*
+X020885Y021191D01*
+X020930Y021168D01*
+X020973Y021141D01*
+X021013Y021111D01*
+X021051Y021078D01*
+X021086Y021042D01*
+X021119Y021003D01*
+X021148Y020962D01*
+X021174Y020919D01*
+X021197Y020874D01*
+X021216Y020827D01*
+X021231Y020779D01*
+X021243Y020730D01*
+X021251Y020680D01*
+X021255Y020630D01*
+X021255Y020580D01*
+X021251Y020530D01*
+X021243Y020480D01*
+X021231Y020431D01*
+X021216Y020383D01*
+X021197Y020336D01*
+X021174Y020291D01*
+X021148Y020248D01*
+X021119Y020207D01*
+X021086Y020168D01*
+X021051Y020132D01*
+X021013Y020099D01*
+X020973Y020069D01*
+X020930Y020042D01*
+X020885Y020019D01*
+X020839Y019999D01*
+X020791Y019982D01*
+X020743Y019970D01*
+X020693Y019961D01*
+X020643Y019956D01*
+X020592Y019955D01*
+X020542Y019958D01*
+X020492Y019965D01*
+X020443Y019976D01*
+X020395Y019990D01*
+X020348Y020008D01*
+X020302Y020030D01*
+X020258Y020055D01*
+X020217Y020084D01*
+X020178Y020115D01*
+X020141Y020150D01*
+X020107Y020187D01*
+X020076Y020227D01*
+X020048Y020269D01*
+X020024Y020313D01*
+X020003Y020359D01*
+X019986Y020407D01*
+X019973Y020455D01*
+X019963Y020505D01*
+X019957Y020555D01*
+X019955Y020605D01*
+X022076Y018484D02*
+X022078Y018534D01*
+X022084Y018584D01*
+X022094Y018634D01*
+X022107Y018682D01*
+X022124Y018730D01*
+X022145Y018776D01*
+X022169Y018820D01*
+X022197Y018862D01*
+X022228Y018902D01*
+X022262Y018939D01*
+X022299Y018974D01*
+X022338Y019005D01*
+X022379Y019034D01*
+X022423Y019059D01*
+X022469Y019081D01*
+X022516Y019099D01*
+X022564Y019113D01*
+X022613Y019124D01*
+X022663Y019131D01*
+X022713Y019134D01*
+X022764Y019133D01*
+X022814Y019128D01*
+X022864Y019119D01*
+X022912Y019107D01*
+X022960Y019090D01*
+X023006Y019070D01*
+X023051Y019047D01*
+X023094Y019020D01*
+X023134Y018990D01*
+X023172Y018957D01*
+X023207Y018921D01*
+X023240Y018882D01*
+X023269Y018841D01*
+X023295Y018798D01*
+X023318Y018753D01*
+X023337Y018706D01*
+X023352Y018658D01*
+X023364Y018609D01*
+X023372Y018559D01*
+X023376Y018509D01*
+X023376Y018459D01*
+X023372Y018409D01*
+X023364Y018359D01*
+X023352Y018310D01*
+X023337Y018262D01*
+X023318Y018215D01*
+X023295Y018170D01*
+X023269Y018127D01*
+X023240Y018086D01*
+X023207Y018047D01*
+X023172Y018011D01*
+X023134Y017978D01*
+X023094Y017948D01*
+X023051Y017921D01*
+X023006Y017898D01*
+X022960Y017878D01*
+X022912Y017861D01*
+X022864Y017849D01*
+X022814Y017840D01*
+X022764Y017835D01*
+X022713Y017834D01*
+X022663Y017837D01*
+X022613Y017844D01*
+X022564Y017855D01*
+X022516Y017869D01*
+X022469Y017887D01*
+X022423Y017909D01*
+X022379Y017934D01*
+X022338Y017963D01*
+X022299Y017994D01*
+X022262Y018029D01*
+X022228Y018066D01*
+X022197Y018106D01*
+X022169Y018148D01*
+X022145Y018192D01*
+X022124Y018238D01*
+X022107Y018286D01*
+X022094Y018334D01*
+X022084Y018384D01*
+X022078Y018434D01*
+X022076Y018484D01*
+X019955Y017605D02*
+X019957Y017655D01*
+X019963Y017705D01*
+X019973Y017755D01*
+X019986Y017803D01*
+X020003Y017851D01*
+X020024Y017897D01*
+X020048Y017941D01*
+X020076Y017983D01*
+X020107Y018023D01*
+X020141Y018060D01*
+X020178Y018095D01*
+X020217Y018126D01*
+X020258Y018155D01*
+X020302Y018180D01*
+X020348Y018202D01*
+X020395Y018220D01*
+X020443Y018234D01*
+X020492Y018245D01*
+X020542Y018252D01*
+X020592Y018255D01*
+X020643Y018254D01*
+X020693Y018249D01*
+X020743Y018240D01*
+X020791Y018228D01*
+X020839Y018211D01*
+X020885Y018191D01*
+X020930Y018168D01*
+X020973Y018141D01*
+X021013Y018111D01*
+X021051Y018078D01*
+X021086Y018042D01*
+X021119Y018003D01*
+X021148Y017962D01*
+X021174Y017919D01*
+X021197Y017874D01*
+X021216Y017827D01*
+X021231Y017779D01*
+X021243Y017730D01*
+X021251Y017680D01*
+X021255Y017630D01*
+X021255Y017580D01*
+X021251Y017530D01*
+X021243Y017480D01*
+X021231Y017431D01*
+X021216Y017383D01*
+X021197Y017336D01*
+X021174Y017291D01*
+X021148Y017248D01*
+X021119Y017207D01*
+X021086Y017168D01*
+X021051Y017132D01*
+X021013Y017099D01*
+X020973Y017069D01*
+X020930Y017042D01*
+X020885Y017019D01*
+X020839Y016999D01*
+X020791Y016982D01*
+X020743Y016970D01*
+X020693Y016961D01*
+X020643Y016956D01*
+X020592Y016955D01*
+X020542Y016958D01*
+X020492Y016965D01*
+X020443Y016976D01*
+X020395Y016990D01*
+X020348Y017008D01*
+X020302Y017030D01*
+X020258Y017055D01*
+X020217Y017084D01*
+X020178Y017115D01*
+X020141Y017150D01*
+X020107Y017187D01*
+X020076Y017227D01*
+X020048Y017269D01*
+X020024Y017313D01*
+X020003Y017359D01*
+X019986Y017407D01*
+X019973Y017455D01*
+X019963Y017505D01*
+X019957Y017555D01*
+X019955Y017605D01*
+X022955Y020605D02*
+X022957Y020655D01*
+X022963Y020705D01*
+X022973Y020755D01*
+X022986Y020803D01*
+X023003Y020851D01*
+X023024Y020897D01*
+X023048Y020941D01*
+X023076Y020983D01*
+X023107Y021023D01*
+X023141Y021060D01*
+X023178Y021095D01*
+X023217Y021126D01*
+X023258Y021155D01*
+X023302Y021180D01*
+X023348Y021202D01*
+X023395Y021220D01*
+X023443Y021234D01*
+X023492Y021245D01*
+X023542Y021252D01*
+X023592Y021255D01*
+X023643Y021254D01*
+X023693Y021249D01*
+X023743Y021240D01*
+X023791Y021228D01*
+X023839Y021211D01*
+X023885Y021191D01*
+X023930Y021168D01*
+X023973Y021141D01*
+X024013Y021111D01*
+X024051Y021078D01*
+X024086Y021042D01*
+X024119Y021003D01*
+X024148Y020962D01*
+X024174Y020919D01*
+X024197Y020874D01*
+X024216Y020827D01*
+X024231Y020779D01*
+X024243Y020730D01*
+X024251Y020680D01*
+X024255Y020630D01*
+X024255Y020580D01*
+X024251Y020530D01*
+X024243Y020480D01*
+X024231Y020431D01*
+X024216Y020383D01*
+X024197Y020336D01*
+X024174Y020291D01*
+X024148Y020248D01*
+X024119Y020207D01*
+X024086Y020168D01*
+X024051Y020132D01*
+X024013Y020099D01*
+X023973Y020069D01*
+X023930Y020042D01*
+X023885Y020019D01*
+X023839Y019999D01*
+X023791Y019982D01*
+X023743Y019970D01*
+X023693Y019961D01*
+X023643Y019956D01*
+X023592Y019955D01*
+X023542Y019958D01*
+X023492Y019965D01*
+X023443Y019976D01*
+X023395Y019990D01*
+X023348Y020008D01*
+X023302Y020030D01*
+X023258Y020055D01*
+X023217Y020084D01*
+X023178Y020115D01*
+X023141Y020150D01*
+X023107Y020187D01*
+X023076Y020227D01*
+X023048Y020269D01*
+X023024Y020313D01*
+X023003Y020359D01*
+X022986Y020407D01*
+X022973Y020455D01*
+X022963Y020505D01*
+X022957Y020555D01*
+X022955Y020605D01*
+X042741Y020014D02*
+X042743Y020041D01*
+X042749Y020068D01*
+X042758Y020094D01*
+X042771Y020118D01*
+X042787Y020141D01*
+X042806Y020160D01*
+X042828Y020177D01*
+X042852Y020191D01*
+X042877Y020201D01*
+X042904Y020208D01*
+X042931Y020211D01*
+X042959Y020210D01*
+X042986Y020205D01*
+X043012Y020197D01*
+X043036Y020185D01*
+X043059Y020169D01*
+X043080Y020151D01*
+X043097Y020130D01*
+X043112Y020106D01*
+X043123Y020081D01*
+X043131Y020055D01*
+X043135Y020028D01*
+X043135Y020000D01*
+X043131Y019973D01*
+X043123Y019947D01*
+X043112Y019922D01*
+X043097Y019898D01*
+X043080Y019877D01*
+X043059Y019859D01*
+X043037Y019843D01*
+X043012Y019831D01*
+X042986Y019823D01*
+X042959Y019818D01*
+X042931Y019817D01*
+X042904Y019820D01*
+X042877Y019827D01*
+X042852Y019837D01*
+X042828Y019851D01*
+X042806Y019868D01*
+X042787Y019887D01*
+X042771Y019910D01*
+X042758Y019934D01*
+X042749Y019960D01*
+X042743Y019987D01*
+X042741Y020014D01*
+X042741Y021196D02*
+X042743Y021223D01*
+X042749Y021250D01*
+X042758Y021276D01*
+X042771Y021300D01*
+X042787Y021323D01*
+X042806Y021342D01*
+X042828Y021359D01*
+X042852Y021373D01*
+X042877Y021383D01*
+X042904Y021390D01*
+X042931Y021393D01*
+X042959Y021392D01*
+X042986Y021387D01*
+X043012Y021379D01*
+X043036Y021367D01*
+X043059Y021351D01*
+X043080Y021333D01*
+X043097Y021312D01*
+X043112Y021288D01*
+X043123Y021263D01*
+X043131Y021237D01*
+X043135Y021210D01*
+X043135Y021182D01*
+X043131Y021155D01*
+X043123Y021129D01*
+X043112Y021104D01*
+X043097Y021080D01*
+X043080Y021059D01*
+X043059Y021041D01*
+X043037Y021025D01*
+X043012Y021013D01*
+X042986Y021005D01*
+X042959Y021000D01*
+X042931Y020999D01*
+X042904Y021002D01*
+X042877Y021009D01*
+X042852Y021019D01*
+X042828Y021033D01*
+X042806Y021050D01*
+X042787Y021069D01*
+X042771Y021092D01*
+X042758Y021116D01*
+X042749Y021142D01*
+X042743Y021169D01*
+X042741Y021196D01*
+M02*
diff --git a/pcb/lf-antenna/CAM/lf-antenna.GTL b/pcb/lf-antenna/CAM/lf-antenna.GTL
new file mode 100644 (file)
index 0000000..69f6922
--- /dev/null
@@ -0,0 +1,8385 @@
+G75*
+G70*
+%OFA0B0*%
+%FSLAX24Y24*%
+%IPPOS*%
+%LPD*%
+%AMOC8*
+5,1,8,0,0,1.08239X$1,22.5*
+%
+%ADD10C,0.0010*%
+%ADD11C,0.0000*%
+%ADD12R,0.1496X0.0906*%
+%ADD13R,0.0984X0.0217*%
+%ADD14R,0.0394X0.0433*%
+%ADD15C,0.0150*%
+%ADD16C,0.0700*%
+%ADD17C,0.0591*%
+D10*
+X040496Y015646D02*
+X040231Y014683D01*
+X039920Y013735D01*
+X039562Y012803D01*
+X039160Y011890D01*
+X038714Y010997D01*
+X038225Y010127D01*
+X037694Y009282D01*
+X037122Y008463D01*
+X036512Y007674D01*
+X035864Y006915D01*
+X035179Y006188D01*
+X034460Y005496D01*
+X033708Y004839D01*
+X032925Y004220D01*
+X032113Y003640D01*
+X031274Y003100D01*
+X030409Y002601D01*
+X029521Y002146D01*
+X028612Y001733D01*
+X027684Y001366D01*
+X026739Y001044D01*
+X025780Y000769D01*
+X024808Y000541D01*
+X023827Y000360D01*
+X022838Y000227D01*
+X021843Y000142D01*
+X020846Y000106D01*
+X019847Y000119D01*
+X018851Y000180D01*
+X017859Y000290D01*
+X016874Y000447D01*
+X015897Y000653D01*
+X014931Y000906D01*
+X013979Y001205D01*
+X013043Y001551D01*
+X012124Y001941D01*
+X011226Y002376D01*
+X010350Y002854D01*
+X009498Y003375D01*
+X008672Y003936D01*
+X007875Y004536D01*
+X007108Y005175D01*
+X006373Y005850D01*
+X005672Y006560D01*
+X005006Y007304D01*
+X004377Y008079D01*
+X003787Y008884D01*
+X003236Y009716D01*
+X002727Y010574D01*
+X002260Y011457D01*
+X001836Y012360D01*
+X001457Y013284D01*
+X001123Y014224D01*
+X000836Y015180D01*
+X000595Y016149D01*
+X000402Y017128D01*
+X000257Y018116D01*
+X000160Y019109D01*
+X000111Y020106D01*
+X000111Y021104D01*
+X000160Y022101D01*
+X000257Y023094D01*
+X000402Y024082D01*
+X000595Y025061D01*
+X000836Y026030D01*
+X001123Y026986D01*
+X001457Y027926D01*
+X001836Y028850D01*
+X002260Y029753D01*
+X002727Y030636D01*
+X003236Y031494D01*
+X003787Y032326D01*
+X004377Y033131D01*
+X005006Y033906D01*
+X005672Y034650D01*
+X006373Y035360D01*
+X007108Y036035D01*
+X007875Y036674D01*
+X008672Y037274D01*
+X009498Y037835D01*
+X010350Y038356D01*
+X011226Y038834D01*
+X012124Y039269D01*
+X013043Y039659D01*
+X013979Y040005D01*
+X014931Y040304D01*
+X015897Y040557D01*
+X016874Y040763D01*
+X017859Y040920D01*
+X018851Y041030D01*
+X019847Y041091D01*
+X020846Y041104D01*
+X021843Y041068D01*
+X022838Y040983D01*
+X023827Y040850D01*
+X024808Y040669D01*
+X025780Y040441D01*
+X026739Y040166D01*
+X027684Y039844D01*
+X028612Y039477D01*
+X029521Y039064D01*
+X030409Y038609D01*
+X031274Y038110D01*
+X032113Y037570D01*
+X032925Y036990D01*
+X033708Y036371D01*
+X034460Y035714D01*
+X035179Y035022D01*
+X035864Y034295D01*
+X036512Y033536D01*
+X037122Y032747D01*
+X037694Y031928D01*
+X038225Y031083D01*
+X038714Y030213D01*
+X039160Y029320D01*
+X039562Y028407D01*
+X039920Y027475D01*
+X040231Y026527D01*
+X040496Y025564D01*
+X040510Y025515D01*
+X040527Y025467D01*
+X040548Y025421D01*
+X040572Y025376D01*
+X040599Y025333D01*
+X040629Y025291D01*
+X040662Y025252D01*
+X040697Y025216D01*
+X040735Y025182D01*
+X040775Y025150D01*
+X040817Y025122D01*
+X040862Y025096D01*
+X040907Y025074D01*
+X040955Y025055D01*
+X044355Y022105D02*
+X044355Y019105D01*
+X040955Y016105D02*
+X040908Y016091D01*
+X040862Y016074D01*
+X040818Y016054D01*
+X040776Y016030D01*
+X040736Y016002D01*
+X040697Y015972D01*
+X040662Y015939D01*
+X040629Y015903D01*
+X040598Y015865D01*
+X040571Y015825D01*
+X040547Y015782D01*
+X040527Y015738D01*
+X040509Y015692D01*
+X040496Y015646D01*
+X044355Y022105D02*
+X044204Y022372D01*
+X044040Y022632D01*
+X043864Y022883D01*
+X043676Y023125D01*
+X043476Y023358D01*
+X043265Y023581D01*
+X043043Y023793D01*
+X042811Y023994D01*
+X042570Y024183D01*
+X042319Y024361D01*
+X042061Y024526D01*
+X041794Y024678D01*
+X041521Y024818D01*
+X041241Y024943D01*
+X040955Y025055D01*
+X044355Y019105D02*
+X044265Y018887D01*
+X044164Y018674D01*
+X044053Y018467D01*
+X043932Y018264D01*
+X043802Y018068D01*
+X043663Y017878D01*
+X043515Y017695D01*
+X043358Y017519D01*
+X043193Y017351D01*
+X043020Y017191D01*
+X042840Y017039D01*
+X042652Y016896D01*
+X042459Y016763D01*
+X042258Y016638D01*
+X042053Y016524D01*
+X041842Y016419D01*
+X041626Y016325D01*
+X041406Y016241D01*
+X041182Y016167D01*
+X040955Y016105D01*
+D11*
+X017834Y018484D02*
+X017836Y018534D01*
+X017842Y018584D01*
+X017852Y018634D01*
+X017865Y018682D01*
+X017882Y018730D01*
+X017903Y018776D01*
+X017927Y018820D01*
+X017955Y018862D01*
+X017986Y018902D01*
+X018020Y018939D01*
+X018057Y018974D01*
+X018096Y019005D01*
+X018137Y019034D01*
+X018181Y019059D01*
+X018227Y019081D01*
+X018274Y019099D01*
+X018322Y019113D01*
+X018371Y019124D01*
+X018421Y019131D01*
+X018471Y019134D01*
+X018522Y019133D01*
+X018572Y019128D01*
+X018622Y019119D01*
+X018670Y019107D01*
+X018718Y019090D01*
+X018764Y019070D01*
+X018809Y019047D01*
+X018852Y019020D01*
+X018892Y018990D01*
+X018930Y018957D01*
+X018965Y018921D01*
+X018998Y018882D01*
+X019027Y018841D01*
+X019053Y018798D01*
+X019076Y018753D01*
+X019095Y018706D01*
+X019110Y018658D01*
+X019122Y018609D01*
+X019130Y018559D01*
+X019134Y018509D01*
+X019134Y018459D01*
+X019130Y018409D01*
+X019122Y018359D01*
+X019110Y018310D01*
+X019095Y018262D01*
+X019076Y018215D01*
+X019053Y018170D01*
+X019027Y018127D01*
+X018998Y018086D01*
+X018965Y018047D01*
+X018930Y018011D01*
+X018892Y017978D01*
+X018852Y017948D01*
+X018809Y017921D01*
+X018764Y017898D01*
+X018718Y017878D01*
+X018670Y017861D01*
+X018622Y017849D01*
+X018572Y017840D01*
+X018522Y017835D01*
+X018471Y017834D01*
+X018421Y017837D01*
+X018371Y017844D01*
+X018322Y017855D01*
+X018274Y017869D01*
+X018227Y017887D01*
+X018181Y017909D01*
+X018137Y017934D01*
+X018096Y017963D01*
+X018057Y017994D01*
+X018020Y018029D01*
+X017986Y018066D01*
+X017955Y018106D01*
+X017927Y018148D01*
+X017903Y018192D01*
+X017882Y018238D01*
+X017865Y018286D01*
+X017852Y018334D01*
+X017842Y018384D01*
+X017836Y018434D01*
+X017834Y018484D01*
+X016955Y020605D02*
+X016957Y020655D01*
+X016963Y020705D01*
+X016973Y020755D01*
+X016986Y020803D01*
+X017003Y020851D01*
+X017024Y020897D01*
+X017048Y020941D01*
+X017076Y020983D01*
+X017107Y021023D01*
+X017141Y021060D01*
+X017178Y021095D01*
+X017217Y021126D01*
+X017258Y021155D01*
+X017302Y021180D01*
+X017348Y021202D01*
+X017395Y021220D01*
+X017443Y021234D01*
+X017492Y021245D01*
+X017542Y021252D01*
+X017592Y021255D01*
+X017643Y021254D01*
+X017693Y021249D01*
+X017743Y021240D01*
+X017791Y021228D01*
+X017839Y021211D01*
+X017885Y021191D01*
+X017930Y021168D01*
+X017973Y021141D01*
+X018013Y021111D01*
+X018051Y021078D01*
+X018086Y021042D01*
+X018119Y021003D01*
+X018148Y020962D01*
+X018174Y020919D01*
+X018197Y020874D01*
+X018216Y020827D01*
+X018231Y020779D01*
+X018243Y020730D01*
+X018251Y020680D01*
+X018255Y020630D01*
+X018255Y020580D01*
+X018251Y020530D01*
+X018243Y020480D01*
+X018231Y020431D01*
+X018216Y020383D01*
+X018197Y020336D01*
+X018174Y020291D01*
+X018148Y020248D01*
+X018119Y020207D01*
+X018086Y020168D01*
+X018051Y020132D01*
+X018013Y020099D01*
+X017973Y020069D01*
+X017930Y020042D01*
+X017885Y020019D01*
+X017839Y019999D01*
+X017791Y019982D01*
+X017743Y019970D01*
+X017693Y019961D01*
+X017643Y019956D01*
+X017592Y019955D01*
+X017542Y019958D01*
+X017492Y019965D01*
+X017443Y019976D01*
+X017395Y019990D01*
+X017348Y020008D01*
+X017302Y020030D01*
+X017258Y020055D01*
+X017217Y020084D01*
+X017178Y020115D01*
+X017141Y020150D01*
+X017107Y020187D01*
+X017076Y020227D01*
+X017048Y020269D01*
+X017024Y020313D01*
+X017003Y020359D01*
+X016986Y020407D01*
+X016973Y020455D01*
+X016963Y020505D01*
+X016957Y020555D01*
+X016955Y020605D01*
+X017834Y022726D02*
+X017836Y022776D01*
+X017842Y022826D01*
+X017852Y022876D01*
+X017865Y022924D01*
+X017882Y022972D01*
+X017903Y023018D01*
+X017927Y023062D01*
+X017955Y023104D01*
+X017986Y023144D01*
+X018020Y023181D01*
+X018057Y023216D01*
+X018096Y023247D01*
+X018137Y023276D01*
+X018181Y023301D01*
+X018227Y023323D01*
+X018274Y023341D01*
+X018322Y023355D01*
+X018371Y023366D01*
+X018421Y023373D01*
+X018471Y023376D01*
+X018522Y023375D01*
+X018572Y023370D01*
+X018622Y023361D01*
+X018670Y023349D01*
+X018718Y023332D01*
+X018764Y023312D01*
+X018809Y023289D01*
+X018852Y023262D01*
+X018892Y023232D01*
+X018930Y023199D01*
+X018965Y023163D01*
+X018998Y023124D01*
+X019027Y023083D01*
+X019053Y023040D01*
+X019076Y022995D01*
+X019095Y022948D01*
+X019110Y022900D01*
+X019122Y022851D01*
+X019130Y022801D01*
+X019134Y022751D01*
+X019134Y022701D01*
+X019130Y022651D01*
+X019122Y022601D01*
+X019110Y022552D01*
+X019095Y022504D01*
+X019076Y022457D01*
+X019053Y022412D01*
+X019027Y022369D01*
+X018998Y022328D01*
+X018965Y022289D01*
+X018930Y022253D01*
+X018892Y022220D01*
+X018852Y022190D01*
+X018809Y022163D01*
+X018764Y022140D01*
+X018718Y022120D01*
+X018670Y022103D01*
+X018622Y022091D01*
+X018572Y022082D01*
+X018522Y022077D01*
+X018471Y022076D01*
+X018421Y022079D01*
+X018371Y022086D01*
+X018322Y022097D01*
+X018274Y022111D01*
+X018227Y022129D01*
+X018181Y022151D01*
+X018137Y022176D01*
+X018096Y022205D01*
+X018057Y022236D01*
+X018020Y022271D01*
+X017986Y022308D01*
+X017955Y022348D01*
+X017927Y022390D01*
+X017903Y022434D01*
+X017882Y022480D01*
+X017865Y022528D01*
+X017852Y022576D01*
+X017842Y022626D01*
+X017836Y022676D01*
+X017834Y022726D01*
+X019955Y023605D02*
+X019957Y023655D01*
+X019963Y023705D01*
+X019973Y023755D01*
+X019986Y023803D01*
+X020003Y023851D01*
+X020024Y023897D01*
+X020048Y023941D01*
+X020076Y023983D01*
+X020107Y024023D01*
+X020141Y024060D01*
+X020178Y024095D01*
+X020217Y024126D01*
+X020258Y024155D01*
+X020302Y024180D01*
+X020348Y024202D01*
+X020395Y024220D01*
+X020443Y024234D01*
+X020492Y024245D01*
+X020542Y024252D01*
+X020592Y024255D01*
+X020643Y024254D01*
+X020693Y024249D01*
+X020743Y024240D01*
+X020791Y024228D01*
+X020839Y024211D01*
+X020885Y024191D01*
+X020930Y024168D01*
+X020973Y024141D01*
+X021013Y024111D01*
+X021051Y024078D01*
+X021086Y024042D01*
+X021119Y024003D01*
+X021148Y023962D01*
+X021174Y023919D01*
+X021197Y023874D01*
+X021216Y023827D01*
+X021231Y023779D01*
+X021243Y023730D01*
+X021251Y023680D01*
+X021255Y023630D01*
+X021255Y023580D01*
+X021251Y023530D01*
+X021243Y023480D01*
+X021231Y023431D01*
+X021216Y023383D01*
+X021197Y023336D01*
+X021174Y023291D01*
+X021148Y023248D01*
+X021119Y023207D01*
+X021086Y023168D01*
+X021051Y023132D01*
+X021013Y023099D01*
+X020973Y023069D01*
+X020930Y023042D01*
+X020885Y023019D01*
+X020839Y022999D01*
+X020791Y022982D01*
+X020743Y022970D01*
+X020693Y022961D01*
+X020643Y022956D01*
+X020592Y022955D01*
+X020542Y022958D01*
+X020492Y022965D01*
+X020443Y022976D01*
+X020395Y022990D01*
+X020348Y023008D01*
+X020302Y023030D01*
+X020258Y023055D01*
+X020217Y023084D01*
+X020178Y023115D01*
+X020141Y023150D01*
+X020107Y023187D01*
+X020076Y023227D01*
+X020048Y023269D01*
+X020024Y023313D01*
+X020003Y023359D01*
+X019986Y023407D01*
+X019973Y023455D01*
+X019963Y023505D01*
+X019957Y023555D01*
+X019955Y023605D01*
+X022076Y022726D02*
+X022078Y022776D01*
+X022084Y022826D01*
+X022094Y022876D01*
+X022107Y022924D01*
+X022124Y022972D01*
+X022145Y023018D01*
+X022169Y023062D01*
+X022197Y023104D01*
+X022228Y023144D01*
+X022262Y023181D01*
+X022299Y023216D01*
+X022338Y023247D01*
+X022379Y023276D01*
+X022423Y023301D01*
+X022469Y023323D01*
+X022516Y023341D01*
+X022564Y023355D01*
+X022613Y023366D01*
+X022663Y023373D01*
+X022713Y023376D01*
+X022764Y023375D01*
+X022814Y023370D01*
+X022864Y023361D01*
+X022912Y023349D01*
+X022960Y023332D01*
+X023006Y023312D01*
+X023051Y023289D01*
+X023094Y023262D01*
+X023134Y023232D01*
+X023172Y023199D01*
+X023207Y023163D01*
+X023240Y023124D01*
+X023269Y023083D01*
+X023295Y023040D01*
+X023318Y022995D01*
+X023337Y022948D01*
+X023352Y022900D01*
+X023364Y022851D01*
+X023372Y022801D01*
+X023376Y022751D01*
+X023376Y022701D01*
+X023372Y022651D01*
+X023364Y022601D01*
+X023352Y022552D01*
+X023337Y022504D01*
+X023318Y022457D01*
+X023295Y022412D01*
+X023269Y022369D01*
+X023240Y022328D01*
+X023207Y022289D01*
+X023172Y022253D01*
+X023134Y022220D01*
+X023094Y022190D01*
+X023051Y022163D01*
+X023006Y022140D01*
+X022960Y022120D01*
+X022912Y022103D01*
+X022864Y022091D01*
+X022814Y022082D01*
+X022764Y022077D01*
+X022713Y022076D01*
+X022663Y022079D01*
+X022613Y022086D01*
+X022564Y022097D01*
+X022516Y022111D01*
+X022469Y022129D01*
+X022423Y022151D01*
+X022379Y022176D01*
+X022338Y022205D01*
+X022299Y022236D01*
+X022262Y022271D01*
+X022228Y022308D01*
+X022197Y022348D01*
+X022169Y022390D01*
+X022145Y022434D01*
+X022124Y022480D01*
+X022107Y022528D01*
+X022094Y022576D01*
+X022084Y022626D01*
+X022078Y022676D01*
+X022076Y022726D01*
+X019955Y020605D02*
+X019957Y020655D01*
+X019963Y020705D01*
+X019973Y020755D01*
+X019986Y020803D01*
+X020003Y020851D01*
+X020024Y020897D01*
+X020048Y020941D01*
+X020076Y020983D01*
+X020107Y021023D01*
+X020141Y021060D01*
+X020178Y021095D01*
+X020217Y021126D01*
+X020258Y021155D01*
+X020302Y021180D01*
+X020348Y021202D01*
+X020395Y021220D01*
+X020443Y021234D01*
+X020492Y021245D01*
+X020542Y021252D01*
+X020592Y021255D01*
+X020643Y021254D01*
+X020693Y021249D01*
+X020743Y021240D01*
+X020791Y021228D01*
+X020839Y021211D01*
+X020885Y021191D01*
+X020930Y021168D01*
+X020973Y021141D01*
+X021013Y021111D01*
+X021051Y021078D01*
+X021086Y021042D01*
+X021119Y021003D01*
+X021148Y020962D01*
+X021174Y020919D01*
+X021197Y020874D01*
+X021216Y020827D01*
+X021231Y020779D01*
+X021243Y020730D01*
+X021251Y020680D01*
+X021255Y020630D01*
+X021255Y020580D01*
+X021251Y020530D01*
+X021243Y020480D01*
+X021231Y020431D01*
+X021216Y020383D01*
+X021197Y020336D01*
+X021174Y020291D01*
+X021148Y020248D01*
+X021119Y020207D01*
+X021086Y020168D01*
+X021051Y020132D01*
+X021013Y020099D01*
+X020973Y020069D01*
+X020930Y020042D01*
+X020885Y020019D01*
+X020839Y019999D01*
+X020791Y019982D01*
+X020743Y019970D01*
+X020693Y019961D01*
+X020643Y019956D01*
+X020592Y019955D01*
+X020542Y019958D01*
+X020492Y019965D01*
+X020443Y019976D01*
+X020395Y019990D01*
+X020348Y020008D01*
+X020302Y020030D01*
+X020258Y020055D01*
+X020217Y020084D01*
+X020178Y020115D01*
+X020141Y020150D01*
+X020107Y020187D01*
+X020076Y020227D01*
+X020048Y020269D01*
+X020024Y020313D01*
+X020003Y020359D01*
+X019986Y020407D01*
+X019973Y020455D01*
+X019963Y020505D01*
+X019957Y020555D01*
+X019955Y020605D01*
+X022076Y018484D02*
+X022078Y018534D01*
+X022084Y018584D01*
+X022094Y018634D01*
+X022107Y018682D01*
+X022124Y018730D01*
+X022145Y018776D01*
+X022169Y018820D01*
+X022197Y018862D01*
+X022228Y018902D01*
+X022262Y018939D01*
+X022299Y018974D01*
+X022338Y019005D01*
+X022379Y019034D01*
+X022423Y019059D01*
+X022469Y019081D01*
+X022516Y019099D01*
+X022564Y019113D01*
+X022613Y019124D01*
+X022663Y019131D01*
+X022713Y019134D01*
+X022764Y019133D01*
+X022814Y019128D01*
+X022864Y019119D01*
+X022912Y019107D01*
+X022960Y019090D01*
+X023006Y019070D01*
+X023051Y019047D01*
+X023094Y019020D01*
+X023134Y018990D01*
+X023172Y018957D01*
+X023207Y018921D01*
+X023240Y018882D01*
+X023269Y018841D01*
+X023295Y018798D01*
+X023318Y018753D01*
+X023337Y018706D01*
+X023352Y018658D01*
+X023364Y018609D01*
+X023372Y018559D01*
+X023376Y018509D01*
+X023376Y018459D01*
+X023372Y018409D01*
+X023364Y018359D01*
+X023352Y018310D01*
+X023337Y018262D01*
+X023318Y018215D01*
+X023295Y018170D01*
+X023269Y018127D01*
+X023240Y018086D01*
+X023207Y018047D01*
+X023172Y018011D01*
+X023134Y017978D01*
+X023094Y017948D01*
+X023051Y017921D01*
+X023006Y017898D01*
+X022960Y017878D01*
+X022912Y017861D01*
+X022864Y017849D01*
+X022814Y017840D01*
+X022764Y017835D01*
+X022713Y017834D01*
+X022663Y017837D01*
+X022613Y017844D01*
+X022564Y017855D01*
+X022516Y017869D01*
+X022469Y017887D01*
+X022423Y017909D01*
+X022379Y017934D01*
+X022338Y017963D01*
+X022299Y017994D01*
+X022262Y018029D01*
+X022228Y018066D01*
+X022197Y018106D01*
+X022169Y018148D01*
+X022145Y018192D01*
+X022124Y018238D01*
+X022107Y018286D01*
+X022094Y018334D01*
+X022084Y018384D01*
+X022078Y018434D01*
+X022076Y018484D01*
+X019955Y017605D02*
+X019957Y017655D01*
+X019963Y017705D01*
+X019973Y017755D01*
+X019986Y017803D01*
+X020003Y017851D01*
+X020024Y017897D01*
+X020048Y017941D01*
+X020076Y017983D01*
+X020107Y018023D01*
+X020141Y018060D01*
+X020178Y018095D01*
+X020217Y018126D01*
+X020258Y018155D01*
+X020302Y018180D01*
+X020348Y018202D01*
+X020395Y018220D01*
+X020443Y018234D01*
+X020492Y018245D01*
+X020542Y018252D01*
+X020592Y018255D01*
+X020643Y018254D01*
+X020693Y018249D01*
+X020743Y018240D01*
+X020791Y018228D01*
+X020839Y018211D01*
+X020885Y018191D01*
+X020930Y018168D01*
+X020973Y018141D01*
+X021013Y018111D01*
+X021051Y018078D01*
+X021086Y018042D01*
+X021119Y018003D01*
+X021148Y017962D01*
+X021174Y017919D01*
+X021197Y017874D01*
+X021216Y017827D01*
+X021231Y017779D01*
+X021243Y017730D01*
+X021251Y017680D01*
+X021255Y017630D01*
+X021255Y017580D01*
+X021251Y017530D01*
+X021243Y017480D01*
+X021231Y017431D01*
+X021216Y017383D01*
+X021197Y017336D01*
+X021174Y017291D01*
+X021148Y017248D01*
+X021119Y017207D01*
+X021086Y017168D01*
+X021051Y017132D01*
+X021013Y017099D01*
+X020973Y017069D01*
+X020930Y017042D01*
+X020885Y017019D01*
+X020839Y016999D01*
+X020791Y016982D01*
+X020743Y016970D01*
+X020693Y016961D01*
+X020643Y016956D01*
+X020592Y016955D01*
+X020542Y016958D01*
+X020492Y016965D01*
+X020443Y016976D01*
+X020395Y016990D01*
+X020348Y017008D01*
+X020302Y017030D01*
+X020258Y017055D01*
+X020217Y017084D01*
+X020178Y017115D01*
+X020141Y017150D01*
+X020107Y017187D01*
+X020076Y017227D01*
+X020048Y017269D01*
+X020024Y017313D01*
+X020003Y017359D01*
+X019986Y017407D01*
+X019973Y017455D01*
+X019963Y017505D01*
+X019957Y017555D01*
+X019955Y017605D01*
+X022955Y020605D02*
+X022957Y020655D01*
+X022963Y020705D01*
+X022973Y020755D01*
+X022986Y020803D01*
+X023003Y020851D01*
+X023024Y020897D01*
+X023048Y020941D01*
+X023076Y020983D01*
+X023107Y021023D01*
+X023141Y021060D01*
+X023178Y021095D01*
+X023217Y021126D01*
+X023258Y021155D01*
+X023302Y021180D01*
+X023348Y021202D01*
+X023395Y021220D01*
+X023443Y021234D01*
+X023492Y021245D01*
+X023542Y021252D01*
+X023592Y021255D01*
+X023643Y021254D01*
+X023693Y021249D01*
+X023743Y021240D01*
+X023791Y021228D01*
+X023839Y021211D01*
+X023885Y021191D01*
+X023930Y021168D01*
+X023973Y021141D01*
+X024013Y021111D01*
+X024051Y021078D01*
+X024086Y021042D01*
+X024119Y021003D01*
+X024148Y020962D01*
+X024174Y020919D01*
+X024197Y020874D01*
+X024216Y020827D01*
+X024231Y020779D01*
+X024243Y020730D01*
+X024251Y020680D01*
+X024255Y020630D01*
+X024255Y020580D01*
+X024251Y020530D01*
+X024243Y020480D01*
+X024231Y020431D01*
+X024216Y020383D01*
+X024197Y020336D01*
+X024174Y020291D01*
+X024148Y020248D01*
+X024119Y020207D01*
+X024086Y020168D01*
+X024051Y020132D01*
+X024013Y020099D01*
+X023973Y020069D01*
+X023930Y020042D01*
+X023885Y020019D01*
+X023839Y019999D01*
+X023791Y019982D01*
+X023743Y019970D01*
+X023693Y019961D01*
+X023643Y019956D01*
+X023592Y019955D01*
+X023542Y019958D01*
+X023492Y019965D01*
+X023443Y019976D01*
+X023395Y019990D01*
+X023348Y020008D01*
+X023302Y020030D01*
+X023258Y020055D01*
+X023217Y020084D01*
+X023178Y020115D01*
+X023141Y020150D01*
+X023107Y020187D01*
+X023076Y020227D01*
+X023048Y020269D01*
+X023024Y020313D01*
+X023003Y020359D01*
+X022986Y020407D01*
+X022973Y020455D01*
+X022963Y020505D01*
+X022957Y020555D01*
+X022955Y020605D01*
+X042741Y020014D02*
+X042743Y020041D01*
+X042749Y020068D01*
+X042758Y020094D01*
+X042771Y020118D01*
+X042787Y020141D01*
+X042806Y020160D01*
+X042828Y020177D01*
+X042852Y020191D01*
+X042877Y020201D01*
+X042904Y020208D01*
+X042931Y020211D01*
+X042959Y020210D01*
+X042986Y020205D01*
+X043012Y020197D01*
+X043036Y020185D01*
+X043059Y020169D01*
+X043080Y020151D01*
+X043097Y020130D01*
+X043112Y020106D01*
+X043123Y020081D01*
+X043131Y020055D01*
+X043135Y020028D01*
+X043135Y020000D01*
+X043131Y019973D01*
+X043123Y019947D01*
+X043112Y019922D01*
+X043097Y019898D01*
+X043080Y019877D01*
+X043059Y019859D01*
+X043037Y019843D01*
+X043012Y019831D01*
+X042986Y019823D01*
+X042959Y019818D01*
+X042931Y019817D01*
+X042904Y019820D01*
+X042877Y019827D01*
+X042852Y019837D01*
+X042828Y019851D01*
+X042806Y019868D01*
+X042787Y019887D01*
+X042771Y019910D01*
+X042758Y019934D01*
+X042749Y019960D01*
+X042743Y019987D01*
+X042741Y020014D01*
+X042741Y021196D02*
+X042743Y021223D01*
+X042749Y021250D01*
+X042758Y021276D01*
+X042771Y021300D01*
+X042787Y021323D01*
+X042806Y021342D01*
+X042828Y021359D01*
+X042852Y021373D01*
+X042877Y021383D01*
+X042904Y021390D01*
+X042931Y021393D01*
+X042959Y021392D01*
+X042986Y021387D01*
+X043012Y021379D01*
+X043036Y021367D01*
+X043059Y021351D01*
+X043080Y021333D01*
+X043097Y021312D01*
+X043112Y021288D01*
+X043123Y021263D01*
+X043131Y021237D01*
+X043135Y021210D01*
+X043135Y021182D01*
+X043131Y021155D01*
+X043123Y021129D01*
+X043112Y021104D01*
+X043097Y021080D01*
+X043080Y021059D01*
+X043059Y021041D01*
+X043037Y021025D01*
+X043012Y021013D01*
+X042986Y021005D01*
+X042959Y021000D01*
+X042931Y020999D01*
+X042904Y021002D01*
+X042877Y021009D01*
+X042852Y021019D01*
+X042828Y021033D01*
+X042806Y021050D01*
+X042787Y021069D01*
+X042771Y021092D01*
+X042758Y021116D01*
+X042749Y021142D01*
+X042743Y021169D01*
+X042741Y021196D01*
+D12*
+X042603Y022121D03*
+X042603Y019089D03*
+D13*
+X041698Y020133D03*
+X041698Y020448D03*
+X041698Y020762D03*
+X041698Y021077D03*
+D14*
+G36*
+X040770Y023142D02*
+X041157Y023210D01*
+X041232Y022786D01*
+X040845Y022718D01*
+X040770Y023142D01*
+G37*
+G36*
+X040657Y023782D02*
+X041044Y023850D01*
+X041119Y023426D01*
+X040732Y023358D01*
+X040657Y023782D01*
+G37*
+G36*
+X040544Y024422D02*
+X040931Y024490D01*
+X041006Y024066D01*
+X040619Y023998D01*
+X040544Y024422D01*
+G37*
+G36*
+X041203Y024539D02*
+X041590Y024607D01*
+X041665Y024183D01*
+X041278Y024115D01*
+X041203Y024539D01*
+G37*
+G36*
+X041316Y023898D02*
+X041703Y023966D01*
+X041778Y023542D01*
+X041391Y023474D01*
+X041316Y023898D01*
+G37*
+G36*
+X041429Y023258D02*
+X041816Y023326D01*
+X041891Y022902D01*
+X041504Y022834D01*
+X041429Y023258D01*
+G37*
+G36*
+X040836Y018490D02*
+X041223Y018422D01*
+X041148Y017998D01*
+X040761Y018066D01*
+X040836Y018490D01*
+G37*
+G36*
+X041496Y018374D02*
+X041883Y018306D01*
+X041808Y017882D01*
+X041421Y017950D01*
+X041496Y018374D01*
+G37*
+G36*
+X041383Y017734D02*
+X041770Y017666D01*
+X041695Y017242D01*
+X041308Y017310D01*
+X041383Y017734D01*
+G37*
+G36*
+X040724Y017850D02*
+X041111Y017782D01*
+X041036Y017358D01*
+X040649Y017426D01*
+X040724Y017850D01*
+G37*
+G36*
+X040611Y017210D02*
+X040998Y017142D01*
+X040923Y016718D01*
+X040536Y016786D01*
+X040611Y017210D01*
+G37*
+G36*
+X041270Y017094D02*
+X041657Y017026D01*
+X041582Y016602D01*
+X041195Y016670D01*
+X041270Y017094D01*
+G37*
+D15*
+X041426Y016848D02*
+X041555Y017505D01*
+X041539Y017488D01*
+X041655Y018105D01*
+X041652Y018128D01*
+X041628Y018128D01*
+X041605Y018105D01*
+X041605Y018705D01*
+X040855Y019455D01*
+X040855Y020055D01*
+X040933Y020133D01*
+X041698Y020133D01*
+X041698Y020448D02*
+X041062Y020448D01*
+X040905Y020605D01*
+X040905Y021805D01*
+X041605Y022655D01*
+X041555Y023055D01*
+X041660Y023080D01*
+X042830Y023080D01*
+X042855Y023055D01*
+X042855Y023105D01*
+X041660Y023080D02*
+X041547Y023720D01*
+X041434Y024361D01*
+X040775Y024244D02*
+X040770Y024234D01*
+X040305Y024143D01*
+X040755Y024205D02*
+X040885Y023619D01*
+X040873Y023602D01*
+X040888Y023604D01*
+X040905Y023555D01*
+X040989Y023028D01*
+X040977Y023011D01*
+X040995Y022998D01*
+X041001Y022964D01*
+X040755Y024205D02*
+X040770Y024234D01*
+X040605Y020605D02*
+X040605Y020455D01*
+X040605Y018405D01*
+X040705Y018305D01*
+X040905Y018305D01*
+X040966Y018244D01*
+X040992Y018244D01*
+X041005Y018205D01*
+X040880Y017604D01*
+X040855Y017555D01*
+X040767Y016964D01*
+X040880Y017604D02*
+X040867Y017622D01*
+X040880Y017604D02*
+X040920Y017632D01*
+X040922Y017647D01*
+X041539Y017488D02*
+X041551Y017470D01*
+X041545Y017436D01*
+X041664Y018110D02*
+X042850Y018110D01*
+X042855Y018105D01*
+X041664Y018110D02*
+X041652Y018128D01*
+X040992Y018244D02*
+X040975Y018232D01*
+X041426Y016848D02*
+X041438Y016830D01*
+X040345Y020540D02*
+X040345Y020605D01*
+X040085Y020605D02*
+X040085Y020540D01*
+X039825Y020540D02*
+X039825Y020605D01*
+X039565Y020605D02*
+X039565Y020540D01*
+X039305Y020540D02*
+X039305Y020605D01*
+X039045Y020605D02*
+X039045Y020540D01*
+X038785Y020540D02*
+X038785Y020605D01*
+X038525Y020605D02*
+X038525Y020540D01*
+X038265Y020540D02*
+X038265Y020605D01*
+X038005Y020605D02*
+X038005Y020540D01*
+X037745Y020540D02*
+X037745Y020605D01*
+X037485Y020605D02*
+X037485Y020540D01*
+X037225Y020540D02*
+X037225Y020605D01*
+X036965Y020605D02*
+X036965Y020540D01*
+X036705Y020540D02*
+X036705Y020605D01*
+X036445Y020605D02*
+X036445Y020540D01*
+X036185Y020540D02*
+X036185Y020605D01*
+X035925Y020605D02*
+X035925Y020540D01*
+X035665Y020540D02*
+X035665Y020605D01*
+X035405Y020605D02*
+X035405Y020540D01*
+X035145Y020540D02*
+X035145Y020605D01*
+X034885Y020605D02*
+X034885Y020540D01*
+X034625Y020540D02*
+X034625Y020605D01*
+X034365Y020605D02*
+X034365Y020540D01*
+X034105Y020540D02*
+X034105Y020605D01*
+X033845Y020605D02*
+X033845Y020540D01*
+X033585Y020540D02*
+X033585Y020605D01*
+X033325Y020605D02*
+X033325Y020540D01*
+X033065Y020540D02*
+X033065Y020605D01*
+X032805Y020605D02*
+X032805Y020540D01*
+X032545Y020540D02*
+X032545Y020605D01*
+X032285Y020605D02*
+X032285Y020540D01*
+X032025Y020540D02*
+X032025Y020605D01*
+X031765Y020605D02*
+X031765Y020540D01*
+X031505Y020540D02*
+X031505Y020605D01*
+X031245Y020605D02*
+X031245Y020540D01*
+X030985Y020540D02*
+X030985Y020605D01*
+X030725Y020605D02*
+X030725Y020540D01*
+X030465Y020540D02*
+X030465Y020605D01*
+X030205Y020605D02*
+X030205Y020540D01*
+X029945Y020540D02*
+X029945Y020605D01*
+X029685Y020605D02*
+X029685Y020540D01*
+X029425Y020540D02*
+X029425Y020605D01*
+X029165Y020605D02*
+X029165Y020540D01*
+X028905Y020540D02*
+X028905Y020605D01*
+X028645Y020605D02*
+X028645Y020540D01*
+X028385Y020540D02*
+X028385Y020605D01*
+X028125Y020605D02*
+X028125Y020540D01*
+X027865Y020540D02*
+X027865Y020605D01*
+X027605Y020605D02*
+X027605Y020605D01*
+X026355Y020605D01*
+X026355Y020605D01*
+X027105Y020605D01*
+X027605Y020605D01*
+X027605Y020540D01*
+X040605Y020605D02*
+X040582Y021553D01*
+X040515Y022500D01*
+X040402Y023442D01*
+X040245Y024378D01*
+X040043Y025305D01*
+X039798Y026221D01*
+X039509Y027125D01*
+X039177Y028014D01*
+X038804Y028886D01*
+X038389Y029740D01*
+X037934Y030572D01*
+X037440Y031383D01*
+X036909Y032168D01*
+X036340Y032928D01*
+X035736Y033660D01*
+X035098Y034362D01*
+X034427Y035033D01*
+X033725Y035671D01*
+X032993Y036275D01*
+X032233Y036844D01*
+X031448Y037375D01*
+X030637Y037869D01*
+X029805Y038324D01*
+X028951Y038739D01*
+X028079Y039112D01*
+X027190Y039444D01*
+X026286Y039733D01*
+X025370Y039978D01*
+X024443Y040180D01*
+X023507Y040337D01*
+X022565Y040450D01*
+X021618Y040517D01*
+X020670Y040540D01*
+X020605Y040540D01*
+X020605Y040280D02*
+X020670Y040280D01*
+X020670Y040020D02*
+X020605Y040020D01*
+X020605Y039760D02*
+X020670Y039760D01*
+X020670Y039500D02*
+X020605Y039500D01*
+X020605Y039240D02*
+X020670Y039240D01*
+X020670Y038980D02*
+X020605Y038980D01*
+X020605Y038720D02*
+X020670Y038720D01*
+X020670Y038460D02*
+X020605Y038460D01*
+X020605Y038200D02*
+X020670Y038200D01*
+X020670Y037940D02*
+X020605Y037940D01*
+X020605Y037680D02*
+X020670Y037680D01*
+X020670Y037420D02*
+X020605Y037420D01*
+X020605Y037160D02*
+X020670Y037160D01*
+X020670Y036900D02*
+X020605Y036900D01*
+X020605Y036640D02*
+X020670Y036640D01*
+X020670Y036380D02*
+X020605Y036380D01*
+X020605Y036120D02*
+X020670Y036120D01*
+X020670Y035860D02*
+X020605Y035860D01*
+X020605Y035600D02*
+X020670Y035600D01*
+X020670Y035340D02*
+X020605Y035340D01*
+X020605Y035080D02*
+X020670Y035080D01*
+X020670Y034820D02*
+X020605Y034820D01*
+X020605Y034560D02*
+X020670Y034560D01*
+X020670Y034300D02*
+X020605Y034300D01*
+X020605Y034040D02*
+X020670Y034040D01*
+X020670Y033780D02*
+X020605Y033780D01*
+X020605Y033520D02*
+X020670Y033520D01*
+X020670Y033260D02*
+X020605Y033260D01*
+X020605Y033000D02*
+X020670Y033000D01*
+X020670Y032740D02*
+X020605Y032740D01*
+X020605Y032480D02*
+X020670Y032480D01*
+X020670Y032220D02*
+X020605Y032220D01*
+X020605Y031960D02*
+X020670Y031960D01*
+X020670Y031700D02*
+X020605Y031700D01*
+X020605Y031440D02*
+X020670Y031440D01*
+X020670Y031180D02*
+X020605Y031180D01*
+X020605Y030920D02*
+X020670Y030920D01*
+X020670Y030660D02*
+X020605Y030660D01*
+X020605Y030400D02*
+X020670Y030400D01*
+X020670Y030140D02*
+X020605Y030140D01*
+X020605Y029880D02*
+X020670Y029880D01*
+X020670Y029620D02*
+X020605Y029620D01*
+X020605Y029360D02*
+X020670Y029360D01*
+X020670Y029100D02*
+X020605Y029100D01*
+X020605Y028840D02*
+X020670Y028840D01*
+X020670Y028580D02*
+X020605Y028580D01*
+X020605Y028320D02*
+X020670Y028320D01*
+X020670Y028060D02*
+X020605Y028060D01*
+X020605Y027800D02*
+X020670Y027800D01*
+X020605Y033260D02*
+X020006Y033246D01*
+X019408Y033203D01*
+X018813Y033132D01*
+X018222Y033032D01*
+X017637Y032905D01*
+X017058Y032750D01*
+X016487Y032568D01*
+X015926Y032358D01*
+X015375Y032122D01*
+X014836Y031860D01*
+X014310Y031573D01*
+X013798Y031261D01*
+X013302Y030926D01*
+X012822Y030566D01*
+X012360Y030185D01*
+X011917Y029782D01*
+X011493Y029358D01*
+X011090Y028915D01*
+X010709Y028453D01*
+X010349Y027973D01*
+X010014Y027477D01*
+X009702Y026965D01*
+X009415Y026439D01*
+X009153Y025900D01*
+X008917Y025349D01*
+X008707Y024788D01*
+X008525Y024217D01*
+X008370Y023638D01*
+X008243Y023053D01*
+X008143Y022462D01*
+X008072Y021867D01*
+X008029Y021269D01*
+X008015Y020670D01*
+X008015Y020605D01*
+X007755Y020605D02*
+X007755Y020670D01*
+X007495Y020670D02*
+X007495Y020605D01*
+X007235Y020605D02*
+X007235Y020670D01*
+X006975Y020670D02*
+X006975Y020605D01*
+X006715Y020605D02*
+X006715Y020670D01*
+X006455Y020670D02*
+X006455Y020605D01*
+X006195Y020605D02*
+X006195Y020670D01*
+X005935Y020670D02*
+X005935Y020605D01*
+X005675Y020605D02*
+X005675Y020670D01*
+X005415Y020670D02*
+X005415Y020605D01*
+X005155Y020605D02*
+X005155Y020670D01*
+X004895Y020670D02*
+X004895Y020605D01*
+X004635Y020605D02*
+X004635Y020670D01*
+X004375Y020670D02*
+X004375Y020605D01*
+X004115Y020605D02*
+X004115Y020670D01*
+X003855Y020670D02*
+X003855Y020605D01*
+X003595Y020605D02*
+X003595Y020670D01*
+X003335Y020670D02*
+X003335Y020605D01*
+X003075Y020605D02*
+X003075Y020670D01*
+X002815Y020670D02*
+X002815Y020605D01*
+X002555Y020605D02*
+X002555Y020670D01*
+X002295Y020670D02*
+X002295Y020605D01*
+X002035Y020605D02*
+X002035Y020670D01*
+X001775Y020670D02*
+X001775Y020605D01*
+X001515Y020605D02*
+X001515Y020670D01*
+X001255Y020670D02*
+X001255Y020605D01*
+X000995Y020605D02*
+X000995Y020670D01*
+X000735Y020670D02*
+X000735Y020605D01*
+X008275Y020605D02*
+X008275Y020670D01*
+X008535Y020670D02*
+X008535Y020605D01*
+X008795Y020605D02*
+X008795Y020670D01*
+X009055Y020670D02*
+X009055Y020605D01*
+X009315Y020605D02*
+X009315Y020670D01*
+X009575Y020670D02*
+X009575Y020605D01*
+X009835Y020605D02*
+X009835Y020670D01*
+X010095Y020670D02*
+X010095Y020605D01*
+X010355Y020605D02*
+X010355Y020670D01*
+X010615Y020670D02*
+X010615Y020605D01*
+X010875Y020605D02*
+X010875Y020670D01*
+X011135Y020670D02*
+X011135Y020605D01*
+X011395Y020605D02*
+X011395Y020670D01*
+X011655Y020670D02*
+X011655Y020605D01*
+X011915Y020605D02*
+X011915Y020670D01*
+X012175Y020670D02*
+X012175Y020605D01*
+X012435Y020605D02*
+X012435Y020670D01*
+X012695Y020670D02*
+X012695Y020605D01*
+X012955Y020605D02*
+X012955Y020670D01*
+X013215Y020670D02*
+X013215Y020605D01*
+X013475Y020605D02*
+X013475Y020670D01*
+X004635Y020605D02*
+X004653Y019848D01*
+X004707Y019093D01*
+X004797Y018342D01*
+X004922Y017595D01*
+X005083Y016855D01*
+X005279Y016124D01*
+X005510Y015403D01*
+X005774Y014694D01*
+X006072Y013998D01*
+X006403Y013317D01*
+X006766Y012653D01*
+X007160Y012006D01*
+X007584Y011379D01*
+X008038Y010773D01*
+X008520Y010189D01*
+X009029Y009629D01*
+X009564Y009094D01*
+X010124Y008585D01*
+X010708Y008103D01*
+X011314Y007649D01*
+X011941Y007225D01*
+X012588Y006831D01*
+X013252Y006468D01*
+X013933Y006137D01*
+X014629Y005839D01*
+X015338Y005575D01*
+X016059Y005344D01*
+X016790Y005148D01*
+X017530Y004987D01*
+X018277Y004862D01*
+X019028Y004772D01*
+X019783Y004718D01*
+X020540Y004700D01*
+X020605Y004700D01*
+X020605Y004440D02*
+X020540Y004440D01*
+X020540Y004180D02*
+X020605Y004180D01*
+X020605Y003920D02*
+X020540Y003920D01*
+X020540Y003660D02*
+X020605Y003660D01*
+X020605Y003400D02*
+X020540Y003400D01*
+X020540Y003140D02*
+X020605Y003140D01*
+X020605Y002880D02*
+X020540Y002880D01*
+X020540Y002620D02*
+X020605Y002620D01*
+X020605Y002360D02*
+X020540Y002360D01*
+X020540Y002100D02*
+X020605Y002100D01*
+X020605Y001840D02*
+X020540Y001840D01*
+X020540Y001580D02*
+X020605Y001580D01*
+X020605Y001320D02*
+X020540Y001320D01*
+X020540Y001060D02*
+X020605Y001060D01*
+X020605Y000800D02*
+X020540Y000800D01*
+X020605Y004960D02*
+X020540Y004960D01*
+X020540Y005220D02*
+X020605Y005220D01*
+X020605Y005480D02*
+X020540Y005480D01*
+X020540Y005740D02*
+X020605Y005740D01*
+X020605Y006000D02*
+X020540Y006000D01*
+X020540Y006260D02*
+X020605Y006260D01*
+X020605Y006520D02*
+X020540Y006520D01*
+X020540Y006780D02*
+X020605Y006780D01*
+X020605Y007040D02*
+X020540Y007040D01*
+X020540Y007300D02*
+X020605Y007300D01*
+X020605Y007560D02*
+X020540Y007560D01*
+X020540Y007820D02*
+X020605Y007820D01*
+X020605Y008080D02*
+X020540Y008080D01*
+X020540Y008340D02*
+X020605Y008340D01*
+X020605Y008600D02*
+X020540Y008600D01*
+X020540Y008860D02*
+X020605Y008860D01*
+X020605Y009120D02*
+X020540Y009120D01*
+X020540Y009380D02*
+X020605Y009380D01*
+X020605Y009640D02*
+X020540Y009640D01*
+X020540Y009900D02*
+X020605Y009900D01*
+X020605Y010160D02*
+X020540Y010160D01*
+X020540Y010420D02*
+X020605Y010420D01*
+X020605Y010680D02*
+X020540Y010680D01*
+X020540Y010940D02*
+X020605Y010940D01*
+X020605Y011200D02*
+X020540Y011200D01*
+X020540Y011460D02*
+X020605Y011460D01*
+X020605Y011720D02*
+X020540Y011720D01*
+X020540Y011980D02*
+X020605Y011980D01*
+X020605Y012240D02*
+X020540Y012240D01*
+X020540Y012500D02*
+X020605Y012500D01*
+X020605Y012760D02*
+X020540Y012760D01*
+X020540Y013020D02*
+X020605Y013020D01*
+X020605Y013280D02*
+X020540Y013280D01*
+X020540Y013540D02*
+X020605Y013540D01*
+X020605Y001580D02*
+X021507Y001601D01*
+X022407Y001666D01*
+X023303Y001773D01*
+X024193Y001923D01*
+X025075Y002114D01*
+X025947Y002348D01*
+X026806Y002623D01*
+X027652Y002938D01*
+X028481Y003293D01*
+X029293Y003688D01*
+X030085Y004120D01*
+X030856Y004590D01*
+X031603Y005096D01*
+X032325Y005636D01*
+X033021Y006211D01*
+X033689Y006818D01*
+X034327Y007456D01*
+X034934Y008124D01*
+X035509Y008820D01*
+X036049Y009542D01*
+X036555Y010289D01*
+X037025Y011060D01*
+X037457Y011852D01*
+X037852Y012664D01*
+X038207Y013493D01*
+X038522Y014339D01*
+X038797Y015198D01*
+X039031Y016070D01*
+X039222Y016952D01*
+X039372Y017842D01*
+X039479Y018738D01*
+X039544Y019638D01*
+X039565Y020540D01*
+X028905Y020605D02*
+X028896Y020997D01*
+X028868Y021388D01*
+X028821Y021777D01*
+X028756Y022163D01*
+X028673Y022546D01*
+X028571Y022925D01*
+X028452Y023298D01*
+X028315Y023666D01*
+X028161Y024026D01*
+X027990Y024378D01*
+X027802Y024722D01*
+X027598Y025057D01*
+X027378Y025382D01*
+X027143Y025696D01*
+X026894Y025998D01*
+X026630Y026288D01*
+X026353Y026565D01*
+X026063Y026829D01*
+X025761Y027078D01*
+X025447Y027313D01*
+X025122Y027533D01*
+X024787Y027737D01*
+X024443Y027925D01*
+X024091Y028096D01*
+X023731Y028250D01*
+X023363Y028387D01*
+X022990Y028506D01*
+X022611Y028608D01*
+X022228Y028691D01*
+X021842Y028756D01*
+X021453Y028803D01*
+X021062Y028831D01*
+X020670Y028840D01*
+X020605Y034820D02*
+X019932Y034804D01*
+X019260Y034756D01*
+X018591Y034676D01*
+X017927Y034564D01*
+X017269Y034421D01*
+X016619Y034247D01*
+X015977Y034042D01*
+X015346Y033806D01*
+X014727Y033541D01*
+X014121Y033247D01*
+X013530Y032924D01*
+X012955Y032574D01*
+X012397Y032196D01*
+X011858Y031793D01*
+X011339Y031364D01*
+X010840Y030911D01*
+X010364Y030435D01*
+X009911Y029936D01*
+X009482Y029417D01*
+X009079Y028878D01*
+X008701Y028320D01*
+X008351Y027745D01*
+X008028Y027154D01*
+X007734Y026548D01*
+X007469Y025929D01*
+X007233Y025298D01*
+X007028Y024656D01*
+X006854Y024006D01*
+X006711Y023348D01*
+X006599Y022684D01*
+X006519Y022015D01*
+X006471Y021343D01*
+X006455Y020670D01*
+X009315Y020605D02*
+X009328Y020071D01*
+X009366Y019538D01*
+X009429Y019008D01*
+X009518Y018481D01*
+X009631Y017959D01*
+X009770Y017443D01*
+X009932Y016934D01*
+X010119Y016433D01*
+X010329Y015942D01*
+X010563Y015461D01*
+X010819Y014993D01*
+X011097Y014536D01*
+X011396Y014094D01*
+X011717Y013666D01*
+X012057Y013254D01*
+X012416Y012859D01*
+X012794Y012481D01*
+X013189Y012122D01*
+X013601Y011782D01*
+X014029Y011461D01*
+X014471Y011162D01*
+X014928Y010884D01*
+X015397Y010628D01*
+X015877Y010394D01*
+X016368Y010184D01*
+X016869Y009997D01*
+X017378Y009835D01*
+X017894Y009696D01*
+X018416Y009583D01*
+X018943Y009494D01*
+X019473Y009431D01*
+X020006Y009393D01*
+X020540Y009380D01*
+X020605Y001840D02*
+X021495Y001861D01*
+X022382Y001925D01*
+X023266Y002030D01*
+X024144Y002178D01*
+X025014Y002367D01*
+X025873Y002597D01*
+X026721Y002868D01*
+X027555Y003179D01*
+X028373Y003530D01*
+X029174Y003919D01*
+X029955Y004345D01*
+X030715Y004809D01*
+X031452Y005307D01*
+X032165Y005841D01*
+X032851Y006407D01*
+X033509Y007006D01*
+X034139Y007636D01*
+X034738Y008294D01*
+X035304Y008980D01*
+X035838Y009693D01*
+X036336Y010430D01*
+X036800Y011190D01*
+X037226Y011971D01*
+X037615Y012772D01*
+X037966Y013590D01*
+X038277Y014424D01*
+X038548Y015272D01*
+X038778Y016131D01*
+X038967Y017001D01*
+X039115Y017879D01*
+X039220Y018763D01*
+X039284Y019650D01*
+X039305Y020540D01*
+X039565Y020605D02*
+X039544Y021504D01*
+X039479Y022401D01*
+X039373Y023294D01*
+X039224Y024181D01*
+X039032Y025060D01*
+X038800Y025928D01*
+X038526Y026785D01*
+X038212Y027628D01*
+X037858Y028454D01*
+X037465Y029263D01*
+X037034Y030052D01*
+X036565Y030820D01*
+X036061Y031565D01*
+X035522Y032285D01*
+X034950Y032979D01*
+X034345Y033644D01*
+X033709Y034280D01*
+X033044Y034885D01*
+X032350Y035457D01*
+X031630Y035996D01*
+X030885Y036501D01*
+X030117Y036969D01*
+X029328Y037400D01*
+X028519Y037793D01*
+X027692Y038147D01*
+X026850Y038461D01*
+X025993Y038735D01*
+X025125Y038967D01*
+X024246Y039159D01*
+X023359Y039308D01*
+X022466Y039414D01*
+X021569Y039479D01*
+X020670Y039500D01*
+X020605Y039760D02*
+X019697Y039738D01*
+X018790Y039674D01*
+X017888Y039566D01*
+X016992Y039415D01*
+X016104Y039222D01*
+X015227Y038987D01*
+X014361Y038710D01*
+X013510Y038393D01*
+X012675Y038035D01*
+X011857Y037638D01*
+X011060Y037202D01*
+X010284Y036730D01*
+X009532Y036220D01*
+X008804Y035676D01*
+X008104Y035097D01*
+X007431Y034486D01*
+X006789Y033844D01*
+X006178Y033171D01*
+X005599Y032471D01*
+X005055Y031743D01*
+X004545Y030991D01*
+X004073Y030215D01*
+X003637Y029418D01*
+X003240Y028600D01*
+X002882Y027765D01*
+X002565Y026914D01*
+X002288Y026048D01*
+X002053Y025171D01*
+X001860Y024283D01*
+X001709Y023387D01*
+X001601Y022485D01*
+X001537Y021578D01*
+X001515Y020670D01*
+X001515Y020605D02*
+X001537Y019700D01*
+X001601Y018797D01*
+X001709Y017898D01*
+X001859Y017005D01*
+X002051Y016120D01*
+X002286Y015245D01*
+X002561Y014383D01*
+X002878Y013534D01*
+X003234Y012702D01*
+X003630Y011887D01*
+X004064Y011093D01*
+X004535Y010319D01*
+X005043Y009569D01*
+X005585Y008845D01*
+X006162Y008146D01*
+X006771Y007476D01*
+X007411Y006836D01*
+X008081Y006227D01*
+X008780Y005650D01*
+X009504Y005108D01*
+X010254Y004600D01*
+X011028Y004129D01*
+X011822Y003695D01*
+X012637Y003299D01*
+X013469Y002943D01*
+X014318Y002626D01*
+X015180Y002351D01*
+X016055Y002116D01*
+X016940Y001924D01*
+X017833Y001774D01*
+X018732Y001666D01*
+X019635Y001602D01*
+X020540Y001580D01*
+X020605Y009640D02*
+X021124Y009652D01*
+X021641Y009689D01*
+X022156Y009751D01*
+X022668Y009837D01*
+X023175Y009947D01*
+X023676Y010082D01*
+X024170Y010239D01*
+X024656Y010421D01*
+X025133Y010625D01*
+X025600Y010852D01*
+X026055Y011100D01*
+X026498Y011370D01*
+X026928Y011661D01*
+X027343Y011972D01*
+X027743Y012302D01*
+X028127Y012651D01*
+X028494Y013018D01*
+X028843Y013402D01*
+X029173Y013802D01*
+X029484Y014217D01*
+X029775Y014647D01*
+X030045Y015090D01*
+X030293Y015545D01*
+X030520Y016012D01*
+X030724Y016489D01*
+X030906Y016975D01*
+X031063Y017469D01*
+X031198Y017970D01*
+X031308Y018477D01*
+X031394Y018989D01*
+X031456Y019504D01*
+X031493Y020021D01*
+X031505Y020540D01*
+X036445Y020605D02*
+X036427Y021355D01*
+X036374Y022104D01*
+X036284Y022850D01*
+X036160Y023590D01*
+X036000Y024324D01*
+X035806Y025049D01*
+X035577Y025764D01*
+X035315Y026468D01*
+X035019Y027158D01*
+X034691Y027833D01*
+X034332Y028492D01*
+X033941Y029134D01*
+X033520Y029755D01*
+X033070Y030356D01*
+X032592Y030935D01*
+X032087Y031491D01*
+X031556Y032022D01*
+X031000Y032527D01*
+X030421Y033005D01*
+X029820Y033455D01*
+X029199Y033876D01*
+X028557Y034267D01*
+X027898Y034626D01*
+X027223Y034954D01*
+X026533Y035250D01*
+X025829Y035512D01*
+X025114Y035741D01*
+X024389Y035935D01*
+X023655Y036095D01*
+X022915Y036219D01*
+X022169Y036309D01*
+X021420Y036362D01*
+X020670Y036380D01*
+X020605Y037680D02*
+X019796Y037661D01*
+X018988Y037603D01*
+X018184Y037507D01*
+X017386Y037373D01*
+X016595Y037201D01*
+X015813Y036991D01*
+X015042Y036744D01*
+X014283Y036462D01*
+X013539Y036143D01*
+X012811Y035789D01*
+X012100Y035401D01*
+X011409Y034980D01*
+X010738Y034526D01*
+X010090Y034041D01*
+X009466Y033525D01*
+X008867Y032981D01*
+X008294Y032408D01*
+X007750Y031809D01*
+X007234Y031185D01*
+X006749Y030537D01*
+X006295Y029866D01*
+X005874Y029175D01*
+X005486Y028464D01*
+X005132Y027736D01*
+X004813Y026992D01*
+X004531Y026233D01*
+X004284Y025462D01*
+X004074Y024680D01*
+X003902Y023889D01*
+X003768Y023091D01*
+X003672Y022287D01*
+X003614Y021479D01*
+X003595Y020670D01*
+X001775Y020605D02*
+X001796Y019712D01*
+X001860Y018821D01*
+X001966Y017935D01*
+X002114Y017054D01*
+X002304Y016181D01*
+X002535Y015318D01*
+X002807Y014468D01*
+X003119Y013631D01*
+X003471Y012810D01*
+X003861Y012006D01*
+X004289Y011223D01*
+X004754Y010460D01*
+X005254Y009720D01*
+X005790Y009005D01*
+X006358Y008317D01*
+X006959Y007656D01*
+X007591Y007024D01*
+X008252Y006423D01*
+X008940Y005855D01*
+X009655Y005319D01*
+X010395Y004819D01*
+X011158Y004354D01*
+X011941Y003926D01*
+X012745Y003536D01*
+X013566Y003184D01*
+X014403Y002872D01*
+X015253Y002600D01*
+X016116Y002369D01*
+X016989Y002179D01*
+X017870Y002031D01*
+X018756Y001925D01*
+X019647Y001861D01*
+X020540Y001840D01*
+X020605Y011980D02*
+X021012Y011990D01*
+X021419Y012019D01*
+X021823Y012067D01*
+X022225Y012135D01*
+X022623Y012221D01*
+X023017Y012327D01*
+X023405Y012451D01*
+X023786Y012593D01*
+X024161Y012754D01*
+X024527Y012932D01*
+X024885Y013127D01*
+X025233Y013339D01*
+X025570Y013567D01*
+X025896Y013811D01*
+X026211Y014071D01*
+X026512Y014345D01*
+X026800Y014633D01*
+X027074Y014934D01*
+X027334Y015249D01*
+X027578Y015575D01*
+X027806Y015912D01*
+X028018Y016260D01*
+X028213Y016618D01*
+X028391Y016984D01*
+X028552Y017359D01*
+X028694Y017740D01*
+X028818Y018128D01*
+X028924Y018522D01*
+X029010Y018920D01*
+X029078Y019322D01*
+X029126Y019726D01*
+X029155Y020133D01*
+X029165Y020540D01*
+X027865Y020605D02*
+X027857Y020947D01*
+X027832Y021289D01*
+X027792Y021629D01*
+X027735Y021967D01*
+X027662Y022301D01*
+X027574Y022632D01*
+X027469Y022958D01*
+X027350Y023279D01*
+X027215Y023594D01*
+X027065Y023902D01*
+X026901Y024202D01*
+X026723Y024495D01*
+X026531Y024779D01*
+X026326Y025053D01*
+X026108Y025317D01*
+X025877Y025570D01*
+X025635Y025812D01*
+X025382Y026043D01*
+X025118Y026261D01*
+X024843Y026466D01*
+X024560Y026658D01*
+X024267Y026836D01*
+X023967Y027000D01*
+X023659Y027150D01*
+X023344Y027285D01*
+X023023Y027404D01*
+X022697Y027509D01*
+X022366Y027597D01*
+X022032Y027670D01*
+X021694Y027727D01*
+X021354Y027767D01*
+X021012Y027792D01*
+X020670Y027800D01*
+X020605Y035860D02*
+X019882Y035843D01*
+X019161Y035791D01*
+X018443Y035705D01*
+X017730Y035586D01*
+X017024Y035432D01*
+X016326Y035245D01*
+X015637Y035025D01*
+X014959Y034772D01*
+X014295Y034487D01*
+X013645Y034171D01*
+X013010Y033825D01*
+X012393Y033449D01*
+X011794Y033043D01*
+X011215Y032610D01*
+X010658Y032150D01*
+X010123Y031664D01*
+X009611Y031152D01*
+X009125Y030617D01*
+X008665Y030060D01*
+X008232Y029481D01*
+X007826Y028882D01*
+X007450Y028265D01*
+X007104Y027630D01*
+X006788Y026980D01*
+X006503Y026316D01*
+X006250Y025638D01*
+X006030Y024949D01*
+X005843Y024251D01*
+X005689Y023545D01*
+X005570Y022832D01*
+X005484Y022114D01*
+X005432Y021393D01*
+X005415Y020670D01*
+X003595Y020605D02*
+X003614Y019799D01*
+X003672Y018994D01*
+X003767Y018194D01*
+X003901Y017398D01*
+X004073Y016610D01*
+X004281Y015831D01*
+X004527Y015063D01*
+X004809Y014307D01*
+X005126Y013566D01*
+X005479Y012840D01*
+X005865Y012133D01*
+X006285Y011444D01*
+X006737Y010776D01*
+X007220Y010130D01*
+X007734Y009508D01*
+X008276Y008912D01*
+X008847Y008341D01*
+X009443Y007799D01*
+X010065Y007285D01*
+X010711Y006802D01*
+X011379Y006350D01*
+X012068Y005930D01*
+X012775Y005544D01*
+X013501Y005191D01*
+X014242Y004874D01*
+X014998Y004592D01*
+X015766Y004346D01*
+X016545Y004138D01*
+X017333Y003966D01*
+X018129Y003832D01*
+X018929Y003737D01*
+X019734Y003679D01*
+X020540Y003660D01*
+X020605Y003140D02*
+X021433Y003160D01*
+X022259Y003219D01*
+X023081Y003317D01*
+X023898Y003454D01*
+X024707Y003630D01*
+X025507Y003845D01*
+X026296Y004097D01*
+X027072Y004386D01*
+X027833Y004712D01*
+X028578Y005074D01*
+X029305Y005471D01*
+X030012Y005902D01*
+X030698Y006366D01*
+X031361Y006863D01*
+X032000Y007390D01*
+X032612Y007947D01*
+X033198Y008533D01*
+X033755Y009145D01*
+X034282Y009784D01*
+X034779Y010447D01*
+X035243Y011133D01*
+X035674Y011840D01*
+X036071Y012567D01*
+X036433Y013312D01*
+X036759Y014073D01*
+X037048Y014849D01*
+X037300Y015638D01*
+X037515Y016438D01*
+X037691Y017247D01*
+X037828Y018064D01*
+X037926Y018886D01*
+X037985Y019712D01*
+X038005Y020540D01*
+X035405Y020605D02*
+X035388Y021306D01*
+X035338Y022006D01*
+X035255Y022702D01*
+X035139Y023393D01*
+X034990Y024079D01*
+X034808Y024756D01*
+X034595Y025424D01*
+X034350Y026081D01*
+X034073Y026726D01*
+X033767Y027357D01*
+X033431Y027972D01*
+X033066Y028571D01*
+X032673Y029152D01*
+X032253Y029714D01*
+X031806Y030254D01*
+X031334Y030773D01*
+X030838Y031269D01*
+X030319Y031741D01*
+X029779Y032188D01*
+X029217Y032608D01*
+X028636Y033001D01*
+X028037Y033366D01*
+X027422Y033702D01*
+X026791Y034008D01*
+X026146Y034285D01*
+X025489Y034530D01*
+X024821Y034743D01*
+X024144Y034925D01*
+X023458Y035074D01*
+X022767Y035190D01*
+X022071Y035273D01*
+X021371Y035323D01*
+X020670Y035340D01*
+X020605Y028060D02*
+X020253Y028052D01*
+X019903Y028027D01*
+X019553Y027985D01*
+X019206Y027926D01*
+X018863Y027852D01*
+X018523Y027761D01*
+X018188Y027654D01*
+X017858Y027531D01*
+X017535Y027392D01*
+X017219Y027239D01*
+X016910Y027070D01*
+X016610Y026887D01*
+X016318Y026690D01*
+X016037Y026479D01*
+X015766Y026255D01*
+X015505Y026018D01*
+X015257Y025770D01*
+X015020Y025509D01*
+X014796Y025238D01*
+X014585Y024957D01*
+X014388Y024665D01*
+X014205Y024365D01*
+X014036Y024056D01*
+X013883Y023740D01*
+X013744Y023417D01*
+X013621Y023087D01*
+X013514Y022752D01*
+X013423Y022412D01*
+X013349Y022069D01*
+X013290Y021722D01*
+X013248Y021372D01*
+X013223Y021022D01*
+X013215Y020670D01*
+X005675Y020605D02*
+X005692Y019898D01*
+X005742Y019192D01*
+X005826Y018490D01*
+X005944Y017792D01*
+X006094Y017101D01*
+X006277Y016417D01*
+X006493Y015743D01*
+X006740Y015080D01*
+X007018Y014430D01*
+X007327Y013794D01*
+X007667Y013173D01*
+X008035Y012568D01*
+X008431Y011982D01*
+X008855Y011416D01*
+X009306Y010870D01*
+X009782Y010347D01*
+X010282Y009847D01*
+X010806Y009371D01*
+X011351Y008920D01*
+X011918Y008496D01*
+X012503Y008100D01*
+X013108Y007731D01*
+X013729Y007392D01*
+X014365Y007083D01*
+X015015Y006805D01*
+X015678Y006558D01*
+X016352Y006342D01*
+X017036Y006159D01*
+X017727Y006009D01*
+X018425Y005891D01*
+X019127Y005807D01*
+X019833Y005757D01*
+X020540Y005740D01*
+X020605Y004180D02*
+X021383Y004199D01*
+X022160Y004254D01*
+X022933Y004347D01*
+X023701Y004476D01*
+X024462Y004641D01*
+X025214Y004843D01*
+X025956Y005080D01*
+X026685Y005352D01*
+X027401Y005658D01*
+X028102Y005999D01*
+X028785Y006372D01*
+X029450Y006777D01*
+X030095Y007214D01*
+X030718Y007680D01*
+X031319Y008176D01*
+X031895Y008700D01*
+X032445Y009250D01*
+X032969Y009827D01*
+X033465Y010427D01*
+X033931Y011050D01*
+X034368Y011695D01*
+X034773Y012360D01*
+X035146Y013043D01*
+X035487Y013744D01*
+X035793Y014460D01*
+X036065Y015189D01*
+X036302Y015931D01*
+X036504Y016683D01*
+X036669Y017444D01*
+X036798Y018212D01*
+X036891Y018985D01*
+X036946Y019762D01*
+X036965Y020540D01*
+X032545Y020605D02*
+X032532Y021170D01*
+X032491Y021734D01*
+X032424Y022295D01*
+X032330Y022852D01*
+X032210Y023405D01*
+X032064Y023950D01*
+X031892Y024489D01*
+X031694Y025018D01*
+X031472Y025538D01*
+X031225Y026046D01*
+X030954Y026542D01*
+X030660Y027025D01*
+X030343Y027493D01*
+X030004Y027946D01*
+X029645Y028381D01*
+X029264Y028800D01*
+X028865Y029199D01*
+X028446Y029580D01*
+X028011Y029939D01*
+X027558Y030278D01*
+X027090Y030595D01*
+X026607Y030889D01*
+X026111Y031160D01*
+X025603Y031407D01*
+X025083Y031629D01*
+X024554Y031827D01*
+X024015Y031999D01*
+X023470Y032145D01*
+X022917Y032265D01*
+X022360Y032359D01*
+X021799Y032426D01*
+X021235Y032467D01*
+X020670Y032480D01*
+X020605Y040540D02*
+X019660Y040517D01*
+X018716Y040450D01*
+X017777Y040338D01*
+X016845Y040181D01*
+X015920Y039980D01*
+X015007Y039735D01*
+X014106Y039447D01*
+X013220Y039117D01*
+X012351Y038744D01*
+X011500Y038331D01*
+X010670Y037878D01*
+X009862Y037386D01*
+X009079Y036856D01*
+X008322Y036289D01*
+X007593Y035687D01*
+X006893Y035051D01*
+X006224Y034382D01*
+X005588Y033682D01*
+X004986Y032953D01*
+X004419Y032196D01*
+X003889Y031413D01*
+X003397Y030605D01*
+X002944Y029775D01*
+X002531Y028924D01*
+X002158Y028055D01*
+X001828Y027169D01*
+X001540Y026268D01*
+X001295Y025355D01*
+X001094Y024430D01*
+X000937Y023498D01*
+X000825Y022559D01*
+X000758Y021615D01*
+X000735Y020670D01*
+X002815Y020605D02*
+X002835Y019762D01*
+X002895Y018920D01*
+X002995Y018083D01*
+X003135Y017251D01*
+X003315Y016426D01*
+X003533Y015611D01*
+X003790Y014808D01*
+X004085Y014017D01*
+X004417Y013242D01*
+X004785Y012483D01*
+X005190Y011743D01*
+X005629Y011022D01*
+X006102Y010324D01*
+X006607Y009648D01*
+X007144Y008998D01*
+X007712Y008373D01*
+X008308Y007777D01*
+X008933Y007209D01*
+X009583Y006672D01*
+X010259Y006167D01*
+X010957Y005694D01*
+X011678Y005255D01*
+X012418Y004850D01*
+X013177Y004482D01*
+X013952Y004150D01*
+X014743Y003855D01*
+X015546Y003598D01*
+X016361Y003380D01*
+X017186Y003200D01*
+X018018Y003060D01*
+X018855Y002960D01*
+X019697Y002900D01*
+X020540Y002880D01*
+X020605Y003920D02*
+X021396Y003939D01*
+X022185Y003995D01*
+X022970Y004089D01*
+X023750Y004220D01*
+X024523Y004388D01*
+X025287Y004593D01*
+X026041Y004834D01*
+X026782Y005111D01*
+X027509Y005422D01*
+X028221Y005768D01*
+X028915Y006147D01*
+X029590Y006558D01*
+X030246Y007002D01*
+X030879Y007476D01*
+X031489Y007979D01*
+X032074Y008512D01*
+X032633Y009071D01*
+X033166Y009656D01*
+X033669Y010266D01*
+X034143Y010899D01*
+X034587Y011555D01*
+X034998Y012230D01*
+X035377Y012924D01*
+X035723Y013636D01*
+X036034Y014363D01*
+X036311Y015104D01*
+X036552Y015858D01*
+X036757Y016622D01*
+X036925Y017395D01*
+X037056Y018175D01*
+X037150Y018960D01*
+X037206Y019749D01*
+X037225Y020540D01*
+X035925Y020605D02*
+X035908Y021331D01*
+X035856Y022055D01*
+X035770Y022776D01*
+X035649Y023492D01*
+X035495Y024201D01*
+X035307Y024903D01*
+X035086Y025594D01*
+X034832Y026275D01*
+X034546Y026942D01*
+X034229Y027595D01*
+X033881Y028232D01*
+X033503Y028852D01*
+X033096Y029454D01*
+X032661Y030035D01*
+X032199Y030595D01*
+X031711Y031132D01*
+X031197Y031646D01*
+X030660Y032134D01*
+X030100Y032596D01*
+X029519Y033031D01*
+X028917Y033438D01*
+X028297Y033816D01*
+X027660Y034164D01*
+X027007Y034481D01*
+X026340Y034767D01*
+X025659Y035021D01*
+X024968Y035242D01*
+X024266Y035430D01*
+X023557Y035584D01*
+X022841Y035705D01*
+X022120Y035791D01*
+X021396Y035843D01*
+X020670Y035860D01*
+X020605Y036640D02*
+X019845Y036622D01*
+X019087Y036568D01*
+X018332Y036477D01*
+X017583Y036351D01*
+X016840Y036190D01*
+X016106Y035993D01*
+X015382Y035762D01*
+X014670Y035496D01*
+X013971Y035197D01*
+X013287Y034865D01*
+X012620Y034500D01*
+X011971Y034105D01*
+X011341Y033679D01*
+X010733Y033223D01*
+X010147Y032739D01*
+X009584Y032228D01*
+X009047Y031691D01*
+X008536Y031128D01*
+X008052Y030542D01*
+X007596Y029933D01*
+X007170Y029304D01*
+X006775Y028655D01*
+X006410Y027988D01*
+X006078Y027304D01*
+X005779Y026605D01*
+X005513Y025893D01*
+X005282Y025169D01*
+X005085Y024435D01*
+X004924Y023692D01*
+X004798Y022943D01*
+X004707Y022188D01*
+X004653Y021430D01*
+X004635Y020670D01*
+X003855Y020605D02*
+X003874Y019811D01*
+X003931Y019019D01*
+X004025Y018231D01*
+X004156Y017447D01*
+X004325Y016671D01*
+X004531Y015904D01*
+X004773Y015148D01*
+X005050Y014404D01*
+X005363Y013674D01*
+X005710Y012960D01*
+X006090Y012263D01*
+X006504Y011584D01*
+X006949Y010927D01*
+X007425Y010291D01*
+X007930Y009679D01*
+X008464Y009091D01*
+X009026Y008529D01*
+X009614Y007995D01*
+X010226Y007490D01*
+X010862Y007014D01*
+X011519Y006569D01*
+X012198Y006155D01*
+X012895Y005775D01*
+X013609Y005428D01*
+X014339Y005115D01*
+X015083Y004838D01*
+X015839Y004596D01*
+X016606Y004390D01*
+X017382Y004221D01*
+X018166Y004090D01*
+X018954Y003996D01*
+X019746Y003939D01*
+X020540Y003920D01*
+X020605Y005740D02*
+X021309Y005757D01*
+X022012Y005807D01*
+X022711Y005891D01*
+X023406Y006007D01*
+X024094Y006157D01*
+X024775Y006339D01*
+X025446Y006554D01*
+X026106Y006800D01*
+X026753Y007077D01*
+X027387Y007385D01*
+X028005Y007723D01*
+X028606Y008089D01*
+X029190Y008484D01*
+X029754Y008906D01*
+X030297Y009355D01*
+X030818Y009829D01*
+X031316Y010327D01*
+X031790Y010848D01*
+X032239Y011391D01*
+X032661Y011955D01*
+X033056Y012539D01*
+X033422Y013140D01*
+X033760Y013758D01*
+X034068Y014392D01*
+X034345Y015039D01*
+X034591Y015699D01*
+X034806Y016370D01*
+X034988Y017051D01*
+X035138Y017739D01*
+X035254Y018434D01*
+X035338Y019133D01*
+X035388Y019836D01*
+X035405Y020540D01*
+X032025Y020605D02*
+X032012Y021145D01*
+X031974Y021684D01*
+X031909Y022221D01*
+X031820Y022754D01*
+X031705Y023282D01*
+X031565Y023804D01*
+X031401Y024319D01*
+X031212Y024825D01*
+X030999Y025322D01*
+X030763Y025808D01*
+X030504Y026282D01*
+X030222Y026744D01*
+X029920Y027192D01*
+X029596Y027624D01*
+X029252Y028041D01*
+X028888Y028441D01*
+X028506Y028823D01*
+X028106Y029187D01*
+X027689Y029531D01*
+X027256Y029855D01*
+X026809Y030157D01*
+X026347Y030439D01*
+X025873Y030698D01*
+X025387Y030934D01*
+X024890Y031147D01*
+X024384Y031336D01*
+X023869Y031500D01*
+X023347Y031640D01*
+X022819Y031755D01*
+X022286Y031844D01*
+X021749Y031909D01*
+X021210Y031947D01*
+X020670Y031960D01*
+X020605Y033520D02*
+X019994Y033505D01*
+X019384Y033462D01*
+X018776Y033389D01*
+X018173Y033288D01*
+X017575Y033158D01*
+X016985Y032999D01*
+X016402Y032813D01*
+X015829Y032600D01*
+X015267Y032359D01*
+X014717Y032092D01*
+X014180Y031798D01*
+X013658Y031480D01*
+X013151Y031137D01*
+X012662Y030771D01*
+X012190Y030381D01*
+X011737Y029970D01*
+X011305Y029538D01*
+X010894Y029085D01*
+X010504Y028613D01*
+X010138Y028124D01*
+X009795Y027617D01*
+X009477Y027095D01*
+X009183Y026558D01*
+X008916Y026008D01*
+X008675Y025446D01*
+X008462Y024873D01*
+X008276Y024290D01*
+X008117Y023699D01*
+X007987Y023102D01*
+X007886Y022499D01*
+X007813Y021891D01*
+X007770Y021281D01*
+X007755Y020670D01*
+X005935Y020605D02*
+X005952Y019910D01*
+X006001Y019217D01*
+X006084Y018527D01*
+X006199Y017841D01*
+X006347Y017162D01*
+X006527Y016490D01*
+X006738Y015828D01*
+X006981Y015177D01*
+X007255Y014538D01*
+X007559Y013913D01*
+X007892Y013303D01*
+X008253Y012709D01*
+X008643Y012133D01*
+X009060Y011577D01*
+X009502Y011041D01*
+X009970Y010526D01*
+X010461Y010035D01*
+X010976Y009567D01*
+X011512Y009125D01*
+X012068Y008708D01*
+X012644Y008318D01*
+X013238Y007957D01*
+X013848Y007624D01*
+X014473Y007320D01*
+X015112Y007046D01*
+X015763Y006803D01*
+X016425Y006592D01*
+X017097Y006412D01*
+X017776Y006264D01*
+X018462Y006149D01*
+X019152Y006066D01*
+X019845Y006017D01*
+X020540Y006000D01*
+X020605Y006780D02*
+X021260Y006796D01*
+X021913Y006842D01*
+X022563Y006920D01*
+X023209Y007029D01*
+X023849Y007168D01*
+X024482Y007337D01*
+X025105Y007537D01*
+X025719Y007766D01*
+X026321Y008023D01*
+X026910Y008310D01*
+X027485Y008623D01*
+X028044Y008964D01*
+X028587Y009331D01*
+X029111Y009724D01*
+X029616Y010141D01*
+X030101Y010581D01*
+X030564Y011045D01*
+X031004Y011529D01*
+X031421Y012034D01*
+X031814Y012558D01*
+X032181Y013101D01*
+X032522Y013660D01*
+X032835Y014235D01*
+X033122Y014824D01*
+X033379Y015426D01*
+X033608Y016040D01*
+X033808Y016663D01*
+X033977Y017296D01*
+X034116Y017936D01*
+X034225Y018582D01*
+X034303Y019232D01*
+X034349Y019885D01*
+X034365Y020540D01*
+X031505Y020605D02*
+X031493Y021120D01*
+X031456Y021635D01*
+X031395Y022147D01*
+X031309Y022655D01*
+X031200Y023159D01*
+X031066Y023658D01*
+X030909Y024149D01*
+X030729Y024632D01*
+X030526Y025106D01*
+X030301Y025570D01*
+X030053Y026022D01*
+X029785Y026463D01*
+X029496Y026890D01*
+X029187Y027303D01*
+X028859Y027700D01*
+X028512Y028082D01*
+X028147Y028447D01*
+X027765Y028794D01*
+X027368Y029122D01*
+X026955Y029431D01*
+X026528Y029720D01*
+X026087Y029988D01*
+X025635Y030236D01*
+X025171Y030461D01*
+X024697Y030664D01*
+X024214Y030844D01*
+X023722Y031001D01*
+X023224Y031135D01*
+X022720Y031244D01*
+X022212Y031330D01*
+X021700Y031391D01*
+X021185Y031428D01*
+X020670Y031440D01*
+X020605Y033000D02*
+X020018Y032986D01*
+X019433Y032944D01*
+X018850Y032874D01*
+X018272Y032777D01*
+X017698Y032652D01*
+X017131Y032501D01*
+X016572Y032322D01*
+X016022Y032117D01*
+X015483Y031886D01*
+X014955Y031629D01*
+X014440Y031348D01*
+X013939Y031043D01*
+X013453Y030714D01*
+X012983Y030362D01*
+X012531Y029988D01*
+X012096Y029594D01*
+X011681Y029179D01*
+X011287Y028744D01*
+X010913Y028292D01*
+X010561Y027822D01*
+X010232Y027336D01*
+X009927Y026835D01*
+X009646Y026320D01*
+X009389Y025792D01*
+X009158Y025253D01*
+X008953Y024703D01*
+X008774Y024144D01*
+X008623Y023577D01*
+X008498Y023003D01*
+X008400Y022425D01*
+X008331Y021842D01*
+X008289Y021257D01*
+X008275Y020670D01*
+X004115Y020605D02*
+X004134Y019824D01*
+X004189Y019044D01*
+X004282Y018268D01*
+X004412Y017497D01*
+X004578Y016733D01*
+X004780Y015978D01*
+X005018Y015233D01*
+X005292Y014501D01*
+X005599Y013782D01*
+X005941Y013079D01*
+X006315Y012393D01*
+X006722Y011725D01*
+X007161Y011078D01*
+X007629Y010452D01*
+X008127Y009849D01*
+X008653Y009270D01*
+X009205Y008718D01*
+X009784Y008192D01*
+X010387Y007694D01*
+X011013Y007226D01*
+X011660Y006787D01*
+X012328Y006380D01*
+X013014Y006006D01*
+X013717Y005664D01*
+X014436Y005357D01*
+X015168Y005083D01*
+X015913Y004845D01*
+X016668Y004643D01*
+X017432Y004477D01*
+X018203Y004347D01*
+X018979Y004254D01*
+X019759Y004199D01*
+X020540Y004180D01*
+X020605Y008340D02*
+X021185Y008354D01*
+X021765Y008395D01*
+X022341Y008464D01*
+X022914Y008560D01*
+X023481Y008684D01*
+X024042Y008834D01*
+X024595Y009011D01*
+X025139Y009214D01*
+X025673Y009442D01*
+X026195Y009696D01*
+X026705Y009974D01*
+X027201Y010277D01*
+X027682Y010602D01*
+X028147Y010950D01*
+X028594Y011320D01*
+X029024Y011710D01*
+X029435Y012121D01*
+X029825Y012551D01*
+X030195Y012998D01*
+X030543Y013463D01*
+X030868Y013944D01*
+X031171Y014440D01*
+X031449Y014950D01*
+X031703Y015472D01*
+X031931Y016006D01*
+X032134Y016550D01*
+X032311Y017103D01*
+X032461Y017664D01*
+X032585Y018231D01*
+X032681Y018804D01*
+X032750Y019380D01*
+X032791Y019960D01*
+X032805Y020540D01*
+X039825Y020605D02*
+X039803Y021516D01*
+X039738Y022426D01*
+X039630Y023331D01*
+X039479Y024230D01*
+X039285Y025121D01*
+X039049Y026002D01*
+X038772Y026870D01*
+X038453Y027724D01*
+X038094Y028562D01*
+X037696Y029382D01*
+X037259Y030182D01*
+X036784Y030961D01*
+X036273Y031716D01*
+X035727Y032446D01*
+X035146Y033149D01*
+X034533Y033823D01*
+X033888Y034468D01*
+X033214Y035081D01*
+X032511Y035662D01*
+X031781Y036208D01*
+X031026Y036719D01*
+X030247Y037194D01*
+X029447Y037631D01*
+X028627Y038029D01*
+X027789Y038388D01*
+X026935Y038707D01*
+X026067Y038984D01*
+X025186Y039220D01*
+X024295Y039414D01*
+X023396Y039565D01*
+X022491Y039673D01*
+X021581Y039738D01*
+X020670Y039760D01*
+X020605Y032740D02*
+X020013Y032725D01*
+X019422Y032682D01*
+X018834Y032609D01*
+X018250Y032508D01*
+X017672Y032378D01*
+X017101Y032220D01*
+X016539Y032034D01*
+X015986Y031821D01*
+X015444Y031581D01*
+X014915Y031315D01*
+X014400Y031023D01*
+X013899Y030706D01*
+X013415Y030365D01*
+X012948Y030000D01*
+X012499Y029613D01*
+X012070Y029205D01*
+X011662Y028776D01*
+X011275Y028327D01*
+X010910Y027860D01*
+X010569Y027376D01*
+X010252Y026875D01*
+X009960Y026360D01*
+X009694Y025831D01*
+X009454Y025289D01*
+X009241Y024736D01*
+X009055Y024174D01*
+X008897Y023603D01*
+X008767Y023025D01*
+X008666Y022441D01*
+X008593Y021853D01*
+X008550Y021262D01*
+X008535Y020670D01*
+X007235Y020605D02*
+X007250Y019972D01*
+X007295Y019340D01*
+X007370Y018712D01*
+X007475Y018087D01*
+X007610Y017468D01*
+X007774Y016857D01*
+X007967Y016253D01*
+X008188Y015660D01*
+X008437Y015078D01*
+X008714Y014508D01*
+X009017Y013953D01*
+X009347Y013412D01*
+X009702Y012887D01*
+X010082Y012380D01*
+X010485Y011892D01*
+X010911Y011424D01*
+X011359Y010976D01*
+X011827Y010550D01*
+X012315Y010147D01*
+X012822Y009767D01*
+X013347Y009412D01*
+X013888Y009082D01*
+X014443Y008779D01*
+X015013Y008502D01*
+X015595Y008253D01*
+X016188Y008032D01*
+X016792Y007839D01*
+X017403Y007675D01*
+X018022Y007540D01*
+X018647Y007435D01*
+X019275Y007360D01*
+X019907Y007315D01*
+X020540Y007300D01*
+X020605Y002880D02*
+X021445Y002900D01*
+X022284Y002960D01*
+X023118Y003060D01*
+X023947Y003199D01*
+X024768Y003378D01*
+X025580Y003595D01*
+X026381Y003851D01*
+X027169Y004145D01*
+X027941Y004476D01*
+X028697Y004843D01*
+X029435Y005246D01*
+X030153Y005683D01*
+X030849Y006155D01*
+X031522Y006658D01*
+X032170Y007193D01*
+X032792Y007759D01*
+X033386Y008353D01*
+X033952Y008975D01*
+X034487Y009623D01*
+X034990Y010296D01*
+X035462Y010992D01*
+X035899Y011710D01*
+X036302Y012448D01*
+X036669Y013204D01*
+X037000Y013976D01*
+X037294Y014764D01*
+X037550Y015565D01*
+X037767Y016377D01*
+X037946Y017198D01*
+X038085Y018027D01*
+X038185Y018861D01*
+X038245Y019700D01*
+X038265Y020540D01*
+X037485Y020605D02*
+X037466Y021405D01*
+X037409Y022203D01*
+X037314Y022998D01*
+X037181Y023787D01*
+X037011Y024569D01*
+X036804Y025342D01*
+X036560Y026105D01*
+X036281Y026854D01*
+X035965Y027590D01*
+X035616Y028310D01*
+X035232Y029012D01*
+X034816Y029696D01*
+X034367Y030359D01*
+X033887Y030999D01*
+X033378Y031616D01*
+X032840Y032209D01*
+X032274Y032775D01*
+X031681Y033313D01*
+X031064Y033822D01*
+X030424Y034302D01*
+X029761Y034751D01*
+X029077Y035167D01*
+X028375Y035551D01*
+X027655Y035900D01*
+X026919Y036216D01*
+X026170Y036495D01*
+X025407Y036739D01*
+X024634Y036946D01*
+X023852Y037116D01*
+X023063Y037249D01*
+X022268Y037344D01*
+X021470Y037401D01*
+X020670Y037420D01*
+X020605Y029620D02*
+X020179Y029610D01*
+X019754Y029579D01*
+X019331Y029529D01*
+X018911Y029458D01*
+X018495Y029368D01*
+X018083Y029257D01*
+X017678Y029128D01*
+X017279Y028979D01*
+X016887Y028811D01*
+X016504Y028625D01*
+X016130Y028421D01*
+X015766Y028199D01*
+X015413Y027960D01*
+X015072Y027705D01*
+X014744Y027434D01*
+X014429Y027147D01*
+X014128Y026846D01*
+X013841Y026531D01*
+X013570Y026203D01*
+X013315Y025861D01*
+X013076Y025509D01*
+X012854Y025145D01*
+X012650Y024771D01*
+X012464Y024388D01*
+X012296Y023996D01*
+X012147Y023597D01*
+X012018Y023191D01*
+X011907Y022780D01*
+X011817Y022364D01*
+X011746Y021944D01*
+X011696Y021521D01*
+X011665Y021096D01*
+X011655Y020670D01*
+X007755Y020605D02*
+X007769Y019997D01*
+X007813Y019390D01*
+X007885Y018786D01*
+X007986Y018186D01*
+X008115Y017591D01*
+X008273Y017003D01*
+X008458Y016424D01*
+X008671Y015853D01*
+X008910Y015294D01*
+X009176Y014747D01*
+X009468Y014213D01*
+X009785Y013693D01*
+X010126Y013189D01*
+X010490Y012702D01*
+X010878Y012233D01*
+X011287Y011782D01*
+X011717Y011352D01*
+X012168Y010943D01*
+X012637Y010555D01*
+X013124Y010191D01*
+X013628Y009850D01*
+X014148Y009533D01*
+X014682Y009241D01*
+X015229Y008975D01*
+X015788Y008736D01*
+X016359Y008523D01*
+X016938Y008338D01*
+X017526Y008180D01*
+X018121Y008051D01*
+X018721Y007950D01*
+X019325Y007878D01*
+X019932Y007834D01*
+X020540Y007820D01*
+X020605Y008860D02*
+X021161Y008873D01*
+X021715Y008913D01*
+X022267Y008979D01*
+X022815Y009071D01*
+X023359Y009189D01*
+X023896Y009333D01*
+X024425Y009502D01*
+X024946Y009697D01*
+X025457Y009915D01*
+X025957Y010158D01*
+X026445Y010425D01*
+X026920Y010714D01*
+X027380Y011026D01*
+X027825Y011359D01*
+X028254Y011713D01*
+X028665Y012087D01*
+X029058Y012480D01*
+X029432Y012891D01*
+X029786Y013320D01*
+X030119Y013765D01*
+X030431Y014225D01*
+X030720Y014700D01*
+X030987Y015188D01*
+X031230Y015688D01*
+X031448Y016199D01*
+X031643Y016720D01*
+X031812Y017249D01*
+X031956Y017786D01*
+X032074Y018330D01*
+X032166Y018878D01*
+X032232Y019430D01*
+X032272Y019984D01*
+X032285Y020540D01*
+X033585Y020605D02*
+X033570Y021219D01*
+X033527Y021833D01*
+X033454Y022443D01*
+X033352Y023049D01*
+X033221Y023650D01*
+X033062Y024244D01*
+X032875Y024829D01*
+X032660Y025405D01*
+X032418Y025970D01*
+X032149Y026523D01*
+X031855Y027062D01*
+X031535Y027587D01*
+X031190Y028096D01*
+X030822Y028589D01*
+X030431Y029063D01*
+X030017Y029517D01*
+X029582Y029952D01*
+X029128Y030366D01*
+X028654Y030757D01*
+X028161Y031125D01*
+X027652Y031470D01*
+X027127Y031790D01*
+X026588Y032084D01*
+X026035Y032353D01*
+X025470Y032595D01*
+X024894Y032810D01*
+X024309Y032997D01*
+X023715Y033156D01*
+X023114Y033287D01*
+X022508Y033389D01*
+X021898Y033462D01*
+X021284Y033505D01*
+X020670Y033520D01*
+X020605Y029360D02*
+X020191Y029350D01*
+X019779Y029321D01*
+X019368Y029272D01*
+X018960Y029203D01*
+X018556Y029115D01*
+X018157Y029008D01*
+X017763Y028882D01*
+X017375Y028738D01*
+X016995Y028575D01*
+X016623Y028394D01*
+X016260Y028196D01*
+X015907Y027980D01*
+X015564Y027749D01*
+X015233Y027501D01*
+X014914Y027237D01*
+X014608Y026959D01*
+X014316Y026667D01*
+X014038Y026361D01*
+X013774Y026042D01*
+X013526Y025711D01*
+X013294Y025368D01*
+X013079Y025015D01*
+X012881Y024652D01*
+X012700Y024280D01*
+X012537Y023900D01*
+X012393Y023512D01*
+X012267Y023118D01*
+X012160Y022719D01*
+X012072Y022315D01*
+X012003Y021907D01*
+X011954Y021496D01*
+X011925Y021083D01*
+X011915Y020670D01*
+X012695Y020605D02*
+X012704Y020232D01*
+X012731Y019859D01*
+X012775Y019489D01*
+X012837Y019120D01*
+X012916Y018756D01*
+X013013Y018395D01*
+X013126Y018039D01*
+X013257Y017689D01*
+X013404Y017346D01*
+X013567Y017010D01*
+X013746Y016683D01*
+X013940Y016364D01*
+X014150Y016054D01*
+X014373Y015756D01*
+X014611Y015468D01*
+X014862Y015191D01*
+X015126Y014927D01*
+X015403Y014676D01*
+X015691Y014438D01*
+X015989Y014215D01*
+X016299Y014005D01*
+X016618Y013811D01*
+X016945Y013632D01*
+X017281Y013469D01*
+X017624Y013322D01*
+X017974Y013191D01*
+X018330Y013078D01*
+X018691Y012981D01*
+X019055Y012902D01*
+X019424Y012840D01*
+X019794Y012796D01*
+X020167Y012769D01*
+X020540Y012760D01*
+X020605Y007820D02*
+X021210Y007834D01*
+X021814Y007878D01*
+X022415Y007949D01*
+X023012Y008050D01*
+X023604Y008179D01*
+X024189Y008335D01*
+X024765Y008520D01*
+X025333Y008731D01*
+X025889Y008969D01*
+X026434Y009234D01*
+X026965Y009524D01*
+X027482Y009839D01*
+X027983Y010179D01*
+X028468Y010541D01*
+X028935Y010927D01*
+X029383Y011334D01*
+X029811Y011762D01*
+X030218Y012210D01*
+X030604Y012677D01*
+X030966Y013162D01*
+X031306Y013663D01*
+X031621Y014180D01*
+X031911Y014711D01*
+X032176Y015256D01*
+X032414Y015813D01*
+X032625Y016380D01*
+X032810Y016956D01*
+X032966Y017541D01*
+X033095Y018133D01*
+X033196Y018730D01*
+X033267Y019331D01*
+X033311Y019935D01*
+X033325Y020540D01*
+X031765Y020605D02*
+X031752Y021133D01*
+X031715Y021660D01*
+X031652Y022184D01*
+X031565Y022705D01*
+X031452Y023221D01*
+X031316Y023731D01*
+X031155Y024234D01*
+X030970Y024729D01*
+X030762Y025214D01*
+X030532Y025689D01*
+X030279Y026152D01*
+X030004Y026603D01*
+X029708Y027041D01*
+X029391Y027463D01*
+X029055Y027871D01*
+X028700Y028261D01*
+X028326Y028635D01*
+X027936Y028990D01*
+X027528Y029326D01*
+X027106Y029643D01*
+X026668Y029939D01*
+X026217Y030214D01*
+X025754Y030467D01*
+X025279Y030697D01*
+X024794Y030905D01*
+X024299Y031090D01*
+X023796Y031251D01*
+X023286Y031387D01*
+X022770Y031500D01*
+X022249Y031587D01*
+X021725Y031650D01*
+X021198Y031687D01*
+X020670Y031700D01*
+X020605Y028840D02*
+X020216Y028831D01*
+X019828Y028803D01*
+X019442Y028757D01*
+X019059Y028692D01*
+X018679Y028610D01*
+X018303Y028509D01*
+X017933Y028391D01*
+X017568Y028255D01*
+X017211Y028102D01*
+X016861Y027932D01*
+X016520Y027745D01*
+X016188Y027543D01*
+X015866Y027325D01*
+X015555Y027092D01*
+X015255Y026844D01*
+X014967Y026583D01*
+X014692Y026308D01*
+X014431Y026020D01*
+X014183Y025720D01*
+X013950Y025409D01*
+X013732Y025087D01*
+X013530Y024755D01*
+X013343Y024414D01*
+X013173Y024064D01*
+X013020Y023706D01*
+X012884Y023342D01*
+X012766Y022972D01*
+X012665Y022596D01*
+X012583Y022216D01*
+X012518Y021833D01*
+X012472Y021447D01*
+X012444Y021059D01*
+X012435Y020670D01*
+X012435Y020605D02*
+X012444Y020219D01*
+X012472Y019835D01*
+X012517Y019452D01*
+X012581Y019071D01*
+X012663Y018694D01*
+X012763Y018322D01*
+X012881Y017954D01*
+X013016Y017593D01*
+X013167Y017238D01*
+X013336Y016891D01*
+X013521Y016553D01*
+X013722Y016223D01*
+X013938Y015904D01*
+X014169Y015595D01*
+X014415Y015297D01*
+X014674Y015012D01*
+X014947Y014739D01*
+X015232Y014480D01*
+X015530Y014234D01*
+X015839Y014003D01*
+X016158Y013787D01*
+X016488Y013586D01*
+X016826Y013401D01*
+X017173Y013232D01*
+X017528Y013081D01*
+X017889Y012946D01*
+X018257Y012828D01*
+X018629Y012728D01*
+X019006Y012646D01*
+X019387Y012582D01*
+X019770Y012537D01*
+X020154Y012509D01*
+X020540Y012500D01*
+X020605Y012760D02*
+X020975Y012769D01*
+X021344Y012795D01*
+X021712Y012839D01*
+X022077Y012901D01*
+X022439Y012979D01*
+X022797Y013075D01*
+X023150Y013188D01*
+X023496Y013317D01*
+X023837Y013463D01*
+X024170Y013625D01*
+X024495Y013802D01*
+X024811Y013995D01*
+X025118Y014203D01*
+X025414Y014424D01*
+X025700Y014660D01*
+X025974Y014909D01*
+X026236Y015171D01*
+X026485Y015445D01*
+X026721Y015731D01*
+X026942Y016027D01*
+X027150Y016334D01*
+X027343Y016650D01*
+X027520Y016975D01*
+X027682Y017308D01*
+X027828Y017649D01*
+X027957Y017995D01*
+X028070Y018348D01*
+X028166Y018706D01*
+X028244Y019068D01*
+X028306Y019433D01*
+X028350Y019801D01*
+X028376Y020170D01*
+X028385Y020540D01*
+X040085Y020605D02*
+X040063Y021529D01*
+X039997Y022450D01*
+X039887Y023368D01*
+X039734Y024279D01*
+X039538Y025182D01*
+X039299Y026075D01*
+X039017Y026955D01*
+X038694Y027821D01*
+X038331Y028670D01*
+X037927Y029501D01*
+X037484Y030312D01*
+X037003Y031101D01*
+X036485Y031867D01*
+X035931Y032607D01*
+X035343Y033319D01*
+X034721Y034003D01*
+X034068Y034656D01*
+X033384Y035278D01*
+X032672Y035866D01*
+X031932Y036420D01*
+X031167Y036938D01*
+X030377Y037419D01*
+X029566Y037862D01*
+X028735Y038266D01*
+X027886Y038629D01*
+X027020Y038952D01*
+X026140Y039234D01*
+X025247Y039473D01*
+X024344Y039669D01*
+X023433Y039822D01*
+X022515Y039932D01*
+X021594Y039998D01*
+X020670Y040020D01*
+X020605Y040020D02*
+X019684Y039998D01*
+X018766Y039932D01*
+X017851Y039823D01*
+X016943Y039670D01*
+X016043Y039475D01*
+X015154Y039236D01*
+X014276Y038956D01*
+X013413Y038634D01*
+X012567Y038271D01*
+X011738Y037869D01*
+X010930Y037428D01*
+X010144Y036948D01*
+X009381Y036432D01*
+X008644Y035880D01*
+X007933Y035294D01*
+X007252Y034674D01*
+X006601Y034023D01*
+X005981Y033342D01*
+X005395Y032631D01*
+X004843Y031894D01*
+X004327Y031131D01*
+X003847Y030345D01*
+X003406Y029537D01*
+X003004Y028708D01*
+X002641Y027862D01*
+X002319Y026999D01*
+X002039Y026122D01*
+X001800Y025232D01*
+X001605Y024332D01*
+X001452Y023424D01*
+X001343Y022509D01*
+X001277Y021591D01*
+X001255Y020670D01*
+X000735Y020605D02*
+X000757Y019663D01*
+X000825Y018723D01*
+X000937Y017787D01*
+X001093Y016857D01*
+X001293Y015936D01*
+X001537Y015025D01*
+X001824Y014128D01*
+X002154Y013244D01*
+X002525Y012378D01*
+X002937Y011530D01*
+X003388Y010703D01*
+X003879Y009898D01*
+X004407Y009117D01*
+X004972Y008362D01*
+X005572Y007635D01*
+X006206Y006938D01*
+X006873Y006271D01*
+X007570Y005637D01*
+X008297Y005037D01*
+X009052Y004472D01*
+X009833Y003944D01*
+X010638Y003453D01*
+X011465Y003002D01*
+X012313Y002590D01*
+X013179Y002219D01*
+X014063Y001889D01*
+X014960Y001602D01*
+X015871Y001358D01*
+X016792Y001158D01*
+X017722Y001002D01*
+X018658Y000890D01*
+X019598Y000822D01*
+X020540Y000800D01*
+X020605Y001060D02*
+X021532Y001082D01*
+X022457Y001148D01*
+X023377Y001258D01*
+X024292Y001412D01*
+X025198Y001609D01*
+X026093Y001849D01*
+X026976Y002131D01*
+X027845Y002455D01*
+X028697Y002820D01*
+X029531Y003225D01*
+X030345Y003670D01*
+X031137Y004152D01*
+X031904Y004672D01*
+X032647Y005228D01*
+X033362Y005818D01*
+X034048Y006442D01*
+X034703Y007097D01*
+X035327Y007783D01*
+X035917Y008498D01*
+X036473Y009241D01*
+X036993Y010008D01*
+X037475Y010800D01*
+X037920Y011614D01*
+X038325Y012448D01*
+X038690Y013300D01*
+X039014Y014169D01*
+X039296Y015052D01*
+X039536Y015947D01*
+X039733Y016853D01*
+X039887Y017768D01*
+X039997Y018688D01*
+X040063Y019613D01*
+X040085Y020540D01*
+X035145Y020605D02*
+X035129Y021294D01*
+X035079Y021981D01*
+X034998Y022665D01*
+X034883Y023344D01*
+X034737Y024018D01*
+X034559Y024683D01*
+X034349Y025339D01*
+X034108Y025985D01*
+X033837Y026618D01*
+X033536Y027238D01*
+X033206Y027842D01*
+X032847Y028431D01*
+X032461Y029001D01*
+X032048Y029553D01*
+X031609Y030084D01*
+X031146Y030594D01*
+X030659Y031081D01*
+X030149Y031544D01*
+X029618Y031983D01*
+X029066Y032396D01*
+X028496Y032782D01*
+X027907Y033141D01*
+X027303Y033471D01*
+X026683Y033772D01*
+X026050Y034043D01*
+X025404Y034284D01*
+X024748Y034494D01*
+X024083Y034672D01*
+X023409Y034818D01*
+X022730Y034933D01*
+X022046Y035014D01*
+X021359Y035064D01*
+X020670Y035080D01*
+X020605Y039240D02*
+X019721Y039219D01*
+X018840Y039156D01*
+X017962Y039051D01*
+X017091Y038904D01*
+X016227Y038717D01*
+X015373Y038488D01*
+X014531Y038219D01*
+X013703Y037910D01*
+X012891Y037562D01*
+X012096Y037176D01*
+X011320Y036752D01*
+X010565Y036292D01*
+X009833Y035797D01*
+X009126Y035267D01*
+X008444Y034704D01*
+X007790Y034110D01*
+X007165Y033485D01*
+X006571Y032831D01*
+X006008Y032149D01*
+X005478Y031442D01*
+X004983Y030710D01*
+X004523Y029955D01*
+X004099Y029179D01*
+X003713Y028384D01*
+X003365Y027572D01*
+X003056Y026744D01*
+X002787Y025902D01*
+X002558Y025048D01*
+X002371Y024184D01*
+X002224Y023313D01*
+X002119Y022435D01*
+X002056Y021554D01*
+X002035Y020670D01*
+X006715Y020605D02*
+X006731Y019947D01*
+X006778Y019291D01*
+X006856Y018638D01*
+X006965Y017989D01*
+X007105Y017346D01*
+X007275Y016710D01*
+X007475Y016083D01*
+X007705Y015467D01*
+X007964Y014862D01*
+X008252Y014270D01*
+X008567Y013693D01*
+X008910Y013131D01*
+X009278Y012586D01*
+X009673Y012059D01*
+X010092Y011552D01*
+X010534Y011065D01*
+X011000Y010599D01*
+X011487Y010157D01*
+X011994Y009738D01*
+X012521Y009343D01*
+X013066Y008975D01*
+X013628Y008632D01*
+X014205Y008317D01*
+X014797Y008029D01*
+X015402Y007770D01*
+X016018Y007540D01*
+X016645Y007340D01*
+X017281Y007170D01*
+X017924Y007030D01*
+X018573Y006921D01*
+X019226Y006843D01*
+X019882Y006796D01*
+X020540Y006780D01*
+X020605Y002620D02*
+X021458Y002640D01*
+X022308Y002701D01*
+X023155Y002802D01*
+X023996Y002944D01*
+X024830Y003125D01*
+X025654Y003346D01*
+X026466Y003606D01*
+X027265Y003904D01*
+X028049Y004239D01*
+X028816Y004612D01*
+X029565Y005021D01*
+X030293Y005465D01*
+X031000Y005943D01*
+X031682Y006454D01*
+X032340Y006997D01*
+X032971Y007571D01*
+X033574Y008174D01*
+X034148Y008805D01*
+X034691Y009463D01*
+X035202Y010145D01*
+X035680Y010852D01*
+X036124Y011580D01*
+X036533Y012329D01*
+X036906Y013096D01*
+X037241Y013880D01*
+X037539Y014679D01*
+X037799Y015491D01*
+X038020Y016315D01*
+X038201Y017149D01*
+X038343Y017990D01*
+X038444Y018837D01*
+X038505Y019687D01*
+X038525Y020540D01*
+X034625Y020605D02*
+X034609Y021269D01*
+X034562Y021931D01*
+X034483Y022591D01*
+X034373Y023246D01*
+X034232Y023895D01*
+X034060Y024537D01*
+X033858Y025169D01*
+X033625Y025792D01*
+X033364Y026402D01*
+X033074Y027000D01*
+X032755Y027582D01*
+X032410Y028150D01*
+X032037Y028700D01*
+X031639Y029231D01*
+X031216Y029744D01*
+X030770Y030235D01*
+X030300Y030705D01*
+X029809Y031151D01*
+X029296Y031574D01*
+X028765Y031972D01*
+X028215Y032345D01*
+X027647Y032690D01*
+X027065Y033009D01*
+X026467Y033299D01*
+X025857Y033560D01*
+X025234Y033793D01*
+X024602Y033995D01*
+X023960Y034167D01*
+X023311Y034308D01*
+X022656Y034418D01*
+X021996Y034497D01*
+X021334Y034544D01*
+X020670Y034560D01*
+X020605Y038980D02*
+X019734Y038959D01*
+X018865Y038897D01*
+X017999Y038794D01*
+X017140Y038649D01*
+X016288Y038464D01*
+X015446Y038238D01*
+X014616Y037973D01*
+X013800Y037668D01*
+X012999Y037325D01*
+X012215Y036945D01*
+X011450Y036527D01*
+X010706Y036073D01*
+X009984Y035585D01*
+X009287Y035063D01*
+X008614Y034508D01*
+X007970Y033922D01*
+X007353Y033305D01*
+X006767Y032661D01*
+X006212Y031988D01*
+X005690Y031291D01*
+X005202Y030569D01*
+X004748Y029825D01*
+X004330Y029060D01*
+X003950Y028276D01*
+X003607Y027475D01*
+X003302Y026659D01*
+X003037Y025829D01*
+X002811Y024987D01*
+X002626Y024135D01*
+X002481Y023276D01*
+X002378Y022410D01*
+X002316Y021541D01*
+X002295Y020670D01*
+X008275Y020605D02*
+X008289Y020022D01*
+X008331Y019439D01*
+X008400Y018860D01*
+X008497Y018284D01*
+X008621Y017714D01*
+X008772Y017150D01*
+X008950Y016594D01*
+X009154Y016047D01*
+X009383Y015510D01*
+X009638Y014985D01*
+X009918Y014473D01*
+X010222Y013974D01*
+X010549Y013491D01*
+X010899Y013023D01*
+X011271Y012573D01*
+X011663Y012141D01*
+X012076Y011728D01*
+X012508Y011336D01*
+X012958Y010964D01*
+X013426Y010614D01*
+X013909Y010287D01*
+X014408Y009983D01*
+X014920Y009703D01*
+X015445Y009448D01*
+X015982Y009219D01*
+X016529Y009015D01*
+X017085Y008837D01*
+X017649Y008686D01*
+X018219Y008562D01*
+X018795Y008465D01*
+X019374Y008396D01*
+X019957Y008354D01*
+X020540Y008340D01*
+X020605Y004960D02*
+X021346Y004978D01*
+X022086Y005031D01*
+X022822Y005119D01*
+X023553Y005242D01*
+X024278Y005399D01*
+X024994Y005591D01*
+X025701Y005817D01*
+X026395Y006076D01*
+X027077Y006368D01*
+X027744Y006692D01*
+X028395Y007047D01*
+X029028Y007433D01*
+X029642Y007849D01*
+X030236Y008293D01*
+X030808Y008765D01*
+X031356Y009264D01*
+X031881Y009789D01*
+X032380Y010337D01*
+X032852Y010909D01*
+X033296Y011503D01*
+X033712Y012117D01*
+X034098Y012750D01*
+X034453Y013401D01*
+X034777Y014068D01*
+X035069Y014750D01*
+X035328Y015444D01*
+X035554Y016151D01*
+X035746Y016867D01*
+X035903Y017592D01*
+X036026Y018323D01*
+X036114Y019059D01*
+X036167Y019799D01*
+X036185Y020540D01*
+X032285Y020605D02*
+X032272Y021158D01*
+X032232Y021709D01*
+X032167Y022258D01*
+X032075Y022803D01*
+X031958Y023343D01*
+X031815Y023877D01*
+X031646Y024404D01*
+X031453Y024922D01*
+X031235Y025430D01*
+X030994Y025927D01*
+X030729Y026412D01*
+X030441Y026885D01*
+X030131Y027342D01*
+X029800Y027785D01*
+X029448Y028211D01*
+X029076Y028620D01*
+X028685Y029011D01*
+X028276Y029383D01*
+X027850Y029735D01*
+X027407Y030066D01*
+X026950Y030376D01*
+X026477Y030664D01*
+X025992Y030929D01*
+X025495Y031170D01*
+X024987Y031388D01*
+X024469Y031581D01*
+X023942Y031750D01*
+X023408Y031893D01*
+X022868Y032010D01*
+X022323Y032102D01*
+X021774Y032167D01*
+X021223Y032207D01*
+X020670Y032220D01*
+X020605Y038720D02*
+X019746Y038700D01*
+X018889Y038638D01*
+X018036Y038536D01*
+X017189Y038394D01*
+X016350Y038211D01*
+X015520Y037989D01*
+X014701Y037727D01*
+X013896Y037427D01*
+X013107Y037089D01*
+X012334Y036713D01*
+X011580Y036302D01*
+X010846Y035855D01*
+X010135Y035373D01*
+X009447Y034858D01*
+X008785Y034311D01*
+X008149Y033733D01*
+X007542Y033126D01*
+X006964Y032490D01*
+X006417Y031828D01*
+X005902Y031140D01*
+X005420Y030429D01*
+X004973Y029695D01*
+X004562Y028941D01*
+X004186Y028168D01*
+X003848Y027379D01*
+X003548Y026574D01*
+X003286Y025755D01*
+X003064Y024925D01*
+X002881Y024086D01*
+X002739Y023239D01*
+X002637Y022386D01*
+X002575Y021529D01*
+X002555Y020670D01*
+X008535Y020605D02*
+X008549Y020034D01*
+X008589Y019464D01*
+X008657Y018897D01*
+X008752Y018333D01*
+X008873Y017775D01*
+X009021Y017223D01*
+X009195Y016679D01*
+X009395Y016143D01*
+X009620Y015618D01*
+X009870Y015104D01*
+X010143Y014603D01*
+X010441Y014115D01*
+X010761Y013641D01*
+X011103Y013184D01*
+X011467Y012743D01*
+X011852Y012321D01*
+X012256Y011917D01*
+X012678Y011532D01*
+X013119Y011168D01*
+X013576Y010826D01*
+X014050Y010506D01*
+X014538Y010208D01*
+X015039Y009935D01*
+X015553Y009685D01*
+X016078Y009460D01*
+X016614Y009260D01*
+X017158Y009086D01*
+X017710Y008938D01*
+X018268Y008817D01*
+X018832Y008722D01*
+X019399Y008654D01*
+X019969Y008614D01*
+X020540Y008600D01*
+X020605Y006520D02*
+X021272Y006536D01*
+X021938Y006583D01*
+X022600Y006663D01*
+X023258Y006773D01*
+X023910Y006915D01*
+X024555Y007088D01*
+X025190Y007291D01*
+X025816Y007524D01*
+X026429Y007787D01*
+X027029Y008079D01*
+X027615Y008398D01*
+X028185Y008746D01*
+X028737Y009120D01*
+X029272Y009520D01*
+X029786Y009944D01*
+X030280Y010393D01*
+X030752Y010865D01*
+X031201Y011359D01*
+X031625Y011873D01*
+X032025Y012408D01*
+X032399Y012960D01*
+X032747Y013530D01*
+X033066Y014116D01*
+X033358Y014716D01*
+X033621Y015329D01*
+X033854Y015955D01*
+X034057Y016590D01*
+X034230Y017235D01*
+X034372Y017887D01*
+X034482Y018545D01*
+X034562Y019207D01*
+X034609Y019873D01*
+X034625Y020540D01*
+X030465Y020605D02*
+X030454Y021071D01*
+X030421Y021536D01*
+X030365Y021999D01*
+X030288Y022459D01*
+X030189Y022914D01*
+X030068Y023365D01*
+X029926Y023809D01*
+X029763Y024245D01*
+X029580Y024674D01*
+X029376Y025093D01*
+X029153Y025502D01*
+X028910Y025901D01*
+X028649Y026287D01*
+X028369Y026660D01*
+X028073Y027019D01*
+X027759Y027364D01*
+X027429Y027694D01*
+X027084Y028008D01*
+X026725Y028304D01*
+X026352Y028584D01*
+X025966Y028845D01*
+X025567Y029088D01*
+X025158Y029311D01*
+X024739Y029515D01*
+X024310Y029698D01*
+X023874Y029861D01*
+X023430Y030003D01*
+X022979Y030124D01*
+X022524Y030223D01*
+X022064Y030300D01*
+X021601Y030356D01*
+X021136Y030389D01*
+X020670Y030400D01*
+X020605Y037940D02*
+X019783Y037920D01*
+X018963Y037862D01*
+X018147Y037764D01*
+X017337Y037628D01*
+X016533Y037453D01*
+X015739Y037240D01*
+X014956Y036990D01*
+X014186Y036703D01*
+X013431Y036379D01*
+X012691Y036020D01*
+X011970Y035626D01*
+X011268Y035198D01*
+X010587Y034738D01*
+X009929Y034245D01*
+X009296Y033722D01*
+X008687Y033169D01*
+X008106Y032588D01*
+X007553Y031979D01*
+X007030Y031346D01*
+X006537Y030688D01*
+X006077Y030007D01*
+X005649Y029305D01*
+X005255Y028584D01*
+X004896Y027844D01*
+X004572Y027089D01*
+X004285Y026318D01*
+X004035Y025535D01*
+X003822Y024742D01*
+X003647Y023938D01*
+X003511Y023128D01*
+X003413Y022312D01*
+X003355Y021492D01*
+X003335Y020670D01*
+X009575Y020605D02*
+X009587Y020083D01*
+X009625Y019563D01*
+X009687Y019045D01*
+X009773Y018530D01*
+X009884Y018020D01*
+X010019Y017516D01*
+X010178Y017019D01*
+X010360Y016530D01*
+X010566Y016050D01*
+X010794Y015581D01*
+X011044Y015123D01*
+X011316Y014677D01*
+X011608Y014245D01*
+X011921Y013827D01*
+X012253Y013424D01*
+X012604Y013038D01*
+X012973Y012669D01*
+X013359Y012318D01*
+X013762Y011986D01*
+X014180Y011673D01*
+X014612Y011381D01*
+X015058Y011109D01*
+X015516Y010859D01*
+X015985Y010631D01*
+X016465Y010425D01*
+X016954Y010243D01*
+X017451Y010084D01*
+X017955Y009949D01*
+X018465Y009838D01*
+X018980Y009752D01*
+X019498Y009690D01*
+X020018Y009652D01*
+X020540Y009640D01*
+X020605Y013540D02*
+X020938Y013548D01*
+X021270Y013572D01*
+X021601Y013611D01*
+X021930Y013666D01*
+X022255Y013737D01*
+X022577Y013824D01*
+X022894Y013925D01*
+X023207Y014041D01*
+X023513Y014173D01*
+X023813Y014318D01*
+X024105Y014478D01*
+X024389Y014651D01*
+X024665Y014838D01*
+X024932Y015038D01*
+X025189Y015250D01*
+X025436Y015474D01*
+X025671Y015709D01*
+X025895Y015956D01*
+X026107Y016213D01*
+X026307Y016480D01*
+X026494Y016756D01*
+X026667Y017040D01*
+X026827Y017332D01*
+X026972Y017632D01*
+X027104Y017938D01*
+X027220Y018251D01*
+X027321Y018568D01*
+X027408Y018890D01*
+X027479Y019215D01*
+X027534Y019544D01*
+X027573Y019875D01*
+X027597Y020207D01*
+X027605Y020540D01*
+X028125Y020605D02*
+X028117Y020960D01*
+X028091Y021314D01*
+X028049Y021666D01*
+X027990Y022016D01*
+X027915Y022363D01*
+X027823Y022705D01*
+X027715Y023043D01*
+X027591Y023376D01*
+X027451Y023702D01*
+X027296Y024021D01*
+X027126Y024332D01*
+X026942Y024635D01*
+X026743Y024929D01*
+X026530Y025213D01*
+X026304Y025487D01*
+X026065Y025750D01*
+X025815Y026000D01*
+X025552Y026239D01*
+X025278Y026465D01*
+X024994Y026678D01*
+X024700Y026877D01*
+X024397Y027061D01*
+X024086Y027231D01*
+X023767Y027386D01*
+X023441Y027526D01*
+X023108Y027650D01*
+X022770Y027758D01*
+X022428Y027850D01*
+X022081Y027925D01*
+X021731Y027984D01*
+X021379Y028026D01*
+X021025Y028052D01*
+X020670Y028060D01*
+X020605Y037160D02*
+X019820Y037141D01*
+X019038Y037085D01*
+X018258Y036992D01*
+X017484Y036862D01*
+X016717Y036695D01*
+X015959Y036492D01*
+X015212Y036253D01*
+X014476Y035979D01*
+X013755Y035670D01*
+X013049Y035327D01*
+X012360Y034951D01*
+X011690Y034542D01*
+X011040Y034102D01*
+X010412Y033632D01*
+X009806Y033132D01*
+X009226Y032604D01*
+X008671Y032049D01*
+X008143Y031469D01*
+X007643Y030863D01*
+X007173Y030235D01*
+X006733Y029585D01*
+X006324Y028915D01*
+X005948Y028226D01*
+X005605Y027520D01*
+X005296Y026799D01*
+X005022Y026063D01*
+X004783Y025316D01*
+X004580Y024558D01*
+X004413Y023791D01*
+X004283Y023017D01*
+X004190Y022237D01*
+X004134Y021455D01*
+X004115Y020670D01*
+X009835Y020605D02*
+X009847Y020096D01*
+X009883Y019588D01*
+X009944Y019082D01*
+X010028Y018579D01*
+X010137Y018081D01*
+X010269Y017589D01*
+X010424Y017104D01*
+X010602Y016626D01*
+X010802Y016158D01*
+X011025Y015700D01*
+X011269Y015253D01*
+X011534Y014817D01*
+X011820Y014395D01*
+X012125Y013988D01*
+X012450Y013595D01*
+X012792Y013218D01*
+X013153Y012857D01*
+X013530Y012515D01*
+X013923Y012190D01*
+X014331Y011885D01*
+X014752Y011599D01*
+X015188Y011334D01*
+X015635Y011090D01*
+X016093Y010867D01*
+X016561Y010667D01*
+X017039Y010489D01*
+X017524Y010334D01*
+X018016Y010202D01*
+X018514Y010093D01*
+X019017Y010009D01*
+X019523Y009948D01*
+X020031Y009912D01*
+X020540Y009900D01*
+X020605Y002100D02*
+X021482Y002121D01*
+X022358Y002183D01*
+X023229Y002288D01*
+X024095Y002433D01*
+X024952Y002620D01*
+X025800Y002847D01*
+X026636Y003114D01*
+X027458Y003421D01*
+X028265Y003766D01*
+X029055Y004150D01*
+X029825Y004570D01*
+X030574Y005027D01*
+X031301Y005519D01*
+X032004Y006045D01*
+X032681Y006604D01*
+X033330Y007194D01*
+X033951Y007815D01*
+X034541Y008464D01*
+X035100Y009141D01*
+X035626Y009844D01*
+X036118Y010571D01*
+X036575Y011320D01*
+X036995Y012090D01*
+X037379Y012880D01*
+X037724Y013687D01*
+X038031Y014509D01*
+X038298Y015345D01*
+X038525Y016193D01*
+X038712Y017050D01*
+X038857Y017916D01*
+X038962Y018787D01*
+X039024Y019663D01*
+X039045Y020540D01*
+X029945Y020605D02*
+X029934Y021046D01*
+X029903Y021487D01*
+X029851Y021925D01*
+X029777Y022360D01*
+X029684Y022792D01*
+X029569Y023218D01*
+X029435Y023639D01*
+X029281Y024052D01*
+X029107Y024458D01*
+X028914Y024855D01*
+X028702Y025242D01*
+X028473Y025619D01*
+X028225Y025985D01*
+X027961Y026338D01*
+X027680Y026679D01*
+X027383Y027005D01*
+X027070Y027318D01*
+X026744Y027615D01*
+X026403Y027896D01*
+X026050Y028160D01*
+X025684Y028408D01*
+X025307Y028637D01*
+X024920Y028849D01*
+X024523Y029042D01*
+X024117Y029216D01*
+X023704Y029370D01*
+X023283Y029504D01*
+X022857Y029619D01*
+X022425Y029712D01*
+X021990Y029786D01*
+X021552Y029838D01*
+X021111Y029869D01*
+X020670Y029880D01*
+X020605Y036900D02*
+X019833Y036882D01*
+X019062Y036827D01*
+X018295Y036735D01*
+X017533Y036607D01*
+X016779Y036443D01*
+X016032Y036243D01*
+X015297Y036007D01*
+X014573Y035737D01*
+X013863Y035433D01*
+X013168Y035096D01*
+X012490Y034726D01*
+X011830Y034324D01*
+X011191Y033891D01*
+X010572Y033428D01*
+X009977Y032936D01*
+X009405Y032416D01*
+X008859Y031870D01*
+X008339Y031298D01*
+X007847Y030703D01*
+X007384Y030084D01*
+X006951Y029445D01*
+X006549Y028785D01*
+X006179Y028107D01*
+X005842Y027412D01*
+X005538Y026702D01*
+X005268Y025978D01*
+X005032Y025243D01*
+X004832Y024496D01*
+X004668Y023742D01*
+X004540Y022980D01*
+X004448Y022213D01*
+X004393Y021442D01*
+X004375Y020670D01*
+X013475Y020605D02*
+X013483Y020269D01*
+X013507Y019934D01*
+X013547Y019600D01*
+X013603Y019268D01*
+X013674Y018939D01*
+X013761Y018615D01*
+X013864Y018294D01*
+X013981Y017979D01*
+X014113Y017670D01*
+X014260Y017368D01*
+X014422Y017073D01*
+X014597Y016785D01*
+X014785Y016507D01*
+X014987Y016238D01*
+X015201Y015978D01*
+X015427Y015730D01*
+X015665Y015492D01*
+X015913Y015266D01*
+X016173Y015052D01*
+X016442Y014850D01*
+X016720Y014662D01*
+X017008Y014486D01*
+X017303Y014325D01*
+X017605Y014178D01*
+X017914Y014046D01*
+X018229Y013929D01*
+X018550Y013826D01*
+X018874Y013739D01*
+X019203Y013668D01*
+X019535Y013612D01*
+X019869Y013572D01*
+X020204Y013548D01*
+X020540Y013540D01*
+X020605Y003400D02*
+X021421Y003419D01*
+X022234Y003478D01*
+X023044Y003574D01*
+X023849Y003710D01*
+X024646Y003883D01*
+X025434Y004094D01*
+X026211Y004343D01*
+X026975Y004628D01*
+X027725Y004949D01*
+X028459Y005305D01*
+X029175Y005696D01*
+X029872Y006121D01*
+X030547Y006578D01*
+X031200Y007067D01*
+X031829Y007586D01*
+X032433Y008135D01*
+X033010Y008712D01*
+X033559Y009316D01*
+X034078Y009945D01*
+X034567Y010598D01*
+X035024Y011273D01*
+X035449Y011970D01*
+X035840Y012686D01*
+X036196Y013420D01*
+X036517Y014170D01*
+X036802Y014934D01*
+X037051Y015711D01*
+X037262Y016499D01*
+X037435Y017296D01*
+X037571Y018101D01*
+X037667Y018911D01*
+X037726Y019724D01*
+X037745Y020540D01*
+X038525Y020605D02*
+X038505Y021455D01*
+X038444Y022302D01*
+X038343Y023146D01*
+X038202Y023984D01*
+X038022Y024814D01*
+X037802Y025635D01*
+X037543Y026445D01*
+X037246Y027241D01*
+X036911Y028022D01*
+X036540Y028787D01*
+X036133Y029532D01*
+X035691Y030258D01*
+X035214Y030962D01*
+X034705Y031642D01*
+X034164Y032298D01*
+X033592Y032926D01*
+X032991Y033527D01*
+X032363Y034099D01*
+X031707Y034640D01*
+X031027Y035149D01*
+X030323Y035626D01*
+X029597Y036068D01*
+X028852Y036475D01*
+X028087Y036846D01*
+X027306Y037181D01*
+X026510Y037478D01*
+X025700Y037737D01*
+X024879Y037957D01*
+X024049Y038137D01*
+X023211Y038278D01*
+X022367Y038379D01*
+X021520Y038440D01*
+X020670Y038460D01*
+X020605Y035600D02*
+X019895Y035583D01*
+X019186Y035532D01*
+X018480Y035448D01*
+X017779Y035330D01*
+X017085Y035179D01*
+X016399Y034995D01*
+X015722Y034779D01*
+X015056Y034531D01*
+X014403Y034251D01*
+X013764Y033940D01*
+X013140Y033600D01*
+X012533Y033230D01*
+X011945Y032832D01*
+X011376Y032406D01*
+X010828Y031953D01*
+X010302Y031475D01*
+X009800Y030973D01*
+X009322Y030447D01*
+X008869Y029899D01*
+X008443Y029330D01*
+X008045Y028742D01*
+X007675Y028135D01*
+X007335Y027511D01*
+X007024Y026872D01*
+X006744Y026219D01*
+X006496Y025553D01*
+X006280Y024876D01*
+X006096Y024190D01*
+X005945Y023496D01*
+X005827Y022795D01*
+X005743Y022089D01*
+X005692Y021380D01*
+X005675Y020670D01*
+X003075Y020605D02*
+X003095Y019774D01*
+X003154Y018945D01*
+X003253Y018120D01*
+X003391Y017300D01*
+X003567Y016488D01*
+X003782Y015685D01*
+X004036Y014893D01*
+X004326Y014114D01*
+X004653Y013350D01*
+X005016Y012602D01*
+X005415Y011873D01*
+X005847Y011163D01*
+X006313Y010474D01*
+X006812Y009809D01*
+X007341Y009168D01*
+X007900Y008553D01*
+X008488Y007965D01*
+X009103Y007406D01*
+X009744Y006877D01*
+X010409Y006378D01*
+X011098Y005912D01*
+X011808Y005480D01*
+X012537Y005081D01*
+X013285Y004718D01*
+X014049Y004391D01*
+X014828Y004101D01*
+X015620Y003847D01*
+X016423Y003632D01*
+X017235Y003456D01*
+X018055Y003318D01*
+X018880Y003219D01*
+X019709Y003160D01*
+X020540Y003140D01*
+X020605Y005480D02*
+X021322Y005497D01*
+X022037Y005548D01*
+X022748Y005633D01*
+X023455Y005752D01*
+X024156Y005905D01*
+X024848Y006090D01*
+X025531Y006308D01*
+X026202Y006559D01*
+X026861Y006841D01*
+X027506Y007154D01*
+X028135Y007498D01*
+X028747Y007871D01*
+X029341Y008272D01*
+X029914Y008702D01*
+X030467Y009158D01*
+X030998Y009641D01*
+X031504Y010147D01*
+X031987Y010678D01*
+X032443Y011231D01*
+X032873Y011804D01*
+X033274Y012398D01*
+X033647Y013010D01*
+X033991Y013639D01*
+X034304Y014284D01*
+X034586Y014943D01*
+X034837Y015614D01*
+X035055Y016297D01*
+X035240Y016989D01*
+X035393Y017690D01*
+X035512Y018397D01*
+X035597Y019108D01*
+X035648Y019823D01*
+X035665Y020540D01*
+X037225Y020605D02*
+X037206Y021393D01*
+X037150Y022179D01*
+X037057Y022961D01*
+X036926Y023738D01*
+X036758Y024508D01*
+X036554Y025269D01*
+X036315Y026020D01*
+X036039Y026758D01*
+X035729Y027482D01*
+X035385Y028191D01*
+X035007Y028882D01*
+X034597Y029555D01*
+X034155Y030208D01*
+X033683Y030839D01*
+X033181Y031446D01*
+X032651Y032029D01*
+X032094Y032586D01*
+X031511Y033116D01*
+X030904Y033618D01*
+X030273Y034090D01*
+X029620Y034532D01*
+X028947Y034942D01*
+X028256Y035320D01*
+X027547Y035664D01*
+X026823Y035974D01*
+X026085Y036250D01*
+X025334Y036489D01*
+X024573Y036693D01*
+X023803Y036861D01*
+X023026Y036992D01*
+X022244Y037085D01*
+X021458Y037141D01*
+X020670Y037160D01*
+X020605Y034300D02*
+X019936Y034284D01*
+X019269Y034234D01*
+X018605Y034152D01*
+X017946Y034038D01*
+X017293Y033892D01*
+X016648Y033713D01*
+X016013Y033503D01*
+X015389Y033262D01*
+X014777Y032991D01*
+X014180Y032691D01*
+X013598Y032361D01*
+X013033Y032003D01*
+X012486Y031618D01*
+X011958Y031206D01*
+X011452Y030769D01*
+X010967Y030308D01*
+X010506Y029823D01*
+X010069Y029317D01*
+X009657Y028789D01*
+X009272Y028242D01*
+X008914Y027677D01*
+X008584Y027095D01*
+X008284Y026498D01*
+X008013Y025886D01*
+X007772Y025262D01*
+X007562Y024627D01*
+X007383Y023982D01*
+X007237Y023329D01*
+X007123Y022670D01*
+X007041Y022006D01*
+X006991Y021339D01*
+X006975Y020670D01*
+X005415Y020605D02*
+X005432Y019885D01*
+X005483Y019167D01*
+X005569Y018453D01*
+X005688Y017743D01*
+X005841Y017039D01*
+X006028Y016344D01*
+X006247Y015658D01*
+X006498Y014984D01*
+X006782Y014322D01*
+X007096Y013674D01*
+X007441Y013043D01*
+X007816Y012428D01*
+X008220Y011832D01*
+X008651Y011255D01*
+X009109Y010700D01*
+X009594Y010168D01*
+X010103Y009659D01*
+X010635Y009174D01*
+X011190Y008716D01*
+X011767Y008285D01*
+X012363Y007881D01*
+X012978Y007506D01*
+X013609Y007161D01*
+X014257Y006847D01*
+X014919Y006563D01*
+X015593Y006312D01*
+X016279Y006093D01*
+X016974Y005906D01*
+X017678Y005753D01*
+X018388Y005634D01*
+X019102Y005548D01*
+X019820Y005497D01*
+X020540Y005480D01*
+X020605Y010420D02*
+X021086Y010431D01*
+X021567Y010466D01*
+X022045Y010523D01*
+X022520Y010603D01*
+X022991Y010705D01*
+X023456Y010830D01*
+X023915Y010977D01*
+X024366Y011145D01*
+X024809Y011335D01*
+X025242Y011545D01*
+X025665Y011776D01*
+X026076Y012027D01*
+X026475Y012296D01*
+X026861Y012585D01*
+X027232Y012892D01*
+X027589Y013216D01*
+X027929Y013556D01*
+X028253Y013913D01*
+X028560Y014284D01*
+X028849Y014670D01*
+X029118Y015069D01*
+X029369Y015480D01*
+X029600Y015903D01*
+X029810Y016336D01*
+X030000Y016779D01*
+X030168Y017230D01*
+X030315Y017689D01*
+X030440Y018154D01*
+X030542Y018625D01*
+X030622Y019100D01*
+X030679Y019578D01*
+X030714Y020059D01*
+X030725Y020540D01*
+X035665Y020605D02*
+X035648Y021318D01*
+X035597Y022030D01*
+X035512Y022739D01*
+X035394Y023443D01*
+X035242Y024140D01*
+X035058Y024830D01*
+X034840Y025509D01*
+X034591Y026178D01*
+X034310Y026834D01*
+X033998Y027476D01*
+X033656Y028103D01*
+X033285Y028712D01*
+X032885Y029303D01*
+X032457Y029874D01*
+X032002Y030425D01*
+X031522Y030953D01*
+X031018Y031457D01*
+X030490Y031937D01*
+X029939Y032392D01*
+X029368Y032820D01*
+X028777Y033220D01*
+X028167Y033591D01*
+X027541Y033933D01*
+X026899Y034245D01*
+X026243Y034526D01*
+X025574Y034775D01*
+X024895Y034993D01*
+X024205Y035177D01*
+X023508Y035329D01*
+X022804Y035447D01*
+X022095Y035532D01*
+X021383Y035583D01*
+X020670Y035600D01*
+X020605Y035080D02*
+X019919Y035064D01*
+X019235Y035015D01*
+X018554Y034933D01*
+X017878Y034820D01*
+X017208Y034674D01*
+X016545Y034496D01*
+X015892Y034287D01*
+X015249Y034048D01*
+X014619Y033778D01*
+X014002Y033478D01*
+X013400Y033149D01*
+X012814Y032792D01*
+X012246Y032408D01*
+X011697Y031997D01*
+X011168Y031560D01*
+X010661Y031099D01*
+X010176Y030614D01*
+X009715Y030107D01*
+X009278Y029578D01*
+X008867Y029029D01*
+X008483Y028461D01*
+X008126Y027875D01*
+X007797Y027273D01*
+X007497Y026656D01*
+X007227Y026026D01*
+X006988Y025383D01*
+X006779Y024730D01*
+X006601Y024067D01*
+X006455Y023397D01*
+X006342Y022721D01*
+X006260Y022040D01*
+X006211Y021356D01*
+X006195Y020670D01*
+X013215Y020605D02*
+X013223Y020257D01*
+X013248Y019909D01*
+X013290Y019563D01*
+X013347Y019219D01*
+X013421Y018878D01*
+X013512Y018541D01*
+X013618Y018209D01*
+X013740Y017883D01*
+X013877Y017562D01*
+X014029Y017249D01*
+X014196Y016943D01*
+X014378Y016645D01*
+X014573Y016356D01*
+X014782Y016077D01*
+X015004Y015808D01*
+X015239Y015550D01*
+X015485Y015304D01*
+X015743Y015069D01*
+X016012Y014847D01*
+X016291Y014638D01*
+X016580Y014443D01*
+X016878Y014261D01*
+X017184Y014094D01*
+X017497Y013942D01*
+X017818Y013805D01*
+X018144Y013683D01*
+X018476Y013577D01*
+X018813Y013486D01*
+X019154Y013412D01*
+X019498Y013355D01*
+X019844Y013313D01*
+X020192Y013288D01*
+X020540Y013280D01*
+X020605Y010940D02*
+X021062Y010951D01*
+X021518Y010983D01*
+X021971Y011038D01*
+X022422Y011113D01*
+X022868Y011211D01*
+X023310Y011329D01*
+X023745Y011468D01*
+X024173Y011628D01*
+X024593Y011808D01*
+X025004Y012007D01*
+X025405Y012226D01*
+X025795Y012464D01*
+X026174Y012720D01*
+X026539Y012994D01*
+X026892Y013285D01*
+X027230Y013592D01*
+X027553Y013915D01*
+X027860Y014253D01*
+X028151Y014606D01*
+X028425Y014971D01*
+X028681Y015350D01*
+X028919Y015740D01*
+X029138Y016141D01*
+X029337Y016552D01*
+X029517Y016972D01*
+X029677Y017400D01*
+X029816Y017835D01*
+X029934Y018277D01*
+X030032Y018723D01*
+X030107Y019174D01*
+X030162Y019627D01*
+X030194Y020083D01*
+X030205Y020540D01*
+X033325Y020605D02*
+X033311Y021207D01*
+X033268Y021808D01*
+X033196Y022406D01*
+X033096Y023000D01*
+X032968Y023588D01*
+X032812Y024170D01*
+X032629Y024744D01*
+X032419Y025308D01*
+X032181Y025862D01*
+X031918Y026404D01*
+X031630Y026932D01*
+X031316Y027447D01*
+X030978Y027946D01*
+X030618Y028428D01*
+X030234Y028892D01*
+X029829Y029338D01*
+X029403Y029764D01*
+X028957Y030169D01*
+X028493Y030553D01*
+X028011Y030913D01*
+X027512Y031251D01*
+X026997Y031565D01*
+X026469Y031853D01*
+X025927Y032116D01*
+X025373Y032354D01*
+X024809Y032564D01*
+X024235Y032747D01*
+X023653Y032903D01*
+X023065Y033031D01*
+X022471Y033131D01*
+X021873Y033203D01*
+X021272Y033246D01*
+X020670Y033260D01*
+X020605Y035340D02*
+X019907Y035323D01*
+X019211Y035274D01*
+X018517Y035191D01*
+X017829Y035075D01*
+X017146Y034926D01*
+X016472Y034746D01*
+X015807Y034533D01*
+X015153Y034289D01*
+X014511Y034014D01*
+X013883Y033709D01*
+X013270Y033375D01*
+X012674Y033011D01*
+X012096Y032620D01*
+X011537Y032201D01*
+X010998Y031757D01*
+X010482Y031287D01*
+X009988Y030793D01*
+X009518Y030277D01*
+X009074Y029738D01*
+X008655Y029179D01*
+X008264Y028601D01*
+X007900Y028005D01*
+X007566Y027392D01*
+X007261Y026764D01*
+X006986Y026122D01*
+X006742Y025468D01*
+X006529Y024803D01*
+X006349Y024129D01*
+X006200Y023446D01*
+X006084Y022758D01*
+X006001Y022064D01*
+X005952Y021368D01*
+X005935Y020670D01*
+X003335Y020605D02*
+X003354Y019786D01*
+X003413Y018970D01*
+X003510Y018157D01*
+X003646Y017349D01*
+X003820Y016549D01*
+X004032Y015758D01*
+X004281Y014978D01*
+X004567Y014211D01*
+X004890Y013458D01*
+X005248Y012721D01*
+X005640Y012003D01*
+X006066Y011303D01*
+X006525Y010625D01*
+X007016Y009970D01*
+X007537Y009338D01*
+X008088Y008732D01*
+X008667Y008153D01*
+X009273Y007602D01*
+X009905Y007081D01*
+X010560Y006590D01*
+X011238Y006131D01*
+X011938Y005705D01*
+X012656Y005313D01*
+X013393Y004955D01*
+X014146Y004632D01*
+X014913Y004346D01*
+X015693Y004097D01*
+X016484Y003885D01*
+X017284Y003711D01*
+X018092Y003575D01*
+X018905Y003478D01*
+X019721Y003419D01*
+X020540Y003400D01*
+X020605Y011720D02*
+X021025Y011730D01*
+X021443Y011760D01*
+X021860Y011810D01*
+X022274Y011879D01*
+X022684Y011969D01*
+X023090Y012077D01*
+X023490Y012205D01*
+X023883Y012352D01*
+X024269Y012517D01*
+X024647Y012700D01*
+X025015Y012902D01*
+X025373Y013120D01*
+X025721Y013355D01*
+X026057Y013607D01*
+X026381Y013874D01*
+X026692Y014157D01*
+X026988Y014454D01*
+X027271Y014764D01*
+X027538Y015088D01*
+X027790Y015424D01*
+X028025Y015772D01*
+X028243Y016130D01*
+X028445Y016498D01*
+X028628Y016876D01*
+X028793Y017262D01*
+X028940Y017655D01*
+X029068Y018055D01*
+X029176Y018461D01*
+X029266Y018871D01*
+X029335Y019285D01*
+X029385Y019702D01*
+X029415Y020120D01*
+X029425Y020540D01*
+X030205Y020605D02*
+X030194Y021059D01*
+X030162Y021511D01*
+X030108Y021962D01*
+X030033Y022409D01*
+X029936Y022853D01*
+X029819Y023291D01*
+X029681Y023724D01*
+X029522Y024149D01*
+X029343Y024566D01*
+X029145Y024974D01*
+X028928Y025372D01*
+X028691Y025760D01*
+X028437Y026136D01*
+X028165Y026499D01*
+X027876Y026849D01*
+X027571Y027185D01*
+X027250Y027506D01*
+X026914Y027811D01*
+X026564Y028100D01*
+X026201Y028372D01*
+X025825Y028626D01*
+X025437Y028863D01*
+X025039Y029080D01*
+X024631Y029278D01*
+X024214Y029457D01*
+X023789Y029616D01*
+X023356Y029754D01*
+X022918Y029871D01*
+X022474Y029968D01*
+X022027Y030043D01*
+X021576Y030097D01*
+X021124Y030129D01*
+X020670Y030140D01*
+X020605Y034040D02*
+X019969Y034025D01*
+X019334Y033979D01*
+X018702Y033904D01*
+X018075Y033798D01*
+X017453Y033663D01*
+X016838Y033498D01*
+X016232Y033305D01*
+X015636Y033082D01*
+X015051Y032832D01*
+X014479Y032554D01*
+X013920Y032249D01*
+X013377Y031918D01*
+X012850Y031561D01*
+X012340Y031180D01*
+X011850Y030774D01*
+X011379Y030346D01*
+X010929Y029896D01*
+X010501Y029425D01*
+X010095Y028935D01*
+X009714Y028425D01*
+X009357Y027898D01*
+X009026Y027355D01*
+X008721Y026796D01*
+X008443Y026224D01*
+X008193Y025639D01*
+X007970Y025043D01*
+X007777Y024437D01*
+X007612Y023822D01*
+X007477Y023200D01*
+X007371Y022573D01*
+X007296Y021941D01*
+X007250Y021306D01*
+X007235Y020670D01*
+X004375Y020605D02*
+X004393Y019836D01*
+X004448Y019069D01*
+X004540Y018305D01*
+X004667Y017546D01*
+X004831Y016794D01*
+X005030Y016051D01*
+X005264Y015318D01*
+X005533Y014597D01*
+X005836Y013890D01*
+X006172Y013198D01*
+X006541Y012523D01*
+X006941Y011866D01*
+X007372Y011228D01*
+X007833Y010612D01*
+X008323Y010019D01*
+X008841Y009450D01*
+X009385Y008906D01*
+X009954Y008388D01*
+X010547Y007898D01*
+X011163Y007437D01*
+X011801Y007006D01*
+X012458Y006606D01*
+X013133Y006237D01*
+X013825Y005901D01*
+X014532Y005598D01*
+X015253Y005329D01*
+X015986Y005095D01*
+X016729Y004896D01*
+X017481Y004732D01*
+X018240Y004605D01*
+X019004Y004513D01*
+X019771Y004458D01*
+X020540Y004440D01*
+X020605Y012240D02*
+X021000Y012249D01*
+X021394Y012278D01*
+X021786Y012324D01*
+X022176Y012390D01*
+X022562Y012474D01*
+X022943Y012576D01*
+X023320Y012696D01*
+X023690Y012835D01*
+X024053Y012990D01*
+X024408Y013163D01*
+X024755Y013352D01*
+X025092Y013558D01*
+X025419Y013779D01*
+X025736Y014016D01*
+X026040Y014267D01*
+X026333Y014533D01*
+X026612Y014812D01*
+X026878Y015105D01*
+X027129Y015409D01*
+X027366Y015726D01*
+X027587Y016053D01*
+X027793Y016390D01*
+X027982Y016737D01*
+X028155Y017092D01*
+X028310Y017455D01*
+X028449Y017825D01*
+X028569Y018202D01*
+X028671Y018583D01*
+X028755Y018969D01*
+X028821Y019359D01*
+X028867Y019751D01*
+X028896Y020145D01*
+X028905Y020540D01*
+X029165Y020605D02*
+X029155Y021009D01*
+X029127Y021412D01*
+X029079Y021814D01*
+X029011Y022213D01*
+X028926Y022608D01*
+X028821Y022998D01*
+X028698Y023383D01*
+X028556Y023762D01*
+X028397Y024134D01*
+X028221Y024498D01*
+X028027Y024852D01*
+X027816Y025198D01*
+X027590Y025533D01*
+X027348Y025856D01*
+X027090Y026168D01*
+X026818Y026467D01*
+X026532Y026753D01*
+X026233Y027025D01*
+X025921Y027283D01*
+X025598Y027525D01*
+X025263Y027751D01*
+X024917Y027962D01*
+X024563Y028156D01*
+X024199Y028332D01*
+X023827Y028492D01*
+X023448Y028633D01*
+X023063Y028756D01*
+X022673Y028861D01*
+X022278Y028946D01*
+X021879Y029014D01*
+X021477Y029062D01*
+X021074Y029090D01*
+X020670Y029100D01*
+X020605Y031960D02*
+X020068Y031947D01*
+X019532Y031909D01*
+X018998Y031845D01*
+X018468Y031756D01*
+X017943Y031642D01*
+X017424Y031503D01*
+X016912Y031339D01*
+X016409Y031151D01*
+X015915Y030940D01*
+X015432Y030705D01*
+X014960Y030447D01*
+X014501Y030168D01*
+X014056Y029867D01*
+X013626Y029545D01*
+X013212Y029202D01*
+X012814Y028841D01*
+X012434Y028461D01*
+X012073Y028063D01*
+X011730Y027649D01*
+X011408Y027219D01*
+X011107Y026774D01*
+X010828Y026315D01*
+X010570Y025843D01*
+X010335Y025360D01*
+X010124Y024866D01*
+X009936Y024363D01*
+X009772Y023851D01*
+X009633Y023332D01*
+X009519Y022807D01*
+X009430Y022277D01*
+X009366Y021743D01*
+X009328Y021207D01*
+X009315Y020670D01*
+X006975Y020605D02*
+X006990Y019960D01*
+X007036Y019316D01*
+X007113Y018675D01*
+X007220Y018038D01*
+X007357Y017407D01*
+X007524Y016783D01*
+X007721Y016168D01*
+X007947Y015563D01*
+X008201Y014970D01*
+X008483Y014389D01*
+X008792Y013823D01*
+X009128Y013271D01*
+X009490Y012737D01*
+X009877Y012220D01*
+X010288Y011722D01*
+X010723Y011244D01*
+X011179Y010788D01*
+X011657Y010353D01*
+X012155Y009942D01*
+X012672Y009555D01*
+X013206Y009193D01*
+X013758Y008857D01*
+X014324Y008548D01*
+X014905Y008266D01*
+X015498Y008012D01*
+X016103Y007786D01*
+X016718Y007589D01*
+X017342Y007422D01*
+X017973Y007285D01*
+X018610Y007178D01*
+X019251Y007101D01*
+X019895Y007055D01*
+X020540Y007040D01*
+X020605Y013020D02*
+X020963Y013029D01*
+X021320Y013054D01*
+X021675Y013097D01*
+X022028Y013156D01*
+X022378Y013232D01*
+X022724Y013325D01*
+X023065Y013434D01*
+X023400Y013559D01*
+X023729Y013700D01*
+X024051Y013856D01*
+X024365Y014027D01*
+X024671Y014214D01*
+X024967Y014414D01*
+X025254Y014629D01*
+X025530Y014857D01*
+X025794Y015098D01*
+X026047Y015351D01*
+X026288Y015615D01*
+X026516Y015891D01*
+X026731Y016178D01*
+X026931Y016474D01*
+X027118Y016780D01*
+X027289Y017094D01*
+X027445Y017416D01*
+X027586Y017745D01*
+X027711Y018080D01*
+X027820Y018421D01*
+X027913Y018767D01*
+X027989Y019117D01*
+X028048Y019470D01*
+X028091Y019825D01*
+X028116Y020182D01*
+X028125Y020540D01*
+X028645Y020605D02*
+X028636Y020984D01*
+X028609Y021363D01*
+X028564Y021740D01*
+X028501Y022114D01*
+X028420Y022485D01*
+X028322Y022852D01*
+X028206Y023213D01*
+X028074Y023569D01*
+X027924Y023918D01*
+X027758Y024259D01*
+X027577Y024592D01*
+X027379Y024917D01*
+X027166Y025231D01*
+X026939Y025535D01*
+X026697Y025828D01*
+X026442Y026108D01*
+X026173Y026377D01*
+X025893Y026632D01*
+X025600Y026874D01*
+X025296Y027101D01*
+X024982Y027314D01*
+X024657Y027512D01*
+X024324Y027693D01*
+X023983Y027859D01*
+X023634Y028009D01*
+X023278Y028141D01*
+X022917Y028257D01*
+X022550Y028355D01*
+X022179Y028436D01*
+X021805Y028499D01*
+X021428Y028544D01*
+X021049Y028571D01*
+X020670Y028580D01*
+X020605Y038200D02*
+X019745Y038179D01*
+X018887Y038116D01*
+X018033Y038010D01*
+X017185Y037863D01*
+X016346Y037675D01*
+X015516Y037445D01*
+X014699Y037175D01*
+X013897Y036866D01*
+X013110Y036517D01*
+X012341Y036130D01*
+X011593Y035706D01*
+X010866Y035246D01*
+X010162Y034750D01*
+X009484Y034221D01*
+X008833Y033659D01*
+X008209Y033066D01*
+X007616Y032442D01*
+X007054Y031791D01*
+X006525Y031113D01*
+X006029Y030409D01*
+X005569Y029682D01*
+X005145Y028934D01*
+X004758Y028165D01*
+X004409Y027378D01*
+X004100Y026576D01*
+X003830Y025759D01*
+X003600Y024929D01*
+X003412Y024090D01*
+X003265Y023242D01*
+X003159Y022388D01*
+X003096Y021530D01*
+X003075Y020670D01*
+X008015Y020605D02*
+X008029Y020009D01*
+X008072Y019415D01*
+X008142Y018823D01*
+X008241Y018235D01*
+X008368Y017652D01*
+X008522Y017076D01*
+X008704Y016509D01*
+X008912Y015950D01*
+X009147Y015402D01*
+X009407Y014866D01*
+X009693Y014343D01*
+X010003Y013834D01*
+X010337Y013340D01*
+X010695Y012863D01*
+X011074Y012403D01*
+X011475Y011962D01*
+X011897Y011540D01*
+X012338Y011139D01*
+X012798Y010760D01*
+X013275Y010402D01*
+X013769Y010068D01*
+X014278Y009758D01*
+X014801Y009472D01*
+X015337Y009212D01*
+X015885Y008977D01*
+X016444Y008769D01*
+X017011Y008587D01*
+X017587Y008433D01*
+X018170Y008306D01*
+X018758Y008207D01*
+X019350Y008137D01*
+X019944Y008094D01*
+X020540Y008080D01*
+X020605Y002360D02*
+X021470Y002381D01*
+X022333Y002442D01*
+X023192Y002545D01*
+X024046Y002689D01*
+X024891Y002872D01*
+X025727Y003096D01*
+X026551Y003360D01*
+X027362Y003662D01*
+X028157Y004003D01*
+X028936Y004381D01*
+X029695Y004796D01*
+X030434Y005246D01*
+X031150Y005731D01*
+X031843Y006250D01*
+X032510Y006800D01*
+X033151Y007383D01*
+X033762Y007994D01*
+X034345Y008635D01*
+X034895Y009302D01*
+X035414Y009995D01*
+X035899Y010711D01*
+X036349Y011450D01*
+X036764Y012209D01*
+X037142Y012988D01*
+X037483Y013783D01*
+X037785Y014594D01*
+X038049Y015418D01*
+X038273Y016254D01*
+X038456Y017099D01*
+X038600Y017953D01*
+X038703Y018812D01*
+X038764Y019675D01*
+X038785Y020540D01*
+X040345Y020605D02*
+X040323Y021541D01*
+X040256Y022475D01*
+X040145Y023405D01*
+X039989Y024328D01*
+X039790Y025244D01*
+X039548Y026148D01*
+X039263Y027040D01*
+X038936Y027917D01*
+X038567Y028778D01*
+X038158Y029621D01*
+X037709Y030442D01*
+X037222Y031242D01*
+X036697Y032018D01*
+X036136Y032767D01*
+X035539Y033489D01*
+X034909Y034182D01*
+X034247Y034844D01*
+X033554Y035474D01*
+X032832Y036071D01*
+X032083Y036632D01*
+X031307Y037157D01*
+X030507Y037644D01*
+X029686Y038093D01*
+X028843Y038502D01*
+X027982Y038871D01*
+X027105Y039198D01*
+X026213Y039483D01*
+X025309Y039725D01*
+X024393Y039924D01*
+X023470Y040080D01*
+X022540Y040191D01*
+X021606Y040258D01*
+X020670Y040280D01*
+X020605Y031180D02*
+X020105Y031168D01*
+X019606Y031132D01*
+X019109Y031073D01*
+X018616Y030990D01*
+X018127Y030884D01*
+X017644Y030754D01*
+X017168Y030602D01*
+X016699Y030427D01*
+X016239Y030230D01*
+X015789Y030012D01*
+X015350Y029772D01*
+X014923Y029512D01*
+X014509Y029231D01*
+X014108Y028931D01*
+X013722Y028613D01*
+X013352Y028276D01*
+X012999Y027923D01*
+X012662Y027553D01*
+X012344Y027167D01*
+X012044Y026766D01*
+X011763Y026352D01*
+X011503Y025925D01*
+X011263Y025486D01*
+X011045Y025036D01*
+X010848Y024576D01*
+X010673Y024107D01*
+X010521Y023631D01*
+X010391Y023148D01*
+X010285Y022659D01*
+X010202Y022166D01*
+X010143Y021669D01*
+X010107Y021170D01*
+X010095Y020670D01*
+X002035Y020605D02*
+X002056Y019725D01*
+X002119Y018846D01*
+X002223Y017972D01*
+X002369Y017103D01*
+X002557Y016242D01*
+X002785Y015392D01*
+X003053Y014553D01*
+X003361Y013727D01*
+X003707Y012918D01*
+X004092Y012126D01*
+X004514Y011353D01*
+X004973Y010600D01*
+X005466Y009871D01*
+X005994Y009166D01*
+X006555Y008487D01*
+X007147Y007835D01*
+X007770Y007212D01*
+X008422Y006620D01*
+X009101Y006059D01*
+X009806Y005531D01*
+X010535Y005038D01*
+X011288Y004579D01*
+X012061Y004157D01*
+X012853Y003772D01*
+X013662Y003426D01*
+X014488Y003118D01*
+X015327Y002850D01*
+X016177Y002622D01*
+X017038Y002434D01*
+X017907Y002288D01*
+X018781Y002184D01*
+X019660Y002121D01*
+X020540Y002100D01*
+X020605Y006000D02*
+X021297Y006016D01*
+X021987Y006066D01*
+X022674Y006148D01*
+X023357Y006263D01*
+X024033Y006410D01*
+X024701Y006589D01*
+X025361Y006800D01*
+X026009Y007042D01*
+X026645Y007314D01*
+X027268Y007616D01*
+X027875Y007948D01*
+X028466Y008308D01*
+X029039Y008696D01*
+X029593Y009111D01*
+X030127Y009551D01*
+X030639Y010017D01*
+X031128Y010506D01*
+X031594Y011018D01*
+X032034Y011552D01*
+X032449Y012106D01*
+X032837Y012679D01*
+X033197Y013270D01*
+X033529Y013877D01*
+X033831Y014500D01*
+X034103Y015136D01*
+X034345Y015784D01*
+X034556Y016444D01*
+X034735Y017112D01*
+X034882Y017788D01*
+X034997Y018471D01*
+X035079Y019158D01*
+X035129Y019848D01*
+X035145Y020540D01*
+X039305Y020605D02*
+X039284Y021492D01*
+X039221Y022376D01*
+X039115Y023257D01*
+X038968Y024132D01*
+X038780Y024998D01*
+X038550Y025855D01*
+X038280Y026700D01*
+X037970Y027531D01*
+X037621Y028346D01*
+X037233Y029144D01*
+X036808Y029922D01*
+X036347Y030680D01*
+X035850Y031414D01*
+X035318Y032124D01*
+X034753Y032808D01*
+X034157Y033465D01*
+X033530Y034092D01*
+X032873Y034688D01*
+X032189Y035253D01*
+X031479Y035785D01*
+X030745Y036282D01*
+X029987Y036743D01*
+X029209Y037168D01*
+X028411Y037556D01*
+X027596Y037905D01*
+X026765Y038215D01*
+X025920Y038485D01*
+X025063Y038715D01*
+X024197Y038903D01*
+X023322Y039050D01*
+X022441Y039156D01*
+X021557Y039219D01*
+X020670Y039240D01*
+X020605Y030920D02*
+X020117Y030908D01*
+X019631Y030874D01*
+X019146Y030816D01*
+X018665Y030735D01*
+X018188Y030631D01*
+X017717Y030505D01*
+X017253Y030356D01*
+X016795Y030186D01*
+X016347Y029994D01*
+X015908Y029781D01*
+X015480Y029547D01*
+X015063Y029293D01*
+X014659Y029019D01*
+X014269Y028727D01*
+X013893Y028416D01*
+X013532Y028088D01*
+X013187Y027743D01*
+X012859Y027382D01*
+X012548Y027006D01*
+X012256Y026616D01*
+X011982Y026212D01*
+X011728Y025795D01*
+X011494Y025367D01*
+X011281Y024928D01*
+X011089Y024480D01*
+X010919Y024022D01*
+X010770Y023558D01*
+X010644Y023087D01*
+X010540Y022610D01*
+X010459Y022129D01*
+X010401Y021644D01*
+X010367Y021158D01*
+X010355Y020670D01*
+X012175Y020605D02*
+X012184Y020207D01*
+X012213Y019810D01*
+X012260Y019415D01*
+X012326Y019022D01*
+X012411Y018633D01*
+X012514Y018248D01*
+X012635Y017869D01*
+X012774Y017496D01*
+X012931Y017130D01*
+X013105Y016772D01*
+X013296Y016423D01*
+X013503Y016083D01*
+X013726Y015753D01*
+X013965Y015434D01*
+X014218Y015127D01*
+X014486Y014833D01*
+X014767Y014551D01*
+X015062Y014283D01*
+X015369Y014030D01*
+X015688Y013791D01*
+X016018Y013568D01*
+X016358Y013361D01*
+X016707Y013170D01*
+X017065Y012996D01*
+X017431Y012839D01*
+X017804Y012700D01*
+X018183Y012579D01*
+X018568Y012476D01*
+X018957Y012391D01*
+X019350Y012325D01*
+X019745Y012278D01*
+X020142Y012249D01*
+X020540Y012240D01*
+X020605Y007040D02*
+X021247Y007055D01*
+X021888Y007101D01*
+X022526Y007177D01*
+X023160Y007284D01*
+X023788Y007421D01*
+X024408Y007587D01*
+X025020Y007782D01*
+X025622Y008007D01*
+X026213Y008260D01*
+X026791Y008541D01*
+X027355Y008849D01*
+X027904Y009183D01*
+X028436Y009543D01*
+X028950Y009928D01*
+X029446Y010337D01*
+X029921Y010770D01*
+X030375Y011224D01*
+X030808Y011699D01*
+X031217Y012195D01*
+X031602Y012709D01*
+X031962Y013241D01*
+X032296Y013790D01*
+X032604Y014354D01*
+X032885Y014932D01*
+X033138Y015523D01*
+X033363Y016125D01*
+X033558Y016737D01*
+X033724Y017357D01*
+X033861Y017985D01*
+X033968Y018619D01*
+X034044Y019257D01*
+X034090Y019898D01*
+X034105Y020540D01*
+X038785Y020605D02*
+X038764Y021467D01*
+X038703Y022327D01*
+X038601Y023183D01*
+X038458Y024033D01*
+X038274Y024876D01*
+X038051Y025709D01*
+X037789Y026530D01*
+X037487Y027338D01*
+X037148Y028130D01*
+X036771Y028906D01*
+X036358Y029662D01*
+X035909Y030399D01*
+X035426Y031113D01*
+X034909Y031803D01*
+X034360Y032468D01*
+X033780Y033106D01*
+X033171Y033715D01*
+X032533Y034295D01*
+X031868Y034844D01*
+X031178Y035361D01*
+X030464Y035844D01*
+X029727Y036293D01*
+X028971Y036706D01*
+X028195Y037083D01*
+X027403Y037422D01*
+X026595Y037724D01*
+X025774Y037986D01*
+X024941Y038209D01*
+X024098Y038393D01*
+X023248Y038536D01*
+X022392Y038638D01*
+X021532Y038699D01*
+X020670Y038720D01*
+X020605Y030400D02*
+X020142Y030389D01*
+X019680Y030356D01*
+X019220Y030301D01*
+X018764Y030224D01*
+X018311Y030126D01*
+X017864Y030006D01*
+X017423Y029865D01*
+X016989Y029703D01*
+X016563Y029521D01*
+X016146Y029318D01*
+X015740Y029096D01*
+X015345Y028855D01*
+X014961Y028596D01*
+X014590Y028318D01*
+X014233Y028023D01*
+X013891Y027712D01*
+X013563Y027384D01*
+X013252Y027042D01*
+X012957Y026685D01*
+X012679Y026314D01*
+X012420Y025930D01*
+X012179Y025535D01*
+X011957Y025129D01*
+X011754Y024712D01*
+X011572Y024286D01*
+X011410Y023852D01*
+X011269Y023411D01*
+X011149Y022964D01*
+X011051Y022511D01*
+X010974Y022055D01*
+X010919Y021595D01*
+X010886Y021133D01*
+X010875Y020670D01*
+X008795Y020605D02*
+X008808Y020046D01*
+X008848Y019489D01*
+X008915Y018934D01*
+X009007Y018382D01*
+X009126Y017836D01*
+X009271Y017296D01*
+X009441Y016764D01*
+X009636Y016240D01*
+X009856Y015726D01*
+X010101Y015223D01*
+X010369Y014733D01*
+X010659Y014255D01*
+X010973Y013792D01*
+X011308Y013345D01*
+X011664Y012914D01*
+X012040Y012500D01*
+X012435Y012105D01*
+X012849Y011729D01*
+X013280Y011373D01*
+X013727Y011038D01*
+X014190Y010724D01*
+X014668Y010434D01*
+X015158Y010166D01*
+X015661Y009921D01*
+X016175Y009701D01*
+X016699Y009506D01*
+X017231Y009336D01*
+X017771Y009191D01*
+X018317Y009072D01*
+X018869Y008980D01*
+X019424Y008913D01*
+X019981Y008873D01*
+X020540Y008860D01*
+X020605Y007560D02*
+X021223Y007575D01*
+X021839Y007619D01*
+X022452Y007692D01*
+X023061Y007795D01*
+X023665Y007926D01*
+X024262Y008086D01*
+X024850Y008274D01*
+X025429Y008490D01*
+X025997Y008733D01*
+X026553Y009003D01*
+X027095Y009299D01*
+X027622Y009621D01*
+X028134Y009967D01*
+X028629Y010337D01*
+X029105Y010730D01*
+X029562Y011146D01*
+X029999Y011583D01*
+X030415Y012040D01*
+X030808Y012516D01*
+X031178Y013011D01*
+X031524Y013522D01*
+X031846Y014050D01*
+X032142Y014592D01*
+X032412Y015148D01*
+X032655Y015716D01*
+X032871Y016295D01*
+X033059Y016883D01*
+X033219Y017480D01*
+X033350Y018084D01*
+X033453Y018693D01*
+X033526Y019306D01*
+X033570Y019922D01*
+X033585Y020540D01*
+X038265Y020605D02*
+X038245Y021442D01*
+X038185Y022277D01*
+X038086Y023109D01*
+X037947Y023935D01*
+X037769Y024753D01*
+X037552Y025562D01*
+X037297Y026360D01*
+X037005Y027144D01*
+X036675Y027914D01*
+X036309Y028667D01*
+X035908Y029402D01*
+X035472Y030118D01*
+X035002Y030811D01*
+X034501Y031482D01*
+X033967Y032127D01*
+X033404Y032747D01*
+X032812Y033339D01*
+X032192Y033902D01*
+X031547Y034436D01*
+X030876Y034937D01*
+X030183Y035407D01*
+X029467Y035843D01*
+X028732Y036244D01*
+X027979Y036610D01*
+X027209Y036940D01*
+X026425Y037232D01*
+X025627Y037487D01*
+X024818Y037704D01*
+X024000Y037882D01*
+X023174Y038021D01*
+X022342Y038120D01*
+X021507Y038180D01*
+X020670Y038200D01*
+X020605Y030140D02*
+X020154Y030129D01*
+X019705Y030097D01*
+X019257Y030044D01*
+X018813Y029969D01*
+X018372Y029873D01*
+X017937Y029756D01*
+X017508Y029619D01*
+X017085Y029462D01*
+X016671Y029284D01*
+X016266Y029087D01*
+X015870Y028871D01*
+X015485Y028637D01*
+X015112Y028384D01*
+X014751Y028114D01*
+X014403Y027827D01*
+X014070Y027524D01*
+X013751Y027205D01*
+X013448Y026872D01*
+X013161Y026524D01*
+X012891Y026163D01*
+X012638Y025790D01*
+X012404Y025405D01*
+X012188Y025009D01*
+X011991Y024604D01*
+X011813Y024190D01*
+X011656Y023767D01*
+X011519Y023338D01*
+X011402Y022903D01*
+X011306Y022462D01*
+X011231Y022018D01*
+X011178Y021570D01*
+X011146Y021121D01*
+X011135Y020670D01*
+X011915Y020605D02*
+X011925Y020195D01*
+X011954Y019785D01*
+X012003Y019378D01*
+X012071Y018973D01*
+X012158Y018572D01*
+X012264Y018175D01*
+X012389Y017784D01*
+X012533Y017399D01*
+X012694Y017022D01*
+X012874Y016653D01*
+X013071Y016293D01*
+X013284Y015942D01*
+X013514Y015602D01*
+X013760Y015273D01*
+X014022Y014957D01*
+X014298Y014653D01*
+X014588Y014363D01*
+X014892Y014087D01*
+X015208Y013825D01*
+X015537Y013579D01*
+X015877Y013349D01*
+X016228Y013136D01*
+X016588Y012939D01*
+X016957Y012759D01*
+X017334Y012598D01*
+X017719Y012454D01*
+X018110Y012329D01*
+X018507Y012223D01*
+X018908Y012136D01*
+X019313Y012068D01*
+X019720Y012019D01*
+X020130Y011990D01*
+X020540Y011980D01*
+X020605Y008080D02*
+X021198Y008094D01*
+X021789Y008136D01*
+X022378Y008207D01*
+X022963Y008305D01*
+X023543Y008431D01*
+X024115Y008585D01*
+X024680Y008765D01*
+X025236Y008973D01*
+X025781Y009206D01*
+X026315Y009465D01*
+X026835Y009749D01*
+X027341Y010058D01*
+X027833Y010390D01*
+X028307Y010746D01*
+X028765Y011123D01*
+X029203Y011522D01*
+X029623Y011942D01*
+X030022Y012380D01*
+X030399Y012838D01*
+X030755Y013313D01*
+X031087Y013804D01*
+X031396Y014310D01*
+X031680Y014831D01*
+X031939Y015364D01*
+X032172Y015909D01*
+X032380Y016465D01*
+X032560Y017030D01*
+X032714Y017602D01*
+X032840Y018182D01*
+X032938Y018767D01*
+X033009Y019356D01*
+X033051Y019947D01*
+X033065Y020540D01*
+X038005Y020605D02*
+X037985Y021430D01*
+X037927Y022253D01*
+X037829Y023072D01*
+X037692Y023886D01*
+X037516Y024692D01*
+X037303Y025489D01*
+X037052Y026275D01*
+X036763Y027048D01*
+X036438Y027806D01*
+X036078Y028548D01*
+X035683Y029273D01*
+X035253Y029977D01*
+X034791Y030660D01*
+X034296Y031321D01*
+X033771Y031957D01*
+X033216Y032568D01*
+X032633Y033151D01*
+X032022Y033706D01*
+X031386Y034231D01*
+X030725Y034726D01*
+X030042Y035188D01*
+X029337Y035618D01*
+X028613Y036013D01*
+X027871Y036373D01*
+X027113Y036698D01*
+X026340Y036987D01*
+X025554Y037238D01*
+X024757Y037451D01*
+X023951Y037627D01*
+X023137Y037764D01*
+X022318Y037862D01*
+X021495Y037920D01*
+X020670Y037940D01*
+X020605Y029880D02*
+X020167Y029870D01*
+X019730Y029838D01*
+X019294Y029786D01*
+X018862Y029714D01*
+X018434Y029620D01*
+X018010Y029507D01*
+X017593Y029373D01*
+X017182Y029220D01*
+X016779Y029048D01*
+X016385Y028856D01*
+X016000Y028646D01*
+X015626Y028418D01*
+X015263Y028172D01*
+X014912Y027910D01*
+X014574Y027630D01*
+X014249Y027336D01*
+X013939Y027026D01*
+X013645Y026701D01*
+X013365Y026363D01*
+X013103Y026012D01*
+X012857Y025649D01*
+X012629Y025275D01*
+X012419Y024890D01*
+X012227Y024496D01*
+X012055Y024093D01*
+X011902Y023682D01*
+X011768Y023265D01*
+X011655Y022841D01*
+X011561Y022413D01*
+X011489Y021981D01*
+X011437Y021545D01*
+X011405Y021108D01*
+X011395Y020670D01*
+X000995Y020605D02*
+X001017Y019675D01*
+X001083Y018747D01*
+X001194Y017824D01*
+X001348Y016906D01*
+X001546Y015997D01*
+X001787Y015099D01*
+X002070Y014212D01*
+X002395Y013341D01*
+X002761Y012486D01*
+X003168Y011649D01*
+X003614Y010833D01*
+X004098Y010038D01*
+X004619Y009268D01*
+X005177Y008523D01*
+X005769Y007806D01*
+X006395Y007117D01*
+X007052Y006460D01*
+X007741Y005834D01*
+X008458Y005242D01*
+X009203Y004684D01*
+X009973Y004163D01*
+X010768Y003679D01*
+X011584Y003233D01*
+X012421Y002826D01*
+X013276Y002460D01*
+X014147Y002135D01*
+X015034Y001852D01*
+X015932Y001611D01*
+X016841Y001413D01*
+X017759Y001259D01*
+X018682Y001148D01*
+X019610Y001082D01*
+X020540Y001060D01*
+X020605Y009120D02*
+X021148Y009133D01*
+X021691Y009172D01*
+X022230Y009236D01*
+X022766Y009326D01*
+X023297Y009442D01*
+X023822Y009583D01*
+X024340Y009748D01*
+X024849Y009938D01*
+X025349Y010152D01*
+X025838Y010389D01*
+X026315Y010650D01*
+X026779Y010933D01*
+X027229Y011238D01*
+X027664Y011563D01*
+X028084Y011909D01*
+X028486Y012275D01*
+X028870Y012659D01*
+X029236Y013061D01*
+X029582Y013481D01*
+X029907Y013916D01*
+X030212Y014366D01*
+X030495Y014830D01*
+X030756Y015307D01*
+X030993Y015796D01*
+X031207Y016296D01*
+X031397Y016805D01*
+X031562Y017323D01*
+X031703Y017848D01*
+X031819Y018379D01*
+X031909Y018915D01*
+X031973Y019454D01*
+X032012Y019997D01*
+X032025Y020540D01*
+X034885Y020605D02*
+X034869Y021281D01*
+X034821Y021956D01*
+X034740Y022628D01*
+X034628Y023295D01*
+X034484Y023956D01*
+X034309Y024610D01*
+X034103Y025254D01*
+X033867Y025888D01*
+X033600Y026510D01*
+X033305Y027119D01*
+X032981Y027712D01*
+X032628Y028290D01*
+X032249Y028851D01*
+X031844Y029392D01*
+X031413Y029914D01*
+X030958Y030414D01*
+X030479Y030893D01*
+X029979Y031348D01*
+X029457Y031779D01*
+X028916Y032184D01*
+X028355Y032563D01*
+X027777Y032916D01*
+X027184Y033240D01*
+X026575Y033535D01*
+X025953Y033802D01*
+X025319Y034038D01*
+X024675Y034244D01*
+X024021Y034419D01*
+X023360Y034563D01*
+X022693Y034675D01*
+X022021Y034756D01*
+X021346Y034804D01*
+X020670Y034820D01*
+X020605Y029100D02*
+X020191Y029090D01*
+X019779Y029059D01*
+X019368Y029009D01*
+X018960Y028938D01*
+X018557Y028847D01*
+X018158Y028737D01*
+X017765Y028607D01*
+X017379Y028458D01*
+X017001Y028291D01*
+X016631Y028105D01*
+X016271Y027901D01*
+X015922Y027679D01*
+X015583Y027441D01*
+X015257Y027186D01*
+X014944Y026916D01*
+X014644Y026631D01*
+X014359Y026331D01*
+X014089Y026018D01*
+X013834Y025692D01*
+X013596Y025353D01*
+X013374Y025004D01*
+X013170Y024644D01*
+X012984Y024274D01*
+X012817Y023896D01*
+X012668Y023510D01*
+X012538Y023117D01*
+X012428Y022718D01*
+X012337Y022315D01*
+X012266Y021907D01*
+X012216Y021496D01*
+X012185Y021084D01*
+X012175Y020670D01*
+X002555Y020605D02*
+X002575Y019749D01*
+X002636Y018895D01*
+X002738Y018046D01*
+X002880Y017201D01*
+X003062Y016365D01*
+X003284Y015538D01*
+X003544Y014723D01*
+X003843Y013921D01*
+X004180Y013134D01*
+X004554Y012364D01*
+X004965Y011613D01*
+X005410Y010882D01*
+X005890Y010173D01*
+X006403Y009487D01*
+X006948Y008827D01*
+X007524Y008194D01*
+X008129Y007589D01*
+X008762Y007013D01*
+X009422Y006468D01*
+X010108Y005955D01*
+X010817Y005475D01*
+X011548Y005030D01*
+X012299Y004619D01*
+X013069Y004245D01*
+X013856Y003908D01*
+X014658Y003609D01*
+X015473Y003349D01*
+X016300Y003127D01*
+X017136Y002945D01*
+X017981Y002803D01*
+X018830Y002701D01*
+X019684Y002640D01*
+X020540Y002620D01*
+X020605Y009380D02*
+X021136Y009393D01*
+X021666Y009431D01*
+X022193Y009494D01*
+X022717Y009582D01*
+X023236Y009695D01*
+X023749Y009832D01*
+X024255Y009994D01*
+X024753Y010179D01*
+X025241Y010388D01*
+X025719Y010621D01*
+X026185Y010875D01*
+X026639Y011152D01*
+X027078Y011449D01*
+X027504Y011768D01*
+X027913Y012106D01*
+X028306Y012463D01*
+X028682Y012839D01*
+X029039Y013232D01*
+X029377Y013641D01*
+X029696Y014067D01*
+X029993Y014506D01*
+X030270Y014960D01*
+X030524Y015426D01*
+X030757Y015904D01*
+X030966Y016392D01*
+X031151Y016890D01*
+X031313Y017396D01*
+X031450Y017909D01*
+X031563Y018428D01*
+X031651Y018952D01*
+X031714Y019479D01*
+X031752Y020009D01*
+X031765Y020540D01*
+X034365Y020605D02*
+X034349Y021257D01*
+X034303Y021907D01*
+X034226Y022554D01*
+X034118Y023197D01*
+X033979Y023834D01*
+X033810Y024463D01*
+X033612Y025084D01*
+X033384Y025695D01*
+X033127Y026294D01*
+X032843Y026880D01*
+X032530Y027452D01*
+X032191Y028009D01*
+X031826Y028549D01*
+X031435Y029071D01*
+X031020Y029573D01*
+X030582Y030056D01*
+X030121Y030517D01*
+X029638Y030955D01*
+X029136Y031370D01*
+X028614Y031761D01*
+X028074Y032126D01*
+X027517Y032465D01*
+X026945Y032778D01*
+X026359Y033062D01*
+X025760Y033319D01*
+X025149Y033547D01*
+X024528Y033745D01*
+X023899Y033914D01*
+X023262Y034053D01*
+X022619Y034161D01*
+X021972Y034238D01*
+X021322Y034284D01*
+X020670Y034300D01*
+X020605Y036120D02*
+X019870Y036103D01*
+X019136Y036050D01*
+X018406Y035963D01*
+X017681Y035841D01*
+X016963Y035684D01*
+X016252Y035494D01*
+X015552Y035270D01*
+X014863Y035013D01*
+X014187Y034724D01*
+X013525Y034403D01*
+X012880Y034050D01*
+X012252Y033667D01*
+X011643Y033255D01*
+X011054Y032815D01*
+X010487Y032346D01*
+X009943Y031852D01*
+X009423Y031332D01*
+X008929Y030788D01*
+X008460Y030221D01*
+X008020Y029632D01*
+X007608Y029023D01*
+X007225Y028395D01*
+X006872Y027750D01*
+X006551Y027088D01*
+X006262Y026412D01*
+X006005Y025723D01*
+X005781Y025023D01*
+X005591Y024312D01*
+X005434Y023594D01*
+X005312Y022869D01*
+X005225Y022139D01*
+X005172Y021405D01*
+X005155Y020670D01*
+X010355Y020605D02*
+X010367Y020120D01*
+X010401Y019637D01*
+X010459Y019156D01*
+X010539Y018678D01*
+X010642Y018204D01*
+X010768Y017736D01*
+X010915Y017274D01*
+X011085Y016820D01*
+X011275Y016374D01*
+X011487Y015938D01*
+X011720Y015513D01*
+X011972Y015099D01*
+X012244Y014697D01*
+X012534Y014309D01*
+X012843Y013935D01*
+X013169Y013577D01*
+X013512Y013234D01*
+X013870Y012908D01*
+X014244Y012599D01*
+X014632Y012309D01*
+X015034Y012037D01*
+X015448Y011785D01*
+X015873Y011552D01*
+X016309Y011340D01*
+X016755Y011150D01*
+X017209Y010980D01*
+X017671Y010833D01*
+X018139Y010707D01*
+X018613Y010604D01*
+X019091Y010524D01*
+X019572Y010466D01*
+X020055Y010432D01*
+X020540Y010420D01*
+X020605Y011200D02*
+X021049Y011211D01*
+X021493Y011242D01*
+X021934Y011295D01*
+X022373Y011369D01*
+X022807Y011463D01*
+X023236Y011578D01*
+X023660Y011714D01*
+X024076Y011869D01*
+X024485Y012044D01*
+X024885Y012238D01*
+X025275Y012451D01*
+X025655Y012683D01*
+X026023Y012932D01*
+X026379Y013198D01*
+X026721Y013481D01*
+X027050Y013780D01*
+X027365Y014095D01*
+X027664Y014424D01*
+X027947Y014766D01*
+X028213Y015122D01*
+X028462Y015490D01*
+X028694Y015870D01*
+X028907Y016260D01*
+X029101Y016660D01*
+X029276Y017069D01*
+X029431Y017485D01*
+X029567Y017909D01*
+X029682Y018338D01*
+X029776Y018772D01*
+X029850Y019211D01*
+X029903Y019652D01*
+X029934Y020096D01*
+X029945Y020540D01*
+X033845Y020605D02*
+X033830Y021232D01*
+X033785Y021857D01*
+X033711Y022480D01*
+X033607Y023098D01*
+X033474Y023711D01*
+X033311Y024317D01*
+X033120Y024914D01*
+X032901Y025502D01*
+X032654Y026078D01*
+X032380Y026642D01*
+X032080Y027192D01*
+X031754Y027728D01*
+X031402Y028247D01*
+X031026Y028749D01*
+X030627Y029233D01*
+X030205Y029697D01*
+X029762Y030140D01*
+X029298Y030562D01*
+X028814Y030961D01*
+X028312Y031337D01*
+X027793Y031689D01*
+X027257Y032015D01*
+X026707Y032315D01*
+X026143Y032589D01*
+X025567Y032836D01*
+X024979Y033055D01*
+X024382Y033246D01*
+X023776Y033409D01*
+X023163Y033542D01*
+X022545Y033646D01*
+X021922Y033720D01*
+X021297Y033765D01*
+X020670Y033780D01*
+X020605Y033780D02*
+X019981Y033765D01*
+X019359Y033721D01*
+X018739Y033647D01*
+X018124Y033543D01*
+X017514Y033410D01*
+X016912Y033249D01*
+X016317Y033059D01*
+X015733Y032841D01*
+X015159Y032595D01*
+X014598Y032323D01*
+X014050Y032024D01*
+X013517Y031699D01*
+X013000Y031349D01*
+X012501Y030975D01*
+X012020Y030578D01*
+X011558Y030158D01*
+X011117Y029717D01*
+X010697Y029255D01*
+X010300Y028774D01*
+X009926Y028275D01*
+X009576Y027758D01*
+X009251Y027225D01*
+X008952Y026677D01*
+X008680Y026116D01*
+X008434Y025543D01*
+X008216Y024958D01*
+X008026Y024364D01*
+X007865Y023761D01*
+X007732Y023151D01*
+X007628Y022536D01*
+X007554Y021916D01*
+X007510Y021294D01*
+X007495Y020670D01*
+X011655Y020605D02*
+X011665Y020182D01*
+X011695Y019760D01*
+X011745Y019341D01*
+X011816Y018924D01*
+X011905Y018510D01*
+X012015Y018102D01*
+X012144Y017699D01*
+X012291Y017303D01*
+X012458Y016914D01*
+X012643Y016534D01*
+X012845Y016163D01*
+X013065Y015801D01*
+X013302Y015451D01*
+X013556Y015113D01*
+X013825Y014787D01*
+X014110Y014474D01*
+X014409Y014175D01*
+X014722Y013890D01*
+X015048Y013621D01*
+X015386Y013367D01*
+X015736Y013130D01*
+X016098Y012910D01*
+X016469Y012708D01*
+X016849Y012523D01*
+X017238Y012356D01*
+X017634Y012209D01*
+X018037Y012080D01*
+X018445Y011970D01*
+X018859Y011881D01*
+X019276Y011810D01*
+X019695Y011760D01*
+X020117Y011730D01*
+X020540Y011720D01*
+X020605Y013280D02*
+X020950Y013288D01*
+X021295Y013313D01*
+X021638Y013354D01*
+X021979Y013411D01*
+X022317Y013485D01*
+X022650Y013574D01*
+X022979Y013679D01*
+X023303Y013800D01*
+X023621Y013936D01*
+X023932Y014087D01*
+X024235Y014253D01*
+X024530Y014432D01*
+X024816Y014626D01*
+X025093Y014833D01*
+X025359Y015053D01*
+X025615Y015286D01*
+X025859Y015530D01*
+X026092Y015786D01*
+X026312Y016052D01*
+X026519Y016329D01*
+X026713Y016615D01*
+X026892Y016910D01*
+X027058Y017213D01*
+X027209Y017524D01*
+X027345Y017842D01*
+X027466Y018166D01*
+X027571Y018495D01*
+X027660Y018828D01*
+X027734Y019166D01*
+X027791Y019507D01*
+X027832Y019850D01*
+X027857Y020195D01*
+X027865Y020540D01*
+X039045Y020605D02*
+X039024Y021479D01*
+X038962Y022352D01*
+X038858Y023220D01*
+X038713Y024083D01*
+X038527Y024937D01*
+X038301Y025782D01*
+X038034Y026615D01*
+X037729Y027434D01*
+X037384Y028238D01*
+X037002Y029025D01*
+X036583Y029793D01*
+X036128Y030539D01*
+X035638Y031264D01*
+X035114Y031964D01*
+X034557Y032638D01*
+X033969Y033285D01*
+X033350Y033904D01*
+X032703Y034492D01*
+X032029Y035049D01*
+X031329Y035573D01*
+X030604Y036063D01*
+X029857Y036518D01*
+X029090Y036937D01*
+X028303Y037319D01*
+X027499Y037664D01*
+X026680Y037969D01*
+X025847Y038236D01*
+X025002Y038462D01*
+X024147Y038648D01*
+X023285Y038793D01*
+X022417Y038897D01*
+X021544Y038959D01*
+X020670Y038980D01*
+X020605Y032220D02*
+X020055Y032207D01*
+X019507Y032168D01*
+X018961Y032102D01*
+X018419Y032011D01*
+X017882Y031894D01*
+X017351Y031752D01*
+X016827Y031585D01*
+X016312Y031393D01*
+X015807Y031176D01*
+X015313Y030936D01*
+X014830Y030673D01*
+X014361Y030386D01*
+X013905Y030078D01*
+X013465Y029749D01*
+X013041Y029399D01*
+X012635Y029029D01*
+X012246Y028640D01*
+X011876Y028234D01*
+X011526Y027810D01*
+X011197Y027370D01*
+X010889Y026914D01*
+X010602Y026445D01*
+X010339Y025963D01*
+X010099Y025468D01*
+X009882Y024963D01*
+X009690Y024448D01*
+X009523Y023924D01*
+X009381Y023393D01*
+X009264Y022856D01*
+X009173Y022314D01*
+X009107Y021768D01*
+X009068Y021220D01*
+X009055Y020670D01*
+X002295Y020605D02*
+X002316Y019737D01*
+X002378Y018871D01*
+X002481Y018009D01*
+X002625Y017152D01*
+X002809Y016304D01*
+X003034Y015465D01*
+X003298Y014638D01*
+X003602Y013824D01*
+X003944Y013026D01*
+X004323Y012245D01*
+X004739Y011483D01*
+X005191Y010741D01*
+X005678Y010022D01*
+X006198Y009327D01*
+X006751Y008657D01*
+X007335Y008014D01*
+X007950Y007400D01*
+X008592Y006816D01*
+X009262Y006263D01*
+X009957Y005743D01*
+X010676Y005256D01*
+X011418Y004804D01*
+X012180Y004388D01*
+X012961Y004009D01*
+X013759Y003667D01*
+X014573Y003363D01*
+X015400Y003099D01*
+X016239Y002874D01*
+X017087Y002690D01*
+X017944Y002546D01*
+X018806Y002443D01*
+X019672Y002381D01*
+X020540Y002360D01*
+X020605Y009900D02*
+X021111Y009912D01*
+X021616Y009948D01*
+X022119Y010008D01*
+X022619Y010092D01*
+X023113Y010200D01*
+X023603Y010331D01*
+X024085Y010485D01*
+X024559Y010662D01*
+X025025Y010861D01*
+X025480Y011083D01*
+X025925Y011325D01*
+X026357Y011589D01*
+X026777Y011873D01*
+X027182Y012176D01*
+X027573Y012499D01*
+X027947Y012839D01*
+X028306Y013198D01*
+X028646Y013572D01*
+X028969Y013963D01*
+X029272Y014368D01*
+X029556Y014788D01*
+X029820Y015220D01*
+X030062Y015664D01*
+X030283Y016120D01*
+X030483Y016586D01*
+X030660Y017060D01*
+X030814Y017542D01*
+X030945Y018032D01*
+X031053Y018526D01*
+X031137Y019026D01*
+X031197Y019529D01*
+X031233Y020034D01*
+X031245Y020540D01*
+X031245Y020605D02*
+X031232Y021124D01*
+X031194Y021642D01*
+X031131Y022157D01*
+X031042Y022668D01*
+X030928Y023175D01*
+X030790Y023675D01*
+X030627Y024168D01*
+X030440Y024652D01*
+X030230Y025126D01*
+X029996Y025590D01*
+X029740Y026042D01*
+X029463Y026480D01*
+X029164Y026905D01*
+X028845Y027314D01*
+X028506Y027707D01*
+X028148Y028083D01*
+X027772Y028441D01*
+X027379Y028780D01*
+X026970Y029099D01*
+X026545Y029398D01*
+X026107Y029675D01*
+X025655Y029931D01*
+X025191Y030165D01*
+X024717Y030375D01*
+X024233Y030562D01*
+X023740Y030725D01*
+X023239Y030863D01*
+X022733Y030977D01*
+X022222Y031066D01*
+X021707Y031129D01*
+X021189Y031167D01*
+X020670Y031180D01*
+X020605Y031440D02*
+X020093Y031428D01*
+X019581Y031391D01*
+X019072Y031330D01*
+X018567Y031245D01*
+X018066Y031136D01*
+X017571Y031004D01*
+X017083Y030848D01*
+X016602Y030669D01*
+X016131Y030467D01*
+X015670Y030243D01*
+X015220Y029997D01*
+X014782Y029730D01*
+X014358Y029443D01*
+X013947Y029136D01*
+X013552Y028809D01*
+X013173Y028465D01*
+X012810Y028102D01*
+X012466Y027723D01*
+X012139Y027328D01*
+X011832Y026917D01*
+X011545Y026493D01*
+X011278Y026055D01*
+X011032Y025605D01*
+X010808Y025144D01*
+X010606Y024673D01*
+X010427Y024193D01*
+X010271Y023704D01*
+X010139Y023209D01*
+X010030Y022708D01*
+X009945Y022203D01*
+X009884Y021694D01*
+X009847Y021182D01*
+X009835Y020670D01*
+X006195Y020605D02*
+X006211Y019923D01*
+X006260Y019241D01*
+X006341Y018564D01*
+X006454Y017890D01*
+X006599Y017223D01*
+X006776Y016564D01*
+X006984Y015913D01*
+X007223Y015274D01*
+X007491Y014646D01*
+X007790Y014032D01*
+X008117Y013433D01*
+X008472Y012850D01*
+X008855Y012284D01*
+X009264Y011738D01*
+X009699Y011211D01*
+X010158Y010706D01*
+X010641Y010223D01*
+X011146Y009764D01*
+X011673Y009329D01*
+X012219Y008920D01*
+X012785Y008537D01*
+X013368Y008182D01*
+X013967Y007855D01*
+X014581Y007556D01*
+X015209Y007288D01*
+X015848Y007049D01*
+X016499Y006841D01*
+X017158Y006664D01*
+X017825Y006519D01*
+X018499Y006406D01*
+X019177Y006325D01*
+X019858Y006276D01*
+X020540Y006260D01*
+X020605Y004440D02*
+X021395Y004459D01*
+X022183Y004518D01*
+X022967Y004614D01*
+X023746Y004749D01*
+X024517Y004923D01*
+X025279Y005133D01*
+X026029Y005381D01*
+X026766Y005666D01*
+X027489Y005986D01*
+X028195Y006341D01*
+X028882Y006731D01*
+X029550Y007153D01*
+X030196Y007608D01*
+X030819Y008095D01*
+X031417Y008611D01*
+X031989Y009156D01*
+X032534Y009728D01*
+X033050Y010326D01*
+X033537Y010949D01*
+X033992Y011595D01*
+X034414Y012263D01*
+X034804Y012951D01*
+X035159Y013656D01*
+X035479Y014379D01*
+X035764Y015116D01*
+X036012Y015866D01*
+X036223Y016628D01*
+X036396Y017399D01*
+X036531Y018178D01*
+X036627Y018962D01*
+X036686Y019750D01*
+X036705Y020540D01*
+X029685Y020605D02*
+X029675Y021034D01*
+X029644Y021462D01*
+X029593Y021888D01*
+X029522Y022311D01*
+X029431Y022730D01*
+X029320Y023145D01*
+X029189Y023553D01*
+X029039Y023956D01*
+X028870Y024350D01*
+X028683Y024736D01*
+X028477Y025112D01*
+X028254Y025479D01*
+X028013Y025834D01*
+X027756Y026178D01*
+X027483Y026509D01*
+X027194Y026826D01*
+X026891Y027129D01*
+X026574Y027418D01*
+X026243Y027691D01*
+X025899Y027948D01*
+X025544Y028189D01*
+X025178Y028412D01*
+X024801Y028618D01*
+X024415Y028805D01*
+X024021Y028974D01*
+X023619Y029124D01*
+X023210Y029255D01*
+X022795Y029366D01*
+X022376Y029457D01*
+X021953Y029528D01*
+X021527Y029579D01*
+X021099Y029610D01*
+X020670Y029620D01*
+X020605Y031700D02*
+X020080Y031688D01*
+X019557Y031650D01*
+X019035Y031588D01*
+X018518Y031501D01*
+X018005Y031389D01*
+X017497Y031253D01*
+X016997Y031093D01*
+X016506Y030910D01*
+X016023Y030703D01*
+X015551Y030474D01*
+X015090Y030222D01*
+X014642Y029949D01*
+X014207Y029655D01*
+X013787Y029340D01*
+X013382Y029006D01*
+X012993Y028653D01*
+X012622Y028282D01*
+X012269Y027893D01*
+X011935Y027488D01*
+X011620Y027068D01*
+X011326Y026633D01*
+X011053Y026185D01*
+X010801Y025724D01*
+X010572Y025252D01*
+X010365Y024769D01*
+X010182Y024278D01*
+X010022Y023777D01*
+X009886Y023270D01*
+X009774Y022757D01*
+X009687Y022240D01*
+X009625Y021718D01*
+X009587Y021195D01*
+X009575Y020670D01*
+X010875Y020605D02*
+X010886Y020145D01*
+X010919Y019686D01*
+X010973Y019230D01*
+X011050Y018776D01*
+X011147Y018326D01*
+X011266Y017882D01*
+X011407Y017444D01*
+X011567Y017013D01*
+X011748Y016590D01*
+X011949Y016176D01*
+X012170Y015772D01*
+X012409Y015380D01*
+X012667Y014999D01*
+X012943Y014630D01*
+X013236Y014276D01*
+X013545Y013935D01*
+X013870Y013610D01*
+X014211Y013301D01*
+X014566Y013008D01*
+X014934Y012732D01*
+X015315Y012474D01*
+X015708Y012235D01*
+X016111Y012014D01*
+X016525Y011813D01*
+X016948Y011632D01*
+X017379Y011472D01*
+X017817Y011331D01*
+X018261Y011212D01*
+X018711Y011115D01*
+X019165Y011038D01*
+X019621Y010984D01*
+X020080Y010951D01*
+X020540Y010940D01*
+X020605Y012500D02*
+X020988Y012509D01*
+X021369Y012536D01*
+X021749Y012582D01*
+X022127Y012645D01*
+X022501Y012727D01*
+X022870Y012826D01*
+X023235Y012942D01*
+X023593Y013076D01*
+X023945Y013227D01*
+X024289Y013394D01*
+X024625Y013577D01*
+X024952Y013776D01*
+X025269Y013991D01*
+X025575Y014220D01*
+X025870Y014464D01*
+X026153Y014721D01*
+X026424Y014992D01*
+X026681Y015275D01*
+X026925Y015570D01*
+X027154Y015876D01*
+X027369Y016193D01*
+X027568Y016520D01*
+X027751Y016856D01*
+X027918Y017200D01*
+X028069Y017552D01*
+X028203Y017910D01*
+X028319Y018275D01*
+X028418Y018645D01*
+X028500Y019018D01*
+X028563Y019396D01*
+X028609Y019776D01*
+X028636Y020157D01*
+X028645Y020540D01*
+X036705Y020605D02*
+X036687Y021368D01*
+X036632Y022129D01*
+X036542Y022887D01*
+X036415Y023640D01*
+X036253Y024385D01*
+X036055Y025123D01*
+X035823Y025850D01*
+X035556Y026565D01*
+X035256Y027266D01*
+X034922Y027953D01*
+X034557Y028623D01*
+X034160Y029274D01*
+X033732Y029906D01*
+X033274Y030517D01*
+X032788Y031106D01*
+X032275Y031670D01*
+X031735Y032210D01*
+X031171Y032723D01*
+X030582Y033209D01*
+X029971Y033667D01*
+X029339Y034095D01*
+X028687Y034492D01*
+X028018Y034857D01*
+X027331Y035191D01*
+X026630Y035491D01*
+X025915Y035758D01*
+X025188Y035990D01*
+X024450Y036188D01*
+X023705Y036350D01*
+X022952Y036477D01*
+X022194Y036567D01*
+X021433Y036622D01*
+X020670Y036640D01*
+X020605Y040280D02*
+X019643Y040256D01*
+X018683Y040186D01*
+X017728Y040068D01*
+X016779Y039903D01*
+X015840Y039692D01*
+X014912Y039436D01*
+X013999Y039134D01*
+X013101Y038787D01*
+X012221Y038397D01*
+X011361Y037964D01*
+X010523Y037490D01*
+X009710Y036975D01*
+X008923Y036421D01*
+X008165Y035829D01*
+X007436Y035200D01*
+X006739Y034536D01*
+X006075Y033839D01*
+X005446Y033110D01*
+X004854Y032352D01*
+X004300Y031565D01*
+X003785Y030752D01*
+X003311Y029914D01*
+X002878Y029054D01*
+X002488Y028174D01*
+X002141Y027276D01*
+X001839Y026363D01*
+X001583Y025435D01*
+X001372Y024496D01*
+X001207Y023547D01*
+X001089Y022592D01*
+X001019Y021632D01*
+X000995Y020670D01*
+X011395Y020605D02*
+X011405Y020170D01*
+X011436Y019736D01*
+X011488Y019304D01*
+X011560Y018874D01*
+X011653Y018449D01*
+X011765Y018029D01*
+X011898Y017614D01*
+X012050Y017206D01*
+X012221Y016806D01*
+X012412Y016415D01*
+X012620Y016033D01*
+X012847Y015661D01*
+X013091Y015300D01*
+X013352Y014952D01*
+X013629Y014616D01*
+X013921Y014294D01*
+X014229Y013986D01*
+X014551Y013694D01*
+X014887Y013417D01*
+X015235Y013156D01*
+X015596Y012912D01*
+X015968Y012685D01*
+X016350Y012477D01*
+X016741Y012286D01*
+X017141Y012115D01*
+X017549Y011963D01*
+X017964Y011830D01*
+X018384Y011718D01*
+X018809Y011625D01*
+X019239Y011553D01*
+X019671Y011501D01*
+X020105Y011470D01*
+X020540Y011460D01*
+X020605Y000800D02*
+X021544Y000822D01*
+X022481Y000889D01*
+X023414Y001001D01*
+X024341Y001157D01*
+X025259Y001356D01*
+X026166Y001600D01*
+X027061Y001886D01*
+X027942Y002214D01*
+X028805Y002584D01*
+X029650Y002994D01*
+X030475Y003445D01*
+X031277Y003934D01*
+X032055Y004460D01*
+X032807Y005023D01*
+X033532Y005622D01*
+X034227Y006254D01*
+X034892Y006918D01*
+X035524Y007613D01*
+X036122Y008338D01*
+X036685Y009090D01*
+X037211Y009868D01*
+X037700Y010670D01*
+X038151Y011495D01*
+X038561Y012340D01*
+X038931Y013203D01*
+X039259Y014084D01*
+X039545Y014979D01*
+X039789Y015886D01*
+X039988Y016804D01*
+X040144Y017731D01*
+X040256Y018664D01*
+X040323Y019601D01*
+X040345Y020540D01*
+X034105Y020605D02*
+X034090Y021244D01*
+X034044Y021882D01*
+X033968Y022517D01*
+X033862Y023148D01*
+X033726Y023772D01*
+X033561Y024390D01*
+X033366Y024999D01*
+X033143Y025598D01*
+X032891Y026186D01*
+X032612Y026761D01*
+X032305Y027323D01*
+X031972Y027869D01*
+X031614Y028398D01*
+X031231Y028910D01*
+X030823Y029403D01*
+X030393Y029876D01*
+X029941Y030328D01*
+X029468Y030758D01*
+X028975Y031166D01*
+X028463Y031549D01*
+X027934Y031907D01*
+X027387Y032240D01*
+X026826Y032547D01*
+X026251Y032826D01*
+X025663Y033078D01*
+X025064Y033301D01*
+X024455Y033496D01*
+X023837Y033661D01*
+X023213Y033797D01*
+X022582Y033903D01*
+X021947Y033979D01*
+X021309Y034025D01*
+X020670Y034040D01*
+X020605Y038460D02*
+X019759Y038440D01*
+X018914Y038379D01*
+X018073Y038279D01*
+X017238Y038139D01*
+X016411Y037959D01*
+X015593Y037739D01*
+X014786Y037482D01*
+X013993Y037186D01*
+X013215Y036852D01*
+X012453Y036482D01*
+X011710Y036077D01*
+X010987Y035636D01*
+X010286Y035161D01*
+X009608Y034654D01*
+X008955Y034115D01*
+X008329Y033545D01*
+X007730Y032947D01*
+X007160Y032320D01*
+X006621Y031667D01*
+X006114Y030989D01*
+X005639Y030288D01*
+X005198Y029565D01*
+X004793Y028822D01*
+X004423Y028060D01*
+X004089Y027282D01*
+X003793Y026489D01*
+X003536Y025682D01*
+X003316Y024864D01*
+X003136Y024037D01*
+X002996Y023202D01*
+X002896Y022361D01*
+X002835Y021516D01*
+X002815Y020670D01*
+X011135Y020605D02*
+X011146Y020158D01*
+X011178Y019711D01*
+X011231Y019267D01*
+X011305Y018825D01*
+X011400Y018388D01*
+X011516Y017955D01*
+X011652Y017529D01*
+X011809Y017110D01*
+X011985Y016698D01*
+X012180Y016295D01*
+X012395Y015903D01*
+X012628Y015520D01*
+X012879Y015150D01*
+X013147Y014791D01*
+X013432Y014446D01*
+X013733Y014115D01*
+X014050Y013798D01*
+X014381Y013497D01*
+X014726Y013212D01*
+X015085Y012944D01*
+X015455Y012693D01*
+X015838Y012460D01*
+X016230Y012245D01*
+X016633Y012050D01*
+X017045Y011874D01*
+X017464Y011717D01*
+X017890Y011581D01*
+X018323Y011465D01*
+X018760Y011370D01*
+X019202Y011296D01*
+X019646Y011243D01*
+X020093Y011211D01*
+X020540Y011200D01*
+X020605Y001320D02*
+X021520Y001342D01*
+X022432Y001407D01*
+X023340Y001516D01*
+X024242Y001667D01*
+X025136Y001862D01*
+X026020Y002099D01*
+X026891Y002377D01*
+X027748Y002697D01*
+X028589Y003057D01*
+X029412Y003457D01*
+X030215Y003895D01*
+X030996Y004371D01*
+X031754Y004884D01*
+X032486Y005432D01*
+X033191Y006014D01*
+X033868Y006630D01*
+X034515Y007277D01*
+X035131Y007954D01*
+X035713Y008659D01*
+X036261Y009391D01*
+X036774Y010149D01*
+X037250Y010930D01*
+X037688Y011733D01*
+X038088Y012556D01*
+X038448Y013397D01*
+X038768Y014254D01*
+X039046Y015125D01*
+X039283Y016009D01*
+X039478Y016903D01*
+X039629Y017805D01*
+X039738Y018713D01*
+X039803Y019625D01*
+X039825Y020540D01*
+X032805Y020605D02*
+X032790Y021200D01*
+X032747Y021794D01*
+X032674Y022386D01*
+X032572Y022972D01*
+X032441Y023554D01*
+X032282Y024128D01*
+X032096Y024693D01*
+X031881Y025249D01*
+X031640Y025793D01*
+X031372Y026325D01*
+X031079Y026844D01*
+X030760Y027347D01*
+X030417Y027834D01*
+X030050Y028303D01*
+X029661Y028754D01*
+X029251Y029186D01*
+X028819Y029596D01*
+X028368Y029985D01*
+X027899Y030352D01*
+X027412Y030695D01*
+X026909Y031014D01*
+X026390Y031307D01*
+X025858Y031575D01*
+X025314Y031816D01*
+X024758Y032031D01*
+X024193Y032217D01*
+X023619Y032376D01*
+X023037Y032507D01*
+X022451Y032609D01*
+X021859Y032682D01*
+X021265Y032725D01*
+X020670Y032740D01*
+X020605Y037420D02*
+X019783Y037400D01*
+X018963Y037339D01*
+X018147Y037239D01*
+X017337Y037098D01*
+X016535Y036918D01*
+X015743Y036699D01*
+X014962Y036441D01*
+X014195Y036145D01*
+X013443Y035812D01*
+X012709Y035442D01*
+X011994Y035037D01*
+X011299Y034597D01*
+X010627Y034124D01*
+X009979Y033618D01*
+X009356Y033081D01*
+X008761Y032514D01*
+X008194Y031919D01*
+X007657Y031296D01*
+X007151Y030648D01*
+X006678Y029976D01*
+X006238Y029281D01*
+X005833Y028566D01*
+X005463Y027832D01*
+X005130Y027080D01*
+X004834Y026313D01*
+X004576Y025532D01*
+X004357Y024740D01*
+X004177Y023938D01*
+X004036Y023128D01*
+X003936Y022312D01*
+X003875Y021492D01*
+X003855Y020670D01*
+X007495Y020605D02*
+X007510Y019984D01*
+X007554Y019365D01*
+X007628Y018749D01*
+X007731Y018136D01*
+X007863Y017530D01*
+X008023Y016930D01*
+X008212Y016338D01*
+X008429Y015757D01*
+X008674Y015186D01*
+X008945Y014627D01*
+X009243Y014083D01*
+X009566Y013552D01*
+X009914Y013038D01*
+X010286Y012541D01*
+X010681Y012062D01*
+X011099Y011603D01*
+X011538Y011164D01*
+X011997Y010746D01*
+X012476Y010351D01*
+X012973Y009979D01*
+X013487Y009631D01*
+X014018Y009308D01*
+X014562Y009010D01*
+X015121Y008739D01*
+X015692Y008494D01*
+X016273Y008277D01*
+X016865Y008088D01*
+X017465Y007928D01*
+X018071Y007796D01*
+X018684Y007693D01*
+X019300Y007619D01*
+X019919Y007575D01*
+X020540Y007560D01*
+X020605Y004700D02*
+X021359Y004718D01*
+X022111Y004772D01*
+X022859Y004861D01*
+X023603Y004986D01*
+X024339Y005147D01*
+X025068Y005342D01*
+X025786Y005571D01*
+X026492Y005835D01*
+X027185Y006131D01*
+X027863Y006461D01*
+X028525Y006822D01*
+X029169Y007215D01*
+X029793Y007637D01*
+X030397Y008089D01*
+X030978Y008569D01*
+X031536Y009076D01*
+X032069Y009609D01*
+X032576Y010167D01*
+X033056Y010748D01*
+X033508Y011352D01*
+X033930Y011976D01*
+X034323Y012620D01*
+X034684Y013282D01*
+X035014Y013960D01*
+X035310Y014653D01*
+X035574Y015359D01*
+X035803Y016077D01*
+X035999Y016806D01*
+X036159Y017542D01*
+X036284Y018286D01*
+X036373Y019034D01*
+X036427Y019786D01*
+X036445Y020540D01*
+X029425Y020605D02*
+X029415Y021022D01*
+X029385Y021437D01*
+X029336Y021851D01*
+X029267Y022262D01*
+X029178Y022669D01*
+X029070Y023072D01*
+X028943Y023468D01*
+X028798Y023859D01*
+X028634Y024242D01*
+X028452Y024617D01*
+X028252Y024983D01*
+X028035Y025338D01*
+X027802Y025683D01*
+X027552Y026017D01*
+X027287Y026338D01*
+X027006Y026647D01*
+X026712Y026941D01*
+X026403Y027222D01*
+X026082Y027487D01*
+X025748Y027737D01*
+X025403Y027970D01*
+X025047Y028187D01*
+X024682Y028387D01*
+X024307Y028569D01*
+X023924Y028733D01*
+X023533Y028878D01*
+X023137Y029005D01*
+X022734Y029113D01*
+X022327Y029202D01*
+X021916Y029271D01*
+X021502Y029320D01*
+X021087Y029350D01*
+X020670Y029360D01*
+X020605Y036380D02*
+X019834Y036361D01*
+X019065Y036304D01*
+X018300Y036210D01*
+X017540Y036078D01*
+X016788Y035909D01*
+X016045Y035704D01*
+X015312Y035462D01*
+X014593Y035184D01*
+X013888Y034872D01*
+X013199Y034525D01*
+X012528Y034145D01*
+X011877Y033732D01*
+X011247Y033288D01*
+X010639Y032814D01*
+X010055Y032310D01*
+X009496Y031779D01*
+X008965Y031220D01*
+X008461Y030636D01*
+X007987Y030028D01*
+X007543Y029398D01*
+X007130Y028747D01*
+X006750Y028076D01*
+X006403Y027387D01*
+X006091Y026682D01*
+X005813Y025963D01*
+X005571Y025230D01*
+X005366Y024487D01*
+X005197Y023735D01*
+X005065Y022975D01*
+X004971Y022210D01*
+X004914Y021441D01*
+X004895Y020670D01*
+X010615Y020605D02*
+X010626Y020133D01*
+X010660Y019662D01*
+X010716Y019193D01*
+X010794Y018727D01*
+X010895Y018265D01*
+X011017Y017809D01*
+X011161Y017359D01*
+X011326Y016916D01*
+X011512Y016482D01*
+X011718Y016057D01*
+X011945Y015643D01*
+X012191Y015239D01*
+X012455Y014848D01*
+X012738Y014470D01*
+X013039Y014106D01*
+X013357Y013756D01*
+X013691Y013422D01*
+X014040Y013104D01*
+X014405Y012803D01*
+X014783Y012520D01*
+X015174Y012256D01*
+X015578Y012010D01*
+X015992Y011783D01*
+X016417Y011577D01*
+X016851Y011391D01*
+X017294Y011226D01*
+X017744Y011082D01*
+X018200Y010960D01*
+X018662Y010859D01*
+X019128Y010781D01*
+X019597Y010725D01*
+X020068Y010691D01*
+X020540Y010680D01*
+X020605Y005220D02*
+X021334Y005237D01*
+X022061Y005289D01*
+X022785Y005376D01*
+X023504Y005497D01*
+X024217Y005652D01*
+X024921Y005841D01*
+X025616Y006063D01*
+X026299Y006317D01*
+X026969Y006604D01*
+X027625Y006923D01*
+X028265Y007272D01*
+X028888Y007652D01*
+X029491Y008061D01*
+X030075Y008498D01*
+X030637Y008962D01*
+X031177Y009452D01*
+X031693Y009968D01*
+X032183Y010508D01*
+X032647Y011070D01*
+X033084Y011654D01*
+X033493Y012257D01*
+X033873Y012880D01*
+X034222Y013520D01*
+X034541Y014176D01*
+X034828Y014846D01*
+X035082Y015529D01*
+X035304Y016224D01*
+X035493Y016928D01*
+X035648Y017641D01*
+X035769Y018360D01*
+X035856Y019084D01*
+X035908Y019811D01*
+X035925Y020540D01*
+X028385Y020605D02*
+X028376Y020972D01*
+X028350Y021338D01*
+X028306Y021703D01*
+X028246Y022065D01*
+X028168Y022424D01*
+X028072Y022779D01*
+X027961Y023128D01*
+X027832Y023472D01*
+X027688Y023810D01*
+X027527Y024140D01*
+X027351Y024463D01*
+X027160Y024776D01*
+X026954Y025080D01*
+X026734Y025374D01*
+X026501Y025657D01*
+X026254Y025929D01*
+X025994Y026189D01*
+X025722Y026436D01*
+X025439Y026669D01*
+X025145Y026889D01*
+X024841Y027095D01*
+X024527Y027286D01*
+X024205Y027462D01*
+X023875Y027623D01*
+X023537Y027767D01*
+X023193Y027896D01*
+X022844Y028007D01*
+X022489Y028103D01*
+X022130Y028181D01*
+X021768Y028241D01*
+X021403Y028285D01*
+X021037Y028311D01*
+X020670Y028320D01*
+X020605Y032480D02*
+X020025Y032466D01*
+X019447Y032423D01*
+X018872Y032352D01*
+X018301Y032253D01*
+X017735Y032126D01*
+X017177Y031971D01*
+X016626Y031790D01*
+X016085Y031581D01*
+X015556Y031346D01*
+X015038Y031085D01*
+X014533Y030800D01*
+X014044Y030490D01*
+X013570Y030156D01*
+X013113Y029799D01*
+X012674Y029421D01*
+X012254Y029021D01*
+X011854Y028601D01*
+X011476Y028162D01*
+X011119Y027705D01*
+X010785Y027231D01*
+X010475Y026742D01*
+X010190Y026237D01*
+X009929Y025719D01*
+X009694Y025190D01*
+X009485Y024649D01*
+X009304Y024098D01*
+X009149Y023540D01*
+X009022Y022974D01*
+X008923Y022403D01*
+X008852Y021828D01*
+X008809Y021250D01*
+X008795Y020670D01*
+X006455Y020605D02*
+X006471Y019935D01*
+X006519Y019266D01*
+X006598Y018601D01*
+X006710Y017939D01*
+X006852Y017284D01*
+X007026Y016637D01*
+X007230Y015998D01*
+X007464Y015370D01*
+X007728Y014754D01*
+X008021Y014151D01*
+X008342Y013563D01*
+X008691Y012990D01*
+X009067Y012435D01*
+X009468Y011898D01*
+X009895Y011381D01*
+X010346Y010885D01*
+X010820Y010411D01*
+X011316Y009960D01*
+X011833Y009533D01*
+X012370Y009132D01*
+X012925Y008756D01*
+X013498Y008407D01*
+X014086Y008086D01*
+X014689Y007793D01*
+X015305Y007529D01*
+X015933Y007295D01*
+X016572Y007091D01*
+X017219Y006917D01*
+X017874Y006775D01*
+X018536Y006663D01*
+X019201Y006584D01*
+X019870Y006536D01*
+X020540Y006520D01*
+X020605Y006260D02*
+X021284Y006276D01*
+X021962Y006325D01*
+X022637Y006405D01*
+X023308Y006518D01*
+X023972Y006663D01*
+X024628Y006838D01*
+X025276Y007045D01*
+X025912Y007283D01*
+X026537Y007550D01*
+X027148Y007847D01*
+X027745Y008173D01*
+X028325Y008527D01*
+X028888Y008908D01*
+X029432Y009315D01*
+X029956Y009748D01*
+X030459Y010205D01*
+X030940Y010686D01*
+X031397Y011189D01*
+X031830Y011713D01*
+X032237Y012257D01*
+X032618Y012820D01*
+X032972Y013400D01*
+X033298Y013997D01*
+X033595Y014608D01*
+X033862Y015233D01*
+X034100Y015869D01*
+X034307Y016517D01*
+X034482Y017173D01*
+X034627Y017837D01*
+X034740Y018508D01*
+X034820Y019183D01*
+X034869Y019861D01*
+X034885Y020540D01*
+X030985Y020605D02*
+X030973Y021111D01*
+X030935Y021616D01*
+X030873Y022119D01*
+X030787Y022617D01*
+X030676Y023111D01*
+X030541Y023599D01*
+X030382Y024080D01*
+X030200Y024552D01*
+X029995Y025015D01*
+X029767Y025467D01*
+X029517Y025908D01*
+X029247Y026336D01*
+X028955Y026750D01*
+X028644Y027149D01*
+X028313Y027532D01*
+X027964Y027899D01*
+X027597Y028248D01*
+X027214Y028579D01*
+X026815Y028890D01*
+X026401Y029182D01*
+X025973Y029452D01*
+X025532Y029702D01*
+X025080Y029930D01*
+X024617Y030135D01*
+X024145Y030317D01*
+X023664Y030476D01*
+X023176Y030611D01*
+X022682Y030722D01*
+X022184Y030808D01*
+X021681Y030870D01*
+X021176Y030908D01*
+X020670Y030920D01*
+X020605Y030660D02*
+X020130Y030649D01*
+X019655Y030615D01*
+X019183Y030558D01*
+X018714Y030479D01*
+X018250Y030378D01*
+X017790Y030255D01*
+X017338Y030111D01*
+X016892Y029944D01*
+X016455Y029757D01*
+X016027Y029549D01*
+X015610Y029322D01*
+X015204Y029074D01*
+X014810Y028808D01*
+X014430Y028523D01*
+X014063Y028220D01*
+X013711Y027900D01*
+X013375Y027564D01*
+X013055Y027212D01*
+X012752Y026845D01*
+X012467Y026465D01*
+X012201Y026071D01*
+X011953Y025665D01*
+X011726Y025248D01*
+X011518Y024820D01*
+X011331Y024383D01*
+X011164Y023937D01*
+X011020Y023485D01*
+X010897Y023025D01*
+X010796Y022561D01*
+X010717Y022092D01*
+X010660Y021620D01*
+X010626Y021145D01*
+X010615Y020670D01*
+X005155Y020605D02*
+X005172Y019873D01*
+X005225Y019143D01*
+X005312Y018416D01*
+X005433Y017693D01*
+X005589Y016978D01*
+X005778Y016271D01*
+X006001Y015573D01*
+X006257Y014887D01*
+X006545Y014214D01*
+X006865Y013555D01*
+X007216Y012913D01*
+X007597Y012287D01*
+X008008Y011681D01*
+X008447Y011095D01*
+X008913Y010530D01*
+X009405Y009988D01*
+X009923Y009470D01*
+X010465Y008978D01*
+X011030Y008512D01*
+X011616Y008073D01*
+X012222Y007662D01*
+X012848Y007281D01*
+X013490Y006930D01*
+X014149Y006610D01*
+X014822Y006322D01*
+X015508Y006066D01*
+X016206Y005843D01*
+X016913Y005654D01*
+X017628Y005498D01*
+X018351Y005377D01*
+X019078Y005290D01*
+X019808Y005237D01*
+X020540Y005220D01*
+X020605Y007300D02*
+X021235Y007315D01*
+X021864Y007360D01*
+X022489Y007435D01*
+X023111Y007539D01*
+X023726Y007673D01*
+X024335Y007836D01*
+X024935Y008028D01*
+X025526Y008248D01*
+X026105Y008496D01*
+X026672Y008772D01*
+X027225Y009074D01*
+X027763Y009402D01*
+X028285Y009755D01*
+X028789Y010133D01*
+X029275Y010534D01*
+X029742Y010958D01*
+X030187Y011403D01*
+X030611Y011870D01*
+X031012Y012356D01*
+X031390Y012860D01*
+X031743Y013382D01*
+X032071Y013920D01*
+X032373Y014473D01*
+X032649Y015040D01*
+X032897Y015619D01*
+X033117Y016210D01*
+X033309Y016810D01*
+X033472Y017419D01*
+X033606Y018034D01*
+X033710Y018656D01*
+X033785Y019281D01*
+X033830Y019910D01*
+X033845Y020540D01*
+X036185Y020605D02*
+X036166Y021366D01*
+X036110Y022126D01*
+X036017Y022882D01*
+X035887Y023632D01*
+X035720Y024375D01*
+X035517Y025109D01*
+X035278Y025832D01*
+X035004Y026542D01*
+X034695Y027238D01*
+X034353Y027919D01*
+X033978Y028581D01*
+X033570Y029225D01*
+X033132Y029847D01*
+X032663Y030448D01*
+X032166Y031024D01*
+X031641Y031576D01*
+X031089Y032101D01*
+X030513Y032598D01*
+X029912Y033067D01*
+X029290Y033505D01*
+X028646Y033913D01*
+X027984Y034288D01*
+X027304Y034630D01*
+X026607Y034939D01*
+X025897Y035213D01*
+X025174Y035452D01*
+X024440Y035655D01*
+X023697Y035822D01*
+X022947Y035952D01*
+X022191Y036045D01*
+X021431Y036101D01*
+X020670Y036120D01*
+X020605Y028580D02*
+X020217Y028570D01*
+X019830Y028542D01*
+X019444Y028494D01*
+X019062Y028428D01*
+X018683Y028343D01*
+X018309Y028239D01*
+X017940Y028118D01*
+X017578Y027978D01*
+X017223Y027821D01*
+X016876Y027646D01*
+X016538Y027455D01*
+X016210Y027247D01*
+X015893Y027023D01*
+X015587Y026785D01*
+X015293Y026531D01*
+X015012Y026263D01*
+X014744Y025982D01*
+X014490Y025688D01*
+X014252Y025382D01*
+X014028Y025065D01*
+X013820Y024737D01*
+X013629Y024399D01*
+X013454Y024052D01*
+X013297Y023697D01*
+X013157Y023335D01*
+X013036Y022966D01*
+X012932Y022592D01*
+X012847Y022213D01*
+X012781Y021831D01*
+X012733Y021445D01*
+X012705Y021058D01*
+X012695Y020670D01*
+X004895Y020605D02*
+X004913Y019861D01*
+X004966Y019118D01*
+X005054Y018378D01*
+X005178Y017644D01*
+X005336Y016917D01*
+X005529Y016197D01*
+X005755Y015488D01*
+X006016Y014790D01*
+X006309Y014106D01*
+X006634Y013436D01*
+X006991Y012783D01*
+X007379Y012147D01*
+X007796Y011530D01*
+X008242Y010934D01*
+X008716Y010360D01*
+X009217Y009809D01*
+X009744Y009282D01*
+X010295Y008781D01*
+X010869Y008307D01*
+X011465Y007861D01*
+X012082Y007444D01*
+X012717Y007056D01*
+X013371Y006699D01*
+X014041Y006374D01*
+X014725Y006081D01*
+X015423Y005820D01*
+X016132Y005594D01*
+X016852Y005401D01*
+X017579Y005243D01*
+X018313Y005119D01*
+X019053Y005031D01*
+X019796Y004978D01*
+X020540Y004960D01*
+X020605Y008600D02*
+X021173Y008614D01*
+X021740Y008654D01*
+X022304Y008722D01*
+X022865Y008816D01*
+X023420Y008937D01*
+X023969Y009084D01*
+X024510Y009257D01*
+X025043Y009455D01*
+X025565Y009679D01*
+X026076Y009927D01*
+X026575Y010200D01*
+X027060Y010495D01*
+X027531Y010814D01*
+X027986Y011155D01*
+X028424Y011516D01*
+X028845Y011899D01*
+X029246Y012300D01*
+X029629Y012721D01*
+X029990Y013159D01*
+X030331Y013614D01*
+X030650Y014085D01*
+X030945Y014570D01*
+X031218Y015069D01*
+X031466Y015580D01*
+X031690Y016102D01*
+X031888Y016635D01*
+X032061Y017176D01*
+X032208Y017725D01*
+X032329Y018280D01*
+X032423Y018841D01*
+X032491Y019405D01*
+X032531Y019972D01*
+X032545Y020540D01*
+X037745Y020605D02*
+X037724Y021443D01*
+X037663Y022279D01*
+X037560Y023110D01*
+X037417Y023936D01*
+X037233Y024754D01*
+X037010Y025562D01*
+X036747Y026357D01*
+X036445Y027139D01*
+X036106Y027905D01*
+X035729Y028654D01*
+X035316Y029383D01*
+X034867Y030091D01*
+X034385Y030777D01*
+X033869Y031437D01*
+X033322Y032072D01*
+X032744Y032679D01*
+X032137Y033257D01*
+X031502Y033804D01*
+X030842Y034320D01*
+X030156Y034802D01*
+X029448Y035251D01*
+X028719Y035664D01*
+X027971Y036041D01*
+X027204Y036380D01*
+X026422Y036682D01*
+X025627Y036945D01*
+X024819Y037168D01*
+X024001Y037352D01*
+X023175Y037495D01*
+X022344Y037598D01*
+X021508Y037659D01*
+X020670Y037680D01*
+X020605Y027800D02*
+X020255Y027791D01*
+X019906Y027766D01*
+X019559Y027723D01*
+X019214Y027663D01*
+X018873Y027586D01*
+X018535Y027493D01*
+X018203Y027383D01*
+X017876Y027257D01*
+X017557Y027115D01*
+X017244Y026958D01*
+X016939Y026786D01*
+X016644Y026598D01*
+X016358Y026397D01*
+X016082Y026182D01*
+X015817Y025953D01*
+X015563Y025712D01*
+X015322Y025458D01*
+X015093Y025193D01*
+X014878Y024917D01*
+X014677Y024631D01*
+X014489Y024336D01*
+X014317Y024031D01*
+X014160Y023718D01*
+X014018Y023399D01*
+X013892Y023072D01*
+X013782Y022740D01*
+X013689Y022402D01*
+X013612Y022061D01*
+X013552Y021716D01*
+X013509Y021369D01*
+X013484Y021020D01*
+X013475Y020670D01*
+X012955Y020605D02*
+X012964Y020244D01*
+X012989Y019884D01*
+X013032Y019526D01*
+X013092Y019170D01*
+X013169Y018817D01*
+X013262Y018468D01*
+X013372Y018124D01*
+X013498Y017786D01*
+X013640Y017454D01*
+X013798Y017129D01*
+X013971Y016813D01*
+X014159Y016504D01*
+X014361Y016205D01*
+X014578Y015916D01*
+X014808Y015638D01*
+X015050Y015371D01*
+X015306Y015115D01*
+X015573Y014873D01*
+X015851Y014643D01*
+X016140Y014426D01*
+X016439Y014224D01*
+X016748Y014036D01*
+X017064Y013863D01*
+X017389Y013705D01*
+X017721Y013563D01*
+X018059Y013437D01*
+X018403Y013327D01*
+X018752Y013234D01*
+X019105Y013157D01*
+X019461Y013097D01*
+X019819Y013054D01*
+X020179Y013029D01*
+X020540Y013020D01*
+X020605Y010160D02*
+X021099Y010172D01*
+X021592Y010207D01*
+X022082Y010266D01*
+X022569Y010348D01*
+X023052Y010453D01*
+X023529Y010580D01*
+X024000Y010731D01*
+X024463Y010904D01*
+X024917Y011098D01*
+X025361Y011314D01*
+X025795Y011551D01*
+X026217Y011808D01*
+X026626Y012085D01*
+X027021Y012381D01*
+X027402Y012695D01*
+X027768Y013028D01*
+X028117Y013377D01*
+X028450Y013743D01*
+X028764Y014124D01*
+X029060Y014519D01*
+X029337Y014928D01*
+X029594Y015350D01*
+X029831Y015784D01*
+X030047Y016228D01*
+X030241Y016682D01*
+X030414Y017145D01*
+X030565Y017616D01*
+X030692Y018093D01*
+X030797Y018576D01*
+X030879Y019063D01*
+X030938Y019553D01*
+X030973Y020046D01*
+X030985Y020540D01*
+X036965Y020605D02*
+X036947Y021380D01*
+X036891Y022154D01*
+X036799Y022924D01*
+X036671Y023689D01*
+X036506Y024447D01*
+X036305Y025196D01*
+X036069Y025935D01*
+X035798Y026661D01*
+X035492Y027374D01*
+X035154Y028072D01*
+X034782Y028753D01*
+X034378Y029415D01*
+X033944Y030057D01*
+X033479Y030678D01*
+X032985Y031276D01*
+X032463Y031850D01*
+X031915Y032398D01*
+X031341Y032920D01*
+X030743Y033414D01*
+X030122Y033879D01*
+X029480Y034313D01*
+X028817Y034717D01*
+X028137Y035089D01*
+X027439Y035427D01*
+X026726Y035733D01*
+X026000Y036004D01*
+X025261Y036240D01*
+X024512Y036441D01*
+X023754Y036606D01*
+X022989Y036734D01*
+X022219Y036826D01*
+X021445Y036882D01*
+X020670Y036900D01*
+X020605Y039500D02*
+X019681Y039477D01*
+X018759Y039409D01*
+X017842Y039296D01*
+X016931Y039138D01*
+X016030Y038936D01*
+X015139Y038689D01*
+X014261Y038399D01*
+X013399Y038067D01*
+X012554Y037692D01*
+X011729Y037277D01*
+X010924Y036821D01*
+X010144Y036327D01*
+X009388Y035794D01*
+X008659Y035226D01*
+X007960Y034622D01*
+X007290Y033985D01*
+X006653Y033315D01*
+X006049Y032616D01*
+X005481Y031887D01*
+X004948Y031131D01*
+X004454Y030351D01*
+X003998Y029546D01*
+X003583Y028721D01*
+X003208Y027876D01*
+X002876Y027014D01*
+X002586Y026136D01*
+X002339Y025245D01*
+X002137Y024344D01*
+X001979Y023433D01*
+X001866Y022516D01*
+X001798Y021594D01*
+X001775Y020670D01*
+X001255Y020605D02*
+X001277Y019687D01*
+X001342Y018772D01*
+X001451Y017860D01*
+X001603Y016955D01*
+X001799Y016058D01*
+X002036Y015172D01*
+X002316Y014298D01*
+X002636Y013438D01*
+X002998Y012594D01*
+X003399Y011768D01*
+X003839Y010963D01*
+X004316Y010179D01*
+X004831Y009419D01*
+X005381Y008684D01*
+X005965Y007976D01*
+X006583Y007297D01*
+X007232Y006648D01*
+X007911Y006030D01*
+X008619Y005446D01*
+X009354Y004896D01*
+X010114Y004381D01*
+X010897Y003904D01*
+X011703Y003464D01*
+X012529Y003063D01*
+X013372Y002701D01*
+X014232Y002381D01*
+X015107Y002101D01*
+X015993Y001864D01*
+X016890Y001669D01*
+X017795Y001516D01*
+X018707Y001407D01*
+X019622Y001342D01*
+X020540Y001320D01*
+X020605Y010680D02*
+X021074Y010691D01*
+X021542Y010725D01*
+X022008Y010780D01*
+X022471Y010858D01*
+X022930Y010958D01*
+X023383Y011079D01*
+X023830Y011222D01*
+X024270Y011386D01*
+X024701Y011571D01*
+X025123Y011776D01*
+X025535Y012001D01*
+X025936Y012245D01*
+X026324Y012508D01*
+X026700Y012790D01*
+X027062Y013088D01*
+X027409Y013404D01*
+X027741Y013736D01*
+X028057Y014083D01*
+X028355Y014445D01*
+X028637Y014821D01*
+X028900Y015209D01*
+X029144Y015610D01*
+X029369Y016022D01*
+X029574Y016444D01*
+X029759Y016875D01*
+X029923Y017315D01*
+X030066Y017762D01*
+X030187Y018215D01*
+X030287Y018674D01*
+X030365Y019137D01*
+X030420Y019603D01*
+X030454Y020071D01*
+X030465Y020540D01*
+X033065Y020605D02*
+X033051Y021195D01*
+X033009Y021783D01*
+X032939Y022369D01*
+X032841Y022951D01*
+X032716Y023527D01*
+X032563Y024097D01*
+X032383Y024659D01*
+X032177Y025212D01*
+X031945Y025754D01*
+X031687Y026285D01*
+X031404Y026803D01*
+X031097Y027306D01*
+X030767Y027795D01*
+X030413Y028267D01*
+X030038Y028722D01*
+X029641Y029159D01*
+X029224Y029576D01*
+X028787Y029973D01*
+X028332Y030348D01*
+X027860Y030702D01*
+X027371Y031032D01*
+X026867Y031339D01*
+X026350Y031622D01*
+X025819Y031880D01*
+X025277Y032112D01*
+X024724Y032318D01*
+X024162Y032498D01*
+X023592Y032651D01*
+X023016Y032776D01*
+X022434Y032874D01*
+X021848Y032944D01*
+X021260Y032986D01*
+X020670Y033000D01*
+X020605Y028320D02*
+X020230Y028311D01*
+X019855Y028283D01*
+X019482Y028237D01*
+X019113Y028173D01*
+X018746Y028091D01*
+X018384Y027991D01*
+X018028Y027873D01*
+X017677Y027738D01*
+X017334Y027586D01*
+X016999Y027417D01*
+X016672Y027232D01*
+X016355Y027031D01*
+X016048Y026815D01*
+X015752Y026584D01*
+X015468Y026338D01*
+X015196Y026079D01*
+X014937Y025807D01*
+X014691Y025523D01*
+X014460Y025227D01*
+X014244Y024920D01*
+X014043Y024603D01*
+X013858Y024276D01*
+X013689Y023941D01*
+X013537Y023598D01*
+X013402Y023247D01*
+X013284Y022891D01*
+X013184Y022529D01*
+X013102Y022162D01*
+X013038Y021793D01*
+X012992Y021420D01*
+X012964Y021045D01*
+X012955Y020670D01*
+X009055Y020605D02*
+X009068Y020059D01*
+X009107Y019513D01*
+X009172Y018971D01*
+X009263Y018431D01*
+X009379Y017897D01*
+X009520Y017369D01*
+X009687Y016849D01*
+X009878Y016336D01*
+X010093Y015834D01*
+X010332Y015342D01*
+X010594Y014863D01*
+X010878Y014396D01*
+X011185Y013943D01*
+X011512Y013505D01*
+X011860Y013084D01*
+X012228Y012679D01*
+X012614Y012293D01*
+X013019Y011925D01*
+X013440Y011577D01*
+X013878Y011250D01*
+X014331Y010943D01*
+X014797Y010659D01*
+X015277Y010397D01*
+X015769Y010158D01*
+X016271Y009943D01*
+X016784Y009752D01*
+X017304Y009585D01*
+X017832Y009444D01*
+X018366Y009328D01*
+X018906Y009237D01*
+X019448Y009172D01*
+X019994Y009133D01*
+X020540Y009120D01*
+X020605Y003660D02*
+X021433Y003680D01*
+X022260Y003741D01*
+X023082Y003843D01*
+X023898Y003984D01*
+X024706Y004166D01*
+X025505Y004387D01*
+X026292Y004647D01*
+X027065Y004945D01*
+X027822Y005281D01*
+X028562Y005653D01*
+X029283Y006062D01*
+X029983Y006505D01*
+X030660Y006982D01*
+X031314Y007492D01*
+X031941Y008033D01*
+X032541Y008604D01*
+X033112Y009204D01*
+X033653Y009831D01*
+X034163Y010485D01*
+X034640Y011162D01*
+X035083Y011862D01*
+X035492Y012583D01*
+X035864Y013323D01*
+X036200Y014080D01*
+X036498Y014853D01*
+X036758Y015640D01*
+X036979Y016438D01*
+X037161Y017247D01*
+X037302Y018063D01*
+X037404Y018885D01*
+X037465Y019712D01*
+X037485Y020540D01*
+X030725Y020605D02*
+X030713Y021098D01*
+X030677Y021591D01*
+X030616Y022080D01*
+X030532Y022567D01*
+X030424Y023048D01*
+X030292Y023524D01*
+X030137Y023992D01*
+X029960Y024453D01*
+X029760Y024904D01*
+X029538Y025345D01*
+X029294Y025774D01*
+X029030Y026191D01*
+X028746Y026595D01*
+X028443Y026984D01*
+X028120Y027358D01*
+X027780Y027715D01*
+X027423Y028055D01*
+X027049Y028378D01*
+X026660Y028681D01*
+X026256Y028965D01*
+X025839Y029229D01*
+X025410Y029473D01*
+X024969Y029695D01*
+X024518Y029895D01*
+X024057Y030072D01*
+X023589Y030227D01*
+X023113Y030359D01*
+X022632Y030467D01*
+X022145Y030551D01*
+X021656Y030612D01*
+X021163Y030648D01*
+X020670Y030660D01*
+X020605Y034560D02*
+X019923Y034543D01*
+X019244Y034493D01*
+X018567Y034410D01*
+X017895Y034293D01*
+X017230Y034144D01*
+X016573Y033962D01*
+X015926Y033748D01*
+X015290Y033503D01*
+X014666Y033226D01*
+X014057Y032920D01*
+X013464Y032584D01*
+X012888Y032219D01*
+X012331Y031827D01*
+X011793Y031407D01*
+X011277Y030962D01*
+X010783Y030492D01*
+X010313Y029998D01*
+X009868Y029482D01*
+X009448Y028944D01*
+X009056Y028387D01*
+X008691Y027811D01*
+X008355Y027218D01*
+X008049Y026609D01*
+X007772Y025985D01*
+X007527Y025349D01*
+X007313Y024702D01*
+X007131Y024045D01*
+X006982Y023380D01*
+X006865Y022708D01*
+X006782Y022031D01*
+X006732Y021352D01*
+X006715Y020670D01*
+X010095Y020605D02*
+X010108Y020092D01*
+X010145Y019581D01*
+X010208Y019072D01*
+X010296Y018567D01*
+X010408Y018067D01*
+X010545Y017573D01*
+X010706Y017086D01*
+X010890Y016608D01*
+X011098Y016139D01*
+X011328Y015681D01*
+X011581Y015235D01*
+X011855Y014802D01*
+X012150Y014383D01*
+X012466Y013979D01*
+X012801Y013591D01*
+X013154Y013219D01*
+X013526Y012866D01*
+X013914Y012531D01*
+X014318Y012216D01*
+X014737Y011920D01*
+X015170Y011646D01*
+X015616Y011393D01*
+X016074Y011163D01*
+X016543Y010955D01*
+X017021Y010771D01*
+X017508Y010610D01*
+X018002Y010473D01*
+X018502Y010361D01*
+X019007Y010273D01*
+X019516Y010210D01*
+X020027Y010173D01*
+X020540Y010160D01*
+X020605Y011460D02*
+X021037Y011470D01*
+X021468Y011501D01*
+X021897Y011552D01*
+X022323Y011624D01*
+X022746Y011716D01*
+X023163Y011828D01*
+X023575Y011959D01*
+X023980Y012110D01*
+X024377Y012281D01*
+X024766Y012469D01*
+X025145Y012676D01*
+X025514Y012901D01*
+X025872Y013144D01*
+X026218Y013403D01*
+X026551Y013678D01*
+X026871Y013968D01*
+X027176Y014274D01*
+X027467Y014594D01*
+X027742Y014927D01*
+X028001Y015273D01*
+X028244Y015631D01*
+X028469Y016000D01*
+X028676Y016379D01*
+X028864Y016768D01*
+X029035Y017165D01*
+X029186Y017570D01*
+X029317Y017982D01*
+X029429Y018399D01*
+X029521Y018822D01*
+X029593Y019248D01*
+X029644Y019677D01*
+X029675Y020108D01*
+X029685Y020540D01*
+D16*
+X042855Y018105D03*
+X042855Y023105D03*
+D17*
+X027105Y020605D03*
+X026355Y020605D03*
+M02*
diff --git a/pcb/lf-antenna/CAM/lf-antenna.GTO b/pcb/lf-antenna/CAM/lf-antenna.GTO
new file mode 100644 (file)
index 0000000..0a0e96e
--- /dev/null
@@ -0,0 +1,1097 @@
+G75*
+G70*
+%OFA0B0*%
+%FSLAX24Y24*%
+%IPPOS*%
+%LPD*%
+%AMOC8*
+5,1,8,0,0,1.08239X$1,22.5*
+%
+%ADD10C,0.0010*%
+%ADD11C,0.0000*%
+%ADD12C,0.0050*%
+%ADD13C,0.0040*%
+%ADD14C,0.0080*%
+D10*
+X040496Y015646D02*
+X040231Y014683D01*
+X039920Y013735D01*
+X039562Y012803D01*
+X039160Y011890D01*
+X038714Y010997D01*
+X038225Y010127D01*
+X037694Y009282D01*
+X037122Y008463D01*
+X036512Y007674D01*
+X035864Y006915D01*
+X035179Y006188D01*
+X034460Y005496D01*
+X033708Y004839D01*
+X032925Y004220D01*
+X032113Y003640D01*
+X031274Y003100D01*
+X030409Y002601D01*
+X029521Y002146D01*
+X028612Y001733D01*
+X027684Y001366D01*
+X026739Y001044D01*
+X025780Y000769D01*
+X024808Y000541D01*
+X023827Y000360D01*
+X022838Y000227D01*
+X021843Y000142D01*
+X020846Y000106D01*
+X019847Y000119D01*
+X018851Y000180D01*
+X017859Y000290D01*
+X016874Y000447D01*
+X015897Y000653D01*
+X014931Y000906D01*
+X013979Y001205D01*
+X013043Y001551D01*
+X012124Y001941D01*
+X011226Y002376D01*
+X010350Y002854D01*
+X009498Y003375D01*
+X008672Y003936D01*
+X007875Y004536D01*
+X007108Y005175D01*
+X006373Y005850D01*
+X005672Y006560D01*
+X005006Y007304D01*
+X004377Y008079D01*
+X003787Y008884D01*
+X003236Y009716D01*
+X002727Y010574D01*
+X002260Y011457D01*
+X001836Y012360D01*
+X001457Y013284D01*
+X001123Y014224D01*
+X000836Y015180D01*
+X000595Y016149D01*
+X000402Y017128D01*
+X000257Y018116D01*
+X000160Y019109D01*
+X000111Y020106D01*
+X000111Y021104D01*
+X000160Y022101D01*
+X000257Y023094D01*
+X000402Y024082D01*
+X000595Y025061D01*
+X000836Y026030D01*
+X001123Y026986D01*
+X001457Y027926D01*
+X001836Y028850D01*
+X002260Y029753D01*
+X002727Y030636D01*
+X003236Y031494D01*
+X003787Y032326D01*
+X004377Y033131D01*
+X005006Y033906D01*
+X005672Y034650D01*
+X006373Y035360D01*
+X007108Y036035D01*
+X007875Y036674D01*
+X008672Y037274D01*
+X009498Y037835D01*
+X010350Y038356D01*
+X011226Y038834D01*
+X012124Y039269D01*
+X013043Y039659D01*
+X013979Y040005D01*
+X014931Y040304D01*
+X015897Y040557D01*
+X016874Y040763D01*
+X017859Y040920D01*
+X018851Y041030D01*
+X019847Y041091D01*
+X020846Y041104D01*
+X021843Y041068D01*
+X022838Y040983D01*
+X023827Y040850D01*
+X024808Y040669D01*
+X025780Y040441D01*
+X026739Y040166D01*
+X027684Y039844D01*
+X028612Y039477D01*
+X029521Y039064D01*
+X030409Y038609D01*
+X031274Y038110D01*
+X032113Y037570D01*
+X032925Y036990D01*
+X033708Y036371D01*
+X034460Y035714D01*
+X035179Y035022D01*
+X035864Y034295D01*
+X036512Y033536D01*
+X037122Y032747D01*
+X037694Y031928D01*
+X038225Y031083D01*
+X038714Y030213D01*
+X039160Y029320D01*
+X039562Y028407D01*
+X039920Y027475D01*
+X040231Y026527D01*
+X040496Y025564D01*
+X040510Y025515D01*
+X040527Y025467D01*
+X040548Y025421D01*
+X040572Y025376D01*
+X040599Y025333D01*
+X040629Y025291D01*
+X040662Y025252D01*
+X040697Y025216D01*
+X040735Y025182D01*
+X040775Y025150D01*
+X040817Y025122D01*
+X040862Y025096D01*
+X040907Y025074D01*
+X040955Y025055D01*
+X044355Y022105D02*
+X044355Y019105D01*
+X040955Y016105D02*
+X040908Y016091D01*
+X040862Y016074D01*
+X040818Y016054D01*
+X040776Y016030D01*
+X040736Y016002D01*
+X040697Y015972D01*
+X040662Y015939D01*
+X040629Y015903D01*
+X040598Y015865D01*
+X040571Y015825D01*
+X040547Y015782D01*
+X040527Y015738D01*
+X040509Y015692D01*
+X040496Y015646D01*
+X044355Y022105D02*
+X044204Y022372D01*
+X044040Y022632D01*
+X043864Y022883D01*
+X043676Y023125D01*
+X043476Y023358D01*
+X043265Y023581D01*
+X043043Y023793D01*
+X042811Y023994D01*
+X042570Y024183D01*
+X042319Y024361D01*
+X042061Y024526D01*
+X041794Y024678D01*
+X041521Y024818D01*
+X041241Y024943D01*
+X040955Y025055D01*
+X044355Y019105D02*
+X044265Y018887D01*
+X044164Y018674D01*
+X044053Y018467D01*
+X043932Y018264D01*
+X043802Y018068D01*
+X043663Y017878D01*
+X043515Y017695D01*
+X043358Y017519D01*
+X043193Y017351D01*
+X043020Y017191D01*
+X042840Y017039D01*
+X042652Y016896D01*
+X042459Y016763D01*
+X042258Y016638D01*
+X042053Y016524D01*
+X041842Y016419D01*
+X041626Y016325D01*
+X041406Y016241D01*
+X041182Y016167D01*
+X040955Y016105D01*
+D11*
+X017834Y018484D02*
+X017836Y018534D01*
+X017842Y018584D01*
+X017852Y018634D01*
+X017865Y018682D01*
+X017882Y018730D01*
+X017903Y018776D01*
+X017927Y018820D01*
+X017955Y018862D01*
+X017986Y018902D01*
+X018020Y018939D01*
+X018057Y018974D01*
+X018096Y019005D01*
+X018137Y019034D01*
+X018181Y019059D01*
+X018227Y019081D01*
+X018274Y019099D01*
+X018322Y019113D01*
+X018371Y019124D01*
+X018421Y019131D01*
+X018471Y019134D01*
+X018522Y019133D01*
+X018572Y019128D01*
+X018622Y019119D01*
+X018670Y019107D01*
+X018718Y019090D01*
+X018764Y019070D01*
+X018809Y019047D01*
+X018852Y019020D01*
+X018892Y018990D01*
+X018930Y018957D01*
+X018965Y018921D01*
+X018998Y018882D01*
+X019027Y018841D01*
+X019053Y018798D01*
+X019076Y018753D01*
+X019095Y018706D01*
+X019110Y018658D01*
+X019122Y018609D01*
+X019130Y018559D01*
+X019134Y018509D01*
+X019134Y018459D01*
+X019130Y018409D01*
+X019122Y018359D01*
+X019110Y018310D01*
+X019095Y018262D01*
+X019076Y018215D01*
+X019053Y018170D01*
+X019027Y018127D01*
+X018998Y018086D01*
+X018965Y018047D01*
+X018930Y018011D01*
+X018892Y017978D01*
+X018852Y017948D01*
+X018809Y017921D01*
+X018764Y017898D01*
+X018718Y017878D01*
+X018670Y017861D01*
+X018622Y017849D01*
+X018572Y017840D01*
+X018522Y017835D01*
+X018471Y017834D01*
+X018421Y017837D01*
+X018371Y017844D01*
+X018322Y017855D01*
+X018274Y017869D01*
+X018227Y017887D01*
+X018181Y017909D01*
+X018137Y017934D01*
+X018096Y017963D01*
+X018057Y017994D01*
+X018020Y018029D01*
+X017986Y018066D01*
+X017955Y018106D01*
+X017927Y018148D01*
+X017903Y018192D01*
+X017882Y018238D01*
+X017865Y018286D01*
+X017852Y018334D01*
+X017842Y018384D01*
+X017836Y018434D01*
+X017834Y018484D01*
+X016955Y020605D02*
+X016957Y020655D01*
+X016963Y020705D01*
+X016973Y020755D01*
+X016986Y020803D01*
+X017003Y020851D01*
+X017024Y020897D01*
+X017048Y020941D01*
+X017076Y020983D01*
+X017107Y021023D01*
+X017141Y021060D01*
+X017178Y021095D01*
+X017217Y021126D01*
+X017258Y021155D01*
+X017302Y021180D01*
+X017348Y021202D01*
+X017395Y021220D01*
+X017443Y021234D01*
+X017492Y021245D01*
+X017542Y021252D01*
+X017592Y021255D01*
+X017643Y021254D01*
+X017693Y021249D01*
+X017743Y021240D01*
+X017791Y021228D01*
+X017839Y021211D01*
+X017885Y021191D01*
+X017930Y021168D01*
+X017973Y021141D01*
+X018013Y021111D01*
+X018051Y021078D01*
+X018086Y021042D01*
+X018119Y021003D01*
+X018148Y020962D01*
+X018174Y020919D01*
+X018197Y020874D01*
+X018216Y020827D01*
+X018231Y020779D01*
+X018243Y020730D01*
+X018251Y020680D01*
+X018255Y020630D01*
+X018255Y020580D01*
+X018251Y020530D01*
+X018243Y020480D01*
+X018231Y020431D01*
+X018216Y020383D01*
+X018197Y020336D01*
+X018174Y020291D01*
+X018148Y020248D01*
+X018119Y020207D01*
+X018086Y020168D01*
+X018051Y020132D01*
+X018013Y020099D01*
+X017973Y020069D01*
+X017930Y020042D01*
+X017885Y020019D01*
+X017839Y019999D01*
+X017791Y019982D01*
+X017743Y019970D01*
+X017693Y019961D01*
+X017643Y019956D01*
+X017592Y019955D01*
+X017542Y019958D01*
+X017492Y019965D01*
+X017443Y019976D01*
+X017395Y019990D01*
+X017348Y020008D01*
+X017302Y020030D01*
+X017258Y020055D01*
+X017217Y020084D01*
+X017178Y020115D01*
+X017141Y020150D01*
+X017107Y020187D01*
+X017076Y020227D01*
+X017048Y020269D01*
+X017024Y020313D01*
+X017003Y020359D01*
+X016986Y020407D01*
+X016973Y020455D01*
+X016963Y020505D01*
+X016957Y020555D01*
+X016955Y020605D01*
+X017834Y022726D02*
+X017836Y022776D01*
+X017842Y022826D01*
+X017852Y022876D01*
+X017865Y022924D01*
+X017882Y022972D01*
+X017903Y023018D01*
+X017927Y023062D01*
+X017955Y023104D01*
+X017986Y023144D01*
+X018020Y023181D01*
+X018057Y023216D01*
+X018096Y023247D01*
+X018137Y023276D01*
+X018181Y023301D01*
+X018227Y023323D01*
+X018274Y023341D01*
+X018322Y023355D01*
+X018371Y023366D01*
+X018421Y023373D01*
+X018471Y023376D01*
+X018522Y023375D01*
+X018572Y023370D01*
+X018622Y023361D01*
+X018670Y023349D01*
+X018718Y023332D01*
+X018764Y023312D01*
+X018809Y023289D01*
+X018852Y023262D01*
+X018892Y023232D01*
+X018930Y023199D01*
+X018965Y023163D01*
+X018998Y023124D01*
+X019027Y023083D01*
+X019053Y023040D01*
+X019076Y022995D01*
+X019095Y022948D01*
+X019110Y022900D01*
+X019122Y022851D01*
+X019130Y022801D01*
+X019134Y022751D01*
+X019134Y022701D01*
+X019130Y022651D01*
+X019122Y022601D01*
+X019110Y022552D01*
+X019095Y022504D01*
+X019076Y022457D01*
+X019053Y022412D01*
+X019027Y022369D01*
+X018998Y022328D01*
+X018965Y022289D01*
+X018930Y022253D01*
+X018892Y022220D01*
+X018852Y022190D01*
+X018809Y022163D01*
+X018764Y022140D01*
+X018718Y022120D01*
+X018670Y022103D01*
+X018622Y022091D01*
+X018572Y022082D01*
+X018522Y022077D01*
+X018471Y022076D01*
+X018421Y022079D01*
+X018371Y022086D01*
+X018322Y022097D01*
+X018274Y022111D01*
+X018227Y022129D01*
+X018181Y022151D01*
+X018137Y022176D01*
+X018096Y022205D01*
+X018057Y022236D01*
+X018020Y022271D01*
+X017986Y022308D01*
+X017955Y022348D01*
+X017927Y022390D01*
+X017903Y022434D01*
+X017882Y022480D01*
+X017865Y022528D01*
+X017852Y022576D01*
+X017842Y022626D01*
+X017836Y022676D01*
+X017834Y022726D01*
+X019955Y023605D02*
+X019957Y023655D01*
+X019963Y023705D01*
+X019973Y023755D01*
+X019986Y023803D01*
+X020003Y023851D01*
+X020024Y023897D01*
+X020048Y023941D01*
+X020076Y023983D01*
+X020107Y024023D01*
+X020141Y024060D01*
+X020178Y024095D01*
+X020217Y024126D01*
+X020258Y024155D01*
+X020302Y024180D01*
+X020348Y024202D01*
+X020395Y024220D01*
+X020443Y024234D01*
+X020492Y024245D01*
+X020542Y024252D01*
+X020592Y024255D01*
+X020643Y024254D01*
+X020693Y024249D01*
+X020743Y024240D01*
+X020791Y024228D01*
+X020839Y024211D01*
+X020885Y024191D01*
+X020930Y024168D01*
+X020973Y024141D01*
+X021013Y024111D01*
+X021051Y024078D01*
+X021086Y024042D01*
+X021119Y024003D01*
+X021148Y023962D01*
+X021174Y023919D01*
+X021197Y023874D01*
+X021216Y023827D01*
+X021231Y023779D01*
+X021243Y023730D01*
+X021251Y023680D01*
+X021255Y023630D01*
+X021255Y023580D01*
+X021251Y023530D01*
+X021243Y023480D01*
+X021231Y023431D01*
+X021216Y023383D01*
+X021197Y023336D01*
+X021174Y023291D01*
+X021148Y023248D01*
+X021119Y023207D01*
+X021086Y023168D01*
+X021051Y023132D01*
+X021013Y023099D01*
+X020973Y023069D01*
+X020930Y023042D01*
+X020885Y023019D01*
+X020839Y022999D01*
+X020791Y022982D01*
+X020743Y022970D01*
+X020693Y022961D01*
+X020643Y022956D01*
+X020592Y022955D01*
+X020542Y022958D01*
+X020492Y022965D01*
+X020443Y022976D01*
+X020395Y022990D01*
+X020348Y023008D01*
+X020302Y023030D01*
+X020258Y023055D01*
+X020217Y023084D01*
+X020178Y023115D01*
+X020141Y023150D01*
+X020107Y023187D01*
+X020076Y023227D01*
+X020048Y023269D01*
+X020024Y023313D01*
+X020003Y023359D01*
+X019986Y023407D01*
+X019973Y023455D01*
+X019963Y023505D01*
+X019957Y023555D01*
+X019955Y023605D01*
+X022076Y022726D02*
+X022078Y022776D01*
+X022084Y022826D01*
+X022094Y022876D01*
+X022107Y022924D01*
+X022124Y022972D01*
+X022145Y023018D01*
+X022169Y023062D01*
+X022197Y023104D01*
+X022228Y023144D01*
+X022262Y023181D01*
+X022299Y023216D01*
+X022338Y023247D01*
+X022379Y023276D01*
+X022423Y023301D01*
+X022469Y023323D01*
+X022516Y023341D01*
+X022564Y023355D01*
+X022613Y023366D01*
+X022663Y023373D01*
+X022713Y023376D01*
+X022764Y023375D01*
+X022814Y023370D01*
+X022864Y023361D01*
+X022912Y023349D01*
+X022960Y023332D01*
+X023006Y023312D01*
+X023051Y023289D01*
+X023094Y023262D01*
+X023134Y023232D01*
+X023172Y023199D01*
+X023207Y023163D01*
+X023240Y023124D01*
+X023269Y023083D01*
+X023295Y023040D01*
+X023318Y022995D01*
+X023337Y022948D01*
+X023352Y022900D01*
+X023364Y022851D01*
+X023372Y022801D01*
+X023376Y022751D01*
+X023376Y022701D01*
+X023372Y022651D01*
+X023364Y022601D01*
+X023352Y022552D01*
+X023337Y022504D01*
+X023318Y022457D01*
+X023295Y022412D01*
+X023269Y022369D01*
+X023240Y022328D01*
+X023207Y022289D01*
+X023172Y022253D01*
+X023134Y022220D01*
+X023094Y022190D01*
+X023051Y022163D01*
+X023006Y022140D01*
+X022960Y022120D01*
+X022912Y022103D01*
+X022864Y022091D01*
+X022814Y022082D01*
+X022764Y022077D01*
+X022713Y022076D01*
+X022663Y022079D01*
+X022613Y022086D01*
+X022564Y022097D01*
+X022516Y022111D01*
+X022469Y022129D01*
+X022423Y022151D01*
+X022379Y022176D01*
+X022338Y022205D01*
+X022299Y022236D01*
+X022262Y022271D01*
+X022228Y022308D01*
+X022197Y022348D01*
+X022169Y022390D01*
+X022145Y022434D01*
+X022124Y022480D01*
+X022107Y022528D01*
+X022094Y022576D01*
+X022084Y022626D01*
+X022078Y022676D01*
+X022076Y022726D01*
+X019955Y020605D02*
+X019957Y020655D01*
+X019963Y020705D01*
+X019973Y020755D01*
+X019986Y020803D01*
+X020003Y020851D01*
+X020024Y020897D01*
+X020048Y020941D01*
+X020076Y020983D01*
+X020107Y021023D01*
+X020141Y021060D01*
+X020178Y021095D01*
+X020217Y021126D01*
+X020258Y021155D01*
+X020302Y021180D01*
+X020348Y021202D01*
+X020395Y021220D01*
+X020443Y021234D01*
+X020492Y021245D01*
+X020542Y021252D01*
+X020592Y021255D01*
+X020643Y021254D01*
+X020693Y021249D01*
+X020743Y021240D01*
+X020791Y021228D01*
+X020839Y021211D01*
+X020885Y021191D01*
+X020930Y021168D01*
+X020973Y021141D01*
+X021013Y021111D01*
+X021051Y021078D01*
+X021086Y021042D01*
+X021119Y021003D01*
+X021148Y020962D01*
+X021174Y020919D01*
+X021197Y020874D01*
+X021216Y020827D01*
+X021231Y020779D01*
+X021243Y020730D01*
+X021251Y020680D01*
+X021255Y020630D01*
+X021255Y020580D01*
+X021251Y020530D01*
+X021243Y020480D01*
+X021231Y020431D01*
+X021216Y020383D01*
+X021197Y020336D01*
+X021174Y020291D01*
+X021148Y020248D01*
+X021119Y020207D01*
+X021086Y020168D01*
+X021051Y020132D01*
+X021013Y020099D01*
+X020973Y020069D01*
+X020930Y020042D01*
+X020885Y020019D01*
+X020839Y019999D01*
+X020791Y019982D01*
+X020743Y019970D01*
+X020693Y019961D01*
+X020643Y019956D01*
+X020592Y019955D01*
+X020542Y019958D01*
+X020492Y019965D01*
+X020443Y019976D01*
+X020395Y019990D01*
+X020348Y020008D01*
+X020302Y020030D01*
+X020258Y020055D01*
+X020217Y020084D01*
+X020178Y020115D01*
+X020141Y020150D01*
+X020107Y020187D01*
+X020076Y020227D01*
+X020048Y020269D01*
+X020024Y020313D01*
+X020003Y020359D01*
+X019986Y020407D01*
+X019973Y020455D01*
+X019963Y020505D01*
+X019957Y020555D01*
+X019955Y020605D01*
+X022076Y018484D02*
+X022078Y018534D01*
+X022084Y018584D01*
+X022094Y018634D01*
+X022107Y018682D01*
+X022124Y018730D01*
+X022145Y018776D01*
+X022169Y018820D01*
+X022197Y018862D01*
+X022228Y018902D01*
+X022262Y018939D01*
+X022299Y018974D01*
+X022338Y019005D01*
+X022379Y019034D01*
+X022423Y019059D01*
+X022469Y019081D01*
+X022516Y019099D01*
+X022564Y019113D01*
+X022613Y019124D01*
+X022663Y019131D01*
+X022713Y019134D01*
+X022764Y019133D01*
+X022814Y019128D01*
+X022864Y019119D01*
+X022912Y019107D01*
+X022960Y019090D01*
+X023006Y019070D01*
+X023051Y019047D01*
+X023094Y019020D01*
+X023134Y018990D01*
+X023172Y018957D01*
+X023207Y018921D01*
+X023240Y018882D01*
+X023269Y018841D01*
+X023295Y018798D01*
+X023318Y018753D01*
+X023337Y018706D01*
+X023352Y018658D01*
+X023364Y018609D01*
+X023372Y018559D01*
+X023376Y018509D01*
+X023376Y018459D01*
+X023372Y018409D01*
+X023364Y018359D01*
+X023352Y018310D01*
+X023337Y018262D01*
+X023318Y018215D01*
+X023295Y018170D01*
+X023269Y018127D01*
+X023240Y018086D01*
+X023207Y018047D01*
+X023172Y018011D01*
+X023134Y017978D01*
+X023094Y017948D01*
+X023051Y017921D01*
+X023006Y017898D01*
+X022960Y017878D01*
+X022912Y017861D01*
+X022864Y017849D01*
+X022814Y017840D01*
+X022764Y017835D01*
+X022713Y017834D01*
+X022663Y017837D01*
+X022613Y017844D01*
+X022564Y017855D01*
+X022516Y017869D01*
+X022469Y017887D01*
+X022423Y017909D01*
+X022379Y017934D01*
+X022338Y017963D01*
+X022299Y017994D01*
+X022262Y018029D01*
+X022228Y018066D01*
+X022197Y018106D01*
+X022169Y018148D01*
+X022145Y018192D01*
+X022124Y018238D01*
+X022107Y018286D01*
+X022094Y018334D01*
+X022084Y018384D01*
+X022078Y018434D01*
+X022076Y018484D01*
+X019955Y017605D02*
+X019957Y017655D01*
+X019963Y017705D01*
+X019973Y017755D01*
+X019986Y017803D01*
+X020003Y017851D01*
+X020024Y017897D01*
+X020048Y017941D01*
+X020076Y017983D01*
+X020107Y018023D01*
+X020141Y018060D01*
+X020178Y018095D01*
+X020217Y018126D01*
+X020258Y018155D01*
+X020302Y018180D01*
+X020348Y018202D01*
+X020395Y018220D01*
+X020443Y018234D01*
+X020492Y018245D01*
+X020542Y018252D01*
+X020592Y018255D01*
+X020643Y018254D01*
+X020693Y018249D01*
+X020743Y018240D01*
+X020791Y018228D01*
+X020839Y018211D01*
+X020885Y018191D01*
+X020930Y018168D01*
+X020973Y018141D01*
+X021013Y018111D01*
+X021051Y018078D01*
+X021086Y018042D01*
+X021119Y018003D01*
+X021148Y017962D01*
+X021174Y017919D01*
+X021197Y017874D01*
+X021216Y017827D01*
+X021231Y017779D01*
+X021243Y017730D01*
+X021251Y017680D01*
+X021255Y017630D01*
+X021255Y017580D01*
+X021251Y017530D01*
+X021243Y017480D01*
+X021231Y017431D01*
+X021216Y017383D01*
+X021197Y017336D01*
+X021174Y017291D01*
+X021148Y017248D01*
+X021119Y017207D01*
+X021086Y017168D01*
+X021051Y017132D01*
+X021013Y017099D01*
+X020973Y017069D01*
+X020930Y017042D01*
+X020885Y017019D01*
+X020839Y016999D01*
+X020791Y016982D01*
+X020743Y016970D01*
+X020693Y016961D01*
+X020643Y016956D01*
+X020592Y016955D01*
+X020542Y016958D01*
+X020492Y016965D01*
+X020443Y016976D01*
+X020395Y016990D01*
+X020348Y017008D01*
+X020302Y017030D01*
+X020258Y017055D01*
+X020217Y017084D01*
+X020178Y017115D01*
+X020141Y017150D01*
+X020107Y017187D01*
+X020076Y017227D01*
+X020048Y017269D01*
+X020024Y017313D01*
+X020003Y017359D01*
+X019986Y017407D01*
+X019973Y017455D01*
+X019963Y017505D01*
+X019957Y017555D01*
+X019955Y017605D01*
+X022955Y020605D02*
+X022957Y020655D01*
+X022963Y020705D01*
+X022973Y020755D01*
+X022986Y020803D01*
+X023003Y020851D01*
+X023024Y020897D01*
+X023048Y020941D01*
+X023076Y020983D01*
+X023107Y021023D01*
+X023141Y021060D01*
+X023178Y021095D01*
+X023217Y021126D01*
+X023258Y021155D01*
+X023302Y021180D01*
+X023348Y021202D01*
+X023395Y021220D01*
+X023443Y021234D01*
+X023492Y021245D01*
+X023542Y021252D01*
+X023592Y021255D01*
+X023643Y021254D01*
+X023693Y021249D01*
+X023743Y021240D01*
+X023791Y021228D01*
+X023839Y021211D01*
+X023885Y021191D01*
+X023930Y021168D01*
+X023973Y021141D01*
+X024013Y021111D01*
+X024051Y021078D01*
+X024086Y021042D01*
+X024119Y021003D01*
+X024148Y020962D01*
+X024174Y020919D01*
+X024197Y020874D01*
+X024216Y020827D01*
+X024231Y020779D01*
+X024243Y020730D01*
+X024251Y020680D01*
+X024255Y020630D01*
+X024255Y020580D01*
+X024251Y020530D01*
+X024243Y020480D01*
+X024231Y020431D01*
+X024216Y020383D01*
+X024197Y020336D01*
+X024174Y020291D01*
+X024148Y020248D01*
+X024119Y020207D01*
+X024086Y020168D01*
+X024051Y020132D01*
+X024013Y020099D01*
+X023973Y020069D01*
+X023930Y020042D01*
+X023885Y020019D01*
+X023839Y019999D01*
+X023791Y019982D01*
+X023743Y019970D01*
+X023693Y019961D01*
+X023643Y019956D01*
+X023592Y019955D01*
+X023542Y019958D01*
+X023492Y019965D01*
+X023443Y019976D01*
+X023395Y019990D01*
+X023348Y020008D01*
+X023302Y020030D01*
+X023258Y020055D01*
+X023217Y020084D01*
+X023178Y020115D01*
+X023141Y020150D01*
+X023107Y020187D01*
+X023076Y020227D01*
+X023048Y020269D01*
+X023024Y020313D01*
+X023003Y020359D01*
+X022986Y020407D01*
+X022973Y020455D01*
+X022963Y020505D01*
+X022957Y020555D01*
+X022955Y020605D01*
+X042741Y020014D02*
+X042743Y020041D01*
+X042749Y020068D01*
+X042758Y020094D01*
+X042771Y020118D01*
+X042787Y020141D01*
+X042806Y020160D01*
+X042828Y020177D01*
+X042852Y020191D01*
+X042877Y020201D01*
+X042904Y020208D01*
+X042931Y020211D01*
+X042959Y020210D01*
+X042986Y020205D01*
+X043012Y020197D01*
+X043036Y020185D01*
+X043059Y020169D01*
+X043080Y020151D01*
+X043097Y020130D01*
+X043112Y020106D01*
+X043123Y020081D01*
+X043131Y020055D01*
+X043135Y020028D01*
+X043135Y020000D01*
+X043131Y019973D01*
+X043123Y019947D01*
+X043112Y019922D01*
+X043097Y019898D01*
+X043080Y019877D01*
+X043059Y019859D01*
+X043037Y019843D01*
+X043012Y019831D01*
+X042986Y019823D01*
+X042959Y019818D01*
+X042931Y019817D01*
+X042904Y019820D01*
+X042877Y019827D01*
+X042852Y019837D01*
+X042828Y019851D01*
+X042806Y019868D01*
+X042787Y019887D01*
+X042771Y019910D01*
+X042758Y019934D01*
+X042749Y019960D01*
+X042743Y019987D01*
+X042741Y020014D01*
+X042741Y021196D02*
+X042743Y021223D01*
+X042749Y021250D01*
+X042758Y021276D01*
+X042771Y021300D01*
+X042787Y021323D01*
+X042806Y021342D01*
+X042828Y021359D01*
+X042852Y021373D01*
+X042877Y021383D01*
+X042904Y021390D01*
+X042931Y021393D01*
+X042959Y021392D01*
+X042986Y021387D01*
+X043012Y021379D01*
+X043036Y021367D01*
+X043059Y021351D01*
+X043080Y021333D01*
+X043097Y021312D01*
+X043112Y021288D01*
+X043123Y021263D01*
+X043131Y021237D01*
+X043135Y021210D01*
+X043135Y021182D01*
+X043131Y021155D01*
+X043123Y021129D01*
+X043112Y021104D01*
+X043097Y021080D01*
+X043080Y021059D01*
+X043059Y021041D01*
+X043037Y021025D01*
+X043012Y021013D01*
+X042986Y021005D01*
+X042959Y021000D01*
+X042931Y020999D01*
+X042904Y021002D01*
+X042877Y021009D01*
+X042852Y021019D01*
+X042828Y021033D01*
+X042806Y021050D01*
+X042787Y021069D01*
+X042771Y021092D01*
+X042758Y021116D01*
+X042749Y021142D01*
+X042743Y021169D01*
+X042741Y021196D01*
+D12*
+X043686Y021865D02*
+X043686Y022022D01*
+X044355Y022022D01*
+X044355Y019188D01*
+X043686Y019188D01*
+X043686Y019345D01*
+D13*
+X043833Y019526D02*
+X043910Y019526D01*
+X043987Y019603D01*
+X043987Y019756D01*
+X044064Y019833D01*
+X044140Y019833D01*
+X044217Y019756D01*
+X044217Y019603D01*
+X044140Y019526D01*
+X043833Y019526D02*
+X043757Y019603D01*
+X043757Y019756D01*
+X043833Y019833D01*
+X043757Y019986D02*
+X044064Y019986D01*
+X044217Y020140D01*
+X044064Y020293D01*
+X043757Y020293D01*
+X043910Y020447D02*
+X043757Y020600D01*
+X044217Y020600D01*
+X044217Y020447D02*
+X044217Y020754D01*
+D14*
+X041948Y022857D02*
+X041855Y023389D01*
+X040712Y023187D01*
+X040806Y022656D01*
+X041948Y022857D01*
+X041836Y023497D02*
+X041742Y024029D01*
+X040599Y023828D01*
+X040693Y023296D01*
+X041836Y023497D01*
+X041723Y024137D02*
+X041629Y024669D01*
+X040487Y024468D01*
+X040580Y023936D01*
+X041723Y024137D01*
+X040798Y018553D02*
+X041940Y018351D01*
+X041846Y017819D01*
+X040704Y018021D01*
+X040798Y018553D01*
+X040685Y017912D02*
+X041827Y017711D01*
+X041733Y017179D01*
+X040591Y017381D01*
+X040685Y017912D01*
+X040572Y017272D02*
+X041714Y017071D01*
+X041621Y016539D01*
+X040478Y016741D01*
+X040572Y017272D01*
+M02*
diff --git a/pcb/lf-antenna/CAM/lf-antenna.GTP b/pcb/lf-antenna/CAM/lf-antenna.GTP
new file mode 100644 (file)
index 0000000..97906c0
--- /dev/null
@@ -0,0 +1,1128 @@
+G75*
+G70*
+%OFA0B0*%
+%FSLAX24Y24*%
+%IPPOS*%
+%LPD*%
+%AMOC8*
+5,1,8,0,0,1.08239X$1,22.5*
+%
+%ADD10C,0.0010*%
+%ADD11C,0.0000*%
+%ADD12R,0.1496X0.0906*%
+%ADD13R,0.0984X0.0217*%
+%ADD14R,0.0394X0.0433*%
+D10*
+X040496Y015646D02*
+X040231Y014683D01*
+X039920Y013735D01*
+X039562Y012803D01*
+X039160Y011890D01*
+X038714Y010997D01*
+X038225Y010127D01*
+X037694Y009282D01*
+X037122Y008463D01*
+X036512Y007674D01*
+X035864Y006915D01*
+X035179Y006188D01*
+X034460Y005496D01*
+X033708Y004839D01*
+X032925Y004220D01*
+X032113Y003640D01*
+X031274Y003100D01*
+X030409Y002601D01*
+X029521Y002146D01*
+X028612Y001733D01*
+X027684Y001366D01*
+X026739Y001044D01*
+X025780Y000769D01*
+X024808Y000541D01*
+X023827Y000360D01*
+X022838Y000227D01*
+X021843Y000142D01*
+X020846Y000106D01*
+X019847Y000119D01*
+X018851Y000180D01*
+X017859Y000290D01*
+X016874Y000447D01*
+X015897Y000653D01*
+X014931Y000906D01*
+X013979Y001205D01*
+X013043Y001551D01*
+X012124Y001941D01*
+X011226Y002376D01*
+X010350Y002854D01*
+X009498Y003375D01*
+X008672Y003936D01*
+X007875Y004536D01*
+X007108Y005175D01*
+X006373Y005850D01*
+X005672Y006560D01*
+X005006Y007304D01*
+X004377Y008079D01*
+X003787Y008884D01*
+X003236Y009716D01*
+X002727Y010574D01*
+X002260Y011457D01*
+X001836Y012360D01*
+X001457Y013284D01*
+X001123Y014224D01*
+X000836Y015180D01*
+X000595Y016149D01*
+X000402Y017128D01*
+X000257Y018116D01*
+X000160Y019109D01*
+X000111Y020106D01*
+X000111Y021104D01*
+X000160Y022101D01*
+X000257Y023094D01*
+X000402Y024082D01*
+X000595Y025061D01*
+X000836Y026030D01*
+X001123Y026986D01*
+X001457Y027926D01*
+X001836Y028850D01*
+X002260Y029753D01*
+X002727Y030636D01*
+X003236Y031494D01*
+X003787Y032326D01*
+X004377Y033131D01*
+X005006Y033906D01*
+X005672Y034650D01*
+X006373Y035360D01*
+X007108Y036035D01*
+X007875Y036674D01*
+X008672Y037274D01*
+X009498Y037835D01*
+X010350Y038356D01*
+X011226Y038834D01*
+X012124Y039269D01*
+X013043Y039659D01*
+X013979Y040005D01*
+X014931Y040304D01*
+X015897Y040557D01*
+X016874Y040763D01*
+X017859Y040920D01*
+X018851Y041030D01*
+X019847Y041091D01*
+X020846Y041104D01*
+X021843Y041068D01*
+X022838Y040983D01*
+X023827Y040850D01*
+X024808Y040669D01*
+X025780Y040441D01*
+X026739Y040166D01*
+X027684Y039844D01*
+X028612Y039477D01*
+X029521Y039064D01*
+X030409Y038609D01*
+X031274Y038110D01*
+X032113Y037570D01*
+X032925Y036990D01*
+X033708Y036371D01*
+X034460Y035714D01*
+X035179Y035022D01*
+X035864Y034295D01*
+X036512Y033536D01*
+X037122Y032747D01*
+X037694Y031928D01*
+X038225Y031083D01*
+X038714Y030213D01*
+X039160Y029320D01*
+X039562Y028407D01*
+X039920Y027475D01*
+X040231Y026527D01*
+X040496Y025564D01*
+X040510Y025515D01*
+X040527Y025467D01*
+X040548Y025421D01*
+X040572Y025376D01*
+X040599Y025333D01*
+X040629Y025291D01*
+X040662Y025252D01*
+X040697Y025216D01*
+X040735Y025182D01*
+X040775Y025150D01*
+X040817Y025122D01*
+X040862Y025096D01*
+X040907Y025074D01*
+X040955Y025055D01*
+X044355Y022105D02*
+X044355Y019105D01*
+X040955Y016105D02*
+X040908Y016091D01*
+X040862Y016074D01*
+X040818Y016054D01*
+X040776Y016030D01*
+X040736Y016002D01*
+X040697Y015972D01*
+X040662Y015939D01*
+X040629Y015903D01*
+X040598Y015865D01*
+X040571Y015825D01*
+X040547Y015782D01*
+X040527Y015738D01*
+X040509Y015692D01*
+X040496Y015646D01*
+X044355Y022105D02*
+X044204Y022372D01*
+X044040Y022632D01*
+X043864Y022883D01*
+X043676Y023125D01*
+X043476Y023358D01*
+X043265Y023581D01*
+X043043Y023793D01*
+X042811Y023994D01*
+X042570Y024183D01*
+X042319Y024361D01*
+X042061Y024526D01*
+X041794Y024678D01*
+X041521Y024818D01*
+X041241Y024943D01*
+X040955Y025055D01*
+X044355Y019105D02*
+X044265Y018887D01*
+X044164Y018674D01*
+X044053Y018467D01*
+X043932Y018264D01*
+X043802Y018068D01*
+X043663Y017878D01*
+X043515Y017695D01*
+X043358Y017519D01*
+X043193Y017351D01*
+X043020Y017191D01*
+X042840Y017039D01*
+X042652Y016896D01*
+X042459Y016763D01*
+X042258Y016638D01*
+X042053Y016524D01*
+X041842Y016419D01*
+X041626Y016325D01*
+X041406Y016241D01*
+X041182Y016167D01*
+X040955Y016105D01*
+D11*
+X017834Y018484D02*
+X017836Y018534D01*
+X017842Y018584D01*
+X017852Y018634D01*
+X017865Y018682D01*
+X017882Y018730D01*
+X017903Y018776D01*
+X017927Y018820D01*
+X017955Y018862D01*
+X017986Y018902D01*
+X018020Y018939D01*
+X018057Y018974D01*
+X018096Y019005D01*
+X018137Y019034D01*
+X018181Y019059D01*
+X018227Y019081D01*
+X018274Y019099D01*
+X018322Y019113D01*
+X018371Y019124D01*
+X018421Y019131D01*
+X018471Y019134D01*
+X018522Y019133D01*
+X018572Y019128D01*
+X018622Y019119D01*
+X018670Y019107D01*
+X018718Y019090D01*
+X018764Y019070D01*
+X018809Y019047D01*
+X018852Y019020D01*
+X018892Y018990D01*
+X018930Y018957D01*
+X018965Y018921D01*
+X018998Y018882D01*
+X019027Y018841D01*
+X019053Y018798D01*
+X019076Y018753D01*
+X019095Y018706D01*
+X019110Y018658D01*
+X019122Y018609D01*
+X019130Y018559D01*
+X019134Y018509D01*
+X019134Y018459D01*
+X019130Y018409D01*
+X019122Y018359D01*
+X019110Y018310D01*
+X019095Y018262D01*
+X019076Y018215D01*
+X019053Y018170D01*
+X019027Y018127D01*
+X018998Y018086D01*
+X018965Y018047D01*
+X018930Y018011D01*
+X018892Y017978D01*
+X018852Y017948D01*
+X018809Y017921D01*
+X018764Y017898D01*
+X018718Y017878D01*
+X018670Y017861D01*
+X018622Y017849D01*
+X018572Y017840D01*
+X018522Y017835D01*
+X018471Y017834D01*
+X018421Y017837D01*
+X018371Y017844D01*
+X018322Y017855D01*
+X018274Y017869D01*
+X018227Y017887D01*
+X018181Y017909D01*
+X018137Y017934D01*
+X018096Y017963D01*
+X018057Y017994D01*
+X018020Y018029D01*
+X017986Y018066D01*
+X017955Y018106D01*
+X017927Y018148D01*
+X017903Y018192D01*
+X017882Y018238D01*
+X017865Y018286D01*
+X017852Y018334D01*
+X017842Y018384D01*
+X017836Y018434D01*
+X017834Y018484D01*
+X016955Y020605D02*
+X016957Y020655D01*
+X016963Y020705D01*
+X016973Y020755D01*
+X016986Y020803D01*
+X017003Y020851D01*
+X017024Y020897D01*
+X017048Y020941D01*
+X017076Y020983D01*
+X017107Y021023D01*
+X017141Y021060D01*
+X017178Y021095D01*
+X017217Y021126D01*
+X017258Y021155D01*
+X017302Y021180D01*
+X017348Y021202D01*
+X017395Y021220D01*
+X017443Y021234D01*
+X017492Y021245D01*
+X017542Y021252D01*
+X017592Y021255D01*
+X017643Y021254D01*
+X017693Y021249D01*
+X017743Y021240D01*
+X017791Y021228D01*
+X017839Y021211D01*
+X017885Y021191D01*
+X017930Y021168D01*
+X017973Y021141D01*
+X018013Y021111D01*
+X018051Y021078D01*
+X018086Y021042D01*
+X018119Y021003D01*
+X018148Y020962D01*
+X018174Y020919D01*
+X018197Y020874D01*
+X018216Y020827D01*
+X018231Y020779D01*
+X018243Y020730D01*
+X018251Y020680D01*
+X018255Y020630D01*
+X018255Y020580D01*
+X018251Y020530D01*
+X018243Y020480D01*
+X018231Y020431D01*
+X018216Y020383D01*
+X018197Y020336D01*
+X018174Y020291D01*
+X018148Y020248D01*
+X018119Y020207D01*
+X018086Y020168D01*
+X018051Y020132D01*
+X018013Y020099D01*
+X017973Y020069D01*
+X017930Y020042D01*
+X017885Y020019D01*
+X017839Y019999D01*
+X017791Y019982D01*
+X017743Y019970D01*
+X017693Y019961D01*
+X017643Y019956D01*
+X017592Y019955D01*
+X017542Y019958D01*
+X017492Y019965D01*
+X017443Y019976D01*
+X017395Y019990D01*
+X017348Y020008D01*
+X017302Y020030D01*
+X017258Y020055D01*
+X017217Y020084D01*
+X017178Y020115D01*
+X017141Y020150D01*
+X017107Y020187D01*
+X017076Y020227D01*
+X017048Y020269D01*
+X017024Y020313D01*
+X017003Y020359D01*
+X016986Y020407D01*
+X016973Y020455D01*
+X016963Y020505D01*
+X016957Y020555D01*
+X016955Y020605D01*
+X017834Y022726D02*
+X017836Y022776D01*
+X017842Y022826D01*
+X017852Y022876D01*
+X017865Y022924D01*
+X017882Y022972D01*
+X017903Y023018D01*
+X017927Y023062D01*
+X017955Y023104D01*
+X017986Y023144D01*
+X018020Y023181D01*
+X018057Y023216D01*
+X018096Y023247D01*
+X018137Y023276D01*
+X018181Y023301D01*
+X018227Y023323D01*
+X018274Y023341D01*
+X018322Y023355D01*
+X018371Y023366D01*
+X018421Y023373D01*
+X018471Y023376D01*
+X018522Y023375D01*
+X018572Y023370D01*
+X018622Y023361D01*
+X018670Y023349D01*
+X018718Y023332D01*
+X018764Y023312D01*
+X018809Y023289D01*
+X018852Y023262D01*
+X018892Y023232D01*
+X018930Y023199D01*
+X018965Y023163D01*
+X018998Y023124D01*
+X019027Y023083D01*
+X019053Y023040D01*
+X019076Y022995D01*
+X019095Y022948D01*
+X019110Y022900D01*
+X019122Y022851D01*
+X019130Y022801D01*
+X019134Y022751D01*
+X019134Y022701D01*
+X019130Y022651D01*
+X019122Y022601D01*
+X019110Y022552D01*
+X019095Y022504D01*
+X019076Y022457D01*
+X019053Y022412D01*
+X019027Y022369D01*
+X018998Y022328D01*
+X018965Y022289D01*
+X018930Y022253D01*
+X018892Y022220D01*
+X018852Y022190D01*
+X018809Y022163D01*
+X018764Y022140D01*
+X018718Y022120D01*
+X018670Y022103D01*
+X018622Y022091D01*
+X018572Y022082D01*
+X018522Y022077D01*
+X018471Y022076D01*
+X018421Y022079D01*
+X018371Y022086D01*
+X018322Y022097D01*
+X018274Y022111D01*
+X018227Y022129D01*
+X018181Y022151D01*
+X018137Y022176D01*
+X018096Y022205D01*
+X018057Y022236D01*
+X018020Y022271D01*
+X017986Y022308D01*
+X017955Y022348D01*
+X017927Y022390D01*
+X017903Y022434D01*
+X017882Y022480D01*
+X017865Y022528D01*
+X017852Y022576D01*
+X017842Y022626D01*
+X017836Y022676D01*
+X017834Y022726D01*
+X019955Y023605D02*
+X019957Y023655D01*
+X019963Y023705D01*
+X019973Y023755D01*
+X019986Y023803D01*
+X020003Y023851D01*
+X020024Y023897D01*
+X020048Y023941D01*
+X020076Y023983D01*
+X020107Y024023D01*
+X020141Y024060D01*
+X020178Y024095D01*
+X020217Y024126D01*
+X020258Y024155D01*
+X020302Y024180D01*
+X020348Y024202D01*
+X020395Y024220D01*
+X020443Y024234D01*
+X020492Y024245D01*
+X020542Y024252D01*
+X020592Y024255D01*
+X020643Y024254D01*
+X020693Y024249D01*
+X020743Y024240D01*
+X020791Y024228D01*
+X020839Y024211D01*
+X020885Y024191D01*
+X020930Y024168D01*
+X020973Y024141D01*
+X021013Y024111D01*
+X021051Y024078D01*
+X021086Y024042D01*
+X021119Y024003D01*
+X021148Y023962D01*
+X021174Y023919D01*
+X021197Y023874D01*
+X021216Y023827D01*
+X021231Y023779D01*
+X021243Y023730D01*
+X021251Y023680D01*
+X021255Y023630D01*
+X021255Y023580D01*
+X021251Y023530D01*
+X021243Y023480D01*
+X021231Y023431D01*
+X021216Y023383D01*
+X021197Y023336D01*
+X021174Y023291D01*
+X021148Y023248D01*
+X021119Y023207D01*
+X021086Y023168D01*
+X021051Y023132D01*
+X021013Y023099D01*
+X020973Y023069D01*
+X020930Y023042D01*
+X020885Y023019D01*
+X020839Y022999D01*
+X020791Y022982D01*
+X020743Y022970D01*
+X020693Y022961D01*
+X020643Y022956D01*
+X020592Y022955D01*
+X020542Y022958D01*
+X020492Y022965D01*
+X020443Y022976D01*
+X020395Y022990D01*
+X020348Y023008D01*
+X020302Y023030D01*
+X020258Y023055D01*
+X020217Y023084D01*
+X020178Y023115D01*
+X020141Y023150D01*
+X020107Y023187D01*
+X020076Y023227D01*
+X020048Y023269D01*
+X020024Y023313D01*
+X020003Y023359D01*
+X019986Y023407D01*
+X019973Y023455D01*
+X019963Y023505D01*
+X019957Y023555D01*
+X019955Y023605D01*
+X022076Y022726D02*
+X022078Y022776D01*
+X022084Y022826D01*
+X022094Y022876D01*
+X022107Y022924D01*
+X022124Y022972D01*
+X022145Y023018D01*
+X022169Y023062D01*
+X022197Y023104D01*
+X022228Y023144D01*
+X022262Y023181D01*
+X022299Y023216D01*
+X022338Y023247D01*
+X022379Y023276D01*
+X022423Y023301D01*
+X022469Y023323D01*
+X022516Y023341D01*
+X022564Y023355D01*
+X022613Y023366D01*
+X022663Y023373D01*
+X022713Y023376D01*
+X022764Y023375D01*
+X022814Y023370D01*
+X022864Y023361D01*
+X022912Y023349D01*
+X022960Y023332D01*
+X023006Y023312D01*
+X023051Y023289D01*
+X023094Y023262D01*
+X023134Y023232D01*
+X023172Y023199D01*
+X023207Y023163D01*
+X023240Y023124D01*
+X023269Y023083D01*
+X023295Y023040D01*
+X023318Y022995D01*
+X023337Y022948D01*
+X023352Y022900D01*
+X023364Y022851D01*
+X023372Y022801D01*
+X023376Y022751D01*
+X023376Y022701D01*
+X023372Y022651D01*
+X023364Y022601D01*
+X023352Y022552D01*
+X023337Y022504D01*
+X023318Y022457D01*
+X023295Y022412D01*
+X023269Y022369D01*
+X023240Y022328D01*
+X023207Y022289D01*
+X023172Y022253D01*
+X023134Y022220D01*
+X023094Y022190D01*
+X023051Y022163D01*
+X023006Y022140D01*
+X022960Y022120D01*
+X022912Y022103D01*
+X022864Y022091D01*
+X022814Y022082D01*
+X022764Y022077D01*
+X022713Y022076D01*
+X022663Y022079D01*
+X022613Y022086D01*
+X022564Y022097D01*
+X022516Y022111D01*
+X022469Y022129D01*
+X022423Y022151D01*
+X022379Y022176D01*
+X022338Y022205D01*
+X022299Y022236D01*
+X022262Y022271D01*
+X022228Y022308D01*
+X022197Y022348D01*
+X022169Y022390D01*
+X022145Y022434D01*
+X022124Y022480D01*
+X022107Y022528D01*
+X022094Y022576D01*
+X022084Y022626D01*
+X022078Y022676D01*
+X022076Y022726D01*
+X019955Y020605D02*
+X019957Y020655D01*
+X019963Y020705D01*
+X019973Y020755D01*
+X019986Y020803D01*
+X020003Y020851D01*
+X020024Y020897D01*
+X020048Y020941D01*
+X020076Y020983D01*
+X020107Y021023D01*
+X020141Y021060D01*
+X020178Y021095D01*
+X020217Y021126D01*
+X020258Y021155D01*
+X020302Y021180D01*
+X020348Y021202D01*
+X020395Y021220D01*
+X020443Y021234D01*
+X020492Y021245D01*
+X020542Y021252D01*
+X020592Y021255D01*
+X020643Y021254D01*
+X020693Y021249D01*
+X020743Y021240D01*
+X020791Y021228D01*
+X020839Y021211D01*
+X020885Y021191D01*
+X020930Y021168D01*
+X020973Y021141D01*
+X021013Y021111D01*
+X021051Y021078D01*
+X021086Y021042D01*
+X021119Y021003D01*
+X021148Y020962D01*
+X021174Y020919D01*
+X021197Y020874D01*
+X021216Y020827D01*
+X021231Y020779D01*
+X021243Y020730D01*
+X021251Y020680D01*
+X021255Y020630D01*
+X021255Y020580D01*
+X021251Y020530D01*
+X021243Y020480D01*
+X021231Y020431D01*
+X021216Y020383D01*
+X021197Y020336D01*
+X021174Y020291D01*
+X021148Y020248D01*
+X021119Y020207D01*
+X021086Y020168D01*
+X021051Y020132D01*
+X021013Y020099D01*
+X020973Y020069D01*
+X020930Y020042D01*
+X020885Y020019D01*
+X020839Y019999D01*
+X020791Y019982D01*
+X020743Y019970D01*
+X020693Y019961D01*
+X020643Y019956D01*
+X020592Y019955D01*
+X020542Y019958D01*
+X020492Y019965D01*
+X020443Y019976D01*
+X020395Y019990D01*
+X020348Y020008D01*
+X020302Y020030D01*
+X020258Y020055D01*
+X020217Y020084D01*
+X020178Y020115D01*
+X020141Y020150D01*
+X020107Y020187D01*
+X020076Y020227D01*
+X020048Y020269D01*
+X020024Y020313D01*
+X020003Y020359D01*
+X019986Y020407D01*
+X019973Y020455D01*
+X019963Y020505D01*
+X019957Y020555D01*
+X019955Y020605D01*
+X022076Y018484D02*
+X022078Y018534D01*
+X022084Y018584D01*
+X022094Y018634D01*
+X022107Y018682D01*
+X022124Y018730D01*
+X022145Y018776D01*
+X022169Y018820D01*
+X022197Y018862D01*
+X022228Y018902D01*
+X022262Y018939D01*
+X022299Y018974D01*
+X022338Y019005D01*
+X022379Y019034D01*
+X022423Y019059D01*
+X022469Y019081D01*
+X022516Y019099D01*
+X022564Y019113D01*
+X022613Y019124D01*
+X022663Y019131D01*
+X022713Y019134D01*
+X022764Y019133D01*
+X022814Y019128D01*
+X022864Y019119D01*
+X022912Y019107D01*
+X022960Y019090D01*
+X023006Y019070D01*
+X023051Y019047D01*
+X023094Y019020D01*
+X023134Y018990D01*
+X023172Y018957D01*
+X023207Y018921D01*
+X023240Y018882D01*
+X023269Y018841D01*
+X023295Y018798D01*
+X023318Y018753D01*
+X023337Y018706D01*
+X023352Y018658D01*
+X023364Y018609D01*
+X023372Y018559D01*
+X023376Y018509D01*
+X023376Y018459D01*
+X023372Y018409D01*
+X023364Y018359D01*
+X023352Y018310D01*
+X023337Y018262D01*
+X023318Y018215D01*
+X023295Y018170D01*
+X023269Y018127D01*
+X023240Y018086D01*
+X023207Y018047D01*
+X023172Y018011D01*
+X023134Y017978D01*
+X023094Y017948D01*
+X023051Y017921D01*
+X023006Y017898D01*
+X022960Y017878D01*
+X022912Y017861D01*
+X022864Y017849D01*
+X022814Y017840D01*
+X022764Y017835D01*
+X022713Y017834D01*
+X022663Y017837D01*
+X022613Y017844D01*
+X022564Y017855D01*
+X022516Y017869D01*
+X022469Y017887D01*
+X022423Y017909D01*
+X022379Y017934D01*
+X022338Y017963D01*
+X022299Y017994D01*
+X022262Y018029D01*
+X022228Y018066D01*
+X022197Y018106D01*
+X022169Y018148D01*
+X022145Y018192D01*
+X022124Y018238D01*
+X022107Y018286D01*
+X022094Y018334D01*
+X022084Y018384D01*
+X022078Y018434D01*
+X022076Y018484D01*
+X019955Y017605D02*
+X019957Y017655D01*
+X019963Y017705D01*
+X019973Y017755D01*
+X019986Y017803D01*
+X020003Y017851D01*
+X020024Y017897D01*
+X020048Y017941D01*
+X020076Y017983D01*
+X020107Y018023D01*
+X020141Y018060D01*
+X020178Y018095D01*
+X020217Y018126D01*
+X020258Y018155D01*
+X020302Y018180D01*
+X020348Y018202D01*
+X020395Y018220D01*
+X020443Y018234D01*
+X020492Y018245D01*
+X020542Y018252D01*
+X020592Y018255D01*
+X020643Y018254D01*
+X020693Y018249D01*
+X020743Y018240D01*
+X020791Y018228D01*
+X020839Y018211D01*
+X020885Y018191D01*
+X020930Y018168D01*
+X020973Y018141D01*
+X021013Y018111D01*
+X021051Y018078D01*
+X021086Y018042D01*
+X021119Y018003D01*
+X021148Y017962D01*
+X021174Y017919D01*
+X021197Y017874D01*
+X021216Y017827D01*
+X021231Y017779D01*
+X021243Y017730D01*
+X021251Y017680D01*
+X021255Y017630D01*
+X021255Y017580D01*
+X021251Y017530D01*
+X021243Y017480D01*
+X021231Y017431D01*
+X021216Y017383D01*
+X021197Y017336D01*
+X021174Y017291D01*
+X021148Y017248D01*
+X021119Y017207D01*
+X021086Y017168D01*
+X021051Y017132D01*
+X021013Y017099D01*
+X020973Y017069D01*
+X020930Y017042D01*
+X020885Y017019D01*
+X020839Y016999D01*
+X020791Y016982D01*
+X020743Y016970D01*
+X020693Y016961D01*
+X020643Y016956D01*
+X020592Y016955D01*
+X020542Y016958D01*
+X020492Y016965D01*
+X020443Y016976D01*
+X020395Y016990D01*
+X020348Y017008D01*
+X020302Y017030D01*
+X020258Y017055D01*
+X020217Y017084D01*
+X020178Y017115D01*
+X020141Y017150D01*
+X020107Y017187D01*
+X020076Y017227D01*
+X020048Y017269D01*
+X020024Y017313D01*
+X020003Y017359D01*
+X019986Y017407D01*
+X019973Y017455D01*
+X019963Y017505D01*
+X019957Y017555D01*
+X019955Y017605D01*
+X022955Y020605D02*
+X022957Y020655D01*
+X022963Y020705D01*
+X022973Y020755D01*
+X022986Y020803D01*
+X023003Y020851D01*
+X023024Y020897D01*
+X023048Y020941D01*
+X023076Y020983D01*
+X023107Y021023D01*
+X023141Y021060D01*
+X023178Y021095D01*
+X023217Y021126D01*
+X023258Y021155D01*
+X023302Y021180D01*
+X023348Y021202D01*
+X023395Y021220D01*
+X023443Y021234D01*
+X023492Y021245D01*
+X023542Y021252D01*
+X023592Y021255D01*
+X023643Y021254D01*
+X023693Y021249D01*
+X023743Y021240D01*
+X023791Y021228D01*
+X023839Y021211D01*
+X023885Y021191D01*
+X023930Y021168D01*
+X023973Y021141D01*
+X024013Y021111D01*
+X024051Y021078D01*
+X024086Y021042D01*
+X024119Y021003D01*
+X024148Y020962D01*
+X024174Y020919D01*
+X024197Y020874D01*
+X024216Y020827D01*
+X024231Y020779D01*
+X024243Y020730D01*
+X024251Y020680D01*
+X024255Y020630D01*
+X024255Y020580D01*
+X024251Y020530D01*
+X024243Y020480D01*
+X024231Y020431D01*
+X024216Y020383D01*
+X024197Y020336D01*
+X024174Y020291D01*
+X024148Y020248D01*
+X024119Y020207D01*
+X024086Y020168D01*
+X024051Y020132D01*
+X024013Y020099D01*
+X023973Y020069D01*
+X023930Y020042D01*
+X023885Y020019D01*
+X023839Y019999D01*
+X023791Y019982D01*
+X023743Y019970D01*
+X023693Y019961D01*
+X023643Y019956D01*
+X023592Y019955D01*
+X023542Y019958D01*
+X023492Y019965D01*
+X023443Y019976D01*
+X023395Y019990D01*
+X023348Y020008D01*
+X023302Y020030D01*
+X023258Y020055D01*
+X023217Y020084D01*
+X023178Y020115D01*
+X023141Y020150D01*
+X023107Y020187D01*
+X023076Y020227D01*
+X023048Y020269D01*
+X023024Y020313D01*
+X023003Y020359D01*
+X022986Y020407D01*
+X022973Y020455D01*
+X022963Y020505D01*
+X022957Y020555D01*
+X022955Y020605D01*
+X042741Y020014D02*
+X042743Y020041D01*
+X042749Y020068D01*
+X042758Y020094D01*
+X042771Y020118D01*
+X042787Y020141D01*
+X042806Y020160D01*
+X042828Y020177D01*
+X042852Y020191D01*
+X042877Y020201D01*
+X042904Y020208D01*
+X042931Y020211D01*
+X042959Y020210D01*
+X042986Y020205D01*
+X043012Y020197D01*
+X043036Y020185D01*
+X043059Y020169D01*
+X043080Y020151D01*
+X043097Y020130D01*
+X043112Y020106D01*
+X043123Y020081D01*
+X043131Y020055D01*
+X043135Y020028D01*
+X043135Y020000D01*
+X043131Y019973D01*
+X043123Y019947D01*
+X043112Y019922D01*
+X043097Y019898D01*
+X043080Y019877D01*
+X043059Y019859D01*
+X043037Y019843D01*
+X043012Y019831D01*
+X042986Y019823D01*
+X042959Y019818D01*
+X042931Y019817D01*
+X042904Y019820D01*
+X042877Y019827D01*
+X042852Y019837D01*
+X042828Y019851D01*
+X042806Y019868D01*
+X042787Y019887D01*
+X042771Y019910D01*
+X042758Y019934D01*
+X042749Y019960D01*
+X042743Y019987D01*
+X042741Y020014D01*
+X042741Y021196D02*
+X042743Y021223D01*
+X042749Y021250D01*
+X042758Y021276D01*
+X042771Y021300D01*
+X042787Y021323D01*
+X042806Y021342D01*
+X042828Y021359D01*
+X042852Y021373D01*
+X042877Y021383D01*
+X042904Y021390D01*
+X042931Y021393D01*
+X042959Y021392D01*
+X042986Y021387D01*
+X043012Y021379D01*
+X043036Y021367D01*
+X043059Y021351D01*
+X043080Y021333D01*
+X043097Y021312D01*
+X043112Y021288D01*
+X043123Y021263D01*
+X043131Y021237D01*
+X043135Y021210D01*
+X043135Y021182D01*
+X043131Y021155D01*
+X043123Y021129D01*
+X043112Y021104D01*
+X043097Y021080D01*
+X043080Y021059D01*
+X043059Y021041D01*
+X043037Y021025D01*
+X043012Y021013D01*
+X042986Y021005D01*
+X042959Y021000D01*
+X042931Y020999D01*
+X042904Y021002D01*
+X042877Y021009D01*
+X042852Y021019D01*
+X042828Y021033D01*
+X042806Y021050D01*
+X042787Y021069D01*
+X042771Y021092D01*
+X042758Y021116D01*
+X042749Y021142D01*
+X042743Y021169D01*
+X042741Y021196D01*
+D12*
+X042603Y022121D03*
+X042603Y019089D03*
+D13*
+X041698Y020133D03*
+X041698Y020448D03*
+X041698Y020762D03*
+X041698Y021077D03*
+D14*
+G36*
+X040770Y023142D02*
+X041157Y023210D01*
+X041232Y022786D01*
+X040845Y022718D01*
+X040770Y023142D01*
+G37*
+G36*
+X040657Y023782D02*
+X041044Y023850D01*
+X041119Y023426D01*
+X040732Y023358D01*
+X040657Y023782D01*
+G37*
+G36*
+X040544Y024422D02*
+X040931Y024490D01*
+X041006Y024066D01*
+X040619Y023998D01*
+X040544Y024422D01*
+G37*
+G36*
+X041203Y024539D02*
+X041590Y024607D01*
+X041665Y024183D01*
+X041278Y024115D01*
+X041203Y024539D01*
+G37*
+G36*
+X041316Y023898D02*
+X041703Y023966D01*
+X041778Y023542D01*
+X041391Y023474D01*
+X041316Y023898D01*
+G37*
+G36*
+X041429Y023258D02*
+X041816Y023326D01*
+X041891Y022902D01*
+X041504Y022834D01*
+X041429Y023258D01*
+G37*
+G36*
+X040836Y018490D02*
+X041223Y018422D01*
+X041148Y017998D01*
+X040761Y018066D01*
+X040836Y018490D01*
+G37*
+G36*
+X041496Y018374D02*
+X041883Y018306D01*
+X041808Y017882D01*
+X041421Y017950D01*
+X041496Y018374D01*
+G37*
+G36*
+X041383Y017734D02*
+X041770Y017666D01*
+X041695Y017242D01*
+X041308Y017310D01*
+X041383Y017734D01*
+G37*
+G36*
+X040724Y017850D02*
+X041111Y017782D01*
+X041036Y017358D01*
+X040649Y017426D01*
+X040724Y017850D01*
+G37*
+G36*
+X040611Y017210D02*
+X040998Y017142D01*
+X040923Y016718D01*
+X040536Y016786D01*
+X040611Y017210D01*
+G37*
+G36*
+X041270Y017094D02*
+X041657Y017026D01*
+X041582Y016602D01*
+X041195Y016670D01*
+X041270Y017094D01*
+G37*
+M02*
diff --git a/pcb/lf-antenna/CAM/lf-antenna.GTS b/pcb/lf-antenna/CAM/lf-antenna.GTS
new file mode 100644 (file)
index 0000000..63cc5e5
--- /dev/null
@@ -0,0 +1,1151 @@
+G75*
+G70*
+%OFA0B0*%
+%FSLAX24Y24*%
+%IPPOS*%
+%LPD*%
+%AMOC8*
+5,1,8,0,0,1.08239X$1,22.5*
+%
+%ADD10C,0.0010*%
+%ADD11C,0.0000*%
+%ADD12C,0.1379*%
+%ADD13R,0.1576X0.0986*%
+%ADD14R,0.1064X0.0297*%
+%ADD15C,0.0474*%
+%ADD16R,0.0474X0.0513*%
+%ADD17C,0.0780*%
+%ADD18C,0.0671*%
+D10*
+X040496Y015646D02*
+X040231Y014683D01*
+X039920Y013735D01*
+X039562Y012803D01*
+X039160Y011890D01*
+X038714Y010997D01*
+X038225Y010127D01*
+X037694Y009282D01*
+X037122Y008463D01*
+X036512Y007674D01*
+X035864Y006915D01*
+X035179Y006188D01*
+X034460Y005496D01*
+X033708Y004839D01*
+X032925Y004220D01*
+X032113Y003640D01*
+X031274Y003100D01*
+X030409Y002601D01*
+X029521Y002146D01*
+X028612Y001733D01*
+X027684Y001366D01*
+X026739Y001044D01*
+X025780Y000769D01*
+X024808Y000541D01*
+X023827Y000360D01*
+X022838Y000227D01*
+X021843Y000142D01*
+X020846Y000106D01*
+X019847Y000119D01*
+X018851Y000180D01*
+X017859Y000290D01*
+X016874Y000447D01*
+X015897Y000653D01*
+X014931Y000906D01*
+X013979Y001205D01*
+X013043Y001551D01*
+X012124Y001941D01*
+X011226Y002376D01*
+X010350Y002854D01*
+X009498Y003375D01*
+X008672Y003936D01*
+X007875Y004536D01*
+X007108Y005175D01*
+X006373Y005850D01*
+X005672Y006560D01*
+X005006Y007304D01*
+X004377Y008079D01*
+X003787Y008884D01*
+X003236Y009716D01*
+X002727Y010574D01*
+X002260Y011457D01*
+X001836Y012360D01*
+X001457Y013284D01*
+X001123Y014224D01*
+X000836Y015180D01*
+X000595Y016149D01*
+X000402Y017128D01*
+X000257Y018116D01*
+X000160Y019109D01*
+X000111Y020106D01*
+X000111Y021104D01*
+X000160Y022101D01*
+X000257Y023094D01*
+X000402Y024082D01*
+X000595Y025061D01*
+X000836Y026030D01*
+X001123Y026986D01*
+X001457Y027926D01*
+X001836Y028850D01*
+X002260Y029753D01*
+X002727Y030636D01*
+X003236Y031494D01*
+X003787Y032326D01*
+X004377Y033131D01*
+X005006Y033906D01*
+X005672Y034650D01*
+X006373Y035360D01*
+X007108Y036035D01*
+X007875Y036674D01*
+X008672Y037274D01*
+X009498Y037835D01*
+X010350Y038356D01*
+X011226Y038834D01*
+X012124Y039269D01*
+X013043Y039659D01*
+X013979Y040005D01*
+X014931Y040304D01*
+X015897Y040557D01*
+X016874Y040763D01*
+X017859Y040920D01*
+X018851Y041030D01*
+X019847Y041091D01*
+X020846Y041104D01*
+X021843Y041068D01*
+X022838Y040983D01*
+X023827Y040850D01*
+X024808Y040669D01*
+X025780Y040441D01*
+X026739Y040166D01*
+X027684Y039844D01*
+X028612Y039477D01*
+X029521Y039064D01*
+X030409Y038609D01*
+X031274Y038110D01*
+X032113Y037570D01*
+X032925Y036990D01*
+X033708Y036371D01*
+X034460Y035714D01*
+X035179Y035022D01*
+X035864Y034295D01*
+X036512Y033536D01*
+X037122Y032747D01*
+X037694Y031928D01*
+X038225Y031083D01*
+X038714Y030213D01*
+X039160Y029320D01*
+X039562Y028407D01*
+X039920Y027475D01*
+X040231Y026527D01*
+X040496Y025564D01*
+X040510Y025515D01*
+X040527Y025467D01*
+X040548Y025421D01*
+X040572Y025376D01*
+X040599Y025333D01*
+X040629Y025291D01*
+X040662Y025252D01*
+X040697Y025216D01*
+X040735Y025182D01*
+X040775Y025150D01*
+X040817Y025122D01*
+X040862Y025096D01*
+X040907Y025074D01*
+X040955Y025055D01*
+X044355Y022105D02*
+X044355Y019105D01*
+X040955Y016105D02*
+X040908Y016091D01*
+X040862Y016074D01*
+X040818Y016054D01*
+X040776Y016030D01*
+X040736Y016002D01*
+X040697Y015972D01*
+X040662Y015939D01*
+X040629Y015903D01*
+X040598Y015865D01*
+X040571Y015825D01*
+X040547Y015782D01*
+X040527Y015738D01*
+X040509Y015692D01*
+X040496Y015646D01*
+X044355Y022105D02*
+X044204Y022372D01*
+X044040Y022632D01*
+X043864Y022883D01*
+X043676Y023125D01*
+X043476Y023358D01*
+X043265Y023581D01*
+X043043Y023793D01*
+X042811Y023994D01*
+X042570Y024183D01*
+X042319Y024361D01*
+X042061Y024526D01*
+X041794Y024678D01*
+X041521Y024818D01*
+X041241Y024943D01*
+X040955Y025055D01*
+X044355Y019105D02*
+X044265Y018887D01*
+X044164Y018674D01*
+X044053Y018467D01*
+X043932Y018264D01*
+X043802Y018068D01*
+X043663Y017878D01*
+X043515Y017695D01*
+X043358Y017519D01*
+X043193Y017351D01*
+X043020Y017191D01*
+X042840Y017039D01*
+X042652Y016896D01*
+X042459Y016763D01*
+X042258Y016638D01*
+X042053Y016524D01*
+X041842Y016419D01*
+X041626Y016325D01*
+X041406Y016241D01*
+X041182Y016167D01*
+X040955Y016105D01*
+D11*
+X042741Y020014D02*
+X042743Y020041D01*
+X042749Y020068D01*
+X042758Y020094D01*
+X042771Y020118D01*
+X042787Y020141D01*
+X042806Y020160D01*
+X042828Y020177D01*
+X042852Y020191D01*
+X042877Y020201D01*
+X042904Y020208D01*
+X042931Y020211D01*
+X042959Y020210D01*
+X042986Y020205D01*
+X043012Y020197D01*
+X043036Y020185D01*
+X043059Y020169D01*
+X043080Y020151D01*
+X043097Y020130D01*
+X043112Y020106D01*
+X043123Y020081D01*
+X043131Y020055D01*
+X043135Y020028D01*
+X043135Y020000D01*
+X043131Y019973D01*
+X043123Y019947D01*
+X043112Y019922D01*
+X043097Y019898D01*
+X043080Y019877D01*
+X043059Y019859D01*
+X043037Y019843D01*
+X043012Y019831D01*
+X042986Y019823D01*
+X042959Y019818D01*
+X042931Y019817D01*
+X042904Y019820D01*
+X042877Y019827D01*
+X042852Y019837D01*
+X042828Y019851D01*
+X042806Y019868D01*
+X042787Y019887D01*
+X042771Y019910D01*
+X042758Y019934D01*
+X042749Y019960D01*
+X042743Y019987D01*
+X042741Y020014D01*
+X042741Y021196D02*
+X042743Y021223D01*
+X042749Y021250D01*
+X042758Y021276D01*
+X042771Y021300D01*
+X042787Y021323D01*
+X042806Y021342D01*
+X042828Y021359D01*
+X042852Y021373D01*
+X042877Y021383D01*
+X042904Y021390D01*
+X042931Y021393D01*
+X042959Y021392D01*
+X042986Y021387D01*
+X043012Y021379D01*
+X043036Y021367D01*
+X043059Y021351D01*
+X043080Y021333D01*
+X043097Y021312D01*
+X043112Y021288D01*
+X043123Y021263D01*
+X043131Y021237D01*
+X043135Y021210D01*
+X043135Y021182D01*
+X043131Y021155D01*
+X043123Y021129D01*
+X043112Y021104D01*
+X043097Y021080D01*
+X043080Y021059D01*
+X043059Y021041D01*
+X043037Y021025D01*
+X043012Y021013D01*
+X042986Y021005D01*
+X042959Y021000D01*
+X042931Y020999D01*
+X042904Y021002D01*
+X042877Y021009D01*
+X042852Y021019D01*
+X042828Y021033D01*
+X042806Y021050D01*
+X042787Y021069D01*
+X042771Y021092D01*
+X042758Y021116D01*
+X042749Y021142D01*
+X042743Y021169D01*
+X042741Y021196D01*
+X022955Y020605D02*
+X022957Y020655D01*
+X022963Y020705D01*
+X022973Y020755D01*
+X022986Y020803D01*
+X023003Y020851D01*
+X023024Y020897D01*
+X023048Y020941D01*
+X023076Y020983D01*
+X023107Y021023D01*
+X023141Y021060D01*
+X023178Y021095D01*
+X023217Y021126D01*
+X023258Y021155D01*
+X023302Y021180D01*
+X023348Y021202D01*
+X023395Y021220D01*
+X023443Y021234D01*
+X023492Y021245D01*
+X023542Y021252D01*
+X023592Y021255D01*
+X023643Y021254D01*
+X023693Y021249D01*
+X023743Y021240D01*
+X023791Y021228D01*
+X023839Y021211D01*
+X023885Y021191D01*
+X023930Y021168D01*
+X023973Y021141D01*
+X024013Y021111D01*
+X024051Y021078D01*
+X024086Y021042D01*
+X024119Y021003D01*
+X024148Y020962D01*
+X024174Y020919D01*
+X024197Y020874D01*
+X024216Y020827D01*
+X024231Y020779D01*
+X024243Y020730D01*
+X024251Y020680D01*
+X024255Y020630D01*
+X024255Y020580D01*
+X024251Y020530D01*
+X024243Y020480D01*
+X024231Y020431D01*
+X024216Y020383D01*
+X024197Y020336D01*
+X024174Y020291D01*
+X024148Y020248D01*
+X024119Y020207D01*
+X024086Y020168D01*
+X024051Y020132D01*
+X024013Y020099D01*
+X023973Y020069D01*
+X023930Y020042D01*
+X023885Y020019D01*
+X023839Y019999D01*
+X023791Y019982D01*
+X023743Y019970D01*
+X023693Y019961D01*
+X023643Y019956D01*
+X023592Y019955D01*
+X023542Y019958D01*
+X023492Y019965D01*
+X023443Y019976D01*
+X023395Y019990D01*
+X023348Y020008D01*
+X023302Y020030D01*
+X023258Y020055D01*
+X023217Y020084D01*
+X023178Y020115D01*
+X023141Y020150D01*
+X023107Y020187D01*
+X023076Y020227D01*
+X023048Y020269D01*
+X023024Y020313D01*
+X023003Y020359D01*
+X022986Y020407D01*
+X022973Y020455D01*
+X022963Y020505D01*
+X022957Y020555D01*
+X022955Y020605D01*
+X022076Y022726D02*
+X022078Y022776D01*
+X022084Y022826D01*
+X022094Y022876D01*
+X022107Y022924D01*
+X022124Y022972D01*
+X022145Y023018D01*
+X022169Y023062D01*
+X022197Y023104D01*
+X022228Y023144D01*
+X022262Y023181D01*
+X022299Y023216D01*
+X022338Y023247D01*
+X022379Y023276D01*
+X022423Y023301D01*
+X022469Y023323D01*
+X022516Y023341D01*
+X022564Y023355D01*
+X022613Y023366D01*
+X022663Y023373D01*
+X022713Y023376D01*
+X022764Y023375D01*
+X022814Y023370D01*
+X022864Y023361D01*
+X022912Y023349D01*
+X022960Y023332D01*
+X023006Y023312D01*
+X023051Y023289D01*
+X023094Y023262D01*
+X023134Y023232D01*
+X023172Y023199D01*
+X023207Y023163D01*
+X023240Y023124D01*
+X023269Y023083D01*
+X023295Y023040D01*
+X023318Y022995D01*
+X023337Y022948D01*
+X023352Y022900D01*
+X023364Y022851D01*
+X023372Y022801D01*
+X023376Y022751D01*
+X023376Y022701D01*
+X023372Y022651D01*
+X023364Y022601D01*
+X023352Y022552D01*
+X023337Y022504D01*
+X023318Y022457D01*
+X023295Y022412D01*
+X023269Y022369D01*
+X023240Y022328D01*
+X023207Y022289D01*
+X023172Y022253D01*
+X023134Y022220D01*
+X023094Y022190D01*
+X023051Y022163D01*
+X023006Y022140D01*
+X022960Y022120D01*
+X022912Y022103D01*
+X022864Y022091D01*
+X022814Y022082D01*
+X022764Y022077D01*
+X022713Y022076D01*
+X022663Y022079D01*
+X022613Y022086D01*
+X022564Y022097D01*
+X022516Y022111D01*
+X022469Y022129D01*
+X022423Y022151D01*
+X022379Y022176D01*
+X022338Y022205D01*
+X022299Y022236D01*
+X022262Y022271D01*
+X022228Y022308D01*
+X022197Y022348D01*
+X022169Y022390D01*
+X022145Y022434D01*
+X022124Y022480D01*
+X022107Y022528D01*
+X022094Y022576D01*
+X022084Y022626D01*
+X022078Y022676D01*
+X022076Y022726D01*
+X019955Y023605D02*
+X019957Y023655D01*
+X019963Y023705D01*
+X019973Y023755D01*
+X019986Y023803D01*
+X020003Y023851D01*
+X020024Y023897D01*
+X020048Y023941D01*
+X020076Y023983D01*
+X020107Y024023D01*
+X020141Y024060D01*
+X020178Y024095D01*
+X020217Y024126D01*
+X020258Y024155D01*
+X020302Y024180D01*
+X020348Y024202D01*
+X020395Y024220D01*
+X020443Y024234D01*
+X020492Y024245D01*
+X020542Y024252D01*
+X020592Y024255D01*
+X020643Y024254D01*
+X020693Y024249D01*
+X020743Y024240D01*
+X020791Y024228D01*
+X020839Y024211D01*
+X020885Y024191D01*
+X020930Y024168D01*
+X020973Y024141D01*
+X021013Y024111D01*
+X021051Y024078D01*
+X021086Y024042D01*
+X021119Y024003D01*
+X021148Y023962D01*
+X021174Y023919D01*
+X021197Y023874D01*
+X021216Y023827D01*
+X021231Y023779D01*
+X021243Y023730D01*
+X021251Y023680D01*
+X021255Y023630D01*
+X021255Y023580D01*
+X021251Y023530D01*
+X021243Y023480D01*
+X021231Y023431D01*
+X021216Y023383D01*
+X021197Y023336D01*
+X021174Y023291D01*
+X021148Y023248D01*
+X021119Y023207D01*
+X021086Y023168D01*
+X021051Y023132D01*
+X021013Y023099D01*
+X020973Y023069D01*
+X020930Y023042D01*
+X020885Y023019D01*
+X020839Y022999D01*
+X020791Y022982D01*
+X020743Y022970D01*
+X020693Y022961D01*
+X020643Y022956D01*
+X020592Y022955D01*
+X020542Y022958D01*
+X020492Y022965D01*
+X020443Y022976D01*
+X020395Y022990D01*
+X020348Y023008D01*
+X020302Y023030D01*
+X020258Y023055D01*
+X020217Y023084D01*
+X020178Y023115D01*
+X020141Y023150D01*
+X020107Y023187D01*
+X020076Y023227D01*
+X020048Y023269D01*
+X020024Y023313D01*
+X020003Y023359D01*
+X019986Y023407D01*
+X019973Y023455D01*
+X019963Y023505D01*
+X019957Y023555D01*
+X019955Y023605D01*
+X017834Y022726D02*
+X017836Y022776D01*
+X017842Y022826D01*
+X017852Y022876D01*
+X017865Y022924D01*
+X017882Y022972D01*
+X017903Y023018D01*
+X017927Y023062D01*
+X017955Y023104D01*
+X017986Y023144D01*
+X018020Y023181D01*
+X018057Y023216D01*
+X018096Y023247D01*
+X018137Y023276D01*
+X018181Y023301D01*
+X018227Y023323D01*
+X018274Y023341D01*
+X018322Y023355D01*
+X018371Y023366D01*
+X018421Y023373D01*
+X018471Y023376D01*
+X018522Y023375D01*
+X018572Y023370D01*
+X018622Y023361D01*
+X018670Y023349D01*
+X018718Y023332D01*
+X018764Y023312D01*
+X018809Y023289D01*
+X018852Y023262D01*
+X018892Y023232D01*
+X018930Y023199D01*
+X018965Y023163D01*
+X018998Y023124D01*
+X019027Y023083D01*
+X019053Y023040D01*
+X019076Y022995D01*
+X019095Y022948D01*
+X019110Y022900D01*
+X019122Y022851D01*
+X019130Y022801D01*
+X019134Y022751D01*
+X019134Y022701D01*
+X019130Y022651D01*
+X019122Y022601D01*
+X019110Y022552D01*
+X019095Y022504D01*
+X019076Y022457D01*
+X019053Y022412D01*
+X019027Y022369D01*
+X018998Y022328D01*
+X018965Y022289D01*
+X018930Y022253D01*
+X018892Y022220D01*
+X018852Y022190D01*
+X018809Y022163D01*
+X018764Y022140D01*
+X018718Y022120D01*
+X018670Y022103D01*
+X018622Y022091D01*
+X018572Y022082D01*
+X018522Y022077D01*
+X018471Y022076D01*
+X018421Y022079D01*
+X018371Y022086D01*
+X018322Y022097D01*
+X018274Y022111D01*
+X018227Y022129D01*
+X018181Y022151D01*
+X018137Y022176D01*
+X018096Y022205D01*
+X018057Y022236D01*
+X018020Y022271D01*
+X017986Y022308D01*
+X017955Y022348D01*
+X017927Y022390D01*
+X017903Y022434D01*
+X017882Y022480D01*
+X017865Y022528D01*
+X017852Y022576D01*
+X017842Y022626D01*
+X017836Y022676D01*
+X017834Y022726D01*
+X016955Y020605D02*
+X016957Y020655D01*
+X016963Y020705D01*
+X016973Y020755D01*
+X016986Y020803D01*
+X017003Y020851D01*
+X017024Y020897D01*
+X017048Y020941D01*
+X017076Y020983D01*
+X017107Y021023D01*
+X017141Y021060D01*
+X017178Y021095D01*
+X017217Y021126D01*
+X017258Y021155D01*
+X017302Y021180D01*
+X017348Y021202D01*
+X017395Y021220D01*
+X017443Y021234D01*
+X017492Y021245D01*
+X017542Y021252D01*
+X017592Y021255D01*
+X017643Y021254D01*
+X017693Y021249D01*
+X017743Y021240D01*
+X017791Y021228D01*
+X017839Y021211D01*
+X017885Y021191D01*
+X017930Y021168D01*
+X017973Y021141D01*
+X018013Y021111D01*
+X018051Y021078D01*
+X018086Y021042D01*
+X018119Y021003D01*
+X018148Y020962D01*
+X018174Y020919D01*
+X018197Y020874D01*
+X018216Y020827D01*
+X018231Y020779D01*
+X018243Y020730D01*
+X018251Y020680D01*
+X018255Y020630D01*
+X018255Y020580D01*
+X018251Y020530D01*
+X018243Y020480D01*
+X018231Y020431D01*
+X018216Y020383D01*
+X018197Y020336D01*
+X018174Y020291D01*
+X018148Y020248D01*
+X018119Y020207D01*
+X018086Y020168D01*
+X018051Y020132D01*
+X018013Y020099D01*
+X017973Y020069D01*
+X017930Y020042D01*
+X017885Y020019D01*
+X017839Y019999D01*
+X017791Y019982D01*
+X017743Y019970D01*
+X017693Y019961D01*
+X017643Y019956D01*
+X017592Y019955D01*
+X017542Y019958D01*
+X017492Y019965D01*
+X017443Y019976D01*
+X017395Y019990D01*
+X017348Y020008D01*
+X017302Y020030D01*
+X017258Y020055D01*
+X017217Y020084D01*
+X017178Y020115D01*
+X017141Y020150D01*
+X017107Y020187D01*
+X017076Y020227D01*
+X017048Y020269D01*
+X017024Y020313D01*
+X017003Y020359D01*
+X016986Y020407D01*
+X016973Y020455D01*
+X016963Y020505D01*
+X016957Y020555D01*
+X016955Y020605D01*
+X017834Y018484D02*
+X017836Y018534D01*
+X017842Y018584D01*
+X017852Y018634D01*
+X017865Y018682D01*
+X017882Y018730D01*
+X017903Y018776D01*
+X017927Y018820D01*
+X017955Y018862D01*
+X017986Y018902D01*
+X018020Y018939D01*
+X018057Y018974D01*
+X018096Y019005D01*
+X018137Y019034D01*
+X018181Y019059D01*
+X018227Y019081D01*
+X018274Y019099D01*
+X018322Y019113D01*
+X018371Y019124D01*
+X018421Y019131D01*
+X018471Y019134D01*
+X018522Y019133D01*
+X018572Y019128D01*
+X018622Y019119D01*
+X018670Y019107D01*
+X018718Y019090D01*
+X018764Y019070D01*
+X018809Y019047D01*
+X018852Y019020D01*
+X018892Y018990D01*
+X018930Y018957D01*
+X018965Y018921D01*
+X018998Y018882D01*
+X019027Y018841D01*
+X019053Y018798D01*
+X019076Y018753D01*
+X019095Y018706D01*
+X019110Y018658D01*
+X019122Y018609D01*
+X019130Y018559D01*
+X019134Y018509D01*
+X019134Y018459D01*
+X019130Y018409D01*
+X019122Y018359D01*
+X019110Y018310D01*
+X019095Y018262D01*
+X019076Y018215D01*
+X019053Y018170D01*
+X019027Y018127D01*
+X018998Y018086D01*
+X018965Y018047D01*
+X018930Y018011D01*
+X018892Y017978D01*
+X018852Y017948D01*
+X018809Y017921D01*
+X018764Y017898D01*
+X018718Y017878D01*
+X018670Y017861D01*
+X018622Y017849D01*
+X018572Y017840D01*
+X018522Y017835D01*
+X018471Y017834D01*
+X018421Y017837D01*
+X018371Y017844D01*
+X018322Y017855D01*
+X018274Y017869D01*
+X018227Y017887D01*
+X018181Y017909D01*
+X018137Y017934D01*
+X018096Y017963D01*
+X018057Y017994D01*
+X018020Y018029D01*
+X017986Y018066D01*
+X017955Y018106D01*
+X017927Y018148D01*
+X017903Y018192D01*
+X017882Y018238D01*
+X017865Y018286D01*
+X017852Y018334D01*
+X017842Y018384D01*
+X017836Y018434D01*
+X017834Y018484D01*
+X019955Y017605D02*
+X019957Y017655D01*
+X019963Y017705D01*
+X019973Y017755D01*
+X019986Y017803D01*
+X020003Y017851D01*
+X020024Y017897D01*
+X020048Y017941D01*
+X020076Y017983D01*
+X020107Y018023D01*
+X020141Y018060D01*
+X020178Y018095D01*
+X020217Y018126D01*
+X020258Y018155D01*
+X020302Y018180D01*
+X020348Y018202D01*
+X020395Y018220D01*
+X020443Y018234D01*
+X020492Y018245D01*
+X020542Y018252D01*
+X020592Y018255D01*
+X020643Y018254D01*
+X020693Y018249D01*
+X020743Y018240D01*
+X020791Y018228D01*
+X020839Y018211D01*
+X020885Y018191D01*
+X020930Y018168D01*
+X020973Y018141D01*
+X021013Y018111D01*
+X021051Y018078D01*
+X021086Y018042D01*
+X021119Y018003D01*
+X021148Y017962D01*
+X021174Y017919D01*
+X021197Y017874D01*
+X021216Y017827D01*
+X021231Y017779D01*
+X021243Y017730D01*
+X021251Y017680D01*
+X021255Y017630D01*
+X021255Y017580D01*
+X021251Y017530D01*
+X021243Y017480D01*
+X021231Y017431D01*
+X021216Y017383D01*
+X021197Y017336D01*
+X021174Y017291D01*
+X021148Y017248D01*
+X021119Y017207D01*
+X021086Y017168D01*
+X021051Y017132D01*
+X021013Y017099D01*
+X020973Y017069D01*
+X020930Y017042D01*
+X020885Y017019D01*
+X020839Y016999D01*
+X020791Y016982D01*
+X020743Y016970D01*
+X020693Y016961D01*
+X020643Y016956D01*
+X020592Y016955D01*
+X020542Y016958D01*
+X020492Y016965D01*
+X020443Y016976D01*
+X020395Y016990D01*
+X020348Y017008D01*
+X020302Y017030D01*
+X020258Y017055D01*
+X020217Y017084D01*
+X020178Y017115D01*
+X020141Y017150D01*
+X020107Y017187D01*
+X020076Y017227D01*
+X020048Y017269D01*
+X020024Y017313D01*
+X020003Y017359D01*
+X019986Y017407D01*
+X019973Y017455D01*
+X019963Y017505D01*
+X019957Y017555D01*
+X019955Y017605D01*
+X022076Y018484D02*
+X022078Y018534D01*
+X022084Y018584D01*
+X022094Y018634D01*
+X022107Y018682D01*
+X022124Y018730D01*
+X022145Y018776D01*
+X022169Y018820D01*
+X022197Y018862D01*
+X022228Y018902D01*
+X022262Y018939D01*
+X022299Y018974D01*
+X022338Y019005D01*
+X022379Y019034D01*
+X022423Y019059D01*
+X022469Y019081D01*
+X022516Y019099D01*
+X022564Y019113D01*
+X022613Y019124D01*
+X022663Y019131D01*
+X022713Y019134D01*
+X022764Y019133D01*
+X022814Y019128D01*
+X022864Y019119D01*
+X022912Y019107D01*
+X022960Y019090D01*
+X023006Y019070D01*
+X023051Y019047D01*
+X023094Y019020D01*
+X023134Y018990D01*
+X023172Y018957D01*
+X023207Y018921D01*
+X023240Y018882D01*
+X023269Y018841D01*
+X023295Y018798D01*
+X023318Y018753D01*
+X023337Y018706D01*
+X023352Y018658D01*
+X023364Y018609D01*
+X023372Y018559D01*
+X023376Y018509D01*
+X023376Y018459D01*
+X023372Y018409D01*
+X023364Y018359D01*
+X023352Y018310D01*
+X023337Y018262D01*
+X023318Y018215D01*
+X023295Y018170D01*
+X023269Y018127D01*
+X023240Y018086D01*
+X023207Y018047D01*
+X023172Y018011D01*
+X023134Y017978D01*
+X023094Y017948D01*
+X023051Y017921D01*
+X023006Y017898D01*
+X022960Y017878D01*
+X022912Y017861D01*
+X022864Y017849D01*
+X022814Y017840D01*
+X022764Y017835D01*
+X022713Y017834D01*
+X022663Y017837D01*
+X022613Y017844D01*
+X022564Y017855D01*
+X022516Y017869D01*
+X022469Y017887D01*
+X022423Y017909D01*
+X022379Y017934D01*
+X022338Y017963D01*
+X022299Y017994D01*
+X022262Y018029D01*
+X022228Y018066D01*
+X022197Y018106D01*
+X022169Y018148D01*
+X022145Y018192D01*
+X022124Y018238D01*
+X022107Y018286D01*
+X022094Y018334D01*
+X022084Y018384D01*
+X022078Y018434D01*
+X022076Y018484D01*
+X019955Y020605D02*
+X019957Y020655D01*
+X019963Y020705D01*
+X019973Y020755D01*
+X019986Y020803D01*
+X020003Y020851D01*
+X020024Y020897D01*
+X020048Y020941D01*
+X020076Y020983D01*
+X020107Y021023D01*
+X020141Y021060D01*
+X020178Y021095D01*
+X020217Y021126D01*
+X020258Y021155D01*
+X020302Y021180D01*
+X020348Y021202D01*
+X020395Y021220D01*
+X020443Y021234D01*
+X020492Y021245D01*
+X020542Y021252D01*
+X020592Y021255D01*
+X020643Y021254D01*
+X020693Y021249D01*
+X020743Y021240D01*
+X020791Y021228D01*
+X020839Y021211D01*
+X020885Y021191D01*
+X020930Y021168D01*
+X020973Y021141D01*
+X021013Y021111D01*
+X021051Y021078D01*
+X021086Y021042D01*
+X021119Y021003D01*
+X021148Y020962D01*
+X021174Y020919D01*
+X021197Y020874D01*
+X021216Y020827D01*
+X021231Y020779D01*
+X021243Y020730D01*
+X021251Y020680D01*
+X021255Y020630D01*
+X021255Y020580D01*
+X021251Y020530D01*
+X021243Y020480D01*
+X021231Y020431D01*
+X021216Y020383D01*
+X021197Y020336D01*
+X021174Y020291D01*
+X021148Y020248D01*
+X021119Y020207D01*
+X021086Y020168D01*
+X021051Y020132D01*
+X021013Y020099D01*
+X020973Y020069D01*
+X020930Y020042D01*
+X020885Y020019D01*
+X020839Y019999D01*
+X020791Y019982D01*
+X020743Y019970D01*
+X020693Y019961D01*
+X020643Y019956D01*
+X020592Y019955D01*
+X020542Y019958D01*
+X020492Y019965D01*
+X020443Y019976D01*
+X020395Y019990D01*
+X020348Y020008D01*
+X020302Y020030D01*
+X020258Y020055D01*
+X020217Y020084D01*
+X020178Y020115D01*
+X020141Y020150D01*
+X020107Y020187D01*
+X020076Y020227D01*
+X020048Y020269D01*
+X020024Y020313D01*
+X020003Y020359D01*
+X019986Y020407D01*
+X019973Y020455D01*
+X019963Y020505D01*
+X019957Y020555D01*
+X019955Y020605D01*
+D12*
+X018484Y018484D03*
+X020605Y017605D03*
+X022726Y018484D03*
+X023605Y020605D03*
+X022726Y022726D03*
+X020605Y023605D03*
+X018484Y022726D03*
+X017605Y020605D03*
+X020605Y020605D03*
+D13*
+X042603Y019089D03*
+X042603Y022121D03*
+D14*
+X041698Y021077D03*
+X041698Y020762D03*
+X041698Y020448D03*
+X041698Y020133D03*
+D15*
+X042938Y020014D03*
+X042938Y021196D03*
+D16*
+G36*
+X040724Y023174D02*
+X041189Y023257D01*
+X041278Y022754D01*
+X040813Y022671D01*
+X040724Y023174D01*
+G37*
+G36*
+X040611Y023814D02*
+X041076Y023897D01*
+X041165Y023394D01*
+X040700Y023311D01*
+X040611Y023814D01*
+G37*
+G36*
+X040498Y024454D02*
+X040963Y024537D01*
+X041052Y024034D01*
+X040587Y023951D01*
+X040498Y024454D01*
+G37*
+G36*
+X041157Y024571D02*
+X041622Y024654D01*
+X041711Y024151D01*
+X041246Y024068D01*
+X041157Y024571D01*
+G37*
+G36*
+X041270Y023930D02*
+X041735Y024013D01*
+X041824Y023510D01*
+X041359Y023427D01*
+X041270Y023930D01*
+G37*
+G36*
+X041383Y023290D02*
+X041848Y023373D01*
+X041937Y022870D01*
+X041472Y022787D01*
+X041383Y023290D01*
+G37*
+G36*
+X040804Y018537D02*
+X041269Y018454D01*
+X041180Y017951D01*
+X040715Y018034D01*
+X040804Y018537D01*
+G37*
+G36*
+X040692Y017897D02*
+X041157Y017814D01*
+X041068Y017311D01*
+X040603Y017394D01*
+X040692Y017897D01*
+G37*
+G36*
+X040579Y017257D02*
+X041044Y017174D01*
+X040955Y016671D01*
+X040490Y016754D01*
+X040579Y017257D01*
+G37*
+G36*
+X041238Y017141D02*
+X041703Y017058D01*
+X041614Y016555D01*
+X041149Y016638D01*
+X041238Y017141D01*
+G37*
+G36*
+X041351Y017781D02*
+X041816Y017698D01*
+X041727Y017195D01*
+X041262Y017278D01*
+X041351Y017781D01*
+G37*
+G36*
+X041464Y018421D02*
+X041929Y018338D01*
+X041840Y017835D01*
+X041375Y017918D01*
+X041464Y018421D01*
+G37*
+D17*
+X042855Y018105D03*
+X042855Y023105D03*
+D18*
+X027105Y020605D03*
+X026355Y020605D03*
+M02*
diff --git a/pcb/lf-antenna/CAM/lf-antenna.TXT b/pcb/lf-antenna/CAM/lf-antenna.TXT
new file mode 100644 (file)
index 0000000..84f8c27
--- /dev/null
@@ -0,0 +1,24 @@
+%
+M48
+M72
+T01C0.0394
+T02C0.1299
+%
+T01
+X42938Y20014
+X42938Y21196
+X42855Y18105
+X27105Y20605
+X26355Y20605
+X42855Y23105
+T02
+X20605Y20605
+X17605Y20605
+X20605Y23605
+X20605Y17605
+X23605Y20605
+X18484Y18484
+X22726Y18484
+X22726Y22726
+X18484Y22726
+M30
diff --git a/pcb/lf-antenna/CAM/lf-antenna.do b/pcb/lf-antenna/CAM/lf-antenna.do
new file mode 100644 (file)
index 0000000..cea2f10
--- /dev/null
@@ -0,0 +1,1663 @@
+G75*
+G70*
+%OFA0B0*%
+%FSLAX24Y24*%
+%IPPOS*%
+%LPD*%
+%AMOC8*
+5,1,8,0,0,1.08239X$1,22.5*
+%
+%ADD10C,0.0010*%
+%ADD11C,0.0000*%
+D10*
+X018094Y018484D02*
+X018096Y018523D01*
+X018102Y018561D01*
+X018111Y018599D01*
+X018125Y018635D01*
+X018141Y018671D01*
+X018162Y018704D01*
+X018185Y018735D01*
+X018212Y018763D01*
+X018241Y018789D01*
+X018272Y018812D01*
+X018306Y018831D01*
+X018342Y018847D01*
+X018378Y018859D01*
+X018416Y018868D01*
+X018455Y018873D01*
+X018494Y018874D01*
+X018532Y018871D01*
+X018571Y018864D01*
+X018608Y018854D01*
+X018644Y018839D01*
+X018679Y018822D01*
+X018712Y018801D01*
+X018742Y018776D01*
+X018770Y018749D01*
+X018795Y018719D01*
+X018817Y018687D01*
+X018835Y018653D01*
+X018850Y018617D01*
+X018862Y018580D01*
+X018870Y018542D01*
+X018874Y018503D01*
+X018874Y018465D01*
+X018870Y018426D01*
+X018862Y018388D01*
+X018850Y018351D01*
+X018835Y018315D01*
+X018817Y018281D01*
+X018795Y018249D01*
+X018770Y018219D01*
+X018742Y018192D01*
+X018712Y018167D01*
+X018679Y018146D01*
+X018644Y018129D01*
+X018608Y018114D01*
+X018571Y018104D01*
+X018532Y018097D01*
+X018494Y018094D01*
+X018455Y018095D01*
+X018416Y018100D01*
+X018378Y018109D01*
+X018342Y018121D01*
+X018306Y018137D01*
+X018272Y018156D01*
+X018241Y018179D01*
+X018212Y018205D01*
+X018185Y018233D01*
+X018162Y018264D01*
+X018141Y018297D01*
+X018125Y018333D01*
+X018111Y018369D01*
+X018102Y018407D01*
+X018096Y018445D01*
+X018094Y018484D01*
+X018084Y018084D02*
+X018884Y018884D01*
+X020215Y017605D02*
+X020217Y017644D01*
+X020223Y017682D01*
+X020232Y017720D01*
+X020246Y017756D01*
+X020262Y017792D01*
+X020283Y017825D01*
+X020306Y017856D01*
+X020333Y017884D01*
+X020362Y017910D01*
+X020393Y017933D01*
+X020427Y017952D01*
+X020463Y017968D01*
+X020499Y017980D01*
+X020537Y017989D01*
+X020576Y017994D01*
+X020615Y017995D01*
+X020653Y017992D01*
+X020692Y017985D01*
+X020729Y017975D01*
+X020765Y017960D01*
+X020800Y017943D01*
+X020833Y017922D01*
+X020863Y017897D01*
+X020891Y017870D01*
+X020916Y017840D01*
+X020938Y017808D01*
+X020956Y017774D01*
+X020971Y017738D01*
+X020983Y017701D01*
+X020991Y017663D01*
+X020995Y017624D01*
+X020995Y017586D01*
+X020991Y017547D01*
+X020983Y017509D01*
+X020971Y017472D01*
+X020956Y017436D01*
+X020938Y017402D01*
+X020916Y017370D01*
+X020891Y017340D01*
+X020863Y017313D01*
+X020833Y017288D01*
+X020800Y017267D01*
+X020765Y017250D01*
+X020729Y017235D01*
+X020692Y017225D01*
+X020653Y017218D01*
+X020615Y017215D01*
+X020576Y017216D01*
+X020537Y017221D01*
+X020499Y017230D01*
+X020463Y017242D01*
+X020427Y017258D01*
+X020393Y017277D01*
+X020362Y017300D01*
+X020333Y017326D01*
+X020306Y017354D01*
+X020283Y017385D01*
+X020262Y017418D01*
+X020246Y017454D01*
+X020232Y017490D01*
+X020223Y017528D01*
+X020217Y017566D01*
+X020215Y017605D01*
+X020205Y017205D02*
+X021005Y018005D01*
+X022336Y018484D02*
+X022338Y018523D01*
+X022344Y018561D01*
+X022353Y018599D01*
+X022367Y018635D01*
+X022383Y018671D01*
+X022404Y018704D01*
+X022427Y018735D01*
+X022454Y018763D01*
+X022483Y018789D01*
+X022514Y018812D01*
+X022548Y018831D01*
+X022584Y018847D01*
+X022620Y018859D01*
+X022658Y018868D01*
+X022697Y018873D01*
+X022736Y018874D01*
+X022774Y018871D01*
+X022813Y018864D01*
+X022850Y018854D01*
+X022886Y018839D01*
+X022921Y018822D01*
+X022954Y018801D01*
+X022984Y018776D01*
+X023012Y018749D01*
+X023037Y018719D01*
+X023059Y018687D01*
+X023077Y018653D01*
+X023092Y018617D01*
+X023104Y018580D01*
+X023112Y018542D01*
+X023116Y018503D01*
+X023116Y018465D01*
+X023112Y018426D01*
+X023104Y018388D01*
+X023092Y018351D01*
+X023077Y018315D01*
+X023059Y018281D01*
+X023037Y018249D01*
+X023012Y018219D01*
+X022984Y018192D01*
+X022954Y018167D01*
+X022921Y018146D01*
+X022886Y018129D01*
+X022850Y018114D01*
+X022813Y018104D01*
+X022774Y018097D01*
+X022736Y018094D01*
+X022697Y018095D01*
+X022658Y018100D01*
+X022620Y018109D01*
+X022584Y018121D01*
+X022548Y018137D01*
+X022514Y018156D01*
+X022483Y018179D01*
+X022454Y018205D01*
+X022427Y018233D01*
+X022404Y018264D01*
+X022383Y018297D01*
+X022367Y018333D01*
+X022353Y018369D01*
+X022344Y018407D01*
+X022338Y018445D01*
+X022336Y018484D01*
+X022326Y018084D02*
+X023126Y018884D01*
+X023215Y020605D02*
+X023217Y020644D01*
+X023223Y020682D01*
+X023232Y020720D01*
+X023246Y020756D01*
+X023262Y020792D01*
+X023283Y020825D01*
+X023306Y020856D01*
+X023333Y020884D01*
+X023362Y020910D01*
+X023393Y020933D01*
+X023427Y020952D01*
+X023463Y020968D01*
+X023499Y020980D01*
+X023537Y020989D01*
+X023576Y020994D01*
+X023615Y020995D01*
+X023653Y020992D01*
+X023692Y020985D01*
+X023729Y020975D01*
+X023765Y020960D01*
+X023800Y020943D01*
+X023833Y020922D01*
+X023863Y020897D01*
+X023891Y020870D01*
+X023916Y020840D01*
+X023938Y020808D01*
+X023956Y020774D01*
+X023971Y020738D01*
+X023983Y020701D01*
+X023991Y020663D01*
+X023995Y020624D01*
+X023995Y020586D01*
+X023991Y020547D01*
+X023983Y020509D01*
+X023971Y020472D01*
+X023956Y020436D01*
+X023938Y020402D01*
+X023916Y020370D01*
+X023891Y020340D01*
+X023863Y020313D01*
+X023833Y020288D01*
+X023800Y020267D01*
+X023765Y020250D01*
+X023729Y020235D01*
+X023692Y020225D01*
+X023653Y020218D01*
+X023615Y020215D01*
+X023576Y020216D01*
+X023537Y020221D01*
+X023499Y020230D01*
+X023463Y020242D01*
+X023427Y020258D01*
+X023393Y020277D01*
+X023362Y020300D01*
+X023333Y020326D01*
+X023306Y020354D01*
+X023283Y020385D01*
+X023262Y020418D01*
+X023246Y020454D01*
+X023232Y020490D01*
+X023223Y020528D01*
+X023217Y020566D01*
+X023215Y020605D01*
+X023205Y020205D02*
+X024005Y021005D01*
+X022336Y022726D02*
+X022338Y022765D01*
+X022344Y022803D01*
+X022353Y022841D01*
+X022367Y022877D01*
+X022383Y022913D01*
+X022404Y022946D01*
+X022427Y022977D01*
+X022454Y023005D01*
+X022483Y023031D01*
+X022514Y023054D01*
+X022548Y023073D01*
+X022584Y023089D01*
+X022620Y023101D01*
+X022658Y023110D01*
+X022697Y023115D01*
+X022736Y023116D01*
+X022774Y023113D01*
+X022813Y023106D01*
+X022850Y023096D01*
+X022886Y023081D01*
+X022921Y023064D01*
+X022954Y023043D01*
+X022984Y023018D01*
+X023012Y022991D01*
+X023037Y022961D01*
+X023059Y022929D01*
+X023077Y022895D01*
+X023092Y022859D01*
+X023104Y022822D01*
+X023112Y022784D01*
+X023116Y022745D01*
+X023116Y022707D01*
+X023112Y022668D01*
+X023104Y022630D01*
+X023092Y022593D01*
+X023077Y022557D01*
+X023059Y022523D01*
+X023037Y022491D01*
+X023012Y022461D01*
+X022984Y022434D01*
+X022954Y022409D01*
+X022921Y022388D01*
+X022886Y022371D01*
+X022850Y022356D01*
+X022813Y022346D01*
+X022774Y022339D01*
+X022736Y022336D01*
+X022697Y022337D01*
+X022658Y022342D01*
+X022620Y022351D01*
+X022584Y022363D01*
+X022548Y022379D01*
+X022514Y022398D01*
+X022483Y022421D01*
+X022454Y022447D01*
+X022427Y022475D01*
+X022404Y022506D01*
+X022383Y022539D01*
+X022367Y022575D01*
+X022353Y022611D01*
+X022344Y022649D01*
+X022338Y022687D01*
+X022336Y022726D01*
+X022326Y022326D02*
+X023126Y023126D01*
+X020215Y023605D02*
+X020217Y023644D01*
+X020223Y023682D01*
+X020232Y023720D01*
+X020246Y023756D01*
+X020262Y023792D01*
+X020283Y023825D01*
+X020306Y023856D01*
+X020333Y023884D01*
+X020362Y023910D01*
+X020393Y023933D01*
+X020427Y023952D01*
+X020463Y023968D01*
+X020499Y023980D01*
+X020537Y023989D01*
+X020576Y023994D01*
+X020615Y023995D01*
+X020653Y023992D01*
+X020692Y023985D01*
+X020729Y023975D01*
+X020765Y023960D01*
+X020800Y023943D01*
+X020833Y023922D01*
+X020863Y023897D01*
+X020891Y023870D01*
+X020916Y023840D01*
+X020938Y023808D01*
+X020956Y023774D01*
+X020971Y023738D01*
+X020983Y023701D01*
+X020991Y023663D01*
+X020995Y023624D01*
+X020995Y023586D01*
+X020991Y023547D01*
+X020983Y023509D01*
+X020971Y023472D01*
+X020956Y023436D01*
+X020938Y023402D01*
+X020916Y023370D01*
+X020891Y023340D01*
+X020863Y023313D01*
+X020833Y023288D01*
+X020800Y023267D01*
+X020765Y023250D01*
+X020729Y023235D01*
+X020692Y023225D01*
+X020653Y023218D01*
+X020615Y023215D01*
+X020576Y023216D01*
+X020537Y023221D01*
+X020499Y023230D01*
+X020463Y023242D01*
+X020427Y023258D01*
+X020393Y023277D01*
+X020362Y023300D01*
+X020333Y023326D01*
+X020306Y023354D01*
+X020283Y023385D01*
+X020262Y023418D01*
+X020246Y023454D01*
+X020232Y023490D01*
+X020223Y023528D01*
+X020217Y023566D01*
+X020215Y023605D01*
+X020205Y023205D02*
+X021005Y024005D01*
+X018094Y022726D02*
+X018096Y022765D01*
+X018102Y022803D01*
+X018111Y022841D01*
+X018125Y022877D01*
+X018141Y022913D01*
+X018162Y022946D01*
+X018185Y022977D01*
+X018212Y023005D01*
+X018241Y023031D01*
+X018272Y023054D01*
+X018306Y023073D01*
+X018342Y023089D01*
+X018378Y023101D01*
+X018416Y023110D01*
+X018455Y023115D01*
+X018494Y023116D01*
+X018532Y023113D01*
+X018571Y023106D01*
+X018608Y023096D01*
+X018644Y023081D01*
+X018679Y023064D01*
+X018712Y023043D01*
+X018742Y023018D01*
+X018770Y022991D01*
+X018795Y022961D01*
+X018817Y022929D01*
+X018835Y022895D01*
+X018850Y022859D01*
+X018862Y022822D01*
+X018870Y022784D01*
+X018874Y022745D01*
+X018874Y022707D01*
+X018870Y022668D01*
+X018862Y022630D01*
+X018850Y022593D01*
+X018835Y022557D01*
+X018817Y022523D01*
+X018795Y022491D01*
+X018770Y022461D01*
+X018742Y022434D01*
+X018712Y022409D01*
+X018679Y022388D01*
+X018644Y022371D01*
+X018608Y022356D01*
+X018571Y022346D01*
+X018532Y022339D01*
+X018494Y022336D01*
+X018455Y022337D01*
+X018416Y022342D01*
+X018378Y022351D01*
+X018342Y022363D01*
+X018306Y022379D01*
+X018272Y022398D01*
+X018241Y022421D01*
+X018212Y022447D01*
+X018185Y022475D01*
+X018162Y022506D01*
+X018141Y022539D01*
+X018125Y022575D01*
+X018111Y022611D01*
+X018102Y022649D01*
+X018096Y022687D01*
+X018094Y022726D01*
+X018084Y022326D02*
+X018884Y023126D01*
+X017215Y020605D02*
+X017217Y020644D01*
+X017223Y020682D01*
+X017232Y020720D01*
+X017246Y020756D01*
+X017262Y020792D01*
+X017283Y020825D01*
+X017306Y020856D01*
+X017333Y020884D01*
+X017362Y020910D01*
+X017393Y020933D01*
+X017427Y020952D01*
+X017463Y020968D01*
+X017499Y020980D01*
+X017537Y020989D01*
+X017576Y020994D01*
+X017615Y020995D01*
+X017653Y020992D01*
+X017692Y020985D01*
+X017729Y020975D01*
+X017765Y020960D01*
+X017800Y020943D01*
+X017833Y020922D01*
+X017863Y020897D01*
+X017891Y020870D01*
+X017916Y020840D01*
+X017938Y020808D01*
+X017956Y020774D01*
+X017971Y020738D01*
+X017983Y020701D01*
+X017991Y020663D01*
+X017995Y020624D01*
+X017995Y020586D01*
+X017991Y020547D01*
+X017983Y020509D01*
+X017971Y020472D01*
+X017956Y020436D01*
+X017938Y020402D01*
+X017916Y020370D01*
+X017891Y020340D01*
+X017863Y020313D01*
+X017833Y020288D01*
+X017800Y020267D01*
+X017765Y020250D01*
+X017729Y020235D01*
+X017692Y020225D01*
+X017653Y020218D01*
+X017615Y020215D01*
+X017576Y020216D01*
+X017537Y020221D01*
+X017499Y020230D01*
+X017463Y020242D01*
+X017427Y020258D01*
+X017393Y020277D01*
+X017362Y020300D01*
+X017333Y020326D01*
+X017306Y020354D01*
+X017283Y020385D01*
+X017262Y020418D01*
+X017246Y020454D01*
+X017232Y020490D01*
+X017223Y020528D01*
+X017217Y020566D01*
+X017215Y020605D01*
+X017205Y020205D02*
+X018005Y021005D01*
+X020215Y020605D02*
+X020217Y020644D01*
+X020223Y020682D01*
+X020232Y020720D01*
+X020246Y020756D01*
+X020262Y020792D01*
+X020283Y020825D01*
+X020306Y020856D01*
+X020333Y020884D01*
+X020362Y020910D01*
+X020393Y020933D01*
+X020427Y020952D01*
+X020463Y020968D01*
+X020499Y020980D01*
+X020537Y020989D01*
+X020576Y020994D01*
+X020615Y020995D01*
+X020653Y020992D01*
+X020692Y020985D01*
+X020729Y020975D01*
+X020765Y020960D01*
+X020800Y020943D01*
+X020833Y020922D01*
+X020863Y020897D01*
+X020891Y020870D01*
+X020916Y020840D01*
+X020938Y020808D01*
+X020956Y020774D01*
+X020971Y020738D01*
+X020983Y020701D01*
+X020991Y020663D01*
+X020995Y020624D01*
+X020995Y020586D01*
+X020991Y020547D01*
+X020983Y020509D01*
+X020971Y020472D01*
+X020956Y020436D01*
+X020938Y020402D01*
+X020916Y020370D01*
+X020891Y020340D01*
+X020863Y020313D01*
+X020833Y020288D01*
+X020800Y020267D01*
+X020765Y020250D01*
+X020729Y020235D01*
+X020692Y020225D01*
+X020653Y020218D01*
+X020615Y020215D01*
+X020576Y020216D01*
+X020537Y020221D01*
+X020499Y020230D01*
+X020463Y020242D01*
+X020427Y020258D01*
+X020393Y020277D01*
+X020362Y020300D01*
+X020333Y020326D01*
+X020306Y020354D01*
+X020283Y020385D01*
+X020262Y020418D01*
+X020246Y020454D01*
+X020232Y020490D01*
+X020223Y020528D01*
+X020217Y020566D01*
+X020215Y020605D01*
+X020205Y020205D02*
+X021005Y021005D01*
+X040496Y025564D02*
+X040231Y026527D01*
+X039920Y027475D01*
+X039562Y028407D01*
+X039160Y029320D01*
+X038714Y030213D01*
+X038225Y031083D01*
+X037694Y031928D01*
+X037122Y032747D01*
+X036512Y033536D01*
+X035864Y034295D01*
+X035179Y035022D01*
+X034460Y035714D01*
+X033708Y036371D01*
+X032925Y036990D01*
+X032113Y037570D01*
+X031274Y038110D01*
+X030409Y038609D01*
+X029521Y039064D01*
+X028612Y039477D01*
+X027684Y039844D01*
+X026739Y040166D01*
+X025780Y040441D01*
+X024808Y040669D01*
+X023827Y040850D01*
+X022838Y040983D01*
+X021843Y041068D01*
+X020846Y041104D01*
+X019847Y041091D01*
+X018851Y041030D01*
+X017859Y040920D01*
+X016874Y040763D01*
+X015897Y040557D01*
+X014931Y040304D01*
+X013979Y040005D01*
+X013043Y039659D01*
+X012124Y039269D01*
+X011226Y038834D01*
+X010350Y038356D01*
+X009498Y037835D01*
+X008672Y037274D01*
+X007875Y036674D01*
+X007108Y036035D01*
+X006373Y035360D01*
+X005672Y034650D01*
+X005006Y033906D01*
+X004377Y033131D01*
+X003787Y032326D01*
+X003236Y031494D01*
+X002727Y030636D01*
+X002260Y029753D01*
+X001836Y028850D01*
+X001457Y027926D01*
+X001123Y026986D01*
+X000836Y026030D01*
+X000595Y025061D01*
+X000402Y024082D01*
+X000257Y023094D01*
+X000160Y022101D01*
+X000111Y021104D01*
+X000111Y020106D01*
+X000160Y019109D01*
+X000257Y018116D01*
+X000402Y017128D01*
+X000595Y016149D01*
+X000836Y015180D01*
+X001123Y014224D01*
+X001457Y013284D01*
+X001836Y012360D01*
+X002260Y011457D01*
+X002727Y010574D01*
+X003236Y009716D01*
+X003787Y008884D01*
+X004377Y008079D01*
+X005006Y007304D01*
+X005672Y006560D01*
+X006373Y005850D01*
+X007108Y005175D01*
+X007875Y004536D01*
+X008672Y003936D01*
+X009498Y003375D01*
+X010350Y002854D01*
+X011226Y002376D01*
+X012124Y001941D01*
+X013043Y001551D01*
+X013979Y001205D01*
+X014931Y000906D01*
+X015897Y000653D01*
+X016874Y000447D01*
+X017859Y000290D01*
+X018851Y000180D01*
+X019847Y000119D01*
+X020846Y000106D01*
+X021843Y000142D01*
+X022838Y000227D01*
+X023827Y000360D01*
+X024808Y000541D01*
+X025780Y000769D01*
+X026739Y001044D01*
+X027684Y001366D01*
+X028612Y001733D01*
+X029521Y002146D01*
+X030409Y002601D01*
+X031274Y003100D01*
+X032113Y003640D01*
+X032925Y004220D01*
+X033708Y004839D01*
+X034460Y005496D01*
+X035179Y006188D01*
+X035864Y006915D01*
+X036512Y007674D01*
+X037122Y008463D01*
+X037694Y009282D01*
+X038225Y010127D01*
+X038714Y010997D01*
+X039160Y011890D01*
+X039562Y012803D01*
+X039920Y013735D01*
+X040231Y014683D01*
+X040496Y015646D01*
+X040509Y015692D01*
+X040527Y015738D01*
+X040547Y015782D01*
+X040571Y015825D01*
+X040598Y015865D01*
+X040629Y015903D01*
+X040662Y015939D01*
+X040697Y015972D01*
+X040736Y016002D01*
+X040776Y016030D01*
+X040818Y016054D01*
+X040862Y016074D01*
+X040908Y016091D01*
+X040955Y016105D01*
+X042455Y017705D02*
+X043255Y018505D01*
+X043255Y017705D01*
+X042455Y018505D01*
+X042455Y017705D01*
+X044355Y019105D02*
+X044355Y022105D01*
+X043338Y021596D02*
+X042538Y020796D01*
+X043338Y020796D02*
+X043338Y021596D01*
+X043338Y020796D02*
+X042538Y021596D01*
+X042538Y020796D01*
+X043338Y020414D02*
+X042538Y019614D01*
+X043338Y019614D02*
+X043338Y020414D01*
+X043338Y019614D02*
+X042538Y020414D01*
+X042538Y019614D01*
+X044355Y019105D02*
+X044265Y018887D01*
+X044164Y018674D01*
+X044053Y018467D01*
+X043932Y018264D01*
+X043802Y018068D01*
+X043663Y017878D01*
+X043515Y017695D01*
+X043358Y017519D01*
+X043193Y017351D01*
+X043020Y017191D01*
+X042840Y017039D01*
+X042652Y016896D01*
+X042459Y016763D01*
+X042258Y016638D01*
+X042053Y016524D01*
+X041842Y016419D01*
+X041626Y016325D01*
+X041406Y016241D01*
+X041182Y016167D01*
+X040955Y016105D01*
+X044355Y022105D02*
+X044204Y022372D01*
+X044040Y022632D01*
+X043864Y022883D01*
+X043676Y023125D01*
+X043476Y023358D01*
+X043265Y023581D01*
+X043043Y023793D01*
+X042811Y023994D01*
+X042570Y024183D01*
+X042319Y024361D01*
+X042061Y024526D01*
+X041794Y024678D01*
+X041521Y024818D01*
+X041241Y024943D01*
+X040955Y025055D01*
+X040907Y025074D01*
+X040862Y025096D01*
+X040817Y025122D01*
+X040775Y025150D01*
+X040735Y025182D01*
+X040697Y025216D01*
+X040662Y025252D01*
+X040629Y025291D01*
+X040599Y025333D01*
+X040572Y025376D01*
+X040548Y025421D01*
+X040527Y025467D01*
+X040510Y025515D01*
+X040496Y025564D01*
+X043255Y023505D02*
+X042455Y022705D01*
+X043255Y022705D02*
+X043255Y023505D01*
+X043255Y022705D02*
+X042455Y023505D01*
+X042455Y022705D01*
+X027505Y021005D02*
+X026705Y020205D01*
+X027505Y020205D02*
+X027505Y021005D01*
+X027505Y020205D02*
+X026705Y021005D01*
+X026705Y020205D01*
+X025955Y020205D02*
+X026755Y021005D01*
+X026755Y020205D01*
+X025955Y021005D01*
+X025955Y020205D01*
+D11*
+X017834Y018484D02*
+X017836Y018534D01*
+X017842Y018584D01*
+X017852Y018634D01*
+X017865Y018682D01*
+X017882Y018730D01*
+X017903Y018776D01*
+X017927Y018820D01*
+X017955Y018862D01*
+X017986Y018902D01*
+X018020Y018939D01*
+X018057Y018974D01*
+X018096Y019005D01*
+X018137Y019034D01*
+X018181Y019059D01*
+X018227Y019081D01*
+X018274Y019099D01*
+X018322Y019113D01*
+X018371Y019124D01*
+X018421Y019131D01*
+X018471Y019134D01*
+X018522Y019133D01*
+X018572Y019128D01*
+X018622Y019119D01*
+X018670Y019107D01*
+X018718Y019090D01*
+X018764Y019070D01*
+X018809Y019047D01*
+X018852Y019020D01*
+X018892Y018990D01*
+X018930Y018957D01*
+X018965Y018921D01*
+X018998Y018882D01*
+X019027Y018841D01*
+X019053Y018798D01*
+X019076Y018753D01*
+X019095Y018706D01*
+X019110Y018658D01*
+X019122Y018609D01*
+X019130Y018559D01*
+X019134Y018509D01*
+X019134Y018459D01*
+X019130Y018409D01*
+X019122Y018359D01*
+X019110Y018310D01*
+X019095Y018262D01*
+X019076Y018215D01*
+X019053Y018170D01*
+X019027Y018127D01*
+X018998Y018086D01*
+X018965Y018047D01*
+X018930Y018011D01*
+X018892Y017978D01*
+X018852Y017948D01*
+X018809Y017921D01*
+X018764Y017898D01*
+X018718Y017878D01*
+X018670Y017861D01*
+X018622Y017849D01*
+X018572Y017840D01*
+X018522Y017835D01*
+X018471Y017834D01*
+X018421Y017837D01*
+X018371Y017844D01*
+X018322Y017855D01*
+X018274Y017869D01*
+X018227Y017887D01*
+X018181Y017909D01*
+X018137Y017934D01*
+X018096Y017963D01*
+X018057Y017994D01*
+X018020Y018029D01*
+X017986Y018066D01*
+X017955Y018106D01*
+X017927Y018148D01*
+X017903Y018192D01*
+X017882Y018238D01*
+X017865Y018286D01*
+X017852Y018334D01*
+X017842Y018384D01*
+X017836Y018434D01*
+X017834Y018484D01*
+X016955Y020605D02*
+X016957Y020655D01*
+X016963Y020705D01*
+X016973Y020755D01*
+X016986Y020803D01*
+X017003Y020851D01*
+X017024Y020897D01*
+X017048Y020941D01*
+X017076Y020983D01*
+X017107Y021023D01*
+X017141Y021060D01*
+X017178Y021095D01*
+X017217Y021126D01*
+X017258Y021155D01*
+X017302Y021180D01*
+X017348Y021202D01*
+X017395Y021220D01*
+X017443Y021234D01*
+X017492Y021245D01*
+X017542Y021252D01*
+X017592Y021255D01*
+X017643Y021254D01*
+X017693Y021249D01*
+X017743Y021240D01*
+X017791Y021228D01*
+X017839Y021211D01*
+X017885Y021191D01*
+X017930Y021168D01*
+X017973Y021141D01*
+X018013Y021111D01*
+X018051Y021078D01*
+X018086Y021042D01*
+X018119Y021003D01*
+X018148Y020962D01*
+X018174Y020919D01*
+X018197Y020874D01*
+X018216Y020827D01*
+X018231Y020779D01*
+X018243Y020730D01*
+X018251Y020680D01*
+X018255Y020630D01*
+X018255Y020580D01*
+X018251Y020530D01*
+X018243Y020480D01*
+X018231Y020431D01*
+X018216Y020383D01*
+X018197Y020336D01*
+X018174Y020291D01*
+X018148Y020248D01*
+X018119Y020207D01*
+X018086Y020168D01*
+X018051Y020132D01*
+X018013Y020099D01*
+X017973Y020069D01*
+X017930Y020042D01*
+X017885Y020019D01*
+X017839Y019999D01*
+X017791Y019982D01*
+X017743Y019970D01*
+X017693Y019961D01*
+X017643Y019956D01*
+X017592Y019955D01*
+X017542Y019958D01*
+X017492Y019965D01*
+X017443Y019976D01*
+X017395Y019990D01*
+X017348Y020008D01*
+X017302Y020030D01*
+X017258Y020055D01*
+X017217Y020084D01*
+X017178Y020115D01*
+X017141Y020150D01*
+X017107Y020187D01*
+X017076Y020227D01*
+X017048Y020269D01*
+X017024Y020313D01*
+X017003Y020359D01*
+X016986Y020407D01*
+X016973Y020455D01*
+X016963Y020505D01*
+X016957Y020555D01*
+X016955Y020605D01*
+X017834Y022726D02*
+X017836Y022776D01*
+X017842Y022826D01*
+X017852Y022876D01*
+X017865Y022924D01*
+X017882Y022972D01*
+X017903Y023018D01*
+X017927Y023062D01*
+X017955Y023104D01*
+X017986Y023144D01*
+X018020Y023181D01*
+X018057Y023216D01*
+X018096Y023247D01*
+X018137Y023276D01*
+X018181Y023301D01*
+X018227Y023323D01*
+X018274Y023341D01*
+X018322Y023355D01*
+X018371Y023366D01*
+X018421Y023373D01*
+X018471Y023376D01*
+X018522Y023375D01*
+X018572Y023370D01*
+X018622Y023361D01*
+X018670Y023349D01*
+X018718Y023332D01*
+X018764Y023312D01*
+X018809Y023289D01*
+X018852Y023262D01*
+X018892Y023232D01*
+X018930Y023199D01*
+X018965Y023163D01*
+X018998Y023124D01*
+X019027Y023083D01*
+X019053Y023040D01*
+X019076Y022995D01*
+X019095Y022948D01*
+X019110Y022900D01*
+X019122Y022851D01*
+X019130Y022801D01*
+X019134Y022751D01*
+X019134Y022701D01*
+X019130Y022651D01*
+X019122Y022601D01*
+X019110Y022552D01*
+X019095Y022504D01*
+X019076Y022457D01*
+X019053Y022412D01*
+X019027Y022369D01*
+X018998Y022328D01*
+X018965Y022289D01*
+X018930Y022253D01*
+X018892Y022220D01*
+X018852Y022190D01*
+X018809Y022163D01*
+X018764Y022140D01*
+X018718Y022120D01*
+X018670Y022103D01*
+X018622Y022091D01*
+X018572Y022082D01*
+X018522Y022077D01*
+X018471Y022076D01*
+X018421Y022079D01*
+X018371Y022086D01*
+X018322Y022097D01*
+X018274Y022111D01*
+X018227Y022129D01*
+X018181Y022151D01*
+X018137Y022176D01*
+X018096Y022205D01*
+X018057Y022236D01*
+X018020Y022271D01*
+X017986Y022308D01*
+X017955Y022348D01*
+X017927Y022390D01*
+X017903Y022434D01*
+X017882Y022480D01*
+X017865Y022528D01*
+X017852Y022576D01*
+X017842Y022626D01*
+X017836Y022676D01*
+X017834Y022726D01*
+X019955Y023605D02*
+X019957Y023655D01*
+X019963Y023705D01*
+X019973Y023755D01*
+X019986Y023803D01*
+X020003Y023851D01*
+X020024Y023897D01*
+X020048Y023941D01*
+X020076Y023983D01*
+X020107Y024023D01*
+X020141Y024060D01*
+X020178Y024095D01*
+X020217Y024126D01*
+X020258Y024155D01*
+X020302Y024180D01*
+X020348Y024202D01*
+X020395Y024220D01*
+X020443Y024234D01*
+X020492Y024245D01*
+X020542Y024252D01*
+X020592Y024255D01*
+X020643Y024254D01*
+X020693Y024249D01*
+X020743Y024240D01*
+X020791Y024228D01*
+X020839Y024211D01*
+X020885Y024191D01*
+X020930Y024168D01*
+X020973Y024141D01*
+X021013Y024111D01*
+X021051Y024078D01*
+X021086Y024042D01*
+X021119Y024003D01*
+X021148Y023962D01*
+X021174Y023919D01*
+X021197Y023874D01*
+X021216Y023827D01*
+X021231Y023779D01*
+X021243Y023730D01*
+X021251Y023680D01*
+X021255Y023630D01*
+X021255Y023580D01*
+X021251Y023530D01*
+X021243Y023480D01*
+X021231Y023431D01*
+X021216Y023383D01*
+X021197Y023336D01*
+X021174Y023291D01*
+X021148Y023248D01*
+X021119Y023207D01*
+X021086Y023168D01*
+X021051Y023132D01*
+X021013Y023099D01*
+X020973Y023069D01*
+X020930Y023042D01*
+X020885Y023019D01*
+X020839Y022999D01*
+X020791Y022982D01*
+X020743Y022970D01*
+X020693Y022961D01*
+X020643Y022956D01*
+X020592Y022955D01*
+X020542Y022958D01*
+X020492Y022965D01*
+X020443Y022976D01*
+X020395Y022990D01*
+X020348Y023008D01*
+X020302Y023030D01*
+X020258Y023055D01*
+X020217Y023084D01*
+X020178Y023115D01*
+X020141Y023150D01*
+X020107Y023187D01*
+X020076Y023227D01*
+X020048Y023269D01*
+X020024Y023313D01*
+X020003Y023359D01*
+X019986Y023407D01*
+X019973Y023455D01*
+X019963Y023505D01*
+X019957Y023555D01*
+X019955Y023605D01*
+X022076Y022726D02*
+X022078Y022776D01*
+X022084Y022826D01*
+X022094Y022876D01*
+X022107Y022924D01*
+X022124Y022972D01*
+X022145Y023018D01*
+X022169Y023062D01*
+X022197Y023104D01*
+X022228Y023144D01*
+X022262Y023181D01*
+X022299Y023216D01*
+X022338Y023247D01*
+X022379Y023276D01*
+X022423Y023301D01*
+X022469Y023323D01*
+X022516Y023341D01*
+X022564Y023355D01*
+X022613Y023366D01*
+X022663Y023373D01*
+X022713Y023376D01*
+X022764Y023375D01*
+X022814Y023370D01*
+X022864Y023361D01*
+X022912Y023349D01*
+X022960Y023332D01*
+X023006Y023312D01*
+X023051Y023289D01*
+X023094Y023262D01*
+X023134Y023232D01*
+X023172Y023199D01*
+X023207Y023163D01*
+X023240Y023124D01*
+X023269Y023083D01*
+X023295Y023040D01*
+X023318Y022995D01*
+X023337Y022948D01*
+X023352Y022900D01*
+X023364Y022851D01*
+X023372Y022801D01*
+X023376Y022751D01*
+X023376Y022701D01*
+X023372Y022651D01*
+X023364Y022601D01*
+X023352Y022552D01*
+X023337Y022504D01*
+X023318Y022457D01*
+X023295Y022412D01*
+X023269Y022369D01*
+X023240Y022328D01*
+X023207Y022289D01*
+X023172Y022253D01*
+X023134Y022220D01*
+X023094Y022190D01*
+X023051Y022163D01*
+X023006Y022140D01*
+X022960Y022120D01*
+X022912Y022103D01*
+X022864Y022091D01*
+X022814Y022082D01*
+X022764Y022077D01*
+X022713Y022076D01*
+X022663Y022079D01*
+X022613Y022086D01*
+X022564Y022097D01*
+X022516Y022111D01*
+X022469Y022129D01*
+X022423Y022151D01*
+X022379Y022176D01*
+X022338Y022205D01*
+X022299Y022236D01*
+X022262Y022271D01*
+X022228Y022308D01*
+X022197Y022348D01*
+X022169Y022390D01*
+X022145Y022434D01*
+X022124Y022480D01*
+X022107Y022528D01*
+X022094Y022576D01*
+X022084Y022626D01*
+X022078Y022676D01*
+X022076Y022726D01*
+X019955Y020605D02*
+X019957Y020655D01*
+X019963Y020705D01*
+X019973Y020755D01*
+X019986Y020803D01*
+X020003Y020851D01*
+X020024Y020897D01*
+X020048Y020941D01*
+X020076Y020983D01*
+X020107Y021023D01*
+X020141Y021060D01*
+X020178Y021095D01*
+X020217Y021126D01*
+X020258Y021155D01*
+X020302Y021180D01*
+X020348Y021202D01*
+X020395Y021220D01*
+X020443Y021234D01*
+X020492Y021245D01*
+X020542Y021252D01*
+X020592Y021255D01*
+X020643Y021254D01*
+X020693Y021249D01*
+X020743Y021240D01*
+X020791Y021228D01*
+X020839Y021211D01*
+X020885Y021191D01*
+X020930Y021168D01*
+X020973Y021141D01*
+X021013Y021111D01*
+X021051Y021078D01*
+X021086Y021042D01*
+X021119Y021003D01*
+X021148Y020962D01*
+X021174Y020919D01*
+X021197Y020874D01*
+X021216Y020827D01*
+X021231Y020779D01*
+X021243Y020730D01*
+X021251Y020680D01*
+X021255Y020630D01*
+X021255Y020580D01*
+X021251Y020530D01*
+X021243Y020480D01*
+X021231Y020431D01*
+X021216Y020383D01*
+X021197Y020336D01*
+X021174Y020291D01*
+X021148Y020248D01*
+X021119Y020207D01*
+X021086Y020168D01*
+X021051Y020132D01*
+X021013Y020099D01*
+X020973Y020069D01*
+X020930Y020042D01*
+X020885Y020019D01*
+X020839Y019999D01*
+X020791Y019982D01*
+X020743Y019970D01*
+X020693Y019961D01*
+X020643Y019956D01*
+X020592Y019955D01*
+X020542Y019958D01*
+X020492Y019965D01*
+X020443Y019976D01*
+X020395Y019990D01*
+X020348Y020008D01*
+X020302Y020030D01*
+X020258Y020055D01*
+X020217Y020084D01*
+X020178Y020115D01*
+X020141Y020150D01*
+X020107Y020187D01*
+X020076Y020227D01*
+X020048Y020269D01*
+X020024Y020313D01*
+X020003Y020359D01*
+X019986Y020407D01*
+X019973Y020455D01*
+X019963Y020505D01*
+X019957Y020555D01*
+X019955Y020605D01*
+X022076Y018484D02*
+X022078Y018534D01*
+X022084Y018584D01*
+X022094Y018634D01*
+X022107Y018682D01*
+X022124Y018730D01*
+X022145Y018776D01*
+X022169Y018820D01*
+X022197Y018862D01*
+X022228Y018902D01*
+X022262Y018939D01*
+X022299Y018974D01*
+X022338Y019005D01*
+X022379Y019034D01*
+X022423Y019059D01*
+X022469Y019081D01*
+X022516Y019099D01*
+X022564Y019113D01*
+X022613Y019124D01*
+X022663Y019131D01*
+X022713Y019134D01*
+X022764Y019133D01*
+X022814Y019128D01*
+X022864Y019119D01*
+X022912Y019107D01*
+X022960Y019090D01*
+X023006Y019070D01*
+X023051Y019047D01*
+X023094Y019020D01*
+X023134Y018990D01*
+X023172Y018957D01*
+X023207Y018921D01*
+X023240Y018882D01*
+X023269Y018841D01*
+X023295Y018798D01*
+X023318Y018753D01*
+X023337Y018706D01*
+X023352Y018658D01*
+X023364Y018609D01*
+X023372Y018559D01*
+X023376Y018509D01*
+X023376Y018459D01*
+X023372Y018409D01*
+X023364Y018359D01*
+X023352Y018310D01*
+X023337Y018262D01*
+X023318Y018215D01*
+X023295Y018170D01*
+X023269Y018127D01*
+X023240Y018086D01*
+X023207Y018047D01*
+X023172Y018011D01*
+X023134Y017978D01*
+X023094Y017948D01*
+X023051Y017921D01*
+X023006Y017898D01*
+X022960Y017878D01*
+X022912Y017861D01*
+X022864Y017849D01*
+X022814Y017840D01*
+X022764Y017835D01*
+X022713Y017834D01*
+X022663Y017837D01*
+X022613Y017844D01*
+X022564Y017855D01*
+X022516Y017869D01*
+X022469Y017887D01*
+X022423Y017909D01*
+X022379Y017934D01*
+X022338Y017963D01*
+X022299Y017994D01*
+X022262Y018029D01*
+X022228Y018066D01*
+X022197Y018106D01*
+X022169Y018148D01*
+X022145Y018192D01*
+X022124Y018238D01*
+X022107Y018286D01*
+X022094Y018334D01*
+X022084Y018384D01*
+X022078Y018434D01*
+X022076Y018484D01*
+X019955Y017605D02*
+X019957Y017655D01*
+X019963Y017705D01*
+X019973Y017755D01*
+X019986Y017803D01*
+X020003Y017851D01*
+X020024Y017897D01*
+X020048Y017941D01*
+X020076Y017983D01*
+X020107Y018023D01*
+X020141Y018060D01*
+X020178Y018095D01*
+X020217Y018126D01*
+X020258Y018155D01*
+X020302Y018180D01*
+X020348Y018202D01*
+X020395Y018220D01*
+X020443Y018234D01*
+X020492Y018245D01*
+X020542Y018252D01*
+X020592Y018255D01*
+X020643Y018254D01*
+X020693Y018249D01*
+X020743Y018240D01*
+X020791Y018228D01*
+X020839Y018211D01*
+X020885Y018191D01*
+X020930Y018168D01*
+X020973Y018141D01*
+X021013Y018111D01*
+X021051Y018078D01*
+X021086Y018042D01*
+X021119Y018003D01*
+X021148Y017962D01*
+X021174Y017919D01*
+X021197Y017874D01*
+X021216Y017827D01*
+X021231Y017779D01*
+X021243Y017730D01*
+X021251Y017680D01*
+X021255Y017630D01*
+X021255Y017580D01*
+X021251Y017530D01*
+X021243Y017480D01*
+X021231Y017431D01*
+X021216Y017383D01*
+X021197Y017336D01*
+X021174Y017291D01*
+X021148Y017248D01*
+X021119Y017207D01*
+X021086Y017168D01*
+X021051Y017132D01*
+X021013Y017099D01*
+X020973Y017069D01*
+X020930Y017042D01*
+X020885Y017019D01*
+X020839Y016999D01*
+X020791Y016982D01*
+X020743Y016970D01*
+X020693Y016961D01*
+X020643Y016956D01*
+X020592Y016955D01*
+X020542Y016958D01*
+X020492Y016965D01*
+X020443Y016976D01*
+X020395Y016990D01*
+X020348Y017008D01*
+X020302Y017030D01*
+X020258Y017055D01*
+X020217Y017084D01*
+X020178Y017115D01*
+X020141Y017150D01*
+X020107Y017187D01*
+X020076Y017227D01*
+X020048Y017269D01*
+X020024Y017313D01*
+X020003Y017359D01*
+X019986Y017407D01*
+X019973Y017455D01*
+X019963Y017505D01*
+X019957Y017555D01*
+X019955Y017605D01*
+X022955Y020605D02*
+X022957Y020655D01*
+X022963Y020705D01*
+X022973Y020755D01*
+X022986Y020803D01*
+X023003Y020851D01*
+X023024Y020897D01*
+X023048Y020941D01*
+X023076Y020983D01*
+X023107Y021023D01*
+X023141Y021060D01*
+X023178Y021095D01*
+X023217Y021126D01*
+X023258Y021155D01*
+X023302Y021180D01*
+X023348Y021202D01*
+X023395Y021220D01*
+X023443Y021234D01*
+X023492Y021245D01*
+X023542Y021252D01*
+X023592Y021255D01*
+X023643Y021254D01*
+X023693Y021249D01*
+X023743Y021240D01*
+X023791Y021228D01*
+X023839Y021211D01*
+X023885Y021191D01*
+X023930Y021168D01*
+X023973Y021141D01*
+X024013Y021111D01*
+X024051Y021078D01*
+X024086Y021042D01*
+X024119Y021003D01*
+X024148Y020962D01*
+X024174Y020919D01*
+X024197Y020874D01*
+X024216Y020827D01*
+X024231Y020779D01*
+X024243Y020730D01*
+X024251Y020680D01*
+X024255Y020630D01*
+X024255Y020580D01*
+X024251Y020530D01*
+X024243Y020480D01*
+X024231Y020431D01*
+X024216Y020383D01*
+X024197Y020336D01*
+X024174Y020291D01*
+X024148Y020248D01*
+X024119Y020207D01*
+X024086Y020168D01*
+X024051Y020132D01*
+X024013Y020099D01*
+X023973Y020069D01*
+X023930Y020042D01*
+X023885Y020019D01*
+X023839Y019999D01*
+X023791Y019982D01*
+X023743Y019970D01*
+X023693Y019961D01*
+X023643Y019956D01*
+X023592Y019955D01*
+X023542Y019958D01*
+X023492Y019965D01*
+X023443Y019976D01*
+X023395Y019990D01*
+X023348Y020008D01*
+X023302Y020030D01*
+X023258Y020055D01*
+X023217Y020084D01*
+X023178Y020115D01*
+X023141Y020150D01*
+X023107Y020187D01*
+X023076Y020227D01*
+X023048Y020269D01*
+X023024Y020313D01*
+X023003Y020359D01*
+X022986Y020407D01*
+X022973Y020455D01*
+X022963Y020505D01*
+X022957Y020555D01*
+X022955Y020605D01*
+X042741Y020014D02*
+X042743Y020041D01*
+X042749Y020068D01*
+X042758Y020094D01*
+X042771Y020118D01*
+X042787Y020141D01*
+X042806Y020160D01*
+X042828Y020177D01*
+X042852Y020191D01*
+X042877Y020201D01*
+X042904Y020208D01*
+X042931Y020211D01*
+X042959Y020210D01*
+X042986Y020205D01*
+X043012Y020197D01*
+X043036Y020185D01*
+X043059Y020169D01*
+X043080Y020151D01*
+X043097Y020130D01*
+X043112Y020106D01*
+X043123Y020081D01*
+X043131Y020055D01*
+X043135Y020028D01*
+X043135Y020000D01*
+X043131Y019973D01*
+X043123Y019947D01*
+X043112Y019922D01*
+X043097Y019898D01*
+X043080Y019877D01*
+X043059Y019859D01*
+X043037Y019843D01*
+X043012Y019831D01*
+X042986Y019823D01*
+X042959Y019818D01*
+X042931Y019817D01*
+X042904Y019820D01*
+X042877Y019827D01*
+X042852Y019837D01*
+X042828Y019851D01*
+X042806Y019868D01*
+X042787Y019887D01*
+X042771Y019910D01*
+X042758Y019934D01*
+X042749Y019960D01*
+X042743Y019987D01*
+X042741Y020014D01*
+X042741Y021196D02*
+X042743Y021223D01*
+X042749Y021250D01*
+X042758Y021276D01*
+X042771Y021300D01*
+X042787Y021323D01*
+X042806Y021342D01*
+X042828Y021359D01*
+X042852Y021373D01*
+X042877Y021383D01*
+X042904Y021390D01*
+X042931Y021393D01*
+X042959Y021392D01*
+X042986Y021387D01*
+X043012Y021379D01*
+X043036Y021367D01*
+X043059Y021351D01*
+X043080Y021333D01*
+X043097Y021312D01*
+X043112Y021288D01*
+X043123Y021263D01*
+X043131Y021237D01*
+X043135Y021210D01*
+X043135Y021182D01*
+X043131Y021155D01*
+X043123Y021129D01*
+X043112Y021104D01*
+X043097Y021080D01*
+X043080Y021059D01*
+X043059Y021041D01*
+X043037Y021025D01*
+X043012Y021013D01*
+X042986Y021005D01*
+X042959Y021000D01*
+X042931Y020999D01*
+X042904Y021002D01*
+X042877Y021009D01*
+X042852Y021019D01*
+X042828Y021033D01*
+X042806Y021050D01*
+X042787Y021069D01*
+X042771Y021092D01*
+X042758Y021116D01*
+X042749Y021142D01*
+X042743Y021169D01*
+X042741Y021196D01*
+M02*
diff --git a/pcb/lf-antenna/CAM/lf-antenna.dri b/pcb/lf-antenna/CAM/lf-antenna.dri
new file mode 100644 (file)
index 0000000..3b3a1ce
--- /dev/null
@@ -0,0 +1,37 @@
+Generated by EAGLE CAM Processor 6.4.0
+
+Drill Station Info File: lf-antenna.dri
+
+ Date              : 2015.11.13. 17:00:29
+ Drills            : generated
+ Device            : Excellon drill station
+
+Parameter settings:
+
+ Tolerance Drill + :  0.00 %
+ Tolerance Drill - :  0.00 %
+ Rotate            : no
+ Mirror            : no
+ Optimize          : no
+ Auto fit          : yes
+ OffsetX           : 0inch
+ OffsetY           : 0inch
+ Layers            : Drills Holes
+
+Drill File Info:
+
+ Data Mode         : Absolute
+ Units             : 1/10000 Inch
+
+Drills used:
+
+ Code  Size       used
+
+ T01   0.0394inch     6
+ T02   0.1299inch     9
+
+Total number of drills: 15
+
+Plotfiles:
+
+ lf-antenna.TXT
diff --git a/pcb/lf-antenna/CAM/lf-antenna.gpi b/pcb/lf-antenna/CAM/lf-antenna.gpi
new file mode 100644 (file)
index 0000000..e283c85
--- /dev/null
@@ -0,0 +1,44 @@
+Generated by EAGLE CAM Processor 6.4.0
+
+Photoplotter Info File: lf-antenna.gpi
+
+ Date              : 2015.11.13. 17:00:29
+ Plotfile          : lf-antenna.GTL
+ Apertures         : generated: 
+ Device            : Gerber RS-274-X photoplotter, coordinate format 2.4 inch
+
+Parameter settings:
+
+ Emulate Apertures : no
+ Tolerance Draw  + :  0.00 %
+ Tolerance Draw  - :  0.00 %
+ Tolerance Flash + :  0.00 %
+ Tolerance Flash - :  0.00 %
+ Rotate            : no
+ Mirror            : no
+ Optimize          : yes
+ Auto fit          : yes
+ OffsetX           : 0inch
+ OffsetY           : 0inch
+
+Plotfile Info:
+
+ Coordinate Format : 2.4
+ Coordinate Units  : Inch
+ Data Mode         : Absolute
+ Zero Suppression  : None
+ End Of Block      : *
+
+Apertures used:
+
+ Code     Shape     Size                  used
+
+ D10      draw      0.0010inch               6
+ D11      draw      0.0000inch              11
+ D12      rectangle 0.1496inch x 0.0906inch     2
+ D13      rectangle 0.0984inch x 0.0217inch     4
+ D14      rectangle 0.0394inch x 0.0433inch    12
+ D15      draw      0.0150inch             458
+ D16      round     0.0700inch               2
+ D17      round     0.0591inch               2
+
diff --git a/pcb/lf-antenna/MFG/lf-antenna_bot.pdf b/pcb/lf-antenna/MFG/lf-antenna_bot.pdf
new file mode 100644 (file)
index 0000000..79d30a7
Binary files /dev/null and b/pcb/lf-antenna/MFG/lf-antenna_bot.pdf differ
diff --git a/pcb/lf-antenna/MFG/lf-antenna_cam.zip b/pcb/lf-antenna/MFG/lf-antenna_cam.zip
new file mode 100644 (file)
index 0000000..63aef4a
Binary files /dev/null and b/pcb/lf-antenna/MFG/lf-antenna_cam.zip differ
diff --git a/pcb/lf-antenna/MFG/lf-antenna_top.pdf b/pcb/lf-antenna/MFG/lf-antenna_top.pdf
new file mode 100644 (file)
index 0000000..18365e4
Binary files /dev/null and b/pcb/lf-antenna/MFG/lf-antenna_top.pdf differ
diff --git a/pcb/lf-antenna/README.md b/pcb/lf-antenna/README.md
new file mode 100644 (file)
index 0000000..74fd781
--- /dev/null
@@ -0,0 +1 @@
+LF antenna CAD / CAM / MFG files. Put here as it was in the original zip file too. Didn't modified the layout file, only CAM generation.
\ No newline at end of file
diff --git a/pcb/proxmark3_fix/BOT_layer_preview.png b/pcb/proxmark3_fix/BOT_layer_preview.png
new file mode 100644 (file)
index 0000000..a124ccf
Binary files /dev/null and b/pcb/proxmark3_fix/BOT_layer_preview.png differ
diff --git a/pcb/proxmark3_fix/CAD/change_log.txt b/pcb/proxmark3_fix/CAD/change_log.txt
new file mode 100644 (file)
index 0000000..6ee7a49
--- /dev/null
@@ -0,0 +1,14 @@
+13/11/2015 Change list from original PCB:
+
+Main problem: more then 800 DRC errors when runing that in Eagle. Check out the following changes to make a more reliable PCB. Those are minor cosmetic changes, but ease your life to avoid short circuit.
+
+1. Eagle Layout / DRC rules / Masks / Limit: from 0mil to 16mil, thus ordinary GND and signal vias which smaller then 16mil wont be open at solder stop mask layer.
+
+2. Eagle Layout / DRC rules / Masks / Stop MAX: from 2mil to 0, this way the solder stop mask wont overlap silkscreen drawings. Also as per PCB assembly houses, it's recommended, they set their own scaling for production.
+
+3. Exporting all the parts in the proxmark3 Eagle Layout into a library for minor silkscreen edition: proxmark3_components  merged.lbr
+       - Editing components footprint as was overlapping with top stop mask
+
+4. Adding top, bottom, in1, in2 layer markings in PCB layout for better manufacturing identification   
+
+5. Generating 4 layer CAM files
diff --git a/pcb/proxmark3_fix/CAD/proxmark3.brd b/pcb/proxmark3_fix/CAD/proxmark3.brd
new file mode 100644 (file)
index 0000000..d7634eb
--- /dev/null
@@ -0,0 +1,4640 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE eagle SYSTEM "eagle.dtd">
+<eagle version="6.4">
+<drawing>
+<settings>
+<setting alwaysvectorfont="yes"/>
+<setting verticaltext="up"/>
+</settings>
+<grid distance="100" unitdist="mil" unit="mil" style="lines" multiple="1" display="no" altdistance="1" altunitdist="mil" altunit="mil"/>
+<layers>
+<layer number="1" name="Top" color="4" fill="1" visible="yes" active="yes"/>
+<layer number="2" name="Route2" color="3" fill="6" visible="yes" active="yes"/>
+<layer number="3" name="Route3" color="4" fill="3" visible="no" active="yes"/>
+<layer number="4" name="Route4" color="1" fill="4" visible="no" active="yes"/>
+<layer number="5" name="Route5" color="4" fill="4" visible="no" active="yes"/>
+<layer number="6" name="Route6" color="1" fill="8" visible="no" active="yes"/>
+<layer number="7" name="Route7" color="4" fill="8" visible="no" active="yes"/>
+<layer number="8" name="Route8" color="1" fill="2" visible="no" active="yes"/>
+<layer number="9" name="Route9" color="4" fill="2" visible="no" active="yes"/>
+<layer number="10" name="Route10" color="1" fill="7" visible="no" active="yes"/>
+<layer number="11" name="Route11" color="4" fill="7" visible="no" active="yes"/>
+<layer number="12" name="Route12" color="1" fill="5" visible="no" active="yes"/>
+<layer number="13" name="Route13" color="4" fill="5" visible="no" active="yes"/>
+<layer number="14" name="Route14" color="1" fill="6" visible="no" active="yes"/>
+<layer number="15" name="Route15" color="5" fill="3" visible="yes" active="yes"/>
+<layer number="16" name="Bottom" color="1" fill="1" visible="yes" active="yes"/>
+<layer number="17" name="Pads" color="2" fill="1" visible="yes" active="yes"/>
+<layer number="18" name="Vias" color="2" fill="1" visible="yes" active="yes"/>
+<layer number="19" name="Unrouted" color="6" fill="1" visible="yes" active="yes"/>
+<layer number="20" name="Dimension" color="15" fill="1" visible="yes" active="yes"/>
+<layer number="21" name="tPlace" color="7" fill="1" visible="yes" active="yes"/>
+<layer number="22" name="bPlace" color="7" fill="1" visible="no" active="yes"/>
+<layer number="23" name="tOrigins" color="15" fill="1" visible="yes" active="yes"/>
+<layer number="24" name="bOrigins" color="15" fill="1" visible="no" active="yes"/>
+<layer number="25" name="tNames" color="7" fill="1" visible="yes" active="yes"/>
+<layer number="26" name="bNames" color="7" fill="1" visible="no" active="yes"/>
+<layer number="27" name="tValues" color="7" fill="1" visible="no" active="yes"/>
+<layer number="28" name="bValues" color="7" fill="1" visible="no" active="yes"/>
+<layer number="29" name="tStop" color="7" fill="3" visible="no" active="yes"/>
+<layer number="30" name="bStop" color="7" fill="6" visible="no" active="yes"/>
+<layer number="31" name="tCream" color="7" fill="4" visible="no" active="yes"/>
+<layer number="32" name="bCream" color="7" fill="5" visible="no" active="yes"/>
+<layer number="33" name="tFinish" color="6" fill="3" visible="no" active="yes"/>
+<layer number="34" name="bFinish" color="6" fill="6" visible="no" active="yes"/>
+<layer number="35" name="tGlue" color="7" fill="4" visible="no" active="yes"/>
+<layer number="36" name="bGlue" color="7" fill="5" visible="no" active="yes"/>
+<layer number="37" name="tTest" color="7" fill="1" visible="no" active="yes"/>
+<layer number="38" name="bTest" color="7" fill="1" visible="no" active="yes"/>
+<layer number="39" name="tKeepout" color="4" fill="11" visible="no" active="yes"/>
+<layer number="40" name="bKeepout" color="1" fill="11" visible="no" active="yes"/>
+<layer number="41" name="tRestrict" color="4" fill="10" visible="no" active="yes"/>
+<layer number="42" name="bRestrict" color="1" fill="10" visible="no" active="yes"/>
+<layer number="43" name="vRestrict" color="2" fill="10" visible="no" active="yes"/>
+<layer number="44" name="Drills" color="7" fill="1" visible="no" active="yes"/>
+<layer number="45" name="Holes" color="7" fill="1" visible="no" active="yes"/>
+<layer number="46" name="Milling" color="3" fill="1" visible="no" active="yes"/>
+<layer number="47" name="Measures" color="7" fill="1" visible="no" active="yes"/>
+<layer number="48" name="Document" color="7" fill="1" visible="no" active="yes"/>
+<layer number="49" name="Reference" color="7" fill="1" visible="no" active="yes"/>
+<layer number="51" name="tDocu" color="8" fill="1" visible="no" active="yes"/>
+<layer number="52" name="bDocu" color="7" fill="1" visible="no" active="yes"/>
+<layer number="91" name="Nets" color="2" fill="1" visible="no" active="no"/>
+<layer number="92" name="Busses" color="1" fill="1" visible="no" active="no"/>
+<layer number="93" name="Pins" color="2" fill="1" visible="no" active="no"/>
+<layer number="94" name="Symbols" color="4" fill="1" visible="no" active="no"/>
+<layer number="95" name="Names" color="7" fill="1" visible="no" active="no"/>
+<layer number="96" name="Values" color="7" fill="1" visible="no" active="no"/>
+<layer number="97" name="Info" color="7" fill="1" visible="no" active="no"/>
+<layer number="98" name="Guide" color="6" fill="1" visible="no" active="no"/>
+<layer number="101" name="LcdOutline" color="7" fill="1" visible="no" active="yes"/>
+<layer number="250" name="Descript" color="7" fill="1" visible="no" active="yes"/>
+<layer number="251" name="SMDround" color="7" fill="1" visible="no" active="yes"/>
+</layers>
+<board>
+<plain>
+<wire x1="81.28" y1="0" x2="81.28" y2="51.308" width="0.0254" layer="20"/>
+<wire x1="81.28" y1="51.308" x2="0" y2="51.308" width="0.0254" layer="20"/>
+<wire x1="0" y1="51.308" x2="0" y2="0" width="0.0254" layer="20"/>
+<wire x1="0" y1="0" x2="81.28" y2="0" width="0.0254" layer="20"/>
+<circle x="48.641" y="47.879" radius="0.127" width="0.4064" layer="1"/>
+<circle x="48.641" y="47.879" radius="0.4016" width="1.016" layer="29"/>
+<circle x="76.835" y="48.514" radius="0.127" width="0.4064" layer="1"/>
+<circle x="76.835" y="48.514" radius="0.4016" width="1.016" layer="29"/>
+<circle x="53.848" y="2.159" radius="0.127" width="0.4064" layer="1"/>
+<circle x="53.848" y="2.159" radius="0.4016" width="1.016" layer="29"/>
+<circle x="5.969" y="6.096" radius="0.127" width="0.4064" layer="1"/>
+<circle x="5.969" y="6.096" radius="0.4016" width="1.016" layer="29"/>
+<circle x="35.941" y="19.431" radius="0.127" width="0.4064" layer="1"/>
+<circle x="35.941" y="19.431" radius="0.4016" width="1.016" layer="29"/>
+<circle x="72.771" y="10.287" radius="0.127" width="0.4064" layer="1"/>
+<circle x="72.771" y="10.287" radius="0.4016" width="1.016" layer="29"/>
+<text x="79.502" y="1.651" size="1.27" layer="16" ratio="17" rot="MR0">proxmark3</text>
+<text x="79.502" y="1.651" size="1.27" layer="30" ratio="17" rot="MR0">proxmark3</text>
+<text x="12.7" y="48.641" size="1.27" layer="30" ratio="17" rot="MR0">J. Westhues</text>
+<text x="12.7" y="48.641" size="1.27" layer="16" ratio="17" rot="MR0">J. Westhues</text>
+<text x="79.121" y="26.67" size="1.27" layer="1" ratio="17" rot="R270">top</text>
+<text x="50.673" y="45.085" size="1.27" layer="16" ratio="17" rot="MR0">bottom</text>
+<text x="56.515" y="49.276" size="1.27" layer="2" ratio="17" rot="R180">route2</text>
+<text x="79.502" y="43.053" size="1.27" layer="15" ratio="17" rot="R180">route15</text>
+<text x="44.704" y="49.276" size="1.016" layer="21" ratio="20" rot="R270">TMS</text>
+<text x="28.702" y="46.863" size="1.016" layer="21" ratio="20" rot="R90">Vdd</text>
+<text x="99.06" y="50.8" size="1.778" layer="16" font="vector" ratio="15" rot="MR0">BOTTOM</text>
+<text x="88.9" y="58.42" size="1.778" layer="1" font="vector" ratio="15">TOP</text>
+<text x="88.9" y="55.88" size="1.778" layer="2" font="vector" ratio="15">IN1</text>
+<text x="88.9" y="53.34" size="1.778" layer="15" font="vector" ratio="15">IN2</text>
+</plain>
+<libraries>
+<library name="  merged">
+<packages>
+<package name="VQFP-100">
+<wire x1="-7" y1="7" x2="7" y2="7" width="0.254" layer="21"/>
+<wire x1="7" y1="7" x2="7" y2="-7" width="0.254" layer="21"/>
+<wire x1="7" y1="-7" x2="-7" y2="-7" width="0.254" layer="21"/>
+<wire x1="-7" y1="-7" x2="-7" y2="7" width="0.254" layer="21"/>
+<circle x="-5" y="5" radius="1" width="0.254" layer="21"/>
+<smd name="26" x="-6" y="-8" dx="0.25" dy="1.5" layer="1"/>
+<smd name="27" x="-5.5" y="-8" dx="0.25" dy="1.5" layer="1"/>
+<smd name="28" x="-5" y="-8" dx="0.25" dy="1.5" layer="1"/>
+<smd name="29" x="-4.5" y="-8" dx="0.25" dy="1.5" layer="1"/>
+<smd name="30" x="-4" y="-8" dx="0.25" dy="1.5" layer="1"/>
+<smd name="31" x="-3.5" y="-8" dx="0.25" dy="1.5" layer="1"/>
+<smd name="32" x="-3" y="-8" dx="0.25" dy="1.5" layer="1"/>
+<smd name="33" x="-2.5" y="-8" dx="0.25" dy="1.5" layer="1"/>
+<smd name="34" x="-2" y="-8" dx="0.25" dy="1.5" layer="1"/>
+<smd name="35" x="-1.5" y="-8" dx="0.25" dy="1.5" layer="1"/>
+<smd name="36" x="-1" y="-8" dx="0.25" dy="1.5" layer="1"/>
+<smd name="37" x="-0.5" y="-8" dx="0.25" dy="1.5" layer="1"/>
+<smd name="38" x="0" y="-8" dx="0.25" dy="1.5" layer="1"/>
+<smd name="39" x="0.5" y="-8" dx="0.25" dy="1.5" layer="1"/>
+<smd name="40" x="1" y="-8" dx="0.25" dy="1.5" layer="1"/>
+<smd name="41" x="1.5" y="-8" dx="0.25" dy="1.5" layer="1"/>
+<smd name="42" x="2" y="-8" dx="0.25" dy="1.5" layer="1"/>
+<smd name="43" x="2.5" y="-8" dx="0.25" dy="1.5" layer="1"/>
+<smd name="44" x="3" y="-8" dx="0.25" dy="1.5" layer="1"/>
+<smd name="45" x="3.5" y="-8" dx="0.25" dy="1.5" layer="1"/>
+<smd name="46" x="4" y="-8" dx="0.25" dy="1.5" layer="1"/>
+<smd name="47" x="4.5" y="-8" dx="0.25" dy="1.5" layer="1"/>
+<smd name="48" x="5" y="-8" dx="0.25" dy="1.5" layer="1"/>
+<smd name="49" x="5.5" y="-8" dx="0.25" dy="1.5" layer="1"/>
+<smd name="50" x="6" y="-8" dx="0.25" dy="1.5" layer="1"/>
+<smd name="100" x="-6" y="8" dx="0.25" dy="1.5" layer="1"/>
+<smd name="99" x="-5.5" y="8" dx="0.25" dy="1.5" layer="1"/>
+<smd name="98" x="-5" y="8" dx="0.25" dy="1.5" layer="1"/>
+<smd name="97" x="-4.5" y="8" dx="0.25" dy="1.5" layer="1"/>
+<smd name="96" x="-4" y="8" dx="0.25" dy="1.5" layer="1"/>
+<smd name="95" x="-3.5" y="8" dx="0.25" dy="1.5" layer="1"/>
+<smd name="94" x="-3" y="8" dx="0.25" dy="1.5" layer="1"/>
+<smd name="93" x="-2.5" y="8" dx="0.25" dy="1.5" layer="1"/>
+<smd name="92" x="-2" y="8" dx="0.25" dy="1.5" layer="1"/>
+<smd name="91" x="-1.5" y="8" dx="0.25" dy="1.5" layer="1"/>
+<smd name="90" x="-1" y="8" dx="0.25" dy="1.5" layer="1"/>
+<smd name="89" x="-0.5" y="8" dx="0.25" dy="1.5" layer="1"/>
+<smd name="88" x="0" y="8" dx="0.25" dy="1.5" layer="1"/>
+<smd name="87" x="0.5" y="8" dx="0.25" dy="1.5" layer="1"/>
+<smd name="86" x="1" y="8" dx="0.25" dy="1.5" layer="1"/>
+<smd name="85" x="1.5" y="8" dx="0.25" dy="1.5" layer="1"/>
+<smd name="84" x="2" y="8" dx="0.25" dy="1.5" layer="1"/>
+<smd name="83" x="2.5" y="8" dx="0.25" dy="1.5" layer="1"/>
+<smd name="82" x="3" y="8" dx="0.25" dy="1.5" layer="1"/>
+<smd name="81" x="3.5" y="8" dx="0.25" dy="1.5" layer="1"/>
+<smd name="80" x="4" y="8" dx="0.25" dy="1.5" layer="1"/>
+<smd name="79" x="4.5" y="8" dx="0.25" dy="1.5" layer="1"/>
+<smd name="78" x="5" y="8" dx="0.25" dy="1.5" layer="1"/>
+<smd name="77" x="5.5" y="8" dx="0.25" dy="1.5" layer="1"/>
+<smd name="76" x="6" y="8" dx="0.25" dy="1.5" layer="1"/>
+<smd name="51" x="8" y="-6" dx="0.25" dy="1.25" layer="1" rot="R90"/>
+<smd name="52" x="8" y="-5.5" dx="0.25" dy="1.25" layer="1" rot="R90"/>
+<smd name="53" x="8" y="-5" dx="0.25" dy="1.25" layer="1" rot="R90"/>
+<smd name="54" x="8" y="-4.5" dx="0.25" dy="1.25" layer="1" rot="R90"/>
+<smd name="55" x="8" y="-4" dx="0.25" dy="1.25" layer="1" rot="R90"/>
+<smd name="56" x="8" y="-3.5" dx="0.25" dy="1.25" layer="1" rot="R90"/>
+<smd name="57" x="8" y="-3" dx="0.25" dy="1.25" layer="1" rot="R90"/>
+<smd name="58" x="8" y="-2.5" dx="0.25" dy="1.25" layer="1" rot="R90"/>
+<smd name="59" x="8" y="-2" dx="0.25" dy="1.25" layer="1" rot="R90"/>
+<smd name="60" x="8" y="-1.5" dx="0.25" dy="1.25" layer="1" rot="R90"/>
+<smd name="61" x="8" y="-1" dx="0.25" dy="1.25" layer="1" rot="R90"/>
+<smd name="62" x="8" y="-0.5" dx="0.25" dy="1.25" layer="1" rot="R90"/>
+<smd name="63" x="8" y="0" dx="0.25" dy="1.25" layer="1" rot="R90"/>
+<smd name="64" x="8" y="0.5" dx="0.25" dy="1.25" layer="1" rot="R90"/>
+<smd name="65" x="8" y="1" dx="0.25" dy="1.25" layer="1" rot="R90"/>
+<smd name="66" x="8" y="1.5" dx="0.25" dy="1.25" layer="1" rot="R90"/>
+<smd name="67" x="8" y="2" dx="0.25" dy="1.25" layer="1" rot="R90"/>
+<smd name="68" x="8" y="2.5" dx="0.25" dy="1.25" layer="1" rot="R90"/>
+<smd name="69" x="8" y="3" dx="0.25" dy="1.25" layer="1" rot="R90"/>
+<smd name="70" x="8" y="3.5" dx="0.25" dy="1.25" layer="1" rot="R90"/>
+<smd name="71" x="8" y="4" dx="0.25" dy="1.25" layer="1" rot="R90"/>
+<smd name="72" x="8" y="4.5" dx="0.25" dy="1.25" layer="1" rot="R90"/>
+<smd name="73" x="8" y="5" dx="0.25" dy="1.25" layer="1" rot="R90"/>
+<smd name="74" x="8" y="5.5" dx="0.25" dy="1.25" layer="1" rot="R90"/>
+<smd name="75" x="8" y="6" dx="0.25" dy="1.25" layer="1" rot="R90"/>
+<smd name="25" x="-8" y="-6" dx="0.25" dy="1.25" layer="1" rot="R90"/>
+<smd name="24" x="-8" y="-5.5" dx="0.25" dy="1.25" layer="1" rot="R90"/>
+<smd name="23" x="-8" y="-5" dx="0.25" dy="1.25" layer="1" rot="R90"/>
+<smd name="22" x="-8" y="-4.5" dx="0.25" dy="1.25" layer="1" rot="R90"/>
+<smd name="21" x="-8" y="-4" dx="0.25" dy="1.25" layer="1" rot="R90"/>
+<smd name="20" x="-8" y="-3.5" dx="0.25" dy="1.25" layer="1" rot="R90"/>
+<smd name="19" x="-8" y="-3" dx="0.25" dy="1.25" layer="1" rot="R90"/>
+<smd name="18" x="-8" y="-2.5" dx="0.25" dy="1.25" layer="1" rot="R90"/>
+<smd name="17" x="-8" y="-2" dx="0.25" dy="1.25" layer="1" rot="R90"/>
+<smd name="16" x="-8" y="-1.5" dx="0.25" dy="1.25" layer="1" rot="R90"/>
+<smd name="15" x="-8" y="-1" dx="0.25" dy="1.25" layer="1" rot="R90"/>
+<smd name="14" x="-8" y="-0.5" dx="0.25" dy="1.25" layer="1" rot="R90"/>
+<smd name="13" x="-8" y="0" dx="0.25" dy="1.25" layer="1" rot="R90"/>
+<smd name="12" x="-8" y="0.5" dx="0.25" dy="1.25" layer="1" rot="R90"/>
+<smd name="11" x="-8" y="1" dx="0.25" dy="1.25" layer="1" rot="R90"/>
+<smd name="10" x="-8" y="1.5" dx="0.25" dy="1.25" layer="1" rot="R90"/>
+<smd name="9" x="-8" y="2" dx="0.25" dy="1.25" layer="1" rot="R90"/>
+<smd name="8" x="-8" y="2.5" dx="0.25" dy="1.25" layer="1" rot="R90"/>
+<smd name="7" x="-8" y="3" dx="0.25" dy="1.25" layer="1" rot="R90"/>
+<smd name="6" x="-8" y="3.5" dx="0.25" dy="1.25" layer="1" rot="R90"/>
+<smd name="5" x="-8" y="4" dx="0.25" dy="1.25" layer="1" rot="R90"/>
+<smd name="4" x="-8" y="4.5" dx="0.25" dy="1.25" layer="1" rot="R90"/>
+<smd name="3" x="-8" y="5" dx="0.25" dy="1.25" layer="1" rot="R90"/>
+<smd name="2" x="-8" y="5.5" dx="0.25" dy="1.25" layer="1" rot="R90"/>
+<smd name="1" x="-8" y="6" dx="0.25" dy="1.25" layer="1" rot="R90"/>
+<text x="6" y="-4" size="1.9304" layer="21" ratio="14" rot="R180">&gt;NAME</text>
+</package>
+<package name="LQFP-64">
+<wire x1="-0.25" y1="11.5" x2="-1.75" y2="11.5" width="0.2" layer="21"/>
+<wire x1="-1.75" y1="11.5" x2="-1.75" y2="10" width="0.2" layer="21"/>
+<wire x1="-0.25" y1="0.5" x2="-1.75" y2="0.5" width="0.2" layer="21"/>
+<wire x1="-1.75" y1="2" x2="-1.75" y2="0.5" width="0.2" layer="21"/>
+<wire x1="9.25" y1="0.5" x2="7.75" y2="0.5" width="0.2" layer="21"/>
+<wire x1="9.25" y1="2" x2="9.25" y2="0.5" width="0.2" layer="21"/>
+<wire x1="9.25" y1="11.5" x2="7.75" y2="11.5" width="0.2" layer="21"/>
+<wire x1="9.25" y1="11.5" x2="9.25" y2="10" width="0.2" layer="21"/>
+<circle x="-0.3467" y="1.8033" radius="0.3807" width="0.2" layer="21"/>
+<smd name="48" x="0" y="12" dx="0.25" dy="2" layer="1"/>
+<smd name="47" x="0.5" y="12" dx="0.25" dy="2" layer="1"/>
+<smd name="46" x="1" y="12" dx="0.25" dy="2" layer="1"/>
+<smd name="45" x="1.5" y="12" dx="0.25" dy="2" layer="1"/>
+<smd name="44" x="2" y="12" dx="0.25" dy="2" layer="1"/>
+<smd name="43" x="2.5" y="12" dx="0.25" dy="2" layer="1"/>
+<smd name="42" x="3" y="12" dx="0.25" dy="2" layer="1"/>
+<smd name="41" x="3.5" y="12" dx="0.25" dy="2" layer="1"/>
+<smd name="40" x="4" y="12" dx="0.25" dy="2" layer="1"/>
+<smd name="39" x="4.5" y="12" dx="0.25" dy="2" layer="1"/>
+<smd name="38" x="5" y="12" dx="0.25" dy="2" layer="1"/>
+<smd name="37" x="5.5" y="12" dx="0.25" dy="2" layer="1"/>
+<smd name="36" x="6" y="12" dx="0.25" dy="2" layer="1"/>
+<smd name="35" x="6.5" y="12" dx="0.25" dy="2" layer="1"/>
+<smd name="34" x="7" y="12" dx="0.25" dy="2" layer="1"/>
+<smd name="33" x="7.5" y="12" dx="0.25" dy="2" layer="1"/>
+<smd name="1" x="0" y="0" dx="0.25" dy="2" layer="1"/>
+<smd name="2" x="0.5" y="0" dx="0.25" dy="2" layer="1"/>
+<smd name="3" x="1" y="0" dx="0.25" dy="2" layer="1"/>
+<smd name="4" x="1.5" y="0" dx="0.25" dy="2" layer="1"/>
+<smd name="5" x="2" y="0" dx="0.25" dy="2" layer="1"/>
+<smd name="6" x="2.5" y="0" dx="0.25" dy="2" layer="1"/>
+<smd name="7" x="3" y="0" dx="0.25" dy="2" layer="1"/>
+<smd name="8" x="3.5" y="0" dx="0.25" dy="2" layer="1"/>
+<smd name="9" x="4" y="0" dx="0.25" dy="2" layer="1"/>
+<smd name="10" x="4.5" y="0" dx="0.25" dy="2" layer="1"/>
+<smd name="11" x="5" y="0" dx="0.25" dy="2" layer="1"/>
+<smd name="12" x="5.5" y="0" dx="0.25" dy="2" layer="1"/>
+<smd name="13" x="6" y="0" dx="0.25" dy="2" layer="1"/>
+<smd name="14" x="6.5" y="0" dx="0.25" dy="2" layer="1"/>
+<smd name="15" x="7" y="0" dx="0.25" dy="2" layer="1"/>
+<smd name="16" x="7.5" y="0" dx="0.25" dy="2" layer="1"/>
+<smd name="64" x="-2.25" y="2.25" dx="0.25" dy="2" layer="1" rot="R90"/>
+<smd name="63" x="-2.25" y="2.75" dx="0.25" dy="2" layer="1" rot="R90"/>
+<smd name="62" x="-2.25" y="3.25" dx="0.25" dy="2" layer="1" rot="R90"/>
+<smd name="61" x="-2.25" y="3.75" dx="0.25" dy="2" layer="1" rot="R90"/>
+<smd name="60" x="-2.25" y="4.25" dx="0.25" dy="2" layer="1" rot="R90"/>
+<smd name="59" x="-2.25" y="4.75" dx="0.25" dy="2" layer="1" rot="R90"/>
+<smd name="58" x="-2.25" y="5.25" dx="0.25" dy="2" layer="1" rot="R90"/>
+<smd name="57" x="-2.25" y="5.75" dx="0.25" dy="2" layer="1" rot="R90"/>
+<smd name="56" x="-2.25" y="6.25" dx="0.25" dy="2" layer="1" rot="R90"/>
+<smd name="55" x="-2.25" y="6.75" dx="0.25" dy="2" layer="1" rot="R90"/>
+<smd name="54" x="-2.25" y="7.25" dx="0.25" dy="2" layer="1" rot="R90"/>
+<smd name="53" x="-2.25" y="7.75" dx="0.25" dy="2" layer="1" rot="R90"/>
+<smd name="52" x="-2.25" y="8.25" dx="0.25" dy="2" layer="1" rot="R90"/>
+<smd name="51" x="-2.25" y="8.75" dx="0.25" dy="2" layer="1" rot="R90"/>
+<smd name="50" x="-2.25" y="9.25" dx="0.25" dy="2" layer="1" rot="R90"/>
+<smd name="49" x="-2.25" y="9.75" dx="0.25" dy="2" layer="1" rot="R90"/>
+<smd name="17" x="9.75" y="2.25" dx="0.25" dy="2" layer="1" rot="R90"/>
+<smd name="18" x="9.75" y="2.75" dx="0.25" dy="2" layer="1" rot="R90"/>
+<smd name="19" x="9.75" y="3.25" dx="0.25" dy="2" layer="1" rot="R90"/>
+<smd name="20" x="9.75" y="3.75" dx="0.25" dy="2" layer="1" rot="R90"/>
+<smd name="21" x="9.75" y="4.25" dx="0.25" dy="2" layer="1" rot="R90"/>
+<smd name="22" x="9.75" y="4.75" dx="0.25" dy="2" layer="1" rot="R90"/>
+<smd name="23" x="9.75" y="5.25" dx="0.25" dy="2" layer="1" rot="R90"/>
+<smd name="24" x="9.75" y="5.75" dx="0.25" dy="2" layer="1" rot="R90"/>
+<smd name="25" x="9.75" y="6.25" dx="0.25" dy="2" layer="1" rot="R90"/>
+<smd name="26" x="9.75" y="6.75" dx="0.25" dy="2" layer="1" rot="R90"/>
+<smd name="27" x="9.75" y="7.25" dx="0.25" dy="2" layer="1" rot="R90"/>
+<smd name="28" x="9.75" y="7.75" dx="0.25" dy="2" layer="1" rot="R90"/>
+<smd name="29" x="9.75" y="8.25" dx="0.25" dy="2" layer="1" rot="R90"/>
+<smd name="30" x="9.75" y="8.75" dx="0.25" dy="2" layer="1" rot="R90"/>
+<smd name="31" x="9.75" y="9.25" dx="0.25" dy="2" layer="1" rot="R90"/>
+<smd name="32" x="9.75" y="9.75" dx="0.25" dy="2" layer="1" rot="R90"/>
+<text x="0.5376" y="1.4397" size="1.27" layer="21">1</text>
+<text x="-0.3641" y="9.155" size="1.27" layer="21">&gt;NAME</text>
+</package>
+<package name="XTAL-SMD-CITIZEN-CS10">
+<wire x1="-0.75" y1="1.65" x2="5.25" y2="1.65" width="0.127" layer="21"/>
+<wire x1="-0.75" y1="-1.65" x2="5.25" y2="-1.65" width="0.127" layer="21"/>
+<smd name="A" x="-0.2" y="0" dx="2.4" dy="2.4" layer="1"/>
+<smd name="B" x="4.7" y="0" dx="2.4" dy="2.4" layer="1"/>
+<text x="2.589" y="-1.44" size="1.016" layer="21" rot="R90">&gt;NAME</text>
+</package>
+<package name="HIROSE-MQ172-4POS">
+<wire x1="3.6" y1="0" x2="-3.6" y2="0" width="0.127" layer="21"/>
+<wire x1="-3.6" y1="1.7" x2="-3.6" y2="0" width="0.127" layer="21"/>
+<wire x1="3.6" y1="1.7" x2="3.6" y2="0" width="0.127" layer="21"/>
+<wire x1="-3.6" y1="1.7" x2="-3.2" y2="1.7" width="0.127" layer="21"/>
+<wire x1="3.6" y1="1.7" x2="3.2" y2="1.7" width="0.127" layer="21"/>
+<smd name="P$1" x="-3.85" y="4.45" dx="2.3" dy="3.8" layer="1"/>
+<smd name="P$2" x="3.85" y="4.45" dx="2.3" dy="3.8" layer="1"/>
+<smd name="3" x="0.4" y="6.75" dx="0.55" dy="2.5" layer="1"/>
+<smd name="2" x="-0.4" y="6.75" dx="0.55" dy="2.5" layer="1"/>
+<smd name="1" x="-1.2" y="6.75" dx="0.55" dy="2.5" layer="1"/>
+<smd name="4" x="1.2" y="6.75" dx="0.55" dy="2.5" layer="1"/>
+<text x="-2.7918" y="0.2997" size="1.27" layer="21">&gt;NAME</text>
+<hole x="-1.5" y="3.6" drill="1"/>
+<hole x="1.5" y="3.6" drill="1"/>
+</package>
+<package name="RLC_1210">
+<wire x1="-2.4638" y1="1.6764" x2="2.4638" y2="1.6764" width="0.3048" layer="21"/>
+<wire x1="2.4638" y1="1.6764" x2="2.4638" y2="-1.651" width="0.3048" layer="21"/>
+<wire x1="2.4638" y1="-1.651" x2="-2.4638" y2="-1.651" width="0.3048" layer="21"/>
+<wire x1="-2.4638" y1="-1.651" x2="-2.4638" y2="1.6764" width="0.3048" layer="21"/>
+<smd name="1" x="-1.5" y="0" dx="1.5" dy="2.9" layer="1"/>
+<smd name="2" x="1.5" y="0" dx="1.5" dy="2.9" layer="1"/>
+<text x="-2.2096" y="-0.736" size="1.524" layer="51">&gt;NAME</text>
+</package>
+<package name="HEADER-MALE-10X2-0.100-SHROUDED">
+<wire x1="-4.572" y1="16.51" x2="4.572" y2="16.51" width="0.254" layer="21"/>
+<wire x1="-4.572" y1="-16.51" x2="4.572" y2="-16.51" width="0.254" layer="21"/>
+<wire x1="-4.572" y1="16.51" x2="-4.572" y2="-16.51" width="0.254" layer="21"/>
+<wire x1="4.572" y1="16.51" x2="4.572" y2="-16.51" width="0.254" layer="21"/>
+<pad name="1" x="-1.27" y="11.43" drill="1.143" shape="square"/>
+<pad name="2" x="1.27" y="11.43" drill="1.143"/>
+<pad name="3" x="-1.27" y="8.89" drill="1.143"/>
+<pad name="4" x="1.27" y="8.89" drill="1.143"/>
+<pad name="5" x="-1.27" y="6.35" drill="1.143"/>
+<pad name="6" x="1.27" y="6.35" drill="1.143"/>
+<pad name="7" x="-1.27" y="3.81" drill="1.143"/>
+<pad name="8" x="1.27" y="3.81" drill="1.143"/>
+<pad name="9" x="-1.27" y="1.27" drill="1.143"/>
+<pad name="10" x="1.27" y="1.27" drill="1.143"/>
+<pad name="11" x="-1.27" y="-1.27" drill="1.143"/>
+<pad name="12" x="1.27" y="-1.27" drill="1.143"/>
+<pad name="13" x="-1.27" y="-3.81" drill="1.143"/>
+<pad name="14" x="1.27" y="-3.81" drill="1.143"/>
+<pad name="15" x="-1.27" y="-6.35" drill="1.143"/>
+<pad name="16" x="1.27" y="-6.35" drill="1.143"/>
+<pad name="17" x="-1.27" y="-8.89" drill="1.143"/>
+<pad name="18" x="1.27" y="-8.89" drill="1.143"/>
+<pad name="19" x="-1.27" y="-11.43" drill="1.143"/>
+<pad name="20" x="1.27" y="-11.43" drill="1.143"/>
+<text x="-3.175" y="14.605" size="1.27" layer="21" ratio="17">&gt;NAME</text>
+</package>
+<package name="TSSOP-24">
+<wire x1="-3.3" y1="-2.2" x2="-3.05" y2="-2.2" width="0.254" layer="21"/>
+<wire x1="-3.05" y1="-2.2" x2="-2.8" y2="-2.2" width="0.254" layer="21"/>
+<wire x1="-2.8" y1="-2.2" x2="4.6" y2="-2.2" width="0.254" layer="21"/>
+<wire x1="-3.3" y1="2.2" x2="-3.05" y2="2.2" width="0.254" layer="21"/>
+<wire x1="-3.05" y1="2.2" x2="-2.8" y2="2.2" width="0.254" layer="21"/>
+<wire x1="-2.8" y1="2.2" x2="-2.55" y2="2.2" width="0.254" layer="21"/>
+<wire x1="-2.55" y1="2.2" x2="4.6" y2="2.2" width="0.254" layer="21"/>
+<wire x1="-3.3" y1="2.2" x2="-3.3" y2="-2.2" width="0.254" layer="21"/>
+<wire x1="4.6" y1="2.2" x2="4.6" y2="-2.2" width="0.254" layer="21"/>
+<wire x1="-2.8" y1="2.2" x2="-2.8" y2="-2.2" width="0.254" layer="21"/>
+<wire x1="-3.05" y1="2.2" x2="-3.05" y2="-2.2" width="0.254" layer="21"/>
+<wire x1="-2.55" y1="2.2" x2="-2.55" y2="-2.2" width="0.254" layer="21"/>
+<smd name="1" x="-2.925" y="-3.2" dx="0.3" dy="1.5" layer="1"/>
+<smd name="2" x="-2.275" y="-3.2" dx="0.3" dy="1.5" layer="1"/>
+<smd name="3" x="-1.625" y="-3.2" dx="0.3" dy="1.5" layer="1"/>
+<smd name="4" x="-0.975" y="-3.2" dx="0.3" dy="1.5" layer="1"/>
+<smd name="5" x="-0.325" y="-3.2" dx="0.3" dy="1.5" layer="1"/>
+<smd name="6" x="0.325" y="-3.2" dx="0.3" dy="1.5" layer="1"/>
+<smd name="7" x="0.975" y="-3.2" dx="0.3" dy="1.5" layer="1"/>
+<smd name="8" x="1.625" y="-3.2" dx="0.3" dy="1.5" layer="1"/>
+<smd name="9" x="2.275" y="-3.2" dx="0.3" dy="1.5" layer="1"/>
+<smd name="10" x="2.925" y="-3.2" dx="0.3" dy="1.5" layer="1"/>
+<smd name="20" x="-0.325" y="3.2" dx="0.3" dy="1.5" layer="1"/>
+<smd name="19" x="0.325" y="3.2" dx="0.3" dy="1.5" layer="1"/>
+<smd name="18" x="0.975" y="3.2" dx="0.3" dy="1.5" layer="1"/>
+<smd name="17" x="1.625" y="3.2" dx="0.3" dy="1.5" layer="1"/>
+<smd name="16" x="2.275" y="3.2" dx="0.3" dy="1.5" layer="1"/>
+<smd name="15" x="2.925" y="3.2" dx="0.3" dy="1.5" layer="1"/>
+<smd name="14" x="3.575" y="3.2" dx="0.3" dy="1.5" layer="1"/>
+<smd name="13" x="4.225" y="3.2" dx="0.3" dy="1.5" layer="1"/>
+<smd name="11" x="3.575" y="-3.2" dx="0.3" dy="1.5" layer="1"/>
+<smd name="12" x="4.225" y="-3.2" dx="0.3" dy="1.5" layer="1"/>
+<smd name="21" x="-0.975" y="3.2" dx="0.3" dy="1.5" layer="1"/>
+<smd name="22" x="-1.625" y="3.2" dx="0.3" dy="1.5" layer="1"/>
+<smd name="23" x="-2.275" y="3.2" dx="0.3" dy="1.5" layer="1"/>
+<smd name="24" x="-2.925" y="3.2" dx="0.3" dy="1.5" layer="1"/>
+<text x="-2" y="0.5" size="1.27" layer="21" ratio="15">&gt;NAME</text>
+</package>
+<package name="RLC_0805">
+<wire x1="-1.651" y1="0.9144" x2="1.651" y2="0.9144" width="0.254" layer="21"/>
+<wire x1="1.651" y1="0.9144" x2="1.651" y2="-0.9144" width="0.254" layer="21"/>
+<wire x1="1.651" y1="-0.9144" x2="-1.651" y2="-0.9144" width="0.254" layer="21"/>
+<wire x1="-1.651" y1="-0.9144" x2="-1.651" y2="0.9144" width="0.254" layer="21"/>
+<smd name="1" x="-0.85" y="0" dx="1.3" dy="1.5" layer="1"/>
+<smd name="2" x="0.85" y="0" dx="1.3" dy="1.5" layer="1"/>
+<text x="-1.4732" y="-0.635" size="1.27" layer="51">&gt;NAME</text>
+</package>
+<package name="RLC_0603">
+<wire x1="-1.4732" y1="0.6858" x2="1.4732" y2="0.6858" width="0.2032" layer="21"/>
+<wire x1="1.4732" y1="0.6858" x2="1.4732" y2="-0.6858" width="0.2032" layer="21"/>
+<wire x1="1.4732" y1="-0.6858" x2="-1.4732" y2="-0.6858" width="0.2032" layer="21"/>
+<wire x1="-1.4732" y1="-0.6858" x2="-1.4732" y2="0.6858" width="0.2032" layer="21"/>
+<smd name="1" x="-0.85" y="0" dx="1" dy="1.1" layer="1"/>
+<smd name="2" x="0.85" y="0" dx="1" dy="1.1" layer="1"/>
+<text x="-1.1938" y="-0.4064" size="0.762" layer="51">&gt;NAME</text>
+</package>
+<package name="MSOP8">
+<wire x1="2.4" y1="4.2" x2="-0.4" y2="4.2" width="0.127" layer="21"/>
+<wire x1="-0.4" y1="4.2" x2="-0.6" y2="4" width="0.127" layer="21"/>
+<wire x1="-0.6" y1="4" x2="-0.6" y2="0.8" width="0.127" layer="21"/>
+<wire x1="-0.6" y1="0.8" x2="-0.4" y2="0.6" width="0.127" layer="21"/>
+<wire x1="-0.4" y1="0.6" x2="2.4" y2="0.6" width="0.127" layer="21"/>
+<wire x1="2.4" y1="0.6" x2="2.6" y2="0.8" width="0.127" layer="21"/>
+<wire x1="2.6" y1="0.8" x2="2.6" y2="4" width="0.127" layer="21"/>
+<wire x1="2.6" y1="4" x2="2.4" y2="4.2" width="0.127" layer="21"/>
+<circle x="0" y="1.2" radius="0.2" width="0.127" layer="21"/>
+<smd name="1" x="0" y="0" dx="0.41" dy="1.02" layer="1"/>
+<smd name="2" x="0.65" y="0" dx="0.41" dy="1.02" layer="1"/>
+<smd name="3" x="1.3" y="0" dx="0.41" dy="1.02" layer="1"/>
+<smd name="4" x="1.95" y="0" dx="0.41" dy="1.02" layer="1"/>
+<smd name="8" x="0" y="4.8" dx="0.41" dy="1.02" layer="1"/>
+<smd name="7" x="0.65" y="4.8" dx="0.41" dy="1.02" layer="1"/>
+<smd name="6" x="1.3" y="4.8" dx="0.41" dy="1.02" layer="1"/>
+<smd name="5" x="1.95" y="4.8" dx="0.41" dy="1.02" layer="1"/>
+<text x="2.8" y="4.6" size="1.27" layer="25" rot="R270">&gt;NAME</text>
+</package>
+<package name="TACTSWITCH-SMD-EVQQ1">
+<wire x1="-4.25" y1="5" x2="-3.2" y2="5" width="0.3048" layer="21"/>
+<wire x1="3.2" y1="5" x2="4.25" y2="5" width="0.3048" layer="21"/>
+<wire x1="-4.25" y1="-5" x2="-3.2" y2="-5" width="0.3048" layer="21"/>
+<wire x1="3.2" y1="-5" x2="4.25" y2="-5" width="0.3048" layer="21"/>
+<wire x1="-4.25" y1="5" x2="-4.25" y2="-5" width="0.3048" layer="21"/>
+<wire x1="4.25" y1="5" x2="4.25" y2="-5" width="0.3048" layer="21"/>
+<wire x1="-1.34" y1="5" x2="1.31" y2="5" width="0.3048" layer="21"/>
+<wire x1="-1.34" y1="-5" x2="1.31" y2="-5" width="0.3048" layer="21"/>
+<smd name="A" x="-2.25" y="4.5" dx="1.5" dy="3" layer="1"/>
+<smd name="P$2" x="2.25" y="4.5" dx="1.5" dy="3" layer="1"/>
+<smd name="P$3" x="-2.25" y="-4.5" dx="1.5" dy="3" layer="1"/>
+<smd name="B" x="2.25" y="-4.5" dx="1.5" dy="3" layer="1"/>
+<text x="-3.81" y="1.27" size="1.27" layer="21" ratio="13">&gt;NAME</text>
+</package>
+<package name="CAPCAITOR-ELECTROLYTIC-ALCHIP-MZA-F80">
+<wire x1="-3.6" y1="3.3" x2="2.4" y2="3.3" width="0.3048" layer="21"/>
+<wire x1="-3.6" y1="-3.3" x2="2.4" y2="-3.3" width="0.3048" layer="21"/>
+<wire x1="-3.6" y1="3.3" x2="-3.6" y2="1" width="0.3048" layer="21"/>
+<wire x1="-3.6" y1="-1" x2="-3.6" y2="-3.3" width="0.3048" layer="21"/>
+<wire x1="3.6" y1="2.5" x2="3.6" y2="1" width="0.3048" layer="21"/>
+<wire x1="3.6" y1="-1" x2="3.6" y2="-2.5" width="0.3048" layer="21"/>
+<wire x1="2.5" y1="-3.3" x2="3.6" y2="-2.5" width="0.3048" layer="21"/>
+<wire x1="2.4" y1="3.3" x2="3.6" y2="2.5" width="0.3048" layer="21"/>
+<smd name="+" x="2.75" y="0" dx="3.5" dy="1.5" layer="1"/>
+<smd name="-" x="-2.75" y="0" dx="3.5" dy="1.5" layer="1"/>
+<text x="1.84" y="1.905" size="1.27" layer="21" ratio="16">+</text>
+<text x="-3" y="-2.5" size="1.27" layer="21" ratio="16">&gt;NAME</text>
+</package>
+<package name="LED_0603">
+<wire x1="-1.4732" y1="0.6858" x2="1.4732" y2="0.6858" width="0.2032" layer="21"/>
+<wire x1="1.4732" y1="0.6858" x2="1.4732" y2="-0.6858" width="0.2032" layer="21"/>
+<wire x1="1.4732" y1="-0.6858" x2="-1.4732" y2="-0.6858" width="0.2032" layer="21"/>
+<wire x1="-1.4732" y1="-0.6858" x2="-1.4732" y2="0.6858" width="0.2032" layer="21"/>
+<smd name="+" x="-0.85" y="0" dx="1" dy="1.1" layer="1"/>
+<smd name="-" x="0.85" y="0" dx="1" dy="1.1" layer="1"/>
+<text x="-1.1938" y="-0.4064" size="0.762" layer="51">&gt;NAME</text>
+<text x="-1.2779" y="0.7482" size="1.016" layer="21" ratio="18">+</text>
+</package>
+<package name="KEYSTONE-SMD-TESTPOINT-5015">
+<wire x1="-1.9685" y1="1.143" x2="-0.508" y2="1.143" width="0.254" layer="21"/>
+<wire x1="-1.9685" y1="-1.143" x2="-0.508" y2="-1.143" width="0.254" layer="21"/>
+<wire x1="-1.9685" y1="1.143" x2="-1.9685" y2="-1.143" width="0.254" layer="21"/>
+<wire x1="1.9685" y1="1.143" x2="0.508" y2="1.143" width="0.254" layer="21"/>
+<wire x1="1.9685" y1="-1.143" x2="0.508" y2="-1.143" width="0.254" layer="21"/>
+<wire x1="1.9685" y1="1.143" x2="1.9685" y2="-1.143" width="0.254" layer="21"/>
+<smd name="1" x="0" y="0" dx="3.429" dy="1.778" layer="1"/>
+<text x="-1.8263" y="-0.5699" size="1.27" layer="51">&gt;NAME</text>
+</package>
+<package name="KEYSTONE-PTH-TESTPOINT-5011">
+<wire x1="-1.524" y1="0" x2="-1.397" y2="0" width="0.254" layer="21"/>
+<wire x1="1.524" y1="0" x2="1.397" y2="0" width="0.254" layer="21"/>
+<circle x="0" y="0" radius="1.5875" width="0.254" layer="21"/>
+<pad name="A" x="0" y="0" drill="1.6002"/>
+<text x="-1.27" y="-0.508" size="0.889" layer="51">&gt;NAME</text>
+</package>
+<package name="SOT-23-8-OR-MSOP-8">
+<wire x1="-1.5508" y1="1.5" x2="-1.5508" y2="-1.5" width="0.254" layer="21"/>
+<wire x1="-1.2968" y1="1.5" x2="-1.2968" y2="-1.5" width="0.254" layer="21"/>
+<wire x1="-1.3208" y1="-1.524" x2="-1.5748" y2="-1.524" width="0.254" layer="21"/>
+<wire x1="-1.3208" y1="1.524" x2="-1.5748" y2="1.524" width="0.254" layer="21"/>
+<wire x1="-1.5748" y1="1.524" x2="-1.5748" y2="-1.524" width="0.254" layer="21"/>
+<wire x1="1.5" y1="1.5" x2="1.5" y2="-1.5" width="0.254" layer="21"/>
+<wire x1="-1.27" y1="0.508" x2="-1.016" y2="0.508" width="0.254" layer="21"/>
+<wire x1="-1.016" y1="0.508" x2="-1.016" y2="-0.508" width="0.254" layer="21"/>
+<wire x1="-1.016" y1="-0.508" x2="-1.27" y2="-0.508" width="0.254" layer="21"/>
+<wire x1="-1.27" y1="-0.508" x2="-1.27" y2="0.254" width="0.254" layer="21"/>
+<wire x1="-1.27" y1="0.254" x2="-1.016" y2="0.254" width="0.254" layer="21"/>
+<wire x1="-1.016" y1="0.254" x2="-1.016" y2="0.508" width="0.254" layer="21"/>
+<wire x1="-1.016" y1="0.508" x2="-0.762" y2="0.508" width="0.254" layer="21"/>
+<wire x1="-0.762" y1="0.508" x2="-0.762" y2="-0.508" width="0.254" layer="21"/>
+<wire x1="-0.762" y1="-0.508" x2="-1.016" y2="-0.508" width="0.254" layer="21"/>
+<smd name="2" x="-0.325" y="-1.65" dx="0.325" dy="1.8" layer="1"/>
+<smd name="1" x="-0.975" y="-1.65" dx="0.325" dy="1.8" layer="1"/>
+<smd name="3" x="0.325" y="-1.65" dx="0.325" dy="1.8" layer="1"/>
+<smd name="4" x="0.975" y="-1.65" dx="0.325" dy="1.8" layer="1"/>
+<smd name="7" x="-0.325" y="1.65" dx="0.325" dy="1.8" layer="1"/>
+<smd name="8" x="-0.975" y="1.65" dx="0.325" dy="1.8" layer="1"/>
+<smd name="6" x="0.325" y="1.65" dx="0.325" dy="1.8" layer="1"/>
+<smd name="5" x="0.975" y="1.65" dx="0.325" dy="1.8" layer="1"/>
+<text x="-1.905" y="-1.27" size="1.016" layer="21" ratio="17" rot="R90">&gt;NAME</text>
+</package>
+<package name="SOIC-8">
+<wire x1="4.445" y1="3.81" x2="0.381" y2="3.81" width="0.254" layer="21"/>
+<wire x1="0.381" y1="3.81" x2="0.127" y2="3.81" width="0.254" layer="21"/>
+<wire x1="0.127" y1="3.81" x2="-0.127" y2="3.81" width="0.254" layer="21"/>
+<wire x1="-0.127" y1="3.81" x2="-0.381" y2="3.81" width="0.254" layer="21"/>
+<wire x1="-0.381" y1="3.81" x2="-0.635" y2="3.81" width="0.254" layer="21"/>
+<wire x1="-0.635" y1="3.81" x2="-0.635" y2="1.27" width="0.254" layer="21"/>
+<wire x1="-0.635" y1="1.27" x2="-0.381" y2="1.27" width="0.254" layer="21"/>
+<wire x1="-0.381" y1="1.27" x2="-0.127" y2="1.27" width="0.254" layer="21"/>
+<wire x1="-0.127" y1="1.27" x2="0.127" y2="1.27" width="0.254" layer="21"/>
+<wire x1="0.127" y1="1.27" x2="4.445" y2="1.27" width="0.254" layer="21"/>
+<wire x1="4.445" y1="1.27" x2="4.445" y2="3.81" width="0.254" layer="21"/>
+<wire x1="-0.381" y1="3.81" x2="-0.381" y2="1.27" width="0.254" layer="21"/>
+<smd name="1" x="0" y="0" dx="2.032" dy="0.6604" layer="1" rot="R90"/>
+<smd name="2" x="1.27" y="0" dx="2.032" dy="0.6604" layer="1" rot="R90"/>
+<smd name="3" x="2.54" y="0" dx="2.032" dy="0.6604" layer="1" rot="R90"/>
+<smd name="4" x="3.81" y="0" dx="2.032" dy="0.6604" layer="1" rot="R90"/>
+<smd name="5" x="3.81" y="5.08" dx="2.032" dy="0.6604" layer="1" rot="R90"/>
+<smd name="6" x="2.54" y="5.08" dx="2.032" dy="0.6604" layer="1" rot="R90"/>
+<smd name="7" x="1.27" y="5.08" dx="2.032" dy="0.6604" layer="1" rot="R90"/>
+<smd name="8" x="0" y="5.08" dx="2.032" dy="0.6604" layer="1" rot="R90"/>
+<text x="0.6825" y="1.8742" size="1.27" layer="25" ratio="15">&gt;NAME</text>
+</package>
+<package name="TSSOP-14">
+<wire x1="0.8" y1="0.3" x2="5.3" y2="0.3" width="0.127" layer="21"/>
+<wire x1="5.3" y1="0.3" x2="5.3" y2="0" width="0.127" layer="21"/>
+<wire x1="5.3" y1="0" x2="5.3" y2="-0.3" width="0.127" layer="21"/>
+<wire x1="5.3" y1="-0.3" x2="5.3" y2="-4.2" width="0.127" layer="21"/>
+<wire x1="5.3" y1="-4.2" x2="0.8" y2="-4.2" width="0.127" layer="21"/>
+<wire x1="0.8" y1="-4.2" x2="0.8" y2="-0.3" width="0.127" layer="21"/>
+<wire x1="0.8" y1="-0.3" x2="0.8" y2="0" width="0.127" layer="21"/>
+<wire x1="0.8" y1="0" x2="0.8" y2="0.3" width="0.127" layer="21"/>
+<wire x1="0.8" y1="0" x2="5.3" y2="0" width="0.127" layer="21"/>
+<wire x1="5.3" y1="-0.3" x2="0.8" y2="-0.3" width="0.127" layer="21"/>
+<wire x1="0.9" y1="-0.2" x2="5.2" y2="-0.2" width="0.127" layer="21"/>
+<wire x1="5.2" y1="-0.1" x2="0.9" y2="-0.1" width="0.127" layer="21"/>
+<wire x1="0.9" y1="0.1" x2="5.2" y2="0.1" width="0.127" layer="21"/>
+<wire x1="5.2" y1="0.2" x2="0.9" y2="0.2" width="0.127" layer="21"/>
+<smd name="1" x="0" y="0" dx="1.3" dy="0.36" layer="1"/>
+<smd name="2" x="0" y="-0.65" dx="1.3" dy="0.36" layer="1"/>
+<smd name="3" x="0" y="-1.3" dx="1.3" dy="0.36" layer="1"/>
+<smd name="4" x="0" y="-1.95" dx="1.3" dy="0.36" layer="1"/>
+<smd name="5" x="0" y="-2.6" dx="1.3" dy="0.36" layer="1"/>
+<smd name="6" x="0" y="-3.25" dx="1.3" dy="0.36" layer="1"/>
+<smd name="7" x="0" y="-3.9" dx="1.3" dy="0.36" layer="1"/>
+<smd name="14" x="6.095" y="0" dx="1.3" dy="0.36" layer="1"/>
+<smd name="13" x="6.095" y="-0.65" dx="1.3" dy="0.36" layer="1"/>
+<smd name="12" x="6.095" y="-1.3" dx="1.3" dy="0.36" layer="1"/>
+<smd name="11" x="6.095" y="-1.95" dx="1.3" dy="0.36" layer="1"/>
+<smd name="10" x="6.095" y="-2.6" dx="1.3" dy="0.36" layer="1"/>
+<smd name="9" x="6.095" y="-3.25" dx="1.3" dy="0.36" layer="1"/>
+<smd name="8" x="6.095" y="-3.9" dx="1.3" dy="0.36" layer="1"/>
+<text x="1" y="-2.1" size="1.27" layer="21" ratio="15">&gt;NAME</text>
+</package>
+<package name="TSSOP-20">
+<wire x1="0.9" y1="0.2" x2="5.2" y2="0.2" width="0.127" layer="21"/>
+<wire x1="5.2" y1="0.2" x2="5.2" y2="0" width="0.127" layer="21"/>
+<wire x1="5.2" y1="0" x2="5.2" y2="-0.2" width="0.127" layer="21"/>
+<wire x1="5.2" y1="-0.2" x2="5.2" y2="-0.4" width="0.127" layer="21"/>
+<wire x1="5.2" y1="-0.4" x2="5.2" y2="-0.6" width="0.127" layer="21"/>
+<wire x1="5.2" y1="-0.6" x2="5.2" y2="-6" width="0.127" layer="21"/>
+<wire x1="5.2" y1="-6" x2="0.9" y2="-6" width="0.127" layer="21"/>
+<wire x1="0.9" y1="-6" x2="0.9" y2="-0.6" width="0.127" layer="21"/>
+<wire x1="0.9" y1="-0.6" x2="0.9" y2="-0.4" width="0.127" layer="21"/>
+<wire x1="0.9" y1="-0.4" x2="0.9" y2="-0.2" width="0.127" layer="21"/>
+<wire x1="0.9" y1="-0.2" x2="0.9" y2="0" width="0.127" layer="21"/>
+<wire x1="0.9" y1="0" x2="0.9" y2="0.2" width="0.127" layer="21"/>
+<wire x1="0.9" y1="0" x2="5.2" y2="0" width="0.127" layer="21"/>
+<wire x1="5.2" y1="-0.2" x2="0.9" y2="-0.2" width="0.127" layer="21"/>
+<wire x1="0.9" y1="-0.4" x2="5.2" y2="-0.4" width="0.127" layer="21"/>
+<wire x1="0.9" y1="-0.6" x2="5.2" y2="-0.6" width="0.127" layer="21"/>
+<smd name="1" x="0" y="0" dx="1.4" dy="0.36" layer="1"/>
+<smd name="2" x="0" y="-0.65" dx="1.4" dy="0.36" layer="1"/>
+<smd name="3" x="0" y="-1.3" dx="1.4" dy="0.36" layer="1"/>
+<smd name="4" x="0" y="-1.95" dx="1.4" dy="0.36" layer="1"/>
+<smd name="5" x="0" y="-2.6" dx="1.4" dy="0.36" layer="1"/>
+<smd name="6" x="0" y="-3.25" dx="1.4" dy="0.36" layer="1"/>
+<smd name="7" x="0" y="-3.9" dx="1.4" dy="0.36" layer="1"/>
+<smd name="8" x="0" y="-4.55" dx="1.4" dy="0.36" layer="1"/>
+<smd name="9" x="0" y="-5.2" dx="1.4" dy="0.36" layer="1"/>
+<smd name="10" x="0" y="-5.85" dx="1.4" dy="0.36" layer="1"/>
+<smd name="20" x="6.095" y="0" dx="1.4" dy="0.36" layer="1"/>
+<smd name="19" x="6.095" y="-0.65" dx="1.4" dy="0.36" layer="1"/>
+<smd name="18" x="6.095" y="-1.3" dx="1.4" dy="0.36" layer="1"/>
+<smd name="17" x="6.095" y="-1.95" dx="1.4" dy="0.36" layer="1"/>
+<smd name="16" x="6.095" y="-2.6" dx="1.4" dy="0.36" layer="1"/>
+<smd name="15" x="6.095" y="-3.25" dx="1.4" dy="0.36" layer="1"/>
+<smd name="14" x="6.095" y="-3.9" dx="1.4" dy="0.36" layer="1"/>
+<smd name="13" x="6.095" y="-4.55" dx="1.4" dy="0.36" layer="1"/>
+<smd name="12" x="6.095" y="-5.2" dx="1.4" dy="0.36" layer="1"/>
+<smd name="11" x="6.095" y="-5.85" dx="1.4" dy="0.36" layer="1"/>
+<text x="2" y="-0.8" size="1.27" layer="21" ratio="15" rot="R270">&gt;NAME</text>
+</package>
+<package name="SMV-5">
+<wire x1="0.2" y1="0.5" x2="1.8" y2="0.5" width="0.127" layer="21"/>
+<wire x1="0.2" y1="-2.5" x2="1.8" y2="-2.5" width="0.127" layer="21"/>
+<wire x1="0.2" y1="-2.5" x2="0.2" y2="-2.3" width="0.127" layer="21"/>
+<wire x1="1.8" y1="-2.5" x2="1.8" y2="-2.3" width="0.127" layer="21"/>
+<wire x1="0.2" y1="0.5" x2="0.2" y2="0.4" width="0.127" layer="21"/>
+<wire x1="1.8" y1="0.5" x2="1.8" y2="0.4" width="0.127" layer="21"/>
+<wire x1="1.8" y1="-0.6" x2="1.8" y2="-0.4" width="0.127" layer="21"/>
+<wire x1="1.8" y1="-0.6" x2="1.8" y2="-1.4" width="0.127" layer="21"/>
+<smd name="1" x="0" y="0" dx="1.5" dy="0.5" layer="1"/>
+<smd name="2" x="0" y="-0.95" dx="1.5" dy="0.5" layer="1"/>
+<smd name="3" x="0" y="-1.9" dx="1.5" dy="0.5" layer="1"/>
+<smd name="5" x="2.2" y="0" dx="1.5" dy="0.5" layer="1"/>
+<smd name="4" x="2.2" y="-1.9" dx="1.5" dy="0.5" layer="1"/>
+<text x="0" y="0.8" size="1.016" layer="21" ratio="18">&gt;NAME</text>
+</package>
+<package name="USB-MINIB-SMD">
+<wire x1="-3.05" y1="-4.25" x2="-3.05" y2="1.85" width="0.3" layer="21"/>
+<wire x1="-6.05" y1="-7.85" x2="-6.05" y2="-4.25" width="0.127" layer="21"/>
+<wire x1="-6.05" y1="-4.25" x2="-6.05" y2="5.45" width="0.127" layer="21"/>
+<wire x1="-6.05" y1="-4.25" x2="-6.05" y2="1.85" width="0.3" layer="21"/>
+<smd name="1" x="2" y="0.4" dx="2.3" dy="0.5" layer="1"/>
+<smd name="2" x="2" y="-0.4" dx="2.3" dy="0.5" layer="1"/>
+<smd name="3" x="2" y="-1.2" dx="2.3" dy="0.5" layer="1"/>
+<smd name="4" x="2" y="-2" dx="2.3" dy="0.5" layer="1"/>
+<smd name="5" x="2" y="-2.8" dx="2.3" dy="0.5" layer="1"/>
+<smd name="TAB1" x="2.2" y="3.9" dx="3.5" dy="3.5" layer="1"/>
+<smd name="TAB0" x="-2.3" y="3.9" dx="3.5" dy="3.5" layer="1"/>
+<smd name="TAB2" x="2.2" y="-6.3" dx="3.5" dy="3.5" layer="1"/>
+<smd name="TAB3" x="-2.3" y="-6.3" dx="3.5" dy="3.5" layer="1"/>
+<text x="-3.9" y="-3.9" size="1.27" layer="21" ratio="18" rot="R90">&gt;NAME</text>
+<hole x="-0.05" y="0.55" drill="0.9"/>
+<hole x="-0.05" y="-2.95" drill="0.9"/>
+</package>
+</packages>
+</library>
+<library name="proxmark3">
+<description>Generated from &lt;b&gt;proxmark3.sch&lt;/b&gt;&lt;p&gt;
+by exp-lbrs.ulp</description>
+<packages>
+<package name="--MERGED_TQ-SMD-RELAY">
+<wire x1="-7" y1="-6.6" x2="7" y2="-6.6" width="0.254" layer="21"/>
+<wire x1="-7" y1="6.6" x2="7" y2="6.6" width="0.254" layer="21"/>
+<wire x1="-7" y1="6.6" x2="-7" y2="-6.6" width="0.254" layer="21"/>
+<wire x1="7" y1="6.6" x2="7" y2="-6.6" width="0.254" layer="21"/>
+<wire x1="-4" y1="2" x2="-6" y2="2" width="0.254" layer="21"/>
+<wire x1="-6" y1="2" x2="-6" y2="-2" width="0.254" layer="21"/>
+<wire x1="-6" y1="-2" x2="-4" y2="-2" width="0.254" layer="21"/>
+<wire x1="-4" y1="-2" x2="-4" y2="2" width="0.254" layer="21"/>
+<smd name="1" x="-5.08" y="-4.78" dx="1" dy="3" layer="1" rot="R180"/>
+<smd name="2" x="-2.54" y="-4.78" dx="1" dy="3" layer="1" rot="R180"/>
+<smd name="3" x="0" y="-4.78" dx="1" dy="3" layer="1" rot="R180"/>
+<smd name="4" x="2.54" y="-4.78" dx="1" dy="3" layer="1" rot="R180"/>
+<smd name="5" x="5.08" y="-4.78" dx="1" dy="3" layer="1" rot="R180"/>
+<smd name="6" x="5.08" y="4.78" dx="1" dy="3" layer="1" rot="R180"/>
+<smd name="7" x="2.54" y="4.78" dx="1" dy="3" layer="1" rot="R180"/>
+<smd name="8" x="0" y="4.78" dx="1" dy="3" layer="1" rot="R180"/>
+<smd name="9" x="-2.54" y="4.78" dx="1" dy="3" layer="1" rot="R180"/>
+<smd name="10" x="-5.08" y="4.78" dx="1" dy="3" layer="1" rot="R180"/>
+<text x="6.35" y="-2.54" size="1.27" layer="21" ratio="17" rot="R90">&gt;NAME</text>
+</package>
+<package name="--MERGED_SOT23-3LEAD">
+<wire x1="-1" y1="1" x2="-1" y2="-0.1" width="0.127" layer="21"/>
+<wire x1="-0.3" y1="-0.7" x2="0.3" y2="-0.7" width="0.127" layer="21"/>
+<wire x1="1" y1="-0.1" x2="1" y2="1" width="0.127" layer="21"/>
+<wire x1="1" y1="1" x2="0.6" y2="1" width="0.127" layer="21"/>
+<wire x1="-1" y1="1" x2="-0.6" y2="1" width="0.127" layer="21"/>
+<smd name="1" x="-0.9398" y="-0.762" dx="1.016" dy="1.016" layer="1"/>
+<smd name="2" x="0.9652" y="-0.762" dx="1.016" dy="1.016" layer="1"/>
+<smd name="3" x="0.0127" y="1.143" dx="1.016" dy="1.778" layer="1"/>
+<text x="2.4326" y="-0.1281" size="1.016" layer="25" font="vector" ratio="18" rot="R90">&gt;NAME</text>
+</package>
+<package name="--MERGED_SOT-23-5">
+<wire x1="-1.3398" y1="-0.4224" x2="1.2602" y2="-0.4224" width="0.127" layer="21"/>
+<wire x1="1.2602" y1="-0.4224" x2="1.2602" y2="0.4776" width="0.127" layer="21"/>
+<wire x1="1.2602" y1="0.4776" x2="-1.3398" y2="0.4776" width="0.127" layer="21"/>
+<wire x1="-1.3398" y1="0.4776" x2="-1.3398" y2="-0.4224" width="0.127" layer="21"/>
+<smd name="1" x="-0.9398" y="-1.4224" dx="0.4" dy="1.5" layer="1"/>
+<smd name="2" x="0.0102" y="-1.4224" dx="0.4" dy="1.5" layer="1"/>
+<smd name="3" x="0.9602" y="-1.4224" dx="0.4" dy="1.5" layer="1"/>
+<smd name="4" x="0.9602" y="1.4276" dx="0.4" dy="1.5" layer="1"/>
+<smd name="5" x="-0.9398" y="1.4276" dx="0.4" dy="1.5" layer="1"/>
+<text x="1.4602" y="2.1776" size="1.27" layer="21" font="vector" rot="R270">&gt;NAME</text>
+</package>
+<package name="--MERGED_HEADER-MALE-6X1-0.100-UNKEYED">
+<wire x1="-1.17" y1="7.62" x2="1.17" y2="7.62" width="0.254" layer="21"/>
+<wire x1="1.17" y1="7.62" x2="1.17" y2="-7.62" width="0.254" layer="21"/>
+<wire x1="1.17" y1="-7.62" x2="-1.17" y2="-7.62" width="0.254" layer="21"/>
+<wire x1="-1.17" y1="-7.62" x2="-1.17" y2="7.62" width="0.254" layer="21"/>
+<pad name="1" x="0" y="6.35" drill="1.143" shape="square"/>
+<pad name="2" x="0" y="3.81" drill="1.143"/>
+<pad name="3" x="0" y="1.27" drill="1.143"/>
+<pad name="4" x="0" y="-1.27" drill="1.143"/>
+<pad name="5" x="0" y="-3.81" drill="1.143"/>
+<pad name="6" x="0" y="-6.35" drill="1.143"/>
+<text x="1.905" y="6.985" size="1.27" layer="21" ratio="22" rot="R270">&gt;NAME</text>
+</package>
+<package name="--MERGED_RLC_0603">
+<wire x1="-1.4732" y1="0.6858" x2="1.4732" y2="0.6858" width="0.15" layer="21"/>
+<wire x1="1.4732" y1="0.6858" x2="1.4732" y2="-0.6858" width="0.15" layer="21"/>
+<wire x1="1.4732" y1="-0.6858" x2="-1.4732" y2="-0.6858" width="0.15" layer="21"/>
+<wire x1="-1.4732" y1="-0.6858" x2="-1.4732" y2="0.6858" width="0.15" layer="21"/>
+<smd name="1" x="-0.85" y="0" dx="1" dy="1.1" layer="1"/>
+<smd name="2" x="0.85" y="0" dx="1" dy="1.1" layer="1"/>
+<text x="-1.1938" y="-0.4064" size="0.762" layer="51">&gt;NAME</text>
+</package>
+</packages>
+</library>
+</libraries>
+<attributes>
+</attributes>
+<variantdefs>
+</variantdefs>
+<classes>
+<class number="0" name="default" width="0" drill="0">
+</class>
+</classes>
+<designrules name="default *">
+<description language="en">&lt;b&gt;EAGLE Design Rules&lt;/b&gt;
+&lt;p&gt;
+The default Design Rules have been set to cover
+a wide range of applications. Your particular design
+may have different requirements, so please make the
+necessary adjustments and save your customized
+design rules under a new name.</description>
+<param name="layerSetup" value="(1*2*15*16)"/>
+<param name="mtCopper" value="1mil 1mil 0.035mm 0.035mm 0.035mm 0.035mm 0.035mm 0.035mm 0.035mm 0.035mm 0.035mm 0.035mm 0.035mm 0.035mm 1mil 1mil"/>
+<param name="mtIsolate" value="20mil 20mil 0.2mm 0.15mm 0.2mm 0.15mm 0.2mm 0.15mm 0.2mm 0.15mm 0.2mm 0.15mm 0.2mm 0.15mm 20mil"/>
+<param name="mdWireWire" value="8mil"/>
+<param name="mdWirePad" value="8mil"/>
+<param name="mdWireVia" value="8mil"/>
+<param name="mdPadPad" value="8mil"/>
+<param name="mdPadVia" value="8mil"/>
+<param name="mdViaVia" value="8mil"/>
+<param name="mdSmdPad" value="0mil"/>
+<param name="mdSmdVia" value="0mil"/>
+<param name="mdSmdSmd" value="0mil"/>
+<param name="mdViaViaSameLayer" value="8mil"/>
+<param name="mnLayersViaInSmd" value="2"/>
+<param name="mdCopperDimension" value="10mil"/>
+<param name="mdDrill" value="8mil"/>
+<param name="mdSmdStop" value="0mil"/>
+<param name="msWidth" value="8mil"/>
+<param name="msDrill" value="0.4mm"/>
+<param name="msMicroVia" value="9.99mm"/>
+<param name="msBlindViaRatio" value="0.5"/>
+<param name="rvPadTop" value="0.25"/>
+<param name="rvPadInner" value="0.25"/>
+<param name="rvPadBottom" value="0.25"/>
+<param name="rvViaOuter" value="0.25"/>
+<param name="rvViaInner" value="0.25"/>
+<param name="rvMicroViaOuter" value="0.25"/>
+<param name="rvMicroViaInner" value="0.25"/>
+<param name="rlMinPadTop" value="10mil"/>
+<param name="rlMaxPadTop" value="20mil"/>
+<param name="rlMinPadInner" value="10mil"/>
+<param name="rlMaxPadInner" value="20mil"/>
+<param name="rlMinPadBottom" value="10mil"/>
+<param name="rlMaxPadBottom" value="20mil"/>
+<param name="rlMinViaOuter" value="8mil"/>
+<param name="rlMaxViaOuter" value="20mil"/>
+<param name="rlMinViaInner" value="8mil"/>
+<param name="rlMaxViaInner" value="20mil"/>
+<param name="rlMinMicroViaOuter" value="4mil"/>
+<param name="rlMaxMicroViaOuter" value="20mil"/>
+<param name="rlMinMicroViaInner" value="4mil"/>
+<param name="rlMaxMicroViaInner" value="20mil"/>
+<param name="psTop" value="-1"/>
+<param name="psBottom" value="-1"/>
+<param name="psFirst" value="-1"/>
+<param name="psElongationLong" value="100"/>
+<param name="psElongationOffset" value="100"/>
+<param name="mvStopFrame" value="1"/>
+<param name="mvCreamFrame" value="0.8"/>
+<param name="mlMinStopFrame" value="2mil"/>
+<param name="mlMaxStopFrame" value="0mil"/>
+<param name="mlMinCreamFrame" value="0mil"/>
+<param name="mlMaxCreamFrame" value="2mil"/>
+<param name="mlViaStopLimit" value="16mil"/>
+<param name="srRoundness" value="0"/>
+<param name="srMinRoundness" value="0mil"/>
+<param name="srMaxRoundness" value="0mil"/>
+<param name="slThermalIsolate" value="10mil"/>
+<param name="slThermalsForVias" value="0"/>
+<param name="dpMaxLengthDifference" value="10mm"/>
+<param name="dpGapFactor" value="2.5"/>
+<param name="checkGrid" value="0"/>
+<param name="checkAngle" value="1"/>
+<param name="checkFont" value="1"/>
+<param name="checkRestrict" value="1"/>
+<param name="useDiameter" value="13"/>
+<param name="maxErrors" value="50"/>
+</designrules>
+<autorouter>
+<pass name="Default">
+<param name="RoutingGrid" value="50mil"/>
+<param name="tpViaShape" value="round"/>
+<param name="PrefDir.1" value="|"/>
+<param name="PrefDir.2" value="0"/>
+<param name="PrefDir.3" value="0"/>
+<param name="PrefDir.4" value="0"/>
+<param name="PrefDir.5" value="0"/>
+<param name="PrefDir.6" value="0"/>
+<param name="PrefDir.7" value="0"/>
+<param name="PrefDir.8" value="0"/>
+<param name="PrefDir.9" value="0"/>
+<param name="PrefDir.10" value="0"/>
+<param name="PrefDir.11" value="0"/>
+<param name="PrefDir.12" value="0"/>
+<param name="PrefDir.13" value="0"/>
+<param name="PrefDir.14" value="0"/>
+<param name="PrefDir.15" value="0"/>
+<param name="PrefDir.16" value="-"/>
+<param name="cfVia" value="8"/>
+<param name="cfNonPref" value="5"/>
+<param name="cfChangeDir" value="2"/>
+<param name="cfOrthStep" value="2"/>
+<param name="cfDiagStep" value="3"/>
+<param name="cfExtdStep" value="0"/>
+<param name="cfBonusStep" value="1"/>
+<param name="cfMalusStep" value="1"/>
+<param name="cfPadImpact" value="4"/>
+<param name="cfSmdImpact" value="4"/>
+<param name="cfBusImpact" value="0"/>
+<param name="cfHugging" value="3"/>
+<param name="cfAvoid" value="4"/>
+<param name="cfPolygon" value="10"/>
+<param name="cfBase.1" value="0"/>
+<param name="cfBase.2" value="1"/>
+<param name="cfBase.3" value="1"/>
+<param name="cfBase.4" value="1"/>
+<param name="cfBase.5" value="1"/>
+<param name="cfBase.6" value="1"/>
+<param name="cfBase.7" value="1"/>
+<param name="cfBase.8" value="1"/>
+<param name="cfBase.9" value="1"/>
+<param name="cfBase.10" value="1"/>
+<param name="cfBase.11" value="1"/>
+<param name="cfBase.12" value="1"/>
+<param name="cfBase.13" value="1"/>
+<param name="cfBase.14" value="1"/>
+<param name="cfBase.15" value="1"/>
+<param name="cfBase.16" value="0"/>
+<param name="mnVias" value="20"/>
+<param name="mnSegments" value="9999"/>
+<param name="mnExtdSteps" value="9999"/>
+<param name="mnRipupLevel" value="10"/>
+<param name="mnRipupSteps" value="100"/>
+<param name="mnRipupTotal" value="100"/>
+</pass>
+<pass name="Follow-me" refer="Default" active="yes">
+</pass>
+<pass name="Busses" refer="Default" active="yes">
+<param name="cfNonPref" value="4"/>
+<param name="cfBusImpact" value="4"/>
+<param name="cfHugging" value="0"/>
+<param name="mnVias" value="0"/>
+</pass>
+<pass name="Route" refer="Default" active="yes">
+</pass>
+</autorouter>
+<elements>
+<element name="IC3" library="proxmark3" package="--MERGED_SOT-23-5" value="--MERGED_PQ1X331M2ZP-3V3-LDO-SOT-23-5" x="18.923" y="43.561" smashed="yes" rot="R270">
+<attribute name="NAME" x="19.4694" y="42.4248" size="1.016" layer="21" font="vector" ratio="20" rot="R90"/>
+</element>
+<element name="SV1" library="  merged" package="USB-MINIB-SMD" value="USB-MINIB" x="6.223" y="44.958" smashed="yes">
+<attribute name="NAME" x="2.069" y="40.804" size="1.27" layer="21" ratio="17" rot="R90"/>
+</element>
+<element name="C1" library="  merged" package="RLC_0603" value="33n" x="12.065" y="47.752" rot="R90"/>
+<element name="IC1" library="  merged" package="VQFP-100" value="SPARTAN-II-XC2S30-100-VQFP" x="45.72" y="11.811" smashed="yes" rot="R90">
+<attribute name="NAME" x="47.561" y="18.954" size="1.9304" layer="21" ratio="14" rot="R270"/>
+</element>
+<element name="XT1" library="  merged" package="XTAL-SMD-CITIZEN-CS10" value="XTAL-SMD-CITIZEN-CS10" x="75.946" y="6.985" smashed="yes" rot="R180">
+<attribute name="NAME" x="73.103" y="8.679" size="1.016" layer="21" rot="R270"/>
+</element>
+<element name="IC4" library="  merged" package="SMV-5" value="HCU-INVERTER" x="76.073" y="2.032" smashed="yes" rot="R180">
+<attribute name="NAME" x="77.343" y="0.673" size="1.016" layer="21" ratio="18"/>
+</element>
+<element name="IC2" library="  merged" package="LQFP-64" value="AT91SAM7S64" x="68.961" y="22.225" smashed="yes" rot="R180">
+<attribute name="NAME" x="67.448" y="19.0331" size="1.27" layer="21" rot="R270"/>
+</element>
+<element name="SV2" library="  merged" package="HIROSE-MQ172-4POS" value="HIROSE-MQ172-4POS" x="0.127" y="23.749" rot="R270"/>
+<element name="IC6" library="  merged" package="TSSOP-14" value="MCP6294" x="25.527" y="8.763" rot="R90"/>
+<element name="R1" library="  merged" package="RLC_0603" value="1meg" x="78.486" y="6.858" rot="R90"/>
+<element name="C2" library="  merged" package="RLC_0603" value="22p" x="78.486" y="3.429" rot="R90"/>
+<element name="C3" library="  merged" package="RLC_0603" value="22p" x="71.12" y="2.413"/>
+<element name="R2" library="  merged" package="RLC_0603" value="100" x="71.12" y="4.191" rot="R180"/>
+<element name="R3" library="  merged" package="RLC_0603" value="330" x="73.025" y="23.114" rot="R270"/>
+<element name="C4" library="  merged" package="RLC_0603" value="33n" x="73.025" y="26.416" rot="R270"/>
+<element name="C5" library="  merged" package="RLC_0603" value="2n" x="71.374" y="26.416" rot="R270"/>
+<element name="XT2" library="  merged" package="XTAL-SMD-CITIZEN-CS10" value="XTAL-SMD-CITIZEN-CS10" x="76.073" y="21.463" rot="R270"/>
+<element name="C6" library="proxmark3" package="--MERGED_RLC_0603" value="22p" x="79.375" y="17.526" rot="R270"/>
+<element name="C7" library="proxmark3" package="--MERGED_RLC_0603" value="22p" x="79.375" y="20.447" rot="R90"/>
+<element name="R4" library="  merged" package="RLC_0603" value="27" x="75.692" y="11.049" rot="R180"/>
+<element name="R5" library="  merged" package="RLC_0603" value="27" x="75.692" y="12.7" rot="R180"/>
+<element name="R6" library="  merged" package="RLC_0603" value="1k5" x="75.692" y="14.351"/>
+<element name="C8" library="  merged" package="RLC_0603" value="1n" x="65.532" y="26.797" rot="R90"/>
+<element name="C9" library="  merged" package="RLC_1210" value="2u2" x="62.865" y="27.94" rot="R90"/>
+<element name="SV3" library="  merged" package="HEADER-MALE-10X2-0.100-SHROUDED" value="" x="63.5" y="45.339" rot="R270"/>
+<element name="R7" library="  merged" package="RLC_0603" value="10k" x="64.008" y="39.37" rot="R180"/>
+<element name="R8" library="  merged" package="RLC_0603" value="10k" x="63.627" y="6.731"/>
+<element name="R9" library="  merged" package="RLC_0603" value="100k" x="29.337" y="5.334" rot="R270"/>
+<element name="R10" library="  merged" package="RLC_0603" value="100k" x="30.861" y="2.667" rot="R90"/>
+<element name="C10" library="  merged" package="RLC_0603" value="100n" x="27.686" y="4.445" rot="R270"/>
+<element name="D1" library="proxmark3" package="--MERGED_SOT23-3LEAD" value="--MERGED_DIODE-SMD-SOT23" x="21.336" y="10.922" smashed="yes" rot="R180">
+<attribute name="NAME" x="20.8514" y="12.3179" size="1.016" layer="25" font="vector" ratio="18" rot="R90"/>
+</element>
+<element name="R11" library="  merged" package="RLC_0603" value="510k" x="22.098" y="5.207"/>
+<element name="C11" library="  merged" package="RLC_0603" value="1n" x="22.098" y="6.858" rot="R180"/>
+<element name="C12" library="  merged" package="RLC_0603" value="1n" x="23.495" y="3.556" rot="R180"/>
+<element name="R12" library="  merged" package="RLC_0603" value="100k" x="23.495" y="1.905" rot="R180"/>
+<element name="R13" library="  merged" package="RLC_0603" value="10k" x="32.512" y="2.667" rot="R90"/>
+<element name="R14" library="  merged" package="RLC_0603" value="10k" x="34.163" y="2.667" rot="R270"/>
+<element name="C13" library="  merged" package="RLC_0603" value="dnp" x="35.814" y="2.667" rot="R270"/>
+<element name="D2" library="proxmark3" package="--MERGED_SOT23-3LEAD" value="--MERGED_DIODE-SMD-SOT23" x="13.462" y="17.145" smashed="yes" rot="R270">
+<attribute name="NAME" x="15.2411" y="16.0216" size="1.016" layer="25" font="vector" ratio="18" rot="R180"/>
+</element>
+<element name="C14" library="  merged" package="RLC_0603" value="22p" x="5.842" y="15.875" rot="R90"/>
+<element name="D3" library="proxmark3" package="--MERGED_SOT23-3LEAD" value="--MERGED_DIODE-SMD-SOT23" x="10.16" y="16.51" smashed="yes">
+<attribute name="NAME" x="8.9096" y="16.5089" size="1.016" layer="25" font="vector" ratio="18" rot="R90"/>
+</element>
+<element name="C15" library="  merged" package="RLC_0603" value="130p" x="16.637" y="17.272" rot="R270"/>
+<element name="R15" library="  merged" package="RLC_0603" value="10k" x="18.288" y="17.272" rot="R90"/>
+<element name="R16" library="  merged" package="RLC_0603" value="zerohm" x="19.939" y="17.272" rot="R270"/>
+<element name="C16" library="  merged" package="RLC_0603" value="1n" x="21.59" y="17.272" rot="R90"/>
+<element name="R17" library="  merged" package="RLC_0603" value="10k" x="24.892" y="17.272" rot="R90"/>
+<element name="R18" library="  merged" package="RLC_0603" value="10k" x="30.988" y="13.335" rot="R90"/>
+<element name="C17" library="  merged" package="RLC_0603" value="dnp" x="32.512" y="13.335" rot="R90"/>
+<element name="R19" library="  merged" package="RLC_0603" value="10k" x="30.988" y="10.033" rot="R90"/>
+<element name="R20" library="  merged" package="RLC_0603" value="240k" x="14.859" y="19.685"/>
+<element name="IC8" library="  merged" package="TSSOP-24" value="TLC5540" x="46.99" y="27.432"/>
+<element name="C18" library="  merged" package="RLC_0603" value="33n" x="45.593" y="32.639" rot="R180"/>
+<element name="C19" library="  merged" package="RLC_0603" value="33n" x="48.768" y="32.639" rot="R180"/>
+<element name="IC9" library="  merged" package="TSSOP-20" value="74XX244-OCTAL-TRISTATE-BUFFERS" x="12.192" y="34.544" smashed="yes" rot="R90">
+<attribute name="NAME" x="12.992" y="35.655" size="1.27" layer="21" ratio="17"/>
+</element>
+<element name="IC10" library="  merged" package="TSSOP-20" value="74XX244-OCTAL-TRISTATE-BUFFERS" x="19.05" y="34.544" smashed="yes" rot="R90">
+<attribute name="NAME" x="19.85" y="35.655" size="1.27" layer="21" ratio="17"/>
+</element>
+<element name="SV5" library="proxmark3" package="--MERGED_HEADER-MALE-6X1-0.100-UNKEYED" value="--MERGED_HEADER-MALE-6X1" x="36.703" y="47.879" rot="R270"/>
+<element name="U1" library="  merged" package="RLC_0805" value="FERRITE0805" x="12.827" y="44.577"/>
+<element name="R22" library="  merged" package="RLC_0603" value="33" x="5.461" y="33.782" rot="R270"/>
+<element name="C21" library="  merged" package="RLC_0603" value="33n" x="24.003" y="10.287" rot="R90"/>
+<element name="C22" library="  merged" package="RLC_0603" value="33n" x="22.479" y="27.432"/>
+<element name="C23" library="  merged" package="RLC_0603" value="33n" x="13.589" y="22.987" rot="R270"/>
+<element name="C24" library="  merged" package="RLC_0603" value="33n" x="28.702" y="22.987" rot="R270"/>
+<element name="C25" library="  merged" package="RLC_0603" value="33n" x="67.437" y="6.731"/>
+<element name="C26" library="  merged" package="RLC_0603" value="33n" x="67.31" y="26.797" rot="R90"/>
+<element name="C29" library="  merged" package="RLC_0603" value="33n" x="34.798" y="9.017" rot="R180"/>
+<element name="C30" library="  merged" package="RLC_0603" value="33n" x="45.339" y="1.651" rot="R180"/>
+<element name="C31" library="  merged" package="RLC_0603" value="33n" x="56.007" y="10.16" rot="R90"/>
+<element name="IC11" library="  merged" package="TSSOP-14" value="CD4066" x="30.099" y="18.034" smashed="yes" rot="R90">
+<attribute name="NAME" x="30.115" y="20.769" size="1.27" layer="21" ratio="15" rot="R180"/>
+</element>
+<element name="IC5" library="  merged" package="SOT-23-8-OR-MSOP-8" value="TLV3502" x="17.399" y="23.114"/>
+<element name="R21" library="  merged" package="RLC_0603" value="24k" x="18.288" y="19.685" rot="R180"/>
+<element name="IC12" library="  merged" package="SOIC-8" value="LP2989AIM-2.5" x="29.337" y="35.179" smashed="yes">
+<attribute name="NAME" x="28.321" y="38.1205" size="1.27" layer="25" ratio="17" rot="R90"/>
+</element>
+<element name="R23" library="  merged" package="RLC_0603" value="1k" x="39.751" y="33.909"/>
+<element name="C33" library="  merged" package="RLC_1210" value="4u7" x="43.942" y="39.243" rot="R270"/>
+<element name="IC13" library="proxmark3" package="--MERGED_SOT-23-5" value="--MERGED_PQ1X331M2ZP-3V3-LDO-SOT-23-5" x="37.846" y="28.448" smashed="yes" rot="R90">
+<attribute name="NAME" x="35.6684" y="29.9082" size="1.27" layer="21" font="vector" ratio="18"/>
+</element>
+<element name="C27" library="  merged" package="RLC_1210" value="4u7" x="23.114" y="45.339" rot="R270"/>
+<element name="C28" library="  merged" package="RLC_0603" value="33n" x="38.608" y="1.905"/>
+<element name="C32" library="  merged" package="RLC_0603" value="33n" x="55.118" y="19.939" rot="R90"/>
+<element name="C34" library="  merged" package="RLC_1210" value="4u7" x="37.973" y="25.019"/>
+<element name="D4" library="  merged" package="LED_0603" value="LED" x="56.261" y="29.337" rot="R90"/>
+<element name="D5" library="  merged" package="LED_0603" value="LED" x="58.674" y="29.337" rot="R90"/>
+<element name="D6" library="  merged" package="LED_0603" value="LED" x="53.848" y="29.337" rot="R90"/>
+<element name="R24" library="  merged" package="RLC_0603" value="330" x="56.261" y="26.162" rot="R90"/>
+<element name="R25" library="  merged" package="RLC_0603" value="330" x="58.674" y="26.162" rot="R90"/>
+<element name="R26" library="  merged" package="RLC_0603" value="330" x="53.848" y="26.162" rot="R90"/>
+<element name="R27" library="  merged" package="RLC_0603" value="33" x="7.112" y="33.782" rot="R270"/>
+<element name="R28" library="  merged" package="RLC_0603" value="33" x="3.81" y="33.782" rot="R270"/>
+<element name="R29" library="  merged" package="RLC_0603" value="33" x="8.763" y="33.782" rot="R270"/>
+<element name="C39" library="  merged" package="RLC_0603" value="1n" x="11.049" y="26.797"/>
+<element name="R30" library="  merged" package="RLC_0603" value="10meg" x="25.273" y="6.858"/>
+<element name="R31" library="  merged" package="RLC_0603" value="240k" x="25.273" y="5.207"/>
+<element name="IC14" library="  merged" package="MSOP8" value="AD8052" x="26.035" y="29.083" smashed="yes" rot="R90">
+<attribute name="NAME" x="20.165" y="31.883" size="1.016" layer="25" ratio="17"/>
+</element>
+<element name="R33" library="  merged" package="RLC_0603" value="2k4" x="28.067" y="27.813" rot="R270"/>
+<element name="C40" library="  merged" package="RLC_0603" value="dnp" x="29.718" y="27.813" rot="R270"/>
+<element name="R34" library="  merged" package="RLC_0603" value="10k" x="17.399" y="27.813" rot="R270"/>
+<element name="C41" library="  merged" package="RLC_0603" value="dnp" x="19.05" y="27.813" rot="R270"/>
+<element name="C42" library="  merged" package="RLC_0603" value="1n" x="31.877" y="33.147"/>
+<element name="C43" library="  merged" package="RLC_0603" value="1n" x="14.859" y="30.988" rot="R90"/>
+<element name="R32" library="  merged" package="RLC_0603" value="zerohm" x="16.51" y="30.988" rot="R270"/>
+<element name="R35" library="  merged" package="RLC_0603" value="zerohm" x="31.877" y="31.496" rot="R180"/>
+<element name="R36" library="  merged" package="RLC_0603" value="dnp" x="26.543" y="17.272" rot="R90"/>
+<element name="R37" library="  merged" package="RLC_0603" value="dnp" x="23.241" y="17.272" rot="R90"/>
+<element name="R38" library="  merged" package="RLC_0603" value="dnp" x="23.241" y="14.097" rot="R90"/>
+<element name="C20" library="  merged" package="RLC_0603" value="dnp" x="11.049" y="28.448"/>
+<element name="C35" library="  merged" package="RLC_0603" value="47p" x="11.049" y="25.019"/>
+<element name="C36" library="  merged" package="RLC_0603" value="dnp" x="11.049" y="23.368"/>
+<element name="RLY1" library="proxmark3" package="--MERGED_TQ-SMD-RELAY" value="--MERGED_RELAY-DPDT" x="7.493" y="7.112" rot="R180"/>
+<element name="Q1" library="proxmark3" package="--MERGED_SOT23-3LEAD" value="--MERGED_NPN-SOT23-2N3904" x="17.145" y="6.985" smashed="yes" rot="R180">
+<attribute name="NAME" x="16.7836" y="8.5079" size="0.889" layer="25" font="vector" ratio="18" rot="R90"/>
+</element>
+<element name="D7" library="proxmark3" package="--MERGED_SOT23-3LEAD" value="--MERGED_DIODE-SMD-SOT23" x="16.383" y="2.286" smashed="yes">
+<attribute name="NAME" x="17.0169" y="3.9174" size="0.889" layer="25" font="vector" ratio="18"/>
+</element>
+<element name="R40" library="  merged" package="RLC_0603" value="10k" x="17.653" y="10.287" rot="R270"/>
+<element name="R41" library="  merged" package="RLC_0603" value="10meg" x="21.717" y="21.209" rot="R90"/>
+<element name="R42" library="  merged" package="RLC_0603" value="1meg" x="23.368" y="21.209" rot="R90"/>
+<element name="R43" library="  merged" package="RLC_0603" value="1k" x="67.31" y="33.401" rot="R90"/>
+<element name="SW1" library="  merged" package="TACTSWITCH-SMD-EVQQ1" value="TACTSWITCH" x="74.422" y="34.29" smashed="yes" rot="R270">
+<attribute name="NAME" x="75.184" y="35.433" size="1.27" layer="21" ratio="13" rot="R270"/>
+</element>
+<element name="C37" library="  merged" package="CAPCAITOR-ELECTROLYTIC-ALCHIP-MZA-F80" value="100u" x="57.785" y="35.941" smashed="yes" rot="R180">
+<attribute name="NAME" x="60.404" y="38.822" size="1.27" layer="21" ratio="17" rot="R180"/>
+</element>
+<element name="C38" library="  merged" package="CAPCAITOR-ELECTROLYTIC-ALCHIP-MZA-F80" value="100u" x="38.608" y="39.624" rot="R270"/>
+<element name="R39" library="  merged" package="RLC_0603" value="1k" x="34.925" y="12.319"/>
+<element name="R44" library="  merged" package="RLC_0603" value="1k" x="34.798" y="10.668"/>
+<element name="R45" library="  merged" package="RLC_0603" value="10k" x="10.414" y="33.782" rot="R270"/>
+<element name="R46" library="  merged" package="RLC_0603" value="10k" x="2.159" y="33.782" rot="R270"/>
+<element name="TP1" library="  merged" package="KEYSTONE-SMD-TESTPOINT-5015" value="TESTPADKEYSTONE-SMD" x="42.037" y="28.956" rot="R90"/>
+<element name="TP2" library="  merged" package="KEYSTONE-SMD-TESTPOINT-5015" value="TESTPADKEYSTONE-SMD" x="2.54" y="15.875" rot="R180"/>
+<element name="TP3" library="  merged" package="KEYSTONE-SMD-TESTPOINT-5015" value="TESTPADKEYSTONE-SMD" x="10.414" y="20.447" rot="R180"/>
+<element name="R47" library="  merged" package="RLC_0603" value="10k" x="42.418" y="24.511" rot="R90"/>
+<element name="TP4" library="  merged" package="KEYSTONE-SMD-TESTPOINT-5015" value="TESTPADKEYSTONE-SMD" x="9.144" y="30.861" rot="R180"/>
+<element name="TP5" library="  merged" package="KEYSTONE-SMD-TESTPOINT-5015" value="TESTPADKEYSTONE-SMD" x="4.191" y="30.861" rot="R180"/>
+<element name="TP6" library="  merged" package="KEYSTONE-PTH-TESTPOINT-5011" value="TESTPADKEYSTONE-PTH" x="49.9481" y="38.1898" rot="R45"/>
+<element name="R48" library="  merged" package="RLC_0603" value="dnp" x="18.161" y="30.988" rot="R270"/>
+<element name="R49" library="  merged" package="RLC_0603" value="2k4" x="28.702" y="31.115"/>
+<element name="C44" library="  merged" package="RLC_0603" value="33n" x="52.832" y="32.258"/>
+<element name="R50" library="  merged" package="RLC_0603" value="10k" x="15.748" y="27.813" rot="R90"/>
+<element name="R51" library="  merged" package="RLC_0603" value="2k4" x="28.702" y="32.766"/>
+<element name="C45" library="  merged" package="RLC_0603" value="100n" x="26.162" y="23.368" rot="R90"/>
+<element name="TP7" library="  merged" package="KEYSTONE-SMD-TESTPOINT-5015" value="TESTPADKEYSTONE-SMD" x="63.373" y="2.413" rot="R180"/>
+<element name="D8" library="proxmark3" package="--MERGED_SOT23-3LEAD" value="--MERGED_DUAL-TVS-COMMON-ANODE" x="76.581" y="27.686" rot="R180"/>
+<element name="C46" library="  merged" package="RLC_0603" value="33n" x="14.605" y="42.799" rot="R180"/>
+<element name="C47" library="  merged" package="RLC_0603" value="33n" x="67.31" y="3.048" rot="R270"/>
+<element name="R52" library="  merged" package="RLC_0603" value="100" x="48.768" y="34.544"/>
+<element name="R53" library="  merged" package="RLC_0603" value="330" x="45.593" y="34.544"/>
+<element name="R54" library="  merged" package="RLC_0603" value="100" x="43.053" y="33.655" rot="R90"/>
+<element name="D9" library="  merged" package="LED_0603" value="LED" x="64.77" y="35.814"/>
+<element name="R55" library="  merged" package="RLC_0603" value="330" x="64.77" y="34.163"/>
+<element name="TP8" library="  merged" package="KEYSTONE-SMD-TESTPOINT-5015" value="TESTPADKEYSTONE-SMD" x="64.135" y="32.004" rot="R180"/>
+<element name="IC7" library="proxmark3" package="--MERGED_SOT23-3LEAD" value="--MERGED_MCP100" x="59.69" y="7.62" rot="R270"/>
+<element name="Q2" library="  merged" package="SOIC-8" value="IRF7307" x="14.605" y="49.911" smashed="yes" rot="R270">
+<attribute name="NAME" x="13.0605" y="50.546" size="1.016" layer="25" ratio="20" rot="R180"/>
+</element>
+<element name="R56" library="  merged" package="RLC_0603" value="10k" x="23.495" y="49.149"/>
+<element name="R57" library="  merged" package="RLC_0603" value="10k" x="69.596" y="28.067" rot="R90"/>
+<element name="R58" library="  merged" package="RLC_0603" value="dnp" x="16.637" y="48.768" rot="R270"/>
+<element name="R59" library="  merged" package="RLC_0603" value="3k3" x="54.991" y="22.479"/>
+<element name="D10" library="proxmark3" package="--MERGED_SOT23-3LEAD" value="--MERGED_DIODE-SMD-SOT23" x="16.764" y="13.97" smashed="yes" rot="R90">
+<attribute name="NAME" x="14.7331" y="14.7516" size="1.016" layer="25" font="vector" ratio="18" rot="R180"/>
+</element>
+<element name="D11" library="proxmark3" package="--MERGED_SOT23-3LEAD" value="--MERGED_DIODE-SMD-SOT23" x="19.939" y="2.286" smashed="yes">
+<attribute name="NAME" x="19.7046" y="4.5709" size="0.889" layer="25" font="vector" ratio="18" rot="R90"/>
+</element>
+</elements>
+<signals>
+<signal name="GND">
+<contactref element="SV1" pad="5"/>
+<contactref element="C1" pad="2"/>
+<contactref element="IC2" pad="2"/>
+<contactref element="IC2" pad="17"/>
+<contactref element="IC2" pad="46"/>
+<contactref element="IC2" pad="60"/>
+<contactref element="C3" pad="2"/>
+<contactref element="IC4" pad="3"/>
+<contactref element="C2" pad="2"/>
+<contactref element="C4" pad="1"/>
+<contactref element="C5" pad="1"/>
+<contactref element="C6" pad="1"/>
+<contactref element="C7" pad="1"/>
+<contactref element="C9" pad="2"/>
+<contactref element="C8" pad="2"/>
+<contactref element="SV3" pad="4"/>
+<contactref element="SV3" pad="20"/>
+<contactref element="SV3" pad="18"/>
+<contactref element="SV3" pad="16"/>
+<contactref element="SV3" pad="14"/>
+<contactref element="SV3" pad="12"/>
+<contactref element="SV3" pad="10"/>
+<contactref element="SV3" pad="8"/>
+<contactref element="SV3" pad="6"/>
+<contactref element="R10" pad="1"/>
+<contactref element="C11" pad="2"/>
+<contactref element="R11" pad="1"/>
+<contactref element="IC6" pad="11"/>
+<contactref element="IC8" pad="21"/>
+<contactref element="IC8" pad="20"/>
+<contactref element="IC8" pad="24"/>
+<contactref element="IC8" pad="2"/>
+<contactref element="C15" pad="2"/>
+<contactref element="R15" pad="1"/>
+<contactref element="D3" pad="1"/>
+<contactref element="IC9" pad="10"/>
+<contactref element="IC1" pad="29"/>
+<contactref element="IC1" pad="1"/>
+<contactref element="IC1" pad="11"/>
+<contactref element="IC1" pad="38"/>
+<contactref element="IC1" pad="78"/>
+<contactref element="IC1" pad="89"/>
+<contactref element="IC1" pad="48"/>
+<contactref element="IC1" pad="64"/>
+<contactref element="IC1" pad="24"/>
+<contactref element="IC1" pad="28"/>
+<contactref element="IC10" pad="10"/>
+<contactref element="SV5" pad="5"/>
+<contactref element="C26" pad="2"/>
+<contactref element="C25" pad="2"/>
+<contactref element="C31" pad="2"/>
+<contactref element="C30" pad="2"/>
+<contactref element="C29" pad="2"/>
+<contactref element="IC11" pad="7"/>
+<contactref element="IC5" pad="2"/>
+<contactref element="IC5" pad="5"/>
+<contactref element="IC5" pad="4"/>
+<contactref element="IC12" pad="3"/>
+<contactref element="R23" pad="1"/>
+<contactref element="C33" pad="2"/>
+<contactref element="IC13" pad="2"/>
+<contactref element="C27" pad="2"/>
+<contactref element="C32" pad="2"/>
+<contactref element="C28" pad="2"/>
+<contactref element="C34" pad="2"/>
+<contactref element="IC3" pad="2"/>
+<contactref element="D4" pad="-"/>
+<contactref element="D5" pad="-"/>
+<contactref element="D6" pad="-"/>
+<contactref element="R31" pad="1"/>
+<contactref element="IC6" pad="13"/>
+<contactref element="IC6" pad="12"/>
+<contactref element="IC14" pad="4"/>
+<contactref element="C39" pad="2"/>
+<contactref element="C20" pad="2"/>
+<contactref element="C35" pad="2"/>
+<contactref element="C36" pad="2"/>
+<contactref element="Q1" pad="2"/>
+<contactref element="R42" pad="1"/>
+<contactref element="SW1" pad="A"/>
+<contactref element="C38" pad="-"/>
+<contactref element="C24" pad="2"/>
+<contactref element="C21" pad="2"/>
+<contactref element="C22" pad="2"/>
+<contactref element="C23" pad="2"/>
+<contactref element="C37" pad="-"/>
+<contactref element="TP6" pad="A"/>
+<contactref element="C44" pad="2"/>
+<contactref element="C45" pad="2"/>
+<contactref element="C10" pad="2"/>
+<contactref element="D8" pad="3"/>
+<contactref element="C46" pad="2"/>
+<contactref element="SV1" pad="TAB0"/>
+<contactref element="SV1" pad="TAB1"/>
+<contactref element="SV1" pad="TAB2"/>
+<contactref element="SV1" pad="TAB3"/>
+<contactref element="C47" pad="2"/>
+<contactref element="R54" pad="1"/>
+<contactref element="C19" pad="2"/>
+<contactref element="C18" pad="2"/>
+<contactref element="D9" pad="-"/>
+<contactref element="IC7" pad="3"/>
+<contactref element="Q2" pad="2"/>
+<contactref element="Q2" pad="8"/>
+<contactref element="Q2" pad="1"/>
+<contactref element="D10" pad="1"/>
+<contactref element="D11" pad="1"/>
+<wire x1="78.398" y1="4.279" x2="78.359" y2="4.318" width="0.2032" layer="1"/>
+<wire x1="78.486" y1="4.279" x2="78.398" y2="4.279" width="0.2032" layer="1"/>
+<wire x1="78.359" y1="4.318" x2="78.227" y2="4.186" width="0.2032" layer="1"/>
+<wire x1="23.921" y1="31.033" x2="26.035" y2="31.033" width="0.2032" layer="1"/>
+<wire x1="23.241" y1="30.353" x2="23.921" y2="31.033" width="0.2032" layer="1"/>
+<wire x1="23.329" y1="27.393" x2="23.241" y2="27.305" width="0.2032" layer="1"/>
+<wire x1="23.329" y1="27.432" x2="23.329" y2="27.393" width="0.2032" layer="1"/>
+<wire x1="23.241" y1="27.305" x2="23.241" y2="30.353" width="0.2032" layer="1"/>
+<wire x1="46.076" y1="30.632" x2="46.101" y2="30.607" width="0.2032" layer="1"/>
+<wire x1="46.015" y1="30.632" x2="46.076" y2="30.632" width="0.2032" layer="1"/>
+<wire x1="46.126" y1="30.632" x2="46.665" y2="30.632" width="0.2032" layer="1"/>
+<wire x1="46.101" y1="30.607" x2="46.126" y2="30.632" width="0.2032" layer="1"/>
+<wire x1="51.22" y1="3.811" x2="51.22" y2="5.041" width="0.2032" layer="1"/>
+<wire x1="51.22" y1="5.041" x2="51.181" y2="5.08" width="0.2032" layer="1"/>
+<wire x1="51.896" y1="6.811" x2="53.72" y2="6.811" width="0.2032" layer="1"/>
+<wire x1="51.816" y1="6.731" x2="51.896" y2="6.811" width="0.2032" layer="1"/>
+<wire x1="53.72" y1="7.311" x2="52.125" y2="7.311" width="0.2032" layer="1"/>
+<wire x1="52.125" y1="7.311" x2="52.07" y2="7.366" width="0.2032" layer="1"/>
+<wire x1="55.919" y1="11.01" x2="56.007" y2="11.01" width="0.2032" layer="1"/>
+<wire x1="53.72" y1="11.811" x2="55.118" y2="11.811" width="0.2032" layer="1"/>
+<wire x1="55.118" y1="11.811" x2="55.919" y2="11.01" width="0.2032" layer="1"/>
+<wire x1="45.22" y1="19.811" x2="45.22" y2="20.82" width="0.2032" layer="1"/>
+<wire x1="45.22" y1="20.82" x2="45.085" y2="20.955" width="0.2032" layer="1"/>
+<wire x1="45.085" y1="20.955" x2="44.958" y2="21.082" width="0.2032" layer="1"/>
+<wire x1="44.715" y1="23.125" x2="44.715" y2="24.232" width="0.2032" layer="1"/>
+<wire x1="44.577" y1="22.987" x2="44.715" y2="23.125" width="0.2032" layer="1"/>
+<wire x1="44.489" y1="1.651" x2="44.323" y2="1.651" width="0.2032" layer="1"/>
+<wire x1="44.72" y1="2.048" x2="44.72" y2="3.811" width="0.2032" layer="1"/>
+<wire x1="44.323" y1="1.651" x2="44.72" y2="2.048" width="0.2032" layer="1"/>
+<wire x1="39.458" y1="1.905" x2="39.37" y2="1.905" width="0.2032" layer="1"/>
+<wire x1="39.72" y1="2.255" x2="39.72" y2="3.811" width="0.2032" layer="1"/>
+<wire x1="39.37" y1="1.905" x2="39.72" y2="2.255" width="0.2032" layer="1"/>
+<wire x1="37.72" y1="11.311" x2="39.235" y2="11.311" width="0.2032" layer="1"/>
+<wire x1="37.72" y1="16.811" x2="39.069" y2="16.811" width="0.2032" layer="1"/>
+<wire x1="39.069" y1="16.811" x2="39.116" y2="16.764" width="0.2032" layer="1"/>
+<wire x1="67.961" y1="7.985" x2="67.961" y2="10.225" width="0.2032" layer="1"/>
+<wire x1="68.326" y1="7.62" x2="67.961" y2="7.985" width="0.2032" layer="1"/>
+<wire x1="68.287" y1="6.731" x2="68.199" y2="6.731" width="0.2032" layer="1"/>
+<wire x1="68.326" y1="6.858" x2="68.326" y2="7.62" width="0.2032" layer="1"/>
+<wire x1="68.199" y1="6.731" x2="68.326" y2="6.858" width="0.2032" layer="1"/>
+<wire x1="71.97" y1="2.413" x2="71.882" y2="2.413" width="0.2032" layer="1"/>
+<wire x1="71.882" y1="2.413" x2="72.644" y2="3.175" width="0.2032" layer="1"/>
+<wire x1="21.209" y1="6.731" x2="21.248" y2="6.77" width="0.2032" layer="1"/>
+<wire x1="21.248" y1="6.77" x2="21.248" y2="6.858" width="0.2032" layer="1"/>
+<wire x1="21.248" y1="5.207" x2="21.248" y2="6.692" width="0.2032" layer="1"/>
+<wire x1="21.248" y1="6.692" x2="21.209" y2="6.731" width="0.2032" layer="1"/>
+<wire x1="17.074" y1="21.464" x2="17.074" y2="22.916" width="0.2032" layer="1"/>
+<wire x1="17.074" y1="22.916" x2="17.272" y2="23.114" width="0.2032" layer="1"/>
+<wire x1="18.374" y1="21.464" x2="18.374" y2="22.901" width="0.2032" layer="1"/>
+<wire x1="18.374" y1="23.622" x2="18.374" y2="24.764" width="0.2032" layer="1"/>
+<wire x1="11.938" y1="25.019" x2="11.899" y2="25.019" width="0.2032" layer="1"/>
+<wire x1="11.899" y1="23.368" x2="11.899" y2="24.98" width="0.2032" layer="1"/>
+<wire x1="11.899" y1="24.98" x2="11.938" y2="25.019" width="0.2032" layer="1"/>
+<wire x1="13.589" y1="22.137" x2="13.55" y2="22.137" width="0.2032" layer="1"/>
+<wire x1="13.55" y1="22.137" x2="12.7" y2="22.987" width="0.2032" layer="1"/>
+<wire x1="12.065" y1="22.987" x2="11.899" y2="23.153" width="0.2032" layer="1"/>
+<wire x1="11.899" y1="23.153" x2="11.899" y2="23.368" width="0.2032" layer="1"/>
+<wire x1="12.7" y1="22.987" x2="12.065" y2="22.987" width="0.2032" layer="1"/>
+<wire x1="11.811" y1="26.797" x2="11.899" y2="26.797" width="0.2032" layer="1"/>
+<wire x1="11.899" y1="25.019" x2="11.899" y2="26.709" width="0.2032" layer="1"/>
+<wire x1="11.899" y1="26.709" x2="11.811" y2="26.797" width="0.2032" layer="1"/>
+<wire x1="11.899" y1="26.797" x2="11.938" y2="26.797" width="0.2032" layer="1"/>
+<wire x1="11.899" y1="26.836" x2="11.899" y2="28.448" width="0.2032" layer="1"/>
+<wire x1="11.938" y1="26.797" x2="11.899" y2="26.836" width="0.2032" layer="1"/>
+<wire x1="18.042" y1="34.544" x2="18.042" y2="35.695" width="0.2032" layer="1"/>
+<wire x1="18.042" y1="35.695" x2="18.161" y2="35.814" width="0.2032" layer="1"/>
+<wire x1="18.161" y1="35.814" x2="18.161" y2="36.83" width="0.2032" layer="1"/>
+<wire x1="24.9" y1="34.544" x2="24.9" y2="33.647" width="0.2032" layer="1"/>
+<wire x1="24.9" y1="33.647" x2="25.4" y2="33.147" width="0.2032" layer="1"/>
+<wire x1="27.305" y1="33.782" x2="27.305" y2="34.29" width="0.2032" layer="1"/>
+<wire x1="25.4" y1="33.147" x2="26.67" y2="33.147" width="0.2032" layer="1"/>
+<wire x1="26.67" y1="33.147" x2="27.305" y2="33.782" width="0.2032" layer="1"/>
+<wire x1="72.576" y1="17.975" x2="71.211" y2="17.975" width="0.2032" layer="1"/>
+<wire x1="40.64" y1="24.13" x2="40.894" y2="24.13" width="0.2032" layer="1"/>
+<wire x1="39.473" y1="25.019" x2="40.362" y2="24.13" width="0.2032" layer="1"/>
+<wire x1="40.362" y1="24.13" x2="40.64" y2="24.13" width="0.2032" layer="1"/>
+<wire x1="39.2684" y1="28.4582" x2="40.2692" y2="28.4582" width="0.2032" layer="1"/>
+<wire x1="40.2692" y1="28.4582" x2="40.64" y2="28.829" width="0.2032" layer="1"/>
+<wire x1="40.64" y1="28.829" x2="40.64" y2="31.115" width="0.2032" layer="1"/>
+<wire x1="43.79" y1="30.632" x2="44.065" y2="30.632" width="0.2032" layer="1"/>
+<wire x1="43.053" y1="31.369" x2="43.79" y2="30.632" width="0.2032" layer="1"/>
+<wire x1="46.015" y1="29.251" x2="46.015" y2="30.632" width="0.2032" layer="1"/>
+<wire x1="45.974" y1="29.21" x2="46.015" y2="29.251" width="0.2032" layer="1"/>
+<wire x1="44.323" y1="29.21" x2="45.974" y2="29.21" width="0.2032" layer="1"/>
+<wire x1="44.069" y1="29.464" x2="44.323" y2="29.21" width="0.2032" layer="1"/>
+<wire x1="44.065" y1="30.484" x2="44.069" y2="30.48" width="0.2032" layer="1"/>
+<wire x1="44.065" y1="30.632" x2="44.065" y2="30.484" width="0.2032" layer="1"/>
+<wire x1="44.069" y1="30.48" x2="44.069" y2="29.464" width="0.2032" layer="1"/>
+<wire x1="24.765" y1="20.193" x2="24.638" y2="20.32" width="0.2032" layer="1"/>
+<wire x1="24.599" y1="20.359" x2="23.368" y2="20.359" width="0.2032" layer="1"/>
+<wire x1="24.638" y1="20.32" x2="24.599" y2="20.359" width="0.2032" layer="1"/>
+<wire x1="18.374" y1="23.622" x2="19.304" y2="23.622" width="0.2032" layer="1"/>
+<wire x1="30.861" y1="1.905" x2="30.861" y2="1.817" width="0.2032" layer="1"/>
+<wire x1="29.972" y1="1.016" x2="30.861" y2="1.905" width="0.2032" layer="1"/>
+<wire x1="29.972" y1="1.016" x2="29.972" y2="1.778" width="0.2032" layer="2"/>
+<wire x1="29.972" y1="1.778" x2="29.845" y2="1.905" width="0.2032" layer="2"/>
+<wire x1="33.999" y1="17.108" x2="33.999" y2="18.034" width="0.2032" layer="1"/>
+<wire x1="33.528" y1="16.637" x2="33.999" y2="17.108" width="0.2032" layer="1"/>
+<wire x1="33.02" y1="16.637" x2="33.528" y2="16.637" width="0.2032" layer="1"/>
+<wire x1="39.235" y1="11.311" x2="39.6795" y2="11.7555" width="0.2032" layer="1"/>
+<wire x1="39.6795" y1="11.7555" x2="39.751" y2="11.827" width="0.2032" layer="1"/>
+<wire x1="49.911" y1="6.731" x2="51.816" y2="6.731" width="0.2032" layer="1"/>
+<wire x1="49.53" y1="6.35" x2="49.911" y2="6.731" width="0.2032" layer="1"/>
+<wire x1="49.53" y1="5.842" x2="49.53" y2="6.35" width="0.2032" layer="1"/>
+<wire x1="50.292" y1="5.08" x2="49.53" y2="5.842" width="0.2032" layer="1"/>
+<wire x1="51.181" y1="5.08" x2="50.292" y2="5.08" width="0.2032" layer="1"/>
+<wire x1="73.66" y1="17.018" x2="73.787" y2="17.018" width="0.2032" layer="1"/>
+<wire x1="73.533" y1="17.018" x2="72.576" y2="17.975" width="0.2032" layer="1"/>
+<wire x1="73.533" y1="17.018" x2="73.66" y2="17.018" width="0.2032" layer="1"/>
+<wire x1="77.724" y1="19.177" x2="77.597" y2="19.177" width="0.2032" layer="1"/>
+<wire x1="68.461" y1="22.225" x2="68.461" y2="27.17" width="0.2032" layer="1"/>
+<wire x1="68.461" y1="27.17" x2="68.072" y2="27.559" width="0.2032" layer="1"/>
+<wire x1="67.437" y1="27.686" x2="67.398" y2="27.647" width="0.2032" layer="1"/>
+<wire x1="67.398" y1="27.647" x2="67.31" y2="27.647" width="0.2032" layer="1"/>
+<wire x1="68.072" y1="27.559" x2="67.564" y2="27.559" width="0.2032" layer="1"/>
+<wire x1="67.564" y1="27.559" x2="67.437" y2="27.686" width="0.2032" layer="1"/>
+<wire x1="16.549" y1="16.422" x2="16.637" y2="16.422" width="0.2032" layer="1"/>
+<wire x1="18.288" y1="16.422" x2="16.549" y2="16.422" width="0.2032" layer="1"/>
+<wire x1="16.549" y1="16.422" x2="16.51" y2="16.383" width="0.2032" layer="1"/>
+<wire x1="18.2" y1="16.422" x2="18.161" y2="16.383" width="0.2032" layer="1"/>
+<wire x1="18.288" y1="16.422" x2="18.2" y2="16.422" width="0.2032" layer="1"/>
+<wire x1="44.577" y1="21.463" x2="44.577" y2="22.987" width="0.2032" layer="1"/>
+<wire x1="45.085" y1="20.955" x2="44.577" y2="21.463" width="0.2032" layer="1"/>
+<wire x1="39.6795" y1="11.7555" x2="39.751" y2="11.684" width="0.2032" layer="1"/>
+<wire x1="39.751" y1="11.684" x2="39.751" y2="11.811" width="0.2032" layer="1"/>
+<wire x1="31.877" y1="35.179" x2="31.877" y2="37.973" width="0.2032" layer="1"/>
+<wire x1="55.245" y1="16.256" x2="55.245" y2="16.002" width="0.2032" layer="1"/>
+<wire x1="53.72" y1="16.811" x2="54.69" y2="16.811" width="0.2032" layer="1"/>
+<wire x1="54.69" y1="16.811" x2="55.245" y2="16.256" width="0.2032" layer="1"/>
+<wire x1="52.07" y1="7.366" x2="51.689" y2="7.366" width="0.2032" layer="1"/>
+<wire x1="51.689" y1="7.366" x2="51.562" y2="7.493" width="0.2032" layer="1"/>
+<wire x1="53.72" y1="6.857" x2="53.721" y2="6.858" width="0.2032" layer="1"/>
+<wire x1="53.72" y1="6.811" x2="53.72" y2="6.857" width="0.2032" layer="1"/>
+<wire x1="53.72" y1="6.859" x2="53.72" y2="7.311" width="0.2032" layer="1"/>
+<wire x1="53.721" y1="6.858" x2="53.72" y2="6.859" width="0.2032" layer="1"/>
+<wire x1="18.415" y1="21.717" x2="18.412" y2="21.714" width="0.2032" layer="1"/>
+<wire x1="18.374" y1="23.114" x2="18.374" y2="21.758" width="0.2032" layer="1"/>
+<wire x1="18.374" y1="23.114" x2="18.374" y2="23.622" width="0.2032" layer="1"/>
+<wire x1="18.374" y1="21.758" x2="18.415" y2="21.717" width="0.2032" layer="1"/>
+<wire x1="17.272" y1="23.114" x2="18.374" y2="23.114" width="0.2032" layer="1"/>
+<wire x1="46.665" y1="30.632" x2="46.665" y2="31.552" width="0.2032" layer="1"/>
+<wire x1="46.665" y1="31.552" x2="46.863" y2="31.75" width="0.2032" layer="1"/>
+<wire x1="46.863" y1="31.75" x2="47.625" y2="31.75" width="0.2032" layer="1"/>
+<wire x1="47.625" y1="31.75" x2="47.879" y2="32.004" width="0.2032" layer="1"/>
+<wire x1="47.879" y1="32.639" x2="47.918" y2="32.639" width="0.2032" layer="1"/>
+<wire x1="47.879" y1="32.004" x2="47.879" y2="32.639" width="0.2032" layer="1"/>
+<wire x1="39.37" y1="40.64" x2="39.878" y2="40.64" width="0.2032" layer="1"/>
+<wire x1="39.243" y1="40.767" x2="39.37" y2="40.64" width="0.2032" layer="1"/>
+<wire x1="38.525" y1="42.374" x2="38.481" y2="42.418" width="0.2032" layer="1"/>
+<wire x1="38.608" y1="42.374" x2="38.525" y2="42.374" width="0.2032" layer="1"/>
+<wire x1="39.243" y1="41.656" x2="39.243" y2="40.767" width="0.2032" layer="1"/>
+<wire x1="38.525" y1="42.374" x2="39.243" y2="41.656" width="0.2032" layer="1"/>
+<wire x1="18.412" y1="21.339" x2="18.374" y2="21.377" width="0.2032" layer="1"/>
+<wire x1="18.374" y1="21.377" x2="18.374" y2="21.464" width="0.2032" layer="1"/>
+<wire x1="18.412" y1="21.714" x2="18.412" y2="21.339" width="0.2032" layer="1"/>
+<wire x1="18.412" y1="21.339" x2="18.415" y2="21.336" width="0.2032" layer="1"/>
+<wire x1="10.16" y1="41.91" x2="11.049" y2="41.91" width="0.2032" layer="1"/>
+<wire x1="11.049" y1="41.91" x2="11.43" y2="42.291" width="0.2032" layer="1"/>
+<wire x1="11.43" y1="42.291" x2="11.811" y2="42.291" width="0.2032" layer="1"/>
+<wire x1="11.811" y1="42.291" x2="12.446" y2="42.926" width="0.2032" layer="1"/>
+<wire x1="13.589" y1="42.799" x2="13.755" y2="42.799" width="0.2032" layer="1"/>
+<wire x1="12.446" y1="42.926" x2="13.462" y2="42.926" width="0.2032" layer="1"/>
+<wire x1="13.462" y1="42.926" x2="13.589" y2="42.799" width="0.2032" layer="1"/>
+<wire x1="23.114" y1="43.688" x2="23.114" y2="43.839" width="0.2032" layer="1"/>
+<wire x1="17.5006" y1="43.5508" x2="22.9768" y2="43.5508" width="0.2032" layer="1"/>
+<wire x1="22.9768" y1="43.5508" x2="23.114" y2="43.688" width="0.2032" layer="1"/>
+<wire x1="78.613" y1="4.191" x2="78.525" y2="4.279" width="0.2032" layer="1"/>
+<wire x1="78.525" y1="4.279" x2="78.486" y2="4.279" width="0.2032" layer="1"/>
+<wire x1="76.073" y1="3.932" x2="78.354" y2="3.932" width="0.2032" layer="1"/>
+<wire x1="78.354" y1="3.932" x2="78.613" y2="4.191" width="0.2032" layer="1"/>
+<wire x1="72.644" y1="3.175" x2="74.803" y2="3.175" width="0.2032" layer="1"/>
+<wire x1="74.803" y1="3.175" x2="75.438" y2="3.81" width="0.2032" layer="1"/>
+<wire x1="76.073" y1="3.81" x2="76.073" y2="3.932" width="0.2032" layer="1"/>
+<wire x1="75.438" y1="3.81" x2="76.073" y2="3.81" width="0.2032" layer="1"/>
+<wire x1="78.232" y1="19.177" x2="78.613" y2="19.558" width="0.2032" layer="1"/>
+<wire x1="79.375" y1="19.558" x2="79.375" y2="19.597" width="0.2032" layer="1"/>
+<wire x1="78.613" y1="19.558" x2="79.375" y2="19.558" width="0.2032" layer="1"/>
+<wire x1="77.724" y1="19.177" x2="78.232" y2="19.177" width="0.2032" layer="1"/>
+<wire x1="78.232" y1="19.177" x2="78.74" y2="18.669" width="0.2032" layer="1"/>
+<wire x1="79.375" y1="18.415" x2="79.375" y2="18.376" width="0.2032" layer="1"/>
+<wire x1="78.74" y1="18.669" x2="79.121" y2="18.669" width="0.2032" layer="1"/>
+<wire x1="79.121" y1="18.669" x2="79.375" y2="18.415" width="0.2032" layer="1"/>
+<wire x1="57.023" y1="22.987" x2="56.896" y2="22.987" width="0.2032" layer="1"/>
+<wire x1="59.211" y1="20.672" x2="59.211" y2="19.975" width="0.2032" layer="1"/>
+<wire x1="56.896" y1="22.987" x2="59.211" y2="20.672" width="0.2032" layer="1"/>
+<wire x1="55.118" y1="20.789" x2="55.118" y2="20.955" width="0.2032" layer="1"/>
+<wire x1="55.118" y1="20.955" x2="54.991" y2="21.082" width="0.2032" layer="1"/>
+<wire x1="54.991" y1="21.082" x2="54.991" y2="23.114" width="0.2032" layer="1"/>
+<wire x1="54.991" y1="23.114" x2="55.245" y2="23.368" width="0.2032" layer="1"/>
+<wire x1="55.245" y1="23.368" x2="56.642" y2="23.368" width="0.2032" layer="1"/>
+<wire x1="56.642" y1="23.368" x2="57.023" y2="22.987" width="0.2032" layer="1"/>
+<wire x1="17.78" y1="3.429" x2="17.78" y2="3.302" width="0.2032" layer="1"/>
+<wire x1="24.423" y1="5.207" x2="24.423" y2="5.168" width="0.2032" layer="1"/>
+<wire x1="25.654" y1="3.937" x2="25.527" y2="3.937" width="0.2032" layer="1"/>
+<wire x1="24.423" y1="5.168" x2="25.654" y2="3.937" width="0.2032" layer="1"/>
+<wire x1="17.907" y1="3.429" x2="17.78" y2="3.429" width="0.2032" layer="1"/>
+<wire x1="18.9992" y1="1.524" x2="18.9992" y2="2.3368" width="0.2032" layer="1"/>
+<wire x1="18.9992" y1="2.3368" x2="17.907" y2="3.429" width="0.2032" layer="1"/>
+<wire x1="18.503" y1="16.422" x2="18.288" y2="16.422" width="0.2032" layer="1"/>
+<wire x1="18.669" y1="15.367" x2="18.669" y2="16.256" width="0.2032" layer="1"/>
+<wire x1="18.669" y1="16.256" x2="18.503" y2="16.422" width="0.2032" layer="1"/>
+<wire x1="17.526" y1="13.0302" x2="17.526" y2="13.081" width="0.2032" layer="1"/>
+<wire x1="17.526" y1="13.081" x2="18.542" y2="14.097" width="0.2032" layer="1"/>
+<wire x1="18.542" y1="14.097" x2="18.542" y2="15.24" width="0.2032" layer="1"/>
+<wire x1="18.542" y1="15.24" x2="18.669" y2="15.367" width="0.2032" layer="1"/>
+<via x="18.796" y="37.084" extent="1-16" drill="0.4"/>
+<via x="11.938" y="31.877" extent="1-16" drill="0.4"/>
+<via x="24.257" y="30.226" extent="1-16" drill="0.4"/>
+<via x="27.305" y="34.29" extent="1-16" drill="0.4"/>
+<via x="15.113" y="6.731" extent="1-16" drill="0.4"/>
+<via x="20.574" y="8.001" extent="1-16" drill="0.4"/>
+<via x="25.146" y="12.446" extent="1-16" drill="0.4"/>
+<via x="40.64" y="31.115" extent="1-16" drill="0.4"/>
+<via x="43.053" y="31.369" extent="1-16" drill="0.4"/>
+<via x="40.64" y="24.13" extent="1-16" drill="0.4"/>
+<via x="19.304" y="23.622" extent="1-16" drill="0.4"/>
+<via x="24.638" y="20.32" extent="1-16" drill="0.4"/>
+<via x="25.527" y="3.937" extent="1-16" drill="0.4"/>
+<via x="27.813" y="2.54" extent="1-16" drill="0.4"/>
+<via x="29.972" y="1.016" extent="1-16" drill="0.4"/>
+<via x="33.02" y="16.637" extent="1-16" drill="0.4"/>
+<via x="42.164" y="16.764" extent="1-16" drill="0.4"/>
+<via x="39.751" y="11.811" extent="1-16" drill="0.4"/>
+<via x="33.274" y="7.493" extent="1-16" drill="0.4"/>
+<via x="67.31" y="29.083" extent="1-16" drill="0.4"/>
+<via x="73.66" y="17.018" extent="1-16" drill="0.4"/>
+<via x="77.724" y="19.177" extent="1-16" drill="0.4"/>
+<via x="39.37" y="33.02" extent="1-16" drill="0.4"/>
+<via x="18.669" y="15.367" extent="1-16" drill="0.4"/>
+<via x="7.493" y="15.748" extent="1-16" drill="0.4"/>
+<via x="69.088" y="5.461" extent="1-16" drill="0.4"/>
+<via x="73.66" y="5.588" extent="1-16" drill="0.4"/>
+<via x="62.738" y="5.461" extent="1-16" drill="0.4"/>
+<via x="43.053" y="1.778" extent="1-16" drill="0.4"/>
+<via x="48.133" y="5.461" extent="1-16" drill="0.4"/>
+<via x="31.877" y="37.973" extent="1-16" drill="0.4"/>
+<via x="55.245" y="16.002" extent="1-16" drill="0.4"/>
+<via x="51.562" y="7.493" extent="1-16" drill="0.4"/>
+<via x="56.388" y="12.065" extent="1-16" drill="0.4"/>
+<via x="10.541" y="46.355" extent="1-16" drill="0.4"/>
+<via x="27.178" y="49.149" extent="1-16" drill="0.4"/>
+<via x="22.606" y="45.212" extent="1-16" drill="0.4"/>
+<via x="1.905" y="45.593" extent="1-16" drill="0.4"/>
+<via x="4.699" y="45.466" extent="1-16" drill="0.4"/>
+<via x="4.445" y="42.545" extent="1-16" drill="0.4"/>
+<via x="4.318" y="23.622" extent="1-16" drill="0.4"/>
+<via x="7.874" y="28.067" extent="1-16" drill="0.4"/>
+<via x="7.112" y="20.955" extent="1-16" drill="0.4"/>
+<via x="7.239" y="18.288" extent="1-16" drill="0.4"/>
+<via x="11.049" y="9.906" extent="1-16" drill="0.4"/>
+<via x="10.795" y="4.445" extent="1-16" drill="0.4"/>
+<via x="15.367" y="8.89" extent="1-16" drill="0.4"/>
+<via x="32.004" y="7.493" extent="1-16" drill="0.4"/>
+<via x="33.02" y="6.35" extent="1-16" drill="0.4"/>
+<via x="30.734" y="16.256" extent="1-16" drill="0.4"/>
+<via x="28.702" y="19.05" extent="1-16" drill="0.4"/>
+<via x="32.131" y="27.686" extent="1-16" drill="0.4"/>
+<via x="39.37" y="8.001" extent="1-16" drill="0.4"/>
+<via x="66.04" y="1.524" extent="1-16" drill="0.4"/>
+<via x="74.549" y="24.511" extent="1-16" drill="0.4"/>
+<via x="73.66" y="29.083" extent="1-16" drill="0.4"/>
+<via x="74.041" y="31.75" extent="1-16" drill="0.4"/>
+<via x="73.533" y="36.068" extent="1-16" drill="0.4"/>
+<via x="56.769" y="33.782" extent="1-16" drill="0.4"/>
+<via x="60.325" y="37.338" extent="1-16" drill="0.4"/>
+<via x="66.548" y="36.957" extent="1-16" drill="0.4"/>
+<via x="39.878" y="40.64" extent="1-16" drill="0.4"/>
+<via x="47.625" y="13.081" extent="1-16" drill="0.4"/>
+<via x="45.212" y="13.335" extent="1-16" drill="0.4"/>
+<via x="47.752" y="10.795" extent="1-16" drill="0.4"/>
+<via x="17.78" y="3.429" extent="1-16" drill="0.4"/>
+<via x="21.844" y="25.019" extent="1-16" drill="0.4"/>
+<via x="23.495" y="37.846" extent="1-16" drill="0.4"/>
+<via x="26.035" y="37.846" extent="1-16" drill="0.4"/>
+<via x="33.147" y="37.846" extent="1-16" drill="0.4"/>
+<via x="2.667" y="44.577" extent="1-16" drill="0.4"/>
+<via x="5.715" y="7.747" extent="1-16" drill="0.4"/>
+<via x="55.88" y="3.302" extent="1-16" drill="0.4"/>
+<via x="58.928" y="3.302" extent="1-16" drill="0.4"/>
+<via x="57.404" y="4.826" extent="1-16" drill="0.4"/>
+<via x="57.404" y="1.778" extent="1-16" drill="0.4"/>
+<via x="57.404" y="3.302" extent="1-16" drill="2" diameter="4"/>
+<via x="26.67" y="44.704" extent="1-16" drill="0.4"/>
+<via x="29.718" y="44.704" extent="1-16" drill="0.4"/>
+<via x="28.194" y="43.18" extent="1-16" drill="0.4"/>
+<via x="28.194" y="46.228" extent="1-16" drill="0.4"/>
+<via x="28.194" y="44.704" extent="1-16" drill="2" diameter="4"/>
+<via x="48.006" y="27.813" extent="1-16" drill="0.4"/>
+<via x="39.37" y="49.911" extent="1-16" drill="0.4"/>
+<via x="27.305" y="50.038" extent="1-16" drill="0.4"/>
+<via x="57.15" y="48.641" extent="1-16" drill="0.4"/>
+<via x="73.787" y="49.022" extent="1-16" drill="0.4"/>
+<via x="77.978" y="43.815" extent="1-16" drill="0.4"/>
+<via x="78.232" y="34.925" extent="1-16" drill="0.4"/>
+<via x="79.883" y="34.925" extent="1-16" drill="0.4"/>
+<via x="80.01" y="22.987" extent="1-16" drill="0.4"/>
+<via x="80.264" y="12.573" extent="1-16" drill="0.4"/>
+<via x="79.629" y="9.017" extent="1-16" drill="0.4"/>
+<via x="48.387" y="1.778" extent="1-16" drill="0.4"/>
+<via x="55.118" y="31.496" extent="1-16" drill="0.4"/>
+<via x="51.816" y="33.655" extent="1-16" drill="0.4"/>
+<via x="34.163" y="32.258" extent="1-16" drill="0.4"/>
+<via x="57.023" y="22.987" extent="1-16" drill="0.4"/>
+<via x="29.2714" y="45.7815" extent="1-16" drill="0.4"/>
+<via x="29.2714" y="43.6265" extent="1-16" drill="0.4"/>
+<via x="27.1165" y="43.6265" extent="1-16" drill="0.4"/>
+<via x="27.1165" y="45.7814" extent="1-16" drill="0.4"/>
+<via x="58.4815" y="2.2245" extent="1-16" drill="0.4"/>
+<via x="58.4815" y="4.3795" extent="1-16" drill="0.4"/>
+<via x="56.3265" y="4.3795" extent="1-16" drill="0.4"/>
+<via x="56.3265" y="2.2245" extent="1-16" drill="0.4"/>
+<via x="14.351" y="21.082" extent="1-16" drill="0.4"/>
+<via x="4.318" y="44.069" extent="1-16" drill="0.4"/>
+<via x="5.334" y="43.815" extent="1-16" drill="0.4"/>
+<via x="10.16" y="41.91" extent="1-16" drill="0.4"/>
+<polygon width="0.2032" layer="2" isolate="0.508">
+<vertex x="0.635" y="50.673"/>
+<vertex x="0.635" y="0.635"/>
+<vertex x="80.645" y="0.635"/>
+<vertex x="80.645" y="50.673"/>
+</polygon>
+<polygon width="0.2032" layer="1" isolate="0.508">
+<vertex x="0.635" y="50.673"/>
+<vertex x="0.635" y="0.635"/>
+<vertex x="80.645" y="0.635"/>
+<vertex x="80.645" y="50.673"/>
+</polygon>
+<polygon width="0.2032" layer="16" isolate="0.508">
+<vertex x="0.635" y="50.673"/>
+<vertex x="0.635" y="0.635"/>
+<vertex x="80.645" y="0.635"/>
+<vertex x="80.645" y="50.673"/>
+</polygon>
+</signal>
+<signal name="N$1">
+<contactref element="SV1" pad="1"/>
+<contactref element="C1" pad="1"/>
+<contactref element="U1" pad="1"/>
+<wire x1="11.938" y1="44.831" x2="11.977" y2="44.87" width="0.2032" layer="1"/>
+<wire x1="11.977" y1="44.87" x2="11.977" y2="44.577" width="0.2032" layer="1"/>
+<wire x1="8.223" y1="45.358" x2="11.411" y2="45.358" width="0.4064" layer="1"/>
+<wire x1="11.411" y1="45.358" x2="11.938" y2="44.831" width="0.4064" layer="1"/>
+<wire x1="11.977" y1="44.792" x2="12.065" y2="44.704" width="0.2032" layer="1"/>
+<wire x1="11.977" y1="44.577" x2="11.977" y2="44.792" width="0.2032" layer="1"/>
+<wire x1="12.065" y1="44.704" x2="12.065" y2="46.902" width="0.4064" layer="1"/>
+</signal>
+<signal name="USB_D-">
+<contactref element="SV1" pad="2"/>
+<contactref element="R4" pad="1"/>
+<contactref element="D8" pad="2"/>
+<wire x1="8.223" y1="44.558" x2="10.052" y2="44.558" width="0.2032" layer="1"/>
+<wire x1="23.876" y1="43.053" x2="25.908" y2="41.021" width="0.2032" layer="15"/>
+<wire x1="25.908" y1="41.021" x2="29.845" y2="41.021" width="0.2032" layer="15"/>
+<wire x1="29.845" y1="41.021" x2="31.877" y2="43.053" width="0.2032" layer="15"/>
+<wire x1="31.877" y1="43.053" x2="48.895" y2="43.053" width="0.2032" layer="15"/>
+<wire x1="48.895" y1="43.053" x2="50.927" y2="41.021" width="0.2032" layer="15"/>
+<wire x1="50.927" y1="41.021" x2="75.692" y2="41.021" width="0.2032" layer="15"/>
+<wire x1="75.692" y1="41.021" x2="76.454" y2="40.259" width="0.2032" layer="15"/>
+<wire x1="76.454" y1="40.259" x2="76.454" y2="29.972" width="0.2032" layer="16"/>
+<wire x1="76.454" y1="29.972" x2="76.454" y2="12.446" width="0.2032" layer="16"/>
+<wire x1="76.454" y1="12.446" x2="77.978" y2="10.922" width="0.2032" layer="16"/>
+<wire x1="76.454" y1="11.049" x2="76.542" y2="11.049" width="0.2032" layer="1"/>
+<wire x1="77.978" y1="10.922" x2="76.581" y2="10.922" width="0.2032" layer="1"/>
+<wire x1="76.581" y1="10.922" x2="76.454" y2="11.049" width="0.2032" layer="1"/>
+<wire x1="75.6158" y1="29.8958" x2="75.6158" y2="28.448" width="0.2032" layer="1"/>
+<wire x1="75.692" y1="29.972" x2="75.6158" y2="29.8958" width="0.2032" layer="1"/>
+<wire x1="76.454" y1="29.972" x2="75.692" y2="29.972" width="0.2032" layer="16"/>
+<wire x1="10.052" y1="44.558" x2="11.43" y2="43.18" width="0.2032" layer="1"/>
+<wire x1="11.43" y1="43.18" x2="11.557" y2="43.18" width="0.2032" layer="1"/>
+<wire x1="11.684" y1="43.053" x2="23.876" y2="43.053" width="0.2032" layer="15"/>
+<wire x1="11.557" y1="43.18" x2="11.684" y2="43.053" width="0.2032" layer="15"/>
+<via x="76.454" y="40.259" extent="1-16" drill="0.4"/>
+<via x="77.978" y="10.922" extent="1-16" drill="0.4"/>
+<via x="75.692" y="29.972" extent="1-16" drill="0.4"/>
+<via x="11.557" y="43.18" extent="1-16" drill="0.4"/>
+</signal>
+<signal name="USB_D+">
+<contactref element="SV1" pad="3"/>
+<contactref element="R5" pad="1"/>
+<contactref element="D8" pad="1"/>
+<wire x1="8.223" y1="43.758" x2="9.582" y2="43.758" width="0.2032" layer="1"/>
+<wire x1="13.462" y1="42.164" x2="13.843" y2="42.545" width="0.2032" layer="15"/>
+<wire x1="13.843" y1="42.545" x2="23.241" y2="42.545" width="0.2032" layer="15"/>
+<wire x1="23.241" y1="42.545" x2="25.273" y2="40.513" width="0.2032" layer="15"/>
+<wire x1="25.273" y1="40.513" x2="30.607" y2="40.513" width="0.2032" layer="15"/>
+<wire x1="30.607" y1="40.513" x2="32.639" y2="42.545" width="0.2032" layer="15"/>
+<wire x1="32.639" y1="42.545" x2="48.768" y2="42.545" width="0.2032" layer="15"/>
+<wire x1="48.768" y1="42.545" x2="50.8" y2="40.513" width="0.2032" layer="15"/>
+<wire x1="50.8" y1="40.513" x2="74.676" y2="40.513" width="0.2032" layer="15"/>
+<wire x1="74.676" y1="40.513" x2="75.438" y2="39.751" width="0.2032" layer="15"/>
+<wire x1="75.438" y1="39.751" x2="75.438" y2="40.64" width="0.2032" layer="16"/>
+<wire x1="75.438" y1="40.64" x2="75.946" y2="41.148" width="0.2032" layer="16"/>
+<wire x1="75.946" y1="41.148" x2="76.708" y2="41.148" width="0.2032" layer="16"/>
+<wire x1="76.708" y1="41.148" x2="77.343" y2="40.513" width="0.2032" layer="16"/>
+<wire x1="77.343" y1="40.513" x2="77.343" y2="39.751" width="0.2032" layer="16"/>
+<wire x1="77.343" y1="39.751" x2="76.962" y2="39.37" width="0.2032" layer="16"/>
+<wire x1="76.962" y1="39.37" x2="76.962" y2="29.972" width="0.2032" layer="16"/>
+<wire x1="76.962" y1="29.972" x2="76.962" y2="13.462" width="0.2032" layer="16"/>
+<wire x1="76.962" y1="13.462" x2="77.851" y2="12.573" width="0.2032" layer="16"/>
+<wire x1="76.581" y1="12.7" x2="76.542" y2="12.7" width="0.2032" layer="1"/>
+<wire x1="77.851" y1="12.573" x2="76.708" y2="12.573" width="0.2032" layer="1"/>
+<wire x1="76.708" y1="12.573" x2="76.581" y2="12.7" width="0.2032" layer="1"/>
+<wire x1="77.5208" y1="29.5148" x2="77.5208" y2="28.448" width="0.2032" layer="1"/>
+<wire x1="77.978" y1="29.972" x2="77.5208" y2="29.5148" width="0.2032" layer="1"/>
+<wire x1="76.962" y1="29.972" x2="77.978" y2="29.972" width="0.2032" layer="16"/>
+<wire x1="9.582" y1="43.758" x2="10.414" y2="42.926" width="0.2032" layer="1"/>
+<wire x1="10.414" y1="42.926" x2="10.414" y2="42.799" width="0.2032" layer="1"/>
+<wire x1="11.176" y1="42.164" x2="13.462" y2="42.164" width="0.2032" layer="15"/>
+<wire x1="10.414" y1="42.926" x2="11.176" y2="42.164" width="0.2032" layer="15"/>
+<via x="10.414" y="42.926" extent="1-16" drill="0.4"/>
+<via x="75.438" y="39.751" extent="1-16" drill="0.4"/>
+<via x="77.851" y="12.573" extent="1-16" drill="0.4"/>
+<via x="77.978" y="29.972" extent="1-16" drill="0.4"/>
+</signal>
+<signal name="+3V3">
+<contactref element="IC2" pad="18"/>
+<contactref element="IC2" pad="45"/>
+<contactref element="IC2" pad="58"/>
+<contactref element="IC2" pad="59"/>
+<contactref element="IC2" pad="7"/>
+<contactref element="IC3" pad="5"/>
+<contactref element="IC2" pad="1"/>
+<contactref element="SV3" pad="1"/>
+<contactref element="R7" pad="2"/>
+<contactref element="SV5" pad="6"/>
+<contactref element="C25" pad="1"/>
+<contactref element="C26" pad="1"/>
+<contactref element="C27" pad="1"/>
+<contactref element="R43" pad="2"/>
+<contactref element="IC7" pad="2"/>
+<wire x1="23.114" y1="46.863" x2="23.241" y2="46.99" width="0.4064" layer="1"/>
+<wire x1="23.114" y1="46.839" x2="23.114" y2="46.863" width="0.4064" layer="1"/>
+<wire x1="23.114" y1="46.863" x2="23.0378" y2="46.7868" width="0.4064" layer="1"/>
+<wire x1="30.353" y1="47.879" x2="26.416" y2="47.879" width="0.4064" layer="1"/>
+<wire x1="26.416" y1="47.879" x2="25.4" y2="46.863" width="0.4064" layer="1"/>
+<wire x1="23.114" y1="46.736" x2="23.114" y2="46.839" width="0.4064" layer="1"/>
+<wire x1="25.4" y1="46.863" x2="23.241" y2="46.863" width="0.4064" layer="1"/>
+<wire x1="23.241" y1="46.863" x2="23.114" y2="46.736" width="0.4064" layer="1"/>
+<wire x1="30.353" y1="46.736" x2="30.353" y2="47.879" width="0.6096" layer="1"/>
+<wire x1="31.623" y1="45.466" x2="30.353" y2="46.736" width="0.6096" layer="1"/>
+<wire x1="35.433" y1="45.466" x2="31.623" y2="45.466" width="0.6096" layer="15"/>
+<wire x1="36.957" y1="43.942" x2="35.433" y2="45.466" width="0.6096" layer="15"/>
+<wire x1="49.276" y1="43.942" x2="36.957" y2="43.942" width="0.6096" layer="15"/>
+<wire x1="51.308" y1="41.91" x2="49.276" y2="43.942" width="0.6096" layer="15"/>
+<wire x1="61.722" y1="41.91" x2="51.308" y2="41.91" width="0.6096" layer="15"/>
+<wire x1="61.341" y1="41.529" x2="61.722" y2="41.91" width="0.6096" layer="16"/>
+<wire x1="61.341" y1="38.1" x2="61.341" y2="41.529" width="0.6096" layer="16"/>
+<wire x1="61.341" y1="38.1" x2="61.341" y2="20.574" width="0.6096" layer="16"/>
+<wire x1="63.119" y1="38.1" x2="61.341" y2="38.1" width="0.6096" layer="1"/>
+<wire x1="67.183" y1="38.1" x2="63.119" y2="38.1" width="0.6096" layer="1"/>
+<wire x1="69.723" y1="38.1" x2="67.183" y2="38.1" width="0.6096" layer="1"/>
+<wire x1="69.723" y1="22.225" x2="69.723" y2="38.1" width="0.6096" layer="16"/>
+<wire x1="69.723" y1="16.891" x2="69.723" y2="22.225" width="0.6096" layer="16"/>
+<wire x1="69.723" y1="9.017" x2="69.723" y2="16.891" width="0.6096" layer="16"/>
+<wire x1="69.088" y1="8.382" x2="69.723" y2="9.017" width="0.6096" layer="16"/>
+<wire x1="67.31" y1="8.382" x2="69.088" y2="8.382" width="0.6096" layer="16"/>
+<wire x1="67.461" y1="8.787" x2="67.461" y2="10.225" width="0.2032" layer="1"/>
+<wire x1="66.675" y1="8.001" x2="67.461" y2="8.787" width="0.2032" layer="1"/>
+<wire x1="66.929" y1="8.382" x2="67.31" y2="8.382" width="0.2032" layer="16"/>
+<wire x1="66.675" y1="8.001" x2="66.675" y2="8.128" width="0.2032" layer="16"/>
+<wire x1="66.675" y1="8.128" x2="66.929" y2="8.382" width="0.2032" layer="16"/>
+<wire x1="66.587" y1="6.731" x2="66.587" y2="7.913" width="0.2032" layer="1"/>
+<wire x1="66.587" y1="7.913" x2="66.675" y2="8.001" width="0.2032" layer="1"/>
+<wire x1="69.672" y1="17.475" x2="71.211" y2="17.475" width="0.2032" layer="1"/>
+<wire x1="69.596" y1="17.399" x2="69.672" y2="17.475" width="0.2032" layer="1"/>
+<wire x1="69.596" y1="17.018" x2="69.596" y2="17.399" width="0.2032" layer="16"/>
+<wire x1="69.723" y1="16.891" x2="69.596" y2="17.018" width="0.2032" layer="16"/>
+<wire x1="71.247" y1="17.399" x2="71.211" y2="17.363" width="0.2032" layer="1"/>
+<wire x1="71.211" y1="17.363" x2="71.211" y2="16.975" width="0.2032" layer="1"/>
+<wire x1="69.672" y1="17.475" x2="71.171" y2="17.475" width="0.2032" layer="1"/>
+<wire x1="71.171" y1="17.475" x2="71.247" y2="17.399" width="0.2032" layer="1"/>
+<wire x1="69.723" y1="22.225" x2="68.961" y2="22.225" width="0.2032" layer="1"/>
+<wire x1="67.222" y1="25.947" x2="67.31" y2="25.947" width="0.2032" layer="1"/>
+<wire x1="66.167" y1="24.892" x2="66.04" y2="24.765" width="0.2032" layer="1"/>
+<wire x1="66.167" y1="24.892" x2="67.222" y2="25.947" width="0.2032" layer="1"/>
+<wire x1="65.961" y1="22.225" x2="65.961" y2="24.686" width="0.2032" layer="1"/>
+<wire x1="65.961" y1="24.686" x2="66.167" y2="24.892" width="0.2032" layer="1"/>
+<wire x1="74.93" y1="46.101" x2="74.93" y2="46.609" width="0.2032" layer="1"/>
+<wire x1="73.66" y1="44.831" x2="74.93" y2="46.101" width="0.2032" layer="1"/>
+<wire x1="69.723" y1="38.1" x2="69.723" y2="37.973" width="0.2032" layer="1"/>
+<wire x1="73.66" y1="41.91" x2="73.66" y2="44.831" width="0.2032" layer="1"/>
+<wire x1="69.723" y1="37.973" x2="73.66" y2="41.91" width="0.2032" layer="1"/>
+<wire x1="63.158" y1="38.139" x2="63.158" y2="39.37" width="0.2032" layer="1"/>
+<wire x1="63.119" y1="38.1" x2="63.158" y2="38.139" width="0.2032" layer="1"/>
+<wire x1="67.183" y1="38.1" x2="67.183" y2="37.973" width="0.2032" layer="1"/>
+<wire x1="67.31" y1="37.846" x2="67.31" y2="34.251" width="0.2032" layer="1"/>
+<wire x1="67.183" y1="37.973" x2="67.31" y2="37.846" width="0.2032" layer="1"/>
+<wire x1="68.961" y1="22.225" x2="68.961" y2="20.066" width="0.2032" layer="1"/>
+<wire x1="68.961" y1="20.066" x2="68.453" y2="19.558" width="0.2032" layer="1"/>
+<wire x1="68.453" y1="19.558" x2="67.183" y2="19.558" width="0.2032" layer="1"/>
+<wire x1="65.961" y1="20.78" x2="65.961" y2="22.225" width="0.2032" layer="1"/>
+<wire x1="67.183" y1="19.558" x2="65.961" y2="20.78" width="0.2032" layer="1"/>
+<wire x1="66.587" y1="5.246" x2="66.587" y2="6.731" width="0.2032" layer="1"/>
+<wire x1="66.04" y1="4.699" x2="66.587" y2="5.246" width="0.2032" layer="1"/>
+<wire x1="62.23" y1="4.699" x2="66.04" y2="4.699" width="0.2032" layer="1"/>
+<wire x1="62.23" y1="4.699" x2="62.103" y2="4.699" width="0.2032" layer="1"/>
+<wire x1="61.131" y1="19.475" x2="59.211" y2="19.475" width="0.2032" layer="1"/>
+<wire x1="61.341" y1="19.685" x2="61.131" y2="19.475" width="0.2032" layer="1"/>
+<wire x1="61.341" y1="20.574" x2="61.341" y2="19.685" width="0.2032" layer="1"/>
+<wire x1="58.9153" y1="6.7437" x2="58.7883" y2="6.7437" width="0.2032" layer="1"/>
+<wire x1="60.833" y1="4.699" x2="62.23" y2="4.699" width="0.2032" layer="1"/>
+<wire x1="58.9153" y1="6.6167" x2="58.9153" y2="6.7437" width="0.2032" layer="1"/>
+<wire x1="60.833" y1="4.699" x2="58.9915" y2="6.5405" width="0.2032" layer="1"/>
+<wire x1="58.9915" y1="6.5405" x2="58.9153" y2="6.6167" width="0.2032" layer="1"/>
+<wire x1="58.9915" y1="6.5405" x2="58.928" y2="6.477" width="0.2032" layer="1"/>
+<wire x1="58.928" y1="6.477" x2="58.928" y2="6.6548" width="0.2032" layer="1"/>
+<wire x1="23.0378" y1="46.7868" x2="22.4028" y2="46.7868" width="0.4064" layer="1"/>
+<wire x1="22.4028" y1="46.7868" x2="21.209" y2="45.593" width="0.4064" layer="1"/>
+<wire x1="21.209" y1="45.593" x2="21.209" y2="45.085" width="0.4064" layer="1"/>
+<wire x1="21.209" y1="45.085" x2="20.955" y2="44.831" width="0.4064" layer="1"/>
+<wire x1="20.955" y1="44.831" x2="20.8788" y2="44.7548" width="0.4064" layer="1"/>
+<wire x1="20.6248" y1="44.5008" x2="20.3506" y2="44.5008" width="0.4064" layer="1"/>
+<wire x1="20.955" y1="44.831" x2="20.6248" y2="44.5008" width="0.4064" layer="1"/>
+<via x="31.623" y="45.466" extent="1-16" drill="0.4"/>
+<via x="61.722" y="41.91" extent="1-16" drill="0.4"/>
+<via x="61.341" y="38.1" extent="1-16" drill="0.4"/>
+<via x="69.723" y="38.1" extent="1-16" drill="0.4"/>
+<via x="66.675" y="8.001" extent="1-16" drill="0.4"/>
+<via x="69.596" y="17.399" extent="1-16" drill="0.4"/>
+<via x="69.723" y="22.225" extent="1-16" drill="0.4"/>
+<via x="61.341" y="20.574" extent="1-16" drill="0.4"/>
+</signal>
+<signal name="VDD">
+<contactref element="R9" pad="2"/>
+<contactref element="IC6" pad="4"/>
+<contactref element="IC8" pad="11"/>
+<contactref element="IC8" pad="13"/>
+<contactref element="IC8" pad="18"/>
+<contactref element="IC8" pad="15"/>
+<contactref element="IC8" pad="14"/>
+<contactref element="IC9" pad="20"/>
+<contactref element="IC10" pad="20"/>
+<contactref element="C21" pad="1"/>
+<contactref element="C24" pad="1"/>
+<contactref element="C23" pad="1"/>
+<contactref element="C22" pad="1"/>
+<contactref element="IC11" pad="14"/>
+<contactref element="IC5" pad="8"/>
+<contactref element="IC14" pad="8"/>
+<contactref element="RLY1" pad="1"/>
+<contactref element="D7" pad="3"/>
+<contactref element="C38" pad="+"/>
+<contactref element="C37" pad="+"/>
+<contactref element="R47" pad="1"/>
+<contactref element="C44" pad="1"/>
+<contactref element="C46" pad="1"/>
+<contactref element="R52" pad="2"/>
+<contactref element="IC12" pad="4"/>
+<contactref element="IC13" pad="1"/>
+<contactref element="Q2" pad="6"/>
+<contactref element="R58" pad="1"/>
+<wire x1="21.629" y1="27.432" x2="21.629" y2="28.155" width="0.2032" layer="1"/>
+<wire x1="21.629" y1="28.155" x2="21.209" y2="28.575" width="0.2032" layer="1"/>
+<wire x1="21.209" y1="29.083" x2="21.235" y2="29.083" width="0.2032" layer="1"/>
+<wire x1="21.209" y1="28.575" x2="21.209" y2="29.083" width="0.2032" layer="1"/>
+<wire x1="15.621" y1="44.069" x2="15.875" y2="43.815" width="0.6096" layer="15"/>
+<wire x1="15.875" y1="43.815" x2="24.511" y2="43.815" width="0.6096" layer="15"/>
+<wire x1="24.511" y1="43.815" x2="26.289" y2="42.037" width="0.6096" layer="15"/>
+<wire x1="26.289" y1="42.037" x2="29.464" y2="42.037" width="0.6096" layer="15"/>
+<wire x1="29.464" y1="42.037" x2="31.242" y2="43.815" width="0.6096" layer="15"/>
+<wire x1="31.242" y1="43.815" x2="34.544" y2="43.815" width="0.6096" layer="15"/>
+<wire x1="34.544" y1="43.815" x2="34.544" y2="37.465" width="0.6096" layer="16"/>
+<wire x1="38.608" y1="36.83" x2="38.735" y2="36.703" width="0.6096" layer="1"/>
+<wire x1="34.544" y1="37.465" x2="37.973" y2="37.465" width="0.6096" layer="1"/>
+<wire x1="37.973" y1="37.465" x2="38.608" y2="36.83" width="0.6096" layer="1"/>
+<wire x1="34.544" y1="35.687" x2="34.036" y2="35.179" width="0.6096" layer="1"/>
+<wire x1="34.544" y1="37.465" x2="34.544" y2="35.687" width="0.6096" layer="1"/>
+<wire x1="38.735" y1="36.703" x2="38.735" y2="37.211" width="0.6096" layer="1"/>
+<wire x1="38.735" y1="37.211" x2="38.862" y2="37.338" width="0.6096" layer="1"/>
+<wire x1="54.737" y1="35.814" x2="54.864" y2="35.941" width="0.6096" layer="1"/>
+<wire x1="54.864" y1="35.941" x2="55.035" y2="35.941" width="0.6096" layer="1"/>
+<wire x1="14.859" y1="44.069" x2="15.621" y2="44.069" width="0.4064" layer="16"/>
+<wire x1="12.192" y1="41.402" x2="14.859" y2="44.069" width="0.4064" layer="16"/>
+<wire x1="12.192" y1="34.925" x2="12.192" y2="40.386" width="0.4064" layer="16"/>
+<wire x1="12.192" y1="40.386" x2="12.192" y2="41.402" width="0.4064" layer="16"/>
+<wire x1="13.589" y1="33.528" x2="12.192" y2="34.925" width="0.4064" layer="16"/>
+<wire x1="13.589" y1="26.289" x2="13.589" y2="33.528" width="0.4064" layer="16"/>
+<wire x1="15.494" y1="24.384" x2="14.224" y2="25.654" width="0.4064" layer="16"/>
+<wire x1="14.224" y1="25.654" x2="13.589" y2="26.289" width="0.4064" layer="16"/>
+<wire x1="15.494" y1="13.589" x2="15.494" y2="24.384" width="0.4064" layer="16"/>
+<wire x1="13.843" y1="11.938" x2="15.494" y2="13.589" width="0.4064" layer="16"/>
+<wire x1="12.446" y1="11.811" x2="12.365" y2="11.892" width="0.4064" layer="1"/>
+<wire x1="12.365" y1="11.892" x2="12.573" y2="11.892" width="0.4064" layer="1"/>
+<wire x1="13.843" y1="11.938" x2="12.573" y2="11.938" width="0.4064" layer="1"/>
+<wire x1="12.573" y1="11.938" x2="12.446" y2="11.811" width="0.4064" layer="1"/>
+<wire x1="13.843" y1="4.953" x2="13.843" y2="11.938" width="0.4064" layer="1"/>
+<wire x1="13.843" y1="4.953" x2="15.367" y2="3.429" width="0.4064" layer="1"/>
+<wire x1="15.367" y1="3.429" x2="16.3957" y2="3.429" width="0.4064" layer="1"/>
+<wire x1="11.556" y1="40.639" x2="12.192" y2="40.639" width="0.4064" layer="1"/>
+<wire x1="11.303" y1="40.386" x2="11.556" y2="40.639" width="0.4064" layer="1"/>
+<wire x1="12.192" y1="40.386" x2="11.303" y2="40.386" width="0.4064" layer="16"/>
+<wire x1="14.351" y1="25.781" x2="13.589" y2="25.019" width="0.4064" layer="1"/>
+<wire x1="13.423" y1="23.837" x2="13.335" y2="23.749" width="0.4064" layer="1"/>
+<wire x1="13.423" y1="23.837" x2="13.589" y2="23.837" width="0.4064" layer="1"/>
+<wire x1="13.589" y1="25.019" x2="13.589" y2="24.003" width="0.4064" layer="1"/>
+<wire x1="13.589" y1="24.003" x2="13.423" y2="23.837" width="0.4064" layer="1"/>
+<wire x1="13.589" y1="23.837" x2="13.589" y2="23.749" width="0.4064" layer="1"/>
+<wire x1="13.589" y1="23.749" x2="14.478" y2="23.749" width="0.4064" layer="1"/>
+<wire x1="14.859" y1="44.069" x2="18.034" y2="44.069" width="0.4064" layer="16"/>
+<wire x1="18.034" y1="44.069" x2="18.796" y2="44.069" width="0.4064" layer="16"/>
+<wire x1="18.796" y1="44.069" x2="19.177" y2="43.688" width="0.4064" layer="16"/>
+<wire x1="19.177" y1="43.688" x2="19.177" y2="38.989" width="0.4064" layer="16"/>
+<wire x1="19.177" y1="38.989" x2="19.177" y2="37.973" width="0.4064" layer="16"/>
+<wire x1="19.177" y1="37.973" x2="20.447" y2="36.703" width="0.4064" layer="16"/>
+<wire x1="20.447" y1="36.703" x2="20.447" y2="26.416" width="0.4064" layer="16"/>
+<wire x1="20.447" y1="26.416" x2="20.447" y2="11.811" width="0.4064" layer="16"/>
+<wire x1="20.447" y1="11.811" x2="22.86" y2="9.398" width="0.4064" layer="16"/>
+<wire x1="22.86" y1="9.398" x2="22.86" y2="8.255" width="0.4064" layer="16"/>
+<wire x1="22.86" y1="8.255" x2="23.495" y2="8.255" width="0.4064" layer="16"/>
+<wire x1="23.495" y1="8.255" x2="23.876" y2="8.255" width="0.4064" layer="1"/>
+<wire x1="23.876" y1="8.255" x2="24.003" y2="8.382" width="0.4064" layer="1"/>
+<wire x1="24.003" y1="8.382" x2="24.003" y2="9.437" width="0.4064" layer="1"/>
+<wire x1="27.477" y1="9.988" x2="27.477" y2="8.763" width="0.4064" layer="1"/>
+<wire x1="27.178" y1="10.287" x2="27.477" y2="9.988" width="0.4064" layer="1"/>
+<wire x1="24.003" y1="9.437" x2="24.169" y2="9.437" width="0.4064" layer="1"/>
+<wire x1="25.019" y1="10.287" x2="27.178" y2="10.287" width="0.4064" layer="1"/>
+<wire x1="24.169" y1="9.437" x2="25.019" y2="10.287" width="0.4064" layer="1"/>
+<wire x1="20.447" y1="26.416" x2="21.463" y2="26.416" width="0.4064" layer="16"/>
+<wire x1="21.629" y1="27.344" x2="21.629" y2="27.432" width="0.4064" layer="1"/>
+<wire x1="21.463" y1="26.416" x2="21.463" y2="27.178" width="0.4064" layer="1"/>
+<wire x1="21.463" y1="27.178" x2="21.629" y2="27.344" width="0.4064" layer="1"/>
+<wire x1="28.702" y1="23.749" x2="28.702" y2="23.837" width="0.4064" layer="1"/>
+<wire x1="21.463" y1="26.416" x2="26.035" y2="26.416" width="0.4064" layer="1"/>
+<wire x1="26.035" y1="26.416" x2="28.702" y2="23.749" width="0.4064" layer="1"/>
+<wire x1="28.702" y1="23.837" x2="28.79" y2="23.837" width="0.4064" layer="1"/>
+<wire x1="29.082" y1="24.129" x2="30.099" y2="24.129" width="0.4064" layer="1"/>
+<wire x1="28.79" y1="23.837" x2="29.082" y2="24.129" width="0.4064" layer="1"/>
+<wire x1="19.05" y1="39.243" x2="19.05" y2="40.639" width="0.2032" layer="1"/>
+<wire x1="19.05" y1="39.116" x2="19.05" y2="39.243" width="0.2032" layer="16"/>
+<wire x1="19.177" y1="38.989" x2="19.05" y2="39.116" width="0.2032" layer="16"/>
+<wire x1="47.965" y1="29.251" x2="47.965" y2="30.632" width="0.2032" layer="1"/>
+<wire x1="48.387" y1="28.829" x2="47.965" y2="29.251" width="0.2032" layer="1"/>
+<wire x1="49.657" y1="28.829" x2="48.387" y2="28.829" width="0.2032" layer="1"/>
+<wire x1="49.911" y1="29.083" x2="49.657" y2="28.829" width="0.2032" layer="1"/>
+<wire x1="49.915" y1="30.611" x2="49.911" y2="30.607" width="0.2032" layer="1"/>
+<wire x1="49.915" y1="30.632" x2="49.915" y2="30.611" width="0.2032" layer="1"/>
+<wire x1="49.911" y1="30.607" x2="49.911" y2="29.083" width="0.2032" layer="1"/>
+<wire x1="50.565" y1="30.632" x2="49.915" y2="30.632" width="0.2032" layer="1"/>
+<wire x1="50.565" y1="30.632" x2="50.648" y2="30.632" width="0.2032" layer="1"/>
+<wire x1="50.648" y1="30.632" x2="50.673" y2="30.607" width="0.2032" layer="1"/>
+<wire x1="51.181" y1="30.607" x2="51.206" y2="30.632" width="0.2032" layer="1"/>
+<wire x1="51.206" y1="30.632" x2="51.215" y2="30.632" width="0.2032" layer="1"/>
+<wire x1="50.565" y1="30.632" x2="51.156" y2="30.632" width="0.2032" layer="1"/>
+<wire x1="51.156" y1="30.632" x2="51.181" y2="30.607" width="0.2032" layer="1"/>
+<wire x1="50.565" y1="30.632" x2="50.565" y2="24.232" width="0.2032" layer="1"/>
+<wire x1="50.565" y1="30.632" x2="50.565" y2="30.715" width="0.2032" layer="1"/>
+<wire x1="50.565" y1="30.715" x2="50.546" y2="30.734" width="0.2032" layer="1"/>
+<wire x1="40.3098" y1="27.5082" x2="40.767" y2="27.051" width="0.2032" layer="1"/>
+<wire x1="40.767" y1="27.051" x2="40.767" y2="25.146" width="0.2032" layer="1"/>
+<wire x1="42.506" y1="23.661" x2="42.545" y2="23.622" width="0.2032" layer="1"/>
+<wire x1="42.418" y1="23.661" x2="42.506" y2="23.661" width="0.2032" layer="1"/>
+<wire x1="37.084" y1="31.369" x2="37.846" y2="30.607" width="0.6096" layer="1"/>
+<wire x1="37.846" y1="30.607" x2="37.846" y2="29.972" width="0.6096" layer="1"/>
+<wire x1="37.846" y1="29.972" x2="37.846" y2="27.94" width="0.2032" layer="1"/>
+<wire x1="37.846" y1="27.94" x2="38.227" y2="27.559" width="0.2032" layer="1"/>
+<wire x1="39.243" y1="27.559" x2="39.2684" y2="27.5336" width="0.2032" layer="1"/>
+<wire x1="38.989" y1="27.559" x2="39.243" y2="27.559" width="0.2032" layer="1"/>
+<wire x1="38.227" y1="27.559" x2="38.989" y2="27.559" width="0.2032" layer="1"/>
+<wire x1="51.982" y1="32.219" x2="52.07" y2="32.131" width="0.2032" layer="1"/>
+<wire x1="51.982" y1="32.219" x2="51.982" y2="32.258" width="0.2032" layer="1"/>
+<wire x1="42.545" y1="23.495" x2="42.545" y2="23.534" width="0.2032" layer="1"/>
+<wire x1="42.545" y1="23.534" x2="42.418" y2="23.661" width="0.2032" layer="1"/>
+<wire x1="40.767" y1="25.146" x2="42.418" y2="23.495" width="0.2032" layer="1"/>
+<wire x1="42.418" y1="23.495" x2="42.545" y2="23.495" width="0.2032" layer="1"/>
+<wire x1="37.084" y1="34.417" x2="37.084" y2="31.369" width="0.6096" layer="1"/>
+<wire x1="38.354" y1="35.687" x2="37.084" y2="34.417" width="0.6096" layer="1"/>
+<wire x1="38.608" y1="36.83" x2="38.608" y2="36.874" width="0.6096" layer="1"/>
+<wire x1="38.354" y1="36.576" x2="38.354" y2="35.687" width="0.6096" layer="1"/>
+<wire x1="38.608" y1="36.83" x2="38.354" y2="36.576" width="0.6096" layer="1"/>
+<wire x1="38.862" y1="37.338" x2="41.021" y2="37.338" width="0.6096" layer="1"/>
+<wire x1="41.021" y1="37.338" x2="42.164" y2="36.195" width="0.6096" layer="1"/>
+<wire x1="42.164" y1="36.195" x2="50.546" y2="36.195" width="0.6096" layer="1"/>
+<wire x1="50.546" y1="36.195" x2="50.8" y2="35.941" width="0.6096" layer="1"/>
+<wire x1="50.8" y1="35.941" x2="50.8" y2="34.544" width="0.6096" layer="1"/>
+<wire x1="50.8" y1="34.544" x2="50.927" y2="34.417" width="0.6096" layer="1"/>
+<wire x1="50.927" y1="34.417" x2="50.927" y2="32.258" width="0.2032" layer="1"/>
+<wire x1="50.927" y1="32.258" x2="50.927" y2="31.877" width="0.2032" layer="1"/>
+<wire x1="50.927" y1="31.877" x2="50.546" y2="31.496" width="0.2032" layer="1"/>
+<wire x1="50.546" y1="30.607" x2="50.565" y2="30.626" width="0.2032" layer="1"/>
+<wire x1="50.565" y1="30.626" x2="50.565" y2="30.632" width="0.2032" layer="1"/>
+<wire x1="50.546" y1="31.496" x2="50.546" y2="30.607" width="0.2032" layer="1"/>
+<wire x1="50.8" y1="34.544" x2="49.618" y2="34.544" width="0.2032" layer="1"/>
+<wire x1="50.927" y1="32.219" x2="51.982" y2="32.219" width="0.2032" layer="1"/>
+<wire x1="50.927" y1="32.258" x2="50.927" y2="32.219" width="0.2032" layer="1"/>
+<wire x1="54.483" y1="35.814" x2="54.737" y2="35.814" width="0.6096" layer="1"/>
+<wire x1="54.483" y1="36.068" x2="54.483" y2="35.814" width="0.6096" layer="1"/>
+<wire x1="50.8" y1="36.068" x2="54.483" y2="36.068" width="0.6096" layer="1"/>
+<wire x1="50.8" y1="35.941" x2="50.8" y2="36.068" width="0.6096" layer="1"/>
+<wire x1="14.478" y1="23.749" x2="15.494" y2="24.765" width="0.4064" layer="1"/>
+<wire x1="15.494" y1="24.765" x2="16.256" y2="24.765" width="0.4064" layer="1"/>
+<wire x1="16.423" y1="24.765" x2="16.424" y2="24.764" width="0.2032" layer="1"/>
+<wire x1="16.256" y1="24.765" x2="16.423" y2="24.765" width="0.2032" layer="1"/>
+<wire x1="14.224" y1="25.654" x2="14.351" y2="25.781" width="0.2032" layer="16"/>
+<wire x1="15.455" y1="43.903" x2="15.455" y2="42.799" width="0.4064" layer="1"/>
+<wire x1="15.621" y1="44.069" x2="15.455" y2="43.903" width="0.4064" layer="1"/>
+<wire x1="18.034" y1="47.371" x2="19.685" y2="47.371" width="0.4064" layer="1"/>
+<wire x1="17.653" y1="46.99" x2="18.034" y2="47.371" width="0.4064" layer="1"/>
+<wire x1="18.034" y1="46.609" x2="17.653" y2="46.99" width="0.4064" layer="16"/>
+<wire x1="18.034" y1="44.069" x2="18.034" y2="46.609" width="0.4064" layer="16"/>
+<wire x1="34.036" y1="35.179" x2="33.147" y2="35.179" width="0.6096" layer="1"/>
+<wire x1="39.2684" y1="27.5082" x2="39.1922" y2="27.5082" width="0.2032" layer="1"/>
+<wire x1="39.2684" y1="27.5082" x2="40.3098" y2="27.5082" width="0.2032" layer="1"/>
+<wire x1="39.1922" y1="27.5082" x2="39.116" y2="27.432" width="0.2032" layer="1"/>
+<wire x1="38.989" y1="27.559" x2="38.989" y2="27.432" width="0.2032" layer="1"/>
+<wire x1="39.0652" y1="27.5082" x2="39.2684" y2="27.5082" width="0.2032" layer="1"/>
+<wire x1="38.989" y1="27.432" x2="39.0652" y2="27.5082" width="0.2032" layer="1"/>
+<wire x1="17.653" y1="49.53" x2="17.438" y2="49.745" width="0.4064" layer="1"/>
+<wire x1="17.653" y1="46.99" x2="17.653" y2="49.53" width="0.4064" layer="1"/>
+<wire x1="16.637" y1="49.657" x2="16.637" y2="49.618" width="0.4064" layer="1"/>
+<wire x1="17.438" y1="49.745" x2="16.725" y2="49.745" width="0.4064" layer="1"/>
+<wire x1="16.725" y1="49.745" x2="16.637" y2="49.657" width="0.4064" layer="1"/>
+<wire x1="29.337" y1="3.429" x2="29.337" y2="4.484" width="0.4064" layer="1"/>
+<wire x1="22.86" y1="8.255" x2="22.86" y2="2.413" width="0.4064" layer="16"/>
+<wire x1="22.86" y1="2.413" x2="24.257" y2="1.016" width="0.4064" layer="16"/>
+<wire x1="24.257" y1="1.016" x2="28.575" y2="1.016" width="0.4064" layer="16"/>
+<wire x1="28.575" y1="1.016" x2="29.21" y2="1.651" width="0.4064" layer="16"/>
+<wire x1="29.337" y1="3.302" x2="29.337" y2="3.429" width="0.4064" layer="16"/>
+<wire x1="29.21" y1="1.651" x2="29.21" y2="3.175" width="0.4064" layer="16"/>
+<wire x1="29.21" y1="3.175" x2="29.337" y2="3.302" width="0.4064" layer="16"/>
+<via x="15.621" y="44.069" extent="1-16" drill="0.4"/>
+<via x="34.544" y="43.815" extent="1-16" drill="0.4"/>
+<via x="34.544" y="37.465" extent="1-16" drill="0.4"/>
+<via x="13.843" y="11.938" extent="1-16" drill="0.4"/>
+<via x="11.303" y="40.386" extent="1-16" drill="0.4"/>
+<via x="14.351" y="25.781" extent="1-16" drill="0.4"/>
+<via x="29.337" y="3.429" extent="1-16" drill="0.4"/>
+<via x="23.495" y="8.255" extent="1-16" drill="0.4"/>
+<via x="21.463" y="26.416" extent="1-16" drill="0.4"/>
+<via x="19.05" y="39.243" extent="1-16" drill="0.4"/>
+<via x="17.653" y="46.99" extent="1-16" drill="0.4"/>
+</signal>
+<signal name="N$4">
+<contactref element="IC4" pad="2"/>
+<contactref element="XT1" pad="A"/>
+<contactref element="R1" pad="1"/>
+<contactref element="C2" pad="1"/>
+<wire x1="76.327" y1="6.985" x2="76.146" y2="6.985" width="0.2032" layer="1"/>
+<wire x1="77.216" y1="6.096" x2="76.327" y2="6.985" width="0.2032" layer="1"/>
+<wire x1="78.398" y1="6.008" x2="78.359" y2="5.969" width="0.2032" layer="1"/>
+<wire x1="78.486" y1="6.008" x2="78.398" y2="6.008" width="0.2032" layer="1"/>
+<wire x1="78.232" y1="6.096" x2="77.216" y2="6.096" width="0.2032" layer="1"/>
+<wire x1="78.359" y1="5.969" x2="78.232" y2="6.096" width="0.2032" layer="1"/>
+<wire x1="79.336" y1="6.008" x2="78.486" y2="6.008" width="0.2032" layer="1"/>
+<wire x1="79.629" y1="5.715" x2="79.336" y2="6.008" width="0.2032" layer="1"/>
+<wire x1="79.629" y1="2.921" x2="79.629" y2="5.715" width="0.2032" layer="1"/>
+<wire x1="79.248" y1="2.54" x2="79.629" y2="2.921" width="0.2032" layer="1"/>
+<wire x1="78.398" y1="2.579" x2="78.359" y2="2.54" width="0.2032" layer="1"/>
+<wire x1="78.486" y1="2.579" x2="78.398" y2="2.579" width="0.2032" layer="1"/>
+<wire x1="78.359" y1="2.54" x2="79.248" y2="2.54" width="0.2032" layer="1"/>
+<wire x1="78.486" y1="2.579" x2="78.447" y2="2.579" width="0.2032" layer="1"/>
+<wire x1="78.486" y1="2.667" x2="78.486" y2="2.579" width="0.2032" layer="1"/>
+<wire x1="76.073" y1="2.982" x2="78.171" y2="2.982" width="0.2032" layer="1"/>
+<wire x1="78.171" y1="2.982" x2="78.486" y2="2.667" width="0.2032" layer="1"/>
+</signal>
+<signal name="N$5">
+<contactref element="XT1" pad="B"/>
+<contactref element="IC1" pad="91"/>
+<contactref element="R1" pad="2"/>
+<contactref element="C3" pad="1"/>
+<contactref element="R2" pad="2"/>
+<contactref element="IC1" pad="93"/>
+<wire x1="71.246" y1="6.985" x2="72.771" y2="6.985" width="0.2032" layer="1"/>
+<wire x1="72.771" y1="6.985" x2="74.549" y2="8.763" width="0.2032" layer="1"/>
+<wire x1="74.549" y1="8.763" x2="78.105" y2="8.763" width="0.2032" layer="1"/>
+<wire x1="78.105" y1="8.763" x2="78.486" y2="8.382" width="0.2032" layer="1"/>
+<wire x1="78.486" y1="8.382" x2="78.486" y2="7.708" width="0.2032" layer="1"/>
+<wire x1="71.246" y1="6.985" x2="71.246" y2="6.857" width="0.2032" layer="1"/>
+<wire x1="71.246" y1="6.857" x2="70.485" y2="6.096" width="0.2032" layer="1"/>
+<wire x1="70.231" y1="4.191" x2="70.27" y2="4.191" width="0.2032" layer="1"/>
+<wire x1="70.485" y1="6.096" x2="70.485" y2="4.445" width="0.2032" layer="1"/>
+<wire x1="70.485" y1="4.445" x2="70.231" y2="4.191" width="0.2032" layer="1"/>
+<wire x1="70.231" y1="2.413" x2="70.27" y2="2.413" width="0.2032" layer="1"/>
+<wire x1="70.27" y1="4.191" x2="70.27" y2="2.452" width="0.2032" layer="1"/>
+<wire x1="70.27" y1="2.452" x2="70.231" y2="2.413" width="0.2032" layer="1"/>
+<wire x1="37.72" y1="10.311" x2="40.235" y2="10.311" width="0.2032" layer="1"/>
+<wire x1="40.235" y1="10.311" x2="40.513" y2="10.033" width="0.2032" layer="1"/>
+<wire x1="40.513" y1="10.033" x2="41.656" y2="8.89" width="0.2032" layer="15"/>
+<wire x1="41.656" y1="8.89" x2="43.688" y2="8.89" width="0.2032" layer="15"/>
+<wire x1="43.688" y1="8.89" x2="44.45" y2="8.128" width="0.2032" layer="15"/>
+<wire x1="44.45" y1="8.128" x2="47.371" y2="8.128" width="0.2032" layer="15"/>
+<wire x1="64.262" y1="9.017" x2="64.389" y2="9.144" width="0.2032" layer="15"/>
+<wire x1="64.389" y1="9.144" x2="66.548" y2="9.144" width="0.2032" layer="15"/>
+<wire x1="66.548" y1="9.144" x2="66.802" y2="8.89" width="0.2032" layer="15"/>
+<wire x1="66.802" y1="8.89" x2="71.501" y2="8.89" width="0.2032" layer="15"/>
+<wire x1="71.501" y1="7.112" x2="71.373" y2="7.112" width="0.2032" layer="1"/>
+<wire x1="71.373" y1="7.112" x2="71.246" y2="6.985" width="0.2032" layer="1"/>
+<wire x1="71.501" y1="8.89" x2="71.501" y2="7.112" width="0.2032" layer="1"/>
+<wire x1="51.562" y1="9.144" x2="51.943" y2="8.763" width="0.2032" layer="15"/>
+<wire x1="51.943" y1="8.763" x2="54.737" y2="8.763" width="0.2032" layer="15"/>
+<wire x1="54.737" y1="8.763" x2="54.991" y2="9.017" width="0.2032" layer="15"/>
+<wire x1="54.991" y1="9.017" x2="64.262" y2="9.017" width="0.2032" layer="15"/>
+<wire x1="48.387" y1="9.144" x2="51.562" y2="9.144" width="0.2032" layer="15"/>
+<wire x1="47.371" y1="8.128" x2="48.387" y2="9.144" width="0.2032" layer="15"/>
+<wire x1="36.576" y1="10.311" x2="37.72" y2="10.311" width="0.2032" layer="1"/>
+<wire x1="37.72" y1="9.311" x2="36.576" y2="9.311" width="0.2032" layer="1"/>
+<wire x1="36.576" y1="9.311" x2="36.576" y2="10.311" width="0.2032" layer="1"/>
+<via x="40.513" y="10.033" extent="1-16" drill="0.4"/>
+<via x="71.501" y="8.89" extent="1-16" drill="0.4"/>
+</signal>
+<signal name="N$3">
+<contactref element="R2" pad="1"/>
+<contactref element="IC4" pad="4"/>
+<wire x1="71.97" y1="4.152" x2="71.882" y2="4.064" width="0.2032" layer="1"/>
+<wire x1="71.97" y1="4.191" x2="71.97" y2="4.152" width="0.2032" layer="1"/>
+<wire x1="71.97" y1="4.152" x2="72.004" y2="4.186" width="0.2032" layer="1"/>
+<wire x1="71.97" y1="4.191" x2="71.882" y2="4.191" width="0.2032" layer="1"/>
+<wire x1="72.141" y1="3.932" x2="73.873" y2="3.932" width="0.2032" layer="1"/>
+<wire x1="71.882" y1="4.191" x2="72.141" y2="3.932" width="0.2032" layer="1"/>
+</signal>
+<signal name="N$2">
+<contactref element="C5" pad="2"/>
+<contactref element="IC2" pad="63"/>
+<contactref element="R3" pad="2"/>
+<wire x1="71.211" y1="19.475" x2="72.561" y2="19.475" width="0.2032" layer="1"/>
+<wire x1="72.561" y1="19.475" x2="73.025" y2="19.939" width="0.2032" layer="1"/>
+<wire x1="73.025" y1="22.264" x2="73.025" y2="22.352" width="0.2032" layer="1"/>
+<wire x1="73.025" y1="19.939" x2="73.025" y2="22.225" width="0.2032" layer="1"/>
+<wire x1="73.025" y1="22.225" x2="73.025" y2="22.264" width="0.2032" layer="1"/>
+<wire x1="72.898" y1="22.352" x2="72.263" y2="22.352" width="0.2032" layer="1"/>
+<wire x1="73.025" y1="22.225" x2="72.898" y2="22.352" width="0.2032" layer="1"/>
+<wire x1="71.374" y1="25.527" x2="71.374" y2="25.566" width="0.2032" layer="1"/>
+<wire x1="72.009" y1="24.892" x2="71.374" y2="25.527" width="0.2032" layer="1"/>
+<wire x1="72.009" y1="22.606" x2="72.009" y2="24.892" width="0.2032" layer="1"/>
+<wire x1="72.263" y1="22.352" x2="72.009" y2="22.606" width="0.2032" layer="1"/>
+</signal>
+<signal name="N$6">
+<contactref element="R3" pad="1"/>
+<contactref element="C4" pad="2"/>
+<wire x1="73.025" y1="23.964" x2="73.025" y2="25.566" width="0.2032" layer="1"/>
+</signal>
+<signal name="N$7">
+<contactref element="IC2" pad="61"/>
+<contactref element="XT2" pad="B"/>
+<contactref element="C6" pad="2"/>
+<wire x1="75.947" y1="16.763" x2="76.073" y2="16.637" width="0.2032" layer="1"/>
+<wire x1="76.073" y1="16.763" x2="75.947" y2="16.763" width="0.2032" layer="1"/>
+<wire x1="76.073" y1="16.763" x2="76.073" y2="16.764" width="0.2032" layer="1"/>
+<wire x1="74.362" y1="18.475" x2="71.211" y2="18.475" width="0.2032" layer="1"/>
+<wire x1="76.073" y1="16.764" x2="74.362" y2="18.475" width="0.2032" layer="1"/>
+<wire x1="79.375" y1="16.764" x2="79.375" y2="16.676" width="0.2032" layer="1"/>
+<wire x1="76.073" y1="16.763" x2="79.374" y2="16.763" width="0.2032" layer="1"/>
+<wire x1="79.374" y1="16.763" x2="79.375" y2="16.764" width="0.2032" layer="1"/>
+</signal>
+<signal name="N$8">
+<contactref element="C7" pad="2"/>
+<contactref element="XT2" pad="A"/>
+<contactref element="IC2" pad="62"/>
+<wire x1="71.211" y1="18.975" x2="73.331" y2="18.975" width="0.2032" layer="1"/>
+<wire x1="73.331" y1="18.975" x2="75.565" y2="21.209" width="0.2032" layer="1"/>
+<wire x1="76.073" y1="21.59" x2="76.073" y2="21.663" width="0.2032" layer="1"/>
+<wire x1="75.565" y1="21.209" x2="75.692" y2="21.209" width="0.2032" layer="1"/>
+<wire x1="75.692" y1="21.209" x2="76.073" y2="21.59" width="0.2032" layer="1"/>
+<wire x1="79.375" y1="21.59" x2="79.375" y2="21.297" width="0.2032" layer="1"/>
+<wire x1="76.073" y1="21.663" x2="79.302" y2="21.663" width="0.2032" layer="1"/>
+<wire x1="79.302" y1="21.663" x2="79.375" y2="21.59" width="0.2032" layer="1"/>
+</signal>
+<signal name="N$11">
+<contactref element="R4" pad="2"/>
+<contactref element="IC2" pad="56"/>
+<wire x1="74.842" y1="11.049" x2="74.842" y2="11.137" width="0.2032" layer="1"/>
+<wire x1="74.842" y1="11.137" x2="73.787" y2="12.192" width="0.2032" layer="1"/>
+<wire x1="73.787" y1="12.192" x2="73.787" y2="14.732" width="0.2032" layer="1"/>
+<wire x1="72.544" y1="15.975" x2="71.211" y2="15.975" width="0.2032" layer="1"/>
+<wire x1="73.787" y1="14.732" x2="72.544" y2="15.975" width="0.2032" layer="1"/>
+</signal>
+<signal name="N$12">
+<contactref element="IC2" pad="57"/>
+<contactref element="R5" pad="2"/>
+<contactref element="R6" pad="1"/>
+<wire x1="74.93" y1="12.7" x2="74.842" y2="12.7" width="0.2032" layer="1"/>
+<wire x1="74.842" y1="14.351" x2="74.842" y2="12.788" width="0.2032" layer="1"/>
+<wire x1="74.842" y1="12.788" x2="74.93" y2="12.7" width="0.2032" layer="1"/>
+<wire x1="74.842" y1="14.312" x2="74.93" y2="14.224" width="0.2032" layer="1"/>
+<wire x1="74.842" y1="14.351" x2="74.842" y2="14.312" width="0.2032" layer="1"/>
+<wire x1="72.679" y1="16.475" x2="71.211" y2="16.475" width="0.2032" layer="1"/>
+<wire x1="74.842" y1="14.312" x2="72.679" y2="16.475" width="0.2032" layer="1"/>
+</signal>
+<signal name="USB_PU">
+<contactref element="R6" pad="2"/>
+<contactref element="IC2" pad="23"/>
+<wire x1="59.211" y1="16.975" x2="60.79" y2="16.975" width="0.2032" layer="1"/>
+<wire x1="60.79" y1="16.975" x2="61.341" y2="17.526" width="0.2032" layer="1"/>
+<wire x1="76.542" y1="14.351" x2="76.454" y2="14.351" width="0.2032" layer="1"/>
+<wire x1="78.232" y1="14.351" x2="76.542" y2="14.351" width="0.2032" layer="1"/>
+<wire x1="61.341" y1="17.526" x2="66.167" y2="17.526" width="0.2032" layer="15"/>
+<wire x1="66.167" y1="17.526" x2="67.691" y2="16.002" width="0.2032" layer="15"/>
+<wire x1="67.691" y1="16.002" x2="77.089" y2="16.002" width="0.2032" layer="15"/>
+<wire x1="77.089" y1="16.002" x2="77.47" y2="16.383" width="0.2032" layer="15"/>
+<wire x1="77.47" y1="16.383" x2="78.486" y2="16.383" width="0.2032" layer="15"/>
+<wire x1="78.486" y1="16.383" x2="79.121" y2="15.748" width="0.2032" layer="15"/>
+<wire x1="79.121" y1="15.748" x2="79.121" y2="15.24" width="0.2032" layer="15"/>
+<wire x1="79.121" y1="15.24" x2="78.232" y2="14.351" width="0.2032" layer="15"/>
+<via x="61.341" y="17.526" extent="1-16" drill="0.4"/>
+<via x="78.232" y="14.351" extent="1-16" drill="0.4"/>
+</signal>
+<signal name="N$10">
+<contactref element="IC2" pad="64"/>
+<contactref element="IC2" pad="8"/>
+<contactref element="IC2" pad="54"/>
+<contactref element="IC2" pad="24"/>
+<contactref element="IC2" pad="12"/>
+<contactref element="C9" pad="1"/>
+<contactref element="C8" pad="1"/>
+<wire x1="65.405" y1="25.781" x2="65.532" y2="25.908" width="0.2032" layer="1"/>
+<wire x1="65.254" y1="25.932" x2="65.405" y2="25.781" width="0.2032" layer="1"/>
+<wire x1="65.532" y1="25.908" x2="65.532" y2="25.947" width="0.2032" layer="1"/>
+<wire x1="65.461" y1="25.837" x2="65.461" y2="22.225" width="0.2032" layer="1"/>
+<wire x1="65.532" y1="25.908" x2="65.461" y2="25.837" width="0.2032" layer="1"/>
+<wire x1="63.461" y1="17.995" x2="63.461" y2="22.225" width="0.2032" layer="1"/>
+<wire x1="59.211" y1="16.475" x2="61.941" y2="16.475" width="0.2032" layer="1"/>
+<wire x1="61.941" y1="16.475" x2="63.461" y2="17.995" width="0.2032" layer="1"/>
+<wire x1="65.659" y1="20.447" x2="65.532" y2="20.574" width="0.2032" layer="1"/>
+<wire x1="65.461" y1="22.225" x2="65.461" y2="20.645" width="0.2032" layer="1"/>
+<wire x1="65.461" y1="20.645" x2="65.659" y2="20.447" width="0.2032" layer="1"/>
+<wire x1="68.845" y1="14.975" x2="71.211" y2="14.975" width="0.2032" layer="1"/>
+<wire x1="68.072" y1="15.748" x2="68.845" y2="14.975" width="0.2032" layer="1"/>
+<wire x1="68.072" y1="18.542" x2="68.072" y2="15.748" width="0.2032" layer="1"/>
+<wire x1="65.659" y1="20.447" x2="67.564" y2="18.542" width="0.2032" layer="1"/>
+<wire x1="67.564" y1="18.542" x2="68.072" y2="18.542" width="0.2032" layer="1"/>
+<wire x1="69.505" y1="19.975" x2="71.211" y2="19.975" width="0.2032" layer="1"/>
+<wire x1="68.072" y1="18.542" x2="69.505" y2="19.975" width="0.2032" layer="1"/>
+<wire x1="63.524" y1="25.932" x2="65.254" y2="25.932" width="0.2032" layer="1"/>
+<wire x1="63.461" y1="26.074" x2="63.524" y2="26.011" width="0.2032" layer="1"/>
+<wire x1="63.524" y1="26.011" x2="63.524" y2="25.932" width="0.2032" layer="1"/>
+<wire x1="63.461" y1="22.225" x2="63.461" y2="23.407" width="0.2032" layer="1"/>
+<wire x1="63.461" y1="23.407" x2="63.119" y2="23.749" width="0.2032" layer="1"/>
+<wire x1="63.119" y1="23.749" x2="63.119" y2="25.019" width="0.2032" layer="1"/>
+<wire x1="63.119" y1="25.019" x2="63.461" y2="25.361" width="0.2032" layer="1"/>
+<wire x1="63.461" y1="25.361" x2="63.461" y2="26.074" width="0.2032" layer="1"/>
+<wire x1="63.461" y1="26.074" x2="63.373" y2="26.162" width="0.2032" layer="1"/>
+<wire x1="63.016" y1="25.932" x2="62.992" y2="25.908" width="0.2032" layer="1"/>
+<wire x1="63.016" y1="25.932" x2="63.095" y2="25.932" width="0.2032" layer="1"/>
+<wire x1="63.373" y1="26.162" x2="63.246" y2="26.162" width="0.2032" layer="1"/>
+<wire x1="63.246" y1="26.162" x2="63.016" y2="25.932" width="0.2032" layer="1"/>
+<wire x1="63.095" y1="25.932" x2="63.119" y2="25.908" width="0.2032" layer="1"/>
+<wire x1="62.865" y1="26.162" x2="62.865" y2="26.44" width="0.2032" layer="1"/>
+<wire x1="63.095" y1="25.932" x2="62.865" y2="26.162" width="0.2032" layer="1"/>
+</signal>
+<signal name="ARM_TMS">
+<contactref element="IC2" pad="51"/>
+<contactref element="SV3" pad="7"/>
+<wire x1="67.31" y1="46.355" x2="67.31" y2="46.609" width="0.2032" layer="1"/>
+<wire x1="66.04" y1="45.085" x2="67.31" y2="46.355" width="0.2032" layer="1"/>
+<wire x1="66.04" y1="43.307" x2="66.04" y2="45.085" width="0.2032" layer="1"/>
+<wire x1="67.183" y1="42.164" x2="66.04" y2="43.307" width="0.2032" layer="1"/>
+<wire x1="68.072" y1="41.275" x2="67.183" y2="42.164" width="0.2032" layer="16"/>
+<wire x1="68.072" y1="14.351" x2="68.072" y2="41.275" width="0.2032" layer="16"/>
+<wire x1="67.564" y1="13.843" x2="68.072" y2="14.351" width="0.2032" layer="16"/>
+<wire x1="67.183" y1="13.843" x2="67.564" y2="13.843" width="0.2032" layer="16"/>
+<wire x1="67.551" y1="13.475" x2="71.211" y2="13.475" width="0.2032" layer="1"/>
+<wire x1="67.183" y1="13.843" x2="67.551" y2="13.475" width="0.2032" layer="1"/>
+<via x="67.183" y="42.164" extent="1-16" drill="0.4"/>
+<via x="67.183" y="13.843" extent="1-16" drill="0.4"/>
+</signal>
+<signal name="ARM_TCK">
+<contactref element="IC2" pad="53"/>
+<contactref element="SV3" pad="9"/>
+<contactref element="R7" pad="1"/>
+<wire x1="65.278" y1="46.609" x2="64.77" y2="46.609" width="0.2032" layer="16"/>
+<wire x1="66.04" y1="45.847" x2="65.278" y2="46.609" width="0.2032" layer="16"/>
+<wire x1="64.77" y1="46.609" x2="64.516" y2="46.609" width="0.2032" layer="1"/>
+<wire x1="64.516" y1="46.609" x2="63.5" y2="45.593" width="0.2032" layer="1"/>
+<wire x1="64.897" y1="39.37" x2="64.858" y2="39.37" width="0.2032" layer="1"/>
+<wire x1="63.5" y1="45.593" x2="63.5" y2="40.767" width="0.2032" layer="1"/>
+<wire x1="63.5" y1="40.767" x2="64.897" y2="39.37" width="0.2032" layer="1"/>
+<wire x1="67.694" y1="14.475" x2="71.211" y2="14.475" width="0.2032" layer="1"/>
+<wire x1="66.421" y1="15.748" x2="67.694" y2="14.475" width="0.2032" layer="1"/>
+<wire x1="66.04" y1="17.145" x2="66.04" y2="16.129" width="0.2032" layer="16"/>
+<wire x1="65.913" y1="17.272" x2="66.04" y2="17.145" width="0.2032" layer="16"/>
+<wire x1="65.786" y1="35.814" x2="65.659" y2="35.941" width="0.2032" layer="16"/>
+<wire x1="65.659" y1="35.941" x2="65.659" y2="37.973" width="0.2032" layer="16"/>
+<wire x1="65.659" y1="37.973" x2="66.04" y2="38.354" width="0.2032" layer="16"/>
+<wire x1="66.04" y1="38.354" x2="66.04" y2="45.847" width="0.2032" layer="16"/>
+<wire x1="66.04" y1="16.129" x2="66.421" y2="15.748" width="0.2032" layer="16"/>
+<wire x1="65.913" y1="17.272" x2="65.913" y2="35.687" width="0.2032" layer="16"/>
+<wire x1="65.913" y1="35.687" x2="65.786" y2="35.814" width="0.2032" layer="16"/>
+<via x="66.421" y="15.748" extent="1-16" drill="0.4"/>
+</signal>
+<signal name="ARM_TDO">
+<contactref element="IC2" pad="49"/>
+<contactref element="SV3" pad="13"/>
+<wire x1="59.69" y1="47.244" x2="59.69" y2="46.609" width="0.2032" layer="16"/>
+<wire x1="60.96" y1="48.514" x2="59.69" y2="47.244" width="0.2032" layer="16"/>
+<wire x1="68.199" y1="48.514" x2="60.96" y2="48.514" width="0.2032" layer="16"/>
+<wire x1="68.58" y1="48.133" x2="68.199" y2="48.514" width="0.2032" layer="16"/>
+<wire x1="68.58" y1="12.573" x2="68.58" y2="48.133" width="0.2032" layer="16"/>
+<wire x1="68.707" y1="12.446" x2="68.58" y2="12.573" width="0.2032" layer="16"/>
+<wire x1="68.707" y1="12.446" x2="69.342" y2="12.446" width="0.2032" layer="1"/>
+<wire x1="69.371" y1="12.475" x2="71.211" y2="12.475" width="0.2032" layer="1"/>
+<wire x1="69.342" y1="12.446" x2="69.371" y2="12.475" width="0.2032" layer="1"/>
+<via x="68.707" y="12.446" extent="1-16" drill="0.4"/>
+</signal>
+<signal name="ARM_TDI">
+<contactref element="IC2" pad="33"/>
+<contactref element="SV3" pad="5"/>
+<wire x1="69.85" y1="47.879" x2="69.85" y2="46.609" width="0.2032" layer="16"/>
+<wire x1="68.707" y1="49.022" x2="69.85" y2="47.879" width="0.2032" layer="16"/>
+<wire x1="59.69" y1="49.022" x2="68.707" y2="49.022" width="0.2032" layer="16"/>
+<wire x1="58.42" y1="47.752" x2="59.69" y2="49.022" width="0.2032" layer="16"/>
+<wire x1="58.42" y1="11.938" x2="58.42" y2="19.304" width="0.2032" layer="16"/>
+<wire x1="58.42" y1="19.304" x2="58.801" y2="19.685" width="0.2032" layer="16"/>
+<wire x1="58.801" y1="19.685" x2="58.801" y2="21.209" width="0.2032" layer="16"/>
+<wire x1="58.801" y1="21.209" x2="58.42" y2="21.59" width="0.2032" layer="16"/>
+<wire x1="58.42" y1="21.59" x2="58.42" y2="47.752" width="0.2032" layer="16"/>
+<wire x1="60.198" y1="10.16" x2="58.42" y2="11.938" width="0.2032" layer="16"/>
+<wire x1="61.468" y1="10.16" x2="61.461" y2="10.167" width="0.2032" layer="1"/>
+<wire x1="61.461" y1="10.167" x2="61.461" y2="10.225" width="0.2032" layer="1"/>
+<wire x1="60.198" y1="10.16" x2="61.468" y2="10.16" width="0.2032" layer="1"/>
+<via x="60.198" y="10.16" extent="1-16" drill="0.4"/>
+</signal>
+<signal name="N$9">
+<contactref element="R8" pad="2"/>
+<contactref element="IC2" pad="39"/>
+<wire x1="64.477" y1="6.731" x2="64.389" y2="6.731" width="0.2032" layer="1"/>
+<wire x1="64.461" y1="6.803" x2="64.461" y2="10.225" width="0.2032" layer="1"/>
+<wire x1="64.389" y1="6.731" x2="64.461" y2="6.803" width="0.2032" layer="1"/>
+</signal>
+<signal name="N$13">
+<contactref element="R8" pad="1"/>
+<contactref element="IC7" pad="1"/>
+<wire x1="62.777" y1="6.731" x2="62.738" y2="6.731" width="0.2032" layer="1"/>
+<wire x1="62.865" y1="6.731" x2="62.777" y2="6.731" width="0.2032" layer="1"/>
+<wire x1="62.738" y1="8.001" x2="62.738" y2="6.858" width="0.2032" layer="1"/>
+<wire x1="62.738" y1="6.858" x2="62.865" y2="6.731" width="0.2032" layer="1"/>
+<wire x1="58.928" y1="8.5598" x2="62.1792" y2="8.5598" width="0.2032" layer="1"/>
+<wire x1="62.1792" y1="8.5598" x2="62.738" y2="8.001" width="0.2032" layer="1"/>
+</signal>
+<signal name="NCS">
+<contactref element="IC2" pad="28"/>
+<contactref element="IC1" pad="44"/>
+<wire x1="53.72" y1="14.811" x2="56.563" y2="14.811" width="0.2032" layer="1"/>
+<wire x1="56.563" y1="14.811" x2="56.896" y2="14.478" width="0.2032" layer="1"/>
+<wire x1="59.182" y1="14.478" x2="59.185" y2="14.475" width="0.2032" layer="1"/>
+<wire x1="59.185" y1="14.475" x2="59.211" y2="14.475" width="0.2032" layer="1"/>
+<wire x1="56.896" y1="14.478" x2="59.182" y2="14.478" width="0.2032" layer="1"/>
+</signal>
+<signal name="MISO">
+<contactref element="IC2" pad="27"/>
+<contactref element="IC1" pad="40"/>
+<wire x1="51.705" y1="12.811" x2="53.72" y2="12.811" width="0.2032" layer="1"/>
+<wire x1="51.435" y1="13.081" x2="51.705" y2="12.811" width="0.2032" layer="1"/>
+<wire x1="51.435" y1="13.081" x2="51.435" y2="14.351" width="0.2032" layer="15"/>
+<wire x1="60.96" y1="14.605" x2="60.706" y2="14.859" width="0.2032" layer="1"/>
+<wire x1="60.59" y1="14.975" x2="59.211" y2="14.975" width="0.2032" layer="1"/>
+<wire x1="60.96" y1="14.605" x2="60.59" y2="14.975" width="0.2032" layer="1"/>
+<wire x1="51.435" y1="14.351" x2="51.816" y2="14.732" width="0.2032" layer="15"/>
+<wire x1="51.816" y1="14.732" x2="58.928" y2="14.732" width="0.2032" layer="15"/>
+<wire x1="58.928" y1="14.732" x2="59.309" y2="14.351" width="0.2032" layer="15"/>
+<wire x1="59.309" y1="14.351" x2="61.214" y2="14.351" width="0.2032" layer="15"/>
+<wire x1="61.214" y1="14.351" x2="60.96" y2="14.605" width="0.2032" layer="1"/>
+<via x="51.435" y="13.081" extent="1-16" drill="0.4"/>
+<via x="61.214" y="14.351" extent="1-16" drill="0.4"/>
+</signal>
+<signal name="MOSI">
+<contactref element="IC2" pad="22"/>
+<contactref element="IC1" pad="43"/>
+<wire x1="53.72" y1="14.311" x2="55.285" y2="14.311" width="0.2032" layer="1"/>
+<wire x1="55.285" y1="14.311" x2="55.626" y2="13.97" width="0.2032" layer="1"/>
+<wire x1="55.753" y1="16.891" x2="56.515" y2="16.891" width="0.2032" layer="1"/>
+<wire x1="55.753" y1="16.891" x2="56.642" y2="16.891" width="0.2032" layer="1"/>
+<wire x1="57.226" y1="17.475" x2="59.211" y2="17.475" width="0.2032" layer="1"/>
+<wire x1="56.642" y1="16.891" x2="57.226" y2="17.475" width="0.2032" layer="1"/>
+<wire x1="55.753" y1="16.637" x2="55.753" y2="16.891" width="0.2032" layer="16"/>
+<wire x1="56.134" y1="16.256" x2="55.753" y2="16.637" width="0.2032" layer="16"/>
+<wire x1="56.134" y1="14.478" x2="56.134" y2="16.256" width="0.2032" layer="16"/>
+<wire x1="55.626" y1="13.97" x2="56.134" y2="14.478" width="0.2032" layer="16"/>
+<via x="55.626" y="13.97" extent="1-16" drill="0.4"/>
+<via x="55.753" y="16.891" extent="1-16" drill="0.4"/>
+</signal>
+<signal name="SPCK">
+<contactref element="IC2" pad="21"/>
+<contactref element="IC1" pad="39"/>
+<wire x1="53.72" y1="12.311" x2="54.729" y2="12.311" width="0.2032" layer="1"/>
+<wire x1="54.729" y1="12.311" x2="55.372" y2="12.954" width="0.2032" layer="1"/>
+<wire x1="55.372" y1="12.954" x2="55.88" y2="12.954" width="0.2032" layer="16"/>
+<wire x1="55.88" y1="12.954" x2="56.642" y2="13.716" width="0.2032" layer="16"/>
+<wire x1="57.463" y1="17.975" x2="59.211" y2="17.975" width="0.2032" layer="1"/>
+<wire x1="56.896" y1="18.542" x2="57.463" y2="17.975" width="0.2032" layer="1"/>
+<wire x1="56.896" y1="19.177" x2="56.896" y2="18.542" width="0.2032" layer="1"/>
+<wire x1="56.896" y1="19.177" x2="56.896" y2="19.304" width="0.2032" layer="1"/>
+<wire x1="56.642" y1="13.716" x2="56.642" y2="19.685" width="0.2032" layer="16"/>
+<wire x1="56.642" y1="19.685" x2="56.769" y2="19.812" width="0.2032" layer="16"/>
+<wire x1="56.896" y1="19.685" x2="56.896" y2="19.177" width="0.2032" layer="1"/>
+<wire x1="56.769" y1="19.812" x2="56.896" y2="19.685" width="0.2032" layer="1"/>
+<via x="55.372" y="12.954" extent="1-16" drill="0.4"/>
+<via x="56.769" y="19.812" extent="1-16" drill="0.4"/>
+</signal>
+<signal name="CROSS_LO">
+<contactref element="IC5" pad="7"/>
+<contactref element="R39" pad="1"/>
+<wire x1="15.875" y1="12.446" x2="16.637" y2="13.208" width="0.2032" layer="16"/>
+<wire x1="15.875" y1="12.446" x2="17.018" y2="11.303" width="0.2032" layer="15"/>
+<wire x1="17.018" y1="11.303" x2="26.543" y2="11.303" width="0.2032" layer="15"/>
+<wire x1="26.543" y1="11.303" x2="28.956" y2="13.716" width="0.2032" layer="15"/>
+<wire x1="28.956" y1="13.716" x2="34.036" y2="13.716" width="0.2032" layer="15"/>
+<wire x1="34.036" y1="12.28" x2="34.036" y2="12.192" width="0.2032" layer="1"/>
+<wire x1="34.036" y1="12.28" x2="34.075" y2="12.319" width="0.2032" layer="1"/>
+<wire x1="34.036" y1="13.716" x2="34.036" y2="12.28" width="0.2032" layer="1"/>
+<wire x1="17.074" y1="25.852" x2="17.074" y2="24.764" width="0.2032" layer="1"/>
+<wire x1="16.891" y1="26.035" x2="17.074" y2="25.852" width="0.2032" layer="1"/>
+<wire x1="15.748" y1="26.035" x2="16.891" y2="26.035" width="0.2032" layer="1"/>
+<wire x1="15.494" y1="25.781" x2="15.748" y2="26.035" width="0.2032" layer="1"/>
+<wire x1="16.637" y1="13.208" x2="16.637" y2="24.638" width="0.2032" layer="16"/>
+<wire x1="16.637" y1="24.638" x2="15.494" y2="25.781" width="0.2032" layer="16"/>
+<via x="15.494" y="25.781" extent="1-16" drill="0.4"/>
+<via x="15.875" y="12.446" extent="1-16" drill="0.4"/>
+<via x="34.036" y="13.716" extent="1-16" drill="0.4"/>
+</signal>
+<signal name="N$14">
+<contactref element="IC6" pad="3"/>
+<contactref element="R9" pad="1"/>
+<contactref element="R10" pad="2"/>
+<wire x1="26.827" y1="7.717" x2="26.827" y2="8.763" width="0.2032" layer="1"/>
+<wire x1="27.178" y1="7.366" x2="26.827" y2="7.717" width="0.2032" layer="1"/>
+<wire x1="29.249" y1="6.184" x2="29.337" y2="6.184" width="0.2032" layer="1"/>
+<wire x1="27.178" y1="7.366" x2="28.067" y2="7.366" width="0.2032" layer="1"/>
+<wire x1="28.067" y1="7.366" x2="29.249" y2="6.184" width="0.2032" layer="1"/>
+<wire x1="29.337" y1="6.184" x2="30.861" y2="4.66" width="0.2032" layer="1"/>
+<wire x1="30.861" y1="4.66" x2="30.861" y2="3.517" width="0.2032" layer="1"/>
+</signal>
+<signal name="VMID">
+<contactref element="IC6" pad="2"/>
+<contactref element="IC6" pad="1"/>
+<contactref element="C10" pad="1"/>
+<contactref element="R12" pad="1"/>
+<contactref element="R13" pad="1"/>
+<contactref element="R17" pad="1"/>
+<contactref element="R36" pad="1"/>
+<contactref element="R38" pad="1"/>
+<contactref element="R19" pad="1"/>
+<contactref element="R48" pad="1"/>
+<contactref element="R50" pad="1"/>
+<contactref element="R49" pad="1"/>
+<contactref element="R51" pad="1"/>
+<contactref element="C45" pad="1"/>
+<wire x1="24.892" y1="16.256" x2="24.765" y2="16.129" width="0.2032" layer="1"/>
+<wire x1="24.892" y1="16.256" x2="24.892" y2="16.422" width="0.2032" layer="1"/>
+<wire x1="25.058" y1="16.422" x2="26.543" y2="16.422" width="0.2032" layer="1"/>
+<wire x1="25.019" y1="16.383" x2="24.892" y2="16.256" width="0.2032" layer="1"/>
+<wire x1="25.019" y1="16.383" x2="25.058" y2="16.422" width="0.2032" layer="1"/>
+<wire x1="23.241" y1="13.247" x2="24.296" y2="13.247" width="0.2032" layer="1"/>
+<wire x1="24.296" y1="13.247" x2="24.638" y2="13.589" width="0.2032" layer="1"/>
+<wire x1="25.019" y1="16.383" x2="24.98" y2="16.422" width="0.2032" layer="1"/>
+<wire x1="24.98" y1="16.422" x2="24.892" y2="16.422" width="0.2032" layer="1"/>
+<wire x1="24.638" y1="13.589" x2="24.638" y2="16.002" width="0.2032" layer="1"/>
+<wire x1="24.638" y1="16.002" x2="25.019" y2="16.383" width="0.2032" layer="1"/>
+<wire x1="25.654" y1="31.623" x2="23.749" y2="31.623" width="0.2032" layer="1"/>
+<wire x1="25.654" y1="31.623" x2="26.797" y2="31.623" width="0.2032" layer="1"/>
+<wire x1="32.512" y1="1.905" x2="32.512" y2="2.286" width="0.2032" layer="1"/>
+<wire x1="32.385" y1="2.667" x2="32.512" y2="2.54" width="0.2032" layer="1"/>
+<wire x1="32.512" y1="1.905" x2="32.512" y2="1.817" width="0.2032" layer="1"/>
+<wire x1="32.512" y1="2.54" x2="32.512" y2="1.905" width="0.2032" layer="1"/>
+<wire x1="25.527" y1="8.763" x2="26.177" y2="8.763" width="0.2032" layer="1"/>
+<wire x1="24.892" y1="8.128" x2="25.527" y2="8.763" width="0.2032" layer="1"/>
+<wire x1="24.892" y1="8.128" x2="24.892" y2="10.922" width="0.2032" layer="16"/>
+<wire x1="24.892" y1="10.922" x2="21.844" y2="13.97" width="0.2032" layer="16"/>
+<wire x1="23.241" y1="13.208" x2="23.368" y2="13.081" width="0.2032" layer="1"/>
+<wire x1="23.241" y1="13.208" x2="23.241" y2="13.247" width="0.2032" layer="1"/>
+<wire x1="21.844" y1="13.97" x2="22.479" y2="13.97" width="0.2032" layer="1"/>
+<wire x1="22.479" y1="13.97" x2="23.241" y2="13.208" width="0.2032" layer="1"/>
+<wire x1="25.019" y1="21.463" x2="25.019" y2="27.94" width="0.2032" layer="16"/>
+<wire x1="25.527" y1="20.955" x2="25.019" y2="21.463" width="0.2032" layer="16"/>
+<wire x1="25.527" y1="17.653" x2="25.527" y2="20.955" width="0.2032" layer="16"/>
+<wire x1="21.844" y1="13.97" x2="25.527" y2="17.653" width="0.2032" layer="16"/>
+<wire x1="25.146" y1="7.874" x2="27.813" y2="7.874" width="0.2032" layer="15"/>
+<wire x1="24.892" y1="8.128" x2="25.146" y2="7.874" width="0.2032" layer="15"/>
+<wire x1="23.534" y1="31.838" x2="18.161" y2="31.838" width="0.2032" layer="1"/>
+<wire x1="23.749" y1="31.623" x2="23.534" y2="31.838" width="0.2032" layer="1"/>
+<wire x1="14.82" y1="26.963" x2="15.748" y2="26.963" width="0.2032" layer="1"/>
+<wire x1="14.478" y1="27.305" x2="14.82" y2="26.963" width="0.2032" layer="1"/>
+<wire x1="24.384" y1="27.305" x2="14.478" y2="27.305" width="0.2032" layer="15"/>
+<wire x1="25.019" y1="27.94" x2="24.384" y2="27.305" width="0.2032" layer="15"/>
+<wire x1="26.797" y1="31.623" x2="27.051" y2="31.369" width="0.2032" layer="1"/>
+<wire x1="27.813" y1="31.369" x2="27.852" y2="31.33" width="0.2032" layer="1"/>
+<wire x1="27.852" y1="31.33" x2="27.852" y2="31.115" width="0.2032" layer="1"/>
+<wire x1="27.051" y1="31.369" x2="27.813" y2="31.369" width="0.2032" layer="1"/>
+<wire x1="27.94" y1="31.242" x2="27.852" y2="31.154" width="0.2032" layer="1"/>
+<wire x1="27.852" y1="31.115" x2="27.852" y2="31.154" width="0.2032" layer="1"/>
+<wire x1="27.852" y1="31.33" x2="27.852" y2="32.766" width="0.2032" layer="1"/>
+<wire x1="27.852" y1="31.33" x2="27.94" y2="31.242" width="0.2032" layer="1"/>
+<wire x1="25.654" y1="32.258" x2="25.654" y2="31.623" width="0.2032" layer="1"/>
+<wire x1="25.654" y1="28.575" x2="25.654" y2="32.258" width="0.2032" layer="16"/>
+<wire x1="25.019" y1="27.94" x2="25.654" y2="28.575" width="0.2032" layer="16"/>
+<wire x1="26.162" y1="21.336" x2="26.162" y2="22.518" width="0.2032" layer="1"/>
+<wire x1="25.908" y1="21.336" x2="26.162" y2="21.336" width="0.2032" layer="16"/>
+<wire x1="25.527" y1="20.955" x2="25.908" y2="21.336" width="0.2032" layer="16"/>
+<wire x1="26.162" y1="2.921" x2="25.273" y2="2.921" width="0.2032" layer="16"/>
+<wire x1="25.273" y1="2.921" x2="24.384" y2="3.81" width="0.2032" layer="16"/>
+<wire x1="24.384" y1="3.81" x2="24.384" y2="7.62" width="0.2032" layer="16"/>
+<wire x1="24.384" y1="7.62" x2="24.892" y2="8.128" width="0.2032" layer="16"/>
+<wire x1="27.813" y1="6.223" x2="27.813" y2="5.715" width="0.2032" layer="1"/>
+<wire x1="27.813" y1="5.715" x2="27.686" y2="5.588" width="0.2032" layer="1"/>
+<wire x1="27.686" y1="5.588" x2="27.686" y2="5.295" width="0.2032" layer="1"/>
+<wire x1="27.813" y1="7.874" x2="27.813" y2="6.223" width="0.2032" layer="15"/>
+<wire x1="28.067" y1="8.128" x2="30.861" y2="8.128" width="0.2032" layer="15"/>
+<wire x1="27.813" y1="7.874" x2="28.067" y2="8.128" width="0.2032" layer="15"/>
+<wire x1="30.861" y1="8.128" x2="30.734" y2="8.255" width="0.2032" layer="1"/>
+<wire x1="26.162" y1="2.921" x2="25.781" y2="2.921" width="0.2032" layer="1"/>
+<wire x1="29.591" y1="2.667" x2="32.385" y2="2.667" width="0.2032" layer="1"/>
+<wire x1="28.448" y1="1.524" x2="29.591" y2="2.667" width="0.2032" layer="1"/>
+<wire x1="24.345" y1="1.905" x2="24.345" y2="1.69" width="0.2032" layer="1"/>
+<wire x1="24.511" y1="1.524" x2="26.162" y2="1.524" width="0.2032" layer="1"/>
+<wire x1="26.162" y1="1.524" x2="28.448" y2="1.524" width="0.2032" layer="1"/>
+<wire x1="24.345" y1="1.69" x2="24.511" y2="1.524" width="0.2032" layer="1"/>
+<wire x1="26.162" y1="1.524" x2="26.162" y2="2.921" width="0.2032" layer="1"/>
+<wire x1="30.988" y1="8.255" x2="30.988" y2="9.183" width="0.2032" layer="1"/>
+<wire x1="30.861" y1="8.128" x2="30.988" y2="8.255" width="0.2032" layer="1"/>
+<via x="24.892" y="8.128" extent="1-16" drill="0.4"/>
+<via x="21.844" y="13.97" extent="1-16" drill="0.4"/>
+<via x="26.162" y="2.921" extent="1-16" drill="0.4"/>
+<via x="25.019" y="27.94" extent="1-16" drill="0.4"/>
+<via x="30.861" y="8.128" extent="1-16" drill="0.4"/>
+<via x="14.478" y="27.305" extent="1-16" drill="0.4"/>
+<via x="25.654" y="32.258" extent="1-16" drill="0.4"/>
+<via x="26.162" y="21.336" extent="1-16" drill="0.4"/>
+<via x="27.813" y="6.223" extent="1-16" drill="0.4"/>
+</signal>
+<signal name="N$16">
+<contactref element="R12" pad="2"/>
+<contactref element="C12" pad="2"/>
+<contactref element="IC6" pad="5"/>
+<wire x1="19.685" y1="9.652" x2="19.558" y2="9.779" width="0.2032" layer="16"/>
+<wire x1="19.558" y1="9.779" x2="27.305" y2="9.779" width="0.2032" layer="15"/>
+<wire x1="27.305" y1="9.779" x2="28.194" y2="10.668" width="0.2032" layer="15"/>
+<wire x1="28.194" y1="10.668" x2="28.194" y2="9.779" width="0.2032" layer="1"/>
+<wire x1="28.194" y1="9.779" x2="28.067" y2="9.652" width="0.2032" layer="1"/>
+<wire x1="28.067" y1="8.636" x2="28.127" y2="8.696" width="0.2032" layer="1"/>
+<wire x1="28.127" y1="8.696" x2="28.127" y2="8.763" width="0.2032" layer="1"/>
+<wire x1="28.067" y1="9.652" x2="28.067" y2="8.636" width="0.2032" layer="1"/>
+<wire x1="19.685" y1="3.81" x2="19.685" y2="9.652" width="0.2032" layer="16"/>
+<wire x1="20.32" y1="3.175" x2="19.685" y2="3.81" width="0.2032" layer="16"/>
+<wire x1="21.336" y1="3.175" x2="21.463" y2="3.175" width="0.2032" layer="16"/>
+<wire x1="21.336" y1="3.175" x2="20.32" y2="3.175" width="0.2032" layer="16"/>
+<wire x1="21.336" y1="3.048" x2="21.336" y2="3.175" width="0.2032" layer="1"/>
+<wire x1="22.645" y1="3.556" x2="21.844" y2="3.556" width="0.2032" layer="1"/>
+<wire x1="21.844" y1="3.556" x2="21.336" y2="3.048" width="0.2032" layer="1"/>
+<wire x1="22.733" y1="3.556" x2="22.645" y2="3.556" width="0.2032" layer="1"/>
+<wire x1="22.645" y1="1.905" x2="22.645" y2="3.468" width="0.2032" layer="1"/>
+<wire x1="22.645" y1="3.468" x2="22.733" y2="3.556" width="0.2032" layer="1"/>
+<via x="21.336" y="3.175" extent="1-16" drill="0.4"/>
+<via x="19.558" y="9.779" extent="1-16" drill="0.4"/>
+<via x="28.194" y="10.668" extent="1-16" drill="0.4"/>
+</signal>
+<signal name="N$17">
+<contactref element="R14" pad="1"/>
+<contactref element="R13" pad="2"/>
+<contactref element="IC6" pad="6"/>
+<contactref element="C13" pad="1"/>
+<wire x1="34.163" y1="3.517" x2="33.948" y2="3.517" width="0.2032" layer="1"/>
+<wire x1="34.163" y1="3.517" x2="35.814" y2="3.517" width="0.2032" layer="1"/>
+<wire x1="33.948" y1="3.517" x2="33.909" y2="3.556" width="0.2032" layer="1"/>
+<wire x1="34.163" y1="3.556" x2="34.163" y2="3.517" width="0.2032" layer="1"/>
+<wire x1="32.512" y1="3.517" x2="34.124" y2="3.517" width="0.2032" layer="1"/>
+<wire x1="34.124" y1="3.517" x2="34.163" y2="3.556" width="0.2032" layer="1"/>
+<wire x1="28.777" y1="7.672" x2="28.777" y2="8.763" width="0.2032" layer="1"/>
+<wire x1="29.337" y1="7.112" x2="28.777" y2="7.672" width="0.2032" layer="1"/>
+<wire x1="29.972" y1="7.112" x2="29.337" y2="7.112" width="0.2032" layer="1"/>
+<wire x1="32.6" y1="3.429" x2="32.639" y2="3.429" width="0.2032" layer="1"/>
+<wire x1="32.512" y1="3.517" x2="32.6" y2="3.429" width="0.2032" layer="1"/>
+<wire x1="32.639" y1="4.445" x2="29.972" y2="7.112" width="0.2032" layer="1"/>
+<wire x1="32.639" y1="3.429" x2="32.639" y2="4.445" width="0.2032" layer="1"/>
+</signal>
+<signal name="N$19">
+<contactref element="D1" pad="3"/>
+<contactref element="C11" pad="1"/>
+<contactref element="R11" pad="2"/>
+<contactref element="C12" pad="1"/>
+<contactref element="R30" pad="1"/>
+<contactref element="D11" pad="3"/>
+<wire x1="21.3233" y1="9.271" x2="21.3233" y2="8.6487" width="0.2032" layer="1"/>
+<wire x1="21.3233" y1="9.271" x2="21.3233" y2="9.779" width="0.2032" layer="1"/>
+<wire x1="21.3233" y1="8.6487" x2="23.114" y2="6.858" width="0.2032" layer="1"/>
+<wire x1="23.114" y1="6.858" x2="22.948" y2="6.858" width="0.2032" layer="1"/>
+<wire x1="23.114" y1="6.858" x2="24.423" y2="6.858" width="0.2032" layer="1"/>
+<wire x1="22.86" y1="5.119" x2="22.86" y2="4.953" width="0.2032" layer="1"/>
+<wire x1="22.86" y1="5.119" x2="22.948" y2="5.207" width="0.2032" layer="1"/>
+<wire x1="22.948" y1="6.858" x2="22.86" y2="6.77" width="0.2032" layer="1"/>
+<wire x1="22.86" y1="6.77" x2="22.86" y2="5.119" width="0.2032" layer="1"/>
+<wire x1="22.948" y1="5.207" x2="22.987" y2="5.168" width="0.2032" layer="1"/>
+<wire x1="19.685" y1="8.509" x2="20.447" y2="9.271" width="0.2032" layer="1"/>
+<wire x1="20.447" y1="9.271" x2="21.3233" y2="9.271" width="0.2032" layer="1"/>
+<wire x1="22.987" y1="5.168" x2="22.987" y2="5.08" width="0.2032" layer="1"/>
+<wire x1="22.987" y1="5.08" x2="23.241" y2="4.826" width="0.2032" layer="1"/>
+<wire x1="19.9517" y1="3.3147" x2="19.939" y2="3.302" width="0.2032" layer="1"/>
+<wire x1="19.9517" y1="3.429" x2="19.9517" y2="3.3147" width="0.2032" layer="1"/>
+<wire x1="19.9517" y1="3.429" x2="19.939" y2="3.429" width="0.2032" layer="1"/>
+<wire x1="19.685" y1="3.683" x2="19.685" y2="8.509" width="0.2032" layer="1"/>
+<wire x1="19.939" y1="3.429" x2="19.685" y2="3.683" width="0.2032" layer="1"/>
+<wire x1="24.345" y1="3.468" x2="24.384" y2="3.429" width="0.2032" layer="1"/>
+<wire x1="24.345" y1="3.468" x2="24.345" y2="3.556" width="0.2032" layer="1"/>
+<wire x1="23.241" y1="4.826" x2="23.241" y2="4.572" width="0.2032" layer="1"/>
+<wire x1="23.241" y1="4.572" x2="24.345" y2="3.468" width="0.2032" layer="1"/>
+</signal>
+<signal name="ADCDR_LO">
+<contactref element="R14" pad="2"/>
+<contactref element="IC6" pad="7"/>
+<contactref element="C13" pad="2"/>
+<contactref element="IC11" pad="4"/>
+<wire x1="34.251" y1="1.817" x2="34.29" y2="1.778" width="0.2032" layer="1"/>
+<wire x1="34.163" y1="1.817" x2="34.251" y2="1.817" width="0.2032" layer="1"/>
+<wire x1="34.329" y1="1.817" x2="35.814" y2="1.817" width="0.2032" layer="1"/>
+<wire x1="34.29" y1="1.778" x2="34.329" y2="1.817" width="0.2032" layer="1"/>
+<wire x1="36.576" y1="4.445" x2="33.782" y2="4.445" width="0.2032" layer="1"/>
+<wire x1="33.782" y1="4.445" x2="33.528" y2="4.445" width="0.2032" layer="1"/>
+<wire x1="36.957" y1="4.064" x2="36.576" y2="4.445" width="0.2032" layer="1"/>
+<wire x1="35.814" y1="1.817" x2="35.814" y2="1.778" width="0.2032" layer="1"/>
+<wire x1="36.957" y1="2.921" x2="36.957" y2="4.064" width="0.2032" layer="1"/>
+<wire x1="35.814" y1="1.778" x2="36.957" y2="2.921" width="0.2032" layer="1"/>
+<wire x1="29.427" y1="8.763" x2="29.427" y2="10.578" width="0.2032" layer="1"/>
+<wire x1="29.427" y1="10.578" x2="29.337" y2="10.668" width="0.2032" layer="1"/>
+<wire x1="29.337" y1="10.668" x2="29.337" y2="13.208" width="0.2032" layer="16"/>
+<wire x1="29.337" y1="13.208" x2="32.004" y2="15.875" width="0.2032" layer="16"/>
+<wire x1="32.004" y1="15.875" x2="32.004" y2="16.383" width="0.2032" layer="16"/>
+<wire x1="32.004" y1="18.034" x2="32.049" y2="18.034" width="0.2032" layer="1"/>
+<wire x1="32.004" y1="16.383" x2="32.004" y2="18.034" width="0.2032" layer="1"/>
+<wire x1="29.427" y1="8.038" x2="29.427" y2="8.763" width="0.2032" layer="1"/>
+<wire x1="29.845" y1="7.62" x2="29.427" y2="8.038" width="0.2032" layer="1"/>
+<wire x1="30.226" y1="7.62" x2="29.845" y2="7.62" width="0.2032" layer="1"/>
+<wire x1="33.401" y1="4.445" x2="30.226" y2="7.62" width="0.2032" layer="1"/>
+<wire x1="33.782" y1="4.445" x2="33.401" y2="4.445" width="0.2032" layer="1"/>
+<via x="29.337" y="10.668" extent="1-16" drill="0.4"/>
+<via x="32.004" y="16.383" extent="1-16" drill="0.4"/>
+</signal>
+<signal name="N$15">
+<contactref element="R18" pad="1"/>
+<contactref element="IC6" pad="9"/>
+<contactref element="C17" pad="1"/>
+<contactref element="R19" pad="2"/>
+<wire x1="28.777" y1="13.26" x2="28.777" y2="14.858" width="0.2032" layer="1"/>
+<wire x1="29.591" y1="12.446" x2="28.777" y2="13.26" width="0.2032" layer="1"/>
+<wire x1="30.861" y1="12.446" x2="30.822" y2="12.485" width="0.2032" layer="1"/>
+<wire x1="30.822" y1="12.485" x2="30.988" y2="12.485" width="0.2032" layer="1"/>
+<wire x1="29.591" y1="12.446" x2="30.861" y2="12.446" width="0.2032" layer="1"/>
+<wire x1="30.988" y1="12.485" x2="32.512" y2="12.485" width="0.2032" layer="1"/>
+<wire x1="30.607" y1="10.922" x2="30.646" y2="10.883" width="0.2032" layer="1"/>
+<wire x1="30.646" y1="10.883" x2="30.988" y2="10.883" width="0.2032" layer="1"/>
+<wire x1="30.734" y1="12.319" x2="30.734" y2="11.049" width="0.2032" layer="1"/>
+<wire x1="30.734" y1="11.049" x2="30.607" y2="10.922" width="0.2032" layer="1"/>
+<wire x1="30.988" y1="12.485" x2="30.9" y2="12.485" width="0.2032" layer="1"/>
+<wire x1="30.9" y1="12.485" x2="30.734" y2="12.319" width="0.2032" layer="1"/>
+</signal>
+<signal name="N$20">
+<contactref element="C14" pad="2"/>
+<contactref element="D3" pad="3"/>
+<contactref element="D2" pad="1"/>
+<wire x1="5.842" y1="16.725" x2="7.581" y2="16.725" width="0.2032" layer="1"/>
+<wire x1="7.581" y1="16.725" x2="8.509" y2="17.653" width="0.2032" layer="1"/>
+<wire x1="10.1727" y1="17.653" x2="10.541" y2="17.653" width="0.2032" layer="1"/>
+<wire x1="8.509" y1="17.653" x2="10.1727" y2="17.653" width="0.2032" layer="1"/>
+<wire x1="10.1727" y1="17.653" x2="10.414" y2="17.653" width="0.2032" layer="1"/>
+<wire x1="10.414" y1="18.0848" x2="12.7" y2="18.0848" width="0.2032" layer="1"/>
+<wire x1="10.414" y1="17.653" x2="10.414" y2="18.0848" width="0.2032" layer="1"/>
+</signal>
+<signal name="N$18">
+<contactref element="R16" pad="2"/>
+<contactref element="C16" pad="1"/>
+<wire x1="21.678" y1="16.422" x2="21.59" y2="16.422" width="0.2032" layer="1"/>
+<wire x1="19.939" y1="16.422" x2="21.678" y2="16.422" width="0.2032" layer="1"/>
+<wire x1="21.678" y1="16.422" x2="21.717" y2="16.383" width="0.2032" layer="1"/>
+</signal>
+<signal name="N$22">
+<contactref element="IC6" pad="10"/>
+<contactref element="C16" pad="2"/>
+<contactref element="R17" pad="2"/>
+<contactref element="R36" pad="2"/>
+<contactref element="R37" pad="2"/>
+<wire x1="23.241" y1="18.034" x2="23.241" y2="18.122" width="0.2032" layer="1"/>
+<wire x1="21.59" y1="18.122" x2="23.153" y2="18.122" width="0.2032" layer="1"/>
+<wire x1="23.153" y1="18.122" x2="23.241" y2="18.034" width="0.2032" layer="1"/>
+<wire x1="23.241" y1="18.122" x2="24.892" y2="18.122" width="0.2032" layer="1"/>
+<wire x1="24.892" y1="18.122" x2="25.234" y2="18.122" width="0.2032" layer="1"/>
+<wire x1="25.234" y1="18.122" x2="25.273" y2="18.161" width="0.2032" layer="1"/>
+<wire x1="24.892" y1="18.122" x2="24.892" y2="17.907" width="0.2032" layer="1"/>
+<wire x1="25.107" y1="18.122" x2="26.543" y2="18.122" width="0.2032" layer="1"/>
+<wire x1="24.892" y1="17.907" x2="25.107" y2="18.122" width="0.2032" layer="1"/>
+<wire x1="26.543" y1="18.122" x2="27.598" y2="18.122" width="0.2032" layer="1"/>
+<wire x1="27.598" y1="18.122" x2="28.067" y2="17.653" width="0.2032" layer="1"/>
+<wire x1="28.194" y1="14.986" x2="28.127" y2="14.919" width="0.2032" layer="1"/>
+<wire x1="28.127" y1="14.919" x2="28.127" y2="14.858" width="0.2032" layer="1"/>
+<wire x1="28.067" y1="17.653" x2="28.067" y2="15.113" width="0.2032" layer="1"/>
+<wire x1="28.067" y1="15.113" x2="28.194" y2="14.986" width="0.2032" layer="1"/>
+</signal>
+<signal name="N$23">
+<contactref element="R20" pad="2"/>
+<contactref element="IC5" pad="1"/>
+<wire x1="15.709" y1="19.685" x2="15.621" y2="19.685" width="0.2032" layer="1"/>
+<wire x1="16.424" y1="20.488" x2="16.424" y2="21.464" width="0.2032" layer="1"/>
+<wire x1="15.621" y1="19.685" x2="16.424" y2="20.488" width="0.2032" layer="1"/>
+</signal>
+<signal name="N$24">
+<contactref element="IC8" pad="23"/>
+<contactref element="C18" pad="1"/>
+<contactref element="R53" pad="1"/>
+<contactref element="R54" pad="2"/>
+<wire x1="44.715" y1="31.634" x2="44.715" y2="30.632" width="0.2032" layer="1"/>
+<wire x1="44.831" y1="31.75" x2="44.715" y2="31.634" width="0.2032" layer="1"/>
+<wire x1="46.228" y1="31.75" x2="44.831" y2="31.75" width="0.2032" layer="1"/>
+<wire x1="46.355" y1="31.877" x2="46.228" y2="31.75" width="0.2032" layer="1"/>
+<wire x1="46.355" y1="32.512" x2="46.355" y2="31.877" width="0.2032" layer="1"/>
+<wire x1="46.482" y1="32.639" x2="46.355" y2="32.512" width="0.2032" layer="1"/>
+<wire x1="46.482" y1="32.639" x2="46.609" y2="32.512" width="0.2032" layer="1"/>
+<wire x1="46.482" y1="32.639" x2="46.443" y2="32.639" width="0.2032" layer="1"/>
+<wire x1="44.743" y1="34.544" x2="44.743" y2="34.378" width="0.2032" layer="1"/>
+<wire x1="44.743" y1="34.378" x2="46.482" y2="32.639" width="0.2032" layer="1"/>
+<wire x1="43.053" y1="34.505" x2="43.053" y2="34.544" width="0.2032" layer="1"/>
+<wire x1="43.053" y1="34.544" x2="44.743" y2="34.544" width="0.2032" layer="1"/>
+</signal>
+<signal name="+2V5">
+<contactref element="IC1" pad="61"/>
+<contactref element="IC1" pad="92"/>
+<contactref element="IC1" pad="85"/>
+<contactref element="IC1" pad="94"/>
+<contactref element="IC1" pad="14"/>
+<contactref element="IC1" pad="33"/>
+<contactref element="IC1" pad="35"/>
+<contactref element="IC1" pad="42"/>
+<contactref element="C29" pad="1"/>
+<contactref element="C30" pad="1"/>
+<contactref element="C31" pad="1"/>
+<contactref element="IC12" pad="6"/>
+<contactref element="IC12" pad="5"/>
+<contactref element="C33" pad="1"/>
+<wire x1="46.101" y1="1.651" x2="46.189" y2="1.651" width="0.2032" layer="1"/>
+<wire x1="46.22" y1="3.811" x2="46.22" y2="1.77" width="0.2032" layer="1"/>
+<wire x1="46.22" y1="1.77" x2="46.101" y2="1.651" width="0.2032" layer="1"/>
+<wire x1="56.007" y1="9.398" x2="56.007" y2="9.31" width="0.2032" layer="1"/>
+<wire x1="53.72" y1="9.311" x2="55.92" y2="9.311" width="0.2032" layer="1"/>
+<wire x1="55.92" y1="9.311" x2="56.007" y2="9.398" width="0.2032" layer="1"/>
+<wire x1="35.775" y1="9.105" x2="35.814" y2="9.144" width="0.2032" layer="1"/>
+<wire x1="36.147" y1="8.811" x2="37.72" y2="8.811" width="0.2032" layer="1"/>
+<wire x1="35.814" y1="9.144" x2="36.147" y2="8.811" width="0.2032" layer="1"/>
+<wire x1="37.72" y1="8.811" x2="38.91" y2="8.811" width="0.2032" layer="1"/>
+<wire x1="38.91" y1="8.811" x2="39.116" y2="9.017" width="0.2032" layer="1"/>
+<wire x1="39.116" y1="9.017" x2="39.116" y2="9.525" width="0.2032" layer="1"/>
+<wire x1="39.116" y1="9.525" x2="38.989" y2="9.652" width="0.2032" layer="1"/>
+<wire x1="38.83" y1="9.811" x2="37.72" y2="9.811" width="0.2032" layer="1"/>
+<wire x1="39.116" y1="9.525" x2="38.83" y2="9.811" width="0.2032" layer="1"/>
+<wire x1="33.147" y1="40.259" x2="33.147" y2="40.132" width="0.6096" layer="1"/>
+<wire x1="33.02" y1="40.259" x2="31.877" y2="40.259" width="0.6096" layer="1"/>
+<wire x1="33.147" y1="40.132" x2="33.02" y2="40.259" width="0.6096" layer="1"/>
+<wire x1="35.56" y1="40.259" x2="33.147" y2="40.259" width="0.6096" layer="1"/>
+<wire x1="36.195" y1="39.624" x2="35.56" y2="40.259" width="0.6096" layer="1"/>
+<wire x1="40.64" y1="39.624" x2="36.195" y2="39.624" width="0.6096" layer="1"/>
+<wire x1="41.656" y1="40.64" x2="40.64" y2="39.624" width="0.6096" layer="1"/>
+<wire x1="44.172" y1="40.743" x2="44.196" y2="40.767" width="0.6096" layer="1"/>
+<wire x1="43.942" y1="40.743" x2="44.172" y2="40.743" width="0.6096" layer="1"/>
+<wire x1="44.069" y1="40.64" x2="41.656" y2="40.64" width="0.6096" layer="1"/>
+<wire x1="44.172" y1="40.743" x2="44.069" y2="40.64" width="0.6096" layer="1"/>
+<wire x1="46.331" y1="40.743" x2="43.942" y2="40.743" width="0.6096" layer="1"/>
+<wire x1="46.355" y1="40.767" x2="46.331" y2="40.743" width="0.6096" layer="1"/>
+<wire x1="46.355" y1="9.017" x2="46.355" y2="5.334" width="0.6096" layer="16"/>
+<wire x1="46.355" y1="9.017" x2="46.355" y2="17.907" width="0.6096" layer="16"/>
+<wire x1="46.355" y1="17.907" x2="46.355" y2="40.767" width="0.6096" layer="16"/>
+<wire x1="46.355" y1="5.334" x2="46.355" y2="4.699" width="0.2032" layer="1"/>
+<wire x1="46.355" y1="4.699" x2="46.228" y2="4.572" width="0.2032" layer="1"/>
+<wire x1="46.228" y1="3.81" x2="46.227" y2="3.811" width="0.2032" layer="1"/>
+<wire x1="46.227" y1="3.811" x2="46.22" y2="3.811" width="0.2032" layer="1"/>
+<wire x1="46.228" y1="4.572" x2="46.228" y2="3.81" width="0.2032" layer="1"/>
+<wire x1="39.116" y1="9.017" x2="44.704" y2="9.017" width="0.6096" layer="1"/>
+<wire x1="44.704" y1="9.017" x2="45.212" y2="9.017" width="0.6096" layer="1"/>
+<wire x1="45.212" y1="9.017" x2="45.339" y2="9.017" width="0.6096" layer="1"/>
+<wire x1="45.339" y1="9.017" x2="46.355" y2="9.017" width="0.6096" layer="16"/>
+<wire x1="46.609" y1="9.525" x2="48.768" y2="9.525" width="0.6096" layer="1"/>
+<wire x1="48.768" y1="9.525" x2="50.8" y2="9.525" width="0.6096" layer="1"/>
+<wire x1="46.101" y1="9.017" x2="46.609" y2="9.525" width="0.6096" layer="1"/>
+<wire x1="45.212" y1="9.017" x2="46.101" y2="9.017" width="0.6096" layer="1"/>
+<wire x1="44.704" y1="9.017" x2="44.704" y2="10.922" width="0.2032" layer="1"/>
+<wire x1="44.704" y1="10.922" x2="42.926" y2="12.7" width="0.2032" layer="1"/>
+<wire x1="42.926" y1="12.7" x2="42.799" y2="12.827" width="0.2032" layer="1"/>
+<wire x1="42.315" y1="13.311" x2="37.72" y2="13.311" width="0.2032" layer="1"/>
+<wire x1="42.926" y1="12.7" x2="42.315" y2="13.311" width="0.2032" layer="1"/>
+<wire x1="46.72" y1="18.177" x2="46.72" y2="19.811" width="0.2032" layer="1"/>
+<wire x1="46.99" y1="17.907" x2="46.72" y2="18.177" width="0.2032" layer="1"/>
+<wire x1="46.355" y1="17.907" x2="46.99" y2="17.907" width="0.2032" layer="16"/>
+<wire x1="48.768" y1="9.525" x2="48.768" y2="12.446" width="0.2032" layer="1"/>
+<wire x1="48.768" y1="12.446" x2="49.784" y2="13.462" width="0.2032" layer="1"/>
+<wire x1="49.784" y1="13.462" x2="49.911" y2="13.589" width="0.2032" layer="1"/>
+<wire x1="50.133" y1="13.811" x2="53.72" y2="13.811" width="0.2032" layer="1"/>
+<wire x1="49.784" y1="13.462" x2="50.133" y2="13.811" width="0.2032" layer="1"/>
+<wire x1="52.681" y1="10.311" x2="53.72" y2="10.311" width="0.2032" layer="1"/>
+<wire x1="52.451" y1="10.541" x2="52.681" y2="10.311" width="0.2032" layer="1"/>
+<wire x1="50.8" y1="9.525" x2="50.8" y2="9.652" width="0.2032" layer="1"/>
+<wire x1="51.689" y1="10.541" x2="52.451" y2="10.541" width="0.2032" layer="1"/>
+<wire x1="50.8" y1="9.652" x2="51.689" y2="10.541" width="0.2032" layer="1"/>
+<wire x1="52.745" y1="9.311" x2="53.72" y2="9.311" width="0.2032" layer="1"/>
+<wire x1="52.324" y1="8.89" x2="52.745" y2="9.311" width="0.2032" layer="1"/>
+<wire x1="50.8" y1="9.525" x2="50.8" y2="9.398" width="0.2032" layer="1"/>
+<wire x1="51.308" y1="8.89" x2="52.324" y2="8.89" width="0.2032" layer="1"/>
+<wire x1="50.8" y1="9.398" x2="51.308" y2="8.89" width="0.2032" layer="1"/>
+<wire x1="38.91" y1="8.811" x2="39.291" y2="8.811" width="0.2032" layer="1"/>
+<wire x1="39.291" y1="8.811" x2="39.37" y2="8.89" width="0.2032" layer="1"/>
+<wire x1="35.56" y1="9.017" x2="35.56" y2="8.89" width="0.2032" layer="1"/>
+<wire x1="35.648" y1="9.017" x2="35.56" y2="9.017" width="0.2032" layer="1"/>
+<wire x1="35.56" y1="9.105" x2="35.775" y2="9.105" width="0.2032" layer="1"/>
+<wire x1="35.56" y1="9.017" x2="35.56" y2="9.105" width="0.2032" layer="1"/>
+<via x="46.355" y="40.767" extent="1-16" drill="0.4"/>
+<via x="46.355" y="5.334" extent="1-16" drill="0.4"/>
+<via x="45.339" y="9.017" extent="1-16" drill="0.4"/>
+<via x="46.99" y="17.907" extent="1-16" drill="0.4"/>
+</signal>
+<signal name="FPGA_TDI">
+<contactref element="IC1" pad="79"/>
+<contactref element="SV5" pad="2"/>
+<wire x1="39.116" y1="46.482" x2="40.513" y2="47.879" width="0.2032" layer="16"/>
+<wire x1="36.957" y1="46.482" x2="39.116" y2="46.482" width="0.2032" layer="16"/>
+<wire x1="36.449" y1="45.974" x2="36.957" y2="46.482" width="0.2032" layer="16"/>
+<wire x1="36.449" y1="18.161" x2="36.449" y2="45.974" width="0.2032" layer="16"/>
+<wire x1="37.211" y1="17.399" x2="36.449" y2="18.161" width="0.2032" layer="16"/>
+<wire x1="37.211" y1="16.764" x2="37.211" y2="17.399" width="0.2032" layer="16"/>
+<wire x1="36.703" y1="16.256" x2="37.211" y2="16.764" width="0.2032" layer="16"/>
+<wire x1="36.322" y1="16.256" x2="36.703" y2="16.256" width="0.2032" layer="16"/>
+<wire x1="36.322" y1="16.256" x2="36.576" y2="16.256" width="0.2032" layer="1"/>
+<wire x1="36.322" y1="16.256" x2="36.195" y2="16.256" width="0.2032" layer="1"/>
+<wire x1="37.72" y1="16.311" x2="36.377" y2="16.311" width="0.2032" layer="1"/>
+<wire x1="36.377" y1="16.311" x2="36.322" y2="16.256" width="0.2032" layer="1"/>
+<via x="36.322" y="16.256" extent="1-16" drill="0.4"/>
+</signal>
+<signal name="FPGA_TDO">
+<contactref element="IC1" pad="77"/>
+<contactref element="SV5" pad="3"/>
+<wire x1="37.211" y1="47.879" x2="37.973" y2="47.879" width="0.2032" layer="16"/>
+<wire x1="35.941" y1="46.609" x2="37.211" y2="47.879" width="0.2032" layer="16"/>
+<wire x1="35.941" y1="17.653" x2="35.941" y2="46.609" width="0.2032" layer="16"/>
+<wire x1="36.322" y1="17.272" x2="35.941" y2="17.653" width="0.2032" layer="16"/>
+<wire x1="36.322" y1="17.272" x2="36.449" y2="17.272" width="0.2032" layer="1"/>
+<wire x1="37.72" y1="17.311" x2="36.361" y2="17.311" width="0.2032" layer="1"/>
+<wire x1="36.361" y1="17.311" x2="36.322" y2="17.272" width="0.2032" layer="1"/>
+<via x="36.322" y="17.272" extent="1-16" drill="0.4"/>
+</signal>
+<signal name="FPGA_TMS">
+<contactref element="IC1" pad="2"/>
+<contactref element="SV5" pad="1"/>
+<wire x1="41.148" y1="45.974" x2="43.053" y2="47.879" width="0.2032" layer="16"/>
+<wire x1="37.592" y1="45.974" x2="41.148" y2="45.974" width="0.2032" layer="16"/>
+<wire x1="37.084" y1="45.466" x2="37.592" y2="45.974" width="0.2032" layer="16"/>
+<wire x1="37.084" y1="18.415" x2="37.084" y2="45.466" width="0.2032" layer="16"/>
+<wire x1="37.719" y1="17.78" x2="37.084" y2="18.415" width="0.2032" layer="16"/>
+<wire x1="38.481" y1="4.318" x2="38.481" y2="5.842" width="0.2032" layer="16"/>
+<wire x1="38.481" y1="5.842" x2="37.719" y2="6.604" width="0.2032" layer="16"/>
+<wire x1="37.719" y1="6.604" x2="37.719" y2="17.78" width="0.2032" layer="16"/>
+<wire x1="39.878" y1="5.207" x2="39.116" y2="5.207" width="0.2032" layer="1"/>
+<wire x1="40.22" y1="3.811" x2="40.22" y2="4.865" width="0.2032" layer="1"/>
+<wire x1="40.22" y1="4.865" x2="39.878" y2="5.207" width="0.2032" layer="1"/>
+<wire x1="39.116" y1="5.207" x2="38.481" y2="4.572" width="0.2032" layer="1"/>
+<wire x1="38.481" y1="4.572" x2="38.481" y2="4.318" width="0.2032" layer="1"/>
+<via x="38.481" y="4.318" extent="1-16" drill="0.4"/>
+</signal>
+<signal name="FPGA_TCK">
+<contactref element="IC1" pad="99"/>
+<contactref element="SV5" pad="4"/>
+<wire x1="35.433" y1="7.874" x2="35.433" y2="47.879" width="0.2032" layer="16"/>
+<wire x1="34.671" y1="7.112" x2="35.433" y2="7.874" width="0.2032" layer="16"/>
+<wire x1="34.671" y1="7.112" x2="34.671" y2="6.858" width="0.2032" layer="1"/>
+<wire x1="34.671" y1="6.858" x2="34.925" y2="6.604" width="0.2032" layer="1"/>
+<wire x1="34.925" y1="6.604" x2="35.052" y2="6.477" width="0.2032" layer="1"/>
+<wire x1="35.218" y1="6.311" x2="37.72" y2="6.311" width="0.2032" layer="1"/>
+<wire x1="34.925" y1="6.604" x2="35.218" y2="6.311" width="0.2032" layer="1"/>
+<via x="34.671" y="7.112" extent="1-16" drill="0.4"/>
+</signal>
+<signal name="FPGA_DONE">
+<contactref element="IC1" pad="49"/>
+<contactref element="IC2" pad="37"/>
+<wire x1="52.793" y1="17.311" x2="53.72" y2="17.311" width="0.2032" layer="1"/>
+<wire x1="52.451" y1="17.653" x2="52.793" y2="17.311" width="0.2032" layer="1"/>
+<wire x1="50.673" y1="17.653" x2="52.451" y2="17.653" width="0.2032" layer="1"/>
+<wire x1="50.673" y1="17.653" x2="59.944" y2="17.653" width="0.2032" layer="15"/>
+<wire x1="59.944" y1="17.653" x2="60.96" y2="16.637" width="0.2032" layer="15"/>
+<wire x1="60.96" y1="16.637" x2="62.611" y2="16.637" width="0.2032" layer="15"/>
+<wire x1="62.611" y1="16.637" x2="62.992" y2="17.018" width="0.2032" layer="15"/>
+<wire x1="62.992" y1="17.018" x2="63.754" y2="17.018" width="0.2032" layer="15"/>
+<wire x1="63.754" y1="17.018" x2="64.008" y2="16.764" width="0.2032" layer="15"/>
+<wire x1="64.008" y1="16.764" x2="64.008" y2="12.7" width="0.2032" layer="1"/>
+<wire x1="63.461" y1="12.153" x2="63.461" y2="10.225" width="0.2032" layer="1"/>
+<wire x1="64.008" y1="12.7" x2="63.461" y2="12.153" width="0.2032" layer="1"/>
+<via x="50.673" y="17.653" extent="1-16" drill="0.4"/>
+<via x="64.008" y="16.764" extent="1-16" drill="0.4"/>
+</signal>
+<signal name="FPGA_NPROGRAM">
+<contactref element="IC1" pad="51"/>
+<contactref element="IC2" pad="38"/>
+<wire x1="53.466" y1="19.811" x2="51.72" y2="19.811" width="0.2032" layer="1"/>
+<wire x1="63.961" y1="8.589" x2="63.961" y2="10.225" width="0.2032" layer="1"/>
+<wire x1="63.5" y1="8.001" x2="63.373" y2="8.001" width="0.2032" layer="1"/>
+<wire x1="63.373" y1="8.001" x2="63.961" y2="8.589" width="0.2032" layer="1"/>
+<wire x1="53.467" y1="19.812" x2="53.466" y2="19.811" width="0.2032" layer="1"/>
+<wire x1="53.721" y1="19.812" x2="53.467" y2="19.812" width="0.2032" layer="1"/>
+<wire x1="53.467" y1="19.685" x2="53.594" y2="19.812" width="0.2032" layer="16"/>
+<wire x1="53.594" y1="19.812" x2="53.721" y2="19.812" width="0.2032" layer="16"/>
+<wire x1="53.467" y1="8.001" x2="53.467" y2="19.685" width="0.2032" layer="16"/>
+<wire x1="54.864" y1="6.604" x2="53.467" y2="8.001" width="0.2032" layer="16"/>
+<wire x1="54.864" y1="6.604" x2="62.103" y2="6.604" width="0.2032" layer="16"/>
+<wire x1="62.103" y1="6.604" x2="63.5" y2="8.001" width="0.2032" layer="16"/>
+<via x="53.721" y="19.812" extent="1-16" drill="0.4"/>
+<via x="63.5" y="8.001" extent="1-16" drill="0.4"/>
+</signal>
+<signal name="FPGA_CCLK">
+<contactref element="IC1" pad="75"/>
+<contactref element="IC2" pad="41"/>
+<wire x1="65.461" y1="12.136" x2="65.461" y2="10.225" width="0.2032" layer="1"/>
+<wire x1="64.77" y1="12.827" x2="65.461" y2="12.136" width="0.2032" layer="1"/>
+<wire x1="64.77" y1="13.716" x2="64.77" y2="12.827" width="0.2032" layer="1"/>
+<wire x1="64.643" y1="18.923" x2="64.77" y2="18.796" width="0.2032" layer="16"/>
+<wire x1="64.77" y1="18.796" x2="64.77" y2="13.716" width="0.2032" layer="16"/>
+<wire x1="47.625" y1="17.018" x2="49.022" y2="18.415" width="0.2032" layer="15"/>
+<wire x1="45.212" y1="17.018" x2="47.625" y2="17.018" width="0.2032" layer="15"/>
+<wire x1="43.815" y1="18.415" x2="45.212" y2="17.018" width="0.2032" layer="15"/>
+<wire x1="41.656" y1="18.415" x2="43.815" y2="18.415" width="0.2032" layer="15"/>
+<wire x1="41.021" y1="17.78" x2="41.656" y2="18.415" width="0.2032" layer="15"/>
+<wire x1="39.72" y1="19.811" x2="39.72" y2="21.113" width="0.2032" layer="1"/>
+<wire x1="39.72" y1="21.113" x2="39.497" y2="21.336" width="0.2032" layer="1"/>
+<wire x1="39.497" y1="21.336" x2="39.497" y2="18.161" width="0.2032" layer="15"/>
+<wire x1="39.497" y1="18.161" x2="39.878" y2="17.78" width="0.2032" layer="15"/>
+<wire x1="39.878" y1="17.78" x2="41.021" y2="17.78" width="0.2032" layer="15"/>
+<wire x1="61.722" y1="18.923" x2="64.643" y2="18.923" width="0.2032" layer="15"/>
+<wire x1="61.341" y1="19.304" x2="61.722" y2="18.923" width="0.2032" layer="15"/>
+<wire x1="59.563" y1="19.304" x2="61.341" y2="19.304" width="0.2032" layer="15"/>
+<wire x1="49.022" y1="18.415" x2="58.674" y2="18.415" width="0.2032" layer="15"/>
+<wire x1="58.674" y1="18.415" x2="59.563" y2="19.304" width="0.2032" layer="15"/>
+<via x="64.77" y="13.716" extent="1-16" drill="0.4"/>
+<via x="64.643" y="18.923" extent="1-16" drill="0.4"/>
+<via x="39.497" y="21.336" extent="1-16" drill="0.4"/>
+</signal>
+<signal name="FPGA_DIN">
+<contactref element="IC1" pad="73"/>
+<contactref element="IC2" pad="42"/>
+<wire x1="65.961" y1="12.779" x2="65.961" y2="10.225" width="0.2032" layer="1"/>
+<wire x1="65.659" y1="13.081" x2="65.961" y2="12.779" width="0.2032" layer="1"/>
+<wire x1="65.659" y1="14.605" x2="65.659" y2="13.081" width="0.2032" layer="16"/>
+<wire x1="65.405" y1="14.859" x2="65.659" y2="14.605" width="0.2032" layer="16"/>
+<wire x1="40.767" y1="18.415" x2="41.275" y2="18.923" width="0.2032" layer="15"/>
+<wire x1="40.72" y1="19.811" x2="40.72" y2="18.589" width="0.2032" layer="1"/>
+<wire x1="40.72" y1="18.589" x2="40.767" y2="18.542" width="0.2032" layer="1"/>
+<wire x1="40.767" y1="18.542" x2="40.767" y2="18.415" width="0.2032" layer="15"/>
+<wire x1="65.405" y1="19.558" x2="65.405" y2="14.859" width="0.2032" layer="16"/>
+<wire x1="65.151" y1="19.812" x2="65.405" y2="19.558" width="0.2032" layer="16"/>
+<wire x1="41.275" y1="18.923" x2="58.42" y2="18.923" width="0.2032" layer="15"/>
+<wire x1="58.42" y1="18.923" x2="59.309" y2="19.812" width="0.2032" layer="15"/>
+<wire x1="59.309" y1="19.812" x2="65.151" y2="19.812" width="0.2032" layer="15"/>
+<via x="65.659" y="13.081" extent="1-16" drill="0.4"/>
+<via x="65.151" y="19.812" extent="1-16" drill="0.4"/>
+<via x="40.767" y="18.542" extent="1-16" drill="0.4"/>
+</signal>
+<signal name="FPGA_DOUT">
+<contactref element="IC1" pad="74"/>
+<contactref element="IC2" pad="52"/>
+<wire x1="40.22" y1="19.811" x2="40.22" y2="21.043" width="0.2032" layer="1"/>
+<wire x1="40.22" y1="21.043" x2="40.64" y2="21.463" width="0.2032" layer="1"/>
+<wire x1="40.64" y1="21.463" x2="40.64" y2="22.479" width="0.2032" layer="16"/>
+<wire x1="40.64" y1="22.479" x2="39.751" y2="23.368" width="0.2032" layer="16"/>
+<wire x1="39.751" y1="23.368" x2="39.751" y2="32.258" width="0.2032" layer="16"/>
+<wire x1="39.751" y1="32.258" x2="41.021" y2="33.528" width="0.2032" layer="16"/>
+<wire x1="41.021" y1="33.528" x2="42.037" y2="33.528" width="0.2032" layer="16"/>
+<wire x1="42.037" y1="33.528" x2="43.434" y2="34.925" width="0.2032" layer="16"/>
+<wire x1="43.434" y1="34.925" x2="43.434" y2="36.703" width="0.2032" layer="16"/>
+<wire x1="43.434" y1="36.703" x2="41.783" y2="38.354" width="0.2032" layer="16"/>
+<wire x1="41.783" y1="38.354" x2="47.371" y2="38.354" width="0.2032" layer="15"/>
+<wire x1="47.371" y1="38.354" x2="49.022" y2="40.005" width="0.2032" layer="15"/>
+<wire x1="49.022" y1="40.005" x2="72.009" y2="40.005" width="0.2032" layer="15"/>
+<wire x1="72.009" y1="40.005" x2="75.565" y2="36.449" width="0.2032" layer="15"/>
+<wire x1="75.565" y1="36.449" x2="75.565" y2="33.147" width="0.2032" layer="16"/>
+<wire x1="75.565" y1="33.147" x2="74.93" y2="32.512" width="0.2032" layer="16"/>
+<wire x1="74.93" y1="32.512" x2="74.93" y2="25.908" width="0.2032" layer="16"/>
+<wire x1="74.93" y1="25.908" x2="75.565" y2="25.273" width="0.2032" layer="16"/>
+<wire x1="75.565" y1="25.273" x2="75.565" y2="14.224" width="0.2032" layer="16"/>
+<wire x1="75.565" y1="14.224" x2="75.184" y2="13.843" width="0.2032" layer="16"/>
+<wire x1="75.184" y1="13.843" x2="73.152" y2="13.843" width="0.2032" layer="16"/>
+<wire x1="73.152" y1="13.843" x2="73.025" y2="13.716" width="0.2032" layer="16"/>
+<wire x1="72.644" y1="13.843" x2="72.517" y2="13.97" width="0.2032" layer="1"/>
+<wire x1="72.771" y1="13.716" x2="72.644" y2="13.843" width="0.2032" layer="1"/>
+<wire x1="73.025" y1="13.716" x2="72.771" y2="13.716" width="0.2032" layer="1"/>
+<wire x1="72.512" y1="13.975" x2="71.211" y2="13.975" width="0.2032" layer="1"/>
+<wire x1="72.644" y1="13.843" x2="72.512" y2="13.975" width="0.2032" layer="1"/>
+<via x="40.64" y="21.463" extent="1-16" drill="0.4"/>
+<via x="41.783" y="38.354" extent="1-16" drill="0.4"/>
+<via x="75.565" y="36.449" extent="1-16" drill="0.4"/>
+<via x="73.025" y="13.716" extent="1-16" drill="0.4"/>
+</signal>
+<signal name="ADC_IN">
+<contactref element="IC11" pad="10"/>
+<contactref element="IC11" pad="2"/>
+<contactref element="IC11" pad="3"/>
+<contactref element="IC11" pad="9"/>
+<contactref element="IC8" pad="19"/>
+<contactref element="TP1" pad="1"/>
+<wire x1="33.349" y1="24.055" x2="33.401" y2="24.003" width="0.2032" layer="1"/>
+<wire x1="33.349" y1="24.055" x2="33.349" y2="24.129" width="0.2032" layer="1"/>
+<wire x1="32.699" y1="24.129" x2="33.275" y2="24.129" width="0.2032" layer="1"/>
+<wire x1="33.275" y1="24.129" x2="33.349" y2="24.055" width="0.2032" layer="1"/>
+<wire x1="30.749" y1="18.034" x2="30.734" y2="18.034" width="0.2032" layer="1"/>
+<wire x1="31.399" y1="18.034" x2="30.749" y2="18.034" width="0.2032" layer="1"/>
+<wire x1="33.4" y1="24.129" x2="33.401" y2="24.13" width="0.2032" layer="1"/>
+<wire x1="33.349" y1="24.129" x2="33.4" y2="24.129" width="0.2032" layer="1"/>
+<wire x1="31.399" y1="18.034" x2="31.399" y2="21.747" width="0.2032" layer="1"/>
+<wire x1="31.399" y1="21.747" x2="32.639" y2="22.987" width="0.2032" layer="1"/>
+<wire x1="32.766" y1="24.003" x2="32.699" y2="24.07" width="0.2032" layer="1"/>
+<wire x1="32.699" y1="24.07" x2="32.699" y2="24.129" width="0.2032" layer="1"/>
+<wire x1="32.639" y1="22.987" x2="32.639" y2="23.876" width="0.2032" layer="1"/>
+<wire x1="32.639" y1="23.876" x2="32.766" y2="24.003" width="0.2032" layer="1"/>
+<wire x1="33.4" y1="24.129" x2="33.4" y2="28.068" width="0.2032" layer="1"/>
+<wire x1="33.4" y1="28.068" x2="33.274" y2="28.194" width="0.2032" layer="1"/>
+<wire x1="33.274" y1="28.194" x2="43.18" y2="28.194" width="0.2032" layer="15"/>
+<wire x1="43.18" y1="28.194" x2="43.561" y2="28.575" width="0.2032" layer="15"/>
+<wire x1="41.91" y1="28.956" x2="42.037" y2="28.956" width="0.2032" layer="1"/>
+<wire x1="43.561" y1="28.575" x2="42.291" y2="28.575" width="0.2032" layer="1"/>
+<wire x1="42.291" y1="28.575" x2="41.91" y2="28.956" width="0.2032" layer="1"/>
+<wire x1="47.315" y1="28.773" x2="47.315" y2="30.632" width="0.2032" layer="1"/>
+<wire x1="47.117" y1="28.575" x2="47.315" y2="28.773" width="0.2032" layer="1"/>
+<wire x1="43.561" y1="28.575" x2="43.561" y2="28.448" width="0.2032" layer="1"/>
+<wire x1="43.688" y1="28.575" x2="47.117" y2="28.575" width="0.2032" layer="1"/>
+<wire x1="43.561" y1="28.448" x2="43.688" y2="28.575" width="0.2032" layer="1"/>
+<via x="33.274" y="28.194" extent="1-16" drill="0.4"/>
+<via x="43.561" y="28.575" extent="1-16" drill="0.4"/>
+</signal>
+<signal name="N$26">
+<contactref element="IC5" pad="3"/>
+<contactref element="R21" pad="2"/>
+<wire x1="17.438" y1="19.685" x2="17.526" y2="19.685" width="0.2032" layer="1"/>
+<wire x1="17.724" y1="19.883" x2="17.724" y2="21.464" width="0.2032" layer="1"/>
+<wire x1="17.526" y1="19.685" x2="17.724" y2="19.883" width="0.2032" layer="1"/>
+</signal>
+<signal name="CROSS_HI">
+<contactref element="IC5" pad="6"/>
+<contactref element="R44" pad="1"/>
+<wire x1="17.78" y1="12.954" x2="17.78" y2="14.097" width="0.2032" layer="16"/>
+<wire x1="17.78" y1="14.097" x2="17.145" y2="14.732" width="0.2032" layer="16"/>
+<wire x1="17.145" y1="14.732" x2="17.145" y2="16.383" width="0.2032" layer="16"/>
+<wire x1="17.145" y1="16.383" x2="17.78" y2="17.018" width="0.2032" layer="16"/>
+<wire x1="15.621" y1="10.795" x2="17.78" y2="12.954" width="0.2032" layer="16"/>
+<wire x1="15.621" y1="10.795" x2="26.924" y2="10.795" width="0.2032" layer="15"/>
+<wire x1="26.924" y1="10.795" x2="27.686" y2="11.557" width="0.2032" layer="15"/>
+<wire x1="27.686" y1="11.557" x2="31.623" y2="11.557" width="0.2032" layer="15"/>
+<wire x1="31.623" y1="11.557" x2="32.512" y2="10.668" width="0.2032" layer="15"/>
+<wire x1="32.512" y1="10.668" x2="32.766" y2="10.668" width="0.2032" layer="15"/>
+<wire x1="32.766" y1="10.668" x2="33.948" y2="10.668" width="0.2032" layer="1"/>
+<wire x1="17.724" y1="25.852" x2="17.724" y2="24.764" width="0.2032" layer="1"/>
+<wire x1="17.907" y1="26.035" x2="17.724" y2="25.852" width="0.2032" layer="1"/>
+<wire x1="19.05" y1="26.035" x2="17.907" y2="26.035" width="0.2032" layer="1"/>
+<wire x1="19.304" y1="25.781" x2="19.05" y2="26.035" width="0.2032" layer="1"/>
+<wire x1="17.78" y1="17.018" x2="17.78" y2="25.019" width="0.2032" layer="16"/>
+<wire x1="17.78" y1="25.019" x2="18.542" y2="25.781" width="0.2032" layer="16"/>
+<wire x1="18.542" y1="25.781" x2="19.304" y2="25.781" width="0.2032" layer="16"/>
+<via x="19.304" y="25.781" extent="1-16" drill="0.4"/>
+<via x="15.621" y="10.795" extent="1-16" drill="0.4"/>
+<via x="32.766" y="10.668" extent="1-16" drill="0.4"/>
+</signal>
+<signal name="ADCDR_HI">
+<contactref element="R18" pad="2"/>
+<contactref element="IC6" pad="8"/>
+<contactref element="C17" pad="2"/>
+<contactref element="IC11" pad="11"/>
+<wire x1="30.988" y1="14.185" x2="32.297" y2="14.185" width="0.2032" layer="1"/>
+<wire x1="32.297" y1="14.185" x2="32.385" y2="14.097" width="0.2032" layer="1"/>
+<wire x1="29.427" y1="14.949" x2="29.464" y2="14.986" width="0.2032" layer="1"/>
+<wire x1="29.427" y1="14.858" x2="29.427" y2="14.949" width="0.2032" layer="1"/>
+<wire x1="32.049" y1="23.159" x2="32.049" y2="24.129" width="0.2032" layer="1"/>
+<wire x1="31.75" y1="22.86" x2="32.049" y2="23.159" width="0.2032" layer="1"/>
+<wire x1="30.226" y1="22.86" x2="31.75" y2="22.86" width="0.2032" layer="1"/>
+<wire x1="29.591" y1="22.225" x2="30.226" y2="22.86" width="0.2032" layer="1"/>
+<wire x1="29.591" y1="21.463" x2="29.591" y2="22.225" width="0.2032" layer="1"/>
+<wire x1="29.464" y1="21.336" x2="29.591" y2="21.463" width="0.2032" layer="1"/>
+<wire x1="29.464" y1="14.986" x2="29.464" y2="21.336" width="0.2032" layer="1"/>
+<wire x1="30.988" y1="14.097" x2="30.988" y2="14.185" width="0.2032" layer="1"/>
+<wire x1="29.427" y1="14.858" x2="30.227" y2="14.858" width="0.2032" layer="1"/>
+<wire x1="30.227" y1="14.858" x2="30.988" y2="14.097" width="0.2032" layer="1"/>
+<wire x1="32.473" y1="14.185" x2="32.512" y2="14.185" width="0.2032" layer="1"/>
+<wire x1="32.385" y1="14.097" x2="32.473" y2="14.185" width="0.2032" layer="1"/>
+</signal>
+<signal name="FPGA_ON">
+<contactref element="R23" pad="2"/>
+<contactref element="IC12" pad="8"/>
+<contactref element="IC13" pad="3"/>
+<contactref element="IC2" pad="26"/>
+<wire x1="29.337" y1="38.481" x2="29.337" y2="40.259" width="0.2032" layer="1"/>
+<wire x1="30.861" y1="36.957" x2="29.337" y2="38.481" width="0.2032" layer="1"/>
+<wire x1="33.782" y1="36.957" x2="30.861" y2="36.957" width="0.2032" layer="15"/>
+<wire x1="34.036" y1="36.703" x2="33.782" y2="36.957" width="0.2032" layer="15"/>
+<wire x1="39.116" y1="36.703" x2="34.036" y2="36.703" width="0.2032" layer="15"/>
+<wire x1="39.624" y1="37.211" x2="39.116" y2="36.703" width="0.2032" layer="15"/>
+<wire x1="40.259" y1="37.211" x2="39.624" y2="37.211" width="0.2032" layer="15"/>
+<wire x1="41.148" y1="36.322" x2="40.259" y2="37.211" width="0.2032" layer="15"/>
+<wire x1="41.148" y1="35.56" x2="41.148" y2="36.322" width="0.2032" layer="15"/>
+<wire x1="41.783" y1="34.925" x2="41.148" y2="35.56" width="0.2032" layer="15"/>
+<wire x1="40.601" y1="33.909" x2="40.513" y2="33.909" width="0.2032" layer="1"/>
+<wire x1="41.529" y1="34.925" x2="41.783" y2="34.925" width="0.2032" layer="1"/>
+<wire x1="40.513" y1="33.909" x2="41.529" y2="34.925" width="0.2032" layer="1"/>
+<wire x1="40.601" y1="32.346" x2="40.601" y2="33.909" width="0.2032" layer="1"/>
+<wire x1="39.243" y1="30.988" x2="40.601" y2="32.346" width="0.2032" layer="1"/>
+<wire x1="39.2684" y1="29.4082" x2="39.2684" y2="29.4894" width="0.2032" layer="1"/>
+<wire x1="40.601" y1="32.346" x2="41.617" y2="32.346" width="0.2032" layer="1"/>
+<wire x1="41.617" y1="32.346" x2="41.656" y2="32.385" width="0.2032" layer="1"/>
+<wire x1="41.656" y1="32.385" x2="60.071" y2="32.385" width="0.2032" layer="15"/>
+<wire x1="60.071" y1="32.385" x2="60.325" y2="32.131" width="0.2032" layer="15"/>
+<wire x1="59.182" y1="15.494" x2="59.201" y2="15.475" width="0.2032" layer="1"/>
+<wire x1="59.201" y1="15.475" x2="59.211" y2="15.475" width="0.2032" layer="1"/>
+<wire x1="62.611" y1="14.986" x2="62.738" y2="14.986" width="0.2032" layer="16"/>
+<wire x1="62.611" y1="14.986" x2="62.738" y2="14.986" width="0.2032" layer="1"/>
+<wire x1="62.23" y1="15.494" x2="59.182" y2="15.494" width="0.2032" layer="1"/>
+<wire x1="62.738" y1="14.986" x2="62.23" y2="15.494" width="0.2032" layer="1"/>
+<wire x1="39.2684" y1="29.4386" x2="39.243" y2="29.464" width="0.2032" layer="1"/>
+<wire x1="39.2684" y1="29.4082" x2="39.2684" y2="29.4386" width="0.2032" layer="1"/>
+<wire x1="39.243" y1="29.464" x2="39.243" y2="30.988" width="0.2032" layer="1"/>
+<wire x1="62.357" y1="18.288" x2="62.357" y2="15.24" width="0.2032" layer="16"/>
+<wire x1="62.357" y1="18.288" x2="62.357" y2="18.415" width="0.2032" layer="16"/>
+<wire x1="62.357" y1="15.24" x2="62.611" y2="14.986" width="0.2032" layer="16"/>
+<wire x1="60.325" y1="32.131" x2="60.325" y2="20.447" width="0.2032" layer="16"/>
+<wire x1="60.325" y1="20.447" x2="61.087" y2="19.685" width="0.2032" layer="16"/>
+<wire x1="61.087" y1="19.685" x2="61.849" y2="19.685" width="0.2032" layer="16"/>
+<wire x1="61.849" y1="19.685" x2="62.357" y2="19.177" width="0.2032" layer="16"/>
+<wire x1="62.357" y1="19.177" x2="62.357" y2="18.288" width="0.2032" layer="16"/>
+<via x="30.861" y="36.957" extent="1-16" drill="0.4"/>
+<via x="41.783" y="34.925" extent="1-16" drill="0.4"/>
+<via x="41.656" y="32.385" extent="1-16" drill="0.4"/>
+<via x="60.325" y="32.131" extent="1-16" drill="0.4"/>
+<via x="62.611" y="14.986" extent="1-16" drill="0.4"/>
+</signal>
+<signal name="+3V3-FPGA">
+<contactref element="IC13" pad="5"/>
+<contactref element="IC4" pad="5"/>
+<contactref element="IC1" pad="12"/>
+<contactref element="IC1" pad="26"/>
+<contactref element="IC1" pad="37"/>
+<contactref element="IC1" pad="50"/>
+<contactref element="IC1" pad="63"/>
+<contactref element="IC1" pad="76"/>
+<contactref element="IC1" pad="90"/>
+<contactref element="IC1" pad="100"/>
+<contactref element="C28" pad="1"/>
+<contactref element="C32" pad="1"/>
+<contactref element="C34" pad="1"/>
+<contactref element="C47" pad="1"/>
+<contactref element="R59" pad="2"/>
+<wire x1="36.473" y1="24.789" x2="36.449" y2="24.765" width="0.2032" layer="1"/>
+<wire x1="36.473" y1="25.019" x2="36.473" y2="24.789" width="0.2032" layer="1"/>
+<wire x1="36.4184" y1="24.7956" x2="36.4184" y2="27.5082" width="0.2032" layer="1"/>
+<wire x1="36.449" y1="24.765" x2="36.4184" y2="24.7956" width="0.2032" layer="1"/>
+<wire x1="36.473" y1="22.328" x2="36.473" y2="25.019" width="0.2032" layer="1"/>
+<wire x1="37.719" y1="21.082" x2="36.473" y2="22.328" width="0.2032" layer="1"/>
+<wire x1="37.72" y1="17.781" x2="37.719" y2="17.78" width="0.2032" layer="1"/>
+<wire x1="37.72" y1="17.811" x2="37.72" y2="17.781" width="0.2032" layer="1"/>
+<wire x1="37.719" y1="17.78" x2="37.719" y2="21.082" width="0.2032" layer="1"/>
+<wire x1="43.6353" y1="17.811" x2="37.72" y2="17.811" width="0.2032" layer="1"/>
+<wire x1="43.6353" y1="17.811" x2="45.116" y2="17.811" width="0.2032" layer="1"/>
+<wire x1="45.116" y1="17.811" x2="45.72" y2="18.415" width="0.2032" layer="1"/>
+<wire x1="45.72" y1="19.811" x2="45.72" y2="19.812" width="0.2032" layer="1"/>
+<wire x1="45.72" y1="18.415" x2="45.72" y2="19.811" width="0.2032" layer="1"/>
+<wire x1="48.545" y1="17.811" x2="49.955" y2="17.811" width="0.2032" layer="1"/>
+<wire x1="47.498" y1="16.764" x2="48.545" y2="17.811" width="0.2032" layer="1"/>
+<wire x1="45.116" y1="17.811" x2="45.085" y2="17.78" width="0.2032" layer="1"/>
+<wire x1="46.101" y1="16.764" x2="47.498" y2="16.764" width="0.2032" layer="1"/>
+<wire x1="45.085" y1="17.78" x2="46.101" y2="16.764" width="0.2032" layer="1"/>
+<wire x1="37.72" y1="5.841" x2="37.719" y2="5.842" width="0.2032" layer="1"/>
+<wire x1="37.72" y1="5.841" x2="37.72" y2="5.811" width="0.2032" layer="1"/>
+<wire x1="37.758" y1="1.905" x2="37.758" y2="5.803" width="0.2032" layer="1"/>
+<wire x1="37.758" y1="5.803" x2="37.72" y2="5.841" width="0.2032" layer="1"/>
+<wire x1="49.955" y1="17.811" x2="49.955" y2="16.72" width="0.2032" layer="1"/>
+<wire x1="49.955" y1="16.72" x2="50.038" y2="16.637" width="0.2032" layer="1"/>
+<wire x1="50.038" y1="16.637" x2="50.038" y2="11.049" width="0.4064" layer="16"/>
+<wire x1="50.038" y1="11.049" x2="50.038" y2="10.922" width="0.4064" layer="16"/>
+<wire x1="50.038" y1="10.922" x2="49.911" y2="10.795" width="0.4064" layer="16"/>
+<wire x1="49.911" y1="10.795" x2="49.911" y2="6.985" width="0.4064" layer="16"/>
+<wire x1="49.911" y1="6.985" x2="51.054" y2="5.842" width="0.4064" layer="16"/>
+<wire x1="51.054" y1="5.842" x2="51.943" y2="5.842" width="0.2032" layer="1"/>
+<wire x1="51.943" y1="5.842" x2="52.07" y2="5.842" width="0.2032" layer="1"/>
+<wire x1="51.974" y1="5.811" x2="53.72" y2="5.811" width="0.2032" layer="1"/>
+<wire x1="51.943" y1="5.842" x2="51.974" y2="5.811" width="0.2032" layer="1"/>
+<wire x1="51.062" y1="11.311" x2="53.72" y2="11.311" width="0.2032" layer="1"/>
+<wire x1="50.927" y1="11.176" x2="51.062" y2="11.311" width="0.2032" layer="1"/>
+<wire x1="50.165" y1="11.176" x2="50.927" y2="11.176" width="0.2032" layer="16"/>
+<wire x1="50.038" y1="11.049" x2="50.165" y2="11.176" width="0.2032" layer="16"/>
+<wire x1="43.6353" y1="16.8167" x2="43.6353" y2="17.811" width="0.2032" layer="1"/>
+<wire x1="43.942" y1="16.51" x2="43.6353" y2="16.8167" width="0.2032" layer="1"/>
+<wire x1="43.942" y1="7.493" x2="43.942" y2="10.414" width="0.4064" layer="16"/>
+<wire x1="43.942" y1="10.414" x2="43.942" y2="16.51" width="0.4064" layer="16"/>
+<wire x1="42.418" y1="5.969" x2="43.942" y2="7.493" width="0.4064" layer="16"/>
+<wire x1="42.418" y1="5.969" x2="43.18" y2="5.207" width="0.2032" layer="1"/>
+<wire x1="43.18" y1="5.207" x2="44.831" y2="5.207" width="0.2032" layer="1"/>
+<wire x1="45.22" y1="4.818" x2="45.22" y2="3.811" width="0.2032" layer="1"/>
+<wire x1="44.831" y1="5.207" x2="45.22" y2="4.818" width="0.2032" layer="1"/>
+<wire x1="37.72" y1="5.841" x2="42.29" y2="5.841" width="0.2032" layer="1"/>
+<wire x1="42.29" y1="5.841" x2="42.418" y2="5.969" width="0.2032" layer="1"/>
+<wire x1="43.672" y1="10.811" x2="37.72" y2="10.811" width="0.2032" layer="1"/>
+<wire x1="43.942" y1="10.541" x2="43.672" y2="10.811" width="0.2032" layer="1"/>
+<wire x1="43.815" y1="10.541" x2="43.942" y2="10.541" width="0.2032" layer="16"/>
+<wire x1="43.942" y1="10.414" x2="43.815" y2="10.541" width="0.2032" layer="16"/>
+<wire x1="53.72" y1="5.811" x2="58.578" y2="5.811" width="0.2032" layer="1"/>
+<wire x1="58.578" y1="5.811" x2="60.198" y2="4.191" width="0.2032" layer="1"/>
+<wire x1="73.914" y1="2.159" x2="73.873" y2="2.2" width="0.2032" layer="1"/>
+<wire x1="73.873" y1="2.2" x2="73.873" y2="2.032" width="0.2032" layer="1"/>
+<wire x1="73.914" y1="1.778" x2="73.914" y2="2.159" width="0.2032" layer="1"/>
+<wire x1="49.955" y1="17.811" x2="49.955" y2="18.332" width="0.2032" layer="1"/>
+<wire x1="49.955" y1="18.332" x2="50.419" y2="18.796" width="0.2032" layer="1"/>
+<wire x1="53.721" y1="18.161" x2="53.72" y2="18.16" width="0.2032" layer="1"/>
+<wire x1="53.72" y1="18.16" x2="53.72" y2="17.811" width="0.2032" layer="1"/>
+<wire x1="50.419" y1="18.796" x2="53.086" y2="18.796" width="0.2032" layer="1"/>
+<wire x1="53.086" y1="18.796" x2="53.721" y2="18.161" width="0.2032" layer="1"/>
+<wire x1="53.72" y1="17.811" x2="54.895" y2="17.811" width="0.2032" layer="1"/>
+<wire x1="54.895" y1="17.811" x2="55.118" y2="18.034" width="0.2032" layer="1"/>
+<wire x1="55.079" y1="19.089" x2="54.991" y2="19.177" width="0.2032" layer="1"/>
+<wire x1="55.079" y1="19.089" x2="55.118" y2="19.089" width="0.2032" layer="1"/>
+<wire x1="55.118" y1="18.034" x2="55.118" y2="19.05" width="0.2032" layer="1"/>
+<wire x1="55.118" y1="19.05" x2="55.079" y2="19.089" width="0.2032" layer="1"/>
+<wire x1="69.342" y1="1.524" x2="73.66" y2="1.524" width="0.2032" layer="1"/>
+<wire x1="73.66" y1="1.524" x2="73.914" y2="1.778" width="0.2032" layer="1"/>
+<wire x1="67.31" y1="3.898" x2="67.31" y2="3.81" width="0.2032" layer="1"/>
+<wire x1="60.198" y1="4.191" x2="67.31" y2="4.191" width="0.2032" layer="1"/>
+<wire x1="67.31" y1="4.191" x2="67.31" y2="3.898" width="0.2032" layer="1"/>
+<wire x1="67.31" y1="3.81" x2="68.453" y2="3.81" width="0.2032" layer="1"/>
+<wire x1="68.453" y1="3.81" x2="68.834" y2="3.429" width="0.2032" layer="1"/>
+<wire x1="68.834" y1="3.429" x2="68.834" y2="2.032" width="0.2032" layer="1"/>
+<wire x1="68.834" y1="2.032" x2="69.342" y2="1.524" width="0.2032" layer="1"/>
+<wire x1="55.841" y1="22.479" x2="55.841" y2="22.186" width="0.2032" layer="1"/>
+<wire x1="55.118" y1="19.089" x2="55.284" y2="19.089" width="0.2032" layer="1"/>
+<wire x1="55.284" y1="19.089" x2="55.88" y2="19.685" width="0.2032" layer="1"/>
+<wire x1="55.88" y1="19.685" x2="55.88" y2="20.066" width="0.2032" layer="1"/>
+<wire x1="55.88" y1="20.066" x2="56.007" y2="20.193" width="0.2032" layer="1"/>
+<wire x1="55.753" y1="22.479" x2="55.841" y2="22.479" width="0.2032" layer="1"/>
+<wire x1="56.007" y1="20.193" x2="56.007" y2="22.225" width="0.2032" layer="1"/>
+<wire x1="56.007" y1="22.225" x2="55.753" y2="22.479" width="0.2032" layer="1"/>
+<via x="50.038" y="16.637" extent="1-16" drill="0.4"/>
+<via x="51.054" y="5.842" extent="1-16" drill="0.4"/>
+<via x="50.927" y="11.176" extent="1-16" drill="0.4"/>
+<via x="43.942" y="16.51" extent="1-16" drill="0.4"/>
+<via x="42.418" y="5.969" extent="1-16" drill="0.4"/>
+<via x="43.942" y="10.541" extent="1-16" drill="0.4"/>
+</signal>
+<signal name="N$28">
+<contactref element="R26" pad="2"/>
+<contactref element="D6" pad="+"/>
+<wire x1="53.848" y1="27.012" x2="53.848" y2="28.487" width="0.2032" layer="1"/>
+</signal>
+<signal name="N$29">
+<contactref element="R25" pad="2"/>
+<contactref element="D5" pad="+"/>
+<wire x1="58.547" y1="28.321" x2="58.674" y2="28.448" width="0.2032" layer="1"/>
+<wire x1="58.674" y1="28.448" x2="58.674" y2="28.487" width="0.2032" layer="1"/>
+<wire x1="58.674" y1="27.012" x2="58.674" y2="28.194" width="0.2032" layer="1"/>
+<wire x1="58.674" y1="28.194" x2="58.547" y2="28.321" width="0.2032" layer="1"/>
+</signal>
+<signal name="N$30">
+<contactref element="R24" pad="2"/>
+<contactref element="D4" pad="+"/>
+<wire x1="56.261" y1="27.012" x2="56.261" y2="28.487" width="0.2032" layer="1"/>
+</signal>
+<signal name="N$41">
+<contactref element="IC9" pad="3"/>
+<contactref element="IC9" pad="7"/>
+<contactref element="IC9" pad="5"/>
+<contactref element="R22" pad="1"/>
+<wire x1="13.492" y1="33.371" x2="13.492" y2="34.544" width="0.2032" layer="1"/>
+<wire x1="13.716" y1="33.147" x2="13.492" y2="33.371" width="0.2032" layer="1"/>
+<wire x1="14.859" y1="33.147" x2="13.716" y2="33.147" width="0.2032" layer="1"/>
+<wire x1="15.875" y1="33.147" x2="14.859" y2="33.147" width="0.2032" layer="1"/>
+<wire x1="16.129" y1="33.401" x2="15.875" y2="33.147" width="0.2032" layer="1"/>
+<wire x1="16.129" y1="33.401" x2="16.129" y2="34.163" width="0.2032" layer="1"/>
+<wire x1="16.129" y1="34.163" x2="16.129" y2="34.417" width="0.2032" layer="1"/>
+<wire x1="14.732" y1="34.544" x2="14.792" y2="34.544" width="0.2032" layer="1"/>
+<wire x1="14.859" y1="33.147" x2="14.859" y2="34.417" width="0.2032" layer="1"/>
+<wire x1="14.859" y1="34.417" x2="14.732" y2="34.544" width="0.2032" layer="1"/>
+<wire x1="5.461" y1="34.632" x2="5.461" y2="35.56" width="0.2032" layer="1"/>
+<wire x1="5.461" y1="35.56" x2="5.588" y2="35.687" width="0.2032" layer="1"/>
+<wire x1="16.764" y1="33.147" x2="16.383" y2="33.147" width="0.2032" layer="1"/>
+<wire x1="16.383" y1="33.147" x2="16.129" y2="33.401" width="0.2032" layer="1"/>
+<wire x1="5.588" y1="35.687" x2="5.588" y2="34.036" width="0.2032" layer="15"/>
+<wire x1="5.588" y1="34.036" x2="5.969" y2="33.655" width="0.2032" layer="15"/>
+<wire x1="5.969" y1="33.655" x2="16.256" y2="33.655" width="0.2032" layer="15"/>
+<wire x1="16.256" y1="33.655" x2="16.764" y2="33.147" width="0.2032" layer="15"/>
+<wire x1="16.092" y1="34.2" x2="16.092" y2="34.544" width="0.2032" layer="1"/>
+<wire x1="16.129" y1="34.163" x2="16.092" y2="34.2" width="0.2032" layer="1"/>
+<via x="5.588" y="35.687" extent="1-16" drill="0.4"/>
+<via x="16.764" y="33.147" extent="1-16" drill="0.4"/>
+</signal>
+<signal name="N$33">
+<contactref element="IC9" pad="18"/>
+<contactref element="IC9" pad="16"/>
+<contactref element="IC9" pad="14"/>
+<contactref element="IC9" pad="12"/>
+<contactref element="R27" pad="1"/>
+<wire x1="17.392" y1="41.663" x2="17.392" y2="40.639" width="0.2032" layer="1"/>
+<wire x1="17.145" y1="41.91" x2="17.392" y2="41.663" width="0.2032" layer="1"/>
+<wire x1="13.716" y1="41.91" x2="14.732" y2="41.91" width="0.2032" layer="1"/>
+<wire x1="14.732" y1="41.91" x2="16.129" y2="41.91" width="0.2032" layer="1"/>
+<wire x1="16.129" y1="41.91" x2="17.145" y2="41.91" width="0.2032" layer="1"/>
+<wire x1="13.716" y1="41.91" x2="13.589" y2="41.783" width="0.2032" layer="1"/>
+<wire x1="13.589" y1="40.767" x2="13.492" y2="40.67" width="0.2032" layer="1"/>
+<wire x1="13.492" y1="40.67" x2="13.492" y2="40.639" width="0.2032" layer="1"/>
+<wire x1="13.589" y1="41.783" x2="13.589" y2="40.767" width="0.2032" layer="1"/>
+<wire x1="14.792" y1="41.85" x2="14.792" y2="40.639" width="0.2032" layer="1"/>
+<wire x1="14.732" y1="41.91" x2="14.792" y2="41.85" width="0.2032" layer="1"/>
+<wire x1="16.092" y1="41.873" x2="16.092" y2="40.639" width="0.2032" layer="1"/>
+<wire x1="16.129" y1="41.91" x2="16.092" y2="41.873" width="0.2032" layer="1"/>
+<wire x1="7.112" y1="34.632" x2="7.112" y2="35.687" width="0.2032" layer="1"/>
+<wire x1="7.112" y1="35.687" x2="7.239" y2="35.687" width="0.2032" layer="1"/>
+<wire x1="7.239" y1="35.687" x2="7.239" y2="39.497" width="0.2032" layer="16"/>
+<wire x1="12.065" y1="41.91" x2="13.716" y2="41.91" width="0.2032" layer="1"/>
+<wire x1="9.144" y1="41.148" x2="11.303" y2="41.148" width="0.2032" layer="1"/>
+<wire x1="11.303" y1="41.148" x2="12.065" y2="41.91" width="0.2032" layer="1"/>
+<wire x1="7.239" y1="39.497" x2="8.89" y2="41.148" width="0.2032" layer="16"/>
+<wire x1="8.89" y1="41.148" x2="9.144" y2="41.148" width="0.2032" layer="16"/>
+<via x="7.239" y="35.687" extent="1-16" drill="0.4"/>
+<via x="9.144" y="41.148" extent="1-16" drill="0.4"/>
+</signal>
+<signal name="N$34">
+<contactref element="IC10" pad="18"/>
+<contactref element="IC10" pad="12"/>
+<contactref element="IC10" pad="14"/>
+<contactref element="IC10" pad="16"/>
+<contactref element="R28" pad="1"/>
+<wire x1="24.25" y1="39.236" x2="24.25" y2="40.639" width="0.2032" layer="1"/>
+<wire x1="24.003" y1="38.989" x2="24.25" y2="39.236" width="0.2032" layer="1"/>
+<wire x1="21.59" y1="38.989" x2="21.717" y2="38.989" width="0.2032" layer="1"/>
+<wire x1="21.717" y1="38.989" x2="22.987" y2="38.989" width="0.2032" layer="1"/>
+<wire x1="22.987" y1="38.989" x2="24.003" y2="38.989" width="0.2032" layer="1"/>
+<wire x1="20.35" y1="40.737" x2="20.32" y2="40.767" width="0.2032" layer="1"/>
+<wire x1="20.35" y1="40.737" x2="20.35" y2="40.639" width="0.2032" layer="1"/>
+<wire x1="21.65" y1="39.056" x2="21.65" y2="40.639" width="0.2032" layer="1"/>
+<wire x1="21.717" y1="38.989" x2="21.65" y2="39.056" width="0.2032" layer="1"/>
+<wire x1="22.987" y1="40.64" x2="22.986" y2="40.639" width="0.2032" layer="1"/>
+<wire x1="22.986" y1="40.639" x2="22.95" y2="40.639" width="0.2032" layer="1"/>
+<wire x1="22.987" y1="38.989" x2="22.987" y2="40.64" width="0.2032" layer="1"/>
+<wire x1="3.81" y1="34.632" x2="3.81" y2="35.814" width="0.2032" layer="1"/>
+<wire x1="3.81" y1="35.814" x2="4.445" y2="36.449" width="0.2032" layer="1"/>
+<wire x1="4.445" y1="36.449" x2="14.097" y2="36.449" width="0.2032" layer="1"/>
+<wire x1="14.097" y1="36.449" x2="16.002" y2="38.354" width="0.2032" layer="1"/>
+<wire x1="16.002" y1="38.354" x2="19.431" y2="38.354" width="0.2032" layer="1"/>
+<wire x1="19.431" y1="38.354" x2="19.812" y2="37.973" width="0.2032" layer="1"/>
+<wire x1="19.812" y1="37.973" x2="20.574" y2="37.973" width="0.2032" layer="1"/>
+<wire x1="20.574" y1="37.973" x2="21.2725" y2="38.6715" width="0.2032" layer="1"/>
+<wire x1="21.2725" y1="38.6715" x2="21.59" y2="38.989" width="0.2032" layer="1"/>
+<wire x1="20.35" y1="39.594" x2="20.35" y2="40.737" width="0.2032" layer="1"/>
+<wire x1="21.2725" y1="38.6715" x2="20.35" y2="39.594" width="0.2032" layer="1"/>
+</signal>
+<signal name="N$42">
+<contactref element="IC10" pad="3"/>
+<contactref element="IC10" pad="5"/>
+<contactref element="IC10" pad="7"/>
+<contactref element="R29" pad="1"/>
+<wire x1="20.35" y1="35.59" x2="20.35" y2="34.544" width="0.2032" layer="1"/>
+<wire x1="20.574" y1="35.814" x2="20.35" y2="35.59" width="0.2032" layer="1"/>
+<wire x1="21.59" y1="35.814" x2="20.574" y2="35.814" width="0.2032" layer="1"/>
+<wire x1="22.098" y1="35.814" x2="21.59" y2="35.814" width="0.2032" layer="1"/>
+<wire x1="22.098" y1="35.814" x2="22.606" y2="35.814" width="0.2032" layer="1"/>
+<wire x1="22.95" y1="35.47" x2="22.95" y2="34.544" width="0.2032" layer="1"/>
+<wire x1="22.606" y1="35.814" x2="22.95" y2="35.47" width="0.2032" layer="1"/>
+<wire x1="21.717" y1="34.544" x2="21.65" y2="34.544" width="0.2032" layer="1"/>
+<wire x1="21.59" y1="35.814" x2="21.59" y2="34.671" width="0.2032" layer="1"/>
+<wire x1="21.59" y1="34.671" x2="21.717" y2="34.544" width="0.2032" layer="1"/>
+<wire x1="8.763" y1="34.632" x2="8.763" y2="35.687" width="0.2032" layer="1"/>
+<wire x1="15.367" y1="37.465" x2="16.002" y2="38.1" width="0.2032" layer="15"/>
+<wire x1="16.002" y1="38.1" x2="21.59" y2="38.1" width="0.2032" layer="15"/>
+<wire x1="21.59" y1="38.1" x2="22.098" y2="37.592" width="0.2032" layer="15"/>
+<wire x1="22.098" y1="37.592" x2="22.098" y2="35.814" width="0.2032" layer="1"/>
+<wire x1="8.763" y1="35.687" x2="8.763" y2="37.211" width="0.2032" layer="16"/>
+<wire x1="8.763" y1="37.211" x2="9.398" y2="37.846" width="0.2032" layer="16"/>
+<wire x1="9.398" y1="37.846" x2="11.049" y2="37.846" width="0.2032" layer="16"/>
+<wire x1="11.049" y1="37.846" x2="11.43" y2="37.465" width="0.2032" layer="15"/>
+<wire x1="11.43" y1="37.465" x2="15.367" y2="37.465" width="0.2032" layer="15"/>
+<via x="8.763" y="35.687" extent="1-16" drill="0.4"/>
+<via x="22.098" y="37.592" extent="1-16" drill="0.4"/>
+<via x="11.049" y="37.846" extent="1-16" drill="0.4"/>
+</signal>
+<signal name="N$31">
+<contactref element="R27" pad="2"/>
+<contactref element="R29" pad="2"/>
+<contactref element="SV2" pad="3"/>
+<contactref element="R45" pad="2"/>
+<contactref element="TP4" pad="1"/>
+<wire x1="8.724" y1="32.932" x2="7.112" y2="32.932" width="0.2032" layer="1"/>
+<wire x1="8.763" y1="32.893" x2="8.724" y2="32.932" width="0.2032" layer="1"/>
+<wire x1="10.414" y1="32.932" x2="8.802" y2="32.932" width="0.2032" layer="1"/>
+<wire x1="8.802" y1="32.932" x2="8.763" y2="32.893" width="0.2032" layer="1"/>
+<wire x1="6.877" y1="23.349" x2="8.744" y2="23.349" width="0.2032" layer="1"/>
+<wire x1="8.744" y1="23.349" x2="8.763" y2="23.368" width="0.2032" layer="1"/>
+<wire x1="8.763" y1="23.368" x2="9.017" y2="23.368" width="0.2032" layer="1"/>
+<wire x1="9.017" y1="23.368" x2="9.017" y2="32.258" width="0.2032" layer="16"/>
+<wire x1="9.017" y1="32.258" x2="9.652" y2="32.893" width="0.2032" layer="16"/>
+<wire x1="9.652" y1="32.893" x2="11.43" y2="32.893" width="0.2032" layer="16"/>
+<wire x1="10.375" y1="32.932" x2="10.287" y2="33.02" width="0.2032" layer="1"/>
+<wire x1="10.375" y1="32.932" x2="10.414" y2="32.932" width="0.2032" layer="1"/>
+<wire x1="11.43" y1="32.893" x2="10.414" y2="32.893" width="0.2032" layer="1"/>
+<wire x1="10.414" y1="32.893" x2="10.375" y2="32.932" width="0.2032" layer="1"/>
+<wire x1="8.763" y1="31.242" x2="9.144" y2="30.861" width="0.2032" layer="1"/>
+<wire x1="8.763" y1="32.893" x2="8.763" y2="32.932" width="0.2032" layer="1"/>
+<wire x1="8.763" y1="32.893" x2="8.763" y2="31.242" width="0.2032" layer="1"/>
+<via x="9.017" y="23.368" extent="1-16" drill="0.4"/>
+<via x="11.43" y="32.893" extent="1-16" drill="0.4"/>
+</signal>
+<signal name="AMPL_LO">
+<contactref element="R30" pad="2"/>
+<contactref element="R31" pad="2"/>
+<contactref element="IC2" pad="3"/>
+<wire x1="26.123" y1="5.119" x2="26.123" y2="5.207" width="0.2032" layer="1"/>
+<wire x1="26.123" y1="5.207" x2="26.123" y2="6.858" width="0.2032" layer="1"/>
+<wire x1="26.289" y1="4.953" x2="26.123" y2="5.119" width="0.2032" layer="1"/>
+<wire x1="37.338" y1="2.54" x2="51.689" y2="2.54" width="0.2032" layer="15"/>
+<wire x1="51.689" y1="2.54" x2="56.261" y2="7.112" width="0.2032" layer="15"/>
+<wire x1="56.261" y1="7.112" x2="64.516" y2="7.112" width="0.2032" layer="15"/>
+<wire x1="64.516" y1="7.112" x2="65.659" y2="8.255" width="0.2032" layer="15"/>
+<wire x1="65.659" y1="8.255" x2="66.675" y2="9.271" width="0.2032" layer="16"/>
+<wire x1="66.675" y1="9.271" x2="66.675" y2="11.811" width="0.2032" layer="16"/>
+<wire x1="67.437" y1="20.32" x2="67.31" y2="20.447" width="0.2032" layer="16"/>
+<wire x1="67.945" y1="22.209" x2="67.961" y2="22.225" width="0.2032" layer="1"/>
+<wire x1="67.31" y1="20.447" x2="67.945" y2="21.082" width="0.2032" layer="1"/>
+<wire x1="67.945" y1="21.082" x2="67.945" y2="22.209" width="0.2032" layer="1"/>
+<wire x1="67.437" y1="15.494" x2="67.437" y2="20.32" width="0.2032" layer="16"/>
+<wire x1="66.421" y1="14.478" x2="67.437" y2="15.494" width="0.2032" layer="16"/>
+<wire x1="66.421" y1="12.065" x2="66.421" y2="14.478" width="0.2032" layer="16"/>
+<wire x1="66.675" y1="11.811" x2="66.421" y2="12.065" width="0.2032" layer="16"/>
+<wire x1="26.289" y1="4.953" x2="26.289" y2="5.041" width="0.2032" layer="1"/>
+<wire x1="26.289" y1="5.041" x2="26.123" y2="5.207" width="0.2032" layer="1"/>
+<wire x1="35.687" y1="4.191" x2="37.338" y2="2.54" width="0.2032" layer="15"/>
+<wire x1="26.543" y1="4.318" x2="26.67" y2="4.191" width="0.2032" layer="15"/>
+<wire x1="26.67" y1="4.191" x2="35.687" y2="4.191" width="0.2032" layer="15"/>
+<wire x1="26.416" y1="4.826" x2="26.289" y2="4.953" width="0.2032" layer="1"/>
+<wire x1="26.416" y1="4.445" x2="26.416" y2="4.826" width="0.2032" layer="1"/>
+<wire x1="26.543" y1="4.318" x2="26.416" y2="4.445" width="0.2032" layer="1"/>
+<via x="26.543" y="4.318" extent="1-16" drill="0.4"/>
+<via x="65.659" y="8.255" extent="1-16" drill="0.4"/>
+<via x="67.31" y="20.447" extent="1-16" drill="0.4"/>
+</signal>
+<signal name="N$52">
+<contactref element="C40" pad="1"/>
+<contactref element="R33" pad="1"/>
+<contactref element="IC14" pad="2"/>
+<contactref element="R51" pad="2"/>
+<wire x1="28.106" y1="28.663" x2="28.194" y2="28.575" width="0.2032" layer="1"/>
+<wire x1="28.067" y1="28.663" x2="28.106" y2="28.663" width="0.2032" layer="1"/>
+<wire x1="28.282" y1="28.663" x2="29.718" y2="28.663" width="0.2032" layer="1"/>
+<wire x1="28.194" y1="28.575" x2="28.282" y2="28.663" width="0.2032" layer="1"/>
+<wire x1="27.979" y1="28.663" x2="28.067" y2="28.663" width="0.2032" layer="1"/>
+<wire x1="26.035" y1="29.733" x2="26.909" y2="29.733" width="0.2032" layer="1"/>
+<wire x1="26.909" y1="29.733" x2="27.979" y2="28.663" width="0.2032" layer="1"/>
+<wire x1="29.552" y1="33.44" x2="29.552" y2="32.766" width="0.2032" layer="1"/>
+<wire x1="29.21" y1="33.782" x2="29.552" y2="33.44" width="0.2032" layer="1"/>
+<wire x1="28.575" y1="33.782" x2="29.21" y2="33.782" width="0.2032" layer="1"/>
+<wire x1="28.321" y1="34.036" x2="28.575" y2="33.782" width="0.2032" layer="1"/>
+<wire x1="28.321" y1="35.179" x2="28.321" y2="34.036" width="0.2032" layer="1"/>
+<wire x1="28.194" y1="35.306" x2="28.321" y2="35.179" width="0.2032" layer="1"/>
+<wire x1="28.194" y1="30.226" x2="28.194" y2="35.306" width="0.2032" layer="16"/>
+<wire x1="28.829" y1="29.591" x2="28.194" y2="30.226" width="0.2032" layer="16"/>
+<wire x1="29.845" y1="29.591" x2="28.829" y2="29.591" width="0.2032" layer="16"/>
+<wire x1="30.099" y1="29.845" x2="29.845" y2="29.591" width="0.2032" layer="16"/>
+<wire x1="29.718" y1="29.464" x2="30.099" y2="29.845" width="0.2032" layer="1"/>
+<wire x1="29.718" y1="28.663" x2="29.718" y2="29.464" width="0.2032" layer="1"/>
+<via x="28.194" y="35.306" extent="1-16" drill="0.4"/>
+<via x="30.099" y="29.845" extent="1-16" drill="0.4"/>
+</signal>
+<signal name="RAW_HI">
+<contactref element="C40" pad="2"/>
+<contactref element="IC14" pad="1"/>
+<contactref element="R33" pad="2"/>
+<contactref element="IC11" pad="8"/>
+<wire x1="27.774" y1="26.963" x2="28.067" y2="26.963" width="0.2032" layer="1"/>
+<wire x1="28.067" y1="26.963" x2="29.718" y2="26.963" width="0.2032" layer="1"/>
+<wire x1="27.686" y1="27.051" x2="27.774" y2="26.963" width="0.2032" layer="1"/>
+<wire x1="28.067" y1="26.963" x2="28.067" y2="26.924" width="0.2032" layer="1"/>
+<wire x1="26.035" y1="28.956" x2="26.035" y2="29.083" width="0.2032" layer="1"/>
+<wire x1="28.067" y1="26.924" x2="26.035" y2="28.956" width="0.2032" layer="1"/>
+<wire x1="33.999" y1="27.268" x2="33.999" y2="24.129" width="0.2032" layer="1"/>
+<wire x1="34.798" y1="28.067" x2="33.999" y2="27.268" width="0.2032" layer="1"/>
+<wire x1="34.798" y1="28.575" x2="34.798" y2="28.067" width="0.2032" layer="1"/>
+<wire x1="33.909" y1="29.464" x2="34.798" y2="28.575" width="0.2032" layer="1"/>
+<wire x1="29.63" y1="26.963" x2="29.591" y2="26.924" width="0.2032" layer="1"/>
+<wire x1="29.718" y1="26.963" x2="29.63" y2="26.963" width="0.2032" layer="1"/>
+<wire x1="32.131" y1="29.464" x2="33.909" y2="29.464" width="0.2032" layer="1"/>
+<wire x1="29.63" y1="26.963" x2="32.131" y2="29.464" width="0.2032" layer="1"/>
+</signal>
+<signal name="MUXSEL_LOPKD">
+<contactref element="IC11" pad="5"/>
+<contactref element="IC2" pad="16"/>
+<wire x1="32.699" y1="18.034" x2="32.699" y2="19.237" width="0.2032" layer="1"/>
+<wire x1="61.461" y1="22.225" x2="61.468" y2="22.225" width="0.2032" layer="1"/>
+<wire x1="36.576" y1="22.098" x2="37.719" y2="23.241" width="0.2032" layer="15"/>
+<wire x1="37.719" y1="23.241" x2="42.037" y2="23.241" width="0.2032" layer="15"/>
+<wire x1="42.037" y1="23.241" x2="43.053" y2="22.225" width="0.2032" layer="15"/>
+<wire x1="43.053" y1="22.225" x2="57.531" y2="22.225" width="0.2032" layer="15"/>
+<wire x1="57.531" y1="22.225" x2="57.912" y2="22.606" width="0.2032" layer="15"/>
+<wire x1="57.912" y1="22.606" x2="59.182" y2="22.606" width="0.2032" layer="15"/>
+<wire x1="61.468" y1="22.606" x2="61.461" y2="22.599" width="0.2032" layer="1"/>
+<wire x1="61.461" y1="22.599" x2="61.461" y2="22.225" width="0.2032" layer="1"/>
+<wire x1="59.182" y1="22.606" x2="61.468" y2="22.606" width="0.2032" layer="1"/>
+<wire x1="32.699" y1="19.237" x2="32.131" y2="19.805" width="0.2032" layer="1"/>
+<wire x1="32.131" y1="19.805" x2="32.131" y2="21.209" width="0.2032" layer="1"/>
+<wire x1="33.02" y1="22.098" x2="36.576" y2="22.098" width="0.2032" layer="15"/>
+<wire x1="32.131" y1="21.209" x2="33.02" y2="22.098" width="0.2032" layer="15"/>
+<via x="32.131" y="21.209" extent="1-16" drill="0.4"/>
+<via x="59.182" y="22.606" extent="1-16" drill="0.4"/>
+</signal>
+<signal name="MUXSEL_HIPKD">
+<contactref element="IC11" pad="12"/>
+<contactref element="IC2" pad="13"/>
+<wire x1="62.961" y1="21.051" x2="62.961" y2="22.225" width="0.2032" layer="1"/>
+<wire x1="62.484" y1="20.574" x2="62.961" y2="21.051" width="0.2032" layer="1"/>
+<wire x1="41.656" y1="22.225" x2="42.672" y2="21.209" width="0.2032" layer="15"/>
+<wire x1="38.1" y1="22.225" x2="41.656" y2="22.225" width="0.2032" layer="15"/>
+<wire x1="36.957" y1="21.082" x2="38.1" y2="22.225" width="0.2032" layer="15"/>
+<wire x1="35.052" y1="21.082" x2="36.957" y2="21.082" width="0.2032" layer="15"/>
+<wire x1="33.528" y1="19.558" x2="35.052" y2="21.082" width="0.2032" layer="15"/>
+<wire x1="31.75" y1="19.558" x2="33.528" y2="19.558" width="0.2032" layer="15"/>
+<wire x1="31.75" y1="19.558" x2="30.607" y2="20.701" width="0.2032" layer="15"/>
+<wire x1="30.607" y1="20.701" x2="30.607" y2="24.638" width="0.2032" layer="15"/>
+<wire x1="30.607" y1="24.638" x2="29.718" y2="25.527" width="0.2032" layer="15"/>
+<wire x1="29.718" y1="25.527" x2="29.845" y2="25.527" width="0.2032" layer="1"/>
+<wire x1="29.845" y1="25.527" x2="31.115" y2="26.797" width="0.2032" layer="1"/>
+<wire x1="31.115" y1="26.797" x2="31.623" y2="26.797" width="0.2032" layer="1"/>
+<wire x1="31.399" y1="24.922" x2="31.399" y2="24.129" width="0.2032" layer="1"/>
+<wire x1="31.623" y1="25.146" x2="31.399" y2="24.922" width="0.2032" layer="1"/>
+<wire x1="31.877" y1="25.146" x2="31.623" y2="25.146" width="0.2032" layer="1"/>
+<wire x1="32.131" y1="25.4" x2="31.877" y2="25.146" width="0.2032" layer="1"/>
+<wire x1="32.131" y1="26.289" x2="32.131" y2="25.4" width="0.2032" layer="1"/>
+<wire x1="31.623" y1="26.797" x2="32.131" y2="26.289" width="0.2032" layer="1"/>
+<wire x1="62.484" y1="20.574" x2="62.611" y2="20.574" width="0.2032" layer="15"/>
+<wire x1="42.672" y1="21.209" x2="60.198" y2="21.209" width="0.2032" layer="15"/>
+<wire x1="60.198" y1="21.209" x2="60.706" y2="21.717" width="0.2032" layer="15"/>
+<wire x1="60.706" y1="21.717" x2="62.23" y2="21.717" width="0.2032" layer="15"/>
+<wire x1="62.23" y1="21.717" x2="62.484" y2="21.463" width="0.2032" layer="15"/>
+<wire x1="62.484" y1="21.463" x2="62.484" y2="20.574" width="0.2032" layer="15"/>
+<via x="62.484" y="20.574" extent="1-16" drill="0.4"/>
+<via x="29.718" y="25.527" extent="1-16" drill="0.4"/>
+</signal>
+<signal name="MUXSEL_HIRAW">
+<contactref element="IC11" pad="6"/>
+<contactref element="IC2" pad="11"/>
+<wire x1="33.349" y1="18.034" x2="33.349" y2="20.118" width="0.2032" layer="1"/>
+<wire x1="34.036" y1="21.59" x2="36.83" y2="21.59" width="0.2032" layer="15"/>
+<wire x1="36.83" y1="21.59" x2="37.973" y2="22.733" width="0.2032" layer="15"/>
+<wire x1="37.973" y1="22.733" x2="41.91" y2="22.733" width="0.2032" layer="15"/>
+<wire x1="41.91" y1="22.733" x2="42.926" y2="21.717" width="0.2032" layer="15"/>
+<wire x1="63.961" y1="22.225" x2="63.961" y2="22.305" width="0.2032" layer="1"/>
+<wire x1="63.961" y1="20.875" x2="63.961" y2="22.225" width="0.2032" layer="1"/>
+<wire x1="64.262" y1="20.574" x2="63.961" y2="20.875" width="0.2032" layer="1"/>
+<wire x1="63.373" y1="21.463" x2="63.119" y2="21.717" width="0.2032" layer="15"/>
+<wire x1="63.373" y1="21.463" x2="64.262" y2="20.574" width="0.2032" layer="15"/>
+<wire x1="33.349" y1="20.118" x2="33.02" y2="20.447" width="0.2032" layer="1"/>
+<wire x1="33.02" y1="20.574" x2="34.036" y2="21.59" width="0.2032" layer="15"/>
+<wire x1="33.02" y1="20.447" x2="33.02" y2="20.574" width="0.2032" layer="15"/>
+<wire x1="42.926" y1="21.717" x2="59.944" y2="21.717" width="0.2032" layer="15"/>
+<wire x1="59.944" y1="21.717" x2="60.579" y2="22.352" width="0.2032" layer="15"/>
+<wire x1="60.579" y1="22.352" x2="62.484" y2="22.352" width="0.2032" layer="15"/>
+<wire x1="62.484" y1="22.352" x2="63.373" y2="21.463" width="0.2032" layer="15"/>
+<via x="33.02" y="20.447" extent="1-16" drill="0.4"/>
+<via x="64.262" y="20.574" extent="1-16" drill="0.4"/>
+</signal>
+<signal name="MUXSEL_LORAW">
+<contactref element="IC11" pad="13"/>
+<contactref element="IC2" pad="14"/>
+<wire x1="30.749" y1="24.129" x2="30.749" y2="25.288" width="0.2032" layer="1"/>
+<wire x1="30.749" y1="25.288" x2="31.242" y2="25.781" width="0.2032" layer="1"/>
+<wire x1="31.242" y1="25.781" x2="61.214" y2="25.781" width="0.2032" layer="15"/>
+<wire x1="62.357" y1="24.384" x2="62.484" y2="24.257" width="0.2032" layer="1"/>
+<wire x1="62.484" y1="22.479" x2="62.461" y2="22.456" width="0.2032" layer="1"/>
+<wire x1="62.461" y1="22.456" x2="62.461" y2="22.225" width="0.2032" layer="1"/>
+<wire x1="62.484" y1="24.257" x2="62.484" y2="22.479" width="0.2032" layer="1"/>
+<wire x1="61.214" y1="25.781" x2="62.357" y2="24.638" width="0.2032" layer="15"/>
+<wire x1="62.357" y1="24.638" x2="62.357" y2="24.384" width="0.2032" layer="15"/>
+<via x="31.242" y="25.781" extent="1-16" drill="0.4"/>
+<via x="62.357" y="24.384" extent="1-16" drill="0.4"/>
+</signal>
+<signal name="N$43">
+<contactref element="IC11" pad="1"/>
+<contactref element="IC14" pad="7"/>
+<contactref element="R34" pad="2"/>
+<contactref element="C41" pad="2"/>
+<wire x1="17.399" y1="26.963" x2="19.011" y2="26.963" width="0.2032" layer="1"/>
+<wire x1="19.011" y1="26.963" x2="19.05" y2="26.924" width="0.2032" layer="1"/>
+<wire x1="20.335" y1="29.733" x2="21.235" y2="29.733" width="0.2032" layer="1"/>
+<wire x1="20.066" y1="29.464" x2="20.335" y2="29.733" width="0.2032" layer="1"/>
+<wire x1="20.066" y1="27.305" x2="20.066" y2="29.464" width="0.2032" layer="1"/>
+<wire x1="19.812" y1="27.051" x2="20.066" y2="27.305" width="0.2032" layer="1"/>
+<wire x1="19.05" y1="26.924" x2="19.05" y2="26.963" width="0.2032" layer="1"/>
+<wire x1="19.177" y1="27.051" x2="19.812" y2="27.051" width="0.2032" layer="1"/>
+<wire x1="19.05" y1="26.924" x2="19.177" y2="27.051" width="0.2032" layer="1"/>
+<wire x1="20.066" y1="27.305" x2="20.066" y2="24.892" width="0.2032" layer="1"/>
+<wire x1="20.066" y1="24.892" x2="21.463" y2="23.495" width="0.2032" layer="1"/>
+<wire x1="21.463" y1="23.495" x2="27.813" y2="23.495" width="0.2032" layer="15"/>
+<wire x1="27.813" y1="23.495" x2="30.099" y2="21.209" width="0.2032" layer="15"/>
+<wire x1="30.099" y1="18.034" x2="30.099" y2="17.907" width="0.2032" layer="1"/>
+<wire x1="30.099" y1="19.685" x2="30.099" y2="18.034" width="0.2032" layer="1"/>
+<wire x1="30.226" y1="19.812" x2="30.099" y2="19.685" width="0.2032" layer="1"/>
+<wire x1="30.099" y1="21.209" x2="30.099" y2="19.939" width="0.2032" layer="15"/>
+<wire x1="30.099" y1="19.939" x2="30.226" y2="19.812" width="0.2032" layer="15"/>
+<via x="21.463" y="23.495" extent="1-16" drill="0.4"/>
+<via x="30.226" y="19.812" extent="1-16" drill="0.4"/>
+</signal>
+<signal name="N$53">
+<contactref element="C41" pad="1"/>
+<contactref element="IC14" pad="6"/>
+<contactref element="R34" pad="1"/>
+<contactref element="R50" pad="2"/>
+<wire x1="19.05" y1="28.663" x2="19.05" y2="28.702" width="0.2032" layer="1"/>
+<wire x1="17.399" y1="28.663" x2="19.011" y2="28.663" width="0.2032" layer="1"/>
+<wire x1="19.011" y1="28.663" x2="18.923" y2="28.575" width="0.2032" layer="1"/>
+<wire x1="19.011" y1="28.663" x2="19.05" y2="28.663" width="0.2032" layer="1"/>
+<wire x1="19.05" y1="28.702" x2="19.05" y2="30.226" width="0.2032" layer="1"/>
+<wire x1="19.011" y1="28.663" x2="19.05" y2="28.702" width="0.2032" layer="1"/>
+<wire x1="19.207" y1="30.383" x2="21.235" y2="30.383" width="0.2032" layer="1"/>
+<wire x1="19.05" y1="30.226" x2="19.207" y2="30.383" width="0.2032" layer="1"/>
+<wire x1="15.748" y1="28.663" x2="15.748" y2="28.575" width="0.2032" layer="1"/>
+<wire x1="15.836" y1="28.663" x2="17.399" y2="28.663" width="0.2032" layer="1"/>
+<wire x1="15.748" y1="28.575" x2="15.836" y2="28.663" width="0.2032" layer="1"/>
+</signal>
+<signal name="N$54">
+<contactref element="R32" pad="2"/>
+<contactref element="R48" pad="2"/>
+<contactref element="IC14" pad="5"/>
+<wire x1="18.034" y1="30.099" x2="18.073" y2="30.138" width="0.2032" layer="1"/>
+<wire x1="18.073" y1="30.138" x2="18.161" y2="30.138" width="0.2032" layer="1"/>
+<wire x1="16.51" y1="30.138" x2="17.995" y2="30.138" width="0.2032" layer="1"/>
+<wire x1="17.995" y1="30.138" x2="18.034" y2="30.099" width="0.2032" layer="1"/>
+<wire x1="18.161" y1="30.138" x2="18.161" y2="30.099" width="0.2032" layer="1"/>
+<wire x1="19.095" y1="31.033" x2="21.235" y2="31.033" width="0.2032" layer="1"/>
+<wire x1="18.161" y1="30.099" x2="19.095" y2="31.033" width="0.2032" layer="1"/>
+</signal>
+<signal name="N$56">
+<contactref element="R37" pad="1"/>
+<contactref element="R38" pad="2"/>
+<wire x1="23.241" y1="14.947" x2="23.241" y2="14.859" width="0.2032" layer="1"/>
+<wire x1="23.241" y1="14.947" x2="23.241" y2="16.422" width="0.2032" layer="1"/>
+</signal>
+<signal name="N$32">
+<contactref element="SV2" pad="1"/>
+<contactref element="R22" pad="2"/>
+<contactref element="R28" pad="2"/>
+<contactref element="R46" pad="2"/>
+<contactref element="TP5" pad="1"/>
+<wire x1="3.81" y1="32.932" x2="3.81" y2="33.02" width="0.2032" layer="1"/>
+<wire x1="3.722" y1="32.932" x2="2.159" y2="32.932" width="0.2032" layer="1"/>
+<wire x1="3.81" y1="33.02" x2="3.722" y2="32.932" width="0.2032" layer="1"/>
+<wire x1="5.461" y1="32.893" x2="5.588" y2="32.766" width="0.2032" layer="1"/>
+<wire x1="5.461" y1="32.893" x2="5.461" y2="32.932" width="0.2032" layer="1"/>
+<wire x1="3.81" y1="32.932" x2="5.422" y2="32.932" width="0.2032" layer="1"/>
+<wire x1="5.422" y1="32.932" x2="5.461" y2="32.893" width="0.2032" layer="1"/>
+<wire x1="6.877" y1="24.949" x2="6.877" y2="30.08" width="0.2032" layer="1"/>
+<wire x1="6.877" y1="30.08" x2="6.223" y2="30.734" width="0.2032" layer="1"/>
+<wire x1="4.064" y1="30.861" x2="4.191" y2="30.861" width="0.2032" layer="1"/>
+<wire x1="6.223" y1="30.734" x2="4.191" y2="30.734" width="0.2032" layer="1"/>
+<wire x1="4.191" y1="30.734" x2="4.064" y2="30.861" width="0.2032" layer="1"/>
+<wire x1="4.191" y1="30.861" x2="3.937" y2="30.861" width="0.2032" layer="1"/>
+<wire x1="3.81" y1="30.988" x2="3.81" y2="32.932" width="0.2032" layer="1"/>
+<wire x1="3.937" y1="30.861" x2="3.81" y2="30.988" width="0.2032" layer="1"/>
+</signal>
+<signal name="PWR_OE1">
+<contactref element="IC9" pad="1"/>
+<contactref element="IC1" pad="82"/>
+<wire x1="34.084" y1="14.811" x2="37.72" y2="14.811" width="0.2032" layer="1"/>
+<wire x1="33.274" y1="15.621" x2="34.084" y2="14.811" width="0.2032" layer="1"/>
+<wire x1="24.384" y1="32.131" x2="25.273" y2="33.02" width="0.2032" layer="15"/>
+<wire x1="13.208" y1="32.131" x2="24.384" y2="32.131" width="0.2032" layer="15"/>
+<wire x1="12.446" y1="32.893" x2="13.208" y2="32.131" width="0.2032" layer="15"/>
+<wire x1="12.446" y1="32.893" x2="12.319" y2="33.02" width="0.2032" layer="1"/>
+<wire x1="12.192" y1="33.147" x2="12.192" y2="34.544" width="0.2032" layer="1"/>
+<wire x1="12.446" y1="32.893" x2="12.192" y2="33.147" width="0.2032" layer="1"/>
+<wire x1="33.655" y1="30.48" x2="34.417" y2="29.718" width="0.2032" layer="16"/>
+<wire x1="25.273" y1="33.02" x2="32.385" y2="33.02" width="0.2032" layer="15"/>
+<wire x1="32.385" y1="33.02" x2="33.655" y2="31.75" width="0.2032" layer="15"/>
+<wire x1="33.655" y1="31.75" x2="33.655" y2="30.48" width="0.2032" layer="15"/>
+<wire x1="34.417" y1="29.718" x2="34.417" y2="17.399" width="0.2032" layer="16"/>
+<wire x1="34.417" y1="17.399" x2="33.909" y2="16.891" width="0.2032" layer="16"/>
+<wire x1="33.909" y1="16.891" x2="33.909" y2="16.256" width="0.2032" layer="16"/>
+<wire x1="33.909" y1="16.256" x2="33.274" y2="15.621" width="0.2032" layer="16"/>
+<via x="33.274" y="15.621" extent="1-16" drill="0.4"/>
+<via x="33.655" y="30.48" extent="1-16" drill="0.4"/>
+<via x="12.446" y="32.893" extent="1-16" drill="0.4"/>
+</signal>
+<signal name="PWR_OE2">
+<contactref element="IC10" pad="1"/>
+<contactref element="IC1" pad="83"/>
+<wire x1="37.72" y1="14.311" x2="40.219" y2="14.311" width="0.2032" layer="1"/>
+<wire x1="40.219" y1="14.311" x2="40.64" y2="14.732" width="0.2032" layer="1"/>
+<wire x1="40.64" y1="14.732" x2="40.64" y2="16.383" width="0.2032" layer="16"/>
+<wire x1="40.64" y1="16.383" x2="38.1" y2="18.923" width="0.2032" layer="16"/>
+<wire x1="38.1" y1="18.923" x2="38.1" y2="34.925" width="0.2032" layer="16"/>
+<wire x1="38.1" y1="34.925" x2="39.37" y2="36.195" width="0.2032" layer="16"/>
+<wire x1="39.37" y1="36.195" x2="40.005" y2="36.195" width="0.2032" layer="16"/>
+<wire x1="40.005" y1="36.195" x2="19.177" y2="36.195" width="0.2032" layer="15"/>
+<wire x1="19.177" y1="36.195" x2="19.05" y2="36.068" width="0.2032" layer="15"/>
+<wire x1="19.05" y1="36.068" x2="19.05" y2="34.544" width="0.2032" layer="1"/>
+<via x="40.64" y="14.732" extent="1-16" drill="0.4"/>
+<via x="40.005" y="36.195" extent="1-16" drill="0.4"/>
+<via x="19.05" y="36.068" extent="1-16" drill="0.4"/>
+</signal>
+<signal name="PWR_LO">
+<contactref element="IC10" pad="2"/>
+<contactref element="IC10" pad="4"/>
+<contactref element="IC10" pad="6"/>
+<contactref element="IC10" pad="8"/>
+<contactref element="IC10" pad="11"/>
+<contactref element="IC9" pad="13"/>
+<contactref element="IC9" pad="17"/>
+<contactref element="IC9" pad="15"/>
+<contactref element="IC1" pad="81"/>
+<wire x1="23.6" y1="33.506" x2="23.6" y2="34.544" width="0.2032" layer="1"/>
+<wire x1="23.368" y1="33.274" x2="23.6" y2="33.506" width="0.2032" layer="1"/>
+<wire x1="20.955" y1="33.274" x2="19.939" y2="33.274" width="0.2032" layer="1"/>
+<wire x1="22.352" y1="33.274" x2="20.955" y2="33.274" width="0.2032" layer="1"/>
+<wire x1="23.368" y1="33.274" x2="22.352" y2="33.274" width="0.2032" layer="1"/>
+<wire x1="19.939" y1="33.274" x2="19.685" y2="33.528" width="0.2032" layer="1"/>
+<wire x1="19.685" y1="34.544" x2="19.7" y2="34.544" width="0.2032" layer="1"/>
+<wire x1="19.685" y1="33.528" x2="19.685" y2="34.544" width="0.2032" layer="1"/>
+<wire x1="20.955" y1="34.544" x2="21" y2="34.544" width="0.2032" layer="1"/>
+<wire x1="20.955" y1="33.274" x2="20.955" y2="34.544" width="0.2032" layer="1"/>
+<wire x1="22.352" y1="34.417" x2="22.3" y2="34.469" width="0.2032" layer="1"/>
+<wire x1="22.3" y1="34.469" x2="22.3" y2="34.544" width="0.2032" layer="1"/>
+<wire x1="22.352" y1="33.274" x2="22.352" y2="34.417" width="0.2032" layer="1"/>
+<wire x1="35.108" y1="15.311" x2="37.72" y2="15.311" width="0.2032" layer="1"/>
+<wire x1="34.671" y1="15.748" x2="35.108" y2="15.311" width="0.2032" layer="1"/>
+<wire x1="34.671" y1="15.748" x2="34.671" y2="17.018" width="0.2032" layer="16"/>
+<wire x1="34.671" y1="17.018" x2="34.925" y2="17.272" width="0.2032" layer="16"/>
+<wire x1="34.925" y1="17.272" x2="34.925" y2="33.147" width="0.2032" layer="16"/>
+<wire x1="34.925" y1="33.147" x2="34.544" y2="33.528" width="0.2032" layer="16"/>
+<wire x1="34.544" y1="33.528" x2="24.638" y2="33.528" width="0.2032" layer="15"/>
+<wire x1="24.638" y1="33.528" x2="24.003" y2="32.893" width="0.2032" layer="15"/>
+<wire x1="24.003" y1="32.893" x2="23.749" y2="32.893" width="0.2032" layer="1"/>
+<wire x1="23.749" y1="32.893" x2="23.368" y2="33.274" width="0.2032" layer="1"/>
+<wire x1="14.142" y1="39.198" x2="14.142" y2="40.639" width="0.2032" layer="1"/>
+<wire x1="14.351" y1="38.989" x2="14.142" y2="39.198" width="0.2032" layer="1"/>
+<wire x1="14.605" y1="38.989" x2="14.351" y2="38.989" width="0.2032" layer="1"/>
+<wire x1="14.605" y1="38.989" x2="15.367" y2="38.989" width="0.2032" layer="1"/>
+<wire x1="15.367" y1="38.989" x2="16.51" y2="38.989" width="0.2032" layer="1"/>
+<wire x1="16.51" y1="38.989" x2="16.764" y2="39.243" width="0.2032" layer="1"/>
+<wire x1="16.764" y1="40.64" x2="16.763" y2="40.639" width="0.2032" layer="1"/>
+<wire x1="16.763" y1="40.639" x2="16.742" y2="40.639" width="0.2032" layer="1"/>
+<wire x1="16.764" y1="39.243" x2="16.764" y2="40.64" width="0.2032" layer="1"/>
+<wire x1="15.442" y1="39.064" x2="15.442" y2="40.639" width="0.2032" layer="1"/>
+<wire x1="15.367" y1="38.989" x2="15.442" y2="39.064" width="0.2032" layer="1"/>
+<wire x1="24.9" y1="37.473" x2="24.9" y2="40.639" width="0.2032" layer="1"/>
+<wire x1="23.622" y1="36.195" x2="24.9" y2="37.473" width="0.2032" layer="1"/>
+<wire x1="23.6" y1="34.649" x2="23.622" y2="34.671" width="0.2032" layer="1"/>
+<wire x1="23.6" y1="34.544" x2="23.6" y2="34.649" width="0.2032" layer="1"/>
+<wire x1="23.622" y1="34.671" x2="23.622" y2="36.195" width="0.2032" layer="1"/>
+<wire x1="14.605" y1="38.354" x2="14.605" y2="38.989" width="0.2032" layer="1"/>
+<wire x1="14.605" y1="36.703" x2="14.605" y2="38.354" width="0.2032" layer="16"/>
+<wire x1="18.161" y1="33.147" x2="14.605" y2="36.703" width="0.2032" layer="16"/>
+<wire x1="19.304" y1="33.147" x2="18.161" y2="33.147" width="0.2032" layer="1"/>
+<wire x1="19.685" y1="33.528" x2="19.304" y2="33.147" width="0.2032" layer="1"/>
+<via x="34.671" y="15.748" extent="1-16" drill="0.4"/>
+<via x="34.544" y="33.528" extent="1-16" drill="0.4"/>
+<via x="24.003" y="32.893" extent="1-16" drill="0.4"/>
+<via x="14.605" y="38.354" extent="1-16" drill="0.4"/>
+<via x="18.161" y="33.147" extent="1-16" drill="0.4"/>
+</signal>
+<signal name="PWR_HI">
+<contactref element="IC9" pad="4"/>
+<contactref element="IC9" pad="11"/>
+<contactref element="IC9" pad="8"/>
+<contactref element="IC9" pad="6"/>
+<contactref element="IC9" pad="2"/>
+<contactref element="IC10" pad="13"/>
+<contactref element="IC10" pad="17"/>
+<contactref element="IC10" pad="15"/>
+<contactref element="IC1" pad="80"/>
+<wire x1="20.955" y1="41.91" x2="22.225" y2="41.91" width="0.2032" layer="1"/>
+<wire x1="22.225" y1="41.91" x2="23.368" y2="41.91" width="0.2032" layer="1"/>
+<wire x1="23.368" y1="41.91" x2="23.622" y2="41.656" width="0.2032" layer="1"/>
+<wire x1="23.622" y1="40.386" x2="23.6" y2="40.408" width="0.2032" layer="1"/>
+<wire x1="23.6" y1="40.408" x2="23.6" y2="40.639" width="0.2032" layer="1"/>
+<wire x1="23.622" y1="41.656" x2="23.622" y2="40.386" width="0.2032" layer="1"/>
+<wire x1="22.3" y1="41.835" x2="22.3" y2="40.639" width="0.2032" layer="1"/>
+<wire x1="22.225" y1="41.91" x2="22.3" y2="41.835" width="0.2032" layer="1"/>
+<wire x1="18.288" y1="41.91" x2="20.955" y2="41.91" width="0.2032" layer="1"/>
+<wire x1="18.034" y1="41.656" x2="18.288" y2="41.91" width="0.2032" layer="1"/>
+<wire x1="18.035" y1="40.639" x2="18.034" y2="40.64" width="0.2032" layer="1"/>
+<wire x1="18.042" y1="40.639" x2="18.035" y2="40.639" width="0.2032" layer="1"/>
+<wire x1="18.034" y1="40.64" x2="18.034" y2="41.656" width="0.2032" layer="1"/>
+<wire x1="21" y1="41.865" x2="21" y2="40.639" width="0.2032" layer="1"/>
+<wire x1="20.955" y1="41.91" x2="21" y2="41.865" width="0.2032" layer="1"/>
+<wire x1="39.561" y1="15.811" x2="37.72" y2="15.811" width="0.2032" layer="1"/>
+<wire x1="39.751" y1="15.621" x2="39.561" y2="15.811" width="0.2032" layer="1"/>
+<wire x1="39.751" y1="16.51" x2="39.751" y2="15.621" width="0.2032" layer="16"/>
+<wire x1="37.592" y1="18.669" x2="39.751" y2="16.51" width="0.2032" layer="16"/>
+<wire x1="37.592" y1="44.069" x2="37.592" y2="18.669" width="0.2032" layer="16"/>
+<wire x1="38.608" y1="45.085" x2="37.592" y2="44.069" width="0.2032" layer="16"/>
+<wire x1="37.211" y1="46.482" x2="38.608" y2="45.085" width="0.2032" layer="15"/>
+<wire x1="23.368" y1="41.91" x2="23.876" y2="42.418" width="0.2032" layer="1"/>
+<wire x1="23.876" y1="42.418" x2="24.511" y2="42.418" width="0.2032" layer="1"/>
+<wire x1="12.842" y1="34.544" x2="12.842" y2="35.702" width="0.2032" layer="1"/>
+<wire x1="12.842" y1="35.702" x2="13.081" y2="35.941" width="0.2032" layer="1"/>
+<wire x1="13.081" y1="35.941" x2="14.097" y2="35.941" width="0.2032" layer="1"/>
+<wire x1="14.097" y1="35.941" x2="15.367" y2="35.941" width="0.2032" layer="1"/>
+<wire x1="15.367" y1="35.941" x2="16.383" y2="35.941" width="0.2032" layer="1"/>
+<wire x1="16.383" y1="35.941" x2="16.764" y2="35.56" width="0.2032" layer="1"/>
+<wire x1="16.764" y1="34.417" x2="16.742" y2="34.439" width="0.2032" layer="1"/>
+<wire x1="16.742" y1="34.439" x2="16.742" y2="34.544" width="0.2032" layer="1"/>
+<wire x1="16.764" y1="35.56" x2="16.764" y2="34.417" width="0.2032" layer="1"/>
+<wire x1="15.367" y1="34.671" x2="15.442" y2="34.596" width="0.2032" layer="1"/>
+<wire x1="15.442" y1="34.596" x2="15.442" y2="34.544" width="0.2032" layer="1"/>
+<wire x1="15.367" y1="35.941" x2="15.367" y2="34.671" width="0.2032" layer="1"/>
+<wire x1="14.097" y1="34.544" x2="14.142" y2="34.544" width="0.2032" layer="1"/>
+<wire x1="14.097" y1="35.941" x2="14.097" y2="34.544" width="0.2032" layer="1"/>
+<wire x1="16.383" y1="35.941" x2="16.383" y2="37.211" width="0.2032" layer="1"/>
+<wire x1="16.383" y1="37.211" x2="16.383" y2="37.592" width="0.2032" layer="16"/>
+<wire x1="16.383" y1="37.592" x2="18.034" y2="39.243" width="0.2032" layer="16"/>
+<wire x1="17.908" y1="40.639" x2="17.907" y2="40.64" width="0.2032" layer="1"/>
+<wire x1="17.908" y1="40.639" x2="18.042" y2="40.639" width="0.2032" layer="1"/>
+<wire x1="18.034" y1="39.243" x2="18.034" y2="40.513" width="0.2032" layer="1"/>
+<wire x1="18.034" y1="40.513" x2="17.908" y2="40.639" width="0.2032" layer="1"/>
+<wire x1="25.4" y1="44.577" x2="25.4" y2="45.466" width="0.2032" layer="15"/>
+<wire x1="24.511" y1="42.418" x2="25.4" y2="43.307" width="0.2032" layer="1"/>
+<wire x1="25.4" y1="43.307" x2="25.4" y2="44.577" width="0.2032" layer="1"/>
+<wire x1="25.4" y1="45.466" x2="27.051" y2="47.117" width="0.2032" layer="15"/>
+<wire x1="27.051" y1="47.117" x2="29.337" y2="47.117" width="0.2032" layer="15"/>
+<wire x1="29.337" y1="47.117" x2="29.972" y2="46.482" width="0.2032" layer="15"/>
+<wire x1="29.972" y1="46.482" x2="37.211" y2="46.482" width="0.2032" layer="15"/>
+<via x="39.751" y="15.621" extent="1-16" drill="0.4"/>
+<via x="38.608" y="45.085" extent="1-16" drill="0.4"/>
+<via x="25.4" y="44.577" extent="1-16" drill="0.4"/>
+<via x="16.383" y="37.211" extent="1-16" drill="0.4"/>
+<via x="18.034" y="39.243" extent="1-16" drill="0.4"/>
+</signal>
+<signal name="N$35">
+<contactref element="RLY1" pad="10"/>
+<contactref element="D7" pad="1"/>
+<contactref element="Q1" pad="3"/>
+<wire x1="12.192" y1="1.524" x2="14.097" y2="1.524" width="0.2032" layer="1"/>
+<wire x1="14.097" y1="1.524" x2="15.4432" y2="1.524" width="0.2032" layer="1"/>
+<wire x1="12.192" y1="2.286" x2="12.192" y2="1.524" width="0.2032" layer="1"/>
+<wire x1="12.319" y1="2.413" x2="12.192" y2="2.286" width="0.2032" layer="1"/>
+<wire x1="17.1323" y1="5.842" x2="17.272" y2="5.842" width="0.2032" layer="1"/>
+<wire x1="12.573" y1="2.332" x2="12.573" y2="2.159" width="0.2032" layer="1"/>
+<wire x1="12.573" y1="2.159" x2="12.319" y2="2.413" width="0.2032" layer="1"/>
+<wire x1="15.621" y1="5.842" x2="17.1323" y2="5.842" width="0.2032" layer="1"/>
+<wire x1="15.367" y1="5.588" x2="15.621" y2="5.842" width="0.2032" layer="1"/>
+<wire x1="15.367" y1="4.064" x2="15.367" y2="5.588" width="0.2032" layer="16"/>
+<wire x1="14.097" y1="2.794" x2="15.367" y2="4.064" width="0.2032" layer="16"/>
+<wire x1="14.097" y1="1.524" x2="14.097" y2="2.794" width="0.2032" layer="1"/>
+<via x="15.367" y="5.588" extent="1-16" drill="0.4"/>
+<via x="14.097" y="2.794" extent="1-16" drill="0.4"/>
+</signal>
+<signal name="N$38">
+<contactref element="Q1" pad="1"/>
+<contactref element="R40" pad="2"/>
+<wire x1="17.653" y1="9.437" x2="17.653" y2="9.398" width="0.2032" layer="1"/>
+<wire x1="17.653" y1="9.398" x2="17.907" y2="9.144" width="0.2032" layer="1"/>
+<wire x1="18.0848" y1="7.6962" x2="18.161" y2="7.62" width="0.2032" layer="1"/>
+<wire x1="18.0848" y1="7.6962" x2="18.0848" y2="7.747" width="0.2032" layer="1"/>
+<wire x1="17.907" y1="9.144" x2="17.907" y2="7.874" width="0.2032" layer="1"/>
+<wire x1="17.907" y1="7.874" x2="18.0848" y2="7.6962" width="0.2032" layer="1"/>
+</signal>
+<signal name="RELAY_ON">
+<contactref element="R40" pad="1"/>
+<contactref element="IC2" pad="25"/>
+<wire x1="43.18" y1="13.589" x2="44.831" y2="15.24" width="0.2032" layer="15"/>
+<wire x1="35.687" y1="13.589" x2="43.18" y2="13.589" width="0.2032" layer="15"/>
+<wire x1="34.671" y1="14.605" x2="35.687" y2="13.589" width="0.2032" layer="15"/>
+<wire x1="24.892" y1="14.605" x2="34.671" y2="14.605" width="0.2032" layer="15"/>
+<wire x1="22.225" y1="11.938" x2="24.892" y2="14.605" width="0.2032" layer="15"/>
+<wire x1="19.304" y1="11.938" x2="22.225" y2="11.938" width="0.2032" layer="15"/>
+<wire x1="18.669" y1="12.573" x2="19.304" y2="11.938" width="0.2032" layer="15"/>
+<wire x1="17.653" y1="11.137" x2="17.653" y2="11.176" width="0.2032" layer="1"/>
+<wire x1="18.669" y1="12.192" x2="18.669" y2="12.573" width="0.2032" layer="1"/>
+<wire x1="17.653" y1="11.176" x2="18.669" y2="12.192" width="0.2032" layer="1"/>
+<wire x1="44.831" y1="15.24" x2="60.96" y2="15.24" width="0.2032" layer="15"/>
+<wire x1="60.96" y1="15.24" x2="61.722" y2="16.002" width="0.2032" layer="15"/>
+<wire x1="61.722" y1="16.002" x2="63.246" y2="16.002" width="0.2032" layer="15"/>
+<wire x1="63.246" y1="16.002" x2="62.865" y2="16.002" width="0.2032" layer="16"/>
+<wire x1="63.219" y1="15.975" x2="59.211" y2="15.975" width="0.2032" layer="1"/>
+<wire x1="63.246" y1="16.002" x2="63.219" y2="15.975" width="0.2032" layer="1"/>
+<via x="63.246" y="16.002" extent="1-16" drill="0.4"/>
+<via x="18.669" y="12.573" extent="1-16" drill="0.4"/>
+</signal>
+<signal name="N$36">
+<contactref element="RLY1" pad="9"/>
+<contactref element="C14" pad="1"/>
+<contactref element="R21" pad="1"/>
+<wire x1="9.779" y1="6.604" x2="8.382" y2="8.001" width="0.2032" layer="1"/>
+<wire x1="8.382" y1="8.001" x2="8.382" y2="13.462" width="0.2032" layer="1"/>
+<wire x1="8.382" y1="13.462" x2="6.858" y2="14.986" width="0.2032" layer="1"/>
+<wire x1="5.969" y1="15.113" x2="5.881" y2="15.025" width="0.2032" layer="1"/>
+<wire x1="5.881" y1="15.025" x2="5.842" y2="15.025" width="0.2032" layer="1"/>
+<wire x1="6.858" y1="14.986" x2="6.096" y2="14.986" width="0.2032" layer="1"/>
+<wire x1="6.096" y1="14.986" x2="5.969" y2="15.113" width="0.2032" layer="1"/>
+<wire x1="8.382" y1="13.462" x2="9.271" y2="14.351" width="0.2032" layer="1"/>
+<wire x1="9.271" y1="14.351" x2="11.176" y2="14.351" width="0.2032" layer="1"/>
+<wire x1="11.176" y1="14.351" x2="19.304" y2="14.351" width="0.2032" layer="15"/>
+<wire x1="19.304" y1="14.351" x2="19.431" y2="14.478" width="0.2032" layer="15"/>
+<wire x1="10.033" y1="2.332" x2="10.033" y2="2.286" width="0.2032" layer="1"/>
+<wire x1="9.779" y1="2.54" x2="9.779" y2="6.604" width="0.2032" layer="1"/>
+<wire x1="10.033" y1="2.286" x2="9.779" y2="2.54" width="0.2032" layer="1"/>
+<wire x1="19.177" y1="19.558" x2="19.138" y2="19.597" width="0.2032" layer="1"/>
+<wire x1="19.138" y1="19.597" x2="19.138" y2="19.685" width="0.2032" layer="1"/>
+<wire x1="19.304" y1="22.352" x2="19.304" y2="19.685" width="0.2032" layer="1"/>
+<wire x1="19.304" y1="19.685" x2="19.177" y2="19.558" width="0.2032" layer="1"/>
+<wire x1="19.558" y1="22.352" x2="19.304" y2="22.352" width="0.2032" layer="16"/>
+<wire x1="19.812" y1="22.098" x2="19.558" y2="22.352" width="0.2032" layer="16"/>
+<wire x1="19.812" y1="14.859" x2="19.812" y2="22.098" width="0.2032" layer="16"/>
+<wire x1="19.431" y1="14.478" x2="19.812" y2="14.859" width="0.2032" layer="16"/>
+<via x="11.176" y="14.351" extent="1-16" drill="0.4"/>
+<via x="19.431" y="14.478" extent="1-16" drill="0.4"/>
+<via x="19.304" y="22.352" extent="1-16" drill="0.4"/>
+</signal>
+<signal name="N$37">
+<contactref element="RLY1" pad="7"/>
+<contactref element="C42" pad="1"/>
+<wire x1="4.699" y1="4.826" x2="4.318" y2="5.207" width="0.2032" layer="1"/>
+<wire x1="4.318" y1="5.207" x2="1.143" y2="8.382" width="0.2032" layer="16"/>
+<wire x1="1.143" y1="8.382" x2="1.143" y2="30.861" width="0.2032" layer="16"/>
+<wire x1="1.143" y1="30.861" x2="1.397" y2="31.115" width="0.2032" layer="15"/>
+<wire x1="1.397" y1="31.115" x2="30.734" y2="31.115" width="0.2032" layer="15"/>
+<wire x1="30.734" y1="31.115" x2="31.496" y2="30.353" width="0.2032" layer="15"/>
+<wire x1="31.496" y1="30.353" x2="31.496" y2="29.972" width="0.2032" layer="15"/>
+<wire x1="31.496" y1="29.972" x2="31.496" y2="30.099" width="0.2032" layer="1"/>
+<wire x1="31.623" y1="33.147" x2="31.027" y2="33.147" width="0.2032" layer="1"/>
+<wire x1="31.877" y1="32.893" x2="31.623" y2="33.147" width="0.2032" layer="1"/>
+<wire x1="31.877" y1="30.353" x2="31.877" y2="32.893" width="0.2032" layer="1"/>
+<wire x1="31.496" y1="29.972" x2="31.877" y2="30.353" width="0.2032" layer="1"/>
+<wire x1="4.953" y1="2.332" x2="4.953" y2="2.159" width="0.2032" layer="1"/>
+<wire x1="4.699" y1="2.413" x2="4.699" y2="4.826" width="0.2032" layer="1"/>
+<wire x1="4.953" y1="2.159" x2="4.699" y2="2.413" width="0.2032" layer="1"/>
+<via x="4.318" y="5.207" extent="1-16" drill="0.4"/>
+<via x="1.143" y="30.861" extent="1-16" drill="0.4"/>
+<via x="31.496" y="29.972" extent="1-16" drill="0.4"/>
+</signal>
+<signal name="ANT_HI">
+<contactref element="RLY1" pad="8"/>
+<contactref element="SV2" pad="4"/>
+<contactref element="C36" pad="1"/>
+<contactref element="C35" pad="1"/>
+<contactref element="TP3" pad="1"/>
+<wire x1="6.877" y1="22.079" x2="6.877" y2="22.549" width="0.2032" layer="1"/>
+<wire x1="7.239" y1="21.717" x2="6.877" y2="22.079" width="0.2032" layer="1"/>
+<wire x1="10.16" y1="21.717" x2="7.239" y2="21.717" width="0.2032" layer="1"/>
+<wire x1="10.414" y1="21.463" x2="10.16" y2="21.717" width="0.2032" layer="1"/>
+<wire x1="10.414" y1="20.193" x2="10.414" y2="20.447" width="0.2032" layer="1"/>
+<wire x1="10.414" y1="20.193" x2="10.414" y2="21.463" width="0.2032" layer="1"/>
+<wire x1="10.287" y1="20.066" x2="10.414" y2="20.193" width="0.2032" layer="1"/>
+<wire x1="10.16" y1="23.368" x2="10.199" y2="23.368" width="0.2032" layer="1"/>
+<wire x1="10.16" y1="21.717" x2="10.16" y2="23.241" width="0.2032" layer="1"/>
+<wire x1="10.16" y1="23.241" x2="10.16" y2="23.368" width="0.2032" layer="1"/>
+<wire x1="10.199" y1="23.28" x2="10.199" y2="23.368" width="0.2032" layer="1"/>
+<wire x1="10.199" y1="23.28" x2="10.199" y2="25.019" width="0.2032" layer="1"/>
+<wire x1="10.16" y1="23.241" x2="10.199" y2="23.28" width="0.2032" layer="1"/>
+<wire x1="9.144" y1="20.066" x2="10.287" y2="20.066" width="0.2032" layer="1"/>
+<wire x1="8.255" y1="19.177" x2="9.144" y2="20.066" width="0.2032" layer="1"/>
+<wire x1="8.255" y1="5.715" x2="8.255" y2="19.177" width="0.2032" layer="16"/>
+<wire x1="7.239" y1="4.699" x2="8.255" y2="5.715" width="0.2032" layer="16"/>
+<wire x1="7.239" y1="2.032" x2="7.239" y2="4.699" width="0.2032" layer="1"/>
+<wire x1="7.493" y1="2.332" x2="7.493" y2="2.286" width="0.2032" layer="1"/>
+<wire x1="7.493" y1="2.286" x2="7.239" y2="2.032" width="0.2032" layer="1"/>
+<via x="8.255" y="19.177" extent="1-16" drill="0.4"/>
+<via x="7.239" y="4.699" extent="1-16" drill="0.4"/>
+</signal>
+<signal name="ANT_LO">
+<contactref element="RLY1" pad="3"/>
+<contactref element="SV2" pad="2"/>
+<contactref element="C39" pad="1"/>
+<contactref element="C20" pad="1"/>
+<contactref element="TP2" pad="1"/>
+<wire x1="8.401" y1="24.149" x2="6.877" y2="24.149" width="0.2032" layer="1"/>
+<wire x1="9.144" y1="24.892" x2="8.401" y2="24.149" width="0.2032" layer="1"/>
+<wire x1="9.144" y1="25.908" x2="9.144" y2="24.892" width="0.2032" layer="1"/>
+<wire x1="9.144" y1="25.908" x2="9.144" y2="26.289" width="0.2032" layer="1"/>
+<wire x1="9.144" y1="26.289" x2="9.652" y2="26.797" width="0.2032" layer="1"/>
+<wire x1="9.652" y1="26.797" x2="10.199" y2="26.797" width="0.2032" layer="1"/>
+<wire x1="10.287" y1="26.797" x2="10.414" y2="26.67" width="0.2032" layer="1"/>
+<wire x1="10.199" y1="26.797" x2="10.287" y2="26.797" width="0.2032" layer="1"/>
+<wire x1="10.199" y1="26.885" x2="10.199" y2="28.448" width="0.2032" layer="1"/>
+<wire x1="10.287" y1="26.797" x2="10.199" y2="26.885" width="0.2032" layer="1"/>
+<wire x1="8.128" y1="25.908" x2="9.144" y2="25.908" width="0.2032" layer="1"/>
+<wire x1="7.874" y1="26.162" x2="8.128" y2="25.908" width="0.2032" layer="1"/>
+<wire x1="7.874" y1="23.241" x2="7.874" y2="26.162" width="0.2032" layer="16"/>
+<wire x1="2.54" y1="15.748" x2="2.54" y2="15.875" width="0.2032" layer="1"/>
+<wire x1="2.667" y1="15.875" x2="2.54" y2="15.748" width="0.2032" layer="1"/>
+<wire x1="2.667" y1="15.875" x2="2.667" y2="17.145" width="0.2032" layer="1"/>
+<wire x1="2.667" y1="17.145" x2="3.175" y2="17.653" width="0.2032" layer="1"/>
+<wire x1="3.175" y1="17.653" x2="3.302" y2="17.78" width="0.2032" layer="16"/>
+<wire x1="3.302" y1="18.669" x2="7.874" y2="23.241" width="0.2032" layer="16"/>
+<wire x1="3.302" y1="17.78" x2="3.302" y2="18.669" width="0.2032" layer="16"/>
+<wire x1="2.667" y1="14.351" x2="2.667" y2="15.875" width="0.2032" layer="1"/>
+<wire x1="3.048" y1="13.97" x2="2.667" y2="14.351" width="0.2032" layer="1"/>
+<wire x1="7.3025" y1="11.7475" x2="7.366" y2="11.684" width="0.2032" layer="1"/>
+<wire x1="7.3025" y1="11.7475" x2="7.112" y2="11.938" width="0.2032" layer="1"/>
+<wire x1="6.477" y1="13.97" x2="3.048" y2="13.97" width="0.2032" layer="1"/>
+<wire x1="7.366" y1="13.081" x2="6.477" y2="13.97" width="0.2032" layer="1"/>
+<wire x1="7.493" y1="11.892" x2="7.493" y2="11.811" width="0.2032" layer="1"/>
+<wire x1="7.366" y1="11.938" x2="7.366" y2="13.081" width="0.2032" layer="1"/>
+<wire x1="7.493" y1="11.811" x2="7.366" y2="11.938" width="0.2032" layer="1"/>
+<wire x1="7.3025" y1="11.7475" x2="7.239" y2="11.684" width="0.2032" layer="1"/>
+<wire x1="7.366" y1="11.938" x2="7.366" y2="11.811" width="0.2032" layer="1"/>
+<wire x1="7.366" y1="11.811" x2="7.3025" y2="11.7475" width="0.2032" layer="1"/>
+<via x="7.874" y="26.162" extent="1-16" drill="0.4"/>
+<via x="3.175" y="17.653" extent="1-16" drill="0.4"/>
+</signal>
+<signal name="N$39">
+<contactref element="R20" pad="1"/>
+<contactref element="D1" pad="1"/>
+<contactref element="RLY1" pad="2"/>
+<wire x1="9.779" y1="8.89" x2="9.779" y2="17.018" width="0.2032" layer="16"/>
+<wire x1="9.779" y1="17.018" x2="12.954" y2="20.193" width="0.2032" layer="16"/>
+<wire x1="14.224" y1="13.843" x2="13.716" y2="13.335" width="0.2032" layer="16"/>
+<wire x1="13.716" y1="13.335" x2="21.082" y2="13.335" width="0.2032" layer="15"/>
+<wire x1="21.082" y1="13.335" x2="21.717" y2="12.7" width="0.2032" layer="15"/>
+<wire x1="22.225" y1="11.684" x2="22.2758" y2="11.684" width="0.2032" layer="1"/>
+<wire x1="21.717" y1="12.7" x2="21.717" y2="12.192" width="0.2032" layer="1"/>
+<wire x1="21.717" y1="12.192" x2="22.225" y2="11.684" width="0.2032" layer="1"/>
+<wire x1="10.033" y1="9.144" x2="10.033" y2="11.892" width="0.2032" layer="1"/>
+<wire x1="9.779" y1="8.89" x2="10.033" y2="9.144" width="0.2032" layer="1"/>
+<wire x1="14.224" y1="18.923" x2="14.224" y2="13.843" width="0.2032" layer="16"/>
+<wire x1="12.954" y1="20.193" x2="14.224" y2="18.923" width="0.2032" layer="16"/>
+<wire x1="12.954" y1="20.193" x2="12.954" y2="19.939" width="0.2032" layer="1"/>
+<wire x1="13.208" y1="19.685" x2="14.009" y2="19.685" width="0.2032" layer="1"/>
+<wire x1="12.954" y1="19.939" x2="13.208" y2="19.685" width="0.2032" layer="1"/>
+<via x="9.779" y="8.89" extent="1-16" drill="0.4"/>
+<via x="12.954" y="20.193" extent="1-16" drill="0.4"/>
+<via x="13.716" y="13.335" extent="1-16" drill="0.4"/>
+<via x="21.717" y="12.7" extent="1-16" drill="0.4"/>
+</signal>
+<signal name="N$46">
+<contactref element="RLY1" pad="4"/>
+<contactref element="C43" pad="1"/>
+<wire x1="4.699" y1="9.525" x2="4.699" y2="17.272" width="0.2032" layer="16"/>
+<wire x1="4.699" y1="17.272" x2="12.573" y2="25.146" width="0.2032" layer="16"/>
+<wire x1="12.573" y1="25.146" x2="12.573" y2="30.226" width="0.2032" layer="16"/>
+<wire x1="14.859" y1="30.099" x2="14.859" y2="30.138" width="0.2032" layer="1"/>
+<wire x1="12.573" y1="30.226" x2="14.732" y2="30.226" width="0.2032" layer="1"/>
+<wire x1="14.732" y1="30.226" x2="14.859" y2="30.099" width="0.2032" layer="1"/>
+<wire x1="4.953" y1="9.779" x2="4.953" y2="11.892" width="0.2032" layer="1"/>
+<wire x1="4.699" y1="9.525" x2="4.953" y2="9.779" width="0.2032" layer="1"/>
+<via x="4.699" y="9.525" extent="1-16" drill="0.4"/>
+<via x="12.573" y="30.226" extent="1-16" drill="0.4"/>
+</signal>
+<signal name="AMPL_HI">
+<contactref element="IC2" pad="4"/>
+<contactref element="R41" pad="2"/>
+<contactref element="R42" pad="2"/>
+<wire x1="67.461" y1="24.487" x2="67.461" y2="22.225" width="0.2032" layer="1"/>
+<wire x1="67.183" y1="24.765" x2="67.461" y2="24.487" width="0.2032" layer="1"/>
+<wire x1="31.496" y1="26.67" x2="31.877" y2="26.289" width="0.2032" layer="15"/>
+<wire x1="24.13" y1="26.67" x2="31.496" y2="26.67" width="0.2032" layer="15"/>
+<wire x1="23.368" y1="25.908" x2="24.13" y2="26.67" width="0.2032" layer="15"/>
+<wire x1="23.368" y1="25.4" x2="23.368" y2="25.908" width="0.2032" layer="15"/>
+<wire x1="23.368" y1="22.059" x2="23.368" y2="25.4" width="0.2032" layer="1"/>
+<wire x1="21.717" y1="22.059" x2="21.717" y2="21.971" width="0.2032" layer="1"/>
+<wire x1="21.805" y1="22.059" x2="23.368" y2="22.059" width="0.2032" layer="1"/>
+<wire x1="21.717" y1="21.971" x2="21.805" y2="22.059" width="0.2032" layer="1"/>
+<wire x1="31.877" y1="26.289" x2="65.659" y2="26.289" width="0.2032" layer="15"/>
+<wire x1="65.659" y1="26.289" x2="67.183" y2="24.765" width="0.2032" layer="15"/>
+<via x="67.183" y="24.765" extent="1-16" drill="0.4"/>
+<via x="23.368" y="25.4" extent="1-16" drill="0.4"/>
+</signal>
+<signal name="BUTTON_A">
+<contactref element="IC2" pad="15"/>
+<contactref element="SW1" pad="B"/>
+<contactref element="R43" pad="1"/>
+<wire x1="69.052" y1="32.04" x2="69.922" y2="32.04" width="0.2032" layer="1"/>
+<wire x1="68.707" y1="32.385" x2="69.052" y2="32.04" width="0.2032" layer="1"/>
+<wire x1="67.31" y1="32.551" x2="67.31" y2="32.512" width="0.2032" layer="1"/>
+<wire x1="67.437" y1="32.385" x2="68.707" y2="32.385" width="0.2032" layer="1"/>
+<wire x1="67.31" y1="32.512" x2="67.437" y2="32.385" width="0.2032" layer="1"/>
+<wire x1="60.833" y1="24.765" x2="60.833" y2="30.353" width="0.2032" layer="1"/>
+<wire x1="61.961" y1="22.225" x2="61.961" y2="23.637" width="0.2032" layer="1"/>
+<wire x1="61.961" y1="23.637" x2="60.833" y2="24.765" width="0.2032" layer="1"/>
+<wire x1="60.833" y1="30.353" x2="61.087" y2="30.607" width="0.2032" layer="1"/>
+<wire x1="61.087" y1="30.607" x2="66.04" y2="30.607" width="0.2032" layer="1"/>
+<wire x1="67.31" y1="32.551" x2="67.31" y2="32.639" width="0.2032" layer="1"/>
+<wire x1="66.04" y1="30.607" x2="67.31" y2="31.877" width="0.2032" layer="1"/>
+<wire x1="67.31" y1="31.877" x2="67.31" y2="32.551" width="0.2032" layer="1"/>
+</signal>
+<signal name="LED_A">
+<contactref element="IC2" pad="48"/>
+<contactref element="R24" pad="1"/>
+<wire x1="70.931" y1="10.225" x2="68.961" y2="10.225" width="0.2032" layer="1"/>
+<wire x1="71.12" y1="10.414" x2="70.931" y2="10.225" width="0.2032" layer="1"/>
+<wire x1="71.12" y1="23.622" x2="71.12" y2="10.414" width="0.2032" layer="16"/>
+<wire x1="70.739" y1="24.003" x2="71.12" y2="23.622" width="0.2032" layer="16"/>
+<wire x1="65.405" y1="24.003" x2="70.739" y2="24.003" width="0.2032" layer="15"/>
+<wire x1="64.262" y1="22.86" x2="65.405" y2="24.003" width="0.2032" layer="15"/>
+<wire x1="60.071" y1="22.86" x2="64.262" y2="22.86" width="0.2032" layer="15"/>
+<wire x1="58.928" y1="24.003" x2="60.071" y2="22.86" width="0.2032" layer="15"/>
+<wire x1="56.515" y1="24.003" x2="58.928" y2="24.003" width="0.2032" layer="15"/>
+<wire x1="56.261" y1="24.257" x2="56.515" y2="24.003" width="0.2032" layer="15"/>
+<wire x1="56.222" y1="25.312" x2="56.134" y2="25.4" width="0.2032" layer="1"/>
+<wire x1="56.261" y1="25.312" x2="56.222" y2="25.312" width="0.2032" layer="1"/>
+<wire x1="56.261" y1="25.273" x2="56.261" y2="24.257" width="0.2032" layer="1"/>
+<wire x1="56.222" y1="25.312" x2="56.261" y2="25.273" width="0.2032" layer="1"/>
+<via x="71.12" y="10.414" extent="1-16" drill="0.4"/>
+<via x="70.739" y="24.003" extent="1-16" drill="0.4"/>
+<via x="56.261" y="24.257" extent="1-16" drill="0.4"/>
+</signal>
+<signal name="LED_B">
+<contactref element="IC2" pad="31"/>
+<contactref element="R25" pad="1"/>
+<wire x1="59.211" y1="12.975" x2="61.616" y2="12.975" width="0.2032" layer="1"/>
+<wire x1="61.616" y1="12.975" x2="62.103" y2="13.462" width="0.2032" layer="1"/>
+<wire x1="62.103" y1="13.462" x2="62.865" y2="13.462" width="0.2032" layer="15"/>
+<wire x1="62.865" y1="13.462" x2="64.643" y2="11.684" width="0.2032" layer="15"/>
+<wire x1="64.643" y1="11.684" x2="72.771" y2="11.684" width="0.2032" layer="15"/>
+<wire x1="72.771" y1="11.684" x2="73.025" y2="11.938" width="0.2032" layer="15"/>
+<wire x1="73.025" y1="11.938" x2="72.136" y2="11.938" width="0.2032" layer="16"/>
+<wire x1="72.136" y1="11.938" x2="71.755" y2="12.319" width="0.2032" layer="16"/>
+<wire x1="71.755" y1="12.319" x2="71.755" y2="34.417" width="0.2032" layer="16"/>
+<wire x1="71.755" y1="34.417" x2="71.374" y2="34.798" width="0.2032" layer="16"/>
+<wire x1="71.374" y1="34.798" x2="60.071" y2="34.798" width="0.2032" layer="15"/>
+<wire x1="60.071" y1="34.798" x2="59.563" y2="34.29" width="0.2032" layer="15"/>
+<wire x1="58.674" y1="25.273" x2="58.674" y2="25.312" width="0.2032" layer="1"/>
+<wire x1="59.69" y1="25.273" x2="58.674" y2="25.273" width="0.2032" layer="1"/>
+<wire x1="59.817" y1="25.4" x2="59.69" y2="25.273" width="0.2032" layer="1"/>
+<wire x1="59.817" y1="30.988" x2="59.817" y2="25.4" width="0.2032" layer="1"/>
+<wire x1="59.309" y1="31.496" x2="59.817" y2="30.988" width="0.2032" layer="1"/>
+<wire x1="59.309" y1="34.036" x2="59.309" y2="31.496" width="0.2032" layer="1"/>
+<wire x1="59.563" y1="34.29" x2="59.309" y2="34.036" width="0.2032" layer="1"/>
+<via x="62.103" y="13.462" extent="1-16" drill="0.4"/>
+<via x="73.025" y="11.938" extent="1-16" drill="0.4"/>
+<via x="71.374" y="34.798" extent="1-16" drill="0.4"/>
+<via x="59.563" y="34.29" extent="1-16" drill="0.4"/>
+</signal>
+<signal name="LED_C">
+<contactref element="IC2" pad="30"/>
+<contactref element="R26" pad="1"/>
+<wire x1="57.798" y1="13.475" x2="59.211" y2="13.475" width="0.2032" layer="1"/>
+<wire x1="57.531" y1="13.208" x2="57.798" y2="13.475" width="0.2032" layer="1"/>
+<wire x1="57.531" y1="12.192" x2="57.531" y2="13.208" width="0.2032" layer="1"/>
+<wire x1="58.293" y1="11.43" x2="57.531" y2="12.192" width="0.2032" layer="1"/>
+<wire x1="58.293" y1="10.541" x2="58.293" y2="11.43" width="0.2032" layer="1"/>
+<wire x1="58.801" y1="10.033" x2="58.293" y2="10.541" width="0.2032" layer="1"/>
+<wire x1="58.801" y1="10.033" x2="58.801" y2="10.414" width="0.2032" layer="15"/>
+<wire x1="58.801" y1="10.414" x2="59.563" y2="11.176" width="0.2032" layer="15"/>
+<wire x1="59.563" y1="11.176" x2="61.849" y2="11.176" width="0.2032" layer="15"/>
+<wire x1="61.849" y1="11.176" x2="62.357" y2="10.668" width="0.2032" layer="15"/>
+<wire x1="62.357" y1="10.668" x2="69.469" y2="10.668" width="0.2032" layer="15"/>
+<wire x1="69.469" y1="10.668" x2="70.485" y2="9.652" width="0.2032" layer="15"/>
+<wire x1="70.485" y1="9.652" x2="72.39" y2="9.652" width="0.2032" layer="15"/>
+<wire x1="72.39" y1="9.652" x2="73.152" y2="8.89" width="0.2032" layer="15"/>
+<wire x1="73.152" y1="8.89" x2="73.66" y2="8.89" width="0.2032" layer="16"/>
+<wire x1="73.66" y1="8.89" x2="74.549" y2="9.779" width="0.2032" layer="16"/>
+<wire x1="74.549" y1="9.779" x2="74.549" y2="11.684" width="0.2032" layer="16"/>
+<wire x1="74.549" y1="11.684" x2="73.279" y2="12.954" width="0.2032" layer="16"/>
+<wire x1="73.279" y1="12.954" x2="72.644" y2="12.954" width="0.2032" layer="16"/>
+<wire x1="72.644" y1="12.954" x2="72.263" y2="13.335" width="0.2032" layer="16"/>
+<wire x1="72.263" y1="13.335" x2="72.263" y2="38.227" width="0.2032" layer="16"/>
+<wire x1="72.263" y1="38.227" x2="71.755" y2="38.735" width="0.2032" layer="16"/>
+<wire x1="71.755" y1="38.735" x2="70.993" y2="39.497" width="0.2032" layer="15"/>
+<wire x1="70.993" y1="39.497" x2="53.34" y2="39.497" width="0.2032" layer="15"/>
+<wire x1="53.34" y1="39.497" x2="52.578" y2="38.735" width="0.2032" layer="15"/>
+<wire x1="52.578" y1="38.735" x2="52.578" y2="27.94" width="0.2032" layer="16"/>
+<wire x1="52.578" y1="27.94" x2="52.451" y2="27.813" width="0.2032" layer="16"/>
+<wire x1="52.451" y1="27.813" x2="52.451" y2="26.162" width="0.2032" layer="1"/>
+<wire x1="52.451" y1="26.162" x2="53.086" y2="25.527" width="0.2032" layer="1"/>
+<wire x1="53.848" y1="25.273" x2="53.848" y2="25.312" width="0.2032" layer="1"/>
+<wire x1="53.086" y1="25.527" x2="53.594" y2="25.527" width="0.2032" layer="1"/>
+<wire x1="53.594" y1="25.527" x2="53.848" y2="25.273" width="0.2032" layer="1"/>
+<via x="58.801" y="10.033" extent="1-16" drill="0.4"/>
+<via x="73.152" y="8.89" extent="1-16" drill="0.4"/>
+<via x="71.755" y="38.735" extent="1-16" drill="0.4"/>
+<via x="52.578" y="38.735" extent="1-16" drill="0.4"/>
+<via x="52.451" y="27.813" extent="1-16" drill="0.4"/>
+</signal>
+<signal name="SSP_DIN">
+<contactref element="IC2" pad="10"/>
+<contactref element="IC1" pad="32"/>
+<wire x1="53.72" y1="8.811" x2="54.816" y2="8.811" width="0.2032" layer="1"/>
+<wire x1="64.461" y1="23.55" x2="64.461" y2="22.225" width="0.2032" layer="1"/>
+<wire x1="63.881" y1="24.13" x2="64.461" y2="23.55" width="0.2032" layer="1"/>
+<wire x1="63.246" y1="23.495" x2="63.881" y2="24.13" width="0.2032" layer="15"/>
+<wire x1="60.325" y1="23.495" x2="63.246" y2="23.495" width="0.2032" layer="15"/>
+<wire x1="58.547" y1="25.273" x2="60.325" y2="23.495" width="0.2032" layer="15"/>
+<wire x1="55.245" y1="25.273" x2="58.547" y2="25.273" width="0.2032" layer="15"/>
+<wire x1="54.991" y1="25.019" x2="55.245" y2="25.273" width="0.2032" layer="15"/>
+<wire x1="54.991" y1="24.13" x2="54.991" y2="25.019" width="0.2032" layer="15"/>
+<wire x1="54.991" y1="17.78" x2="54.991" y2="24.13" width="0.2032" layer="16"/>
+<wire x1="53.975" y1="16.764" x2="54.991" y2="17.78" width="0.2032" layer="16"/>
+<wire x1="53.975" y1="9.271" x2="53.975" y2="16.764" width="0.2032" layer="16"/>
+<wire x1="55.118" y1="8.128" x2="53.975" y2="9.271" width="0.2032" layer="16"/>
+<wire x1="55.372" y1="8.128" x2="55.118" y2="8.128" width="0.2032" layer="16"/>
+<wire x1="55.372" y1="8.255" x2="55.372" y2="8.128" width="0.2032" layer="1"/>
+<wire x1="54.816" y1="8.811" x2="55.372" y2="8.255" width="0.2032" layer="1"/>
+<via x="63.881" y="24.13" extent="1-16" drill="0.4"/>
+<via x="54.991" y="24.13" extent="1-16" drill="0.4"/>
+<via x="55.372" y="8.128" extent="1-16" drill="0.4"/>
+</signal>
+<signal name="SSP_DOUT">
+<contactref element="IC2" pad="9"/>
+<contactref element="IC1" pad="34"/>
+<wire x1="54.356" y1="38.1" x2="55.88" y2="36.576" width="0.2032" layer="15"/>
+<wire x1="54.356" y1="35.941" x2="54.356" y2="38.1" width="0.2032" layer="16"/>
+<wire x1="53.467" y1="35.052" x2="54.356" y2="35.941" width="0.2032" layer="16"/>
+<wire x1="64.961" y1="24.574" x2="64.961" y2="22.225" width="0.2032" layer="1"/>
+<wire x1="64.643" y1="24.892" x2="64.961" y2="24.574" width="0.2032" layer="1"/>
+<wire x1="64.77" y1="25.019" x2="64.643" y2="24.892" width="0.2032" layer="16"/>
+<wire x1="52.832" y1="17.526" x2="52.832" y2="20.574" width="0.2032" layer="16"/>
+<wire x1="52.959" y1="17.399" x2="52.832" y2="17.526" width="0.2032" layer="16"/>
+<wire x1="52.959" y1="10.668" x2="52.959" y2="17.399" width="0.2032" layer="16"/>
+<wire x1="52.07" y1="9.779" x2="52.959" y2="10.668" width="0.2032" layer="16"/>
+<wire x1="52.07" y1="9.779" x2="52.578" y2="9.779" width="0.2032" layer="1"/>
+<wire x1="52.61" y1="9.811" x2="53.72" y2="9.811" width="0.2032" layer="1"/>
+<wire x1="52.578" y1="9.779" x2="52.61" y2="9.811" width="0.2032" layer="1"/>
+<wire x1="55.88" y1="36.576" x2="61.849" y2="36.576" width="0.2032" layer="15"/>
+<wire x1="61.849" y1="36.576" x2="62.611" y2="37.338" width="0.2032" layer="15"/>
+<wire x1="64.77" y1="36.957" x2="64.77" y2="37.084" width="0.2032" layer="15"/>
+<wire x1="62.611" y1="37.338" x2="64.389" y2="37.338" width="0.2032" layer="15"/>
+<wire x1="64.389" y1="37.338" x2="64.77" y2="36.957" width="0.2032" layer="15"/>
+<wire x1="64.77" y1="37.084" x2="64.77" y2="25.019" width="0.2032" layer="16"/>
+<wire x1="64.77" y1="37.084" x2="64.643" y2="37.211" width="0.2032" layer="16"/>
+<wire x1="53.467" y1="28.067" x2="53.467" y2="35.052" width="0.2032" layer="16"/>
+<wire x1="54.483" y1="27.051" x2="53.467" y2="28.067" width="0.2032" layer="16"/>
+<wire x1="54.483" y1="25.273" x2="54.483" y2="27.051" width="0.2032" layer="16"/>
+<wire x1="54.229" y1="25.019" x2="54.483" y2="25.273" width="0.2032" layer="16"/>
+<wire x1="54.229" y1="21.971" x2="54.229" y2="25.019" width="0.2032" layer="16"/>
+<wire x1="52.832" y1="20.574" x2="54.229" y2="21.971" width="0.2032" layer="16"/>
+<via x="64.643" y="24.892" extent="1-16" drill="0.4"/>
+<via x="64.77" y="37.084" extent="1-16" drill="0.4"/>
+<via x="54.356" y="38.1" extent="1-16" drill="0.4"/>
+<via x="52.07" y="9.779" extent="1-16" drill="0.4"/>
+</signal>
+<signal name="ADC1">
+<contactref element="IC8" pad="3"/>
+<contactref element="IC1" pad="62"/>
+<wire x1="45.365" y1="21.945" x2="45.365" y2="24.232" width="0.2032" layer="1"/>
+<wire x1="45.72" y1="21.59" x2="45.365" y2="21.945" width="0.2032" layer="1"/>
+<wire x1="45.72" y1="21.59" x2="45.847" y2="21.463" width="0.2032" layer="1"/>
+<wire x1="46.22" y1="19.811" x2="46.22" y2="21.09" width="0.2032" layer="1"/>
+<wire x1="46.22" y1="21.09" x2="45.72" y2="21.59" width="0.2032" layer="1"/>
+</signal>
+<signal name="ADC2">
+<contactref element="IC8" pad="4"/>
+<contactref element="IC1" pad="60"/>
+<wire x1="46.015" y1="22.184" x2="46.015" y2="24.232" width="0.2032" layer="1"/>
+<wire x1="47.22" y1="19.811" x2="47.22" y2="20.979" width="0.2032" layer="1"/>
+<wire x1="47.22" y1="20.979" x2="46.015" y2="22.184" width="0.2032" layer="1"/>
+</signal>
+<signal name="ADC3">
+<contactref element="IC8" pad="5"/>
+<contactref element="IC1" pad="58"/>
+<wire x1="46.665" y1="22.55" x2="46.665" y2="24.232" width="0.2032" layer="1"/>
+<wire x1="47.498" y1="21.717" x2="47.625" y2="21.59" width="0.2032" layer="1"/>
+<wire x1="47.498" y1="21.717" x2="46.665" y2="22.55" width="0.2032" layer="1"/>
+<wire x1="48.22" y1="19.811" x2="48.22" y2="20.995" width="0.2032" layer="1"/>
+<wire x1="48.22" y1="20.995" x2="47.498" y2="21.717" width="0.2032" layer="1"/>
+</signal>
+<signal name="ADC4">
+<contactref element="IC8" pad="6"/>
+<contactref element="IC1" pad="57"/>
+<wire x1="47.315" y1="22.662" x2="47.315" y2="24.232" width="0.2032" layer="1"/>
+<wire x1="48.514" y1="21.463" x2="47.315" y2="22.662" width="0.2032" layer="1"/>
+<wire x1="48.514" y1="21.463" x2="48.641" y2="21.336" width="0.2032" layer="1"/>
+<wire x1="48.72" y1="19.811" x2="48.72" y2="21.257" width="0.2032" layer="1"/>
+<wire x1="48.72" y1="21.257" x2="48.514" y2="21.463" width="0.2032" layer="1"/>
+</signal>
+<signal name="ADC5">
+<contactref element="IC8" pad="7"/>
+<contactref element="IC1" pad="56"/>
+<wire x1="47.965" y1="22.647" x2="47.965" y2="24.232" width="0.2032" layer="1"/>
+<wire x1="48.895" y1="21.717" x2="47.965" y2="22.647" width="0.2032" layer="1"/>
+<wire x1="48.895" y1="21.717" x2="49.022" y2="21.59" width="0.2032" layer="1"/>
+<wire x1="49.22" y1="19.811" x2="49.22" y2="21.392" width="0.2032" layer="1"/>
+<wire x1="49.22" y1="21.392" x2="48.895" y2="21.717" width="0.2032" layer="1"/>
+</signal>
+<signal name="ADC6">
+<contactref element="IC8" pad="8"/>
+<contactref element="IC1" pad="55"/>
+<wire x1="48.615" y1="22.759" x2="48.615" y2="24.232" width="0.2032" layer="1"/>
+<wire x1="49.53" y1="21.844" x2="49.657" y2="21.717" width="0.2032" layer="1"/>
+<wire x1="49.53" y1="21.844" x2="48.615" y2="22.759" width="0.2032" layer="1"/>
+<wire x1="49.72" y1="19.811" x2="49.72" y2="21.654" width="0.2032" layer="1"/>
+<wire x1="49.72" y1="21.654" x2="49.53" y2="21.844" width="0.2032" layer="1"/>
+</signal>
+<signal name="ADC7">
+<contactref element="IC8" pad="9"/>
+<contactref element="IC1" pad="54"/>
+<wire x1="49.265" y1="22.744" x2="49.265" y2="24.232" width="0.2032" layer="1"/>
+<wire x1="50.038" y1="21.971" x2="50.165" y2="21.844" width="0.2032" layer="1"/>
+<wire x1="50.038" y1="21.971" x2="49.265" y2="22.744" width="0.2032" layer="1"/>
+<wire x1="50.22" y1="19.811" x2="50.22" y2="21.789" width="0.2032" layer="1"/>
+<wire x1="50.22" y1="21.789" x2="50.038" y2="21.971" width="0.2032" layer="1"/>
+</signal>
+<signal name="ADC8">
+<contactref element="IC8" pad="10"/>
+<contactref element="IC1" pad="53"/>
+<wire x1="49.915" y1="22.983" x2="49.915" y2="24.232" width="0.2032" layer="1"/>
+<wire x1="50.292" y1="22.606" x2="50.673" y2="22.225" width="0.2032" layer="1"/>
+<wire x1="50.292" y1="22.606" x2="49.915" y2="22.983" width="0.2032" layer="1"/>
+<wire x1="50.72" y1="19.811" x2="50.72" y2="22.178" width="0.2032" layer="1"/>
+<wire x1="50.72" y1="22.178" x2="50.292" y2="22.606" width="0.2032" layer="1"/>
+</signal>
+<signal name="ADC_NOE">
+<contactref element="IC8" pad="1"/>
+<contactref element="IC1" pad="47"/>
+<contactref element="R47" pad="2"/>
+<wire x1="43.84" y1="24.232" x2="44.065" y2="24.232" width="0.2032" layer="1"/>
+<wire x1="42.418" y1="25.361" x2="42.711" y2="25.361" width="0.2032" layer="1"/>
+<wire x1="42.711" y1="25.361" x2="43.84" y2="24.232" width="0.2032" layer="1"/>
+<wire x1="52.777" y1="16.311" x2="53.72" y2="16.311" width="0.2032" layer="1"/>
+<wire x1="52.197" y1="16.891" x2="52.777" y2="16.311" width="0.2032" layer="1"/>
+<wire x1="52.197" y1="21.844" x2="52.197" y2="16.891" width="0.2032" layer="16"/>
+<wire x1="44.069" y1="23.241" x2="43.815" y2="22.987" width="0.2032" layer="1"/>
+<wire x1="44.044" y1="24.232" x2="43.942" y2="24.13" width="0.2032" layer="1"/>
+<wire x1="44.065" y1="24.232" x2="44.044" y2="24.232" width="0.2032" layer="1"/>
+<wire x1="44.069" y1="24.003" x2="44.069" y2="23.241" width="0.2032" layer="1"/>
+<wire x1="43.942" y1="24.13" x2="44.069" y2="24.003" width="0.2032" layer="1"/>
+<wire x1="43.815" y1="22.987" x2="43.688" y2="22.86" width="0.2032" layer="1"/>
+<wire x1="43.815" y1="22.987" x2="43.815" y2="22.86" width="0.2032" layer="15"/>
+<wire x1="43.815" y1="22.86" x2="43.688" y2="22.987" width="0.2032" layer="15"/>
+<wire x1="53.467" y1="23.114" x2="52.197" y2="21.844" width="0.2032" layer="16"/>
+<wire x1="53.467" y1="24.13" x2="53.467" y2="23.114" width="0.2032" layer="16"/>
+<wire x1="44.958" y1="24.13" x2="53.467" y2="24.13" width="0.2032" layer="15"/>
+<wire x1="43.815" y1="22.987" x2="44.958" y2="24.13" width="0.2032" layer="15"/>
+<via x="52.197" y="16.891" extent="1-16" drill="0.4"/>
+<via x="53.467" y="24.13" extent="1-16" drill="0.4"/>
+<via x="43.815" y="22.987" extent="1-16" drill="0.4"/>
+</signal>
+<signal name="ADC_CLK">
+<contactref element="IC8" pad="12"/>
+<contactref element="IC1" pad="46"/>
+<wire x1="51.562" y1="22.606" x2="52.07" y2="23.114" width="0.2032" layer="16"/>
+<wire x1="51.562" y1="24.257" x2="51.537" y2="24.232" width="0.2032" layer="1"/>
+<wire x1="51.537" y1="24.232" x2="51.215" y2="24.232" width="0.2032" layer="1"/>
+<wire x1="52.07" y1="23.114" x2="52.07" y2="23.749" width="0.2032" layer="1"/>
+<wire x1="52.07" y1="23.749" x2="51.562" y2="24.257" width="0.2032" layer="1"/>
+<wire x1="51.626" y1="15.811" x2="53.72" y2="15.811" width="0.2032" layer="1"/>
+<wire x1="51.181" y1="16.256" x2="51.626" y2="15.811" width="0.2032" layer="1"/>
+<wire x1="51.562" y1="21.59" x2="51.562" y2="22.606" width="0.2032" layer="16"/>
+<wire x1="51.689" y1="21.463" x2="51.562" y2="21.59" width="0.2032" layer="16"/>
+<wire x1="51.181" y1="16.256" x2="51.181" y2="17.018" width="0.2032" layer="16"/>
+<wire x1="51.689" y1="17.526" x2="51.689" y2="21.463" width="0.2032" layer="16"/>
+<wire x1="51.181" y1="17.018" x2="51.689" y2="17.526" width="0.2032" layer="16"/>
+<via x="51.181" y="16.256" extent="1-16" drill="0.4"/>
+<via x="52.07" y="23.114" extent="1-16" drill="0.4"/>
+</signal>
+<signal name="SSP_CLK">
+<contactref element="IC2" pad="19"/>
+<contactref element="IC1" pad="71"/>
+<wire x1="41.72" y1="19.811" x2="41.72" y2="21.018" width="0.2032" layer="1"/>
+<wire x1="41.72" y1="21.018" x2="41.656" y2="21.082" width="0.2032" layer="1"/>
+<wire x1="43.688" y1="27.051" x2="43.815" y2="26.924" width="0.2032" layer="15"/>
+<wire x1="43.815" y1="26.924" x2="56.769" y2="26.924" width="0.2032" layer="15"/>
+<wire x1="56.769" y1="26.924" x2="57.531" y2="27.686" width="0.2032" layer="15"/>
+<wire x1="57.531" y1="27.686" x2="57.531" y2="24.003" width="0.2032" layer="16"/>
+<wire x1="57.531" y1="24.003" x2="57.912" y2="23.622" width="0.2032" layer="16"/>
+<wire x1="57.86" y1="18.975" x2="59.211" y2="18.975" width="0.2032" layer="1"/>
+<wire x1="57.531" y1="19.304" x2="57.86" y2="18.975" width="0.2032" layer="1"/>
+<wire x1="41.656" y1="21.082" x2="41.656" y2="25.781" width="0.2032" layer="16"/>
+<wire x1="41.656" y1="25.781" x2="42.926" y2="27.051" width="0.2032" layer="16"/>
+<wire x1="42.926" y1="27.051" x2="43.688" y2="27.051" width="0.2032" layer="16"/>
+<wire x1="57.531" y1="20.32" x2="57.531" y2="19.304" width="0.2032" layer="1"/>
+<wire x1="57.658" y1="20.447" x2="57.531" y2="20.32" width="0.2032" layer="1"/>
+<wire x1="57.912" y1="23.622" x2="57.912" y2="20.701" width="0.2032" layer="16"/>
+<wire x1="57.912" y1="20.701" x2="57.658" y2="20.447" width="0.2032" layer="16"/>
+<via x="41.656" y="21.082" extent="1-16" drill="0.4"/>
+<via x="43.688" y="27.051" extent="1-16" drill="0.4"/>
+<via x="57.531" y="27.686" extent="1-16" drill="0.4"/>
+<via x="57.658" y="20.447" extent="1-16" drill="0.4"/>
+</signal>
+<signal name="SSP_FRAME">
+<contactref element="IC2" pad="20"/>
+<contactref element="IC1" pad="31"/>
+<wire x1="50.856" y1="8.311" x2="53.72" y2="8.311" width="0.2032" layer="1"/>
+<wire x1="50.8" y1="8.255" x2="50.856" y2="8.311" width="0.2032" layer="1"/>
+<wire x1="50.8" y1="8.255" x2="54.102" y2="8.255" width="0.2032" layer="15"/>
+<wire x1="54.102" y1="8.255" x2="55.118" y2="7.239" width="0.2032" layer="15"/>
+<wire x1="55.118" y1="7.239" x2="55.753" y2="7.239" width="0.2032" layer="15"/>
+<wire x1="55.753" y1="7.239" x2="56.261" y2="7.747" width="0.2032" layer="15"/>
+<wire x1="56.261" y1="7.747" x2="57.277" y2="7.747" width="0.2032" layer="15"/>
+<wire x1="57.277" y1="7.747" x2="57.531" y2="8.001" width="0.2032" layer="15"/>
+<wire x1="57.531" y1="8.001" x2="59.817" y2="8.001" width="0.2032" layer="16"/>
+<wire x1="59.817" y1="8.001" x2="61.214" y2="9.398" width="0.2032" layer="16"/>
+<wire x1="61.214" y1="9.398" x2="61.214" y2="11.938" width="0.2032" layer="16"/>
+<wire x1="61.214" y1="11.938" x2="59.69" y2="13.462" width="0.2032" layer="16"/>
+<wire x1="59.69" y1="13.462" x2="59.69" y2="18.034" width="0.2032" layer="16"/>
+<wire x1="59.69" y1="18.034" x2="60.071" y2="18.415" width="0.2032" layer="16"/>
+<wire x1="60.893" y1="18.475" x2="59.211" y2="18.475" width="0.2032" layer="1"/>
+<wire x1="60.96" y1="18.542" x2="60.893" y2="18.475" width="0.2032" layer="1"/>
+<wire x1="60.071" y1="18.415" x2="60.833" y2="18.415" width="0.2032" layer="16"/>
+<wire x1="60.833" y1="18.415" x2="60.96" y2="18.542" width="0.2032" layer="16"/>
+<via x="50.8" y="8.255" extent="1-16" drill="0.4"/>
+<via x="57.531" y="8.001" extent="1-16" drill="0.4"/>
+<via x="60.96" y="18.542" extent="1-16" drill="0.4"/>
+</signal>
+<signal name="N$27">
+<contactref element="R39" pad="2"/>
+<contactref element="IC1" pad="87"/>
+<wire x1="35.687" y1="12.319" x2="35.775" y2="12.319" width="0.2032" layer="1"/>
+<wire x1="37.72" y1="12.311" x2="35.695" y2="12.311" width="0.2032" layer="1"/>
+<wire x1="35.695" y1="12.311" x2="35.687" y2="12.319" width="0.2032" layer="1"/>
+</signal>
+<signal name="N$40">
+<contactref element="R44" pad="2"/>
+<contactref element="IC1" pad="88"/>
+<wire x1="35.687" y1="10.668" x2="35.648" y2="10.668" width="0.2032" layer="1"/>
+<wire x1="37.72" y1="11.811" x2="36.83" y2="11.811" width="0.2032" layer="1"/>
+<wire x1="36.83" y1="11.811" x2="35.687" y2="10.668" width="0.2032" layer="1"/>
+</signal>
+<signal name="PWR_OE3">
+<contactref element="IC1" pad="84"/>
+<contactref element="IC9" pad="19"/>
+<wire x1="37.72" y1="13.811" x2="41.497" y2="13.811" width="0.2032" layer="1"/>
+<wire x1="41.497" y1="13.811" x2="42.291" y2="14.605" width="0.2032" layer="1"/>
+<wire x1="42.291" y1="14.605" x2="42.291" y2="15.494" width="0.2032" layer="16"/>
+<wire x1="42.291" y1="15.494" x2="38.608" y2="19.177" width="0.2032" layer="16"/>
+<wire x1="38.608" y1="19.177" x2="38.608" y2="33.274" width="0.2032" layer="16"/>
+<wire x1="38.608" y1="33.274" x2="41.021" y2="35.687" width="0.2032" layer="16"/>
+<wire x1="41.021" y1="35.687" x2="41.021" y2="40.894" width="0.2032" layer="16"/>
+<wire x1="41.021" y1="40.894" x2="40.259" y2="41.656" width="0.2032" layer="16"/>
+<wire x1="12.827" y1="40.64" x2="12.841" y2="40.64" width="0.2032" layer="1"/>
+<wire x1="12.841" y1="40.64" x2="12.842" y2="40.639" width="0.2032" layer="1"/>
+<wire x1="31.623" y1="40.005" x2="13.843" y2="40.005" width="0.2032" layer="15"/>
+<wire x1="12.827" y1="39.497" x2="12.827" y2="40.64" width="0.2032" layer="1"/>
+<wire x1="13.081" y1="39.243" x2="12.827" y2="39.497" width="0.2032" layer="1"/>
+<wire x1="13.843" y1="40.005" x2="13.081" y2="39.243" width="0.2032" layer="15"/>
+<wire x1="40.259" y1="41.656" x2="33.274" y2="41.656" width="0.2032" layer="15"/>
+<wire x1="33.274" y1="41.656" x2="31.623" y2="40.005" width="0.2032" layer="15"/>
+<via x="42.291" y="14.605" extent="1-16" drill="0.4"/>
+<via x="40.259" y="41.656" extent="1-16" drill="0.4"/>
+<via x="13.081" y="39.243" extent="1-16" drill="0.4"/>
+</signal>
+<signal name="PWR_OE4">
+<contactref element="IC10" pad="19"/>
+<contactref element="IC1" pad="86"/>
+<wire x1="37.72" y1="12.811" x2="41.672" y2="12.811" width="0.2032" layer="1"/>
+<wire x1="41.672" y1="12.811" x2="42.164" y2="12.319" width="0.2032" layer="1"/>
+<wire x1="42.164" y1="12.319" x2="42.164" y2="13.208" width="0.2032" layer="16"/>
+<wire x1="42.164" y1="13.208" x2="43.18" y2="14.224" width="0.2032" layer="16"/>
+<wire x1="43.18" y1="14.224" x2="43.18" y2="21.209" width="0.2032" layer="16"/>
+<wire x1="43.18" y1="21.209" x2="42.164" y2="22.225" width="0.2032" layer="16"/>
+<wire x1="42.164" y1="22.225" x2="42.164" y2="23.368" width="0.2032" layer="16"/>
+<wire x1="42.164" y1="23.368" x2="42.164" y2="23.495" width="0.2032" layer="16"/>
+<wire x1="41.91" y1="28.321" x2="41.91" y2="31.369" width="0.2032" layer="16"/>
+<wire x1="41.91" y1="31.369" x2="43.942" y2="33.401" width="0.2032" layer="16"/>
+<wire x1="43.942" y1="33.401" x2="43.942" y2="39.243" width="0.2032" layer="16"/>
+<wire x1="43.942" y1="39.243" x2="20.447" y2="39.243" width="0.2032" layer="15"/>
+<wire x1="20.447" y1="39.243" x2="20.066" y2="38.862" width="0.2032" layer="15"/>
+<wire x1="20.066" y1="38.862" x2="20.066" y2="39.243" width="0.2032" layer="1"/>
+<wire x1="19.7" y1="39.609" x2="19.7" y2="40.639" width="0.2032" layer="1"/>
+<wire x1="20.066" y1="39.243" x2="19.7" y2="39.609" width="0.2032" layer="1"/>
+<wire x1="42.418" y1="27.813" x2="41.91" y2="28.321" width="0.2032" layer="16"/>
+<wire x1="42.164" y1="23.876" x2="44.196" y2="25.908" width="0.2032" layer="16"/>
+<wire x1="44.196" y1="25.908" x2="44.323" y2="26.035" width="0.2032" layer="16"/>
+<wire x1="42.164" y1="23.368" x2="42.164" y2="23.876" width="0.2032" layer="16"/>
+<wire x1="44.069" y1="27.813" x2="42.418" y2="27.813" width="0.2032" layer="16"/>
+<wire x1="44.577" y1="27.305" x2="44.069" y2="27.813" width="0.2032" layer="16"/>
+<wire x1="44.577" y1="26.289" x2="44.577" y2="27.305" width="0.2032" layer="16"/>
+<wire x1="44.196" y1="25.908" x2="44.577" y2="26.289" width="0.2032" layer="16"/>
+<via x="42.164" y="12.319" extent="1-16" drill="0.4"/>
+<via x="43.942" y="39.243" extent="1-16" drill="0.4"/>
+<via x="20.066" y="38.862" extent="1-16" drill="0.4"/>
+</signal>
+<signal name="N$44">
+<contactref element="IC9" pad="9"/>
+<contactref element="R45" pad="1"/>
+<wire x1="10.414" y1="34.632" x2="10.414" y2="35.56" width="0.2032" layer="1"/>
+<wire x1="10.414" y1="35.56" x2="16.891" y2="35.56" width="0.2032" layer="15"/>
+<wire x1="16.891" y1="35.56" x2="17.399" y2="36.068" width="0.2032" layer="15"/>
+<wire x1="17.399" y1="34.544" x2="17.392" y2="34.544" width="0.2032" layer="1"/>
+<wire x1="17.399" y1="36.068" x2="17.399" y2="34.544" width="0.2032" layer="1"/>
+<via x="10.414" y="35.56" extent="1-16" drill="0.4"/>
+<via x="17.399" y="36.068" extent="1-16" drill="0.4"/>
+</signal>
+<signal name="N$45">
+<contactref element="IC10" pad="9"/>
+<contactref element="R46" pad="1"/>
+<wire x1="2.159" y1="34.632" x2="2.159" y2="35.56" width="0.2032" layer="1"/>
+<wire x1="2.159" y1="35.56" x2="2.413" y2="35.814" width="0.2032" layer="1"/>
+<wire x1="26.162" y1="34.671" x2="26.162" y2="35.306" width="0.2032" layer="1"/>
+<wire x1="26.162" y1="35.306" x2="25.781" y2="35.687" width="0.2032" layer="1"/>
+<wire x1="25.781" y1="35.687" x2="24.384" y2="35.687" width="0.2032" layer="1"/>
+<wire x1="24.384" y1="35.687" x2="24.257" y2="35.56" width="0.2032" layer="1"/>
+<wire x1="24.257" y1="34.544" x2="24.25" y2="34.544" width="0.2032" layer="1"/>
+<wire x1="24.257" y1="35.56" x2="24.257" y2="34.544" width="0.2032" layer="1"/>
+<wire x1="2.413" y1="35.814" x2="3.048" y2="36.449" width="0.2032" layer="15"/>
+<wire x1="25.908" y1="34.417" x2="26.162" y2="34.671" width="0.2032" layer="15"/>
+<wire x1="19.304" y1="34.417" x2="25.908" y2="34.417" width="0.2032" layer="15"/>
+<wire x1="3.048" y1="36.449" x2="16.764" y2="36.449" width="0.2032" layer="15"/>
+<wire x1="16.764" y1="36.449" x2="17.272" y2="36.957" width="0.2032" layer="15"/>
+<wire x1="17.272" y1="36.957" x2="17.907" y2="36.957" width="0.2032" layer="15"/>
+<wire x1="17.907" y1="36.957" x2="18.161" y2="36.703" width="0.2032" layer="15"/>
+<wire x1="18.161" y1="36.703" x2="18.161" y2="35.56" width="0.2032" layer="15"/>
+<wire x1="18.161" y1="35.56" x2="19.304" y2="34.417" width="0.2032" layer="15"/>
+<via x="2.413" y="35.814" extent="1-16" drill="0.4"/>
+<via x="26.162" y="34.671" extent="1-16" drill="0.4"/>
+</signal>
+<signal name="PCK0">
+<contactref element="IC2" pad="34"/>
+<contactref element="IC1" pad="36"/>
+<wire x1="53.72" y1="10.811" x2="54.594" y2="10.811" width="0.2032" layer="1"/>
+<wire x1="54.594" y1="10.811" x2="55.245" y2="10.16" width="0.2032" layer="1"/>
+<wire x1="55.245" y1="10.16" x2="56.896" y2="10.16" width="0.2032" layer="1"/>
+<wire x1="56.896" y1="10.16" x2="57.277" y2="10.541" width="0.2032" layer="1"/>
+<wire x1="57.277" y1="10.541" x2="57.277" y2="10.922" width="0.2032" layer="15"/>
+<wire x1="57.277" y1="10.922" x2="58.293" y2="11.938" width="0.2032" layer="15"/>
+<wire x1="58.293" y1="11.938" x2="61.722" y2="11.938" width="0.2032" layer="15"/>
+<wire x1="61.722" y1="11.938" x2="62.103" y2="12.319" width="0.2032" layer="15"/>
+<wire x1="61.976" y1="12.319" x2="61.849" y2="12.192" width="0.2032" layer="1"/>
+<wire x1="62.103" y1="12.319" x2="61.976" y2="12.319" width="0.2032" layer="1"/>
+<wire x1="61.961" y1="12.304" x2="61.961" y2="10.225" width="0.2032" layer="1"/>
+<wire x1="61.976" y1="12.319" x2="61.961" y2="12.304" width="0.2032" layer="1"/>
+<via x="57.277" y="10.541" extent="1-16" drill="0.4"/>
+<via x="62.103" y="12.319" extent="1-16" drill="0.4"/>
+</signal>
+<signal name="N$50">
+<contactref element="R32" pad="1"/>
+<contactref element="C43" pad="2"/>
+<wire x1="16.598" y1="31.838" x2="16.51" y2="31.838" width="0.2032" layer="1"/>
+<wire x1="14.859" y1="31.838" x2="16.598" y2="31.838" width="0.2032" layer="1"/>
+<wire x1="16.598" y1="31.838" x2="16.637" y2="31.877" width="0.2032" layer="1"/>
+</signal>
+<signal name="N$51">
+<contactref element="R35" pad="1"/>
+<contactref element="C42" pad="2"/>
+<wire x1="32.639" y1="31.496" x2="32.512" y2="31.369" width="0.2032" layer="1"/>
+<wire x1="32.727" y1="31.496" x2="32.639" y2="31.496" width="0.2032" layer="1"/>
+<wire x1="32.727" y1="31.584" x2="32.727" y2="33.147" width="0.2032" layer="1"/>
+<wire x1="32.639" y1="31.496" x2="32.727" y2="31.584" width="0.2032" layer="1"/>
+</signal>
+<signal name="N$47">
+<contactref element="IC14" pad="3"/>
+<contactref element="R35" pad="2"/>
+<contactref element="R49" pad="2"/>
+<wire x1="26.035" y1="30.383" x2="27.021" y2="30.383" width="0.2032" layer="1"/>
+<wire x1="27.021" y1="30.383" x2="27.305" y2="30.099" width="0.2032" layer="1"/>
+<wire x1="27.305" y1="30.099" x2="29.21" y2="30.099" width="0.2032" layer="1"/>
+<wire x1="29.21" y1="30.099" x2="29.464" y2="30.353" width="0.2032" layer="1"/>
+<wire x1="29.591" y1="31.115" x2="29.552" y2="31.115" width="0.2032" layer="1"/>
+<wire x1="29.464" y1="30.353" x2="29.464" y2="30.988" width="0.2032" layer="1"/>
+<wire x1="29.464" y1="30.988" x2="29.591" y2="31.115" width="0.2032" layer="1"/>
+<wire x1="29.464" y1="31.115" x2="29.337" y2="30.988" width="0.2032" layer="1"/>
+<wire x1="29.552" y1="31.115" x2="29.464" y2="31.115" width="0.2032" layer="1"/>
+<wire x1="29.845" y1="31.496" x2="31.027" y2="31.496" width="0.2032" layer="1"/>
+<wire x1="29.464" y1="31.115" x2="29.845" y2="31.496" width="0.2032" layer="1"/>
+</signal>
+<signal name="N$55">
+<contactref element="IC1" pad="22"/>
+<contactref element="TP7" pad="1"/>
+<wire x1="50.22" y1="1.596" x2="50.22" y2="3.811" width="0.2032" layer="1"/>
+<wire x1="50.22" y1="1.596" x2="51.054" y2="0.762" width="0.2032" layer="1"/>
+<wire x1="51.054" y1="0.762" x2="59.436" y2="0.762" width="0.2032" layer="1"/>
+<wire x1="59.436" y1="0.762" x2="61.087" y2="2.413" width="0.2032" layer="1"/>
+<wire x1="61.087" y1="2.413" x2="63.373" y2="2.413" width="0.2032" layer="1"/>
+</signal>
+<signal name="N$48">
+<contactref element="R52" pad="1"/>
+<contactref element="R53" pad="2"/>
+<contactref element="IC8" pad="17"/>
+<contactref element="C19" pad="1"/>
+<wire x1="49.618" y1="32.639" x2="49.657" y2="32.639" width="0.2032" layer="1"/>
+<wire x1="48.615" y1="31.597" x2="48.615" y2="30.632" width="0.2032" layer="1"/>
+<wire x1="49.657" y1="32.639" x2="48.615" y2="31.597" width="0.2032" layer="1"/>
+<wire x1="49.618" y1="32.727" x2="49.657" y2="32.766" width="0.2032" layer="1"/>
+<wire x1="49.618" y1="32.639" x2="49.618" y2="32.727" width="0.2032" layer="1"/>
+<wire x1="47.918" y1="34.505" x2="47.918" y2="34.544" width="0.2032" layer="1"/>
+<wire x1="49.657" y1="32.766" x2="47.918" y2="34.505" width="0.2032" layer="1"/>
+<wire x1="46.443" y1="34.544" x2="46.355" y2="34.544" width="0.2032" layer="1"/>
+<wire x1="47.918" y1="34.544" x2="46.443" y2="34.544" width="0.2032" layer="1"/>
+</signal>
+<signal name="LED_D">
+<contactref element="IC2" pad="44"/>
+<contactref element="TP8" pad="1"/>
+<contactref element="R55" pad="1"/>
+<wire x1="66.961" y1="10.225" x2="66.961" y2="12.224" width="0.2032" layer="1"/>
+<wire x1="66.961" y1="12.224" x2="67.31" y2="12.573" width="0.2032" layer="1"/>
+<wire x1="67.31" y1="12.573" x2="69.342" y2="14.605" width="0.2032" layer="15"/>
+<wire x1="69.342" y1="14.605" x2="76.708" y2="14.605" width="0.2032" layer="15"/>
+<wire x1="76.708" y1="14.605" x2="77.851" y2="13.462" width="0.2032" layer="15"/>
+<wire x1="77.851" y1="13.462" x2="79.629" y2="13.462" width="0.2032" layer="15"/>
+<wire x1="79.629" y1="13.462" x2="80.01" y2="13.843" width="0.2032" layer="15"/>
+<wire x1="80.01" y1="13.843" x2="80.01" y2="15.367" width="0.2032" layer="15"/>
+<wire x1="80.01" y1="15.367" x2="80.01" y2="16.764" width="0.2032" layer="16"/>
+<wire x1="80.01" y1="16.764" x2="78.994" y2="17.78" width="0.2032" layer="16"/>
+<wire x1="78.994" y1="17.78" x2="78.994" y2="25.527" width="0.2032" layer="16"/>
+<wire x1="78.994" y1="25.527" x2="79.375" y2="25.908" width="0.2032" layer="16"/>
+<wire x1="79.375" y1="25.908" x2="79.375" y2="32.385" width="0.2032" layer="16"/>
+<wire x1="79.375" y1="32.385" x2="78.105" y2="33.655" width="0.2032" layer="16"/>
+<wire x1="78.105" y1="33.655" x2="62.738" y2="33.655" width="0.2032" layer="15"/>
+<wire x1="62.738" y1="33.655" x2="62.357" y2="34.036" width="0.2032" layer="15"/>
+<wire x1="62.484" y1="34.163" x2="63.92" y2="34.163" width="0.2032" layer="1"/>
+<wire x1="62.357" y1="34.036" x2="62.484" y2="34.163" width="0.2032" layer="1"/>
+<wire x1="63.92" y1="34.251" x2="63.881" y2="34.29" width="0.2032" layer="1"/>
+<wire x1="63.92" y1="34.163" x2="63.92" y2="34.251" width="0.2032" layer="1"/>
+<wire x1="64.135" y1="34.036" x2="64.135" y2="32.004" width="0.2032" layer="1"/>
+<wire x1="63.92" y1="34.251" x2="64.135" y2="34.036" width="0.2032" layer="1"/>
+<via x="67.31" y="12.573" extent="1-16" drill="0.4"/>
+<via x="80.01" y="15.367" extent="1-16" drill="0.4"/>
+<via x="78.105" y="33.655" extent="1-16" drill="0.4"/>
+<via x="62.357" y="34.036" extent="1-16" drill="0.4"/>
+</signal>
+<signal name="N$25">
+<contactref element="R55" pad="2"/>
+<contactref element="D9" pad="+"/>
+<wire x1="65.62" y1="34.163" x2="65.532" y2="34.163" width="0.2032" layer="1"/>
+<wire x1="65.532" y1="34.163" x2="65.62" y2="34.251" width="0.2032" layer="1"/>
+<wire x1="63.92" y1="35.814" x2="64.057" y2="35.814" width="0.2032" layer="1"/>
+<wire x1="65.62" y1="34.251" x2="65.571" y2="34.251" width="0.2032" layer="1"/>
+<wire x1="65.571" y1="34.251" x2="64.897" y2="34.925" width="0.2032" layer="1"/>
+<wire x1="64.897" y1="34.925" x2="64.77" y2="34.925" width="0.2032" layer="1"/>
+<wire x1="63.881" y1="35.814" x2="63.92" y2="35.814" width="0.2032" layer="1"/>
+<wire x1="64.77" y1="34.925" x2="63.881" y2="35.814" width="0.2032" layer="1"/>
+</signal>
+<signal name="PFETGATE">
+<contactref element="Q2" pad="4"/>
+<contactref element="R56" pad="1"/>
+<contactref element="R57" pad="2"/>
+<wire x1="21.463" y1="49.149" x2="22.645" y2="49.149" width="0.2032" layer="1"/>
+<wire x1="21.463" y1="48.514" x2="21.463" y2="39.751" width="0.2032" layer="16"/>
+<wire x1="21.463" y1="48.514" x2="21.463" y2="49.149" width="0.2032" layer="16"/>
+<wire x1="21.463" y1="39.751" x2="22.479" y2="38.735" width="0.2032" layer="16"/>
+<wire x1="22.479" y1="38.735" x2="26.797" y2="38.735" width="0.2032" layer="16"/>
+<wire x1="26.797" y1="38.735" x2="28.067" y2="37.465" width="0.2032" layer="16"/>
+<wire x1="28.067" y1="37.465" x2="29.083" y2="37.465" width="0.2032" layer="15"/>
+<wire x1="29.083" y1="37.465" x2="30.353" y2="38.735" width="0.2032" layer="15"/>
+<wire x1="30.353" y1="38.735" x2="40.259" y2="38.735" width="0.2032" layer="15"/>
+<wire x1="40.259" y1="38.735" x2="41.783" y2="37.211" width="0.2032" layer="15"/>
+<wire x1="41.783" y1="37.211" x2="47.879" y2="37.211" width="0.2032" layer="15"/>
+<wire x1="47.879" y1="37.211" x2="48.768" y2="36.322" width="0.2032" layer="15"/>
+<wire x1="48.768" y1="36.322" x2="55.118" y2="36.322" width="0.2032" layer="15"/>
+<wire x1="55.118" y1="36.322" x2="56.388" y2="35.052" width="0.2032" layer="15"/>
+<wire x1="56.388" y1="35.052" x2="57.023" y2="35.052" width="0.2032" layer="15"/>
+<wire x1="57.023" y1="35.052" x2="58.674" y2="33.401" width="0.2032" layer="15"/>
+<wire x1="58.674" y1="33.401" x2="61.722" y2="33.401" width="0.2032" layer="15"/>
+<wire x1="61.722" y1="33.401" x2="64.135" y2="30.988" width="0.2032" layer="15"/>
+<wire x1="64.135" y1="30.988" x2="66.675" y2="30.988" width="0.2032" layer="15"/>
+<wire x1="66.675" y1="30.988" x2="67.183" y2="30.48" width="0.2032" layer="15"/>
+<wire x1="69.635" y1="28.917" x2="69.723" y2="28.829" width="0.2032" layer="1"/>
+<wire x1="69.635" y1="28.917" x2="69.596" y2="28.917" width="0.2032" layer="1"/>
+<wire x1="67.183" y1="30.48" x2="68.072" y2="30.48" width="0.2032" layer="1"/>
+<wire x1="68.072" y1="30.48" x2="69.635" y2="28.917" width="0.2032" layer="1"/>
+<wire x1="16.383" y1="46.736" x2="16.383" y2="46.609" width="0.2032" layer="1"/>
+<wire x1="14.605" y1="46.101" x2="15.748" y2="46.101" width="0.2032" layer="1"/>
+<wire x1="15.748" y1="46.101" x2="16.383" y2="46.736" width="0.2032" layer="1"/>
+<wire x1="16.383" y1="47.625" x2="17.272" y2="48.514" width="0.2032" layer="16"/>
+<wire x1="16.383" y1="46.609" x2="16.383" y2="47.625" width="0.2032" layer="16"/>
+<wire x1="17.272" y1="48.514" x2="21.463" y2="48.514" width="0.2032" layer="16"/>
+<via x="16.383" y="46.609" extent="1-16" drill="0.4"/>
+<via x="21.463" y="49.149" extent="1-16" drill="0.4"/>
+<via x="28.067" y="37.465" extent="1-16" drill="0.4"/>
+<via x="67.183" y="30.48" extent="1-16" drill="0.4"/>
+</signal>
+<signal name="NVDD_ON">
+<contactref element="R57" pad="1"/>
+<contactref element="IC2" pad="43"/>
+<wire x1="66.461" y1="10.225" x2="66.461" y2="13.422" width="0.2032" layer="1"/>
+<wire x1="66.461" y1="13.422" x2="66.294" y2="13.589" width="0.2032" layer="1"/>
+<wire x1="66.294" y1="13.589" x2="66.294" y2="14.351" width="0.2032" layer="1"/>
+<wire x1="66.294" y1="14.351" x2="65.532" y2="15.113" width="0.2032" layer="1"/>
+<wire x1="65.532" y1="15.113" x2="65.532" y2="17.145" width="0.2032" layer="1"/>
+<wire x1="79.248" y1="18.923" x2="79.248" y2="27.305" width="0.2032" layer="15"/>
+<wire x1="79.248" y1="27.305" x2="78.74" y2="27.813" width="0.2032" layer="15"/>
+<wire x1="78.74" y1="27.813" x2="71.501" y2="27.813" width="0.2032" layer="15"/>
+<wire x1="71.501" y1="27.813" x2="70.866" y2="28.448" width="0.2032" layer="15"/>
+<wire x1="69.596" y1="27.178" x2="69.596" y2="27.217" width="0.2032" layer="1"/>
+<wire x1="70.866" y1="28.448" x2="69.596" y2="27.178" width="0.2032" layer="1"/>
+<wire x1="66.675" y1="18.034" x2="66.802" y2="18.034" width="0.2032" layer="1"/>
+<wire x1="65.532" y1="17.145" x2="66.421" y2="18.034" width="0.2032" layer="1"/>
+<wire x1="66.421" y1="18.034" x2="66.675" y2="18.034" width="0.2032" layer="1"/>
+<wire x1="66.675" y1="18.034" x2="68.58" y2="18.034" width="0.2032" layer="15"/>
+<wire x1="68.58" y1="18.034" x2="69.088" y2="18.542" width="0.2032" layer="15"/>
+<wire x1="78.867" y1="18.542" x2="79.248" y2="18.923" width="0.2032" layer="15"/>
+<wire x1="69.088" y1="18.542" x2="75.946" y2="18.542" width="0.2032" layer="15"/>
+<wire x1="75.946" y1="18.542" x2="76.581" y2="17.907" width="0.2032" layer="15"/>
+<wire x1="76.581" y1="17.907" x2="78.232" y2="17.907" width="0.2032" layer="15"/>
+<wire x1="78.232" y1="17.907" x2="78.867" y2="18.542" width="0.2032" layer="15"/>
+<via x="66.675" y="18.034" extent="1-16" drill="0.4"/>
+<via x="70.866" y="28.448" extent="1-16" drill="0.4"/>
+</signal>
+<signal name="N$49">
+<contactref element="R58" pad="2"/>
+<contactref element="IC3" pad="3"/>
+<contactref element="IC3" pad="1"/>
+<contactref element="U1" pad="2"/>
+<contactref element="Q2" pad="3"/>
+<contactref element="R56" pad="2"/>
+<wire x1="13.335" y1="47.371" x2="14.605" y2="47.371" width="0.4064" layer="1"/>
+<wire x1="13.081" y1="47.117" x2="13.335" y2="47.371" width="0.4064" layer="1"/>
+<wire x1="13.081" y1="45.339" x2="13.081" y2="47.117" width="0.4064" layer="1"/>
+<wire x1="13.335" y1="45.085" x2="13.081" y2="45.339" width="0.4064" layer="1"/>
+<wire x1="13.677" y1="44.616" x2="13.716" y2="44.577" width="0.4064" layer="1"/>
+<wire x1="13.677" y1="44.577" x2="13.677" y2="44.616" width="0.4064" layer="1"/>
+<wire x1="13.335" y1="44.958" x2="13.335" y2="45.085" width="0.4064" layer="1"/>
+<wire x1="13.677" y1="44.616" x2="13.335" y2="44.958" width="0.4064" layer="1"/>
+<wire x1="16.383" y1="44.7548" x2="16.8819" y2="44.7548" width="0.4064" layer="1"/>
+<wire x1="13.462" y1="44.704" x2="13.5128" y2="44.7548" width="0.4064" layer="1"/>
+<wire x1="16.383" y1="44.704" x2="16.383" y2="44.7548" width="0.2032" layer="1"/>
+<wire x1="13.5128" y1="44.7548" x2="13.6398" y2="44.7548" width="0.4064" layer="1"/>
+<wire x1="13.6398" y1="44.7548" x2="13.97" y2="45.085" width="0.4064" layer="1"/>
+<wire x1="13.97" y1="45.085" x2="16.002" y2="45.085" width="0.4064" layer="1"/>
+<wire x1="16.002" y1="45.085" x2="16.383" y2="44.704" width="0.4064" layer="1"/>
+<wire x1="16.8819" y1="44.7548" x2="16.8819" y2="45.7109" width="0.2032" layer="1"/>
+<wire x1="16.8819" y1="45.7109" x2="16.891" y2="45.72" width="0.2032" layer="1"/>
+<wire x1="24.345" y1="49.188" x2="24.257" y2="49.276" width="0.2032" layer="1"/>
+<wire x1="24.345" y1="49.188" x2="24.345" y2="49.149" width="0.2032" layer="1"/>
+<wire x1="25.654" y1="49.149" x2="24.384" y2="49.149" width="0.2032" layer="1"/>
+<wire x1="24.384" y1="49.149" x2="24.345" y2="49.188" width="0.2032" layer="1"/>
+<wire x1="16.891" y1="45.72" x2="20.574" y2="45.72" width="0.2032" layer="15"/>
+<wire x1="20.574" y1="45.72" x2="24.003" y2="49.149" width="0.2032" layer="15"/>
+<wire x1="24.003" y1="49.149" x2="25.654" y2="49.149" width="0.2032" layer="15"/>
+<wire x1="16.8819" y1="44.7548" x2="16.8819" y2="44.7131" width="0.4064" layer="1"/>
+<wire x1="17.0942" y1="44.5008" x2="17.5006" y2="44.5008" width="0.4064" layer="1"/>
+<wire x1="16.8819" y1="44.7131" x2="17.0942" y2="44.5008" width="0.4064" layer="1"/>
+<wire x1="16.383" y1="44.704" x2="16.383" y2="42.799" width="0.2032" layer="1"/>
+<wire x1="16.5812" y1="42.6008" x2="17.5006" y2="42.6008" width="0.2032" layer="1"/>
+<wire x1="16.383" y1="42.799" x2="16.5812" y2="42.6008" width="0.2032" layer="1"/>
+<wire x1="13.716" y1="44.577" x2="13.716" y2="44.45" width="0.2032" layer="1"/>
+<wire x1="13.677" y1="44.577" x2="13.716" y2="44.577" width="0.2032" layer="1"/>
+<wire x1="13.716" y1="44.704" x2="13.462" y2="44.704" width="0.2032" layer="1"/>
+<wire x1="13.716" y1="44.577" x2="13.716" y2="44.704" width="0.2032" layer="1"/>
+<wire x1="16.549" y1="47.918" x2="16.637" y2="47.918" width="0.4064" layer="1"/>
+<wire x1="14.605" y1="47.371" x2="16.002" y2="47.371" width="0.4064" layer="1"/>
+<wire x1="16.002" y1="47.371" x2="16.549" y2="47.918" width="0.4064" layer="1"/>
+<via x="16.891" y="45.72" extent="1-16" drill="0.4"/>
+<via x="25.654" y="49.149" extent="1-16" drill="0.4"/>
+</signal>
+<signal name="FPGA_NINIT">
+<contactref element="IC1" pad="52"/>
+<contactref element="IC2" pad="36"/>
+<contactref element="R59" pad="1"/>
+<wire x1="62.961" y1="13.304" x2="62.961" y2="10.225" width="0.2032" layer="1"/>
+<wire x1="63.246" y1="13.589" x2="62.961" y2="13.304" width="0.2032" layer="1"/>
+<wire x1="63.246" y1="14.097" x2="63.246" y2="13.589" width="0.2032" layer="1"/>
+<wire x1="64.008" y1="14.859" x2="63.246" y2="14.097" width="0.2032" layer="15"/>
+<wire x1="68.326" y1="14.859" x2="64.008" y2="14.859" width="0.2032" layer="15"/>
+<wire x1="68.58" y1="15.113" x2="68.326" y2="14.859" width="0.2032" layer="15"/>
+<wire x1="77.597" y1="15.113" x2="68.58" y2="15.113" width="0.2032" layer="15"/>
+<wire x1="77.851" y1="15.367" x2="77.597" y2="15.113" width="0.2032" layer="15"/>
+<wire x1="77.851" y1="18.034" x2="77.851" y2="15.367" width="0.2032" layer="16"/>
+<wire x1="78.486" y1="18.669" x2="77.851" y2="18.034" width="0.2032" layer="16"/>
+<wire x1="78.486" y1="24.892" x2="78.486" y2="18.669" width="0.2032" layer="16"/>
+<wire x1="77.851" y1="25.527" x2="78.486" y2="24.892" width="0.2032" layer="16"/>
+<wire x1="77.851" y1="26.67" x2="77.851" y2="25.527" width="0.2032" layer="16"/>
+<wire x1="77.724" y1="26.67" x2="77.851" y2="26.67" width="0.2032" layer="15"/>
+<wire x1="77.597" y1="26.797" x2="77.724" y2="26.67" width="0.2032" layer="15"/>
+<wire x1="61.214" y1="26.797" x2="77.597" y2="26.797" width="0.2032" layer="15"/>
+<wire x1="58.674" y1="29.337" x2="61.214" y2="26.797" width="0.2032" layer="15"/>
+<wire x1="51.943" y1="29.337" x2="58.674" y2="29.337" width="0.2032" layer="15"/>
+<wire x1="51.308" y1="28.702" x2="51.943" y2="29.337" width="0.2032" layer="15"/>
+<wire x1="51.22" y1="19.811" x2="51.22" y2="21.629" width="0.2032" layer="1"/>
+<wire x1="51.22" y1="21.629" x2="51.689" y2="22.098" width="0.2032" layer="1"/>
+<wire x1="51.689" y1="22.098" x2="52.197" y2="22.098" width="0.2032" layer="1"/>
+<wire x1="52.197" y1="22.098" x2="52.832" y2="22.733" width="0.2032" layer="1"/>
+<wire x1="52.832" y1="22.733" x2="52.832" y2="23.495" width="0.2032" layer="1"/>
+<wire x1="51.308" y1="26.162" x2="51.308" y2="28.702" width="0.2032" layer="1"/>
+<wire x1="52.578" y1="24.892" x2="51.308" y2="26.162" width="0.2032" layer="1"/>
+<wire x1="52.578" y1="23.749" x2="52.578" y2="24.892" width="0.2032" layer="1"/>
+<wire x1="52.832" y1="23.495" x2="52.578" y2="23.749" width="0.2032" layer="1"/>
+<wire x1="53.086" y1="22.479" x2="54.141" y2="22.479" width="0.2032" layer="1"/>
+<wire x1="52.832" y1="22.733" x2="53.086" y2="22.479" width="0.2032" layer="1"/>
+<via x="63.246" y="14.097" extent="1-16" drill="0.4"/>
+<via x="77.851" y="15.367" extent="1-16" drill="0.4"/>
+<via x="77.851" y="26.67" extent="1-16" drill="0.4"/>
+<via x="51.308" y="28.702" extent="1-16" drill="0.4"/>
+</signal>
+<signal name="N$21">
+<contactref element="D10" pad="3"/>
+<contactref element="D2" pad="3"/>
+<contactref element="C15" pad="1"/>
+<contactref element="R15" pad="2"/>
+<contactref element="R16" pad="1"/>
+<contactref element="R41" pad="1"/>
+<wire x1="18.288" y1="18.034" x2="18.288" y2="18.122" width="0.2032" layer="1"/>
+<wire x1="16.637" y1="18.122" x2="18.2" y2="18.122" width="0.2032" layer="1"/>
+<wire x1="18.2" y1="18.122" x2="18.288" y2="18.034" width="0.2032" layer="1"/>
+<wire x1="18.288" y1="18.122" x2="17.995" y2="18.122" width="0.2032" layer="1"/>
+<wire x1="17.995" y1="18.122" x2="19.939" y2="18.122" width="0.2032" layer="1"/>
+<wire x1="17.995" y1="18.122" x2="17.907" y2="18.034" width="0.2032" layer="1"/>
+<wire x1="14.605" y1="17.1323" x2="14.9987" y2="17.526" width="0.2032" layer="1"/>
+<wire x1="14.9987" y1="17.526" x2="15.367" y2="17.526" width="0.2032" layer="1"/>
+<wire x1="16.637" y1="18.034" x2="16.637" y2="18.122" width="0.2032" layer="1"/>
+<wire x1="15.367" y1="17.526" x2="15.875" y2="18.034" width="0.2032" layer="1"/>
+<wire x1="15.875" y1="18.034" x2="16.637" y2="18.034" width="0.2032" layer="1"/>
+<wire x1="20.74" y1="20.359" x2="21.717" y2="20.359" width="0.2032" layer="1"/>
+<wire x1="20.193" y1="19.812" x2="20.74" y2="20.359" width="0.2032" layer="1"/>
+<wire x1="19.939" y1="18.122" x2="19.939" y2="18.034" width="0.2032" layer="1"/>
+<wire x1="20.193" y1="18.288" x2="20.193" y2="19.812" width="0.2032" layer="1"/>
+<wire x1="19.939" y1="18.034" x2="20.193" y2="18.288" width="0.2032" layer="1"/>
+<wire x1="14.8463" y1="17.1323" x2="14.986" y2="17.272" width="0.2032" layer="1"/>
+<wire x1="14.605" y1="17.1323" x2="14.8463" y2="17.1323" width="0.2032" layer="1"/>
+<wire x1="15.367" y1="16.891" x2="15.367" y2="14.224" width="0.2032" layer="1"/>
+<wire x1="15.367" y1="14.224" x2="15.6083" y2="13.9827" width="0.2032" layer="1"/>
+<wire x1="15.6083" y1="13.9827" x2="15.621" y2="13.9827" width="0.2032" layer="1"/>
+<wire x1="14.986" y1="17.272" x2="15.367" y2="16.891" width="0.2032" layer="1"/>
+</signal>
+</signals>
+</board>
+</drawing>
+</eagle>
diff --git a/pcb/proxmark3_fix/CAD/proxmark3.sch b/pcb/proxmark3_fix/CAD/proxmark3.sch
new file mode 100644 (file)
index 0000000..5d7ca62
--- /dev/null
@@ -0,0 +1,5875 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE eagle SYSTEM "eagle.dtd">
+<eagle version="6.4">
+<drawing>
+<settings>
+<setting alwaysvectorfont="yes"/>
+<setting verticaltext="up"/>
+</settings>
+<grid distance="0.1" unitdist="inch" unit="inch" style="lines" multiple="1" display="no" altdistance="0.01" altunitdist="inch" altunit="inch"/>
+<layers>
+<layer number="1" name="Top" color="4" fill="1" visible="no" active="no"/>
+<layer number="2" name="Route2" color="1" fill="3" visible="no" active="no"/>
+<layer number="3" name="Route3" color="4" fill="3" visible="no" active="no"/>
+<layer number="4" name="Route4" color="1" fill="4" visible="no" active="no"/>
+<layer number="5" name="Route5" color="4" fill="4" visible="no" active="no"/>
+<layer number="6" name="Route6" color="1" fill="8" visible="no" active="no"/>
+<layer number="7" name="Route7" color="4" fill="8" visible="no" active="no"/>
+<layer number="8" name="Route8" color="1" fill="2" visible="no" active="no"/>
+<layer number="9" name="Route9" color="4" fill="2" visible="no" active="no"/>
+<layer number="10" name="Route10" color="1" fill="7" visible="no" active="no"/>
+<layer number="11" name="Route11" color="4" fill="7" visible="no" active="no"/>
+<layer number="12" name="Route12" color="1" fill="5" visible="no" active="no"/>
+<layer number="13" name="Route13" color="4" fill="5" visible="no" active="no"/>
+<layer number="14" name="Route14" color="1" fill="6" visible="no" active="no"/>
+<layer number="15" name="Route15" color="4" fill="6" visible="no" active="no"/>
+<layer number="16" name="Bottom" color="1" fill="1" visible="no" active="no"/>
+<layer number="17" name="Pads" color="2" fill="1" visible="no" active="no"/>
+<layer number="18" name="Vias" color="2" fill="1" visible="no" active="no"/>
+<layer number="19" name="Unrouted" color="6" fill="1" visible="no" active="no"/>
+<layer number="20" name="Dimension" color="15" fill="1" visible="no" active="no"/>
+<layer number="21" name="tPlace" color="7" fill="1" visible="no" active="no"/>
+<layer number="22" name="bPlace" color="7" fill="1" visible="no" active="no"/>
+<layer number="23" name="tOrigins" color="15" fill="1" visible="no" active="no"/>
+<layer number="24" name="bOrigins" color="15" fill="1" visible="no" active="no"/>
+<layer number="25" name="tNames" color="7" fill="1" visible="no" active="no"/>
+<layer number="26" name="bNames" color="7" fill="1" visible="no" active="no"/>
+<layer number="27" name="tValues" color="7" fill="1" visible="no" active="no"/>
+<layer number="28" name="bValues" color="7" fill="1" visible="no" active="no"/>
+<layer number="29" name="tStop" color="7" fill="3" visible="no" active="no"/>
+<layer number="30" name="bStop" color="7" fill="6" visible="no" active="no"/>
+<layer number="31" name="tCream" color="7" fill="4" visible="no" active="no"/>
+<layer number="32" name="bCream" color="7" fill="5" visible="no" active="no"/>
+<layer number="33" name="tFinish" color="6" fill="3" visible="no" active="no"/>
+<layer number="34" name="bFinish" color="6" fill="6" visible="no" active="no"/>
+<layer number="35" name="tGlue" color="7" fill="4" visible="no" active="no"/>
+<layer number="36" name="bGlue" color="7" fill="5" visible="no" active="no"/>
+<layer number="37" name="tTest" color="7" fill="1" visible="no" active="no"/>
+<layer number="38" name="bTest" color="7" fill="1" visible="no" active="no"/>
+<layer number="39" name="tKeepout" color="4" fill="11" visible="no" active="no"/>
+<layer number="40" name="bKeepout" color="1" fill="11" visible="no" active="no"/>
+<layer number="41" name="tRestrict" color="4" fill="10" visible="no" active="no"/>
+<layer number="42" name="bRestrict" color="1" fill="10" visible="no" active="no"/>
+<layer number="43" name="vRestrict" color="2" fill="10" visible="no" active="no"/>
+<layer number="44" name="Drills" color="7" fill="1" visible="no" active="no"/>
+<layer number="45" name="Holes" color="7" fill="1" visible="no" active="no"/>
+<layer number="46" name="Milling" color="3" fill="1" visible="no" active="no"/>
+<layer number="47" name="Measures" color="7" fill="1" visible="no" active="no"/>
+<layer number="48" name="Document" color="7" fill="1" visible="no" active="no"/>
+<layer number="49" name="Reference" color="7" fill="1" visible="no" active="no"/>
+<layer number="51" name="tDocu" color="7" fill="1" visible="no" active="no"/>
+<layer number="52" name="bDocu" color="7" fill="1" visible="no" active="no"/>
+<layer number="91" name="Nets" color="2" fill="1" visible="yes" active="yes"/>
+<layer number="92" name="Busses" color="1" fill="1" visible="yes" active="yes"/>
+<layer number="93" name="Pins" color="2" fill="1" visible="no" active="yes"/>
+<layer number="94" name="Symbols" color="4" fill="1" visible="yes" active="yes"/>
+<layer number="95" name="Names" color="7" fill="1" visible="yes" active="yes"/>
+<layer number="96" name="Values" color="7" fill="1" visible="yes" active="yes"/>
+<layer number="97" name="Info" color="7" fill="1" visible="yes" active="yes"/>
+<layer number="98" name="Guide" color="6" fill="1" visible="yes" active="yes"/>
+<layer number="101" name="LcdOutline" color="7" fill="1" visible="yes" active="yes"/>
+<layer number="250" name="Descript" color="7" fill="1" visible="yes" active="yes"/>
+<layer number="251" name="SMDround" color="7" fill="1" visible="yes" active="yes"/>
+</layers>
+<schematic>
+<libraries>
+<library name="frames">
+<packages>
+</packages>
+<symbols>
+<symbol name="A4L-LOC">
+<wire x1="256.54" y1="3.81" x2="256.54" y2="8.89" width="0.1016" layer="94"/>
+<wire x1="256.54" y1="8.89" x2="256.54" y2="13.97" width="0.1016" layer="94"/>
+<wire x1="256.54" y1="13.97" x2="256.54" y2="19.05" width="0.1016" layer="94"/>
+<wire x1="256.54" y1="19.05" x2="256.54" y2="24.13" width="0.1016" layer="94"/>
+<wire x1="161.29" y1="3.81" x2="161.29" y2="24.13" width="0.1016" layer="94"/>
+<wire x1="161.29" y1="24.13" x2="215.265" y2="24.13" width="0.1016" layer="94"/>
+<wire x1="215.265" y1="24.13" x2="256.54" y2="24.13" width="0.1016" layer="94"/>
+<wire x1="246.38" y1="3.81" x2="246.38" y2="8.89" width="0.1016" layer="94"/>
+<wire x1="246.38" y1="8.89" x2="256.54" y2="8.89" width="0.1016" layer="94"/>
+<wire x1="246.38" y1="8.89" x2="215.265" y2="8.89" width="0.1016" layer="94"/>
+<wire x1="215.265" y1="8.89" x2="215.265" y2="3.81" width="0.1016" layer="94"/>
+<wire x1="215.265" y1="8.89" x2="215.265" y2="13.97" width="0.1016" layer="94"/>
+<wire x1="215.265" y1="13.97" x2="256.54" y2="13.97" width="0.1016" layer="94"/>
+<wire x1="215.265" y1="13.97" x2="215.265" y2="19.05" width="0.1016" layer="94"/>
+<wire x1="215.265" y1="19.05" x2="256.54" y2="19.05" width="0.1016" layer="94"/>
+<wire x1="215.265" y1="19.05" x2="215.265" y2="24.13" width="0.1016" layer="94"/>
+<text x="217.17" y="15.24" size="2.54" layer="94" font="vector">&gt;DRAWING_NAME</text>
+<text x="217.17" y="10.16" size="2.286" layer="94" font="vector">&gt;LAST_DATE_TIME</text>
+<text x="230.505" y="5.08" size="2.54" layer="94" font="vector">&gt;SHEET</text>
+<text x="216.916" y="4.953" size="2.54" layer="94" font="vector">Sheet:</text>
+<frame x1="0" y1="0" x2="260.35" y2="179.07" columns="6" rows="4" layer="94"/>
+</symbol>
+</symbols>
+<devicesets>
+<deviceset name="A4L-LOC" prefix="FRAME" uservalue="yes">
+<description>&lt;b&gt;FRAME&lt;/b&gt;&lt;p&gt;
+DIN A4, landscape with location and doc. field</description>
+<gates>
+<gate name="G$1" symbol="A4L-LOC" x="0" y="0"/>
+</gates>
+<devices>
+<device name="">
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+</devices>
+</deviceset>
+</devicesets>
+</library>
+<library name="  merged">
+<packages>
+<package name="VQFP-100">
+<wire x1="-7" y1="7" x2="7" y2="7" width="0.254" layer="21"/>
+<wire x1="7" y1="7" x2="7" y2="-7" width="0.254" layer="21"/>
+<wire x1="7" y1="-7" x2="-7" y2="-7" width="0.254" layer="21"/>
+<wire x1="-7" y1="-7" x2="-7" y2="7" width="0.254" layer="21"/>
+<circle x="-5" y="5" radius="1" width="0.254" layer="21"/>
+<smd name="26" x="-6" y="-8" dx="0.25" dy="1.5" layer="1"/>
+<smd name="27" x="-5.5" y="-8" dx="0.25" dy="1.5" layer="1"/>
+<smd name="28" x="-5" y="-8" dx="0.25" dy="1.5" layer="1"/>
+<smd name="29" x="-4.5" y="-8" dx="0.25" dy="1.5" layer="1"/>
+<smd name="30" x="-4" y="-8" dx="0.25" dy="1.5" layer="1"/>
+<smd name="31" x="-3.5" y="-8" dx="0.25" dy="1.5" layer="1"/>
+<smd name="32" x="-3" y="-8" dx="0.25" dy="1.5" layer="1"/>
+<smd name="33" x="-2.5" y="-8" dx="0.25" dy="1.5" layer="1"/>
+<smd name="34" x="-2" y="-8" dx="0.25" dy="1.5" layer="1"/>
+<smd name="35" x="-1.5" y="-8" dx="0.25" dy="1.5" layer="1"/>
+<smd name="36" x="-1" y="-8" dx="0.25" dy="1.5" layer="1"/>
+<smd name="37" x="-0.5" y="-8" dx="0.25" dy="1.5" layer="1"/>
+<smd name="38" x="0" y="-8" dx="0.25" dy="1.5" layer="1"/>
+<smd name="39" x="0.5" y="-8" dx="0.25" dy="1.5" layer="1"/>
+<smd name="40" x="1" y="-8" dx="0.25" dy="1.5" layer="1"/>
+<smd name="41" x="1.5" y="-8" dx="0.25" dy="1.5" layer="1"/>
+<smd name="42" x="2" y="-8" dx="0.25" dy="1.5" layer="1"/>
+<smd name="43" x="2.5" y="-8" dx="0.25" dy="1.5" layer="1"/>
+<smd name="44" x="3" y="-8" dx="0.25" dy="1.5" layer="1"/>
+<smd name="45" x="3.5" y="-8" dx="0.25" dy="1.5" layer="1"/>
+<smd name="46" x="4" y="-8" dx="0.25" dy="1.5" layer="1"/>
+<smd name="47" x="4.5" y="-8" dx="0.25" dy="1.5" layer="1"/>
+<smd name="48" x="5" y="-8" dx="0.25" dy="1.5" layer="1"/>
+<smd name="49" x="5.5" y="-8" dx="0.25" dy="1.5" layer="1"/>
+<smd name="50" x="6" y="-8" dx="0.25" dy="1.5" layer="1"/>
+<smd name="100" x="-6" y="8" dx="0.25" dy="1.5" layer="1"/>
+<smd name="99" x="-5.5" y="8" dx="0.25" dy="1.5" layer="1"/>
+<smd name="98" x="-5" y="8" dx="0.25" dy="1.5" layer="1"/>
+<smd name="97" x="-4.5" y="8" dx="0.25" dy="1.5" layer="1"/>
+<smd name="96" x="-4" y="8" dx="0.25" dy="1.5" layer="1"/>
+<smd name="95" x="-3.5" y="8" dx="0.25" dy="1.5" layer="1"/>
+<smd name="94" x="-3" y="8" dx="0.25" dy="1.5" layer="1"/>
+<smd name="93" x="-2.5" y="8" dx="0.25" dy="1.5" layer="1"/>
+<smd name="92" x="-2" y="8" dx="0.25" dy="1.5" layer="1"/>
+<smd name="91" x="-1.5" y="8" dx="0.25" dy="1.5" layer="1"/>
+<smd name="90" x="-1" y="8" dx="0.25" dy="1.5" layer="1"/>
+<smd name="89" x="-0.5" y="8" dx="0.25" dy="1.5" layer="1"/>
+<smd name="88" x="0" y="8" dx="0.25" dy="1.5" layer="1"/>
+<smd name="87" x="0.5" y="8" dx="0.25" dy="1.5" layer="1"/>
+<smd name="86" x="1" y="8" dx="0.25" dy="1.5" layer="1"/>
+<smd name="85" x="1.5" y="8" dx="0.25" dy="1.5" layer="1"/>
+<smd name="84" x="2" y="8" dx="0.25" dy="1.5" layer="1"/>
+<smd name="83" x="2.5" y="8" dx="0.25" dy="1.5" layer="1"/>
+<smd name="82" x="3" y="8" dx="0.25" dy="1.5" layer="1"/>
+<smd name="81" x="3.5" y="8" dx="0.25" dy="1.5" layer="1"/>
+<smd name="80" x="4" y="8" dx="0.25" dy="1.5" layer="1"/>
+<smd name="79" x="4.5" y="8" dx="0.25" dy="1.5" layer="1"/>
+<smd name="78" x="5" y="8" dx="0.25" dy="1.5" layer="1"/>
+<smd name="77" x="5.5" y="8" dx="0.25" dy="1.5" layer="1"/>
+<smd name="76" x="6" y="8" dx="0.25" dy="1.5" layer="1"/>
+<smd name="51" x="8" y="-6" dx="0.25" dy="1.25" layer="1" rot="R90"/>
+<smd name="52" x="8" y="-5.5" dx="0.25" dy="1.25" layer="1" rot="R90"/>
+<smd name="53" x="8" y="-5" dx="0.25" dy="1.25" layer="1" rot="R90"/>
+<smd name="54" x="8" y="-4.5" dx="0.25" dy="1.25" layer="1" rot="R90"/>
+<smd name="55" x="8" y="-4" dx="0.25" dy="1.25" layer="1" rot="R90"/>
+<smd name="56" x="8" y="-3.5" dx="0.25" dy="1.25" layer="1" rot="R90"/>
+<smd name="57" x="8" y="-3" dx="0.25" dy="1.25" layer="1" rot="R90"/>
+<smd name="58" x="8" y="-2.5" dx="0.25" dy="1.25" layer="1" rot="R90"/>
+<smd name="59" x="8" y="-2" dx="0.25" dy="1.25" layer="1" rot="R90"/>
+<smd name="60" x="8" y="-1.5" dx="0.25" dy="1.25" layer="1" rot="R90"/>
+<smd name="61" x="8" y="-1" dx="0.25" dy="1.25" layer="1" rot="R90"/>
+<smd name="62" x="8" y="-0.5" dx="0.25" dy="1.25" layer="1" rot="R90"/>
+<smd name="63" x="8" y="0" dx="0.25" dy="1.25" layer="1" rot="R90"/>
+<smd name="64" x="8" y="0.5" dx="0.25" dy="1.25" layer="1" rot="R90"/>
+<smd name="65" x="8" y="1" dx="0.25" dy="1.25" layer="1" rot="R90"/>
+<smd name="66" x="8" y="1.5" dx="0.25" dy="1.25" layer="1" rot="R90"/>
+<smd name="67" x="8" y="2" dx="0.25" dy="1.25" layer="1" rot="R90"/>
+<smd name="68" x="8" y="2.5" dx="0.25" dy="1.25" layer="1" rot="R90"/>
+<smd name="69" x="8" y="3" dx="0.25" dy="1.25" layer="1" rot="R90"/>
+<smd name="70" x="8" y="3.5" dx="0.25" dy="1.25" layer="1" rot="R90"/>
+<smd name="71" x="8" y="4" dx="0.25" dy="1.25" layer="1" rot="R90"/>
+<smd name="72" x="8" y="4.5" dx="0.25" dy="1.25" layer="1" rot="R90"/>
+<smd name="73" x="8" y="5" dx="0.25" dy="1.25" layer="1" rot="R90"/>
+<smd name="74" x="8" y="5.5" dx="0.25" dy="1.25" layer="1" rot="R90"/>
+<smd name="75" x="8" y="6" dx="0.25" dy="1.25" layer="1" rot="R90"/>
+<smd name="25" x="-8" y="-6" dx="0.25" dy="1.25" layer="1" rot="R90"/>
+<smd name="24" x="-8" y="-5.5" dx="0.25" dy="1.25" layer="1" rot="R90"/>
+<smd name="23" x="-8" y="-5" dx="0.25" dy="1.25" layer="1" rot="R90"/>
+<smd name="22" x="-8" y="-4.5" dx="0.25" dy="1.25" layer="1" rot="R90"/>
+<smd name="21" x="-8" y="-4" dx="0.25" dy="1.25" layer="1" rot="R90"/>
+<smd name="20" x="-8" y="-3.5" dx="0.25" dy="1.25" layer="1" rot="R90"/>
+<smd name="19" x="-8" y="-3" dx="0.25" dy="1.25" layer="1" rot="R90"/>
+<smd name="18" x="-8" y="-2.5" dx="0.25" dy="1.25" layer="1" rot="R90"/>
+<smd name="17" x="-8" y="-2" dx="0.25" dy="1.25" layer="1" rot="R90"/>
+<smd name="16" x="-8" y="-1.5" dx="0.25" dy="1.25" layer="1" rot="R90"/>
+<smd name="15" x="-8" y="-1" dx="0.25" dy="1.25" layer="1" rot="R90"/>
+<smd name="14" x="-8" y="-0.5" dx="0.25" dy="1.25" layer="1" rot="R90"/>
+<smd name="13" x="-8" y="0" dx="0.25" dy="1.25" layer="1" rot="R90"/>
+<smd name="12" x="-8" y="0.5" dx="0.25" dy="1.25" layer="1" rot="R90"/>
+<smd name="11" x="-8" y="1" dx="0.25" dy="1.25" layer="1" rot="R90"/>
+<smd name="10" x="-8" y="1.5" dx="0.25" dy="1.25" layer="1" rot="R90"/>
+<smd name="9" x="-8" y="2" dx="0.25" dy="1.25" layer="1" rot="R90"/>
+<smd name="8" x="-8" y="2.5" dx="0.25" dy="1.25" layer="1" rot="R90"/>
+<smd name="7" x="-8" y="3" dx="0.25" dy="1.25" layer="1" rot="R90"/>
+<smd name="6" x="-8" y="3.5" dx="0.25" dy="1.25" layer="1" rot="R90"/>
+<smd name="5" x="-8" y="4" dx="0.25" dy="1.25" layer="1" rot="R90"/>
+<smd name="4" x="-8" y="4.5" dx="0.25" dy="1.25" layer="1" rot="R90"/>
+<smd name="3" x="-8" y="5" dx="0.25" dy="1.25" layer="1" rot="R90"/>
+<smd name="2" x="-8" y="5.5" dx="0.25" dy="1.25" layer="1" rot="R90"/>
+<smd name="1" x="-8" y="6" dx="0.25" dy="1.25" layer="1" rot="R90"/>
+<text x="6" y="-4" size="1.9304" layer="21" ratio="14" rot="R180">&gt;NAME</text>
+</package>
+<package name="LQFP-64">
+<wire x1="-0.25" y1="11.5" x2="-1.75" y2="11.5" width="0.2" layer="21"/>
+<wire x1="-1.75" y1="11.5" x2="-1.75" y2="10" width="0.2" layer="21"/>
+<wire x1="-0.25" y1="0.5" x2="-1.75" y2="0.5" width="0.2" layer="21"/>
+<wire x1="-1.75" y1="2" x2="-1.75" y2="0.5" width="0.2" layer="21"/>
+<wire x1="9.25" y1="0.5" x2="7.75" y2="0.5" width="0.2" layer="21"/>
+<wire x1="9.25" y1="2" x2="9.25" y2="0.5" width="0.2" layer="21"/>
+<wire x1="9.25" y1="11.5" x2="7.75" y2="11.5" width="0.2" layer="21"/>
+<wire x1="9.25" y1="11.5" x2="9.25" y2="10" width="0.2" layer="21"/>
+<circle x="-0.3467" y="1.8033" radius="0.3807" width="0.2" layer="21"/>
+<smd name="48" x="0" y="12" dx="0.25" dy="2" layer="1"/>
+<smd name="47" x="0.5" y="12" dx="0.25" dy="2" layer="1"/>
+<smd name="46" x="1" y="12" dx="0.25" dy="2" layer="1"/>
+<smd name="45" x="1.5" y="12" dx="0.25" dy="2" layer="1"/>
+<smd name="44" x="2" y="12" dx="0.25" dy="2" layer="1"/>
+<smd name="43" x="2.5" y="12" dx="0.25" dy="2" layer="1"/>
+<smd name="42" x="3" y="12" dx="0.25" dy="2" layer="1"/>
+<smd name="41" x="3.5" y="12" dx="0.25" dy="2" layer="1"/>
+<smd name="40" x="4" y="12" dx="0.25" dy="2" layer="1"/>
+<smd name="39" x="4.5" y="12" dx="0.25" dy="2" layer="1"/>
+<smd name="38" x="5" y="12" dx="0.25" dy="2" layer="1"/>
+<smd name="37" x="5.5" y="12" dx="0.25" dy="2" layer="1"/>
+<smd name="36" x="6" y="12" dx="0.25" dy="2" layer="1"/>
+<smd name="35" x="6.5" y="12" dx="0.25" dy="2" layer="1"/>
+<smd name="34" x="7" y="12" dx="0.25" dy="2" layer="1"/>
+<smd name="33" x="7.5" y="12" dx="0.25" dy="2" layer="1"/>
+<smd name="1" x="0" y="0" dx="0.25" dy="2" layer="1"/>
+<smd name="2" x="0.5" y="0" dx="0.25" dy="2" layer="1"/>
+<smd name="3" x="1" y="0" dx="0.25" dy="2" layer="1"/>
+<smd name="4" x="1.5" y="0" dx="0.25" dy="2" layer="1"/>
+<smd name="5" x="2" y="0" dx="0.25" dy="2" layer="1"/>
+<smd name="6" x="2.5" y="0" dx="0.25" dy="2" layer="1"/>
+<smd name="7" x="3" y="0" dx="0.25" dy="2" layer="1"/>
+<smd name="8" x="3.5" y="0" dx="0.25" dy="2" layer="1"/>
+<smd name="9" x="4" y="0" dx="0.25" dy="2" layer="1"/>
+<smd name="10" x="4.5" y="0" dx="0.25" dy="2" layer="1"/>
+<smd name="11" x="5" y="0" dx="0.25" dy="2" layer="1"/>
+<smd name="12" x="5.5" y="0" dx="0.25" dy="2" layer="1"/>
+<smd name="13" x="6" y="0" dx="0.25" dy="2" layer="1"/>
+<smd name="14" x="6.5" y="0" dx="0.25" dy="2" layer="1"/>
+<smd name="15" x="7" y="0" dx="0.25" dy="2" layer="1"/>
+<smd name="16" x="7.5" y="0" dx="0.25" dy="2" layer="1"/>
+<smd name="64" x="-2.25" y="2.25" dx="0.25" dy="2" layer="1" rot="R90"/>
+<smd name="63" x="-2.25" y="2.75" dx="0.25" dy="2" layer="1" rot="R90"/>
+<smd name="62" x="-2.25" y="3.25" dx="0.25" dy="2" layer="1" rot="R90"/>
+<smd name="61" x="-2.25" y="3.75" dx="0.25" dy="2" layer="1" rot="R90"/>
+<smd name="60" x="-2.25" y="4.25" dx="0.25" dy="2" layer="1" rot="R90"/>
+<smd name="59" x="-2.25" y="4.75" dx="0.25" dy="2" layer="1" rot="R90"/>
+<smd name="58" x="-2.25" y="5.25" dx="0.25" dy="2" layer="1" rot="R90"/>
+<smd name="57" x="-2.25" y="5.75" dx="0.25" dy="2" layer="1" rot="R90"/>
+<smd name="56" x="-2.25" y="6.25" dx="0.25" dy="2" layer="1" rot="R90"/>
+<smd name="55" x="-2.25" y="6.75" dx="0.25" dy="2" layer="1" rot="R90"/>
+<smd name="54" x="-2.25" y="7.25" dx="0.25" dy="2" layer="1" rot="R90"/>
+<smd name="53" x="-2.25" y="7.75" dx="0.25" dy="2" layer="1" rot="R90"/>
+<smd name="52" x="-2.25" y="8.25" dx="0.25" dy="2" layer="1" rot="R90"/>
+<smd name="51" x="-2.25" y="8.75" dx="0.25" dy="2" layer="1" rot="R90"/>
+<smd name="50" x="-2.25" y="9.25" dx="0.25" dy="2" layer="1" rot="R90"/>
+<smd name="49" x="-2.25" y="9.75" dx="0.25" dy="2" layer="1" rot="R90"/>
+<smd name="17" x="9.75" y="2.25" dx="0.25" dy="2" layer="1" rot="R90"/>
+<smd name="18" x="9.75" y="2.75" dx="0.25" dy="2" layer="1" rot="R90"/>
+<smd name="19" x="9.75" y="3.25" dx="0.25" dy="2" layer="1" rot="R90"/>
+<smd name="20" x="9.75" y="3.75" dx="0.25" dy="2" layer="1" rot="R90"/>
+<smd name="21" x="9.75" y="4.25" dx="0.25" dy="2" layer="1" rot="R90"/>
+<smd name="22" x="9.75" y="4.75" dx="0.25" dy="2" layer="1" rot="R90"/>
+<smd name="23" x="9.75" y="5.25" dx="0.25" dy="2" layer="1" rot="R90"/>
+<smd name="24" x="9.75" y="5.75" dx="0.25" dy="2" layer="1" rot="R90"/>
+<smd name="25" x="9.75" y="6.25" dx="0.25" dy="2" layer="1" rot="R90"/>
+<smd name="26" x="9.75" y="6.75" dx="0.25" dy="2" layer="1" rot="R90"/>
+<smd name="27" x="9.75" y="7.25" dx="0.25" dy="2" layer="1" rot="R90"/>
+<smd name="28" x="9.75" y="7.75" dx="0.25" dy="2" layer="1" rot="R90"/>
+<smd name="29" x="9.75" y="8.25" dx="0.25" dy="2" layer="1" rot="R90"/>
+<smd name="30" x="9.75" y="8.75" dx="0.25" dy="2" layer="1" rot="R90"/>
+<smd name="31" x="9.75" y="9.25" dx="0.25" dy="2" layer="1" rot="R90"/>
+<smd name="32" x="9.75" y="9.75" dx="0.25" dy="2" layer="1" rot="R90"/>
+<text x="0.5376" y="1.4397" size="1.27" layer="21">1</text>
+<text x="-0.3641" y="9.155" size="1.27" layer="21">&gt;NAME</text>
+</package>
+<package name="RLC_0805">
+<wire x1="-1.651" y1="0.9144" x2="1.651" y2="0.9144" width="0.254" layer="21"/>
+<wire x1="1.651" y1="0.9144" x2="1.651" y2="-0.9144" width="0.254" layer="21"/>
+<wire x1="1.651" y1="-0.9144" x2="-1.651" y2="-0.9144" width="0.254" layer="21"/>
+<wire x1="-1.651" y1="-0.9144" x2="-1.651" y2="0.9144" width="0.254" layer="21"/>
+<smd name="1" x="-0.85" y="0" dx="1.3" dy="1.5" layer="1"/>
+<smd name="2" x="0.85" y="0" dx="1.3" dy="1.5" layer="1"/>
+<text x="-1.4732" y="-0.635" size="1.27" layer="51">&gt;NAME</text>
+</package>
+<package name="RLC_1210">
+<wire x1="-2.4638" y1="1.6764" x2="2.4638" y2="1.6764" width="0.3048" layer="21"/>
+<wire x1="2.4638" y1="1.6764" x2="2.4638" y2="-1.651" width="0.3048" layer="21"/>
+<wire x1="2.4638" y1="-1.651" x2="-2.4638" y2="-1.651" width="0.3048" layer="21"/>
+<wire x1="-2.4638" y1="-1.651" x2="-2.4638" y2="1.6764" width="0.3048" layer="21"/>
+<smd name="1" x="-1.5" y="0" dx="1.5" dy="2.9" layer="1"/>
+<smd name="2" x="1.5" y="0" dx="1.5" dy="2.9" layer="1"/>
+<text x="-2.2096" y="-0.736" size="1.524" layer="51">&gt;NAME</text>
+</package>
+<package name="XTAL-SMD-CITIZEN-CS10">
+<wire x1="-0.75" y1="1.65" x2="5.25" y2="1.65" width="0.127" layer="21"/>
+<wire x1="-0.75" y1="-1.65" x2="5.25" y2="-1.65" width="0.127" layer="21"/>
+<smd name="A" x="-0.2" y="0" dx="2.4" dy="2.4" layer="1"/>
+<smd name="B" x="4.7" y="0" dx="2.4" dy="2.4" layer="1"/>
+<text x="2.589" y="-1.44" size="1.016" layer="21" rot="R90">&gt;NAME</text>
+</package>
+<package name="HIROSE-MQ172-4POS">
+<wire x1="3.6" y1="0" x2="-3.6" y2="0" width="0.127" layer="21"/>
+<wire x1="-3.6" y1="1.7" x2="-3.6" y2="0" width="0.127" layer="21"/>
+<wire x1="3.6" y1="1.7" x2="3.6" y2="0" width="0.127" layer="21"/>
+<wire x1="-3.6" y1="1.7" x2="-3.2" y2="1.7" width="0.127" layer="21"/>
+<wire x1="3.6" y1="1.7" x2="3.2" y2="1.7" width="0.127" layer="21"/>
+<smd name="P$1" x="-3.85" y="4.45" dx="2.3" dy="3.8" layer="1"/>
+<smd name="P$2" x="3.85" y="4.45" dx="2.3" dy="3.8" layer="1"/>
+<smd name="3" x="0.4" y="6.75" dx="0.55" dy="2.5" layer="1"/>
+<smd name="2" x="-0.4" y="6.75" dx="0.55" dy="2.5" layer="1"/>
+<smd name="1" x="-1.2" y="6.75" dx="0.55" dy="2.5" layer="1"/>
+<smd name="4" x="1.2" y="6.75" dx="0.55" dy="2.5" layer="1"/>
+<text x="-2.7918" y="0.2997" size="1.27" layer="21">&gt;NAME</text>
+<hole x="-1.5" y="3.6" drill="1"/>
+<hole x="1.5" y="3.6" drill="1"/>
+</package>
+<package name="2512">
+<wire x1="-1.27" y1="1.905" x2="7.239" y2="1.905" width="0.127" layer="21"/>
+<wire x1="7.239" y1="1.905" x2="7.239" y2="-1.905" width="0.127" layer="21"/>
+<wire x1="7.239" y1="-1.905" x2="-1.27" y2="-1.905" width="0.127" layer="21"/>
+<wire x1="-1.27" y1="-1.905" x2="-1.27" y2="1.905" width="0.127" layer="21"/>
+<smd name="P$1" x="0" y="0" dx="2.15" dy="3.5" layer="1"/>
+<smd name="P$2" x="5.95" y="0" dx="2.15" dy="3.5" layer="1"/>
+<text x="-1.016" y="2.159" size="1.27" layer="21">&gt;NAME</text>
+</package>
+<package name="HEADER-MALE-10X2-0.100-SHROUDED">
+<wire x1="-4.572" y1="16.51" x2="4.572" y2="16.51" width="0.254" layer="21"/>
+<wire x1="-4.572" y1="-16.51" x2="4.572" y2="-16.51" width="0.254" layer="21"/>
+<wire x1="-4.572" y1="16.51" x2="-4.572" y2="-16.51" width="0.254" layer="21"/>
+<wire x1="4.572" y1="16.51" x2="4.572" y2="-16.51" width="0.254" layer="21"/>
+<pad name="1" x="-1.27" y="11.43" drill="1.143" shape="square"/>
+<pad name="2" x="1.27" y="11.43" drill="1.143"/>
+<pad name="3" x="-1.27" y="8.89" drill="1.143"/>
+<pad name="4" x="1.27" y="8.89" drill="1.143"/>
+<pad name="5" x="-1.27" y="6.35" drill="1.143"/>
+<pad name="6" x="1.27" y="6.35" drill="1.143"/>
+<pad name="7" x="-1.27" y="3.81" drill="1.143"/>
+<pad name="8" x="1.27" y="3.81" drill="1.143"/>
+<pad name="9" x="-1.27" y="1.27" drill="1.143"/>
+<pad name="10" x="1.27" y="1.27" drill="1.143"/>
+<pad name="11" x="-1.27" y="-1.27" drill="1.143"/>
+<pad name="12" x="1.27" y="-1.27" drill="1.143"/>
+<pad name="13" x="-1.27" y="-3.81" drill="1.143"/>
+<pad name="14" x="1.27" y="-3.81" drill="1.143"/>
+<pad name="15" x="-1.27" y="-6.35" drill="1.143"/>
+<pad name="16" x="1.27" y="-6.35" drill="1.143"/>
+<pad name="17" x="-1.27" y="-8.89" drill="1.143"/>
+<pad name="18" x="1.27" y="-8.89" drill="1.143"/>
+<pad name="19" x="-1.27" y="-11.43" drill="1.143"/>
+<pad name="20" x="1.27" y="-11.43" drill="1.143"/>
+<text x="-3.175" y="14.605" size="1.27" layer="21" ratio="17">&gt;NAME</text>
+</package>
+<package name="TSSOP-24">
+<wire x1="-3.3" y1="-2.2" x2="-3.05" y2="-2.2" width="0.254" layer="21"/>
+<wire x1="-3.05" y1="-2.2" x2="-2.8" y2="-2.2" width="0.254" layer="21"/>
+<wire x1="-2.8" y1="-2.2" x2="4.6" y2="-2.2" width="0.254" layer="21"/>
+<wire x1="-3.3" y1="2.2" x2="-3.05" y2="2.2" width="0.254" layer="21"/>
+<wire x1="-3.05" y1="2.2" x2="-2.8" y2="2.2" width="0.254" layer="21"/>
+<wire x1="-2.8" y1="2.2" x2="-2.55" y2="2.2" width="0.254" layer="21"/>
+<wire x1="-2.55" y1="2.2" x2="4.6" y2="2.2" width="0.254" layer="21"/>
+<wire x1="-3.3" y1="2.2" x2="-3.3" y2="-2.2" width="0.254" layer="21"/>
+<wire x1="4.6" y1="2.2" x2="4.6" y2="-2.2" width="0.254" layer="21"/>
+<wire x1="-2.8" y1="2.2" x2="-2.8" y2="-2.2" width="0.254" layer="21"/>
+<wire x1="-3.05" y1="2.2" x2="-3.05" y2="-2.2" width="0.254" layer="21"/>
+<wire x1="-2.55" y1="2.2" x2="-2.55" y2="-2.2" width="0.254" layer="21"/>
+<smd name="1" x="-2.925" y="-3.2" dx="0.3" dy="1.5" layer="1"/>
+<smd name="2" x="-2.275" y="-3.2" dx="0.3" dy="1.5" layer="1"/>
+<smd name="3" x="-1.625" y="-3.2" dx="0.3" dy="1.5" layer="1"/>
+<smd name="4" x="-0.975" y="-3.2" dx="0.3" dy="1.5" layer="1"/>
+<smd name="5" x="-0.325" y="-3.2" dx="0.3" dy="1.5" layer="1"/>
+<smd name="6" x="0.325" y="-3.2" dx="0.3" dy="1.5" layer="1"/>
+<smd name="7" x="0.975" y="-3.2" dx="0.3" dy="1.5" layer="1"/>
+<smd name="8" x="1.625" y="-3.2" dx="0.3" dy="1.5" layer="1"/>
+<smd name="9" x="2.275" y="-3.2" dx="0.3" dy="1.5" layer="1"/>
+<smd name="10" x="2.925" y="-3.2" dx="0.3" dy="1.5" layer="1"/>
+<smd name="20" x="-0.325" y="3.2" dx="0.3" dy="1.5" layer="1"/>
+<smd name="19" x="0.325" y="3.2" dx="0.3" dy="1.5" layer="1"/>
+<smd name="18" x="0.975" y="3.2" dx="0.3" dy="1.5" layer="1"/>
+<smd name="17" x="1.625" y="3.2" dx="0.3" dy="1.5" layer="1"/>
+<smd name="16" x="2.275" y="3.2" dx="0.3" dy="1.5" layer="1"/>
+<smd name="15" x="2.925" y="3.2" dx="0.3" dy="1.5" layer="1"/>
+<smd name="14" x="3.575" y="3.2" dx="0.3" dy="1.5" layer="1"/>
+<smd name="13" x="4.225" y="3.2" dx="0.3" dy="1.5" layer="1"/>
+<smd name="11" x="3.575" y="-3.2" dx="0.3" dy="1.5" layer="1"/>
+<smd name="12" x="4.225" y="-3.2" dx="0.3" dy="1.5" layer="1"/>
+<smd name="21" x="-0.975" y="3.2" dx="0.3" dy="1.5" layer="1"/>
+<smd name="22" x="-1.625" y="3.2" dx="0.3" dy="1.5" layer="1"/>
+<smd name="23" x="-2.275" y="3.2" dx="0.3" dy="1.5" layer="1"/>
+<smd name="24" x="-2.925" y="3.2" dx="0.3" dy="1.5" layer="1"/>
+<text x="-2" y="0.5" size="1.27" layer="21" ratio="15">&gt;NAME</text>
+</package>
+<package name="RLC_0603">
+<wire x1="-1.4732" y1="0.6858" x2="1.4732" y2="0.6858" width="0.2032" layer="21"/>
+<wire x1="1.4732" y1="0.6858" x2="1.4732" y2="-0.6858" width="0.2032" layer="21"/>
+<wire x1="1.4732" y1="-0.6858" x2="-1.4732" y2="-0.6858" width="0.2032" layer="21"/>
+<wire x1="-1.4732" y1="-0.6858" x2="-1.4732" y2="0.6858" width="0.2032" layer="21"/>
+<smd name="1" x="-0.85" y="0" dx="1" dy="1.1" layer="1"/>
+<smd name="2" x="0.85" y="0" dx="1" dy="1.1" layer="1"/>
+<text x="-1.1938" y="-0.4064" size="0.762" layer="51">&gt;NAME</text>
+</package>
+<package name="MSOP8">
+<wire x1="2.4" y1="4.2" x2="-0.4" y2="4.2" width="0.127" layer="21"/>
+<wire x1="-0.4" y1="4.2" x2="-0.6" y2="4" width="0.127" layer="21"/>
+<wire x1="-0.6" y1="4" x2="-0.6" y2="0.8" width="0.127" layer="21"/>
+<wire x1="-0.6" y1="0.8" x2="-0.4" y2="0.6" width="0.127" layer="21"/>
+<wire x1="-0.4" y1="0.6" x2="2.4" y2="0.6" width="0.127" layer="21"/>
+<wire x1="2.4" y1="0.6" x2="2.6" y2="0.8" width="0.127" layer="21"/>
+<wire x1="2.6" y1="0.8" x2="2.6" y2="4" width="0.127" layer="21"/>
+<wire x1="2.6" y1="4" x2="2.4" y2="4.2" width="0.127" layer="21"/>
+<circle x="0" y="1.2" radius="0.2" width="0.127" layer="21"/>
+<smd name="1" x="0" y="0" dx="0.41" dy="1.02" layer="1"/>
+<smd name="2" x="0.65" y="0" dx="0.41" dy="1.02" layer="1"/>
+<smd name="3" x="1.3" y="0" dx="0.41" dy="1.02" layer="1"/>
+<smd name="4" x="1.95" y="0" dx="0.41" dy="1.02" layer="1"/>
+<smd name="8" x="0" y="4.8" dx="0.41" dy="1.02" layer="1"/>
+<smd name="7" x="0.65" y="4.8" dx="0.41" dy="1.02" layer="1"/>
+<smd name="6" x="1.3" y="4.8" dx="0.41" dy="1.02" layer="1"/>
+<smd name="5" x="1.95" y="4.8" dx="0.41" dy="1.02" layer="1"/>
+<text x="2.8" y="4.6" size="1.27" layer="25" rot="R270">&gt;NAME</text>
+</package>
+<package name="TACTSWITCH">
+<wire x1="-1.27" y1="3.175" x2="6.35" y2="3.175" width="0.127" layer="21"/>
+<wire x1="6.35" y1="3.175" x2="6.35" y2="-3.175" width="0.127" layer="21"/>
+<wire x1="6.35" y1="-3.175" x2="-1.27" y2="-3.175" width="0.127" layer="21"/>
+<wire x1="-1.27" y1="-3.175" x2="-1.27" y2="3.175" width="0.127" layer="21"/>
+<pad name="P$1" x="0" y="0" drill="0.8128" diameter="1.6764"/>
+<pad name="P$2" x="5.08" y="0" drill="0.8128" diameter="1.6764"/>
+</package>
+<package name="TACTSWITCH-SMD-EVQQ1">
+<wire x1="-4.25" y1="5" x2="-3.2" y2="5" width="0.3048" layer="21"/>
+<wire x1="3.2" y1="5" x2="4.25" y2="5" width="0.3048" layer="21"/>
+<wire x1="-4.25" y1="-5" x2="-3.2" y2="-5" width="0.3048" layer="21"/>
+<wire x1="3.2" y1="-5" x2="4.25" y2="-5" width="0.3048" layer="21"/>
+<wire x1="-4.25" y1="5" x2="-4.25" y2="-5" width="0.3048" layer="21"/>
+<wire x1="4.25" y1="5" x2="4.25" y2="-5" width="0.3048" layer="21"/>
+<wire x1="-1.34" y1="5" x2="1.31" y2="5" width="0.3048" layer="21"/>
+<wire x1="-1.34" y1="-5" x2="1.31" y2="-5" width="0.3048" layer="21"/>
+<smd name="A" x="-2.25" y="4.5" dx="1.5" dy="3" layer="1"/>
+<smd name="P$2" x="2.25" y="4.5" dx="1.5" dy="3" layer="1"/>
+<smd name="P$3" x="-2.25" y="-4.5" dx="1.5" dy="3" layer="1"/>
+<smd name="B" x="2.25" y="-4.5" dx="1.5" dy="3" layer="1"/>
+<text x="-3.81" y="1.27" size="1.27" layer="21" ratio="13">&gt;NAME</text>
+</package>
+<package name="CAPCAITOR-ELECTROLYTIC-ALCHIP-MZA-F80">
+<wire x1="-3.6" y1="3.3" x2="2.4" y2="3.3" width="0.3048" layer="21"/>
+<wire x1="-3.6" y1="-3.3" x2="2.4" y2="-3.3" width="0.3048" layer="21"/>
+<wire x1="-3.6" y1="3.3" x2="-3.6" y2="1" width="0.3048" layer="21"/>
+<wire x1="-3.6" y1="-1" x2="-3.6" y2="-3.3" width="0.3048" layer="21"/>
+<wire x1="3.6" y1="2.5" x2="3.6" y2="1" width="0.3048" layer="21"/>
+<wire x1="3.6" y1="-1" x2="3.6" y2="-2.5" width="0.3048" layer="21"/>
+<wire x1="2.5" y1="-3.3" x2="3.6" y2="-2.5" width="0.3048" layer="21"/>
+<wire x1="2.4" y1="3.3" x2="3.6" y2="2.5" width="0.3048" layer="21"/>
+<smd name="+" x="2.75" y="0" dx="3.5" dy="1.5" layer="1"/>
+<smd name="-" x="-2.75" y="0" dx="3.5" dy="1.5" layer="1"/>
+<text x="1.84" y="1.905" size="1.27" layer="21" ratio="16">+</text>
+<text x="-3" y="-2.5" size="1.27" layer="21" ratio="16">&gt;NAME</text>
+</package>
+<package name="LED_0603">
+<wire x1="-1.4732" y1="0.6858" x2="1.4732" y2="0.6858" width="0.2032" layer="21"/>
+<wire x1="1.4732" y1="0.6858" x2="1.4732" y2="-0.6858" width="0.2032" layer="21"/>
+<wire x1="1.4732" y1="-0.6858" x2="-1.4732" y2="-0.6858" width="0.2032" layer="21"/>
+<wire x1="-1.4732" y1="-0.6858" x2="-1.4732" y2="0.6858" width="0.2032" layer="21"/>
+<smd name="+" x="-0.85" y="0" dx="1" dy="1.1" layer="1"/>
+<smd name="-" x="0.85" y="0" dx="1" dy="1.1" layer="1"/>
+<text x="-1.1938" y="-0.4064" size="0.762" layer="51">&gt;NAME</text>
+<text x="-1.2779" y="0.7482" size="1.016" layer="21" ratio="18">+</text>
+</package>
+<package name="TESTPAD-PTH-0.7MM">
+<circle x="0" y="0" radius="1.2" width="0.127" layer="21"/>
+<pad name="1" x="0" y="0" drill="0.7" diameter="1.778"/>
+</package>
+<package name="SQUARE-PAD-0.200-INCH">
+<smd name="1" x="0" y="0" dx="5.08" dy="5.08" layer="1"/>
+</package>
+<package name="KEYSTONE-SMD-TESTPOINT-5015">
+<wire x1="-1.9685" y1="1.143" x2="-0.508" y2="1.143" width="0.254" layer="21"/>
+<wire x1="-1.9685" y1="-1.143" x2="-0.508" y2="-1.143" width="0.254" layer="21"/>
+<wire x1="-1.9685" y1="1.143" x2="-1.9685" y2="-1.143" width="0.254" layer="21"/>
+<wire x1="1.9685" y1="1.143" x2="0.508" y2="1.143" width="0.254" layer="21"/>
+<wire x1="1.9685" y1="-1.143" x2="0.508" y2="-1.143" width="0.254" layer="21"/>
+<wire x1="1.9685" y1="1.143" x2="1.9685" y2="-1.143" width="0.254" layer="21"/>
+<smd name="1" x="0" y="0" dx="3.429" dy="1.778" layer="1"/>
+<text x="-1.8263" y="-0.5699" size="1.27" layer="51">&gt;NAME</text>
+</package>
+<package name="KEYSTONE-PTH-TESTPOINT-5011">
+<wire x1="-1.524" y1="0" x2="-1.397" y2="0" width="0.254" layer="21"/>
+<wire x1="1.524" y1="0" x2="1.397" y2="0" width="0.254" layer="21"/>
+<circle x="0" y="0" radius="1.5875" width="0.254" layer="21"/>
+<pad name="A" x="0" y="0" drill="1.6002"/>
+<text x="-1.27" y="-0.508" size="0.889" layer="51">&gt;NAME</text>
+</package>
+<package name="SOT-23-8">
+<wire x1="-1.5508" y1="1.5" x2="-1.5508" y2="-1.5" width="0.254" layer="21"/>
+<wire x1="-1.2968" y1="1.5" x2="-1.2968" y2="-1.5" width="0.254" layer="21"/>
+<wire x1="-1.3208" y1="-1.524" x2="-1.5748" y2="-1.524" width="0.254" layer="21"/>
+<wire x1="-1.3208" y1="1.524" x2="-1.5748" y2="1.524" width="0.254" layer="21"/>
+<wire x1="-1.5748" y1="1.524" x2="-1.5748" y2="-1.524" width="0.254" layer="21"/>
+<wire x1="1.5" y1="1.5" x2="1.5" y2="-1.5" width="0.254" layer="21"/>
+<wire x1="-1.27" y1="0.508" x2="-1.016" y2="0.508" width="0.254" layer="21"/>
+<wire x1="-1.016" y1="0.508" x2="-1.016" y2="-0.508" width="0.254" layer="21"/>
+<wire x1="-1.016" y1="-0.508" x2="-1.27" y2="-0.508" width="0.254" layer="21"/>
+<wire x1="-1.27" y1="-0.508" x2="-1.27" y2="0.254" width="0.254" layer="21"/>
+<wire x1="-1.27" y1="0.254" x2="-1.016" y2="0.254" width="0.254" layer="21"/>
+<wire x1="-1.016" y1="0.254" x2="-1.016" y2="0.508" width="0.254" layer="21"/>
+<wire x1="-1.016" y1="0.508" x2="-0.762" y2="0.508" width="0.254" layer="21"/>
+<wire x1="-0.762" y1="0.508" x2="-0.762" y2="-0.508" width="0.254" layer="21"/>
+<wire x1="-0.762" y1="-0.508" x2="-1.016" y2="-0.508" width="0.254" layer="21"/>
+<smd name="2" x="-0.325" y="-1.4" dx="0.325" dy="1.25" layer="1"/>
+<smd name="1" x="-0.975" y="-1.4" dx="0.325" dy="1.25" layer="1"/>
+<smd name="3" x="0.325" y="-1.4" dx="0.325" dy="1.25" layer="1"/>
+<smd name="4" x="0.975" y="-1.4" dx="0.325" dy="1.25" layer="1"/>
+<smd name="7" x="-0.325" y="1.4" dx="0.325" dy="1.25" layer="1"/>
+<smd name="8" x="-0.975" y="1.4" dx="0.325" dy="1.25" layer="1"/>
+<smd name="6" x="0.325" y="1.4" dx="0.325" dy="1.25" layer="1"/>
+<smd name="5" x="0.975" y="1.4" dx="0.325" dy="1.25" layer="1"/>
+<text x="-1.905" y="-1.27" size="1.016" layer="21" ratio="17" rot="R90">&gt;NAME</text>
+</package>
+<package name="SOT-23-8-OR-MSOP-8">
+<wire x1="-1.5508" y1="1.5" x2="-1.5508" y2="-1.5" width="0.254" layer="21"/>
+<wire x1="-1.2968" y1="1.5" x2="-1.2968" y2="-1.5" width="0.254" layer="21"/>
+<wire x1="-1.3208" y1="-1.524" x2="-1.5748" y2="-1.524" width="0.254" layer="21"/>
+<wire x1="-1.3208" y1="1.524" x2="-1.5748" y2="1.524" width="0.254" layer="21"/>
+<wire x1="-1.5748" y1="1.524" x2="-1.5748" y2="-1.524" width="0.254" layer="21"/>
+<wire x1="1.5" y1="1.5" x2="1.5" y2="-1.5" width="0.254" layer="21"/>
+<wire x1="-1.27" y1="0.508" x2="-1.016" y2="0.508" width="0.254" layer="21"/>
+<wire x1="-1.016" y1="0.508" x2="-1.016" y2="-0.508" width="0.254" layer="21"/>
+<wire x1="-1.016" y1="-0.508" x2="-1.27" y2="-0.508" width="0.254" layer="21"/>
+<wire x1="-1.27" y1="-0.508" x2="-1.27" y2="0.254" width="0.254" layer="21"/>
+<wire x1="-1.27" y1="0.254" x2="-1.016" y2="0.254" width="0.254" layer="21"/>
+<wire x1="-1.016" y1="0.254" x2="-1.016" y2="0.508" width="0.254" layer="21"/>
+<wire x1="-1.016" y1="0.508" x2="-0.762" y2="0.508" width="0.254" layer="21"/>
+<wire x1="-0.762" y1="0.508" x2="-0.762" y2="-0.508" width="0.254" layer="21"/>
+<wire x1="-0.762" y1="-0.508" x2="-1.016" y2="-0.508" width="0.254" layer="21"/>
+<smd name="2" x="-0.325" y="-1.65" dx="0.325" dy="1.8" layer="1"/>
+<smd name="1" x="-0.975" y="-1.65" dx="0.325" dy="1.8" layer="1"/>
+<smd name="3" x="0.325" y="-1.65" dx="0.325" dy="1.8" layer="1"/>
+<smd name="4" x="0.975" y="-1.65" dx="0.325" dy="1.8" layer="1"/>
+<smd name="7" x="-0.325" y="1.65" dx="0.325" dy="1.8" layer="1"/>
+<smd name="8" x="-0.975" y="1.65" dx="0.325" dy="1.8" layer="1"/>
+<smd name="6" x="0.325" y="1.65" dx="0.325" dy="1.8" layer="1"/>
+<smd name="5" x="0.975" y="1.65" dx="0.325" dy="1.8" layer="1"/>
+<text x="-1.905" y="-1.27" size="1.016" layer="21" ratio="17" rot="R90">&gt;NAME</text>
+</package>
+<package name="SOIC-8">
+<wire x1="4.445" y1="3.81" x2="0.381" y2="3.81" width="0.254" layer="21"/>
+<wire x1="0.381" y1="3.81" x2="0.127" y2="3.81" width="0.254" layer="21"/>
+<wire x1="0.127" y1="3.81" x2="-0.127" y2="3.81" width="0.254" layer="21"/>
+<wire x1="-0.127" y1="3.81" x2="-0.381" y2="3.81" width="0.254" layer="21"/>
+<wire x1="-0.381" y1="3.81" x2="-0.635" y2="3.81" width="0.254" layer="21"/>
+<wire x1="-0.635" y1="3.81" x2="-0.635" y2="1.27" width="0.254" layer="21"/>
+<wire x1="-0.635" y1="1.27" x2="-0.381" y2="1.27" width="0.254" layer="21"/>
+<wire x1="-0.381" y1="1.27" x2="-0.127" y2="1.27" width="0.254" layer="21"/>
+<wire x1="-0.127" y1="1.27" x2="0.127" y2="1.27" width="0.254" layer="21"/>
+<wire x1="0.127" y1="1.27" x2="4.445" y2="1.27" width="0.254" layer="21"/>
+<wire x1="4.445" y1="1.27" x2="4.445" y2="3.81" width="0.254" layer="21"/>
+<wire x1="-0.381" y1="3.81" x2="-0.381" y2="1.27" width="0.254" layer="21"/>
+<smd name="1" x="0" y="0" dx="2.032" dy="0.6604" layer="1" rot="R90"/>
+<smd name="2" x="1.27" y="0" dx="2.032" dy="0.6604" layer="1" rot="R90"/>
+<smd name="3" x="2.54" y="0" dx="2.032" dy="0.6604" layer="1" rot="R90"/>
+<smd name="4" x="3.81" y="0" dx="2.032" dy="0.6604" layer="1" rot="R90"/>
+<smd name="5" x="3.81" y="5.08" dx="2.032" dy="0.6604" layer="1" rot="R90"/>
+<smd name="6" x="2.54" y="5.08" dx="2.032" dy="0.6604" layer="1" rot="R90"/>
+<smd name="7" x="1.27" y="5.08" dx="2.032" dy="0.6604" layer="1" rot="R90"/>
+<smd name="8" x="0" y="5.08" dx="2.032" dy="0.6604" layer="1" rot="R90"/>
+<text x="0.6825" y="1.8742" size="1.27" layer="25" ratio="15">&gt;NAME</text>
+</package>
+<package name="TSSOP-14">
+<wire x1="0.8" y1="0.3" x2="5.3" y2="0.3" width="0.127" layer="21"/>
+<wire x1="5.3" y1="0.3" x2="5.3" y2="0" width="0.127" layer="21"/>
+<wire x1="5.3" y1="0" x2="5.3" y2="-0.3" width="0.127" layer="21"/>
+<wire x1="5.3" y1="-0.3" x2="5.3" y2="-4.2" width="0.127" layer="21"/>
+<wire x1="5.3" y1="-4.2" x2="0.8" y2="-4.2" width="0.127" layer="21"/>
+<wire x1="0.8" y1="-4.2" x2="0.8" y2="-0.3" width="0.127" layer="21"/>
+<wire x1="0.8" y1="-0.3" x2="0.8" y2="0" width="0.127" layer="21"/>
+<wire x1="0.8" y1="0" x2="0.8" y2="0.3" width="0.127" layer="21"/>
+<wire x1="0.8" y1="0" x2="5.3" y2="0" width="0.127" layer="21"/>
+<wire x1="5.3" y1="-0.3" x2="0.8" y2="-0.3" width="0.127" layer="21"/>
+<wire x1="0.9" y1="-0.2" x2="5.2" y2="-0.2" width="0.127" layer="21"/>
+<wire x1="5.2" y1="-0.1" x2="0.9" y2="-0.1" width="0.127" layer="21"/>
+<wire x1="0.9" y1="0.1" x2="5.2" y2="0.1" width="0.127" layer="21"/>
+<wire x1="5.2" y1="0.2" x2="0.9" y2="0.2" width="0.127" layer="21"/>
+<smd name="1" x="0" y="0" dx="1.3" dy="0.36" layer="1"/>
+<smd name="2" x="0" y="-0.65" dx="1.3" dy="0.36" layer="1"/>
+<smd name="3" x="0" y="-1.3" dx="1.3" dy="0.36" layer="1"/>
+<smd name="4" x="0" y="-1.95" dx="1.3" dy="0.36" layer="1"/>
+<smd name="5" x="0" y="-2.6" dx="1.3" dy="0.36" layer="1"/>
+<smd name="6" x="0" y="-3.25" dx="1.3" dy="0.36" layer="1"/>
+<smd name="7" x="0" y="-3.9" dx="1.3" dy="0.36" layer="1"/>
+<smd name="14" x="6.095" y="0" dx="1.3" dy="0.36" layer="1"/>
+<smd name="13" x="6.095" y="-0.65" dx="1.3" dy="0.36" layer="1"/>
+<smd name="12" x="6.095" y="-1.3" dx="1.3" dy="0.36" layer="1"/>
+<smd name="11" x="6.095" y="-1.95" dx="1.3" dy="0.36" layer="1"/>
+<smd name="10" x="6.095" y="-2.6" dx="1.3" dy="0.36" layer="1"/>
+<smd name="9" x="6.095" y="-3.25" dx="1.3" dy="0.36" layer="1"/>
+<smd name="8" x="6.095" y="-3.9" dx="1.3" dy="0.36" layer="1"/>
+<text x="1" y="-2.1" size="1.27" layer="21" ratio="15">&gt;NAME</text>
+</package>
+<package name="TSSOP-20">
+<wire x1="0.9" y1="0.2" x2="5.2" y2="0.2" width="0.127" layer="21"/>
+<wire x1="5.2" y1="0.2" x2="5.2" y2="0" width="0.127" layer="21"/>
+<wire x1="5.2" y1="0" x2="5.2" y2="-0.2" width="0.127" layer="21"/>
+<wire x1="5.2" y1="-0.2" x2="5.2" y2="-0.4" width="0.127" layer="21"/>
+<wire x1="5.2" y1="-0.4" x2="5.2" y2="-0.6" width="0.127" layer="21"/>
+<wire x1="5.2" y1="-0.6" x2="5.2" y2="-6" width="0.127" layer="21"/>
+<wire x1="5.2" y1="-6" x2="0.9" y2="-6" width="0.127" layer="21"/>
+<wire x1="0.9" y1="-6" x2="0.9" y2="-0.6" width="0.127" layer="21"/>
+<wire x1="0.9" y1="-0.6" x2="0.9" y2="-0.4" width="0.127" layer="21"/>
+<wire x1="0.9" y1="-0.4" x2="0.9" y2="-0.2" width="0.127" layer="21"/>
+<wire x1="0.9" y1="-0.2" x2="0.9" y2="0" width="0.127" layer="21"/>
+<wire x1="0.9" y1="0" x2="0.9" y2="0.2" width="0.127" layer="21"/>
+<wire x1="0.9" y1="0" x2="5.2" y2="0" width="0.127" layer="21"/>
+<wire x1="5.2" y1="-0.2" x2="0.9" y2="-0.2" width="0.127" layer="21"/>
+<wire x1="0.9" y1="-0.4" x2="5.2" y2="-0.4" width="0.127" layer="21"/>
+<wire x1="0.9" y1="-0.6" x2="5.2" y2="-0.6" width="0.127" layer="21"/>
+<smd name="1" x="0" y="0" dx="1.4" dy="0.36" layer="1"/>
+<smd name="2" x="0" y="-0.65" dx="1.4" dy="0.36" layer="1"/>
+<smd name="3" x="0" y="-1.3" dx="1.4" dy="0.36" layer="1"/>
+<smd name="4" x="0" y="-1.95" dx="1.4" dy="0.36" layer="1"/>
+<smd name="5" x="0" y="-2.6" dx="1.4" dy="0.36" layer="1"/>
+<smd name="6" x="0" y="-3.25" dx="1.4" dy="0.36" layer="1"/>
+<smd name="7" x="0" y="-3.9" dx="1.4" dy="0.36" layer="1"/>
+<smd name="8" x="0" y="-4.55" dx="1.4" dy="0.36" layer="1"/>
+<smd name="9" x="0" y="-5.2" dx="1.4" dy="0.36" layer="1"/>
+<smd name="10" x="0" y="-5.85" dx="1.4" dy="0.36" layer="1"/>
+<smd name="20" x="6.095" y="0" dx="1.4" dy="0.36" layer="1"/>
+<smd name="19" x="6.095" y="-0.65" dx="1.4" dy="0.36" layer="1"/>
+<smd name="18" x="6.095" y="-1.3" dx="1.4" dy="0.36" layer="1"/>
+<smd name="17" x="6.095" y="-1.95" dx="1.4" dy="0.36" layer="1"/>
+<smd name="16" x="6.095" y="-2.6" dx="1.4" dy="0.36" layer="1"/>
+<smd name="15" x="6.095" y="-3.25" dx="1.4" dy="0.36" layer="1"/>
+<smd name="14" x="6.095" y="-3.9" dx="1.4" dy="0.36" layer="1"/>
+<smd name="13" x="6.095" y="-4.55" dx="1.4" dy="0.36" layer="1"/>
+<smd name="12" x="6.095" y="-5.2" dx="1.4" dy="0.36" layer="1"/>
+<smd name="11" x="6.095" y="-5.85" dx="1.4" dy="0.36" layer="1"/>
+<text x="2" y="-0.8" size="1.27" layer="21" ratio="15" rot="R270">&gt;NAME</text>
+</package>
+<package name="SMV-5">
+<wire x1="0.2" y1="0.5" x2="1.8" y2="0.5" width="0.127" layer="21"/>
+<wire x1="0.2" y1="-2.5" x2="1.8" y2="-2.5" width="0.127" layer="21"/>
+<wire x1="0.2" y1="-2.5" x2="0.2" y2="-2.3" width="0.127" layer="21"/>
+<wire x1="1.8" y1="-2.5" x2="1.8" y2="-2.3" width="0.127" layer="21"/>
+<wire x1="0.2" y1="0.5" x2="0.2" y2="0.4" width="0.127" layer="21"/>
+<wire x1="1.8" y1="0.5" x2="1.8" y2="0.4" width="0.127" layer="21"/>
+<wire x1="1.8" y1="-0.6" x2="1.8" y2="-0.4" width="0.127" layer="21"/>
+<wire x1="1.8" y1="-0.6" x2="1.8" y2="-1.4" width="0.127" layer="21"/>
+<smd name="1" x="0" y="0" dx="1.5" dy="0.5" layer="1"/>
+<smd name="2" x="0" y="-0.95" dx="1.5" dy="0.5" layer="1"/>
+<smd name="3" x="0" y="-1.9" dx="1.5" dy="0.5" layer="1"/>
+<smd name="5" x="2.2" y="0" dx="1.5" dy="0.5" layer="1"/>
+<smd name="4" x="2.2" y="-1.9" dx="1.5" dy="0.5" layer="1"/>
+<text x="0" y="0.8" size="1.016" layer="21" ratio="18">&gt;NAME</text>
+</package>
+<package name="USB-MINIB-SMD">
+<wire x1="-3.05" y1="-4.25" x2="-3.05" y2="1.85" width="0.3" layer="21"/>
+<wire x1="-6.05" y1="-7.85" x2="-6.05" y2="-4.25" width="0.127" layer="21"/>
+<wire x1="-6.05" y1="-4.25" x2="-6.05" y2="5.45" width="0.127" layer="21"/>
+<wire x1="-6.05" y1="-4.25" x2="-6.05" y2="1.85" width="0.3" layer="21"/>
+<smd name="1" x="2" y="0.4" dx="2.3" dy="0.5" layer="1"/>
+<smd name="2" x="2" y="-0.4" dx="2.3" dy="0.5" layer="1"/>
+<smd name="3" x="2" y="-1.2" dx="2.3" dy="0.5" layer="1"/>
+<smd name="4" x="2" y="-2" dx="2.3" dy="0.5" layer="1"/>
+<smd name="5" x="2" y="-2.8" dx="2.3" dy="0.5" layer="1"/>
+<smd name="TAB1" x="2.2" y="3.9" dx="3.5" dy="3.5" layer="1"/>
+<smd name="TAB0" x="-2.3" y="3.9" dx="3.5" dy="3.5" layer="1"/>
+<smd name="TAB2" x="2.2" y="-6.3" dx="3.5" dy="3.5" layer="1"/>
+<smd name="TAB3" x="-2.3" y="-6.3" dx="3.5" dy="3.5" layer="1"/>
+<text x="-3.9" y="-3.9" size="1.27" layer="21" ratio="18" rot="R90">&gt;NAME</text>
+<hole x="-0.05" y="0.55" drill="0.9"/>
+<hole x="-0.05" y="-2.95" drill="0.9"/>
+</package>
+</packages>
+<symbols>
+<symbol name="AT91SAM7S64">
+<wire x1="-55.88" y1="2.54" x2="0" y2="2.54" width="0.254" layer="94"/>
+<wire x1="0" y1="2.54" x2="0" y2="-81.28" width="0.254" layer="94"/>
+<wire x1="0" y1="-81.28" x2="-55.88" y2="-81.28" width="0.254" layer="94"/>
+<wire x1="-55.88" y1="-81.28" x2="-55.88" y2="2.54" width="0.254" layer="94"/>
+<text x="-34.8341" y="-71.9348" size="3.81" layer="95" rot="R90">AT91SAM7S64</text>
+<text x="-34.1356" y="-23.2111" size="3.81" layer="95">&gt;NAME</text>
+<pin name="ADVREF" x="-60.96" y="-63.5" length="middle"/>
+<pin name="GND0" x="-20.32" y="-86.36" length="middle" rot="R90"/>
+<pin name="AD4" x="-60.96" y="-66.04" length="middle"/>
+<pin name="AD5" x="-60.96" y="-68.58" length="middle"/>
+<pin name="AD6" x="-60.96" y="-71.12" length="middle"/>
+<pin name="AD7" x="-60.96" y="-73.66" length="middle"/>
+<pin name="VDDIN" x="-30.48" y="7.62" length="middle" rot="R270"/>
+<pin name="VDDOUT" x="-12.7" y="7.62" length="middle" rot="R270"/>
+<pin name="PA17/AD0" x="5.08" y="-43.18" length="middle" rot="R180"/>
+<pin name="PA18/AD1" x="5.08" y="-45.72" length="middle" rot="R180"/>
+<pin name="PA21" x="5.08" y="-53.34" length="middle" rot="R180"/>
+<pin name="VDDCORE0" x="-20.32" y="7.62" length="middle" rot="R270"/>
+<pin name="PA19/AD2" x="5.08" y="-48.26" length="middle" rot="R180"/>
+<pin name="PA22" x="5.08" y="-55.88" length="middle" rot="R180"/>
+<pin name="PA23" x="5.08" y="-58.42" length="middle" rot="R180"/>
+<pin name="PA20/AD3" x="5.08" y="-50.8" length="middle" rot="R180"/>
+<pin name="GND1" x="-22.86" y="-86.36" length="middle" rot="R90"/>
+<pin name="VDDIO0" x="-40.64" y="7.62" length="middle" rot="R270"/>
+<pin name="PA16" x="5.08" y="-40.64" length="middle" rot="R180"/>
+<pin name="PA15" x="5.08" y="-38.1" length="middle" rot="R180"/>
+<pin name="PA14" x="5.08" y="-35.56" length="middle" rot="R180"/>
+<pin name="PA13" x="5.08" y="-33.02" length="middle" rot="R180"/>
+<pin name="PA24" x="5.08" y="-60.96" length="middle" rot="R180"/>
+<pin name="VDDCORE1" x="-17.78" y="7.62" length="middle" rot="R270"/>
+<pin name="PA25" x="5.08" y="-63.5" length="middle" rot="R180"/>
+<pin name="PA26" x="5.08" y="-66.04" length="middle" rot="R180"/>
+<pin name="PA12" x="5.08" y="-30.48" length="middle" rot="R180"/>
+<pin name="PA11" x="5.08" y="-27.94" length="middle" rot="R180"/>
+<pin name="PA10" x="5.08" y="-25.4" length="middle" rot="R180"/>
+<pin name="PA9" x="5.08" y="-22.86" length="middle" rot="R180"/>
+<pin name="PA8" x="5.08" y="-20.32" length="middle" rot="R180"/>
+<pin name="PA7" x="5.08" y="-17.78" length="middle" rot="R180"/>
+<pin name="PA6" x="5.08" y="-15.24" length="middle" rot="R180"/>
+<pin name="PA5" x="5.08" y="-12.7" length="middle" rot="R180"/>
+<pin name="PA4" x="5.08" y="-10.16" length="middle" rot="R180"/>
+<pin name="PA27" x="5.08" y="-68.58" length="middle" rot="R180"/>
+<pin name="PA28" x="5.08" y="-71.12" length="middle" rot="R180"/>
+<pin name="NRST" x="-60.96" y="-17.78" length="middle"/>
+<pin name="TST" x="-60.96" y="-12.7" length="middle"/>
+<pin name="PA29" x="5.08" y="-73.66" length="middle" rot="R180"/>
+<pin name="PA30" x="5.08" y="-76.2" length="middle" rot="R180"/>
+<pin name="PA3" x="5.08" y="-7.62" length="middle" rot="R180"/>
+<pin name="PA2" x="5.08" y="-5.08" length="middle" rot="R180"/>
+<pin name="VDDIO1" x="-38.1" y="7.62" length="middle" rot="R270"/>
+<pin name="GND2" x="-25.4" y="-86.36" length="middle" rot="R90"/>
+<pin name="PA1" x="5.08" y="-2.54" length="middle" rot="R180"/>
+<pin name="PA0" x="5.08" y="0" length="middle" rot="R180"/>
+<pin name="TDO" x="-60.96" y="-25.4" length="middle"/>
+<pin name="JTAGSEL" x="-60.96" y="-15.24" length="middle"/>
+<pin name="TMS" x="-60.96" y="-20.32" length="middle"/>
+<pin name="TCK" x="-60.96" y="-22.86" length="middle"/>
+<pin name="ERASE" x="-60.96" y="-35.56" length="middle"/>
+<pin name="VDDCORE2" x="-15.24" y="7.62" length="middle" rot="R270"/>
+<pin name="DDM" x="-60.96" y="-55.88" length="middle"/>
+<pin name="DDP" x="-60.96" y="-58.42" length="middle"/>
+<pin name="VDDFLASH" x="-33.02" y="7.62" length="middle" rot="R270"/>
+<pin name="VDDIO2" x="-35.56" y="7.62" length="middle" rot="R270"/>
+<pin name="XOUT" x="-60.96" y="-40.64" length="middle"/>
+<pin name="GND3" x="-27.94" y="-86.36" length="middle" rot="R90"/>
+<pin name="XIN/PGMCK" x="-60.96" y="-50.8" length="middle"/>
+<pin name="PLLRC" x="-60.96" y="-5.08" length="middle"/>
+<pin name="VDDPLL" x="-22.86" y="7.62" length="middle" rot="R270"/>
+<pin name="TDI" x="-60.96" y="-27.94" length="middle"/>
+<pin name="PA31" x="5.08" y="-78.74" length="middle" rot="R180"/>
+</symbol>
+<symbol name="CAPACITOR">
+<wire x1="0" y1="0" x2="0" y2="0.508" width="0.1524" layer="94"/>
+<wire x1="0" y1="2.54" x2="0" y2="2.032" width="0.1524" layer="94"/>
+<text x="1.524" y="2.921" size="1.778" layer="95">&gt;NAME</text>
+<text x="1.27" y="-1.905" size="1.778" layer="96">&gt;VALUE</text>
+<rectangle x1="-2.032" y1="1.524" x2="2.032" y2="2.032" layer="94"/>
+<rectangle x1="-2.032" y1="0.508" x2="2.032" y2="1.016" layer="94"/>
+<pin name="1" x="0" y="5.08" visible="off" length="short" direction="pas" swaplevel="1" rot="R270"/>
+<pin name="2" x="0" y="-2.54" visible="off" length="short" direction="pas" swaplevel="1" rot="R90"/>
+</symbol>
+<symbol name="SUPPLY_+2V5">
+<wire x1="0" y1="0.635" x2="-1.27" y2="-0.635" width="0.1524" layer="94"/>
+<wire x1="0" y1="0.635" x2="1.27" y2="-0.635" width="0.1524" layer="94"/>
+<wire x1="0" y1="0" x2="0" y2="0.635" width="0.1524" layer="94"/>
+<text x="-2.032" y="-3.937" size="1.778" layer="95" rot="R90">+2v5</text>
+<pin name="+2V5" x="0" y="-2.54" visible="off" length="short" direction="sup" rot="R90"/>
+</symbol>
+<symbol name="CRYSTAL">
+<wire x1="2.54" y1="0" x2="2.54" y2="-5.08" width="0.254" layer="94"/>
+<wire x1="3.81" y1="-1.27" x2="3.81" y2="-3.81" width="0.254" layer="94"/>
+<wire x1="3.81" y1="-3.81" x2="6.35" y2="-3.81" width="0.254" layer="94"/>
+<wire x1="6.35" y1="-3.81" x2="6.35" y2="-1.27" width="0.254" layer="94"/>
+<wire x1="6.35" y1="-1.27" x2="3.81" y2="-1.27" width="0.254" layer="94"/>
+<wire x1="7.62" y1="0" x2="7.62" y2="-5.08" width="0.254" layer="94"/>
+<text x="0.0161" y="0.6764" size="1.778" layer="95">&gt;NAME</text>
+<pin name="A" x="0" y="-2.54" visible="off" length="short"/>
+<pin name="B" x="10.16" y="-2.54" visible="off" length="short" rot="R180"/>
+</symbol>
+<symbol name="INVERTER">
+<wire x1="0" y1="2.54" x2="0" y2="-2.54" width="0.254" layer="94"/>
+<wire x1="0" y1="-2.54" x2="2.54" y2="-1.27" width="0.254" layer="94"/>
+<wire x1="2.54" y1="-1.27" x2="5.08" y2="0" width="0.254" layer="94"/>
+<wire x1="5.08" y1="0" x2="2.54" y2="1.27" width="0.254" layer="94"/>
+<wire x1="2.54" y1="1.27" x2="0" y2="2.54" width="0.254" layer="94"/>
+<wire x1="7.62" y1="0" x2="6.35" y2="0" width="0.1524" layer="94"/>
+<wire x1="2.54" y1="-2.54" x2="2.54" y2="-1.27" width="0.1524" layer="94"/>
+<wire x1="2.54" y1="1.27" x2="2.54" y2="2.54" width="0.1524" layer="94"/>
+<circle x="5.715" y="0" radius="0.635" width="0.1524" layer="94"/>
+<text x="3.1661" y="2.7576" size="1.016" layer="95">Vdd</text>
+<text x="3.1048" y="-3.6768" size="1.016" layer="95">Vss</text>
+<text x="-3.8786" y="3.7099" size="1.4224" layer="95">&gt;NAME</text>
+<pin name="A" x="-2.54" y="0" visible="pad" length="short"/>
+<pin name="Y" x="7.62" y="0" visible="pad" length="point" rot="R180"/>
+<pin name="VDD" x="2.54" y="5.08" visible="pad" length="short" rot="R270"/>
+<pin name="VSS" x="2.54" y="-5.08" visible="pad" length="short" rot="R90"/>
+</symbol>
+<symbol name="4TERMSTRIP">
+<wire x1="0" y1="2.54" x2="0" y2="-10.16" width="0.254" layer="94"/>
+<wire x1="0" y1="-10.16" x2="10.16" y2="-10.16" width="0.254" layer="94"/>
+<wire x1="10.16" y1="-10.16" x2="10.16" y2="2.54" width="0.254" layer="94"/>
+<wire x1="10.16" y1="2.54" x2="0" y2="2.54" width="0.254" layer="94"/>
+<text x="9.8506" y="-10.8263" size="1.778" layer="95" rot="R180">&gt;NAME</text>
+<pin name="PIN1" x="-5.08" y="0" visible="pin" length="middle" direction="pas"/>
+<pin name="PIN2" x="-5.08" y="-2.54" visible="pin" length="middle" direction="pas"/>
+<pin name="PIN3" x="-5.08" y="-5.08" visible="pin" length="middle" direction="pas"/>
+<pin name="PIN4" x="-5.08" y="-7.62" visible="pin" length="middle" direction="pas"/>
+</symbol>
+<symbol name="OPAMP">
+<wire x1="0" y1="5.08" x2="0" y2="-5.08" width="0.4064" layer="94"/>
+<wire x1="0" y1="-5.08" x2="10.16" y2="0" width="0.4064" layer="94"/>
+<wire x1="10.16" y1="0" x2="0" y2="5.08" width="0.4064" layer="94"/>
+<wire x1="1.27" y1="3.175" x2="1.27" y2="1.905" width="0.1524" layer="94"/>
+<wire x1="0.635" y1="2.54" x2="1.905" y2="2.54" width="0.1524" layer="94"/>
+<wire x1="0.635" y1="-2.54" x2="1.905" y2="-2.54" width="0.1524" layer="94"/>
+<text x="7.62" y="3.175" size="1.778" layer="95">&gt;NAME</text>
+<text x="7.62" y="-5.08" size="1.778" layer="96">&gt;VALUE</text>
+<pin name="-IN" x="-2.54" y="-2.54" visible="pad" length="short" direction="in"/>
+<pin name="+IN" x="-2.54" y="2.54" visible="pad" length="short" direction="in"/>
+<pin name="OUT" x="12.7" y="0" visible="pad" length="short" direction="out" rot="R180"/>
+</symbol>
+<symbol name="POWER-PINS">
+<text x="2.54" y="0" size="1.778" layer="95">&gt;NAME</text>
+<pin name="V+" x="0" y="5.08" length="middle" rot="R270"/>
+<pin name="V-" x="0" y="-17.78" length="middle" rot="R90"/>
+</symbol>
+<symbol name="RESISTOR">
+<wire x1="-2.54" y1="0" x2="-2.159" y2="1.016" width="0.2032" layer="94"/>
+<wire x1="-2.159" y1="1.016" x2="-1.524" y2="-1.016" width="0.2032" layer="94"/>
+<wire x1="-1.524" y1="-1.016" x2="-0.889" y2="1.016" width="0.2032" layer="94"/>
+<wire x1="-0.889" y1="1.016" x2="-0.254" y2="-1.016" width="0.2032" layer="94"/>
+<wire x1="-0.254" y1="-1.016" x2="0.381" y2="1.016" width="0.2032" layer="94"/>
+<wire x1="0.381" y1="1.016" x2="1.016" y2="-1.016" width="0.2032" layer="94"/>
+<wire x1="1.016" y1="-1.016" x2="1.651" y2="1.016" width="0.2032" layer="94"/>
+<wire x1="1.651" y1="1.016" x2="2.286" y2="-1.016" width="0.2032" layer="94"/>
+<wire x1="2.286" y1="-1.016" x2="2.54" y2="0" width="0.2032" layer="94"/>
+<text x="-3.81" y="1.4986" size="1.778" layer="95">&gt;NAME</text>
+<text x="-3.81" y="-3.175" size="1.778" layer="96">&gt;VALUE</text>
+<pin name="2" x="5.08" y="0" visible="off" length="short" direction="pas" swaplevel="1" rot="R180"/>
+<pin name="1" x="-5.08" y="0" visible="off" length="short" direction="pas" swaplevel="1"/>
+</symbol>
+<symbol name="HEADER-MALE-10X2">
+<wire x1="1.27" y1="-12.7" x2="-6.35" y2="-12.7" width="0.4064" layer="94"/>
+<wire x1="-1.27" y1="-5.08" x2="0" y2="-5.08" width="0.6096" layer="94"/>
+<wire x1="-1.27" y1="-7.62" x2="0" y2="-7.62" width="0.6096" layer="94"/>
+<wire x1="-1.27" y1="-10.16" x2="0" y2="-10.16" width="0.6096" layer="94"/>
+<wire x1="-5.08" y1="-5.08" x2="-3.81" y2="-5.08" width="0.6096" layer="94"/>
+<wire x1="-5.08" y1="-7.62" x2="-3.81" y2="-7.62" width="0.6096" layer="94"/>
+<wire x1="-5.08" y1="-10.16" x2="-3.81" y2="-10.16" width="0.6096" layer="94"/>
+<wire x1="-1.27" y1="0" x2="0" y2="0" width="0.6096" layer="94"/>
+<wire x1="-1.27" y1="-2.54" x2="0" y2="-2.54" width="0.6096" layer="94"/>
+<wire x1="-5.08" y1="0" x2="-3.81" y2="0" width="0.6096" layer="94"/>
+<wire x1="-5.08" y1="-2.54" x2="-3.81" y2="-2.54" width="0.6096" layer="94"/>
+<wire x1="-1.27" y1="7.62" x2="0" y2="7.62" width="0.6096" layer="94"/>
+<wire x1="-1.27" y1="5.08" x2="0" y2="5.08" width="0.6096" layer="94"/>
+<wire x1="-1.27" y1="2.54" x2="0" y2="2.54" width="0.6096" layer="94"/>
+<wire x1="-5.08" y1="7.62" x2="-3.81" y2="7.62" width="0.6096" layer="94"/>
+<wire x1="-5.08" y1="5.08" x2="-3.81" y2="5.08" width="0.6096" layer="94"/>
+<wire x1="-5.08" y1="2.54" x2="-3.81" y2="2.54" width="0.6096" layer="94"/>
+<wire x1="-6.35" y1="15.24" x2="-6.35" y2="-12.7" width="0.4064" layer="94"/>
+<wire x1="1.27" y1="-12.7" x2="1.27" y2="15.24" width="0.4064" layer="94"/>
+<wire x1="-6.35" y1="15.24" x2="1.27" y2="15.24" width="0.4064" layer="94"/>
+<wire x1="-1.27" y1="12.7" x2="0" y2="12.7" width="0.6096" layer="94"/>
+<wire x1="-1.27" y1="10.16" x2="0" y2="10.16" width="0.6096" layer="94"/>
+<wire x1="-5.08" y1="12.7" x2="-3.81" y2="12.7" width="0.6096" layer="94"/>
+<wire x1="-5.08" y1="10.16" x2="-3.81" y2="10.16" width="0.6096" layer="94"/>
+<text x="-6.35" y="-15.24" size="1.778" layer="96">&gt;VALUE</text>
+<text x="-6.35" y="16.002" size="1.778" layer="95">&gt;NAME</text>
+<pin name="1" x="5.08" y="-10.16" visible="pad" length="middle" direction="pas" swaplevel="1" rot="R180"/>
+<pin name="3" x="5.08" y="-7.62" visible="pad" length="middle" direction="pas" swaplevel="1" rot="R180"/>
+<pin name="5" x="5.08" y="-5.08" visible="pad" length="middle" direction="pas" swaplevel="1" rot="R180"/>
+<pin name="2" x="-10.16" y="-10.16" visible="pad" length="middle" direction="pas" swaplevel="1"/>
+<pin name="4" x="-10.16" y="-7.62" visible="pad" length="middle" direction="pas" swaplevel="1"/>
+<pin name="6" x="-10.16" y="-5.08" visible="pad" length="middle" direction="pas" swaplevel="1"/>
+<pin name="7" x="5.08" y="-2.54" visible="pad" length="middle" direction="pas" swaplevel="1" rot="R180"/>
+<pin name="9" x="5.08" y="0" visible="pad" length="middle" direction="pas" swaplevel="1" rot="R180"/>
+<pin name="8" x="-10.16" y="-2.54" visible="pad" length="middle" direction="pas" swaplevel="1"/>
+<pin name="10" x="-10.16" y="0" visible="pad" length="middle" direction="pas" swaplevel="1"/>
+<pin name="11" x="5.08" y="2.54" visible="pad" length="middle" direction="pas" swaplevel="1" rot="R180"/>
+<pin name="13" x="5.08" y="5.08" visible="pad" length="middle" direction="pas" swaplevel="1" rot="R180"/>
+<pin name="15" x="5.08" y="7.62" visible="pad" length="middle" direction="pas" swaplevel="1" rot="R180"/>
+<pin name="12" x="-10.16" y="2.54" visible="pad" length="middle" direction="pas" swaplevel="1"/>
+<pin name="14" x="-10.16" y="5.08" visible="pad" length="middle" direction="pas" swaplevel="1"/>
+<pin name="16" x="-10.16" y="7.62" visible="pad" length="middle" direction="pas" swaplevel="1"/>
+<pin name="17" x="5.08" y="10.16" visible="pad" length="middle" direction="pas" swaplevel="1" rot="R180"/>
+<pin name="19" x="5.08" y="12.7" visible="pad" length="middle" direction="pas" swaplevel="1" rot="R180"/>
+<pin name="18" x="-10.16" y="10.16" visible="pad" length="middle" direction="pas" swaplevel="1"/>
+<pin name="20" x="-10.16" y="12.7" visible="pad" length="middle" direction="pas" swaplevel="1"/>
+</symbol>
+<symbol name="SUPPLY_VMID">
+<wire x1="-1.27" y1="0" x2="1.27" y2="0" width="0.254" layer="94"/>
+<wire x1="-1.27" y1="0" x2="-0.635" y2="0.635" width="0.254" layer="94"/>
+<wire x1="-1.27" y1="0" x2="-0.635" y2="-0.635" width="0.254" layer="94"/>
+<wire x1="1.27" y1="0" x2="0.635" y2="0.635" width="0.254" layer="94"/>
+<wire x1="1.27" y1="0" x2="0.635" y2="-0.635" width="0.254" layer="94"/>
+<text x="-2.032" y="-2.794" size="1.27" layer="95" rot="R90">Vmid</text>
+<pin name="VMID" x="0" y="-2.54" visible="off" length="short" direction="sup" rot="R90"/>
+</symbol>
+<symbol name="TLC5540">
+<wire x1="0" y1="0" x2="-27.94" y2="0" width="0.254" layer="94"/>
+<wire x1="-27.94" y1="0" x2="-27.94" y2="-45.72" width="0.254" layer="94"/>
+<wire x1="-27.94" y1="-45.72" x2="0" y2="-45.72" width="0.254" layer="94"/>
+<wire x1="0" y1="-45.72" x2="0" y2="0" width="0.254" layer="94"/>
+<text x="-0.508" y="0.762" size="2.1844" layer="95" rot="MR0">&gt;NAME</text>
+<text x="-27.686" y="-46.482" size="2.1844" layer="95" rot="MR180">TLC5540</text>
+<pin name="D1" x="5.08" y="-2.54" length="middle" rot="R180"/>
+<pin name="D2" x="5.08" y="-5.08" length="middle" rot="R180"/>
+<pin name="D3" x="5.08" y="-7.62" length="middle" rot="R180"/>
+<pin name="D4" x="5.08" y="-10.16" length="middle" rot="R180"/>
+<pin name="D5" x="5.08" y="-12.7" length="middle" rot="R180"/>
+<pin name="D6" x="5.08" y="-15.24" length="middle" rot="R180"/>
+<pin name="D7" x="5.08" y="-17.78" length="middle" rot="R180"/>
+<pin name="MSB-D8" x="5.08" y="-20.32" length="middle" rot="R180"/>
+<pin name="VDDD1" x="-12.7" y="5.08" length="middle" rot="R270"/>
+<pin name="VDDD0" x="-15.24" y="5.08" length="middle" rot="R270"/>
+<pin name="VDDA2" x="-20.32" y="5.08" length="middle" rot="R270"/>
+<pin name="VDDA1" x="-22.86" y="5.08" length="middle" rot="R270"/>
+<pin name="CLK" x="5.08" y="-30.48" length="middle" rot="R180"/>
+<pin name="REFB" x="-33.02" y="-30.48" length="middle"/>
+<pin name="REFBS" x="-33.02" y="-33.02" length="middle"/>
+<pin name="VDDA0" x="-25.4" y="5.08" length="middle" rot="R270"/>
+<pin name="ANALOGIN" x="-33.02" y="-15.24" length="middle"/>
+<pin name="NOE" x="5.08" y="-25.4" length="middle" rot="R180"/>
+<pin name="DGND0" x="-2.54" y="-50.8" length="middle" rot="R90"/>
+<pin name="DGND1" x="-5.08" y="-50.8" length="middle" rot="R90"/>
+<pin name="AGND0" x="-10.16" y="-50.8" length="middle" rot="R90"/>
+<pin name="AGND1" x="-12.7" y="-50.8" length="middle" rot="R90"/>
+<pin name="REFT" x="-33.02" y="-25.4" length="middle"/>
+<pin name="REFTS" x="-33.02" y="-22.86" length="middle"/>
+</symbol>
+<symbol name="74XX244-OCTAL-TRISTATE-BUFFERS">
+<wire x1="0" y1="0" x2="0" y2="5.08" width="0.254" layer="94"/>
+<wire x1="0" y1="5.08" x2="5.08" y2="2.54" width="0.254" layer="94"/>
+<wire x1="5.08" y1="2.54" x2="0" y2="0" width="0.254" layer="94"/>
+<wire x1="0" y1="-7.62" x2="0" y2="-2.54" width="0.254" layer="94"/>
+<wire x1="0" y1="-2.54" x2="5.08" y2="-5.08" width="0.254" layer="94"/>
+<wire x1="5.08" y1="-5.08" x2="0" y2="-7.62" width="0.254" layer="94"/>
+<wire x1="0" y1="-15.24" x2="0" y2="-10.16" width="0.254" layer="94"/>
+<wire x1="0" y1="-10.16" x2="5.08" y2="-12.7" width="0.254" layer="94"/>
+<wire x1="5.08" y1="-12.7" x2="0" y2="-15.24" width="0.254" layer="94"/>
+<wire x1="0" y1="-22.86" x2="0" y2="-17.78" width="0.254" layer="94"/>
+<wire x1="0" y1="-17.78" x2="5.08" y2="-20.32" width="0.254" layer="94"/>
+<wire x1="5.08" y1="-20.32" x2="0" y2="-22.86" width="0.254" layer="94"/>
+<wire x1="0" y1="7.62" x2="2.54" y2="7.62" width="0.1524" layer="94"/>
+<wire x1="2.54" y1="7.62" x2="2.54" y2="5.08" width="0.1524" layer="94"/>
+<wire x1="2.54" y1="5.08" x2="6.35" y2="5.08" width="0.1524" layer="94"/>
+<wire x1="6.35" y1="5.08" x2="6.35" y2="-2.54" width="0.1524" layer="94"/>
+<wire x1="6.35" y1="-2.54" x2="6.35" y2="-10.16" width="0.1524" layer="94"/>
+<wire x1="6.35" y1="-10.16" x2="6.35" y2="-17.78" width="0.1524" layer="94"/>
+<wire x1="6.35" y1="-17.78" x2="2.54" y2="-17.78" width="0.1524" layer="94"/>
+<wire x1="6.35" y1="-2.54" x2="2.54" y2="-2.54" width="0.1524" layer="94"/>
+<wire x1="6.35" y1="-10.16" x2="2.54" y2="-10.16" width="0.1524" layer="94"/>
+<wire x1="0" y1="-35.56" x2="0" y2="-30.48" width="0.254" layer="94"/>
+<wire x1="0" y1="-30.48" x2="5.08" y2="-33.02" width="0.254" layer="94"/>
+<wire x1="5.08" y1="-33.02" x2="0" y2="-35.56" width="0.254" layer="94"/>
+<wire x1="0" y1="-43.18" x2="0" y2="-38.1" width="0.254" layer="94"/>
+<wire x1="0" y1="-38.1" x2="5.08" y2="-40.64" width="0.254" layer="94"/>
+<wire x1="5.08" y1="-40.64" x2="0" y2="-43.18" width="0.254" layer="94"/>
+<wire x1="0" y1="-50.8" x2="0" y2="-45.72" width="0.254" layer="94"/>
+<wire x1="0" y1="-45.72" x2="5.08" y2="-48.26" width="0.254" layer="94"/>
+<wire x1="5.08" y1="-48.26" x2="0" y2="-50.8" width="0.254" layer="94"/>
+<wire x1="0" y1="-58.42" x2="0" y2="-53.34" width="0.254" layer="94"/>
+<wire x1="0" y1="-53.34" x2="5.08" y2="-55.88" width="0.254" layer="94"/>
+<wire x1="5.08" y1="-55.88" x2="0" y2="-58.42" width="0.254" layer="94"/>
+<wire x1="0" y1="-27.94" x2="2.54" y2="-27.94" width="0.1524" layer="94"/>
+<wire x1="2.54" y1="-27.94" x2="2.54" y2="-30.48" width="0.1524" layer="94"/>
+<wire x1="2.54" y1="-30.48" x2="6.35" y2="-30.48" width="0.1524" layer="94"/>
+<wire x1="6.35" y1="-30.48" x2="6.35" y2="-38.1" width="0.1524" layer="94"/>
+<wire x1="6.35" y1="-38.1" x2="6.35" y2="-45.72" width="0.1524" layer="94"/>
+<wire x1="6.35" y1="-45.72" x2="6.35" y2="-53.34" width="0.1524" layer="94"/>
+<wire x1="6.35" y1="-53.34" x2="2.54" y2="-53.34" width="0.1524" layer="94"/>
+<wire x1="6.35" y1="-38.1" x2="2.54" y2="-38.1" width="0.1524" layer="94"/>
+<wire x1="6.35" y1="-45.72" x2="2.54" y2="-45.72" width="0.1524" layer="94"/>
+<wire x1="-6.35" y1="10.16" x2="11.43" y2="10.16" width="0.1524" layer="94" style="shortdash"/>
+<wire x1="11.43" y1="10.16" x2="11.43" y2="-60.96" width="0.1524" layer="94" style="shortdash"/>
+<wire x1="11.43" y1="-60.96" x2="-6.35" y2="-60.96" width="0.1524" layer="94" style="shortdash"/>
+<wire x1="-6.35" y1="-60.96" x2="-6.35" y2="10.16" width="0.1524" layer="94" style="shortdash"/>
+<wire x1="2.54" y1="4.445" x2="2.54" y2="5.08" width="0.1524" layer="94" style="shortdash"/>
+<wire x1="2.54" y1="-53.975" x2="2.54" y2="-53.34" width="0.1524" layer="94" style="shortdash"/>
+<wire x1="2.54" y1="-46.355" x2="2.54" y2="-45.72" width="0.1524" layer="94"/>
+<wire x1="2.54" y1="-38.735" x2="2.54" y2="-38.1" width="0.1524" layer="94"/>
+<wire x1="2.54" y1="-31.115" x2="2.54" y2="-30.48" width="0.1524" layer="94"/>
+<wire x1="2.54" y1="-18.415" x2="2.54" y2="-17.78" width="0.1524" layer="94"/>
+<wire x1="2.54" y1="-10.795" x2="2.54" y2="-10.16" width="0.1524" layer="94"/>
+<wire x1="2.54" y1="-3.175" x2="2.54" y2="-2.54" width="0.1524" layer="94"/>
+<circle x="6.35" y="-2.54" radius="0.1796" width="0.254" layer="94"/>
+<circle x="2.54" y="5.08" radius="0.1796" width="0.254" layer="94"/>
+<circle x="6.35" y="-10.16" radius="0.1796" width="0.254" layer="94"/>
+<circle x="6.35" y="-38.1" radius="0.1796" width="0.254" layer="94"/>
+<circle x="2.54" y="-30.48" radius="0.1796" width="0.254" layer="94"/>
+<circle x="6.35" y="-45.72" radius="0.1796" width="0.254" layer="94"/>
+<circle x="2.54" y="4.1275" radius="0.3175" width="0.1524" layer="94"/>
+<circle x="2.54" y="-3.4925" radius="0.3175" width="0.1524" layer="94"/>
+<circle x="2.54" y="-11.1125" radius="0.3175" width="0.1524" layer="94"/>
+<circle x="2.54" y="-18.7325" radius="0.3175" width="0.1524" layer="94"/>
+<circle x="2.54" y="-31.4325" radius="0.3175" width="0.1524" layer="94"/>
+<circle x="2.54" y="-39.0525" radius="0.3175" width="0.1524" layer="94"/>
+<circle x="2.54" y="-46.6725" radius="0.3175" width="0.1524" layer="94"/>
+<circle x="2.54" y="-54.2925" radius="0.3175" width="0.1524" layer="94"/>
+<text x="-4.395" y="10.8211" size="1.778" layer="95">&gt;NAME</text>
+<text x="9.8628" y="-61.7992" size="1.778" layer="95" rot="R180">'244</text>
+<text x="9.1153" y="9.4136" size="1.27" layer="95" rot="R180">Vdd</text>
+<text x="-4.0182" y="-60.1844" size="1.27" layer="95">Vss</text>
+<pin name="1A1" x="-7.62" y="2.54" visible="pad"/>
+<pin name="1Y1" x="12.7" y="2.54" visible="pad" rot="R180"/>
+<pin name="1A2" x="-7.62" y="-5.08" visible="pad"/>
+<pin name="1Y2" x="12.7" y="-5.08" visible="pad" rot="R180"/>
+<pin name="1A3" x="-7.62" y="-12.7" visible="pad"/>
+<pin name="1Y3" x="12.7" y="-12.7" visible="pad" rot="R180"/>
+<pin name="1A4" x="-7.62" y="-20.32" visible="pad"/>
+<pin name="1Y4" x="12.7" y="-20.32" visible="pad" rot="R180"/>
+<pin name="1NOE" x="-7.62" y="7.62" visible="pad"/>
+<pin name="2A1" x="-7.62" y="-33.02" visible="pad"/>
+<pin name="2Y1" x="12.7" y="-33.02" visible="pad" rot="R180"/>
+<pin name="2A2" x="-7.62" y="-40.64" visible="pad"/>
+<pin name="2Y2" x="12.7" y="-40.64" visible="pad" rot="R180"/>
+<pin name="2A3" x="-7.62" y="-48.26" visible="pad"/>
+<pin name="2Y3" x="12.7" y="-48.26" visible="pad" rot="R180"/>
+<pin name="2A4" x="-7.62" y="-55.88" visible="pad"/>
+<pin name="2Y4" x="12.7" y="-55.88" visible="pad" rot="R180"/>
+<pin name="2NOE" x="-7.62" y="-27.94" visible="pad"/>
+<pin name="VSS" x="-2.54" y="-63.5" visible="pad" length="short" rot="R90"/>
+<pin name="VDD" x="7.62" y="12.7" visible="pad" length="short" rot="R270"/>
+</symbol>
+<symbol name="SPARTAN-II-XC2S30-100-VQFP">
+<wire x1="48.26" y1="0" x2="0" y2="0" width="0.254" layer="94"/>
+<wire x1="0" y1="0" x2="0" y2="-119.38" width="0.254" layer="94"/>
+<wire x1="0" y1="-119.38" x2="48.26" y2="-119.38" width="0.254" layer="94"/>
+<wire x1="48.26" y1="-119.38" x2="48.26" y2="0" width="0.254" layer="94"/>
+<text x="41.148" y="-1.016" size="1.9304" layer="95" rot="R180">VccInt</text>
+<text x="12.192" y="-117.856" size="1.9304" layer="95">GND</text>
+<text x="47.244" y="-120.396" size="2.1844" layer="95" rot="R180">&gt;NAME</text>
+<text x="27.178" y="-94.996" size="5.08" layer="95" rot="R90">XC2330 100-VQFP</text>
+<text x="27.686" y="-117.856" size="1.9304" layer="95">NC</text>
+<pin name="GND1" x="5.08" y="-124.46" visible="pad" length="middle" rot="R90"/>
+<pin name="GND2" x="7.62" y="-124.46" visible="pad" length="middle" rot="R90"/>
+<pin name="GND3" x="10.16" y="-124.46" visible="pad" length="middle" rot="R90"/>
+<pin name="GND4" x="12.7" y="-124.46" visible="pad" length="middle" rot="R90"/>
+<pin name="GND5" x="15.24" y="-124.46" visible="pad" length="middle" rot="R90"/>
+<pin name="GND6" x="17.78" y="-124.46" visible="pad" length="middle" rot="R90"/>
+<pin name="GND7" x="20.32" y="-124.46" visible="pad" length="middle" rot="R90"/>
+<pin name="GND8" x="22.86" y="-124.46" visible="pad" length="middle" rot="R90"/>
+<pin name="NC0" x="27.94" y="-124.46" visible="pad" length="middle" rot="R90"/>
+<pin name="VCCO_B76" x="5.08" y="5.08" length="middle" rot="R270"/>
+<pin name="VCCO_B65" x="7.62" y="5.08" length="middle" rot="R270"/>
+<pin name="VCCO_B54" x="10.16" y="5.08" length="middle" rot="R270"/>
+<pin name="VCCO_B43" x="12.7" y="5.08" length="middle" rot="R270"/>
+<pin name="VCCO_B32" x="15.24" y="5.08" length="middle" rot="R270"/>
+<pin name="VCCO_B21" x="17.78" y="5.08" length="middle" rot="R270"/>
+<pin name="VCCO_B10" x="20.32" y="5.08" length="middle" rot="R270"/>
+<pin name="VCCO_B07" x="22.86" y="5.08" length="middle" rot="R270"/>
+<pin name="TDI" x="-5.08" y="-17.78" length="middle"/>
+<pin name="TDO" x="-5.08" y="-20.32" length="middle"/>
+<pin name="TMS" x="-5.08" y="-22.86" length="middle"/>
+<pin name="TCK" x="-5.08" y="-25.4" length="middle"/>
+<pin name="VCCINT1" x="27.94" y="5.08" visible="pad" length="middle" rot="R270"/>
+<pin name="VCCINT2" x="30.48" y="5.08" visible="pad" length="middle" rot="R270"/>
+<pin name="VCCINT3" x="33.02" y="5.08" visible="pad" length="middle" rot="R270"/>
+<pin name="VCCINT4" x="35.56" y="5.08" visible="pad" length="middle" rot="R270"/>
+<pin name="VCCINT5" x="38.1" y="5.08" visible="pad" length="middle" rot="R270"/>
+<pin name="VCCINT6" x="40.64" y="5.08" visible="pad" length="middle" rot="R270"/>
+<pin name="VCCINT7" x="43.18" y="5.08" visible="pad" length="middle" rot="R270"/>
+<pin name="VCCINT8" x="45.72" y="5.08" visible="pad" length="middle" rot="R270"/>
+<pin name="P3_IO7" x="53.34" y="-7.62" length="middle" rot="R180"/>
+<pin name="P4_IOV7" x="53.34" y="-10.16" length="middle" rot="R180"/>
+<pin name="P5_IO7" x="53.34" y="-12.7" length="middle" rot="R180"/>
+<pin name="P6_IO7" x="53.34" y="-15.24" length="middle" rot="R180"/>
+<pin name="P7_IO7" x="53.34" y="-17.78" length="middle" rot="R180"/>
+<pin name="P8_IOV7" x="53.34" y="-20.32" length="middle" rot="R180"/>
+<pin name="P9_IO7" x="53.34" y="-22.86" length="middle" rot="R180"/>
+<pin name="P10_IO7" x="53.34" y="-25.4" length="middle" rot="R180"/>
+<pin name="P13_IO6" x="53.34" y="-30.48" length="middle" rot="R180"/>
+<pin name="P15_IO6" x="53.34" y="-33.02" length="middle" rot="R180"/>
+<pin name="P16_IOV6" x="53.34" y="-35.56" length="middle" rot="R180"/>
+<pin name="P17_IO6" x="53.34" y="-38.1" length="middle" rot="R180"/>
+<pin name="P18_IO6" x="53.34" y="-40.64" length="middle" rot="R180"/>
+<pin name="P19_IO6" x="53.34" y="-43.18" length="middle" rot="R180"/>
+<pin name="P20_IOV6" x="53.34" y="-45.72" length="middle" rot="R180"/>
+<pin name="P21_IO6" x="53.34" y="-48.26" length="middle" rot="R180"/>
+<pin name="P22_IO6" x="53.34" y="-50.8" length="middle" rot="R180"/>
+<pin name="M0" x="-5.08" y="-30.48" length="middle"/>
+<pin name="M1" x="-5.08" y="-33.02" length="middle"/>
+<pin name="M2" x="-5.08" y="-35.56" length="middle"/>
+<pin name="DONE" x="-5.08" y="-40.64" length="middle"/>
+<pin name="/PROGRAM" x="-5.08" y="-43.18" length="middle"/>
+<pin name="CCLK" x="-5.08" y="-45.72" length="middle"/>
+<pin name="P30_IOV5" x="53.34" y="-55.88" length="middle" rot="R180"/>
+<pin name="P31_IO5" x="53.34" y="-58.42" length="middle" rot="R180"/>
+<pin name="P32_IO5" x="53.34" y="-60.96" length="middle" rot="R180"/>
+<pin name="P34_IOV5" x="53.34" y="-63.5" length="middle" rot="R180"/>
+<pin name="P36_IGCK5" x="53.34" y="-66.04" length="middle" rot="R180"/>
+<pin name="P39_IGCK4" x="53.34" y="-71.12" length="middle" rot="R180"/>
+<pin name="P40_IO4" x="53.34" y="-73.66" length="middle" rot="R180"/>
+<pin name="P41_IOV4" x="53.34" y="-76.2" length="middle" rot="R180"/>
+<pin name="P43_IO4" x="53.34" y="-78.74" length="middle" rot="R180"/>
+<pin name="P44_IO4" x="53.34" y="-81.28" length="middle" rot="R180"/>
+<pin name="P45_IOV4" x="53.34" y="-83.82" length="middle" rot="R180"/>
+<pin name="P46_IO4" x="53.34" y="-86.36" length="middle" rot="R180"/>
+<pin name="P47_IO4" x="53.34" y="-88.9" length="middle" rot="R180"/>
+<pin name="P52_IO3" x="53.34" y="-93.98" length="middle" rot="R180"/>
+<pin name="P53_IO3" x="53.34" y="-96.52" length="middle" rot="R180"/>
+<pin name="P54_IOV3" x="53.34" y="-99.06" length="middle" rot="R180"/>
+<pin name="P55_IO3" x="53.34" y="-101.6" length="middle" rot="R180"/>
+<pin name="P56_IO3" x="53.34" y="-104.14" length="middle" rot="R180"/>
+<pin name="P57_IO3" x="53.34" y="-106.68" length="middle" rot="R180"/>
+<pin name="P58_IO3" x="53.34" y="-109.22" length="middle" rot="R180"/>
+<pin name="P59_IOV3" x="53.34" y="-111.76" length="middle" rot="R180"/>
+<pin name="P60_IO3" x="53.34" y="-114.3" length="middle" rot="R180"/>
+<pin name="P62_IO3" x="53.34" y="-116.84" length="middle" rot="R180"/>
+<pin name="P65_IO2" x="-5.08" y="-55.88" length="middle"/>
+<pin name="P66_IO2" x="-5.08" y="-58.42" length="middle"/>
+<pin name="P67_IOV2" x="-5.08" y="-60.96" length="middle"/>
+<pin name="P68_IO2" x="-5.08" y="-63.5" length="middle"/>
+<pin name="P69_IO2" x="-5.08" y="-66.04" length="middle"/>
+<pin name="P70_IO2" x="-5.08" y="-68.58" length="middle"/>
+<pin name="P71_IO2" x="-5.08" y="-71.12" length="middle"/>
+<pin name="P72_IOV2" x="-5.08" y="-73.66" length="middle"/>
+<pin name="DIN" x="-5.08" y="-48.26" length="middle"/>
+<pin name="DOUT" x="-5.08" y="-50.8" length="middle"/>
+<pin name="P80_IO1" x="-5.08" y="-78.74" length="middle"/>
+<pin name="P81_IO1" x="-5.08" y="-81.28" length="middle"/>
+<pin name="P82_IOV1" x="-5.08" y="-83.82" length="middle"/>
+<pin name="P83_IO1" x="-5.08" y="-86.36" length="middle"/>
+<pin name="P84_IO1" x="-5.08" y="-88.9" length="middle"/>
+<pin name="P86_IOV1" x="-5.08" y="-91.44" length="middle"/>
+<pin name="P87_IO1" x="-5.08" y="-93.98" length="middle"/>
+<pin name="P88_IGCK1" x="-5.08" y="-96.52" length="middle"/>
+<pin name="P91_IGCK0" x="-5.08" y="-101.6" length="middle"/>
+<pin name="P93_IOV0" x="-5.08" y="-104.14" length="middle"/>
+<pin name="P95_IO0" x="-5.08" y="-106.68" length="middle"/>
+<pin name="P96_IO0" x="-5.08" y="-109.22" length="middle"/>
+<pin name="P97_IOV0" x="-5.08" y="-111.76" length="middle"/>
+<pin name="P98_IO0" x="-5.08" y="-114.3" length="middle"/>
+<pin name="NC1" x="30.48" y="-124.46" visible="pad" length="middle" rot="R90"/>
+</symbol>
+<symbol name="FERRITE">
+<wire x1="0" y1="1.27" x2="0" y2="-1.27" width="0.254" layer="94"/>
+<wire x1="0" y1="-1.27" x2="7.62" y2="-1.27" width="0.254" layer="94"/>
+<wire x1="7.62" y1="-1.27" x2="7.62" y2="1.27" width="0.254" layer="94"/>
+<wire x1="7.62" y1="1.27" x2="0" y2="1.27" width="0.254" layer="94"/>
+<text x="0.8509" y="-0.5065" size="1.016" layer="94" font="vector">ferrite</text>
+<text x="0.189" y="1.6198" size="1.6764" layer="95" font="vector">&gt;NAME</text>
+<pin name="A" x="-2.54" y="0" visible="off" length="short"/>
+<pin name="B" x="10.16" y="0" visible="off" length="short" rot="R180"/>
+</symbol>
+<symbol name="CD4066-ANALOG-SWITCH">
+<wire x1="15.24" y1="5.08" x2="0" y2="5.08" width="0.254" layer="94"/>
+<wire x1="0" y1="5.08" x2="0" y2="-27.94" width="0.254" layer="94"/>
+<wire x1="0" y1="-27.94" x2="15.24" y2="-27.94" width="0.254" layer="94"/>
+<wire x1="15.24" y1="-27.94" x2="15.24" y2="5.08" width="0.254" layer="94"/>
+<text x="9.906" y="-26.924" size="1.524" layer="95">Vss</text>
+<text x="5.334" y="4.064" size="1.524" layer="95" rot="R180">Vdd</text>
+<text x="14.732" y="5.842" size="1.524" layer="95" rot="MR0">CD4066</text>
+<text x="1.016" y="-28.956" size="1.524" layer="95" rot="MR180">&gt;NAME</text>
+<pin name="A1" x="-5.08" y="0" length="middle" direction="pas"/>
+<pin name="C1" x="-5.08" y="-2.54" length="middle" direction="in"/>
+<pin name="A2" x="-5.08" y="-7.62" length="middle" direction="pas"/>
+<pin name="C2" x="-5.08" y="-10.16" length="middle" direction="in"/>
+<pin name="A3" x="-5.08" y="-15.24" length="middle" direction="pas"/>
+<pin name="C3" x="-5.08" y="-17.78" length="middle" direction="in"/>
+<pin name="A4" x="-5.08" y="-22.86" length="middle" direction="pas"/>
+<pin name="C4" x="-5.08" y="-25.4" length="middle" direction="in"/>
+<pin name="B1" x="20.32" y="0" length="middle" direction="pas" rot="R180"/>
+<pin name="B2" x="20.32" y="-7.62" length="middle" direction="pas" rot="R180"/>
+<pin name="B3" x="20.32" y="-15.24" length="middle" direction="pas" rot="R180"/>
+<pin name="B4" x="20.32" y="-22.86" length="middle" direction="pas" rot="R180"/>
+<pin name="VDD" x="2.54" y="10.16" visible="pad" length="middle" rot="R270"/>
+<pin name="VSS" x="12.7" y="-33.02" visible="pad" length="middle" rot="R90"/>
+</symbol>
+<symbol name="LP2989-LDO">
+<wire x1="0" y1="2.54" x2="-22.86" y2="2.54" width="0.254" layer="94"/>
+<wire x1="-22.86" y1="2.54" x2="-22.86" y2="-15.24" width="0.254" layer="94"/>
+<wire x1="-22.86" y1="-15.24" x2="0" y2="-15.24" width="0.254" layer="94"/>
+<wire x1="0" y1="-15.24" x2="0" y2="2.54" width="0.254" layer="94"/>
+<text x="-22.098" y="3.048" size="1.778" layer="95">&gt;NAME</text>
+<text x="-0.508" y="-15.748" size="1.778" layer="95" rot="R180">&gt;VALUE</text>
+<pin name="OUT" x="5.08" y="0" length="middle" direction="pas" rot="R180"/>
+<pin name="/ERROR" x="5.08" y="-10.16" length="middle" direction="pas" rot="R180"/>
+<pin name="SENSE" x="5.08" y="-2.54" length="middle" direction="pas" rot="R180"/>
+<pin name="IN" x="-27.94" y="0" length="middle" direction="pas"/>
+<pin name="GND" x="-27.94" y="-12.7" length="middle" direction="pas"/>
+<pin name="/SHDN" x="-27.94" y="-5.08" length="middle" direction="pas"/>
+<pin name="BYP" x="-27.94" y="-10.16" length="middle" direction="pas"/>
+</symbol>
+<symbol name="LED">
+<wire x1="1.27" y1="2.54" x2="0" y2="0" width="0.254" layer="94"/>
+<wire x1="0" y1="0" x2="-1.27" y2="2.54" width="0.254" layer="94"/>
+<wire x1="1.27" y1="0" x2="0" y2="0" width="0.254" layer="94"/>
+<wire x1="0" y1="0" x2="-1.27" y2="0" width="0.254" layer="94"/>
+<wire x1="1.27" y1="2.54" x2="0" y2="2.54" width="0.254" layer="94"/>
+<wire x1="0" y1="2.54" x2="-1.27" y2="2.54" width="0.254" layer="94"/>
+<wire x1="0" y1="2.54" x2="0" y2="0" width="0.1524" layer="94"/>
+<wire x1="-2.032" y1="1.778" x2="-3.429" y2="0.381" width="0.1524" layer="94"/>
+<wire x1="-3.429" y1="0.381" x2="-2.54" y2="0.762" width="0.1524" layer="94"/>
+<wire x1="-2.54" y1="0.762" x2="-3.048" y2="1.27" width="0.1524" layer="94"/>
+<wire x1="-3.048" y1="1.27" x2="-3.429" y2="0.381" width="0.1524" layer="94"/>
+<wire x1="-3.302" y1="-0.762" x2="-2.413" y2="-0.381" width="0.1524" layer="94"/>
+<wire x1="-2.413" y1="-0.381" x2="-2.921" y2="0.127" width="0.1524" layer="94"/>
+<wire x1="-2.921" y1="0.127" x2="-3.302" y2="-0.762" width="0.1524" layer="94"/>
+<wire x1="-1.905" y1="0.635" x2="-3.302" y2="-0.762" width="0.1524" layer="94"/>
+<text x="3.556" y="-2.032" size="1.778" layer="95" rot="R90">&gt;NAME</text>
+<pin name="C" x="0" y="-2.54" visible="off" length="short" direction="pas" rot="R90"/>
+<pin name="A" x="0" y="5.08" visible="off" length="short" direction="pas" rot="R270"/>
+</symbol>
+<symbol name="CAPACITOR-POLARIZED">
+<wire x1="-2.54" y1="0" x2="2.54" y2="0" width="0.254" layer="94"/>
+<wire x1="0" y1="-1.016" x2="0" y2="-2.54" width="0.1524" layer="94"/>
+<wire x1="0" y1="-1" x2="2.4892" y2="-1.8542" width="0.254" layer="94" curve="-37.878202" cap="flat"/>
+<wire x1="-2.4669" y1="-1.8504" x2="0" y2="-1.0161" width="0.254" layer="94" curve="-37.376341" cap="flat"/>
+<text x="1.016" y="0.635" size="1.778" layer="95">&gt;NAME</text>
+<text x="1.016" y="-4.191" size="1.778" layer="96">&gt;VALUE</text>
+<rectangle x1="-2.253" y1="0.668" x2="-1.364" y2="0.795" layer="94"/>
+<rectangle x1="-1.872" y1="0.287" x2="-1.745" y2="1.176" layer="94"/>
+<pin name="+" x="0" y="2.54" visible="off" length="short" direction="pas" swaplevel="1" rot="R270"/>
+<pin name="-" x="0" y="-5.08" visible="off" length="short" direction="pas" swaplevel="1" rot="R90"/>
+</symbol>
+<symbol name="TESTPAD">
+<wire x1="0" y1="0" x2="1.27" y2="0.635" width="0.1524" layer="94"/>
+<wire x1="1.27" y1="0.635" x2="0.635" y2="0.635" width="0.1524" layer="94"/>
+<wire x1="0.635" y1="0.635" x2="-0.635" y2="0.635" width="0.1524" layer="94"/>
+<wire x1="-0.635" y1="0.635" x2="-1.27" y2="0.635" width="0.1524" layer="94"/>
+<wire x1="-1.27" y1="0.635" x2="0" y2="0" width="0.1524" layer="94"/>
+<wire x1="-0.635" y1="0.635" x2="-0.635" y2="3.175" width="0.1524" layer="94"/>
+<wire x1="-0.635" y1="3.175" x2="0.635" y2="3.175" width="0.1524" layer="94"/>
+<wire x1="0.635" y1="3.175" x2="0.635" y2="0.635" width="0.1524" layer="94"/>
+<wire x1="0" y1="2.8575" x2="0" y2="0.9525" width="0.1524" layer="94"/>
+<wire x1="0" y1="0.9525" x2="0.3175" y2="1.27" width="0.1524" layer="94"/>
+<wire x1="0.3175" y1="1.27" x2="-0.3175" y2="1.27" width="0.1524" layer="94"/>
+<wire x1="-0.3175" y1="1.27" x2="0" y2="0.9525" width="0.1524" layer="94"/>
+<text x="-1.27" y="3.4925" size="1.27" layer="95">&gt;NAME</text>
+<pin name="P$1" x="0" y="-2.54" visible="off" length="short" rot="R90"/>
+</symbol>
+<symbol name="TACTSWITCH">
+<wire x1="-1.27" y1="1.27" x2="0.635" y2="1.27" width="0.254" layer="94"/>
+<wire x1="0.635" y1="1.27" x2="4.445" y2="1.27" width="0.254" layer="94"/>
+<wire x1="4.445" y1="1.27" x2="6.35" y2="1.27" width="0.254" layer="94"/>
+<wire x1="0.635" y1="1.27" x2="0.635" y2="5.715" width="0.254" layer="94"/>
+<wire x1="0.635" y1="5.715" x2="4.445" y2="5.715" width="0.254" layer="94"/>
+<wire x1="4.445" y1="5.715" x2="4.445" y2="1.27" width="0.254" layer="94"/>
+<text x="-0.508" y="4.826" size="1.778" layer="95" rot="MR0">&gt;NAME</text>
+<pin name="P$1" x="-5.08" y="0" visible="off" length="middle"/>
+<pin name="P$2" x="10.16" y="0" visible="off" length="middle" rot="R180"/>
+</symbol>
+<symbol name="USB-MINIB">
+<wire x1="0" y1="2.54" x2="0" y2="-25.4" width="0.254" layer="94"/>
+<wire x1="0" y1="-25.4" x2="-12.7" y2="-25.4" width="0.254" layer="94"/>
+<wire x1="-12.7" y1="-25.4" x2="-12.7" y2="2.54" width="0.254" layer="94"/>
+<wire x1="-12.7" y1="2.54" x2="0" y2="2.54" width="0.254" layer="94"/>
+<text x="-0.4082" y="-26.0474" size="1.6764" layer="95" rot="R180">&gt;NAME</text>
+<pin name="VBUS/1" x="5.08" y="0" length="middle" rot="R180"/>
+<pin name="D-/2" x="5.08" y="-2.54" length="middle" rot="R180"/>
+<pin name="D+/3" x="5.08" y="-5.08" length="middle" rot="R180"/>
+<pin name="ID/4" x="5.08" y="-7.62" length="middle" rot="R180"/>
+<pin name="GND/5" x="5.08" y="-10.16" length="middle" rot="R180"/>
+<pin name="SHLD0" x="5.08" y="-15.24" visible="pin" length="middle" rot="R180"/>
+<pin name="SHLD1" x="5.08" y="-17.78" visible="pin" length="middle" rot="R180"/>
+<pin name="SHLD2" x="5.08" y="-20.32" visible="pin" length="middle" rot="R180"/>
+<pin name="SHLD3" x="5.08" y="-22.86" visible="pin" length="middle" rot="R180"/>
+</symbol>
+<symbol name="NFET">
+<wire x1="-2.54" y1="1.27" x2="-2.54" y2="0" width="0.3048" layer="94"/>
+<wire x1="-2.54" y1="0" x2="-2.54" y2="-1.27" width="0.3048" layer="94"/>
+<wire x1="-2.54" y1="-1.27" x2="-2.54" y2="-2.54" width="0.3048" layer="94"/>
+<wire x1="-2.54" y1="-2.54" x2="-2.54" y2="-3.81" width="0.3048" layer="94"/>
+<wire x1="-1.27" y1="-1.27" x2="-2.2225" y2="-1.27" width="0.1524" layer="94"/>
+<wire x1="-2.2225" y1="-1.27" x2="-2.54" y2="-1.27" width="0.1524" layer="94"/>
+<wire x1="-1.27" y1="-1.27" x2="-1.27" y2="-2.54" width="0.1524" layer="94"/>
+<wire x1="0" y1="-2.54" x2="-1.27" y2="-2.54" width="0.1524" layer="94"/>
+<wire x1="0" y1="0" x2="-2.54" y2="0" width="0.1524" layer="94"/>
+<wire x1="-5.08" y1="-2.54" x2="-3.81" y2="-2.54" width="0.1524" layer="94"/>
+<wire x1="-2.54" y1="-2.54" x2="-1.27" y2="-2.54" width="0.1524" layer="94"/>
+<wire x1="-3.81" y1="-2.54" x2="-3.81" y2="0" width="0.1524" layer="94"/>
+<wire x1="-1.5875" y1="-1.905" x2="-1.5875" y2="-0.635" width="0.1016" layer="94"/>
+<wire x1="-1.5875" y1="-0.635" x2="-2.2225" y2="-1.27" width="0.1016" layer="94"/>
+<wire x1="-2.2225" y1="-1.27" x2="-1.5875" y2="-1.905" width="0.1016" layer="94"/>
+<text x="2.54" y="3.556" size="1.778" layer="95" font="vector" rot="R180">&gt;NAME</text>
+<pin name="G" x="-5.08" y="-2.54" visible="off" length="point" direction="pas"/>
+<pin name="D" x="0" y="0" visible="off" length="point" direction="pas" rot="R180"/>
+<pin name="S" x="0" y="-2.54" visible="off" length="point" direction="pas" rot="R180"/>
+</symbol>
+<symbol name="PFET">
+<wire x1="5.08" y1="-1.27" x2="5.08" y2="1.27" width="0.254" layer="94"/>
+<wire x1="5.08" y1="1.27" x2="5.08" y2="3.81" width="0.254" layer="94"/>
+<wire x1="6.35" y1="2.54" x2="6.35" y2="0" width="0.1524" layer="94"/>
+<wire x1="5.08" y1="1.27" x2="4.1275" y2="1.27" width="0.1524" layer="94"/>
+<wire x1="4.1275" y1="1.27" x2="3.81" y2="1.27" width="0.1524" layer="94"/>
+<wire x1="3.81" y1="1.27" x2="3.81" y2="0" width="0.1524" layer="94"/>
+<wire x1="7.62" y1="0" x2="6.35" y2="0" width="0.1524" layer="94"/>
+<wire x1="4.7625" y1="1.905" x2="4.7625" y2="0.635" width="0.1016" layer="94"/>
+<wire x1="4.7625" y1="0.635" x2="4.1275" y2="1.27" width="0.1016" layer="94"/>
+<wire x1="4.1275" y1="1.27" x2="4.7625" y2="1.905" width="0.1016" layer="94"/>
+<text x="0" y="4.064" size="1.778" layer="95" font="vector">&gt;NAME</text>
+<pin name="G" x="7.62" y="0" visible="off" length="point" direction="pas" rot="R180"/>
+<pin name="S" x="2.54" y="0" visible="off" length="short" direction="pas"/>
+<pin name="D" x="2.54" y="2.54" visible="off" length="short" direction="pas"/>
+</symbol>
+</symbols>
+<devicesets>
+<deviceset name="AT91SAM7S64" prefix="IC">
+<gates>
+<gate name="G$1" symbol="AT91SAM7S64" x="30.48" y="2.54"/>
+</gates>
+<devices>
+<device name="" package="LQFP-64">
+<connects>
+<connect gate="G$1" pin="AD4" pad="3"/>
+<connect gate="G$1" pin="AD5" pad="4"/>
+<connect gate="G$1" pin="AD6" pad="5"/>
+<connect gate="G$1" pin="AD7" pad="6"/>
+<connect gate="G$1" pin="ADVREF" pad="1"/>
+<connect gate="G$1" pin="DDM" pad="56"/>
+<connect gate="G$1" pin="DDP" pad="57"/>
+<connect gate="G$1" pin="ERASE" pad="55"/>
+<connect gate="G$1" pin="GND0" pad="2"/>
+<connect gate="G$1" pin="GND1" pad="17"/>
+<connect gate="G$1" pin="GND2" pad="46"/>
+<connect gate="G$1" pin="GND3" pad="60"/>
+<connect gate="G$1" pin="JTAGSEL" pad="50"/>
+<connect gate="G$1" pin="NRST" pad="39"/>
+<connect gate="G$1" pin="PA0" pad="48"/>
+<connect gate="G$1" pin="PA1" pad="47"/>
+<connect gate="G$1" pin="PA10" pad="29"/>
+<connect gate="G$1" pin="PA11" pad="28"/>
+<connect gate="G$1" pin="PA12" pad="27"/>
+<connect gate="G$1" pin="PA13" pad="22"/>
+<connect gate="G$1" pin="PA14" pad="21"/>
+<connect gate="G$1" pin="PA15" pad="20"/>
+<connect gate="G$1" pin="PA16" pad="19"/>
+<connect gate="G$1" pin="PA17/AD0" pad="9"/>
+<connect gate="G$1" pin="PA18/AD1" pad="10"/>
+<connect gate="G$1" pin="PA19/AD2" pad="13"/>
+<connect gate="G$1" pin="PA2" pad="44"/>
+<connect gate="G$1" pin="PA20/AD3" pad="16"/>
+<connect gate="G$1" pin="PA21" pad="11"/>
+<connect gate="G$1" pin="PA22" pad="14"/>
+<connect gate="G$1" pin="PA23" pad="15"/>
+<connect gate="G$1" pin="PA24" pad="23"/>
+<connect gate="G$1" pin="PA25" pad="25"/>
+<connect gate="G$1" pin="PA26" pad="26"/>
+<connect gate="G$1" pin="PA27" pad="37"/>
+<connect gate="G$1" pin="PA28" pad="38"/>
+<connect gate="G$1" pin="PA29" pad="41"/>
+<connect gate="G$1" pin="PA3" pad="43"/>
+<connect gate="G$1" pin="PA30" pad="42"/>
+<connect gate="G$1" pin="PA31" pad="52"/>
+<connect gate="G$1" pin="PA4" pad="36"/>
+<connect gate="G$1" pin="PA5" pad="35"/>
+<connect gate="G$1" pin="PA6" pad="34"/>
+<connect gate="G$1" pin="PA7" pad="32"/>
+<connect gate="G$1" pin="PA8" pad="31"/>
+<connect gate="G$1" pin="PA9" pad="30"/>
+<connect gate="G$1" pin="PLLRC" pad="63"/>
+<connect gate="G$1" pin="TCK" pad="53"/>
+<connect gate="G$1" pin="TDI" pad="33"/>
+<connect gate="G$1" pin="TDO" pad="49"/>
+<connect gate="G$1" pin="TMS" pad="51"/>
+<connect gate="G$1" pin="TST" pad="40"/>
+<connect gate="G$1" pin="VDDCORE0" pad="12"/>
+<connect gate="G$1" pin="VDDCORE1" pad="24"/>
+<connect gate="G$1" pin="VDDCORE2" pad="54"/>
+<connect gate="G$1" pin="VDDFLASH" pad="59"/>
+<connect gate="G$1" pin="VDDIN" pad="7"/>
+<connect gate="G$1" pin="VDDIO0" pad="18"/>
+<connect gate="G$1" pin="VDDIO1" pad="45"/>
+<connect gate="G$1" pin="VDDIO2" pad="58"/>
+<connect gate="G$1" pin="VDDOUT" pad="8"/>
+<connect gate="G$1" pin="VDDPLL" pad="64"/>
+<connect gate="G$1" pin="XIN/PGMCK" pad="62"/>
+<connect gate="G$1" pin="XOUT" pad="61"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+</devices>
+</deviceset>
+<deviceset name="SUPPLY_2V5" prefix="V">
+<gates>
+<gate name="G$1" symbol="SUPPLY_+2V5" x="0" y="0"/>
+</gates>
+<devices>
+<device name="">
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+</devices>
+</deviceset>
+<deviceset name="XTAL-SMD-CITIZEN-CS10" prefix="XT">
+<gates>
+<gate name="G$1" symbol="CRYSTAL" x="-10.16" y="2.54"/>
+</gates>
+<devices>
+<device name="" package="XTAL-SMD-CITIZEN-CS10">
+<connects>
+<connect gate="G$1" pin="A" pad="A"/>
+<connect gate="G$1" pin="B" pad="B"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+</devices>
+</deviceset>
+<deviceset name="HIROSE-MQ172-4POS" prefix="SV">
+<gates>
+<gate name="G$1" symbol="4TERMSTRIP" x="0" y="0"/>
+</gates>
+<devices>
+<device name="" package="HIROSE-MQ172-4POS">
+<connects>
+<connect gate="G$1" pin="PIN1" pad="1"/>
+<connect gate="G$1" pin="PIN2" pad="2"/>
+<connect gate="G$1" pin="PIN3" pad="3"/>
+<connect gate="G$1" pin="PIN4" pad="4"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+</devices>
+</deviceset>
+<deviceset name="HEADER-MALE-10X2" prefix="SV" uservalue="yes">
+<gates>
+<gate name="G$1" symbol="HEADER-MALE-10X2" x="2.54" y="-2.54"/>
+</gates>
+<devices>
+<device name="" package="HEADER-MALE-10X2-0.100-SHROUDED">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="10" pad="10"/>
+<connect gate="G$1" pin="11" pad="11"/>
+<connect gate="G$1" pin="12" pad="12"/>
+<connect gate="G$1" pin="13" pad="13"/>
+<connect gate="G$1" pin="14" pad="14"/>
+<connect gate="G$1" pin="15" pad="15"/>
+<connect gate="G$1" pin="16" pad="16"/>
+<connect gate="G$1" pin="17" pad="17"/>
+<connect gate="G$1" pin="18" pad="18"/>
+<connect gate="G$1" pin="19" pad="19"/>
+<connect gate="G$1" pin="2" pad="2"/>
+<connect gate="G$1" pin="20" pad="20"/>
+<connect gate="G$1" pin="3" pad="3"/>
+<connect gate="G$1" pin="4" pad="4"/>
+<connect gate="G$1" pin="5" pad="5"/>
+<connect gate="G$1" pin="6" pad="6"/>
+<connect gate="G$1" pin="7" pad="7"/>
+<connect gate="G$1" pin="8" pad="8"/>
+<connect gate="G$1" pin="9" pad="9"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+</devices>
+</deviceset>
+<deviceset name="SUPPLY_VMID" prefix="V">
+<gates>
+<gate name="G$1" symbol="SUPPLY_VMID" x="0" y="0"/>
+</gates>
+<devices>
+<device name="">
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+</devices>
+</deviceset>
+<deviceset name="TLC5540" prefix="IC">
+<gates>
+<gate name="G$1" symbol="TLC5540" x="0" y="0"/>
+</gates>
+<devices>
+<device name="" package="TSSOP-24">
+<connects>
+<connect gate="G$1" pin="AGND0" pad="20"/>
+<connect gate="G$1" pin="AGND1" pad="21"/>
+<connect gate="G$1" pin="ANALOGIN" pad="19"/>
+<connect gate="G$1" pin="CLK" pad="12"/>
+<connect gate="G$1" pin="D1" pad="3"/>
+<connect gate="G$1" pin="D2" pad="4"/>
+<connect gate="G$1" pin="D3" pad="5"/>
+<connect gate="G$1" pin="D4" pad="6"/>
+<connect gate="G$1" pin="D5" pad="7"/>
+<connect gate="G$1" pin="D6" pad="8"/>
+<connect gate="G$1" pin="D7" pad="9"/>
+<connect gate="G$1" pin="DGND0" pad="2"/>
+<connect gate="G$1" pin="DGND1" pad="24"/>
+<connect gate="G$1" pin="MSB-D8" pad="10"/>
+<connect gate="G$1" pin="NOE" pad="1"/>
+<connect gate="G$1" pin="REFB" pad="23"/>
+<connect gate="G$1" pin="REFBS" pad="22"/>
+<connect gate="G$1" pin="REFT" pad="17"/>
+<connect gate="G$1" pin="REFTS" pad="16"/>
+<connect gate="G$1" pin="VDDA0" pad="14"/>
+<connect gate="G$1" pin="VDDA1" pad="15"/>
+<connect gate="G$1" pin="VDDA2" pad="18"/>
+<connect gate="G$1" pin="VDDD0" pad="11"/>
+<connect gate="G$1" pin="VDDD1" pad="13"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+</devices>
+</deviceset>
+<deviceset name="SPARTAN-II-XC2S30-100-VQFP" prefix="IC">
+<gates>
+<gate name="G$1" symbol="SPARTAN-II-XC2S30-100-VQFP" x="0" y="0"/>
+</gates>
+<devices>
+<device name="" package="VQFP-100">
+<connects>
+<connect gate="G$1" pin="/PROGRAM" pad="51"/>
+<connect gate="G$1" pin="CCLK" pad="75"/>
+<connect gate="G$1" pin="DIN" pad="73"/>
+<connect gate="G$1" pin="DONE" pad="49"/>
+<connect gate="G$1" pin="DOUT" pad="74"/>
+<connect gate="G$1" pin="GND1" pad="1"/>
+<connect gate="G$1" pin="GND2" pad="11"/>
+<connect gate="G$1" pin="GND3" pad="38"/>
+<connect gate="G$1" pin="GND4" pad="78"/>
+<connect gate="G$1" pin="GND5" pad="89"/>
+<connect gate="G$1" pin="GND6" pad="48"/>
+<connect gate="G$1" pin="GND7" pad="64"/>
+<connect gate="G$1" pin="GND8" pad="24"/>
+<connect gate="G$1" pin="M0" pad="25"/>
+<connect gate="G$1" pin="M1" pad="23"/>
+<connect gate="G$1" pin="M2" pad="27"/>
+<connect gate="G$1" pin="NC0" pad="28"/>
+<connect gate="G$1" pin="NC1" pad="29"/>
+<connect gate="G$1" pin="P10_IO7" pad="10"/>
+<connect gate="G$1" pin="P13_IO6" pad="13"/>
+<connect gate="G$1" pin="P15_IO6" pad="15"/>
+<connect gate="G$1" pin="P16_IOV6" pad="16"/>
+<connect gate="G$1" pin="P17_IO6" pad="17"/>
+<connect gate="G$1" pin="P18_IO6" pad="18"/>
+<connect gate="G$1" pin="P19_IO6" pad="19"/>
+<connect gate="G$1" pin="P20_IOV6" pad="20"/>
+<connect gate="G$1" pin="P21_IO6" pad="21"/>
+<connect gate="G$1" pin="P22_IO6" pad="22"/>
+<connect gate="G$1" pin="P30_IOV5" pad="30"/>
+<connect gate="G$1" pin="P31_IO5" pad="31"/>
+<connect gate="G$1" pin="P32_IO5" pad="32"/>
+<connect gate="G$1" pin="P34_IOV5" pad="34"/>
+<connect gate="G$1" pin="P36_IGCK5" pad="36"/>
+<connect gate="G$1" pin="P39_IGCK4" pad="39"/>
+<connect gate="G$1" pin="P3_IO7" pad="3"/>
+<connect gate="G$1" pin="P40_IO4" pad="40"/>
+<connect gate="G$1" pin="P41_IOV4" pad="41"/>
+<connect gate="G$1" pin="P43_IO4" pad="43"/>
+<connect gate="G$1" pin="P44_IO4" pad="44"/>
+<connect gate="G$1" pin="P45_IOV4" pad="45"/>
+<connect gate="G$1" pin="P46_IO4" pad="46"/>
+<connect gate="G$1" pin="P47_IO4" pad="47"/>
+<connect gate="G$1" pin="P4_IOV7" pad="4"/>
+<connect gate="G$1" pin="P52_IO3" pad="52"/>
+<connect gate="G$1" pin="P53_IO3" pad="53"/>
+<connect gate="G$1" pin="P54_IOV3" pad="54"/>
+<connect gate="G$1" pin="P55_IO3" pad="55"/>
+<connect gate="G$1" pin="P56_IO3" pad="56"/>
+<connect gate="G$1" pin="P57_IO3" pad="57"/>
+<connect gate="G$1" pin="P58_IO3" pad="58"/>
+<connect gate="G$1" pin="P59_IOV3" pad="59"/>
+<connect gate="G$1" pin="P5_IO7" pad="5"/>
+<connect gate="G$1" pin="P60_IO3" pad="60"/>
+<connect gate="G$1" pin="P62_IO3" pad="62"/>
+<connect gate="G$1" pin="P65_IO2" pad="65"/>
+<connect gate="G$1" pin="P66_IO2" pad="66"/>
+<connect gate="G$1" pin="P67_IOV2" pad="67"/>
+<connect gate="G$1" pin="P68_IO2" pad="68"/>
+<connect gate="G$1" pin="P69_IO2" pad="69"/>
+<connect gate="G$1" pin="P6_IO7" pad="6"/>
+<connect gate="G$1" pin="P70_IO2" pad="70"/>
+<connect gate="G$1" pin="P71_IO2" pad="71"/>
+<connect gate="G$1" pin="P72_IOV2" pad="72"/>
+<connect gate="G$1" pin="P7_IO7" pad="7"/>
+<connect gate="G$1" pin="P80_IO1" pad="80"/>
+<connect gate="G$1" pin="P81_IO1" pad="81"/>
+<connect gate="G$1" pin="P82_IOV1" pad="82"/>
+<connect gate="G$1" pin="P83_IO1" pad="83"/>
+<connect gate="G$1" pin="P84_IO1" pad="84"/>
+<connect gate="G$1" pin="P86_IOV1" pad="86"/>
+<connect gate="G$1" pin="P87_IO1" pad="87"/>
+<connect gate="G$1" pin="P88_IGCK1" pad="88"/>
+<connect gate="G$1" pin="P8_IOV7" pad="8"/>
+<connect gate="G$1" pin="P91_IGCK0" pad="91"/>
+<connect gate="G$1" pin="P93_IOV0" pad="93"/>
+<connect gate="G$1" pin="P95_IO0" pad="95"/>
+<connect gate="G$1" pin="P96_IO0" pad="96"/>
+<connect gate="G$1" pin="P97_IOV0" pad="97"/>
+<connect gate="G$1" pin="P98_IO0" pad="98"/>
+<connect gate="G$1" pin="P9_IO7" pad="9"/>
+<connect gate="G$1" pin="TCK" pad="99"/>
+<connect gate="G$1" pin="TDI" pad="79"/>
+<connect gate="G$1" pin="TDO" pad="77"/>
+<connect gate="G$1" pin="TMS" pad="2"/>
+<connect gate="G$1" pin="VCCINT1" pad="61"/>
+<connect gate="G$1" pin="VCCINT2" pad="92"/>
+<connect gate="G$1" pin="VCCINT3" pad="85"/>
+<connect gate="G$1" pin="VCCINT4" pad="94"/>
+<connect gate="G$1" pin="VCCINT5" pad="14"/>
+<connect gate="G$1" pin="VCCINT6" pad="33"/>
+<connect gate="G$1" pin="VCCINT7" pad="35"/>
+<connect gate="G$1" pin="VCCINT8" pad="42"/>
+<connect gate="G$1" pin="VCCO_B07" pad="100"/>
+<connect gate="G$1" pin="VCCO_B10" pad="90"/>
+<connect gate="G$1" pin="VCCO_B21" pad="76"/>
+<connect gate="G$1" pin="VCCO_B32" pad="63"/>
+<connect gate="G$1" pin="VCCO_B43" pad="50"/>
+<connect gate="G$1" pin="VCCO_B54" pad="37"/>
+<connect gate="G$1" pin="VCCO_B65" pad="26"/>
+<connect gate="G$1" pin="VCCO_B76" pad="12"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+</devices>
+</deviceset>
+<deviceset name="RESISTOR" prefix="R" uservalue="yes">
+<gates>
+<gate name="G$1" symbol="RESISTOR" x="-5.08" y="0"/>
+</gates>
+<devices>
+<device name="2512" package="2512">
+<connects>
+<connect gate="G$1" pin="1" pad="P$1"/>
+<connect gate="G$1" pin="2" pad="P$2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="0603" package="RLC_0603">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="0805" package="RLC_0805">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="1210" package="RLC_1210">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+</devices>
+</deviceset>
+<deviceset name="FERRITE" prefix="U">
+<gates>
+<gate name="G$1" symbol="FERRITE" x="-7.62" y="0"/>
+</gates>
+<devices>
+<device name="0603" package="RLC_0603">
+<connects>
+<connect gate="G$1" pin="A" pad="1"/>
+<connect gate="G$1" pin="B" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="0805" package="RLC_0805">
+<connects>
+<connect gate="G$1" pin="A" pad="1"/>
+<connect gate="G$1" pin="B" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="1210" package="RLC_1210">
+<connects>
+<connect gate="G$1" pin="A" pad="1"/>
+<connect gate="G$1" pin="B" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+</devices>
+</deviceset>
+<deviceset name="CAPACITOR" prefix="C" uservalue="yes">
+<gates>
+<gate name="G$1" symbol="CAPACITOR" x="2.54" y="0"/>
+</gates>
+<devices>
+<device name="0603" package="RLC_0603">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="0805" package="RLC_0805">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="1210" package="RLC_1210">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+</devices>
+</deviceset>
+<deviceset name="OPAMP-AD8052" prefix="IC">
+<gates>
+<gate name="A" symbol="OPAMP" x="0" y="0"/>
+<gate name="B" symbol="OPAMP" x="0" y="-12.7"/>
+<gate name="P" symbol="POWER-PINS" x="-20.32" y="2.54"/>
+</gates>
+<devices>
+<device name="" package="MSOP8">
+<connects>
+<connect gate="A" pin="+IN" pad="3"/>
+<connect gate="A" pin="-IN" pad="2"/>
+<connect gate="A" pin="OUT" pad="1"/>
+<connect gate="B" pin="+IN" pad="5"/>
+<connect gate="B" pin="-IN" pad="6"/>
+<connect gate="B" pin="OUT" pad="7"/>
+<connect gate="P" pin="V+" pad="8"/>
+<connect gate="P" pin="V-" pad="4"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+</devices>
+</deviceset>
+<deviceset name="CAPACITOR-POLARIZED" prefix="C" uservalue="yes">
+<gates>
+<gate name="G$1" symbol="CAPACITOR-POLARIZED" x="0" y="0"/>
+</gates>
+<devices>
+<device name="ALCHIP-MZA-F80" package="CAPCAITOR-ELECTROLYTIC-ALCHIP-MZA-F80">
+<connects>
+<connect gate="G$1" pin="+" pad="+"/>
+<connect gate="G$1" pin="-" pad="-"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+</devices>
+</deviceset>
+<deviceset name="LED" prefix="D">
+<gates>
+<gate name="G$1" symbol="LED" x="0" y="0"/>
+</gates>
+<devices>
+<device name="" package="LED_0603">
+<connects>
+<connect gate="G$1" pin="A" pad="+"/>
+<connect gate="G$1" pin="C" pad="-"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+</devices>
+</deviceset>
+<deviceset name="TESTPAD" prefix="TP">
+<gates>
+<gate name="G$1" symbol="TESTPAD" x="0" y="2.54"/>
+</gates>
+<devices>
+<device name="0.7MM-ROUND-DRILLED" package="TESTPAD-PTH-0.7MM">
+<connects>
+<connect gate="G$1" pin="P$1" pad="1"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="0.200&quot;-SQUARE" package="SQUARE-PAD-0.200-INCH">
+<connects>
+<connect gate="G$1" pin="P$1" pad="1"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="KEYSTONE-SMD" package="KEYSTONE-SMD-TESTPOINT-5015">
+<connects>
+<connect gate="G$1" pin="P$1" pad="1"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="KEYSTONE-PTH" package="KEYSTONE-PTH-TESTPOINT-5011">
+<connects>
+<connect gate="G$1" pin="P$1" pad="A"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+</devices>
+</deviceset>
+<deviceset name="TACTSWITCH" prefix="SW">
+<gates>
+<gate name="G$1" symbol="TACTSWITCH" x="-10.16" y="5.08"/>
+</gates>
+<devices>
+<device name="THROUGHHOLE" package="TACTSWITCH">
+<connects>
+<connect gate="G$1" pin="P$1" pad="P$1"/>
+<connect gate="G$1" pin="P$2" pad="P$2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="" package="TACTSWITCH-SMD-EVQQ1">
+<connects>
+<connect gate="G$1" pin="P$1" pad="A"/>
+<connect gate="G$1" pin="P$2" pad="B"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+</devices>
+</deviceset>
+<deviceset name="COMP-TLV3502" prefix="IC">
+<gates>
+<gate name="A" symbol="OPAMP" x="0" y="12.7"/>
+<gate name="B" symbol="OPAMP" x="0" y="0"/>
+<gate name="P" symbol="POWER-PINS" x="-15.24" y="12.7"/>
+</gates>
+<devices>
+<device name="SOT-23-8" package="SOT-23-8">
+<connects>
+<connect gate="A" pin="+IN" pad="1"/>
+<connect gate="A" pin="-IN" pad="2"/>
+<connect gate="A" pin="OUT" pad="7"/>
+<connect gate="B" pin="+IN" pad="3"/>
+<connect gate="B" pin="-IN" pad="4"/>
+<connect gate="B" pin="OUT" pad="6"/>
+<connect gate="P" pin="V+" pad="8"/>
+<connect gate="P" pin="V-" pad="5"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="SOT-23-8-OR-MSOP-8" package="SOT-23-8-OR-MSOP-8">
+<connects>
+<connect gate="A" pin="+IN" pad="1"/>
+<connect gate="A" pin="-IN" pad="2"/>
+<connect gate="A" pin="OUT" pad="7"/>
+<connect gate="B" pin="+IN" pad="3"/>
+<connect gate="B" pin="-IN" pad="4"/>
+<connect gate="B" pin="OUT" pad="6"/>
+<connect gate="P" pin="V+" pad="8"/>
+<connect gate="P" pin="V-" pad="5"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+</devices>
+</deviceset>
+<deviceset name="IRF7307" prefix="Q">
+<gates>
+<gate name="N" symbol="NFET" x="0" y="2.54"/>
+<gate name="P" symbol="PFET" x="10.16" y="0"/>
+</gates>
+<devices>
+<device name="" package="SOIC-8">
+<connects>
+<connect gate="N" pin="D" pad="8"/>
+<connect gate="N" pin="G" pad="2"/>
+<connect gate="N" pin="S" pad="1"/>
+<connect gate="P" pin="D" pad="6"/>
+<connect gate="P" pin="G" pad="4"/>
+<connect gate="P" pin="S" pad="3"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+</devices>
+</deviceset>
+<deviceset name="LP2989-LDO" prefix="IC" uservalue="yes">
+<gates>
+<gate name="G$1" symbol="LP2989-LDO" x="0" y="-2.54"/>
+</gates>
+<devices>
+<device name="SOIC" package="SOIC-8">
+<connects>
+<connect gate="G$1" pin="/ERROR" pad="7"/>
+<connect gate="G$1" pin="/SHDN" pad="8"/>
+<connect gate="G$1" pin="BYP" pad="1"/>
+<connect gate="G$1" pin="GND" pad="3"/>
+<connect gate="G$1" pin="IN" pad="4"/>
+<connect gate="G$1" pin="OUT" pad="5"/>
+<connect gate="G$1" pin="SENSE" pad="6"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+</devices>
+</deviceset>
+<deviceset name="CD4066" prefix="IC">
+<gates>
+<gate name="G$1" symbol="CD4066-ANALOG-SWITCH" x="-15.24" y="0"/>
+</gates>
+<devices>
+<device name="" package="TSSOP-14">
+<connects>
+<connect gate="G$1" pin="A1" pad="1"/>
+<connect gate="G$1" pin="A2" pad="4"/>
+<connect gate="G$1" pin="A3" pad="8"/>
+<connect gate="G$1" pin="A4" pad="11"/>
+<connect gate="G$1" pin="B1" pad="2"/>
+<connect gate="G$1" pin="B2" pad="3"/>
+<connect gate="G$1" pin="B3" pad="9"/>
+<connect gate="G$1" pin="B4" pad="10"/>
+<connect gate="G$1" pin="C1" pad="13"/>
+<connect gate="G$1" pin="C2" pad="5"/>
+<connect gate="G$1" pin="C3" pad="6"/>
+<connect gate="G$1" pin="C4" pad="12"/>
+<connect gate="G$1" pin="VDD" pad="14"/>
+<connect gate="G$1" pin="VSS" pad="7"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+</devices>
+</deviceset>
+<deviceset name="OPAMP-TLC2274" prefix="IC">
+<gates>
+<gate name="A" symbol="OPAMP" x="0" y="0"/>
+<gate name="B" symbol="OPAMP" x="0" y="-12.7"/>
+<gate name="C" symbol="OPAMP" x="0" y="-25.4"/>
+<gate name="D" symbol="OPAMP" x="0" y="-38.1"/>
+<gate name="P" symbol="POWER-PINS" x="-30.48" y="-2.54"/>
+</gates>
+<devices>
+<device name="" package="TSSOP-14">
+<connects>
+<connect gate="A" pin="+IN" pad="3"/>
+<connect gate="A" pin="-IN" pad="2"/>
+<connect gate="A" pin="OUT" pad="1"/>
+<connect gate="B" pin="+IN" pad="5"/>
+<connect gate="B" pin="-IN" pad="6"/>
+<connect gate="B" pin="OUT" pad="7"/>
+<connect gate="C" pin="+IN" pad="10"/>
+<connect gate="C" pin="-IN" pad="9"/>
+<connect gate="C" pin="OUT" pad="8"/>
+<connect gate="D" pin="+IN" pad="12"/>
+<connect gate="D" pin="-IN" pad="13"/>
+<connect gate="D" pin="OUT" pad="14"/>
+<connect gate="P" pin="V+" pad="4"/>
+<connect gate="P" pin="V-" pad="11"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+</devices>
+</deviceset>
+<deviceset name="74XX244-OCTAL-TRISTATE-BUFFERS" prefix="IC">
+<gates>
+<gate name="G$1" symbol="74XX244-OCTAL-TRISTATE-BUFFERS" x="-10.16" y="-10.16"/>
+</gates>
+<devices>
+<device name="" package="TSSOP-20">
+<connects>
+<connect gate="G$1" pin="1A1" pad="2"/>
+<connect gate="G$1" pin="1A2" pad="4"/>
+<connect gate="G$1" pin="1A3" pad="6"/>
+<connect gate="G$1" pin="1A4" pad="8"/>
+<connect gate="G$1" pin="1NOE" pad="1"/>
+<connect gate="G$1" pin="1Y1" pad="18"/>
+<connect gate="G$1" pin="1Y2" pad="16"/>
+<connect gate="G$1" pin="1Y3" pad="14"/>
+<connect gate="G$1" pin="1Y4" pad="12"/>
+<connect gate="G$1" pin="2A1" pad="11"/>
+<connect gate="G$1" pin="2A2" pad="13"/>
+<connect gate="G$1" pin="2A3" pad="15"/>
+<connect gate="G$1" pin="2A4" pad="17"/>
+<connect gate="G$1" pin="2NOE" pad="19"/>
+<connect gate="G$1" pin="2Y1" pad="9"/>
+<connect gate="G$1" pin="2Y2" pad="7"/>
+<connect gate="G$1" pin="2Y3" pad="5"/>
+<connect gate="G$1" pin="2Y4" pad="3"/>
+<connect gate="G$1" pin="VDD" pad="20"/>
+<connect gate="G$1" pin="VSS" pad="10"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+</devices>
+</deviceset>
+<deviceset name="HCU-INVERTER" prefix="IC">
+<gates>
+<gate name="G$1" symbol="INVERTER" x="0" y="0"/>
+</gates>
+<devices>
+<device name="" package="SMV-5">
+<connects>
+<connect gate="G$1" pin="A" pad="2"/>
+<connect gate="G$1" pin="VDD" pad="5"/>
+<connect gate="G$1" pin="VSS" pad="3"/>
+<connect gate="G$1" pin="Y" pad="4"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+</devices>
+</deviceset>
+<deviceset name="USB-MINIB" prefix="SV">
+<gates>
+<gate name="G$1" symbol="USB-MINIB" x="0" y="-2.54"/>
+</gates>
+<devices>
+<device name="" package="USB-MINIB-SMD">
+<connects>
+<connect gate="G$1" pin="D+/3" pad="3"/>
+<connect gate="G$1" pin="D-/2" pad="2"/>
+<connect gate="G$1" pin="GND/5" pad="5"/>
+<connect gate="G$1" pin="ID/4" pad="4"/>
+<connect gate="G$1" pin="SHLD0" pad="TAB0"/>
+<connect gate="G$1" pin="SHLD1" pad="TAB1"/>
+<connect gate="G$1" pin="SHLD2" pad="TAB2"/>
+<connect gate="G$1" pin="SHLD3" pad="TAB3"/>
+<connect gate="G$1" pin="VBUS/1" pad="1"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+</devices>
+</deviceset>
+</devicesets>
+</library>
+<library name="supply2">
+<packages>
+</packages>
+<symbols>
+<symbol name="GND">
+<wire x1="-1.27" y1="0" x2="1.27" y2="0" width="0.254" layer="94"/>
+<wire x1="1.27" y1="0" x2="0" y2="-1.27" width="0.254" layer="94"/>
+<wire x1="0" y1="-1.27" x2="-1.27" y2="0" width="0.254" layer="94"/>
+<text x="-1.905" y="-3.175" size="1.778" layer="96">&gt;VALUE</text>
+<pin name="GND" x="0" y="2.54" visible="off" length="short" direction="sup" rot="R270"/>
+</symbol>
+</symbols>
+<devicesets>
+<deviceset name="GND" prefix="SUPPLY">
+<description>&lt;b&gt;SUPPLY SYMBOL&lt;/b&gt;</description>
+<gates>
+<gate name="GND" symbol="GND" x="0" y="0"/>
+</gates>
+<devices>
+<device name="">
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+</devices>
+</deviceset>
+</devicesets>
+</library>
+<library name="supply1">
+<packages>
+</packages>
+<symbols>
+<symbol name="+3V3">
+<wire x1="1.27" y1="-1.905" x2="0" y2="0" width="0.254" layer="94"/>
+<wire x1="0" y1="0" x2="-1.27" y2="-1.905" width="0.254" layer="94"/>
+<text x="-2.54" y="-5.08" size="1.778" layer="96" rot="R90">&gt;VALUE</text>
+<pin name="+3V3" x="0" y="-2.54" visible="off" length="short" direction="sup" rot="R90"/>
+</symbol>
+<symbol name="VDD">
+<wire x1="1.27" y1="-1.905" x2="0" y2="0" width="0.254" layer="94"/>
+<wire x1="0" y1="0" x2="-1.27" y2="-1.905" width="0.254" layer="94"/>
+<wire x1="0" y1="1.27" x2="-1.27" y2="-1.905" width="0.254" layer="94"/>
+<wire x1="1.27" y1="-1.905" x2="0" y2="1.27" width="0.254" layer="94"/>
+<text x="-2.54" y="-2.54" size="1.778" layer="96" rot="R90">&gt;VALUE</text>
+<pin name="VDD" x="0" y="-2.54" visible="off" length="short" direction="sup" rot="R90"/>
+</symbol>
+</symbols>
+<devicesets>
+<deviceset name="+3V3" prefix="+3V3">
+<description>&lt;b&gt;SUPPLY SYMBOL&lt;/b&gt;</description>
+<gates>
+<gate name="G$1" symbol="+3V3" x="0" y="0"/>
+</gates>
+<devices>
+<device name="">
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+</devices>
+</deviceset>
+<deviceset name="VDD" prefix="VDD">
+<description>&lt;b&gt;SUPPLY SYMBOL&lt;/b&gt;</description>
+<gates>
+<gate name="G$1" symbol="VDD" x="0" y="0"/>
+</gates>
+<devices>
+<device name="">
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+</devices>
+</deviceset>
+</devicesets>
+</library>
+<library name="proxmark3">
+<description>Generated from &lt;b&gt;proxmark3.sch&lt;/b&gt;&lt;p&gt;
+by exp-lbrs.ulp</description>
+<packages>
+<package name="--MERGED_TQ-SMD-RELAY">
+<wire x1="-7" y1="-6.6" x2="7" y2="-6.6" width="0.254" layer="21"/>
+<wire x1="-7" y1="6.6" x2="7" y2="6.6" width="0.254" layer="21"/>
+<wire x1="-7" y1="6.6" x2="-7" y2="-6.6" width="0.254" layer="21"/>
+<wire x1="7" y1="6.6" x2="7" y2="-6.6" width="0.254" layer="21"/>
+<wire x1="-4" y1="2" x2="-6" y2="2" width="0.254" layer="21"/>
+<wire x1="-6" y1="2" x2="-6" y2="-2" width="0.254" layer="21"/>
+<wire x1="-6" y1="-2" x2="-4" y2="-2" width="0.254" layer="21"/>
+<wire x1="-4" y1="-2" x2="-4" y2="2" width="0.254" layer="21"/>
+<smd name="1" x="-5.08" y="-4.78" dx="1" dy="3" layer="1" rot="R180"/>
+<smd name="2" x="-2.54" y="-4.78" dx="1" dy="3" layer="1" rot="R180"/>
+<smd name="3" x="0" y="-4.78" dx="1" dy="3" layer="1" rot="R180"/>
+<smd name="4" x="2.54" y="-4.78" dx="1" dy="3" layer="1" rot="R180"/>
+<smd name="5" x="5.08" y="-4.78" dx="1" dy="3" layer="1" rot="R180"/>
+<smd name="6" x="5.08" y="4.78" dx="1" dy="3" layer="1" rot="R180"/>
+<smd name="7" x="2.54" y="4.78" dx="1" dy="3" layer="1" rot="R180"/>
+<smd name="8" x="0" y="4.78" dx="1" dy="3" layer="1" rot="R180"/>
+<smd name="9" x="-2.54" y="4.78" dx="1" dy="3" layer="1" rot="R180"/>
+<smd name="10" x="-5.08" y="4.78" dx="1" dy="3" layer="1" rot="R180"/>
+<text x="6.35" y="-2.54" size="1.27" layer="21" ratio="17" rot="R90">&gt;NAME</text>
+</package>
+<package name="--MERGED_SOT23-3LEAD">
+<wire x1="-1" y1="1" x2="-1" y2="-0.1" width="0.127" layer="21"/>
+<wire x1="-0.3" y1="-0.7" x2="0.3" y2="-0.7" width="0.127" layer="21"/>
+<wire x1="1" y1="-0.1" x2="1" y2="1" width="0.127" layer="21"/>
+<wire x1="1" y1="1" x2="0.6" y2="1" width="0.127" layer="21"/>
+<wire x1="-1" y1="1" x2="-0.6" y2="1" width="0.127" layer="21"/>
+<smd name="1" x="-0.9398" y="-0.762" dx="1.016" dy="1.016" layer="1"/>
+<smd name="2" x="0.9652" y="-0.762" dx="1.016" dy="1.016" layer="1"/>
+<smd name="3" x="0.0127" y="1.143" dx="1.016" dy="1.778" layer="1"/>
+<text x="2.4326" y="-0.1281" size="1.016" layer="25" font="vector" ratio="18" rot="R90">&gt;NAME</text>
+</package>
+<package name="--MERGED_SOT-23-5">
+<wire x1="-1.3398" y1="-0.4224" x2="1.2602" y2="-0.4224" width="0.127" layer="21"/>
+<wire x1="1.2602" y1="-0.4224" x2="1.2602" y2="0.4776" width="0.127" layer="21"/>
+<wire x1="1.2602" y1="0.4776" x2="-1.3398" y2="0.4776" width="0.127" layer="21"/>
+<wire x1="-1.3398" y1="0.4776" x2="-1.3398" y2="-0.4224" width="0.127" layer="21"/>
+<smd name="1" x="-0.9398" y="-1.4224" dx="0.4" dy="1.5" layer="1"/>
+<smd name="2" x="0.0102" y="-1.4224" dx="0.4" dy="1.5" layer="1"/>
+<smd name="3" x="0.9602" y="-1.4224" dx="0.4" dy="1.5" layer="1"/>
+<smd name="4" x="0.9602" y="1.4276" dx="0.4" dy="1.5" layer="1"/>
+<smd name="5" x="-0.9398" y="1.4276" dx="0.4" dy="1.5" layer="1"/>
+<text x="1.4602" y="2.1776" size="1.27" layer="21" font="vector" rot="R270">&gt;NAME</text>
+</package>
+<package name="--MERGED_HEADER-MALE-6X1-0.100-UNKEYED">
+<wire x1="-1.17" y1="7.62" x2="1.17" y2="7.62" width="0.254" layer="21"/>
+<wire x1="1.17" y1="7.62" x2="1.17" y2="-7.62" width="0.254" layer="21"/>
+<wire x1="1.17" y1="-7.62" x2="-1.17" y2="-7.62" width="0.254" layer="21"/>
+<wire x1="-1.17" y1="-7.62" x2="-1.17" y2="7.62" width="0.254" layer="21"/>
+<pad name="1" x="0" y="6.35" drill="1.143" shape="square"/>
+<pad name="2" x="0" y="3.81" drill="1.143"/>
+<pad name="3" x="0" y="1.27" drill="1.143"/>
+<pad name="4" x="0" y="-1.27" drill="1.143"/>
+<pad name="5" x="0" y="-3.81" drill="1.143"/>
+<pad name="6" x="0" y="-6.35" drill="1.143"/>
+<text x="1.905" y="6.985" size="1.27" layer="21" ratio="22" rot="R270">&gt;NAME</text>
+</package>
+<package name="--MERGED_RLC_0603">
+<wire x1="-1.4732" y1="0.6858" x2="1.4732" y2="0.6858" width="0.15" layer="21"/>
+<wire x1="1.4732" y1="0.6858" x2="1.4732" y2="-0.6858" width="0.15" layer="21"/>
+<wire x1="1.4732" y1="-0.6858" x2="-1.4732" y2="-0.6858" width="0.15" layer="21"/>
+<wire x1="-1.4732" y1="-0.6858" x2="-1.4732" y2="0.6858" width="0.15" layer="21"/>
+<smd name="1" x="-0.85" y="0" dx="1" dy="1.1" layer="1"/>
+<smd name="2" x="0.85" y="0" dx="1" dy="1.1" layer="1"/>
+<text x="-1.1938" y="-0.4064" size="0.762" layer="51">&gt;NAME</text>
+</package>
+<package name="--MERGED_RLC_0805">
+<wire x1="-1.651" y1="0.9144" x2="1.651" y2="0.9144" width="0.254" layer="21"/>
+<wire x1="1.651" y1="0.9144" x2="1.651" y2="-0.9144" width="0.254" layer="21"/>
+<wire x1="1.651" y1="-0.9144" x2="-1.651" y2="-0.9144" width="0.254" layer="21"/>
+<wire x1="-1.651" y1="-0.9144" x2="-1.651" y2="0.9144" width="0.254" layer="21"/>
+<smd name="1" x="-0.85" y="0" dx="1.3" dy="1.5" layer="1"/>
+<smd name="2" x="0.85" y="0" dx="1.3" dy="1.5" layer="1"/>
+<text x="-1.4732" y="-0.635" size="1.27" layer="51">&gt;NAME</text>
+</package>
+<package name="--MERGED_RLC_1210">
+<wire x1="-2.4638" y1="1.6764" x2="2.4638" y2="1.6764" width="0.3048" layer="21"/>
+<wire x1="2.4638" y1="1.6764" x2="2.4638" y2="-1.651" width="0.3048" layer="21"/>
+<wire x1="2.4638" y1="-1.651" x2="-2.4638" y2="-1.651" width="0.3048" layer="21"/>
+<wire x1="-2.4638" y1="-1.651" x2="-2.4638" y2="1.6764" width="0.3048" layer="21"/>
+<smd name="1" x="-1.5" y="0" dx="1.5" dy="2.9" layer="1"/>
+<smd name="2" x="1.5" y="0" dx="1.5" dy="2.9" layer="1"/>
+<text x="-2.2096" y="-0.736" size="1.524" layer="51">&gt;NAME</text>
+</package>
+</packages>
+<symbols>
+<symbol name="--MERGED_RELAY-COIL">
+<wire x1="0" y1="0" x2="1.27" y2="0" width="0.1524" layer="94"/>
+<wire x1="1.27" y1="0" x2="2.54" y2="-1.27" width="0.1524" layer="94" curve="-90"/>
+<wire x1="2.54" y1="-1.27" x2="1.27" y2="-2.54" width="0.1524" layer="94" curve="-90"/>
+<wire x1="1.27" y1="-2.54" x2="2.54" y2="-3.81" width="0.1524" layer="94" curve="-90"/>
+<wire x1="2.54" y1="-3.81" x2="1.27" y2="-5.08" width="0.1524" layer="94" curve="-90"/>
+<wire x1="1.27" y1="-7.62" x2="2.54" y2="-6.35" width="0.1524" layer="94" curve="90"/>
+<wire x1="2.54" y1="-6.35" x2="1.27" y2="-5.08" width="0.1524" layer="94" curve="90"/>
+<wire x1="1.27" y1="-7.62" x2="0" y2="-7.62" width="0.1524" layer="94"/>
+<pin name="P$1" x="-2.54" y="0" visible="pad" length="short" direction="pas"/>
+<pin name="P$2" x="-2.54" y="-7.62" visible="pad" length="short" direction="pas"/>
+<text x="3.048" y="0" size="1.6764" layer="95" rot="R270">&gt;NAME</text>
+</symbol>
+<symbol name="--MERGED_RELAY-NO-NC">
+<wire x1="0" y1="0" x2="-0.635" y2="-1.27" width="0.1524" layer="94"/>
+<wire x1="0" y1="0" x2="0.635" y2="-1.27" width="0.1524" layer="94"/>
+<wire x1="10.16" y1="0" x2="9.525" y2="-1.27" width="0.1524" layer="94"/>
+<wire x1="10.16" y1="0" x2="10.795" y2="-1.27" width="0.1524" layer="94"/>
+<wire x1="5.08" y1="0.635" x2="5.08" y2="0" width="0.1524" layer="94"/>
+<wire x1="-1.778" y1="-0.254" x2="11.684" y2="1.524" width="0.254" layer="94"/>
+<pin name="COM" x="5.08" y="-5.08" visible="pad" length="middle" direction="pas" rot="R90"/>
+<pin name="NC" x="0" y="-5.08" visible="pad" length="middle" direction="pas" rot="R90"/>
+<pin name="NO" x="10.16" y="-5.08" visible="pad" length="middle" direction="pas" rot="R90"/>
+<text x="-0.508" y="1.27" size="1.6764" layer="95">&gt;NAME</text>
+</symbol>
+<symbol name="--MERGED_DIODE">
+<wire x1="-1.27" y1="-1.27" x2="1.27" y2="0" width="0.254" layer="94"/>
+<wire x1="1.27" y1="0" x2="-1.27" y2="1.27" width="0.254" layer="94"/>
+<wire x1="1.27" y1="1.27" x2="1.27" y2="0" width="0.254" layer="94"/>
+<wire x1="-1.27" y1="1.27" x2="-1.27" y2="-1.27" width="0.254" layer="94"/>
+<wire x1="1.27" y1="0" x2="1.27" y2="-1.27" width="0.254" layer="94"/>
+<pin name="A" x="-2.54" y="0" visible="off" length="short" direction="pas"/>
+<pin name="C" x="2.54" y="0" visible="off" length="short" direction="pas" rot="R180"/>
+<text x="2.54" y="0.4826" size="1.778" layer="95">&gt;NAME</text>
+</symbol>
+<symbol name="--MERGED_NPN-THIN-SYMBOL">
+<wire x1="0" y1="1.905" x2="0" y2="0.635" width="0.3048" layer="94"/>
+<wire x1="0" y1="0.635" x2="0" y2="-0.635" width="0.3048" layer="94"/>
+<wire x1="0" y1="-0.635" x2="0" y2="-1.905" width="0.3048" layer="94"/>
+<wire x1="0" y1="0.635" x2="2.54" y2="2.54" width="0.1524" layer="94"/>
+<wire x1="2.54" y1="-2.54" x2="0" y2="-0.635" width="0.1524" layer="94"/>
+<wire x1="2.54" y1="-2.54" x2="2.54" y2="-5.08" width="0.1524" layer="94"/>
+<wire x1="2.54" y1="2.54" x2="2.54" y2="5.08" width="0.1524" layer="94"/>
+<wire x1="2.54" y1="-2.54" x2="1.905" y2="-1.27" width="0.1524" layer="94"/>
+<wire x1="1.905" y1="-1.27" x2="1.27" y2="-1.905" width="0.1524" layer="94"/>
+<wire x1="1.27" y1="-1.905" x2="2.54" y2="-2.54" width="0.1524" layer="94"/>
+<pin name="B" x="-2.54" y="0" visible="pad" length="short"/>
+<pin name="C" x="2.54" y="5.08" visible="pad" length="point" rot="R180"/>
+<pin name="E" x="2.54" y="-5.08" visible="pad" length="point" rot="R180"/>
+<text x="-2.8525" y="3.2215" size="1.4224" layer="95">&gt;NAME</text>
+</symbol>
+<symbol name="--MERGED_PQ1X331M2ZP-3V3-REG">
+<wire x1="0" y1="2.54" x2="0" y2="-7.62" width="0.254" layer="94"/>
+<wire x1="0" y1="-7.62" x2="17.78" y2="-7.62" width="0.254" layer="94"/>
+<wire x1="17.78" y1="-7.62" x2="17.78" y2="2.54" width="0.254" layer="94"/>
+<wire x1="17.78" y1="2.54" x2="0" y2="2.54" width="0.254" layer="94"/>
+<pin name="GND" x="-5.08" y="-2.54" length="middle"/>
+<pin name="NR" x="22.86" y="-5.08" length="middle" rot="R180"/>
+<pin name="VC" x="-5.08" y="-5.08" length="middle"/>
+<pin name="VIN" x="-5.08" y="0" length="middle"/>
+<pin name="VO" x="22.86" y="0" length="middle" rot="R180"/>
+<text x="17.6045" y="-8.0371" size="1.778" layer="95" font="vector" rot="R180">&gt;NAME</text>
+<text x="0.2195" y="3.0304" size="1.778" layer="95" font="vector">PQ1X331M2ZP 3v3 LDO</text>
+</symbol>
+<symbol name="--MERGED_HEADER-MALE-6X1">
+<wire x1="-3.81" y1="12.7" x2="1.27" y2="12.7" width="0.4064" layer="94"/>
+<wire x1="-1.27" y1="5.08" x2="-2.54" y2="5.08" width="0.6096" layer="94"/>
+<wire x1="-1.27" y1="7.62" x2="-2.54" y2="7.62" width="0.6096" layer="94"/>
+<wire x1="-1.27" y1="10.16" x2="-2.54" y2="10.16" width="0.6096" layer="94"/>
+<wire x1="-1.27" y1="0" x2="-2.54" y2="0" width="0.6096" layer="94"/>
+<wire x1="-1.27" y1="2.54" x2="-2.54" y2="2.54" width="0.6096" layer="94"/>
+<wire x1="-1.27" y1="-2.54" x2="-2.54" y2="-2.54" width="0.6096" layer="94"/>
+<wire x1="1.27" y1="-5.08" x2="1.27" y2="12.7" width="0.4064" layer="94"/>
+<wire x1="-3.81" y1="12.7" x2="-3.81" y2="-5.08" width="0.4064" layer="94"/>
+<wire x1="1.27" y1="-5.08" x2="-3.81" y2="-5.08" width="0.4064" layer="94"/>
+<pin name="1" x="-7.62" y="10.16" visible="pad" length="middle" direction="pas" swaplevel="1"/>
+<pin name="2" x="-7.62" y="7.62" visible="pad" length="middle" direction="pas" swaplevel="1"/>
+<pin name="3" x="-7.62" y="5.08" visible="pad" length="middle" direction="pas" swaplevel="1"/>
+<pin name="4" x="-7.62" y="2.54" visible="pad" length="middle" direction="pas" swaplevel="1"/>
+<pin name="5" x="-7.62" y="0" visible="pad" length="middle" direction="pas" swaplevel="1"/>
+<pin name="6" x="-7.62" y="-2.54" visible="pad" length="middle" direction="pas" swaplevel="1"/>
+<text x="1.27" y="-5.842" size="1.778" layer="95" rot="R180">&gt;NAME</text>
+</symbol>
+<symbol name="--MERGED_RESET-GENERATOR-3TERM">
+<wire x1="-2.54" y1="0" x2="-12.7" y2="0" width="0.254" layer="94"/>
+<wire x1="-12.7" y1="0" x2="-12.7" y2="-15.24" width="0.254" layer="94"/>
+<wire x1="-12.7" y1="-15.24" x2="-2.54" y2="-15.24" width="0.254" layer="94"/>
+<wire x1="-2.54" y1="-15.24" x2="-2.54" y2="0" width="0.254" layer="94"/>
+<pin name="OUT" x="2.54" y="-7.62" length="middle" rot="R180"/>
+<pin name="V+" x="-10.16" y="5.08" length="middle" rot="R270"/>
+<pin name="V-" x="-10.16" y="-20.32" length="middle" rot="R90"/>
+<text x="-8.6526" y="0.6687" size="1.778" layer="95">&gt;NAME</text>
+<text x="-13.4709" y="-14.4837" size="1.778" layer="95" rot="R90">&gt;VALUE</text>
+</symbol>
+<symbol name="--MERGED_DUAL-TVS-COMMON-ANODE">
+<circle x="0" y="1.27" radius="0.127" width="0.254" layer="94"/>
+<wire x1="-3.81" y1="5.08" x2="-2.54" y2="5.08" width="0.1524" layer="94"/>
+<wire x1="-2.54" y1="5.08" x2="-1.27" y2="5.08" width="0.1524" layer="94"/>
+<wire x1="-2.54" y1="5.08" x2="-3.81" y2="2.54" width="0.1524" layer="94"/>
+<wire x1="-3.81" y1="2.54" x2="-2.54" y2="2.54" width="0.1524" layer="94"/>
+<wire x1="-2.54" y1="2.54" x2="-1.27" y2="2.54" width="0.1524" layer="94"/>
+<wire x1="-1.27" y1="2.54" x2="-2.54" y2="5.08" width="0.1524" layer="94"/>
+<wire x1="1.27" y1="2.54" x2="2.54" y2="2.54" width="0.1524" layer="94"/>
+<wire x1="2.54" y1="2.54" x2="3.81" y2="2.54" width="0.1524" layer="94"/>
+<wire x1="3.81" y1="2.54" x2="2.54" y2="5.08" width="0.1524" layer="94"/>
+<wire x1="2.54" y1="5.08" x2="1.27" y2="2.54" width="0.1524" layer="94"/>
+<wire x1="1.27" y1="5.08" x2="2.54" y2="5.08" width="0.1524" layer="94"/>
+<wire x1="2.54" y1="5.08" x2="3.81" y2="5.08" width="0.1524" layer="94"/>
+<wire x1="0" y1="0" x2="0" y2="1.27" width="0.1524" layer="94"/>
+<wire x1="0" y1="1.27" x2="2.54" y2="1.27" width="0.1524" layer="94"/>
+<wire x1="2.54" y1="1.27" x2="2.54" y2="2.54" width="0.1524" layer="94"/>
+<wire x1="0" y1="1.27" x2="-2.54" y2="1.27" width="0.1524" layer="94"/>
+<wire x1="-2.54" y1="1.27" x2="-2.54" y2="2.54" width="0.1524" layer="94"/>
+<wire x1="-1.27" y1="5.08" x2="-0.635" y2="5.715" width="0.1524" layer="94"/>
+<wire x1="-3.81" y1="5.08" x2="-4.445" y2="4.445" width="0.1524" layer="94"/>
+<wire x1="1.27" y1="5.08" x2="0.635" y2="4.445" width="0.1524" layer="94"/>
+<wire x1="4.445" y1="5.715" x2="3.81" y2="5.08" width="0.1524" layer="94"/>
+<pin name="A" x="0" y="0" visible="pad" length="point" rot="R90"/>
+<pin name="K1" x="-2.54" y="7.62" visible="pad" length="short" rot="R270"/>
+<pin name="K2" x="2.54" y="7.62" visible="pad" length="short" rot="R270"/>
+<text x="4.8316" y="7.183" size="1.778" layer="95">&gt;NAME</text>
+</symbol>
+<symbol name="--MERGED_CAPACITOR">
+<rectangle x1="-2.032" y1="1.524" x2="2.032" y2="2.032" layer="94"/>
+<rectangle x1="-2.032" y1="0.508" x2="2.032" y2="1.016" layer="94"/>
+<wire x1="0" y1="0" x2="0" y2="0.508" width="0.1524" layer="94"/>
+<wire x1="0" y1="2.54" x2="0" y2="2.032" width="0.1524" layer="94"/>
+<pin name="1" x="0" y="5.08" visible="off" length="short" direction="pas" swaplevel="1" rot="R270"/>
+<pin name="2" x="0" y="-2.54" visible="off" length="short" direction="pas" swaplevel="1" rot="R90"/>
+<text x="1.524" y="2.921" size="1.778" layer="95">&gt;NAME</text>
+<text x="1.27" y="-1.905" size="1.778" layer="96">&gt;VALUE</text>
+</symbol>
+</symbols>
+<devicesets>
+<deviceset name="--MERGED_RELAY-DPDT" prefix="RLY">
+<gates>
+<gate name="A" symbol="--MERGED_RELAY-NO-NC" x="-7.62" y="2.54"/>
+<gate name="B" symbol="--MERGED_RELAY-NO-NC" x="10.16" y="2.54"/>
+<gate name="L" symbol="--MERGED_RELAY-COIL" x="-2.54" y="17.78"/>
+</gates>
+<devices>
+<device name="" package="--MERGED_TQ-SMD-RELAY">
+<connects>
+<connect gate="A" pin="COM" pad="8"/>
+<connect gate="A" pin="NC" pad="9"/>
+<connect gate="A" pin="NO" pad="7"/>
+<connect gate="B" pin="COM" pad="3"/>
+<connect gate="B" pin="NC" pad="2"/>
+<connect gate="B" pin="NO" pad="4"/>
+<connect gate="L" pin="P$1" pad="1"/>
+<connect gate="L" pin="P$2" pad="10"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+</devices>
+</deviceset>
+<deviceset name="--MERGED_DIODE-SMD-SOT23" prefix="D">
+<gates>
+<gate name="G$1" symbol="--MERGED_DIODE" x="2.54" y="0"/>
+</gates>
+<devices>
+<device name="" package="--MERGED_SOT23-3LEAD">
+<connects>
+<connect gate="G$1" pin="A" pad="1"/>
+<connect gate="G$1" pin="C" pad="3"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+</devices>
+</deviceset>
+<deviceset name="--MERGED_NPN-SOT23-2N3904" prefix="Q">
+<gates>
+<gate name="G$1" symbol="--MERGED_NPN-THIN-SYMBOL" x="0" y="0"/>
+</gates>
+<devices>
+<device name="" package="--MERGED_SOT23-3LEAD">
+<connects>
+<connect gate="G$1" pin="B" pad="1"/>
+<connect gate="G$1" pin="C" pad="3"/>
+<connect gate="G$1" pin="E" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+</devices>
+</deviceset>
+<deviceset name="--MERGED_PQ1X331M2ZP-3V3-LDO-SOT-23-5" prefix="IC">
+<gates>
+<gate name="G$1" symbol="--MERGED_PQ1X331M2ZP-3V3-REG" x="-17.78" y="-2.54"/>
+</gates>
+<devices>
+<device name="" package="--MERGED_SOT-23-5">
+<connects>
+<connect gate="G$1" pin="GND" pad="2"/>
+<connect gate="G$1" pin="NR" pad="4"/>
+<connect gate="G$1" pin="VC" pad="3"/>
+<connect gate="G$1" pin="VIN" pad="1"/>
+<connect gate="G$1" pin="VO" pad="5"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+</devices>
+</deviceset>
+<deviceset name="--MERGED_HEADER-MALE-6X1" prefix="SV">
+<gates>
+<gate name="G$1" symbol="--MERGED_HEADER-MALE-6X1" x="0" y="-10.16"/>
+</gates>
+<devices>
+<device name="" package="--MERGED_HEADER-MALE-6X1-0.100-UNKEYED">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+<connect gate="G$1" pin="3" pad="3"/>
+<connect gate="G$1" pin="4" pad="4"/>
+<connect gate="G$1" pin="5" pad="5"/>
+<connect gate="G$1" pin="6" pad="6"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+</devices>
+</deviceset>
+<deviceset name="--MERGED_MCP100" prefix="IC">
+<gates>
+<gate name="G$1" symbol="--MERGED_RESET-GENERATOR-3TERM" x="2.54" y="7.62"/>
+</gates>
+<devices>
+<device name="" package="--MERGED_SOT23-3LEAD">
+<connects>
+<connect gate="G$1" pin="OUT" pad="1"/>
+<connect gate="G$1" pin="V+" pad="2"/>
+<connect gate="G$1" pin="V-" pad="3"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+</devices>
+</deviceset>
+<deviceset name="--MERGED_DUAL-TVS-COMMON-ANODE" prefix="D">
+<gates>
+<gate name="G$1" symbol="--MERGED_DUAL-TVS-COMMON-ANODE" x="0" y="0"/>
+</gates>
+<devices>
+<device name="" package="--MERGED_SOT23-3LEAD">
+<connects>
+<connect gate="G$1" pin="A" pad="3"/>
+<connect gate="G$1" pin="K1" pad="1"/>
+<connect gate="G$1" pin="K2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+</devices>
+</deviceset>
+<deviceset name="--MERGED_CAPACITOR" prefix="C" uservalue="yes">
+<gates>
+<gate name="G$1" symbol="--MERGED_CAPACITOR" x="2.54" y="0"/>
+</gates>
+<devices>
+<device name="0603" package="--MERGED_RLC_0603">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="0805" package="--MERGED_RLC_0805">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="1210" package="--MERGED_RLC_1210">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+</devices>
+</deviceset>
+</devicesets>
+</library>
+</libraries>
+<attributes>
+</attributes>
+<variantdefs>
+</variantdefs>
+<classes>
+<class number="0" name="default" width="0" drill="0">
+</class>
+</classes>
+<parts>
+<part name="FRAME1" library="frames" deviceset="A4L-LOC" device=""/>
+<part name="IC3" library="proxmark3" deviceset="--MERGED_PQ1X331M2ZP-3V3-LDO-SOT-23-5" device=""/>
+<part name="SV1" library="  merged" deviceset="USB-MINIB" device=""/>
+<part name="V1" library="supply2" deviceset="GND" device=""/>
+<part name="C1" library="  merged" deviceset="CAPACITOR" device="0603" value="33n"/>
+<part name="V2" library="supply2" deviceset="GND" device=""/>
+<part name="V6" library="supply2" deviceset="GND" device=""/>
+<part name="U$3" library="supply1" deviceset="+3V3" device=""/>
+<part name="VDD1" library="supply1" deviceset="VDD" device=""/>
+<part name="U1" library="  merged" deviceset="FERRITE" device="0805"/>
+<part name="C21" library="  merged" deviceset="CAPACITOR" device="0603" value="33n"/>
+<part name="C22" library="  merged" deviceset="CAPACITOR" device="0603" value="33n"/>
+<part name="C23" library="  merged" deviceset="CAPACITOR" device="0603" value="33n"/>
+<part name="C24" library="  merged" deviceset="CAPACITOR" device="0603" value="33n"/>
+<part name="VDD7" library="supply1" deviceset="VDD" device=""/>
+<part name="V29" library="supply2" deviceset="GND" device=""/>
+<part name="C25" library="  merged" deviceset="CAPACITOR" device="0603" value="33n"/>
+<part name="C26" library="  merged" deviceset="CAPACITOR" device="0603" value="33n"/>
+<part name="U$8" library="supply1" deviceset="+3V3" device=""/>
+<part name="V30" library="supply2" deviceset="GND" device=""/>
+<part name="V31" library="  merged" deviceset="SUPPLY_2V5" device=""/>
+<part name="C29" library="  merged" deviceset="CAPACITOR" device="0603" value="33n"/>
+<part name="C30" library="  merged" deviceset="CAPACITOR" device="0603" value="33n"/>
+<part name="C31" library="  merged" deviceset="CAPACITOR" device="0603" value="33n"/>
+<part name="V32" library="supply2" deviceset="GND" device=""/>
+<part name="IC12" library="  merged" deviceset="LP2989-LDO" device="SOIC" value="LP2989AIM-2.5"/>
+<part name="V35" library="supply2" deviceset="GND" device=""/>
+<part name="R23" library="  merged" deviceset="RESISTOR" device="0603" value="1k"/>
+<part name="V36" library="supply2" deviceset="GND" device=""/>
+<part name="V37" library="  merged" deviceset="SUPPLY_2V5" device=""/>
+<part name="C33" library="  merged" deviceset="CAPACITOR" device="1210" value="4u7"/>
+<part name="IC13" library="proxmark3" deviceset="--MERGED_PQ1X331M2ZP-3V3-LDO-SOT-23-5" device=""/>
+<part name="C27" library="  merged" deviceset="CAPACITOR" device="1210" value="4u7"/>
+<part name="C28" library="  merged" deviceset="CAPACITOR" device="0603" value="33n"/>
+<part name="C32" library="  merged" deviceset="CAPACITOR" device="0603" value="33n"/>
+<part name="V38" library="supply2" deviceset="GND" device=""/>
+<part name="C34" library="  merged" deviceset="CAPACITOR" device="1210" value="4u7"/>
+<part name="V39" library="supply2" deviceset="GND" device=""/>
+<part name="C37" library="  merged" deviceset="CAPACITOR-POLARIZED" device="ALCHIP-MZA-F80" value="100u"/>
+<part name="C38" library="  merged" deviceset="CAPACITOR-POLARIZED" device="ALCHIP-MZA-F80" value="100u"/>
+<part name="TP6" library="  merged" deviceset="TESTPAD" device="KEYSTONE-PTH"/>
+<part name="V51" library="supply2" deviceset="GND" device=""/>
+<part name="C44" library="  merged" deviceset="CAPACITOR" device="0603" value="33n"/>
+<part name="D8" library="proxmark3" deviceset="--MERGED_DUAL-TVS-COMMON-ANODE" device=""/>
+<part name="V54" library="supply2" deviceset="GND" device=""/>
+<part name="C46" library="  merged" deviceset="CAPACITOR" device="0603" value="33n"/>
+<part name="C47" library="  merged" deviceset="CAPACITOR" device="0603" value="33n"/>
+<part name="Q2" library="  merged" deviceset="IRF7307" device=""/>
+<part name="V25" library="supply2" deviceset="GND" device=""/>
+<part name="R56" library="  merged" deviceset="RESISTOR" device="0603" value="10k"/>
+<part name="R57" library="  merged" deviceset="RESISTOR" device="0603" value="10k"/>
+<part name="R58" library="  merged" deviceset="RESISTOR" device="0603" value="dnp"/>
+<part name="FRAME2" library="frames" deviceset="A4L-LOC" device=""/>
+<part name="IC1" library="  merged" deviceset="SPARTAN-II-XC2S30-100-VQFP" device=""/>
+<part name="V3" library="supply2" deviceset="GND" device=""/>
+<part name="V4" library="  merged" deviceset="SUPPLY_2V5" device=""/>
+<part name="XT1" library="  merged" deviceset="XTAL-SMD-CITIZEN-CS10" device=""/>
+<part name="IC4" library="  merged" deviceset="HCU-INVERTER" device=""/>
+<part name="R1" library="  merged" deviceset="RESISTOR" device="0603" value="1meg"/>
+<part name="C2" library="  merged" deviceset="CAPACITOR" device="0603" value="22p"/>
+<part name="C3" library="  merged" deviceset="CAPACITOR" device="0603" value="22p"/>
+<part name="R2" library="  merged" deviceset="RESISTOR" device="0603" value="100"/>
+<part name="V7" library="supply2" deviceset="GND" device=""/>
+<part name="IC8" library="  merged" deviceset="TLC5540" device=""/>
+<part name="VDD4" library="supply1" deviceset="VDD" device=""/>
+<part name="V24" library="supply2" deviceset="GND" device=""/>
+<part name="C18" library="  merged" deviceset="CAPACITOR" device="0603" value="33n"/>
+<part name="C19" library="  merged" deviceset="CAPACITOR" device="0603" value="33n"/>
+<part name="SV5" library="proxmark3" deviceset="--MERGED_HEADER-MALE-6X1" device=""/>
+<part name="V28" library="supply2" deviceset="GND" device=""/>
+<part name="U$5" library="supply1" deviceset="+3V3" device=""/>
+<part name="R39" library="  merged" deviceset="RESISTOR" device="0603" value="1k"/>
+<part name="R44" library="  merged" deviceset="RESISTOR" device="0603" value="1k"/>
+<part name="R47" library="  merged" deviceset="RESISTOR" device="0603" value="10k"/>
+<part name="VDD10" library="supply1" deviceset="VDD" device=""/>
+<part name="TP7" library="  merged" deviceset="TESTPAD" device="KEYSTONE-SMD"/>
+<part name="R52" library="  merged" deviceset="RESISTOR" device="0603" value="100"/>
+<part name="VDD11" library="supply1" deviceset="VDD" device=""/>
+<part name="R53" library="  merged" deviceset="RESISTOR" device="0603" value="330"/>
+<part name="R54" library="  merged" deviceset="RESISTOR" device="0603" value="100"/>
+<part name="V55" library="supply2" deviceset="GND" device=""/>
+<part name="R59" library="  merged" deviceset="RESISTOR" device="0603" value="3k3"/>
+<part name="FRAME3" library="frames" deviceset="A4L-LOC" device=""/>
+<part name="IC2" library="  merged" deviceset="AT91SAM7S64" device=""/>
+<part name="V5" library="supply2" deviceset="GND" device=""/>
+<part name="U$2" library="supply1" deviceset="+3V3" device=""/>
+<part name="R3" library="  merged" deviceset="RESISTOR" device="0603" value="330"/>
+<part name="C4" library="  merged" deviceset="CAPACITOR" device="0603" value="33n"/>
+<part name="C5" library="  merged" deviceset="CAPACITOR" device="0603" value="2n"/>
+<part name="V8" library="supply2" deviceset="GND" device=""/>
+<part name="XT2" library="  merged" deviceset="XTAL-SMD-CITIZEN-CS10" device=""/>
+<part name="C6" library="proxmark3" deviceset="--MERGED_CAPACITOR" device="0603" value="22p"/>
+<part name="C7" library="proxmark3" deviceset="--MERGED_CAPACITOR" device="0603" value="22p"/>
+<part name="V9" library="supply2" deviceset="GND" device=""/>
+<part name="R4" library="  merged" deviceset="RESISTOR" device="0603" value="27"/>
+<part name="R5" library="  merged" deviceset="RESISTOR" device="0603" value="27"/>
+<part name="R6" library="  merged" deviceset="RESISTOR" device="0603" value="1k5"/>
+<part name="C8" library="  merged" deviceset="CAPACITOR" device="0603" value="1n"/>
+<part name="C9" library="  merged" deviceset="CAPACITOR" device="1210" value="2u2"/>
+<part name="V10" library="supply2" deviceset="GND" device=""/>
+<part name="SV3" library="  merged" deviceset="HEADER-MALE-10X2" device=""/>
+<part name="V11" library="supply2" deviceset="GND" device=""/>
+<part name="U$6" library="supply1" deviceset="+3V3" device=""/>
+<part name="R7" library="  merged" deviceset="RESISTOR" device="0603" value="10k"/>
+<part name="V12" library="supply2" deviceset="GND" device=""/>
+<part name="R8" library="  merged" deviceset="RESISTOR" device="0603" value="10k"/>
+<part name="U$7" library="supply1" deviceset="+3V3" device=""/>
+<part name="D4" library="  merged" deviceset="LED" device=""/>
+<part name="D5" library="  merged" deviceset="LED" device=""/>
+<part name="D6" library="  merged" deviceset="LED" device=""/>
+<part name="R24" library="  merged" deviceset="RESISTOR" device="0603" value="330"/>
+<part name="R25" library="  merged" deviceset="RESISTOR" device="0603" value="330"/>
+<part name="R26" library="  merged" deviceset="RESISTOR" device="0603" value="330"/>
+<part name="V40" library="supply2" deviceset="GND" device=""/>
+<part name="R43" library="  merged" deviceset="RESISTOR" device="0603" value="1k"/>
+<part name="U$9" library="supply1" deviceset="+3V3" device=""/>
+<part name="SW1" library="  merged" deviceset="TACTSWITCH" device=""/>
+<part name="V50" library="supply2" deviceset="GND" device=""/>
+<part name="D9" library="  merged" deviceset="LED" device=""/>
+<part name="R55" library="  merged" deviceset="RESISTOR" device="0603" value="330"/>
+<part name="TP8" library="  merged" deviceset="TESTPAD" device="KEYSTONE-SMD"/>
+<part name="IC7" library="proxmark3" deviceset="--MERGED_MCP100" device=""/>
+<part name="FRAME4" library="frames" deviceset="A4L-LOC" device=""/>
+<part name="IC6" library="  merged" deviceset="OPAMP-TLC2274" device="" value="MCP6294"/>
+<part name="R9" library="  merged" deviceset="RESISTOR" device="0603" value="100k"/>
+<part name="R10" library="  merged" deviceset="RESISTOR" device="0603" value="100k"/>
+<part name="V13" library="  merged" deviceset="SUPPLY_VMID" device=""/>
+<part name="V14" library="supply2" deviceset="GND" device=""/>
+<part name="C10" library="  merged" deviceset="CAPACITOR" device="0603" value="100n"/>
+<part name="V15" library="supply2" deviceset="GND" device=""/>
+<part name="D1" library="proxmark3" deviceset="--MERGED_DIODE-SMD-SOT23" device=""/>
+<part name="R11" library="  merged" deviceset="RESISTOR" device="0603" value="510k"/>
+<part name="C11" library="  merged" deviceset="CAPACITOR" device="0603" value="1n"/>
+<part name="C12" library="  merged" deviceset="CAPACITOR" device="0603" value="1n"/>
+<part name="R12" library="  merged" deviceset="RESISTOR" device="0603" value="100k"/>
+<part name="V16" library="  merged" deviceset="SUPPLY_VMID" device=""/>
+<part name="R13" library="  merged" deviceset="RESISTOR" device="0603" value="10k"/>
+<part name="V17" library="  merged" deviceset="SUPPLY_VMID" device=""/>
+<part name="R14" library="  merged" deviceset="RESISTOR" device="0603" value="10k"/>
+<part name="C13" library="  merged" deviceset="CAPACITOR" device="0603" value="dnp"/>
+<part name="V18" library="supply2" deviceset="GND" device=""/>
+<part name="D2" library="proxmark3" deviceset="--MERGED_DIODE-SMD-SOT23" device=""/>
+<part name="C14" library="  merged" deviceset="CAPACITOR" device="0603" value="22p"/>
+<part name="D3" library="proxmark3" deviceset="--MERGED_DIODE-SMD-SOT23" device=""/>
+<part name="V19" library="supply2" deviceset="GND" device=""/>
+<part name="C15" library="  merged" deviceset="CAPACITOR" device="0603" value="130p"/>
+<part name="R15" library="  merged" deviceset="RESISTOR" device="0603" value="10k"/>
+<part name="R16" library="  merged" deviceset="RESISTOR" device="0603" value="zerohm"/>
+<part name="C16" library="  merged" deviceset="CAPACITOR" device="0603" value="1n"/>
+<part name="R17" library="  merged" deviceset="RESISTOR" device="0603" value="10k"/>
+<part name="V20" library="  merged" deviceset="SUPPLY_VMID" device=""/>
+<part name="R18" library="  merged" deviceset="RESISTOR" device="0603" value="10k"/>
+<part name="C17" library="  merged" deviceset="CAPACITOR" device="0603" value="dnp"/>
+<part name="R19" library="  merged" deviceset="RESISTOR" device="0603" value="10k"/>
+<part name="V21" library="  merged" deviceset="SUPPLY_VMID" device=""/>
+<part name="V22" library="supply2" deviceset="GND" device=""/>
+<part name="R20" library="  merged" deviceset="RESISTOR" device="0603" value="240k"/>
+<part name="V23" library="supply2" deviceset="GND" device=""/>
+<part name="VDD2" library="supply1" deviceset="VDD" device=""/>
+<part name="VDD3" library="supply1" deviceset="VDD" device=""/>
+<part name="IC11" library="  merged" deviceset="CD4066" device=""/>
+<part name="V33" library="supply2" deviceset="GND" device=""/>
+<part name="VDD8" library="supply1" deviceset="VDD" device=""/>
+<part name="IC5" library="  merged" deviceset="COMP-TLV3502" device="SOT-23-8-OR-MSOP-8" value="TLV3502"/>
+<part name="V34" library="supply2" deviceset="GND" device=""/>
+<part name="R21" library="  merged" deviceset="RESISTOR" device="0603" value="24k"/>
+<part name="R30" library="  merged" deviceset="RESISTOR" device="0603" value="10meg"/>
+<part name="R31" library="  merged" deviceset="RESISTOR" device="0603" value="240k"/>
+<part name="V42" library="supply2" deviceset="GND" device=""/>
+<part name="V43" library="supply2" deviceset="GND" device=""/>
+<part name="IC14" library="  merged" deviceset="OPAMP-AD8052" device="" value="AD8052"/>
+<part name="R33" library="  merged" deviceset="RESISTOR" device="0603" value="2k4"/>
+<part name="C40" library="  merged" deviceset="CAPACITOR" device="0603" value="dnp"/>
+<part name="R34" library="  merged" deviceset="RESISTOR" device="0603" value="10k"/>
+<part name="C41" library="  merged" deviceset="CAPACITOR" device="0603" value="dnp"/>
+<part name="V45" library="  merged" deviceset="SUPPLY_VMID" device=""/>
+<part name="C42" library="  merged" deviceset="CAPACITOR" device="0603" value="1n"/>
+<part name="C43" library="  merged" deviceset="CAPACITOR" device="0603" value="1n"/>
+<part name="R32" library="  merged" deviceset="RESISTOR" device="0603" value="zerohm"/>
+<part name="R35" library="  merged" deviceset="RESISTOR" device="0603" value="zerohm"/>
+<part name="R36" library="  merged" deviceset="RESISTOR" device="0603" value="dnp"/>
+<part name="R37" library="  merged" deviceset="RESISTOR" device="0603" value="dnp"/>
+<part name="R38" library="  merged" deviceset="RESISTOR" device="0603" value="dnp"/>
+<part name="V46" library="  merged" deviceset="SUPPLY_VMID" device=""/>
+<part name="RLY1" library="proxmark3" deviceset="--MERGED_RELAY-DPDT" device=""/>
+<part name="Q1" library="proxmark3" deviceset="--MERGED_NPN-SOT23-2N3904" device=""/>
+<part name="D7" library="proxmark3" deviceset="--MERGED_DIODE-SMD-SOT23" device=""/>
+<part name="VDD9" library="supply1" deviceset="VDD" device=""/>
+<part name="V48" library="supply2" deviceset="GND" device=""/>
+<part name="R40" library="  merged" deviceset="RESISTOR" device="0603" value="10k"/>
+<part name="R41" library="  merged" deviceset="RESISTOR" device="0603" value="10meg"/>
+<part name="R42" library="  merged" deviceset="RESISTOR" device="0603" value="1meg"/>
+<part name="V49" library="supply2" deviceset="GND" device=""/>
+<part name="TP1" library="  merged" deviceset="TESTPAD" device="KEYSTONE-SMD"/>
+<part name="R48" library="  merged" deviceset="RESISTOR" device="0603" value="dnp"/>
+<part name="R49" library="  merged" deviceset="RESISTOR" device="0603" value="2k4"/>
+<part name="R50" library="  merged" deviceset="RESISTOR" device="0603" value="10k"/>
+<part name="V52" library="  merged" deviceset="SUPPLY_VMID" device=""/>
+<part name="V44" library="  merged" deviceset="SUPPLY_VMID" device=""/>
+<part name="R51" library="  merged" deviceset="RESISTOR" device="0603" value="2k4"/>
+<part name="V53" library="  merged" deviceset="SUPPLY_VMID" device=""/>
+<part name="C45" library="  merged" deviceset="CAPACITOR" device="0603" value="100n"/>
+<part name="D10" library="proxmark3" deviceset="--MERGED_DIODE-SMD-SOT23" device=""/>
+<part name="D11" library="proxmark3" deviceset="--MERGED_DIODE-SMD-SOT23" device=""/>
+<part name="V56" library="supply2" deviceset="GND" device=""/>
+<part name="FRAME5" library="frames" deviceset="A4L-LOC" device=""/>
+<part name="SV2" library="  merged" deviceset="HIROSE-MQ172-4POS" device=""/>
+<part name="IC9" library="  merged" deviceset="74XX244-OCTAL-TRISTATE-BUFFERS" device=""/>
+<part name="V26" library="supply2" deviceset="GND" device=""/>
+<part name="VDD5" library="supply1" deviceset="VDD" device=""/>
+<part name="IC10" library="  merged" deviceset="74XX244-OCTAL-TRISTATE-BUFFERS" device=""/>
+<part name="V27" library="supply2" deviceset="GND" device=""/>
+<part name="VDD6" library="supply1" deviceset="VDD" device=""/>
+<part name="R22" library="  merged" deviceset="RESISTOR" device="0603" value="33"/>
+<part name="R27" library="  merged" deviceset="RESISTOR" device="0603" value="33"/>
+<part name="R28" library="  merged" deviceset="RESISTOR" device="0603" value="33"/>
+<part name="R29" library="  merged" deviceset="RESISTOR" device="0603" value="33"/>
+<part name="C39" library="  merged" deviceset="CAPACITOR" device="0603" value="1n"/>
+<part name="V47" library="supply2" deviceset="GND" device=""/>
+<part name="C20" library="  merged" deviceset="CAPACITOR" device="0603" value="dnp"/>
+<part name="C35" library="  merged" deviceset="CAPACITOR" device="0603" value="47p"/>
+<part name="C36" library="  merged" deviceset="CAPACITOR" device="0603" value="dnp"/>
+<part name="V41" library="supply2" deviceset="GND" device=""/>
+<part name="R45" library="  merged" deviceset="RESISTOR" device="0603" value="10k"/>
+<part name="R46" library="  merged" deviceset="RESISTOR" device="0603" value="10k"/>
+<part name="TP2" library="  merged" deviceset="TESTPAD" device="KEYSTONE-SMD"/>
+<part name="TP3" library="  merged" deviceset="TESTPAD" device="KEYSTONE-SMD"/>
+<part name="TP4" library="  merged" deviceset="TESTPAD" device="KEYSTONE-SMD"/>
+<part name="TP5" library="  merged" deviceset="TESTPAD" device="KEYSTONE-SMD"/>
+</parts>
+<sheets>
+<sheet>
+<plain>
+<text x="165.1" y="17.78" size="2.54" layer="95">power and bypass</text>
+</plain>
+<instances>
+<instance part="FRAME1" gate="G$1" x="0" y="0"/>
+<instance part="IC3" gate="G$1" x="162.56" y="111.76"/>
+<instance part="SV1" gate="G$1" x="43.18" y="111.76"/>
+<instance part="V1" gate="GND" x="50.8" y="83.82"/>
+<instance part="C1" gate="G$1" x="81.28" y="104.14"/>
+<instance part="V2" gate="GND" x="81.28" y="96.52"/>
+<instance part="V6" gate="GND" x="154.94" y="73.66" rot="MR0"/>
+<instance part="U$3" gate="G$1" x="200.66" y="121.92" rot="MR0"/>
+<instance part="VDD1" gate="G$1" x="147.32" y="93.98" rot="MR0"/>
+<instance part="U1" gate="G$1" x="88.9" y="111.76"/>
+<instance part="C21" gate="G$1" x="30.48" y="144.78"/>
+<instance part="C22" gate="G$1" x="40.64" y="144.78"/>
+<instance part="C23" gate="G$1" x="50.8" y="144.78"/>
+<instance part="C24" gate="G$1" x="60.96" y="144.78"/>
+<instance part="VDD7" gate="G$1" x="30.48" y="157.48"/>
+<instance part="V29" gate="GND" x="101.6" y="134.62"/>
+<instance part="C25" gate="G$1" x="116.84" y="144.78"/>
+<instance part="C26" gate="G$1" x="127" y="144.78"/>
+<instance part="U$8" gate="G$1" x="116.84" y="157.48"/>
+<instance part="V30" gate="GND" x="137.16" y="134.62"/>
+<instance part="V31" gate="G$1" x="198.12" y="157.48"/>
+<instance part="C29" gate="G$1" x="198.12" y="144.78"/>
+<instance part="C30" gate="G$1" x="208.28" y="144.78"/>
+<instance part="C31" gate="G$1" x="218.44" y="144.78"/>
+<instance part="V32" gate="GND" x="228.6" y="134.62"/>
+<instance part="IC12" gate="G$1" x="182.88" y="63.5"/>
+<instance part="V35" gate="GND" x="152.4" y="45.72" rot="MR0"/>
+<instance part="R23" gate="G$1" x="137.16" y="50.8" rot="R90"/>
+<instance part="V36" gate="GND" x="137.16" y="40.64" rot="MR0"/>
+<instance part="V37" gate="G$1" x="195.58" y="68.58" rot="MR0"/>
+<instance part="C33" gate="G$1" x="228.6" y="144.78"/>
+<instance part="IC13" gate="G$1" x="162.56" y="83.82"/>
+<instance part="C27" gate="G$1" x="137.16" y="144.78"/>
+<instance part="C28" gate="G$1" x="152.4" y="144.78"/>
+<instance part="C32" gate="G$1" x="162.56" y="144.78"/>
+<instance part="V38" gate="GND" x="182.88" y="134.62"/>
+<instance part="C34" gate="G$1" x="182.88" y="144.78"/>
+<instance part="V39" gate="GND" x="154.94" y="101.6" rot="MR0"/>
+<instance part="C37" gate="G$1" x="91.44" y="147.32"/>
+<instance part="C38" gate="G$1" x="101.6" y="147.32"/>
+<instance part="TP6" gate="G$1" x="55.88" y="63.5"/>
+<instance part="V51" gate="GND" x="55.88" y="53.34"/>
+<instance part="C44" gate="G$1" x="71.12" y="144.78"/>
+<instance part="D8" gate="G$1" x="60.96" y="93.98"/>
+<instance part="V54" gate="GND" x="60.96" y="88.9"/>
+<instance part="C46" gate="G$1" x="81.28" y="144.78"/>
+<instance part="C47" gate="G$1" x="172.72" y="144.78"/>
+<instance part="Q2" gate="N" x="73.66" y="63.5"/>
+<instance part="Q2" gate="P" x="129.54" y="93.98" rot="R180"/>
+<instance part="V25" gate="GND" x="76.2" y="53.34"/>
+<instance part="R56" gate="G$1" x="119.38" y="101.6" rot="R90"/>
+<instance part="R57" gate="G$1" x="111.76" y="93.98"/>
+<instance part="R58" gate="G$1" x="137.16" y="93.98" rot="R90"/>
+</instances>
+<busses>
+</busses>
+<nets>
+<net name="GND" class="0">
+<segment>
+<wire x1="48.26" y1="101.6" x2="50.8" y2="101.6" width="0.1524" layer="91"/>
+<wire x1="50.8" y1="101.6" x2="50.8" y2="96.52" width="0.1524" layer="91"/>
+<wire x1="50.8" y1="96.52" x2="50.8" y2="93.98" width="0.1524" layer="91"/>
+<wire x1="50.8" y1="93.98" x2="50.8" y2="91.44" width="0.1524" layer="91"/>
+<wire x1="50.8" y1="91.44" x2="50.8" y2="88.9" width="0.1524" layer="91"/>
+<wire x1="50.8" y1="88.9" x2="50.8" y2="86.36" width="0.1524" layer="91"/>
+<wire x1="48.26" y1="96.52" x2="50.8" y2="96.52" width="0.1524" layer="91"/>
+<wire x1="48.26" y1="93.98" x2="50.8" y2="93.98" width="0.1524" layer="91"/>
+<wire x1="48.26" y1="91.44" x2="50.8" y2="91.44" width="0.1524" layer="91"/>
+<wire x1="48.26" y1="88.9" x2="50.8" y2="88.9" width="0.1524" layer="91"/>
+<junction x="50.8" y="96.52"/>
+<junction x="50.8" y="93.98"/>
+<junction x="50.8" y="91.44"/>
+<junction x="50.8" y="88.9"/>
+<pinref part="SV1" gate="G$1" pin="GND/5"/>
+<pinref part="V1" gate="GND" pin="GND"/>
+<pinref part="SV1" gate="G$1" pin="SHLD0"/>
+<pinref part="SV1" gate="G$1" pin="SHLD1"/>
+<pinref part="SV1" gate="G$1" pin="SHLD2"/>
+<pinref part="SV1" gate="G$1" pin="SHLD3"/>
+</segment>
+<segment>
+<wire x1="81.28" y1="101.6" x2="81.28" y2="99.06" width="0.1524" layer="91"/>
+<pinref part="C1" gate="G$1" pin="2"/>
+<pinref part="V2" gate="GND" pin="GND"/>
+</segment>
+<segment>
+<wire x1="137.16" y1="142.24" x2="137.16" y2="139.7" width="0.1524" layer="91"/>
+<wire x1="137.16" y1="139.7" x2="137.16" y2="137.16" width="0.1524" layer="91"/>
+<wire x1="137.16" y1="139.7" x2="127" y2="139.7" width="0.1524" layer="91"/>
+<wire x1="127" y1="139.7" x2="127" y2="142.24" width="0.1524" layer="91"/>
+<wire x1="127" y1="139.7" x2="116.84" y2="139.7" width="0.1524" layer="91"/>
+<wire x1="116.84" y1="139.7" x2="116.84" y2="142.24" width="0.1524" layer="91"/>
+<junction x="137.16" y="139.7"/>
+<junction x="127" y="139.7"/>
+<pinref part="V30" gate="GND" pin="GND"/>
+<pinref part="C26" gate="G$1" pin="2"/>
+<pinref part="C25" gate="G$1" pin="2"/>
+<pinref part="C27" gate="G$1" pin="2"/>
+</segment>
+<segment>
+<wire x1="228.6" y1="137.16" x2="228.6" y2="139.7" width="0.1524" layer="91"/>
+<wire x1="228.6" y1="139.7" x2="228.6" y2="142.24" width="0.1524" layer="91"/>
+<wire x1="228.6" y1="139.7" x2="218.44" y2="139.7" width="0.1524" layer="91"/>
+<wire x1="218.44" y1="139.7" x2="218.44" y2="142.24" width="0.1524" layer="91"/>
+<wire x1="218.44" y1="139.7" x2="208.28" y2="139.7" width="0.1524" layer="91"/>
+<wire x1="208.28" y1="139.7" x2="208.28" y2="142.24" width="0.1524" layer="91"/>
+<wire x1="208.28" y1="139.7" x2="198.12" y2="139.7" width="0.1524" layer="91"/>
+<wire x1="198.12" y1="139.7" x2="198.12" y2="142.24" width="0.1524" layer="91"/>
+<junction x="228.6" y="139.7"/>
+<junction x="218.44" y="139.7"/>
+<junction x="208.28" y="139.7"/>
+<pinref part="V32" gate="GND" pin="GND"/>
+<pinref part="C31" gate="G$1" pin="2"/>
+<pinref part="C30" gate="G$1" pin="2"/>
+<pinref part="C29" gate="G$1" pin="2"/>
+<pinref part="C33" gate="G$1" pin="2"/>
+</segment>
+<segment>
+<wire x1="154.94" y1="50.8" x2="152.4" y2="50.8" width="0.1524" layer="91"/>
+<wire x1="152.4" y1="50.8" x2="152.4" y2="48.26" width="0.1524" layer="91"/>
+<pinref part="IC12" gate="G$1" pin="GND"/>
+<pinref part="V35" gate="GND" pin="GND"/>
+</segment>
+<segment>
+<wire x1="137.16" y1="43.18" x2="137.16" y2="45.72" width="0.1524" layer="91"/>
+<pinref part="V36" gate="GND" pin="GND"/>
+<pinref part="R23" gate="G$1" pin="1"/>
+</segment>
+<segment>
+<wire x1="182.88" y1="142.24" x2="182.88" y2="139.7" width="0.1524" layer="91"/>
+<wire x1="182.88" y1="139.7" x2="182.88" y2="137.16" width="0.1524" layer="91"/>
+<wire x1="182.88" y1="139.7" x2="172.72" y2="139.7" width="0.1524" layer="91"/>
+<wire x1="172.72" y1="139.7" x2="162.56" y2="139.7" width="0.1524" layer="91"/>
+<wire x1="162.56" y1="139.7" x2="162.56" y2="142.24" width="0.1524" layer="91"/>
+<wire x1="162.56" y1="139.7" x2="152.4" y2="139.7" width="0.1524" layer="91"/>
+<wire x1="152.4" y1="139.7" x2="152.4" y2="142.24" width="0.1524" layer="91"/>
+<wire x1="172.72" y1="142.24" x2="172.72" y2="139.7" width="0.1524" layer="91"/>
+<junction x="182.88" y="139.7"/>
+<junction x="162.56" y="139.7"/>
+<junction x="172.72" y="139.7"/>
+<pinref part="V38" gate="GND" pin="GND"/>
+<pinref part="C32" gate="G$1" pin="2"/>
+<pinref part="C28" gate="G$1" pin="2"/>
+<pinref part="C34" gate="G$1" pin="2"/>
+<pinref part="C47" gate="G$1" pin="2"/>
+</segment>
+<segment>
+<wire x1="157.48" y1="81.28" x2="154.94" y2="81.28" width="0.1524" layer="91"/>
+<wire x1="154.94" y1="81.28" x2="154.94" y2="76.2" width="0.1524" layer="91"/>
+<pinref part="IC13" gate="G$1" pin="GND"/>
+<pinref part="V6" gate="GND" pin="GND"/>
+</segment>
+<segment>
+<wire x1="157.48" y1="109.22" x2="154.94" y2="109.22" width="0.1524" layer="91"/>
+<wire x1="154.94" y1="109.22" x2="154.94" y2="104.14" width="0.1524" layer="91"/>
+<pinref part="IC3" gate="G$1" pin="GND"/>
+<pinref part="V39" gate="GND" pin="GND"/>
+</segment>
+<segment>
+<wire x1="101.6" y1="142.24" x2="101.6" y2="139.7" width="0.1524" layer="91"/>
+<wire x1="101.6" y1="139.7" x2="101.6" y2="137.16" width="0.1524" layer="91"/>
+<wire x1="60.96" y1="139.7" x2="60.96" y2="142.24" width="0.1524" layer="91"/>
+<wire x1="60.96" y1="139.7" x2="50.8" y2="139.7" width="0.1524" layer="91"/>
+<wire x1="50.8" y1="139.7" x2="40.64" y2="139.7" width="0.1524" layer="91"/>
+<wire x1="40.64" y1="139.7" x2="30.48" y2="139.7" width="0.1524" layer="91"/>
+<wire x1="30.48" y1="139.7" x2="30.48" y2="142.24" width="0.1524" layer="91"/>
+<wire x1="40.64" y1="142.24" x2="40.64" y2="139.7" width="0.1524" layer="91"/>
+<wire x1="50.8" y1="142.24" x2="50.8" y2="139.7" width="0.1524" layer="91"/>
+<wire x1="101.6" y1="139.7" x2="91.44" y2="139.7" width="0.1524" layer="91"/>
+<wire x1="91.44" y1="139.7" x2="81.28" y2="139.7" width="0.1524" layer="91"/>
+<wire x1="81.28" y1="139.7" x2="71.12" y2="139.7" width="0.1524" layer="91"/>
+<wire x1="71.12" y1="139.7" x2="60.96" y2="139.7" width="0.1524" layer="91"/>
+<wire x1="91.44" y1="142.24" x2="91.44" y2="139.7" width="0.1524" layer="91"/>
+<wire x1="71.12" y1="142.24" x2="71.12" y2="139.7" width="0.1524" layer="91"/>
+<wire x1="81.28" y1="142.24" x2="81.28" y2="139.7" width="0.1524" layer="91"/>
+<junction x="40.64" y="139.7"/>
+<junction x="50.8" y="139.7"/>
+<junction x="101.6" y="139.7"/>
+<junction x="60.96" y="139.7"/>
+<junction x="91.44" y="139.7"/>
+<junction x="71.12" y="139.7"/>
+<junction x="81.28" y="139.7"/>
+<pinref part="C38" gate="G$1" pin="-"/>
+<pinref part="V29" gate="GND" pin="GND"/>
+<pinref part="C24" gate="G$1" pin="2"/>
+<pinref part="C21" gate="G$1" pin="2"/>
+<pinref part="C22" gate="G$1" pin="2"/>
+<pinref part="C23" gate="G$1" pin="2"/>
+<pinref part="C37" gate="G$1" pin="-"/>
+<pinref part="C44" gate="G$1" pin="2"/>
+<pinref part="C46" gate="G$1" pin="2"/>
+</segment>
+<segment>
+<wire x1="55.88" y1="60.96" x2="55.88" y2="55.88" width="0.1524" layer="91"/>
+<pinref part="TP6" gate="G$1" pin="P$1"/>
+<pinref part="V51" gate="GND" pin="GND"/>
+</segment>
+<segment>
+<wire x1="60.96" y1="93.98" x2="60.96" y2="91.44" width="0.1524" layer="91"/>
+<pinref part="D8" gate="G$1" pin="A"/>
+<pinref part="V54" gate="GND" pin="GND"/>
+</segment>
+<segment>
+<wire x1="68.58" y1="60.96" x2="66.04" y2="60.96" width="0.1524" layer="91"/>
+<wire x1="66.04" y1="60.96" x2="66.04" y2="58.42" width="0.1524" layer="91"/>
+<wire x1="73.66" y1="63.5" x2="76.2" y2="63.5" width="0.1524" layer="91"/>
+<wire x1="76.2" y1="63.5" x2="76.2" y2="60.96" width="0.1524" layer="91"/>
+<wire x1="76.2" y1="60.96" x2="76.2" y2="58.42" width="0.1524" layer="91"/>
+<wire x1="76.2" y1="58.42" x2="76.2" y2="55.88" width="0.1524" layer="91"/>
+<wire x1="73.66" y1="60.96" x2="76.2" y2="60.96" width="0.1524" layer="91"/>
+<wire x1="66.04" y1="58.42" x2="76.2" y2="58.42" width="0.1524" layer="91"/>
+<junction x="76.2" y="60.96"/>
+<junction x="76.2" y="58.42"/>
+<pinref part="Q2" gate="N" pin="G"/>
+<pinref part="Q2" gate="N" pin="D"/>
+<pinref part="V25" gate="GND" pin="GND"/>
+<pinref part="Q2" gate="N" pin="S"/>
+</segment>
+</net>
+<net name="N$1" class="0">
+<segment>
+<wire x1="48.26" y1="111.76" x2="81.28" y2="111.76" width="0.1524" layer="91"/>
+<wire x1="81.28" y1="111.76" x2="86.36" y2="111.76" width="0.1524" layer="91"/>
+<wire x1="81.28" y1="109.22" x2="81.28" y2="111.76" width="0.1524" layer="91"/>
+<junction x="81.28" y="111.76"/>
+<pinref part="SV1" gate="G$1" pin="VBUS/1"/>
+<pinref part="C1" gate="G$1" pin="1"/>
+<pinref part="U1" gate="G$1" pin="A"/>
+</segment>
+</net>
+<net name="USB_D-" class="0">
+<segment>
+<wire x1="66.04" y1="109.22" x2="63.5" y2="109.22" width="0.1524" layer="91"/>
+<wire x1="63.5" y1="109.22" x2="48.26" y2="109.22" width="0.1524" layer="91"/>
+<wire x1="63.5" y1="109.22" x2="63.5" y2="101.6" width="0.1524" layer="91"/>
+<junction x="63.5" y="109.22"/>
+<label x="66.04" y="109.22" size="1.778" layer="95"/>
+<pinref part="SV1" gate="G$1" pin="D-/2"/>
+<pinref part="D8" gate="G$1" pin="K2"/>
+</segment>
+</net>
+<net name="USB_D+" class="0">
+<segment>
+<wire x1="66.04" y1="106.68" x2="58.42" y2="106.68" width="0.1524" layer="91"/>
+<wire x1="58.42" y1="106.68" x2="48.26" y2="106.68" width="0.1524" layer="91"/>
+<wire x1="58.42" y1="106.68" x2="58.42" y2="101.6" width="0.1524" layer="91"/>
+<junction x="58.42" y="106.68"/>
+<label x="66.04" y="106.68" size="1.778" layer="95"/>
+<pinref part="SV1" gate="G$1" pin="D+/3"/>
+<pinref part="D8" gate="G$1" pin="K1"/>
+</segment>
+</net>
+<net name="+3V3" class="0">
+<segment>
+<wire x1="185.42" y1="111.76" x2="200.66" y2="111.76" width="0.1524" layer="91"/>
+<wire x1="200.66" y1="111.76" x2="200.66" y2="119.38" width="0.1524" layer="91"/>
+<pinref part="IC3" gate="G$1" pin="VO"/>
+<pinref part="U$3" gate="G$1" pin="+3V3"/>
+</segment>
+<segment>
+<wire x1="116.84" y1="149.86" x2="116.84" y2="152.4" width="0.1524" layer="91"/>
+<wire x1="116.84" y1="152.4" x2="116.84" y2="154.94" width="0.1524" layer="91"/>
+<wire x1="116.84" y1="152.4" x2="127" y2="152.4" width="0.1524" layer="91"/>
+<wire x1="127" y1="152.4" x2="127" y2="149.86" width="0.1524" layer="91"/>
+<wire x1="127" y1="152.4" x2="137.16" y2="152.4" width="0.1524" layer="91"/>
+<wire x1="137.16" y1="152.4" x2="137.16" y2="149.86" width="0.1524" layer="91"/>
+<junction x="116.84" y="152.4"/>
+<junction x="127" y="152.4"/>
+<pinref part="C25" gate="G$1" pin="1"/>
+<pinref part="U$8" gate="G$1" pin="+3V3"/>
+<pinref part="C26" gate="G$1" pin="1"/>
+<pinref part="C27" gate="G$1" pin="1"/>
+</segment>
+</net>
+<net name="VDD" class="0">
+<segment>
+<wire x1="30.48" y1="154.94" x2="30.48" y2="152.4" width="0.1524" layer="91"/>
+<wire x1="30.48" y1="152.4" x2="30.48" y2="149.86" width="0.1524" layer="91"/>
+<wire x1="30.48" y1="152.4" x2="40.64" y2="152.4" width="0.1524" layer="91"/>
+<wire x1="40.64" y1="152.4" x2="50.8" y2="152.4" width="0.1524" layer="91"/>
+<wire x1="50.8" y1="152.4" x2="60.96" y2="152.4" width="0.1524" layer="91"/>
+<wire x1="60.96" y1="152.4" x2="60.96" y2="149.86" width="0.1524" layer="91"/>
+<wire x1="50.8" y1="152.4" x2="50.8" y2="149.86" width="0.1524" layer="91"/>
+<wire x1="40.64" y1="149.86" x2="40.64" y2="152.4" width="0.1524" layer="91"/>
+<wire x1="60.96" y1="152.4" x2="71.12" y2="152.4" width="0.1524" layer="91"/>
+<wire x1="71.12" y1="152.4" x2="81.28" y2="152.4" width="0.1524" layer="91"/>
+<wire x1="81.28" y1="152.4" x2="91.44" y2="152.4" width="0.1524" layer="91"/>
+<wire x1="91.44" y1="152.4" x2="101.6" y2="152.4" width="0.1524" layer="91"/>
+<wire x1="101.6" y1="152.4" x2="101.6" y2="149.86" width="0.1524" layer="91"/>
+<wire x1="91.44" y1="149.86" x2="91.44" y2="152.4" width="0.1524" layer="91"/>
+<wire x1="71.12" y1="149.86" x2="71.12" y2="152.4" width="0.1524" layer="91"/>
+<wire x1="81.28" y1="149.86" x2="81.28" y2="152.4" width="0.1524" layer="91"/>
+<junction x="30.48" y="152.4"/>
+<junction x="50.8" y="152.4"/>
+<junction x="40.64" y="152.4"/>
+<junction x="60.96" y="152.4"/>
+<junction x="91.44" y="152.4"/>
+<junction x="71.12" y="152.4"/>
+<junction x="81.28" y="152.4"/>
+<pinref part="VDD7" gate="G$1" pin="VDD"/>
+<pinref part="C21" gate="G$1" pin="1"/>
+<pinref part="C24" gate="G$1" pin="1"/>
+<pinref part="C23" gate="G$1" pin="1"/>
+<pinref part="C22" gate="G$1" pin="1"/>
+<pinref part="C38" gate="G$1" pin="+"/>
+<pinref part="C37" gate="G$1" pin="+"/>
+<pinref part="C44" gate="G$1" pin="1"/>
+<pinref part="C46" gate="G$1" pin="1"/>
+</segment>
+<segment>
+<wire x1="132.08" y1="91.44" x2="132.08" y2="86.36" width="0.1524" layer="91"/>
+<wire x1="147.32" y1="83.82" x2="147.32" y2="86.36" width="0.1524" layer="91"/>
+<wire x1="147.32" y1="86.36" x2="147.32" y2="91.44" width="0.1524" layer="91"/>
+<wire x1="157.48" y1="83.82" x2="147.32" y2="83.82" width="0.1524" layer="91"/>
+<wire x1="154.94" y1="63.5" x2="147.32" y2="63.5" width="0.1524" layer="91"/>
+<wire x1="147.32" y1="63.5" x2="147.32" y2="83.82" width="0.1524" layer="91"/>
+<wire x1="132.08" y1="86.36" x2="137.16" y2="86.36" width="0.1524" layer="91"/>
+<wire x1="137.16" y1="86.36" x2="147.32" y2="86.36" width="0.1524" layer="91"/>
+<wire x1="127" y1="91.44" x2="132.08" y2="91.44" width="0.1524" layer="91"/>
+<wire x1="137.16" y1="88.9" x2="137.16" y2="86.36" width="0.1524" layer="91"/>
+<junction x="147.32" y="83.82"/>
+<junction x="147.32" y="86.36"/>
+<junction x="137.16" y="86.36"/>
+<pinref part="VDD1" gate="G$1" pin="VDD"/>
+<pinref part="IC13" gate="G$1" pin="VIN"/>
+<pinref part="IC12" gate="G$1" pin="IN"/>
+<pinref part="Q2" gate="P" pin="D"/>
+<pinref part="R58" gate="G$1" pin="1"/>
+</segment>
+</net>
+<net name="+2V5" class="0">
+<segment>
+<wire x1="198.12" y1="154.94" x2="198.12" y2="152.4" width="0.1524" layer="91"/>
+<wire x1="198.12" y1="152.4" x2="198.12" y2="149.86" width="0.1524" layer="91"/>
+<wire x1="198.12" y1="152.4" x2="208.28" y2="152.4" width="0.1524" layer="91"/>
+<wire x1="208.28" y1="152.4" x2="208.28" y2="149.86" width="0.1524" layer="91"/>
+<wire x1="208.28" y1="152.4" x2="218.44" y2="152.4" width="0.1524" layer="91"/>
+<wire x1="218.44" y1="152.4" x2="218.44" y2="149.86" width="0.1524" layer="91"/>
+<wire x1="218.44" y1="152.4" x2="228.6" y2="152.4" width="0.1524" layer="91"/>
+<wire x1="228.6" y1="152.4" x2="228.6" y2="149.86" width="0.1524" layer="91"/>
+<junction x="198.12" y="152.4"/>
+<junction x="208.28" y="152.4"/>
+<junction x="218.44" y="152.4"/>
+<pinref part="V31" gate="G$1" pin="+2V5"/>
+<pinref part="C29" gate="G$1" pin="1"/>
+<pinref part="C30" gate="G$1" pin="1"/>
+<pinref part="C31" gate="G$1" pin="1"/>
+<pinref part="C33" gate="G$1" pin="1"/>
+</segment>
+<segment>
+<wire x1="187.96" y1="60.96" x2="195.58" y2="60.96" width="0.1524" layer="91"/>
+<wire x1="195.58" y1="60.96" x2="195.58" y2="63.5" width="0.1524" layer="91"/>
+<wire x1="195.58" y1="63.5" x2="195.58" y2="66.04" width="0.1524" layer="91"/>
+<wire x1="187.96" y1="63.5" x2="195.58" y2="63.5" width="0.1524" layer="91"/>
+<junction x="195.58" y="63.5"/>
+<pinref part="IC12" gate="G$1" pin="SENSE"/>
+<pinref part="V37" gate="G$1" pin="+2V5"/>
+<pinref part="IC12" gate="G$1" pin="OUT"/>
+</segment>
+</net>
+<net name="FPGA_ON" class="0">
+<segment>
+<wire x1="157.48" y1="78.74" x2="139.7" y2="78.74" width="0.1524" layer="91"/>
+<wire x1="137.16" y1="55.88" x2="137.16" y2="58.42" width="0.1524" layer="91"/>
+<wire x1="137.16" y1="58.42" x2="139.7" y2="58.42" width="0.1524" layer="91"/>
+<wire x1="139.7" y1="58.42" x2="154.94" y2="58.42" width="0.1524" layer="91"/>
+<wire x1="129.54" y1="58.42" x2="137.16" y2="58.42" width="0.1524" layer="91"/>
+<wire x1="139.7" y1="78.74" x2="139.7" y2="58.42" width="0.1524" layer="91"/>
+<junction x="137.16" y="58.42"/>
+<junction x="139.7" y="58.42"/>
+<label x="129.54" y="58.42" size="1.778" layer="95" rot="MR0"/>
+<pinref part="IC13" gate="G$1" pin="VC"/>
+<pinref part="R23" gate="G$1" pin="2"/>
+<pinref part="IC12" gate="G$1" pin="/SHDN"/>
+</segment>
+</net>
+<net name="+3V3-FPGA" class="0">
+<segment>
+<wire x1="185.42" y1="83.82" x2="200.66" y2="83.82" width="0.1524" layer="91"/>
+<label x="200.66" y="83.82" size="1.778" layer="95"/>
+<pinref part="IC13" gate="G$1" pin="VO"/>
+</segment>
+<segment>
+<wire x1="152.4" y1="149.86" x2="152.4" y2="152.4" width="0.1524" layer="91"/>
+<wire x1="152.4" y1="152.4" x2="162.56" y2="152.4" width="0.1524" layer="91"/>
+<wire x1="162.56" y1="152.4" x2="162.56" y2="149.86" width="0.1524" layer="91"/>
+<wire x1="162.56" y1="152.4" x2="172.72" y2="152.4" width="0.1524" layer="91"/>
+<wire x1="172.72" y1="152.4" x2="182.88" y2="152.4" width="0.1524" layer="91"/>
+<wire x1="182.88" y1="152.4" x2="182.88" y2="149.86" width="0.1524" layer="91"/>
+<wire x1="152.4" y1="152.4" x2="152.4" y2="157.48" width="0.1524" layer="91"/>
+<wire x1="152.4" y1="157.48" x2="154.94" y2="157.48" width="0.1524" layer="91"/>
+<wire x1="172.72" y1="149.86" x2="172.72" y2="152.4" width="0.1524" layer="91"/>
+<junction x="152.4" y="152.4"/>
+<junction x="162.56" y="152.4"/>
+<junction x="172.72" y="152.4"/>
+<label x="154.94" y="157.48" size="1.778" layer="95"/>
+<pinref part="C28" gate="G$1" pin="1"/>
+<pinref part="C32" gate="G$1" pin="1"/>
+<pinref part="C34" gate="G$1" pin="1"/>
+<pinref part="C47" gate="G$1" pin="1"/>
+</segment>
+</net>
+<net name="PFETGATE" class="0">
+<segment>
+<wire x1="121.92" y1="93.98" x2="119.38" y2="93.98" width="0.1524" layer="91"/>
+<wire x1="119.38" y1="93.98" x2="119.38" y2="96.52" width="0.1524" layer="91"/>
+<wire x1="116.84" y1="93.98" x2="119.38" y2="93.98" width="0.1524" layer="91"/>
+<junction x="119.38" y="93.98"/>
+<pinref part="Q2" gate="P" pin="G"/>
+<pinref part="R56" gate="G$1" pin="1"/>
+<pinref part="R57" gate="G$1" pin="2"/>
+</segment>
+</net>
+<net name="NVDD_ON" class="0">
+<segment>
+<wire x1="104.14" y1="93.98" x2="106.68" y2="93.98" width="0.1524" layer="91"/>
+<label x="104.14" y="93.98" size="1.778" layer="95" rot="MR0"/>
+<pinref part="R57" gate="G$1" pin="1"/>
+</segment>
+</net>
+<net name="N$49" class="0">
+<segment>
+<wire x1="137.16" y1="99.06" x2="137.16" y2="101.6" width="0.1524" layer="91"/>
+<wire x1="152.4" y1="111.76" x2="157.48" y2="111.76" width="0.1524" layer="91"/>
+<wire x1="157.48" y1="106.68" x2="152.4" y2="106.68" width="0.1524" layer="91"/>
+<wire x1="152.4" y1="106.68" x2="152.4" y2="111.76" width="0.1524" layer="91"/>
+<wire x1="99.06" y1="111.76" x2="119.38" y2="111.76" width="0.1524" layer="91"/>
+<wire x1="119.38" y1="111.76" x2="132.08" y2="111.76" width="0.1524" layer="91"/>
+<wire x1="132.08" y1="111.76" x2="152.4" y2="111.76" width="0.1524" layer="91"/>
+<wire x1="132.08" y1="93.98" x2="132.08" y2="101.6" width="0.1524" layer="91"/>
+<wire x1="132.08" y1="101.6" x2="132.08" y2="111.76" width="0.1524" layer="91"/>
+<wire x1="132.08" y1="93.98" x2="127" y2="93.98" width="0.1524" layer="91"/>
+<wire x1="119.38" y1="106.68" x2="119.38" y2="111.76" width="0.1524" layer="91"/>
+<wire x1="137.16" y1="101.6" x2="132.08" y2="101.6" width="0.1524" layer="91"/>
+<junction x="152.4" y="111.76"/>
+<junction x="132.08" y="111.76"/>
+<junction x="119.38" y="111.76"/>
+<junction x="132.08" y="101.6"/>
+<pinref part="R58" gate="G$1" pin="2"/>
+<pinref part="IC3" gate="G$1" pin="VIN"/>
+<pinref part="IC3" gate="G$1" pin="VC"/>
+<pinref part="U1" gate="G$1" pin="B"/>
+<pinref part="Q2" gate="P" pin="S"/>
+<pinref part="R56" gate="G$1" pin="2"/>
+</segment>
+</net>
+</nets>
+</sheet>
+<sheet>
+<plain>
+<text x="165.1" y="17.78" size="2.54" layer="95">FPGA and ADC</text>
+<text x="50.8" y="123.19" size="1.778" layer="95">M2:0=111 means slave</text>
+<text x="50.8" y="120.65" size="1.778" layer="95">serial (with pull-ups)</text>
+</plain>
+<instances>
+<instance part="FRAME2" gate="G$1" x="0" y="0"/>
+<instance part="IC1" gate="G$1" x="88.9" y="154.94"/>
+<instance part="V3" gate="GND" x="93.98" y="22.86" rot="MR0"/>
+<instance part="V4" gate="G$1" x="134.62" y="167.64" rot="MR0"/>
+<instance part="XT1" gate="G$1" x="38.1" y="66.04"/>
+<instance part="IC4" gate="G$1" x="27.94" y="55.88"/>
+<instance part="R1" gate="G$1" x="43.18" y="73.66"/>
+<instance part="C2" gate="G$1" x="20.32" y="45.72" rot="MR0"/>
+<instance part="C3" gate="G$1" x="53.34" y="45.72" rot="MR0"/>
+<instance part="R2" gate="G$1" x="43.18" y="55.88"/>
+<instance part="V7" gate="GND" x="53.34" y="35.56"/>
+<instance part="IC8" gate="G$1" x="187.96" y="154.94" rot="MR0"/>
+<instance part="VDD4" gate="G$1" x="213.36" y="167.64" rot="MR0"/>
+<instance part="V24" gate="GND" x="190.5" y="96.52" rot="MR0"/>
+<instance part="C18" gate="G$1" x="223.52" y="99.06"/>
+<instance part="C19" gate="G$1" x="233.68" y="99.06"/>
+<instance part="SV5" gate="G$1" x="210.82" y="53.34" rot="MR0"/>
+<instance part="V28" gate="GND" x="223.52" y="45.72" rot="MR0"/>
+<instance part="U$5" gate="G$1" x="220.98" y="76.2"/>
+<instance part="R39" gate="G$1" x="55.88" y="93.98"/>
+<instance part="R44" gate="G$1" x="55.88" y="86.36"/>
+<instance part="R47" gate="G$1" x="180.34" y="114.3" rot="R90"/>
+<instance part="VDD10" gate="G$1" x="170.18" y="111.76"/>
+<instance part="TP7" gate="G$1" x="149.86" y="109.22"/>
+<instance part="R52" gate="G$1" x="243.84" y="137.16" rot="R90"/>
+<instance part="VDD11" gate="G$1" x="243.84" y="147.32" rot="MR0"/>
+<instance part="R53" gate="G$1" x="243.84" y="121.92" rot="R90"/>
+<instance part="R54" gate="G$1" x="243.84" y="93.98" rot="R90"/>
+<instance part="V55" gate="GND" x="243.84" y="81.28"/>
+<instance part="R59" gate="G$1" x="170.18" y="50.8"/>
+</instances>
+<busses>
+<bus name="NCS,SPCK,MISO,MOSI">
+<segment>
+<wire x1="157.48" y1="81.28" x2="157.48" y2="71.12" width="0.762" layer="92"/>
+<wire x1="157.48" y1="71.12" x2="160.02" y2="68.58" width="0.762" layer="92"/>
+<label x="160.02" y="68.58" size="1.778" layer="95"/>
+</segment>
+</bus>
+<bus name="ADC[1..8]">
+<segment>
+<wire x1="170.18" y1="132.08" x2="170.18" y2="149.86" width="0.762" layer="92"/>
+<wire x1="170.18" y1="149.86" x2="167.64" y2="152.4" width="0.762" layer="92"/>
+<wire x1="157.48" y1="33.02" x2="154.94" y2="35.56" width="0.762" layer="92"/>
+<wire x1="154.94" y1="35.56" x2="154.94" y2="55.88" width="0.762" layer="92"/>
+<label x="167.64" y="152.4" size="1.778" layer="95" rot="MR0"/>
+<label x="157.48" y="33.02" size="1.778" layer="95"/>
+</segment>
+</bus>
+</busses>
+<nets>
+<net name="GND" class="0">
+<segment>
+<wire x1="53.34" y1="43.18" x2="53.34" y2="40.64" width="0.1524" layer="91"/>
+<wire x1="53.34" y1="40.64" x2="53.34" y2="38.1" width="0.1524" layer="91"/>
+<wire x1="53.34" y1="40.64" x2="30.48" y2="40.64" width="0.1524" layer="91"/>
+<wire x1="30.48" y1="40.64" x2="30.48" y2="50.8" width="0.1524" layer="91"/>
+<wire x1="30.48" y1="40.64" x2="20.32" y2="40.64" width="0.1524" layer="91"/>
+<wire x1="20.32" y1="40.64" x2="20.32" y2="43.18" width="0.1524" layer="91"/>
+<junction x="53.34" y="40.64"/>
+<junction x="30.48" y="40.64"/>
+<pinref part="C3" gate="G$1" pin="2"/>
+<pinref part="V7" gate="GND" pin="GND"/>
+<pinref part="IC4" gate="G$1" pin="VSS"/>
+<pinref part="C2" gate="G$1" pin="2"/>
+</segment>
+<segment>
+<wire x1="200.66" y1="104.14" x2="200.66" y2="101.6" width="0.1524" layer="91"/>
+<wire x1="200.66" y1="101.6" x2="198.12" y2="101.6" width="0.1524" layer="91"/>
+<wire x1="198.12" y1="101.6" x2="198.12" y2="104.14" width="0.1524" layer="91"/>
+<wire x1="198.12" y1="101.6" x2="193.04" y2="101.6" width="0.1524" layer="91"/>
+<wire x1="193.04" y1="101.6" x2="193.04" y2="104.14" width="0.1524" layer="91"/>
+<wire x1="193.04" y1="101.6" x2="190.5" y2="101.6" width="0.1524" layer="91"/>
+<wire x1="190.5" y1="101.6" x2="190.5" y2="104.14" width="0.1524" layer="91"/>
+<wire x1="190.5" y1="99.06" x2="190.5" y2="101.6" width="0.1524" layer="91"/>
+<junction x="198.12" y="101.6"/>
+<junction x="193.04" y="101.6"/>
+<junction x="190.5" y="101.6"/>
+<pinref part="IC8" gate="G$1" pin="AGND1"/>
+<pinref part="IC8" gate="G$1" pin="AGND0"/>
+<pinref part="IC8" gate="G$1" pin="DGND1"/>
+<pinref part="IC8" gate="G$1" pin="DGND0"/>
+<pinref part="V24" gate="GND" pin="GND"/>
+</segment>
+<segment>
+<wire x1="119.38" y1="30.48" x2="119.38" y2="27.94" width="0.1524" layer="91"/>
+<wire x1="119.38" y1="27.94" x2="116.84" y2="27.94" width="0.1524" layer="91"/>
+<wire x1="116.84" y1="27.94" x2="111.76" y2="27.94" width="0.1524" layer="91"/>
+<wire x1="111.76" y1="27.94" x2="109.22" y2="27.94" width="0.1524" layer="91"/>
+<wire x1="109.22" y1="27.94" x2="106.68" y2="27.94" width="0.1524" layer="91"/>
+<wire x1="106.68" y1="27.94" x2="104.14" y2="27.94" width="0.1524" layer="91"/>
+<wire x1="104.14" y1="27.94" x2="101.6" y2="27.94" width="0.1524" layer="91"/>
+<wire x1="101.6" y1="27.94" x2="99.06" y2="27.94" width="0.1524" layer="91"/>
+<wire x1="99.06" y1="27.94" x2="96.52" y2="27.94" width="0.1524" layer="91"/>
+<wire x1="96.52" y1="27.94" x2="93.98" y2="27.94" width="0.1524" layer="91"/>
+<wire x1="93.98" y1="27.94" x2="93.98" y2="30.48" width="0.1524" layer="91"/>
+<wire x1="96.52" y1="30.48" x2="96.52" y2="27.94" width="0.1524" layer="91"/>
+<wire x1="99.06" y1="30.48" x2="99.06" y2="27.94" width="0.1524" layer="91"/>
+<wire x1="101.6" y1="30.48" x2="101.6" y2="27.94" width="0.1524" layer="91"/>
+<wire x1="104.14" y1="30.48" x2="104.14" y2="27.94" width="0.1524" layer="91"/>
+<wire x1="106.68" y1="30.48" x2="106.68" y2="27.94" width="0.1524" layer="91"/>
+<wire x1="109.22" y1="30.48" x2="109.22" y2="27.94" width="0.1524" layer="91"/>
+<wire x1="111.76" y1="30.48" x2="111.76" y2="27.94" width="0.1524" layer="91"/>
+<wire x1="116.84" y1="30.48" x2="116.84" y2="27.94" width="0.1524" layer="91"/>
+<wire x1="93.98" y1="25.4" x2="93.98" y2="27.94" width="0.1524" layer="91"/>
+<junction x="96.52" y="27.94"/>
+<junction x="99.06" y="27.94"/>
+<junction x="101.6" y="27.94"/>
+<junction x="104.14" y="27.94"/>
+<junction x="106.68" y="27.94"/>
+<junction x="109.22" y="27.94"/>
+<junction x="111.76" y="27.94"/>
+<junction x="116.84" y="27.94"/>
+<junction x="93.98" y="27.94"/>
+<pinref part="IC1" gate="G$1" pin="NC1"/>
+<pinref part="IC1" gate="G$1" pin="GND1"/>
+<pinref part="IC1" gate="G$1" pin="GND2"/>
+<pinref part="IC1" gate="G$1" pin="GND3"/>
+<pinref part="IC1" gate="G$1" pin="GND4"/>
+<pinref part="IC1" gate="G$1" pin="GND5"/>
+<pinref part="IC1" gate="G$1" pin="GND6"/>
+<pinref part="IC1" gate="G$1" pin="GND7"/>
+<pinref part="IC1" gate="G$1" pin="GND8"/>
+<pinref part="IC1" gate="G$1" pin="NC0"/>
+<pinref part="V3" gate="GND" pin="GND"/>
+</segment>
+<segment>
+<wire x1="218.44" y1="53.34" x2="223.52" y2="53.34" width="0.1524" layer="91"/>
+<wire x1="223.52" y1="53.34" x2="223.52" y2="48.26" width="0.1524" layer="91"/>
+<pinref part="SV5" gate="G$1" pin="5"/>
+<pinref part="V28" gate="GND" pin="GND"/>
+</segment>
+<segment>
+<wire x1="243.84" y1="88.9" x2="243.84" y2="86.36" width="0.1524" layer="91"/>
+<wire x1="243.84" y1="86.36" x2="243.84" y2="83.82" width="0.1524" layer="91"/>
+<wire x1="233.68" y1="96.52" x2="233.68" y2="86.36" width="0.1524" layer="91"/>
+<wire x1="233.68" y1="86.36" x2="223.52" y2="86.36" width="0.1524" layer="91"/>
+<wire x1="223.52" y1="86.36" x2="223.52" y2="96.52" width="0.1524" layer="91"/>
+<wire x1="243.84" y1="86.36" x2="233.68" y2="86.36" width="0.1524" layer="91"/>
+<junction x="243.84" y="86.36"/>
+<junction x="233.68" y="86.36"/>
+<pinref part="R54" gate="G$1" pin="1"/>
+<pinref part="V55" gate="GND" pin="GND"/>
+<pinref part="C19" gate="G$1" pin="2"/>
+<pinref part="C18" gate="G$1" pin="2"/>
+</segment>
+</net>
+<net name="+3V3" class="0">
+<segment>
+<wire x1="218.44" y1="50.8" x2="220.98" y2="50.8" width="0.1524" layer="91"/>
+<wire x1="220.98" y1="50.8" x2="220.98" y2="73.66" width="0.1524" layer="91"/>
+<pinref part="SV5" gate="G$1" pin="6"/>
+<pinref part="U$5" gate="G$1" pin="+3V3"/>
+</segment>
+</net>
+<net name="N$4" class="0">
+<segment>
+<wire x1="25.4" y1="55.88" x2="20.32" y2="55.88" width="0.1524" layer="91"/>
+<wire x1="20.32" y1="55.88" x2="20.32" y2="63.5" width="0.1524" layer="91"/>
+<wire x1="20.32" y1="63.5" x2="38.1" y2="63.5" width="0.1524" layer="91"/>
+<wire x1="38.1" y1="73.66" x2="20.32" y2="73.66" width="0.1524" layer="91"/>
+<wire x1="20.32" y1="73.66" x2="20.32" y2="63.5" width="0.1524" layer="91"/>
+<wire x1="20.32" y1="55.88" x2="20.32" y2="50.8" width="0.1524" layer="91"/>
+<junction x="20.32" y="63.5"/>
+<junction x="20.32" y="55.88"/>
+<pinref part="IC4" gate="G$1" pin="A"/>
+<pinref part="XT1" gate="G$1" pin="A"/>
+<pinref part="R1" gate="G$1" pin="1"/>
+<pinref part="C2" gate="G$1" pin="1"/>
+</segment>
+</net>
+<net name="N$5" class="0">
+<segment>
+<wire x1="48.26" y1="63.5" x2="53.34" y2="63.5" width="0.1524" layer="91"/>
+<wire x1="53.34" y1="63.5" x2="53.34" y2="55.88" width="0.1524" layer="91"/>
+<wire x1="53.34" y1="55.88" x2="53.34" y2="53.34" width="0.1524" layer="91"/>
+<wire x1="83.82" y1="53.34" x2="76.2" y2="53.34" width="0.1524" layer="91"/>
+<wire x1="76.2" y1="53.34" x2="53.34" y2="53.34" width="0.1524" layer="91"/>
+<wire x1="48.26" y1="73.66" x2="53.34" y2="73.66" width="0.1524" layer="91"/>
+<wire x1="53.34" y1="73.66" x2="53.34" y2="63.5" width="0.1524" layer="91"/>
+<wire x1="53.34" y1="50.8" x2="53.34" y2="53.34" width="0.1524" layer="91"/>
+<wire x1="48.26" y1="55.88" x2="53.34" y2="55.88" width="0.1524" layer="91"/>
+<wire x1="83.82" y1="50.8" x2="76.2" y2="50.8" width="0.1524" layer="91"/>
+<wire x1="76.2" y1="50.8" x2="76.2" y2="53.34" width="0.1524" layer="91"/>
+<junction x="53.34" y="63.5"/>
+<junction x="53.34" y="53.34"/>
+<junction x="53.34" y="55.88"/>
+<junction x="76.2" y="53.34"/>
+<pinref part="XT1" gate="G$1" pin="B"/>
+<pinref part="IC1" gate="G$1" pin="P91_IGCK0"/>
+<pinref part="R1" gate="G$1" pin="2"/>
+<pinref part="C3" gate="G$1" pin="1"/>
+<pinref part="R2" gate="G$1" pin="2"/>
+<pinref part="IC1" gate="G$1" pin="P93_IOV0"/>
+</segment>
+</net>
+<net name="N$3" class="0">
+<segment>
+<wire x1="38.1" y1="55.88" x2="35.56" y2="55.88" width="0.1524" layer="91"/>
+<pinref part="R2" gate="G$1" pin="1"/>
+<pinref part="IC4" gate="G$1" pin="Y"/>
+</segment>
+</net>
+<net name="SPCK" class="0">
+<segment>
+<wire x1="157.48" y1="81.28" x2="154.94" y2="83.82" width="0.1524" layer="91"/>
+<wire x1="154.94" y1="83.82" x2="142.24" y2="83.82" width="0.1524" layer="91"/>
+<label x="144.78" y="83.82" size="1.778" layer="95"/>
+<pinref part="IC1" gate="G$1" pin="P39_IGCK4"/>
+</segment>
+</net>
+<net name="MISO" class="0">
+<segment>
+<wire x1="157.48" y1="78.74" x2="154.94" y2="81.28" width="0.1524" layer="91"/>
+<wire x1="154.94" y1="81.28" x2="142.24" y2="81.28" width="0.1524" layer="91"/>
+<label x="144.78" y="81.28" size="1.778" layer="95"/>
+<pinref part="IC1" gate="G$1" pin="P40_IO4"/>
+</segment>
+</net>
+<net name="MOSI" class="0">
+<segment>
+<wire x1="157.48" y1="73.66" x2="154.94" y2="76.2" width="0.1524" layer="91"/>
+<wire x1="154.94" y1="76.2" x2="142.24" y2="76.2" width="0.1524" layer="91"/>
+<label x="144.78" y="76.2" size="1.778" layer="95"/>
+<pinref part="IC1" gate="G$1" pin="P43_IO4"/>
+</segment>
+</net>
+<net name="NCS" class="0">
+<segment>
+<wire x1="157.48" y1="71.12" x2="154.94" y2="73.66" width="0.1524" layer="91"/>
+<wire x1="154.94" y1="73.66" x2="142.24" y2="73.66" width="0.1524" layer="91"/>
+<label x="144.78" y="73.66" size="1.778" layer="95"/>
+<pinref part="IC1" gate="G$1" pin="P44_IO4"/>
+</segment>
+</net>
+<net name="VDD" class="0">
+<segment>
+<wire x1="203.2" y1="160.02" x2="203.2" y2="162.56" width="0.1524" layer="91"/>
+<wire x1="200.66" y1="162.56" x2="200.66" y2="160.02" width="0.1524" layer="91"/>
+<wire x1="203.2" y1="162.56" x2="200.66" y2="162.56" width="0.1524" layer="91"/>
+<wire x1="203.2" y1="162.56" x2="208.28" y2="162.56" width="0.1524" layer="91"/>
+<wire x1="208.28" y1="162.56" x2="208.28" y2="160.02" width="0.1524" layer="91"/>
+<wire x1="208.28" y1="162.56" x2="210.82" y2="162.56" width="0.1524" layer="91"/>
+<wire x1="210.82" y1="162.56" x2="210.82" y2="160.02" width="0.1524" layer="91"/>
+<wire x1="210.82" y1="162.56" x2="213.36" y2="162.56" width="0.1524" layer="91"/>
+<wire x1="213.36" y1="162.56" x2="213.36" y2="160.02" width="0.1524" layer="91"/>
+<wire x1="213.36" y1="165.1" x2="213.36" y2="162.56" width="0.1524" layer="91"/>
+<junction x="203.2" y="162.56"/>
+<junction x="208.28" y="162.56"/>
+<junction x="210.82" y="162.56"/>
+<junction x="213.36" y="162.56"/>
+<pinref part="IC8" gate="G$1" pin="VDDD0"/>
+<pinref part="IC8" gate="G$1" pin="VDDD1"/>
+<pinref part="IC8" gate="G$1" pin="VDDA2"/>
+<pinref part="IC8" gate="G$1" pin="VDDA1"/>
+<pinref part="IC8" gate="G$1" pin="VDDA0"/>
+<pinref part="VDD4" gate="G$1" pin="VDD"/>
+</segment>
+<segment>
+<wire x1="180.34" y1="109.22" x2="180.34" y2="106.68" width="0.1524" layer="91"/>
+<wire x1="180.34" y1="106.68" x2="170.18" y2="106.68" width="0.1524" layer="91"/>
+<wire x1="170.18" y1="106.68" x2="170.18" y2="109.22" width="0.1524" layer="91"/>
+<pinref part="R47" gate="G$1" pin="1"/>
+<pinref part="VDD10" gate="G$1" pin="VDD"/>
+</segment>
+<segment>
+<wire x1="243.84" y1="144.78" x2="243.84" y2="142.24" width="0.1524" layer="91"/>
+<pinref part="VDD11" gate="G$1" pin="VDD"/>
+<pinref part="R52" gate="G$1" pin="2"/>
+</segment>
+</net>
+<net name="N$24" class="0">
+<segment>
+<wire x1="220.98" y1="124.46" x2="223.52" y2="124.46" width="0.1524" layer="91"/>
+<wire x1="223.52" y1="124.46" x2="223.52" y2="114.3" width="0.1524" layer="91"/>
+<wire x1="223.52" y1="114.3" x2="223.52" y2="104.14" width="0.1524" layer="91"/>
+<wire x1="243.84" y1="116.84" x2="243.84" y2="114.3" width="0.1524" layer="91"/>
+<wire x1="243.84" y1="114.3" x2="243.84" y2="99.06" width="0.1524" layer="91"/>
+<wire x1="223.52" y1="114.3" x2="243.84" y2="114.3" width="0.1524" layer="91"/>
+<junction x="223.52" y="114.3"/>
+<junction x="243.84" y="114.3"/>
+<pinref part="IC8" gate="G$1" pin="REFB"/>
+<pinref part="C18" gate="G$1" pin="1"/>
+<pinref part="R53" gate="G$1" pin="1"/>
+<pinref part="R54" gate="G$1" pin="2"/>
+</segment>
+</net>
+<net name="+2V5" class="0">
+<segment>
+<wire x1="116.84" y1="162.56" x2="116.84" y2="160.02" width="0.1524" layer="91"/>
+<wire x1="116.84" y1="162.56" x2="119.38" y2="162.56" width="0.1524" layer="91"/>
+<wire x1="119.38" y1="162.56" x2="119.38" y2="160.02" width="0.1524" layer="91"/>
+<wire x1="119.38" y1="162.56" x2="121.92" y2="162.56" width="0.1524" layer="91"/>
+<wire x1="121.92" y1="162.56" x2="121.92" y2="160.02" width="0.1524" layer="91"/>
+<wire x1="121.92" y1="162.56" x2="124.46" y2="162.56" width="0.1524" layer="91"/>
+<wire x1="124.46" y1="162.56" x2="124.46" y2="160.02" width="0.1524" layer="91"/>
+<wire x1="124.46" y1="162.56" x2="127" y2="162.56" width="0.1524" layer="91"/>
+<wire x1="127" y1="162.56" x2="127" y2="160.02" width="0.1524" layer="91"/>
+<wire x1="127" y1="162.56" x2="129.54" y2="162.56" width="0.1524" layer="91"/>
+<wire x1="129.54" y1="162.56" x2="129.54" y2="160.02" width="0.1524" layer="91"/>
+<wire x1="129.54" y1="162.56" x2="132.08" y2="162.56" width="0.1524" layer="91"/>
+<wire x1="132.08" y1="162.56" x2="132.08" y2="160.02" width="0.1524" layer="91"/>
+<wire x1="132.08" y1="162.56" x2="134.62" y2="162.56" width="0.1524" layer="91"/>
+<wire x1="134.62" y1="162.56" x2="134.62" y2="160.02" width="0.1524" layer="91"/>
+<wire x1="134.62" y1="162.56" x2="134.62" y2="165.1" width="0.1524" layer="91"/>
+<junction x="119.38" y="162.56"/>
+<junction x="121.92" y="162.56"/>
+<junction x="124.46" y="162.56"/>
+<junction x="127" y="162.56"/>
+<junction x="129.54" y="162.56"/>
+<junction x="132.08" y="162.56"/>
+<junction x="134.62" y="162.56"/>
+<pinref part="IC1" gate="G$1" pin="VCCINT1"/>
+<pinref part="IC1" gate="G$1" pin="VCCINT2"/>
+<pinref part="IC1" gate="G$1" pin="VCCINT3"/>
+<pinref part="IC1" gate="G$1" pin="VCCINT4"/>
+<pinref part="IC1" gate="G$1" pin="VCCINT5"/>
+<pinref part="IC1" gate="G$1" pin="VCCINT6"/>
+<pinref part="IC1" gate="G$1" pin="VCCINT7"/>
+<pinref part="IC1" gate="G$1" pin="VCCINT8"/>
+<pinref part="V4" gate="G$1" pin="+2V5"/>
+</segment>
+</net>
+<net name="FPGA_TDI" class="0">
+<segment>
+<wire x1="78.74" y1="137.16" x2="83.82" y2="137.16" width="0.1524" layer="91"/>
+<label x="78.74" y="137.16" size="1.778" layer="95" rot="MR0"/>
+<pinref part="IC1" gate="G$1" pin="TDI"/>
+</segment>
+<segment>
+<wire x1="226.06" y1="60.96" x2="218.44" y2="60.96" width="0.1524" layer="91"/>
+<label x="226.06" y="60.96" size="1.778" layer="95"/>
+<pinref part="SV5" gate="G$1" pin="2"/>
+</segment>
+</net>
+<net name="FPGA_TDO" class="0">
+<segment>
+<wire x1="78.74" y1="134.62" x2="83.82" y2="134.62" width="0.1524" layer="91"/>
+<label x="78.74" y="134.62" size="1.778" layer="95" rot="MR0"/>
+<pinref part="IC1" gate="G$1" pin="TDO"/>
+</segment>
+<segment>
+<wire x1="226.06" y1="58.42" x2="218.44" y2="58.42" width="0.1524" layer="91"/>
+<label x="226.06" y="58.42" size="1.778" layer="95"/>
+<pinref part="SV5" gate="G$1" pin="3"/>
+</segment>
+</net>
+<net name="FPGA_TMS" class="0">
+<segment>
+<wire x1="78.74" y1="132.08" x2="83.82" y2="132.08" width="0.1524" layer="91"/>
+<label x="78.74" y="132.08" size="1.778" layer="95" rot="MR0"/>
+<pinref part="IC1" gate="G$1" pin="TMS"/>
+</segment>
+<segment>
+<wire x1="226.06" y1="63.5" x2="218.44" y2="63.5" width="0.1524" layer="91"/>
+<label x="226.06" y="63.5" size="1.778" layer="95"/>
+<pinref part="SV5" gate="G$1" pin="1"/>
+</segment>
+</net>
+<net name="FPGA_TCK" class="0">
+<segment>
+<wire x1="78.74" y1="129.54" x2="83.82" y2="129.54" width="0.1524" layer="91"/>
+<label x="78.74" y="129.54" size="1.778" layer="95" rot="MR0"/>
+<pinref part="IC1" gate="G$1" pin="TCK"/>
+</segment>
+<segment>
+<wire x1="226.06" y1="55.88" x2="218.44" y2="55.88" width="0.1524" layer="91"/>
+<label x="226.06" y="55.88" size="1.778" layer="95"/>
+<pinref part="SV5" gate="G$1" pin="4"/>
+</segment>
+</net>
+<net name="FPGA_DONE" class="0">
+<segment>
+<wire x1="78.74" y1="114.3" x2="83.82" y2="114.3" width="0.1524" layer="91"/>
+<label x="78.74" y="114.3" size="1.778" layer="95" rot="MR0"/>
+<pinref part="IC1" gate="G$1" pin="DONE"/>
+</segment>
+</net>
+<net name="FPGA_NPROGRAM" class="0">
+<segment>
+<wire x1="78.74" y1="111.76" x2="83.82" y2="111.76" width="0.1524" layer="91"/>
+<label x="78.74" y="111.76" size="1.778" layer="95" rot="MR0"/>
+<pinref part="IC1" gate="G$1" pin="/PROGRAM"/>
+</segment>
+</net>
+<net name="FPGA_CCLK" class="0">
+<segment>
+<wire x1="78.74" y1="109.22" x2="83.82" y2="109.22" width="0.1524" layer="91"/>
+<label x="78.74" y="109.22" size="1.778" layer="95" rot="MR0"/>
+<pinref part="IC1" gate="G$1" pin="CCLK"/>
+</segment>
+</net>
+<net name="FPGA_DIN" class="0">
+<segment>
+<wire x1="78.74" y1="106.68" x2="83.82" y2="106.68" width="0.1524" layer="91"/>
+<label x="78.74" y="106.68" size="1.778" layer="95" rot="MR0"/>
+<pinref part="IC1" gate="G$1" pin="DIN"/>
+</segment>
+</net>
+<net name="FPGA_DOUT" class="0">
+<segment>
+<wire x1="78.74" y1="104.14" x2="83.82" y2="104.14" width="0.1524" layer="91"/>
+<label x="78.74" y="104.14" size="1.778" layer="95" rot="MR0"/>
+<pinref part="IC1" gate="G$1" pin="DOUT"/>
+</segment>
+</net>
+<net name="+3V3-FPGA" class="0">
+<segment>
+<wire x1="30.48" y1="60.96" x2="30.48" y2="81.28" width="0.1524" layer="91"/>
+<wire x1="30.48" y1="81.28" x2="27.94" y2="81.28" width="0.1524" layer="91"/>
+<label x="27.94" y="81.28" size="1.778" layer="95" rot="MR0"/>
+<pinref part="IC4" gate="G$1" pin="VDD"/>
+</segment>
+<segment>
+<wire x1="93.98" y1="162.56" x2="93.98" y2="160.02" width="0.1524" layer="91"/>
+<wire x1="93.98" y1="162.56" x2="96.52" y2="162.56" width="0.1524" layer="91"/>
+<wire x1="96.52" y1="162.56" x2="96.52" y2="160.02" width="0.1524" layer="91"/>
+<wire x1="96.52" y1="162.56" x2="99.06" y2="162.56" width="0.1524" layer="91"/>
+<wire x1="99.06" y1="162.56" x2="99.06" y2="160.02" width="0.1524" layer="91"/>
+<wire x1="99.06" y1="162.56" x2="101.6" y2="162.56" width="0.1524" layer="91"/>
+<wire x1="101.6" y1="162.56" x2="101.6" y2="160.02" width="0.1524" layer="91"/>
+<wire x1="101.6" y1="162.56" x2="104.14" y2="162.56" width="0.1524" layer="91"/>
+<wire x1="104.14" y1="162.56" x2="104.14" y2="160.02" width="0.1524" layer="91"/>
+<wire x1="104.14" y1="162.56" x2="106.68" y2="162.56" width="0.1524" layer="91"/>
+<wire x1="106.68" y1="162.56" x2="106.68" y2="160.02" width="0.1524" layer="91"/>
+<wire x1="106.68" y1="162.56" x2="109.22" y2="162.56" width="0.1524" layer="91"/>
+<wire x1="109.22" y1="162.56" x2="109.22" y2="160.02" width="0.1524" layer="91"/>
+<wire x1="109.22" y1="162.56" x2="111.76" y2="162.56" width="0.1524" layer="91"/>
+<wire x1="111.76" y1="162.56" x2="111.76" y2="160.02" width="0.1524" layer="91"/>
+<wire x1="111.76" y1="162.56" x2="111.76" y2="167.64" width="0.1524" layer="91"/>
+<wire x1="111.76" y1="167.64" x2="109.22" y2="167.64" width="0.1524" layer="91"/>
+<wire x1="177.8" y1="50.8" x2="175.26" y2="50.8" width="0.1524" layer="91"/>
+<wire x1="177.8" y1="50.8" x2="177.8" y2="53.34" width="0.1524" layer="91"/>
+<wire x1="177.8" y1="53.34" x2="180.34" y2="53.34" width="0.1524" layer="91"/>
+<junction x="96.52" y="162.56"/>
+<junction x="99.06" y="162.56"/>
+<junction x="101.6" y="162.56"/>
+<junction x="104.14" y="162.56"/>
+<junction x="106.68" y="162.56"/>
+<junction x="109.22" y="162.56"/>
+<junction x="111.76" y="162.56"/>
+<label x="109.22" y="167.64" size="1.778" layer="95" rot="MR0"/>
+<label x="180.34" y="53.34" size="1.778" layer="95"/>
+<pinref part="IC1" gate="G$1" pin="VCCO_B76"/>
+<pinref part="IC1" gate="G$1" pin="VCCO_B65"/>
+<pinref part="IC1" gate="G$1" pin="VCCO_B54"/>
+<pinref part="IC1" gate="G$1" pin="VCCO_B43"/>
+<pinref part="IC1" gate="G$1" pin="VCCO_B32"/>
+<pinref part="IC1" gate="G$1" pin="VCCO_B21"/>
+<pinref part="IC1" gate="G$1" pin="VCCO_B10"/>
+<pinref part="IC1" gate="G$1" pin="VCCO_B07"/>
+<pinref part="R59" gate="G$1" pin="2"/>
+</segment>
+</net>
+<net name="ADC1" class="0">
+<segment>
+<wire x1="170.18" y1="149.86" x2="172.72" y2="152.4" width="0.1524" layer="91"/>
+<wire x1="172.72" y1="152.4" x2="182.88" y2="152.4" width="0.1524" layer="91"/>
+<label x="175.26" y="152.4" size="1.778" layer="95"/>
+<pinref part="IC8" gate="G$1" pin="D1"/>
+</segment>
+<segment>
+<wire x1="154.94" y1="35.56" x2="152.4" y2="38.1" width="0.1524" layer="91"/>
+<wire x1="152.4" y1="38.1" x2="142.24" y2="38.1" width="0.1524" layer="91"/>
+<label x="144.78" y="38.1" size="1.778" layer="95"/>
+<pinref part="IC1" gate="G$1" pin="P62_IO3"/>
+</segment>
+</net>
+<net name="ADC2" class="0">
+<segment>
+<wire x1="170.18" y1="147.32" x2="172.72" y2="149.86" width="0.1524" layer="91"/>
+<wire x1="172.72" y1="149.86" x2="182.88" y2="149.86" width="0.1524" layer="91"/>
+<label x="175.26" y="149.86" size="1.778" layer="95"/>
+<pinref part="IC8" gate="G$1" pin="D2"/>
+</segment>
+<segment>
+<wire x1="154.94" y1="38.1" x2="152.4" y2="40.64" width="0.1524" layer="91"/>
+<wire x1="152.4" y1="40.64" x2="142.24" y2="40.64" width="0.1524" layer="91"/>
+<label x="144.78" y="40.64" size="1.778" layer="95"/>
+<pinref part="IC1" gate="G$1" pin="P60_IO3"/>
+</segment>
+</net>
+<net name="ADC3" class="0">
+<segment>
+<wire x1="170.18" y1="144.78" x2="172.72" y2="147.32" width="0.1524" layer="91"/>
+<wire x1="172.72" y1="147.32" x2="182.88" y2="147.32" width="0.1524" layer="91"/>
+<label x="175.26" y="147.32" size="1.778" layer="95"/>
+<pinref part="IC8" gate="G$1" pin="D3"/>
+</segment>
+<segment>
+<wire x1="154.94" y1="43.18" x2="152.4" y2="45.72" width="0.1524" layer="91"/>
+<wire x1="152.4" y1="45.72" x2="142.24" y2="45.72" width="0.1524" layer="91"/>
+<label x="144.78" y="45.72" size="1.778" layer="95"/>
+<pinref part="IC1" gate="G$1" pin="P58_IO3"/>
+</segment>
+</net>
+<net name="ADC4" class="0">
+<segment>
+<wire x1="170.18" y1="142.24" x2="172.72" y2="144.78" width="0.1524" layer="91"/>
+<wire x1="172.72" y1="144.78" x2="182.88" y2="144.78" width="0.1524" layer="91"/>
+<label x="175.26" y="144.78" size="1.778" layer="95"/>
+<pinref part="IC8" gate="G$1" pin="D4"/>
+</segment>
+<segment>
+<wire x1="154.94" y1="45.72" x2="152.4" y2="48.26" width="0.1524" layer="91"/>
+<wire x1="152.4" y1="48.26" x2="142.24" y2="48.26" width="0.1524" layer="91"/>
+<label x="144.78" y="48.26" size="1.778" layer="95"/>
+<pinref part="IC1" gate="G$1" pin="P57_IO3"/>
+</segment>
+</net>
+<net name="ADC5" class="0">
+<segment>
+<wire x1="170.18" y1="139.7" x2="172.72" y2="142.24" width="0.1524" layer="91"/>
+<wire x1="172.72" y1="142.24" x2="182.88" y2="142.24" width="0.1524" layer="91"/>
+<label x="175.26" y="142.24" size="1.778" layer="95"/>
+<pinref part="IC8" gate="G$1" pin="D5"/>
+</segment>
+<segment>
+<wire x1="154.94" y1="48.26" x2="152.4" y2="50.8" width="0.1524" layer="91"/>
+<wire x1="152.4" y1="50.8" x2="142.24" y2="50.8" width="0.1524" layer="91"/>
+<label x="144.78" y="50.8" size="1.778" layer="95"/>
+<pinref part="IC1" gate="G$1" pin="P56_IO3"/>
+</segment>
+</net>
+<net name="ADC6" class="0">
+<segment>
+<wire x1="170.18" y1="137.16" x2="172.72" y2="139.7" width="0.1524" layer="91"/>
+<wire x1="172.72" y1="139.7" x2="182.88" y2="139.7" width="0.1524" layer="91"/>
+<label x="175.26" y="139.7" size="1.778" layer="95"/>
+<pinref part="IC8" gate="G$1" pin="D6"/>
+</segment>
+<segment>
+<wire x1="154.94" y1="50.8" x2="152.4" y2="53.34" width="0.1524" layer="91"/>
+<wire x1="152.4" y1="53.34" x2="142.24" y2="53.34" width="0.1524" layer="91"/>
+<label x="144.78" y="53.34" size="1.778" layer="95"/>
+<pinref part="IC1" gate="G$1" pin="P55_IO3"/>
+</segment>
+</net>
+<net name="ADC7" class="0">
+<segment>
+<wire x1="170.18" y1="134.62" x2="172.72" y2="137.16" width="0.1524" layer="91"/>
+<wire x1="172.72" y1="137.16" x2="182.88" y2="137.16" width="0.1524" layer="91"/>
+<label x="175.26" y="137.16" size="1.778" layer="95"/>
+<pinref part="IC8" gate="G$1" pin="D7"/>
+</segment>
+<segment>
+<wire x1="154.94" y1="53.34" x2="152.4" y2="55.88" width="0.1524" layer="91"/>
+<wire x1="152.4" y1="55.88" x2="142.24" y2="55.88" width="0.1524" layer="91"/>
+<label x="144.78" y="55.88" size="1.778" layer="95"/>
+<pinref part="IC1" gate="G$1" pin="P54_IOV3"/>
+</segment>
+</net>
+<net name="ADC8" class="0">
+<segment>
+<wire x1="170.18" y1="132.08" x2="172.72" y2="134.62" width="0.1524" layer="91"/>
+<wire x1="172.72" y1="134.62" x2="182.88" y2="134.62" width="0.1524" layer="91"/>
+<label x="175.26" y="134.62" size="1.778" layer="95"/>
+<pinref part="IC8" gate="G$1" pin="MSB-D8"/>
+</segment>
+<segment>
+<wire x1="154.94" y1="55.88" x2="152.4" y2="58.42" width="0.1524" layer="91"/>
+<wire x1="152.4" y1="58.42" x2="142.24" y2="58.42" width="0.1524" layer="91"/>
+<label x="144.78" y="58.42" size="1.778" layer="95"/>
+<pinref part="IC1" gate="G$1" pin="P53_IO3"/>
+</segment>
+</net>
+<net name="ADC_NOE" class="0">
+<segment>
+<wire x1="175.26" y1="129.54" x2="180.34" y2="129.54" width="0.1524" layer="91"/>
+<wire x1="180.34" y1="129.54" x2="182.88" y2="129.54" width="0.1524" layer="91"/>
+<wire x1="180.34" y1="129.54" x2="180.34" y2="119.38" width="0.1524" layer="91"/>
+<junction x="180.34" y="129.54"/>
+<label x="175.26" y="129.54" size="1.778" layer="95" rot="MR0"/>
+<pinref part="IC8" gate="G$1" pin="NOE"/>
+<pinref part="R47" gate="G$1" pin="2"/>
+</segment>
+<segment>
+<wire x1="144.78" y1="66.04" x2="142.24" y2="66.04" width="0.1524" layer="91"/>
+<label x="144.78" y="66.04" size="1.778" layer="95"/>
+<pinref part="IC1" gate="G$1" pin="P47_IO4"/>
+</segment>
+</net>
+<net name="ADC_CLK" class="0">
+<segment>
+<wire x1="175.26" y1="124.46" x2="182.88" y2="124.46" width="0.1524" layer="91"/>
+<label x="175.26" y="124.46" size="1.778" layer="95" rot="MR0"/>
+<pinref part="IC8" gate="G$1" pin="CLK"/>
+</segment>
+<segment>
+<wire x1="144.78" y1="68.58" x2="142.24" y2="68.58" width="0.1524" layer="91"/>
+<label x="144.78" y="68.58" size="1.778" layer="95"/>
+<pinref part="IC1" gate="G$1" pin="P46_IO4"/>
+</segment>
+</net>
+<net name="SSP_DIN" class="0">
+<segment>
+<wire x1="144.78" y1="93.98" x2="142.24" y2="93.98" width="0.1524" layer="91"/>
+<label x="144.78" y="93.98" size="1.778" layer="95"/>
+<pinref part="IC1" gate="G$1" pin="P32_IO5"/>
+</segment>
+</net>
+<net name="SSP_DOUT" class="0">
+<segment>
+<wire x1="144.78" y1="91.44" x2="142.24" y2="91.44" width="0.1524" layer="91"/>
+<label x="144.78" y="91.44" size="1.778" layer="95"/>
+<pinref part="IC1" gate="G$1" pin="P34_IOV5"/>
+</segment>
+</net>
+<net name="ADC_IN" class="0">
+<segment>
+<wire x1="223.52" y1="139.7" x2="220.98" y2="139.7" width="0.1524" layer="91"/>
+<label x="223.52" y="139.7" size="1.778" layer="95"/>
+<pinref part="IC8" gate="G$1" pin="ANALOGIN"/>
+</segment>
+</net>
+<net name="PWR_HI" class="0">
+<segment>
+<wire x1="81.28" y1="76.2" x2="83.82" y2="76.2" width="0.1524" layer="91"/>
+<label x="81.28" y="76.2" size="1.778" layer="95" rot="MR0"/>
+<pinref part="IC1" gate="G$1" pin="P80_IO1"/>
+</segment>
+</net>
+<net name="PWR_LO" class="0">
+<segment>
+<wire x1="81.28" y1="73.66" x2="83.82" y2="73.66" width="0.1524" layer="91"/>
+<label x="81.28" y="73.66" size="1.778" layer="95" rot="MR0"/>
+<pinref part="IC1" gate="G$1" pin="P81_IO1"/>
+</segment>
+</net>
+<net name="PWR_OE1" class="0">
+<segment>
+<wire x1="81.28" y1="71.12" x2="83.82" y2="71.12" width="0.1524" layer="91"/>
+<label x="81.28" y="71.12" size="1.778" layer="95" rot="MR0"/>
+<pinref part="IC1" gate="G$1" pin="P82_IOV1"/>
+</segment>
+</net>
+<net name="PWR_OE2" class="0">
+<segment>
+<wire x1="81.28" y1="68.58" x2="83.82" y2="68.58" width="0.1524" layer="91"/>
+<label x="81.28" y="68.58" size="1.778" layer="95" rot="MR0"/>
+<pinref part="IC1" gate="G$1" pin="P83_IO1"/>
+</segment>
+</net>
+<net name="SSP_FRAME" class="0">
+<segment>
+<wire x1="144.78" y1="96.52" x2="142.24" y2="96.52" width="0.1524" layer="91"/>
+<label x="144.78" y="96.52" size="1.778" layer="95"/>
+<pinref part="IC1" gate="G$1" pin="P31_IO5"/>
+</segment>
+</net>
+<net name="N$27" class="0">
+<segment>
+<wire x1="60.96" y1="93.98" x2="66.04" y2="93.98" width="0.1524" layer="91"/>
+<wire x1="66.04" y1="93.98" x2="66.04" y2="60.96" width="0.1524" layer="91"/>
+<wire x1="66.04" y1="60.96" x2="83.82" y2="60.96" width="0.1524" layer="91"/>
+<pinref part="R39" gate="G$1" pin="2"/>
+<pinref part="IC1" gate="G$1" pin="P87_IO1"/>
+</segment>
+</net>
+<net name="N$40" class="0">
+<segment>
+<wire x1="60.96" y1="86.36" x2="63.5" y2="86.36" width="0.1524" layer="91"/>
+<wire x1="63.5" y1="86.36" x2="63.5" y2="58.42" width="0.1524" layer="91"/>
+<wire x1="63.5" y1="58.42" x2="83.82" y2="58.42" width="0.1524" layer="91"/>
+<pinref part="R44" gate="G$1" pin="2"/>
+<pinref part="IC1" gate="G$1" pin="P88_IGCK1"/>
+</segment>
+</net>
+<net name="CROSS_LO" class="0">
+<segment>
+<wire x1="48.26" y1="93.98" x2="50.8" y2="93.98" width="0.1524" layer="91"/>
+<label x="48.26" y="93.98" size="1.778" layer="95" rot="MR0"/>
+<pinref part="R39" gate="G$1" pin="1"/>
+</segment>
+</net>
+<net name="CROSS_HI" class="0">
+<segment>
+<wire x1="48.26" y1="86.36" x2="50.8" y2="86.36" width="0.1524" layer="91"/>
+<label x="48.26" y="86.36" size="1.778" layer="95" rot="MR0"/>
+<pinref part="R44" gate="G$1" pin="1"/>
+</segment>
+</net>
+<net name="PWR_OE3" class="0">
+<segment>
+<wire x1="81.28" y1="66.04" x2="83.82" y2="66.04" width="0.1524" layer="91"/>
+<label x="81.28" y="66.04" size="1.778" layer="95" rot="MR0"/>
+<pinref part="IC1" gate="G$1" pin="P84_IO1"/>
+</segment>
+</net>
+<net name="PWR_OE4" class="0">
+<segment>
+<wire x1="81.28" y1="63.5" x2="83.82" y2="63.5" width="0.1524" layer="91"/>
+<label x="81.28" y="63.5" size="1.778" layer="95" rot="MR0"/>
+<pinref part="IC1" gate="G$1" pin="P86_IOV1"/>
+</segment>
+</net>
+<net name="N$55" class="0">
+<segment>
+<wire x1="142.24" y1="104.14" x2="149.86" y2="104.14" width="0.1524" layer="91"/>
+<wire x1="149.86" y1="104.14" x2="149.86" y2="106.68" width="0.1524" layer="91"/>
+<pinref part="IC1" gate="G$1" pin="P22_IO6"/>
+<pinref part="TP7" gate="G$1" pin="P$1"/>
+</segment>
+</net>
+<net name="N$48" class="0">
+<segment>
+<wire x1="243.84" y1="132.08" x2="243.84" y2="129.54" width="0.1524" layer="91"/>
+<wire x1="243.84" y1="129.54" x2="243.84" y2="127" width="0.1524" layer="91"/>
+<wire x1="233.68" y1="129.54" x2="220.98" y2="129.54" width="0.1524" layer="91"/>
+<wire x1="233.68" y1="129.54" x2="233.68" y2="104.14" width="0.1524" layer="91"/>
+<wire x1="243.84" y1="129.54" x2="233.68" y2="129.54" width="0.1524" layer="91"/>
+<junction x="243.84" y="129.54"/>
+<junction x="233.68" y="129.54"/>
+<pinref part="R52" gate="G$1" pin="1"/>
+<pinref part="R53" gate="G$1" pin="2"/>
+<pinref part="IC8" gate="G$1" pin="REFT"/>
+<pinref part="C19" gate="G$1" pin="1"/>
+</segment>
+</net>
+<net name="SSP_CLK" class="0">
+<segment>
+<wire x1="81.28" y1="83.82" x2="83.82" y2="83.82" width="0.1524" layer="91"/>
+<label x="81.28" y="83.82" size="1.778" layer="95" rot="MR0"/>
+<pinref part="IC1" gate="G$1" pin="P71_IO2"/>
+</segment>
+</net>
+<net name="PCK0" class="0">
+<segment>
+<wire x1="144.78" y1="88.9" x2="142.24" y2="88.9" width="0.1524" layer="91"/>
+<label x="144.78" y="88.9" size="1.778" layer="95"/>
+<pinref part="IC1" gate="G$1" pin="P36_IGCK5"/>
+</segment>
+</net>
+<net name="FPGA_NINIT" class="0">
+<segment>
+<wire x1="167.64" y1="60.96" x2="160.02" y2="60.96" width="0.1524" layer="91"/>
+<wire x1="160.02" y1="60.96" x2="142.24" y2="60.96" width="0.1524" layer="91"/>
+<wire x1="165.1" y1="50.8" x2="160.02" y2="50.8" width="0.1524" layer="91"/>
+<wire x1="160.02" y1="50.8" x2="160.02" y2="60.96" width="0.1524" layer="91"/>
+<junction x="160.02" y="60.96"/>
+<label x="167.64" y="60.96" size="1.778" layer="95"/>
+<pinref part="IC1" gate="G$1" pin="P52_IO3"/>
+<pinref part="R59" gate="G$1" pin="1"/>
+</segment>
+</net>
+</nets>
+</sheet>
+<sheet>
+<plain>
+<text x="165.1" y="17.78" size="2.54" layer="95">ARM micro and support</text>
+</plain>
+<instances>
+<instance part="FRAME3" gate="G$1" x="0" y="0"/>
+<instance part="IC2" gate="G$1" x="144.78" y="132.08"/>
+<instance part="V5" gate="GND" x="124.46" y="38.1"/>
+<instance part="U$2" gate="G$1" x="104.14" y="147.32"/>
+<instance part="R3" gate="G$1" x="71.12" y="127"/>
+<instance part="C4" gate="G$1" x="58.42" y="127" rot="R90"/>
+<instance part="C5" gate="G$1" x="58.42" y="137.16" rot="R90"/>
+<instance part="V8" gate="GND" x="48.26" y="121.92" rot="MR0"/>
+<instance part="XT2" gate="G$1" x="76.2" y="81.28" smashed="yes" rot="R90">
+<attribute name="NAME" x="75.0156" y="84.0901" size="1.778" layer="95" rot="R90"/>
+</instance>
+<instance part="C6" gate="G$1" x="66.04" y="91.44" rot="R90"/>
+<instance part="C7" gate="G$1" x="66.04" y="81.28" rot="R90"/>
+<instance part="V9" gate="GND" x="55.88" y="76.2" rot="MR0"/>
+<instance part="R4" gate="G$1" x="38.1" y="66.04"/>
+<instance part="R5" gate="G$1" x="38.1" y="58.42"/>
+<instance part="R6" gate="G$1" x="45.72" y="73.66" rot="R90"/>
+<instance part="C8" gate="G$1" x="144.78" y="149.86" rot="MR0"/>
+<instance part="C9" gate="G$1" x="154.94" y="149.86" rot="MR0"/>
+<instance part="V10" gate="GND" x="154.94" y="139.7"/>
+<instance part="SV3" gate="G$1" x="215.9" y="137.16" rot="R180"/>
+<instance part="V11" gate="GND" x="228.6" y="119.38"/>
+<instance part="U$6" gate="G$1" x="203.2" y="162.56"/>
+<instance part="R7" gate="G$1" x="203.2" y="149.86" rot="R90"/>
+<instance part="V12" gate="GND" x="27.94" y="96.52" rot="MR0"/>
+<instance part="R8" gate="G$1" x="58.42" y="114.3"/>
+<instance part="U$7" gate="G$1" x="27.94" y="132.08"/>
+<instance part="D4" gate="G$1" x="210.82" y="63.5" rot="R90"/>
+<instance part="D5" gate="G$1" x="210.82" y="55.88" rot="R90"/>
+<instance part="D6" gate="G$1" x="210.82" y="48.26" rot="R90"/>
+<instance part="R24" gate="G$1" x="198.12" y="63.5"/>
+<instance part="R25" gate="G$1" x="198.12" y="55.88"/>
+<instance part="R26" gate="G$1" x="198.12" y="48.26"/>
+<instance part="V40" gate="GND" x="218.44" y="33.02"/>
+<instance part="R43" gate="G$1" x="236.22" y="81.28" rot="R90"/>
+<instance part="U$9" gate="G$1" x="236.22" y="91.44" rot="MR0"/>
+<instance part="SW1" gate="G$1" x="236.22" y="60.96" rot="R90"/>
+<instance part="V50" gate="GND" x="236.22" y="50.8"/>
+<instance part="D9" gate="G$1" x="210.82" y="40.64" rot="R90"/>
+<instance part="R55" gate="G$1" x="198.12" y="40.64"/>
+<instance part="TP8" gate="G$1" x="185.42" y="35.56" rot="R90"/>
+<instance part="IC7" gate="G$1" x="38.1" y="121.92"/>
+</instances>
+<busses>
+<bus name="NCS,SPCK,MISO,MOSI">
+<segment>
+<wire x1="172.72" y1="101.6" x2="172.72" y2="93.98" width="0.762" layer="92"/>
+<wire x1="172.72" y1="93.98" x2="175.26" y2="91.44" width="0.762" layer="92"/>
+<label x="175.26" y="91.44" size="1.778" layer="95"/>
+</segment>
+</bus>
+</busses>
+<nets>
+<net name="GND" class="0">
+<segment>
+<wire x1="124.46" y1="45.72" x2="124.46" y2="43.18" width="0.1524" layer="91"/>
+<wire x1="124.46" y1="43.18" x2="124.46" y2="40.64" width="0.1524" layer="91"/>
+<wire x1="124.46" y1="43.18" x2="121.92" y2="43.18" width="0.1524" layer="91"/>
+<wire x1="121.92" y1="43.18" x2="121.92" y2="45.72" width="0.1524" layer="91"/>
+<wire x1="121.92" y1="43.18" x2="119.38" y2="43.18" width="0.1524" layer="91"/>
+<wire x1="119.38" y1="43.18" x2="119.38" y2="45.72" width="0.1524" layer="91"/>
+<wire x1="119.38" y1="43.18" x2="116.84" y2="43.18" width="0.1524" layer="91"/>
+<wire x1="116.84" y1="43.18" x2="116.84" y2="45.72" width="0.1524" layer="91"/>
+<junction x="124.46" y="43.18"/>
+<junction x="121.92" y="43.18"/>
+<junction x="119.38" y="43.18"/>
+<pinref part="IC2" gate="G$1" pin="GND0"/>
+<pinref part="V5" gate="GND" pin="GND"/>
+<pinref part="IC2" gate="G$1" pin="GND1"/>
+<pinref part="IC2" gate="G$1" pin="GND2"/>
+<pinref part="IC2" gate="G$1" pin="GND3"/>
+</segment>
+<segment>
+<wire x1="53.34" y1="127" x2="48.26" y2="127" width="0.1524" layer="91"/>
+<wire x1="48.26" y1="127" x2="48.26" y2="124.46" width="0.1524" layer="91"/>
+<wire x1="53.34" y1="137.16" x2="48.26" y2="137.16" width="0.1524" layer="91"/>
+<wire x1="48.26" y1="137.16" x2="48.26" y2="127" width="0.1524" layer="91"/>
+<junction x="48.26" y="127"/>
+<pinref part="C4" gate="G$1" pin="1"/>
+<pinref part="V8" gate="GND" pin="GND"/>
+<pinref part="C5" gate="G$1" pin="1"/>
+</segment>
+<segment>
+<wire x1="60.96" y1="91.44" x2="55.88" y2="91.44" width="0.1524" layer="91"/>
+<wire x1="55.88" y1="91.44" x2="55.88" y2="81.28" width="0.1524" layer="91"/>
+<wire x1="55.88" y1="81.28" x2="55.88" y2="78.74" width="0.1524" layer="91"/>
+<wire x1="60.96" y1="81.28" x2="55.88" y2="81.28" width="0.1524" layer="91"/>
+<junction x="55.88" y="81.28"/>
+<pinref part="C6" gate="G$1" pin="1"/>
+<pinref part="V9" gate="GND" pin="GND"/>
+<pinref part="C7" gate="G$1" pin="1"/>
+</segment>
+<segment>
+<wire x1="154.94" y1="147.32" x2="154.94" y2="144.78" width="0.1524" layer="91"/>
+<wire x1="154.94" y1="144.78" x2="154.94" y2="142.24" width="0.1524" layer="91"/>
+<wire x1="154.94" y1="144.78" x2="144.78" y2="144.78" width="0.1524" layer="91"/>
+<wire x1="144.78" y1="144.78" x2="144.78" y2="147.32" width="0.1524" layer="91"/>
+<junction x="154.94" y="144.78"/>
+<pinref part="C9" gate="G$1" pin="2"/>
+<pinref part="V10" gate="GND" pin="GND"/>
+<pinref part="C8" gate="G$1" pin="2"/>
+</segment>
+<segment>
+<wire x1="226.06" y1="144.78" x2="228.6" y2="144.78" width="0.1524" layer="91"/>
+<wire x1="228.6" y1="144.78" x2="228.6" y2="142.24" width="0.1524" layer="91"/>
+<wire x1="228.6" y1="142.24" x2="228.6" y2="139.7" width="0.1524" layer="91"/>
+<wire x1="228.6" y1="139.7" x2="228.6" y2="137.16" width="0.1524" layer="91"/>
+<wire x1="228.6" y1="137.16" x2="228.6" y2="134.62" width="0.1524" layer="91"/>
+<wire x1="228.6" y1="134.62" x2="228.6" y2="132.08" width="0.1524" layer="91"/>
+<wire x1="228.6" y1="132.08" x2="228.6" y2="129.54" width="0.1524" layer="91"/>
+<wire x1="228.6" y1="129.54" x2="228.6" y2="127" width="0.1524" layer="91"/>
+<wire x1="228.6" y1="127" x2="228.6" y2="124.46" width="0.1524" layer="91"/>
+<wire x1="228.6" y1="124.46" x2="228.6" y2="121.92" width="0.1524" layer="91"/>
+<wire x1="226.06" y1="124.46" x2="228.6" y2="124.46" width="0.1524" layer="91"/>
+<wire x1="226.06" y1="127" x2="228.6" y2="127" width="0.1524" layer="91"/>
+<wire x1="226.06" y1="129.54" x2="228.6" y2="129.54" width="0.1524" layer="91"/>
+<wire x1="226.06" y1="132.08" x2="228.6" y2="132.08" width="0.1524" layer="91"/>
+<wire x1="226.06" y1="134.62" x2="228.6" y2="134.62" width="0.1524" layer="91"/>
+<wire x1="226.06" y1="137.16" x2="228.6" y2="137.16" width="0.1524" layer="91"/>
+<wire x1="226.06" y1="139.7" x2="228.6" y2="139.7" width="0.1524" layer="91"/>
+<wire x1="226.06" y1="142.24" x2="228.6" y2="142.24" width="0.1524" layer="91"/>
+<junction x="228.6" y="124.46"/>
+<junction x="228.6" y="127"/>
+<junction x="228.6" y="129.54"/>
+<junction x="228.6" y="132.08"/>
+<junction x="228.6" y="134.62"/>
+<junction x="228.6" y="137.16"/>
+<junction x="228.6" y="139.7"/>
+<junction x="228.6" y="142.24"/>
+<pinref part="SV3" gate="G$1" pin="4"/>
+<pinref part="V11" gate="GND" pin="GND"/>
+<pinref part="SV3" gate="G$1" pin="20"/>
+<pinref part="SV3" gate="G$1" pin="18"/>
+<pinref part="SV3" gate="G$1" pin="16"/>
+<pinref part="SV3" gate="G$1" pin="14"/>
+<pinref part="SV3" gate="G$1" pin="12"/>
+<pinref part="SV3" gate="G$1" pin="10"/>
+<pinref part="SV3" gate="G$1" pin="8"/>
+<pinref part="SV3" gate="G$1" pin="6"/>
+</segment>
+<segment>
+<wire x1="27.94" y1="101.6" x2="27.94" y2="99.06" width="0.1524" layer="91"/>
+<pinref part="V12" gate="GND" pin="GND"/>
+<pinref part="IC7" gate="G$1" pin="V-"/>
+</segment>
+<segment>
+<wire x1="213.36" y1="63.5" x2="218.44" y2="63.5" width="0.1524" layer="91"/>
+<wire x1="218.44" y1="63.5" x2="218.44" y2="55.88" width="0.1524" layer="91"/>
+<wire x1="218.44" y1="55.88" x2="218.44" y2="48.26" width="0.1524" layer="91"/>
+<wire x1="218.44" y1="48.26" x2="218.44" y2="40.64" width="0.1524" layer="91"/>
+<wire x1="218.44" y1="40.64" x2="218.44" y2="35.56" width="0.1524" layer="91"/>
+<wire x1="213.36" y1="55.88" x2="218.44" y2="55.88" width="0.1524" layer="91"/>
+<wire x1="213.36" y1="48.26" x2="218.44" y2="48.26" width="0.1524" layer="91"/>
+<wire x1="213.36" y1="40.64" x2="218.44" y2="40.64" width="0.1524" layer="91"/>
+<junction x="218.44" y="55.88"/>
+<junction x="218.44" y="48.26"/>
+<junction x="218.44" y="40.64"/>
+<pinref part="D4" gate="G$1" pin="C"/>
+<pinref part="V40" gate="GND" pin="GND"/>
+<pinref part="D5" gate="G$1" pin="C"/>
+<pinref part="D6" gate="G$1" pin="C"/>
+<pinref part="D9" gate="G$1" pin="C"/>
+</segment>
+<segment>
+<wire x1="236.22" y1="55.88" x2="236.22" y2="53.34" width="0.1524" layer="91"/>
+<pinref part="SW1" gate="G$1" pin="P$1"/>
+<pinref part="V50" gate="GND" pin="GND"/>
+</segment>
+</net>
+<net name="+3V3" class="0">
+<segment>
+<wire x1="104.14" y1="144.78" x2="104.14" y2="142.24" width="0.1524" layer="91"/>
+<wire x1="104.14" y1="142.24" x2="104.14" y2="139.7" width="0.1524" layer="91"/>
+<wire x1="104.14" y1="142.24" x2="106.68" y2="142.24" width="0.1524" layer="91"/>
+<wire x1="106.68" y1="142.24" x2="106.68" y2="139.7" width="0.1524" layer="91"/>
+<wire x1="106.68" y1="142.24" x2="109.22" y2="142.24" width="0.1524" layer="91"/>
+<wire x1="109.22" y1="142.24" x2="109.22" y2="139.7" width="0.1524" layer="91"/>
+<wire x1="109.22" y1="142.24" x2="111.76" y2="142.24" width="0.1524" layer="91"/>
+<wire x1="111.76" y1="142.24" x2="111.76" y2="139.7" width="0.1524" layer="91"/>
+<wire x1="111.76" y1="142.24" x2="114.3" y2="142.24" width="0.1524" layer="91"/>
+<wire x1="114.3" y1="142.24" x2="114.3" y2="139.7" width="0.1524" layer="91"/>
+<junction x="104.14" y="142.24"/>
+<junction x="106.68" y="142.24"/>
+<junction x="109.22" y="142.24"/>
+<junction x="111.76" y="142.24"/>
+<pinref part="U$2" gate="G$1" pin="+3V3"/>
+<pinref part="IC2" gate="G$1" pin="VDDIO0"/>
+<pinref part="IC2" gate="G$1" pin="VDDIO1"/>
+<pinref part="IC2" gate="G$1" pin="VDDIO2"/>
+<pinref part="IC2" gate="G$1" pin="VDDFLASH"/>
+<pinref part="IC2" gate="G$1" pin="VDDIN"/>
+</segment>
+<segment>
+<wire x1="81.28" y1="68.58" x2="83.82" y2="68.58" width="0.1524" layer="91"/>
+<label x="81.28" y="68.58" size="1.778" layer="95" rot="MR0"/>
+<pinref part="IC2" gate="G$1" pin="ADVREF"/>
+</segment>
+<segment>
+<wire x1="210.82" y1="147.32" x2="208.28" y2="147.32" width="0.1524" layer="91"/>
+<wire x1="208.28" y1="147.32" x2="208.28" y2="157.48" width="0.1524" layer="91"/>
+<wire x1="203.2" y1="160.02" x2="203.2" y2="157.48" width="0.1524" layer="91"/>
+<wire x1="203.2" y1="157.48" x2="203.2" y2="154.94" width="0.1524" layer="91"/>
+<wire x1="208.28" y1="157.48" x2="203.2" y2="157.48" width="0.1524" layer="91"/>
+<junction x="203.2" y="157.48"/>
+<pinref part="SV3" gate="G$1" pin="1"/>
+<pinref part="U$6" gate="G$1" pin="+3V3"/>
+<pinref part="R7" gate="G$1" pin="2"/>
+</segment>
+<segment>
+<wire x1="27.94" y1="129.54" x2="27.94" y2="127" width="0.1524" layer="91"/>
+<pinref part="U$7" gate="G$1" pin="+3V3"/>
+<pinref part="IC7" gate="G$1" pin="V+"/>
+</segment>
+<segment>
+<wire x1="236.22" y1="88.9" x2="236.22" y2="86.36" width="0.1524" layer="91"/>
+<pinref part="U$9" gate="G$1" pin="+3V3"/>
+<pinref part="R43" gate="G$1" pin="2"/>
+</segment>
+</net>
+<net name="N$2" class="0">
+<segment>
+<wire x1="60.96" y1="137.16" x2="78.74" y2="137.16" width="0.1524" layer="91"/>
+<wire x1="78.74" y1="137.16" x2="78.74" y2="127" width="0.1524" layer="91"/>
+<wire x1="78.74" y1="127" x2="83.82" y2="127" width="0.1524" layer="91"/>
+<wire x1="78.74" y1="127" x2="76.2" y2="127" width="0.1524" layer="91"/>
+<junction x="78.74" y="127"/>
+<pinref part="C5" gate="G$1" pin="2"/>
+<pinref part="IC2" gate="G$1" pin="PLLRC"/>
+<pinref part="R3" gate="G$1" pin="2"/>
+</segment>
+</net>
+<net name="N$6" class="0">
+<segment>
+<wire x1="66.04" y1="127" x2="60.96" y2="127" width="0.1524" layer="91"/>
+<pinref part="R3" gate="G$1" pin="1"/>
+<pinref part="C4" gate="G$1" pin="2"/>
+</segment>
+</net>
+<net name="N$7" class="0">
+<segment>
+<wire x1="83.82" y1="91.44" x2="78.74" y2="91.44" width="0.1524" layer="91"/>
+<wire x1="78.74" y1="91.44" x2="68.58" y2="91.44" width="0.1524" layer="91"/>
+<junction x="78.74" y="91.44"/>
+<pinref part="IC2" gate="G$1" pin="XOUT"/>
+<pinref part="XT2" gate="G$1" pin="B"/>
+<pinref part="C6" gate="G$1" pin="2"/>
+</segment>
+</net>
+<net name="N$8" class="0">
+<segment>
+<wire x1="68.58" y1="81.28" x2="78.74" y2="81.28" width="0.1524" layer="91"/>
+<wire x1="78.74" y1="81.28" x2="83.82" y2="81.28" width="0.1524" layer="91"/>
+<junction x="78.74" y="81.28"/>
+<pinref part="C7" gate="G$1" pin="2"/>
+<pinref part="XT2" gate="G$1" pin="A"/>
+<pinref part="IC2" gate="G$1" pin="XIN/PGMCK"/>
+</segment>
+</net>
+<net name="N$11" class="0">
+<segment>
+<wire x1="43.18" y1="66.04" x2="63.5" y2="66.04" width="0.1524" layer="91"/>
+<wire x1="63.5" y1="66.04" x2="63.5" y2="76.2" width="0.1524" layer="91"/>
+<wire x1="63.5" y1="76.2" x2="83.82" y2="76.2" width="0.1524" layer="91"/>
+<pinref part="R4" gate="G$1" pin="2"/>
+<pinref part="IC2" gate="G$1" pin="DDM"/>
+</segment>
+</net>
+<net name="N$12" class="0">
+<segment>
+<wire x1="83.82" y1="73.66" x2="66.04" y2="73.66" width="0.1524" layer="91"/>
+<wire x1="66.04" y1="73.66" x2="66.04" y2="58.42" width="0.1524" layer="91"/>
+<wire x1="66.04" y1="58.42" x2="45.72" y2="58.42" width="0.1524" layer="91"/>
+<wire x1="45.72" y1="58.42" x2="43.18" y2="58.42" width="0.1524" layer="91"/>
+<wire x1="45.72" y1="68.58" x2="45.72" y2="58.42" width="0.1524" layer="91"/>
+<junction x="45.72" y="58.42"/>
+<pinref part="IC2" gate="G$1" pin="DDP"/>
+<pinref part="R5" gate="G$1" pin="2"/>
+<pinref part="R6" gate="G$1" pin="1"/>
+</segment>
+</net>
+<net name="USB_PU" class="0">
+<segment>
+<wire x1="45.72" y1="78.74" x2="45.72" y2="81.28" width="0.1524" layer="91"/>
+<wire x1="45.72" y1="81.28" x2="43.18" y2="81.28" width="0.1524" layer="91"/>
+<label x="43.18" y="81.28" size="1.778" layer="95" rot="MR0"/>
+<pinref part="R6" gate="G$1" pin="2"/>
+</segment>
+<segment>
+<wire x1="152.4" y1="71.12" x2="149.86" y2="71.12" width="0.1524" layer="91"/>
+<label x="152.4" y="71.12" size="1.778" layer="95"/>
+<pinref part="IC2" gate="G$1" pin="PA24"/>
+</segment>
+</net>
+<net name="USB_D-" class="0">
+<segment>
+<wire x1="30.48" y1="66.04" x2="33.02" y2="66.04" width="0.1524" layer="91"/>
+<label x="30.48" y="66.04" size="1.778" layer="95" rot="MR0"/>
+<pinref part="R4" gate="G$1" pin="1"/>
+</segment>
+</net>
+<net name="USB_D+" class="0">
+<segment>
+<wire x1="30.48" y1="58.42" x2="33.02" y2="58.42" width="0.1524" layer="91"/>
+<label x="30.48" y="58.42" size="1.778" layer="95" rot="MR0"/>
+<pinref part="R5" gate="G$1" pin="1"/>
+</segment>
+</net>
+<net name="N$10" class="0">
+<segment>
+<wire x1="132.08" y1="142.24" x2="132.08" y2="139.7" width="0.1524" layer="91"/>
+<wire x1="129.54" y1="142.24" x2="132.08" y2="142.24" width="0.1524" layer="91"/>
+<wire x1="129.54" y1="139.7" x2="129.54" y2="142.24" width="0.1524" layer="91"/>
+<wire x1="127" y1="142.24" x2="129.54" y2="142.24" width="0.1524" layer="91"/>
+<wire x1="127" y1="139.7" x2="127" y2="142.24" width="0.1524" layer="91"/>
+<wire x1="124.46" y1="142.24" x2="127" y2="142.24" width="0.1524" layer="91"/>
+<wire x1="124.46" y1="139.7" x2="124.46" y2="142.24" width="0.1524" layer="91"/>
+<wire x1="121.92" y1="142.24" x2="124.46" y2="142.24" width="0.1524" layer="91"/>
+<wire x1="121.92" y1="142.24" x2="121.92" y2="139.7" width="0.1524" layer="91"/>
+<wire x1="132.08" y1="142.24" x2="132.08" y2="157.48" width="0.1524" layer="91"/>
+<wire x1="154.94" y1="154.94" x2="154.94" y2="157.48" width="0.1524" layer="91"/>
+<wire x1="154.94" y1="157.48" x2="144.78" y2="157.48" width="0.1524" layer="91"/>
+<wire x1="144.78" y1="157.48" x2="144.78" y2="154.94" width="0.1524" layer="91"/>
+<wire x1="132.08" y1="157.48" x2="144.78" y2="157.48" width="0.1524" layer="91"/>
+<junction x="129.54" y="142.24"/>
+<junction x="127" y="142.24"/>
+<junction x="124.46" y="142.24"/>
+<junction x="132.08" y="142.24"/>
+<junction x="144.78" y="157.48"/>
+<pinref part="IC2" gate="G$1" pin="VDDOUT"/>
+<pinref part="IC2" gate="G$1" pin="VDDCORE2"/>
+<pinref part="IC2" gate="G$1" pin="VDDCORE1"/>
+<pinref part="IC2" gate="G$1" pin="VDDCORE0"/>
+<pinref part="IC2" gate="G$1" pin="VDDPLL"/>
+<pinref part="C8" gate="G$1" pin="1"/>
+<pinref part="C9" gate="G$1" pin="1"/>
+</segment>
+</net>
+<net name="ARM_TMS" class="0">
+<segment>
+<wire x1="81.28" y1="111.76" x2="83.82" y2="111.76" width="0.1524" layer="91"/>
+<label x="81.28" y="111.76" size="1.778" layer="95" rot="MR0"/>
+<pinref part="IC2" gate="G$1" pin="TMS"/>
+</segment>
+<segment>
+<wire x1="198.12" y1="139.7" x2="210.82" y2="139.7" width="0.1524" layer="91"/>
+<label x="198.12" y="139.7" size="1.778" layer="95" rot="MR0"/>
+<pinref part="SV3" gate="G$1" pin="7"/>
+</segment>
+</net>
+<net name="ARM_TCK" class="0">
+<segment>
+<wire x1="81.28" y1="109.22" x2="83.82" y2="109.22" width="0.1524" layer="91"/>
+<label x="81.28" y="109.22" size="1.778" layer="95" rot="MR0"/>
+<pinref part="IC2" gate="G$1" pin="TCK"/>
+</segment>
+<segment>
+<wire x1="198.12" y1="137.16" x2="203.2" y2="137.16" width="0.1524" layer="91"/>
+<wire x1="203.2" y1="137.16" x2="210.82" y2="137.16" width="0.1524" layer="91"/>
+<wire x1="203.2" y1="144.78" x2="203.2" y2="137.16" width="0.1524" layer="91"/>
+<junction x="203.2" y="137.16"/>
+<label x="198.12" y="137.16" size="1.778" layer="95" rot="MR0"/>
+<pinref part="SV3" gate="G$1" pin="9"/>
+<pinref part="R7" gate="G$1" pin="1"/>
+</segment>
+</net>
+<net name="ARM_TDO" class="0">
+<segment>
+<wire x1="81.28" y1="106.68" x2="83.82" y2="106.68" width="0.1524" layer="91"/>
+<label x="81.28" y="106.68" size="1.778" layer="95" rot="MR0"/>
+<pinref part="IC2" gate="G$1" pin="TDO"/>
+</segment>
+<segment>
+<wire x1="198.12" y1="132.08" x2="210.82" y2="132.08" width="0.1524" layer="91"/>
+<label x="198.12" y="132.08" size="1.778" layer="95" rot="MR0"/>
+<pinref part="SV3" gate="G$1" pin="13"/>
+</segment>
+</net>
+<net name="ARM_TDI" class="0">
+<segment>
+<wire x1="81.28" y1="104.14" x2="83.82" y2="104.14" width="0.1524" layer="91"/>
+<label x="81.28" y="104.14" size="1.778" layer="95" rot="MR0"/>
+<pinref part="IC2" gate="G$1" pin="TDI"/>
+</segment>
+<segment>
+<wire x1="198.12" y1="142.24" x2="210.82" y2="142.24" width="0.1524" layer="91"/>
+<label x="198.12" y="142.24" size="1.778" layer="95" rot="MR0"/>
+<pinref part="SV3" gate="G$1" pin="5"/>
+</segment>
+</net>
+<net name="N$9" class="0">
+<segment>
+<wire x1="63.5" y1="114.3" x2="83.82" y2="114.3" width="0.1524" layer="91"/>
+<pinref part="R8" gate="G$1" pin="2"/>
+<pinref part="IC2" gate="G$1" pin="NRST"/>
+</segment>
+</net>
+<net name="N$13" class="0">
+<segment>
+<wire x1="53.34" y1="114.3" x2="40.64" y2="114.3" width="0.1524" layer="91"/>
+<pinref part="R8" gate="G$1" pin="1"/>
+<pinref part="IC7" gate="G$1" pin="OUT"/>
+</segment>
+</net>
+<net name="NCS" class="0">
+<segment>
+<wire x1="172.72" y1="101.6" x2="170.18" y2="104.14" width="0.1524" layer="91"/>
+<wire x1="170.18" y1="104.14" x2="149.86" y2="104.14" width="0.1524" layer="91"/>
+<label x="152.4" y="104.14" size="1.778" layer="95"/>
+<pinref part="IC2" gate="G$1" pin="PA11"/>
+</segment>
+</net>
+<net name="MISO" class="0">
+<segment>
+<wire x1="172.72" y1="99.06" x2="170.18" y2="101.6" width="0.1524" layer="91"/>
+<wire x1="170.18" y1="101.6" x2="149.86" y2="101.6" width="0.1524" layer="91"/>
+<label x="152.4" y="101.6" size="1.778" layer="95"/>
+<pinref part="IC2" gate="G$1" pin="PA12"/>
+</segment>
+</net>
+<net name="MOSI" class="0">
+<segment>
+<wire x1="172.72" y1="96.52" x2="170.18" y2="99.06" width="0.1524" layer="91"/>
+<wire x1="170.18" y1="99.06" x2="149.86" y2="99.06" width="0.1524" layer="91"/>
+<label x="152.4" y="99.06" size="1.778" layer="95"/>
+<pinref part="IC2" gate="G$1" pin="PA13"/>
+</segment>
+</net>
+<net name="SPCK" class="0">
+<segment>
+<wire x1="172.72" y1="93.98" x2="170.18" y2="96.52" width="0.1524" layer="91"/>
+<wire x1="170.18" y1="96.52" x2="149.86" y2="96.52" width="0.1524" layer="91"/>
+<label x="152.4" y="96.52" size="1.778" layer="95"/>
+<pinref part="IC2" gate="G$1" pin="PA14"/>
+</segment>
+</net>
+<net name="N$28" class="0">
+<segment>
+<wire x1="203.2" y1="48.26" x2="205.74" y2="48.26" width="0.1524" layer="91"/>
+<pinref part="R26" gate="G$1" pin="2"/>
+<pinref part="D6" gate="G$1" pin="A"/>
+</segment>
+</net>
+<net name="N$29" class="0">
+<segment>
+<wire x1="203.2" y1="55.88" x2="205.74" y2="55.88" width="0.1524" layer="91"/>
+<pinref part="R25" gate="G$1" pin="2"/>
+<pinref part="D5" gate="G$1" pin="A"/>
+</segment>
+</net>
+<net name="N$30" class="0">
+<segment>
+<wire x1="203.2" y1="63.5" x2="205.74" y2="63.5" width="0.1524" layer="91"/>
+<pinref part="R24" gate="G$1" pin="2"/>
+<pinref part="D4" gate="G$1" pin="A"/>
+</segment>
+</net>
+<net name="AMPL_LO" class="0">
+<segment>
+<wire x1="81.28" y1="66.04" x2="83.82" y2="66.04" width="0.1524" layer="91"/>
+<label x="81.28" y="66.04" size="1.778" layer="95" rot="MR0"/>
+<pinref part="IC2" gate="G$1" pin="AD4"/>
+</segment>
+</net>
+<net name="AMPL_HI" class="0">
+<segment>
+<wire x1="81.28" y1="63.5" x2="83.82" y2="63.5" width="0.1524" layer="91"/>
+<label x="81.28" y="63.5" size="1.778" layer="95" rot="MR0"/>
+<pinref part="IC2" gate="G$1" pin="AD5"/>
+</segment>
+</net>
+<net name="BUTTON_A" class="0">
+<segment>
+<wire x1="149.86" y1="73.66" x2="152.4" y2="73.66" width="0.1524" layer="91"/>
+<label x="152.4" y="73.66" size="1.778" layer="95"/>
+<pinref part="IC2" gate="G$1" pin="PA23"/>
+</segment>
+<segment>
+<wire x1="236.22" y1="71.12" x2="236.22" y2="73.66" width="0.1524" layer="91"/>
+<wire x1="236.22" y1="73.66" x2="236.22" y2="76.2" width="0.1524" layer="91"/>
+<wire x1="236.22" y1="73.66" x2="228.6" y2="73.66" width="0.1524" layer="91"/>
+<junction x="236.22" y="73.66"/>
+<label x="228.6" y="73.66" size="1.778" layer="95" rot="MR0"/>
+<pinref part="SW1" gate="G$1" pin="P$2"/>
+<pinref part="R43" gate="G$1" pin="1"/>
+</segment>
+</net>
+<net name="LED_A" class="0">
+<segment>
+<wire x1="152.4" y1="132.08" x2="149.86" y2="132.08" width="0.1524" layer="91"/>
+<label x="152.4" y="132.08" size="1.778" layer="95"/>
+<pinref part="IC2" gate="G$1" pin="PA0"/>
+</segment>
+<segment>
+<wire x1="190.5" y1="63.5" x2="193.04" y2="63.5" width="0.1524" layer="91"/>
+<label x="190.5" y="63.5" size="1.778" layer="95" rot="MR0"/>
+<pinref part="R24" gate="G$1" pin="1"/>
+</segment>
+</net>
+<net name="LED_B" class="0">
+<segment>
+<wire x1="152.4" y1="111.76" x2="149.86" y2="111.76" width="0.1524" layer="91"/>
+<label x="152.4" y="111.76" size="1.778" layer="95"/>
+<pinref part="IC2" gate="G$1" pin="PA8"/>
+</segment>
+<segment>
+<wire x1="190.5" y1="55.88" x2="193.04" y2="55.88" width="0.1524" layer="91"/>
+<label x="190.5" y="55.88" size="1.778" layer="95" rot="MR0"/>
+<pinref part="R25" gate="G$1" pin="1"/>
+</segment>
+</net>
+<net name="LED_C" class="0">
+<segment>
+<wire x1="152.4" y1="109.22" x2="149.86" y2="109.22" width="0.1524" layer="91"/>
+<label x="152.4" y="109.22" size="1.778" layer="95"/>
+<pinref part="IC2" gate="G$1" pin="PA9"/>
+</segment>
+<segment>
+<wire x1="190.5" y1="48.26" x2="193.04" y2="48.26" width="0.1524" layer="91"/>
+<label x="190.5" y="48.26" size="1.778" layer="95" rot="MR0"/>
+<pinref part="R26" gate="G$1" pin="1"/>
+</segment>
+</net>
+<net name="SSP_DIN" class="0">
+<segment>
+<wire x1="152.4" y1="86.36" x2="149.86" y2="86.36" width="0.1524" layer="91"/>
+<label x="152.4" y="86.36" size="1.778" layer="95"/>
+<pinref part="IC2" gate="G$1" pin="PA18/AD1"/>
+</segment>
+</net>
+<net name="SSP_DOUT" class="0">
+<segment>
+<wire x1="152.4" y1="88.9" x2="149.86" y2="88.9" width="0.1524" layer="91"/>
+<label x="152.4" y="88.9" size="1.778" layer="95"/>
+<pinref part="IC2" gate="G$1" pin="PA17/AD0"/>
+</segment>
+</net>
+<net name="FPGA_DONE" class="0">
+<segment>
+<wire x1="152.4" y1="63.5" x2="149.86" y2="63.5" width="0.1524" layer="91"/>
+<label x="152.4" y="63.5" size="1.778" layer="95"/>
+<pinref part="IC2" gate="G$1" pin="PA27"/>
+</segment>
+</net>
+<net name="FPGA_NPROGRAM" class="0">
+<segment>
+<wire x1="152.4" y1="60.96" x2="149.86" y2="60.96" width="0.1524" layer="91"/>
+<label x="152.4" y="60.96" size="1.778" layer="95"/>
+<pinref part="IC2" gate="G$1" pin="PA28"/>
+</segment>
+</net>
+<net name="FPGA_CCLK" class="0">
+<segment>
+<wire x1="152.4" y1="58.42" x2="149.86" y2="58.42" width="0.1524" layer="91"/>
+<label x="152.4" y="58.42" size="1.778" layer="95"/>
+<pinref part="IC2" gate="G$1" pin="PA29"/>
+</segment>
+</net>
+<net name="FPGA_DIN" class="0">
+<segment>
+<wire x1="152.4" y1="55.88" x2="149.86" y2="55.88" width="0.1524" layer="91"/>
+<label x="152.4" y="55.88" size="1.778" layer="95"/>
+<pinref part="IC2" gate="G$1" pin="PA30"/>
+</segment>
+</net>
+<net name="FPGA_DOUT" class="0">
+<segment>
+<wire x1="152.4" y1="53.34" x2="149.86" y2="53.34" width="0.1524" layer="91"/>
+<label x="152.4" y="53.34" size="1.778" layer="95"/>
+<pinref part="IC2" gate="G$1" pin="PA31"/>
+</segment>
+</net>
+<net name="FPGA_ON" class="0">
+<segment>
+<wire x1="152.4" y1="66.04" x2="149.86" y2="66.04" width="0.1524" layer="91"/>
+<label x="152.4" y="66.04" size="1.778" layer="95"/>
+<pinref part="IC2" gate="G$1" pin="PA26"/>
+</segment>
+</net>
+<net name="RELAY_ON" class="0">
+<segment>
+<wire x1="152.4" y1="68.58" x2="149.86" y2="68.58" width="0.1524" layer="91"/>
+<label x="152.4" y="68.58" size="1.778" layer="95"/>
+<pinref part="IC2" gate="G$1" pin="PA25"/>
+</segment>
+</net>
+<net name="SSP_CLK" class="0">
+<segment>
+<wire x1="152.4" y1="91.44" x2="149.86" y2="91.44" width="0.1524" layer="91"/>
+<label x="152.4" y="91.44" size="1.778" layer="95"/>
+<pinref part="IC2" gate="G$1" pin="PA16"/>
+</segment>
+</net>
+<net name="SSP_FRAME" class="0">
+<segment>
+<wire x1="152.4" y1="93.98" x2="149.86" y2="93.98" width="0.1524" layer="91"/>
+<label x="152.4" y="93.98" size="1.778" layer="95"/>
+<pinref part="IC2" gate="G$1" pin="PA15"/>
+</segment>
+</net>
+<net name="MUXSEL_HIPKD" class="0">
+<segment>
+<wire x1="152.4" y1="83.82" x2="149.86" y2="83.82" width="0.1524" layer="91"/>
+<label x="152.4" y="83.82" size="1.778" layer="95"/>
+<pinref part="IC2" gate="G$1" pin="PA19/AD2"/>
+</segment>
+</net>
+<net name="MUXSEL_LOPKD" class="0">
+<segment>
+<wire x1="152.4" y1="81.28" x2="149.86" y2="81.28" width="0.1524" layer="91"/>
+<label x="152.4" y="81.28" size="1.778" layer="95"/>
+<pinref part="IC2" gate="G$1" pin="PA20/AD3"/>
+</segment>
+</net>
+<net name="MUXSEL_HIRAW" class="0">
+<segment>
+<wire x1="152.4" y1="78.74" x2="149.86" y2="78.74" width="0.1524" layer="91"/>
+<label x="152.4" y="78.74" size="1.778" layer="95"/>
+<pinref part="IC2" gate="G$1" pin="PA21"/>
+</segment>
+</net>
+<net name="MUXSEL_LORAW" class="0">
+<segment>
+<wire x1="152.4" y1="76.2" x2="149.86" y2="76.2" width="0.1524" layer="91"/>
+<label x="152.4" y="76.2" size="1.778" layer="95"/>
+<pinref part="IC2" gate="G$1" pin="PA22"/>
+</segment>
+</net>
+<net name="PCK0" class="0">
+<segment>
+<wire x1="152.4" y1="116.84" x2="149.86" y2="116.84" width="0.1524" layer="91"/>
+<label x="152.4" y="116.84" size="1.778" layer="95"/>
+<pinref part="IC2" gate="G$1" pin="PA6"/>
+</segment>
+</net>
+<net name="LED_D" class="0">
+<segment>
+<wire x1="152.4" y1="127" x2="149.86" y2="127" width="0.1524" layer="91"/>
+<label x="152.4" y="127" size="1.778" layer="95"/>
+<pinref part="IC2" gate="G$1" pin="PA2"/>
+</segment>
+<segment>
+<wire x1="187.96" y1="35.56" x2="190.5" y2="35.56" width="0.1524" layer="91"/>
+<wire x1="193.04" y1="40.64" x2="190.5" y2="40.64" width="0.1524" layer="91"/>
+<wire x1="190.5" y1="40.64" x2="187.96" y2="40.64" width="0.1524" layer="91"/>
+<wire x1="190.5" y1="35.56" x2="190.5" y2="40.64" width="0.1524" layer="91"/>
+<junction x="190.5" y="40.64"/>
+<label x="187.96" y="40.64" size="1.778" layer="95" rot="MR0"/>
+<pinref part="TP8" gate="G$1" pin="P$1"/>
+<pinref part="R55" gate="G$1" pin="1"/>
+</segment>
+</net>
+<net name="N$25" class="0">
+<segment>
+<wire x1="203.2" y1="40.64" x2="205.74" y2="40.64" width="0.1524" layer="91"/>
+<pinref part="R55" gate="G$1" pin="2"/>
+<pinref part="D9" gate="G$1" pin="A"/>
+</segment>
+</net>
+<net name="NVDD_ON" class="0">
+<segment>
+<wire x1="152.4" y1="124.46" x2="149.86" y2="124.46" width="0.1524" layer="91"/>
+<label x="152.4" y="124.46" size="1.778" layer="95"/>
+<pinref part="IC2" gate="G$1" pin="PA3"/>
+</segment>
+</net>
+<net name="FPGA_NINIT" class="0">
+<segment>
+<wire x1="152.4" y1="121.92" x2="149.86" y2="121.92" width="0.1524" layer="91"/>
+<label x="152.4" y="121.92" size="1.778" layer="95"/>
+<pinref part="IC2" gate="G$1" pin="PA4"/>
+</segment>
+</net>
+</nets>
+</sheet>
+<sheet>
+<plain>
+<text x="165.1" y="17.78" size="2.54" layer="95">analog rx path</text>
+<text x="35.56" y="33.02" size="1.778" layer="95" rot="R180">D2, D3 are BAR18</text>
+</plain>
+<instances>
+<instance part="FRAME4" gate="G$1" x="0" y="0"/>
+<instance part="IC6" gate="A" x="208.28" y="152.4" rot="MR180"/>
+<instance part="IC6" gate="B" x="101.6" y="129.54" rot="MR180"/>
+<instance part="IC6" gate="C" x="132.08" y="43.18" rot="MR180"/>
+<instance part="IC6" gate="D" x="177.8" y="43.18" rot="MR180"/>
+<instance part="IC6" gate="P" x="238.76" y="116.84"/>
+<instance part="R9" gate="G$1" x="195.58" y="157.48" rot="R90"/>
+<instance part="R10" gate="G$1" x="195.58" y="142.24" rot="R90"/>
+<instance part="V13" gate="G$1" x="238.76" y="157.48" rot="R270"/>
+<instance part="V14" gate="GND" x="195.58" y="132.08"/>
+<instance part="C10" gate="G$1" x="231.14" y="142.24"/>
+<instance part="V15" gate="GND" x="241.3" y="132.08"/>
+<instance part="D1" gate="G$1" x="38.1" y="127"/>
+<instance part="R11" gate="G$1" x="60.96" y="119.38" rot="R90"/>
+<instance part="C11" gate="G$1" x="48.26" y="119.38"/>
+<instance part="C12" gate="G$1" x="83.82" y="127" rot="R90"/>
+<instance part="R12" gate="G$1" x="88.9" y="119.38" rot="R90"/>
+<instance part="V16" gate="G$1" x="93.98" y="111.76" rot="MR90"/>
+<instance part="R13" gate="G$1" x="86.36" y="142.24"/>
+<instance part="V17" gate="G$1" x="76.2" y="142.24" rot="R90"/>
+<instance part="R14" gate="G$1" x="104.14" y="142.24"/>
+<instance part="C13" gate="G$1" x="109.22" y="149.86" rot="R90"/>
+<instance part="V18" gate="GND" x="60.96" y="106.68"/>
+<instance part="D2" gate="G$1" x="50.8" y="40.64"/>
+<instance part="C14" gate="G$1" x="38.1" y="40.64" rot="R90"/>
+<instance part="D3" gate="G$1" x="43.18" y="30.48" rot="R90"/>
+<instance part="V19" gate="GND" x="78.74" y="17.78"/>
+<instance part="C15" gate="G$1" x="66.04" y="30.48"/>
+<instance part="R15" gate="G$1" x="78.74" y="30.48" rot="R90"/>
+<instance part="R16" gate="G$1" x="88.9" y="40.64"/>
+<instance part="C16" gate="G$1" x="101.6" y="40.64" rot="R90"/>
+<instance part="R17" gate="G$1" x="119.38" y="30.48" rot="R90"/>
+<instance part="V20" gate="G$1" x="134.62" y="22.86" rot="MR90"/>
+<instance part="R18" gate="G$1" x="132.08" y="55.88"/>
+<instance part="C17" gate="G$1" x="137.16" y="63.5" rot="R90"/>
+<instance part="R19" gate="G$1" x="116.84" y="53.34"/>
+<instance part="V21" gate="G$1" x="106.68" y="53.34" rot="R90"/>
+<instance part="V22" gate="GND" x="68.58" y="152.4" rot="MR0"/>
+<instance part="R20" gate="G$1" x="60.96" y="162.56"/>
+<instance part="V23" gate="GND" x="238.76" y="91.44"/>
+<instance part="VDD2" gate="G$1" x="215.9" y="129.54"/>
+<instance part="VDD3" gate="G$1" x="195.58" y="167.64"/>
+<instance part="IC11" gate="G$1" x="203.2" y="81.28"/>
+<instance part="V33" gate="GND" x="215.9" y="43.18"/>
+<instance part="VDD8" gate="G$1" x="205.74" y="96.52"/>
+<instance part="IC5" gate="A" x="73.66" y="160.02"/>
+<instance part="IC5" gate="B" x="119.38" y="78.74"/>
+<instance part="IC5" gate="P" x="215.9" y="116.84"/>
+<instance part="V34" gate="GND" x="111.76" y="71.12" rot="MR0"/>
+<instance part="R21" gate="G$1" x="106.68" y="81.28"/>
+<instance part="R30" gate="G$1" x="45.72" y="142.24" rot="R90"/>
+<instance part="R31" gate="G$1" x="55.88" y="142.24" rot="R90"/>
+<instance part="V42" gate="GND" x="55.88" y="134.62"/>
+<instance part="V43" gate="GND" x="170.18" y="35.56" rot="MR0"/>
+<instance part="IC14" gate="A" x="71.12" y="76.2" rot="MR180"/>
+<instance part="IC14" gate="B" x="165.1" y="132.08" rot="MR180"/>
+<instance part="IC14" gate="P" x="226.06" y="116.84"/>
+<instance part="R33" gate="G$1" x="73.66" y="86.36"/>
+<instance part="C40" gate="G$1" x="73.66" y="93.98" rot="R90"/>
+<instance part="R34" gate="G$1" x="170.18" y="142.24"/>
+<instance part="C41" gate="G$1" x="170.18" y="149.86" rot="R90"/>
+<instance part="V45" gate="G$1" x="152.4" y="114.3" rot="R90"/>
+<instance part="C42" gate="G$1" x="35.56" y="83.82" rot="R90"/>
+<instance part="C43" gate="G$1" x="137.16" y="129.54" rot="R90"/>
+<instance part="R32" gate="G$1" x="147.32" y="129.54"/>
+<instance part="R35" gate="G$1" x="45.72" y="83.82"/>
+<instance part="R36" gate="G$1" x="127" y="30.48" rot="R90"/>
+<instance part="R37" gate="G$1" x="109.22" y="33.02" rot="R90"/>
+<instance part="R38" gate="G$1" x="109.22" y="20.32" rot="R90"/>
+<instance part="V46" gate="G$1" x="114.3" y="12.7" rot="MR90"/>
+<instance part="RLY1" gate="L" x="27.94" y="119.38"/>
+<instance part="RLY1" gate="A" x="15.24" y="48.26" rot="R90"/>
+<instance part="RLY1" gate="B" x="17.78" y="144.78" rot="R90"/>
+<instance part="Q1" gate="G$1" x="20.32" y="101.6"/>
+<instance part="D7" gate="G$1" x="15.24" y="116.84" rot="R90"/>
+<instance part="VDD9" gate="G$1" x="15.24" y="129.54"/>
+<instance part="V48" gate="GND" x="22.86" y="91.44"/>
+<instance part="R40" gate="G$1" x="12.7" y="93.98" rot="R90"/>
+<instance part="R41" gate="G$1" x="68.58" y="50.8" rot="R90"/>
+<instance part="R42" gate="G$1" x="78.74" y="58.42" rot="R180"/>
+<instance part="V49" gate="GND" x="86.36" y="53.34"/>
+<instance part="TP1" gate="G$1" x="231.14" y="78.74" rot="R270"/>
+<instance part="R48" gate="G$1" x="157.48" y="121.92" rot="R90"/>
+<instance part="R49" gate="G$1" x="53.34" y="76.2" rot="R90"/>
+<instance part="R50" gate="G$1" x="149.86" y="157.48"/>
+<instance part="V52" gate="G$1" x="139.7" y="157.48" rot="R90"/>
+<instance part="V44" gate="G$1" x="48.26" y="68.58" rot="R90"/>
+<instance part="R51" gate="G$1" x="58.42" y="93.98"/>
+<instance part="V53" gate="G$1" x="48.26" y="93.98" rot="R90"/>
+<instance part="C45" gate="G$1" x="241.3" y="142.24"/>
+<instance part="D10" gate="G$1" x="58.42" y="30.48" rot="R90"/>
+<instance part="D11" gate="G$1" x="73.66" y="116.84" rot="R90"/>
+<instance part="V56" gate="GND" x="73.66" y="106.68"/>
+</instances>
+<busses>
+</busses>
+<nets>
+<net name="N$14" class="0">
+<segment>
+<wire x1="205.74" y1="149.86" x2="195.58" y2="149.86" width="0.1524" layer="91"/>
+<wire x1="195.58" y1="149.86" x2="195.58" y2="152.4" width="0.1524" layer="91"/>
+<wire x1="195.58" y1="149.86" x2="195.58" y2="147.32" width="0.1524" layer="91"/>
+<junction x="195.58" y="149.86"/>
+<pinref part="IC6" gate="A" pin="+IN"/>
+<pinref part="R9" gate="G$1" pin="1"/>
+<pinref part="R10" gate="G$1" pin="2"/>
+</segment>
+</net>
+<net name="GND" class="0">
+<segment>
+<wire x1="195.58" y1="137.16" x2="195.58" y2="134.62" width="0.1524" layer="91"/>
+<pinref part="R10" gate="G$1" pin="1"/>
+<pinref part="V14" gate="GND" pin="GND"/>
+</segment>
+<segment>
+<wire x1="48.26" y1="116.84" x2="48.26" y2="111.76" width="0.1524" layer="91"/>
+<wire x1="60.96" y1="114.3" x2="60.96" y2="111.76" width="0.1524" layer="91"/>
+<wire x1="60.96" y1="111.76" x2="60.96" y2="109.22" width="0.1524" layer="91"/>
+<wire x1="48.26" y1="111.76" x2="60.96" y2="111.76" width="0.1524" layer="91"/>
+<junction x="60.96" y="111.76"/>
+<pinref part="C11" gate="G$1" pin="2"/>
+<pinref part="R11" gate="G$1" pin="1"/>
+<pinref part="V18" gate="GND" pin="GND"/>
+</segment>
+<segment>
+<wire x1="71.12" y1="157.48" x2="68.58" y2="157.48" width="0.1524" layer="91"/>
+<wire x1="68.58" y1="157.48" x2="68.58" y2="154.94" width="0.1524" layer="91"/>
+<pinref part="V22" gate="GND" pin="GND"/>
+<pinref part="IC5" gate="A" pin="-IN"/>
+</segment>
+<segment>
+<wire x1="238.76" y1="93.98" x2="238.76" y2="96.52" width="0.1524" layer="91"/>
+<wire x1="238.76" y1="96.52" x2="238.76" y2="99.06" width="0.1524" layer="91"/>
+<wire x1="238.76" y1="96.52" x2="226.06" y2="96.52" width="0.1524" layer="91"/>
+<wire x1="226.06" y1="96.52" x2="215.9" y2="96.52" width="0.1524" layer="91"/>
+<wire x1="215.9" y1="96.52" x2="215.9" y2="99.06" width="0.1524" layer="91"/>
+<wire x1="226.06" y1="99.06" x2="226.06" y2="96.52" width="0.1524" layer="91"/>
+<junction x="238.76" y="96.52"/>
+<junction x="226.06" y="96.52"/>
+<pinref part="V23" gate="GND" pin="GND"/>
+<pinref part="IC6" gate="P" pin="V-"/>
+<pinref part="IC5" gate="P" pin="V-"/>
+<pinref part="IC14" gate="P" pin="V-"/>
+</segment>
+<segment>
+<wire x1="66.04" y1="27.94" x2="66.04" y2="22.86" width="0.1524" layer="91"/>
+<wire x1="78.74" y1="25.4" x2="78.74" y2="22.86" width="0.1524" layer="91"/>
+<wire x1="78.74" y1="22.86" x2="78.74" y2="20.32" width="0.1524" layer="91"/>
+<wire x1="66.04" y1="22.86" x2="78.74" y2="22.86" width="0.1524" layer="91"/>
+<wire x1="66.04" y1="22.86" x2="58.42" y2="22.86" width="0.1524" layer="91"/>
+<wire x1="58.42" y1="22.86" x2="43.18" y2="22.86" width="0.1524" layer="91"/>
+<wire x1="43.18" y1="22.86" x2="43.18" y2="27.94" width="0.1524" layer="91"/>
+<wire x1="58.42" y1="27.94" x2="58.42" y2="22.86" width="0.1524" layer="91"/>
+<junction x="78.74" y="22.86"/>
+<junction x="66.04" y="22.86"/>
+<junction x="58.42" y="22.86"/>
+<pinref part="C15" gate="G$1" pin="2"/>
+<pinref part="R15" gate="G$1" pin="1"/>
+<pinref part="V19" gate="GND" pin="GND"/>
+<pinref part="D3" gate="G$1" pin="A"/>
+<pinref part="D10" gate="G$1" pin="A"/>
+</segment>
+<segment>
+<wire x1="215.9" y1="48.26" x2="215.9" y2="45.72" width="0.1524" layer="91"/>
+<pinref part="IC11" gate="G$1" pin="VSS"/>
+<pinref part="V33" gate="GND" pin="GND"/>
+</segment>
+<segment>
+<wire x1="116.84" y1="76.2" x2="111.76" y2="76.2" width="0.1524" layer="91"/>
+<wire x1="111.76" y1="76.2" x2="111.76" y2="73.66" width="0.1524" layer="91"/>
+<pinref part="IC5" gate="B" pin="-IN"/>
+<pinref part="V34" gate="GND" pin="GND"/>
+</segment>
+<segment>
+<pinref part="R31" gate="G$1" pin="1"/>
+<pinref part="V42" gate="GND" pin="GND"/>
+</segment>
+<segment>
+<wire x1="175.26" y1="45.72" x2="170.18" y2="45.72" width="0.1524" layer="91"/>
+<wire x1="170.18" y1="45.72" x2="170.18" y2="40.64" width="0.1524" layer="91"/>
+<wire x1="170.18" y1="40.64" x2="170.18" y2="38.1" width="0.1524" layer="91"/>
+<wire x1="175.26" y1="40.64" x2="170.18" y2="40.64" width="0.1524" layer="91"/>
+<junction x="170.18" y="40.64"/>
+<pinref part="IC6" gate="D" pin="-IN"/>
+<pinref part="V43" gate="GND" pin="GND"/>
+<pinref part="IC6" gate="D" pin="+IN"/>
+</segment>
+<segment>
+<wire x1="22.86" y1="96.52" x2="22.86" y2="93.98" width="0.1524" layer="91"/>
+<pinref part="Q1" gate="G$1" pin="E"/>
+<pinref part="V48" gate="GND" pin="GND"/>
+</segment>
+<segment>
+<wire x1="83.82" y1="58.42" x2="86.36" y2="58.42" width="0.1524" layer="91"/>
+<wire x1="86.36" y1="58.42" x2="86.36" y2="55.88" width="0.1524" layer="91"/>
+<pinref part="R42" gate="G$1" pin="1"/>
+<pinref part="V49" gate="GND" pin="GND"/>
+</segment>
+<segment>
+<wire x1="241.3" y1="139.7" x2="241.3" y2="137.16" width="0.1524" layer="91"/>
+<wire x1="241.3" y1="137.16" x2="241.3" y2="134.62" width="0.1524" layer="91"/>
+<wire x1="241.3" y1="137.16" x2="231.14" y2="137.16" width="0.1524" layer="91"/>
+<wire x1="231.14" y1="137.16" x2="231.14" y2="139.7" width="0.1524" layer="91"/>
+<junction x="241.3" y="137.16"/>
+<pinref part="C45" gate="G$1" pin="2"/>
+<pinref part="V15" gate="GND" pin="GND"/>
+<pinref part="C10" gate="G$1" pin="2"/>
+</segment>
+<segment>
+<wire x1="73.66" y1="114.3" x2="73.66" y2="109.22" width="0.1524" layer="91"/>
+<pinref part="D11" gate="G$1" pin="A"/>
+<pinref part="V56" gate="GND" pin="GND"/>
+</segment>
+</net>
+<net name="VMID" class="0">
+<segment>
+<wire x1="205.74" y1="154.94" x2="203.2" y2="154.94" width="0.1524" layer="91"/>
+<wire x1="203.2" y1="154.94" x2="203.2" y2="162.56" width="0.1524" layer="91"/>
+<wire x1="203.2" y1="162.56" x2="231.14" y2="162.56" width="0.1524" layer="91"/>
+<wire x1="231.14" y1="162.56" x2="231.14" y2="157.48" width="0.1524" layer="91"/>
+<wire x1="231.14" y1="157.48" x2="231.14" y2="152.4" width="0.1524" layer="91"/>
+<wire x1="231.14" y1="152.4" x2="220.98" y2="152.4" width="0.1524" layer="91"/>
+<wire x1="236.22" y1="157.48" x2="231.14" y2="157.48" width="0.1524" layer="91"/>
+<wire x1="231.14" y1="147.32" x2="231.14" y2="149.86" width="0.1524" layer="91"/>
+<wire x1="231.14" y1="149.86" x2="231.14" y2="152.4" width="0.1524" layer="91"/>
+<wire x1="231.14" y1="149.86" x2="241.3" y2="149.86" width="0.1524" layer="91"/>
+<wire x1="241.3" y1="149.86" x2="241.3" y2="147.32" width="0.1524" layer="91"/>
+<junction x="231.14" y="157.48"/>
+<junction x="231.14" y="152.4"/>
+<junction x="231.14" y="149.86"/>
+<pinref part="IC6" gate="A" pin="-IN"/>
+<pinref part="IC6" gate="A" pin="OUT"/>
+<pinref part="V13" gate="G$1" pin="VMID"/>
+<pinref part="C10" gate="G$1" pin="1"/>
+<pinref part="C45" gate="G$1" pin="1"/>
+</segment>
+<segment>
+<wire x1="91.44" y1="111.76" x2="88.9" y2="111.76" width="0.1524" layer="91"/>
+<wire x1="88.9" y1="111.76" x2="88.9" y2="114.3" width="0.1524" layer="91"/>
+<pinref part="V16" gate="G$1" pin="VMID"/>
+<pinref part="R12" gate="G$1" pin="1"/>
+</segment>
+<segment>
+<wire x1="81.28" y1="142.24" x2="78.74" y2="142.24" width="0.1524" layer="91"/>
+<pinref part="R13" gate="G$1" pin="1"/>
+<pinref part="V17" gate="G$1" pin="VMID"/>
+</segment>
+<segment>
+<wire x1="132.08" y1="22.86" x2="127" y2="22.86" width="0.1524" layer="91"/>
+<wire x1="127" y1="22.86" x2="119.38" y2="22.86" width="0.1524" layer="91"/>
+<wire x1="119.38" y1="22.86" x2="119.38" y2="25.4" width="0.1524" layer="91"/>
+<wire x1="127" y1="25.4" x2="127" y2="22.86" width="0.1524" layer="91"/>
+<junction x="127" y="22.86"/>
+<pinref part="V20" gate="G$1" pin="VMID"/>
+<pinref part="R17" gate="G$1" pin="1"/>
+<pinref part="R36" gate="G$1" pin="1"/>
+</segment>
+<segment>
+<wire x1="111.76" y1="12.7" x2="109.22" y2="12.7" width="0.1524" layer="91"/>
+<wire x1="109.22" y1="12.7" x2="109.22" y2="15.24" width="0.1524" layer="91"/>
+<pinref part="V46" gate="G$1" pin="VMID"/>
+<pinref part="R38" gate="G$1" pin="1"/>
+</segment>
+<segment>
+<wire x1="111.76" y1="53.34" x2="109.22" y2="53.34" width="0.1524" layer="91"/>
+<pinref part="R19" gate="G$1" pin="1"/>
+<pinref part="V21" gate="G$1" pin="VMID"/>
+</segment>
+<segment>
+<wire x1="154.94" y1="114.3" x2="157.48" y2="114.3" width="0.1524" layer="91"/>
+<wire x1="157.48" y1="114.3" x2="157.48" y2="116.84" width="0.1524" layer="91"/>
+<pinref part="V45" gate="G$1" pin="VMID"/>
+<pinref part="R48" gate="G$1" pin="1"/>
+</segment>
+<segment>
+<wire x1="144.78" y1="157.48" x2="142.24" y2="157.48" width="0.1524" layer="91"/>
+<pinref part="R50" gate="G$1" pin="1"/>
+<pinref part="V52" gate="G$1" pin="VMID"/>
+</segment>
+<segment>
+<wire x1="50.8" y1="68.58" x2="53.34" y2="68.58" width="0.1524" layer="91"/>
+<wire x1="53.34" y1="68.58" x2="53.34" y2="71.12" width="0.1524" layer="91"/>
+<pinref part="R49" gate="G$1" pin="1"/>
+<pinref part="V44" gate="G$1" pin="VMID"/>
+</segment>
+<segment>
+<wire x1="53.34" y1="93.98" x2="50.8" y2="93.98" width="0.1524" layer="91"/>
+<pinref part="R51" gate="G$1" pin="1"/>
+<pinref part="V53" gate="G$1" pin="VMID"/>
+</segment>
+</net>
+<net name="N$16" class="0">
+<segment>
+<wire x1="88.9" y1="124.46" x2="88.9" y2="127" width="0.1524" layer="91"/>
+<wire x1="88.9" y1="127" x2="86.36" y2="127" width="0.1524" layer="91"/>
+<wire x1="88.9" y1="127" x2="99.06" y2="127" width="0.1524" layer="91"/>
+<junction x="88.9" y="127"/>
+<pinref part="R12" gate="G$1" pin="2"/>
+<pinref part="C12" gate="G$1" pin="2"/>
+<pinref part="IC6" gate="B" pin="+IN"/>
+</segment>
+</net>
+<net name="N$17" class="0">
+<segment>
+<wire x1="99.06" y1="142.24" x2="96.52" y2="142.24" width="0.1524" layer="91"/>
+<wire x1="96.52" y1="142.24" x2="93.98" y2="142.24" width="0.1524" layer="91"/>
+<wire x1="93.98" y1="142.24" x2="91.44" y2="142.24" width="0.1524" layer="91"/>
+<wire x1="99.06" y1="132.08" x2="93.98" y2="132.08" width="0.1524" layer="91"/>
+<wire x1="93.98" y1="132.08" x2="93.98" y2="142.24" width="0.1524" layer="91"/>
+<wire x1="96.52" y1="149.86" x2="96.52" y2="142.24" width="0.1524" layer="91"/>
+<wire x1="104.14" y1="149.86" x2="96.52" y2="149.86" width="0.1524" layer="91"/>
+<junction x="93.98" y="142.24"/>
+<junction x="96.52" y="142.24"/>
+<pinref part="R14" gate="G$1" pin="1"/>
+<pinref part="R13" gate="G$1" pin="2"/>
+<pinref part="IC6" gate="B" pin="-IN"/>
+<pinref part="C13" gate="G$1" pin="1"/>
+</segment>
+</net>
+<net name="N$19" class="0">
+<segment>
+<wire x1="40.64" y1="127" x2="45.72" y2="127" width="0.1524" layer="91"/>
+<wire x1="45.72" y1="127" x2="48.26" y2="127" width="0.1524" layer="91"/>
+<wire x1="48.26" y1="127" x2="48.26" y2="124.46" width="0.1524" layer="91"/>
+<wire x1="48.26" y1="127" x2="60.96" y2="127" width="0.1524" layer="91"/>
+<wire x1="60.96" y1="127" x2="60.96" y2="124.46" width="0.1524" layer="91"/>
+<wire x1="60.96" y1="127" x2="73.66" y2="127" width="0.1524" layer="91"/>
+<wire x1="73.66" y1="127" x2="78.74" y2="127" width="0.1524" layer="91"/>
+<wire x1="45.72" y1="137.16" x2="45.72" y2="127" width="0.1524" layer="91"/>
+<wire x1="73.66" y1="119.38" x2="73.66" y2="127" width="0.1524" layer="91"/>
+<junction x="48.26" y="127"/>
+<junction x="60.96" y="127"/>
+<junction x="45.72" y="127"/>
+<junction x="73.66" y="127"/>
+<pinref part="D1" gate="G$1" pin="C"/>
+<pinref part="C11" gate="G$1" pin="1"/>
+<pinref part="R11" gate="G$1" pin="2"/>
+<pinref part="C12" gate="G$1" pin="1"/>
+<pinref part="R30" gate="G$1" pin="1"/>
+<pinref part="D11" gate="G$1" pin="C"/>
+</segment>
+</net>
+<net name="ADCDR_LO" class="0">
+<segment>
+<wire x1="109.22" y1="142.24" x2="124.46" y2="142.24" width="0.1524" layer="91"/>
+<wire x1="124.46" y1="142.24" x2="124.46" y2="129.54" width="0.1524" layer="91"/>
+<wire x1="124.46" y1="129.54" x2="114.3" y2="129.54" width="0.1524" layer="91"/>
+<wire x1="124.46" y1="149.86" x2="124.46" y2="142.24" width="0.1524" layer="91"/>
+<wire x1="124.46" y1="149.86" x2="111.76" y2="149.86" width="0.1524" layer="91"/>
+<wire x1="124.46" y1="129.54" x2="124.46" y2="106.68" width="0.1524" layer="91"/>
+<wire x1="124.46" y1="106.68" x2="170.18" y2="106.68" width="0.1524" layer="91"/>
+<wire x1="170.18" y1="106.68" x2="170.18" y2="73.66" width="0.1524" layer="91"/>
+<wire x1="170.18" y1="73.66" x2="198.12" y2="73.66" width="0.1524" layer="91"/>
+<junction x="124.46" y="142.24"/>
+<junction x="124.46" y="129.54"/>
+<pinref part="R14" gate="G$1" pin="2"/>
+<pinref part="IC6" gate="B" pin="OUT"/>
+<pinref part="C13" gate="G$1" pin="2"/>
+<pinref part="IC11" gate="G$1" pin="A2"/>
+</segment>
+</net>
+<net name="N$15" class="0">
+<segment>
+<wire x1="127" y1="55.88" x2="124.46" y2="55.88" width="0.1524" layer="91"/>
+<wire x1="129.54" y1="45.72" x2="124.46" y2="45.72" width="0.1524" layer="91"/>
+<wire x1="124.46" y1="45.72" x2="124.46" y2="53.34" width="0.1524" layer="91"/>
+<wire x1="124.46" y1="53.34" x2="124.46" y2="55.88" width="0.1524" layer="91"/>
+<wire x1="124.46" y1="55.88" x2="124.46" y2="63.5" width="0.1524" layer="91"/>
+<wire x1="124.46" y1="63.5" x2="132.08" y2="63.5" width="0.1524" layer="91"/>
+<wire x1="121.92" y1="53.34" x2="124.46" y2="53.34" width="0.1524" layer="91"/>
+<junction x="124.46" y="55.88"/>
+<junction x="124.46" y="53.34"/>
+<pinref part="R18" gate="G$1" pin="1"/>
+<pinref part="IC6" gate="C" pin="-IN"/>
+<pinref part="C17" gate="G$1" pin="1"/>
+<pinref part="R19" gate="G$1" pin="2"/>
+</segment>
+</net>
+<net name="N$20" class="0">
+<segment>
+<wire x1="40.64" y1="40.64" x2="43.18" y2="40.64" width="0.1524" layer="91"/>
+<wire x1="43.18" y1="40.64" x2="43.18" y2="33.02" width="0.1524" layer="91"/>
+<wire x1="43.18" y1="40.64" x2="48.26" y2="40.64" width="0.1524" layer="91"/>
+<junction x="43.18" y="40.64"/>
+<pinref part="C14" gate="G$1" pin="2"/>
+<pinref part="D3" gate="G$1" pin="C"/>
+<pinref part="D2" gate="G$1" pin="A"/>
+</segment>
+</net>
+<net name="N$18" class="0">
+<segment>
+<wire x1="93.98" y1="40.64" x2="96.52" y2="40.64" width="0.1524" layer="91"/>
+<pinref part="R16" gate="G$1" pin="2"/>
+<pinref part="C16" gate="G$1" pin="1"/>
+</segment>
+</net>
+<net name="N$22" class="0">
+<segment>
+<wire x1="129.54" y1="40.64" x2="127" y2="40.64" width="0.1524" layer="91"/>
+<wire x1="127" y1="40.64" x2="119.38" y2="40.64" width="0.1524" layer="91"/>
+<wire x1="119.38" y1="40.64" x2="109.22" y2="40.64" width="0.1524" layer="91"/>
+<wire x1="109.22" y1="40.64" x2="104.14" y2="40.64" width="0.1524" layer="91"/>
+<wire x1="119.38" y1="35.56" x2="119.38" y2="40.64" width="0.1524" layer="91"/>
+<wire x1="127" y1="35.56" x2="127" y2="40.64" width="0.1524" layer="91"/>
+<wire x1="109.22" y1="38.1" x2="109.22" y2="40.64" width="0.1524" layer="91"/>
+<junction x="119.38" y="40.64"/>
+<junction x="127" y="40.64"/>
+<junction x="109.22" y="40.64"/>
+<pinref part="IC6" gate="C" pin="+IN"/>
+<pinref part="C16" gate="G$1" pin="2"/>
+<pinref part="R17" gate="G$1" pin="2"/>
+<pinref part="R36" gate="G$1" pin="2"/>
+<pinref part="R37" gate="G$1" pin="2"/>
+</segment>
+</net>
+<net name="N$23" class="0">
+<segment>
+<wire x1="66.04" y1="162.56" x2="71.12" y2="162.56" width="0.1524" layer="91"/>
+<pinref part="R20" gate="G$1" pin="2"/>
+<pinref part="IC5" gate="A" pin="+IN"/>
+</segment>
+</net>
+<net name="CROSS_LO" class="0">
+<segment>
+<wire x1="86.36" y1="160.02" x2="99.06" y2="160.02" width="0.1524" layer="91"/>
+<label x="99.06" y="160.02" size="1.778" layer="95"/>
+<pinref part="IC5" gate="A" pin="OUT"/>
+</segment>
+</net>
+<net name="VDD" class="0">
+<segment>
+<wire x1="195.58" y1="165.1" x2="195.58" y2="162.56" width="0.1524" layer="91"/>
+<pinref part="VDD3" gate="G$1" pin="VDD"/>
+<pinref part="R9" gate="G$1" pin="2"/>
+</segment>
+<segment>
+<wire x1="215.9" y1="127" x2="215.9" y2="124.46" width="0.1524" layer="91"/>
+<wire x1="215.9" y1="124.46" x2="215.9" y2="121.92" width="0.1524" layer="91"/>
+<wire x1="215.9" y1="124.46" x2="226.06" y2="124.46" width="0.1524" layer="91"/>
+<wire x1="226.06" y1="124.46" x2="238.76" y2="124.46" width="0.1524" layer="91"/>
+<wire x1="238.76" y1="124.46" x2="238.76" y2="121.92" width="0.1524" layer="91"/>
+<wire x1="226.06" y1="121.92" x2="226.06" y2="124.46" width="0.1524" layer="91"/>
+<junction x="215.9" y="124.46"/>
+<junction x="226.06" y="124.46"/>
+<pinref part="VDD2" gate="G$1" pin="VDD"/>
+<pinref part="IC6" gate="P" pin="V+"/>
+<pinref part="IC5" gate="P" pin="V+"/>
+<pinref part="IC14" gate="P" pin="V+"/>
+</segment>
+<segment>
+<wire x1="205.74" y1="93.98" x2="205.74" y2="91.44" width="0.1524" layer="91"/>
+<pinref part="VDD8" gate="G$1" pin="VDD"/>
+<pinref part="IC11" gate="G$1" pin="VDD"/>
+</segment>
+<segment>
+<wire x1="25.4" y1="119.38" x2="22.86" y2="119.38" width="0.1524" layer="91"/>
+<wire x1="22.86" y1="119.38" x2="22.86" y2="124.46" width="0.1524" layer="91"/>
+<wire x1="15.24" y1="119.38" x2="15.24" y2="124.46" width="0.1524" layer="91"/>
+<wire x1="15.24" y1="124.46" x2="15.24" y2="127" width="0.1524" layer="91"/>
+<wire x1="22.86" y1="124.46" x2="15.24" y2="124.46" width="0.1524" layer="91"/>
+<junction x="15.24" y="124.46"/>
+<pinref part="RLY1" gate="L" pin="P$1"/>
+<pinref part="D7" gate="G$1" pin="C"/>
+<pinref part="VDD9" gate="G$1" pin="VDD"/>
+</segment>
+</net>
+<net name="ADC_IN" class="0">
+<segment>
+<wire x1="223.52" y1="58.42" x2="226.06" y2="58.42" width="0.1524" layer="91"/>
+<wire x1="223.52" y1="81.28" x2="226.06" y2="81.28" width="0.1524" layer="91"/>
+<wire x1="226.06" y1="81.28" x2="226.06" y2="78.74" width="0.1524" layer="91"/>
+<wire x1="226.06" y1="78.74" x2="226.06" y2="73.66" width="0.1524" layer="91"/>
+<wire x1="226.06" y1="73.66" x2="223.52" y2="73.66" width="0.1524" layer="91"/>
+<wire x1="223.52" y1="66.04" x2="226.06" y2="66.04" width="0.1524" layer="91"/>
+<wire x1="226.06" y1="66.04" x2="226.06" y2="68.58" width="0.1524" layer="91"/>
+<wire x1="226.06" y1="68.58" x2="226.06" y2="73.66" width="0.1524" layer="91"/>
+<wire x1="226.06" y1="58.42" x2="226.06" y2="66.04" width="0.1524" layer="91"/>
+<wire x1="233.68" y1="68.58" x2="226.06" y2="68.58" width="0.1524" layer="91"/>
+<wire x1="228.6" y1="78.74" x2="226.06" y2="78.74" width="0.1524" layer="91"/>
+<junction x="226.06" y="73.66"/>
+<junction x="226.06" y="66.04"/>
+<junction x="226.06" y="68.58"/>
+<junction x="226.06" y="78.74"/>
+<label x="233.68" y="68.58" size="1.778" layer="95"/>
+<pinref part="IC11" gate="G$1" pin="B4"/>
+<pinref part="IC11" gate="G$1" pin="B1"/>
+<pinref part="IC11" gate="G$1" pin="B2"/>
+<pinref part="IC11" gate="G$1" pin="B3"/>
+<pinref part="TP1" gate="G$1" pin="P$1"/>
+</segment>
+</net>
+<net name="N$26" class="0">
+<segment>
+<wire x1="116.84" y1="81.28" x2="111.76" y2="81.28" width="0.1524" layer="91"/>
+<pinref part="IC5" gate="B" pin="+IN"/>
+<pinref part="R21" gate="G$1" pin="2"/>
+</segment>
+</net>
+<net name="CROSS_HI" class="0">
+<segment>
+<wire x1="139.7" y1="78.74" x2="132.08" y2="78.74" width="0.1524" layer="91"/>
+<label x="139.7" y="78.74" size="1.778" layer="95"/>
+<pinref part="IC5" gate="B" pin="OUT"/>
+</segment>
+</net>
+<net name="ADCDR_HI" class="0">
+<segment>
+<wire x1="137.16" y1="55.88" x2="152.4" y2="55.88" width="0.1524" layer="91"/>
+<wire x1="139.7" y1="63.5" x2="152.4" y2="63.5" width="0.1524" layer="91"/>
+<wire x1="152.4" y1="63.5" x2="152.4" y2="58.42" width="0.1524" layer="91"/>
+<wire x1="152.4" y1="58.42" x2="152.4" y2="55.88" width="0.1524" layer="91"/>
+<wire x1="152.4" y1="55.88" x2="152.4" y2="43.18" width="0.1524" layer="91"/>
+<wire x1="152.4" y1="43.18" x2="144.78" y2="43.18" width="0.1524" layer="91"/>
+<wire x1="198.12" y1="58.42" x2="152.4" y2="58.42" width="0.1524" layer="91"/>
+<junction x="152.4" y="55.88"/>
+<junction x="152.4" y="58.42"/>
+<pinref part="R18" gate="G$1" pin="2"/>
+<pinref part="C17" gate="G$1" pin="2"/>
+<pinref part="IC6" gate="C" pin="OUT"/>
+<pinref part="IC11" gate="G$1" pin="A4"/>
+</segment>
+</net>
+<net name="AMPL_LO" class="0">
+<segment>
+<wire x1="45.72" y1="147.32" x2="45.72" y2="149.86" width="0.1524" layer="91"/>
+<wire x1="45.72" y1="149.86" x2="55.88" y2="149.86" width="0.1524" layer="91"/>
+<wire x1="55.88" y1="149.86" x2="55.88" y2="147.32" width="0.1524" layer="91"/>
+<wire x1="45.72" y1="149.86" x2="45.72" y2="152.4" width="0.1524" layer="91"/>
+<wire x1="45.72" y1="152.4" x2="48.26" y2="152.4" width="0.1524" layer="91"/>
+<junction x="45.72" y="149.86"/>
+<label x="48.26" y="152.4" size="1.778" layer="95"/>
+<pinref part="R30" gate="G$1" pin="2"/>
+<pinref part="R31" gate="G$1" pin="2"/>
+</segment>
+</net>
+<net name="N$52" class="0">
+<segment>
+<wire x1="68.58" y1="93.98" x2="66.04" y2="93.98" width="0.1524" layer="91"/>
+<wire x1="68.58" y1="86.36" x2="66.04" y2="86.36" width="0.1524" layer="91"/>
+<wire x1="68.58" y1="78.74" x2="66.04" y2="78.74" width="0.1524" layer="91"/>
+<wire x1="66.04" y1="86.36" x2="66.04" y2="78.74" width="0.1524" layer="91"/>
+<wire x1="66.04" y1="93.98" x2="66.04" y2="86.36" width="0.1524" layer="91"/>
+<wire x1="63.5" y1="93.98" x2="66.04" y2="93.98" width="0.1524" layer="91"/>
+<junction x="66.04" y="86.36"/>
+<junction x="66.04" y="93.98"/>
+<pinref part="C40" gate="G$1" pin="1"/>
+<pinref part="R33" gate="G$1" pin="1"/>
+<pinref part="IC14" gate="A" pin="-IN"/>
+<pinref part="R51" gate="G$1" pin="2"/>
+</segment>
+</net>
+<net name="RAW_HI" class="0">
+<segment>
+<wire x1="76.2" y1="93.98" x2="91.44" y2="93.98" width="0.1524" layer="91"/>
+<wire x1="91.44" y1="93.98" x2="91.44" y2="91.44" width="0.1524" layer="91"/>
+<wire x1="91.44" y1="91.44" x2="91.44" y2="86.36" width="0.1524" layer="91"/>
+<wire x1="91.44" y1="86.36" x2="91.44" y2="76.2" width="0.1524" layer="91"/>
+<wire x1="91.44" y1="76.2" x2="83.82" y2="76.2" width="0.1524" layer="91"/>
+<wire x1="78.74" y1="86.36" x2="91.44" y2="86.36" width="0.1524" layer="91"/>
+<wire x1="91.44" y1="91.44" x2="160.02" y2="91.44" width="0.1524" layer="91"/>
+<wire x1="160.02" y1="91.44" x2="160.02" y2="66.04" width="0.1524" layer="91"/>
+<wire x1="160.02" y1="66.04" x2="198.12" y2="66.04" width="0.1524" layer="91"/>
+<junction x="91.44" y="86.36"/>
+<junction x="91.44" y="91.44"/>
+<pinref part="C40" gate="G$1" pin="2"/>
+<pinref part="IC14" gate="A" pin="OUT"/>
+<pinref part="R33" gate="G$1" pin="2"/>
+<pinref part="IC11" gate="G$1" pin="A3"/>
+</segment>
+</net>
+<net name="MUXSEL_LOPKD" class="0">
+<segment>
+<wire x1="195.58" y1="71.12" x2="198.12" y2="71.12" width="0.1524" layer="91"/>
+<label x="195.58" y="71.12" size="1.778" layer="95" rot="MR0"/>
+<pinref part="IC11" gate="G$1" pin="C2"/>
+</segment>
+</net>
+<net name="MUXSEL_HIPKD" class="0">
+<segment>
+<wire x1="195.58" y1="55.88" x2="198.12" y2="55.88" width="0.1524" layer="91"/>
+<label x="195.58" y="55.88" size="1.778" layer="95" rot="MR0"/>
+<pinref part="IC11" gate="G$1" pin="C4"/>
+</segment>
+</net>
+<net name="MUXSEL_HIRAW" class="0">
+<segment>
+<wire x1="195.58" y1="63.5" x2="198.12" y2="63.5" width="0.1524" layer="91"/>
+<label x="195.58" y="63.5" size="1.778" layer="95" rot="MR0"/>
+<pinref part="IC11" gate="G$1" pin="C3"/>
+</segment>
+</net>
+<net name="MUXSEL_LORAW" class="0">
+<segment>
+<wire x1="195.58" y1="78.74" x2="198.12" y2="78.74" width="0.1524" layer="91"/>
+<label x="195.58" y="78.74" size="1.778" layer="95" rot="MR0"/>
+<pinref part="IC11" gate="G$1" pin="C1"/>
+</segment>
+</net>
+<net name="N$43" class="0">
+<segment>
+<wire x1="198.12" y1="81.28" x2="185.42" y2="81.28" width="0.1524" layer="91"/>
+<wire x1="185.42" y1="81.28" x2="185.42" y2="132.08" width="0.1524" layer="91"/>
+<wire x1="185.42" y1="132.08" x2="177.8" y2="132.08" width="0.1524" layer="91"/>
+<wire x1="175.26" y1="142.24" x2="185.42" y2="142.24" width="0.1524" layer="91"/>
+<wire x1="185.42" y1="142.24" x2="185.42" y2="132.08" width="0.1524" layer="91"/>
+<wire x1="172.72" y1="149.86" x2="185.42" y2="149.86" width="0.1524" layer="91"/>
+<wire x1="185.42" y1="149.86" x2="185.42" y2="142.24" width="0.1524" layer="91"/>
+<junction x="185.42" y="132.08"/>
+<junction x="185.42" y="142.24"/>
+<pinref part="IC11" gate="G$1" pin="A1"/>
+<pinref part="IC14" gate="B" pin="OUT"/>
+<pinref part="R34" gate="G$1" pin="2"/>
+<pinref part="C41" gate="G$1" pin="2"/>
+</segment>
+</net>
+<net name="N$53" class="0">
+<segment>
+<wire x1="165.1" y1="149.86" x2="160.02" y2="149.86" width="0.1524" layer="91"/>
+<wire x1="160.02" y1="149.86" x2="160.02" y2="142.24" width="0.1524" layer="91"/>
+<wire x1="160.02" y1="142.24" x2="160.02" y2="134.62" width="0.1524" layer="91"/>
+<wire x1="160.02" y1="134.62" x2="162.56" y2="134.62" width="0.1524" layer="91"/>
+<wire x1="165.1" y1="142.24" x2="160.02" y2="142.24" width="0.1524" layer="91"/>
+<wire x1="154.94" y1="157.48" x2="160.02" y2="157.48" width="0.1524" layer="91"/>
+<wire x1="160.02" y1="157.48" x2="160.02" y2="149.86" width="0.1524" layer="91"/>
+<junction x="160.02" y="142.24"/>
+<junction x="160.02" y="149.86"/>
+<pinref part="C41" gate="G$1" pin="1"/>
+<pinref part="IC14" gate="B" pin="-IN"/>
+<pinref part="R34" gate="G$1" pin="1"/>
+<pinref part="R50" gate="G$1" pin="2"/>
+</segment>
+</net>
+<net name="N$54" class="0">
+<segment>
+<wire x1="152.4" y1="129.54" x2="157.48" y2="129.54" width="0.1524" layer="91"/>
+<wire x1="157.48" y1="127" x2="157.48" y2="129.54" width="0.1524" layer="91"/>
+<wire x1="157.48" y1="129.54" x2="162.56" y2="129.54" width="0.1524" layer="91"/>
+<junction x="157.48" y="129.54"/>
+<pinref part="R32" gate="G$1" pin="2"/>
+<pinref part="R48" gate="G$1" pin="2"/>
+<pinref part="IC14" gate="B" pin="+IN"/>
+</segment>
+</net>
+<net name="N$56" class="0">
+<segment>
+<wire x1="109.22" y1="27.94" x2="109.22" y2="25.4" width="0.1524" layer="91"/>
+<pinref part="R37" gate="G$1" pin="1"/>
+<pinref part="R38" gate="G$1" pin="2"/>
+</segment>
+</net>
+<net name="N$35" class="0">
+<segment>
+<wire x1="25.4" y1="111.76" x2="22.86" y2="111.76" width="0.1524" layer="91"/>
+<wire x1="22.86" y1="111.76" x2="22.86" y2="109.22" width="0.1524" layer="91"/>
+<wire x1="22.86" y1="109.22" x2="15.24" y2="109.22" width="0.1524" layer="91"/>
+<wire x1="15.24" y1="109.22" x2="15.24" y2="114.3" width="0.1524" layer="91"/>
+<wire x1="22.86" y1="106.68" x2="22.86" y2="109.22" width="0.1524" layer="91"/>
+<junction x="22.86" y="109.22"/>
+<pinref part="RLY1" gate="L" pin="P$2"/>
+<pinref part="D7" gate="G$1" pin="A"/>
+<pinref part="Q1" gate="G$1" pin="C"/>
+</segment>
+</net>
+<net name="N$38" class="0">
+<segment>
+<wire x1="17.78" y1="101.6" x2="12.7" y2="101.6" width="0.1524" layer="91"/>
+<wire x1="12.7" y1="101.6" x2="12.7" y2="99.06" width="0.1524" layer="91"/>
+<pinref part="Q1" gate="G$1" pin="B"/>
+<pinref part="R40" gate="G$1" pin="2"/>
+</segment>
+</net>
+<net name="RELAY_ON" class="0">
+<segment>
+<wire x1="12.7" y1="86.36" x2="12.7" y2="88.9" width="0.1524" layer="91"/>
+<label x="12.7" y="86.36" size="1.778" layer="95" rot="MR270"/>
+<pinref part="R40" gate="G$1" pin="1"/>
+</segment>
+</net>
+<net name="N$36" class="0">
+<segment>
+<wire x1="20.32" y1="48.26" x2="22.86" y2="48.26" width="0.1524" layer="91"/>
+<wire x1="22.86" y1="48.26" x2="22.86" y2="40.64" width="0.1524" layer="91"/>
+<wire x1="22.86" y1="40.64" x2="30.48" y2="40.64" width="0.1524" layer="91"/>
+<wire x1="30.48" y1="40.64" x2="33.02" y2="40.64" width="0.1524" layer="91"/>
+<wire x1="30.48" y1="63.5" x2="30.48" y2="40.64" width="0.1524" layer="91"/>
+<wire x1="30.48" y1="63.5" x2="96.52" y2="63.5" width="0.1524" layer="91"/>
+<wire x1="96.52" y1="63.5" x2="96.52" y2="81.28" width="0.1524" layer="91"/>
+<wire x1="96.52" y1="81.28" x2="101.6" y2="81.28" width="0.1524" layer="91"/>
+<junction x="30.48" y="40.64"/>
+<pinref part="RLY1" gate="A" pin="NC"/>
+<pinref part="C14" gate="G$1" pin="1"/>
+<pinref part="R21" gate="G$1" pin="1"/>
+</segment>
+</net>
+<net name="N$37" class="0">
+<segment>
+<wire x1="22.86" y1="58.42" x2="20.32" y2="58.42" width="0.1524" layer="91"/>
+<wire x1="22.86" y1="83.82" x2="22.86" y2="58.42" width="0.1524" layer="91"/>
+<wire x1="30.48" y1="83.82" x2="22.86" y2="83.82" width="0.1524" layer="91"/>
+<pinref part="RLY1" gate="A" pin="NO"/>
+<pinref part="C42" gate="G$1" pin="1"/>
+</segment>
+</net>
+<net name="ANT_HI" class="0">
+<segment>
+<wire x1="20.32" y1="53.34" x2="27.94" y2="53.34" width="0.1524" layer="91"/>
+<wire x1="27.94" y1="53.34" x2="27.94" y2="55.88" width="0.1524" layer="91"/>
+<label x="27.94" y="55.88" size="1.778" layer="95" rot="R90"/>
+<pinref part="RLY1" gate="A" pin="COM"/>
+</segment>
+</net>
+<net name="ANT_LO" class="0">
+<segment>
+<wire x1="22.86" y1="149.86" x2="30.48" y2="149.86" width="0.1524" layer="91"/>
+<wire x1="30.48" y1="149.86" x2="30.48" y2="152.4" width="0.1524" layer="91"/>
+<label x="30.48" y="152.4" size="1.778" layer="95" rot="R90"/>
+<pinref part="RLY1" gate="B" pin="COM"/>
+</segment>
+</net>
+<net name="N$39" class="0">
+<segment>
+<wire x1="55.88" y1="162.56" x2="33.02" y2="162.56" width="0.1524" layer="91"/>
+<wire x1="33.02" y1="162.56" x2="33.02" y2="144.78" width="0.1524" layer="91"/>
+<wire x1="35.56" y1="127" x2="27.94" y2="127" width="0.1524" layer="91"/>
+<wire x1="27.94" y1="127" x2="27.94" y2="144.78" width="0.1524" layer="91"/>
+<wire x1="27.94" y1="144.78" x2="22.86" y2="144.78" width="0.1524" layer="91"/>
+<wire x1="33.02" y1="144.78" x2="27.94" y2="144.78" width="0.1524" layer="91"/>
+<junction x="27.94" y="144.78"/>
+<pinref part="R20" gate="G$1" pin="1"/>
+<pinref part="D1" gate="G$1" pin="A"/>
+<pinref part="RLY1" gate="B" pin="NC"/>
+</segment>
+</net>
+<net name="N$46" class="0">
+<segment>
+<wire x1="22.86" y1="154.94" x2="25.4" y2="154.94" width="0.1524" layer="91"/>
+<wire x1="25.4" y1="154.94" x2="25.4" y2="170.18" width="0.1524" layer="91"/>
+<wire x1="25.4" y1="170.18" x2="129.54" y2="170.18" width="0.1524" layer="91"/>
+<wire x1="129.54" y1="170.18" x2="129.54" y2="129.54" width="0.1524" layer="91"/>
+<wire x1="129.54" y1="129.54" x2="132.08" y2="129.54" width="0.1524" layer="91"/>
+<pinref part="RLY1" gate="B" pin="NO"/>
+<pinref part="C43" gate="G$1" pin="1"/>
+</segment>
+</net>
+<net name="AMPL_HI" class="0">
+<segment>
+<wire x1="68.58" y1="55.88" x2="68.58" y2="58.42" width="0.1524" layer="91"/>
+<wire x1="68.58" y1="58.42" x2="73.66" y2="58.42" width="0.1524" layer="91"/>
+<wire x1="63.5" y1="58.42" x2="68.58" y2="58.42" width="0.1524" layer="91"/>
+<junction x="68.58" y="58.42"/>
+<label x="63.5" y="58.42" size="1.778" layer="95" rot="MR0"/>
+<pinref part="R41" gate="G$1" pin="2"/>
+<pinref part="R42" gate="G$1" pin="2"/>
+</segment>
+</net>
+<net name="N$50" class="0">
+<segment>
+<wire x1="142.24" y1="129.54" x2="139.7" y2="129.54" width="0.1524" layer="91"/>
+<pinref part="R32" gate="G$1" pin="1"/>
+<pinref part="C43" gate="G$1" pin="2"/>
+</segment>
+</net>
+<net name="N$51" class="0">
+<segment>
+<wire x1="40.64" y1="83.82" x2="38.1" y2="83.82" width="0.1524" layer="91"/>
+<pinref part="R35" gate="G$1" pin="1"/>
+<pinref part="C42" gate="G$1" pin="2"/>
+</segment>
+</net>
+<net name="N$47" class="0">
+<segment>
+<wire x1="68.58" y1="73.66" x2="60.96" y2="73.66" width="0.1524" layer="91"/>
+<wire x1="60.96" y1="73.66" x2="60.96" y2="83.82" width="0.1524" layer="91"/>
+<wire x1="50.8" y1="83.82" x2="53.34" y2="83.82" width="0.1524" layer="91"/>
+<wire x1="53.34" y1="81.28" x2="53.34" y2="83.82" width="0.1524" layer="91"/>
+<wire x1="60.96" y1="83.82" x2="53.34" y2="83.82" width="0.1524" layer="91"/>
+<junction x="53.34" y="83.82"/>
+<pinref part="IC14" gate="A" pin="+IN"/>
+<pinref part="R35" gate="G$1" pin="2"/>
+<pinref part="R49" gate="G$1" pin="2"/>
+</segment>
+</net>
+<net name="N$21" class="0">
+<segment>
+<wire x1="53.34" y1="40.64" x2="58.42" y2="40.64" width="0.1524" layer="91"/>
+<wire x1="58.42" y1="40.64" x2="66.04" y2="40.64" width="0.1524" layer="91"/>
+<wire x1="66.04" y1="40.64" x2="66.04" y2="35.56" width="0.1524" layer="91"/>
+<wire x1="66.04" y1="40.64" x2="68.58" y2="40.64" width="0.1524" layer="91"/>
+<wire x1="68.58" y1="40.64" x2="78.74" y2="40.64" width="0.1524" layer="91"/>
+<wire x1="78.74" y1="40.64" x2="78.74" y2="35.56" width="0.1524" layer="91"/>
+<wire x1="78.74" y1="40.64" x2="83.82" y2="40.64" width="0.1524" layer="91"/>
+<wire x1="68.58" y1="45.72" x2="68.58" y2="40.64" width="0.1524" layer="91"/>
+<wire x1="58.42" y1="33.02" x2="58.42" y2="40.64" width="0.1524" layer="91"/>
+<junction x="66.04" y="40.64"/>
+<junction x="78.74" y="40.64"/>
+<junction x="68.58" y="40.64"/>
+<junction x="58.42" y="40.64"/>
+<pinref part="D10" gate="G$1" pin="C"/>
+<pinref part="D2" gate="G$1" pin="C"/>
+<pinref part="C15" gate="G$1" pin="1"/>
+<pinref part="R15" gate="G$1" pin="2"/>
+<pinref part="R16" gate="G$1" pin="1"/>
+<pinref part="R41" gate="G$1" pin="1"/>
+</segment>
+</net>
+</nets>
+</sheet>
+<sheet>
+<plain>
+<text x="165.1" y="17.78" size="2.54" layer="95">analog tx path</text>
+<text x="165.1" y="12.7" size="2.54" layer="95">(incl. coil drivers)</text>
+</plain>
+<instances>
+<instance part="FRAME5" gate="G$1" x="0" y="0"/>
+<instance part="SV2" gate="G$1" x="226.06" y="119.38"/>
+<instance part="IC9" gate="G$1" x="55.88" y="124.46"/>
+<instance part="V26" gate="GND" x="53.34" y="55.88" rot="MR0"/>
+<instance part="VDD5" gate="G$1" x="63.5" y="142.24" rot="MR0"/>
+<instance part="IC10" gate="G$1" x="127" y="124.46"/>
+<instance part="V27" gate="GND" x="124.46" y="55.88" rot="MR0"/>
+<instance part="VDD6" gate="G$1" x="134.62" y="142.24" rot="MR0"/>
+<instance part="R22" gate="G$1" x="78.74" y="78.74"/>
+<instance part="R27" gate="G$1" x="78.74" y="99.06"/>
+<instance part="R28" gate="G$1" x="149.86" y="124.46"/>
+<instance part="R29" gate="G$1" x="149.86" y="73.66"/>
+<instance part="C39" gate="G$1" x="167.64" y="109.22" rot="MR0"/>
+<instance part="V47" gate="GND" x="167.64" y="99.06" rot="MR0"/>
+<instance part="C20" gate="G$1" x="175.26" y="109.22" rot="MR0"/>
+<instance part="C35" gate="G$1" x="200.66" y="104.14" rot="MR0"/>
+<instance part="C36" gate="G$1" x="208.28" y="104.14" rot="MR0"/>
+<instance part="V41" gate="GND" x="200.66" y="93.98" rot="MR0"/>
+<instance part="R45" gate="G$1" x="78.74" y="91.44"/>
+<instance part="R46" gate="G$1" x="149.86" y="91.44"/>
+<instance part="TP2" gate="G$1" x="208.28" y="124.46"/>
+<instance part="TP3" gate="G$1" x="218.44" y="124.46"/>
+<instance part="TP4" gate="G$1" x="213.36" y="124.46"/>
+<instance part="TP5" gate="G$1" x="203.2" y="124.46"/>
+</instances>
+<busses>
+</busses>
+<nets>
+<net name="GND" class="0">
+<segment>
+<wire x1="53.34" y1="60.96" x2="53.34" y2="58.42" width="0.1524" layer="91"/>
+<pinref part="IC9" gate="G$1" pin="VSS"/>
+<pinref part="V26" gate="GND" pin="GND"/>
+</segment>
+<segment>
+<wire x1="124.46" y1="60.96" x2="124.46" y2="58.42" width="0.1524" layer="91"/>
+<pinref part="IC10" gate="G$1" pin="VSS"/>
+<pinref part="V27" gate="GND" pin="GND"/>
+</segment>
+<segment>
+<wire x1="167.64" y1="106.68" x2="167.64" y2="104.14" width="0.1524" layer="91"/>
+<wire x1="167.64" y1="104.14" x2="167.64" y2="101.6" width="0.1524" layer="91"/>
+<wire x1="167.64" y1="104.14" x2="175.26" y2="104.14" width="0.1524" layer="91"/>
+<wire x1="175.26" y1="104.14" x2="175.26" y2="106.68" width="0.1524" layer="91"/>
+<junction x="167.64" y="104.14"/>
+<pinref part="C20" gate="G$1" pin="2"/>
+<pinref part="V47" gate="GND" pin="GND"/>
+<pinref part="C39" gate="G$1" pin="2"/>
+</segment>
+<segment>
+<wire x1="200.66" y1="101.6" x2="200.66" y2="99.06" width="0.1524" layer="91"/>
+<wire x1="200.66" y1="99.06" x2="200.66" y2="96.52" width="0.1524" layer="91"/>
+<wire x1="200.66" y1="99.06" x2="208.28" y2="99.06" width="0.1524" layer="91"/>
+<wire x1="208.28" y1="99.06" x2="208.28" y2="101.6" width="0.1524" layer="91"/>
+<junction x="200.66" y="99.06"/>
+<pinref part="C35" gate="G$1" pin="2"/>
+<pinref part="V41" gate="GND" pin="GND"/>
+<pinref part="C36" gate="G$1" pin="2"/>
+</segment>
+</net>
+<net name="VDD" class="0">
+<segment>
+<wire x1="63.5" y1="139.7" x2="63.5" y2="137.16" width="0.1524" layer="91"/>
+<pinref part="VDD5" gate="G$1" pin="VDD"/>
+<pinref part="IC9" gate="G$1" pin="VDD"/>
+</segment>
+<segment>
+<wire x1="134.62" y1="139.7" x2="134.62" y2="137.16" width="0.1524" layer="91"/>
+<pinref part="VDD6" gate="G$1" pin="VDD"/>
+<pinref part="IC10" gate="G$1" pin="VDD"/>
+</segment>
+</net>
+<net name="N$31" class="0">
+<segment>
+<wire x1="93.98" y1="99.06" x2="93.98" y2="48.26" width="0.1524" layer="91"/>
+<wire x1="83.82" y1="99.06" x2="86.36" y2="99.06" width="0.1524" layer="91"/>
+<wire x1="86.36" y1="99.06" x2="93.98" y2="99.06" width="0.1524" layer="91"/>
+<wire x1="93.98" y1="48.26" x2="157.48" y2="48.26" width="0.1524" layer="91"/>
+<wire x1="157.48" y1="48.26" x2="157.48" y2="73.66" width="0.1524" layer="91"/>
+<wire x1="157.48" y1="73.66" x2="154.94" y2="73.66" width="0.1524" layer="91"/>
+<wire x1="157.48" y1="73.66" x2="182.88" y2="73.66" width="0.1524" layer="91"/>
+<wire x1="182.88" y1="73.66" x2="182.88" y2="114.3" width="0.1524" layer="91"/>
+<wire x1="182.88" y1="114.3" x2="213.36" y2="114.3" width="0.1524" layer="91"/>
+<wire x1="213.36" y1="114.3" x2="220.98" y2="114.3" width="0.1524" layer="91"/>
+<wire x1="83.82" y1="91.44" x2="86.36" y2="91.44" width="0.1524" layer="91"/>
+<wire x1="86.36" y1="91.44" x2="86.36" y2="99.06" width="0.1524" layer="91"/>
+<wire x1="213.36" y1="121.92" x2="213.36" y2="114.3" width="0.1524" layer="91"/>
+<junction x="157.48" y="73.66"/>
+<junction x="86.36" y="99.06"/>
+<junction x="213.36" y="114.3"/>
+<pinref part="R27" gate="G$1" pin="2"/>
+<pinref part="R29" gate="G$1" pin="2"/>
+<pinref part="SV2" gate="G$1" pin="PIN3"/>
+<pinref part="R45" gate="G$1" pin="2"/>
+<pinref part="TP4" gate="G$1" pin="P$1"/>
+</segment>
+</net>
+<net name="N$41" class="0">
+<segment>
+<wire x1="68.58" y1="83.82" x2="71.12" y2="83.82" width="0.1524" layer="91"/>
+<wire x1="71.12" y1="76.2" x2="71.12" y2="78.74" width="0.1524" layer="91"/>
+<wire x1="71.12" y1="78.74" x2="71.12" y2="83.82" width="0.1524" layer="91"/>
+<wire x1="71.12" y1="76.2" x2="68.58" y2="76.2" width="0.1524" layer="91"/>
+<wire x1="71.12" y1="68.58" x2="71.12" y2="76.2" width="0.1524" layer="91"/>
+<wire x1="68.58" y1="68.58" x2="71.12" y2="68.58" width="0.1524" layer="91"/>
+<wire x1="73.66" y1="78.74" x2="71.12" y2="78.74" width="0.1524" layer="91"/>
+<junction x="71.12" y="76.2"/>
+<junction x="71.12" y="78.74"/>
+<pinref part="IC9" gate="G$1" pin="2Y3"/>
+<pinref part="IC9" gate="G$1" pin="2Y2"/>
+<pinref part="IC9" gate="G$1" pin="2Y4"/>
+<pinref part="R22" gate="G$1" pin="1"/>
+</segment>
+</net>
+<net name="N$33" class="0">
+<segment>
+<wire x1="68.58" y1="127" x2="71.12" y2="127" width="0.1524" layer="91"/>
+<wire x1="71.12" y1="127" x2="71.12" y2="119.38" width="0.1524" layer="91"/>
+<wire x1="71.12" y1="119.38" x2="68.58" y2="119.38" width="0.1524" layer="91"/>
+<wire x1="68.58" y1="111.76" x2="71.12" y2="111.76" width="0.1524" layer="91"/>
+<wire x1="71.12" y1="111.76" x2="71.12" y2="119.38" width="0.1524" layer="91"/>
+<wire x1="68.58" y1="104.14" x2="71.12" y2="104.14" width="0.1524" layer="91"/>
+<wire x1="71.12" y1="104.14" x2="71.12" y2="111.76" width="0.1524" layer="91"/>
+<wire x1="71.12" y1="99.06" x2="71.12" y2="104.14" width="0.1524" layer="91"/>
+<wire x1="73.66" y1="99.06" x2="71.12" y2="99.06" width="0.1524" layer="91"/>
+<junction x="71.12" y="119.38"/>
+<junction x="71.12" y="111.76"/>
+<junction x="71.12" y="104.14"/>
+<pinref part="IC9" gate="G$1" pin="1Y2"/>
+<pinref part="IC9" gate="G$1" pin="1Y1"/>
+<pinref part="IC9" gate="G$1" pin="1Y3"/>
+<pinref part="IC9" gate="G$1" pin="1Y4"/>
+<pinref part="R27" gate="G$1" pin="1"/>
+</segment>
+</net>
+<net name="N$34" class="0">
+<segment>
+<wire x1="142.24" y1="104.14" x2="139.7" y2="104.14" width="0.1524" layer="91"/>
+<wire x1="142.24" y1="111.76" x2="142.24" y2="104.14" width="0.1524" layer="91"/>
+<wire x1="139.7" y1="111.76" x2="142.24" y2="111.76" width="0.1524" layer="91"/>
+<wire x1="139.7" y1="127" x2="142.24" y2="127" width="0.1524" layer="91"/>
+<wire x1="142.24" y1="127" x2="142.24" y2="124.46" width="0.1524" layer="91"/>
+<wire x1="144.78" y1="124.46" x2="142.24" y2="124.46" width="0.1524" layer="91"/>
+<wire x1="142.24" y1="124.46" x2="142.24" y2="119.38" width="0.1524" layer="91"/>
+<wire x1="142.24" y1="119.38" x2="142.24" y2="111.76" width="0.1524" layer="91"/>
+<wire x1="139.7" y1="119.38" x2="142.24" y2="119.38" width="0.1524" layer="91"/>
+<junction x="142.24" y="111.76"/>
+<junction x="142.24" y="124.46"/>
+<junction x="142.24" y="119.38"/>
+<pinref part="IC10" gate="G$1" pin="1Y4"/>
+<pinref part="IC10" gate="G$1" pin="1Y3"/>
+<pinref part="IC10" gate="G$1" pin="1Y1"/>
+<pinref part="R28" gate="G$1" pin="1"/>
+<pinref part="IC10" gate="G$1" pin="1Y2"/>
+</segment>
+</net>
+<net name="N$42" class="0">
+<segment>
+<wire x1="139.7" y1="76.2" x2="142.24" y2="76.2" width="0.1524" layer="91"/>
+<wire x1="139.7" y1="83.82" x2="142.24" y2="83.82" width="0.1524" layer="91"/>
+<wire x1="142.24" y1="83.82" x2="142.24" y2="81.28" width="0.1524" layer="91"/>
+<wire x1="142.24" y1="78.74" x2="142.24" y2="81.28" width="0.1524" layer="91"/>
+<wire x1="142.24" y1="81.28" x2="142.24" y2="76.2" width="0.1524" layer="91"/>
+<wire x1="142.24" y1="76.2" x2="142.24" y2="73.66" width="0.1524" layer="91"/>
+<wire x1="142.24" y1="73.66" x2="142.24" y2="68.58" width="0.1524" layer="91"/>
+<wire x1="142.24" y1="68.58" x2="139.7" y2="68.58" width="0.1524" layer="91"/>
+<wire x1="144.78" y1="73.66" x2="142.24" y2="73.66" width="0.1524" layer="91"/>
+<junction x="142.24" y="81.28"/>
+<junction x="142.24" y="76.2"/>
+<junction x="142.24" y="73.66"/>
+<pinref part="IC10" gate="G$1" pin="2Y3"/>
+<pinref part="IC10" gate="G$1" pin="2Y2"/>
+<pinref part="IC10" gate="G$1" pin="2Y4"/>
+<pinref part="R29" gate="G$1" pin="1"/>
+</segment>
+</net>
+<net name="N$32" class="0">
+<segment>
+<wire x1="220.98" y1="119.38" x2="203.2" y2="119.38" width="0.1524" layer="91"/>
+<wire x1="203.2" y1="119.38" x2="185.42" y2="119.38" width="0.1524" layer="91"/>
+<wire x1="185.42" y1="119.38" x2="185.42" y2="132.08" width="0.1524" layer="91"/>
+<wire x1="88.9" y1="78.74" x2="88.9" y2="147.32" width="0.1524" layer="91"/>
+<wire x1="88.9" y1="147.32" x2="157.48" y2="147.32" width="0.1524" layer="91"/>
+<wire x1="157.48" y1="147.32" x2="157.48" y2="132.08" width="0.1524" layer="91"/>
+<wire x1="157.48" y1="132.08" x2="157.48" y2="124.46" width="0.1524" layer="91"/>
+<wire x1="83.82" y1="78.74" x2="88.9" y2="78.74" width="0.1524" layer="91"/>
+<wire x1="154.94" y1="124.46" x2="157.48" y2="124.46" width="0.1524" layer="91"/>
+<wire x1="185.42" y1="132.08" x2="157.48" y2="132.08" width="0.1524" layer="91"/>
+<wire x1="154.94" y1="91.44" x2="157.48" y2="91.44" width="0.1524" layer="91"/>
+<wire x1="157.48" y1="91.44" x2="157.48" y2="124.46" width="0.1524" layer="91"/>
+<wire x1="203.2" y1="121.92" x2="203.2" y2="119.38" width="0.1524" layer="91"/>
+<junction x="157.48" y="132.08"/>
+<junction x="157.48" y="124.46"/>
+<junction x="203.2" y="119.38"/>
+<pinref part="SV2" gate="G$1" pin="PIN1"/>
+<pinref part="R22" gate="G$1" pin="2"/>
+<pinref part="R28" gate="G$1" pin="2"/>
+<pinref part="R46" gate="G$1" pin="2"/>
+<pinref part="TP5" gate="G$1" pin="P$1"/>
+</segment>
+</net>
+<net name="PWR_OE1" class="0">
+<segment>
+<wire x1="48.26" y1="132.08" x2="38.1" y2="132.08" width="0.1524" layer="91"/>
+<label x="38.1" y="132.08" size="1.778" layer="95" rot="MR0"/>
+<pinref part="IC9" gate="G$1" pin="1NOE"/>
+</segment>
+</net>
+<net name="PWR_OE2" class="0">
+<segment>
+<wire x1="119.38" y1="132.08" x2="109.22" y2="132.08" width="0.1524" layer="91"/>
+<label x="109.22" y="132.08" size="1.778" layer="95" rot="MR0"/>
+<pinref part="IC10" gate="G$1" pin="1NOE"/>
+</segment>
+</net>
+<net name="PWR_LO" class="0">
+<segment>
+<wire x1="119.38" y1="127" x2="116.84" y2="127" width="0.1524" layer="91"/>
+<wire x1="116.84" y1="127" x2="116.84" y2="121.92" width="0.1524" layer="91"/>
+<wire x1="116.84" y1="121.92" x2="116.84" y2="119.38" width="0.1524" layer="91"/>
+<wire x1="116.84" y1="119.38" x2="119.38" y2="119.38" width="0.1524" layer="91"/>
+<wire x1="119.38" y1="111.76" x2="116.84" y2="111.76" width="0.1524" layer="91"/>
+<wire x1="116.84" y1="111.76" x2="116.84" y2="119.38" width="0.1524" layer="91"/>
+<wire x1="119.38" y1="104.14" x2="116.84" y2="104.14" width="0.1524" layer="91"/>
+<wire x1="116.84" y1="104.14" x2="116.84" y2="111.76" width="0.1524" layer="91"/>
+<wire x1="119.38" y1="91.44" x2="116.84" y2="91.44" width="0.1524" layer="91"/>
+<wire x1="116.84" y1="91.44" x2="116.84" y2="104.14" width="0.1524" layer="91"/>
+<wire x1="116.84" y1="121.92" x2="109.22" y2="121.92" width="0.1524" layer="91"/>
+<junction x="116.84" y="119.38"/>
+<junction x="116.84" y="111.76"/>
+<junction x="116.84" y="104.14"/>
+<junction x="116.84" y="121.92"/>
+<label x="109.22" y="121.92" size="1.778" layer="95" rot="MR0"/>
+<pinref part="IC10" gate="G$1" pin="1A1"/>
+<pinref part="IC10" gate="G$1" pin="1A2"/>
+<pinref part="IC10" gate="G$1" pin="1A3"/>
+<pinref part="IC10" gate="G$1" pin="1A4"/>
+<pinref part="IC10" gate="G$1" pin="2A1"/>
+</segment>
+<segment>
+<wire x1="48.26" y1="83.82" x2="45.72" y2="83.82" width="0.1524" layer="91"/>
+<wire x1="45.72" y1="83.82" x2="45.72" y2="81.28" width="0.1524" layer="91"/>
+<wire x1="45.72" y1="81.28" x2="45.72" y2="76.2" width="0.1524" layer="91"/>
+<wire x1="45.72" y1="76.2" x2="45.72" y2="68.58" width="0.1524" layer="91"/>
+<wire x1="45.72" y1="68.58" x2="48.26" y2="68.58" width="0.1524" layer="91"/>
+<wire x1="48.26" y1="76.2" x2="45.72" y2="76.2" width="0.1524" layer="91"/>
+<wire x1="45.72" y1="81.28" x2="38.1" y2="81.28" width="0.1524" layer="91"/>
+<junction x="45.72" y="76.2"/>
+<junction x="45.72" y="81.28"/>
+<label x="38.1" y="81.28" size="1.778" layer="95" rot="MR0"/>
+<pinref part="IC9" gate="G$1" pin="2A2"/>
+<pinref part="IC9" gate="G$1" pin="2A4"/>
+<pinref part="IC9" gate="G$1" pin="2A3"/>
+</segment>
+</net>
+<net name="PWR_HI" class="0">
+<segment>
+<wire x1="45.72" y1="104.14" x2="48.26" y2="104.14" width="0.1524" layer="91"/>
+<wire x1="48.26" y1="111.76" x2="45.72" y2="111.76" width="0.1524" layer="91"/>
+<wire x1="48.26" y1="119.38" x2="45.72" y2="119.38" width="0.1524" layer="91"/>
+<wire x1="48.26" y1="127" x2="45.72" y2="127" width="0.1524" layer="91"/>
+<wire x1="45.72" y1="127" x2="45.72" y2="121.92" width="0.1524" layer="91"/>
+<wire x1="45.72" y1="121.92" x2="45.72" y2="119.38" width="0.1524" layer="91"/>
+<wire x1="45.72" y1="119.38" x2="45.72" y2="111.76" width="0.1524" layer="91"/>
+<wire x1="45.72" y1="111.76" x2="45.72" y2="104.14" width="0.1524" layer="91"/>
+<wire x1="48.26" y1="91.44" x2="45.72" y2="91.44" width="0.1524" layer="91"/>
+<wire x1="45.72" y1="91.44" x2="45.72" y2="104.14" width="0.1524" layer="91"/>
+<wire x1="45.72" y1="121.92" x2="38.1" y2="121.92" width="0.1524" layer="91"/>
+<junction x="45.72" y="119.38"/>
+<junction x="45.72" y="111.76"/>
+<junction x="45.72" y="104.14"/>
+<junction x="45.72" y="121.92"/>
+<label x="38.1" y="121.92" size="1.778" layer="95" rot="MR0"/>
+<pinref part="IC9" gate="G$1" pin="1A4"/>
+<pinref part="IC9" gate="G$1" pin="1A3"/>
+<pinref part="IC9" gate="G$1" pin="1A2"/>
+<pinref part="IC9" gate="G$1" pin="1A1"/>
+<pinref part="IC9" gate="G$1" pin="2A1"/>
+</segment>
+<segment>
+<wire x1="119.38" y1="83.82" x2="116.84" y2="83.82" width="0.1524" layer="91"/>
+<wire x1="116.84" y1="83.82" x2="116.84" y2="81.28" width="0.1524" layer="91"/>
+<wire x1="116.84" y1="81.28" x2="116.84" y2="76.2" width="0.1524" layer="91"/>
+<wire x1="116.84" y1="76.2" x2="116.84" y2="68.58" width="0.1524" layer="91"/>
+<wire x1="116.84" y1="68.58" x2="119.38" y2="68.58" width="0.1524" layer="91"/>
+<wire x1="119.38" y1="76.2" x2="116.84" y2="76.2" width="0.1524" layer="91"/>
+<wire x1="116.84" y1="81.28" x2="109.22" y2="81.28" width="0.1524" layer="91"/>
+<junction x="116.84" y="76.2"/>
+<junction x="116.84" y="81.28"/>
+<label x="109.22" y="81.28" size="1.778" layer="95" rot="MR0"/>
+<pinref part="IC10" gate="G$1" pin="2A2"/>
+<pinref part="IC10" gate="G$1" pin="2A4"/>
+<pinref part="IC10" gate="G$1" pin="2A3"/>
+</segment>
+</net>
+<net name="ANT_HI" class="0">
+<segment>
+<wire x1="220.98" y1="111.76" x2="218.44" y2="111.76" width="0.1524" layer="91"/>
+<wire x1="218.44" y1="111.76" x2="208.28" y2="111.76" width="0.1524" layer="91"/>
+<wire x1="208.28" y1="111.76" x2="208.28" y2="109.22" width="0.1524" layer="91"/>
+<wire x1="208.28" y1="111.76" x2="200.66" y2="111.76" width="0.1524" layer="91"/>
+<wire x1="200.66" y1="111.76" x2="200.66" y2="109.22" width="0.1524" layer="91"/>
+<wire x1="200.66" y1="111.76" x2="198.12" y2="111.76" width="0.1524" layer="91"/>
+<wire x1="218.44" y1="121.92" x2="218.44" y2="111.76" width="0.1524" layer="91"/>
+<junction x="208.28" y="111.76"/>
+<junction x="200.66" y="111.76"/>
+<junction x="218.44" y="111.76"/>
+<label x="198.12" y="111.76" size="1.778" layer="95" rot="MR0"/>
+<pinref part="SV2" gate="G$1" pin="PIN4"/>
+<pinref part="C36" gate="G$1" pin="1"/>
+<pinref part="C35" gate="G$1" pin="1"/>
+<pinref part="TP3" gate="G$1" pin="P$1"/>
+</segment>
+</net>
+<net name="ANT_LO" class="0">
+<segment>
+<wire x1="220.98" y1="116.84" x2="208.28" y2="116.84" width="0.1524" layer="91"/>
+<wire x1="208.28" y1="116.84" x2="175.26" y2="116.84" width="0.1524" layer="91"/>
+<wire x1="175.26" y1="116.84" x2="170.18" y2="116.84" width="0.1524" layer="91"/>
+<wire x1="170.18" y1="116.84" x2="167.64" y2="116.84" width="0.1524" layer="91"/>
+<wire x1="167.64" y1="116.84" x2="167.64" y2="114.3" width="0.1524" layer="91"/>
+<wire x1="175.26" y1="114.3" x2="175.26" y2="116.84" width="0.1524" layer="91"/>
+<wire x1="170.18" y1="116.84" x2="170.18" y2="119.38" width="0.1524" layer="91"/>
+<wire x1="170.18" y1="119.38" x2="172.72" y2="119.38" width="0.1524" layer="91"/>
+<wire x1="208.28" y1="121.92" x2="208.28" y2="116.84" width="0.1524" layer="91"/>
+<junction x="175.26" y="116.84"/>
+<junction x="170.18" y="116.84"/>
+<junction x="208.28" y="116.84"/>
+<label x="172.72" y="119.38" size="1.778" layer="95"/>
+<pinref part="SV2" gate="G$1" pin="PIN2"/>
+<pinref part="C39" gate="G$1" pin="1"/>
+<pinref part="C20" gate="G$1" pin="1"/>
+<pinref part="TP2" gate="G$1" pin="P$1"/>
+</segment>
+</net>
+<net name="PWR_OE3" class="0">
+<segment>
+<wire x1="38.1" y1="96.52" x2="48.26" y2="96.52" width="0.1524" layer="91"/>
+<label x="38.1" y="96.52" size="1.778" layer="95" rot="MR0"/>
+<pinref part="IC9" gate="G$1" pin="2NOE"/>
+</segment>
+</net>
+<net name="PWR_OE4" class="0">
+<segment>
+<wire x1="109.22" y1="96.52" x2="119.38" y2="96.52" width="0.1524" layer="91"/>
+<label x="109.22" y="96.52" size="1.778" layer="95" rot="MR0"/>
+<pinref part="IC10" gate="G$1" pin="2NOE"/>
+</segment>
+</net>
+<net name="N$44" class="0">
+<segment>
+<wire x1="73.66" y1="91.44" x2="68.58" y2="91.44" width="0.1524" layer="91"/>
+<pinref part="IC9" gate="G$1" pin="2Y1"/>
+<pinref part="R45" gate="G$1" pin="1"/>
+</segment>
+</net>
+<net name="N$45" class="0">
+<segment>
+<wire x1="144.78" y1="91.44" x2="139.7" y2="91.44" width="0.1524" layer="91"/>
+<pinref part="IC10" gate="G$1" pin="2Y1"/>
+<pinref part="R46" gate="G$1" pin="1"/>
+</segment>
+</net>
+</nets>
+</sheet>
+</sheets>
+</schematic>
+</drawing>
+</eagle>
diff --git a/pcb/proxmark3_fix/CAD/proxmark3_exported_and_modified_components.lbr b/pcb/proxmark3_fix/CAD/proxmark3_exported_and_modified_components.lbr
new file mode 100644 (file)
index 0000000..f988c46
--- /dev/null
@@ -0,0 +1,2457 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE eagle SYSTEM "eagle.dtd">
+<eagle version="6.4">
+<drawing>
+<settings>
+<setting alwaysvectorfont="no"/>
+<setting verticaltext="up"/>
+</settings>
+<grid distance="0.1" unitdist="mm" unit="mm" style="dots" multiple="1" display="no" altdistance="0.025" altunitdist="inch" altunit="inch"/>
+<layers>
+<layer number="1" name="Top" color="4" fill="1" visible="yes" active="yes"/>
+<layer number="2" name="Route2" color="1" fill="3" visible="yes" active="yes"/>
+<layer number="3" name="Route3" color="4" fill="3" visible="yes" active="yes"/>
+<layer number="4" name="Route4" color="1" fill="4" visible="yes" active="yes"/>
+<layer number="5" name="Route5" color="4" fill="4" visible="yes" active="yes"/>
+<layer number="6" name="Route6" color="1" fill="8" visible="yes" active="yes"/>
+<layer number="7" name="Route7" color="4" fill="8" visible="yes" active="yes"/>
+<layer number="8" name="Route8" color="1" fill="2" visible="yes" active="yes"/>
+<layer number="9" name="Route9" color="4" fill="2" visible="yes" active="yes"/>
+<layer number="10" name="Route10" color="1" fill="7" visible="yes" active="yes"/>
+<layer number="11" name="Route11" color="4" fill="7" visible="yes" active="yes"/>
+<layer number="12" name="Route12" color="1" fill="5" visible="yes" active="yes"/>
+<layer number="13" name="Route13" color="4" fill="5" visible="yes" active="yes"/>
+<layer number="14" name="Route14" color="1" fill="6" visible="yes" active="yes"/>
+<layer number="15" name="Route15" color="4" fill="6" visible="yes" active="yes"/>
+<layer number="16" name="Bottom" color="1" fill="1" visible="yes" active="yes"/>
+<layer number="17" name="Pads" color="2" fill="1" visible="yes" active="yes"/>
+<layer number="18" name="Vias" color="2" fill="1" visible="yes" active="yes"/>
+<layer number="19" name="Unrouted" color="6" fill="1" visible="yes" active="yes"/>
+<layer number="20" name="Dimension" color="15" fill="1" visible="yes" active="yes"/>
+<layer number="21" name="tPlace" color="7" fill="1" visible="yes" active="yes"/>
+<layer number="22" name="bPlace" color="7" fill="1" visible="yes" active="yes"/>
+<layer number="23" name="tOrigins" color="15" fill="1" visible="yes" active="yes"/>
+<layer number="24" name="bOrigins" color="15" fill="1" visible="yes" active="yes"/>
+<layer number="25" name="tNames" color="7" fill="1" visible="yes" active="yes"/>
+<layer number="26" name="bNames" color="7" fill="1" visible="yes" active="yes"/>
+<layer number="27" name="tValues" color="7" fill="1" visible="yes" active="yes"/>
+<layer number="28" name="bValues" color="7" fill="1" visible="yes" active="yes"/>
+<layer number="29" name="tStop" color="7" fill="3" visible="yes" active="yes"/>
+<layer number="30" name="bStop" color="7" fill="6" visible="yes" active="yes"/>
+<layer number="31" name="tCream" color="7" fill="4" visible="yes" active="yes"/>
+<layer number="32" name="bCream" color="7" fill="5" visible="yes" active="yes"/>
+<layer number="33" name="tFinish" color="6" fill="3" visible="yes" active="yes"/>
+<layer number="34" name="bFinish" color="6" fill="6" visible="yes" active="yes"/>
+<layer number="35" name="tGlue" color="7" fill="4" visible="yes" active="yes"/>
+<layer number="36" name="bGlue" color="7" fill="5" visible="yes" active="yes"/>
+<layer number="37" name="tTest" color="7" fill="1" visible="yes" active="yes"/>
+<layer number="38" name="bTest" color="7" fill="1" visible="yes" active="yes"/>
+<layer number="39" name="tKeepout" color="4" fill="11" visible="yes" active="yes"/>
+<layer number="40" name="bKeepout" color="1" fill="11" visible="yes" active="yes"/>
+<layer number="41" name="tRestrict" color="4" fill="10" visible="yes" active="yes"/>
+<layer number="42" name="bRestrict" color="1" fill="10" visible="yes" active="yes"/>
+<layer number="43" name="vRestrict" color="2" fill="10" visible="yes" active="yes"/>
+<layer number="44" name="Drills" color="7" fill="1" visible="yes" active="yes"/>
+<layer number="45" name="Holes" color="7" fill="1" visible="yes" active="yes"/>
+<layer number="46" name="Milling" color="3" fill="1" visible="yes" active="yes"/>
+<layer number="47" name="Measures" color="7" fill="1" visible="yes" active="yes"/>
+<layer number="48" name="Document" color="7" fill="1" visible="yes" active="yes"/>
+<layer number="49" name="Reference" color="7" fill="1" visible="yes" active="yes"/>
+<layer number="51" name="tDocu" color="7" fill="1" visible="yes" active="yes"/>
+<layer number="52" name="bDocu" color="7" fill="1" visible="yes" active="yes"/>
+<layer number="91" name="Nets" color="2" fill="1" visible="yes" active="yes"/>
+<layer number="92" name="Busses" color="1" fill="1" visible="yes" active="yes"/>
+<layer number="93" name="Pins" color="2" fill="1" visible="yes" active="yes"/>
+<layer number="94" name="Symbols" color="4" fill="1" visible="yes" active="yes"/>
+<layer number="95" name="Names" color="7" fill="1" visible="yes" active="yes"/>
+<layer number="96" name="Values" color="7" fill="1" visible="yes" active="yes"/>
+<layer number="97" name="Info" color="7" fill="1" visible="yes" active="yes"/>
+<layer number="98" name="Guide" color="6" fill="1" visible="yes" active="yes"/>
+<layer number="101" name="LcdOutline" color="7" fill="1" visible="yes" active="yes"/>
+<layer number="250" name="Descript" color="7" fill="1" visible="yes" active="yes"/>
+<layer number="251" name="SMDround" color="7" fill="1" visible="yes" active="yes"/>
+</layers>
+<library>
+<description>Generated from &lt;b&gt;proxmark3.sch&lt;/b&gt;&lt;p&gt;
+by exp-lbrs.ulp</description>
+<packages>
+<package name="--MERGED_2512">
+<wire x1="-1.27" y1="1.905" x2="7.239" y2="1.905" width="0.127" layer="21"/>
+<wire x1="7.239" y1="1.905" x2="7.239" y2="-1.905" width="0.127" layer="21"/>
+<wire x1="7.239" y1="-1.905" x2="-1.27" y2="-1.905" width="0.127" layer="21"/>
+<wire x1="-1.27" y1="-1.905" x2="-1.27" y2="1.905" width="0.127" layer="21"/>
+<smd name="P$1" x="0" y="0" dx="2.15" dy="3.5" layer="1"/>
+<smd name="P$2" x="5.95" y="0" dx="2.15" dy="3.5" layer="1"/>
+<text x="-1.016" y="2.159" size="1.27" layer="21">&gt;NAME</text>
+</package>
+<package name="--MERGED_CAPCAITOR-ELECTROLYTIC-ALCHIP-MZA-F80">
+<wire x1="-3.6" y1="3.3" x2="2.4" y2="3.3" width="0.3048" layer="21"/>
+<wire x1="-3.6" y1="-3.3" x2="2.4" y2="-3.3" width="0.3048" layer="21"/>
+<wire x1="-3.6" y1="3.3" x2="-3.6" y2="1" width="0.3048" layer="21"/>
+<wire x1="-3.6" y1="-1" x2="-3.6" y2="-3.3" width="0.3048" layer="21"/>
+<wire x1="3.6" y1="2.5" x2="3.6" y2="1" width="0.3048" layer="21"/>
+<wire x1="3.6" y1="-1" x2="3.6" y2="-2.5" width="0.3048" layer="21"/>
+<wire x1="2.5" y1="-3.3" x2="3.6" y2="-2.5" width="0.3048" layer="21"/>
+<wire x1="2.4" y1="3.3" x2="3.6" y2="2.5" width="0.3048" layer="21"/>
+<smd name="+" x="2.75" y="0" dx="3.5" dy="1.5" layer="1"/>
+<smd name="-" x="-2.75" y="0" dx="3.5" dy="1.5" layer="1"/>
+<text x="1.84" y="1.905" size="1.27" layer="21" ratio="16">+</text>
+<text x="-3" y="-2.5" size="1.27" layer="21" ratio="16">&gt;NAME</text>
+</package>
+<package name="--MERGED_HEADER-MALE-6X1-0.100-UNKEYED">
+<wire x1="-1.17" y1="7.62" x2="1.17" y2="7.62" width="0.254" layer="21"/>
+<wire x1="1.17" y1="7.62" x2="1.17" y2="-7.62" width="0.254" layer="21"/>
+<wire x1="1.17" y1="-7.62" x2="-1.17" y2="-7.62" width="0.254" layer="21"/>
+<wire x1="-1.17" y1="-7.62" x2="-1.17" y2="7.62" width="0.254" layer="21"/>
+<pad name="1" x="0" y="6.35" drill="1.143" shape="square"/>
+<pad name="2" x="0" y="3.81" drill="1.143"/>
+<pad name="3" x="0" y="1.27" drill="1.143"/>
+<pad name="4" x="0" y="-1.27" drill="1.143"/>
+<pad name="5" x="0" y="-3.81" drill="1.143"/>
+<pad name="6" x="0" y="-6.35" drill="1.143"/>
+<text x="1.905" y="6.985" size="1.27" layer="21" ratio="22" rot="R270">&gt;NAME</text>
+</package>
+<package name="--MERGED_HEADER-MALE-10X2-0.100-SHROUDED">
+<wire x1="-4.572" y1="16.51" x2="4.572" y2="16.51" width="0.254" layer="21"/>
+<wire x1="-4.572" y1="-16.51" x2="4.572" y2="-16.51" width="0.254" layer="21"/>
+<wire x1="-4.572" y1="16.51" x2="-4.572" y2="-16.51" width="0.254" layer="21"/>
+<wire x1="4.572" y1="16.51" x2="4.572" y2="-16.51" width="0.254" layer="21"/>
+<pad name="1" x="-1.27" y="11.43" drill="1.143" shape="square"/>
+<pad name="2" x="1.27" y="11.43" drill="1.143"/>
+<pad name="3" x="-1.27" y="8.89" drill="1.143"/>
+<pad name="4" x="1.27" y="8.89" drill="1.143"/>
+<pad name="5" x="-1.27" y="6.35" drill="1.143"/>
+<pad name="6" x="1.27" y="6.35" drill="1.143"/>
+<pad name="7" x="-1.27" y="3.81" drill="1.143"/>
+<pad name="8" x="1.27" y="3.81" drill="1.143"/>
+<pad name="9" x="-1.27" y="1.27" drill="1.143"/>
+<pad name="10" x="1.27" y="1.27" drill="1.143"/>
+<pad name="11" x="-1.27" y="-1.27" drill="1.143"/>
+<pad name="12" x="1.27" y="-1.27" drill="1.143"/>
+<pad name="13" x="-1.27" y="-3.81" drill="1.143"/>
+<pad name="14" x="1.27" y="-3.81" drill="1.143"/>
+<pad name="15" x="-1.27" y="-6.35" drill="1.143"/>
+<pad name="16" x="1.27" y="-6.35" drill="1.143"/>
+<pad name="17" x="-1.27" y="-8.89" drill="1.143"/>
+<pad name="18" x="1.27" y="-8.89" drill="1.143"/>
+<pad name="19" x="-1.27" y="-11.43" drill="1.143"/>
+<pad name="20" x="1.27" y="-11.43" drill="1.143"/>
+<text x="-3.175" y="14.605" size="1.27" layer="21" ratio="17">&gt;NAME</text>
+</package>
+<package name="--MERGED_HIROSE-MQ172-4POS">
+<wire x1="3.6" y1="0" x2="-3.6" y2="0" width="0.127" layer="21"/>
+<wire x1="-3.6" y1="1.7" x2="-3.6" y2="0" width="0.127" layer="21"/>
+<wire x1="3.6" y1="1.7" x2="3.6" y2="0" width="0.127" layer="21"/>
+<wire x1="-3.6" y1="1.7" x2="-3.2" y2="1.7" width="0.127" layer="21"/>
+<wire x1="3.6" y1="1.7" x2="3.2" y2="1.7" width="0.127" layer="21"/>
+<smd name="1" x="-1.2" y="6.75" dx="0.55" dy="2.5" layer="1"/>
+<smd name="2" x="-0.4" y="6.75" dx="0.55" dy="2.5" layer="1"/>
+<smd name="3" x="0.4" y="6.75" dx="0.55" dy="2.5" layer="1"/>
+<smd name="4" x="1.2" y="6.75" dx="0.55" dy="2.5" layer="1"/>
+<smd name="P$1" x="-3.85" y="4.45" dx="2.3" dy="3.8" layer="1"/>
+<smd name="P$2" x="3.85" y="4.45" dx="2.3" dy="3.8" layer="1"/>
+<text x="-2.7918" y="0.2997" size="1.27" layer="21">&gt;NAME</text>
+<hole x="-1.5" y="3.6" drill="1"/>
+<hole x="1.5" y="3.6" drill="1"/>
+</package>
+<package name="--MERGED_KEYSTONE-PTH-TESTPOINT-5011">
+<circle x="0" y="0" radius="1.5875" width="0.254" layer="21"/>
+<wire x1="-1.524" y1="0" x2="-1.397" y2="0" width="0.254" layer="21"/>
+<wire x1="1.524" y1="0" x2="1.397" y2="0" width="0.254" layer="21"/>
+<pad name="A" x="0" y="0" drill="1.6002"/>
+<text x="-1.27" y="-0.508" size="0.889" layer="51">&gt;NAME</text>
+</package>
+<package name="--MERGED_KEYSTONE-SMD-TESTPOINT-5015">
+<wire x1="-1.9685" y1="1.143" x2="-0.508" y2="1.143" width="0.254" layer="21"/>
+<wire x1="-1.9685" y1="-1.143" x2="-0.508" y2="-1.143" width="0.254" layer="21"/>
+<wire x1="-1.9685" y1="1.143" x2="-1.9685" y2="-1.143" width="0.254" layer="21"/>
+<wire x1="1.9685" y1="1.143" x2="0.508" y2="1.143" width="0.254" layer="21"/>
+<wire x1="1.9685" y1="-1.143" x2="0.508" y2="-1.143" width="0.254" layer="21"/>
+<wire x1="1.9685" y1="1.143" x2="1.9685" y2="-1.143" width="0.254" layer="21"/>
+<smd name="1" x="0" y="0" dx="3.429" dy="1.778" layer="1"/>
+<text x="-1.8263" y="-0.5699" size="1.27" layer="51">&gt;NAME</text>
+</package>
+<package name="--MERGED_LED_0603">
+<wire x1="-1.4732" y1="0.6858" x2="1.4732" y2="0.6858" width="0.2032" layer="21"/>
+<wire x1="1.4732" y1="0.6858" x2="1.4732" y2="-0.6858" width="0.2032" layer="21"/>
+<wire x1="1.4732" y1="-0.6858" x2="-1.4732" y2="-0.6858" width="0.2032" layer="21"/>
+<wire x1="-1.4732" y1="-0.6858" x2="-1.4732" y2="0.6858" width="0.2032" layer="21"/>
+<smd name="+" x="-0.85" y="0" dx="1" dy="1.1" layer="1"/>
+<smd name="-" x="0.85" y="0" dx="1" dy="1.1" layer="1"/>
+<text x="-1.1938" y="-0.4064" size="0.762" layer="51">&gt;NAME</text>
+<text x="-1.2779" y="0.7482" size="1.016" layer="21" ratio="18">+</text>
+</package>
+<package name="--MERGED_LQFP-64">
+<circle x="-0.3467" y="1.8033" radius="0.3807" width="0.2" layer="21"/>
+<wire x1="-0.25" y1="11.5" x2="-1.75" y2="11.5" width="0.2" layer="21"/>
+<wire x1="-1.75" y1="11.5" x2="-1.75" y2="10" width="0.2" layer="21"/>
+<wire x1="-0.25" y1="0.5" x2="-1.75" y2="0.5" width="0.2" layer="21"/>
+<wire x1="-1.75" y1="2" x2="-1.75" y2="0.5" width="0.2" layer="21"/>
+<wire x1="9.25" y1="0.5" x2="7.75" y2="0.5" width="0.2" layer="21"/>
+<wire x1="9.25" y1="2" x2="9.25" y2="0.5" width="0.2" layer="21"/>
+<wire x1="9.25" y1="11.5" x2="7.75" y2="11.5" width="0.2" layer="21"/>
+<wire x1="9.25" y1="11.5" x2="9.25" y2="10" width="0.2" layer="21"/>
+<smd name="1" x="0" y="0" dx="0.25" dy="2" layer="1"/>
+<smd name="2" x="0.5" y="0" dx="0.25" dy="2" layer="1"/>
+<smd name="3" x="1" y="0" dx="0.25" dy="2" layer="1"/>
+<smd name="4" x="1.5" y="0" dx="0.25" dy="2" layer="1"/>
+<smd name="5" x="2" y="0" dx="0.25" dy="2" layer="1"/>
+<smd name="6" x="2.5" y="0" dx="0.25" dy="2" layer="1"/>
+<smd name="7" x="3" y="0" dx="0.25" dy="2" layer="1"/>
+<smd name="8" x="3.5" y="0" dx="0.25" dy="2" layer="1"/>
+<smd name="9" x="4" y="0" dx="0.25" dy="2" layer="1"/>
+<smd name="10" x="4.5" y="0" dx="0.25" dy="2" layer="1"/>
+<smd name="11" x="5" y="0" dx="0.25" dy="2" layer="1"/>
+<smd name="12" x="5.5" y="0" dx="0.25" dy="2" layer="1"/>
+<smd name="13" x="6" y="0" dx="0.25" dy="2" layer="1"/>
+<smd name="14" x="6.5" y="0" dx="0.25" dy="2" layer="1"/>
+<smd name="15" x="7" y="0" dx="0.25" dy="2" layer="1"/>
+<smd name="16" x="7.5" y="0" dx="0.25" dy="2" layer="1"/>
+<smd name="17" x="9.75" y="2.25" dx="0.25" dy="2" layer="1" rot="R90"/>
+<smd name="18" x="9.75" y="2.75" dx="0.25" dy="2" layer="1" rot="R90"/>
+<smd name="19" x="9.75" y="3.25" dx="0.25" dy="2" layer="1" rot="R90"/>
+<smd name="20" x="9.75" y="3.75" dx="0.25" dy="2" layer="1" rot="R90"/>
+<smd name="21" x="9.75" y="4.25" dx="0.25" dy="2" layer="1" rot="R90"/>
+<smd name="22" x="9.75" y="4.75" dx="0.25" dy="2" layer="1" rot="R90"/>
+<smd name="23" x="9.75" y="5.25" dx="0.25" dy="2" layer="1" rot="R90"/>
+<smd name="24" x="9.75" y="5.75" dx="0.25" dy="2" layer="1" rot="R90"/>
+<smd name="25" x="9.75" y="6.25" dx="0.25" dy="2" layer="1" rot="R90"/>
+<smd name="26" x="9.75" y="6.75" dx="0.25" dy="2" layer="1" rot="R90"/>
+<smd name="27" x="9.75" y="7.25" dx="0.25" dy="2" layer="1" rot="R90"/>
+<smd name="28" x="9.75" y="7.75" dx="0.25" dy="2" layer="1" rot="R90"/>
+<smd name="29" x="9.75" y="8.25" dx="0.25" dy="2" layer="1" rot="R90"/>
+<smd name="30" x="9.75" y="8.75" dx="0.25" dy="2" layer="1" rot="R90"/>
+<smd name="31" x="9.75" y="9.25" dx="0.25" dy="2" layer="1" rot="R90"/>
+<smd name="32" x="9.75" y="9.75" dx="0.25" dy="2" layer="1" rot="R90"/>
+<smd name="33" x="7.5" y="12" dx="0.25" dy="2" layer="1"/>
+<smd name="34" x="7" y="12" dx="0.25" dy="2" layer="1"/>
+<smd name="35" x="6.5" y="12" dx="0.25" dy="2" layer="1"/>
+<smd name="36" x="6" y="12" dx="0.25" dy="2" layer="1"/>
+<smd name="37" x="5.5" y="12" dx="0.25" dy="2" layer="1"/>
+<smd name="38" x="5" y="12" dx="0.25" dy="2" layer="1"/>
+<smd name="39" x="4.5" y="12" dx="0.25" dy="2" layer="1"/>
+<smd name="40" x="4" y="12" dx="0.25" dy="2" layer="1"/>
+<smd name="41" x="3.5" y="12" dx="0.25" dy="2" layer="1"/>
+<smd name="42" x="3" y="12" dx="0.25" dy="2" layer="1"/>
+<smd name="43" x="2.5" y="12" dx="0.25" dy="2" layer="1"/>
+<smd name="44" x="2" y="12" dx="0.25" dy="2" layer="1"/>
+<smd name="45" x="1.5" y="12" dx="0.25" dy="2" layer="1"/>
+<smd name="46" x="1" y="12" dx="0.25" dy="2" layer="1"/>
+<smd name="47" x="0.5" y="12" dx="0.25" dy="2" layer="1"/>
+<smd name="48" x="0" y="12" dx="0.25" dy="2" layer="1"/>
+<smd name="49" x="-2.25" y="9.75" dx="0.25" dy="2" layer="1" rot="R90"/>
+<smd name="50" x="-2.25" y="9.25" dx="0.25" dy="2" layer="1" rot="R90"/>
+<smd name="51" x="-2.25" y="8.75" dx="0.25" dy="2" layer="1" rot="R90"/>
+<smd name="52" x="-2.25" y="8.25" dx="0.25" dy="2" layer="1" rot="R90"/>
+<smd name="53" x="-2.25" y="7.75" dx="0.25" dy="2" layer="1" rot="R90"/>
+<smd name="54" x="-2.25" y="7.25" dx="0.25" dy="2" layer="1" rot="R90"/>
+<smd name="55" x="-2.25" y="6.75" dx="0.25" dy="2" layer="1" rot="R90"/>
+<smd name="56" x="-2.25" y="6.25" dx="0.25" dy="2" layer="1" rot="R90"/>
+<smd name="57" x="-2.25" y="5.75" dx="0.25" dy="2" layer="1" rot="R90"/>
+<smd name="58" x="-2.25" y="5.25" dx="0.25" dy="2" layer="1" rot="R90"/>
+<smd name="59" x="-2.25" y="4.75" dx="0.25" dy="2" layer="1" rot="R90"/>
+<smd name="60" x="-2.25" y="4.25" dx="0.25" dy="2" layer="1" rot="R90"/>
+<smd name="61" x="-2.25" y="3.75" dx="0.25" dy="2" layer="1" rot="R90"/>
+<smd name="62" x="-2.25" y="3.25" dx="0.25" dy="2" layer="1" rot="R90"/>
+<smd name="63" x="-2.25" y="2.75" dx="0.25" dy="2" layer="1" rot="R90"/>
+<smd name="64" x="-2.25" y="2.25" dx="0.25" dy="2" layer="1" rot="R90"/>
+<text x="0.5376" y="1.4397" size="1.27" layer="21">1</text>
+<text x="-0.3641" y="9.155" size="1.27" layer="21">&gt;NAME</text>
+</package>
+<package name="--MERGED_MSOP8">
+<circle x="0" y="1.2" radius="0.2" width="0.127" layer="21"/>
+<wire x1="2.4" y1="4.2" x2="-0.4" y2="4.2" width="0.127" layer="21"/>
+<wire x1="-0.4" y1="4.2" x2="-0.6" y2="4" width="0.127" layer="21"/>
+<wire x1="-0.6" y1="4" x2="-0.6" y2="0.8" width="0.127" layer="21"/>
+<wire x1="-0.6" y1="0.8" x2="-0.4" y2="0.6" width="0.127" layer="21"/>
+<wire x1="-0.4" y1="0.6" x2="2.4" y2="0.6" width="0.127" layer="21"/>
+<wire x1="2.4" y1="0.6" x2="2.6" y2="0.8" width="0.127" layer="21"/>
+<wire x1="2.6" y1="0.8" x2="2.6" y2="4" width="0.127" layer="21"/>
+<wire x1="2.6" y1="4" x2="2.4" y2="4.2" width="0.127" layer="21"/>
+<smd name="1" x="0" y="0" dx="0.41" dy="1.02" layer="1"/>
+<smd name="2" x="0.65" y="0" dx="0.41" dy="1.02" layer="1"/>
+<smd name="3" x="1.3" y="0" dx="0.41" dy="1.02" layer="1"/>
+<smd name="4" x="1.95" y="0" dx="0.41" dy="1.02" layer="1"/>
+<smd name="5" x="1.95" y="4.8" dx="0.41" dy="1.02" layer="1"/>
+<smd name="6" x="1.3" y="4.8" dx="0.41" dy="1.02" layer="1"/>
+<smd name="7" x="0.65" y="4.8" dx="0.41" dy="1.02" layer="1"/>
+<smd name="8" x="0" y="4.8" dx="0.41" dy="1.02" layer="1"/>
+<text x="2.8" y="4.6" size="1.27" layer="25" rot="R270">&gt;NAME</text>
+</package>
+<package name="--MERGED_RLC_0603">
+<wire x1="-1.4732" y1="0.6858" x2="1.4732" y2="0.6858" width="0.15" layer="21"/>
+<wire x1="1.4732" y1="0.6858" x2="1.4732" y2="-0.6858" width="0.15" layer="21"/>
+<wire x1="1.4732" y1="-0.6858" x2="-1.4732" y2="-0.6858" width="0.15" layer="21"/>
+<wire x1="-1.4732" y1="-0.6858" x2="-1.4732" y2="0.6858" width="0.15" layer="21"/>
+<smd name="1" x="-0.85" y="0" dx="1" dy="1.1" layer="1"/>
+<smd name="2" x="0.85" y="0" dx="1" dy="1.1" layer="1"/>
+<text x="-1.1938" y="-0.4064" size="0.762" layer="51">&gt;NAME</text>
+</package>
+<package name="--MERGED_RLC_0805">
+<wire x1="-1.651" y1="0.9144" x2="1.651" y2="0.9144" width="0.254" layer="21"/>
+<wire x1="1.651" y1="0.9144" x2="1.651" y2="-0.9144" width="0.254" layer="21"/>
+<wire x1="1.651" y1="-0.9144" x2="-1.651" y2="-0.9144" width="0.254" layer="21"/>
+<wire x1="-1.651" y1="-0.9144" x2="-1.651" y2="0.9144" width="0.254" layer="21"/>
+<smd name="1" x="-0.85" y="0" dx="1.3" dy="1.5" layer="1"/>
+<smd name="2" x="0.85" y="0" dx="1.3" dy="1.5" layer="1"/>
+<text x="-1.4732" y="-0.635" size="1.27" layer="51">&gt;NAME</text>
+</package>
+<package name="--MERGED_RLC_1210">
+<wire x1="-2.4638" y1="1.6764" x2="2.4638" y2="1.6764" width="0.3048" layer="21"/>
+<wire x1="2.4638" y1="1.6764" x2="2.4638" y2="-1.651" width="0.3048" layer="21"/>
+<wire x1="2.4638" y1="-1.651" x2="-2.4638" y2="-1.651" width="0.3048" layer="21"/>
+<wire x1="-2.4638" y1="-1.651" x2="-2.4638" y2="1.6764" width="0.3048" layer="21"/>
+<smd name="1" x="-1.5" y="0" dx="1.5" dy="2.9" layer="1"/>
+<smd name="2" x="1.5" y="0" dx="1.5" dy="2.9" layer="1"/>
+<text x="-2.2096" y="-0.736" size="1.524" layer="51">&gt;NAME</text>
+</package>
+<package name="--MERGED_SMV-5">
+<wire x1="0.2" y1="0.5" x2="1.8" y2="0.5" width="0.127" layer="21"/>
+<wire x1="0.2" y1="-2.5" x2="1.8" y2="-2.5" width="0.127" layer="21"/>
+<wire x1="0.2" y1="-2.5" x2="0.2" y2="-2.3" width="0.127" layer="21"/>
+<wire x1="1.8" y1="-2.5" x2="1.8" y2="-2.3" width="0.127" layer="21"/>
+<wire x1="0.2" y1="0.5" x2="0.2" y2="0.4" width="0.127" layer="21"/>
+<wire x1="1.8" y1="0.5" x2="1.8" y2="0.4" width="0.127" layer="21"/>
+<wire x1="1.8" y1="-0.6" x2="1.8" y2="-0.4" width="0.127" layer="21"/>
+<wire x1="1.8" y1="-0.6" x2="1.8" y2="-1.4" width="0.127" layer="21"/>
+<smd name="1" x="0" y="0" dx="1.5" dy="0.5" layer="1"/>
+<smd name="2" x="0" y="-0.95" dx="1.5" dy="0.5" layer="1"/>
+<smd name="3" x="0" y="-1.9" dx="1.5" dy="0.5" layer="1"/>
+<smd name="4" x="2.2" y="-1.9" dx="1.5" dy="0.5" layer="1"/>
+<smd name="5" x="2.2" y="0" dx="1.5" dy="0.5" layer="1"/>
+<text x="0" y="0.8" size="1.016" layer="21" ratio="18">&gt;NAME</text>
+</package>
+<package name="--MERGED_SOIC-8">
+<wire x1="4.445" y1="3.81" x2="0.381" y2="3.81" width="0.254" layer="21"/>
+<wire x1="0.381" y1="3.81" x2="0.127" y2="3.81" width="0.254" layer="21"/>
+<wire x1="0.127" y1="3.81" x2="-0.127" y2="3.81" width="0.254" layer="21"/>
+<wire x1="-0.127" y1="3.81" x2="-0.381" y2="3.81" width="0.254" layer="21"/>
+<wire x1="-0.381" y1="3.81" x2="-0.635" y2="3.81" width="0.254" layer="21"/>
+<wire x1="-0.635" y1="3.81" x2="-0.635" y2="1.27" width="0.254" layer="21"/>
+<wire x1="-0.635" y1="1.27" x2="-0.381" y2="1.27" width="0.254" layer="21"/>
+<wire x1="-0.381" y1="1.27" x2="-0.127" y2="1.27" width="0.254" layer="21"/>
+<wire x1="-0.127" y1="1.27" x2="0.127" y2="1.27" width="0.254" layer="21"/>
+<wire x1="0.127" y1="1.27" x2="4.445" y2="1.27" width="0.254" layer="21"/>
+<wire x1="4.445" y1="1.27" x2="4.445" y2="3.81" width="0.254" layer="21"/>
+<wire x1="-0.381" y1="3.81" x2="-0.381" y2="1.27" width="0.254" layer="21"/>
+<smd name="1" x="0" y="0" dx="2.032" dy="0.6604" layer="1" rot="R90"/>
+<smd name="2" x="1.27" y="0" dx="2.032" dy="0.6604" layer="1" rot="R90"/>
+<smd name="3" x="2.54" y="0" dx="2.032" dy="0.6604" layer="1" rot="R90"/>
+<smd name="4" x="3.81" y="0" dx="2.032" dy="0.6604" layer="1" rot="R90"/>
+<smd name="5" x="3.81" y="5.08" dx="2.032" dy="0.6604" layer="1" rot="R90"/>
+<smd name="6" x="2.54" y="5.08" dx="2.032" dy="0.6604" layer="1" rot="R90"/>
+<smd name="7" x="1.27" y="5.08" dx="2.032" dy="0.6604" layer="1" rot="R90"/>
+<smd name="8" x="0" y="5.08" dx="2.032" dy="0.6604" layer="1" rot="R90"/>
+<text x="0.6825" y="1.8742" size="1.27" layer="25" ratio="15">&gt;NAME</text>
+</package>
+<package name="--MERGED_SOT-23-5">
+<wire x1="-1.3398" y1="-0.4224" x2="1.2602" y2="-0.4224" width="0.127" layer="21"/>
+<wire x1="1.2602" y1="-0.4224" x2="1.2602" y2="0.4776" width="0.127" layer="21"/>
+<wire x1="1.2602" y1="0.4776" x2="-1.3398" y2="0.4776" width="0.127" layer="21"/>
+<wire x1="-1.3398" y1="0.4776" x2="-1.3398" y2="-0.4224" width="0.127" layer="21"/>
+<smd name="1" x="-0.9398" y="-1.4224" dx="0.4" dy="1.5" layer="1"/>
+<smd name="2" x="0.0102" y="-1.4224" dx="0.4" dy="1.5" layer="1"/>
+<smd name="3" x="0.9602" y="-1.4224" dx="0.4" dy="1.5" layer="1"/>
+<smd name="4" x="0.9602" y="1.4276" dx="0.4" dy="1.5" layer="1"/>
+<smd name="5" x="-0.9398" y="1.4276" dx="0.4" dy="1.5" layer="1"/>
+<text x="1.4602" y="2.1776" size="1.27" layer="21" font="vector" rot="R270">&gt;NAME</text>
+</package>
+<package name="--MERGED_SOT-23-8">
+<wire x1="-1.5508" y1="1.5" x2="-1.5508" y2="-1.5" width="0.254" layer="21"/>
+<wire x1="-1.2968" y1="1.5" x2="-1.2968" y2="-1.5" width="0.254" layer="21"/>
+<wire x1="-1.3208" y1="-1.524" x2="-1.5748" y2="-1.524" width="0.254" layer="21"/>
+<wire x1="-1.3208" y1="1.524" x2="-1.5748" y2="1.524" width="0.254" layer="21"/>
+<wire x1="-1.5748" y1="1.524" x2="-1.5748" y2="-1.524" width="0.254" layer="21"/>
+<wire x1="1.5" y1="1.5" x2="1.5" y2="-1.5" width="0.254" layer="21"/>
+<wire x1="-1.27" y1="0.508" x2="-1.016" y2="0.508" width="0.254" layer="21"/>
+<wire x1="-1.016" y1="0.508" x2="-1.016" y2="-0.508" width="0.254" layer="21"/>
+<wire x1="-1.016" y1="-0.508" x2="-1.27" y2="-0.508" width="0.254" layer="21"/>
+<wire x1="-1.27" y1="-0.508" x2="-1.27" y2="0.254" width="0.254" layer="21"/>
+<wire x1="-1.27" y1="0.254" x2="-1.016" y2="0.254" width="0.254" layer="21"/>
+<wire x1="-1.016" y1="0.254" x2="-1.016" y2="0.508" width="0.254" layer="21"/>
+<wire x1="-1.016" y1="0.508" x2="-0.762" y2="0.508" width="0.254" layer="21"/>
+<wire x1="-0.762" y1="0.508" x2="-0.762" y2="-0.508" width="0.254" layer="21"/>
+<wire x1="-0.762" y1="-0.508" x2="-1.016" y2="-0.508" width="0.254" layer="21"/>
+<smd name="1" x="-0.975" y="-1.4" dx="0.325" dy="1.25" layer="1"/>
+<smd name="2" x="-0.325" y="-1.4" dx="0.325" dy="1.25" layer="1"/>
+<smd name="3" x="0.325" y="-1.4" dx="0.325" dy="1.25" layer="1"/>
+<smd name="4" x="0.975" y="-1.4" dx="0.325" dy="1.25" layer="1"/>
+<smd name="5" x="0.975" y="1.4" dx="0.325" dy="1.25" layer="1"/>
+<smd name="6" x="0.325" y="1.4" dx="0.325" dy="1.25" layer="1"/>
+<smd name="7" x="-0.325" y="1.4" dx="0.325" dy="1.25" layer="1"/>
+<smd name="8" x="-0.975" y="1.4" dx="0.325" dy="1.25" layer="1"/>
+<text x="-1.905" y="-1.27" size="1.016" layer="21" ratio="17" rot="R90">&gt;NAME</text>
+</package>
+<package name="--MERGED_SOT-23-8-OR-MSOP-8">
+<wire x1="-1.5508" y1="1.5" x2="-1.5508" y2="-1.5" width="0.254" layer="21"/>
+<wire x1="-1.2968" y1="1.5" x2="-1.2968" y2="-1.5" width="0.254" layer="21"/>
+<wire x1="-1.3208" y1="-1.524" x2="-1.5748" y2="-1.524" width="0.254" layer="21"/>
+<wire x1="-1.3208" y1="1.524" x2="-1.5748" y2="1.524" width="0.254" layer="21"/>
+<wire x1="-1.5748" y1="1.524" x2="-1.5748" y2="-1.524" width="0.254" layer="21"/>
+<wire x1="1.5" y1="1.5" x2="1.5" y2="-1.5" width="0.254" layer="21"/>
+<wire x1="-1.27" y1="0.508" x2="-1.016" y2="0.508" width="0.254" layer="21"/>
+<wire x1="-1.016" y1="0.508" x2="-1.016" y2="-0.508" width="0.254" layer="21"/>
+<wire x1="-1.016" y1="-0.508" x2="-1.27" y2="-0.508" width="0.254" layer="21"/>
+<wire x1="-1.27" y1="-0.508" x2="-1.27" y2="0.254" width="0.254" layer="21"/>
+<wire x1="-1.27" y1="0.254" x2="-1.016" y2="0.254" width="0.254" layer="21"/>
+<wire x1="-1.016" y1="0.254" x2="-1.016" y2="0.508" width="0.254" layer="21"/>
+<wire x1="-1.016" y1="0.508" x2="-0.762" y2="0.508" width="0.254" layer="21"/>
+<wire x1="-0.762" y1="0.508" x2="-0.762" y2="-0.508" width="0.254" layer="21"/>
+<wire x1="-0.762" y1="-0.508" x2="-1.016" y2="-0.508" width="0.254" layer="21"/>
+<smd name="1" x="-0.975" y="-1.65" dx="0.325" dy="1.8" layer="1"/>
+<smd name="2" x="-0.325" y="-1.65" dx="0.325" dy="1.8" layer="1"/>
+<smd name="3" x="0.325" y="-1.65" dx="0.325" dy="1.8" layer="1"/>
+<smd name="4" x="0.975" y="-1.65" dx="0.325" dy="1.8" layer="1"/>
+<smd name="5" x="0.975" y="1.65" dx="0.325" dy="1.8" layer="1"/>
+<smd name="6" x="0.325" y="1.65" dx="0.325" dy="1.8" layer="1"/>
+<smd name="7" x="-0.325" y="1.65" dx="0.325" dy="1.8" layer="1"/>
+<smd name="8" x="-0.975" y="1.65" dx="0.325" dy="1.8" layer="1"/>
+<text x="-1.905" y="-1.27" size="1.016" layer="21" ratio="17" rot="R90">&gt;NAME</text>
+</package>
+<package name="--MERGED_SOT23-3LEAD">
+<wire x1="-1" y1="1" x2="-1" y2="-0.1" width="0.127" layer="21"/>
+<wire x1="-0.3" y1="-0.7" x2="0.3" y2="-0.7" width="0.127" layer="21"/>
+<wire x1="1" y1="-0.1" x2="1" y2="1" width="0.127" layer="21"/>
+<wire x1="1" y1="1" x2="0.6" y2="1" width="0.127" layer="21"/>
+<wire x1="-1" y1="1" x2="-0.6" y2="1" width="0.127" layer="21"/>
+<smd name="1" x="-0.9398" y="-0.762" dx="1.016" dy="1.016" layer="1"/>
+<smd name="2" x="0.9652" y="-0.762" dx="1.016" dy="1.016" layer="1"/>
+<smd name="3" x="0.0127" y="1.143" dx="1.016" dy="1.778" layer="1"/>
+<text x="2.4326" y="-0.1281" size="1.016" layer="25" font="vector" ratio="18" rot="R90">&gt;NAME</text>
+</package>
+<package name="--MERGED_SQUARE-PAD-0.200-INCH">
+<smd name="1" x="0" y="0" dx="5.08" dy="5.08" layer="1"/>
+</package>
+<package name="--MERGED_TACTSWITCH">
+<wire x1="-1.27" y1="3.175" x2="6.35" y2="3.175" width="0.127" layer="21"/>
+<wire x1="6.35" y1="3.175" x2="6.35" y2="-3.175" width="0.127" layer="21"/>
+<wire x1="6.35" y1="-3.175" x2="-1.27" y2="-3.175" width="0.127" layer="21"/>
+<wire x1="-1.27" y1="-3.175" x2="-1.27" y2="3.175" width="0.127" layer="21"/>
+<pad name="P$1" x="0" y="0" drill="0.8128" diameter="1.6764"/>
+<pad name="P$2" x="5.08" y="0" drill="0.8128" diameter="1.6764"/>
+</package>
+<package name="--MERGED_TACTSWITCH-SMD-EVQQ1">
+<wire x1="-4.25" y1="5" x2="-3.2" y2="5" width="0.3048" layer="21"/>
+<wire x1="3.2" y1="5" x2="4.25" y2="5" width="0.3048" layer="21"/>
+<wire x1="-4.25" y1="-5" x2="-3.2" y2="-5" width="0.3048" layer="21"/>
+<wire x1="3.2" y1="-5" x2="4.25" y2="-5" width="0.3048" layer="21"/>
+<wire x1="-4.25" y1="5" x2="-4.25" y2="-5" width="0.3048" layer="21"/>
+<wire x1="4.25" y1="5" x2="4.25" y2="-5" width="0.3048" layer="21"/>
+<wire x1="-1.34" y1="5" x2="1.31" y2="5" width="0.3048" layer="21"/>
+<wire x1="-1.34" y1="-5" x2="1.31" y2="-5" width="0.3048" layer="21"/>
+<smd name="A" x="-2.25" y="4.5" dx="1.5" dy="3" layer="1"/>
+<smd name="B" x="2.25" y="-4.5" dx="1.5" dy="3" layer="1"/>
+<smd name="P$2" x="2.25" y="4.5" dx="1.5" dy="3" layer="1"/>
+<smd name="P$3" x="-2.25" y="-4.5" dx="1.5" dy="3" layer="1"/>
+<text x="-3.81" y="1.27" size="1.27" layer="21" ratio="13">&gt;NAME</text>
+</package>
+<package name="--MERGED_TESTPAD-PTH-0.7MM">
+<circle x="0" y="0" radius="1.2" width="0.127" layer="21"/>
+<pad name="1" x="0" y="0" drill="0.7" diameter="1.778"/>
+</package>
+<package name="--MERGED_TQ-SMD-RELAY">
+<wire x1="-7" y1="-6.6" x2="7" y2="-6.6" width="0.254" layer="21"/>
+<wire x1="-7" y1="6.6" x2="7" y2="6.6" width="0.254" layer="21"/>
+<wire x1="-7" y1="6.6" x2="-7" y2="-6.6" width="0.254" layer="21"/>
+<wire x1="7" y1="6.6" x2="7" y2="-6.6" width="0.254" layer="21"/>
+<wire x1="-4" y1="2" x2="-6" y2="2" width="0.254" layer="21"/>
+<wire x1="-6" y1="2" x2="-6" y2="-2" width="0.254" layer="21"/>
+<wire x1="-6" y1="-2" x2="-4" y2="-2" width="0.254" layer="21"/>
+<wire x1="-4" y1="-2" x2="-4" y2="2" width="0.254" layer="21"/>
+<smd name="1" x="-5.08" y="-4.78" dx="1" dy="3" layer="1" rot="R180"/>
+<smd name="2" x="-2.54" y="-4.78" dx="1" dy="3" layer="1" rot="R180"/>
+<smd name="3" x="0" y="-4.78" dx="1" dy="3" layer="1" rot="R180"/>
+<smd name="4" x="2.54" y="-4.78" dx="1" dy="3" layer="1" rot="R180"/>
+<smd name="5" x="5.08" y="-4.78" dx="1" dy="3" layer="1" rot="R180"/>
+<smd name="6" x="5.08" y="4.78" dx="1" dy="3" layer="1" rot="R180"/>
+<smd name="7" x="2.54" y="4.78" dx="1" dy="3" layer="1" rot="R180"/>
+<smd name="8" x="0" y="4.78" dx="1" dy="3" layer="1" rot="R180"/>
+<smd name="9" x="-2.54" y="4.78" dx="1" dy="3" layer="1" rot="R180"/>
+<smd name="10" x="-5.08" y="4.78" dx="1" dy="3" layer="1" rot="R180"/>
+<text x="6.35" y="-2.54" size="1.27" layer="21" ratio="17" rot="R90">&gt;NAME</text>
+</package>
+<package name="--MERGED_TSSOP-14">
+<wire x1="0.8" y1="0.3" x2="5.3" y2="0.3" width="0.127" layer="21"/>
+<wire x1="5.3" y1="0.3" x2="5.3" y2="0" width="0.127" layer="21"/>
+<wire x1="5.3" y1="0" x2="5.3" y2="-0.3" width="0.127" layer="21"/>
+<wire x1="5.3" y1="-0.3" x2="5.3" y2="-4.2" width="0.127" layer="21"/>
+<wire x1="5.3" y1="-4.2" x2="0.8" y2="-4.2" width="0.127" layer="21"/>
+<wire x1="0.8" y1="-4.2" x2="0.8" y2="-0.3" width="0.127" layer="21"/>
+<wire x1="0.8" y1="-0.3" x2="0.8" y2="0" width="0.127" layer="21"/>
+<wire x1="0.8" y1="0" x2="0.8" y2="0.3" width="0.127" layer="21"/>
+<wire x1="0.8" y1="0" x2="5.3" y2="0" width="0.127" layer="21"/>
+<wire x1="5.3" y1="-0.3" x2="0.8" y2="-0.3" width="0.127" layer="21"/>
+<wire x1="0.9" y1="-0.2" x2="5.2" y2="-0.2" width="0.127" layer="21"/>
+<wire x1="5.2" y1="-0.1" x2="0.9" y2="-0.1" width="0.127" layer="21"/>
+<wire x1="0.9" y1="0.1" x2="5.2" y2="0.1" width="0.127" layer="21"/>
+<wire x1="5.2" y1="0.2" x2="0.9" y2="0.2" width="0.127" layer="21"/>
+<smd name="1" x="0" y="0" dx="1.3" dy="0.36" layer="1"/>
+<smd name="2" x="0" y="-0.65" dx="1.3" dy="0.36" layer="1"/>
+<smd name="3" x="0" y="-1.3" dx="1.3" dy="0.36" layer="1"/>
+<smd name="4" x="0" y="-1.95" dx="1.3" dy="0.36" layer="1"/>
+<smd name="5" x="0" y="-2.6" dx="1.3" dy="0.36" layer="1"/>
+<smd name="6" x="0" y="-3.25" dx="1.3" dy="0.36" layer="1"/>
+<smd name="7" x="0" y="-3.9" dx="1.3" dy="0.36" layer="1"/>
+<smd name="8" x="6.095" y="-3.9" dx="1.3" dy="0.36" layer="1"/>
+<smd name="9" x="6.095" y="-3.25" dx="1.3" dy="0.36" layer="1"/>
+<smd name="10" x="6.095" y="-2.6" dx="1.3" dy="0.36" layer="1"/>
+<smd name="11" x="6.095" y="-1.95" dx="1.3" dy="0.36" layer="1"/>
+<smd name="12" x="6.095" y="-1.3" dx="1.3" dy="0.36" layer="1"/>
+<smd name="13" x="6.095" y="-0.65" dx="1.3" dy="0.36" layer="1"/>
+<smd name="14" x="6.095" y="0" dx="1.3" dy="0.36" layer="1"/>
+<text x="1" y="-2.1" size="1.27" layer="21" ratio="15">&gt;NAME</text>
+</package>
+<package name="--MERGED_TSSOP-20">
+<wire x1="0.9" y1="0.2" x2="5.2" y2="0.2" width="0.127" layer="21"/>
+<wire x1="5.2" y1="0.2" x2="5.2" y2="0" width="0.127" layer="21"/>
+<wire x1="5.2" y1="0" x2="5.2" y2="-0.2" width="0.127" layer="21"/>
+<wire x1="5.2" y1="-0.2" x2="5.2" y2="-0.4" width="0.127" layer="21"/>
+<wire x1="5.2" y1="-0.4" x2="5.2" y2="-0.6" width="0.127" layer="21"/>
+<wire x1="5.2" y1="-0.6" x2="5.2" y2="-6" width="0.127" layer="21"/>
+<wire x1="5.2" y1="-6" x2="0.9" y2="-6" width="0.127" layer="21"/>
+<wire x1="0.9" y1="-6" x2="0.9" y2="-0.6" width="0.127" layer="21"/>
+<wire x1="0.9" y1="-0.6" x2="0.9" y2="-0.4" width="0.127" layer="21"/>
+<wire x1="0.9" y1="-0.4" x2="0.9" y2="-0.2" width="0.127" layer="21"/>
+<wire x1="0.9" y1="-0.2" x2="0.9" y2="0" width="0.127" layer="21"/>
+<wire x1="0.9" y1="0" x2="0.9" y2="0.2" width="0.127" layer="21"/>
+<wire x1="0.9" y1="0" x2="5.2" y2="0" width="0.127" layer="21"/>
+<wire x1="5.2" y1="-0.2" x2="0.9" y2="-0.2" width="0.127" layer="21"/>
+<wire x1="0.9" y1="-0.4" x2="5.2" y2="-0.4" width="0.127" layer="21"/>
+<wire x1="0.9" y1="-0.6" x2="5.2" y2="-0.6" width="0.127" layer="21"/>
+<smd name="1" x="0" y="0" dx="1.4" dy="0.36" layer="1"/>
+<smd name="2" x="0" y="-0.65" dx="1.4" dy="0.36" layer="1"/>
+<smd name="3" x="0" y="-1.3" dx="1.4" dy="0.36" layer="1"/>
+<smd name="4" x="0" y="-1.95" dx="1.4" dy="0.36" layer="1"/>
+<smd name="5" x="0" y="-2.6" dx="1.4" dy="0.36" layer="1"/>
+<smd name="6" x="0" y="-3.25" dx="1.4" dy="0.36" layer="1"/>
+<smd name="7" x="0" y="-3.9" dx="1.4" dy="0.36" layer="1"/>
+<smd name="8" x="0" y="-4.55" dx="1.4" dy="0.36" layer="1"/>
+<smd name="9" x="0" y="-5.2" dx="1.4" dy="0.36" layer="1"/>
+<smd name="10" x="0" y="-5.85" dx="1.4" dy="0.36" layer="1"/>
+<smd name="11" x="6.095" y="-5.85" dx="1.4" dy="0.36" layer="1"/>
+<smd name="12" x="6.095" y="-5.2" dx="1.4" dy="0.36" layer="1"/>
+<smd name="13" x="6.095" y="-4.55" dx="1.4" dy="0.36" layer="1"/>
+<smd name="14" x="6.095" y="-3.9" dx="1.4" dy="0.36" layer="1"/>
+<smd name="15" x="6.095" y="-3.25" dx="1.4" dy="0.36" layer="1"/>
+<smd name="16" x="6.095" y="-2.6" dx="1.4" dy="0.36" layer="1"/>
+<smd name="17" x="6.095" y="-1.95" dx="1.4" dy="0.36" layer="1"/>
+<smd name="18" x="6.095" y="-1.3" dx="1.4" dy="0.36" layer="1"/>
+<smd name="19" x="6.095" y="-0.65" dx="1.4" dy="0.36" layer="1"/>
+<smd name="20" x="6.095" y="0" dx="1.4" dy="0.36" layer="1"/>
+<text x="2" y="-0.8" size="1.27" layer="21" ratio="15" rot="R270">&gt;NAME</text>
+</package>
+<package name="--MERGED_TSSOP-24">
+<wire x1="-3.3" y1="-2.2" x2="-3.05" y2="-2.2" width="0.254" layer="21"/>
+<wire x1="-3.05" y1="-2.2" x2="-2.8" y2="-2.2" width="0.254" layer="21"/>
+<wire x1="-2.8" y1="-2.2" x2="4.6" y2="-2.2" width="0.254" layer="21"/>
+<wire x1="-3.3" y1="2.2" x2="-3.05" y2="2.2" width="0.254" layer="21"/>
+<wire x1="-3.05" y1="2.2" x2="-2.8" y2="2.2" width="0.254" layer="21"/>
+<wire x1="-2.8" y1="2.2" x2="-2.55" y2="2.2" width="0.254" layer="21"/>
+<wire x1="-2.55" y1="2.2" x2="4.6" y2="2.2" width="0.254" layer="21"/>
+<wire x1="-3.3" y1="2.2" x2="-3.3" y2="-2.2" width="0.254" layer="21"/>
+<wire x1="4.6" y1="2.2" x2="4.6" y2="-2.2" width="0.254" layer="21"/>
+<wire x1="-2.8" y1="2.2" x2="-2.8" y2="-2.2" width="0.254" layer="21"/>
+<wire x1="-3.05" y1="2.2" x2="-3.05" y2="-2.2" width="0.254" layer="21"/>
+<wire x1="-2.55" y1="2.2" x2="-2.55" y2="-2.2" width="0.254" layer="21"/>
+<smd name="1" x="-2.925" y="-3.2" dx="0.3" dy="1.5" layer="1"/>
+<smd name="2" x="-2.275" y="-3.2" dx="0.3" dy="1.5" layer="1"/>
+<smd name="3" x="-1.625" y="-3.2" dx="0.3" dy="1.5" layer="1"/>
+<smd name="4" x="-0.975" y="-3.2" dx="0.3" dy="1.5" layer="1"/>
+<smd name="5" x="-0.325" y="-3.2" dx="0.3" dy="1.5" layer="1"/>
+<smd name="6" x="0.325" y="-3.2" dx="0.3" dy="1.5" layer="1"/>
+<smd name="7" x="0.975" y="-3.2" dx="0.3" dy="1.5" layer="1"/>
+<smd name="8" x="1.625" y="-3.2" dx="0.3" dy="1.5" layer="1"/>
+<smd name="9" x="2.275" y="-3.2" dx="0.3" dy="1.5" layer="1"/>
+<smd name="10" x="2.925" y="-3.2" dx="0.3" dy="1.5" layer="1"/>
+<smd name="11" x="3.575" y="-3.2" dx="0.3" dy="1.5" layer="1"/>
+<smd name="12" x="4.225" y="-3.2" dx="0.3" dy="1.5" layer="1"/>
+<smd name="13" x="4.225" y="3.2" dx="0.3" dy="1.5" layer="1"/>
+<smd name="14" x="3.575" y="3.2" dx="0.3" dy="1.5" layer="1"/>
+<smd name="15" x="2.925" y="3.2" dx="0.3" dy="1.5" layer="1"/>
+<smd name="16" x="2.275" y="3.2" dx="0.3" dy="1.5" layer="1"/>
+<smd name="17" x="1.625" y="3.2" dx="0.3" dy="1.5" layer="1"/>
+<smd name="18" x="0.975" y="3.2" dx="0.3" dy="1.5" layer="1"/>
+<smd name="19" x="0.325" y="3.2" dx="0.3" dy="1.5" layer="1"/>
+<smd name="20" x="-0.325" y="3.2" dx="0.3" dy="1.5" layer="1"/>
+<smd name="21" x="-0.975" y="3.2" dx="0.3" dy="1.5" layer="1"/>
+<smd name="22" x="-1.625" y="3.2" dx="0.3" dy="1.5" layer="1"/>
+<smd name="23" x="-2.275" y="3.2" dx="0.3" dy="1.5" layer="1"/>
+<smd name="24" x="-2.925" y="3.2" dx="0.3" dy="1.5" layer="1"/>
+<text x="-2" y="0.5" size="1.27" layer="21" ratio="15">&gt;NAME</text>
+</package>
+<package name="--MERGED_USB-MINIB-SMD">
+<wire x1="-3.05" y1="-4.25" x2="-3.05" y2="1.85" width="0.3" layer="21"/>
+<wire x1="-6.05" y1="-7.85" x2="-6.05" y2="-4.25" width="0.127" layer="21"/>
+<wire x1="-6.05" y1="-4.25" x2="-6.05" y2="5.45" width="0.127" layer="21"/>
+<wire x1="-6.05" y1="-4.25" x2="-6.05" y2="1.85" width="0.3" layer="21"/>
+<smd name="1" x="2" y="0.4" dx="2.3" dy="0.5" layer="1"/>
+<smd name="2" x="2" y="-0.4" dx="2.3" dy="0.5" layer="1"/>
+<smd name="3" x="2" y="-1.2" dx="2.3" dy="0.5" layer="1"/>
+<smd name="4" x="2" y="-2" dx="2.3" dy="0.5" layer="1"/>
+<smd name="5" x="2" y="-2.8" dx="2.3" dy="0.5" layer="1"/>
+<smd name="TAB0" x="-2.3" y="3.9" dx="3.5" dy="3.5" layer="1"/>
+<smd name="TAB1" x="2.2" y="3.9" dx="3.5" dy="3.5" layer="1"/>
+<smd name="TAB2" x="2.2" y="-6.3" dx="3.5" dy="3.5" layer="1"/>
+<smd name="TAB3" x="-2.3" y="-6.3" dx="3.5" dy="3.5" layer="1"/>
+<text x="-3.9" y="-3.9" size="1.27" layer="21" ratio="18" rot="R90">&gt;NAME</text>
+<hole x="-0.05" y="0.55" drill="0.9"/>
+<hole x="-0.05" y="-2.95" drill="0.9"/>
+</package>
+<package name="--MERGED_VQFP-100">
+<circle x="-5" y="5" radius="1" width="0.254" layer="21"/>
+<wire x1="-7" y1="7" x2="7" y2="7" width="0.254" layer="21"/>
+<wire x1="7" y1="7" x2="7" y2="-7" width="0.254" layer="21"/>
+<wire x1="7" y1="-7" x2="-7" y2="-7" width="0.254" layer="21"/>
+<wire x1="-7" y1="-7" x2="-7" y2="7" width="0.254" layer="21"/>
+<smd name="1" x="-8" y="6" dx="0.25" dy="1.25" layer="1" rot="R90"/>
+<smd name="2" x="-8" y="5.5" dx="0.25" dy="1.25" layer="1" rot="R90"/>
+<smd name="3" x="-8" y="5" dx="0.25" dy="1.25" layer="1" rot="R90"/>
+<smd name="4" x="-8" y="4.5" dx="0.25" dy="1.25" layer="1" rot="R90"/>
+<smd name="5" x="-8" y="4" dx="0.25" dy="1.25" layer="1" rot="R90"/>
+<smd name="6" x="-8" y="3.5" dx="0.25" dy="1.25" layer="1" rot="R90"/>
+<smd name="7" x="-8" y="3" dx="0.25" dy="1.25" layer="1" rot="R90"/>
+<smd name="8" x="-8" y="2.5" dx="0.25" dy="1.25" layer="1" rot="R90"/>
+<smd name="9" x="-8" y="2" dx="0.25" dy="1.25" layer="1" rot="R90"/>
+<smd name="10" x="-8" y="1.5" dx="0.25" dy="1.25" layer="1" rot="R90"/>
+<smd name="11" x="-8" y="1" dx="0.25" dy="1.25" layer="1" rot="R90"/>
+<smd name="12" x="-8" y="0.5" dx="0.25" dy="1.25" layer="1" rot="R90"/>
+<smd name="13" x="-8" y="0" dx="0.25" dy="1.25" layer="1" rot="R90"/>
+<smd name="14" x="-8" y="-0.5" dx="0.25" dy="1.25" layer="1" rot="R90"/>
+<smd name="15" x="-8" y="-1" dx="0.25" dy="1.25" layer="1" rot="R90"/>
+<smd name="16" x="-8" y="-1.5" dx="0.25" dy="1.25" layer="1" rot="R90"/>
+<smd name="17" x="-8" y="-2" dx="0.25" dy="1.25" layer="1" rot="R90"/>
+<smd name="18" x="-8" y="-2.5" dx="0.25" dy="1.25" layer="1" rot="R90"/>
+<smd name="19" x="-8" y="-3" dx="0.25" dy="1.25" layer="1" rot="R90"/>
+<smd name="20" x="-8" y="-3.5" dx="0.25" dy="1.25" layer="1" rot="R90"/>
+<smd name="21" x="-8" y="-4" dx="0.25" dy="1.25" layer="1" rot="R90"/>
+<smd name="22" x="-8" y="-4.5" dx="0.25" dy="1.25" layer="1" rot="R90"/>
+<smd name="23" x="-8" y="-5" dx="0.25" dy="1.25" layer="1" rot="R90"/>
+<smd name="24" x="-8" y="-5.5" dx="0.25" dy="1.25" layer="1" rot="R90"/>
+<smd name="25" x="-8" y="-6" dx="0.25" dy="1.25" layer="1" rot="R90"/>
+<smd name="26" x="-6" y="-8" dx="0.25" dy="1.5" layer="1"/>
+<smd name="27" x="-5.5" y="-8" dx="0.25" dy="1.5" layer="1"/>
+<smd name="28" x="-5" y="-8" dx="0.25" dy="1.5" layer="1"/>
+<smd name="29" x="-4.5" y="-8" dx="0.25" dy="1.5" layer="1"/>
+<smd name="30" x="-4" y="-8" dx="0.25" dy="1.5" layer="1"/>
+<smd name="31" x="-3.5" y="-8" dx="0.25" dy="1.5" layer="1"/>
+<smd name="32" x="-3" y="-8" dx="0.25" dy="1.5" layer="1"/>
+<smd name="33" x="-2.5" y="-8" dx="0.25" dy="1.5" layer="1"/>
+<smd name="34" x="-2" y="-8" dx="0.25" dy="1.5" layer="1"/>
+<smd name="35" x="-1.5" y="-8" dx="0.25" dy="1.5" layer="1"/>
+<smd name="36" x="-1" y="-8" dx="0.25" dy="1.5" layer="1"/>
+<smd name="37" x="-0.5" y="-8" dx="0.25" dy="1.5" layer="1"/>
+<smd name="38" x="0" y="-8" dx="0.25" dy="1.5" layer="1"/>
+<smd name="39" x="0.5" y="-8" dx="0.25" dy="1.5" layer="1"/>
+<smd name="40" x="1" y="-8" dx="0.25" dy="1.5" layer="1"/>
+<smd name="41" x="1.5" y="-8" dx="0.25" dy="1.5" layer="1"/>
+<smd name="42" x="2" y="-8" dx="0.25" dy="1.5" layer="1"/>
+<smd name="43" x="2.5" y="-8" dx="0.25" dy="1.5" layer="1"/>
+<smd name="44" x="3" y="-8" dx="0.25" dy="1.5" layer="1"/>
+<smd name="45" x="3.5" y="-8" dx="0.25" dy="1.5" layer="1"/>
+<smd name="46" x="4" y="-8" dx="0.25" dy="1.5" layer="1"/>
+<smd name="47" x="4.5" y="-8" dx="0.25" dy="1.5" layer="1"/>
+<smd name="48" x="5" y="-8" dx="0.25" dy="1.5" layer="1"/>
+<smd name="49" x="5.5" y="-8" dx="0.25" dy="1.5" layer="1"/>
+<smd name="50" x="6" y="-8" dx="0.25" dy="1.5" layer="1"/>
+<smd name="51" x="8" y="-6" dx="0.25" dy="1.25" layer="1" rot="R90"/>
+<smd name="52" x="8" y="-5.5" dx="0.25" dy="1.25" layer="1" rot="R90"/>
+<smd name="53" x="8" y="-5" dx="0.25" dy="1.25" layer="1" rot="R90"/>
+<smd name="54" x="8" y="-4.5" dx="0.25" dy="1.25" layer="1" rot="R90"/>
+<smd name="55" x="8" y="-4" dx="0.25" dy="1.25" layer="1" rot="R90"/>
+<smd name="56" x="8" y="-3.5" dx="0.25" dy="1.25" layer="1" rot="R90"/>
+<smd name="57" x="8" y="-3" dx="0.25" dy="1.25" layer="1" rot="R90"/>
+<smd name="58" x="8" y="-2.5" dx="0.25" dy="1.25" layer="1" rot="R90"/>
+<smd name="59" x="8" y="-2" dx="0.25" dy="1.25" layer="1" rot="R90"/>
+<smd name="60" x="8" y="-1.5" dx="0.25" dy="1.25" layer="1" rot="R90"/>
+<smd name="61" x="8" y="-1" dx="0.25" dy="1.25" layer="1" rot="R90"/>
+<smd name="62" x="8" y="-0.5" dx="0.25" dy="1.25" layer="1" rot="R90"/>
+<smd name="63" x="8" y="0" dx="0.25" dy="1.25" layer="1" rot="R90"/>
+<smd name="64" x="8" y="0.5" dx="0.25" dy="1.25" layer="1" rot="R90"/>
+<smd name="65" x="8" y="1" dx="0.25" dy="1.25" layer="1" rot="R90"/>
+<smd name="66" x="8" y="1.5" dx="0.25" dy="1.25" layer="1" rot="R90"/>
+<smd name="67" x="8" y="2" dx="0.25" dy="1.25" layer="1" rot="R90"/>
+<smd name="68" x="8" y="2.5" dx="0.25" dy="1.25" layer="1" rot="R90"/>
+<smd name="69" x="8" y="3" dx="0.25" dy="1.25" layer="1" rot="R90"/>
+<smd name="70" x="8" y="3.5" dx="0.25" dy="1.25" layer="1" rot="R90"/>
+<smd name="71" x="8" y="4" dx="0.25" dy="1.25" layer="1" rot="R90"/>
+<smd name="72" x="8" y="4.5" dx="0.25" dy="1.25" layer="1" rot="R90"/>
+<smd name="73" x="8" y="5" dx="0.25" dy="1.25" layer="1" rot="R90"/>
+<smd name="74" x="8" y="5.5" dx="0.25" dy="1.25" layer="1" rot="R90"/>
+<smd name="75" x="8" y="6" dx="0.25" dy="1.25" layer="1" rot="R90"/>
+<smd name="76" x="6" y="8" dx="0.25" dy="1.5" layer="1"/>
+<smd name="77" x="5.5" y="8" dx="0.25" dy="1.5" layer="1"/>
+<smd name="78" x="5" y="8" dx="0.25" dy="1.5" layer="1"/>
+<smd name="79" x="4.5" y="8" dx="0.25" dy="1.5" layer="1"/>
+<smd name="80" x="4" y="8" dx="0.25" dy="1.5" layer="1"/>
+<smd name="81" x="3.5" y="8" dx="0.25" dy="1.5" layer="1"/>
+<smd name="82" x="3" y="8" dx="0.25" dy="1.5" layer="1"/>
+<smd name="83" x="2.5" y="8" dx="0.25" dy="1.5" layer="1"/>
+<smd name="84" x="2" y="8" dx="0.25" dy="1.5" layer="1"/>
+<smd name="85" x="1.5" y="8" dx="0.25" dy="1.5" layer="1"/>
+<smd name="86" x="1" y="8" dx="0.25" dy="1.5" layer="1"/>
+<smd name="87" x="0.5" y="8" dx="0.25" dy="1.5" layer="1"/>
+<smd name="88" x="0" y="8" dx="0.25" dy="1.5" layer="1"/>
+<smd name="89" x="-0.5" y="8" dx="0.25" dy="1.5" layer="1"/>
+<smd name="90" x="-1" y="8" dx="0.25" dy="1.5" layer="1"/>
+<smd name="91" x="-1.5" y="8" dx="0.25" dy="1.5" layer="1"/>
+<smd name="92" x="-2" y="8" dx="0.25" dy="1.5" layer="1"/>
+<smd name="93" x="-2.5" y="8" dx="0.25" dy="1.5" layer="1"/>
+<smd name="94" x="-3" y="8" dx="0.25" dy="1.5" layer="1"/>
+<smd name="95" x="-3.5" y="8" dx="0.25" dy="1.5" layer="1"/>
+<smd name="96" x="-4" y="8" dx="0.25" dy="1.5" layer="1"/>
+<smd name="97" x="-4.5" y="8" dx="0.25" dy="1.5" layer="1"/>
+<smd name="98" x="-5" y="8" dx="0.25" dy="1.5" layer="1"/>
+<smd name="99" x="-5.5" y="8" dx="0.25" dy="1.5" layer="1"/>
+<smd name="100" x="-6" y="8" dx="0.25" dy="1.5" layer="1"/>
+<text x="6" y="-4" size="1.9304" layer="21" ratio="14" rot="R180">&gt;NAME</text>
+</package>
+<package name="--MERGED_XTAL-SMD-CITIZEN-CS10">
+<wire x1="-0.75" y1="1.65" x2="5.25" y2="1.65" width="0.127" layer="21"/>
+<wire x1="-0.75" y1="-1.65" x2="5.25" y2="-1.65" width="0.127" layer="21"/>
+<smd name="A" x="-0.2" y="0" dx="2.4" dy="2.4" layer="1"/>
+<smd name="B" x="4.7" y="0" dx="2.4" dy="2.4" layer="1"/>
+<text x="2.589" y="-1.44" size="1.016" layer="21" rot="R90">&gt;NAME</text>
+</package>
+</packages>
+<symbols>
+<symbol name="--MERGED_4TERMSTRIP">
+<wire x1="0" y1="2.54" x2="0" y2="-10.16" width="0.254" layer="94"/>
+<wire x1="0" y1="-10.16" x2="10.16" y2="-10.16" width="0.254" layer="94"/>
+<wire x1="10.16" y1="-10.16" x2="10.16" y2="2.54" width="0.254" layer="94"/>
+<wire x1="10.16" y1="2.54" x2="0" y2="2.54" width="0.254" layer="94"/>
+<pin name="PIN1" x="-5.08" y="0" visible="pin" length="middle" direction="pas"/>
+<pin name="PIN2" x="-5.08" y="-2.54" visible="pin" length="middle" direction="pas"/>
+<pin name="PIN3" x="-5.08" y="-5.08" visible="pin" length="middle" direction="pas"/>
+<pin name="PIN4" x="-5.08" y="-7.62" visible="pin" length="middle" direction="pas"/>
+<text x="9.8506" y="-10.8263" size="1.778" layer="95" rot="R180">&gt;NAME</text>
+</symbol>
+<symbol name="--MERGED_74XX244-OCTAL-TRISTATE-BUFFERS">
+<circle x="6.35" y="-2.54" radius="0.1796" width="0.254" layer="94"/>
+<circle x="2.54" y="5.08" radius="0.1796" width="0.254" layer="94"/>
+<circle x="6.35" y="-10.16" radius="0.1796" width="0.254" layer="94"/>
+<circle x="6.35" y="-38.1" radius="0.1796" width="0.254" layer="94"/>
+<circle x="2.54" y="-30.48" radius="0.1796" width="0.254" layer="94"/>
+<circle x="6.35" y="-45.72" radius="0.1796" width="0.254" layer="94"/>
+<circle x="2.54" y="4.1275" radius="0.3175" width="0.1524" layer="94"/>
+<circle x="2.54" y="-3.4925" radius="0.3175" width="0.1524" layer="94"/>
+<circle x="2.54" y="-11.1125" radius="0.3175" width="0.1524" layer="94"/>
+<circle x="2.54" y="-18.7325" radius="0.3175" width="0.1524" layer="94"/>
+<circle x="2.54" y="-31.4325" radius="0.3175" width="0.1524" layer="94"/>
+<circle x="2.54" y="-39.0525" radius="0.3175" width="0.1524" layer="94"/>
+<circle x="2.54" y="-46.6725" radius="0.3175" width="0.1524" layer="94"/>
+<circle x="2.54" y="-54.2925" radius="0.3175" width="0.1524" layer="94"/>
+<wire x1="0" y1="0" x2="0" y2="5.08" width="0.254" layer="94"/>
+<wire x1="0" y1="5.08" x2="5.08" y2="2.54" width="0.254" layer="94"/>
+<wire x1="5.08" y1="2.54" x2="0" y2="0" width="0.254" layer="94"/>
+<wire x1="0" y1="-7.62" x2="0" y2="-2.54" width="0.254" layer="94"/>
+<wire x1="0" y1="-2.54" x2="5.08" y2="-5.08" width="0.254" layer="94"/>
+<wire x1="5.08" y1="-5.08" x2="0" y2="-7.62" width="0.254" layer="94"/>
+<wire x1="0" y1="-15.24" x2="0" y2="-10.16" width="0.254" layer="94"/>
+<wire x1="0" y1="-10.16" x2="5.08" y2="-12.7" width="0.254" layer="94"/>
+<wire x1="5.08" y1="-12.7" x2="0" y2="-15.24" width="0.254" layer="94"/>
+<wire x1="0" y1="-22.86" x2="0" y2="-17.78" width="0.254" layer="94"/>
+<wire x1="0" y1="-17.78" x2="5.08" y2="-20.32" width="0.254" layer="94"/>
+<wire x1="5.08" y1="-20.32" x2="0" y2="-22.86" width="0.254" layer="94"/>
+<wire x1="0" y1="7.62" x2="2.54" y2="7.62" width="0.1524" layer="94"/>
+<wire x1="2.54" y1="7.62" x2="2.54" y2="5.08" width="0.1524" layer="94"/>
+<wire x1="2.54" y1="5.08" x2="6.35" y2="5.08" width="0.1524" layer="94"/>
+<wire x1="6.35" y1="5.08" x2="6.35" y2="-2.54" width="0.1524" layer="94"/>
+<wire x1="6.35" y1="-2.54" x2="6.35" y2="-10.16" width="0.1524" layer="94"/>
+<wire x1="6.35" y1="-10.16" x2="6.35" y2="-17.78" width="0.1524" layer="94"/>
+<wire x1="6.35" y1="-17.78" x2="2.54" y2="-17.78" width="0.1524" layer="94"/>
+<wire x1="6.35" y1="-2.54" x2="2.54" y2="-2.54" width="0.1524" layer="94"/>
+<wire x1="6.35" y1="-10.16" x2="2.54" y2="-10.16" width="0.1524" layer="94"/>
+<wire x1="0" y1="-35.56" x2="0" y2="-30.48" width="0.254" layer="94"/>
+<wire x1="0" y1="-30.48" x2="5.08" y2="-33.02" width="0.254" layer="94"/>
+<wire x1="5.08" y1="-33.02" x2="0" y2="-35.56" width="0.254" layer="94"/>
+<wire x1="0" y1="-43.18" x2="0" y2="-38.1" width="0.254" layer="94"/>
+<wire x1="0" y1="-38.1" x2="5.08" y2="-40.64" width="0.254" layer="94"/>
+<wire x1="5.08" y1="-40.64" x2="0" y2="-43.18" width="0.254" layer="94"/>
+<wire x1="0" y1="-50.8" x2="0" y2="-45.72" width="0.254" layer="94"/>
+<wire x1="0" y1="-45.72" x2="5.08" y2="-48.26" width="0.254" layer="94"/>
+<wire x1="5.08" y1="-48.26" x2="0" y2="-50.8" width="0.254" layer="94"/>
+<wire x1="0" y1="-58.42" x2="0" y2="-53.34" width="0.254" layer="94"/>
+<wire x1="0" y1="-53.34" x2="5.08" y2="-55.88" width="0.254" layer="94"/>
+<wire x1="5.08" y1="-55.88" x2="0" y2="-58.42" width="0.254" layer="94"/>
+<wire x1="0" y1="-27.94" x2="2.54" y2="-27.94" width="0.1524" layer="94"/>
+<wire x1="2.54" y1="-27.94" x2="2.54" y2="-30.48" width="0.1524" layer="94"/>
+<wire x1="2.54" y1="-30.48" x2="6.35" y2="-30.48" width="0.1524" layer="94"/>
+<wire x1="6.35" y1="-30.48" x2="6.35" y2="-38.1" width="0.1524" layer="94"/>
+<wire x1="6.35" y1="-38.1" x2="6.35" y2="-45.72" width="0.1524" layer="94"/>
+<wire x1="6.35" y1="-45.72" x2="6.35" y2="-53.34" width="0.1524" layer="94"/>
+<wire x1="6.35" y1="-53.34" x2="2.54" y2="-53.34" width="0.1524" layer="94"/>
+<wire x1="6.35" y1="-38.1" x2="2.54" y2="-38.1" width="0.1524" layer="94"/>
+<wire x1="6.35" y1="-45.72" x2="2.54" y2="-45.72" width="0.1524" layer="94"/>
+<wire x1="-6.35" y1="10.16" x2="11.43" y2="10.16" width="0.1524" layer="94"/>
+<wire x1="11.43" y1="10.16" x2="11.43" y2="-60.96" width="0.1524" layer="94"/>
+<wire x1="11.43" y1="-60.96" x2="-6.35" y2="-60.96" width="0.1524" layer="94"/>
+<wire x1="-6.35" y1="-60.96" x2="-6.35" y2="10.16" width="0.1524" layer="94"/>
+<wire x1="2.54" y1="4.445" x2="2.54" y2="5.08" width="0.1524" layer="94"/>
+<wire x1="2.54" y1="-53.975" x2="2.54" y2="-53.34" width="0.1524" layer="94"/>
+<wire x1="2.54" y1="-46.355" x2="2.54" y2="-45.72" width="0.1524" layer="94"/>
+<wire x1="2.54" y1="-38.735" x2="2.54" y2="-38.1" width="0.1524" layer="94"/>
+<wire x1="2.54" y1="-31.115" x2="2.54" y2="-30.48" width="0.1524" layer="94"/>
+<wire x1="2.54" y1="-18.415" x2="2.54" y2="-17.78" width="0.1524" layer="94"/>
+<wire x1="2.54" y1="-10.795" x2="2.54" y2="-10.16" width="0.1524" layer="94"/>
+<wire x1="2.54" y1="-3.175" x2="2.54" y2="-2.54" width="0.1524" layer="94"/>
+<pin name="1A1" x="-7.62" y="2.54" visible="pad"/>
+<pin name="1A2" x="-7.62" y="-5.08" visible="pad"/>
+<pin name="1A3" x="-7.62" y="-12.7" visible="pad"/>
+<pin name="1A4" x="-7.62" y="-20.32" visible="pad"/>
+<pin name="1NOE" x="-7.62" y="7.62" visible="pad"/>
+<pin name="1Y1" x="12.7" y="2.54" visible="pad" rot="R180"/>
+<pin name="1Y2" x="12.7" y="-5.08" visible="pad" rot="R180"/>
+<pin name="1Y3" x="12.7" y="-12.7" visible="pad" rot="R180"/>
+<pin name="1Y4" x="12.7" y="-20.32" visible="pad" rot="R180"/>
+<pin name="2A1" x="-7.62" y="-33.02" visible="pad"/>
+<pin name="2A2" x="-7.62" y="-40.64" visible="pad"/>
+<pin name="2A3" x="-7.62" y="-48.26" visible="pad"/>
+<pin name="2A4" x="-7.62" y="-55.88" visible="pad"/>
+<pin name="2NOE" x="-7.62" y="-27.94" visible="pad"/>
+<pin name="2Y1" x="12.7" y="-33.02" visible="pad" rot="R180"/>
+<pin name="2Y2" x="12.7" y="-40.64" visible="pad" rot="R180"/>
+<pin name="2Y3" x="12.7" y="-48.26" visible="pad" rot="R180"/>
+<pin name="2Y4" x="12.7" y="-55.88" visible="pad" rot="R180"/>
+<pin name="VDD" x="7.62" y="12.7" visible="pad" length="short" rot="R270"/>
+<pin name="VSS" x="-2.54" y="-63.5" visible="pad" length="short" rot="R90"/>
+<text x="-4.395" y="10.8211" size="1.778" layer="95">&gt;NAME</text>
+<text x="9.8628" y="-61.7992" size="1.778" layer="95" rot="R180">'244</text>
+<text x="9.1153" y="9.4136" size="1.27" layer="95" rot="R180">Vdd</text>
+<text x="-4.0182" y="-60.1844" size="1.27" layer="95">Vss</text>
+</symbol>
+<symbol name="--MERGED_AT91SAM7S64">
+<wire x1="-55.88" y1="2.54" x2="0" y2="2.54" width="0.254" layer="94"/>
+<wire x1="0" y1="2.54" x2="0" y2="-81.28" width="0.254" layer="94"/>
+<wire x1="0" y1="-81.28" x2="-55.88" y2="-81.28" width="0.254" layer="94"/>
+<wire x1="-55.88" y1="-81.28" x2="-55.88" y2="2.54" width="0.254" layer="94"/>
+<pin name="AD4" x="-60.96" y="-66.04" length="middle"/>
+<pin name="AD5" x="-60.96" y="-68.58" length="middle"/>
+<pin name="AD6" x="-60.96" y="-71.12" length="middle"/>
+<pin name="AD7" x="-60.96" y="-73.66" length="middle"/>
+<pin name="ADVREF" x="-60.96" y="-63.5" length="middle"/>
+<pin name="DDM" x="-60.96" y="-55.88" length="middle"/>
+<pin name="DDP" x="-60.96" y="-58.42" length="middle"/>
+<pin name="ERASE" x="-60.96" y="-35.56" length="middle"/>
+<pin name="GND0" x="-20.32" y="-86.36" length="middle" rot="R90"/>
+<pin name="GND1" x="-22.86" y="-86.36" length="middle" rot="R90"/>
+<pin name="GND2" x="-25.4" y="-86.36" length="middle" rot="R90"/>
+<pin name="GND3" x="-27.94" y="-86.36" length="middle" rot="R90"/>
+<pin name="JTAGSEL" x="-60.96" y="-15.24" length="middle"/>
+<pin name="NRST" x="-60.96" y="-17.78" length="middle"/>
+<pin name="PA0" x="5.08" y="0" length="middle" rot="R180"/>
+<pin name="PA1" x="5.08" y="-2.54" length="middle" rot="R180"/>
+<pin name="PA2" x="5.08" y="-5.08" length="middle" rot="R180"/>
+<pin name="PA3" x="5.08" y="-7.62" length="middle" rot="R180"/>
+<pin name="PA4" x="5.08" y="-10.16" length="middle" rot="R180"/>
+<pin name="PA5" x="5.08" y="-12.7" length="middle" rot="R180"/>
+<pin name="PA6" x="5.08" y="-15.24" length="middle" rot="R180"/>
+<pin name="PA7" x="5.08" y="-17.78" length="middle" rot="R180"/>
+<pin name="PA8" x="5.08" y="-20.32" length="middle" rot="R180"/>
+<pin name="PA9" x="5.08" y="-22.86" length="middle" rot="R180"/>
+<pin name="PA10" x="5.08" y="-25.4" length="middle" rot="R180"/>
+<pin name="PA11" x="5.08" y="-27.94" length="middle" rot="R180"/>
+<pin name="PA12" x="5.08" y="-30.48" length="middle" rot="R180"/>
+<pin name="PA13" x="5.08" y="-33.02" length="middle" rot="R180"/>
+<pin name="PA14" x="5.08" y="-35.56" length="middle" rot="R180"/>
+<pin name="PA15" x="5.08" y="-38.1" length="middle" rot="R180"/>
+<pin name="PA16" x="5.08" y="-40.64" length="middle" rot="R180"/>
+<pin name="PA17/AD0" x="5.08" y="-43.18" length="middle" rot="R180"/>
+<pin name="PA18/AD1" x="5.08" y="-45.72" length="middle" rot="R180"/>
+<pin name="PA19/AD2" x="5.08" y="-48.26" length="middle" rot="R180"/>
+<pin name="PA20/AD3" x="5.08" y="-50.8" length="middle" rot="R180"/>
+<pin name="PA21" x="5.08" y="-53.34" length="middle" rot="R180"/>
+<pin name="PA22" x="5.08" y="-55.88" length="middle" rot="R180"/>
+<pin name="PA23" x="5.08" y="-58.42" length="middle" rot="R180"/>
+<pin name="PA24" x="5.08" y="-60.96" length="middle" rot="R180"/>
+<pin name="PA25" x="5.08" y="-63.5" length="middle" rot="R180"/>
+<pin name="PA26" x="5.08" y="-66.04" length="middle" rot="R180"/>
+<pin name="PA27" x="5.08" y="-68.58" length="middle" rot="R180"/>
+<pin name="PA28" x="5.08" y="-71.12" length="middle" rot="R180"/>
+<pin name="PA29" x="5.08" y="-73.66" length="middle" rot="R180"/>
+<pin name="PA30" x="5.08" y="-76.2" length="middle" rot="R180"/>
+<pin name="PA31" x="5.08" y="-78.74" length="middle" rot="R180"/>
+<pin name="PLLRC" x="-60.96" y="-5.08" length="middle"/>
+<pin name="TCK" x="-60.96" y="-22.86" length="middle"/>
+<pin name="TDI" x="-60.96" y="-27.94" length="middle"/>
+<pin name="TDO" x="-60.96" y="-25.4" length="middle"/>
+<pin name="TMS" x="-60.96" y="-20.32" length="middle"/>
+<pin name="TST" x="-60.96" y="-12.7" length="middle"/>
+<pin name="VDDCORE0" x="-20.32" y="7.62" length="middle" rot="R270"/>
+<pin name="VDDCORE1" x="-17.78" y="7.62" length="middle" rot="R270"/>
+<pin name="VDDCORE2" x="-15.24" y="7.62" length="middle" rot="R270"/>
+<pin name="VDDFLASH" x="-33.02" y="7.62" length="middle" rot="R270"/>
+<pin name="VDDIN" x="-30.48" y="7.62" length="middle" rot="R270"/>
+<pin name="VDDIO0" x="-40.64" y="7.62" length="middle" rot="R270"/>
+<pin name="VDDIO1" x="-38.1" y="7.62" length="middle" rot="R270"/>
+<pin name="VDDIO2" x="-35.56" y="7.62" length="middle" rot="R270"/>
+<pin name="VDDOUT" x="-12.7" y="7.62" length="middle" rot="R270"/>
+<pin name="VDDPLL" x="-22.86" y="7.62" length="middle" rot="R270"/>
+<pin name="XIN/PGMCK" x="-60.96" y="-50.8" length="middle"/>
+<pin name="XOUT" x="-60.96" y="-40.64" length="middle"/>
+<text x="-34.8341" y="-71.9348" size="3.81" layer="95" rot="R90">AT91SAM7S64</text>
+<text x="-34.1356" y="-23.2111" size="3.81" layer="95">&gt;NAME</text>
+</symbol>
+<symbol name="--MERGED_CAPACITOR">
+<rectangle x1="-2.032" y1="1.524" x2="2.032" y2="2.032" layer="94"/>
+<rectangle x1="-2.032" y1="0.508" x2="2.032" y2="1.016" layer="94"/>
+<wire x1="0" y1="0" x2="0" y2="0.508" width="0.1524" layer="94"/>
+<wire x1="0" y1="2.54" x2="0" y2="2.032" width="0.1524" layer="94"/>
+<pin name="1" x="0" y="5.08" visible="off" length="short" direction="pas" swaplevel="1" rot="R270"/>
+<pin name="2" x="0" y="-2.54" visible="off" length="short" direction="pas" swaplevel="1" rot="R90"/>
+<text x="1.524" y="2.921" size="1.778" layer="95">&gt;NAME</text>
+<text x="1.27" y="-1.905" size="1.778" layer="96">&gt;VALUE</text>
+</symbol>
+<symbol name="--MERGED_CAPACITOR-POLARIZED">
+<rectangle x1="-2.253" y1="0.668" x2="-1.364" y2="0.795" layer="94"/>
+<rectangle x1="-1.872" y1="0.287" x2="-1.745" y2="1.176" layer="94"/>
+<wire x1="-2.54" y1="0" x2="2.54" y2="0" width="0.254" layer="94"/>
+<wire x1="0" y1="-1.016" x2="0" y2="-2.54" width="0.1524" layer="94"/>
+<wire x1="0" y1="-1" x2="2.4892" y2="-1.8542" width="0.254" layer="94" curve="-37.878202" cap="flat"/>
+<wire x1="-2.4669" y1="-1.8504" x2="0" y2="-1.0161" width="0.254" layer="94" curve="-37.376341" cap="flat"/>
+<pin name="+" x="0" y="2.54" visible="off" length="short" direction="pas" swaplevel="1" rot="R270"/>
+<pin name="-" x="0" y="-5.08" visible="off" length="short" direction="pas" swaplevel="1" rot="R90"/>
+<text x="1.016" y="0.635" size="1.778" layer="95">&gt;NAME</text>
+<text x="1.016" y="-4.191" size="1.778" layer="96">&gt;VALUE</text>
+</symbol>
+<symbol name="--MERGED_CD4066-ANALOG-SWITCH">
+<wire x1="15.24" y1="5.08" x2="0" y2="5.08" width="0.254" layer="94"/>
+<wire x1="0" y1="5.08" x2="0" y2="-27.94" width="0.254" layer="94"/>
+<wire x1="0" y1="-27.94" x2="15.24" y2="-27.94" width="0.254" layer="94"/>
+<wire x1="15.24" y1="-27.94" x2="15.24" y2="5.08" width="0.254" layer="94"/>
+<pin name="A1" x="-5.08" y="0" length="middle" direction="pas"/>
+<pin name="A2" x="-5.08" y="-7.62" length="middle" direction="pas"/>
+<pin name="A3" x="-5.08" y="-15.24" length="middle" direction="pas"/>
+<pin name="A4" x="-5.08" y="-22.86" length="middle" direction="pas"/>
+<pin name="B1" x="20.32" y="0" length="middle" direction="pas" rot="R180"/>
+<pin name="B2" x="20.32" y="-7.62" length="middle" direction="pas" rot="R180"/>
+<pin name="B3" x="20.32" y="-15.24" length="middle" direction="pas" rot="R180"/>
+<pin name="B4" x="20.32" y="-22.86" length="middle" direction="pas" rot="R180"/>
+<pin name="C1" x="-5.08" y="-2.54" length="middle" direction="in"/>
+<pin name="C2" x="-5.08" y="-10.16" length="middle" direction="in"/>
+<pin name="C3" x="-5.08" y="-17.78" length="middle" direction="in"/>
+<pin name="C4" x="-5.08" y="-25.4" length="middle" direction="in"/>
+<pin name="VDD" x="2.54" y="10.16" visible="pad" length="middle" rot="R270"/>
+<pin name="VSS" x="12.7" y="-33.02" visible="pad" length="middle" rot="R90"/>
+<text x="9.906" y="-26.924" size="1.524" layer="95">Vss</text>
+<text x="5.334" y="4.064" size="1.524" layer="95" rot="R180">Vdd</text>
+<text x="14.732" y="5.842" size="1.524" layer="95" rot="MR0">CD4066</text>
+<text x="1.016" y="-28.956" size="1.524" layer="95" rot="MR180">&gt;NAME</text>
+</symbol>
+<symbol name="--MERGED_CRYSTAL">
+<wire x1="2.54" y1="0" x2="2.54" y2="-5.08" width="0.254" layer="94"/>
+<wire x1="3.81" y1="-1.27" x2="3.81" y2="-3.81" width="0.254" layer="94"/>
+<wire x1="3.81" y1="-3.81" x2="6.35" y2="-3.81" width="0.254" layer="94"/>
+<wire x1="6.35" y1="-3.81" x2="6.35" y2="-1.27" width="0.254" layer="94"/>
+<wire x1="6.35" y1="-1.27" x2="3.81" y2="-1.27" width="0.254" layer="94"/>
+<wire x1="7.62" y1="0" x2="7.62" y2="-5.08" width="0.254" layer="94"/>
+<pin name="A" x="0" y="-2.54" visible="off" length="short"/>
+<pin name="B" x="10.16" y="-2.54" visible="off" length="short" rot="R180"/>
+<text x="0.0161" y="0.6764" size="1.778" layer="95">&gt;NAME</text>
+</symbol>
+<symbol name="--MERGED_DIODE">
+<wire x1="-1.27" y1="-1.27" x2="1.27" y2="0" width="0.254" layer="94"/>
+<wire x1="1.27" y1="0" x2="-1.27" y2="1.27" width="0.254" layer="94"/>
+<wire x1="1.27" y1="1.27" x2="1.27" y2="0" width="0.254" layer="94"/>
+<wire x1="-1.27" y1="1.27" x2="-1.27" y2="-1.27" width="0.254" layer="94"/>
+<wire x1="1.27" y1="0" x2="1.27" y2="-1.27" width="0.254" layer="94"/>
+<pin name="A" x="-2.54" y="0" visible="off" length="short" direction="pas"/>
+<pin name="C" x="2.54" y="0" visible="off" length="short" direction="pas" rot="R180"/>
+<text x="2.54" y="0.4826" size="1.778" layer="95">&gt;NAME</text>
+</symbol>
+<symbol name="--MERGED_DUAL-TVS-COMMON-ANODE">
+<circle x="0" y="1.27" radius="0.127" width="0.254" layer="94"/>
+<wire x1="-3.81" y1="5.08" x2="-2.54" y2="5.08" width="0.1524" layer="94"/>
+<wire x1="-2.54" y1="5.08" x2="-1.27" y2="5.08" width="0.1524" layer="94"/>
+<wire x1="-2.54" y1="5.08" x2="-3.81" y2="2.54" width="0.1524" layer="94"/>
+<wire x1="-3.81" y1="2.54" x2="-2.54" y2="2.54" width="0.1524" layer="94"/>
+<wire x1="-2.54" y1="2.54" x2="-1.27" y2="2.54" width="0.1524" layer="94"/>
+<wire x1="-1.27" y1="2.54" x2="-2.54" y2="5.08" width="0.1524" layer="94"/>
+<wire x1="1.27" y1="2.54" x2="2.54" y2="2.54" width="0.1524" layer="94"/>
+<wire x1="2.54" y1="2.54" x2="3.81" y2="2.54" width="0.1524" layer="94"/>
+<wire x1="3.81" y1="2.54" x2="2.54" y2="5.08" width="0.1524" layer="94"/>
+<wire x1="2.54" y1="5.08" x2="1.27" y2="2.54" width="0.1524" layer="94"/>
+<wire x1="1.27" y1="5.08" x2="2.54" y2="5.08" width="0.1524" layer="94"/>
+<wire x1="2.54" y1="5.08" x2="3.81" y2="5.08" width="0.1524" layer="94"/>
+<wire x1="0" y1="0" x2="0" y2="1.27" width="0.1524" layer="94"/>
+<wire x1="0" y1="1.27" x2="2.54" y2="1.27" width="0.1524" layer="94"/>
+<wire x1="2.54" y1="1.27" x2="2.54" y2="2.54" width="0.1524" layer="94"/>
+<wire x1="0" y1="1.27" x2="-2.54" y2="1.27" width="0.1524" layer="94"/>
+<wire x1="-2.54" y1="1.27" x2="-2.54" y2="2.54" width="0.1524" layer="94"/>
+<wire x1="-1.27" y1="5.08" x2="-0.635" y2="5.715" width="0.1524" layer="94"/>
+<wire x1="-3.81" y1="5.08" x2="-4.445" y2="4.445" width="0.1524" layer="94"/>
+<wire x1="1.27" y1="5.08" x2="0.635" y2="4.445" width="0.1524" layer="94"/>
+<wire x1="4.445" y1="5.715" x2="3.81" y2="5.08" width="0.1524" layer="94"/>
+<pin name="A" x="0" y="0" visible="pad" length="point" rot="R90"/>
+<pin name="K1" x="-2.54" y="7.62" visible="pad" length="short" rot="R270"/>
+<pin name="K2" x="2.54" y="7.62" visible="pad" length="short" rot="R270"/>
+<text x="4.8316" y="7.183" size="1.778" layer="95">&gt;NAME</text>
+</symbol>
+<symbol name="--MERGED_FERRITE">
+<wire x1="0" y1="1.27" x2="0" y2="-1.27" width="0.254" layer="94"/>
+<wire x1="0" y1="-1.27" x2="7.62" y2="-1.27" width="0.254" layer="94"/>
+<wire x1="7.62" y1="-1.27" x2="7.62" y2="1.27" width="0.254" layer="94"/>
+<wire x1="7.62" y1="1.27" x2="0" y2="1.27" width="0.254" layer="94"/>
+<pin name="A" x="-2.54" y="0" visible="off" length="short"/>
+<pin name="B" x="10.16" y="0" visible="off" length="short" rot="R180"/>
+<text x="0.8509" y="-0.5065" size="1.016" layer="94" font="vector">ferrite</text>
+<text x="0.189" y="1.6198" size="1.6764" layer="95" font="vector">&gt;NAME</text>
+</symbol>
+<symbol name="--MERGED_HEADER-MALE-6X1">
+<wire x1="-3.81" y1="12.7" x2="1.27" y2="12.7" width="0.4064" layer="94"/>
+<wire x1="-1.27" y1="5.08" x2="-2.54" y2="5.08" width="0.6096" layer="94"/>
+<wire x1="-1.27" y1="7.62" x2="-2.54" y2="7.62" width="0.6096" layer="94"/>
+<wire x1="-1.27" y1="10.16" x2="-2.54" y2="10.16" width="0.6096" layer="94"/>
+<wire x1="-1.27" y1="0" x2="-2.54" y2="0" width="0.6096" layer="94"/>
+<wire x1="-1.27" y1="2.54" x2="-2.54" y2="2.54" width="0.6096" layer="94"/>
+<wire x1="-1.27" y1="-2.54" x2="-2.54" y2="-2.54" width="0.6096" layer="94"/>
+<wire x1="1.27" y1="-5.08" x2="1.27" y2="12.7" width="0.4064" layer="94"/>
+<wire x1="-3.81" y1="12.7" x2="-3.81" y2="-5.08" width="0.4064" layer="94"/>
+<wire x1="1.27" y1="-5.08" x2="-3.81" y2="-5.08" width="0.4064" layer="94"/>
+<pin name="1" x="-7.62" y="10.16" visible="pad" length="middle" direction="pas" swaplevel="1"/>
+<pin name="2" x="-7.62" y="7.62" visible="pad" length="middle" direction="pas" swaplevel="1"/>
+<pin name="3" x="-7.62" y="5.08" visible="pad" length="middle" direction="pas" swaplevel="1"/>
+<pin name="4" x="-7.62" y="2.54" visible="pad" length="middle" direction="pas" swaplevel="1"/>
+<pin name="5" x="-7.62" y="0" visible="pad" length="middle" direction="pas" swaplevel="1"/>
+<pin name="6" x="-7.62" y="-2.54" visible="pad" length="middle" direction="pas" swaplevel="1"/>
+<text x="1.27" y="-5.842" size="1.778" layer="95" rot="R180">&gt;NAME</text>
+</symbol>
+<symbol name="--MERGED_HEADER-MALE-10X2">
+<wire x1="1.27" y1="-12.7" x2="-6.35" y2="-12.7" width="0.4064" layer="94"/>
+<wire x1="-1.27" y1="-5.08" x2="0" y2="-5.08" width="0.6096" layer="94"/>
+<wire x1="-1.27" y1="-7.62" x2="0" y2="-7.62" width="0.6096" layer="94"/>
+<wire x1="-1.27" y1="-10.16" x2="0" y2="-10.16" width="0.6096" layer="94"/>
+<wire x1="-5.08" y1="-5.08" x2="-3.81" y2="-5.08" width="0.6096" layer="94"/>
+<wire x1="-5.08" y1="-7.62" x2="-3.81" y2="-7.62" width="0.6096" layer="94"/>
+<wire x1="-5.08" y1="-10.16" x2="-3.81" y2="-10.16" width="0.6096" layer="94"/>
+<wire x1="-1.27" y1="0" x2="0" y2="0" width="0.6096" layer="94"/>
+<wire x1="-1.27" y1="-2.54" x2="0" y2="-2.54" width="0.6096" layer="94"/>
+<wire x1="-5.08" y1="0" x2="-3.81" y2="0" width="0.6096" layer="94"/>
+<wire x1="-5.08" y1="-2.54" x2="-3.81" y2="-2.54" width="0.6096" layer="94"/>
+<wire x1="-1.27" y1="7.62" x2="0" y2="7.62" width="0.6096" layer="94"/>
+<wire x1="-1.27" y1="5.08" x2="0" y2="5.08" width="0.6096" layer="94"/>
+<wire x1="-1.27" y1="2.54" x2="0" y2="2.54" width="0.6096" layer="94"/>
+<wire x1="-5.08" y1="7.62" x2="-3.81" y2="7.62" width="0.6096" layer="94"/>
+<wire x1="-5.08" y1="5.08" x2="-3.81" y2="5.08" width="0.6096" layer="94"/>
+<wire x1="-5.08" y1="2.54" x2="-3.81" y2="2.54" width="0.6096" layer="94"/>
+<wire x1="-6.35" y1="15.24" x2="-6.35" y2="-12.7" width="0.4064" layer="94"/>
+<wire x1="1.27" y1="-12.7" x2="1.27" y2="15.24" width="0.4064" layer="94"/>
+<wire x1="-6.35" y1="15.24" x2="1.27" y2="15.24" width="0.4064" layer="94"/>
+<wire x1="-1.27" y1="12.7" x2="0" y2="12.7" width="0.6096" layer="94"/>
+<wire x1="-1.27" y1="10.16" x2="0" y2="10.16" width="0.6096" layer="94"/>
+<wire x1="-5.08" y1="12.7" x2="-3.81" y2="12.7" width="0.6096" layer="94"/>
+<wire x1="-5.08" y1="10.16" x2="-3.81" y2="10.16" width="0.6096" layer="94"/>
+<pin name="1" x="5.08" y="-10.16" visible="pad" length="middle" direction="pas" swaplevel="1" rot="R180"/>
+<pin name="2" x="-10.16" y="-10.16" visible="pad" length="middle" direction="pas" swaplevel="1"/>
+<pin name="3" x="5.08" y="-7.62" visible="pad" length="middle" direction="pas" swaplevel="1" rot="R180"/>
+<pin name="4" x="-10.16" y="-7.62" visible="pad" length="middle" direction="pas" swaplevel="1"/>
+<pin name="5" x="5.08" y="-5.08" visible="pad" length="middle" direction="pas" swaplevel="1" rot="R180"/>
+<pin name="6" x="-10.16" y="-5.08" visible="pad" length="middle" direction="pas" swaplevel="1"/>
+<pin name="7" x="5.08" y="-2.54" visible="pad" length="middle" direction="pas" swaplevel="1" rot="R180"/>
+<pin name="8" x="-10.16" y="-2.54" visible="pad" length="middle" direction="pas" swaplevel="1"/>
+<pin name="9" x="5.08" y="0" visible="pad" length="middle" direction="pas" swaplevel="1" rot="R180"/>
+<pin name="10" x="-10.16" y="0" visible="pad" length="middle" direction="pas" swaplevel="1"/>
+<pin name="11" x="5.08" y="2.54" visible="pad" length="middle" direction="pas" swaplevel="1" rot="R180"/>
+<pin name="12" x="-10.16" y="2.54" visible="pad" length="middle" direction="pas" swaplevel="1"/>
+<pin name="13" x="5.08" y="5.08" visible="pad" length="middle" direction="pas" swaplevel="1" rot="R180"/>
+<pin name="14" x="-10.16" y="5.08" visible="pad" length="middle" direction="pas" swaplevel="1"/>
+<pin name="15" x="5.08" y="7.62" visible="pad" length="middle" direction="pas" swaplevel="1" rot="R180"/>
+<pin name="16" x="-10.16" y="7.62" visible="pad" length="middle" direction="pas" swaplevel="1"/>
+<pin name="17" x="5.08" y="10.16" visible="pad" length="middle" direction="pas" swaplevel="1" rot="R180"/>
+<pin name="18" x="-10.16" y="10.16" visible="pad" length="middle" direction="pas" swaplevel="1"/>
+<pin name="19" x="5.08" y="12.7" visible="pad" length="middle" direction="pas" swaplevel="1" rot="R180"/>
+<pin name="20" x="-10.16" y="12.7" visible="pad" length="middle" direction="pas" swaplevel="1"/>
+<text x="-6.35" y="-15.24" size="1.778" layer="96">&gt;VALUE</text>
+<text x="-6.35" y="16.002" size="1.778" layer="95">&gt;NAME</text>
+</symbol>
+<symbol name="--MERGED_INVERTER">
+<circle x="5.715" y="0" radius="0.635" width="0.1524" layer="94"/>
+<wire x1="0" y1="2.54" x2="0" y2="-2.54" width="0.254" layer="94"/>
+<wire x1="0" y1="-2.54" x2="2.54" y2="-1.27" width="0.254" layer="94"/>
+<wire x1="2.54" y1="-1.27" x2="5.08" y2="0" width="0.254" layer="94"/>
+<wire x1="5.08" y1="0" x2="2.54" y2="1.27" width="0.254" layer="94"/>
+<wire x1="2.54" y1="1.27" x2="0" y2="2.54" width="0.254" layer="94"/>
+<wire x1="7.62" y1="0" x2="6.35" y2="0" width="0.1524" layer="94"/>
+<wire x1="2.54" y1="-2.54" x2="2.54" y2="-1.27" width="0.1524" layer="94"/>
+<wire x1="2.54" y1="1.27" x2="2.54" y2="2.54" width="0.1524" layer="94"/>
+<pin name="A" x="-2.54" y="0" visible="pad" length="short"/>
+<pin name="VDD" x="2.54" y="5.08" visible="pad" length="short" rot="R270"/>
+<pin name="VSS" x="2.54" y="-5.08" visible="pad" length="short" rot="R90"/>
+<pin name="Y" x="7.62" y="0" visible="pad" length="point" rot="R180"/>
+<text x="3.1661" y="2.7576" size="1.016" layer="95">Vdd</text>
+<text x="3.1048" y="-3.6768" size="1.016" layer="95">Vss</text>
+<text x="-3.8786" y="3.7099" size="1.4224" layer="95">&gt;NAME</text>
+</symbol>
+<symbol name="--MERGED_LED">
+<wire x1="1.27" y1="2.54" x2="0" y2="0" width="0.254" layer="94"/>
+<wire x1="0" y1="0" x2="-1.27" y2="2.54" width="0.254" layer="94"/>
+<wire x1="1.27" y1="0" x2="0" y2="0" width="0.254" layer="94"/>
+<wire x1="0" y1="0" x2="-1.27" y2="0" width="0.254" layer="94"/>
+<wire x1="1.27" y1="2.54" x2="0" y2="2.54" width="0.254" layer="94"/>
+<wire x1="0" y1="2.54" x2="-1.27" y2="2.54" width="0.254" layer="94"/>
+<wire x1="0" y1="2.54" x2="0" y2="0" width="0.1524" layer="94"/>
+<wire x1="-2.032" y1="1.778" x2="-3.429" y2="0.381" width="0.1524" layer="94"/>
+<wire x1="-3.429" y1="0.381" x2="-2.54" y2="0.762" width="0.1524" layer="94"/>
+<wire x1="-2.54" y1="0.762" x2="-3.048" y2="1.27" width="0.1524" layer="94"/>
+<wire x1="-3.048" y1="1.27" x2="-3.429" y2="0.381" width="0.1524" layer="94"/>
+<wire x1="-3.302" y1="-0.762" x2="-2.413" y2="-0.381" width="0.1524" layer="94"/>
+<wire x1="-2.413" y1="-0.381" x2="-2.921" y2="0.127" width="0.1524" layer="94"/>
+<wire x1="-2.921" y1="0.127" x2="-3.302" y2="-0.762" width="0.1524" layer="94"/>
+<wire x1="-1.905" y1="0.635" x2="-3.302" y2="-0.762" width="0.1524" layer="94"/>
+<pin name="A" x="0" y="5.08" visible="off" length="short" direction="pas" rot="R270"/>
+<pin name="C" x="0" y="-2.54" visible="off" length="short" direction="pas" rot="R90"/>
+<text x="3.556" y="-2.032" size="1.778" layer="95" rot="R90">&gt;NAME</text>
+</symbol>
+<symbol name="--MERGED_LP2989-LDO">
+<wire x1="0" y1="2.54" x2="-22.86" y2="2.54" width="0.254" layer="94"/>
+<wire x1="-22.86" y1="2.54" x2="-22.86" y2="-15.24" width="0.254" layer="94"/>
+<wire x1="-22.86" y1="-15.24" x2="0" y2="-15.24" width="0.254" layer="94"/>
+<wire x1="0" y1="-15.24" x2="0" y2="2.54" width="0.254" layer="94"/>
+<pin name="/ERROR" x="5.08" y="-10.16" length="middle" direction="pas" rot="R180"/>
+<pin name="/SHDN" x="-27.94" y="-5.08" length="middle" direction="pas"/>
+<pin name="BYP" x="-27.94" y="-10.16" length="middle" direction="pas"/>
+<pin name="GND" x="-27.94" y="-12.7" length="middle" direction="pas"/>
+<pin name="IN" x="-27.94" y="0" length="middle" direction="pas"/>
+<pin name="OUT" x="5.08" y="0" length="middle" direction="pas" rot="R180"/>
+<pin name="SENSE" x="5.08" y="-2.54" length="middle" direction="pas" rot="R180"/>
+<text x="-22.098" y="3.048" size="1.778" layer="95">&gt;NAME</text>
+<text x="-0.508" y="-15.748" size="1.778" layer="95" rot="R180">&gt;VALUE</text>
+</symbol>
+<symbol name="--MERGED_NFET">
+<wire x1="-2.54" y1="1.27" x2="-2.54" y2="0" width="0.3048" layer="94"/>
+<wire x1="-2.54" y1="0" x2="-2.54" y2="-1.27" width="0.3048" layer="94"/>
+<wire x1="-2.54" y1="-1.27" x2="-2.54" y2="-2.54" width="0.3048" layer="94"/>
+<wire x1="-2.54" y1="-2.54" x2="-2.54" y2="-3.81" width="0.3048" layer="94"/>
+<wire x1="-1.27" y1="-1.27" x2="-2.2225" y2="-1.27" width="0.1524" layer="94"/>
+<wire x1="-2.2225" y1="-1.27" x2="-2.54" y2="-1.27" width="0.1524" layer="94"/>
+<wire x1="-1.27" y1="-1.27" x2="-1.27" y2="-2.54" width="0.1524" layer="94"/>
+<wire x1="0" y1="-2.54" x2="-1.27" y2="-2.54" width="0.1524" layer="94"/>
+<wire x1="0" y1="0" x2="-2.54" y2="0" width="0.1524" layer="94"/>
+<wire x1="-5.08" y1="-2.54" x2="-3.81" y2="-2.54" width="0.1524" layer="94"/>
+<wire x1="-2.54" y1="-2.54" x2="-1.27" y2="-2.54" width="0.1524" layer="94"/>
+<wire x1="-3.81" y1="-2.54" x2="-3.81" y2="0" width="0.1524" layer="94"/>
+<wire x1="-1.5875" y1="-1.905" x2="-1.5875" y2="-0.635" width="0.1016" layer="94"/>
+<wire x1="-1.5875" y1="-0.635" x2="-2.2225" y2="-1.27" width="0.1016" layer="94"/>
+<wire x1="-2.2225" y1="-1.27" x2="-1.5875" y2="-1.905" width="0.1016" layer="94"/>
+<pin name="D" x="0" y="0" visible="off" length="point" direction="pas" rot="R180"/>
+<pin name="G" x="-5.08" y="-2.54" visible="off" length="point" direction="pas"/>
+<pin name="S" x="0" y="-2.54" visible="off" length="point" direction="pas" rot="R180"/>
+<text x="2.54" y="3.556" size="1.778" layer="95" font="vector" rot="R180">&gt;NAME</text>
+</symbol>
+<symbol name="--MERGED_NPN-THIN-SYMBOL">
+<wire x1="0" y1="1.905" x2="0" y2="0.635" width="0.3048" layer="94"/>
+<wire x1="0" y1="0.635" x2="0" y2="-0.635" width="0.3048" layer="94"/>
+<wire x1="0" y1="-0.635" x2="0" y2="-1.905" width="0.3048" layer="94"/>
+<wire x1="0" y1="0.635" x2="2.54" y2="2.54" width="0.1524" layer="94"/>
+<wire x1="2.54" y1="-2.54" x2="0" y2="-0.635" width="0.1524" layer="94"/>
+<wire x1="2.54" y1="-2.54" x2="2.54" y2="-5.08" width="0.1524" layer="94"/>
+<wire x1="2.54" y1="2.54" x2="2.54" y2="5.08" width="0.1524" layer="94"/>
+<wire x1="2.54" y1="-2.54" x2="1.905" y2="-1.27" width="0.1524" layer="94"/>
+<wire x1="1.905" y1="-1.27" x2="1.27" y2="-1.905" width="0.1524" layer="94"/>
+<wire x1="1.27" y1="-1.905" x2="2.54" y2="-2.54" width="0.1524" layer="94"/>
+<pin name="B" x="-2.54" y="0" visible="pad" length="short"/>
+<pin name="C" x="2.54" y="5.08" visible="pad" length="point" rot="R180"/>
+<pin name="E" x="2.54" y="-5.08" visible="pad" length="point" rot="R180"/>
+<text x="-2.8525" y="3.2215" size="1.4224" layer="95">&gt;NAME</text>
+</symbol>
+<symbol name="--MERGED_OPAMP">
+<wire x1="0" y1="5.08" x2="0" y2="-5.08" width="0.4064" layer="94"/>
+<wire x1="0" y1="-5.08" x2="10.16" y2="0" width="0.4064" layer="94"/>
+<wire x1="10.16" y1="0" x2="0" y2="5.08" width="0.4064" layer="94"/>
+<wire x1="1.27" y1="3.175" x2="1.27" y2="1.905" width="0.1524" layer="94"/>
+<wire x1="0.635" y1="2.54" x2="1.905" y2="2.54" width="0.1524" layer="94"/>
+<wire x1="0.635" y1="-2.54" x2="1.905" y2="-2.54" width="0.1524" layer="94"/>
+<pin name="+IN" x="-2.54" y="2.54" visible="pad" length="short" direction="in"/>
+<pin name="-IN" x="-2.54" y="-2.54" visible="pad" length="short" direction="in"/>
+<pin name="OUT" x="12.7" y="0" visible="pad" length="short" direction="out" rot="R180"/>
+<text x="7.62" y="3.175" size="1.778" layer="95">&gt;NAME</text>
+<text x="7.62" y="-5.08" size="1.778" layer="96">&gt;VALUE</text>
+</symbol>
+<symbol name="--MERGED_PFET">
+<wire x1="5.08" y1="-1.27" x2="5.08" y2="1.27" width="0.254" layer="94"/>
+<wire x1="5.08" y1="1.27" x2="5.08" y2="3.81" width="0.254" layer="94"/>
+<wire x1="6.35" y1="2.54" x2="6.35" y2="0" width="0.1524" layer="94"/>
+<wire x1="5.08" y1="1.27" x2="4.1275" y2="1.27" width="0.1524" layer="94"/>
+<wire x1="4.1275" y1="1.27" x2="3.81" y2="1.27" width="0.1524" layer="94"/>
+<wire x1="3.81" y1="1.27" x2="3.81" y2="0" width="0.1524" layer="94"/>
+<wire x1="7.62" y1="0" x2="6.35" y2="0" width="0.1524" layer="94"/>
+<wire x1="4.7625" y1="1.905" x2="4.7625" y2="0.635" width="0.1016" layer="94"/>
+<wire x1="4.7625" y1="0.635" x2="4.1275" y2="1.27" width="0.1016" layer="94"/>
+<wire x1="4.1275" y1="1.27" x2="4.7625" y2="1.905" width="0.1016" layer="94"/>
+<pin name="D" x="2.54" y="2.54" visible="off" length="short" direction="pas"/>
+<pin name="G" x="7.62" y="0" visible="off" length="point" direction="pas" rot="R180"/>
+<pin name="S" x="2.54" y="0" visible="off" length="short" direction="pas"/>
+<text x="0" y="4.064" size="1.778" layer="95" font="vector">&gt;NAME</text>
+</symbol>
+<symbol name="--MERGED_POWER-PINS">
+<pin name="V+" x="0" y="5.08" length="middle" rot="R270"/>
+<pin name="V-" x="0" y="-17.78" length="middle" rot="R90"/>
+<text x="2.54" y="0" size="1.778" layer="95">&gt;NAME</text>
+</symbol>
+<symbol name="--MERGED_PQ1X331M2ZP-3V3-REG">
+<wire x1="0" y1="2.54" x2="0" y2="-7.62" width="0.254" layer="94"/>
+<wire x1="0" y1="-7.62" x2="17.78" y2="-7.62" width="0.254" layer="94"/>
+<wire x1="17.78" y1="-7.62" x2="17.78" y2="2.54" width="0.254" layer="94"/>
+<wire x1="17.78" y1="2.54" x2="0" y2="2.54" width="0.254" layer="94"/>
+<pin name="GND" x="-5.08" y="-2.54" length="middle"/>
+<pin name="NR" x="22.86" y="-5.08" length="middle" rot="R180"/>
+<pin name="VC" x="-5.08" y="-5.08" length="middle"/>
+<pin name="VIN" x="-5.08" y="0" length="middle"/>
+<pin name="VO" x="22.86" y="0" length="middle" rot="R180"/>
+<text x="17.6045" y="-8.0371" size="1.778" layer="95" font="vector" rot="R180">&gt;NAME</text>
+<text x="0.2195" y="3.0304" size="1.778" layer="95" font="vector">PQ1X331M2ZP 3v3 LDO</text>
+</symbol>
+<symbol name="--MERGED_RELAY-COIL">
+<wire x1="0" y1="0" x2="1.27" y2="0" width="0.1524" layer="94"/>
+<wire x1="1.27" y1="0" x2="2.54" y2="-1.27" width="0.1524" layer="94" curve="-90"/>
+<wire x1="2.54" y1="-1.27" x2="1.27" y2="-2.54" width="0.1524" layer="94" curve="-90"/>
+<wire x1="1.27" y1="-2.54" x2="2.54" y2="-3.81" width="0.1524" layer="94" curve="-90"/>
+<wire x1="2.54" y1="-3.81" x2="1.27" y2="-5.08" width="0.1524" layer="94" curve="-90"/>
+<wire x1="1.27" y1="-7.62" x2="2.54" y2="-6.35" width="0.1524" layer="94" curve="90"/>
+<wire x1="2.54" y1="-6.35" x2="1.27" y2="-5.08" width="0.1524" layer="94" curve="90"/>
+<wire x1="1.27" y1="-7.62" x2="0" y2="-7.62" width="0.1524" layer="94"/>
+<pin name="P$1" x="-2.54" y="0" visible="pad" length="short" direction="pas"/>
+<pin name="P$2" x="-2.54" y="-7.62" visible="pad" length="short" direction="pas"/>
+<text x="3.048" y="0" size="1.6764" layer="95" rot="R270">&gt;NAME</text>
+</symbol>
+<symbol name="--MERGED_RELAY-NO-NC">
+<wire x1="0" y1="0" x2="-0.635" y2="-1.27" width="0.1524" layer="94"/>
+<wire x1="0" y1="0" x2="0.635" y2="-1.27" width="0.1524" layer="94"/>
+<wire x1="10.16" y1="0" x2="9.525" y2="-1.27" width="0.1524" layer="94"/>
+<wire x1="10.16" y1="0" x2="10.795" y2="-1.27" width="0.1524" layer="94"/>
+<wire x1="5.08" y1="0.635" x2="5.08" y2="0" width="0.1524" layer="94"/>
+<wire x1="-1.778" y1="-0.254" x2="11.684" y2="1.524" width="0.254" layer="94"/>
+<pin name="COM" x="5.08" y="-5.08" visible="pad" length="middle" direction="pas" rot="R90"/>
+<pin name="NC" x="0" y="-5.08" visible="pad" length="middle" direction="pas" rot="R90"/>
+<pin name="NO" x="10.16" y="-5.08" visible="pad" length="middle" direction="pas" rot="R90"/>
+<text x="-0.508" y="1.27" size="1.6764" layer="95">&gt;NAME</text>
+</symbol>
+<symbol name="--MERGED_RESET-GENERATOR-3TERM">
+<wire x1="-2.54" y1="0" x2="-12.7" y2="0" width="0.254" layer="94"/>
+<wire x1="-12.7" y1="0" x2="-12.7" y2="-15.24" width="0.254" layer="94"/>
+<wire x1="-12.7" y1="-15.24" x2="-2.54" y2="-15.24" width="0.254" layer="94"/>
+<wire x1="-2.54" y1="-15.24" x2="-2.54" y2="0" width="0.254" layer="94"/>
+<pin name="OUT" x="2.54" y="-7.62" length="middle" rot="R180"/>
+<pin name="V+" x="-10.16" y="5.08" length="middle" rot="R270"/>
+<pin name="V-" x="-10.16" y="-20.32" length="middle" rot="R90"/>
+<text x="-8.6526" y="0.6687" size="1.778" layer="95">&gt;NAME</text>
+<text x="-13.4709" y="-14.4837" size="1.778" layer="95" rot="R90">&gt;VALUE</text>
+</symbol>
+<symbol name="--MERGED_RESISTOR">
+<wire x1="-2.54" y1="0" x2="-2.159" y2="1.016" width="0.2032" layer="94"/>
+<wire x1="-2.159" y1="1.016" x2="-1.524" y2="-1.016" width="0.2032" layer="94"/>
+<wire x1="-1.524" y1="-1.016" x2="-0.889" y2="1.016" width="0.2032" layer="94"/>
+<wire x1="-0.889" y1="1.016" x2="-0.254" y2="-1.016" width="0.2032" layer="94"/>
+<wire x1="-0.254" y1="-1.016" x2="0.381" y2="1.016" width="0.2032" layer="94"/>
+<wire x1="0.381" y1="1.016" x2="1.016" y2="-1.016" width="0.2032" layer="94"/>
+<wire x1="1.016" y1="-1.016" x2="1.651" y2="1.016" width="0.2032" layer="94"/>
+<wire x1="1.651" y1="1.016" x2="2.286" y2="-1.016" width="0.2032" layer="94"/>
+<wire x1="2.286" y1="-1.016" x2="2.54" y2="0" width="0.2032" layer="94"/>
+<pin name="1" x="-5.08" y="0" visible="off" length="short" direction="pas" swaplevel="1"/>
+<pin name="2" x="5.08" y="0" visible="off" length="short" direction="pas" swaplevel="1" rot="R180"/>
+<text x="-3.81" y="1.4986" size="1.778" layer="95">&gt;NAME</text>
+<text x="-3.81" y="-3.175" size="1.778" layer="96">&gt;VALUE</text>
+</symbol>
+<symbol name="--MERGED_SPARTAN-II-XC2S30-100-VQFP">
+<wire x1="48.26" y1="0" x2="0" y2="0" width="0.254" layer="94"/>
+<wire x1="0" y1="0" x2="0" y2="-119.38" width="0.254" layer="94"/>
+<wire x1="0" y1="-119.38" x2="48.26" y2="-119.38" width="0.254" layer="94"/>
+<wire x1="48.26" y1="-119.38" x2="48.26" y2="0" width="0.254" layer="94"/>
+<pin name="/PROGRAM" x="-5.08" y="-43.18" length="middle"/>
+<pin name="CCLK" x="-5.08" y="-45.72" length="middle"/>
+<pin name="DIN" x="-5.08" y="-48.26" length="middle"/>
+<pin name="DONE" x="-5.08" y="-40.64" length="middle"/>
+<pin name="DOUT" x="-5.08" y="-50.8" length="middle"/>
+<pin name="GND1" x="5.08" y="-124.46" visible="pad" length="middle" rot="R90"/>
+<pin name="GND2" x="7.62" y="-124.46" visible="pad" length="middle" rot="R90"/>
+<pin name="GND3" x="10.16" y="-124.46" visible="pad" length="middle" rot="R90"/>
+<pin name="GND4" x="12.7" y="-124.46" visible="pad" length="middle" rot="R90"/>
+<pin name="GND5" x="15.24" y="-124.46" visible="pad" length="middle" rot="R90"/>
+<pin name="GND6" x="17.78" y="-124.46" visible="pad" length="middle" rot="R90"/>
+<pin name="GND7" x="20.32" y="-124.46" visible="pad" length="middle" rot="R90"/>
+<pin name="GND8" x="22.86" y="-124.46" visible="pad" length="middle" rot="R90"/>
+<pin name="M0" x="-5.08" y="-30.48" length="middle"/>
+<pin name="M1" x="-5.08" y="-33.02" length="middle"/>
+<pin name="M2" x="-5.08" y="-35.56" length="middle"/>
+<pin name="NC0" x="27.94" y="-124.46" visible="pad" length="middle" rot="R90"/>
+<pin name="NC1" x="30.48" y="-124.46" visible="pad" length="middle" rot="R90"/>
+<pin name="P3_IO7" x="53.34" y="-7.62" length="middle" rot="R180"/>
+<pin name="P4_IOV7" x="53.34" y="-10.16" length="middle" rot="R180"/>
+<pin name="P5_IO7" x="53.34" y="-12.7" length="middle" rot="R180"/>
+<pin name="P6_IO7" x="53.34" y="-15.24" length="middle" rot="R180"/>
+<pin name="P7_IO7" x="53.34" y="-17.78" length="middle" rot="R180"/>
+<pin name="P8_IOV7" x="53.34" y="-20.32" length="middle" rot="R180"/>
+<pin name="P9_IO7" x="53.34" y="-22.86" length="middle" rot="R180"/>
+<pin name="P10_IO7" x="53.34" y="-25.4" length="middle" rot="R180"/>
+<pin name="P13_IO6" x="53.34" y="-30.48" length="middle" rot="R180"/>
+<pin name="P15_IO6" x="53.34" y="-33.02" length="middle" rot="R180"/>
+<pin name="P16_IOV6" x="53.34" y="-35.56" length="middle" rot="R180"/>
+<pin name="P17_IO6" x="53.34" y="-38.1" length="middle" rot="R180"/>
+<pin name="P18_IO6" x="53.34" y="-40.64" length="middle" rot="R180"/>
+<pin name="P19_IO6" x="53.34" y="-43.18" length="middle" rot="R180"/>
+<pin name="P20_IOV6" x="53.34" y="-45.72" length="middle" rot="R180"/>
+<pin name="P21_IO6" x="53.34" y="-48.26" length="middle" rot="R180"/>
+<pin name="P22_IO6" x="53.34" y="-50.8" length="middle" rot="R180"/>
+<pin name="P30_IOV5" x="53.34" y="-55.88" length="middle" rot="R180"/>
+<pin name="P31_IO5" x="53.34" y="-58.42" length="middle" rot="R180"/>
+<pin name="P32_IO5" x="53.34" y="-60.96" length="middle" rot="R180"/>
+<pin name="P34_IOV5" x="53.34" y="-63.5" length="middle" rot="R180"/>
+<pin name="P36_IGCK5" x="53.34" y="-66.04" length="middle" rot="R180"/>
+<pin name="P39_IGCK4" x="53.34" y="-71.12" length="middle" rot="R180"/>
+<pin name="P40_IO4" x="53.34" y="-73.66" length="middle" rot="R180"/>
+<pin name="P41_IOV4" x="53.34" y="-76.2" length="middle" rot="R180"/>
+<pin name="P43_IO4" x="53.34" y="-78.74" length="middle" rot="R180"/>
+<pin name="P44_IO4" x="53.34" y="-81.28" length="middle" rot="R180"/>
+<pin name="P45_IOV4" x="53.34" y="-83.82" length="middle" rot="R180"/>
+<pin name="P46_IO4" x="53.34" y="-86.36" length="middle" rot="R180"/>
+<pin name="P47_IO4" x="53.34" y="-88.9" length="middle" rot="R180"/>
+<pin name="P52_IO3" x="53.34" y="-93.98" length="middle" rot="R180"/>
+<pin name="P53_IO3" x="53.34" y="-96.52" length="middle" rot="R180"/>
+<pin name="P54_IOV3" x="53.34" y="-99.06" length="middle" rot="R180"/>
+<pin name="P55_IO3" x="53.34" y="-101.6" length="middle" rot="R180"/>
+<pin name="P56_IO3" x="53.34" y="-104.14" length="middle" rot="R180"/>
+<pin name="P57_IO3" x="53.34" y="-106.68" length="middle" rot="R180"/>
+<pin name="P58_IO3" x="53.34" y="-109.22" length="middle" rot="R180"/>
+<pin name="P59_IOV3" x="53.34" y="-111.76" length="middle" rot="R180"/>
+<pin name="P60_IO3" x="53.34" y="-114.3" length="middle" rot="R180"/>
+<pin name="P62_IO3" x="53.34" y="-116.84" length="middle" rot="R180"/>
+<pin name="P65_IO2" x="-5.08" y="-55.88" length="middle"/>
+<pin name="P66_IO2" x="-5.08" y="-58.42" length="middle"/>
+<pin name="P67_IOV2" x="-5.08" y="-60.96" length="middle"/>
+<pin name="P68_IO2" x="-5.08" y="-63.5" length="middle"/>
+<pin name="P69_IO2" x="-5.08" y="-66.04" length="middle"/>
+<pin name="P70_IO2" x="-5.08" y="-68.58" length="middle"/>
+<pin name="P71_IO2" x="-5.08" y="-71.12" length="middle"/>
+<pin name="P72_IOV2" x="-5.08" y="-73.66" length="middle"/>
+<pin name="P80_IO1" x="-5.08" y="-78.74" length="middle"/>
+<pin name="P81_IO1" x="-5.08" y="-81.28" length="middle"/>
+<pin name="P82_IOV1" x="-5.08" y="-83.82" length="middle"/>
+<pin name="P83_IO1" x="-5.08" y="-86.36" length="middle"/>
+<pin name="P84_IO1" x="-5.08" y="-88.9" length="middle"/>
+<pin name="P86_IOV1" x="-5.08" y="-91.44" length="middle"/>
+<pin name="P87_IO1" x="-5.08" y="-93.98" length="middle"/>
+<pin name="P88_IGCK1" x="-5.08" y="-96.52" length="middle"/>
+<pin name="P91_IGCK0" x="-5.08" y="-101.6" length="middle"/>
+<pin name="P93_IOV0" x="-5.08" y="-104.14" length="middle"/>
+<pin name="P95_IO0" x="-5.08" y="-106.68" length="middle"/>
+<pin name="P96_IO0" x="-5.08" y="-109.22" length="middle"/>
+<pin name="P97_IOV0" x="-5.08" y="-111.76" length="middle"/>
+<pin name="P98_IO0" x="-5.08" y="-114.3" length="middle"/>
+<pin name="TCK" x="-5.08" y="-25.4" length="middle"/>
+<pin name="TDI" x="-5.08" y="-17.78" length="middle"/>
+<pin name="TDO" x="-5.08" y="-20.32" length="middle"/>
+<pin name="TMS" x="-5.08" y="-22.86" length="middle"/>
+<pin name="VCCINT1" x="27.94" y="5.08" visible="pad" length="middle" rot="R270"/>
+<pin name="VCCINT2" x="30.48" y="5.08" visible="pad" length="middle" rot="R270"/>
+<pin name="VCCINT3" x="33.02" y="5.08" visible="pad" length="middle" rot="R270"/>
+<pin name="VCCINT4" x="35.56" y="5.08" visible="pad" length="middle" rot="R270"/>
+<pin name="VCCINT5" x="38.1" y="5.08" visible="pad" length="middle" rot="R270"/>
+<pin name="VCCINT6" x="40.64" y="5.08" visible="pad" length="middle" rot="R270"/>
+<pin name="VCCINT7" x="43.18" y="5.08" visible="pad" length="middle" rot="R270"/>
+<pin name="VCCINT8" x="45.72" y="5.08" visible="pad" length="middle" rot="R270"/>
+<pin name="VCCO_B07" x="22.86" y="5.08" length="middle" rot="R270"/>
+<pin name="VCCO_B10" x="20.32" y="5.08" length="middle" rot="R270"/>
+<pin name="VCCO_B21" x="17.78" y="5.08" length="middle" rot="R270"/>
+<pin name="VCCO_B32" x="15.24" y="5.08" length="middle" rot="R270"/>
+<pin name="VCCO_B43" x="12.7" y="5.08" length="middle" rot="R270"/>
+<pin name="VCCO_B54" x="10.16" y="5.08" length="middle" rot="R270"/>
+<pin name="VCCO_B65" x="7.62" y="5.08" length="middle" rot="R270"/>
+<pin name="VCCO_B76" x="5.08" y="5.08" length="middle" rot="R270"/>
+<text x="41.148" y="-1.016" size="1.9304" layer="95" rot="R180">VccInt</text>
+<text x="12.192" y="-117.856" size="1.9304" layer="95">GND</text>
+<text x="47.244" y="-120.396" size="2.1844" layer="95" rot="R180">&gt;NAME</text>
+<text x="27.178" y="-94.996" size="5.08" layer="95" rot="R90">XC2330 100-VQFP</text>
+<text x="27.686" y="-117.856" size="1.9304" layer="95">NC</text>
+</symbol>
+<symbol name="--MERGED_SUPPLY_+2V5">
+<wire x1="0" y1="0.635" x2="-1.27" y2="-0.635" width="0.1524" layer="94"/>
+<wire x1="0" y1="0.635" x2="1.27" y2="-0.635" width="0.1524" layer="94"/>
+<wire x1="0" y1="0" x2="0" y2="0.635" width="0.1524" layer="94"/>
+<pin name="+2V5" x="0" y="-2.54" visible="off" length="short" direction="sup" rot="R90"/>
+<text x="-2.032" y="-3.937" size="1.778" layer="95" rot="R90">+2v5</text>
+</symbol>
+<symbol name="--MERGED_SUPPLY_VMID">
+<wire x1="-1.27" y1="0" x2="1.27" y2="0" width="0.254" layer="94"/>
+<wire x1="-1.27" y1="0" x2="-0.635" y2="0.635" width="0.254" layer="94"/>
+<wire x1="-1.27" y1="0" x2="-0.635" y2="-0.635" width="0.254" layer="94"/>
+<wire x1="1.27" y1="0" x2="0.635" y2="0.635" width="0.254" layer="94"/>
+<wire x1="1.27" y1="0" x2="0.635" y2="-0.635" width="0.254" layer="94"/>
+<pin name="VMID" x="0" y="-2.54" visible="off" length="short" direction="sup" rot="R90"/>
+<text x="-2.032" y="-2.794" size="1.27" layer="95" rot="R90">Vmid</text>
+</symbol>
+<symbol name="--MERGED_TACTSWITCH">
+<wire x1="-1.27" y1="1.27" x2="0.635" y2="1.27" width="0.254" layer="94"/>
+<wire x1="0.635" y1="1.27" x2="4.445" y2="1.27" width="0.254" layer="94"/>
+<wire x1="4.445" y1="1.27" x2="6.35" y2="1.27" width="0.254" layer="94"/>
+<wire x1="0.635" y1="1.27" x2="0.635" y2="5.715" width="0.254" layer="94"/>
+<wire x1="0.635" y1="5.715" x2="4.445" y2="5.715" width="0.254" layer="94"/>
+<wire x1="4.445" y1="5.715" x2="4.445" y2="1.27" width="0.254" layer="94"/>
+<pin name="P$1" x="-5.08" y="0" visible="off" length="middle"/>
+<pin name="P$2" x="10.16" y="0" visible="off" length="middle" rot="R180"/>
+<text x="-0.508" y="4.826" size="1.778" layer="95" rot="MR0">&gt;NAME</text>
+</symbol>
+<symbol name="--MERGED_TESTPAD">
+<wire x1="0" y1="0" x2="1.27" y2="0.635" width="0.1524" layer="94"/>
+<wire x1="1.27" y1="0.635" x2="0.635" y2="0.635" width="0.1524" layer="94"/>
+<wire x1="0.635" y1="0.635" x2="-0.635" y2="0.635" width="0.1524" layer="94"/>
+<wire x1="-0.635" y1="0.635" x2="-1.27" y2="0.635" width="0.1524" layer="94"/>
+<wire x1="-1.27" y1="0.635" x2="0" y2="0" width="0.1524" layer="94"/>
+<wire x1="-0.635" y1="0.635" x2="-0.635" y2="3.175" width="0.1524" layer="94"/>
+<wire x1="-0.635" y1="3.175" x2="0.635" y2="3.175" width="0.1524" layer="94"/>
+<wire x1="0.635" y1="3.175" x2="0.635" y2="0.635" width="0.1524" layer="94"/>
+<wire x1="0" y1="2.8575" x2="0" y2="0.9525" width="0.1524" layer="94"/>
+<wire x1="0" y1="0.9525" x2="0.3175" y2="1.27" width="0.1524" layer="94"/>
+<wire x1="0.3175" y1="1.27" x2="-0.3175" y2="1.27" width="0.1524" layer="94"/>
+<wire x1="-0.3175" y1="1.27" x2="0" y2="0.9525" width="0.1524" layer="94"/>
+<pin name="P$1" x="0" y="-2.54" visible="off" length="short" rot="R90"/>
+<text x="-1.27" y="3.4925" size="1.27" layer="95">&gt;NAME</text>
+</symbol>
+<symbol name="--MERGED_TLC5540">
+<wire x1="0" y1="0" x2="-27.94" y2="0" width="0.254" layer="94"/>
+<wire x1="-27.94" y1="0" x2="-27.94" y2="-45.72" width="0.254" layer="94"/>
+<wire x1="-27.94" y1="-45.72" x2="0" y2="-45.72" width="0.254" layer="94"/>
+<wire x1="0" y1="-45.72" x2="0" y2="0" width="0.254" layer="94"/>
+<pin name="AGND0" x="-10.16" y="-50.8" length="middle" rot="R90"/>
+<pin name="AGND1" x="-12.7" y="-50.8" length="middle" rot="R90"/>
+<pin name="ANALOGIN" x="-33.02" y="-15.24" length="middle"/>
+<pin name="CLK" x="5.08" y="-30.48" length="middle" rot="R180"/>
+<pin name="D1" x="5.08" y="-2.54" length="middle" rot="R180"/>
+<pin name="D2" x="5.08" y="-5.08" length="middle" rot="R180"/>
+<pin name="D3" x="5.08" y="-7.62" length="middle" rot="R180"/>
+<pin name="D4" x="5.08" y="-10.16" length="middle" rot="R180"/>
+<pin name="D5" x="5.08" y="-12.7" length="middle" rot="R180"/>
+<pin name="D6" x="5.08" y="-15.24" length="middle" rot="R180"/>
+<pin name="D7" x="5.08" y="-17.78" length="middle" rot="R180"/>
+<pin name="DGND0" x="-2.54" y="-50.8" length="middle" rot="R90"/>
+<pin name="DGND1" x="-5.08" y="-50.8" length="middle" rot="R90"/>
+<pin name="MSB-D8" x="5.08" y="-20.32" length="middle" rot="R180"/>
+<pin name="NOE" x="5.08" y="-25.4" length="middle" rot="R180"/>
+<pin name="REFB" x="-33.02" y="-30.48" length="middle"/>
+<pin name="REFBS" x="-33.02" y="-33.02" length="middle"/>
+<pin name="REFT" x="-33.02" y="-25.4" length="middle"/>
+<pin name="REFTS" x="-33.02" y="-22.86" length="middle"/>
+<pin name="VDDA0" x="-25.4" y="5.08" length="middle" rot="R270"/>
+<pin name="VDDA1" x="-22.86" y="5.08" length="middle" rot="R270"/>
+<pin name="VDDA2" x="-20.32" y="5.08" length="middle" rot="R270"/>
+<pin name="VDDD0" x="-15.24" y="5.08" length="middle" rot="R270"/>
+<pin name="VDDD1" x="-12.7" y="5.08" length="middle" rot="R270"/>
+<text x="-0.508" y="0.762" size="2.1844" layer="95" rot="MR0">&gt;NAME</text>
+<text x="-27.686" y="-46.482" size="2.1844" layer="95" rot="MR180">TLC5540</text>
+</symbol>
+<symbol name="--MERGED_USB-MINIB">
+<wire x1="0" y1="2.54" x2="0" y2="-25.4" width="0.254" layer="94"/>
+<wire x1="0" y1="-25.4" x2="-12.7" y2="-25.4" width="0.254" layer="94"/>
+<wire x1="-12.7" y1="-25.4" x2="-12.7" y2="2.54" width="0.254" layer="94"/>
+<wire x1="-12.7" y1="2.54" x2="0" y2="2.54" width="0.254" layer="94"/>
+<pin name="D+/3" x="5.08" y="-5.08" length="middle" rot="R180"/>
+<pin name="D-/2" x="5.08" y="-2.54" length="middle" rot="R180"/>
+<pin name="GND/5" x="5.08" y="-10.16" length="middle" rot="R180"/>
+<pin name="ID/4" x="5.08" y="-7.62" length="middle" rot="R180"/>
+<pin name="SHLD0" x="5.08" y="-15.24" visible="pin" length="middle" rot="R180"/>
+<pin name="SHLD1" x="5.08" y="-17.78" visible="pin" length="middle" rot="R180"/>
+<pin name="SHLD2" x="5.08" y="-20.32" visible="pin" length="middle" rot="R180"/>
+<pin name="SHLD3" x="5.08" y="-22.86" visible="pin" length="middle" rot="R180"/>
+<pin name="VBUS/1" x="5.08" y="0" length="middle" rot="R180"/>
+<text x="-0.4082" y="-26.0474" size="1.6764" layer="95" rot="R180">&gt;NAME</text>
+</symbol>
+<symbol name="FRAMES_A4L-LOC">
+<wire x1="256.54" y1="3.81" x2="256.54" y2="8.89" width="0.1016" layer="94"/>
+<wire x1="256.54" y1="8.89" x2="256.54" y2="13.97" width="0.1016" layer="94"/>
+<wire x1="256.54" y1="13.97" x2="256.54" y2="19.05" width="0.1016" layer="94"/>
+<wire x1="256.54" y1="19.05" x2="256.54" y2="24.13" width="0.1016" layer="94"/>
+<wire x1="161.29" y1="3.81" x2="161.29" y2="24.13" width="0.1016" layer="94"/>
+<wire x1="161.29" y1="24.13" x2="215.265" y2="24.13" width="0.1016" layer="94"/>
+<wire x1="215.265" y1="24.13" x2="256.54" y2="24.13" width="0.1016" layer="94"/>
+<wire x1="246.38" y1="3.81" x2="246.38" y2="8.89" width="0.1016" layer="94"/>
+<wire x1="246.38" y1="8.89" x2="256.54" y2="8.89" width="0.1016" layer="94"/>
+<wire x1="246.38" y1="8.89" x2="215.265" y2="8.89" width="0.1016" layer="94"/>
+<wire x1="215.265" y1="8.89" x2="215.265" y2="3.81" width="0.1016" layer="94"/>
+<wire x1="215.265" y1="8.89" x2="215.265" y2="13.97" width="0.1016" layer="94"/>
+<wire x1="215.265" y1="13.97" x2="256.54" y2="13.97" width="0.1016" layer="94"/>
+<wire x1="215.265" y1="13.97" x2="215.265" y2="19.05" width="0.1016" layer="94"/>
+<wire x1="215.265" y1="19.05" x2="256.54" y2="19.05" width="0.1016" layer="94"/>
+<wire x1="215.265" y1="19.05" x2="215.265" y2="24.13" width="0.1016" layer="94"/>
+<text x="217.17" y="15.24" size="2.54" layer="94" font="vector">&gt;DRAWING_NAME</text>
+<text x="217.17" y="10.16" size="2.286" layer="94" font="vector">&gt;LAST_DATE_TIME</text>
+<text x="230.505" y="5.08" size="2.54" layer="94" font="vector">&gt;SHEET</text>
+<text x="216.916" y="4.953" size="2.54" layer="94" font="vector">Sheet:</text>
+<frame x1="0" y1="0" x2="260.35" y2="179.07" columns="6" rows="4" layer="94"/>
+</symbol>
+<symbol name="SUPPLY1_+3V3">
+<wire x1="1.27" y1="-1.905" x2="0" y2="0" width="0.254" layer="94"/>
+<wire x1="0" y1="0" x2="-1.27" y2="-1.905" width="0.254" layer="94"/>
+<pin name="+3V3" x="0" y="-2.54" visible="off" length="short" direction="sup" rot="R90"/>
+<text x="-2.54" y="-5.08" size="1.778" layer="96" rot="R90">&gt;VALUE</text>
+</symbol>
+<symbol name="SUPPLY1_VDD">
+<wire x1="1.27" y1="-1.905" x2="0" y2="0" width="0.254" layer="94"/>
+<wire x1="0" y1="0" x2="-1.27" y2="-1.905" width="0.254" layer="94"/>
+<wire x1="0" y1="1.27" x2="-1.27" y2="-1.905" width="0.254" layer="94"/>
+<wire x1="1.27" y1="-1.905" x2="0" y2="1.27" width="0.254" layer="94"/>
+<pin name="VDD" x="0" y="-2.54" visible="off" length="short" direction="sup" rot="R90"/>
+<text x="-2.54" y="-2.54" size="1.778" layer="96" rot="R90">&gt;VALUE</text>
+</symbol>
+<symbol name="SUPPLY2_GND">
+<wire x1="-1.27" y1="0" x2="1.27" y2="0" width="0.254" layer="94"/>
+<wire x1="1.27" y1="0" x2="0" y2="-1.27" width="0.254" layer="94"/>
+<wire x1="0" y1="-1.27" x2="-1.27" y2="0" width="0.254" layer="94"/>
+<pin name="GND" x="0" y="2.54" visible="off" length="short" direction="sup" rot="R270"/>
+<text x="-1.905" y="-3.175" size="1.778" layer="96">&gt;VALUE</text>
+</symbol>
+</symbols>
+<devicesets>
+<deviceset name="--MERGED_74XX244-OCTAL-TRISTATE-BUFFERS" prefix="IC">
+<gates>
+<gate name="G$1" symbol="--MERGED_74XX244-OCTAL-TRISTATE-BUFFERS" x="-10.16" y="-10.16"/>
+</gates>
+<devices>
+<device name="" package="--MERGED_TSSOP-20">
+<connects>
+<connect gate="G$1" pin="1A1" pad="2"/>
+<connect gate="G$1" pin="1A2" pad="4"/>
+<connect gate="G$1" pin="1A3" pad="6"/>
+<connect gate="G$1" pin="1A4" pad="8"/>
+<connect gate="G$1" pin="1NOE" pad="1"/>
+<connect gate="G$1" pin="1Y1" pad="18"/>
+<connect gate="G$1" pin="1Y2" pad="16"/>
+<connect gate="G$1" pin="1Y3" pad="14"/>
+<connect gate="G$1" pin="1Y4" pad="12"/>
+<connect gate="G$1" pin="2A1" pad="11"/>
+<connect gate="G$1" pin="2A2" pad="13"/>
+<connect gate="G$1" pin="2A3" pad="15"/>
+<connect gate="G$1" pin="2A4" pad="17"/>
+<connect gate="G$1" pin="2NOE" pad="19"/>
+<connect gate="G$1" pin="2Y1" pad="9"/>
+<connect gate="G$1" pin="2Y2" pad="7"/>
+<connect gate="G$1" pin="2Y3" pad="5"/>
+<connect gate="G$1" pin="2Y4" pad="3"/>
+<connect gate="G$1" pin="VDD" pad="20"/>
+<connect gate="G$1" pin="VSS" pad="10"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+</devices>
+</deviceset>
+<deviceset name="--MERGED_AT91SAM7S64" prefix="IC">
+<gates>
+<gate name="G$1" symbol="--MERGED_AT91SAM7S64" x="30.48" y="2.54"/>
+</gates>
+<devices>
+<device name="" package="--MERGED_LQFP-64">
+<connects>
+<connect gate="G$1" pin="AD4" pad="3"/>
+<connect gate="G$1" pin="AD5" pad="4"/>
+<connect gate="G$1" pin="AD6" pad="5"/>
+<connect gate="G$1" pin="AD7" pad="6"/>
+<connect gate="G$1" pin="ADVREF" pad="1"/>
+<connect gate="G$1" pin="DDM" pad="56"/>
+<connect gate="G$1" pin="DDP" pad="57"/>
+<connect gate="G$1" pin="ERASE" pad="55"/>
+<connect gate="G$1" pin="GND0" pad="2"/>
+<connect gate="G$1" pin="GND1" pad="17"/>
+<connect gate="G$1" pin="GND2" pad="46"/>
+<connect gate="G$1" pin="GND3" pad="60"/>
+<connect gate="G$1" pin="JTAGSEL" pad="50"/>
+<connect gate="G$1" pin="NRST" pad="39"/>
+<connect gate="G$1" pin="PA0" pad="48"/>
+<connect gate="G$1" pin="PA1" pad="47"/>
+<connect gate="G$1" pin="PA10" pad="29"/>
+<connect gate="G$1" pin="PA11" pad="28"/>
+<connect gate="G$1" pin="PA12" pad="27"/>
+<connect gate="G$1" pin="PA13" pad="22"/>
+<connect gate="G$1" pin="PA14" pad="21"/>
+<connect gate="G$1" pin="PA15" pad="20"/>
+<connect gate="G$1" pin="PA16" pad="19"/>
+<connect gate="G$1" pin="PA17/AD0" pad="9"/>
+<connect gate="G$1" pin="PA18/AD1" pad="10"/>
+<connect gate="G$1" pin="PA19/AD2" pad="13"/>
+<connect gate="G$1" pin="PA2" pad="44"/>
+<connect gate="G$1" pin="PA20/AD3" pad="16"/>
+<connect gate="G$1" pin="PA21" pad="11"/>
+<connect gate="G$1" pin="PA22" pad="14"/>
+<connect gate="G$1" pin="PA23" pad="15"/>
+<connect gate="G$1" pin="PA24" pad="23"/>
+<connect gate="G$1" pin="PA25" pad="25"/>
+<connect gate="G$1" pin="PA26" pad="26"/>
+<connect gate="G$1" pin="PA27" pad="37"/>
+<connect gate="G$1" pin="PA28" pad="38"/>
+<connect gate="G$1" pin="PA29" pad="41"/>
+<connect gate="G$1" pin="PA3" pad="43"/>
+<connect gate="G$1" pin="PA30" pad="42"/>
+<connect gate="G$1" pin="PA31" pad="52"/>
+<connect gate="G$1" pin="PA4" pad="36"/>
+<connect gate="G$1" pin="PA5" pad="35"/>
+<connect gate="G$1" pin="PA6" pad="34"/>
+<connect gate="G$1" pin="PA7" pad="32"/>
+<connect gate="G$1" pin="PA8" pad="31"/>
+<connect gate="G$1" pin="PA9" pad="30"/>
+<connect gate="G$1" pin="PLLRC" pad="63"/>
+<connect gate="G$1" pin="TCK" pad="53"/>
+<connect gate="G$1" pin="TDI" pad="33"/>
+<connect gate="G$1" pin="TDO" pad="49"/>
+<connect gate="G$1" pin="TMS" pad="51"/>
+<connect gate="G$1" pin="TST" pad="40"/>
+<connect gate="G$1" pin="VDDCORE0" pad="12"/>
+<connect gate="G$1" pin="VDDCORE1" pad="24"/>
+<connect gate="G$1" pin="VDDCORE2" pad="54"/>
+<connect gate="G$1" pin="VDDFLASH" pad="59"/>
+<connect gate="G$1" pin="VDDIN" pad="7"/>
+<connect gate="G$1" pin="VDDIO0" pad="18"/>
+<connect gate="G$1" pin="VDDIO1" pad="45"/>
+<connect gate="G$1" pin="VDDIO2" pad="58"/>
+<connect gate="G$1" pin="VDDOUT" pad="8"/>
+<connect gate="G$1" pin="VDDPLL" pad="64"/>
+<connect gate="G$1" pin="XIN/PGMCK" pad="62"/>
+<connect gate="G$1" pin="XOUT" pad="61"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+</devices>
+</deviceset>
+<deviceset name="--MERGED_CAPACITOR" prefix="C" uservalue="yes">
+<gates>
+<gate name="G$1" symbol="--MERGED_CAPACITOR" x="2.54" y="0"/>
+</gates>
+<devices>
+<device name="0603" package="--MERGED_RLC_0603">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="0805" package="--MERGED_RLC_0805">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="1210" package="--MERGED_RLC_1210">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+</devices>
+</deviceset>
+<deviceset name="--MERGED_CAPACITOR-POLARIZED" prefix="C" uservalue="yes">
+<gates>
+<gate name="G$1" symbol="--MERGED_CAPACITOR-POLARIZED" x="0" y="0"/>
+</gates>
+<devices>
+<device name="ALCHIP-MZA-F80" package="--MERGED_CAPCAITOR-ELECTROLYTIC-ALCHIP-MZA-F80">
+<connects>
+<connect gate="G$1" pin="+" pad="+"/>
+<connect gate="G$1" pin="-" pad="-"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+</devices>
+</deviceset>
+<deviceset name="--MERGED_CD4066" prefix="IC">
+<gates>
+<gate name="G$1" symbol="--MERGED_CD4066-ANALOG-SWITCH" x="-15.24" y="0"/>
+</gates>
+<devices>
+<device name="" package="--MERGED_TSSOP-14">
+<connects>
+<connect gate="G$1" pin="A1" pad="1"/>
+<connect gate="G$1" pin="A2" pad="4"/>
+<connect gate="G$1" pin="A3" pad="8"/>
+<connect gate="G$1" pin="A4" pad="11"/>
+<connect gate="G$1" pin="B1" pad="2"/>
+<connect gate="G$1" pin="B2" pad="3"/>
+<connect gate="G$1" pin="B3" pad="9"/>
+<connect gate="G$1" pin="B4" pad="10"/>
+<connect gate="G$1" pin="C1" pad="13"/>
+<connect gate="G$1" pin="C2" pad="5"/>
+<connect gate="G$1" pin="C3" pad="6"/>
+<connect gate="G$1" pin="C4" pad="12"/>
+<connect gate="G$1" pin="VDD" pad="14"/>
+<connect gate="G$1" pin="VSS" pad="7"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+</devices>
+</deviceset>
+<deviceset name="--MERGED_COMP-TLV3502" prefix="IC">
+<gates>
+<gate name="A" symbol="--MERGED_OPAMP" x="0" y="12.7"/>
+<gate name="B" symbol="--MERGED_OPAMP" x="0" y="0"/>
+<gate name="P" symbol="--MERGED_POWER-PINS" x="-15.24" y="12.7"/>
+</gates>
+<devices>
+<device name="SOT-23-8" package="--MERGED_SOT-23-8">
+<connects>
+<connect gate="A" pin="+IN" pad="1"/>
+<connect gate="A" pin="-IN" pad="2"/>
+<connect gate="A" pin="OUT" pad="7"/>
+<connect gate="B" pin="+IN" pad="3"/>
+<connect gate="B" pin="-IN" pad="4"/>
+<connect gate="B" pin="OUT" pad="6"/>
+<connect gate="P" pin="V+" pad="8"/>
+<connect gate="P" pin="V-" pad="5"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="SOT-23-8-OR-MSOP-8" package="--MERGED_SOT-23-8-OR-MSOP-8">
+<connects>
+<connect gate="A" pin="+IN" pad="1"/>
+<connect gate="A" pin="-IN" pad="2"/>
+<connect gate="A" pin="OUT" pad="7"/>
+<connect gate="B" pin="+IN" pad="3"/>
+<connect gate="B" pin="-IN" pad="4"/>
+<connect gate="B" pin="OUT" pad="6"/>
+<connect gate="P" pin="V+" pad="8"/>
+<connect gate="P" pin="V-" pad="5"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+</devices>
+</deviceset>
+<deviceset name="--MERGED_DIODE-SMD-SOT23" prefix="D">
+<gates>
+<gate name="G$1" symbol="--MERGED_DIODE" x="2.54" y="0"/>
+</gates>
+<devices>
+<device name="" package="--MERGED_SOT23-3LEAD">
+<connects>
+<connect gate="G$1" pin="A" pad="1"/>
+<connect gate="G$1" pin="C" pad="3"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+</devices>
+</deviceset>
+<deviceset name="--MERGED_DUAL-TVS-COMMON-ANODE" prefix="D">
+<gates>
+<gate name="G$1" symbol="--MERGED_DUAL-TVS-COMMON-ANODE" x="0" y="0"/>
+</gates>
+<devices>
+<device name="" package="--MERGED_SOT23-3LEAD">
+<connects>
+<connect gate="G$1" pin="A" pad="3"/>
+<connect gate="G$1" pin="K1" pad="1"/>
+<connect gate="G$1" pin="K2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+</devices>
+</deviceset>
+<deviceset name="--MERGED_FERRITE" prefix="U">
+<gates>
+<gate name="G$1" symbol="--MERGED_FERRITE" x="-7.62" y="0"/>
+</gates>
+<devices>
+<device name="0603" package="--MERGED_RLC_0603">
+<connects>
+<connect gate="G$1" pin="A" pad="1"/>
+<connect gate="G$1" pin="B" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="0805" package="--MERGED_RLC_0805">
+<connects>
+<connect gate="G$1" pin="A" pad="1"/>
+<connect gate="G$1" pin="B" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="1210" package="--MERGED_RLC_1210">
+<connects>
+<connect gate="G$1" pin="A" pad="1"/>
+<connect gate="G$1" pin="B" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+</devices>
+</deviceset>
+<deviceset name="--MERGED_HCU-INVERTER" prefix="IC">
+<gates>
+<gate name="G$1" symbol="--MERGED_INVERTER" x="0" y="0"/>
+</gates>
+<devices>
+<device name="" package="--MERGED_SMV-5">
+<connects>
+<connect gate="G$1" pin="A" pad="2"/>
+<connect gate="G$1" pin="VDD" pad="5"/>
+<connect gate="G$1" pin="VSS" pad="3"/>
+<connect gate="G$1" pin="Y" pad="4"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+</devices>
+</deviceset>
+<deviceset name="--MERGED_HEADER-MALE-6X1" prefix="SV">
+<gates>
+<gate name="G$1" symbol="--MERGED_HEADER-MALE-6X1" x="0" y="-10.16"/>
+</gates>
+<devices>
+<device name="" package="--MERGED_HEADER-MALE-6X1-0.100-UNKEYED">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+<connect gate="G$1" pin="3" pad="3"/>
+<connect gate="G$1" pin="4" pad="4"/>
+<connect gate="G$1" pin="5" pad="5"/>
+<connect gate="G$1" pin="6" pad="6"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+</devices>
+</deviceset>
+<deviceset name="--MERGED_HEADER-MALE-10X2" prefix="SV" uservalue="yes">
+<gates>
+<gate name="G$1" symbol="--MERGED_HEADER-MALE-10X2" x="2.54" y="-2.54"/>
+</gates>
+<devices>
+<device name="" package="--MERGED_HEADER-MALE-10X2-0.100-SHROUDED">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="10" pad="10"/>
+<connect gate="G$1" pin="11" pad="11"/>
+<connect gate="G$1" pin="12" pad="12"/>
+<connect gate="G$1" pin="13" pad="13"/>
+<connect gate="G$1" pin="14" pad="14"/>
+<connect gate="G$1" pin="15" pad="15"/>
+<connect gate="G$1" pin="16" pad="16"/>
+<connect gate="G$1" pin="17" pad="17"/>
+<connect gate="G$1" pin="18" pad="18"/>
+<connect gate="G$1" pin="19" pad="19"/>
+<connect gate="G$1" pin="2" pad="2"/>
+<connect gate="G$1" pin="20" pad="20"/>
+<connect gate="G$1" pin="3" pad="3"/>
+<connect gate="G$1" pin="4" pad="4"/>
+<connect gate="G$1" pin="5" pad="5"/>
+<connect gate="G$1" pin="6" pad="6"/>
+<connect gate="G$1" pin="7" pad="7"/>
+<connect gate="G$1" pin="8" pad="8"/>
+<connect gate="G$1" pin="9" pad="9"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+</devices>
+</deviceset>
+<deviceset name="--MERGED_HIROSE-MQ172-4POS" prefix="SV">
+<gates>
+<gate name="G$1" symbol="--MERGED_4TERMSTRIP" x="0" y="0"/>
+</gates>
+<devices>
+<device name="" package="--MERGED_HIROSE-MQ172-4POS">
+<connects>
+<connect gate="G$1" pin="PIN1" pad="1"/>
+<connect gate="G$1" pin="PIN2" pad="2"/>
+<connect gate="G$1" pin="PIN3" pad="3"/>
+<connect gate="G$1" pin="PIN4" pad="4"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+</devices>
+</deviceset>
+<deviceset name="--MERGED_IRF7307" prefix="Q">
+<gates>
+<gate name="N" symbol="--MERGED_NFET" x="0" y="2.54"/>
+<gate name="P" symbol="--MERGED_PFET" x="10.16" y="0"/>
+</gates>
+<devices>
+<device name="" package="--MERGED_SOIC-8">
+<connects>
+<connect gate="N" pin="D" pad="8"/>
+<connect gate="N" pin="G" pad="2"/>
+<connect gate="N" pin="S" pad="1"/>
+<connect gate="P" pin="D" pad="6"/>
+<connect gate="P" pin="G" pad="4"/>
+<connect gate="P" pin="S" pad="3"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+</devices>
+</deviceset>
+<deviceset name="--MERGED_LED" prefix="D">
+<gates>
+<gate name="G$1" symbol="--MERGED_LED" x="0" y="0"/>
+</gates>
+<devices>
+<device name="" package="--MERGED_LED_0603">
+<connects>
+<connect gate="G$1" pin="A" pad="+"/>
+<connect gate="G$1" pin="C" pad="-"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+</devices>
+</deviceset>
+<deviceset name="--MERGED_LP2989-LDO" prefix="IC" uservalue="yes">
+<gates>
+<gate name="G$1" symbol="--MERGED_LP2989-LDO" x="0" y="-2.54"/>
+</gates>
+<devices>
+<device name="SOIC" package="--MERGED_SOIC-8">
+<connects>
+<connect gate="G$1" pin="/ERROR" pad="7"/>
+<connect gate="G$1" pin="/SHDN" pad="8"/>
+<connect gate="G$1" pin="BYP" pad="1"/>
+<connect gate="G$1" pin="GND" pad="3"/>
+<connect gate="G$1" pin="IN" pad="4"/>
+<connect gate="G$1" pin="OUT" pad="5"/>
+<connect gate="G$1" pin="SENSE" pad="6"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+</devices>
+</deviceset>
+<deviceset name="--MERGED_MCP100" prefix="IC">
+<gates>
+<gate name="G$1" symbol="--MERGED_RESET-GENERATOR-3TERM" x="2.54" y="7.62"/>
+</gates>
+<devices>
+<device name="" package="--MERGED_SOT23-3LEAD">
+<connects>
+<connect gate="G$1" pin="OUT" pad="1"/>
+<connect gate="G$1" pin="V+" pad="2"/>
+<connect gate="G$1" pin="V-" pad="3"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+</devices>
+</deviceset>
+<deviceset name="--MERGED_NPN-SOT23-2N3904" prefix="Q">
+<gates>
+<gate name="G$1" symbol="--MERGED_NPN-THIN-SYMBOL" x="0" y="0"/>
+</gates>
+<devices>
+<device name="" package="--MERGED_SOT23-3LEAD">
+<connects>
+<connect gate="G$1" pin="B" pad="1"/>
+<connect gate="G$1" pin="C" pad="3"/>
+<connect gate="G$1" pin="E" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+</devices>
+</deviceset>
+<deviceset name="--MERGED_OPAMP-AD8052" prefix="IC">
+<gates>
+<gate name="A" symbol="--MERGED_OPAMP" x="0" y="0"/>
+<gate name="B" symbol="--MERGED_OPAMP" x="0" y="-12.7"/>
+<gate name="P" symbol="--MERGED_POWER-PINS" x="-20.32" y="2.54"/>
+</gates>
+<devices>
+<device name="" package="--MERGED_MSOP8">
+<connects>
+<connect gate="A" pin="+IN" pad="3"/>
+<connect gate="A" pin="-IN" pad="2"/>
+<connect gate="A" pin="OUT" pad="1"/>
+<connect gate="B" pin="+IN" pad="5"/>
+<connect gate="B" pin="-IN" pad="6"/>
+<connect gate="B" pin="OUT" pad="7"/>
+<connect gate="P" pin="V+" pad="8"/>
+<connect gate="P" pin="V-" pad="4"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+</devices>
+</deviceset>
+<deviceset name="--MERGED_OPAMP-TLC2274" prefix="IC">
+<gates>
+<gate name="A" symbol="--MERGED_OPAMP" x="0" y="0"/>
+<gate name="B" symbol="--MERGED_OPAMP" x="0" y="-12.7"/>
+<gate name="C" symbol="--MERGED_OPAMP" x="0" y="-25.4"/>
+<gate name="D" symbol="--MERGED_OPAMP" x="0" y="-38.1"/>
+<gate name="P" symbol="--MERGED_POWER-PINS" x="-30.48" y="-2.54"/>
+</gates>
+<devices>
+<device name="" package="--MERGED_TSSOP-14">
+<connects>
+<connect gate="A" pin="+IN" pad="3"/>
+<connect gate="A" pin="-IN" pad="2"/>
+<connect gate="A" pin="OUT" pad="1"/>
+<connect gate="B" pin="+IN" pad="5"/>
+<connect gate="B" pin="-IN" pad="6"/>
+<connect gate="B" pin="OUT" pad="7"/>
+<connect gate="C" pin="+IN" pad="10"/>
+<connect gate="C" pin="-IN" pad="9"/>
+<connect gate="C" pin="OUT" pad="8"/>
+<connect gate="D" pin="+IN" pad="12"/>
+<connect gate="D" pin="-IN" pad="13"/>
+<connect gate="D" pin="OUT" pad="14"/>
+<connect gate="P" pin="V+" pad="4"/>
+<connect gate="P" pin="V-" pad="11"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+</devices>
+</deviceset>
+<deviceset name="--MERGED_PQ1X331M2ZP-3V3-LDO-SOT-23-5" prefix="IC">
+<gates>
+<gate name="G$1" symbol="--MERGED_PQ1X331M2ZP-3V3-REG" x="-17.78" y="-2.54"/>
+</gates>
+<devices>
+<device name="" package="--MERGED_SOT-23-5">
+<connects>
+<connect gate="G$1" pin="GND" pad="2"/>
+<connect gate="G$1" pin="NR" pad="4"/>
+<connect gate="G$1" pin="VC" pad="3"/>
+<connect gate="G$1" pin="VIN" pad="1"/>
+<connect gate="G$1" pin="VO" pad="5"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+</devices>
+</deviceset>
+<deviceset name="--MERGED_RELAY-DPDT" prefix="RLY">
+<gates>
+<gate name="A" symbol="--MERGED_RELAY-NO-NC" x="-7.62" y="2.54"/>
+<gate name="B" symbol="--MERGED_RELAY-NO-NC" x="10.16" y="2.54"/>
+<gate name="L" symbol="--MERGED_RELAY-COIL" x="-2.54" y="17.78"/>
+</gates>
+<devices>
+<device name="" package="--MERGED_TQ-SMD-RELAY">
+<connects>
+<connect gate="A" pin="COM" pad="8"/>
+<connect gate="A" pin="NC" pad="9"/>
+<connect gate="A" pin="NO" pad="7"/>
+<connect gate="B" pin="COM" pad="3"/>
+<connect gate="B" pin="NC" pad="2"/>
+<connect gate="B" pin="NO" pad="4"/>
+<connect gate="L" pin="P$1" pad="1"/>
+<connect gate="L" pin="P$2" pad="10"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+</devices>
+</deviceset>
+<deviceset name="--MERGED_RESISTOR" prefix="R" uservalue="yes">
+<gates>
+<gate name="G$1" symbol="--MERGED_RESISTOR" x="-5.08" y="0"/>
+</gates>
+<devices>
+<device name="0603" package="--MERGED_RLC_0603">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="0805" package="--MERGED_RLC_0805">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="1210" package="--MERGED_RLC_1210">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="2512" package="--MERGED_2512">
+<connects>
+<connect gate="G$1" pin="1" pad="P$1"/>
+<connect gate="G$1" pin="2" pad="P$2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+</devices>
+</deviceset>
+<deviceset name="--MERGED_SPARTAN-II-XC2S30-100-VQFP" prefix="IC">
+<gates>
+<gate name="G$1" symbol="--MERGED_SPARTAN-II-XC2S30-100-VQFP" x="0" y="0"/>
+</gates>
+<devices>
+<device name="" package="--MERGED_VQFP-100">
+<connects>
+<connect gate="G$1" pin="/PROGRAM" pad="51"/>
+<connect gate="G$1" pin="CCLK" pad="75"/>
+<connect gate="G$1" pin="DIN" pad="73"/>
+<connect gate="G$1" pin="DONE" pad="49"/>
+<connect gate="G$1" pin="DOUT" pad="74"/>
+<connect gate="G$1" pin="GND1" pad="1"/>
+<connect gate="G$1" pin="GND2" pad="11"/>
+<connect gate="G$1" pin="GND3" pad="38"/>
+<connect gate="G$1" pin="GND4" pad="78"/>
+<connect gate="G$1" pin="GND5" pad="89"/>
+<connect gate="G$1" pin="GND6" pad="48"/>
+<connect gate="G$1" pin="GND7" pad="64"/>
+<connect gate="G$1" pin="GND8" pad="24"/>
+<connect gate="G$1" pin="M0" pad="25"/>
+<connect gate="G$1" pin="M1" pad="23"/>
+<connect gate="G$1" pin="M2" pad="27"/>
+<connect gate="G$1" pin="NC0" pad="28"/>
+<connect gate="G$1" pin="NC1" pad="29"/>
+<connect gate="G$1" pin="P10_IO7" pad="10"/>
+<connect gate="G$1" pin="P13_IO6" pad="13"/>
+<connect gate="G$1" pin="P15_IO6" pad="15"/>
+<connect gate="G$1" pin="P16_IOV6" pad="16"/>
+<connect gate="G$1" pin="P17_IO6" pad="17"/>
+<connect gate="G$1" pin="P18_IO6" pad="18"/>
+<connect gate="G$1" pin="P19_IO6" pad="19"/>
+<connect gate="G$1" pin="P20_IOV6" pad="20"/>
+<connect gate="G$1" pin="P21_IO6" pad="21"/>
+<connect gate="G$1" pin="P22_IO6" pad="22"/>
+<connect gate="G$1" pin="P30_IOV5" pad="30"/>
+<connect gate="G$1" pin="P31_IO5" pad="31"/>
+<connect gate="G$1" pin="P32_IO5" pad="32"/>
+<connect gate="G$1" pin="P34_IOV5" pad="34"/>
+<connect gate="G$1" pin="P36_IGCK5" pad="36"/>
+<connect gate="G$1" pin="P39_IGCK4" pad="39"/>
+<connect gate="G$1" pin="P3_IO7" pad="3"/>
+<connect gate="G$1" pin="P40_IO4" pad="40"/>
+<connect gate="G$1" pin="P41_IOV4" pad="41"/>
+<connect gate="G$1" pin="P43_IO4" pad="43"/>
+<connect gate="G$1" pin="P44_IO4" pad="44"/>
+<connect gate="G$1" pin="P45_IOV4" pad="45"/>
+<connect gate="G$1" pin="P46_IO4" pad="46"/>
+<connect gate="G$1" pin="P47_IO4" pad="47"/>
+<connect gate="G$1" pin="P4_IOV7" pad="4"/>
+<connect gate="G$1" pin="P52_IO3" pad="52"/>
+<connect gate="G$1" pin="P53_IO3" pad="53"/>
+<connect gate="G$1" pin="P54_IOV3" pad="54"/>
+<connect gate="G$1" pin="P55_IO3" pad="55"/>
+<connect gate="G$1" pin="P56_IO3" pad="56"/>
+<connect gate="G$1" pin="P57_IO3" pad="57"/>
+<connect gate="G$1" pin="P58_IO3" pad="58"/>
+<connect gate="G$1" pin="P59_IOV3" pad="59"/>
+<connect gate="G$1" pin="P5_IO7" pad="5"/>
+<connect gate="G$1" pin="P60_IO3" pad="60"/>
+<connect gate="G$1" pin="P62_IO3" pad="62"/>
+<connect gate="G$1" pin="P65_IO2" pad="65"/>
+<connect gate="G$1" pin="P66_IO2" pad="66"/>
+<connect gate="G$1" pin="P67_IOV2" pad="67"/>
+<connect gate="G$1" pin="P68_IO2" pad="68"/>
+<connect gate="G$1" pin="P69_IO2" pad="69"/>
+<connect gate="G$1" pin="P6_IO7" pad="6"/>
+<connect gate="G$1" pin="P70_IO2" pad="70"/>
+<connect gate="G$1" pin="P71_IO2" pad="71"/>
+<connect gate="G$1" pin="P72_IOV2" pad="72"/>
+<connect gate="G$1" pin="P7_IO7" pad="7"/>
+<connect gate="G$1" pin="P80_IO1" pad="80"/>
+<connect gate="G$1" pin="P81_IO1" pad="81"/>
+<connect gate="G$1" pin="P82_IOV1" pad="82"/>
+<connect gate="G$1" pin="P83_IO1" pad="83"/>
+<connect gate="G$1" pin="P84_IO1" pad="84"/>
+<connect gate="G$1" pin="P86_IOV1" pad="86"/>
+<connect gate="G$1" pin="P87_IO1" pad="87"/>
+<connect gate="G$1" pin="P88_IGCK1" pad="88"/>
+<connect gate="G$1" pin="P8_IOV7" pad="8"/>
+<connect gate="G$1" pin="P91_IGCK0" pad="91"/>
+<connect gate="G$1" pin="P93_IOV0" pad="93"/>
+<connect gate="G$1" pin="P95_IO0" pad="95"/>
+<connect gate="G$1" pin="P96_IO0" pad="96"/>
+<connect gate="G$1" pin="P97_IOV0" pad="97"/>
+<connect gate="G$1" pin="P98_IO0" pad="98"/>
+<connect gate="G$1" pin="P9_IO7" pad="9"/>
+<connect gate="G$1" pin="TCK" pad="99"/>
+<connect gate="G$1" pin="TDI" pad="79"/>
+<connect gate="G$1" pin="TDO" pad="77"/>
+<connect gate="G$1" pin="TMS" pad="2"/>
+<connect gate="G$1" pin="VCCINT1" pad="61"/>
+<connect gate="G$1" pin="VCCINT2" pad="92"/>
+<connect gate="G$1" pin="VCCINT3" pad="85"/>
+<connect gate="G$1" pin="VCCINT4" pad="94"/>
+<connect gate="G$1" pin="VCCINT5" pad="14"/>
+<connect gate="G$1" pin="VCCINT6" pad="33"/>
+<connect gate="G$1" pin="VCCINT7" pad="35"/>
+<connect gate="G$1" pin="VCCINT8" pad="42"/>
+<connect gate="G$1" pin="VCCO_B07" pad="100"/>
+<connect gate="G$1" pin="VCCO_B10" pad="90"/>
+<connect gate="G$1" pin="VCCO_B21" pad="76"/>
+<connect gate="G$1" pin="VCCO_B32" pad="63"/>
+<connect gate="G$1" pin="VCCO_B43" pad="50"/>
+<connect gate="G$1" pin="VCCO_B54" pad="37"/>
+<connect gate="G$1" pin="VCCO_B65" pad="26"/>
+<connect gate="G$1" pin="VCCO_B76" pad="12"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+</devices>
+</deviceset>
+<deviceset name="--MERGED_SUPPLY_2V5" prefix="V">
+<gates>
+<gate name="G$1" symbol="--MERGED_SUPPLY_+2V5" x="0" y="0"/>
+</gates>
+<devices>
+<device name="">
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+</devices>
+</deviceset>
+<deviceset name="--MERGED_SUPPLY_VMID" prefix="V">
+<gates>
+<gate name="G$1" symbol="--MERGED_SUPPLY_VMID" x="0" y="0"/>
+</gates>
+<devices>
+<device name="">
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+</devices>
+</deviceset>
+<deviceset name="--MERGED_TACTSWITCH" prefix="SW">
+<gates>
+<gate name="G$1" symbol="--MERGED_TACTSWITCH" x="-10.16" y="5.08"/>
+</gates>
+<devices>
+<device name="" package="--MERGED_TACTSWITCH-SMD-EVQQ1">
+<connects>
+<connect gate="G$1" pin="P$1" pad="A"/>
+<connect gate="G$1" pin="P$2" pad="B"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="THROUGHHOLE" package="--MERGED_TACTSWITCH">
+<connects>
+<connect gate="G$1" pin="P$1" pad="P$1"/>
+<connect gate="G$1" pin="P$2" pad="P$2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+</devices>
+</deviceset>
+<deviceset name="--MERGED_TESTPAD" prefix="TP">
+<gates>
+<gate name="G$1" symbol="--MERGED_TESTPAD" x="0" y="2.54"/>
+</gates>
+<devices>
+<device name="0.7MM-ROUND-DRILLED" package="--MERGED_TESTPAD-PTH-0.7MM">
+<connects>
+<connect gate="G$1" pin="P$1" pad="1"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="0.200&quot;-SQUARE" package="--MERGED_SQUARE-PAD-0.200-INCH">
+<connects>
+<connect gate="G$1" pin="P$1" pad="1"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="KEYSTONE-PTH" package="--MERGED_KEYSTONE-PTH-TESTPOINT-5011">
+<connects>
+<connect gate="G$1" pin="P$1" pad="A"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="KEYSTONE-SMD" package="--MERGED_KEYSTONE-SMD-TESTPOINT-5015">
+<connects>
+<connect gate="G$1" pin="P$1" pad="1"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+</devices>
+</deviceset>
+<deviceset name="--MERGED_TLC5540" prefix="IC">
+<gates>
+<gate name="G$1" symbol="--MERGED_TLC5540" x="0" y="0"/>
+</gates>
+<devices>
+<device name="" package="--MERGED_TSSOP-24">
+<connects>
+<connect gate="G$1" pin="AGND0" pad="20"/>
+<connect gate="G$1" pin="AGND1" pad="21"/>
+<connect gate="G$1" pin="ANALOGIN" pad="19"/>
+<connect gate="G$1" pin="CLK" pad="12"/>
+<connect gate="G$1" pin="D1" pad="3"/>
+<connect gate="G$1" pin="D2" pad="4"/>
+<connect gate="G$1" pin="D3" pad="5"/>
+<connect gate="G$1" pin="D4" pad="6"/>
+<connect gate="G$1" pin="D5" pad="7"/>
+<connect gate="G$1" pin="D6" pad="8"/>
+<connect gate="G$1" pin="D7" pad="9"/>
+<connect gate="G$1" pin="DGND0" pad="2"/>
+<connect gate="G$1" pin="DGND1" pad="24"/>
+<connect gate="G$1" pin="MSB-D8" pad="10"/>
+<connect gate="G$1" pin="NOE" pad="1"/>
+<connect gate="G$1" pin="REFB" pad="23"/>
+<connect gate="G$1" pin="REFBS" pad="22"/>
+<connect gate="G$1" pin="REFT" pad="17"/>
+<connect gate="G$1" pin="REFTS" pad="16"/>
+<connect gate="G$1" pin="VDDA0" pad="14"/>
+<connect gate="G$1" pin="VDDA1" pad="15"/>
+<connect gate="G$1" pin="VDDA2" pad="18"/>
+<connect gate="G$1" pin="VDDD0" pad="11"/>
+<connect gate="G$1" pin="VDDD1" pad="13"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+</devices>
+</deviceset>
+<deviceset name="--MERGED_USB-MINIB" prefix="SV">
+<gates>
+<gate name="G$1" symbol="--MERGED_USB-MINIB" x="0" y="-2.54"/>
+</gates>
+<devices>
+<device name="" package="--MERGED_USB-MINIB-SMD">
+<connects>
+<connect gate="G$1" pin="D+/3" pad="3"/>
+<connect gate="G$1" pin="D-/2" pad="2"/>
+<connect gate="G$1" pin="GND/5" pad="5"/>
+<connect gate="G$1" pin="ID/4" pad="4"/>
+<connect gate="G$1" pin="SHLD0" pad="TAB0"/>
+<connect gate="G$1" pin="SHLD1" pad="TAB1"/>
+<connect gate="G$1" pin="SHLD2" pad="TAB2"/>
+<connect gate="G$1" pin="SHLD3" pad="TAB3"/>
+<connect gate="G$1" pin="VBUS/1" pad="1"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+</devices>
+</deviceset>
+<deviceset name="--MERGED_XTAL-SMD-CITIZEN-CS10" prefix="XT">
+<gates>
+<gate name="G$1" symbol="--MERGED_CRYSTAL" x="-10.16" y="2.54"/>
+</gates>
+<devices>
+<device name="" package="--MERGED_XTAL-SMD-CITIZEN-CS10">
+<connects>
+<connect gate="G$1" pin="A" pad="A"/>
+<connect gate="G$1" pin="B" pad="B"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+</devices>
+</deviceset>
+<deviceset name="FRAMES_A4L-LOC" prefix="FRAME" uservalue="yes">
+<description>&lt;b&gt;FRAME&lt;/b&gt;&lt;p&gt;
+DIN A4, landscape with location and doc. field</description>
+<gates>
+<gate name="G$1" symbol="FRAMES_A4L-LOC" x="0" y="0"/>
+</gates>
+<devices>
+<device name="">
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+</devices>
+</deviceset>
+<deviceset name="SUPPLY1_+3V3" prefix="+3V3">
+<description>&lt;b&gt;SUPPLY SYMBOL&lt;/b&gt;</description>
+<gates>
+<gate name="G$1" symbol="SUPPLY1_+3V3" x="0" y="0"/>
+</gates>
+<devices>
+<device name="">
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+</devices>
+</deviceset>
+<deviceset name="SUPPLY1_VDD" prefix="VDD">
+<description>&lt;b&gt;SUPPLY SYMBOL&lt;/b&gt;</description>
+<gates>
+<gate name="G$1" symbol="SUPPLY1_VDD" x="0" y="0"/>
+</gates>
+<devices>
+<device name="">
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+</devices>
+</deviceset>
+<deviceset name="SUPPLY2_GND" prefix="SUPPLY">
+<description>&lt;b&gt;SUPPLY SYMBOL&lt;/b&gt;</description>
+<gates>
+<gate name="GND" symbol="SUPPLY2_GND" x="0" y="0"/>
+</gates>
+<devices>
+<device name="">
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+</devices>
+</deviceset>
+</devicesets>
+</library>
+</drawing>
+</eagle>
diff --git a/pcb/proxmark3_fix/CAM/README.txt b/pcb/proxmark3_fix/CAM/README.txt
new file mode 100644 (file)
index 0000000..dce98bf
--- /dev/null
@@ -0,0 +1,35 @@
+
+project: proxmark3-00
+
+    * please make 18 boards
+    * panelize 3x1 (for total 6 panels)
+    * 0.062" finished thickness
+    * FR-4
+    * solder mask top and bottom
+    * silkscreen legend top
+    * either 1 ounce or 0.5 ounce copper acceptable (1 ounce preferred)
+
+Layer stackup:
+
+Top layer: *.GTL
+Inner Layer 1: *.GL1 (for 4-layer board)
+Inner Layer 2: *.GL2 (for 4-layer board)
+Bottom layer: *.GBL
+Solder Stop Mask top: *.GTS
+Solder Stop Mask Bottom: *.GBS
+Silk Top: *.GTO
+Silk Bottom: *.GBO
+NC Drill: *.TXT
+Outline layer: *.GKO or *.DO
+
+Note:
+ All the gerber files in RS-274x format, except the drill file in Excellon format. 
+
+
+
+Ship to
+
+<my shipping address>
+
+<my email address>
+
diff --git a/pcb/proxmark3_fix/CAM/proxmark3.GBL b/pcb/proxmark3_fix/CAM/proxmark3.GBL
new file mode 100644 (file)
index 0000000..5a0e4e2
--- /dev/null
@@ -0,0 +1,10632 @@
+G75*
+G70*
+%OFA0B0*%
+%FSLAX24Y24*%
+%IPPOS*%
+%LPD*%
+%AMOC8*
+5,1,8,0,0,1.08239X$1,22.5*
+%
+%ADD10C,0.0010*%
+%ADD11C,0.0090*%
+%ADD12C,0.0110*%
+%ADD13C,0.0000*%
+%ADD14R,0.0675X0.0675*%
+%ADD15C,0.0675*%
+%ADD16C,0.0945*%
+%ADD17C,0.0317*%
+%ADD18C,0.1575*%
+%ADD19C,0.0080*%
+%ADD20C,0.0240*%
+%ADD21C,0.0160*%
+D10*
+X000450Y000105D02*
+X032450Y000105D01*
+X032450Y020305D01*
+X000450Y020305D01*
+X000450Y000105D01*
+D11*
+X027978Y000868D02*
+X028047Y000800D01*
+X028184Y000800D01*
+X028252Y000868D01*
+X028431Y000800D02*
+X028636Y000937D01*
+X028431Y001074D01*
+X028252Y001142D02*
+X028184Y001210D01*
+X028047Y001210D01*
+X027978Y001142D01*
+X027978Y001074D01*
+X028047Y001005D01*
+X027978Y000937D01*
+X027978Y000868D01*
+X028047Y001005D02*
+X028115Y001005D01*
+X028636Y000800D02*
+X028636Y001210D01*
+X028814Y001074D02*
+X028883Y001074D01*
+X029019Y000937D01*
+X029019Y000800D02*
+X029019Y001074D01*
+X029206Y001005D02*
+X029206Y000800D01*
+X029411Y000800D01*
+X029480Y000868D01*
+X029411Y000937D01*
+X029206Y000937D01*
+X029206Y001005D02*
+X029275Y001074D01*
+X029411Y001074D01*
+X029667Y001005D02*
+X029667Y000800D01*
+X029803Y000800D02*
+X029803Y001005D01*
+X029735Y001074D01*
+X029667Y001005D01*
+X029803Y001005D02*
+X029872Y001074D01*
+X029940Y001074D01*
+X029940Y000800D01*
+X030127Y000800D02*
+X030401Y001074D01*
+X030587Y001005D02*
+X030656Y001074D01*
+X030793Y001074D01*
+X030861Y001005D01*
+X030861Y000868D01*
+X030793Y000800D01*
+X030656Y000800D01*
+X030587Y000868D01*
+X030587Y001005D01*
+X030401Y000800D02*
+X030127Y001074D01*
+X031039Y001074D02*
+X031108Y001074D01*
+X031245Y000937D01*
+X031245Y000800D02*
+X031245Y001074D01*
+X031431Y001005D02*
+X031431Y000868D01*
+X031500Y000800D01*
+X031705Y000800D01*
+X031705Y000663D02*
+X031705Y001074D01*
+X031500Y001074D01*
+X031431Y001005D01*
+X020355Y017900D02*
+X020150Y017900D01*
+X020081Y017968D01*
+X020081Y018105D01*
+X020150Y018174D01*
+X020355Y018174D01*
+X020355Y018310D02*
+X020355Y017900D01*
+X019895Y017968D02*
+X019895Y018105D01*
+X019826Y018174D01*
+X019689Y018174D01*
+X019621Y018105D01*
+X019621Y017968D01*
+X019689Y017900D01*
+X019826Y017900D01*
+X019895Y017968D01*
+X019434Y018174D02*
+X019297Y018174D01*
+X019366Y018242D02*
+X019366Y017968D01*
+X019297Y017900D01*
+X019059Y017968D02*
+X019059Y018242D01*
+X019127Y018174D02*
+X018991Y018174D01*
+X018820Y018105D02*
+X018820Y017968D01*
+X018752Y017900D01*
+X018615Y017900D01*
+X018547Y017968D01*
+X018547Y018105D01*
+X018615Y018174D01*
+X018752Y018174D01*
+X018820Y018105D01*
+X018991Y017900D02*
+X019059Y017968D01*
+X018360Y017900D02*
+X018360Y018174D01*
+X018292Y018174D01*
+X018223Y018105D01*
+X018155Y018174D01*
+X018086Y018105D01*
+X018086Y017900D01*
+X018223Y017900D02*
+X018223Y018105D01*
+X005405Y019368D02*
+X005337Y019300D01*
+X005268Y019300D01*
+X005200Y019368D01*
+X005200Y019710D01*
+X005268Y019710D02*
+X005131Y019710D01*
+X004945Y019368D02*
+X004876Y019368D01*
+X004876Y019300D01*
+X004945Y019300D01*
+X004945Y019368D01*
+X004254Y019300D02*
+X004117Y019437D01*
+X003980Y019300D01*
+X003980Y019710D01*
+X004254Y019710D02*
+X004254Y019300D01*
+X003794Y019368D02*
+X003794Y019505D01*
+X003725Y019574D01*
+X003588Y019574D01*
+X003520Y019505D01*
+X003520Y019437D01*
+X003794Y019437D01*
+X003794Y019368D02*
+X003725Y019300D01*
+X003588Y019300D01*
+X003333Y019300D02*
+X003128Y019300D01*
+X003060Y019368D01*
+X003128Y019437D01*
+X003265Y019437D01*
+X003333Y019505D01*
+X003265Y019574D01*
+X003060Y019574D01*
+X002873Y019574D02*
+X002736Y019574D01*
+X002804Y019642D02*
+X002804Y019368D01*
+X002736Y019300D01*
+X002566Y019300D02*
+X002566Y019710D01*
+X002498Y019574D02*
+X002361Y019574D01*
+X002292Y019505D01*
+X002292Y019300D01*
+X002106Y019368D02*
+X002037Y019300D01*
+X001832Y019300D01*
+X001832Y019574D01*
+X001645Y019505D02*
+X001577Y019574D01*
+X001440Y019574D01*
+X001372Y019505D01*
+X001372Y019437D01*
+X001645Y019437D01*
+X001645Y019505D02*
+X001645Y019368D01*
+X001577Y019300D01*
+X001440Y019300D01*
+X001185Y019300D02*
+X000980Y019300D01*
+X000911Y019368D01*
+X000980Y019437D01*
+X001116Y019437D01*
+X001185Y019505D01*
+X001116Y019574D01*
+X000911Y019574D01*
+X002106Y019574D02*
+X002106Y019368D01*
+X002498Y019574D02*
+X002566Y019505D01*
+D12*
+X035779Y020160D02*
+X035779Y020751D01*
+X035975Y020554D01*
+X036172Y020751D01*
+X036172Y020160D01*
+X036423Y020258D02*
+X036423Y020652D01*
+X036522Y020751D01*
+X036718Y020751D01*
+X036817Y020652D01*
+X036817Y020258D01*
+X036718Y020160D01*
+X036522Y020160D01*
+X036423Y020258D01*
+X037068Y020751D02*
+X037461Y020751D01*
+X037265Y020751D02*
+X037265Y020160D01*
+X037909Y020160D02*
+X037909Y020751D01*
+X038106Y020751D02*
+X037712Y020751D01*
+X038357Y020652D02*
+X038357Y020258D01*
+X038455Y020160D01*
+X038652Y020160D01*
+X038750Y020258D01*
+X038750Y020652D01*
+X038652Y020751D01*
+X038455Y020751D01*
+X038357Y020652D01*
+X039001Y020652D02*
+X039001Y020554D01*
+X039100Y020455D01*
+X039395Y020455D01*
+X039395Y020160D02*
+X039100Y020160D01*
+X039001Y020258D01*
+X039001Y020357D01*
+X039100Y020455D01*
+X039001Y020652D02*
+X039100Y020751D01*
+X039395Y020751D01*
+X039395Y020160D01*
+D13*
+X002703Y018022D02*
+X002705Y018048D01*
+X002711Y018074D01*
+X002721Y018099D01*
+X002734Y018122D01*
+X002750Y018142D01*
+X002770Y018160D01*
+X002792Y018175D01*
+X002815Y018187D01*
+X002841Y018195D01*
+X002867Y018199D01*
+X002893Y018199D01*
+X002919Y018195D01*
+X002945Y018187D01*
+X002969Y018175D01*
+X002990Y018160D01*
+X003010Y018142D01*
+X003026Y018122D01*
+X003039Y018099D01*
+X003049Y018074D01*
+X003055Y018048D01*
+X003057Y018022D01*
+X003055Y017996D01*
+X003049Y017970D01*
+X003039Y017945D01*
+X003026Y017922D01*
+X003010Y017902D01*
+X002990Y017884D01*
+X002968Y017869D01*
+X002945Y017857D01*
+X002919Y017849D01*
+X002893Y017845D01*
+X002867Y017845D01*
+X002841Y017849D01*
+X002815Y017857D01*
+X002791Y017869D01*
+X002770Y017884D01*
+X002750Y017902D01*
+X002734Y017922D01*
+X002721Y017945D01*
+X002711Y017970D01*
+X002705Y017996D01*
+X002703Y018022D01*
+X002703Y016644D02*
+X002705Y016670D01*
+X002711Y016696D01*
+X002721Y016721D01*
+X002734Y016744D01*
+X002750Y016764D01*
+X002770Y016782D01*
+X002792Y016797D01*
+X002815Y016809D01*
+X002841Y016817D01*
+X002867Y016821D01*
+X002893Y016821D01*
+X002919Y016817D01*
+X002945Y016809D01*
+X002969Y016797D01*
+X002990Y016782D01*
+X003010Y016764D01*
+X003026Y016744D01*
+X003039Y016721D01*
+X003049Y016696D01*
+X003055Y016670D01*
+X003057Y016644D01*
+X003055Y016618D01*
+X003049Y016592D01*
+X003039Y016567D01*
+X003026Y016544D01*
+X003010Y016524D01*
+X002990Y016506D01*
+X002968Y016491D01*
+X002945Y016479D01*
+X002919Y016471D01*
+X002893Y016467D01*
+X002867Y016467D01*
+X002841Y016471D01*
+X002815Y016479D01*
+X002791Y016491D01*
+X002770Y016506D01*
+X002750Y016524D01*
+X002734Y016544D01*
+X002721Y016567D01*
+X002711Y016592D01*
+X002705Y016618D01*
+X002703Y016644D01*
+X001720Y010046D02*
+X001722Y010073D01*
+X001728Y010100D01*
+X001737Y010126D01*
+X001750Y010150D01*
+X001766Y010173D01*
+X001785Y010192D01*
+X001807Y010209D01*
+X001831Y010223D01*
+X001856Y010233D01*
+X001883Y010240D01*
+X001910Y010243D01*
+X001938Y010242D01*
+X001965Y010237D01*
+X001991Y010229D01*
+X002015Y010217D01*
+X002038Y010201D01*
+X002059Y010183D01*
+X002076Y010162D01*
+X002091Y010138D01*
+X002102Y010113D01*
+X002110Y010087D01*
+X002114Y010060D01*
+X002114Y010032D01*
+X002110Y010005D01*
+X002102Y009979D01*
+X002091Y009954D01*
+X002076Y009930D01*
+X002059Y009909D01*
+X002038Y009891D01*
+X002016Y009875D01*
+X001991Y009863D01*
+X001965Y009855D01*
+X001938Y009850D01*
+X001910Y009849D01*
+X001883Y009852D01*
+X001856Y009859D01*
+X001831Y009869D01*
+X001807Y009883D01*
+X001785Y009900D01*
+X001766Y009919D01*
+X001750Y009942D01*
+X001737Y009966D01*
+X001728Y009992D01*
+X001722Y010019D01*
+X001720Y010046D01*
+X001720Y008864D02*
+X001722Y008891D01*
+X001728Y008918D01*
+X001737Y008944D01*
+X001750Y008968D01*
+X001766Y008991D01*
+X001785Y009010D01*
+X001807Y009027D01*
+X001831Y009041D01*
+X001856Y009051D01*
+X001883Y009058D01*
+X001910Y009061D01*
+X001938Y009060D01*
+X001965Y009055D01*
+X001991Y009047D01*
+X002015Y009035D01*
+X002038Y009019D01*
+X002059Y009001D01*
+X002076Y008980D01*
+X002091Y008956D01*
+X002102Y008931D01*
+X002110Y008905D01*
+X002114Y008878D01*
+X002114Y008850D01*
+X002110Y008823D01*
+X002102Y008797D01*
+X002091Y008772D01*
+X002076Y008748D01*
+X002059Y008727D01*
+X002038Y008709D01*
+X002016Y008693D01*
+X001991Y008681D01*
+X001965Y008673D01*
+X001938Y008668D01*
+X001910Y008667D01*
+X001883Y008670D01*
+X001856Y008677D01*
+X001831Y008687D01*
+X001807Y008701D01*
+X001785Y008718D01*
+X001766Y008737D01*
+X001750Y008760D01*
+X001737Y008784D01*
+X001728Y008810D01*
+X001722Y008837D01*
+X001720Y008864D01*
+D14*
+X017400Y018955D03*
+X029950Y018455D03*
+D15*
+X028950Y018455D03*
+X027950Y018455D03*
+X026950Y018455D03*
+X025950Y018455D03*
+X024950Y018455D03*
+X023950Y018455D03*
+X022950Y018455D03*
+X021950Y018455D03*
+X020950Y018455D03*
+X020950Y017455D03*
+X021950Y017455D03*
+X022950Y017455D03*
+X023950Y017455D03*
+X024950Y017455D03*
+X025950Y017455D03*
+X026950Y017455D03*
+X027950Y017455D03*
+X028950Y017455D03*
+X029950Y017455D03*
+X016400Y018955D03*
+X015400Y018955D03*
+X014400Y018955D03*
+X013400Y018955D03*
+X012400Y018955D03*
+D16*
+X020115Y015140D03*
+D17*
+X021150Y015355D03*
+X021850Y015105D03*
+X024200Y014805D03*
+X024600Y015105D03*
+X025950Y014705D03*
+X026650Y014655D03*
+X027900Y015105D03*
+X028700Y015355D03*
+X030150Y015755D03*
+X030550Y015955D03*
+X031150Y017355D03*
+X029500Y019405D03*
+X026900Y016705D03*
+X024750Y016605D03*
+X022950Y019255D03*
+X018700Y016155D03*
+X017750Y015555D03*
+X016900Y015205D03*
+X016200Y014355D03*
+X016900Y013855D03*
+X015950Y013105D03*
+X016850Y012855D03*
+X016450Y012355D03*
+X017400Y012455D03*
+X017600Y011355D03*
+X017650Y010755D03*
+X019350Y011055D03*
+X020650Y011405D03*
+X021100Y011055D03*
+X023100Y011005D03*
+X025000Y009705D03*
+X025600Y009605D03*
+X025900Y009905D03*
+X026900Y009855D03*
+X027900Y008855D03*
+X028300Y009555D03*
+X029800Y009755D03*
+X031100Y010605D03*
+X029450Y011555D03*
+X030250Y011905D03*
+X031150Y011905D03*
+X029600Y012605D03*
+X031200Y013355D03*
+X031250Y013855D03*
+X031900Y013855D03*
+X030200Y014455D03*
+X029400Y014305D03*
+X028550Y013805D03*
+X026900Y012105D03*
+X026950Y011555D03*
+X028350Y011305D03*
+X025000Y013505D03*
+X023900Y013605D03*
+X022800Y013405D03*
+X024200Y012755D03*
+X022150Y012505D03*
+X020850Y013355D03*
+X016150Y016105D03*
+X016300Y016505D03*
+X015650Y017855D03*
+X014050Y017355D03*
+X012900Y018005D03*
+X012150Y017705D03*
+X011974Y017281D03*
+X011550Y017105D03*
+X011126Y017281D03*
+X010950Y017705D03*
+X010450Y017655D03*
+X011126Y018129D03*
+X011550Y018305D03*
+X011974Y018129D03*
+X011150Y019455D03*
+X011200Y019805D03*
+X010550Y019455D03*
+X008900Y019455D03*
+X007400Y018605D03*
+X006900Y018455D03*
+X007100Y018105D03*
+X006600Y017455D03*
+X005000Y017105D03*
+X004550Y017005D03*
+X004450Y016605D03*
+X004050Y016305D03*
+X004900Y016005D03*
+X005600Y015555D03*
+X006200Y015205D03*
+X006900Y014755D03*
+X007300Y014305D03*
+X007950Y014305D03*
+X007850Y014705D03*
+X008350Y015405D03*
+X007950Y015555D03*
+X007550Y015555D03*
+X009150Y014905D03*
+X009700Y015005D03*
+X010700Y015005D03*
+X011500Y014855D03*
+X011550Y014005D03*
+X011200Y013605D03*
+X010750Y013755D03*
+X010550Y012805D03*
+X009900Y013055D03*
+X010000Y012005D03*
+X010300Y011105D03*
+X008900Y010505D03*
+X009050Y009955D03*
+X009650Y010105D03*
+X008900Y009355D03*
+X008050Y009405D03*
+X008050Y008905D03*
+X006100Y008405D03*
+X005550Y008055D03*
+X003700Y007655D03*
+X003300Y007305D03*
+X003400Y006305D03*
+X004850Y005755D03*
+X005850Y005355D03*
+X006700Y005005D03*
+X006600Y004355D03*
+X005900Y004805D03*
+X004800Y004005D03*
+X004300Y003605D03*
+X002700Y003155D03*
+X002300Y003855D03*
+X002150Y002155D03*
+X003300Y001955D03*
+X004700Y001855D03*
+X006000Y001205D03*
+X007450Y001455D03*
+X006500Y002305D03*
+X006400Y002755D03*
+X006500Y003605D03*
+X008150Y003955D03*
+X008550Y003255D03*
+X009700Y003355D03*
+X010250Y003305D03*
+X011400Y002555D03*
+X010900Y001805D03*
+X010500Y001655D03*
+X010750Y001255D03*
+X011400Y001105D03*
+X012000Y001455D03*
+X012250Y000505D03*
+X013450Y002605D03*
+X013550Y003055D03*
+X014100Y002905D03*
+X013050Y003055D03*
+X012600Y003305D03*
+X012000Y004305D03*
+X011550Y004305D03*
+X010350Y005005D03*
+X009000Y005105D03*
+X009050Y005605D03*
+X008100Y005805D03*
+X007800Y006155D03*
+X007800Y005055D03*
+X011750Y007605D03*
+X012350Y007905D03*
+X013450Y008155D03*
+X013100Y008455D03*
+X010750Y008505D03*
+X010150Y008105D03*
+X012550Y006505D03*
+X013050Y006555D03*
+X013450Y006655D03*
+X013550Y006255D03*
+X014100Y006305D03*
+X014750Y006505D03*
+X014750Y006905D03*
+X016100Y006255D03*
+X016450Y005905D03*
+X017100Y005855D03*
+X017050Y006705D03*
+X017750Y006605D03*
+X018950Y007155D03*
+X020150Y006655D03*
+X020600Y006505D03*
+X021000Y006755D03*
+X020400Y007055D03*
+X021600Y007905D03*
+X022800Y007905D03*
+X023150Y008155D03*
+X024600Y008205D03*
+X025050Y008205D03*
+X025750Y008205D03*
+X026100Y007905D03*
+X025900Y007555D03*
+X026700Y007205D03*
+X026600Y006305D03*
+X025650Y006705D03*
+X025350Y006405D03*
+X025100Y006005D03*
+X025350Y005655D03*
+X024900Y005405D03*
+X024550Y005755D03*
+X024900Y004955D03*
+X024150Y004105D03*
+X023600Y004055D03*
+X023000Y004255D03*
+X022650Y004855D03*
+X022250Y005205D03*
+X022350Y005605D03*
+X022200Y006405D03*
+X022400Y006755D03*
+X024450Y007405D03*
+X024600Y007005D03*
+X026950Y008155D03*
+X027850Y006955D03*
+X029450Y006805D03*
+X031100Y006155D03*
+X031250Y005755D03*
+X031950Y006155D03*
+X032050Y005055D03*
+X031100Y005055D03*
+X031150Y004405D03*
+X031800Y003655D03*
+X029250Y003605D03*
+X028600Y003605D03*
+X028450Y004205D03*
+X029200Y004805D03*
+X029200Y005505D03*
+X027500Y005005D03*
+X026950Y005055D03*
+X026300Y005255D03*
+X025950Y005505D03*
+X026900Y005555D03*
+X026300Y003355D03*
+X026700Y003255D03*
+X025450Y003255D03*
+X025150Y002255D03*
+X023650Y001405D03*
+X023474Y000981D03*
+X023050Y000805D03*
+X022626Y000981D03*
+X022450Y001405D03*
+X022626Y001829D03*
+X023050Y002005D03*
+X023474Y001829D03*
+X023100Y003255D03*
+X022250Y003305D03*
+X020950Y003955D03*
+X020500Y004505D03*
+X020700Y005255D03*
+X019200Y005255D03*
+X019250Y004355D03*
+X018300Y003655D03*
+X017750Y004255D03*
+X017050Y004955D03*
+X016100Y004755D03*
+X016400Y004055D03*
+X015950Y003255D03*
+X017150Y002455D03*
+X018700Y002205D03*
+X019400Y002255D03*
+X020550Y002405D03*
+X020750Y003055D03*
+X020450Y003355D03*
+X018250Y005355D03*
+X016500Y007405D03*
+X016850Y008405D03*
+X016450Y008555D03*
+X016000Y008505D03*
+X016450Y009605D03*
+X017700Y009155D03*
+X020950Y009205D03*
+X021500Y009605D03*
+X022100Y009605D03*
+X022600Y009655D03*
+X022900Y009155D03*
+X023750Y009005D03*
+X031050Y007655D03*
+X031950Y009155D03*
+X029450Y002305D03*
+X027650Y002255D03*
+X026450Y000705D03*
+X019500Y000805D03*
+X017400Y000805D03*
+X015600Y001805D03*
+X013350Y004305D03*
+X013850Y005505D03*
+X008850Y001355D03*
+X001700Y007055D03*
+X003250Y008355D03*
+X004000Y009305D03*
+X003550Y010405D03*
+X003550Y011155D03*
+X005400Y012005D03*
+X005150Y012655D03*
+X004950Y013055D03*
+X005350Y013055D03*
+X004550Y014105D03*
+X003900Y014155D03*
+X003300Y014155D03*
+X002650Y014155D03*
+X001400Y014205D03*
+X000900Y012255D03*
+X002150Y009405D03*
+X006100Y010255D03*
+X006550Y010255D03*
+X006150Y010855D03*
+X008050Y010255D03*
+X012150Y010155D03*
+X012750Y010255D03*
+X013100Y011005D03*
+X013550Y011205D03*
+X012850Y011905D03*
+X012300Y011855D03*
+X013700Y012105D03*
+X013900Y012805D03*
+X014050Y013305D03*
+X012600Y014655D03*
+X013000Y015055D03*
+X013500Y015005D03*
+X014050Y014855D03*
+X009350Y017905D03*
+X004600Y018355D03*
+X002550Y017355D03*
+X002150Y017455D03*
+X002300Y018005D03*
+X001500Y017655D03*
+X001200Y018055D03*
+X002200Y016855D03*
+X004800Y015005D03*
+X007050Y013155D03*
+X007600Y013155D03*
+X015950Y019755D03*
+D18*
+X011550Y017705D03*
+X023050Y001405D03*
+D19*
+X021994Y002425D02*
+X024956Y002425D01*
+X025059Y002468D01*
+X025447Y002856D01*
+X025529Y002856D01*
+X025676Y002917D01*
+X025788Y003029D01*
+X025849Y003176D01*
+X025849Y003334D01*
+X025788Y003481D01*
+X025676Y003593D01*
+X025529Y003654D01*
+X025371Y003654D01*
+X025224Y003593D01*
+X025112Y003481D01*
+X025051Y003334D01*
+X025051Y003252D01*
+X024784Y002985D01*
+X024080Y002985D01*
+X024159Y003018D01*
+X024709Y003568D01*
+X024787Y003646D01*
+X024830Y003749D01*
+X024830Y004556D01*
+X024979Y004556D01*
+X025126Y004617D01*
+X025238Y004729D01*
+X025299Y004876D01*
+X025299Y005034D01*
+X025238Y005180D01*
+X025270Y005257D01*
+X025271Y005256D01*
+X025429Y005256D01*
+X025576Y005317D01*
+X025590Y005331D01*
+X025612Y005279D01*
+X025724Y005167D01*
+X025871Y005106D01*
+X025930Y005106D01*
+X025962Y005029D01*
+X026074Y004917D01*
+X026221Y004856D01*
+X026320Y004856D01*
+X026320Y004799D01*
+X026363Y004696D01*
+X026420Y004639D01*
+X026420Y003871D01*
+X026303Y003754D01*
+X026221Y003754D01*
+X026074Y003693D01*
+X025962Y003581D01*
+X025901Y003434D01*
+X025901Y003276D01*
+X025962Y003129D01*
+X026074Y003017D01*
+X026221Y002956D01*
+X026379Y002956D01*
+X026419Y002973D01*
+X026474Y002917D01*
+X026621Y002856D01*
+X026779Y002856D01*
+X026926Y002917D01*
+X027038Y003029D01*
+X027045Y003045D01*
+X027722Y003045D01*
+X027854Y003100D01*
+X027955Y003201D01*
+X028205Y003451D01*
+X028219Y003484D01*
+X028262Y003379D01*
+X028374Y003267D01*
+X028521Y003206D01*
+X028679Y003206D01*
+X028826Y003267D01*
+X028925Y003366D01*
+X029024Y003267D01*
+X029171Y003206D01*
+X029329Y003206D01*
+X029476Y003267D01*
+X029554Y003345D01*
+X029609Y003368D01*
+X029959Y003718D01*
+X030037Y003796D01*
+X030080Y003899D01*
+X030080Y004761D01*
+X030037Y004864D01*
+X029626Y005275D01*
+X030106Y005275D01*
+X030209Y005318D01*
+X030270Y005379D01*
+X030270Y004949D01*
+X030313Y004846D01*
+X030751Y004408D01*
+X030751Y004326D01*
+X030812Y004179D01*
+X030924Y004067D01*
+X031071Y004006D01*
+X031229Y004006D01*
+X031376Y004067D01*
+X031488Y004179D01*
+X031549Y004326D01*
+X031549Y004484D01*
+X031488Y004631D01*
+X031376Y004743D01*
+X031359Y004750D01*
+X031438Y004829D01*
+X031499Y004976D01*
+X031499Y005134D01*
+X031438Y005281D01*
+X031353Y005366D01*
+X031476Y005417D01*
+X031588Y005529D01*
+X031649Y005676D01*
+X031649Y005834D01*
+X031588Y005981D01*
+X031497Y006072D01*
+X031499Y006076D01*
+X031499Y006234D01*
+X031438Y006381D01*
+X031380Y006439D01*
+X031380Y006879D01*
+X031391Y006868D01*
+X031670Y006589D01*
+X031670Y006439D01*
+X031612Y006381D01*
+X031551Y006234D01*
+X031551Y006076D01*
+X031612Y005929D01*
+X031724Y005817D01*
+X031871Y005756D01*
+X032029Y005756D01*
+X032176Y005817D01*
+X032200Y005841D01*
+X032200Y000355D01*
+X012003Y000355D01*
+X012131Y000484D01*
+X012221Y000574D01*
+X012270Y000691D01*
+X012270Y001161D01*
+X012338Y001229D01*
+X012399Y001376D01*
+X012399Y001534D01*
+X012338Y001681D01*
+X012226Y001793D01*
+X012079Y001854D01*
+X011921Y001854D01*
+X011774Y001793D01*
+X011662Y001681D01*
+X011601Y001534D01*
+X011601Y001376D01*
+X011630Y001306D01*
+X011630Y000888D01*
+X011567Y000825D01*
+X010133Y000825D01*
+X009770Y001188D01*
+X009770Y002956D01*
+X009770Y001549D01*
+X009813Y001446D01*
+X009891Y001368D01*
+X010241Y001018D01*
+X010344Y000975D01*
+X010466Y000975D01*
+X010524Y000917D01*
+X010671Y000856D01*
+X010829Y000856D01*
+X010976Y000917D01*
+X011088Y001029D01*
+X011149Y001176D01*
+X011149Y001334D01*
+X011098Y001456D01*
+X011126Y001467D01*
+X011238Y001579D01*
+X011299Y001726D01*
+X011299Y001884D01*
+X011238Y002031D01*
+X011126Y002143D01*
+X010979Y002204D01*
+X010821Y002204D01*
+X010674Y002143D01*
+X010562Y002031D01*
+X010501Y001884D01*
+X010501Y001726D01*
+X010552Y001604D01*
+X010524Y001593D01*
+X010491Y001560D01*
+X010330Y001721D01*
+X010330Y002907D01*
+X010476Y002967D01*
+X010588Y003079D01*
+X010649Y003226D01*
+X010649Y003384D01*
+X010588Y003531D01*
+X010530Y003589D01*
+X010530Y004461D01*
+X010487Y004564D01*
+X009449Y005602D01*
+X009449Y005608D01*
+X010737Y006896D01*
+X010780Y006999D01*
+X010780Y008106D01*
+X010829Y008106D01*
+X010976Y008167D01*
+X011088Y008279D01*
+X011149Y008426D01*
+X012701Y008426D01*
+X012701Y008376D02*
+X012762Y008229D01*
+X012874Y008117D01*
+X013021Y008056D01*
+X013059Y008056D01*
+X013112Y007929D01*
+X013224Y007817D01*
+X013371Y007756D01*
+X013529Y007756D01*
+X013676Y007817D01*
+X013720Y007861D01*
+X013720Y007071D01*
+X013641Y006992D01*
+X013563Y006914D01*
+X013520Y006811D01*
+X013520Y006654D01*
+X013471Y006654D01*
+X013445Y006643D01*
+X013388Y006781D01*
+X013276Y006893D01*
+X013129Y006954D01*
+X012971Y006954D01*
+X012824Y006893D01*
+X012712Y006781D01*
+X012651Y006634D01*
+X012651Y006476D01*
+X012687Y006388D01*
+X011763Y005464D01*
+X011720Y005361D01*
+X011720Y004666D01*
+X011629Y004704D01*
+X011471Y004704D01*
+X011324Y004643D01*
+X011212Y004531D01*
+X011151Y004384D01*
+X011151Y004226D01*
+X011212Y004079D01*
+X011324Y003967D01*
+X011471Y003906D01*
+X011629Y003906D01*
+X011775Y003967D01*
+X011921Y003906D01*
+X012079Y003906D01*
+X012226Y003967D01*
+X012338Y004079D01*
+X012399Y004226D01*
+X012399Y004384D01*
+X012338Y004531D01*
+X012280Y004589D01*
+X012280Y005189D01*
+X013185Y006094D01*
+X013212Y006029D01*
+X013324Y005917D01*
+X013471Y005856D01*
+X013629Y005856D01*
+X013776Y005917D01*
+X013850Y005991D01*
+X013874Y005967D01*
+X014021Y005906D01*
+X014120Y005906D01*
+X014120Y005799D01*
+X014076Y005843D01*
+X013929Y005904D01*
+X013771Y005904D01*
+X013624Y005843D01*
+X013512Y005731D01*
+X013451Y005584D01*
+X013451Y005426D01*
+X013512Y005279D01*
+X013624Y005167D01*
+X013771Y005106D01*
+X013929Y005106D01*
+X014076Y005167D01*
+X014120Y005211D01*
+X014120Y003321D01*
+X014103Y003304D01*
+X014021Y003304D01*
+X013874Y003243D01*
+X013762Y003131D01*
+X013701Y002984D01*
+X013701Y002826D01*
+X013762Y002679D01*
+X013874Y002567D01*
+X014021Y002506D01*
+X014179Y002506D01*
+X014326Y002567D01*
+X014438Y002679D01*
+X014499Y002826D01*
+X014499Y002908D01*
+X014637Y003046D01*
+X014680Y003149D01*
+X014680Y006106D01*
+X014829Y006106D01*
+X014976Y006167D01*
+X015020Y006211D01*
+X015020Y002649D01*
+X015063Y002546D01*
+X015320Y002289D01*
+X015320Y002089D01*
+X015262Y002031D01*
+X015201Y001884D01*
+X015201Y001726D01*
+X015262Y001579D01*
+X015374Y001467D01*
+X015521Y001406D01*
+X015679Y001406D01*
+X015826Y001467D01*
+X015938Y001579D01*
+X015999Y001726D01*
+X015999Y001884D01*
+X015938Y002031D01*
+X015880Y002089D01*
+X015880Y002461D01*
+X015837Y002564D01*
+X015580Y002821D01*
+X015580Y006729D01*
+X015795Y006514D01*
+X015762Y006481D01*
+X015701Y006334D01*
+X015701Y006176D01*
+X015762Y006029D01*
+X015874Y005917D01*
+X016021Y005856D01*
+X016051Y005856D01*
+X016051Y005826D01*
+X016112Y005679D01*
+X016224Y005567D01*
+X016371Y005506D01*
+X016529Y005506D01*
+X016676Y005567D01*
+X016755Y005646D01*
+X016762Y005629D01*
+X016870Y005521D01*
+X016813Y005464D01*
+X016770Y005361D01*
+X016770Y005239D01*
+X016712Y005181D01*
+X016651Y005034D01*
+X016651Y004876D01*
+X016712Y004729D01*
+X016824Y004617D01*
+X016971Y004556D01*
+X017129Y004556D01*
+X017276Y004617D01*
+X017388Y004729D01*
+X017430Y004830D01*
+X017430Y004499D01*
+X017412Y004481D01*
+X017351Y004334D01*
+X017351Y004176D01*
+X017412Y004029D01*
+X017430Y004011D01*
+X017430Y003188D01*
+X017096Y002854D01*
+X017071Y002854D01*
+X016924Y002793D01*
+X016812Y002681D01*
+X016751Y002534D01*
+X016751Y002376D01*
+X016812Y002229D01*
+X016924Y002117D01*
+X017071Y002056D01*
+X017229Y002056D01*
+X017376Y002117D01*
+X017488Y002229D01*
+X017549Y002376D01*
+X017549Y002401D01*
+X018021Y002874D01*
+X018070Y002991D01*
+X018070Y003321D01*
+X018074Y003317D01*
+X018221Y003256D01*
+X018340Y003256D01*
+X018340Y002378D01*
+X018301Y002284D01*
+X018301Y002126D01*
+X018362Y001979D01*
+X018474Y001867D01*
+X018621Y001806D01*
+X018779Y001806D01*
+X018926Y001867D01*
+X019038Y001979D01*
+X019099Y002126D01*
+X019099Y002284D01*
+X019060Y002378D01*
+X019060Y003583D01*
+X019060Y006769D01*
+X019176Y006817D01*
+X019288Y006929D01*
+X019349Y007076D01*
+X019349Y007234D01*
+X019288Y007381D01*
+X019176Y007493D01*
+X019060Y007541D01*
+X019060Y015982D01*
+X019099Y016076D01*
+X019099Y016234D01*
+X019038Y016381D01*
+X018926Y016493D01*
+X018779Y016554D01*
+X018621Y016554D01*
+X018474Y016493D01*
+X018362Y016381D01*
+X018301Y016234D01*
+X018301Y016076D01*
+X018340Y015982D01*
+X018340Y004054D01*
+X018221Y004054D01*
+X018074Y003993D01*
+X018070Y003989D01*
+X018070Y004011D01*
+X018088Y004029D01*
+X018149Y004176D01*
+X018149Y004334D01*
+X018088Y004481D01*
+X018070Y004499D01*
+X018070Y006361D01*
+X018088Y006379D01*
+X018149Y006526D01*
+X018149Y006684D01*
+X018088Y006831D01*
+X017976Y006943D01*
+X017829Y007004D01*
+X017730Y007004D01*
+X017730Y008511D01*
+X017687Y008614D01*
+X017491Y008810D01*
+X017621Y008756D01*
+X017779Y008756D01*
+X017926Y008817D01*
+X018038Y008929D01*
+X018099Y009076D01*
+X018099Y009234D01*
+X018038Y009381D01*
+X017926Y009493D01*
+X017779Y009554D01*
+X017621Y009554D01*
+X017474Y009493D01*
+X017362Y009381D01*
+X017330Y009304D01*
+X017330Y009389D01*
+X018009Y010068D01*
+X018237Y010296D01*
+X018280Y010399D01*
+X018280Y010911D01*
+X018237Y011014D01*
+X018159Y011092D01*
+X017992Y011259D01*
+X017999Y011276D01*
+X017999Y011434D01*
+X017938Y011581D01*
+X017826Y011693D01*
+X017679Y011754D01*
+X017521Y011754D01*
+X017374Y011693D01*
+X017262Y011581D01*
+X017230Y011504D01*
+X017230Y012339D01*
+X017909Y013018D01*
+X017987Y013096D01*
+X018030Y013199D01*
+X018030Y015271D01*
+X018088Y015329D01*
+X018149Y015476D01*
+X018149Y015634D01*
+X018088Y015781D01*
+X017976Y015893D01*
+X017829Y015954D01*
+X017671Y015954D01*
+X017524Y015893D01*
+X017412Y015781D01*
+X017351Y015634D01*
+X017351Y015476D01*
+X017412Y015329D01*
+X017470Y015271D01*
+X017470Y015031D01*
+X017299Y015202D01*
+X017299Y015284D01*
+X017238Y015431D01*
+X017126Y015543D01*
+X016979Y015604D01*
+X016880Y015604D01*
+X016880Y016261D01*
+X016837Y016364D01*
+X016699Y016502D01*
+X016699Y016584D01*
+X016638Y016731D01*
+X016526Y016843D01*
+X016379Y016904D01*
+X016221Y016904D01*
+X016074Y016843D01*
+X015962Y016731D01*
+X015901Y016584D01*
+X015901Y016426D01*
+X015962Y016279D01*
+X016074Y016167D01*
+X016221Y016106D01*
+X016303Y016106D01*
+X016320Y016089D01*
+X016320Y014737D01*
+X016279Y014754D01*
+X016121Y014754D01*
+X015974Y014693D01*
+X015916Y014635D01*
+X015894Y014635D01*
+X015791Y014592D01*
+X015713Y014514D01*
+X015530Y014331D01*
+X015530Y017339D01*
+X015647Y017456D01*
+X015729Y017456D01*
+X015876Y017517D01*
+X015988Y017629D01*
+X016049Y017776D01*
+X016049Y017925D01*
+X016706Y017925D01*
+X016809Y017968D01*
+X016887Y018046D01*
+X017218Y018378D01*
+X017785Y018378D01*
+X017873Y018414D01*
+X017941Y018482D01*
+X017977Y018570D01*
+X017977Y019340D01*
+X017941Y019428D01*
+X017873Y019496D01*
+X017785Y019532D01*
+X017015Y019532D01*
+X016927Y019496D01*
+X016859Y019428D01*
+X016825Y019347D01*
+X016727Y019445D01*
+X016515Y019532D01*
+X016285Y019532D01*
+X016073Y019445D01*
+X015910Y019282D01*
+X015900Y019257D01*
+X015890Y019282D01*
+X015727Y019445D01*
+X015515Y019532D01*
+X015285Y019532D01*
+X015073Y019445D01*
+X014910Y019282D01*
+X014900Y019257D01*
+X014890Y019282D01*
+X014727Y019445D01*
+X014515Y019532D01*
+X014285Y019532D01*
+X014073Y019445D01*
+X013910Y019282D01*
+X013846Y019127D01*
+X013843Y019138D01*
+X013808Y019205D01*
+X013764Y019266D01*
+X013711Y019319D01*
+X013650Y019363D01*
+X013583Y019398D01*
+X013512Y019421D01*
+X013440Y019432D01*
+X013440Y018995D01*
+X013360Y018995D01*
+X013360Y019432D01*
+X013288Y019421D01*
+X013217Y019398D01*
+X013150Y019363D01*
+X013089Y019319D01*
+X013036Y019266D01*
+X012992Y019205D01*
+X012957Y019138D01*
+X012954Y019127D01*
+X012890Y019282D01*
+X012727Y019445D01*
+X012515Y019532D01*
+X012285Y019532D01*
+X012073Y019445D01*
+X011910Y019282D01*
+X011823Y019070D01*
+X011823Y018840D01*
+X011910Y018628D01*
+X012073Y018465D01*
+X012285Y018378D01*
+X012515Y018378D01*
+X012727Y018465D01*
+X012890Y018628D01*
+X012954Y018783D01*
+X012957Y018772D01*
+X012992Y018705D01*
+X013036Y018644D01*
+X013089Y018591D01*
+X013150Y018547D01*
+X013217Y018512D01*
+X013288Y018489D01*
+X013360Y018478D01*
+X013360Y018915D01*
+X013440Y018915D01*
+X013440Y018478D01*
+X013512Y018489D01*
+X013583Y018512D01*
+X013650Y018547D01*
+X013711Y018591D01*
+X013764Y018644D01*
+X013808Y018705D01*
+X013843Y018772D01*
+X013846Y018783D01*
+X013910Y018628D01*
+X014073Y018465D01*
+X014120Y018446D01*
+X014120Y017754D01*
+X013971Y017754D01*
+X013824Y017693D01*
+X013712Y017581D01*
+X013651Y017434D01*
+X013651Y017276D01*
+X013690Y017182D01*
+X013690Y015028D01*
+X013651Y014934D01*
+X013651Y014776D01*
+X013712Y014629D01*
+X013824Y014517D01*
+X013971Y014456D01*
+X014120Y014456D01*
+X014120Y013704D01*
+X013971Y013704D01*
+X013824Y013643D01*
+X013712Y013531D01*
+X013651Y013384D01*
+X013651Y013226D01*
+X013712Y013079D01*
+X013824Y012967D01*
+X013920Y012927D01*
+X013920Y012445D01*
+X013779Y012504D01*
+X013621Y012504D01*
+X013474Y012443D01*
+X013362Y012331D01*
+X013301Y012184D01*
+X013301Y012026D01*
+X013362Y011879D01*
+X013474Y011767D01*
+X013621Y011706D01*
+X013703Y011706D01*
+X013720Y011689D01*
+X013720Y011566D01*
+X013629Y011604D01*
+X013471Y011604D01*
+X013324Y011543D01*
+X013212Y011431D01*
+X013151Y011284D01*
+X013151Y011126D01*
+X013212Y010979D01*
+X013324Y010867D01*
+X013471Y010806D01*
+X013629Y010806D01*
+X013720Y010844D01*
+X013720Y008449D01*
+X013676Y008493D01*
+X013529Y008554D01*
+X013491Y008554D01*
+X013438Y008681D01*
+X013326Y008793D01*
+X013179Y008854D01*
+X013021Y008854D01*
+X012874Y008793D01*
+X012762Y008681D01*
+X012701Y008534D01*
+X012701Y008376D01*
+X012713Y008348D02*
+X011116Y008348D01*
+X011149Y008426D02*
+X011149Y008584D01*
+X011088Y008731D01*
+X010976Y008843D01*
+X010829Y008904D01*
+X010671Y008904D01*
+X010580Y008866D01*
+X010580Y010821D01*
+X010638Y010879D01*
+X010699Y011026D01*
+X010699Y011108D01*
+X010787Y011196D01*
+X010830Y011299D01*
+X010830Y012521D01*
+X010888Y012579D01*
+X010949Y012726D01*
+X010949Y012884D01*
+X010888Y013031D01*
+X010776Y013143D01*
+X010629Y013204D01*
+X010471Y013204D01*
+X010324Y013143D01*
+X010299Y013118D01*
+X010299Y013134D01*
+X010238Y013281D01*
+X010126Y013393D01*
+X009979Y013454D01*
+X009821Y013454D01*
+X009674Y013393D01*
+X009562Y013281D01*
+X009501Y013134D01*
+X009501Y012976D01*
+X009562Y012829D01*
+X009674Y012717D01*
+X009821Y012656D01*
+X009979Y012656D01*
+X010126Y012717D01*
+X010151Y012742D01*
+X010151Y012726D01*
+X010212Y012579D01*
+X010270Y012521D01*
+X010270Y011504D01*
+X010221Y011504D01*
+X010074Y011443D01*
+X009962Y011331D01*
+X009901Y011184D01*
+X009901Y011026D01*
+X009962Y010879D01*
+X010020Y010821D01*
+X010020Y010254D01*
+X009988Y010331D01*
+X009876Y010443D01*
+X009729Y010504D01*
+X009571Y010504D01*
+X009424Y010443D01*
+X009312Y010331D01*
+X009251Y010184D01*
+X009251Y010026D01*
+X009312Y009879D01*
+X009424Y009767D01*
+X009571Y009706D01*
+X009729Y009706D01*
+X009876Y009767D01*
+X009988Y009879D01*
+X010020Y009956D01*
+X010020Y008499D01*
+X010063Y008396D01*
+X010220Y008239D01*
+X010220Y007171D01*
+X009053Y006004D01*
+X008971Y006004D01*
+X008824Y005943D01*
+X008820Y005939D01*
+X008820Y008957D01*
+X008821Y008956D01*
+X008979Y008956D01*
+X009126Y009017D01*
+X009238Y009129D01*
+X009299Y009276D01*
+X009299Y009434D01*
+X009238Y009581D01*
+X009126Y009693D01*
+X008979Y009754D01*
+X008821Y009754D01*
+X008820Y009753D01*
+X008820Y010107D01*
+X008821Y010106D01*
+X008979Y010106D01*
+X009126Y010167D01*
+X009238Y010279D01*
+X009299Y010426D01*
+X009299Y010584D01*
+X009238Y010731D01*
+X009126Y010843D01*
+X008979Y010904D01*
+X008821Y010904D01*
+X008820Y010903D01*
+X008820Y014619D01*
+X008771Y014736D01*
+X008681Y014826D01*
+X008480Y015027D01*
+X008576Y015067D01*
+X008688Y015179D01*
+X008749Y015326D01*
+X008749Y015484D01*
+X008730Y015529D01*
+X008989Y015270D01*
+X008924Y015243D01*
+X008812Y015131D01*
+X008751Y014984D01*
+X008751Y014826D01*
+X008812Y014679D01*
+X008924Y014567D01*
+X009071Y014506D01*
+X009229Y014506D01*
+X009376Y014567D01*
+X009488Y014679D01*
+X009549Y014826D01*
+X009549Y014984D01*
+X009511Y015075D01*
+X010884Y015075D01*
+X011101Y014858D01*
+X011101Y014776D01*
+X011162Y014629D01*
+X011274Y014517D01*
+X011421Y014456D01*
+X011579Y014456D01*
+X011726Y014517D01*
+X011838Y014629D01*
+X011899Y014776D01*
+X011899Y014934D01*
+X011838Y015081D01*
+X011726Y015193D01*
+X011579Y015254D01*
+X011497Y015254D01*
+X011159Y015592D01*
+X011056Y015635D01*
+X009416Y015635D01*
+X009180Y015871D01*
+X009180Y019171D01*
+X009238Y019229D01*
+X009299Y019376D01*
+X009299Y019534D01*
+X009238Y019681D01*
+X009126Y019793D01*
+X008979Y019854D01*
+X008821Y019854D01*
+X008674Y019793D01*
+X008562Y019681D01*
+X008501Y019534D01*
+X008501Y019485D01*
+X007194Y019485D01*
+X007091Y019442D01*
+X007013Y019364D01*
+X007013Y019364D01*
+X006741Y019092D01*
+X006663Y019014D01*
+X006620Y018911D01*
+X006620Y018739D01*
+X006562Y018681D01*
+X006501Y018534D01*
+X006501Y018376D01*
+X006562Y018229D01*
+X006674Y018117D01*
+X006701Y018106D01*
+X006701Y018026D01*
+X006762Y017879D01*
+X006866Y017775D01*
+X006844Y017775D01*
+X006826Y017793D01*
+X006679Y017854D01*
+X006521Y017854D01*
+X006374Y017793D01*
+X006356Y017775D01*
+X006236Y017775D01*
+X006119Y017726D01*
+X006029Y017636D01*
+X005385Y016993D01*
+X005399Y017026D01*
+X005399Y017184D01*
+X005338Y017331D01*
+X005226Y017443D01*
+X005079Y017504D01*
+X004921Y017504D01*
+X004774Y017443D01*
+X004704Y017373D01*
+X004629Y017404D01*
+X004471Y017404D01*
+X004324Y017343D01*
+X004212Y017231D01*
+X004151Y017084D01*
+X004151Y016926D01*
+X004212Y016779D01*
+X004324Y016667D01*
+X004471Y016606D01*
+X004629Y016606D01*
+X004776Y016667D01*
+X004846Y016737D01*
+X004921Y016706D01*
+X005079Y016706D01*
+X005112Y016720D01*
+X005069Y016676D01*
+X004979Y016586D01*
+X004930Y016469D01*
+X004930Y016404D01*
+X004821Y016404D01*
+X004674Y016343D01*
+X004562Y016231D01*
+X004501Y016084D01*
+X004501Y015926D01*
+X004562Y015779D01*
+X004674Y015667D01*
+X004821Y015606D01*
+X004930Y015606D01*
+X004930Y015383D01*
+X004879Y015404D01*
+X004721Y015404D01*
+X004574Y015343D01*
+X004516Y015285D01*
+X004094Y015285D01*
+X003991Y015242D01*
+X003913Y015164D01*
+X003663Y014914D01*
+X003620Y014811D01*
+X003620Y014439D01*
+X003600Y014419D01*
+X003580Y014439D01*
+X003580Y015539D01*
+X003954Y015913D01*
+X003971Y015906D01*
+X004129Y015906D01*
+X004276Y015967D01*
+X004388Y016079D01*
+X004449Y016226D01*
+X004449Y016384D01*
+X004388Y016531D01*
+X004276Y016643D01*
+X004129Y016704D01*
+X003971Y016704D01*
+X003824Y016643D01*
+X003712Y016531D01*
+X003664Y016415D01*
+X003063Y015814D01*
+X003020Y015711D01*
+X003020Y014439D01*
+X002975Y014394D01*
+X002876Y014493D01*
+X002729Y014554D01*
+X002571Y014554D01*
+X002424Y014493D01*
+X002312Y014381D01*
+X002251Y014234D01*
+X002251Y014076D01*
+X002312Y013929D01*
+X002424Y013817D01*
+X002571Y013756D01*
+X002729Y013756D01*
+X002876Y013817D01*
+X002975Y013916D01*
+X003074Y013817D01*
+X003221Y013756D01*
+X003379Y013756D01*
+X003526Y013817D01*
+X003600Y013891D01*
+X003674Y013817D01*
+X003821Y013756D01*
+X003979Y013756D01*
+X004126Y013817D01*
+X004205Y013896D01*
+X004212Y013879D01*
+X004324Y013767D01*
+X004471Y013706D01*
+X004629Y013706D01*
+X004776Y013767D01*
+X004888Y013879D01*
+X004930Y013980D01*
+X004930Y013791D01*
+X004979Y013674D01*
+X005220Y013433D01*
+X005150Y013404D01*
+X005029Y013454D01*
+X004871Y013454D01*
+X004724Y013393D01*
+X004666Y013335D01*
+X004194Y013335D01*
+X004091Y013292D01*
+X004013Y013214D01*
+X003763Y012964D01*
+X003720Y012861D01*
+X003720Y010766D01*
+X003629Y010804D01*
+X003471Y010804D01*
+X003324Y010743D01*
+X003212Y010631D01*
+X003151Y010484D01*
+X003151Y010326D01*
+X003212Y010179D01*
+X003270Y010121D01*
+X003270Y009371D01*
+X001591Y007692D01*
+X001513Y007614D01*
+X001470Y007511D01*
+X001470Y007389D01*
+X001362Y007281D01*
+X001301Y007134D01*
+X001301Y006976D01*
+X001362Y006829D01*
+X001474Y006717D01*
+X001621Y006656D01*
+X001779Y006656D01*
+X001926Y006717D01*
+X002020Y006811D01*
+X002020Y004139D01*
+X001962Y004081D01*
+X001901Y003934D01*
+X001901Y003776D01*
+X001962Y003629D01*
+X002074Y003517D01*
+X002221Y003456D01*
+X002379Y003456D01*
+X002526Y003517D01*
+X002638Y003629D01*
+X002699Y003776D01*
+X002699Y003934D01*
+X002638Y004081D01*
+X002580Y004139D01*
+X002580Y006789D01*
+X003320Y007529D01*
+X003362Y007429D01*
+X003420Y007371D01*
+X003420Y002471D01*
+X003303Y002354D01*
+X003221Y002354D01*
+X003074Y002293D01*
+X002962Y002181D01*
+X002901Y002034D01*
+X002901Y001876D01*
+X002962Y001729D01*
+X003074Y001617D01*
+X003221Y001556D01*
+X003379Y001556D01*
+X003526Y001617D01*
+X003638Y001729D01*
+X003699Y001876D01*
+X003699Y001958D01*
+X003937Y002196D01*
+X003980Y002299D01*
+X003980Y003361D01*
+X004074Y003267D01*
+X004221Y003206D01*
+X004379Y003206D01*
+X004526Y003267D01*
+X004638Y003379D01*
+X004699Y003526D01*
+X004699Y003684D01*
+X004638Y003831D01*
+X004580Y003889D01*
+X004580Y005461D01*
+X004624Y005417D01*
+X004771Y005356D01*
+X004929Y005356D01*
+X005076Y005417D01*
+X005188Y005529D01*
+X005249Y005676D01*
+X005249Y005834D01*
+X005188Y005981D01*
+X005076Y006093D01*
+X004929Y006154D01*
+X004771Y006154D01*
+X004624Y006093D01*
+X004580Y006049D01*
+X004580Y006689D01*
+X005547Y007656D01*
+X005553Y007656D01*
+X005770Y007439D01*
+X005770Y005753D01*
+X005624Y005693D01*
+X005512Y005581D01*
+X005451Y005434D01*
+X005451Y005276D01*
+X005512Y005129D01*
+X004580Y005129D01*
+X004580Y005051D02*
+X005582Y005051D01*
+X005586Y005055D02*
+X005562Y005031D01*
+X005501Y004884D01*
+X005501Y004726D01*
+X005562Y004579D01*
+X005674Y004467D01*
+X005821Y004406D01*
+X005979Y004406D01*
+X006126Y004467D01*
+X006238Y004579D01*
+X006299Y004726D01*
+X006299Y004751D01*
+X006352Y004804D01*
+X006362Y004779D01*
+X006426Y004715D01*
+X006374Y004693D01*
+X006262Y004581D01*
+X006201Y004434D01*
+X006201Y004276D01*
+X006262Y004129D01*
+X006374Y004017D01*
+X006521Y003956D01*
+X006679Y003956D01*
+X006826Y004017D01*
+X006938Y004129D01*
+X006999Y004276D01*
+X006999Y004358D01*
+X007466Y004825D01*
+X007574Y004717D01*
+X007721Y004656D01*
+X007879Y004656D01*
+X008026Y004717D01*
+X008138Y004829D01*
+X008180Y004930D01*
+X008180Y004691D01*
+X008229Y004574D01*
+X009130Y003672D01*
+X009130Y001639D01*
+X009076Y001693D01*
+X008929Y001754D01*
+X008771Y001754D01*
+X008624Y001693D01*
+X008566Y001635D01*
+X008480Y001721D01*
+X008480Y003721D01*
+X008488Y003729D01*
+X008549Y003876D01*
+X008549Y004034D01*
+X008488Y004181D01*
+X008376Y004293D01*
+X008229Y004354D01*
+X008071Y004354D01*
+X007924Y004293D01*
+X007812Y004181D01*
+X007751Y004034D01*
+X007751Y003876D01*
+X007812Y003729D01*
+X007920Y003621D01*
+X007920Y001549D01*
+X007963Y001446D01*
+X008213Y001196D01*
+X008291Y001118D01*
+X008394Y001075D01*
+X008566Y001075D01*
+X008624Y001017D01*
+X008771Y000956D01*
+X008929Y000956D01*
+X009076Y001017D01*
+X009130Y001071D01*
+X009130Y000991D01*
+X009179Y000874D01*
+X009697Y000355D01*
+X000700Y000355D01*
+X000700Y003209D01*
+X000741Y003168D01*
+X001751Y002158D01*
+X001751Y002076D01*
+X001812Y001929D01*
+X001924Y001817D01*
+X002071Y001756D01*
+X002229Y001756D01*
+X002376Y001817D01*
+X002488Y001929D01*
+X002549Y002076D01*
+X002549Y002234D01*
+X002488Y002381D01*
+X002376Y002493D01*
+X002229Y002554D01*
+X002147Y002554D01*
+X001180Y003521D01*
+X001180Y011971D01*
+X001238Y012029D01*
+X001299Y012176D01*
+X001299Y012334D01*
+X001238Y012481D01*
+X001126Y012593D01*
+X000979Y012654D01*
+X000821Y012654D01*
+X000700Y012604D01*
+X000700Y019177D01*
+X000743Y019134D01*
+X000750Y019127D01*
+X000818Y019058D01*
+X000862Y019040D01*
+X000923Y019015D01*
+X001241Y019015D01*
+X001312Y019044D01*
+X001383Y019015D01*
+X001633Y019015D01*
+X001704Y019044D01*
+X001775Y019015D01*
+X002094Y019015D01*
+X002165Y019044D01*
+X002236Y019015D01*
+X002349Y019015D01*
+X002429Y019048D01*
+X002509Y019015D01*
+X002623Y019015D01*
+X002651Y019027D01*
+X002679Y019015D01*
+X002793Y019015D01*
+X002897Y019058D01*
+X002932Y019093D01*
+X002967Y019058D01*
+X003011Y019040D01*
+X003071Y019015D01*
+X003390Y019015D01*
+X003461Y019044D01*
+X003532Y019015D01*
+X003782Y019015D01*
+X003853Y019044D01*
+X003882Y019032D01*
+X003924Y019015D01*
+X004037Y019015D01*
+X004117Y019048D01*
+X004197Y019015D01*
+X004311Y019015D01*
+X004415Y019058D01*
+X004496Y019139D01*
+X004539Y019243D01*
+X004539Y019767D01*
+X004496Y019872D01*
+X004415Y019952D01*
+X004311Y019995D01*
+X004197Y019995D01*
+X004117Y019962D01*
+X004037Y019995D01*
+X003924Y019995D01*
+X003819Y019952D01*
+X003739Y019872D01*
+X003733Y019859D01*
+X003532Y019859D01*
+X003427Y019815D01*
+X003427Y019815D01*
+X003426Y019815D01*
+X003426Y019815D01*
+X003426Y019815D01*
+X003413Y019821D01*
+X003322Y019859D01*
+X003003Y019859D01*
+X002994Y019855D01*
+X002966Y019884D01*
+X002861Y019927D01*
+X002752Y019927D01*
+X002727Y019952D01*
+X002623Y019995D01*
+X002509Y019995D01*
+X002404Y019952D01*
+X002324Y019872D01*
+X002319Y019859D01*
+X002304Y019859D01*
+X002233Y019829D01*
+X002162Y019859D01*
+X002049Y019859D01*
+X001969Y019825D01*
+X001889Y019859D01*
+X001775Y019859D01*
+X001704Y019829D01*
+X001633Y019859D01*
+X001383Y019859D01*
+X001279Y019815D01*
+X001278Y019815D01*
+X001278Y019815D01*
+X001278Y019815D01*
+X001264Y019821D01*
+X001173Y019859D01*
+X000854Y019859D01*
+X000750Y019815D01*
+X000700Y019765D01*
+X000700Y020055D01*
+X032200Y020055D01*
+X032200Y006833D01*
+X032187Y006864D01*
+X031830Y007221D01*
+X031830Y010039D01*
+X031859Y010068D01*
+X031937Y010146D01*
+X031980Y010249D01*
+X031980Y012911D01*
+X031937Y013014D01*
+X031599Y013352D01*
+X031599Y013434D01*
+X031538Y013581D01*
+X031426Y013693D01*
+X031279Y013754D01*
+X031121Y013754D01*
+X031030Y013716D01*
+X031030Y015489D01*
+X031137Y015596D01*
+X031180Y015699D01*
+X031180Y016111D01*
+X031137Y016214D01*
+X031059Y016292D01*
+X030809Y016542D01*
+X030706Y016585D01*
+X030294Y016585D01*
+X030191Y016542D01*
+X030113Y016464D01*
+X029913Y016264D01*
+X029870Y016161D01*
+X029870Y016039D01*
+X029812Y015981D01*
+X029751Y015834D01*
+X029751Y015676D01*
+X029812Y015529D01*
+X029924Y015417D01*
+X030071Y015356D01*
+X030229Y015356D01*
+X030270Y015373D01*
+X030270Y014854D01*
+X030121Y014854D01*
+X029974Y014793D01*
+X029862Y014681D01*
+X029801Y014534D01*
+X029801Y014376D01*
+X029862Y014229D01*
+X029920Y014171D01*
+X029920Y013271D01*
+X029791Y013142D01*
+X029713Y013064D01*
+X029670Y012961D01*
+X029670Y010249D01*
+X029713Y010146D01*
+X029920Y009939D01*
+X029920Y005835D01*
+X029434Y005835D01*
+X029426Y005843D01*
+X029279Y005904D01*
+X029180Y005904D01*
+X029180Y015211D01*
+X029137Y015314D01*
+X029099Y015352D01*
+X029099Y015434D01*
+X029038Y015581D01*
+X028926Y015693D01*
+X028779Y015754D01*
+X028621Y015754D01*
+X028474Y015693D01*
+X028362Y015581D01*
+X028301Y015434D01*
+X028301Y015276D01*
+X028362Y015129D01*
+X028474Y015017D01*
+X028620Y014957D01*
+X028620Y014204D01*
+X028471Y014204D01*
+X028324Y014143D01*
+X028260Y014079D01*
+X028260Y014932D01*
+X028299Y015026D01*
+X028299Y015184D01*
+X028238Y015331D01*
+X028126Y015443D01*
+X027979Y015504D01*
+X027821Y015504D01*
+X027730Y015466D01*
+X027730Y017031D01*
+X027767Y017012D01*
+X027838Y016989D01*
+X027910Y016978D01*
+X027910Y017415D01*
+X027990Y017415D01*
+X027990Y017495D01*
+X028427Y017495D01*
+X028416Y017567D01*
+X028393Y017638D01*
+X028358Y017705D01*
+X028314Y017766D01*
+X028261Y017819D01*
+X028200Y017863D01*
+X028133Y017898D01*
+X028122Y017901D01*
+X028277Y017965D01*
+X028440Y018128D01*
+X028450Y018153D01*
+X028460Y018128D01*
+X028623Y017965D01*
+X028778Y017901D01*
+X028767Y017898D01*
+X028700Y017863D01*
+X028639Y017819D01*
+X028586Y017766D01*
+X028542Y017705D01*
+X028507Y017638D01*
+X028484Y017567D01*
+X028473Y017495D01*
+X028910Y017495D01*
+X028910Y017415D01*
+X028990Y017415D01*
+X028990Y016978D01*
+X029062Y016989D01*
+X029133Y017012D01*
+X029200Y017047D01*
+X029261Y017091D01*
+X029314Y017144D01*
+X029358Y017205D01*
+X029393Y017272D01*
+X029396Y017283D01*
+X029460Y017128D01*
+X029623Y016965D01*
+X029835Y016878D01*
+X030065Y016878D01*
+X030277Y016965D01*
+X030440Y017128D01*
+X030527Y017340D01*
+X030527Y017570D01*
+X030440Y017782D01*
+X030342Y017880D01*
+X030423Y017914D01*
+X030491Y017982D01*
+X030527Y018070D01*
+X030527Y018840D01*
+X030491Y018928D01*
+X030423Y018996D01*
+X030335Y019032D01*
+X029565Y019032D01*
+X029477Y018996D01*
+X029409Y018928D01*
+X029375Y018847D01*
+X029277Y018945D01*
+X029065Y019032D01*
+X028835Y019032D01*
+X028623Y018945D01*
+X028460Y018782D01*
+X028450Y018757D01*
+X028440Y018782D01*
+X028277Y018945D01*
+X028230Y018964D01*
+X028230Y019011D01*
+X028187Y019114D01*
+X027737Y019564D01*
+X027659Y019642D01*
+X027556Y019685D01*
+X023894Y019685D01*
+X023791Y019642D01*
+X023291Y019142D01*
+X023213Y019064D01*
+X023180Y018985D01*
+X023065Y019032D01*
+X022835Y019032D01*
+X022623Y018945D01*
+X022460Y018782D01*
+X022450Y018757D01*
+X022440Y018782D01*
+X022277Y018945D01*
+X022065Y019032D01*
+X021835Y019032D01*
+X021623Y018945D01*
+X021460Y018782D01*
+X021450Y018757D01*
+X021440Y018782D01*
+X021277Y018945D01*
+X021065Y019032D01*
+X020835Y019032D01*
+X020623Y018945D01*
+X020460Y018782D01*
+X020383Y018595D01*
+X020298Y018595D01*
+X020194Y018552D01*
+X020113Y018472D01*
+X020108Y018459D01*
+X020093Y018459D01*
+X019988Y018415D01*
+X019988Y018415D01*
+X019988Y018415D01*
+X019988Y018415D01*
+X019976Y018420D01*
+X019883Y018459D01*
+X019633Y018459D01*
+X019576Y018435D01*
+X019527Y018484D01*
+X019423Y018527D01*
+X019309Y018527D01*
+X019212Y018487D01*
+X019116Y018527D01*
+X019002Y018527D01*
+X018897Y018484D01*
+X018854Y018440D01*
+X018809Y018459D01*
+X018558Y018459D01*
+X018488Y018429D01*
+X018417Y018459D01*
+X018235Y018459D01*
+X018223Y018454D01*
+X018211Y018459D01*
+X018098Y018459D01*
+X017993Y018415D01*
+X017925Y018347D01*
+X017845Y018267D01*
+X017801Y018162D01*
+X017801Y017843D01*
+X017845Y017739D01*
+X017925Y017658D01*
+X018030Y017615D01*
+X018143Y017615D01*
+X018155Y017620D01*
+X018166Y017615D01*
+X018280Y017615D01*
+X018292Y017620D01*
+X018303Y017615D01*
+X018417Y017615D01*
+X018488Y017644D01*
+X018498Y017640D01*
+X018558Y017615D01*
+X018809Y017615D01*
+X018871Y017641D01*
+X018934Y017615D01*
+X019047Y017615D01*
+X019144Y017655D01*
+X019241Y017615D01*
+X019354Y017615D01*
+X019459Y017658D01*
+X019493Y017693D01*
+X019528Y017658D01*
+X019572Y017640D01*
+X019633Y017615D01*
+X019883Y017615D01*
+X019988Y017658D01*
+X019988Y017659D01*
+X019988Y017658D01*
+X020033Y017640D01*
+X020093Y017615D01*
+X020412Y017615D01*
+X020516Y017658D01*
+X020519Y017661D01*
+X020507Y017638D01*
+X020484Y017567D01*
+X020473Y017495D01*
+X020910Y017495D01*
+X020910Y017415D01*
+X020990Y017415D01*
+X020990Y017495D01*
+X021427Y017495D01*
+X021416Y017567D01*
+X021393Y017638D01*
+X021358Y017705D01*
+X021314Y017766D01*
+X021261Y017819D01*
+X021200Y017863D01*
+X021133Y017898D01*
+X021122Y017901D01*
+X021277Y017965D01*
+X021440Y018128D01*
+X021450Y018153D01*
+X021460Y018128D01*
+X021623Y017965D01*
+X021778Y017901D01*
+X021767Y017898D01*
+X021700Y017863D01*
+X021639Y017819D01*
+X021586Y017766D01*
+X021542Y017705D01*
+X021507Y017638D01*
+X021484Y017567D01*
+X021473Y017495D01*
+X021910Y017495D01*
+X021910Y017415D01*
+X021990Y017415D01*
+X021990Y017495D01*
+X022427Y017495D01*
+X022416Y017567D01*
+X022393Y017638D01*
+X022358Y017705D01*
+X022314Y017766D01*
+X022261Y017819D01*
+X022200Y017863D01*
+X022133Y017898D01*
+X022122Y017901D01*
+X022277Y017965D01*
+X022440Y018128D01*
+X022450Y018153D01*
+X022460Y018128D01*
+X022623Y017965D01*
+X022778Y017901D01*
+X022767Y017898D01*
+X022700Y017863D01*
+X022639Y017819D01*
+X022586Y017766D01*
+X022542Y017705D01*
+X022507Y017638D01*
+X022484Y017567D01*
+X022473Y017495D01*
+X022910Y017495D01*
+X022910Y017415D01*
+X022990Y017415D01*
+X022990Y016978D01*
+X023062Y016989D01*
+X023133Y017012D01*
+X023170Y017031D01*
+X023170Y011404D01*
+X023021Y011404D01*
+X022874Y011343D01*
+X022762Y011231D01*
+X022701Y011084D01*
+X022701Y010926D01*
+X022762Y010779D01*
+X022820Y010721D01*
+X022820Y009995D01*
+X022679Y010054D01*
+X022521Y010054D01*
+X022374Y009993D01*
+X022325Y009944D01*
+X022180Y010003D01*
+X022180Y010811D01*
+X022137Y010914D01*
+X022059Y010992D01*
+X021780Y011271D01*
+X021780Y013789D01*
+X022087Y014096D01*
+X022130Y014199D01*
+X022130Y014821D01*
+X022188Y014879D01*
+X022249Y015026D01*
+X022249Y015184D01*
+X022188Y015331D01*
+X022076Y015443D01*
+X021929Y015504D01*
+X021771Y015504D01*
+X021624Y015443D01*
+X021549Y015368D01*
+X021549Y015434D01*
+X021488Y015581D01*
+X021376Y015693D01*
+X021229Y015754D01*
+X021071Y015754D01*
+X020924Y015693D01*
+X020812Y015581D01*
+X020751Y015434D01*
+X020751Y015276D01*
+X020812Y015129D01*
+X020870Y015071D01*
+X020870Y011745D01*
+X020729Y011804D01*
+X020571Y011804D01*
+X020424Y011743D01*
+X020312Y011631D01*
+X020251Y011484D01*
+X020251Y011326D01*
+X020312Y011179D01*
+X020424Y011067D01*
+X020571Y011006D01*
+X020701Y011006D01*
+X020701Y010976D01*
+X020762Y010829D01*
+X020874Y010717D01*
+X021021Y010656D01*
+X021179Y010656D01*
+X021326Y010717D01*
+X021434Y010825D01*
+X021620Y010639D01*
+X021620Y010171D01*
+X021563Y010114D01*
+X021520Y010011D01*
+X021520Y010004D01*
+X021421Y010004D01*
+X021274Y009943D01*
+X021162Y009831D01*
+X021101Y009684D01*
+X021101Y009574D01*
+X021029Y009604D01*
+X020871Y009604D01*
+X020724Y009543D01*
+X020612Y009431D01*
+X020551Y009284D01*
+X020551Y009202D01*
+X020513Y009164D01*
+X020470Y009061D01*
+X020470Y008549D01*
+X020513Y008446D01*
+X020520Y008439D01*
+X020520Y007437D01*
+X020479Y007454D01*
+X020321Y007454D01*
+X020174Y007393D01*
+X020062Y007281D01*
+X020001Y007134D01*
+X020001Y007025D01*
+X019924Y006993D01*
+X019812Y006881D01*
+X019751Y006734D01*
+X019751Y006576D01*
+X019812Y006429D01*
+X019830Y006411D01*
+X019830Y004538D01*
+X019829Y004536D01*
+X019780Y004419D01*
+X019780Y002791D01*
+X019829Y002674D01*
+X020151Y002351D01*
+X020151Y002326D01*
+X020212Y002179D01*
+X020324Y002067D01*
+X020471Y002006D01*
+X020629Y002006D01*
+X020776Y002067D01*
+X020888Y002179D01*
+X020949Y002326D01*
+X020949Y002484D01*
+X020888Y002631D01*
+X020776Y002743D01*
+X020629Y002804D01*
+X020604Y002804D01*
+X020451Y002956D01*
+X020529Y002956D01*
+X020676Y003017D01*
+X020788Y003129D01*
+X020849Y003276D01*
+X020849Y003434D01*
+X020788Y003581D01*
+X020772Y003597D01*
+X020871Y003556D01*
+X021029Y003556D01*
+X021176Y003617D01*
+X021220Y003661D01*
+X021220Y003199D01*
+X021263Y003096D01*
+X021813Y002546D01*
+X021891Y002468D01*
+X021994Y002425D01*
+X021910Y002460D02*
+X020949Y002460D01*
+X020949Y002382D02*
+X032200Y002382D01*
+X032200Y002460D02*
+X025040Y002460D01*
+X025129Y002539D02*
+X032200Y002539D01*
+X032200Y002617D02*
+X025208Y002617D01*
+X025286Y002696D02*
+X032200Y002696D01*
+X032200Y002774D02*
+X025365Y002774D01*
+X025443Y002853D02*
+X032200Y002853D01*
+X032200Y002931D02*
+X026940Y002931D01*
+X027018Y003010D02*
+X032200Y003010D01*
+X032200Y003088D02*
+X027825Y003088D01*
+X027921Y003167D02*
+X032200Y003167D01*
+X032200Y003245D02*
+X029423Y003245D01*
+X029532Y003324D02*
+X032200Y003324D01*
+X032200Y003402D02*
+X029643Y003402D01*
+X029721Y003481D02*
+X032200Y003481D01*
+X032200Y003559D02*
+X029800Y003559D01*
+X029878Y003638D02*
+X032200Y003638D01*
+X032200Y003716D02*
+X029957Y003716D01*
+X030035Y003795D02*
+X032200Y003795D01*
+X032200Y003873D02*
+X030069Y003873D01*
+X030080Y003952D02*
+X032200Y003952D01*
+X032200Y004030D02*
+X031287Y004030D01*
+X031417Y004109D02*
+X032200Y004109D01*
+X032200Y004187D02*
+X031491Y004187D01*
+X031524Y004266D02*
+X032200Y004266D01*
+X032200Y004344D02*
+X031549Y004344D01*
+X031549Y004423D02*
+X032200Y004423D01*
+X032200Y004501D02*
+X031542Y004501D01*
+X031509Y004580D02*
+X032200Y004580D01*
+X032200Y004658D02*
+X031461Y004658D01*
+X031382Y004737D02*
+X032200Y004737D01*
+X032200Y004815D02*
+X031424Y004815D01*
+X031465Y004894D02*
+X032200Y004894D01*
+X032200Y004972D02*
+X031497Y004972D01*
+X031499Y005051D02*
+X032200Y005051D01*
+X032200Y005129D02*
+X031499Y005129D01*
+X031468Y005208D02*
+X032200Y005208D01*
+X032200Y005286D02*
+X031433Y005286D01*
+X031354Y005365D02*
+X032200Y005365D01*
+X032200Y005443D02*
+X031502Y005443D01*
+X031580Y005522D02*
+X032200Y005522D01*
+X032200Y005600D02*
+X031617Y005600D01*
+X031649Y005679D02*
+X032200Y005679D01*
+X032200Y005757D02*
+X032031Y005757D01*
+X031869Y005757D02*
+X031649Y005757D01*
+X031648Y005836D02*
+X031706Y005836D01*
+X031627Y005914D02*
+X031616Y005914D01*
+X031586Y005993D02*
+X031576Y005993D01*
+X031553Y006071D02*
+X031498Y006071D01*
+X031499Y006150D02*
+X031551Y006150D01*
+X031551Y006228D02*
+X031499Y006228D01*
+X031469Y006307D02*
+X031581Y006307D01*
+X031616Y006385D02*
+X031434Y006385D01*
+X031380Y006464D02*
+X031670Y006464D01*
+X031670Y006542D02*
+X031380Y006542D01*
+X031380Y006621D02*
+X031638Y006621D01*
+X031560Y006699D02*
+X031380Y006699D01*
+X031380Y006778D02*
+X031481Y006778D01*
+X031403Y006856D02*
+X031380Y006856D01*
+X031550Y007105D02*
+X031550Y010155D01*
+X031700Y010305D01*
+X031700Y012855D01*
+X031200Y013355D01*
+X031599Y013372D02*
+X032200Y013372D01*
+X032200Y013450D02*
+X031592Y013450D01*
+X031560Y013529D02*
+X032200Y013529D01*
+X032200Y013607D02*
+X031512Y013607D01*
+X031433Y013686D02*
+X032200Y013686D01*
+X032200Y013764D02*
+X031030Y013764D01*
+X031030Y013843D02*
+X032200Y013843D01*
+X032200Y013921D02*
+X031030Y013921D01*
+X031030Y014000D02*
+X032200Y014000D01*
+X032200Y014078D02*
+X031030Y014078D01*
+X031030Y014157D02*
+X032200Y014157D01*
+X032200Y014235D02*
+X031030Y014235D01*
+X031030Y014314D02*
+X032200Y014314D01*
+X032200Y014392D02*
+X031030Y014392D01*
+X031030Y014471D02*
+X032200Y014471D01*
+X032200Y014549D02*
+X031030Y014549D01*
+X031030Y014628D02*
+X032200Y014628D01*
+X032200Y014706D02*
+X031030Y014706D01*
+X031030Y014785D02*
+X032200Y014785D01*
+X032200Y014863D02*
+X031030Y014863D01*
+X031030Y014942D02*
+X032200Y014942D01*
+X032200Y015020D02*
+X031030Y015020D01*
+X031030Y015099D02*
+X032200Y015099D01*
+X032200Y015177D02*
+X031030Y015177D01*
+X031030Y015256D02*
+X032200Y015256D01*
+X032200Y015334D02*
+X031030Y015334D01*
+X031030Y015413D02*
+X032200Y015413D01*
+X032200Y015491D02*
+X031032Y015491D01*
+X031111Y015570D02*
+X032200Y015570D01*
+X032200Y015648D02*
+X031159Y015648D01*
+X031180Y015727D02*
+X032200Y015727D01*
+X032200Y015805D02*
+X031180Y015805D01*
+X031180Y015884D02*
+X032200Y015884D01*
+X032200Y015962D02*
+X031180Y015962D01*
+X031180Y016041D02*
+X032200Y016041D01*
+X032200Y016119D02*
+X031177Y016119D01*
+X031144Y016198D02*
+X032200Y016198D01*
+X032200Y016276D02*
+X031075Y016276D01*
+X030996Y016355D02*
+X032200Y016355D01*
+X032200Y016433D02*
+X030918Y016433D01*
+X030839Y016512D02*
+X032200Y016512D01*
+X032200Y016590D02*
+X027730Y016590D01*
+X027730Y016512D02*
+X030161Y016512D01*
+X030082Y016433D02*
+X027730Y016433D01*
+X027730Y016355D02*
+X030004Y016355D01*
+X029925Y016276D02*
+X027730Y016276D01*
+X027730Y016198D02*
+X029885Y016198D01*
+X029870Y016119D02*
+X027730Y016119D01*
+X027730Y016041D02*
+X029870Y016041D01*
+X029804Y015962D02*
+X027730Y015962D01*
+X027730Y015884D02*
+X029772Y015884D01*
+X029751Y015805D02*
+X027730Y015805D01*
+X027730Y015727D02*
+X028555Y015727D01*
+X028429Y015648D02*
+X027730Y015648D01*
+X027730Y015570D02*
+X028357Y015570D01*
+X028325Y015491D02*
+X028010Y015491D01*
+X028156Y015413D02*
+X028301Y015413D01*
+X028301Y015334D02*
+X028235Y015334D01*
+X028269Y015256D02*
+X028310Y015256D01*
+X028299Y015177D02*
+X028342Y015177D01*
+X028299Y015099D02*
+X028393Y015099D01*
+X028471Y015020D02*
+X028296Y015020D01*
+X028264Y014942D02*
+X028620Y014942D01*
+X028620Y014863D02*
+X028260Y014863D01*
+X028260Y014785D02*
+X028620Y014785D01*
+X028620Y014706D02*
+X028260Y014706D01*
+X028260Y014628D02*
+X028620Y014628D01*
+X028620Y014549D02*
+X028260Y014549D01*
+X028260Y014471D02*
+X028620Y014471D01*
+X028620Y014392D02*
+X028260Y014392D01*
+X028260Y014314D02*
+X028620Y014314D01*
+X028620Y014235D02*
+X028260Y014235D01*
+X028260Y014157D02*
+X028357Y014157D01*
+X028550Y013805D02*
+X028700Y013655D01*
+X028700Y004955D01*
+X028850Y004805D01*
+X029200Y004805D01*
+X029300Y005205D02*
+X029800Y004705D01*
+X029800Y003955D01*
+X029450Y003605D01*
+X029250Y003605D01*
+X028968Y003324D02*
+X028882Y003324D01*
+X028773Y003245D02*
+X029077Y003245D01*
+X028427Y003245D02*
+X027999Y003245D01*
+X028078Y003324D02*
+X028318Y003324D01*
+X028252Y003402D02*
+X028156Y003402D01*
+X028217Y003481D02*
+X028220Y003481D01*
+X028450Y004205D02*
+X028450Y009405D01*
+X028300Y009555D01*
+X029180Y009525D02*
+X029920Y009525D01*
+X029920Y009447D02*
+X029180Y009447D01*
+X029180Y009368D02*
+X029920Y009368D01*
+X029920Y009290D02*
+X029180Y009290D01*
+X029180Y009211D02*
+X029920Y009211D01*
+X029920Y009133D02*
+X029180Y009133D01*
+X029180Y009054D02*
+X029920Y009054D01*
+X029920Y008976D02*
+X029180Y008976D01*
+X029180Y008897D02*
+X029920Y008897D01*
+X029920Y008819D02*
+X029180Y008819D01*
+X029180Y008740D02*
+X029920Y008740D01*
+X029920Y008662D02*
+X029180Y008662D01*
+X029180Y008583D02*
+X029920Y008583D01*
+X029920Y008505D02*
+X029180Y008505D01*
+X029180Y008426D02*
+X029920Y008426D01*
+X029920Y008348D02*
+X029180Y008348D01*
+X029180Y008269D02*
+X029920Y008269D01*
+X029920Y008191D02*
+X029180Y008191D01*
+X029180Y008112D02*
+X029920Y008112D01*
+X029920Y008034D02*
+X029180Y008034D01*
+X029180Y007955D02*
+X029920Y007955D01*
+X029920Y007877D02*
+X029180Y007877D01*
+X029180Y007798D02*
+X029920Y007798D01*
+X029920Y007720D02*
+X029180Y007720D01*
+X029180Y007641D02*
+X029920Y007641D01*
+X029920Y007563D02*
+X029180Y007563D01*
+X029180Y007484D02*
+X029920Y007484D01*
+X029920Y007406D02*
+X029180Y007406D01*
+X029180Y007327D02*
+X029920Y007327D01*
+X029920Y007249D02*
+X029180Y007249D01*
+X029180Y007170D02*
+X029920Y007170D01*
+X029920Y007092D02*
+X029180Y007092D01*
+X029180Y007013D02*
+X029920Y007013D01*
+X029920Y006935D02*
+X029180Y006935D01*
+X029180Y006856D02*
+X029920Y006856D01*
+X029920Y006778D02*
+X029180Y006778D01*
+X029180Y006699D02*
+X029920Y006699D01*
+X029920Y006621D02*
+X029180Y006621D01*
+X029180Y006542D02*
+X029920Y006542D01*
+X029920Y006464D02*
+X029180Y006464D01*
+X029180Y006385D02*
+X029920Y006385D01*
+X029920Y006307D02*
+X029180Y006307D01*
+X029180Y006228D02*
+X029920Y006228D01*
+X029920Y006150D02*
+X029180Y006150D01*
+X029180Y006071D02*
+X029920Y006071D01*
+X029920Y005993D02*
+X029180Y005993D01*
+X029180Y005914D02*
+X029920Y005914D01*
+X029920Y005836D02*
+X029433Y005836D01*
+X029250Y005555D02*
+X029200Y005505D01*
+X029250Y005555D02*
+X030050Y005555D01*
+X030200Y005705D01*
+X030200Y010055D01*
+X029950Y010305D01*
+X029950Y012905D01*
+X030200Y013155D01*
+X030200Y014455D01*
+X029827Y014314D02*
+X029180Y014314D01*
+X029180Y014392D02*
+X029801Y014392D01*
+X029801Y014471D02*
+X029180Y014471D01*
+X029180Y014549D02*
+X029807Y014549D01*
+X029840Y014628D02*
+X029180Y014628D01*
+X029180Y014706D02*
+X029887Y014706D01*
+X029966Y014785D02*
+X029180Y014785D01*
+X029180Y014863D02*
+X030270Y014863D01*
+X030270Y014942D02*
+X029180Y014942D01*
+X029180Y015020D02*
+X030270Y015020D01*
+X030270Y015099D02*
+X029180Y015099D01*
+X029180Y015177D02*
+X030270Y015177D01*
+X030270Y015256D02*
+X029161Y015256D01*
+X029117Y015334D02*
+X030270Y015334D01*
+X029935Y015413D02*
+X029099Y015413D01*
+X029075Y015491D02*
+X029850Y015491D01*
+X029795Y015570D02*
+X029043Y015570D01*
+X028971Y015648D02*
+X029763Y015648D01*
+X029751Y015727D02*
+X028845Y015727D01*
+X028700Y015355D02*
+X028900Y015155D01*
+X028900Y005355D01*
+X029050Y005205D01*
+X029300Y005205D01*
+X029693Y005208D02*
+X030270Y005208D01*
+X030270Y005286D02*
+X030132Y005286D01*
+X030255Y005365D02*
+X030270Y005365D01*
+X030270Y005129D02*
+X029772Y005129D01*
+X029850Y005051D02*
+X030270Y005051D01*
+X030270Y004972D02*
+X029929Y004972D01*
+X030007Y004894D02*
+X030293Y004894D01*
+X030344Y004815D02*
+X030058Y004815D01*
+X030080Y004737D02*
+X030423Y004737D01*
+X030501Y004658D02*
+X030080Y004658D01*
+X030080Y004580D02*
+X030580Y004580D01*
+X030658Y004501D02*
+X030080Y004501D01*
+X030080Y004423D02*
+X030737Y004423D01*
+X030751Y004344D02*
+X030080Y004344D01*
+X030080Y004266D02*
+X030776Y004266D01*
+X030809Y004187D02*
+X030080Y004187D01*
+X030080Y004109D02*
+X030883Y004109D01*
+X031013Y004030D02*
+X030080Y004030D01*
+X030550Y005005D02*
+X031150Y004405D01*
+X031100Y005055D02*
+X030750Y005405D01*
+X030750Y011905D01*
+X031150Y011905D01*
+X030750Y011905D02*
+X030750Y015605D01*
+X030900Y015755D01*
+X030900Y016055D01*
+X030650Y016305D01*
+X030350Y016305D01*
+X030150Y016105D01*
+X030150Y015755D01*
+X030550Y015955D02*
+X030550Y011905D01*
+X030250Y011905D01*
+X030550Y011905D02*
+X030550Y005005D01*
+X032194Y005836D02*
+X032200Y005836D01*
+X031950Y006155D02*
+X031950Y006705D01*
+X031550Y007105D01*
+X031830Y007249D02*
+X032200Y007249D01*
+X032200Y007327D02*
+X031830Y007327D01*
+X031830Y007406D02*
+X032200Y007406D01*
+X032200Y007484D02*
+X031830Y007484D01*
+X031830Y007563D02*
+X032200Y007563D01*
+X032200Y007641D02*
+X031830Y007641D01*
+X031830Y007720D02*
+X032200Y007720D01*
+X032200Y007798D02*
+X031830Y007798D01*
+X031830Y007877D02*
+X032200Y007877D01*
+X032200Y007955D02*
+X031830Y007955D01*
+X031830Y008034D02*
+X032200Y008034D01*
+X032200Y008112D02*
+X031830Y008112D01*
+X031830Y008191D02*
+X032200Y008191D01*
+X032200Y008269D02*
+X031830Y008269D01*
+X031830Y008348D02*
+X032200Y008348D01*
+X032200Y008426D02*
+X031830Y008426D01*
+X031830Y008505D02*
+X032200Y008505D01*
+X032200Y008583D02*
+X031830Y008583D01*
+X031830Y008662D02*
+X032200Y008662D01*
+X032200Y008740D02*
+X031830Y008740D01*
+X031830Y008819D02*
+X032200Y008819D01*
+X032200Y008897D02*
+X031830Y008897D01*
+X031830Y008976D02*
+X032200Y008976D01*
+X032200Y009054D02*
+X031830Y009054D01*
+X031830Y009133D02*
+X032200Y009133D01*
+X032200Y009211D02*
+X031830Y009211D01*
+X031830Y009290D02*
+X032200Y009290D01*
+X032200Y009368D02*
+X031830Y009368D01*
+X031830Y009447D02*
+X032200Y009447D01*
+X032200Y009525D02*
+X031830Y009525D01*
+X031830Y009604D02*
+X032200Y009604D01*
+X032200Y009682D02*
+X031830Y009682D01*
+X031830Y009761D02*
+X032200Y009761D01*
+X032200Y009839D02*
+X031830Y009839D01*
+X031830Y009918D02*
+X032200Y009918D01*
+X032200Y009996D02*
+X031830Y009996D01*
+X031866Y010075D02*
+X032200Y010075D01*
+X032200Y010153D02*
+X031940Y010153D01*
+X031973Y010232D02*
+X032200Y010232D01*
+X032200Y010310D02*
+X031980Y010310D01*
+X031980Y010389D02*
+X032200Y010389D01*
+X032200Y010467D02*
+X031980Y010467D01*
+X031980Y010546D02*
+X032200Y010546D01*
+X032200Y010624D02*
+X031980Y010624D01*
+X031980Y010703D02*
+X032200Y010703D01*
+X032200Y010781D02*
+X031980Y010781D01*
+X031980Y010860D02*
+X032200Y010860D01*
+X032200Y010938D02*
+X031980Y010938D01*
+X031980Y011017D02*
+X032200Y011017D01*
+X032200Y011095D02*
+X031980Y011095D01*
+X031980Y011174D02*
+X032200Y011174D01*
+X032200Y011252D02*
+X031980Y011252D01*
+X031980Y011331D02*
+X032200Y011331D01*
+X032200Y011409D02*
+X031980Y011409D01*
+X031980Y011488D02*
+X032200Y011488D01*
+X032200Y011566D02*
+X031980Y011566D01*
+X031980Y011645D02*
+X032200Y011645D01*
+X032200Y011723D02*
+X031980Y011723D01*
+X031980Y011802D02*
+X032200Y011802D01*
+X032200Y011880D02*
+X031980Y011880D01*
+X031980Y011959D02*
+X032200Y011959D01*
+X032200Y012037D02*
+X031980Y012037D01*
+X031980Y012116D02*
+X032200Y012116D01*
+X032200Y012194D02*
+X031980Y012194D01*
+X031980Y012273D02*
+X032200Y012273D01*
+X032200Y012351D02*
+X031980Y012351D01*
+X031980Y012430D02*
+X032200Y012430D01*
+X032200Y012508D02*
+X031980Y012508D01*
+X031980Y012587D02*
+X032200Y012587D01*
+X032200Y012665D02*
+X031980Y012665D01*
+X031980Y012744D02*
+X032200Y012744D01*
+X032200Y012822D02*
+X031980Y012822D01*
+X031980Y012901D02*
+X032200Y012901D01*
+X032200Y012979D02*
+X031952Y012979D01*
+X031893Y013058D02*
+X032200Y013058D01*
+X032200Y013136D02*
+X031815Y013136D01*
+X031736Y013215D02*
+X032200Y013215D01*
+X032200Y013293D02*
+X031658Y013293D01*
+X029920Y013293D02*
+X029180Y013293D01*
+X029180Y013215D02*
+X029864Y013215D01*
+X029791Y013142D02*
+X029791Y013142D01*
+X029785Y013136D02*
+X029180Y013136D01*
+X029180Y013058D02*
+X029710Y013058D01*
+X029678Y012979D02*
+X029180Y012979D01*
+X029180Y012901D02*
+X029670Y012901D01*
+X029670Y012822D02*
+X029180Y012822D01*
+X029180Y012744D02*
+X029670Y012744D01*
+X029670Y012665D02*
+X029180Y012665D01*
+X029180Y012587D02*
+X029670Y012587D01*
+X029670Y012508D02*
+X029180Y012508D01*
+X029180Y012430D02*
+X029670Y012430D01*
+X029670Y012351D02*
+X029180Y012351D01*
+X029180Y012273D02*
+X029670Y012273D01*
+X029670Y012194D02*
+X029180Y012194D01*
+X029180Y012116D02*
+X029670Y012116D01*
+X029670Y012037D02*
+X029180Y012037D01*
+X029180Y011959D02*
+X029670Y011959D01*
+X029670Y011880D02*
+X029180Y011880D01*
+X029180Y011802D02*
+X029670Y011802D01*
+X029670Y011723D02*
+X029180Y011723D01*
+X029180Y011645D02*
+X029670Y011645D01*
+X029670Y011566D02*
+X029180Y011566D01*
+X029180Y011488D02*
+X029670Y011488D01*
+X029670Y011409D02*
+X029180Y011409D01*
+X029180Y011331D02*
+X029670Y011331D01*
+X029670Y011252D02*
+X029180Y011252D01*
+X029180Y011174D02*
+X029670Y011174D01*
+X029670Y011095D02*
+X029180Y011095D01*
+X029180Y011017D02*
+X029670Y011017D01*
+X029670Y010938D02*
+X029180Y010938D01*
+X029180Y010860D02*
+X029670Y010860D01*
+X029670Y010781D02*
+X029180Y010781D01*
+X029180Y010703D02*
+X029670Y010703D01*
+X029670Y010624D02*
+X029180Y010624D01*
+X029180Y010546D02*
+X029670Y010546D01*
+X029670Y010467D02*
+X029180Y010467D01*
+X029180Y010389D02*
+X029670Y010389D01*
+X029670Y010310D02*
+X029180Y010310D01*
+X029180Y010232D02*
+X029677Y010232D01*
+X029710Y010153D02*
+X029180Y010153D01*
+X029180Y010075D02*
+X029784Y010075D01*
+X029863Y009996D02*
+X029180Y009996D01*
+X029180Y009918D02*
+X029920Y009918D01*
+X029920Y009839D02*
+X029180Y009839D01*
+X029180Y009761D02*
+X029920Y009761D01*
+X029920Y009682D02*
+X029180Y009682D01*
+X029180Y009604D02*
+X029920Y009604D01*
+X031030Y009604D02*
+X031070Y009604D01*
+X031070Y009682D02*
+X031030Y009682D01*
+X031030Y009761D02*
+X031070Y009761D01*
+X031070Y009789D02*
+X031070Y007571D01*
+X031030Y007531D01*
+X031030Y009829D01*
+X031070Y009789D01*
+X031070Y009525D02*
+X031030Y009525D01*
+X031030Y009447D02*
+X031070Y009447D01*
+X031070Y009368D02*
+X031030Y009368D01*
+X031030Y009290D02*
+X031070Y009290D01*
+X031070Y009211D02*
+X031030Y009211D01*
+X031030Y009133D02*
+X031070Y009133D01*
+X031070Y009054D02*
+X031030Y009054D01*
+X031030Y008976D02*
+X031070Y008976D01*
+X031070Y008897D02*
+X031030Y008897D01*
+X031030Y008819D02*
+X031070Y008819D01*
+X031070Y008740D02*
+X031030Y008740D01*
+X031030Y008662D02*
+X031070Y008662D01*
+X031070Y008583D02*
+X031030Y008583D01*
+X031030Y008505D02*
+X031070Y008505D01*
+X031070Y008426D02*
+X031030Y008426D01*
+X031030Y008348D02*
+X031070Y008348D01*
+X031070Y008269D02*
+X031030Y008269D01*
+X031030Y008191D02*
+X031070Y008191D01*
+X031070Y008112D02*
+X031030Y008112D01*
+X031030Y008034D02*
+X031070Y008034D01*
+X031070Y007955D02*
+X031030Y007955D01*
+X031030Y007877D02*
+X031070Y007877D01*
+X031070Y007798D02*
+X031030Y007798D01*
+X031030Y007720D02*
+X031070Y007720D01*
+X031070Y007641D02*
+X031030Y007641D01*
+X031030Y007563D02*
+X031062Y007563D01*
+X031350Y007455D02*
+X031350Y009905D01*
+X031100Y010155D01*
+X031100Y010605D01*
+X026970Y010624D02*
+X026680Y010624D01*
+X026680Y010546D02*
+X026970Y010546D01*
+X026970Y010467D02*
+X026680Y010467D01*
+X026680Y010389D02*
+X026970Y010389D01*
+X026970Y010310D02*
+X026680Y010310D01*
+X026680Y010232D02*
+X026767Y010232D01*
+X026821Y010254D02*
+X026680Y010195D01*
+X026680Y011765D01*
+X026821Y011706D01*
+X026970Y011706D01*
+X026970Y010254D01*
+X026821Y010254D01*
+X026680Y010703D02*
+X026970Y010703D01*
+X026970Y010781D02*
+X026680Y010781D01*
+X026680Y010860D02*
+X026970Y010860D01*
+X026970Y010938D02*
+X026680Y010938D01*
+X026680Y011017D02*
+X026970Y011017D01*
+X026970Y011095D02*
+X026680Y011095D01*
+X026680Y011174D02*
+X026970Y011174D01*
+X026970Y011252D02*
+X026680Y011252D01*
+X026680Y011331D02*
+X026970Y011331D01*
+X026970Y011409D02*
+X026680Y011409D01*
+X026680Y011488D02*
+X026970Y011488D01*
+X026970Y011566D02*
+X026680Y011566D01*
+X026680Y011645D02*
+X026970Y011645D01*
+X026780Y011723D02*
+X026680Y011723D01*
+X026680Y012445D02*
+X026680Y014211D01*
+X026637Y014314D01*
+X026587Y014364D01*
+X026587Y014364D01*
+X026580Y014371D01*
+X026580Y014939D01*
+X026609Y014968D01*
+X026687Y015046D01*
+X026730Y015149D01*
+X026730Y016344D01*
+X026821Y016306D01*
+X026903Y016306D01*
+X026970Y016239D01*
+X026970Y012504D01*
+X026821Y012504D01*
+X026680Y012445D01*
+X026680Y012508D02*
+X026970Y012508D01*
+X026970Y012587D02*
+X026680Y012587D01*
+X026680Y012665D02*
+X026970Y012665D01*
+X026970Y012744D02*
+X026680Y012744D01*
+X026680Y012822D02*
+X026970Y012822D01*
+X026970Y012901D02*
+X026680Y012901D01*
+X026680Y012979D02*
+X026970Y012979D01*
+X026970Y013058D02*
+X026680Y013058D01*
+X026680Y013136D02*
+X026970Y013136D01*
+X026970Y013215D02*
+X026680Y013215D01*
+X026680Y013293D02*
+X026970Y013293D01*
+X026970Y013372D02*
+X026680Y013372D01*
+X026680Y013450D02*
+X026970Y013450D01*
+X026970Y013529D02*
+X026680Y013529D01*
+X026680Y013607D02*
+X026970Y013607D01*
+X026970Y013686D02*
+X026680Y013686D01*
+X026680Y013764D02*
+X026970Y013764D01*
+X026970Y013843D02*
+X026680Y013843D01*
+X026680Y013921D02*
+X026970Y013921D01*
+X026970Y014000D02*
+X026680Y014000D01*
+X026680Y014078D02*
+X026970Y014078D01*
+X026970Y014157D02*
+X026680Y014157D01*
+X026670Y014235D02*
+X026970Y014235D01*
+X026970Y014314D02*
+X026637Y014314D01*
+X026580Y014392D02*
+X026970Y014392D01*
+X026970Y014471D02*
+X026580Y014471D01*
+X026580Y014549D02*
+X026970Y014549D01*
+X026970Y014628D02*
+X026580Y014628D01*
+X026580Y014706D02*
+X026970Y014706D01*
+X026970Y014785D02*
+X026580Y014785D01*
+X026580Y014863D02*
+X026970Y014863D01*
+X026970Y014942D02*
+X026583Y014942D01*
+X026661Y015020D02*
+X026970Y015020D01*
+X026970Y015099D02*
+X026709Y015099D01*
+X026730Y015177D02*
+X026970Y015177D01*
+X026970Y015256D02*
+X026730Y015256D01*
+X026730Y015334D02*
+X026970Y015334D01*
+X026970Y015413D02*
+X026730Y015413D01*
+X026730Y015491D02*
+X026970Y015491D01*
+X026970Y015570D02*
+X026730Y015570D01*
+X026730Y015648D02*
+X026970Y015648D01*
+X026970Y015727D02*
+X026730Y015727D01*
+X026730Y015805D02*
+X026970Y015805D01*
+X026970Y015884D02*
+X026730Y015884D01*
+X026730Y015962D02*
+X026970Y015962D01*
+X026970Y016041D02*
+X026730Y016041D01*
+X026730Y016119D02*
+X026970Y016119D01*
+X026970Y016198D02*
+X026730Y016198D01*
+X026730Y016276D02*
+X026933Y016276D01*
+X027250Y016355D02*
+X027250Y005755D01*
+X027050Y005555D01*
+X026900Y005555D01*
+X026600Y005805D02*
+X026600Y004855D01*
+X026700Y004755D01*
+X026700Y003755D01*
+X026300Y003355D01*
+X026003Y003088D02*
+X025812Y003088D01*
+X025845Y003167D02*
+X025946Y003167D01*
+X025914Y003245D02*
+X025849Y003245D01*
+X025849Y003324D02*
+X025901Y003324D01*
+X025901Y003402D02*
+X025821Y003402D01*
+X025788Y003481D02*
+X025920Y003481D01*
+X025953Y003559D02*
+X025710Y003559D01*
+X025568Y003638D02*
+X026019Y003638D01*
+X026130Y003716D02*
+X024816Y003716D01*
+X024830Y003795D02*
+X026344Y003795D01*
+X026420Y003873D02*
+X024830Y003873D01*
+X024830Y003952D02*
+X026420Y003952D01*
+X026420Y004030D02*
+X024830Y004030D01*
+X024830Y004109D02*
+X026420Y004109D01*
+X026420Y004187D02*
+X024830Y004187D01*
+X024830Y004266D02*
+X026420Y004266D01*
+X026420Y004344D02*
+X024830Y004344D01*
+X024830Y004423D02*
+X026420Y004423D01*
+X026420Y004501D02*
+X024830Y004501D01*
+X025035Y004580D02*
+X026420Y004580D01*
+X026401Y004658D02*
+X025167Y004658D01*
+X025241Y004737D02*
+X026346Y004737D01*
+X026320Y004815D02*
+X025274Y004815D01*
+X025299Y004894D02*
+X026131Y004894D01*
+X026019Y004972D02*
+X025299Y004972D01*
+X025292Y005051D02*
+X025953Y005051D01*
+X025816Y005129D02*
+X025260Y005129D01*
+X025250Y005208D02*
+X025684Y005208D01*
+X025609Y005286D02*
+X025501Y005286D01*
+X025950Y005505D02*
+X025950Y007505D01*
+X025900Y007555D01*
+X026200Y007805D02*
+X026100Y007905D01*
+X026200Y007805D02*
+X026200Y005955D01*
+X026300Y005855D01*
+X026300Y005255D01*
+X027450Y005055D02*
+X027500Y005005D01*
+X027450Y005055D02*
+X027450Y019055D01*
+X027300Y019205D01*
+X024450Y019205D01*
+X023950Y018705D01*
+X023950Y018455D01*
+X024450Y018153D02*
+X024460Y018128D01*
+X024623Y017965D01*
+X024778Y017901D01*
+X024767Y017898D01*
+X024700Y017863D01*
+X024639Y017819D01*
+X024586Y017766D01*
+X024542Y017705D01*
+X024507Y017638D01*
+X024484Y017567D01*
+X024473Y017495D01*
+X024910Y017495D01*
+X024910Y017415D01*
+X024473Y017415D01*
+X024484Y017343D01*
+X024507Y017272D01*
+X024542Y017205D01*
+X024586Y017144D01*
+X024639Y017091D01*
+X024700Y017047D01*
+X024767Y017012D01*
+X024794Y017004D01*
+X024671Y017004D01*
+X024524Y016943D01*
+X024412Y016831D01*
+X024373Y016737D01*
+X024295Y016659D01*
+X024240Y016527D01*
+X024240Y015278D01*
+X024201Y015184D01*
+X024201Y015026D01*
+X024240Y014932D01*
+X024240Y013826D01*
+X024238Y013831D01*
+X024126Y013943D01*
+X023979Y014004D01*
+X023821Y014004D01*
+X023730Y013966D01*
+X023730Y017031D01*
+X023767Y017012D01*
+X023838Y016989D01*
+X023910Y016978D01*
+X023910Y017415D01*
+X023990Y017415D01*
+X023990Y017495D01*
+X024427Y017495D01*
+X024416Y017567D01*
+X024393Y017638D01*
+X024358Y017705D01*
+X024314Y017766D01*
+X024261Y017819D01*
+X024200Y017863D01*
+X024133Y017898D01*
+X024122Y017901D01*
+X024277Y017965D01*
+X024440Y018128D01*
+X024450Y018153D01*
+X024393Y018082D02*
+X024507Y018082D01*
+X024585Y018003D02*
+X024315Y018003D01*
+X024178Y017925D02*
+X024722Y017925D01*
+X024676Y017846D02*
+X024224Y017846D01*
+X024313Y017768D02*
+X024587Y017768D01*
+X024533Y017689D02*
+X024367Y017689D01*
+X024402Y017611D02*
+X024498Y017611D01*
+X024479Y017532D02*
+X024421Y017532D01*
+X024427Y017415D02*
+X023990Y017415D01*
+X023990Y016978D01*
+X024062Y016989D01*
+X024133Y017012D01*
+X024200Y017047D01*
+X024261Y017091D01*
+X024314Y017144D01*
+X024358Y017205D01*
+X024393Y017272D01*
+X024416Y017343D01*
+X024427Y017415D01*
+X024421Y017375D02*
+X024479Y017375D01*
+X024499Y017297D02*
+X024401Y017297D01*
+X024365Y017218D02*
+X024535Y017218D01*
+X024590Y017140D02*
+X024310Y017140D01*
+X024220Y017061D02*
+X024680Y017061D01*
+X024620Y016983D02*
+X024019Y016983D01*
+X023990Y016983D02*
+X023910Y016983D01*
+X023881Y016983D02*
+X023730Y016983D01*
+X023730Y016904D02*
+X024485Y016904D01*
+X024410Y016826D02*
+X023730Y016826D01*
+X023730Y016747D02*
+X024377Y016747D01*
+X024304Y016669D02*
+X023730Y016669D01*
+X023730Y016590D02*
+X024266Y016590D01*
+X024240Y016512D02*
+X023730Y016512D01*
+X023730Y016433D02*
+X024240Y016433D01*
+X024240Y016355D02*
+X023730Y016355D01*
+X023730Y016276D02*
+X024240Y016276D01*
+X024240Y016198D02*
+X023730Y016198D01*
+X023730Y016119D02*
+X024240Y016119D01*
+X024240Y016041D02*
+X023730Y016041D01*
+X023730Y015962D02*
+X024240Y015962D01*
+X024240Y015884D02*
+X023730Y015884D01*
+X023730Y015805D02*
+X024240Y015805D01*
+X024240Y015727D02*
+X023730Y015727D01*
+X023730Y015648D02*
+X024240Y015648D01*
+X024240Y015570D02*
+X023730Y015570D01*
+X023730Y015491D02*
+X024240Y015491D01*
+X024240Y015413D02*
+X023730Y015413D01*
+X023730Y015334D02*
+X024240Y015334D01*
+X024231Y015256D02*
+X023730Y015256D01*
+X023730Y015177D02*
+X024201Y015177D01*
+X024201Y015099D02*
+X023730Y015099D01*
+X023730Y015020D02*
+X024204Y015020D01*
+X024236Y014942D02*
+X023730Y014942D01*
+X023730Y014863D02*
+X024240Y014863D01*
+X024240Y014785D02*
+X023730Y014785D01*
+X023730Y014706D02*
+X024240Y014706D01*
+X024240Y014628D02*
+X023730Y014628D01*
+X023730Y014549D02*
+X024240Y014549D01*
+X024240Y014471D02*
+X023730Y014471D01*
+X023730Y014392D02*
+X024240Y014392D01*
+X024240Y014314D02*
+X023730Y014314D01*
+X023730Y014235D02*
+X024240Y014235D01*
+X024240Y014157D02*
+X023730Y014157D01*
+X023730Y014078D02*
+X024240Y014078D01*
+X024240Y014000D02*
+X023989Y014000D01*
+X024148Y013921D02*
+X024240Y013921D01*
+X024240Y013843D02*
+X024226Y013843D01*
+X023811Y014000D02*
+X023730Y014000D01*
+X023170Y014000D02*
+X021991Y014000D01*
+X022069Y014078D02*
+X023170Y014078D01*
+X023170Y014157D02*
+X022112Y014157D01*
+X022130Y014235D02*
+X023170Y014235D01*
+X023170Y014314D02*
+X022130Y014314D01*
+X022130Y014392D02*
+X023170Y014392D01*
+X023170Y014471D02*
+X022130Y014471D01*
+X022130Y014549D02*
+X023170Y014549D01*
+X023170Y014628D02*
+X022130Y014628D01*
+X022130Y014706D02*
+X023170Y014706D01*
+X023170Y014785D02*
+X022130Y014785D01*
+X022172Y014863D02*
+X023170Y014863D01*
+X023170Y014942D02*
+X022214Y014942D01*
+X022246Y015020D02*
+X023170Y015020D01*
+X023170Y015099D02*
+X022249Y015099D01*
+X022249Y015177D02*
+X023170Y015177D01*
+X023170Y015256D02*
+X022219Y015256D01*
+X022185Y015334D02*
+X023170Y015334D01*
+X023170Y015413D02*
+X022106Y015413D01*
+X021960Y015491D02*
+X023170Y015491D01*
+X023170Y015570D02*
+X021493Y015570D01*
+X021525Y015491D02*
+X021740Y015491D01*
+X021594Y015413D02*
+X021549Y015413D01*
+X021421Y015648D02*
+X023170Y015648D01*
+X023170Y015727D02*
+X021295Y015727D01*
+X021005Y015727D02*
+X020293Y015727D01*
+X020258Y015738D02*
+X020350Y015708D01*
+X020436Y015664D01*
+X020514Y015608D01*
+X020519Y015602D01*
+X020115Y015197D01*
+X020171Y015140D01*
+X020576Y014736D01*
+X020582Y014741D01*
+X020638Y014819D01*
+X020682Y014905D01*
+X020712Y014997D01*
+X020727Y015092D01*
+X020727Y015189D01*
+X020712Y015284D01*
+X020682Y015375D01*
+X020638Y015461D01*
+X020582Y015539D01*
+X020576Y015545D01*
+X020171Y015140D01*
+X020115Y015084D01*
+X020519Y014679D01*
+X020514Y014673D01*
+X020436Y014616D01*
+X020350Y014573D01*
+X020258Y014543D01*
+X020163Y014528D01*
+X020066Y014528D01*
+X019971Y014543D01*
+X019879Y014573D01*
+X019794Y014616D01*
+X019716Y014673D01*
+X019710Y014679D01*
+X020115Y015084D01*
+X020058Y015140D01*
+X019653Y014736D01*
+X019647Y014741D01*
+X019591Y014819D01*
+X019547Y014905D01*
+X019517Y014997D01*
+X019502Y015092D01*
+X019502Y015189D01*
+X019517Y015284D01*
+X019547Y015375D01*
+X019591Y015461D01*
+X019647Y015539D01*
+X019653Y015545D01*
+X020058Y015140D01*
+X020115Y015197D01*
+X019710Y015602D01*
+X019716Y015608D01*
+X019794Y015664D01*
+X019879Y015708D01*
+X019971Y015738D01*
+X020066Y015753D01*
+X020163Y015753D01*
+X020258Y015738D01*
+X020458Y015648D02*
+X020879Y015648D01*
+X020807Y015570D02*
+X020487Y015570D01*
+X020522Y015491D02*
+X020409Y015491D01*
+X020443Y015413D02*
+X020330Y015413D01*
+X020365Y015334D02*
+X020252Y015334D01*
+X020286Y015256D02*
+X020173Y015256D01*
+X020208Y015177D02*
+X020134Y015177D01*
+X020095Y015177D02*
+X020021Y015177D01*
+X020016Y015099D02*
+X020100Y015099D01*
+X020129Y015099D02*
+X020213Y015099D01*
+X020178Y015020D02*
+X020291Y015020D01*
+X020257Y014942D02*
+X020370Y014942D01*
+X020335Y014863D02*
+X020448Y014863D01*
+X020414Y014785D02*
+X020527Y014785D01*
+X020613Y014785D02*
+X020870Y014785D01*
+X020870Y014863D02*
+X020661Y014863D01*
+X020694Y014942D02*
+X020870Y014942D01*
+X020870Y015020D02*
+X020716Y015020D01*
+X020727Y015099D02*
+X020843Y015099D01*
+X020792Y015177D02*
+X020727Y015177D01*
+X020716Y015256D02*
+X020760Y015256D01*
+X020751Y015334D02*
+X020696Y015334D01*
+X020663Y015413D02*
+X020751Y015413D01*
+X020775Y015491D02*
+X020617Y015491D01*
+X020056Y015256D02*
+X019943Y015256D01*
+X019977Y015334D02*
+X019864Y015334D01*
+X019899Y015413D02*
+X019786Y015413D01*
+X019820Y015491D02*
+X019707Y015491D01*
+X019742Y015570D02*
+X019060Y015570D01*
+X019060Y015648D02*
+X019771Y015648D01*
+X019937Y015727D02*
+X019060Y015727D01*
+X019060Y015805D02*
+X023170Y015805D01*
+X023170Y015884D02*
+X019060Y015884D01*
+X019060Y015962D02*
+X023170Y015962D01*
+X023170Y016041D02*
+X019084Y016041D01*
+X019099Y016119D02*
+X023170Y016119D01*
+X023170Y016198D02*
+X019099Y016198D01*
+X019081Y016276D02*
+X023170Y016276D01*
+X023170Y016355D02*
+X019049Y016355D01*
+X018986Y016433D02*
+X023170Y016433D01*
+X023170Y016512D02*
+X018881Y016512D01*
+X018519Y016512D02*
+X016699Y016512D01*
+X016696Y016590D02*
+X023170Y016590D01*
+X023170Y016669D02*
+X016664Y016669D01*
+X016622Y016747D02*
+X023170Y016747D01*
+X023170Y016826D02*
+X016543Y016826D01*
+X016300Y016505D02*
+X016600Y016205D01*
+X016600Y014155D01*
+X015650Y013205D01*
+X015650Y007655D01*
+X017100Y006205D01*
+X017100Y005855D01*
+X017450Y005705D02*
+X017450Y008455D01*
+X017050Y008855D01*
+X017050Y009305D01*
+X017050Y009505D01*
+X017850Y010305D01*
+X018000Y010455D01*
+X018000Y010855D01*
+X017800Y011055D01*
+X017150Y011055D01*
+X016950Y011255D01*
+X016950Y012455D01*
+X017750Y013255D01*
+X017750Y015555D01*
+X018123Y015413D02*
+X018340Y015413D01*
+X018340Y015491D02*
+X018149Y015491D01*
+X018149Y015570D02*
+X018340Y015570D01*
+X018340Y015648D02*
+X018143Y015648D01*
+X018111Y015727D02*
+X018340Y015727D01*
+X018340Y015805D02*
+X018064Y015805D01*
+X017985Y015884D02*
+X018340Y015884D01*
+X018340Y015962D02*
+X016880Y015962D01*
+X016880Y015884D02*
+X017515Y015884D01*
+X017436Y015805D02*
+X016880Y015805D01*
+X016880Y015727D02*
+X017389Y015727D01*
+X017357Y015648D02*
+X016880Y015648D01*
+X017062Y015570D02*
+X017351Y015570D01*
+X017351Y015491D02*
+X017178Y015491D01*
+X017246Y015413D02*
+X017377Y015413D01*
+X017410Y015334D02*
+X017278Y015334D01*
+X017299Y015256D02*
+X017470Y015256D01*
+X017470Y015177D02*
+X017324Y015177D01*
+X017402Y015099D02*
+X017470Y015099D01*
+X017550Y014555D02*
+X016900Y015205D01*
+X016320Y015177D02*
+X015530Y015177D01*
+X015530Y015099D02*
+X016320Y015099D01*
+X016320Y015020D02*
+X015530Y015020D01*
+X015530Y014942D02*
+X016320Y014942D01*
+X016320Y014863D02*
+X015530Y014863D01*
+X015530Y014785D02*
+X016320Y014785D01*
+X016006Y014706D02*
+X015530Y014706D01*
+X015530Y014628D02*
+X015876Y014628D01*
+X015748Y014549D02*
+X015530Y014549D01*
+X015530Y014471D02*
+X015670Y014471D01*
+X015591Y014392D02*
+X015530Y014392D01*
+X015950Y014355D02*
+X016200Y014355D01*
+X015950Y014355D02*
+X015450Y013855D01*
+X015450Y007555D01*
+X016450Y006555D01*
+X016450Y005905D01*
+X016080Y005757D02*
+X015580Y005757D01*
+X015580Y005679D02*
+X016113Y005679D01*
+X016191Y005600D02*
+X015580Y005600D01*
+X015580Y005522D02*
+X016334Y005522D01*
+X016566Y005522D02*
+X016870Y005522D01*
+X016804Y005443D02*
+X015580Y005443D01*
+X015580Y005365D02*
+X016772Y005365D01*
+X016770Y005286D02*
+X015580Y005286D01*
+X015580Y005208D02*
+X016739Y005208D01*
+X016690Y005129D02*
+X015580Y005129D01*
+X015580Y005051D02*
+X016658Y005051D01*
+X016651Y004972D02*
+X015580Y004972D01*
+X015580Y004894D02*
+X016651Y004894D01*
+X016676Y004815D02*
+X015580Y004815D01*
+X015580Y004737D02*
+X016709Y004737D01*
+X016783Y004658D02*
+X015580Y004658D01*
+X015580Y004580D02*
+X016915Y004580D01*
+X017185Y004580D02*
+X017430Y004580D01*
+X017430Y004658D02*
+X017317Y004658D01*
+X017391Y004737D02*
+X017430Y004737D01*
+X017424Y004815D02*
+X017430Y004815D01*
+X017430Y004501D02*
+X015580Y004501D01*
+X015580Y004423D02*
+X016245Y004423D01*
+X016174Y004393D02*
+X016062Y004281D01*
+X016001Y004134D01*
+X016001Y003976D01*
+X016062Y003829D01*
+X016174Y003717D01*
+X016321Y003656D01*
+X016479Y003656D01*
+X016626Y003717D01*
+X016738Y003829D01*
+X016799Y003976D01*
+X016799Y004134D01*
+X016738Y004281D01*
+X016626Y004393D01*
+X016479Y004454D01*
+X016321Y004454D01*
+X016174Y004393D01*
+X016125Y004344D02*
+X015580Y004344D01*
+X015580Y004266D02*
+X016056Y004266D01*
+X016023Y004187D02*
+X015580Y004187D01*
+X015580Y004109D02*
+X016001Y004109D01*
+X016001Y004030D02*
+X015580Y004030D01*
+X015580Y003952D02*
+X016011Y003952D01*
+X016044Y003873D02*
+X015580Y003873D01*
+X015580Y003795D02*
+X016097Y003795D01*
+X016176Y003716D02*
+X015580Y003716D01*
+X015580Y003638D02*
+X017430Y003638D01*
+X017430Y003716D02*
+X016624Y003716D01*
+X016703Y003795D02*
+X017430Y003795D01*
+X017430Y003873D02*
+X016756Y003873D01*
+X016789Y003952D02*
+X017430Y003952D01*
+X017412Y004030D02*
+X016799Y004030D01*
+X016799Y004109D02*
+X017379Y004109D01*
+X017351Y004187D02*
+X016777Y004187D01*
+X016744Y004266D02*
+X017351Y004266D01*
+X017355Y004344D02*
+X016675Y004344D01*
+X016555Y004423D02*
+X017388Y004423D01*
+X017700Y004255D02*
+X017750Y004205D01*
+X017750Y004255D02*
+X017700Y004255D01*
+X018070Y004501D02*
+X018340Y004501D01*
+X018340Y004423D02*
+X018112Y004423D01*
+X018145Y004344D02*
+X018340Y004344D01*
+X018340Y004266D02*
+X018149Y004266D01*
+X018149Y004187D02*
+X018340Y004187D01*
+X018340Y004109D02*
+X018121Y004109D01*
+X018088Y004030D02*
+X018163Y004030D01*
+X018070Y004580D02*
+X018340Y004580D01*
+X018340Y004658D02*
+X018070Y004658D01*
+X018070Y004737D02*
+X018340Y004737D01*
+X018340Y004815D02*
+X018070Y004815D01*
+X018070Y004894D02*
+X018340Y004894D01*
+X018340Y004972D02*
+X018070Y004972D01*
+X018070Y005051D02*
+X018340Y005051D01*
+X018340Y005129D02*
+X018070Y005129D01*
+X018070Y005208D02*
+X018340Y005208D01*
+X018340Y005286D02*
+X018070Y005286D01*
+X018070Y005365D02*
+X018340Y005365D01*
+X018340Y005443D02*
+X018070Y005443D01*
+X018070Y005522D02*
+X018340Y005522D01*
+X018340Y005600D02*
+X018070Y005600D01*
+X018070Y005679D02*
+X018340Y005679D01*
+X018340Y005757D02*
+X018070Y005757D01*
+X018070Y005836D02*
+X018340Y005836D01*
+X018340Y005914D02*
+X018070Y005914D01*
+X018070Y005993D02*
+X018340Y005993D01*
+X018340Y006071D02*
+X018070Y006071D01*
+X018070Y006150D02*
+X018340Y006150D01*
+X018340Y006228D02*
+X018070Y006228D01*
+X018070Y006307D02*
+X018340Y006307D01*
+X018340Y006385D02*
+X018090Y006385D01*
+X018123Y006464D02*
+X018340Y006464D01*
+X018340Y006542D02*
+X018149Y006542D01*
+X018149Y006621D02*
+X018340Y006621D01*
+X018340Y006699D02*
+X018143Y006699D01*
+X018110Y006778D02*
+X018340Y006778D01*
+X018340Y006856D02*
+X018063Y006856D01*
+X017984Y006935D02*
+X018340Y006935D01*
+X018340Y007013D02*
+X017730Y007013D01*
+X017730Y007092D02*
+X018340Y007092D01*
+X018340Y007170D02*
+X017730Y007170D01*
+X017730Y007249D02*
+X018340Y007249D01*
+X018340Y007327D02*
+X017730Y007327D01*
+X017730Y007406D02*
+X018340Y007406D01*
+X018340Y007484D02*
+X017730Y007484D01*
+X017730Y007563D02*
+X018340Y007563D01*
+X018340Y007641D02*
+X017730Y007641D01*
+X017730Y007720D02*
+X018340Y007720D01*
+X018340Y007798D02*
+X017730Y007798D01*
+X017730Y007877D02*
+X018340Y007877D01*
+X018340Y007955D02*
+X017730Y007955D01*
+X017730Y008034D02*
+X018340Y008034D01*
+X018340Y008112D02*
+X017730Y008112D01*
+X017730Y008191D02*
+X018340Y008191D01*
+X018340Y008269D02*
+X017730Y008269D01*
+X017730Y008348D02*
+X018340Y008348D01*
+X018340Y008426D02*
+X017730Y008426D01*
+X017730Y008505D02*
+X018340Y008505D01*
+X018340Y008583D02*
+X017700Y008583D01*
+X017639Y008662D02*
+X018340Y008662D01*
+X018340Y008740D02*
+X017561Y008740D01*
+X017927Y008819D02*
+X018340Y008819D01*
+X018340Y008897D02*
+X018006Y008897D01*
+X018057Y008976D02*
+X018340Y008976D01*
+X018340Y009054D02*
+X018090Y009054D01*
+X018099Y009133D02*
+X018340Y009133D01*
+X018340Y009211D02*
+X018099Y009211D01*
+X018076Y009290D02*
+X018340Y009290D01*
+X018340Y009368D02*
+X018043Y009368D01*
+X017972Y009447D02*
+X018340Y009447D01*
+X018340Y009525D02*
+X017849Y009525D01*
+X017623Y009682D02*
+X018340Y009682D01*
+X018340Y009604D02*
+X017545Y009604D01*
+X017551Y009525D02*
+X017466Y009525D01*
+X017428Y009447D02*
+X017388Y009447D01*
+X017357Y009368D02*
+X017330Y009368D01*
+X017050Y009355D02*
+X017050Y009305D01*
+X016570Y009290D02*
+X016511Y009290D01*
+X016570Y009231D02*
+X016380Y009421D01*
+X016380Y012689D01*
+X016456Y012765D01*
+X016512Y012629D01*
+X016624Y012517D01*
+X016670Y012498D01*
+X016670Y011199D01*
+X016713Y011096D01*
+X016913Y010896D01*
+X016991Y010818D01*
+X017009Y010810D01*
+X016613Y010414D01*
+X016570Y010311D01*
+X016570Y009231D01*
+X016570Y009368D02*
+X016433Y009368D01*
+X016380Y009447D02*
+X016570Y009447D01*
+X016570Y009525D02*
+X016380Y009525D01*
+X016380Y009604D02*
+X016570Y009604D01*
+X016570Y009682D02*
+X016380Y009682D01*
+X016380Y009761D02*
+X016570Y009761D01*
+X016570Y009839D02*
+X016380Y009839D01*
+X016380Y009918D02*
+X016570Y009918D01*
+X016570Y009996D02*
+X016380Y009996D01*
+X016380Y010075D02*
+X016570Y010075D01*
+X016570Y010153D02*
+X016380Y010153D01*
+X016380Y010232D02*
+X016570Y010232D01*
+X016570Y010310D02*
+X016380Y010310D01*
+X016380Y010389D02*
+X016602Y010389D01*
+X016666Y010467D02*
+X016380Y010467D01*
+X016380Y010546D02*
+X016745Y010546D01*
+X016823Y010624D02*
+X016380Y010624D01*
+X016380Y010703D02*
+X016902Y010703D01*
+X016980Y010781D02*
+X016380Y010781D01*
+X016380Y010860D02*
+X016949Y010860D01*
+X016913Y010896D02*
+X016913Y010896D01*
+X016871Y010938D02*
+X016380Y010938D01*
+X016380Y011017D02*
+X016792Y011017D01*
+X016714Y011095D02*
+X016380Y011095D01*
+X016380Y011174D02*
+X016681Y011174D01*
+X016670Y011252D02*
+X016380Y011252D01*
+X016380Y011331D02*
+X016670Y011331D01*
+X016670Y011409D02*
+X016380Y011409D01*
+X016380Y011488D02*
+X016670Y011488D01*
+X016670Y011566D02*
+X016380Y011566D01*
+X016380Y011645D02*
+X016670Y011645D01*
+X016670Y011723D02*
+X016380Y011723D01*
+X016380Y011802D02*
+X016670Y011802D01*
+X016670Y011880D02*
+X016380Y011880D01*
+X016380Y011959D02*
+X016670Y011959D01*
+X016670Y012037D02*
+X016380Y012037D01*
+X016380Y012116D02*
+X016670Y012116D01*
+X016670Y012194D02*
+X016380Y012194D01*
+X016380Y012273D02*
+X016670Y012273D01*
+X016670Y012351D02*
+X016380Y012351D01*
+X016380Y012430D02*
+X016670Y012430D01*
+X016646Y012508D02*
+X016380Y012508D01*
+X016380Y012587D02*
+X016555Y012587D01*
+X016497Y012665D02*
+X016380Y012665D01*
+X016435Y012744D02*
+X016465Y012744D01*
+X016100Y012805D02*
+X016600Y013305D01*
+X017000Y013305D01*
+X017550Y013855D01*
+X017550Y014555D01*
+X018030Y014549D02*
+X018340Y014549D01*
+X018340Y014471D02*
+X018030Y014471D01*
+X018030Y014392D02*
+X018340Y014392D01*
+X018340Y014314D02*
+X018030Y014314D01*
+X018030Y014235D02*
+X018340Y014235D01*
+X018340Y014157D02*
+X018030Y014157D01*
+X018030Y014078D02*
+X018340Y014078D01*
+X018340Y014000D02*
+X018030Y014000D01*
+X018030Y013921D02*
+X018340Y013921D01*
+X018340Y013843D02*
+X018030Y013843D01*
+X018030Y013764D02*
+X018340Y013764D01*
+X018340Y013686D02*
+X018030Y013686D01*
+X018030Y013607D02*
+X018340Y013607D01*
+X018340Y013529D02*
+X018030Y013529D01*
+X018030Y013450D02*
+X018340Y013450D01*
+X018340Y013372D02*
+X018030Y013372D01*
+X018030Y013293D02*
+X018340Y013293D01*
+X018340Y013215D02*
+X018030Y013215D01*
+X018004Y013136D02*
+X018340Y013136D01*
+X018340Y013058D02*
+X017949Y013058D01*
+X017909Y013018D02*
+X017909Y013018D01*
+X017870Y012979D02*
+X018340Y012979D01*
+X018340Y012901D02*
+X017792Y012901D01*
+X017713Y012822D02*
+X018340Y012822D01*
+X018340Y012744D02*
+X017635Y012744D01*
+X017556Y012665D02*
+X018340Y012665D01*
+X018340Y012587D02*
+X017478Y012587D01*
+X017399Y012508D02*
+X018340Y012508D01*
+X018340Y012430D02*
+X017321Y012430D01*
+X017242Y012351D02*
+X018340Y012351D01*
+X018340Y012273D02*
+X017230Y012273D01*
+X017230Y012194D02*
+X018340Y012194D01*
+X018340Y012116D02*
+X017230Y012116D01*
+X017230Y012037D02*
+X018340Y012037D01*
+X018340Y011959D02*
+X017230Y011959D01*
+X017230Y011880D02*
+X018340Y011880D01*
+X018340Y011802D02*
+X017230Y011802D01*
+X017230Y011723D02*
+X017447Y011723D01*
+X017326Y011645D02*
+X017230Y011645D01*
+X017230Y011566D02*
+X017256Y011566D01*
+X017753Y011723D02*
+X018340Y011723D01*
+X018340Y011645D02*
+X017874Y011645D01*
+X017944Y011566D02*
+X018340Y011566D01*
+X018340Y011488D02*
+X017977Y011488D01*
+X017999Y011409D02*
+X018340Y011409D01*
+X018340Y011331D02*
+X017999Y011331D01*
+X017999Y011252D02*
+X018340Y011252D01*
+X018340Y011174D02*
+X018077Y011174D01*
+X018156Y011095D02*
+X018340Y011095D01*
+X018340Y011017D02*
+X018234Y011017D01*
+X018269Y010938D02*
+X018340Y010938D01*
+X018340Y010860D02*
+X018280Y010860D01*
+X018280Y010781D02*
+X018340Y010781D01*
+X018340Y010703D02*
+X018280Y010703D01*
+X018280Y010624D02*
+X018340Y010624D01*
+X018340Y010546D02*
+X018280Y010546D01*
+X018280Y010467D02*
+X018340Y010467D01*
+X018340Y010389D02*
+X018276Y010389D01*
+X018243Y010310D02*
+X018340Y010310D01*
+X018340Y010232D02*
+X018173Y010232D01*
+X018094Y010153D02*
+X018340Y010153D01*
+X018340Y010075D02*
+X018016Y010075D01*
+X018009Y010068D02*
+X018009Y010068D01*
+X017937Y009996D02*
+X018340Y009996D01*
+X018340Y009918D02*
+X017859Y009918D01*
+X017780Y009839D02*
+X018340Y009839D01*
+X018340Y009761D02*
+X017702Y009761D01*
+X017850Y010305D02*
+X017900Y010355D01*
+X017650Y010755D02*
+X017350Y010755D01*
+X016850Y010255D01*
+X016850Y008405D01*
+X016995Y008034D02*
+X017170Y008034D01*
+X017170Y008112D02*
+X017121Y008112D01*
+X017076Y008067D02*
+X017170Y008161D01*
+X017170Y006531D01*
+X016661Y007040D01*
+X016726Y007067D01*
+X016838Y007179D01*
+X016899Y007326D01*
+X016899Y007484D01*
+X017170Y007484D01*
+X017170Y007406D02*
+X016899Y007406D01*
+X016899Y007484D02*
+X016838Y007631D01*
+X016726Y007743D01*
+X016579Y007804D01*
+X016421Y007804D01*
+X016274Y007743D01*
+X016162Y007631D01*
+X016135Y007566D01*
+X015930Y007771D01*
+X015930Y008106D01*
+X016079Y008106D01*
+X016226Y008167D01*
+X016261Y008202D01*
+X016371Y008156D01*
+X016529Y008156D01*
+X016533Y008158D01*
+X016624Y008067D01*
+X016771Y008006D01*
+X016929Y008006D01*
+X017076Y008067D01*
+X017170Y007955D02*
+X015930Y007955D01*
+X015930Y007877D02*
+X017170Y007877D01*
+X017170Y007798D02*
+X016593Y007798D01*
+X016749Y007720D02*
+X017170Y007720D01*
+X017170Y007641D02*
+X016828Y007641D01*
+X016866Y007563D02*
+X017170Y007563D01*
+X017170Y007327D02*
+X016899Y007327D01*
+X016867Y007249D02*
+X017170Y007249D01*
+X017170Y007170D02*
+X016829Y007170D01*
+X016750Y007092D02*
+X017170Y007092D01*
+X017170Y007013D02*
+X016688Y007013D01*
+X016766Y006935D02*
+X017170Y006935D01*
+X017170Y006856D02*
+X016845Y006856D01*
+X016923Y006778D02*
+X017170Y006778D01*
+X017170Y006699D02*
+X017002Y006699D01*
+X017080Y006621D02*
+X017170Y006621D01*
+X017159Y006542D02*
+X017170Y006542D01*
+X016100Y006605D02*
+X016100Y006255D01*
+X015722Y006385D02*
+X015580Y006385D01*
+X015580Y006307D02*
+X015701Y006307D01*
+X015701Y006228D02*
+X015580Y006228D01*
+X015580Y006150D02*
+X015712Y006150D01*
+X015745Y006071D02*
+X015580Y006071D01*
+X015580Y005993D02*
+X015799Y005993D01*
+X015881Y005914D02*
+X015580Y005914D01*
+X015580Y005836D02*
+X016051Y005836D01*
+X016709Y005600D02*
+X016791Y005600D01*
+X017050Y005305D02*
+X017450Y005705D01*
+X017050Y005305D02*
+X017050Y004955D01*
+X019060Y004972D02*
+X019830Y004972D01*
+X019830Y004894D02*
+X019060Y004894D01*
+X019060Y004815D02*
+X019830Y004815D01*
+X019830Y004737D02*
+X019060Y004737D01*
+X019060Y004658D02*
+X019830Y004658D01*
+X019830Y004580D02*
+X019060Y004580D01*
+X019060Y004501D02*
+X019814Y004501D01*
+X019782Y004423D02*
+X019060Y004423D01*
+X019060Y004344D02*
+X019780Y004344D01*
+X019780Y004266D02*
+X019060Y004266D01*
+X019060Y004187D02*
+X019780Y004187D01*
+X019780Y004109D02*
+X019060Y004109D01*
+X019060Y004030D02*
+X019780Y004030D01*
+X019780Y003952D02*
+X019060Y003952D01*
+X019060Y003873D02*
+X019780Y003873D01*
+X019780Y003795D02*
+X019060Y003795D01*
+X019060Y003716D02*
+X019780Y003716D01*
+X019780Y003638D02*
+X019060Y003638D01*
+X019060Y003559D02*
+X019780Y003559D01*
+X019780Y003481D02*
+X019060Y003481D01*
+X019060Y003402D02*
+X019780Y003402D01*
+X019780Y003324D02*
+X019060Y003324D01*
+X019060Y003245D02*
+X019780Y003245D01*
+X019780Y003167D02*
+X019060Y003167D01*
+X019060Y003088D02*
+X019780Y003088D01*
+X019780Y003010D02*
+X019060Y003010D01*
+X019060Y002931D02*
+X019780Y002931D01*
+X019780Y002853D02*
+X019060Y002853D01*
+X019060Y002774D02*
+X019787Y002774D01*
+X019820Y002696D02*
+X019060Y002696D01*
+X019060Y002617D02*
+X019885Y002617D01*
+X019964Y002539D02*
+X019060Y002539D01*
+X019060Y002460D02*
+X020042Y002460D01*
+X020121Y002382D02*
+X019060Y002382D01*
+X019091Y002303D02*
+X020161Y002303D01*
+X020193Y002225D02*
+X019099Y002225D01*
+X019099Y002146D02*
+X020245Y002146D01*
+X020324Y002068D02*
+X019075Y002068D01*
+X019042Y001989D02*
+X032200Y001989D01*
+X032200Y001911D02*
+X018969Y001911D01*
+X018841Y001832D02*
+X032200Y001832D01*
+X032200Y001754D02*
+X015999Y001754D01*
+X015999Y001832D02*
+X018559Y001832D01*
+X018431Y001911D02*
+X015988Y001911D01*
+X015955Y001989D02*
+X018358Y001989D01*
+X018325Y002068D02*
+X017256Y002068D01*
+X017405Y002146D02*
+X018301Y002146D01*
+X018301Y002225D02*
+X017483Y002225D01*
+X017519Y002303D02*
+X018309Y002303D01*
+X018340Y002382D02*
+X017549Y002382D01*
+X017608Y002460D02*
+X018340Y002460D01*
+X018340Y002539D02*
+X017686Y002539D01*
+X017765Y002617D02*
+X018340Y002617D01*
+X018340Y002696D02*
+X017843Y002696D01*
+X017922Y002774D02*
+X018340Y002774D01*
+X018340Y002853D02*
+X018000Y002853D01*
+X018045Y002931D02*
+X018340Y002931D01*
+X018340Y003010D02*
+X018070Y003010D01*
+X018070Y003088D02*
+X018340Y003088D01*
+X018340Y003167D02*
+X018070Y003167D01*
+X018070Y003245D02*
+X018340Y003245D01*
+X017430Y003245D02*
+X015580Y003245D01*
+X015580Y003167D02*
+X017409Y003167D01*
+X017330Y003088D02*
+X015580Y003088D01*
+X015580Y003010D02*
+X017252Y003010D01*
+X017173Y002931D02*
+X015580Y002931D01*
+X015580Y002853D02*
+X017068Y002853D01*
+X016905Y002774D02*
+X015627Y002774D01*
+X015705Y002696D02*
+X016827Y002696D01*
+X016786Y002617D02*
+X015784Y002617D01*
+X015848Y002539D02*
+X016753Y002539D01*
+X016751Y002460D02*
+X015880Y002460D01*
+X015880Y002382D02*
+X016751Y002382D01*
+X016781Y002303D02*
+X015880Y002303D01*
+X015880Y002225D02*
+X016817Y002225D01*
+X016895Y002146D02*
+X015880Y002146D01*
+X015901Y002068D02*
+X017044Y002068D01*
+X015978Y001675D02*
+X032200Y001675D01*
+X032200Y001597D02*
+X015945Y001597D01*
+X015877Y001518D02*
+X032200Y001518D01*
+X032200Y001440D02*
+X028810Y001440D01*
+X028797Y001452D02*
+X028877Y001372D01*
+X028883Y001359D01*
+X028939Y001359D01*
+X028951Y001354D01*
+X028963Y001359D01*
+X029076Y001359D01*
+X029147Y001329D01*
+X029218Y001359D01*
+X029468Y001359D01*
+X029573Y001315D01*
+X029573Y001315D01*
+X029574Y001315D01*
+X029678Y001359D01*
+X029792Y001359D01*
+X029803Y001354D01*
+X029815Y001359D01*
+X029997Y001359D01*
+X030034Y001343D01*
+X030070Y001359D01*
+X030184Y001359D01*
+X030264Y001325D01*
+X030344Y001359D01*
+X030457Y001359D01*
+X030528Y001329D01*
+X030599Y001359D01*
+X030849Y001359D01*
+X030916Y001331D01*
+X030983Y001359D01*
+X031165Y001359D01*
+X031176Y001354D01*
+X031188Y001359D01*
+X031301Y001359D01*
+X031372Y001329D01*
+X031443Y001359D01*
+X031762Y001359D01*
+X031866Y001315D01*
+X031947Y001235D01*
+X031990Y001130D01*
+X031990Y000607D01*
+X031947Y000502D01*
+X031866Y000422D01*
+X031762Y000378D01*
+X031648Y000378D01*
+X031544Y000422D01*
+X031463Y000502D01*
+X031458Y000515D01*
+X031443Y000515D01*
+X031381Y000541D01*
+X031372Y000544D01*
+X031301Y000515D01*
+X031188Y000515D01*
+X031083Y000558D01*
+X031019Y000623D01*
+X030954Y000558D01*
+X030849Y000515D01*
+X030599Y000515D01*
+X030539Y000540D01*
+X030528Y000544D01*
+X030457Y000515D01*
+X030344Y000515D01*
+X030264Y000548D01*
+X030184Y000515D01*
+X030070Y000515D01*
+X030034Y000530D01*
+X029997Y000515D01*
+X029883Y000515D01*
+X029872Y000520D01*
+X029860Y000515D01*
+X029747Y000515D01*
+X029735Y000520D01*
+X029723Y000515D01*
+X029610Y000515D01*
+X029539Y000544D01*
+X029468Y000515D01*
+X029150Y000515D01*
+X029113Y000530D01*
+X029076Y000515D01*
+X028963Y000515D01*
+X028858Y000558D01*
+X028828Y000589D01*
+X028797Y000558D01*
+X028692Y000515D01*
+X028579Y000515D01*
+X028540Y000531D01*
+X028430Y000509D01*
+X028319Y000532D01*
+X028304Y000542D01*
+X028240Y000515D01*
+X027990Y000515D01*
+X027928Y000541D01*
+X027885Y000558D01*
+X027885Y000558D01*
+X027884Y000560D01*
+X027817Y000627D01*
+X027817Y000627D01*
+X027812Y000632D01*
+X027737Y000707D01*
+X027737Y000707D01*
+X027737Y000707D01*
+X027732Y000719D01*
+X027693Y000812D01*
+X027693Y000993D01*
+X027698Y001005D01*
+X027693Y001017D01*
+X027693Y001199D01*
+X027737Y001303D01*
+X027817Y001384D01*
+X027885Y001452D01*
+X027990Y001495D01*
+X028240Y001495D01*
+X028332Y001458D01*
+X028345Y001452D01*
+X028345Y001452D01*
+X028345Y001452D01*
+X028410Y001387D01*
+X028474Y001452D01*
+X028579Y001495D01*
+X028692Y001495D01*
+X028797Y001452D01*
+X028882Y001361D02*
+X032200Y001361D01*
+X032200Y001283D02*
+X031899Y001283D01*
+X031959Y001204D02*
+X032200Y001204D01*
+X032200Y001126D02*
+X031990Y001126D01*
+X031990Y001047D02*
+X032200Y001047D01*
+X032200Y000969D02*
+X031990Y000969D01*
+X031990Y000890D02*
+X032200Y000890D01*
+X032200Y000812D02*
+X031990Y000812D01*
+X031990Y000733D02*
+X032200Y000733D01*
+X032200Y000655D02*
+X031990Y000655D01*
+X031977Y000576D02*
+X032200Y000576D01*
+X032200Y000498D02*
+X031942Y000498D01*
+X031860Y000419D02*
+X032200Y000419D01*
+X031550Y000419D02*
+X012067Y000419D01*
+X012131Y000484D02*
+X012131Y000484D01*
+X012145Y000498D02*
+X031468Y000498D01*
+X031066Y000576D02*
+X030972Y000576D01*
+X028840Y000576D02*
+X028815Y000576D01*
+X027868Y000576D02*
+X012222Y000576D01*
+X012255Y000655D02*
+X027789Y000655D01*
+X027726Y000733D02*
+X012270Y000733D01*
+X012270Y000812D02*
+X027694Y000812D01*
+X027693Y000890D02*
+X012270Y000890D01*
+X012270Y000969D02*
+X027693Y000969D01*
+X027693Y001047D02*
+X012270Y001047D01*
+X012270Y001126D02*
+X027693Y001126D01*
+X027696Y001204D02*
+X012313Y001204D01*
+X012360Y001283D02*
+X027728Y001283D01*
+X027794Y001361D02*
+X012393Y001361D01*
+X012399Y001440D02*
+X015440Y001440D01*
+X015323Y001518D02*
+X012399Y001518D01*
+X012373Y001597D02*
+X015255Y001597D01*
+X015222Y001675D02*
+X012340Y001675D01*
+X012265Y001754D02*
+X015201Y001754D01*
+X015201Y001832D02*
+X012132Y001832D01*
+X011868Y001832D02*
+X011299Y001832D01*
+X011299Y001754D02*
+X011735Y001754D01*
+X011660Y001675D02*
+X011278Y001675D01*
+X011245Y001597D02*
+X011627Y001597D01*
+X011601Y001518D02*
+X011177Y001518D01*
+X011105Y001440D02*
+X011601Y001440D01*
+X011607Y001361D02*
+X011138Y001361D01*
+X011149Y001283D02*
+X011630Y001283D01*
+X011630Y001204D02*
+X011149Y001204D01*
+X011128Y001126D02*
+X011630Y001126D01*
+X011630Y001047D02*
+X011095Y001047D01*
+X011027Y000969D02*
+X011630Y000969D01*
+X011630Y000890D02*
+X010911Y000890D01*
+X010589Y000890D02*
+X010068Y000890D01*
+X009989Y000969D02*
+X010473Y000969D01*
+X010212Y001047D02*
+X009911Y001047D01*
+X009832Y001126D02*
+X010134Y001126D01*
+X010055Y001204D02*
+X009770Y001204D01*
+X009770Y001283D02*
+X009977Y001283D01*
+X009898Y001361D02*
+X009770Y001361D01*
+X009770Y001440D02*
+X009820Y001440D01*
+X009783Y001518D02*
+X009770Y001518D01*
+X009770Y001597D02*
+X009770Y001597D01*
+X009770Y001675D02*
+X009770Y001675D01*
+X009770Y001754D02*
+X009770Y001754D01*
+X009770Y001832D02*
+X009770Y001832D01*
+X009770Y001911D02*
+X009770Y001911D01*
+X009770Y001989D02*
+X009770Y001989D01*
+X009770Y002068D02*
+X009770Y002068D01*
+X009770Y002146D02*
+X009770Y002146D01*
+X009770Y002225D02*
+X009770Y002225D01*
+X009770Y002303D02*
+X009770Y002303D01*
+X009770Y002382D02*
+X009770Y002382D01*
+X009770Y002460D02*
+X009770Y002460D01*
+X009770Y002539D02*
+X009770Y002539D01*
+X009770Y002617D02*
+X009770Y002617D01*
+X009770Y002696D02*
+X009770Y002696D01*
+X009770Y002774D02*
+X009770Y002774D01*
+X009770Y002853D02*
+X009770Y002853D01*
+X009770Y002931D02*
+X009770Y002931D01*
+X009770Y002956D02*
+X009770Y002956D01*
+X010050Y003105D02*
+X010250Y003305D01*
+X010250Y004405D01*
+X009050Y005605D01*
+X010500Y007055D01*
+X010500Y008355D01*
+X010650Y008505D01*
+X010750Y008505D01*
+X010500Y008355D02*
+X010300Y008555D01*
+X010300Y011105D01*
+X010550Y011355D01*
+X010550Y012805D01*
+X010924Y012665D02*
+X011270Y012665D01*
+X011270Y012587D02*
+X010891Y012587D01*
+X010830Y012508D02*
+X011270Y012508D01*
+X011270Y012430D02*
+X010830Y012430D01*
+X010830Y012351D02*
+X011270Y012351D01*
+X011270Y012273D02*
+X010830Y012273D01*
+X010830Y012194D02*
+X011270Y012194D01*
+X011270Y012116D02*
+X010830Y012116D01*
+X010830Y012037D02*
+X011270Y012037D01*
+X011270Y012061D02*
+X011270Y013721D01*
+X011212Y013779D01*
+X011151Y013926D01*
+X011151Y014084D01*
+X011212Y014231D01*
+X011324Y014343D01*
+X011471Y014404D01*
+X011629Y014404D01*
+X011776Y014343D01*
+X011888Y014231D01*
+X011949Y014084D01*
+X011949Y013926D01*
+X011888Y013779D01*
+X011830Y013721D01*
+X011830Y012121D01*
+X011916Y012035D01*
+X011943Y012035D01*
+X011962Y012081D01*
+X012074Y012193D01*
+X012221Y012254D01*
+X012379Y012254D01*
+X012526Y012193D01*
+X012550Y012169D01*
+X012624Y012243D01*
+X012771Y012304D01*
+X012929Y012304D01*
+X013076Y012243D01*
+X013188Y012131D01*
+X013249Y011984D01*
+X013249Y011826D01*
+X013188Y011679D01*
+X013076Y011567D01*
+X012929Y011506D01*
+X012771Y011506D01*
+X012624Y011567D01*
+X012600Y011591D01*
+X012526Y011517D01*
+X012379Y011456D01*
+X012221Y011456D01*
+X012175Y011475D01*
+X011744Y011475D01*
+X011641Y011518D01*
+X011563Y011596D01*
+X011313Y011846D01*
+X011270Y011949D01*
+X011270Y012061D01*
+X011270Y011959D02*
+X010830Y011959D01*
+X010830Y011880D02*
+X011299Y011880D01*
+X011357Y011802D02*
+X010830Y011802D01*
+X010830Y011723D02*
+X011436Y011723D01*
+X011514Y011645D02*
+X010830Y011645D01*
+X010830Y011566D02*
+X011593Y011566D01*
+X011714Y011488D02*
+X010830Y011488D01*
+X010830Y011409D02*
+X013203Y011409D01*
+X013170Y011331D02*
+X010830Y011331D01*
+X010810Y011252D02*
+X013151Y011252D01*
+X013151Y011174D02*
+X010765Y011174D01*
+X010699Y011095D02*
+X013164Y011095D01*
+X013196Y011017D02*
+X010695Y011017D01*
+X010662Y010938D02*
+X013253Y010938D01*
+X013342Y010860D02*
+X010618Y010860D01*
+X010580Y010781D02*
+X013720Y010781D01*
+X013720Y010703D02*
+X010580Y010703D01*
+X010580Y010624D02*
+X012599Y010624D01*
+X012671Y010654D02*
+X012524Y010593D01*
+X012412Y010481D01*
+X012405Y010464D01*
+X012376Y010493D01*
+X012229Y010554D01*
+X012071Y010554D01*
+X011924Y010493D01*
+X011812Y010381D01*
+X011751Y010234D01*
+X011751Y010076D01*
+X011812Y009929D01*
+X011924Y009817D01*
+X012071Y009756D01*
+X012229Y009756D01*
+X012376Y009817D01*
+X012488Y009929D01*
+X012495Y009946D01*
+X012524Y009917D01*
+X012671Y009856D01*
+X012829Y009856D01*
+X012976Y009917D01*
+X013088Y010029D01*
+X013149Y010176D01*
+X013149Y010334D01*
+X013088Y010481D01*
+X012976Y010593D01*
+X012829Y010654D01*
+X012671Y010654D01*
+X012477Y010546D02*
+X012249Y010546D01*
+X012402Y010467D02*
+X012406Y010467D01*
+X012051Y010546D02*
+X010580Y010546D01*
+X010580Y010467D02*
+X011898Y010467D01*
+X011820Y010389D02*
+X010580Y010389D01*
+X010580Y010310D02*
+X011783Y010310D01*
+X011751Y010232D02*
+X010580Y010232D01*
+X010580Y010153D02*
+X011751Y010153D01*
+X011752Y010075D02*
+X010580Y010075D01*
+X010580Y009996D02*
+X011784Y009996D01*
+X011824Y009918D02*
+X010580Y009918D01*
+X010580Y009839D02*
+X011902Y009839D01*
+X012060Y009761D02*
+X010580Y009761D01*
+X010580Y009682D02*
+X013720Y009682D01*
+X013720Y009604D02*
+X010580Y009604D01*
+X010580Y009525D02*
+X013720Y009525D01*
+X013720Y009447D02*
+X010580Y009447D01*
+X010580Y009368D02*
+X013720Y009368D01*
+X013720Y009290D02*
+X010580Y009290D01*
+X010580Y009211D02*
+X013720Y009211D01*
+X013720Y009133D02*
+X010580Y009133D01*
+X010580Y009054D02*
+X013720Y009054D01*
+X013720Y008976D02*
+X010580Y008976D01*
+X010580Y008897D02*
+X010654Y008897D01*
+X010846Y008897D02*
+X013720Y008897D01*
+X013720Y008819D02*
+X013264Y008819D01*
+X013379Y008740D02*
+X013720Y008740D01*
+X013720Y008662D02*
+X013446Y008662D01*
+X013479Y008583D02*
+X013720Y008583D01*
+X013720Y008505D02*
+X013648Y008505D01*
+X013069Y008034D02*
+X012728Y008034D01*
+X012749Y007984D02*
+X012688Y008131D01*
+X012576Y008243D01*
+X012429Y008304D01*
+X012271Y008304D01*
+X012124Y008243D01*
+X012012Y008131D01*
+X011951Y007984D01*
+X011951Y007826D01*
+X012012Y007679D01*
+X012124Y007567D01*
+X012271Y007506D01*
+X012429Y007506D01*
+X012576Y007567D01*
+X012688Y007679D01*
+X012749Y007826D01*
+X012749Y007984D01*
+X012749Y007955D02*
+X013101Y007955D01*
+X013165Y007877D02*
+X012749Y007877D01*
+X012737Y007798D02*
+X013270Y007798D01*
+X013630Y007798D02*
+X013720Y007798D01*
+X013720Y007720D02*
+X012705Y007720D01*
+X012650Y007641D02*
+X013720Y007641D01*
+X013720Y007563D02*
+X012565Y007563D01*
+X012135Y007563D02*
+X010780Y007563D01*
+X010780Y007641D02*
+X012050Y007641D01*
+X011995Y007720D02*
+X010780Y007720D01*
+X010780Y007798D02*
+X011963Y007798D01*
+X011951Y007877D02*
+X010780Y007877D01*
+X010780Y007955D02*
+X011951Y007955D01*
+X011972Y008034D02*
+X010780Y008034D01*
+X010843Y008112D02*
+X012004Y008112D01*
+X012072Y008191D02*
+X010999Y008191D01*
+X011078Y008269D02*
+X012187Y008269D01*
+X012513Y008269D02*
+X012745Y008269D01*
+X012801Y008191D02*
+X012628Y008191D01*
+X012696Y008112D02*
+X012886Y008112D01*
+X012701Y008505D02*
+X011149Y008505D01*
+X011149Y008583D02*
+X012721Y008583D01*
+X012754Y008662D02*
+X011117Y008662D01*
+X011079Y008740D02*
+X012821Y008740D01*
+X012936Y008819D02*
+X011000Y008819D01*
+X010190Y008269D02*
+X008820Y008269D01*
+X008820Y008191D02*
+X010220Y008191D01*
+X010220Y008112D02*
+X008820Y008112D01*
+X008820Y008034D02*
+X010220Y008034D01*
+X010220Y007955D02*
+X008820Y007955D01*
+X008820Y007877D02*
+X010220Y007877D01*
+X010220Y007798D02*
+X008820Y007798D01*
+X008820Y007720D02*
+X010220Y007720D01*
+X010220Y007641D02*
+X008820Y007641D01*
+X008820Y007563D02*
+X010220Y007563D01*
+X010220Y007484D02*
+X008820Y007484D01*
+X008820Y007406D02*
+X010220Y007406D01*
+X010220Y007327D02*
+X008820Y007327D01*
+X008820Y007249D02*
+X010220Y007249D01*
+X010219Y007170D02*
+X008820Y007170D01*
+X008820Y007092D02*
+X010141Y007092D01*
+X010062Y007013D02*
+X008820Y007013D01*
+X008820Y006935D02*
+X009984Y006935D01*
+X009905Y006856D02*
+X008820Y006856D01*
+X008820Y006778D02*
+X009827Y006778D01*
+X009748Y006699D02*
+X008820Y006699D01*
+X008820Y006621D02*
+X009670Y006621D01*
+X009591Y006542D02*
+X008820Y006542D01*
+X008820Y006464D02*
+X009513Y006464D01*
+X009434Y006385D02*
+X008820Y006385D01*
+X008820Y006307D02*
+X009356Y006307D01*
+X009277Y006228D02*
+X008820Y006228D01*
+X008820Y006150D02*
+X009199Y006150D01*
+X009120Y006071D02*
+X008820Y006071D01*
+X008820Y005993D02*
+X008944Y005993D01*
+X009451Y005600D02*
+X011899Y005600D01*
+X011821Y005522D02*
+X009529Y005522D01*
+X009608Y005443D02*
+X011754Y005443D01*
+X011722Y005365D02*
+X009686Y005365D01*
+X009765Y005286D02*
+X011720Y005286D01*
+X011720Y005208D02*
+X009843Y005208D01*
+X009922Y005129D02*
+X011720Y005129D01*
+X011720Y005051D02*
+X010000Y005051D01*
+X010079Y004972D02*
+X011720Y004972D01*
+X011720Y004894D02*
+X010157Y004894D01*
+X010236Y004815D02*
+X011720Y004815D01*
+X011720Y004737D02*
+X010314Y004737D01*
+X010393Y004658D02*
+X011360Y004658D01*
+X011261Y004580D02*
+X010471Y004580D01*
+X010513Y004501D02*
+X011200Y004501D01*
+X011167Y004423D02*
+X010530Y004423D01*
+X010530Y004344D02*
+X011151Y004344D01*
+X011151Y004266D02*
+X010530Y004266D01*
+X010530Y004187D02*
+X011167Y004187D01*
+X011200Y004109D02*
+X010530Y004109D01*
+X010530Y004030D02*
+X011261Y004030D01*
+X011361Y003952D02*
+X010530Y003952D01*
+X010530Y003873D02*
+X014120Y003873D01*
+X014120Y003795D02*
+X010530Y003795D01*
+X010530Y003716D02*
+X014120Y003716D01*
+X014120Y003638D02*
+X012831Y003638D01*
+X012826Y003643D02*
+X012679Y003704D01*
+X012521Y003704D01*
+X012374Y003643D01*
+X012262Y003531D01*
+X012201Y003384D01*
+X012201Y003226D01*
+X012262Y003079D01*
+X012374Y002967D01*
+X012521Y002906D01*
+X012679Y002906D01*
+X012826Y002967D01*
+X012938Y003079D01*
+X012999Y003226D01*
+X012999Y003384D01*
+X012938Y003531D01*
+X012826Y003643D01*
+X012910Y003559D02*
+X014120Y003559D01*
+X014120Y003481D02*
+X012959Y003481D01*
+X012991Y003402D02*
+X014120Y003402D01*
+X014120Y003324D02*
+X012999Y003324D01*
+X012999Y003245D02*
+X013879Y003245D01*
+X013798Y003167D02*
+X012974Y003167D01*
+X012942Y003088D02*
+X013744Y003088D01*
+X013712Y003010D02*
+X012868Y003010D01*
+X012739Y002931D02*
+X013701Y002931D01*
+X013701Y002853D02*
+X011666Y002853D01*
+X011626Y002893D02*
+X011479Y002954D01*
+X011321Y002954D01*
+X011174Y002893D01*
+X011062Y002781D01*
+X011001Y002634D01*
+X011001Y002476D01*
+X011062Y002329D01*
+X011174Y002217D01*
+X011321Y002156D01*
+X011479Y002156D01*
+X011626Y002217D01*
+X011738Y002329D01*
+X011799Y002476D01*
+X011799Y002634D01*
+X011738Y002781D01*
+X011626Y002893D01*
+X011534Y002931D02*
+X012461Y002931D01*
+X012332Y003010D02*
+X010518Y003010D01*
+X010592Y003088D02*
+X012258Y003088D01*
+X012226Y003167D02*
+X010624Y003167D01*
+X010649Y003245D02*
+X012201Y003245D01*
+X012201Y003324D02*
+X010649Y003324D01*
+X010641Y003402D02*
+X012209Y003402D01*
+X012241Y003481D02*
+X010609Y003481D01*
+X010560Y003559D02*
+X012290Y003559D01*
+X012369Y003638D02*
+X010530Y003638D01*
+X010050Y003105D02*
+X010050Y001605D01*
+X010400Y001255D01*
+X010750Y001255D01*
+X010533Y001597D02*
+X010454Y001597D01*
+X010522Y001675D02*
+X010376Y001675D01*
+X010330Y001754D02*
+X010501Y001754D01*
+X010501Y001832D02*
+X010330Y001832D01*
+X010330Y001911D02*
+X010512Y001911D01*
+X010545Y001989D02*
+X010330Y001989D01*
+X010330Y002068D02*
+X010599Y002068D01*
+X010681Y002146D02*
+X010330Y002146D01*
+X010330Y002225D02*
+X011167Y002225D01*
+X011119Y002146D02*
+X015320Y002146D01*
+X015320Y002225D02*
+X011633Y002225D01*
+X011712Y002303D02*
+X015306Y002303D01*
+X015228Y002382D02*
+X011760Y002382D01*
+X011792Y002460D02*
+X015149Y002460D01*
+X015071Y002539D02*
+X014257Y002539D01*
+X014376Y002617D02*
+X015033Y002617D01*
+X015020Y002696D02*
+X014445Y002696D01*
+X014477Y002774D02*
+X015020Y002774D01*
+X015020Y002853D02*
+X014499Y002853D01*
+X014522Y002931D02*
+X015020Y002931D01*
+X015020Y003010D02*
+X014600Y003010D01*
+X014655Y003088D02*
+X015020Y003088D01*
+X015020Y003167D02*
+X014680Y003167D01*
+X014680Y003245D02*
+X015020Y003245D01*
+X015020Y003324D02*
+X014680Y003324D01*
+X014680Y003402D02*
+X015020Y003402D01*
+X015020Y003481D02*
+X014680Y003481D01*
+X014680Y003559D02*
+X015020Y003559D01*
+X015020Y003638D02*
+X014680Y003638D01*
+X014680Y003716D02*
+X015020Y003716D01*
+X015020Y003795D02*
+X014680Y003795D01*
+X014680Y003873D02*
+X015020Y003873D01*
+X015020Y003952D02*
+X014680Y003952D01*
+X014680Y004030D02*
+X015020Y004030D01*
+X015020Y004109D02*
+X014680Y004109D01*
+X014680Y004187D02*
+X015020Y004187D01*
+X015020Y004266D02*
+X014680Y004266D01*
+X014680Y004344D02*
+X015020Y004344D01*
+X015020Y004423D02*
+X014680Y004423D01*
+X014680Y004501D02*
+X015020Y004501D01*
+X015020Y004580D02*
+X014680Y004580D01*
+X014680Y004658D02*
+X015020Y004658D01*
+X015020Y004737D02*
+X014680Y004737D01*
+X014680Y004815D02*
+X015020Y004815D01*
+X015020Y004894D02*
+X014680Y004894D01*
+X014680Y004972D02*
+X015020Y004972D01*
+X015020Y005051D02*
+X014680Y005051D01*
+X014680Y005129D02*
+X015020Y005129D01*
+X015020Y005208D02*
+X014680Y005208D01*
+X014680Y005286D02*
+X015020Y005286D01*
+X015020Y005365D02*
+X014680Y005365D01*
+X014680Y005443D02*
+X015020Y005443D01*
+X015020Y005522D02*
+X014680Y005522D01*
+X014680Y005600D02*
+X015020Y005600D01*
+X015020Y005679D02*
+X014680Y005679D01*
+X014680Y005757D02*
+X015020Y005757D01*
+X015020Y005836D02*
+X014680Y005836D01*
+X014680Y005914D02*
+X015020Y005914D01*
+X015020Y005993D02*
+X014680Y005993D01*
+X014680Y006071D02*
+X015020Y006071D01*
+X015020Y006150D02*
+X014934Y006150D01*
+X014900Y006505D02*
+X014750Y006505D01*
+X014900Y006505D02*
+X015100Y006705D01*
+X015100Y006955D01*
+X014800Y007255D01*
+X014800Y018205D01*
+X015000Y018405D01*
+X015850Y018405D01*
+X016400Y018955D01*
+X016194Y019495D02*
+X015606Y019495D01*
+X015756Y019416D02*
+X016044Y019416D01*
+X015966Y019338D02*
+X015834Y019338D01*
+X015899Y019259D02*
+X015901Y019259D01*
+X015400Y018955D02*
+X015100Y018955D01*
+X014600Y018455D01*
+X014600Y007055D01*
+X014750Y006905D01*
+X015050Y007355D02*
+X015300Y007105D01*
+X015300Y002705D01*
+X015600Y002405D01*
+X015600Y001805D01*
+X015299Y002068D02*
+X011201Y002068D01*
+X011255Y001989D02*
+X015245Y001989D01*
+X015212Y001911D02*
+X011288Y001911D01*
+X011088Y002303D02*
+X010330Y002303D01*
+X010330Y002382D02*
+X011040Y002382D01*
+X011008Y002460D02*
+X010330Y002460D01*
+X010330Y002539D02*
+X011001Y002539D01*
+X011001Y002617D02*
+X010330Y002617D01*
+X010330Y002696D02*
+X011027Y002696D01*
+X011059Y002774D02*
+X010330Y002774D01*
+X010330Y002853D02*
+X011134Y002853D01*
+X011266Y002931D02*
+X010389Y002931D01*
+X011741Y002774D02*
+X013723Y002774D01*
+X013755Y002696D02*
+X011773Y002696D01*
+X011799Y002617D02*
+X013824Y002617D01*
+X013943Y002539D02*
+X011799Y002539D01*
+X011811Y003952D02*
+X011739Y003952D01*
+X012000Y004305D02*
+X012000Y005305D01*
+X013050Y006355D01*
+X013050Y006555D01*
+X012678Y006699D02*
+X010540Y006699D01*
+X010461Y006621D02*
+X012651Y006621D01*
+X012651Y006542D02*
+X010383Y006542D01*
+X010304Y006464D02*
+X012656Y006464D01*
+X012684Y006385D02*
+X010226Y006385D01*
+X010147Y006307D02*
+X012606Y006307D01*
+X012527Y006228D02*
+X010069Y006228D01*
+X009990Y006150D02*
+X012449Y006150D01*
+X012370Y006071D02*
+X009912Y006071D01*
+X009833Y005993D02*
+X012292Y005993D01*
+X012213Y005914D02*
+X009755Y005914D01*
+X009676Y005836D02*
+X012135Y005836D01*
+X012056Y005757D02*
+X009598Y005757D01*
+X009519Y005679D02*
+X011978Y005679D01*
+X012455Y005365D02*
+X013477Y005365D01*
+X013451Y005443D02*
+X012534Y005443D01*
+X012612Y005522D02*
+X013451Y005522D01*
+X013458Y005600D02*
+X012691Y005600D01*
+X012769Y005679D02*
+X013490Y005679D01*
+X013538Y005757D02*
+X012848Y005757D01*
+X012926Y005836D02*
+X013617Y005836D01*
+X013769Y005914D02*
+X014002Y005914D01*
+X014083Y005836D02*
+X014120Y005836D01*
+X013550Y006255D02*
+X013800Y006505D01*
+X013800Y006755D01*
+X014000Y006955D01*
+X014000Y011805D01*
+X013700Y012105D01*
+X013329Y011959D02*
+X013249Y011959D01*
+X013249Y011880D02*
+X013362Y011880D01*
+X013440Y011802D02*
+X013239Y011802D01*
+X013206Y011723D02*
+X013580Y011723D01*
+X013720Y011645D02*
+X013153Y011645D01*
+X013074Y011566D02*
+X013380Y011566D01*
+X013269Y011488D02*
+X012455Y011488D01*
+X012575Y011566D02*
+X012626Y011566D01*
+X012300Y011855D02*
+X012200Y011755D01*
+X011800Y011755D01*
+X011550Y012005D01*
+X011550Y014005D01*
+X011919Y014157D02*
+X014120Y014157D01*
+X014120Y014235D02*
+X011884Y014235D01*
+X011805Y014314D02*
+X012382Y014314D01*
+X012374Y014317D02*
+X012521Y014256D01*
+X012679Y014256D01*
+X012826Y014317D01*
+X012938Y014429D01*
+X012999Y014576D01*
+X012999Y014734D01*
+X012938Y014881D01*
+X012826Y014993D01*
+X012679Y015054D01*
+X012521Y015054D01*
+X012374Y014993D01*
+X012262Y014881D01*
+X012201Y014734D01*
+X012201Y014576D01*
+X012262Y014429D01*
+X012374Y014317D01*
+X012299Y014392D02*
+X011658Y014392D01*
+X011614Y014471D02*
+X012245Y014471D01*
+X012212Y014549D02*
+X011758Y014549D01*
+X011836Y014628D02*
+X012201Y014628D01*
+X012201Y014706D02*
+X011870Y014706D01*
+X011899Y014785D02*
+X012222Y014785D01*
+X012255Y014863D02*
+X011899Y014863D01*
+X011896Y014942D02*
+X012323Y014942D01*
+X012439Y015020D02*
+X011863Y015020D01*
+X011820Y015099D02*
+X013690Y015099D01*
+X013690Y015177D02*
+X011742Y015177D01*
+X011495Y015256D02*
+X013690Y015256D01*
+X013690Y015334D02*
+X011417Y015334D01*
+X011338Y015413D02*
+X013690Y015413D01*
+X013690Y015491D02*
+X011260Y015491D01*
+X011181Y015570D02*
+X013690Y015570D01*
+X013690Y015648D02*
+X009403Y015648D01*
+X009324Y015727D02*
+X013690Y015727D01*
+X013690Y015805D02*
+X009246Y015805D01*
+X009180Y015884D02*
+X013690Y015884D01*
+X013690Y015962D02*
+X009180Y015962D01*
+X009180Y016041D02*
+X013690Y016041D01*
+X013690Y016119D02*
+X009180Y016119D01*
+X009180Y016198D02*
+X013690Y016198D01*
+X013690Y016276D02*
+X009180Y016276D01*
+X009180Y016355D02*
+X013690Y016355D01*
+X013690Y016433D02*
+X009180Y016433D01*
+X009180Y016512D02*
+X013690Y016512D01*
+X013690Y016590D02*
+X009180Y016590D01*
+X009180Y016669D02*
+X013690Y016669D01*
+X013690Y016747D02*
+X009180Y016747D01*
+X009180Y016826D02*
+X013690Y016826D01*
+X013690Y016904D02*
+X009180Y016904D01*
+X009180Y016983D02*
+X013690Y016983D01*
+X013690Y017061D02*
+X009180Y017061D01*
+X009180Y017140D02*
+X013690Y017140D01*
+X013675Y017218D02*
+X009180Y017218D01*
+X009180Y017297D02*
+X010273Y017297D01*
+X010224Y017317D02*
+X010371Y017256D01*
+X010529Y017256D01*
+X010676Y017317D01*
+X010788Y017429D01*
+X010849Y017576D01*
+X010849Y017734D01*
+X010788Y017881D01*
+X010676Y017993D01*
+X010529Y018054D01*
+X010371Y018054D01*
+X010224Y017993D01*
+X010112Y017881D01*
+X010051Y017734D01*
+X010051Y017576D01*
+X010112Y017429D01*
+X010224Y017317D01*
+X010166Y017375D02*
+X009180Y017375D01*
+X009180Y017454D02*
+X010102Y017454D01*
+X010069Y017532D02*
+X009180Y017532D01*
+X009180Y017611D02*
+X010051Y017611D01*
+X010051Y017689D02*
+X009180Y017689D01*
+X009180Y017768D02*
+X010065Y017768D01*
+X010098Y017846D02*
+X009180Y017846D01*
+X009180Y017925D02*
+X010156Y017925D01*
+X010248Y018003D02*
+X009180Y018003D01*
+X009180Y018082D02*
+X012501Y018082D01*
+X012501Y018084D02*
+X012501Y017926D01*
+X012562Y017779D01*
+X012674Y017667D01*
+X012821Y017606D01*
+X012979Y017606D01*
+X013126Y017667D01*
+X013238Y017779D01*
+X013299Y017926D01*
+X013299Y018084D01*
+X013238Y018231D01*
+X013126Y018343D01*
+X012979Y018404D01*
+X012821Y018404D01*
+X012674Y018343D01*
+X012562Y018231D01*
+X012501Y018084D01*
+X012501Y018003D02*
+X010652Y018003D01*
+X010744Y017925D02*
+X012502Y017925D01*
+X012534Y017846D02*
+X010802Y017846D01*
+X010835Y017768D02*
+X012574Y017768D01*
+X012652Y017689D02*
+X010849Y017689D01*
+X010849Y017611D02*
+X012810Y017611D01*
+X012990Y017611D02*
+X013742Y017611D01*
+X013692Y017532D02*
+X010831Y017532D01*
+X010798Y017454D02*
+X013659Y017454D01*
+X013651Y017375D02*
+X010734Y017375D01*
+X010627Y017297D02*
+X013651Y017297D01*
+X013820Y017689D02*
+X013148Y017689D01*
+X013226Y017768D02*
+X014120Y017768D01*
+X014120Y017846D02*
+X013266Y017846D01*
+X013298Y017925D02*
+X014120Y017925D01*
+X014120Y018003D02*
+X013299Y018003D01*
+X013299Y018082D02*
+X014120Y018082D01*
+X014120Y018160D02*
+X013267Y018160D01*
+X013230Y018239D02*
+X014120Y018239D01*
+X014120Y018317D02*
+X013152Y018317D01*
+X012999Y018396D02*
+X014120Y018396D01*
+X014064Y018474D02*
+X012736Y018474D01*
+X012801Y018396D02*
+X012558Y018396D01*
+X012648Y018317D02*
+X009180Y018317D01*
+X009180Y018239D02*
+X012570Y018239D01*
+X012533Y018160D02*
+X009180Y018160D01*
+X009180Y018396D02*
+X012242Y018396D01*
+X012064Y018474D02*
+X009180Y018474D01*
+X009180Y018553D02*
+X011986Y018553D01*
+X011909Y018631D02*
+X009180Y018631D01*
+X009180Y018710D02*
+X011877Y018710D01*
+X011844Y018788D02*
+X009180Y018788D01*
+X009180Y018867D02*
+X011823Y018867D01*
+X011823Y018945D02*
+X009180Y018945D01*
+X009180Y019024D02*
+X011823Y019024D01*
+X011836Y019102D02*
+X010740Y019102D01*
+X010776Y019117D02*
+X010629Y019056D01*
+X010471Y019056D01*
+X010324Y019117D01*
+X010212Y019229D01*
+X010151Y019376D01*
+X010151Y019534D01*
+X010212Y019681D01*
+X010324Y019793D01*
+X010471Y019854D01*
+X010629Y019854D01*
+X010776Y019793D01*
+X010888Y019681D01*
+X010949Y019534D01*
+X010949Y019376D01*
+X010888Y019229D01*
+X010776Y019117D01*
+X010839Y019181D02*
+X011868Y019181D01*
+X011901Y019259D02*
+X010900Y019259D01*
+X010933Y019338D02*
+X011966Y019338D01*
+X012044Y019416D02*
+X010949Y019416D01*
+X010949Y019495D02*
+X012194Y019495D01*
+X012606Y019495D02*
+X014194Y019495D01*
+X014044Y019416D02*
+X013526Y019416D01*
+X013440Y019416D02*
+X013360Y019416D01*
+X013360Y019338D02*
+X013440Y019338D01*
+X013440Y019259D02*
+X013360Y019259D01*
+X013360Y019181D02*
+X013440Y019181D01*
+X013440Y019102D02*
+X013360Y019102D01*
+X013360Y019024D02*
+X013440Y019024D01*
+X013440Y018867D02*
+X013360Y018867D01*
+X013360Y018788D02*
+X013440Y018788D01*
+X013440Y018710D02*
+X013360Y018710D01*
+X013360Y018631D02*
+X013440Y018631D01*
+X013440Y018553D02*
+X013360Y018553D01*
+X013142Y018553D02*
+X012814Y018553D01*
+X012891Y018631D02*
+X013049Y018631D01*
+X012989Y018710D02*
+X012923Y018710D01*
+X012932Y019181D02*
+X012979Y019181D01*
+X013031Y019259D02*
+X012899Y019259D01*
+X012834Y019338D02*
+X013114Y019338D01*
+X013274Y019416D02*
+X012756Y019416D01*
+X013686Y019338D02*
+X013966Y019338D01*
+X013901Y019259D02*
+X013769Y019259D01*
+X013821Y019181D02*
+X013868Y019181D01*
+X013877Y018710D02*
+X013811Y018710D01*
+X013751Y018631D02*
+X013909Y018631D01*
+X013986Y018553D02*
+X013658Y018553D01*
+X014400Y018955D02*
+X014400Y003205D01*
+X014100Y002905D01*
+X014120Y003952D02*
+X013539Y003952D01*
+X013576Y003967D02*
+X013688Y004079D01*
+X013749Y004226D01*
+X013749Y004384D01*
+X013688Y004531D01*
+X013576Y004643D01*
+X013429Y004704D01*
+X013271Y004704D01*
+X013124Y004643D01*
+X013012Y004531D01*
+X012951Y004384D01*
+X012951Y004226D01*
+X013012Y004079D01*
+X013124Y003967D01*
+X013271Y003906D01*
+X013429Y003906D01*
+X013576Y003967D01*
+X013639Y004030D02*
+X014120Y004030D01*
+X014120Y004109D02*
+X013700Y004109D01*
+X013733Y004187D02*
+X014120Y004187D01*
+X014120Y004266D02*
+X013749Y004266D01*
+X013749Y004344D02*
+X014120Y004344D01*
+X014120Y004423D02*
+X013733Y004423D01*
+X013700Y004501D02*
+X014120Y004501D01*
+X014120Y004580D02*
+X013639Y004580D01*
+X013540Y004658D02*
+X014120Y004658D01*
+X014120Y004737D02*
+X012280Y004737D01*
+X012280Y004815D02*
+X014120Y004815D01*
+X014120Y004894D02*
+X012280Y004894D01*
+X012280Y004972D02*
+X014120Y004972D01*
+X014120Y005051D02*
+X012280Y005051D01*
+X012280Y005129D02*
+X013716Y005129D01*
+X013584Y005208D02*
+X012298Y005208D01*
+X012377Y005286D02*
+X013509Y005286D01*
+X013984Y005129D02*
+X014120Y005129D01*
+X014116Y005208D02*
+X014120Y005208D01*
+X013160Y004658D02*
+X012280Y004658D01*
+X012289Y004580D02*
+X013061Y004580D01*
+X013000Y004501D02*
+X012350Y004501D01*
+X012383Y004423D02*
+X012967Y004423D01*
+X012951Y004344D02*
+X012399Y004344D01*
+X012399Y004266D02*
+X012951Y004266D01*
+X012967Y004187D02*
+X012383Y004187D01*
+X012350Y004109D02*
+X013000Y004109D01*
+X013061Y004030D02*
+X012289Y004030D01*
+X012189Y003952D02*
+X013161Y003952D01*
+X015580Y003559D02*
+X017430Y003559D01*
+X017430Y003481D02*
+X015580Y003481D01*
+X015580Y003402D02*
+X017430Y003402D01*
+X017430Y003324D02*
+X015580Y003324D01*
+X015760Y001440D02*
+X027873Y001440D01*
+X028358Y001440D02*
+X028462Y001440D01*
+X026460Y002931D02*
+X025690Y002931D01*
+X025768Y003010D02*
+X026092Y003010D01*
+X026700Y003255D02*
+X026700Y003305D01*
+X026800Y003405D01*
+X026950Y003405D01*
+X025450Y003255D02*
+X024900Y002705D01*
+X022050Y002705D01*
+X021500Y003255D01*
+X021500Y007855D01*
+X021550Y007905D01*
+X021600Y007905D01*
+X021250Y008205D02*
+X021800Y008755D01*
+X021800Y009955D01*
+X021900Y010055D01*
+X021900Y010755D01*
+X021500Y011155D01*
+X021500Y013905D01*
+X021850Y014255D01*
+X021850Y015105D01*
+X021150Y015355D02*
+X021150Y011105D01*
+X021100Y011055D01*
+X020810Y010781D02*
+X019060Y010781D01*
+X019060Y010703D02*
+X020909Y010703D01*
+X020749Y010860D02*
+X019060Y010860D01*
+X019060Y010938D02*
+X020717Y010938D01*
+X020546Y011017D02*
+X019060Y011017D01*
+X019060Y011095D02*
+X020396Y011095D01*
+X020318Y011174D02*
+X019060Y011174D01*
+X019060Y011252D02*
+X020282Y011252D01*
+X020251Y011331D02*
+X019060Y011331D01*
+X019060Y011409D02*
+X020251Y011409D01*
+X020253Y011488D02*
+X019060Y011488D01*
+X019060Y011566D02*
+X020285Y011566D01*
+X020326Y011645D02*
+X019060Y011645D01*
+X019060Y011723D02*
+X020404Y011723D01*
+X020565Y011802D02*
+X019060Y011802D01*
+X019060Y011880D02*
+X020870Y011880D01*
+X020870Y011802D02*
+X020735Y011802D01*
+X020870Y011959D02*
+X019060Y011959D01*
+X019060Y012037D02*
+X020870Y012037D01*
+X020870Y012116D02*
+X019060Y012116D01*
+X019060Y012194D02*
+X020870Y012194D01*
+X020870Y012273D02*
+X019060Y012273D01*
+X019060Y012351D02*
+X020870Y012351D01*
+X020870Y012430D02*
+X019060Y012430D01*
+X019060Y012508D02*
+X020870Y012508D01*
+X020870Y012587D02*
+X019060Y012587D01*
+X019060Y012665D02*
+X020870Y012665D01*
+X020870Y012744D02*
+X019060Y012744D01*
+X019060Y012822D02*
+X020870Y012822D01*
+X020870Y012901D02*
+X019060Y012901D01*
+X019060Y012979D02*
+X020870Y012979D01*
+X020870Y013058D02*
+X019060Y013058D01*
+X019060Y013136D02*
+X020870Y013136D01*
+X020870Y013215D02*
+X019060Y013215D01*
+X019060Y013293D02*
+X020870Y013293D01*
+X020870Y013372D02*
+X019060Y013372D01*
+X019060Y013450D02*
+X020870Y013450D01*
+X020870Y013529D02*
+X019060Y013529D01*
+X019060Y013607D02*
+X020870Y013607D01*
+X020870Y013686D02*
+X019060Y013686D01*
+X019060Y013764D02*
+X020870Y013764D01*
+X020870Y013843D02*
+X019060Y013843D01*
+X019060Y013921D02*
+X020870Y013921D01*
+X020870Y014000D02*
+X019060Y014000D01*
+X019060Y014078D02*
+X020870Y014078D01*
+X020870Y014157D02*
+X019060Y014157D01*
+X019060Y014235D02*
+X020870Y014235D01*
+X020870Y014314D02*
+X019060Y014314D01*
+X019060Y014392D02*
+X020870Y014392D01*
+X020870Y014471D02*
+X019060Y014471D01*
+X019060Y014549D02*
+X019952Y014549D01*
+X019778Y014628D02*
+X019060Y014628D01*
+X019060Y014706D02*
+X019737Y014706D01*
+X019702Y014785D02*
+X019815Y014785D01*
+X019781Y014863D02*
+X019894Y014863D01*
+X019859Y014942D02*
+X019972Y014942D01*
+X019938Y015020D02*
+X020051Y015020D01*
+X019616Y014785D02*
+X019060Y014785D01*
+X019060Y014863D02*
+X019568Y014863D01*
+X019535Y014942D02*
+X019060Y014942D01*
+X019060Y015020D02*
+X019514Y015020D01*
+X019502Y015099D02*
+X019060Y015099D01*
+X019060Y015177D02*
+X019502Y015177D01*
+X019513Y015256D02*
+X019060Y015256D01*
+X019060Y015334D02*
+X019534Y015334D01*
+X019566Y015413D02*
+X019060Y015413D01*
+X019060Y015491D02*
+X019612Y015491D01*
+X018340Y015334D02*
+X018090Y015334D01*
+X018030Y015256D02*
+X018340Y015256D01*
+X018340Y015177D02*
+X018030Y015177D01*
+X018030Y015099D02*
+X018340Y015099D01*
+X018340Y015020D02*
+X018030Y015020D01*
+X018030Y014942D02*
+X018340Y014942D01*
+X018340Y014863D02*
+X018030Y014863D01*
+X018030Y014785D02*
+X018340Y014785D01*
+X018340Y014706D02*
+X018030Y014706D01*
+X018030Y014628D02*
+X018340Y014628D01*
+X020277Y014549D02*
+X020870Y014549D01*
+X020870Y014628D02*
+X020451Y014628D01*
+X020492Y014706D02*
+X020870Y014706D01*
+X021834Y013843D02*
+X023170Y013843D01*
+X023170Y013921D02*
+X021912Y013921D01*
+X021780Y013764D02*
+X023170Y013764D01*
+X023170Y013686D02*
+X021780Y013686D01*
+X021780Y013607D02*
+X023170Y013607D01*
+X023170Y013529D02*
+X021780Y013529D01*
+X021780Y013450D02*
+X023170Y013450D01*
+X023170Y013372D02*
+X021780Y013372D01*
+X021780Y013293D02*
+X023170Y013293D01*
+X023170Y013215D02*
+X021780Y013215D01*
+X021780Y013136D02*
+X023170Y013136D01*
+X023170Y013058D02*
+X021780Y013058D01*
+X021780Y012979D02*
+X023170Y012979D01*
+X023170Y012901D02*
+X021780Y012901D01*
+X021780Y012822D02*
+X023170Y012822D01*
+X023170Y012744D02*
+X021780Y012744D01*
+X021780Y012665D02*
+X023170Y012665D01*
+X023170Y012587D02*
+X021780Y012587D01*
+X021780Y012508D02*
+X023170Y012508D01*
+X023170Y012430D02*
+X021780Y012430D01*
+X021780Y012351D02*
+X023170Y012351D01*
+X023170Y012273D02*
+X021780Y012273D01*
+X021780Y012194D02*
+X023170Y012194D01*
+X023170Y012116D02*
+X021780Y012116D01*
+X021780Y012037D02*
+X023170Y012037D01*
+X023170Y011959D02*
+X021780Y011959D01*
+X021780Y011880D02*
+X023170Y011880D01*
+X023170Y011802D02*
+X021780Y011802D01*
+X021780Y011723D02*
+X023170Y011723D01*
+X023170Y011645D02*
+X021780Y011645D01*
+X021780Y011566D02*
+X023170Y011566D01*
+X023170Y011488D02*
+X021780Y011488D01*
+X021780Y011409D02*
+X023170Y011409D01*
+X022862Y011331D02*
+X021780Y011331D01*
+X021799Y011252D02*
+X022783Y011252D01*
+X022738Y011174D02*
+X021877Y011174D01*
+X021956Y011095D02*
+X022706Y011095D01*
+X022701Y011017D02*
+X022034Y011017D01*
+X022113Y010938D02*
+X022701Y010938D01*
+X022729Y010860D02*
+X022160Y010860D01*
+X022180Y010781D02*
+X022761Y010781D01*
+X022820Y010703D02*
+X022180Y010703D01*
+X022180Y010624D02*
+X022820Y010624D01*
+X022820Y010546D02*
+X022180Y010546D01*
+X022180Y010467D02*
+X022820Y010467D01*
+X022820Y010389D02*
+X022180Y010389D01*
+X022180Y010310D02*
+X022820Y010310D01*
+X022820Y010232D02*
+X022180Y010232D01*
+X022180Y010153D02*
+X022820Y010153D01*
+X022820Y010075D02*
+X022180Y010075D01*
+X022198Y009996D02*
+X022381Y009996D01*
+X022819Y009996D02*
+X022820Y009996D01*
+X023100Y009555D02*
+X023250Y009405D01*
+X023250Y008255D01*
+X023150Y008155D01*
+X022780Y008304D02*
+X022721Y008304D01*
+X022574Y008243D01*
+X022462Y008131D01*
+X022401Y007984D01*
+X022401Y007826D01*
+X022462Y007679D01*
+X022470Y007671D01*
+X022470Y007154D01*
+X022380Y007154D01*
+X022380Y009315D01*
+X022521Y009256D01*
+X022679Y009256D01*
+X022826Y009317D01*
+X022884Y009375D01*
+X022970Y009289D01*
+X022970Y008512D01*
+X022924Y008493D01*
+X022812Y008381D01*
+X022780Y008304D01*
+X022798Y008348D02*
+X022380Y008348D01*
+X022380Y008426D02*
+X022857Y008426D01*
+X022952Y008505D02*
+X022380Y008505D01*
+X022380Y008583D02*
+X022970Y008583D01*
+X022970Y008662D02*
+X022380Y008662D01*
+X022380Y008740D02*
+X022970Y008740D01*
+X022970Y008819D02*
+X022380Y008819D01*
+X022380Y008897D02*
+X022970Y008897D01*
+X022970Y008976D02*
+X022380Y008976D01*
+X022380Y009054D02*
+X022970Y009054D01*
+X022970Y009133D02*
+X022380Y009133D01*
+X022380Y009211D02*
+X022970Y009211D01*
+X022969Y009290D02*
+X022760Y009290D01*
+X022877Y009368D02*
+X022891Y009368D01*
+X023100Y009555D02*
+X023100Y011005D01*
+X021620Y010624D02*
+X019060Y010624D01*
+X019060Y010546D02*
+X021620Y010546D01*
+X021620Y010467D02*
+X019060Y010467D01*
+X019060Y010389D02*
+X021620Y010389D01*
+X021620Y010310D02*
+X019060Y010310D01*
+X019060Y010232D02*
+X021620Y010232D01*
+X021602Y010153D02*
+X019060Y010153D01*
+X019060Y010075D02*
+X021546Y010075D01*
+X021402Y009996D02*
+X019060Y009996D01*
+X019060Y009918D02*
+X021249Y009918D01*
+X021170Y009839D02*
+X019060Y009839D01*
+X019060Y009761D02*
+X021133Y009761D01*
+X021101Y009682D02*
+X019060Y009682D01*
+X019060Y009604D02*
+X020870Y009604D01*
+X021030Y009604D02*
+X021101Y009604D01*
+X021500Y009605D02*
+X021500Y009205D01*
+X021000Y008705D01*
+X021000Y006755D01*
+X020800Y007005D02*
+X020600Y006805D01*
+X020600Y006505D01*
+X019830Y006385D02*
+X019060Y006385D01*
+X019060Y006307D02*
+X019830Y006307D01*
+X019830Y006228D02*
+X019060Y006228D01*
+X019060Y006150D02*
+X019830Y006150D01*
+X019830Y006071D02*
+X019060Y006071D01*
+X019060Y005993D02*
+X019830Y005993D01*
+X019830Y005914D02*
+X019060Y005914D01*
+X019060Y005836D02*
+X019830Y005836D01*
+X019830Y005757D02*
+X019060Y005757D01*
+X019060Y005679D02*
+X019830Y005679D01*
+X019830Y005600D02*
+X019060Y005600D01*
+X019060Y005522D02*
+X019830Y005522D01*
+X019830Y005443D02*
+X019060Y005443D01*
+X019060Y005365D02*
+X019830Y005365D01*
+X019830Y005286D02*
+X019060Y005286D01*
+X019060Y005208D02*
+X019830Y005208D01*
+X019830Y005129D02*
+X019060Y005129D01*
+X019060Y005051D02*
+X019830Y005051D01*
+X020200Y004505D02*
+X020150Y004455D01*
+X020200Y004505D02*
+X020500Y004505D01*
+X020950Y003955D02*
+X021300Y004305D01*
+X021300Y006955D01*
+X021250Y007005D01*
+X021250Y008205D01*
+X020800Y008555D02*
+X020800Y007005D01*
+X020520Y007484D02*
+X019185Y007484D01*
+X019263Y007406D02*
+X020204Y007406D01*
+X020108Y007327D02*
+X019310Y007327D01*
+X019343Y007249D02*
+X020049Y007249D01*
+X020016Y007170D02*
+X019349Y007170D01*
+X019349Y007092D02*
+X020001Y007092D01*
+X019972Y007013D02*
+X019323Y007013D01*
+X019290Y006935D02*
+X019866Y006935D01*
+X019802Y006856D02*
+X019215Y006856D01*
+X019081Y006778D02*
+X019769Y006778D01*
+X019751Y006699D02*
+X019060Y006699D01*
+X019060Y006621D02*
+X019751Y006621D01*
+X019765Y006542D02*
+X019060Y006542D01*
+X019060Y006464D02*
+X019798Y006464D01*
+X018950Y007155D02*
+X018700Y007155D01*
+X019060Y007563D02*
+X020520Y007563D01*
+X020520Y007641D02*
+X019060Y007641D01*
+X019060Y007720D02*
+X020520Y007720D01*
+X020520Y007798D02*
+X019060Y007798D01*
+X019060Y007877D02*
+X020520Y007877D01*
+X020520Y007955D02*
+X019060Y007955D01*
+X019060Y008034D02*
+X020520Y008034D01*
+X020520Y008112D02*
+X019060Y008112D01*
+X019060Y008191D02*
+X020520Y008191D01*
+X020520Y008269D02*
+X019060Y008269D01*
+X019060Y008348D02*
+X020520Y008348D01*
+X020520Y008426D02*
+X019060Y008426D01*
+X019060Y008505D02*
+X020489Y008505D01*
+X020470Y008583D02*
+X019060Y008583D01*
+X019060Y008662D02*
+X020470Y008662D01*
+X020470Y008740D02*
+X019060Y008740D01*
+X019060Y008819D02*
+X020470Y008819D01*
+X020470Y008897D02*
+X019060Y008897D01*
+X019060Y008976D02*
+X020470Y008976D01*
+X020470Y009054D02*
+X019060Y009054D01*
+X019060Y009133D02*
+X020500Y009133D01*
+X020551Y009211D02*
+X019060Y009211D01*
+X019060Y009290D02*
+X020553Y009290D01*
+X020586Y009368D02*
+X019060Y009368D01*
+X019060Y009447D02*
+X020628Y009447D01*
+X020706Y009525D02*
+X019060Y009525D01*
+X020750Y009005D02*
+X020750Y008605D01*
+X020800Y008555D01*
+X020750Y009005D02*
+X020950Y009205D01*
+X022100Y009605D02*
+X022100Y007105D01*
+X021700Y006705D01*
+X021700Y003755D01*
+X022150Y003305D01*
+X022250Y003305D01*
+X022624Y003167D02*
+X022705Y003167D01*
+X022701Y003176D02*
+X022762Y003029D01*
+X022806Y002985D01*
+X022494Y002985D01*
+X022588Y003079D01*
+X022649Y003226D01*
+X022649Y003384D01*
+X022588Y003531D01*
+X022476Y003643D01*
+X022329Y003704D01*
+X022171Y003704D01*
+X022154Y003697D01*
+X021980Y003871D01*
+X021980Y004911D01*
+X022024Y004867D01*
+X022171Y004806D01*
+X022329Y004806D01*
+X022476Y004867D01*
+X022554Y004945D01*
+X022609Y004968D01*
+X022909Y005268D01*
+X022987Y005346D01*
+X023030Y005449D01*
+X023030Y007571D01*
+X023138Y007679D01*
+X023170Y007756D01*
+X023170Y004749D01*
+X023213Y004646D01*
+X023439Y004420D01*
+X023374Y004393D01*
+X023338Y004481D01*
+X023226Y004593D01*
+X023079Y004654D01*
+X022921Y004654D01*
+X022774Y004593D01*
+X022662Y004481D01*
+X022601Y004334D01*
+X022601Y004176D01*
+X022662Y004029D01*
+X022774Y003917D01*
+X022921Y003856D01*
+X023079Y003856D01*
+X023226Y003917D01*
+X023262Y003829D01*
+X023374Y003717D01*
+X023521Y003656D01*
+X023679Y003656D01*
+X023826Y003717D01*
+X023900Y003791D01*
+X023924Y003767D01*
+X024060Y003711D01*
+X023884Y003535D01*
+X023384Y003535D01*
+X023326Y003593D01*
+X023179Y003654D01*
+X023021Y003654D01*
+X022874Y003593D01*
+X022762Y003481D01*
+X022701Y003334D01*
+X022701Y003176D01*
+X022701Y003245D02*
+X022649Y003245D01*
+X022649Y003324D02*
+X022701Y003324D01*
+X022729Y003402D02*
+X022641Y003402D01*
+X022609Y003481D02*
+X022762Y003481D01*
+X022840Y003559D02*
+X022560Y003559D01*
+X022481Y003638D02*
+X022982Y003638D01*
+X023218Y003638D02*
+X023987Y003638D01*
+X024047Y003716D02*
+X023824Y003716D01*
+X023908Y003559D02*
+X023360Y003559D01*
+X023376Y003716D02*
+X022135Y003716D01*
+X022056Y003795D02*
+X023297Y003795D01*
+X023244Y003873D02*
+X023120Y003873D01*
+X022880Y003873D02*
+X021980Y003873D01*
+X021980Y003952D02*
+X022740Y003952D01*
+X022662Y004030D02*
+X021980Y004030D01*
+X021980Y004109D02*
+X022629Y004109D01*
+X022601Y004187D02*
+X021980Y004187D01*
+X021980Y004266D02*
+X022601Y004266D01*
+X022605Y004344D02*
+X021980Y004344D01*
+X021980Y004423D02*
+X022638Y004423D01*
+X022682Y004501D02*
+X021980Y004501D01*
+X021980Y004580D02*
+X022761Y004580D01*
+X023175Y004737D02*
+X021980Y004737D01*
+X021980Y004815D02*
+X022150Y004815D01*
+X021998Y004894D02*
+X021980Y004894D01*
+X021980Y004658D02*
+X023208Y004658D01*
+X023239Y004580D02*
+X023280Y004580D01*
+X023318Y004501D02*
+X023358Y004501D01*
+X023362Y004423D02*
+X023437Y004423D01*
+X023450Y004805D02*
+X024150Y004105D01*
+X024550Y003805D02*
+X024550Y004805D01*
+X023950Y005405D01*
+X023950Y007205D01*
+X024100Y007355D01*
+X024400Y007355D01*
+X024450Y007405D01*
+X025000Y007355D02*
+X025000Y007305D01*
+X025000Y007655D01*
+X024800Y007855D01*
+X024500Y007855D01*
+X024200Y008155D01*
+X024200Y012755D01*
+X024960Y012744D02*
+X025670Y012744D01*
+X025670Y012822D02*
+X024960Y012822D01*
+X024960Y012901D02*
+X025670Y012901D01*
+X025670Y012979D02*
+X024960Y012979D01*
+X024960Y013058D02*
+X025670Y013058D01*
+X025670Y013136D02*
+X025151Y013136D01*
+X025079Y013106D02*
+X025226Y013167D01*
+X025338Y013279D01*
+X025399Y013426D01*
+X025399Y013584D01*
+X025338Y013731D01*
+X025226Y013843D01*
+X025079Y013904D01*
+X024960Y013904D01*
+X024960Y014932D01*
+X024999Y015026D01*
+X024999Y015184D01*
+X024960Y015278D01*
+X024960Y016260D01*
+X024976Y016267D01*
+X025088Y016379D01*
+X025149Y016526D01*
+X025149Y016684D01*
+X025088Y016831D01*
+X024976Y016943D01*
+X024880Y016983D01*
+X024910Y016978D01*
+X024910Y017415D01*
+X024990Y017415D01*
+X024990Y017495D01*
+X025427Y017495D01*
+X025416Y017567D01*
+X025393Y017638D01*
+X025358Y017705D01*
+X025314Y017766D01*
+X025261Y017819D01*
+X025200Y017863D01*
+X025133Y017898D01*
+X025122Y017901D01*
+X025277Y017965D01*
+X025440Y018128D01*
+X025450Y018153D01*
+X025460Y018128D01*
+X025623Y017965D01*
+X025778Y017901D01*
+X025767Y017898D01*
+X025700Y017863D01*
+X025639Y017819D01*
+X025586Y017766D01*
+X025542Y017705D01*
+X025507Y017638D01*
+X025484Y017567D01*
+X025473Y017495D01*
+X025910Y017495D01*
+X025910Y017415D01*
+X025990Y017415D01*
+X025990Y016978D01*
+X026062Y016989D01*
+X026133Y017012D01*
+X026170Y017031D01*
+X026170Y015321D01*
+X026063Y015214D01*
+X026020Y015111D01*
+X026020Y015104D01*
+X025871Y015104D01*
+X025724Y015043D01*
+X025612Y014931D01*
+X025551Y014784D01*
+X025551Y014626D01*
+X025612Y014479D01*
+X025670Y014421D01*
+X025670Y010239D01*
+X025562Y010131D01*
+X025507Y009998D01*
+X025374Y009943D01*
+X025345Y009914D01*
+X025338Y009931D01*
+X025226Y010043D01*
+X025079Y010104D01*
+X024960Y010104D01*
+X024960Y013106D01*
+X025079Y013106D01*
+X025273Y013215D02*
+X025670Y013215D01*
+X025670Y013293D02*
+X025344Y013293D01*
+X025376Y013372D02*
+X025670Y013372D01*
+X025670Y013450D02*
+X025399Y013450D01*
+X025399Y013529D02*
+X025670Y013529D01*
+X025670Y013607D02*
+X025389Y013607D01*
+X025357Y013686D02*
+X025670Y013686D01*
+X025670Y013764D02*
+X025305Y013764D01*
+X025226Y013843D02*
+X025670Y013843D01*
+X025670Y013921D02*
+X024960Y013921D01*
+X024960Y014000D02*
+X025670Y014000D01*
+X025670Y014078D02*
+X024960Y014078D01*
+X024960Y014157D02*
+X025670Y014157D01*
+X025670Y014235D02*
+X024960Y014235D01*
+X024960Y014314D02*
+X025670Y014314D01*
+X025670Y014392D02*
+X024960Y014392D01*
+X024960Y014471D02*
+X025621Y014471D01*
+X025583Y014549D02*
+X024960Y014549D01*
+X024960Y014628D02*
+X025551Y014628D01*
+X025551Y014706D02*
+X024960Y014706D01*
+X024960Y014785D02*
+X025551Y014785D01*
+X025584Y014863D02*
+X024960Y014863D01*
+X024964Y014942D02*
+X025623Y014942D01*
+X025701Y015020D02*
+X024996Y015020D01*
+X024999Y015099D02*
+X025858Y015099D01*
+X026047Y015177D02*
+X024999Y015177D01*
+X024969Y015256D02*
+X026105Y015256D01*
+X026170Y015334D02*
+X024960Y015334D01*
+X024960Y015413D02*
+X026170Y015413D01*
+X026170Y015491D02*
+X024960Y015491D01*
+X024960Y015570D02*
+X026170Y015570D01*
+X026170Y015648D02*
+X024960Y015648D01*
+X024960Y015727D02*
+X026170Y015727D01*
+X026170Y015805D02*
+X024960Y015805D01*
+X024960Y015884D02*
+X026170Y015884D01*
+X026170Y015962D02*
+X024960Y015962D01*
+X024960Y016041D02*
+X026170Y016041D01*
+X026170Y016119D02*
+X024960Y016119D01*
+X024960Y016198D02*
+X026170Y016198D01*
+X026170Y016276D02*
+X024985Y016276D01*
+X025063Y016355D02*
+X026170Y016355D01*
+X026170Y016433D02*
+X025110Y016433D01*
+X025143Y016512D02*
+X026170Y016512D01*
+X026170Y016590D02*
+X025149Y016590D01*
+X025149Y016669D02*
+X026170Y016669D01*
+X026170Y016747D02*
+X025123Y016747D01*
+X025090Y016826D02*
+X026170Y016826D01*
+X026170Y016904D02*
+X025015Y016904D01*
+X024990Y016978D02*
+X025062Y016989D01*
+X025133Y017012D01*
+X025200Y017047D01*
+X025261Y017091D01*
+X025314Y017144D01*
+X025358Y017205D01*
+X025393Y017272D01*
+X025416Y017343D01*
+X025427Y017415D01*
+X024990Y017415D01*
+X024990Y016978D01*
+X024990Y016983D02*
+X024910Y016983D01*
+X024881Y016983D02*
+X024880Y016983D01*
+X024910Y017061D02*
+X024990Y017061D01*
+X024990Y017140D02*
+X024910Y017140D01*
+X024910Y017218D02*
+X024990Y017218D01*
+X024990Y017297D02*
+X024910Y017297D01*
+X024910Y017375D02*
+X024990Y017375D01*
+X024990Y017454D02*
+X025910Y017454D01*
+X025910Y017415D02*
+X025473Y017415D01*
+X025484Y017343D01*
+X025507Y017272D01*
+X025542Y017205D01*
+X025586Y017144D01*
+X025639Y017091D01*
+X025700Y017047D01*
+X025767Y017012D01*
+X025838Y016989D01*
+X025910Y016978D01*
+X025910Y017415D01*
+X025910Y017375D02*
+X025990Y017375D01*
+X025990Y017297D02*
+X025910Y017297D01*
+X025910Y017218D02*
+X025990Y017218D01*
+X025990Y017140D02*
+X025910Y017140D01*
+X025910Y017061D02*
+X025990Y017061D01*
+X025990Y016983D02*
+X025910Y016983D01*
+X025881Y016983D02*
+X025019Y016983D01*
+X025220Y017061D02*
+X025680Y017061D01*
+X025590Y017140D02*
+X025310Y017140D01*
+X025365Y017218D02*
+X025535Y017218D01*
+X025499Y017297D02*
+X025401Y017297D01*
+X025421Y017375D02*
+X025479Y017375D01*
+X025479Y017532D02*
+X025421Y017532D01*
+X025402Y017611D02*
+X025498Y017611D01*
+X025533Y017689D02*
+X025367Y017689D01*
+X025313Y017768D02*
+X025587Y017768D01*
+X025676Y017846D02*
+X025224Y017846D01*
+X025178Y017925D02*
+X025722Y017925D01*
+X025585Y018003D02*
+X025315Y018003D01*
+X025393Y018082D02*
+X025507Y018082D01*
+X025950Y018455D02*
+X026150Y018455D01*
+X026450Y018155D01*
+X026450Y015205D01*
+X026300Y015055D01*
+X026300Y014255D01*
+X026350Y014205D01*
+X026400Y014155D01*
+X026400Y006905D01*
+X026450Y006855D01*
+X026450Y006455D01*
+X026600Y006305D01*
+X027000Y006205D02*
+X026600Y005805D01*
+X027000Y006205D02*
+X027000Y008105D01*
+X026950Y008155D01*
+X027850Y006955D02*
+X027850Y006805D01*
+X027900Y006755D01*
+X025350Y006405D02*
+X025200Y006405D01*
+X025000Y006105D02*
+X025100Y006005D01*
+X025150Y006005D01*
+X025000Y006105D02*
+X025000Y007305D01*
+X023600Y007855D02*
+X023600Y008455D01*
+X023450Y008605D01*
+X023450Y018905D01*
+X023950Y019405D01*
+X027500Y019405D01*
+X027950Y018955D01*
+X027950Y018455D01*
+X028434Y018788D02*
+X028466Y018788D01*
+X028545Y018867D02*
+X028355Y018867D01*
+X028276Y018945D02*
+X028624Y018945D01*
+X028814Y019024D02*
+X028225Y019024D01*
+X028192Y019102D02*
+X032200Y019102D01*
+X032200Y019024D02*
+X030357Y019024D01*
+X030474Y018945D02*
+X032200Y018945D01*
+X032200Y018867D02*
+X030517Y018867D01*
+X030527Y018788D02*
+X032200Y018788D01*
+X032200Y018710D02*
+X030527Y018710D01*
+X030527Y018631D02*
+X032200Y018631D01*
+X032200Y018553D02*
+X030527Y018553D01*
+X030527Y018474D02*
+X032200Y018474D01*
+X032200Y018396D02*
+X030527Y018396D01*
+X030527Y018317D02*
+X032200Y018317D01*
+X032200Y018239D02*
+X030527Y018239D01*
+X030527Y018160D02*
+X032200Y018160D01*
+X032200Y018082D02*
+X030527Y018082D01*
+X030500Y018003D02*
+X032200Y018003D01*
+X032200Y017925D02*
+X030434Y017925D01*
+X030376Y017846D02*
+X032200Y017846D01*
+X032200Y017768D02*
+X030446Y017768D01*
+X030478Y017689D02*
+X032200Y017689D01*
+X032200Y017611D02*
+X030511Y017611D01*
+X030527Y017532D02*
+X032200Y017532D01*
+X032200Y017454D02*
+X030527Y017454D01*
+X030527Y017375D02*
+X032200Y017375D01*
+X032200Y017297D02*
+X030509Y017297D01*
+X030477Y017218D02*
+X032200Y017218D01*
+X032200Y017140D02*
+X030444Y017140D01*
+X030373Y017061D02*
+X032200Y017061D01*
+X032200Y016983D02*
+X030294Y016983D01*
+X030129Y016904D02*
+X032200Y016904D01*
+X032200Y016826D02*
+X027730Y016826D01*
+X027730Y016904D02*
+X029771Y016904D01*
+X029606Y016983D02*
+X029019Y016983D01*
+X028990Y016983D02*
+X028910Y016983D01*
+X028910Y016978D02*
+X028910Y017415D01*
+X028473Y017415D01*
+X028484Y017343D01*
+X028507Y017272D01*
+X028542Y017205D01*
+X028586Y017144D01*
+X028639Y017091D01*
+X028700Y017047D01*
+X028767Y017012D01*
+X028838Y016989D01*
+X028910Y016978D01*
+X028881Y016983D02*
+X028019Y016983D01*
+X027990Y016983D02*
+X027910Y016983D01*
+X027881Y016983D02*
+X027730Y016983D01*
+X027910Y017061D02*
+X027990Y017061D01*
+X027990Y017140D02*
+X027910Y017140D01*
+X027910Y017218D02*
+X027990Y017218D01*
+X027990Y017297D02*
+X027910Y017297D01*
+X027910Y017375D02*
+X027990Y017375D01*
+X027990Y017415D02*
+X027990Y016978D01*
+X028062Y016989D01*
+X028133Y017012D01*
+X028200Y017047D01*
+X028261Y017091D01*
+X028314Y017144D01*
+X028358Y017205D01*
+X028393Y017272D01*
+X028416Y017343D01*
+X028427Y017415D01*
+X027990Y017415D01*
+X027990Y017454D02*
+X028910Y017454D01*
+X028910Y017375D02*
+X028990Y017375D01*
+X028990Y017297D02*
+X028910Y017297D01*
+X028910Y017218D02*
+X028990Y017218D01*
+X028990Y017140D02*
+X028910Y017140D01*
+X028910Y017061D02*
+X028990Y017061D01*
+X029220Y017061D02*
+X029527Y017061D01*
+X029456Y017140D02*
+X029310Y017140D01*
+X029365Y017218D02*
+X029423Y017218D01*
+X028680Y017061D02*
+X028220Y017061D01*
+X028310Y017140D02*
+X028590Y017140D01*
+X028535Y017218D02*
+X028365Y017218D01*
+X028401Y017297D02*
+X028499Y017297D01*
+X028479Y017375D02*
+X028421Y017375D01*
+X028421Y017532D02*
+X028479Y017532D01*
+X028498Y017611D02*
+X028402Y017611D01*
+X028367Y017689D02*
+X028533Y017689D01*
+X028587Y017768D02*
+X028313Y017768D01*
+X028224Y017846D02*
+X028676Y017846D01*
+X028722Y017925D02*
+X028178Y017925D01*
+X028315Y018003D02*
+X028585Y018003D01*
+X028507Y018082D02*
+X028393Y018082D01*
+X029086Y019024D02*
+X029543Y019024D01*
+X029426Y018945D02*
+X029276Y018945D01*
+X029355Y018867D02*
+X029383Y018867D01*
+X028120Y019181D02*
+X032200Y019181D01*
+X032200Y019259D02*
+X028042Y019259D01*
+X027963Y019338D02*
+X032200Y019338D01*
+X032200Y019416D02*
+X027885Y019416D01*
+X027806Y019495D02*
+X032200Y019495D01*
+X032200Y019573D02*
+X027728Y019573D01*
+X027636Y019652D02*
+X032200Y019652D01*
+X032200Y019730D02*
+X010839Y019730D01*
+X010900Y019652D02*
+X023814Y019652D01*
+X023722Y019573D02*
+X010933Y019573D01*
+X010738Y019809D02*
+X032200Y019809D01*
+X032200Y019887D02*
+X005495Y019887D01*
+X005510Y019872D02*
+X005430Y019952D01*
+X005325Y019995D01*
+X005075Y019995D01*
+X004970Y019952D01*
+X004890Y019872D01*
+X004846Y019767D01*
+X004846Y019654D01*
+X004847Y019653D01*
+X004820Y019653D01*
+X004715Y019610D01*
+X004635Y019530D01*
+X004591Y019425D01*
+X004591Y019243D01*
+X004635Y019139D01*
+X004715Y019058D01*
+X004820Y019015D01*
+X005001Y019015D01*
+X005106Y019058D01*
+X005106Y019059D01*
+X005107Y019058D01*
+X005151Y019040D01*
+X005212Y019015D01*
+X005393Y019015D01*
+X005498Y019058D01*
+X005578Y019139D01*
+X005647Y019207D01*
+X005690Y019312D01*
+X005690Y019425D01*
+X005647Y019530D01*
+X005566Y019610D01*
+X005540Y019621D01*
+X005553Y019654D01*
+X005553Y019767D01*
+X005510Y019872D01*
+X005536Y019809D02*
+X008712Y019809D01*
+X008611Y019730D02*
+X005553Y019730D01*
+X005552Y019652D02*
+X008550Y019652D01*
+X008517Y019573D02*
+X005603Y019573D01*
+X005661Y019495D02*
+X008501Y019495D01*
+X008900Y019455D02*
+X008900Y019205D01*
+X007250Y019205D01*
+X006900Y018855D01*
+X006900Y018455D01*
+X006526Y018317D02*
+X003175Y018317D01*
+X003117Y018375D02*
+X002963Y018439D01*
+X002797Y018439D01*
+X002644Y018375D01*
+X002527Y018258D01*
+X002463Y018105D01*
+X002463Y017939D01*
+X002527Y017785D01*
+X002644Y017668D01*
+X002797Y017604D01*
+X002963Y017604D01*
+X003117Y017668D01*
+X003234Y017785D01*
+X003297Y017939D01*
+X003297Y018105D01*
+X003234Y018258D01*
+X003117Y018375D01*
+X003067Y018396D02*
+X006501Y018396D01*
+X006501Y018474D02*
+X000700Y018474D01*
+X000700Y018396D02*
+X002693Y018396D01*
+X002586Y018317D02*
+X000700Y018317D01*
+X000700Y018239D02*
+X002519Y018239D01*
+X002486Y018160D02*
+X000700Y018160D01*
+X000700Y018082D02*
+X002463Y018082D01*
+X002463Y018003D02*
+X000700Y018003D01*
+X000700Y017925D02*
+X002469Y017925D01*
+X002501Y017846D02*
+X000700Y017846D01*
+X000700Y017768D02*
+X002544Y017768D01*
+X002623Y017689D02*
+X000700Y017689D01*
+X000700Y017611D02*
+X002782Y017611D01*
+X002978Y017611D02*
+X006003Y017611D01*
+X006029Y017636D02*
+X006029Y017636D01*
+X006082Y017689D02*
+X003138Y017689D01*
+X003216Y017768D02*
+X006218Y017768D01*
+X006502Y017846D02*
+X003259Y017846D01*
+X003292Y017925D02*
+X006743Y017925D01*
+X006711Y018003D02*
+X003297Y018003D01*
+X003297Y018082D02*
+X006701Y018082D01*
+X006631Y018160D02*
+X003274Y018160D01*
+X003242Y018239D02*
+X006558Y018239D01*
+X006509Y018553D02*
+X000700Y018553D01*
+X000700Y018631D02*
+X006541Y018631D01*
+X006591Y018710D02*
+X000700Y018710D01*
+X000700Y018788D02*
+X006620Y018788D01*
+X006620Y018867D02*
+X000700Y018867D01*
+X000700Y018945D02*
+X006634Y018945D01*
+X006673Y019024D02*
+X005414Y019024D01*
+X005542Y019102D02*
+X006751Y019102D01*
+X006741Y019092D02*
+X006741Y019092D01*
+X006830Y019181D02*
+X005620Y019181D01*
+X005668Y019259D02*
+X006908Y019259D01*
+X006987Y019338D02*
+X005690Y019338D01*
+X005690Y019416D02*
+X007065Y019416D01*
+X005397Y019966D02*
+X032200Y019966D01*
+X032200Y020044D02*
+X000700Y020044D01*
+X000700Y019966D02*
+X002437Y019966D01*
+X002340Y019887D02*
+X000700Y019887D01*
+X000700Y019809D02*
+X000743Y019809D01*
+X000774Y019102D02*
+X000700Y019102D01*
+X000700Y019024D02*
+X000902Y019024D01*
+X001262Y019024D02*
+X001363Y019024D01*
+X001654Y019024D02*
+X001755Y019024D01*
+X002114Y019024D02*
+X002215Y019024D01*
+X002370Y019024D02*
+X002489Y019024D01*
+X002643Y019024D02*
+X002659Y019024D01*
+X002813Y019024D02*
+X003051Y019024D01*
+X003411Y019024D02*
+X003511Y019024D01*
+X003803Y019024D02*
+X003903Y019024D01*
+X004058Y019024D02*
+X004177Y019024D01*
+X004331Y019024D02*
+X004799Y019024D01*
+X004671Y019102D02*
+X004459Y019102D01*
+X004513Y019181D02*
+X004617Y019181D01*
+X004591Y019259D02*
+X004539Y019259D01*
+X004539Y019338D02*
+X004591Y019338D01*
+X004591Y019416D02*
+X004539Y019416D01*
+X004539Y019495D02*
+X004620Y019495D01*
+X004678Y019573D02*
+X004539Y019573D01*
+X004539Y019652D02*
+X004815Y019652D01*
+X004846Y019730D02*
+X004539Y019730D01*
+X004522Y019809D02*
+X004864Y019809D01*
+X004905Y019887D02*
+X004480Y019887D01*
+X004383Y019966D02*
+X005003Y019966D01*
+X004125Y019966D02*
+X004109Y019966D01*
+X003852Y019966D02*
+X002695Y019966D01*
+X002957Y019887D02*
+X003754Y019887D01*
+X005022Y019024D02*
+X005191Y019024D01*
+X006698Y017846D02*
+X006795Y017846D01*
+X005925Y017532D02*
+X000700Y017532D01*
+X000700Y017454D02*
+X004800Y017454D01*
+X004706Y017375D02*
+X004699Y017375D01*
+X004401Y017375D02*
+X000700Y017375D01*
+X000700Y017297D02*
+X004278Y017297D01*
+X004207Y017218D02*
+X000700Y017218D01*
+X000700Y017140D02*
+X004174Y017140D01*
+X004151Y017061D02*
+X000700Y017061D01*
+X000700Y016983D02*
+X002629Y016983D01*
+X002644Y016997D02*
+X002527Y016880D01*
+X002463Y016727D01*
+X002463Y016561D01*
+X002527Y016407D01*
+X002644Y016290D01*
+X002797Y016226D01*
+X002963Y016226D01*
+X003117Y016290D01*
+X003234Y016407D01*
+X003297Y016561D01*
+X003297Y016727D01*
+X003234Y016880D01*
+X003117Y016997D01*
+X002963Y017061D01*
+X002797Y017061D01*
+X002644Y016997D01*
+X002551Y016904D02*
+X000700Y016904D01*
+X000700Y016826D02*
+X002504Y016826D01*
+X002472Y016747D02*
+X000700Y016747D01*
+X000700Y016669D02*
+X002463Y016669D01*
+X002463Y016590D02*
+X000700Y016590D01*
+X000700Y016512D02*
+X002483Y016512D01*
+X002516Y016433D02*
+X000700Y016433D01*
+X000700Y016355D02*
+X002579Y016355D01*
+X002678Y016276D02*
+X000700Y016276D01*
+X000700Y016198D02*
+X003447Y016198D01*
+X003525Y016276D02*
+X003083Y016276D01*
+X003181Y016355D02*
+X003604Y016355D01*
+X003671Y016433D02*
+X003245Y016433D01*
+X003277Y016512D02*
+X003704Y016512D01*
+X003771Y016590D02*
+X003297Y016590D01*
+X003297Y016669D02*
+X003886Y016669D01*
+X004214Y016669D02*
+X004323Y016669D01*
+X004329Y016590D02*
+X004983Y016590D01*
+X004948Y016512D02*
+X004396Y016512D01*
+X004429Y016433D02*
+X004930Y016433D01*
+X004702Y016355D02*
+X004449Y016355D01*
+X004449Y016276D02*
+X004607Y016276D01*
+X004548Y016198D02*
+X004437Y016198D01*
+X004405Y016119D02*
+X004516Y016119D01*
+X004501Y016041D02*
+X004349Y016041D01*
+X004264Y015962D02*
+X004501Y015962D01*
+X004519Y015884D02*
+X003925Y015884D01*
+X003846Y015805D02*
+X004551Y015805D01*
+X004615Y015727D02*
+X003768Y015727D01*
+X003689Y015648D02*
+X004720Y015648D01*
+X004930Y015570D02*
+X003611Y015570D01*
+X003580Y015491D02*
+X004930Y015491D01*
+X004930Y015413D02*
+X003580Y015413D01*
+X003580Y015334D02*
+X004565Y015334D01*
+X004800Y015005D02*
+X004150Y015005D01*
+X003900Y014755D01*
+X003900Y014155D01*
+X004151Y013843D02*
+X004249Y013843D01*
+X004331Y013764D02*
+X003998Y013764D01*
+X003802Y013764D02*
+X003398Y013764D01*
+X003551Y013843D02*
+X003649Y013843D01*
+X003202Y013764D02*
+X002748Y013764D01*
+X002901Y013843D02*
+X003049Y013843D01*
+X003300Y014155D02*
+X003300Y015655D01*
+X003950Y016305D01*
+X004050Y016305D01*
+X004244Y016747D02*
+X003289Y016747D01*
+X003256Y016826D02*
+X004193Y016826D01*
+X004160Y016904D02*
+X003210Y016904D01*
+X003131Y016983D02*
+X004151Y016983D01*
+X004777Y016669D02*
+X005061Y016669D01*
+X005399Y017061D02*
+X005454Y017061D01*
+X005399Y017140D02*
+X005532Y017140D01*
+X005611Y017218D02*
+X005385Y017218D01*
+X005352Y017297D02*
+X005689Y017297D01*
+X005768Y017375D02*
+X005294Y017375D01*
+X005200Y017454D02*
+X005846Y017454D01*
+X003368Y016119D02*
+X000700Y016119D01*
+X000700Y016041D02*
+X003290Y016041D01*
+X003211Y015962D02*
+X000700Y015962D01*
+X000700Y015884D02*
+X003133Y015884D01*
+X003059Y015805D02*
+X000700Y015805D01*
+X000700Y015727D02*
+X003027Y015727D01*
+X003020Y015648D02*
+X000700Y015648D01*
+X000700Y015570D02*
+X003020Y015570D01*
+X003020Y015491D02*
+X000700Y015491D01*
+X000700Y015413D02*
+X003020Y015413D01*
+X003020Y015334D02*
+X000700Y015334D01*
+X000700Y015256D02*
+X003020Y015256D01*
+X003020Y015177D02*
+X000700Y015177D01*
+X000700Y015099D02*
+X003020Y015099D01*
+X003020Y015020D02*
+X000700Y015020D01*
+X000700Y014942D02*
+X003020Y014942D01*
+X003020Y014863D02*
+X000700Y014863D01*
+X000700Y014785D02*
+X003020Y014785D01*
+X003020Y014706D02*
+X000700Y014706D01*
+X000700Y014628D02*
+X003020Y014628D01*
+X003020Y014549D02*
+X002741Y014549D01*
+X002898Y014471D02*
+X003020Y014471D01*
+X002559Y014549D02*
+X001611Y014549D01*
+X001626Y014543D02*
+X001479Y014604D01*
+X001321Y014604D01*
+X001174Y014543D01*
+X001062Y014431D01*
+X001001Y014284D01*
+X001001Y014126D01*
+X001062Y013979D01*
+X001174Y013867D01*
+X001321Y013806D01*
+X001479Y013806D01*
+X001626Y013867D01*
+X001738Y013979D01*
+X001799Y014126D01*
+X001799Y014284D01*
+X001738Y014431D01*
+X001626Y014543D01*
+X001698Y014471D02*
+X002402Y014471D01*
+X002323Y014392D02*
+X001754Y014392D01*
+X001787Y014314D02*
+X002284Y014314D01*
+X002252Y014235D02*
+X001799Y014235D01*
+X001799Y014157D02*
+X002251Y014157D01*
+X002251Y014078D02*
+X001779Y014078D01*
+X001746Y014000D02*
+X002283Y014000D01*
+X002320Y013921D02*
+X001680Y013921D01*
+X001567Y013843D02*
+X002399Y013843D01*
+X002552Y013764D02*
+X000700Y013764D01*
+X000700Y013686D02*
+X004974Y013686D01*
+X004941Y013764D02*
+X004769Y013764D01*
+X004851Y013843D02*
+X004930Y013843D01*
+X004930Y013921D02*
+X004905Y013921D01*
+X005045Y013607D02*
+X000700Y013607D01*
+X000700Y013529D02*
+X005124Y013529D01*
+X005202Y013450D02*
+X005038Y013450D01*
+X004862Y013450D02*
+X000700Y013450D01*
+X000700Y013372D02*
+X004703Y013372D01*
+X004950Y013055D02*
+X004250Y013055D01*
+X004000Y012805D01*
+X004000Y009305D01*
+X004280Y009589D02*
+X004280Y012689D01*
+X004366Y012775D01*
+X004666Y012775D01*
+X004724Y012717D01*
+X004871Y012656D01*
+X005029Y012656D01*
+X005150Y012706D01*
+X005271Y012656D01*
+X005429Y012656D01*
+X005480Y012677D01*
+X005480Y012403D01*
+X005479Y012404D01*
+X005321Y012404D01*
+X005174Y012343D01*
+X005062Y012231D01*
+X005001Y012084D01*
+X005001Y011926D01*
+X005062Y011779D01*
+X005120Y011721D01*
+X005120Y010121D01*
+X004394Y009395D01*
+X004338Y009531D01*
+X004280Y009589D01*
+X004280Y009604D02*
+X004603Y009604D01*
+X004681Y009682D02*
+X004280Y009682D01*
+X004280Y009761D02*
+X004760Y009761D01*
+X004838Y009839D02*
+X004280Y009839D01*
+X004280Y009918D02*
+X004917Y009918D01*
+X004995Y009996D02*
+X004280Y009996D01*
+X004280Y010075D02*
+X005074Y010075D01*
+X005120Y010153D02*
+X004280Y010153D01*
+X004280Y010232D02*
+X005120Y010232D01*
+X005120Y010310D02*
+X004280Y010310D01*
+X004280Y010389D02*
+X005120Y010389D01*
+X005120Y010467D02*
+X004280Y010467D01*
+X004280Y010546D02*
+X005120Y010546D01*
+X005120Y010624D02*
+X004280Y010624D01*
+X004280Y010703D02*
+X005120Y010703D01*
+X005120Y010781D02*
+X004280Y010781D01*
+X004280Y010860D02*
+X005120Y010860D01*
+X005120Y010938D02*
+X004280Y010938D01*
+X004280Y011017D02*
+X005120Y011017D01*
+X005120Y011095D02*
+X004280Y011095D01*
+X004280Y011174D02*
+X005120Y011174D01*
+X005120Y011252D02*
+X004280Y011252D01*
+X004280Y011331D02*
+X005120Y011331D01*
+X005120Y011409D02*
+X004280Y011409D01*
+X004280Y011488D02*
+X005120Y011488D01*
+X005120Y011566D02*
+X004280Y011566D01*
+X004280Y011645D02*
+X005120Y011645D01*
+X005118Y011723D02*
+X004280Y011723D01*
+X004280Y011802D02*
+X005053Y011802D01*
+X005020Y011880D02*
+X004280Y011880D01*
+X004280Y011959D02*
+X005001Y011959D01*
+X005001Y012037D02*
+X004280Y012037D01*
+X004280Y012116D02*
+X005014Y012116D01*
+X005047Y012194D02*
+X004280Y012194D01*
+X004280Y012273D02*
+X005104Y012273D01*
+X005193Y012351D02*
+X004280Y012351D01*
+X004280Y012430D02*
+X005480Y012430D01*
+X005480Y012508D02*
+X004280Y012508D01*
+X004280Y012587D02*
+X005480Y012587D01*
+X005480Y012665D02*
+X005451Y012665D01*
+X005249Y012665D02*
+X005051Y012665D01*
+X004849Y012665D02*
+X004280Y012665D01*
+X004335Y012744D02*
+X004698Y012744D01*
+X004014Y013215D02*
+X000700Y013215D01*
+X000700Y013293D02*
+X004093Y013293D01*
+X003935Y013136D02*
+X000700Y013136D01*
+X000700Y013058D02*
+X003857Y013058D01*
+X003778Y012979D02*
+X000700Y012979D01*
+X000700Y012901D02*
+X003737Y012901D01*
+X003720Y012822D02*
+X000700Y012822D01*
+X000700Y012744D02*
+X003720Y012744D01*
+X003720Y012665D02*
+X000700Y012665D01*
+X001132Y012587D02*
+X003720Y012587D01*
+X003720Y012508D02*
+X001211Y012508D01*
+X001259Y012430D02*
+X003720Y012430D01*
+X003720Y012351D02*
+X001292Y012351D01*
+X001299Y012273D02*
+X003720Y012273D01*
+X003720Y012194D02*
+X001299Y012194D01*
+X001274Y012116D02*
+X003720Y012116D01*
+X003720Y012037D02*
+X001241Y012037D01*
+X001180Y011959D02*
+X003720Y011959D01*
+X003720Y011880D02*
+X001180Y011880D01*
+X001180Y011802D02*
+X003720Y011802D01*
+X003720Y011723D02*
+X001180Y011723D01*
+X001180Y011645D02*
+X003720Y011645D01*
+X003720Y011566D02*
+X001180Y011566D01*
+X001180Y011488D02*
+X003720Y011488D01*
+X003720Y011409D02*
+X001180Y011409D01*
+X001180Y011331D02*
+X003720Y011331D01*
+X003720Y011252D02*
+X001180Y011252D01*
+X001180Y011174D02*
+X003720Y011174D01*
+X003720Y011095D02*
+X001180Y011095D01*
+X001180Y011017D02*
+X003720Y011017D01*
+X003720Y010938D02*
+X001180Y010938D01*
+X001180Y010860D02*
+X003720Y010860D01*
+X003720Y010781D02*
+X003684Y010781D01*
+X003416Y010781D02*
+X001180Y010781D01*
+X001180Y010703D02*
+X003284Y010703D01*
+X003209Y010624D02*
+X001180Y010624D01*
+X001180Y010546D02*
+X003177Y010546D01*
+X003151Y010467D02*
+X002041Y010467D01*
+X002004Y010482D02*
+X001830Y010482D01*
+X001670Y010416D01*
+X001547Y010293D01*
+X001480Y010132D01*
+X001480Y009959D01*
+X001547Y009798D01*
+X001670Y009675D01*
+X001830Y009609D01*
+X002004Y009609D01*
+X002165Y009675D01*
+X002288Y009798D01*
+X002354Y009959D01*
+X002354Y010132D01*
+X002288Y010293D01*
+X002165Y010416D01*
+X002004Y010482D01*
+X002192Y010389D02*
+X003151Y010389D01*
+X003158Y010310D02*
+X002271Y010310D01*
+X002313Y010232D02*
+X003190Y010232D01*
+X003238Y010153D02*
+X002346Y010153D01*
+X002354Y010075D02*
+X003270Y010075D01*
+X003270Y009996D02*
+X002354Y009996D01*
+X002337Y009918D02*
+X003270Y009918D01*
+X003270Y009839D02*
+X002305Y009839D01*
+X002250Y009761D02*
+X003270Y009761D01*
+X003270Y009682D02*
+X002172Y009682D01*
+X001663Y009682D02*
+X001180Y009682D01*
+X001180Y009604D02*
+X003270Y009604D01*
+X003270Y009525D02*
+X001180Y009525D01*
+X001180Y009447D02*
+X003270Y009447D01*
+X003267Y009368D02*
+X001180Y009368D01*
+X001180Y009290D02*
+X001802Y009290D01*
+X001830Y009301D02*
+X001670Y009235D01*
+X001547Y009112D01*
+X001480Y008951D01*
+X001480Y008778D01*
+X001547Y008617D01*
+X001670Y008494D01*
+X001830Y008428D01*
+X002004Y008428D01*
+X002165Y008494D01*
+X002288Y008617D01*
+X002354Y008778D01*
+X002354Y008951D01*
+X002288Y009112D01*
+X002165Y009235D01*
+X002004Y009301D01*
+X001830Y009301D01*
+X002033Y009290D02*
+X003189Y009290D01*
+X003110Y009211D02*
+X002189Y009211D01*
+X002267Y009133D02*
+X003032Y009133D01*
+X002953Y009054D02*
+X002312Y009054D01*
+X002344Y008976D02*
+X002875Y008976D01*
+X002796Y008897D02*
+X002354Y008897D01*
+X002354Y008819D02*
+X002718Y008819D01*
+X002639Y008740D02*
+X002339Y008740D01*
+X002306Y008662D02*
+X002561Y008662D01*
+X002482Y008583D02*
+X002254Y008583D01*
+X002175Y008505D02*
+X002404Y008505D01*
+X002325Y008426D02*
+X001180Y008426D01*
+X001180Y008348D02*
+X002247Y008348D01*
+X002168Y008269D02*
+X001180Y008269D01*
+X001180Y008191D02*
+X002090Y008191D01*
+X002011Y008112D02*
+X001180Y008112D01*
+X001180Y008034D02*
+X001933Y008034D01*
+X001854Y007955D02*
+X001180Y007955D01*
+X001180Y007877D02*
+X001776Y007877D01*
+X001697Y007798D02*
+X001180Y007798D01*
+X001180Y007720D02*
+X001619Y007720D01*
+X001540Y007641D02*
+X001180Y007641D01*
+X001180Y007563D02*
+X001491Y007563D01*
+X001470Y007484D02*
+X001180Y007484D01*
+X001180Y007406D02*
+X001470Y007406D01*
+X001408Y007327D02*
+X001180Y007327D01*
+X001180Y007249D02*
+X001349Y007249D01*
+X001316Y007170D02*
+X001180Y007170D01*
+X001180Y007092D02*
+X001301Y007092D01*
+X001301Y007013D02*
+X001180Y007013D01*
+X001180Y006935D02*
+X001318Y006935D01*
+X001351Y006856D02*
+X001180Y006856D01*
+X001180Y006778D02*
+X001414Y006778D01*
+X001517Y006699D02*
+X001180Y006699D01*
+X001180Y006621D02*
+X002020Y006621D01*
+X002020Y006699D02*
+X001883Y006699D01*
+X001986Y006778D02*
+X002020Y006778D01*
+X002020Y006542D02*
+X001180Y006542D01*
+X001180Y006464D02*
+X002020Y006464D01*
+X002020Y006385D02*
+X001180Y006385D01*
+X001180Y006307D02*
+X002020Y006307D01*
+X002020Y006228D02*
+X001180Y006228D01*
+X001180Y006150D02*
+X002020Y006150D01*
+X002020Y006071D02*
+X001180Y006071D01*
+X001180Y005993D02*
+X002020Y005993D01*
+X002020Y005914D02*
+X001180Y005914D01*
+X001180Y005836D02*
+X002020Y005836D01*
+X002020Y005757D02*
+X001180Y005757D01*
+X001180Y005679D02*
+X002020Y005679D01*
+X002020Y005600D02*
+X001180Y005600D01*
+X001180Y005522D02*
+X002020Y005522D01*
+X002020Y005443D02*
+X001180Y005443D01*
+X001180Y005365D02*
+X002020Y005365D01*
+X002020Y005286D02*
+X001180Y005286D01*
+X001180Y005208D02*
+X002020Y005208D01*
+X002020Y005129D02*
+X001180Y005129D01*
+X001180Y005051D02*
+X002020Y005051D01*
+X002020Y004972D02*
+X001180Y004972D01*
+X001180Y004894D02*
+X002020Y004894D01*
+X002020Y004815D02*
+X001180Y004815D01*
+X001180Y004737D02*
+X002020Y004737D01*
+X002020Y004658D02*
+X001180Y004658D01*
+X001180Y004580D02*
+X002020Y004580D01*
+X002020Y004501D02*
+X001180Y004501D01*
+X001180Y004423D02*
+X002020Y004423D01*
+X002020Y004344D02*
+X001180Y004344D01*
+X001180Y004266D02*
+X002020Y004266D01*
+X002020Y004187D02*
+X001180Y004187D01*
+X001180Y004109D02*
+X001990Y004109D01*
+X001941Y004030D02*
+X001180Y004030D01*
+X001180Y003952D02*
+X001908Y003952D01*
+X001901Y003873D02*
+X001180Y003873D01*
+X001180Y003795D02*
+X001901Y003795D01*
+X001926Y003716D02*
+X001180Y003716D01*
+X001180Y003638D02*
+X001958Y003638D01*
+X002032Y003559D02*
+X001180Y003559D01*
+X001220Y003481D02*
+X002162Y003481D01*
+X002438Y003481D02*
+X003420Y003481D01*
+X003420Y003559D02*
+X002568Y003559D01*
+X002642Y003638D02*
+X003420Y003638D01*
+X003420Y003716D02*
+X002674Y003716D01*
+X002699Y003795D02*
+X003420Y003795D01*
+X003420Y003873D02*
+X002699Y003873D01*
+X002692Y003952D02*
+X003420Y003952D01*
+X003420Y004030D02*
+X002659Y004030D01*
+X002610Y004109D02*
+X003420Y004109D01*
+X003420Y004187D02*
+X002580Y004187D01*
+X002580Y004266D02*
+X003420Y004266D01*
+X003420Y004344D02*
+X002580Y004344D01*
+X002580Y004423D02*
+X003420Y004423D01*
+X003420Y004501D02*
+X002580Y004501D01*
+X002580Y004580D02*
+X003420Y004580D01*
+X003420Y004658D02*
+X002580Y004658D01*
+X002580Y004737D02*
+X003420Y004737D01*
+X003420Y004815D02*
+X002580Y004815D01*
+X002580Y004894D02*
+X003420Y004894D01*
+X003420Y004972D02*
+X002580Y004972D01*
+X002580Y005051D02*
+X003420Y005051D01*
+X003420Y005129D02*
+X002580Y005129D01*
+X002580Y005208D02*
+X003420Y005208D01*
+X003420Y005286D02*
+X002580Y005286D01*
+X002580Y005365D02*
+X003420Y005365D01*
+X003420Y005443D02*
+X002580Y005443D01*
+X002580Y005522D02*
+X003420Y005522D01*
+X003420Y005600D02*
+X002580Y005600D01*
+X002580Y005679D02*
+X003420Y005679D01*
+X003420Y005757D02*
+X002580Y005757D01*
+X002580Y005836D02*
+X003420Y005836D01*
+X003420Y005914D02*
+X002580Y005914D01*
+X002580Y005993D02*
+X003420Y005993D01*
+X003420Y006071D02*
+X002580Y006071D01*
+X002580Y006150D02*
+X003420Y006150D01*
+X003420Y006228D02*
+X002580Y006228D01*
+X002580Y006307D02*
+X003420Y006307D01*
+X003420Y006385D02*
+X002580Y006385D01*
+X002580Y006464D02*
+X003420Y006464D01*
+X003420Y006542D02*
+X002580Y006542D01*
+X002580Y006621D02*
+X003420Y006621D01*
+X003420Y006699D02*
+X002580Y006699D01*
+X002580Y006778D02*
+X003420Y006778D01*
+X003420Y006856D02*
+X002647Y006856D01*
+X002726Y006935D02*
+X003420Y006935D01*
+X003420Y007013D02*
+X002804Y007013D01*
+X002883Y007092D02*
+X003420Y007092D01*
+X003420Y007170D02*
+X002961Y007170D01*
+X003040Y007249D02*
+X003420Y007249D01*
+X003420Y007327D02*
+X003118Y007327D01*
+X003197Y007406D02*
+X003386Y007406D01*
+X003339Y007484D02*
+X003275Y007484D01*
+X003700Y007655D02*
+X003700Y002355D01*
+X003300Y001955D01*
+X003006Y002225D02*
+X002549Y002225D01*
+X002549Y002146D02*
+X002948Y002146D01*
+X002915Y002068D02*
+X002545Y002068D01*
+X002513Y001989D02*
+X002901Y001989D01*
+X002901Y001911D02*
+X002469Y001911D01*
+X002391Y001832D02*
+X002919Y001832D01*
+X002952Y001754D02*
+X000700Y001754D01*
+X000700Y001832D02*
+X001909Y001832D01*
+X001831Y001911D02*
+X000700Y001911D01*
+X000700Y001989D02*
+X001787Y001989D01*
+X001755Y002068D02*
+X000700Y002068D01*
+X000700Y002146D02*
+X001751Y002146D01*
+X001685Y002225D02*
+X000700Y002225D01*
+X000700Y002303D02*
+X001606Y002303D01*
+X001528Y002382D02*
+X000700Y002382D01*
+X000700Y002460D02*
+X001449Y002460D01*
+X001371Y002539D02*
+X000700Y002539D01*
+X000700Y002617D02*
+X001292Y002617D01*
+X001214Y002696D02*
+X000700Y002696D01*
+X000700Y002774D02*
+X001135Y002774D01*
+X001057Y002853D02*
+X000700Y002853D01*
+X000700Y002931D02*
+X000978Y002931D01*
+X000900Y003010D02*
+X000700Y003010D01*
+X000700Y003088D02*
+X000821Y003088D01*
+X000743Y003167D02*
+X000700Y003167D01*
+X000900Y003405D02*
+X000900Y012255D01*
+X000700Y013843D02*
+X001233Y013843D01*
+X001120Y013921D02*
+X000700Y013921D01*
+X000700Y014000D02*
+X001054Y014000D01*
+X001021Y014078D02*
+X000700Y014078D01*
+X000700Y014157D02*
+X001001Y014157D01*
+X001001Y014235D02*
+X000700Y014235D01*
+X000700Y014314D02*
+X001013Y014314D01*
+X001046Y014392D02*
+X000700Y014392D01*
+X000700Y014471D02*
+X001102Y014471D01*
+X001189Y014549D02*
+X000700Y014549D01*
+X003580Y014549D02*
+X003620Y014549D01*
+X003620Y014471D02*
+X003580Y014471D01*
+X003580Y014628D02*
+X003620Y014628D01*
+X003620Y014706D02*
+X003580Y014706D01*
+X003580Y014785D02*
+X003620Y014785D01*
+X003642Y014863D02*
+X003580Y014863D01*
+X003580Y014942D02*
+X003691Y014942D01*
+X003769Y015020D02*
+X003580Y015020D01*
+X003580Y015099D02*
+X003848Y015099D01*
+X003926Y015177D02*
+X003580Y015177D01*
+X003580Y015256D02*
+X004023Y015256D01*
+X006200Y015205D02*
+X006200Y014555D01*
+X007600Y013155D01*
+X008820Y013136D02*
+X009502Y013136D01*
+X009501Y013058D02*
+X008820Y013058D01*
+X008820Y012979D02*
+X009501Y012979D01*
+X009532Y012901D02*
+X008820Y012901D01*
+X008820Y012822D02*
+X009569Y012822D01*
+X009648Y012744D02*
+X008820Y012744D01*
+X008820Y012665D02*
+X009799Y012665D01*
+X010001Y012665D02*
+X010176Y012665D01*
+X010209Y012587D02*
+X008820Y012587D01*
+X008820Y012508D02*
+X010270Y012508D01*
+X010270Y012430D02*
+X008820Y012430D01*
+X008820Y012351D02*
+X010270Y012351D01*
+X010270Y012273D02*
+X008820Y012273D01*
+X008820Y012194D02*
+X010270Y012194D01*
+X010270Y012116D02*
+X008820Y012116D01*
+X008820Y012037D02*
+X010270Y012037D01*
+X010270Y011959D02*
+X008820Y011959D01*
+X008820Y011880D02*
+X010270Y011880D01*
+X010270Y011802D02*
+X008820Y011802D01*
+X008820Y011723D02*
+X010270Y011723D01*
+X010270Y011645D02*
+X008820Y011645D01*
+X008820Y011566D02*
+X010270Y011566D01*
+X010182Y011488D02*
+X008820Y011488D01*
+X008820Y011409D02*
+X010040Y011409D01*
+X009962Y011331D02*
+X008820Y011331D01*
+X008820Y011252D02*
+X009929Y011252D01*
+X009901Y011174D02*
+X008820Y011174D01*
+X008820Y011095D02*
+X009901Y011095D01*
+X009905Y011017D02*
+X008820Y011017D01*
+X008820Y010938D02*
+X009938Y010938D01*
+X009982Y010860D02*
+X009086Y010860D01*
+X009188Y010781D02*
+X010020Y010781D01*
+X010020Y010703D02*
+X009250Y010703D01*
+X009282Y010624D02*
+X010020Y010624D01*
+X010020Y010546D02*
+X009299Y010546D01*
+X009299Y010467D02*
+X009482Y010467D01*
+X009370Y010389D02*
+X009283Y010389D01*
+X009303Y010310D02*
+X009251Y010310D01*
+X009271Y010232D02*
+X009190Y010232D01*
+X009251Y010153D02*
+X009092Y010153D01*
+X009251Y010075D02*
+X008820Y010075D01*
+X008820Y009996D02*
+X009264Y009996D01*
+X009296Y009918D02*
+X008820Y009918D01*
+X008820Y009839D02*
+X009352Y009839D01*
+X009440Y009761D02*
+X008820Y009761D01*
+X009137Y009682D02*
+X010020Y009682D01*
+X010020Y009604D02*
+X009215Y009604D01*
+X009261Y009525D02*
+X010020Y009525D01*
+X010020Y009447D02*
+X009294Y009447D01*
+X009299Y009368D02*
+X010020Y009368D01*
+X010020Y009290D02*
+X009299Y009290D01*
+X009272Y009211D02*
+X010020Y009211D01*
+X010020Y009133D02*
+X009239Y009133D01*
+X009163Y009054D02*
+X010020Y009054D01*
+X010020Y008976D02*
+X009026Y008976D01*
+X008820Y008897D02*
+X010020Y008897D01*
+X010020Y008819D02*
+X008820Y008819D01*
+X008820Y008740D02*
+X010020Y008740D01*
+X010020Y008662D02*
+X008820Y008662D01*
+X008820Y008583D02*
+X010020Y008583D01*
+X010020Y008505D02*
+X008820Y008505D01*
+X008820Y008426D02*
+X010050Y008426D01*
+X010111Y008348D02*
+X008820Y008348D01*
+X008250Y008805D02*
+X008250Y005955D01*
+X008100Y005805D01*
+X007802Y006071D02*
+X007480Y006071D01*
+X007480Y006021D02*
+X007480Y006439D01*
+X007609Y006568D01*
+X007687Y006646D01*
+X007730Y006749D01*
+X007730Y008661D01*
+X007824Y008567D01*
+X007970Y008507D01*
+X007970Y006183D01*
+X007874Y006143D01*
+X007762Y006031D01*
+X007701Y005884D01*
+X007701Y005780D01*
+X007687Y005814D01*
+X007480Y006021D01*
+X007508Y005993D02*
+X007746Y005993D01*
+X007714Y005914D02*
+X007587Y005914D01*
+X007665Y005836D02*
+X007701Y005836D01*
+X007450Y005655D02*
+X007200Y005905D01*
+X007200Y006555D01*
+X007450Y006805D01*
+X007450Y009955D01*
+X007750Y010255D01*
+X008050Y010255D01*
+X007816Y009925D02*
+X007824Y009917D01*
+X007971Y009856D01*
+X008129Y009856D01*
+X008180Y009877D01*
+X008180Y009283D01*
+X008129Y009304D01*
+X007971Y009304D01*
+X007824Y009243D01*
+X007730Y009149D01*
+X007730Y009839D01*
+X007816Y009925D01*
+X007809Y009918D02*
+X007824Y009918D01*
+X007730Y009839D02*
+X008180Y009839D01*
+X008180Y009761D02*
+X007730Y009761D01*
+X007730Y009682D02*
+X008180Y009682D01*
+X008180Y009604D02*
+X007730Y009604D01*
+X007730Y009525D02*
+X008180Y009525D01*
+X008180Y009447D02*
+X007730Y009447D01*
+X007730Y009368D02*
+X008180Y009368D01*
+X008180Y009290D02*
+X008164Y009290D01*
+X007936Y009290D02*
+X007730Y009290D01*
+X007730Y009211D02*
+X007792Y009211D01*
+X008050Y008905D02*
+X008150Y008905D01*
+X008250Y008805D01*
+X007970Y008505D02*
+X007730Y008505D01*
+X007730Y008583D02*
+X007808Y008583D01*
+X007730Y008426D02*
+X007970Y008426D01*
+X007970Y008348D02*
+X007730Y008348D01*
+X007730Y008269D02*
+X007970Y008269D01*
+X007970Y008191D02*
+X007730Y008191D01*
+X007730Y008112D02*
+X007970Y008112D01*
+X007970Y008034D02*
+X007730Y008034D01*
+X007730Y007955D02*
+X007970Y007955D01*
+X007970Y007877D02*
+X007730Y007877D01*
+X007730Y007798D02*
+X007970Y007798D01*
+X007970Y007720D02*
+X007730Y007720D01*
+X007730Y007641D02*
+X007970Y007641D01*
+X007970Y007563D02*
+X007730Y007563D01*
+X007730Y007484D02*
+X007970Y007484D01*
+X007970Y007406D02*
+X007730Y007406D01*
+X007730Y007327D02*
+X007970Y007327D01*
+X007970Y007249D02*
+X007730Y007249D01*
+X007730Y007170D02*
+X007970Y007170D01*
+X007970Y007092D02*
+X007730Y007092D01*
+X007730Y007013D02*
+X007970Y007013D01*
+X007970Y006935D02*
+X007730Y006935D01*
+X007730Y006856D02*
+X007970Y006856D01*
+X007970Y006778D02*
+X007730Y006778D01*
+X007709Y006699D02*
+X007970Y006699D01*
+X007970Y006621D02*
+X007661Y006621D01*
+X007583Y006542D02*
+X007970Y006542D01*
+X007970Y006464D02*
+X007504Y006464D01*
+X007480Y006385D02*
+X007970Y006385D01*
+X007970Y006307D02*
+X007480Y006307D01*
+X007480Y006228D02*
+X007970Y006228D01*
+X007890Y006150D02*
+X007480Y006150D01*
+X007450Y005655D02*
+X007450Y005205D01*
+X006600Y004355D01*
+X006229Y004501D02*
+X006160Y004501D01*
+X006201Y004423D02*
+X006019Y004423D01*
+X006201Y004344D02*
+X004580Y004344D01*
+X004580Y004266D02*
+X006205Y004266D01*
+X006238Y004187D02*
+X004580Y004187D01*
+X004580Y004109D02*
+X006283Y004109D01*
+X006361Y004030D02*
+X004580Y004030D01*
+X004580Y003952D02*
+X007751Y003952D01*
+X007751Y004030D02*
+X006839Y004030D01*
+X006917Y004109D02*
+X007782Y004109D01*
+X007818Y004187D02*
+X006962Y004187D01*
+X006995Y004266D02*
+X007897Y004266D01*
+X008047Y004344D02*
+X006999Y004344D01*
+X007063Y004423D02*
+X008380Y004423D01*
+X008301Y004501D02*
+X007142Y004501D01*
+X007220Y004580D02*
+X008226Y004580D01*
+X008194Y004658D02*
+X007884Y004658D01*
+X007716Y004658D02*
+X007299Y004658D01*
+X007377Y004737D02*
+X007555Y004737D01*
+X007476Y004815D02*
+X007456Y004815D01*
+X008045Y004737D02*
+X008180Y004737D01*
+X008180Y004815D02*
+X008124Y004815D01*
+X008165Y004894D02*
+X008180Y004894D01*
+X008253Y004344D02*
+X008458Y004344D01*
+X008403Y004266D02*
+X008537Y004266D01*
+X008482Y004187D02*
+X008615Y004187D01*
+X008694Y004109D02*
+X008518Y004109D01*
+X008549Y004030D02*
+X008772Y004030D01*
+X008851Y003952D02*
+X008549Y003952D01*
+X008548Y003873D02*
+X008929Y003873D01*
+X009008Y003795D02*
+X008515Y003795D01*
+X008480Y003716D02*
+X009086Y003716D01*
+X009130Y003638D02*
+X008480Y003638D01*
+X008480Y003559D02*
+X009130Y003559D01*
+X009130Y003481D02*
+X008480Y003481D01*
+X008480Y003402D02*
+X009130Y003402D01*
+X009130Y003324D02*
+X008480Y003324D01*
+X008480Y003245D02*
+X009130Y003245D01*
+X009130Y003167D02*
+X008480Y003167D01*
+X008480Y003088D02*
+X009130Y003088D01*
+X009130Y003010D02*
+X008480Y003010D01*
+X008480Y002931D02*
+X009130Y002931D01*
+X009130Y002853D02*
+X008480Y002853D01*
+X008480Y002774D02*
+X009130Y002774D01*
+X009130Y002696D02*
+X008480Y002696D01*
+X008480Y002617D02*
+X009130Y002617D01*
+X009130Y002539D02*
+X008480Y002539D01*
+X008480Y002460D02*
+X009130Y002460D01*
+X009130Y002382D02*
+X008480Y002382D01*
+X008480Y002303D02*
+X009130Y002303D01*
+X009130Y002225D02*
+X008480Y002225D01*
+X008480Y002146D02*
+X009130Y002146D01*
+X009130Y002068D02*
+X008480Y002068D01*
+X008480Y001989D02*
+X009130Y001989D01*
+X009130Y001911D02*
+X008480Y001911D01*
+X008480Y001832D02*
+X009130Y001832D01*
+X009130Y001754D02*
+X008930Y001754D01*
+X008770Y001754D02*
+X008480Y001754D01*
+X008526Y001675D02*
+X008606Y001675D01*
+X008566Y001635D02*
+X008566Y001635D01*
+X008450Y001355D02*
+X008850Y001355D01*
+X008900Y001355D01*
+X009106Y001047D02*
+X009130Y001047D01*
+X009139Y000969D02*
+X008959Y000969D01*
+X008741Y000969D02*
+X006327Y000969D01*
+X006338Y000979D02*
+X006399Y001126D01*
+X006399Y001208D01*
+X006737Y001546D01*
+X006780Y001649D01*
+X006780Y002021D01*
+X006838Y002079D01*
+X006899Y002226D01*
+X006899Y002384D01*
+X006838Y002531D01*
+X006726Y002643D01*
+X006579Y002704D01*
+X006421Y002704D01*
+X006274Y002643D01*
+X006162Y002531D01*
+X006101Y002384D01*
+X006101Y002226D01*
+X006162Y002079D01*
+X006220Y002021D01*
+X006220Y001821D01*
+X006003Y001604D01*
+X005921Y001604D01*
+X005774Y001543D01*
+X005662Y001431D01*
+X005601Y001284D01*
+X005601Y001126D01*
+X005662Y000979D01*
+X005774Y000867D01*
+X005921Y000806D01*
+X006079Y000806D01*
+X006226Y000867D01*
+X006338Y000979D01*
+X006366Y001047D02*
+X008594Y001047D01*
+X008284Y001126D02*
+X006399Y001126D01*
+X006399Y001204D02*
+X008205Y001204D01*
+X008127Y001283D02*
+X006473Y001283D01*
+X006552Y001361D02*
+X008048Y001361D01*
+X007970Y001440D02*
+X006630Y001440D01*
+X006709Y001518D02*
+X007933Y001518D01*
+X007920Y001597D02*
+X006758Y001597D01*
+X006780Y001675D02*
+X007920Y001675D01*
+X007920Y001754D02*
+X006780Y001754D01*
+X006780Y001832D02*
+X007920Y001832D01*
+X007920Y001911D02*
+X006780Y001911D01*
+X006780Y001989D02*
+X007920Y001989D01*
+X007920Y002068D02*
+X006826Y002068D01*
+X006866Y002146D02*
+X007920Y002146D01*
+X007920Y002225D02*
+X006898Y002225D01*
+X006899Y002303D02*
+X007920Y002303D01*
+X007920Y002382D02*
+X006899Y002382D01*
+X006867Y002460D02*
+X007920Y002460D01*
+X007920Y002539D02*
+X006830Y002539D01*
+X006752Y002617D02*
+X007920Y002617D01*
+X007920Y002696D02*
+X006599Y002696D01*
+X006401Y002696D02*
+X003980Y002696D01*
+X003980Y002774D02*
+X007920Y002774D01*
+X007920Y002853D02*
+X003980Y002853D01*
+X003980Y002931D02*
+X007920Y002931D01*
+X007920Y003010D02*
+X003980Y003010D01*
+X003980Y003088D02*
+X007920Y003088D01*
+X007920Y003167D02*
+X003980Y003167D01*
+X003980Y003245D02*
+X004127Y003245D01*
+X004018Y003324D02*
+X003980Y003324D01*
+X004300Y003605D02*
+X004300Y006805D01*
+X005550Y008055D01*
+X006050Y007555D01*
+X006050Y005555D01*
+X005850Y005355D01*
+X005479Y005208D02*
+X004580Y005208D01*
+X004580Y005286D02*
+X005451Y005286D01*
+X005451Y005365D02*
+X004949Y005365D01*
+X005102Y005443D02*
+X005455Y005443D01*
+X005487Y005522D02*
+X005180Y005522D01*
+X005217Y005600D02*
+X005531Y005600D01*
+X005610Y005679D02*
+X005249Y005679D01*
+X005249Y005757D02*
+X005770Y005757D01*
+X005770Y005836D02*
+X005248Y005836D01*
+X005216Y005914D02*
+X005770Y005914D01*
+X005770Y005993D02*
+X005176Y005993D01*
+X005098Y006071D02*
+X005770Y006071D01*
+X005770Y006150D02*
+X004940Y006150D01*
+X004760Y006150D02*
+X004580Y006150D01*
+X004580Y006228D02*
+X005770Y006228D01*
+X005770Y006307D02*
+X004580Y006307D01*
+X004580Y006385D02*
+X005770Y006385D01*
+X005770Y006464D02*
+X004580Y006464D01*
+X004580Y006542D02*
+X005770Y006542D01*
+X005770Y006621D02*
+X004580Y006621D01*
+X004590Y006699D02*
+X005770Y006699D01*
+X005770Y006778D02*
+X004669Y006778D01*
+X004747Y006856D02*
+X005770Y006856D01*
+X005770Y006935D02*
+X004826Y006935D01*
+X004904Y007013D02*
+X005770Y007013D01*
+X005770Y007092D02*
+X004983Y007092D01*
+X005061Y007170D02*
+X005770Y007170D01*
+X005770Y007249D02*
+X005140Y007249D01*
+X005218Y007327D02*
+X005770Y007327D01*
+X005770Y007406D02*
+X005297Y007406D01*
+X005375Y007484D02*
+X005725Y007484D01*
+X005646Y007563D02*
+X005454Y007563D01*
+X005532Y007641D02*
+X005568Y007641D01*
+X005054Y007955D02*
+X003964Y007955D01*
+X003926Y007993D02*
+X003826Y008035D01*
+X005559Y009768D01*
+X005637Y009846D01*
+X005680Y009949D01*
+X005680Y010122D01*
+X005754Y010049D01*
+X005762Y010029D01*
+X005874Y009917D01*
+X005894Y009909D01*
+X006230Y009572D01*
+X006230Y007771D01*
+X005949Y008052D01*
+X005949Y008134D01*
+X005888Y008281D01*
+X005776Y008393D01*
+X005629Y008454D01*
+X005471Y008454D01*
+X005324Y008393D01*
+X005212Y008281D01*
+X005151Y008134D01*
+X005151Y008052D01*
+X004063Y006964D01*
+X004020Y006861D01*
+X004020Y003889D01*
+X003980Y003849D01*
+X003980Y007371D01*
+X004038Y007429D01*
+X004099Y007576D01*
+X004099Y007734D01*
+X004038Y007881D01*
+X003926Y007993D01*
+X003828Y008034D02*
+X005133Y008034D01*
+X005151Y008112D02*
+X003903Y008112D01*
+X003982Y008191D02*
+X005175Y008191D01*
+X005207Y008269D02*
+X004060Y008269D01*
+X004139Y008348D02*
+X005279Y008348D01*
+X005404Y008426D02*
+X004217Y008426D01*
+X004296Y008505D02*
+X006230Y008505D01*
+X006230Y008583D02*
+X004374Y008583D01*
+X004453Y008662D02*
+X006230Y008662D01*
+X006230Y008740D02*
+X004531Y008740D01*
+X004610Y008819D02*
+X006230Y008819D01*
+X006230Y008897D02*
+X004688Y008897D01*
+X004767Y008976D02*
+X006230Y008976D01*
+X006230Y009054D02*
+X004845Y009054D01*
+X004924Y009133D02*
+X006230Y009133D01*
+X006230Y009211D02*
+X005002Y009211D01*
+X005081Y009290D02*
+X006230Y009290D01*
+X006230Y009368D02*
+X005159Y009368D01*
+X005238Y009447D02*
+X006230Y009447D01*
+X006230Y009525D02*
+X005316Y009525D01*
+X005395Y009604D02*
+X006199Y009604D01*
+X006120Y009682D02*
+X005473Y009682D01*
+X005552Y009761D02*
+X006042Y009761D01*
+X005963Y009839D02*
+X005630Y009839D01*
+X005667Y009918D02*
+X005874Y009918D01*
+X005795Y009996D02*
+X005680Y009996D01*
+X005680Y010075D02*
+X005728Y010075D01*
+X005400Y010005D02*
+X005400Y012005D01*
+X003550Y010405D02*
+X003550Y009255D01*
+X001750Y007455D01*
+X001750Y007105D01*
+X001700Y007055D01*
+X002084Y007170D02*
+X002169Y007170D01*
+X002099Y007134D02*
+X002099Y007100D01*
+X003910Y008911D01*
+X003774Y008967D01*
+X003716Y009025D01*
+X002030Y007339D01*
+X002030Y007289D01*
+X002038Y007281D01*
+X002099Y007134D01*
+X002051Y007249D02*
+X002248Y007249D01*
+X002326Y007327D02*
+X002030Y007327D01*
+X002097Y007406D02*
+X002405Y007406D01*
+X002483Y007484D02*
+X002175Y007484D01*
+X002254Y007563D02*
+X002562Y007563D01*
+X002640Y007641D02*
+X002332Y007641D01*
+X002411Y007720D02*
+X002719Y007720D01*
+X002797Y007798D02*
+X002489Y007798D01*
+X002568Y007877D02*
+X002876Y007877D01*
+X002954Y007955D02*
+X002646Y007955D01*
+X002725Y008034D02*
+X003033Y008034D01*
+X003111Y008112D02*
+X002803Y008112D01*
+X002882Y008191D02*
+X003190Y008191D01*
+X003268Y008269D02*
+X002960Y008269D01*
+X003039Y008348D02*
+X003347Y008348D01*
+X003425Y008426D02*
+X003117Y008426D01*
+X003196Y008505D02*
+X003504Y008505D01*
+X003582Y008583D02*
+X003274Y008583D01*
+X003353Y008662D02*
+X003661Y008662D01*
+X003739Y008740D02*
+X003431Y008740D01*
+X003510Y008819D02*
+X003818Y008819D01*
+X003896Y008897D02*
+X003588Y008897D01*
+X003667Y008976D02*
+X003766Y008976D01*
+X004373Y009447D02*
+X004446Y009447D01*
+X004524Y009525D02*
+X004340Y009525D01*
+X005400Y010005D02*
+X002300Y006905D01*
+X002300Y003855D01*
+X001534Y003167D02*
+X003420Y003167D01*
+X003420Y003245D02*
+X001456Y003245D01*
+X001377Y003324D02*
+X003420Y003324D01*
+X003420Y003402D02*
+X001299Y003402D01*
+X000900Y003405D02*
+X002150Y002155D01*
+X002520Y002303D02*
+X003098Y002303D01*
+X003331Y002382D02*
+X002487Y002382D01*
+X002409Y002460D02*
+X003409Y002460D01*
+X003420Y002539D02*
+X002266Y002539D01*
+X002084Y002617D02*
+X003420Y002617D01*
+X003420Y002696D02*
+X002005Y002696D01*
+X001927Y002774D02*
+X003420Y002774D01*
+X003420Y002853D02*
+X001848Y002853D01*
+X001770Y002931D02*
+X003420Y002931D01*
+X003420Y003010D02*
+X001691Y003010D01*
+X001613Y003088D02*
+X003420Y003088D01*
+X003980Y002617D02*
+X006248Y002617D01*
+X006170Y002539D02*
+X003980Y002539D01*
+X003980Y002460D02*
+X006133Y002460D01*
+X006101Y002382D02*
+X003980Y002382D01*
+X003980Y002303D02*
+X006101Y002303D01*
+X006102Y002225D02*
+X003949Y002225D01*
+X003887Y002146D02*
+X006134Y002146D01*
+X006174Y002068D02*
+X003808Y002068D01*
+X003730Y001989D02*
+X006220Y001989D01*
+X006220Y001911D02*
+X003699Y001911D01*
+X003681Y001832D02*
+X006220Y001832D01*
+X006153Y001754D02*
+X003648Y001754D01*
+X003584Y001675D02*
+X006074Y001675D01*
+X005903Y001597D02*
+X003476Y001597D01*
+X003124Y001597D02*
+X000700Y001597D01*
+X000700Y001675D02*
+X003016Y001675D01*
+X000700Y001518D02*
+X005749Y001518D01*
+X005671Y001440D02*
+X000700Y001440D01*
+X000700Y001361D02*
+X005633Y001361D01*
+X005601Y001283D02*
+X000700Y001283D01*
+X000700Y001204D02*
+X005601Y001204D01*
+X005601Y001126D02*
+X000700Y001126D01*
+X000700Y001047D02*
+X005634Y001047D01*
+X005673Y000969D02*
+X000700Y000969D01*
+X000700Y000890D02*
+X005751Y000890D01*
+X005908Y000812D02*
+X000700Y000812D01*
+X000700Y000733D02*
+X009319Y000733D01*
+X009241Y000812D02*
+X006092Y000812D01*
+X006249Y000890D02*
+X009172Y000890D01*
+X009398Y000655D02*
+X000700Y000655D01*
+X000700Y000576D02*
+X009476Y000576D01*
+X009555Y000498D02*
+X000700Y000498D01*
+X000700Y000419D02*
+X009633Y000419D01*
+X008450Y001355D02*
+X008200Y001605D01*
+X008200Y003905D01*
+X008150Y003955D01*
+X007785Y003795D02*
+X004653Y003795D01*
+X004686Y003716D02*
+X007825Y003716D01*
+X007904Y003638D02*
+X004699Y003638D01*
+X004699Y003559D02*
+X007920Y003559D01*
+X007920Y003481D02*
+X004680Y003481D01*
+X004648Y003402D02*
+X007920Y003402D01*
+X007920Y003324D02*
+X004582Y003324D01*
+X004473Y003245D02*
+X007920Y003245D01*
+X007752Y003873D02*
+X004596Y003873D01*
+X004020Y003952D02*
+X003980Y003952D01*
+X003980Y004030D02*
+X004020Y004030D01*
+X004020Y004109D02*
+X003980Y004109D01*
+X003980Y004187D02*
+X004020Y004187D01*
+X004020Y004266D02*
+X003980Y004266D01*
+X003980Y004344D02*
+X004020Y004344D01*
+X004020Y004423D02*
+X003980Y004423D01*
+X003980Y004501D02*
+X004020Y004501D01*
+X004020Y004580D02*
+X003980Y004580D01*
+X003980Y004658D02*
+X004020Y004658D01*
+X004020Y004737D02*
+X003980Y004737D01*
+X003980Y004815D02*
+X004020Y004815D01*
+X004020Y004894D02*
+X003980Y004894D01*
+X003980Y004972D02*
+X004020Y004972D01*
+X004020Y005051D02*
+X003980Y005051D01*
+X003980Y005129D02*
+X004020Y005129D01*
+X004020Y005208D02*
+X003980Y005208D01*
+X003980Y005286D02*
+X004020Y005286D01*
+X004020Y005365D02*
+X003980Y005365D01*
+X003980Y005443D02*
+X004020Y005443D01*
+X004020Y005522D02*
+X003980Y005522D01*
+X003980Y005600D02*
+X004020Y005600D01*
+X004020Y005679D02*
+X003980Y005679D01*
+X003980Y005757D02*
+X004020Y005757D01*
+X004020Y005836D02*
+X003980Y005836D01*
+X003980Y005914D02*
+X004020Y005914D01*
+X004020Y005993D02*
+X003980Y005993D01*
+X003980Y006071D02*
+X004020Y006071D01*
+X004020Y006150D02*
+X003980Y006150D01*
+X003980Y006228D02*
+X004020Y006228D01*
+X004020Y006307D02*
+X003980Y006307D01*
+X003980Y006385D02*
+X004020Y006385D01*
+X004020Y006464D02*
+X003980Y006464D01*
+X003980Y006542D02*
+X004020Y006542D01*
+X004020Y006621D02*
+X003980Y006621D01*
+X003980Y006699D02*
+X004020Y006699D01*
+X004020Y006778D02*
+X003980Y006778D01*
+X003980Y006856D02*
+X004020Y006856D01*
+X004051Y006935D02*
+X003980Y006935D01*
+X003980Y007013D02*
+X004112Y007013D01*
+X004191Y007092D02*
+X003980Y007092D01*
+X003980Y007170D02*
+X004269Y007170D01*
+X004348Y007249D02*
+X003980Y007249D01*
+X003980Y007327D02*
+X004426Y007327D01*
+X004505Y007406D02*
+X004014Y007406D01*
+X004061Y007484D02*
+X004583Y007484D01*
+X004662Y007563D02*
+X004093Y007563D01*
+X004099Y007641D02*
+X004740Y007641D01*
+X004819Y007720D02*
+X004099Y007720D01*
+X004072Y007798D02*
+X004897Y007798D01*
+X004976Y007877D02*
+X004040Y007877D01*
+X005696Y008426D02*
+X006230Y008426D01*
+X006230Y008348D02*
+X005821Y008348D01*
+X005893Y008269D02*
+X006230Y008269D01*
+X006230Y008191D02*
+X005925Y008191D01*
+X005949Y008112D02*
+X006230Y008112D01*
+X006230Y008034D02*
+X005967Y008034D01*
+X006046Y007955D02*
+X006230Y007955D01*
+X006230Y007877D02*
+X006124Y007877D01*
+X006203Y007798D02*
+X006230Y007798D01*
+X004602Y006071D02*
+X004580Y006071D01*
+X004580Y005443D02*
+X004598Y005443D01*
+X004580Y005365D02*
+X004751Y005365D01*
+X004580Y004972D02*
+X005538Y004972D01*
+X005505Y004894D02*
+X004580Y004894D01*
+X004580Y004815D02*
+X005501Y004815D01*
+X005501Y004737D02*
+X004580Y004737D01*
+X004580Y004658D02*
+X005529Y004658D01*
+X005562Y004580D02*
+X004580Y004580D01*
+X004580Y004501D02*
+X005640Y004501D01*
+X005781Y004423D02*
+X004580Y004423D01*
+X004004Y003873D02*
+X003980Y003873D01*
+X005512Y005129D02*
+X005586Y005055D01*
+X006299Y004737D02*
+X006405Y004737D01*
+X006339Y004658D02*
+X006271Y004658D01*
+X006261Y004580D02*
+X006238Y004580D01*
+X006700Y005005D02*
+X007000Y005305D01*
+X007000Y009805D01*
+X006550Y010255D01*
+X006100Y010255D02*
+X006050Y010205D01*
+X009818Y010467D02*
+X010020Y010467D01*
+X010020Y010389D02*
+X009930Y010389D01*
+X009997Y010310D02*
+X010020Y010310D01*
+X010004Y009918D02*
+X010020Y009918D01*
+X010020Y009839D02*
+X009948Y009839D01*
+X010020Y009761D02*
+X009860Y009761D01*
+X012240Y009761D02*
+X013720Y009761D01*
+X013720Y009839D02*
+X012398Y009839D01*
+X012476Y009918D02*
+X012524Y009918D01*
+X012976Y009918D02*
+X013720Y009918D01*
+X013720Y009996D02*
+X013055Y009996D01*
+X013107Y010075D02*
+X013720Y010075D01*
+X013720Y010153D02*
+X013139Y010153D01*
+X013149Y010232D02*
+X013720Y010232D01*
+X013720Y010310D02*
+X013149Y010310D01*
+X013126Y010389D02*
+X013720Y010389D01*
+X013720Y010467D02*
+X013094Y010467D01*
+X013023Y010546D02*
+X013720Y010546D01*
+X013720Y010624D02*
+X012901Y010624D01*
+X013227Y012037D02*
+X013301Y012037D01*
+X013301Y012116D02*
+X013194Y012116D01*
+X013125Y012194D02*
+X013305Y012194D01*
+X013338Y012273D02*
+X013005Y012273D01*
+X012695Y012273D02*
+X011830Y012273D01*
+X011830Y012351D02*
+X013382Y012351D01*
+X013461Y012430D02*
+X011830Y012430D01*
+X011830Y012508D02*
+X013920Y012508D01*
+X013920Y012587D02*
+X011830Y012587D01*
+X011830Y012665D02*
+X013920Y012665D01*
+X013920Y012744D02*
+X011830Y012744D01*
+X011830Y012822D02*
+X013920Y012822D01*
+X013920Y012901D02*
+X011830Y012901D01*
+X011830Y012979D02*
+X013812Y012979D01*
+X013734Y013058D02*
+X011830Y013058D01*
+X011830Y013136D02*
+X013688Y013136D01*
+X013656Y013215D02*
+X011830Y013215D01*
+X011830Y013293D02*
+X013651Y013293D01*
+X013651Y013372D02*
+X011830Y013372D01*
+X011830Y013450D02*
+X013678Y013450D01*
+X013711Y013529D02*
+X011830Y013529D01*
+X011830Y013607D02*
+X013788Y013607D01*
+X013927Y013686D02*
+X011830Y013686D01*
+X011873Y013764D02*
+X014120Y013764D01*
+X014120Y013843D02*
+X011914Y013843D01*
+X011947Y013921D02*
+X014120Y013921D01*
+X014120Y014000D02*
+X011949Y014000D01*
+X011949Y014078D02*
+X014120Y014078D01*
+X014120Y014314D02*
+X012818Y014314D01*
+X012901Y014392D02*
+X014120Y014392D01*
+X013936Y014471D02*
+X012955Y014471D01*
+X012988Y014549D02*
+X013792Y014549D01*
+X013714Y014628D02*
+X012999Y014628D01*
+X012999Y014706D02*
+X013680Y014706D01*
+X013651Y014785D02*
+X012978Y014785D01*
+X012945Y014863D02*
+X013651Y014863D01*
+X013654Y014942D02*
+X012877Y014942D01*
+X012761Y015020D02*
+X013687Y015020D01*
+X015530Y015256D02*
+X016320Y015256D01*
+X016320Y015334D02*
+X015530Y015334D01*
+X015530Y015413D02*
+X016320Y015413D01*
+X016320Y015491D02*
+X015530Y015491D01*
+X015530Y015570D02*
+X016320Y015570D01*
+X016320Y015648D02*
+X015530Y015648D01*
+X015530Y015727D02*
+X016320Y015727D01*
+X016320Y015805D02*
+X015530Y015805D01*
+X015530Y015884D02*
+X016320Y015884D01*
+X016320Y015962D02*
+X015530Y015962D01*
+X015530Y016041D02*
+X016320Y016041D01*
+X016190Y016119D02*
+X015530Y016119D01*
+X015530Y016198D02*
+X016044Y016198D01*
+X015965Y016276D02*
+X015530Y016276D01*
+X015530Y016355D02*
+X015931Y016355D01*
+X015901Y016433D02*
+X015530Y016433D01*
+X015530Y016512D02*
+X015901Y016512D01*
+X015904Y016590D02*
+X015530Y016590D01*
+X015530Y016669D02*
+X015936Y016669D01*
+X015978Y016747D02*
+X015530Y016747D01*
+X015530Y016826D02*
+X016057Y016826D01*
+X015530Y016904D02*
+X023170Y016904D01*
+X023170Y016983D02*
+X023019Y016983D01*
+X022990Y016983D02*
+X022910Y016983D01*
+X022910Y016978D02*
+X022910Y017415D01*
+X022473Y017415D01*
+X022484Y017343D01*
+X022507Y017272D01*
+X022542Y017205D01*
+X022586Y017144D01*
+X022639Y017091D01*
+X022700Y017047D01*
+X022767Y017012D01*
+X022838Y016989D01*
+X022910Y016978D01*
+X022881Y016983D02*
+X022019Y016983D01*
+X021990Y016983D02*
+X021910Y016983D01*
+X021910Y016978D02*
+X021910Y017415D01*
+X021473Y017415D01*
+X021484Y017343D01*
+X021507Y017272D01*
+X021542Y017205D01*
+X021586Y017144D01*
+X021639Y017091D01*
+X021700Y017047D01*
+X021767Y017012D01*
+X021838Y016989D01*
+X021910Y016978D01*
+X021881Y016983D02*
+X021019Y016983D01*
+X020990Y016983D02*
+X020910Y016983D01*
+X020910Y016978D02*
+X020910Y017415D01*
+X020473Y017415D01*
+X020484Y017343D01*
+X020507Y017272D01*
+X020542Y017205D01*
+X020586Y017144D01*
+X020639Y017091D01*
+X020700Y017047D01*
+X020767Y017012D01*
+X020838Y016989D01*
+X020910Y016978D01*
+X020881Y016983D02*
+X015530Y016983D01*
+X015530Y017061D02*
+X020680Y017061D01*
+X020590Y017140D02*
+X015530Y017140D01*
+X015530Y017218D02*
+X020535Y017218D01*
+X020499Y017297D02*
+X015530Y017297D01*
+X015566Y017375D02*
+X020479Y017375D01*
+X020479Y017532D02*
+X015891Y017532D01*
+X015969Y017611D02*
+X020498Y017611D01*
+X020910Y017454D02*
+X015645Y017454D01*
+X015250Y017455D02*
+X015650Y017855D01*
+X016049Y017846D02*
+X017801Y017846D01*
+X017801Y017925D02*
+X016049Y017925D01*
+X016045Y017768D02*
+X017833Y017768D01*
+X017894Y017689D02*
+X016013Y017689D01*
+X015250Y017455D02*
+X015250Y007455D01*
+X016100Y006605D01*
+X015767Y006542D02*
+X015580Y006542D01*
+X015580Y006464D02*
+X015755Y006464D01*
+X015689Y006621D02*
+X015580Y006621D01*
+X015580Y006699D02*
+X015610Y006699D01*
+X015050Y007355D02*
+X015050Y018005D01*
+X015250Y018205D01*
+X016650Y018205D01*
+X017400Y018955D01*
+X017977Y018945D02*
+X020624Y018945D01*
+X020545Y018867D02*
+X017977Y018867D01*
+X017977Y018788D02*
+X020466Y018788D01*
+X020430Y018710D02*
+X017977Y018710D01*
+X017977Y018631D02*
+X020398Y018631D01*
+X020195Y018553D02*
+X017970Y018553D01*
+X017933Y018474D02*
+X018888Y018474D01*
+X019537Y018474D02*
+X020116Y018474D01*
+X019988Y018415D02*
+X019988Y018415D01*
+X020814Y019024D02*
+X017977Y019024D01*
+X017977Y019102D02*
+X023251Y019102D01*
+X023291Y019142D02*
+X023291Y019142D01*
+X023330Y019181D02*
+X017977Y019181D01*
+X017977Y019259D02*
+X023408Y019259D01*
+X023487Y019338D02*
+X017977Y019338D01*
+X017946Y019416D02*
+X023565Y019416D01*
+X023644Y019495D02*
+X017875Y019495D01*
+X016925Y019495D02*
+X016606Y019495D01*
+X016756Y019416D02*
+X016854Y019416D01*
+X017829Y018396D02*
+X017974Y018396D01*
+X017895Y018317D02*
+X017158Y018317D01*
+X017080Y018239D02*
+X017833Y018239D01*
+X017801Y018160D02*
+X017001Y018160D01*
+X016923Y018082D02*
+X017801Y018082D01*
+X017801Y018003D02*
+X016844Y018003D01*
+X014901Y019259D02*
+X014899Y019259D01*
+X014834Y019338D02*
+X014966Y019338D01*
+X015044Y019416D02*
+X014756Y019416D01*
+X014606Y019495D02*
+X015194Y019495D01*
+X019490Y017689D02*
+X019497Y017689D01*
+X020910Y017375D02*
+X020990Y017375D01*
+X020990Y017415D02*
+X020990Y016978D01*
+X021062Y016989D01*
+X021133Y017012D01*
+X021200Y017047D01*
+X021261Y017091D01*
+X021314Y017144D01*
+X021358Y017205D01*
+X021393Y017272D01*
+X021416Y017343D01*
+X021427Y017415D01*
+X020990Y017415D01*
+X020990Y017454D02*
+X021910Y017454D01*
+X021910Y017375D02*
+X021990Y017375D01*
+X021990Y017415D02*
+X021990Y016978D01*
+X022062Y016989D01*
+X022133Y017012D01*
+X022200Y017047D01*
+X022261Y017091D01*
+X022314Y017144D01*
+X022358Y017205D01*
+X022393Y017272D01*
+X022416Y017343D01*
+X022427Y017415D01*
+X021990Y017415D01*
+X021990Y017454D02*
+X022910Y017454D01*
+X022910Y017375D02*
+X022990Y017375D01*
+X022990Y017297D02*
+X022910Y017297D01*
+X022910Y017218D02*
+X022990Y017218D01*
+X022990Y017140D02*
+X022910Y017140D01*
+X022910Y017061D02*
+X022990Y017061D01*
+X022680Y017061D02*
+X022220Y017061D01*
+X022310Y017140D02*
+X022590Y017140D01*
+X022535Y017218D02*
+X022365Y017218D01*
+X022401Y017297D02*
+X022499Y017297D01*
+X022479Y017375D02*
+X022421Y017375D01*
+X022421Y017532D02*
+X022479Y017532D01*
+X022498Y017611D02*
+X022402Y017611D01*
+X022367Y017689D02*
+X022533Y017689D01*
+X022587Y017768D02*
+X022313Y017768D01*
+X022224Y017846D02*
+X022676Y017846D01*
+X022722Y017925D02*
+X022178Y017925D01*
+X022315Y018003D02*
+X022585Y018003D01*
+X022507Y018082D02*
+X022393Y018082D01*
+X021722Y017925D02*
+X021178Y017925D01*
+X021224Y017846D02*
+X021676Y017846D01*
+X021587Y017768D02*
+X021313Y017768D01*
+X021367Y017689D02*
+X021533Y017689D01*
+X021498Y017611D02*
+X021402Y017611D01*
+X021421Y017532D02*
+X021479Y017532D01*
+X021479Y017375D02*
+X021421Y017375D01*
+X021401Y017297D02*
+X021499Y017297D01*
+X021535Y017218D02*
+X021365Y017218D01*
+X021310Y017140D02*
+X021590Y017140D01*
+X021680Y017061D02*
+X021220Y017061D01*
+X020990Y017061D02*
+X020910Y017061D01*
+X020910Y017140D02*
+X020990Y017140D01*
+X020990Y017218D02*
+X020910Y017218D01*
+X020910Y017297D02*
+X020990Y017297D01*
+X021315Y018003D02*
+X021585Y018003D01*
+X021507Y018082D02*
+X021393Y018082D01*
+X021434Y018788D02*
+X021466Y018788D01*
+X021545Y018867D02*
+X021355Y018867D01*
+X021276Y018945D02*
+X021624Y018945D01*
+X021814Y019024D02*
+X021086Y019024D01*
+X022086Y019024D02*
+X022814Y019024D01*
+X022624Y018945D02*
+X022276Y018945D01*
+X022355Y018867D02*
+X022545Y018867D01*
+X022466Y018788D02*
+X022434Y018788D01*
+X023086Y019024D02*
+X023196Y019024D01*
+X023990Y017454D02*
+X024910Y017454D01*
+X023990Y017375D02*
+X023910Y017375D01*
+X023910Y017297D02*
+X023990Y017297D01*
+X023990Y017218D02*
+X023910Y017218D01*
+X023910Y017140D02*
+X023990Y017140D01*
+X023990Y017061D02*
+X023910Y017061D01*
+X021990Y017061D02*
+X021910Y017061D01*
+X021910Y017140D02*
+X021990Y017140D01*
+X021990Y017218D02*
+X021910Y017218D01*
+X021910Y017297D02*
+X021990Y017297D01*
+X018414Y016433D02*
+X016768Y016433D01*
+X016841Y016355D02*
+X018351Y016355D01*
+X018319Y016276D02*
+X016874Y016276D01*
+X016880Y016198D02*
+X018301Y016198D01*
+X018301Y016119D02*
+X016880Y016119D01*
+X016880Y016041D02*
+X018316Y016041D01*
+X016535Y013694D02*
+X016562Y013629D01*
+X016606Y013585D01*
+X016544Y013585D01*
+X016441Y013542D01*
+X016363Y013464D01*
+X015930Y013031D01*
+X015930Y013089D01*
+X016535Y013694D01*
+X016539Y013686D02*
+X016527Y013686D01*
+X016584Y013607D02*
+X016448Y013607D01*
+X016428Y013529D02*
+X016370Y013529D01*
+X016349Y013450D02*
+X016291Y013450D01*
+X016271Y013372D02*
+X016213Y013372D01*
+X016192Y013293D02*
+X016134Y013293D01*
+X016114Y013215D02*
+X016056Y013215D01*
+X016035Y013136D02*
+X015977Y013136D01*
+X015957Y013058D02*
+X015930Y013058D01*
+X016100Y012805D02*
+X016100Y009305D01*
+X016450Y008955D01*
+X016450Y008555D01*
+X016288Y008191D02*
+X016249Y008191D01*
+X016093Y008112D02*
+X016579Y008112D01*
+X016705Y008034D02*
+X015930Y008034D01*
+X015930Y007798D02*
+X016407Y007798D01*
+X016251Y007720D02*
+X015981Y007720D01*
+X016060Y007641D02*
+X016172Y007641D01*
+X014200Y006905D02*
+X014200Y013155D01*
+X014050Y013305D01*
+X012575Y012194D02*
+X012523Y012194D01*
+X012077Y012194D02*
+X011830Y012194D01*
+X011835Y012116D02*
+X011997Y012116D01*
+X011944Y012037D02*
+X011914Y012037D01*
+X011270Y012744D02*
+X010949Y012744D01*
+X010949Y012822D02*
+X011270Y012822D01*
+X011270Y012901D02*
+X010942Y012901D01*
+X010910Y012979D02*
+X011270Y012979D01*
+X011270Y013058D02*
+X010861Y013058D01*
+X010783Y013136D02*
+X011270Y013136D01*
+X011270Y013215D02*
+X010266Y013215D01*
+X010298Y013136D02*
+X010317Y013136D01*
+X010226Y013293D02*
+X011270Y013293D01*
+X011270Y013372D02*
+X010866Y013372D01*
+X010829Y013356D02*
+X010976Y013417D01*
+X011088Y013529D01*
+X011149Y013676D01*
+X011149Y013834D01*
+X011088Y013981D01*
+X010976Y014093D01*
+X010829Y014154D01*
+X010671Y014154D01*
+X010524Y014093D01*
+X010412Y013981D01*
+X010351Y013834D01*
+X010351Y013676D01*
+X010412Y013529D01*
+X010524Y013417D01*
+X010671Y013356D01*
+X010829Y013356D01*
+X010634Y013372D02*
+X010147Y013372D01*
+X009988Y013450D02*
+X010491Y013450D01*
+X010413Y013529D02*
+X008820Y013529D01*
+X008820Y013607D02*
+X010380Y013607D01*
+X010351Y013686D02*
+X008820Y013686D01*
+X008820Y013764D02*
+X010351Y013764D01*
+X010355Y013843D02*
+X008820Y013843D01*
+X008820Y013921D02*
+X010387Y013921D01*
+X010431Y014000D02*
+X008820Y014000D01*
+X008820Y014078D02*
+X010509Y014078D01*
+X010991Y014078D02*
+X011151Y014078D01*
+X011151Y014000D02*
+X011069Y014000D01*
+X011113Y013921D02*
+X011153Y013921D01*
+X011145Y013843D02*
+X011186Y013843D01*
+X011149Y013764D02*
+X011227Y013764D01*
+X011270Y013686D02*
+X011149Y013686D01*
+X011120Y013607D02*
+X011270Y013607D01*
+X011270Y013529D02*
+X011087Y013529D01*
+X011009Y013450D02*
+X011270Y013450D01*
+X011181Y014157D02*
+X008820Y014157D01*
+X008820Y014235D02*
+X011216Y014235D01*
+X011295Y014314D02*
+X008820Y014314D01*
+X008820Y014392D02*
+X011442Y014392D01*
+X011386Y014471D02*
+X008820Y014471D01*
+X008820Y014549D02*
+X008967Y014549D01*
+X008864Y014628D02*
+X008816Y014628D01*
+X008801Y014706D02*
+X008784Y014706D01*
+X008768Y014785D02*
+X008723Y014785D01*
+X008751Y014863D02*
+X008645Y014863D01*
+X008566Y014942D02*
+X008751Y014942D01*
+X008766Y015020D02*
+X008488Y015020D01*
+X008607Y015099D02*
+X008799Y015099D01*
+X008858Y015177D02*
+X008686Y015177D01*
+X008720Y015256D02*
+X008954Y015256D01*
+X008925Y015334D02*
+X008749Y015334D01*
+X008749Y015413D02*
+X008846Y015413D01*
+X008768Y015491D02*
+X008746Y015491D01*
+X008900Y015755D02*
+X009300Y015355D01*
+X011000Y015355D01*
+X011500Y014855D01*
+X011130Y014706D02*
+X009499Y014706D01*
+X009532Y014785D02*
+X011101Y014785D01*
+X011096Y014863D02*
+X009549Y014863D01*
+X009549Y014942D02*
+X011017Y014942D01*
+X010939Y015020D02*
+X009534Y015020D01*
+X009436Y014628D02*
+X011164Y014628D01*
+X011242Y014549D02*
+X009333Y014549D01*
+X007899Y014704D02*
+X007871Y014704D01*
+X007724Y014643D01*
+X007625Y014544D01*
+X007526Y014643D01*
+X007379Y014704D01*
+X007299Y014704D01*
+X007299Y014834D01*
+X007277Y014886D01*
+X007547Y015156D01*
+X007629Y015156D01*
+X007680Y015177D01*
+X007679Y015177D01*
+X007680Y015177D02*
+X007680Y014991D01*
+X007729Y014874D01*
+X007899Y014704D01*
+X007896Y014706D02*
+X007299Y014706D01*
+X007299Y014785D02*
+X007818Y014785D01*
+X007739Y014863D02*
+X007287Y014863D01*
+X007333Y014942D02*
+X007701Y014942D01*
+X007680Y015020D02*
+X007411Y015020D01*
+X007490Y015099D02*
+X007680Y015099D01*
+X007709Y014628D02*
+X007541Y014628D01*
+X007620Y014549D02*
+X007630Y014549D01*
+X006900Y014755D02*
+X006900Y014905D01*
+X007550Y015555D01*
+X007950Y015555D02*
+X007950Y015505D01*
+X008000Y015455D01*
+X008900Y015755D02*
+X008900Y019205D01*
+X009189Y019181D02*
+X010261Y019181D01*
+X010200Y019259D02*
+X009250Y019259D01*
+X009283Y019338D02*
+X010167Y019338D01*
+X010151Y019416D02*
+X009299Y019416D01*
+X009299Y019495D02*
+X010151Y019495D01*
+X010167Y019573D02*
+X009283Y019573D01*
+X009250Y019652D02*
+X010200Y019652D01*
+X010261Y019730D02*
+X009189Y019730D01*
+X009088Y019809D02*
+X010362Y019809D01*
+X010360Y019102D02*
+X009180Y019102D01*
+X008820Y013450D02*
+X009812Y013450D01*
+X009653Y013372D02*
+X008820Y013372D01*
+X008820Y013293D02*
+X009574Y013293D01*
+X009534Y013215D02*
+X008820Y013215D01*
+X001793Y010467D02*
+X001180Y010467D01*
+X001180Y010389D02*
+X001643Y010389D01*
+X001564Y010310D02*
+X001180Y010310D01*
+X001180Y010232D02*
+X001522Y010232D01*
+X001489Y010153D02*
+X001180Y010153D01*
+X001180Y010075D02*
+X001480Y010075D01*
+X001480Y009996D02*
+X001180Y009996D01*
+X001180Y009918D02*
+X001498Y009918D01*
+X001530Y009839D02*
+X001180Y009839D01*
+X001180Y009761D02*
+X001585Y009761D01*
+X001646Y009211D02*
+X001180Y009211D01*
+X001180Y009133D02*
+X001568Y009133D01*
+X001523Y009054D02*
+X001180Y009054D01*
+X001180Y008976D02*
+X001490Y008976D01*
+X001480Y008897D02*
+X001180Y008897D01*
+X001180Y008819D02*
+X001480Y008819D01*
+X001496Y008740D02*
+X001180Y008740D01*
+X001180Y008662D02*
+X001529Y008662D01*
+X001581Y008583D02*
+X001180Y008583D01*
+X001180Y008505D02*
+X001659Y008505D01*
+X010618Y006778D02*
+X012711Y006778D01*
+X012787Y006856D02*
+X010697Y006856D01*
+X010753Y006935D02*
+X012924Y006935D01*
+X013176Y006935D02*
+X013584Y006935D01*
+X013539Y006856D02*
+X013313Y006856D01*
+X013389Y006778D02*
+X013520Y006778D01*
+X013520Y006699D02*
+X013422Y006699D01*
+X013662Y007013D02*
+X010780Y007013D01*
+X010780Y007092D02*
+X013720Y007092D01*
+X013720Y007170D02*
+X010780Y007170D01*
+X010780Y007249D02*
+X013720Y007249D01*
+X013720Y007327D02*
+X010780Y007327D01*
+X010780Y007406D02*
+X013720Y007406D01*
+X013720Y007484D02*
+X010780Y007484D01*
+X013162Y006071D02*
+X013195Y006071D01*
+X013249Y005993D02*
+X013083Y005993D01*
+X013005Y005914D02*
+X013331Y005914D01*
+X014100Y006305D02*
+X014100Y006805D01*
+X014200Y006905D01*
+X020477Y002931D02*
+X021428Y002931D01*
+X021350Y003010D02*
+X020658Y003010D01*
+X020747Y003088D02*
+X021271Y003088D01*
+X021234Y003167D02*
+X020804Y003167D01*
+X020836Y003245D02*
+X021220Y003245D01*
+X021220Y003324D02*
+X020849Y003324D01*
+X020849Y003402D02*
+X021220Y003402D01*
+X021220Y003481D02*
+X020830Y003481D01*
+X020797Y003559D02*
+X020864Y003559D01*
+X021036Y003559D02*
+X021220Y003559D01*
+X021220Y003638D02*
+X021196Y003638D01*
+X022518Y003010D02*
+X022782Y003010D01*
+X022738Y003088D02*
+X022592Y003088D01*
+X023100Y003255D02*
+X024000Y003255D01*
+X024550Y003805D01*
+X024778Y003638D02*
+X025332Y003638D01*
+X025190Y003559D02*
+X024700Y003559D01*
+X024621Y003481D02*
+X025112Y003481D01*
+X025079Y003402D02*
+X024543Y003402D01*
+X024464Y003324D02*
+X025051Y003324D01*
+X025044Y003245D02*
+X024386Y003245D01*
+X024307Y003167D02*
+X024966Y003167D01*
+X024887Y003088D02*
+X024229Y003088D01*
+X024139Y003010D02*
+X024809Y003010D01*
+X023450Y004805D02*
+X023450Y007705D01*
+X023600Y007855D01*
+X023170Y007756D02*
+X023170Y007756D01*
+X023170Y007720D02*
+X023155Y007720D01*
+X023170Y007641D02*
+X023100Y007641D01*
+X023030Y007563D02*
+X023170Y007563D01*
+X023170Y007484D02*
+X023030Y007484D01*
+X023030Y007406D02*
+X023170Y007406D01*
+X023170Y007327D02*
+X023030Y007327D01*
+X023030Y007249D02*
+X023170Y007249D01*
+X023170Y007170D02*
+X023030Y007170D01*
+X023030Y007092D02*
+X023170Y007092D01*
+X023170Y007013D02*
+X023030Y007013D01*
+X023030Y006935D02*
+X023170Y006935D01*
+X023170Y006856D02*
+X023030Y006856D01*
+X023030Y006778D02*
+X023170Y006778D01*
+X023170Y006699D02*
+X023030Y006699D01*
+X023030Y006621D02*
+X023170Y006621D01*
+X023170Y006542D02*
+X023030Y006542D01*
+X023030Y006464D02*
+X023170Y006464D01*
+X023170Y006385D02*
+X023030Y006385D01*
+X023030Y006307D02*
+X023170Y006307D01*
+X023170Y006228D02*
+X023030Y006228D01*
+X023030Y006150D02*
+X023170Y006150D01*
+X023170Y006071D02*
+X023030Y006071D01*
+X023030Y005993D02*
+X023170Y005993D01*
+X023170Y005914D02*
+X023030Y005914D01*
+X023030Y005836D02*
+X023170Y005836D01*
+X023170Y005757D02*
+X023030Y005757D01*
+X023030Y005679D02*
+X023170Y005679D01*
+X023170Y005600D02*
+X023030Y005600D01*
+X023030Y005522D02*
+X023170Y005522D01*
+X023170Y005443D02*
+X023027Y005443D01*
+X022995Y005365D02*
+X023170Y005365D01*
+X023170Y005286D02*
+X022927Y005286D01*
+X022848Y005208D02*
+X023170Y005208D01*
+X023170Y005129D02*
+X022770Y005129D01*
+X022691Y005051D02*
+X023170Y005051D01*
+X023170Y004972D02*
+X022613Y004972D01*
+X022502Y004894D02*
+X023170Y004894D01*
+X023170Y004815D02*
+X022350Y004815D01*
+X022250Y005205D02*
+X022450Y005205D01*
+X022750Y005505D01*
+X022750Y007855D01*
+X022800Y007905D01*
+X022522Y008191D02*
+X022380Y008191D01*
+X022380Y008269D02*
+X022637Y008269D01*
+X022454Y008112D02*
+X022380Y008112D01*
+X022380Y008034D02*
+X022422Y008034D01*
+X022401Y007955D02*
+X022380Y007955D01*
+X022380Y007877D02*
+X022401Y007877D01*
+X022413Y007798D02*
+X022380Y007798D01*
+X022380Y007720D02*
+X022445Y007720D01*
+X022470Y007641D02*
+X022380Y007641D01*
+X022380Y007563D02*
+X022470Y007563D01*
+X022470Y007484D02*
+X022380Y007484D01*
+X022380Y007406D02*
+X022470Y007406D01*
+X022470Y007327D02*
+X022380Y007327D01*
+X022380Y007249D02*
+X022470Y007249D01*
+X022470Y007170D02*
+X022380Y007170D01*
+X022400Y006755D02*
+X022400Y006655D01*
+X022550Y006505D01*
+X022550Y005805D01*
+X022350Y005605D01*
+X021981Y005757D02*
+X021980Y005757D01*
+X021980Y005754D02*
+X021980Y006589D01*
+X022020Y006629D01*
+X022062Y006529D01*
+X022174Y006417D01*
+X022270Y006377D01*
+X022270Y006003D01*
+X022124Y005943D01*
+X022012Y005831D01*
+X021980Y005754D01*
+X021980Y005836D02*
+X022017Y005836D01*
+X021980Y005914D02*
+X022095Y005914D01*
+X021980Y005993D02*
+X022244Y005993D01*
+X022270Y006071D02*
+X021980Y006071D01*
+X021980Y006150D02*
+X022270Y006150D01*
+X022270Y006228D02*
+X021980Y006228D01*
+X021980Y006307D02*
+X022270Y006307D01*
+X022251Y006385D02*
+X021980Y006385D01*
+X021980Y006464D02*
+X022128Y006464D01*
+X022057Y006542D02*
+X021980Y006542D01*
+X022011Y006621D02*
+X022024Y006621D01*
+X022380Y009290D02*
+X022440Y009290D01*
+X021556Y010703D02*
+X021291Y010703D01*
+X021390Y010781D02*
+X021478Y010781D01*
+X024960Y010781D02*
+X025670Y010781D01*
+X025670Y010703D02*
+X024960Y010703D01*
+X024960Y010624D02*
+X025670Y010624D01*
+X025670Y010546D02*
+X024960Y010546D01*
+X024960Y010467D02*
+X025670Y010467D01*
+X025670Y010389D02*
+X024960Y010389D01*
+X024960Y010310D02*
+X025670Y010310D01*
+X025663Y010232D02*
+X024960Y010232D01*
+X024960Y010153D02*
+X025584Y010153D01*
+X025539Y010075D02*
+X025150Y010075D01*
+X025273Y009996D02*
+X025502Y009996D01*
+X025349Y009918D02*
+X025344Y009918D01*
+X025900Y009905D02*
+X025950Y009955D01*
+X025950Y014705D01*
+X025900Y014755D01*
+X027730Y015491D02*
+X027790Y015491D01*
+X027250Y016355D02*
+X026900Y016705D01*
+X026170Y016983D02*
+X026019Y016983D01*
+X027730Y016747D02*
+X032200Y016747D01*
+X032200Y016669D02*
+X027730Y016669D01*
+X029180Y014235D02*
+X029860Y014235D01*
+X029920Y014157D02*
+X029180Y014157D01*
+X029180Y014078D02*
+X029920Y014078D01*
+X029920Y014000D02*
+X029180Y014000D01*
+X029180Y013921D02*
+X029920Y013921D01*
+X029920Y013843D02*
+X029180Y013843D01*
+X029180Y013764D02*
+X029920Y013764D01*
+X029920Y013686D02*
+X029180Y013686D01*
+X029180Y013607D02*
+X029920Y013607D01*
+X029920Y013529D02*
+X029180Y013529D01*
+X029180Y013450D02*
+X029920Y013450D01*
+X029920Y013372D02*
+X029180Y013372D01*
+X025670Y012665D02*
+X024960Y012665D01*
+X024960Y012587D02*
+X025670Y012587D01*
+X025670Y012508D02*
+X024960Y012508D01*
+X024960Y012430D02*
+X025670Y012430D01*
+X025670Y012351D02*
+X024960Y012351D01*
+X024960Y012273D02*
+X025670Y012273D01*
+X025670Y012194D02*
+X024960Y012194D01*
+X024960Y012116D02*
+X025670Y012116D01*
+X025670Y012037D02*
+X024960Y012037D01*
+X024960Y011959D02*
+X025670Y011959D01*
+X025670Y011880D02*
+X024960Y011880D01*
+X024960Y011802D02*
+X025670Y011802D01*
+X025670Y011723D02*
+X024960Y011723D01*
+X024960Y011645D02*
+X025670Y011645D01*
+X025670Y011566D02*
+X024960Y011566D01*
+X024960Y011488D02*
+X025670Y011488D01*
+X025670Y011409D02*
+X024960Y011409D01*
+X024960Y011331D02*
+X025670Y011331D01*
+X025670Y011252D02*
+X024960Y011252D01*
+X024960Y011174D02*
+X025670Y011174D01*
+X025670Y011095D02*
+X024960Y011095D01*
+X024960Y011017D02*
+X025670Y011017D01*
+X025670Y010938D02*
+X024960Y010938D01*
+X024960Y010860D02*
+X025670Y010860D01*
+X031100Y007205D02*
+X031350Y007455D01*
+X031100Y007205D02*
+X031100Y006155D01*
+X032116Y006935D02*
+X032200Y006935D01*
+X032200Y007013D02*
+X032038Y007013D01*
+X031959Y007092D02*
+X032200Y007092D01*
+X032200Y007170D02*
+X031881Y007170D01*
+X032191Y006856D02*
+X032200Y006856D01*
+X032200Y002303D02*
+X020939Y002303D01*
+X020907Y002225D02*
+X032200Y002225D01*
+X032200Y002146D02*
+X020855Y002146D01*
+X020776Y002068D02*
+X032200Y002068D01*
+X021821Y002539D02*
+X020926Y002539D01*
+X020894Y002617D02*
+X021742Y002617D01*
+X021664Y002696D02*
+X020823Y002696D01*
+X020701Y002774D02*
+X021585Y002774D01*
+X021507Y002853D02*
+X020555Y002853D01*
+X009130Y001675D02*
+X009094Y001675D01*
+X006500Y001705D02*
+X006000Y001205D01*
+X006500Y001705D02*
+X006500Y002305D01*
+D20*
+X018300Y003655D02*
+X018700Y003655D01*
+X018700Y007155D01*
+X018700Y016155D01*
+X014050Y017355D02*
+X014050Y014855D01*
+X024600Y015105D02*
+X024600Y008205D01*
+X027900Y008855D02*
+X027900Y006755D01*
+X027900Y003655D01*
+X027650Y003405D01*
+X026950Y003405D01*
+X018700Y003655D02*
+X018700Y002205D01*
+X027900Y008855D02*
+X027900Y015105D01*
+X024750Y016605D02*
+X024600Y016455D01*
+X024600Y015105D01*
+D21*
+X020150Y006655D02*
+X020150Y004455D01*
+X020150Y004405D01*
+X020100Y004355D01*
+X020100Y002855D01*
+X020550Y002405D01*
+X017750Y003055D02*
+X017150Y002455D01*
+X017750Y003055D02*
+X017750Y004205D01*
+X017750Y006605D01*
+X009700Y003355D02*
+X009450Y003355D01*
+X009450Y001055D01*
+X010000Y000505D01*
+X011700Y000505D01*
+X011950Y000755D01*
+X011950Y001355D01*
+X012000Y001405D01*
+X012000Y001455D01*
+X009450Y003355D02*
+X009450Y003805D01*
+X008500Y004755D01*
+X008500Y010505D01*
+X008900Y010505D01*
+X008500Y010505D02*
+X008500Y014555D01*
+X008000Y015055D01*
+X008000Y015455D01*
+X008000Y017305D01*
+X007850Y017455D01*
+X007550Y017455D01*
+X007550Y018455D01*
+X007400Y018605D01*
+X007550Y017455D02*
+X006300Y017455D01*
+X005250Y016405D01*
+X005250Y016005D01*
+X004900Y016005D01*
+X005250Y016005D02*
+X005250Y013855D01*
+X005800Y013305D01*
+X005800Y010455D01*
+X006050Y010205D01*
+X006550Y009705D01*
+X006550Y005455D01*
+X005900Y004805D01*
+X006300Y017455D02*
+X006600Y017455D01*
+M02*
diff --git a/pcb/proxmark3_fix/CAM/proxmark3.GBO b/pcb/proxmark3_fix/CAM/proxmark3.GBO
new file mode 100644 (file)
index 0000000..90d9b04
--- /dev/null
@@ -0,0 +1,197 @@
+G75*
+G70*
+%OFA0B0*%
+%FSLAX24Y24*%
+%IPPOS*%
+%LPD*%
+%AMOC8*
+5,1,8,0,0,1.08239X$1,22.5*
+%
+%ADD10C,0.0010*%
+%ADD11C,0.0000*%
+D10*
+X000450Y000105D02*
+X032450Y000105D01*
+X032450Y020305D01*
+X000450Y020305D01*
+X000450Y000105D01*
+D11*
+X001720Y008864D02*
+X001722Y008891D01*
+X001728Y008918D01*
+X001737Y008944D01*
+X001750Y008968D01*
+X001766Y008991D01*
+X001785Y009010D01*
+X001807Y009027D01*
+X001831Y009041D01*
+X001856Y009051D01*
+X001883Y009058D01*
+X001910Y009061D01*
+X001938Y009060D01*
+X001965Y009055D01*
+X001991Y009047D01*
+X002015Y009035D01*
+X002038Y009019D01*
+X002059Y009001D01*
+X002076Y008980D01*
+X002091Y008956D01*
+X002102Y008931D01*
+X002110Y008905D01*
+X002114Y008878D01*
+X002114Y008850D01*
+X002110Y008823D01*
+X002102Y008797D01*
+X002091Y008772D01*
+X002076Y008748D01*
+X002059Y008727D01*
+X002038Y008709D01*
+X002016Y008693D01*
+X001991Y008681D01*
+X001965Y008673D01*
+X001938Y008668D01*
+X001910Y008667D01*
+X001883Y008670D01*
+X001856Y008677D01*
+X001831Y008687D01*
+X001807Y008701D01*
+X001785Y008718D01*
+X001766Y008737D01*
+X001750Y008760D01*
+X001737Y008784D01*
+X001728Y008810D01*
+X001722Y008837D01*
+X001720Y008864D01*
+X001720Y010046D02*
+X001722Y010073D01*
+X001728Y010100D01*
+X001737Y010126D01*
+X001750Y010150D01*
+X001766Y010173D01*
+X001785Y010192D01*
+X001807Y010209D01*
+X001831Y010223D01*
+X001856Y010233D01*
+X001883Y010240D01*
+X001910Y010243D01*
+X001938Y010242D01*
+X001965Y010237D01*
+X001991Y010229D01*
+X002015Y010217D01*
+X002038Y010201D01*
+X002059Y010183D01*
+X002076Y010162D01*
+X002091Y010138D01*
+X002102Y010113D01*
+X002110Y010087D01*
+X002114Y010060D01*
+X002114Y010032D01*
+X002110Y010005D01*
+X002102Y009979D01*
+X002091Y009954D01*
+X002076Y009930D01*
+X002059Y009909D01*
+X002038Y009891D01*
+X002016Y009875D01*
+X001991Y009863D01*
+X001965Y009855D01*
+X001938Y009850D01*
+X001910Y009849D01*
+X001883Y009852D01*
+X001856Y009859D01*
+X001831Y009869D01*
+X001807Y009883D01*
+X001785Y009900D01*
+X001766Y009919D01*
+X001750Y009942D01*
+X001737Y009966D01*
+X001728Y009992D01*
+X001722Y010019D01*
+X001720Y010046D01*
+X002703Y016644D02*
+X002705Y016670D01*
+X002711Y016696D01*
+X002721Y016721D01*
+X002734Y016744D01*
+X002750Y016764D01*
+X002770Y016782D01*
+X002792Y016797D01*
+X002815Y016809D01*
+X002841Y016817D01*
+X002867Y016821D01*
+X002893Y016821D01*
+X002919Y016817D01*
+X002945Y016809D01*
+X002969Y016797D01*
+X002990Y016782D01*
+X003010Y016764D01*
+X003026Y016744D01*
+X003039Y016721D01*
+X003049Y016696D01*
+X003055Y016670D01*
+X003057Y016644D01*
+X003055Y016618D01*
+X003049Y016592D01*
+X003039Y016567D01*
+X003026Y016544D01*
+X003010Y016524D01*
+X002990Y016506D01*
+X002968Y016491D01*
+X002945Y016479D01*
+X002919Y016471D01*
+X002893Y016467D01*
+X002867Y016467D01*
+X002841Y016471D01*
+X002815Y016479D01*
+X002791Y016491D01*
+X002770Y016506D01*
+X002750Y016524D01*
+X002734Y016544D01*
+X002721Y016567D01*
+X002711Y016592D01*
+X002705Y016618D01*
+X002703Y016644D01*
+X002703Y018022D02*
+X002705Y018048D01*
+X002711Y018074D01*
+X002721Y018099D01*
+X002734Y018122D01*
+X002750Y018142D01*
+X002770Y018160D01*
+X002792Y018175D01*
+X002815Y018187D01*
+X002841Y018195D01*
+X002867Y018199D01*
+X002893Y018199D01*
+X002919Y018195D01*
+X002945Y018187D01*
+X002969Y018175D01*
+X002990Y018160D01*
+X003010Y018142D01*
+X003026Y018122D01*
+X003039Y018099D01*
+X003049Y018074D01*
+X003055Y018048D01*
+X003057Y018022D01*
+X003055Y017996D01*
+X003049Y017970D01*
+X003039Y017945D01*
+X003026Y017922D01*
+X003010Y017902D01*
+X002990Y017884D01*
+X002968Y017869D01*
+X002945Y017857D01*
+X002919Y017849D01*
+X002893Y017845D01*
+X002867Y017845D01*
+X002841Y017849D01*
+X002815Y017857D01*
+X002791Y017869D01*
+X002770Y017884D01*
+X002750Y017902D01*
+X002734Y017922D01*
+X002721Y017945D01*
+X002711Y017970D01*
+X002705Y017996D01*
+X002703Y018022D01*
+M02*
diff --git a/pcb/proxmark3_fix/CAM/proxmark3.GBP b/pcb/proxmark3_fix/CAM/proxmark3.GBP
new file mode 100644 (file)
index 0000000..90d9b04
--- /dev/null
@@ -0,0 +1,197 @@
+G75*
+G70*
+%OFA0B0*%
+%FSLAX24Y24*%
+%IPPOS*%
+%LPD*%
+%AMOC8*
+5,1,8,0,0,1.08239X$1,22.5*
+%
+%ADD10C,0.0010*%
+%ADD11C,0.0000*%
+D10*
+X000450Y000105D02*
+X032450Y000105D01*
+X032450Y020305D01*
+X000450Y020305D01*
+X000450Y000105D01*
+D11*
+X001720Y008864D02*
+X001722Y008891D01*
+X001728Y008918D01*
+X001737Y008944D01*
+X001750Y008968D01*
+X001766Y008991D01*
+X001785Y009010D01*
+X001807Y009027D01*
+X001831Y009041D01*
+X001856Y009051D01*
+X001883Y009058D01*
+X001910Y009061D01*
+X001938Y009060D01*
+X001965Y009055D01*
+X001991Y009047D01*
+X002015Y009035D01*
+X002038Y009019D01*
+X002059Y009001D01*
+X002076Y008980D01*
+X002091Y008956D01*
+X002102Y008931D01*
+X002110Y008905D01*
+X002114Y008878D01*
+X002114Y008850D01*
+X002110Y008823D01*
+X002102Y008797D01*
+X002091Y008772D01*
+X002076Y008748D01*
+X002059Y008727D01*
+X002038Y008709D01*
+X002016Y008693D01*
+X001991Y008681D01*
+X001965Y008673D01*
+X001938Y008668D01*
+X001910Y008667D01*
+X001883Y008670D01*
+X001856Y008677D01*
+X001831Y008687D01*
+X001807Y008701D01*
+X001785Y008718D01*
+X001766Y008737D01*
+X001750Y008760D01*
+X001737Y008784D01*
+X001728Y008810D01*
+X001722Y008837D01*
+X001720Y008864D01*
+X001720Y010046D02*
+X001722Y010073D01*
+X001728Y010100D01*
+X001737Y010126D01*
+X001750Y010150D01*
+X001766Y010173D01*
+X001785Y010192D01*
+X001807Y010209D01*
+X001831Y010223D01*
+X001856Y010233D01*
+X001883Y010240D01*
+X001910Y010243D01*
+X001938Y010242D01*
+X001965Y010237D01*
+X001991Y010229D01*
+X002015Y010217D01*
+X002038Y010201D01*
+X002059Y010183D01*
+X002076Y010162D01*
+X002091Y010138D01*
+X002102Y010113D01*
+X002110Y010087D01*
+X002114Y010060D01*
+X002114Y010032D01*
+X002110Y010005D01*
+X002102Y009979D01*
+X002091Y009954D01*
+X002076Y009930D01*
+X002059Y009909D01*
+X002038Y009891D01*
+X002016Y009875D01*
+X001991Y009863D01*
+X001965Y009855D01*
+X001938Y009850D01*
+X001910Y009849D01*
+X001883Y009852D01*
+X001856Y009859D01*
+X001831Y009869D01*
+X001807Y009883D01*
+X001785Y009900D01*
+X001766Y009919D01*
+X001750Y009942D01*
+X001737Y009966D01*
+X001728Y009992D01*
+X001722Y010019D01*
+X001720Y010046D01*
+X002703Y016644D02*
+X002705Y016670D01*
+X002711Y016696D01*
+X002721Y016721D01*
+X002734Y016744D01*
+X002750Y016764D01*
+X002770Y016782D01*
+X002792Y016797D01*
+X002815Y016809D01*
+X002841Y016817D01*
+X002867Y016821D01*
+X002893Y016821D01*
+X002919Y016817D01*
+X002945Y016809D01*
+X002969Y016797D01*
+X002990Y016782D01*
+X003010Y016764D01*
+X003026Y016744D01*
+X003039Y016721D01*
+X003049Y016696D01*
+X003055Y016670D01*
+X003057Y016644D01*
+X003055Y016618D01*
+X003049Y016592D01*
+X003039Y016567D01*
+X003026Y016544D01*
+X003010Y016524D01*
+X002990Y016506D01*
+X002968Y016491D01*
+X002945Y016479D01*
+X002919Y016471D01*
+X002893Y016467D01*
+X002867Y016467D01*
+X002841Y016471D01*
+X002815Y016479D01*
+X002791Y016491D01*
+X002770Y016506D01*
+X002750Y016524D01*
+X002734Y016544D01*
+X002721Y016567D01*
+X002711Y016592D01*
+X002705Y016618D01*
+X002703Y016644D01*
+X002703Y018022D02*
+X002705Y018048D01*
+X002711Y018074D01*
+X002721Y018099D01*
+X002734Y018122D01*
+X002750Y018142D01*
+X002770Y018160D01*
+X002792Y018175D01*
+X002815Y018187D01*
+X002841Y018195D01*
+X002867Y018199D01*
+X002893Y018199D01*
+X002919Y018195D01*
+X002945Y018187D01*
+X002969Y018175D01*
+X002990Y018160D01*
+X003010Y018142D01*
+X003026Y018122D01*
+X003039Y018099D01*
+X003049Y018074D01*
+X003055Y018048D01*
+X003057Y018022D01*
+X003055Y017996D01*
+X003049Y017970D01*
+X003039Y017945D01*
+X003026Y017922D01*
+X003010Y017902D01*
+X002990Y017884D01*
+X002968Y017869D01*
+X002945Y017857D01*
+X002919Y017849D01*
+X002893Y017845D01*
+X002867Y017845D01*
+X002841Y017849D01*
+X002815Y017857D01*
+X002791Y017869D01*
+X002770Y017884D01*
+X002750Y017902D01*
+X002734Y017922D01*
+X002721Y017945D01*
+X002711Y017970D01*
+X002705Y017996D01*
+X002703Y018022D01*
+M02*
diff --git a/pcb/proxmark3_fix/CAM/proxmark3.GBS b/pcb/proxmark3_fix/CAM/proxmark3.GBS
new file mode 100644 (file)
index 0000000..390589d
--- /dev/null
@@ -0,0 +1,386 @@
+G75*
+G70*
+%OFA0B0*%
+%FSLAX24Y24*%
+%IPPOS*%
+%LPD*%
+%AMOC8*
+5,1,8,0,0,1.08239X$1,22.5*
+%
+%ADD10C,0.0010*%
+%ADD11C,0.0090*%
+%ADD12C,0.0000*%
+%ADD13C,0.0354*%
+%ADD14C,0.0394*%
+%ADD15R,0.0675X0.0675*%
+%ADD16C,0.0675*%
+%ADD17C,0.0945*%
+%ADD18C,0.1575*%
+D10*
+X000450Y000105D02*
+X032450Y000105D01*
+X032450Y020305D01*
+X000450Y020305D01*
+X000450Y000105D01*
+D11*
+X027978Y000868D02*
+X028047Y000800D01*
+X028184Y000800D01*
+X028252Y000868D01*
+X028431Y000800D02*
+X028636Y000937D01*
+X028431Y001074D01*
+X028252Y001142D02*
+X028184Y001210D01*
+X028047Y001210D01*
+X027978Y001142D01*
+X027978Y001074D01*
+X028047Y001005D01*
+X027978Y000937D01*
+X027978Y000868D01*
+X028047Y001005D02*
+X028115Y001005D01*
+X028636Y000800D02*
+X028636Y001210D01*
+X028814Y001074D02*
+X028883Y001074D01*
+X029019Y000937D01*
+X029019Y000800D02*
+X029019Y001074D01*
+X029206Y001005D02*
+X029206Y000800D01*
+X029411Y000800D01*
+X029480Y000868D01*
+X029411Y000937D01*
+X029206Y000937D01*
+X029206Y001005D02*
+X029275Y001074D01*
+X029411Y001074D01*
+X029667Y001005D02*
+X029667Y000800D01*
+X029803Y000800D02*
+X029803Y001005D01*
+X029735Y001074D01*
+X029667Y001005D01*
+X029803Y001005D02*
+X029872Y001074D01*
+X029940Y001074D01*
+X029940Y000800D01*
+X030127Y000800D02*
+X030401Y001074D01*
+X030587Y001005D02*
+X030656Y001074D01*
+X030793Y001074D01*
+X030861Y001005D01*
+X030861Y000868D01*
+X030793Y000800D01*
+X030656Y000800D01*
+X030587Y000868D01*
+X030587Y001005D01*
+X030401Y000800D02*
+X030127Y001074D01*
+X031039Y001074D02*
+X031108Y001074D01*
+X031245Y000937D01*
+X031245Y000800D02*
+X031245Y001074D01*
+X031431Y001005D02*
+X031431Y000868D01*
+X031500Y000800D01*
+X031705Y000800D01*
+X031705Y000663D02*
+X031705Y001074D01*
+X031500Y001074D01*
+X031431Y001005D01*
+X005405Y019368D02*
+X005337Y019300D01*
+X005268Y019300D01*
+X005200Y019368D01*
+X005200Y019710D01*
+X005268Y019710D02*
+X005131Y019710D01*
+X004945Y019368D02*
+X004876Y019368D01*
+X004876Y019300D01*
+X004945Y019300D01*
+X004945Y019368D01*
+X004254Y019300D02*
+X004117Y019437D01*
+X003980Y019300D01*
+X003980Y019710D01*
+X004254Y019710D02*
+X004254Y019300D01*
+X003794Y019368D02*
+X003794Y019505D01*
+X003725Y019574D01*
+X003588Y019574D01*
+X003520Y019505D01*
+X003520Y019437D01*
+X003794Y019437D01*
+X003794Y019368D02*
+X003725Y019300D01*
+X003588Y019300D01*
+X003333Y019300D02*
+X003128Y019300D01*
+X003060Y019368D01*
+X003128Y019437D01*
+X003265Y019437D01*
+X003333Y019505D01*
+X003265Y019574D01*
+X003060Y019574D01*
+X002873Y019574D02*
+X002736Y019574D01*
+X002804Y019642D02*
+X002804Y019368D01*
+X002736Y019300D01*
+X002566Y019300D02*
+X002566Y019710D01*
+X002498Y019574D02*
+X002361Y019574D01*
+X002292Y019505D01*
+X002292Y019300D01*
+X002106Y019368D02*
+X002037Y019300D01*
+X001832Y019300D01*
+X001832Y019574D01*
+X001645Y019505D02*
+X001577Y019574D01*
+X001440Y019574D01*
+X001372Y019505D01*
+X001372Y019437D01*
+X001645Y019437D01*
+X001645Y019505D02*
+X001645Y019368D01*
+X001577Y019300D01*
+X001440Y019300D01*
+X001185Y019300D02*
+X000980Y019300D01*
+X000911Y019368D01*
+X000980Y019437D01*
+X001116Y019437D01*
+X001185Y019505D01*
+X001116Y019574D01*
+X000911Y019574D01*
+X002106Y019574D02*
+X002106Y019368D01*
+X002498Y019574D02*
+X002566Y019505D01*
+D12*
+X002703Y018022D02*
+X002705Y018048D01*
+X002711Y018074D01*
+X002721Y018099D01*
+X002734Y018122D01*
+X002750Y018142D01*
+X002770Y018160D01*
+X002792Y018175D01*
+X002815Y018187D01*
+X002841Y018195D01*
+X002867Y018199D01*
+X002893Y018199D01*
+X002919Y018195D01*
+X002945Y018187D01*
+X002969Y018175D01*
+X002990Y018160D01*
+X003010Y018142D01*
+X003026Y018122D01*
+X003039Y018099D01*
+X003049Y018074D01*
+X003055Y018048D01*
+X003057Y018022D01*
+X003055Y017996D01*
+X003049Y017970D01*
+X003039Y017945D01*
+X003026Y017922D01*
+X003010Y017902D01*
+X002990Y017884D01*
+X002968Y017869D01*
+X002945Y017857D01*
+X002919Y017849D01*
+X002893Y017845D01*
+X002867Y017845D01*
+X002841Y017849D01*
+X002815Y017857D01*
+X002791Y017869D01*
+X002770Y017884D01*
+X002750Y017902D01*
+X002734Y017922D01*
+X002721Y017945D01*
+X002711Y017970D01*
+X002705Y017996D01*
+X002703Y018022D01*
+X002703Y016644D02*
+X002705Y016670D01*
+X002711Y016696D01*
+X002721Y016721D01*
+X002734Y016744D01*
+X002750Y016764D01*
+X002770Y016782D01*
+X002792Y016797D01*
+X002815Y016809D01*
+X002841Y016817D01*
+X002867Y016821D01*
+X002893Y016821D01*
+X002919Y016817D01*
+X002945Y016809D01*
+X002969Y016797D01*
+X002990Y016782D01*
+X003010Y016764D01*
+X003026Y016744D01*
+X003039Y016721D01*
+X003049Y016696D01*
+X003055Y016670D01*
+X003057Y016644D01*
+X003055Y016618D01*
+X003049Y016592D01*
+X003039Y016567D01*
+X003026Y016544D01*
+X003010Y016524D01*
+X002990Y016506D01*
+X002968Y016491D01*
+X002945Y016479D01*
+X002919Y016471D01*
+X002893Y016467D01*
+X002867Y016467D01*
+X002841Y016471D01*
+X002815Y016479D01*
+X002791Y016491D01*
+X002770Y016506D01*
+X002750Y016524D01*
+X002734Y016544D01*
+X002721Y016567D01*
+X002711Y016592D01*
+X002705Y016618D01*
+X002703Y016644D01*
+X001720Y010046D02*
+X001722Y010073D01*
+X001728Y010100D01*
+X001737Y010126D01*
+X001750Y010150D01*
+X001766Y010173D01*
+X001785Y010192D01*
+X001807Y010209D01*
+X001831Y010223D01*
+X001856Y010233D01*
+X001883Y010240D01*
+X001910Y010243D01*
+X001938Y010242D01*
+X001965Y010237D01*
+X001991Y010229D01*
+X002015Y010217D01*
+X002038Y010201D01*
+X002059Y010183D01*
+X002076Y010162D01*
+X002091Y010138D01*
+X002102Y010113D01*
+X002110Y010087D01*
+X002114Y010060D01*
+X002114Y010032D01*
+X002110Y010005D01*
+X002102Y009979D01*
+X002091Y009954D01*
+X002076Y009930D01*
+X002059Y009909D01*
+X002038Y009891D01*
+X002016Y009875D01*
+X001991Y009863D01*
+X001965Y009855D01*
+X001938Y009850D01*
+X001910Y009849D01*
+X001883Y009852D01*
+X001856Y009859D01*
+X001831Y009869D01*
+X001807Y009883D01*
+X001785Y009900D01*
+X001766Y009919D01*
+X001750Y009942D01*
+X001737Y009966D01*
+X001728Y009992D01*
+X001722Y010019D01*
+X001720Y010046D01*
+X001720Y008864D02*
+X001722Y008891D01*
+X001728Y008918D01*
+X001737Y008944D01*
+X001750Y008968D01*
+X001766Y008991D01*
+X001785Y009010D01*
+X001807Y009027D01*
+X001831Y009041D01*
+X001856Y009051D01*
+X001883Y009058D01*
+X001910Y009061D01*
+X001938Y009060D01*
+X001965Y009055D01*
+X001991Y009047D01*
+X002015Y009035D01*
+X002038Y009019D01*
+X002059Y009001D01*
+X002076Y008980D01*
+X002091Y008956D01*
+X002102Y008931D01*
+X002110Y008905D01*
+X002114Y008878D01*
+X002114Y008850D01*
+X002110Y008823D01*
+X002102Y008797D01*
+X002091Y008772D01*
+X002076Y008748D01*
+X002059Y008727D01*
+X002038Y008709D01*
+X002016Y008693D01*
+X001991Y008681D01*
+X001965Y008673D01*
+X001938Y008668D01*
+X001910Y008667D01*
+X001883Y008670D01*
+X001856Y008677D01*
+X001831Y008687D01*
+X001807Y008701D01*
+X001785Y008718D01*
+X001766Y008737D01*
+X001750Y008760D01*
+X001737Y008784D01*
+X001728Y008810D01*
+X001722Y008837D01*
+X001720Y008864D01*
+D13*
+X002880Y016644D03*
+X002880Y018022D03*
+D14*
+X001917Y010046D03*
+X001917Y008864D03*
+D15*
+X017400Y018955D03*
+X029950Y018455D03*
+D16*
+X028950Y018455D03*
+X027950Y018455D03*
+X026950Y018455D03*
+X025950Y018455D03*
+X024950Y018455D03*
+X023950Y018455D03*
+X022950Y018455D03*
+X021950Y018455D03*
+X020950Y018455D03*
+X020950Y017455D03*
+X021950Y017455D03*
+X022950Y017455D03*
+X023950Y017455D03*
+X024950Y017455D03*
+X025950Y017455D03*
+X026950Y017455D03*
+X027950Y017455D03*
+X028950Y017455D03*
+X029950Y017455D03*
+X016400Y018955D03*
+X015400Y018955D03*
+X014400Y018955D03*
+X013400Y018955D03*
+X012400Y018955D03*
+D17*
+X020115Y015140D03*
+D18*
+X011550Y017705D03*
+X023050Y001405D03*
+M02*
diff --git a/pcb/proxmark3_fix/CAM/proxmark3.GL1 b/pcb/proxmark3_fix/CAM/proxmark3.GL1
new file mode 100644 (file)
index 0000000..dc56942
--- /dev/null
@@ -0,0 +1,9352 @@
+G75*
+G70*
+%OFA0B0*%
+%FSLAX24Y24*%
+%IPPOS*%
+%LPD*%
+%AMOC8*
+5,1,8,0,0,1.08239X$1,22.5*
+%
+%ADD10C,0.0010*%
+%ADD11C,0.0090*%
+%ADD12C,0.0110*%
+%ADD13C,0.0000*%
+%ADD14C,0.0675*%
+%ADD15C,0.0945*%
+%ADD16C,0.0080*%
+%ADD17C,0.0317*%
+%ADD18C,0.1181*%
+D10*
+X000450Y000105D02*
+X032450Y000105D01*
+X032450Y020305D01*
+X000450Y020305D01*
+X000450Y000105D01*
+D11*
+X020213Y019050D02*
+X020213Y019324D01*
+X020213Y019187D02*
+X020350Y019324D01*
+X020418Y019324D01*
+X020596Y019255D02*
+X020665Y019324D01*
+X020802Y019324D01*
+X020870Y019255D01*
+X020870Y019118D01*
+X020802Y019050D01*
+X020665Y019050D01*
+X020596Y019118D01*
+X020596Y019255D01*
+X021057Y019324D02*
+X021057Y019118D01*
+X021125Y019050D01*
+X021330Y019050D01*
+X021330Y019324D01*
+X021517Y019324D02*
+X021654Y019324D01*
+X021586Y019392D02*
+X021586Y019118D01*
+X021654Y019050D01*
+X021824Y019118D02*
+X021824Y019255D01*
+X021893Y019324D01*
+X022029Y019324D01*
+X022098Y019255D01*
+X022098Y019187D01*
+X021824Y019187D01*
+X021824Y019118D02*
+X021893Y019050D01*
+X022029Y019050D01*
+X022285Y019050D02*
+X022558Y019324D01*
+X022558Y019392D01*
+X022490Y019460D01*
+X022353Y019460D01*
+X022285Y019392D01*
+X022285Y019050D02*
+X022558Y019050D01*
+D12*
+X035505Y022160D02*
+X035702Y022160D01*
+X035603Y022160D02*
+X035603Y022751D01*
+X035505Y022751D02*
+X035702Y022751D01*
+X035935Y022751D02*
+X036328Y022160D01*
+X036328Y022751D01*
+X036579Y022554D02*
+X036776Y022751D01*
+X036776Y022160D01*
+X036579Y022160D02*
+X036973Y022160D01*
+X035935Y022160D02*
+X035935Y022751D01*
+D13*
+X002703Y018022D02*
+X002705Y018048D01*
+X002711Y018074D01*
+X002721Y018099D01*
+X002734Y018122D01*
+X002750Y018142D01*
+X002770Y018160D01*
+X002792Y018175D01*
+X002815Y018187D01*
+X002841Y018195D01*
+X002867Y018199D01*
+X002893Y018199D01*
+X002919Y018195D01*
+X002945Y018187D01*
+X002969Y018175D01*
+X002990Y018160D01*
+X003010Y018142D01*
+X003026Y018122D01*
+X003039Y018099D01*
+X003049Y018074D01*
+X003055Y018048D01*
+X003057Y018022D01*
+X003055Y017996D01*
+X003049Y017970D01*
+X003039Y017945D01*
+X003026Y017922D01*
+X003010Y017902D01*
+X002990Y017884D01*
+X002968Y017869D01*
+X002945Y017857D01*
+X002919Y017849D01*
+X002893Y017845D01*
+X002867Y017845D01*
+X002841Y017849D01*
+X002815Y017857D01*
+X002791Y017869D01*
+X002770Y017884D01*
+X002750Y017902D01*
+X002734Y017922D01*
+X002721Y017945D01*
+X002711Y017970D01*
+X002705Y017996D01*
+X002703Y018022D01*
+X002703Y016644D02*
+X002705Y016670D01*
+X002711Y016696D01*
+X002721Y016721D01*
+X002734Y016744D01*
+X002750Y016764D01*
+X002770Y016782D01*
+X002792Y016797D01*
+X002815Y016809D01*
+X002841Y016817D01*
+X002867Y016821D01*
+X002893Y016821D01*
+X002919Y016817D01*
+X002945Y016809D01*
+X002969Y016797D01*
+X002990Y016782D01*
+X003010Y016764D01*
+X003026Y016744D01*
+X003039Y016721D01*
+X003049Y016696D01*
+X003055Y016670D01*
+X003057Y016644D01*
+X003055Y016618D01*
+X003049Y016592D01*
+X003039Y016567D01*
+X003026Y016544D01*
+X003010Y016524D01*
+X002990Y016506D01*
+X002968Y016491D01*
+X002945Y016479D01*
+X002919Y016471D01*
+X002893Y016467D01*
+X002867Y016467D01*
+X002841Y016471D01*
+X002815Y016479D01*
+X002791Y016491D01*
+X002770Y016506D01*
+X002750Y016524D01*
+X002734Y016544D01*
+X002721Y016567D01*
+X002711Y016592D01*
+X002705Y016618D01*
+X002703Y016644D01*
+X001720Y010046D02*
+X001722Y010073D01*
+X001728Y010100D01*
+X001737Y010126D01*
+X001750Y010150D01*
+X001766Y010173D01*
+X001785Y010192D01*
+X001807Y010209D01*
+X001831Y010223D01*
+X001856Y010233D01*
+X001883Y010240D01*
+X001910Y010243D01*
+X001938Y010242D01*
+X001965Y010237D01*
+X001991Y010229D01*
+X002015Y010217D01*
+X002038Y010201D01*
+X002059Y010183D01*
+X002076Y010162D01*
+X002091Y010138D01*
+X002102Y010113D01*
+X002110Y010087D01*
+X002114Y010060D01*
+X002114Y010032D01*
+X002110Y010005D01*
+X002102Y009979D01*
+X002091Y009954D01*
+X002076Y009930D01*
+X002059Y009909D01*
+X002038Y009891D01*
+X002016Y009875D01*
+X001991Y009863D01*
+X001965Y009855D01*
+X001938Y009850D01*
+X001910Y009849D01*
+X001883Y009852D01*
+X001856Y009859D01*
+X001831Y009869D01*
+X001807Y009883D01*
+X001785Y009900D01*
+X001766Y009919D01*
+X001750Y009942D01*
+X001737Y009966D01*
+X001728Y009992D01*
+X001722Y010019D01*
+X001720Y010046D01*
+X001720Y008864D02*
+X001722Y008891D01*
+X001728Y008918D01*
+X001737Y008944D01*
+X001750Y008968D01*
+X001766Y008991D01*
+X001785Y009010D01*
+X001807Y009027D01*
+X001831Y009041D01*
+X001856Y009051D01*
+X001883Y009058D01*
+X001910Y009061D01*
+X001938Y009060D01*
+X001965Y009055D01*
+X001991Y009047D01*
+X002015Y009035D01*
+X002038Y009019D01*
+X002059Y009001D01*
+X002076Y008980D01*
+X002091Y008956D01*
+X002102Y008931D01*
+X002110Y008905D01*
+X002114Y008878D01*
+X002114Y008850D01*
+X002110Y008823D01*
+X002102Y008797D01*
+X002091Y008772D01*
+X002076Y008748D01*
+X002059Y008727D01*
+X002038Y008709D01*
+X002016Y008693D01*
+X001991Y008681D01*
+X001965Y008673D01*
+X001938Y008668D01*
+X001910Y008667D01*
+X001883Y008670D01*
+X001856Y008677D01*
+X001831Y008687D01*
+X001807Y008701D01*
+X001785Y008718D01*
+X001766Y008737D01*
+X001750Y008760D01*
+X001737Y008784D01*
+X001728Y008810D01*
+X001722Y008837D01*
+X001720Y008864D01*
+D14*
+X012400Y018955D03*
+X013400Y018955D03*
+X014400Y018955D03*
+X015400Y018955D03*
+X016400Y018955D03*
+X017400Y018955D03*
+X020950Y018455D03*
+X021950Y018455D03*
+X022950Y018455D03*
+X023950Y018455D03*
+X024950Y018455D03*
+X025950Y018455D03*
+X026950Y018455D03*
+X027950Y018455D03*
+X028950Y018455D03*
+X029950Y018455D03*
+X029950Y017455D03*
+X028950Y017455D03*
+X027950Y017455D03*
+X026950Y017455D03*
+X025950Y017455D03*
+X024950Y017455D03*
+X023950Y017455D03*
+X022950Y017455D03*
+X021950Y017455D03*
+X020950Y017455D03*
+D15*
+X020115Y015140D03*
+D16*
+X020134Y015177D02*
+X020208Y015177D01*
+X020171Y015140D02*
+X020115Y015197D01*
+X020519Y015602D01*
+X020514Y015608D01*
+X020436Y015664D01*
+X020350Y015708D01*
+X020258Y015738D01*
+X020163Y015753D01*
+X020066Y015753D01*
+X019971Y015738D01*
+X019879Y015708D01*
+X019794Y015664D01*
+X019716Y015608D01*
+X019710Y015602D01*
+X020115Y015197D01*
+X020058Y015140D01*
+X020115Y015084D01*
+X020171Y015140D01*
+X020576Y014736D01*
+X020582Y014741D01*
+X020638Y014819D01*
+X020682Y014905D01*
+X020712Y014997D01*
+X020727Y015092D01*
+X020727Y015189D01*
+X020712Y015284D01*
+X020682Y015375D01*
+X020638Y015461D01*
+X020582Y015539D01*
+X020576Y015545D01*
+X020171Y015140D01*
+X020129Y015099D02*
+X020213Y015099D01*
+X020178Y015020D02*
+X020291Y015020D01*
+X020257Y014942D02*
+X020370Y014942D01*
+X020335Y014863D02*
+X020448Y014863D01*
+X020414Y014785D02*
+X020527Y014785D01*
+X020613Y014785D02*
+X021607Y014785D01*
+X021624Y014767D02*
+X021771Y014706D01*
+X021929Y014706D01*
+X022076Y014767D01*
+X022188Y014879D01*
+X022249Y015026D01*
+X022249Y015184D01*
+X022188Y015331D01*
+X022076Y015443D01*
+X021929Y015504D01*
+X021771Y015504D01*
+X021624Y015443D01*
+X021549Y015368D01*
+X021549Y015434D01*
+X021488Y015581D01*
+X021376Y015693D01*
+X021229Y015754D01*
+X021071Y015754D01*
+X020924Y015693D01*
+X020812Y015581D01*
+X020751Y015434D01*
+X020751Y015276D01*
+X020812Y015129D01*
+X020924Y015017D01*
+X021071Y014956D01*
+X021229Y014956D01*
+X021376Y015017D01*
+X021451Y015092D01*
+X021451Y015026D01*
+X021512Y014879D01*
+X021624Y014767D01*
+X021528Y014863D02*
+X020661Y014863D01*
+X020694Y014942D02*
+X021486Y014942D01*
+X021454Y015020D02*
+X021379Y015020D01*
+X021549Y015413D02*
+X021594Y015413D01*
+X021525Y015491D02*
+X021740Y015491D01*
+X021960Y015491D02*
+X024490Y015491D01*
+X024521Y015504D02*
+X024374Y015443D01*
+X024262Y015331D01*
+X024201Y015184D01*
+X024201Y015026D01*
+X024262Y014879D01*
+X024374Y014767D01*
+X024521Y014706D01*
+X024679Y014706D01*
+X024826Y014767D01*
+X024938Y014879D01*
+X024999Y015026D01*
+X024999Y015184D01*
+X024938Y015331D01*
+X024826Y015443D01*
+X024679Y015504D01*
+X024521Y015504D01*
+X024710Y015491D02*
+X027790Y015491D01*
+X027821Y015504D02*
+X027674Y015443D01*
+X027562Y015331D01*
+X027501Y015184D01*
+X027501Y015026D01*
+X027562Y014879D01*
+X027674Y014767D01*
+X027821Y014706D01*
+X027979Y014706D01*
+X028126Y014767D01*
+X028238Y014879D01*
+X028299Y015026D01*
+X028299Y015184D01*
+X028238Y015331D01*
+X028126Y015443D01*
+X027979Y015504D01*
+X027821Y015504D01*
+X028010Y015491D02*
+X028325Y015491D01*
+X028301Y015434D02*
+X028362Y015581D01*
+X028474Y015693D01*
+X028621Y015754D01*
+X028779Y015754D01*
+X028926Y015693D01*
+X029038Y015581D01*
+X029099Y015434D01*
+X029099Y015276D01*
+X029038Y015129D01*
+X028926Y015017D01*
+X028779Y014956D01*
+X028621Y014956D01*
+X028474Y015017D01*
+X028362Y015129D01*
+X028301Y015276D01*
+X028301Y015434D01*
+X028301Y015413D02*
+X028156Y015413D01*
+X028235Y015334D02*
+X028301Y015334D01*
+X028310Y015256D02*
+X028269Y015256D01*
+X028299Y015177D02*
+X028342Y015177D01*
+X028299Y015099D02*
+X028393Y015099D01*
+X028471Y015020D02*
+X028296Y015020D01*
+X028264Y014942D02*
+X032200Y014942D01*
+X032200Y015020D02*
+X028929Y015020D01*
+X029007Y015099D02*
+X032200Y015099D01*
+X032200Y015177D02*
+X029058Y015177D01*
+X029090Y015256D02*
+X032200Y015256D01*
+X032200Y015334D02*
+X029099Y015334D01*
+X029099Y015413D02*
+X029935Y015413D01*
+X029924Y015417D02*
+X030071Y015356D01*
+X030229Y015356D01*
+X030376Y015417D01*
+X030488Y015529D01*
+X030499Y015556D01*
+X030629Y015556D01*
+X030776Y015617D01*
+X030888Y015729D01*
+X030949Y015876D01*
+X030949Y016034D01*
+X030888Y016181D01*
+X030776Y016293D01*
+X030629Y016354D01*
+X030471Y016354D01*
+X030324Y016293D01*
+X030212Y016181D01*
+X030201Y016154D01*
+X030071Y016154D01*
+X029924Y016093D01*
+X029812Y015981D01*
+X029751Y015834D01*
+X029751Y015676D01*
+X029812Y015529D01*
+X029924Y015417D01*
+X029850Y015491D02*
+X029075Y015491D01*
+X029043Y015570D02*
+X029795Y015570D01*
+X029763Y015648D02*
+X028971Y015648D01*
+X028845Y015727D02*
+X029751Y015727D01*
+X029751Y015805D02*
+X018897Y015805D01*
+X018926Y015817D02*
+X019038Y015929D01*
+X019099Y016076D01*
+X019099Y016234D01*
+X019038Y016381D01*
+X018926Y016493D01*
+X018779Y016554D01*
+X018621Y016554D01*
+X018474Y016493D01*
+X018362Y016381D01*
+X018301Y016234D01*
+X018301Y016076D01*
+X018362Y015929D01*
+X018474Y015817D01*
+X018621Y015756D01*
+X018779Y015756D01*
+X018926Y015817D01*
+X018992Y015884D02*
+X029772Y015884D01*
+X029804Y015962D02*
+X019052Y015962D01*
+X019084Y016041D02*
+X029872Y016041D01*
+X029987Y016119D02*
+X019099Y016119D01*
+X019099Y016198D02*
+X030229Y016198D01*
+X030307Y016276D02*
+X024985Y016276D01*
+X024976Y016267D02*
+X025088Y016379D01*
+X025149Y016526D01*
+X025149Y016684D01*
+X025088Y016831D01*
+X024976Y016943D01*
+X024880Y016983D01*
+X024910Y016978D01*
+X024910Y017415D01*
+X024990Y017415D01*
+X024990Y017495D01*
+X025427Y017495D01*
+X025416Y017567D01*
+X025393Y017638D01*
+X025358Y017705D01*
+X025314Y017766D01*
+X025261Y017819D01*
+X025200Y017863D01*
+X025133Y017898D01*
+X025122Y017901D01*
+X025277Y017965D01*
+X025440Y018128D01*
+X025450Y018153D01*
+X025460Y018128D01*
+X025623Y017965D01*
+X025778Y017901D01*
+X025767Y017898D01*
+X025700Y017863D01*
+X025639Y017819D01*
+X025586Y017766D01*
+X025542Y017705D01*
+X025507Y017638D01*
+X025484Y017567D01*
+X025473Y017495D01*
+X025910Y017495D01*
+X025910Y017415D01*
+X025990Y017415D01*
+X025990Y017495D01*
+X026427Y017495D01*
+X026416Y017567D01*
+X026393Y017638D01*
+X026358Y017705D01*
+X026314Y017766D01*
+X026261Y017819D01*
+X026200Y017863D01*
+X026133Y017898D01*
+X026122Y017901D01*
+X026277Y017965D01*
+X026440Y018128D01*
+X026450Y018153D01*
+X026460Y018128D01*
+X026623Y017965D01*
+X026778Y017901D01*
+X026767Y017898D01*
+X026700Y017863D01*
+X026639Y017819D01*
+X026586Y017766D01*
+X026542Y017705D01*
+X026507Y017638D01*
+X026484Y017567D01*
+X026473Y017495D01*
+X026910Y017495D01*
+X026910Y017415D01*
+X026473Y017415D01*
+X026484Y017343D01*
+X026507Y017272D01*
+X026542Y017205D01*
+X026586Y017144D01*
+X026639Y017091D01*
+X026694Y017051D01*
+X026674Y017043D01*
+X026562Y016931D01*
+X026501Y016784D01*
+X026501Y016626D01*
+X026562Y016479D01*
+X026674Y016367D01*
+X026821Y016306D01*
+X026979Y016306D01*
+X027126Y016367D01*
+X027238Y016479D01*
+X027299Y016626D01*
+X027299Y016784D01*
+X027238Y016931D01*
+X027149Y017020D01*
+X027200Y017047D01*
+X027261Y017091D01*
+X027314Y017144D01*
+X027358Y017205D01*
+X027393Y017272D01*
+X027416Y017343D01*
+X027427Y017415D01*
+X026990Y017415D01*
+X026990Y017495D01*
+X027427Y017495D01*
+X027416Y017567D01*
+X027393Y017638D01*
+X027358Y017705D01*
+X027314Y017766D01*
+X027261Y017819D01*
+X027200Y017863D01*
+X027133Y017898D01*
+X027122Y017901D01*
+X027277Y017965D01*
+X027440Y018128D01*
+X027450Y018153D01*
+X027460Y018128D01*
+X027623Y017965D01*
+X027778Y017901D01*
+X027767Y017898D01*
+X027700Y017863D01*
+X027639Y017819D01*
+X027586Y017766D01*
+X027542Y017705D01*
+X027507Y017638D01*
+X027484Y017567D01*
+X027473Y017495D01*
+X027910Y017495D01*
+X027910Y017415D01*
+X027990Y017415D01*
+X027990Y017495D01*
+X028427Y017495D01*
+X028416Y017567D01*
+X028393Y017638D01*
+X028358Y017705D01*
+X028314Y017766D01*
+X028261Y017819D01*
+X028200Y017863D01*
+X028133Y017898D01*
+X028122Y017901D01*
+X028277Y017965D01*
+X028440Y018128D01*
+X028450Y018153D01*
+X028460Y018128D01*
+X028623Y017965D01*
+X028778Y017901D01*
+X028767Y017898D01*
+X028700Y017863D01*
+X028639Y017819D01*
+X028586Y017766D01*
+X028542Y017705D01*
+X028507Y017638D01*
+X028484Y017567D01*
+X028473Y017495D01*
+X028910Y017495D01*
+X028910Y017415D01*
+X028990Y017415D01*
+X028990Y016978D01*
+X029062Y016989D01*
+X029133Y017012D01*
+X029200Y017047D01*
+X029261Y017091D01*
+X029314Y017144D01*
+X029358Y017205D01*
+X029393Y017272D01*
+X029396Y017283D01*
+X029460Y017128D01*
+X029623Y016965D01*
+X029835Y016878D01*
+X030065Y016878D01*
+X030277Y016965D01*
+X030440Y017128D01*
+X030527Y017340D01*
+X030527Y017570D01*
+X030440Y017782D01*
+X030277Y017945D01*
+X030252Y017955D01*
+X030277Y017965D01*
+X030440Y018128D01*
+X030527Y018340D01*
+X030527Y018570D01*
+X030440Y018782D01*
+X030277Y018945D01*
+X030065Y019032D01*
+X029835Y019032D01*
+X029623Y018945D01*
+X029460Y018782D01*
+X029450Y018757D01*
+X029440Y018782D01*
+X029277Y018945D01*
+X029065Y019032D01*
+X028835Y019032D01*
+X028623Y018945D01*
+X028460Y018782D01*
+X028450Y018757D01*
+X028440Y018782D01*
+X028277Y018945D01*
+X028065Y019032D01*
+X027835Y019032D01*
+X027623Y018945D01*
+X027460Y018782D01*
+X027450Y018757D01*
+X027440Y018782D01*
+X027277Y018945D01*
+X027065Y019032D01*
+X026835Y019032D01*
+X026623Y018945D01*
+X026460Y018782D01*
+X026450Y018757D01*
+X026440Y018782D01*
+X026277Y018945D01*
+X026065Y019032D01*
+X025835Y019032D01*
+X025623Y018945D01*
+X025460Y018782D01*
+X025450Y018757D01*
+X025440Y018782D01*
+X025277Y018945D01*
+X025065Y019032D01*
+X024835Y019032D01*
+X024623Y018945D01*
+X024460Y018782D01*
+X024450Y018757D01*
+X024440Y018782D01*
+X024277Y018945D01*
+X024065Y019032D01*
+X023835Y019032D01*
+X023623Y018945D01*
+X023460Y018782D01*
+X023450Y018757D01*
+X023440Y018782D01*
+X023277Y018945D01*
+X023065Y019032D01*
+X022843Y019032D01*
+X022843Y019107D01*
+X022810Y019187D01*
+X022843Y019267D01*
+X022843Y019449D01*
+X022800Y019553D01*
+X022731Y019622D01*
+X022651Y019702D01*
+X022546Y019745D01*
+X022296Y019745D01*
+X022203Y019707D01*
+X022192Y019702D01*
+X022192Y019702D01*
+X022116Y019627D01*
+X022111Y019622D01*
+X022095Y019605D01*
+X022086Y019609D01*
+X021836Y019609D01*
+X021791Y019590D01*
+X021747Y019634D01*
+X021642Y019677D01*
+X021529Y019677D01*
+X021424Y019634D01*
+X021396Y019605D01*
+X021387Y019609D01*
+X021274Y019609D01*
+X021194Y019575D01*
+X021114Y019609D01*
+X021000Y019609D01*
+X020929Y019579D01*
+X020858Y019609D01*
+X020608Y019609D01*
+X020541Y019581D01*
+X020475Y019609D01*
+X020293Y019609D01*
+X020281Y019604D01*
+X020270Y019609D01*
+X020156Y019609D01*
+X020051Y019565D01*
+X019971Y019485D01*
+X019928Y019380D01*
+X019928Y018993D01*
+X019971Y018889D01*
+X020051Y018808D01*
+X020156Y018765D01*
+X020270Y018765D01*
+X020374Y018808D01*
+X020439Y018873D01*
+X020495Y018817D01*
+X020460Y018782D01*
+X020373Y018570D01*
+X020373Y018340D01*
+X020460Y018128D01*
+X020623Y017965D01*
+X020778Y017901D01*
+X020767Y017898D01*
+X020700Y017863D01*
+X020639Y017819D01*
+X020586Y017766D01*
+X020542Y017705D01*
+X020507Y017638D01*
+X020484Y017567D01*
+X020473Y017495D01*
+X020910Y017495D01*
+X020910Y017415D01*
+X020473Y017415D01*
+X020484Y017343D01*
+X020507Y017272D01*
+X020542Y017205D01*
+X020586Y017144D01*
+X020639Y017091D01*
+X020700Y017047D01*
+X020767Y017012D01*
+X020838Y016989D01*
+X020910Y016978D01*
+X020910Y017415D01*
+X020990Y017415D01*
+X020990Y017495D01*
+X021427Y017495D01*
+X021416Y017567D01*
+X021393Y017638D01*
+X021358Y017705D01*
+X021314Y017766D01*
+X021261Y017819D01*
+X021200Y017863D01*
+X021133Y017898D01*
+X021122Y017901D01*
+X021277Y017965D01*
+X021440Y018128D01*
+X021450Y018153D01*
+X021460Y018128D01*
+X021623Y017965D01*
+X021778Y017901D01*
+X021767Y017898D01*
+X021700Y017863D01*
+X021639Y017819D01*
+X021586Y017766D01*
+X021542Y017705D01*
+X021507Y017638D01*
+X021484Y017567D01*
+X021473Y017495D01*
+X021910Y017495D01*
+X021910Y017415D01*
+X021990Y017415D01*
+X021990Y017495D01*
+X022427Y017495D01*
+X022416Y017567D01*
+X022393Y017638D01*
+X022358Y017705D01*
+X022314Y017766D01*
+X022261Y017819D01*
+X022200Y017863D01*
+X022133Y017898D01*
+X022122Y017901D01*
+X022277Y017965D01*
+X022440Y018128D01*
+X022450Y018153D01*
+X022460Y018128D01*
+X022623Y017965D01*
+X022778Y017901D01*
+X022767Y017898D01*
+X022700Y017863D01*
+X022639Y017819D01*
+X022586Y017766D01*
+X022542Y017705D01*
+X022507Y017638D01*
+X022484Y017567D01*
+X022473Y017495D01*
+X022910Y017495D01*
+X022910Y017415D01*
+X022990Y017415D01*
+X022990Y017495D01*
+X023427Y017495D01*
+X023416Y017567D01*
+X023393Y017638D01*
+X023358Y017705D01*
+X023314Y017766D01*
+X023261Y017819D01*
+X023200Y017863D01*
+X023133Y017898D01*
+X023122Y017901D01*
+X023277Y017965D01*
+X023440Y018128D01*
+X023450Y018153D01*
+X023460Y018128D01*
+X023623Y017965D01*
+X023778Y017901D01*
+X023767Y017898D01*
+X023700Y017863D01*
+X023639Y017819D01*
+X023586Y017766D01*
+X023542Y017705D01*
+X023507Y017638D01*
+X023484Y017567D01*
+X023473Y017495D01*
+X023910Y017495D01*
+X023910Y017415D01*
+X023990Y017415D01*
+X023990Y017495D01*
+X024427Y017495D01*
+X024416Y017567D01*
+X024393Y017638D01*
+X024358Y017705D01*
+X024314Y017766D01*
+X024261Y017819D01*
+X024200Y017863D01*
+X024133Y017898D01*
+X024122Y017901D01*
+X024277Y017965D01*
+X024440Y018128D01*
+X024450Y018153D01*
+X024460Y018128D01*
+X024623Y017965D01*
+X024778Y017901D01*
+X024767Y017898D01*
+X024700Y017863D01*
+X024639Y017819D01*
+X024586Y017766D01*
+X024542Y017705D01*
+X024507Y017638D01*
+X024484Y017567D01*
+X024473Y017495D01*
+X024910Y017495D01*
+X024910Y017415D01*
+X024473Y017415D01*
+X024484Y017343D01*
+X024507Y017272D01*
+X024542Y017205D01*
+X024586Y017144D01*
+X024639Y017091D01*
+X024700Y017047D01*
+X024767Y017012D01*
+X024794Y017004D01*
+X024671Y017004D01*
+X024524Y016943D01*
+X024412Y016831D01*
+X024351Y016684D01*
+X024351Y016526D01*
+X024412Y016379D01*
+X024524Y016267D01*
+X024671Y016206D01*
+X024829Y016206D01*
+X024976Y016267D01*
+X025063Y016355D02*
+X026704Y016355D01*
+X026608Y016433D02*
+X025110Y016433D01*
+X025143Y016512D02*
+X026549Y016512D01*
+X026516Y016590D02*
+X025149Y016590D01*
+X025149Y016669D02*
+X026501Y016669D01*
+X026501Y016747D02*
+X025123Y016747D01*
+X025090Y016826D02*
+X026518Y016826D01*
+X026551Y016904D02*
+X025015Y016904D01*
+X024990Y016978D02*
+X025062Y016989D01*
+X025133Y017012D01*
+X025200Y017047D01*
+X025261Y017091D01*
+X025314Y017144D01*
+X025358Y017205D01*
+X025393Y017272D01*
+X025416Y017343D01*
+X025427Y017415D01*
+X024990Y017415D01*
+X024990Y016978D01*
+X024990Y016983D02*
+X024910Y016983D01*
+X024881Y016983D02*
+X024880Y016983D01*
+X024910Y017061D02*
+X024990Y017061D01*
+X024990Y017140D02*
+X024910Y017140D01*
+X024910Y017218D02*
+X024990Y017218D01*
+X024990Y017297D02*
+X024910Y017297D01*
+X024910Y017375D02*
+X024990Y017375D01*
+X024990Y017454D02*
+X025910Y017454D01*
+X025910Y017415D02*
+X025473Y017415D01*
+X025484Y017343D01*
+X025507Y017272D01*
+X025542Y017205D01*
+X025586Y017144D01*
+X025639Y017091D01*
+X025700Y017047D01*
+X025767Y017012D01*
+X025838Y016989D01*
+X025910Y016978D01*
+X025910Y017415D01*
+X025910Y017375D02*
+X025990Y017375D01*
+X025990Y017415D02*
+X025990Y016978D01*
+X026062Y016989D01*
+X026133Y017012D01*
+X026200Y017047D01*
+X026261Y017091D01*
+X026314Y017144D01*
+X026358Y017205D01*
+X026393Y017272D01*
+X026416Y017343D01*
+X026427Y017415D01*
+X025990Y017415D01*
+X025990Y017454D02*
+X026910Y017454D01*
+X026990Y017454D02*
+X027910Y017454D01*
+X027910Y017415D02*
+X027473Y017415D01*
+X027484Y017343D01*
+X027507Y017272D01*
+X027542Y017205D01*
+X027586Y017144D01*
+X027639Y017091D01*
+X027700Y017047D01*
+X027767Y017012D01*
+X027838Y016989D01*
+X027910Y016978D01*
+X027910Y017415D01*
+X027910Y017375D02*
+X027990Y017375D01*
+X027990Y017415D02*
+X027990Y016978D01*
+X028062Y016989D01*
+X028133Y017012D01*
+X028200Y017047D01*
+X028261Y017091D01*
+X028314Y017144D01*
+X028358Y017205D01*
+X028393Y017272D01*
+X028416Y017343D01*
+X028427Y017415D01*
+X027990Y017415D01*
+X027990Y017454D02*
+X028910Y017454D01*
+X028910Y017415D02*
+X028473Y017415D01*
+X028484Y017343D01*
+X028507Y017272D01*
+X028542Y017205D01*
+X028586Y017144D01*
+X028639Y017091D01*
+X028700Y017047D01*
+X028767Y017012D01*
+X028838Y016989D01*
+X028910Y016978D01*
+X028910Y017415D01*
+X028910Y017375D02*
+X028990Y017375D01*
+X028990Y017297D02*
+X028910Y017297D01*
+X028910Y017218D02*
+X028990Y017218D01*
+X028990Y017140D02*
+X028910Y017140D01*
+X028910Y017061D02*
+X028990Y017061D01*
+X028990Y016983D02*
+X028910Y016983D01*
+X028881Y016983D02*
+X028019Y016983D01*
+X027990Y016983D02*
+X027910Y016983D01*
+X027881Y016983D02*
+X027186Y016983D01*
+X027220Y017061D02*
+X027680Y017061D01*
+X027590Y017140D02*
+X027310Y017140D01*
+X027365Y017218D02*
+X027535Y017218D01*
+X027499Y017297D02*
+X027401Y017297D01*
+X027421Y017375D02*
+X027479Y017375D01*
+X027479Y017532D02*
+X027421Y017532D01*
+X027402Y017611D02*
+X027498Y017611D01*
+X027533Y017689D02*
+X027367Y017689D01*
+X027313Y017768D02*
+X027587Y017768D01*
+X027676Y017846D02*
+X027224Y017846D01*
+X027178Y017925D02*
+X027722Y017925D01*
+X027585Y018003D02*
+X027315Y018003D01*
+X027393Y018082D02*
+X027507Y018082D01*
+X028178Y017925D02*
+X028722Y017925D01*
+X028676Y017846D02*
+X028224Y017846D01*
+X028313Y017768D02*
+X028587Y017768D01*
+X028533Y017689D02*
+X028367Y017689D01*
+X028402Y017611D02*
+X028498Y017611D01*
+X028479Y017532D02*
+X028421Y017532D01*
+X028421Y017375D02*
+X028479Y017375D01*
+X028499Y017297D02*
+X028401Y017297D01*
+X028365Y017218D02*
+X028535Y017218D01*
+X028590Y017140D02*
+X028310Y017140D01*
+X028220Y017061D02*
+X028680Y017061D01*
+X029019Y016983D02*
+X029606Y016983D01*
+X029527Y017061D02*
+X029220Y017061D01*
+X029310Y017140D02*
+X029456Y017140D01*
+X029423Y017218D02*
+X029365Y017218D01*
+X029771Y016904D02*
+X027249Y016904D01*
+X027282Y016826D02*
+X032200Y016826D01*
+X032200Y016904D02*
+X030129Y016904D01*
+X030294Y016983D02*
+X032200Y016983D01*
+X032200Y017061D02*
+X030373Y017061D01*
+X030444Y017140D02*
+X032200Y017140D01*
+X032200Y017218D02*
+X030477Y017218D01*
+X030509Y017297D02*
+X032200Y017297D01*
+X032200Y017375D02*
+X030527Y017375D01*
+X030527Y017454D02*
+X032200Y017454D01*
+X032200Y017532D02*
+X030527Y017532D01*
+X030511Y017611D02*
+X032200Y017611D01*
+X032200Y017689D02*
+X030478Y017689D01*
+X030446Y017768D02*
+X032200Y017768D01*
+X032200Y017846D02*
+X030376Y017846D01*
+X030297Y017925D02*
+X032200Y017925D01*
+X032200Y018003D02*
+X030315Y018003D01*
+X030393Y018082D02*
+X032200Y018082D01*
+X032200Y018160D02*
+X030453Y018160D01*
+X030485Y018239D02*
+X032200Y018239D01*
+X032200Y018317D02*
+X030518Y018317D01*
+X030527Y018396D02*
+X032200Y018396D01*
+X032200Y018474D02*
+X030527Y018474D01*
+X030527Y018553D02*
+X032200Y018553D01*
+X032200Y018631D02*
+X030502Y018631D01*
+X030470Y018710D02*
+X032200Y018710D01*
+X032200Y018788D02*
+X030434Y018788D01*
+X030355Y018867D02*
+X032200Y018867D01*
+X032200Y018945D02*
+X030276Y018945D01*
+X030086Y019024D02*
+X032200Y019024D01*
+X032200Y019102D02*
+X022843Y019102D01*
+X022813Y019181D02*
+X032200Y019181D01*
+X032200Y019259D02*
+X022840Y019259D01*
+X022843Y019338D02*
+X032200Y019338D01*
+X032200Y019416D02*
+X022843Y019416D01*
+X022824Y019495D02*
+X032200Y019495D01*
+X032200Y019573D02*
+X022780Y019573D01*
+X022702Y019652D02*
+X032200Y019652D01*
+X032200Y019730D02*
+X022583Y019730D01*
+X022259Y019730D02*
+X010839Y019730D01*
+X010888Y019681D02*
+X010776Y019793D01*
+X010629Y019854D01*
+X010471Y019854D01*
+X010324Y019793D01*
+X010212Y019681D01*
+X010151Y019534D01*
+X010151Y019376D01*
+X010212Y019229D01*
+X010324Y019117D01*
+X010471Y019056D01*
+X010629Y019056D01*
+X010776Y019117D01*
+X010888Y019229D01*
+X010949Y019376D01*
+X010949Y019534D01*
+X010888Y019681D01*
+X010900Y019652D02*
+X021468Y019652D01*
+X021704Y019652D02*
+X022141Y019652D01*
+X023086Y019024D02*
+X023814Y019024D01*
+X023624Y018945D02*
+X023276Y018945D01*
+X023355Y018867D02*
+X023545Y018867D01*
+X023466Y018788D02*
+X023434Y018788D01*
+X024086Y019024D02*
+X024814Y019024D01*
+X024624Y018945D02*
+X024276Y018945D01*
+X024355Y018867D02*
+X024545Y018867D01*
+X024466Y018788D02*
+X024434Y018788D01*
+X025086Y019024D02*
+X025814Y019024D01*
+X025624Y018945D02*
+X025276Y018945D01*
+X025355Y018867D02*
+X025545Y018867D01*
+X025466Y018788D02*
+X025434Y018788D01*
+X026086Y019024D02*
+X026814Y019024D01*
+X026624Y018945D02*
+X026276Y018945D01*
+X026355Y018867D02*
+X026545Y018867D01*
+X026466Y018788D02*
+X026434Y018788D01*
+X027086Y019024D02*
+X027814Y019024D01*
+X027624Y018945D02*
+X027276Y018945D01*
+X027355Y018867D02*
+X027545Y018867D01*
+X027466Y018788D02*
+X027434Y018788D01*
+X028086Y019024D02*
+X028814Y019024D01*
+X028624Y018945D02*
+X028276Y018945D01*
+X028355Y018867D02*
+X028545Y018867D01*
+X028466Y018788D02*
+X028434Y018788D01*
+X029086Y019024D02*
+X029814Y019024D01*
+X029624Y018945D02*
+X029276Y018945D01*
+X029355Y018867D02*
+X029545Y018867D01*
+X029466Y018788D02*
+X029434Y018788D01*
+X028585Y018003D02*
+X028315Y018003D01*
+X028393Y018082D02*
+X028507Y018082D01*
+X027990Y017297D02*
+X027910Y017297D01*
+X027910Y017218D02*
+X027990Y017218D01*
+X027990Y017140D02*
+X027910Y017140D01*
+X027910Y017061D02*
+X027990Y017061D01*
+X027299Y016747D02*
+X032200Y016747D01*
+X032200Y016669D02*
+X027299Y016669D01*
+X027284Y016590D02*
+X032200Y016590D01*
+X032200Y016512D02*
+X027251Y016512D01*
+X027192Y016433D02*
+X032200Y016433D01*
+X032200Y016355D02*
+X027096Y016355D01*
+X026614Y016983D02*
+X026019Y016983D01*
+X025990Y016983D02*
+X025910Y016983D01*
+X025881Y016983D02*
+X025019Y016983D01*
+X025220Y017061D02*
+X025680Y017061D01*
+X025590Y017140D02*
+X025310Y017140D01*
+X025365Y017218D02*
+X025535Y017218D01*
+X025499Y017297D02*
+X025401Y017297D01*
+X025421Y017375D02*
+X025479Y017375D01*
+X025479Y017532D02*
+X025421Y017532D01*
+X025402Y017611D02*
+X025498Y017611D01*
+X025533Y017689D02*
+X025367Y017689D01*
+X025313Y017768D02*
+X025587Y017768D01*
+X025676Y017846D02*
+X025224Y017846D01*
+X025178Y017925D02*
+X025722Y017925D01*
+X025585Y018003D02*
+X025315Y018003D01*
+X025393Y018082D02*
+X025507Y018082D01*
+X026178Y017925D02*
+X026722Y017925D01*
+X026676Y017846D02*
+X026224Y017846D01*
+X026313Y017768D02*
+X026587Y017768D01*
+X026533Y017689D02*
+X026367Y017689D01*
+X026402Y017611D02*
+X026498Y017611D01*
+X026479Y017532D02*
+X026421Y017532D01*
+X026421Y017375D02*
+X026479Y017375D01*
+X026499Y017297D02*
+X026401Y017297D01*
+X026365Y017218D02*
+X026535Y017218D01*
+X026590Y017140D02*
+X026310Y017140D01*
+X026220Y017061D02*
+X026680Y017061D01*
+X025990Y017061D02*
+X025910Y017061D01*
+X025910Y017140D02*
+X025990Y017140D01*
+X025990Y017218D02*
+X025910Y017218D01*
+X025910Y017297D02*
+X025990Y017297D01*
+X026315Y018003D02*
+X026585Y018003D01*
+X026507Y018082D02*
+X026393Y018082D01*
+X024910Y017454D02*
+X023990Y017454D01*
+X023990Y017415D02*
+X024427Y017415D01*
+X024416Y017343D01*
+X024393Y017272D01*
+X024358Y017205D01*
+X024314Y017144D01*
+X024261Y017091D01*
+X024200Y017047D01*
+X024133Y017012D01*
+X024062Y016989D01*
+X023990Y016978D01*
+X023990Y017415D01*
+X023990Y017375D02*
+X023910Y017375D01*
+X023910Y017415D02*
+X023910Y016978D01*
+X023838Y016989D01*
+X023767Y017012D01*
+X023700Y017047D01*
+X023639Y017091D01*
+X023586Y017144D01*
+X023542Y017205D01*
+X023507Y017272D01*
+X023484Y017343D01*
+X023473Y017415D01*
+X023910Y017415D01*
+X023910Y017454D02*
+X022990Y017454D01*
+X022990Y017415D02*
+X023427Y017415D01*
+X023416Y017343D01*
+X023393Y017272D01*
+X023358Y017205D01*
+X023314Y017144D01*
+X023261Y017091D01*
+X023200Y017047D01*
+X023133Y017012D01*
+X023062Y016989D01*
+X022990Y016978D01*
+X022990Y017415D01*
+X022990Y017375D02*
+X022910Y017375D01*
+X022910Y017415D02*
+X022910Y016978D01*
+X022838Y016989D01*
+X022767Y017012D01*
+X022700Y017047D01*
+X022639Y017091D01*
+X022586Y017144D01*
+X022542Y017205D01*
+X022507Y017272D01*
+X022484Y017343D01*
+X022473Y017415D01*
+X022910Y017415D01*
+X022910Y017454D02*
+X021990Y017454D01*
+X021990Y017415D02*
+X022427Y017415D01*
+X022416Y017343D01*
+X022393Y017272D01*
+X022358Y017205D01*
+X022314Y017144D01*
+X022261Y017091D01*
+X022200Y017047D01*
+X022133Y017012D01*
+X022062Y016989D01*
+X021990Y016978D01*
+X021990Y017415D01*
+X021990Y017375D02*
+X021910Y017375D01*
+X021910Y017415D02*
+X021910Y016978D01*
+X021838Y016989D01*
+X021767Y017012D01*
+X021700Y017047D01*
+X021639Y017091D01*
+X021586Y017144D01*
+X021542Y017205D01*
+X021507Y017272D01*
+X021484Y017343D01*
+X021473Y017415D01*
+X021910Y017415D01*
+X021910Y017454D02*
+X020990Y017454D01*
+X020990Y017415D02*
+X021427Y017415D01*
+X021416Y017343D01*
+X021393Y017272D01*
+X021358Y017205D01*
+X021314Y017144D01*
+X021261Y017091D01*
+X021200Y017047D01*
+X021133Y017012D01*
+X021062Y016989D01*
+X020990Y016978D01*
+X020990Y017415D01*
+X020990Y017375D02*
+X020910Y017375D01*
+X020910Y017297D02*
+X020990Y017297D01*
+X020990Y017218D02*
+X020910Y017218D01*
+X020910Y017140D02*
+X020990Y017140D01*
+X020990Y017061D02*
+X020910Y017061D01*
+X020910Y016983D02*
+X020990Y016983D01*
+X021019Y016983D02*
+X021881Y016983D01*
+X021910Y016983D02*
+X021990Y016983D01*
+X022019Y016983D02*
+X022881Y016983D01*
+X022910Y016983D02*
+X022990Y016983D01*
+X023019Y016983D02*
+X023881Y016983D01*
+X023910Y016983D02*
+X023990Y016983D01*
+X024019Y016983D02*
+X024620Y016983D01*
+X024680Y017061D02*
+X024220Y017061D01*
+X024310Y017140D02*
+X024590Y017140D01*
+X024535Y017218D02*
+X024365Y017218D01*
+X024401Y017297D02*
+X024499Y017297D01*
+X024479Y017375D02*
+X024421Y017375D01*
+X024421Y017532D02*
+X024479Y017532D01*
+X024498Y017611D02*
+X024402Y017611D01*
+X024367Y017689D02*
+X024533Y017689D01*
+X024587Y017768D02*
+X024313Y017768D01*
+X024224Y017846D02*
+X024676Y017846D01*
+X024722Y017925D02*
+X024178Y017925D01*
+X024315Y018003D02*
+X024585Y018003D01*
+X024507Y018082D02*
+X024393Y018082D01*
+X023722Y017925D02*
+X023178Y017925D01*
+X023224Y017846D02*
+X023676Y017846D01*
+X023587Y017768D02*
+X023313Y017768D01*
+X023367Y017689D02*
+X023533Y017689D01*
+X023498Y017611D02*
+X023402Y017611D01*
+X023421Y017532D02*
+X023479Y017532D01*
+X023479Y017375D02*
+X023421Y017375D01*
+X023401Y017297D02*
+X023499Y017297D01*
+X023535Y017218D02*
+X023365Y017218D01*
+X023310Y017140D02*
+X023590Y017140D01*
+X023680Y017061D02*
+X023220Y017061D01*
+X022990Y017061D02*
+X022910Y017061D01*
+X022910Y017140D02*
+X022990Y017140D01*
+X022990Y017218D02*
+X022910Y017218D01*
+X022910Y017297D02*
+X022990Y017297D01*
+X022680Y017061D02*
+X022220Y017061D01*
+X022310Y017140D02*
+X022590Y017140D01*
+X022535Y017218D02*
+X022365Y017218D01*
+X022401Y017297D02*
+X022499Y017297D01*
+X022479Y017375D02*
+X022421Y017375D01*
+X022421Y017532D02*
+X022479Y017532D01*
+X022498Y017611D02*
+X022402Y017611D01*
+X022367Y017689D02*
+X022533Y017689D01*
+X022587Y017768D02*
+X022313Y017768D01*
+X022224Y017846D02*
+X022676Y017846D01*
+X022722Y017925D02*
+X022178Y017925D01*
+X022315Y018003D02*
+X022585Y018003D01*
+X022507Y018082D02*
+X022393Y018082D01*
+X021722Y017925D02*
+X021178Y017925D01*
+X021224Y017846D02*
+X021676Y017846D01*
+X021587Y017768D02*
+X021313Y017768D01*
+X021367Y017689D02*
+X021533Y017689D01*
+X021498Y017611D02*
+X021402Y017611D01*
+X021421Y017532D02*
+X021479Y017532D01*
+X021479Y017375D02*
+X021421Y017375D01*
+X021401Y017297D02*
+X021499Y017297D01*
+X021535Y017218D02*
+X021365Y017218D01*
+X021310Y017140D02*
+X021590Y017140D01*
+X021680Y017061D02*
+X021220Y017061D01*
+X020881Y016983D02*
+X014193Y016983D01*
+X014129Y016956D02*
+X014276Y017017D01*
+X014388Y017129D01*
+X014449Y017276D01*
+X014449Y017434D01*
+X014388Y017581D01*
+X014276Y017693D01*
+X014129Y017754D01*
+X013971Y017754D01*
+X013824Y017693D01*
+X013712Y017581D01*
+X013651Y017434D01*
+X013651Y017276D01*
+X013712Y017129D01*
+X013824Y017017D01*
+X013971Y016956D01*
+X014129Y016956D01*
+X014320Y017061D02*
+X020680Y017061D01*
+X020590Y017140D02*
+X014392Y017140D01*
+X014425Y017218D02*
+X020535Y017218D01*
+X020499Y017297D02*
+X014449Y017297D01*
+X014449Y017375D02*
+X020479Y017375D01*
+X020479Y017532D02*
+X015891Y017532D01*
+X015876Y017517D02*
+X015988Y017629D01*
+X016049Y017776D01*
+X016049Y017934D01*
+X015988Y018081D01*
+X015876Y018193D01*
+X015729Y018254D01*
+X015571Y018254D01*
+X015424Y018193D01*
+X015312Y018081D01*
+X015251Y017934D01*
+X015251Y017776D01*
+X015312Y017629D01*
+X015424Y017517D01*
+X015571Y017456D01*
+X015729Y017456D01*
+X015876Y017517D01*
+X015969Y017611D02*
+X020498Y017611D01*
+X020533Y017689D02*
+X016013Y017689D01*
+X016045Y017768D02*
+X020587Y017768D01*
+X020676Y017846D02*
+X016049Y017846D01*
+X016049Y017925D02*
+X020722Y017925D01*
+X020585Y018003D02*
+X016020Y018003D01*
+X015987Y018082D02*
+X020507Y018082D01*
+X020447Y018160D02*
+X015909Y018160D01*
+X015766Y018239D02*
+X020415Y018239D01*
+X020382Y018317D02*
+X013152Y018317D01*
+X013126Y018343D02*
+X013238Y018231D01*
+X013299Y018084D01*
+X013299Y017926D01*
+X013238Y017779D01*
+X013126Y017667D01*
+X012979Y017606D01*
+X012821Y017606D01*
+X012674Y017667D01*
+X012562Y017779D01*
+X012501Y017926D01*
+X012501Y018084D01*
+X012562Y018231D01*
+X012674Y018343D01*
+X012821Y018404D01*
+X012979Y018404D01*
+X013126Y018343D01*
+X012999Y018396D02*
+X014242Y018396D01*
+X014285Y018378D02*
+X014515Y018378D01*
+X014727Y018465D01*
+X014890Y018628D01*
+X014900Y018653D01*
+X014910Y018628D01*
+X015073Y018465D01*
+X015285Y018378D01*
+X015515Y018378D01*
+X015727Y018465D01*
+X015890Y018628D01*
+X015900Y018653D01*
+X015910Y018628D01*
+X016073Y018465D01*
+X016285Y018378D01*
+X016515Y018378D01*
+X016727Y018465D01*
+X016890Y018628D01*
+X016900Y018653D01*
+X016910Y018628D01*
+X017073Y018465D01*
+X017285Y018378D01*
+X017515Y018378D01*
+X017727Y018465D01*
+X017890Y018628D01*
+X017977Y018840D01*
+X017977Y019070D01*
+X017890Y019282D01*
+X017727Y019445D01*
+X017515Y019532D01*
+X017285Y019532D01*
+X017073Y019445D01*
+X016910Y019282D01*
+X016900Y019257D01*
+X016890Y019282D01*
+X016727Y019445D01*
+X016515Y019532D01*
+X016285Y019532D01*
+X016073Y019445D01*
+X015910Y019282D01*
+X015900Y019257D01*
+X015890Y019282D01*
+X015727Y019445D01*
+X015515Y019532D01*
+X015285Y019532D01*
+X015073Y019445D01*
+X014910Y019282D01*
+X014900Y019257D01*
+X014890Y019282D01*
+X014727Y019445D01*
+X014515Y019532D01*
+X014285Y019532D01*
+X014073Y019445D01*
+X013910Y019282D01*
+X013846Y019127D01*
+X013843Y019138D01*
+X013808Y019205D01*
+X013764Y019266D01*
+X013711Y019319D01*
+X013650Y019363D01*
+X013583Y019398D01*
+X013512Y019421D01*
+X013440Y019432D01*
+X013440Y018995D01*
+X013360Y018995D01*
+X013360Y019432D01*
+X013288Y019421D01*
+X013217Y019398D01*
+X013150Y019363D01*
+X013089Y019319D01*
+X013036Y019266D01*
+X012992Y019205D01*
+X012957Y019138D01*
+X012954Y019127D01*
+X012890Y019282D01*
+X012727Y019445D01*
+X012515Y019532D01*
+X012285Y019532D01*
+X012073Y019445D01*
+X011910Y019282D01*
+X011823Y019070D01*
+X011823Y018840D01*
+X011910Y018628D01*
+X012073Y018465D01*
+X012285Y018378D01*
+X012515Y018378D01*
+X012727Y018465D01*
+X012890Y018628D01*
+X012954Y018783D01*
+X012957Y018772D01*
+X012992Y018705D01*
+X013036Y018644D01*
+X013089Y018591D01*
+X013150Y018547D01*
+X013217Y018512D01*
+X013288Y018489D01*
+X013360Y018478D01*
+X013360Y018915D01*
+X013440Y018915D01*
+X013440Y018478D01*
+X013512Y018489D01*
+X013583Y018512D01*
+X013650Y018547D01*
+X013711Y018591D01*
+X013764Y018644D01*
+X013808Y018705D01*
+X013843Y018772D01*
+X013846Y018783D01*
+X013910Y018628D01*
+X014073Y018465D01*
+X014285Y018378D01*
+X014064Y018474D02*
+X012736Y018474D01*
+X012801Y018396D02*
+X012558Y018396D01*
+X012648Y018317D02*
+X007676Y018317D01*
+X007626Y018267D02*
+X007738Y018379D01*
+X007799Y018526D01*
+X007799Y018684D01*
+X007738Y018831D01*
+X007626Y018943D01*
+X007479Y019004D01*
+X007321Y019004D01*
+X007174Y018943D01*
+X007062Y018831D01*
+X007058Y018821D01*
+X006979Y018854D01*
+X006821Y018854D01*
+X006674Y018793D01*
+X006562Y018681D01*
+X006501Y018534D01*
+X006501Y018376D01*
+X006562Y018229D01*
+X006674Y018117D01*
+X006701Y018106D01*
+X006701Y018026D01*
+X006762Y017879D01*
+X006874Y017767D01*
+X007021Y017706D01*
+X007179Y017706D01*
+X007326Y017767D01*
+X007438Y017879D01*
+X007499Y018026D01*
+X007499Y018184D01*
+X007488Y018210D01*
+X007626Y018267D01*
+X007557Y018239D02*
+X012570Y018239D01*
+X012533Y018160D02*
+X007499Y018160D01*
+X007499Y018082D02*
+X012501Y018082D01*
+X012501Y018003D02*
+X010652Y018003D01*
+X010676Y017993D02*
+X010529Y018054D01*
+X010371Y018054D01*
+X010224Y017993D01*
+X010112Y017881D01*
+X010051Y017734D01*
+X010051Y017576D01*
+X010112Y017429D01*
+X010224Y017317D01*
+X010371Y017256D01*
+X010529Y017256D01*
+X010676Y017317D01*
+X010788Y017429D01*
+X010849Y017576D01*
+X010849Y017734D01*
+X010788Y017881D01*
+X010676Y017993D01*
+X010744Y017925D02*
+X012502Y017925D01*
+X012534Y017846D02*
+X010802Y017846D01*
+X010835Y017768D02*
+X012574Y017768D01*
+X012652Y017689D02*
+X010849Y017689D01*
+X010849Y017611D02*
+X012810Y017611D01*
+X012990Y017611D02*
+X013742Y017611D01*
+X013692Y017532D02*
+X010831Y017532D01*
+X010798Y017454D02*
+X013659Y017454D01*
+X013651Y017375D02*
+X010734Y017375D01*
+X010627Y017297D02*
+X013651Y017297D01*
+X013675Y017218D02*
+X006927Y017218D01*
+X006938Y017229D02*
+X006999Y017376D01*
+X006999Y017534D01*
+X006938Y017681D01*
+X006826Y017793D01*
+X006679Y017854D01*
+X006521Y017854D01*
+X006374Y017793D01*
+X006262Y017681D01*
+X006201Y017534D01*
+X006201Y017376D01*
+X006262Y017229D01*
+X006374Y017117D01*
+X006521Y017056D01*
+X006679Y017056D01*
+X006826Y017117D01*
+X006938Y017229D01*
+X006966Y017297D02*
+X010273Y017297D01*
+X010166Y017375D02*
+X006998Y017375D01*
+X006999Y017454D02*
+X010102Y017454D01*
+X010069Y017532D02*
+X006999Y017532D01*
+X006967Y017611D02*
+X010051Y017611D01*
+X010051Y017689D02*
+X006930Y017689D01*
+X006874Y017768D02*
+X006851Y017768D01*
+X006795Y017846D02*
+X006698Y017846D01*
+X006743Y017925D02*
+X003292Y017925D01*
+X003297Y017939D02*
+X003234Y017785D01*
+X003117Y017668D01*
+X002963Y017604D01*
+X002797Y017604D01*
+X002644Y017668D01*
+X002527Y017785D01*
+X002463Y017939D01*
+X002463Y018105D01*
+X002527Y018258D01*
+X002644Y018375D01*
+X002797Y018439D01*
+X002963Y018439D01*
+X003117Y018375D01*
+X003234Y018258D01*
+X003297Y018105D01*
+X003297Y017939D01*
+X003297Y018003D02*
+X006711Y018003D01*
+X006701Y018082D02*
+X003297Y018082D01*
+X003274Y018160D02*
+X006631Y018160D01*
+X006558Y018239D02*
+X003242Y018239D01*
+X003175Y018317D02*
+X006526Y018317D01*
+X006501Y018396D02*
+X003067Y018396D01*
+X002693Y018396D02*
+X000700Y018396D01*
+X000700Y018474D02*
+X006501Y018474D01*
+X006509Y018553D02*
+X000700Y018553D01*
+X000700Y018631D02*
+X006541Y018631D01*
+X006591Y018710D02*
+X000700Y018710D01*
+X000700Y018788D02*
+X006669Y018788D01*
+X007098Y018867D02*
+X000700Y018867D01*
+X000700Y018945D02*
+X007179Y018945D01*
+X007621Y018945D02*
+X011823Y018945D01*
+X011823Y018867D02*
+X007702Y018867D01*
+X007756Y018788D02*
+X011844Y018788D01*
+X011877Y018710D02*
+X007788Y018710D01*
+X007799Y018631D02*
+X011909Y018631D01*
+X011986Y018553D02*
+X007799Y018553D01*
+X007777Y018474D02*
+X012064Y018474D01*
+X012242Y018396D02*
+X007745Y018396D01*
+X007489Y018003D02*
+X010248Y018003D01*
+X010156Y017925D02*
+X007457Y017925D01*
+X007405Y017846D02*
+X010098Y017846D01*
+X010065Y017768D02*
+X007326Y017768D01*
+X006848Y017140D02*
+X013708Y017140D01*
+X013780Y017061D02*
+X006691Y017061D01*
+X006509Y017061D02*
+X005399Y017061D01*
+X005399Y017026D02*
+X005338Y016879D01*
+X005226Y016767D01*
+X005079Y016706D01*
+X004921Y016706D01*
+X004846Y016737D01*
+X004776Y016667D01*
+X004629Y016606D01*
+X004471Y016606D01*
+X004324Y016667D01*
+X004212Y016779D01*
+X004151Y016926D01*
+X004151Y017084D01*
+X004212Y017231D01*
+X004324Y017343D01*
+X004471Y017404D01*
+X004629Y017404D01*
+X004704Y017373D01*
+X004774Y017443D01*
+X004921Y017504D01*
+X005079Y017504D01*
+X005226Y017443D01*
+X005338Y017331D01*
+X005399Y017184D01*
+X005399Y017026D01*
+X005381Y016983D02*
+X013907Y016983D01*
+X014441Y017454D02*
+X020910Y017454D01*
+X021315Y018003D02*
+X021585Y018003D01*
+X021507Y018082D02*
+X021393Y018082D01*
+X020373Y018396D02*
+X017558Y018396D01*
+X017736Y018474D02*
+X020373Y018474D01*
+X020373Y018553D02*
+X017814Y018553D01*
+X017891Y018631D02*
+X020398Y018631D01*
+X020430Y018710D02*
+X017923Y018710D01*
+X017956Y018788D02*
+X020100Y018788D01*
+X019993Y018867D02*
+X017977Y018867D01*
+X017977Y018945D02*
+X019948Y018945D01*
+X019928Y019024D02*
+X017977Y019024D01*
+X017964Y019102D02*
+X019928Y019102D01*
+X019928Y019181D02*
+X017932Y019181D01*
+X017899Y019259D02*
+X019928Y019259D01*
+X019928Y019338D02*
+X017834Y019338D01*
+X017756Y019416D02*
+X019943Y019416D01*
+X019981Y019495D02*
+X017606Y019495D01*
+X017194Y019495D02*
+X016606Y019495D01*
+X016756Y019416D02*
+X017044Y019416D01*
+X016966Y019338D02*
+X016834Y019338D01*
+X016899Y019259D02*
+X016901Y019259D01*
+X016891Y018631D02*
+X016909Y018631D01*
+X016986Y018553D02*
+X016814Y018553D01*
+X016736Y018474D02*
+X017064Y018474D01*
+X017242Y018396D02*
+X016558Y018396D01*
+X016242Y018396D02*
+X015558Y018396D01*
+X015534Y018239D02*
+X013230Y018239D01*
+X013267Y018160D02*
+X015391Y018160D01*
+X015313Y018082D02*
+X013299Y018082D01*
+X013299Y018003D02*
+X015280Y018003D01*
+X015251Y017925D02*
+X013298Y017925D01*
+X013266Y017846D02*
+X015251Y017846D01*
+X015255Y017768D02*
+X013226Y017768D01*
+X013148Y017689D02*
+X013820Y017689D01*
+X014280Y017689D02*
+X015287Y017689D01*
+X015331Y017611D02*
+X014358Y017611D01*
+X014408Y017532D02*
+X015409Y017532D01*
+X016074Y016843D02*
+X016221Y016904D01*
+X016379Y016904D01*
+X016526Y016843D01*
+X016638Y016731D01*
+X016699Y016584D01*
+X016699Y016426D01*
+X016638Y016279D01*
+X016526Y016167D01*
+X016379Y016106D01*
+X016221Y016106D01*
+X016074Y016167D01*
+X015962Y016279D01*
+X015901Y016426D01*
+X015901Y016584D01*
+X015962Y016731D01*
+X016074Y016843D01*
+X016057Y016826D02*
+X005284Y016826D01*
+X005348Y016904D02*
+X024485Y016904D01*
+X024410Y016826D02*
+X016543Y016826D01*
+X016622Y016747D02*
+X024377Y016747D01*
+X024351Y016669D02*
+X016664Y016669D01*
+X016696Y016590D02*
+X024351Y016590D01*
+X024357Y016512D02*
+X018881Y016512D01*
+X018986Y016433D02*
+X024390Y016433D01*
+X024437Y016355D02*
+X019049Y016355D01*
+X019081Y016276D02*
+X024515Y016276D01*
+X023990Y017061D02*
+X023910Y017061D01*
+X023910Y017140D02*
+X023990Y017140D01*
+X023990Y017218D02*
+X023910Y017218D01*
+X023910Y017297D02*
+X023990Y017297D01*
+X023585Y018003D02*
+X023315Y018003D01*
+X023393Y018082D02*
+X023507Y018082D01*
+X021990Y017297D02*
+X021910Y017297D01*
+X021910Y017218D02*
+X021990Y017218D01*
+X021990Y017140D02*
+X021910Y017140D01*
+X021910Y017061D02*
+X021990Y017061D01*
+X021295Y015727D02*
+X028555Y015727D01*
+X028429Y015648D02*
+X021421Y015648D01*
+X021493Y015570D02*
+X028357Y015570D01*
+X027644Y015413D02*
+X024856Y015413D01*
+X024935Y015334D02*
+X027565Y015334D01*
+X027531Y015256D02*
+X024969Y015256D01*
+X024999Y015177D02*
+X027501Y015177D01*
+X027501Y015099D02*
+X026042Y015099D01*
+X026029Y015104D02*
+X025871Y015104D01*
+X025724Y015043D01*
+X025612Y014931D01*
+X025551Y014784D01*
+X025551Y014626D01*
+X025612Y014479D01*
+X025724Y014367D01*
+X025871Y014306D01*
+X026029Y014306D01*
+X026176Y014367D01*
+X026288Y014479D01*
+X026349Y014626D01*
+X026349Y014784D01*
+X026288Y014931D01*
+X026176Y015043D01*
+X026029Y015104D01*
+X025858Y015099D02*
+X024999Y015099D01*
+X024996Y015020D02*
+X025701Y015020D01*
+X025623Y014942D02*
+X024964Y014942D01*
+X024922Y014863D02*
+X025584Y014863D01*
+X025551Y014785D02*
+X024843Y014785D01*
+X024357Y014785D02*
+X022093Y014785D01*
+X022172Y014863D02*
+X024278Y014863D01*
+X024236Y014942D02*
+X022214Y014942D01*
+X022246Y015020D02*
+X024204Y015020D01*
+X024201Y015099D02*
+X022249Y015099D01*
+X022249Y015177D02*
+X024201Y015177D01*
+X024231Y015256D02*
+X022219Y015256D01*
+X022185Y015334D02*
+X024265Y015334D01*
+X024344Y015413D02*
+X022106Y015413D01*
+X021005Y015727D02*
+X020293Y015727D01*
+X020458Y015648D02*
+X020879Y015648D01*
+X020807Y015570D02*
+X020487Y015570D01*
+X020522Y015491D02*
+X020409Y015491D01*
+X020443Y015413D02*
+X020330Y015413D01*
+X020365Y015334D02*
+X020252Y015334D01*
+X020286Y015256D02*
+X020173Y015256D01*
+X020095Y015177D02*
+X020021Y015177D01*
+X020058Y015140D02*
+X019653Y015545D01*
+X019647Y015539D01*
+X019591Y015461D01*
+X019547Y015375D01*
+X019517Y015284D01*
+X019502Y015189D01*
+X019502Y015092D01*
+X019517Y014997D01*
+X019547Y014905D01*
+X019591Y014819D01*
+X019647Y014741D01*
+X019653Y014736D01*
+X020058Y015140D01*
+X020016Y015099D02*
+X020100Y015099D01*
+X020115Y015084D02*
+X019710Y014679D01*
+X019716Y014673D01*
+X019794Y014616D01*
+X019879Y014573D01*
+X019971Y014543D01*
+X020066Y014528D01*
+X020163Y014528D01*
+X020258Y014543D01*
+X020350Y014573D01*
+X020436Y014616D01*
+X020514Y014673D01*
+X020519Y014679D01*
+X020115Y015084D01*
+X020051Y015020D02*
+X019938Y015020D01*
+X019972Y014942D02*
+X019859Y014942D01*
+X019894Y014863D02*
+X019781Y014863D01*
+X019815Y014785D02*
+X019702Y014785D01*
+X019616Y014785D02*
+X014449Y014785D01*
+X014449Y014776D02*
+X014388Y014629D01*
+X014276Y014517D01*
+X014129Y014456D01*
+X013971Y014456D01*
+X013824Y014517D01*
+X013712Y014629D01*
+X013651Y014776D01*
+X013651Y014934D01*
+X013712Y015081D01*
+X013824Y015193D01*
+X013971Y015254D01*
+X014129Y015254D01*
+X014276Y015193D01*
+X014388Y015081D01*
+X014449Y014934D01*
+X014449Y014776D01*
+X014420Y014706D02*
+X016006Y014706D01*
+X015974Y014693D02*
+X015862Y014581D01*
+X015801Y014434D01*
+X015801Y014276D01*
+X015862Y014129D01*
+X015974Y014017D01*
+X016121Y013956D01*
+X016279Y013956D01*
+X016426Y014017D01*
+X016538Y014129D01*
+X016599Y014276D01*
+X016599Y014434D01*
+X016538Y014581D01*
+X016426Y014693D01*
+X016279Y014754D01*
+X016121Y014754D01*
+X015974Y014693D01*
+X015909Y014628D02*
+X014386Y014628D01*
+X014308Y014549D02*
+X015849Y014549D01*
+X015816Y014471D02*
+X014164Y014471D01*
+X013936Y014471D02*
+X012955Y014471D01*
+X012938Y014429D02*
+X012999Y014576D01*
+X012999Y014734D01*
+X012938Y014881D01*
+X012826Y014993D01*
+X012679Y015054D01*
+X012521Y015054D01*
+X012374Y014993D01*
+X012262Y014881D01*
+X012201Y014734D01*
+X012201Y014576D01*
+X012262Y014429D01*
+X012374Y014317D01*
+X012521Y014256D01*
+X012679Y014256D01*
+X012826Y014317D01*
+X012938Y014429D01*
+X012901Y014392D02*
+X015801Y014392D01*
+X015801Y014314D02*
+X012818Y014314D01*
+X012988Y014549D02*
+X013792Y014549D01*
+X013714Y014628D02*
+X012999Y014628D01*
+X012999Y014706D02*
+X013680Y014706D01*
+X013651Y014785D02*
+X012978Y014785D01*
+X012945Y014863D02*
+X013651Y014863D01*
+X013654Y014942D02*
+X012877Y014942D01*
+X012761Y015020D02*
+X013687Y015020D01*
+X013730Y015099D02*
+X011820Y015099D01*
+X011838Y015081D02*
+X011726Y015193D01*
+X011579Y015254D01*
+X011421Y015254D01*
+X011274Y015193D01*
+X011162Y015081D01*
+X011101Y014934D01*
+X011101Y014776D01*
+X011162Y014629D01*
+X011274Y014517D01*
+X011421Y014456D01*
+X011579Y014456D01*
+X011726Y014517D01*
+X011838Y014629D01*
+X011899Y014776D01*
+X011899Y014934D01*
+X011838Y015081D01*
+X011863Y015020D02*
+X012439Y015020D01*
+X012323Y014942D02*
+X011896Y014942D01*
+X011899Y014863D02*
+X012255Y014863D01*
+X012222Y014785D02*
+X011899Y014785D01*
+X011870Y014706D02*
+X012201Y014706D01*
+X012201Y014628D02*
+X011836Y014628D01*
+X011758Y014549D02*
+X012212Y014549D01*
+X012245Y014471D02*
+X011614Y014471D01*
+X011629Y014404D02*
+X011471Y014404D01*
+X011324Y014343D01*
+X011212Y014231D01*
+X011151Y014084D01*
+X011151Y013926D01*
+X011212Y013779D01*
+X011324Y013667D01*
+X011471Y013606D01*
+X011629Y013606D01*
+X011776Y013667D01*
+X011888Y013779D01*
+X011949Y013926D01*
+X011949Y014084D01*
+X011888Y014231D01*
+X011776Y014343D01*
+X011629Y014404D01*
+X011658Y014392D02*
+X012299Y014392D01*
+X012382Y014314D02*
+X011805Y014314D01*
+X011884Y014235D02*
+X015818Y014235D01*
+X015851Y014157D02*
+X011919Y014157D01*
+X011949Y014078D02*
+X015913Y014078D01*
+X016016Y014000D02*
+X011949Y014000D01*
+X011947Y013921D02*
+X016501Y013921D01*
+X016501Y013934D02*
+X016501Y013776D01*
+X016562Y013629D01*
+X016674Y013517D01*
+X016821Y013456D01*
+X016979Y013456D01*
+X017126Y013517D01*
+X017238Y013629D01*
+X017299Y013776D01*
+X017299Y013934D01*
+X017238Y014081D01*
+X017126Y014193D01*
+X016979Y014254D01*
+X016821Y014254D01*
+X016674Y014193D01*
+X016562Y014081D01*
+X016501Y013934D01*
+X016528Y014000D02*
+X016384Y014000D01*
+X016487Y014078D02*
+X016561Y014078D01*
+X016549Y014157D02*
+X016638Y014157D01*
+X016582Y014235D02*
+X016776Y014235D01*
+X016599Y014314D02*
+X025853Y014314D01*
+X025699Y014392D02*
+X016599Y014392D01*
+X016584Y014471D02*
+X025621Y014471D01*
+X025583Y014549D02*
+X020277Y014549D01*
+X020451Y014628D02*
+X025551Y014628D01*
+X025551Y014706D02*
+X020492Y014706D01*
+X019952Y014549D02*
+X016551Y014549D01*
+X016491Y014628D02*
+X019778Y014628D01*
+X019737Y014706D02*
+X016394Y014706D01*
+X016600Y014942D02*
+X014446Y014942D01*
+X014449Y014863D02*
+X016684Y014863D01*
+X016674Y014867D02*
+X016821Y014806D01*
+X016979Y014806D01*
+X017126Y014867D01*
+X017238Y014979D01*
+X017299Y015126D01*
+X017299Y015284D01*
+X017238Y015431D01*
+X017126Y015543D01*
+X016979Y015604D01*
+X016821Y015604D01*
+X016674Y015543D01*
+X016562Y015431D01*
+X016501Y015284D01*
+X016501Y015126D01*
+X016562Y014979D01*
+X016674Y014867D01*
+X016545Y015020D02*
+X014413Y015020D01*
+X014370Y015099D02*
+X016513Y015099D01*
+X016501Y015177D02*
+X014292Y015177D01*
+X013808Y015177D02*
+X011742Y015177D01*
+X011258Y015177D02*
+X009442Y015177D01*
+X009488Y015131D02*
+X009376Y015243D01*
+X009229Y015304D01*
+X009071Y015304D01*
+X008924Y015243D01*
+X008812Y015131D01*
+X008751Y014984D01*
+X008751Y014826D01*
+X008812Y014679D01*
+X008924Y014567D01*
+X009071Y014506D01*
+X009229Y014506D01*
+X009376Y014567D01*
+X009488Y014679D01*
+X009549Y014826D01*
+X009549Y014984D01*
+X009488Y015131D01*
+X009501Y015099D02*
+X011180Y015099D01*
+X011137Y015020D02*
+X009534Y015020D01*
+X009549Y014942D02*
+X011104Y014942D01*
+X011101Y014863D02*
+X009549Y014863D01*
+X009532Y014785D02*
+X011101Y014785D01*
+X011130Y014706D02*
+X009499Y014706D01*
+X009436Y014628D02*
+X011164Y014628D01*
+X011242Y014549D02*
+X009333Y014549D01*
+X008967Y014549D02*
+X008270Y014549D01*
+X008288Y014531D02*
+X008176Y014643D01*
+X008029Y014704D01*
+X007871Y014704D01*
+X007724Y014643D01*
+X007625Y014544D01*
+X007526Y014643D01*
+X007379Y014704D01*
+X007299Y014704D01*
+X007299Y014834D01*
+X007238Y014981D01*
+X007126Y015093D01*
+X006979Y015154D01*
+X006821Y015154D01*
+X006674Y015093D01*
+X006562Y014981D01*
+X006501Y014834D01*
+X006501Y014676D01*
+X006562Y014529D01*
+X006674Y014417D01*
+X006821Y014356D01*
+X006901Y014356D01*
+X006901Y014226D01*
+X006962Y014079D01*
+X007074Y013967D01*
+X007221Y013906D01*
+X007379Y013906D01*
+X007526Y013967D01*
+X007625Y014066D01*
+X007724Y013967D01*
+X007871Y013906D01*
+X008029Y013906D01*
+X008176Y013967D01*
+X008288Y014079D01*
+X008349Y014226D01*
+X008349Y014384D01*
+X008288Y014531D01*
+X008313Y014471D02*
+X011386Y014471D01*
+X011442Y014392D02*
+X008346Y014392D01*
+X008349Y014314D02*
+X011295Y014314D01*
+X011216Y014235D02*
+X008349Y014235D01*
+X008320Y014157D02*
+X011181Y014157D01*
+X011151Y014078D02*
+X010991Y014078D01*
+X010976Y014093D02*
+X010829Y014154D01*
+X010671Y014154D01*
+X010524Y014093D01*
+X010412Y013981D01*
+X010351Y013834D01*
+X010351Y013676D01*
+X010412Y013529D01*
+X010524Y013417D01*
+X010671Y013356D01*
+X010829Y013356D01*
+X010976Y013417D01*
+X011088Y013529D01*
+X011149Y013676D01*
+X011149Y013834D01*
+X011088Y013981D01*
+X010976Y014093D01*
+X011069Y014000D02*
+X011151Y014000D01*
+X011153Y013921D02*
+X011113Y013921D01*
+X011145Y013843D02*
+X011186Y013843D01*
+X011149Y013764D02*
+X011227Y013764D01*
+X011149Y013686D02*
+X011306Y013686D01*
+X011469Y013607D02*
+X011120Y013607D01*
+X011087Y013529D02*
+X013711Y013529D01*
+X013712Y013531D02*
+X013651Y013384D01*
+X013651Y013226D01*
+X013712Y013079D01*
+X013824Y012967D01*
+X013971Y012906D01*
+X014129Y012906D01*
+X014276Y012967D01*
+X014388Y013079D01*
+X014449Y013226D01*
+X014449Y013384D01*
+X014388Y013531D01*
+X014276Y013643D01*
+X014129Y013704D01*
+X013971Y013704D01*
+X013824Y013643D01*
+X013712Y013531D01*
+X013678Y013450D02*
+X011009Y013450D01*
+X010866Y013372D02*
+X013651Y013372D01*
+X013651Y013293D02*
+X010226Y013293D01*
+X010238Y013281D02*
+X010126Y013393D01*
+X009979Y013454D01*
+X009821Y013454D01*
+X009674Y013393D01*
+X009562Y013281D01*
+X009501Y013134D01*
+X009501Y012976D01*
+X009562Y012829D01*
+X009674Y012717D01*
+X009821Y012656D01*
+X009979Y012656D01*
+X010126Y012717D01*
+X010151Y012742D01*
+X010151Y012726D01*
+X010212Y012579D01*
+X010324Y012467D01*
+X010471Y012406D01*
+X010629Y012406D01*
+X010776Y012467D01*
+X010888Y012579D01*
+X010949Y012726D01*
+X010949Y012884D01*
+X010888Y013031D01*
+X010776Y013143D01*
+X010629Y013204D01*
+X010471Y013204D01*
+X010324Y013143D01*
+X010299Y013118D01*
+X010299Y013134D01*
+X010238Y013281D01*
+X010266Y013215D02*
+X013656Y013215D01*
+X013688Y013136D02*
+X010783Y013136D01*
+X010861Y013058D02*
+X013734Y013058D01*
+X013812Y012979D02*
+X010910Y012979D01*
+X010942Y012901D02*
+X016451Y012901D01*
+X016451Y012934D02*
+X016451Y012776D01*
+X016512Y012629D01*
+X016624Y012517D01*
+X016771Y012456D01*
+X016929Y012456D01*
+X017076Y012517D01*
+X017188Y012629D01*
+X017249Y012776D01*
+X017249Y012934D01*
+X017188Y013081D01*
+X017076Y013193D01*
+X016929Y013254D01*
+X016771Y013254D01*
+X016624Y013193D01*
+X016512Y013081D01*
+X016451Y012934D01*
+X016470Y012979D02*
+X014288Y012979D01*
+X014366Y013058D02*
+X016502Y013058D01*
+X016567Y013136D02*
+X014412Y013136D01*
+X014444Y013215D02*
+X016676Y013215D01*
+X017024Y013215D02*
+X023801Y013215D01*
+X023821Y013206D02*
+X023979Y013206D01*
+X024126Y013267D01*
+X024238Y013379D01*
+X024299Y013526D01*
+X024299Y013684D01*
+X024238Y013831D01*
+X024126Y013943D01*
+X023979Y014004D01*
+X023821Y014004D01*
+X023674Y013943D01*
+X023562Y013831D01*
+X023501Y013684D01*
+X023501Y013526D01*
+X023562Y013379D01*
+X023674Y013267D01*
+X023821Y013206D01*
+X023999Y013215D02*
+X024727Y013215D01*
+X024774Y013167D02*
+X024921Y013106D01*
+X025079Y013106D01*
+X025226Y013167D01*
+X025338Y013279D01*
+X025399Y013426D01*
+X025399Y013584D01*
+X025338Y013731D01*
+X025226Y013843D01*
+X025079Y013904D01*
+X024921Y013904D01*
+X024774Y013843D01*
+X024662Y013731D01*
+X024601Y013584D01*
+X024601Y013426D01*
+X024662Y013279D01*
+X024774Y013167D01*
+X024849Y013136D02*
+X024322Y013136D01*
+X024279Y013154D02*
+X024121Y013154D01*
+X023974Y013093D01*
+X023862Y012981D01*
+X023801Y012834D01*
+X023801Y012676D01*
+X023862Y012529D01*
+X023974Y012417D01*
+X024121Y012356D01*
+X024279Y012356D01*
+X024426Y012417D01*
+X024538Y012529D01*
+X024599Y012676D01*
+X024599Y012834D01*
+X024538Y012981D01*
+X024426Y013093D01*
+X024279Y013154D01*
+X024152Y013293D02*
+X024656Y013293D01*
+X024624Y013372D02*
+X024230Y013372D01*
+X024267Y013450D02*
+X024601Y013450D01*
+X024601Y013529D02*
+X024299Y013529D01*
+X024299Y013607D02*
+X024611Y013607D01*
+X024643Y013686D02*
+X024298Y013686D01*
+X024266Y013764D02*
+X024695Y013764D01*
+X024774Y013843D02*
+X024226Y013843D01*
+X024148Y013921D02*
+X028166Y013921D01*
+X028151Y013884D02*
+X028151Y013726D01*
+X028212Y013579D01*
+X028324Y013467D01*
+X028471Y013406D01*
+X028629Y013406D01*
+X028776Y013467D01*
+X028888Y013579D01*
+X028949Y013726D01*
+X028949Y013884D01*
+X028888Y014031D01*
+X028776Y014143D01*
+X028629Y014204D01*
+X028471Y014204D01*
+X028324Y014143D01*
+X028212Y014031D01*
+X028151Y013884D01*
+X028151Y013843D02*
+X025226Y013843D01*
+X025305Y013764D02*
+X028151Y013764D01*
+X028168Y013686D02*
+X025357Y013686D01*
+X025389Y013607D02*
+X028200Y013607D01*
+X028263Y013529D02*
+X025399Y013529D01*
+X025399Y013450D02*
+X028365Y013450D01*
+X028735Y013450D02*
+X030808Y013450D01*
+X030801Y013434D02*
+X030801Y013276D01*
+X030862Y013129D01*
+X030974Y013017D01*
+X031121Y012956D01*
+X031279Y012956D01*
+X031426Y013017D01*
+X031538Y013129D01*
+X031599Y013276D01*
+X031599Y013434D01*
+X031538Y013581D01*
+X031426Y013693D01*
+X031279Y013754D01*
+X031121Y013754D01*
+X030974Y013693D01*
+X030862Y013581D01*
+X030801Y013434D01*
+X030801Y013372D02*
+X025376Y013372D01*
+X025344Y013293D02*
+X030801Y013293D01*
+X030827Y013215D02*
+X025273Y013215D01*
+X025151Y013136D02*
+X030859Y013136D01*
+X030934Y013058D02*
+X024461Y013058D01*
+X024539Y012979D02*
+X031066Y012979D01*
+X031334Y012979D02*
+X032200Y012979D01*
+X032200Y012901D02*
+X024571Y012901D01*
+X024599Y012822D02*
+X032200Y012822D01*
+X032200Y012744D02*
+X024599Y012744D01*
+X024594Y012665D02*
+X032200Y012665D01*
+X032200Y012587D02*
+X024562Y012587D01*
+X024517Y012508D02*
+X032200Y012508D01*
+X032200Y012430D02*
+X027139Y012430D01*
+X027126Y012443D02*
+X026979Y012504D01*
+X026821Y012504D01*
+X026674Y012443D01*
+X026562Y012331D01*
+X026501Y012184D01*
+X026501Y012026D01*
+X026562Y011879D01*
+X026674Y011767D01*
+X026821Y011706D01*
+X026979Y011706D01*
+X027126Y011767D01*
+X027238Y011879D01*
+X027299Y012026D01*
+X027299Y012184D01*
+X027238Y012331D01*
+X027126Y012443D01*
+X027218Y012351D02*
+X032200Y012351D01*
+X032200Y012273D02*
+X031305Y012273D01*
+X031376Y012243D02*
+X031229Y012304D01*
+X031071Y012304D01*
+X030924Y012243D01*
+X030812Y012131D01*
+X030751Y011984D01*
+X030751Y011826D01*
+X030812Y011679D01*
+X030924Y011567D01*
+X031071Y011506D01*
+X031229Y011506D01*
+X031376Y011567D01*
+X031488Y011679D01*
+X031549Y011826D01*
+X031549Y011984D01*
+X031488Y012131D01*
+X031376Y012243D01*
+X031425Y012194D02*
+X032200Y012194D01*
+X032200Y012116D02*
+X031494Y012116D01*
+X031527Y012037D02*
+X032200Y012037D01*
+X032200Y011959D02*
+X031549Y011959D01*
+X031549Y011880D02*
+X032200Y011880D01*
+X032200Y011802D02*
+X031539Y011802D01*
+X031506Y011723D02*
+X032200Y011723D01*
+X032200Y011645D02*
+X031453Y011645D01*
+X031374Y011566D02*
+X032200Y011566D01*
+X032200Y011488D02*
+X028706Y011488D01*
+X028688Y011531D02*
+X028576Y011643D01*
+X028429Y011704D01*
+X028271Y011704D01*
+X028124Y011643D01*
+X028012Y011531D01*
+X027951Y011384D01*
+X027951Y011226D01*
+X028012Y011079D01*
+X028124Y010967D01*
+X028271Y010906D01*
+X028429Y010906D01*
+X028576Y010967D01*
+X028688Y011079D01*
+X028749Y011226D01*
+X028749Y011384D01*
+X028688Y011531D01*
+X028653Y011566D02*
+X030026Y011566D01*
+X030024Y011567D02*
+X030171Y011506D01*
+X030329Y011506D01*
+X030476Y011567D01*
+X030588Y011679D01*
+X030649Y011826D01*
+X030649Y011984D01*
+X030588Y012131D01*
+X030476Y012243D01*
+X030329Y012304D01*
+X030171Y012304D01*
+X030024Y012243D01*
+X029912Y012131D01*
+X029851Y011984D01*
+X029851Y011826D01*
+X029912Y011679D01*
+X030024Y011567D01*
+X029947Y011645D02*
+X028572Y011645D01*
+X028739Y011409D02*
+X032200Y011409D01*
+X032200Y011331D02*
+X028749Y011331D01*
+X028749Y011252D02*
+X032200Y011252D01*
+X032200Y011174D02*
+X028727Y011174D01*
+X028695Y011095D02*
+X032200Y011095D01*
+X032200Y011017D02*
+X028625Y011017D01*
+X028506Y010938D02*
+X030869Y010938D01*
+X030874Y010943D02*
+X030762Y010831D01*
+X030701Y010684D01*
+X030701Y010526D01*
+X030762Y010379D01*
+X030874Y010267D01*
+X031021Y010206D01*
+X031179Y010206D01*
+X031326Y010267D01*
+X031438Y010379D01*
+X031499Y010526D01*
+X031499Y010684D01*
+X031438Y010831D01*
+X031326Y010943D01*
+X031179Y011004D01*
+X031021Y011004D01*
+X030874Y010943D01*
+X030791Y010860D02*
+X023471Y010860D01*
+X023499Y010926D02*
+X023438Y010779D01*
+X023326Y010667D01*
+X023179Y010606D01*
+X023021Y010606D01*
+X022874Y010667D01*
+X022762Y010779D01*
+X022701Y010926D01*
+X022701Y011084D01*
+X022762Y011231D01*
+X022874Y011343D01*
+X023021Y011404D01*
+X023179Y011404D01*
+X023326Y011343D01*
+X023438Y011231D01*
+X023499Y011084D01*
+X023499Y010926D01*
+X023499Y010938D02*
+X028194Y010938D01*
+X028075Y011017D02*
+X023499Y011017D01*
+X023494Y011095D02*
+X028005Y011095D01*
+X027973Y011174D02*
+X023462Y011174D01*
+X023417Y011252D02*
+X027951Y011252D01*
+X027951Y011331D02*
+X023338Y011331D01*
+X022862Y011331D02*
+X021388Y011331D01*
+X021438Y011281D02*
+X021326Y011393D01*
+X021179Y011454D01*
+X021049Y011454D01*
+X021049Y011484D01*
+X020988Y011631D01*
+X020876Y011743D01*
+X020729Y011804D01*
+X020571Y011804D01*
+X020424Y011743D01*
+X020312Y011631D01*
+X020251Y011484D01*
+X020251Y011326D01*
+X020312Y011179D01*
+X020424Y011067D01*
+X020571Y011006D01*
+X020701Y011006D01*
+X020701Y010976D01*
+X020762Y010829D01*
+X020874Y010717D01*
+X021021Y010656D01*
+X021179Y010656D01*
+X021326Y010717D01*
+X021438Y010829D01*
+X021499Y010976D01*
+X021499Y011134D01*
+X021438Y011281D01*
+X021450Y011252D02*
+X022783Y011252D01*
+X022738Y011174D02*
+X021482Y011174D01*
+X021499Y011095D02*
+X022706Y011095D01*
+X022701Y011017D02*
+X021499Y011017D01*
+X021483Y010938D02*
+X022701Y010938D01*
+X022729Y010860D02*
+X021451Y010860D01*
+X021390Y010781D02*
+X022761Y010781D01*
+X022839Y010703D02*
+X021291Y010703D01*
+X020909Y010703D02*
+X018049Y010703D01*
+X018049Y010676D02*
+X018049Y010834D01*
+X017988Y010981D01*
+X017889Y011080D01*
+X017938Y011129D01*
+X017999Y011276D01*
+X017999Y011434D01*
+X017938Y011581D01*
+X017826Y011693D01*
+X017679Y011754D01*
+X017521Y011754D01*
+X017374Y011693D01*
+X017262Y011581D01*
+X017201Y011434D01*
+X017201Y011276D01*
+X017262Y011129D01*
+X017361Y011030D01*
+X017312Y010981D01*
+X017251Y010834D01*
+X017251Y010676D01*
+X017312Y010529D01*
+X017424Y010417D01*
+X017571Y010356D01*
+X017729Y010356D01*
+X017876Y010417D01*
+X017988Y010529D01*
+X018049Y010676D01*
+X018027Y010624D02*
+X022978Y010624D01*
+X023222Y010624D02*
+X030701Y010624D01*
+X030701Y010546D02*
+X017995Y010546D01*
+X017926Y010467D02*
+X030726Y010467D01*
+X030758Y010389D02*
+X017807Y010389D01*
+X017493Y010389D02*
+X013126Y010389D01*
+X013149Y010334D02*
+X013088Y010481D01*
+X012976Y010593D01*
+X012829Y010654D01*
+X012671Y010654D01*
+X012524Y010593D01*
+X012412Y010481D01*
+X012405Y010464D01*
+X012376Y010493D01*
+X012229Y010554D01*
+X012071Y010554D01*
+X011924Y010493D01*
+X011812Y010381D01*
+X011751Y010234D01*
+X011751Y010076D01*
+X011812Y009929D01*
+X011924Y009817D01*
+X012071Y009756D01*
+X012229Y009756D01*
+X012376Y009817D01*
+X012488Y009929D01*
+X012495Y009946D01*
+X012524Y009917D01*
+X012671Y009856D01*
+X012829Y009856D01*
+X012976Y009917D01*
+X013088Y010029D01*
+X013149Y010176D01*
+X013149Y010334D01*
+X013149Y010310D02*
+X030831Y010310D01*
+X030960Y010232D02*
+X027033Y010232D01*
+X026979Y010254D02*
+X026821Y010254D01*
+X026674Y010193D01*
+X026562Y010081D01*
+X026501Y009934D01*
+X026501Y009776D01*
+X026562Y009629D01*
+X026674Y009517D01*
+X026821Y009456D01*
+X026979Y009456D01*
+X027126Y009517D01*
+X027238Y009629D01*
+X027299Y009776D01*
+X027299Y009934D01*
+X027238Y010081D01*
+X027126Y010193D01*
+X026979Y010254D01*
+X027166Y010153D02*
+X032200Y010153D01*
+X032200Y010075D02*
+X027241Y010075D01*
+X027273Y009996D02*
+X032200Y009996D01*
+X032200Y009918D02*
+X028467Y009918D01*
+X028526Y009893D02*
+X028379Y009954D01*
+X028221Y009954D01*
+X028074Y009893D01*
+X027962Y009781D01*
+X027901Y009634D01*
+X027901Y009476D01*
+X027962Y009329D01*
+X028074Y009217D01*
+X028221Y009156D01*
+X028379Y009156D01*
+X028526Y009217D01*
+X028638Y009329D01*
+X028699Y009476D01*
+X028699Y009634D01*
+X028638Y009781D01*
+X028526Y009893D01*
+X028580Y009839D02*
+X032200Y009839D01*
+X032200Y009761D02*
+X028646Y009761D01*
+X028679Y009682D02*
+X032200Y009682D01*
+X032200Y009604D02*
+X028699Y009604D01*
+X028699Y009525D02*
+X032200Y009525D01*
+X032200Y009447D02*
+X028687Y009447D01*
+X028654Y009368D02*
+X032200Y009368D01*
+X032200Y009290D02*
+X028598Y009290D01*
+X028512Y009211D02*
+X032200Y009211D01*
+X032200Y009133D02*
+X028186Y009133D01*
+X028238Y009081D02*
+X028126Y009193D01*
+X027979Y009254D01*
+X027821Y009254D01*
+X027674Y009193D01*
+X027562Y009081D01*
+X027501Y008934D01*
+X027501Y008776D01*
+X027562Y008629D01*
+X027674Y008517D01*
+X027821Y008456D01*
+X027979Y008456D01*
+X028126Y008517D01*
+X028238Y008629D01*
+X028299Y008776D01*
+X028299Y008934D01*
+X028238Y009081D01*
+X028249Y009054D02*
+X032200Y009054D01*
+X032200Y008976D02*
+X028282Y008976D01*
+X028299Y008897D02*
+X032200Y008897D01*
+X032200Y008819D02*
+X028299Y008819D01*
+X028284Y008740D02*
+X032200Y008740D01*
+X032200Y008662D02*
+X028251Y008662D01*
+X028192Y008583D02*
+X032200Y008583D01*
+X032200Y008505D02*
+X028096Y008505D01*
+X027704Y008505D02*
+X027148Y008505D01*
+X027176Y008493D02*
+X027029Y008554D01*
+X026871Y008554D01*
+X026724Y008493D01*
+X026612Y008381D01*
+X026551Y008234D01*
+X026551Y008076D01*
+X026612Y007929D01*
+X026724Y007817D01*
+X026871Y007756D01*
+X027029Y007756D01*
+X027176Y007817D01*
+X027288Y007929D01*
+X027349Y008076D01*
+X027349Y008234D01*
+X027288Y008381D01*
+X027176Y008493D01*
+X027243Y008426D02*
+X032200Y008426D01*
+X032200Y008348D02*
+X027302Y008348D01*
+X027334Y008269D02*
+X032200Y008269D01*
+X032200Y008191D02*
+X027349Y008191D01*
+X027349Y008112D02*
+X032200Y008112D01*
+X032200Y008034D02*
+X027331Y008034D01*
+X027299Y007955D02*
+X032200Y007955D01*
+X032200Y007877D02*
+X027235Y007877D01*
+X027130Y007798D02*
+X032200Y007798D01*
+X032200Y007720D02*
+X026455Y007720D01*
+X026438Y007679D02*
+X026499Y007826D01*
+X026499Y007984D01*
+X026438Y008131D01*
+X026326Y008243D01*
+X026179Y008304D01*
+X026141Y008304D01*
+X026088Y008431D01*
+X025976Y008543D01*
+X025829Y008604D01*
+X025671Y008604D01*
+X025524Y008543D01*
+X025412Y008431D01*
+X025400Y008402D01*
+X025388Y008431D01*
+X025276Y008543D01*
+X025129Y008604D01*
+X024971Y008604D01*
+X024825Y008543D01*
+X024679Y008604D01*
+X024521Y008604D01*
+X024374Y008543D01*
+X024262Y008431D01*
+X024201Y008284D01*
+X024201Y008126D01*
+X024262Y007979D01*
+X024374Y007867D01*
+X024521Y007806D01*
+X024679Y007806D01*
+X024825Y007867D01*
+X024971Y007806D01*
+X025129Y007806D01*
+X025276Y007867D01*
+X025388Y007979D01*
+X025400Y008008D01*
+X025412Y007979D01*
+X025524Y007867D01*
+X025612Y007831D01*
+X025562Y007781D01*
+X025501Y007634D01*
+X025501Y007476D01*
+X025562Y007329D01*
+X025674Y007217D01*
+X025821Y007156D01*
+X025979Y007156D01*
+X026126Y007217D01*
+X026238Y007329D01*
+X026299Y007476D01*
+X026299Y007556D01*
+X026326Y007567D01*
+X026438Y007679D01*
+X026400Y007641D02*
+X032200Y007641D01*
+X032200Y007563D02*
+X026879Y007563D01*
+X026926Y007543D02*
+X026779Y007604D01*
+X026621Y007604D01*
+X026474Y007543D01*
+X026362Y007431D01*
+X026301Y007284D01*
+X026301Y007126D01*
+X026362Y006979D01*
+X026474Y006867D01*
+X026621Y006806D01*
+X026779Y006806D01*
+X026926Y006867D01*
+X027038Y006979D01*
+X027099Y007126D01*
+X027099Y007284D01*
+X027038Y007431D01*
+X026926Y007543D01*
+X026985Y007484D02*
+X032200Y007484D01*
+X032200Y007406D02*
+X027049Y007406D01*
+X027081Y007327D02*
+X027706Y007327D01*
+X027771Y007354D02*
+X027624Y007293D01*
+X027512Y007181D01*
+X027451Y007034D01*
+X027451Y006876D01*
+X027512Y006729D01*
+X027624Y006617D01*
+X027771Y006556D01*
+X027929Y006556D01*
+X028076Y006617D01*
+X028188Y006729D01*
+X028249Y006876D01*
+X028249Y007034D01*
+X028188Y007181D01*
+X028076Y007293D01*
+X027929Y007354D01*
+X027771Y007354D01*
+X027580Y007249D02*
+X027099Y007249D01*
+X027099Y007170D02*
+X027507Y007170D01*
+X027475Y007092D02*
+X027085Y007092D01*
+X027052Y007013D02*
+X027451Y007013D01*
+X027451Y006935D02*
+X026993Y006935D01*
+X026899Y006856D02*
+X027459Y006856D01*
+X027492Y006778D02*
+X026049Y006778D01*
+X026049Y006784D02*
+X025988Y006931D01*
+X025876Y007043D01*
+X025729Y007104D01*
+X025571Y007104D01*
+X025424Y007043D01*
+X025312Y006931D01*
+X025257Y006798D01*
+X025124Y006743D01*
+X025012Y006631D01*
+X024951Y006484D01*
+X024951Y006375D01*
+X024874Y006343D01*
+X024762Y006231D01*
+X024715Y006118D01*
+X024629Y006154D01*
+X024471Y006154D01*
+X024324Y006093D01*
+X024212Y005981D01*
+X024151Y005834D01*
+X024151Y005676D01*
+X024212Y005529D01*
+X024324Y005417D01*
+X024471Y005356D01*
+X024501Y005356D01*
+X024501Y005326D01*
+X024562Y005180D01*
+X024501Y005034D01*
+X024501Y004876D01*
+X024562Y004729D01*
+X024674Y004617D01*
+X024821Y004556D01*
+X024979Y004556D01*
+X025126Y004617D01*
+X025238Y004729D01*
+X025299Y004876D01*
+X025299Y005034D01*
+X025238Y005180D01*
+X025270Y005257D01*
+X025271Y005256D01*
+X025429Y005256D01*
+X025576Y005317D01*
+X025590Y005331D01*
+X025612Y005279D01*
+X025724Y005167D01*
+X025871Y005106D01*
+X025930Y005106D01*
+X025962Y005029D01*
+X026074Y004917D01*
+X026221Y004856D01*
+X026379Y004856D01*
+X026526Y004917D01*
+X026561Y004952D01*
+X026612Y004829D01*
+X026724Y004717D01*
+X026871Y004656D01*
+X027029Y004656D01*
+X027176Y004717D01*
+X027200Y004741D01*
+X027274Y004667D01*
+X027421Y004606D01*
+X027579Y004606D01*
+X027726Y004667D01*
+X027838Y004779D01*
+X027899Y004926D01*
+X027899Y005084D01*
+X027838Y005231D01*
+X027726Y005343D01*
+X027579Y005404D01*
+X027421Y005404D01*
+X027274Y005343D01*
+X027250Y005319D01*
+X027239Y005330D01*
+X027299Y005476D01*
+X027299Y005634D01*
+X027238Y005781D01*
+X027126Y005893D01*
+X026979Y005954D01*
+X026821Y005954D01*
+X026674Y005893D01*
+X026562Y005781D01*
+X026501Y005634D01*
+X026501Y005603D01*
+X026379Y005654D01*
+X026320Y005654D01*
+X026288Y005731D01*
+X026176Y005843D01*
+X026029Y005904D01*
+X025871Y005904D01*
+X025724Y005843D01*
+X025710Y005829D01*
+X025688Y005881D01*
+X025576Y005993D01*
+X025499Y006025D01*
+X025499Y006035D01*
+X025576Y006067D01*
+X025688Y006179D01*
+X025743Y006312D01*
+X025876Y006367D01*
+X025988Y006479D01*
+X026049Y006626D01*
+X026049Y006784D01*
+X026019Y006856D02*
+X026501Y006856D01*
+X026407Y006935D02*
+X025984Y006935D01*
+X025906Y007013D02*
+X026348Y007013D01*
+X026315Y007092D02*
+X025759Y007092D01*
+X025787Y007170D02*
+X024963Y007170D01*
+X024938Y007231D02*
+X024847Y007322D01*
+X024849Y007326D01*
+X024849Y007484D01*
+X025501Y007484D01*
+X025501Y007563D02*
+X024816Y007563D01*
+X024788Y007631D02*
+X024676Y007743D01*
+X024529Y007804D01*
+X024371Y007804D01*
+X024224Y007743D01*
+X024112Y007631D01*
+X024051Y007484D01*
+X019185Y007484D01*
+X019176Y007493D02*
+X019029Y007554D01*
+X018871Y007554D01*
+X018724Y007493D01*
+X018612Y007381D01*
+X018551Y007234D01*
+X018551Y007076D01*
+X018612Y006929D01*
+X018724Y006817D01*
+X018871Y006756D01*
+X019029Y006756D01*
+X019176Y006817D01*
+X019288Y006929D01*
+X019349Y007076D01*
+X019349Y007234D01*
+X019288Y007381D01*
+X019176Y007493D01*
+X019263Y007406D02*
+X020204Y007406D01*
+X020174Y007393D02*
+X020062Y007281D01*
+X020001Y007134D01*
+X020001Y007025D01*
+X019924Y006993D01*
+X019812Y006881D01*
+X019751Y006734D01*
+X019751Y006576D01*
+X019812Y006429D01*
+X019924Y006317D01*
+X020071Y006256D01*
+X020229Y006256D01*
+X020269Y006273D01*
+X020374Y006167D01*
+X020521Y006106D01*
+X020679Y006106D01*
+X020826Y006167D01*
+X020938Y006279D01*
+X020970Y006356D01*
+X021079Y006356D01*
+X021226Y006417D01*
+X021338Y006529D01*
+X021399Y006676D01*
+X021399Y006834D01*
+X021338Y006981D01*
+X021226Y007093D01*
+X021079Y007154D01*
+X020921Y007154D01*
+X020799Y007103D01*
+X020799Y007134D01*
+X020738Y007281D01*
+X020626Y007393D01*
+X020479Y007454D01*
+X020321Y007454D01*
+X020174Y007393D01*
+X020108Y007327D02*
+X019310Y007327D01*
+X019343Y007249D02*
+X020049Y007249D01*
+X020016Y007170D02*
+X019349Y007170D01*
+X019349Y007092D02*
+X020001Y007092D01*
+X019972Y007013D02*
+X019323Y007013D01*
+X019290Y006935D02*
+X019866Y006935D01*
+X019802Y006856D02*
+X019215Y006856D01*
+X019081Y006778D02*
+X019769Y006778D01*
+X019751Y006699D02*
+X018143Y006699D01*
+X018149Y006684D02*
+X018088Y006831D01*
+X017976Y006943D01*
+X017829Y007004D01*
+X017671Y007004D01*
+X017524Y006943D01*
+X017412Y006831D01*
+X017351Y006684D01*
+X017351Y006526D01*
+X017412Y006379D01*
+X017524Y006267D01*
+X017671Y006206D01*
+X017829Y006206D01*
+X017976Y006267D01*
+X018088Y006379D01*
+X018149Y006526D01*
+X018149Y006684D01*
+X018149Y006621D02*
+X019751Y006621D01*
+X019765Y006542D02*
+X018149Y006542D01*
+X018123Y006464D02*
+X019798Y006464D01*
+X019856Y006385D02*
+X018090Y006385D01*
+X018015Y006307D02*
+X019949Y006307D01*
+X020313Y006228D02*
+X017882Y006228D01*
+X017618Y006228D02*
+X017241Y006228D01*
+X017179Y006254D02*
+X017021Y006254D01*
+X016874Y006193D01*
+X016795Y006114D01*
+X016788Y006131D01*
+X016676Y006243D01*
+X016529Y006304D01*
+X016499Y006304D01*
+X016499Y006334D01*
+X016438Y006481D01*
+X016326Y006593D01*
+X016179Y006654D01*
+X016021Y006654D01*
+X015874Y006593D01*
+X015762Y006481D01*
+X015701Y006334D01*
+X015701Y006176D01*
+X015762Y006029D01*
+X015874Y005917D01*
+X016021Y005856D01*
+X016051Y005856D01*
+X016051Y005826D01*
+X016112Y005679D01*
+X016224Y005567D01*
+X016371Y005506D01*
+X016529Y005506D01*
+X016676Y005567D01*
+X016755Y005646D01*
+X016762Y005629D01*
+X016874Y005517D01*
+X017021Y005456D01*
+X017179Y005456D01*
+X017326Y005517D01*
+X017438Y005629D01*
+X017499Y005776D01*
+X017499Y005934D01*
+X017438Y006081D01*
+X017326Y006193D01*
+X017179Y006254D01*
+X017369Y006150D02*
+X020416Y006150D01*
+X020784Y006150D02*
+X024460Y006150D01*
+X024302Y006071D02*
+X017442Y006071D01*
+X017475Y005993D02*
+X022244Y005993D01*
+X022271Y006004D02*
+X022124Y005943D01*
+X022012Y005831D01*
+X021951Y005684D01*
+X021951Y005526D01*
+X021968Y005486D01*
+X021912Y005431D01*
+X021851Y005284D01*
+X021851Y005126D01*
+X021912Y004979D01*
+X022024Y004867D01*
+X022171Y004806D01*
+X022329Y004806D01*
+X022476Y004867D01*
+X022588Y004979D01*
+X022649Y005126D01*
+X022649Y005284D01*
+X022632Y005324D01*
+X022688Y005379D01*
+X022749Y005526D01*
+X022749Y005684D01*
+X022688Y005831D01*
+X022576Y005943D01*
+X022429Y006004D01*
+X022271Y006004D01*
+X022456Y005993D02*
+X024224Y005993D01*
+X024184Y005914D02*
+X022605Y005914D01*
+X022683Y005836D02*
+X024152Y005836D01*
+X024151Y005757D02*
+X022719Y005757D01*
+X022749Y005679D02*
+X024151Y005679D01*
+X024183Y005600D02*
+X022749Y005600D01*
+X022747Y005522D02*
+X024220Y005522D01*
+X024298Y005443D02*
+X022714Y005443D01*
+X022673Y005365D02*
+X024451Y005365D01*
+X024518Y005286D02*
+X022648Y005286D01*
+X022649Y005208D02*
+X024550Y005208D01*
+X024540Y005129D02*
+X022649Y005129D01*
+X022618Y005051D02*
+X024508Y005051D01*
+X024501Y004972D02*
+X022581Y004972D01*
+X022502Y004894D02*
+X024501Y004894D01*
+X024526Y004815D02*
+X022350Y004815D01*
+X022150Y004815D02*
+X020754Y004815D01*
+X020726Y004843D02*
+X020838Y004731D01*
+X020899Y004584D01*
+X020899Y004426D01*
+X020869Y004353D01*
+X020871Y004354D01*
+X021029Y004354D01*
+X021176Y004293D01*
+X021288Y004181D01*
+X021349Y004034D01*
+X021349Y003876D01*
+X021288Y003729D01*
+X021176Y003617D01*
+X021029Y003556D01*
+X020871Y003556D01*
+X020772Y003597D01*
+X020788Y003581D01*
+X020849Y003434D01*
+X020849Y003276D01*
+X020788Y003129D01*
+X020676Y003017D01*
+X020529Y002956D01*
+X020371Y002956D01*
+X020224Y003017D01*
+X020112Y003129D01*
+X020051Y003276D01*
+X020051Y003434D01*
+X020112Y003581D01*
+X020224Y003693D01*
+X020371Y003754D01*
+X020529Y003754D01*
+X020628Y003713D01*
+X020612Y003729D01*
+X020551Y003876D01*
+X020551Y004034D01*
+X020581Y004107D01*
+X020579Y004106D01*
+X020421Y004106D01*
+X020274Y004167D01*
+X020162Y004279D01*
+X020101Y004426D01*
+X020101Y004584D01*
+X020162Y004731D01*
+X020274Y004843D01*
+X020421Y004904D01*
+X020506Y004904D01*
+X020474Y004917D01*
+X020362Y005029D01*
+X020301Y005176D01*
+X020301Y005334D01*
+X020362Y005481D01*
+X020474Y005593D01*
+X020621Y005654D01*
+X020779Y005654D01*
+X020926Y005593D01*
+X021038Y005481D01*
+X021099Y005334D01*
+X021099Y005176D01*
+X021038Y005029D01*
+X020926Y004917D01*
+X020779Y004856D01*
+X020694Y004856D01*
+X020726Y004843D01*
+X020832Y004737D02*
+X024559Y004737D01*
+X024633Y004658D02*
+X020868Y004658D01*
+X020899Y004580D02*
+X022761Y004580D01*
+X022774Y004593D02*
+X022662Y004481D01*
+X022601Y004334D01*
+X022601Y004176D01*
+X022662Y004029D01*
+X022774Y003917D01*
+X022921Y003856D01*
+X023079Y003856D01*
+X023226Y003917D01*
+X023262Y003829D01*
+X023374Y003717D01*
+X023521Y003656D01*
+X023679Y003656D01*
+X023826Y003717D01*
+X023900Y003791D01*
+X023924Y003767D01*
+X024071Y003706D01*
+X024229Y003706D01*
+X024376Y003767D01*
+X024488Y003879D01*
+X024549Y004026D01*
+X024549Y004184D01*
+X024488Y004331D01*
+X024376Y004443D01*
+X024229Y004504D01*
+X024071Y004504D01*
+X023924Y004443D01*
+X023850Y004369D01*
+X023826Y004393D01*
+X023679Y004454D01*
+X023521Y004454D01*
+X023374Y004393D01*
+X023338Y004481D01*
+X023226Y004593D01*
+X023079Y004654D01*
+X022921Y004654D01*
+X022774Y004593D01*
+X022682Y004501D02*
+X020899Y004501D01*
+X020897Y004423D02*
+X022638Y004423D01*
+X022605Y004344D02*
+X021053Y004344D01*
+X021203Y004266D02*
+X022601Y004266D01*
+X022601Y004187D02*
+X021282Y004187D01*
+X021318Y004109D02*
+X022629Y004109D01*
+X022662Y004030D02*
+X021349Y004030D01*
+X021349Y003952D02*
+X022740Y003952D01*
+X022880Y003873D02*
+X021348Y003873D01*
+X021315Y003795D02*
+X023297Y003795D01*
+X023244Y003873D02*
+X023120Y003873D01*
+X023179Y003654D02*
+X023021Y003654D01*
+X022874Y003593D01*
+X022762Y003481D01*
+X022701Y003334D01*
+X022701Y003176D01*
+X022762Y003029D01*
+X022874Y002917D01*
+X023021Y002856D01*
+X023179Y002856D01*
+X023326Y002917D01*
+X023438Y003029D01*
+X023499Y003176D01*
+X023499Y003334D01*
+X023438Y003481D01*
+X023326Y003593D01*
+X023179Y003654D01*
+X023218Y003638D02*
+X025332Y003638D01*
+X025371Y003654D02*
+X025224Y003593D01*
+X025112Y003481D01*
+X025051Y003334D01*
+X025051Y003176D01*
+X025112Y003029D01*
+X025224Y002917D01*
+X025371Y002856D01*
+X025529Y002856D01*
+X025676Y002917D01*
+X025788Y003029D01*
+X025849Y003176D01*
+X025849Y003334D01*
+X025788Y003481D01*
+X025676Y003593D01*
+X025529Y003654D01*
+X025371Y003654D01*
+X025568Y003638D02*
+X026019Y003638D01*
+X026074Y003693D02*
+X025962Y003581D01*
+X025901Y003434D01*
+X025901Y003276D01*
+X025962Y003129D01*
+X026074Y003017D01*
+X026221Y002956D01*
+X026379Y002956D01*
+X026419Y002973D01*
+X026474Y002917D01*
+X026621Y002856D01*
+X026779Y002856D01*
+X026926Y002917D01*
+X027038Y003029D01*
+X027099Y003176D01*
+X027099Y003334D01*
+X027038Y003481D01*
+X026926Y003593D01*
+X026779Y003654D01*
+X026621Y003654D01*
+X026581Y003637D01*
+X026526Y003693D01*
+X026379Y003754D01*
+X026221Y003754D01*
+X026074Y003693D01*
+X026130Y003716D02*
+X024253Y003716D01*
+X024403Y003795D02*
+X028247Y003795D01*
+X028262Y003831D02*
+X028201Y003684D01*
+X028201Y003526D01*
+X028262Y003379D01*
+X028374Y003267D01*
+X028521Y003206D01*
+X028679Y003206D01*
+X028826Y003267D01*
+X028925Y003366D01*
+X029024Y003267D01*
+X029171Y003206D01*
+X029329Y003206D01*
+X029476Y003267D01*
+X029588Y003379D01*
+X029649Y003526D01*
+X029649Y003684D01*
+X029588Y003831D01*
+X029476Y003943D01*
+X029329Y004004D01*
+X029171Y004004D01*
+X029024Y003943D01*
+X028925Y003844D01*
+X028826Y003943D01*
+X028774Y003965D01*
+X028788Y003979D01*
+X028849Y004126D01*
+X028849Y004284D01*
+X028788Y004431D01*
+X028676Y004543D01*
+X028529Y004604D01*
+X028371Y004604D01*
+X028224Y004543D01*
+X028112Y004431D01*
+X028051Y004284D01*
+X028051Y004126D01*
+X028112Y003979D01*
+X028224Y003867D01*
+X028276Y003845D01*
+X028262Y003831D01*
+X028218Y003873D02*
+X024482Y003873D01*
+X024518Y003952D02*
+X028140Y003952D01*
+X028091Y004030D02*
+X024549Y004030D01*
+X024549Y004109D02*
+X028058Y004109D01*
+X028051Y004187D02*
+X024548Y004187D01*
+X024515Y004266D02*
+X028051Y004266D01*
+X028076Y004344D02*
+X024475Y004344D01*
+X024396Y004423D02*
+X028109Y004423D01*
+X028182Y004501D02*
+X024236Y004501D01*
+X024064Y004501D02*
+X023318Y004501D01*
+X023362Y004423D02*
+X023445Y004423D01*
+X023239Y004580D02*
+X024765Y004580D01*
+X025035Y004580D02*
+X028312Y004580D01*
+X028588Y004580D02*
+X028862Y004580D01*
+X028862Y004579D02*
+X028974Y004467D01*
+X029121Y004406D01*
+X029279Y004406D01*
+X029426Y004467D01*
+X029538Y004579D01*
+X029599Y004726D01*
+X029599Y004884D01*
+X029538Y005031D01*
+X029426Y005143D01*
+X029397Y005155D01*
+X029426Y005167D01*
+X029538Y005279D01*
+X029599Y005426D01*
+X029599Y005584D01*
+X029538Y005731D01*
+X029426Y005843D01*
+X029279Y005904D01*
+X029121Y005904D01*
+X028974Y005843D01*
+X028862Y005731D01*
+X028801Y005584D01*
+X028801Y005426D01*
+X028862Y005279D01*
+X028974Y005167D01*
+X029003Y005155D01*
+X028974Y005143D01*
+X028862Y005031D01*
+X028801Y004884D01*
+X028801Y004726D01*
+X028862Y004579D01*
+X028829Y004658D02*
+X027704Y004658D01*
+X027795Y004737D02*
+X028801Y004737D01*
+X028801Y004815D02*
+X027853Y004815D01*
+X027885Y004894D02*
+X028805Y004894D01*
+X028838Y004972D02*
+X027899Y004972D01*
+X027899Y005051D02*
+X028882Y005051D01*
+X028960Y005129D02*
+X027880Y005129D01*
+X027848Y005208D02*
+X028934Y005208D01*
+X028859Y005286D02*
+X027783Y005286D01*
+X027674Y005365D02*
+X028827Y005365D01*
+X028801Y005443D02*
+X027285Y005443D01*
+X027299Y005522D02*
+X028801Y005522D01*
+X028808Y005600D02*
+X027299Y005600D01*
+X027280Y005679D02*
+X028840Y005679D01*
+X028888Y005757D02*
+X027248Y005757D01*
+X027183Y005836D02*
+X028967Y005836D01*
+X029433Y005836D02*
+X030852Y005836D01*
+X030851Y005834D02*
+X030851Y005676D01*
+X030912Y005529D01*
+X030997Y005444D01*
+X030874Y005393D01*
+X030762Y005281D01*
+X030701Y005134D01*
+X030701Y004976D01*
+X030762Y004829D01*
+X030874Y004717D01*
+X030891Y004710D01*
+X030812Y004631D01*
+X030751Y004484D01*
+X030751Y004326D01*
+X030812Y004179D01*
+X030924Y004067D01*
+X031071Y004006D01*
+X031229Y004006D01*
+X031376Y004067D01*
+X031488Y004179D01*
+X031549Y004326D01*
+X031549Y004484D01*
+X031488Y004631D01*
+X031376Y004743D01*
+X031359Y004750D01*
+X031438Y004829D01*
+X031499Y004976D01*
+X031499Y005134D01*
+X031438Y005281D01*
+X031353Y005366D01*
+X031476Y005417D01*
+X031588Y005529D01*
+X031649Y005676D01*
+X031649Y005834D01*
+X031588Y005981D01*
+X031497Y006072D01*
+X031499Y006076D01*
+X031499Y006234D01*
+X031438Y006381D01*
+X031326Y006493D01*
+X031179Y006554D01*
+X031021Y006554D01*
+X030874Y006493D01*
+X030762Y006381D01*
+X030701Y006234D01*
+X030701Y006076D01*
+X030762Y005929D01*
+X030853Y005838D01*
+X030851Y005834D01*
+X030851Y005757D02*
+X029512Y005757D01*
+X029560Y005679D02*
+X030851Y005679D01*
+X030883Y005600D02*
+X029592Y005600D01*
+X029599Y005522D02*
+X030920Y005522D01*
+X030995Y005443D02*
+X029599Y005443D01*
+X029573Y005365D02*
+X030846Y005365D01*
+X030767Y005286D02*
+X029541Y005286D01*
+X029466Y005208D02*
+X030732Y005208D01*
+X030701Y005129D02*
+X029440Y005129D01*
+X029518Y005051D02*
+X030701Y005051D01*
+X030703Y004972D02*
+X029562Y004972D01*
+X029595Y004894D02*
+X030735Y004894D01*
+X030776Y004815D02*
+X029599Y004815D01*
+X029599Y004737D02*
+X030855Y004737D01*
+X030839Y004658D02*
+X029571Y004658D01*
+X029538Y004580D02*
+X030791Y004580D01*
+X030758Y004501D02*
+X029460Y004501D01*
+X029319Y004423D02*
+X030751Y004423D01*
+X030751Y004344D02*
+X028824Y004344D01*
+X028849Y004266D02*
+X030776Y004266D01*
+X030809Y004187D02*
+X028849Y004187D01*
+X028842Y004109D02*
+X030883Y004109D01*
+X031013Y004030D02*
+X028809Y004030D01*
+X028805Y003952D02*
+X029045Y003952D01*
+X028954Y003873D02*
+X028896Y003873D01*
+X028791Y004423D02*
+X029081Y004423D01*
+X028940Y004501D02*
+X028718Y004501D01*
+X029455Y003952D02*
+X032200Y003952D01*
+X032200Y004030D02*
+X031287Y004030D01*
+X031417Y004109D02*
+X032200Y004109D01*
+X032200Y004187D02*
+X031491Y004187D01*
+X031524Y004266D02*
+X032200Y004266D01*
+X032200Y004344D02*
+X031549Y004344D01*
+X031549Y004423D02*
+X032200Y004423D01*
+X032200Y004501D02*
+X031542Y004501D01*
+X031509Y004580D02*
+X032200Y004580D01*
+X032200Y004658D02*
+X031461Y004658D01*
+X031382Y004737D02*
+X032200Y004737D01*
+X032200Y004815D02*
+X031424Y004815D01*
+X031465Y004894D02*
+X032200Y004894D01*
+X032200Y004972D02*
+X031497Y004972D01*
+X031499Y005051D02*
+X032200Y005051D01*
+X032200Y005129D02*
+X031499Y005129D01*
+X031468Y005208D02*
+X032200Y005208D01*
+X032200Y005286D02*
+X031433Y005286D01*
+X031354Y005365D02*
+X032200Y005365D01*
+X032200Y005443D02*
+X031502Y005443D01*
+X031580Y005522D02*
+X032200Y005522D01*
+X032200Y005600D02*
+X031617Y005600D01*
+X031649Y005679D02*
+X032200Y005679D01*
+X032200Y005757D02*
+X032031Y005757D01*
+X032029Y005756D02*
+X032176Y005817D01*
+X032200Y005841D01*
+X032200Y000355D01*
+X000700Y000355D01*
+X000700Y011906D01*
+X000821Y011856D01*
+X000979Y011856D01*
+X001126Y011917D01*
+X001238Y012029D01*
+X001299Y012176D01*
+X001299Y012334D01*
+X001238Y012481D01*
+X001126Y012593D01*
+X000979Y012654D01*
+X000821Y012654D01*
+X000700Y012604D01*
+X000700Y020055D01*
+X032200Y020055D01*
+X032200Y006469D01*
+X032176Y006493D01*
+X032029Y006554D01*
+X031871Y006554D01*
+X031724Y006493D01*
+X031612Y006381D01*
+X031551Y006234D01*
+X031551Y006076D01*
+X031612Y005929D01*
+X031724Y005817D01*
+X031871Y005756D01*
+X032029Y005756D01*
+X031869Y005757D02*
+X031649Y005757D01*
+X031648Y005836D02*
+X031706Y005836D01*
+X031627Y005914D02*
+X031616Y005914D01*
+X031586Y005993D02*
+X031576Y005993D01*
+X031553Y006071D02*
+X031498Y006071D01*
+X031499Y006150D02*
+X031551Y006150D01*
+X031551Y006228D02*
+X031499Y006228D01*
+X031469Y006307D02*
+X031581Y006307D01*
+X031616Y006385D02*
+X031434Y006385D01*
+X031355Y006464D02*
+X031695Y006464D01*
+X031842Y006542D02*
+X031208Y006542D01*
+X030992Y006542D02*
+X026927Y006542D01*
+X026938Y006531D02*
+X026826Y006643D01*
+X026679Y006704D01*
+X026521Y006704D01*
+X026374Y006643D01*
+X026262Y006531D01*
+X026201Y006384D01*
+X026201Y006226D01*
+X026262Y006079D01*
+X026374Y005967D01*
+X026521Y005906D01*
+X026679Y005906D01*
+X026826Y005967D01*
+X026938Y006079D01*
+X026999Y006226D01*
+X026999Y006384D01*
+X026938Y006531D01*
+X026966Y006464D02*
+X030845Y006464D01*
+X030766Y006385D02*
+X026998Y006385D01*
+X026999Y006307D02*
+X030731Y006307D01*
+X030701Y006228D02*
+X026999Y006228D01*
+X026967Y006150D02*
+X030701Y006150D01*
+X030703Y006071D02*
+X026930Y006071D01*
+X026851Y005993D02*
+X030736Y005993D01*
+X030777Y005914D02*
+X027075Y005914D01*
+X026725Y005914D02*
+X026698Y005914D01*
+X026617Y005836D02*
+X026183Y005836D01*
+X026262Y005757D02*
+X026552Y005757D01*
+X026520Y005679D02*
+X026310Y005679D01*
+X026502Y005914D02*
+X025655Y005914D01*
+X025707Y005836D02*
+X025717Y005836D01*
+X025576Y005993D02*
+X026349Y005993D01*
+X026270Y006071D02*
+X025580Y006071D01*
+X025658Y006150D02*
+X026233Y006150D01*
+X026201Y006228D02*
+X025708Y006228D01*
+X025741Y006307D02*
+X026201Y006307D01*
+X026202Y006385D02*
+X025894Y006385D01*
+X025972Y006464D02*
+X026234Y006464D01*
+X026273Y006542D02*
+X026014Y006542D01*
+X026047Y006621D02*
+X026352Y006621D01*
+X026509Y006699D02*
+X026049Y006699D01*
+X026013Y007170D02*
+X026301Y007170D01*
+X026301Y007249D02*
+X026157Y007249D01*
+X026236Y007327D02*
+X026319Y007327D01*
+X026351Y007406D02*
+X026270Y007406D01*
+X026299Y007484D02*
+X026415Y007484D01*
+X026315Y007563D02*
+X026521Y007563D01*
+X026487Y007798D02*
+X026770Y007798D01*
+X026665Y007877D02*
+X026499Y007877D01*
+X026499Y007955D02*
+X026601Y007955D01*
+X026569Y008034D02*
+X026478Y008034D01*
+X026446Y008112D02*
+X026551Y008112D01*
+X026551Y008191D02*
+X026378Y008191D01*
+X026263Y008269D02*
+X026566Y008269D01*
+X026598Y008348D02*
+X026123Y008348D01*
+X026090Y008426D02*
+X026657Y008426D01*
+X026752Y008505D02*
+X026014Y008505D01*
+X025879Y008583D02*
+X027608Y008583D01*
+X027549Y008662D02*
+X023963Y008662D01*
+X023976Y008667D02*
+X024088Y008779D01*
+X024149Y008926D01*
+X024149Y009084D01*
+X024088Y009231D01*
+X023976Y009343D01*
+X023829Y009404D01*
+X023671Y009404D01*
+X023524Y009343D01*
+X023412Y009231D01*
+X023351Y009084D01*
+X023351Y008926D01*
+X023412Y008779D01*
+X023524Y008667D01*
+X023671Y008606D01*
+X023829Y008606D01*
+X023976Y008667D01*
+X024049Y008740D02*
+X027516Y008740D01*
+X027501Y008819D02*
+X024104Y008819D01*
+X024137Y008897D02*
+X027501Y008897D01*
+X027518Y008976D02*
+X024149Y008976D01*
+X024149Y009054D02*
+X027551Y009054D01*
+X027614Y009133D02*
+X024129Y009133D01*
+X024096Y009211D02*
+X025509Y009211D01*
+X025521Y009206D02*
+X025679Y009206D01*
+X025826Y009267D01*
+X025938Y009379D01*
+X025993Y009512D01*
+X026126Y009567D01*
+X026238Y009679D01*
+X026299Y009826D01*
+X026299Y009984D01*
+X026238Y010131D01*
+X026126Y010243D01*
+X025979Y010304D01*
+X025821Y010304D01*
+X025674Y010243D01*
+X025562Y010131D01*
+X025507Y009998D01*
+X025374Y009943D01*
+X025345Y009914D01*
+X025338Y009931D01*
+X025226Y010043D01*
+X025079Y010104D01*
+X024921Y010104D01*
+X024774Y010043D01*
+X024662Y009931D01*
+X024601Y009784D01*
+X024601Y009626D01*
+X024662Y009479D01*
+X024774Y009367D01*
+X024921Y009306D01*
+X025079Y009306D01*
+X025226Y009367D01*
+X025255Y009396D01*
+X025262Y009379D01*
+X025374Y009267D01*
+X025521Y009206D01*
+X025691Y009211D02*
+X027718Y009211D01*
+X027946Y009368D02*
+X025927Y009368D01*
+X025966Y009447D02*
+X027913Y009447D01*
+X027901Y009525D02*
+X027134Y009525D01*
+X027212Y009604D02*
+X027901Y009604D01*
+X027921Y009682D02*
+X027260Y009682D01*
+X027292Y009761D02*
+X027954Y009761D01*
+X028020Y009839D02*
+X027299Y009839D01*
+X027299Y009918D02*
+X028133Y009918D01*
+X028002Y009290D02*
+X025848Y009290D01*
+X026025Y009525D02*
+X026666Y009525D01*
+X026588Y009604D02*
+X026162Y009604D01*
+X026239Y009682D02*
+X026540Y009682D01*
+X026508Y009761D02*
+X026272Y009761D01*
+X026299Y009839D02*
+X026501Y009839D01*
+X026501Y009918D02*
+X026299Y009918D01*
+X026294Y009996D02*
+X026527Y009996D01*
+X026559Y010075D02*
+X026261Y010075D01*
+X026216Y010153D02*
+X026634Y010153D01*
+X026767Y010232D02*
+X026137Y010232D01*
+X025663Y010232D02*
+X013149Y010232D01*
+X013139Y010153D02*
+X025584Y010153D01*
+X025539Y010075D02*
+X025150Y010075D01*
+X025273Y009996D02*
+X025502Y009996D01*
+X025349Y009918D02*
+X025344Y009918D01*
+X024850Y010075D02*
+X013107Y010075D01*
+X013055Y009996D02*
+X021402Y009996D01*
+X021421Y010004D02*
+X021274Y009943D01*
+X021162Y009831D01*
+X021101Y009684D01*
+X021101Y009574D01*
+X021029Y009604D01*
+X020871Y009604D01*
+X020724Y009543D01*
+X020612Y009431D01*
+X020551Y009284D01*
+X020551Y009126D01*
+X020612Y008979D01*
+X020724Y008867D01*
+X020871Y008806D01*
+X021029Y008806D01*
+X021176Y008867D01*
+X021288Y008979D01*
+X021349Y009126D01*
+X021349Y009236D01*
+X021421Y009206D01*
+X021579Y009206D01*
+X021726Y009267D01*
+X021800Y009341D01*
+X021874Y009267D01*
+X022021Y009206D01*
+X022179Y009206D01*
+X022326Y009267D01*
+X022375Y009316D01*
+X022521Y009256D01*
+X022679Y009256D01*
+X022826Y009317D01*
+X022938Y009429D01*
+X022999Y009576D01*
+X022999Y009734D01*
+X022938Y009881D01*
+X022826Y009993D01*
+X022679Y010054D01*
+X022521Y010054D01*
+X022374Y009993D01*
+X022325Y009944D01*
+X022179Y010004D01*
+X022021Y010004D01*
+X021874Y009943D01*
+X021800Y009869D01*
+X021726Y009943D01*
+X021579Y010004D01*
+X021421Y010004D01*
+X021598Y009996D02*
+X022002Y009996D01*
+X021849Y009918D02*
+X021751Y009918D01*
+X022198Y009996D02*
+X022381Y009996D01*
+X022819Y009996D02*
+X024727Y009996D01*
+X024656Y009918D02*
+X022901Y009918D01*
+X022955Y009839D02*
+X024624Y009839D01*
+X024601Y009761D02*
+X022988Y009761D01*
+X022999Y009682D02*
+X024601Y009682D01*
+X024610Y009604D02*
+X022999Y009604D01*
+X022978Y009525D02*
+X024643Y009525D01*
+X024695Y009447D02*
+X022945Y009447D01*
+X022877Y009368D02*
+X023584Y009368D01*
+X023471Y009290D02*
+X022760Y009290D01*
+X022440Y009290D02*
+X022348Y009290D01*
+X022191Y009211D02*
+X023404Y009211D01*
+X023371Y009133D02*
+X021349Y009133D01*
+X021349Y009211D02*
+X021409Y009211D01*
+X021319Y009054D02*
+X023351Y009054D01*
+X023351Y008976D02*
+X021284Y008976D01*
+X021206Y008897D02*
+X023363Y008897D01*
+X023396Y008819D02*
+X021059Y008819D01*
+X020841Y008819D02*
+X017927Y008819D01*
+X017926Y008817D02*
+X018038Y008929D01*
+X018099Y009076D01*
+X018099Y009234D01*
+X018038Y009381D01*
+X017926Y009493D01*
+X017779Y009554D01*
+X017621Y009554D01*
+X017474Y009493D01*
+X017362Y009381D01*
+X017301Y009234D01*
+X017301Y009076D01*
+X017362Y008929D01*
+X017474Y008817D01*
+X017621Y008756D01*
+X017779Y008756D01*
+X017926Y008817D01*
+X018006Y008897D02*
+X020694Y008897D01*
+X020616Y008976D02*
+X018057Y008976D01*
+X018090Y009054D02*
+X020581Y009054D01*
+X020551Y009133D02*
+X018099Y009133D01*
+X018099Y009211D02*
+X020551Y009211D01*
+X020553Y009290D02*
+X018076Y009290D01*
+X018043Y009368D02*
+X020586Y009368D01*
+X020628Y009447D02*
+X017972Y009447D01*
+X017849Y009525D02*
+X020706Y009525D01*
+X020870Y009604D02*
+X009215Y009604D01*
+X009238Y009581D02*
+X009126Y009693D01*
+X008979Y009754D01*
+X008821Y009754D01*
+X008674Y009693D01*
+X008562Y009581D01*
+X008501Y009434D01*
+X008501Y009276D01*
+X008562Y009129D01*
+X008674Y009017D01*
+X008821Y008956D01*
+X008979Y008956D01*
+X009126Y009017D01*
+X009238Y009129D01*
+X009299Y009276D01*
+X009299Y009434D01*
+X009238Y009581D01*
+X009261Y009525D02*
+X017551Y009525D01*
+X017428Y009447D02*
+X009294Y009447D01*
+X009299Y009368D02*
+X017357Y009368D01*
+X017324Y009290D02*
+X009299Y009290D01*
+X009272Y009211D02*
+X017301Y009211D01*
+X017301Y009133D02*
+X009239Y009133D01*
+X009163Y009054D02*
+X017310Y009054D01*
+X017343Y008976D02*
+X009026Y008976D01*
+X008774Y008976D02*
+X008449Y008976D01*
+X008449Y008984D02*
+X008388Y009131D01*
+X008276Y009243D01*
+X008129Y009304D01*
+X007971Y009304D01*
+X007824Y009243D01*
+X007712Y009131D01*
+X007651Y008984D01*
+X007651Y008826D01*
+X007712Y008679D01*
+X007824Y008567D01*
+X007971Y008506D01*
+X008129Y008506D01*
+X008276Y008567D01*
+X008388Y008679D01*
+X008449Y008826D01*
+X008449Y008984D01*
+X008420Y009054D02*
+X008637Y009054D01*
+X008561Y009133D02*
+X008386Y009133D01*
+X008308Y009211D02*
+X008528Y009211D01*
+X008501Y009290D02*
+X008164Y009290D01*
+X007936Y009290D02*
+X004399Y009290D01*
+X004399Y009226D02*
+X004338Y009079D01*
+X004226Y008967D01*
+X004079Y008906D01*
+X003921Y008906D01*
+X003774Y008967D01*
+X003662Y009079D01*
+X003601Y009226D01*
+X003601Y009384D01*
+X003662Y009531D01*
+X003774Y009643D01*
+X003921Y009704D01*
+X004079Y009704D01*
+X004226Y009643D01*
+X004338Y009531D01*
+X004399Y009384D01*
+X004399Y009226D01*
+X004393Y009211D02*
+X007792Y009211D01*
+X007714Y009133D02*
+X004360Y009133D01*
+X004313Y009054D02*
+X007680Y009054D01*
+X007651Y008976D02*
+X004234Y008976D01*
+X004399Y009368D02*
+X008501Y009368D01*
+X008506Y009447D02*
+X004373Y009447D01*
+X004340Y009525D02*
+X008539Y009525D01*
+X008585Y009604D02*
+X004265Y009604D01*
+X004132Y009682D02*
+X008663Y009682D01*
+X008355Y009996D02*
+X009264Y009996D01*
+X009251Y010026D02*
+X009312Y009879D01*
+X009424Y009767D01*
+X009571Y009706D01*
+X009729Y009706D01*
+X009876Y009767D01*
+X009988Y009879D01*
+X010049Y010026D01*
+X010049Y010184D01*
+X009988Y010331D01*
+X009876Y010443D01*
+X009729Y010504D01*
+X009571Y010504D01*
+X009424Y010443D01*
+X009312Y010331D01*
+X009251Y010184D01*
+X009251Y010026D01*
+X009251Y010075D02*
+X008407Y010075D01*
+X008388Y010029D02*
+X008449Y010176D01*
+X008449Y010334D01*
+X008388Y010481D01*
+X008276Y010593D01*
+X008129Y010654D01*
+X007971Y010654D01*
+X007824Y010593D01*
+X007712Y010481D01*
+X007651Y010334D01*
+X007651Y010176D01*
+X007712Y010029D01*
+X007824Y009917D01*
+X007971Y009856D01*
+X008129Y009856D01*
+X008276Y009917D01*
+X008388Y010029D01*
+X008439Y010153D02*
+X008708Y010153D01*
+X008674Y010167D02*
+X008821Y010106D01*
+X008979Y010106D01*
+X009126Y010167D01*
+X009238Y010279D01*
+X009299Y010426D01*
+X009299Y010584D01*
+X009238Y010731D01*
+X009126Y010843D01*
+X008979Y010904D01*
+X008821Y010904D01*
+X008674Y010843D01*
+X008562Y010731D01*
+X008501Y010584D01*
+X008501Y010426D01*
+X008562Y010279D01*
+X008674Y010167D01*
+X008610Y010232D02*
+X008449Y010232D01*
+X008449Y010310D02*
+X008549Y010310D01*
+X008517Y010389D02*
+X008426Y010389D01*
+X008394Y010467D02*
+X008501Y010467D01*
+X008501Y010546D02*
+X008323Y010546D01*
+X008201Y010624D02*
+X008518Y010624D01*
+X008550Y010703D02*
+X006518Y010703D01*
+X006498Y010654D02*
+X006549Y010776D01*
+X006549Y010934D01*
+X006488Y011081D01*
+X006376Y011193D01*
+X006229Y011254D01*
+X006071Y011254D01*
+X005924Y011193D01*
+X005812Y011081D01*
+X005751Y010934D01*
+X005751Y010776D01*
+X005812Y010629D01*
+X005861Y010580D01*
+X005762Y010481D01*
+X005701Y010334D01*
+X005701Y010176D01*
+X005762Y010029D01*
+X005874Y009917D01*
+X006021Y009856D01*
+X006179Y009856D01*
+X006325Y009917D01*
+X006471Y009856D01*
+X006629Y009856D01*
+X006776Y009917D01*
+X006888Y010029D01*
+X006949Y010176D01*
+X006949Y010334D01*
+X006888Y010481D01*
+X006776Y010593D01*
+X006629Y010654D01*
+X006498Y010654D01*
+X006549Y010781D02*
+X008612Y010781D01*
+X008714Y010860D02*
+X006549Y010860D01*
+X006547Y010938D02*
+X009938Y010938D01*
+X009962Y010879D02*
+X009901Y011026D01*
+X009901Y011184D01*
+X009962Y011331D01*
+X010074Y011443D01*
+X010221Y011504D01*
+X010379Y011504D01*
+X010526Y011443D01*
+X010638Y011331D01*
+X010699Y011184D01*
+X010699Y011026D01*
+X010638Y010879D01*
+X010526Y010767D01*
+X010379Y010706D01*
+X010221Y010706D01*
+X010074Y010767D01*
+X009962Y010879D01*
+X009982Y010860D02*
+X009086Y010860D01*
+X009188Y010781D02*
+X010060Y010781D01*
+X009905Y011017D02*
+X006515Y011017D01*
+X006474Y011095D02*
+X009901Y011095D01*
+X009901Y011174D02*
+X006395Y011174D01*
+X006233Y011252D02*
+X009929Y011252D01*
+X009962Y011331D02*
+X000700Y011331D01*
+X000700Y011409D02*
+X010040Y011409D01*
+X010182Y011488D02*
+X000700Y011488D01*
+X000700Y011566D02*
+X012025Y011566D01*
+X012074Y011517D02*
+X012221Y011456D01*
+X012379Y011456D01*
+X012526Y011517D01*
+X012600Y011591D01*
+X012624Y011567D01*
+X012771Y011506D01*
+X012929Y011506D01*
+X013076Y011567D01*
+X013188Y011679D01*
+X013249Y011826D01*
+X013249Y011984D01*
+X013188Y012131D01*
+X013076Y012243D01*
+X012929Y012304D01*
+X012771Y012304D01*
+X012624Y012243D01*
+X012550Y012169D01*
+X012526Y012193D01*
+X012379Y012254D01*
+X012221Y012254D01*
+X012074Y012193D01*
+X011962Y012081D01*
+X011901Y011934D01*
+X011901Y011776D01*
+X011962Y011629D01*
+X012074Y011517D01*
+X012145Y011488D02*
+X010418Y011488D01*
+X010560Y011409D02*
+X013203Y011409D01*
+X013212Y011431D02*
+X013151Y011284D01*
+X013151Y011126D01*
+X013212Y010979D01*
+X013324Y010867D01*
+X013471Y010806D01*
+X013629Y010806D01*
+X013776Y010867D01*
+X013888Y010979D01*
+X013949Y011126D01*
+X013949Y011284D01*
+X013888Y011431D01*
+X013776Y011543D01*
+X013629Y011604D01*
+X013471Y011604D01*
+X013324Y011543D01*
+X013212Y011431D01*
+X013269Y011488D02*
+X012455Y011488D01*
+X012575Y011566D02*
+X012626Y011566D01*
+X013074Y011566D02*
+X013380Y011566D01*
+X013474Y011767D02*
+X013621Y011706D01*
+X013779Y011706D01*
+X013926Y011767D01*
+X014038Y011879D01*
+X014099Y012026D01*
+X014099Y012184D01*
+X014038Y012331D01*
+X013926Y012443D01*
+X013779Y012504D01*
+X013621Y012504D01*
+X013474Y012443D01*
+X013362Y012331D01*
+X013301Y012184D01*
+X013301Y012026D01*
+X013362Y011879D01*
+X013474Y011767D01*
+X013440Y011802D02*
+X013239Y011802D01*
+X013249Y011880D02*
+X013362Y011880D01*
+X013329Y011959D02*
+X013249Y011959D01*
+X013227Y012037D02*
+X013301Y012037D01*
+X013301Y012116D02*
+X013194Y012116D01*
+X013125Y012194D02*
+X013305Y012194D01*
+X013338Y012273D02*
+X013005Y012273D01*
+X012695Y012273D02*
+X005696Y012273D01*
+X005738Y012231D02*
+X005626Y012343D01*
+X005479Y012404D01*
+X005321Y012404D01*
+X005174Y012343D01*
+X005062Y012231D01*
+X005001Y012084D01*
+X005001Y011926D01*
+X005062Y011779D01*
+X005174Y011667D01*
+X005321Y011606D01*
+X005479Y011606D01*
+X005626Y011667D01*
+X005738Y011779D01*
+X005799Y011926D01*
+X005799Y012084D01*
+X005738Y012231D01*
+X005753Y012194D02*
+X012077Y012194D01*
+X011997Y012116D02*
+X005786Y012116D01*
+X005799Y012037D02*
+X011944Y012037D01*
+X011911Y011959D02*
+X005799Y011959D01*
+X005780Y011880D02*
+X011901Y011880D01*
+X011901Y011802D02*
+X005747Y011802D01*
+X005682Y011723D02*
+X011923Y011723D01*
+X011956Y011645D02*
+X005572Y011645D01*
+X005228Y011645D02*
+X000700Y011645D01*
+X000700Y011723D02*
+X005118Y011723D01*
+X005053Y011802D02*
+X000700Y011802D01*
+X000700Y011880D02*
+X000763Y011880D01*
+X001037Y011880D02*
+X005020Y011880D01*
+X005001Y011959D02*
+X001167Y011959D01*
+X001241Y012037D02*
+X005001Y012037D01*
+X005014Y012116D02*
+X001274Y012116D01*
+X001299Y012194D02*
+X005047Y012194D01*
+X005104Y012273D02*
+X001299Y012273D01*
+X001292Y012351D02*
+X005193Y012351D01*
+X005271Y012656D02*
+X005150Y012706D01*
+X005029Y012656D01*
+X004871Y012656D01*
+X004724Y012717D01*
+X004612Y012829D01*
+X004551Y012976D01*
+X004551Y013134D01*
+X004612Y013281D01*
+X004724Y013393D01*
+X004871Y013454D01*
+X005029Y013454D01*
+X005150Y013404D01*
+X005271Y013454D01*
+X005429Y013454D01*
+X005576Y013393D01*
+X005688Y013281D01*
+X005749Y013134D01*
+X005749Y012976D01*
+X005688Y012829D01*
+X005576Y012717D01*
+X005429Y012656D01*
+X005271Y012656D01*
+X005249Y012665D02*
+X005051Y012665D01*
+X004849Y012665D02*
+X000700Y012665D01*
+X000700Y012744D02*
+X004698Y012744D01*
+X004619Y012822D02*
+X000700Y012822D01*
+X000700Y012901D02*
+X004582Y012901D01*
+X004551Y012979D02*
+X000700Y012979D01*
+X000700Y013058D02*
+X004551Y013058D01*
+X004552Y013136D02*
+X000700Y013136D01*
+X000700Y013215D02*
+X004584Y013215D01*
+X004624Y013293D02*
+X000700Y013293D01*
+X000700Y013372D02*
+X004703Y013372D01*
+X004862Y013450D02*
+X000700Y013450D01*
+X000700Y013529D02*
+X006910Y013529D01*
+X006971Y013554D02*
+X006824Y013493D01*
+X006712Y013381D01*
+X006651Y013234D01*
+X006651Y013076D01*
+X006712Y012929D01*
+X006824Y012817D01*
+X006971Y012756D01*
+X007129Y012756D01*
+X007276Y012817D01*
+X007325Y012866D01*
+X007374Y012817D01*
+X007521Y012756D01*
+X007679Y012756D01*
+X007826Y012817D01*
+X007938Y012929D01*
+X007999Y013076D01*
+X007999Y013234D01*
+X007938Y013381D01*
+X007826Y013493D01*
+X007679Y013554D01*
+X007521Y013554D01*
+X007374Y013493D01*
+X007325Y013444D01*
+X007276Y013493D01*
+X007129Y013554D01*
+X006971Y013554D01*
+X006781Y013450D02*
+X005438Y013450D01*
+X005262Y013450D02*
+X005038Y013450D01*
+X004776Y013767D02*
+X004629Y013706D01*
+X004471Y013706D01*
+X004324Y013767D01*
+X004212Y013879D01*
+X004205Y013896D01*
+X004126Y013817D01*
+X003979Y013756D01*
+X003821Y013756D01*
+X003674Y013817D01*
+X003600Y013891D01*
+X003526Y013817D01*
+X003379Y013756D01*
+X003221Y013756D01*
+X003074Y013817D01*
+X002975Y013916D01*
+X002876Y013817D01*
+X002729Y013756D01*
+X002571Y013756D01*
+X002424Y013817D01*
+X002312Y013929D01*
+X002251Y014076D01*
+X002251Y014234D01*
+X002312Y014381D01*
+X002424Y014493D01*
+X002571Y014554D01*
+X002729Y014554D01*
+X002876Y014493D01*
+X002975Y014394D01*
+X003074Y014493D01*
+X003221Y014554D01*
+X003379Y014554D01*
+X003526Y014493D01*
+X003600Y014419D01*
+X003674Y014493D01*
+X003821Y014554D01*
+X003979Y014554D01*
+X004126Y014493D01*
+X004238Y014381D01*
+X004245Y014364D01*
+X004324Y014443D01*
+X004471Y014504D01*
+X004629Y014504D01*
+X004776Y014443D01*
+X004888Y014331D01*
+X004949Y014184D01*
+X004949Y014026D01*
+X004888Y013879D01*
+X004776Y013767D01*
+X004769Y013764D02*
+X010351Y013764D01*
+X010351Y013686D02*
+X000700Y013686D01*
+X000700Y013764D02*
+X002552Y013764D01*
+X002399Y013843D02*
+X001567Y013843D01*
+X001626Y013867D02*
+X001479Y013806D01*
+X001321Y013806D01*
+X001174Y013867D01*
+X001062Y013979D01*
+X001001Y014126D01*
+X001001Y014284D01*
+X001062Y014431D01*
+X001174Y014543D01*
+X001321Y014604D01*
+X001479Y014604D01*
+X001626Y014543D01*
+X001738Y014431D01*
+X001799Y014284D01*
+X001799Y014126D01*
+X001738Y013979D01*
+X001626Y013867D01*
+X001680Y013921D02*
+X002320Y013921D01*
+X002283Y014000D02*
+X001746Y014000D01*
+X001779Y014078D02*
+X002251Y014078D01*
+X002251Y014157D02*
+X001799Y014157D01*
+X001799Y014235D02*
+X002252Y014235D01*
+X002284Y014314D02*
+X001787Y014314D01*
+X001754Y014392D02*
+X002323Y014392D01*
+X002402Y014471D02*
+X001698Y014471D01*
+X001611Y014549D02*
+X002559Y014549D01*
+X002741Y014549D02*
+X003209Y014549D01*
+X003052Y014471D02*
+X002898Y014471D01*
+X003391Y014549D02*
+X003809Y014549D01*
+X003652Y014471D02*
+X003548Y014471D01*
+X003991Y014549D02*
+X006554Y014549D01*
+X006521Y014628D02*
+X004931Y014628D01*
+X004879Y014606D02*
+X005026Y014667D01*
+X005138Y014779D01*
+X005199Y014926D01*
+X005199Y015084D01*
+X005138Y015231D01*
+X005026Y015343D01*
+X004879Y015404D01*
+X004721Y015404D01*
+X004574Y015343D01*
+X004462Y015231D01*
+X004401Y015084D01*
+X004401Y014926D01*
+X004462Y014779D01*
+X004574Y014667D01*
+X004721Y014606D01*
+X004879Y014606D01*
+X004669Y014628D02*
+X000700Y014628D01*
+X000700Y014706D02*
+X004535Y014706D01*
+X004460Y014785D02*
+X000700Y014785D01*
+X000700Y014863D02*
+X004427Y014863D01*
+X004401Y014942D02*
+X000700Y014942D01*
+X000700Y015020D02*
+X004401Y015020D01*
+X004407Y015099D02*
+X000700Y015099D01*
+X000700Y015177D02*
+X004440Y015177D01*
+X004487Y015256D02*
+X000700Y015256D01*
+X000700Y015334D02*
+X004565Y015334D01*
+X004720Y015648D02*
+X000700Y015648D01*
+X000700Y015570D02*
+X005201Y015570D01*
+X005201Y015634D02*
+X005201Y015476D01*
+X005262Y015329D01*
+X005374Y015217D01*
+X005521Y015156D01*
+X005679Y015156D01*
+X005801Y015207D01*
+X005801Y015126D01*
+X005862Y014979D01*
+X005974Y014867D01*
+X006121Y014806D01*
+X006279Y014806D01*
+X006426Y014867D01*
+X006538Y014979D01*
+X006599Y015126D01*
+X006599Y015284D01*
+X006538Y015431D01*
+X006426Y015543D01*
+X006279Y015604D01*
+X006121Y015604D01*
+X005999Y015553D01*
+X005999Y015634D01*
+X005938Y015781D01*
+X005826Y015893D01*
+X005679Y015954D01*
+X005521Y015954D01*
+X005374Y015893D01*
+X005262Y015781D01*
+X005201Y015634D01*
+X005207Y015648D02*
+X005080Y015648D01*
+X005126Y015667D02*
+X005238Y015779D01*
+X005299Y015926D01*
+X005299Y016084D01*
+X005238Y016231D01*
+X005126Y016343D01*
+X004979Y016404D01*
+X004821Y016404D01*
+X004674Y016343D01*
+X004562Y016231D01*
+X004501Y016084D01*
+X004501Y015926D01*
+X004562Y015779D01*
+X004674Y015667D01*
+X004821Y015606D01*
+X004979Y015606D01*
+X005126Y015667D01*
+X005185Y015727D02*
+X005239Y015727D01*
+X005249Y015805D02*
+X005286Y015805D01*
+X005281Y015884D02*
+X005365Y015884D01*
+X005299Y015962D02*
+X018348Y015962D01*
+X018316Y016041D02*
+X005299Y016041D01*
+X005284Y016119D02*
+X016190Y016119D01*
+X016044Y016198D02*
+X005252Y016198D01*
+X005193Y016276D02*
+X015965Y016276D01*
+X015931Y016355D02*
+X005098Y016355D01*
+X004702Y016355D02*
+X004449Y016355D01*
+X004449Y016384D02*
+X004388Y016531D01*
+X004276Y016643D01*
+X004129Y016704D01*
+X003971Y016704D01*
+X003824Y016643D01*
+X003712Y016531D01*
+X003651Y016384D01*
+X003651Y016226D01*
+X003712Y016079D01*
+X003824Y015967D01*
+X003971Y015906D01*
+X004129Y015906D01*
+X004276Y015967D01*
+X004388Y016079D01*
+X004449Y016226D01*
+X004449Y016384D01*
+X004429Y016433D02*
+X015901Y016433D01*
+X015901Y016512D02*
+X004396Y016512D01*
+X004329Y016590D02*
+X015904Y016590D01*
+X015936Y016669D02*
+X004777Y016669D01*
+X005178Y016747D02*
+X015978Y016747D01*
+X016699Y016512D02*
+X018519Y016512D01*
+X018414Y016433D02*
+X016699Y016433D01*
+X016669Y016355D02*
+X018351Y016355D01*
+X018319Y016276D02*
+X016635Y016276D01*
+X016556Y016198D02*
+X018301Y016198D01*
+X018301Y016119D02*
+X016410Y016119D01*
+X016738Y015570D02*
+X008713Y015570D01*
+X008688Y015631D02*
+X008576Y015743D01*
+X008429Y015804D01*
+X008271Y015804D01*
+X008267Y015802D01*
+X008176Y015893D01*
+X008029Y015954D01*
+X007871Y015954D01*
+X007750Y015904D01*
+X007629Y015954D01*
+X007471Y015954D01*
+X007324Y015893D01*
+X007212Y015781D01*
+X007151Y015634D01*
+X007151Y015476D01*
+X007212Y015329D01*
+X007324Y015217D01*
+X007471Y015156D01*
+X007629Y015156D01*
+X007750Y015206D01*
+X007871Y015156D01*
+X008029Y015156D01*
+X008033Y015158D01*
+X008124Y015067D01*
+X008271Y015006D01*
+X008429Y015006D01*
+X008576Y015067D01*
+X008688Y015179D01*
+X008749Y015326D01*
+X008749Y015484D01*
+X008688Y015631D01*
+X008671Y015648D02*
+X017357Y015648D01*
+X017351Y015634D02*
+X017351Y015476D01*
+X017412Y015329D01*
+X017524Y015217D01*
+X017671Y015156D01*
+X017829Y015156D01*
+X017976Y015217D01*
+X018088Y015329D01*
+X018149Y015476D01*
+X018149Y015634D01*
+X018088Y015781D01*
+X017976Y015893D01*
+X017829Y015954D01*
+X017671Y015954D01*
+X017524Y015893D01*
+X017412Y015781D01*
+X017351Y015634D01*
+X017351Y015570D02*
+X017062Y015570D01*
+X017178Y015491D02*
+X017351Y015491D01*
+X017377Y015413D02*
+X017246Y015413D01*
+X017278Y015334D02*
+X017410Y015334D01*
+X017486Y015256D02*
+X017299Y015256D01*
+X017299Y015177D02*
+X017620Y015177D01*
+X017879Y015177D02*
+X019502Y015177D01*
+X019502Y015099D02*
+X017287Y015099D01*
+X017255Y015020D02*
+X019514Y015020D01*
+X019535Y014942D02*
+X017200Y014942D01*
+X017116Y014863D02*
+X019568Y014863D01*
+X019513Y015256D02*
+X018014Y015256D01*
+X018090Y015334D02*
+X019534Y015334D01*
+X019566Y015413D02*
+X018123Y015413D01*
+X018149Y015491D02*
+X019612Y015491D01*
+X019707Y015491D02*
+X019820Y015491D01*
+X019786Y015413D02*
+X019899Y015413D01*
+X019864Y015334D02*
+X019977Y015334D01*
+X019943Y015256D02*
+X020056Y015256D01*
+X019742Y015570D02*
+X018149Y015570D01*
+X018143Y015648D02*
+X019771Y015648D01*
+X019937Y015727D02*
+X018111Y015727D01*
+X018064Y015805D02*
+X018503Y015805D01*
+X018408Y015884D02*
+X017985Y015884D01*
+X017515Y015884D02*
+X008185Y015884D01*
+X008264Y015805D02*
+X017436Y015805D01*
+X017389Y015727D02*
+X008592Y015727D01*
+X008746Y015491D02*
+X016622Y015491D01*
+X016554Y015413D02*
+X008749Y015413D01*
+X008749Y015334D02*
+X016522Y015334D01*
+X016501Y015256D02*
+X009346Y015256D01*
+X008954Y015256D02*
+X008720Y015256D01*
+X008686Y015177D02*
+X008858Y015177D01*
+X008799Y015099D02*
+X008607Y015099D01*
+X008463Y015020D02*
+X008766Y015020D01*
+X008751Y014942D02*
+X007254Y014942D01*
+X007287Y014863D02*
+X008751Y014863D01*
+X008768Y014785D02*
+X007299Y014785D01*
+X007299Y014706D02*
+X008801Y014706D01*
+X008864Y014628D02*
+X008191Y014628D01*
+X007709Y014628D02*
+X007541Y014628D01*
+X007620Y014549D02*
+X007630Y014549D01*
+X007679Y015177D02*
+X007821Y015177D01*
+X008093Y015099D02*
+X007113Y015099D01*
+X007199Y015020D02*
+X008237Y015020D01*
+X007420Y015177D02*
+X006599Y015177D01*
+X006599Y015256D02*
+X007286Y015256D01*
+X007210Y015334D02*
+X006578Y015334D01*
+X006546Y015413D02*
+X007177Y015413D01*
+X007151Y015491D02*
+X006478Y015491D01*
+X006362Y015570D02*
+X007151Y015570D01*
+X007157Y015648D02*
+X005993Y015648D01*
+X005999Y015570D02*
+X006038Y015570D01*
+X005961Y015727D02*
+X007189Y015727D01*
+X007236Y015805D02*
+X005914Y015805D01*
+X005835Y015884D02*
+X007315Y015884D01*
+X006687Y015099D02*
+X006587Y015099D01*
+X006601Y015020D02*
+X006555Y015020D01*
+X006546Y014942D02*
+X006500Y014942D01*
+X006513Y014863D02*
+X006416Y014863D01*
+X006501Y014785D02*
+X005140Y014785D01*
+X005173Y014863D02*
+X005984Y014863D01*
+X005900Y014942D02*
+X005199Y014942D01*
+X005199Y015020D02*
+X005845Y015020D01*
+X005813Y015099D02*
+X005193Y015099D01*
+X005160Y015177D02*
+X005470Y015177D01*
+X005336Y015256D02*
+X005113Y015256D01*
+X005035Y015334D02*
+X005260Y015334D01*
+X005227Y015413D02*
+X000700Y015413D01*
+X000700Y015491D02*
+X005201Y015491D01*
+X005729Y015177D02*
+X005801Y015177D01*
+X006501Y014706D02*
+X005065Y014706D01*
+X004827Y014392D02*
+X006734Y014392D01*
+X006621Y014471D02*
+X004709Y014471D01*
+X004895Y014314D02*
+X006901Y014314D01*
+X006901Y014235D02*
+X004928Y014235D01*
+X004949Y014157D02*
+X006930Y014157D01*
+X006963Y014078D02*
+X004949Y014078D01*
+X004938Y014000D02*
+X007042Y014000D01*
+X007185Y013921D02*
+X004905Y013921D01*
+X004851Y013843D02*
+X010355Y013843D01*
+X010387Y013921D02*
+X008065Y013921D01*
+X008208Y014000D02*
+X010431Y014000D01*
+X010509Y014078D02*
+X008287Y014078D01*
+X007835Y013921D02*
+X007415Y013921D01*
+X007558Y014000D02*
+X007692Y014000D01*
+X007740Y013529D02*
+X010413Y013529D01*
+X010380Y013607D02*
+X000700Y013607D01*
+X000700Y013843D02*
+X001233Y013843D01*
+X001120Y013921D02*
+X000700Y013921D01*
+X000700Y014000D02*
+X001054Y014000D01*
+X001021Y014078D02*
+X000700Y014078D01*
+X000700Y014157D02*
+X001001Y014157D01*
+X001001Y014235D02*
+X000700Y014235D01*
+X000700Y014314D02*
+X001013Y014314D01*
+X001046Y014392D02*
+X000700Y014392D01*
+X000700Y014471D02*
+X001102Y014471D01*
+X001189Y014549D02*
+X000700Y014549D01*
+X000700Y015727D02*
+X004615Y015727D01*
+X004551Y015805D02*
+X000700Y015805D01*
+X000700Y015884D02*
+X004519Y015884D01*
+X004501Y015962D02*
+X004264Y015962D01*
+X004349Y016041D02*
+X004501Y016041D01*
+X004516Y016119D02*
+X004405Y016119D01*
+X004437Y016198D02*
+X004548Y016198D01*
+X004607Y016276D02*
+X004449Y016276D01*
+X004323Y016669D02*
+X004214Y016669D01*
+X004244Y016747D02*
+X003289Y016747D01*
+X003297Y016727D02*
+X003234Y016880D01*
+X003117Y016997D01*
+X002963Y017061D01*
+X002797Y017061D01*
+X002644Y016997D01*
+X002527Y016880D01*
+X002463Y016727D01*
+X002463Y016561D01*
+X002527Y016407D01*
+X002644Y016290D01*
+X002797Y016226D01*
+X002963Y016226D01*
+X003117Y016290D01*
+X003234Y016407D01*
+X003297Y016561D01*
+X003297Y016727D01*
+X003297Y016669D02*
+X003886Y016669D01*
+X003771Y016590D02*
+X003297Y016590D01*
+X003277Y016512D02*
+X003704Y016512D01*
+X003671Y016433D02*
+X003245Y016433D01*
+X003181Y016355D02*
+X003651Y016355D01*
+X003651Y016276D02*
+X003083Y016276D01*
+X002678Y016276D02*
+X000700Y016276D01*
+X000700Y016198D02*
+X003663Y016198D01*
+X003695Y016119D02*
+X000700Y016119D01*
+X000700Y016041D02*
+X003751Y016041D01*
+X003836Y015962D02*
+X000700Y015962D01*
+X000700Y016355D02*
+X002579Y016355D01*
+X002516Y016433D02*
+X000700Y016433D01*
+X000700Y016512D02*
+X002483Y016512D01*
+X002463Y016590D02*
+X000700Y016590D01*
+X000700Y016669D02*
+X002463Y016669D01*
+X002472Y016747D02*
+X000700Y016747D01*
+X000700Y016826D02*
+X002504Y016826D01*
+X002551Y016904D02*
+X000700Y016904D01*
+X000700Y016983D02*
+X002629Y016983D01*
+X003131Y016983D02*
+X004151Y016983D01*
+X004151Y017061D02*
+X000700Y017061D01*
+X000700Y017140D02*
+X004174Y017140D01*
+X004207Y017218D02*
+X000700Y017218D01*
+X000700Y017297D02*
+X004278Y017297D01*
+X004401Y017375D02*
+X000700Y017375D01*
+X000700Y017454D02*
+X004800Y017454D01*
+X004706Y017375D02*
+X004699Y017375D01*
+X004160Y016904D02*
+X003210Y016904D01*
+X003256Y016826D02*
+X004193Y016826D01*
+X005200Y017454D02*
+X006201Y017454D01*
+X006201Y017532D02*
+X000700Y017532D01*
+X000700Y017611D02*
+X002782Y017611D01*
+X002623Y017689D02*
+X000700Y017689D01*
+X000700Y017768D02*
+X002544Y017768D01*
+X002501Y017846D02*
+X000700Y017846D01*
+X000700Y017925D02*
+X002469Y017925D01*
+X002463Y018003D02*
+X000700Y018003D01*
+X000700Y018082D02*
+X002463Y018082D01*
+X002486Y018160D02*
+X000700Y018160D01*
+X000700Y018239D02*
+X002519Y018239D01*
+X002586Y018317D02*
+X000700Y018317D01*
+X000700Y019024D02*
+X011823Y019024D01*
+X011836Y019102D02*
+X010740Y019102D01*
+X010839Y019181D02*
+X011868Y019181D01*
+X011901Y019259D02*
+X010900Y019259D01*
+X010933Y019338D02*
+X011966Y019338D01*
+X012044Y019416D02*
+X010949Y019416D01*
+X010949Y019495D02*
+X012194Y019495D01*
+X012606Y019495D02*
+X014194Y019495D01*
+X014044Y019416D02*
+X013526Y019416D01*
+X013440Y019416D02*
+X013360Y019416D01*
+X013360Y019338D02*
+X013440Y019338D01*
+X013440Y019259D02*
+X013360Y019259D01*
+X013360Y019181D02*
+X013440Y019181D01*
+X013440Y019102D02*
+X013360Y019102D01*
+X013360Y019024D02*
+X013440Y019024D01*
+X013440Y018867D02*
+X013360Y018867D01*
+X013360Y018788D02*
+X013440Y018788D01*
+X013440Y018710D02*
+X013360Y018710D01*
+X013360Y018631D02*
+X013440Y018631D01*
+X013440Y018553D02*
+X013360Y018553D01*
+X013142Y018553D02*
+X012814Y018553D01*
+X012891Y018631D02*
+X013049Y018631D01*
+X012989Y018710D02*
+X012923Y018710D01*
+X012932Y019181D02*
+X012979Y019181D01*
+X013031Y019259D02*
+X012899Y019259D01*
+X012834Y019338D02*
+X013114Y019338D01*
+X013274Y019416D02*
+X012756Y019416D01*
+X013686Y019338D02*
+X013966Y019338D01*
+X013901Y019259D02*
+X013769Y019259D01*
+X013821Y019181D02*
+X013868Y019181D01*
+X013877Y018710D02*
+X013811Y018710D01*
+X013751Y018631D02*
+X013909Y018631D01*
+X013986Y018553D02*
+X013658Y018553D01*
+X014558Y018396D02*
+X015242Y018396D01*
+X015064Y018474D02*
+X014736Y018474D01*
+X014814Y018553D02*
+X014986Y018553D01*
+X014909Y018631D02*
+X014891Y018631D01*
+X014899Y019259D02*
+X014901Y019259D01*
+X014966Y019338D02*
+X014834Y019338D01*
+X014756Y019416D02*
+X015044Y019416D01*
+X015194Y019495D02*
+X014606Y019495D01*
+X015606Y019495D02*
+X016194Y019495D01*
+X016044Y019416D02*
+X015756Y019416D01*
+X015834Y019338D02*
+X015966Y019338D01*
+X015901Y019259D02*
+X015899Y019259D01*
+X015891Y018631D02*
+X015909Y018631D01*
+X015986Y018553D02*
+X015814Y018553D01*
+X015736Y018474D02*
+X016064Y018474D01*
+X020070Y019573D02*
+X010933Y019573D01*
+X010738Y019809D02*
+X032200Y019809D01*
+X032200Y019887D02*
+X000700Y019887D01*
+X000700Y019809D02*
+X008712Y019809D01*
+X008674Y019793D02*
+X008562Y019681D01*
+X008501Y019534D01*
+X008501Y019376D01*
+X008562Y019229D01*
+X008674Y019117D01*
+X008821Y019056D01*
+X008979Y019056D01*
+X009126Y019117D01*
+X009238Y019229D01*
+X009299Y019376D01*
+X009299Y019534D01*
+X009238Y019681D01*
+X009126Y019793D01*
+X008979Y019854D01*
+X008821Y019854D01*
+X008674Y019793D01*
+X008611Y019730D02*
+X000700Y019730D01*
+X000700Y019652D02*
+X008550Y019652D01*
+X008517Y019573D02*
+X000700Y019573D01*
+X000700Y019495D02*
+X008501Y019495D01*
+X008501Y019416D02*
+X000700Y019416D01*
+X000700Y019338D02*
+X008517Y019338D01*
+X008550Y019259D02*
+X000700Y019259D01*
+X000700Y019181D02*
+X008611Y019181D01*
+X008710Y019102D02*
+X000700Y019102D01*
+X000700Y019966D02*
+X032200Y019966D01*
+X032200Y020044D02*
+X000700Y020044D01*
+X003259Y017846D02*
+X006502Y017846D01*
+X006349Y017768D02*
+X003216Y017768D01*
+X003138Y017689D02*
+X006270Y017689D01*
+X006233Y017611D02*
+X002978Y017611D01*
+X005294Y017375D02*
+X006202Y017375D01*
+X006234Y017297D02*
+X005352Y017297D01*
+X005385Y017218D02*
+X006273Y017218D01*
+X006352Y017140D02*
+X005399Y017140D01*
+X009090Y019102D02*
+X010360Y019102D01*
+X010261Y019181D02*
+X009189Y019181D01*
+X009250Y019259D02*
+X010200Y019259D01*
+X010167Y019338D02*
+X009283Y019338D01*
+X009299Y019416D02*
+X010151Y019416D01*
+X010151Y019495D02*
+X009299Y019495D01*
+X009283Y019573D02*
+X010167Y019573D01*
+X010200Y019652D02*
+X009250Y019652D01*
+X009189Y019730D02*
+X010261Y019730D01*
+X010362Y019809D02*
+X009088Y019809D01*
+X004391Y014471D02*
+X004148Y014471D01*
+X004227Y014392D02*
+X004273Y014392D01*
+X004249Y013843D02*
+X004151Y013843D01*
+X003998Y013764D02*
+X004331Y013764D01*
+X003802Y013764D02*
+X003398Y013764D01*
+X003551Y013843D02*
+X003649Y013843D01*
+X003202Y013764D02*
+X002748Y013764D01*
+X002901Y013843D02*
+X003049Y013843D01*
+X001132Y012587D02*
+X010209Y012587D01*
+X010176Y012665D02*
+X010001Y012665D01*
+X009799Y012665D02*
+X005451Y012665D01*
+X005602Y012744D02*
+X009648Y012744D01*
+X009569Y012822D02*
+X007831Y012822D01*
+X007909Y012901D02*
+X009532Y012901D01*
+X009501Y012979D02*
+X007959Y012979D01*
+X007991Y013058D02*
+X009501Y013058D01*
+X009502Y013136D02*
+X007999Y013136D01*
+X007999Y013215D02*
+X009534Y013215D01*
+X009574Y013293D02*
+X007974Y013293D01*
+X007942Y013372D02*
+X009653Y013372D01*
+X009812Y013450D02*
+X007869Y013450D01*
+X007460Y013529D02*
+X007190Y013529D01*
+X007319Y013450D02*
+X007331Y013450D01*
+X006708Y013372D02*
+X005597Y013372D01*
+X005676Y013293D02*
+X006676Y013293D01*
+X006651Y013215D02*
+X005716Y013215D01*
+X005748Y013136D02*
+X006651Y013136D01*
+X006659Y013058D02*
+X005749Y013058D01*
+X005749Y012979D02*
+X006691Y012979D01*
+X006741Y012901D02*
+X005718Y012901D01*
+X005681Y012822D02*
+X006819Y012822D01*
+X007281Y012822D02*
+X007369Y012822D01*
+X005607Y012351D02*
+X013382Y012351D01*
+X013461Y012430D02*
+X010686Y012430D01*
+X010817Y012508D02*
+X016646Y012508D01*
+X016555Y012587D02*
+X010891Y012587D01*
+X010924Y012665D02*
+X016497Y012665D01*
+X016465Y012744D02*
+X010949Y012744D01*
+X010949Y012822D02*
+X016451Y012822D01*
+X017054Y012508D02*
+X023883Y012508D01*
+X023838Y012587D02*
+X017145Y012587D01*
+X017203Y012665D02*
+X023806Y012665D01*
+X023801Y012744D02*
+X017235Y012744D01*
+X017249Y012822D02*
+X023801Y012822D01*
+X023829Y012901D02*
+X017249Y012901D01*
+X017230Y012979D02*
+X023861Y012979D01*
+X023939Y013058D02*
+X017198Y013058D01*
+X017133Y013136D02*
+X024078Y013136D01*
+X023648Y013293D02*
+X014449Y013293D01*
+X014449Y013372D02*
+X023570Y013372D01*
+X023533Y013450D02*
+X014422Y013450D01*
+X014389Y013529D02*
+X016663Y013529D01*
+X016584Y013607D02*
+X014312Y013607D01*
+X014173Y013686D02*
+X016539Y013686D01*
+X016506Y013764D02*
+X011873Y013764D01*
+X011914Y013843D02*
+X016501Y013843D01*
+X017024Y014235D02*
+X029860Y014235D01*
+X029862Y014229D02*
+X029974Y014117D01*
+X030121Y014056D01*
+X030279Y014056D01*
+X030426Y014117D01*
+X030538Y014229D01*
+X030599Y014376D01*
+X030599Y014534D01*
+X030538Y014681D01*
+X030426Y014793D01*
+X030279Y014854D01*
+X030121Y014854D01*
+X029974Y014793D01*
+X029862Y014681D01*
+X029801Y014534D01*
+X029801Y014376D01*
+X029862Y014229D01*
+X029827Y014314D02*
+X026047Y014314D01*
+X026201Y014392D02*
+X029801Y014392D01*
+X029801Y014471D02*
+X026279Y014471D01*
+X026317Y014549D02*
+X029807Y014549D01*
+X029840Y014628D02*
+X026349Y014628D01*
+X026349Y014706D02*
+X029887Y014706D01*
+X029966Y014785D02*
+X028143Y014785D01*
+X028222Y014863D02*
+X032200Y014863D01*
+X032200Y014785D02*
+X030434Y014785D01*
+X030513Y014706D02*
+X032200Y014706D01*
+X032200Y014628D02*
+X030560Y014628D01*
+X030593Y014549D02*
+X032200Y014549D01*
+X032200Y014471D02*
+X030599Y014471D01*
+X030599Y014392D02*
+X032200Y014392D01*
+X032200Y014314D02*
+X030573Y014314D01*
+X030540Y014235D02*
+X032200Y014235D01*
+X032200Y014157D02*
+X030465Y014157D01*
+X030332Y014078D02*
+X032200Y014078D01*
+X032200Y014000D02*
+X028901Y014000D01*
+X028934Y013921D02*
+X032200Y013921D01*
+X032200Y013843D02*
+X028949Y013843D01*
+X028949Y013764D02*
+X032200Y013764D01*
+X032200Y013686D02*
+X031433Y013686D01*
+X031512Y013607D02*
+X032200Y013607D01*
+X032200Y013529D02*
+X031560Y013529D01*
+X031592Y013450D02*
+X032200Y013450D01*
+X032200Y013372D02*
+X031599Y013372D01*
+X031599Y013293D02*
+X032200Y013293D01*
+X032200Y013215D02*
+X031573Y013215D01*
+X031541Y013136D02*
+X032200Y013136D01*
+X032200Y013058D02*
+X031466Y013058D01*
+X030840Y013529D02*
+X028837Y013529D01*
+X028900Y013607D02*
+X030888Y013607D01*
+X030967Y013686D02*
+X028932Y013686D01*
+X028841Y014078D02*
+X030068Y014078D01*
+X029935Y014157D02*
+X028743Y014157D01*
+X028357Y014157D02*
+X017162Y014157D01*
+X017239Y014078D02*
+X028259Y014078D01*
+X028199Y014000D02*
+X023989Y014000D01*
+X023811Y014000D02*
+X017272Y014000D01*
+X017299Y013921D02*
+X023652Y013921D01*
+X023574Y013843D02*
+X017299Y013843D01*
+X017294Y013764D02*
+X023534Y013764D01*
+X023502Y013686D02*
+X017261Y013686D01*
+X017216Y013607D02*
+X023501Y013607D01*
+X023501Y013529D02*
+X017137Y013529D01*
+X017447Y011723D02*
+X013820Y011723D01*
+X013960Y011802D02*
+X020565Y011802D01*
+X020735Y011802D02*
+X026640Y011802D01*
+X026562Y011880D02*
+X014038Y011880D01*
+X014071Y011959D02*
+X026529Y011959D01*
+X026501Y012037D02*
+X014099Y012037D01*
+X014099Y012116D02*
+X026501Y012116D01*
+X026505Y012194D02*
+X014095Y012194D01*
+X014062Y012273D02*
+X026538Y012273D01*
+X026582Y012351D02*
+X014018Y012351D01*
+X013939Y012430D02*
+X023962Y012430D01*
+X024438Y012430D02*
+X026661Y012430D01*
+X027262Y012273D02*
+X030095Y012273D01*
+X029975Y012194D02*
+X027295Y012194D01*
+X027299Y012116D02*
+X029906Y012116D01*
+X029873Y012037D02*
+X027299Y012037D01*
+X027271Y011959D02*
+X029851Y011959D01*
+X029851Y011880D02*
+X027238Y011880D01*
+X027160Y011802D02*
+X029861Y011802D01*
+X029894Y011723D02*
+X027020Y011723D01*
+X026780Y011723D02*
+X020896Y011723D01*
+X020974Y011645D02*
+X028128Y011645D01*
+X028047Y011566D02*
+X021015Y011566D01*
+X021047Y011488D02*
+X027994Y011488D01*
+X027961Y011409D02*
+X021287Y011409D01*
+X020717Y010938D02*
+X018006Y010938D01*
+X018038Y010860D02*
+X020749Y010860D01*
+X020810Y010781D02*
+X018049Y010781D01*
+X017952Y011017D02*
+X020546Y011017D01*
+X020396Y011095D02*
+X017904Y011095D01*
+X017956Y011174D02*
+X020318Y011174D01*
+X020282Y011252D02*
+X017989Y011252D01*
+X017999Y011331D02*
+X020251Y011331D01*
+X020251Y011409D02*
+X017999Y011409D01*
+X017977Y011488D02*
+X020253Y011488D01*
+X020285Y011566D02*
+X017944Y011566D01*
+X017874Y011645D02*
+X020326Y011645D01*
+X020404Y011723D02*
+X017753Y011723D01*
+X017326Y011645D02*
+X013153Y011645D01*
+X013206Y011723D02*
+X013580Y011723D01*
+X013720Y011566D02*
+X017256Y011566D01*
+X017223Y011488D02*
+X013831Y011488D01*
+X013897Y011409D02*
+X017201Y011409D01*
+X017201Y011331D02*
+X013930Y011331D01*
+X013949Y011252D02*
+X017211Y011252D01*
+X017244Y011174D02*
+X013949Y011174D01*
+X013936Y011095D02*
+X017296Y011095D01*
+X017348Y011017D02*
+X013904Y011017D01*
+X013847Y010938D02*
+X017294Y010938D01*
+X017262Y010860D02*
+X013758Y010860D01*
+X013342Y010860D02*
+X010618Y010860D01*
+X010662Y010938D02*
+X013253Y010938D01*
+X013196Y011017D02*
+X010695Y011017D01*
+X010699Y011095D02*
+X013164Y011095D01*
+X013151Y011174D02*
+X010699Y011174D01*
+X010671Y011252D02*
+X013151Y011252D01*
+X013170Y011331D02*
+X010638Y011331D01*
+X010540Y010781D02*
+X017251Y010781D01*
+X017251Y010703D02*
+X009250Y010703D01*
+X009282Y010624D02*
+X012599Y010624D01*
+X012477Y010546D02*
+X012249Y010546D01*
+X012402Y010467D02*
+X012406Y010467D01*
+X012051Y010546D02*
+X009299Y010546D01*
+X009299Y010467D02*
+X009482Y010467D01*
+X009370Y010389D02*
+X009283Y010389D01*
+X009303Y010310D02*
+X009251Y010310D01*
+X009271Y010232D02*
+X009190Y010232D01*
+X009251Y010153D02*
+X009092Y010153D01*
+X009296Y009918D02*
+X008276Y009918D01*
+X007824Y009918D02*
+X006776Y009918D01*
+X006855Y009996D02*
+X007745Y009996D01*
+X007693Y010075D02*
+X006907Y010075D01*
+X006939Y010153D02*
+X007661Y010153D01*
+X007651Y010232D02*
+X006949Y010232D01*
+X006949Y010310D02*
+X007651Y010310D01*
+X007674Y010389D02*
+X006926Y010389D01*
+X006894Y010467D02*
+X007706Y010467D01*
+X007777Y010546D02*
+X006823Y010546D01*
+X006701Y010624D02*
+X007899Y010624D01*
+X009137Y009682D02*
+X021101Y009682D01*
+X021101Y009604D02*
+X021030Y009604D01*
+X021133Y009761D02*
+X012240Y009761D01*
+X012398Y009839D02*
+X021170Y009839D01*
+X021249Y009918D02*
+X012976Y009918D01*
+X012524Y009918D02*
+X012476Y009918D01*
+X012060Y009761D02*
+X009860Y009761D01*
+X009948Y009839D02*
+X011902Y009839D01*
+X011824Y009918D02*
+X010004Y009918D01*
+X010036Y009996D02*
+X011784Y009996D01*
+X011752Y010075D02*
+X010049Y010075D01*
+X010049Y010153D02*
+X011751Y010153D01*
+X011751Y010232D02*
+X010029Y010232D01*
+X009997Y010310D02*
+X011783Y010310D01*
+X011820Y010389D02*
+X009930Y010389D01*
+X009818Y010467D02*
+X011898Y010467D01*
+X012901Y010624D02*
+X017273Y010624D01*
+X017305Y010546D02*
+X013023Y010546D01*
+X013094Y010467D02*
+X017374Y010467D01*
+X016676Y008893D02*
+X016529Y008954D01*
+X016371Y008954D01*
+X016224Y008893D01*
+X016189Y008858D01*
+X016079Y008904D01*
+X015921Y008904D01*
+X015774Y008843D01*
+X015662Y008731D01*
+X015601Y008584D01*
+X015601Y008426D01*
+X013743Y008426D01*
+X013788Y008381D02*
+X013676Y008493D01*
+X013529Y008554D01*
+X013491Y008554D01*
+X013438Y008681D01*
+X013326Y008793D01*
+X013179Y008854D01*
+X013021Y008854D01*
+X012874Y008793D01*
+X012762Y008681D01*
+X012701Y008534D01*
+X012701Y008376D01*
+X012762Y008229D01*
+X012874Y008117D01*
+X013021Y008056D01*
+X013059Y008056D01*
+X013112Y007929D01*
+X013224Y007817D01*
+X013371Y007756D01*
+X013529Y007756D01*
+X013676Y007817D01*
+X013788Y007929D01*
+X013849Y008076D01*
+X013849Y008234D01*
+X013788Y008381D01*
+X013802Y008348D02*
+X015634Y008348D01*
+X015662Y008279D02*
+X015774Y008167D01*
+X015921Y008106D01*
+X016079Y008106D01*
+X016226Y008167D01*
+X016261Y008202D01*
+X016371Y008156D01*
+X016529Y008156D01*
+X016533Y008158D01*
+X016624Y008067D01*
+X016771Y008006D01*
+X016929Y008006D01*
+X017076Y008067D01*
+X017188Y008179D01*
+X017249Y008326D01*
+X017249Y008484D01*
+X017188Y008631D01*
+X017076Y008743D01*
+X016929Y008804D01*
+X016771Y008804D01*
+X016767Y008802D01*
+X016676Y008893D01*
+X016666Y008897D02*
+X017394Y008897D01*
+X017473Y008819D02*
+X016750Y008819D01*
+X017079Y008740D02*
+X023451Y008740D01*
+X023537Y008662D02*
+X017157Y008662D01*
+X017208Y008583D02*
+X024471Y008583D01*
+X024336Y008505D02*
+X023348Y008505D01*
+X023376Y008493D02*
+X023229Y008554D01*
+X023071Y008554D01*
+X022924Y008493D01*
+X022812Y008381D01*
+X022780Y008304D01*
+X022721Y008304D01*
+X022574Y008243D01*
+X022462Y008131D01*
+X022401Y007984D01*
+X022401Y007826D01*
+X022462Y007679D01*
+X022574Y007567D01*
+X022721Y007506D01*
+X022879Y007506D01*
+X023026Y007567D01*
+X023138Y007679D01*
+X023170Y007756D01*
+X023229Y007756D01*
+X023376Y007817D01*
+X023488Y007929D01*
+X023549Y008076D01*
+X023549Y008234D01*
+X023488Y008381D01*
+X023376Y008493D01*
+X023443Y008426D02*
+X024260Y008426D01*
+X024227Y008348D02*
+X023502Y008348D01*
+X023534Y008269D02*
+X024201Y008269D01*
+X024201Y008191D02*
+X023549Y008191D01*
+X023549Y008112D02*
+X024207Y008112D01*
+X024239Y008034D02*
+X023531Y008034D01*
+X023499Y007955D02*
+X024286Y007955D01*
+X024365Y007877D02*
+X023435Y007877D01*
+X023330Y007798D02*
+X024357Y007798D01*
+X024201Y007720D02*
+X023155Y007720D01*
+X023100Y007641D02*
+X024122Y007641D01*
+X024084Y007563D02*
+X023015Y007563D01*
+X022585Y007563D02*
+X021815Y007563D01*
+X021826Y007567D02*
+X021938Y007679D01*
+X021999Y007826D01*
+X021999Y007984D01*
+X021938Y008131D01*
+X021826Y008243D01*
+X021679Y008304D01*
+X021521Y008304D01*
+X021374Y008243D01*
+X021262Y008131D01*
+X021201Y007984D01*
+X021201Y007826D01*
+X021262Y007679D01*
+X021374Y007567D01*
+X021521Y007506D01*
+X021679Y007506D01*
+X021826Y007567D01*
+X021900Y007641D02*
+X022500Y007641D01*
+X022445Y007720D02*
+X021955Y007720D01*
+X021987Y007798D02*
+X022413Y007798D01*
+X022401Y007877D02*
+X021999Y007877D01*
+X021999Y007955D02*
+X022401Y007955D01*
+X022422Y008034D02*
+X021978Y008034D01*
+X021946Y008112D02*
+X022454Y008112D01*
+X022522Y008191D02*
+X021878Y008191D01*
+X021763Y008269D02*
+X022637Y008269D01*
+X022798Y008348D02*
+X017249Y008348D01*
+X017249Y008426D02*
+X022857Y008426D01*
+X022952Y008505D02*
+X017240Y008505D01*
+X017225Y008269D02*
+X021437Y008269D01*
+X021322Y008191D02*
+X017193Y008191D01*
+X017121Y008112D02*
+X021254Y008112D01*
+X021222Y008034D02*
+X016995Y008034D01*
+X016705Y008034D02*
+X013831Y008034D01*
+X013849Y008112D02*
+X015907Y008112D01*
+X015751Y008191D02*
+X013849Y008191D01*
+X013834Y008269D02*
+X015672Y008269D01*
+X015662Y008279D02*
+X015601Y008426D01*
+X015601Y008505D02*
+X013648Y008505D01*
+X013479Y008583D02*
+X015601Y008583D01*
+X015633Y008662D02*
+X013446Y008662D01*
+X013379Y008740D02*
+X015671Y008740D01*
+X015750Y008819D02*
+X013264Y008819D01*
+X012936Y008819D02*
+X011000Y008819D01*
+X010976Y008843D02*
+X010829Y008904D01*
+X010671Y008904D01*
+X010524Y008843D01*
+X010412Y008731D01*
+X010351Y008584D01*
+X010351Y008426D01*
+X005696Y008426D01*
+X005629Y008454D02*
+X005776Y008393D01*
+X005888Y008281D01*
+X005949Y008134D01*
+X005949Y007976D01*
+X005888Y007829D01*
+X005776Y007717D01*
+X005629Y007656D01*
+X005471Y007656D01*
+X005324Y007717D01*
+X005212Y007829D01*
+X005151Y007976D01*
+X005151Y008134D01*
+X005212Y008281D01*
+X005324Y008393D01*
+X005471Y008454D01*
+X005629Y008454D01*
+X005821Y008348D02*
+X010384Y008348D01*
+X010412Y008279D02*
+X010524Y008167D01*
+X010671Y008106D01*
+X010829Y008106D01*
+X010976Y008167D01*
+X011088Y008279D01*
+X011149Y008426D01*
+X012701Y008426D01*
+X012701Y008505D02*
+X011149Y008505D01*
+X011149Y008583D02*
+X012721Y008583D01*
+X012754Y008662D02*
+X011117Y008662D01*
+X011088Y008731D02*
+X010976Y008843D01*
+X010846Y008897D02*
+X015904Y008897D01*
+X016096Y008897D02*
+X016234Y008897D01*
+X016249Y008191D02*
+X016288Y008191D01*
+X016093Y008112D02*
+X016579Y008112D01*
+X016579Y007804D02*
+X016421Y007804D01*
+X016274Y007743D01*
+X016162Y007631D01*
+X016101Y007484D01*
+X004061Y007484D01*
+X004038Y007429D02*
+X004099Y007576D01*
+X004099Y007734D01*
+X004038Y007881D01*
+X003926Y007993D01*
+X003779Y008054D01*
+X003621Y008054D01*
+X003474Y007993D01*
+X003362Y007881D01*
+X003301Y007734D01*
+X003301Y007576D01*
+X003362Y007429D01*
+X003474Y007317D01*
+X003621Y007256D01*
+X003779Y007256D01*
+X003926Y007317D01*
+X004038Y007429D01*
+X004014Y007406D02*
+X016101Y007406D01*
+X016101Y007484D02*
+X016101Y007326D01*
+X016162Y007179D01*
+X016274Y007067D01*
+X016421Y007006D01*
+X016579Y007006D01*
+X016726Y007067D01*
+X016838Y007179D01*
+X016899Y007326D01*
+X016899Y007484D01*
+X018715Y007484D01*
+X018637Y007406D02*
+X016899Y007406D01*
+X016899Y007484D02*
+X016838Y007631D01*
+X016726Y007743D01*
+X016579Y007804D01*
+X016593Y007798D02*
+X021213Y007798D01*
+X021201Y007877D02*
+X013735Y007877D01*
+X013799Y007955D02*
+X021201Y007955D01*
+X021245Y007720D02*
+X016749Y007720D01*
+X016828Y007641D02*
+X021300Y007641D01*
+X021385Y007563D02*
+X016866Y007563D01*
+X016899Y007327D02*
+X018590Y007327D01*
+X018557Y007249D02*
+X016867Y007249D01*
+X016829Y007170D02*
+X018551Y007170D01*
+X018551Y007092D02*
+X016750Y007092D01*
+X016596Y007013D02*
+X018577Y007013D01*
+X018610Y006935D02*
+X017984Y006935D01*
+X018063Y006856D02*
+X018685Y006856D01*
+X018819Y006778D02*
+X018110Y006778D01*
+X017516Y006935D02*
+X015149Y006935D01*
+X015149Y006984D02*
+X015088Y007131D01*
+X014976Y007243D01*
+X014829Y007304D01*
+X014671Y007304D01*
+X014524Y007243D01*
+X014412Y007131D01*
+X014351Y006984D01*
+X014351Y006826D01*
+X014401Y006705D01*
+X014361Y006608D01*
+X014326Y006643D01*
+X014179Y006704D01*
+X014021Y006704D01*
+X013874Y006643D01*
+X013800Y006569D01*
+X013776Y006593D01*
+X013629Y006654D01*
+X013471Y006654D01*
+X013445Y006643D01*
+X013388Y006781D01*
+X013276Y006893D01*
+X013129Y006954D01*
+X012971Y006954D01*
+X012824Y006893D01*
+X012712Y006781D01*
+X012651Y006634D01*
+X012651Y006476D01*
+X012712Y006329D01*
+X012824Y006217D01*
+X012971Y006156D01*
+X013129Y006156D01*
+X013155Y006167D01*
+X013212Y006029D01*
+X013324Y005917D01*
+X013471Y005856D01*
+X013629Y005856D01*
+X013776Y005917D01*
+X013850Y005991D01*
+X013874Y005967D01*
+X014021Y005906D01*
+X014179Y005906D01*
+X014326Y005967D01*
+X014438Y006079D01*
+X014489Y006202D01*
+X014524Y006167D01*
+X014671Y006106D01*
+X014829Y006106D01*
+X014976Y006167D01*
+X015088Y006279D01*
+X015149Y006426D01*
+X015149Y006584D01*
+X015099Y006705D01*
+X015149Y006826D01*
+X015149Y006984D01*
+X015137Y007013D02*
+X016404Y007013D01*
+X016250Y007092D02*
+X015104Y007092D01*
+X015049Y007170D02*
+X016171Y007170D01*
+X016133Y007249D02*
+X014963Y007249D01*
+X014537Y007249D02*
+X002051Y007249D01*
+X002038Y007281D02*
+X001926Y007393D01*
+X001779Y007454D01*
+X001621Y007454D01*
+X001474Y007393D01*
+X001362Y007281D01*
+X001301Y007134D01*
+X001301Y006976D01*
+X001362Y006829D01*
+X001474Y006717D01*
+X001621Y006656D01*
+X001779Y006656D01*
+X001926Y006717D01*
+X002038Y006829D01*
+X002099Y006976D01*
+X002099Y007134D01*
+X002038Y007281D01*
+X001992Y007327D02*
+X003464Y007327D01*
+X003386Y007406D02*
+X001896Y007406D01*
+X002084Y007170D02*
+X014451Y007170D01*
+X014396Y007092D02*
+X002099Y007092D01*
+X002099Y007013D02*
+X014363Y007013D01*
+X014351Y006935D02*
+X013176Y006935D01*
+X013313Y006856D02*
+X014351Y006856D01*
+X014371Y006778D02*
+X013389Y006778D01*
+X013422Y006699D02*
+X014009Y006699D01*
+X013852Y006621D02*
+X013710Y006621D01*
+X014191Y006699D02*
+X014399Y006699D01*
+X014366Y006621D02*
+X014348Y006621D01*
+X015101Y006699D02*
+X017357Y006699D01*
+X017351Y006621D02*
+X016260Y006621D01*
+X016377Y006542D02*
+X017351Y006542D01*
+X017377Y006464D02*
+X016445Y006464D01*
+X016478Y006385D02*
+X017410Y006385D01*
+X017485Y006307D02*
+X016499Y006307D01*
+X016691Y006228D02*
+X016959Y006228D01*
+X016831Y006150D02*
+X016769Y006150D01*
+X017499Y005914D02*
+X022095Y005914D01*
+X022017Y005836D02*
+X017499Y005836D01*
+X017491Y005757D02*
+X021981Y005757D01*
+X021951Y005679D02*
+X017458Y005679D01*
+X017409Y005600D02*
+X020491Y005600D01*
+X020403Y005522D02*
+X017330Y005522D01*
+X017276Y005293D02*
+X017129Y005354D01*
+X016971Y005354D01*
+X016824Y005293D01*
+X016712Y005181D01*
+X016651Y005034D01*
+X016651Y004876D01*
+X016712Y004729D01*
+X016824Y004617D01*
+X016971Y004556D01*
+X017129Y004556D01*
+X017276Y004617D01*
+X017388Y004729D01*
+X017449Y004876D01*
+X017449Y005034D01*
+X017388Y005181D01*
+X017276Y005293D01*
+X017283Y005286D02*
+X020301Y005286D01*
+X020301Y005208D02*
+X017361Y005208D01*
+X017410Y005129D02*
+X020321Y005129D01*
+X020353Y005051D02*
+X017442Y005051D01*
+X017449Y004972D02*
+X020419Y004972D01*
+X020396Y004894D02*
+X017449Y004894D01*
+X017424Y004815D02*
+X020246Y004815D01*
+X020168Y004737D02*
+X017391Y004737D01*
+X017317Y004658D02*
+X020132Y004658D01*
+X020101Y004580D02*
+X017989Y004580D01*
+X017976Y004593D02*
+X018088Y004481D01*
+X018149Y004334D01*
+X018149Y004176D01*
+X018088Y004029D01*
+X017976Y003917D01*
+X017829Y003856D01*
+X017671Y003856D01*
+X017524Y003917D01*
+X017412Y004029D01*
+X017351Y004176D01*
+X017351Y004334D01*
+X017412Y004481D01*
+X017524Y004593D01*
+X017671Y004654D01*
+X017829Y004654D01*
+X017976Y004593D01*
+X018068Y004501D02*
+X020101Y004501D01*
+X020103Y004423D02*
+X018112Y004423D01*
+X018145Y004344D02*
+X020135Y004344D01*
+X020176Y004266D02*
+X018149Y004266D01*
+X018149Y004187D02*
+X020254Y004187D01*
+X020415Y004109D02*
+X018121Y004109D01*
+X018088Y004030D02*
+X018163Y004030D01*
+X018221Y004054D02*
+X018074Y003993D01*
+X017962Y003881D01*
+X017901Y003734D01*
+X017901Y003576D01*
+X017962Y003429D01*
+X018074Y003317D01*
+X018221Y003256D01*
+X018379Y003256D01*
+X018526Y003317D01*
+X018638Y003429D01*
+X018699Y003576D01*
+X018699Y003734D01*
+X018638Y003881D01*
+X018526Y003993D01*
+X018379Y004054D01*
+X018221Y004054D01*
+X018033Y003952D02*
+X018010Y003952D01*
+X017959Y003873D02*
+X017870Y003873D01*
+X017926Y003795D02*
+X016703Y003795D01*
+X016738Y003829D02*
+X016626Y003717D01*
+X016479Y003656D01*
+X016321Y003656D01*
+X016174Y003717D01*
+X016062Y003829D01*
+X016001Y003976D01*
+X016001Y004134D01*
+X016062Y004281D01*
+X016174Y004393D01*
+X016321Y004454D01*
+X016479Y004454D01*
+X016626Y004393D01*
+X016738Y004281D01*
+X016799Y004134D01*
+X016799Y003976D01*
+X016738Y003829D01*
+X016756Y003873D02*
+X017630Y003873D01*
+X017490Y003952D02*
+X016789Y003952D01*
+X016799Y004030D02*
+X017412Y004030D01*
+X017379Y004109D02*
+X016799Y004109D01*
+X016777Y004187D02*
+X017351Y004187D01*
+X017351Y004266D02*
+X016744Y004266D01*
+X016675Y004344D02*
+X017355Y004344D01*
+X017388Y004423D02*
+X016555Y004423D01*
+X016245Y004423D02*
+X013733Y004423D01*
+X013749Y004384D02*
+X013688Y004531D01*
+X013576Y004643D01*
+X013429Y004704D01*
+X013271Y004704D01*
+X013124Y004643D01*
+X013012Y004531D01*
+X012951Y004384D01*
+X012951Y004226D01*
+X013012Y004079D01*
+X013124Y003967D01*
+X013271Y003906D01*
+X013429Y003906D01*
+X013576Y003967D01*
+X013688Y004079D01*
+X013749Y004226D01*
+X013749Y004384D01*
+X013749Y004344D02*
+X016125Y004344D01*
+X016056Y004266D02*
+X013749Y004266D01*
+X013733Y004187D02*
+X016023Y004187D01*
+X016001Y004109D02*
+X013700Y004109D01*
+X013639Y004030D02*
+X016001Y004030D01*
+X016011Y003952D02*
+X013539Y003952D01*
+X013161Y003952D02*
+X012189Y003952D01*
+X012226Y003967D02*
+X012338Y004079D01*
+X012399Y004226D01*
+X012399Y004384D01*
+X012338Y004531D01*
+X012226Y004643D01*
+X012079Y004704D01*
+X011921Y004704D01*
+X011775Y004643D01*
+X011629Y004704D01*
+X011471Y004704D01*
+X011324Y004643D01*
+X011212Y004531D01*
+X011151Y004384D01*
+X011151Y004226D01*
+X011212Y004079D01*
+X011324Y003967D01*
+X011471Y003906D01*
+X011629Y003906D01*
+X011775Y003967D01*
+X011921Y003906D01*
+X012079Y003906D01*
+X012226Y003967D01*
+X012289Y004030D02*
+X013061Y004030D01*
+X013000Y004109D02*
+X012350Y004109D01*
+X012383Y004187D02*
+X012967Y004187D01*
+X012951Y004266D02*
+X012399Y004266D01*
+X012399Y004344D02*
+X012951Y004344D01*
+X012967Y004423D02*
+X012383Y004423D01*
+X012350Y004501D02*
+X013000Y004501D01*
+X013061Y004580D02*
+X012289Y004580D01*
+X012190Y004658D02*
+X013160Y004658D01*
+X013540Y004658D02*
+X016783Y004658D01*
+X016709Y004737D02*
+X009152Y004737D01*
+X009079Y004706D02*
+X009226Y004767D01*
+X009338Y004879D01*
+X009399Y005026D01*
+X009399Y005184D01*
+X009339Y005330D01*
+X009388Y005379D01*
+X009449Y005526D01*
+X009449Y005684D01*
+X009388Y005831D01*
+X009276Y005943D01*
+X009129Y006004D01*
+X008971Y006004D01*
+X008824Y005943D01*
+X008712Y005831D01*
+X008651Y005684D01*
+X008651Y005526D01*
+X008711Y005380D01*
+X008662Y005331D01*
+X008601Y005184D01*
+X008601Y005026D01*
+X008662Y004879D01*
+X008774Y004767D01*
+X008921Y004706D01*
+X009079Y004706D01*
+X009274Y004815D02*
+X016676Y004815D01*
+X016651Y004894D02*
+X009344Y004894D01*
+X009377Y004972D02*
+X016651Y004972D01*
+X016658Y005051D02*
+X009399Y005051D01*
+X009399Y005129D02*
+X013716Y005129D01*
+X013771Y005106D02*
+X013929Y005106D01*
+X014076Y005167D01*
+X014188Y005279D01*
+X014249Y005426D01*
+X014249Y005584D01*
+X014188Y005731D01*
+X014076Y005843D01*
+X013929Y005904D01*
+X013771Y005904D01*
+X013624Y005843D01*
+X013512Y005731D01*
+X013451Y005584D01*
+X013451Y005426D01*
+X013512Y005279D01*
+X013624Y005167D01*
+X013771Y005106D01*
+X013584Y005208D02*
+X009389Y005208D01*
+X009357Y005286D02*
+X013509Y005286D01*
+X013477Y005365D02*
+X009373Y005365D01*
+X009414Y005443D02*
+X013451Y005443D01*
+X013451Y005522D02*
+X009447Y005522D01*
+X009449Y005600D02*
+X013458Y005600D01*
+X013490Y005679D02*
+X009449Y005679D01*
+X009419Y005757D02*
+X013538Y005757D01*
+X013617Y005836D02*
+X009383Y005836D01*
+X009305Y005914D02*
+X013331Y005914D01*
+X013249Y005993D02*
+X009156Y005993D01*
+X008944Y005993D02*
+X008454Y005993D01*
+X008438Y006031D02*
+X008326Y006143D01*
+X008179Y006204D01*
+X008021Y006204D01*
+X007874Y006143D01*
+X007762Y006031D01*
+X007701Y005884D01*
+X007701Y005726D01*
+X007762Y005579D01*
+X007874Y005467D01*
+X008021Y005406D01*
+X008179Y005406D01*
+X008326Y005467D01*
+X008438Y005579D01*
+X008499Y005726D01*
+X008499Y005884D01*
+X008438Y006031D01*
+X008398Y006071D02*
+X013195Y006071D01*
+X013162Y006150D02*
+X008310Y006150D01*
+X008486Y005914D02*
+X008795Y005914D01*
+X008717Y005836D02*
+X008499Y005836D01*
+X008499Y005757D02*
+X008681Y005757D01*
+X008651Y005679D02*
+X008479Y005679D01*
+X008447Y005600D02*
+X008651Y005600D01*
+X008653Y005522D02*
+X008380Y005522D01*
+X008268Y005443D02*
+X008686Y005443D01*
+X008696Y005365D02*
+X008054Y005365D01*
+X008026Y005393D02*
+X007879Y005454D01*
+X007721Y005454D01*
+X007574Y005393D01*
+X007462Y005281D01*
+X007401Y005134D01*
+X007401Y004976D01*
+X007462Y004829D01*
+X007574Y004717D01*
+X007721Y004656D01*
+X007879Y004656D01*
+X008026Y004717D01*
+X008138Y004829D01*
+X008199Y004976D01*
+X008199Y005134D01*
+X008138Y005281D01*
+X008026Y005393D01*
+X007932Y005443D02*
+X007905Y005443D01*
+X007820Y005522D02*
+X006213Y005522D01*
+X006188Y005581D02*
+X006249Y005434D01*
+X006249Y005276D01*
+X006188Y005129D01*
+X006320Y005129D01*
+X006301Y005084D02*
+X006301Y004926D01*
+X006362Y004779D01*
+X006426Y004715D01*
+X006374Y004693D01*
+X006262Y004581D01*
+X006201Y004434D01*
+X006201Y004276D01*
+X006262Y004129D01*
+X006374Y004017D01*
+X006521Y003956D01*
+X006679Y003956D01*
+X006826Y004017D01*
+X006938Y004129D01*
+X006999Y004276D01*
+X006999Y004434D01*
+X006938Y004581D01*
+X006874Y004645D01*
+X006926Y004667D01*
+X007038Y004779D01*
+X007099Y004926D01*
+X007099Y005084D01*
+X007038Y005231D01*
+X006926Y005343D01*
+X006779Y005404D01*
+X006621Y005404D01*
+X006474Y005343D01*
+X006362Y005231D01*
+X006301Y005084D01*
+X006301Y005051D02*
+X006218Y005051D01*
+X006238Y005031D02*
+X006164Y005105D01*
+X006188Y005129D01*
+X006221Y005208D02*
+X006352Y005208D01*
+X006417Y005286D02*
+X006249Y005286D01*
+X006249Y005365D02*
+X006526Y005365D01*
+X006245Y005443D02*
+X007695Y005443D01*
+X007753Y005600D02*
+X006169Y005600D01*
+X006188Y005581D02*
+X006076Y005693D01*
+X005929Y005754D01*
+X005771Y005754D01*
+X005624Y005693D01*
+X005512Y005581D01*
+X005451Y005434D01*
+X005451Y005276D01*
+X005512Y005129D01*
+X000700Y005129D01*
+X000700Y005051D02*
+X005582Y005051D01*
+X005586Y005055D02*
+X005562Y005031D01*
+X005501Y004884D01*
+X005501Y004726D01*
+X005562Y004579D01*
+X005674Y004467D01*
+X005821Y004406D01*
+X005979Y004406D01*
+X006126Y004467D01*
+X006238Y004579D01*
+X006299Y004726D01*
+X006299Y004884D01*
+X006238Y005031D01*
+X006262Y004972D02*
+X006301Y004972D01*
+X006295Y004894D02*
+X006315Y004894D01*
+X006299Y004815D02*
+X006347Y004815D01*
+X006299Y004737D02*
+X006405Y004737D01*
+X006339Y004658D02*
+X006271Y004658D01*
+X006261Y004580D02*
+X006238Y004580D01*
+X006229Y004501D02*
+X006160Y004501D01*
+X006201Y004423D02*
+X006019Y004423D01*
+X006201Y004344D02*
+X000700Y004344D01*
+X000700Y004266D02*
+X006205Y004266D01*
+X006238Y004187D02*
+X002532Y004187D01*
+X002526Y004193D02*
+X002379Y004254D01*
+X002221Y004254D01*
+X002074Y004193D01*
+X001962Y004081D01*
+X001901Y003934D01*
+X001901Y003776D01*
+X001962Y003629D01*
+X002074Y003517D01*
+X002221Y003456D01*
+X002379Y003456D01*
+X002526Y003517D01*
+X002638Y003629D01*
+X002699Y003776D01*
+X002699Y003934D01*
+X002638Y004081D01*
+X002526Y004193D01*
+X002610Y004109D02*
+X006283Y004109D01*
+X006361Y004030D02*
+X002659Y004030D01*
+X002692Y003952D02*
+X004095Y003952D01*
+X004074Y003943D02*
+X003962Y003831D01*
+X003901Y003684D01*
+X003901Y003526D01*
+X003962Y003379D01*
+X004074Y003267D01*
+X004221Y003206D01*
+X004379Y003206D01*
+X004526Y003267D01*
+X004638Y003379D01*
+X004699Y003526D01*
+X004699Y003684D01*
+X004638Y003831D01*
+X004526Y003943D01*
+X004379Y004004D01*
+X004221Y004004D01*
+X004074Y003943D01*
+X004004Y003873D02*
+X002699Y003873D01*
+X002699Y003795D02*
+X003947Y003795D01*
+X003914Y003716D02*
+X002674Y003716D01*
+X002642Y003638D02*
+X003901Y003638D01*
+X003901Y003559D02*
+X002568Y003559D01*
+X002438Y003481D02*
+X003920Y003481D01*
+X003952Y003402D02*
+X000700Y003402D01*
+X000700Y003324D02*
+X004018Y003324D01*
+X004127Y003245D02*
+X000700Y003245D01*
+X000700Y003167D02*
+X009346Y003167D01*
+X009362Y003129D02*
+X009301Y003276D01*
+X009301Y003434D01*
+X009362Y003581D01*
+X009474Y003693D01*
+X009621Y003754D01*
+X009779Y003754D01*
+X009926Y003693D01*
+X010000Y003619D01*
+X010024Y003643D01*
+X010171Y003704D01*
+X010329Y003704D01*
+X010476Y003643D01*
+X010588Y003531D01*
+X010649Y003384D01*
+X010649Y003226D01*
+X010588Y003079D01*
+X010476Y002967D01*
+X010329Y002906D01*
+X010171Y002906D01*
+X010024Y002967D01*
+X009950Y003041D01*
+X009926Y003017D01*
+X009779Y002956D01*
+X009621Y002956D01*
+X009474Y003017D01*
+X009362Y003129D01*
+X009403Y003088D02*
+X000700Y003088D01*
+X000700Y003010D02*
+X009492Y003010D01*
+X009314Y003245D02*
+X004473Y003245D01*
+X004582Y003324D02*
+X009301Y003324D01*
+X009301Y003402D02*
+X004648Y003402D01*
+X004680Y003481D02*
+X009320Y003481D01*
+X009353Y003559D02*
+X008236Y003559D01*
+X008229Y003556D02*
+X008376Y003617D01*
+X008488Y003729D01*
+X008549Y003876D01*
+X008549Y004034D01*
+X008488Y004181D01*
+X008376Y004293D01*
+X008229Y004354D01*
+X008071Y004354D01*
+X007924Y004293D01*
+X007812Y004181D01*
+X007751Y004034D01*
+X007751Y003876D01*
+X007812Y003729D01*
+X007924Y003617D01*
+X008071Y003556D01*
+X008229Y003556D01*
+X008064Y003559D02*
+X004699Y003559D01*
+X004699Y003638D02*
+X007904Y003638D01*
+X007825Y003716D02*
+X004686Y003716D01*
+X004653Y003795D02*
+X007785Y003795D01*
+X007752Y003873D02*
+X004596Y003873D01*
+X004505Y003952D02*
+X007751Y003952D01*
+X007751Y004030D02*
+X006839Y004030D01*
+X006917Y004109D02*
+X007782Y004109D01*
+X007818Y004187D02*
+X006962Y004187D01*
+X006995Y004266D02*
+X007897Y004266D01*
+X008047Y004344D02*
+X006999Y004344D01*
+X006999Y004423D02*
+X011167Y004423D01*
+X011151Y004344D02*
+X008253Y004344D01*
+X008403Y004266D02*
+X011151Y004266D01*
+X011167Y004187D02*
+X008482Y004187D01*
+X008518Y004109D02*
+X011200Y004109D01*
+X011261Y004030D02*
+X008549Y004030D01*
+X008549Y003952D02*
+X011361Y003952D01*
+X011739Y003952D02*
+X011811Y003952D01*
+X012262Y003531D02*
+X012201Y003384D01*
+X012201Y003226D01*
+X012262Y003079D01*
+X012374Y002967D01*
+X012521Y002906D01*
+X012679Y002906D01*
+X012826Y002967D01*
+X012938Y003079D01*
+X012999Y003226D01*
+X012999Y003384D01*
+X012938Y003531D01*
+X012826Y003643D01*
+X012679Y003704D01*
+X012521Y003704D01*
+X012374Y003643D01*
+X012262Y003531D01*
+X012290Y003559D02*
+X010560Y003559D01*
+X010609Y003481D02*
+X012241Y003481D01*
+X012209Y003402D02*
+X010641Y003402D01*
+X010649Y003324D02*
+X012201Y003324D01*
+X012201Y003245D02*
+X010649Y003245D01*
+X010624Y003167D02*
+X012226Y003167D01*
+X012258Y003088D02*
+X010592Y003088D01*
+X010518Y003010D02*
+X012332Y003010D01*
+X012461Y002931D02*
+X011534Y002931D01*
+X011479Y002954D02*
+X011321Y002954D01*
+X011174Y002893D01*
+X011062Y002781D01*
+X011001Y002634D01*
+X011001Y002476D01*
+X011062Y002329D01*
+X011174Y002217D01*
+X011321Y002156D01*
+X011479Y002156D01*
+X011626Y002217D01*
+X011738Y002329D01*
+X011799Y002476D01*
+X011799Y002634D01*
+X011738Y002781D01*
+X011626Y002893D01*
+X011479Y002954D01*
+X011666Y002853D02*
+X013701Y002853D01*
+X013701Y002826D02*
+X013762Y002679D01*
+X013874Y002567D01*
+X014021Y002506D01*
+X014179Y002506D01*
+X014326Y002567D01*
+X014438Y002679D01*
+X014499Y002826D01*
+X014499Y002984D01*
+X014438Y003131D01*
+X014326Y003243D01*
+X014179Y003304D01*
+X014021Y003304D01*
+X013874Y003243D01*
+X013762Y003131D01*
+X013701Y002984D01*
+X013701Y002826D01*
+X013723Y002774D02*
+X011741Y002774D01*
+X011773Y002696D02*
+X013755Y002696D01*
+X013824Y002617D02*
+X011799Y002617D01*
+X011799Y002539D02*
+X013943Y002539D01*
+X014257Y002539D02*
+X016753Y002539D01*
+X016751Y002534D02*
+X016751Y002376D01*
+X016812Y002229D01*
+X016924Y002117D01*
+X017071Y002056D01*
+X017229Y002056D01*
+X017376Y002117D01*
+X017488Y002229D01*
+X017549Y002376D01*
+X017549Y002534D01*
+X017488Y002681D01*
+X017376Y002793D01*
+X017229Y002854D01*
+X017071Y002854D01*
+X016924Y002793D01*
+X016812Y002681D01*
+X016751Y002534D01*
+X016751Y002460D02*
+X011792Y002460D01*
+X011760Y002382D02*
+X016751Y002382D01*
+X016781Y002303D02*
+X011712Y002303D01*
+X011633Y002225D02*
+X016817Y002225D01*
+X016895Y002146D02*
+X015819Y002146D01*
+X015826Y002143D02*
+X015679Y002204D01*
+X015521Y002204D01*
+X015374Y002143D01*
+X015262Y002031D01*
+X015201Y001884D01*
+X015201Y001726D01*
+X015262Y001579D01*
+X015374Y001467D01*
+X015521Y001406D01*
+X015679Y001406D01*
+X015826Y001467D01*
+X015938Y001579D01*
+X015999Y001726D01*
+X015999Y001884D01*
+X015938Y002031D01*
+X015826Y002143D01*
+X015901Y002068D02*
+X017044Y002068D01*
+X017256Y002068D02*
+X018325Y002068D01*
+X018301Y002126D02*
+X018362Y001979D01*
+X018474Y001867D01*
+X018621Y001806D01*
+X018779Y001806D01*
+X018926Y001867D01*
+X019038Y001979D01*
+X019099Y002126D01*
+X019099Y002284D01*
+X019038Y002431D01*
+X018926Y002543D01*
+X018779Y002604D01*
+X018621Y002604D01*
+X018474Y002543D01*
+X018362Y002431D01*
+X018301Y002284D01*
+X018301Y002126D01*
+X018301Y002146D02*
+X017405Y002146D01*
+X017483Y002225D02*
+X018301Y002225D01*
+X018309Y002303D02*
+X017519Y002303D01*
+X017549Y002382D02*
+X018342Y002382D01*
+X018391Y002460D02*
+X017549Y002460D01*
+X017547Y002539D02*
+X018470Y002539D01*
+X018930Y002539D02*
+X020174Y002539D01*
+X020151Y002484D02*
+X020151Y002326D01*
+X020212Y002179D01*
+X020324Y002067D01*
+X020471Y002006D01*
+X020629Y002006D01*
+X020776Y002067D01*
+X020888Y002179D01*
+X020949Y002326D01*
+X020949Y002484D01*
+X020888Y002631D01*
+X020776Y002743D01*
+X020629Y002804D01*
+X020471Y002804D01*
+X020324Y002743D01*
+X020212Y002631D01*
+X020151Y002484D01*
+X020151Y002460D02*
+X019009Y002460D01*
+X019058Y002382D02*
+X020151Y002382D01*
+X020161Y002303D02*
+X019091Y002303D01*
+X019099Y002225D02*
+X020193Y002225D01*
+X020245Y002146D02*
+X019099Y002146D01*
+X019075Y002068D02*
+X020324Y002068D01*
+X020776Y002068D02*
+X032200Y002068D01*
+X032200Y002146D02*
+X020855Y002146D01*
+X020907Y002225D02*
+X032200Y002225D01*
+X032200Y002303D02*
+X020939Y002303D01*
+X020949Y002382D02*
+X032200Y002382D01*
+X032200Y002460D02*
+X020949Y002460D01*
+X020926Y002539D02*
+X032200Y002539D01*
+X032200Y002617D02*
+X020894Y002617D01*
+X020823Y002696D02*
+X032200Y002696D01*
+X032200Y002774D02*
+X020701Y002774D01*
+X020658Y003010D02*
+X021982Y003010D01*
+X022024Y002967D02*
+X022171Y002906D01*
+X022329Y002906D01*
+X022476Y002967D01*
+X022588Y003079D01*
+X022649Y003226D01*
+X022649Y003384D01*
+X022588Y003531D01*
+X022476Y003643D01*
+X022329Y003704D01*
+X022171Y003704D01*
+X022024Y003643D01*
+X021912Y003531D01*
+X021851Y003384D01*
+X021851Y003226D01*
+X021912Y003079D01*
+X022024Y002967D01*
+X022111Y002931D02*
+X014499Y002931D01*
+X014499Y002853D02*
+X017068Y002853D01*
+X017232Y002853D02*
+X032200Y002853D01*
+X032200Y002931D02*
+X026940Y002931D01*
+X027018Y003010D02*
+X032200Y003010D01*
+X032200Y003088D02*
+X027062Y003088D01*
+X027095Y003167D02*
+X032200Y003167D01*
+X032200Y003245D02*
+X029423Y003245D01*
+X029532Y003324D02*
+X032200Y003324D01*
+X032200Y003402D02*
+X029598Y003402D01*
+X029630Y003481D02*
+X032200Y003481D01*
+X032200Y003559D02*
+X029649Y003559D01*
+X029649Y003638D02*
+X032200Y003638D01*
+X032200Y003716D02*
+X029636Y003716D01*
+X029603Y003795D02*
+X032200Y003795D01*
+X032200Y003873D02*
+X029546Y003873D01*
+X029077Y003245D02*
+X028773Y003245D01*
+X028882Y003324D02*
+X028968Y003324D01*
+X028427Y003245D02*
+X027099Y003245D01*
+X027099Y003324D02*
+X028318Y003324D01*
+X028252Y003402D02*
+X027071Y003402D01*
+X027038Y003481D02*
+X028220Y003481D01*
+X028201Y003559D02*
+X026960Y003559D01*
+X026818Y003638D02*
+X028201Y003638D01*
+X028214Y003716D02*
+X026470Y003716D01*
+X026581Y003638D02*
+X026582Y003638D01*
+X025953Y003559D02*
+X025710Y003559D01*
+X025788Y003481D02*
+X025920Y003481D01*
+X025901Y003402D02*
+X025821Y003402D01*
+X025849Y003324D02*
+X025901Y003324D01*
+X025914Y003245D02*
+X025849Y003245D01*
+X025845Y003167D02*
+X025946Y003167D01*
+X026003Y003088D02*
+X025812Y003088D01*
+X025768Y003010D02*
+X026092Y003010D01*
+X026460Y002931D02*
+X025690Y002931D01*
+X025210Y002931D02*
+X023340Y002931D01*
+X023418Y003010D02*
+X025132Y003010D01*
+X025088Y003088D02*
+X023462Y003088D01*
+X023495Y003167D02*
+X025055Y003167D01*
+X025051Y003245D02*
+X023499Y003245D01*
+X023499Y003324D02*
+X025051Y003324D01*
+X025079Y003402D02*
+X023471Y003402D01*
+X023438Y003481D02*
+X025112Y003481D01*
+X025190Y003559D02*
+X023360Y003559D01*
+X023376Y003716D02*
+X021275Y003716D01*
+X021196Y003638D02*
+X022019Y003638D01*
+X021940Y003559D02*
+X021036Y003559D01*
+X020864Y003559D02*
+X020797Y003559D01*
+X020830Y003481D02*
+X021891Y003481D01*
+X021859Y003402D02*
+X020849Y003402D01*
+X020849Y003324D02*
+X021851Y003324D01*
+X021851Y003245D02*
+X020836Y003245D01*
+X020804Y003167D02*
+X021876Y003167D01*
+X021908Y003088D02*
+X020747Y003088D01*
+X020399Y002774D02*
+X017395Y002774D01*
+X017473Y002696D02*
+X020277Y002696D01*
+X020206Y002617D02*
+X017514Y002617D01*
+X016905Y002774D02*
+X014477Y002774D01*
+X014445Y002696D02*
+X016827Y002696D01*
+X016786Y002617D02*
+X014376Y002617D01*
+X014488Y003010D02*
+X020242Y003010D01*
+X020153Y003088D02*
+X014456Y003088D01*
+X014402Y003167D02*
+X020096Y003167D01*
+X020064Y003245D02*
+X014321Y003245D01*
+X013879Y003245D02*
+X012999Y003245D01*
+X012999Y003324D02*
+X018068Y003324D01*
+X017989Y003402D02*
+X012991Y003402D01*
+X012959Y003481D02*
+X017941Y003481D01*
+X017908Y003559D02*
+X012910Y003559D01*
+X012831Y003638D02*
+X017901Y003638D01*
+X017901Y003716D02*
+X016624Y003716D01*
+X016176Y003716D02*
+X009870Y003716D01*
+X009981Y003638D02*
+X010019Y003638D01*
+X010481Y003638D02*
+X012369Y003638D01*
+X012974Y003167D02*
+X013798Y003167D01*
+X013744Y003088D02*
+X012942Y003088D01*
+X012868Y003010D02*
+X013712Y003010D01*
+X013701Y002931D02*
+X012739Y002931D01*
+X011266Y002931D02*
+X010389Y002931D01*
+X010111Y002931D02*
+X000700Y002931D01*
+X000700Y002853D02*
+X011134Y002853D01*
+X011059Y002774D02*
+X000700Y002774D01*
+X000700Y002696D02*
+X006401Y002696D01*
+X006421Y002704D02*
+X006274Y002643D01*
+X006162Y002531D01*
+X006101Y002384D01*
+X006101Y002226D01*
+X006162Y002079D01*
+X006274Y001967D01*
+X006421Y001906D01*
+X006579Y001906D01*
+X006726Y001967D01*
+X006838Y002079D01*
+X006899Y002226D01*
+X006899Y002384D01*
+X006838Y002531D01*
+X006726Y002643D01*
+X006579Y002704D01*
+X006421Y002704D01*
+X006599Y002696D02*
+X011027Y002696D01*
+X011001Y002617D02*
+X006752Y002617D01*
+X006830Y002539D02*
+X011001Y002539D01*
+X011008Y002460D02*
+X006867Y002460D01*
+X006899Y002382D02*
+X011040Y002382D01*
+X011088Y002303D02*
+X006899Y002303D01*
+X006898Y002225D02*
+X011167Y002225D01*
+X011126Y002143D02*
+X010979Y002204D01*
+X010821Y002204D01*
+X010674Y002143D01*
+X010562Y002031D01*
+X010501Y001884D01*
+X010501Y001726D01*
+X010552Y001604D01*
+X010524Y001593D01*
+X010412Y001481D01*
+X010351Y001334D01*
+X010351Y001176D01*
+X010412Y001029D01*
+X010524Y000917D01*
+X010671Y000856D01*
+X010829Y000856D01*
+X010976Y000917D01*
+X011088Y001029D01*
+X011149Y001176D01*
+X011149Y001334D01*
+X011098Y001456D01*
+X011126Y001467D01*
+X011238Y001579D01*
+X011299Y001726D01*
+X011299Y001884D01*
+X011238Y002031D01*
+X011126Y002143D01*
+X011119Y002146D02*
+X015381Y002146D01*
+X015299Y002068D02*
+X011201Y002068D01*
+X011255Y001989D02*
+X015245Y001989D01*
+X015212Y001911D02*
+X011288Y001911D01*
+X011299Y001832D02*
+X011868Y001832D01*
+X011921Y001854D02*
+X011774Y001793D01*
+X011662Y001681D01*
+X011601Y001534D01*
+X011601Y001376D01*
+X011662Y001229D01*
+X011774Y001117D01*
+X011921Y001056D01*
+X012079Y001056D01*
+X012226Y001117D01*
+X012338Y001229D01*
+X012399Y001376D01*
+X012399Y001534D01*
+X012338Y001681D01*
+X012226Y001793D01*
+X012079Y001854D01*
+X011921Y001854D01*
+X011735Y001754D02*
+X011299Y001754D01*
+X011278Y001675D02*
+X011660Y001675D01*
+X011627Y001597D02*
+X011245Y001597D01*
+X011177Y001518D02*
+X011601Y001518D01*
+X011601Y001440D02*
+X011105Y001440D01*
+X011138Y001361D02*
+X011607Y001361D01*
+X011640Y001283D02*
+X011149Y001283D01*
+X011149Y001204D02*
+X011687Y001204D01*
+X011766Y001126D02*
+X011128Y001126D01*
+X011095Y001047D02*
+X032200Y001047D01*
+X032200Y000969D02*
+X011027Y000969D01*
+X010911Y000890D02*
+X032200Y000890D01*
+X032200Y000812D02*
+X006092Y000812D01*
+X006079Y000806D02*
+X006226Y000867D01*
+X006338Y000979D01*
+X006399Y001126D01*
+X006399Y001284D01*
+X006338Y001431D01*
+X006226Y001543D01*
+X006079Y001604D01*
+X005921Y001604D01*
+X005774Y001543D01*
+X005662Y001431D01*
+X005601Y001284D01*
+X005601Y001126D01*
+X005662Y000979D01*
+X005774Y000867D01*
+X005921Y000806D01*
+X006079Y000806D01*
+X005908Y000812D02*
+X000700Y000812D01*
+X000700Y000890D02*
+X005751Y000890D01*
+X005673Y000969D02*
+X000700Y000969D01*
+X000700Y001047D02*
+X005634Y001047D01*
+X005601Y001126D02*
+X000700Y001126D01*
+X000700Y001204D02*
+X005601Y001204D01*
+X005601Y001283D02*
+X000700Y001283D01*
+X000700Y001361D02*
+X005633Y001361D01*
+X005671Y001440D02*
+X000700Y001440D01*
+X000700Y001518D02*
+X005749Y001518D01*
+X005903Y001597D02*
+X003476Y001597D01*
+X003526Y001617D02*
+X003638Y001729D01*
+X003699Y001876D01*
+X003699Y002034D01*
+X003638Y002181D01*
+X003526Y002293D01*
+X003379Y002354D01*
+X003221Y002354D01*
+X003074Y002293D01*
+X002962Y002181D01*
+X002901Y002034D01*
+X002901Y001876D01*
+X002962Y001729D01*
+X003074Y001617D01*
+X003221Y001556D01*
+X003379Y001556D01*
+X003526Y001617D01*
+X003584Y001675D02*
+X008606Y001675D01*
+X008624Y001693D02*
+X008512Y001581D01*
+X008451Y001434D01*
+X008451Y001276D01*
+X008512Y001129D01*
+X008624Y001017D01*
+X008771Y000956D01*
+X008929Y000956D01*
+X009076Y001017D01*
+X009188Y001129D01*
+X009249Y001276D01*
+X009249Y001434D01*
+X009188Y001581D01*
+X009076Y001693D01*
+X008929Y001754D01*
+X008771Y001754D01*
+X008624Y001693D01*
+X008528Y001597D02*
+X006097Y001597D01*
+X006251Y001518D02*
+X008486Y001518D01*
+X008453Y001440D02*
+X006329Y001440D01*
+X006367Y001361D02*
+X008451Y001361D01*
+X008451Y001283D02*
+X006399Y001283D01*
+X006399Y001204D02*
+X008481Y001204D01*
+X008516Y001126D02*
+X006399Y001126D01*
+X006366Y001047D02*
+X008594Y001047D01*
+X008741Y000969D02*
+X006327Y000969D01*
+X006249Y000890D02*
+X010589Y000890D01*
+X010473Y000969D02*
+X008959Y000969D01*
+X009106Y001047D02*
+X010405Y001047D01*
+X010372Y001126D02*
+X009184Y001126D01*
+X009219Y001204D02*
+X010351Y001204D01*
+X010351Y001283D02*
+X009249Y001283D01*
+X009249Y001361D02*
+X010362Y001361D01*
+X010395Y001440D02*
+X009247Y001440D01*
+X009214Y001518D02*
+X010449Y001518D01*
+X010533Y001597D02*
+X009172Y001597D01*
+X009094Y001675D02*
+X010522Y001675D01*
+X010501Y001754D02*
+X008930Y001754D01*
+X008770Y001754D02*
+X003648Y001754D01*
+X003681Y001832D02*
+X010501Y001832D01*
+X010512Y001911D02*
+X006590Y001911D01*
+X006748Y001989D02*
+X010545Y001989D01*
+X010599Y002068D02*
+X006826Y002068D01*
+X006866Y002146D02*
+X010681Y002146D01*
+X009982Y003010D02*
+X009908Y003010D01*
+X009419Y003638D02*
+X008396Y003638D01*
+X008475Y003716D02*
+X009530Y003716D01*
+X008548Y003873D02*
+X016044Y003873D01*
+X016097Y003795D02*
+X008515Y003795D01*
+X008848Y004737D02*
+X008045Y004737D01*
+X008124Y004815D02*
+X008726Y004815D01*
+X008656Y004894D02*
+X008165Y004894D01*
+X008197Y004972D02*
+X008623Y004972D01*
+X008601Y005051D02*
+X008199Y005051D01*
+X008199Y005129D02*
+X008601Y005129D01*
+X008611Y005208D02*
+X008168Y005208D01*
+X008133Y005286D02*
+X008643Y005286D01*
+X007884Y004658D02*
+X011360Y004658D01*
+X011261Y004580D02*
+X006939Y004580D01*
+X006971Y004501D02*
+X011200Y004501D01*
+X011740Y004658D02*
+X011810Y004658D01*
+X013639Y004580D02*
+X016915Y004580D01*
+X017185Y004580D02*
+X017511Y004580D01*
+X017432Y004501D02*
+X013700Y004501D01*
+X013984Y005129D02*
+X016690Y005129D01*
+X016739Y005208D02*
+X014116Y005208D01*
+X014191Y005286D02*
+X016817Y005286D01*
+X016870Y005522D02*
+X016566Y005522D01*
+X016709Y005600D02*
+X016791Y005600D01*
+X016334Y005522D02*
+X014249Y005522D01*
+X014242Y005600D02*
+X016191Y005600D01*
+X016113Y005679D02*
+X014210Y005679D01*
+X014162Y005757D02*
+X016080Y005757D01*
+X016051Y005836D02*
+X014083Y005836D01*
+X014002Y005914D02*
+X013769Y005914D01*
+X014198Y005914D02*
+X015881Y005914D01*
+X015799Y005993D02*
+X014351Y005993D01*
+X014430Y006071D02*
+X015745Y006071D01*
+X015712Y006150D02*
+X014934Y006150D01*
+X015037Y006228D02*
+X015701Y006228D01*
+X015701Y006307D02*
+X015099Y006307D01*
+X015132Y006385D02*
+X015722Y006385D01*
+X015755Y006464D02*
+X015149Y006464D01*
+X015149Y006542D02*
+X015823Y006542D01*
+X015940Y006621D02*
+X015134Y006621D01*
+X015129Y006778D02*
+X017390Y006778D01*
+X017437Y006856D02*
+X015149Y006856D01*
+X016101Y007327D02*
+X003936Y007327D01*
+X004093Y007563D02*
+X012135Y007563D01*
+X012124Y007567D02*
+X012271Y007506D01*
+X012429Y007506D01*
+X012576Y007567D01*
+X012688Y007679D01*
+X012749Y007826D01*
+X012749Y007984D01*
+X012688Y008131D01*
+X012576Y008243D01*
+X012429Y008304D01*
+X012271Y008304D01*
+X012124Y008243D01*
+X012012Y008131D01*
+X011951Y007984D01*
+X011951Y007826D01*
+X012012Y007679D01*
+X012124Y007567D01*
+X012050Y007641D02*
+X004099Y007641D01*
+X004099Y007720D02*
+X005322Y007720D01*
+X005243Y007798D02*
+X004072Y007798D01*
+X004040Y007877D02*
+X005192Y007877D01*
+X005160Y007955D02*
+X003964Y007955D01*
+X003828Y008034D02*
+X005151Y008034D01*
+X005151Y008112D02*
+X000700Y008112D01*
+X000700Y008034D02*
+X003572Y008034D01*
+X003436Y007955D02*
+X000700Y007955D01*
+X000700Y007877D02*
+X003360Y007877D01*
+X003328Y007798D02*
+X000700Y007798D01*
+X000700Y007720D02*
+X003301Y007720D01*
+X003301Y007641D02*
+X000700Y007641D01*
+X000700Y007563D02*
+X003307Y007563D01*
+X003339Y007484D02*
+X000700Y007484D01*
+X000700Y007406D02*
+X001504Y007406D01*
+X001408Y007327D02*
+X000700Y007327D01*
+X000700Y007249D02*
+X001349Y007249D01*
+X001316Y007170D02*
+X000700Y007170D01*
+X000700Y007092D02*
+X001301Y007092D01*
+X001301Y007013D02*
+X000700Y007013D01*
+X000700Y006935D02*
+X001318Y006935D01*
+X001351Y006856D02*
+X000700Y006856D01*
+X000700Y006778D02*
+X001414Y006778D01*
+X001517Y006699D02*
+X000700Y006699D01*
+X000700Y006621D02*
+X012651Y006621D01*
+X012651Y006542D02*
+X000700Y006542D01*
+X000700Y006464D02*
+X012656Y006464D01*
+X012689Y006385D02*
+X000700Y006385D01*
+X000700Y006307D02*
+X012735Y006307D01*
+X012813Y006228D02*
+X000700Y006228D01*
+X000700Y006150D02*
+X004760Y006150D01*
+X004771Y006154D02*
+X004624Y006093D01*
+X004512Y005981D01*
+X004451Y005834D01*
+X004451Y005676D01*
+X004512Y005529D01*
+X004624Y005417D01*
+X004771Y005356D01*
+X004929Y005356D01*
+X005076Y005417D01*
+X005188Y005529D01*
+X005249Y005676D01*
+X005249Y005834D01*
+X005188Y005981D01*
+X005076Y006093D01*
+X004929Y006154D01*
+X004771Y006154D01*
+X004940Y006150D02*
+X007890Y006150D01*
+X007802Y006071D02*
+X005098Y006071D01*
+X005176Y005993D02*
+X007746Y005993D01*
+X007714Y005914D02*
+X005216Y005914D01*
+X005248Y005836D02*
+X007701Y005836D01*
+X007701Y005757D02*
+X005249Y005757D01*
+X005249Y005679D02*
+X005610Y005679D01*
+X005531Y005600D02*
+X005217Y005600D01*
+X005180Y005522D02*
+X005487Y005522D01*
+X005455Y005443D02*
+X005102Y005443D01*
+X004949Y005365D02*
+X005451Y005365D01*
+X005451Y005286D02*
+X000700Y005286D01*
+X000700Y005208D02*
+X005479Y005208D01*
+X005512Y005129D02*
+X005586Y005055D01*
+X005538Y004972D02*
+X000700Y004972D01*
+X000700Y004894D02*
+X005505Y004894D01*
+X005501Y004815D02*
+X000700Y004815D01*
+X000700Y004737D02*
+X005501Y004737D01*
+X005529Y004658D02*
+X000700Y004658D01*
+X000700Y004580D02*
+X005562Y004580D01*
+X005640Y004501D02*
+X000700Y004501D01*
+X000700Y004423D02*
+X005781Y004423D01*
+X006904Y004658D02*
+X007716Y004658D01*
+X007555Y004737D02*
+X006995Y004737D01*
+X007053Y004815D02*
+X007476Y004815D01*
+X007435Y004894D02*
+X007085Y004894D01*
+X007099Y004972D02*
+X007403Y004972D01*
+X007401Y005051D02*
+X007099Y005051D01*
+X007080Y005129D02*
+X007401Y005129D01*
+X007432Y005208D02*
+X007048Y005208D01*
+X006983Y005286D02*
+X007467Y005286D01*
+X007546Y005365D02*
+X006874Y005365D01*
+X006090Y005679D02*
+X007721Y005679D01*
+X005778Y007720D02*
+X011995Y007720D01*
+X011963Y007798D02*
+X005857Y007798D01*
+X005908Y007877D02*
+X011951Y007877D01*
+X011951Y007955D02*
+X005940Y007955D01*
+X005949Y008034D02*
+X011972Y008034D01*
+X012004Y008112D02*
+X010843Y008112D01*
+X010999Y008191D02*
+X012072Y008191D01*
+X012187Y008269D02*
+X011078Y008269D01*
+X011116Y008348D02*
+X012713Y008348D01*
+X012745Y008269D02*
+X012513Y008269D01*
+X012628Y008191D02*
+X012801Y008191D01*
+X012886Y008112D02*
+X012696Y008112D01*
+X012728Y008034D02*
+X013069Y008034D01*
+X013101Y007955D02*
+X012749Y007955D01*
+X012749Y007877D02*
+X013165Y007877D01*
+X013270Y007798D02*
+X012737Y007798D01*
+X012705Y007720D02*
+X016251Y007720D01*
+X016172Y007641D02*
+X012650Y007641D01*
+X012565Y007563D02*
+X016134Y007563D01*
+X016407Y007798D02*
+X013630Y007798D01*
+X012924Y006935D02*
+X002082Y006935D01*
+X002049Y006856D02*
+X012787Y006856D01*
+X012711Y006778D02*
+X001986Y006778D01*
+X001883Y006699D02*
+X012678Y006699D01*
+X014467Y006150D02*
+X014566Y006150D01*
+X014249Y005443D02*
+X020346Y005443D01*
+X020314Y005365D02*
+X014223Y005365D01*
+X018437Y004030D02*
+X020551Y004030D01*
+X020551Y003952D02*
+X018567Y003952D01*
+X018641Y003873D02*
+X020552Y003873D01*
+X020585Y003795D02*
+X018674Y003795D01*
+X018699Y003716D02*
+X020280Y003716D01*
+X020169Y003638D02*
+X018699Y003638D01*
+X018692Y003559D02*
+X020103Y003559D01*
+X020070Y003481D02*
+X018659Y003481D01*
+X018611Y003402D02*
+X020051Y003402D01*
+X020051Y003324D02*
+X018532Y003324D01*
+X018358Y001989D02*
+X015955Y001989D01*
+X015988Y001911D02*
+X018431Y001911D01*
+X018559Y001832D02*
+X015999Y001832D01*
+X015999Y001754D02*
+X032200Y001754D01*
+X032200Y001832D02*
+X018841Y001832D01*
+X018969Y001911D02*
+X032200Y001911D01*
+X032200Y001989D02*
+X019042Y001989D01*
+X020620Y003716D02*
+X020625Y003716D01*
+X020869Y004894D02*
+X021998Y004894D01*
+X021919Y004972D02*
+X020981Y004972D01*
+X021047Y005051D02*
+X021882Y005051D01*
+X021851Y005129D02*
+X021079Y005129D01*
+X021099Y005208D02*
+X021851Y005208D01*
+X021852Y005286D02*
+X021099Y005286D01*
+X021086Y005365D02*
+X021884Y005365D01*
+X021924Y005443D02*
+X021054Y005443D01*
+X020997Y005522D02*
+X021953Y005522D01*
+X021951Y005600D02*
+X020909Y005600D01*
+X020887Y006228D02*
+X024761Y006228D01*
+X024728Y006150D02*
+X024640Y006150D01*
+X024838Y006307D02*
+X020949Y006307D01*
+X021149Y006385D02*
+X022251Y006385D01*
+X022321Y006356D02*
+X022174Y006417D01*
+X022062Y006529D01*
+X022001Y006676D01*
+X022001Y006834D01*
+X022062Y006981D01*
+X022174Y007093D01*
+X022321Y007154D01*
+X022479Y007154D01*
+X022626Y007093D01*
+X022738Y006981D01*
+X022799Y006834D01*
+X022799Y006676D01*
+X022738Y006529D01*
+X022626Y006417D01*
+X022479Y006356D01*
+X022321Y006356D01*
+X022128Y006464D02*
+X021272Y006464D01*
+X021343Y006542D02*
+X022057Y006542D01*
+X022024Y006621D02*
+X021376Y006621D01*
+X021399Y006699D02*
+X022001Y006699D01*
+X022001Y006778D02*
+X021399Y006778D01*
+X021390Y006856D02*
+X022010Y006856D01*
+X022043Y006935D02*
+X021357Y006935D01*
+X021306Y007013D02*
+X022094Y007013D01*
+X022173Y007092D02*
+X021227Y007092D01*
+X020784Y007170D02*
+X024121Y007170D01*
+X024112Y007179D02*
+X024203Y007088D01*
+X024201Y007084D01*
+X024201Y006926D01*
+X024262Y006779D01*
+X024374Y006667D01*
+X024521Y006606D01*
+X024679Y006606D01*
+X024826Y006667D01*
+X024938Y006779D01*
+X024999Y006926D01*
+X024999Y007084D01*
+X024938Y007231D01*
+X024920Y007249D02*
+X025643Y007249D01*
+X025564Y007327D02*
+X024849Y007327D01*
+X024849Y007406D02*
+X025530Y007406D01*
+X025504Y007641D02*
+X024778Y007641D01*
+X024788Y007631D02*
+X024849Y007484D01*
+X024699Y007720D02*
+X025537Y007720D01*
+X025579Y007798D02*
+X024543Y007798D01*
+X024051Y007484D02*
+X024051Y007326D01*
+X024112Y007179D01*
+X024083Y007249D02*
+X020751Y007249D01*
+X020692Y007327D02*
+X024051Y007327D01*
+X024051Y007406D02*
+X020596Y007406D01*
+X022627Y007092D02*
+X024200Y007092D01*
+X024201Y007013D02*
+X022706Y007013D01*
+X022757Y006935D02*
+X024201Y006935D01*
+X024230Y006856D02*
+X022790Y006856D01*
+X022799Y006778D02*
+X024264Y006778D01*
+X024342Y006699D02*
+X022799Y006699D01*
+X022776Y006621D02*
+X024486Y006621D01*
+X024714Y006621D02*
+X025008Y006621D01*
+X024975Y006542D02*
+X022743Y006542D01*
+X022672Y006464D02*
+X024951Y006464D01*
+X024951Y006385D02*
+X022549Y006385D01*
+X024858Y006699D02*
+X025080Y006699D01*
+X025207Y006778D02*
+X024936Y006778D01*
+X024970Y006856D02*
+X025281Y006856D01*
+X025316Y006935D02*
+X024999Y006935D01*
+X024999Y007013D02*
+X025394Y007013D01*
+X025541Y007092D02*
+X024996Y007092D01*
+X025285Y007877D02*
+X025515Y007877D01*
+X025436Y007955D02*
+X025364Y007955D01*
+X025390Y008426D02*
+X025410Y008426D01*
+X025486Y008505D02*
+X025314Y008505D01*
+X025179Y008583D02*
+X025621Y008583D01*
+X024921Y008583D02*
+X024729Y008583D01*
+X024773Y009368D02*
+X023916Y009368D01*
+X024029Y009290D02*
+X025352Y009290D01*
+X025273Y009368D02*
+X025227Y009368D01*
+X023439Y010781D02*
+X030741Y010781D01*
+X030709Y010703D02*
+X023361Y010703D01*
+X022009Y009211D02*
+X021591Y009211D01*
+X021748Y009290D02*
+X021852Y009290D01*
+X026691Y006699D02*
+X027542Y006699D01*
+X027621Y006621D02*
+X026848Y006621D01*
+X028079Y006621D02*
+X032200Y006621D01*
+X032200Y006699D02*
+X028158Y006699D01*
+X028208Y006778D02*
+X032200Y006778D01*
+X032200Y006856D02*
+X028241Y006856D01*
+X028249Y006935D02*
+X032200Y006935D01*
+X032200Y007013D02*
+X028249Y007013D01*
+X028225Y007092D02*
+X032200Y007092D01*
+X032200Y007170D02*
+X028193Y007170D01*
+X028120Y007249D02*
+X032200Y007249D01*
+X032200Y007327D02*
+X027994Y007327D01*
+X028082Y009211D02*
+X028088Y009211D01*
+X031240Y010232D02*
+X032200Y010232D01*
+X032200Y010310D02*
+X031369Y010310D01*
+X031442Y010389D02*
+X032200Y010389D01*
+X032200Y010467D02*
+X031474Y010467D01*
+X031499Y010546D02*
+X032200Y010546D01*
+X032200Y010624D02*
+X031499Y010624D01*
+X031491Y010703D02*
+X032200Y010703D01*
+X032200Y010781D02*
+X031459Y010781D01*
+X031409Y010860D02*
+X032200Y010860D01*
+X032200Y010938D02*
+X031331Y010938D01*
+X030926Y011566D02*
+X030474Y011566D01*
+X030553Y011645D02*
+X030847Y011645D01*
+X030794Y011723D02*
+X030606Y011723D01*
+X030639Y011802D02*
+X030761Y011802D01*
+X030751Y011880D02*
+X030649Y011880D01*
+X030649Y011959D02*
+X030751Y011959D01*
+X030773Y012037D02*
+X030627Y012037D01*
+X030594Y012116D02*
+X030806Y012116D01*
+X030875Y012194D02*
+X030525Y012194D01*
+X030405Y012273D02*
+X030995Y012273D01*
+X027657Y014785D02*
+X026349Y014785D01*
+X026316Y014863D02*
+X027578Y014863D01*
+X027536Y014942D02*
+X026277Y014942D01*
+X026199Y015020D02*
+X027504Y015020D01*
+X030365Y015413D02*
+X032200Y015413D01*
+X032200Y015491D02*
+X030450Y015491D01*
+X030661Y015570D02*
+X032200Y015570D01*
+X032200Y015648D02*
+X030807Y015648D01*
+X030885Y015727D02*
+X032200Y015727D01*
+X032200Y015805D02*
+X030919Y015805D01*
+X030949Y015884D02*
+X032200Y015884D01*
+X032200Y015962D02*
+X030949Y015962D01*
+X030946Y016041D02*
+X032200Y016041D01*
+X032200Y016119D02*
+X030914Y016119D01*
+X030871Y016198D02*
+X032200Y016198D01*
+X032200Y016276D02*
+X030793Y016276D01*
+X020921Y015020D02*
+X020716Y015020D01*
+X020727Y015099D02*
+X020843Y015099D01*
+X020792Y015177D02*
+X020727Y015177D01*
+X020716Y015256D02*
+X020760Y015256D01*
+X020751Y015334D02*
+X020696Y015334D01*
+X020663Y015413D02*
+X020751Y015413D01*
+X020775Y015491D02*
+X020617Y015491D01*
+X020466Y018788D02*
+X020325Y018788D01*
+X020432Y018867D02*
+X020445Y018867D01*
+X013927Y013686D02*
+X011794Y013686D01*
+X011631Y013607D02*
+X013788Y013607D01*
+X012575Y012194D02*
+X012523Y012194D01*
+X010414Y012430D02*
+X001259Y012430D01*
+X001211Y012508D02*
+X010283Y012508D01*
+X010298Y013136D02*
+X010317Y013136D01*
+X010147Y013372D02*
+X010634Y013372D01*
+X010491Y013450D02*
+X009988Y013450D01*
+X006067Y011252D02*
+X000700Y011252D01*
+X000700Y011174D02*
+X005905Y011174D01*
+X005826Y011095D02*
+X000700Y011095D01*
+X000700Y011017D02*
+X005785Y011017D01*
+X005753Y010938D02*
+X000700Y010938D01*
+X000700Y010860D02*
+X005751Y010860D01*
+X005751Y010781D02*
+X003684Y010781D01*
+X003629Y010804D02*
+X003471Y010804D01*
+X003324Y010743D01*
+X003212Y010631D01*
+X003151Y010484D01*
+X003151Y010326D01*
+X003212Y010179D01*
+X003324Y010067D01*
+X003471Y010006D01*
+X003629Y010006D01*
+X003776Y010067D01*
+X003888Y010179D01*
+X003949Y010326D01*
+X003949Y010484D01*
+X003888Y010631D01*
+X003776Y010743D01*
+X003629Y010804D01*
+X003816Y010703D02*
+X005782Y010703D01*
+X005817Y010624D02*
+X003891Y010624D01*
+X003923Y010546D02*
+X005827Y010546D01*
+X005756Y010467D02*
+X003949Y010467D01*
+X003949Y010389D02*
+X005724Y010389D01*
+X005701Y010310D02*
+X003942Y010310D01*
+X003910Y010232D02*
+X005701Y010232D01*
+X005711Y010153D02*
+X003862Y010153D01*
+X003783Y010075D02*
+X005743Y010075D01*
+X005795Y009996D02*
+X002354Y009996D01*
+X002354Y009959D02*
+X002288Y009798D01*
+X002165Y009675D01*
+X002004Y009609D01*
+X001830Y009609D01*
+X001670Y009675D01*
+X001547Y009798D01*
+X001480Y009959D01*
+X001480Y010132D01*
+X001547Y010293D01*
+X001670Y010416D01*
+X001830Y010482D01*
+X002004Y010482D01*
+X002165Y010416D01*
+X002288Y010293D01*
+X002354Y010132D01*
+X002354Y009959D01*
+X002337Y009918D02*
+X005874Y009918D01*
+X003868Y009682D02*
+X002172Y009682D01*
+X002250Y009761D02*
+X009440Y009761D01*
+X009352Y009839D02*
+X002305Y009839D01*
+X002354Y010075D02*
+X003317Y010075D01*
+X003238Y010153D02*
+X002346Y010153D01*
+X002313Y010232D02*
+X003190Y010232D01*
+X003158Y010310D02*
+X002271Y010310D01*
+X002192Y010389D02*
+X003151Y010389D01*
+X003151Y010467D02*
+X002041Y010467D01*
+X001793Y010467D02*
+X000700Y010467D01*
+X000700Y010389D02*
+X001643Y010389D01*
+X001564Y010310D02*
+X000700Y010310D01*
+X000700Y010232D02*
+X001522Y010232D01*
+X001489Y010153D02*
+X000700Y010153D01*
+X000700Y010075D02*
+X001480Y010075D01*
+X001480Y009996D02*
+X000700Y009996D01*
+X000700Y009918D02*
+X001498Y009918D01*
+X001530Y009839D02*
+X000700Y009839D01*
+X000700Y009761D02*
+X001585Y009761D01*
+X001663Y009682D02*
+X000700Y009682D01*
+X000700Y009604D02*
+X003735Y009604D01*
+X003660Y009525D02*
+X000700Y009525D01*
+X000700Y009447D02*
+X003627Y009447D01*
+X003601Y009368D02*
+X000700Y009368D01*
+X000700Y009290D02*
+X001802Y009290D01*
+X001830Y009301D02*
+X001670Y009235D01*
+X001547Y009112D01*
+X001480Y008951D01*
+X001480Y008778D01*
+X001547Y008617D01*
+X001670Y008494D01*
+X001830Y008428D01*
+X002004Y008428D01*
+X002165Y008494D01*
+X002288Y008617D01*
+X002354Y008778D01*
+X002354Y008951D01*
+X002288Y009112D01*
+X002165Y009235D01*
+X002004Y009301D01*
+X001830Y009301D01*
+X002033Y009290D02*
+X003601Y009290D01*
+X003607Y009211D02*
+X002189Y009211D01*
+X002267Y009133D02*
+X003640Y009133D01*
+X003687Y009054D02*
+X002312Y009054D01*
+X002344Y008976D02*
+X003766Y008976D01*
+X002354Y008897D02*
+X007651Y008897D01*
+X007654Y008819D02*
+X002354Y008819D01*
+X002339Y008740D02*
+X007687Y008740D01*
+X007730Y008662D02*
+X002306Y008662D01*
+X002254Y008583D02*
+X007808Y008583D01*
+X008292Y008583D02*
+X010351Y008583D01*
+X010351Y008505D02*
+X002175Y008505D01*
+X001659Y008505D02*
+X000700Y008505D01*
+X000700Y008583D02*
+X001581Y008583D01*
+X001529Y008662D02*
+X000700Y008662D01*
+X000700Y008740D02*
+X001496Y008740D01*
+X001480Y008819D02*
+X000700Y008819D01*
+X000700Y008897D02*
+X001480Y008897D01*
+X001490Y008976D02*
+X000700Y008976D01*
+X000700Y009054D02*
+X001523Y009054D01*
+X001568Y009133D02*
+X000700Y009133D01*
+X000700Y009211D02*
+X001646Y009211D01*
+X000700Y008426D02*
+X005404Y008426D01*
+X005279Y008348D02*
+X000700Y008348D01*
+X000700Y008269D02*
+X005207Y008269D01*
+X005175Y008191D02*
+X000700Y008191D01*
+X000700Y006071D02*
+X004602Y006071D01*
+X004524Y005993D02*
+X000700Y005993D01*
+X000700Y005914D02*
+X004484Y005914D01*
+X004452Y005836D02*
+X000700Y005836D01*
+X000700Y005757D02*
+X004451Y005757D01*
+X004451Y005679D02*
+X000700Y005679D01*
+X000700Y005600D02*
+X004483Y005600D01*
+X004520Y005522D02*
+X000700Y005522D01*
+X000700Y005443D02*
+X004598Y005443D01*
+X004751Y005365D02*
+X000700Y005365D01*
+X000700Y004187D02*
+X002068Y004187D01*
+X001990Y004109D02*
+X000700Y004109D01*
+X000700Y004030D02*
+X001941Y004030D01*
+X001908Y003952D02*
+X000700Y003952D01*
+X000700Y003873D02*
+X001901Y003873D01*
+X001901Y003795D02*
+X000700Y003795D01*
+X000700Y003716D02*
+X001926Y003716D01*
+X001958Y003638D02*
+X000700Y003638D01*
+X000700Y003559D02*
+X002032Y003559D01*
+X002162Y003481D02*
+X000700Y003481D01*
+X000700Y002617D02*
+X006248Y002617D01*
+X006170Y002539D02*
+X002266Y002539D01*
+X002229Y002554D02*
+X002071Y002554D01*
+X001924Y002493D01*
+X001812Y002381D01*
+X001751Y002234D01*
+X001751Y002076D01*
+X001812Y001929D01*
+X001924Y001817D01*
+X002071Y001756D01*
+X002229Y001756D01*
+X002376Y001817D01*
+X002488Y001929D01*
+X002549Y002076D01*
+X002549Y002234D01*
+X002488Y002381D01*
+X002376Y002493D01*
+X002229Y002554D01*
+X002034Y002539D02*
+X000700Y002539D01*
+X000700Y002460D02*
+X001891Y002460D01*
+X001813Y002382D02*
+X000700Y002382D01*
+X000700Y002303D02*
+X001780Y002303D01*
+X001751Y002225D02*
+X000700Y002225D01*
+X000700Y002146D02*
+X001751Y002146D01*
+X001755Y002068D02*
+X000700Y002068D01*
+X000700Y001989D02*
+X001787Y001989D01*
+X001831Y001911D02*
+X000700Y001911D01*
+X000700Y001832D02*
+X001909Y001832D01*
+X002391Y001832D02*
+X002919Y001832D01*
+X002901Y001911D02*
+X002469Y001911D01*
+X002513Y001989D02*
+X002901Y001989D01*
+X002915Y002068D02*
+X002545Y002068D01*
+X002549Y002146D02*
+X002948Y002146D01*
+X003006Y002225D02*
+X002549Y002225D01*
+X002520Y002303D02*
+X003098Y002303D01*
+X003502Y002303D02*
+X006101Y002303D01*
+X006102Y002225D02*
+X003594Y002225D01*
+X003652Y002146D02*
+X006134Y002146D01*
+X006174Y002068D02*
+X003685Y002068D01*
+X003699Y001989D02*
+X006252Y001989D01*
+X006410Y001911D02*
+X003699Y001911D01*
+X003124Y001597D02*
+X000700Y001597D01*
+X000700Y001675D02*
+X003016Y001675D01*
+X002952Y001754D02*
+X000700Y001754D01*
+X000700Y000733D02*
+X032200Y000733D01*
+X032200Y000655D02*
+X000700Y000655D01*
+X000700Y000576D02*
+X032200Y000576D01*
+X032200Y000498D02*
+X000700Y000498D01*
+X000700Y000419D02*
+X032200Y000419D01*
+X032200Y001126D02*
+X012234Y001126D01*
+X012313Y001204D02*
+X032200Y001204D01*
+X032200Y001283D02*
+X012360Y001283D01*
+X012393Y001361D02*
+X032200Y001361D01*
+X032200Y001440D02*
+X015760Y001440D01*
+X015877Y001518D02*
+X032200Y001518D01*
+X032200Y001597D02*
+X015945Y001597D01*
+X015978Y001675D02*
+X032200Y001675D01*
+X027296Y004658D02*
+X027034Y004658D01*
+X026866Y004658D02*
+X025167Y004658D01*
+X025241Y004737D02*
+X026705Y004737D01*
+X026626Y004815D02*
+X025274Y004815D01*
+X025299Y004894D02*
+X026131Y004894D01*
+X026019Y004972D02*
+X025299Y004972D01*
+X025292Y005051D02*
+X025953Y005051D01*
+X025816Y005129D02*
+X025260Y005129D01*
+X025250Y005208D02*
+X025684Y005208D01*
+X025609Y005286D02*
+X025501Y005286D01*
+X026469Y004894D02*
+X026585Y004894D01*
+X027195Y004737D02*
+X027205Y004737D01*
+X027253Y005365D02*
+X027326Y005365D01*
+X023904Y004423D02*
+X023755Y004423D01*
+X023824Y003716D02*
+X024047Y003716D01*
+X022982Y003638D02*
+X022481Y003638D01*
+X022560Y003559D02*
+X022840Y003559D01*
+X022762Y003481D02*
+X022609Y003481D01*
+X022641Y003402D02*
+X022729Y003402D01*
+X022701Y003324D02*
+X022649Y003324D01*
+X022649Y003245D02*
+X022701Y003245D01*
+X022705Y003167D02*
+X022624Y003167D01*
+X022592Y003088D02*
+X022738Y003088D01*
+X022782Y003010D02*
+X022518Y003010D01*
+X022389Y002931D02*
+X022860Y002931D01*
+X015440Y001440D02*
+X012399Y001440D01*
+X012399Y001518D02*
+X015323Y001518D01*
+X015255Y001597D02*
+X012373Y001597D01*
+X012340Y001675D02*
+X015222Y001675D01*
+X015201Y001754D02*
+X012265Y001754D01*
+X012132Y001832D02*
+X015201Y001832D01*
+X012250Y000805D02*
+X012250Y000505D01*
+X012250Y000805D02*
+X012200Y000855D01*
+X006133Y002460D02*
+X002409Y002460D01*
+X002487Y002382D02*
+X006101Y002382D01*
+X005949Y008112D02*
+X010657Y008112D01*
+X010501Y008191D02*
+X005925Y008191D01*
+X005893Y008269D02*
+X010422Y008269D01*
+X010412Y008279D02*
+X010351Y008426D01*
+X010383Y008662D02*
+X008370Y008662D01*
+X008413Y008740D02*
+X010421Y008740D01*
+X010500Y008819D02*
+X008446Y008819D01*
+X008449Y008897D02*
+X010654Y008897D01*
+X011079Y008740D02*
+X012821Y008740D01*
+X011149Y008584D02*
+X011149Y008426D01*
+X011149Y008584D02*
+X011088Y008731D01*
+X003416Y010781D02*
+X000700Y010781D01*
+X000700Y010703D02*
+X003284Y010703D01*
+X003209Y010624D02*
+X000700Y010624D01*
+X000700Y010546D02*
+X003177Y010546D01*
+X032058Y006542D02*
+X032200Y006542D01*
+X032194Y005836D02*
+X032200Y005836D01*
+D17*
+X031950Y006155D03*
+X031250Y005755D03*
+X031100Y006155D03*
+X029450Y006805D03*
+X027850Y006955D03*
+X026700Y007205D03*
+X025900Y007555D03*
+X026100Y007905D03*
+X025750Y008205D03*
+X025050Y008205D03*
+X024600Y008205D03*
+X024450Y007405D03*
+X024600Y007005D03*
+X025350Y006405D03*
+X025650Y006705D03*
+X026600Y006305D03*
+X026900Y005555D03*
+X026300Y005255D03*
+X025950Y005505D03*
+X025350Y005655D03*
+X025100Y006005D03*
+X024550Y005755D03*
+X024900Y005405D03*
+X024900Y004955D03*
+X024150Y004105D03*
+X023600Y004055D03*
+X023000Y004255D03*
+X022650Y004855D03*
+X022250Y005205D03*
+X022350Y005605D03*
+X022200Y006405D03*
+X022400Y006755D03*
+X021000Y006755D03*
+X020600Y006505D03*
+X020150Y006655D03*
+X020400Y007055D03*
+X021600Y007905D03*
+X022800Y007905D03*
+X023150Y008155D03*
+X022900Y009155D03*
+X022600Y009655D03*
+X022100Y009605D03*
+X021500Y009605D03*
+X020950Y009205D03*
+X021100Y011055D03*
+X020650Y011405D03*
+X019350Y011055D03*
+X017650Y010755D03*
+X017600Y011355D03*
+X017400Y012455D03*
+X016850Y012855D03*
+X016450Y012355D03*
+X015950Y013105D03*
+X016900Y013855D03*
+X016200Y014355D03*
+X016900Y015205D03*
+X017750Y015555D03*
+X018700Y016155D03*
+X021150Y015355D03*
+X021850Y015105D03*
+X024200Y014805D03*
+X024600Y015105D03*
+X025950Y014705D03*
+X026650Y014655D03*
+X027900Y015105D03*
+X028700Y015355D03*
+X030150Y015755D03*
+X030550Y015955D03*
+X031150Y017355D03*
+X029500Y019405D03*
+X026900Y016705D03*
+X024750Y016605D03*
+X022950Y019255D03*
+X015950Y019755D03*
+X015650Y017855D03*
+X014050Y017355D03*
+X012900Y018005D03*
+X012150Y017705D03*
+X011974Y017281D03*
+X011550Y017105D03*
+X011126Y017281D03*
+X010950Y017705D03*
+X010450Y017655D03*
+X011126Y018129D03*
+X011550Y018305D03*
+X011974Y018129D03*
+X011150Y019455D03*
+X011200Y019805D03*
+X010550Y019455D03*
+X008900Y019455D03*
+X007400Y018605D03*
+X006900Y018455D03*
+X007100Y018105D03*
+X006600Y017455D03*
+X005000Y017105D03*
+X004550Y017005D03*
+X004450Y016605D03*
+X004050Y016305D03*
+X004900Y016005D03*
+X005600Y015555D03*
+X006200Y015205D03*
+X006900Y014755D03*
+X007300Y014305D03*
+X007950Y014305D03*
+X007850Y014705D03*
+X008350Y015405D03*
+X007950Y015555D03*
+X007550Y015555D03*
+X009150Y014905D03*
+X009700Y015005D03*
+X010700Y015005D03*
+X011500Y014855D03*
+X011550Y014005D03*
+X011200Y013605D03*
+X010750Y013755D03*
+X010550Y012805D03*
+X009900Y013055D03*
+X010000Y012005D03*
+X010300Y011105D03*
+X008900Y010505D03*
+X009050Y009955D03*
+X009650Y010105D03*
+X008900Y009355D03*
+X008050Y009405D03*
+X008050Y008905D03*
+X006100Y008405D03*
+X005550Y008055D03*
+X003700Y007655D03*
+X003300Y007305D03*
+X003400Y006305D03*
+X004850Y005755D03*
+X005850Y005355D03*
+X006700Y005005D03*
+X006600Y004355D03*
+X005900Y004805D03*
+X004800Y004005D03*
+X004300Y003605D03*
+X002700Y003155D03*
+X002300Y003855D03*
+X002150Y002155D03*
+X003300Y001955D03*
+X004700Y001855D03*
+X006000Y001205D03*
+X007450Y001455D03*
+X006500Y002305D03*
+X006400Y002755D03*
+X006500Y003605D03*
+X008150Y003955D03*
+X008550Y003255D03*
+X009700Y003355D03*
+X010250Y003305D03*
+X011400Y002555D03*
+X010900Y001805D03*
+X010500Y001655D03*
+X010750Y001255D03*
+X011400Y001105D03*
+X012000Y001455D03*
+X012250Y000505D03*
+X013450Y002605D03*
+X013550Y003055D03*
+X014100Y002905D03*
+X013050Y003055D03*
+X012600Y003305D03*
+X012000Y004305D03*
+X011550Y004305D03*
+X010350Y005005D03*
+X009000Y005105D03*
+X009050Y005605D03*
+X008100Y005805D03*
+X007800Y006155D03*
+X007800Y005055D03*
+X011750Y007605D03*
+X012350Y007905D03*
+X013450Y008155D03*
+X013100Y008455D03*
+X010750Y008505D03*
+X010150Y008105D03*
+X012550Y006505D03*
+X013050Y006555D03*
+X013450Y006655D03*
+X013550Y006255D03*
+X014100Y006305D03*
+X014750Y006505D03*
+X014750Y006905D03*
+X016100Y006255D03*
+X016450Y005905D03*
+X017100Y005855D03*
+X017050Y006705D03*
+X017750Y006605D03*
+X018950Y007155D03*
+X016850Y008405D03*
+X016450Y008555D03*
+X016000Y008505D03*
+X016450Y009605D03*
+X017700Y009155D03*
+X016500Y007405D03*
+X018250Y005355D03*
+X019200Y005255D03*
+X019250Y004355D03*
+X018300Y003655D03*
+X017750Y004255D03*
+X017050Y004955D03*
+X016100Y004755D03*
+X016400Y004055D03*
+X015950Y003255D03*
+X017150Y002455D03*
+X018700Y002205D03*
+X019400Y002255D03*
+X020550Y002405D03*
+X020750Y003055D03*
+X020450Y003355D03*
+X020950Y003955D03*
+X020500Y004505D03*
+X020700Y005255D03*
+X022250Y003305D03*
+X023100Y003255D03*
+X023050Y002005D03*
+X022626Y001829D03*
+X022450Y001405D03*
+X022626Y000981D03*
+X023050Y000805D03*
+X023474Y000981D03*
+X023650Y001405D03*
+X023474Y001829D03*
+X025150Y002255D03*
+X025450Y003255D03*
+X026300Y003355D03*
+X026700Y003255D03*
+X027650Y002255D03*
+X028600Y003605D03*
+X029250Y003605D03*
+X028450Y004205D03*
+X029200Y004805D03*
+X029200Y005505D03*
+X027500Y005005D03*
+X026950Y005055D03*
+X029450Y002305D03*
+X031800Y003655D03*
+X031150Y004405D03*
+X031100Y005055D03*
+X032050Y005055D03*
+X031050Y007655D03*
+X031950Y009155D03*
+X031100Y010605D03*
+X029800Y009755D03*
+X028300Y009555D03*
+X027900Y008855D03*
+X026950Y008155D03*
+X025600Y009605D03*
+X025900Y009905D03*
+X026900Y009855D03*
+X025000Y009705D03*
+X023750Y009005D03*
+X023100Y011005D03*
+X022150Y012505D03*
+X022800Y013405D03*
+X023900Y013605D03*
+X025000Y013505D03*
+X024200Y012755D03*
+X026900Y012105D03*
+X026950Y011555D03*
+X028350Y011305D03*
+X029450Y011555D03*
+X030250Y011905D03*
+X031150Y011905D03*
+X029600Y012605D03*
+X031200Y013355D03*
+X031250Y013855D03*
+X031900Y013855D03*
+X030200Y014455D03*
+X029400Y014305D03*
+X028550Y013805D03*
+X020850Y013355D03*
+X016150Y016105D03*
+X016300Y016505D03*
+X014050Y014855D03*
+X013500Y015005D03*
+X013000Y015055D03*
+X012600Y014655D03*
+X014050Y013305D03*
+X013900Y012805D03*
+X013700Y012105D03*
+X012850Y011905D03*
+X012300Y011855D03*
+X013100Y011005D03*
+X013550Y011205D03*
+X012750Y010255D03*
+X012150Y010155D03*
+X008050Y010255D03*
+X006550Y010255D03*
+X006100Y010255D03*
+X006150Y010855D03*
+X005400Y012005D03*
+X005150Y012655D03*
+X004950Y013055D03*
+X005350Y013055D03*
+X004550Y014105D03*
+X003900Y014155D03*
+X003300Y014155D03*
+X002650Y014155D03*
+X001400Y014205D03*
+X000900Y012255D03*
+X003550Y011155D03*
+X003550Y010405D03*
+X004000Y009305D03*
+X003250Y008355D03*
+X002150Y009405D03*
+X001700Y007055D03*
+X008850Y001355D03*
+X013350Y004305D03*
+X013850Y005505D03*
+X015600Y001805D03*
+X017400Y000805D03*
+X019500Y000805D03*
+X026450Y000705D03*
+X007600Y013155D03*
+X007050Y013155D03*
+X004800Y015005D03*
+X002200Y016855D03*
+X002550Y017355D03*
+X002150Y017455D03*
+X002300Y018005D03*
+X001500Y017655D03*
+X001200Y018055D03*
+X004600Y018355D03*
+X009350Y017905D03*
+D18*
+X011550Y017705D03*
+X023050Y001405D03*
+M02*
diff --git a/pcb/proxmark3_fix/CAM/proxmark3.GL2 b/pcb/proxmark3_fix/CAM/proxmark3.GL2
new file mode 100644 (file)
index 0000000..b92f2de
--- /dev/null
@@ -0,0 +1,1066 @@
+G75*
+G70*
+%OFA0B0*%
+%FSLAX24Y24*%
+%IPPOS*%
+%LPD*%
+%AMOC8*
+5,1,8,0,0,1.08239X$1,22.5*
+%
+%ADD10C,0.0010*%
+%ADD11C,0.0090*%
+%ADD12C,0.0110*%
+%ADD13C,0.0000*%
+%ADD14C,0.0675*%
+%ADD15C,0.0945*%
+%ADD16C,0.0317*%
+%ADD17C,0.1181*%
+%ADD18C,0.0080*%
+%ADD19C,0.0240*%
+D10*
+X000450Y000105D02*
+X032450Y000105D01*
+X032450Y020305D01*
+X000450Y020305D01*
+X000450Y000105D01*
+D11*
+X028802Y016600D02*
+X028802Y016874D01*
+X028802Y016737D02*
+X028939Y016874D01*
+X029008Y016874D01*
+X029186Y016805D02*
+X029186Y016668D01*
+X029254Y016600D01*
+X029391Y016600D01*
+X029460Y016668D01*
+X029460Y016805D01*
+X029391Y016874D01*
+X029254Y016874D01*
+X029186Y016805D01*
+X029646Y016874D02*
+X029646Y016668D01*
+X029715Y016600D01*
+X029920Y016600D01*
+X029920Y016874D01*
+X030107Y016874D02*
+X030244Y016874D01*
+X030175Y016942D02*
+X030175Y016668D01*
+X030244Y016600D01*
+X030414Y016668D02*
+X030482Y016600D01*
+X030619Y016600D01*
+X030687Y016737D02*
+X030414Y016737D01*
+X030414Y016805D02*
+X030482Y016874D01*
+X030619Y016874D01*
+X030687Y016805D01*
+X030687Y016737D01*
+X030874Y016874D02*
+X031011Y017010D01*
+X031011Y016600D01*
+X030874Y016600D02*
+X031148Y016600D01*
+X031335Y016668D02*
+X031403Y016600D01*
+X031540Y016600D01*
+X031608Y016668D01*
+X031608Y016805D01*
+X031540Y016874D01*
+X031471Y016874D01*
+X031335Y016805D01*
+X031335Y017010D01*
+X031608Y017010D01*
+X030414Y016805D02*
+X030414Y016668D01*
+D12*
+X035505Y021160D02*
+X035702Y021160D01*
+X035603Y021160D02*
+X035603Y021751D01*
+X035505Y021751D02*
+X035702Y021751D01*
+X035935Y021751D02*
+X036328Y021160D01*
+X036328Y021751D01*
+X036579Y021652D02*
+X036678Y021751D01*
+X036875Y021751D01*
+X036973Y021652D01*
+X036973Y021554D01*
+X036579Y021160D01*
+X036973Y021160D01*
+X035935Y021160D02*
+X035935Y021751D01*
+D13*
+X002703Y018022D02*
+X002705Y018048D01*
+X002711Y018074D01*
+X002721Y018099D01*
+X002734Y018122D01*
+X002750Y018142D01*
+X002770Y018160D01*
+X002792Y018175D01*
+X002815Y018187D01*
+X002841Y018195D01*
+X002867Y018199D01*
+X002893Y018199D01*
+X002919Y018195D01*
+X002945Y018187D01*
+X002969Y018175D01*
+X002990Y018160D01*
+X003010Y018142D01*
+X003026Y018122D01*
+X003039Y018099D01*
+X003049Y018074D01*
+X003055Y018048D01*
+X003057Y018022D01*
+X003055Y017996D01*
+X003049Y017970D01*
+X003039Y017945D01*
+X003026Y017922D01*
+X003010Y017902D01*
+X002990Y017884D01*
+X002968Y017869D01*
+X002945Y017857D01*
+X002919Y017849D01*
+X002893Y017845D01*
+X002867Y017845D01*
+X002841Y017849D01*
+X002815Y017857D01*
+X002791Y017869D01*
+X002770Y017884D01*
+X002750Y017902D01*
+X002734Y017922D01*
+X002721Y017945D01*
+X002711Y017970D01*
+X002705Y017996D01*
+X002703Y018022D01*
+X002703Y016644D02*
+X002705Y016670D01*
+X002711Y016696D01*
+X002721Y016721D01*
+X002734Y016744D01*
+X002750Y016764D01*
+X002770Y016782D01*
+X002792Y016797D01*
+X002815Y016809D01*
+X002841Y016817D01*
+X002867Y016821D01*
+X002893Y016821D01*
+X002919Y016817D01*
+X002945Y016809D01*
+X002969Y016797D01*
+X002990Y016782D01*
+X003010Y016764D01*
+X003026Y016744D01*
+X003039Y016721D01*
+X003049Y016696D01*
+X003055Y016670D01*
+X003057Y016644D01*
+X003055Y016618D01*
+X003049Y016592D01*
+X003039Y016567D01*
+X003026Y016544D01*
+X003010Y016524D01*
+X002990Y016506D01*
+X002968Y016491D01*
+X002945Y016479D01*
+X002919Y016471D01*
+X002893Y016467D01*
+X002867Y016467D01*
+X002841Y016471D01*
+X002815Y016479D01*
+X002791Y016491D01*
+X002770Y016506D01*
+X002750Y016524D01*
+X002734Y016544D01*
+X002721Y016567D01*
+X002711Y016592D01*
+X002705Y016618D01*
+X002703Y016644D01*
+X001720Y010046D02*
+X001722Y010073D01*
+X001728Y010100D01*
+X001737Y010126D01*
+X001750Y010150D01*
+X001766Y010173D01*
+X001785Y010192D01*
+X001807Y010209D01*
+X001831Y010223D01*
+X001856Y010233D01*
+X001883Y010240D01*
+X001910Y010243D01*
+X001938Y010242D01*
+X001965Y010237D01*
+X001991Y010229D01*
+X002015Y010217D01*
+X002038Y010201D01*
+X002059Y010183D01*
+X002076Y010162D01*
+X002091Y010138D01*
+X002102Y010113D01*
+X002110Y010087D01*
+X002114Y010060D01*
+X002114Y010032D01*
+X002110Y010005D01*
+X002102Y009979D01*
+X002091Y009954D01*
+X002076Y009930D01*
+X002059Y009909D01*
+X002038Y009891D01*
+X002016Y009875D01*
+X001991Y009863D01*
+X001965Y009855D01*
+X001938Y009850D01*
+X001910Y009849D01*
+X001883Y009852D01*
+X001856Y009859D01*
+X001831Y009869D01*
+X001807Y009883D01*
+X001785Y009900D01*
+X001766Y009919D01*
+X001750Y009942D01*
+X001737Y009966D01*
+X001728Y009992D01*
+X001722Y010019D01*
+X001720Y010046D01*
+X001720Y008864D02*
+X001722Y008891D01*
+X001728Y008918D01*
+X001737Y008944D01*
+X001750Y008968D01*
+X001766Y008991D01*
+X001785Y009010D01*
+X001807Y009027D01*
+X001831Y009041D01*
+X001856Y009051D01*
+X001883Y009058D01*
+X001910Y009061D01*
+X001938Y009060D01*
+X001965Y009055D01*
+X001991Y009047D01*
+X002015Y009035D01*
+X002038Y009019D01*
+X002059Y009001D01*
+X002076Y008980D01*
+X002091Y008956D01*
+X002102Y008931D01*
+X002110Y008905D01*
+X002114Y008878D01*
+X002114Y008850D01*
+X002110Y008823D01*
+X002102Y008797D01*
+X002091Y008772D01*
+X002076Y008748D01*
+X002059Y008727D01*
+X002038Y008709D01*
+X002016Y008693D01*
+X001991Y008681D01*
+X001965Y008673D01*
+X001938Y008668D01*
+X001910Y008667D01*
+X001883Y008670D01*
+X001856Y008677D01*
+X001831Y008687D01*
+X001807Y008701D01*
+X001785Y008718D01*
+X001766Y008737D01*
+X001750Y008760D01*
+X001737Y008784D01*
+X001728Y008810D01*
+X001722Y008837D01*
+X001720Y008864D01*
+D14*
+X012400Y018955D03*
+X013400Y018955D03*
+X014400Y018955D03*
+X015400Y018955D03*
+X016400Y018955D03*
+X017400Y018955D03*
+X020950Y018455D03*
+X021950Y018455D03*
+X022950Y018455D03*
+X023950Y018455D03*
+X024950Y018455D03*
+X025950Y018455D03*
+X026950Y018455D03*
+X027950Y018455D03*
+X028950Y018455D03*
+X029950Y018455D03*
+X029950Y017455D03*
+X028950Y017455D03*
+X027950Y017455D03*
+X026950Y017455D03*
+X025950Y017455D03*
+X024950Y017455D03*
+X023950Y017455D03*
+X022950Y017455D03*
+X021950Y017455D03*
+X020950Y017455D03*
+D15*
+X020115Y015140D03*
+D16*
+X021150Y015355D03*
+X021850Y015105D03*
+X024200Y014805D03*
+X024600Y015105D03*
+X025950Y014705D03*
+X026650Y014655D03*
+X027900Y015105D03*
+X028700Y015355D03*
+X030150Y015755D03*
+X030550Y015955D03*
+X031150Y017355D03*
+X029500Y019405D03*
+X026900Y016705D03*
+X024750Y016605D03*
+X022950Y019255D03*
+X018700Y016155D03*
+X017750Y015555D03*
+X016900Y015205D03*
+X016200Y014355D03*
+X016900Y013855D03*
+X015950Y013105D03*
+X016850Y012855D03*
+X016450Y012355D03*
+X017400Y012455D03*
+X017600Y011355D03*
+X017650Y010755D03*
+X019350Y011055D03*
+X020650Y011405D03*
+X021100Y011055D03*
+X023100Y011005D03*
+X025000Y009705D03*
+X025600Y009605D03*
+X025900Y009905D03*
+X026900Y009855D03*
+X027900Y008855D03*
+X028300Y009555D03*
+X029800Y009755D03*
+X031100Y010605D03*
+X029450Y011555D03*
+X030250Y011905D03*
+X031150Y011905D03*
+X029600Y012605D03*
+X031200Y013355D03*
+X031250Y013855D03*
+X031900Y013855D03*
+X030200Y014455D03*
+X029400Y014305D03*
+X028550Y013805D03*
+X026900Y012105D03*
+X026950Y011555D03*
+X028350Y011305D03*
+X025000Y013505D03*
+X023900Y013605D03*
+X022800Y013405D03*
+X024200Y012755D03*
+X022150Y012505D03*
+X020850Y013355D03*
+X016150Y016105D03*
+X016300Y016505D03*
+X015650Y017855D03*
+X014050Y017355D03*
+X012900Y018005D03*
+X012150Y017705D03*
+X011974Y017281D03*
+X011550Y017105D03*
+X011126Y017281D03*
+X010950Y017705D03*
+X010450Y017655D03*
+X011126Y018129D03*
+X011550Y018305D03*
+X011974Y018129D03*
+X011150Y019455D03*
+X011200Y019805D03*
+X010550Y019455D03*
+X008900Y019455D03*
+X007400Y018605D03*
+X006900Y018455D03*
+X007100Y018105D03*
+X006600Y017455D03*
+X005000Y017105D03*
+X004550Y017005D03*
+X004450Y016605D03*
+X004050Y016305D03*
+X004900Y016005D03*
+X005600Y015555D03*
+X006200Y015205D03*
+X006900Y014755D03*
+X007300Y014305D03*
+X007950Y014305D03*
+X007850Y014705D03*
+X008350Y015405D03*
+X007950Y015555D03*
+X007550Y015555D03*
+X009150Y014905D03*
+X009700Y015005D03*
+X010700Y015005D03*
+X011500Y014855D03*
+X011550Y014005D03*
+X011200Y013605D03*
+X010750Y013755D03*
+X010550Y012805D03*
+X009900Y013055D03*
+X010000Y012005D03*
+X010300Y011105D03*
+X008900Y010505D03*
+X009050Y009955D03*
+X009650Y010105D03*
+X008900Y009355D03*
+X008050Y009405D03*
+X008050Y008905D03*
+X006100Y008405D03*
+X005550Y008055D03*
+X003700Y007655D03*
+X003300Y007305D03*
+X003400Y006305D03*
+X004850Y005755D03*
+X005850Y005355D03*
+X006700Y005005D03*
+X006600Y004355D03*
+X005900Y004805D03*
+X004800Y004005D03*
+X004300Y003605D03*
+X002700Y003155D03*
+X002300Y003855D03*
+X002150Y002155D03*
+X003300Y001955D03*
+X004700Y001855D03*
+X006000Y001205D03*
+X007450Y001455D03*
+X006500Y002305D03*
+X006400Y002755D03*
+X006500Y003605D03*
+X008150Y003955D03*
+X008550Y003255D03*
+X009700Y003355D03*
+X010250Y003305D03*
+X011400Y002555D03*
+X010900Y001805D03*
+X010500Y001655D03*
+X010750Y001255D03*
+X011400Y001105D03*
+X012000Y001455D03*
+X012250Y000505D03*
+X013450Y002605D03*
+X013550Y003055D03*
+X014100Y002905D03*
+X013050Y003055D03*
+X012600Y003305D03*
+X012000Y004305D03*
+X011550Y004305D03*
+X010350Y005005D03*
+X009000Y005105D03*
+X009050Y005605D03*
+X008100Y005805D03*
+X007800Y006155D03*
+X007800Y005055D03*
+X011750Y007605D03*
+X012350Y007905D03*
+X013450Y008155D03*
+X013100Y008455D03*
+X010750Y008505D03*
+X010150Y008105D03*
+X012550Y006505D03*
+X013050Y006555D03*
+X013450Y006655D03*
+X013550Y006255D03*
+X014100Y006305D03*
+X014750Y006505D03*
+X014750Y006905D03*
+X016100Y006255D03*
+X016450Y005905D03*
+X017100Y005855D03*
+X017050Y006705D03*
+X017750Y006605D03*
+X018950Y007155D03*
+X020150Y006655D03*
+X020600Y006505D03*
+X021000Y006755D03*
+X020400Y007055D03*
+X021600Y007905D03*
+X022800Y007905D03*
+X023150Y008155D03*
+X024600Y008205D03*
+X025050Y008205D03*
+X025750Y008205D03*
+X026100Y007905D03*
+X025900Y007555D03*
+X026700Y007205D03*
+X026600Y006305D03*
+X025650Y006705D03*
+X025350Y006405D03*
+X025100Y006005D03*
+X025350Y005655D03*
+X024900Y005405D03*
+X024550Y005755D03*
+X024900Y004955D03*
+X024150Y004105D03*
+X023600Y004055D03*
+X023000Y004255D03*
+X022650Y004855D03*
+X022250Y005205D03*
+X022350Y005605D03*
+X022200Y006405D03*
+X022400Y006755D03*
+X024450Y007405D03*
+X024600Y007005D03*
+X026950Y008155D03*
+X027850Y006955D03*
+X029450Y006805D03*
+X031100Y006155D03*
+X031250Y005755D03*
+X031950Y006155D03*
+X032050Y005055D03*
+X031100Y005055D03*
+X031150Y004405D03*
+X031800Y003655D03*
+X029250Y003605D03*
+X028600Y003605D03*
+X028450Y004205D03*
+X029200Y004805D03*
+X029200Y005505D03*
+X027500Y005005D03*
+X026950Y005055D03*
+X026300Y005255D03*
+X025950Y005505D03*
+X026900Y005555D03*
+X026300Y003355D03*
+X026700Y003255D03*
+X025450Y003255D03*
+X025150Y002255D03*
+X023650Y001405D03*
+X023474Y000981D03*
+X023050Y000805D03*
+X022626Y000981D03*
+X022450Y001405D03*
+X022626Y001829D03*
+X023050Y002005D03*
+X023474Y001829D03*
+X023100Y003255D03*
+X022250Y003305D03*
+X020950Y003955D03*
+X020500Y004505D03*
+X020700Y005255D03*
+X019200Y005255D03*
+X019250Y004355D03*
+X018300Y003655D03*
+X017750Y004255D03*
+X017050Y004955D03*
+X016100Y004755D03*
+X016400Y004055D03*
+X015950Y003255D03*
+X017150Y002455D03*
+X018700Y002205D03*
+X019400Y002255D03*
+X020550Y002405D03*
+X020750Y003055D03*
+X020450Y003355D03*
+X018250Y005355D03*
+X016500Y007405D03*
+X016850Y008405D03*
+X016450Y008555D03*
+X016000Y008505D03*
+X016450Y009605D03*
+X017700Y009155D03*
+X020950Y009205D03*
+X021500Y009605D03*
+X022100Y009605D03*
+X022600Y009655D03*
+X022900Y009155D03*
+X023750Y009005D03*
+X031050Y007655D03*
+X031950Y009155D03*
+X029450Y002305D03*
+X027650Y002255D03*
+X026450Y000705D03*
+X019500Y000805D03*
+X017400Y000805D03*
+X015600Y001805D03*
+X013350Y004305D03*
+X013850Y005505D03*
+X008850Y001355D03*
+X001700Y007055D03*
+X003250Y008355D03*
+X004000Y009305D03*
+X003550Y010405D03*
+X003550Y011155D03*
+X005400Y012005D03*
+X005150Y012655D03*
+X004950Y013055D03*
+X005350Y013055D03*
+X004550Y014105D03*
+X003900Y014155D03*
+X003300Y014155D03*
+X002650Y014155D03*
+X001400Y014205D03*
+X000900Y012255D03*
+X002150Y009405D03*
+X006100Y010255D03*
+X006550Y010255D03*
+X006150Y010855D03*
+X008050Y010255D03*
+X012150Y010155D03*
+X012750Y010255D03*
+X013100Y011005D03*
+X013550Y011205D03*
+X012850Y011905D03*
+X012300Y011855D03*
+X013700Y012105D03*
+X013900Y012805D03*
+X014050Y013305D03*
+X012600Y014655D03*
+X013000Y015055D03*
+X013500Y015005D03*
+X014050Y014855D03*
+X009350Y017905D03*
+X004600Y018355D03*
+X002550Y017355D03*
+X002150Y017455D03*
+X002300Y018005D03*
+X001500Y017655D03*
+X001200Y018055D03*
+X002200Y016855D03*
+X004800Y015005D03*
+X007050Y013155D03*
+X007600Y013155D03*
+X015950Y019755D03*
+D17*
+X011550Y017705D03*
+X023050Y001405D03*
+D18*
+X022600Y002905D02*
+X020800Y001105D01*
+X015150Y001105D01*
+X014500Y001755D01*
+X010950Y001755D01*
+X010900Y001805D01*
+X011400Y002555D02*
+X011400Y003205D01*
+X011500Y003305D01*
+X012600Y003305D01*
+X011400Y003205D02*
+X010350Y003205D01*
+X010250Y003305D01*
+X011200Y003955D02*
+X011550Y004305D01*
+X011200Y003955D02*
+X008150Y003955D01*
+X008050Y004805D02*
+X007800Y005055D01*
+X008050Y004805D02*
+X009200Y004805D01*
+X010250Y005855D01*
+X014100Y005855D01*
+X014500Y005455D01*
+X017450Y005455D01*
+X018100Y006105D01*
+X024450Y006105D01*
+X024750Y006405D01*
+X025350Y006405D01*
+X025100Y006655D02*
+X025250Y006805D01*
+X025550Y006805D01*
+X025650Y006705D01*
+X025100Y006655D02*
+X024450Y006655D01*
+X024050Y007055D01*
+X020400Y007055D01*
+X019750Y007355D02*
+X023550Y007355D01*
+X023900Y007705D01*
+X024600Y007705D01*
+X024750Y007555D01*
+X025900Y007555D01*
+X026100Y007905D02*
+X023800Y007905D01*
+X023450Y007555D01*
+X016700Y007555D01*
+X016500Y007355D01*
+X016500Y007405D01*
+X016600Y007105D02*
+X016150Y007105D01*
+X016000Y007255D01*
+X016000Y008505D01*
+X015450Y008855D02*
+X015000Y008405D01*
+X014250Y008405D01*
+X013650Y007805D01*
+X012950Y007805D01*
+X012500Y008255D01*
+X012500Y009805D01*
+X012150Y010155D01*
+X012750Y010255D02*
+X024550Y010255D01*
+X025000Y009805D01*
+X025000Y009705D01*
+X025350Y009355D02*
+X024200Y009355D01*
+X023500Y010055D01*
+X022200Y010055D01*
+X022100Y009955D01*
+X022100Y009605D01*
+X022600Y009655D02*
+X022700Y009555D01*
+X023650Y009555D01*
+X024100Y009105D01*
+X025750Y009105D01*
+X026200Y009555D01*
+X028300Y009555D01*
+X026900Y009855D02*
+X026300Y010455D01*
+X013000Y010455D01*
+X012850Y010605D01*
+X009950Y010605D01*
+X009650Y010305D01*
+X009650Y010105D01*
+X010050Y010855D02*
+X010300Y011105D01*
+X010050Y010855D02*
+X006150Y010855D01*
+X008900Y009355D02*
+X011400Y009355D01*
+X012300Y008455D01*
+X012300Y007955D01*
+X012350Y007905D01*
+X013450Y008155D02*
+X013450Y008205D01*
+X013850Y008605D01*
+X014950Y008605D01*
+X015400Y009055D01*
+X016950Y009055D01*
+X017350Y008655D01*
+X024050Y008655D01*
+X024300Y008905D01*
+X025050Y008905D01*
+X025400Y008555D01*
+X025750Y008205D01*
+X025100Y008205D02*
+X025050Y008205D01*
+X025050Y008555D01*
+X024950Y008655D01*
+X024350Y008655D01*
+X024150Y008455D01*
+X017250Y008455D01*
+X016850Y008855D01*
+X015450Y008855D01*
+X015300Y009255D02*
+X014850Y008805D01*
+X013450Y008805D01*
+X013100Y008455D01*
+X015300Y009255D02*
+X017000Y009255D01*
+X017400Y008855D01*
+X023100Y008855D01*
+X023250Y009005D01*
+X023750Y009005D01*
+X025300Y008655D02*
+X025400Y008555D01*
+X025350Y009355D02*
+X025600Y009605D01*
+X024550Y010655D02*
+X023550Y011655D01*
+X020900Y011655D01*
+X020650Y011405D01*
+X022800Y010705D02*
+X023100Y011005D01*
+X022800Y010705D02*
+X017700Y010705D01*
+X017650Y010755D01*
+X017450Y011205D02*
+X017600Y011355D01*
+X017450Y011205D02*
+X013550Y011205D01*
+X012850Y011905D02*
+X012850Y012055D01*
+X012550Y012355D01*
+X001000Y012355D01*
+X000900Y012255D01*
+X002650Y013505D02*
+X002800Y013355D01*
+X006850Y013355D01*
+X007050Y013155D01*
+X007600Y014105D02*
+X008050Y013655D01*
+X010650Y013655D01*
+X010750Y013755D01*
+X010400Y013105D02*
+X013200Y013105D01*
+X013700Y012605D01*
+X013700Y012105D01*
+X014050Y013305D02*
+X010150Y013305D01*
+X009900Y013055D01*
+X010050Y012755D02*
+X005650Y012755D01*
+X005350Y013055D01*
+X004550Y014105D02*
+X007100Y014105D01*
+X007300Y014305D01*
+X007050Y014455D02*
+X007250Y014655D01*
+X007500Y014655D01*
+X007600Y014555D01*
+X007600Y014105D01*
+X007950Y014305D02*
+X008000Y014355D01*
+X016200Y014355D01*
+X015850Y014555D02*
+X016050Y014755D01*
+X016300Y014755D01*
+X016650Y014405D01*
+X016650Y014105D01*
+X016900Y013855D01*
+X015850Y014555D02*
+X013850Y014555D01*
+X013750Y014655D01*
+X012600Y014655D01*
+X011900Y014855D02*
+X012400Y015355D01*
+X016300Y015355D01*
+X016900Y014755D01*
+X019300Y014755D01*
+X019650Y014405D01*
+X022150Y014405D01*
+X022650Y013905D01*
+X022900Y013905D01*
+X023550Y013255D01*
+X024750Y013255D01*
+X025700Y012305D01*
+X026700Y012305D01*
+X026900Y012105D01*
+X028350Y011305D02*
+X028600Y011055D01*
+X031450Y011055D01*
+X031650Y010855D01*
+X031650Y007555D01*
+X031500Y007405D01*
+X031250Y007155D01*
+X030600Y007155D01*
+X030350Y007405D01*
+X027650Y007405D01*
+X027450Y007205D01*
+X026700Y007205D01*
+X026500Y007005D02*
+X027100Y006405D01*
+X030800Y006405D01*
+X030950Y006555D01*
+X031350Y006555D01*
+X031600Y006305D01*
+X031600Y006105D01*
+X031250Y005755D01*
+X031100Y005405D02*
+X030650Y005855D01*
+X027750Y005855D01*
+X026950Y005055D01*
+X025900Y004705D02*
+X029100Y004705D01*
+X029200Y004805D01*
+X028950Y003905D02*
+X028200Y003905D01*
+X027800Y004305D01*
+X025000Y004305D01*
+X024800Y004505D01*
+X023900Y004505D01*
+X023600Y004205D01*
+X023600Y004055D01*
+X023000Y004255D02*
+X023000Y004405D01*
+X023400Y004805D01*
+X024750Y004805D01*
+X024900Y004955D01*
+X024900Y005405D02*
+X025200Y005405D01*
+X025900Y004705D01*
+X025800Y003705D02*
+X026650Y003705D01*
+X026750Y003605D01*
+X028600Y003605D01*
+X028950Y003905D02*
+X029250Y003605D01*
+X026300Y003355D02*
+X025850Y002905D01*
+X022600Y002905D01*
+X022400Y002955D02*
+X022600Y003155D01*
+X023000Y003155D01*
+X023100Y003255D01*
+X022400Y002955D02*
+X022150Y002955D01*
+X021750Y003355D01*
+X020450Y003355D01*
+X020750Y003705D02*
+X020900Y003555D01*
+X022000Y003555D01*
+X022100Y003655D01*
+X025750Y003655D01*
+X025800Y003705D01*
+X025350Y005655D02*
+X025650Y005955D01*
+X027350Y005955D01*
+X027450Y006055D01*
+X031000Y006055D01*
+X031100Y006155D01*
+X031950Y006155D02*
+X031950Y005555D01*
+X031800Y005405D01*
+X031100Y005405D01*
+X026500Y007005D02*
+X024600Y007005D01*
+X023650Y005905D02*
+X023800Y005755D01*
+X024550Y005755D01*
+X023650Y005905D02*
+X020850Y005905D01*
+X020700Y005755D01*
+X020700Y005255D01*
+X020750Y003705D02*
+X019500Y003705D01*
+X019100Y003305D01*
+X017950Y003305D01*
+X017650Y003605D01*
+X016850Y003605D01*
+X016400Y004055D01*
+X013850Y005505D02*
+X011850Y005505D01*
+X010900Y004555D01*
+X007150Y004555D01*
+X006700Y005005D01*
+X006600Y004355D02*
+X011050Y004355D01*
+X011350Y004655D01*
+X012900Y004655D01*
+X013250Y004305D01*
+X013350Y004305D01*
+X009000Y005105D02*
+X008750Y005355D01*
+X005850Y005355D01*
+X004850Y005755D02*
+X008050Y005755D01*
+X008100Y005805D01*
+X016600Y007105D02*
+X016850Y007355D01*
+X017700Y007355D01*
+X018250Y006805D01*
+X019200Y006805D01*
+X019750Y007355D01*
+X017700Y009105D02*
+X017650Y009155D01*
+X017700Y009155D02*
+X018150Y009605D01*
+X021500Y009605D01*
+X024550Y010655D02*
+X031000Y010655D01*
+X031050Y010605D01*
+X031100Y010605D01*
+X031200Y013355D02*
+X025150Y013355D01*
+X025000Y013505D01*
+X024100Y013805D02*
+X023900Y013605D01*
+X024100Y013805D02*
+X028550Y013805D01*
+X030200Y014455D02*
+X028800Y015855D01*
+X019750Y015855D01*
+X019100Y015205D01*
+X016900Y015205D01*
+X017750Y015555D02*
+X008500Y015555D01*
+X008350Y015405D01*
+X008950Y015105D02*
+X009150Y014905D01*
+X008950Y015105D02*
+X006750Y015105D01*
+X006500Y014855D01*
+X004950Y014855D01*
+X004800Y015005D01*
+X005600Y015555D02*
+X005900Y015855D01*
+X012900Y015855D01*
+X013550Y016505D01*
+X016300Y016505D01*
+X015650Y017855D02*
+X015100Y018405D01*
+X012250Y018405D01*
+X012000Y018655D01*
+X011100Y018655D01*
+X010450Y018005D01*
+X010450Y017655D01*
+X009850Y017055D02*
+X005050Y017055D01*
+X005000Y017105D01*
+X004850Y016705D02*
+X004550Y017005D01*
+X004850Y016705D02*
+X005750Y016705D01*
+X005900Y016855D01*
+X009600Y016855D01*
+X010400Y016055D01*
+X012500Y016055D01*
+X013300Y016855D01*
+X019650Y016855D01*
+X020450Y016055D01*
+X029850Y016055D01*
+X030150Y015755D01*
+X030550Y015955D02*
+X030250Y016255D01*
+X020500Y016255D01*
+X019700Y017055D01*
+X013000Y017055D01*
+X012200Y016255D01*
+X010650Y016255D01*
+X009850Y017055D01*
+X008550Y018105D02*
+X009900Y019455D01*
+X010550Y019455D01*
+X008550Y018105D02*
+X007100Y018105D01*
+X011500Y014855D02*
+X011900Y014855D01*
+X010400Y013105D02*
+X010050Y012755D01*
+X007050Y014455D02*
+X001650Y014455D01*
+X001400Y014205D01*
+X002650Y014155D02*
+X002650Y013505D01*
+X016850Y012855D02*
+X024100Y012855D01*
+X024200Y012755D01*
+X024800Y014505D02*
+X022450Y014505D01*
+X021850Y015105D01*
+X021450Y015655D02*
+X021150Y015355D01*
+X021450Y015655D02*
+X028400Y015655D01*
+X028700Y015355D01*
+X025950Y014705D02*
+X025950Y014655D01*
+X025800Y014805D01*
+X025100Y014805D01*
+X024800Y014505D01*
+X017700Y009155D02*
+X017700Y009105D01*
+D19*
+X020650Y016605D02*
+X024750Y016605D01*
+X020650Y016605D02*
+X019850Y017405D01*
+X015000Y017405D01*
+X014400Y018005D01*
+X012900Y018005D01*
+X012750Y017355D02*
+X014050Y017355D01*
+X012750Y017355D02*
+X012050Y016655D01*
+X010800Y016655D01*
+X010100Y017355D01*
+X006700Y017355D01*
+X006600Y017455D01*
+M02*
diff --git a/pcb/proxmark3_fix/CAM/proxmark3.GML b/pcb/proxmark3_fix/CAM/proxmark3.GML
new file mode 100644 (file)
index 0000000..90d9b04
--- /dev/null
@@ -0,0 +1,197 @@
+G75*
+G70*
+%OFA0B0*%
+%FSLAX24Y24*%
+%IPPOS*%
+%LPD*%
+%AMOC8*
+5,1,8,0,0,1.08239X$1,22.5*
+%
+%ADD10C,0.0010*%
+%ADD11C,0.0000*%
+D10*
+X000450Y000105D02*
+X032450Y000105D01*
+X032450Y020305D01*
+X000450Y020305D01*
+X000450Y000105D01*
+D11*
+X001720Y008864D02*
+X001722Y008891D01*
+X001728Y008918D01*
+X001737Y008944D01*
+X001750Y008968D01*
+X001766Y008991D01*
+X001785Y009010D01*
+X001807Y009027D01*
+X001831Y009041D01*
+X001856Y009051D01*
+X001883Y009058D01*
+X001910Y009061D01*
+X001938Y009060D01*
+X001965Y009055D01*
+X001991Y009047D01*
+X002015Y009035D01*
+X002038Y009019D01*
+X002059Y009001D01*
+X002076Y008980D01*
+X002091Y008956D01*
+X002102Y008931D01*
+X002110Y008905D01*
+X002114Y008878D01*
+X002114Y008850D01*
+X002110Y008823D01*
+X002102Y008797D01*
+X002091Y008772D01*
+X002076Y008748D01*
+X002059Y008727D01*
+X002038Y008709D01*
+X002016Y008693D01*
+X001991Y008681D01*
+X001965Y008673D01*
+X001938Y008668D01*
+X001910Y008667D01*
+X001883Y008670D01*
+X001856Y008677D01*
+X001831Y008687D01*
+X001807Y008701D01*
+X001785Y008718D01*
+X001766Y008737D01*
+X001750Y008760D01*
+X001737Y008784D01*
+X001728Y008810D01*
+X001722Y008837D01*
+X001720Y008864D01*
+X001720Y010046D02*
+X001722Y010073D01*
+X001728Y010100D01*
+X001737Y010126D01*
+X001750Y010150D01*
+X001766Y010173D01*
+X001785Y010192D01*
+X001807Y010209D01*
+X001831Y010223D01*
+X001856Y010233D01*
+X001883Y010240D01*
+X001910Y010243D01*
+X001938Y010242D01*
+X001965Y010237D01*
+X001991Y010229D01*
+X002015Y010217D01*
+X002038Y010201D01*
+X002059Y010183D01*
+X002076Y010162D01*
+X002091Y010138D01*
+X002102Y010113D01*
+X002110Y010087D01*
+X002114Y010060D01*
+X002114Y010032D01*
+X002110Y010005D01*
+X002102Y009979D01*
+X002091Y009954D01*
+X002076Y009930D01*
+X002059Y009909D01*
+X002038Y009891D01*
+X002016Y009875D01*
+X001991Y009863D01*
+X001965Y009855D01*
+X001938Y009850D01*
+X001910Y009849D01*
+X001883Y009852D01*
+X001856Y009859D01*
+X001831Y009869D01*
+X001807Y009883D01*
+X001785Y009900D01*
+X001766Y009919D01*
+X001750Y009942D01*
+X001737Y009966D01*
+X001728Y009992D01*
+X001722Y010019D01*
+X001720Y010046D01*
+X002703Y016644D02*
+X002705Y016670D01*
+X002711Y016696D01*
+X002721Y016721D01*
+X002734Y016744D01*
+X002750Y016764D01*
+X002770Y016782D01*
+X002792Y016797D01*
+X002815Y016809D01*
+X002841Y016817D01*
+X002867Y016821D01*
+X002893Y016821D01*
+X002919Y016817D01*
+X002945Y016809D01*
+X002969Y016797D01*
+X002990Y016782D01*
+X003010Y016764D01*
+X003026Y016744D01*
+X003039Y016721D01*
+X003049Y016696D01*
+X003055Y016670D01*
+X003057Y016644D01*
+X003055Y016618D01*
+X003049Y016592D01*
+X003039Y016567D01*
+X003026Y016544D01*
+X003010Y016524D01*
+X002990Y016506D01*
+X002968Y016491D01*
+X002945Y016479D01*
+X002919Y016471D01*
+X002893Y016467D01*
+X002867Y016467D01*
+X002841Y016471D01*
+X002815Y016479D01*
+X002791Y016491D01*
+X002770Y016506D01*
+X002750Y016524D01*
+X002734Y016544D01*
+X002721Y016567D01*
+X002711Y016592D01*
+X002705Y016618D01*
+X002703Y016644D01*
+X002703Y018022D02*
+X002705Y018048D01*
+X002711Y018074D01*
+X002721Y018099D01*
+X002734Y018122D01*
+X002750Y018142D01*
+X002770Y018160D01*
+X002792Y018175D01*
+X002815Y018187D01*
+X002841Y018195D01*
+X002867Y018199D01*
+X002893Y018199D01*
+X002919Y018195D01*
+X002945Y018187D01*
+X002969Y018175D01*
+X002990Y018160D01*
+X003010Y018142D01*
+X003026Y018122D01*
+X003039Y018099D01*
+X003049Y018074D01*
+X003055Y018048D01*
+X003057Y018022D01*
+X003055Y017996D01*
+X003049Y017970D01*
+X003039Y017945D01*
+X003026Y017922D01*
+X003010Y017902D01*
+X002990Y017884D01*
+X002968Y017869D01*
+X002945Y017857D01*
+X002919Y017849D01*
+X002893Y017845D01*
+X002867Y017845D01*
+X002841Y017849D01*
+X002815Y017857D01*
+X002791Y017869D01*
+X002770Y017884D01*
+X002750Y017902D01*
+X002734Y017922D01*
+X002721Y017945D01*
+X002711Y017970D01*
+X002705Y017996D01*
+X002703Y018022D01*
+M02*
diff --git a/pcb/proxmark3_fix/CAM/proxmark3.GTL b/pcb/proxmark3_fix/CAM/proxmark3.GTL
new file mode 100644 (file)
index 0000000..d3ed70f
--- /dev/null
@@ -0,0 +1,13664 @@
+G75*
+G70*
+%OFA0B0*%
+%FSLAX24Y24*%
+%IPPOS*%
+%LPD*%
+%AMOC8*
+5,1,8,0,0,1.08239X$1,22.5*
+%
+%ADD10C,0.0010*%
+%ADD11C,0.0160*%
+%ADD12C,0.0090*%
+%ADD13C,0.0110*%
+%ADD14R,0.0591X0.0157*%
+%ADD15R,0.0906X0.0197*%
+%ADD16R,0.1378X0.1378*%
+%ADD17C,0.0000*%
+%ADD18R,0.0433X0.0394*%
+%ADD19R,0.0591X0.0098*%
+%ADD20R,0.0098X0.0492*%
+%ADD21R,0.0945X0.0945*%
+%ADD22R,0.0591X0.0197*%
+%ADD23R,0.0098X0.0787*%
+%ADD24R,0.0787X0.0098*%
+%ADD25R,0.1496X0.0906*%
+%ADD26R,0.0984X0.0217*%
+%ADD27R,0.0142X0.0512*%
+%ADD28R,0.0394X0.0433*%
+%ADD29R,0.1142X0.0591*%
+%ADD30R,0.0675X0.0675*%
+%ADD31C,0.0675*%
+%ADD32R,0.0400X0.0400*%
+%ADD33R,0.0400X0.0700*%
+%ADD34R,0.0700X0.0400*%
+%ADD35R,0.0118X0.0591*%
+%ADD36R,0.0142X0.0551*%
+%ADD37R,0.0512X0.0591*%
+%ADD38R,0.0128X0.0709*%
+%ADD39R,0.0260X0.0800*%
+%ADD40R,0.0591X0.1142*%
+%ADD41R,0.0402X0.0161*%
+%ADD42R,0.0394X0.1181*%
+%ADD43R,0.1181X0.0591*%
+%ADD44R,0.1378X0.0591*%
+%ADD45R,0.0591X0.1378*%
+%ADD46R,0.0700X0.1350*%
+%ADD47R,0.1350X0.0700*%
+%ADD48C,0.0945*%
+%ADD49R,0.0800X0.0260*%
+%ADD50C,0.0080*%
+%ADD51C,0.0317*%
+%ADD52C,0.1575*%
+%ADD53C,0.0240*%
+D10*
+X000450Y000105D02*
+X032450Y000105D01*
+X032450Y020305D01*
+X000450Y020305D01*
+X000450Y000105D01*
+D11*
+X002750Y002505D02*
+X002752Y002518D01*
+X002757Y002531D01*
+X002766Y002542D01*
+X002777Y002549D01*
+X002790Y002554D01*
+X002803Y002555D01*
+X002817Y002552D01*
+X002829Y002546D01*
+X002839Y002537D01*
+X002846Y002525D01*
+X002850Y002512D01*
+X002850Y002498D01*
+X002846Y002485D01*
+X002839Y002473D01*
+X002829Y002464D01*
+X002817Y002458D01*
+X002803Y002455D01*
+X002790Y002456D01*
+X002777Y002461D01*
+X002766Y002468D01*
+X002757Y002479D01*
+X002752Y002492D01*
+X002750Y002505D01*
+X005900Y002055D02*
+X006500Y001455D01*
+X006905Y001455D01*
+X005900Y002055D02*
+X005900Y004805D01*
+X005400Y004805D01*
+X005350Y004755D01*
+X005318Y004787D01*
+X005400Y004787D01*
+X009700Y003355D02*
+X009850Y003355D01*
+X009900Y003405D01*
+X009900Y003820D01*
+X009965Y003820D01*
+X010300Y004155D01*
+X011150Y004155D01*
+X011268Y004037D01*
+X011268Y003555D01*
+X012000Y001870D02*
+X012000Y001455D01*
+X021600Y000955D02*
+X021602Y000968D01*
+X021607Y000981D01*
+X021616Y000992D01*
+X021627Y000999D01*
+X021640Y001004D01*
+X021653Y001005D01*
+X021667Y001002D01*
+X021679Y000996D01*
+X021689Y000987D01*
+X021696Y000975D01*
+X021700Y000962D01*
+X021700Y000948D01*
+X021696Y000935D01*
+X021689Y000923D01*
+X021679Y000914D01*
+X021667Y000908D01*
+X021653Y000905D01*
+X021640Y000906D01*
+X021627Y000911D01*
+X021616Y000918D01*
+X021607Y000929D01*
+X021602Y000942D01*
+X021600Y000955D01*
+X029050Y004155D02*
+X029052Y004168D01*
+X029057Y004181D01*
+X029066Y004192D01*
+X029077Y004199D01*
+X029090Y004204D01*
+X029103Y004205D01*
+X029117Y004202D01*
+X029129Y004196D01*
+X029139Y004187D01*
+X029146Y004175D01*
+X029150Y004162D01*
+X029150Y004148D01*
+X029146Y004135D01*
+X029139Y004123D01*
+X029129Y004114D01*
+X029117Y004108D01*
+X029103Y004105D01*
+X029090Y004106D01*
+X029077Y004111D01*
+X029066Y004118D01*
+X029057Y004129D01*
+X029052Y004142D01*
+X029050Y004155D01*
+X014550Y007755D02*
+X014552Y007768D01*
+X014557Y007781D01*
+X014566Y007792D01*
+X014577Y007799D01*
+X014590Y007804D01*
+X014603Y007805D01*
+X014617Y007802D01*
+X014629Y007796D01*
+X014639Y007787D01*
+X014646Y007775D01*
+X014650Y007762D01*
+X014650Y007748D01*
+X014646Y007735D01*
+X014639Y007723D01*
+X014629Y007714D01*
+X014617Y007708D01*
+X014603Y007705D01*
+X014590Y007706D01*
+X014577Y007711D01*
+X014566Y007718D01*
+X014557Y007729D01*
+X014552Y007742D01*
+X014550Y007755D01*
+X012300Y009605D02*
+X011900Y009605D01*
+X011785Y009490D01*
+X011750Y009490D01*
+X011750Y009455D01*
+X010700Y010505D01*
+X008900Y010505D01*
+X008900Y010805D01*
+X008965Y010870D01*
+X008965Y010905D01*
+X006850Y009855D02*
+X006550Y009855D01*
+X006150Y009455D01*
+X005800Y009455D01*
+X005800Y009490D01*
+X005735Y009490D01*
+X005800Y009555D01*
+X005800Y009955D01*
+X006100Y010255D01*
+X005735Y009490D02*
+X005700Y009455D01*
+X004900Y016005D02*
+X005000Y016105D01*
+X005250Y016105D01*
+X006535Y016955D02*
+X006535Y017390D01*
+X006600Y017455D01*
+X006900Y017705D02*
+X006750Y017855D01*
+X005950Y017855D01*
+X005820Y017725D01*
+X005770Y017725D01*
+X005750Y017705D01*
+X005835Y017670D02*
+X005700Y017805D01*
+X005700Y017855D01*
+X005600Y017955D01*
+X005600Y018655D01*
+X005700Y018755D01*
+X006200Y018755D01*
+X006750Y018755D01*
+X006965Y018970D01*
+X007000Y018970D01*
+X007400Y018605D02*
+X007400Y019605D01*
+X007315Y019690D01*
+X007035Y019690D01*
+X007000Y019655D01*
+X007000Y019640D01*
+X007550Y018755D02*
+X007400Y018605D01*
+X007550Y018755D02*
+X008200Y018755D01*
+X008800Y018055D02*
+X008800Y017855D01*
+X008700Y017755D01*
+X008570Y017625D01*
+X008462Y017625D01*
+X008670Y017725D02*
+X008700Y017755D01*
+X008800Y018055D02*
+X009270Y018525D01*
+X009520Y018525D01*
+X009550Y018555D01*
+X009550Y018546D01*
+X009550Y018505D01*
+X009600Y018555D01*
+X010450Y018555D01*
+X010850Y018955D01*
+X012400Y018955D01*
+X009600Y018605D02*
+X009550Y018555D01*
+X007340Y017625D02*
+X007180Y017625D01*
+X007096Y017709D01*
+X007096Y017725D01*
+X006900Y017725D01*
+X005850Y017655D02*
+X005835Y017670D01*
+X005835Y017655D01*
+X005200Y017705D02*
+X005200Y018570D01*
+X004943Y017962D02*
+X005150Y017755D01*
+X004943Y017962D02*
+X003687Y017962D01*
+X019550Y018955D02*
+X019552Y018968D01*
+X019557Y018981D01*
+X019566Y018992D01*
+X019577Y018999D01*
+X019590Y019004D01*
+X019603Y019005D01*
+X019617Y019002D01*
+X019629Y018996D01*
+X019639Y018987D01*
+X019646Y018975D01*
+X019650Y018962D01*
+X019650Y018948D01*
+X019646Y018935D01*
+X019639Y018923D01*
+X019629Y018914D01*
+X019617Y018908D01*
+X019603Y018905D01*
+X019590Y018906D01*
+X019577Y018911D01*
+X019566Y018918D01*
+X019557Y018929D01*
+X019552Y018942D01*
+X019550Y018955D01*
+X030650Y019205D02*
+X030652Y019218D01*
+X030657Y019231D01*
+X030666Y019242D01*
+X030677Y019249D01*
+X030690Y019254D01*
+X030703Y019255D01*
+X030717Y019252D01*
+X030729Y019246D01*
+X030739Y019237D01*
+X030746Y019225D01*
+X030750Y019212D01*
+X030750Y019198D01*
+X030746Y019185D01*
+X030739Y019173D01*
+X030729Y019164D01*
+X030717Y019158D01*
+X030703Y019155D01*
+X030690Y019156D01*
+X030677Y019161D01*
+X030666Y019168D01*
+X030657Y019179D01*
+X030652Y019192D01*
+X030650Y019205D01*
+D12*
+X031850Y010463D02*
+X031781Y010395D01*
+X031781Y010190D01*
+X032192Y010190D01*
+X032055Y010190D02*
+X032055Y010395D01*
+X031987Y010463D01*
+X031850Y010463D01*
+X031850Y010003D02*
+X031781Y009934D01*
+X031781Y009798D01*
+X031850Y009729D01*
+X031987Y009729D01*
+X032055Y009798D01*
+X032055Y009934D01*
+X031987Y010003D01*
+X031850Y010003D01*
+X031781Y009559D02*
+X031781Y009422D01*
+X031713Y009491D02*
+X031987Y009491D01*
+X032055Y009559D01*
+D13*
+X035702Y023160D02*
+X035702Y023751D01*
+X035505Y023751D02*
+X035899Y023751D01*
+X036150Y023652D02*
+X036150Y023258D01*
+X036248Y023160D01*
+X036445Y023160D01*
+X036543Y023258D01*
+X036543Y023652D01*
+X036445Y023751D01*
+X036248Y023751D01*
+X036150Y023652D01*
+X036794Y023751D02*
+X036794Y023160D01*
+X036794Y023357D02*
+X037089Y023357D01*
+X037188Y023455D01*
+X037188Y023652D01*
+X037089Y023751D01*
+X036794Y023751D01*
+D14*
+X015910Y011683D03*
+X015910Y011309D03*
+X015910Y010935D03*
+X014788Y010935D03*
+X014788Y011683D03*
+X008462Y016877D03*
+X007340Y016877D03*
+X007340Y017251D03*
+X007340Y017625D03*
+X008462Y017625D03*
+D15*
+X003687Y017648D03*
+X003687Y017962D03*
+X003687Y017333D03*
+X003687Y017018D03*
+X003687Y016703D03*
+D16*
+X003766Y015325D03*
+X001994Y015325D03*
+X001994Y019340D03*
+X003766Y019340D03*
+D17*
+X002703Y018022D02*
+X002705Y018048D01*
+X002711Y018074D01*
+X002721Y018099D01*
+X002734Y018122D01*
+X002750Y018142D01*
+X002770Y018160D01*
+X002792Y018175D01*
+X002815Y018187D01*
+X002841Y018195D01*
+X002867Y018199D01*
+X002893Y018199D01*
+X002919Y018195D01*
+X002945Y018187D01*
+X002969Y018175D01*
+X002990Y018160D01*
+X003010Y018142D01*
+X003026Y018122D01*
+X003039Y018099D01*
+X003049Y018074D01*
+X003055Y018048D01*
+X003057Y018022D01*
+X003055Y017996D01*
+X003049Y017970D01*
+X003039Y017945D01*
+X003026Y017922D01*
+X003010Y017902D01*
+X002990Y017884D01*
+X002968Y017869D01*
+X002945Y017857D01*
+X002919Y017849D01*
+X002893Y017845D01*
+X002867Y017845D01*
+X002841Y017849D01*
+X002815Y017857D01*
+X002791Y017869D01*
+X002770Y017884D01*
+X002750Y017902D01*
+X002734Y017922D01*
+X002721Y017945D01*
+X002711Y017970D01*
+X002705Y017996D01*
+X002703Y018022D01*
+X002703Y016644D02*
+X002705Y016670D01*
+X002711Y016696D01*
+X002721Y016721D01*
+X002734Y016744D01*
+X002750Y016764D01*
+X002770Y016782D01*
+X002792Y016797D01*
+X002815Y016809D01*
+X002841Y016817D01*
+X002867Y016821D01*
+X002893Y016821D01*
+X002919Y016817D01*
+X002945Y016809D01*
+X002969Y016797D01*
+X002990Y016782D01*
+X003010Y016764D01*
+X003026Y016744D01*
+X003039Y016721D01*
+X003049Y016696D01*
+X003055Y016670D01*
+X003057Y016644D01*
+X003055Y016618D01*
+X003049Y016592D01*
+X003039Y016567D01*
+X003026Y016544D01*
+X003010Y016524D01*
+X002990Y016506D01*
+X002968Y016491D01*
+X002945Y016479D01*
+X002919Y016471D01*
+X002893Y016467D01*
+X002867Y016467D01*
+X002841Y016471D01*
+X002815Y016479D01*
+X002791Y016491D01*
+X002770Y016506D01*
+X002750Y016524D01*
+X002734Y016544D01*
+X002721Y016567D01*
+X002711Y016592D01*
+X002705Y016618D01*
+X002703Y016644D01*
+X001720Y010046D02*
+X001722Y010073D01*
+X001728Y010100D01*
+X001737Y010126D01*
+X001750Y010150D01*
+X001766Y010173D01*
+X001785Y010192D01*
+X001807Y010209D01*
+X001831Y010223D01*
+X001856Y010233D01*
+X001883Y010240D01*
+X001910Y010243D01*
+X001938Y010242D01*
+X001965Y010237D01*
+X001991Y010229D01*
+X002015Y010217D01*
+X002038Y010201D01*
+X002059Y010183D01*
+X002076Y010162D01*
+X002091Y010138D01*
+X002102Y010113D01*
+X002110Y010087D01*
+X002114Y010060D01*
+X002114Y010032D01*
+X002110Y010005D01*
+X002102Y009979D01*
+X002091Y009954D01*
+X002076Y009930D01*
+X002059Y009909D01*
+X002038Y009891D01*
+X002016Y009875D01*
+X001991Y009863D01*
+X001965Y009855D01*
+X001938Y009850D01*
+X001910Y009849D01*
+X001883Y009852D01*
+X001856Y009859D01*
+X001831Y009869D01*
+X001807Y009883D01*
+X001785Y009900D01*
+X001766Y009919D01*
+X001750Y009942D01*
+X001737Y009966D01*
+X001728Y009992D01*
+X001722Y010019D01*
+X001720Y010046D01*
+X001720Y008864D02*
+X001722Y008891D01*
+X001728Y008918D01*
+X001737Y008944D01*
+X001750Y008968D01*
+X001766Y008991D01*
+X001785Y009010D01*
+X001807Y009027D01*
+X001831Y009041D01*
+X001856Y009051D01*
+X001883Y009058D01*
+X001910Y009061D01*
+X001938Y009060D01*
+X001965Y009055D01*
+X001991Y009047D01*
+X002015Y009035D01*
+X002038Y009019D01*
+X002059Y009001D01*
+X002076Y008980D01*
+X002091Y008956D01*
+X002102Y008931D01*
+X002110Y008905D01*
+X002114Y008878D01*
+X002114Y008850D01*
+X002110Y008823D01*
+X002102Y008797D01*
+X002091Y008772D01*
+X002076Y008748D01*
+X002059Y008727D01*
+X002038Y008709D01*
+X002016Y008693D01*
+X001991Y008681D01*
+X001965Y008673D01*
+X001938Y008668D01*
+X001910Y008667D01*
+X001883Y008670D01*
+X001856Y008677D01*
+X001831Y008687D01*
+X001807Y008701D01*
+X001785Y008718D01*
+X001766Y008737D01*
+X001750Y008760D01*
+X001737Y008784D01*
+X001728Y008810D01*
+X001722Y008837D01*
+X001720Y008864D01*
+D18*
+X002750Y006690D03*
+X002750Y006020D03*
+X007000Y006570D03*
+X007650Y006570D03*
+X008300Y006570D03*
+X008950Y006570D03*
+X009600Y006570D03*
+X010250Y006570D03*
+X010900Y006570D03*
+X010900Y007240D03*
+X010250Y007240D03*
+X009600Y007240D03*
+X008950Y007240D03*
+X008300Y007240D03*
+X007650Y007240D03*
+X007000Y007240D03*
+X009000Y008120D03*
+X009650Y008120D03*
+X009650Y008790D03*
+X009000Y008790D03*
+X010750Y008970D03*
+X010750Y009640D03*
+X011750Y009490D03*
+X011750Y008820D03*
+X011500Y010720D03*
+X012150Y010720D03*
+X012150Y011390D03*
+X011500Y011390D03*
+X007950Y011390D03*
+X007300Y011390D03*
+X006650Y011390D03*
+X006950Y011970D03*
+X006300Y011970D03*
+X006300Y012640D03*
+X006950Y012640D03*
+X007600Y012640D03*
+X007600Y011970D03*
+X007300Y010720D03*
+X007950Y010720D03*
+X006650Y010720D03*
+X005800Y009490D03*
+X005800Y008820D03*
+X009600Y005990D03*
+X009600Y005320D03*
+X009900Y004490D03*
+X009900Y003820D03*
+X011350Y002190D03*
+X012000Y001870D03*
+X012600Y001490D03*
+X013250Y001490D03*
+X013900Y001490D03*
+X014550Y001490D03*
+X014550Y000820D03*
+X013900Y000820D03*
+X013250Y000820D03*
+X012600Y000820D03*
+X011350Y001520D03*
+X012000Y002540D03*
+X012650Y003720D03*
+X012650Y004390D03*
+X012650Y005020D03*
+X013250Y005020D03*
+X013250Y005690D03*
+X012650Y005690D03*
+X007400Y004490D03*
+X007400Y003820D03*
+X017150Y009420D03*
+X017150Y010090D03*
+X021650Y010070D03*
+X022600Y010070D03*
+X022600Y010740D03*
+X022600Y011320D03*
+X021650Y011320D03*
+X021650Y010740D03*
+X021650Y011990D03*
+X022600Y011990D03*
+X023550Y011990D03*
+X023550Y011320D03*
+X023550Y010740D03*
+X023550Y010070D03*
+X026250Y010320D03*
+X026950Y010320D03*
+X026950Y010990D03*
+X026250Y010990D03*
+X027850Y010820D03*
+X028550Y010840D03*
+X029200Y010840D03*
+X029200Y010170D03*
+X028550Y010170D03*
+X029200Y009540D03*
+X029200Y008870D03*
+X031700Y008490D03*
+X031700Y007820D03*
+X031700Y007340D03*
+X031700Y006670D03*
+X031350Y003140D03*
+X031350Y002470D03*
+X031350Y001790D03*
+X031350Y001120D03*
+X026950Y000970D03*
+X026950Y001640D03*
+X022500Y003770D03*
+X022500Y004440D03*
+X022150Y007620D03*
+X022150Y008290D03*
+X027850Y011490D03*
+X026950Y012920D03*
+X026950Y013590D03*
+X017400Y013690D03*
+X017400Y013020D03*
+X007000Y018970D03*
+X007000Y019640D03*
+X005200Y019240D03*
+X005200Y018570D03*
+X004550Y013740D03*
+X003900Y013740D03*
+X003250Y013740D03*
+X002600Y013740D03*
+X001950Y013740D03*
+X001300Y013740D03*
+X001300Y013070D03*
+X001950Y013070D03*
+X002600Y013070D03*
+X003250Y013070D03*
+X003900Y013070D03*
+X004550Y013070D03*
+D19*
+X015300Y007117D03*
+X015300Y006920D03*
+X015300Y006724D03*
+X015300Y006527D03*
+X015300Y006330D03*
+X015300Y006133D03*
+X015300Y005936D03*
+X015300Y005739D03*
+X015300Y005542D03*
+X015300Y005346D03*
+X015300Y005149D03*
+X015300Y004952D03*
+X015300Y004755D03*
+X015300Y004558D03*
+X015300Y004361D03*
+X015300Y004164D03*
+X015300Y003968D03*
+X015300Y003771D03*
+X015300Y003574D03*
+X015300Y003377D03*
+X015300Y003180D03*
+X015300Y002983D03*
+X015300Y002786D03*
+X015300Y002590D03*
+X015300Y002393D03*
+X021600Y002393D03*
+X021600Y002590D03*
+X021600Y002786D03*
+X021600Y002983D03*
+X021600Y003180D03*
+X021600Y003377D03*
+X021600Y003574D03*
+X021600Y003771D03*
+X021600Y003968D03*
+X021600Y004164D03*
+X021600Y004361D03*
+X021600Y004558D03*
+X021600Y004755D03*
+X021600Y004952D03*
+X021600Y005149D03*
+X021600Y005346D03*
+X021600Y005542D03*
+X021600Y005739D03*
+X021600Y005936D03*
+X021600Y006133D03*
+X021600Y006330D03*
+X021600Y006527D03*
+X021600Y006724D03*
+X021600Y006920D03*
+X021600Y007117D03*
+D20*
+X020812Y007905D03*
+X020615Y007905D03*
+X020419Y007905D03*
+X020222Y007905D03*
+X020025Y007905D03*
+X019828Y007905D03*
+X019631Y007905D03*
+X019434Y007905D03*
+X019237Y007905D03*
+X019041Y007905D03*
+X018844Y007905D03*
+X018647Y007905D03*
+X018450Y007905D03*
+X018253Y007905D03*
+X018056Y007905D03*
+X017859Y007905D03*
+X017663Y007905D03*
+X017466Y007905D03*
+X017269Y007905D03*
+X017072Y007905D03*
+X016875Y007905D03*
+X016678Y007905D03*
+X016481Y007905D03*
+X016285Y007905D03*
+X016088Y007905D03*
+X016088Y001605D03*
+X016285Y001605D03*
+X016481Y001605D03*
+X016678Y001605D03*
+X016875Y001605D03*
+X017072Y001605D03*
+X017269Y001605D03*
+X017466Y001605D03*
+X017663Y001605D03*
+X017859Y001605D03*
+X018056Y001605D03*
+X018253Y001605D03*
+X018450Y001605D03*
+X018647Y001605D03*
+X018844Y001605D03*
+X019041Y001605D03*
+X019237Y001605D03*
+X019434Y001605D03*
+X019631Y001605D03*
+X019828Y001605D03*
+X020025Y001605D03*
+X020222Y001605D03*
+X020419Y001605D03*
+X020615Y001605D03*
+X020812Y001605D03*
+D21*
+X028500Y002855D03*
+X030429Y002855D03*
+X030400Y006705D03*
+X030400Y008634D03*
+D22*
+X030400Y001653D03*
+X030400Y001279D03*
+X030400Y000905D03*
+X029534Y000905D03*
+X029534Y001653D03*
+D23*
+X027600Y004131D03*
+X027403Y004131D03*
+X027206Y004131D03*
+X027009Y004131D03*
+X026813Y004131D03*
+X026616Y004131D03*
+X026419Y004131D03*
+X026222Y004131D03*
+X026025Y004131D03*
+X025828Y004131D03*
+X025631Y004131D03*
+X025435Y004131D03*
+X025238Y004131D03*
+X025041Y004131D03*
+X024844Y004131D03*
+X024647Y004131D03*
+X024647Y008855D03*
+X024844Y008855D03*
+X025041Y008855D03*
+X025238Y008855D03*
+X025435Y008855D03*
+X025631Y008855D03*
+X025828Y008855D03*
+X026025Y008855D03*
+X026222Y008855D03*
+X026419Y008855D03*
+X026616Y008855D03*
+X026813Y008855D03*
+X027009Y008855D03*
+X027206Y008855D03*
+X027403Y008855D03*
+X027600Y008855D03*
+D24*
+X028486Y007969D03*
+X028486Y007772D03*
+X028486Y007575D03*
+X028486Y007379D03*
+X028486Y007182D03*
+X028486Y006985D03*
+X028486Y006788D03*
+X028486Y006591D03*
+X028486Y006394D03*
+X028486Y006198D03*
+X028486Y006001D03*
+X028486Y005804D03*
+X028486Y005607D03*
+X028486Y005410D03*
+X028486Y005213D03*
+X028486Y005016D03*
+X023761Y005016D03*
+X023761Y005213D03*
+X023761Y005410D03*
+X023761Y005607D03*
+X023761Y005804D03*
+X023761Y006001D03*
+X023761Y006198D03*
+X023761Y006394D03*
+X023761Y006591D03*
+X023761Y006788D03*
+X023761Y006985D03*
+X023761Y007182D03*
+X023761Y007379D03*
+X023761Y007575D03*
+X023761Y007772D03*
+X023761Y007969D03*
+D25*
+X002252Y007939D03*
+X002252Y010971D03*
+D26*
+X003157Y009927D03*
+X003157Y009612D03*
+X003157Y009298D03*
+X003157Y008983D03*
+D27*
+X010500Y005955D03*
+X010756Y005955D03*
+X011012Y005955D03*
+X011268Y005955D03*
+X011524Y005955D03*
+X011780Y005955D03*
+X012035Y005955D03*
+X012300Y007205D03*
+X012556Y007205D03*
+X012812Y007205D03*
+X013068Y007205D03*
+X013324Y007205D03*
+X013580Y007205D03*
+X013835Y007205D03*
+X013835Y009605D03*
+X013580Y009605D03*
+X013324Y009605D03*
+X013068Y009605D03*
+X012812Y009605D03*
+X012556Y009605D03*
+X012300Y009605D03*
+X012035Y003555D03*
+X011780Y003555D03*
+X011524Y003555D03*
+X011268Y003555D03*
+X011012Y003555D03*
+X010756Y003555D03*
+X010500Y003555D03*
+D28*
+X010735Y002805D03*
+X010065Y002805D03*
+X009485Y002805D03*
+X008815Y002805D03*
+X008815Y002155D03*
+X009485Y002155D03*
+X010065Y002155D03*
+X010735Y002155D03*
+X010035Y001505D03*
+X009365Y001505D03*
+X009365Y000855D03*
+X010035Y000855D03*
+X013815Y003655D03*
+X013815Y004305D03*
+X014485Y004305D03*
+X014485Y003655D03*
+X014535Y004955D03*
+X013865Y004955D03*
+X007985Y007855D03*
+X007315Y007855D03*
+X006635Y007855D03*
+X005965Y007855D03*
+X005135Y009305D03*
+X004465Y009305D03*
+X004465Y009955D03*
+X005135Y009955D03*
+X005135Y010655D03*
+X004465Y010655D03*
+X004465Y011305D03*
+X005135Y011305D03*
+X008965Y010905D03*
+X009635Y010905D03*
+X011415Y012355D03*
+X011415Y013005D03*
+X012085Y013005D03*
+X012665Y013155D03*
+X013335Y013155D03*
+X013335Y012505D03*
+X012665Y012505D03*
+X012085Y012355D03*
+X015765Y013455D03*
+X016435Y013455D03*
+X018065Y013705D03*
+X018735Y013705D03*
+X019315Y013705D03*
+X019985Y013705D03*
+X019985Y012955D03*
+X019315Y012955D03*
+X018735Y012955D03*
+X018065Y012955D03*
+X020915Y012805D03*
+X021585Y012805D03*
+X025615Y013555D03*
+X025615Y014205D03*
+X026285Y014205D03*
+X026285Y013555D03*
+X025985Y015605D03*
+X025315Y015605D03*
+X022435Y008955D03*
+X021765Y008955D03*
+X029915Y005755D03*
+X030585Y005755D03*
+X030585Y005105D03*
+X029915Y005105D03*
+X029915Y004455D03*
+X030585Y004455D03*
+X027335Y002755D03*
+X026665Y002755D03*
+X025835Y002755D03*
+X025165Y002755D03*
+X028115Y001755D03*
+X028785Y001755D03*
+X028785Y001055D03*
+X028115Y001055D03*
+X018635Y000755D03*
+X017965Y000755D03*
+X015985Y000855D03*
+X015315Y000855D03*
+X006535Y016955D03*
+X005865Y016955D03*
+X009365Y019455D03*
+X010035Y019455D03*
+D29*
+X009550Y018546D03*
+X009550Y017364D03*
+X017750Y016146D03*
+X017750Y014964D03*
+X025200Y011696D03*
+X025200Y010514D03*
+D30*
+X029950Y018455D03*
+X017400Y018955D03*
+D31*
+X016400Y018955D03*
+X015400Y018955D03*
+X014400Y018955D03*
+X013400Y018955D03*
+X012400Y018955D03*
+X020950Y018455D03*
+X021950Y018455D03*
+X022950Y018455D03*
+X023950Y018455D03*
+X024950Y018455D03*
+X025950Y018455D03*
+X026950Y018455D03*
+X027950Y018455D03*
+X028950Y018455D03*
+X028950Y017455D03*
+X027950Y017455D03*
+X026950Y017455D03*
+X025950Y017455D03*
+X024950Y017455D03*
+X023950Y017455D03*
+X022950Y017455D03*
+X021950Y017455D03*
+X020950Y017455D03*
+X029950Y017455D03*
+D32*
+X030220Y011305D03*
+X030970Y011305D03*
+X023650Y003475D03*
+X023650Y002725D03*
+X009220Y004705D03*
+X008470Y004705D03*
+X007350Y005235D03*
+X007350Y005985D03*
+X005450Y006475D03*
+X004830Y006305D03*
+X004080Y006305D03*
+X005450Y007225D03*
+X006820Y003155D03*
+X007570Y003155D03*
+X007280Y000705D03*
+X007930Y000705D03*
+X008680Y000705D03*
+X006530Y000705D03*
+D33*
+X006905Y001455D03*
+X007195Y002405D03*
+X008305Y001455D03*
+X008845Y003955D03*
+X004455Y007055D03*
+X030595Y010555D03*
+D34*
+X024400Y003100D03*
+X006600Y005610D03*
+X006200Y006850D03*
+D35*
+X017798Y009645D03*
+X018054Y009645D03*
+X018310Y009645D03*
+X018566Y009645D03*
+X018822Y009645D03*
+X019078Y009645D03*
+X019334Y009645D03*
+X019590Y009645D03*
+X019846Y009645D03*
+X020102Y009645D03*
+X020357Y009645D03*
+X020613Y009645D03*
+X020613Y012165D03*
+X020357Y012165D03*
+X020102Y012165D03*
+X019846Y012165D03*
+X019590Y012165D03*
+X019334Y012165D03*
+X019078Y012165D03*
+X018822Y012165D03*
+X018566Y012165D03*
+X018310Y012165D03*
+X018054Y012165D03*
+X017798Y012165D03*
+D36*
+X010253Y013705D03*
+X009997Y013705D03*
+X009741Y013705D03*
+X009485Y013705D03*
+X009230Y013705D03*
+X008974Y013705D03*
+X008718Y013705D03*
+X008462Y013705D03*
+X008206Y013705D03*
+X007950Y013705D03*
+X007553Y013705D03*
+X007297Y013705D03*
+X007041Y013705D03*
+X006785Y013705D03*
+X006530Y013705D03*
+X006274Y013705D03*
+X006018Y013705D03*
+X005762Y013705D03*
+X005506Y013705D03*
+X005250Y013705D03*
+X005250Y016105D03*
+X005506Y016105D03*
+X005762Y016105D03*
+X006018Y016105D03*
+X006274Y016105D03*
+X006530Y016105D03*
+X006785Y016105D03*
+X007041Y016105D03*
+X007297Y016105D03*
+X007553Y016105D03*
+X007950Y016105D03*
+X008206Y016105D03*
+X008462Y016105D03*
+X008718Y016105D03*
+X008974Y016105D03*
+X009230Y016105D03*
+X009485Y016105D03*
+X009741Y016105D03*
+X009997Y016105D03*
+X010253Y016105D03*
+D37*
+X005835Y017655D03*
+X005165Y017655D03*
+D38*
+X006916Y009855D03*
+X007172Y009855D03*
+X007428Y009855D03*
+X007684Y009855D03*
+X007684Y008555D03*
+X007428Y008555D03*
+X007172Y008555D03*
+X006916Y008555D03*
+D39*
+X012000Y013955D03*
+X012500Y013955D03*
+X013000Y013955D03*
+X013500Y013955D03*
+X013500Y015955D03*
+X013000Y015955D03*
+X012500Y015955D03*
+X012000Y015955D03*
+D40*
+X014809Y009955D03*
+X015991Y009955D03*
+D41*
+X010700Y011555D03*
+X010700Y011811D03*
+X010700Y012067D03*
+X010700Y012323D03*
+X008810Y012323D03*
+X008810Y012067D03*
+X008810Y011811D03*
+X008810Y011555D03*
+D42*
+X005400Y004787D03*
+X004400Y004787D03*
+X003400Y004787D03*
+X002400Y004787D03*
+X001400Y004787D03*
+X001400Y001023D03*
+X002400Y001023D03*
+X003400Y001023D03*
+X004400Y001023D03*
+X005400Y001023D03*
+D43*
+X027978Y012719D03*
+X027978Y014491D03*
+X031522Y014491D03*
+X031522Y012719D03*
+D44*
+X024283Y014255D03*
+X022117Y014255D03*
+D45*
+X015650Y014622D03*
+X015650Y016788D03*
+D46*
+X017000Y011505D03*
+D47*
+X025700Y012705D03*
+X025400Y001055D03*
+X004550Y008155D03*
+X001450Y006355D03*
+X002100Y012255D03*
+X004050Y012255D03*
+D48*
+X020115Y015140D03*
+D49*
+X008200Y018255D03*
+X008200Y018755D03*
+X008200Y019255D03*
+X008200Y019755D03*
+X006200Y019755D03*
+X006200Y019255D03*
+X006200Y018755D03*
+X006200Y018255D03*
+D50*
+X006650Y018255D01*
+X006900Y018505D01*
+X006900Y018455D01*
+X007100Y018105D02*
+X007096Y018101D01*
+X007096Y017725D01*
+X006900Y017725D02*
+X006900Y017705D01*
+X006900Y016955D01*
+X006978Y016877D01*
+X007340Y016877D01*
+X007200Y016605D02*
+X006800Y016605D01*
+X006785Y016590D01*
+X006785Y016105D01*
+X006530Y016105D02*
+X006530Y015485D01*
+X006500Y015455D01*
+X006950Y015455D01*
+X007050Y015555D01*
+X007050Y016105D01*
+X007050Y016105D01*
+X007041Y016105D01*
+X007297Y016105D02*
+X007297Y016508D01*
+X007200Y016605D01*
+X007550Y016505D02*
+X007550Y016105D01*
+X007550Y016105D01*
+X007553Y016105D01*
+X007500Y016105D01*
+X007500Y016105D01*
+X007550Y016055D01*
+X007550Y015555D01*
+X007950Y015555D02*
+X007950Y016105D01*
+X008206Y016105D02*
+X008206Y015699D01*
+X008350Y015555D01*
+X008350Y015405D01*
+X008100Y015205D02*
+X008250Y015055D01*
+X008550Y015055D01*
+X008825Y015330D01*
+X008462Y015693D01*
+X008462Y016143D01*
+X008462Y016105D01*
+X008462Y016143D02*
+X008450Y016155D01*
+X008718Y016105D02*
+X008718Y016587D01*
+X008700Y016605D01*
+X007650Y016605D01*
+X007550Y016505D01*
+X007875Y016885D02*
+X007875Y017003D01*
+X007839Y017092D01*
+X007775Y017155D01*
+X007775Y017251D01*
+X007775Y017347D01*
+X007839Y017410D01*
+X007875Y017499D01*
+X007875Y017751D01*
+X007839Y017840D01*
+X007793Y017885D01*
+X008009Y017885D01*
+X007963Y017840D01*
+X007927Y017751D01*
+X007927Y017499D01*
+X007963Y017410D01*
+X008031Y017343D01*
+X008119Y017306D01*
+X008395Y017306D01*
+X008398Y017305D01*
+X008634Y017305D01*
+X008637Y017306D01*
+X008805Y017306D01*
+X008839Y017320D01*
+X008839Y017182D01*
+X008805Y017196D01*
+X008119Y017196D01*
+X008031Y017159D01*
+X007963Y017092D01*
+X007927Y017003D01*
+X007927Y016885D01*
+X007875Y016885D01*
+X007875Y016904D02*
+X007927Y016904D01*
+X007927Y016983D02*
+X007875Y016983D01*
+X007851Y017061D02*
+X007951Y017061D01*
+X008011Y017140D02*
+X007791Y017140D01*
+X007775Y017218D02*
+X008839Y017218D01*
+X008839Y017297D02*
+X007775Y017297D01*
+X007775Y017251D02*
+X007340Y017251D01*
+X007340Y017251D01*
+X009496Y017251D01*
+X009550Y017305D01*
+X009550Y017364D01*
+X009590Y017324D02*
+X009590Y016941D01*
+X009534Y016885D01*
+X009144Y016885D01*
+X008997Y016885D01*
+X008997Y016929D01*
+X009510Y016929D01*
+X009510Y017324D01*
+X009590Y017324D01*
+X009590Y017297D02*
+X009510Y017297D01*
+X009510Y017218D02*
+X009590Y017218D01*
+X009590Y017140D02*
+X009510Y017140D01*
+X009510Y017061D02*
+X009590Y017061D01*
+X009590Y016983D02*
+X009510Y016983D01*
+X009553Y016904D02*
+X008997Y016904D01*
+X009200Y016605D02*
+X008700Y016605D01*
+X009200Y016605D02*
+X009230Y016575D01*
+X009230Y016105D01*
+X009485Y016105D02*
+X009500Y016105D01*
+X009500Y015455D01*
+X009900Y015455D01*
+X009997Y015552D01*
+X009997Y016105D01*
+X009741Y016105D02*
+X009741Y016014D01*
+X009750Y016005D01*
+X009750Y016505D01*
+X009650Y016605D01*
+X009850Y016805D01*
+X010100Y016805D01*
+X010450Y017155D01*
+X010450Y017655D01*
+X010730Y017371D02*
+X010788Y017429D01*
+X010849Y017576D01*
+X010849Y017734D01*
+X010788Y017881D01*
+X010676Y017993D01*
+X010529Y018054D01*
+X010371Y018054D01*
+X010224Y017993D01*
+X010112Y017881D01*
+X010078Y017800D01*
+X009590Y017800D01*
+X009590Y017404D01*
+X009510Y017404D01*
+X009510Y017800D01*
+X009120Y017800D01*
+X009120Y017922D01*
+X009208Y018010D01*
+X010169Y018010D01*
+X010257Y018047D01*
+X010324Y018114D01*
+X010361Y018203D01*
+X010361Y018235D01*
+X010514Y018235D01*
+X010631Y018284D01*
+X010721Y018374D01*
+X010983Y018635D01*
+X011907Y018635D01*
+X011910Y018628D01*
+X012040Y018498D01*
+X012040Y018433D01*
+X012095Y018301D01*
+X012523Y017873D01*
+X012562Y017779D01*
+X012674Y017667D01*
+X012821Y017606D01*
+X012979Y017606D01*
+X013126Y017667D01*
+X013238Y017779D01*
+X013299Y017926D01*
+X013299Y018084D01*
+X013238Y018231D01*
+X013126Y018343D01*
+X013032Y018382D01*
+X012838Y018576D01*
+X012890Y018628D01*
+X012954Y018783D01*
+X012957Y018772D01*
+X012992Y018705D01*
+X013036Y018644D01*
+X013089Y018591D01*
+X013150Y018547D01*
+X013217Y018512D01*
+X013288Y018489D01*
+X013360Y018478D01*
+X013360Y018915D01*
+X013440Y018915D01*
+X013440Y018478D01*
+X013512Y018489D01*
+X013583Y018512D01*
+X013650Y018547D01*
+X013711Y018591D01*
+X013764Y018644D01*
+X013808Y018705D01*
+X013843Y018772D01*
+X013846Y018783D01*
+X013910Y018628D01*
+X014073Y018465D01*
+X014285Y018378D01*
+X014515Y018378D01*
+X014727Y018465D01*
+X014890Y018628D01*
+X014900Y018653D01*
+X014910Y018628D01*
+X015073Y018465D01*
+X015285Y018378D01*
+X015515Y018378D01*
+X015727Y018465D01*
+X015890Y018628D01*
+X015900Y018653D01*
+X015910Y018628D01*
+X016073Y018465D01*
+X016285Y018378D01*
+X016515Y018378D01*
+X016727Y018465D01*
+X016825Y018563D01*
+X016859Y018482D01*
+X016927Y018414D01*
+X017015Y018378D01*
+X017785Y018378D01*
+X017873Y018414D01*
+X017941Y018482D01*
+X017977Y018570D01*
+X017977Y019340D01*
+X017941Y019428D01*
+X017873Y019496D01*
+X017785Y019532D01*
+X017015Y019532D01*
+X016927Y019496D01*
+X016859Y019428D01*
+X016825Y019347D01*
+X016727Y019445D01*
+X016515Y019532D01*
+X016285Y019532D01*
+X016073Y019445D01*
+X015910Y019282D01*
+X015900Y019257D01*
+X015890Y019282D01*
+X015727Y019445D01*
+X015515Y019532D01*
+X015285Y019532D01*
+X015073Y019445D01*
+X014910Y019282D01*
+X014900Y019257D01*
+X014890Y019282D01*
+X014727Y019445D01*
+X014515Y019532D01*
+X014285Y019532D01*
+X014073Y019445D01*
+X013910Y019282D01*
+X013846Y019127D01*
+X013843Y019138D01*
+X013808Y019205D01*
+X013764Y019266D01*
+X013711Y019319D01*
+X013650Y019363D01*
+X013583Y019398D01*
+X013512Y019421D01*
+X013440Y019432D01*
+X013440Y018995D01*
+X013360Y018995D01*
+X013360Y019432D01*
+X013288Y019421D01*
+X013217Y019398D01*
+X013150Y019363D01*
+X013089Y019319D01*
+X013036Y019266D01*
+X012992Y019205D01*
+X012957Y019138D01*
+X012954Y019127D01*
+X012890Y019282D01*
+X012727Y019445D01*
+X012515Y019532D01*
+X012285Y019532D01*
+X012073Y019445D01*
+X011910Y019282D01*
+X011907Y019275D01*
+X010907Y019275D01*
+X010949Y019376D01*
+X010949Y019534D01*
+X010888Y019681D01*
+X010776Y019793D01*
+X010629Y019854D01*
+X010471Y019854D01*
+X010413Y019830D01*
+X010367Y019875D01*
+X010279Y019912D01*
+X009790Y019912D01*
+X009702Y019875D01*
+X009700Y019873D01*
+X009698Y019875D01*
+X009610Y019912D01*
+X009121Y019912D01*
+X009033Y019875D01*
+X009002Y019844D01*
+X008979Y019854D01*
+X008821Y019854D01*
+X008740Y019820D01*
+X008740Y019903D01*
+X008730Y019939D01*
+X008712Y019971D01*
+X008686Y019997D01*
+X008654Y020015D01*
+X008618Y020025D01*
+X008225Y020025D01*
+X008225Y019780D01*
+X008175Y019780D01*
+X008175Y020025D01*
+X007782Y020025D01*
+X007746Y020015D01*
+X007714Y019997D01*
+X007688Y019971D01*
+X007670Y019939D01*
+X007660Y019903D01*
+X007660Y019798D01*
+X007587Y019871D01*
+X007497Y019961D01*
+X007385Y020007D01*
+X007352Y020040D01*
+X007316Y020055D01*
+X032200Y020055D01*
+X032200Y014896D01*
+X032198Y014898D01*
+X032166Y014917D01*
+X032131Y014926D01*
+X031562Y014926D01*
+X031562Y014531D01*
+X031482Y014531D01*
+X031482Y014926D01*
+X030913Y014926D01*
+X030877Y014917D01*
+X030845Y014898D01*
+X030819Y014872D01*
+X030801Y014840D01*
+X030791Y014805D01*
+X030791Y014531D01*
+X031482Y014531D01*
+X031482Y014451D01*
+X031562Y014451D01*
+X031562Y014056D01*
+X032131Y014056D01*
+X032166Y014065D01*
+X032198Y014084D01*
+X032200Y014085D01*
+X032200Y013238D01*
+X032160Y013254D01*
+X031590Y013254D01*
+X031599Y013276D01*
+X031599Y013434D01*
+X031538Y013581D01*
+X031426Y013693D01*
+X031279Y013754D01*
+X031121Y013754D01*
+X030974Y013693D01*
+X030862Y013581D01*
+X030801Y013434D01*
+X030801Y013276D01*
+X030821Y013229D01*
+X030795Y013218D01*
+X030728Y013150D01*
+X030691Y013062D01*
+X030691Y012376D01*
+X030728Y012288D01*
+X030795Y012220D01*
+X030870Y012189D01*
+X030812Y012131D01*
+X030751Y011984D01*
+X030751Y011902D01*
+X030733Y011884D01*
+X030690Y011781D01*
+X030690Y011732D01*
+X030634Y011708D01*
+X030595Y011669D01*
+X030587Y011678D01*
+X030588Y011679D01*
+X030649Y011826D01*
+X030649Y011984D01*
+X030588Y012131D01*
+X030476Y012243D01*
+X030329Y012304D01*
+X030171Y012304D01*
+X030024Y012243D01*
+X029912Y012131D01*
+X029851Y011984D01*
+X029851Y011826D01*
+X029898Y011714D01*
+X029884Y011708D01*
+X029817Y011641D01*
+X029780Y011553D01*
+X029780Y011057D01*
+X029817Y010969D01*
+X029884Y010902D01*
+X029972Y010865D01*
+X030255Y010865D01*
+X030255Y010595D01*
+X030555Y010595D01*
+X030555Y010515D01*
+X030635Y010515D01*
+X030635Y010065D01*
+X030813Y010065D01*
+X030849Y010075D01*
+X030881Y010093D01*
+X030907Y010119D01*
+X030925Y010151D01*
+X030935Y010187D01*
+X030935Y010242D01*
+X031021Y010206D01*
+X031179Y010206D01*
+X031326Y010267D01*
+X031438Y010379D01*
+X031499Y010526D01*
+X031499Y010684D01*
+X031438Y010831D01*
+X031337Y010932D01*
+X031373Y010969D01*
+X031410Y011057D01*
+X031410Y011553D01*
+X031396Y011587D01*
+X031488Y011679D01*
+X031549Y011826D01*
+X031549Y011984D01*
+X031488Y012131D01*
+X031435Y012184D01*
+X032160Y012184D01*
+X032200Y012200D01*
+X032200Y010653D01*
+X032148Y010705D01*
+X032136Y010710D01*
+X032043Y010748D01*
+X031793Y010748D01*
+X031688Y010705D01*
+X031608Y010625D01*
+X031540Y010556D01*
+X031496Y010451D01*
+X031496Y010133D01*
+X031526Y010062D01*
+X031496Y009991D01*
+X031496Y009741D01*
+X031515Y009696D01*
+X031471Y009652D01*
+X031428Y009547D01*
+X031428Y009434D01*
+X031471Y009329D01*
+X031552Y009249D01*
+X031620Y009181D01*
+X031725Y009137D01*
+X031838Y009137D01*
+X031943Y009181D01*
+X031968Y009206D01*
+X032043Y009206D01*
+X032136Y009244D01*
+X032148Y009249D01*
+X032148Y009249D01*
+X032148Y009249D01*
+X032200Y009301D01*
+X032200Y006469D01*
+X032176Y006493D01*
+X032157Y006501D01*
+X032157Y006915D01*
+X032120Y007003D01*
+X032052Y007071D01*
+X032040Y007076D01*
+X032047Y007089D01*
+X032057Y007124D01*
+X032057Y007300D01*
+X031740Y007300D01*
+X031740Y007380D01*
+X031660Y007380D01*
+X031660Y007780D01*
+X031740Y007780D01*
+X031740Y007484D01*
+X031660Y007484D01*
+X031600Y007455D02*
+X031700Y007355D01*
+X031700Y007340D01*
+X031740Y007327D02*
+X032200Y007327D01*
+X032200Y007249D02*
+X032057Y007249D01*
+X032057Y007170D02*
+X032200Y007170D01*
+X032200Y007092D02*
+X032048Y007092D01*
+X032110Y007013D02*
+X032200Y007013D01*
+X032200Y006935D02*
+X032148Y006935D01*
+X032157Y006856D02*
+X032200Y006856D01*
+X032200Y006778D02*
+X032157Y006778D01*
+X032157Y006699D02*
+X032200Y006699D01*
+X032200Y006621D02*
+X032157Y006621D01*
+X032157Y006542D02*
+X032200Y006542D01*
+X031700Y006670D02*
+X031700Y006705D01*
+X031700Y006705D01*
+X030400Y006705D01*
+X029726Y007379D01*
+X028486Y007379D01*
+X028486Y007575D02*
+X029320Y007575D01*
+X030200Y008455D01*
+X030250Y008455D01*
+X030400Y008605D01*
+X030400Y008634D01*
+X031671Y008634D01*
+X031700Y008605D01*
+X031700Y008490D01*
+X032157Y008505D02*
+X032200Y008505D01*
+X032200Y008583D02*
+X032157Y008583D01*
+X032157Y008662D02*
+X032200Y008662D01*
+X032200Y008740D02*
+X032154Y008740D01*
+X032157Y008734D02*
+X032120Y008822D01*
+X032052Y008890D01*
+X031964Y008926D01*
+X031436Y008926D01*
+X031405Y008914D01*
+X031112Y008914D01*
+X031112Y009154D01*
+X031076Y009242D01*
+X031008Y009310D01*
+X030920Y009346D01*
+X029880Y009346D01*
+X029792Y009310D01*
+X029724Y009242D01*
+X029688Y009154D01*
+X029688Y008339D01*
+X029480Y008131D01*
+X029480Y008440D01*
+X029552Y008470D01*
+X029620Y008538D01*
+X029657Y008626D01*
+X029657Y009115D01*
+X029620Y009203D01*
+X029618Y009205D01*
+X029620Y009207D01*
+X029657Y009295D01*
+X029657Y009784D01*
+X029627Y009855D01*
+X029657Y009926D01*
+X029657Y010415D01*
+X029620Y010503D01*
+X029552Y010571D01*
+X029540Y010576D01*
+X029547Y010589D01*
+X029557Y010624D01*
+X029556Y010624D02*
+X030255Y010624D01*
+X030255Y010703D02*
+X029557Y010703D01*
+X029557Y010781D02*
+X030255Y010781D01*
+X030255Y010860D02*
+X029240Y010860D01*
+X029240Y010880D02*
+X029240Y010800D01*
+X029557Y010800D01*
+X029557Y010624D01*
+X029578Y010546D02*
+X030555Y010546D01*
+X030555Y010515D02*
+X030255Y010515D01*
+X030255Y010187D01*
+X030265Y010151D01*
+X030283Y010119D01*
+X030309Y010093D01*
+X030341Y010075D01*
+X030377Y010065D01*
+X030555Y010065D01*
+X030555Y010515D01*
+X030555Y010467D02*
+X030635Y010467D01*
+X030635Y010389D02*
+X030555Y010389D01*
+X030555Y010310D02*
+X030635Y010310D01*
+X030635Y010232D02*
+X030555Y010232D01*
+X030555Y010153D02*
+X030635Y010153D01*
+X030635Y010075D02*
+X030555Y010075D01*
+X030341Y010075D02*
+X029657Y010075D01*
+X029657Y010153D02*
+X030264Y010153D01*
+X030255Y010232D02*
+X029657Y010232D01*
+X029657Y010310D02*
+X030255Y010310D01*
+X030255Y010389D02*
+X029657Y010389D01*
+X029635Y010467D02*
+X030255Y010467D01*
+X030935Y010232D02*
+X030960Y010232D01*
+X030926Y010153D02*
+X031496Y010153D01*
+X031496Y010232D02*
+X031240Y010232D01*
+X031369Y010310D02*
+X031496Y010310D01*
+X031496Y010389D02*
+X031442Y010389D01*
+X031474Y010467D02*
+X031503Y010467D01*
+X031499Y010546D02*
+X031535Y010546D01*
+X031499Y010624D02*
+X031608Y010624D01*
+X031686Y010703D02*
+X031491Y010703D01*
+X031459Y010781D02*
+X032200Y010781D01*
+X032200Y010703D02*
+X032150Y010703D01*
+X032148Y010705D02*
+X032148Y010705D01*
+X032148Y010705D01*
+X032200Y010860D02*
+X031409Y010860D01*
+X031342Y010938D02*
+X032200Y010938D01*
+X032200Y011017D02*
+X031393Y011017D01*
+X031410Y011095D02*
+X032200Y011095D01*
+X032200Y011174D02*
+X031410Y011174D01*
+X031410Y011252D02*
+X032200Y011252D01*
+X032200Y011331D02*
+X031410Y011331D01*
+X031410Y011409D02*
+X032200Y011409D01*
+X032200Y011488D02*
+X031410Y011488D01*
+X031404Y011566D02*
+X032200Y011566D01*
+X032200Y011645D02*
+X031453Y011645D01*
+X031506Y011723D02*
+X032200Y011723D01*
+X032200Y011802D02*
+X031539Y011802D01*
+X031549Y011880D02*
+X032200Y011880D01*
+X032200Y011959D02*
+X031549Y011959D01*
+X031527Y012037D02*
+X032200Y012037D01*
+X032200Y012116D02*
+X031494Y012116D01*
+X031150Y011905D02*
+X030970Y011725D01*
+X030970Y011305D01*
+X030669Y011723D02*
+X030606Y011723D01*
+X030639Y011802D02*
+X030699Y011802D01*
+X030731Y011880D02*
+X030649Y011880D01*
+X030649Y011959D02*
+X030751Y011959D01*
+X030773Y012037D02*
+X030627Y012037D01*
+X030594Y012116D02*
+X030806Y012116D01*
+X030859Y012194D02*
+X030525Y012194D01*
+X030405Y012273D02*
+X030743Y012273D01*
+X030702Y012351D02*
+X028798Y012351D01*
+X028809Y012376D02*
+X028809Y013062D01*
+X028772Y013150D01*
+X028705Y013218D01*
+X028617Y013254D01*
+X027369Y013254D01*
+X027368Y013255D01*
+X027370Y013257D01*
+X027407Y013345D01*
+X027407Y013834D01*
+X027370Y013922D01*
+X027335Y013958D01*
+X027340Y013956D01*
+X028181Y013956D01*
+X028151Y013884D01*
+X028151Y013726D01*
+X028212Y013579D01*
+X028324Y013467D01*
+X028471Y013406D01*
+X028629Y013406D01*
+X028776Y013467D01*
+X028888Y013579D01*
+X028949Y013726D01*
+X028949Y013884D01*
+X028888Y014031D01*
+X028798Y014121D01*
+X028809Y014148D01*
+X028809Y014834D01*
+X028772Y014922D01*
+X028738Y014956D01*
+X028779Y014956D01*
+X028926Y015017D01*
+X029038Y015129D01*
+X029099Y015276D01*
+X029099Y015434D01*
+X029038Y015581D01*
+X028930Y015689D01*
+X029687Y016446D01*
+X029730Y016549D01*
+X029730Y016921D01*
+X029835Y016878D01*
+X030065Y016878D01*
+X030277Y016965D01*
+X030440Y017128D01*
+X030527Y017340D01*
+X030527Y017570D01*
+X030440Y017782D01*
+X030342Y017880D01*
+X030423Y017914D01*
+X030491Y017982D01*
+X030527Y018070D01*
+X030527Y018840D01*
+X030495Y018919D01*
+X030586Y018853D01*
+X030814Y018853D01*
+X030999Y018988D01*
+X031070Y019205D01*
+X030999Y019422D01*
+X030814Y019557D01*
+X030586Y019557D01*
+X030401Y019422D01*
+X030330Y019205D01*
+X030394Y019008D01*
+X030335Y019032D01*
+X029565Y019032D01*
+X029477Y018996D01*
+X029409Y018928D01*
+X029375Y018847D01*
+X029277Y018945D01*
+X029065Y019032D01*
+X028835Y019032D01*
+X028623Y018945D01*
+X028460Y018782D01*
+X028450Y018757D01*
+X028440Y018782D01*
+X028277Y018945D01*
+X028065Y019032D01*
+X027835Y019032D01*
+X027623Y018945D01*
+X027460Y018782D01*
+X027450Y018757D01*
+X027440Y018782D01*
+X027277Y018945D01*
+X027065Y019032D01*
+X026835Y019032D01*
+X026623Y018945D01*
+X026460Y018782D01*
+X026450Y018757D01*
+X026440Y018782D01*
+X026277Y018945D01*
+X026065Y019032D01*
+X025835Y019032D01*
+X025623Y018945D01*
+X025460Y018782D01*
+X025450Y018757D01*
+X025440Y018782D01*
+X025277Y018945D01*
+X025065Y019032D01*
+X024835Y019032D01*
+X024623Y018945D01*
+X024460Y018782D01*
+X024450Y018757D01*
+X024440Y018782D01*
+X024277Y018945D01*
+X024065Y019032D01*
+X023835Y019032D01*
+X023623Y018945D01*
+X023460Y018782D01*
+X023450Y018757D01*
+X023440Y018782D01*
+X023277Y018945D01*
+X023065Y019032D01*
+X022835Y019032D01*
+X022623Y018945D01*
+X022460Y018782D01*
+X022450Y018757D01*
+X022440Y018782D01*
+X022277Y018945D01*
+X022065Y019032D01*
+X021835Y019032D01*
+X021623Y018945D01*
+X021460Y018782D01*
+X021450Y018757D01*
+X021440Y018782D01*
+X021277Y018945D01*
+X021065Y019032D01*
+X020835Y019032D01*
+X020623Y018945D01*
+X020460Y018782D01*
+X020373Y018570D01*
+X020373Y018340D01*
+X020460Y018128D01*
+X020623Y017965D01*
+X020778Y017901D01*
+X020767Y017898D01*
+X020700Y017863D01*
+X020639Y017819D01*
+X020586Y017766D01*
+X020542Y017705D01*
+X020507Y017638D01*
+X020484Y017567D01*
+X020473Y017495D01*
+X020910Y017495D01*
+X020910Y017415D01*
+X020990Y017415D01*
+X020990Y017495D01*
+X021427Y017495D01*
+X021416Y017567D01*
+X021393Y017638D01*
+X021358Y017705D01*
+X021314Y017766D01*
+X021261Y017819D01*
+X021200Y017863D01*
+X021133Y017898D01*
+X021122Y017901D01*
+X021277Y017965D01*
+X021440Y018128D01*
+X021450Y018153D01*
+X021460Y018128D01*
+X021623Y017965D01*
+X021778Y017901D01*
+X021767Y017898D01*
+X021700Y017863D01*
+X021639Y017819D01*
+X021586Y017766D01*
+X021542Y017705D01*
+X021507Y017638D01*
+X021484Y017567D01*
+X021473Y017495D01*
+X021910Y017495D01*
+X021910Y017415D01*
+X021990Y017415D01*
+X021990Y017495D01*
+X022427Y017495D01*
+X022416Y017567D01*
+X022393Y017638D01*
+X022358Y017705D01*
+X022314Y017766D01*
+X022261Y017819D01*
+X022200Y017863D01*
+X022133Y017898D01*
+X022122Y017901D01*
+X022277Y017965D01*
+X022440Y018128D01*
+X022450Y018153D01*
+X022460Y018128D01*
+X022623Y017965D01*
+X022778Y017901D01*
+X022767Y017898D01*
+X022700Y017863D01*
+X022639Y017819D01*
+X022586Y017766D01*
+X022542Y017705D01*
+X022507Y017638D01*
+X022484Y017567D01*
+X022473Y017495D01*
+X022910Y017495D01*
+X022910Y017415D01*
+X022990Y017415D01*
+X022990Y017495D01*
+X023427Y017495D01*
+X023416Y017567D01*
+X023393Y017638D01*
+X023358Y017705D01*
+X023314Y017766D01*
+X023261Y017819D01*
+X023200Y017863D01*
+X023133Y017898D01*
+X023122Y017901D01*
+X023277Y017965D01*
+X023440Y018128D01*
+X023450Y018153D01*
+X023460Y018128D01*
+X023623Y017965D01*
+X023778Y017901D01*
+X023767Y017898D01*
+X023700Y017863D01*
+X023639Y017819D01*
+X023586Y017766D01*
+X023542Y017705D01*
+X023507Y017638D01*
+X023484Y017567D01*
+X023473Y017495D01*
+X023910Y017495D01*
+X023910Y017415D01*
+X023990Y017415D01*
+X023990Y017495D01*
+X024427Y017495D01*
+X024416Y017567D01*
+X024393Y017638D01*
+X024358Y017705D01*
+X024314Y017766D01*
+X024261Y017819D01*
+X024200Y017863D01*
+X024133Y017898D01*
+X024122Y017901D01*
+X024277Y017965D01*
+X024440Y018128D01*
+X024450Y018153D01*
+X024460Y018128D01*
+X024623Y017965D01*
+X024778Y017901D01*
+X024767Y017898D01*
+X024700Y017863D01*
+X024639Y017819D01*
+X024586Y017766D01*
+X024542Y017705D01*
+X024507Y017638D01*
+X024484Y017567D01*
+X024473Y017495D01*
+X024910Y017495D01*
+X024910Y017415D01*
+X024990Y017415D01*
+X024990Y016978D01*
+X025062Y016989D01*
+X025133Y017012D01*
+X025170Y017031D01*
+X025170Y016099D01*
+X025186Y016062D01*
+X025071Y016062D01*
+X024983Y016025D01*
+X024915Y015957D01*
+X024879Y015869D01*
+X024879Y015465D01*
+X024773Y015465D01*
+X024679Y015504D01*
+X024521Y015504D01*
+X024374Y015443D01*
+X024262Y015331D01*
+X024201Y015184D01*
+X024201Y015026D01*
+X024262Y014879D01*
+X024374Y014767D01*
+X024521Y014706D01*
+X024679Y014706D01*
+X024773Y014745D01*
+X025551Y014745D01*
+X025551Y014662D01*
+X025371Y014662D01*
+X025283Y014625D01*
+X025215Y014557D01*
+X025179Y014469D01*
+X025179Y013941D01*
+X025204Y013880D01*
+X025194Y013856D01*
+X025097Y013896D01*
+X025102Y013906D01*
+X025112Y013941D01*
+X025112Y014215D01*
+X024323Y014215D01*
+X024323Y014295D01*
+X025112Y014295D01*
+X025112Y014569D01*
+X025102Y014604D01*
+X025084Y014636D01*
+X025058Y014662D01*
+X025026Y014681D01*
+X024990Y014690D01*
+X024323Y014690D01*
+X024323Y014295D01*
+X024243Y014295D01*
+X024243Y014690D01*
+X023575Y014690D01*
+X023540Y014681D01*
+X023508Y014662D01*
+X023482Y014636D01*
+X023463Y014604D01*
+X023454Y014569D01*
+X023454Y014295D01*
+X024243Y014295D01*
+X024243Y014215D01*
+X024323Y014215D01*
+X024323Y013820D01*
+X024751Y013820D01*
+X024662Y013731D01*
+X024601Y013584D01*
+X024601Y013426D01*
+X024662Y013279D01*
+X024774Y013167D01*
+X024806Y013154D01*
+X024785Y013103D01*
+X024785Y012435D01*
+X024444Y012435D01*
+X024444Y012435D01*
+X024538Y012529D01*
+X024599Y012676D01*
+X024599Y012834D01*
+X024538Y012981D01*
+X024426Y013093D01*
+X024279Y013154D01*
+X024121Y013154D01*
+X024080Y013137D01*
+X024080Y013248D01*
+X024126Y013267D01*
+X024238Y013379D01*
+X024299Y013526D01*
+X024299Y013684D01*
+X024243Y013820D01*
+X024243Y014215D01*
+X023454Y014215D01*
+X023454Y013941D01*
+X023463Y013906D01*
+X023482Y013874D01*
+X023508Y013848D01*
+X023540Y013829D01*
+X023559Y013824D01*
+X023501Y013684D01*
+X023501Y013526D01*
+X023520Y013480D01*
+X023520Y012449D01*
+X023563Y012346D01*
+X023590Y012319D01*
+X023590Y012030D01*
+X023510Y012030D01*
+X023510Y012326D01*
+X023315Y012326D01*
+X023279Y012317D01*
+X023248Y012299D01*
+X023221Y012272D01*
+X023203Y012241D01*
+X023193Y012205D01*
+X023193Y012030D01*
+X023510Y012030D01*
+X023510Y011950D01*
+X023193Y011950D01*
+X023193Y011774D01*
+X023203Y011739D01*
+X023210Y011726D01*
+X023198Y011721D01*
+X023130Y011653D01*
+X023093Y011565D01*
+X023093Y011404D01*
+X023057Y011404D01*
+X023057Y011565D01*
+X023020Y011653D01*
+X022952Y011721D01*
+X022940Y011726D01*
+X022947Y011739D01*
+X022957Y011774D01*
+X022957Y011950D01*
+X022640Y011950D01*
+X022640Y012030D01*
+X022560Y012030D01*
+X022560Y012326D01*
+X022365Y012326D01*
+X022329Y012317D01*
+X022298Y012299D01*
+X022271Y012272D01*
+X022253Y012241D01*
+X022243Y012205D01*
+X022243Y012030D01*
+X022560Y012030D01*
+X022560Y011950D01*
+X022243Y011950D01*
+X022243Y011774D01*
+X022253Y011739D01*
+X022260Y011726D01*
+X022248Y011721D01*
+X022180Y011653D01*
+X022143Y011565D01*
+X022143Y011076D01*
+X022162Y011030D01*
+X022143Y010984D01*
+X022143Y010495D01*
+X022180Y010407D01*
+X022182Y010405D01*
+X022180Y010403D01*
+X022143Y010315D01*
+X022143Y010004D01*
+X022107Y010004D01*
+X022107Y010315D01*
+X022070Y010403D01*
+X022068Y010405D01*
+X022070Y010407D01*
+X022107Y010495D01*
+X022107Y010984D01*
+X022088Y011030D01*
+X022107Y011076D01*
+X022107Y011565D01*
+X022070Y011653D01*
+X022002Y011721D01*
+X021990Y011726D01*
+X021997Y011739D01*
+X022007Y011774D01*
+X022007Y011950D01*
+X021690Y011950D01*
+X021690Y012030D01*
+X021610Y012030D01*
+X021610Y012326D01*
+X021415Y012326D01*
+X021379Y012317D01*
+X021348Y012299D01*
+X021321Y012272D01*
+X021303Y012241D01*
+X021293Y012205D01*
+X021293Y012030D01*
+X021610Y012030D01*
+X021610Y011950D01*
+X021293Y011950D01*
+X021293Y011774D01*
+X021303Y011739D01*
+X021310Y011726D01*
+X021298Y011721D01*
+X021230Y011653D01*
+X021193Y011565D01*
+X021193Y011448D01*
+X021179Y011454D01*
+X021049Y011454D01*
+X021049Y011484D01*
+X020988Y011631D01*
+X020879Y011740D01*
+X020912Y011822D01*
+X020912Y012348D01*
+X021160Y012348D01*
+X021248Y012385D01*
+X021316Y012453D01*
+X021321Y012465D01*
+X021334Y012458D01*
+X021369Y012448D01*
+X021545Y012448D01*
+X021545Y012765D01*
+X021625Y012765D01*
+X021625Y012845D01*
+X021921Y012845D01*
+X021921Y013040D01*
+X021912Y013076D01*
+X021894Y013107D01*
+X021867Y013134D01*
+X021836Y013152D01*
+X021800Y013162D01*
+X021625Y013162D01*
+X021625Y012845D01*
+X021545Y012845D01*
+X021545Y013162D01*
+X021369Y013162D01*
+X021334Y013152D01*
+X021321Y013145D01*
+X021316Y013157D01*
+X021248Y013225D01*
+X021160Y013262D01*
+X020780Y013262D01*
+X020780Y013426D01*
+X020805Y013451D01*
+X020860Y013583D01*
+X020860Y013727D01*
+X020810Y013847D01*
+X020810Y013945D01*
+X021188Y013945D01*
+X021188Y013912D01*
+X021225Y013824D01*
+X021292Y013756D01*
+X021381Y013720D01*
+X022854Y013720D01*
+X022942Y013756D01*
+X023010Y013824D01*
+X023046Y013912D01*
+X023046Y014598D01*
+X023010Y014686D01*
+X022942Y014754D01*
+X022854Y014790D01*
+X022099Y014790D01*
+X022188Y014879D01*
+X022249Y015026D01*
+X022249Y015184D01*
+X022188Y015331D01*
+X022076Y015443D01*
+X021929Y015504D01*
+X021771Y015504D01*
+X021624Y015443D01*
+X021549Y015368D01*
+X021549Y015434D01*
+X021488Y015581D01*
+X021376Y015693D01*
+X021229Y015754D01*
+X021071Y015754D01*
+X020924Y015693D01*
+X020812Y015581D01*
+X020751Y015434D01*
+X020751Y015276D01*
+X020812Y015129D01*
+X020924Y015017D01*
+X021071Y014956D01*
+X021229Y014956D01*
+X021376Y015017D01*
+X021451Y015092D01*
+X021451Y015026D01*
+X021512Y014879D01*
+X021601Y014790D01*
+X021381Y014790D01*
+X021292Y014754D01*
+X021225Y014686D01*
+X021216Y014665D01*
+X020542Y014665D01*
+X020516Y014676D01*
+X020519Y014679D01*
+X020115Y015084D01*
+X020171Y015140D01*
+X020576Y014736D01*
+X020582Y014741D01*
+X020638Y014819D01*
+X020682Y014905D01*
+X020712Y014997D01*
+X020727Y015092D01*
+X020727Y015189D01*
+X020712Y015284D01*
+X020682Y015375D01*
+X020638Y015461D01*
+X020582Y015539D01*
+X020576Y015545D01*
+X020171Y015140D01*
+X020115Y015197D01*
+X020519Y015602D01*
+X020514Y015608D01*
+X020436Y015664D01*
+X020350Y015708D01*
+X020258Y015738D01*
+X020163Y015753D01*
+X020066Y015753D01*
+X019971Y015738D01*
+X019879Y015708D01*
+X019794Y015664D01*
+X019716Y015608D01*
+X019710Y015602D01*
+X020115Y015197D01*
+X020058Y015140D01*
+X020115Y015084D01*
+X019746Y014715D01*
+X018461Y014715D01*
+X018461Y014924D01*
+X017790Y014924D01*
+X017790Y015004D01*
+X018461Y015004D01*
+X018461Y015278D01*
+X018451Y015314D01*
+X018433Y015346D01*
+X018407Y015372D01*
+X018375Y015390D01*
+X018339Y015400D01*
+X018117Y015400D01*
+X018149Y015476D01*
+X018149Y015610D01*
+X018369Y015610D01*
+X018457Y015647D01*
+X018524Y015714D01*
+X018553Y015784D01*
+X018621Y015756D01*
+X018779Y015756D01*
+X018926Y015817D01*
+X019038Y015929D01*
+X019099Y016076D01*
+X019099Y016234D01*
+X019038Y016381D01*
+X018926Y016493D01*
+X018779Y016554D01*
+X018621Y016554D01*
+X018547Y016523D01*
+X018524Y016577D01*
+X018457Y016644D01*
+X018369Y016681D01*
+X017131Y016681D01*
+X017043Y016644D01*
+X016976Y016577D01*
+X016939Y016489D01*
+X016939Y016465D01*
+X016778Y016465D01*
+X016699Y016432D01*
+X016699Y016584D01*
+X016638Y016731D01*
+X016526Y016843D01*
+X016379Y016904D01*
+X016221Y016904D01*
+X016085Y016848D01*
+X016085Y017495D01*
+X016076Y017531D01*
+X016057Y017563D01*
+X016031Y017589D01*
+X015999Y017607D01*
+X015973Y017614D01*
+X015988Y017629D01*
+X016049Y017776D01*
+X016049Y017934D01*
+X015988Y018081D01*
+X015876Y018193D01*
+X015729Y018254D01*
+X015571Y018254D01*
+X015424Y018193D01*
+X015312Y018081D01*
+X015251Y017934D01*
+X015251Y017776D01*
+X015312Y017629D01*
+X015327Y017614D01*
+X015301Y017607D01*
+X015269Y017589D01*
+X015243Y017563D01*
+X015224Y017531D01*
+X015215Y017495D01*
+X015215Y016828D01*
+X015610Y016828D01*
+X015610Y016748D01*
+X015215Y016748D01*
+X015215Y016080D01*
+X015219Y016065D01*
+X014849Y016065D01*
+X014654Y016260D01*
+X014522Y016315D01*
+X013870Y016315D01*
+X013870Y016403D01*
+X013833Y016491D01*
+X013766Y016558D01*
+X013678Y016595D01*
+X013322Y016595D01*
+X013250Y016565D01*
+X013178Y016595D01*
+X012822Y016595D01*
+X012750Y016565D01*
+X012678Y016595D01*
+X012322Y016595D01*
+X012250Y016565D01*
+X012178Y016595D01*
+X011822Y016595D01*
+X011734Y016558D01*
+X011667Y016491D01*
+X011630Y016403D01*
+X011630Y015507D01*
+X011667Y015419D01*
+X011720Y015366D01*
+X011720Y015199D01*
+X011722Y015195D01*
+X011579Y015254D01*
+X011421Y015254D01*
+X011274Y015193D01*
+X011162Y015081D01*
+X011101Y014934D01*
+X011101Y014776D01*
+X011162Y014629D01*
+X011274Y014517D01*
+X011421Y014456D01*
+X011579Y014456D01*
+X011669Y014493D01*
+X011667Y014491D01*
+X011630Y014403D01*
+X011629Y014404D01*
+X011471Y014404D01*
+X011324Y014343D01*
+X011212Y014231D01*
+X011151Y014084D01*
+X011151Y013926D01*
+X011212Y013779D01*
+X011320Y013671D01*
+X011320Y013462D01*
+X011171Y013462D01*
+X011083Y013425D01*
+X011015Y013357D01*
+X010979Y013269D01*
+X010979Y012835D01*
+X010949Y012835D01*
+X010949Y012884D01*
+X010888Y013031D01*
+X010776Y013143D01*
+X010629Y013204D01*
+X010471Y013204D01*
+X010324Y013143D01*
+X010299Y013118D01*
+X010299Y013134D01*
+X010244Y013266D01*
+X010268Y013289D01*
+X010342Y013289D01*
+X010378Y013299D01*
+X010410Y013317D01*
+X010436Y013343D01*
+X010454Y013375D01*
+X010464Y013411D01*
+X010464Y013477D01*
+X010524Y013417D01*
+X010671Y013356D01*
+X010829Y013356D01*
+X010976Y013417D01*
+X011088Y013529D01*
+X011149Y013676D01*
+X011149Y013834D01*
+X011088Y013981D01*
+X011030Y014039D01*
+X011030Y014061D01*
+X010987Y014164D01*
+X010837Y014314D01*
+X010759Y014392D01*
+X011442Y014392D01*
+X011386Y014471D02*
+X010262Y014471D01*
+X010226Y014435D02*
+X010491Y014700D01*
+X010533Y014802D01*
+X010533Y015707D01*
+X010564Y015781D01*
+X010564Y016428D01*
+X010527Y016516D01*
+X010460Y016584D01*
+X010372Y016620D01*
+X010311Y016620D01*
+X010337Y016646D01*
+X010337Y016646D01*
+X010609Y016918D01*
+X010687Y016996D01*
+X010730Y017099D01*
+X010730Y017371D01*
+X010734Y017375D02*
+X013651Y017375D01*
+X013651Y017434D02*
+X013651Y017276D01*
+X013712Y017129D01*
+X013824Y017017D01*
+X013971Y016956D01*
+X014129Y016956D01*
+X014276Y017017D01*
+X014388Y017129D01*
+X014449Y017276D01*
+X014449Y017434D01*
+X014388Y017581D01*
+X014276Y017693D01*
+X014129Y017754D01*
+X013971Y017754D01*
+X013824Y017693D01*
+X013712Y017581D01*
+X013651Y017434D01*
+X013659Y017454D02*
+X010798Y017454D01*
+X010831Y017532D02*
+X013692Y017532D01*
+X013742Y017611D02*
+X012990Y017611D01*
+X013148Y017689D02*
+X013820Y017689D01*
+X014280Y017689D02*
+X015287Y017689D01*
+X015314Y017611D02*
+X014358Y017611D01*
+X014408Y017532D02*
+X015225Y017532D01*
+X015215Y017454D02*
+X014441Y017454D01*
+X014449Y017375D02*
+X015215Y017375D01*
+X015215Y017297D02*
+X014449Y017297D01*
+X014425Y017218D02*
+X015215Y017218D01*
+X015215Y017140D02*
+X014392Y017140D01*
+X014320Y017061D02*
+X015215Y017061D01*
+X015215Y016983D02*
+X014193Y016983D01*
+X013907Y016983D02*
+X010674Y016983D01*
+X010714Y017061D02*
+X013780Y017061D01*
+X013708Y017140D02*
+X010730Y017140D01*
+X010730Y017218D02*
+X013675Y017218D01*
+X013651Y017297D02*
+X010730Y017297D01*
+X010849Y017611D02*
+X012810Y017611D01*
+X012652Y017689D02*
+X010849Y017689D01*
+X010835Y017768D02*
+X012574Y017768D01*
+X012534Y017846D02*
+X010802Y017846D01*
+X010744Y017925D02*
+X012471Y017925D01*
+X012393Y018003D02*
+X010652Y018003D01*
+X010522Y018239D02*
+X012157Y018239D01*
+X012088Y018317D02*
+X010665Y018317D01*
+X010743Y018396D02*
+X012056Y018396D01*
+X012040Y018474D02*
+X010822Y018474D01*
+X010900Y018553D02*
+X011986Y018553D01*
+X011909Y018631D02*
+X010979Y018631D01*
+X010343Y018160D02*
+X012236Y018160D01*
+X012314Y018082D02*
+X010292Y018082D01*
+X010248Y018003D02*
+X009201Y018003D01*
+X009122Y017925D02*
+X010156Y017925D01*
+X010098Y017846D02*
+X009120Y017846D01*
+X009510Y017768D02*
+X009590Y017768D01*
+X009590Y017689D02*
+X009510Y017689D01*
+X009510Y017611D02*
+X009590Y017611D01*
+X009590Y017532D02*
+X009510Y017532D01*
+X009510Y017454D02*
+X009590Y017454D01*
+X010595Y016904D02*
+X015215Y016904D01*
+X015215Y016747D02*
+X010438Y016747D01*
+X010360Y016669D02*
+X015215Y016669D01*
+X015215Y016590D02*
+X013690Y016590D01*
+X013813Y016512D02*
+X015215Y016512D01*
+X015215Y016433D02*
+X013857Y016433D01*
+X013870Y016355D02*
+X015215Y016355D01*
+X015215Y016276D02*
+X014616Y016276D01*
+X014717Y016198D02*
+X015215Y016198D01*
+X015215Y016119D02*
+X014795Y016119D01*
+X014301Y015595D02*
+X014395Y015501D01*
+X014496Y015400D01*
+X014628Y015345D01*
+X015115Y015345D01*
+X015115Y015215D01*
+X014223Y015215D01*
+X014129Y015254D01*
+X013971Y015254D01*
+X013824Y015193D01*
+X013712Y015081D01*
+X013651Y014934D01*
+X013651Y014776D01*
+X013690Y014682D01*
+X013690Y014590D01*
+X013678Y014595D01*
+X013322Y014595D01*
+X013234Y014558D01*
+X013167Y014491D01*
+X013166Y014490D01*
+X013148Y014495D01*
+X013025Y014495D01*
+X013025Y013980D01*
+X012975Y013980D01*
+X012975Y014495D01*
+X012965Y014495D01*
+X012999Y014576D01*
+X012999Y014734D01*
+X012938Y014881D01*
+X012826Y014993D01*
+X012679Y015054D01*
+X012597Y015054D01*
+X012336Y015315D01*
+X012678Y015315D01*
+X012750Y015345D01*
+X012822Y015315D01*
+X013178Y015315D01*
+X013250Y015345D01*
+X013322Y015315D01*
+X013678Y015315D01*
+X013766Y015352D01*
+X013833Y015419D01*
+X013870Y015507D01*
+X013870Y015595D01*
+X014301Y015595D01*
+X014326Y015570D02*
+X013870Y015570D01*
+X013863Y015491D02*
+X014405Y015491D01*
+X014483Y015413D02*
+X013827Y015413D01*
+X013724Y015334D02*
+X015115Y015334D01*
+X015115Y015256D02*
+X012395Y015256D01*
+X012474Y015177D02*
+X013808Y015177D01*
+X013730Y015099D02*
+X012552Y015099D01*
+X012761Y015020D02*
+X013687Y015020D01*
+X013654Y014942D02*
+X012877Y014942D01*
+X012945Y014863D02*
+X013651Y014863D01*
+X013651Y014785D02*
+X012978Y014785D01*
+X012999Y014706D02*
+X013680Y014706D01*
+X013690Y014628D02*
+X012999Y014628D01*
+X012988Y014549D02*
+X013225Y014549D01*
+X013025Y014471D02*
+X012975Y014471D01*
+X012975Y014392D02*
+X013025Y014392D01*
+X013025Y014314D02*
+X012975Y014314D01*
+X012975Y014235D02*
+X013025Y014235D01*
+X013025Y014157D02*
+X012975Y014157D01*
+X012975Y014078D02*
+X013025Y014078D01*
+X013025Y014000D02*
+X012975Y014000D01*
+X013000Y013955D02*
+X013000Y015055D01*
+X013224Y015334D02*
+X013276Y015334D01*
+X012776Y015334D02*
+X012724Y015334D01*
+X012600Y014655D02*
+X012000Y015255D01*
+X012000Y015955D01*
+X011630Y015962D02*
+X010564Y015962D01*
+X010564Y015884D02*
+X011630Y015884D01*
+X011630Y015805D02*
+X010564Y015805D01*
+X010541Y015727D02*
+X011630Y015727D01*
+X011630Y015648D02*
+X010533Y015648D01*
+X010533Y015570D02*
+X011630Y015570D01*
+X011637Y015491D02*
+X010533Y015491D01*
+X010533Y015413D02*
+X011673Y015413D01*
+X011720Y015334D02*
+X010533Y015334D01*
+X010533Y015256D02*
+X011720Y015256D01*
+X011258Y015177D02*
+X010533Y015177D01*
+X010533Y015099D02*
+X011180Y015099D01*
+X011137Y015020D02*
+X010533Y015020D01*
+X010533Y014942D02*
+X011104Y014942D01*
+X011101Y014863D02*
+X010533Y014863D01*
+X010526Y014785D02*
+X011101Y014785D01*
+X011130Y014706D02*
+X010493Y014706D01*
+X010419Y014628D02*
+X011164Y014628D01*
+X011242Y014549D02*
+X010340Y014549D01*
+X010226Y014435D02*
+X010656Y014435D01*
+X010759Y014392D01*
+X010837Y014314D02*
+X011295Y014314D01*
+X011216Y014235D02*
+X010916Y014235D01*
+X010990Y014157D02*
+X011181Y014157D01*
+X011151Y014078D02*
+X011023Y014078D01*
+X011069Y014000D02*
+X011151Y014000D01*
+X011153Y013921D02*
+X011113Y013921D01*
+X011145Y013843D02*
+X011186Y013843D01*
+X011149Y013764D02*
+X011227Y013764D01*
+X011149Y013686D02*
+X011306Y013686D01*
+X011320Y013607D02*
+X011120Y013607D01*
+X011200Y013605D02*
+X011200Y013405D01*
+X010950Y013155D01*
+X010450Y013155D01*
+X010253Y013352D01*
+X010253Y013705D01*
+X010000Y013705D02*
+X010000Y014105D01*
+X010050Y014155D01*
+X010600Y014155D01*
+X010750Y014005D01*
+X010750Y013755D01*
+X011009Y013450D02*
+X011143Y013450D01*
+X011087Y013529D02*
+X011320Y013529D01*
+X011600Y013505D02*
+X011600Y013955D01*
+X011550Y014005D01*
+X011614Y014471D02*
+X011658Y014471D01*
+X011600Y013505D02*
+X011700Y013405D01*
+X011950Y013405D01*
+X012085Y013270D01*
+X012085Y013005D01*
+X012665Y013155D02*
+X012900Y013155D01*
+X013000Y013055D01*
+X013000Y012055D01*
+X012850Y011905D01*
+X012850Y011955D01*
+X013100Y011705D02*
+X012115Y010720D01*
+X012150Y010720D01*
+X011500Y010720D01*
+X011500Y010705D01*
+X010700Y011505D01*
+X010700Y011555D01*
+X010700Y011811D02*
+X011044Y011811D01*
+X011465Y011390D01*
+X011500Y011390D01*
+X011515Y011390D01*
+X011550Y011355D01*
+X011585Y011390D01*
+X012150Y011390D01*
+X012150Y011705D01*
+X012300Y011855D01*
+X012050Y012055D02*
+X012050Y012305D01*
+X012100Y012355D01*
+X012085Y012355D01*
+X012050Y012355D01*
+X012200Y012505D01*
+X012665Y012505D01*
+X012050Y012355D02*
+X012000Y012305D01*
+X012050Y012055D02*
+X011950Y011955D01*
+X011200Y011955D01*
+X011088Y012067D01*
+X010700Y012067D01*
+X010259Y012037D02*
+X009251Y012037D01*
+X009251Y011959D02*
+X010259Y011959D01*
+X010259Y011880D02*
+X009251Y011880D01*
+X009251Y011802D02*
+X010259Y011802D01*
+X010259Y011723D02*
+X009251Y011723D01*
+X009251Y011645D02*
+X010259Y011645D01*
+X010259Y011566D02*
+X009251Y011566D01*
+X009251Y011488D02*
+X010182Y011488D01*
+X010221Y011504D02*
+X010074Y011443D01*
+X009962Y011331D01*
+X009920Y011231D01*
+X009917Y011234D01*
+X009886Y011252D01*
+X009850Y011262D01*
+X009675Y011262D01*
+X009675Y010945D01*
+X009595Y010945D01*
+X009595Y011262D01*
+X009419Y011262D01*
+X009384Y011252D01*
+X009368Y011252D01*
+X009366Y011257D02*
+X009298Y011325D01*
+X009222Y011357D01*
+X009251Y011427D01*
+X009251Y012360D01*
+X009599Y012360D01*
+X009641Y012318D01*
+X009744Y012275D01*
+X009856Y012275D01*
+X010292Y012275D01*
+X010259Y012195D01*
+X010259Y011504D01*
+X010221Y011504D01*
+X010040Y011409D02*
+X009244Y011409D01*
+X009285Y011331D02*
+X009962Y011331D01*
+X009929Y011252D02*
+X009885Y011252D01*
+X009675Y011252D02*
+X009595Y011252D01*
+X009595Y011174D02*
+X009675Y011174D01*
+X009675Y011095D02*
+X009595Y011095D01*
+X009595Y011017D02*
+X009675Y011017D01*
+X009635Y010905D02*
+X009635Y010890D01*
+X009600Y010855D01*
+X009600Y012055D01*
+X009868Y012323D01*
+X010700Y012323D01*
+X010550Y012555D02*
+X010550Y012805D01*
+X010550Y012555D02*
+X011000Y012555D01*
+X011100Y012455D01*
+X011400Y012455D01*
+X011415Y012440D01*
+X011450Y012405D01*
+X011415Y012370D01*
+X011415Y012355D01*
+X011415Y012440D01*
+X011415Y013005D01*
+X010979Y012979D02*
+X010910Y012979D01*
+X010942Y012901D02*
+X010979Y012901D01*
+X010979Y013058D02*
+X010861Y013058D01*
+X010783Y013136D02*
+X010979Y013136D01*
+X010979Y013215D02*
+X010266Y013215D01*
+X010298Y013136D02*
+X010317Y013136D01*
+X010356Y013293D02*
+X010988Y013293D01*
+X011029Y013372D02*
+X010866Y013372D01*
+X010634Y013372D02*
+X010452Y013372D01*
+X010464Y013450D02*
+X010491Y013450D01*
+X010000Y013705D02*
+X009997Y013705D01*
+X009750Y013755D02*
+X009750Y014355D01*
+X010253Y014858D01*
+X010253Y016105D01*
+X010564Y016119D02*
+X011630Y016119D01*
+X011630Y016041D02*
+X010564Y016041D01*
+X010564Y016198D02*
+X011630Y016198D01*
+X011630Y016276D02*
+X010564Y016276D01*
+X010564Y016355D02*
+X011630Y016355D01*
+X011643Y016433D02*
+X010562Y016433D01*
+X010529Y016512D02*
+X011687Y016512D01*
+X011810Y016590D02*
+X010445Y016590D01*
+X010517Y016826D02*
+X015610Y016826D01*
+X015600Y016805D02*
+X015617Y016788D01*
+X015900Y016505D01*
+X015900Y016155D01*
+X015950Y016105D01*
+X016150Y016105D01*
+X016190Y016119D02*
+X016085Y016119D01*
+X016085Y016080D02*
+X016085Y016162D01*
+X016221Y016106D01*
+X016342Y016106D01*
+X016301Y016065D01*
+X016081Y016065D01*
+X016085Y016080D01*
+X016699Y016433D02*
+X016701Y016433D01*
+X016699Y016512D02*
+X016949Y016512D01*
+X016989Y016590D02*
+X016696Y016590D01*
+X016664Y016669D02*
+X017102Y016669D01*
+X016622Y016747D02*
+X024377Y016747D01*
+X024351Y016684D02*
+X024351Y016526D01*
+X024412Y016379D01*
+X024524Y016267D01*
+X024671Y016206D01*
+X024829Y016206D01*
+X024976Y016267D01*
+X025088Y016379D01*
+X025149Y016526D01*
+X025149Y016684D01*
+X025088Y016831D01*
+X024976Y016943D01*
+X024880Y016983D01*
+X024910Y016978D01*
+X024910Y017415D01*
+X024473Y017415D01*
+X024484Y017343D01*
+X024507Y017272D01*
+X024542Y017205D01*
+X024586Y017144D01*
+X024639Y017091D01*
+X024700Y017047D01*
+X024767Y017012D01*
+X024794Y017004D01*
+X024671Y017004D01*
+X024524Y016943D01*
+X024412Y016831D01*
+X024351Y016684D01*
+X024351Y016669D02*
+X018398Y016669D01*
+X018511Y016590D02*
+X024351Y016590D01*
+X024357Y016512D02*
+X018881Y016512D01*
+X018986Y016433D02*
+X024390Y016433D01*
+X024437Y016355D02*
+X019049Y016355D01*
+X019081Y016276D02*
+X024515Y016276D01*
+X024985Y016276D02*
+X025170Y016276D01*
+X025170Y016198D02*
+X019099Y016198D01*
+X019099Y016119D02*
+X025170Y016119D01*
+X025020Y016041D02*
+X019084Y016041D01*
+X019052Y015962D02*
+X024920Y015962D01*
+X024884Y015884D02*
+X018992Y015884D01*
+X018897Y015805D02*
+X024879Y015805D01*
+X024879Y015727D02*
+X021295Y015727D01*
+X021421Y015648D02*
+X024879Y015648D01*
+X024879Y015570D02*
+X021493Y015570D01*
+X021525Y015491D02*
+X021740Y015491D01*
+X021594Y015413D02*
+X021549Y015413D01*
+X021454Y015020D02*
+X021379Y015020D01*
+X021486Y014942D02*
+X020694Y014942D01*
+X020716Y015020D02*
+X020921Y015020D01*
+X020843Y015099D02*
+X020727Y015099D01*
+X020727Y015177D02*
+X020792Y015177D01*
+X020760Y015256D02*
+X020716Y015256D01*
+X020696Y015334D02*
+X020751Y015334D01*
+X020751Y015413D02*
+X020663Y015413D01*
+X020617Y015491D02*
+X020775Y015491D01*
+X020807Y015570D02*
+X020487Y015570D01*
+X020458Y015648D02*
+X020879Y015648D01*
+X021005Y015727D02*
+X020293Y015727D01*
+X020409Y015491D02*
+X020522Y015491D01*
+X020443Y015413D02*
+X020330Y015413D01*
+X020365Y015334D02*
+X020252Y015334D01*
+X020286Y015256D02*
+X020173Y015256D01*
+X020208Y015177D02*
+X020134Y015177D01*
+X020095Y015177D02*
+X020021Y015177D01*
+X020058Y015140D02*
+X019653Y015545D01*
+X019647Y015539D01*
+X019591Y015461D01*
+X019547Y015375D01*
+X019517Y015284D01*
+X019502Y015189D01*
+X019502Y015092D01*
+X019517Y014997D01*
+X019547Y014905D01*
+X019591Y014819D01*
+X019647Y014741D01*
+X019653Y014736D01*
+X020058Y015140D01*
+X020016Y015099D02*
+X020100Y015099D01*
+X020129Y015099D02*
+X020213Y015099D01*
+X020178Y015020D02*
+X020291Y015020D01*
+X020257Y014942D02*
+X020370Y014942D01*
+X020335Y014863D02*
+X020448Y014863D01*
+X020414Y014785D02*
+X020527Y014785D01*
+X020613Y014785D02*
+X021367Y014785D01*
+X021245Y014706D02*
+X020492Y014706D01*
+X020661Y014863D02*
+X021528Y014863D01*
+X022172Y014863D02*
+X024278Y014863D01*
+X024236Y014942D02*
+X022214Y014942D01*
+X022246Y015020D02*
+X024204Y015020D01*
+X024201Y015099D02*
+X022249Y015099D01*
+X022249Y015177D02*
+X024201Y015177D01*
+X024231Y015256D02*
+X022219Y015256D01*
+X022185Y015334D02*
+X024265Y015334D01*
+X024344Y015413D02*
+X022106Y015413D01*
+X021960Y015491D02*
+X024490Y015491D01*
+X024710Y015491D02*
+X024879Y015491D01*
+X025315Y015605D02*
+X025315Y015120D01*
+X025300Y015105D01*
+X025551Y014706D02*
+X022990Y014706D01*
+X023034Y014628D02*
+X023477Y014628D01*
+X023454Y014549D02*
+X023046Y014549D01*
+X023046Y014471D02*
+X023454Y014471D01*
+X023454Y014392D02*
+X023046Y014392D01*
+X023046Y014314D02*
+X023454Y014314D01*
+X023454Y014157D02*
+X023046Y014157D01*
+X023046Y014235D02*
+X024243Y014235D01*
+X024243Y014157D02*
+X024323Y014157D01*
+X024323Y014235D02*
+X025179Y014235D01*
+X025179Y014157D02*
+X025112Y014157D01*
+X025112Y014078D02*
+X025179Y014078D01*
+X025179Y014000D02*
+X025112Y014000D01*
+X025106Y013921D02*
+X025187Y013921D01*
+X025050Y013555D02*
+X025000Y013505D01*
+X025050Y013555D02*
+X025615Y013555D01*
+X025615Y013590D01*
+X025700Y013505D01*
+X025700Y012705D01*
+X024785Y012744D02*
+X024599Y012744D01*
+X024599Y012822D02*
+X024785Y012822D01*
+X024785Y012901D02*
+X024571Y012901D01*
+X024539Y012979D02*
+X024785Y012979D01*
+X024785Y013058D02*
+X024461Y013058D01*
+X024322Y013136D02*
+X024799Y013136D01*
+X024727Y013215D02*
+X024080Y013215D01*
+X024152Y013293D02*
+X024656Y013293D01*
+X024624Y013372D02*
+X024230Y013372D01*
+X024267Y013450D02*
+X024601Y013450D01*
+X024601Y013529D02*
+X024299Y013529D01*
+X024299Y013607D02*
+X024611Y013607D01*
+X024643Y013686D02*
+X024298Y013686D01*
+X024266Y013764D02*
+X024695Y013764D01*
+X024323Y013843D02*
+X024243Y013843D01*
+X024243Y013820D02*
+X024243Y013820D01*
+X024243Y013921D02*
+X024323Y013921D01*
+X024323Y014000D02*
+X024243Y014000D01*
+X024243Y014078D02*
+X024323Y014078D01*
+X024323Y014314D02*
+X024243Y014314D01*
+X024243Y014392D02*
+X024323Y014392D01*
+X024323Y014471D02*
+X024243Y014471D01*
+X024243Y014549D02*
+X024323Y014549D01*
+X024323Y014628D02*
+X024243Y014628D01*
+X024357Y014785D02*
+X022868Y014785D01*
+X023046Y014078D02*
+X023454Y014078D01*
+X023454Y014000D02*
+X023046Y014000D01*
+X023046Y013921D02*
+X023459Y013921D01*
+X023517Y013843D02*
+X023018Y013843D01*
+X022950Y013764D02*
+X023534Y013764D01*
+X023502Y013686D02*
+X020860Y013686D01*
+X020860Y013607D02*
+X023501Y013607D01*
+X023501Y013529D02*
+X020837Y013529D01*
+X020804Y013450D02*
+X023520Y013450D01*
+X023520Y013372D02*
+X020780Y013372D01*
+X020780Y013293D02*
+X023520Y013293D01*
+X023520Y013215D02*
+X021259Y013215D01*
+X021545Y013136D02*
+X021625Y013136D01*
+X021625Y013058D02*
+X021545Y013058D01*
+X021545Y012979D02*
+X021625Y012979D01*
+X021625Y012901D02*
+X021545Y012901D01*
+X021625Y012822D02*
+X023520Y012822D01*
+X023520Y012744D02*
+X021921Y012744D01*
+X021921Y012765D02*
+X021625Y012765D01*
+X021625Y012448D01*
+X021800Y012448D01*
+X021836Y012458D01*
+X021867Y012476D01*
+X021894Y012503D01*
+X021912Y012534D01*
+X021921Y012570D01*
+X021921Y012765D01*
+X021921Y012665D02*
+X023520Y012665D01*
+X023520Y012587D02*
+X021921Y012587D01*
+X021897Y012508D02*
+X023520Y012508D01*
+X023528Y012430D02*
+X021293Y012430D01*
+X021166Y012351D02*
+X023561Y012351D01*
+X023590Y012273D02*
+X023510Y012273D01*
+X023510Y012194D02*
+X023590Y012194D01*
+X023590Y012116D02*
+X023510Y012116D01*
+X023510Y012037D02*
+X023590Y012037D01*
+X023510Y011959D02*
+X022640Y011959D01*
+X022640Y012030D02*
+X022957Y012030D01*
+X022957Y012205D01*
+X022947Y012241D01*
+X022929Y012272D01*
+X022902Y012299D01*
+X022871Y012317D01*
+X022835Y012326D01*
+X022640Y012326D01*
+X022640Y012030D01*
+X022640Y012037D02*
+X022560Y012037D01*
+X022560Y011959D02*
+X021690Y011959D01*
+X021690Y012030D02*
+X022007Y012030D01*
+X022007Y012205D01*
+X021997Y012241D01*
+X021979Y012272D01*
+X021952Y012299D01*
+X021921Y012317D01*
+X021885Y012326D01*
+X021690Y012326D01*
+X021690Y012030D01*
+X021690Y012037D02*
+X021610Y012037D01*
+X021610Y011959D02*
+X020912Y011959D01*
+X020912Y012037D02*
+X021293Y012037D01*
+X021293Y012116D02*
+X020912Y012116D01*
+X020912Y012194D02*
+X021293Y012194D01*
+X021322Y012273D02*
+X020912Y012273D01*
+X020613Y012165D02*
+X020610Y012165D01*
+X020600Y012155D01*
+X020590Y012165D01*
+X020357Y012165D01*
+X020357Y012162D01*
+X020350Y012155D01*
+X020350Y012505D01*
+X020500Y012655D01*
+X020500Y012805D01*
+X020500Y012790D01*
+X020915Y012790D01*
+X020915Y012805D01*
+X020915Y012790D02*
+X020950Y012755D01*
+X020500Y012805D02*
+X020500Y013655D01*
+X020450Y013705D02*
+X019985Y013705D01*
+X019315Y013705D02*
+X018735Y013705D01*
+X018700Y013705D01*
+X019315Y013690D02*
+X019315Y013705D01*
+X019315Y013690D02*
+X020000Y013005D01*
+X019985Y012990D01*
+X019985Y012955D01*
+X020000Y012955D01*
+X019590Y012545D01*
+X019590Y012165D01*
+X019334Y012165D02*
+X019334Y011621D01*
+X019500Y011455D01*
+X020000Y011455D01*
+X020100Y011555D01*
+X020100Y012155D01*
+X020102Y012157D01*
+X020102Y012165D01*
+X020357Y012165D01*
+X020357Y012198D01*
+X020350Y012205D01*
+X020357Y012165D02*
+X020357Y009645D01*
+X020102Y009645D02*
+X020102Y009153D01*
+X020250Y009005D01*
+X020419Y008836D01*
+X020419Y007905D01*
+X020615Y007905D02*
+X020615Y008620D01*
+X020800Y008805D01*
+X021000Y008805D01*
+X021250Y009055D01*
+X021350Y008955D01*
+X021765Y008955D01*
+X022100Y009205D02*
+X022200Y009305D01*
+X022750Y009305D01*
+X022900Y009155D01*
+X022850Y009155D01*
+X023761Y008244D01*
+X023761Y007969D01*
+X023761Y008062D02*
+X023761Y008158D01*
+X023549Y008158D01*
+X023549Y008234D01*
+X023488Y008381D01*
+X023376Y008493D01*
+X023229Y008554D01*
+X023071Y008554D01*
+X022924Y008493D01*
+X022812Y008381D01*
+X022780Y008304D01*
+X022780Y008548D01*
+X022835Y008603D01*
+X022871Y008691D01*
+X022871Y009219D01*
+X022835Y009307D01*
+X022826Y009317D01*
+X022938Y009429D01*
+X022999Y009576D01*
+X022999Y009716D01*
+X023020Y009738D01*
+X023057Y009826D01*
+X023057Y010315D01*
+X023020Y010403D01*
+X023018Y010405D01*
+X023020Y010407D01*
+X023057Y010495D01*
+X023057Y010606D01*
+X023093Y010606D01*
+X023093Y010495D01*
+X023130Y010407D01*
+X023132Y010405D01*
+X023130Y010403D01*
+X023093Y010315D01*
+X023093Y009826D01*
+X023130Y009738D01*
+X023198Y009670D01*
+X023286Y009634D01*
+X023814Y009634D01*
+X023902Y009670D01*
+X023970Y009738D01*
+X023986Y009775D01*
+X024006Y009775D01*
+X024109Y009818D01*
+X024120Y009829D01*
+X024120Y009799D01*
+X024163Y009696D01*
+X024434Y009425D01*
+X024395Y009385D01*
+X024358Y009296D01*
+X024358Y009285D01*
+X024034Y009285D01*
+X023976Y009343D01*
+X023829Y009404D01*
+X023671Y009404D01*
+X023524Y009343D01*
+X023412Y009231D01*
+X023351Y009084D01*
+X023351Y008926D01*
+X023412Y008779D01*
+X023524Y008667D01*
+X023671Y008606D01*
+X023829Y008606D01*
+X023976Y008667D01*
+X024034Y008725D01*
+X024358Y008725D01*
+X024358Y008527D01*
+X024262Y008431D01*
+X024201Y008284D01*
+X024201Y008151D01*
+X024174Y008158D01*
+X023761Y008158D01*
+X023761Y008062D01*
+X023761Y008062D01*
+X023761Y008112D02*
+X023761Y008112D01*
+X023549Y008191D02*
+X024201Y008191D01*
+X024201Y008269D02*
+X023534Y008269D01*
+X023502Y008348D02*
+X024227Y008348D01*
+X024260Y008426D02*
+X023443Y008426D01*
+X023348Y008505D02*
+X024336Y008505D01*
+X024358Y008583D02*
+X022815Y008583D01*
+X022780Y008505D02*
+X022952Y008505D01*
+X022857Y008426D02*
+X022780Y008426D01*
+X022780Y008348D02*
+X022798Y008348D01*
+X022780Y008304D02*
+X022780Y008304D01*
+X022859Y008662D02*
+X023537Y008662D01*
+X023451Y008740D02*
+X022871Y008740D01*
+X022871Y008819D02*
+X023396Y008819D01*
+X023363Y008897D02*
+X022871Y008897D01*
+X022871Y008976D02*
+X023351Y008976D01*
+X023351Y009054D02*
+X022871Y009054D01*
+X022871Y009133D02*
+X023371Y009133D01*
+X023404Y009211D02*
+X022871Y009211D01*
+X022842Y009290D02*
+X023471Y009290D01*
+X023584Y009368D02*
+X022877Y009368D01*
+X022826Y009317D02*
+X022826Y009317D01*
+X022945Y009447D02*
+X024412Y009447D01*
+X024388Y009368D02*
+X023916Y009368D01*
+X024029Y009290D02*
+X024358Y009290D01*
+X024334Y009525D02*
+X022978Y009525D01*
+X022999Y009604D02*
+X024255Y009604D01*
+X024177Y009682D02*
+X023914Y009682D01*
+X023980Y009761D02*
+X024136Y009761D01*
+X024400Y009855D02*
+X024844Y009411D01*
+X024844Y008855D01*
+X024650Y008855D02*
+X024647Y008855D01*
+X024647Y009002D01*
+X024650Y009005D01*
+X023750Y009005D01*
+X023963Y008662D02*
+X024358Y008662D01*
+X025041Y008855D02*
+X025041Y008946D01*
+X025050Y008955D01*
+X025050Y009655D01*
+X025000Y009705D01*
+X025300Y009455D02*
+X025300Y009955D01*
+X025435Y010090D01*
+X025435Y010370D01*
+X025400Y010405D01*
+X025350Y010405D01*
+X025259Y010314D01*
+X025291Y010314D01*
+X025200Y010405D01*
+X025200Y010514D01*
+X025259Y010314D02*
+X025250Y010305D01*
+X025291Y010314D02*
+X025300Y010305D01*
+X025435Y010370D02*
+X025459Y010346D01*
+X025459Y010314D01*
+X026141Y010314D01*
+X026200Y010255D01*
+X026250Y010305D01*
+X026222Y010277D01*
+X026222Y008855D01*
+X026222Y008233D01*
+X026300Y008155D01*
+X027050Y007405D01*
+X027250Y007405D01*
+X027814Y007969D01*
+X028486Y007969D01*
+X028486Y007772D02*
+X029017Y007772D01*
+X029200Y007955D01*
+X029200Y008855D01*
+X029150Y008905D01*
+X028900Y008905D01*
+X028800Y009005D01*
+X028800Y009905D01*
+X028550Y010155D01*
+X028550Y010170D01*
+X028590Y010800D02*
+X028590Y010880D01*
+X028907Y010880D01*
+X029160Y010880D01*
+X029160Y011176D01*
+X028965Y011176D01*
+X028929Y011167D01*
+X028898Y011149D01*
+X028875Y011126D01*
+X028852Y011149D01*
+X028821Y011167D01*
+X028785Y011176D01*
+X028728Y011176D01*
+X028749Y011226D01*
+X028749Y011384D01*
+X028688Y011531D01*
+X028576Y011643D01*
+X028429Y011704D01*
+X028307Y011704D01*
+X028307Y011734D01*
+X028270Y011822D01*
+X028202Y011890D01*
+X028114Y011926D01*
+X027824Y011926D01*
+X027567Y012184D01*
+X028617Y012184D01*
+X028705Y012220D01*
+X028772Y012288D01*
+X028809Y012376D01*
+X028809Y012430D02*
+X030691Y012430D01*
+X030691Y012508D02*
+X028809Y012508D01*
+X028809Y012587D02*
+X030691Y012587D01*
+X030691Y012665D02*
+X028809Y012665D01*
+X028809Y012744D02*
+X030691Y012744D01*
+X030691Y012822D02*
+X028809Y012822D01*
+X028809Y012901D02*
+X030691Y012901D01*
+X030691Y012979D02*
+X028809Y012979D01*
+X028809Y013058D02*
+X030691Y013058D01*
+X030722Y013136D02*
+X028778Y013136D01*
+X028708Y013215D02*
+X030792Y013215D01*
+X030801Y013293D02*
+X027385Y013293D01*
+X027407Y013372D02*
+X030801Y013372D01*
+X030808Y013450D02*
+X028735Y013450D01*
+X028837Y013529D02*
+X030840Y013529D01*
+X030888Y013607D02*
+X028900Y013607D01*
+X028932Y013686D02*
+X030967Y013686D01*
+X030913Y014056D02*
+X031482Y014056D01*
+X031482Y014451D01*
+X030791Y014451D01*
+X030791Y014177D01*
+X030801Y014142D01*
+X030819Y014110D01*
+X030845Y014084D01*
+X030877Y014065D01*
+X030913Y014056D01*
+X030855Y014078D02*
+X030332Y014078D01*
+X030279Y014056D02*
+X030426Y014117D01*
+X030538Y014229D01*
+X030599Y014376D01*
+X030599Y014534D01*
+X030538Y014681D01*
+X030426Y014793D01*
+X030279Y014854D01*
+X030121Y014854D01*
+X029974Y014793D01*
+X029862Y014681D01*
+X029801Y014534D01*
+X029801Y014376D01*
+X029862Y014229D01*
+X029974Y014117D01*
+X030121Y014056D01*
+X030279Y014056D01*
+X030465Y014157D02*
+X030797Y014157D01*
+X030791Y014235D02*
+X030540Y014235D01*
+X030573Y014314D02*
+X030791Y014314D01*
+X030791Y014392D02*
+X030599Y014392D01*
+X030599Y014471D02*
+X031482Y014471D01*
+X031482Y014549D02*
+X031562Y014549D01*
+X031562Y014628D02*
+X031482Y014628D01*
+X031482Y014706D02*
+X031562Y014706D01*
+X031562Y014785D02*
+X031482Y014785D01*
+X031482Y014863D02*
+X031562Y014863D01*
+X032200Y014942D02*
+X028753Y014942D01*
+X028797Y014863D02*
+X030814Y014863D01*
+X030791Y014785D02*
+X030434Y014785D01*
+X030513Y014706D02*
+X030791Y014706D01*
+X030791Y014628D02*
+X030560Y014628D01*
+X030593Y014549D02*
+X030791Y014549D01*
+X031482Y014392D02*
+X031562Y014392D01*
+X031562Y014314D02*
+X031482Y014314D01*
+X031482Y014235D02*
+X031562Y014235D01*
+X031562Y014157D02*
+X031482Y014157D01*
+X031482Y014078D02*
+X031562Y014078D01*
+X032189Y014078D02*
+X032200Y014078D01*
+X032200Y014000D02*
+X028901Y014000D01*
+X028934Y013921D02*
+X032200Y013921D01*
+X032200Y013843D02*
+X028949Y013843D01*
+X028949Y013764D02*
+X032200Y013764D01*
+X032200Y013686D02*
+X031433Y013686D01*
+X031512Y013607D02*
+X032200Y013607D01*
+X032200Y013529D02*
+X031560Y013529D01*
+X031592Y013450D02*
+X032200Y013450D01*
+X032200Y013372D02*
+X031599Y013372D01*
+X031599Y013293D02*
+X032200Y013293D01*
+X032184Y012194D02*
+X032200Y012194D01*
+X030250Y011905D02*
+X030220Y011875D01*
+X030220Y011305D01*
+X029780Y011331D02*
+X028749Y011331D01*
+X028739Y011409D02*
+X029780Y011409D01*
+X029780Y011488D02*
+X028706Y011488D01*
+X028653Y011566D02*
+X029786Y011566D01*
+X029820Y011645D02*
+X028572Y011645D01*
+X028307Y011723D02*
+X029894Y011723D01*
+X029861Y011802D02*
+X028279Y011802D01*
+X028212Y011880D02*
+X029851Y011880D01*
+X029851Y011959D02*
+X027792Y011959D01*
+X027714Y012037D02*
+X029873Y012037D01*
+X029906Y012116D02*
+X027635Y012116D01*
+X027250Y012105D02*
+X027865Y011490D01*
+X027850Y011490D01*
+X027865Y011490D02*
+X027900Y011455D01*
+X028350Y011305D02*
+X027850Y010805D01*
+X027850Y010820D01*
+X028590Y010800D02*
+X029160Y010800D01*
+X029160Y010880D01*
+X029240Y010880D01*
+X029240Y011176D01*
+X029435Y011176D01*
+X029471Y011167D01*
+X029502Y011149D01*
+X029529Y011122D01*
+X029547Y011091D01*
+X029557Y011055D01*
+X029557Y010880D01*
+X029240Y010880D01*
+X029240Y010938D02*
+X029160Y010938D01*
+X029160Y010860D02*
+X028590Y010860D01*
+X028796Y011174D02*
+X028954Y011174D01*
+X029160Y011174D02*
+X029240Y011174D01*
+X029240Y011095D02*
+X029160Y011095D01*
+X029160Y011017D02*
+X029240Y011017D01*
+X029446Y011174D02*
+X029780Y011174D01*
+X029780Y011252D02*
+X028749Y011252D01*
+X029544Y011095D02*
+X029780Y011095D01*
+X029797Y011017D02*
+X029557Y011017D01*
+X029557Y010938D02*
+X029848Y010938D01*
+X029200Y010170D02*
+X029200Y009540D01*
+X029657Y009525D02*
+X031428Y009525D01*
+X031428Y009447D02*
+X029657Y009447D01*
+X029657Y009368D02*
+X031455Y009368D01*
+X031511Y009290D02*
+X031029Y009290D01*
+X031089Y009211D02*
+X031590Y009211D01*
+X031552Y009249D02*
+X031552Y009249D01*
+X031451Y009604D02*
+X029657Y009604D01*
+X029657Y009682D02*
+X031501Y009682D01*
+X031496Y009761D02*
+X029657Y009761D01*
+X029634Y009839D02*
+X031496Y009839D01*
+X031496Y009918D02*
+X029653Y009918D01*
+X029657Y009996D02*
+X031498Y009996D01*
+X031521Y010075D02*
+X030849Y010075D01*
+X029771Y009290D02*
+X029654Y009290D01*
+X029622Y009211D02*
+X029711Y009211D01*
+X029688Y009133D02*
+X029649Y009133D01*
+X029657Y009054D02*
+X029688Y009054D01*
+X029688Y008976D02*
+X029657Y008976D01*
+X029657Y008897D02*
+X029688Y008897D01*
+X029688Y008819D02*
+X029657Y008819D01*
+X029657Y008740D02*
+X029688Y008740D01*
+X029688Y008662D02*
+X029657Y008662D01*
+X029639Y008583D02*
+X029688Y008583D01*
+X029688Y008505D02*
+X029587Y008505D01*
+X029688Y008426D02*
+X029480Y008426D01*
+X029480Y008348D02*
+X029688Y008348D01*
+X029618Y008269D02*
+X029480Y008269D01*
+X029480Y008191D02*
+X029540Y008191D01*
+X029939Y007798D02*
+X031660Y007798D01*
+X031660Y007780D02*
+X031343Y007780D01*
+X031343Y007605D01*
+X031350Y007580D01*
+X031343Y007555D01*
+X031343Y007380D01*
+X031660Y007380D01*
+X031660Y007300D01*
+X031343Y007300D01*
+X031343Y007124D01*
+X031353Y007089D01*
+X031360Y007076D01*
+X031348Y007071D01*
+X031280Y007003D01*
+X031272Y006985D01*
+X031112Y006985D01*
+X031112Y007225D01*
+X031076Y007313D01*
+X031008Y007381D01*
+X030920Y007417D01*
+X030084Y007417D01*
+X029885Y007616D01*
+X029794Y007653D01*
+X030062Y007921D01*
+X030920Y007921D01*
+X031008Y007958D01*
+X031076Y008025D01*
+X031112Y008114D01*
+X031112Y008354D01*
+X031243Y008354D01*
+X031243Y008245D01*
+X031280Y008157D01*
+X031348Y008089D01*
+X031360Y008084D01*
+X031353Y008071D01*
+X031343Y008036D01*
+X031343Y007860D01*
+X031660Y007860D01*
+X031660Y007780D01*
+X031700Y007805D02*
+X031400Y007805D01*
+X031250Y007655D01*
+X031450Y007455D01*
+X031600Y007455D01*
+X031660Y007406D02*
+X031740Y007406D01*
+X031740Y007380D02*
+X031740Y007484D01*
+X031740Y007563D02*
+X031660Y007563D01*
+X031660Y007641D02*
+X031740Y007641D01*
+X031740Y007720D02*
+X031660Y007720D01*
+X031700Y007805D02*
+X031700Y007820D01*
+X031740Y007798D02*
+X032200Y007798D01*
+X032200Y007720D02*
+X032057Y007720D01*
+X032057Y007780D02*
+X032057Y007605D01*
+X032050Y007580D01*
+X032057Y007555D01*
+X032057Y007380D01*
+X031740Y007380D01*
+X031660Y007327D02*
+X031062Y007327D01*
+X031103Y007249D02*
+X031343Y007249D01*
+X031343Y007170D02*
+X031112Y007170D01*
+X031112Y007092D02*
+X031352Y007092D01*
+X031290Y007013D02*
+X031112Y007013D01*
+X030948Y007406D02*
+X031343Y007406D01*
+X031343Y007484D02*
+X030017Y007484D01*
+X029938Y007563D02*
+X031346Y007563D01*
+X031343Y007641D02*
+X029825Y007641D01*
+X029861Y007720D02*
+X031343Y007720D01*
+X031250Y007655D02*
+X031050Y007655D01*
+X031000Y007655D01*
+X031002Y007955D02*
+X031343Y007955D01*
+X031343Y007877D02*
+X030018Y007877D01*
+X029610Y007099D02*
+X029113Y007099D01*
+X029120Y007082D01*
+X029120Y006888D01*
+X029119Y006886D01*
+X029120Y006885D01*
+X029120Y006871D01*
+X029222Y006829D01*
+X029688Y006363D01*
+X029688Y007021D01*
+X029610Y007099D01*
+X029617Y007092D02*
+X029116Y007092D01*
+X029120Y007013D02*
+X029688Y007013D01*
+X029688Y006935D02*
+X029120Y006935D01*
+X029156Y006856D02*
+X029688Y006856D01*
+X029688Y006778D02*
+X029273Y006778D01*
+X029352Y006699D02*
+X029688Y006699D01*
+X029688Y006621D02*
+X029430Y006621D01*
+X029509Y006542D02*
+X029688Y006542D01*
+X029688Y006464D02*
+X029587Y006464D01*
+X029666Y006385D02*
+X029688Y006385D01*
+X029064Y006591D02*
+X029915Y005740D01*
+X029915Y005755D01*
+X029915Y005140D01*
+X029950Y005105D01*
+X029915Y005105D01*
+X029500Y004905D02*
+X029500Y005905D01*
+X029011Y006394D01*
+X028486Y006394D01*
+X028486Y006591D02*
+X029064Y006591D01*
+X029400Y006805D02*
+X029450Y006805D01*
+X029500Y006805D01*
+X029400Y006805D02*
+X029023Y007182D01*
+X028486Y007182D01*
+X028486Y006985D02*
+X027880Y006985D01*
+X028470Y006985D01*
+X028500Y006955D01*
+X028486Y006941D01*
+X028486Y006788D01*
+X027880Y006985D02*
+X027850Y006955D01*
+X027250Y007405D02*
+X027250Y006305D01*
+X027554Y006001D01*
+X028486Y006001D01*
+X028486Y005804D02*
+X027101Y005804D01*
+X026600Y006305D01*
+X026250Y006055D02*
+X026250Y006855D01*
+X026600Y007205D01*
+X026700Y007205D01*
+X026750Y007205D01*
+X026900Y007805D02*
+X026419Y008286D01*
+X026419Y008855D01*
+X026419Y009824D01*
+X026500Y009905D01*
+X026915Y010320D01*
+X026950Y010320D01*
+X027393Y010596D02*
+X027370Y010653D01*
+X027302Y010721D01*
+X027290Y010726D01*
+X027297Y010739D01*
+X027307Y010774D01*
+X027307Y010950D01*
+X026990Y010950D01*
+X026990Y011030D01*
+X026910Y011030D01*
+X026910Y011326D01*
+X026715Y011326D01*
+X026679Y011317D01*
+X026648Y011299D01*
+X026621Y011272D01*
+X026603Y011241D01*
+X026600Y011229D01*
+X026597Y011241D01*
+X026579Y011272D01*
+X026552Y011299D01*
+X026521Y011317D01*
+X026485Y011326D01*
+X026290Y011326D01*
+X026290Y011030D01*
+X026210Y011030D01*
+X026210Y011326D01*
+X026015Y011326D01*
+X025979Y011317D01*
+X025948Y011299D01*
+X025921Y011272D01*
+X025903Y011241D01*
+X025893Y011205D01*
+X025893Y011030D01*
+X026210Y011030D01*
+X026210Y010950D01*
+X025970Y010950D01*
+X025907Y011013D01*
+X025819Y011050D01*
+X024680Y011050D01*
+X024680Y011260D01*
+X025160Y011260D01*
+X025160Y011656D01*
+X025240Y011656D01*
+X025240Y011736D01*
+X025911Y011736D01*
+X025911Y011875D01*
+X026506Y011875D01*
+X026555Y011896D01*
+X026562Y011879D01*
+X026674Y011767D01*
+X026821Y011706D01*
+X026979Y011706D01*
+X027126Y011767D01*
+X027159Y011800D01*
+X027393Y011566D01*
+X025911Y011566D01*
+X025911Y011488D02*
+X027393Y011488D01*
+X027393Y011566D02*
+X027393Y011245D01*
+X027430Y011157D01*
+X027432Y011155D01*
+X027430Y011153D01*
+X027393Y011065D01*
+X027393Y010596D01*
+X027393Y010624D02*
+X027382Y010624D01*
+X027393Y010703D02*
+X027321Y010703D01*
+X027307Y010781D02*
+X027393Y010781D01*
+X027403Y010802D02*
+X027250Y010955D01*
+X027050Y010955D01*
+X027000Y011005D01*
+X026985Y010990D01*
+X026950Y010990D01*
+X026990Y011017D02*
+X027393Y011017D01*
+X027393Y010938D02*
+X027307Y010938D01*
+X027307Y010860D02*
+X027393Y010860D01*
+X027403Y010802D02*
+X027403Y008855D01*
+X027206Y008855D02*
+X027200Y008849D01*
+X027200Y008405D01*
+X026950Y008155D01*
+X026900Y007805D02*
+X027400Y007805D01*
+X027600Y008005D01*
+X027600Y008855D01*
+X027900Y008855D01*
+X027009Y008855D02*
+X027009Y009746D01*
+X026900Y009855D01*
+X026500Y009905D02*
+X026450Y009855D01*
+X026025Y009780D02*
+X025900Y009905D01*
+X026025Y009780D02*
+X026025Y008855D01*
+X025828Y008855D02*
+X025828Y009377D01*
+X025600Y009605D01*
+X025435Y009320D02*
+X025300Y009455D01*
+X025435Y009320D02*
+X025435Y008855D01*
+X025435Y007190D01*
+X024836Y006591D01*
+X023761Y006591D01*
+X023761Y006394D02*
+X025339Y006394D01*
+X025350Y006405D01*
+X025650Y006705D02*
+X025650Y005105D01*
+X025435Y004890D01*
+X025435Y004131D01*
+X025631Y004131D02*
+X025631Y003486D01*
+X025400Y003255D01*
+X025450Y003255D01*
+X025150Y003255D02*
+X024930Y003475D01*
+X023650Y003475D01*
+X023600Y004055D02*
+X023400Y004255D01*
+X023400Y004605D01*
+X023100Y004905D01*
+X023100Y005305D01*
+X023205Y005410D01*
+X023761Y005410D01*
+X023761Y005213D02*
+X024708Y005213D01*
+X024900Y005405D01*
+X025238Y005343D02*
+X025350Y005455D01*
+X025350Y005655D01*
+X025238Y005343D02*
+X025238Y004131D01*
+X024844Y004131D02*
+X024844Y004949D01*
+X024850Y004955D01*
+X024900Y004955D01*
+X024850Y004955D02*
+X024800Y004905D01*
+X024647Y004131D02*
+X024647Y004108D01*
+X024650Y004105D01*
+X024150Y004105D01*
+X023000Y004255D02*
+X022850Y004105D01*
+X022200Y004105D01*
+X021944Y004361D01*
+X021600Y004361D01*
+X021600Y004164D02*
+X021191Y004164D01*
+X021100Y004255D01*
+X020800Y004255D01*
+X020450Y003905D01*
+X020450Y003855D01*
+X020450Y003805D01*
+X020650Y003605D01*
+X021050Y003605D01*
+X021216Y003771D01*
+X021600Y003771D01*
+X022466Y003771D01*
+X022500Y003805D01*
+X022500Y003770D01*
+X022250Y003355D02*
+X022031Y003574D01*
+X021600Y003574D01*
+X021600Y003377D02*
+X020472Y003377D01*
+X020450Y003355D01*
+X020076Y003495D02*
+X020051Y003434D01*
+X020051Y003276D01*
+X020112Y003129D01*
+X020224Y003017D01*
+X020371Y002956D01*
+X020529Y002956D01*
+X020676Y003017D01*
+X020756Y003097D01*
+X021064Y003097D01*
+X021064Y003083D01*
+X021101Y002995D01*
+X021164Y002932D01*
+X021164Y002916D01*
+X021173Y002885D01*
+X021164Y002854D01*
+X021164Y002838D01*
+X021101Y002775D01*
+X021064Y002687D01*
+X021064Y002673D01*
+X021035Y002673D01*
+X021006Y002685D01*
+X020834Y002685D01*
+X020776Y002743D01*
+X020629Y002804D01*
+X020471Y002804D01*
+X020324Y002743D01*
+X020212Y002631D01*
+X020151Y002484D01*
+X020151Y002326D01*
+X020212Y002179D01*
+X020300Y002091D01*
+X020125Y002091D01*
+X020123Y002091D01*
+X020122Y002091D01*
+X019928Y002091D01*
+X019926Y002091D01*
+X019925Y002091D01*
+X019731Y002091D01*
+X019730Y002091D01*
+X019728Y002091D01*
+X019534Y002091D01*
+X019533Y002091D01*
+X019531Y002091D01*
+X019337Y002091D01*
+X019336Y002091D01*
+X019334Y002091D01*
+X019140Y002091D01*
+X019139Y002091D01*
+X019138Y002091D01*
+X019085Y002091D01*
+X019099Y002126D01*
+X019099Y002284D01*
+X019038Y002431D01*
+X018926Y002543D01*
+X018779Y002604D01*
+X018621Y002604D01*
+X018474Y002543D01*
+X018362Y002431D01*
+X018320Y002331D01*
+X018259Y002392D01*
+X018156Y002435D01*
+X017566Y002435D01*
+X017549Y002452D01*
+X017549Y002534D01*
+X017488Y002681D01*
+X017376Y002793D01*
+X017229Y002854D01*
+X017071Y002854D01*
+X016924Y002793D01*
+X016816Y002685D01*
+X015836Y002685D01*
+X015836Y002687D01*
+X015835Y002688D01*
+X015836Y002690D01*
+X015836Y002883D01*
+X015835Y002885D01*
+X015836Y002886D01*
+X015836Y003080D01*
+X015835Y003082D01*
+X015836Y003083D01*
+X015836Y003277D01*
+X015835Y003279D01*
+X015836Y003280D01*
+X015836Y003294D01*
+X015975Y003294D01*
+X015977Y003295D01*
+X018127Y003295D01*
+X018221Y003256D01*
+X018379Y003256D01*
+X018473Y003295D01*
+X018672Y003295D01*
+X018804Y003350D01*
+X018905Y003451D01*
+X018949Y003495D01*
+X020076Y003495D01*
+X020070Y003481D02*
+X018935Y003481D01*
+X018856Y003402D02*
+X020051Y003402D01*
+X020051Y003324D02*
+X018740Y003324D01*
+X018050Y003655D02*
+X018050Y004405D01*
+X017350Y005105D01*
+X017109Y005346D01*
+X015300Y005346D01*
+X015300Y005542D02*
+X016787Y005542D01*
+X017100Y005855D01*
+X016959Y006228D02*
+X016691Y006228D01*
+X016676Y006243D02*
+X016529Y006304D01*
+X016499Y006304D01*
+X016499Y006334D01*
+X016438Y006481D01*
+X016326Y006593D01*
+X016179Y006654D01*
+X016021Y006654D01*
+X015915Y006610D01*
+X015836Y006610D01*
+X015836Y006624D01*
+X015799Y006712D01*
+X015787Y006724D01*
+X015799Y006735D01*
+X015836Y006823D01*
+X015836Y006837D01*
+X017349Y006837D01*
+X017349Y006670D01*
+X017351Y006665D01*
+X017351Y006526D01*
+X017412Y006379D01*
+X017524Y006267D01*
+X017671Y006206D01*
+X017829Y006206D01*
+X017976Y006267D01*
+X018088Y006379D01*
+X018149Y006526D01*
+X018149Y006684D01*
+X018095Y006814D01*
+X018441Y006468D01*
+X018544Y006425D01*
+X019206Y006425D01*
+X019309Y006468D01*
+X019387Y006546D01*
+X019678Y006837D01*
+X019794Y006837D01*
+X019751Y006734D01*
+X019751Y006576D01*
+X019812Y006429D01*
+X019924Y006317D01*
+X020071Y006256D01*
+X020229Y006256D01*
+X020269Y006273D01*
+X020374Y006167D01*
+X020521Y006106D01*
+X020603Y006106D01*
+X020617Y006092D01*
+X020720Y006050D01*
+X021064Y006050D01*
+X021064Y006036D01*
+X021065Y006035D01*
+X021064Y006033D01*
+X021064Y005839D01*
+X021065Y005838D01*
+X021064Y005836D01*
+X021064Y005822D01*
+X020132Y005822D01*
+X020029Y005780D01*
+X019813Y005564D01*
+X019813Y005564D01*
+X019413Y005164D01*
+X019370Y005061D01*
+X019370Y004215D01*
+X018728Y004215D01*
+X018596Y004160D01*
+X018457Y004021D01*
+X018379Y004054D01*
+X018330Y004054D01*
+X018330Y004461D01*
+X018287Y004564D01*
+X017587Y005264D01*
+X017330Y005521D01*
+X017438Y005629D01*
+X017499Y005776D01*
+X017499Y005934D01*
+X017438Y006081D01*
+X017326Y006193D01*
+X017179Y006254D01*
+X017021Y006254D01*
+X016874Y006193D01*
+X016795Y006114D01*
+X016788Y006131D01*
+X016676Y006243D01*
+X016769Y006150D02*
+X016831Y006150D01*
+X016499Y006307D02*
+X017485Y006307D01*
+X017410Y006385D02*
+X016478Y006385D01*
+X016445Y006464D02*
+X017377Y006464D01*
+X017351Y006542D02*
+X016377Y006542D01*
+X016260Y006621D02*
+X017351Y006621D01*
+X017349Y006699D02*
+X015804Y006699D01*
+X015831Y006724D02*
+X015850Y006705D01*
+X015831Y006724D02*
+X015300Y006724D01*
+X015300Y006920D02*
+X014765Y006920D01*
+X014750Y006905D01*
+X014800Y006905D01*
+X014772Y006527D02*
+X014750Y006505D01*
+X014700Y006505D01*
+X014750Y006505D02*
+X014850Y006505D01*
+X014772Y006527D02*
+X015300Y006527D01*
+X015300Y006330D02*
+X016025Y006330D01*
+X016100Y006255D01*
+X016450Y005905D02*
+X016284Y005739D01*
+X015300Y005739D01*
+X015300Y005936D02*
+X013869Y005936D01*
+X013550Y006255D01*
+X013172Y006126D02*
+X012986Y006126D01*
+X012950Y006112D01*
+X012914Y006126D01*
+X012574Y006126D01*
+X012509Y006192D01*
+X012406Y006235D01*
+X012346Y006235D01*
+X012346Y006258D01*
+X012330Y006298D01*
+X012330Y006709D01*
+X012419Y006709D01*
+X012428Y006713D01*
+X012437Y006709D01*
+X012675Y006709D01*
+X012684Y006713D01*
+X012651Y006634D01*
+X012651Y006476D01*
+X012712Y006329D01*
+X012824Y006217D01*
+X012971Y006156D01*
+X013129Y006156D01*
+X013155Y006167D01*
+X013172Y006126D01*
+X013162Y006150D02*
+X012551Y006150D01*
+X012422Y006228D02*
+X012813Y006228D01*
+X012735Y006307D02*
+X012330Y006307D01*
+X012330Y006385D02*
+X012689Y006385D01*
+X012656Y006464D02*
+X012330Y006464D01*
+X012330Y006542D02*
+X012651Y006542D01*
+X012651Y006621D02*
+X012330Y006621D01*
+X012330Y006699D02*
+X012678Y006699D01*
+X013050Y006555D02*
+X013050Y007205D01*
+X013068Y007205D01*
+X013324Y007205D02*
+X013324Y007679D01*
+X013100Y007902D01*
+X013100Y008455D01*
+X012812Y008667D02*
+X013300Y009155D01*
+X013300Y009505D01*
+X013350Y009555D01*
+X013324Y009581D01*
+X013324Y009605D01*
+X013550Y009605D01*
+X013580Y009575D01*
+X013580Y009605D01*
+X013600Y009605D01*
+X013600Y009605D01*
+X013600Y011155D01*
+X013550Y011205D01*
+X013253Y010938D02*
+X012729Y010938D01*
+X012726Y010935D02*
+X013205Y011414D01*
+X013151Y011284D01*
+X013151Y011126D01*
+X013212Y010979D01*
+X013320Y010871D01*
+X013320Y010631D01*
+X013059Y010892D01*
+X012956Y010935D01*
+X012726Y010935D01*
+X012808Y011017D02*
+X013196Y011017D01*
+X013164Y011095D02*
+X012886Y011095D01*
+X012965Y011174D02*
+X013151Y011174D01*
+X013151Y011252D02*
+X013043Y011252D01*
+X013122Y011331D02*
+X013170Y011331D01*
+X013200Y011409D02*
+X013203Y011409D01*
+X013100Y011705D02*
+X013800Y011705D01*
+X014150Y011355D01*
+X014150Y011155D01*
+X013835Y010840D01*
+X013835Y009605D01*
+X013600Y009555D02*
+X013580Y009575D01*
+X014146Y009604D02*
+X014274Y009604D01*
+X014274Y009682D02*
+X014146Y009682D01*
+X014146Y009761D02*
+X014274Y009761D01*
+X014274Y009839D02*
+X014146Y009839D01*
+X014146Y009908D02*
+X014115Y009983D01*
+X014115Y010724D01*
+X014253Y010862D01*
+X014253Y010809D01*
+X014289Y010720D01*
+X014329Y010680D01*
+X014311Y010662D01*
+X014274Y010574D01*
+X014274Y009336D01*
+X014311Y009248D01*
+X014378Y009181D01*
+X014466Y009144D01*
+X014529Y009144D01*
+X014529Y008840D01*
+X014572Y008737D01*
+X015020Y008289D01*
+X015020Y007406D01*
+X014957Y007406D01*
+X014869Y007370D01*
+X014803Y007304D01*
+X014671Y007304D01*
+X014524Y007243D01*
+X014412Y007131D01*
+X014351Y006984D01*
+X014351Y006826D01*
+X014401Y006705D01*
+X014361Y006608D01*
+X014326Y006643D01*
+X014179Y006704D01*
+X014021Y006704D01*
+X013874Y006643D01*
+X013800Y006569D01*
+X013776Y006593D01*
+X013629Y006654D01*
+X013471Y006654D01*
+X013445Y006643D01*
+X013418Y006709D01*
+X013442Y006709D01*
+X013452Y006713D01*
+X013461Y006709D01*
+X013698Y006709D01*
+X013786Y006746D01*
+X013850Y006809D01*
+X013925Y006809D01*
+X013960Y006819D01*
+X013992Y006837D01*
+X014018Y006863D01*
+X014037Y006895D01*
+X014046Y006931D01*
+X014046Y007205D01*
+X014046Y007479D01*
+X014037Y007515D01*
+X014018Y007547D01*
+X013992Y007573D01*
+X013960Y007591D01*
+X013925Y007601D01*
+X013860Y007601D01*
+X013860Y008081D01*
+X013849Y008107D01*
+X013849Y008234D01*
+X013788Y008381D01*
+X013676Y008493D01*
+X013529Y008554D01*
+X013491Y008554D01*
+X013438Y008681D01*
+X013330Y008789D01*
+X013459Y008918D01*
+X013537Y008996D01*
+X013580Y009099D01*
+X013580Y009109D01*
+X013698Y009109D01*
+X013707Y009113D01*
+X013717Y009109D01*
+X013954Y009109D01*
+X014042Y009145D01*
+X014110Y009213D01*
+X014146Y009301D01*
+X014146Y009908D01*
+X014142Y009918D02*
+X014274Y009918D01*
+X014274Y009996D02*
+X014115Y009996D01*
+X014115Y010075D02*
+X014274Y010075D01*
+X014274Y010153D02*
+X014115Y010153D01*
+X014115Y010232D02*
+X014274Y010232D01*
+X014274Y010310D02*
+X014115Y010310D01*
+X014115Y010389D02*
+X014274Y010389D01*
+X014274Y010467D02*
+X014115Y010467D01*
+X014115Y010546D02*
+X014274Y010546D01*
+X014295Y010624D02*
+X014115Y010624D01*
+X014115Y010703D02*
+X014307Y010703D01*
+X014264Y010781D02*
+X014172Y010781D01*
+X014251Y010860D02*
+X014253Y010860D01*
+X014788Y010935D02*
+X014788Y009867D01*
+X014800Y009855D01*
+X014809Y009864D01*
+X014809Y009955D01*
+X014809Y008896D01*
+X015300Y008405D01*
+X015300Y007105D01*
+X015300Y007105D01*
+X015300Y007117D01*
+X017629Y007117D01*
+X017629Y006726D01*
+X017750Y006605D01*
+X018123Y006464D02*
+X018451Y006464D01*
+X018367Y006542D02*
+X018149Y006542D01*
+X018149Y006621D02*
+X018288Y006621D01*
+X018210Y006699D02*
+X018143Y006699D01*
+X018131Y006778D02*
+X018110Y006778D01*
+X018200Y007105D02*
+X018600Y006705D01*
+X019150Y006705D01*
+X019562Y007117D01*
+X020117Y007117D01*
+X020117Y007322D01*
+X020300Y007505D01*
+X021350Y007505D01*
+X021600Y007255D01*
+X021600Y007255D01*
+X021600Y007117D01*
+X022062Y007117D01*
+X022150Y007205D01*
+X022150Y007605D01*
+X022135Y007620D01*
+X022150Y007620D01*
+X022215Y007620D01*
+X022450Y007855D01*
+X022450Y008005D01*
+X022500Y008055D01*
+X022500Y008855D01*
+X022400Y008955D01*
+X022435Y008955D01*
+X022435Y008840D01*
+X022190Y008498D02*
+X022190Y008330D01*
+X022110Y008330D01*
+X022110Y008532D01*
+X022190Y008498D01*
+X022175Y008505D02*
+X022110Y008505D01*
+X022110Y008426D02*
+X022190Y008426D01*
+X022190Y008348D02*
+X022110Y008348D01*
+X022110Y008330D02*
+X022110Y008250D01*
+X021810Y008250D01*
+X021679Y008304D01*
+X021521Y008304D01*
+X021374Y008243D01*
+X021316Y008185D01*
+X021101Y008185D01*
+X021101Y008198D01*
+X021065Y008287D01*
+X020997Y008354D01*
+X020909Y008391D01*
+X020895Y008391D01*
+X020895Y008504D01*
+X020916Y008525D01*
+X021056Y008525D01*
+X021159Y008568D01*
+X021274Y008683D01*
+X021294Y008675D01*
+X021335Y008675D01*
+X021365Y008603D01*
+X021433Y008535D01*
+X021521Y008498D01*
+X021793Y008498D01*
+X021793Y008330D01*
+X022110Y008330D01*
+X022150Y008355D02*
+X022100Y008405D01*
+X022100Y009205D01*
+X022600Y009655D02*
+X022600Y010055D01*
+X022585Y010070D01*
+X022600Y010070D01*
+X022585Y010070D02*
+X022550Y010105D01*
+X022143Y010075D02*
+X022107Y010075D01*
+X022107Y010153D02*
+X022143Y010153D01*
+X022143Y010232D02*
+X022107Y010232D01*
+X022107Y010310D02*
+X022143Y010310D01*
+X022174Y010389D02*
+X022076Y010389D01*
+X022095Y010467D02*
+X022155Y010467D01*
+X022143Y010546D02*
+X022107Y010546D01*
+X022107Y010624D02*
+X022143Y010624D01*
+X022143Y010703D02*
+X022107Y010703D01*
+X022107Y010781D02*
+X022143Y010781D01*
+X022143Y010860D02*
+X022107Y010860D01*
+X022107Y010938D02*
+X022143Y010938D01*
+X022157Y011017D02*
+X022093Y011017D01*
+X022107Y011095D02*
+X022143Y011095D01*
+X022143Y011174D02*
+X022107Y011174D01*
+X022107Y011252D02*
+X022143Y011252D01*
+X022143Y011331D02*
+X022107Y011331D01*
+X022107Y011409D02*
+X022143Y011409D01*
+X022143Y011488D02*
+X022107Y011488D01*
+X022106Y011566D02*
+X022144Y011566D01*
+X022176Y011645D02*
+X022074Y011645D01*
+X021997Y011723D02*
+X022253Y011723D01*
+X022243Y011802D02*
+X022007Y011802D01*
+X022007Y011880D02*
+X022243Y011880D01*
+X022243Y012037D02*
+X022007Y012037D01*
+X022007Y012116D02*
+X022243Y012116D01*
+X022243Y012194D02*
+X022007Y012194D01*
+X021978Y012273D02*
+X022272Y012273D01*
+X022560Y012273D02*
+X022640Y012273D01*
+X022640Y012194D02*
+X022560Y012194D01*
+X022560Y012116D02*
+X022640Y012116D01*
+X022957Y012116D02*
+X023193Y012116D01*
+X023193Y012194D02*
+X022957Y012194D01*
+X022928Y012273D02*
+X023222Y012273D01*
+X023193Y012037D02*
+X022957Y012037D01*
+X022957Y011880D02*
+X023193Y011880D01*
+X023193Y011802D02*
+X022957Y011802D01*
+X022947Y011723D02*
+X023203Y011723D01*
+X023126Y011645D02*
+X023024Y011645D01*
+X023056Y011566D02*
+X023094Y011566D01*
+X023093Y011488D02*
+X023057Y011488D01*
+X023057Y011409D02*
+X023093Y011409D01*
+X023500Y011255D02*
+X023550Y011205D01*
+X023550Y010740D01*
+X023093Y010546D02*
+X023057Y010546D01*
+X023045Y010467D02*
+X023105Y010467D01*
+X023124Y010389D02*
+X023026Y010389D01*
+X023057Y010310D02*
+X023093Y010310D01*
+X023093Y010232D02*
+X023057Y010232D01*
+X023057Y010153D02*
+X023093Y010153D01*
+X023093Y010075D02*
+X023057Y010075D01*
+X023057Y009996D02*
+X023093Y009996D01*
+X023093Y009918D02*
+X023057Y009918D01*
+X023057Y009839D02*
+X023093Y009839D01*
+X023120Y009761D02*
+X023030Y009761D01*
+X022999Y009682D02*
+X023186Y009682D01*
+X023550Y010055D02*
+X023950Y010055D01*
+X024000Y010105D01*
+X024000Y012305D01*
+X023800Y012505D01*
+X023800Y013505D01*
+X023900Y013605D01*
+X023520Y013136D02*
+X021863Y013136D01*
+X021917Y013058D02*
+X023520Y013058D01*
+X023520Y012979D02*
+X021921Y012979D01*
+X021921Y012901D02*
+X023520Y012901D01*
+X024517Y012508D02*
+X024785Y012508D01*
+X024785Y012587D02*
+X024562Y012587D01*
+X024594Y012665D02*
+X024785Y012665D01*
+X024500Y012155D02*
+X026450Y012155D01*
+X026950Y012655D01*
+X026950Y012920D01*
+X026950Y012955D01*
+X026950Y012920D02*
+X026950Y012905D01*
+X027000Y012855D01*
+X027500Y012855D01*
+X027636Y012719D01*
+X027978Y012719D01*
+X028641Y012194D02*
+X029975Y012194D01*
+X030095Y012273D02*
+X028757Y012273D01*
+X027250Y012105D02*
+X026900Y012105D01*
+X026562Y011880D02*
+X026518Y011880D01*
+X026640Y011802D02*
+X025911Y011802D01*
+X025911Y011656D02*
+X025240Y011656D01*
+X025240Y011260D01*
+X025789Y011260D01*
+X025825Y011270D01*
+X025857Y011288D01*
+X025883Y011314D01*
+X025901Y011346D01*
+X025911Y011382D01*
+X025911Y011656D01*
+X025911Y011645D02*
+X027314Y011645D01*
+X027236Y011723D02*
+X027020Y011723D01*
+X026780Y011723D02*
+X025240Y011723D01*
+X025240Y011645D02*
+X025160Y011645D01*
+X025160Y011566D02*
+X025240Y011566D01*
+X025240Y011488D02*
+X025160Y011488D01*
+X025160Y011409D02*
+X025240Y011409D01*
+X025240Y011331D02*
+X025160Y011331D01*
+X024680Y011252D02*
+X025910Y011252D01*
+X025893Y011174D02*
+X024680Y011174D01*
+X024680Y011095D02*
+X025893Y011095D01*
+X025899Y011017D02*
+X026210Y011017D01*
+X026210Y011095D02*
+X026290Y011095D01*
+X026290Y011030D02*
+X026910Y011030D01*
+X026910Y010950D01*
+X026593Y010950D01*
+X026290Y010950D01*
+X026290Y011030D01*
+X026290Y011017D02*
+X026910Y011017D01*
+X026910Y011095D02*
+X026990Y011095D01*
+X026990Y011030D02*
+X026990Y011326D01*
+X027185Y011326D01*
+X027221Y011317D01*
+X027252Y011299D01*
+X027279Y011272D01*
+X027297Y011241D01*
+X027307Y011205D01*
+X027307Y011030D01*
+X026990Y011030D01*
+X026990Y011174D02*
+X026910Y011174D01*
+X026910Y011252D02*
+X026990Y011252D01*
+X027290Y011252D02*
+X027393Y011252D01*
+X027393Y011331D02*
+X025892Y011331D01*
+X025911Y011409D02*
+X027393Y011409D01*
+X027423Y011174D02*
+X027307Y011174D01*
+X027307Y011095D02*
+X027406Y011095D01*
+X026610Y011252D02*
+X026590Y011252D01*
+X026290Y011252D02*
+X026210Y011252D01*
+X026210Y011174D02*
+X026290Y011174D01*
+X026250Y010320D02*
+X026250Y010305D01*
+X024400Y009855D02*
+X024400Y012055D01*
+X024500Y012155D01*
+X023550Y011320D02*
+X023550Y011305D01*
+X023500Y011255D01*
+X022600Y011320D02*
+X022600Y010740D01*
+X021650Y010740D02*
+X021650Y011320D01*
+X021193Y011488D02*
+X021047Y011488D01*
+X021015Y011566D02*
+X021194Y011566D01*
+X021226Y011645D02*
+X020974Y011645D01*
+X020896Y011723D02*
+X021303Y011723D01*
+X021293Y011802D02*
+X020904Y011802D01*
+X020912Y011880D02*
+X021293Y011880D01*
+X021610Y012116D02*
+X021690Y012116D01*
+X021690Y012194D02*
+X021610Y012194D01*
+X021610Y012273D02*
+X021690Y012273D01*
+X021625Y012508D02*
+X021545Y012508D01*
+X021545Y012587D02*
+X021625Y012587D01*
+X021625Y012665D02*
+X021545Y012665D01*
+X021545Y012744D02*
+X021625Y012744D01*
+X020400Y012155D02*
+X020390Y012165D01*
+X020357Y012165D01*
+X020650Y011405D02*
+X020650Y010405D01*
+X021150Y009905D01*
+X021150Y009455D01*
+X021250Y009355D01*
+X021250Y009055D01*
+X020950Y009205D02*
+X020950Y009455D01*
+X020750Y009655D01*
+X020740Y009645D01*
+X020613Y009645D01*
+X020250Y009005D02*
+X020400Y008855D01*
+X020222Y008683D02*
+X020150Y008755D01*
+X019846Y009059D01*
+X019846Y009645D01*
+X019590Y009645D02*
+X019590Y009065D01*
+X019950Y008705D01*
+X020025Y008630D01*
+X020025Y007905D01*
+X020222Y007905D02*
+X020222Y008683D01*
+X020200Y008705D02*
+X020150Y008755D01*
+X020000Y008655D02*
+X019950Y008705D01*
+X019828Y008527D02*
+X019700Y008655D01*
+X019750Y008605D01*
+X019700Y008655D02*
+X019334Y009021D01*
+X019334Y009645D01*
+X019078Y009645D02*
+X019078Y009027D01*
+X019550Y008555D01*
+X019631Y008474D01*
+X019631Y007905D01*
+X019434Y007905D02*
+X019434Y008371D01*
+X019150Y008655D01*
+X018822Y008983D01*
+X018822Y009645D01*
+X018566Y009645D02*
+X018566Y008839D01*
+X019041Y008364D01*
+X019041Y007905D01*
+X018844Y007905D02*
+X018844Y007261D01*
+X018950Y007155D01*
+X018450Y007355D02*
+X018450Y007905D01*
+X018450Y007905D01*
+X018647Y007905D02*
+X018647Y008408D01*
+X018450Y008605D01*
+X018500Y008555D01*
+X018450Y008605D02*
+X018310Y008745D01*
+X018310Y009645D01*
+X018054Y009645D02*
+X018054Y009209D01*
+X018000Y009155D01*
+X018000Y008555D01*
+X018200Y008355D01*
+X018150Y008405D01*
+X018153Y008391D02*
+X017959Y008391D01*
+X017958Y008390D01*
+X017956Y008391D01*
+X017762Y008391D01*
+X017761Y008390D01*
+X017760Y008391D01*
+X017566Y008391D01*
+X017564Y008390D01*
+X017563Y008391D01*
+X017369Y008391D01*
+X017367Y008390D01*
+X017366Y008391D01*
+X017249Y008391D01*
+X017249Y008484D01*
+X017188Y008631D01*
+X017076Y008743D01*
+X016929Y008804D01*
+X016771Y008804D01*
+X016767Y008802D01*
+X016676Y008893D01*
+X016529Y008954D01*
+X016371Y008954D01*
+X016224Y008893D01*
+X016189Y008858D01*
+X016079Y008904D01*
+X015921Y008904D01*
+X015774Y008843D01*
+X015662Y008731D01*
+X015601Y008584D01*
+X015601Y008426D01*
+X015580Y008426D01*
+X015601Y008426D02*
+X015662Y008279D01*
+X015774Y008167D01*
+X015799Y008157D01*
+X015799Y007611D01*
+X015835Y007523D01*
+X015903Y007455D01*
+X015991Y007419D01*
+X016101Y007419D01*
+X016101Y007397D01*
+X015666Y007397D01*
+X015643Y007406D01*
+X015580Y007406D01*
+X015580Y008461D01*
+X015537Y008564D01*
+X015459Y008642D01*
+X015089Y009012D01*
+X015089Y009144D01*
+X015152Y009144D01*
+X015241Y009181D01*
+X015308Y009248D01*
+X015345Y009336D01*
+X015345Y010574D01*
+X015308Y010662D01*
+X015268Y010702D01*
+X015287Y010720D01*
+X015302Y010757D01*
+X015341Y010718D01*
+X015444Y010675D01*
+X015457Y010675D01*
+X015479Y010653D01*
+X015567Y010616D01*
+X015588Y010616D01*
+X015583Y010612D01*
+X015565Y010580D01*
+X015555Y010544D01*
+X015555Y009995D01*
+X015951Y009995D01*
+X015951Y009915D01*
+X016031Y009915D01*
+X016031Y009244D01*
+X016304Y009244D01*
+X016340Y009254D01*
+X016372Y009272D01*
+X016398Y009298D01*
+X016416Y009330D01*
+X016426Y009366D01*
+X016426Y009683D01*
+X016693Y009416D01*
+X016693Y009176D01*
+X016730Y009088D01*
+X016798Y009020D01*
+X016886Y008984D01*
+X017339Y008984D01*
+X017362Y008929D01*
+X017474Y008817D01*
+X017621Y008756D01*
+X017779Y008756D01*
+X017926Y008817D01*
+X018030Y008921D01*
+X018030Y008689D01*
+X018073Y008586D01*
+X018213Y008446D01*
+X018293Y008366D01*
+X018265Y008354D01*
+X018253Y008342D01*
+X018241Y008354D01*
+X018153Y008391D01*
+X018200Y008355D02*
+X018253Y008302D01*
+X018253Y007905D01*
+X018248Y008348D02*
+X018258Y008348D01*
+X018233Y008426D02*
+X017249Y008426D01*
+X017240Y008505D02*
+X018154Y008505D01*
+X018076Y008583D02*
+X017208Y008583D01*
+X017157Y008662D02*
+X018042Y008662D01*
+X018030Y008740D02*
+X017079Y008740D01*
+X016750Y008819D02*
+X017473Y008819D01*
+X017394Y008897D02*
+X016666Y008897D01*
+X016764Y009054D02*
+X015089Y009054D01*
+X015089Y009133D02*
+X016711Y009133D01*
+X016693Y009211D02*
+X015271Y009211D01*
+X015325Y009290D02*
+X015592Y009290D01*
+X015583Y009298D02*
+X015609Y009272D01*
+X015641Y009254D01*
+X015677Y009244D01*
+X015951Y009244D01*
+X015951Y009915D01*
+X015555Y009915D01*
+X015555Y009366D01*
+X015565Y009330D01*
+X015583Y009298D01*
+X015555Y009368D02*
+X015345Y009368D01*
+X015345Y009447D02*
+X015555Y009447D01*
+X015555Y009525D02*
+X015345Y009525D01*
+X015345Y009604D02*
+X015555Y009604D01*
+X015555Y009682D02*
+X015345Y009682D01*
+X015345Y009761D02*
+X015555Y009761D01*
+X015555Y009839D02*
+X015345Y009839D01*
+X015345Y009918D02*
+X015951Y009918D01*
+X015991Y009955D02*
+X016341Y009605D01*
+X016450Y009605D01*
+X016550Y009605D01*
+X016505Y009604D02*
+X016426Y009604D01*
+X016426Y009682D02*
+X016427Y009682D01*
+X016426Y009525D02*
+X016584Y009525D01*
+X016662Y009447D02*
+X016426Y009447D01*
+X016426Y009368D02*
+X016693Y009368D01*
+X016693Y009290D02*
+X016389Y009290D01*
+X016031Y009290D02*
+X015951Y009290D01*
+X015951Y009368D02*
+X016031Y009368D01*
+X016031Y009447D02*
+X015951Y009447D01*
+X015951Y009525D02*
+X016031Y009525D01*
+X016031Y009604D02*
+X015951Y009604D01*
+X015951Y009682D02*
+X016031Y009682D01*
+X016031Y009761D02*
+X015951Y009761D01*
+X015951Y009839D02*
+X016031Y009839D01*
+X016500Y010005D02*
+X017150Y009355D01*
+X017200Y009355D01*
+X017200Y009370D01*
+X017150Y009420D01*
+X017185Y009420D01*
+X017200Y009405D01*
+X017343Y008976D02*
+X015125Y008976D01*
+X015204Y008897D02*
+X015904Y008897D01*
+X015750Y008819D02*
+X015282Y008819D01*
+X015361Y008740D02*
+X015671Y008740D01*
+X015633Y008662D02*
+X015439Y008662D01*
+X015518Y008583D02*
+X015601Y008583D01*
+X015601Y008505D02*
+X015562Y008505D01*
+X015580Y008348D02*
+X015634Y008348D01*
+X015672Y008269D02*
+X015580Y008269D01*
+X015580Y008191D02*
+X015751Y008191D01*
+X015799Y008112D02*
+X015580Y008112D01*
+X015580Y008034D02*
+X015799Y008034D01*
+X015799Y007955D02*
+X015580Y007955D01*
+X015580Y007877D02*
+X015799Y007877D01*
+X015799Y007798D02*
+X015580Y007798D01*
+X015580Y007720D02*
+X015799Y007720D01*
+X015799Y007641D02*
+X015580Y007641D01*
+X015580Y007563D02*
+X015819Y007563D01*
+X015874Y007484D02*
+X015580Y007484D01*
+X015646Y007406D02*
+X016101Y007406D01*
+X016481Y007424D02*
+X016500Y007405D01*
+X016481Y007424D02*
+X016481Y007905D01*
+X016285Y007905D02*
+X016285Y008390D01*
+X016450Y008555D01*
+X016088Y008417D02*
+X016000Y008505D01*
+X016088Y008417D02*
+X016088Y007905D01*
+X016875Y007905D02*
+X016875Y008380D01*
+X016850Y008405D01*
+X016234Y008897D02*
+X016096Y008897D01*
+X015020Y008269D02*
+X013834Y008269D01*
+X013849Y008191D02*
+X015020Y008191D01*
+X015020Y008112D02*
+X013849Y008112D01*
+X013860Y008034D02*
+X014385Y008034D01*
+X014301Y007972D02*
+X014486Y008107D01*
+X014714Y008107D01*
+X014899Y007972D01*
+X014970Y007755D01*
+X014899Y007538D01*
+X014714Y007403D01*
+X014486Y007403D01*
+X014301Y007538D01*
+X014230Y007755D01*
+X014301Y007972D01*
+X014295Y007955D02*
+X013860Y007955D01*
+X013860Y007877D02*
+X014269Y007877D01*
+X014244Y007798D02*
+X013860Y007798D01*
+X013860Y007720D02*
+X014242Y007720D01*
+X014267Y007641D02*
+X013860Y007641D01*
+X014003Y007563D02*
+X014293Y007563D01*
+X014374Y007484D02*
+X014045Y007484D01*
+X014046Y007406D02*
+X014482Y007406D01*
+X014537Y007249D02*
+X014046Y007249D01*
+X014046Y007205D02*
+X013890Y007205D01*
+X013890Y007205D01*
+X014046Y007205D01*
+X014046Y007170D02*
+X014451Y007170D01*
+X014396Y007092D02*
+X014046Y007092D01*
+X014046Y007013D02*
+X014363Y007013D01*
+X014351Y006935D02*
+X014046Y006935D01*
+X014011Y006856D02*
+X014351Y006856D01*
+X014371Y006778D02*
+X013818Y006778D01*
+X013835Y006840D02*
+X013650Y006655D01*
+X013450Y006655D01*
+X013422Y006699D02*
+X014009Y006699D01*
+X013852Y006621D02*
+X013710Y006621D01*
+X013835Y006840D02*
+X013835Y007205D01*
+X014046Y007327D02*
+X014826Y007327D01*
+X014718Y007406D02*
+X014955Y007406D01*
+X015020Y007484D02*
+X014826Y007484D01*
+X014907Y007563D02*
+X015020Y007563D01*
+X015020Y007641D02*
+X014933Y007641D01*
+X014958Y007720D02*
+X015020Y007720D01*
+X015020Y007798D02*
+X014956Y007798D01*
+X014931Y007877D02*
+X015020Y007877D01*
+X015020Y007955D02*
+X014905Y007955D01*
+X014815Y008034D02*
+X015020Y008034D01*
+X014961Y008348D02*
+X013802Y008348D01*
+X013743Y008426D02*
+X014883Y008426D01*
+X014804Y008505D02*
+X013648Y008505D01*
+X013479Y008583D02*
+X014726Y008583D01*
+X014647Y008662D02*
+X013446Y008662D01*
+X013379Y008740D02*
+X014571Y008740D01*
+X014538Y008819D02*
+X013360Y008819D01*
+X013438Y008897D02*
+X014529Y008897D01*
+X014529Y008976D02*
+X013517Y008976D01*
+X013561Y009054D02*
+X014529Y009054D01*
+X014529Y009133D02*
+X014012Y009133D01*
+X014108Y009211D02*
+X014348Y009211D01*
+X014294Y009290D02*
+X014142Y009290D01*
+X014146Y009368D02*
+X014274Y009368D01*
+X014274Y009447D02*
+X014146Y009447D01*
+X014146Y009525D02*
+X014274Y009525D01*
+X015345Y009996D02*
+X015555Y009996D01*
+X015555Y010075D02*
+X015345Y010075D01*
+X015345Y010153D02*
+X015555Y010153D01*
+X015555Y010232D02*
+X015345Y010232D01*
+X015345Y010310D02*
+X015555Y010310D01*
+X015555Y010389D02*
+X015345Y010389D01*
+X015345Y010467D02*
+X015555Y010467D01*
+X015556Y010546D02*
+X015345Y010546D01*
+X015324Y010624D02*
+X015548Y010624D01*
+X015378Y010703D02*
+X015269Y010703D01*
+X015500Y010955D02*
+X015800Y010955D01*
+X015800Y010905D01*
+X015830Y010935D01*
+X015910Y010935D01*
+X016320Y010935D01*
+X016500Y010755D01*
+X016500Y010005D01*
+X017150Y010090D02*
+X017265Y010090D01*
+X017710Y009645D01*
+X017798Y009645D01*
+X017790Y009645D01*
+X017750Y009605D01*
+X017800Y009555D01*
+X017800Y009255D01*
+X017700Y009155D01*
+X017650Y009105D01*
+X017927Y008819D02*
+X018030Y008819D01*
+X018030Y008897D02*
+X018006Y008897D01*
+X019150Y008655D02*
+X019200Y008605D01*
+X019550Y008555D02*
+X019600Y008505D01*
+X019828Y008527D02*
+X019828Y007905D01*
+X020117Y007117D02*
+X020117Y006688D01*
+X020150Y006655D01*
+X019856Y006385D02*
+X018090Y006385D01*
+X018015Y006307D02*
+X019949Y006307D01*
+X019798Y006464D02*
+X019299Y006464D01*
+X019383Y006542D02*
+X019765Y006542D01*
+X019751Y006621D02*
+X019461Y006621D01*
+X019540Y006699D02*
+X019751Y006699D01*
+X019769Y006778D02*
+X019619Y006778D01*
+X020400Y007055D02*
+X021100Y007055D01*
+X021235Y006920D01*
+X021600Y006920D01*
+X021600Y006724D02*
+X021981Y006724D01*
+X022200Y006505D01*
+X022200Y006405D01*
+X022174Y006417D02*
+X022321Y006356D01*
+X022479Y006356D01*
+X022626Y006417D01*
+X022684Y006475D01*
+X022806Y006475D01*
+X022909Y006518D01*
+X023096Y006705D01*
+X023128Y006705D01*
+X023128Y006691D01*
+X023128Y006690D01*
+X023128Y006688D01*
+X023128Y006494D01*
+X023128Y006493D01*
+X023128Y006491D01*
+X023128Y006297D01*
+X023128Y006296D01*
+X023128Y006294D01*
+X023128Y006101D01*
+X023128Y006099D01*
+X023128Y006098D01*
+X023128Y006085D01*
+X022966Y006085D01*
+X022878Y006173D01*
+X022775Y006216D01*
+X022135Y006216D01*
+X022135Y006230D01*
+X022134Y006231D01*
+X022135Y006233D01*
+X022135Y006427D01*
+X022134Y006428D01*
+X022135Y006430D01*
+X022135Y006456D01*
+X022174Y006417D01*
+X022135Y006385D02*
+X022251Y006385D01*
+X022135Y006307D02*
+X023128Y006307D01*
+X023128Y006385D02*
+X022549Y006385D01*
+X022672Y006464D02*
+X023128Y006464D01*
+X023128Y006542D02*
+X022933Y006542D01*
+X023011Y006621D02*
+X023128Y006621D01*
+X023128Y006699D02*
+X023090Y006699D01*
+X022980Y006985D02*
+X022750Y006755D01*
+X022400Y006755D01*
+X022700Y006755D01*
+X022980Y006985D02*
+X023761Y006985D01*
+X023761Y007182D02*
+X023073Y007182D01*
+X022850Y007405D01*
+X022850Y007655D01*
+X022850Y007855D01*
+X022800Y007905D01*
+X022850Y007705D02*
+X022850Y007655D01*
+X023100Y007705D02*
+X023100Y008105D01*
+X023150Y008155D01*
+X023761Y007772D02*
+X024517Y007772D01*
+X024600Y007855D01*
+X024600Y008205D01*
+X025050Y008205D02*
+X025238Y008393D01*
+X025238Y008855D01*
+X025631Y008855D02*
+X025631Y008324D01*
+X025750Y008205D01*
+X026250Y008205D02*
+X026300Y008155D01*
+X025631Y008855D02*
+X025631Y008886D01*
+X023761Y007575D02*
+X023230Y007575D01*
+X023100Y007705D01*
+X023761Y007379D02*
+X024424Y007379D01*
+X024450Y007405D01*
+X024600Y007005D02*
+X024383Y006788D01*
+X023761Y006788D01*
+X023750Y006205D02*
+X024950Y006205D01*
+X025150Y006005D01*
+X025100Y006005D01*
+X024550Y005755D02*
+X024450Y005855D01*
+X024304Y006001D01*
+X023761Y006001D01*
+X023750Y005805D02*
+X022850Y005805D01*
+X022719Y005936D01*
+X021600Y005936D01*
+X021600Y005739D02*
+X022216Y005739D01*
+X022350Y005605D01*
+X022632Y005324D02*
+X022688Y005379D01*
+X022749Y005526D01*
+X022749Y005544D01*
+X022794Y005525D01*
+X022924Y005525D01*
+X022863Y005464D01*
+X022820Y005361D01*
+X022820Y004849D01*
+X022863Y004746D01*
+X022955Y004654D01*
+X022921Y004654D01*
+X022857Y004627D01*
+X022857Y004655D01*
+X022847Y004691D01*
+X022829Y004722D01*
+X022802Y004749D01*
+X022771Y004767D01*
+X022735Y004776D01*
+X022540Y004776D01*
+X022540Y004480D01*
+X022460Y004480D01*
+X022460Y004776D01*
+X022265Y004776D01*
+X022229Y004767D01*
+X022198Y004749D01*
+X022171Y004722D01*
+X022153Y004691D01*
+X022143Y004655D01*
+X022143Y004558D01*
+X022135Y004566D01*
+X022135Y004655D01*
+X022117Y004699D01*
+X022155Y004714D01*
+X022247Y004806D01*
+X022329Y004806D01*
+X022476Y004867D01*
+X022588Y004979D01*
+X022649Y005126D01*
+X022649Y005284D01*
+X022632Y005324D01*
+X022648Y005286D02*
+X022820Y005286D01*
+X022820Y005208D02*
+X022649Y005208D01*
+X022649Y005129D02*
+X022820Y005129D01*
+X022820Y005051D02*
+X022618Y005051D01*
+X022581Y004972D02*
+X022820Y004972D01*
+X022820Y004894D02*
+X022502Y004894D01*
+X022540Y004737D02*
+X022460Y004737D01*
+X022460Y004658D02*
+X022540Y004658D01*
+X022540Y004580D02*
+X022460Y004580D01*
+X022460Y004501D02*
+X022540Y004501D01*
+X022500Y004440D02*
+X022465Y004440D01*
+X022150Y004755D01*
+X021600Y004755D01*
+X021600Y004558D02*
+X020553Y004558D01*
+X020500Y004505D01*
+X020950Y003955D02*
+X021150Y003955D01*
+X021163Y003968D01*
+X021600Y003968D01*
+X022135Y004580D02*
+X022143Y004580D01*
+X022134Y004658D02*
+X022144Y004658D01*
+X022177Y004737D02*
+X022185Y004737D01*
+X022350Y004815D02*
+X022834Y004815D01*
+X022815Y004737D02*
+X022873Y004737D01*
+X022856Y004658D02*
+X022951Y004658D01*
+X022250Y005205D02*
+X021997Y004952D01*
+X021600Y004952D01*
+X021600Y005149D02*
+X020806Y005149D01*
+X020700Y005255D01*
+X020187Y005542D02*
+X020050Y005405D01*
+X020100Y005455D01*
+X020050Y005405D02*
+X019650Y005005D01*
+X019650Y003855D01*
+X019370Y004266D02*
+X018330Y004266D01*
+X018330Y004344D02*
+X019370Y004344D01*
+X019370Y004423D02*
+X018330Y004423D01*
+X018313Y004501D02*
+X019370Y004501D01*
+X019370Y004580D02*
+X018271Y004580D01*
+X018193Y004658D02*
+X019370Y004658D01*
+X019370Y004737D02*
+X018114Y004737D01*
+X018036Y004815D02*
+X019370Y004815D01*
+X019370Y004894D02*
+X017957Y004894D01*
+X017879Y004972D02*
+X019370Y004972D01*
+X019370Y005051D02*
+X017800Y005051D01*
+X017722Y005129D02*
+X019398Y005129D01*
+X019457Y005208D02*
+X017643Y005208D01*
+X017587Y005264D02*
+X017587Y005264D01*
+X017565Y005286D02*
+X019535Y005286D01*
+X019614Y005365D02*
+X017486Y005365D01*
+X017408Y005443D02*
+X019692Y005443D01*
+X019771Y005522D02*
+X017330Y005522D01*
+X017409Y005600D02*
+X019849Y005600D01*
+X019928Y005679D02*
+X017458Y005679D01*
+X017491Y005757D02*
+X020006Y005757D01*
+X020187Y005542D02*
+X021600Y005542D01*
+X021064Y005836D02*
+X017499Y005836D01*
+X017499Y005914D02*
+X021064Y005914D01*
+X021064Y005993D02*
+X017475Y005993D01*
+X017442Y006071D02*
+X020668Y006071D01*
+X020416Y006150D02*
+X017369Y006150D01*
+X017241Y006228D02*
+X017618Y006228D01*
+X017882Y006228D02*
+X020313Y006228D01*
+X020600Y006505D02*
+X020775Y006330D01*
+X021600Y006330D01*
+X021600Y006527D02*
+X021228Y006527D01*
+X021000Y006755D01*
+X022135Y006228D02*
+X023128Y006228D01*
+X023128Y006150D02*
+X022901Y006150D01*
+X023750Y006205D02*
+X023757Y006198D01*
+X023761Y006198D01*
+X023750Y005805D02*
+X023751Y005804D01*
+X023761Y005804D01*
+X024350Y005955D02*
+X024450Y005855D01*
+X025950Y005505D02*
+X025950Y005155D01*
+X026222Y004883D01*
+X026222Y004131D01*
+X026419Y004131D02*
+X026419Y005136D01*
+X026300Y005255D01*
+X026550Y005455D02*
+X026550Y005755D01*
+X026250Y006055D01*
+X026900Y005555D02*
+X027045Y005410D01*
+X028486Y005410D01*
+X028486Y005607D02*
+X028998Y005607D01*
+X029050Y005555D01*
+X029100Y005505D01*
+X029200Y005505D01*
+X029050Y005555D02*
+X029000Y005605D01*
+X028486Y005016D02*
+X027761Y005016D01*
+X027750Y005005D01*
+X027500Y005005D01*
+X026950Y005055D02*
+X026813Y004918D01*
+X026813Y004131D01*
+X027009Y004131D02*
+X027009Y003564D01*
+X026700Y003255D01*
+X026665Y003220D01*
+X026665Y002755D01*
+X026665Y002170D01*
+X026450Y001955D01*
+X024950Y001955D01*
+X024400Y001955D01*
+X023675Y002680D01*
+X023650Y002655D01*
+X023650Y002725D01*
+X023645Y002710D02*
+X023675Y002680D01*
+X023645Y002710D02*
+X023645Y002760D01*
+X023595Y002760D01*
+X024090Y002760D02*
+X024090Y002661D01*
+X024516Y002235D01*
+X026334Y002235D01*
+X026385Y002286D01*
+X026385Y002313D01*
+X026333Y002335D01*
+X026265Y002403D01*
+X026250Y002439D01*
+X026235Y002403D01*
+X026167Y002335D01*
+X026079Y002298D01*
+X025590Y002298D01*
+X025502Y002335D01*
+X025500Y002337D01*
+X025498Y002335D01*
+X025410Y002298D01*
+X024921Y002298D01*
+X024833Y002335D01*
+X024765Y002403D01*
+X024729Y002491D01*
+X024729Y002760D01*
+X024440Y002760D01*
+X024440Y003060D01*
+X024360Y003060D01*
+X024360Y002760D01*
+X024090Y002760D01*
+X024090Y002696D02*
+X024729Y002696D01*
+X024729Y002617D02*
+X024134Y002617D01*
+X024212Y002539D02*
+X024729Y002539D01*
+X024741Y002460D02*
+X024291Y002460D01*
+X024369Y002382D02*
+X024786Y002382D01*
+X024910Y002303D02*
+X024448Y002303D01*
+X024900Y001955D02*
+X024950Y001955D01*
+X025421Y002303D02*
+X025579Y002303D01*
+X026090Y002303D02*
+X026385Y002303D01*
+X026286Y002382D02*
+X026214Y002382D01*
+X025835Y002755D02*
+X025800Y002755D01*
+X025828Y002783D01*
+X025828Y004131D01*
+X026616Y004131D02*
+X026616Y005389D01*
+X026550Y005455D01*
+X027206Y004131D02*
+X027206Y003249D01*
+X027350Y003105D01*
+X027350Y002805D01*
+X027300Y002755D01*
+X027335Y002755D01*
+X027375Y002774D02*
+X027787Y002774D01*
+X027787Y002696D02*
+X027671Y002696D01*
+X027671Y002715D02*
+X027375Y002715D01*
+X027375Y002795D01*
+X027671Y002795D01*
+X027671Y002990D01*
+X027662Y003026D01*
+X027644Y003057D01*
+X027617Y003084D01*
+X027586Y003102D01*
+X027550Y003112D01*
+X027375Y003112D01*
+X027375Y002795D01*
+X027295Y002795D01*
+X027295Y003112D01*
+X027119Y003112D01*
+X027084Y003102D01*
+X027071Y003095D01*
+X027068Y003102D01*
+X027099Y003176D01*
+X027099Y003258D01*
+X027247Y003406D01*
+X027288Y003505D01*
+X027306Y003497D01*
+X027500Y003497D01*
+X027502Y003498D01*
+X027503Y003497D01*
+X027697Y003497D01*
+X027785Y003533D01*
+X027853Y003601D01*
+X027889Y003689D01*
+X027889Y003851D01*
+X028264Y003851D01*
+X028276Y003845D01*
+X028262Y003831D01*
+X028201Y003684D01*
+X028201Y003567D01*
+X027979Y003567D01*
+X027891Y003531D01*
+X027824Y003463D01*
+X027787Y003375D01*
+X027787Y002335D01*
+X027824Y002247D01*
+X027862Y002208D01*
+X027783Y002175D01*
+X027715Y002107D01*
+X027679Y002019D01*
+X027679Y001722D01*
+X027559Y001842D01*
+X027456Y001885D01*
+X027406Y001885D01*
+X027370Y001972D01*
+X027302Y002040D01*
+X027214Y002076D01*
+X026930Y002076D01*
+X026945Y002115D01*
+X026945Y002313D01*
+X026998Y002335D01*
+X027066Y002403D01*
+X027071Y002415D01*
+X027084Y002408D01*
+X027119Y002398D01*
+X027295Y002398D01*
+X027295Y002715D01*
+X027375Y002715D01*
+X027375Y002398D01*
+X027550Y002398D01*
+X027586Y002408D01*
+X027617Y002426D01*
+X027644Y002453D01*
+X027662Y002484D01*
+X027671Y002520D01*
+X027671Y002715D01*
+X027671Y002617D02*
+X027787Y002617D01*
+X027787Y002539D02*
+X027671Y002539D01*
+X027648Y002460D02*
+X027787Y002460D01*
+X027787Y002382D02*
+X027045Y002382D01*
+X026945Y002303D02*
+X027800Y002303D01*
+X027846Y002225D02*
+X026945Y002225D01*
+X026945Y002146D02*
+X027754Y002146D01*
+X027698Y002068D02*
+X027236Y002068D01*
+X027353Y001989D02*
+X027679Y001989D01*
+X027679Y001911D02*
+X027396Y001911D01*
+X027569Y001832D02*
+X027679Y001832D01*
+X027679Y001754D02*
+X027647Y001754D01*
+X027400Y001605D02*
+X027550Y001455D01*
+X027550Y000905D01*
+X027750Y000705D01*
+X029450Y000705D01*
+X029550Y000805D01*
+X029550Y000955D01*
+X029534Y000971D01*
+X029534Y000905D01*
+X029708Y000567D02*
+X029877Y000567D01*
+X029965Y000603D01*
+X029967Y000605D01*
+X029969Y000603D01*
+X030057Y000567D01*
+X030743Y000567D01*
+X030831Y000603D01*
+X030899Y000671D01*
+X030935Y000759D01*
+X030935Y000782D01*
+X030998Y000720D01*
+X031086Y000684D01*
+X031614Y000684D01*
+X031702Y000720D01*
+X031770Y000788D01*
+X031802Y000865D01*
+X031809Y000868D01*
+X031887Y000946D01*
+X032037Y001096D01*
+X032080Y001199D01*
+X032080Y002411D01*
+X032037Y002514D01*
+X031959Y002592D01*
+X031843Y002708D01*
+X031803Y002725D01*
+X031770Y002803D01*
+X031768Y002805D01*
+X031770Y002807D01*
+X031807Y002895D01*
+X031807Y003384D01*
+X031770Y003472D01*
+X031702Y003540D01*
+X031614Y003576D01*
+X031574Y003576D01*
+X031509Y003642D01*
+X031359Y003792D01*
+X031256Y003835D01*
+X029744Y003835D01*
+X029641Y003792D01*
+X029615Y003766D01*
+X029588Y003831D01*
+X029476Y003943D01*
+X029410Y003970D01*
+X029470Y004155D01*
+X029399Y004372D01*
+X029326Y004426D01*
+X029426Y004467D01*
+X029479Y004520D01*
+X029479Y004191D01*
+X029515Y004103D01*
+X029583Y004035D01*
+X029671Y003998D01*
+X030160Y003998D01*
+X030248Y004035D01*
+X030250Y004037D01*
+X030252Y004035D01*
+X030340Y003998D01*
+X030829Y003998D01*
+X030917Y004035D01*
+X030942Y004060D01*
+X031071Y004006D01*
+X031229Y004006D01*
+X031376Y004067D01*
+X031488Y004179D01*
+X031549Y004326D01*
+X031549Y004484D01*
+X031488Y004631D01*
+X031376Y004743D01*
+X031359Y004750D01*
+X031438Y004829D01*
+X031499Y004976D01*
+X031499Y005134D01*
+X031438Y005281D01*
+X031353Y005366D01*
+X031476Y005417D01*
+X031588Y005529D01*
+X031649Y005676D01*
+X031649Y005834D01*
+X031588Y005981D01*
+X031497Y006072D01*
+X031499Y006076D01*
+X031499Y006234D01*
+X031551Y006234D01*
+X031551Y006076D01*
+X031612Y005929D01*
+X031724Y005817D01*
+X031871Y005756D01*
+X032029Y005756D01*
+X032176Y005817D01*
+X032200Y005841D01*
+X032200Y000355D01*
+X024196Y000355D01*
+X024489Y000648D01*
+X024522Y000569D01*
+X024589Y000502D01*
+X024677Y000465D01*
+X026123Y000465D01*
+X026211Y000502D01*
+X026278Y000569D01*
+X026315Y000657D01*
+X026315Y001453D01*
+X026306Y001475D01*
+X026493Y001475D01*
+X026493Y001395D01*
+X026530Y001307D01*
+X026598Y001239D01*
+X026610Y001234D01*
+X026603Y001221D01*
+X026593Y001186D01*
+X026593Y001010D01*
+X026910Y001010D01*
+X026910Y000930D01*
+X026990Y000930D01*
+X026990Y000634D01*
+X027185Y000634D01*
+X027221Y000643D01*
+X027252Y000661D01*
+X027279Y000688D01*
+X027297Y000719D01*
+X027307Y000755D01*
+X027307Y000761D01*
+X027313Y000746D01*
+X027591Y000468D01*
+X027694Y000425D01*
+X029506Y000425D01*
+X029609Y000468D01*
+X029708Y000567D01*
+X029638Y000498D02*
+X032200Y000498D01*
+X032200Y000576D02*
+X030766Y000576D01*
+X030883Y000655D02*
+X032200Y000655D01*
+X032200Y000733D02*
+X031715Y000733D01*
+X031780Y000812D02*
+X032200Y000812D01*
+X032200Y000890D02*
+X031831Y000890D01*
+X031909Y000969D02*
+X032200Y000969D01*
+X032200Y001047D02*
+X031988Y001047D01*
+X032049Y001126D02*
+X032200Y001126D01*
+X032200Y001204D02*
+X032080Y001204D01*
+X032080Y001283D02*
+X032200Y001283D01*
+X032200Y001361D02*
+X032080Y001361D01*
+X032080Y001440D02*
+X032200Y001440D01*
+X032200Y001518D02*
+X032080Y001518D01*
+X032080Y001597D02*
+X032200Y001597D01*
+X032200Y001675D02*
+X032080Y001675D01*
+X032080Y001754D02*
+X032200Y001754D01*
+X032200Y001832D02*
+X032080Y001832D01*
+X032080Y001911D02*
+X032200Y001911D01*
+X032200Y001989D02*
+X032080Y001989D01*
+X032080Y002068D02*
+X032200Y002068D01*
+X032200Y002146D02*
+X032080Y002146D01*
+X032080Y002225D02*
+X032200Y002225D01*
+X032200Y002303D02*
+X032080Y002303D01*
+X032080Y002382D02*
+X032200Y002382D01*
+X032200Y002460D02*
+X032060Y002460D01*
+X032012Y002539D02*
+X032200Y002539D01*
+X032200Y002617D02*
+X031934Y002617D01*
+X031855Y002696D02*
+X032200Y002696D01*
+X032200Y002774D02*
+X031782Y002774D01*
+X031789Y002853D02*
+X032200Y002853D01*
+X032200Y002931D02*
+X031807Y002931D01*
+X031807Y003010D02*
+X032200Y003010D01*
+X032200Y003088D02*
+X031807Y003088D01*
+X031807Y003167D02*
+X032200Y003167D01*
+X032200Y003245D02*
+X031807Y003245D01*
+X031807Y003324D02*
+X032200Y003324D01*
+X032200Y003402D02*
+X031799Y003402D01*
+X031762Y003481D02*
+X032200Y003481D01*
+X032200Y003559D02*
+X031656Y003559D01*
+X031513Y003638D02*
+X032200Y003638D01*
+X032200Y003716D02*
+X031435Y003716D01*
+X031353Y003795D02*
+X032200Y003795D01*
+X032200Y003873D02*
+X029546Y003873D01*
+X029603Y003795D02*
+X029647Y003795D01*
+X029595Y004030D02*
+X029429Y004030D01*
+X029455Y004109D02*
+X029513Y004109D01*
+X029480Y004187D02*
+X029460Y004187D01*
+X029479Y004266D02*
+X029434Y004266D01*
+X029409Y004344D02*
+X029479Y004344D01*
+X029479Y004423D02*
+X029330Y004423D01*
+X029460Y004501D02*
+X029479Y004501D01*
+X029500Y004905D02*
+X029915Y004490D01*
+X029915Y004455D01*
+X030550Y004455D02*
+X030600Y004405D01*
+X031150Y004405D01*
+X031524Y004266D02*
+X032200Y004266D01*
+X032200Y004344D02*
+X031549Y004344D01*
+X031549Y004423D02*
+X032200Y004423D01*
+X032200Y004501D02*
+X031542Y004501D01*
+X031509Y004580D02*
+X032200Y004580D01*
+X032200Y004658D02*
+X031461Y004658D01*
+X031382Y004737D02*
+X032200Y004737D01*
+X032200Y004815D02*
+X031424Y004815D01*
+X031465Y004894D02*
+X032200Y004894D01*
+X032200Y004972D02*
+X031497Y004972D01*
+X031499Y005051D02*
+X032200Y005051D01*
+X032200Y005129D02*
+X031499Y005129D01*
+X031468Y005208D02*
+X032200Y005208D01*
+X032200Y005286D02*
+X031433Y005286D01*
+X031354Y005365D02*
+X032200Y005365D01*
+X032200Y005443D02*
+X031502Y005443D01*
+X031580Y005522D02*
+X032200Y005522D01*
+X032200Y005600D02*
+X031617Y005600D01*
+X031649Y005679D02*
+X032200Y005679D01*
+X032200Y005757D02*
+X032031Y005757D01*
+X031869Y005757D02*
+X031649Y005757D01*
+X031648Y005836D02*
+X031706Y005836D01*
+X031627Y005914D02*
+X031616Y005914D01*
+X031586Y005993D02*
+X031576Y005993D01*
+X031553Y006071D02*
+X031498Y006071D01*
+X031499Y006150D02*
+X031551Y006150D01*
+X031551Y006228D02*
+X031499Y006228D01*
+X032194Y005836D02*
+X032200Y005836D01*
+X031250Y005755D02*
+X030585Y005755D01*
+X030550Y005755D01*
+X029950Y005705D02*
+X029915Y005740D01*
+X030585Y005105D02*
+X030600Y005105D01*
+X030650Y005055D01*
+X031100Y005055D01*
+X030585Y004455D02*
+X030550Y004455D01*
+X030264Y004030D02*
+X030236Y004030D01*
+X030905Y004030D02*
+X031013Y004030D01*
+X031287Y004030D02*
+X032200Y004030D01*
+X032200Y003952D02*
+X029455Y003952D01*
+X029800Y003555D02*
+X031200Y003555D01*
+X031350Y003405D01*
+X031350Y003140D01*
+X030850Y002505D02*
+X030500Y002855D01*
+X030429Y002855D01*
+X030850Y002505D02*
+X031250Y002505D01*
+X031300Y002455D01*
+X031315Y002470D01*
+X031350Y002470D01*
+X031685Y002470D01*
+X031800Y002355D01*
+X031800Y001255D01*
+X031650Y001105D01*
+X031300Y001105D01*
+X031315Y001120D01*
+X031350Y001120D01*
+X031350Y001155D01*
+X031226Y001279D01*
+X030400Y001279D01*
+X030400Y001605D02*
+X030150Y001605D01*
+X029900Y001355D01*
+X029050Y001355D01*
+X028750Y001055D01*
+X028785Y001055D01*
+X028852Y001653D02*
+X028750Y001755D01*
+X028785Y001755D01*
+X028785Y001740D01*
+X028798Y001753D01*
+X028785Y001740D02*
+X028750Y001705D01*
+X028852Y001653D02*
+X029534Y001653D01*
+X029965Y001955D02*
+X030033Y001887D01*
+X030038Y001875D01*
+X030051Y001882D01*
+X030086Y001891D01*
+X030391Y001891D01*
+X030391Y001662D01*
+X030409Y001662D01*
+X030835Y001662D01*
+X030835Y001770D01*
+X030826Y001805D01*
+X030807Y001837D01*
+X030781Y001863D01*
+X030749Y001882D01*
+X030714Y001891D01*
+X030409Y001891D01*
+X030409Y001662D01*
+X030409Y001644D01*
+X030835Y001644D01*
+X030835Y001577D01*
+X030853Y001559D01*
+X030998Y001559D01*
+X030993Y001574D01*
+X030993Y001750D01*
+X031310Y001750D01*
+X031310Y001830D01*
+X030993Y001830D01*
+X030993Y002005D01*
+X031003Y002041D01*
+X031016Y002063D01*
+X030998Y002070D01*
+X030930Y002138D01*
+X030928Y002143D01*
+X029909Y002143D01*
+X029820Y002179D01*
+X029753Y002247D01*
+X029716Y002335D01*
+X029716Y003075D01*
+X029259Y002618D01*
+X029212Y002598D01*
+X029212Y002335D01*
+X029176Y002247D01*
+X029108Y002179D01*
+X029108Y002179D01*
+X029117Y002175D01*
+X029185Y002107D01*
+X029221Y002019D01*
+X029221Y001991D01*
+X029877Y001991D01*
+X029965Y001955D01*
+X030009Y001911D02*
+X030993Y001911D01*
+X030993Y001989D02*
+X029883Y001989D01*
+X029900Y002146D02*
+X029146Y002146D01*
+X029153Y002225D02*
+X029775Y002225D01*
+X029729Y002303D02*
+X029199Y002303D01*
+X029212Y002382D02*
+X029716Y002382D01*
+X029716Y002460D02*
+X029212Y002460D01*
+X029212Y002539D02*
+X029716Y002539D01*
+X029716Y002617D02*
+X029257Y002617D01*
+X029336Y002696D02*
+X029716Y002696D01*
+X029716Y002774D02*
+X029415Y002774D01*
+X029493Y002853D02*
+X029716Y002853D01*
+X029716Y002931D02*
+X029572Y002931D01*
+X029650Y003010D02*
+X029716Y003010D01*
+X029800Y003555D02*
+X029100Y002855D01*
+X028500Y002855D01*
+X028550Y002905D01*
+X028600Y002905D01*
+X028600Y003605D01*
+X028201Y003638D02*
+X027868Y003638D01*
+X027889Y003716D02*
+X028214Y003716D01*
+X028247Y003795D02*
+X027889Y003795D01*
+X027959Y003559D02*
+X027811Y003559D01*
+X027841Y003481D02*
+X027278Y003481D01*
+X027243Y003402D02*
+X027798Y003402D01*
+X027787Y003324D02*
+X027164Y003324D01*
+X027099Y003245D02*
+X027787Y003245D01*
+X027787Y003167D02*
+X027095Y003167D01*
+X027295Y003088D02*
+X027375Y003088D01*
+X027375Y003010D02*
+X027295Y003010D01*
+X027295Y002931D02*
+X027375Y002931D01*
+X027375Y002853D02*
+X027295Y002853D01*
+X027295Y002696D02*
+X027375Y002696D01*
+X027375Y002617D02*
+X027295Y002617D01*
+X027295Y002539D02*
+X027375Y002539D01*
+X027375Y002460D02*
+X027295Y002460D01*
+X027671Y002853D02*
+X027787Y002853D01*
+X027787Y002931D02*
+X027671Y002931D01*
+X027666Y003010D02*
+X027787Y003010D01*
+X027787Y003088D02*
+X027610Y003088D01*
+X028200Y002505D02*
+X028200Y001855D01*
+X028100Y001755D01*
+X028115Y001755D01*
+X028115Y001070D01*
+X028100Y001055D01*
+X028115Y001055D01*
+X027562Y000498D02*
+X026201Y000498D01*
+X026281Y000576D02*
+X027483Y000576D01*
+X027405Y000655D02*
+X027240Y000655D01*
+X027301Y000733D02*
+X027326Y000733D01*
+X026990Y000733D02*
+X026910Y000733D01*
+X026910Y000655D02*
+X026990Y000655D01*
+X026910Y000634D02*
+X026910Y000930D01*
+X026593Y000930D01*
+X026593Y000755D01*
+X026603Y000719D01*
+X026621Y000688D01*
+X026648Y000661D01*
+X026679Y000643D01*
+X026715Y000634D01*
+X026910Y000634D01*
+X026910Y000812D02*
+X026990Y000812D01*
+X026990Y000890D02*
+X026910Y000890D01*
+X026910Y000969D02*
+X026315Y000969D01*
+X026315Y001047D02*
+X026593Y001047D01*
+X026593Y001126D02*
+X026315Y001126D01*
+X026315Y001204D02*
+X026598Y001204D01*
+X026554Y001283D02*
+X026315Y001283D01*
+X026315Y001361D02*
+X026508Y001361D01*
+X026493Y001440D02*
+X026315Y001440D01*
+X026950Y001605D02*
+X027400Y001605D01*
+X026950Y001605D02*
+X026950Y001640D01*
+X026950Y001755D01*
+X024150Y001755D01*
+X023512Y002393D01*
+X021600Y002393D01*
+X020912Y002393D01*
+X020900Y002405D01*
+X020950Y002405D01*
+X020900Y002405D02*
+X020550Y002405D01*
+X020600Y002105D02*
+X020250Y002105D01*
+X019950Y002405D01*
+X019950Y002605D01*
+X020100Y002755D01*
+X020850Y002755D01*
+X020881Y002786D01*
+X021600Y002786D01*
+X021600Y002805D01*
+X021600Y002805D01*
+X021600Y002805D01*
+X021600Y002983D01*
+X020972Y002983D01*
+X020950Y003005D01*
+X020800Y003005D01*
+X020750Y003055D01*
+X020747Y003088D02*
+X021064Y003088D01*
+X021095Y003010D02*
+X020658Y003010D01*
+X020701Y002774D02*
+X021101Y002774D01*
+X021068Y002696D02*
+X020823Y002696D01*
+X021164Y002853D02*
+X017232Y002853D01*
+X017068Y002853D02*
+X015836Y002853D01*
+X015836Y002931D02*
+X021164Y002931D01*
+X020399Y002774D02*
+X017395Y002774D01*
+X017473Y002696D02*
+X020277Y002696D01*
+X020206Y002617D02*
+X017514Y002617D01*
+X017547Y002539D02*
+X018470Y002539D01*
+X018391Y002460D02*
+X017549Y002460D01*
+X017450Y002155D02*
+X017150Y002455D01*
+X017100Y002405D01*
+X015300Y002405D01*
+X015300Y002405D01*
+X015315Y002390D01*
+X015315Y000855D01*
+X015721Y001195D02*
+X015716Y001207D01*
+X015648Y001275D01*
+X015595Y001297D01*
+X015595Y001406D01*
+X015679Y001406D01*
+X015826Y001467D01*
+X015899Y001540D01*
+X015899Y001341D01*
+X015908Y001305D01*
+X015927Y001273D01*
+X015953Y001247D01*
+X015985Y001229D01*
+X016020Y001219D01*
+X016036Y001219D01*
+X016044Y001212D01*
+X016025Y001212D01*
+X016025Y000895D01*
+X016321Y000895D01*
+X016321Y001090D01*
+X016314Y001119D01*
+X016382Y001119D01*
+X016383Y001120D01*
+X016385Y001119D01*
+X016578Y001119D01*
+X016580Y001120D01*
+X016581Y001119D01*
+X016775Y001119D01*
+X016777Y001120D01*
+X016778Y001119D01*
+X016972Y001119D01*
+X016974Y001120D01*
+X016975Y001119D01*
+X017169Y001119D01*
+X017170Y001120D01*
+X017172Y001119D01*
+X017366Y001119D01*
+X017367Y001120D01*
+X017369Y001119D01*
+X017563Y001119D01*
+X017564Y001120D01*
+X017566Y001119D01*
+X017760Y001119D01*
+X017761Y001120D01*
+X017762Y001119D01*
+X017956Y001119D01*
+X018045Y001156D01*
+X018056Y001168D01*
+X018068Y001156D01*
+X018156Y001119D01*
+X018246Y001119D01*
+X018234Y001107D01*
+X018229Y001095D01*
+X018216Y001102D01*
+X018181Y001112D01*
+X018005Y001112D01*
+X018005Y000795D01*
+X017925Y000795D01*
+X017925Y000715D01*
+X017629Y000715D01*
+X017629Y000520D01*
+X017638Y000484D01*
+X017656Y000453D01*
+X017683Y000426D01*
+X017714Y000408D01*
+X017750Y000398D01*
+X017925Y000398D01*
+X017925Y000715D01*
+X018005Y000715D01*
+X018005Y000398D01*
+X018181Y000398D01*
+X018216Y000408D01*
+X018229Y000415D01*
+X018234Y000403D01*
+X018282Y000355D01*
+X009069Y000355D01*
+X009083Y000369D01*
+X009099Y000407D01*
+X009121Y000398D01*
+X009610Y000398D01*
+X009698Y000435D01*
+X009700Y000437D01*
+X009702Y000435D01*
+X009790Y000398D01*
+X010279Y000398D01*
+X010343Y000425D01*
+X011706Y000425D01*
+X011809Y000468D01*
+X011887Y000546D01*
+X011887Y000546D01*
+X012216Y000875D01*
+X012243Y000875D01*
+X012243Y000860D01*
+X012560Y000860D01*
+X012560Y000780D01*
+X012640Y000780D01*
+X012640Y000484D01*
+X012834Y000484D01*
+X012898Y000420D01*
+X012986Y000384D01*
+X013514Y000384D01*
+X013575Y000409D01*
+X013636Y000384D01*
+X014164Y000384D01*
+X014225Y000409D01*
+X014286Y000384D01*
+X014814Y000384D01*
+X014902Y000420D01*
+X014950Y000468D01*
+X014983Y000435D01*
+X015071Y000398D01*
+X015560Y000398D01*
+X015648Y000435D01*
+X015716Y000503D01*
+X015721Y000515D01*
+X015734Y000508D01*
+X015769Y000498D01*
+X015945Y000498D01*
+X015945Y000815D01*
+X016025Y000815D01*
+X016025Y000895D01*
+X015945Y000895D01*
+X015945Y001212D01*
+X015769Y001212D01*
+X015734Y001202D01*
+X015721Y001195D01*
+X015717Y001204D02*
+X015741Y001204D01*
+X015630Y001283D02*
+X015921Y001283D01*
+X015899Y001361D02*
+X015595Y001361D01*
+X015760Y001440D02*
+X015899Y001440D01*
+X015899Y001518D02*
+X015877Y001518D01*
+X016088Y001605D02*
+X016088Y000993D01*
+X015950Y000855D01*
+X015985Y000855D01*
+X016025Y000890D02*
+X017629Y000890D01*
+X017629Y000812D02*
+X016321Y000812D01*
+X016321Y000815D02*
+X016025Y000815D01*
+X016025Y000498D01*
+X016200Y000498D01*
+X016236Y000508D01*
+X016267Y000526D01*
+X016294Y000553D01*
+X016312Y000584D01*
+X016321Y000620D01*
+X016321Y000815D01*
+X016321Y000733D02*
+X017925Y000733D01*
+X017900Y000755D02*
+X018056Y000911D01*
+X018056Y001605D01*
+X018253Y001605D02*
+X018253Y002002D01*
+X018100Y002155D01*
+X017450Y002155D01*
+X018269Y002382D02*
+X018342Y002382D01*
+X018700Y002205D02*
+X018700Y001955D01*
+X018650Y001905D01*
+X018650Y001605D01*
+X018650Y001605D01*
+X018647Y001605D01*
+X018647Y000802D01*
+X018600Y000755D01*
+X018635Y000755D01*
+X019071Y000733D02*
+X019942Y000733D01*
+X019942Y000678D02*
+X019984Y000575D01*
+X020204Y000355D01*
+X018987Y000355D01*
+X019035Y000403D01*
+X019071Y000491D01*
+X019071Y001019D01*
+X019035Y001107D01*
+X019023Y001119D01*
+X019138Y001119D01*
+X019139Y001120D01*
+X019140Y001119D01*
+X019334Y001119D01*
+X019336Y001120D01*
+X019337Y001119D01*
+X019531Y001119D01*
+X019533Y001120D01*
+X019534Y001119D01*
+X019728Y001119D01*
+X019730Y001120D01*
+X019731Y001119D01*
+X019925Y001119D01*
+X019926Y001120D01*
+X019928Y001119D01*
+X019942Y001119D01*
+X019942Y000678D01*
+X019951Y000655D02*
+X019071Y000655D01*
+X019071Y000576D02*
+X019984Y000576D01*
+X020062Y000498D02*
+X019071Y000498D01*
+X019042Y000419D02*
+X020140Y000419D01*
+X020222Y000733D02*
+X020550Y000405D01*
+X023850Y000405D01*
+X024500Y001055D01*
+X025400Y001055D01*
+X024485Y001335D02*
+X024485Y001453D01*
+X024494Y001475D01*
+X024094Y001475D01*
+X023991Y001518D01*
+X021101Y001518D01*
+X021101Y001440D02*
+X024485Y001440D01*
+X024485Y001361D02*
+X021101Y001361D01*
+X021101Y001312D02*
+X021101Y001899D01*
+X021065Y001987D01*
+X020997Y002055D01*
+X020909Y002091D01*
+X020800Y002091D01*
+X020832Y002123D01*
+X020857Y002113D01*
+X021234Y002113D01*
+X021257Y002104D01*
+X021943Y002104D01*
+X021965Y002113D01*
+X023396Y002113D01*
+X023991Y001518D01*
+X023913Y001597D02*
+X021101Y001597D01*
+X021101Y001675D02*
+X023834Y001675D01*
+X023756Y001754D02*
+X021101Y001754D01*
+X021101Y001832D02*
+X023677Y001832D01*
+X023599Y001911D02*
+X021097Y001911D01*
+X021063Y001989D02*
+X023520Y001989D01*
+X023442Y002068D02*
+X020967Y002068D01*
+X020615Y002090D02*
+X020600Y002105D01*
+X020615Y002090D02*
+X020615Y001605D01*
+X020222Y001605D02*
+X020222Y000733D01*
+X019942Y000812D02*
+X019071Y000812D01*
+X019071Y000890D02*
+X019942Y000890D01*
+X019942Y000969D02*
+X019071Y000969D01*
+X019060Y001047D02*
+X019942Y001047D01*
+X020502Y001047D02*
+X021310Y001047D01*
+X021335Y001126D02*
+X020924Y001126D01*
+X020909Y001119D02*
+X020997Y001156D01*
+X021065Y001223D01*
+X021101Y001312D01*
+X021089Y001283D02*
+X021502Y001283D01*
+X021536Y001307D02*
+X021351Y001172D01*
+X021280Y000955D01*
+X021351Y000738D01*
+X021423Y000685D01*
+X020666Y000685D01*
+X020502Y000849D01*
+X020502Y001119D01*
+X020515Y001119D01*
+X020604Y001156D01*
+X020615Y001168D01*
+X020627Y001156D01*
+X020715Y001119D01*
+X020909Y001119D01*
+X021046Y001204D02*
+X021394Y001204D01*
+X021536Y001307D02*
+X021764Y001307D01*
+X021949Y001172D01*
+X022020Y000955D01*
+X021949Y000738D01*
+X021877Y000685D01*
+X023734Y000685D01*
+X024263Y001214D01*
+X024341Y001292D01*
+X024444Y001335D01*
+X024485Y001335D01*
+X024332Y001283D02*
+X021798Y001283D01*
+X021906Y001204D02*
+X024253Y001204D01*
+X024175Y001126D02*
+X021965Y001126D01*
+X021990Y001047D02*
+X024096Y001047D01*
+X024018Y000969D02*
+X022016Y000969D01*
+X021999Y000890D02*
+X023939Y000890D01*
+X023861Y000812D02*
+X021973Y000812D01*
+X021943Y000733D02*
+X023782Y000733D01*
+X024260Y000419D02*
+X032200Y000419D01*
+X031350Y001120D02*
+X031335Y001120D01*
+X030985Y000733D02*
+X030925Y000733D01*
+X030034Y000576D02*
+X029900Y000576D01*
+X030400Y001605D02*
+X030400Y001653D01*
+X031298Y001653D01*
+X031400Y001755D01*
+X031365Y001790D01*
+X031350Y001790D01*
+X031315Y001790D01*
+X031300Y001805D01*
+X031248Y001753D01*
+X031310Y001754D02*
+X030835Y001754D01*
+X030835Y001675D02*
+X030993Y001675D01*
+X030993Y001597D02*
+X030835Y001597D01*
+X030810Y001832D02*
+X030993Y001832D01*
+X031004Y002068D02*
+X029202Y002068D01*
+X028500Y002805D02*
+X028200Y002505D01*
+X028500Y002805D02*
+X028500Y002855D01*
+X030391Y001832D02*
+X030409Y001832D01*
+X030409Y001754D02*
+X030391Y001754D01*
+X030391Y001675D02*
+X030409Y001675D01*
+X031390Y001750D02*
+X031520Y001750D01*
+X031520Y001830D01*
+X031390Y001830D01*
+X031390Y001750D01*
+X031390Y001754D02*
+X031520Y001754D01*
+X031417Y004109D02*
+X032200Y004109D01*
+X032200Y004187D02*
+X031491Y004187D01*
+X028450Y004205D02*
+X028376Y004131D01*
+X027600Y004131D01*
+X025150Y003255D02*
+X025150Y002805D01*
+X025200Y002755D01*
+X025165Y002755D01*
+X025150Y002755D01*
+X024440Y002774D02*
+X024360Y002774D01*
+X024360Y002853D02*
+X024440Y002853D01*
+X024440Y002931D02*
+X024360Y002931D01*
+X024360Y003010D02*
+X024440Y003010D01*
+X022250Y003305D02*
+X022250Y003355D01*
+X020242Y003010D02*
+X015836Y003010D01*
+X015836Y003088D02*
+X020153Y003088D01*
+X020096Y003167D02*
+X015836Y003167D01*
+X015836Y003245D02*
+X020064Y003245D01*
+X020174Y002539D02*
+X018930Y002539D01*
+X019009Y002460D02*
+X020151Y002460D01*
+X020151Y002382D02*
+X019058Y002382D01*
+X019091Y002303D02*
+X020161Y002303D01*
+X020193Y002225D02*
+X019099Y002225D01*
+X019099Y002146D02*
+X020245Y002146D01*
+X020530Y001126D02*
+X020700Y001126D01*
+X020502Y000969D02*
+X021284Y000969D01*
+X021301Y000890D02*
+X020502Y000890D01*
+X020539Y000812D02*
+X021327Y000812D01*
+X021357Y000733D02*
+X020618Y000733D01*
+X018141Y001126D02*
+X017971Y001126D01*
+X017925Y001112D02*
+X017750Y001112D01*
+X017714Y001102D01*
+X017683Y001084D01*
+X017656Y001057D01*
+X017638Y001026D01*
+X017629Y000990D01*
+X017629Y000795D01*
+X017925Y000795D01*
+X017925Y001112D01*
+X017925Y001047D02*
+X018005Y001047D01*
+X018005Y000969D02*
+X017925Y000969D01*
+X017925Y000890D02*
+X018005Y000890D01*
+X018005Y000812D02*
+X017925Y000812D01*
+X017900Y000755D02*
+X017965Y000755D01*
+X017925Y000655D02*
+X018005Y000655D01*
+X018005Y000576D02*
+X017925Y000576D01*
+X017925Y000498D02*
+X018005Y000498D01*
+X018005Y000419D02*
+X017925Y000419D01*
+X017695Y000419D02*
+X015610Y000419D01*
+X015711Y000498D02*
+X017635Y000498D01*
+X017629Y000576D02*
+X016307Y000576D01*
+X016321Y000655D02*
+X017629Y000655D01*
+X017629Y000969D02*
+X016321Y000969D01*
+X016321Y001047D02*
+X017650Y001047D01*
+X016285Y001605D02*
+X016285Y002020D01*
+X016150Y002155D01*
+X015850Y002155D01*
+X015600Y001905D01*
+X015600Y001805D01*
+X015000Y001705D02*
+X015000Y001255D01*
+X014550Y000805D01*
+X014550Y000820D01*
+X013965Y000820D01*
+X013950Y000805D01*
+X013935Y000820D01*
+X013900Y000820D01*
+X013250Y000855D02*
+X013250Y000820D01*
+X013250Y000855D02*
+X013250Y001105D01*
+X013200Y001155D01*
+X012100Y001155D01*
+X011650Y000705D01*
+X010750Y000705D01*
+X010750Y001255D01*
+X010600Y001255D01*
+X010471Y001540D02*
+X010471Y001706D01*
+X010490Y001698D01*
+X010513Y001698D01*
+X010552Y001604D01*
+X010524Y001593D01*
+X010471Y001540D01*
+X010471Y001597D02*
+X010533Y001597D01*
+X010550Y001655D02*
+X010065Y002140D01*
+X010065Y002155D01*
+X009600Y002005D02*
+X009600Y001905D01*
+X010035Y001470D01*
+X010035Y001505D01*
+X010035Y001470D02*
+X010050Y001455D01*
+X010471Y001675D02*
+X010522Y001675D01*
+X010500Y001655D02*
+X010550Y001655D01*
+X010850Y001855D02*
+X010900Y001805D01*
+X010850Y001855D02*
+X010850Y002005D01*
+X010800Y002055D01*
+X010800Y002090D01*
+X010735Y002155D01*
+X010735Y002805D01*
+X010065Y002805D02*
+X009550Y002805D01*
+X009485Y002805D01*
+X009450Y002770D01*
+X009450Y002120D01*
+X009485Y002155D01*
+X009500Y002140D01*
+X009500Y002105D01*
+X009600Y002005D01*
+X009450Y002055D02*
+X009450Y002120D01*
+X008855Y002195D02*
+X008855Y002448D01*
+X008855Y002765D01*
+X008775Y002765D01*
+X008775Y002195D01*
+X008855Y002195D01*
+X008855Y002225D02*
+X008775Y002225D01*
+X008775Y002303D02*
+X008855Y002303D01*
+X008855Y002382D02*
+X008775Y002382D01*
+X008775Y002460D02*
+X008855Y002460D01*
+X008855Y002539D02*
+X008775Y002539D01*
+X008775Y002617D02*
+X008855Y002617D01*
+X008855Y002696D02*
+X008775Y002696D01*
+X008815Y002740D02*
+X008800Y002755D01*
+X008815Y002770D01*
+X008815Y002805D01*
+X008775Y002845D02*
+X008775Y003162D01*
+X008600Y003162D01*
+X008564Y003152D01*
+X008533Y003134D01*
+X008506Y003107D01*
+X008488Y003076D01*
+X008480Y003046D01*
+X008480Y003339D01*
+X008533Y003392D01*
+X008597Y003365D01*
+X008602Y003365D01*
+X008608Y003351D01*
+X008855Y003104D01*
+X008855Y002845D01*
+X008775Y002845D01*
+X008775Y002853D02*
+X008855Y002853D01*
+X008855Y002931D02*
+X008775Y002931D01*
+X008775Y003010D02*
+X008855Y003010D01*
+X008855Y003088D02*
+X008775Y003088D01*
+X008793Y003167D02*
+X008480Y003167D01*
+X008480Y003245D02*
+X008714Y003245D01*
+X008636Y003324D02*
+X008480Y003324D01*
+X008480Y003088D02*
+X008495Y003088D01*
+X008815Y002740D02*
+X008815Y002155D01*
+X009050Y001505D02*
+X008850Y001305D01*
+X008850Y001355D01*
+X009050Y001505D02*
+X009365Y001505D01*
+X009400Y001505D01*
+X009365Y001470D01*
+X009365Y000855D01*
+X009660Y000419D02*
+X009740Y000419D01*
+X010035Y000770D02*
+X010100Y000705D01*
+X010750Y000705D01*
+X011044Y000985D02*
+X011088Y001029D01*
+X011149Y001176D01*
+X011149Y001184D01*
+X011310Y001184D01*
+X011310Y001480D01*
+X011390Y001480D01*
+X011390Y001184D01*
+X011585Y001184D01*
+X011621Y001193D01*
+X011652Y001211D01*
+X011666Y001225D01*
+X011720Y001171D01*
+X011534Y000985D01*
+X011044Y000985D01*
+X011095Y001047D02*
+X011596Y001047D01*
+X011675Y001126D02*
+X011128Y001126D01*
+X011310Y001204D02*
+X011390Y001204D01*
+X011390Y001283D02*
+X011310Y001283D01*
+X011310Y001361D02*
+X011390Y001361D01*
+X011390Y001440D02*
+X011310Y001440D01*
+X011640Y001204D02*
+X011687Y001204D01*
+X012152Y000812D02*
+X012560Y000812D01*
+X012560Y000780D02*
+X012243Y000780D01*
+X012243Y000605D01*
+X012253Y000569D01*
+X012271Y000538D01*
+X012298Y000511D01*
+X012329Y000493D01*
+X012365Y000484D01*
+X012560Y000484D01*
+X012560Y000780D01*
+X012560Y000733D02*
+X012640Y000733D01*
+X012640Y000655D02*
+X012560Y000655D01*
+X012560Y000576D02*
+X012640Y000576D01*
+X012640Y000498D02*
+X012560Y000498D01*
+X012322Y000498D02*
+X011838Y000498D01*
+X011917Y000576D02*
+X012251Y000576D01*
+X012250Y000505D02*
+X012600Y000855D01*
+X012600Y000820D01*
+X012243Y000733D02*
+X012074Y000733D01*
+X011995Y000655D02*
+X012243Y000655D01*
+X012900Y000419D02*
+X010329Y000419D01*
+X010035Y000770D02*
+X010035Y000855D01*
+X010800Y002055D02*
+X010735Y002120D01*
+X010735Y002155D01*
+X011350Y002190D02*
+X011350Y002305D01*
+X011400Y002355D01*
+X011400Y002555D01*
+X011500Y003005D02*
+X011965Y002540D01*
+X012000Y002540D01*
+X012600Y001940D01*
+X012600Y001490D01*
+X013250Y001490D02*
+X013285Y001455D01*
+X013300Y001455D01*
+X013300Y001855D01*
+X012250Y002905D01*
+X012000Y002905D01*
+X011780Y003125D01*
+X011780Y003555D01*
+X012035Y003555D02*
+X012035Y003270D01*
+X012200Y003105D01*
+X012350Y003105D01*
+X013600Y001855D01*
+X013750Y001855D01*
+X013650Y001855D01*
+X013750Y001855D02*
+X014850Y001855D01*
+X015000Y001705D01*
+X014882Y002135D02*
+X013716Y002135D01*
+X012855Y002996D01*
+X012938Y003079D01*
+X012999Y003226D01*
+X012999Y003318D01*
+X013002Y003320D01*
+X013070Y003388D01*
+X013107Y003476D01*
+X013107Y003965D01*
+X013093Y003998D01*
+X013124Y003967D01*
+X013271Y003906D01*
+X013429Y003906D01*
+X013452Y003916D01*
+X013479Y003889D01*
+X013479Y003695D01*
+X013775Y003695D01*
+X013775Y003615D01*
+X013479Y003615D01*
+X013479Y003420D01*
+X013488Y003384D01*
+X013506Y003353D01*
+X013533Y003326D01*
+X013564Y003308D01*
+X013600Y003298D01*
+X013775Y003298D01*
+X013775Y003615D01*
+X013855Y003615D01*
+X013855Y003298D01*
+X014008Y003298D01*
+X013874Y003243D01*
+X013762Y003131D01*
+X013701Y002984D01*
+X013701Y002826D01*
+X013762Y002679D01*
+X013874Y002567D01*
+X013990Y002519D01*
+X014157Y002352D01*
+X014260Y002310D01*
+X014765Y002310D01*
+X014765Y002296D01*
+X014802Y002208D01*
+X014869Y002140D01*
+X014882Y002135D01*
+X014863Y002146D02*
+X013705Y002146D01*
+X013626Y002225D02*
+X014795Y002225D01*
+X014765Y002303D02*
+X013548Y002303D01*
+X013469Y002382D02*
+X014128Y002382D01*
+X014049Y002460D02*
+X013391Y002460D01*
+X013312Y002539D02*
+X013943Y002539D01*
+X013824Y002617D02*
+X013234Y002617D01*
+X013155Y002696D02*
+X013755Y002696D01*
+X013723Y002774D02*
+X013077Y002774D01*
+X012998Y002853D02*
+X013701Y002853D01*
+X013701Y002931D02*
+X012920Y002931D01*
+X012868Y003010D02*
+X013712Y003010D01*
+X013744Y003088D02*
+X012942Y003088D01*
+X012974Y003167D02*
+X013798Y003167D01*
+X013879Y003245D02*
+X012999Y003245D01*
+X013006Y003324D02*
+X013538Y003324D01*
+X013483Y003402D02*
+X013076Y003402D01*
+X013107Y003481D02*
+X013479Y003481D01*
+X013479Y003559D02*
+X013107Y003559D01*
+X013107Y003638D02*
+X013775Y003638D01*
+X013775Y003559D02*
+X013855Y003559D01*
+X013855Y003481D02*
+X013775Y003481D01*
+X013775Y003402D02*
+X013855Y003402D01*
+X013855Y003324D02*
+X013775Y003324D01*
+X014100Y002905D02*
+X014100Y002805D01*
+X014200Y002705D01*
+X014315Y002590D01*
+X015300Y002590D01*
+X015300Y002405D02*
+X015300Y002393D01*
+X015836Y002696D02*
+X016827Y002696D01*
+X016905Y002774D02*
+X015836Y002774D01*
+X015769Y003574D02*
+X015300Y003574D01*
+X014681Y003574D01*
+X014550Y003705D01*
+X014535Y003690D01*
+X014450Y003690D01*
+X014450Y003655D01*
+X014485Y003655D01*
+X014450Y003655D02*
+X014450Y003605D01*
+X014850Y003771D02*
+X014850Y004164D01*
+X015300Y004164D01*
+X016291Y004164D01*
+X016400Y004055D01*
+X015850Y003855D02*
+X015737Y003968D01*
+X015300Y003968D01*
+X015300Y003771D02*
+X014850Y003771D01*
+X014500Y004305D02*
+X014950Y004755D01*
+X015300Y004755D01*
+X015300Y004558D02*
+X015897Y004558D01*
+X016072Y004733D01*
+X016100Y004705D01*
+X016100Y004755D01*
+X016100Y004761D02*
+X016072Y004733D01*
+X015836Y004737D02*
+X016709Y004737D01*
+X016712Y004729D02*
+X016800Y004641D01*
+X015829Y004641D01*
+X015836Y004658D01*
+X015836Y004852D01*
+X015835Y004853D01*
+X015836Y004855D01*
+X015836Y004869D01*
+X016654Y004869D01*
+X016712Y004729D01*
+X016676Y004815D02*
+X015836Y004815D01*
+X015836Y004658D02*
+X016783Y004658D01*
+X017050Y004955D02*
+X016856Y005149D01*
+X015300Y005149D01*
+X015300Y004952D02*
+X014503Y004952D01*
+X014500Y004955D01*
+X014535Y004955D01*
+X013865Y004955D02*
+X013850Y004940D01*
+X013850Y005505D01*
+X013250Y005690D02*
+X013235Y005690D01*
+X013200Y005655D01*
+X013165Y005690D01*
+X012650Y005690D01*
+X012650Y005655D01*
+X012350Y005955D01*
+X012035Y005955D01*
+X012035Y005990D01*
+X012050Y006005D01*
+X012050Y008505D01*
+X012100Y008555D01*
+X012100Y008855D01*
+X012350Y009105D01*
+X012950Y009105D01*
+X013068Y009223D01*
+X013068Y009605D01*
+X012812Y009605D02*
+X012812Y009917D01*
+X012900Y010005D01*
+X013000Y010005D01*
+X013100Y010105D01*
+X013100Y010455D01*
+X012900Y010655D01*
+X012700Y010655D01*
+X012200Y010155D01*
+X012150Y010155D01*
+X012556Y010061D02*
+X012750Y010255D01*
+X012556Y010061D02*
+X012556Y009605D01*
+X011790Y008780D02*
+X011790Y008609D01*
+X011770Y008561D01*
+X011770Y007135D01*
+X011737Y007214D01*
+X011659Y007292D01*
+X011474Y007477D01*
+X011371Y007520D01*
+X011342Y007520D01*
+X011320Y007572D01*
+X011252Y007640D01*
+X011164Y007676D01*
+X010636Y007676D01*
+X010575Y007651D01*
+X010514Y007676D01*
+X009986Y007676D01*
+X009925Y007651D01*
+X009864Y007676D01*
+X009336Y007676D01*
+X009275Y007651D01*
+X009214Y007676D01*
+X008686Y007676D01*
+X008680Y007674D01*
+X008680Y007707D01*
+X008736Y007684D01*
+X009264Y007684D01*
+X009352Y007720D01*
+X009416Y007784D01*
+X009610Y007784D01*
+X009610Y008080D01*
+X009690Y008080D01*
+X009690Y007784D01*
+X009885Y007784D01*
+X009921Y007793D01*
+X009952Y007811D01*
+X009979Y007838D01*
+X009997Y007869D01*
+X010007Y007905D01*
+X010007Y008080D01*
+X009690Y008080D01*
+X009690Y008160D01*
+X010007Y008160D01*
+X010007Y008336D01*
+X009997Y008371D01*
+X009990Y008384D01*
+X010002Y008389D01*
+X010070Y008457D01*
+X010107Y008545D01*
+X010107Y009034D01*
+X010070Y009122D01*
+X010002Y009190D01*
+X009930Y009220D01*
+X009930Y009821D01*
+X009988Y009879D01*
+X010049Y010026D01*
+X010049Y010184D01*
+X010048Y010185D01*
+X010567Y010185D01*
+X010790Y009962D01*
+X010790Y009680D01*
+X010710Y009680D01*
+X010710Y009976D01*
+X010515Y009976D01*
+X010479Y009967D01*
+X010448Y009949D01*
+X010421Y009922D01*
+X010403Y009891D01*
+X010393Y009855D01*
+X010393Y009680D01*
+X010710Y009680D01*
+X010710Y009600D01*
+X010393Y009600D01*
+X010393Y009424D01*
+X010403Y009389D01*
+X010410Y009376D01*
+X010398Y009371D01*
+X010330Y009303D01*
+X010293Y009215D01*
+X010293Y008726D01*
+X010330Y008638D01*
+X010361Y008607D01*
+X010351Y008584D01*
+X010351Y008426D01*
+X010039Y008426D01*
+X010003Y008348D02*
+X010384Y008348D01*
+X010412Y008279D02*
+X010524Y008167D01*
+X010671Y008106D01*
+X010829Y008106D01*
+X010976Y008167D01*
+X011088Y008279D01*
+X011149Y008426D01*
+X011770Y008426D01*
+X011770Y008348D02*
+X011116Y008348D01*
+X011149Y008426D02*
+X011149Y008584D01*
+X011139Y008607D01*
+X011170Y008638D01*
+X011207Y008726D01*
+X011207Y009215D01*
+X011170Y009303D01*
+X011102Y009371D01*
+X011090Y009376D01*
+X011097Y009389D01*
+X011107Y009424D01*
+X011107Y009600D01*
+X010790Y009600D01*
+X010790Y009680D01*
+X011073Y009680D01*
+X011293Y009459D01*
+X011293Y009245D01*
+X011330Y009157D01*
+X011398Y009089D01*
+X011410Y009084D01*
+X011403Y009071D01*
+X011393Y009036D01*
+X011393Y008860D01*
+X011710Y008860D01*
+X011710Y008780D01*
+X011790Y008780D01*
+X011790Y008740D02*
+X011710Y008740D01*
+X011710Y008780D02*
+X011710Y008484D01*
+X011515Y008484D01*
+X011479Y008493D01*
+X011448Y008511D01*
+X011421Y008538D01*
+X011403Y008569D01*
+X011393Y008605D01*
+X011393Y008780D01*
+X011710Y008780D01*
+X011710Y008819D02*
+X011207Y008819D01*
+X011207Y008897D02*
+X011393Y008897D01*
+X011393Y008976D02*
+X011207Y008976D01*
+X011207Y009054D02*
+X011398Y009054D01*
+X011354Y009133D02*
+X011207Y009133D01*
+X011207Y009211D02*
+X011308Y009211D01*
+X011293Y009290D02*
+X011176Y009290D01*
+X011105Y009368D02*
+X011293Y009368D01*
+X011293Y009447D02*
+X011107Y009447D01*
+X011107Y009525D02*
+X011227Y009525D01*
+X011149Y009604D02*
+X010790Y009604D01*
+X010790Y009682D02*
+X010710Y009682D01*
+X010710Y009604D02*
+X009930Y009604D01*
+X009930Y009682D02*
+X010393Y009682D01*
+X010393Y009761D02*
+X009930Y009761D01*
+X009948Y009839D02*
+X010393Y009839D01*
+X010419Y009918D02*
+X010004Y009918D01*
+X010036Y009996D02*
+X010756Y009996D01*
+X010790Y009918D02*
+X010710Y009918D01*
+X010710Y009839D02*
+X010790Y009839D01*
+X010790Y009761D02*
+X010710Y009761D01*
+X010678Y010075D02*
+X010049Y010075D01*
+X010049Y010153D02*
+X010599Y010153D01*
+X009650Y010105D02*
+X009650Y008790D01*
+X009035Y008790D01*
+X009000Y008755D01*
+X009000Y008790D01*
+X008543Y008819D02*
+X008446Y008819D01*
+X008449Y008826D02*
+X008449Y008984D01*
+X008388Y009131D01*
+X008276Y009243D01*
+X008129Y009304D01*
+X007971Y009304D01*
+X007824Y009243D01*
+X007712Y009131D01*
+X007682Y009059D01*
+X007628Y009113D01*
+X007540Y009150D01*
+X007316Y009150D01*
+X007228Y009113D01*
+X007172Y009057D01*
+X007116Y009113D01*
+X007028Y009150D01*
+X006804Y009150D01*
+X006716Y009113D01*
+X006649Y009046D01*
+X006612Y008957D01*
+X006612Y008312D01*
+X006390Y008312D01*
+X006302Y008275D01*
+X006300Y008273D01*
+X006298Y008275D01*
+X006210Y008312D01*
+X005857Y008312D01*
+X005776Y008393D01*
+X005629Y008454D01*
+X005471Y008454D01*
+X005465Y008451D01*
+X005465Y008549D01*
+X005471Y008538D01*
+X005498Y008511D01*
+X005529Y008493D01*
+X005565Y008484D01*
+X005760Y008484D01*
+X005760Y008780D01*
+X005840Y008780D01*
+X005840Y008484D01*
+X006035Y008484D01*
+X006071Y008493D01*
+X006102Y008511D01*
+X006129Y008538D01*
+X006147Y008569D01*
+X006157Y008605D01*
+X006157Y008780D01*
+X005840Y008780D01*
+X005840Y008860D01*
+X006157Y008860D01*
+X006157Y009036D01*
+X006147Y009071D01*
+X006140Y009084D01*
+X006152Y009089D01*
+X006198Y009135D01*
+X006214Y009135D01*
+X006331Y009184D01*
+X006612Y009465D01*
+X006612Y009453D01*
+X006649Y009364D01*
+X006716Y009297D01*
+X006804Y009260D01*
+X007028Y009260D01*
+X007044Y009267D01*
+X007060Y009260D01*
+X007284Y009260D01*
+X007300Y009267D01*
+X007316Y009260D01*
+X007540Y009260D01*
+X007628Y009297D01*
+X007691Y009360D01*
+X007766Y009360D01*
+X007802Y009370D01*
+X007834Y009388D01*
+X007860Y009414D01*
+X007878Y009446D01*
+X007888Y009482D01*
+X007888Y009855D01*
+X007888Y009891D01*
+X007971Y009856D01*
+X008070Y009856D01*
+X008070Y009849D01*
+X008113Y009746D01*
+X008501Y009358D01*
+X008501Y009276D01*
+X008562Y009129D01*
+X008577Y009114D01*
+X008543Y009034D01*
+X008543Y008545D01*
+X008580Y008457D01*
+X008582Y008455D01*
+X008580Y008453D01*
+X008558Y008400D01*
+X008457Y008358D01*
+X008346Y008247D01*
+X008330Y008262D01*
+X008330Y008621D01*
+X008388Y008679D01*
+X008449Y008826D01*
+X008449Y008897D02*
+X008543Y008897D01*
+X008543Y008976D02*
+X008449Y008976D01*
+X008420Y009054D02*
+X008552Y009054D01*
+X008561Y009133D02*
+X008386Y009133D01*
+X008308Y009211D02*
+X008528Y009211D01*
+X008501Y009290D02*
+X008164Y009290D01*
+X008050Y009405D02*
+X007684Y009405D01*
+X007684Y009205D01*
+X007250Y009205D01*
+X007172Y009127D01*
+X007172Y008555D01*
+X006916Y008555D02*
+X006916Y008171D01*
+X006600Y007855D01*
+X006635Y007855D01*
+X006612Y008348D02*
+X005821Y008348D01*
+X005696Y008426D02*
+X006612Y008426D01*
+X006612Y008505D02*
+X006090Y008505D01*
+X006151Y008583D02*
+X006612Y008583D01*
+X006612Y008662D02*
+X006157Y008662D01*
+X006157Y008740D02*
+X006612Y008740D01*
+X006612Y008819D02*
+X005840Y008819D01*
+X005800Y008820D02*
+X005785Y008820D01*
+X005450Y009155D01*
+X005200Y009155D01*
+X005135Y009220D01*
+X005135Y009305D01*
+X005135Y009940D01*
+X005150Y009955D01*
+X005135Y009955D01*
+X005135Y010620D01*
+X005100Y010655D01*
+X005135Y010655D01*
+X005150Y010655D01*
+X005135Y010670D01*
+X005135Y011305D01*
+X005175Y011331D02*
+X006193Y011331D01*
+X006193Y011254D02*
+X006071Y011254D01*
+X005924Y011193D01*
+X005812Y011081D01*
+X005751Y010934D01*
+X005751Y010776D01*
+X005812Y010629D01*
+X005861Y010580D01*
+X005762Y010481D01*
+X005701Y010334D01*
+X005701Y010309D01*
+X005619Y010226D01*
+X005529Y010136D01*
+X005480Y010019D01*
+X005480Y009903D01*
+X005471Y009900D01*
+X005471Y009915D01*
+X005175Y009915D01*
+X005175Y009995D01*
+X005471Y009995D01*
+X005471Y010190D01*
+X005462Y010226D01*
+X005444Y010257D01*
+X005417Y010284D01*
+X005386Y010302D01*
+X005374Y010305D01*
+X005386Y010308D01*
+X005417Y010326D01*
+X005444Y010353D01*
+X005462Y010384D01*
+X005471Y010420D01*
+X005471Y010615D01*
+X005175Y010615D01*
+X005175Y010695D01*
+X005471Y010695D01*
+X005471Y010890D01*
+X005462Y010926D01*
+X005444Y010957D01*
+X005421Y010980D01*
+X005444Y011003D01*
+X005462Y011034D01*
+X005471Y011070D01*
+X005471Y011265D01*
+X005175Y011265D01*
+X005175Y011345D01*
+X005471Y011345D01*
+X005471Y011540D01*
+X005462Y011576D01*
+X005444Y011606D01*
+X005479Y011606D01*
+X005626Y011667D01*
+X005684Y011725D01*
+X005844Y011725D01*
+X005880Y011638D01*
+X005948Y011570D01*
+X006036Y011534D01*
+X006193Y011534D01*
+X006193Y011254D01*
+X006067Y011252D02*
+X005471Y011252D01*
+X005471Y011174D02*
+X005905Y011174D01*
+X005826Y011095D02*
+X005471Y011095D01*
+X005452Y011017D02*
+X005785Y011017D01*
+X005753Y010938D02*
+X005455Y010938D01*
+X005471Y010860D02*
+X005751Y010860D01*
+X005751Y010781D02*
+X005471Y010781D01*
+X005471Y010703D02*
+X005782Y010703D01*
+X005817Y010624D02*
+X005175Y010624D01*
+X005175Y010615D02*
+X005095Y010615D01*
+X005095Y010298D01*
+X005095Y009995D01*
+X005175Y009995D01*
+X005175Y010615D01*
+X005175Y010546D02*
+X005095Y010546D01*
+X005095Y010467D02*
+X005175Y010467D01*
+X005175Y010389D02*
+X005095Y010389D01*
+X005095Y010310D02*
+X005175Y010310D01*
+X005175Y010232D02*
+X005095Y010232D01*
+X005095Y010153D02*
+X005175Y010153D01*
+X005175Y010075D02*
+X005095Y010075D01*
+X005095Y009996D02*
+X005175Y009996D01*
+X005175Y009918D02*
+X005480Y009918D01*
+X005471Y009996D02*
+X005480Y009996D01*
+X005471Y010075D02*
+X005503Y010075D01*
+X005471Y010153D02*
+X005545Y010153D01*
+X005624Y010232D02*
+X005459Y010232D01*
+X005389Y010310D02*
+X005701Y010310D01*
+X005724Y010389D02*
+X005463Y010389D01*
+X005471Y010467D02*
+X005756Y010467D01*
+X005827Y010546D02*
+X005471Y010546D01*
+X005175Y010695D02*
+X005095Y010695D01*
+X005095Y011265D01*
+X005175Y011265D01*
+X005175Y010948D01*
+X005175Y010695D01*
+X005175Y010703D02*
+X005095Y010703D01*
+X005095Y010781D02*
+X005175Y010781D01*
+X005175Y010860D02*
+X005095Y010860D01*
+X005095Y010938D02*
+X005175Y010938D01*
+X005175Y011017D02*
+X005095Y011017D01*
+X005095Y011095D02*
+X005175Y011095D01*
+X005175Y011174D02*
+X005095Y011174D01*
+X005095Y011252D02*
+X005175Y011252D01*
+X005175Y011345D02*
+X005095Y011345D01*
+X005095Y011662D01*
+X004919Y011662D01*
+X004884Y011652D01*
+X004871Y011645D01*
+X004866Y011657D01*
+X004833Y011690D01*
+X004861Y011702D01*
+X004928Y011769D01*
+X004965Y011857D01*
+X004965Y012653D01*
+X004964Y012656D01*
+X005029Y012656D01*
+X005150Y012706D01*
+X005271Y012656D01*
+X005429Y012656D01*
+X005576Y012717D01*
+X005688Y012829D01*
+X005720Y012906D01*
+X005794Y012875D01*
+X005843Y012875D01*
+X005843Y012395D01*
+X005880Y012307D01*
+X005882Y012305D01*
+X005880Y012303D01*
+X005872Y012285D01*
+X005684Y012285D01*
+X005626Y012343D01*
+X005479Y012404D01*
+X005321Y012404D01*
+X005174Y012343D01*
+X005062Y012231D01*
+X005001Y012084D01*
+X005001Y011926D01*
+X005062Y011779D01*
+X005174Y011667D01*
+X005187Y011662D01*
+X005175Y011662D01*
+X005175Y011345D01*
+X005175Y011409D02*
+X005095Y011409D01*
+X005095Y011488D02*
+X005175Y011488D01*
+X005175Y011566D02*
+X005095Y011566D01*
+X005095Y011645D02*
+X005175Y011645D01*
+X005118Y011723D02*
+X004882Y011723D01*
+X004942Y011802D02*
+X005053Y011802D01*
+X005020Y011880D02*
+X004965Y011880D01*
+X004965Y011959D02*
+X005001Y011959D01*
+X005001Y012037D02*
+X004965Y012037D01*
+X004965Y012116D02*
+X005014Y012116D01*
+X005047Y012194D02*
+X004965Y012194D01*
+X004965Y012273D02*
+X005104Y012273D01*
+X005193Y012351D02*
+X004965Y012351D01*
+X004965Y012430D02*
+X005843Y012430D01*
+X005843Y012508D02*
+X004965Y012508D01*
+X004965Y012587D02*
+X005843Y012587D01*
+X005843Y012665D02*
+X005451Y012665D01*
+X005602Y012744D02*
+X005843Y012744D01*
+X005843Y012822D02*
+X005681Y012822D01*
+X005718Y012901D02*
+X005733Y012901D01*
+X005850Y013155D02*
+X006300Y013155D01*
+X006300Y013655D01*
+X006250Y013705D01*
+X006274Y013705D01*
+X006500Y013755D02*
+X006500Y014255D01*
+X006900Y014255D01*
+X006900Y014755D01*
+X007261Y014925D02*
+X007984Y014925D01*
+X008013Y014896D01*
+X008091Y014818D01*
+X008194Y014775D01*
+X008606Y014775D01*
+X008709Y014818D01*
+X008751Y014860D01*
+X008751Y014826D01*
+X008812Y014679D01*
+X008870Y014621D01*
+X008870Y014485D01*
+X008494Y014485D01*
+X008391Y014442D01*
+X008344Y014395D01*
+X008288Y014531D01*
+X008176Y014643D01*
+X008029Y014704D01*
+X007871Y014704D01*
+X007724Y014643D01*
+X007625Y014544D01*
+X007526Y014643D01*
+X007379Y014704D01*
+X007299Y014704D01*
+X007299Y014834D01*
+X007261Y014925D01*
+X007287Y014863D02*
+X008046Y014863D01*
+X008171Y014785D02*
+X007299Y014785D01*
+X007299Y014706D02*
+X008801Y014706D01*
+X008768Y014785D02*
+X008629Y014785D01*
+X008864Y014628D02*
+X008191Y014628D01*
+X008270Y014549D02*
+X008870Y014549D01*
+X008459Y014471D02*
+X008313Y014471D01*
+X008550Y014205D02*
+X008950Y014205D01*
+X008950Y013755D01*
+X009000Y013705D01*
+X008974Y013705D01*
+X009230Y013705D02*
+X009230Y013675D01*
+X009250Y013655D01*
+X009250Y013205D01*
+X009650Y013205D01*
+X009800Y013055D01*
+X009900Y013055D01*
+X009741Y013296D02*
+X009650Y013205D01*
+X009741Y013296D02*
+X009741Y013705D01*
+X009741Y013746D01*
+X009750Y013755D01*
+X009485Y013705D02*
+X009485Y014070D01*
+X009350Y014205D01*
+X009150Y014205D01*
+X009150Y014905D01*
+X009430Y014621D02*
+X009488Y014679D01*
+X009549Y014826D01*
+X009549Y014984D01*
+X009488Y015131D01*
+X009444Y015175D01*
+X009956Y015175D01*
+X009973Y015182D01*
+X009973Y014974D01*
+X009591Y014592D01*
+X009513Y014514D01*
+X009487Y014451D01*
+X009430Y014475D01*
+X009430Y014621D01*
+X009436Y014628D02*
+X009627Y014628D01*
+X009705Y014706D02*
+X009499Y014706D01*
+X009532Y014785D02*
+X009784Y014785D01*
+X009862Y014863D02*
+X009549Y014863D01*
+X009549Y014942D02*
+X009941Y014942D01*
+X009973Y015020D02*
+X009534Y015020D01*
+X009501Y015099D02*
+X009973Y015099D01*
+X009961Y015177D02*
+X009973Y015177D01*
+X009500Y015455D02*
+X009000Y015455D01*
+X008974Y015481D01*
+X008974Y016105D01*
+X009500Y016105D02*
+X009500Y016105D01*
+X009650Y016605D02*
+X009200Y016605D01*
+X007999Y017375D02*
+X007803Y017375D01*
+X007857Y017454D02*
+X007945Y017454D01*
+X007927Y017532D02*
+X007875Y017532D01*
+X007875Y017611D02*
+X007927Y017611D01*
+X007927Y017689D02*
+X007875Y017689D01*
+X007869Y017768D02*
+X007933Y017768D01*
+X007970Y017846D02*
+X007832Y017846D01*
+X007775Y017251D02*
+X007340Y017251D01*
+X006800Y016605D02*
+X006250Y016605D01*
+X006274Y016581D01*
+X006274Y016105D01*
+X006018Y016105D02*
+X006018Y015537D01*
+X006100Y015455D01*
+X006200Y015455D01*
+X006200Y015205D01*
+X005801Y015207D02*
+X005801Y015126D01*
+X005862Y014979D01*
+X005974Y014867D01*
+X006004Y014855D01*
+X005884Y014735D01*
+X005094Y014735D01*
+X005138Y014779D01*
+X005199Y014926D01*
+X005199Y015084D01*
+X005138Y015231D01*
+X005026Y015343D01*
+X004879Y015404D01*
+X004721Y015404D01*
+X004574Y015343D01*
+X004516Y015285D01*
+X003806Y015285D01*
+X003806Y015365D01*
+X004595Y015365D01*
+X004595Y015746D01*
+X004674Y015667D01*
+X004821Y015606D01*
+X004979Y015606D01*
+X005038Y015631D01*
+X005043Y015626D01*
+X005131Y015589D01*
+X005201Y015589D01*
+X005201Y015476D01*
+X005262Y015329D01*
+X005374Y015217D01*
+X005521Y015156D01*
+X005679Y015156D01*
+X005801Y015207D01*
+X005801Y015177D02*
+X005729Y015177D01*
+X005813Y015099D02*
+X005193Y015099D01*
+X005199Y015020D02*
+X005845Y015020D01*
+X005900Y014942D02*
+X005199Y014942D01*
+X005173Y014863D02*
+X005984Y014863D01*
+X005934Y014785D02*
+X005140Y014785D01*
+X005160Y015177D02*
+X005470Y015177D01*
+X005336Y015256D02*
+X005113Y015256D01*
+X005035Y015334D02*
+X005260Y015334D01*
+X005227Y015413D02*
+X004595Y015413D01*
+X004595Y015491D02*
+X005201Y015491D01*
+X005201Y015570D02*
+X004595Y015570D01*
+X004595Y015648D02*
+X004720Y015648D01*
+X004615Y015727D02*
+X004595Y015727D01*
+X004565Y015334D02*
+X003806Y015334D01*
+X003726Y015334D02*
+X002034Y015334D01*
+X002034Y015365D02*
+X002823Y015365D01*
+X002823Y016032D01*
+X002814Y016068D01*
+X002795Y016100D01*
+X002769Y016126D01*
+X002738Y016144D01*
+X002702Y016154D01*
+X002034Y016154D01*
+X002034Y015365D01*
+X001954Y015365D01*
+X001954Y015285D01*
+X001166Y015285D01*
+X001166Y014617D01*
+X001175Y014582D01*
+X001193Y014551D01*
+X001174Y014543D01*
+X001062Y014431D01*
+X001001Y014284D01*
+X001001Y014162D01*
+X000948Y014140D01*
+X000880Y014072D01*
+X000843Y013984D01*
+X000843Y013495D01*
+X000880Y013407D01*
+X000882Y013405D01*
+X000880Y013403D01*
+X000843Y013315D01*
+X000843Y012826D01*
+X000880Y012738D01*
+X000948Y012670D01*
+X001036Y012634D01*
+X001185Y012634D01*
+X001185Y012534D01*
+X001126Y012593D01*
+X000979Y012654D01*
+X000821Y012654D01*
+X000700Y012604D01*
+X000700Y020055D01*
+X001167Y020055D01*
+X001166Y020048D01*
+X001166Y019380D01*
+X001954Y019380D01*
+X001954Y019300D01*
+X002034Y019300D01*
+X002034Y018511D01*
+X002702Y018511D01*
+X002738Y018521D01*
+X002769Y018539D01*
+X002795Y018565D01*
+X002814Y018597D01*
+X002823Y018633D01*
+X002823Y019300D01*
+X002034Y019300D01*
+X002034Y019380D01*
+X002823Y019380D01*
+X002823Y020048D01*
+X002822Y020055D01*
+X002939Y020055D01*
+X002937Y020048D01*
+X002937Y019380D01*
+X003726Y019380D01*
+X003726Y019300D01*
+X003806Y019300D01*
+X003806Y018511D01*
+X004474Y018511D01*
+X004509Y018521D01*
+X004541Y018539D01*
+X004567Y018565D01*
+X004586Y018597D01*
+X004595Y018633D01*
+X004595Y019300D01*
+X003806Y019300D01*
+X003806Y019380D01*
+X004595Y019380D01*
+X004595Y020048D01*
+X004593Y020055D01*
+X006684Y020055D01*
+X006648Y020040D01*
+X006630Y020022D01*
+X006618Y020025D01*
+X006225Y020025D01*
+X006225Y019780D01*
+X006175Y019780D01*
+X006175Y020025D01*
+X005782Y020025D01*
+X005746Y020015D01*
+X005714Y019997D01*
+X005688Y019971D01*
+X005670Y019939D01*
+X005660Y019903D01*
+X005660Y019780D01*
+X006175Y019780D01*
+X006175Y019730D01*
+X006225Y019730D01*
+X006225Y019280D01*
+X006175Y019280D01*
+X006175Y019525D01*
+X006175Y019730D01*
+X005660Y019730D01*
+X005660Y019607D01*
+X005670Y019571D01*
+X005688Y019539D01*
+X005714Y019513D01*
+X005728Y019505D01*
+X005714Y019497D01*
+X005688Y019471D01*
+X005670Y019439D01*
+X005660Y019403D01*
+X005660Y019280D01*
+X006175Y019280D01*
+X006175Y019230D01*
+X005660Y019230D01*
+X005660Y019107D01*
+X005665Y019089D01*
+X005664Y019088D01*
+X005651Y019075D01*
+X005636Y019075D01*
+X005557Y019042D01*
+X005557Y019200D01*
+X005240Y019200D01*
+X005240Y019280D01*
+X005160Y019280D01*
+X005160Y019576D01*
+X004965Y019576D01*
+X004929Y019567D01*
+X004898Y019549D01*
+X004871Y019522D01*
+X004853Y019491D01*
+X004843Y019455D01*
+X004843Y019280D01*
+X005160Y019280D01*
+X005160Y019200D01*
+X004843Y019200D01*
+X004843Y019024D01*
+X004853Y018989D01*
+X004860Y018976D01*
+X004848Y018971D01*
+X004780Y018903D01*
+X004743Y018815D01*
+X004743Y018326D01*
+X004761Y018282D01*
+X004232Y018282D01*
+X004188Y018301D01*
+X003191Y018301D01*
+X003117Y018375D01*
+X002963Y018439D01*
+X002797Y018439D01*
+X002644Y018375D01*
+X002527Y018258D01*
+X002463Y018105D01*
+X002463Y017939D01*
+X002527Y017785D01*
+X002644Y017668D01*
+X002797Y017604D01*
+X002963Y017604D01*
+X002995Y017617D01*
+X002995Y017501D01*
+X002999Y017490D01*
+X002995Y017479D01*
+X002995Y017186D01*
+X002999Y017175D01*
+X002995Y017164D01*
+X002995Y017048D01*
+X002963Y017061D01*
+X002797Y017061D01*
+X002644Y016997D01*
+X002527Y016880D01*
+X002463Y016727D01*
+X002463Y016561D01*
+X002527Y016407D01*
+X002644Y016290D01*
+X002797Y016226D01*
+X002963Y016226D01*
+X003117Y016290D01*
+X003234Y016407D01*
+X003258Y016464D01*
+X003678Y016464D01*
+X003678Y016679D01*
+X003697Y016679D01*
+X003697Y016494D01*
+X003651Y016384D01*
+X003651Y016226D01*
+X003681Y016154D01*
+X003059Y016154D01*
+X003023Y016144D01*
+X002991Y016126D01*
+X002965Y016100D01*
+X002947Y016068D01*
+X002937Y016032D01*
+X002937Y015365D01*
+X003726Y015365D01*
+X003726Y015285D01*
+X002937Y015285D01*
+X002937Y014735D01*
+X002823Y014735D01*
+X002823Y015285D01*
+X002034Y015285D01*
+X002034Y015365D01*
+X002034Y015413D02*
+X001954Y015413D01*
+X001954Y015365D02*
+X001954Y016154D01*
+X001287Y016154D01*
+X001251Y016144D01*
+X001220Y016126D01*
+X001193Y016100D01*
+X001175Y016068D01*
+X001166Y016032D01*
+X001166Y015365D01*
+X001954Y015365D01*
+X001954Y015334D02*
+X000700Y015334D01*
+X000700Y015256D02*
+X001166Y015256D01*
+X001166Y015177D02*
+X000700Y015177D01*
+X000700Y015099D02*
+X001166Y015099D01*
+X001166Y015020D02*
+X000700Y015020D01*
+X000700Y014942D02*
+X001166Y014942D01*
+X001166Y014863D02*
+X000700Y014863D01*
+X000700Y014785D02*
+X001166Y014785D01*
+X001166Y014706D02*
+X000700Y014706D01*
+X000700Y014628D02*
+X001166Y014628D01*
+X001189Y014549D02*
+X000700Y014549D01*
+X000700Y014471D02*
+X001102Y014471D01*
+X001046Y014392D02*
+X000700Y014392D01*
+X000700Y014314D02*
+X001013Y014314D01*
+X001001Y014235D02*
+X000700Y014235D01*
+X000700Y014157D02*
+X000988Y014157D01*
+X000886Y014078D02*
+X000700Y014078D01*
+X000700Y014000D02*
+X000850Y014000D01*
+X000843Y013921D02*
+X000700Y013921D01*
+X000700Y013843D02*
+X000843Y013843D01*
+X000843Y013764D02*
+X000700Y013764D01*
+X000700Y013686D02*
+X000843Y013686D01*
+X000843Y013607D02*
+X000700Y013607D01*
+X000700Y013529D02*
+X000843Y013529D01*
+X000862Y013450D02*
+X000700Y013450D01*
+X000700Y013372D02*
+X000867Y013372D01*
+X000843Y013293D02*
+X000700Y013293D01*
+X000700Y013215D02*
+X000843Y013215D01*
+X000843Y013136D02*
+X000700Y013136D01*
+X000700Y013058D02*
+X000843Y013058D01*
+X000843Y012979D02*
+X000700Y012979D01*
+X000700Y012901D02*
+X000843Y012901D01*
+X000845Y012822D02*
+X000700Y012822D01*
+X000700Y012744D02*
+X000878Y012744D01*
+X000960Y012665D02*
+X000700Y012665D01*
+X001132Y012587D02*
+X001185Y012587D01*
+X001300Y013070D02*
+X001915Y013070D01*
+X001950Y013105D01*
+X001950Y013070D01*
+X001950Y012305D01*
+X002000Y012255D01*
+X002100Y012255D01*
+X002050Y012255D01*
+X002100Y012205D01*
+X002900Y012205D01*
+X003157Y011948D01*
+X003157Y009927D01*
+X002877Y010276D02*
+X002618Y010276D01*
+X002529Y010239D01*
+X002462Y010172D01*
+X002425Y010083D01*
+X002425Y009771D01*
+X002426Y009770D01*
+X002425Y009768D01*
+X002425Y009456D01*
+X002426Y009455D01*
+X002425Y009454D01*
+X002425Y009142D01*
+X002426Y009140D01*
+X002425Y009139D01*
+X002425Y008827D01*
+X002462Y008738D01*
+X002529Y008671D01*
+X002618Y008634D01*
+X002925Y008634D01*
+X002927Y008632D01*
+X002294Y008632D01*
+X002354Y008778D01*
+X002354Y008951D01*
+X002288Y009112D01*
+X002165Y009235D01*
+X002004Y009301D01*
+X001830Y009301D01*
+X001670Y009235D01*
+X001547Y009112D01*
+X001480Y008951D01*
+X001480Y008778D01*
+X001541Y008632D01*
+X001456Y008632D01*
+X001368Y008595D01*
+X001300Y008528D01*
+X001264Y008440D01*
+X001264Y007439D01*
+X001300Y007351D01*
+X001366Y007285D01*
+X001362Y007281D01*
+X001301Y007134D01*
+X001301Y007052D01*
+X001263Y007014D01*
+X001234Y006945D01*
+X000727Y006945D01*
+X000700Y006934D01*
+X000700Y011906D01*
+X000821Y011856D01*
+X000979Y011856D01*
+X001126Y011917D01*
+X001185Y011976D01*
+X001185Y011857D01*
+X001222Y011769D01*
+X001289Y011702D01*
+X001377Y011665D01*
+X002823Y011665D01*
+X002877Y011688D01*
+X002877Y011664D01*
+X001456Y011664D01*
+X001368Y011627D01*
+X001300Y011559D01*
+X001264Y011471D01*
+X001264Y010470D01*
+X001300Y010382D01*
+X001368Y010315D01*
+X001456Y010278D01*
+X001541Y010278D01*
+X001480Y010132D01*
+X001480Y009959D01*
+X001547Y009798D01*
+X001670Y009675D01*
+X001830Y009609D01*
+X002004Y009609D01*
+X002165Y009675D01*
+X002288Y009798D01*
+X002354Y009959D01*
+X002354Y010132D01*
+X002294Y010278D01*
+X002877Y010278D01*
+X002877Y010276D01*
+X002522Y010232D02*
+X002313Y010232D01*
+X002346Y010153D02*
+X002454Y010153D01*
+X002425Y010075D02*
+X002354Y010075D01*
+X002354Y009996D02*
+X002425Y009996D01*
+X002425Y009918D02*
+X002337Y009918D01*
+X002305Y009839D02*
+X002425Y009839D01*
+X002425Y009761D02*
+X002250Y009761D01*
+X002172Y009682D02*
+X002425Y009682D01*
+X002425Y009604D02*
+X000700Y009604D01*
+X000700Y009682D02*
+X001663Y009682D01*
+X001585Y009761D02*
+X000700Y009761D01*
+X000700Y009839D02*
+X001530Y009839D01*
+X001498Y009918D02*
+X000700Y009918D01*
+X000700Y009996D02*
+X001480Y009996D01*
+X001480Y010075D02*
+X000700Y010075D01*
+X000700Y010153D02*
+X001489Y010153D01*
+X001522Y010232D02*
+X000700Y010232D01*
+X000700Y010310D02*
+X001379Y010310D01*
+X001298Y010389D02*
+X000700Y010389D01*
+X000700Y010467D02*
+X001265Y010467D01*
+X001264Y010546D02*
+X000700Y010546D01*
+X000700Y010624D02*
+X001264Y010624D01*
+X001264Y010703D02*
+X000700Y010703D01*
+X000700Y010781D02*
+X001264Y010781D01*
+X001264Y010860D02*
+X000700Y010860D01*
+X000700Y010938D02*
+X001264Y010938D01*
+X001264Y011017D02*
+X000700Y011017D01*
+X000700Y011095D02*
+X001264Y011095D01*
+X001264Y011174D02*
+X000700Y011174D01*
+X000700Y011252D02*
+X001264Y011252D01*
+X001264Y011331D02*
+X000700Y011331D01*
+X000700Y011409D02*
+X001264Y011409D01*
+X001271Y011488D02*
+X000700Y011488D01*
+X000700Y011566D02*
+X001307Y011566D01*
+X001410Y011645D02*
+X000700Y011645D01*
+X000700Y011723D02*
+X001268Y011723D01*
+X001208Y011802D02*
+X000700Y011802D01*
+X000700Y011880D02*
+X000763Y011880D01*
+X001037Y011880D02*
+X001185Y011880D01*
+X001185Y011959D02*
+X001167Y011959D01*
+X002600Y013055D02*
+X002650Y013005D01*
+X002600Y013055D02*
+X002585Y013070D01*
+X001950Y013070D01*
+X002600Y013055D02*
+X002600Y013070D01*
+X003250Y013070D02*
+X003885Y013070D01*
+X003900Y013055D01*
+X003900Y012405D01*
+X004050Y012255D01*
+X004073Y011665D02*
+X003437Y011665D01*
+X003437Y010790D01*
+X003471Y010804D01*
+X003629Y010804D01*
+X003776Y010743D01*
+X003859Y010660D01*
+X004013Y010814D01*
+X004029Y010829D01*
+X004029Y010919D01*
+X004054Y010980D01*
+X004029Y011041D01*
+X004029Y011569D01*
+X004065Y011657D01*
+X004073Y011665D01*
+X004060Y011645D02*
+X003437Y011645D01*
+X003437Y011566D02*
+X004029Y011566D01*
+X004029Y011488D02*
+X003437Y011488D01*
+X003437Y011409D02*
+X004029Y011409D01*
+X004029Y011331D02*
+X003437Y011331D01*
+X003437Y011252D02*
+X004029Y011252D01*
+X004029Y011174D02*
+X003437Y011174D01*
+X003437Y011095D02*
+X004029Y011095D01*
+X004039Y011017D02*
+X003437Y011017D01*
+X003437Y010938D02*
+X004036Y010938D01*
+X004029Y010860D02*
+X003437Y010860D01*
+X003684Y010781D02*
+X003980Y010781D01*
+X003902Y010703D02*
+X003816Y010703D01*
+X004050Y010455D02*
+X004250Y010655D01*
+X004465Y010655D01*
+X004500Y010655D01*
+X004465Y010690D01*
+X004465Y011305D01*
+X004500Y010655D02*
+X004550Y010605D01*
+X004050Y010455D02*
+X004050Y010305D01*
+X003650Y010305D01*
+X003550Y010405D01*
+X004050Y010305D02*
+X004050Y009905D01*
+X003757Y009612D01*
+X003157Y009612D01*
+X003157Y009298D02*
+X003893Y009298D01*
+X003900Y009305D01*
+X004000Y009305D01*
+X004450Y009305D02*
+X004450Y009255D01*
+X004465Y009270D01*
+X004465Y009955D01*
+X005095Y009915D02*
+X005095Y009662D01*
+X005095Y009345D01*
+X005175Y009345D01*
+X005175Y009915D01*
+X005095Y009915D01*
+X005095Y009839D02*
+X005175Y009839D01*
+X005175Y009761D02*
+X005095Y009761D01*
+X005095Y009682D02*
+X005175Y009682D01*
+X005175Y009604D02*
+X005095Y009604D01*
+X005095Y009525D02*
+X005175Y009525D01*
+X005175Y009447D02*
+X005095Y009447D01*
+X005095Y009368D02*
+X005175Y009368D01*
+X005175Y009265D02*
+X005175Y008948D01*
+X005350Y008948D01*
+X005386Y008958D01*
+X005417Y008976D01*
+X005443Y009002D01*
+X005443Y008860D01*
+X005760Y008860D01*
+X005760Y008780D01*
+X005443Y008780D01*
+X005443Y008605D01*
+X005444Y008604D01*
+X005428Y008641D01*
+X005361Y008708D01*
+X005273Y008745D01*
+X004756Y008745D01*
+X004730Y008771D01*
+X004730Y008857D01*
+X004798Y008885D01*
+X004866Y008953D01*
+X004871Y008965D01*
+X004884Y008958D01*
+X004919Y008948D01*
+X005095Y008948D01*
+X005095Y009265D01*
+X005175Y009265D01*
+X005175Y009211D02*
+X005095Y009211D01*
+X005095Y009133D02*
+X005175Y009133D01*
+X005175Y009054D02*
+X005095Y009054D01*
+X005095Y008976D02*
+X005175Y008976D01*
+X005416Y008976D02*
+X005443Y008976D01*
+X005443Y008897D02*
+X004810Y008897D01*
+X004730Y008819D02*
+X005760Y008819D01*
+X005760Y008740D02*
+X005840Y008740D01*
+X005840Y008662D02*
+X005760Y008662D01*
+X005760Y008583D02*
+X005840Y008583D01*
+X005840Y008505D02*
+X005760Y008505D01*
+X005510Y008505D02*
+X005465Y008505D01*
+X005443Y008662D02*
+X005408Y008662D01*
+X005443Y008740D02*
+X005285Y008740D01*
+X004550Y008555D02*
+X004550Y008055D01*
+X004500Y008005D01*
+X004050Y008005D01*
+X003700Y007655D01*
+X003328Y007798D02*
+X003240Y007798D01*
+X003240Y007720D02*
+X003301Y007720D01*
+X003301Y007734D02*
+X003301Y007576D01*
+X003362Y007429D01*
+X003474Y007317D01*
+X003610Y007261D01*
+X003563Y007214D01*
+X003319Y006970D01*
+X003192Y006970D01*
+X003170Y007022D01*
+X003102Y007090D01*
+X003014Y007126D01*
+X002486Y007126D01*
+X002398Y007090D01*
+X002330Y007022D01*
+X002293Y006934D01*
+X002293Y006876D01*
+X002261Y006908D01*
+X002173Y006945D01*
+X002086Y006945D01*
+X002099Y006976D01*
+X002099Y007134D01*
+X002052Y007246D01*
+X003048Y007246D01*
+X003136Y007283D01*
+X003203Y007351D01*
+X003240Y007439D01*
+X003240Y008377D01*
+X003244Y008375D01*
+X003635Y008375D01*
+X003635Y008054D01*
+X003621Y008054D01*
+X003474Y007993D01*
+X003362Y007881D01*
+X003301Y007734D01*
+X003301Y007641D02*
+X003240Y007641D01*
+X003240Y007563D02*
+X003307Y007563D01*
+X003339Y007484D02*
+X003240Y007484D01*
+X003226Y007406D02*
+X003386Y007406D01*
+X003464Y007327D02*
+X003180Y007327D01*
+X003053Y007249D02*
+X003598Y007249D01*
+X003519Y007170D02*
+X002084Y007170D01*
+X002099Y007092D02*
+X002401Y007092D01*
+X002326Y007013D02*
+X002099Y007013D01*
+X002198Y006935D02*
+X002294Y006935D01*
+X002750Y006690D02*
+X003435Y006690D01*
+X003800Y007055D01*
+X004455Y007055D01*
+X004550Y007055D01*
+X004550Y007225D01*
+X005450Y007225D01*
+X006200Y006850D02*
+X006295Y006850D01*
+X006350Y006905D01*
+X006500Y006755D01*
+X006500Y005705D01*
+X006595Y005610D01*
+X006600Y005610D01*
+X007350Y005255D02*
+X007750Y005655D01*
+X007750Y006105D01*
+X007800Y006155D01*
+X007800Y006505D01*
+X007735Y006570D01*
+X007650Y006570D01*
+X007615Y006570D01*
+X007600Y006555D01*
+X007610Y006542D02*
+X007040Y006542D01*
+X007040Y006530D02*
+X007040Y006610D01*
+X007610Y006610D01*
+X007610Y006530D01*
+X007293Y006530D01*
+X007040Y006530D01*
+X007000Y006570D02*
+X006965Y006570D01*
+X006950Y006555D01*
+X006960Y006542D02*
+X006780Y006542D01*
+X006780Y006530D02*
+X006780Y006578D01*
+X006790Y006602D01*
+X006790Y006610D01*
+X006960Y006610D01*
+X006960Y006530D01*
+X006780Y006530D01*
+X006965Y006570D02*
+X007650Y006570D01*
+X007690Y006542D02*
+X007843Y006542D01*
+X007843Y006530D02*
+X007690Y006530D01*
+X007690Y006610D01*
+X007843Y006610D01*
+X007843Y006530D01*
+X008300Y006570D02*
+X008985Y006570D01*
+X009000Y006555D01*
+X008985Y006570D02*
+X008950Y006570D01*
+X009600Y006570D02*
+X009600Y005990D01*
+X009600Y005955D01*
+X009300Y005605D02*
+X009600Y005305D01*
+X009600Y005320D01*
+X010015Y005320D01*
+X010150Y005455D01*
+X010150Y006405D01*
+X010300Y006555D01*
+X010285Y006570D01*
+X010250Y006570D01*
+X010250Y006505D01*
+X010300Y006555D01*
+X010315Y006570D01*
+X010900Y006570D01*
+X010250Y006505D02*
+X010200Y006455D01*
+X010811Y005955D02*
+X011012Y005955D01*
+X011213Y005955D01*
+X011213Y005955D01*
+X011057Y005955D01*
+X011012Y005955D01*
+X011012Y005955D01*
+X011012Y005955D01*
+X011012Y005559D01*
+X011101Y005559D01*
+X011137Y005568D01*
+X011140Y005570D01*
+X011143Y005568D01*
+X011178Y005559D01*
+X011253Y005559D01*
+X011317Y005495D01*
+X011405Y005459D01*
+X011500Y005459D01*
+X011500Y005270D01*
+X011542Y005167D01*
+X011863Y004846D01*
+X011941Y004768D01*
+X012044Y004725D01*
+X012214Y004725D01*
+X012223Y004705D01*
+X012201Y004653D01*
+X012079Y004704D01*
+X011921Y004704D01*
+X011775Y004643D01*
+X011629Y004704D01*
+X011471Y004704D01*
+X011324Y004643D01*
+X011212Y004531D01*
+X011189Y004475D01*
+X010236Y004475D01*
+X010175Y004450D01*
+X009940Y004450D01*
+X009940Y004530D01*
+X009860Y004530D01*
+X009860Y004826D01*
+X009665Y004826D01*
+X009660Y004825D01*
+X009660Y004884D01*
+X009864Y004884D01*
+X009952Y004920D01*
+X010020Y004988D01*
+X010042Y005040D01*
+X010071Y005040D01*
+X010174Y005083D01*
+X010387Y005296D01*
+X010430Y005399D01*
+X010430Y005459D01*
+X010619Y005459D01*
+X010707Y005495D01*
+X010770Y005559D01*
+X010845Y005559D01*
+X010881Y005568D01*
+X010884Y005570D01*
+X010887Y005568D01*
+X010923Y005559D01*
+X011012Y005559D01*
+X011012Y005955D01*
+X011012Y005955D01*
+X010811Y005955D01*
+X010811Y005955D01*
+X011012Y005914D02*
+X011012Y005914D01*
+X011012Y005836D02*
+X011012Y005836D01*
+X011012Y005757D02*
+X011012Y005757D01*
+X011012Y005679D02*
+X011012Y005679D01*
+X011012Y005600D02*
+X011012Y005600D01*
+X010733Y005522D02*
+X011291Y005522D01*
+X011500Y005443D02*
+X010430Y005443D01*
+X010416Y005365D02*
+X011500Y005365D01*
+X011500Y005286D02*
+X010377Y005286D01*
+X010298Y005208D02*
+X011525Y005208D01*
+X011580Y005129D02*
+X010220Y005129D01*
+X010096Y005051D02*
+X011659Y005051D01*
+X011737Y004972D02*
+X010004Y004972D01*
+X009888Y004894D02*
+X011816Y004894D01*
+X011894Y004815D02*
+X010174Y004815D01*
+X010171Y004817D02*
+X010135Y004826D01*
+X009940Y004826D01*
+X009940Y004530D01*
+X010257Y004530D01*
+X010257Y004705D01*
+X010247Y004741D01*
+X010229Y004772D01*
+X010202Y004799D01*
+X010171Y004817D01*
+X010248Y004737D02*
+X012017Y004737D01*
+X012190Y004658D02*
+X012203Y004658D01*
+X012100Y005005D02*
+X012600Y005005D01*
+X012585Y005020D01*
+X012650Y005020D01*
+X012615Y005020D01*
+X012550Y004955D01*
+X012550Y004455D01*
+X012500Y004405D01*
+X012515Y004390D01*
+X012650Y004390D01*
+X012035Y004270D02*
+X012000Y004305D01*
+X012035Y004270D02*
+X012035Y003555D01*
+X012550Y003355D02*
+X012600Y003305D01*
+X012650Y003355D01*
+X012650Y003720D01*
+X013107Y003716D02*
+X013479Y003716D01*
+X013479Y003795D02*
+X013107Y003795D01*
+X013107Y003873D02*
+X013479Y003873D01*
+X013161Y003952D02*
+X013107Y003952D01*
+X013350Y004305D02*
+X013815Y004305D01*
+X014485Y004305D02*
+X014500Y004305D01*
+X015300Y004361D02*
+X017644Y004361D01*
+X017750Y004255D01*
+X018330Y004187D02*
+X018661Y004187D01*
+X018544Y004109D02*
+X018330Y004109D01*
+X018437Y004030D02*
+X018466Y004030D01*
+X017350Y005105D02*
+X017300Y005155D01*
+X015850Y003855D02*
+X015800Y003905D01*
+X015850Y003855D02*
+X015850Y003655D01*
+X015769Y003574D01*
+X015919Y003574D01*
+X015950Y003605D01*
+X014250Y002655D02*
+X014200Y002705D01*
+X013900Y001505D02*
+X013885Y001490D01*
+X013250Y001490D01*
+X013800Y001505D02*
+X013815Y001490D01*
+X013900Y001490D01*
+X013900Y001505D01*
+X013900Y001490D02*
+X014550Y001490D01*
+X013250Y001005D02*
+X013250Y000855D01*
+X014900Y000419D02*
+X015021Y000419D01*
+X015945Y000576D02*
+X016025Y000576D01*
+X016025Y000655D02*
+X015945Y000655D01*
+X015945Y000733D02*
+X016025Y000733D01*
+X016025Y000812D02*
+X015945Y000812D01*
+X015945Y000969D02*
+X016025Y000969D01*
+X016025Y001047D02*
+X015945Y001047D01*
+X015945Y001126D02*
+X016025Y001126D01*
+X016025Y001204D02*
+X015945Y001204D01*
+X011500Y003005D02*
+X011150Y003005D01*
+X011012Y003143D01*
+X011012Y003555D01*
+X010756Y003555D02*
+X010500Y003555D01*
+X010250Y003305D01*
+X009550Y002805D02*
+X008845Y003510D01*
+X008845Y003755D01*
+X008500Y003755D01*
+X008200Y003455D01*
+X008200Y001555D01*
+X008300Y001455D01*
+X008305Y001455D01*
+X008305Y001410D01*
+X008300Y001405D01*
+X007865Y001440D02*
+X007345Y001440D01*
+X007345Y001518D02*
+X007865Y001518D01*
+X007865Y001597D02*
+X007345Y001597D01*
+X007345Y001675D02*
+X007865Y001675D01*
+X007865Y001754D02*
+X007345Y001754D01*
+X007345Y001815D02*
+X007443Y001815D01*
+X007531Y001852D01*
+X007598Y001919D01*
+X007635Y002007D01*
+X007635Y002715D01*
+X007818Y002715D01*
+X007906Y002752D01*
+X007920Y002766D01*
+X007920Y001959D01*
+X007902Y001941D01*
+X007865Y001853D01*
+X007865Y001057D01*
+X007870Y001045D01*
+X007712Y001045D01*
+X007685Y001038D01*
+X007683Y001041D01*
+X007616Y001108D01*
+X007528Y001145D01*
+X007345Y001145D01*
+X007345Y001815D01*
+X007484Y001832D02*
+X007865Y001832D01*
+X007889Y001911D02*
+X007590Y001911D01*
+X007627Y001989D02*
+X007920Y001989D01*
+X007920Y002068D02*
+X007635Y002068D01*
+X007635Y002146D02*
+X007920Y002146D01*
+X007920Y002225D02*
+X007635Y002225D01*
+X007635Y002303D02*
+X007920Y002303D01*
+X007920Y002382D02*
+X007635Y002382D01*
+X007635Y002460D02*
+X007920Y002460D01*
+X007920Y002539D02*
+X007635Y002539D01*
+X007635Y002617D02*
+X007920Y002617D01*
+X007920Y002696D02*
+X007635Y002696D01*
+X007600Y003105D02*
+X007570Y003135D01*
+X007500Y003205D01*
+X007500Y003705D01*
+X007400Y003805D01*
+X007400Y003820D01*
+X006943Y003795D02*
+X006220Y003795D01*
+X006220Y003873D02*
+X006943Y003873D01*
+X006943Y003952D02*
+X006220Y003952D01*
+X006220Y004030D02*
+X006361Y004030D01*
+X006374Y004017D02*
+X006262Y004129D01*
+X006220Y004230D01*
+X006220Y002589D01*
+X006274Y002643D01*
+X006421Y002704D01*
+X006579Y002704D01*
+X006625Y002685D01*
+X006755Y002685D01*
+X006755Y002803D01*
+X006760Y002815D01*
+X006602Y002815D01*
+X006566Y002825D01*
+X006534Y002843D01*
+X006508Y002869D01*
+X006490Y002901D01*
+X006480Y002937D01*
+X006480Y003115D01*
+X006780Y003115D01*
+X006780Y003195D01*
+X006780Y003495D01*
+X006602Y003495D01*
+X006566Y003485D01*
+X006534Y003467D01*
+X006508Y003441D01*
+X006490Y003409D01*
+X006480Y003373D01*
+X006480Y003195D01*
+X006780Y003195D01*
+X006860Y003195D01*
+X006860Y003495D01*
+X006977Y003495D01*
+X006943Y003576D01*
+X006943Y004065D01*
+X006980Y004153D01*
+X006982Y004155D01*
+X006980Y004157D01*
+X006965Y004194D01*
+X006938Y004129D01*
+X006826Y004017D01*
+X006679Y003956D01*
+X006521Y003956D01*
+X006374Y004017D01*
+X006283Y004109D02*
+X006220Y004109D01*
+X006220Y004187D02*
+X006238Y004187D01*
+X005580Y003956D02*
+X005580Y001991D01*
+X005629Y001874D01*
+X005652Y001851D01*
+X005645Y001854D01*
+X005155Y001854D01*
+X005067Y001817D01*
+X005000Y001750D01*
+X004963Y001661D01*
+X004963Y000385D01*
+X004976Y000355D01*
+X004824Y000355D01*
+X004837Y000385D01*
+X004837Y001661D01*
+X004800Y001750D01*
+X004733Y001817D01*
+X004645Y001854D01*
+X004580Y001854D01*
+X004580Y002761D01*
+X004537Y002864D01*
+X004176Y003225D01*
+X004221Y003206D01*
+X004379Y003206D01*
+X004526Y003267D01*
+X004638Y003379D01*
+X004699Y003526D01*
+X004699Y003684D01*
+X004680Y003730D01*
+X004680Y003971D01*
+X004733Y003993D01*
+X004800Y004060D01*
+X004837Y004149D01*
+X004837Y005356D01*
+X004929Y005356D01*
+X004963Y005370D01*
+X004963Y004149D01*
+X005000Y004060D01*
+X005067Y003993D01*
+X005155Y003956D01*
+X005580Y003956D01*
+X005580Y003952D02*
+X004680Y003952D01*
+X004680Y003873D02*
+X005580Y003873D01*
+X005580Y003795D02*
+X004680Y003795D01*
+X004686Y003716D02*
+X005580Y003716D01*
+X005580Y003638D02*
+X004699Y003638D01*
+X004699Y003559D02*
+X005580Y003559D01*
+X005580Y003481D02*
+X004680Y003481D01*
+X004648Y003402D02*
+X005580Y003402D01*
+X005580Y003324D02*
+X004582Y003324D01*
+X004473Y003245D02*
+X005580Y003245D01*
+X005580Y003167D02*
+X004234Y003167D01*
+X004313Y003088D02*
+X005580Y003088D01*
+X005580Y003010D02*
+X004391Y003010D01*
+X004470Y002931D02*
+X005580Y002931D01*
+X005580Y002853D02*
+X004542Y002853D01*
+X004574Y002774D02*
+X005580Y002774D01*
+X005580Y002696D02*
+X004580Y002696D01*
+X004580Y002617D02*
+X005580Y002617D01*
+X005580Y002539D02*
+X004580Y002539D01*
+X004580Y002460D02*
+X005580Y002460D01*
+X005580Y002382D02*
+X004580Y002382D01*
+X004580Y002303D02*
+X005580Y002303D01*
+X005580Y002225D02*
+X004580Y002225D01*
+X004580Y002146D02*
+X005580Y002146D01*
+X005580Y002068D02*
+X004580Y002068D01*
+X004580Y001989D02*
+X005581Y001989D01*
+X005613Y001911D02*
+X004580Y001911D01*
+X004697Y001832D02*
+X005103Y001832D01*
+X005004Y001754D02*
+X004796Y001754D01*
+X004831Y001675D02*
+X004969Y001675D01*
+X004963Y001597D02*
+X004837Y001597D01*
+X004837Y001518D02*
+X004963Y001518D01*
+X004963Y001440D02*
+X004837Y001440D01*
+X004837Y001361D02*
+X004963Y001361D01*
+X004963Y001283D02*
+X004837Y001283D01*
+X004837Y001204D02*
+X004963Y001204D01*
+X004963Y001126D02*
+X004837Y001126D01*
+X004837Y001047D02*
+X004963Y001047D01*
+X004963Y000969D02*
+X004837Y000969D01*
+X004837Y000890D02*
+X004963Y000890D01*
+X004963Y000812D02*
+X004837Y000812D01*
+X004837Y000733D02*
+X004963Y000733D01*
+X004963Y000655D02*
+X004837Y000655D01*
+X004837Y000576D02*
+X004963Y000576D01*
+X004963Y000498D02*
+X004837Y000498D01*
+X004837Y000419D02*
+X004963Y000419D01*
+X005250Y000705D02*
+X005250Y001005D01*
+X005300Y001055D01*
+X005400Y000955D01*
+X005400Y001023D01*
+X005250Y000705D02*
+X006000Y000705D01*
+X006000Y001205D01*
+X006000Y000705D02*
+X006530Y000705D01*
+X007345Y001204D02*
+X007865Y001204D01*
+X007865Y001126D02*
+X007575Y001126D01*
+X007677Y001047D02*
+X007869Y001047D01*
+X007930Y001025D02*
+X007500Y001455D01*
+X007450Y001455D01*
+X007450Y001405D01*
+X007345Y001361D02*
+X007865Y001361D01*
+X007865Y001283D02*
+X007345Y001283D01*
+X007930Y001025D02*
+X007930Y000705D01*
+X007890Y000665D02*
+X007970Y000665D01*
+X007970Y000365D01*
+X008148Y000365D01*
+X008184Y000375D01*
+X008216Y000393D01*
+X008242Y000419D01*
+X008256Y000419D01*
+X008242Y000419D02*
+X008250Y000433D01*
+X008277Y000369D01*
+X008291Y000355D01*
+X007669Y000355D01*
+X007683Y000369D01*
+X007685Y000372D01*
+X007712Y000365D01*
+X007890Y000365D01*
+X007890Y000665D01*
+X007890Y000655D02*
+X007970Y000655D01*
+X007970Y000576D02*
+X007890Y000576D01*
+X007890Y000498D02*
+X007970Y000498D01*
+X007970Y000419D02*
+X007890Y000419D01*
+X007250Y002405D02*
+X007195Y002405D01*
+X006600Y002405D01*
+X006500Y002305D01*
+X006248Y002617D02*
+X006220Y002617D01*
+X006220Y002696D02*
+X006401Y002696D01*
+X006220Y002774D02*
+X006755Y002774D01*
+X006755Y002696D02*
+X006599Y002696D01*
+X006525Y002853D02*
+X006220Y002853D01*
+X006220Y002931D02*
+X006481Y002931D01*
+X006480Y003010D02*
+X006220Y003010D01*
+X006220Y003088D02*
+X006480Y003088D01*
+X006480Y003245D02*
+X006220Y003245D01*
+X006220Y003167D02*
+X006780Y003167D01*
+X006780Y003245D02*
+X006860Y003245D01*
+X006860Y003324D02*
+X006780Y003324D01*
+X006780Y003402D02*
+X006860Y003402D01*
+X006860Y003481D02*
+X006780Y003481D01*
+X006950Y003559D02*
+X006220Y003559D01*
+X006220Y003481D02*
+X006557Y003481D01*
+X006488Y003402D02*
+X006220Y003402D01*
+X006220Y003324D02*
+X006480Y003324D01*
+X006220Y003638D02*
+X006943Y003638D01*
+X006943Y003716D02*
+X006220Y003716D01*
+X006839Y004030D02*
+X006943Y004030D01*
+X006962Y004109D02*
+X006917Y004109D01*
+X006962Y004187D02*
+X006968Y004187D01*
+X007400Y004490D02*
+X007400Y004505D01*
+X007800Y004905D01*
+X007800Y005055D01*
+X007350Y005235D02*
+X007350Y005255D01*
+X007790Y006059D02*
+X007790Y006233D01*
+X007790Y006234D01*
+X007884Y006234D01*
+X007945Y006172D01*
+X007874Y006143D01*
+X007790Y006059D01*
+X007790Y006071D02*
+X007802Y006071D01*
+X007790Y006150D02*
+X007890Y006150D01*
+X007890Y006228D02*
+X007790Y006228D01*
+X009050Y005605D02*
+X009300Y005605D01*
+X009600Y005305D02*
+X009650Y005255D01*
+X009860Y004815D02*
+X009940Y004815D01*
+X009940Y004737D02*
+X009860Y004737D01*
+X009860Y004658D02*
+X009940Y004658D01*
+X009940Y004580D02*
+X009860Y004580D01*
+X009940Y004501D02*
+X011200Y004501D01*
+X011261Y004580D02*
+X010257Y004580D01*
+X010257Y004658D02*
+X011360Y004658D01*
+X011740Y004658D02*
+X011810Y004658D01*
+X012100Y005005D02*
+X011780Y005325D01*
+X011780Y005955D01*
+X011550Y006005D02*
+X011500Y006055D01*
+X011500Y007055D01*
+X011315Y007240D01*
+X010900Y007240D01*
+X010335Y007240D01*
+X010250Y007155D01*
+X010250Y007240D01*
+X010385Y007240D01*
+X010400Y007255D01*
+X010250Y007240D02*
+X009600Y007240D01*
+X009600Y007205D01*
+X009565Y007240D01*
+X008950Y007240D01*
+X008400Y007305D02*
+X008300Y007205D01*
+X008300Y007240D01*
+X007535Y007240D01*
+X007500Y007205D01*
+X007535Y007240D02*
+X007650Y007240D01*
+X007650Y007205D01*
+X007615Y007240D01*
+X007000Y007240D01*
+X007000Y007205D01*
+X006700Y007205D01*
+X006500Y007005D01*
+X006355Y007005D01*
+X006200Y006850D01*
+X005965Y007855D02*
+X005650Y007855D01*
+X005550Y007955D01*
+X005550Y008055D01*
+X004550Y008055D02*
+X004550Y008155D01*
+X004550Y008555D02*
+X004450Y008655D01*
+X004450Y009255D01*
+X004465Y009270D02*
+X004465Y009305D01*
+X004450Y009305D01*
+X004450Y008655D02*
+X003300Y008655D01*
+X003157Y008798D01*
+X003157Y008983D01*
+X002425Y008976D02*
+X002344Y008976D01*
+X002354Y008897D02*
+X002425Y008897D01*
+X002429Y008819D02*
+X002354Y008819D01*
+X002339Y008740D02*
+X002461Y008740D01*
+X002552Y008662D02*
+X002306Y008662D01*
+X002312Y009054D02*
+X002425Y009054D01*
+X002425Y009133D02*
+X002267Y009133D01*
+X002189Y009211D02*
+X002425Y009211D01*
+X002425Y009290D02*
+X002033Y009290D01*
+X001802Y009290D02*
+X000700Y009290D01*
+X000700Y009368D02*
+X002425Y009368D01*
+X002425Y009447D02*
+X000700Y009447D01*
+X000700Y009525D02*
+X002425Y009525D01*
+X001646Y009211D02*
+X000700Y009211D01*
+X000700Y009133D02*
+X001568Y009133D01*
+X001523Y009054D02*
+X000700Y009054D01*
+X000700Y008976D02*
+X001490Y008976D01*
+X001480Y008897D02*
+X000700Y008897D01*
+X000700Y008819D02*
+X001480Y008819D01*
+X001496Y008740D02*
+X000700Y008740D01*
+X000700Y008662D02*
+X001529Y008662D01*
+X001356Y008583D02*
+X000700Y008583D01*
+X000700Y008505D02*
+X001291Y008505D01*
+X001264Y008426D02*
+X000700Y008426D01*
+X000700Y008348D02*
+X001264Y008348D01*
+X001264Y008269D02*
+X000700Y008269D01*
+X000700Y008191D02*
+X001264Y008191D01*
+X001264Y008112D02*
+X000700Y008112D01*
+X000700Y008034D02*
+X001264Y008034D01*
+X001264Y007955D02*
+X000700Y007955D01*
+X000700Y007877D02*
+X001264Y007877D01*
+X001264Y007798D02*
+X000700Y007798D01*
+X000700Y007720D02*
+X001264Y007720D01*
+X001264Y007641D02*
+X000700Y007641D01*
+X000700Y007563D02*
+X001264Y007563D01*
+X001264Y007484D02*
+X000700Y007484D01*
+X000700Y007406D02*
+X001278Y007406D01*
+X001324Y007327D02*
+X000700Y007327D01*
+X000700Y007249D02*
+X001349Y007249D01*
+X001316Y007170D02*
+X000700Y007170D01*
+X000700Y007092D02*
+X001301Y007092D01*
+X001262Y007013D02*
+X000700Y007013D01*
+X000700Y006935D02*
+X000702Y006935D01*
+X001500Y006855D02*
+X001500Y006355D01*
+X001500Y005755D01*
+X001650Y005605D01*
+X003000Y005605D01*
+X003350Y005255D01*
+X003350Y004805D01*
+X003350Y004755D01*
+X003325Y004730D01*
+X003300Y004705D01*
+X003325Y004730D02*
+X003250Y004805D01*
+X003350Y004805D02*
+X003400Y004755D01*
+X003400Y004787D01*
+X003325Y004730D02*
+X003350Y004705D01*
+X002963Y004737D02*
+X002837Y004737D01*
+X002837Y004815D02*
+X002963Y004815D01*
+X002963Y004894D02*
+X002837Y004894D01*
+X002837Y004972D02*
+X002963Y004972D01*
+X002963Y005051D02*
+X002837Y005051D01*
+X002837Y005129D02*
+X002963Y005129D01*
+X002963Y005208D02*
+X002837Y005208D01*
+X002837Y005286D02*
+X002923Y005286D01*
+X002884Y005325D02*
+X002963Y005246D01*
+X002963Y004149D01*
+X003000Y004060D01*
+X003067Y003993D01*
+X003155Y003956D01*
+X003470Y003956D01*
+X003470Y003199D01*
+X003513Y003096D01*
+X003591Y003018D01*
+X004020Y002589D01*
+X004020Y001770D01*
+X004000Y001750D01*
+X003963Y001661D01*
+X003963Y000385D01*
+X003976Y000355D01*
+X003824Y000355D01*
+X003837Y000385D01*
+X003837Y001661D01*
+X003800Y001750D01*
+X003733Y001817D01*
+X003683Y001838D01*
+X003699Y001876D01*
+X003699Y002034D01*
+X003638Y002181D01*
+X003526Y002293D01*
+X003379Y002354D01*
+X003221Y002354D01*
+X003105Y002306D01*
+X003170Y002505D01*
+X003099Y002722D01*
+X002914Y002857D01*
+X002686Y002857D01*
+X002501Y002722D01*
+X002430Y002505D01*
+X002462Y002407D01*
+X002376Y002493D01*
+X002229Y002554D01*
+X002071Y002554D01*
+X001924Y002493D01*
+X001812Y002381D01*
+X001751Y002234D01*
+X001751Y002076D01*
+X001812Y001929D01*
+X001924Y001817D01*
+X002020Y001777D01*
+X002020Y001770D01*
+X002000Y001750D01*
+X001963Y001661D01*
+X001963Y000385D01*
+X001976Y000355D01*
+X001824Y000355D01*
+X001837Y000385D01*
+X001837Y001661D01*
+X001800Y001750D01*
+X001733Y001817D01*
+X001645Y001854D01*
+X001155Y001854D01*
+X001067Y001817D01*
+X001000Y001750D01*
+X000963Y001661D01*
+X000963Y000385D01*
+X000976Y000355D01*
+X000700Y000355D01*
+X000700Y005776D01*
+X000727Y005765D01*
+X001220Y005765D01*
+X001220Y005699D01*
+X001254Y005617D01*
+X001155Y005617D01*
+X001067Y005581D01*
+X001000Y005513D01*
+X000963Y005425D01*
+X000963Y004149D01*
+X001000Y004060D01*
+X001067Y003993D01*
+X001155Y003956D01*
+X001645Y003956D01*
+X001733Y003993D01*
+X001800Y004060D01*
+X001837Y004149D01*
+X001837Y005325D01*
+X001963Y005325D01*
+X001963Y004149D01*
+X001983Y004102D01*
+X001962Y004081D01*
+X001901Y003934D01*
+X001901Y003776D01*
+X001962Y003629D01*
+X002074Y003517D01*
+X002221Y003456D01*
+X002379Y003456D01*
+X002526Y003517D01*
+X002638Y003629D01*
+X002699Y003776D01*
+X002699Y003934D01*
+X002683Y003972D01*
+X002733Y003993D01*
+X002800Y004060D01*
+X002837Y004149D01*
+X002837Y005325D01*
+X002884Y005325D01*
+X002850Y006005D02*
+X002800Y006055D01*
+X002765Y006020D01*
+X002750Y006020D01*
+X002850Y006005D02*
+X003150Y006005D01*
+X003750Y005405D01*
+X004100Y005755D01*
+X004850Y005755D01*
+X004949Y005365D02*
+X004963Y005365D01*
+X004963Y005286D02*
+X004837Y005286D01*
+X004837Y005208D02*
+X004963Y005208D01*
+X004963Y005129D02*
+X004837Y005129D01*
+X004837Y005051D02*
+X004963Y005051D01*
+X004963Y004972D02*
+X004837Y004972D01*
+X004837Y004894D02*
+X004963Y004894D01*
+X004963Y004815D02*
+X004837Y004815D01*
+X004837Y004737D02*
+X004963Y004737D01*
+X004963Y004658D02*
+X004837Y004658D01*
+X004837Y004580D02*
+X004963Y004580D01*
+X004963Y004501D02*
+X004837Y004501D01*
+X004837Y004423D02*
+X004963Y004423D01*
+X004963Y004344D02*
+X004837Y004344D01*
+X004837Y004266D02*
+X004963Y004266D01*
+X004963Y004187D02*
+X004837Y004187D01*
+X004820Y004109D02*
+X004980Y004109D01*
+X005030Y004030D02*
+X004770Y004030D01*
+X004400Y003705D02*
+X004300Y003605D01*
+X004400Y003705D02*
+X004400Y004787D01*
+X003750Y005405D02*
+X003750Y003255D01*
+X004300Y002705D01*
+X004300Y001105D01*
+X004400Y001005D01*
+X004400Y001023D01*
+X003963Y001047D02*
+X003837Y001047D01*
+X003837Y000969D02*
+X003963Y000969D01*
+X003963Y000890D02*
+X003837Y000890D01*
+X003837Y000812D02*
+X003963Y000812D01*
+X003963Y000733D02*
+X003837Y000733D01*
+X003837Y000655D02*
+X003963Y000655D01*
+X003963Y000576D02*
+X003837Y000576D01*
+X003837Y000498D02*
+X003963Y000498D01*
+X003963Y000419D02*
+X003837Y000419D01*
+X003300Y000905D02*
+X003400Y001005D01*
+X003400Y001023D01*
+X003300Y000905D02*
+X003300Y001955D01*
+X003594Y002225D02*
+X004020Y002225D01*
+X004020Y002303D02*
+X003502Y002303D01*
+X003652Y002146D02*
+X004020Y002146D01*
+X004020Y002068D02*
+X003685Y002068D01*
+X003699Y001989D02*
+X004020Y001989D01*
+X004020Y001911D02*
+X003699Y001911D01*
+X003697Y001832D02*
+X004020Y001832D01*
+X004004Y001754D02*
+X003796Y001754D01*
+X003831Y001675D02*
+X003969Y001675D01*
+X003963Y001597D02*
+X003837Y001597D01*
+X003837Y001518D02*
+X003963Y001518D01*
+X003963Y001440D02*
+X003837Y001440D01*
+X003837Y001361D02*
+X003963Y001361D01*
+X003963Y001283D02*
+X003837Y001283D01*
+X003837Y001204D02*
+X003963Y001204D01*
+X003963Y001126D02*
+X003837Y001126D01*
+X002400Y001023D02*
+X002400Y000955D01*
+X002300Y001055D01*
+X002300Y002005D01*
+X002150Y002155D01*
+X001780Y002303D02*
+X000700Y002303D01*
+X000700Y002225D02*
+X001751Y002225D01*
+X001751Y002146D02*
+X000700Y002146D01*
+X000700Y002068D02*
+X001755Y002068D01*
+X001787Y001989D02*
+X000700Y001989D01*
+X000700Y001911D02*
+X001831Y001911D01*
+X001909Y001832D02*
+X001697Y001832D01*
+X001796Y001754D02*
+X002004Y001754D01*
+X001969Y001675D02*
+X001831Y001675D01*
+X001837Y001597D02*
+X001963Y001597D01*
+X001963Y001518D02*
+X001837Y001518D01*
+X001837Y001440D02*
+X001963Y001440D01*
+X001963Y001361D02*
+X001837Y001361D01*
+X001837Y001283D02*
+X001963Y001283D01*
+X001963Y001204D02*
+X001837Y001204D01*
+X001837Y001126D02*
+X001963Y001126D01*
+X001963Y001047D02*
+X001837Y001047D01*
+X001837Y000969D02*
+X001963Y000969D01*
+X001963Y000890D02*
+X001837Y000890D01*
+X001837Y000812D02*
+X001963Y000812D01*
+X001963Y000733D02*
+X001837Y000733D01*
+X001837Y000655D02*
+X001963Y000655D01*
+X001963Y000576D02*
+X001837Y000576D01*
+X001837Y000498D02*
+X001963Y000498D01*
+X001963Y000419D02*
+X001837Y000419D01*
+X000963Y000419D02*
+X000700Y000419D01*
+X000700Y000498D02*
+X000963Y000498D01*
+X000963Y000576D02*
+X000700Y000576D01*
+X000700Y000655D02*
+X000963Y000655D01*
+X000963Y000733D02*
+X000700Y000733D01*
+X000700Y000812D02*
+X000963Y000812D01*
+X000963Y000890D02*
+X000700Y000890D01*
+X000700Y000969D02*
+X000963Y000969D01*
+X000963Y001047D02*
+X000700Y001047D01*
+X000700Y001126D02*
+X000963Y001126D01*
+X000963Y001204D02*
+X000700Y001204D01*
+X000700Y001283D02*
+X000963Y001283D01*
+X000963Y001361D02*
+X000700Y001361D01*
+X000700Y001440D02*
+X000963Y001440D01*
+X000963Y001518D02*
+X000700Y001518D01*
+X000700Y001597D02*
+X000963Y001597D01*
+X000969Y001675D02*
+X000700Y001675D01*
+X000700Y001754D02*
+X001004Y001754D01*
+X001103Y001832D02*
+X000700Y001832D01*
+X000700Y002382D02*
+X001813Y002382D01*
+X001891Y002460D02*
+X000700Y002460D01*
+X000700Y002539D02*
+X002034Y002539D01*
+X002266Y002539D02*
+X002441Y002539D01*
+X002445Y002460D02*
+X002409Y002460D01*
+X002466Y002617D02*
+X000700Y002617D01*
+X000700Y002696D02*
+X002492Y002696D01*
+X002572Y002774D02*
+X000700Y002774D01*
+X000700Y002853D02*
+X002680Y002853D01*
+X002920Y002853D02*
+X003757Y002853D01*
+X003678Y002931D02*
+X000700Y002931D01*
+X000700Y003010D02*
+X003600Y003010D01*
+X003521Y003088D02*
+X000700Y003088D01*
+X000700Y003167D02*
+X003484Y003167D01*
+X003470Y003245D02*
+X000700Y003245D01*
+X000700Y003324D02*
+X003470Y003324D01*
+X003470Y003402D02*
+X000700Y003402D01*
+X000700Y003481D02*
+X002162Y003481D01*
+X002032Y003559D02*
+X000700Y003559D01*
+X000700Y003638D02*
+X001958Y003638D01*
+X001926Y003716D02*
+X000700Y003716D01*
+X000700Y003795D02*
+X001901Y003795D01*
+X001901Y003873D02*
+X000700Y003873D01*
+X000700Y003952D02*
+X001908Y003952D01*
+X001941Y004030D02*
+X001770Y004030D01*
+X001820Y004109D02*
+X001980Y004109D01*
+X001963Y004187D02*
+X001837Y004187D01*
+X001837Y004266D02*
+X001963Y004266D01*
+X001963Y004344D02*
+X001837Y004344D01*
+X001837Y004423D02*
+X001963Y004423D01*
+X001963Y004501D02*
+X001837Y004501D01*
+X001837Y004580D02*
+X001963Y004580D01*
+X001963Y004658D02*
+X001837Y004658D01*
+X001837Y004737D02*
+X001963Y004737D01*
+X001963Y004815D02*
+X001837Y004815D01*
+X001837Y004894D02*
+X001963Y004894D01*
+X001963Y004972D02*
+X001837Y004972D01*
+X001837Y005051D02*
+X001963Y005051D01*
+X001963Y005129D02*
+X001837Y005129D01*
+X001837Y005208D02*
+X001963Y005208D01*
+X001963Y005286D02*
+X001837Y005286D01*
+X001229Y005679D02*
+X000700Y005679D01*
+X000700Y005757D02*
+X001220Y005757D01*
+X001113Y005600D02*
+X000700Y005600D01*
+X000700Y005522D02*
+X001008Y005522D01*
+X000971Y005443D02*
+X000700Y005443D01*
+X000700Y005365D02*
+X000963Y005365D01*
+X000963Y005286D02*
+X000700Y005286D01*
+X000700Y005208D02*
+X000963Y005208D01*
+X000963Y005129D02*
+X000700Y005129D01*
+X000700Y005051D02*
+X000963Y005051D01*
+X000963Y004972D02*
+X000700Y004972D01*
+X000700Y004894D02*
+X000963Y004894D01*
+X000963Y004815D02*
+X000700Y004815D01*
+X000700Y004737D02*
+X000963Y004737D01*
+X000963Y004658D02*
+X000700Y004658D01*
+X000700Y004580D02*
+X000963Y004580D01*
+X000963Y004501D02*
+X000700Y004501D01*
+X000700Y004423D02*
+X000963Y004423D01*
+X000963Y004344D02*
+X000700Y004344D01*
+X000700Y004266D02*
+X000963Y004266D01*
+X000963Y004187D02*
+X000700Y004187D01*
+X000700Y004109D02*
+X000980Y004109D01*
+X001030Y004030D02*
+X000700Y004030D01*
+X002300Y003855D02*
+X002400Y003955D01*
+X002400Y004787D01*
+X002837Y004658D02*
+X002963Y004658D01*
+X002963Y004580D02*
+X002837Y004580D01*
+X002837Y004501D02*
+X002963Y004501D01*
+X002963Y004423D02*
+X002837Y004423D01*
+X002837Y004344D02*
+X002963Y004344D01*
+X002963Y004266D02*
+X002837Y004266D01*
+X002837Y004187D02*
+X002963Y004187D01*
+X002980Y004109D02*
+X002820Y004109D01*
+X002770Y004030D02*
+X003030Y004030D01*
+X002692Y003952D02*
+X003470Y003952D01*
+X003470Y003873D02*
+X002699Y003873D01*
+X002699Y003795D02*
+X003470Y003795D01*
+X003470Y003716D02*
+X002674Y003716D01*
+X002642Y003638D02*
+X003470Y003638D01*
+X003470Y003559D02*
+X002568Y003559D01*
+X002438Y003481D02*
+X003470Y003481D01*
+X003835Y002774D02*
+X003028Y002774D01*
+X003108Y002696D02*
+X003914Y002696D01*
+X003992Y002617D02*
+X003134Y002617D01*
+X003159Y002539D02*
+X004020Y002539D01*
+X004020Y002460D02*
+X003155Y002460D01*
+X003130Y002382D02*
+X004020Y002382D01*
+X007570Y003135D02*
+X007570Y003155D01*
+X008845Y003755D02*
+X008845Y003955D01*
+X009200Y004705D02*
+X009000Y004905D01*
+X009000Y005105D01*
+X009200Y004705D02*
+X009220Y004705D01*
+X011500Y003905D02*
+X011500Y003505D01*
+X011524Y003529D01*
+X011524Y003555D01*
+X011500Y003905D02*
+X011550Y003955D01*
+X011550Y004305D01*
+X012650Y005020D02*
+X013250Y005020D01*
+X013850Y004940D02*
+X013850Y004905D01*
+X014272Y006133D02*
+X014100Y006305D01*
+X014272Y006133D02*
+X015300Y006133D01*
+X015836Y006621D02*
+X015940Y006621D01*
+X015817Y006778D02*
+X017349Y006778D01*
+X017629Y007117D02*
+X018212Y007117D01*
+X018200Y007105D01*
+X018212Y007117D02*
+X018450Y007355D01*
+X020812Y007905D02*
+X021500Y007905D01*
+X021600Y007905D01*
+X021500Y007905D02*
+X021500Y007905D01*
+X021322Y008191D02*
+X021101Y008191D01*
+X021072Y008269D02*
+X021437Y008269D01*
+X021506Y008505D02*
+X020896Y008505D01*
+X020895Y008426D02*
+X021793Y008426D01*
+X021793Y008348D02*
+X021004Y008348D01*
+X021174Y008583D02*
+X021385Y008583D01*
+X021341Y008662D02*
+X021253Y008662D01*
+X021763Y008269D02*
+X022110Y008269D01*
+X022150Y008290D02*
+X022150Y008355D01*
+X022100Y007655D02*
+X022135Y007620D01*
+X022747Y005522D02*
+X022921Y005522D01*
+X022854Y005443D02*
+X022714Y005443D01*
+X022673Y005365D02*
+X022822Y005365D01*
+X029200Y008855D02*
+X029200Y008870D01*
+X029200Y008905D01*
+X031112Y008976D02*
+X032200Y008976D01*
+X032200Y009054D02*
+X031112Y009054D01*
+X031112Y009133D02*
+X032200Y009133D01*
+X032200Y009211D02*
+X032056Y009211D01*
+X032189Y009290D02*
+X032200Y009290D01*
+X032200Y008897D02*
+X032035Y008897D01*
+X032122Y008819D02*
+X032200Y008819D01*
+X032157Y008734D02*
+X032157Y008245D01*
+X032120Y008157D01*
+X032052Y008089D01*
+X032040Y008084D01*
+X032047Y008071D01*
+X032057Y008036D01*
+X032057Y007860D01*
+X031740Y007860D01*
+X031740Y007780D01*
+X032057Y007780D01*
+X032057Y007877D02*
+X032200Y007877D01*
+X032200Y007955D02*
+X032057Y007955D01*
+X032057Y008034D02*
+X032200Y008034D01*
+X032200Y008112D02*
+X032075Y008112D01*
+X032134Y008191D02*
+X032200Y008191D01*
+X032200Y008269D02*
+X032157Y008269D01*
+X032157Y008348D02*
+X032200Y008348D01*
+X032200Y008426D02*
+X032157Y008426D01*
+X031325Y008112D02*
+X031112Y008112D01*
+X031112Y008191D02*
+X031266Y008191D01*
+X031243Y008269D02*
+X031112Y008269D01*
+X031112Y008348D02*
+X031243Y008348D01*
+X031343Y008034D02*
+X031079Y008034D01*
+X032057Y007641D02*
+X032200Y007641D01*
+X032200Y007563D02*
+X032054Y007563D01*
+X032057Y007484D02*
+X032200Y007484D01*
+X032200Y007406D02*
+X032057Y007406D01*
+X030400Y006705D02*
+X030400Y006705D01*
+X030350Y006705D01*
+X030400Y006655D01*
+X023550Y010055D02*
+X023550Y010070D01*
+X021650Y010055D02*
+X021650Y010070D01*
+X021650Y010055D02*
+X021550Y010155D01*
+X021350Y010155D01*
+X021100Y010405D01*
+X021100Y011055D01*
+X020077Y011017D02*
+X017952Y011017D01*
+X017988Y010981D02*
+X017894Y011075D01*
+X019056Y011075D01*
+X019159Y011118D01*
+X019237Y011196D01*
+X019300Y011259D01*
+X019341Y011218D01*
+X019444Y011175D01*
+X020056Y011175D01*
+X020077Y011184D01*
+X020077Y010180D01*
+X019995Y010180D01*
+X019974Y010172D01*
+X019952Y010180D01*
+X019739Y010180D01*
+X019718Y010172D01*
+X019697Y010180D01*
+X019483Y010180D01*
+X019462Y010172D01*
+X019441Y010180D01*
+X019227Y010180D01*
+X019206Y010172D01*
+X019185Y010180D01*
+X018971Y010180D01*
+X018950Y010172D01*
+X018929Y010180D01*
+X018715Y010180D01*
+X018694Y010172D01*
+X018673Y010180D01*
+X018459Y010180D01*
+X018438Y010172D01*
+X018417Y010180D01*
+X018203Y010180D01*
+X018115Y010144D01*
+X018054Y010083D01*
+X017993Y010144D01*
+X017905Y010180D01*
+X017692Y010180D01*
+X017607Y010145D01*
+X017607Y010334D01*
+X017597Y010356D01*
+X017729Y010356D01*
+X017876Y010417D01*
+X017988Y010529D01*
+X018049Y010676D01*
+X018049Y010834D01*
+X017988Y010981D01*
+X018006Y010938D02*
+X020077Y010938D01*
+X020077Y010860D02*
+X018038Y010860D01*
+X018049Y010781D02*
+X020077Y010781D01*
+X020077Y010703D02*
+X018049Y010703D01*
+X018027Y010624D02*
+X020077Y010624D01*
+X020077Y010546D02*
+X017995Y010546D01*
+X017926Y010467D02*
+X020077Y010467D01*
+X020077Y010389D02*
+X017807Y010389D01*
+X017607Y010310D02*
+X020077Y010310D01*
+X020077Y010232D02*
+X017607Y010232D01*
+X017607Y010153D02*
+X017625Y010153D01*
+X017971Y010153D02*
+X018137Y010153D01*
+X019104Y011095D02*
+X020077Y011095D01*
+X020077Y011174D02*
+X019215Y011174D01*
+X019293Y011252D02*
+X019307Y011252D01*
+X019078Y011433D02*
+X019000Y011355D01*
+X017650Y011355D01*
+X017600Y011305D01*
+X017600Y011355D01*
+X017100Y011355D01*
+X016950Y011505D01*
+X017000Y011505D01*
+X016450Y011455D02*
+X016450Y012355D01*
+X016482Y012351D02*
+X016342Y012351D01*
+X016447Y012316D02*
+X016410Y012228D01*
+X016410Y011895D01*
+X016409Y011898D01*
+X016341Y011965D01*
+X016253Y012002D01*
+X016180Y012002D01*
+X016180Y012189D01*
+X016551Y012560D01*
+X016581Y012560D01*
+X016624Y012517D01*
+X016771Y012456D01*
+X016929Y012456D01*
+X017076Y012517D01*
+X017188Y012629D01*
+X017211Y012684D01*
+X017360Y012684D01*
+X017360Y012980D01*
+X017440Y012980D01*
+X017440Y012684D01*
+X017635Y012684D01*
+X017671Y012693D01*
+X017702Y012711D01*
+X017729Y012737D01*
+X017729Y012720D01*
+X017738Y012684D01*
+X017756Y012653D01*
+X017780Y012629D01*
+X017774Y012615D01*
+X017774Y012600D01*
+X017721Y012600D01*
+X017685Y012591D01*
+X017653Y012572D01*
+X017627Y012546D01*
+X017609Y012514D01*
+X017599Y012479D01*
+X017599Y012165D01*
+X017755Y012165D01*
+X017755Y012165D01*
+X017599Y012165D01*
+X017599Y011851D01*
+X017609Y011816D01*
+X017627Y011784D01*
+X017653Y011758D01*
+X017660Y011754D01*
+X017590Y011754D01*
+X017590Y012228D01*
+X017553Y012316D01*
+X017486Y012383D01*
+X017398Y012420D01*
+X016602Y012420D01*
+X016514Y012383D01*
+X016447Y012316D01*
+X016429Y012273D02*
+X016264Y012273D01*
+X016185Y012194D02*
+X016410Y012194D01*
+X016410Y012116D02*
+X016180Y012116D01*
+X016180Y012037D02*
+X016410Y012037D01*
+X016410Y011959D02*
+X016348Y011959D01*
+X016421Y012430D02*
+X017599Y012430D01*
+X017607Y012508D02*
+X017054Y012508D01*
+X017145Y012587D02*
+X017678Y012587D01*
+X017749Y012665D02*
+X017203Y012665D01*
+X017360Y012744D02*
+X017440Y012744D01*
+X017440Y012822D02*
+X017360Y012822D01*
+X017360Y012901D02*
+X017440Y012901D01*
+X017440Y012979D02*
+X017360Y012979D01*
+X017440Y012980D02*
+X017440Y013060D01*
+X017729Y013060D01*
+X017729Y012995D01*
+X018025Y012995D01*
+X018025Y012915D01*
+X017757Y012915D01*
+X017757Y012980D01*
+X017440Y012980D01*
+X017440Y013058D02*
+X017729Y013058D01*
+X017757Y012979D02*
+X018025Y012979D01*
+X018100Y012605D02*
+X018650Y012605D01*
+X018700Y012655D01*
+X018700Y012905D01*
+X018750Y012955D01*
+X018065Y013640D01*
+X018065Y013705D01*
+X017400Y013705D01*
+X017400Y013690D01*
+X016900Y013855D02*
+X016800Y013855D01*
+X016400Y013455D01*
+X016435Y013455D01*
+X016435Y012840D01*
+X016835Y012840D01*
+X016850Y012855D01*
+X016435Y012840D02*
+X015900Y012305D01*
+X015900Y011705D01*
+X015910Y011695D01*
+X015910Y011683D01*
+X015910Y011715D01*
+X015350Y011905D02*
+X015350Y011105D01*
+X015500Y010955D01*
+X015800Y010955D02*
+X015900Y010955D01*
+X015910Y010945D01*
+X015910Y010935D02*
+X015880Y010935D01*
+X015850Y010905D01*
+X015910Y011309D02*
+X015910Y011309D01*
+X016345Y011309D01*
+X016345Y011215D01*
+X016376Y011215D01*
+X016410Y011201D01*
+X016410Y011471D01*
+X016409Y011468D01*
+X016345Y011405D01*
+X016345Y011309D01*
+X015910Y011309D01*
+X016304Y011309D01*
+X016450Y011455D01*
+X016410Y011409D02*
+X016349Y011409D01*
+X016345Y011331D02*
+X016410Y011331D01*
+X016410Y011252D02*
+X016345Y011252D01*
+X017590Y011802D02*
+X017617Y011802D01*
+X017599Y011880D02*
+X017590Y011880D01*
+X017590Y011959D02*
+X017599Y011959D01*
+X017590Y012037D02*
+X017599Y012037D01*
+X017590Y012116D02*
+X017599Y012116D01*
+X017590Y012194D02*
+X017599Y012194D01*
+X017599Y012273D02*
+X017571Y012273D01*
+X017599Y012351D02*
+X017518Y012351D01*
+X017400Y012455D02*
+X017690Y012165D01*
+X017798Y012165D01*
+X017798Y012107D01*
+X017800Y012105D01*
+X017800Y011705D01*
+X017900Y011605D01*
+X018550Y011605D01*
+X018566Y011621D01*
+X018566Y012165D01*
+X018590Y012165D01*
+X018600Y012155D01*
+X018610Y012165D01*
+X018822Y012165D01*
+X018822Y012527D01*
+X018900Y012605D01*
+X019200Y012605D01*
+X019300Y012705D01*
+X019300Y012955D01*
+X019315Y012955D01*
+X019275Y012915D02*
+X019355Y012915D01*
+X019355Y012706D01*
+X019352Y012703D01*
+X019351Y012700D01*
+X019275Y012700D01*
+X019275Y012915D01*
+X019275Y012901D02*
+X019355Y012901D01*
+X019355Y012822D02*
+X019275Y012822D01*
+X019275Y012744D02*
+X019355Y012744D01*
+X018800Y012905D02*
+X018750Y012955D01*
+X018735Y012955D01*
+X018100Y012605D02*
+X018054Y012559D01*
+X018054Y012165D01*
+X018609Y012165D02*
+X018623Y012165D01*
+X018779Y012165D01*
+X018779Y012165D01*
+X018609Y012165D01*
+X018609Y012165D01*
+X019078Y012165D02*
+X019078Y011433D01*
+X017934Y011635D02*
+X017884Y011635D01*
+X017826Y011693D01*
+X017738Y011730D01*
+X017796Y011730D01*
+X017859Y011666D01*
+X017934Y011635D01*
+X017911Y011645D02*
+X017874Y011645D01*
+X017802Y011723D02*
+X017753Y011723D01*
+X016646Y012508D02*
+X016499Y012508D01*
+X015943Y012744D02*
+X015410Y012744D01*
+X015410Y012822D02*
+X016021Y012822D01*
+X016100Y012901D02*
+X015410Y012901D01*
+X015410Y012979D02*
+X016155Y012979D01*
+X016155Y012956D02*
+X015741Y012542D01*
+X015663Y012464D01*
+X015630Y012384D01*
+X015554Y012460D01*
+X015410Y012604D01*
+X015410Y013506D01*
+X015429Y013524D01*
+X015429Y013495D01*
+X015725Y013495D01*
+X015725Y013415D01*
+X015429Y013415D01*
+X015429Y013220D01*
+X015438Y013184D01*
+X015456Y013153D01*
+X015483Y013126D01*
+X015514Y013108D01*
+X015550Y013098D01*
+X015725Y013098D01*
+X015725Y013415D01*
+X015805Y013415D01*
+X015805Y013098D01*
+X015981Y013098D01*
+X016016Y013108D01*
+X016029Y013115D01*
+X016034Y013103D01*
+X016102Y013035D01*
+X016155Y013013D01*
+X016155Y012956D01*
+X016079Y013058D02*
+X015410Y013058D01*
+X015410Y013136D02*
+X015473Y013136D01*
+X015430Y013215D02*
+X015410Y013215D01*
+X015410Y013293D02*
+X015429Y013293D01*
+X015429Y013372D02*
+X015410Y013372D01*
+X015410Y013450D02*
+X015725Y013450D01*
+X015725Y013372D02*
+X015805Y013372D01*
+X015805Y013293D02*
+X015725Y013293D01*
+X015725Y013215D02*
+X015805Y013215D01*
+X015805Y013136D02*
+X015725Y013136D01*
+X015864Y012665D02*
+X015410Y012665D01*
+X015428Y012587D02*
+X015786Y012587D01*
+X015741Y012542D02*
+X015741Y012542D01*
+X015707Y012508D02*
+X015506Y012508D01*
+X015585Y012430D02*
+X015649Y012430D01*
+X014990Y012006D02*
+X014990Y012002D01*
+X014445Y012002D01*
+X014357Y011965D01*
+X014289Y011898D01*
+X014253Y011810D01*
+X014253Y011648D01*
+X014037Y011864D01*
+X014030Y011871D01*
+X014038Y011879D01*
+X014099Y012026D01*
+X014099Y012184D01*
+X014038Y012331D01*
+X013926Y012443D01*
+X013779Y012504D01*
+X013771Y012504D01*
+X013771Y012769D01*
+X013746Y012830D01*
+X013771Y012891D01*
+X013771Y013020D01*
+X013824Y012967D01*
+X013971Y012906D01*
+X014129Y012906D01*
+X014276Y012967D01*
+X014388Y013079D01*
+X014449Y013226D01*
+X014449Y013384D01*
+X014388Y013531D01*
+X014276Y013643D01*
+X014129Y013704D01*
+X014108Y013704D01*
+X014254Y013850D01*
+X014355Y013951D01*
+X014410Y014083D01*
+X014410Y014495D01*
+X015115Y014495D01*
+X015115Y014229D01*
+X014745Y013859D01*
+X014690Y013727D01*
+X014690Y012383D01*
+X014745Y012251D01*
+X014846Y012150D01*
+X014990Y012006D01*
+X014959Y012037D02*
+X014099Y012037D01*
+X014099Y012116D02*
+X014880Y012116D01*
+X014846Y012150D02*
+X014846Y012150D01*
+X014802Y012194D02*
+X014095Y012194D01*
+X014062Y012273D02*
+X014736Y012273D01*
+X014703Y012351D02*
+X014018Y012351D01*
+X013939Y012430D02*
+X014690Y012430D01*
+X014690Y012508D02*
+X013771Y012508D01*
+X013771Y012587D02*
+X014690Y012587D01*
+X014690Y012665D02*
+X013771Y012665D01*
+X013771Y012744D02*
+X014690Y012744D01*
+X014690Y012822D02*
+X013750Y012822D01*
+X013771Y012901D02*
+X014690Y012901D01*
+X014690Y012979D02*
+X014288Y012979D01*
+X014366Y013058D02*
+X014690Y013058D01*
+X014690Y013136D02*
+X014412Y013136D01*
+X014444Y013215D02*
+X014690Y013215D01*
+X014690Y013293D02*
+X014449Y013293D01*
+X014449Y013372D02*
+X014690Y013372D01*
+X014690Y013450D02*
+X014422Y013450D01*
+X014389Y013529D02*
+X014690Y013529D01*
+X014690Y013607D02*
+X014312Y013607D01*
+X014173Y013686D02*
+X014690Y013686D01*
+X014706Y013764D02*
+X014168Y013764D01*
+X014247Y013843D02*
+X014738Y013843D01*
+X014807Y013921D02*
+X014325Y013921D01*
+X014375Y014000D02*
+X014885Y014000D01*
+X014964Y014078D02*
+X014408Y014078D01*
+X014410Y014157D02*
+X015042Y014157D01*
+X015115Y014235D02*
+X014410Y014235D01*
+X014410Y014314D02*
+X015115Y014314D01*
+X015115Y014392D02*
+X014410Y014392D01*
+X014410Y014471D02*
+X015115Y014471D01*
+X013335Y013155D02*
+X013335Y012540D01*
+X013300Y012505D01*
+X013335Y012505D01*
+X013300Y012505D02*
+X013250Y012455D01*
+X013771Y012979D02*
+X013812Y012979D01*
+X014071Y011959D02*
+X014350Y011959D01*
+X014282Y011880D02*
+X014038Y011880D01*
+X014099Y011802D02*
+X014253Y011802D01*
+X014253Y011723D02*
+X014178Y011723D01*
+X013320Y010860D02*
+X013091Y010860D01*
+X013170Y010781D02*
+X013320Y010781D01*
+X013320Y010703D02*
+X013248Y010703D01*
+X012115Y010720D02*
+X012100Y010705D01*
+X011500Y010720D02*
+X011385Y010720D01*
+X011350Y010755D01*
+X009675Y010825D02*
+X009595Y010825D01*
+X009595Y010865D01*
+X009675Y010865D01*
+X009675Y010825D01*
+X009675Y010860D02*
+X009595Y010860D01*
+X009371Y011245D02*
+X009366Y011257D01*
+X009371Y011245D02*
+X009384Y011252D01*
+X008965Y011190D02*
+X008965Y010905D01*
+X008965Y011190D02*
+X008800Y011355D01*
+X008800Y011555D01*
+X008810Y011555D01*
+X008810Y011811D02*
+X008456Y011811D01*
+X008350Y011705D01*
+X008350Y010855D01*
+X008350Y009905D01*
+X008900Y009355D01*
+X009299Y009368D02*
+X009370Y009368D01*
+X009370Y009290D02*
+X009299Y009290D01*
+X009299Y009276D02*
+X009299Y009434D01*
+X009238Y009581D01*
+X009126Y009693D01*
+X008979Y009754D01*
+X008897Y009754D01*
+X008630Y010021D01*
+X008630Y010211D01*
+X008674Y010167D01*
+X008821Y010106D01*
+X008979Y010106D01*
+X009126Y010167D01*
+X009144Y010185D01*
+X009252Y010185D01*
+X009251Y010184D01*
+X009251Y010026D01*
+X009312Y009879D01*
+X009370Y009821D01*
+X009370Y009220D01*
+X009325Y009201D01*
+X009276Y009222D01*
+X009299Y009276D01*
+X009302Y009211D02*
+X009348Y009211D01*
+X009370Y009447D02*
+X009294Y009447D01*
+X009261Y009525D02*
+X009370Y009525D01*
+X009370Y009604D02*
+X009215Y009604D01*
+X009137Y009682D02*
+X009370Y009682D01*
+X009370Y009761D02*
+X008890Y009761D01*
+X008812Y009839D02*
+X009352Y009839D01*
+X009296Y009918D02*
+X008733Y009918D01*
+X008655Y009996D02*
+X009264Y009996D01*
+X009251Y010075D02*
+X008630Y010075D01*
+X008630Y010153D02*
+X008708Y010153D01*
+X009092Y010153D02*
+X009251Y010153D01*
+X009930Y009525D02*
+X010393Y009525D01*
+X010393Y009447D02*
+X009930Y009447D01*
+X009930Y009368D02*
+X010395Y009368D01*
+X010324Y009290D02*
+X009930Y009290D01*
+X009952Y009211D02*
+X010293Y009211D01*
+X010293Y009133D02*
+X010060Y009133D01*
+X010098Y009054D02*
+X010293Y009054D01*
+X010293Y008976D02*
+X010107Y008976D01*
+X010107Y008897D02*
+X010293Y008897D01*
+X010293Y008819D02*
+X010107Y008819D01*
+X010107Y008740D02*
+X010293Y008740D01*
+X010320Y008662D02*
+X010107Y008662D01*
+X010107Y008583D02*
+X010351Y008583D01*
+X010351Y008505D02*
+X010090Y008505D01*
+X010007Y008269D02*
+X010422Y008269D01*
+X010412Y008279D02*
+X010351Y008426D01*
+X010501Y008191D02*
+X010007Y008191D01*
+X010135Y008120D02*
+X010150Y008105D01*
+X010200Y008055D01*
+X010135Y008120D02*
+X009650Y008120D01*
+X009690Y008112D02*
+X010657Y008112D01*
+X010843Y008112D02*
+X011770Y008112D01*
+X011770Y008034D02*
+X010007Y008034D01*
+X010007Y007955D02*
+X011770Y007955D01*
+X011770Y007877D02*
+X009999Y007877D01*
+X009929Y007798D02*
+X011770Y007798D01*
+X011770Y007720D02*
+X009351Y007720D01*
+X009610Y007798D02*
+X009690Y007798D01*
+X009690Y007877D02*
+X009610Y007877D01*
+X009610Y007955D02*
+X009690Y007955D01*
+X009690Y008034D02*
+X009610Y008034D01*
+X009000Y008120D02*
+X008615Y008120D01*
+X008400Y007905D01*
+X008400Y007305D01*
+X008000Y007805D02*
+X008050Y007855D01*
+X008050Y008905D01*
+X008413Y008740D02*
+X008543Y008740D01*
+X008543Y008662D02*
+X008370Y008662D01*
+X008330Y008583D02*
+X008543Y008583D01*
+X008560Y008505D02*
+X008330Y008505D01*
+X008330Y008426D02*
+X008569Y008426D01*
+X008447Y008348D02*
+X008330Y008348D01*
+X008330Y008269D02*
+X008368Y008269D01*
+X007985Y007855D02*
+X007985Y007820D01*
+X008000Y007805D01*
+X007428Y007933D02*
+X007350Y007855D01*
+X007315Y007855D01*
+X007428Y007933D02*
+X007428Y008555D01*
+X007684Y008555D02*
+X007684Y008521D01*
+X007699Y008506D01*
+X007700Y008505D01*
+X007699Y008506D02*
+X007699Y008654D01*
+X007700Y008655D01*
+X007684Y008671D01*
+X007684Y009205D01*
+X007714Y009133D02*
+X007581Y009133D01*
+X007684Y009121D02*
+X007684Y008555D01*
+X007275Y009133D02*
+X007069Y009133D01*
+X006763Y009133D02*
+X006196Y009133D01*
+X006152Y009054D02*
+X006657Y009054D01*
+X006620Y008976D02*
+X006157Y008976D01*
+X006157Y008897D02*
+X006612Y008897D01*
+X006359Y009211D02*
+X007792Y009211D01*
+X007795Y009368D02*
+X008491Y009368D01*
+X008412Y009447D02*
+X007878Y009447D01*
+X007888Y009525D02*
+X008334Y009525D01*
+X008255Y009604D02*
+X007888Y009604D01*
+X007888Y009682D02*
+X008177Y009682D01*
+X008107Y009761D02*
+X007888Y009761D01*
+X007888Y009839D02*
+X008074Y009839D01*
+X007888Y009855D02*
+X007732Y009855D01*
+X007732Y009855D01*
+X007888Y009855D01*
+X007684Y009855D02*
+X007684Y009405D01*
+X007610Y009290D02*
+X007936Y009290D01*
+X007428Y009855D02*
+X007428Y010283D01*
+X007500Y010355D01*
+X007950Y010355D01*
+X008050Y010255D01*
+X007950Y010705D02*
+X008000Y010755D01*
+X008250Y010755D01*
+X008350Y010855D01*
+X007950Y010720D02*
+X007950Y010705D01*
+X007935Y010720D01*
+X007300Y010720D01*
+X007100Y010355D02*
+X006650Y010355D01*
+X006550Y010255D01*
+X007100Y010355D02*
+X007172Y010283D01*
+X007172Y009855D01*
+X006916Y009855D02*
+X006916Y009855D01*
+X006850Y009855D01*
+X006615Y009447D02*
+X006594Y009447D01*
+X006647Y009368D02*
+X006516Y009368D01*
+X006437Y009290D02*
+X006734Y009290D01*
+X006650Y010720D02*
+X006285Y010720D01*
+X006150Y010855D01*
+X006193Y011409D02*
+X005471Y011409D01*
+X005471Y011488D02*
+X006193Y011488D01*
+X005957Y011566D02*
+X005465Y011566D01*
+X005572Y011645D02*
+X005877Y011645D01*
+X005845Y011723D02*
+X005682Y011723D01*
+X005400Y012005D02*
+X006250Y012005D01*
+X006300Y011955D01*
+X006300Y011970D01*
+X005862Y012351D02*
+X005607Y012351D01*
+X005249Y012665D02*
+X005051Y012665D01*
+X004950Y013055D02*
+X004550Y013055D01*
+X004535Y013070D01*
+X004550Y013070D01*
+X003915Y013070D01*
+X003900Y013055D01*
+X003900Y013070D01*
+X004500Y013105D02*
+X004535Y013070D01*
+X004550Y013740D02*
+X004550Y014105D01*
+X003900Y014155D02*
+X003900Y013740D01*
+X003250Y013740D02*
+X003250Y014155D01*
+X003300Y014155D01*
+X002650Y014155D02*
+X002600Y014105D01*
+X002600Y013740D01*
+X001950Y013740D02*
+X001950Y014205D01*
+X002200Y014455D01*
+X006000Y014455D01*
+X006750Y015205D01*
+X008100Y015205D01*
+X007709Y014628D02*
+X007541Y014628D01*
+X007600Y014605D02*
+X007600Y014205D01*
+X007553Y014158D01*
+X007553Y013705D01*
+X007300Y013705D02*
+X007300Y014305D01*
+X007050Y014105D02*
+X007050Y013655D01*
+X007041Y013664D01*
+X007041Y013705D01*
+X006800Y013655D02*
+X006800Y013555D01*
+X006785Y013570D01*
+X006785Y013705D01*
+X006800Y013555D02*
+X006800Y013255D01*
+X006900Y013155D01*
+X007050Y013155D01*
+X006800Y013255D02*
+X006700Y013155D01*
+X006300Y013155D01*
+X005850Y013155D02*
+X005762Y013243D01*
+X005762Y013705D01*
+X006000Y013705D02*
+X006000Y014255D01*
+X006500Y014255D01*
+X006900Y014255D02*
+X007050Y014105D01*
+X007297Y013705D02*
+X007300Y013705D01*
+X007950Y013705D02*
+X007950Y014305D01*
+X007630Y014549D02*
+X007620Y014549D01*
+X008462Y014117D02*
+X008550Y014205D01*
+X008462Y014117D02*
+X008462Y013705D01*
+X008700Y013705D02*
+X008700Y013205D01*
+X009250Y013205D01*
+X008700Y013205D02*
+X008300Y013205D01*
+X008200Y013305D01*
+X008050Y013155D01*
+X007600Y013155D01*
+X008200Y013305D02*
+X008200Y013705D01*
+X008206Y013705D01*
+X008700Y013705D02*
+X008718Y013705D01*
+X008950Y014205D02*
+X009150Y014205D01*
+X009441Y014471D02*
+X009495Y014471D01*
+X009548Y014549D02*
+X009430Y014549D01*
+X008825Y015330D02*
+X008950Y015455D01*
+X009000Y015455D01*
+X010609Y016918D02*
+X010609Y016918D01*
+X012190Y016590D02*
+X012310Y016590D01*
+X012690Y016590D02*
+X012810Y016590D01*
+X013190Y016590D02*
+X013310Y016590D01*
+X013226Y017768D02*
+X015255Y017768D01*
+X015251Y017846D02*
+X013266Y017846D01*
+X013298Y017925D02*
+X015251Y017925D01*
+X015280Y018003D02*
+X013299Y018003D01*
+X013299Y018082D02*
+X015313Y018082D01*
+X015391Y018160D02*
+X013267Y018160D01*
+X013230Y018239D02*
+X015534Y018239D01*
+X015558Y018396D02*
+X016242Y018396D01*
+X016064Y018474D02*
+X015736Y018474D01*
+X015814Y018553D02*
+X015986Y018553D01*
+X015909Y018631D02*
+X015891Y018631D01*
+X015242Y018396D02*
+X014558Y018396D01*
+X014736Y018474D02*
+X015064Y018474D01*
+X014986Y018553D02*
+X014814Y018553D01*
+X014891Y018631D02*
+X014909Y018631D01*
+X014899Y019259D02*
+X014901Y019259D01*
+X014966Y019338D02*
+X014834Y019338D01*
+X014756Y019416D02*
+X015044Y019416D01*
+X015194Y019495D02*
+X014606Y019495D01*
+X014194Y019495D02*
+X012606Y019495D01*
+X012756Y019416D02*
+X013274Y019416D01*
+X013360Y019416D02*
+X013440Y019416D01*
+X013440Y019338D02*
+X013360Y019338D01*
+X013360Y019259D02*
+X013440Y019259D01*
+X013440Y019181D02*
+X013360Y019181D01*
+X013360Y019102D02*
+X013440Y019102D01*
+X013440Y019024D02*
+X013360Y019024D01*
+X013360Y018867D02*
+X013440Y018867D01*
+X013440Y018788D02*
+X013360Y018788D01*
+X013360Y018710D02*
+X013440Y018710D01*
+X013440Y018631D02*
+X013360Y018631D01*
+X013360Y018553D02*
+X013440Y018553D01*
+X013658Y018553D02*
+X013986Y018553D01*
+X013909Y018631D02*
+X013751Y018631D01*
+X013811Y018710D02*
+X013877Y018710D01*
+X014064Y018474D02*
+X012940Y018474D01*
+X012862Y018553D02*
+X013142Y018553D01*
+X013049Y018631D02*
+X012891Y018631D01*
+X012923Y018710D02*
+X012989Y018710D01*
+X013019Y018396D02*
+X014242Y018396D01*
+X013152Y018317D02*
+X020382Y018317D01*
+X020373Y018396D02*
+X017829Y018396D01*
+X017933Y018474D02*
+X020373Y018474D01*
+X020373Y018553D02*
+X017970Y018553D01*
+X017977Y018631D02*
+X019447Y018631D01*
+X019486Y018603D02*
+X019714Y018603D01*
+X019899Y018738D01*
+X019970Y018955D01*
+X019899Y019172D01*
+X019714Y019307D01*
+X019486Y019307D01*
+X019301Y019172D01*
+X019230Y018955D01*
+X019301Y018738D01*
+X019486Y018603D01*
+X019339Y018710D02*
+X017977Y018710D01*
+X017977Y018788D02*
+X019284Y018788D01*
+X019259Y018867D02*
+X017977Y018867D01*
+X017977Y018945D02*
+X019233Y018945D01*
+X019252Y019024D02*
+X017977Y019024D01*
+X017977Y019102D02*
+X019278Y019102D01*
+X019312Y019181D02*
+X017977Y019181D01*
+X017977Y019259D02*
+X019420Y019259D01*
+X019780Y019259D02*
+X030348Y019259D01*
+X030338Y019181D02*
+X019888Y019181D01*
+X019922Y019102D02*
+X030363Y019102D01*
+X030357Y019024D02*
+X030389Y019024D01*
+X030517Y018867D02*
+X030567Y018867D01*
+X030527Y018788D02*
+X032200Y018788D01*
+X032200Y018710D02*
+X030527Y018710D01*
+X030527Y018631D02*
+X032200Y018631D01*
+X032200Y018553D02*
+X030527Y018553D01*
+X030527Y018474D02*
+X032200Y018474D01*
+X032200Y018396D02*
+X030527Y018396D01*
+X030527Y018317D02*
+X032200Y018317D01*
+X032200Y018239D02*
+X030527Y018239D01*
+X030527Y018160D02*
+X032200Y018160D01*
+X032200Y018082D02*
+X030527Y018082D01*
+X030500Y018003D02*
+X032200Y018003D01*
+X032200Y017925D02*
+X030434Y017925D01*
+X030376Y017846D02*
+X032200Y017846D01*
+X032200Y017768D02*
+X030446Y017768D01*
+X030478Y017689D02*
+X032200Y017689D01*
+X032200Y017611D02*
+X030511Y017611D01*
+X030527Y017532D02*
+X032200Y017532D01*
+X032200Y017454D02*
+X030527Y017454D01*
+X030527Y017375D02*
+X032200Y017375D01*
+X032200Y017297D02*
+X030509Y017297D01*
+X030477Y017218D02*
+X032200Y017218D01*
+X032200Y017140D02*
+X030444Y017140D01*
+X030373Y017061D02*
+X032200Y017061D01*
+X032200Y016983D02*
+X030294Y016983D01*
+X030129Y016904D02*
+X032200Y016904D01*
+X032200Y016826D02*
+X029730Y016826D01*
+X029730Y016904D02*
+X029771Y016904D01*
+X029730Y016747D02*
+X032200Y016747D01*
+X032200Y016669D02*
+X029730Y016669D01*
+X029730Y016590D02*
+X032200Y016590D01*
+X032200Y016512D02*
+X029714Y016512D01*
+X029674Y016433D02*
+X032200Y016433D01*
+X032200Y016355D02*
+X029596Y016355D01*
+X029517Y016276D02*
+X030307Y016276D01*
+X030324Y016293D02*
+X030212Y016181D01*
+X030201Y016154D01*
+X030071Y016154D01*
+X029924Y016093D01*
+X029812Y015981D01*
+X029751Y015834D01*
+X029751Y015676D01*
+X029812Y015529D01*
+X029924Y015417D01*
+X030071Y015356D01*
+X030229Y015356D01*
+X030376Y015417D01*
+X030488Y015529D01*
+X030499Y015556D01*
+X030629Y015556D01*
+X030776Y015617D01*
+X030888Y015729D01*
+X030949Y015876D01*
+X030949Y016034D01*
+X030888Y016181D01*
+X030776Y016293D01*
+X030629Y016354D01*
+X030471Y016354D01*
+X030324Y016293D01*
+X030229Y016198D02*
+X029439Y016198D01*
+X029360Y016119D02*
+X029987Y016119D01*
+X029872Y016041D02*
+X029282Y016041D01*
+X029203Y015962D02*
+X029804Y015962D01*
+X029772Y015884D02*
+X029125Y015884D01*
+X029046Y015805D02*
+X029751Y015805D01*
+X029751Y015727D02*
+X028968Y015727D01*
+X028971Y015648D02*
+X029763Y015648D01*
+X029795Y015570D02*
+X029043Y015570D01*
+X029075Y015491D02*
+X029850Y015491D01*
+X029935Y015413D02*
+X029099Y015413D01*
+X029099Y015334D02*
+X032200Y015334D01*
+X032200Y015256D02*
+X029090Y015256D01*
+X029058Y015177D02*
+X032200Y015177D01*
+X032200Y015099D02*
+X029007Y015099D01*
+X028929Y015020D02*
+X032200Y015020D01*
+X032200Y015413D02*
+X030365Y015413D01*
+X030450Y015491D02*
+X032200Y015491D01*
+X032200Y015570D02*
+X030661Y015570D01*
+X030807Y015648D02*
+X032200Y015648D01*
+X032200Y015727D02*
+X030885Y015727D01*
+X030919Y015805D02*
+X032200Y015805D01*
+X032200Y015884D02*
+X030949Y015884D01*
+X030949Y015962D02*
+X032200Y015962D01*
+X032200Y016041D02*
+X030946Y016041D01*
+X030914Y016119D02*
+X032200Y016119D01*
+X032200Y016198D02*
+X030871Y016198D01*
+X030793Y016276D02*
+X032200Y016276D01*
+X029966Y014785D02*
+X028809Y014785D01*
+X028809Y014706D02*
+X029887Y014706D01*
+X029840Y014628D02*
+X028809Y014628D01*
+X028809Y014549D02*
+X029807Y014549D01*
+X029801Y014471D02*
+X028809Y014471D01*
+X028809Y014392D02*
+X029801Y014392D01*
+X029827Y014314D02*
+X028809Y014314D01*
+X028809Y014235D02*
+X029860Y014235D01*
+X029935Y014157D02*
+X028809Y014157D01*
+X028841Y014078D02*
+X030068Y014078D01*
+X028365Y013450D02*
+X027407Y013450D01*
+X027407Y013529D02*
+X028263Y013529D01*
+X028200Y013607D02*
+X027407Y013607D01*
+X027407Y013686D02*
+X028168Y013686D01*
+X028151Y013764D02*
+X027407Y013764D01*
+X027403Y013843D02*
+X028151Y013843D01*
+X028166Y013921D02*
+X027371Y013921D01*
+X026950Y013590D02*
+X026950Y015005D01*
+X026900Y015055D01*
+X026900Y015105D01*
+X026670Y014745D02*
+X026349Y014745D01*
+X026349Y014626D01*
+X026288Y014479D01*
+X026245Y014436D01*
+X026245Y014245D01*
+X026325Y014245D01*
+X026621Y014245D01*
+X026621Y014440D01*
+X026612Y014476D01*
+X026594Y014507D01*
+X026567Y014534D01*
+X026536Y014552D01*
+X026500Y014562D01*
+X026325Y014562D01*
+X026325Y014245D01*
+X026325Y014165D01*
+X026621Y014165D01*
+X026621Y014000D01*
+X026670Y014020D01*
+X026670Y014745D01*
+X026670Y014706D02*
+X026349Y014706D01*
+X026349Y014628D02*
+X026670Y014628D01*
+X026670Y014549D02*
+X026541Y014549D01*
+X026613Y014471D02*
+X026670Y014471D01*
+X026670Y014392D02*
+X026621Y014392D01*
+X026621Y014314D02*
+X026670Y014314D01*
+X026670Y014235D02*
+X026325Y014235D01*
+X026325Y014314D02*
+X026245Y014314D01*
+X026245Y014392D02*
+X026325Y014392D01*
+X026325Y014471D02*
+X026279Y014471D01*
+X026317Y014549D02*
+X026325Y014549D01*
+X026621Y014157D02*
+X026670Y014157D01*
+X026670Y014078D02*
+X026621Y014078D01*
+X026265Y013590D02*
+X026000Y013855D01*
+X025950Y013855D01*
+X025600Y014205D01*
+X025615Y014205D01*
+X025669Y014205D01*
+X025179Y014314D02*
+X025112Y014314D01*
+X025112Y014392D02*
+X025179Y014392D01*
+X025179Y014471D02*
+X025112Y014471D01*
+X025112Y014549D02*
+X025212Y014549D01*
+X025289Y014628D02*
+X025089Y014628D01*
+X025600Y013605D02*
+X025615Y013590D01*
+X026250Y013555D02*
+X026285Y013590D01*
+X026265Y013590D01*
+X026250Y013555D02*
+X026285Y013555D01*
+X027900Y015055D02*
+X029450Y016605D01*
+X029450Y017755D01*
+X029950Y018255D01*
+X029950Y018455D01*
+X029543Y019024D02*
+X029086Y019024D01*
+X029276Y018945D02*
+X029426Y018945D01*
+X029383Y018867D02*
+X029355Y018867D01*
+X028814Y019024D02*
+X028086Y019024D01*
+X028276Y018945D02*
+X028624Y018945D01*
+X028545Y018867D02*
+X028355Y018867D01*
+X028434Y018788D02*
+X028466Y018788D01*
+X028450Y018153D02*
+X028460Y018128D01*
+X028623Y017965D01*
+X028778Y017901D01*
+X028767Y017898D01*
+X028700Y017863D01*
+X028639Y017819D01*
+X028586Y017766D01*
+X028542Y017705D01*
+X028507Y017638D01*
+X028484Y017567D01*
+X028473Y017495D01*
+X028910Y017495D01*
+X028910Y017415D01*
+X028990Y017415D01*
+X028990Y016978D01*
+X029062Y016989D01*
+X029133Y017012D01*
+X029170Y017031D01*
+X029170Y016721D01*
+X027953Y015504D01*
+X027821Y015504D01*
+X027727Y015465D01*
+X026421Y015465D01*
+X026421Y015869D01*
+X026385Y015957D01*
+X026317Y016025D01*
+X026229Y016062D01*
+X025939Y016062D01*
+X025730Y016271D01*
+X025730Y017031D01*
+X025767Y017012D01*
+X025838Y016989D01*
+X025910Y016978D01*
+X025910Y017415D01*
+X025990Y017415D01*
+X025990Y016978D01*
+X026062Y016989D01*
+X026133Y017012D01*
+X026193Y017043D01*
+X026213Y016996D01*
+X026501Y016708D01*
+X026501Y016626D01*
+X026562Y016479D01*
+X026674Y016367D01*
+X026821Y016306D01*
+X026979Y016306D01*
+X027126Y016367D01*
+X027238Y016479D01*
+X027299Y016626D01*
+X027299Y016784D01*
+X027238Y016931D01*
+X027149Y017020D01*
+X027200Y017047D01*
+X027261Y017091D01*
+X027314Y017144D01*
+X027358Y017205D01*
+X027393Y017272D01*
+X027416Y017343D01*
+X027427Y017415D01*
+X026990Y017415D01*
+X026990Y017495D01*
+X027427Y017495D01*
+X027416Y017567D01*
+X027393Y017638D01*
+X027358Y017705D01*
+X027314Y017766D01*
+X027261Y017819D01*
+X027200Y017863D01*
+X027133Y017898D01*
+X027122Y017901D01*
+X027277Y017965D01*
+X027440Y018128D01*
+X027450Y018153D01*
+X027460Y018128D01*
+X027623Y017965D01*
+X027778Y017901D01*
+X027767Y017898D01*
+X027700Y017863D01*
+X027639Y017819D01*
+X027586Y017766D01*
+X027542Y017705D01*
+X027507Y017638D01*
+X027484Y017567D01*
+X027473Y017495D01*
+X027910Y017495D01*
+X027910Y017415D01*
+X027990Y017415D01*
+X027990Y017495D01*
+X028427Y017495D01*
+X028416Y017567D01*
+X028393Y017638D01*
+X028358Y017705D01*
+X028314Y017766D01*
+X028261Y017819D01*
+X028200Y017863D01*
+X028133Y017898D01*
+X028122Y017901D01*
+X028277Y017965D01*
+X028440Y018128D01*
+X028450Y018153D01*
+X028393Y018082D02*
+X028507Y018082D01*
+X028585Y018003D02*
+X028315Y018003D01*
+X028178Y017925D02*
+X028722Y017925D01*
+X028676Y017846D02*
+X028224Y017846D01*
+X028313Y017768D02*
+X028587Y017768D01*
+X028533Y017689D02*
+X028367Y017689D01*
+X028402Y017611D02*
+X028498Y017611D01*
+X028479Y017532D02*
+X028421Y017532D01*
+X028427Y017415D02*
+X027990Y017415D01*
+X027990Y016978D01*
+X028062Y016989D01*
+X028133Y017012D01*
+X028200Y017047D01*
+X028261Y017091D01*
+X028314Y017144D01*
+X028358Y017205D01*
+X028393Y017272D01*
+X028416Y017343D01*
+X028427Y017415D01*
+X028421Y017375D02*
+X028479Y017375D01*
+X028484Y017343D02*
+X028507Y017272D01*
+X028542Y017205D01*
+X028586Y017144D01*
+X028639Y017091D01*
+X028700Y017047D01*
+X028767Y017012D01*
+X028838Y016989D01*
+X028910Y016978D01*
+X028910Y017415D01*
+X028473Y017415D01*
+X028484Y017343D01*
+X028499Y017297D02*
+X028401Y017297D01*
+X028365Y017218D02*
+X028535Y017218D01*
+X028590Y017140D02*
+X028310Y017140D01*
+X028220Y017061D02*
+X028680Y017061D01*
+X028881Y016983D02*
+X028019Y016983D01*
+X027990Y016983D02*
+X027910Y016983D01*
+X027910Y016978D02*
+X027910Y017415D01*
+X027473Y017415D01*
+X027484Y017343D01*
+X027507Y017272D01*
+X027542Y017205D01*
+X027586Y017144D01*
+X027639Y017091D01*
+X027700Y017047D01*
+X027767Y017012D01*
+X027838Y016989D01*
+X027910Y016978D01*
+X027881Y016983D02*
+X027186Y016983D01*
+X027220Y017061D02*
+X027680Y017061D01*
+X027590Y017140D02*
+X027310Y017140D01*
+X027365Y017218D02*
+X027535Y017218D01*
+X027499Y017297D02*
+X027401Y017297D01*
+X027421Y017375D02*
+X027479Y017375D01*
+X027479Y017532D02*
+X027421Y017532D01*
+X027402Y017611D02*
+X027498Y017611D01*
+X027533Y017689D02*
+X027367Y017689D01*
+X027313Y017768D02*
+X027587Y017768D01*
+X027676Y017846D02*
+X027224Y017846D01*
+X027178Y017925D02*
+X027722Y017925D01*
+X027585Y018003D02*
+X027315Y018003D01*
+X027393Y018082D02*
+X027507Y018082D01*
+X026950Y018355D02*
+X026450Y017855D01*
+X026450Y017155D01*
+X026900Y016705D01*
+X026608Y016433D02*
+X025730Y016433D01*
+X025730Y016355D02*
+X026704Y016355D01*
+X026549Y016512D02*
+X025730Y016512D01*
+X025730Y016590D02*
+X026516Y016590D01*
+X026501Y016669D02*
+X025730Y016669D01*
+X025730Y016747D02*
+X026462Y016747D01*
+X026383Y016826D02*
+X025730Y016826D01*
+X025730Y016904D02*
+X026305Y016904D01*
+X026226Y016983D02*
+X026019Y016983D01*
+X025990Y016983D02*
+X025910Y016983D01*
+X025881Y016983D02*
+X025730Y016983D01*
+X025910Y017061D02*
+X025990Y017061D01*
+X025990Y017140D02*
+X025910Y017140D01*
+X025910Y017218D02*
+X025990Y017218D01*
+X025990Y017297D02*
+X025910Y017297D01*
+X025910Y017375D02*
+X025990Y017375D01*
+X025170Y016983D02*
+X025019Y016983D01*
+X024990Y016983D02*
+X024910Y016983D01*
+X024881Y016983D02*
+X024880Y016983D01*
+X024910Y017061D02*
+X024990Y017061D01*
+X024990Y017140D02*
+X024910Y017140D01*
+X024910Y017218D02*
+X024990Y017218D01*
+X024990Y017297D02*
+X024910Y017297D01*
+X024910Y017375D02*
+X024990Y017375D01*
+X024910Y017454D02*
+X023990Y017454D01*
+X023990Y017415D02*
+X024427Y017415D01*
+X024416Y017343D01*
+X024393Y017272D01*
+X024358Y017205D01*
+X024314Y017144D01*
+X024261Y017091D01*
+X024200Y017047D01*
+X024133Y017012D01*
+X024062Y016989D01*
+X023990Y016978D01*
+X023990Y017415D01*
+X023990Y017375D02*
+X023910Y017375D01*
+X023910Y017415D02*
+X023910Y016978D01*
+X023838Y016989D01*
+X023767Y017012D01*
+X023700Y017047D01*
+X023639Y017091D01*
+X023586Y017144D01*
+X023542Y017205D01*
+X023507Y017272D01*
+X023484Y017343D01*
+X023473Y017415D01*
+X023910Y017415D01*
+X023910Y017454D02*
+X022990Y017454D01*
+X022990Y017415D02*
+X023427Y017415D01*
+X023416Y017343D01*
+X023393Y017272D01*
+X023358Y017205D01*
+X023314Y017144D01*
+X023261Y017091D01*
+X023200Y017047D01*
+X023133Y017012D01*
+X023062Y016989D01*
+X022990Y016978D01*
+X022990Y017415D01*
+X022990Y017375D02*
+X022910Y017375D01*
+X022910Y017415D02*
+X022910Y016978D01*
+X022838Y016989D01*
+X022767Y017012D01*
+X022700Y017047D01*
+X022639Y017091D01*
+X022586Y017144D01*
+X022542Y017205D01*
+X022507Y017272D01*
+X022484Y017343D01*
+X022473Y017415D01*
+X022910Y017415D01*
+X022910Y017454D02*
+X021990Y017454D01*
+X021990Y017415D02*
+X022427Y017415D01*
+X022416Y017343D01*
+X022393Y017272D01*
+X022358Y017205D01*
+X022314Y017144D01*
+X022261Y017091D01*
+X022200Y017047D01*
+X022133Y017012D01*
+X022062Y016989D01*
+X021990Y016978D01*
+X021990Y017415D01*
+X021990Y017375D02*
+X021910Y017375D01*
+X021910Y017415D02*
+X021910Y016978D01*
+X021838Y016989D01*
+X021767Y017012D01*
+X021700Y017047D01*
+X021639Y017091D01*
+X021586Y017144D01*
+X021542Y017205D01*
+X021507Y017272D01*
+X021484Y017343D01*
+X021473Y017415D01*
+X021910Y017415D01*
+X021910Y017454D02*
+X020990Y017454D01*
+X020990Y017415D02*
+X021427Y017415D01*
+X021416Y017343D01*
+X021393Y017272D01*
+X021358Y017205D01*
+X021314Y017144D01*
+X021261Y017091D01*
+X021200Y017047D01*
+X021133Y017012D01*
+X021062Y016989D01*
+X020990Y016978D01*
+X020990Y017415D01*
+X020990Y017375D02*
+X020910Y017375D01*
+X020910Y017415D02*
+X020910Y016978D01*
+X020838Y016989D01*
+X020767Y017012D01*
+X020700Y017047D01*
+X020639Y017091D01*
+X020586Y017144D01*
+X020542Y017205D01*
+X020507Y017272D01*
+X020484Y017343D01*
+X020473Y017415D01*
+X020910Y017415D01*
+X020910Y017454D02*
+X016085Y017454D01*
+X016075Y017532D02*
+X020479Y017532D01*
+X020498Y017611D02*
+X015986Y017611D01*
+X016013Y017689D02*
+X020533Y017689D01*
+X020587Y017768D02*
+X016045Y017768D01*
+X016049Y017846D02*
+X020676Y017846D01*
+X020722Y017925D02*
+X016049Y017925D01*
+X016020Y018003D02*
+X020585Y018003D01*
+X020507Y018082D02*
+X015987Y018082D01*
+X015909Y018160D02*
+X020447Y018160D01*
+X020415Y018239D02*
+X015766Y018239D01*
+X016558Y018396D02*
+X016971Y018396D01*
+X016867Y018474D02*
+X016736Y018474D01*
+X016814Y018553D02*
+X016830Y018553D01*
+X015901Y019259D02*
+X015899Y019259D01*
+X015834Y019338D02*
+X015966Y019338D01*
+X016044Y019416D02*
+X015756Y019416D01*
+X015606Y019495D02*
+X016194Y019495D01*
+X016606Y019495D02*
+X016925Y019495D01*
+X016854Y019416D02*
+X016756Y019416D01*
+X017875Y019495D02*
+X030500Y019495D01*
+X030399Y019416D02*
+X017946Y019416D01*
+X017977Y019338D02*
+X030373Y019338D01*
+X030900Y019495D02*
+X032200Y019495D01*
+X032200Y019573D02*
+X010933Y019573D01*
+X010949Y019495D02*
+X012194Y019495D01*
+X012044Y019416D02*
+X010949Y019416D01*
+X010933Y019338D02*
+X011966Y019338D01*
+X012834Y019338D02*
+X013114Y019338D01*
+X013031Y019259D02*
+X012899Y019259D01*
+X012932Y019181D02*
+X012979Y019181D01*
+X013526Y019416D02*
+X014044Y019416D01*
+X013966Y019338D02*
+X013686Y019338D01*
+X013769Y019259D02*
+X013901Y019259D01*
+X013868Y019181D02*
+X013821Y019181D01*
+X010900Y019652D02*
+X032200Y019652D01*
+X032200Y019730D02*
+X010839Y019730D01*
+X010738Y019809D02*
+X032200Y019809D01*
+X032200Y019887D02*
+X010338Y019887D01*
+X009731Y019887D02*
+X009669Y019887D01*
+X010000Y019505D02*
+X010035Y019470D01*
+X010050Y019455D01*
+X010550Y019455D01*
+X010035Y019470D02*
+X010035Y019455D01*
+X009365Y019455D02*
+X008900Y019455D01*
+X008740Y019887D02*
+X009062Y019887D01*
+X008715Y019966D02*
+X032200Y019966D01*
+X032200Y020044D02*
+X007343Y020044D01*
+X007485Y019966D02*
+X007685Y019966D01*
+X007660Y019887D02*
+X007570Y019887D01*
+X007649Y019809D02*
+X007660Y019809D01*
+X008175Y019809D02*
+X008225Y019809D01*
+X008225Y019887D02*
+X008175Y019887D01*
+X008175Y019966D02*
+X008225Y019966D01*
+X006657Y020044D02*
+X004595Y020044D01*
+X004595Y019966D02*
+X005685Y019966D01*
+X005660Y019887D02*
+X004595Y019887D01*
+X004595Y019809D02*
+X005660Y019809D01*
+X005660Y019652D02*
+X004595Y019652D01*
+X004595Y019730D02*
+X006175Y019730D01*
+X006175Y019652D02*
+X006225Y019652D01*
+X006225Y019573D02*
+X006175Y019573D01*
+X006175Y019495D02*
+X006225Y019495D01*
+X006225Y019416D02*
+X006175Y019416D01*
+X006175Y019338D02*
+X006225Y019338D01*
+X006175Y019259D02*
+X005240Y019259D01*
+X005240Y019280D02*
+X005557Y019280D01*
+X005557Y019455D01*
+X005547Y019491D01*
+X005529Y019522D01*
+X005502Y019549D01*
+X005471Y019567D01*
+X005435Y019576D01*
+X005240Y019576D01*
+X005240Y019280D01*
+X005240Y019338D02*
+X005160Y019338D01*
+X005160Y019416D02*
+X005240Y019416D01*
+X005240Y019495D02*
+X005160Y019495D01*
+X005160Y019573D02*
+X005240Y019573D01*
+X005448Y019573D02*
+X005669Y019573D01*
+X005712Y019495D02*
+X005545Y019495D01*
+X005557Y019416D02*
+X005663Y019416D01*
+X005660Y019338D02*
+X005557Y019338D01*
+X005557Y019181D02*
+X005660Y019181D01*
+X005661Y019102D02*
+X005557Y019102D01*
+X005160Y019259D02*
+X004595Y019259D01*
+X004595Y019181D02*
+X004843Y019181D01*
+X004843Y019102D02*
+X004595Y019102D01*
+X004595Y019024D02*
+X004844Y019024D01*
+X004822Y018945D02*
+X004595Y018945D01*
+X004595Y018867D02*
+X004765Y018867D01*
+X004743Y018788D02*
+X004595Y018788D01*
+X004595Y018710D02*
+X004743Y018710D01*
+X004743Y018631D02*
+X004595Y018631D01*
+X004554Y018553D02*
+X004743Y018553D01*
+X004743Y018474D02*
+X000700Y018474D01*
+X000700Y018396D02*
+X002693Y018396D01*
+X002586Y018317D02*
+X000700Y018317D01*
+X000700Y018239D02*
+X002519Y018239D01*
+X002486Y018160D02*
+X000700Y018160D01*
+X000700Y018082D02*
+X002463Y018082D01*
+X002463Y018003D02*
+X000700Y018003D01*
+X000700Y017925D02*
+X002469Y017925D01*
+X002501Y017846D02*
+X000700Y017846D01*
+X000700Y017768D02*
+X002544Y017768D01*
+X002623Y017689D02*
+X000700Y017689D01*
+X000700Y017611D02*
+X002782Y017611D01*
+X002978Y017611D02*
+X002995Y017611D01*
+X002995Y017532D02*
+X000700Y017532D01*
+X000700Y017454D02*
+X002995Y017454D01*
+X002995Y017375D02*
+X000700Y017375D01*
+X000700Y017297D02*
+X002995Y017297D01*
+X002995Y017218D02*
+X000700Y017218D01*
+X000700Y017140D02*
+X002995Y017140D01*
+X002995Y017061D02*
+X000700Y017061D01*
+X000700Y016983D02*
+X002629Y016983D01*
+X002551Y016904D02*
+X000700Y016904D01*
+X000700Y016826D02*
+X002504Y016826D01*
+X002472Y016747D02*
+X000700Y016747D01*
+X000700Y016669D02*
+X002463Y016669D01*
+X002463Y016590D02*
+X000700Y016590D01*
+X000700Y016512D02*
+X002483Y016512D01*
+X002516Y016433D02*
+X000700Y016433D01*
+X000700Y016355D02*
+X002579Y016355D01*
+X002678Y016276D02*
+X000700Y016276D01*
+X000700Y016198D02*
+X003663Y016198D01*
+X003651Y016276D02*
+X003083Y016276D01*
+X003181Y016355D02*
+X003651Y016355D01*
+X003671Y016433D02*
+X003245Y016433D01*
+X003678Y016512D02*
+X003697Y016512D01*
+X003697Y016590D02*
+X003678Y016590D01*
+X003678Y016669D02*
+X003697Y016669D01*
+X004222Y016693D02*
+X004267Y016712D01*
+X004279Y016712D01*
+X004324Y016667D01*
+X004471Y016606D01*
+X004629Y016606D01*
+X004776Y016667D01*
+X004846Y016737D01*
+X004910Y016711D01*
+X004784Y016585D01*
+X004334Y016585D01*
+X004280Y016639D01*
+X004280Y016693D01*
+X004222Y016693D01*
+X004280Y016669D02*
+X004323Y016669D01*
+X004329Y016590D02*
+X004789Y016590D01*
+X004800Y016605D02*
+X004950Y016755D01*
+X005100Y016755D01*
+X005350Y017005D01*
+X005750Y017005D01*
+X005800Y016955D01*
+X005865Y016955D01*
+X005825Y016983D02*
+X005381Y016983D01*
+X005399Y017026D02*
+X005340Y016885D01*
+X005529Y016885D01*
+X005529Y016915D01*
+X005825Y016915D01*
+X005825Y016995D01*
+X005529Y016995D01*
+X005529Y017121D01*
+X005500Y017133D01*
+X005469Y017120D01*
+X005399Y017120D01*
+X005399Y017026D01*
+X005399Y017061D02*
+X005529Y017061D01*
+X005529Y016904D02*
+X005348Y016904D01*
+X005000Y017105D02*
+X004950Y017105D01*
+X004407Y017648D01*
+X003687Y017648D01*
+X003687Y017333D02*
+X004222Y017333D01*
+X004550Y017005D01*
+X004550Y016955D01*
+X004777Y016669D02*
+X004868Y016669D01*
+X004800Y016605D02*
+X004450Y016605D01*
+X004050Y016305D02*
+X004900Y016305D01*
+X005200Y016605D01*
+X005850Y016605D01*
+X005800Y016555D01*
+X005800Y016155D01*
+X005762Y016117D01*
+X005762Y016105D01*
+X005506Y016105D02*
+X005506Y016105D01*
+X005500Y016105D01*
+X005500Y015655D01*
+X005600Y015555D01*
+X006200Y015455D02*
+X006500Y015455D01*
+X006250Y016605D02*
+X005850Y016605D01*
+X005850Y017605D02*
+X005850Y017655D01*
+X005850Y017705D01*
+X005750Y017705D01*
+X005835Y017655D02*
+X005850Y017655D01*
+X005200Y017705D02*
+X005165Y017740D01*
+X005165Y017655D01*
+X005165Y017770D01*
+X005150Y017755D01*
+X004747Y018317D02*
+X003175Y018317D01*
+X003067Y018396D02*
+X004743Y018396D01*
+X003806Y018553D02*
+X003726Y018553D01*
+X003726Y018511D02*
+X003726Y019300D01*
+X002937Y019300D01*
+X002937Y018633D01*
+X002947Y018597D01*
+X002965Y018565D01*
+X002991Y018539D01*
+X003023Y018521D01*
+X003059Y018511D01*
+X003726Y018511D01*
+X003726Y018631D02*
+X003806Y018631D01*
+X003806Y018710D02*
+X003726Y018710D01*
+X003726Y018788D02*
+X003806Y018788D01*
+X003806Y018867D02*
+X003726Y018867D01*
+X003726Y018945D02*
+X003806Y018945D01*
+X003806Y019024D02*
+X003726Y019024D01*
+X003726Y019102D02*
+X003806Y019102D01*
+X003806Y019181D02*
+X003726Y019181D01*
+X003726Y019259D02*
+X003806Y019259D01*
+X003806Y019338D02*
+X004843Y019338D01*
+X004843Y019416D02*
+X004595Y019416D01*
+X004595Y019495D02*
+X004855Y019495D01*
+X004952Y019573D02*
+X004595Y019573D01*
+X003726Y019338D02*
+X002034Y019338D01*
+X002034Y019259D02*
+X001954Y019259D01*
+X001954Y019300D02*
+X001954Y018511D01*
+X001287Y018511D01*
+X001251Y018521D01*
+X001220Y018539D01*
+X001193Y018565D01*
+X001175Y018597D01*
+X001166Y018633D01*
+X001166Y019300D01*
+X001954Y019300D01*
+X001954Y019338D02*
+X000700Y019338D01*
+X000700Y019416D02*
+X001166Y019416D01*
+X001166Y019495D02*
+X000700Y019495D01*
+X000700Y019573D02*
+X001166Y019573D01*
+X001166Y019652D02*
+X000700Y019652D01*
+X000700Y019730D02*
+X001166Y019730D01*
+X001166Y019809D02*
+X000700Y019809D01*
+X000700Y019887D02*
+X001166Y019887D01*
+X001166Y019966D02*
+X000700Y019966D01*
+X000700Y020044D02*
+X001166Y020044D01*
+X001166Y019259D02*
+X000700Y019259D01*
+X000700Y019181D02*
+X001166Y019181D01*
+X001166Y019102D02*
+X000700Y019102D01*
+X000700Y019024D02*
+X001166Y019024D01*
+X001166Y018945D02*
+X000700Y018945D01*
+X000700Y018867D02*
+X001166Y018867D01*
+X001166Y018788D02*
+X000700Y018788D01*
+X000700Y018710D02*
+X001166Y018710D01*
+X001166Y018631D02*
+X000700Y018631D01*
+X000700Y018553D02*
+X001206Y018553D01*
+X001954Y018553D02*
+X002034Y018553D01*
+X002034Y018631D02*
+X001954Y018631D01*
+X001954Y018710D02*
+X002034Y018710D01*
+X002034Y018788D02*
+X001954Y018788D01*
+X001954Y018867D02*
+X002034Y018867D01*
+X002034Y018945D02*
+X001954Y018945D01*
+X001954Y019024D02*
+X002034Y019024D01*
+X002034Y019102D02*
+X001954Y019102D01*
+X001954Y019181D02*
+X002034Y019181D01*
+X002823Y019181D02*
+X002937Y019181D01*
+X002937Y019259D02*
+X002823Y019259D01*
+X002823Y019102D02*
+X002937Y019102D01*
+X002937Y019024D02*
+X002823Y019024D01*
+X002823Y018945D02*
+X002937Y018945D01*
+X002937Y018867D02*
+X002823Y018867D01*
+X002823Y018788D02*
+X002937Y018788D01*
+X002937Y018710D02*
+X002823Y018710D01*
+X002823Y018631D02*
+X002938Y018631D01*
+X002978Y018553D02*
+X002783Y018553D01*
+X002823Y019416D02*
+X002937Y019416D01*
+X002937Y019495D02*
+X002823Y019495D01*
+X002823Y019573D02*
+X002937Y019573D01*
+X002937Y019652D02*
+X002823Y019652D01*
+X002823Y019730D02*
+X002937Y019730D01*
+X002937Y019809D02*
+X002823Y019809D01*
+X002823Y019887D02*
+X002937Y019887D01*
+X002937Y019966D02*
+X002823Y019966D01*
+X002823Y020044D02*
+X002937Y020044D01*
+X006175Y019966D02*
+X006225Y019966D01*
+X006225Y019887D02*
+X006175Y019887D01*
+X006175Y019809D02*
+X006225Y019809D01*
+X002985Y016119D02*
+X002776Y016119D01*
+X002821Y016041D02*
+X002939Y016041D01*
+X002937Y015962D02*
+X002823Y015962D01*
+X002823Y015884D02*
+X002937Y015884D01*
+X002937Y015805D02*
+X002823Y015805D01*
+X002823Y015727D02*
+X002937Y015727D01*
+X002937Y015648D02*
+X002823Y015648D01*
+X002823Y015570D02*
+X002937Y015570D01*
+X002937Y015491D02*
+X002823Y015491D01*
+X002823Y015413D02*
+X002937Y015413D01*
+X002937Y015256D02*
+X002823Y015256D01*
+X002823Y015177D02*
+X002937Y015177D01*
+X002937Y015099D02*
+X002823Y015099D01*
+X002823Y015020D02*
+X002937Y015020D01*
+X002937Y014942D02*
+X002823Y014942D01*
+X002823Y014863D02*
+X002937Y014863D01*
+X002937Y014785D02*
+X002823Y014785D01*
+X002034Y015491D02*
+X001954Y015491D01*
+X001954Y015570D02*
+X002034Y015570D01*
+X002034Y015648D02*
+X001954Y015648D01*
+X001954Y015727D02*
+X002034Y015727D01*
+X002034Y015805D02*
+X001954Y015805D01*
+X001954Y015884D02*
+X002034Y015884D01*
+X002034Y015962D02*
+X001954Y015962D01*
+X001954Y016041D02*
+X002034Y016041D01*
+X002034Y016119D02*
+X001954Y016119D01*
+X001213Y016119D02*
+X000700Y016119D01*
+X000700Y016041D02*
+X001168Y016041D01*
+X001166Y015962D02*
+X000700Y015962D01*
+X000700Y015884D02*
+X001166Y015884D01*
+X001166Y015805D02*
+X000700Y015805D01*
+X000700Y015727D02*
+X001166Y015727D01*
+X001166Y015648D02*
+X000700Y015648D01*
+X000700Y015570D02*
+X001166Y015570D01*
+X001166Y015491D02*
+X000700Y015491D01*
+X000700Y015413D02*
+X001166Y015413D01*
+X001400Y014205D02*
+X001300Y014105D01*
+X001300Y013740D01*
+X005250Y013705D02*
+X005250Y013155D01*
+X005350Y013055D01*
+X005300Y013105D01*
+X005506Y013705D02*
+X005506Y014161D01*
+X005600Y014255D01*
+X006000Y014255D01*
+X006000Y013705D02*
+X006018Y013705D01*
+X006500Y013755D02*
+X006530Y013725D01*
+X006530Y013705D01*
+X006300Y012640D02*
+X006985Y012640D01*
+X007000Y012655D01*
+X006985Y012640D02*
+X006950Y012640D01*
+X007600Y012640D02*
+X009715Y012640D01*
+X009800Y012555D01*
+X010550Y012555D01*
+X010291Y012273D02*
+X009251Y012273D01*
+X009251Y012351D02*
+X009608Y012351D01*
+X009251Y012194D02*
+X010259Y012194D01*
+X010259Y012116D02*
+X009251Y012116D01*
+X008810Y012067D02*
+X008012Y012067D01*
+X007950Y012005D01*
+X007950Y011405D01*
+X007935Y011390D01*
+X007950Y011390D01*
+X007950Y011405D01*
+X007935Y011390D02*
+X007900Y011355D01*
+X007935Y011390D02*
+X007300Y011390D01*
+X006685Y011390D01*
+X006650Y011355D01*
+X006650Y011390D01*
+X006950Y011970D02*
+X007535Y011970D01*
+X007550Y011955D01*
+X007565Y011970D01*
+X007600Y011970D01*
+X007600Y011955D01*
+X007968Y012323D01*
+X008810Y012323D01*
+X010750Y008970D02*
+X010750Y008505D01*
+X011149Y008505D02*
+X011460Y008505D01*
+X011399Y008583D02*
+X011149Y008583D01*
+X011180Y008662D02*
+X011393Y008662D01*
+X011393Y008740D02*
+X011207Y008740D01*
+X011710Y008662D02*
+X011790Y008662D01*
+X011779Y008583D02*
+X011710Y008583D01*
+X011710Y008505D02*
+X011770Y008505D01*
+X011770Y008269D02*
+X011078Y008269D01*
+X010999Y008191D02*
+X011770Y008191D01*
+X012300Y007855D02*
+X012350Y007905D01*
+X012300Y007855D02*
+X012300Y007205D01*
+X012300Y007155D01*
+X012550Y007205D02*
+X012556Y007205D01*
+X012812Y007205D01*
+X012812Y008667D01*
+X013450Y008155D02*
+X013580Y008025D01*
+X013580Y007205D01*
+X014191Y006699D02*
+X014399Y006699D01*
+X014366Y006621D02*
+X014348Y006621D01*
+X011770Y007170D02*
+X011755Y007170D01*
+X011770Y007249D02*
+X011702Y007249D01*
+X011770Y007327D02*
+X011624Y007327D01*
+X011545Y007406D02*
+X011770Y007406D01*
+X011770Y007484D02*
+X011457Y007484D01*
+X011324Y007563D02*
+X011770Y007563D01*
+X011770Y007641D02*
+X011250Y007641D01*
+X011550Y006005D02*
+X011524Y005979D01*
+X011524Y005955D01*
+X004600Y007055D02*
+X004455Y007055D01*
+X004015Y006775D02*
+X004015Y006657D01*
+X004020Y006645D01*
+X003862Y006645D01*
+X003826Y006635D01*
+X003794Y006617D01*
+X003768Y006591D01*
+X003750Y006559D01*
+X003740Y006523D01*
+X003740Y006345D01*
+X004040Y006345D01*
+X004040Y006265D01*
+X003740Y006265D01*
+X003740Y006087D01*
+X003750Y006051D01*
+X003768Y006019D01*
+X003794Y005993D01*
+X003826Y005975D01*
+X003862Y005965D01*
+X003914Y005965D01*
+X003863Y005914D01*
+X003637Y005914D01*
+X003715Y005836D02*
+X003785Y005836D01*
+X003750Y005801D02*
+X003309Y006242D01*
+X003206Y006285D01*
+X003198Y006285D01*
+X003170Y006353D01*
+X003168Y006355D01*
+X003170Y006357D01*
+X003192Y006410D01*
+X003490Y006410D01*
+X003593Y006452D01*
+X003916Y006775D01*
+X004015Y006775D01*
+X004015Y006699D02*
+X003840Y006699D01*
+X003800Y006621D02*
+X003761Y006621D01*
+X003745Y006542D02*
+X003683Y006542D01*
+X003740Y006464D02*
+X003604Y006464D01*
+X003740Y006385D02*
+X003182Y006385D01*
+X003189Y006307D02*
+X004040Y006307D01*
+X003740Y006228D02*
+X003323Y006228D01*
+X003401Y006150D02*
+X003740Y006150D01*
+X003744Y006071D02*
+X003480Y006071D01*
+X003558Y005993D02*
+X003795Y005993D01*
+X003863Y005914D02*
+X003750Y005801D01*
+X003362Y007013D02*
+X003174Y007013D01*
+X003099Y007092D02*
+X003441Y007092D01*
+X003360Y007877D02*
+X003240Y007877D01*
+X003240Y007955D02*
+X003436Y007955D01*
+X003572Y008034D02*
+X003240Y008034D01*
+X003240Y008112D02*
+X003635Y008112D01*
+X003635Y008191D02*
+X003240Y008191D01*
+X003240Y008269D02*
+X003635Y008269D01*
+X003635Y008348D02*
+X003240Y008348D01*
+X001700Y007055D02*
+X001500Y006855D01*
+X001500Y006355D02*
+X001450Y006305D01*
+X001450Y006355D01*
+X017790Y014942D02*
+X019535Y014942D01*
+X019514Y015020D02*
+X018461Y015020D01*
+X018461Y015099D02*
+X019502Y015099D01*
+X019502Y015177D02*
+X018461Y015177D01*
+X018461Y015256D02*
+X019513Y015256D01*
+X019534Y015334D02*
+X018440Y015334D01*
+X018458Y015648D02*
+X019771Y015648D01*
+X019742Y015570D02*
+X018149Y015570D01*
+X018149Y015491D02*
+X019612Y015491D01*
+X019566Y015413D02*
+X018123Y015413D01*
+X018529Y015727D02*
+X019937Y015727D01*
+X019820Y015491D02*
+X019707Y015491D01*
+X019786Y015413D02*
+X019899Y015413D01*
+X019864Y015334D02*
+X019977Y015334D01*
+X019943Y015256D02*
+X020056Y015256D01*
+X020051Y015020D02*
+X019938Y015020D01*
+X019972Y014942D02*
+X019859Y014942D01*
+X019894Y014863D02*
+X019781Y014863D01*
+X019815Y014785D02*
+X019702Y014785D01*
+X019616Y014785D02*
+X018461Y014785D01*
+X018461Y014863D02*
+X019568Y014863D01*
+X020810Y013921D02*
+X021188Y013921D01*
+X021217Y013843D02*
+X020812Y013843D01*
+X020844Y013764D02*
+X021285Y013764D01*
+X025063Y016355D02*
+X025170Y016355D01*
+X025170Y016433D02*
+X025110Y016433D01*
+X025143Y016512D02*
+X025170Y016512D01*
+X025170Y016590D02*
+X025149Y016590D01*
+X025149Y016669D02*
+X025170Y016669D01*
+X025170Y016747D02*
+X025123Y016747D01*
+X025090Y016826D02*
+X025170Y016826D01*
+X025170Y016904D02*
+X025015Y016904D01*
+X024680Y017061D02*
+X024220Y017061D01*
+X024310Y017140D02*
+X024590Y017140D01*
+X024535Y017218D02*
+X024365Y017218D01*
+X024401Y017297D02*
+X024499Y017297D01*
+X024479Y017375D02*
+X024421Y017375D01*
+X024421Y017532D02*
+X024479Y017532D01*
+X024498Y017611D02*
+X024402Y017611D01*
+X024367Y017689D02*
+X024533Y017689D01*
+X024587Y017768D02*
+X024313Y017768D01*
+X024224Y017846D02*
+X024676Y017846D01*
+X024722Y017925D02*
+X024178Y017925D01*
+X024315Y018003D02*
+X024585Y018003D01*
+X024507Y018082D02*
+X024393Y018082D01*
+X023722Y017925D02*
+X023178Y017925D01*
+X023224Y017846D02*
+X023676Y017846D01*
+X023587Y017768D02*
+X023313Y017768D01*
+X023367Y017689D02*
+X023533Y017689D01*
+X023498Y017611D02*
+X023402Y017611D01*
+X023421Y017532D02*
+X023479Y017532D01*
+X023479Y017375D02*
+X023421Y017375D01*
+X023401Y017297D02*
+X023499Y017297D01*
+X023535Y017218D02*
+X023365Y017218D01*
+X023310Y017140D02*
+X023590Y017140D01*
+X023680Y017061D02*
+X023220Y017061D01*
+X023019Y016983D02*
+X023881Y016983D01*
+X023910Y016983D02*
+X023990Y016983D01*
+X024019Y016983D02*
+X024620Y016983D01*
+X024485Y016904D02*
+X016085Y016904D01*
+X016085Y016983D02*
+X020881Y016983D01*
+X020910Y016983D02*
+X020990Y016983D01*
+X021019Y016983D02*
+X021881Y016983D01*
+X021910Y016983D02*
+X021990Y016983D01*
+X022019Y016983D02*
+X022881Y016983D01*
+X022910Y016983D02*
+X022990Y016983D01*
+X022990Y017061D02*
+X022910Y017061D01*
+X022910Y017140D02*
+X022990Y017140D01*
+X022990Y017218D02*
+X022910Y017218D01*
+X022910Y017297D02*
+X022990Y017297D01*
+X022680Y017061D02*
+X022220Y017061D01*
+X022310Y017140D02*
+X022590Y017140D01*
+X022535Y017218D02*
+X022365Y017218D01*
+X022401Y017297D02*
+X022499Y017297D01*
+X022479Y017375D02*
+X022421Y017375D01*
+X022421Y017532D02*
+X022479Y017532D01*
+X022498Y017611D02*
+X022402Y017611D01*
+X022367Y017689D02*
+X022533Y017689D01*
+X022587Y017768D02*
+X022313Y017768D01*
+X022224Y017846D02*
+X022676Y017846D01*
+X022722Y017925D02*
+X022178Y017925D01*
+X022315Y018003D02*
+X022585Y018003D01*
+X022507Y018082D02*
+X022393Y018082D01*
+X021722Y017925D02*
+X021178Y017925D01*
+X021224Y017846D02*
+X021676Y017846D01*
+X021587Y017768D02*
+X021313Y017768D01*
+X021367Y017689D02*
+X021533Y017689D01*
+X021498Y017611D02*
+X021402Y017611D01*
+X021421Y017532D02*
+X021479Y017532D01*
+X021479Y017375D02*
+X021421Y017375D01*
+X021401Y017297D02*
+X021499Y017297D01*
+X021535Y017218D02*
+X021365Y017218D01*
+X021310Y017140D02*
+X021590Y017140D01*
+X021680Y017061D02*
+X021220Y017061D01*
+X020990Y017061D02*
+X020910Y017061D01*
+X020910Y017140D02*
+X020990Y017140D01*
+X020990Y017218D02*
+X020910Y017218D01*
+X020910Y017297D02*
+X020990Y017297D01*
+X020680Y017061D02*
+X016085Y017061D01*
+X016085Y017140D02*
+X020590Y017140D01*
+X020535Y017218D02*
+X016085Y017218D01*
+X016085Y017297D02*
+X020499Y017297D01*
+X020479Y017375D02*
+X016085Y017375D01*
+X016543Y016826D02*
+X024410Y016826D01*
+X023990Y017061D02*
+X023910Y017061D01*
+X023910Y017140D02*
+X023990Y017140D01*
+X023990Y017218D02*
+X023910Y017218D01*
+X023910Y017297D02*
+X023990Y017297D01*
+X023585Y018003D02*
+X023315Y018003D01*
+X023393Y018082D02*
+X023507Y018082D01*
+X023466Y018788D02*
+X023434Y018788D01*
+X023355Y018867D02*
+X023545Y018867D01*
+X023624Y018945D02*
+X023276Y018945D01*
+X023086Y019024D02*
+X023814Y019024D01*
+X024086Y019024D02*
+X024814Y019024D01*
+X024624Y018945D02*
+X024276Y018945D01*
+X024355Y018867D02*
+X024545Y018867D01*
+X024466Y018788D02*
+X024434Y018788D01*
+X025086Y019024D02*
+X025814Y019024D01*
+X025624Y018945D02*
+X025276Y018945D01*
+X025355Y018867D02*
+X025545Y018867D01*
+X025466Y018788D02*
+X025434Y018788D01*
+X025850Y018455D02*
+X025450Y018055D01*
+X025450Y016155D01*
+X026000Y015605D01*
+X025985Y015605D01*
+X026421Y015570D02*
+X028019Y015570D01*
+X028097Y015648D02*
+X026421Y015648D01*
+X026421Y015727D02*
+X028176Y015727D01*
+X028254Y015805D02*
+X026421Y015805D01*
+X026416Y015884D02*
+X028333Y015884D01*
+X028411Y015962D02*
+X026380Y015962D01*
+X026280Y016041D02*
+X028490Y016041D01*
+X028568Y016119D02*
+X025882Y016119D01*
+X025803Y016198D02*
+X028647Y016198D01*
+X028725Y016276D02*
+X025730Y016276D01*
+X026421Y015491D02*
+X027790Y015491D01*
+X027900Y015105D02*
+X027900Y015055D01*
+X027096Y016355D02*
+X028804Y016355D01*
+X028882Y016433D02*
+X027192Y016433D01*
+X027251Y016512D02*
+X028961Y016512D01*
+X029039Y016590D02*
+X027284Y016590D01*
+X027299Y016669D02*
+X029118Y016669D01*
+X029170Y016747D02*
+X027299Y016747D01*
+X027282Y016826D02*
+X029170Y016826D01*
+X029170Y016904D02*
+X027249Y016904D01*
+X026990Y017454D02*
+X027910Y017454D01*
+X027910Y017375D02*
+X027990Y017375D01*
+X027990Y017297D02*
+X027910Y017297D01*
+X027910Y017218D02*
+X027990Y017218D01*
+X027990Y017140D02*
+X027910Y017140D01*
+X027910Y017061D02*
+X027990Y017061D01*
+X027990Y017454D02*
+X028910Y017454D01*
+X028910Y017375D02*
+X028990Y017375D01*
+X028990Y017297D02*
+X028910Y017297D01*
+X028910Y017218D02*
+X028990Y017218D01*
+X028990Y017140D02*
+X028910Y017140D01*
+X028910Y017061D02*
+X028990Y017061D01*
+X028990Y016983D02*
+X028910Y016983D01*
+X029019Y016983D02*
+X029170Y016983D01*
+X026950Y018355D02*
+X026950Y018455D01*
+X027434Y018788D02*
+X027466Y018788D01*
+X027545Y018867D02*
+X027355Y018867D01*
+X027276Y018945D02*
+X027624Y018945D01*
+X027814Y019024D02*
+X027086Y019024D01*
+X026814Y019024D02*
+X026086Y019024D01*
+X026276Y018945D02*
+X026624Y018945D01*
+X026545Y018867D02*
+X026355Y018867D01*
+X026434Y018788D02*
+X026466Y018788D01*
+X025950Y018455D02*
+X025850Y018455D01*
+X022814Y019024D02*
+X022086Y019024D01*
+X022276Y018945D02*
+X022624Y018945D01*
+X022545Y018867D02*
+X022355Y018867D01*
+X022434Y018788D02*
+X022466Y018788D01*
+X021814Y019024D02*
+X021086Y019024D01*
+X021276Y018945D02*
+X021624Y018945D01*
+X021545Y018867D02*
+X021355Y018867D01*
+X021434Y018788D02*
+X021466Y018788D01*
+X020814Y019024D02*
+X019948Y019024D01*
+X019967Y018945D02*
+X020624Y018945D01*
+X020545Y018867D02*
+X019941Y018867D01*
+X019916Y018788D02*
+X020466Y018788D01*
+X020430Y018710D02*
+X019861Y018710D01*
+X019753Y018631D02*
+X020398Y018631D01*
+X021315Y018003D02*
+X021585Y018003D01*
+X021507Y018082D02*
+X021393Y018082D01*
+X021910Y017297D02*
+X021990Y017297D01*
+X021990Y017218D02*
+X021910Y017218D01*
+X021910Y017140D02*
+X021990Y017140D01*
+X021990Y017061D02*
+X021910Y017061D01*
+X015650Y016788D02*
+X015617Y016788D01*
+X030833Y018867D02*
+X032200Y018867D01*
+X032200Y018945D02*
+X030941Y018945D01*
+X031011Y019024D02*
+X032200Y019024D01*
+X032200Y019102D02*
+X031037Y019102D01*
+X031062Y019181D02*
+X032200Y019181D01*
+X032200Y019259D02*
+X031052Y019259D01*
+X031027Y019338D02*
+X032200Y019338D01*
+X032200Y019416D02*
+X031001Y019416D01*
+X026593Y000890D02*
+X026315Y000890D01*
+X026315Y000812D02*
+X026593Y000812D01*
+X026599Y000733D02*
+X026315Y000733D01*
+X026314Y000655D02*
+X026660Y000655D01*
+X024599Y000498D02*
+X024338Y000498D01*
+X024417Y000576D02*
+X024519Y000576D01*
+D51*
+X023474Y000981D03*
+X023650Y001405D03*
+X023474Y001829D03*
+X023050Y002005D03*
+X022626Y001829D03*
+X022450Y001405D03*
+X022626Y000981D03*
+X023050Y000805D03*
+X025150Y002255D03*
+X025450Y003255D03*
+X026300Y003355D03*
+X026700Y003255D03*
+X027650Y002255D03*
+X028600Y003605D03*
+X029250Y003605D03*
+X028450Y004205D03*
+X029200Y004805D03*
+X029200Y005505D03*
+X027500Y005005D03*
+X026950Y005055D03*
+X026300Y005255D03*
+X025950Y005505D03*
+X025350Y005655D03*
+X025100Y006005D03*
+X025350Y006405D03*
+X025650Y006705D03*
+X026600Y006305D03*
+X026900Y005555D03*
+X027850Y006955D03*
+X026700Y007205D03*
+X025900Y007555D03*
+X026100Y007905D03*
+X025750Y008205D03*
+X025050Y008205D03*
+X024600Y008205D03*
+X024450Y007405D03*
+X024600Y007005D03*
+X023150Y008155D03*
+X022800Y007905D03*
+X021600Y007905D03*
+X020400Y007055D03*
+X020150Y006655D03*
+X020600Y006505D03*
+X021000Y006755D03*
+X022200Y006405D03*
+X022400Y006755D03*
+X022350Y005605D03*
+X022250Y005205D03*
+X022650Y004855D03*
+X023000Y004255D03*
+X023600Y004055D03*
+X024150Y004105D03*
+X024900Y004955D03*
+X024900Y005405D03*
+X024550Y005755D03*
+X020700Y005255D03*
+X020500Y004505D03*
+X020950Y003955D03*
+X020450Y003355D03*
+X020750Y003055D03*
+X020550Y002405D03*
+X019400Y002255D03*
+X018700Y002205D03*
+X017150Y002455D03*
+X015950Y003255D03*
+X016400Y004055D03*
+X016100Y004755D03*
+X017050Y004955D03*
+X017750Y004255D03*
+X018300Y003655D03*
+X019250Y004355D03*
+X019200Y005255D03*
+X018250Y005355D03*
+X017100Y005855D03*
+X016450Y005905D03*
+X016100Y006255D03*
+X017050Y006705D03*
+X017750Y006605D03*
+X018950Y007155D03*
+X016850Y008405D03*
+X016450Y008555D03*
+X016000Y008505D03*
+X016450Y009605D03*
+X017700Y009155D03*
+X017650Y010755D03*
+X017600Y011355D03*
+X017400Y012455D03*
+X016850Y012855D03*
+X016450Y012355D03*
+X015950Y013105D03*
+X016900Y013855D03*
+X016200Y014355D03*
+X016900Y015205D03*
+X017750Y015555D03*
+X018700Y016155D03*
+X021150Y015355D03*
+X021850Y015105D03*
+X024200Y014805D03*
+X024600Y015105D03*
+X025950Y014705D03*
+X026650Y014655D03*
+X027900Y015105D03*
+X028700Y015355D03*
+X030150Y015755D03*
+X030550Y015955D03*
+X031150Y017355D03*
+X029500Y019405D03*
+X026900Y016705D03*
+X024750Y016605D03*
+X022950Y019255D03*
+X015950Y019755D03*
+X015650Y017855D03*
+X014050Y017355D03*
+X012900Y018005D03*
+X012150Y017705D03*
+X011974Y017281D03*
+X011550Y017105D03*
+X011126Y017281D03*
+X010950Y017705D03*
+X010450Y017655D03*
+X011126Y018129D03*
+X011550Y018305D03*
+X011974Y018129D03*
+X011150Y019455D03*
+X011200Y019805D03*
+X010550Y019455D03*
+X008900Y019455D03*
+X007400Y018605D03*
+X006900Y018455D03*
+X007100Y018105D03*
+X006600Y017455D03*
+X005000Y017105D03*
+X004550Y017005D03*
+X004450Y016605D03*
+X004050Y016305D03*
+X004900Y016005D03*
+X005600Y015555D03*
+X006200Y015205D03*
+X006900Y014755D03*
+X007300Y014305D03*
+X007950Y014305D03*
+X007850Y014705D03*
+X008350Y015405D03*
+X007950Y015555D03*
+X007550Y015555D03*
+X009150Y014905D03*
+X009700Y015005D03*
+X010700Y015005D03*
+X011500Y014855D03*
+X011550Y014005D03*
+X011200Y013605D03*
+X010750Y013755D03*
+X010550Y012805D03*
+X009900Y013055D03*
+X010000Y012005D03*
+X010300Y011105D03*
+X008900Y010505D03*
+X009050Y009955D03*
+X009650Y010105D03*
+X008900Y009355D03*
+X008050Y009405D03*
+X008050Y008905D03*
+X006100Y008405D03*
+X005550Y008055D03*
+X003700Y007655D03*
+X003300Y007305D03*
+X003400Y006305D03*
+X004850Y005755D03*
+X005850Y005355D03*
+X006700Y005005D03*
+X006600Y004355D03*
+X005900Y004805D03*
+X004800Y004005D03*
+X004300Y003605D03*
+X002700Y003155D03*
+X002300Y003855D03*
+X002150Y002155D03*
+X003300Y001955D03*
+X004700Y001855D03*
+X006000Y001205D03*
+X007450Y001455D03*
+X006500Y002305D03*
+X006400Y002755D03*
+X006500Y003605D03*
+X008150Y003955D03*
+X008550Y003255D03*
+X009700Y003355D03*
+X010250Y003305D03*
+X011400Y002555D03*
+X010900Y001805D03*
+X010500Y001655D03*
+X010750Y001255D03*
+X011400Y001105D03*
+X012000Y001455D03*
+X012250Y000505D03*
+X013450Y002605D03*
+X013550Y003055D03*
+X014100Y002905D03*
+X013050Y003055D03*
+X012600Y003305D03*
+X012000Y004305D03*
+X011550Y004305D03*
+X010350Y005005D03*
+X009000Y005105D03*
+X009050Y005605D03*
+X008100Y005805D03*
+X007800Y006155D03*
+X007800Y005055D03*
+X011750Y007605D03*
+X012350Y007905D03*
+X013450Y008155D03*
+X013100Y008455D03*
+X010750Y008505D03*
+X010150Y008105D03*
+X012550Y006505D03*
+X013050Y006555D03*
+X013450Y006655D03*
+X013550Y006255D03*
+X014100Y006305D03*
+X014750Y006505D03*
+X014750Y006905D03*
+X016500Y007405D03*
+X013850Y005505D03*
+X013350Y004305D03*
+X015600Y001805D03*
+X017400Y000805D03*
+X019500Y000805D03*
+X022250Y003305D03*
+X023100Y003255D03*
+X026450Y000705D03*
+X029450Y002305D03*
+X031800Y003655D03*
+X031150Y004405D03*
+X031100Y005055D03*
+X032050Y005055D03*
+X031250Y005755D03*
+X031100Y006155D03*
+X031950Y006155D03*
+X031050Y007655D03*
+X029450Y006805D03*
+X026950Y008155D03*
+X027900Y008855D03*
+X028300Y009555D03*
+X029800Y009755D03*
+X031100Y010605D03*
+X029450Y011555D03*
+X030250Y011905D03*
+X031150Y011905D03*
+X029600Y012605D03*
+X031200Y013355D03*
+X031250Y013855D03*
+X031900Y013855D03*
+X030200Y014455D03*
+X029400Y014305D03*
+X028550Y013805D03*
+X026900Y012105D03*
+X026950Y011555D03*
+X028350Y011305D03*
+X026900Y009855D03*
+X025900Y009905D03*
+X025600Y009605D03*
+X025000Y009705D03*
+X023750Y009005D03*
+X022900Y009155D03*
+X022600Y009655D03*
+X022100Y009605D03*
+X021500Y009605D03*
+X020950Y009205D03*
+X021100Y011055D03*
+X020650Y011405D03*
+X019350Y011055D03*
+X022150Y012505D03*
+X022800Y013405D03*
+X023900Y013605D03*
+X025000Y013505D03*
+X024200Y012755D03*
+X023100Y011005D03*
+X020850Y013355D03*
+X016150Y016105D03*
+X016300Y016505D03*
+X014050Y014855D03*
+X013500Y015005D03*
+X013000Y015055D03*
+X012600Y014655D03*
+X014050Y013305D03*
+X013900Y012805D03*
+X013700Y012105D03*
+X012850Y011905D03*
+X012300Y011855D03*
+X013100Y011005D03*
+X013550Y011205D03*
+X012750Y010255D03*
+X012150Y010155D03*
+X008050Y010255D03*
+X006550Y010255D03*
+X006100Y010255D03*
+X006150Y010855D03*
+X005400Y012005D03*
+X005150Y012655D03*
+X004950Y013055D03*
+X005350Y013055D03*
+X004550Y014105D03*
+X003900Y014155D03*
+X003300Y014155D03*
+X002650Y014155D03*
+X001400Y014205D03*
+X000900Y012255D03*
+X003550Y011155D03*
+X003550Y010405D03*
+X004000Y009305D03*
+X003250Y008355D03*
+X002150Y009405D03*
+X001700Y007055D03*
+X008850Y001355D03*
+X007600Y013155D03*
+X007050Y013155D03*
+X004800Y015005D03*
+X002200Y016855D03*
+X002550Y017355D03*
+X002150Y017455D03*
+X002300Y018005D03*
+X001500Y017655D03*
+X001200Y018055D03*
+X004600Y018355D03*
+X009350Y017905D03*
+X031950Y009155D03*
+D52*
+X023050Y001405D03*
+X011550Y017705D03*
+D53*
+X012400Y018505D02*
+X012900Y018005D01*
+X012400Y018505D02*
+X012400Y018955D01*
+X013000Y015955D02*
+X013450Y015955D01*
+X013500Y015905D01*
+X013500Y015955D01*
+X014450Y015955D01*
+X014700Y015705D01*
+X016450Y015705D01*
+X016850Y016105D01*
+X017800Y016105D01*
+X017841Y016146D01*
+X017750Y016146D01*
+X018691Y016146D01*
+X018700Y016155D01*
+X017850Y016155D02*
+X017841Y016146D01*
+X016600Y014805D02*
+X015750Y014805D01*
+X015700Y014755D01*
+X015700Y014555D01*
+X015650Y014605D01*
+X015550Y014505D01*
+X015550Y014155D01*
+X015050Y013655D01*
+X015050Y012455D01*
+X015350Y012155D01*
+X015350Y011905D01*
+X013850Y013955D02*
+X013500Y013955D01*
+X013850Y013955D02*
+X014050Y014155D01*
+X014050Y014855D01*
+X015400Y014855D01*
+X015650Y014605D01*
+X015650Y014622D01*
+X016600Y014805D02*
+X017050Y014355D01*
+X020350Y014355D01*
+X020450Y014255D01*
+X020450Y014305D01*
+X021900Y014305D01*
+X021900Y014205D01*
+X022000Y014205D01*
+X022050Y014255D01*
+X022117Y014255D01*
+X020450Y014255D02*
+X020450Y013705D01*
+X020500Y013655D01*
+X024600Y015105D02*
+X025300Y015105D01*
+X026900Y015105D01*
+X027900Y015105D01*
+X020450Y003855D02*
+X019650Y003855D01*
+X018800Y003855D01*
+X018600Y003655D01*
+X018250Y003655D01*
+X018300Y003655D01*
+X018250Y003655D02*
+X018050Y003655D01*
+X015850Y003655D01*
+M02*
diff --git a/pcb/proxmark3_fix/CAM/proxmark3.GTO b/pcb/proxmark3_fix/CAM/proxmark3.GTO
new file mode 100644 (file)
index 0000000..6942ad8
--- /dev/null
@@ -0,0 +1,2246 @@
+G75*
+G70*
+%OFA0B0*%
+%FSLAX24Y24*%
+%IPPOS*%
+%LPD*%
+%AMOC8*
+5,1,8,0,0,1.08239X$1,22.5*
+%
+%ADD10C,0.0010*%
+%ADD11C,0.0080*%
+%ADD12C,0.0050*%
+%ADD13C,0.0118*%
+%ADD14C,0.0000*%
+%ADD15C,0.0090*%
+%ADD16C,0.0100*%
+%ADD17C,0.0110*%
+%ADD18C,0.0030*%
+%ADD19C,0.0070*%
+%ADD20C,0.0079*%
+%ADD21C,0.0040*%
+%ADD22C,0.0059*%
+%ADD23C,0.0120*%
+%ADD24C,0.0060*%
+D10*
+X000450Y000105D02*
+X032450Y000105D01*
+X032450Y020305D01*
+X000450Y020305D01*
+X000450Y000105D01*
+D11*
+X007130Y003575D02*
+X007130Y004735D01*
+X007670Y004735D01*
+X007670Y003575D01*
+X007130Y003575D01*
+X008570Y003075D02*
+X008570Y002535D01*
+X009730Y002535D01*
+X009730Y003075D01*
+X008570Y003075D01*
+X008570Y002425D02*
+X008570Y001885D01*
+X009730Y001885D01*
+X009730Y002425D01*
+X008570Y002425D01*
+X009120Y001775D02*
+X010280Y001775D01*
+X010280Y001235D01*
+X009120Y001235D01*
+X009120Y001775D01*
+X009820Y001885D02*
+X009820Y002425D01*
+X010980Y002425D01*
+X010980Y001885D01*
+X009820Y001885D01*
+X009820Y002535D02*
+X009820Y003075D01*
+X010980Y003075D01*
+X010980Y002535D01*
+X009820Y002535D01*
+X011080Y002435D02*
+X011620Y002435D01*
+X011620Y001275D01*
+X011080Y001275D01*
+X011080Y002435D01*
+X011730Y002785D02*
+X012270Y002785D01*
+X012270Y001625D01*
+X011730Y001625D01*
+X011730Y002785D01*
+X012380Y003475D02*
+X012920Y003475D01*
+X012920Y004635D01*
+X012380Y004635D01*
+X012380Y003475D01*
+X013570Y003385D02*
+X013570Y003925D01*
+X014730Y003925D01*
+X014730Y003385D01*
+X013570Y003385D01*
+X013570Y004035D02*
+X013570Y004575D01*
+X014730Y004575D01*
+X014730Y004035D01*
+X013570Y004035D01*
+X013620Y004685D02*
+X013620Y005225D01*
+X014780Y005225D01*
+X014780Y004685D01*
+X013620Y004685D01*
+X013520Y004775D02*
+X012980Y004775D01*
+X012980Y005935D01*
+X013520Y005935D01*
+X013520Y004775D01*
+X012920Y004775D02*
+X012380Y004775D01*
+X012380Y005935D01*
+X012920Y005935D01*
+X012920Y004775D01*
+X011287Y004826D02*
+X011287Y004966D01*
+X011217Y005036D01*
+X011147Y005036D01*
+X011077Y004966D01*
+X011077Y004756D01*
+X011217Y004756D01*
+X011287Y004826D01*
+X011077Y004756D02*
+X010936Y004896D01*
+X010866Y005036D01*
+X010936Y004576D02*
+X010866Y004506D01*
+X010866Y004366D01*
+X010936Y004296D01*
+X011217Y004296D01*
+X011287Y004366D01*
+X011287Y004506D01*
+X011217Y004576D01*
+X011287Y004129D02*
+X011287Y003989D01*
+X011287Y004059D02*
+X010866Y004059D01*
+X010866Y003989D02*
+X010866Y004129D01*
+X010170Y003575D02*
+X010170Y004735D01*
+X009630Y004735D01*
+X009630Y003575D01*
+X010170Y003575D01*
+X009870Y005075D02*
+X009330Y005075D01*
+X009330Y006235D01*
+X009870Y006235D01*
+X009870Y005075D01*
+X009870Y006325D02*
+X009330Y006325D01*
+X009330Y007485D01*
+X009870Y007485D01*
+X009870Y006325D01*
+X009980Y006325D02*
+X010520Y006325D01*
+X010520Y007485D01*
+X009980Y007485D01*
+X009980Y006325D01*
+X010630Y006325D02*
+X011170Y006325D01*
+X011170Y007485D01*
+X010630Y007485D01*
+X010630Y006325D01*
+X009220Y006325D02*
+X008680Y006325D01*
+X008680Y007485D01*
+X009220Y007485D01*
+X009220Y006325D01*
+X008570Y006325D02*
+X008030Y006325D01*
+X008030Y007485D01*
+X008570Y007485D01*
+X008570Y006325D01*
+X007920Y006325D02*
+X007380Y006325D01*
+X007380Y007485D01*
+X007920Y007485D01*
+X007920Y006325D01*
+X007270Y006325D02*
+X006730Y006325D01*
+X006730Y007485D01*
+X007270Y007485D01*
+X007270Y006325D01*
+X007070Y007585D02*
+X007070Y008125D01*
+X008230Y008125D01*
+X008230Y007585D01*
+X007070Y007585D01*
+X006880Y007585D02*
+X005720Y007585D01*
+X005720Y008125D01*
+X006880Y008125D01*
+X006880Y007585D01*
+X006070Y008575D02*
+X005530Y008575D01*
+X005530Y009735D01*
+X006070Y009735D01*
+X006070Y008575D01*
+X005380Y009035D02*
+X004220Y009035D01*
+X004220Y009575D01*
+X005380Y009575D01*
+X005380Y009035D01*
+X005380Y009685D02*
+X004220Y009685D01*
+X004220Y010225D01*
+X005380Y010225D01*
+X005380Y009685D01*
+X005380Y010385D02*
+X004220Y010385D01*
+X004220Y010925D01*
+X005380Y010925D01*
+X005380Y010385D01*
+X005380Y011035D02*
+X004220Y011035D01*
+X004220Y011575D01*
+X005380Y011575D01*
+X005380Y011035D01*
+X006030Y011725D02*
+X006570Y011725D01*
+X006570Y012885D01*
+X006030Y012885D01*
+X006030Y011725D01*
+X006380Y011635D02*
+X006920Y011635D01*
+X006920Y010475D01*
+X006380Y010475D01*
+X006380Y011635D01*
+X006680Y011725D02*
+X006680Y012885D01*
+X007220Y012885D01*
+X007220Y011725D01*
+X006680Y011725D01*
+X007030Y011635D02*
+X007570Y011635D01*
+X007570Y010475D01*
+X007030Y010475D01*
+X007030Y011635D01*
+X007330Y011725D02*
+X007330Y012885D01*
+X007870Y012885D01*
+X007870Y011725D01*
+X007330Y011725D01*
+X007680Y011635D02*
+X008220Y011635D01*
+X008220Y010475D01*
+X007680Y010475D01*
+X007680Y011635D01*
+X008720Y011175D02*
+X008720Y010635D01*
+X009880Y010635D01*
+X009880Y011175D01*
+X008720Y011175D01*
+X010480Y009885D02*
+X011020Y009885D01*
+X011020Y008725D01*
+X010480Y008725D01*
+X010480Y009885D01*
+X011480Y009735D02*
+X012020Y009735D01*
+X012020Y008575D01*
+X011480Y008575D01*
+X011480Y009735D01*
+X011230Y010475D02*
+X011230Y011635D01*
+X011770Y011635D01*
+X011770Y010475D01*
+X011230Y010475D01*
+X011880Y010475D02*
+X011880Y011635D01*
+X012420Y011635D01*
+X012420Y010475D01*
+X011880Y010475D01*
+X009920Y009035D02*
+X009380Y009035D01*
+X009380Y007875D01*
+X009920Y007875D01*
+X009920Y009035D01*
+X009270Y009035D02*
+X009270Y007875D01*
+X008730Y007875D01*
+X008730Y009035D01*
+X009270Y009035D01*
+X010658Y008242D02*
+X010798Y008242D01*
+X010728Y008242D02*
+X010728Y007822D01*
+X010658Y007822D02*
+X010798Y007822D01*
+X010965Y007892D02*
+X011035Y007822D01*
+X011175Y007822D01*
+X011245Y007892D01*
+X011426Y007822D02*
+X011706Y007822D01*
+X011566Y007822D02*
+X011566Y008242D01*
+X011426Y008102D01*
+X011245Y008172D02*
+X011175Y008242D01*
+X011035Y008242D01*
+X010965Y008172D01*
+X010965Y007892D01*
+X011886Y007822D02*
+X012166Y007822D01*
+X012026Y007822D02*
+X012026Y008242D01*
+X011886Y008102D01*
+X016880Y009175D02*
+X017420Y009175D01*
+X017420Y010335D01*
+X016880Y010335D01*
+X016880Y009175D01*
+X018203Y011142D02*
+X018343Y011142D01*
+X018273Y011142D02*
+X018273Y011562D01*
+X018203Y011562D02*
+X018343Y011562D01*
+X018510Y011492D02*
+X018510Y011212D01*
+X018580Y011142D01*
+X018720Y011142D01*
+X018790Y011212D01*
+X018970Y011212D02*
+X018970Y011282D01*
+X019040Y011352D01*
+X019180Y011352D01*
+X019250Y011282D01*
+X019250Y011212D01*
+X019180Y011142D01*
+X019040Y011142D01*
+X018970Y011212D01*
+X019040Y011352D02*
+X018970Y011422D01*
+X018970Y011492D01*
+X019040Y011562D01*
+X019180Y011562D01*
+X019250Y011492D01*
+X019250Y011422D01*
+X019180Y011352D01*
+X018790Y011492D02*
+X018720Y011562D01*
+X018580Y011562D01*
+X018510Y011492D01*
+X018980Y012685D02*
+X017820Y012685D01*
+X017820Y013225D01*
+X018980Y013225D01*
+X018980Y012685D01*
+X019070Y012685D02*
+X019070Y013225D01*
+X020230Y013225D01*
+X020230Y012685D01*
+X019070Y012685D01*
+X019070Y013435D02*
+X019070Y013975D01*
+X020230Y013975D01*
+X020230Y013435D01*
+X019070Y013435D01*
+X018980Y013435D02*
+X017820Y013435D01*
+X017820Y013975D01*
+X018980Y013975D01*
+X018980Y013435D01*
+X017670Y013935D02*
+X017670Y012775D01*
+X017130Y012775D01*
+X017130Y013935D01*
+X017670Y013935D01*
+X016680Y013725D02*
+X016680Y013185D01*
+X015520Y013185D01*
+X015520Y013725D01*
+X016680Y013725D01*
+X016650Y014560D02*
+X016650Y014840D01*
+X016510Y014700D02*
+X016790Y014700D01*
+X015126Y015615D02*
+X015126Y015755D01*
+X015056Y015825D01*
+X015056Y016005D02*
+X015126Y016075D01*
+X015126Y016215D01*
+X015056Y016286D01*
+X014986Y016286D01*
+X014916Y016215D01*
+X014916Y016145D01*
+X014916Y016215D02*
+X014846Y016286D01*
+X014775Y016286D01*
+X014705Y016215D01*
+X014705Y016075D01*
+X014775Y016005D01*
+X014775Y015825D02*
+X014705Y015755D01*
+X014705Y015615D01*
+X014775Y015545D01*
+X015056Y015545D01*
+X015126Y015615D01*
+X015056Y016466D02*
+X014986Y016466D01*
+X014916Y016536D01*
+X014916Y016676D01*
+X014986Y016746D01*
+X015056Y016746D01*
+X015126Y016676D01*
+X015126Y016536D01*
+X015056Y016466D01*
+X014916Y016536D02*
+X014846Y016466D01*
+X014775Y016466D01*
+X014705Y016536D01*
+X014705Y016676D01*
+X014775Y016746D01*
+X014846Y016746D01*
+X014916Y016676D01*
+X018090Y018440D02*
+X018090Y018654D01*
+X018090Y018547D02*
+X018410Y018547D01*
+X018410Y018808D02*
+X018090Y018808D01*
+X018196Y018915D01*
+X018090Y019022D01*
+X018410Y019022D01*
+X018357Y019177D02*
+X018410Y019230D01*
+X018410Y019337D01*
+X018357Y019390D01*
+X018303Y019390D01*
+X018250Y019337D01*
+X018250Y019230D01*
+X018196Y019177D01*
+X018143Y019177D01*
+X018090Y019230D01*
+X018090Y019337D01*
+X018143Y019390D01*
+X011710Y019385D02*
+X011657Y019332D01*
+X011550Y019332D01*
+X011496Y019385D01*
+X011496Y019545D01*
+X011390Y019545D02*
+X011710Y019545D01*
+X011710Y019385D01*
+X011710Y019177D02*
+X011390Y019177D01*
+X011496Y019177D02*
+X011496Y019017D01*
+X011550Y018963D01*
+X011657Y018963D01*
+X011710Y019017D01*
+X011710Y019177D01*
+X011603Y018809D02*
+X011390Y018809D01*
+X011603Y018809D02*
+X011710Y018702D01*
+X011603Y018595D01*
+X011390Y018595D01*
+X010280Y019185D02*
+X009120Y019185D01*
+X009120Y019725D01*
+X010280Y019725D01*
+X010280Y019185D01*
+X008075Y017622D02*
+X008075Y017515D01*
+X008022Y017462D01*
+X007915Y017568D02*
+X007915Y017622D01*
+X007968Y017675D01*
+X008022Y017675D01*
+X008075Y017622D01*
+X007915Y017622D02*
+X007862Y017675D01*
+X007808Y017675D01*
+X007755Y017622D01*
+X007755Y017515D01*
+X007808Y017462D01*
+X007808Y017307D02*
+X007755Y017253D01*
+X007755Y017147D01*
+X007808Y017093D01*
+X008022Y017093D01*
+X008075Y017147D01*
+X008075Y017253D01*
+X008022Y017307D01*
+X008075Y016954D02*
+X008075Y016848D01*
+X008075Y016901D02*
+X007755Y016901D01*
+X007755Y016848D02*
+X007755Y016954D01*
+X006780Y017225D02*
+X006780Y016685D01*
+X005620Y016685D01*
+X005620Y017225D01*
+X006780Y017225D01*
+X005470Y018325D02*
+X004930Y018325D01*
+X004930Y019485D01*
+X005470Y019485D01*
+X005470Y018325D01*
+X006730Y018725D02*
+X006730Y019885D01*
+X007270Y019885D01*
+X007270Y018725D01*
+X006730Y018725D01*
+X005477Y019645D02*
+X005264Y019645D01*
+X005477Y019859D01*
+X005477Y019912D01*
+X005424Y019965D01*
+X005317Y019965D01*
+X005264Y019912D01*
+X005109Y019912D02*
+X005109Y019698D01*
+X005055Y019645D01*
+X004949Y019645D01*
+X004895Y019698D01*
+X004895Y019912D01*
+X004949Y019965D01*
+X005055Y019965D01*
+X005109Y019912D01*
+X005002Y019752D02*
+X005109Y019645D01*
+X004820Y013985D02*
+X004280Y013985D01*
+X004280Y012825D01*
+X004820Y012825D01*
+X004820Y013985D01*
+X004170Y013985D02*
+X003630Y013985D01*
+X003630Y012825D01*
+X004170Y012825D01*
+X004170Y013985D01*
+X003520Y013985D02*
+X002980Y013985D01*
+X002980Y012825D01*
+X003520Y012825D01*
+X003520Y013985D01*
+X002870Y013985D02*
+X002330Y013985D01*
+X002330Y012825D01*
+X002870Y012825D01*
+X002870Y013985D01*
+X002220Y013985D02*
+X001680Y013985D01*
+X001680Y012825D01*
+X002220Y012825D01*
+X002220Y013985D01*
+X001570Y013985D02*
+X001030Y013985D01*
+X001030Y012825D01*
+X001570Y012825D01*
+X001570Y013985D01*
+X011170Y013275D02*
+X011170Y012735D01*
+X012330Y012735D01*
+X012330Y013275D01*
+X011170Y013275D01*
+X011170Y012625D02*
+X011170Y012085D01*
+X012330Y012085D01*
+X012330Y012625D01*
+X011170Y012625D01*
+X012420Y012775D02*
+X012420Y012235D01*
+X013580Y012235D01*
+X013580Y012775D01*
+X012420Y012775D01*
+X012420Y012885D02*
+X012420Y013425D01*
+X013580Y013425D01*
+X013580Y012885D01*
+X012420Y012885D01*
+X020670Y013075D02*
+X020670Y012535D01*
+X021830Y012535D01*
+X021830Y013075D01*
+X020670Y013075D01*
+X021380Y012235D02*
+X021920Y012235D01*
+X021920Y011075D01*
+X021380Y011075D01*
+X021380Y012235D01*
+X022330Y012235D02*
+X022870Y012235D01*
+X022870Y011075D01*
+X022330Y011075D01*
+X022330Y012235D01*
+X023280Y012235D02*
+X023820Y012235D01*
+X023820Y011075D01*
+X023280Y011075D01*
+X023280Y012235D01*
+X022335Y013255D02*
+X022055Y013255D01*
+X022195Y013395D02*
+X022195Y013115D01*
+X025370Y013285D02*
+X025370Y013825D01*
+X026530Y013825D01*
+X026530Y013285D01*
+X025370Y013285D01*
+X025370Y013935D02*
+X025370Y014475D01*
+X026530Y014475D01*
+X026530Y013935D01*
+X025370Y013935D01*
+X026680Y013835D02*
+X027220Y013835D01*
+X027220Y012675D01*
+X026680Y012675D01*
+X026680Y013835D01*
+X026230Y015335D02*
+X025070Y015335D01*
+X025070Y015875D01*
+X026230Y015875D01*
+X026230Y015335D01*
+X027580Y011735D02*
+X028120Y011735D01*
+X028120Y010575D01*
+X027580Y010575D01*
+X027580Y011735D01*
+X027220Y011235D02*
+X026680Y011235D01*
+X026680Y010075D01*
+X027220Y010075D01*
+X027220Y011235D01*
+X026520Y011235D02*
+X026520Y010075D01*
+X025980Y010075D01*
+X025980Y011235D01*
+X026520Y011235D01*
+X028280Y011085D02*
+X028280Y009925D01*
+X028820Y009925D01*
+X028820Y011085D01*
+X028280Y011085D01*
+X028930Y011085D02*
+X029470Y011085D01*
+X029470Y009925D01*
+X028930Y009925D01*
+X028930Y011085D01*
+X028930Y009785D02*
+X029470Y009785D01*
+X029470Y008625D01*
+X028930Y008625D01*
+X028930Y009785D01*
+X023820Y009825D02*
+X023280Y009825D01*
+X023280Y010985D01*
+X023820Y010985D01*
+X023820Y009825D01*
+X022870Y009825D02*
+X022330Y009825D01*
+X022330Y010985D01*
+X022870Y010985D01*
+X022870Y009825D01*
+X022680Y009225D02*
+X022680Y008685D01*
+X021520Y008685D01*
+X021520Y009225D01*
+X022680Y009225D01*
+X021920Y009825D02*
+X021380Y009825D01*
+X021380Y010985D01*
+X021920Y010985D01*
+X021920Y009825D01*
+X021880Y008535D02*
+X022420Y008535D01*
+X022420Y007375D01*
+X021880Y007375D01*
+X021880Y008535D01*
+X022230Y004685D02*
+X022770Y004685D01*
+X022770Y003525D01*
+X022230Y003525D01*
+X022230Y004685D01*
+X024920Y003025D02*
+X024920Y002485D01*
+X026080Y002485D01*
+X026080Y003025D01*
+X024920Y003025D01*
+X026420Y003025D02*
+X026420Y002485D01*
+X027580Y002485D01*
+X027580Y003025D01*
+X026420Y003025D01*
+X027870Y002025D02*
+X029030Y002025D01*
+X029030Y001485D01*
+X027870Y001485D01*
+X027870Y002025D01*
+X027220Y001885D02*
+X026680Y001885D01*
+X026680Y000725D01*
+X027220Y000725D01*
+X027220Y001885D01*
+X027870Y001325D02*
+X027870Y000785D01*
+X029030Y000785D01*
+X029030Y001325D01*
+X027870Y001325D01*
+X031080Y000875D02*
+X031620Y000875D01*
+X031620Y002035D01*
+X031080Y002035D01*
+X031080Y000875D01*
+X031080Y002225D02*
+X031620Y002225D01*
+X031620Y003385D01*
+X031080Y003385D01*
+X031080Y002225D01*
+X030830Y004185D02*
+X029670Y004185D01*
+X029670Y004725D01*
+X030830Y004725D01*
+X030830Y004185D01*
+X030830Y004835D02*
+X029670Y004835D01*
+X029670Y005375D01*
+X030830Y005375D01*
+X030830Y004835D01*
+X030830Y005485D02*
+X029670Y005485D01*
+X029670Y006025D01*
+X030830Y006025D01*
+X030830Y005485D01*
+X018880Y001025D02*
+X018880Y000485D01*
+X017720Y000485D01*
+X017720Y001025D01*
+X018880Y001025D01*
+X016230Y001125D02*
+X016230Y000585D01*
+X015070Y000585D01*
+X015070Y001125D01*
+X016230Y001125D01*
+X014820Y000575D02*
+X014820Y001735D01*
+X014280Y001735D01*
+X014280Y000575D01*
+X014820Y000575D01*
+X014170Y000575D02*
+X013630Y000575D01*
+X013630Y001735D01*
+X014170Y001735D01*
+X014170Y000575D01*
+X013520Y000575D02*
+X012980Y000575D01*
+X012980Y001735D01*
+X013520Y001735D01*
+X013520Y000575D01*
+X012870Y000575D02*
+X012330Y000575D01*
+X012330Y001735D01*
+X012870Y001735D01*
+X012870Y000575D01*
+X010280Y000585D02*
+X010280Y001125D01*
+X009120Y001125D01*
+X009120Y000585D01*
+X010280Y000585D01*
+X003020Y005775D02*
+X002480Y005775D01*
+X002480Y006935D01*
+X003020Y006935D01*
+X003020Y005775D01*
+D12*
+X004332Y006329D02*
+X004568Y006329D01*
+X004844Y006566D02*
+X004844Y006999D01*
+X004686Y006999D01*
+X004214Y006999D02*
+X004056Y006999D01*
+X004056Y006566D01*
+X005474Y006737D02*
+X005474Y006973D01*
+X005711Y007249D02*
+X006144Y007249D01*
+X006144Y007091D01*
+X006144Y006619D02*
+X006144Y006461D01*
+X005711Y006461D01*
+X006656Y005999D02*
+X006656Y005841D01*
+X006656Y005999D02*
+X007089Y005999D01*
+X007326Y005723D02*
+X007326Y005487D01*
+X007089Y005211D02*
+X006656Y005211D01*
+X006656Y005369D01*
+X008456Y004444D02*
+X008456Y004011D01*
+X008614Y004011D01*
+X009086Y004011D02*
+X009244Y004011D01*
+X009244Y004444D01*
+X008968Y004681D02*
+X008732Y004681D01*
+X010382Y003870D02*
+X010500Y003870D01*
+X010500Y005642D01*
+X010618Y005642D01*
+X010618Y003870D01*
+X010500Y003870D01*
+X010461Y003909D02*
+X010461Y005602D01*
+X010421Y005602D02*
+X010421Y003909D01*
+X010382Y003870D02*
+X010382Y005642D01*
+X010500Y005642D01*
+X010539Y005602D02*
+X010539Y003909D01*
+X010579Y003909D02*
+X010579Y005602D01*
+X010618Y005642D02*
+X012154Y005642D01*
+X012154Y003870D01*
+X010618Y003870D01*
+X007594Y002894D02*
+X007594Y002461D01*
+X007436Y002461D01*
+X006964Y002461D02*
+X006806Y002461D01*
+X006806Y002894D01*
+X007082Y003131D02*
+X007318Y003131D01*
+X007294Y001399D02*
+X007136Y001399D01*
+X007294Y001399D02*
+X007294Y000966D01*
+X007018Y000729D02*
+X006782Y000729D01*
+X006506Y000966D02*
+X006506Y001399D01*
+X006664Y001399D01*
+X007906Y001399D02*
+X007906Y000966D01*
+X008182Y000729D02*
+X008418Y000729D01*
+X008694Y000966D02*
+X008694Y001399D01*
+X008536Y001399D01*
+X008064Y001399D02*
+X007906Y001399D01*
+X012182Y007520D02*
+X012300Y007520D01*
+X012300Y009292D01*
+X012418Y009292D01*
+X012418Y007520D01*
+X012300Y007520D01*
+X012261Y007559D02*
+X012261Y009252D01*
+X012221Y009252D02*
+X012221Y007559D01*
+X012182Y007520D02*
+X012182Y009292D01*
+X012300Y009292D01*
+X012339Y009252D02*
+X012339Y007559D01*
+X012379Y007559D02*
+X012379Y009252D01*
+X012418Y009292D02*
+X013954Y009292D01*
+X013954Y007520D01*
+X012418Y007520D01*
+X015162Y010778D02*
+X015516Y010778D01*
+X015516Y011801D01*
+X015162Y011801D01*
+X015162Y010778D01*
+X010464Y011398D02*
+X010385Y011319D01*
+X009125Y011319D01*
+X009046Y011398D01*
+X009046Y012500D01*
+X009125Y012579D01*
+X010385Y012579D01*
+X010464Y012500D01*
+X010464Y011398D01*
+X010149Y011555D02*
+X010151Y011573D01*
+X010157Y011589D01*
+X010166Y011604D01*
+X010179Y011617D01*
+X010194Y011626D01*
+X010210Y011632D01*
+X010228Y011634D01*
+X010246Y011632D01*
+X010262Y011626D01*
+X010277Y011617D01*
+X010290Y011604D01*
+X010299Y011589D01*
+X010305Y011573D01*
+X010307Y011555D01*
+X010305Y011537D01*
+X010299Y011521D01*
+X010290Y011506D01*
+X010277Y011493D01*
+X010262Y011484D01*
+X010246Y011478D01*
+X010228Y011476D01*
+X010210Y011478D01*
+X010194Y011484D01*
+X010179Y011493D01*
+X010166Y011506D01*
+X010157Y011521D01*
+X010151Y011537D01*
+X010149Y011555D01*
+X010312Y014059D02*
+X008186Y014059D01*
+X008186Y015752D01*
+X010312Y015752D01*
+X010312Y014059D01*
+X008186Y014059D02*
+X008107Y014059D01*
+X008107Y015752D01*
+X008186Y015752D01*
+X008107Y015752D02*
+X008029Y015752D01*
+X008029Y014059D01*
+X007950Y014059D01*
+X007950Y015752D01*
+X008029Y015752D01*
+X007950Y015752D02*
+X007871Y015752D01*
+X007871Y014059D01*
+X007950Y014059D01*
+X008029Y014059D02*
+X008107Y014059D01*
+X007612Y014059D02*
+X005486Y014059D01*
+X005486Y015752D01*
+X007612Y015752D01*
+X007612Y014059D01*
+X005486Y014059D02*
+X005407Y014059D01*
+X005407Y015752D01*
+X005486Y015752D01*
+X005407Y015752D02*
+X005329Y015752D01*
+X005329Y014059D01*
+X005250Y014059D01*
+X005250Y015752D01*
+X005329Y015752D01*
+X005250Y015752D02*
+X005171Y015752D01*
+X005171Y014059D01*
+X005250Y014059D01*
+X005329Y014059D02*
+X005407Y014059D01*
+X007734Y016759D02*
+X008088Y016759D01*
+X008088Y017782D01*
+X007734Y017782D01*
+X007734Y016759D01*
+X000518Y016132D02*
+X000518Y014714D01*
+X000518Y016132D02*
+X000518Y019951D01*
+X000500Y010872D02*
+X001169Y010872D01*
+X001169Y010715D01*
+X000500Y010872D02*
+X000500Y008038D01*
+X001169Y008038D01*
+X001169Y008195D01*
+X023674Y003223D02*
+X023674Y002987D01*
+X023911Y002711D02*
+X024344Y002711D01*
+X024344Y002869D01*
+X024344Y003341D02*
+X024344Y003499D01*
+X023911Y003499D01*
+X028283Y003505D02*
+X030645Y003505D01*
+X030645Y002205D02*
+X028283Y002205D01*
+X029691Y001889D02*
+X029691Y001811D01*
+X029691Y001889D02*
+X030321Y001889D01*
+X030321Y001811D01*
+X029691Y001456D02*
+X029691Y001141D01*
+X029691Y001062D01*
+X029691Y000748D02*
+X029691Y000708D01*
+X030321Y000708D01*
+X030321Y000748D01*
+X029750Y006488D02*
+X029750Y008850D01*
+X031050Y008850D02*
+X031050Y006488D01*
+X030994Y010611D02*
+X030836Y010611D01*
+X030994Y010611D02*
+X030994Y011044D01*
+X030718Y011281D02*
+X030482Y011281D01*
+X030206Y011044D02*
+X030206Y010611D01*
+X030364Y010611D01*
+D13*
+X001699Y016132D02*
+X001699Y018533D01*
+X000518Y018533D02*
+X000518Y016132D01*
+D14*
+X002703Y016644D02*
+X002705Y016670D01*
+X002711Y016696D01*
+X002721Y016721D01*
+X002734Y016744D01*
+X002750Y016764D01*
+X002770Y016782D01*
+X002792Y016797D01*
+X002815Y016809D01*
+X002841Y016817D01*
+X002867Y016821D01*
+X002893Y016821D01*
+X002919Y016817D01*
+X002945Y016809D01*
+X002969Y016797D01*
+X002990Y016782D01*
+X003010Y016764D01*
+X003026Y016744D01*
+X003039Y016721D01*
+X003049Y016696D01*
+X003055Y016670D01*
+X003057Y016644D01*
+X003055Y016618D01*
+X003049Y016592D01*
+X003039Y016567D01*
+X003026Y016544D01*
+X003010Y016524D01*
+X002990Y016506D01*
+X002968Y016491D01*
+X002945Y016479D01*
+X002919Y016471D01*
+X002893Y016467D01*
+X002867Y016467D01*
+X002841Y016471D01*
+X002815Y016479D01*
+X002791Y016491D01*
+X002770Y016506D01*
+X002750Y016524D01*
+X002734Y016544D01*
+X002721Y016567D01*
+X002711Y016592D01*
+X002705Y016618D01*
+X002703Y016644D01*
+X002703Y018022D02*
+X002705Y018048D01*
+X002711Y018074D01*
+X002721Y018099D01*
+X002734Y018122D01*
+X002750Y018142D01*
+X002770Y018160D01*
+X002792Y018175D01*
+X002815Y018187D01*
+X002841Y018195D01*
+X002867Y018199D01*
+X002893Y018199D01*
+X002919Y018195D01*
+X002945Y018187D01*
+X002969Y018175D01*
+X002990Y018160D01*
+X003010Y018142D01*
+X003026Y018122D01*
+X003039Y018099D01*
+X003049Y018074D01*
+X003055Y018048D01*
+X003057Y018022D01*
+X003055Y017996D01*
+X003049Y017970D01*
+X003039Y017945D01*
+X003026Y017922D01*
+X003010Y017902D01*
+X002990Y017884D01*
+X002968Y017869D01*
+X002945Y017857D01*
+X002919Y017849D01*
+X002893Y017845D01*
+X002867Y017845D01*
+X002841Y017849D01*
+X002815Y017857D01*
+X002791Y017869D01*
+X002770Y017884D01*
+X002750Y017902D01*
+X002734Y017922D01*
+X002721Y017945D01*
+X002711Y017970D01*
+X002705Y017996D01*
+X002703Y018022D01*
+X001720Y010046D02*
+X001722Y010073D01*
+X001728Y010100D01*
+X001737Y010126D01*
+X001750Y010150D01*
+X001766Y010173D01*
+X001785Y010192D01*
+X001807Y010209D01*
+X001831Y010223D01*
+X001856Y010233D01*
+X001883Y010240D01*
+X001910Y010243D01*
+X001938Y010242D01*
+X001965Y010237D01*
+X001991Y010229D01*
+X002015Y010217D01*
+X002038Y010201D01*
+X002059Y010183D01*
+X002076Y010162D01*
+X002091Y010138D01*
+X002102Y010113D01*
+X002110Y010087D01*
+X002114Y010060D01*
+X002114Y010032D01*
+X002110Y010005D01*
+X002102Y009979D01*
+X002091Y009954D01*
+X002076Y009930D01*
+X002059Y009909D01*
+X002038Y009891D01*
+X002016Y009875D01*
+X001991Y009863D01*
+X001965Y009855D01*
+X001938Y009850D01*
+X001910Y009849D01*
+X001883Y009852D01*
+X001856Y009859D01*
+X001831Y009869D01*
+X001807Y009883D01*
+X001785Y009900D01*
+X001766Y009919D01*
+X001750Y009942D01*
+X001737Y009966D01*
+X001728Y009992D01*
+X001722Y010019D01*
+X001720Y010046D01*
+X001720Y008864D02*
+X001722Y008891D01*
+X001728Y008918D01*
+X001737Y008944D01*
+X001750Y008968D01*
+X001766Y008991D01*
+X001785Y009010D01*
+X001807Y009027D01*
+X001831Y009041D01*
+X001856Y009051D01*
+X001883Y009058D01*
+X001910Y009061D01*
+X001938Y009060D01*
+X001965Y009055D01*
+X001991Y009047D01*
+X002015Y009035D01*
+X002038Y009019D01*
+X002059Y009001D01*
+X002076Y008980D01*
+X002091Y008956D01*
+X002102Y008931D01*
+X002110Y008905D01*
+X002114Y008878D01*
+X002114Y008850D01*
+X002110Y008823D01*
+X002102Y008797D01*
+X002091Y008772D01*
+X002076Y008748D01*
+X002059Y008727D01*
+X002038Y008709D01*
+X002016Y008693D01*
+X001991Y008681D01*
+X001965Y008673D01*
+X001938Y008668D01*
+X001910Y008667D01*
+X001883Y008670D01*
+X001856Y008677D01*
+X001831Y008687D01*
+X001807Y008701D01*
+X001785Y008718D01*
+X001766Y008737D01*
+X001750Y008760D01*
+X001737Y008784D01*
+X001728Y008810D01*
+X001722Y008837D01*
+X001720Y008864D01*
+D15*
+X001355Y003763D02*
+X001355Y003490D01*
+X001355Y003626D02*
+X000945Y003626D01*
+X001081Y003490D01*
+X001013Y003303D02*
+X000945Y003303D01*
+X001013Y003303D02*
+X001150Y003166D01*
+X001355Y003166D01*
+X001150Y003166D02*
+X001013Y003029D01*
+X000945Y003029D01*
+X001355Y002842D02*
+X001355Y002569D01*
+X000945Y002569D01*
+X001013Y002382D02*
+X001150Y002382D01*
+X001218Y002314D01*
+X001218Y002108D01*
+X001355Y002108D02*
+X000945Y002108D01*
+X000945Y002314D01*
+X001013Y002382D01*
+X001218Y002245D02*
+X001355Y002382D01*
+X014538Y011925D02*
+X014674Y011925D01*
+X014606Y011925D02*
+X014606Y012335D01*
+X014538Y012335D02*
+X014674Y012335D01*
+X014845Y012267D02*
+X014845Y011993D01*
+X014913Y011925D01*
+X015050Y011925D01*
+X015118Y011993D01*
+X015305Y011925D02*
+X015579Y011925D01*
+X015442Y011925D02*
+X015442Y012335D01*
+X015305Y012198D01*
+X015118Y012267D02*
+X015050Y012335D01*
+X014913Y012335D01*
+X014845Y012267D01*
+X015765Y012267D02*
+X015834Y012335D01*
+X015971Y012335D01*
+X016039Y012267D01*
+X016039Y012198D01*
+X015971Y012130D01*
+X016039Y012062D01*
+X016039Y011993D01*
+X015971Y011925D01*
+X015834Y011925D01*
+X015765Y011993D01*
+X015902Y012130D02*
+X015971Y012130D01*
+X011555Y015158D02*
+X011555Y015295D01*
+X011555Y015226D02*
+X011145Y015226D01*
+X011145Y015158D02*
+X011145Y015295D01*
+X011213Y015465D02*
+X011487Y015465D01*
+X011555Y015533D01*
+X011555Y015670D01*
+X011487Y015739D01*
+X011555Y015925D02*
+X011555Y016199D01*
+X011555Y016062D02*
+X011145Y016062D01*
+X011281Y015925D01*
+X011213Y015739D02*
+X011145Y015670D01*
+X011145Y015533D01*
+X011213Y015465D01*
+X011213Y016386D02*
+X011145Y016454D01*
+X011145Y016591D01*
+X011213Y016659D01*
+X011281Y016659D01*
+X011555Y016386D01*
+X011555Y016659D01*
+X009743Y014598D02*
+X009811Y014529D01*
+X009538Y014256D01*
+X009606Y014187D01*
+X009743Y014187D01*
+X009811Y014256D01*
+X009811Y014529D01*
+X009743Y014598D02*
+X009606Y014598D01*
+X009538Y014529D01*
+X009538Y014256D01*
+X009351Y014187D02*
+X009077Y014187D01*
+X009214Y014187D02*
+X009214Y014598D01*
+X009077Y014461D01*
+X008890Y014529D02*
+X008822Y014598D01*
+X008685Y014598D01*
+X008617Y014529D01*
+X008617Y014256D01*
+X008685Y014187D01*
+X008822Y014187D01*
+X008890Y014256D01*
+X008447Y014187D02*
+X008310Y014187D01*
+X008378Y014187D02*
+X008378Y014598D01*
+X008310Y014598D02*
+X008447Y014598D01*
+X006651Y014529D02*
+X006651Y014256D01*
+X006582Y014187D01*
+X006446Y014187D01*
+X006377Y014256D01*
+X006446Y014393D02*
+X006651Y014393D01*
+X006651Y014529D02*
+X006582Y014598D01*
+X006446Y014598D01*
+X006377Y014529D01*
+X006377Y014461D01*
+X006446Y014393D01*
+X006190Y014529D02*
+X006122Y014598D01*
+X005985Y014598D01*
+X005917Y014529D01*
+X005917Y014256D01*
+X005985Y014187D01*
+X006122Y014187D01*
+X006190Y014256D01*
+X005747Y014187D02*
+X005610Y014187D01*
+X005678Y014187D02*
+X005678Y014598D01*
+X005610Y014598D02*
+X005747Y014598D01*
+X001220Y016283D02*
+X001151Y016215D01*
+X001220Y016283D02*
+X001220Y016420D01*
+X001151Y016488D01*
+X001083Y016488D01*
+X001014Y016420D01*
+X001014Y016283D01*
+X000946Y016215D01*
+X000878Y016215D01*
+X000809Y016283D01*
+X000809Y016420D01*
+X000878Y016488D01*
+X000809Y016675D02*
+X001083Y016675D01*
+X001220Y016812D01*
+X001083Y016949D01*
+X000809Y016949D01*
+X000946Y017135D02*
+X000809Y017272D01*
+X001220Y017272D01*
+X001220Y017135D02*
+X001220Y017409D01*
+X022895Y015276D02*
+X022895Y015003D01*
+X022963Y014934D01*
+X023100Y014934D01*
+X023168Y015003D01*
+X023355Y015003D02*
+X023424Y014934D01*
+X023560Y014934D01*
+X023629Y015003D01*
+X023629Y015071D01*
+X023560Y015139D01*
+X023492Y015139D01*
+X023560Y015139D02*
+X023629Y015208D01*
+X023629Y015276D01*
+X023560Y015345D01*
+X023424Y015345D01*
+X023355Y015276D01*
+X023168Y015276D02*
+X023100Y015345D01*
+X022963Y015345D01*
+X022895Y015276D01*
+X023816Y015345D02*
+X024089Y015345D01*
+X024089Y015276D01*
+X023816Y015003D01*
+X023816Y014934D01*
+X031245Y017937D02*
+X031313Y017869D01*
+X031381Y017869D01*
+X031450Y017937D01*
+X031450Y018074D01*
+X031518Y018142D01*
+X031587Y018142D01*
+X031655Y018074D01*
+X031655Y017937D01*
+X031587Y017869D01*
+X031245Y017937D02*
+X031245Y018074D01*
+X031313Y018142D01*
+X031245Y018329D02*
+X031518Y018329D01*
+X031655Y018466D01*
+X031518Y018603D01*
+X031245Y018603D01*
+X031313Y018790D02*
+X031245Y018858D01*
+X031245Y018995D01*
+X031313Y019063D01*
+X031381Y019063D01*
+X031450Y018995D01*
+X031518Y019063D01*
+X031587Y019063D01*
+X031655Y018995D01*
+X031655Y018858D01*
+X031587Y018790D01*
+X031450Y018926D02*
+X031450Y018995D01*
+D16*
+X031950Y019755D02*
+X018950Y019755D01*
+X018950Y016155D01*
+X031950Y016155D01*
+X031950Y019755D01*
+X026475Y013155D02*
+X025900Y013155D01*
+X025500Y013155D02*
+X024925Y013155D01*
+X024925Y012255D01*
+X025500Y012255D01*
+X025900Y012255D02*
+X026475Y012255D01*
+X026475Y013155D01*
+X020761Y011771D02*
+X020761Y010039D01*
+X017848Y010039D01*
+X017848Y011771D01*
+X017946Y011771D01*
+X017946Y010039D01*
+X017848Y010039D02*
+X017749Y010039D01*
+X017749Y011771D01*
+X017848Y011771D01*
+X017946Y011771D02*
+X020761Y011771D01*
+X017749Y011771D02*
+X017651Y011771D01*
+X017651Y010039D01*
+X017749Y010039D01*
+X017450Y010730D02*
+X016550Y010730D01*
+X016550Y011305D01*
+X016550Y011705D02*
+X016550Y012280D01*
+X017450Y012280D01*
+X017450Y011705D01*
+X017450Y011305D02*
+X017450Y010730D01*
+X015694Y007511D02*
+X021206Y007511D01*
+X021206Y001999D01*
+X015694Y001999D01*
+X015694Y007511D01*
+X016087Y002786D02*
+X016089Y002825D01*
+X016095Y002864D01*
+X016105Y002902D01*
+X016118Y002939D01*
+X016135Y002974D01*
+X016155Y003008D01*
+X016179Y003039D01*
+X016206Y003068D01*
+X016235Y003094D01*
+X016267Y003117D01*
+X016301Y003137D01*
+X016337Y003153D01*
+X016374Y003165D01*
+X016413Y003174D01*
+X016452Y003179D01*
+X016491Y003180D01*
+X016530Y003177D01*
+X016569Y003170D01*
+X016606Y003159D01*
+X016643Y003145D01*
+X016678Y003127D01*
+X016711Y003106D01*
+X016742Y003081D01*
+X016770Y003054D01*
+X016795Y003024D01*
+X016817Y002991D01*
+X016836Y002957D01*
+X016851Y002921D01*
+X016863Y002883D01*
+X016871Y002845D01*
+X016875Y002806D01*
+X016875Y002766D01*
+X016871Y002727D01*
+X016863Y002689D01*
+X016851Y002651D01*
+X016836Y002615D01*
+X016817Y002581D01*
+X016795Y002548D01*
+X016770Y002518D01*
+X016742Y002491D01*
+X016711Y002466D01*
+X016678Y002445D01*
+X016643Y002427D01*
+X016606Y002413D01*
+X016569Y002402D01*
+X016530Y002395D01*
+X016491Y002392D01*
+X016452Y002393D01*
+X016413Y002398D01*
+X016374Y002407D01*
+X016337Y002419D01*
+X016301Y002435D01*
+X016267Y002455D01*
+X016235Y002478D01*
+X016206Y002504D01*
+X016179Y002533D01*
+X016155Y002564D01*
+X016135Y002598D01*
+X016118Y002633D01*
+X016105Y002670D01*
+X016095Y002708D01*
+X016089Y002747D01*
+X016087Y002786D01*
+X024625Y001505D02*
+X024625Y000605D01*
+X025200Y000605D01*
+X025600Y000605D02*
+X026175Y000605D01*
+X026175Y001505D01*
+X025600Y001505D01*
+X025200Y001505D02*
+X024625Y001505D01*
+X007891Y008614D02*
+X007891Y009796D01*
+X007000Y009405D02*
+X007000Y009005D01*
+X006900Y009005D01*
+X006800Y009005D01*
+X006800Y009305D01*
+X006900Y009305D01*
+X006900Y009405D01*
+X007000Y009405D01*
+X006900Y009405D02*
+X006900Y009005D01*
+X006900Y009405D02*
+X006800Y009405D01*
+X006789Y009796D02*
+X006789Y008614D01*
+X006780Y008605D02*
+X006680Y008605D01*
+X006680Y009805D01*
+X006780Y009805D01*
+X006689Y009796D02*
+X006689Y008614D01*
+X005325Y008605D02*
+X005325Y007705D01*
+X004750Y007705D01*
+X004350Y007705D02*
+X003775Y007705D01*
+X003775Y008605D01*
+X004350Y008605D01*
+X004750Y008605D02*
+X005325Y008605D01*
+X002225Y006805D02*
+X002225Y005905D01*
+X001650Y005905D01*
+X001250Y005905D02*
+X000675Y005905D01*
+X000675Y006805D01*
+X001250Y006805D01*
+X001650Y006805D02*
+X002225Y006805D01*
+X000644Y005503D02*
+X000644Y000307D01*
+X006156Y000307D01*
+X006156Y005503D01*
+X000644Y005503D01*
+X004975Y003692D02*
+X004975Y002118D01*
+X005762Y002118D01*
+X005762Y003692D01*
+X004975Y003692D01*
+X004825Y011805D02*
+X004250Y011805D01*
+X003850Y011805D02*
+X003275Y011805D01*
+X003275Y012705D01*
+X003850Y012705D01*
+X004250Y012705D02*
+X004825Y012705D01*
+X004825Y011805D01*
+X002875Y011805D02*
+X002875Y012705D01*
+X002300Y012705D01*
+X001900Y012705D02*
+X001325Y012705D01*
+X001325Y011805D01*
+X001900Y011805D01*
+X002300Y011805D02*
+X002875Y011805D01*
+X011750Y014455D02*
+X011850Y014455D01*
+X011850Y015455D01*
+X011750Y015455D01*
+X011750Y014455D01*
+X011850Y014455D02*
+X011950Y014455D01*
+X012050Y014455D01*
+X013750Y014455D01*
+X013750Y015455D01*
+X012150Y015455D01*
+X012050Y015455D01*
+X011950Y015455D01*
+X011850Y015455D01*
+X007700Y018005D02*
+X006700Y018005D01*
+X006700Y019705D01*
+X006700Y019805D01*
+X006700Y019905D01*
+X007700Y019905D01*
+X007700Y020005D01*
+X006700Y020005D01*
+X006700Y019905D01*
+X007700Y019905D02*
+X007700Y019805D01*
+X007700Y019705D01*
+X007700Y019605D01*
+X007700Y018005D01*
+X006150Y018015D02*
+X006150Y017295D01*
+X004850Y017295D01*
+X004850Y018015D01*
+X006150Y018015D01*
+X011900Y018494D02*
+X011900Y019416D01*
+X017900Y019416D01*
+X017900Y018494D01*
+X011900Y018494D01*
+X019690Y014716D02*
+X019726Y014751D01*
+X019490Y015140D02*
+X019492Y015190D01*
+X019498Y015239D01*
+X019508Y015288D01*
+X019521Y015335D01*
+X019539Y015382D01*
+X019560Y015427D01*
+X019584Y015470D01*
+X019612Y015511D01*
+X019643Y015550D01*
+X019677Y015586D01*
+X019714Y015620D01*
+X019754Y015650D01*
+X019795Y015677D01*
+X019839Y015701D01*
+X019884Y015721D01*
+X019931Y015737D01*
+X019979Y015750D01*
+X020028Y015759D01*
+X020078Y015764D01*
+X020127Y015765D01*
+X020177Y015762D01*
+X020226Y015755D01*
+X020275Y015744D01*
+X020322Y015730D01*
+X020368Y015711D01*
+X020413Y015689D01*
+X020456Y015664D01*
+X020496Y015635D01*
+X020534Y015603D01*
+X020570Y015569D01*
+X020603Y015531D01*
+X020632Y015491D01*
+X020658Y015449D01*
+X020681Y015405D01*
+X020700Y015359D01*
+X020716Y015312D01*
+X020728Y015263D01*
+X020736Y015214D01*
+X020740Y015165D01*
+X020740Y015115D01*
+X020736Y015066D01*
+X020728Y015017D01*
+X020716Y014968D01*
+X020700Y014921D01*
+X020681Y014875D01*
+X020658Y014831D01*
+X020632Y014789D01*
+X020603Y014749D01*
+X020570Y014711D01*
+X020534Y014677D01*
+X020496Y014645D01*
+X020456Y014616D01*
+X020413Y014591D01*
+X020368Y014569D01*
+X020322Y014550D01*
+X020275Y014536D01*
+X020226Y014525D01*
+X020177Y014518D01*
+X020127Y014515D01*
+X020078Y014516D01*
+X020028Y014521D01*
+X019979Y014530D01*
+X019931Y014543D01*
+X019884Y014559D01*
+X019839Y014579D01*
+X019795Y014603D01*
+X019754Y014630D01*
+X019714Y014660D01*
+X019677Y014694D01*
+X019643Y014730D01*
+X019612Y014769D01*
+X019584Y014810D01*
+X019560Y014853D01*
+X019539Y014898D01*
+X019521Y014945D01*
+X019508Y014992D01*
+X019498Y015041D01*
+X019492Y015090D01*
+X019490Y015140D01*
+X020504Y015529D02*
+X020539Y015565D01*
+D17*
+X017505Y017825D02*
+X017440Y017760D01*
+X017310Y017760D01*
+X017245Y017825D01*
+X017245Y017955D02*
+X017375Y018020D01*
+X017440Y018020D01*
+X017505Y017955D01*
+X017505Y017825D01*
+X017245Y017955D02*
+X017245Y018150D01*
+X017505Y018150D01*
+X017044Y018150D02*
+X017044Y017890D01*
+X016914Y017760D01*
+X016784Y017890D01*
+X016784Y018150D01*
+X016584Y018085D02*
+X016519Y018150D01*
+X016389Y018150D01*
+X016324Y018085D01*
+X016324Y018020D01*
+X016389Y017955D01*
+X016519Y017955D01*
+X016584Y017890D01*
+X016584Y017825D01*
+X016519Y017760D01*
+X016389Y017760D01*
+X016324Y017825D01*
+X019880Y007356D02*
+X019880Y006922D01*
+X019880Y007139D02*
+X019229Y007139D01*
+X019446Y006922D01*
+X019338Y006656D02*
+X019229Y006548D01*
+X019229Y006331D01*
+X019338Y006223D01*
+X019771Y006223D01*
+X019880Y006331D01*
+X019880Y006548D01*
+X019771Y006656D01*
+X019880Y005973D02*
+X019880Y005756D01*
+X019880Y005865D02*
+X019229Y005865D01*
+X019229Y005973D02*
+X019229Y005756D01*
+D18*
+X029245Y003292D02*
+X029616Y003292D01*
+X029616Y003169D02*
+X029616Y003415D01*
+X029369Y003169D02*
+X029245Y003292D01*
+X029245Y003047D02*
+X029245Y002800D01*
+X029245Y002679D02*
+X029616Y002432D01*
+X029616Y002679D02*
+X029245Y002432D01*
+X029245Y002924D02*
+X029616Y002924D01*
+X029848Y007551D02*
+X030095Y007921D01*
+X030216Y007921D02*
+X030463Y007921D01*
+X030340Y007921D02*
+X030340Y007551D01*
+X030585Y007551D02*
+X030832Y007798D01*
+X030832Y007859D01*
+X030770Y007921D01*
+X030646Y007921D01*
+X030585Y007859D01*
+X030585Y007551D02*
+X030832Y007551D01*
+X030095Y007551D02*
+X029848Y007921D01*
+D19*
+X030007Y010354D02*
+X029677Y010354D01*
+X029677Y010519D01*
+X029732Y010574D01*
+X029952Y010574D01*
+X030007Y010519D01*
+X030007Y010354D01*
+X029952Y010722D02*
+X029897Y010722D01*
+X029842Y010777D01*
+X029842Y010887D01*
+X029897Y010942D01*
+X029952Y010942D01*
+X030007Y010887D01*
+X030007Y010777D01*
+X029952Y010722D01*
+X029842Y010777D02*
+X029787Y010722D01*
+X029732Y010722D01*
+X029677Y010777D01*
+X029677Y010887D01*
+X029732Y010942D01*
+X029787Y010942D01*
+X029842Y010887D01*
+X030156Y012709D02*
+X030228Y012709D01*
+X030300Y012781D01*
+X030300Y012924D01*
+X030372Y012996D01*
+X030443Y012996D01*
+X030515Y012924D01*
+X030515Y012781D01*
+X030443Y012709D01*
+X030156Y012709D02*
+X030085Y012781D01*
+X030085Y012924D01*
+X030156Y012996D01*
+X030085Y013169D02*
+X030515Y013169D01*
+X030372Y013313D01*
+X030515Y013456D01*
+X030085Y013456D01*
+X030228Y013630D02*
+X030085Y013773D01*
+X030515Y013773D01*
+X030515Y013630D02*
+X030515Y013917D01*
+X025702Y014700D02*
+X025482Y014700D01*
+X025592Y014810D02*
+X025592Y014590D01*
+X023055Y011407D02*
+X023055Y011187D01*
+X022945Y011297D02*
+X023165Y011297D01*
+X022215Y011297D02*
+X021995Y011297D01*
+X022105Y011187D02*
+X022105Y011407D01*
+X021265Y011297D02*
+X021045Y011297D01*
+X021155Y011187D02*
+X021155Y011407D01*
+X009626Y012858D02*
+X009406Y012858D01*
+X009571Y013023D01*
+X009571Y012692D01*
+X009258Y012692D02*
+X009038Y012692D01*
+X009148Y012692D02*
+X009148Y013023D01*
+X009038Y012913D01*
+X008890Y012968D02*
+X008835Y013023D01*
+X008725Y013023D01*
+X008670Y012968D01*
+X008670Y012747D01*
+X008725Y012692D01*
+X008835Y012692D01*
+X008890Y012747D01*
+X008534Y012692D02*
+X008424Y012692D01*
+X008479Y012692D02*
+X008479Y013023D01*
+X008424Y013023D02*
+X008534Y013023D01*
+X006460Y009574D02*
+X006350Y009574D01*
+X006295Y009519D01*
+X006295Y009464D01*
+X006350Y009354D01*
+X006185Y009354D01*
+X006185Y009574D01*
+X006460Y009574D02*
+X006515Y009519D01*
+X006515Y009409D01*
+X006460Y009354D01*
+X006460Y009206D02*
+X006515Y009151D01*
+X006515Y009041D01*
+X006460Y008986D01*
+X006240Y008986D01*
+X006185Y009041D01*
+X006185Y009151D01*
+X006240Y009206D01*
+X006185Y008850D02*
+X006185Y008740D01*
+X006185Y008795D02*
+X006515Y008795D01*
+X006515Y008740D02*
+X006515Y008850D01*
+X003923Y007173D02*
+X003923Y007063D01*
+X003868Y007008D01*
+X003868Y006860D02*
+X003647Y006860D01*
+X003592Y006805D01*
+X003592Y006640D01*
+X003923Y006640D01*
+X003923Y006805D01*
+X003868Y006860D01*
+X003647Y007008D02*
+X003592Y007063D01*
+X003592Y007173D01*
+X003647Y007228D01*
+X003703Y007228D01*
+X003758Y007173D01*
+X003813Y007228D01*
+X003868Y007228D01*
+X003923Y007173D01*
+X003758Y007173D02*
+X003758Y007118D01*
+X005180Y005878D02*
+X005346Y005878D01*
+X005401Y005823D01*
+X005401Y005603D01*
+X005346Y005548D01*
+X005180Y005548D01*
+X005180Y005878D01*
+X005549Y005768D02*
+X005659Y005878D01*
+X005659Y005548D01*
+X005549Y005548D02*
+X005769Y005548D01*
+X005917Y005603D02*
+X006137Y005823D01*
+X006137Y005603D01*
+X006082Y005548D01*
+X005972Y005548D01*
+X005917Y005603D01*
+X005917Y005823D01*
+X005972Y005878D01*
+X006082Y005878D01*
+X006137Y005823D01*
+X006117Y006048D02*
+X006337Y006268D01*
+X006337Y006323D01*
+X006282Y006378D01*
+X006172Y006378D01*
+X006117Y006323D01*
+X005969Y006323D02*
+X005914Y006378D01*
+X005749Y006378D01*
+X005749Y006048D01*
+X005914Y006048D01*
+X005969Y006103D01*
+X005969Y006323D01*
+X006117Y006048D02*
+X006337Y006048D01*
+X008294Y005468D02*
+X008624Y005468D01*
+X008624Y005358D02*
+X008624Y005578D01*
+X008404Y005358D02*
+X008294Y005468D01*
+X008349Y005210D02*
+X008294Y005155D01*
+X008294Y004990D01*
+X008624Y004990D01*
+X008624Y005155D01*
+X008569Y005210D01*
+X008349Y005210D01*
+X023935Y002513D02*
+X024045Y002513D01*
+X023990Y002513D02*
+X023990Y002182D01*
+X023935Y002182D02*
+X024045Y002182D01*
+X024180Y002237D02*
+X024235Y002182D01*
+X024345Y002182D01*
+X024400Y002237D01*
+X024548Y002237D02*
+X024548Y002182D01*
+X024548Y002237D02*
+X024769Y002458D01*
+X024769Y002513D01*
+X024548Y002513D01*
+X024400Y002458D02*
+X024345Y002513D01*
+X024235Y002513D01*
+X024180Y002458D01*
+X024180Y002237D01*
+X030935Y000735D02*
+X031045Y000735D01*
+X030990Y000735D02*
+X030990Y000405D01*
+X030935Y000405D02*
+X031045Y000405D01*
+X031181Y000460D02*
+X031236Y000405D01*
+X031346Y000405D01*
+X031401Y000460D01*
+X031549Y000570D02*
+X031769Y000570D01*
+X031714Y000405D02*
+X031714Y000735D01*
+X031549Y000570D01*
+X031401Y000680D02*
+X031346Y000735D01*
+X031236Y000735D01*
+X031181Y000680D01*
+X031181Y000460D01*
+D20*
+X028289Y004327D02*
+X027698Y004327D01*
+X028289Y004327D02*
+X028289Y004918D01*
+X024549Y004327D02*
+X023958Y004327D01*
+X023958Y004918D01*
+X023958Y008068D02*
+X023958Y008658D01*
+X024549Y008658D01*
+X027698Y008658D02*
+X028289Y008658D01*
+X028289Y008068D01*
+X027586Y008145D02*
+X027588Y008169D01*
+X027594Y008193D01*
+X027603Y008215D01*
+X027616Y008235D01*
+X027632Y008253D01*
+X027651Y008268D01*
+X027672Y008281D01*
+X027694Y008289D01*
+X027718Y008294D01*
+X027742Y008295D01*
+X027766Y008292D01*
+X027789Y008285D01*
+X027811Y008275D01*
+X027831Y008261D01*
+X027848Y008244D01*
+X027863Y008225D01*
+X027874Y008204D01*
+X027882Y008181D01*
+X027886Y008157D01*
+X027886Y008133D01*
+X027882Y008109D01*
+X027874Y008086D01*
+X027863Y008065D01*
+X027848Y008046D01*
+X027831Y008029D01*
+X027811Y008015D01*
+X027789Y008005D01*
+X027766Y007998D01*
+X027742Y007995D01*
+X027718Y007996D01*
+X027694Y008001D01*
+X027672Y008009D01*
+X027651Y008022D01*
+X027632Y008037D01*
+X027616Y008055D01*
+X027603Y008075D01*
+X027594Y008097D01*
+X027588Y008121D01*
+X027586Y008145D01*
+D21*
+X027255Y007808D02*
+X026948Y007808D01*
+X027101Y007808D02*
+X027101Y008269D01*
+X026948Y008115D01*
+X027101Y007465D02*
+X027024Y007388D01*
+X027024Y007235D01*
+X027101Y007158D01*
+X027101Y007004D02*
+X027024Y006928D01*
+X027024Y006774D01*
+X027101Y006698D01*
+X027408Y006698D01*
+X027484Y006774D01*
+X027484Y006928D01*
+X027408Y007004D01*
+X027484Y007158D02*
+X027177Y007465D01*
+X027101Y007465D01*
+X027484Y007465D02*
+X027484Y007158D01*
+X027484Y006544D02*
+X027484Y006391D01*
+X027484Y006467D02*
+X027024Y006467D01*
+X027024Y006391D02*
+X027024Y006544D01*
+X001098Y009270D02*
+X001021Y009193D01*
+X001098Y009270D02*
+X001098Y009423D01*
+X001021Y009500D01*
+X000945Y009500D01*
+X000868Y009423D01*
+X000868Y009270D01*
+X000791Y009193D01*
+X000714Y009193D01*
+X000638Y009270D01*
+X000638Y009423D01*
+X000714Y009500D01*
+X000638Y009653D02*
+X000945Y009653D01*
+X001098Y009807D01*
+X000945Y009960D01*
+X000638Y009960D01*
+X000714Y010114D02*
+X000638Y010190D01*
+X000638Y010344D01*
+X000714Y010421D01*
+X000791Y010421D01*
+X001098Y010114D01*
+X001098Y010421D01*
+D22*
+X031430Y008735D02*
+X031430Y007575D01*
+X031970Y007575D01*
+X031970Y008735D01*
+X031430Y008735D01*
+X031430Y007585D02*
+X031970Y007585D01*
+X031970Y006425D01*
+X031430Y006425D01*
+X031430Y007585D01*
+D23*
+X025850Y010135D02*
+X024540Y010135D01*
+X024540Y012075D01*
+X025850Y012075D01*
+X025850Y010135D01*
+X027781Y011932D02*
+X031719Y011932D01*
+X031719Y012345D01*
+X031719Y013089D02*
+X031719Y014133D01*
+X031719Y014865D02*
+X031719Y015278D01*
+X027781Y015278D01*
+X027781Y014865D01*
+X027781Y014133D02*
+X027781Y013089D01*
+X027781Y012345D02*
+X027781Y011932D01*
+X024617Y012956D02*
+X024617Y013861D01*
+X024617Y014649D02*
+X024617Y015554D01*
+X022255Y015554D01*
+X022216Y015554D02*
+X021783Y015239D01*
+X021783Y014649D01*
+X021783Y013861D02*
+X021783Y013271D01*
+X022255Y012956D01*
+X024617Y012956D01*
+X018410Y014585D02*
+X018410Y016525D01*
+X017100Y016525D01*
+X017100Y014585D01*
+X018410Y014585D01*
+X016949Y014760D02*
+X016634Y014288D01*
+X016044Y014288D01*
+X015256Y014288D02*
+X014666Y014288D01*
+X014351Y014721D01*
+X014351Y014760D02*
+X014351Y017122D01*
+X015256Y017122D01*
+X016044Y017122D02*
+X016949Y017122D01*
+X016949Y014760D01*
+X010210Y016985D02*
+X010210Y018925D01*
+X008900Y018925D01*
+X008900Y016985D01*
+X010210Y016985D01*
+X014430Y010615D02*
+X014430Y009305D01*
+X016370Y009305D01*
+X016370Y010615D01*
+X014430Y010615D01*
+D24*
+X007028Y004000D02*
+X007028Y003807D01*
+X007028Y003904D02*
+X006737Y003904D01*
+X006834Y003807D01*
+X006786Y003678D02*
+X006979Y003678D01*
+X007028Y003630D01*
+X007028Y003533D01*
+X006979Y003485D01*
+X006786Y003485D01*
+X006737Y003533D01*
+X006737Y003630D01*
+X006786Y003678D01*
+X006931Y003581D02*
+X007028Y003678D01*
+X007887Y002676D02*
+X008178Y002676D01*
+X008178Y002579D02*
+X008178Y002773D01*
+X007984Y002579D02*
+X007887Y002676D01*
+X008178Y002450D02*
+X008178Y002257D01*
+X008178Y002354D02*
+X007887Y002354D01*
+X007984Y002257D01*
+X007936Y002128D02*
+X007887Y002080D01*
+X007887Y001935D01*
+X008178Y001935D01*
+X008178Y002080D01*
+X008129Y002128D01*
+X007936Y002128D01*
+X007695Y001968D02*
+X007695Y001919D01*
+X007502Y001726D01*
+X007502Y001677D01*
+X007373Y001726D02*
+X007325Y001677D01*
+X007180Y001677D01*
+X007180Y001968D01*
+X007325Y001968D01*
+X007373Y001919D01*
+X007373Y001726D01*
+X007502Y001968D02*
+X007695Y001968D01*
+M02*
diff --git a/pcb/proxmark3_fix/CAM/proxmark3.GTP b/pcb/proxmark3_fix/CAM/proxmark3.GTP
new file mode 100644 (file)
index 0000000..74c3e09
--- /dev/null
@@ -0,0 +1,853 @@
+G75*
+G70*
+%OFA0B0*%
+%FSLAX24Y24*%
+%IPPOS*%
+%LPD*%
+%AMOC8*
+5,1,8,0,0,1.08239X$1,22.5*
+%
+%ADD10C,0.0010*%
+%ADD11R,0.0551X0.0117*%
+%ADD12R,0.0866X0.0157*%
+%ADD13R,0.1338X0.1338*%
+%ADD14C,0.0000*%
+%ADD15R,0.0393X0.0354*%
+%ADD16R,0.0551X0.0058*%
+%ADD17R,0.0058X0.0452*%
+%ADD18R,0.0905X0.0905*%
+%ADD19R,0.0551X0.0157*%
+%ADD20R,0.0058X0.0747*%
+%ADD21R,0.0747X0.0058*%
+%ADD22R,0.1456X0.0866*%
+%ADD23R,0.0944X0.0177*%
+%ADD24R,0.0102X0.0472*%
+%ADD25R,0.0354X0.0393*%
+%ADD26R,0.1102X0.0551*%
+%ADD27R,0.0360X0.0360*%
+%ADD28R,0.0360X0.0660*%
+%ADD29R,0.0660X0.0360*%
+%ADD30R,0.0078X0.0551*%
+%ADD31R,0.0102X0.0511*%
+%ADD32R,0.0472X0.0551*%
+%ADD33R,0.0088X0.0669*%
+%ADD34R,0.0220X0.0760*%
+%ADD35R,0.0551X0.1102*%
+%ADD36R,0.0362X0.0121*%
+%ADD37R,0.0354X0.1141*%
+%ADD38R,0.1141X0.0551*%
+%ADD39R,0.1338X0.0551*%
+%ADD40R,0.0551X0.1338*%
+%ADD41R,0.0660X0.1310*%
+%ADD42R,0.1310X0.0660*%
+%ADD43R,0.0760X0.0220*%
+D10*
+X000450Y000105D02*
+X032450Y000105D01*
+X032450Y020305D01*
+X000450Y020305D01*
+X000450Y000105D01*
+D11*
+X014788Y010935D03*
+X015910Y010935D03*
+X015910Y011309D03*
+X015910Y011683D03*
+X014788Y011683D03*
+X008462Y016877D03*
+X007340Y016877D03*
+X007340Y017251D03*
+X007340Y017625D03*
+X008462Y017625D03*
+D12*
+X003687Y017648D03*
+X003687Y017962D03*
+X003687Y017333D03*
+X003687Y017018D03*
+X003687Y016703D03*
+D13*
+X003766Y015325D03*
+X001994Y015325D03*
+X001994Y019340D03*
+X003766Y019340D03*
+D14*
+X002703Y018022D02*
+X002705Y018048D01*
+X002711Y018074D01*
+X002721Y018099D01*
+X002734Y018122D01*
+X002750Y018142D01*
+X002770Y018160D01*
+X002792Y018175D01*
+X002815Y018187D01*
+X002841Y018195D01*
+X002867Y018199D01*
+X002893Y018199D01*
+X002919Y018195D01*
+X002945Y018187D01*
+X002969Y018175D01*
+X002990Y018160D01*
+X003010Y018142D01*
+X003026Y018122D01*
+X003039Y018099D01*
+X003049Y018074D01*
+X003055Y018048D01*
+X003057Y018022D01*
+X003055Y017996D01*
+X003049Y017970D01*
+X003039Y017945D01*
+X003026Y017922D01*
+X003010Y017902D01*
+X002990Y017884D01*
+X002968Y017869D01*
+X002945Y017857D01*
+X002919Y017849D01*
+X002893Y017845D01*
+X002867Y017845D01*
+X002841Y017849D01*
+X002815Y017857D01*
+X002791Y017869D01*
+X002770Y017884D01*
+X002750Y017902D01*
+X002734Y017922D01*
+X002721Y017945D01*
+X002711Y017970D01*
+X002705Y017996D01*
+X002703Y018022D01*
+X002703Y016644D02*
+X002705Y016670D01*
+X002711Y016696D01*
+X002721Y016721D01*
+X002734Y016744D01*
+X002750Y016764D01*
+X002770Y016782D01*
+X002792Y016797D01*
+X002815Y016809D01*
+X002841Y016817D01*
+X002867Y016821D01*
+X002893Y016821D01*
+X002919Y016817D01*
+X002945Y016809D01*
+X002969Y016797D01*
+X002990Y016782D01*
+X003010Y016764D01*
+X003026Y016744D01*
+X003039Y016721D01*
+X003049Y016696D01*
+X003055Y016670D01*
+X003057Y016644D01*
+X003055Y016618D01*
+X003049Y016592D01*
+X003039Y016567D01*
+X003026Y016544D01*
+X003010Y016524D01*
+X002990Y016506D01*
+X002968Y016491D01*
+X002945Y016479D01*
+X002919Y016471D01*
+X002893Y016467D01*
+X002867Y016467D01*
+X002841Y016471D01*
+X002815Y016479D01*
+X002791Y016491D01*
+X002770Y016506D01*
+X002750Y016524D01*
+X002734Y016544D01*
+X002721Y016567D01*
+X002711Y016592D01*
+X002705Y016618D01*
+X002703Y016644D01*
+X001720Y010046D02*
+X001722Y010073D01*
+X001728Y010100D01*
+X001737Y010126D01*
+X001750Y010150D01*
+X001766Y010173D01*
+X001785Y010192D01*
+X001807Y010209D01*
+X001831Y010223D01*
+X001856Y010233D01*
+X001883Y010240D01*
+X001910Y010243D01*
+X001938Y010242D01*
+X001965Y010237D01*
+X001991Y010229D01*
+X002015Y010217D01*
+X002038Y010201D01*
+X002059Y010183D01*
+X002076Y010162D01*
+X002091Y010138D01*
+X002102Y010113D01*
+X002110Y010087D01*
+X002114Y010060D01*
+X002114Y010032D01*
+X002110Y010005D01*
+X002102Y009979D01*
+X002091Y009954D01*
+X002076Y009930D01*
+X002059Y009909D01*
+X002038Y009891D01*
+X002016Y009875D01*
+X001991Y009863D01*
+X001965Y009855D01*
+X001938Y009850D01*
+X001910Y009849D01*
+X001883Y009852D01*
+X001856Y009859D01*
+X001831Y009869D01*
+X001807Y009883D01*
+X001785Y009900D01*
+X001766Y009919D01*
+X001750Y009942D01*
+X001737Y009966D01*
+X001728Y009992D01*
+X001722Y010019D01*
+X001720Y010046D01*
+X001720Y008864D02*
+X001722Y008891D01*
+X001728Y008918D01*
+X001737Y008944D01*
+X001750Y008968D01*
+X001766Y008991D01*
+X001785Y009010D01*
+X001807Y009027D01*
+X001831Y009041D01*
+X001856Y009051D01*
+X001883Y009058D01*
+X001910Y009061D01*
+X001938Y009060D01*
+X001965Y009055D01*
+X001991Y009047D01*
+X002015Y009035D01*
+X002038Y009019D01*
+X002059Y009001D01*
+X002076Y008980D01*
+X002091Y008956D01*
+X002102Y008931D01*
+X002110Y008905D01*
+X002114Y008878D01*
+X002114Y008850D01*
+X002110Y008823D01*
+X002102Y008797D01*
+X002091Y008772D01*
+X002076Y008748D01*
+X002059Y008727D01*
+X002038Y008709D01*
+X002016Y008693D01*
+X001991Y008681D01*
+X001965Y008673D01*
+X001938Y008668D01*
+X001910Y008667D01*
+X001883Y008670D01*
+X001856Y008677D01*
+X001831Y008687D01*
+X001807Y008701D01*
+X001785Y008718D01*
+X001766Y008737D01*
+X001750Y008760D01*
+X001737Y008784D01*
+X001728Y008810D01*
+X001722Y008837D01*
+X001720Y008864D01*
+D15*
+X002750Y006690D03*
+X002750Y006020D03*
+X007000Y006570D03*
+X007650Y006570D03*
+X008300Y006570D03*
+X008950Y006570D03*
+X009600Y006570D03*
+X010250Y006570D03*
+X010900Y006570D03*
+X010900Y007240D03*
+X010250Y007240D03*
+X009600Y007240D03*
+X008950Y007240D03*
+X008300Y007240D03*
+X007650Y007240D03*
+X007000Y007240D03*
+X009000Y008120D03*
+X009650Y008120D03*
+X009650Y008790D03*
+X009000Y008790D03*
+X010750Y008970D03*
+X010750Y009640D03*
+X011750Y009490D03*
+X011750Y008820D03*
+X011500Y010720D03*
+X012150Y010720D03*
+X012150Y011390D03*
+X011500Y011390D03*
+X007950Y011390D03*
+X007300Y011390D03*
+X006650Y011390D03*
+X006950Y011970D03*
+X006300Y011970D03*
+X006300Y012640D03*
+X006950Y012640D03*
+X007600Y012640D03*
+X007600Y011970D03*
+X007300Y010720D03*
+X007950Y010720D03*
+X006650Y010720D03*
+X005800Y009490D03*
+X005800Y008820D03*
+X009600Y005990D03*
+X009600Y005320D03*
+X009900Y004490D03*
+X009900Y003820D03*
+X011350Y002190D03*
+X012000Y001870D03*
+X012600Y001490D03*
+X013250Y001490D03*
+X013900Y001490D03*
+X014550Y001490D03*
+X014550Y000820D03*
+X013900Y000820D03*
+X013250Y000820D03*
+X012600Y000820D03*
+X011350Y001520D03*
+X012000Y002540D03*
+X012650Y003720D03*
+X012650Y004390D03*
+X012650Y005020D03*
+X013250Y005020D03*
+X013250Y005690D03*
+X012650Y005690D03*
+X007400Y004490D03*
+X007400Y003820D03*
+X017150Y009420D03*
+X017150Y010090D03*
+X021650Y010070D03*
+X022600Y010070D03*
+X022600Y010740D03*
+X022600Y011320D03*
+X021650Y011320D03*
+X021650Y010740D03*
+X021650Y011990D03*
+X022600Y011990D03*
+X023550Y011990D03*
+X023550Y011320D03*
+X023550Y010740D03*
+X023550Y010070D03*
+X026250Y010320D03*
+X026950Y010320D03*
+X026950Y010990D03*
+X026250Y010990D03*
+X027850Y010820D03*
+X028550Y010840D03*
+X029200Y010840D03*
+X029200Y010170D03*
+X028550Y010170D03*
+X029200Y009540D03*
+X029200Y008870D03*
+X031700Y008490D03*
+X031700Y007820D03*
+X031700Y007340D03*
+X031700Y006670D03*
+X031350Y003140D03*
+X031350Y002470D03*
+X031350Y001790D03*
+X031350Y001120D03*
+X026950Y000970D03*
+X026950Y001640D03*
+X022500Y003770D03*
+X022500Y004440D03*
+X022150Y007620D03*
+X022150Y008290D03*
+X027850Y011490D03*
+X026950Y012920D03*
+X026950Y013590D03*
+X017400Y013690D03*
+X017400Y013020D03*
+X007000Y018970D03*
+X007000Y019640D03*
+X005200Y019240D03*
+X005200Y018570D03*
+X004550Y013740D03*
+X003900Y013740D03*
+X003250Y013740D03*
+X002600Y013740D03*
+X001950Y013740D03*
+X001300Y013740D03*
+X001300Y013070D03*
+X001950Y013070D03*
+X002600Y013070D03*
+X003250Y013070D03*
+X003900Y013070D03*
+X004550Y013070D03*
+D16*
+X015300Y007117D03*
+X015300Y006920D03*
+X015300Y006724D03*
+X015300Y006527D03*
+X015300Y006330D03*
+X015300Y006133D03*
+X015300Y005936D03*
+X015300Y005739D03*
+X015300Y005542D03*
+X015300Y005346D03*
+X015300Y005149D03*
+X015300Y004952D03*
+X015300Y004755D03*
+X015300Y004558D03*
+X015300Y004361D03*
+X015300Y004164D03*
+X015300Y003968D03*
+X015300Y003771D03*
+X015300Y003574D03*
+X015300Y003377D03*
+X015300Y003180D03*
+X015300Y002983D03*
+X015300Y002786D03*
+X015300Y002590D03*
+X015300Y002393D03*
+X021600Y002393D03*
+X021600Y002590D03*
+X021600Y002786D03*
+X021600Y002983D03*
+X021600Y003180D03*
+X021600Y003377D03*
+X021600Y003574D03*
+X021600Y003771D03*
+X021600Y003968D03*
+X021600Y004164D03*
+X021600Y004361D03*
+X021600Y004558D03*
+X021600Y004755D03*
+X021600Y004952D03*
+X021600Y005149D03*
+X021600Y005346D03*
+X021600Y005542D03*
+X021600Y005739D03*
+X021600Y005936D03*
+X021600Y006133D03*
+X021600Y006330D03*
+X021600Y006527D03*
+X021600Y006724D03*
+X021600Y006920D03*
+X021600Y007117D03*
+D17*
+X020812Y007905D03*
+X020615Y007905D03*
+X020419Y007905D03*
+X020222Y007905D03*
+X020025Y007905D03*
+X019828Y007905D03*
+X019631Y007905D03*
+X019434Y007905D03*
+X019237Y007905D03*
+X019041Y007905D03*
+X018844Y007905D03*
+X018647Y007905D03*
+X018450Y007905D03*
+X018253Y007905D03*
+X018056Y007905D03*
+X017859Y007905D03*
+X017663Y007905D03*
+X017466Y007905D03*
+X017269Y007905D03*
+X017072Y007905D03*
+X016875Y007905D03*
+X016678Y007905D03*
+X016481Y007905D03*
+X016285Y007905D03*
+X016088Y007905D03*
+X016088Y001605D03*
+X016285Y001605D03*
+X016481Y001605D03*
+X016678Y001605D03*
+X016875Y001605D03*
+X017072Y001605D03*
+X017269Y001605D03*
+X017466Y001605D03*
+X017663Y001605D03*
+X017859Y001605D03*
+X018056Y001605D03*
+X018253Y001605D03*
+X018450Y001605D03*
+X018647Y001605D03*
+X018844Y001605D03*
+X019041Y001605D03*
+X019237Y001605D03*
+X019434Y001605D03*
+X019631Y001605D03*
+X019828Y001605D03*
+X020025Y001605D03*
+X020222Y001605D03*
+X020419Y001605D03*
+X020615Y001605D03*
+X020812Y001605D03*
+D18*
+X028500Y002855D03*
+X030429Y002855D03*
+X030400Y006705D03*
+X030400Y008634D03*
+D19*
+X030400Y001653D03*
+X030400Y001279D03*
+X030400Y000905D03*
+X029534Y000905D03*
+X029534Y001653D03*
+D20*
+X027600Y004131D03*
+X027403Y004131D03*
+X027206Y004131D03*
+X027009Y004131D03*
+X026813Y004131D03*
+X026616Y004131D03*
+X026419Y004131D03*
+X026222Y004131D03*
+X026025Y004131D03*
+X025828Y004131D03*
+X025631Y004131D03*
+X025435Y004131D03*
+X025238Y004131D03*
+X025041Y004131D03*
+X024844Y004131D03*
+X024647Y004131D03*
+X024647Y008855D03*
+X024844Y008855D03*
+X025041Y008855D03*
+X025238Y008855D03*
+X025435Y008855D03*
+X025631Y008855D03*
+X025828Y008855D03*
+X026025Y008855D03*
+X026222Y008855D03*
+X026419Y008855D03*
+X026616Y008855D03*
+X026813Y008855D03*
+X027009Y008855D03*
+X027206Y008855D03*
+X027403Y008855D03*
+X027600Y008855D03*
+D21*
+X028486Y007969D03*
+X028486Y007772D03*
+X028486Y007575D03*
+X028486Y007379D03*
+X028486Y007182D03*
+X028486Y006985D03*
+X028486Y006788D03*
+X028486Y006591D03*
+X028486Y006394D03*
+X028486Y006198D03*
+X028486Y006001D03*
+X028486Y005804D03*
+X028486Y005607D03*
+X028486Y005410D03*
+X028486Y005213D03*
+X028486Y005016D03*
+X023761Y005016D03*
+X023761Y005213D03*
+X023761Y005410D03*
+X023761Y005607D03*
+X023761Y005804D03*
+X023761Y006001D03*
+X023761Y006198D03*
+X023761Y006394D03*
+X023761Y006591D03*
+X023761Y006788D03*
+X023761Y006985D03*
+X023761Y007182D03*
+X023761Y007379D03*
+X023761Y007575D03*
+X023761Y007772D03*
+X023761Y007969D03*
+D22*
+X002252Y007939D03*
+X002252Y010971D03*
+D23*
+X003157Y009927D03*
+X003157Y009612D03*
+X003157Y009298D03*
+X003157Y008983D03*
+D24*
+X010500Y005955D03*
+X010756Y005955D03*
+X011012Y005955D03*
+X011268Y005955D03*
+X011524Y005955D03*
+X011780Y005955D03*
+X012035Y005955D03*
+X012300Y007205D03*
+X012556Y007205D03*
+X012812Y007205D03*
+X013068Y007205D03*
+X013324Y007205D03*
+X013580Y007205D03*
+X013835Y007205D03*
+X013835Y009605D03*
+X013580Y009605D03*
+X013324Y009605D03*
+X013068Y009605D03*
+X012812Y009605D03*
+X012556Y009605D03*
+X012300Y009605D03*
+X012035Y003555D03*
+X011780Y003555D03*
+X011524Y003555D03*
+X011268Y003555D03*
+X011012Y003555D03*
+X010756Y003555D03*
+X010500Y003555D03*
+D25*
+X010735Y002805D03*
+X010065Y002805D03*
+X009485Y002805D03*
+X008815Y002805D03*
+X008815Y002155D03*
+X009485Y002155D03*
+X010065Y002155D03*
+X010735Y002155D03*
+X010035Y001505D03*
+X009365Y001505D03*
+X009365Y000855D03*
+X010035Y000855D03*
+X013815Y003655D03*
+X013815Y004305D03*
+X014485Y004305D03*
+X014485Y003655D03*
+X014535Y004955D03*
+X013865Y004955D03*
+X007985Y007855D03*
+X007315Y007855D03*
+X006635Y007855D03*
+X005965Y007855D03*
+X005135Y009305D03*
+X004465Y009305D03*
+X004465Y009955D03*
+X005135Y009955D03*
+X005135Y010655D03*
+X004465Y010655D03*
+X004465Y011305D03*
+X005135Y011305D03*
+X008965Y010905D03*
+X009635Y010905D03*
+X011415Y012355D03*
+X011415Y013005D03*
+X012085Y013005D03*
+X012665Y013155D03*
+X013335Y013155D03*
+X013335Y012505D03*
+X012665Y012505D03*
+X012085Y012355D03*
+X015765Y013455D03*
+X016435Y013455D03*
+X018065Y013705D03*
+X018735Y013705D03*
+X019315Y013705D03*
+X019985Y013705D03*
+X019985Y012955D03*
+X019315Y012955D03*
+X018735Y012955D03*
+X018065Y012955D03*
+X020915Y012805D03*
+X021585Y012805D03*
+X025615Y013555D03*
+X025615Y014205D03*
+X026285Y014205D03*
+X026285Y013555D03*
+X025985Y015605D03*
+X025315Y015605D03*
+X022435Y008955D03*
+X021765Y008955D03*
+X029915Y005755D03*
+X030585Y005755D03*
+X030585Y005105D03*
+X029915Y005105D03*
+X029915Y004455D03*
+X030585Y004455D03*
+X027335Y002755D03*
+X026665Y002755D03*
+X025835Y002755D03*
+X025165Y002755D03*
+X028115Y001755D03*
+X028785Y001755D03*
+X028785Y001055D03*
+X028115Y001055D03*
+X018635Y000755D03*
+X017965Y000755D03*
+X015985Y000855D03*
+X015315Y000855D03*
+X006535Y016955D03*
+X005865Y016955D03*
+X009365Y019455D03*
+X010035Y019455D03*
+D26*
+X009550Y018546D03*
+X009550Y017364D03*
+X017750Y016146D03*
+X017750Y014964D03*
+X025200Y011696D03*
+X025200Y010514D03*
+D27*
+X030220Y011305D03*
+X030970Y011305D03*
+X023650Y003475D03*
+X023650Y002725D03*
+X009220Y004705D03*
+X008470Y004705D03*
+X007350Y005235D03*
+X007350Y005985D03*
+X005450Y006475D03*
+X004830Y006305D03*
+X004080Y006305D03*
+X005450Y007225D03*
+X006820Y003155D03*
+X007570Y003155D03*
+X007280Y000705D03*
+X007930Y000705D03*
+X008680Y000705D03*
+X006530Y000705D03*
+D28*
+X006905Y001455D03*
+X007195Y002405D03*
+X008305Y001455D03*
+X008845Y003955D03*
+X004455Y007055D03*
+X030595Y010555D03*
+D29*
+X024400Y003100D03*
+X006600Y005610D03*
+X006200Y006850D03*
+D30*
+X017798Y009645D03*
+X018054Y009645D03*
+X018310Y009645D03*
+X018566Y009645D03*
+X018822Y009645D03*
+X019078Y009645D03*
+X019334Y009645D03*
+X019590Y009645D03*
+X019846Y009645D03*
+X020102Y009645D03*
+X020357Y009645D03*
+X020613Y009645D03*
+X020613Y012165D03*
+X020357Y012165D03*
+X020102Y012165D03*
+X019846Y012165D03*
+X019590Y012165D03*
+X019334Y012165D03*
+X019078Y012165D03*
+X018822Y012165D03*
+X018566Y012165D03*
+X018310Y012165D03*
+X018054Y012165D03*
+X017798Y012165D03*
+D31*
+X010253Y013705D03*
+X009997Y013705D03*
+X009741Y013705D03*
+X009485Y013705D03*
+X009230Y013705D03*
+X008974Y013705D03*
+X008718Y013705D03*
+X008462Y013705D03*
+X008206Y013705D03*
+X007950Y013705D03*
+X007553Y013705D03*
+X007297Y013705D03*
+X007041Y013705D03*
+X006785Y013705D03*
+X006530Y013705D03*
+X006274Y013705D03*
+X006018Y013705D03*
+X005762Y013705D03*
+X005506Y013705D03*
+X005250Y013705D03*
+X005250Y016105D03*
+X005506Y016105D03*
+X005762Y016105D03*
+X006018Y016105D03*
+X006274Y016105D03*
+X006530Y016105D03*
+X006785Y016105D03*
+X007041Y016105D03*
+X007297Y016105D03*
+X007553Y016105D03*
+X007950Y016105D03*
+X008206Y016105D03*
+X008462Y016105D03*
+X008718Y016105D03*
+X008974Y016105D03*
+X009230Y016105D03*
+X009485Y016105D03*
+X009741Y016105D03*
+X009997Y016105D03*
+X010253Y016105D03*
+D32*
+X005835Y017655D03*
+X005165Y017655D03*
+D33*
+X006916Y009855D03*
+X007172Y009855D03*
+X007428Y009855D03*
+X007684Y009855D03*
+X007684Y008555D03*
+X007428Y008555D03*
+X007172Y008555D03*
+X006916Y008555D03*
+D34*
+X012000Y013955D03*
+X012500Y013955D03*
+X013000Y013955D03*
+X013500Y013955D03*
+X013500Y015955D03*
+X013000Y015955D03*
+X012500Y015955D03*
+X012000Y015955D03*
+D35*
+X014809Y009955D03*
+X015991Y009955D03*
+D36*
+X010700Y011555D03*
+X010700Y011811D03*
+X010700Y012067D03*
+X010700Y012323D03*
+X008810Y012323D03*
+X008810Y012067D03*
+X008810Y011811D03*
+X008810Y011555D03*
+D37*
+X005400Y004787D03*
+X004400Y004787D03*
+X003400Y004787D03*
+X002400Y004787D03*
+X001400Y004787D03*
+X001400Y001023D03*
+X002400Y001023D03*
+X003400Y001023D03*
+X004400Y001023D03*
+X005400Y001023D03*
+D38*
+X027978Y012719D03*
+X027978Y014491D03*
+X031522Y014491D03*
+X031522Y012719D03*
+D39*
+X024283Y014255D03*
+X022117Y014255D03*
+D40*
+X015650Y014622D03*
+X015650Y016788D03*
+D41*
+X017000Y011505D03*
+D42*
+X025700Y012705D03*
+X025400Y001055D03*
+X004550Y008155D03*
+X001450Y006355D03*
+X002100Y012255D03*
+X004050Y012255D03*
+D43*
+X006200Y018255D03*
+X006200Y018755D03*
+X006200Y019255D03*
+X006200Y019755D03*
+X008200Y019755D03*
+X008200Y019255D03*
+X008200Y018755D03*
+X008200Y018255D03*
+M02*
diff --git a/pcb/proxmark3_fix/CAM/proxmark3.GTS b/pcb/proxmark3_fix/CAM/proxmark3.GTS
new file mode 100644 (file)
index 0000000..6f5482a
--- /dev/null
@@ -0,0 +1,1146 @@
+G75*
+G70*
+%OFA0B0*%
+%FSLAX24Y24*%
+%IPPOS*%
+%LPD*%
+%AMOC8*
+5,1,8,0,0,1.08239X$1,22.5*
+%
+%ADD10C,0.0010*%
+%ADD11C,0.0400*%
+%ADD12R,0.0591X0.0157*%
+%ADD13R,0.0906X0.0197*%
+%ADD14R,0.1378X0.1378*%
+%ADD15C,0.0000*%
+%ADD16C,0.0354*%
+%ADD17R,0.0433X0.0394*%
+%ADD18R,0.0591X0.0098*%
+%ADD19R,0.0098X0.0492*%
+%ADD20R,0.0945X0.0945*%
+%ADD21R,0.0591X0.0197*%
+%ADD22R,0.0098X0.0787*%
+%ADD23R,0.0787X0.0098*%
+%ADD24R,0.1496X0.0906*%
+%ADD25R,0.0984X0.0217*%
+%ADD26C,0.0394*%
+%ADD27R,0.0142X0.0512*%
+%ADD28R,0.0394X0.0433*%
+%ADD29R,0.1142X0.0591*%
+%ADD30R,0.0675X0.0675*%
+%ADD31C,0.0675*%
+%ADD32R,0.0400X0.0400*%
+%ADD33R,0.0400X0.0700*%
+%ADD34R,0.0700X0.0400*%
+%ADD35R,0.0118X0.0591*%
+%ADD36R,0.0142X0.0551*%
+%ADD37R,0.0512X0.0591*%
+%ADD38R,0.0128X0.0709*%
+%ADD39R,0.0260X0.0800*%
+%ADD40R,0.0591X0.1142*%
+%ADD41R,0.0402X0.0161*%
+%ADD42R,0.0394X0.1181*%
+%ADD43R,0.1181X0.0591*%
+%ADD44R,0.1378X0.0591*%
+%ADD45R,0.0591X0.1378*%
+%ADD46R,0.0700X0.1350*%
+%ADD47R,0.1350X0.0700*%
+%ADD48C,0.0945*%
+%ADD49R,0.0800X0.0260*%
+%ADD50C,0.1575*%
+D10*
+X000450Y000105D02*
+X032450Y000105D01*
+X032450Y020305D01*
+X000450Y020305D01*
+X000450Y000105D01*
+D11*
+X002642Y002505D02*
+X002644Y002530D01*
+X002650Y002554D01*
+X002659Y002577D01*
+X002672Y002598D01*
+X002688Y002617D01*
+X002707Y002633D01*
+X002728Y002646D01*
+X002751Y002655D01*
+X002775Y002661D01*
+X002800Y002663D01*
+X002825Y002661D01*
+X002849Y002655D01*
+X002872Y002646D01*
+X002893Y002633D01*
+X002912Y002617D01*
+X002928Y002598D01*
+X002941Y002577D01*
+X002950Y002554D01*
+X002956Y002530D01*
+X002958Y002505D01*
+X002956Y002480D01*
+X002950Y002456D01*
+X002941Y002433D01*
+X002928Y002412D01*
+X002912Y002393D01*
+X002893Y002377D01*
+X002872Y002364D01*
+X002849Y002355D01*
+X002825Y002349D01*
+X002800Y002347D01*
+X002775Y002349D01*
+X002751Y002355D01*
+X002728Y002364D01*
+X002707Y002377D01*
+X002688Y002393D01*
+X002672Y002412D01*
+X002659Y002433D01*
+X002650Y002456D01*
+X002644Y002480D01*
+X002642Y002505D01*
+X014442Y007755D02*
+X014444Y007780D01*
+X014450Y007804D01*
+X014459Y007827D01*
+X014472Y007848D01*
+X014488Y007867D01*
+X014507Y007883D01*
+X014528Y007896D01*
+X014551Y007905D01*
+X014575Y007911D01*
+X014600Y007913D01*
+X014625Y007911D01*
+X014649Y007905D01*
+X014672Y007896D01*
+X014693Y007883D01*
+X014712Y007867D01*
+X014728Y007848D01*
+X014741Y007827D01*
+X014750Y007804D01*
+X014756Y007780D01*
+X014758Y007755D01*
+X014756Y007730D01*
+X014750Y007706D01*
+X014741Y007683D01*
+X014728Y007662D01*
+X014712Y007643D01*
+X014693Y007627D01*
+X014672Y007614D01*
+X014649Y007605D01*
+X014625Y007599D01*
+X014600Y007597D01*
+X014575Y007599D01*
+X014551Y007605D01*
+X014528Y007614D01*
+X014507Y007627D01*
+X014488Y007643D01*
+X014472Y007662D01*
+X014459Y007683D01*
+X014450Y007706D01*
+X014444Y007730D01*
+X014442Y007755D01*
+X021492Y000955D02*
+X021494Y000980D01*
+X021500Y001004D01*
+X021509Y001027D01*
+X021522Y001048D01*
+X021538Y001067D01*
+X021557Y001083D01*
+X021578Y001096D01*
+X021601Y001105D01*
+X021625Y001111D01*
+X021650Y001113D01*
+X021675Y001111D01*
+X021699Y001105D01*
+X021722Y001096D01*
+X021743Y001083D01*
+X021762Y001067D01*
+X021778Y001048D01*
+X021791Y001027D01*
+X021800Y001004D01*
+X021806Y000980D01*
+X021808Y000955D01*
+X021806Y000930D01*
+X021800Y000906D01*
+X021791Y000883D01*
+X021778Y000862D01*
+X021762Y000843D01*
+X021743Y000827D01*
+X021722Y000814D01*
+X021699Y000805D01*
+X021675Y000799D01*
+X021650Y000797D01*
+X021625Y000799D01*
+X021601Y000805D01*
+X021578Y000814D01*
+X021557Y000827D01*
+X021538Y000843D01*
+X021522Y000862D01*
+X021509Y000883D01*
+X021500Y000906D01*
+X021494Y000930D01*
+X021492Y000955D01*
+X028942Y004155D02*
+X028944Y004180D01*
+X028950Y004204D01*
+X028959Y004227D01*
+X028972Y004248D01*
+X028988Y004267D01*
+X029007Y004283D01*
+X029028Y004296D01*
+X029051Y004305D01*
+X029075Y004311D01*
+X029100Y004313D01*
+X029125Y004311D01*
+X029149Y004305D01*
+X029172Y004296D01*
+X029193Y004283D01*
+X029212Y004267D01*
+X029228Y004248D01*
+X029241Y004227D01*
+X029250Y004204D01*
+X029256Y004180D01*
+X029258Y004155D01*
+X029256Y004130D01*
+X029250Y004106D01*
+X029241Y004083D01*
+X029228Y004062D01*
+X029212Y004043D01*
+X029193Y004027D01*
+X029172Y004014D01*
+X029149Y004005D01*
+X029125Y003999D01*
+X029100Y003997D01*
+X029075Y003999D01*
+X029051Y004005D01*
+X029028Y004014D01*
+X029007Y004027D01*
+X028988Y004043D01*
+X028972Y004062D01*
+X028959Y004083D01*
+X028950Y004106D01*
+X028944Y004130D01*
+X028942Y004155D01*
+X019442Y018955D02*
+X019444Y018980D01*
+X019450Y019004D01*
+X019459Y019027D01*
+X019472Y019048D01*
+X019488Y019067D01*
+X019507Y019083D01*
+X019528Y019096D01*
+X019551Y019105D01*
+X019575Y019111D01*
+X019600Y019113D01*
+X019625Y019111D01*
+X019649Y019105D01*
+X019672Y019096D01*
+X019693Y019083D01*
+X019712Y019067D01*
+X019728Y019048D01*
+X019741Y019027D01*
+X019750Y019004D01*
+X019756Y018980D01*
+X019758Y018955D01*
+X019756Y018930D01*
+X019750Y018906D01*
+X019741Y018883D01*
+X019728Y018862D01*
+X019712Y018843D01*
+X019693Y018827D01*
+X019672Y018814D01*
+X019649Y018805D01*
+X019625Y018799D01*
+X019600Y018797D01*
+X019575Y018799D01*
+X019551Y018805D01*
+X019528Y018814D01*
+X019507Y018827D01*
+X019488Y018843D01*
+X019472Y018862D01*
+X019459Y018883D01*
+X019450Y018906D01*
+X019444Y018930D01*
+X019442Y018955D01*
+X030542Y019205D02*
+X030544Y019230D01*
+X030550Y019254D01*
+X030559Y019277D01*
+X030572Y019298D01*
+X030588Y019317D01*
+X030607Y019333D01*
+X030628Y019346D01*
+X030651Y019355D01*
+X030675Y019361D01*
+X030700Y019363D01*
+X030725Y019361D01*
+X030749Y019355D01*
+X030772Y019346D01*
+X030793Y019333D01*
+X030812Y019317D01*
+X030828Y019298D01*
+X030841Y019277D01*
+X030850Y019254D01*
+X030856Y019230D01*
+X030858Y019205D01*
+X030856Y019180D01*
+X030850Y019156D01*
+X030841Y019133D01*
+X030828Y019112D01*
+X030812Y019093D01*
+X030793Y019077D01*
+X030772Y019064D01*
+X030749Y019055D01*
+X030725Y019049D01*
+X030700Y019047D01*
+X030675Y019049D01*
+X030651Y019055D01*
+X030628Y019064D01*
+X030607Y019077D01*
+X030588Y019093D01*
+X030572Y019112D01*
+X030559Y019133D01*
+X030550Y019156D01*
+X030544Y019180D01*
+X030542Y019205D01*
+D12*
+X015910Y011683D03*
+X015910Y011309D03*
+X015910Y010935D03*
+X014788Y010935D03*
+X014788Y011683D03*
+X008462Y016877D03*
+X007340Y016877D03*
+X007340Y017251D03*
+X007340Y017625D03*
+X008462Y017625D03*
+D13*
+X003687Y017648D03*
+X003687Y017962D03*
+X003687Y017333D03*
+X003687Y017018D03*
+X003687Y016703D03*
+D14*
+X003766Y015325D03*
+X001994Y015325D03*
+X001994Y019340D03*
+X003766Y019340D03*
+D15*
+X002703Y018022D02*
+X002705Y018048D01*
+X002711Y018074D01*
+X002721Y018099D01*
+X002734Y018122D01*
+X002750Y018142D01*
+X002770Y018160D01*
+X002792Y018175D01*
+X002815Y018187D01*
+X002841Y018195D01*
+X002867Y018199D01*
+X002893Y018199D01*
+X002919Y018195D01*
+X002945Y018187D01*
+X002969Y018175D01*
+X002990Y018160D01*
+X003010Y018142D01*
+X003026Y018122D01*
+X003039Y018099D01*
+X003049Y018074D01*
+X003055Y018048D01*
+X003057Y018022D01*
+X003055Y017996D01*
+X003049Y017970D01*
+X003039Y017945D01*
+X003026Y017922D01*
+X003010Y017902D01*
+X002990Y017884D01*
+X002968Y017869D01*
+X002945Y017857D01*
+X002919Y017849D01*
+X002893Y017845D01*
+X002867Y017845D01*
+X002841Y017849D01*
+X002815Y017857D01*
+X002791Y017869D01*
+X002770Y017884D01*
+X002750Y017902D01*
+X002734Y017922D01*
+X002721Y017945D01*
+X002711Y017970D01*
+X002705Y017996D01*
+X002703Y018022D01*
+X002703Y016644D02*
+X002705Y016670D01*
+X002711Y016696D01*
+X002721Y016721D01*
+X002734Y016744D01*
+X002750Y016764D01*
+X002770Y016782D01*
+X002792Y016797D01*
+X002815Y016809D01*
+X002841Y016817D01*
+X002867Y016821D01*
+X002893Y016821D01*
+X002919Y016817D01*
+X002945Y016809D01*
+X002969Y016797D01*
+X002990Y016782D01*
+X003010Y016764D01*
+X003026Y016744D01*
+X003039Y016721D01*
+X003049Y016696D01*
+X003055Y016670D01*
+X003057Y016644D01*
+X003055Y016618D01*
+X003049Y016592D01*
+X003039Y016567D01*
+X003026Y016544D01*
+X003010Y016524D01*
+X002990Y016506D01*
+X002968Y016491D01*
+X002945Y016479D01*
+X002919Y016471D01*
+X002893Y016467D01*
+X002867Y016467D01*
+X002841Y016471D01*
+X002815Y016479D01*
+X002791Y016491D01*
+X002770Y016506D01*
+X002750Y016524D01*
+X002734Y016544D01*
+X002721Y016567D01*
+X002711Y016592D01*
+X002705Y016618D01*
+X002703Y016644D01*
+X001720Y010046D02*
+X001722Y010073D01*
+X001728Y010100D01*
+X001737Y010126D01*
+X001750Y010150D01*
+X001766Y010173D01*
+X001785Y010192D01*
+X001807Y010209D01*
+X001831Y010223D01*
+X001856Y010233D01*
+X001883Y010240D01*
+X001910Y010243D01*
+X001938Y010242D01*
+X001965Y010237D01*
+X001991Y010229D01*
+X002015Y010217D01*
+X002038Y010201D01*
+X002059Y010183D01*
+X002076Y010162D01*
+X002091Y010138D01*
+X002102Y010113D01*
+X002110Y010087D01*
+X002114Y010060D01*
+X002114Y010032D01*
+X002110Y010005D01*
+X002102Y009979D01*
+X002091Y009954D01*
+X002076Y009930D01*
+X002059Y009909D01*
+X002038Y009891D01*
+X002016Y009875D01*
+X001991Y009863D01*
+X001965Y009855D01*
+X001938Y009850D01*
+X001910Y009849D01*
+X001883Y009852D01*
+X001856Y009859D01*
+X001831Y009869D01*
+X001807Y009883D01*
+X001785Y009900D01*
+X001766Y009919D01*
+X001750Y009942D01*
+X001737Y009966D01*
+X001728Y009992D01*
+X001722Y010019D01*
+X001720Y010046D01*
+X001720Y008864D02*
+X001722Y008891D01*
+X001728Y008918D01*
+X001737Y008944D01*
+X001750Y008968D01*
+X001766Y008991D01*
+X001785Y009010D01*
+X001807Y009027D01*
+X001831Y009041D01*
+X001856Y009051D01*
+X001883Y009058D01*
+X001910Y009061D01*
+X001938Y009060D01*
+X001965Y009055D01*
+X001991Y009047D01*
+X002015Y009035D01*
+X002038Y009019D01*
+X002059Y009001D01*
+X002076Y008980D01*
+X002091Y008956D01*
+X002102Y008931D01*
+X002110Y008905D01*
+X002114Y008878D01*
+X002114Y008850D01*
+X002110Y008823D01*
+X002102Y008797D01*
+X002091Y008772D01*
+X002076Y008748D01*
+X002059Y008727D01*
+X002038Y008709D01*
+X002016Y008693D01*
+X001991Y008681D01*
+X001965Y008673D01*
+X001938Y008668D01*
+X001910Y008667D01*
+X001883Y008670D01*
+X001856Y008677D01*
+X001831Y008687D01*
+X001807Y008701D01*
+X001785Y008718D01*
+X001766Y008737D01*
+X001750Y008760D01*
+X001737Y008784D01*
+X001728Y008810D01*
+X001722Y008837D01*
+X001720Y008864D01*
+D16*
+X002880Y016644D03*
+X002880Y018022D03*
+D17*
+X005200Y018570D03*
+X005200Y019240D03*
+X007000Y018970D03*
+X007000Y019640D03*
+X004550Y013740D03*
+X003900Y013740D03*
+X003250Y013740D03*
+X002600Y013740D03*
+X001950Y013740D03*
+X001300Y013740D03*
+X001300Y013070D03*
+X001950Y013070D03*
+X002600Y013070D03*
+X003250Y013070D03*
+X003900Y013070D03*
+X004550Y013070D03*
+X006300Y012640D03*
+X006950Y012640D03*
+X007600Y012640D03*
+X007600Y011970D03*
+X006950Y011970D03*
+X006300Y011970D03*
+X006650Y011390D03*
+X007300Y011390D03*
+X007950Y011390D03*
+X007950Y010720D03*
+X007300Y010720D03*
+X006650Y010720D03*
+X005800Y009490D03*
+X005800Y008820D03*
+X007000Y007240D03*
+X007650Y007240D03*
+X008300Y007240D03*
+X008950Y007240D03*
+X009600Y007240D03*
+X010250Y007240D03*
+X010900Y007240D03*
+X010900Y006570D03*
+X010250Y006570D03*
+X009600Y006570D03*
+X008950Y006570D03*
+X008300Y006570D03*
+X007650Y006570D03*
+X007000Y006570D03*
+X009000Y008120D03*
+X009650Y008120D03*
+X009650Y008790D03*
+X009000Y008790D03*
+X010750Y008970D03*
+X010750Y009640D03*
+X011750Y009490D03*
+X011750Y008820D03*
+X011500Y010720D03*
+X012150Y010720D03*
+X012150Y011390D03*
+X011500Y011390D03*
+X017150Y010090D03*
+X017150Y009420D03*
+X021650Y010070D03*
+X022600Y010070D03*
+X022600Y010740D03*
+X022600Y011320D03*
+X021650Y011320D03*
+X021650Y010740D03*
+X021650Y011990D03*
+X022600Y011990D03*
+X023550Y011990D03*
+X023550Y011320D03*
+X023550Y010740D03*
+X023550Y010070D03*
+X026250Y010320D03*
+X026950Y010320D03*
+X026950Y010990D03*
+X026250Y010990D03*
+X027850Y010820D03*
+X028550Y010840D03*
+X029200Y010840D03*
+X029200Y010170D03*
+X028550Y010170D03*
+X029200Y009540D03*
+X029200Y008870D03*
+X031700Y008490D03*
+X031700Y007820D03*
+X031700Y007340D03*
+X031700Y006670D03*
+X031350Y003140D03*
+X031350Y002470D03*
+X031350Y001790D03*
+X031350Y001120D03*
+X026950Y000970D03*
+X026950Y001640D03*
+X022500Y003770D03*
+X022500Y004440D03*
+X022150Y007620D03*
+X022150Y008290D03*
+X027850Y011490D03*
+X026950Y012920D03*
+X026950Y013590D03*
+X017400Y013690D03*
+X017400Y013020D03*
+X009600Y005990D03*
+X009600Y005320D03*
+X009900Y004490D03*
+X009900Y003820D03*
+X011350Y002190D03*
+X012000Y001870D03*
+X012600Y001490D03*
+X013250Y001490D03*
+X013900Y001490D03*
+X014550Y001490D03*
+X014550Y000820D03*
+X013900Y000820D03*
+X013250Y000820D03*
+X012600Y000820D03*
+X011350Y001520D03*
+X012000Y002540D03*
+X012650Y003720D03*
+X012650Y004390D03*
+X012650Y005020D03*
+X013250Y005020D03*
+X013250Y005690D03*
+X012650Y005690D03*
+X007400Y004490D03*
+X007400Y003820D03*
+X002750Y006020D03*
+X002750Y006690D03*
+D18*
+X015300Y006724D03*
+X015300Y006920D03*
+X015300Y007117D03*
+X015300Y006527D03*
+X015300Y006330D03*
+X015300Y006133D03*
+X015300Y005936D03*
+X015300Y005739D03*
+X015300Y005542D03*
+X015300Y005346D03*
+X015300Y005149D03*
+X015300Y004952D03*
+X015300Y004755D03*
+X015300Y004558D03*
+X015300Y004361D03*
+X015300Y004164D03*
+X015300Y003968D03*
+X015300Y003771D03*
+X015300Y003574D03*
+X015300Y003377D03*
+X015300Y003180D03*
+X015300Y002983D03*
+X015300Y002786D03*
+X015300Y002590D03*
+X015300Y002393D03*
+X021600Y002393D03*
+X021600Y002590D03*
+X021600Y002786D03*
+X021600Y002983D03*
+X021600Y003180D03*
+X021600Y003377D03*
+X021600Y003574D03*
+X021600Y003771D03*
+X021600Y003968D03*
+X021600Y004164D03*
+X021600Y004361D03*
+X021600Y004558D03*
+X021600Y004755D03*
+X021600Y004952D03*
+X021600Y005149D03*
+X021600Y005346D03*
+X021600Y005542D03*
+X021600Y005739D03*
+X021600Y005936D03*
+X021600Y006133D03*
+X021600Y006330D03*
+X021600Y006527D03*
+X021600Y006724D03*
+X021600Y006920D03*
+X021600Y007117D03*
+D19*
+X020812Y007905D03*
+X020615Y007905D03*
+X020419Y007905D03*
+X020222Y007905D03*
+X020025Y007905D03*
+X019828Y007905D03*
+X019631Y007905D03*
+X019434Y007905D03*
+X019237Y007905D03*
+X019041Y007905D03*
+X018844Y007905D03*
+X018647Y007905D03*
+X018450Y007905D03*
+X018253Y007905D03*
+X018056Y007905D03*
+X017859Y007905D03*
+X017663Y007905D03*
+X017466Y007905D03*
+X017269Y007905D03*
+X017072Y007905D03*
+X016875Y007905D03*
+X016678Y007905D03*
+X016481Y007905D03*
+X016285Y007905D03*
+X016088Y007905D03*
+X016088Y001605D03*
+X016285Y001605D03*
+X016481Y001605D03*
+X016678Y001605D03*
+X016875Y001605D03*
+X017072Y001605D03*
+X017269Y001605D03*
+X017466Y001605D03*
+X017663Y001605D03*
+X017859Y001605D03*
+X018056Y001605D03*
+X018253Y001605D03*
+X018450Y001605D03*
+X018647Y001605D03*
+X018844Y001605D03*
+X019041Y001605D03*
+X019237Y001605D03*
+X019434Y001605D03*
+X019631Y001605D03*
+X019828Y001605D03*
+X020025Y001605D03*
+X020222Y001605D03*
+X020419Y001605D03*
+X020615Y001605D03*
+X020812Y001605D03*
+D20*
+X028500Y002855D03*
+X030429Y002855D03*
+X030400Y006705D03*
+X030400Y008634D03*
+D21*
+X030400Y001653D03*
+X030400Y001279D03*
+X030400Y000905D03*
+X029534Y000905D03*
+X029534Y001653D03*
+D22*
+X027600Y004131D03*
+X027403Y004131D03*
+X027206Y004131D03*
+X027009Y004131D03*
+X026813Y004131D03*
+X026616Y004131D03*
+X026419Y004131D03*
+X026222Y004131D03*
+X026025Y004131D03*
+X025828Y004131D03*
+X025631Y004131D03*
+X025435Y004131D03*
+X025238Y004131D03*
+X025041Y004131D03*
+X024844Y004131D03*
+X024647Y004131D03*
+X024647Y008855D03*
+X024844Y008855D03*
+X025041Y008855D03*
+X025238Y008855D03*
+X025435Y008855D03*
+X025631Y008855D03*
+X025828Y008855D03*
+X026025Y008855D03*
+X026222Y008855D03*
+X026419Y008855D03*
+X026616Y008855D03*
+X026813Y008855D03*
+X027009Y008855D03*
+X027206Y008855D03*
+X027403Y008855D03*
+X027600Y008855D03*
+D23*
+X028486Y007969D03*
+X028486Y007772D03*
+X028486Y007575D03*
+X028486Y007379D03*
+X028486Y007182D03*
+X028486Y006985D03*
+X028486Y006788D03*
+X028486Y006591D03*
+X028486Y006394D03*
+X028486Y006198D03*
+X028486Y006001D03*
+X028486Y005804D03*
+X028486Y005607D03*
+X028486Y005410D03*
+X028486Y005213D03*
+X028486Y005016D03*
+X023761Y005016D03*
+X023761Y005213D03*
+X023761Y005410D03*
+X023761Y005607D03*
+X023761Y005804D03*
+X023761Y006001D03*
+X023761Y006198D03*
+X023761Y006394D03*
+X023761Y006591D03*
+X023761Y006788D03*
+X023761Y006985D03*
+X023761Y007182D03*
+X023761Y007379D03*
+X023761Y007575D03*
+X023761Y007772D03*
+X023761Y007969D03*
+D24*
+X002252Y007939D03*
+X002252Y010971D03*
+D25*
+X003157Y009927D03*
+X003157Y009612D03*
+X003157Y009298D03*
+X003157Y008983D03*
+D26*
+X001917Y008864D03*
+X001917Y010046D03*
+D27*
+X010500Y005955D03*
+X010756Y005955D03*
+X011012Y005955D03*
+X011268Y005955D03*
+X011524Y005955D03*
+X011780Y005955D03*
+X012035Y005955D03*
+X012300Y007205D03*
+X012556Y007205D03*
+X012812Y007205D03*
+X013068Y007205D03*
+X013324Y007205D03*
+X013580Y007205D03*
+X013835Y007205D03*
+X013835Y009605D03*
+X013580Y009605D03*
+X013324Y009605D03*
+X013068Y009605D03*
+X012812Y009605D03*
+X012556Y009605D03*
+X012300Y009605D03*
+X012035Y003555D03*
+X011780Y003555D03*
+X011524Y003555D03*
+X011268Y003555D03*
+X011012Y003555D03*
+X010756Y003555D03*
+X010500Y003555D03*
+D28*
+X010735Y002805D03*
+X010065Y002805D03*
+X009485Y002805D03*
+X008815Y002805D03*
+X008815Y002155D03*
+X009485Y002155D03*
+X010065Y002155D03*
+X010735Y002155D03*
+X010035Y001505D03*
+X009365Y001505D03*
+X009365Y000855D03*
+X010035Y000855D03*
+X013815Y003655D03*
+X013815Y004305D03*
+X014485Y004305D03*
+X014485Y003655D03*
+X014535Y004955D03*
+X013865Y004955D03*
+X007985Y007855D03*
+X007315Y007855D03*
+X006635Y007855D03*
+X005965Y007855D03*
+X005135Y009305D03*
+X004465Y009305D03*
+X004465Y009955D03*
+X005135Y009955D03*
+X005135Y010655D03*
+X004465Y010655D03*
+X004465Y011305D03*
+X005135Y011305D03*
+X008965Y010905D03*
+X009635Y010905D03*
+X011415Y012355D03*
+X011415Y013005D03*
+X012085Y013005D03*
+X012665Y013155D03*
+X013335Y013155D03*
+X013335Y012505D03*
+X012665Y012505D03*
+X012085Y012355D03*
+X015765Y013455D03*
+X016435Y013455D03*
+X018065Y013705D03*
+X018735Y013705D03*
+X019315Y013705D03*
+X019985Y013705D03*
+X019985Y012955D03*
+X019315Y012955D03*
+X018735Y012955D03*
+X018065Y012955D03*
+X020915Y012805D03*
+X021585Y012805D03*
+X025615Y013555D03*
+X025615Y014205D03*
+X026285Y014205D03*
+X026285Y013555D03*
+X025985Y015605D03*
+X025315Y015605D03*
+X022435Y008955D03*
+X021765Y008955D03*
+X029915Y005755D03*
+X030585Y005755D03*
+X030585Y005105D03*
+X029915Y005105D03*
+X029915Y004455D03*
+X030585Y004455D03*
+X027335Y002755D03*
+X026665Y002755D03*
+X025835Y002755D03*
+X025165Y002755D03*
+X028115Y001755D03*
+X028785Y001755D03*
+X028785Y001055D03*
+X028115Y001055D03*
+X018635Y000755D03*
+X017965Y000755D03*
+X015985Y000855D03*
+X015315Y000855D03*
+X006535Y016955D03*
+X005865Y016955D03*
+X009365Y019455D03*
+X010035Y019455D03*
+D29*
+X009550Y018546D03*
+X009550Y017364D03*
+X017750Y016146D03*
+X017750Y014964D03*
+X025200Y011696D03*
+X025200Y010514D03*
+D30*
+X029950Y018455D03*
+X017400Y018955D03*
+D31*
+X016400Y018955D03*
+X015400Y018955D03*
+X014400Y018955D03*
+X013400Y018955D03*
+X012400Y018955D03*
+X020950Y018455D03*
+X021950Y018455D03*
+X022950Y018455D03*
+X023950Y018455D03*
+X024950Y018455D03*
+X025950Y018455D03*
+X026950Y018455D03*
+X027950Y018455D03*
+X028950Y018455D03*
+X028950Y017455D03*
+X027950Y017455D03*
+X026950Y017455D03*
+X025950Y017455D03*
+X024950Y017455D03*
+X023950Y017455D03*
+X022950Y017455D03*
+X021950Y017455D03*
+X020950Y017455D03*
+X029950Y017455D03*
+D32*
+X030220Y011305D03*
+X030970Y011305D03*
+X023650Y003475D03*
+X023650Y002725D03*
+X009220Y004705D03*
+X008470Y004705D03*
+X007350Y005235D03*
+X007350Y005985D03*
+X005450Y006475D03*
+X004830Y006305D03*
+X004080Y006305D03*
+X005450Y007225D03*
+X006820Y003155D03*
+X007570Y003155D03*
+X007280Y000705D03*
+X007930Y000705D03*
+X008680Y000705D03*
+X006530Y000705D03*
+D33*
+X006905Y001455D03*
+X007195Y002405D03*
+X008305Y001455D03*
+X008845Y003955D03*
+X004455Y007055D03*
+X030595Y010555D03*
+D34*
+X024400Y003100D03*
+X006600Y005610D03*
+X006200Y006850D03*
+D35*
+X017798Y009645D03*
+X018054Y009645D03*
+X018310Y009645D03*
+X018566Y009645D03*
+X018822Y009645D03*
+X019078Y009645D03*
+X019334Y009645D03*
+X019590Y009645D03*
+X019846Y009645D03*
+X020102Y009645D03*
+X020357Y009645D03*
+X020613Y009645D03*
+X020613Y012165D03*
+X020357Y012165D03*
+X020102Y012165D03*
+X019846Y012165D03*
+X019590Y012165D03*
+X019334Y012165D03*
+X019078Y012165D03*
+X018822Y012165D03*
+X018566Y012165D03*
+X018310Y012165D03*
+X018054Y012165D03*
+X017798Y012165D03*
+D36*
+X010253Y013705D03*
+X009997Y013705D03*
+X009741Y013705D03*
+X009485Y013705D03*
+X009230Y013705D03*
+X008974Y013705D03*
+X008718Y013705D03*
+X008462Y013705D03*
+X008206Y013705D03*
+X007950Y013705D03*
+X007553Y013705D03*
+X007297Y013705D03*
+X007041Y013705D03*
+X006785Y013705D03*
+X006530Y013705D03*
+X006274Y013705D03*
+X006018Y013705D03*
+X005762Y013705D03*
+X005506Y013705D03*
+X005250Y013705D03*
+X005250Y016105D03*
+X005506Y016105D03*
+X005762Y016105D03*
+X006018Y016105D03*
+X006274Y016105D03*
+X006530Y016105D03*
+X006785Y016105D03*
+X007041Y016105D03*
+X007297Y016105D03*
+X007553Y016105D03*
+X007950Y016105D03*
+X008206Y016105D03*
+X008462Y016105D03*
+X008718Y016105D03*
+X008974Y016105D03*
+X009230Y016105D03*
+X009485Y016105D03*
+X009741Y016105D03*
+X009997Y016105D03*
+X010253Y016105D03*
+D37*
+X005835Y017655D03*
+X005165Y017655D03*
+D38*
+X006916Y009855D03*
+X007172Y009855D03*
+X007428Y009855D03*
+X007684Y009855D03*
+X007684Y008555D03*
+X007428Y008555D03*
+X007172Y008555D03*
+X006916Y008555D03*
+D39*
+X012000Y013955D03*
+X012500Y013955D03*
+X013000Y013955D03*
+X013500Y013955D03*
+X013500Y015955D03*
+X013000Y015955D03*
+X012500Y015955D03*
+X012000Y015955D03*
+D40*
+X014809Y009955D03*
+X015991Y009955D03*
+D41*
+X010700Y011555D03*
+X010700Y011811D03*
+X010700Y012067D03*
+X010700Y012323D03*
+X008810Y012323D03*
+X008810Y012067D03*
+X008810Y011811D03*
+X008810Y011555D03*
+D42*
+X005400Y004787D03*
+X004400Y004787D03*
+X003400Y004787D03*
+X002400Y004787D03*
+X001400Y004787D03*
+X001400Y001023D03*
+X002400Y001023D03*
+X003400Y001023D03*
+X004400Y001023D03*
+X005400Y001023D03*
+D43*
+X027978Y012719D03*
+X027978Y014491D03*
+X031522Y014491D03*
+X031522Y012719D03*
+D44*
+X024283Y014255D03*
+X022117Y014255D03*
+D45*
+X015650Y014622D03*
+X015650Y016788D03*
+D46*
+X017000Y011505D03*
+D47*
+X025700Y012705D03*
+X025400Y001055D03*
+X004550Y008155D03*
+X001450Y006355D03*
+X002100Y012255D03*
+X004050Y012255D03*
+D48*
+X020115Y015140D03*
+D49*
+X008200Y018255D03*
+X008200Y018755D03*
+X008200Y019255D03*
+X008200Y019755D03*
+X006200Y019755D03*
+X006200Y019255D03*
+X006200Y018755D03*
+X006200Y018255D03*
+D50*
+X011550Y017705D03*
+X023050Y001405D03*
+M02*
diff --git a/pcb/proxmark3_fix/CAM/proxmark3.TXT b/pcb/proxmark3_fix/CAM/proxmark3.TXT
new file mode 100644 (file)
index 0000000..0222af7
--- /dev/null
@@ -0,0 +1,376 @@
+%
+M48
+M72
+T01C0.0157
+T02C0.0354
+T03C0.0394
+T04C0.0450
+T05C0.0630
+T06C0.0787
+%
+T01
+X7850Y14705
+X5150Y12655
+X10000Y12005
+X11200Y13605
+X6400Y2755
+X8550Y3255
+X10350Y5005
+X16450Y12355
+X17400Y12455
+X16450Y9605
+X8050Y9405
+X10150Y8105
+X10500Y1655
+X11400Y1105
+X12250Y505
+X13450Y6655
+X17050Y6705
+X16100Y4755
+X13550Y3055
+X26950Y11555
+X29450Y6805
+X31050Y7655
+X15950Y13105
+X7800Y6155
+X3400Y6305
+X27650Y2255
+X29450Y2305
+X25150Y2255
+X17400Y805
+X19400Y2255
+X13000Y15055
+X22200Y6405
+X20750Y3055
+X22650Y4855
+X4600Y18355
+X11150Y19455
+X9350Y17905
+X1200Y18055
+X2300Y18005
+X2200Y16855
+X2150Y9405
+X3550Y11155
+X3250Y8355
+X3300Y7305
+X4800Y4005
+X4700Y1855
+X6500Y3605
+X13050Y3055
+X13450Y2605
+X12550Y6505
+X11750Y7605
+X13100Y11005
+X15950Y3255
+X26450Y705
+X29800Y9755
+X29450Y11555
+X29600Y12605
+X29400Y14305
+X22800Y13405
+X24200Y14805
+X26650Y14655
+X16150Y16105
+X19200Y5255
+X18250Y5355
+X19250Y4355
+X7450Y1455
+X9050Y9955
+X9700Y15005
+X10700Y15005
+X13500Y15005
+X1500Y17655
+X2700Y3155
+X22450Y1405
+X23650Y1405
+X23050Y2005
+X23050Y805
+X10950Y17705
+X12150Y17705
+X11550Y17105
+X11550Y18305
+X19350Y11055
+X15950Y19755
+X11200Y19805
+X22950Y19255
+X29500Y19405
+X31150Y17355
+X31250Y13855
+X31900Y13855
+X31950Y9155
+X32050Y5055
+X31800Y3655
+X19500Y805
+X22150Y12505
+X20850Y13355
+X13900Y12805
+X22900Y9155
+X11974Y18129
+X11974Y17281
+X11126Y17281
+X11126Y18129
+X23474Y981
+X23474Y1829
+X22626Y1829
+X22626Y981
+X6100Y8405
+X2150Y17455
+X2550Y17355
+X4450Y16605
+X30550Y15955
+X31150Y4405
+X30250Y11905
+X5000Y17105
+X4550Y17005
+X30150Y15755
+X31100Y5055
+X31150Y11905
+X12900Y18005
+X24750Y16605
+X24600Y15105
+X27900Y15105
+X26700Y3255
+X27850Y6955
+X27900Y8855
+X24600Y8205
+X6600Y17455
+X14050Y17355
+X14050Y14855
+X5900Y4805
+X4900Y16005
+X6100Y10255
+X12000Y1455
+X9700Y3355
+X8900Y10505
+X7950Y15555
+X7400Y18605
+X16400Y4055
+X28600Y3605
+X24600Y7005
+X31250Y5755
+X26900Y16705
+X26900Y5555
+X26600Y6305
+X27500Y5005
+X24150Y4105
+X20700Y5255
+X24550Y5755
+X22350Y5605
+X22400Y6755
+X22250Y5205
+X22800Y7905
+X6550Y10255
+X6700Y5005
+X13850Y5505
+X10250Y3305
+X9050Y5605
+X10750Y1255
+X10300Y11105
+X12600Y3305
+X6150Y10855
+X10550Y12805
+X10750Y8505
+X11400Y2555
+X8850Y1355
+X8150Y3955
+X11550Y4305
+X12000Y4305
+X13050Y6555
+X18700Y16155
+X18700Y2205
+X18300Y3655
+X18950Y7155
+X14750Y6505
+X14750Y6905
+X15600Y1805
+X14100Y2905
+X20400Y7055
+X25650Y6705
+X21600Y7905
+X25450Y3255
+X25950Y5505
+X25900Y7555
+X16000Y8505
+X26300Y5255
+X26100Y7905
+X16500Y7405
+X16450Y8555
+X16900Y15205
+X30200Y14455
+X29200Y5505
+X13550Y11205
+X17600Y11355
+X8050Y10255
+X6600Y4355
+X13350Y4305
+X12600Y14655
+X16900Y13855
+X16850Y12855
+X24200Y12755
+X25100Y6005
+X20150Y6655
+X20550Y2405
+X20500Y4505
+X17750Y6605
+X17150Y2455
+X17750Y4255
+X2650Y14155
+X7050Y13155
+X3300Y14155
+X4050Y16305
+X3900Y14155
+X9150Y14905
+X4800Y15005
+X4000Y9305
+X4950Y13055
+X10900Y1805
+X26300Y3355
+X26950Y8155
+X11550Y14005
+X12300Y11855
+X13100Y8455
+X23750Y9005
+X25050Y8205
+X12150Y10155
+X13450Y8155
+X25750Y8205
+X12750Y10255
+X25000Y9705
+X8900Y9355
+X12350Y7905
+X13550Y6255
+X13700Y12105
+X5350Y13055
+X16450Y5905
+X16200Y14355
+X7950Y14305
+X14100Y6305
+X14050Y13305
+X9900Y13055
+X6200Y15205
+X7600Y13155
+X16100Y6255
+X15650Y17855
+X10450Y17655
+X6900Y14755
+X7550Y15555
+X6500Y2305
+X6000Y1205
+X25350Y6405
+X7800Y5055
+X4850Y5755
+X8100Y5805
+X8050Y8905
+X2150Y2155
+X900Y12255
+X12850Y11905
+X3700Y7655
+X3300Y1955
+X3550Y10405
+X1700Y7055
+X4300Y3605
+X5550Y8055
+X5850Y5355
+X9000Y5105
+X2300Y3855
+X5400Y12005
+X26900Y9855
+X9650Y10105
+X28450Y4205
+X28300Y9555
+X22600Y9655
+X24900Y5405
+X29200Y4805
+X28550Y13805
+X23900Y13605
+X23600Y4055
+X29250Y3605
+X28700Y15355
+X21150Y15355
+X21100Y11055
+X25600Y9605
+X22100Y9605
+X22250Y3305
+X25900Y9905
+X25950Y14705
+X21850Y15105
+X20950Y3955
+X21000Y6755
+X21500Y9605
+X17700Y9155
+X20600Y6505
+X20950Y9205
+X16850Y8405
+X17650Y10755
+X23100Y11005
+X23150Y8155
+X20450Y3355
+X23100Y3255
+X24450Y7405
+X17100Y5855
+X16300Y16505
+X5600Y15555
+X17050Y4955
+X17750Y15555
+X8350Y15405
+X4550Y14105
+X7300Y14305
+X1400Y14205
+X10750Y13755
+X23000Y4255
+X24900Y4955
+X26950Y5055
+X31950Y6155
+X31200Y13355
+X25000Y13505
+X6900Y18455
+X8900Y19455
+X11500Y14855
+X26900Y12105
+X26700Y7205
+X28350Y11305
+X7100Y18105
+X10550Y19455
+X25350Y5655
+X31100Y6155
+X31100Y10605
+X20650Y11405
+T02
+X2880Y18022
+X2880Y16644
+T03
+X1917Y10046
+X1917Y8864
+T04
+X29950Y18455
+X29950Y17455
+X28950Y18455
+X28950Y17455
+X27950Y18455
+X27950Y17455
+X26950Y18455
+X26950Y17455
+X25950Y18455
+X25950Y17455
+X24950Y18455
+X24950Y17455
+X23950Y18455
+X23950Y17455
+X22950Y18455
+X22950Y17455
+X21950Y18455
+X21950Y17455
+X20950Y18455
+X20950Y17455
+X17400Y18955
+X16400Y18955
+X15400Y18955
+X14400Y18955
+X13400Y18955
+X12400Y18955
+T05
+X20115Y15140
+T06
+X23050Y1405
+X11550Y17705
+M30
diff --git a/pcb/proxmark3_fix/CAM/proxmark3.do b/pcb/proxmark3_fix/CAM/proxmark3.do
new file mode 100644 (file)
index 0000000..84610a6
--- /dev/null
@@ -0,0 +1,23531 @@
+G75*
+G70*
+%OFA0B0*%
+%FSLAX24Y24*%
+%IPPOS*%
+%LPD*%
+%AMOC8*
+5,1,8,0,0,1.08239X$1,22.5*
+%
+%ADD10C,0.0010*%
+%ADD11C,0.0000*%
+D10*
+X000450Y000105D02*
+X032450Y000105D01*
+X032450Y020305D01*
+X000450Y020305D01*
+X000450Y000105D01*
+X001760Y002155D02*
+X001762Y002194D01*
+X001768Y002232D01*
+X001777Y002270D01*
+X001791Y002306D01*
+X001807Y002342D01*
+X001828Y002375D01*
+X001851Y002406D01*
+X001878Y002434D01*
+X001907Y002460D01*
+X001938Y002483D01*
+X001972Y002502D01*
+X002008Y002518D01*
+X002044Y002530D01*
+X002082Y002539D01*
+X002121Y002544D01*
+X002160Y002545D01*
+X002198Y002542D01*
+X002237Y002535D01*
+X002274Y002525D01*
+X002310Y002510D01*
+X002345Y002493D01*
+X002378Y002472D01*
+X002408Y002447D01*
+X002436Y002420D01*
+X002461Y002390D01*
+X002483Y002358D01*
+X002501Y002324D01*
+X002516Y002288D01*
+X002528Y002251D01*
+X002536Y002213D01*
+X002540Y002174D01*
+X002540Y002136D01*
+X002536Y002097D01*
+X002528Y002059D01*
+X002516Y002022D01*
+X002501Y001986D01*
+X002483Y001952D01*
+X002461Y001920D01*
+X002436Y001890D01*
+X002408Y001863D01*
+X002378Y001838D01*
+X002345Y001817D01*
+X002310Y001800D01*
+X002274Y001785D01*
+X002237Y001775D01*
+X002198Y001768D01*
+X002160Y001765D01*
+X002121Y001766D01*
+X002082Y001771D01*
+X002044Y001780D01*
+X002008Y001792D01*
+X001972Y001808D01*
+X001938Y001827D01*
+X001907Y001850D01*
+X001878Y001876D01*
+X001851Y001904D01*
+X001828Y001935D01*
+X001807Y001968D01*
+X001791Y002004D01*
+X001777Y002040D01*
+X001768Y002078D01*
+X001762Y002116D01*
+X001760Y002155D01*
+X001750Y001755D02*
+X002550Y002555D01*
+X002910Y001955D02*
+X002912Y001994D01*
+X002918Y002032D01*
+X002927Y002070D01*
+X002941Y002106D01*
+X002957Y002142D01*
+X002978Y002175D01*
+X003001Y002206D01*
+X003028Y002234D01*
+X003057Y002260D01*
+X003088Y002283D01*
+X003122Y002302D01*
+X003158Y002318D01*
+X003194Y002330D01*
+X003232Y002339D01*
+X003271Y002344D01*
+X003310Y002345D01*
+X003348Y002342D01*
+X003387Y002335D01*
+X003424Y002325D01*
+X003460Y002310D01*
+X003495Y002293D01*
+X003528Y002272D01*
+X003558Y002247D01*
+X003586Y002220D01*
+X003611Y002190D01*
+X003633Y002158D01*
+X003651Y002124D01*
+X003666Y002088D01*
+X003678Y002051D01*
+X003686Y002013D01*
+X003690Y001974D01*
+X003690Y001936D01*
+X003686Y001897D01*
+X003678Y001859D01*
+X003666Y001822D01*
+X003651Y001786D01*
+X003633Y001752D01*
+X003611Y001720D01*
+X003586Y001690D01*
+X003558Y001663D01*
+X003528Y001638D01*
+X003495Y001617D01*
+X003460Y001600D01*
+X003424Y001585D01*
+X003387Y001575D01*
+X003348Y001568D01*
+X003310Y001565D01*
+X003271Y001566D01*
+X003232Y001571D01*
+X003194Y001580D01*
+X003158Y001592D01*
+X003122Y001608D01*
+X003088Y001627D01*
+X003057Y001650D01*
+X003028Y001676D01*
+X003001Y001704D01*
+X002978Y001735D01*
+X002957Y001768D01*
+X002941Y001804D01*
+X002927Y001840D01*
+X002918Y001878D01*
+X002912Y001916D01*
+X002910Y001955D01*
+X002900Y001555D02*
+X003700Y002355D01*
+X004310Y001855D02*
+X004312Y001894D01*
+X004318Y001932D01*
+X004327Y001970D01*
+X004341Y002006D01*
+X004357Y002042D01*
+X004378Y002075D01*
+X004401Y002106D01*
+X004428Y002134D01*
+X004457Y002160D01*
+X004488Y002183D01*
+X004522Y002202D01*
+X004558Y002218D01*
+X004594Y002230D01*
+X004632Y002239D01*
+X004671Y002244D01*
+X004710Y002245D01*
+X004748Y002242D01*
+X004787Y002235D01*
+X004824Y002225D01*
+X004860Y002210D01*
+X004895Y002193D01*
+X004928Y002172D01*
+X004958Y002147D01*
+X004986Y002120D01*
+X005011Y002090D01*
+X005033Y002058D01*
+X005051Y002024D01*
+X005066Y001988D01*
+X005078Y001951D01*
+X005086Y001913D01*
+X005090Y001874D01*
+X005090Y001836D01*
+X005086Y001797D01*
+X005078Y001759D01*
+X005066Y001722D01*
+X005051Y001686D01*
+X005033Y001652D01*
+X005011Y001620D01*
+X004986Y001590D01*
+X004958Y001563D01*
+X004928Y001538D01*
+X004895Y001517D01*
+X004860Y001500D01*
+X004824Y001485D01*
+X004787Y001475D01*
+X004748Y001468D01*
+X004710Y001465D01*
+X004671Y001466D01*
+X004632Y001471D01*
+X004594Y001480D01*
+X004558Y001492D01*
+X004522Y001508D01*
+X004488Y001527D01*
+X004457Y001550D01*
+X004428Y001576D01*
+X004401Y001604D01*
+X004378Y001635D01*
+X004357Y001668D01*
+X004341Y001704D01*
+X004327Y001740D01*
+X004318Y001778D01*
+X004312Y001816D01*
+X004310Y001855D01*
+X004300Y001455D02*
+X005100Y002255D01*
+X006010Y002755D02*
+X006012Y002794D01*
+X006018Y002832D01*
+X006027Y002870D01*
+X006041Y002906D01*
+X006057Y002942D01*
+X006078Y002975D01*
+X006101Y003006D01*
+X006128Y003034D01*
+X006157Y003060D01*
+X006188Y003083D01*
+X006222Y003102D01*
+X006258Y003118D01*
+X006294Y003130D01*
+X006332Y003139D01*
+X006371Y003144D01*
+X006410Y003145D01*
+X006448Y003142D01*
+X006487Y003135D01*
+X006524Y003125D01*
+X006560Y003110D01*
+X006595Y003093D01*
+X006628Y003072D01*
+X006658Y003047D01*
+X006686Y003020D01*
+X006711Y002990D01*
+X006733Y002958D01*
+X006751Y002924D01*
+X006766Y002888D01*
+X006778Y002851D01*
+X006786Y002813D01*
+X006790Y002774D01*
+X006790Y002736D01*
+X006786Y002697D01*
+X006778Y002659D01*
+X006766Y002622D01*
+X006751Y002586D01*
+X006733Y002552D01*
+X006711Y002520D01*
+X006686Y002490D01*
+X006658Y002463D01*
+X006628Y002438D01*
+X006595Y002417D01*
+X006560Y002400D01*
+X006524Y002385D01*
+X006487Y002375D01*
+X006448Y002368D01*
+X006410Y002365D01*
+X006371Y002366D01*
+X006332Y002371D01*
+X006294Y002380D01*
+X006258Y002392D01*
+X006222Y002408D01*
+X006188Y002427D01*
+X006157Y002450D01*
+X006128Y002476D01*
+X006101Y002504D01*
+X006078Y002535D01*
+X006057Y002568D01*
+X006041Y002604D01*
+X006027Y002640D01*
+X006018Y002678D01*
+X006012Y002716D01*
+X006010Y002755D01*
+X006000Y002355D02*
+X006800Y003155D01*
+X006110Y003605D02*
+X006112Y003644D01*
+X006118Y003682D01*
+X006127Y003720D01*
+X006141Y003756D01*
+X006157Y003792D01*
+X006178Y003825D01*
+X006201Y003856D01*
+X006228Y003884D01*
+X006257Y003910D01*
+X006288Y003933D01*
+X006322Y003952D01*
+X006358Y003968D01*
+X006394Y003980D01*
+X006432Y003989D01*
+X006471Y003994D01*
+X006510Y003995D01*
+X006548Y003992D01*
+X006587Y003985D01*
+X006624Y003975D01*
+X006660Y003960D01*
+X006695Y003943D01*
+X006728Y003922D01*
+X006758Y003897D01*
+X006786Y003870D01*
+X006811Y003840D01*
+X006833Y003808D01*
+X006851Y003774D01*
+X006866Y003738D01*
+X006878Y003701D01*
+X006886Y003663D01*
+X006890Y003624D01*
+X006890Y003586D01*
+X006886Y003547D01*
+X006878Y003509D01*
+X006866Y003472D01*
+X006851Y003436D01*
+X006833Y003402D01*
+X006811Y003370D01*
+X006786Y003340D01*
+X006758Y003313D01*
+X006728Y003288D01*
+X006695Y003267D01*
+X006660Y003250D01*
+X006624Y003235D01*
+X006587Y003225D01*
+X006548Y003218D01*
+X006510Y003215D01*
+X006471Y003216D01*
+X006432Y003221D01*
+X006394Y003230D01*
+X006358Y003242D01*
+X006322Y003258D01*
+X006288Y003277D01*
+X006257Y003300D01*
+X006228Y003326D01*
+X006201Y003354D01*
+X006178Y003385D01*
+X006157Y003418D01*
+X006141Y003454D01*
+X006127Y003490D01*
+X006118Y003528D01*
+X006112Y003566D01*
+X006110Y003605D01*
+X006100Y003205D02*
+X006900Y004005D01*
+X006210Y004355D02*
+X006212Y004394D01*
+X006218Y004432D01*
+X006227Y004470D01*
+X006241Y004506D01*
+X006257Y004542D01*
+X006278Y004575D01*
+X006301Y004606D01*
+X006328Y004634D01*
+X006357Y004660D01*
+X006388Y004683D01*
+X006422Y004702D01*
+X006458Y004718D01*
+X006494Y004730D01*
+X006532Y004739D01*
+X006571Y004744D01*
+X006610Y004745D01*
+X006648Y004742D01*
+X006687Y004735D01*
+X006724Y004725D01*
+X006760Y004710D01*
+X006795Y004693D01*
+X006828Y004672D01*
+X006858Y004647D01*
+X006886Y004620D01*
+X006911Y004590D01*
+X006933Y004558D01*
+X006951Y004524D01*
+X006966Y004488D01*
+X006978Y004451D01*
+X006986Y004413D01*
+X006990Y004374D01*
+X006990Y004336D01*
+X006986Y004297D01*
+X006978Y004259D01*
+X006966Y004222D01*
+X006951Y004186D01*
+X006933Y004152D01*
+X006911Y004120D01*
+X006886Y004090D01*
+X006858Y004063D01*
+X006828Y004038D01*
+X006795Y004017D01*
+X006760Y004000D01*
+X006724Y003985D01*
+X006687Y003975D01*
+X006648Y003968D01*
+X006610Y003965D01*
+X006571Y003966D01*
+X006532Y003971D01*
+X006494Y003980D01*
+X006458Y003992D01*
+X006422Y004008D01*
+X006388Y004027D01*
+X006357Y004050D01*
+X006328Y004076D01*
+X006301Y004104D01*
+X006278Y004135D01*
+X006257Y004168D01*
+X006241Y004204D01*
+X006227Y004240D01*
+X006218Y004278D01*
+X006212Y004316D01*
+X006210Y004355D01*
+X006200Y003955D02*
+X007000Y004755D01*
+X006310Y005005D02*
+X006312Y005044D01*
+X006318Y005082D01*
+X006327Y005120D01*
+X006341Y005156D01*
+X006357Y005192D01*
+X006378Y005225D01*
+X006401Y005256D01*
+X006428Y005284D01*
+X006457Y005310D01*
+X006488Y005333D01*
+X006522Y005352D01*
+X006558Y005368D01*
+X006594Y005380D01*
+X006632Y005389D01*
+X006671Y005394D01*
+X006710Y005395D01*
+X006748Y005392D01*
+X006787Y005385D01*
+X006824Y005375D01*
+X006860Y005360D01*
+X006895Y005343D01*
+X006928Y005322D01*
+X006958Y005297D01*
+X006986Y005270D01*
+X007011Y005240D01*
+X007033Y005208D01*
+X007051Y005174D01*
+X007066Y005138D01*
+X007078Y005101D01*
+X007086Y005063D01*
+X007090Y005024D01*
+X007090Y004986D01*
+X007086Y004947D01*
+X007078Y004909D01*
+X007066Y004872D01*
+X007051Y004836D01*
+X007033Y004802D01*
+X007011Y004770D01*
+X006986Y004740D01*
+X006958Y004713D01*
+X006928Y004688D01*
+X006895Y004667D01*
+X006860Y004650D01*
+X006824Y004635D01*
+X006787Y004625D01*
+X006748Y004618D01*
+X006710Y004615D01*
+X006671Y004616D01*
+X006632Y004621D01*
+X006594Y004630D01*
+X006558Y004642D01*
+X006522Y004658D01*
+X006488Y004677D01*
+X006457Y004700D01*
+X006428Y004726D01*
+X006401Y004754D01*
+X006378Y004785D01*
+X006357Y004818D01*
+X006341Y004854D01*
+X006327Y004890D01*
+X006318Y004928D01*
+X006312Y004966D01*
+X006310Y005005D01*
+X006300Y004605D02*
+X007100Y005405D01*
+X007410Y005055D02*
+X007412Y005094D01*
+X007418Y005132D01*
+X007427Y005170D01*
+X007441Y005206D01*
+X007457Y005242D01*
+X007478Y005275D01*
+X007501Y005306D01*
+X007528Y005334D01*
+X007557Y005360D01*
+X007588Y005383D01*
+X007622Y005402D01*
+X007658Y005418D01*
+X007694Y005430D01*
+X007732Y005439D01*
+X007771Y005444D01*
+X007810Y005445D01*
+X007848Y005442D01*
+X007887Y005435D01*
+X007924Y005425D01*
+X007960Y005410D01*
+X007995Y005393D01*
+X008028Y005372D01*
+X008058Y005347D01*
+X008086Y005320D01*
+X008111Y005290D01*
+X008133Y005258D01*
+X008151Y005224D01*
+X008166Y005188D01*
+X008178Y005151D01*
+X008186Y005113D01*
+X008190Y005074D01*
+X008190Y005036D01*
+X008186Y004997D01*
+X008178Y004959D01*
+X008166Y004922D01*
+X008151Y004886D01*
+X008133Y004852D01*
+X008111Y004820D01*
+X008086Y004790D01*
+X008058Y004763D01*
+X008028Y004738D01*
+X007995Y004717D01*
+X007960Y004700D01*
+X007924Y004685D01*
+X007887Y004675D01*
+X007848Y004668D01*
+X007810Y004665D01*
+X007771Y004666D01*
+X007732Y004671D01*
+X007694Y004680D01*
+X007658Y004692D01*
+X007622Y004708D01*
+X007588Y004727D01*
+X007557Y004750D01*
+X007528Y004776D01*
+X007501Y004804D01*
+X007478Y004835D01*
+X007457Y004868D01*
+X007441Y004904D01*
+X007427Y004940D01*
+X007418Y004978D01*
+X007412Y005016D01*
+X007410Y005055D01*
+X007400Y004655D02*
+X008200Y005455D01*
+X007710Y005805D02*
+X007712Y005844D01*
+X007718Y005882D01*
+X007727Y005920D01*
+X007741Y005956D01*
+X007757Y005992D01*
+X007778Y006025D01*
+X007801Y006056D01*
+X007828Y006084D01*
+X007857Y006110D01*
+X007888Y006133D01*
+X007922Y006152D01*
+X007958Y006168D01*
+X007994Y006180D01*
+X008032Y006189D01*
+X008071Y006194D01*
+X008110Y006195D01*
+X008148Y006192D01*
+X008187Y006185D01*
+X008224Y006175D01*
+X008260Y006160D01*
+X008295Y006143D01*
+X008328Y006122D01*
+X008358Y006097D01*
+X008386Y006070D01*
+X008411Y006040D01*
+X008433Y006008D01*
+X008451Y005974D01*
+X008466Y005938D01*
+X008478Y005901D01*
+X008486Y005863D01*
+X008490Y005824D01*
+X008490Y005786D01*
+X008486Y005747D01*
+X008478Y005709D01*
+X008466Y005672D01*
+X008451Y005636D01*
+X008433Y005602D01*
+X008411Y005570D01*
+X008386Y005540D01*
+X008358Y005513D01*
+X008328Y005488D01*
+X008295Y005467D01*
+X008260Y005450D01*
+X008224Y005435D01*
+X008187Y005425D01*
+X008148Y005418D01*
+X008110Y005415D01*
+X008071Y005416D01*
+X008032Y005421D01*
+X007994Y005430D01*
+X007958Y005442D01*
+X007922Y005458D01*
+X007888Y005477D01*
+X007857Y005500D01*
+X007828Y005526D01*
+X007801Y005554D01*
+X007778Y005585D01*
+X007757Y005618D01*
+X007741Y005654D01*
+X007727Y005690D01*
+X007718Y005728D01*
+X007712Y005766D01*
+X007710Y005805D01*
+X007700Y005405D02*
+X008500Y006205D01*
+X007410Y006155D02*
+X007412Y006194D01*
+X007418Y006232D01*
+X007427Y006270D01*
+X007441Y006306D01*
+X007457Y006342D01*
+X007478Y006375D01*
+X007501Y006406D01*
+X007528Y006434D01*
+X007557Y006460D01*
+X007588Y006483D01*
+X007622Y006502D01*
+X007658Y006518D01*
+X007694Y006530D01*
+X007732Y006539D01*
+X007771Y006544D01*
+X007810Y006545D01*
+X007848Y006542D01*
+X007887Y006535D01*
+X007924Y006525D01*
+X007960Y006510D01*
+X007995Y006493D01*
+X008028Y006472D01*
+X008058Y006447D01*
+X008086Y006420D01*
+X008111Y006390D01*
+X008133Y006358D01*
+X008151Y006324D01*
+X008166Y006288D01*
+X008178Y006251D01*
+X008186Y006213D01*
+X008190Y006174D01*
+X008190Y006136D01*
+X008186Y006097D01*
+X008178Y006059D01*
+X008166Y006022D01*
+X008151Y005986D01*
+X008133Y005952D01*
+X008111Y005920D01*
+X008086Y005890D01*
+X008058Y005863D01*
+X008028Y005838D01*
+X007995Y005817D01*
+X007960Y005800D01*
+X007924Y005785D01*
+X007887Y005775D01*
+X007848Y005768D01*
+X007810Y005765D01*
+X007771Y005766D01*
+X007732Y005771D01*
+X007694Y005780D01*
+X007658Y005792D01*
+X007622Y005808D01*
+X007588Y005827D01*
+X007557Y005850D01*
+X007528Y005876D01*
+X007501Y005904D01*
+X007478Y005935D01*
+X007457Y005968D01*
+X007441Y006004D01*
+X007427Y006040D01*
+X007418Y006078D01*
+X007412Y006116D01*
+X007410Y006155D01*
+X007400Y005755D02*
+X008200Y006555D01*
+X008660Y005605D02*
+X008662Y005644D01*
+X008668Y005682D01*
+X008677Y005720D01*
+X008691Y005756D01*
+X008707Y005792D01*
+X008728Y005825D01*
+X008751Y005856D01*
+X008778Y005884D01*
+X008807Y005910D01*
+X008838Y005933D01*
+X008872Y005952D01*
+X008908Y005968D01*
+X008944Y005980D01*
+X008982Y005989D01*
+X009021Y005994D01*
+X009060Y005995D01*
+X009098Y005992D01*
+X009137Y005985D01*
+X009174Y005975D01*
+X009210Y005960D01*
+X009245Y005943D01*
+X009278Y005922D01*
+X009308Y005897D01*
+X009336Y005870D01*
+X009361Y005840D01*
+X009383Y005808D01*
+X009401Y005774D01*
+X009416Y005738D01*
+X009428Y005701D01*
+X009436Y005663D01*
+X009440Y005624D01*
+X009440Y005586D01*
+X009436Y005547D01*
+X009428Y005509D01*
+X009416Y005472D01*
+X009401Y005436D01*
+X009383Y005402D01*
+X009361Y005370D01*
+X009336Y005340D01*
+X009308Y005313D01*
+X009278Y005288D01*
+X009245Y005267D01*
+X009210Y005250D01*
+X009174Y005235D01*
+X009137Y005225D01*
+X009098Y005218D01*
+X009060Y005215D01*
+X009021Y005216D01*
+X008982Y005221D01*
+X008944Y005230D01*
+X008908Y005242D01*
+X008872Y005258D01*
+X008838Y005277D01*
+X008807Y005300D01*
+X008778Y005326D01*
+X008751Y005354D01*
+X008728Y005385D01*
+X008707Y005418D01*
+X008691Y005454D01*
+X008677Y005490D01*
+X008668Y005528D01*
+X008662Y005566D01*
+X008660Y005605D01*
+X008650Y005205D02*
+X009450Y006005D01*
+X008610Y005105D02*
+X008612Y005144D01*
+X008618Y005182D01*
+X008627Y005220D01*
+X008641Y005256D01*
+X008657Y005292D01*
+X008678Y005325D01*
+X008701Y005356D01*
+X008728Y005384D01*
+X008757Y005410D01*
+X008788Y005433D01*
+X008822Y005452D01*
+X008858Y005468D01*
+X008894Y005480D01*
+X008932Y005489D01*
+X008971Y005494D01*
+X009010Y005495D01*
+X009048Y005492D01*
+X009087Y005485D01*
+X009124Y005475D01*
+X009160Y005460D01*
+X009195Y005443D01*
+X009228Y005422D01*
+X009258Y005397D01*
+X009286Y005370D01*
+X009311Y005340D01*
+X009333Y005308D01*
+X009351Y005274D01*
+X009366Y005238D01*
+X009378Y005201D01*
+X009386Y005163D01*
+X009390Y005124D01*
+X009390Y005086D01*
+X009386Y005047D01*
+X009378Y005009D01*
+X009366Y004972D01*
+X009351Y004936D01*
+X009333Y004902D01*
+X009311Y004870D01*
+X009286Y004840D01*
+X009258Y004813D01*
+X009228Y004788D01*
+X009195Y004767D01*
+X009160Y004750D01*
+X009124Y004735D01*
+X009087Y004725D01*
+X009048Y004718D01*
+X009010Y004715D01*
+X008971Y004716D01*
+X008932Y004721D01*
+X008894Y004730D01*
+X008858Y004742D01*
+X008822Y004758D01*
+X008788Y004777D01*
+X008757Y004800D01*
+X008728Y004826D01*
+X008701Y004854D01*
+X008678Y004885D01*
+X008657Y004918D01*
+X008641Y004954D01*
+X008627Y004990D01*
+X008618Y005028D01*
+X008612Y005066D01*
+X008610Y005105D01*
+X008600Y004705D02*
+X009400Y005505D01*
+X009960Y005005D02*
+X009962Y005044D01*
+X009968Y005082D01*
+X009977Y005120D01*
+X009991Y005156D01*
+X010007Y005192D01*
+X010028Y005225D01*
+X010051Y005256D01*
+X010078Y005284D01*
+X010107Y005310D01*
+X010138Y005333D01*
+X010172Y005352D01*
+X010208Y005368D01*
+X010244Y005380D01*
+X010282Y005389D01*
+X010321Y005394D01*
+X010360Y005395D01*
+X010398Y005392D01*
+X010437Y005385D01*
+X010474Y005375D01*
+X010510Y005360D01*
+X010545Y005343D01*
+X010578Y005322D01*
+X010608Y005297D01*
+X010636Y005270D01*
+X010661Y005240D01*
+X010683Y005208D01*
+X010701Y005174D01*
+X010716Y005138D01*
+X010728Y005101D01*
+X010736Y005063D01*
+X010740Y005024D01*
+X010740Y004986D01*
+X010736Y004947D01*
+X010728Y004909D01*
+X010716Y004872D01*
+X010701Y004836D01*
+X010683Y004802D01*
+X010661Y004770D01*
+X010636Y004740D01*
+X010608Y004713D01*
+X010578Y004688D01*
+X010545Y004667D01*
+X010510Y004650D01*
+X010474Y004635D01*
+X010437Y004625D01*
+X010398Y004618D01*
+X010360Y004615D01*
+X010321Y004616D01*
+X010282Y004621D01*
+X010244Y004630D01*
+X010208Y004642D01*
+X010172Y004658D01*
+X010138Y004677D01*
+X010107Y004700D01*
+X010078Y004726D01*
+X010051Y004754D01*
+X010028Y004785D01*
+X010007Y004818D01*
+X009991Y004854D01*
+X009977Y004890D01*
+X009968Y004928D01*
+X009962Y004966D01*
+X009960Y005005D01*
+X009950Y004605D02*
+X010750Y005405D01*
+X012160Y006505D02*
+X012162Y006544D01*
+X012168Y006582D01*
+X012177Y006620D01*
+X012191Y006656D01*
+X012207Y006692D01*
+X012228Y006725D01*
+X012251Y006756D01*
+X012278Y006784D01*
+X012307Y006810D01*
+X012338Y006833D01*
+X012372Y006852D01*
+X012408Y006868D01*
+X012444Y006880D01*
+X012482Y006889D01*
+X012521Y006894D01*
+X012560Y006895D01*
+X012598Y006892D01*
+X012637Y006885D01*
+X012674Y006875D01*
+X012710Y006860D01*
+X012745Y006843D01*
+X012778Y006822D01*
+X012808Y006797D01*
+X012836Y006770D01*
+X012861Y006740D01*
+X012883Y006708D01*
+X012901Y006674D01*
+X012916Y006638D01*
+X012928Y006601D01*
+X012936Y006563D01*
+X012940Y006524D01*
+X012940Y006486D01*
+X012936Y006447D01*
+X012928Y006409D01*
+X012916Y006372D01*
+X012901Y006336D01*
+X012883Y006302D01*
+X012861Y006270D01*
+X012836Y006240D01*
+X012808Y006213D01*
+X012778Y006188D01*
+X012745Y006167D01*
+X012710Y006150D01*
+X012674Y006135D01*
+X012637Y006125D01*
+X012598Y006118D01*
+X012560Y006115D01*
+X012521Y006116D01*
+X012482Y006121D01*
+X012444Y006130D01*
+X012408Y006142D01*
+X012372Y006158D01*
+X012338Y006177D01*
+X012307Y006200D01*
+X012278Y006226D01*
+X012251Y006254D01*
+X012228Y006285D01*
+X012207Y006318D01*
+X012191Y006354D01*
+X012177Y006390D01*
+X012168Y006428D01*
+X012162Y006466D01*
+X012160Y006505D01*
+X012150Y006105D02*
+X012950Y006905D01*
+X012660Y006555D02*
+X012662Y006594D01*
+X012668Y006632D01*
+X012677Y006670D01*
+X012691Y006706D01*
+X012707Y006742D01*
+X012728Y006775D01*
+X012751Y006806D01*
+X012778Y006834D01*
+X012807Y006860D01*
+X012838Y006883D01*
+X012872Y006902D01*
+X012908Y006918D01*
+X012944Y006930D01*
+X012982Y006939D01*
+X013021Y006944D01*
+X013060Y006945D01*
+X013098Y006942D01*
+X013137Y006935D01*
+X013174Y006925D01*
+X013210Y006910D01*
+X013245Y006893D01*
+X013278Y006872D01*
+X013308Y006847D01*
+X013336Y006820D01*
+X013361Y006790D01*
+X013383Y006758D01*
+X013401Y006724D01*
+X013416Y006688D01*
+X013428Y006651D01*
+X013436Y006613D01*
+X013440Y006574D01*
+X013440Y006536D01*
+X013436Y006497D01*
+X013428Y006459D01*
+X013416Y006422D01*
+X013401Y006386D01*
+X013383Y006352D01*
+X013361Y006320D01*
+X013336Y006290D01*
+X013308Y006263D01*
+X013278Y006238D01*
+X013245Y006217D01*
+X013210Y006200D01*
+X013174Y006185D01*
+X013137Y006175D01*
+X013098Y006168D01*
+X013060Y006165D01*
+X013021Y006166D01*
+X012982Y006171D01*
+X012944Y006180D01*
+X012908Y006192D01*
+X012872Y006208D01*
+X012838Y006227D01*
+X012807Y006250D01*
+X012778Y006276D01*
+X012751Y006304D01*
+X012728Y006335D01*
+X012707Y006368D01*
+X012691Y006404D01*
+X012677Y006440D01*
+X012668Y006478D01*
+X012662Y006516D01*
+X012660Y006555D01*
+X012650Y006155D02*
+X013450Y006955D01*
+X013060Y006655D02*
+X013062Y006694D01*
+X013068Y006732D01*
+X013077Y006770D01*
+X013091Y006806D01*
+X013107Y006842D01*
+X013128Y006875D01*
+X013151Y006906D01*
+X013178Y006934D01*
+X013207Y006960D01*
+X013238Y006983D01*
+X013272Y007002D01*
+X013308Y007018D01*
+X013344Y007030D01*
+X013382Y007039D01*
+X013421Y007044D01*
+X013460Y007045D01*
+X013498Y007042D01*
+X013537Y007035D01*
+X013574Y007025D01*
+X013610Y007010D01*
+X013645Y006993D01*
+X013678Y006972D01*
+X013708Y006947D01*
+X013736Y006920D01*
+X013761Y006890D01*
+X013783Y006858D01*
+X013801Y006824D01*
+X013816Y006788D01*
+X013828Y006751D01*
+X013836Y006713D01*
+X013840Y006674D01*
+X013840Y006636D01*
+X013836Y006597D01*
+X013828Y006559D01*
+X013816Y006522D01*
+X013801Y006486D01*
+X013783Y006452D01*
+X013761Y006420D01*
+X013736Y006390D01*
+X013708Y006363D01*
+X013678Y006338D01*
+X013645Y006317D01*
+X013610Y006300D01*
+X013574Y006285D01*
+X013537Y006275D01*
+X013498Y006268D01*
+X013460Y006265D01*
+X013421Y006266D01*
+X013382Y006271D01*
+X013344Y006280D01*
+X013308Y006292D01*
+X013272Y006308D01*
+X013238Y006327D01*
+X013207Y006350D01*
+X013178Y006376D01*
+X013151Y006404D01*
+X013128Y006435D01*
+X013107Y006468D01*
+X013091Y006504D01*
+X013077Y006540D01*
+X013068Y006578D01*
+X013062Y006616D01*
+X013060Y006655D01*
+X013050Y006255D02*
+X013850Y007055D01*
+X013710Y006305D02*
+X013712Y006344D01*
+X013718Y006382D01*
+X013727Y006420D01*
+X013741Y006456D01*
+X013757Y006492D01*
+X013778Y006525D01*
+X013801Y006556D01*
+X013828Y006584D01*
+X013857Y006610D01*
+X013888Y006633D01*
+X013922Y006652D01*
+X013958Y006668D01*
+X013994Y006680D01*
+X014032Y006689D01*
+X014071Y006694D01*
+X014110Y006695D01*
+X014148Y006692D01*
+X014187Y006685D01*
+X014224Y006675D01*
+X014260Y006660D01*
+X014295Y006643D01*
+X014328Y006622D01*
+X014358Y006597D01*
+X014386Y006570D01*
+X014411Y006540D01*
+X014433Y006508D01*
+X014451Y006474D01*
+X014466Y006438D01*
+X014478Y006401D01*
+X014486Y006363D01*
+X014490Y006324D01*
+X014490Y006286D01*
+X014486Y006247D01*
+X014478Y006209D01*
+X014466Y006172D01*
+X014451Y006136D01*
+X014433Y006102D01*
+X014411Y006070D01*
+X014386Y006040D01*
+X014358Y006013D01*
+X014328Y005988D01*
+X014295Y005967D01*
+X014260Y005950D01*
+X014224Y005935D01*
+X014187Y005925D01*
+X014148Y005918D01*
+X014110Y005915D01*
+X014071Y005916D01*
+X014032Y005921D01*
+X013994Y005930D01*
+X013958Y005942D01*
+X013922Y005958D01*
+X013888Y005977D01*
+X013857Y006000D01*
+X013828Y006026D01*
+X013801Y006054D01*
+X013778Y006085D01*
+X013757Y006118D01*
+X013741Y006154D01*
+X013727Y006190D01*
+X013718Y006228D01*
+X013712Y006266D01*
+X013710Y006305D01*
+X013700Y005905D02*
+X014500Y006705D01*
+X014360Y006505D02*
+X014362Y006544D01*
+X014368Y006582D01*
+X014377Y006620D01*
+X014391Y006656D01*
+X014407Y006692D01*
+X014428Y006725D01*
+X014451Y006756D01*
+X014478Y006784D01*
+X014507Y006810D01*
+X014538Y006833D01*
+X014572Y006852D01*
+X014608Y006868D01*
+X014644Y006880D01*
+X014682Y006889D01*
+X014721Y006894D01*
+X014760Y006895D01*
+X014798Y006892D01*
+X014837Y006885D01*
+X014874Y006875D01*
+X014910Y006860D01*
+X014945Y006843D01*
+X014978Y006822D01*
+X015008Y006797D01*
+X015036Y006770D01*
+X015061Y006740D01*
+X015083Y006708D01*
+X015101Y006674D01*
+X015116Y006638D01*
+X015128Y006601D01*
+X015136Y006563D01*
+X015140Y006524D01*
+X015140Y006486D01*
+X015136Y006447D01*
+X015128Y006409D01*
+X015116Y006372D01*
+X015101Y006336D01*
+X015083Y006302D01*
+X015061Y006270D01*
+X015036Y006240D01*
+X015008Y006213D01*
+X014978Y006188D01*
+X014945Y006167D01*
+X014910Y006150D01*
+X014874Y006135D01*
+X014837Y006125D01*
+X014798Y006118D01*
+X014760Y006115D01*
+X014721Y006116D01*
+X014682Y006121D01*
+X014644Y006130D01*
+X014608Y006142D01*
+X014572Y006158D01*
+X014538Y006177D01*
+X014507Y006200D01*
+X014478Y006226D01*
+X014451Y006254D01*
+X014428Y006285D01*
+X014407Y006318D01*
+X014391Y006354D01*
+X014377Y006390D01*
+X014368Y006428D01*
+X014362Y006466D01*
+X014360Y006505D01*
+X014350Y006105D02*
+X015150Y006905D01*
+X014360Y006905D02*
+X014362Y006944D01*
+X014368Y006982D01*
+X014377Y007020D01*
+X014391Y007056D01*
+X014407Y007092D01*
+X014428Y007125D01*
+X014451Y007156D01*
+X014478Y007184D01*
+X014507Y007210D01*
+X014538Y007233D01*
+X014572Y007252D01*
+X014608Y007268D01*
+X014644Y007280D01*
+X014682Y007289D01*
+X014721Y007294D01*
+X014760Y007295D01*
+X014798Y007292D01*
+X014837Y007285D01*
+X014874Y007275D01*
+X014910Y007260D01*
+X014945Y007243D01*
+X014978Y007222D01*
+X015008Y007197D01*
+X015036Y007170D01*
+X015061Y007140D01*
+X015083Y007108D01*
+X015101Y007074D01*
+X015116Y007038D01*
+X015128Y007001D01*
+X015136Y006963D01*
+X015140Y006924D01*
+X015140Y006886D01*
+X015136Y006847D01*
+X015128Y006809D01*
+X015116Y006772D01*
+X015101Y006736D01*
+X015083Y006702D01*
+X015061Y006670D01*
+X015036Y006640D01*
+X015008Y006613D01*
+X014978Y006588D01*
+X014945Y006567D01*
+X014910Y006550D01*
+X014874Y006535D01*
+X014837Y006525D01*
+X014798Y006518D01*
+X014760Y006515D01*
+X014721Y006516D01*
+X014682Y006521D01*
+X014644Y006530D01*
+X014608Y006542D01*
+X014572Y006558D01*
+X014538Y006577D01*
+X014507Y006600D01*
+X014478Y006626D01*
+X014451Y006654D01*
+X014428Y006685D01*
+X014407Y006718D01*
+X014391Y006754D01*
+X014377Y006790D01*
+X014368Y006828D01*
+X014362Y006866D01*
+X014360Y006905D01*
+X014350Y006505D02*
+X015150Y007305D01*
+X016110Y007405D02*
+X016112Y007444D01*
+X016118Y007482D01*
+X016127Y007520D01*
+X016141Y007556D01*
+X016157Y007592D01*
+X016178Y007625D01*
+X016201Y007656D01*
+X016228Y007684D01*
+X016257Y007710D01*
+X016288Y007733D01*
+X016322Y007752D01*
+X016358Y007768D01*
+X016394Y007780D01*
+X016432Y007789D01*
+X016471Y007794D01*
+X016510Y007795D01*
+X016548Y007792D01*
+X016587Y007785D01*
+X016624Y007775D01*
+X016660Y007760D01*
+X016695Y007743D01*
+X016728Y007722D01*
+X016758Y007697D01*
+X016786Y007670D01*
+X016811Y007640D01*
+X016833Y007608D01*
+X016851Y007574D01*
+X016866Y007538D01*
+X016878Y007501D01*
+X016886Y007463D01*
+X016890Y007424D01*
+X016890Y007386D01*
+X016886Y007347D01*
+X016878Y007309D01*
+X016866Y007272D01*
+X016851Y007236D01*
+X016833Y007202D01*
+X016811Y007170D01*
+X016786Y007140D01*
+X016758Y007113D01*
+X016728Y007088D01*
+X016695Y007067D01*
+X016660Y007050D01*
+X016624Y007035D01*
+X016587Y007025D01*
+X016548Y007018D01*
+X016510Y007015D01*
+X016471Y007016D01*
+X016432Y007021D01*
+X016394Y007030D01*
+X016358Y007042D01*
+X016322Y007058D01*
+X016288Y007077D01*
+X016257Y007100D01*
+X016228Y007126D01*
+X016201Y007154D01*
+X016178Y007185D01*
+X016157Y007218D01*
+X016141Y007254D01*
+X016127Y007290D01*
+X016118Y007328D01*
+X016112Y007366D01*
+X016110Y007405D01*
+X016100Y007005D02*
+X016900Y007805D01*
+X016460Y008405D02*
+X016462Y008444D01*
+X016468Y008482D01*
+X016477Y008520D01*
+X016491Y008556D01*
+X016507Y008592D01*
+X016528Y008625D01*
+X016551Y008656D01*
+X016578Y008684D01*
+X016607Y008710D01*
+X016638Y008733D01*
+X016672Y008752D01*
+X016708Y008768D01*
+X016744Y008780D01*
+X016782Y008789D01*
+X016821Y008794D01*
+X016860Y008795D01*
+X016898Y008792D01*
+X016937Y008785D01*
+X016974Y008775D01*
+X017010Y008760D01*
+X017045Y008743D01*
+X017078Y008722D01*
+X017108Y008697D01*
+X017136Y008670D01*
+X017161Y008640D01*
+X017183Y008608D01*
+X017201Y008574D01*
+X017216Y008538D01*
+X017228Y008501D01*
+X017236Y008463D01*
+X017240Y008424D01*
+X017240Y008386D01*
+X017236Y008347D01*
+X017228Y008309D01*
+X017216Y008272D01*
+X017201Y008236D01*
+X017183Y008202D01*
+X017161Y008170D01*
+X017136Y008140D01*
+X017108Y008113D01*
+X017078Y008088D01*
+X017045Y008067D01*
+X017010Y008050D01*
+X016974Y008035D01*
+X016937Y008025D01*
+X016898Y008018D01*
+X016860Y008015D01*
+X016821Y008016D01*
+X016782Y008021D01*
+X016744Y008030D01*
+X016708Y008042D01*
+X016672Y008058D01*
+X016638Y008077D01*
+X016607Y008100D01*
+X016578Y008126D01*
+X016551Y008154D01*
+X016528Y008185D01*
+X016507Y008218D01*
+X016491Y008254D01*
+X016477Y008290D01*
+X016468Y008328D01*
+X016462Y008366D01*
+X016460Y008405D01*
+X016450Y008005D02*
+X017250Y008805D01*
+X017310Y009155D02*
+X017312Y009194D01*
+X017318Y009232D01*
+X017327Y009270D01*
+X017341Y009306D01*
+X017357Y009342D01*
+X017378Y009375D01*
+X017401Y009406D01*
+X017428Y009434D01*
+X017457Y009460D01*
+X017488Y009483D01*
+X017522Y009502D01*
+X017558Y009518D01*
+X017594Y009530D01*
+X017632Y009539D01*
+X017671Y009544D01*
+X017710Y009545D01*
+X017748Y009542D01*
+X017787Y009535D01*
+X017824Y009525D01*
+X017860Y009510D01*
+X017895Y009493D01*
+X017928Y009472D01*
+X017958Y009447D01*
+X017986Y009420D01*
+X018011Y009390D01*
+X018033Y009358D01*
+X018051Y009324D01*
+X018066Y009288D01*
+X018078Y009251D01*
+X018086Y009213D01*
+X018090Y009174D01*
+X018090Y009136D01*
+X018086Y009097D01*
+X018078Y009059D01*
+X018066Y009022D01*
+X018051Y008986D01*
+X018033Y008952D01*
+X018011Y008920D01*
+X017986Y008890D01*
+X017958Y008863D01*
+X017928Y008838D01*
+X017895Y008817D01*
+X017860Y008800D01*
+X017824Y008785D01*
+X017787Y008775D01*
+X017748Y008768D01*
+X017710Y008765D01*
+X017671Y008766D01*
+X017632Y008771D01*
+X017594Y008780D01*
+X017558Y008792D01*
+X017522Y008808D01*
+X017488Y008827D01*
+X017457Y008850D01*
+X017428Y008876D01*
+X017401Y008904D01*
+X017378Y008935D01*
+X017357Y008968D01*
+X017341Y009004D01*
+X017327Y009040D01*
+X017318Y009078D01*
+X017312Y009116D01*
+X017310Y009155D01*
+X017300Y008755D02*
+X018100Y009555D01*
+X016060Y009605D02*
+X016062Y009644D01*
+X016068Y009682D01*
+X016077Y009720D01*
+X016091Y009756D01*
+X016107Y009792D01*
+X016128Y009825D01*
+X016151Y009856D01*
+X016178Y009884D01*
+X016207Y009910D01*
+X016238Y009933D01*
+X016272Y009952D01*
+X016308Y009968D01*
+X016344Y009980D01*
+X016382Y009989D01*
+X016421Y009994D01*
+X016460Y009995D01*
+X016498Y009992D01*
+X016537Y009985D01*
+X016574Y009975D01*
+X016610Y009960D01*
+X016645Y009943D01*
+X016678Y009922D01*
+X016708Y009897D01*
+X016736Y009870D01*
+X016761Y009840D01*
+X016783Y009808D01*
+X016801Y009774D01*
+X016816Y009738D01*
+X016828Y009701D01*
+X016836Y009663D01*
+X016840Y009624D01*
+X016840Y009586D01*
+X016836Y009547D01*
+X016828Y009509D01*
+X016816Y009472D01*
+X016801Y009436D01*
+X016783Y009402D01*
+X016761Y009370D01*
+X016736Y009340D01*
+X016708Y009313D01*
+X016678Y009288D01*
+X016645Y009267D01*
+X016610Y009250D01*
+X016574Y009235D01*
+X016537Y009225D01*
+X016498Y009218D01*
+X016460Y009215D01*
+X016421Y009216D01*
+X016382Y009221D01*
+X016344Y009230D01*
+X016308Y009242D01*
+X016272Y009258D01*
+X016238Y009277D01*
+X016207Y009300D01*
+X016178Y009326D01*
+X016151Y009354D01*
+X016128Y009385D01*
+X016107Y009418D01*
+X016091Y009454D01*
+X016077Y009490D01*
+X016068Y009528D01*
+X016062Y009566D01*
+X016060Y009605D01*
+X016050Y009205D02*
+X016850Y010005D01*
+X017260Y010755D02*
+X017262Y010794D01*
+X017268Y010832D01*
+X017277Y010870D01*
+X017291Y010906D01*
+X017307Y010942D01*
+X017328Y010975D01*
+X017351Y011006D01*
+X017378Y011034D01*
+X017407Y011060D01*
+X017438Y011083D01*
+X017472Y011102D01*
+X017508Y011118D01*
+X017544Y011130D01*
+X017582Y011139D01*
+X017621Y011144D01*
+X017660Y011145D01*
+X017698Y011142D01*
+X017737Y011135D01*
+X017774Y011125D01*
+X017810Y011110D01*
+X017845Y011093D01*
+X017878Y011072D01*
+X017908Y011047D01*
+X017936Y011020D01*
+X017961Y010990D01*
+X017983Y010958D01*
+X018001Y010924D01*
+X018016Y010888D01*
+X018028Y010851D01*
+X018036Y010813D01*
+X018040Y010774D01*
+X018040Y010736D01*
+X018036Y010697D01*
+X018028Y010659D01*
+X018016Y010622D01*
+X018001Y010586D01*
+X017983Y010552D01*
+X017961Y010520D01*
+X017936Y010490D01*
+X017908Y010463D01*
+X017878Y010438D01*
+X017845Y010417D01*
+X017810Y010400D01*
+X017774Y010385D01*
+X017737Y010375D01*
+X017698Y010368D01*
+X017660Y010365D01*
+X017621Y010366D01*
+X017582Y010371D01*
+X017544Y010380D01*
+X017508Y010392D01*
+X017472Y010408D01*
+X017438Y010427D01*
+X017407Y010450D01*
+X017378Y010476D01*
+X017351Y010504D01*
+X017328Y010535D01*
+X017307Y010568D01*
+X017291Y010604D01*
+X017277Y010640D01*
+X017268Y010678D01*
+X017262Y010716D01*
+X017260Y010755D01*
+X017250Y010355D02*
+X018050Y011155D01*
+X017210Y011355D02*
+X017212Y011394D01*
+X017218Y011432D01*
+X017227Y011470D01*
+X017241Y011506D01*
+X017257Y011542D01*
+X017278Y011575D01*
+X017301Y011606D01*
+X017328Y011634D01*
+X017357Y011660D01*
+X017388Y011683D01*
+X017422Y011702D01*
+X017458Y011718D01*
+X017494Y011730D01*
+X017532Y011739D01*
+X017571Y011744D01*
+X017610Y011745D01*
+X017648Y011742D01*
+X017687Y011735D01*
+X017724Y011725D01*
+X017760Y011710D01*
+X017795Y011693D01*
+X017828Y011672D01*
+X017858Y011647D01*
+X017886Y011620D01*
+X017911Y011590D01*
+X017933Y011558D01*
+X017951Y011524D01*
+X017966Y011488D01*
+X017978Y011451D01*
+X017986Y011413D01*
+X017990Y011374D01*
+X017990Y011336D01*
+X017986Y011297D01*
+X017978Y011259D01*
+X017966Y011222D01*
+X017951Y011186D01*
+X017933Y011152D01*
+X017911Y011120D01*
+X017886Y011090D01*
+X017858Y011063D01*
+X017828Y011038D01*
+X017795Y011017D01*
+X017760Y011000D01*
+X017724Y010985D01*
+X017687Y010975D01*
+X017648Y010968D01*
+X017610Y010965D01*
+X017571Y010966D01*
+X017532Y010971D01*
+X017494Y010980D01*
+X017458Y010992D01*
+X017422Y011008D01*
+X017388Y011027D01*
+X017357Y011050D01*
+X017328Y011076D01*
+X017301Y011104D01*
+X017278Y011135D01*
+X017257Y011168D01*
+X017241Y011204D01*
+X017227Y011240D01*
+X017218Y011278D01*
+X017212Y011316D01*
+X017210Y011355D01*
+X017200Y010955D02*
+X018000Y011755D01*
+X017010Y012455D02*
+X017012Y012494D01*
+X017018Y012532D01*
+X017027Y012570D01*
+X017041Y012606D01*
+X017057Y012642D01*
+X017078Y012675D01*
+X017101Y012706D01*
+X017128Y012734D01*
+X017157Y012760D01*
+X017188Y012783D01*
+X017222Y012802D01*
+X017258Y012818D01*
+X017294Y012830D01*
+X017332Y012839D01*
+X017371Y012844D01*
+X017410Y012845D01*
+X017448Y012842D01*
+X017487Y012835D01*
+X017524Y012825D01*
+X017560Y012810D01*
+X017595Y012793D01*
+X017628Y012772D01*
+X017658Y012747D01*
+X017686Y012720D01*
+X017711Y012690D01*
+X017733Y012658D01*
+X017751Y012624D01*
+X017766Y012588D01*
+X017778Y012551D01*
+X017786Y012513D01*
+X017790Y012474D01*
+X017790Y012436D01*
+X017786Y012397D01*
+X017778Y012359D01*
+X017766Y012322D01*
+X017751Y012286D01*
+X017733Y012252D01*
+X017711Y012220D01*
+X017686Y012190D01*
+X017658Y012163D01*
+X017628Y012138D01*
+X017595Y012117D01*
+X017560Y012100D01*
+X017524Y012085D01*
+X017487Y012075D01*
+X017448Y012068D01*
+X017410Y012065D01*
+X017371Y012066D01*
+X017332Y012071D01*
+X017294Y012080D01*
+X017258Y012092D01*
+X017222Y012108D01*
+X017188Y012127D01*
+X017157Y012150D01*
+X017128Y012176D01*
+X017101Y012204D01*
+X017078Y012235D01*
+X017057Y012268D01*
+X017041Y012304D01*
+X017027Y012340D01*
+X017018Y012378D01*
+X017012Y012416D01*
+X017010Y012455D01*
+X017000Y012055D02*
+X017800Y012855D01*
+X016460Y012855D02*
+X016462Y012894D01*
+X016468Y012932D01*
+X016477Y012970D01*
+X016491Y013006D01*
+X016507Y013042D01*
+X016528Y013075D01*
+X016551Y013106D01*
+X016578Y013134D01*
+X016607Y013160D01*
+X016638Y013183D01*
+X016672Y013202D01*
+X016708Y013218D01*
+X016744Y013230D01*
+X016782Y013239D01*
+X016821Y013244D01*
+X016860Y013245D01*
+X016898Y013242D01*
+X016937Y013235D01*
+X016974Y013225D01*
+X017010Y013210D01*
+X017045Y013193D01*
+X017078Y013172D01*
+X017108Y013147D01*
+X017136Y013120D01*
+X017161Y013090D01*
+X017183Y013058D01*
+X017201Y013024D01*
+X017216Y012988D01*
+X017228Y012951D01*
+X017236Y012913D01*
+X017240Y012874D01*
+X017240Y012836D01*
+X017236Y012797D01*
+X017228Y012759D01*
+X017216Y012722D01*
+X017201Y012686D01*
+X017183Y012652D01*
+X017161Y012620D01*
+X017136Y012590D01*
+X017108Y012563D01*
+X017078Y012538D01*
+X017045Y012517D01*
+X017010Y012500D01*
+X016974Y012485D01*
+X016937Y012475D01*
+X016898Y012468D01*
+X016860Y012465D01*
+X016821Y012466D01*
+X016782Y012471D01*
+X016744Y012480D01*
+X016708Y012492D01*
+X016672Y012508D01*
+X016638Y012527D01*
+X016607Y012550D01*
+X016578Y012576D01*
+X016551Y012604D01*
+X016528Y012635D01*
+X016507Y012668D01*
+X016491Y012704D01*
+X016477Y012740D01*
+X016468Y012778D01*
+X016462Y012816D01*
+X016460Y012855D01*
+X016450Y012455D02*
+X017250Y013255D01*
+X016510Y013855D02*
+X016512Y013894D01*
+X016518Y013932D01*
+X016527Y013970D01*
+X016541Y014006D01*
+X016557Y014042D01*
+X016578Y014075D01*
+X016601Y014106D01*
+X016628Y014134D01*
+X016657Y014160D01*
+X016688Y014183D01*
+X016722Y014202D01*
+X016758Y014218D01*
+X016794Y014230D01*
+X016832Y014239D01*
+X016871Y014244D01*
+X016910Y014245D01*
+X016948Y014242D01*
+X016987Y014235D01*
+X017024Y014225D01*
+X017060Y014210D01*
+X017095Y014193D01*
+X017128Y014172D01*
+X017158Y014147D01*
+X017186Y014120D01*
+X017211Y014090D01*
+X017233Y014058D01*
+X017251Y014024D01*
+X017266Y013988D01*
+X017278Y013951D01*
+X017286Y013913D01*
+X017290Y013874D01*
+X017290Y013836D01*
+X017286Y013797D01*
+X017278Y013759D01*
+X017266Y013722D01*
+X017251Y013686D01*
+X017233Y013652D01*
+X017211Y013620D01*
+X017186Y013590D01*
+X017158Y013563D01*
+X017128Y013538D01*
+X017095Y013517D01*
+X017060Y013500D01*
+X017024Y013485D01*
+X016987Y013475D01*
+X016948Y013468D01*
+X016910Y013465D01*
+X016871Y013466D01*
+X016832Y013471D01*
+X016794Y013480D01*
+X016758Y013492D01*
+X016722Y013508D01*
+X016688Y013527D01*
+X016657Y013550D01*
+X016628Y013576D01*
+X016601Y013604D01*
+X016578Y013635D01*
+X016557Y013668D01*
+X016541Y013704D01*
+X016527Y013740D01*
+X016518Y013778D01*
+X016512Y013816D01*
+X016510Y013855D01*
+X016500Y013455D02*
+X017300Y014255D01*
+X016510Y015205D02*
+X016512Y015244D01*
+X016518Y015282D01*
+X016527Y015320D01*
+X016541Y015356D01*
+X016557Y015392D01*
+X016578Y015425D01*
+X016601Y015456D01*
+X016628Y015484D01*
+X016657Y015510D01*
+X016688Y015533D01*
+X016722Y015552D01*
+X016758Y015568D01*
+X016794Y015580D01*
+X016832Y015589D01*
+X016871Y015594D01*
+X016910Y015595D01*
+X016948Y015592D01*
+X016987Y015585D01*
+X017024Y015575D01*
+X017060Y015560D01*
+X017095Y015543D01*
+X017128Y015522D01*
+X017158Y015497D01*
+X017186Y015470D01*
+X017211Y015440D01*
+X017233Y015408D01*
+X017251Y015374D01*
+X017266Y015338D01*
+X017278Y015301D01*
+X017286Y015263D01*
+X017290Y015224D01*
+X017290Y015186D01*
+X017286Y015147D01*
+X017278Y015109D01*
+X017266Y015072D01*
+X017251Y015036D01*
+X017233Y015002D01*
+X017211Y014970D01*
+X017186Y014940D01*
+X017158Y014913D01*
+X017128Y014888D01*
+X017095Y014867D01*
+X017060Y014850D01*
+X017024Y014835D01*
+X016987Y014825D01*
+X016948Y014818D01*
+X016910Y014815D01*
+X016871Y014816D01*
+X016832Y014821D01*
+X016794Y014830D01*
+X016758Y014842D01*
+X016722Y014858D01*
+X016688Y014877D01*
+X016657Y014900D01*
+X016628Y014926D01*
+X016601Y014954D01*
+X016578Y014985D01*
+X016557Y015018D01*
+X016541Y015054D01*
+X016527Y015090D01*
+X016518Y015128D01*
+X016512Y015166D01*
+X016510Y015205D01*
+X016500Y014805D02*
+X017300Y015605D01*
+X017360Y015555D02*
+X017362Y015594D01*
+X017368Y015632D01*
+X017377Y015670D01*
+X017391Y015706D01*
+X017407Y015742D01*
+X017428Y015775D01*
+X017451Y015806D01*
+X017478Y015834D01*
+X017507Y015860D01*
+X017538Y015883D01*
+X017572Y015902D01*
+X017608Y015918D01*
+X017644Y015930D01*
+X017682Y015939D01*
+X017721Y015944D01*
+X017760Y015945D01*
+X017798Y015942D01*
+X017837Y015935D01*
+X017874Y015925D01*
+X017910Y015910D01*
+X017945Y015893D01*
+X017978Y015872D01*
+X018008Y015847D01*
+X018036Y015820D01*
+X018061Y015790D01*
+X018083Y015758D01*
+X018101Y015724D01*
+X018116Y015688D01*
+X018128Y015651D01*
+X018136Y015613D01*
+X018140Y015574D01*
+X018140Y015536D01*
+X018136Y015497D01*
+X018128Y015459D01*
+X018116Y015422D01*
+X018101Y015386D01*
+X018083Y015352D01*
+X018061Y015320D01*
+X018036Y015290D01*
+X018008Y015263D01*
+X017978Y015238D01*
+X017945Y015217D01*
+X017910Y015200D01*
+X017874Y015185D01*
+X017837Y015175D01*
+X017798Y015168D01*
+X017760Y015165D01*
+X017721Y015166D01*
+X017682Y015171D01*
+X017644Y015180D01*
+X017608Y015192D01*
+X017572Y015208D01*
+X017538Y015227D01*
+X017507Y015250D01*
+X017478Y015276D01*
+X017451Y015304D01*
+X017428Y015335D01*
+X017407Y015368D01*
+X017391Y015404D01*
+X017377Y015440D01*
+X017368Y015478D01*
+X017362Y015516D01*
+X017360Y015555D01*
+X017350Y015155D02*
+X018150Y015955D01*
+X018310Y016155D02*
+X018312Y016194D01*
+X018318Y016232D01*
+X018327Y016270D01*
+X018341Y016306D01*
+X018357Y016342D01*
+X018378Y016375D01*
+X018401Y016406D01*
+X018428Y016434D01*
+X018457Y016460D01*
+X018488Y016483D01*
+X018522Y016502D01*
+X018558Y016518D01*
+X018594Y016530D01*
+X018632Y016539D01*
+X018671Y016544D01*
+X018710Y016545D01*
+X018748Y016542D01*
+X018787Y016535D01*
+X018824Y016525D01*
+X018860Y016510D01*
+X018895Y016493D01*
+X018928Y016472D01*
+X018958Y016447D01*
+X018986Y016420D01*
+X019011Y016390D01*
+X019033Y016358D01*
+X019051Y016324D01*
+X019066Y016288D01*
+X019078Y016251D01*
+X019086Y016213D01*
+X019090Y016174D01*
+X019090Y016136D01*
+X019086Y016097D01*
+X019078Y016059D01*
+X019066Y016022D01*
+X019051Y015986D01*
+X019033Y015952D01*
+X019011Y015920D01*
+X018986Y015890D01*
+X018958Y015863D01*
+X018928Y015838D01*
+X018895Y015817D01*
+X018860Y015800D01*
+X018824Y015785D01*
+X018787Y015775D01*
+X018748Y015768D01*
+X018710Y015765D01*
+X018671Y015766D01*
+X018632Y015771D01*
+X018594Y015780D01*
+X018558Y015792D01*
+X018522Y015808D01*
+X018488Y015827D01*
+X018457Y015850D01*
+X018428Y015876D01*
+X018401Y015904D01*
+X018378Y015935D01*
+X018357Y015968D01*
+X018341Y016004D01*
+X018327Y016040D01*
+X018318Y016078D01*
+X018312Y016116D01*
+X018310Y016155D01*
+X018300Y015755D02*
+X019100Y016555D01*
+X020560Y017455D02*
+X020562Y017494D01*
+X020568Y017532D01*
+X020577Y017570D01*
+X020591Y017606D01*
+X020607Y017642D01*
+X020628Y017675D01*
+X020651Y017706D01*
+X020678Y017734D01*
+X020707Y017760D01*
+X020738Y017783D01*
+X020772Y017802D01*
+X020808Y017818D01*
+X020844Y017830D01*
+X020882Y017839D01*
+X020921Y017844D01*
+X020960Y017845D01*
+X020998Y017842D01*
+X021037Y017835D01*
+X021074Y017825D01*
+X021110Y017810D01*
+X021145Y017793D01*
+X021178Y017772D01*
+X021208Y017747D01*
+X021236Y017720D01*
+X021261Y017690D01*
+X021283Y017658D01*
+X021301Y017624D01*
+X021316Y017588D01*
+X021328Y017551D01*
+X021336Y017513D01*
+X021340Y017474D01*
+X021340Y017436D01*
+X021336Y017397D01*
+X021328Y017359D01*
+X021316Y017322D01*
+X021301Y017286D01*
+X021283Y017252D01*
+X021261Y017220D01*
+X021236Y017190D01*
+X021208Y017163D01*
+X021178Y017138D01*
+X021145Y017117D01*
+X021110Y017100D01*
+X021074Y017085D01*
+X021037Y017075D01*
+X020998Y017068D01*
+X020960Y017065D01*
+X020921Y017066D01*
+X020882Y017071D01*
+X020844Y017080D01*
+X020808Y017092D01*
+X020772Y017108D01*
+X020738Y017127D01*
+X020707Y017150D01*
+X020678Y017176D01*
+X020651Y017204D01*
+X020628Y017235D01*
+X020607Y017268D01*
+X020591Y017304D01*
+X020577Y017340D01*
+X020568Y017378D01*
+X020562Y017416D01*
+X020560Y017455D01*
+X020550Y017055D02*
+X021350Y017855D01*
+X021560Y017455D02*
+X021562Y017494D01*
+X021568Y017532D01*
+X021577Y017570D01*
+X021591Y017606D01*
+X021607Y017642D01*
+X021628Y017675D01*
+X021651Y017706D01*
+X021678Y017734D01*
+X021707Y017760D01*
+X021738Y017783D01*
+X021772Y017802D01*
+X021808Y017818D01*
+X021844Y017830D01*
+X021882Y017839D01*
+X021921Y017844D01*
+X021960Y017845D01*
+X021998Y017842D01*
+X022037Y017835D01*
+X022074Y017825D01*
+X022110Y017810D01*
+X022145Y017793D01*
+X022178Y017772D01*
+X022208Y017747D01*
+X022236Y017720D01*
+X022261Y017690D01*
+X022283Y017658D01*
+X022301Y017624D01*
+X022316Y017588D01*
+X022328Y017551D01*
+X022336Y017513D01*
+X022340Y017474D01*
+X022340Y017436D01*
+X022336Y017397D01*
+X022328Y017359D01*
+X022316Y017322D01*
+X022301Y017286D01*
+X022283Y017252D01*
+X022261Y017220D01*
+X022236Y017190D01*
+X022208Y017163D01*
+X022178Y017138D01*
+X022145Y017117D01*
+X022110Y017100D01*
+X022074Y017085D01*
+X022037Y017075D01*
+X021998Y017068D01*
+X021960Y017065D01*
+X021921Y017066D01*
+X021882Y017071D01*
+X021844Y017080D01*
+X021808Y017092D01*
+X021772Y017108D01*
+X021738Y017127D01*
+X021707Y017150D01*
+X021678Y017176D01*
+X021651Y017204D01*
+X021628Y017235D01*
+X021607Y017268D01*
+X021591Y017304D01*
+X021577Y017340D01*
+X021568Y017378D01*
+X021562Y017416D01*
+X021560Y017455D01*
+X021550Y017055D02*
+X022350Y017855D01*
+X022560Y017455D02*
+X022562Y017494D01*
+X022568Y017532D01*
+X022577Y017570D01*
+X022591Y017606D01*
+X022607Y017642D01*
+X022628Y017675D01*
+X022651Y017706D01*
+X022678Y017734D01*
+X022707Y017760D01*
+X022738Y017783D01*
+X022772Y017802D01*
+X022808Y017818D01*
+X022844Y017830D01*
+X022882Y017839D01*
+X022921Y017844D01*
+X022960Y017845D01*
+X022998Y017842D01*
+X023037Y017835D01*
+X023074Y017825D01*
+X023110Y017810D01*
+X023145Y017793D01*
+X023178Y017772D01*
+X023208Y017747D01*
+X023236Y017720D01*
+X023261Y017690D01*
+X023283Y017658D01*
+X023301Y017624D01*
+X023316Y017588D01*
+X023328Y017551D01*
+X023336Y017513D01*
+X023340Y017474D01*
+X023340Y017436D01*
+X023336Y017397D01*
+X023328Y017359D01*
+X023316Y017322D01*
+X023301Y017286D01*
+X023283Y017252D01*
+X023261Y017220D01*
+X023236Y017190D01*
+X023208Y017163D01*
+X023178Y017138D01*
+X023145Y017117D01*
+X023110Y017100D01*
+X023074Y017085D01*
+X023037Y017075D01*
+X022998Y017068D01*
+X022960Y017065D01*
+X022921Y017066D01*
+X022882Y017071D01*
+X022844Y017080D01*
+X022808Y017092D01*
+X022772Y017108D01*
+X022738Y017127D01*
+X022707Y017150D01*
+X022678Y017176D01*
+X022651Y017204D01*
+X022628Y017235D01*
+X022607Y017268D01*
+X022591Y017304D01*
+X022577Y017340D01*
+X022568Y017378D01*
+X022562Y017416D01*
+X022560Y017455D01*
+X022550Y017055D02*
+X023350Y017855D01*
+X023560Y017455D02*
+X023562Y017494D01*
+X023568Y017532D01*
+X023577Y017570D01*
+X023591Y017606D01*
+X023607Y017642D01*
+X023628Y017675D01*
+X023651Y017706D01*
+X023678Y017734D01*
+X023707Y017760D01*
+X023738Y017783D01*
+X023772Y017802D01*
+X023808Y017818D01*
+X023844Y017830D01*
+X023882Y017839D01*
+X023921Y017844D01*
+X023960Y017845D01*
+X023998Y017842D01*
+X024037Y017835D01*
+X024074Y017825D01*
+X024110Y017810D01*
+X024145Y017793D01*
+X024178Y017772D01*
+X024208Y017747D01*
+X024236Y017720D01*
+X024261Y017690D01*
+X024283Y017658D01*
+X024301Y017624D01*
+X024316Y017588D01*
+X024328Y017551D01*
+X024336Y017513D01*
+X024340Y017474D01*
+X024340Y017436D01*
+X024336Y017397D01*
+X024328Y017359D01*
+X024316Y017322D01*
+X024301Y017286D01*
+X024283Y017252D01*
+X024261Y017220D01*
+X024236Y017190D01*
+X024208Y017163D01*
+X024178Y017138D01*
+X024145Y017117D01*
+X024110Y017100D01*
+X024074Y017085D01*
+X024037Y017075D01*
+X023998Y017068D01*
+X023960Y017065D01*
+X023921Y017066D01*
+X023882Y017071D01*
+X023844Y017080D01*
+X023808Y017092D01*
+X023772Y017108D01*
+X023738Y017127D01*
+X023707Y017150D01*
+X023678Y017176D01*
+X023651Y017204D01*
+X023628Y017235D01*
+X023607Y017268D01*
+X023591Y017304D01*
+X023577Y017340D01*
+X023568Y017378D01*
+X023562Y017416D01*
+X023560Y017455D01*
+X023550Y017055D02*
+X024350Y017855D01*
+X024560Y017455D02*
+X024562Y017494D01*
+X024568Y017532D01*
+X024577Y017570D01*
+X024591Y017606D01*
+X024607Y017642D01*
+X024628Y017675D01*
+X024651Y017706D01*
+X024678Y017734D01*
+X024707Y017760D01*
+X024738Y017783D01*
+X024772Y017802D01*
+X024808Y017818D01*
+X024844Y017830D01*
+X024882Y017839D01*
+X024921Y017844D01*
+X024960Y017845D01*
+X024998Y017842D01*
+X025037Y017835D01*
+X025074Y017825D01*
+X025110Y017810D01*
+X025145Y017793D01*
+X025178Y017772D01*
+X025208Y017747D01*
+X025236Y017720D01*
+X025261Y017690D01*
+X025283Y017658D01*
+X025301Y017624D01*
+X025316Y017588D01*
+X025328Y017551D01*
+X025336Y017513D01*
+X025340Y017474D01*
+X025340Y017436D01*
+X025336Y017397D01*
+X025328Y017359D01*
+X025316Y017322D01*
+X025301Y017286D01*
+X025283Y017252D01*
+X025261Y017220D01*
+X025236Y017190D01*
+X025208Y017163D01*
+X025178Y017138D01*
+X025145Y017117D01*
+X025110Y017100D01*
+X025074Y017085D01*
+X025037Y017075D01*
+X024998Y017068D01*
+X024960Y017065D01*
+X024921Y017066D01*
+X024882Y017071D01*
+X024844Y017080D01*
+X024808Y017092D01*
+X024772Y017108D01*
+X024738Y017127D01*
+X024707Y017150D01*
+X024678Y017176D01*
+X024651Y017204D01*
+X024628Y017235D01*
+X024607Y017268D01*
+X024591Y017304D01*
+X024577Y017340D01*
+X024568Y017378D01*
+X024562Y017416D01*
+X024560Y017455D01*
+X024550Y017055D02*
+X025350Y017855D01*
+X025560Y017455D02*
+X025562Y017494D01*
+X025568Y017532D01*
+X025577Y017570D01*
+X025591Y017606D01*
+X025607Y017642D01*
+X025628Y017675D01*
+X025651Y017706D01*
+X025678Y017734D01*
+X025707Y017760D01*
+X025738Y017783D01*
+X025772Y017802D01*
+X025808Y017818D01*
+X025844Y017830D01*
+X025882Y017839D01*
+X025921Y017844D01*
+X025960Y017845D01*
+X025998Y017842D01*
+X026037Y017835D01*
+X026074Y017825D01*
+X026110Y017810D01*
+X026145Y017793D01*
+X026178Y017772D01*
+X026208Y017747D01*
+X026236Y017720D01*
+X026261Y017690D01*
+X026283Y017658D01*
+X026301Y017624D01*
+X026316Y017588D01*
+X026328Y017551D01*
+X026336Y017513D01*
+X026340Y017474D01*
+X026340Y017436D01*
+X026336Y017397D01*
+X026328Y017359D01*
+X026316Y017322D01*
+X026301Y017286D01*
+X026283Y017252D01*
+X026261Y017220D01*
+X026236Y017190D01*
+X026208Y017163D01*
+X026178Y017138D01*
+X026145Y017117D01*
+X026110Y017100D01*
+X026074Y017085D01*
+X026037Y017075D01*
+X025998Y017068D01*
+X025960Y017065D01*
+X025921Y017066D01*
+X025882Y017071D01*
+X025844Y017080D01*
+X025808Y017092D01*
+X025772Y017108D01*
+X025738Y017127D01*
+X025707Y017150D01*
+X025678Y017176D01*
+X025651Y017204D01*
+X025628Y017235D01*
+X025607Y017268D01*
+X025591Y017304D01*
+X025577Y017340D01*
+X025568Y017378D01*
+X025562Y017416D01*
+X025560Y017455D01*
+X025550Y017055D02*
+X026350Y017855D01*
+X026560Y017455D02*
+X026562Y017494D01*
+X026568Y017532D01*
+X026577Y017570D01*
+X026591Y017606D01*
+X026607Y017642D01*
+X026628Y017675D01*
+X026651Y017706D01*
+X026678Y017734D01*
+X026707Y017760D01*
+X026738Y017783D01*
+X026772Y017802D01*
+X026808Y017818D01*
+X026844Y017830D01*
+X026882Y017839D01*
+X026921Y017844D01*
+X026960Y017845D01*
+X026998Y017842D01*
+X027037Y017835D01*
+X027074Y017825D01*
+X027110Y017810D01*
+X027145Y017793D01*
+X027178Y017772D01*
+X027208Y017747D01*
+X027236Y017720D01*
+X027261Y017690D01*
+X027283Y017658D01*
+X027301Y017624D01*
+X027316Y017588D01*
+X027328Y017551D01*
+X027336Y017513D01*
+X027340Y017474D01*
+X027340Y017436D01*
+X027336Y017397D01*
+X027328Y017359D01*
+X027316Y017322D01*
+X027301Y017286D01*
+X027283Y017252D01*
+X027261Y017220D01*
+X027236Y017190D01*
+X027208Y017163D01*
+X027178Y017138D01*
+X027145Y017117D01*
+X027110Y017100D01*
+X027074Y017085D01*
+X027037Y017075D01*
+X026998Y017068D01*
+X026960Y017065D01*
+X026921Y017066D01*
+X026882Y017071D01*
+X026844Y017080D01*
+X026808Y017092D01*
+X026772Y017108D01*
+X026738Y017127D01*
+X026707Y017150D01*
+X026678Y017176D01*
+X026651Y017204D01*
+X026628Y017235D01*
+X026607Y017268D01*
+X026591Y017304D01*
+X026577Y017340D01*
+X026568Y017378D01*
+X026562Y017416D01*
+X026560Y017455D01*
+X026550Y017055D02*
+X027350Y017855D01*
+X027560Y017455D02*
+X027562Y017494D01*
+X027568Y017532D01*
+X027577Y017570D01*
+X027591Y017606D01*
+X027607Y017642D01*
+X027628Y017675D01*
+X027651Y017706D01*
+X027678Y017734D01*
+X027707Y017760D01*
+X027738Y017783D01*
+X027772Y017802D01*
+X027808Y017818D01*
+X027844Y017830D01*
+X027882Y017839D01*
+X027921Y017844D01*
+X027960Y017845D01*
+X027998Y017842D01*
+X028037Y017835D01*
+X028074Y017825D01*
+X028110Y017810D01*
+X028145Y017793D01*
+X028178Y017772D01*
+X028208Y017747D01*
+X028236Y017720D01*
+X028261Y017690D01*
+X028283Y017658D01*
+X028301Y017624D01*
+X028316Y017588D01*
+X028328Y017551D01*
+X028336Y017513D01*
+X028340Y017474D01*
+X028340Y017436D01*
+X028336Y017397D01*
+X028328Y017359D01*
+X028316Y017322D01*
+X028301Y017286D01*
+X028283Y017252D01*
+X028261Y017220D01*
+X028236Y017190D01*
+X028208Y017163D01*
+X028178Y017138D01*
+X028145Y017117D01*
+X028110Y017100D01*
+X028074Y017085D01*
+X028037Y017075D01*
+X027998Y017068D01*
+X027960Y017065D01*
+X027921Y017066D01*
+X027882Y017071D01*
+X027844Y017080D01*
+X027808Y017092D01*
+X027772Y017108D01*
+X027738Y017127D01*
+X027707Y017150D01*
+X027678Y017176D01*
+X027651Y017204D01*
+X027628Y017235D01*
+X027607Y017268D01*
+X027591Y017304D01*
+X027577Y017340D01*
+X027568Y017378D01*
+X027562Y017416D01*
+X027560Y017455D01*
+X027550Y017055D02*
+X028350Y017855D01*
+X028560Y017455D02*
+X028562Y017494D01*
+X028568Y017532D01*
+X028577Y017570D01*
+X028591Y017606D01*
+X028607Y017642D01*
+X028628Y017675D01*
+X028651Y017706D01*
+X028678Y017734D01*
+X028707Y017760D01*
+X028738Y017783D01*
+X028772Y017802D01*
+X028808Y017818D01*
+X028844Y017830D01*
+X028882Y017839D01*
+X028921Y017844D01*
+X028960Y017845D01*
+X028998Y017842D01*
+X029037Y017835D01*
+X029074Y017825D01*
+X029110Y017810D01*
+X029145Y017793D01*
+X029178Y017772D01*
+X029208Y017747D01*
+X029236Y017720D01*
+X029261Y017690D01*
+X029283Y017658D01*
+X029301Y017624D01*
+X029316Y017588D01*
+X029328Y017551D01*
+X029336Y017513D01*
+X029340Y017474D01*
+X029340Y017436D01*
+X029336Y017397D01*
+X029328Y017359D01*
+X029316Y017322D01*
+X029301Y017286D01*
+X029283Y017252D01*
+X029261Y017220D01*
+X029236Y017190D01*
+X029208Y017163D01*
+X029178Y017138D01*
+X029145Y017117D01*
+X029110Y017100D01*
+X029074Y017085D01*
+X029037Y017075D01*
+X028998Y017068D01*
+X028960Y017065D01*
+X028921Y017066D01*
+X028882Y017071D01*
+X028844Y017080D01*
+X028808Y017092D01*
+X028772Y017108D01*
+X028738Y017127D01*
+X028707Y017150D01*
+X028678Y017176D01*
+X028651Y017204D01*
+X028628Y017235D01*
+X028607Y017268D01*
+X028591Y017304D01*
+X028577Y017340D01*
+X028568Y017378D01*
+X028562Y017416D01*
+X028560Y017455D01*
+X028550Y017055D02*
+X029350Y017855D01*
+X029560Y017455D02*
+X029562Y017494D01*
+X029568Y017532D01*
+X029577Y017570D01*
+X029591Y017606D01*
+X029607Y017642D01*
+X029628Y017675D01*
+X029651Y017706D01*
+X029678Y017734D01*
+X029707Y017760D01*
+X029738Y017783D01*
+X029772Y017802D01*
+X029808Y017818D01*
+X029844Y017830D01*
+X029882Y017839D01*
+X029921Y017844D01*
+X029960Y017845D01*
+X029998Y017842D01*
+X030037Y017835D01*
+X030074Y017825D01*
+X030110Y017810D01*
+X030145Y017793D01*
+X030178Y017772D01*
+X030208Y017747D01*
+X030236Y017720D01*
+X030261Y017690D01*
+X030283Y017658D01*
+X030301Y017624D01*
+X030316Y017588D01*
+X030328Y017551D01*
+X030336Y017513D01*
+X030340Y017474D01*
+X030340Y017436D01*
+X030336Y017397D01*
+X030328Y017359D01*
+X030316Y017322D01*
+X030301Y017286D01*
+X030283Y017252D01*
+X030261Y017220D01*
+X030236Y017190D01*
+X030208Y017163D01*
+X030178Y017138D01*
+X030145Y017117D01*
+X030110Y017100D01*
+X030074Y017085D01*
+X030037Y017075D01*
+X029998Y017068D01*
+X029960Y017065D01*
+X029921Y017066D01*
+X029882Y017071D01*
+X029844Y017080D01*
+X029808Y017092D01*
+X029772Y017108D01*
+X029738Y017127D01*
+X029707Y017150D01*
+X029678Y017176D01*
+X029651Y017204D01*
+X029628Y017235D01*
+X029607Y017268D01*
+X029591Y017304D01*
+X029577Y017340D01*
+X029568Y017378D01*
+X029562Y017416D01*
+X029560Y017455D01*
+X029550Y017055D02*
+X030350Y017855D01*
+X030760Y017355D02*
+X030762Y017394D01*
+X030768Y017432D01*
+X030777Y017470D01*
+X030791Y017506D01*
+X030807Y017542D01*
+X030828Y017575D01*
+X030851Y017606D01*
+X030878Y017634D01*
+X030907Y017660D01*
+X030938Y017683D01*
+X030972Y017702D01*
+X031008Y017718D01*
+X031044Y017730D01*
+X031082Y017739D01*
+X031121Y017744D01*
+X031160Y017745D01*
+X031198Y017742D01*
+X031237Y017735D01*
+X031274Y017725D01*
+X031310Y017710D01*
+X031345Y017693D01*
+X031378Y017672D01*
+X031408Y017647D01*
+X031436Y017620D01*
+X031461Y017590D01*
+X031483Y017558D01*
+X031501Y017524D01*
+X031516Y017488D01*
+X031528Y017451D01*
+X031536Y017413D01*
+X031540Y017374D01*
+X031540Y017336D01*
+X031536Y017297D01*
+X031528Y017259D01*
+X031516Y017222D01*
+X031501Y017186D01*
+X031483Y017152D01*
+X031461Y017120D01*
+X031436Y017090D01*
+X031408Y017063D01*
+X031378Y017038D01*
+X031345Y017017D01*
+X031310Y017000D01*
+X031274Y016985D01*
+X031237Y016975D01*
+X031198Y016968D01*
+X031160Y016965D01*
+X031121Y016966D01*
+X031082Y016971D01*
+X031044Y016980D01*
+X031008Y016992D01*
+X030972Y017008D01*
+X030938Y017027D01*
+X030907Y017050D01*
+X030878Y017076D01*
+X030851Y017104D01*
+X030828Y017135D01*
+X030807Y017168D01*
+X030791Y017204D01*
+X030777Y017240D01*
+X030768Y017278D01*
+X030762Y017316D01*
+X030760Y017355D01*
+X030750Y016955D02*
+X031550Y017755D01*
+X029560Y018455D02*
+X029562Y018494D01*
+X029568Y018532D01*
+X029577Y018570D01*
+X029591Y018606D01*
+X029607Y018642D01*
+X029628Y018675D01*
+X029651Y018706D01*
+X029678Y018734D01*
+X029707Y018760D01*
+X029738Y018783D01*
+X029772Y018802D01*
+X029808Y018818D01*
+X029844Y018830D01*
+X029882Y018839D01*
+X029921Y018844D01*
+X029960Y018845D01*
+X029998Y018842D01*
+X030037Y018835D01*
+X030074Y018825D01*
+X030110Y018810D01*
+X030145Y018793D01*
+X030178Y018772D01*
+X030208Y018747D01*
+X030236Y018720D01*
+X030261Y018690D01*
+X030283Y018658D01*
+X030301Y018624D01*
+X030316Y018588D01*
+X030328Y018551D01*
+X030336Y018513D01*
+X030340Y018474D01*
+X030340Y018436D01*
+X030336Y018397D01*
+X030328Y018359D01*
+X030316Y018322D01*
+X030301Y018286D01*
+X030283Y018252D01*
+X030261Y018220D01*
+X030236Y018190D01*
+X030208Y018163D01*
+X030178Y018138D01*
+X030145Y018117D01*
+X030110Y018100D01*
+X030074Y018085D01*
+X030037Y018075D01*
+X029998Y018068D01*
+X029960Y018065D01*
+X029921Y018066D01*
+X029882Y018071D01*
+X029844Y018080D01*
+X029808Y018092D01*
+X029772Y018108D01*
+X029738Y018127D01*
+X029707Y018150D01*
+X029678Y018176D01*
+X029651Y018204D01*
+X029628Y018235D01*
+X029607Y018268D01*
+X029591Y018304D01*
+X029577Y018340D01*
+X029568Y018378D01*
+X029562Y018416D01*
+X029560Y018455D01*
+X029550Y018055D02*
+X030350Y018855D01*
+X029110Y019405D02*
+X029112Y019444D01*
+X029118Y019482D01*
+X029127Y019520D01*
+X029141Y019556D01*
+X029157Y019592D01*
+X029178Y019625D01*
+X029201Y019656D01*
+X029228Y019684D01*
+X029257Y019710D01*
+X029288Y019733D01*
+X029322Y019752D01*
+X029358Y019768D01*
+X029394Y019780D01*
+X029432Y019789D01*
+X029471Y019794D01*
+X029510Y019795D01*
+X029548Y019792D01*
+X029587Y019785D01*
+X029624Y019775D01*
+X029660Y019760D01*
+X029695Y019743D01*
+X029728Y019722D01*
+X029758Y019697D01*
+X029786Y019670D01*
+X029811Y019640D01*
+X029833Y019608D01*
+X029851Y019574D01*
+X029866Y019538D01*
+X029878Y019501D01*
+X029886Y019463D01*
+X029890Y019424D01*
+X029890Y019386D01*
+X029886Y019347D01*
+X029878Y019309D01*
+X029866Y019272D01*
+X029851Y019236D01*
+X029833Y019202D01*
+X029811Y019170D01*
+X029786Y019140D01*
+X029758Y019113D01*
+X029728Y019088D01*
+X029695Y019067D01*
+X029660Y019050D01*
+X029624Y019035D01*
+X029587Y019025D01*
+X029548Y019018D01*
+X029510Y019015D01*
+X029471Y019016D01*
+X029432Y019021D01*
+X029394Y019030D01*
+X029358Y019042D01*
+X029322Y019058D01*
+X029288Y019077D01*
+X029257Y019100D01*
+X029228Y019126D01*
+X029201Y019154D01*
+X029178Y019185D01*
+X029157Y019218D01*
+X029141Y019254D01*
+X029127Y019290D01*
+X029118Y019328D01*
+X029112Y019366D01*
+X029110Y019405D01*
+X029100Y019005D02*
+X029900Y019805D01*
+X028560Y018455D02*
+X028562Y018494D01*
+X028568Y018532D01*
+X028577Y018570D01*
+X028591Y018606D01*
+X028607Y018642D01*
+X028628Y018675D01*
+X028651Y018706D01*
+X028678Y018734D01*
+X028707Y018760D01*
+X028738Y018783D01*
+X028772Y018802D01*
+X028808Y018818D01*
+X028844Y018830D01*
+X028882Y018839D01*
+X028921Y018844D01*
+X028960Y018845D01*
+X028998Y018842D01*
+X029037Y018835D01*
+X029074Y018825D01*
+X029110Y018810D01*
+X029145Y018793D01*
+X029178Y018772D01*
+X029208Y018747D01*
+X029236Y018720D01*
+X029261Y018690D01*
+X029283Y018658D01*
+X029301Y018624D01*
+X029316Y018588D01*
+X029328Y018551D01*
+X029336Y018513D01*
+X029340Y018474D01*
+X029340Y018436D01*
+X029336Y018397D01*
+X029328Y018359D01*
+X029316Y018322D01*
+X029301Y018286D01*
+X029283Y018252D01*
+X029261Y018220D01*
+X029236Y018190D01*
+X029208Y018163D01*
+X029178Y018138D01*
+X029145Y018117D01*
+X029110Y018100D01*
+X029074Y018085D01*
+X029037Y018075D01*
+X028998Y018068D01*
+X028960Y018065D01*
+X028921Y018066D01*
+X028882Y018071D01*
+X028844Y018080D01*
+X028808Y018092D01*
+X028772Y018108D01*
+X028738Y018127D01*
+X028707Y018150D01*
+X028678Y018176D01*
+X028651Y018204D01*
+X028628Y018235D01*
+X028607Y018268D01*
+X028591Y018304D01*
+X028577Y018340D01*
+X028568Y018378D01*
+X028562Y018416D01*
+X028560Y018455D01*
+X028550Y018055D02*
+X029350Y018855D01*
+X027560Y018455D02*
+X027562Y018494D01*
+X027568Y018532D01*
+X027577Y018570D01*
+X027591Y018606D01*
+X027607Y018642D01*
+X027628Y018675D01*
+X027651Y018706D01*
+X027678Y018734D01*
+X027707Y018760D01*
+X027738Y018783D01*
+X027772Y018802D01*
+X027808Y018818D01*
+X027844Y018830D01*
+X027882Y018839D01*
+X027921Y018844D01*
+X027960Y018845D01*
+X027998Y018842D01*
+X028037Y018835D01*
+X028074Y018825D01*
+X028110Y018810D01*
+X028145Y018793D01*
+X028178Y018772D01*
+X028208Y018747D01*
+X028236Y018720D01*
+X028261Y018690D01*
+X028283Y018658D01*
+X028301Y018624D01*
+X028316Y018588D01*
+X028328Y018551D01*
+X028336Y018513D01*
+X028340Y018474D01*
+X028340Y018436D01*
+X028336Y018397D01*
+X028328Y018359D01*
+X028316Y018322D01*
+X028301Y018286D01*
+X028283Y018252D01*
+X028261Y018220D01*
+X028236Y018190D01*
+X028208Y018163D01*
+X028178Y018138D01*
+X028145Y018117D01*
+X028110Y018100D01*
+X028074Y018085D01*
+X028037Y018075D01*
+X027998Y018068D01*
+X027960Y018065D01*
+X027921Y018066D01*
+X027882Y018071D01*
+X027844Y018080D01*
+X027808Y018092D01*
+X027772Y018108D01*
+X027738Y018127D01*
+X027707Y018150D01*
+X027678Y018176D01*
+X027651Y018204D01*
+X027628Y018235D01*
+X027607Y018268D01*
+X027591Y018304D01*
+X027577Y018340D01*
+X027568Y018378D01*
+X027562Y018416D01*
+X027560Y018455D01*
+X027550Y018055D02*
+X028350Y018855D01*
+X026560Y018455D02*
+X026562Y018494D01*
+X026568Y018532D01*
+X026577Y018570D01*
+X026591Y018606D01*
+X026607Y018642D01*
+X026628Y018675D01*
+X026651Y018706D01*
+X026678Y018734D01*
+X026707Y018760D01*
+X026738Y018783D01*
+X026772Y018802D01*
+X026808Y018818D01*
+X026844Y018830D01*
+X026882Y018839D01*
+X026921Y018844D01*
+X026960Y018845D01*
+X026998Y018842D01*
+X027037Y018835D01*
+X027074Y018825D01*
+X027110Y018810D01*
+X027145Y018793D01*
+X027178Y018772D01*
+X027208Y018747D01*
+X027236Y018720D01*
+X027261Y018690D01*
+X027283Y018658D01*
+X027301Y018624D01*
+X027316Y018588D01*
+X027328Y018551D01*
+X027336Y018513D01*
+X027340Y018474D01*
+X027340Y018436D01*
+X027336Y018397D01*
+X027328Y018359D01*
+X027316Y018322D01*
+X027301Y018286D01*
+X027283Y018252D01*
+X027261Y018220D01*
+X027236Y018190D01*
+X027208Y018163D01*
+X027178Y018138D01*
+X027145Y018117D01*
+X027110Y018100D01*
+X027074Y018085D01*
+X027037Y018075D01*
+X026998Y018068D01*
+X026960Y018065D01*
+X026921Y018066D01*
+X026882Y018071D01*
+X026844Y018080D01*
+X026808Y018092D01*
+X026772Y018108D01*
+X026738Y018127D01*
+X026707Y018150D01*
+X026678Y018176D01*
+X026651Y018204D01*
+X026628Y018235D01*
+X026607Y018268D01*
+X026591Y018304D01*
+X026577Y018340D01*
+X026568Y018378D01*
+X026562Y018416D01*
+X026560Y018455D01*
+X026550Y018055D02*
+X027350Y018855D01*
+X025560Y018455D02*
+X025562Y018494D01*
+X025568Y018532D01*
+X025577Y018570D01*
+X025591Y018606D01*
+X025607Y018642D01*
+X025628Y018675D01*
+X025651Y018706D01*
+X025678Y018734D01*
+X025707Y018760D01*
+X025738Y018783D01*
+X025772Y018802D01*
+X025808Y018818D01*
+X025844Y018830D01*
+X025882Y018839D01*
+X025921Y018844D01*
+X025960Y018845D01*
+X025998Y018842D01*
+X026037Y018835D01*
+X026074Y018825D01*
+X026110Y018810D01*
+X026145Y018793D01*
+X026178Y018772D01*
+X026208Y018747D01*
+X026236Y018720D01*
+X026261Y018690D01*
+X026283Y018658D01*
+X026301Y018624D01*
+X026316Y018588D01*
+X026328Y018551D01*
+X026336Y018513D01*
+X026340Y018474D01*
+X026340Y018436D01*
+X026336Y018397D01*
+X026328Y018359D01*
+X026316Y018322D01*
+X026301Y018286D01*
+X026283Y018252D01*
+X026261Y018220D01*
+X026236Y018190D01*
+X026208Y018163D01*
+X026178Y018138D01*
+X026145Y018117D01*
+X026110Y018100D01*
+X026074Y018085D01*
+X026037Y018075D01*
+X025998Y018068D01*
+X025960Y018065D01*
+X025921Y018066D01*
+X025882Y018071D01*
+X025844Y018080D01*
+X025808Y018092D01*
+X025772Y018108D01*
+X025738Y018127D01*
+X025707Y018150D01*
+X025678Y018176D01*
+X025651Y018204D01*
+X025628Y018235D01*
+X025607Y018268D01*
+X025591Y018304D01*
+X025577Y018340D01*
+X025568Y018378D01*
+X025562Y018416D01*
+X025560Y018455D01*
+X025550Y018055D02*
+X026350Y018855D01*
+X024560Y018455D02*
+X024562Y018494D01*
+X024568Y018532D01*
+X024577Y018570D01*
+X024591Y018606D01*
+X024607Y018642D01*
+X024628Y018675D01*
+X024651Y018706D01*
+X024678Y018734D01*
+X024707Y018760D01*
+X024738Y018783D01*
+X024772Y018802D01*
+X024808Y018818D01*
+X024844Y018830D01*
+X024882Y018839D01*
+X024921Y018844D01*
+X024960Y018845D01*
+X024998Y018842D01*
+X025037Y018835D01*
+X025074Y018825D01*
+X025110Y018810D01*
+X025145Y018793D01*
+X025178Y018772D01*
+X025208Y018747D01*
+X025236Y018720D01*
+X025261Y018690D01*
+X025283Y018658D01*
+X025301Y018624D01*
+X025316Y018588D01*
+X025328Y018551D01*
+X025336Y018513D01*
+X025340Y018474D01*
+X025340Y018436D01*
+X025336Y018397D01*
+X025328Y018359D01*
+X025316Y018322D01*
+X025301Y018286D01*
+X025283Y018252D01*
+X025261Y018220D01*
+X025236Y018190D01*
+X025208Y018163D01*
+X025178Y018138D01*
+X025145Y018117D01*
+X025110Y018100D01*
+X025074Y018085D01*
+X025037Y018075D01*
+X024998Y018068D01*
+X024960Y018065D01*
+X024921Y018066D01*
+X024882Y018071D01*
+X024844Y018080D01*
+X024808Y018092D01*
+X024772Y018108D01*
+X024738Y018127D01*
+X024707Y018150D01*
+X024678Y018176D01*
+X024651Y018204D01*
+X024628Y018235D01*
+X024607Y018268D01*
+X024591Y018304D01*
+X024577Y018340D01*
+X024568Y018378D01*
+X024562Y018416D01*
+X024560Y018455D01*
+X024550Y018055D02*
+X025350Y018855D01*
+X023560Y018455D02*
+X023562Y018494D01*
+X023568Y018532D01*
+X023577Y018570D01*
+X023591Y018606D01*
+X023607Y018642D01*
+X023628Y018675D01*
+X023651Y018706D01*
+X023678Y018734D01*
+X023707Y018760D01*
+X023738Y018783D01*
+X023772Y018802D01*
+X023808Y018818D01*
+X023844Y018830D01*
+X023882Y018839D01*
+X023921Y018844D01*
+X023960Y018845D01*
+X023998Y018842D01*
+X024037Y018835D01*
+X024074Y018825D01*
+X024110Y018810D01*
+X024145Y018793D01*
+X024178Y018772D01*
+X024208Y018747D01*
+X024236Y018720D01*
+X024261Y018690D01*
+X024283Y018658D01*
+X024301Y018624D01*
+X024316Y018588D01*
+X024328Y018551D01*
+X024336Y018513D01*
+X024340Y018474D01*
+X024340Y018436D01*
+X024336Y018397D01*
+X024328Y018359D01*
+X024316Y018322D01*
+X024301Y018286D01*
+X024283Y018252D01*
+X024261Y018220D01*
+X024236Y018190D01*
+X024208Y018163D01*
+X024178Y018138D01*
+X024145Y018117D01*
+X024110Y018100D01*
+X024074Y018085D01*
+X024037Y018075D01*
+X023998Y018068D01*
+X023960Y018065D01*
+X023921Y018066D01*
+X023882Y018071D01*
+X023844Y018080D01*
+X023808Y018092D01*
+X023772Y018108D01*
+X023738Y018127D01*
+X023707Y018150D01*
+X023678Y018176D01*
+X023651Y018204D01*
+X023628Y018235D01*
+X023607Y018268D01*
+X023591Y018304D01*
+X023577Y018340D01*
+X023568Y018378D01*
+X023562Y018416D01*
+X023560Y018455D01*
+X023550Y018055D02*
+X024350Y018855D01*
+X022560Y018455D02*
+X022562Y018494D01*
+X022568Y018532D01*
+X022577Y018570D01*
+X022591Y018606D01*
+X022607Y018642D01*
+X022628Y018675D01*
+X022651Y018706D01*
+X022678Y018734D01*
+X022707Y018760D01*
+X022738Y018783D01*
+X022772Y018802D01*
+X022808Y018818D01*
+X022844Y018830D01*
+X022882Y018839D01*
+X022921Y018844D01*
+X022960Y018845D01*
+X022998Y018842D01*
+X023037Y018835D01*
+X023074Y018825D01*
+X023110Y018810D01*
+X023145Y018793D01*
+X023178Y018772D01*
+X023208Y018747D01*
+X023236Y018720D01*
+X023261Y018690D01*
+X023283Y018658D01*
+X023301Y018624D01*
+X023316Y018588D01*
+X023328Y018551D01*
+X023336Y018513D01*
+X023340Y018474D01*
+X023340Y018436D01*
+X023336Y018397D01*
+X023328Y018359D01*
+X023316Y018322D01*
+X023301Y018286D01*
+X023283Y018252D01*
+X023261Y018220D01*
+X023236Y018190D01*
+X023208Y018163D01*
+X023178Y018138D01*
+X023145Y018117D01*
+X023110Y018100D01*
+X023074Y018085D01*
+X023037Y018075D01*
+X022998Y018068D01*
+X022960Y018065D01*
+X022921Y018066D01*
+X022882Y018071D01*
+X022844Y018080D01*
+X022808Y018092D01*
+X022772Y018108D01*
+X022738Y018127D01*
+X022707Y018150D01*
+X022678Y018176D01*
+X022651Y018204D01*
+X022628Y018235D01*
+X022607Y018268D01*
+X022591Y018304D01*
+X022577Y018340D01*
+X022568Y018378D01*
+X022562Y018416D01*
+X022560Y018455D01*
+X022550Y018055D02*
+X023350Y018855D01*
+X022560Y019255D02*
+X022562Y019294D01*
+X022568Y019332D01*
+X022577Y019370D01*
+X022591Y019406D01*
+X022607Y019442D01*
+X022628Y019475D01*
+X022651Y019506D01*
+X022678Y019534D01*
+X022707Y019560D01*
+X022738Y019583D01*
+X022772Y019602D01*
+X022808Y019618D01*
+X022844Y019630D01*
+X022882Y019639D01*
+X022921Y019644D01*
+X022960Y019645D01*
+X022998Y019642D01*
+X023037Y019635D01*
+X023074Y019625D01*
+X023110Y019610D01*
+X023145Y019593D01*
+X023178Y019572D01*
+X023208Y019547D01*
+X023236Y019520D01*
+X023261Y019490D01*
+X023283Y019458D01*
+X023301Y019424D01*
+X023316Y019388D01*
+X023328Y019351D01*
+X023336Y019313D01*
+X023340Y019274D01*
+X023340Y019236D01*
+X023336Y019197D01*
+X023328Y019159D01*
+X023316Y019122D01*
+X023301Y019086D01*
+X023283Y019052D01*
+X023261Y019020D01*
+X023236Y018990D01*
+X023208Y018963D01*
+X023178Y018938D01*
+X023145Y018917D01*
+X023110Y018900D01*
+X023074Y018885D01*
+X023037Y018875D01*
+X022998Y018868D01*
+X022960Y018865D01*
+X022921Y018866D01*
+X022882Y018871D01*
+X022844Y018880D01*
+X022808Y018892D01*
+X022772Y018908D01*
+X022738Y018927D01*
+X022707Y018950D01*
+X022678Y018976D01*
+X022651Y019004D01*
+X022628Y019035D01*
+X022607Y019068D01*
+X022591Y019104D01*
+X022577Y019140D01*
+X022568Y019178D01*
+X022562Y019216D01*
+X022560Y019255D01*
+X022550Y018855D02*
+X023350Y019655D01*
+X021560Y018455D02*
+X021562Y018494D01*
+X021568Y018532D01*
+X021577Y018570D01*
+X021591Y018606D01*
+X021607Y018642D01*
+X021628Y018675D01*
+X021651Y018706D01*
+X021678Y018734D01*
+X021707Y018760D01*
+X021738Y018783D01*
+X021772Y018802D01*
+X021808Y018818D01*
+X021844Y018830D01*
+X021882Y018839D01*
+X021921Y018844D01*
+X021960Y018845D01*
+X021998Y018842D01*
+X022037Y018835D01*
+X022074Y018825D01*
+X022110Y018810D01*
+X022145Y018793D01*
+X022178Y018772D01*
+X022208Y018747D01*
+X022236Y018720D01*
+X022261Y018690D01*
+X022283Y018658D01*
+X022301Y018624D01*
+X022316Y018588D01*
+X022328Y018551D01*
+X022336Y018513D01*
+X022340Y018474D01*
+X022340Y018436D01*
+X022336Y018397D01*
+X022328Y018359D01*
+X022316Y018322D01*
+X022301Y018286D01*
+X022283Y018252D01*
+X022261Y018220D01*
+X022236Y018190D01*
+X022208Y018163D01*
+X022178Y018138D01*
+X022145Y018117D01*
+X022110Y018100D01*
+X022074Y018085D01*
+X022037Y018075D01*
+X021998Y018068D01*
+X021960Y018065D01*
+X021921Y018066D01*
+X021882Y018071D01*
+X021844Y018080D01*
+X021808Y018092D01*
+X021772Y018108D01*
+X021738Y018127D01*
+X021707Y018150D01*
+X021678Y018176D01*
+X021651Y018204D01*
+X021628Y018235D01*
+X021607Y018268D01*
+X021591Y018304D01*
+X021577Y018340D01*
+X021568Y018378D01*
+X021562Y018416D01*
+X021560Y018455D01*
+X021550Y018055D02*
+X022350Y018855D01*
+X020560Y018455D02*
+X020562Y018494D01*
+X020568Y018532D01*
+X020577Y018570D01*
+X020591Y018606D01*
+X020607Y018642D01*
+X020628Y018675D01*
+X020651Y018706D01*
+X020678Y018734D01*
+X020707Y018760D01*
+X020738Y018783D01*
+X020772Y018802D01*
+X020808Y018818D01*
+X020844Y018830D01*
+X020882Y018839D01*
+X020921Y018844D01*
+X020960Y018845D01*
+X020998Y018842D01*
+X021037Y018835D01*
+X021074Y018825D01*
+X021110Y018810D01*
+X021145Y018793D01*
+X021178Y018772D01*
+X021208Y018747D01*
+X021236Y018720D01*
+X021261Y018690D01*
+X021283Y018658D01*
+X021301Y018624D01*
+X021316Y018588D01*
+X021328Y018551D01*
+X021336Y018513D01*
+X021340Y018474D01*
+X021340Y018436D01*
+X021336Y018397D01*
+X021328Y018359D01*
+X021316Y018322D01*
+X021301Y018286D01*
+X021283Y018252D01*
+X021261Y018220D01*
+X021236Y018190D01*
+X021208Y018163D01*
+X021178Y018138D01*
+X021145Y018117D01*
+X021110Y018100D01*
+X021074Y018085D01*
+X021037Y018075D01*
+X020998Y018068D01*
+X020960Y018065D01*
+X020921Y018066D01*
+X020882Y018071D01*
+X020844Y018080D01*
+X020808Y018092D01*
+X020772Y018108D01*
+X020738Y018127D01*
+X020707Y018150D01*
+X020678Y018176D01*
+X020651Y018204D01*
+X020628Y018235D01*
+X020607Y018268D01*
+X020591Y018304D01*
+X020577Y018340D01*
+X020568Y018378D01*
+X020562Y018416D01*
+X020560Y018455D01*
+X020550Y018055D02*
+X021350Y018855D01*
+X017010Y018955D02*
+X017012Y018994D01*
+X017018Y019032D01*
+X017027Y019070D01*
+X017041Y019106D01*
+X017057Y019142D01*
+X017078Y019175D01*
+X017101Y019206D01*
+X017128Y019234D01*
+X017157Y019260D01*
+X017188Y019283D01*
+X017222Y019302D01*
+X017258Y019318D01*
+X017294Y019330D01*
+X017332Y019339D01*
+X017371Y019344D01*
+X017410Y019345D01*
+X017448Y019342D01*
+X017487Y019335D01*
+X017524Y019325D01*
+X017560Y019310D01*
+X017595Y019293D01*
+X017628Y019272D01*
+X017658Y019247D01*
+X017686Y019220D01*
+X017711Y019190D01*
+X017733Y019158D01*
+X017751Y019124D01*
+X017766Y019088D01*
+X017778Y019051D01*
+X017786Y019013D01*
+X017790Y018974D01*
+X017790Y018936D01*
+X017786Y018897D01*
+X017778Y018859D01*
+X017766Y018822D01*
+X017751Y018786D01*
+X017733Y018752D01*
+X017711Y018720D01*
+X017686Y018690D01*
+X017658Y018663D01*
+X017628Y018638D01*
+X017595Y018617D01*
+X017560Y018600D01*
+X017524Y018585D01*
+X017487Y018575D01*
+X017448Y018568D01*
+X017410Y018565D01*
+X017371Y018566D01*
+X017332Y018571D01*
+X017294Y018580D01*
+X017258Y018592D01*
+X017222Y018608D01*
+X017188Y018627D01*
+X017157Y018650D01*
+X017128Y018676D01*
+X017101Y018704D01*
+X017078Y018735D01*
+X017057Y018768D01*
+X017041Y018804D01*
+X017027Y018840D01*
+X017018Y018878D01*
+X017012Y018916D01*
+X017010Y018955D01*
+X017000Y018555D02*
+X017800Y019355D01*
+X016010Y018955D02*
+X016012Y018994D01*
+X016018Y019032D01*
+X016027Y019070D01*
+X016041Y019106D01*
+X016057Y019142D01*
+X016078Y019175D01*
+X016101Y019206D01*
+X016128Y019234D01*
+X016157Y019260D01*
+X016188Y019283D01*
+X016222Y019302D01*
+X016258Y019318D01*
+X016294Y019330D01*
+X016332Y019339D01*
+X016371Y019344D01*
+X016410Y019345D01*
+X016448Y019342D01*
+X016487Y019335D01*
+X016524Y019325D01*
+X016560Y019310D01*
+X016595Y019293D01*
+X016628Y019272D01*
+X016658Y019247D01*
+X016686Y019220D01*
+X016711Y019190D01*
+X016733Y019158D01*
+X016751Y019124D01*
+X016766Y019088D01*
+X016778Y019051D01*
+X016786Y019013D01*
+X016790Y018974D01*
+X016790Y018936D01*
+X016786Y018897D01*
+X016778Y018859D01*
+X016766Y018822D01*
+X016751Y018786D01*
+X016733Y018752D01*
+X016711Y018720D01*
+X016686Y018690D01*
+X016658Y018663D01*
+X016628Y018638D01*
+X016595Y018617D01*
+X016560Y018600D01*
+X016524Y018585D01*
+X016487Y018575D01*
+X016448Y018568D01*
+X016410Y018565D01*
+X016371Y018566D01*
+X016332Y018571D01*
+X016294Y018580D01*
+X016258Y018592D01*
+X016222Y018608D01*
+X016188Y018627D01*
+X016157Y018650D01*
+X016128Y018676D01*
+X016101Y018704D01*
+X016078Y018735D01*
+X016057Y018768D01*
+X016041Y018804D01*
+X016027Y018840D01*
+X016018Y018878D01*
+X016012Y018916D01*
+X016010Y018955D01*
+X016000Y018555D02*
+X016800Y019355D01*
+X015560Y019755D02*
+X015562Y019794D01*
+X015568Y019832D01*
+X015577Y019870D01*
+X015591Y019906D01*
+X015607Y019942D01*
+X015628Y019975D01*
+X015651Y020006D01*
+X015678Y020034D01*
+X015707Y020060D01*
+X015738Y020083D01*
+X015772Y020102D01*
+X015808Y020118D01*
+X015844Y020130D01*
+X015882Y020139D01*
+X015921Y020144D01*
+X015960Y020145D01*
+X015998Y020142D01*
+X016037Y020135D01*
+X016074Y020125D01*
+X016110Y020110D01*
+X016145Y020093D01*
+X016178Y020072D01*
+X016208Y020047D01*
+X016236Y020020D01*
+X016261Y019990D01*
+X016283Y019958D01*
+X016301Y019924D01*
+X016316Y019888D01*
+X016328Y019851D01*
+X016336Y019813D01*
+X016340Y019774D01*
+X016340Y019736D01*
+X016336Y019697D01*
+X016328Y019659D01*
+X016316Y019622D01*
+X016301Y019586D01*
+X016283Y019552D01*
+X016261Y019520D01*
+X016236Y019490D01*
+X016208Y019463D01*
+X016178Y019438D01*
+X016145Y019417D01*
+X016110Y019400D01*
+X016074Y019385D01*
+X016037Y019375D01*
+X015998Y019368D01*
+X015960Y019365D01*
+X015921Y019366D01*
+X015882Y019371D01*
+X015844Y019380D01*
+X015808Y019392D01*
+X015772Y019408D01*
+X015738Y019427D01*
+X015707Y019450D01*
+X015678Y019476D01*
+X015651Y019504D01*
+X015628Y019535D01*
+X015607Y019568D01*
+X015591Y019604D01*
+X015577Y019640D01*
+X015568Y019678D01*
+X015562Y019716D01*
+X015560Y019755D01*
+X015550Y019355D02*
+X016350Y020155D01*
+X015010Y018955D02*
+X015012Y018994D01*
+X015018Y019032D01*
+X015027Y019070D01*
+X015041Y019106D01*
+X015057Y019142D01*
+X015078Y019175D01*
+X015101Y019206D01*
+X015128Y019234D01*
+X015157Y019260D01*
+X015188Y019283D01*
+X015222Y019302D01*
+X015258Y019318D01*
+X015294Y019330D01*
+X015332Y019339D01*
+X015371Y019344D01*
+X015410Y019345D01*
+X015448Y019342D01*
+X015487Y019335D01*
+X015524Y019325D01*
+X015560Y019310D01*
+X015595Y019293D01*
+X015628Y019272D01*
+X015658Y019247D01*
+X015686Y019220D01*
+X015711Y019190D01*
+X015733Y019158D01*
+X015751Y019124D01*
+X015766Y019088D01*
+X015778Y019051D01*
+X015786Y019013D01*
+X015790Y018974D01*
+X015790Y018936D01*
+X015786Y018897D01*
+X015778Y018859D01*
+X015766Y018822D01*
+X015751Y018786D01*
+X015733Y018752D01*
+X015711Y018720D01*
+X015686Y018690D01*
+X015658Y018663D01*
+X015628Y018638D01*
+X015595Y018617D01*
+X015560Y018600D01*
+X015524Y018585D01*
+X015487Y018575D01*
+X015448Y018568D01*
+X015410Y018565D01*
+X015371Y018566D01*
+X015332Y018571D01*
+X015294Y018580D01*
+X015258Y018592D01*
+X015222Y018608D01*
+X015188Y018627D01*
+X015157Y018650D01*
+X015128Y018676D01*
+X015101Y018704D01*
+X015078Y018735D01*
+X015057Y018768D01*
+X015041Y018804D01*
+X015027Y018840D01*
+X015018Y018878D01*
+X015012Y018916D01*
+X015010Y018955D01*
+X015000Y018555D02*
+X015800Y019355D01*
+X014010Y018955D02*
+X014012Y018994D01*
+X014018Y019032D01*
+X014027Y019070D01*
+X014041Y019106D01*
+X014057Y019142D01*
+X014078Y019175D01*
+X014101Y019206D01*
+X014128Y019234D01*
+X014157Y019260D01*
+X014188Y019283D01*
+X014222Y019302D01*
+X014258Y019318D01*
+X014294Y019330D01*
+X014332Y019339D01*
+X014371Y019344D01*
+X014410Y019345D01*
+X014448Y019342D01*
+X014487Y019335D01*
+X014524Y019325D01*
+X014560Y019310D01*
+X014595Y019293D01*
+X014628Y019272D01*
+X014658Y019247D01*
+X014686Y019220D01*
+X014711Y019190D01*
+X014733Y019158D01*
+X014751Y019124D01*
+X014766Y019088D01*
+X014778Y019051D01*
+X014786Y019013D01*
+X014790Y018974D01*
+X014790Y018936D01*
+X014786Y018897D01*
+X014778Y018859D01*
+X014766Y018822D01*
+X014751Y018786D01*
+X014733Y018752D01*
+X014711Y018720D01*
+X014686Y018690D01*
+X014658Y018663D01*
+X014628Y018638D01*
+X014595Y018617D01*
+X014560Y018600D01*
+X014524Y018585D01*
+X014487Y018575D01*
+X014448Y018568D01*
+X014410Y018565D01*
+X014371Y018566D01*
+X014332Y018571D01*
+X014294Y018580D01*
+X014258Y018592D01*
+X014222Y018608D01*
+X014188Y018627D01*
+X014157Y018650D01*
+X014128Y018676D01*
+X014101Y018704D01*
+X014078Y018735D01*
+X014057Y018768D01*
+X014041Y018804D01*
+X014027Y018840D01*
+X014018Y018878D01*
+X014012Y018916D01*
+X014010Y018955D01*
+X014000Y018555D02*
+X014800Y019355D01*
+X013010Y018955D02*
+X013012Y018994D01*
+X013018Y019032D01*
+X013027Y019070D01*
+X013041Y019106D01*
+X013057Y019142D01*
+X013078Y019175D01*
+X013101Y019206D01*
+X013128Y019234D01*
+X013157Y019260D01*
+X013188Y019283D01*
+X013222Y019302D01*
+X013258Y019318D01*
+X013294Y019330D01*
+X013332Y019339D01*
+X013371Y019344D01*
+X013410Y019345D01*
+X013448Y019342D01*
+X013487Y019335D01*
+X013524Y019325D01*
+X013560Y019310D01*
+X013595Y019293D01*
+X013628Y019272D01*
+X013658Y019247D01*
+X013686Y019220D01*
+X013711Y019190D01*
+X013733Y019158D01*
+X013751Y019124D01*
+X013766Y019088D01*
+X013778Y019051D01*
+X013786Y019013D01*
+X013790Y018974D01*
+X013790Y018936D01*
+X013786Y018897D01*
+X013778Y018859D01*
+X013766Y018822D01*
+X013751Y018786D01*
+X013733Y018752D01*
+X013711Y018720D01*
+X013686Y018690D01*
+X013658Y018663D01*
+X013628Y018638D01*
+X013595Y018617D01*
+X013560Y018600D01*
+X013524Y018585D01*
+X013487Y018575D01*
+X013448Y018568D01*
+X013410Y018565D01*
+X013371Y018566D01*
+X013332Y018571D01*
+X013294Y018580D01*
+X013258Y018592D01*
+X013222Y018608D01*
+X013188Y018627D01*
+X013157Y018650D01*
+X013128Y018676D01*
+X013101Y018704D01*
+X013078Y018735D01*
+X013057Y018768D01*
+X013041Y018804D01*
+X013027Y018840D01*
+X013018Y018878D01*
+X013012Y018916D01*
+X013010Y018955D01*
+X013000Y018555D02*
+X013800Y019355D01*
+X012010Y018955D02*
+X012012Y018994D01*
+X012018Y019032D01*
+X012027Y019070D01*
+X012041Y019106D01*
+X012057Y019142D01*
+X012078Y019175D01*
+X012101Y019206D01*
+X012128Y019234D01*
+X012157Y019260D01*
+X012188Y019283D01*
+X012222Y019302D01*
+X012258Y019318D01*
+X012294Y019330D01*
+X012332Y019339D01*
+X012371Y019344D01*
+X012410Y019345D01*
+X012448Y019342D01*
+X012487Y019335D01*
+X012524Y019325D01*
+X012560Y019310D01*
+X012595Y019293D01*
+X012628Y019272D01*
+X012658Y019247D01*
+X012686Y019220D01*
+X012711Y019190D01*
+X012733Y019158D01*
+X012751Y019124D01*
+X012766Y019088D01*
+X012778Y019051D01*
+X012786Y019013D01*
+X012790Y018974D01*
+X012790Y018936D01*
+X012786Y018897D01*
+X012778Y018859D01*
+X012766Y018822D01*
+X012751Y018786D01*
+X012733Y018752D01*
+X012711Y018720D01*
+X012686Y018690D01*
+X012658Y018663D01*
+X012628Y018638D01*
+X012595Y018617D01*
+X012560Y018600D01*
+X012524Y018585D01*
+X012487Y018575D01*
+X012448Y018568D01*
+X012410Y018565D01*
+X012371Y018566D01*
+X012332Y018571D01*
+X012294Y018580D01*
+X012258Y018592D01*
+X012222Y018608D01*
+X012188Y018627D01*
+X012157Y018650D01*
+X012128Y018676D01*
+X012101Y018704D01*
+X012078Y018735D01*
+X012057Y018768D01*
+X012041Y018804D01*
+X012027Y018840D01*
+X012018Y018878D01*
+X012012Y018916D01*
+X012010Y018955D01*
+X012000Y018555D02*
+X012800Y019355D01*
+X010760Y019455D02*
+X010762Y019494D01*
+X010768Y019532D01*
+X010777Y019570D01*
+X010791Y019606D01*
+X010807Y019642D01*
+X010828Y019675D01*
+X010851Y019706D01*
+X010878Y019734D01*
+X010907Y019760D01*
+X010938Y019783D01*
+X010972Y019802D01*
+X011008Y019818D01*
+X011044Y019830D01*
+X011082Y019839D01*
+X011121Y019844D01*
+X011160Y019845D01*
+X011198Y019842D01*
+X011237Y019835D01*
+X011274Y019825D01*
+X011310Y019810D01*
+X011345Y019793D01*
+X011378Y019772D01*
+X011408Y019747D01*
+X011436Y019720D01*
+X011461Y019690D01*
+X011483Y019658D01*
+X011501Y019624D01*
+X011516Y019588D01*
+X011528Y019551D01*
+X011536Y019513D01*
+X011540Y019474D01*
+X011540Y019436D01*
+X011536Y019397D01*
+X011528Y019359D01*
+X011516Y019322D01*
+X011501Y019286D01*
+X011483Y019252D01*
+X011461Y019220D01*
+X011436Y019190D01*
+X011408Y019163D01*
+X011378Y019138D01*
+X011345Y019117D01*
+X011310Y019100D01*
+X011274Y019085D01*
+X011237Y019075D01*
+X011198Y019068D01*
+X011160Y019065D01*
+X011121Y019066D01*
+X011082Y019071D01*
+X011044Y019080D01*
+X011008Y019092D01*
+X010972Y019108D01*
+X010938Y019127D01*
+X010907Y019150D01*
+X010878Y019176D01*
+X010851Y019204D01*
+X010828Y019235D01*
+X010807Y019268D01*
+X010791Y019304D01*
+X010777Y019340D01*
+X010768Y019378D01*
+X010762Y019416D01*
+X010760Y019455D01*
+X010750Y019055D02*
+X011550Y019855D01*
+X010810Y019805D02*
+X010812Y019844D01*
+X010818Y019882D01*
+X010827Y019920D01*
+X010841Y019956D01*
+X010857Y019992D01*
+X010878Y020025D01*
+X010901Y020056D01*
+X010928Y020084D01*
+X010957Y020110D01*
+X010988Y020133D01*
+X011022Y020152D01*
+X011058Y020168D01*
+X011094Y020180D01*
+X011132Y020189D01*
+X011171Y020194D01*
+X011210Y020195D01*
+X011248Y020192D01*
+X011287Y020185D01*
+X011324Y020175D01*
+X011360Y020160D01*
+X011395Y020143D01*
+X011428Y020122D01*
+X011458Y020097D01*
+X011486Y020070D01*
+X011511Y020040D01*
+X011533Y020008D01*
+X011551Y019974D01*
+X011566Y019938D01*
+X011578Y019901D01*
+X011586Y019863D01*
+X011590Y019824D01*
+X011590Y019786D01*
+X011586Y019747D01*
+X011578Y019709D01*
+X011566Y019672D01*
+X011551Y019636D01*
+X011533Y019602D01*
+X011511Y019570D01*
+X011486Y019540D01*
+X011458Y019513D01*
+X011428Y019488D01*
+X011395Y019467D01*
+X011360Y019450D01*
+X011324Y019435D01*
+X011287Y019425D01*
+X011248Y019418D01*
+X011210Y019415D01*
+X011171Y019416D01*
+X011132Y019421D01*
+X011094Y019430D01*
+X011058Y019442D01*
+X011022Y019458D01*
+X010988Y019477D01*
+X010957Y019500D01*
+X010928Y019526D01*
+X010901Y019554D01*
+X010878Y019585D01*
+X010857Y019618D01*
+X010841Y019654D01*
+X010827Y019690D01*
+X010818Y019728D01*
+X010812Y019766D01*
+X010810Y019805D01*
+X010800Y019405D02*
+X011600Y020205D01*
+X010160Y019455D02*
+X010162Y019494D01*
+X010168Y019532D01*
+X010177Y019570D01*
+X010191Y019606D01*
+X010207Y019642D01*
+X010228Y019675D01*
+X010251Y019706D01*
+X010278Y019734D01*
+X010307Y019760D01*
+X010338Y019783D01*
+X010372Y019802D01*
+X010408Y019818D01*
+X010444Y019830D01*
+X010482Y019839D01*
+X010521Y019844D01*
+X010560Y019845D01*
+X010598Y019842D01*
+X010637Y019835D01*
+X010674Y019825D01*
+X010710Y019810D01*
+X010745Y019793D01*
+X010778Y019772D01*
+X010808Y019747D01*
+X010836Y019720D01*
+X010861Y019690D01*
+X010883Y019658D01*
+X010901Y019624D01*
+X010916Y019588D01*
+X010928Y019551D01*
+X010936Y019513D01*
+X010940Y019474D01*
+X010940Y019436D01*
+X010936Y019397D01*
+X010928Y019359D01*
+X010916Y019322D01*
+X010901Y019286D01*
+X010883Y019252D01*
+X010861Y019220D01*
+X010836Y019190D01*
+X010808Y019163D01*
+X010778Y019138D01*
+X010745Y019117D01*
+X010710Y019100D01*
+X010674Y019085D01*
+X010637Y019075D01*
+X010598Y019068D01*
+X010560Y019065D01*
+X010521Y019066D01*
+X010482Y019071D01*
+X010444Y019080D01*
+X010408Y019092D01*
+X010372Y019108D01*
+X010338Y019127D01*
+X010307Y019150D01*
+X010278Y019176D01*
+X010251Y019204D01*
+X010228Y019235D01*
+X010207Y019268D01*
+X010191Y019304D01*
+X010177Y019340D01*
+X010168Y019378D01*
+X010162Y019416D01*
+X010160Y019455D01*
+X010150Y019055D02*
+X010950Y019855D01*
+X008510Y019455D02*
+X008512Y019494D01*
+X008518Y019532D01*
+X008527Y019570D01*
+X008541Y019606D01*
+X008557Y019642D01*
+X008578Y019675D01*
+X008601Y019706D01*
+X008628Y019734D01*
+X008657Y019760D01*
+X008688Y019783D01*
+X008722Y019802D01*
+X008758Y019818D01*
+X008794Y019830D01*
+X008832Y019839D01*
+X008871Y019844D01*
+X008910Y019845D01*
+X008948Y019842D01*
+X008987Y019835D01*
+X009024Y019825D01*
+X009060Y019810D01*
+X009095Y019793D01*
+X009128Y019772D01*
+X009158Y019747D01*
+X009186Y019720D01*
+X009211Y019690D01*
+X009233Y019658D01*
+X009251Y019624D01*
+X009266Y019588D01*
+X009278Y019551D01*
+X009286Y019513D01*
+X009290Y019474D01*
+X009290Y019436D01*
+X009286Y019397D01*
+X009278Y019359D01*
+X009266Y019322D01*
+X009251Y019286D01*
+X009233Y019252D01*
+X009211Y019220D01*
+X009186Y019190D01*
+X009158Y019163D01*
+X009128Y019138D01*
+X009095Y019117D01*
+X009060Y019100D01*
+X009024Y019085D01*
+X008987Y019075D01*
+X008948Y019068D01*
+X008910Y019065D01*
+X008871Y019066D01*
+X008832Y019071D01*
+X008794Y019080D01*
+X008758Y019092D01*
+X008722Y019108D01*
+X008688Y019127D01*
+X008657Y019150D01*
+X008628Y019176D01*
+X008601Y019204D01*
+X008578Y019235D01*
+X008557Y019268D01*
+X008541Y019304D01*
+X008527Y019340D01*
+X008518Y019378D01*
+X008512Y019416D01*
+X008510Y019455D01*
+X008500Y019055D02*
+X009300Y019855D01*
+X007010Y018605D02*
+X007012Y018644D01*
+X007018Y018682D01*
+X007027Y018720D01*
+X007041Y018756D01*
+X007057Y018792D01*
+X007078Y018825D01*
+X007101Y018856D01*
+X007128Y018884D01*
+X007157Y018910D01*
+X007188Y018933D01*
+X007222Y018952D01*
+X007258Y018968D01*
+X007294Y018980D01*
+X007332Y018989D01*
+X007371Y018994D01*
+X007410Y018995D01*
+X007448Y018992D01*
+X007487Y018985D01*
+X007524Y018975D01*
+X007560Y018960D01*
+X007595Y018943D01*
+X007628Y018922D01*
+X007658Y018897D01*
+X007686Y018870D01*
+X007711Y018840D01*
+X007733Y018808D01*
+X007751Y018774D01*
+X007766Y018738D01*
+X007778Y018701D01*
+X007786Y018663D01*
+X007790Y018624D01*
+X007790Y018586D01*
+X007786Y018547D01*
+X007778Y018509D01*
+X007766Y018472D01*
+X007751Y018436D01*
+X007733Y018402D01*
+X007711Y018370D01*
+X007686Y018340D01*
+X007658Y018313D01*
+X007628Y018288D01*
+X007595Y018267D01*
+X007560Y018250D01*
+X007524Y018235D01*
+X007487Y018225D01*
+X007448Y018218D01*
+X007410Y018215D01*
+X007371Y018216D01*
+X007332Y018221D01*
+X007294Y018230D01*
+X007258Y018242D01*
+X007222Y018258D01*
+X007188Y018277D01*
+X007157Y018300D01*
+X007128Y018326D01*
+X007101Y018354D01*
+X007078Y018385D01*
+X007057Y018418D01*
+X007041Y018454D01*
+X007027Y018490D01*
+X007018Y018528D01*
+X007012Y018566D01*
+X007010Y018605D01*
+X007000Y018205D02*
+X007800Y019005D01*
+X006510Y018455D02*
+X006512Y018494D01*
+X006518Y018532D01*
+X006527Y018570D01*
+X006541Y018606D01*
+X006557Y018642D01*
+X006578Y018675D01*
+X006601Y018706D01*
+X006628Y018734D01*
+X006657Y018760D01*
+X006688Y018783D01*
+X006722Y018802D01*
+X006758Y018818D01*
+X006794Y018830D01*
+X006832Y018839D01*
+X006871Y018844D01*
+X006910Y018845D01*
+X006948Y018842D01*
+X006987Y018835D01*
+X007024Y018825D01*
+X007060Y018810D01*
+X007095Y018793D01*
+X007128Y018772D01*
+X007158Y018747D01*
+X007186Y018720D01*
+X007211Y018690D01*
+X007233Y018658D01*
+X007251Y018624D01*
+X007266Y018588D01*
+X007278Y018551D01*
+X007286Y018513D01*
+X007290Y018474D01*
+X007290Y018436D01*
+X007286Y018397D01*
+X007278Y018359D01*
+X007266Y018322D01*
+X007251Y018286D01*
+X007233Y018252D01*
+X007211Y018220D01*
+X007186Y018190D01*
+X007158Y018163D01*
+X007128Y018138D01*
+X007095Y018117D01*
+X007060Y018100D01*
+X007024Y018085D01*
+X006987Y018075D01*
+X006948Y018068D01*
+X006910Y018065D01*
+X006871Y018066D01*
+X006832Y018071D01*
+X006794Y018080D01*
+X006758Y018092D01*
+X006722Y018108D01*
+X006688Y018127D01*
+X006657Y018150D01*
+X006628Y018176D01*
+X006601Y018204D01*
+X006578Y018235D01*
+X006557Y018268D01*
+X006541Y018304D01*
+X006527Y018340D01*
+X006518Y018378D01*
+X006512Y018416D01*
+X006510Y018455D01*
+X006500Y018055D02*
+X007300Y018855D01*
+X006710Y018105D02*
+X006712Y018144D01*
+X006718Y018182D01*
+X006727Y018220D01*
+X006741Y018256D01*
+X006757Y018292D01*
+X006778Y018325D01*
+X006801Y018356D01*
+X006828Y018384D01*
+X006857Y018410D01*
+X006888Y018433D01*
+X006922Y018452D01*
+X006958Y018468D01*
+X006994Y018480D01*
+X007032Y018489D01*
+X007071Y018494D01*
+X007110Y018495D01*
+X007148Y018492D01*
+X007187Y018485D01*
+X007224Y018475D01*
+X007260Y018460D01*
+X007295Y018443D01*
+X007328Y018422D01*
+X007358Y018397D01*
+X007386Y018370D01*
+X007411Y018340D01*
+X007433Y018308D01*
+X007451Y018274D01*
+X007466Y018238D01*
+X007478Y018201D01*
+X007486Y018163D01*
+X007490Y018124D01*
+X007490Y018086D01*
+X007486Y018047D01*
+X007478Y018009D01*
+X007466Y017972D01*
+X007451Y017936D01*
+X007433Y017902D01*
+X007411Y017870D01*
+X007386Y017840D01*
+X007358Y017813D01*
+X007328Y017788D01*
+X007295Y017767D01*
+X007260Y017750D01*
+X007224Y017735D01*
+X007187Y017725D01*
+X007148Y017718D01*
+X007110Y017715D01*
+X007071Y017716D01*
+X007032Y017721D01*
+X006994Y017730D01*
+X006958Y017742D01*
+X006922Y017758D01*
+X006888Y017777D01*
+X006857Y017800D01*
+X006828Y017826D01*
+X006801Y017854D01*
+X006778Y017885D01*
+X006757Y017918D01*
+X006741Y017954D01*
+X006727Y017990D01*
+X006718Y018028D01*
+X006712Y018066D01*
+X006710Y018105D01*
+X006700Y017705D02*
+X007500Y018505D01*
+X006210Y017455D02*
+X006212Y017494D01*
+X006218Y017532D01*
+X006227Y017570D01*
+X006241Y017606D01*
+X006257Y017642D01*
+X006278Y017675D01*
+X006301Y017706D01*
+X006328Y017734D01*
+X006357Y017760D01*
+X006388Y017783D01*
+X006422Y017802D01*
+X006458Y017818D01*
+X006494Y017830D01*
+X006532Y017839D01*
+X006571Y017844D01*
+X006610Y017845D01*
+X006648Y017842D01*
+X006687Y017835D01*
+X006724Y017825D01*
+X006760Y017810D01*
+X006795Y017793D01*
+X006828Y017772D01*
+X006858Y017747D01*
+X006886Y017720D01*
+X006911Y017690D01*
+X006933Y017658D01*
+X006951Y017624D01*
+X006966Y017588D01*
+X006978Y017551D01*
+X006986Y017513D01*
+X006990Y017474D01*
+X006990Y017436D01*
+X006986Y017397D01*
+X006978Y017359D01*
+X006966Y017322D01*
+X006951Y017286D01*
+X006933Y017252D01*
+X006911Y017220D01*
+X006886Y017190D01*
+X006858Y017163D01*
+X006828Y017138D01*
+X006795Y017117D01*
+X006760Y017100D01*
+X006724Y017085D01*
+X006687Y017075D01*
+X006648Y017068D01*
+X006610Y017065D01*
+X006571Y017066D01*
+X006532Y017071D01*
+X006494Y017080D01*
+X006458Y017092D01*
+X006422Y017108D01*
+X006388Y017127D01*
+X006357Y017150D01*
+X006328Y017176D01*
+X006301Y017204D01*
+X006278Y017235D01*
+X006257Y017268D01*
+X006241Y017304D01*
+X006227Y017340D01*
+X006218Y017378D01*
+X006212Y017416D01*
+X006210Y017455D01*
+X006200Y017055D02*
+X007000Y017855D01*
+X004610Y017105D02*
+X004612Y017144D01*
+X004618Y017182D01*
+X004627Y017220D01*
+X004641Y017256D01*
+X004657Y017292D01*
+X004678Y017325D01*
+X004701Y017356D01*
+X004728Y017384D01*
+X004757Y017410D01*
+X004788Y017433D01*
+X004822Y017452D01*
+X004858Y017468D01*
+X004894Y017480D01*
+X004932Y017489D01*
+X004971Y017494D01*
+X005010Y017495D01*
+X005048Y017492D01*
+X005087Y017485D01*
+X005124Y017475D01*
+X005160Y017460D01*
+X005195Y017443D01*
+X005228Y017422D01*
+X005258Y017397D01*
+X005286Y017370D01*
+X005311Y017340D01*
+X005333Y017308D01*
+X005351Y017274D01*
+X005366Y017238D01*
+X005378Y017201D01*
+X005386Y017163D01*
+X005390Y017124D01*
+X005390Y017086D01*
+X005386Y017047D01*
+X005378Y017009D01*
+X005366Y016972D01*
+X005351Y016936D01*
+X005333Y016902D01*
+X005311Y016870D01*
+X005286Y016840D01*
+X005258Y016813D01*
+X005228Y016788D01*
+X005195Y016767D01*
+X005160Y016750D01*
+X005124Y016735D01*
+X005087Y016725D01*
+X005048Y016718D01*
+X005010Y016715D01*
+X004971Y016716D01*
+X004932Y016721D01*
+X004894Y016730D01*
+X004858Y016742D01*
+X004822Y016758D01*
+X004788Y016777D01*
+X004757Y016800D01*
+X004728Y016826D01*
+X004701Y016854D01*
+X004678Y016885D01*
+X004657Y016918D01*
+X004641Y016954D01*
+X004627Y016990D01*
+X004618Y017028D01*
+X004612Y017066D01*
+X004610Y017105D01*
+X004600Y016705D02*
+X005400Y017505D01*
+X004160Y017005D02*
+X004162Y017044D01*
+X004168Y017082D01*
+X004177Y017120D01*
+X004191Y017156D01*
+X004207Y017192D01*
+X004228Y017225D01*
+X004251Y017256D01*
+X004278Y017284D01*
+X004307Y017310D01*
+X004338Y017333D01*
+X004372Y017352D01*
+X004408Y017368D01*
+X004444Y017380D01*
+X004482Y017389D01*
+X004521Y017394D01*
+X004560Y017395D01*
+X004598Y017392D01*
+X004637Y017385D01*
+X004674Y017375D01*
+X004710Y017360D01*
+X004745Y017343D01*
+X004778Y017322D01*
+X004808Y017297D01*
+X004836Y017270D01*
+X004861Y017240D01*
+X004883Y017208D01*
+X004901Y017174D01*
+X004916Y017138D01*
+X004928Y017101D01*
+X004936Y017063D01*
+X004940Y017024D01*
+X004940Y016986D01*
+X004936Y016947D01*
+X004928Y016909D01*
+X004916Y016872D01*
+X004901Y016836D01*
+X004883Y016802D01*
+X004861Y016770D01*
+X004836Y016740D01*
+X004808Y016713D01*
+X004778Y016688D01*
+X004745Y016667D01*
+X004710Y016650D01*
+X004674Y016635D01*
+X004637Y016625D01*
+X004598Y016618D01*
+X004560Y016615D01*
+X004521Y016616D01*
+X004482Y016621D01*
+X004444Y016630D01*
+X004408Y016642D01*
+X004372Y016658D01*
+X004338Y016677D01*
+X004307Y016700D01*
+X004278Y016726D01*
+X004251Y016754D01*
+X004228Y016785D01*
+X004207Y016818D01*
+X004191Y016854D01*
+X004177Y016890D01*
+X004168Y016928D01*
+X004162Y016966D01*
+X004160Y017005D01*
+X004150Y016605D02*
+X004950Y017405D01*
+X004060Y016605D02*
+X004062Y016644D01*
+X004068Y016682D01*
+X004077Y016720D01*
+X004091Y016756D01*
+X004107Y016792D01*
+X004128Y016825D01*
+X004151Y016856D01*
+X004178Y016884D01*
+X004207Y016910D01*
+X004238Y016933D01*
+X004272Y016952D01*
+X004308Y016968D01*
+X004344Y016980D01*
+X004382Y016989D01*
+X004421Y016994D01*
+X004460Y016995D01*
+X004498Y016992D01*
+X004537Y016985D01*
+X004574Y016975D01*
+X004610Y016960D01*
+X004645Y016943D01*
+X004678Y016922D01*
+X004708Y016897D01*
+X004736Y016870D01*
+X004761Y016840D01*
+X004783Y016808D01*
+X004801Y016774D01*
+X004816Y016738D01*
+X004828Y016701D01*
+X004836Y016663D01*
+X004840Y016624D01*
+X004840Y016586D01*
+X004836Y016547D01*
+X004828Y016509D01*
+X004816Y016472D01*
+X004801Y016436D01*
+X004783Y016402D01*
+X004761Y016370D01*
+X004736Y016340D01*
+X004708Y016313D01*
+X004678Y016288D01*
+X004645Y016267D01*
+X004610Y016250D01*
+X004574Y016235D01*
+X004537Y016225D01*
+X004498Y016218D01*
+X004460Y016215D01*
+X004421Y016216D01*
+X004382Y016221D01*
+X004344Y016230D01*
+X004308Y016242D01*
+X004272Y016258D01*
+X004238Y016277D01*
+X004207Y016300D01*
+X004178Y016326D01*
+X004151Y016354D01*
+X004128Y016385D01*
+X004107Y016418D01*
+X004091Y016454D01*
+X004077Y016490D01*
+X004068Y016528D01*
+X004062Y016566D01*
+X004060Y016605D01*
+X004050Y016205D02*
+X004850Y017005D01*
+X003660Y016305D02*
+X003662Y016344D01*
+X003668Y016382D01*
+X003677Y016420D01*
+X003691Y016456D01*
+X003707Y016492D01*
+X003728Y016525D01*
+X003751Y016556D01*
+X003778Y016584D01*
+X003807Y016610D01*
+X003838Y016633D01*
+X003872Y016652D01*
+X003908Y016668D01*
+X003944Y016680D01*
+X003982Y016689D01*
+X004021Y016694D01*
+X004060Y016695D01*
+X004098Y016692D01*
+X004137Y016685D01*
+X004174Y016675D01*
+X004210Y016660D01*
+X004245Y016643D01*
+X004278Y016622D01*
+X004308Y016597D01*
+X004336Y016570D01*
+X004361Y016540D01*
+X004383Y016508D01*
+X004401Y016474D01*
+X004416Y016438D01*
+X004428Y016401D01*
+X004436Y016363D01*
+X004440Y016324D01*
+X004440Y016286D01*
+X004436Y016247D01*
+X004428Y016209D01*
+X004416Y016172D01*
+X004401Y016136D01*
+X004383Y016102D01*
+X004361Y016070D01*
+X004336Y016040D01*
+X004308Y016013D01*
+X004278Y015988D01*
+X004245Y015967D01*
+X004210Y015950D01*
+X004174Y015935D01*
+X004137Y015925D01*
+X004098Y015918D01*
+X004060Y015915D01*
+X004021Y015916D01*
+X003982Y015921D01*
+X003944Y015930D01*
+X003908Y015942D01*
+X003872Y015958D01*
+X003838Y015977D01*
+X003807Y016000D01*
+X003778Y016026D01*
+X003751Y016054D01*
+X003728Y016085D01*
+X003707Y016118D01*
+X003691Y016154D01*
+X003677Y016190D01*
+X003668Y016228D01*
+X003662Y016266D01*
+X003660Y016305D01*
+X003650Y015905D02*
+X004450Y016705D01*
+X004510Y016005D02*
+X004512Y016044D01*
+X004518Y016082D01*
+X004527Y016120D01*
+X004541Y016156D01*
+X004557Y016192D01*
+X004578Y016225D01*
+X004601Y016256D01*
+X004628Y016284D01*
+X004657Y016310D01*
+X004688Y016333D01*
+X004722Y016352D01*
+X004758Y016368D01*
+X004794Y016380D01*
+X004832Y016389D01*
+X004871Y016394D01*
+X004910Y016395D01*
+X004948Y016392D01*
+X004987Y016385D01*
+X005024Y016375D01*
+X005060Y016360D01*
+X005095Y016343D01*
+X005128Y016322D01*
+X005158Y016297D01*
+X005186Y016270D01*
+X005211Y016240D01*
+X005233Y016208D01*
+X005251Y016174D01*
+X005266Y016138D01*
+X005278Y016101D01*
+X005286Y016063D01*
+X005290Y016024D01*
+X005290Y015986D01*
+X005286Y015947D01*
+X005278Y015909D01*
+X005266Y015872D01*
+X005251Y015836D01*
+X005233Y015802D01*
+X005211Y015770D01*
+X005186Y015740D01*
+X005158Y015713D01*
+X005128Y015688D01*
+X005095Y015667D01*
+X005060Y015650D01*
+X005024Y015635D01*
+X004987Y015625D01*
+X004948Y015618D01*
+X004910Y015615D01*
+X004871Y015616D01*
+X004832Y015621D01*
+X004794Y015630D01*
+X004758Y015642D01*
+X004722Y015658D01*
+X004688Y015677D01*
+X004657Y015700D01*
+X004628Y015726D01*
+X004601Y015754D01*
+X004578Y015785D01*
+X004557Y015818D01*
+X004541Y015854D01*
+X004527Y015890D01*
+X004518Y015928D01*
+X004512Y015966D01*
+X004510Y016005D01*
+X004500Y015605D02*
+X005300Y016405D01*
+X005210Y015555D02*
+X005212Y015594D01*
+X005218Y015632D01*
+X005227Y015670D01*
+X005241Y015706D01*
+X005257Y015742D01*
+X005278Y015775D01*
+X005301Y015806D01*
+X005328Y015834D01*
+X005357Y015860D01*
+X005388Y015883D01*
+X005422Y015902D01*
+X005458Y015918D01*
+X005494Y015930D01*
+X005532Y015939D01*
+X005571Y015944D01*
+X005610Y015945D01*
+X005648Y015942D01*
+X005687Y015935D01*
+X005724Y015925D01*
+X005760Y015910D01*
+X005795Y015893D01*
+X005828Y015872D01*
+X005858Y015847D01*
+X005886Y015820D01*
+X005911Y015790D01*
+X005933Y015758D01*
+X005951Y015724D01*
+X005966Y015688D01*
+X005978Y015651D01*
+X005986Y015613D01*
+X005990Y015574D01*
+X005990Y015536D01*
+X005986Y015497D01*
+X005978Y015459D01*
+X005966Y015422D01*
+X005951Y015386D01*
+X005933Y015352D01*
+X005911Y015320D01*
+X005886Y015290D01*
+X005858Y015263D01*
+X005828Y015238D01*
+X005795Y015217D01*
+X005760Y015200D01*
+X005724Y015185D01*
+X005687Y015175D01*
+X005648Y015168D01*
+X005610Y015165D01*
+X005571Y015166D01*
+X005532Y015171D01*
+X005494Y015180D01*
+X005458Y015192D01*
+X005422Y015208D01*
+X005388Y015227D01*
+X005357Y015250D01*
+X005328Y015276D01*
+X005301Y015304D01*
+X005278Y015335D01*
+X005257Y015368D01*
+X005241Y015404D01*
+X005227Y015440D01*
+X005218Y015478D01*
+X005212Y015516D01*
+X005210Y015555D01*
+X005200Y015155D02*
+X006000Y015955D01*
+X007160Y015555D02*
+X007162Y015594D01*
+X007168Y015632D01*
+X007177Y015670D01*
+X007191Y015706D01*
+X007207Y015742D01*
+X007228Y015775D01*
+X007251Y015806D01*
+X007278Y015834D01*
+X007307Y015860D01*
+X007338Y015883D01*
+X007372Y015902D01*
+X007408Y015918D01*
+X007444Y015930D01*
+X007482Y015939D01*
+X007521Y015944D01*
+X007560Y015945D01*
+X007598Y015942D01*
+X007637Y015935D01*
+X007674Y015925D01*
+X007710Y015910D01*
+X007745Y015893D01*
+X007778Y015872D01*
+X007808Y015847D01*
+X007836Y015820D01*
+X007861Y015790D01*
+X007883Y015758D01*
+X007901Y015724D01*
+X007916Y015688D01*
+X007928Y015651D01*
+X007936Y015613D01*
+X007940Y015574D01*
+X007940Y015536D01*
+X007936Y015497D01*
+X007928Y015459D01*
+X007916Y015422D01*
+X007901Y015386D01*
+X007883Y015352D01*
+X007861Y015320D01*
+X007836Y015290D01*
+X007808Y015263D01*
+X007778Y015238D01*
+X007745Y015217D01*
+X007710Y015200D01*
+X007674Y015185D01*
+X007637Y015175D01*
+X007598Y015168D01*
+X007560Y015165D01*
+X007521Y015166D01*
+X007482Y015171D01*
+X007444Y015180D01*
+X007408Y015192D01*
+X007372Y015208D01*
+X007338Y015227D01*
+X007307Y015250D01*
+X007278Y015276D01*
+X007251Y015304D01*
+X007228Y015335D01*
+X007207Y015368D01*
+X007191Y015404D01*
+X007177Y015440D01*
+X007168Y015478D01*
+X007162Y015516D01*
+X007160Y015555D01*
+X007150Y015155D02*
+X007950Y015955D01*
+X007560Y015555D02*
+X007562Y015594D01*
+X007568Y015632D01*
+X007577Y015670D01*
+X007591Y015706D01*
+X007607Y015742D01*
+X007628Y015775D01*
+X007651Y015806D01*
+X007678Y015834D01*
+X007707Y015860D01*
+X007738Y015883D01*
+X007772Y015902D01*
+X007808Y015918D01*
+X007844Y015930D01*
+X007882Y015939D01*
+X007921Y015944D01*
+X007960Y015945D01*
+X007998Y015942D01*
+X008037Y015935D01*
+X008074Y015925D01*
+X008110Y015910D01*
+X008145Y015893D01*
+X008178Y015872D01*
+X008208Y015847D01*
+X008236Y015820D01*
+X008261Y015790D01*
+X008283Y015758D01*
+X008301Y015724D01*
+X008316Y015688D01*
+X008328Y015651D01*
+X008336Y015613D01*
+X008340Y015574D01*
+X008340Y015536D01*
+X008336Y015497D01*
+X008328Y015459D01*
+X008316Y015422D01*
+X008301Y015386D01*
+X008283Y015352D01*
+X008261Y015320D01*
+X008236Y015290D01*
+X008208Y015263D01*
+X008178Y015238D01*
+X008145Y015217D01*
+X008110Y015200D01*
+X008074Y015185D01*
+X008037Y015175D01*
+X007998Y015168D01*
+X007960Y015165D01*
+X007921Y015166D01*
+X007882Y015171D01*
+X007844Y015180D01*
+X007808Y015192D01*
+X007772Y015208D01*
+X007738Y015227D01*
+X007707Y015250D01*
+X007678Y015276D01*
+X007651Y015304D01*
+X007628Y015335D01*
+X007607Y015368D01*
+X007591Y015404D01*
+X007577Y015440D01*
+X007568Y015478D01*
+X007562Y015516D01*
+X007560Y015555D01*
+X007550Y015155D02*
+X008350Y015955D01*
+X007960Y015405D02*
+X007962Y015444D01*
+X007968Y015482D01*
+X007977Y015520D01*
+X007991Y015556D01*
+X008007Y015592D01*
+X008028Y015625D01*
+X008051Y015656D01*
+X008078Y015684D01*
+X008107Y015710D01*
+X008138Y015733D01*
+X008172Y015752D01*
+X008208Y015768D01*
+X008244Y015780D01*
+X008282Y015789D01*
+X008321Y015794D01*
+X008360Y015795D01*
+X008398Y015792D01*
+X008437Y015785D01*
+X008474Y015775D01*
+X008510Y015760D01*
+X008545Y015743D01*
+X008578Y015722D01*
+X008608Y015697D01*
+X008636Y015670D01*
+X008661Y015640D01*
+X008683Y015608D01*
+X008701Y015574D01*
+X008716Y015538D01*
+X008728Y015501D01*
+X008736Y015463D01*
+X008740Y015424D01*
+X008740Y015386D01*
+X008736Y015347D01*
+X008728Y015309D01*
+X008716Y015272D01*
+X008701Y015236D01*
+X008683Y015202D01*
+X008661Y015170D01*
+X008636Y015140D01*
+X008608Y015113D01*
+X008578Y015088D01*
+X008545Y015067D01*
+X008510Y015050D01*
+X008474Y015035D01*
+X008437Y015025D01*
+X008398Y015018D01*
+X008360Y015015D01*
+X008321Y015016D01*
+X008282Y015021D01*
+X008244Y015030D01*
+X008208Y015042D01*
+X008172Y015058D01*
+X008138Y015077D01*
+X008107Y015100D01*
+X008078Y015126D01*
+X008051Y015154D01*
+X008028Y015185D01*
+X008007Y015218D01*
+X007991Y015254D01*
+X007977Y015290D01*
+X007968Y015328D01*
+X007962Y015366D01*
+X007960Y015405D01*
+X007950Y015005D02*
+X008750Y015805D01*
+X009310Y015005D02*
+X009312Y015044D01*
+X009318Y015082D01*
+X009327Y015120D01*
+X009341Y015156D01*
+X009357Y015192D01*
+X009378Y015225D01*
+X009401Y015256D01*
+X009428Y015284D01*
+X009457Y015310D01*
+X009488Y015333D01*
+X009522Y015352D01*
+X009558Y015368D01*
+X009594Y015380D01*
+X009632Y015389D01*
+X009671Y015394D01*
+X009710Y015395D01*
+X009748Y015392D01*
+X009787Y015385D01*
+X009824Y015375D01*
+X009860Y015360D01*
+X009895Y015343D01*
+X009928Y015322D01*
+X009958Y015297D01*
+X009986Y015270D01*
+X010011Y015240D01*
+X010033Y015208D01*
+X010051Y015174D01*
+X010066Y015138D01*
+X010078Y015101D01*
+X010086Y015063D01*
+X010090Y015024D01*
+X010090Y014986D01*
+X010086Y014947D01*
+X010078Y014909D01*
+X010066Y014872D01*
+X010051Y014836D01*
+X010033Y014802D01*
+X010011Y014770D01*
+X009986Y014740D01*
+X009958Y014713D01*
+X009928Y014688D01*
+X009895Y014667D01*
+X009860Y014650D01*
+X009824Y014635D01*
+X009787Y014625D01*
+X009748Y014618D01*
+X009710Y014615D01*
+X009671Y014616D01*
+X009632Y014621D01*
+X009594Y014630D01*
+X009558Y014642D01*
+X009522Y014658D01*
+X009488Y014677D01*
+X009457Y014700D01*
+X009428Y014726D01*
+X009401Y014754D01*
+X009378Y014785D01*
+X009357Y014818D01*
+X009341Y014854D01*
+X009327Y014890D01*
+X009318Y014928D01*
+X009312Y014966D01*
+X009310Y015005D01*
+X009300Y014605D02*
+X010100Y015405D01*
+X010310Y015005D02*
+X010312Y015044D01*
+X010318Y015082D01*
+X010327Y015120D01*
+X010341Y015156D01*
+X010357Y015192D01*
+X010378Y015225D01*
+X010401Y015256D01*
+X010428Y015284D01*
+X010457Y015310D01*
+X010488Y015333D01*
+X010522Y015352D01*
+X010558Y015368D01*
+X010594Y015380D01*
+X010632Y015389D01*
+X010671Y015394D01*
+X010710Y015395D01*
+X010748Y015392D01*
+X010787Y015385D01*
+X010824Y015375D01*
+X010860Y015360D01*
+X010895Y015343D01*
+X010928Y015322D01*
+X010958Y015297D01*
+X010986Y015270D01*
+X011011Y015240D01*
+X011033Y015208D01*
+X011051Y015174D01*
+X011066Y015138D01*
+X011078Y015101D01*
+X011086Y015063D01*
+X011090Y015024D01*
+X011090Y014986D01*
+X011086Y014947D01*
+X011078Y014909D01*
+X011066Y014872D01*
+X011051Y014836D01*
+X011033Y014802D01*
+X011011Y014770D01*
+X010986Y014740D01*
+X010958Y014713D01*
+X010928Y014688D01*
+X010895Y014667D01*
+X010860Y014650D01*
+X010824Y014635D01*
+X010787Y014625D01*
+X010748Y014618D01*
+X010710Y014615D01*
+X010671Y014616D01*
+X010632Y014621D01*
+X010594Y014630D01*
+X010558Y014642D01*
+X010522Y014658D01*
+X010488Y014677D01*
+X010457Y014700D01*
+X010428Y014726D01*
+X010401Y014754D01*
+X010378Y014785D01*
+X010357Y014818D01*
+X010341Y014854D01*
+X010327Y014890D01*
+X010318Y014928D01*
+X010312Y014966D01*
+X010310Y015005D01*
+X010300Y014605D02*
+X011100Y015405D01*
+X011110Y014855D02*
+X011112Y014894D01*
+X011118Y014932D01*
+X011127Y014970D01*
+X011141Y015006D01*
+X011157Y015042D01*
+X011178Y015075D01*
+X011201Y015106D01*
+X011228Y015134D01*
+X011257Y015160D01*
+X011288Y015183D01*
+X011322Y015202D01*
+X011358Y015218D01*
+X011394Y015230D01*
+X011432Y015239D01*
+X011471Y015244D01*
+X011510Y015245D01*
+X011548Y015242D01*
+X011587Y015235D01*
+X011624Y015225D01*
+X011660Y015210D01*
+X011695Y015193D01*
+X011728Y015172D01*
+X011758Y015147D01*
+X011786Y015120D01*
+X011811Y015090D01*
+X011833Y015058D01*
+X011851Y015024D01*
+X011866Y014988D01*
+X011878Y014951D01*
+X011886Y014913D01*
+X011890Y014874D01*
+X011890Y014836D01*
+X011886Y014797D01*
+X011878Y014759D01*
+X011866Y014722D01*
+X011851Y014686D01*
+X011833Y014652D01*
+X011811Y014620D01*
+X011786Y014590D01*
+X011758Y014563D01*
+X011728Y014538D01*
+X011695Y014517D01*
+X011660Y014500D01*
+X011624Y014485D01*
+X011587Y014475D01*
+X011548Y014468D01*
+X011510Y014465D01*
+X011471Y014466D01*
+X011432Y014471D01*
+X011394Y014480D01*
+X011358Y014492D01*
+X011322Y014508D01*
+X011288Y014527D01*
+X011257Y014550D01*
+X011228Y014576D01*
+X011201Y014604D01*
+X011178Y014635D01*
+X011157Y014668D01*
+X011141Y014704D01*
+X011127Y014740D01*
+X011118Y014778D01*
+X011112Y014816D01*
+X011110Y014855D01*
+X011100Y014455D02*
+X011900Y015255D01*
+X012210Y014655D02*
+X012212Y014694D01*
+X012218Y014732D01*
+X012227Y014770D01*
+X012241Y014806D01*
+X012257Y014842D01*
+X012278Y014875D01*
+X012301Y014906D01*
+X012328Y014934D01*
+X012357Y014960D01*
+X012388Y014983D01*
+X012422Y015002D01*
+X012458Y015018D01*
+X012494Y015030D01*
+X012532Y015039D01*
+X012571Y015044D01*
+X012610Y015045D01*
+X012648Y015042D01*
+X012687Y015035D01*
+X012724Y015025D01*
+X012760Y015010D01*
+X012795Y014993D01*
+X012828Y014972D01*
+X012858Y014947D01*
+X012886Y014920D01*
+X012911Y014890D01*
+X012933Y014858D01*
+X012951Y014824D01*
+X012966Y014788D01*
+X012978Y014751D01*
+X012986Y014713D01*
+X012990Y014674D01*
+X012990Y014636D01*
+X012986Y014597D01*
+X012978Y014559D01*
+X012966Y014522D01*
+X012951Y014486D01*
+X012933Y014452D01*
+X012911Y014420D01*
+X012886Y014390D01*
+X012858Y014363D01*
+X012828Y014338D01*
+X012795Y014317D01*
+X012760Y014300D01*
+X012724Y014285D01*
+X012687Y014275D01*
+X012648Y014268D01*
+X012610Y014265D01*
+X012571Y014266D01*
+X012532Y014271D01*
+X012494Y014280D01*
+X012458Y014292D01*
+X012422Y014308D01*
+X012388Y014327D01*
+X012357Y014350D01*
+X012328Y014376D01*
+X012301Y014404D01*
+X012278Y014435D01*
+X012257Y014468D01*
+X012241Y014504D01*
+X012227Y014540D01*
+X012218Y014578D01*
+X012212Y014616D01*
+X012210Y014655D01*
+X012200Y014255D02*
+X013000Y015055D01*
+X012610Y015055D02*
+X012612Y015094D01*
+X012618Y015132D01*
+X012627Y015170D01*
+X012641Y015206D01*
+X012657Y015242D01*
+X012678Y015275D01*
+X012701Y015306D01*
+X012728Y015334D01*
+X012757Y015360D01*
+X012788Y015383D01*
+X012822Y015402D01*
+X012858Y015418D01*
+X012894Y015430D01*
+X012932Y015439D01*
+X012971Y015444D01*
+X013010Y015445D01*
+X013048Y015442D01*
+X013087Y015435D01*
+X013124Y015425D01*
+X013160Y015410D01*
+X013195Y015393D01*
+X013228Y015372D01*
+X013258Y015347D01*
+X013286Y015320D01*
+X013311Y015290D01*
+X013333Y015258D01*
+X013351Y015224D01*
+X013366Y015188D01*
+X013378Y015151D01*
+X013386Y015113D01*
+X013390Y015074D01*
+X013390Y015036D01*
+X013386Y014997D01*
+X013378Y014959D01*
+X013366Y014922D01*
+X013351Y014886D01*
+X013333Y014852D01*
+X013311Y014820D01*
+X013286Y014790D01*
+X013258Y014763D01*
+X013228Y014738D01*
+X013195Y014717D01*
+X013160Y014700D01*
+X013124Y014685D01*
+X013087Y014675D01*
+X013048Y014668D01*
+X013010Y014665D01*
+X012971Y014666D01*
+X012932Y014671D01*
+X012894Y014680D01*
+X012858Y014692D01*
+X012822Y014708D01*
+X012788Y014727D01*
+X012757Y014750D01*
+X012728Y014776D01*
+X012701Y014804D01*
+X012678Y014835D01*
+X012657Y014868D01*
+X012641Y014904D01*
+X012627Y014940D01*
+X012618Y014978D01*
+X012612Y015016D01*
+X012610Y015055D01*
+X012600Y014655D02*
+X013400Y015455D01*
+X013110Y015005D02*
+X013112Y015044D01*
+X013118Y015082D01*
+X013127Y015120D01*
+X013141Y015156D01*
+X013157Y015192D01*
+X013178Y015225D01*
+X013201Y015256D01*
+X013228Y015284D01*
+X013257Y015310D01*
+X013288Y015333D01*
+X013322Y015352D01*
+X013358Y015368D01*
+X013394Y015380D01*
+X013432Y015389D01*
+X013471Y015394D01*
+X013510Y015395D01*
+X013548Y015392D01*
+X013587Y015385D01*
+X013624Y015375D01*
+X013660Y015360D01*
+X013695Y015343D01*
+X013728Y015322D01*
+X013758Y015297D01*
+X013786Y015270D01*
+X013811Y015240D01*
+X013833Y015208D01*
+X013851Y015174D01*
+X013866Y015138D01*
+X013878Y015101D01*
+X013886Y015063D01*
+X013890Y015024D01*
+X013890Y014986D01*
+X013886Y014947D01*
+X013878Y014909D01*
+X013866Y014872D01*
+X013851Y014836D01*
+X013833Y014802D01*
+X013811Y014770D01*
+X013786Y014740D01*
+X013758Y014713D01*
+X013728Y014688D01*
+X013695Y014667D01*
+X013660Y014650D01*
+X013624Y014635D01*
+X013587Y014625D01*
+X013548Y014618D01*
+X013510Y014615D01*
+X013471Y014616D01*
+X013432Y014621D01*
+X013394Y014630D01*
+X013358Y014642D01*
+X013322Y014658D01*
+X013288Y014677D01*
+X013257Y014700D01*
+X013228Y014726D01*
+X013201Y014754D01*
+X013178Y014785D01*
+X013157Y014818D01*
+X013141Y014854D01*
+X013127Y014890D01*
+X013118Y014928D01*
+X013112Y014966D01*
+X013110Y015005D01*
+X013100Y014605D02*
+X013900Y015405D01*
+X013660Y014855D02*
+X013662Y014894D01*
+X013668Y014932D01*
+X013677Y014970D01*
+X013691Y015006D01*
+X013707Y015042D01*
+X013728Y015075D01*
+X013751Y015106D01*
+X013778Y015134D01*
+X013807Y015160D01*
+X013838Y015183D01*
+X013872Y015202D01*
+X013908Y015218D01*
+X013944Y015230D01*
+X013982Y015239D01*
+X014021Y015244D01*
+X014060Y015245D01*
+X014098Y015242D01*
+X014137Y015235D01*
+X014174Y015225D01*
+X014210Y015210D01*
+X014245Y015193D01*
+X014278Y015172D01*
+X014308Y015147D01*
+X014336Y015120D01*
+X014361Y015090D01*
+X014383Y015058D01*
+X014401Y015024D01*
+X014416Y014988D01*
+X014428Y014951D01*
+X014436Y014913D01*
+X014440Y014874D01*
+X014440Y014836D01*
+X014436Y014797D01*
+X014428Y014759D01*
+X014416Y014722D01*
+X014401Y014686D01*
+X014383Y014652D01*
+X014361Y014620D01*
+X014336Y014590D01*
+X014308Y014563D01*
+X014278Y014538D01*
+X014245Y014517D01*
+X014210Y014500D01*
+X014174Y014485D01*
+X014137Y014475D01*
+X014098Y014468D01*
+X014060Y014465D01*
+X014021Y014466D01*
+X013982Y014471D01*
+X013944Y014480D01*
+X013908Y014492D01*
+X013872Y014508D01*
+X013838Y014527D01*
+X013807Y014550D01*
+X013778Y014576D01*
+X013751Y014604D01*
+X013728Y014635D01*
+X013707Y014668D01*
+X013691Y014704D01*
+X013677Y014740D01*
+X013668Y014778D01*
+X013662Y014816D01*
+X013660Y014855D01*
+X013650Y014455D02*
+X014450Y015255D01*
+X015760Y016105D02*
+X015762Y016144D01*
+X015768Y016182D01*
+X015777Y016220D01*
+X015791Y016256D01*
+X015807Y016292D01*
+X015828Y016325D01*
+X015851Y016356D01*
+X015878Y016384D01*
+X015907Y016410D01*
+X015938Y016433D01*
+X015972Y016452D01*
+X016008Y016468D01*
+X016044Y016480D01*
+X016082Y016489D01*
+X016121Y016494D01*
+X016160Y016495D01*
+X016198Y016492D01*
+X016237Y016485D01*
+X016274Y016475D01*
+X016310Y016460D01*
+X016345Y016443D01*
+X016378Y016422D01*
+X016408Y016397D01*
+X016436Y016370D01*
+X016461Y016340D01*
+X016483Y016308D01*
+X016501Y016274D01*
+X016516Y016238D01*
+X016528Y016201D01*
+X016536Y016163D01*
+X016540Y016124D01*
+X016540Y016086D01*
+X016536Y016047D01*
+X016528Y016009D01*
+X016516Y015972D01*
+X016501Y015936D01*
+X016483Y015902D01*
+X016461Y015870D01*
+X016436Y015840D01*
+X016408Y015813D01*
+X016378Y015788D01*
+X016345Y015767D01*
+X016310Y015750D01*
+X016274Y015735D01*
+X016237Y015725D01*
+X016198Y015718D01*
+X016160Y015715D01*
+X016121Y015716D01*
+X016082Y015721D01*
+X016044Y015730D01*
+X016008Y015742D01*
+X015972Y015758D01*
+X015938Y015777D01*
+X015907Y015800D01*
+X015878Y015826D01*
+X015851Y015854D01*
+X015828Y015885D01*
+X015807Y015918D01*
+X015791Y015954D01*
+X015777Y015990D01*
+X015768Y016028D01*
+X015762Y016066D01*
+X015760Y016105D01*
+X015750Y015705D02*
+X016550Y016505D01*
+X015910Y016505D02*
+X015912Y016544D01*
+X015918Y016582D01*
+X015927Y016620D01*
+X015941Y016656D01*
+X015957Y016692D01*
+X015978Y016725D01*
+X016001Y016756D01*
+X016028Y016784D01*
+X016057Y016810D01*
+X016088Y016833D01*
+X016122Y016852D01*
+X016158Y016868D01*
+X016194Y016880D01*
+X016232Y016889D01*
+X016271Y016894D01*
+X016310Y016895D01*
+X016348Y016892D01*
+X016387Y016885D01*
+X016424Y016875D01*
+X016460Y016860D01*
+X016495Y016843D01*
+X016528Y016822D01*
+X016558Y016797D01*
+X016586Y016770D01*
+X016611Y016740D01*
+X016633Y016708D01*
+X016651Y016674D01*
+X016666Y016638D01*
+X016678Y016601D01*
+X016686Y016563D01*
+X016690Y016524D01*
+X016690Y016486D01*
+X016686Y016447D01*
+X016678Y016409D01*
+X016666Y016372D01*
+X016651Y016336D01*
+X016633Y016302D01*
+X016611Y016270D01*
+X016586Y016240D01*
+X016558Y016213D01*
+X016528Y016188D01*
+X016495Y016167D01*
+X016460Y016150D01*
+X016424Y016135D01*
+X016387Y016125D01*
+X016348Y016118D01*
+X016310Y016115D01*
+X016271Y016116D01*
+X016232Y016121D01*
+X016194Y016130D01*
+X016158Y016142D01*
+X016122Y016158D01*
+X016088Y016177D01*
+X016057Y016200D01*
+X016028Y016226D01*
+X016001Y016254D01*
+X015978Y016285D01*
+X015957Y016318D01*
+X015941Y016354D01*
+X015927Y016390D01*
+X015918Y016428D01*
+X015912Y016466D01*
+X015910Y016505D01*
+X015900Y016105D02*
+X016700Y016905D01*
+X015260Y017855D02*
+X015262Y017894D01*
+X015268Y017932D01*
+X015277Y017970D01*
+X015291Y018006D01*
+X015307Y018042D01*
+X015328Y018075D01*
+X015351Y018106D01*
+X015378Y018134D01*
+X015407Y018160D01*
+X015438Y018183D01*
+X015472Y018202D01*
+X015508Y018218D01*
+X015544Y018230D01*
+X015582Y018239D01*
+X015621Y018244D01*
+X015660Y018245D01*
+X015698Y018242D01*
+X015737Y018235D01*
+X015774Y018225D01*
+X015810Y018210D01*
+X015845Y018193D01*
+X015878Y018172D01*
+X015908Y018147D01*
+X015936Y018120D01*
+X015961Y018090D01*
+X015983Y018058D01*
+X016001Y018024D01*
+X016016Y017988D01*
+X016028Y017951D01*
+X016036Y017913D01*
+X016040Y017874D01*
+X016040Y017836D01*
+X016036Y017797D01*
+X016028Y017759D01*
+X016016Y017722D01*
+X016001Y017686D01*
+X015983Y017652D01*
+X015961Y017620D01*
+X015936Y017590D01*
+X015908Y017563D01*
+X015878Y017538D01*
+X015845Y017517D01*
+X015810Y017500D01*
+X015774Y017485D01*
+X015737Y017475D01*
+X015698Y017468D01*
+X015660Y017465D01*
+X015621Y017466D01*
+X015582Y017471D01*
+X015544Y017480D01*
+X015508Y017492D01*
+X015472Y017508D01*
+X015438Y017527D01*
+X015407Y017550D01*
+X015378Y017576D01*
+X015351Y017604D01*
+X015328Y017635D01*
+X015307Y017668D01*
+X015291Y017704D01*
+X015277Y017740D01*
+X015268Y017778D01*
+X015262Y017816D01*
+X015260Y017855D01*
+X015250Y017455D02*
+X016050Y018255D01*
+X013660Y017355D02*
+X013662Y017394D01*
+X013668Y017432D01*
+X013677Y017470D01*
+X013691Y017506D01*
+X013707Y017542D01*
+X013728Y017575D01*
+X013751Y017606D01*
+X013778Y017634D01*
+X013807Y017660D01*
+X013838Y017683D01*
+X013872Y017702D01*
+X013908Y017718D01*
+X013944Y017730D01*
+X013982Y017739D01*
+X014021Y017744D01*
+X014060Y017745D01*
+X014098Y017742D01*
+X014137Y017735D01*
+X014174Y017725D01*
+X014210Y017710D01*
+X014245Y017693D01*
+X014278Y017672D01*
+X014308Y017647D01*
+X014336Y017620D01*
+X014361Y017590D01*
+X014383Y017558D01*
+X014401Y017524D01*
+X014416Y017488D01*
+X014428Y017451D01*
+X014436Y017413D01*
+X014440Y017374D01*
+X014440Y017336D01*
+X014436Y017297D01*
+X014428Y017259D01*
+X014416Y017222D01*
+X014401Y017186D01*
+X014383Y017152D01*
+X014361Y017120D01*
+X014336Y017090D01*
+X014308Y017063D01*
+X014278Y017038D01*
+X014245Y017017D01*
+X014210Y017000D01*
+X014174Y016985D01*
+X014137Y016975D01*
+X014098Y016968D01*
+X014060Y016965D01*
+X014021Y016966D01*
+X013982Y016971D01*
+X013944Y016980D01*
+X013908Y016992D01*
+X013872Y017008D01*
+X013838Y017027D01*
+X013807Y017050D01*
+X013778Y017076D01*
+X013751Y017104D01*
+X013728Y017135D01*
+X013707Y017168D01*
+X013691Y017204D01*
+X013677Y017240D01*
+X013668Y017278D01*
+X013662Y017316D01*
+X013660Y017355D01*
+X013650Y016955D02*
+X014450Y017755D01*
+X012510Y018005D02*
+X012512Y018044D01*
+X012518Y018082D01*
+X012527Y018120D01*
+X012541Y018156D01*
+X012557Y018192D01*
+X012578Y018225D01*
+X012601Y018256D01*
+X012628Y018284D01*
+X012657Y018310D01*
+X012688Y018333D01*
+X012722Y018352D01*
+X012758Y018368D01*
+X012794Y018380D01*
+X012832Y018389D01*
+X012871Y018394D01*
+X012910Y018395D01*
+X012948Y018392D01*
+X012987Y018385D01*
+X013024Y018375D01*
+X013060Y018360D01*
+X013095Y018343D01*
+X013128Y018322D01*
+X013158Y018297D01*
+X013186Y018270D01*
+X013211Y018240D01*
+X013233Y018208D01*
+X013251Y018174D01*
+X013266Y018138D01*
+X013278Y018101D01*
+X013286Y018063D01*
+X013290Y018024D01*
+X013290Y017986D01*
+X013286Y017947D01*
+X013278Y017909D01*
+X013266Y017872D01*
+X013251Y017836D01*
+X013233Y017802D01*
+X013211Y017770D01*
+X013186Y017740D01*
+X013158Y017713D01*
+X013128Y017688D01*
+X013095Y017667D01*
+X013060Y017650D01*
+X013024Y017635D01*
+X012987Y017625D01*
+X012948Y017618D01*
+X012910Y017615D01*
+X012871Y017616D01*
+X012832Y017621D01*
+X012794Y017630D01*
+X012758Y017642D01*
+X012722Y017658D01*
+X012688Y017677D01*
+X012657Y017700D01*
+X012628Y017726D01*
+X012601Y017754D01*
+X012578Y017785D01*
+X012557Y017818D01*
+X012541Y017854D01*
+X012527Y017890D01*
+X012518Y017928D01*
+X012512Y017966D01*
+X012510Y018005D01*
+X012500Y017605D02*
+X013300Y018405D01*
+X011760Y017705D02*
+X011762Y017744D01*
+X011768Y017782D01*
+X011777Y017820D01*
+X011791Y017856D01*
+X011807Y017892D01*
+X011828Y017925D01*
+X011851Y017956D01*
+X011878Y017984D01*
+X011907Y018010D01*
+X011938Y018033D01*
+X011972Y018052D01*
+X012008Y018068D01*
+X012044Y018080D01*
+X012082Y018089D01*
+X012121Y018094D01*
+X012160Y018095D01*
+X012198Y018092D01*
+X012237Y018085D01*
+X012274Y018075D01*
+X012310Y018060D01*
+X012345Y018043D01*
+X012378Y018022D01*
+X012408Y017997D01*
+X012436Y017970D01*
+X012461Y017940D01*
+X012483Y017908D01*
+X012501Y017874D01*
+X012516Y017838D01*
+X012528Y017801D01*
+X012536Y017763D01*
+X012540Y017724D01*
+X012540Y017686D01*
+X012536Y017647D01*
+X012528Y017609D01*
+X012516Y017572D01*
+X012501Y017536D01*
+X012483Y017502D01*
+X012461Y017470D01*
+X012436Y017440D01*
+X012408Y017413D01*
+X012378Y017388D01*
+X012345Y017367D01*
+X012310Y017350D01*
+X012274Y017335D01*
+X012237Y017325D01*
+X012198Y017318D01*
+X012160Y017315D01*
+X012121Y017316D01*
+X012082Y017321D01*
+X012044Y017330D01*
+X012008Y017342D01*
+X011972Y017358D01*
+X011938Y017377D01*
+X011907Y017400D01*
+X011878Y017426D01*
+X011851Y017454D01*
+X011828Y017485D01*
+X011807Y017518D01*
+X011791Y017554D01*
+X011777Y017590D01*
+X011768Y017628D01*
+X011762Y017666D01*
+X011760Y017705D01*
+X011750Y017305D02*
+X012550Y018105D01*
+X011584Y018129D02*
+X011586Y018168D01*
+X011592Y018206D01*
+X011601Y018244D01*
+X011615Y018280D01*
+X011631Y018316D01*
+X011652Y018349D01*
+X011675Y018380D01*
+X011702Y018408D01*
+X011731Y018434D01*
+X011762Y018457D01*
+X011796Y018476D01*
+X011832Y018492D01*
+X011868Y018504D01*
+X011906Y018513D01*
+X011945Y018518D01*
+X011984Y018519D01*
+X012022Y018516D01*
+X012061Y018509D01*
+X012098Y018499D01*
+X012134Y018484D01*
+X012169Y018467D01*
+X012202Y018446D01*
+X012232Y018421D01*
+X012260Y018394D01*
+X012285Y018364D01*
+X012307Y018332D01*
+X012325Y018298D01*
+X012340Y018262D01*
+X012352Y018225D01*
+X012360Y018187D01*
+X012364Y018148D01*
+X012364Y018110D01*
+X012360Y018071D01*
+X012352Y018033D01*
+X012340Y017996D01*
+X012325Y017960D01*
+X012307Y017926D01*
+X012285Y017894D01*
+X012260Y017864D01*
+X012232Y017837D01*
+X012202Y017812D01*
+X012169Y017791D01*
+X012134Y017774D01*
+X012098Y017759D01*
+X012061Y017749D01*
+X012022Y017742D01*
+X011984Y017739D01*
+X011945Y017740D01*
+X011906Y017745D01*
+X011868Y017754D01*
+X011832Y017766D01*
+X011796Y017782D01*
+X011762Y017801D01*
+X011731Y017824D01*
+X011702Y017850D01*
+X011675Y017878D01*
+X011652Y017909D01*
+X011631Y017942D01*
+X011615Y017978D01*
+X011601Y018014D01*
+X011592Y018052D01*
+X011586Y018090D01*
+X011584Y018129D01*
+X011574Y017729D02*
+X012374Y018529D01*
+X011160Y018305D02*
+X011162Y018344D01*
+X011168Y018382D01*
+X011177Y018420D01*
+X011191Y018456D01*
+X011207Y018492D01*
+X011228Y018525D01*
+X011251Y018556D01*
+X011278Y018584D01*
+X011307Y018610D01*
+X011338Y018633D01*
+X011372Y018652D01*
+X011408Y018668D01*
+X011444Y018680D01*
+X011482Y018689D01*
+X011521Y018694D01*
+X011560Y018695D01*
+X011598Y018692D01*
+X011637Y018685D01*
+X011674Y018675D01*
+X011710Y018660D01*
+X011745Y018643D01*
+X011778Y018622D01*
+X011808Y018597D01*
+X011836Y018570D01*
+X011861Y018540D01*
+X011883Y018508D01*
+X011901Y018474D01*
+X011916Y018438D01*
+X011928Y018401D01*
+X011936Y018363D01*
+X011940Y018324D01*
+X011940Y018286D01*
+X011936Y018247D01*
+X011928Y018209D01*
+X011916Y018172D01*
+X011901Y018136D01*
+X011883Y018102D01*
+X011861Y018070D01*
+X011836Y018040D01*
+X011808Y018013D01*
+X011778Y017988D01*
+X011745Y017967D01*
+X011710Y017950D01*
+X011674Y017935D01*
+X011637Y017925D01*
+X011598Y017918D01*
+X011560Y017915D01*
+X011521Y017916D01*
+X011482Y017921D01*
+X011444Y017930D01*
+X011408Y017942D01*
+X011372Y017958D01*
+X011338Y017977D01*
+X011307Y018000D01*
+X011278Y018026D01*
+X011251Y018054D01*
+X011228Y018085D01*
+X011207Y018118D01*
+X011191Y018154D01*
+X011177Y018190D01*
+X011168Y018228D01*
+X011162Y018266D01*
+X011160Y018305D01*
+X011150Y017905D02*
+X011950Y018705D01*
+X010736Y018129D02*
+X010738Y018168D01*
+X010744Y018206D01*
+X010753Y018244D01*
+X010767Y018280D01*
+X010783Y018316D01*
+X010804Y018349D01*
+X010827Y018380D01*
+X010854Y018408D01*
+X010883Y018434D01*
+X010914Y018457D01*
+X010948Y018476D01*
+X010984Y018492D01*
+X011020Y018504D01*
+X011058Y018513D01*
+X011097Y018518D01*
+X011136Y018519D01*
+X011174Y018516D01*
+X011213Y018509D01*
+X011250Y018499D01*
+X011286Y018484D01*
+X011321Y018467D01*
+X011354Y018446D01*
+X011384Y018421D01*
+X011412Y018394D01*
+X011437Y018364D01*
+X011459Y018332D01*
+X011477Y018298D01*
+X011492Y018262D01*
+X011504Y018225D01*
+X011512Y018187D01*
+X011516Y018148D01*
+X011516Y018110D01*
+X011512Y018071D01*
+X011504Y018033D01*
+X011492Y017996D01*
+X011477Y017960D01*
+X011459Y017926D01*
+X011437Y017894D01*
+X011412Y017864D01*
+X011384Y017837D01*
+X011354Y017812D01*
+X011321Y017791D01*
+X011286Y017774D01*
+X011250Y017759D01*
+X011213Y017749D01*
+X011174Y017742D01*
+X011136Y017739D01*
+X011097Y017740D01*
+X011058Y017745D01*
+X011020Y017754D01*
+X010984Y017766D01*
+X010948Y017782D01*
+X010914Y017801D01*
+X010883Y017824D01*
+X010854Y017850D01*
+X010827Y017878D01*
+X010804Y017909D01*
+X010783Y017942D01*
+X010767Y017978D01*
+X010753Y018014D01*
+X010744Y018052D01*
+X010738Y018090D01*
+X010736Y018129D01*
+X010726Y017729D02*
+X011526Y018529D01*
+X011550Y017705D02*
+X011150Y017705D01*
+X011550Y017705D02*
+X011950Y018105D01*
+X011950Y017305D01*
+X011550Y017705D01*
+X011584Y017281D02*
+X011586Y017320D01*
+X011592Y017358D01*
+X011601Y017396D01*
+X011615Y017432D01*
+X011631Y017468D01*
+X011652Y017501D01*
+X011675Y017532D01*
+X011702Y017560D01*
+X011731Y017586D01*
+X011762Y017609D01*
+X011796Y017628D01*
+X011832Y017644D01*
+X011868Y017656D01*
+X011906Y017665D01*
+X011945Y017670D01*
+X011984Y017671D01*
+X012022Y017668D01*
+X012061Y017661D01*
+X012098Y017651D01*
+X012134Y017636D01*
+X012169Y017619D01*
+X012202Y017598D01*
+X012232Y017573D01*
+X012260Y017546D01*
+X012285Y017516D01*
+X012307Y017484D01*
+X012325Y017450D01*
+X012340Y017414D01*
+X012352Y017377D01*
+X012360Y017339D01*
+X012364Y017300D01*
+X012364Y017262D01*
+X012360Y017223D01*
+X012352Y017185D01*
+X012340Y017148D01*
+X012325Y017112D01*
+X012307Y017078D01*
+X012285Y017046D01*
+X012260Y017016D01*
+X012232Y016989D01*
+X012202Y016964D01*
+X012169Y016943D01*
+X012134Y016926D01*
+X012098Y016911D01*
+X012061Y016901D01*
+X012022Y016894D01*
+X011984Y016891D01*
+X011945Y016892D01*
+X011906Y016897D01*
+X011868Y016906D01*
+X011832Y016918D01*
+X011796Y016934D01*
+X011762Y016953D01*
+X011731Y016976D01*
+X011702Y017002D01*
+X011675Y017030D01*
+X011652Y017061D01*
+X011631Y017094D01*
+X011615Y017130D01*
+X011601Y017166D01*
+X011592Y017204D01*
+X011586Y017242D01*
+X011584Y017281D01*
+X011574Y016881D02*
+X012374Y017681D01*
+X011160Y017105D02*
+X011162Y017144D01*
+X011168Y017182D01*
+X011177Y017220D01*
+X011191Y017256D01*
+X011207Y017292D01*
+X011228Y017325D01*
+X011251Y017356D01*
+X011278Y017384D01*
+X011307Y017410D01*
+X011338Y017433D01*
+X011372Y017452D01*
+X011408Y017468D01*
+X011444Y017480D01*
+X011482Y017489D01*
+X011521Y017494D01*
+X011560Y017495D01*
+X011598Y017492D01*
+X011637Y017485D01*
+X011674Y017475D01*
+X011710Y017460D01*
+X011745Y017443D01*
+X011778Y017422D01*
+X011808Y017397D01*
+X011836Y017370D01*
+X011861Y017340D01*
+X011883Y017308D01*
+X011901Y017274D01*
+X011916Y017238D01*
+X011928Y017201D01*
+X011936Y017163D01*
+X011940Y017124D01*
+X011940Y017086D01*
+X011936Y017047D01*
+X011928Y017009D01*
+X011916Y016972D01*
+X011901Y016936D01*
+X011883Y016902D01*
+X011861Y016870D01*
+X011836Y016840D01*
+X011808Y016813D01*
+X011778Y016788D01*
+X011745Y016767D01*
+X011710Y016750D01*
+X011674Y016735D01*
+X011637Y016725D01*
+X011598Y016718D01*
+X011560Y016715D01*
+X011521Y016716D01*
+X011482Y016721D01*
+X011444Y016730D01*
+X011408Y016742D01*
+X011372Y016758D01*
+X011338Y016777D01*
+X011307Y016800D01*
+X011278Y016826D01*
+X011251Y016854D01*
+X011228Y016885D01*
+X011207Y016918D01*
+X011191Y016954D01*
+X011177Y016990D01*
+X011168Y017028D01*
+X011162Y017066D01*
+X011160Y017105D01*
+X011150Y016705D02*
+X011950Y017505D01*
+X010736Y017281D02*
+X010738Y017320D01*
+X010744Y017358D01*
+X010753Y017396D01*
+X010767Y017432D01*
+X010783Y017468D01*
+X010804Y017501D01*
+X010827Y017532D01*
+X010854Y017560D01*
+X010883Y017586D01*
+X010914Y017609D01*
+X010948Y017628D01*
+X010984Y017644D01*
+X011020Y017656D01*
+X011058Y017665D01*
+X011097Y017670D01*
+X011136Y017671D01*
+X011174Y017668D01*
+X011213Y017661D01*
+X011250Y017651D01*
+X011286Y017636D01*
+X011321Y017619D01*
+X011354Y017598D01*
+X011384Y017573D01*
+X011412Y017546D01*
+X011437Y017516D01*
+X011459Y017484D01*
+X011477Y017450D01*
+X011492Y017414D01*
+X011504Y017377D01*
+X011512Y017339D01*
+X011516Y017300D01*
+X011516Y017262D01*
+X011512Y017223D01*
+X011504Y017185D01*
+X011492Y017148D01*
+X011477Y017112D01*
+X011459Y017078D01*
+X011437Y017046D01*
+X011412Y017016D01*
+X011384Y016989D01*
+X011354Y016964D01*
+X011321Y016943D01*
+X011286Y016926D01*
+X011250Y016911D01*
+X011213Y016901D01*
+X011174Y016894D01*
+X011136Y016891D01*
+X011097Y016892D01*
+X011058Y016897D01*
+X011020Y016906D01*
+X010984Y016918D01*
+X010948Y016934D01*
+X010914Y016953D01*
+X010883Y016976D01*
+X010854Y017002D01*
+X010827Y017030D01*
+X010804Y017061D01*
+X010783Y017094D01*
+X010767Y017130D01*
+X010753Y017166D01*
+X010744Y017204D01*
+X010738Y017242D01*
+X010736Y017281D01*
+X010726Y016881D02*
+X011526Y017681D01*
+X010560Y017705D02*
+X010562Y017744D01*
+X010568Y017782D01*
+X010577Y017820D01*
+X010591Y017856D01*
+X010607Y017892D01*
+X010628Y017925D01*
+X010651Y017956D01*
+X010678Y017984D01*
+X010707Y018010D01*
+X010738Y018033D01*
+X010772Y018052D01*
+X010808Y018068D01*
+X010844Y018080D01*
+X010882Y018089D01*
+X010921Y018094D01*
+X010960Y018095D01*
+X010998Y018092D01*
+X011037Y018085D01*
+X011074Y018075D01*
+X011110Y018060D01*
+X011145Y018043D01*
+X011178Y018022D01*
+X011208Y017997D01*
+X011236Y017970D01*
+X011261Y017940D01*
+X011283Y017908D01*
+X011301Y017874D01*
+X011316Y017838D01*
+X011328Y017801D01*
+X011336Y017763D01*
+X011340Y017724D01*
+X011340Y017686D01*
+X011336Y017647D01*
+X011328Y017609D01*
+X011316Y017572D01*
+X011301Y017536D01*
+X011283Y017502D01*
+X011261Y017470D01*
+X011236Y017440D01*
+X011208Y017413D01*
+X011178Y017388D01*
+X011145Y017367D01*
+X011110Y017350D01*
+X011074Y017335D01*
+X011037Y017325D01*
+X010998Y017318D01*
+X010960Y017315D01*
+X010921Y017316D01*
+X010882Y017321D01*
+X010844Y017330D01*
+X010808Y017342D01*
+X010772Y017358D01*
+X010738Y017377D01*
+X010707Y017400D01*
+X010678Y017426D01*
+X010651Y017454D01*
+X010628Y017485D01*
+X010607Y017518D01*
+X010591Y017554D01*
+X010577Y017590D01*
+X010568Y017628D01*
+X010562Y017666D01*
+X010560Y017705D01*
+X010550Y017305D02*
+X011350Y018105D01*
+X010060Y017655D02*
+X010062Y017694D01*
+X010068Y017732D01*
+X010077Y017770D01*
+X010091Y017806D01*
+X010107Y017842D01*
+X010128Y017875D01*
+X010151Y017906D01*
+X010178Y017934D01*
+X010207Y017960D01*
+X010238Y017983D01*
+X010272Y018002D01*
+X010308Y018018D01*
+X010344Y018030D01*
+X010382Y018039D01*
+X010421Y018044D01*
+X010460Y018045D01*
+X010498Y018042D01*
+X010537Y018035D01*
+X010574Y018025D01*
+X010610Y018010D01*
+X010645Y017993D01*
+X010678Y017972D01*
+X010708Y017947D01*
+X010736Y017920D01*
+X010761Y017890D01*
+X010783Y017858D01*
+X010801Y017824D01*
+X010816Y017788D01*
+X010828Y017751D01*
+X010836Y017713D01*
+X010840Y017674D01*
+X010840Y017636D01*
+X010836Y017597D01*
+X010828Y017559D01*
+X010816Y017522D01*
+X010801Y017486D01*
+X010783Y017452D01*
+X010761Y017420D01*
+X010736Y017390D01*
+X010708Y017363D01*
+X010678Y017338D01*
+X010645Y017317D01*
+X010610Y017300D01*
+X010574Y017285D01*
+X010537Y017275D01*
+X010498Y017268D01*
+X010460Y017265D01*
+X010421Y017266D01*
+X010382Y017271D01*
+X010344Y017280D01*
+X010308Y017292D01*
+X010272Y017308D01*
+X010238Y017327D01*
+X010207Y017350D01*
+X010178Y017376D01*
+X010151Y017404D01*
+X010128Y017435D01*
+X010107Y017468D01*
+X010091Y017504D01*
+X010077Y017540D01*
+X010068Y017578D01*
+X010062Y017616D01*
+X010060Y017655D01*
+X010050Y017255D02*
+X010850Y018055D01*
+X008960Y017905D02*
+X008962Y017944D01*
+X008968Y017982D01*
+X008977Y018020D01*
+X008991Y018056D01*
+X009007Y018092D01*
+X009028Y018125D01*
+X009051Y018156D01*
+X009078Y018184D01*
+X009107Y018210D01*
+X009138Y018233D01*
+X009172Y018252D01*
+X009208Y018268D01*
+X009244Y018280D01*
+X009282Y018289D01*
+X009321Y018294D01*
+X009360Y018295D01*
+X009398Y018292D01*
+X009437Y018285D01*
+X009474Y018275D01*
+X009510Y018260D01*
+X009545Y018243D01*
+X009578Y018222D01*
+X009608Y018197D01*
+X009636Y018170D01*
+X009661Y018140D01*
+X009683Y018108D01*
+X009701Y018074D01*
+X009716Y018038D01*
+X009728Y018001D01*
+X009736Y017963D01*
+X009740Y017924D01*
+X009740Y017886D01*
+X009736Y017847D01*
+X009728Y017809D01*
+X009716Y017772D01*
+X009701Y017736D01*
+X009683Y017702D01*
+X009661Y017670D01*
+X009636Y017640D01*
+X009608Y017613D01*
+X009578Y017588D01*
+X009545Y017567D01*
+X009510Y017550D01*
+X009474Y017535D01*
+X009437Y017525D01*
+X009398Y017518D01*
+X009360Y017515D01*
+X009321Y017516D01*
+X009282Y017521D01*
+X009244Y017530D01*
+X009208Y017542D01*
+X009172Y017558D01*
+X009138Y017577D01*
+X009107Y017600D01*
+X009078Y017626D01*
+X009051Y017654D01*
+X009028Y017685D01*
+X009007Y017718D01*
+X008991Y017754D01*
+X008977Y017790D01*
+X008968Y017828D01*
+X008962Y017866D01*
+X008960Y017905D01*
+X008950Y017505D02*
+X009750Y018305D01*
+X005810Y015205D02*
+X005812Y015244D01*
+X005818Y015282D01*
+X005827Y015320D01*
+X005841Y015356D01*
+X005857Y015392D01*
+X005878Y015425D01*
+X005901Y015456D01*
+X005928Y015484D01*
+X005957Y015510D01*
+X005988Y015533D01*
+X006022Y015552D01*
+X006058Y015568D01*
+X006094Y015580D01*
+X006132Y015589D01*
+X006171Y015594D01*
+X006210Y015595D01*
+X006248Y015592D01*
+X006287Y015585D01*
+X006324Y015575D01*
+X006360Y015560D01*
+X006395Y015543D01*
+X006428Y015522D01*
+X006458Y015497D01*
+X006486Y015470D01*
+X006511Y015440D01*
+X006533Y015408D01*
+X006551Y015374D01*
+X006566Y015338D01*
+X006578Y015301D01*
+X006586Y015263D01*
+X006590Y015224D01*
+X006590Y015186D01*
+X006586Y015147D01*
+X006578Y015109D01*
+X006566Y015072D01*
+X006551Y015036D01*
+X006533Y015002D01*
+X006511Y014970D01*
+X006486Y014940D01*
+X006458Y014913D01*
+X006428Y014888D01*
+X006395Y014867D01*
+X006360Y014850D01*
+X006324Y014835D01*
+X006287Y014825D01*
+X006248Y014818D01*
+X006210Y014815D01*
+X006171Y014816D01*
+X006132Y014821D01*
+X006094Y014830D01*
+X006058Y014842D01*
+X006022Y014858D01*
+X005988Y014877D01*
+X005957Y014900D01*
+X005928Y014926D01*
+X005901Y014954D01*
+X005878Y014985D01*
+X005857Y015018D01*
+X005841Y015054D01*
+X005827Y015090D01*
+X005818Y015128D01*
+X005812Y015166D01*
+X005810Y015205D01*
+X005800Y014805D02*
+X006600Y015605D01*
+X006510Y014755D02*
+X006512Y014794D01*
+X006518Y014832D01*
+X006527Y014870D01*
+X006541Y014906D01*
+X006557Y014942D01*
+X006578Y014975D01*
+X006601Y015006D01*
+X006628Y015034D01*
+X006657Y015060D01*
+X006688Y015083D01*
+X006722Y015102D01*
+X006758Y015118D01*
+X006794Y015130D01*
+X006832Y015139D01*
+X006871Y015144D01*
+X006910Y015145D01*
+X006948Y015142D01*
+X006987Y015135D01*
+X007024Y015125D01*
+X007060Y015110D01*
+X007095Y015093D01*
+X007128Y015072D01*
+X007158Y015047D01*
+X007186Y015020D01*
+X007211Y014990D01*
+X007233Y014958D01*
+X007251Y014924D01*
+X007266Y014888D01*
+X007278Y014851D01*
+X007286Y014813D01*
+X007290Y014774D01*
+X007290Y014736D01*
+X007286Y014697D01*
+X007278Y014659D01*
+X007266Y014622D01*
+X007251Y014586D01*
+X007233Y014552D01*
+X007211Y014520D01*
+X007186Y014490D01*
+X007158Y014463D01*
+X007128Y014438D01*
+X007095Y014417D01*
+X007060Y014400D01*
+X007024Y014385D01*
+X006987Y014375D01*
+X006948Y014368D01*
+X006910Y014365D01*
+X006871Y014366D01*
+X006832Y014371D01*
+X006794Y014380D01*
+X006758Y014392D01*
+X006722Y014408D01*
+X006688Y014427D01*
+X006657Y014450D01*
+X006628Y014476D01*
+X006601Y014504D01*
+X006578Y014535D01*
+X006557Y014568D01*
+X006541Y014604D01*
+X006527Y014640D01*
+X006518Y014678D01*
+X006512Y014716D01*
+X006510Y014755D01*
+X006500Y014355D02*
+X007300Y015155D01*
+X007460Y014705D02*
+X007462Y014744D01*
+X007468Y014782D01*
+X007477Y014820D01*
+X007491Y014856D01*
+X007507Y014892D01*
+X007528Y014925D01*
+X007551Y014956D01*
+X007578Y014984D01*
+X007607Y015010D01*
+X007638Y015033D01*
+X007672Y015052D01*
+X007708Y015068D01*
+X007744Y015080D01*
+X007782Y015089D01*
+X007821Y015094D01*
+X007860Y015095D01*
+X007898Y015092D01*
+X007937Y015085D01*
+X007974Y015075D01*
+X008010Y015060D01*
+X008045Y015043D01*
+X008078Y015022D01*
+X008108Y014997D01*
+X008136Y014970D01*
+X008161Y014940D01*
+X008183Y014908D01*
+X008201Y014874D01*
+X008216Y014838D01*
+X008228Y014801D01*
+X008236Y014763D01*
+X008240Y014724D01*
+X008240Y014686D01*
+X008236Y014647D01*
+X008228Y014609D01*
+X008216Y014572D01*
+X008201Y014536D01*
+X008183Y014502D01*
+X008161Y014470D01*
+X008136Y014440D01*
+X008108Y014413D01*
+X008078Y014388D01*
+X008045Y014367D01*
+X008010Y014350D01*
+X007974Y014335D01*
+X007937Y014325D01*
+X007898Y014318D01*
+X007860Y014315D01*
+X007821Y014316D01*
+X007782Y014321D01*
+X007744Y014330D01*
+X007708Y014342D01*
+X007672Y014358D01*
+X007638Y014377D01*
+X007607Y014400D01*
+X007578Y014426D01*
+X007551Y014454D01*
+X007528Y014485D01*
+X007507Y014518D01*
+X007491Y014554D01*
+X007477Y014590D01*
+X007468Y014628D01*
+X007462Y014666D01*
+X007460Y014705D01*
+X007450Y014305D02*
+X008250Y015105D01*
+X008760Y014905D02*
+X008762Y014944D01*
+X008768Y014982D01*
+X008777Y015020D01*
+X008791Y015056D01*
+X008807Y015092D01*
+X008828Y015125D01*
+X008851Y015156D01*
+X008878Y015184D01*
+X008907Y015210D01*
+X008938Y015233D01*
+X008972Y015252D01*
+X009008Y015268D01*
+X009044Y015280D01*
+X009082Y015289D01*
+X009121Y015294D01*
+X009160Y015295D01*
+X009198Y015292D01*
+X009237Y015285D01*
+X009274Y015275D01*
+X009310Y015260D01*
+X009345Y015243D01*
+X009378Y015222D01*
+X009408Y015197D01*
+X009436Y015170D01*
+X009461Y015140D01*
+X009483Y015108D01*
+X009501Y015074D01*
+X009516Y015038D01*
+X009528Y015001D01*
+X009536Y014963D01*
+X009540Y014924D01*
+X009540Y014886D01*
+X009536Y014847D01*
+X009528Y014809D01*
+X009516Y014772D01*
+X009501Y014736D01*
+X009483Y014702D01*
+X009461Y014670D01*
+X009436Y014640D01*
+X009408Y014613D01*
+X009378Y014588D01*
+X009345Y014567D01*
+X009310Y014550D01*
+X009274Y014535D01*
+X009237Y014525D01*
+X009198Y014518D01*
+X009160Y014515D01*
+X009121Y014516D01*
+X009082Y014521D01*
+X009044Y014530D01*
+X009008Y014542D01*
+X008972Y014558D01*
+X008938Y014577D01*
+X008907Y014600D01*
+X008878Y014626D01*
+X008851Y014654D01*
+X008828Y014685D01*
+X008807Y014718D01*
+X008791Y014754D01*
+X008777Y014790D01*
+X008768Y014828D01*
+X008762Y014866D01*
+X008760Y014905D01*
+X008750Y014505D02*
+X009550Y015305D01*
+X007560Y014305D02*
+X007562Y014344D01*
+X007568Y014382D01*
+X007577Y014420D01*
+X007591Y014456D01*
+X007607Y014492D01*
+X007628Y014525D01*
+X007651Y014556D01*
+X007678Y014584D01*
+X007707Y014610D01*
+X007738Y014633D01*
+X007772Y014652D01*
+X007808Y014668D01*
+X007844Y014680D01*
+X007882Y014689D01*
+X007921Y014694D01*
+X007960Y014695D01*
+X007998Y014692D01*
+X008037Y014685D01*
+X008074Y014675D01*
+X008110Y014660D01*
+X008145Y014643D01*
+X008178Y014622D01*
+X008208Y014597D01*
+X008236Y014570D01*
+X008261Y014540D01*
+X008283Y014508D01*
+X008301Y014474D01*
+X008316Y014438D01*
+X008328Y014401D01*
+X008336Y014363D01*
+X008340Y014324D01*
+X008340Y014286D01*
+X008336Y014247D01*
+X008328Y014209D01*
+X008316Y014172D01*
+X008301Y014136D01*
+X008283Y014102D01*
+X008261Y014070D01*
+X008236Y014040D01*
+X008208Y014013D01*
+X008178Y013988D01*
+X008145Y013967D01*
+X008110Y013950D01*
+X008074Y013935D01*
+X008037Y013925D01*
+X007998Y013918D01*
+X007960Y013915D01*
+X007921Y013916D01*
+X007882Y013921D01*
+X007844Y013930D01*
+X007808Y013942D01*
+X007772Y013958D01*
+X007738Y013977D01*
+X007707Y014000D01*
+X007678Y014026D01*
+X007651Y014054D01*
+X007628Y014085D01*
+X007607Y014118D01*
+X007591Y014154D01*
+X007577Y014190D01*
+X007568Y014228D01*
+X007562Y014266D01*
+X007560Y014305D01*
+X007550Y013905D02*
+X008350Y014705D01*
+X006910Y014305D02*
+X006912Y014344D01*
+X006918Y014382D01*
+X006927Y014420D01*
+X006941Y014456D01*
+X006957Y014492D01*
+X006978Y014525D01*
+X007001Y014556D01*
+X007028Y014584D01*
+X007057Y014610D01*
+X007088Y014633D01*
+X007122Y014652D01*
+X007158Y014668D01*
+X007194Y014680D01*
+X007232Y014689D01*
+X007271Y014694D01*
+X007310Y014695D01*
+X007348Y014692D01*
+X007387Y014685D01*
+X007424Y014675D01*
+X007460Y014660D01*
+X007495Y014643D01*
+X007528Y014622D01*
+X007558Y014597D01*
+X007586Y014570D01*
+X007611Y014540D01*
+X007633Y014508D01*
+X007651Y014474D01*
+X007666Y014438D01*
+X007678Y014401D01*
+X007686Y014363D01*
+X007690Y014324D01*
+X007690Y014286D01*
+X007686Y014247D01*
+X007678Y014209D01*
+X007666Y014172D01*
+X007651Y014136D01*
+X007633Y014102D01*
+X007611Y014070D01*
+X007586Y014040D01*
+X007558Y014013D01*
+X007528Y013988D01*
+X007495Y013967D01*
+X007460Y013950D01*
+X007424Y013935D01*
+X007387Y013925D01*
+X007348Y013918D01*
+X007310Y013915D01*
+X007271Y013916D01*
+X007232Y013921D01*
+X007194Y013930D01*
+X007158Y013942D01*
+X007122Y013958D01*
+X007088Y013977D01*
+X007057Y014000D01*
+X007028Y014026D01*
+X007001Y014054D01*
+X006978Y014085D01*
+X006957Y014118D01*
+X006941Y014154D01*
+X006927Y014190D01*
+X006918Y014228D01*
+X006912Y014266D01*
+X006910Y014305D01*
+X006900Y013905D02*
+X007700Y014705D01*
+X007210Y013155D02*
+X007212Y013194D01*
+X007218Y013232D01*
+X007227Y013270D01*
+X007241Y013306D01*
+X007257Y013342D01*
+X007278Y013375D01*
+X007301Y013406D01*
+X007328Y013434D01*
+X007357Y013460D01*
+X007388Y013483D01*
+X007422Y013502D01*
+X007458Y013518D01*
+X007494Y013530D01*
+X007532Y013539D01*
+X007571Y013544D01*
+X007610Y013545D01*
+X007648Y013542D01*
+X007687Y013535D01*
+X007724Y013525D01*
+X007760Y013510D01*
+X007795Y013493D01*
+X007828Y013472D01*
+X007858Y013447D01*
+X007886Y013420D01*
+X007911Y013390D01*
+X007933Y013358D01*
+X007951Y013324D01*
+X007966Y013288D01*
+X007978Y013251D01*
+X007986Y013213D01*
+X007990Y013174D01*
+X007990Y013136D01*
+X007986Y013097D01*
+X007978Y013059D01*
+X007966Y013022D01*
+X007951Y012986D01*
+X007933Y012952D01*
+X007911Y012920D01*
+X007886Y012890D01*
+X007858Y012863D01*
+X007828Y012838D01*
+X007795Y012817D01*
+X007760Y012800D01*
+X007724Y012785D01*
+X007687Y012775D01*
+X007648Y012768D01*
+X007610Y012765D01*
+X007571Y012766D01*
+X007532Y012771D01*
+X007494Y012780D01*
+X007458Y012792D01*
+X007422Y012808D01*
+X007388Y012827D01*
+X007357Y012850D01*
+X007328Y012876D01*
+X007301Y012904D01*
+X007278Y012935D01*
+X007257Y012968D01*
+X007241Y013004D01*
+X007227Y013040D01*
+X007218Y013078D01*
+X007212Y013116D01*
+X007210Y013155D01*
+X007200Y012755D02*
+X008000Y013555D01*
+X006660Y013155D02*
+X006662Y013194D01*
+X006668Y013232D01*
+X006677Y013270D01*
+X006691Y013306D01*
+X006707Y013342D01*
+X006728Y013375D01*
+X006751Y013406D01*
+X006778Y013434D01*
+X006807Y013460D01*
+X006838Y013483D01*
+X006872Y013502D01*
+X006908Y013518D01*
+X006944Y013530D01*
+X006982Y013539D01*
+X007021Y013544D01*
+X007060Y013545D01*
+X007098Y013542D01*
+X007137Y013535D01*
+X007174Y013525D01*
+X007210Y013510D01*
+X007245Y013493D01*
+X007278Y013472D01*
+X007308Y013447D01*
+X007336Y013420D01*
+X007361Y013390D01*
+X007383Y013358D01*
+X007401Y013324D01*
+X007416Y013288D01*
+X007428Y013251D01*
+X007436Y013213D01*
+X007440Y013174D01*
+X007440Y013136D01*
+X007436Y013097D01*
+X007428Y013059D01*
+X007416Y013022D01*
+X007401Y012986D01*
+X007383Y012952D01*
+X007361Y012920D01*
+X007336Y012890D01*
+X007308Y012863D01*
+X007278Y012838D01*
+X007245Y012817D01*
+X007210Y012800D01*
+X007174Y012785D01*
+X007137Y012775D01*
+X007098Y012768D01*
+X007060Y012765D01*
+X007021Y012766D01*
+X006982Y012771D01*
+X006944Y012780D01*
+X006908Y012792D01*
+X006872Y012808D01*
+X006838Y012827D01*
+X006807Y012850D01*
+X006778Y012876D01*
+X006751Y012904D01*
+X006728Y012935D01*
+X006707Y012968D01*
+X006691Y013004D01*
+X006677Y013040D01*
+X006668Y013078D01*
+X006662Y013116D01*
+X006660Y013155D01*
+X006650Y012755D02*
+X007450Y013555D01*
+X004960Y013055D02*
+X004962Y013094D01*
+X004968Y013132D01*
+X004977Y013170D01*
+X004991Y013206D01*
+X005007Y013242D01*
+X005028Y013275D01*
+X005051Y013306D01*
+X005078Y013334D01*
+X005107Y013360D01*
+X005138Y013383D01*
+X005172Y013402D01*
+X005208Y013418D01*
+X005244Y013430D01*
+X005282Y013439D01*
+X005321Y013444D01*
+X005360Y013445D01*
+X005398Y013442D01*
+X005437Y013435D01*
+X005474Y013425D01*
+X005510Y013410D01*
+X005545Y013393D01*
+X005578Y013372D01*
+X005608Y013347D01*
+X005636Y013320D01*
+X005661Y013290D01*
+X005683Y013258D01*
+X005701Y013224D01*
+X005716Y013188D01*
+X005728Y013151D01*
+X005736Y013113D01*
+X005740Y013074D01*
+X005740Y013036D01*
+X005736Y012997D01*
+X005728Y012959D01*
+X005716Y012922D01*
+X005701Y012886D01*
+X005683Y012852D01*
+X005661Y012820D01*
+X005636Y012790D01*
+X005608Y012763D01*
+X005578Y012738D01*
+X005545Y012717D01*
+X005510Y012700D01*
+X005474Y012685D01*
+X005437Y012675D01*
+X005398Y012668D01*
+X005360Y012665D01*
+X005321Y012666D01*
+X005282Y012671D01*
+X005244Y012680D01*
+X005208Y012692D01*
+X005172Y012708D01*
+X005138Y012727D01*
+X005107Y012750D01*
+X005078Y012776D01*
+X005051Y012804D01*
+X005028Y012835D01*
+X005007Y012868D01*
+X004991Y012904D01*
+X004977Y012940D01*
+X004968Y012978D01*
+X004962Y013016D01*
+X004960Y013055D01*
+X004950Y012655D02*
+X005750Y013455D01*
+X004560Y013055D02*
+X004562Y013094D01*
+X004568Y013132D01*
+X004577Y013170D01*
+X004591Y013206D01*
+X004607Y013242D01*
+X004628Y013275D01*
+X004651Y013306D01*
+X004678Y013334D01*
+X004707Y013360D01*
+X004738Y013383D01*
+X004772Y013402D01*
+X004808Y013418D01*
+X004844Y013430D01*
+X004882Y013439D01*
+X004921Y013444D01*
+X004960Y013445D01*
+X004998Y013442D01*
+X005037Y013435D01*
+X005074Y013425D01*
+X005110Y013410D01*
+X005145Y013393D01*
+X005178Y013372D01*
+X005208Y013347D01*
+X005236Y013320D01*
+X005261Y013290D01*
+X005283Y013258D01*
+X005301Y013224D01*
+X005316Y013188D01*
+X005328Y013151D01*
+X005336Y013113D01*
+X005340Y013074D01*
+X005340Y013036D01*
+X005336Y012997D01*
+X005328Y012959D01*
+X005316Y012922D01*
+X005301Y012886D01*
+X005283Y012852D01*
+X005261Y012820D01*
+X005236Y012790D01*
+X005208Y012763D01*
+X005178Y012738D01*
+X005145Y012717D01*
+X005110Y012700D01*
+X005074Y012685D01*
+X005037Y012675D01*
+X004998Y012668D01*
+X004960Y012665D01*
+X004921Y012666D01*
+X004882Y012671D01*
+X004844Y012680D01*
+X004808Y012692D01*
+X004772Y012708D01*
+X004738Y012727D01*
+X004707Y012750D01*
+X004678Y012776D01*
+X004651Y012804D01*
+X004628Y012835D01*
+X004607Y012868D01*
+X004591Y012904D01*
+X004577Y012940D01*
+X004568Y012978D01*
+X004562Y013016D01*
+X004560Y013055D01*
+X004550Y012655D02*
+X005350Y013455D01*
+X004760Y012655D02*
+X004762Y012694D01*
+X004768Y012732D01*
+X004777Y012770D01*
+X004791Y012806D01*
+X004807Y012842D01*
+X004828Y012875D01*
+X004851Y012906D01*
+X004878Y012934D01*
+X004907Y012960D01*
+X004938Y012983D01*
+X004972Y013002D01*
+X005008Y013018D01*
+X005044Y013030D01*
+X005082Y013039D01*
+X005121Y013044D01*
+X005160Y013045D01*
+X005198Y013042D01*
+X005237Y013035D01*
+X005274Y013025D01*
+X005310Y013010D01*
+X005345Y012993D01*
+X005378Y012972D01*
+X005408Y012947D01*
+X005436Y012920D01*
+X005461Y012890D01*
+X005483Y012858D01*
+X005501Y012824D01*
+X005516Y012788D01*
+X005528Y012751D01*
+X005536Y012713D01*
+X005540Y012674D01*
+X005540Y012636D01*
+X005536Y012597D01*
+X005528Y012559D01*
+X005516Y012522D01*
+X005501Y012486D01*
+X005483Y012452D01*
+X005461Y012420D01*
+X005436Y012390D01*
+X005408Y012363D01*
+X005378Y012338D01*
+X005345Y012317D01*
+X005310Y012300D01*
+X005274Y012285D01*
+X005237Y012275D01*
+X005198Y012268D01*
+X005160Y012265D01*
+X005121Y012266D01*
+X005082Y012271D01*
+X005044Y012280D01*
+X005008Y012292D01*
+X004972Y012308D01*
+X004938Y012327D01*
+X004907Y012350D01*
+X004878Y012376D01*
+X004851Y012404D01*
+X004828Y012435D01*
+X004807Y012468D01*
+X004791Y012504D01*
+X004777Y012540D01*
+X004768Y012578D01*
+X004762Y012616D01*
+X004760Y012655D01*
+X004750Y012255D02*
+X005550Y013055D01*
+X004160Y014105D02*
+X004162Y014144D01*
+X004168Y014182D01*
+X004177Y014220D01*
+X004191Y014256D01*
+X004207Y014292D01*
+X004228Y014325D01*
+X004251Y014356D01*
+X004278Y014384D01*
+X004307Y014410D01*
+X004338Y014433D01*
+X004372Y014452D01*
+X004408Y014468D01*
+X004444Y014480D01*
+X004482Y014489D01*
+X004521Y014494D01*
+X004560Y014495D01*
+X004598Y014492D01*
+X004637Y014485D01*
+X004674Y014475D01*
+X004710Y014460D01*
+X004745Y014443D01*
+X004778Y014422D01*
+X004808Y014397D01*
+X004836Y014370D01*
+X004861Y014340D01*
+X004883Y014308D01*
+X004901Y014274D01*
+X004916Y014238D01*
+X004928Y014201D01*
+X004936Y014163D01*
+X004940Y014124D01*
+X004940Y014086D01*
+X004936Y014047D01*
+X004928Y014009D01*
+X004916Y013972D01*
+X004901Y013936D01*
+X004883Y013902D01*
+X004861Y013870D01*
+X004836Y013840D01*
+X004808Y013813D01*
+X004778Y013788D01*
+X004745Y013767D01*
+X004710Y013750D01*
+X004674Y013735D01*
+X004637Y013725D01*
+X004598Y013718D01*
+X004560Y013715D01*
+X004521Y013716D01*
+X004482Y013721D01*
+X004444Y013730D01*
+X004408Y013742D01*
+X004372Y013758D01*
+X004338Y013777D01*
+X004307Y013800D01*
+X004278Y013826D01*
+X004251Y013854D01*
+X004228Y013885D01*
+X004207Y013918D01*
+X004191Y013954D01*
+X004177Y013990D01*
+X004168Y014028D01*
+X004162Y014066D01*
+X004160Y014105D01*
+X004150Y013705D02*
+X004950Y014505D01*
+X004410Y015005D02*
+X004412Y015044D01*
+X004418Y015082D01*
+X004427Y015120D01*
+X004441Y015156D01*
+X004457Y015192D01*
+X004478Y015225D01*
+X004501Y015256D01*
+X004528Y015284D01*
+X004557Y015310D01*
+X004588Y015333D01*
+X004622Y015352D01*
+X004658Y015368D01*
+X004694Y015380D01*
+X004732Y015389D01*
+X004771Y015394D01*
+X004810Y015395D01*
+X004848Y015392D01*
+X004887Y015385D01*
+X004924Y015375D01*
+X004960Y015360D01*
+X004995Y015343D01*
+X005028Y015322D01*
+X005058Y015297D01*
+X005086Y015270D01*
+X005111Y015240D01*
+X005133Y015208D01*
+X005151Y015174D01*
+X005166Y015138D01*
+X005178Y015101D01*
+X005186Y015063D01*
+X005190Y015024D01*
+X005190Y014986D01*
+X005186Y014947D01*
+X005178Y014909D01*
+X005166Y014872D01*
+X005151Y014836D01*
+X005133Y014802D01*
+X005111Y014770D01*
+X005086Y014740D01*
+X005058Y014713D01*
+X005028Y014688D01*
+X004995Y014667D01*
+X004960Y014650D01*
+X004924Y014635D01*
+X004887Y014625D01*
+X004848Y014618D01*
+X004810Y014615D01*
+X004771Y014616D01*
+X004732Y014621D01*
+X004694Y014630D01*
+X004658Y014642D01*
+X004622Y014658D01*
+X004588Y014677D01*
+X004557Y014700D01*
+X004528Y014726D01*
+X004501Y014754D01*
+X004478Y014785D01*
+X004457Y014818D01*
+X004441Y014854D01*
+X004427Y014890D01*
+X004418Y014928D01*
+X004412Y014966D01*
+X004410Y015005D01*
+X004400Y014605D02*
+X005200Y015405D01*
+X003510Y014155D02*
+X003512Y014194D01*
+X003518Y014232D01*
+X003527Y014270D01*
+X003541Y014306D01*
+X003557Y014342D01*
+X003578Y014375D01*
+X003601Y014406D01*
+X003628Y014434D01*
+X003657Y014460D01*
+X003688Y014483D01*
+X003722Y014502D01*
+X003758Y014518D01*
+X003794Y014530D01*
+X003832Y014539D01*
+X003871Y014544D01*
+X003910Y014545D01*
+X003948Y014542D01*
+X003987Y014535D01*
+X004024Y014525D01*
+X004060Y014510D01*
+X004095Y014493D01*
+X004128Y014472D01*
+X004158Y014447D01*
+X004186Y014420D01*
+X004211Y014390D01*
+X004233Y014358D01*
+X004251Y014324D01*
+X004266Y014288D01*
+X004278Y014251D01*
+X004286Y014213D01*
+X004290Y014174D01*
+X004290Y014136D01*
+X004286Y014097D01*
+X004278Y014059D01*
+X004266Y014022D01*
+X004251Y013986D01*
+X004233Y013952D01*
+X004211Y013920D01*
+X004186Y013890D01*
+X004158Y013863D01*
+X004128Y013838D01*
+X004095Y013817D01*
+X004060Y013800D01*
+X004024Y013785D01*
+X003987Y013775D01*
+X003948Y013768D01*
+X003910Y013765D01*
+X003871Y013766D01*
+X003832Y013771D01*
+X003794Y013780D01*
+X003758Y013792D01*
+X003722Y013808D01*
+X003688Y013827D01*
+X003657Y013850D01*
+X003628Y013876D01*
+X003601Y013904D01*
+X003578Y013935D01*
+X003557Y013968D01*
+X003541Y014004D01*
+X003527Y014040D01*
+X003518Y014078D01*
+X003512Y014116D01*
+X003510Y014155D01*
+X003500Y013755D02*
+X004300Y014555D01*
+X002910Y014155D02*
+X002912Y014194D01*
+X002918Y014232D01*
+X002927Y014270D01*
+X002941Y014306D01*
+X002957Y014342D01*
+X002978Y014375D01*
+X003001Y014406D01*
+X003028Y014434D01*
+X003057Y014460D01*
+X003088Y014483D01*
+X003122Y014502D01*
+X003158Y014518D01*
+X003194Y014530D01*
+X003232Y014539D01*
+X003271Y014544D01*
+X003310Y014545D01*
+X003348Y014542D01*
+X003387Y014535D01*
+X003424Y014525D01*
+X003460Y014510D01*
+X003495Y014493D01*
+X003528Y014472D01*
+X003558Y014447D01*
+X003586Y014420D01*
+X003611Y014390D01*
+X003633Y014358D01*
+X003651Y014324D01*
+X003666Y014288D01*
+X003678Y014251D01*
+X003686Y014213D01*
+X003690Y014174D01*
+X003690Y014136D01*
+X003686Y014097D01*
+X003678Y014059D01*
+X003666Y014022D01*
+X003651Y013986D01*
+X003633Y013952D01*
+X003611Y013920D01*
+X003586Y013890D01*
+X003558Y013863D01*
+X003528Y013838D01*
+X003495Y013817D01*
+X003460Y013800D01*
+X003424Y013785D01*
+X003387Y013775D01*
+X003348Y013768D01*
+X003310Y013765D01*
+X003271Y013766D01*
+X003232Y013771D01*
+X003194Y013780D01*
+X003158Y013792D01*
+X003122Y013808D01*
+X003088Y013827D01*
+X003057Y013850D01*
+X003028Y013876D01*
+X003001Y013904D01*
+X002978Y013935D01*
+X002957Y013968D01*
+X002941Y014004D01*
+X002927Y014040D01*
+X002918Y014078D01*
+X002912Y014116D01*
+X002910Y014155D01*
+X002900Y013755D02*
+X003700Y014555D01*
+X002260Y014155D02*
+X002262Y014194D01*
+X002268Y014232D01*
+X002277Y014270D01*
+X002291Y014306D01*
+X002307Y014342D01*
+X002328Y014375D01*
+X002351Y014406D01*
+X002378Y014434D01*
+X002407Y014460D01*
+X002438Y014483D01*
+X002472Y014502D01*
+X002508Y014518D01*
+X002544Y014530D01*
+X002582Y014539D01*
+X002621Y014544D01*
+X002660Y014545D01*
+X002698Y014542D01*
+X002737Y014535D01*
+X002774Y014525D01*
+X002810Y014510D01*
+X002845Y014493D01*
+X002878Y014472D01*
+X002908Y014447D01*
+X002936Y014420D01*
+X002961Y014390D01*
+X002983Y014358D01*
+X003001Y014324D01*
+X003016Y014288D01*
+X003028Y014251D01*
+X003036Y014213D01*
+X003040Y014174D01*
+X003040Y014136D01*
+X003036Y014097D01*
+X003028Y014059D01*
+X003016Y014022D01*
+X003001Y013986D01*
+X002983Y013952D01*
+X002961Y013920D01*
+X002936Y013890D01*
+X002908Y013863D01*
+X002878Y013838D01*
+X002845Y013817D01*
+X002810Y013800D01*
+X002774Y013785D01*
+X002737Y013775D01*
+X002698Y013768D01*
+X002660Y013765D01*
+X002621Y013766D01*
+X002582Y013771D01*
+X002544Y013780D01*
+X002508Y013792D01*
+X002472Y013808D01*
+X002438Y013827D01*
+X002407Y013850D01*
+X002378Y013876D01*
+X002351Y013904D01*
+X002328Y013935D01*
+X002307Y013968D01*
+X002291Y014004D01*
+X002277Y014040D01*
+X002268Y014078D01*
+X002262Y014116D01*
+X002260Y014155D01*
+X002250Y013755D02*
+X003050Y014555D01*
+X001010Y014205D02*
+X001012Y014244D01*
+X001018Y014282D01*
+X001027Y014320D01*
+X001041Y014356D01*
+X001057Y014392D01*
+X001078Y014425D01*
+X001101Y014456D01*
+X001128Y014484D01*
+X001157Y014510D01*
+X001188Y014533D01*
+X001222Y014552D01*
+X001258Y014568D01*
+X001294Y014580D01*
+X001332Y014589D01*
+X001371Y014594D01*
+X001410Y014595D01*
+X001448Y014592D01*
+X001487Y014585D01*
+X001524Y014575D01*
+X001560Y014560D01*
+X001595Y014543D01*
+X001628Y014522D01*
+X001658Y014497D01*
+X001686Y014470D01*
+X001711Y014440D01*
+X001733Y014408D01*
+X001751Y014374D01*
+X001766Y014338D01*
+X001778Y014301D01*
+X001786Y014263D01*
+X001790Y014224D01*
+X001790Y014186D01*
+X001786Y014147D01*
+X001778Y014109D01*
+X001766Y014072D01*
+X001751Y014036D01*
+X001733Y014002D01*
+X001711Y013970D01*
+X001686Y013940D01*
+X001658Y013913D01*
+X001628Y013888D01*
+X001595Y013867D01*
+X001560Y013850D01*
+X001524Y013835D01*
+X001487Y013825D01*
+X001448Y013818D01*
+X001410Y013815D01*
+X001371Y013816D01*
+X001332Y013821D01*
+X001294Y013830D01*
+X001258Y013842D01*
+X001222Y013858D01*
+X001188Y013877D01*
+X001157Y013900D01*
+X001128Y013926D01*
+X001101Y013954D01*
+X001078Y013985D01*
+X001057Y014018D01*
+X001041Y014054D01*
+X001027Y014090D01*
+X001018Y014128D01*
+X001012Y014166D01*
+X001010Y014205D01*
+X001000Y013805D02*
+X001800Y014605D01*
+X002480Y016244D02*
+X003280Y017044D01*
+X002480Y017044D01*
+X003280Y016244D01*
+X002480Y016244D01*
+X001810Y016855D02*
+X001812Y016894D01*
+X001818Y016932D01*
+X001827Y016970D01*
+X001841Y017006D01*
+X001857Y017042D01*
+X001878Y017075D01*
+X001901Y017106D01*
+X001928Y017134D01*
+X001957Y017160D01*
+X001988Y017183D01*
+X002022Y017202D01*
+X002058Y017218D01*
+X002094Y017230D01*
+X002132Y017239D01*
+X002171Y017244D01*
+X002210Y017245D01*
+X002248Y017242D01*
+X002287Y017235D01*
+X002324Y017225D01*
+X002360Y017210D01*
+X002395Y017193D01*
+X002428Y017172D01*
+X002458Y017147D01*
+X002486Y017120D01*
+X002511Y017090D01*
+X002533Y017058D01*
+X002551Y017024D01*
+X002566Y016988D01*
+X002578Y016951D01*
+X002586Y016913D01*
+X002590Y016874D01*
+X002590Y016836D01*
+X002586Y016797D01*
+X002578Y016759D01*
+X002566Y016722D01*
+X002551Y016686D01*
+X002533Y016652D01*
+X002511Y016620D01*
+X002486Y016590D01*
+X002458Y016563D01*
+X002428Y016538D01*
+X002395Y016517D01*
+X002360Y016500D01*
+X002324Y016485D01*
+X002287Y016475D01*
+X002248Y016468D01*
+X002210Y016465D01*
+X002171Y016466D01*
+X002132Y016471D01*
+X002094Y016480D01*
+X002058Y016492D01*
+X002022Y016508D01*
+X001988Y016527D01*
+X001957Y016550D01*
+X001928Y016576D01*
+X001901Y016604D01*
+X001878Y016635D01*
+X001857Y016668D01*
+X001841Y016704D01*
+X001827Y016740D01*
+X001818Y016778D01*
+X001812Y016816D01*
+X001810Y016855D01*
+X001800Y016455D02*
+X002600Y017255D01*
+X002160Y017355D02*
+X002162Y017394D01*
+X002168Y017432D01*
+X002177Y017470D01*
+X002191Y017506D01*
+X002207Y017542D01*
+X002228Y017575D01*
+X002251Y017606D01*
+X002278Y017634D01*
+X002307Y017660D01*
+X002338Y017683D01*
+X002372Y017702D01*
+X002408Y017718D01*
+X002444Y017730D01*
+X002482Y017739D01*
+X002521Y017744D01*
+X002560Y017745D01*
+X002598Y017742D01*
+X002637Y017735D01*
+X002674Y017725D01*
+X002710Y017710D01*
+X002745Y017693D01*
+X002778Y017672D01*
+X002808Y017647D01*
+X002836Y017620D01*
+X002861Y017590D01*
+X002883Y017558D01*
+X002901Y017524D01*
+X002916Y017488D01*
+X002928Y017451D01*
+X002936Y017413D01*
+X002940Y017374D01*
+X002940Y017336D01*
+X002936Y017297D01*
+X002928Y017259D01*
+X002916Y017222D01*
+X002901Y017186D01*
+X002883Y017152D01*
+X002861Y017120D01*
+X002836Y017090D01*
+X002808Y017063D01*
+X002778Y017038D01*
+X002745Y017017D01*
+X002710Y017000D01*
+X002674Y016985D01*
+X002637Y016975D01*
+X002598Y016968D01*
+X002560Y016965D01*
+X002521Y016966D01*
+X002482Y016971D01*
+X002444Y016980D01*
+X002408Y016992D01*
+X002372Y017008D01*
+X002338Y017027D01*
+X002307Y017050D01*
+X002278Y017076D01*
+X002251Y017104D01*
+X002228Y017135D01*
+X002207Y017168D01*
+X002191Y017204D01*
+X002177Y017240D01*
+X002168Y017278D01*
+X002162Y017316D01*
+X002160Y017355D01*
+X002150Y016955D02*
+X002950Y017755D01*
+X002480Y017622D02*
+X003280Y018422D01*
+X002480Y018422D01*
+X003280Y017622D01*
+X002480Y017622D01*
+X001760Y017455D02*
+X001762Y017494D01*
+X001768Y017532D01*
+X001777Y017570D01*
+X001791Y017606D01*
+X001807Y017642D01*
+X001828Y017675D01*
+X001851Y017706D01*
+X001878Y017734D01*
+X001907Y017760D01*
+X001938Y017783D01*
+X001972Y017802D01*
+X002008Y017818D01*
+X002044Y017830D01*
+X002082Y017839D01*
+X002121Y017844D01*
+X002160Y017845D01*
+X002198Y017842D01*
+X002237Y017835D01*
+X002274Y017825D01*
+X002310Y017810D01*
+X002345Y017793D01*
+X002378Y017772D01*
+X002408Y017747D01*
+X002436Y017720D01*
+X002461Y017690D01*
+X002483Y017658D01*
+X002501Y017624D01*
+X002516Y017588D01*
+X002528Y017551D01*
+X002536Y017513D01*
+X002540Y017474D01*
+X002540Y017436D01*
+X002536Y017397D01*
+X002528Y017359D01*
+X002516Y017322D01*
+X002501Y017286D01*
+X002483Y017252D01*
+X002461Y017220D01*
+X002436Y017190D01*
+X002408Y017163D01*
+X002378Y017138D01*
+X002345Y017117D01*
+X002310Y017100D01*
+X002274Y017085D01*
+X002237Y017075D01*
+X002198Y017068D01*
+X002160Y017065D01*
+X002121Y017066D01*
+X002082Y017071D01*
+X002044Y017080D01*
+X002008Y017092D01*
+X001972Y017108D01*
+X001938Y017127D01*
+X001907Y017150D01*
+X001878Y017176D01*
+X001851Y017204D01*
+X001828Y017235D01*
+X001807Y017268D01*
+X001791Y017304D01*
+X001777Y017340D01*
+X001768Y017378D01*
+X001762Y017416D01*
+X001760Y017455D01*
+X001750Y017055D02*
+X002550Y017855D01*
+X001910Y018005D02*
+X001912Y018044D01*
+X001918Y018082D01*
+X001927Y018120D01*
+X001941Y018156D01*
+X001957Y018192D01*
+X001978Y018225D01*
+X002001Y018256D01*
+X002028Y018284D01*
+X002057Y018310D01*
+X002088Y018333D01*
+X002122Y018352D01*
+X002158Y018368D01*
+X002194Y018380D01*
+X002232Y018389D01*
+X002271Y018394D01*
+X002310Y018395D01*
+X002348Y018392D01*
+X002387Y018385D01*
+X002424Y018375D01*
+X002460Y018360D01*
+X002495Y018343D01*
+X002528Y018322D01*
+X002558Y018297D01*
+X002586Y018270D01*
+X002611Y018240D01*
+X002633Y018208D01*
+X002651Y018174D01*
+X002666Y018138D01*
+X002678Y018101D01*
+X002686Y018063D01*
+X002690Y018024D01*
+X002690Y017986D01*
+X002686Y017947D01*
+X002678Y017909D01*
+X002666Y017872D01*
+X002651Y017836D01*
+X002633Y017802D01*
+X002611Y017770D01*
+X002586Y017740D01*
+X002558Y017713D01*
+X002528Y017688D01*
+X002495Y017667D01*
+X002460Y017650D01*
+X002424Y017635D01*
+X002387Y017625D01*
+X002348Y017618D01*
+X002310Y017615D01*
+X002271Y017616D01*
+X002232Y017621D01*
+X002194Y017630D01*
+X002158Y017642D01*
+X002122Y017658D01*
+X002088Y017677D01*
+X002057Y017700D01*
+X002028Y017726D01*
+X002001Y017754D01*
+X001978Y017785D01*
+X001957Y017818D01*
+X001941Y017854D01*
+X001927Y017890D01*
+X001918Y017928D01*
+X001912Y017966D01*
+X001910Y018005D01*
+X001900Y017605D02*
+X002700Y018405D01*
+X001110Y017655D02*
+X001112Y017694D01*
+X001118Y017732D01*
+X001127Y017770D01*
+X001141Y017806D01*
+X001157Y017842D01*
+X001178Y017875D01*
+X001201Y017906D01*
+X001228Y017934D01*
+X001257Y017960D01*
+X001288Y017983D01*
+X001322Y018002D01*
+X001358Y018018D01*
+X001394Y018030D01*
+X001432Y018039D01*
+X001471Y018044D01*
+X001510Y018045D01*
+X001548Y018042D01*
+X001587Y018035D01*
+X001624Y018025D01*
+X001660Y018010D01*
+X001695Y017993D01*
+X001728Y017972D01*
+X001758Y017947D01*
+X001786Y017920D01*
+X001811Y017890D01*
+X001833Y017858D01*
+X001851Y017824D01*
+X001866Y017788D01*
+X001878Y017751D01*
+X001886Y017713D01*
+X001890Y017674D01*
+X001890Y017636D01*
+X001886Y017597D01*
+X001878Y017559D01*
+X001866Y017522D01*
+X001851Y017486D01*
+X001833Y017452D01*
+X001811Y017420D01*
+X001786Y017390D01*
+X001758Y017363D01*
+X001728Y017338D01*
+X001695Y017317D01*
+X001660Y017300D01*
+X001624Y017285D01*
+X001587Y017275D01*
+X001548Y017268D01*
+X001510Y017265D01*
+X001471Y017266D01*
+X001432Y017271D01*
+X001394Y017280D01*
+X001358Y017292D01*
+X001322Y017308D01*
+X001288Y017327D01*
+X001257Y017350D01*
+X001228Y017376D01*
+X001201Y017404D01*
+X001178Y017435D01*
+X001157Y017468D01*
+X001141Y017504D01*
+X001127Y017540D01*
+X001118Y017578D01*
+X001112Y017616D01*
+X001110Y017655D01*
+X001100Y017255D02*
+X001900Y018055D01*
+X000810Y018055D02*
+X000812Y018094D01*
+X000818Y018132D01*
+X000827Y018170D01*
+X000841Y018206D01*
+X000857Y018242D01*
+X000878Y018275D01*
+X000901Y018306D01*
+X000928Y018334D01*
+X000957Y018360D01*
+X000988Y018383D01*
+X001022Y018402D01*
+X001058Y018418D01*
+X001094Y018430D01*
+X001132Y018439D01*
+X001171Y018444D01*
+X001210Y018445D01*
+X001248Y018442D01*
+X001287Y018435D01*
+X001324Y018425D01*
+X001360Y018410D01*
+X001395Y018393D01*
+X001428Y018372D01*
+X001458Y018347D01*
+X001486Y018320D01*
+X001511Y018290D01*
+X001533Y018258D01*
+X001551Y018224D01*
+X001566Y018188D01*
+X001578Y018151D01*
+X001586Y018113D01*
+X001590Y018074D01*
+X001590Y018036D01*
+X001586Y017997D01*
+X001578Y017959D01*
+X001566Y017922D01*
+X001551Y017886D01*
+X001533Y017852D01*
+X001511Y017820D01*
+X001486Y017790D01*
+X001458Y017763D01*
+X001428Y017738D01*
+X001395Y017717D01*
+X001360Y017700D01*
+X001324Y017685D01*
+X001287Y017675D01*
+X001248Y017668D01*
+X001210Y017665D01*
+X001171Y017666D01*
+X001132Y017671D01*
+X001094Y017680D01*
+X001058Y017692D01*
+X001022Y017708D01*
+X000988Y017727D01*
+X000957Y017750D01*
+X000928Y017776D01*
+X000901Y017804D01*
+X000878Y017835D01*
+X000857Y017868D01*
+X000841Y017904D01*
+X000827Y017940D01*
+X000818Y017978D01*
+X000812Y018016D01*
+X000810Y018055D01*
+X000800Y017655D02*
+X001600Y018455D01*
+X004210Y018355D02*
+X004212Y018394D01*
+X004218Y018432D01*
+X004227Y018470D01*
+X004241Y018506D01*
+X004257Y018542D01*
+X004278Y018575D01*
+X004301Y018606D01*
+X004328Y018634D01*
+X004357Y018660D01*
+X004388Y018683D01*
+X004422Y018702D01*
+X004458Y018718D01*
+X004494Y018730D01*
+X004532Y018739D01*
+X004571Y018744D01*
+X004610Y018745D01*
+X004648Y018742D01*
+X004687Y018735D01*
+X004724Y018725D01*
+X004760Y018710D01*
+X004795Y018693D01*
+X004828Y018672D01*
+X004858Y018647D01*
+X004886Y018620D01*
+X004911Y018590D01*
+X004933Y018558D01*
+X004951Y018524D01*
+X004966Y018488D01*
+X004978Y018451D01*
+X004986Y018413D01*
+X004990Y018374D01*
+X004990Y018336D01*
+X004986Y018297D01*
+X004978Y018259D01*
+X004966Y018222D01*
+X004951Y018186D01*
+X004933Y018152D01*
+X004911Y018120D01*
+X004886Y018090D01*
+X004858Y018063D01*
+X004828Y018038D01*
+X004795Y018017D01*
+X004760Y018000D01*
+X004724Y017985D01*
+X004687Y017975D01*
+X004648Y017968D01*
+X004610Y017965D01*
+X004571Y017966D01*
+X004532Y017971D01*
+X004494Y017980D01*
+X004458Y017992D01*
+X004422Y018008D01*
+X004388Y018027D01*
+X004357Y018050D01*
+X004328Y018076D01*
+X004301Y018104D01*
+X004278Y018135D01*
+X004257Y018168D01*
+X004241Y018204D01*
+X004227Y018240D01*
+X004218Y018278D01*
+X004212Y018316D01*
+X004210Y018355D01*
+X004200Y017955D02*
+X005000Y018755D01*
+X011160Y014005D02*
+X011162Y014044D01*
+X011168Y014082D01*
+X011177Y014120D01*
+X011191Y014156D01*
+X011207Y014192D01*
+X011228Y014225D01*
+X011251Y014256D01*
+X011278Y014284D01*
+X011307Y014310D01*
+X011338Y014333D01*
+X011372Y014352D01*
+X011408Y014368D01*
+X011444Y014380D01*
+X011482Y014389D01*
+X011521Y014394D01*
+X011560Y014395D01*
+X011598Y014392D01*
+X011637Y014385D01*
+X011674Y014375D01*
+X011710Y014360D01*
+X011745Y014343D01*
+X011778Y014322D01*
+X011808Y014297D01*
+X011836Y014270D01*
+X011861Y014240D01*
+X011883Y014208D01*
+X011901Y014174D01*
+X011916Y014138D01*
+X011928Y014101D01*
+X011936Y014063D01*
+X011940Y014024D01*
+X011940Y013986D01*
+X011936Y013947D01*
+X011928Y013909D01*
+X011916Y013872D01*
+X011901Y013836D01*
+X011883Y013802D01*
+X011861Y013770D01*
+X011836Y013740D01*
+X011808Y013713D01*
+X011778Y013688D01*
+X011745Y013667D01*
+X011710Y013650D01*
+X011674Y013635D01*
+X011637Y013625D01*
+X011598Y013618D01*
+X011560Y013615D01*
+X011521Y013616D01*
+X011482Y013621D01*
+X011444Y013630D01*
+X011408Y013642D01*
+X011372Y013658D01*
+X011338Y013677D01*
+X011307Y013700D01*
+X011278Y013726D01*
+X011251Y013754D01*
+X011228Y013785D01*
+X011207Y013818D01*
+X011191Y013854D01*
+X011177Y013890D01*
+X011168Y013928D01*
+X011162Y013966D01*
+X011160Y014005D01*
+X011150Y013605D02*
+X011950Y014405D01*
+X010810Y013605D02*
+X010812Y013644D01*
+X010818Y013682D01*
+X010827Y013720D01*
+X010841Y013756D01*
+X010857Y013792D01*
+X010878Y013825D01*
+X010901Y013856D01*
+X010928Y013884D01*
+X010957Y013910D01*
+X010988Y013933D01*
+X011022Y013952D01*
+X011058Y013968D01*
+X011094Y013980D01*
+X011132Y013989D01*
+X011171Y013994D01*
+X011210Y013995D01*
+X011248Y013992D01*
+X011287Y013985D01*
+X011324Y013975D01*
+X011360Y013960D01*
+X011395Y013943D01*
+X011428Y013922D01*
+X011458Y013897D01*
+X011486Y013870D01*
+X011511Y013840D01*
+X011533Y013808D01*
+X011551Y013774D01*
+X011566Y013738D01*
+X011578Y013701D01*
+X011586Y013663D01*
+X011590Y013624D01*
+X011590Y013586D01*
+X011586Y013547D01*
+X011578Y013509D01*
+X011566Y013472D01*
+X011551Y013436D01*
+X011533Y013402D01*
+X011511Y013370D01*
+X011486Y013340D01*
+X011458Y013313D01*
+X011428Y013288D01*
+X011395Y013267D01*
+X011360Y013250D01*
+X011324Y013235D01*
+X011287Y013225D01*
+X011248Y013218D01*
+X011210Y013215D01*
+X011171Y013216D01*
+X011132Y013221D01*
+X011094Y013230D01*
+X011058Y013242D01*
+X011022Y013258D01*
+X010988Y013277D01*
+X010957Y013300D01*
+X010928Y013326D01*
+X010901Y013354D01*
+X010878Y013385D01*
+X010857Y013418D01*
+X010841Y013454D01*
+X010827Y013490D01*
+X010818Y013528D01*
+X010812Y013566D01*
+X010810Y013605D01*
+X010800Y013205D02*
+X011600Y014005D01*
+X010360Y013755D02*
+X010362Y013794D01*
+X010368Y013832D01*
+X010377Y013870D01*
+X010391Y013906D01*
+X010407Y013942D01*
+X010428Y013975D01*
+X010451Y014006D01*
+X010478Y014034D01*
+X010507Y014060D01*
+X010538Y014083D01*
+X010572Y014102D01*
+X010608Y014118D01*
+X010644Y014130D01*
+X010682Y014139D01*
+X010721Y014144D01*
+X010760Y014145D01*
+X010798Y014142D01*
+X010837Y014135D01*
+X010874Y014125D01*
+X010910Y014110D01*
+X010945Y014093D01*
+X010978Y014072D01*
+X011008Y014047D01*
+X011036Y014020D01*
+X011061Y013990D01*
+X011083Y013958D01*
+X011101Y013924D01*
+X011116Y013888D01*
+X011128Y013851D01*
+X011136Y013813D01*
+X011140Y013774D01*
+X011140Y013736D01*
+X011136Y013697D01*
+X011128Y013659D01*
+X011116Y013622D01*
+X011101Y013586D01*
+X011083Y013552D01*
+X011061Y013520D01*
+X011036Y013490D01*
+X011008Y013463D01*
+X010978Y013438D01*
+X010945Y013417D01*
+X010910Y013400D01*
+X010874Y013385D01*
+X010837Y013375D01*
+X010798Y013368D01*
+X010760Y013365D01*
+X010721Y013366D01*
+X010682Y013371D01*
+X010644Y013380D01*
+X010608Y013392D01*
+X010572Y013408D01*
+X010538Y013427D01*
+X010507Y013450D01*
+X010478Y013476D01*
+X010451Y013504D01*
+X010428Y013535D01*
+X010407Y013568D01*
+X010391Y013604D01*
+X010377Y013640D01*
+X010368Y013678D01*
+X010362Y013716D01*
+X010360Y013755D01*
+X010350Y013355D02*
+X011150Y014155D01*
+X009510Y013055D02*
+X009512Y013094D01*
+X009518Y013132D01*
+X009527Y013170D01*
+X009541Y013206D01*
+X009557Y013242D01*
+X009578Y013275D01*
+X009601Y013306D01*
+X009628Y013334D01*
+X009657Y013360D01*
+X009688Y013383D01*
+X009722Y013402D01*
+X009758Y013418D01*
+X009794Y013430D01*
+X009832Y013439D01*
+X009871Y013444D01*
+X009910Y013445D01*
+X009948Y013442D01*
+X009987Y013435D01*
+X010024Y013425D01*
+X010060Y013410D01*
+X010095Y013393D01*
+X010128Y013372D01*
+X010158Y013347D01*
+X010186Y013320D01*
+X010211Y013290D01*
+X010233Y013258D01*
+X010251Y013224D01*
+X010266Y013188D01*
+X010278Y013151D01*
+X010286Y013113D01*
+X010290Y013074D01*
+X010290Y013036D01*
+X010286Y012997D01*
+X010278Y012959D01*
+X010266Y012922D01*
+X010251Y012886D01*
+X010233Y012852D01*
+X010211Y012820D01*
+X010186Y012790D01*
+X010158Y012763D01*
+X010128Y012738D01*
+X010095Y012717D01*
+X010060Y012700D01*
+X010024Y012685D01*
+X009987Y012675D01*
+X009948Y012668D01*
+X009910Y012665D01*
+X009871Y012666D01*
+X009832Y012671D01*
+X009794Y012680D01*
+X009758Y012692D01*
+X009722Y012708D01*
+X009688Y012727D01*
+X009657Y012750D01*
+X009628Y012776D01*
+X009601Y012804D01*
+X009578Y012835D01*
+X009557Y012868D01*
+X009541Y012904D01*
+X009527Y012940D01*
+X009518Y012978D01*
+X009512Y013016D01*
+X009510Y013055D01*
+X009500Y012655D02*
+X010300Y013455D01*
+X010160Y012805D02*
+X010162Y012844D01*
+X010168Y012882D01*
+X010177Y012920D01*
+X010191Y012956D01*
+X010207Y012992D01*
+X010228Y013025D01*
+X010251Y013056D01*
+X010278Y013084D01*
+X010307Y013110D01*
+X010338Y013133D01*
+X010372Y013152D01*
+X010408Y013168D01*
+X010444Y013180D01*
+X010482Y013189D01*
+X010521Y013194D01*
+X010560Y013195D01*
+X010598Y013192D01*
+X010637Y013185D01*
+X010674Y013175D01*
+X010710Y013160D01*
+X010745Y013143D01*
+X010778Y013122D01*
+X010808Y013097D01*
+X010836Y013070D01*
+X010861Y013040D01*
+X010883Y013008D01*
+X010901Y012974D01*
+X010916Y012938D01*
+X010928Y012901D01*
+X010936Y012863D01*
+X010940Y012824D01*
+X010940Y012786D01*
+X010936Y012747D01*
+X010928Y012709D01*
+X010916Y012672D01*
+X010901Y012636D01*
+X010883Y012602D01*
+X010861Y012570D01*
+X010836Y012540D01*
+X010808Y012513D01*
+X010778Y012488D01*
+X010745Y012467D01*
+X010710Y012450D01*
+X010674Y012435D01*
+X010637Y012425D01*
+X010598Y012418D01*
+X010560Y012415D01*
+X010521Y012416D01*
+X010482Y012421D01*
+X010444Y012430D01*
+X010408Y012442D01*
+X010372Y012458D01*
+X010338Y012477D01*
+X010307Y012500D01*
+X010278Y012526D01*
+X010251Y012554D01*
+X010228Y012585D01*
+X010207Y012618D01*
+X010191Y012654D01*
+X010177Y012690D01*
+X010168Y012728D01*
+X010162Y012766D01*
+X010160Y012805D01*
+X010150Y012405D02*
+X010950Y013205D01*
+X009610Y012005D02*
+X009612Y012044D01*
+X009618Y012082D01*
+X009627Y012120D01*
+X009641Y012156D01*
+X009657Y012192D01*
+X009678Y012225D01*
+X009701Y012256D01*
+X009728Y012284D01*
+X009757Y012310D01*
+X009788Y012333D01*
+X009822Y012352D01*
+X009858Y012368D01*
+X009894Y012380D01*
+X009932Y012389D01*
+X009971Y012394D01*
+X010010Y012395D01*
+X010048Y012392D01*
+X010087Y012385D01*
+X010124Y012375D01*
+X010160Y012360D01*
+X010195Y012343D01*
+X010228Y012322D01*
+X010258Y012297D01*
+X010286Y012270D01*
+X010311Y012240D01*
+X010333Y012208D01*
+X010351Y012174D01*
+X010366Y012138D01*
+X010378Y012101D01*
+X010386Y012063D01*
+X010390Y012024D01*
+X010390Y011986D01*
+X010386Y011947D01*
+X010378Y011909D01*
+X010366Y011872D01*
+X010351Y011836D01*
+X010333Y011802D01*
+X010311Y011770D01*
+X010286Y011740D01*
+X010258Y011713D01*
+X010228Y011688D01*
+X010195Y011667D01*
+X010160Y011650D01*
+X010124Y011635D01*
+X010087Y011625D01*
+X010048Y011618D01*
+X010010Y011615D01*
+X009971Y011616D01*
+X009932Y011621D01*
+X009894Y011630D01*
+X009858Y011642D01*
+X009822Y011658D01*
+X009788Y011677D01*
+X009757Y011700D01*
+X009728Y011726D01*
+X009701Y011754D01*
+X009678Y011785D01*
+X009657Y011818D01*
+X009641Y011854D01*
+X009627Y011890D01*
+X009618Y011928D01*
+X009612Y011966D01*
+X009610Y012005D01*
+X009600Y011605D02*
+X010400Y012405D01*
+X011910Y011855D02*
+X011912Y011894D01*
+X011918Y011932D01*
+X011927Y011970D01*
+X011941Y012006D01*
+X011957Y012042D01*
+X011978Y012075D01*
+X012001Y012106D01*
+X012028Y012134D01*
+X012057Y012160D01*
+X012088Y012183D01*
+X012122Y012202D01*
+X012158Y012218D01*
+X012194Y012230D01*
+X012232Y012239D01*
+X012271Y012244D01*
+X012310Y012245D01*
+X012348Y012242D01*
+X012387Y012235D01*
+X012424Y012225D01*
+X012460Y012210D01*
+X012495Y012193D01*
+X012528Y012172D01*
+X012558Y012147D01*
+X012586Y012120D01*
+X012611Y012090D01*
+X012633Y012058D01*
+X012651Y012024D01*
+X012666Y011988D01*
+X012678Y011951D01*
+X012686Y011913D01*
+X012690Y011874D01*
+X012690Y011836D01*
+X012686Y011797D01*
+X012678Y011759D01*
+X012666Y011722D01*
+X012651Y011686D01*
+X012633Y011652D01*
+X012611Y011620D01*
+X012586Y011590D01*
+X012558Y011563D01*
+X012528Y011538D01*
+X012495Y011517D01*
+X012460Y011500D01*
+X012424Y011485D01*
+X012387Y011475D01*
+X012348Y011468D01*
+X012310Y011465D01*
+X012271Y011466D01*
+X012232Y011471D01*
+X012194Y011480D01*
+X012158Y011492D01*
+X012122Y011508D01*
+X012088Y011527D01*
+X012057Y011550D01*
+X012028Y011576D01*
+X012001Y011604D01*
+X011978Y011635D01*
+X011957Y011668D01*
+X011941Y011704D01*
+X011927Y011740D01*
+X011918Y011778D01*
+X011912Y011816D01*
+X011910Y011855D01*
+X011900Y011455D02*
+X012700Y012255D01*
+X012460Y011905D02*
+X012462Y011944D01*
+X012468Y011982D01*
+X012477Y012020D01*
+X012491Y012056D01*
+X012507Y012092D01*
+X012528Y012125D01*
+X012551Y012156D01*
+X012578Y012184D01*
+X012607Y012210D01*
+X012638Y012233D01*
+X012672Y012252D01*
+X012708Y012268D01*
+X012744Y012280D01*
+X012782Y012289D01*
+X012821Y012294D01*
+X012860Y012295D01*
+X012898Y012292D01*
+X012937Y012285D01*
+X012974Y012275D01*
+X013010Y012260D01*
+X013045Y012243D01*
+X013078Y012222D01*
+X013108Y012197D01*
+X013136Y012170D01*
+X013161Y012140D01*
+X013183Y012108D01*
+X013201Y012074D01*
+X013216Y012038D01*
+X013228Y012001D01*
+X013236Y011963D01*
+X013240Y011924D01*
+X013240Y011886D01*
+X013236Y011847D01*
+X013228Y011809D01*
+X013216Y011772D01*
+X013201Y011736D01*
+X013183Y011702D01*
+X013161Y011670D01*
+X013136Y011640D01*
+X013108Y011613D01*
+X013078Y011588D01*
+X013045Y011567D01*
+X013010Y011550D01*
+X012974Y011535D01*
+X012937Y011525D01*
+X012898Y011518D01*
+X012860Y011515D01*
+X012821Y011516D01*
+X012782Y011521D01*
+X012744Y011530D01*
+X012708Y011542D01*
+X012672Y011558D01*
+X012638Y011577D01*
+X012607Y011600D01*
+X012578Y011626D01*
+X012551Y011654D01*
+X012528Y011685D01*
+X012507Y011718D01*
+X012491Y011754D01*
+X012477Y011790D01*
+X012468Y011828D01*
+X012462Y011866D01*
+X012460Y011905D01*
+X012450Y011505D02*
+X013250Y012305D01*
+X013310Y012105D02*
+X013312Y012144D01*
+X013318Y012182D01*
+X013327Y012220D01*
+X013341Y012256D01*
+X013357Y012292D01*
+X013378Y012325D01*
+X013401Y012356D01*
+X013428Y012384D01*
+X013457Y012410D01*
+X013488Y012433D01*
+X013522Y012452D01*
+X013558Y012468D01*
+X013594Y012480D01*
+X013632Y012489D01*
+X013671Y012494D01*
+X013710Y012495D01*
+X013748Y012492D01*
+X013787Y012485D01*
+X013824Y012475D01*
+X013860Y012460D01*
+X013895Y012443D01*
+X013928Y012422D01*
+X013958Y012397D01*
+X013986Y012370D01*
+X014011Y012340D01*
+X014033Y012308D01*
+X014051Y012274D01*
+X014066Y012238D01*
+X014078Y012201D01*
+X014086Y012163D01*
+X014090Y012124D01*
+X014090Y012086D01*
+X014086Y012047D01*
+X014078Y012009D01*
+X014066Y011972D01*
+X014051Y011936D01*
+X014033Y011902D01*
+X014011Y011870D01*
+X013986Y011840D01*
+X013958Y011813D01*
+X013928Y011788D01*
+X013895Y011767D01*
+X013860Y011750D01*
+X013824Y011735D01*
+X013787Y011725D01*
+X013748Y011718D01*
+X013710Y011715D01*
+X013671Y011716D01*
+X013632Y011721D01*
+X013594Y011730D01*
+X013558Y011742D01*
+X013522Y011758D01*
+X013488Y011777D01*
+X013457Y011800D01*
+X013428Y011826D01*
+X013401Y011854D01*
+X013378Y011885D01*
+X013357Y011918D01*
+X013341Y011954D01*
+X013327Y011990D01*
+X013318Y012028D01*
+X013312Y012066D01*
+X013310Y012105D01*
+X013300Y011705D02*
+X014100Y012505D01*
+X013510Y012805D02*
+X013512Y012844D01*
+X013518Y012882D01*
+X013527Y012920D01*
+X013541Y012956D01*
+X013557Y012992D01*
+X013578Y013025D01*
+X013601Y013056D01*
+X013628Y013084D01*
+X013657Y013110D01*
+X013688Y013133D01*
+X013722Y013152D01*
+X013758Y013168D01*
+X013794Y013180D01*
+X013832Y013189D01*
+X013871Y013194D01*
+X013910Y013195D01*
+X013948Y013192D01*
+X013987Y013185D01*
+X014024Y013175D01*
+X014060Y013160D01*
+X014095Y013143D01*
+X014128Y013122D01*
+X014158Y013097D01*
+X014186Y013070D01*
+X014211Y013040D01*
+X014233Y013008D01*
+X014251Y012974D01*
+X014266Y012938D01*
+X014278Y012901D01*
+X014286Y012863D01*
+X014290Y012824D01*
+X014290Y012786D01*
+X014286Y012747D01*
+X014278Y012709D01*
+X014266Y012672D01*
+X014251Y012636D01*
+X014233Y012602D01*
+X014211Y012570D01*
+X014186Y012540D01*
+X014158Y012513D01*
+X014128Y012488D01*
+X014095Y012467D01*
+X014060Y012450D01*
+X014024Y012435D01*
+X013987Y012425D01*
+X013948Y012418D01*
+X013910Y012415D01*
+X013871Y012416D01*
+X013832Y012421D01*
+X013794Y012430D01*
+X013758Y012442D01*
+X013722Y012458D01*
+X013688Y012477D01*
+X013657Y012500D01*
+X013628Y012526D01*
+X013601Y012554D01*
+X013578Y012585D01*
+X013557Y012618D01*
+X013541Y012654D01*
+X013527Y012690D01*
+X013518Y012728D01*
+X013512Y012766D01*
+X013510Y012805D01*
+X013500Y012405D02*
+X014300Y013205D01*
+X013660Y013305D02*
+X013662Y013344D01*
+X013668Y013382D01*
+X013677Y013420D01*
+X013691Y013456D01*
+X013707Y013492D01*
+X013728Y013525D01*
+X013751Y013556D01*
+X013778Y013584D01*
+X013807Y013610D01*
+X013838Y013633D01*
+X013872Y013652D01*
+X013908Y013668D01*
+X013944Y013680D01*
+X013982Y013689D01*
+X014021Y013694D01*
+X014060Y013695D01*
+X014098Y013692D01*
+X014137Y013685D01*
+X014174Y013675D01*
+X014210Y013660D01*
+X014245Y013643D01*
+X014278Y013622D01*
+X014308Y013597D01*
+X014336Y013570D01*
+X014361Y013540D01*
+X014383Y013508D01*
+X014401Y013474D01*
+X014416Y013438D01*
+X014428Y013401D01*
+X014436Y013363D01*
+X014440Y013324D01*
+X014440Y013286D01*
+X014436Y013247D01*
+X014428Y013209D01*
+X014416Y013172D01*
+X014401Y013136D01*
+X014383Y013102D01*
+X014361Y013070D01*
+X014336Y013040D01*
+X014308Y013013D01*
+X014278Y012988D01*
+X014245Y012967D01*
+X014210Y012950D01*
+X014174Y012935D01*
+X014137Y012925D01*
+X014098Y012918D01*
+X014060Y012915D01*
+X014021Y012916D01*
+X013982Y012921D01*
+X013944Y012930D01*
+X013908Y012942D01*
+X013872Y012958D01*
+X013838Y012977D01*
+X013807Y013000D01*
+X013778Y013026D01*
+X013751Y013054D01*
+X013728Y013085D01*
+X013707Y013118D01*
+X013691Y013154D01*
+X013677Y013190D01*
+X013668Y013228D01*
+X013662Y013266D01*
+X013660Y013305D01*
+X013650Y012905D02*
+X014450Y013705D01*
+X015560Y013105D02*
+X015562Y013144D01*
+X015568Y013182D01*
+X015577Y013220D01*
+X015591Y013256D01*
+X015607Y013292D01*
+X015628Y013325D01*
+X015651Y013356D01*
+X015678Y013384D01*
+X015707Y013410D01*
+X015738Y013433D01*
+X015772Y013452D01*
+X015808Y013468D01*
+X015844Y013480D01*
+X015882Y013489D01*
+X015921Y013494D01*
+X015960Y013495D01*
+X015998Y013492D01*
+X016037Y013485D01*
+X016074Y013475D01*
+X016110Y013460D01*
+X016145Y013443D01*
+X016178Y013422D01*
+X016208Y013397D01*
+X016236Y013370D01*
+X016261Y013340D01*
+X016283Y013308D01*
+X016301Y013274D01*
+X016316Y013238D01*
+X016328Y013201D01*
+X016336Y013163D01*
+X016340Y013124D01*
+X016340Y013086D01*
+X016336Y013047D01*
+X016328Y013009D01*
+X016316Y012972D01*
+X016301Y012936D01*
+X016283Y012902D01*
+X016261Y012870D01*
+X016236Y012840D01*
+X016208Y012813D01*
+X016178Y012788D01*
+X016145Y012767D01*
+X016110Y012750D01*
+X016074Y012735D01*
+X016037Y012725D01*
+X015998Y012718D01*
+X015960Y012715D01*
+X015921Y012716D01*
+X015882Y012721D01*
+X015844Y012730D01*
+X015808Y012742D01*
+X015772Y012758D01*
+X015738Y012777D01*
+X015707Y012800D01*
+X015678Y012826D01*
+X015651Y012854D01*
+X015628Y012885D01*
+X015607Y012918D01*
+X015591Y012954D01*
+X015577Y012990D01*
+X015568Y013028D01*
+X015562Y013066D01*
+X015560Y013105D01*
+X015550Y012705D02*
+X016350Y013505D01*
+X015810Y014355D02*
+X015812Y014394D01*
+X015818Y014432D01*
+X015827Y014470D01*
+X015841Y014506D01*
+X015857Y014542D01*
+X015878Y014575D01*
+X015901Y014606D01*
+X015928Y014634D01*
+X015957Y014660D01*
+X015988Y014683D01*
+X016022Y014702D01*
+X016058Y014718D01*
+X016094Y014730D01*
+X016132Y014739D01*
+X016171Y014744D01*
+X016210Y014745D01*
+X016248Y014742D01*
+X016287Y014735D01*
+X016324Y014725D01*
+X016360Y014710D01*
+X016395Y014693D01*
+X016428Y014672D01*
+X016458Y014647D01*
+X016486Y014620D01*
+X016511Y014590D01*
+X016533Y014558D01*
+X016551Y014524D01*
+X016566Y014488D01*
+X016578Y014451D01*
+X016586Y014413D01*
+X016590Y014374D01*
+X016590Y014336D01*
+X016586Y014297D01*
+X016578Y014259D01*
+X016566Y014222D01*
+X016551Y014186D01*
+X016533Y014152D01*
+X016511Y014120D01*
+X016486Y014090D01*
+X016458Y014063D01*
+X016428Y014038D01*
+X016395Y014017D01*
+X016360Y014000D01*
+X016324Y013985D01*
+X016287Y013975D01*
+X016248Y013968D01*
+X016210Y013965D01*
+X016171Y013966D01*
+X016132Y013971D01*
+X016094Y013980D01*
+X016058Y013992D01*
+X016022Y014008D01*
+X015988Y014027D01*
+X015957Y014050D01*
+X015928Y014076D01*
+X015901Y014104D01*
+X015878Y014135D01*
+X015857Y014168D01*
+X015841Y014204D01*
+X015827Y014240D01*
+X015818Y014278D01*
+X015812Y014316D01*
+X015810Y014355D01*
+X015800Y013955D02*
+X016600Y014755D01*
+X019725Y015140D02*
+X019727Y015179D01*
+X019733Y015217D01*
+X019742Y015255D01*
+X019756Y015291D01*
+X019772Y015327D01*
+X019793Y015360D01*
+X019816Y015391D01*
+X019843Y015419D01*
+X019872Y015445D01*
+X019903Y015468D01*
+X019937Y015487D01*
+X019973Y015503D01*
+X020009Y015515D01*
+X020047Y015524D01*
+X020086Y015529D01*
+X020125Y015530D01*
+X020163Y015527D01*
+X020202Y015520D01*
+X020239Y015510D01*
+X020275Y015495D01*
+X020310Y015478D01*
+X020343Y015457D01*
+X020373Y015432D01*
+X020401Y015405D01*
+X020426Y015375D01*
+X020448Y015343D01*
+X020466Y015309D01*
+X020481Y015273D01*
+X020493Y015236D01*
+X020501Y015198D01*
+X020505Y015159D01*
+X020505Y015121D01*
+X020501Y015082D01*
+X020493Y015044D01*
+X020481Y015007D01*
+X020466Y014971D01*
+X020448Y014937D01*
+X020426Y014905D01*
+X020401Y014875D01*
+X020373Y014848D01*
+X020343Y014823D01*
+X020310Y014802D01*
+X020275Y014785D01*
+X020239Y014770D01*
+X020202Y014760D01*
+X020163Y014753D01*
+X020125Y014750D01*
+X020086Y014751D01*
+X020047Y014756D01*
+X020009Y014765D01*
+X019973Y014777D01*
+X019937Y014793D01*
+X019903Y014812D01*
+X019872Y014835D01*
+X019843Y014861D01*
+X019816Y014889D01*
+X019793Y014920D01*
+X019772Y014953D01*
+X019756Y014989D01*
+X019742Y015025D01*
+X019733Y015063D01*
+X019727Y015101D01*
+X019725Y015140D01*
+X019715Y014740D02*
+X020515Y015540D01*
+X020760Y015355D02*
+X020762Y015394D01*
+X020768Y015432D01*
+X020777Y015470D01*
+X020791Y015506D01*
+X020807Y015542D01*
+X020828Y015575D01*
+X020851Y015606D01*
+X020878Y015634D01*
+X020907Y015660D01*
+X020938Y015683D01*
+X020972Y015702D01*
+X021008Y015718D01*
+X021044Y015730D01*
+X021082Y015739D01*
+X021121Y015744D01*
+X021160Y015745D01*
+X021198Y015742D01*
+X021237Y015735D01*
+X021274Y015725D01*
+X021310Y015710D01*
+X021345Y015693D01*
+X021378Y015672D01*
+X021408Y015647D01*
+X021436Y015620D01*
+X021461Y015590D01*
+X021483Y015558D01*
+X021501Y015524D01*
+X021516Y015488D01*
+X021528Y015451D01*
+X021536Y015413D01*
+X021540Y015374D01*
+X021540Y015336D01*
+X021536Y015297D01*
+X021528Y015259D01*
+X021516Y015222D01*
+X021501Y015186D01*
+X021483Y015152D01*
+X021461Y015120D01*
+X021436Y015090D01*
+X021408Y015063D01*
+X021378Y015038D01*
+X021345Y015017D01*
+X021310Y015000D01*
+X021274Y014985D01*
+X021237Y014975D01*
+X021198Y014968D01*
+X021160Y014965D01*
+X021121Y014966D01*
+X021082Y014971D01*
+X021044Y014980D01*
+X021008Y014992D01*
+X020972Y015008D01*
+X020938Y015027D01*
+X020907Y015050D01*
+X020878Y015076D01*
+X020851Y015104D01*
+X020828Y015135D01*
+X020807Y015168D01*
+X020791Y015204D01*
+X020777Y015240D01*
+X020768Y015278D01*
+X020762Y015316D01*
+X020760Y015355D01*
+X020750Y014955D02*
+X021550Y015755D01*
+X021460Y015105D02*
+X021462Y015144D01*
+X021468Y015182D01*
+X021477Y015220D01*
+X021491Y015256D01*
+X021507Y015292D01*
+X021528Y015325D01*
+X021551Y015356D01*
+X021578Y015384D01*
+X021607Y015410D01*
+X021638Y015433D01*
+X021672Y015452D01*
+X021708Y015468D01*
+X021744Y015480D01*
+X021782Y015489D01*
+X021821Y015494D01*
+X021860Y015495D01*
+X021898Y015492D01*
+X021937Y015485D01*
+X021974Y015475D01*
+X022010Y015460D01*
+X022045Y015443D01*
+X022078Y015422D01*
+X022108Y015397D01*
+X022136Y015370D01*
+X022161Y015340D01*
+X022183Y015308D01*
+X022201Y015274D01*
+X022216Y015238D01*
+X022228Y015201D01*
+X022236Y015163D01*
+X022240Y015124D01*
+X022240Y015086D01*
+X022236Y015047D01*
+X022228Y015009D01*
+X022216Y014972D01*
+X022201Y014936D01*
+X022183Y014902D01*
+X022161Y014870D01*
+X022136Y014840D01*
+X022108Y014813D01*
+X022078Y014788D01*
+X022045Y014767D01*
+X022010Y014750D01*
+X021974Y014735D01*
+X021937Y014725D01*
+X021898Y014718D01*
+X021860Y014715D01*
+X021821Y014716D01*
+X021782Y014721D01*
+X021744Y014730D01*
+X021708Y014742D01*
+X021672Y014758D01*
+X021638Y014777D01*
+X021607Y014800D01*
+X021578Y014826D01*
+X021551Y014854D01*
+X021528Y014885D01*
+X021507Y014918D01*
+X021491Y014954D01*
+X021477Y014990D01*
+X021468Y015028D01*
+X021462Y015066D01*
+X021460Y015105D01*
+X021450Y014705D02*
+X022250Y015505D01*
+X023810Y014805D02*
+X023812Y014844D01*
+X023818Y014882D01*
+X023827Y014920D01*
+X023841Y014956D01*
+X023857Y014992D01*
+X023878Y015025D01*
+X023901Y015056D01*
+X023928Y015084D01*
+X023957Y015110D01*
+X023988Y015133D01*
+X024022Y015152D01*
+X024058Y015168D01*
+X024094Y015180D01*
+X024132Y015189D01*
+X024171Y015194D01*
+X024210Y015195D01*
+X024248Y015192D01*
+X024287Y015185D01*
+X024324Y015175D01*
+X024360Y015160D01*
+X024395Y015143D01*
+X024428Y015122D01*
+X024458Y015097D01*
+X024486Y015070D01*
+X024511Y015040D01*
+X024533Y015008D01*
+X024551Y014974D01*
+X024566Y014938D01*
+X024578Y014901D01*
+X024586Y014863D01*
+X024590Y014824D01*
+X024590Y014786D01*
+X024586Y014747D01*
+X024578Y014709D01*
+X024566Y014672D01*
+X024551Y014636D01*
+X024533Y014602D01*
+X024511Y014570D01*
+X024486Y014540D01*
+X024458Y014513D01*
+X024428Y014488D01*
+X024395Y014467D01*
+X024360Y014450D01*
+X024324Y014435D01*
+X024287Y014425D01*
+X024248Y014418D01*
+X024210Y014415D01*
+X024171Y014416D01*
+X024132Y014421D01*
+X024094Y014430D01*
+X024058Y014442D01*
+X024022Y014458D01*
+X023988Y014477D01*
+X023957Y014500D01*
+X023928Y014526D01*
+X023901Y014554D01*
+X023878Y014585D01*
+X023857Y014618D01*
+X023841Y014654D01*
+X023827Y014690D01*
+X023818Y014728D01*
+X023812Y014766D01*
+X023810Y014805D01*
+X023800Y014405D02*
+X024600Y015205D01*
+X024210Y015105D02*
+X024212Y015144D01*
+X024218Y015182D01*
+X024227Y015220D01*
+X024241Y015256D01*
+X024257Y015292D01*
+X024278Y015325D01*
+X024301Y015356D01*
+X024328Y015384D01*
+X024357Y015410D01*
+X024388Y015433D01*
+X024422Y015452D01*
+X024458Y015468D01*
+X024494Y015480D01*
+X024532Y015489D01*
+X024571Y015494D01*
+X024610Y015495D01*
+X024648Y015492D01*
+X024687Y015485D01*
+X024724Y015475D01*
+X024760Y015460D01*
+X024795Y015443D01*
+X024828Y015422D01*
+X024858Y015397D01*
+X024886Y015370D01*
+X024911Y015340D01*
+X024933Y015308D01*
+X024951Y015274D01*
+X024966Y015238D01*
+X024978Y015201D01*
+X024986Y015163D01*
+X024990Y015124D01*
+X024990Y015086D01*
+X024986Y015047D01*
+X024978Y015009D01*
+X024966Y014972D01*
+X024951Y014936D01*
+X024933Y014902D01*
+X024911Y014870D01*
+X024886Y014840D01*
+X024858Y014813D01*
+X024828Y014788D01*
+X024795Y014767D01*
+X024760Y014750D01*
+X024724Y014735D01*
+X024687Y014725D01*
+X024648Y014718D01*
+X024610Y014715D01*
+X024571Y014716D01*
+X024532Y014721D01*
+X024494Y014730D01*
+X024458Y014742D01*
+X024422Y014758D01*
+X024388Y014777D01*
+X024357Y014800D01*
+X024328Y014826D01*
+X024301Y014854D01*
+X024278Y014885D01*
+X024257Y014918D01*
+X024241Y014954D01*
+X024227Y014990D01*
+X024218Y015028D01*
+X024212Y015066D01*
+X024210Y015105D01*
+X024200Y014705D02*
+X025000Y015505D01*
+X024360Y016605D02*
+X024362Y016644D01*
+X024368Y016682D01*
+X024377Y016720D01*
+X024391Y016756D01*
+X024407Y016792D01*
+X024428Y016825D01*
+X024451Y016856D01*
+X024478Y016884D01*
+X024507Y016910D01*
+X024538Y016933D01*
+X024572Y016952D01*
+X024608Y016968D01*
+X024644Y016980D01*
+X024682Y016989D01*
+X024721Y016994D01*
+X024760Y016995D01*
+X024798Y016992D01*
+X024837Y016985D01*
+X024874Y016975D01*
+X024910Y016960D01*
+X024945Y016943D01*
+X024978Y016922D01*
+X025008Y016897D01*
+X025036Y016870D01*
+X025061Y016840D01*
+X025083Y016808D01*
+X025101Y016774D01*
+X025116Y016738D01*
+X025128Y016701D01*
+X025136Y016663D01*
+X025140Y016624D01*
+X025140Y016586D01*
+X025136Y016547D01*
+X025128Y016509D01*
+X025116Y016472D01*
+X025101Y016436D01*
+X025083Y016402D01*
+X025061Y016370D01*
+X025036Y016340D01*
+X025008Y016313D01*
+X024978Y016288D01*
+X024945Y016267D01*
+X024910Y016250D01*
+X024874Y016235D01*
+X024837Y016225D01*
+X024798Y016218D01*
+X024760Y016215D01*
+X024721Y016216D01*
+X024682Y016221D01*
+X024644Y016230D01*
+X024608Y016242D01*
+X024572Y016258D01*
+X024538Y016277D01*
+X024507Y016300D01*
+X024478Y016326D01*
+X024451Y016354D01*
+X024428Y016385D01*
+X024407Y016418D01*
+X024391Y016454D01*
+X024377Y016490D01*
+X024368Y016528D01*
+X024362Y016566D01*
+X024360Y016605D01*
+X024350Y016205D02*
+X025150Y017005D01*
+X026510Y016705D02*
+X026512Y016744D01*
+X026518Y016782D01*
+X026527Y016820D01*
+X026541Y016856D01*
+X026557Y016892D01*
+X026578Y016925D01*
+X026601Y016956D01*
+X026628Y016984D01*
+X026657Y017010D01*
+X026688Y017033D01*
+X026722Y017052D01*
+X026758Y017068D01*
+X026794Y017080D01*
+X026832Y017089D01*
+X026871Y017094D01*
+X026910Y017095D01*
+X026948Y017092D01*
+X026987Y017085D01*
+X027024Y017075D01*
+X027060Y017060D01*
+X027095Y017043D01*
+X027128Y017022D01*
+X027158Y016997D01*
+X027186Y016970D01*
+X027211Y016940D01*
+X027233Y016908D01*
+X027251Y016874D01*
+X027266Y016838D01*
+X027278Y016801D01*
+X027286Y016763D01*
+X027290Y016724D01*
+X027290Y016686D01*
+X027286Y016647D01*
+X027278Y016609D01*
+X027266Y016572D01*
+X027251Y016536D01*
+X027233Y016502D01*
+X027211Y016470D01*
+X027186Y016440D01*
+X027158Y016413D01*
+X027128Y016388D01*
+X027095Y016367D01*
+X027060Y016350D01*
+X027024Y016335D01*
+X026987Y016325D01*
+X026948Y016318D01*
+X026910Y016315D01*
+X026871Y016316D01*
+X026832Y016321D01*
+X026794Y016330D01*
+X026758Y016342D01*
+X026722Y016358D01*
+X026688Y016377D01*
+X026657Y016400D01*
+X026628Y016426D01*
+X026601Y016454D01*
+X026578Y016485D01*
+X026557Y016518D01*
+X026541Y016554D01*
+X026527Y016590D01*
+X026518Y016628D01*
+X026512Y016666D01*
+X026510Y016705D01*
+X026500Y016305D02*
+X027300Y017105D01*
+X028310Y015355D02*
+X028312Y015394D01*
+X028318Y015432D01*
+X028327Y015470D01*
+X028341Y015506D01*
+X028357Y015542D01*
+X028378Y015575D01*
+X028401Y015606D01*
+X028428Y015634D01*
+X028457Y015660D01*
+X028488Y015683D01*
+X028522Y015702D01*
+X028558Y015718D01*
+X028594Y015730D01*
+X028632Y015739D01*
+X028671Y015744D01*
+X028710Y015745D01*
+X028748Y015742D01*
+X028787Y015735D01*
+X028824Y015725D01*
+X028860Y015710D01*
+X028895Y015693D01*
+X028928Y015672D01*
+X028958Y015647D01*
+X028986Y015620D01*
+X029011Y015590D01*
+X029033Y015558D01*
+X029051Y015524D01*
+X029066Y015488D01*
+X029078Y015451D01*
+X029086Y015413D01*
+X029090Y015374D01*
+X029090Y015336D01*
+X029086Y015297D01*
+X029078Y015259D01*
+X029066Y015222D01*
+X029051Y015186D01*
+X029033Y015152D01*
+X029011Y015120D01*
+X028986Y015090D01*
+X028958Y015063D01*
+X028928Y015038D01*
+X028895Y015017D01*
+X028860Y015000D01*
+X028824Y014985D01*
+X028787Y014975D01*
+X028748Y014968D01*
+X028710Y014965D01*
+X028671Y014966D01*
+X028632Y014971D01*
+X028594Y014980D01*
+X028558Y014992D01*
+X028522Y015008D01*
+X028488Y015027D01*
+X028457Y015050D01*
+X028428Y015076D01*
+X028401Y015104D01*
+X028378Y015135D01*
+X028357Y015168D01*
+X028341Y015204D01*
+X028327Y015240D01*
+X028318Y015278D01*
+X028312Y015316D01*
+X028310Y015355D01*
+X028300Y014955D02*
+X029100Y015755D01*
+X029760Y015755D02*
+X029762Y015794D01*
+X029768Y015832D01*
+X029777Y015870D01*
+X029791Y015906D01*
+X029807Y015942D01*
+X029828Y015975D01*
+X029851Y016006D01*
+X029878Y016034D01*
+X029907Y016060D01*
+X029938Y016083D01*
+X029972Y016102D01*
+X030008Y016118D01*
+X030044Y016130D01*
+X030082Y016139D01*
+X030121Y016144D01*
+X030160Y016145D01*
+X030198Y016142D01*
+X030237Y016135D01*
+X030274Y016125D01*
+X030310Y016110D01*
+X030345Y016093D01*
+X030378Y016072D01*
+X030408Y016047D01*
+X030436Y016020D01*
+X030461Y015990D01*
+X030483Y015958D01*
+X030501Y015924D01*
+X030516Y015888D01*
+X030528Y015851D01*
+X030536Y015813D01*
+X030540Y015774D01*
+X030540Y015736D01*
+X030536Y015697D01*
+X030528Y015659D01*
+X030516Y015622D01*
+X030501Y015586D01*
+X030483Y015552D01*
+X030461Y015520D01*
+X030436Y015490D01*
+X030408Y015463D01*
+X030378Y015438D01*
+X030345Y015417D01*
+X030310Y015400D01*
+X030274Y015385D01*
+X030237Y015375D01*
+X030198Y015368D01*
+X030160Y015365D01*
+X030121Y015366D01*
+X030082Y015371D01*
+X030044Y015380D01*
+X030008Y015392D01*
+X029972Y015408D01*
+X029938Y015427D01*
+X029907Y015450D01*
+X029878Y015476D01*
+X029851Y015504D01*
+X029828Y015535D01*
+X029807Y015568D01*
+X029791Y015604D01*
+X029777Y015640D01*
+X029768Y015678D01*
+X029762Y015716D01*
+X029760Y015755D01*
+X029750Y015355D02*
+X030550Y016155D01*
+X030160Y015955D02*
+X030162Y015994D01*
+X030168Y016032D01*
+X030177Y016070D01*
+X030191Y016106D01*
+X030207Y016142D01*
+X030228Y016175D01*
+X030251Y016206D01*
+X030278Y016234D01*
+X030307Y016260D01*
+X030338Y016283D01*
+X030372Y016302D01*
+X030408Y016318D01*
+X030444Y016330D01*
+X030482Y016339D01*
+X030521Y016344D01*
+X030560Y016345D01*
+X030598Y016342D01*
+X030637Y016335D01*
+X030674Y016325D01*
+X030710Y016310D01*
+X030745Y016293D01*
+X030778Y016272D01*
+X030808Y016247D01*
+X030836Y016220D01*
+X030861Y016190D01*
+X030883Y016158D01*
+X030901Y016124D01*
+X030916Y016088D01*
+X030928Y016051D01*
+X030936Y016013D01*
+X030940Y015974D01*
+X030940Y015936D01*
+X030936Y015897D01*
+X030928Y015859D01*
+X030916Y015822D01*
+X030901Y015786D01*
+X030883Y015752D01*
+X030861Y015720D01*
+X030836Y015690D01*
+X030808Y015663D01*
+X030778Y015638D01*
+X030745Y015617D01*
+X030710Y015600D01*
+X030674Y015585D01*
+X030637Y015575D01*
+X030598Y015568D01*
+X030560Y015565D01*
+X030521Y015566D01*
+X030482Y015571D01*
+X030444Y015580D01*
+X030408Y015592D01*
+X030372Y015608D01*
+X030338Y015627D01*
+X030307Y015650D01*
+X030278Y015676D01*
+X030251Y015704D01*
+X030228Y015735D01*
+X030207Y015768D01*
+X030191Y015804D01*
+X030177Y015840D01*
+X030168Y015878D01*
+X030162Y015916D01*
+X030160Y015955D01*
+X030150Y015555D02*
+X030950Y016355D01*
+X027510Y015105D02*
+X027512Y015144D01*
+X027518Y015182D01*
+X027527Y015220D01*
+X027541Y015256D01*
+X027557Y015292D01*
+X027578Y015325D01*
+X027601Y015356D01*
+X027628Y015384D01*
+X027657Y015410D01*
+X027688Y015433D01*
+X027722Y015452D01*
+X027758Y015468D01*
+X027794Y015480D01*
+X027832Y015489D01*
+X027871Y015494D01*
+X027910Y015495D01*
+X027948Y015492D01*
+X027987Y015485D01*
+X028024Y015475D01*
+X028060Y015460D01*
+X028095Y015443D01*
+X028128Y015422D01*
+X028158Y015397D01*
+X028186Y015370D01*
+X028211Y015340D01*
+X028233Y015308D01*
+X028251Y015274D01*
+X028266Y015238D01*
+X028278Y015201D01*
+X028286Y015163D01*
+X028290Y015124D01*
+X028290Y015086D01*
+X028286Y015047D01*
+X028278Y015009D01*
+X028266Y014972D01*
+X028251Y014936D01*
+X028233Y014902D01*
+X028211Y014870D01*
+X028186Y014840D01*
+X028158Y014813D01*
+X028128Y014788D01*
+X028095Y014767D01*
+X028060Y014750D01*
+X028024Y014735D01*
+X027987Y014725D01*
+X027948Y014718D01*
+X027910Y014715D01*
+X027871Y014716D01*
+X027832Y014721D01*
+X027794Y014730D01*
+X027758Y014742D01*
+X027722Y014758D01*
+X027688Y014777D01*
+X027657Y014800D01*
+X027628Y014826D01*
+X027601Y014854D01*
+X027578Y014885D01*
+X027557Y014918D01*
+X027541Y014954D01*
+X027527Y014990D01*
+X027518Y015028D01*
+X027512Y015066D01*
+X027510Y015105D01*
+X027500Y014705D02*
+X028300Y015505D01*
+X029010Y014305D02*
+X029012Y014344D01*
+X029018Y014382D01*
+X029027Y014420D01*
+X029041Y014456D01*
+X029057Y014492D01*
+X029078Y014525D01*
+X029101Y014556D01*
+X029128Y014584D01*
+X029157Y014610D01*
+X029188Y014633D01*
+X029222Y014652D01*
+X029258Y014668D01*
+X029294Y014680D01*
+X029332Y014689D01*
+X029371Y014694D01*
+X029410Y014695D01*
+X029448Y014692D01*
+X029487Y014685D01*
+X029524Y014675D01*
+X029560Y014660D01*
+X029595Y014643D01*
+X029628Y014622D01*
+X029658Y014597D01*
+X029686Y014570D01*
+X029711Y014540D01*
+X029733Y014508D01*
+X029751Y014474D01*
+X029766Y014438D01*
+X029778Y014401D01*
+X029786Y014363D01*
+X029790Y014324D01*
+X029790Y014286D01*
+X029786Y014247D01*
+X029778Y014209D01*
+X029766Y014172D01*
+X029751Y014136D01*
+X029733Y014102D01*
+X029711Y014070D01*
+X029686Y014040D01*
+X029658Y014013D01*
+X029628Y013988D01*
+X029595Y013967D01*
+X029560Y013950D01*
+X029524Y013935D01*
+X029487Y013925D01*
+X029448Y013918D01*
+X029410Y013915D01*
+X029371Y013916D01*
+X029332Y013921D01*
+X029294Y013930D01*
+X029258Y013942D01*
+X029222Y013958D01*
+X029188Y013977D01*
+X029157Y014000D01*
+X029128Y014026D01*
+X029101Y014054D01*
+X029078Y014085D01*
+X029057Y014118D01*
+X029041Y014154D01*
+X029027Y014190D01*
+X029018Y014228D01*
+X029012Y014266D01*
+X029010Y014305D01*
+X029000Y013905D02*
+X029800Y014705D01*
+X029810Y014455D02*
+X029812Y014494D01*
+X029818Y014532D01*
+X029827Y014570D01*
+X029841Y014606D01*
+X029857Y014642D01*
+X029878Y014675D01*
+X029901Y014706D01*
+X029928Y014734D01*
+X029957Y014760D01*
+X029988Y014783D01*
+X030022Y014802D01*
+X030058Y014818D01*
+X030094Y014830D01*
+X030132Y014839D01*
+X030171Y014844D01*
+X030210Y014845D01*
+X030248Y014842D01*
+X030287Y014835D01*
+X030324Y014825D01*
+X030360Y014810D01*
+X030395Y014793D01*
+X030428Y014772D01*
+X030458Y014747D01*
+X030486Y014720D01*
+X030511Y014690D01*
+X030533Y014658D01*
+X030551Y014624D01*
+X030566Y014588D01*
+X030578Y014551D01*
+X030586Y014513D01*
+X030590Y014474D01*
+X030590Y014436D01*
+X030586Y014397D01*
+X030578Y014359D01*
+X030566Y014322D01*
+X030551Y014286D01*
+X030533Y014252D01*
+X030511Y014220D01*
+X030486Y014190D01*
+X030458Y014163D01*
+X030428Y014138D01*
+X030395Y014117D01*
+X030360Y014100D01*
+X030324Y014085D01*
+X030287Y014075D01*
+X030248Y014068D01*
+X030210Y014065D01*
+X030171Y014066D01*
+X030132Y014071D01*
+X030094Y014080D01*
+X030058Y014092D01*
+X030022Y014108D01*
+X029988Y014127D01*
+X029957Y014150D01*
+X029928Y014176D01*
+X029901Y014204D01*
+X029878Y014235D01*
+X029857Y014268D01*
+X029841Y014304D01*
+X029827Y014340D01*
+X029818Y014378D01*
+X029812Y014416D01*
+X029810Y014455D01*
+X029800Y014055D02*
+X030600Y014855D01*
+X030860Y013855D02*
+X030862Y013894D01*
+X030868Y013932D01*
+X030877Y013970D01*
+X030891Y014006D01*
+X030907Y014042D01*
+X030928Y014075D01*
+X030951Y014106D01*
+X030978Y014134D01*
+X031007Y014160D01*
+X031038Y014183D01*
+X031072Y014202D01*
+X031108Y014218D01*
+X031144Y014230D01*
+X031182Y014239D01*
+X031221Y014244D01*
+X031260Y014245D01*
+X031298Y014242D01*
+X031337Y014235D01*
+X031374Y014225D01*
+X031410Y014210D01*
+X031445Y014193D01*
+X031478Y014172D01*
+X031508Y014147D01*
+X031536Y014120D01*
+X031561Y014090D01*
+X031583Y014058D01*
+X031601Y014024D01*
+X031616Y013988D01*
+X031628Y013951D01*
+X031636Y013913D01*
+X031640Y013874D01*
+X031640Y013836D01*
+X031636Y013797D01*
+X031628Y013759D01*
+X031616Y013722D01*
+X031601Y013686D01*
+X031583Y013652D01*
+X031561Y013620D01*
+X031536Y013590D01*
+X031508Y013563D01*
+X031478Y013538D01*
+X031445Y013517D01*
+X031410Y013500D01*
+X031374Y013485D01*
+X031337Y013475D01*
+X031298Y013468D01*
+X031260Y013465D01*
+X031221Y013466D01*
+X031182Y013471D01*
+X031144Y013480D01*
+X031108Y013492D01*
+X031072Y013508D01*
+X031038Y013527D01*
+X031007Y013550D01*
+X030978Y013576D01*
+X030951Y013604D01*
+X030928Y013635D01*
+X030907Y013668D01*
+X030891Y013704D01*
+X030877Y013740D01*
+X030868Y013778D01*
+X030862Y013816D01*
+X030860Y013855D01*
+X030850Y013455D02*
+X031650Y014255D01*
+X031510Y013855D02*
+X031512Y013894D01*
+X031518Y013932D01*
+X031527Y013970D01*
+X031541Y014006D01*
+X031557Y014042D01*
+X031578Y014075D01*
+X031601Y014106D01*
+X031628Y014134D01*
+X031657Y014160D01*
+X031688Y014183D01*
+X031722Y014202D01*
+X031758Y014218D01*
+X031794Y014230D01*
+X031832Y014239D01*
+X031871Y014244D01*
+X031910Y014245D01*
+X031948Y014242D01*
+X031987Y014235D01*
+X032024Y014225D01*
+X032060Y014210D01*
+X032095Y014193D01*
+X032128Y014172D01*
+X032158Y014147D01*
+X032186Y014120D01*
+X032211Y014090D01*
+X032233Y014058D01*
+X032251Y014024D01*
+X032266Y013988D01*
+X032278Y013951D01*
+X032286Y013913D01*
+X032290Y013874D01*
+X032290Y013836D01*
+X032286Y013797D01*
+X032278Y013759D01*
+X032266Y013722D01*
+X032251Y013686D01*
+X032233Y013652D01*
+X032211Y013620D01*
+X032186Y013590D01*
+X032158Y013563D01*
+X032128Y013538D01*
+X032095Y013517D01*
+X032060Y013500D01*
+X032024Y013485D01*
+X031987Y013475D01*
+X031948Y013468D01*
+X031910Y013465D01*
+X031871Y013466D01*
+X031832Y013471D01*
+X031794Y013480D01*
+X031758Y013492D01*
+X031722Y013508D01*
+X031688Y013527D01*
+X031657Y013550D01*
+X031628Y013576D01*
+X031601Y013604D01*
+X031578Y013635D01*
+X031557Y013668D01*
+X031541Y013704D01*
+X031527Y013740D01*
+X031518Y013778D01*
+X031512Y013816D01*
+X031510Y013855D01*
+X031500Y013455D02*
+X032300Y014255D01*
+X030810Y013355D02*
+X030812Y013394D01*
+X030818Y013432D01*
+X030827Y013470D01*
+X030841Y013506D01*
+X030857Y013542D01*
+X030878Y013575D01*
+X030901Y013606D01*
+X030928Y013634D01*
+X030957Y013660D01*
+X030988Y013683D01*
+X031022Y013702D01*
+X031058Y013718D01*
+X031094Y013730D01*
+X031132Y013739D01*
+X031171Y013744D01*
+X031210Y013745D01*
+X031248Y013742D01*
+X031287Y013735D01*
+X031324Y013725D01*
+X031360Y013710D01*
+X031395Y013693D01*
+X031428Y013672D01*
+X031458Y013647D01*
+X031486Y013620D01*
+X031511Y013590D01*
+X031533Y013558D01*
+X031551Y013524D01*
+X031566Y013488D01*
+X031578Y013451D01*
+X031586Y013413D01*
+X031590Y013374D01*
+X031590Y013336D01*
+X031586Y013297D01*
+X031578Y013259D01*
+X031566Y013222D01*
+X031551Y013186D01*
+X031533Y013152D01*
+X031511Y013120D01*
+X031486Y013090D01*
+X031458Y013063D01*
+X031428Y013038D01*
+X031395Y013017D01*
+X031360Y013000D01*
+X031324Y012985D01*
+X031287Y012975D01*
+X031248Y012968D01*
+X031210Y012965D01*
+X031171Y012966D01*
+X031132Y012971D01*
+X031094Y012980D01*
+X031058Y012992D01*
+X031022Y013008D01*
+X030988Y013027D01*
+X030957Y013050D01*
+X030928Y013076D01*
+X030901Y013104D01*
+X030878Y013135D01*
+X030857Y013168D01*
+X030841Y013204D01*
+X030827Y013240D01*
+X030818Y013278D01*
+X030812Y013316D01*
+X030810Y013355D01*
+X030800Y012955D02*
+X031600Y013755D01*
+X029210Y012605D02*
+X029212Y012644D01*
+X029218Y012682D01*
+X029227Y012720D01*
+X029241Y012756D01*
+X029257Y012792D01*
+X029278Y012825D01*
+X029301Y012856D01*
+X029328Y012884D01*
+X029357Y012910D01*
+X029388Y012933D01*
+X029422Y012952D01*
+X029458Y012968D01*
+X029494Y012980D01*
+X029532Y012989D01*
+X029571Y012994D01*
+X029610Y012995D01*
+X029648Y012992D01*
+X029687Y012985D01*
+X029724Y012975D01*
+X029760Y012960D01*
+X029795Y012943D01*
+X029828Y012922D01*
+X029858Y012897D01*
+X029886Y012870D01*
+X029911Y012840D01*
+X029933Y012808D01*
+X029951Y012774D01*
+X029966Y012738D01*
+X029978Y012701D01*
+X029986Y012663D01*
+X029990Y012624D01*
+X029990Y012586D01*
+X029986Y012547D01*
+X029978Y012509D01*
+X029966Y012472D01*
+X029951Y012436D01*
+X029933Y012402D01*
+X029911Y012370D01*
+X029886Y012340D01*
+X029858Y012313D01*
+X029828Y012288D01*
+X029795Y012267D01*
+X029760Y012250D01*
+X029724Y012235D01*
+X029687Y012225D01*
+X029648Y012218D01*
+X029610Y012215D01*
+X029571Y012216D01*
+X029532Y012221D01*
+X029494Y012230D01*
+X029458Y012242D01*
+X029422Y012258D01*
+X029388Y012277D01*
+X029357Y012300D01*
+X029328Y012326D01*
+X029301Y012354D01*
+X029278Y012385D01*
+X029257Y012418D01*
+X029241Y012454D01*
+X029227Y012490D01*
+X029218Y012528D01*
+X029212Y012566D01*
+X029210Y012605D01*
+X029200Y012205D02*
+X030000Y013005D01*
+X029860Y011905D02*
+X029862Y011944D01*
+X029868Y011982D01*
+X029877Y012020D01*
+X029891Y012056D01*
+X029907Y012092D01*
+X029928Y012125D01*
+X029951Y012156D01*
+X029978Y012184D01*
+X030007Y012210D01*
+X030038Y012233D01*
+X030072Y012252D01*
+X030108Y012268D01*
+X030144Y012280D01*
+X030182Y012289D01*
+X030221Y012294D01*
+X030260Y012295D01*
+X030298Y012292D01*
+X030337Y012285D01*
+X030374Y012275D01*
+X030410Y012260D01*
+X030445Y012243D01*
+X030478Y012222D01*
+X030508Y012197D01*
+X030536Y012170D01*
+X030561Y012140D01*
+X030583Y012108D01*
+X030601Y012074D01*
+X030616Y012038D01*
+X030628Y012001D01*
+X030636Y011963D01*
+X030640Y011924D01*
+X030640Y011886D01*
+X030636Y011847D01*
+X030628Y011809D01*
+X030616Y011772D01*
+X030601Y011736D01*
+X030583Y011702D01*
+X030561Y011670D01*
+X030536Y011640D01*
+X030508Y011613D01*
+X030478Y011588D01*
+X030445Y011567D01*
+X030410Y011550D01*
+X030374Y011535D01*
+X030337Y011525D01*
+X030298Y011518D01*
+X030260Y011515D01*
+X030221Y011516D01*
+X030182Y011521D01*
+X030144Y011530D01*
+X030108Y011542D01*
+X030072Y011558D01*
+X030038Y011577D01*
+X030007Y011600D01*
+X029978Y011626D01*
+X029951Y011654D01*
+X029928Y011685D01*
+X029907Y011718D01*
+X029891Y011754D01*
+X029877Y011790D01*
+X029868Y011828D01*
+X029862Y011866D01*
+X029860Y011905D01*
+X029850Y011505D02*
+X030650Y012305D01*
+X030760Y011905D02*
+X030762Y011944D01*
+X030768Y011982D01*
+X030777Y012020D01*
+X030791Y012056D01*
+X030807Y012092D01*
+X030828Y012125D01*
+X030851Y012156D01*
+X030878Y012184D01*
+X030907Y012210D01*
+X030938Y012233D01*
+X030972Y012252D01*
+X031008Y012268D01*
+X031044Y012280D01*
+X031082Y012289D01*
+X031121Y012294D01*
+X031160Y012295D01*
+X031198Y012292D01*
+X031237Y012285D01*
+X031274Y012275D01*
+X031310Y012260D01*
+X031345Y012243D01*
+X031378Y012222D01*
+X031408Y012197D01*
+X031436Y012170D01*
+X031461Y012140D01*
+X031483Y012108D01*
+X031501Y012074D01*
+X031516Y012038D01*
+X031528Y012001D01*
+X031536Y011963D01*
+X031540Y011924D01*
+X031540Y011886D01*
+X031536Y011847D01*
+X031528Y011809D01*
+X031516Y011772D01*
+X031501Y011736D01*
+X031483Y011702D01*
+X031461Y011670D01*
+X031436Y011640D01*
+X031408Y011613D01*
+X031378Y011588D01*
+X031345Y011567D01*
+X031310Y011550D01*
+X031274Y011535D01*
+X031237Y011525D01*
+X031198Y011518D01*
+X031160Y011515D01*
+X031121Y011516D01*
+X031082Y011521D01*
+X031044Y011530D01*
+X031008Y011542D01*
+X030972Y011558D01*
+X030938Y011577D01*
+X030907Y011600D01*
+X030878Y011626D01*
+X030851Y011654D01*
+X030828Y011685D01*
+X030807Y011718D01*
+X030791Y011754D01*
+X030777Y011790D01*
+X030768Y011828D01*
+X030762Y011866D01*
+X030760Y011905D01*
+X030750Y011505D02*
+X031550Y012305D01*
+X029060Y011555D02*
+X029062Y011594D01*
+X029068Y011632D01*
+X029077Y011670D01*
+X029091Y011706D01*
+X029107Y011742D01*
+X029128Y011775D01*
+X029151Y011806D01*
+X029178Y011834D01*
+X029207Y011860D01*
+X029238Y011883D01*
+X029272Y011902D01*
+X029308Y011918D01*
+X029344Y011930D01*
+X029382Y011939D01*
+X029421Y011944D01*
+X029460Y011945D01*
+X029498Y011942D01*
+X029537Y011935D01*
+X029574Y011925D01*
+X029610Y011910D01*
+X029645Y011893D01*
+X029678Y011872D01*
+X029708Y011847D01*
+X029736Y011820D01*
+X029761Y011790D01*
+X029783Y011758D01*
+X029801Y011724D01*
+X029816Y011688D01*
+X029828Y011651D01*
+X029836Y011613D01*
+X029840Y011574D01*
+X029840Y011536D01*
+X029836Y011497D01*
+X029828Y011459D01*
+X029816Y011422D01*
+X029801Y011386D01*
+X029783Y011352D01*
+X029761Y011320D01*
+X029736Y011290D01*
+X029708Y011263D01*
+X029678Y011238D01*
+X029645Y011217D01*
+X029610Y011200D01*
+X029574Y011185D01*
+X029537Y011175D01*
+X029498Y011168D01*
+X029460Y011165D01*
+X029421Y011166D01*
+X029382Y011171D01*
+X029344Y011180D01*
+X029308Y011192D01*
+X029272Y011208D01*
+X029238Y011227D01*
+X029207Y011250D01*
+X029178Y011276D01*
+X029151Y011304D01*
+X029128Y011335D01*
+X029107Y011368D01*
+X029091Y011404D01*
+X029077Y011440D01*
+X029068Y011478D01*
+X029062Y011516D01*
+X029060Y011555D01*
+X029050Y011155D02*
+X029850Y011955D01*
+X027960Y011305D02*
+X027962Y011344D01*
+X027968Y011382D01*
+X027977Y011420D01*
+X027991Y011456D01*
+X028007Y011492D01*
+X028028Y011525D01*
+X028051Y011556D01*
+X028078Y011584D01*
+X028107Y011610D01*
+X028138Y011633D01*
+X028172Y011652D01*
+X028208Y011668D01*
+X028244Y011680D01*
+X028282Y011689D01*
+X028321Y011694D01*
+X028360Y011695D01*
+X028398Y011692D01*
+X028437Y011685D01*
+X028474Y011675D01*
+X028510Y011660D01*
+X028545Y011643D01*
+X028578Y011622D01*
+X028608Y011597D01*
+X028636Y011570D01*
+X028661Y011540D01*
+X028683Y011508D01*
+X028701Y011474D01*
+X028716Y011438D01*
+X028728Y011401D01*
+X028736Y011363D01*
+X028740Y011324D01*
+X028740Y011286D01*
+X028736Y011247D01*
+X028728Y011209D01*
+X028716Y011172D01*
+X028701Y011136D01*
+X028683Y011102D01*
+X028661Y011070D01*
+X028636Y011040D01*
+X028608Y011013D01*
+X028578Y010988D01*
+X028545Y010967D01*
+X028510Y010950D01*
+X028474Y010935D01*
+X028437Y010925D01*
+X028398Y010918D01*
+X028360Y010915D01*
+X028321Y010916D01*
+X028282Y010921D01*
+X028244Y010930D01*
+X028208Y010942D01*
+X028172Y010958D01*
+X028138Y010977D01*
+X028107Y011000D01*
+X028078Y011026D01*
+X028051Y011054D01*
+X028028Y011085D01*
+X028007Y011118D01*
+X027991Y011154D01*
+X027977Y011190D01*
+X027968Y011228D01*
+X027962Y011266D01*
+X027960Y011305D01*
+X027950Y010905D02*
+X028750Y011705D01*
+X026560Y011555D02*
+X026562Y011594D01*
+X026568Y011632D01*
+X026577Y011670D01*
+X026591Y011706D01*
+X026607Y011742D01*
+X026628Y011775D01*
+X026651Y011806D01*
+X026678Y011834D01*
+X026707Y011860D01*
+X026738Y011883D01*
+X026772Y011902D01*
+X026808Y011918D01*
+X026844Y011930D01*
+X026882Y011939D01*
+X026921Y011944D01*
+X026960Y011945D01*
+X026998Y011942D01*
+X027037Y011935D01*
+X027074Y011925D01*
+X027110Y011910D01*
+X027145Y011893D01*
+X027178Y011872D01*
+X027208Y011847D01*
+X027236Y011820D01*
+X027261Y011790D01*
+X027283Y011758D01*
+X027301Y011724D01*
+X027316Y011688D01*
+X027328Y011651D01*
+X027336Y011613D01*
+X027340Y011574D01*
+X027340Y011536D01*
+X027336Y011497D01*
+X027328Y011459D01*
+X027316Y011422D01*
+X027301Y011386D01*
+X027283Y011352D01*
+X027261Y011320D01*
+X027236Y011290D01*
+X027208Y011263D01*
+X027178Y011238D01*
+X027145Y011217D01*
+X027110Y011200D01*
+X027074Y011185D01*
+X027037Y011175D01*
+X026998Y011168D01*
+X026960Y011165D01*
+X026921Y011166D01*
+X026882Y011171D01*
+X026844Y011180D01*
+X026808Y011192D01*
+X026772Y011208D01*
+X026738Y011227D01*
+X026707Y011250D01*
+X026678Y011276D01*
+X026651Y011304D01*
+X026628Y011335D01*
+X026607Y011368D01*
+X026591Y011404D01*
+X026577Y011440D01*
+X026568Y011478D01*
+X026562Y011516D01*
+X026560Y011555D01*
+X026550Y011155D02*
+X027350Y011955D01*
+X026510Y012105D02*
+X026512Y012144D01*
+X026518Y012182D01*
+X026527Y012220D01*
+X026541Y012256D01*
+X026557Y012292D01*
+X026578Y012325D01*
+X026601Y012356D01*
+X026628Y012384D01*
+X026657Y012410D01*
+X026688Y012433D01*
+X026722Y012452D01*
+X026758Y012468D01*
+X026794Y012480D01*
+X026832Y012489D01*
+X026871Y012494D01*
+X026910Y012495D01*
+X026948Y012492D01*
+X026987Y012485D01*
+X027024Y012475D01*
+X027060Y012460D01*
+X027095Y012443D01*
+X027128Y012422D01*
+X027158Y012397D01*
+X027186Y012370D01*
+X027211Y012340D01*
+X027233Y012308D01*
+X027251Y012274D01*
+X027266Y012238D01*
+X027278Y012201D01*
+X027286Y012163D01*
+X027290Y012124D01*
+X027290Y012086D01*
+X027286Y012047D01*
+X027278Y012009D01*
+X027266Y011972D01*
+X027251Y011936D01*
+X027233Y011902D01*
+X027211Y011870D01*
+X027186Y011840D01*
+X027158Y011813D01*
+X027128Y011788D01*
+X027095Y011767D01*
+X027060Y011750D01*
+X027024Y011735D01*
+X026987Y011725D01*
+X026948Y011718D01*
+X026910Y011715D01*
+X026871Y011716D01*
+X026832Y011721D01*
+X026794Y011730D01*
+X026758Y011742D01*
+X026722Y011758D01*
+X026688Y011777D01*
+X026657Y011800D01*
+X026628Y011826D01*
+X026601Y011854D01*
+X026578Y011885D01*
+X026557Y011918D01*
+X026541Y011954D01*
+X026527Y011990D01*
+X026518Y012028D01*
+X026512Y012066D01*
+X026510Y012105D01*
+X026500Y011705D02*
+X027300Y012505D01*
+X028160Y013805D02*
+X028162Y013844D01*
+X028168Y013882D01*
+X028177Y013920D01*
+X028191Y013956D01*
+X028207Y013992D01*
+X028228Y014025D01*
+X028251Y014056D01*
+X028278Y014084D01*
+X028307Y014110D01*
+X028338Y014133D01*
+X028372Y014152D01*
+X028408Y014168D01*
+X028444Y014180D01*
+X028482Y014189D01*
+X028521Y014194D01*
+X028560Y014195D01*
+X028598Y014192D01*
+X028637Y014185D01*
+X028674Y014175D01*
+X028710Y014160D01*
+X028745Y014143D01*
+X028778Y014122D01*
+X028808Y014097D01*
+X028836Y014070D01*
+X028861Y014040D01*
+X028883Y014008D01*
+X028901Y013974D01*
+X028916Y013938D01*
+X028928Y013901D01*
+X028936Y013863D01*
+X028940Y013824D01*
+X028940Y013786D01*
+X028936Y013747D01*
+X028928Y013709D01*
+X028916Y013672D01*
+X028901Y013636D01*
+X028883Y013602D01*
+X028861Y013570D01*
+X028836Y013540D01*
+X028808Y013513D01*
+X028778Y013488D01*
+X028745Y013467D01*
+X028710Y013450D01*
+X028674Y013435D01*
+X028637Y013425D01*
+X028598Y013418D01*
+X028560Y013415D01*
+X028521Y013416D01*
+X028482Y013421D01*
+X028444Y013430D01*
+X028408Y013442D01*
+X028372Y013458D01*
+X028338Y013477D01*
+X028307Y013500D01*
+X028278Y013526D01*
+X028251Y013554D01*
+X028228Y013585D01*
+X028207Y013618D01*
+X028191Y013654D01*
+X028177Y013690D01*
+X028168Y013728D01*
+X028162Y013766D01*
+X028160Y013805D01*
+X028150Y013405D02*
+X028950Y014205D01*
+X026260Y014655D02*
+X026262Y014694D01*
+X026268Y014732D01*
+X026277Y014770D01*
+X026291Y014806D01*
+X026307Y014842D01*
+X026328Y014875D01*
+X026351Y014906D01*
+X026378Y014934D01*
+X026407Y014960D01*
+X026438Y014983D01*
+X026472Y015002D01*
+X026508Y015018D01*
+X026544Y015030D01*
+X026582Y015039D01*
+X026621Y015044D01*
+X026660Y015045D01*
+X026698Y015042D01*
+X026737Y015035D01*
+X026774Y015025D01*
+X026810Y015010D01*
+X026845Y014993D01*
+X026878Y014972D01*
+X026908Y014947D01*
+X026936Y014920D01*
+X026961Y014890D01*
+X026983Y014858D01*
+X027001Y014824D01*
+X027016Y014788D01*
+X027028Y014751D01*
+X027036Y014713D01*
+X027040Y014674D01*
+X027040Y014636D01*
+X027036Y014597D01*
+X027028Y014559D01*
+X027016Y014522D01*
+X027001Y014486D01*
+X026983Y014452D01*
+X026961Y014420D01*
+X026936Y014390D01*
+X026908Y014363D01*
+X026878Y014338D01*
+X026845Y014317D01*
+X026810Y014300D01*
+X026774Y014285D01*
+X026737Y014275D01*
+X026698Y014268D01*
+X026660Y014265D01*
+X026621Y014266D01*
+X026582Y014271D01*
+X026544Y014280D01*
+X026508Y014292D01*
+X026472Y014308D01*
+X026438Y014327D01*
+X026407Y014350D01*
+X026378Y014376D01*
+X026351Y014404D01*
+X026328Y014435D01*
+X026307Y014468D01*
+X026291Y014504D01*
+X026277Y014540D01*
+X026268Y014578D01*
+X026262Y014616D01*
+X026260Y014655D01*
+X026250Y014255D02*
+X027050Y015055D01*
+X025560Y014705D02*
+X025562Y014744D01*
+X025568Y014782D01*
+X025577Y014820D01*
+X025591Y014856D01*
+X025607Y014892D01*
+X025628Y014925D01*
+X025651Y014956D01*
+X025678Y014984D01*
+X025707Y015010D01*
+X025738Y015033D01*
+X025772Y015052D01*
+X025808Y015068D01*
+X025844Y015080D01*
+X025882Y015089D01*
+X025921Y015094D01*
+X025960Y015095D01*
+X025998Y015092D01*
+X026037Y015085D01*
+X026074Y015075D01*
+X026110Y015060D01*
+X026145Y015043D01*
+X026178Y015022D01*
+X026208Y014997D01*
+X026236Y014970D01*
+X026261Y014940D01*
+X026283Y014908D01*
+X026301Y014874D01*
+X026316Y014838D01*
+X026328Y014801D01*
+X026336Y014763D01*
+X026340Y014724D01*
+X026340Y014686D01*
+X026336Y014647D01*
+X026328Y014609D01*
+X026316Y014572D01*
+X026301Y014536D01*
+X026283Y014502D01*
+X026261Y014470D01*
+X026236Y014440D01*
+X026208Y014413D01*
+X026178Y014388D01*
+X026145Y014367D01*
+X026110Y014350D01*
+X026074Y014335D01*
+X026037Y014325D01*
+X025998Y014318D01*
+X025960Y014315D01*
+X025921Y014316D01*
+X025882Y014321D01*
+X025844Y014330D01*
+X025808Y014342D01*
+X025772Y014358D01*
+X025738Y014377D01*
+X025707Y014400D01*
+X025678Y014426D01*
+X025651Y014454D01*
+X025628Y014485D01*
+X025607Y014518D01*
+X025591Y014554D01*
+X025577Y014590D01*
+X025568Y014628D01*
+X025562Y014666D01*
+X025560Y014705D01*
+X025550Y014305D02*
+X026350Y015105D01*
+X023510Y013605D02*
+X023512Y013644D01*
+X023518Y013682D01*
+X023527Y013720D01*
+X023541Y013756D01*
+X023557Y013792D01*
+X023578Y013825D01*
+X023601Y013856D01*
+X023628Y013884D01*
+X023657Y013910D01*
+X023688Y013933D01*
+X023722Y013952D01*
+X023758Y013968D01*
+X023794Y013980D01*
+X023832Y013989D01*
+X023871Y013994D01*
+X023910Y013995D01*
+X023948Y013992D01*
+X023987Y013985D01*
+X024024Y013975D01*
+X024060Y013960D01*
+X024095Y013943D01*
+X024128Y013922D01*
+X024158Y013897D01*
+X024186Y013870D01*
+X024211Y013840D01*
+X024233Y013808D01*
+X024251Y013774D01*
+X024266Y013738D01*
+X024278Y013701D01*
+X024286Y013663D01*
+X024290Y013624D01*
+X024290Y013586D01*
+X024286Y013547D01*
+X024278Y013509D01*
+X024266Y013472D01*
+X024251Y013436D01*
+X024233Y013402D01*
+X024211Y013370D01*
+X024186Y013340D01*
+X024158Y013313D01*
+X024128Y013288D01*
+X024095Y013267D01*
+X024060Y013250D01*
+X024024Y013235D01*
+X023987Y013225D01*
+X023948Y013218D01*
+X023910Y013215D01*
+X023871Y013216D01*
+X023832Y013221D01*
+X023794Y013230D01*
+X023758Y013242D01*
+X023722Y013258D01*
+X023688Y013277D01*
+X023657Y013300D01*
+X023628Y013326D01*
+X023601Y013354D01*
+X023578Y013385D01*
+X023557Y013418D01*
+X023541Y013454D01*
+X023527Y013490D01*
+X023518Y013528D01*
+X023512Y013566D01*
+X023510Y013605D01*
+X023500Y013205D02*
+X024300Y014005D01*
+X024610Y013505D02*
+X024612Y013544D01*
+X024618Y013582D01*
+X024627Y013620D01*
+X024641Y013656D01*
+X024657Y013692D01*
+X024678Y013725D01*
+X024701Y013756D01*
+X024728Y013784D01*
+X024757Y013810D01*
+X024788Y013833D01*
+X024822Y013852D01*
+X024858Y013868D01*
+X024894Y013880D01*
+X024932Y013889D01*
+X024971Y013894D01*
+X025010Y013895D01*
+X025048Y013892D01*
+X025087Y013885D01*
+X025124Y013875D01*
+X025160Y013860D01*
+X025195Y013843D01*
+X025228Y013822D01*
+X025258Y013797D01*
+X025286Y013770D01*
+X025311Y013740D01*
+X025333Y013708D01*
+X025351Y013674D01*
+X025366Y013638D01*
+X025378Y013601D01*
+X025386Y013563D01*
+X025390Y013524D01*
+X025390Y013486D01*
+X025386Y013447D01*
+X025378Y013409D01*
+X025366Y013372D01*
+X025351Y013336D01*
+X025333Y013302D01*
+X025311Y013270D01*
+X025286Y013240D01*
+X025258Y013213D01*
+X025228Y013188D01*
+X025195Y013167D01*
+X025160Y013150D01*
+X025124Y013135D01*
+X025087Y013125D01*
+X025048Y013118D01*
+X025010Y013115D01*
+X024971Y013116D01*
+X024932Y013121D01*
+X024894Y013130D01*
+X024858Y013142D01*
+X024822Y013158D01*
+X024788Y013177D01*
+X024757Y013200D01*
+X024728Y013226D01*
+X024701Y013254D01*
+X024678Y013285D01*
+X024657Y013318D01*
+X024641Y013354D01*
+X024627Y013390D01*
+X024618Y013428D01*
+X024612Y013466D01*
+X024610Y013505D01*
+X024600Y013105D02*
+X025400Y013905D01*
+X023810Y012755D02*
+X023812Y012794D01*
+X023818Y012832D01*
+X023827Y012870D01*
+X023841Y012906D01*
+X023857Y012942D01*
+X023878Y012975D01*
+X023901Y013006D01*
+X023928Y013034D01*
+X023957Y013060D01*
+X023988Y013083D01*
+X024022Y013102D01*
+X024058Y013118D01*
+X024094Y013130D01*
+X024132Y013139D01*
+X024171Y013144D01*
+X024210Y013145D01*
+X024248Y013142D01*
+X024287Y013135D01*
+X024324Y013125D01*
+X024360Y013110D01*
+X024395Y013093D01*
+X024428Y013072D01*
+X024458Y013047D01*
+X024486Y013020D01*
+X024511Y012990D01*
+X024533Y012958D01*
+X024551Y012924D01*
+X024566Y012888D01*
+X024578Y012851D01*
+X024586Y012813D01*
+X024590Y012774D01*
+X024590Y012736D01*
+X024586Y012697D01*
+X024578Y012659D01*
+X024566Y012622D01*
+X024551Y012586D01*
+X024533Y012552D01*
+X024511Y012520D01*
+X024486Y012490D01*
+X024458Y012463D01*
+X024428Y012438D01*
+X024395Y012417D01*
+X024360Y012400D01*
+X024324Y012385D01*
+X024287Y012375D01*
+X024248Y012368D01*
+X024210Y012365D01*
+X024171Y012366D01*
+X024132Y012371D01*
+X024094Y012380D01*
+X024058Y012392D01*
+X024022Y012408D01*
+X023988Y012427D01*
+X023957Y012450D01*
+X023928Y012476D01*
+X023901Y012504D01*
+X023878Y012535D01*
+X023857Y012568D01*
+X023841Y012604D01*
+X023827Y012640D01*
+X023818Y012678D01*
+X023812Y012716D01*
+X023810Y012755D01*
+X023800Y012355D02*
+X024600Y013155D01*
+X022410Y013405D02*
+X022412Y013444D01*
+X022418Y013482D01*
+X022427Y013520D01*
+X022441Y013556D01*
+X022457Y013592D01*
+X022478Y013625D01*
+X022501Y013656D01*
+X022528Y013684D01*
+X022557Y013710D01*
+X022588Y013733D01*
+X022622Y013752D01*
+X022658Y013768D01*
+X022694Y013780D01*
+X022732Y013789D01*
+X022771Y013794D01*
+X022810Y013795D01*
+X022848Y013792D01*
+X022887Y013785D01*
+X022924Y013775D01*
+X022960Y013760D01*
+X022995Y013743D01*
+X023028Y013722D01*
+X023058Y013697D01*
+X023086Y013670D01*
+X023111Y013640D01*
+X023133Y013608D01*
+X023151Y013574D01*
+X023166Y013538D01*
+X023178Y013501D01*
+X023186Y013463D01*
+X023190Y013424D01*
+X023190Y013386D01*
+X023186Y013347D01*
+X023178Y013309D01*
+X023166Y013272D01*
+X023151Y013236D01*
+X023133Y013202D01*
+X023111Y013170D01*
+X023086Y013140D01*
+X023058Y013113D01*
+X023028Y013088D01*
+X022995Y013067D01*
+X022960Y013050D01*
+X022924Y013035D01*
+X022887Y013025D01*
+X022848Y013018D01*
+X022810Y013015D01*
+X022771Y013016D01*
+X022732Y013021D01*
+X022694Y013030D01*
+X022658Y013042D01*
+X022622Y013058D01*
+X022588Y013077D01*
+X022557Y013100D01*
+X022528Y013126D01*
+X022501Y013154D01*
+X022478Y013185D01*
+X022457Y013218D01*
+X022441Y013254D01*
+X022427Y013290D01*
+X022418Y013328D01*
+X022412Y013366D01*
+X022410Y013405D01*
+X022400Y013005D02*
+X023200Y013805D01*
+X021760Y012505D02*
+X021762Y012544D01*
+X021768Y012582D01*
+X021777Y012620D01*
+X021791Y012656D01*
+X021807Y012692D01*
+X021828Y012725D01*
+X021851Y012756D01*
+X021878Y012784D01*
+X021907Y012810D01*
+X021938Y012833D01*
+X021972Y012852D01*
+X022008Y012868D01*
+X022044Y012880D01*
+X022082Y012889D01*
+X022121Y012894D01*
+X022160Y012895D01*
+X022198Y012892D01*
+X022237Y012885D01*
+X022274Y012875D01*
+X022310Y012860D01*
+X022345Y012843D01*
+X022378Y012822D01*
+X022408Y012797D01*
+X022436Y012770D01*
+X022461Y012740D01*
+X022483Y012708D01*
+X022501Y012674D01*
+X022516Y012638D01*
+X022528Y012601D01*
+X022536Y012563D01*
+X022540Y012524D01*
+X022540Y012486D01*
+X022536Y012447D01*
+X022528Y012409D01*
+X022516Y012372D01*
+X022501Y012336D01*
+X022483Y012302D01*
+X022461Y012270D01*
+X022436Y012240D01*
+X022408Y012213D01*
+X022378Y012188D01*
+X022345Y012167D01*
+X022310Y012150D01*
+X022274Y012135D01*
+X022237Y012125D01*
+X022198Y012118D01*
+X022160Y012115D01*
+X022121Y012116D01*
+X022082Y012121D01*
+X022044Y012130D01*
+X022008Y012142D01*
+X021972Y012158D01*
+X021938Y012177D01*
+X021907Y012200D01*
+X021878Y012226D01*
+X021851Y012254D01*
+X021828Y012285D01*
+X021807Y012318D01*
+X021791Y012354D01*
+X021777Y012390D01*
+X021768Y012428D01*
+X021762Y012466D01*
+X021760Y012505D01*
+X021750Y012105D02*
+X022550Y012905D01*
+X020460Y013355D02*
+X020462Y013394D01*
+X020468Y013432D01*
+X020477Y013470D01*
+X020491Y013506D01*
+X020507Y013542D01*
+X020528Y013575D01*
+X020551Y013606D01*
+X020578Y013634D01*
+X020607Y013660D01*
+X020638Y013683D01*
+X020672Y013702D01*
+X020708Y013718D01*
+X020744Y013730D01*
+X020782Y013739D01*
+X020821Y013744D01*
+X020860Y013745D01*
+X020898Y013742D01*
+X020937Y013735D01*
+X020974Y013725D01*
+X021010Y013710D01*
+X021045Y013693D01*
+X021078Y013672D01*
+X021108Y013647D01*
+X021136Y013620D01*
+X021161Y013590D01*
+X021183Y013558D01*
+X021201Y013524D01*
+X021216Y013488D01*
+X021228Y013451D01*
+X021236Y013413D01*
+X021240Y013374D01*
+X021240Y013336D01*
+X021236Y013297D01*
+X021228Y013259D01*
+X021216Y013222D01*
+X021201Y013186D01*
+X021183Y013152D01*
+X021161Y013120D01*
+X021136Y013090D01*
+X021108Y013063D01*
+X021078Y013038D01*
+X021045Y013017D01*
+X021010Y013000D01*
+X020974Y012985D01*
+X020937Y012975D01*
+X020898Y012968D01*
+X020860Y012965D01*
+X020821Y012966D01*
+X020782Y012971D01*
+X020744Y012980D01*
+X020708Y012992D01*
+X020672Y013008D01*
+X020638Y013027D01*
+X020607Y013050D01*
+X020578Y013076D01*
+X020551Y013104D01*
+X020528Y013135D01*
+X020507Y013168D01*
+X020491Y013204D01*
+X020477Y013240D01*
+X020468Y013278D01*
+X020462Y013316D01*
+X020460Y013355D01*
+X020450Y012955D02*
+X021250Y013755D01*
+X020260Y011405D02*
+X020262Y011444D01*
+X020268Y011482D01*
+X020277Y011520D01*
+X020291Y011556D01*
+X020307Y011592D01*
+X020328Y011625D01*
+X020351Y011656D01*
+X020378Y011684D01*
+X020407Y011710D01*
+X020438Y011733D01*
+X020472Y011752D01*
+X020508Y011768D01*
+X020544Y011780D01*
+X020582Y011789D01*
+X020621Y011794D01*
+X020660Y011795D01*
+X020698Y011792D01*
+X020737Y011785D01*
+X020774Y011775D01*
+X020810Y011760D01*
+X020845Y011743D01*
+X020878Y011722D01*
+X020908Y011697D01*
+X020936Y011670D01*
+X020961Y011640D01*
+X020983Y011608D01*
+X021001Y011574D01*
+X021016Y011538D01*
+X021028Y011501D01*
+X021036Y011463D01*
+X021040Y011424D01*
+X021040Y011386D01*
+X021036Y011347D01*
+X021028Y011309D01*
+X021016Y011272D01*
+X021001Y011236D01*
+X020983Y011202D01*
+X020961Y011170D01*
+X020936Y011140D01*
+X020908Y011113D01*
+X020878Y011088D01*
+X020845Y011067D01*
+X020810Y011050D01*
+X020774Y011035D01*
+X020737Y011025D01*
+X020698Y011018D01*
+X020660Y011015D01*
+X020621Y011016D01*
+X020582Y011021D01*
+X020544Y011030D01*
+X020508Y011042D01*
+X020472Y011058D01*
+X020438Y011077D01*
+X020407Y011100D01*
+X020378Y011126D01*
+X020351Y011154D01*
+X020328Y011185D01*
+X020307Y011218D01*
+X020291Y011254D01*
+X020277Y011290D01*
+X020268Y011328D01*
+X020262Y011366D01*
+X020260Y011405D01*
+X020250Y011005D02*
+X021050Y011805D01*
+X020710Y011055D02*
+X020712Y011094D01*
+X020718Y011132D01*
+X020727Y011170D01*
+X020741Y011206D01*
+X020757Y011242D01*
+X020778Y011275D01*
+X020801Y011306D01*
+X020828Y011334D01*
+X020857Y011360D01*
+X020888Y011383D01*
+X020922Y011402D01*
+X020958Y011418D01*
+X020994Y011430D01*
+X021032Y011439D01*
+X021071Y011444D01*
+X021110Y011445D01*
+X021148Y011442D01*
+X021187Y011435D01*
+X021224Y011425D01*
+X021260Y011410D01*
+X021295Y011393D01*
+X021328Y011372D01*
+X021358Y011347D01*
+X021386Y011320D01*
+X021411Y011290D01*
+X021433Y011258D01*
+X021451Y011224D01*
+X021466Y011188D01*
+X021478Y011151D01*
+X021486Y011113D01*
+X021490Y011074D01*
+X021490Y011036D01*
+X021486Y010997D01*
+X021478Y010959D01*
+X021466Y010922D01*
+X021451Y010886D01*
+X021433Y010852D01*
+X021411Y010820D01*
+X021386Y010790D01*
+X021358Y010763D01*
+X021328Y010738D01*
+X021295Y010717D01*
+X021260Y010700D01*
+X021224Y010685D01*
+X021187Y010675D01*
+X021148Y010668D01*
+X021110Y010665D01*
+X021071Y010666D01*
+X021032Y010671D01*
+X020994Y010680D01*
+X020958Y010692D01*
+X020922Y010708D01*
+X020888Y010727D01*
+X020857Y010750D01*
+X020828Y010776D01*
+X020801Y010804D01*
+X020778Y010835D01*
+X020757Y010868D01*
+X020741Y010904D01*
+X020727Y010940D01*
+X020718Y010978D01*
+X020712Y011016D01*
+X020710Y011055D01*
+X020700Y010655D02*
+X021500Y011455D01*
+X022710Y011005D02*
+X022712Y011044D01*
+X022718Y011082D01*
+X022727Y011120D01*
+X022741Y011156D01*
+X022757Y011192D01*
+X022778Y011225D01*
+X022801Y011256D01*
+X022828Y011284D01*
+X022857Y011310D01*
+X022888Y011333D01*
+X022922Y011352D01*
+X022958Y011368D01*
+X022994Y011380D01*
+X023032Y011389D01*
+X023071Y011394D01*
+X023110Y011395D01*
+X023148Y011392D01*
+X023187Y011385D01*
+X023224Y011375D01*
+X023260Y011360D01*
+X023295Y011343D01*
+X023328Y011322D01*
+X023358Y011297D01*
+X023386Y011270D01*
+X023411Y011240D01*
+X023433Y011208D01*
+X023451Y011174D01*
+X023466Y011138D01*
+X023478Y011101D01*
+X023486Y011063D01*
+X023490Y011024D01*
+X023490Y010986D01*
+X023486Y010947D01*
+X023478Y010909D01*
+X023466Y010872D01*
+X023451Y010836D01*
+X023433Y010802D01*
+X023411Y010770D01*
+X023386Y010740D01*
+X023358Y010713D01*
+X023328Y010688D01*
+X023295Y010667D01*
+X023260Y010650D01*
+X023224Y010635D01*
+X023187Y010625D01*
+X023148Y010618D01*
+X023110Y010615D01*
+X023071Y010616D01*
+X023032Y010621D01*
+X022994Y010630D01*
+X022958Y010642D01*
+X022922Y010658D01*
+X022888Y010677D01*
+X022857Y010700D01*
+X022828Y010726D01*
+X022801Y010754D01*
+X022778Y010785D01*
+X022757Y010818D01*
+X022741Y010854D01*
+X022727Y010890D01*
+X022718Y010928D01*
+X022712Y010966D01*
+X022710Y011005D01*
+X022700Y010605D02*
+X023500Y011405D01*
+X025510Y009905D02*
+X025512Y009944D01*
+X025518Y009982D01*
+X025527Y010020D01*
+X025541Y010056D01*
+X025557Y010092D01*
+X025578Y010125D01*
+X025601Y010156D01*
+X025628Y010184D01*
+X025657Y010210D01*
+X025688Y010233D01*
+X025722Y010252D01*
+X025758Y010268D01*
+X025794Y010280D01*
+X025832Y010289D01*
+X025871Y010294D01*
+X025910Y010295D01*
+X025948Y010292D01*
+X025987Y010285D01*
+X026024Y010275D01*
+X026060Y010260D01*
+X026095Y010243D01*
+X026128Y010222D01*
+X026158Y010197D01*
+X026186Y010170D01*
+X026211Y010140D01*
+X026233Y010108D01*
+X026251Y010074D01*
+X026266Y010038D01*
+X026278Y010001D01*
+X026286Y009963D01*
+X026290Y009924D01*
+X026290Y009886D01*
+X026286Y009847D01*
+X026278Y009809D01*
+X026266Y009772D01*
+X026251Y009736D01*
+X026233Y009702D01*
+X026211Y009670D01*
+X026186Y009640D01*
+X026158Y009613D01*
+X026128Y009588D01*
+X026095Y009567D01*
+X026060Y009550D01*
+X026024Y009535D01*
+X025987Y009525D01*
+X025948Y009518D01*
+X025910Y009515D01*
+X025871Y009516D01*
+X025832Y009521D01*
+X025794Y009530D01*
+X025758Y009542D01*
+X025722Y009558D01*
+X025688Y009577D01*
+X025657Y009600D01*
+X025628Y009626D01*
+X025601Y009654D01*
+X025578Y009685D01*
+X025557Y009718D01*
+X025541Y009754D01*
+X025527Y009790D01*
+X025518Y009828D01*
+X025512Y009866D01*
+X025510Y009905D01*
+X025500Y009505D02*
+X026300Y010305D01*
+X026510Y009855D02*
+X026512Y009894D01*
+X026518Y009932D01*
+X026527Y009970D01*
+X026541Y010006D01*
+X026557Y010042D01*
+X026578Y010075D01*
+X026601Y010106D01*
+X026628Y010134D01*
+X026657Y010160D01*
+X026688Y010183D01*
+X026722Y010202D01*
+X026758Y010218D01*
+X026794Y010230D01*
+X026832Y010239D01*
+X026871Y010244D01*
+X026910Y010245D01*
+X026948Y010242D01*
+X026987Y010235D01*
+X027024Y010225D01*
+X027060Y010210D01*
+X027095Y010193D01*
+X027128Y010172D01*
+X027158Y010147D01*
+X027186Y010120D01*
+X027211Y010090D01*
+X027233Y010058D01*
+X027251Y010024D01*
+X027266Y009988D01*
+X027278Y009951D01*
+X027286Y009913D01*
+X027290Y009874D01*
+X027290Y009836D01*
+X027286Y009797D01*
+X027278Y009759D01*
+X027266Y009722D01*
+X027251Y009686D01*
+X027233Y009652D01*
+X027211Y009620D01*
+X027186Y009590D01*
+X027158Y009563D01*
+X027128Y009538D01*
+X027095Y009517D01*
+X027060Y009500D01*
+X027024Y009485D01*
+X026987Y009475D01*
+X026948Y009468D01*
+X026910Y009465D01*
+X026871Y009466D01*
+X026832Y009471D01*
+X026794Y009480D01*
+X026758Y009492D01*
+X026722Y009508D01*
+X026688Y009527D01*
+X026657Y009550D01*
+X026628Y009576D01*
+X026601Y009604D01*
+X026578Y009635D01*
+X026557Y009668D01*
+X026541Y009704D01*
+X026527Y009740D01*
+X026518Y009778D01*
+X026512Y009816D01*
+X026510Y009855D01*
+X026500Y009455D02*
+X027300Y010255D01*
+X027910Y009555D02*
+X027912Y009594D01*
+X027918Y009632D01*
+X027927Y009670D01*
+X027941Y009706D01*
+X027957Y009742D01*
+X027978Y009775D01*
+X028001Y009806D01*
+X028028Y009834D01*
+X028057Y009860D01*
+X028088Y009883D01*
+X028122Y009902D01*
+X028158Y009918D01*
+X028194Y009930D01*
+X028232Y009939D01*
+X028271Y009944D01*
+X028310Y009945D01*
+X028348Y009942D01*
+X028387Y009935D01*
+X028424Y009925D01*
+X028460Y009910D01*
+X028495Y009893D01*
+X028528Y009872D01*
+X028558Y009847D01*
+X028586Y009820D01*
+X028611Y009790D01*
+X028633Y009758D01*
+X028651Y009724D01*
+X028666Y009688D01*
+X028678Y009651D01*
+X028686Y009613D01*
+X028690Y009574D01*
+X028690Y009536D01*
+X028686Y009497D01*
+X028678Y009459D01*
+X028666Y009422D01*
+X028651Y009386D01*
+X028633Y009352D01*
+X028611Y009320D01*
+X028586Y009290D01*
+X028558Y009263D01*
+X028528Y009238D01*
+X028495Y009217D01*
+X028460Y009200D01*
+X028424Y009185D01*
+X028387Y009175D01*
+X028348Y009168D01*
+X028310Y009165D01*
+X028271Y009166D01*
+X028232Y009171D01*
+X028194Y009180D01*
+X028158Y009192D01*
+X028122Y009208D01*
+X028088Y009227D01*
+X028057Y009250D01*
+X028028Y009276D01*
+X028001Y009304D01*
+X027978Y009335D01*
+X027957Y009368D01*
+X027941Y009404D01*
+X027927Y009440D01*
+X027918Y009478D01*
+X027912Y009516D01*
+X027910Y009555D01*
+X027900Y009155D02*
+X028700Y009955D01*
+X029410Y009755D02*
+X029412Y009794D01*
+X029418Y009832D01*
+X029427Y009870D01*
+X029441Y009906D01*
+X029457Y009942D01*
+X029478Y009975D01*
+X029501Y010006D01*
+X029528Y010034D01*
+X029557Y010060D01*
+X029588Y010083D01*
+X029622Y010102D01*
+X029658Y010118D01*
+X029694Y010130D01*
+X029732Y010139D01*
+X029771Y010144D01*
+X029810Y010145D01*
+X029848Y010142D01*
+X029887Y010135D01*
+X029924Y010125D01*
+X029960Y010110D01*
+X029995Y010093D01*
+X030028Y010072D01*
+X030058Y010047D01*
+X030086Y010020D01*
+X030111Y009990D01*
+X030133Y009958D01*
+X030151Y009924D01*
+X030166Y009888D01*
+X030178Y009851D01*
+X030186Y009813D01*
+X030190Y009774D01*
+X030190Y009736D01*
+X030186Y009697D01*
+X030178Y009659D01*
+X030166Y009622D01*
+X030151Y009586D01*
+X030133Y009552D01*
+X030111Y009520D01*
+X030086Y009490D01*
+X030058Y009463D01*
+X030028Y009438D01*
+X029995Y009417D01*
+X029960Y009400D01*
+X029924Y009385D01*
+X029887Y009375D01*
+X029848Y009368D01*
+X029810Y009365D01*
+X029771Y009366D01*
+X029732Y009371D01*
+X029694Y009380D01*
+X029658Y009392D01*
+X029622Y009408D01*
+X029588Y009427D01*
+X029557Y009450D01*
+X029528Y009476D01*
+X029501Y009504D01*
+X029478Y009535D01*
+X029457Y009568D01*
+X029441Y009604D01*
+X029427Y009640D01*
+X029418Y009678D01*
+X029412Y009716D01*
+X029410Y009755D01*
+X029400Y009355D02*
+X030200Y010155D01*
+X030710Y010605D02*
+X030712Y010644D01*
+X030718Y010682D01*
+X030727Y010720D01*
+X030741Y010756D01*
+X030757Y010792D01*
+X030778Y010825D01*
+X030801Y010856D01*
+X030828Y010884D01*
+X030857Y010910D01*
+X030888Y010933D01*
+X030922Y010952D01*
+X030958Y010968D01*
+X030994Y010980D01*
+X031032Y010989D01*
+X031071Y010994D01*
+X031110Y010995D01*
+X031148Y010992D01*
+X031187Y010985D01*
+X031224Y010975D01*
+X031260Y010960D01*
+X031295Y010943D01*
+X031328Y010922D01*
+X031358Y010897D01*
+X031386Y010870D01*
+X031411Y010840D01*
+X031433Y010808D01*
+X031451Y010774D01*
+X031466Y010738D01*
+X031478Y010701D01*
+X031486Y010663D01*
+X031490Y010624D01*
+X031490Y010586D01*
+X031486Y010547D01*
+X031478Y010509D01*
+X031466Y010472D01*
+X031451Y010436D01*
+X031433Y010402D01*
+X031411Y010370D01*
+X031386Y010340D01*
+X031358Y010313D01*
+X031328Y010288D01*
+X031295Y010267D01*
+X031260Y010250D01*
+X031224Y010235D01*
+X031187Y010225D01*
+X031148Y010218D01*
+X031110Y010215D01*
+X031071Y010216D01*
+X031032Y010221D01*
+X030994Y010230D01*
+X030958Y010242D01*
+X030922Y010258D01*
+X030888Y010277D01*
+X030857Y010300D01*
+X030828Y010326D01*
+X030801Y010354D01*
+X030778Y010385D01*
+X030757Y010418D01*
+X030741Y010454D01*
+X030727Y010490D01*
+X030718Y010528D01*
+X030712Y010566D01*
+X030710Y010605D01*
+X030700Y010205D02*
+X031500Y011005D01*
+X031560Y009155D02*
+X031562Y009194D01*
+X031568Y009232D01*
+X031577Y009270D01*
+X031591Y009306D01*
+X031607Y009342D01*
+X031628Y009375D01*
+X031651Y009406D01*
+X031678Y009434D01*
+X031707Y009460D01*
+X031738Y009483D01*
+X031772Y009502D01*
+X031808Y009518D01*
+X031844Y009530D01*
+X031882Y009539D01*
+X031921Y009544D01*
+X031960Y009545D01*
+X031998Y009542D01*
+X032037Y009535D01*
+X032074Y009525D01*
+X032110Y009510D01*
+X032145Y009493D01*
+X032178Y009472D01*
+X032208Y009447D01*
+X032236Y009420D01*
+X032261Y009390D01*
+X032283Y009358D01*
+X032301Y009324D01*
+X032316Y009288D01*
+X032328Y009251D01*
+X032336Y009213D01*
+X032340Y009174D01*
+X032340Y009136D01*
+X032336Y009097D01*
+X032328Y009059D01*
+X032316Y009022D01*
+X032301Y008986D01*
+X032283Y008952D01*
+X032261Y008920D01*
+X032236Y008890D01*
+X032208Y008863D01*
+X032178Y008838D01*
+X032145Y008817D01*
+X032110Y008800D01*
+X032074Y008785D01*
+X032037Y008775D01*
+X031998Y008768D01*
+X031960Y008765D01*
+X031921Y008766D01*
+X031882Y008771D01*
+X031844Y008780D01*
+X031808Y008792D01*
+X031772Y008808D01*
+X031738Y008827D01*
+X031707Y008850D01*
+X031678Y008876D01*
+X031651Y008904D01*
+X031628Y008935D01*
+X031607Y008968D01*
+X031591Y009004D01*
+X031577Y009040D01*
+X031568Y009078D01*
+X031562Y009116D01*
+X031560Y009155D01*
+X031550Y008755D02*
+X032350Y009555D01*
+X030660Y007655D02*
+X030662Y007694D01*
+X030668Y007732D01*
+X030677Y007770D01*
+X030691Y007806D01*
+X030707Y007842D01*
+X030728Y007875D01*
+X030751Y007906D01*
+X030778Y007934D01*
+X030807Y007960D01*
+X030838Y007983D01*
+X030872Y008002D01*
+X030908Y008018D01*
+X030944Y008030D01*
+X030982Y008039D01*
+X031021Y008044D01*
+X031060Y008045D01*
+X031098Y008042D01*
+X031137Y008035D01*
+X031174Y008025D01*
+X031210Y008010D01*
+X031245Y007993D01*
+X031278Y007972D01*
+X031308Y007947D01*
+X031336Y007920D01*
+X031361Y007890D01*
+X031383Y007858D01*
+X031401Y007824D01*
+X031416Y007788D01*
+X031428Y007751D01*
+X031436Y007713D01*
+X031440Y007674D01*
+X031440Y007636D01*
+X031436Y007597D01*
+X031428Y007559D01*
+X031416Y007522D01*
+X031401Y007486D01*
+X031383Y007452D01*
+X031361Y007420D01*
+X031336Y007390D01*
+X031308Y007363D01*
+X031278Y007338D01*
+X031245Y007317D01*
+X031210Y007300D01*
+X031174Y007285D01*
+X031137Y007275D01*
+X031098Y007268D01*
+X031060Y007265D01*
+X031021Y007266D01*
+X030982Y007271D01*
+X030944Y007280D01*
+X030908Y007292D01*
+X030872Y007308D01*
+X030838Y007327D01*
+X030807Y007350D01*
+X030778Y007376D01*
+X030751Y007404D01*
+X030728Y007435D01*
+X030707Y007468D01*
+X030691Y007504D01*
+X030677Y007540D01*
+X030668Y007578D01*
+X030662Y007616D01*
+X030660Y007655D01*
+X030650Y007255D02*
+X031450Y008055D01*
+X029060Y006805D02*
+X029062Y006844D01*
+X029068Y006882D01*
+X029077Y006920D01*
+X029091Y006956D01*
+X029107Y006992D01*
+X029128Y007025D01*
+X029151Y007056D01*
+X029178Y007084D01*
+X029207Y007110D01*
+X029238Y007133D01*
+X029272Y007152D01*
+X029308Y007168D01*
+X029344Y007180D01*
+X029382Y007189D01*
+X029421Y007194D01*
+X029460Y007195D01*
+X029498Y007192D01*
+X029537Y007185D01*
+X029574Y007175D01*
+X029610Y007160D01*
+X029645Y007143D01*
+X029678Y007122D01*
+X029708Y007097D01*
+X029736Y007070D01*
+X029761Y007040D01*
+X029783Y007008D01*
+X029801Y006974D01*
+X029816Y006938D01*
+X029828Y006901D01*
+X029836Y006863D01*
+X029840Y006824D01*
+X029840Y006786D01*
+X029836Y006747D01*
+X029828Y006709D01*
+X029816Y006672D01*
+X029801Y006636D01*
+X029783Y006602D01*
+X029761Y006570D01*
+X029736Y006540D01*
+X029708Y006513D01*
+X029678Y006488D01*
+X029645Y006467D01*
+X029610Y006450D01*
+X029574Y006435D01*
+X029537Y006425D01*
+X029498Y006418D01*
+X029460Y006415D01*
+X029421Y006416D01*
+X029382Y006421D01*
+X029344Y006430D01*
+X029308Y006442D01*
+X029272Y006458D01*
+X029238Y006477D01*
+X029207Y006500D01*
+X029178Y006526D01*
+X029151Y006554D01*
+X029128Y006585D01*
+X029107Y006618D01*
+X029091Y006654D01*
+X029077Y006690D01*
+X029068Y006728D01*
+X029062Y006766D01*
+X029060Y006805D01*
+X029050Y006405D02*
+X029850Y007205D01*
+X030710Y006155D02*
+X030712Y006194D01*
+X030718Y006232D01*
+X030727Y006270D01*
+X030741Y006306D01*
+X030757Y006342D01*
+X030778Y006375D01*
+X030801Y006406D01*
+X030828Y006434D01*
+X030857Y006460D01*
+X030888Y006483D01*
+X030922Y006502D01*
+X030958Y006518D01*
+X030994Y006530D01*
+X031032Y006539D01*
+X031071Y006544D01*
+X031110Y006545D01*
+X031148Y006542D01*
+X031187Y006535D01*
+X031224Y006525D01*
+X031260Y006510D01*
+X031295Y006493D01*
+X031328Y006472D01*
+X031358Y006447D01*
+X031386Y006420D01*
+X031411Y006390D01*
+X031433Y006358D01*
+X031451Y006324D01*
+X031466Y006288D01*
+X031478Y006251D01*
+X031486Y006213D01*
+X031490Y006174D01*
+X031490Y006136D01*
+X031486Y006097D01*
+X031478Y006059D01*
+X031466Y006022D01*
+X031451Y005986D01*
+X031433Y005952D01*
+X031411Y005920D01*
+X031386Y005890D01*
+X031358Y005863D01*
+X031328Y005838D01*
+X031295Y005817D01*
+X031260Y005800D01*
+X031224Y005785D01*
+X031187Y005775D01*
+X031148Y005768D01*
+X031110Y005765D01*
+X031071Y005766D01*
+X031032Y005771D01*
+X030994Y005780D01*
+X030958Y005792D01*
+X030922Y005808D01*
+X030888Y005827D01*
+X030857Y005850D01*
+X030828Y005876D01*
+X030801Y005904D01*
+X030778Y005935D01*
+X030757Y005968D01*
+X030741Y006004D01*
+X030727Y006040D01*
+X030718Y006078D01*
+X030712Y006116D01*
+X030710Y006155D01*
+X030700Y005755D02*
+X031500Y006555D01*
+X031560Y006155D02*
+X031562Y006194D01*
+X031568Y006232D01*
+X031577Y006270D01*
+X031591Y006306D01*
+X031607Y006342D01*
+X031628Y006375D01*
+X031651Y006406D01*
+X031678Y006434D01*
+X031707Y006460D01*
+X031738Y006483D01*
+X031772Y006502D01*
+X031808Y006518D01*
+X031844Y006530D01*
+X031882Y006539D01*
+X031921Y006544D01*
+X031960Y006545D01*
+X031998Y006542D01*
+X032037Y006535D01*
+X032074Y006525D01*
+X032110Y006510D01*
+X032145Y006493D01*
+X032178Y006472D01*
+X032208Y006447D01*
+X032236Y006420D01*
+X032261Y006390D01*
+X032283Y006358D01*
+X032301Y006324D01*
+X032316Y006288D01*
+X032328Y006251D01*
+X032336Y006213D01*
+X032340Y006174D01*
+X032340Y006136D01*
+X032336Y006097D01*
+X032328Y006059D01*
+X032316Y006022D01*
+X032301Y005986D01*
+X032283Y005952D01*
+X032261Y005920D01*
+X032236Y005890D01*
+X032208Y005863D01*
+X032178Y005838D01*
+X032145Y005817D01*
+X032110Y005800D01*
+X032074Y005785D01*
+X032037Y005775D01*
+X031998Y005768D01*
+X031960Y005765D01*
+X031921Y005766D01*
+X031882Y005771D01*
+X031844Y005780D01*
+X031808Y005792D01*
+X031772Y005808D01*
+X031738Y005827D01*
+X031707Y005850D01*
+X031678Y005876D01*
+X031651Y005904D01*
+X031628Y005935D01*
+X031607Y005968D01*
+X031591Y006004D01*
+X031577Y006040D01*
+X031568Y006078D01*
+X031562Y006116D01*
+X031560Y006155D01*
+X031550Y005755D02*
+X032350Y006555D01*
+X030860Y005755D02*
+X030862Y005794D01*
+X030868Y005832D01*
+X030877Y005870D01*
+X030891Y005906D01*
+X030907Y005942D01*
+X030928Y005975D01*
+X030951Y006006D01*
+X030978Y006034D01*
+X031007Y006060D01*
+X031038Y006083D01*
+X031072Y006102D01*
+X031108Y006118D01*
+X031144Y006130D01*
+X031182Y006139D01*
+X031221Y006144D01*
+X031260Y006145D01*
+X031298Y006142D01*
+X031337Y006135D01*
+X031374Y006125D01*
+X031410Y006110D01*
+X031445Y006093D01*
+X031478Y006072D01*
+X031508Y006047D01*
+X031536Y006020D01*
+X031561Y005990D01*
+X031583Y005958D01*
+X031601Y005924D01*
+X031616Y005888D01*
+X031628Y005851D01*
+X031636Y005813D01*
+X031640Y005774D01*
+X031640Y005736D01*
+X031636Y005697D01*
+X031628Y005659D01*
+X031616Y005622D01*
+X031601Y005586D01*
+X031583Y005552D01*
+X031561Y005520D01*
+X031536Y005490D01*
+X031508Y005463D01*
+X031478Y005438D01*
+X031445Y005417D01*
+X031410Y005400D01*
+X031374Y005385D01*
+X031337Y005375D01*
+X031298Y005368D01*
+X031260Y005365D01*
+X031221Y005366D01*
+X031182Y005371D01*
+X031144Y005380D01*
+X031108Y005392D01*
+X031072Y005408D01*
+X031038Y005427D01*
+X031007Y005450D01*
+X030978Y005476D01*
+X030951Y005504D01*
+X030928Y005535D01*
+X030907Y005568D01*
+X030891Y005604D01*
+X030877Y005640D01*
+X030868Y005678D01*
+X030862Y005716D01*
+X030860Y005755D01*
+X030850Y005355D02*
+X031650Y006155D01*
+X031660Y005055D02*
+X031662Y005094D01*
+X031668Y005132D01*
+X031677Y005170D01*
+X031691Y005206D01*
+X031707Y005242D01*
+X031728Y005275D01*
+X031751Y005306D01*
+X031778Y005334D01*
+X031807Y005360D01*
+X031838Y005383D01*
+X031872Y005402D01*
+X031908Y005418D01*
+X031944Y005430D01*
+X031982Y005439D01*
+X032021Y005444D01*
+X032060Y005445D01*
+X032098Y005442D01*
+X032137Y005435D01*
+X032174Y005425D01*
+X032210Y005410D01*
+X032245Y005393D01*
+X032278Y005372D01*
+X032308Y005347D01*
+X032336Y005320D01*
+X032361Y005290D01*
+X032383Y005258D01*
+X032401Y005224D01*
+X032416Y005188D01*
+X032428Y005151D01*
+X032436Y005113D01*
+X032440Y005074D01*
+X032440Y005036D01*
+X032436Y004997D01*
+X032428Y004959D01*
+X032416Y004922D01*
+X032401Y004886D01*
+X032383Y004852D01*
+X032361Y004820D01*
+X032336Y004790D01*
+X032308Y004763D01*
+X032278Y004738D01*
+X032245Y004717D01*
+X032210Y004700D01*
+X032174Y004685D01*
+X032137Y004675D01*
+X032098Y004668D01*
+X032060Y004665D01*
+X032021Y004666D01*
+X031982Y004671D01*
+X031944Y004680D01*
+X031908Y004692D01*
+X031872Y004708D01*
+X031838Y004727D01*
+X031807Y004750D01*
+X031778Y004776D01*
+X031751Y004804D01*
+X031728Y004835D01*
+X031707Y004868D01*
+X031691Y004904D01*
+X031677Y004940D01*
+X031668Y004978D01*
+X031662Y005016D01*
+X031660Y005055D01*
+X031650Y004655D02*
+X032450Y005455D01*
+X030710Y005055D02*
+X030712Y005094D01*
+X030718Y005132D01*
+X030727Y005170D01*
+X030741Y005206D01*
+X030757Y005242D01*
+X030778Y005275D01*
+X030801Y005306D01*
+X030828Y005334D01*
+X030857Y005360D01*
+X030888Y005383D01*
+X030922Y005402D01*
+X030958Y005418D01*
+X030994Y005430D01*
+X031032Y005439D01*
+X031071Y005444D01*
+X031110Y005445D01*
+X031148Y005442D01*
+X031187Y005435D01*
+X031224Y005425D01*
+X031260Y005410D01*
+X031295Y005393D01*
+X031328Y005372D01*
+X031358Y005347D01*
+X031386Y005320D01*
+X031411Y005290D01*
+X031433Y005258D01*
+X031451Y005224D01*
+X031466Y005188D01*
+X031478Y005151D01*
+X031486Y005113D01*
+X031490Y005074D01*
+X031490Y005036D01*
+X031486Y004997D01*
+X031478Y004959D01*
+X031466Y004922D01*
+X031451Y004886D01*
+X031433Y004852D01*
+X031411Y004820D01*
+X031386Y004790D01*
+X031358Y004763D01*
+X031328Y004738D01*
+X031295Y004717D01*
+X031260Y004700D01*
+X031224Y004685D01*
+X031187Y004675D01*
+X031148Y004668D01*
+X031110Y004665D01*
+X031071Y004666D01*
+X031032Y004671D01*
+X030994Y004680D01*
+X030958Y004692D01*
+X030922Y004708D01*
+X030888Y004727D01*
+X030857Y004750D01*
+X030828Y004776D01*
+X030801Y004804D01*
+X030778Y004835D01*
+X030757Y004868D01*
+X030741Y004904D01*
+X030727Y004940D01*
+X030718Y004978D01*
+X030712Y005016D01*
+X030710Y005055D01*
+X030700Y004655D02*
+X031500Y005455D01*
+X030760Y004405D02*
+X030762Y004444D01*
+X030768Y004482D01*
+X030777Y004520D01*
+X030791Y004556D01*
+X030807Y004592D01*
+X030828Y004625D01*
+X030851Y004656D01*
+X030878Y004684D01*
+X030907Y004710D01*
+X030938Y004733D01*
+X030972Y004752D01*
+X031008Y004768D01*
+X031044Y004780D01*
+X031082Y004789D01*
+X031121Y004794D01*
+X031160Y004795D01*
+X031198Y004792D01*
+X031237Y004785D01*
+X031274Y004775D01*
+X031310Y004760D01*
+X031345Y004743D01*
+X031378Y004722D01*
+X031408Y004697D01*
+X031436Y004670D01*
+X031461Y004640D01*
+X031483Y004608D01*
+X031501Y004574D01*
+X031516Y004538D01*
+X031528Y004501D01*
+X031536Y004463D01*
+X031540Y004424D01*
+X031540Y004386D01*
+X031536Y004347D01*
+X031528Y004309D01*
+X031516Y004272D01*
+X031501Y004236D01*
+X031483Y004202D01*
+X031461Y004170D01*
+X031436Y004140D01*
+X031408Y004113D01*
+X031378Y004088D01*
+X031345Y004067D01*
+X031310Y004050D01*
+X031274Y004035D01*
+X031237Y004025D01*
+X031198Y004018D01*
+X031160Y004015D01*
+X031121Y004016D01*
+X031082Y004021D01*
+X031044Y004030D01*
+X031008Y004042D01*
+X030972Y004058D01*
+X030938Y004077D01*
+X030907Y004100D01*
+X030878Y004126D01*
+X030851Y004154D01*
+X030828Y004185D01*
+X030807Y004218D01*
+X030791Y004254D01*
+X030777Y004290D01*
+X030768Y004328D01*
+X030762Y004366D01*
+X030760Y004405D01*
+X030750Y004005D02*
+X031550Y004805D01*
+X031410Y003655D02*
+X031412Y003694D01*
+X031418Y003732D01*
+X031427Y003770D01*
+X031441Y003806D01*
+X031457Y003842D01*
+X031478Y003875D01*
+X031501Y003906D01*
+X031528Y003934D01*
+X031557Y003960D01*
+X031588Y003983D01*
+X031622Y004002D01*
+X031658Y004018D01*
+X031694Y004030D01*
+X031732Y004039D01*
+X031771Y004044D01*
+X031810Y004045D01*
+X031848Y004042D01*
+X031887Y004035D01*
+X031924Y004025D01*
+X031960Y004010D01*
+X031995Y003993D01*
+X032028Y003972D01*
+X032058Y003947D01*
+X032086Y003920D01*
+X032111Y003890D01*
+X032133Y003858D01*
+X032151Y003824D01*
+X032166Y003788D01*
+X032178Y003751D01*
+X032186Y003713D01*
+X032190Y003674D01*
+X032190Y003636D01*
+X032186Y003597D01*
+X032178Y003559D01*
+X032166Y003522D01*
+X032151Y003486D01*
+X032133Y003452D01*
+X032111Y003420D01*
+X032086Y003390D01*
+X032058Y003363D01*
+X032028Y003338D01*
+X031995Y003317D01*
+X031960Y003300D01*
+X031924Y003285D01*
+X031887Y003275D01*
+X031848Y003268D01*
+X031810Y003265D01*
+X031771Y003266D01*
+X031732Y003271D01*
+X031694Y003280D01*
+X031658Y003292D01*
+X031622Y003308D01*
+X031588Y003327D01*
+X031557Y003350D01*
+X031528Y003376D01*
+X031501Y003404D01*
+X031478Y003435D01*
+X031457Y003468D01*
+X031441Y003504D01*
+X031427Y003540D01*
+X031418Y003578D01*
+X031412Y003616D01*
+X031410Y003655D01*
+X031400Y003255D02*
+X032200Y004055D01*
+X028860Y003605D02*
+X028862Y003644D01*
+X028868Y003682D01*
+X028877Y003720D01*
+X028891Y003756D01*
+X028907Y003792D01*
+X028928Y003825D01*
+X028951Y003856D01*
+X028978Y003884D01*
+X029007Y003910D01*
+X029038Y003933D01*
+X029072Y003952D01*
+X029108Y003968D01*
+X029144Y003980D01*
+X029182Y003989D01*
+X029221Y003994D01*
+X029260Y003995D01*
+X029298Y003992D01*
+X029337Y003985D01*
+X029374Y003975D01*
+X029410Y003960D01*
+X029445Y003943D01*
+X029478Y003922D01*
+X029508Y003897D01*
+X029536Y003870D01*
+X029561Y003840D01*
+X029583Y003808D01*
+X029601Y003774D01*
+X029616Y003738D01*
+X029628Y003701D01*
+X029636Y003663D01*
+X029640Y003624D01*
+X029640Y003586D01*
+X029636Y003547D01*
+X029628Y003509D01*
+X029616Y003472D01*
+X029601Y003436D01*
+X029583Y003402D01*
+X029561Y003370D01*
+X029536Y003340D01*
+X029508Y003313D01*
+X029478Y003288D01*
+X029445Y003267D01*
+X029410Y003250D01*
+X029374Y003235D01*
+X029337Y003225D01*
+X029298Y003218D01*
+X029260Y003215D01*
+X029221Y003216D01*
+X029182Y003221D01*
+X029144Y003230D01*
+X029108Y003242D01*
+X029072Y003258D01*
+X029038Y003277D01*
+X029007Y003300D01*
+X028978Y003326D01*
+X028951Y003354D01*
+X028928Y003385D01*
+X028907Y003418D01*
+X028891Y003454D01*
+X028877Y003490D01*
+X028868Y003528D01*
+X028862Y003566D01*
+X028860Y003605D01*
+X028850Y003205D02*
+X029650Y004005D01*
+X028810Y004805D02*
+X028812Y004844D01*
+X028818Y004882D01*
+X028827Y004920D01*
+X028841Y004956D01*
+X028857Y004992D01*
+X028878Y005025D01*
+X028901Y005056D01*
+X028928Y005084D01*
+X028957Y005110D01*
+X028988Y005133D01*
+X029022Y005152D01*
+X029058Y005168D01*
+X029094Y005180D01*
+X029132Y005189D01*
+X029171Y005194D01*
+X029210Y005195D01*
+X029248Y005192D01*
+X029287Y005185D01*
+X029324Y005175D01*
+X029360Y005160D01*
+X029395Y005143D01*
+X029428Y005122D01*
+X029458Y005097D01*
+X029486Y005070D01*
+X029511Y005040D01*
+X029533Y005008D01*
+X029551Y004974D01*
+X029566Y004938D01*
+X029578Y004901D01*
+X029586Y004863D01*
+X029590Y004824D01*
+X029590Y004786D01*
+X029586Y004747D01*
+X029578Y004709D01*
+X029566Y004672D01*
+X029551Y004636D01*
+X029533Y004602D01*
+X029511Y004570D01*
+X029486Y004540D01*
+X029458Y004513D01*
+X029428Y004488D01*
+X029395Y004467D01*
+X029360Y004450D01*
+X029324Y004435D01*
+X029287Y004425D01*
+X029248Y004418D01*
+X029210Y004415D01*
+X029171Y004416D01*
+X029132Y004421D01*
+X029094Y004430D01*
+X029058Y004442D01*
+X029022Y004458D01*
+X028988Y004477D01*
+X028957Y004500D01*
+X028928Y004526D01*
+X028901Y004554D01*
+X028878Y004585D01*
+X028857Y004618D01*
+X028841Y004654D01*
+X028827Y004690D01*
+X028818Y004728D01*
+X028812Y004766D01*
+X028810Y004805D01*
+X028800Y004405D02*
+X029600Y005205D01*
+X028810Y005505D02*
+X028812Y005544D01*
+X028818Y005582D01*
+X028827Y005620D01*
+X028841Y005656D01*
+X028857Y005692D01*
+X028878Y005725D01*
+X028901Y005756D01*
+X028928Y005784D01*
+X028957Y005810D01*
+X028988Y005833D01*
+X029022Y005852D01*
+X029058Y005868D01*
+X029094Y005880D01*
+X029132Y005889D01*
+X029171Y005894D01*
+X029210Y005895D01*
+X029248Y005892D01*
+X029287Y005885D01*
+X029324Y005875D01*
+X029360Y005860D01*
+X029395Y005843D01*
+X029428Y005822D01*
+X029458Y005797D01*
+X029486Y005770D01*
+X029511Y005740D01*
+X029533Y005708D01*
+X029551Y005674D01*
+X029566Y005638D01*
+X029578Y005601D01*
+X029586Y005563D01*
+X029590Y005524D01*
+X029590Y005486D01*
+X029586Y005447D01*
+X029578Y005409D01*
+X029566Y005372D01*
+X029551Y005336D01*
+X029533Y005302D01*
+X029511Y005270D01*
+X029486Y005240D01*
+X029458Y005213D01*
+X029428Y005188D01*
+X029395Y005167D01*
+X029360Y005150D01*
+X029324Y005135D01*
+X029287Y005125D01*
+X029248Y005118D01*
+X029210Y005115D01*
+X029171Y005116D01*
+X029132Y005121D01*
+X029094Y005130D01*
+X029058Y005142D01*
+X029022Y005158D01*
+X028988Y005177D01*
+X028957Y005200D01*
+X028928Y005226D01*
+X028901Y005254D01*
+X028878Y005285D01*
+X028857Y005318D01*
+X028841Y005354D01*
+X028827Y005390D01*
+X028818Y005428D01*
+X028812Y005466D01*
+X028810Y005505D01*
+X028800Y005105D02*
+X029600Y005905D01*
+X027460Y006955D02*
+X027462Y006994D01*
+X027468Y007032D01*
+X027477Y007070D01*
+X027491Y007106D01*
+X027507Y007142D01*
+X027528Y007175D01*
+X027551Y007206D01*
+X027578Y007234D01*
+X027607Y007260D01*
+X027638Y007283D01*
+X027672Y007302D01*
+X027708Y007318D01*
+X027744Y007330D01*
+X027782Y007339D01*
+X027821Y007344D01*
+X027860Y007345D01*
+X027898Y007342D01*
+X027937Y007335D01*
+X027974Y007325D01*
+X028010Y007310D01*
+X028045Y007293D01*
+X028078Y007272D01*
+X028108Y007247D01*
+X028136Y007220D01*
+X028161Y007190D01*
+X028183Y007158D01*
+X028201Y007124D01*
+X028216Y007088D01*
+X028228Y007051D01*
+X028236Y007013D01*
+X028240Y006974D01*
+X028240Y006936D01*
+X028236Y006897D01*
+X028228Y006859D01*
+X028216Y006822D01*
+X028201Y006786D01*
+X028183Y006752D01*
+X028161Y006720D01*
+X028136Y006690D01*
+X028108Y006663D01*
+X028078Y006638D01*
+X028045Y006617D01*
+X028010Y006600D01*
+X027974Y006585D01*
+X027937Y006575D01*
+X027898Y006568D01*
+X027860Y006565D01*
+X027821Y006566D01*
+X027782Y006571D01*
+X027744Y006580D01*
+X027708Y006592D01*
+X027672Y006608D01*
+X027638Y006627D01*
+X027607Y006650D01*
+X027578Y006676D01*
+X027551Y006704D01*
+X027528Y006735D01*
+X027507Y006768D01*
+X027491Y006804D01*
+X027477Y006840D01*
+X027468Y006878D01*
+X027462Y006916D01*
+X027460Y006955D01*
+X027450Y006555D02*
+X028250Y007355D01*
+X026560Y008155D02*
+X026562Y008194D01*
+X026568Y008232D01*
+X026577Y008270D01*
+X026591Y008306D01*
+X026607Y008342D01*
+X026628Y008375D01*
+X026651Y008406D01*
+X026678Y008434D01*
+X026707Y008460D01*
+X026738Y008483D01*
+X026772Y008502D01*
+X026808Y008518D01*
+X026844Y008530D01*
+X026882Y008539D01*
+X026921Y008544D01*
+X026960Y008545D01*
+X026998Y008542D01*
+X027037Y008535D01*
+X027074Y008525D01*
+X027110Y008510D01*
+X027145Y008493D01*
+X027178Y008472D01*
+X027208Y008447D01*
+X027236Y008420D01*
+X027261Y008390D01*
+X027283Y008358D01*
+X027301Y008324D01*
+X027316Y008288D01*
+X027328Y008251D01*
+X027336Y008213D01*
+X027340Y008174D01*
+X027340Y008136D01*
+X027336Y008097D01*
+X027328Y008059D01*
+X027316Y008022D01*
+X027301Y007986D01*
+X027283Y007952D01*
+X027261Y007920D01*
+X027236Y007890D01*
+X027208Y007863D01*
+X027178Y007838D01*
+X027145Y007817D01*
+X027110Y007800D01*
+X027074Y007785D01*
+X027037Y007775D01*
+X026998Y007768D01*
+X026960Y007765D01*
+X026921Y007766D01*
+X026882Y007771D01*
+X026844Y007780D01*
+X026808Y007792D01*
+X026772Y007808D01*
+X026738Y007827D01*
+X026707Y007850D01*
+X026678Y007876D01*
+X026651Y007904D01*
+X026628Y007935D01*
+X026607Y007968D01*
+X026591Y008004D01*
+X026577Y008040D01*
+X026568Y008078D01*
+X026562Y008116D01*
+X026560Y008155D01*
+X026550Y007755D02*
+X027350Y008555D01*
+X027510Y008855D02*
+X027512Y008894D01*
+X027518Y008932D01*
+X027527Y008970D01*
+X027541Y009006D01*
+X027557Y009042D01*
+X027578Y009075D01*
+X027601Y009106D01*
+X027628Y009134D01*
+X027657Y009160D01*
+X027688Y009183D01*
+X027722Y009202D01*
+X027758Y009218D01*
+X027794Y009230D01*
+X027832Y009239D01*
+X027871Y009244D01*
+X027910Y009245D01*
+X027948Y009242D01*
+X027987Y009235D01*
+X028024Y009225D01*
+X028060Y009210D01*
+X028095Y009193D01*
+X028128Y009172D01*
+X028158Y009147D01*
+X028186Y009120D01*
+X028211Y009090D01*
+X028233Y009058D01*
+X028251Y009024D01*
+X028266Y008988D01*
+X028278Y008951D01*
+X028286Y008913D01*
+X028290Y008874D01*
+X028290Y008836D01*
+X028286Y008797D01*
+X028278Y008759D01*
+X028266Y008722D01*
+X028251Y008686D01*
+X028233Y008652D01*
+X028211Y008620D01*
+X028186Y008590D01*
+X028158Y008563D01*
+X028128Y008538D01*
+X028095Y008517D01*
+X028060Y008500D01*
+X028024Y008485D01*
+X027987Y008475D01*
+X027948Y008468D01*
+X027910Y008465D01*
+X027871Y008466D01*
+X027832Y008471D01*
+X027794Y008480D01*
+X027758Y008492D01*
+X027722Y008508D01*
+X027688Y008527D01*
+X027657Y008550D01*
+X027628Y008576D01*
+X027601Y008604D01*
+X027578Y008635D01*
+X027557Y008668D01*
+X027541Y008704D01*
+X027527Y008740D01*
+X027518Y008778D01*
+X027512Y008816D01*
+X027510Y008855D01*
+X027500Y008455D02*
+X028300Y009255D01*
+X025710Y007905D02*
+X025712Y007944D01*
+X025718Y007982D01*
+X025727Y008020D01*
+X025741Y008056D01*
+X025757Y008092D01*
+X025778Y008125D01*
+X025801Y008156D01*
+X025828Y008184D01*
+X025857Y008210D01*
+X025888Y008233D01*
+X025922Y008252D01*
+X025958Y008268D01*
+X025994Y008280D01*
+X026032Y008289D01*
+X026071Y008294D01*
+X026110Y008295D01*
+X026148Y008292D01*
+X026187Y008285D01*
+X026224Y008275D01*
+X026260Y008260D01*
+X026295Y008243D01*
+X026328Y008222D01*
+X026358Y008197D01*
+X026386Y008170D01*
+X026411Y008140D01*
+X026433Y008108D01*
+X026451Y008074D01*
+X026466Y008038D01*
+X026478Y008001D01*
+X026486Y007963D01*
+X026490Y007924D01*
+X026490Y007886D01*
+X026486Y007847D01*
+X026478Y007809D01*
+X026466Y007772D01*
+X026451Y007736D01*
+X026433Y007702D01*
+X026411Y007670D01*
+X026386Y007640D01*
+X026358Y007613D01*
+X026328Y007588D01*
+X026295Y007567D01*
+X026260Y007550D01*
+X026224Y007535D01*
+X026187Y007525D01*
+X026148Y007518D01*
+X026110Y007515D01*
+X026071Y007516D01*
+X026032Y007521D01*
+X025994Y007530D01*
+X025958Y007542D01*
+X025922Y007558D01*
+X025888Y007577D01*
+X025857Y007600D01*
+X025828Y007626D01*
+X025801Y007654D01*
+X025778Y007685D01*
+X025757Y007718D01*
+X025741Y007754D01*
+X025727Y007790D01*
+X025718Y007828D01*
+X025712Y007866D01*
+X025710Y007905D01*
+X025700Y007505D02*
+X026500Y008305D01*
+X025360Y008205D02*
+X025362Y008244D01*
+X025368Y008282D01*
+X025377Y008320D01*
+X025391Y008356D01*
+X025407Y008392D01*
+X025428Y008425D01*
+X025451Y008456D01*
+X025478Y008484D01*
+X025507Y008510D01*
+X025538Y008533D01*
+X025572Y008552D01*
+X025608Y008568D01*
+X025644Y008580D01*
+X025682Y008589D01*
+X025721Y008594D01*
+X025760Y008595D01*
+X025798Y008592D01*
+X025837Y008585D01*
+X025874Y008575D01*
+X025910Y008560D01*
+X025945Y008543D01*
+X025978Y008522D01*
+X026008Y008497D01*
+X026036Y008470D01*
+X026061Y008440D01*
+X026083Y008408D01*
+X026101Y008374D01*
+X026116Y008338D01*
+X026128Y008301D01*
+X026136Y008263D01*
+X026140Y008224D01*
+X026140Y008186D01*
+X026136Y008147D01*
+X026128Y008109D01*
+X026116Y008072D01*
+X026101Y008036D01*
+X026083Y008002D01*
+X026061Y007970D01*
+X026036Y007940D01*
+X026008Y007913D01*
+X025978Y007888D01*
+X025945Y007867D01*
+X025910Y007850D01*
+X025874Y007835D01*
+X025837Y007825D01*
+X025798Y007818D01*
+X025760Y007815D01*
+X025721Y007816D01*
+X025682Y007821D01*
+X025644Y007830D01*
+X025608Y007842D01*
+X025572Y007858D01*
+X025538Y007877D01*
+X025507Y007900D01*
+X025478Y007926D01*
+X025451Y007954D01*
+X025428Y007985D01*
+X025407Y008018D01*
+X025391Y008054D01*
+X025377Y008090D01*
+X025368Y008128D01*
+X025362Y008166D01*
+X025360Y008205D01*
+X025350Y007805D02*
+X026150Y008605D01*
+X024660Y008205D02*
+X024662Y008244D01*
+X024668Y008282D01*
+X024677Y008320D01*
+X024691Y008356D01*
+X024707Y008392D01*
+X024728Y008425D01*
+X024751Y008456D01*
+X024778Y008484D01*
+X024807Y008510D01*
+X024838Y008533D01*
+X024872Y008552D01*
+X024908Y008568D01*
+X024944Y008580D01*
+X024982Y008589D01*
+X025021Y008594D01*
+X025060Y008595D01*
+X025098Y008592D01*
+X025137Y008585D01*
+X025174Y008575D01*
+X025210Y008560D01*
+X025245Y008543D01*
+X025278Y008522D01*
+X025308Y008497D01*
+X025336Y008470D01*
+X025361Y008440D01*
+X025383Y008408D01*
+X025401Y008374D01*
+X025416Y008338D01*
+X025428Y008301D01*
+X025436Y008263D01*
+X025440Y008224D01*
+X025440Y008186D01*
+X025436Y008147D01*
+X025428Y008109D01*
+X025416Y008072D01*
+X025401Y008036D01*
+X025383Y008002D01*
+X025361Y007970D01*
+X025336Y007940D01*
+X025308Y007913D01*
+X025278Y007888D01*
+X025245Y007867D01*
+X025210Y007850D01*
+X025174Y007835D01*
+X025137Y007825D01*
+X025098Y007818D01*
+X025060Y007815D01*
+X025021Y007816D01*
+X024982Y007821D01*
+X024944Y007830D01*
+X024908Y007842D01*
+X024872Y007858D01*
+X024838Y007877D01*
+X024807Y007900D01*
+X024778Y007926D01*
+X024751Y007954D01*
+X024728Y007985D01*
+X024707Y008018D01*
+X024691Y008054D01*
+X024677Y008090D01*
+X024668Y008128D01*
+X024662Y008166D01*
+X024660Y008205D01*
+X024650Y007805D02*
+X025450Y008605D01*
+X024210Y008205D02*
+X024212Y008244D01*
+X024218Y008282D01*
+X024227Y008320D01*
+X024241Y008356D01*
+X024257Y008392D01*
+X024278Y008425D01*
+X024301Y008456D01*
+X024328Y008484D01*
+X024357Y008510D01*
+X024388Y008533D01*
+X024422Y008552D01*
+X024458Y008568D01*
+X024494Y008580D01*
+X024532Y008589D01*
+X024571Y008594D01*
+X024610Y008595D01*
+X024648Y008592D01*
+X024687Y008585D01*
+X024724Y008575D01*
+X024760Y008560D01*
+X024795Y008543D01*
+X024828Y008522D01*
+X024858Y008497D01*
+X024886Y008470D01*
+X024911Y008440D01*
+X024933Y008408D01*
+X024951Y008374D01*
+X024966Y008338D01*
+X024978Y008301D01*
+X024986Y008263D01*
+X024990Y008224D01*
+X024990Y008186D01*
+X024986Y008147D01*
+X024978Y008109D01*
+X024966Y008072D01*
+X024951Y008036D01*
+X024933Y008002D01*
+X024911Y007970D01*
+X024886Y007940D01*
+X024858Y007913D01*
+X024828Y007888D01*
+X024795Y007867D01*
+X024760Y007850D01*
+X024724Y007835D01*
+X024687Y007825D01*
+X024648Y007818D01*
+X024610Y007815D01*
+X024571Y007816D01*
+X024532Y007821D01*
+X024494Y007830D01*
+X024458Y007842D01*
+X024422Y007858D01*
+X024388Y007877D01*
+X024357Y007900D01*
+X024328Y007926D01*
+X024301Y007954D01*
+X024278Y007985D01*
+X024257Y008018D01*
+X024241Y008054D01*
+X024227Y008090D01*
+X024218Y008128D01*
+X024212Y008166D01*
+X024210Y008205D01*
+X024200Y007805D02*
+X025000Y008605D01*
+X023360Y009005D02*
+X023362Y009044D01*
+X023368Y009082D01*
+X023377Y009120D01*
+X023391Y009156D01*
+X023407Y009192D01*
+X023428Y009225D01*
+X023451Y009256D01*
+X023478Y009284D01*
+X023507Y009310D01*
+X023538Y009333D01*
+X023572Y009352D01*
+X023608Y009368D01*
+X023644Y009380D01*
+X023682Y009389D01*
+X023721Y009394D01*
+X023760Y009395D01*
+X023798Y009392D01*
+X023837Y009385D01*
+X023874Y009375D01*
+X023910Y009360D01*
+X023945Y009343D01*
+X023978Y009322D01*
+X024008Y009297D01*
+X024036Y009270D01*
+X024061Y009240D01*
+X024083Y009208D01*
+X024101Y009174D01*
+X024116Y009138D01*
+X024128Y009101D01*
+X024136Y009063D01*
+X024140Y009024D01*
+X024140Y008986D01*
+X024136Y008947D01*
+X024128Y008909D01*
+X024116Y008872D01*
+X024101Y008836D01*
+X024083Y008802D01*
+X024061Y008770D01*
+X024036Y008740D01*
+X024008Y008713D01*
+X023978Y008688D01*
+X023945Y008667D01*
+X023910Y008650D01*
+X023874Y008635D01*
+X023837Y008625D01*
+X023798Y008618D01*
+X023760Y008615D01*
+X023721Y008616D01*
+X023682Y008621D01*
+X023644Y008630D01*
+X023608Y008642D01*
+X023572Y008658D01*
+X023538Y008677D01*
+X023507Y008700D01*
+X023478Y008726D01*
+X023451Y008754D01*
+X023428Y008785D01*
+X023407Y008818D01*
+X023391Y008854D01*
+X023377Y008890D01*
+X023368Y008928D01*
+X023362Y008966D01*
+X023360Y009005D01*
+X023350Y008605D02*
+X024150Y009405D01*
+X024610Y009705D02*
+X024612Y009744D01*
+X024618Y009782D01*
+X024627Y009820D01*
+X024641Y009856D01*
+X024657Y009892D01*
+X024678Y009925D01*
+X024701Y009956D01*
+X024728Y009984D01*
+X024757Y010010D01*
+X024788Y010033D01*
+X024822Y010052D01*
+X024858Y010068D01*
+X024894Y010080D01*
+X024932Y010089D01*
+X024971Y010094D01*
+X025010Y010095D01*
+X025048Y010092D01*
+X025087Y010085D01*
+X025124Y010075D01*
+X025160Y010060D01*
+X025195Y010043D01*
+X025228Y010022D01*
+X025258Y009997D01*
+X025286Y009970D01*
+X025311Y009940D01*
+X025333Y009908D01*
+X025351Y009874D01*
+X025366Y009838D01*
+X025378Y009801D01*
+X025386Y009763D01*
+X025390Y009724D01*
+X025390Y009686D01*
+X025386Y009647D01*
+X025378Y009609D01*
+X025366Y009572D01*
+X025351Y009536D01*
+X025333Y009502D01*
+X025311Y009470D01*
+X025286Y009440D01*
+X025258Y009413D01*
+X025228Y009388D01*
+X025195Y009367D01*
+X025160Y009350D01*
+X025124Y009335D01*
+X025087Y009325D01*
+X025048Y009318D01*
+X025010Y009315D01*
+X024971Y009316D01*
+X024932Y009321D01*
+X024894Y009330D01*
+X024858Y009342D01*
+X024822Y009358D01*
+X024788Y009377D01*
+X024757Y009400D01*
+X024728Y009426D01*
+X024701Y009454D01*
+X024678Y009485D01*
+X024657Y009518D01*
+X024641Y009554D01*
+X024627Y009590D01*
+X024618Y009628D01*
+X024612Y009666D01*
+X024610Y009705D01*
+X024600Y009305D02*
+X025400Y010105D01*
+X025210Y009605D02*
+X025212Y009644D01*
+X025218Y009682D01*
+X025227Y009720D01*
+X025241Y009756D01*
+X025257Y009792D01*
+X025278Y009825D01*
+X025301Y009856D01*
+X025328Y009884D01*
+X025357Y009910D01*
+X025388Y009933D01*
+X025422Y009952D01*
+X025458Y009968D01*
+X025494Y009980D01*
+X025532Y009989D01*
+X025571Y009994D01*
+X025610Y009995D01*
+X025648Y009992D01*
+X025687Y009985D01*
+X025724Y009975D01*
+X025760Y009960D01*
+X025795Y009943D01*
+X025828Y009922D01*
+X025858Y009897D01*
+X025886Y009870D01*
+X025911Y009840D01*
+X025933Y009808D01*
+X025951Y009774D01*
+X025966Y009738D01*
+X025978Y009701D01*
+X025986Y009663D01*
+X025990Y009624D01*
+X025990Y009586D01*
+X025986Y009547D01*
+X025978Y009509D01*
+X025966Y009472D01*
+X025951Y009436D01*
+X025933Y009402D01*
+X025911Y009370D01*
+X025886Y009340D01*
+X025858Y009313D01*
+X025828Y009288D01*
+X025795Y009267D01*
+X025760Y009250D01*
+X025724Y009235D01*
+X025687Y009225D01*
+X025648Y009218D01*
+X025610Y009215D01*
+X025571Y009216D01*
+X025532Y009221D01*
+X025494Y009230D01*
+X025458Y009242D01*
+X025422Y009258D01*
+X025388Y009277D01*
+X025357Y009300D01*
+X025328Y009326D01*
+X025301Y009354D01*
+X025278Y009385D01*
+X025257Y009418D01*
+X025241Y009454D01*
+X025227Y009490D01*
+X025218Y009528D01*
+X025212Y009566D01*
+X025210Y009605D01*
+X025200Y009205D02*
+X026000Y010005D01*
+X022510Y009155D02*
+X022512Y009194D01*
+X022518Y009232D01*
+X022527Y009270D01*
+X022541Y009306D01*
+X022557Y009342D01*
+X022578Y009375D01*
+X022601Y009406D01*
+X022628Y009434D01*
+X022657Y009460D01*
+X022688Y009483D01*
+X022722Y009502D01*
+X022758Y009518D01*
+X022794Y009530D01*
+X022832Y009539D01*
+X022871Y009544D01*
+X022910Y009545D01*
+X022948Y009542D01*
+X022987Y009535D01*
+X023024Y009525D01*
+X023060Y009510D01*
+X023095Y009493D01*
+X023128Y009472D01*
+X023158Y009447D01*
+X023186Y009420D01*
+X023211Y009390D01*
+X023233Y009358D01*
+X023251Y009324D01*
+X023266Y009288D01*
+X023278Y009251D01*
+X023286Y009213D01*
+X023290Y009174D01*
+X023290Y009136D01*
+X023286Y009097D01*
+X023278Y009059D01*
+X023266Y009022D01*
+X023251Y008986D01*
+X023233Y008952D01*
+X023211Y008920D01*
+X023186Y008890D01*
+X023158Y008863D01*
+X023128Y008838D01*
+X023095Y008817D01*
+X023060Y008800D01*
+X023024Y008785D01*
+X022987Y008775D01*
+X022948Y008768D01*
+X022910Y008765D01*
+X022871Y008766D01*
+X022832Y008771D01*
+X022794Y008780D01*
+X022758Y008792D01*
+X022722Y008808D01*
+X022688Y008827D01*
+X022657Y008850D01*
+X022628Y008876D01*
+X022601Y008904D01*
+X022578Y008935D01*
+X022557Y008968D01*
+X022541Y009004D01*
+X022527Y009040D01*
+X022518Y009078D01*
+X022512Y009116D01*
+X022510Y009155D01*
+X022500Y008755D02*
+X023300Y009555D01*
+X022210Y009655D02*
+X022212Y009694D01*
+X022218Y009732D01*
+X022227Y009770D01*
+X022241Y009806D01*
+X022257Y009842D01*
+X022278Y009875D01*
+X022301Y009906D01*
+X022328Y009934D01*
+X022357Y009960D01*
+X022388Y009983D01*
+X022422Y010002D01*
+X022458Y010018D01*
+X022494Y010030D01*
+X022532Y010039D01*
+X022571Y010044D01*
+X022610Y010045D01*
+X022648Y010042D01*
+X022687Y010035D01*
+X022724Y010025D01*
+X022760Y010010D01*
+X022795Y009993D01*
+X022828Y009972D01*
+X022858Y009947D01*
+X022886Y009920D01*
+X022911Y009890D01*
+X022933Y009858D01*
+X022951Y009824D01*
+X022966Y009788D01*
+X022978Y009751D01*
+X022986Y009713D01*
+X022990Y009674D01*
+X022990Y009636D01*
+X022986Y009597D01*
+X022978Y009559D01*
+X022966Y009522D01*
+X022951Y009486D01*
+X022933Y009452D01*
+X022911Y009420D01*
+X022886Y009390D01*
+X022858Y009363D01*
+X022828Y009338D01*
+X022795Y009317D01*
+X022760Y009300D01*
+X022724Y009285D01*
+X022687Y009275D01*
+X022648Y009268D01*
+X022610Y009265D01*
+X022571Y009266D01*
+X022532Y009271D01*
+X022494Y009280D01*
+X022458Y009292D01*
+X022422Y009308D01*
+X022388Y009327D01*
+X022357Y009350D01*
+X022328Y009376D01*
+X022301Y009404D01*
+X022278Y009435D01*
+X022257Y009468D01*
+X022241Y009504D01*
+X022227Y009540D01*
+X022218Y009578D01*
+X022212Y009616D01*
+X022210Y009655D01*
+X022200Y009255D02*
+X023000Y010055D01*
+X021710Y009605D02*
+X021712Y009644D01*
+X021718Y009682D01*
+X021727Y009720D01*
+X021741Y009756D01*
+X021757Y009792D01*
+X021778Y009825D01*
+X021801Y009856D01*
+X021828Y009884D01*
+X021857Y009910D01*
+X021888Y009933D01*
+X021922Y009952D01*
+X021958Y009968D01*
+X021994Y009980D01*
+X022032Y009989D01*
+X022071Y009994D01*
+X022110Y009995D01*
+X022148Y009992D01*
+X022187Y009985D01*
+X022224Y009975D01*
+X022260Y009960D01*
+X022295Y009943D01*
+X022328Y009922D01*
+X022358Y009897D01*
+X022386Y009870D01*
+X022411Y009840D01*
+X022433Y009808D01*
+X022451Y009774D01*
+X022466Y009738D01*
+X022478Y009701D01*
+X022486Y009663D01*
+X022490Y009624D01*
+X022490Y009586D01*
+X022486Y009547D01*
+X022478Y009509D01*
+X022466Y009472D01*
+X022451Y009436D01*
+X022433Y009402D01*
+X022411Y009370D01*
+X022386Y009340D01*
+X022358Y009313D01*
+X022328Y009288D01*
+X022295Y009267D01*
+X022260Y009250D01*
+X022224Y009235D01*
+X022187Y009225D01*
+X022148Y009218D01*
+X022110Y009215D01*
+X022071Y009216D01*
+X022032Y009221D01*
+X021994Y009230D01*
+X021958Y009242D01*
+X021922Y009258D01*
+X021888Y009277D01*
+X021857Y009300D01*
+X021828Y009326D01*
+X021801Y009354D01*
+X021778Y009385D01*
+X021757Y009418D01*
+X021741Y009454D01*
+X021727Y009490D01*
+X021718Y009528D01*
+X021712Y009566D01*
+X021710Y009605D01*
+X021700Y009205D02*
+X022500Y010005D01*
+X021110Y009605D02*
+X021112Y009644D01*
+X021118Y009682D01*
+X021127Y009720D01*
+X021141Y009756D01*
+X021157Y009792D01*
+X021178Y009825D01*
+X021201Y009856D01*
+X021228Y009884D01*
+X021257Y009910D01*
+X021288Y009933D01*
+X021322Y009952D01*
+X021358Y009968D01*
+X021394Y009980D01*
+X021432Y009989D01*
+X021471Y009994D01*
+X021510Y009995D01*
+X021548Y009992D01*
+X021587Y009985D01*
+X021624Y009975D01*
+X021660Y009960D01*
+X021695Y009943D01*
+X021728Y009922D01*
+X021758Y009897D01*
+X021786Y009870D01*
+X021811Y009840D01*
+X021833Y009808D01*
+X021851Y009774D01*
+X021866Y009738D01*
+X021878Y009701D01*
+X021886Y009663D01*
+X021890Y009624D01*
+X021890Y009586D01*
+X021886Y009547D01*
+X021878Y009509D01*
+X021866Y009472D01*
+X021851Y009436D01*
+X021833Y009402D01*
+X021811Y009370D01*
+X021786Y009340D01*
+X021758Y009313D01*
+X021728Y009288D01*
+X021695Y009267D01*
+X021660Y009250D01*
+X021624Y009235D01*
+X021587Y009225D01*
+X021548Y009218D01*
+X021510Y009215D01*
+X021471Y009216D01*
+X021432Y009221D01*
+X021394Y009230D01*
+X021358Y009242D01*
+X021322Y009258D01*
+X021288Y009277D01*
+X021257Y009300D01*
+X021228Y009326D01*
+X021201Y009354D01*
+X021178Y009385D01*
+X021157Y009418D01*
+X021141Y009454D01*
+X021127Y009490D01*
+X021118Y009528D01*
+X021112Y009566D01*
+X021110Y009605D01*
+X021100Y009205D02*
+X021900Y010005D01*
+X020560Y009205D02*
+X020562Y009244D01*
+X020568Y009282D01*
+X020577Y009320D01*
+X020591Y009356D01*
+X020607Y009392D01*
+X020628Y009425D01*
+X020651Y009456D01*
+X020678Y009484D01*
+X020707Y009510D01*
+X020738Y009533D01*
+X020772Y009552D01*
+X020808Y009568D01*
+X020844Y009580D01*
+X020882Y009589D01*
+X020921Y009594D01*
+X020960Y009595D01*
+X020998Y009592D01*
+X021037Y009585D01*
+X021074Y009575D01*
+X021110Y009560D01*
+X021145Y009543D01*
+X021178Y009522D01*
+X021208Y009497D01*
+X021236Y009470D01*
+X021261Y009440D01*
+X021283Y009408D01*
+X021301Y009374D01*
+X021316Y009338D01*
+X021328Y009301D01*
+X021336Y009263D01*
+X021340Y009224D01*
+X021340Y009186D01*
+X021336Y009147D01*
+X021328Y009109D01*
+X021316Y009072D01*
+X021301Y009036D01*
+X021283Y009002D01*
+X021261Y008970D01*
+X021236Y008940D01*
+X021208Y008913D01*
+X021178Y008888D01*
+X021145Y008867D01*
+X021110Y008850D01*
+X021074Y008835D01*
+X021037Y008825D01*
+X020998Y008818D01*
+X020960Y008815D01*
+X020921Y008816D01*
+X020882Y008821D01*
+X020844Y008830D01*
+X020808Y008842D01*
+X020772Y008858D01*
+X020738Y008877D01*
+X020707Y008900D01*
+X020678Y008926D01*
+X020651Y008954D01*
+X020628Y008985D01*
+X020607Y009018D01*
+X020591Y009054D01*
+X020577Y009090D01*
+X020568Y009128D01*
+X020562Y009166D01*
+X020560Y009205D01*
+X020550Y008805D02*
+X021350Y009605D01*
+X022760Y008155D02*
+X022762Y008194D01*
+X022768Y008232D01*
+X022777Y008270D01*
+X022791Y008306D01*
+X022807Y008342D01*
+X022828Y008375D01*
+X022851Y008406D01*
+X022878Y008434D01*
+X022907Y008460D01*
+X022938Y008483D01*
+X022972Y008502D01*
+X023008Y008518D01*
+X023044Y008530D01*
+X023082Y008539D01*
+X023121Y008544D01*
+X023160Y008545D01*
+X023198Y008542D01*
+X023237Y008535D01*
+X023274Y008525D01*
+X023310Y008510D01*
+X023345Y008493D01*
+X023378Y008472D01*
+X023408Y008447D01*
+X023436Y008420D01*
+X023461Y008390D01*
+X023483Y008358D01*
+X023501Y008324D01*
+X023516Y008288D01*
+X023528Y008251D01*
+X023536Y008213D01*
+X023540Y008174D01*
+X023540Y008136D01*
+X023536Y008097D01*
+X023528Y008059D01*
+X023516Y008022D01*
+X023501Y007986D01*
+X023483Y007952D01*
+X023461Y007920D01*
+X023436Y007890D01*
+X023408Y007863D01*
+X023378Y007838D01*
+X023345Y007817D01*
+X023310Y007800D01*
+X023274Y007785D01*
+X023237Y007775D01*
+X023198Y007768D01*
+X023160Y007765D01*
+X023121Y007766D01*
+X023082Y007771D01*
+X023044Y007780D01*
+X023008Y007792D01*
+X022972Y007808D01*
+X022938Y007827D01*
+X022907Y007850D01*
+X022878Y007876D01*
+X022851Y007904D01*
+X022828Y007935D01*
+X022807Y007968D01*
+X022791Y008004D01*
+X022777Y008040D01*
+X022768Y008078D01*
+X022762Y008116D01*
+X022760Y008155D01*
+X022750Y007755D02*
+X023550Y008555D01*
+X022410Y007905D02*
+X022412Y007944D01*
+X022418Y007982D01*
+X022427Y008020D01*
+X022441Y008056D01*
+X022457Y008092D01*
+X022478Y008125D01*
+X022501Y008156D01*
+X022528Y008184D01*
+X022557Y008210D01*
+X022588Y008233D01*
+X022622Y008252D01*
+X022658Y008268D01*
+X022694Y008280D01*
+X022732Y008289D01*
+X022771Y008294D01*
+X022810Y008295D01*
+X022848Y008292D01*
+X022887Y008285D01*
+X022924Y008275D01*
+X022960Y008260D01*
+X022995Y008243D01*
+X023028Y008222D01*
+X023058Y008197D01*
+X023086Y008170D01*
+X023111Y008140D01*
+X023133Y008108D01*
+X023151Y008074D01*
+X023166Y008038D01*
+X023178Y008001D01*
+X023186Y007963D01*
+X023190Y007924D01*
+X023190Y007886D01*
+X023186Y007847D01*
+X023178Y007809D01*
+X023166Y007772D01*
+X023151Y007736D01*
+X023133Y007702D01*
+X023111Y007670D01*
+X023086Y007640D01*
+X023058Y007613D01*
+X023028Y007588D01*
+X022995Y007567D01*
+X022960Y007550D01*
+X022924Y007535D01*
+X022887Y007525D01*
+X022848Y007518D01*
+X022810Y007515D01*
+X022771Y007516D01*
+X022732Y007521D01*
+X022694Y007530D01*
+X022658Y007542D01*
+X022622Y007558D01*
+X022588Y007577D01*
+X022557Y007600D01*
+X022528Y007626D01*
+X022501Y007654D01*
+X022478Y007685D01*
+X022457Y007718D01*
+X022441Y007754D01*
+X022427Y007790D01*
+X022418Y007828D01*
+X022412Y007866D01*
+X022410Y007905D01*
+X022400Y007505D02*
+X023200Y008305D01*
+X024060Y007405D02*
+X024062Y007444D01*
+X024068Y007482D01*
+X024077Y007520D01*
+X024091Y007556D01*
+X024107Y007592D01*
+X024128Y007625D01*
+X024151Y007656D01*
+X024178Y007684D01*
+X024207Y007710D01*
+X024238Y007733D01*
+X024272Y007752D01*
+X024308Y007768D01*
+X024344Y007780D01*
+X024382Y007789D01*
+X024421Y007794D01*
+X024460Y007795D01*
+X024498Y007792D01*
+X024537Y007785D01*
+X024574Y007775D01*
+X024610Y007760D01*
+X024645Y007743D01*
+X024678Y007722D01*
+X024708Y007697D01*
+X024736Y007670D01*
+X024761Y007640D01*
+X024783Y007608D01*
+X024801Y007574D01*
+X024816Y007538D01*
+X024828Y007501D01*
+X024836Y007463D01*
+X024840Y007424D01*
+X024840Y007386D01*
+X024836Y007347D01*
+X024828Y007309D01*
+X024816Y007272D01*
+X024801Y007236D01*
+X024783Y007202D01*
+X024761Y007170D01*
+X024736Y007140D01*
+X024708Y007113D01*
+X024678Y007088D01*
+X024645Y007067D01*
+X024610Y007050D01*
+X024574Y007035D01*
+X024537Y007025D01*
+X024498Y007018D01*
+X024460Y007015D01*
+X024421Y007016D01*
+X024382Y007021D01*
+X024344Y007030D01*
+X024308Y007042D01*
+X024272Y007058D01*
+X024238Y007077D01*
+X024207Y007100D01*
+X024178Y007126D01*
+X024151Y007154D01*
+X024128Y007185D01*
+X024107Y007218D01*
+X024091Y007254D01*
+X024077Y007290D01*
+X024068Y007328D01*
+X024062Y007366D01*
+X024060Y007405D01*
+X024050Y007005D02*
+X024850Y007805D01*
+X024210Y007005D02*
+X024212Y007044D01*
+X024218Y007082D01*
+X024227Y007120D01*
+X024241Y007156D01*
+X024257Y007192D01*
+X024278Y007225D01*
+X024301Y007256D01*
+X024328Y007284D01*
+X024357Y007310D01*
+X024388Y007333D01*
+X024422Y007352D01*
+X024458Y007368D01*
+X024494Y007380D01*
+X024532Y007389D01*
+X024571Y007394D01*
+X024610Y007395D01*
+X024648Y007392D01*
+X024687Y007385D01*
+X024724Y007375D01*
+X024760Y007360D01*
+X024795Y007343D01*
+X024828Y007322D01*
+X024858Y007297D01*
+X024886Y007270D01*
+X024911Y007240D01*
+X024933Y007208D01*
+X024951Y007174D01*
+X024966Y007138D01*
+X024978Y007101D01*
+X024986Y007063D01*
+X024990Y007024D01*
+X024990Y006986D01*
+X024986Y006947D01*
+X024978Y006909D01*
+X024966Y006872D01*
+X024951Y006836D01*
+X024933Y006802D01*
+X024911Y006770D01*
+X024886Y006740D01*
+X024858Y006713D01*
+X024828Y006688D01*
+X024795Y006667D01*
+X024760Y006650D01*
+X024724Y006635D01*
+X024687Y006625D01*
+X024648Y006618D01*
+X024610Y006615D01*
+X024571Y006616D01*
+X024532Y006621D01*
+X024494Y006630D01*
+X024458Y006642D01*
+X024422Y006658D01*
+X024388Y006677D01*
+X024357Y006700D01*
+X024328Y006726D01*
+X024301Y006754D01*
+X024278Y006785D01*
+X024257Y006818D01*
+X024241Y006854D01*
+X024227Y006890D01*
+X024218Y006928D01*
+X024212Y006966D01*
+X024210Y007005D01*
+X024200Y006605D02*
+X025000Y007405D01*
+X025510Y007555D02*
+X025512Y007594D01*
+X025518Y007632D01*
+X025527Y007670D01*
+X025541Y007706D01*
+X025557Y007742D01*
+X025578Y007775D01*
+X025601Y007806D01*
+X025628Y007834D01*
+X025657Y007860D01*
+X025688Y007883D01*
+X025722Y007902D01*
+X025758Y007918D01*
+X025794Y007930D01*
+X025832Y007939D01*
+X025871Y007944D01*
+X025910Y007945D01*
+X025948Y007942D01*
+X025987Y007935D01*
+X026024Y007925D01*
+X026060Y007910D01*
+X026095Y007893D01*
+X026128Y007872D01*
+X026158Y007847D01*
+X026186Y007820D01*
+X026211Y007790D01*
+X026233Y007758D01*
+X026251Y007724D01*
+X026266Y007688D01*
+X026278Y007651D01*
+X026286Y007613D01*
+X026290Y007574D01*
+X026290Y007536D01*
+X026286Y007497D01*
+X026278Y007459D01*
+X026266Y007422D01*
+X026251Y007386D01*
+X026233Y007352D01*
+X026211Y007320D01*
+X026186Y007290D01*
+X026158Y007263D01*
+X026128Y007238D01*
+X026095Y007217D01*
+X026060Y007200D01*
+X026024Y007185D01*
+X025987Y007175D01*
+X025948Y007168D01*
+X025910Y007165D01*
+X025871Y007166D01*
+X025832Y007171D01*
+X025794Y007180D01*
+X025758Y007192D01*
+X025722Y007208D01*
+X025688Y007227D01*
+X025657Y007250D01*
+X025628Y007276D01*
+X025601Y007304D01*
+X025578Y007335D01*
+X025557Y007368D01*
+X025541Y007404D01*
+X025527Y007440D01*
+X025518Y007478D01*
+X025512Y007516D01*
+X025510Y007555D01*
+X025500Y007155D02*
+X026300Y007955D01*
+X026310Y007205D02*
+X026312Y007244D01*
+X026318Y007282D01*
+X026327Y007320D01*
+X026341Y007356D01*
+X026357Y007392D01*
+X026378Y007425D01*
+X026401Y007456D01*
+X026428Y007484D01*
+X026457Y007510D01*
+X026488Y007533D01*
+X026522Y007552D01*
+X026558Y007568D01*
+X026594Y007580D01*
+X026632Y007589D01*
+X026671Y007594D01*
+X026710Y007595D01*
+X026748Y007592D01*
+X026787Y007585D01*
+X026824Y007575D01*
+X026860Y007560D01*
+X026895Y007543D01*
+X026928Y007522D01*
+X026958Y007497D01*
+X026986Y007470D01*
+X027011Y007440D01*
+X027033Y007408D01*
+X027051Y007374D01*
+X027066Y007338D01*
+X027078Y007301D01*
+X027086Y007263D01*
+X027090Y007224D01*
+X027090Y007186D01*
+X027086Y007147D01*
+X027078Y007109D01*
+X027066Y007072D01*
+X027051Y007036D01*
+X027033Y007002D01*
+X027011Y006970D01*
+X026986Y006940D01*
+X026958Y006913D01*
+X026928Y006888D01*
+X026895Y006867D01*
+X026860Y006850D01*
+X026824Y006835D01*
+X026787Y006825D01*
+X026748Y006818D01*
+X026710Y006815D01*
+X026671Y006816D01*
+X026632Y006821D01*
+X026594Y006830D01*
+X026558Y006842D01*
+X026522Y006858D01*
+X026488Y006877D01*
+X026457Y006900D01*
+X026428Y006926D01*
+X026401Y006954D01*
+X026378Y006985D01*
+X026357Y007018D01*
+X026341Y007054D01*
+X026327Y007090D01*
+X026318Y007128D01*
+X026312Y007166D01*
+X026310Y007205D01*
+X026300Y006805D02*
+X027100Y007605D01*
+X025260Y006705D02*
+X025262Y006744D01*
+X025268Y006782D01*
+X025277Y006820D01*
+X025291Y006856D01*
+X025307Y006892D01*
+X025328Y006925D01*
+X025351Y006956D01*
+X025378Y006984D01*
+X025407Y007010D01*
+X025438Y007033D01*
+X025472Y007052D01*
+X025508Y007068D01*
+X025544Y007080D01*
+X025582Y007089D01*
+X025621Y007094D01*
+X025660Y007095D01*
+X025698Y007092D01*
+X025737Y007085D01*
+X025774Y007075D01*
+X025810Y007060D01*
+X025845Y007043D01*
+X025878Y007022D01*
+X025908Y006997D01*
+X025936Y006970D01*
+X025961Y006940D01*
+X025983Y006908D01*
+X026001Y006874D01*
+X026016Y006838D01*
+X026028Y006801D01*
+X026036Y006763D01*
+X026040Y006724D01*
+X026040Y006686D01*
+X026036Y006647D01*
+X026028Y006609D01*
+X026016Y006572D01*
+X026001Y006536D01*
+X025983Y006502D01*
+X025961Y006470D01*
+X025936Y006440D01*
+X025908Y006413D01*
+X025878Y006388D01*
+X025845Y006367D01*
+X025810Y006350D01*
+X025774Y006335D01*
+X025737Y006325D01*
+X025698Y006318D01*
+X025660Y006315D01*
+X025621Y006316D01*
+X025582Y006321D01*
+X025544Y006330D01*
+X025508Y006342D01*
+X025472Y006358D01*
+X025438Y006377D01*
+X025407Y006400D01*
+X025378Y006426D01*
+X025351Y006454D01*
+X025328Y006485D01*
+X025307Y006518D01*
+X025291Y006554D01*
+X025277Y006590D01*
+X025268Y006628D01*
+X025262Y006666D01*
+X025260Y006705D01*
+X025250Y006305D02*
+X026050Y007105D01*
+X026210Y006305D02*
+X026212Y006344D01*
+X026218Y006382D01*
+X026227Y006420D01*
+X026241Y006456D01*
+X026257Y006492D01*
+X026278Y006525D01*
+X026301Y006556D01*
+X026328Y006584D01*
+X026357Y006610D01*
+X026388Y006633D01*
+X026422Y006652D01*
+X026458Y006668D01*
+X026494Y006680D01*
+X026532Y006689D01*
+X026571Y006694D01*
+X026610Y006695D01*
+X026648Y006692D01*
+X026687Y006685D01*
+X026724Y006675D01*
+X026760Y006660D01*
+X026795Y006643D01*
+X026828Y006622D01*
+X026858Y006597D01*
+X026886Y006570D01*
+X026911Y006540D01*
+X026933Y006508D01*
+X026951Y006474D01*
+X026966Y006438D01*
+X026978Y006401D01*
+X026986Y006363D01*
+X026990Y006324D01*
+X026990Y006286D01*
+X026986Y006247D01*
+X026978Y006209D01*
+X026966Y006172D01*
+X026951Y006136D01*
+X026933Y006102D01*
+X026911Y006070D01*
+X026886Y006040D01*
+X026858Y006013D01*
+X026828Y005988D01*
+X026795Y005967D01*
+X026760Y005950D01*
+X026724Y005935D01*
+X026687Y005925D01*
+X026648Y005918D01*
+X026610Y005915D01*
+X026571Y005916D01*
+X026532Y005921D01*
+X026494Y005930D01*
+X026458Y005942D01*
+X026422Y005958D01*
+X026388Y005977D01*
+X026357Y006000D01*
+X026328Y006026D01*
+X026301Y006054D01*
+X026278Y006085D01*
+X026257Y006118D01*
+X026241Y006154D01*
+X026227Y006190D01*
+X026218Y006228D01*
+X026212Y006266D01*
+X026210Y006305D01*
+X026200Y005905D02*
+X027000Y006705D01*
+X026510Y005555D02*
+X026512Y005594D01*
+X026518Y005632D01*
+X026527Y005670D01*
+X026541Y005706D01*
+X026557Y005742D01*
+X026578Y005775D01*
+X026601Y005806D01*
+X026628Y005834D01*
+X026657Y005860D01*
+X026688Y005883D01*
+X026722Y005902D01*
+X026758Y005918D01*
+X026794Y005930D01*
+X026832Y005939D01*
+X026871Y005944D01*
+X026910Y005945D01*
+X026948Y005942D01*
+X026987Y005935D01*
+X027024Y005925D01*
+X027060Y005910D01*
+X027095Y005893D01*
+X027128Y005872D01*
+X027158Y005847D01*
+X027186Y005820D01*
+X027211Y005790D01*
+X027233Y005758D01*
+X027251Y005724D01*
+X027266Y005688D01*
+X027278Y005651D01*
+X027286Y005613D01*
+X027290Y005574D01*
+X027290Y005536D01*
+X027286Y005497D01*
+X027278Y005459D01*
+X027266Y005422D01*
+X027251Y005386D01*
+X027233Y005352D01*
+X027211Y005320D01*
+X027186Y005290D01*
+X027158Y005263D01*
+X027128Y005238D01*
+X027095Y005217D01*
+X027060Y005200D01*
+X027024Y005185D01*
+X026987Y005175D01*
+X026948Y005168D01*
+X026910Y005165D01*
+X026871Y005166D01*
+X026832Y005171D01*
+X026794Y005180D01*
+X026758Y005192D01*
+X026722Y005208D01*
+X026688Y005227D01*
+X026657Y005250D01*
+X026628Y005276D01*
+X026601Y005304D01*
+X026578Y005335D01*
+X026557Y005368D01*
+X026541Y005404D01*
+X026527Y005440D01*
+X026518Y005478D01*
+X026512Y005516D01*
+X026510Y005555D01*
+X026500Y005155D02*
+X027300Y005955D01*
+X025910Y005255D02*
+X025912Y005294D01*
+X025918Y005332D01*
+X025927Y005370D01*
+X025941Y005406D01*
+X025957Y005442D01*
+X025978Y005475D01*
+X026001Y005506D01*
+X026028Y005534D01*
+X026057Y005560D01*
+X026088Y005583D01*
+X026122Y005602D01*
+X026158Y005618D01*
+X026194Y005630D01*
+X026232Y005639D01*
+X026271Y005644D01*
+X026310Y005645D01*
+X026348Y005642D01*
+X026387Y005635D01*
+X026424Y005625D01*
+X026460Y005610D01*
+X026495Y005593D01*
+X026528Y005572D01*
+X026558Y005547D01*
+X026586Y005520D01*
+X026611Y005490D01*
+X026633Y005458D01*
+X026651Y005424D01*
+X026666Y005388D01*
+X026678Y005351D01*
+X026686Y005313D01*
+X026690Y005274D01*
+X026690Y005236D01*
+X026686Y005197D01*
+X026678Y005159D01*
+X026666Y005122D01*
+X026651Y005086D01*
+X026633Y005052D01*
+X026611Y005020D01*
+X026586Y004990D01*
+X026558Y004963D01*
+X026528Y004938D01*
+X026495Y004917D01*
+X026460Y004900D01*
+X026424Y004885D01*
+X026387Y004875D01*
+X026348Y004868D01*
+X026310Y004865D01*
+X026271Y004866D01*
+X026232Y004871D01*
+X026194Y004880D01*
+X026158Y004892D01*
+X026122Y004908D01*
+X026088Y004927D01*
+X026057Y004950D01*
+X026028Y004976D01*
+X026001Y005004D01*
+X025978Y005035D01*
+X025957Y005068D01*
+X025941Y005104D01*
+X025927Y005140D01*
+X025918Y005178D01*
+X025912Y005216D01*
+X025910Y005255D01*
+X025900Y004855D02*
+X026700Y005655D01*
+X025560Y005505D02*
+X025562Y005544D01*
+X025568Y005582D01*
+X025577Y005620D01*
+X025591Y005656D01*
+X025607Y005692D01*
+X025628Y005725D01*
+X025651Y005756D01*
+X025678Y005784D01*
+X025707Y005810D01*
+X025738Y005833D01*
+X025772Y005852D01*
+X025808Y005868D01*
+X025844Y005880D01*
+X025882Y005889D01*
+X025921Y005894D01*
+X025960Y005895D01*
+X025998Y005892D01*
+X026037Y005885D01*
+X026074Y005875D01*
+X026110Y005860D01*
+X026145Y005843D01*
+X026178Y005822D01*
+X026208Y005797D01*
+X026236Y005770D01*
+X026261Y005740D01*
+X026283Y005708D01*
+X026301Y005674D01*
+X026316Y005638D01*
+X026328Y005601D01*
+X026336Y005563D01*
+X026340Y005524D01*
+X026340Y005486D01*
+X026336Y005447D01*
+X026328Y005409D01*
+X026316Y005372D01*
+X026301Y005336D01*
+X026283Y005302D01*
+X026261Y005270D01*
+X026236Y005240D01*
+X026208Y005213D01*
+X026178Y005188D01*
+X026145Y005167D01*
+X026110Y005150D01*
+X026074Y005135D01*
+X026037Y005125D01*
+X025998Y005118D01*
+X025960Y005115D01*
+X025921Y005116D01*
+X025882Y005121D01*
+X025844Y005130D01*
+X025808Y005142D01*
+X025772Y005158D01*
+X025738Y005177D01*
+X025707Y005200D01*
+X025678Y005226D01*
+X025651Y005254D01*
+X025628Y005285D01*
+X025607Y005318D01*
+X025591Y005354D01*
+X025577Y005390D01*
+X025568Y005428D01*
+X025562Y005466D01*
+X025560Y005505D01*
+X025550Y005105D02*
+X026350Y005905D01*
+X024960Y005655D02*
+X024962Y005694D01*
+X024968Y005732D01*
+X024977Y005770D01*
+X024991Y005806D01*
+X025007Y005842D01*
+X025028Y005875D01*
+X025051Y005906D01*
+X025078Y005934D01*
+X025107Y005960D01*
+X025138Y005983D01*
+X025172Y006002D01*
+X025208Y006018D01*
+X025244Y006030D01*
+X025282Y006039D01*
+X025321Y006044D01*
+X025360Y006045D01*
+X025398Y006042D01*
+X025437Y006035D01*
+X025474Y006025D01*
+X025510Y006010D01*
+X025545Y005993D01*
+X025578Y005972D01*
+X025608Y005947D01*
+X025636Y005920D01*
+X025661Y005890D01*
+X025683Y005858D01*
+X025701Y005824D01*
+X025716Y005788D01*
+X025728Y005751D01*
+X025736Y005713D01*
+X025740Y005674D01*
+X025740Y005636D01*
+X025736Y005597D01*
+X025728Y005559D01*
+X025716Y005522D01*
+X025701Y005486D01*
+X025683Y005452D01*
+X025661Y005420D01*
+X025636Y005390D01*
+X025608Y005363D01*
+X025578Y005338D01*
+X025545Y005317D01*
+X025510Y005300D01*
+X025474Y005285D01*
+X025437Y005275D01*
+X025398Y005268D01*
+X025360Y005265D01*
+X025321Y005266D01*
+X025282Y005271D01*
+X025244Y005280D01*
+X025208Y005292D01*
+X025172Y005308D01*
+X025138Y005327D01*
+X025107Y005350D01*
+X025078Y005376D01*
+X025051Y005404D01*
+X025028Y005435D01*
+X025007Y005468D01*
+X024991Y005504D01*
+X024977Y005540D01*
+X024968Y005578D01*
+X024962Y005616D01*
+X024960Y005655D01*
+X024950Y005255D02*
+X025750Y006055D01*
+X024960Y006405D02*
+X024962Y006444D01*
+X024968Y006482D01*
+X024977Y006520D01*
+X024991Y006556D01*
+X025007Y006592D01*
+X025028Y006625D01*
+X025051Y006656D01*
+X025078Y006684D01*
+X025107Y006710D01*
+X025138Y006733D01*
+X025172Y006752D01*
+X025208Y006768D01*
+X025244Y006780D01*
+X025282Y006789D01*
+X025321Y006794D01*
+X025360Y006795D01*
+X025398Y006792D01*
+X025437Y006785D01*
+X025474Y006775D01*
+X025510Y006760D01*
+X025545Y006743D01*
+X025578Y006722D01*
+X025608Y006697D01*
+X025636Y006670D01*
+X025661Y006640D01*
+X025683Y006608D01*
+X025701Y006574D01*
+X025716Y006538D01*
+X025728Y006501D01*
+X025736Y006463D01*
+X025740Y006424D01*
+X025740Y006386D01*
+X025736Y006347D01*
+X025728Y006309D01*
+X025716Y006272D01*
+X025701Y006236D01*
+X025683Y006202D01*
+X025661Y006170D01*
+X025636Y006140D01*
+X025608Y006113D01*
+X025578Y006088D01*
+X025545Y006067D01*
+X025510Y006050D01*
+X025474Y006035D01*
+X025437Y006025D01*
+X025398Y006018D01*
+X025360Y006015D01*
+X025321Y006016D01*
+X025282Y006021D01*
+X025244Y006030D01*
+X025208Y006042D01*
+X025172Y006058D01*
+X025138Y006077D01*
+X025107Y006100D01*
+X025078Y006126D01*
+X025051Y006154D01*
+X025028Y006185D01*
+X025007Y006218D01*
+X024991Y006254D01*
+X024977Y006290D01*
+X024968Y006328D01*
+X024962Y006366D01*
+X024960Y006405D01*
+X024950Y006005D02*
+X025750Y006805D01*
+X024710Y006005D02*
+X024712Y006044D01*
+X024718Y006082D01*
+X024727Y006120D01*
+X024741Y006156D01*
+X024757Y006192D01*
+X024778Y006225D01*
+X024801Y006256D01*
+X024828Y006284D01*
+X024857Y006310D01*
+X024888Y006333D01*
+X024922Y006352D01*
+X024958Y006368D01*
+X024994Y006380D01*
+X025032Y006389D01*
+X025071Y006394D01*
+X025110Y006395D01*
+X025148Y006392D01*
+X025187Y006385D01*
+X025224Y006375D01*
+X025260Y006360D01*
+X025295Y006343D01*
+X025328Y006322D01*
+X025358Y006297D01*
+X025386Y006270D01*
+X025411Y006240D01*
+X025433Y006208D01*
+X025451Y006174D01*
+X025466Y006138D01*
+X025478Y006101D01*
+X025486Y006063D01*
+X025490Y006024D01*
+X025490Y005986D01*
+X025486Y005947D01*
+X025478Y005909D01*
+X025466Y005872D01*
+X025451Y005836D01*
+X025433Y005802D01*
+X025411Y005770D01*
+X025386Y005740D01*
+X025358Y005713D01*
+X025328Y005688D01*
+X025295Y005667D01*
+X025260Y005650D01*
+X025224Y005635D01*
+X025187Y005625D01*
+X025148Y005618D01*
+X025110Y005615D01*
+X025071Y005616D01*
+X025032Y005621D01*
+X024994Y005630D01*
+X024958Y005642D01*
+X024922Y005658D01*
+X024888Y005677D01*
+X024857Y005700D01*
+X024828Y005726D01*
+X024801Y005754D01*
+X024778Y005785D01*
+X024757Y005818D01*
+X024741Y005854D01*
+X024727Y005890D01*
+X024718Y005928D01*
+X024712Y005966D01*
+X024710Y006005D01*
+X024700Y005605D02*
+X025500Y006405D01*
+X024160Y005755D02*
+X024162Y005794D01*
+X024168Y005832D01*
+X024177Y005870D01*
+X024191Y005906D01*
+X024207Y005942D01*
+X024228Y005975D01*
+X024251Y006006D01*
+X024278Y006034D01*
+X024307Y006060D01*
+X024338Y006083D01*
+X024372Y006102D01*
+X024408Y006118D01*
+X024444Y006130D01*
+X024482Y006139D01*
+X024521Y006144D01*
+X024560Y006145D01*
+X024598Y006142D01*
+X024637Y006135D01*
+X024674Y006125D01*
+X024710Y006110D01*
+X024745Y006093D01*
+X024778Y006072D01*
+X024808Y006047D01*
+X024836Y006020D01*
+X024861Y005990D01*
+X024883Y005958D01*
+X024901Y005924D01*
+X024916Y005888D01*
+X024928Y005851D01*
+X024936Y005813D01*
+X024940Y005774D01*
+X024940Y005736D01*
+X024936Y005697D01*
+X024928Y005659D01*
+X024916Y005622D01*
+X024901Y005586D01*
+X024883Y005552D01*
+X024861Y005520D01*
+X024836Y005490D01*
+X024808Y005463D01*
+X024778Y005438D01*
+X024745Y005417D01*
+X024710Y005400D01*
+X024674Y005385D01*
+X024637Y005375D01*
+X024598Y005368D01*
+X024560Y005365D01*
+X024521Y005366D01*
+X024482Y005371D01*
+X024444Y005380D01*
+X024408Y005392D01*
+X024372Y005408D01*
+X024338Y005427D01*
+X024307Y005450D01*
+X024278Y005476D01*
+X024251Y005504D01*
+X024228Y005535D01*
+X024207Y005568D01*
+X024191Y005604D01*
+X024177Y005640D01*
+X024168Y005678D01*
+X024162Y005716D01*
+X024160Y005755D01*
+X024150Y005355D02*
+X024950Y006155D01*
+X024510Y005405D02*
+X024512Y005444D01*
+X024518Y005482D01*
+X024527Y005520D01*
+X024541Y005556D01*
+X024557Y005592D01*
+X024578Y005625D01*
+X024601Y005656D01*
+X024628Y005684D01*
+X024657Y005710D01*
+X024688Y005733D01*
+X024722Y005752D01*
+X024758Y005768D01*
+X024794Y005780D01*
+X024832Y005789D01*
+X024871Y005794D01*
+X024910Y005795D01*
+X024948Y005792D01*
+X024987Y005785D01*
+X025024Y005775D01*
+X025060Y005760D01*
+X025095Y005743D01*
+X025128Y005722D01*
+X025158Y005697D01*
+X025186Y005670D01*
+X025211Y005640D01*
+X025233Y005608D01*
+X025251Y005574D01*
+X025266Y005538D01*
+X025278Y005501D01*
+X025286Y005463D01*
+X025290Y005424D01*
+X025290Y005386D01*
+X025286Y005347D01*
+X025278Y005309D01*
+X025266Y005272D01*
+X025251Y005236D01*
+X025233Y005202D01*
+X025211Y005170D01*
+X025186Y005140D01*
+X025158Y005113D01*
+X025128Y005088D01*
+X025095Y005067D01*
+X025060Y005050D01*
+X025024Y005035D01*
+X024987Y005025D01*
+X024948Y005018D01*
+X024910Y005015D01*
+X024871Y005016D01*
+X024832Y005021D01*
+X024794Y005030D01*
+X024758Y005042D01*
+X024722Y005058D01*
+X024688Y005077D01*
+X024657Y005100D01*
+X024628Y005126D01*
+X024601Y005154D01*
+X024578Y005185D01*
+X024557Y005218D01*
+X024541Y005254D01*
+X024527Y005290D01*
+X024518Y005328D01*
+X024512Y005366D01*
+X024510Y005405D01*
+X024500Y005005D02*
+X025300Y005805D01*
+X024510Y004955D02*
+X024512Y004994D01*
+X024518Y005032D01*
+X024527Y005070D01*
+X024541Y005106D01*
+X024557Y005142D01*
+X024578Y005175D01*
+X024601Y005206D01*
+X024628Y005234D01*
+X024657Y005260D01*
+X024688Y005283D01*
+X024722Y005302D01*
+X024758Y005318D01*
+X024794Y005330D01*
+X024832Y005339D01*
+X024871Y005344D01*
+X024910Y005345D01*
+X024948Y005342D01*
+X024987Y005335D01*
+X025024Y005325D01*
+X025060Y005310D01*
+X025095Y005293D01*
+X025128Y005272D01*
+X025158Y005247D01*
+X025186Y005220D01*
+X025211Y005190D01*
+X025233Y005158D01*
+X025251Y005124D01*
+X025266Y005088D01*
+X025278Y005051D01*
+X025286Y005013D01*
+X025290Y004974D01*
+X025290Y004936D01*
+X025286Y004897D01*
+X025278Y004859D01*
+X025266Y004822D01*
+X025251Y004786D01*
+X025233Y004752D01*
+X025211Y004720D01*
+X025186Y004690D01*
+X025158Y004663D01*
+X025128Y004638D01*
+X025095Y004617D01*
+X025060Y004600D01*
+X025024Y004585D01*
+X024987Y004575D01*
+X024948Y004568D01*
+X024910Y004565D01*
+X024871Y004566D01*
+X024832Y004571D01*
+X024794Y004580D01*
+X024758Y004592D01*
+X024722Y004608D01*
+X024688Y004627D01*
+X024657Y004650D01*
+X024628Y004676D01*
+X024601Y004704D01*
+X024578Y004735D01*
+X024557Y004768D01*
+X024541Y004804D01*
+X024527Y004840D01*
+X024518Y004878D01*
+X024512Y004916D01*
+X024510Y004955D01*
+X024500Y004555D02*
+X025300Y005355D01*
+X026560Y005055D02*
+X026562Y005094D01*
+X026568Y005132D01*
+X026577Y005170D01*
+X026591Y005206D01*
+X026607Y005242D01*
+X026628Y005275D01*
+X026651Y005306D01*
+X026678Y005334D01*
+X026707Y005360D01*
+X026738Y005383D01*
+X026772Y005402D01*
+X026808Y005418D01*
+X026844Y005430D01*
+X026882Y005439D01*
+X026921Y005444D01*
+X026960Y005445D01*
+X026998Y005442D01*
+X027037Y005435D01*
+X027074Y005425D01*
+X027110Y005410D01*
+X027145Y005393D01*
+X027178Y005372D01*
+X027208Y005347D01*
+X027236Y005320D01*
+X027261Y005290D01*
+X027283Y005258D01*
+X027301Y005224D01*
+X027316Y005188D01*
+X027328Y005151D01*
+X027336Y005113D01*
+X027340Y005074D01*
+X027340Y005036D01*
+X027336Y004997D01*
+X027328Y004959D01*
+X027316Y004922D01*
+X027301Y004886D01*
+X027283Y004852D01*
+X027261Y004820D01*
+X027236Y004790D01*
+X027208Y004763D01*
+X027178Y004738D01*
+X027145Y004717D01*
+X027110Y004700D01*
+X027074Y004685D01*
+X027037Y004675D01*
+X026998Y004668D01*
+X026960Y004665D01*
+X026921Y004666D01*
+X026882Y004671D01*
+X026844Y004680D01*
+X026808Y004692D01*
+X026772Y004708D01*
+X026738Y004727D01*
+X026707Y004750D01*
+X026678Y004776D01*
+X026651Y004804D01*
+X026628Y004835D01*
+X026607Y004868D01*
+X026591Y004904D01*
+X026577Y004940D01*
+X026568Y004978D01*
+X026562Y005016D01*
+X026560Y005055D01*
+X026550Y004655D02*
+X027350Y005455D01*
+X027110Y005005D02*
+X027112Y005044D01*
+X027118Y005082D01*
+X027127Y005120D01*
+X027141Y005156D01*
+X027157Y005192D01*
+X027178Y005225D01*
+X027201Y005256D01*
+X027228Y005284D01*
+X027257Y005310D01*
+X027288Y005333D01*
+X027322Y005352D01*
+X027358Y005368D01*
+X027394Y005380D01*
+X027432Y005389D01*
+X027471Y005394D01*
+X027510Y005395D01*
+X027548Y005392D01*
+X027587Y005385D01*
+X027624Y005375D01*
+X027660Y005360D01*
+X027695Y005343D01*
+X027728Y005322D01*
+X027758Y005297D01*
+X027786Y005270D01*
+X027811Y005240D01*
+X027833Y005208D01*
+X027851Y005174D01*
+X027866Y005138D01*
+X027878Y005101D01*
+X027886Y005063D01*
+X027890Y005024D01*
+X027890Y004986D01*
+X027886Y004947D01*
+X027878Y004909D01*
+X027866Y004872D01*
+X027851Y004836D01*
+X027833Y004802D01*
+X027811Y004770D01*
+X027786Y004740D01*
+X027758Y004713D01*
+X027728Y004688D01*
+X027695Y004667D01*
+X027660Y004650D01*
+X027624Y004635D01*
+X027587Y004625D01*
+X027548Y004618D01*
+X027510Y004615D01*
+X027471Y004616D01*
+X027432Y004621D01*
+X027394Y004630D01*
+X027358Y004642D01*
+X027322Y004658D01*
+X027288Y004677D01*
+X027257Y004700D01*
+X027228Y004726D01*
+X027201Y004754D01*
+X027178Y004785D01*
+X027157Y004818D01*
+X027141Y004854D01*
+X027127Y004890D01*
+X027118Y004928D01*
+X027112Y004966D01*
+X027110Y005005D01*
+X027100Y004605D02*
+X027900Y005405D01*
+X028060Y004205D02*
+X028062Y004244D01*
+X028068Y004282D01*
+X028077Y004320D01*
+X028091Y004356D01*
+X028107Y004392D01*
+X028128Y004425D01*
+X028151Y004456D01*
+X028178Y004484D01*
+X028207Y004510D01*
+X028238Y004533D01*
+X028272Y004552D01*
+X028308Y004568D01*
+X028344Y004580D01*
+X028382Y004589D01*
+X028421Y004594D01*
+X028460Y004595D01*
+X028498Y004592D01*
+X028537Y004585D01*
+X028574Y004575D01*
+X028610Y004560D01*
+X028645Y004543D01*
+X028678Y004522D01*
+X028708Y004497D01*
+X028736Y004470D01*
+X028761Y004440D01*
+X028783Y004408D01*
+X028801Y004374D01*
+X028816Y004338D01*
+X028828Y004301D01*
+X028836Y004263D01*
+X028840Y004224D01*
+X028840Y004186D01*
+X028836Y004147D01*
+X028828Y004109D01*
+X028816Y004072D01*
+X028801Y004036D01*
+X028783Y004002D01*
+X028761Y003970D01*
+X028736Y003940D01*
+X028708Y003913D01*
+X028678Y003888D01*
+X028645Y003867D01*
+X028610Y003850D01*
+X028574Y003835D01*
+X028537Y003825D01*
+X028498Y003818D01*
+X028460Y003815D01*
+X028421Y003816D01*
+X028382Y003821D01*
+X028344Y003830D01*
+X028308Y003842D01*
+X028272Y003858D01*
+X028238Y003877D01*
+X028207Y003900D01*
+X028178Y003926D01*
+X028151Y003954D01*
+X028128Y003985D01*
+X028107Y004018D01*
+X028091Y004054D01*
+X028077Y004090D01*
+X028068Y004128D01*
+X028062Y004166D01*
+X028060Y004205D01*
+X028050Y003805D02*
+X028850Y004605D01*
+X028210Y003605D02*
+X028212Y003644D01*
+X028218Y003682D01*
+X028227Y003720D01*
+X028241Y003756D01*
+X028257Y003792D01*
+X028278Y003825D01*
+X028301Y003856D01*
+X028328Y003884D01*
+X028357Y003910D01*
+X028388Y003933D01*
+X028422Y003952D01*
+X028458Y003968D01*
+X028494Y003980D01*
+X028532Y003989D01*
+X028571Y003994D01*
+X028610Y003995D01*
+X028648Y003992D01*
+X028687Y003985D01*
+X028724Y003975D01*
+X028760Y003960D01*
+X028795Y003943D01*
+X028828Y003922D01*
+X028858Y003897D01*
+X028886Y003870D01*
+X028911Y003840D01*
+X028933Y003808D01*
+X028951Y003774D01*
+X028966Y003738D01*
+X028978Y003701D01*
+X028986Y003663D01*
+X028990Y003624D01*
+X028990Y003586D01*
+X028986Y003547D01*
+X028978Y003509D01*
+X028966Y003472D01*
+X028951Y003436D01*
+X028933Y003402D01*
+X028911Y003370D01*
+X028886Y003340D01*
+X028858Y003313D01*
+X028828Y003288D01*
+X028795Y003267D01*
+X028760Y003250D01*
+X028724Y003235D01*
+X028687Y003225D01*
+X028648Y003218D01*
+X028610Y003215D01*
+X028571Y003216D01*
+X028532Y003221D01*
+X028494Y003230D01*
+X028458Y003242D01*
+X028422Y003258D01*
+X028388Y003277D01*
+X028357Y003300D01*
+X028328Y003326D01*
+X028301Y003354D01*
+X028278Y003385D01*
+X028257Y003418D01*
+X028241Y003454D01*
+X028227Y003490D01*
+X028218Y003528D01*
+X028212Y003566D01*
+X028210Y003605D01*
+X028200Y003205D02*
+X029000Y004005D01*
+X026310Y003255D02*
+X026312Y003294D01*
+X026318Y003332D01*
+X026327Y003370D01*
+X026341Y003406D01*
+X026357Y003442D01*
+X026378Y003475D01*
+X026401Y003506D01*
+X026428Y003534D01*
+X026457Y003560D01*
+X026488Y003583D01*
+X026522Y003602D01*
+X026558Y003618D01*
+X026594Y003630D01*
+X026632Y003639D01*
+X026671Y003644D01*
+X026710Y003645D01*
+X026748Y003642D01*
+X026787Y003635D01*
+X026824Y003625D01*
+X026860Y003610D01*
+X026895Y003593D01*
+X026928Y003572D01*
+X026958Y003547D01*
+X026986Y003520D01*
+X027011Y003490D01*
+X027033Y003458D01*
+X027051Y003424D01*
+X027066Y003388D01*
+X027078Y003351D01*
+X027086Y003313D01*
+X027090Y003274D01*
+X027090Y003236D01*
+X027086Y003197D01*
+X027078Y003159D01*
+X027066Y003122D01*
+X027051Y003086D01*
+X027033Y003052D01*
+X027011Y003020D01*
+X026986Y002990D01*
+X026958Y002963D01*
+X026928Y002938D01*
+X026895Y002917D01*
+X026860Y002900D01*
+X026824Y002885D01*
+X026787Y002875D01*
+X026748Y002868D01*
+X026710Y002865D01*
+X026671Y002866D01*
+X026632Y002871D01*
+X026594Y002880D01*
+X026558Y002892D01*
+X026522Y002908D01*
+X026488Y002927D01*
+X026457Y002950D01*
+X026428Y002976D01*
+X026401Y003004D01*
+X026378Y003035D01*
+X026357Y003068D01*
+X026341Y003104D01*
+X026327Y003140D01*
+X026318Y003178D01*
+X026312Y003216D01*
+X026310Y003255D01*
+X026300Y002855D02*
+X027100Y003655D01*
+X025910Y003355D02*
+X025912Y003394D01*
+X025918Y003432D01*
+X025927Y003470D01*
+X025941Y003506D01*
+X025957Y003542D01*
+X025978Y003575D01*
+X026001Y003606D01*
+X026028Y003634D01*
+X026057Y003660D01*
+X026088Y003683D01*
+X026122Y003702D01*
+X026158Y003718D01*
+X026194Y003730D01*
+X026232Y003739D01*
+X026271Y003744D01*
+X026310Y003745D01*
+X026348Y003742D01*
+X026387Y003735D01*
+X026424Y003725D01*
+X026460Y003710D01*
+X026495Y003693D01*
+X026528Y003672D01*
+X026558Y003647D01*
+X026586Y003620D01*
+X026611Y003590D01*
+X026633Y003558D01*
+X026651Y003524D01*
+X026666Y003488D01*
+X026678Y003451D01*
+X026686Y003413D01*
+X026690Y003374D01*
+X026690Y003336D01*
+X026686Y003297D01*
+X026678Y003259D01*
+X026666Y003222D01*
+X026651Y003186D01*
+X026633Y003152D01*
+X026611Y003120D01*
+X026586Y003090D01*
+X026558Y003063D01*
+X026528Y003038D01*
+X026495Y003017D01*
+X026460Y003000D01*
+X026424Y002985D01*
+X026387Y002975D01*
+X026348Y002968D01*
+X026310Y002965D01*
+X026271Y002966D01*
+X026232Y002971D01*
+X026194Y002980D01*
+X026158Y002992D01*
+X026122Y003008D01*
+X026088Y003027D01*
+X026057Y003050D01*
+X026028Y003076D01*
+X026001Y003104D01*
+X025978Y003135D01*
+X025957Y003168D01*
+X025941Y003204D01*
+X025927Y003240D01*
+X025918Y003278D01*
+X025912Y003316D01*
+X025910Y003355D01*
+X025900Y002955D02*
+X026700Y003755D01*
+X025060Y003255D02*
+X025062Y003294D01*
+X025068Y003332D01*
+X025077Y003370D01*
+X025091Y003406D01*
+X025107Y003442D01*
+X025128Y003475D01*
+X025151Y003506D01*
+X025178Y003534D01*
+X025207Y003560D01*
+X025238Y003583D01*
+X025272Y003602D01*
+X025308Y003618D01*
+X025344Y003630D01*
+X025382Y003639D01*
+X025421Y003644D01*
+X025460Y003645D01*
+X025498Y003642D01*
+X025537Y003635D01*
+X025574Y003625D01*
+X025610Y003610D01*
+X025645Y003593D01*
+X025678Y003572D01*
+X025708Y003547D01*
+X025736Y003520D01*
+X025761Y003490D01*
+X025783Y003458D01*
+X025801Y003424D01*
+X025816Y003388D01*
+X025828Y003351D01*
+X025836Y003313D01*
+X025840Y003274D01*
+X025840Y003236D01*
+X025836Y003197D01*
+X025828Y003159D01*
+X025816Y003122D01*
+X025801Y003086D01*
+X025783Y003052D01*
+X025761Y003020D01*
+X025736Y002990D01*
+X025708Y002963D01*
+X025678Y002938D01*
+X025645Y002917D01*
+X025610Y002900D01*
+X025574Y002885D01*
+X025537Y002875D01*
+X025498Y002868D01*
+X025460Y002865D01*
+X025421Y002866D01*
+X025382Y002871D01*
+X025344Y002880D01*
+X025308Y002892D01*
+X025272Y002908D01*
+X025238Y002927D01*
+X025207Y002950D01*
+X025178Y002976D01*
+X025151Y003004D01*
+X025128Y003035D01*
+X025107Y003068D01*
+X025091Y003104D01*
+X025077Y003140D01*
+X025068Y003178D01*
+X025062Y003216D01*
+X025060Y003255D01*
+X025050Y002855D02*
+X025850Y003655D01*
+X023760Y004105D02*
+X023762Y004144D01*
+X023768Y004182D01*
+X023777Y004220D01*
+X023791Y004256D01*
+X023807Y004292D01*
+X023828Y004325D01*
+X023851Y004356D01*
+X023878Y004384D01*
+X023907Y004410D01*
+X023938Y004433D01*
+X023972Y004452D01*
+X024008Y004468D01*
+X024044Y004480D01*
+X024082Y004489D01*
+X024121Y004494D01*
+X024160Y004495D01*
+X024198Y004492D01*
+X024237Y004485D01*
+X024274Y004475D01*
+X024310Y004460D01*
+X024345Y004443D01*
+X024378Y004422D01*
+X024408Y004397D01*
+X024436Y004370D01*
+X024461Y004340D01*
+X024483Y004308D01*
+X024501Y004274D01*
+X024516Y004238D01*
+X024528Y004201D01*
+X024536Y004163D01*
+X024540Y004124D01*
+X024540Y004086D01*
+X024536Y004047D01*
+X024528Y004009D01*
+X024516Y003972D01*
+X024501Y003936D01*
+X024483Y003902D01*
+X024461Y003870D01*
+X024436Y003840D01*
+X024408Y003813D01*
+X024378Y003788D01*
+X024345Y003767D01*
+X024310Y003750D01*
+X024274Y003735D01*
+X024237Y003725D01*
+X024198Y003718D01*
+X024160Y003715D01*
+X024121Y003716D01*
+X024082Y003721D01*
+X024044Y003730D01*
+X024008Y003742D01*
+X023972Y003758D01*
+X023938Y003777D01*
+X023907Y003800D01*
+X023878Y003826D01*
+X023851Y003854D01*
+X023828Y003885D01*
+X023807Y003918D01*
+X023791Y003954D01*
+X023777Y003990D01*
+X023768Y004028D01*
+X023762Y004066D01*
+X023760Y004105D01*
+X023750Y003705D02*
+X024550Y004505D01*
+X023210Y004055D02*
+X023212Y004094D01*
+X023218Y004132D01*
+X023227Y004170D01*
+X023241Y004206D01*
+X023257Y004242D01*
+X023278Y004275D01*
+X023301Y004306D01*
+X023328Y004334D01*
+X023357Y004360D01*
+X023388Y004383D01*
+X023422Y004402D01*
+X023458Y004418D01*
+X023494Y004430D01*
+X023532Y004439D01*
+X023571Y004444D01*
+X023610Y004445D01*
+X023648Y004442D01*
+X023687Y004435D01*
+X023724Y004425D01*
+X023760Y004410D01*
+X023795Y004393D01*
+X023828Y004372D01*
+X023858Y004347D01*
+X023886Y004320D01*
+X023911Y004290D01*
+X023933Y004258D01*
+X023951Y004224D01*
+X023966Y004188D01*
+X023978Y004151D01*
+X023986Y004113D01*
+X023990Y004074D01*
+X023990Y004036D01*
+X023986Y003997D01*
+X023978Y003959D01*
+X023966Y003922D01*
+X023951Y003886D01*
+X023933Y003852D01*
+X023911Y003820D01*
+X023886Y003790D01*
+X023858Y003763D01*
+X023828Y003738D01*
+X023795Y003717D01*
+X023760Y003700D01*
+X023724Y003685D01*
+X023687Y003675D01*
+X023648Y003668D01*
+X023610Y003665D01*
+X023571Y003666D01*
+X023532Y003671D01*
+X023494Y003680D01*
+X023458Y003692D01*
+X023422Y003708D01*
+X023388Y003727D01*
+X023357Y003750D01*
+X023328Y003776D01*
+X023301Y003804D01*
+X023278Y003835D01*
+X023257Y003868D01*
+X023241Y003904D01*
+X023227Y003940D01*
+X023218Y003978D01*
+X023212Y004016D01*
+X023210Y004055D01*
+X023200Y003655D02*
+X024000Y004455D01*
+X022610Y004255D02*
+X022612Y004294D01*
+X022618Y004332D01*
+X022627Y004370D01*
+X022641Y004406D01*
+X022657Y004442D01*
+X022678Y004475D01*
+X022701Y004506D01*
+X022728Y004534D01*
+X022757Y004560D01*
+X022788Y004583D01*
+X022822Y004602D01*
+X022858Y004618D01*
+X022894Y004630D01*
+X022932Y004639D01*
+X022971Y004644D01*
+X023010Y004645D01*
+X023048Y004642D01*
+X023087Y004635D01*
+X023124Y004625D01*
+X023160Y004610D01*
+X023195Y004593D01*
+X023228Y004572D01*
+X023258Y004547D01*
+X023286Y004520D01*
+X023311Y004490D01*
+X023333Y004458D01*
+X023351Y004424D01*
+X023366Y004388D01*
+X023378Y004351D01*
+X023386Y004313D01*
+X023390Y004274D01*
+X023390Y004236D01*
+X023386Y004197D01*
+X023378Y004159D01*
+X023366Y004122D01*
+X023351Y004086D01*
+X023333Y004052D01*
+X023311Y004020D01*
+X023286Y003990D01*
+X023258Y003963D01*
+X023228Y003938D01*
+X023195Y003917D01*
+X023160Y003900D01*
+X023124Y003885D01*
+X023087Y003875D01*
+X023048Y003868D01*
+X023010Y003865D01*
+X022971Y003866D01*
+X022932Y003871D01*
+X022894Y003880D01*
+X022858Y003892D01*
+X022822Y003908D01*
+X022788Y003927D01*
+X022757Y003950D01*
+X022728Y003976D01*
+X022701Y004004D01*
+X022678Y004035D01*
+X022657Y004068D01*
+X022641Y004104D01*
+X022627Y004140D01*
+X022618Y004178D01*
+X022612Y004216D01*
+X022610Y004255D01*
+X022600Y003855D02*
+X023400Y004655D01*
+X022260Y004855D02*
+X022262Y004894D01*
+X022268Y004932D01*
+X022277Y004970D01*
+X022291Y005006D01*
+X022307Y005042D01*
+X022328Y005075D01*
+X022351Y005106D01*
+X022378Y005134D01*
+X022407Y005160D01*
+X022438Y005183D01*
+X022472Y005202D01*
+X022508Y005218D01*
+X022544Y005230D01*
+X022582Y005239D01*
+X022621Y005244D01*
+X022660Y005245D01*
+X022698Y005242D01*
+X022737Y005235D01*
+X022774Y005225D01*
+X022810Y005210D01*
+X022845Y005193D01*
+X022878Y005172D01*
+X022908Y005147D01*
+X022936Y005120D01*
+X022961Y005090D01*
+X022983Y005058D01*
+X023001Y005024D01*
+X023016Y004988D01*
+X023028Y004951D01*
+X023036Y004913D01*
+X023040Y004874D01*
+X023040Y004836D01*
+X023036Y004797D01*
+X023028Y004759D01*
+X023016Y004722D01*
+X023001Y004686D01*
+X022983Y004652D01*
+X022961Y004620D01*
+X022936Y004590D01*
+X022908Y004563D01*
+X022878Y004538D01*
+X022845Y004517D01*
+X022810Y004500D01*
+X022774Y004485D01*
+X022737Y004475D01*
+X022698Y004468D01*
+X022660Y004465D01*
+X022621Y004466D01*
+X022582Y004471D01*
+X022544Y004480D01*
+X022508Y004492D01*
+X022472Y004508D01*
+X022438Y004527D01*
+X022407Y004550D01*
+X022378Y004576D01*
+X022351Y004604D01*
+X022328Y004635D01*
+X022307Y004668D01*
+X022291Y004704D01*
+X022277Y004740D01*
+X022268Y004778D01*
+X022262Y004816D01*
+X022260Y004855D01*
+X022250Y004455D02*
+X023050Y005255D01*
+X021960Y005605D02*
+X021962Y005644D01*
+X021968Y005682D01*
+X021977Y005720D01*
+X021991Y005756D01*
+X022007Y005792D01*
+X022028Y005825D01*
+X022051Y005856D01*
+X022078Y005884D01*
+X022107Y005910D01*
+X022138Y005933D01*
+X022172Y005952D01*
+X022208Y005968D01*
+X022244Y005980D01*
+X022282Y005989D01*
+X022321Y005994D01*
+X022360Y005995D01*
+X022398Y005992D01*
+X022437Y005985D01*
+X022474Y005975D01*
+X022510Y005960D01*
+X022545Y005943D01*
+X022578Y005922D01*
+X022608Y005897D01*
+X022636Y005870D01*
+X022661Y005840D01*
+X022683Y005808D01*
+X022701Y005774D01*
+X022716Y005738D01*
+X022728Y005701D01*
+X022736Y005663D01*
+X022740Y005624D01*
+X022740Y005586D01*
+X022736Y005547D01*
+X022728Y005509D01*
+X022716Y005472D01*
+X022701Y005436D01*
+X022683Y005402D01*
+X022661Y005370D01*
+X022636Y005340D01*
+X022608Y005313D01*
+X022578Y005288D01*
+X022545Y005267D01*
+X022510Y005250D01*
+X022474Y005235D01*
+X022437Y005225D01*
+X022398Y005218D01*
+X022360Y005215D01*
+X022321Y005216D01*
+X022282Y005221D01*
+X022244Y005230D01*
+X022208Y005242D01*
+X022172Y005258D01*
+X022138Y005277D01*
+X022107Y005300D01*
+X022078Y005326D01*
+X022051Y005354D01*
+X022028Y005385D01*
+X022007Y005418D01*
+X021991Y005454D01*
+X021977Y005490D01*
+X021968Y005528D01*
+X021962Y005566D01*
+X021960Y005605D01*
+X021950Y005205D02*
+X022750Y006005D01*
+X021810Y006405D02*
+X021812Y006444D01*
+X021818Y006482D01*
+X021827Y006520D01*
+X021841Y006556D01*
+X021857Y006592D01*
+X021878Y006625D01*
+X021901Y006656D01*
+X021928Y006684D01*
+X021957Y006710D01*
+X021988Y006733D01*
+X022022Y006752D01*
+X022058Y006768D01*
+X022094Y006780D01*
+X022132Y006789D01*
+X022171Y006794D01*
+X022210Y006795D01*
+X022248Y006792D01*
+X022287Y006785D01*
+X022324Y006775D01*
+X022360Y006760D01*
+X022395Y006743D01*
+X022428Y006722D01*
+X022458Y006697D01*
+X022486Y006670D01*
+X022511Y006640D01*
+X022533Y006608D01*
+X022551Y006574D01*
+X022566Y006538D01*
+X022578Y006501D01*
+X022586Y006463D01*
+X022590Y006424D01*
+X022590Y006386D01*
+X022586Y006347D01*
+X022578Y006309D01*
+X022566Y006272D01*
+X022551Y006236D01*
+X022533Y006202D01*
+X022511Y006170D01*
+X022486Y006140D01*
+X022458Y006113D01*
+X022428Y006088D01*
+X022395Y006067D01*
+X022360Y006050D01*
+X022324Y006035D01*
+X022287Y006025D01*
+X022248Y006018D01*
+X022210Y006015D01*
+X022171Y006016D01*
+X022132Y006021D01*
+X022094Y006030D01*
+X022058Y006042D01*
+X022022Y006058D01*
+X021988Y006077D01*
+X021957Y006100D01*
+X021928Y006126D01*
+X021901Y006154D01*
+X021878Y006185D01*
+X021857Y006218D01*
+X021841Y006254D01*
+X021827Y006290D01*
+X021818Y006328D01*
+X021812Y006366D01*
+X021810Y006405D01*
+X021800Y006005D02*
+X022600Y006805D01*
+X022010Y006755D02*
+X022012Y006794D01*
+X022018Y006832D01*
+X022027Y006870D01*
+X022041Y006906D01*
+X022057Y006942D01*
+X022078Y006975D01*
+X022101Y007006D01*
+X022128Y007034D01*
+X022157Y007060D01*
+X022188Y007083D01*
+X022222Y007102D01*
+X022258Y007118D01*
+X022294Y007130D01*
+X022332Y007139D01*
+X022371Y007144D01*
+X022410Y007145D01*
+X022448Y007142D01*
+X022487Y007135D01*
+X022524Y007125D01*
+X022560Y007110D01*
+X022595Y007093D01*
+X022628Y007072D01*
+X022658Y007047D01*
+X022686Y007020D01*
+X022711Y006990D01*
+X022733Y006958D01*
+X022751Y006924D01*
+X022766Y006888D01*
+X022778Y006851D01*
+X022786Y006813D01*
+X022790Y006774D01*
+X022790Y006736D01*
+X022786Y006697D01*
+X022778Y006659D01*
+X022766Y006622D01*
+X022751Y006586D01*
+X022733Y006552D01*
+X022711Y006520D01*
+X022686Y006490D01*
+X022658Y006463D01*
+X022628Y006438D01*
+X022595Y006417D01*
+X022560Y006400D01*
+X022524Y006385D01*
+X022487Y006375D01*
+X022448Y006368D01*
+X022410Y006365D01*
+X022371Y006366D01*
+X022332Y006371D01*
+X022294Y006380D01*
+X022258Y006392D01*
+X022222Y006408D01*
+X022188Y006427D01*
+X022157Y006450D01*
+X022128Y006476D01*
+X022101Y006504D01*
+X022078Y006535D01*
+X022057Y006568D01*
+X022041Y006604D01*
+X022027Y006640D01*
+X022018Y006678D01*
+X022012Y006716D01*
+X022010Y006755D01*
+X022000Y006355D02*
+X022800Y007155D01*
+X021210Y007905D02*
+X021212Y007944D01*
+X021218Y007982D01*
+X021227Y008020D01*
+X021241Y008056D01*
+X021257Y008092D01*
+X021278Y008125D01*
+X021301Y008156D01*
+X021328Y008184D01*
+X021357Y008210D01*
+X021388Y008233D01*
+X021422Y008252D01*
+X021458Y008268D01*
+X021494Y008280D01*
+X021532Y008289D01*
+X021571Y008294D01*
+X021610Y008295D01*
+X021648Y008292D01*
+X021687Y008285D01*
+X021724Y008275D01*
+X021760Y008260D01*
+X021795Y008243D01*
+X021828Y008222D01*
+X021858Y008197D01*
+X021886Y008170D01*
+X021911Y008140D01*
+X021933Y008108D01*
+X021951Y008074D01*
+X021966Y008038D01*
+X021978Y008001D01*
+X021986Y007963D01*
+X021990Y007924D01*
+X021990Y007886D01*
+X021986Y007847D01*
+X021978Y007809D01*
+X021966Y007772D01*
+X021951Y007736D01*
+X021933Y007702D01*
+X021911Y007670D01*
+X021886Y007640D01*
+X021858Y007613D01*
+X021828Y007588D01*
+X021795Y007567D01*
+X021760Y007550D01*
+X021724Y007535D01*
+X021687Y007525D01*
+X021648Y007518D01*
+X021610Y007515D01*
+X021571Y007516D01*
+X021532Y007521D01*
+X021494Y007530D01*
+X021458Y007542D01*
+X021422Y007558D01*
+X021388Y007577D01*
+X021357Y007600D01*
+X021328Y007626D01*
+X021301Y007654D01*
+X021278Y007685D01*
+X021257Y007718D01*
+X021241Y007754D01*
+X021227Y007790D01*
+X021218Y007828D01*
+X021212Y007866D01*
+X021210Y007905D01*
+X021200Y007505D02*
+X022000Y008305D01*
+X020010Y007055D02*
+X020012Y007094D01*
+X020018Y007132D01*
+X020027Y007170D01*
+X020041Y007206D01*
+X020057Y007242D01*
+X020078Y007275D01*
+X020101Y007306D01*
+X020128Y007334D01*
+X020157Y007360D01*
+X020188Y007383D01*
+X020222Y007402D01*
+X020258Y007418D01*
+X020294Y007430D01*
+X020332Y007439D01*
+X020371Y007444D01*
+X020410Y007445D01*
+X020448Y007442D01*
+X020487Y007435D01*
+X020524Y007425D01*
+X020560Y007410D01*
+X020595Y007393D01*
+X020628Y007372D01*
+X020658Y007347D01*
+X020686Y007320D01*
+X020711Y007290D01*
+X020733Y007258D01*
+X020751Y007224D01*
+X020766Y007188D01*
+X020778Y007151D01*
+X020786Y007113D01*
+X020790Y007074D01*
+X020790Y007036D01*
+X020786Y006997D01*
+X020778Y006959D01*
+X020766Y006922D01*
+X020751Y006886D01*
+X020733Y006852D01*
+X020711Y006820D01*
+X020686Y006790D01*
+X020658Y006763D01*
+X020628Y006738D01*
+X020595Y006717D01*
+X020560Y006700D01*
+X020524Y006685D01*
+X020487Y006675D01*
+X020448Y006668D01*
+X020410Y006665D01*
+X020371Y006666D01*
+X020332Y006671D01*
+X020294Y006680D01*
+X020258Y006692D01*
+X020222Y006708D01*
+X020188Y006727D01*
+X020157Y006750D01*
+X020128Y006776D01*
+X020101Y006804D01*
+X020078Y006835D01*
+X020057Y006868D01*
+X020041Y006904D01*
+X020027Y006940D01*
+X020018Y006978D01*
+X020012Y007016D01*
+X020010Y007055D01*
+X020000Y006655D02*
+X020800Y007455D01*
+X020610Y006755D02*
+X020612Y006794D01*
+X020618Y006832D01*
+X020627Y006870D01*
+X020641Y006906D01*
+X020657Y006942D01*
+X020678Y006975D01*
+X020701Y007006D01*
+X020728Y007034D01*
+X020757Y007060D01*
+X020788Y007083D01*
+X020822Y007102D01*
+X020858Y007118D01*
+X020894Y007130D01*
+X020932Y007139D01*
+X020971Y007144D01*
+X021010Y007145D01*
+X021048Y007142D01*
+X021087Y007135D01*
+X021124Y007125D01*
+X021160Y007110D01*
+X021195Y007093D01*
+X021228Y007072D01*
+X021258Y007047D01*
+X021286Y007020D01*
+X021311Y006990D01*
+X021333Y006958D01*
+X021351Y006924D01*
+X021366Y006888D01*
+X021378Y006851D01*
+X021386Y006813D01*
+X021390Y006774D01*
+X021390Y006736D01*
+X021386Y006697D01*
+X021378Y006659D01*
+X021366Y006622D01*
+X021351Y006586D01*
+X021333Y006552D01*
+X021311Y006520D01*
+X021286Y006490D01*
+X021258Y006463D01*
+X021228Y006438D01*
+X021195Y006417D01*
+X021160Y006400D01*
+X021124Y006385D01*
+X021087Y006375D01*
+X021048Y006368D01*
+X021010Y006365D01*
+X020971Y006366D01*
+X020932Y006371D01*
+X020894Y006380D01*
+X020858Y006392D01*
+X020822Y006408D01*
+X020788Y006427D01*
+X020757Y006450D01*
+X020728Y006476D01*
+X020701Y006504D01*
+X020678Y006535D01*
+X020657Y006568D01*
+X020641Y006604D01*
+X020627Y006640D01*
+X020618Y006678D01*
+X020612Y006716D01*
+X020610Y006755D01*
+X020600Y006355D02*
+X021400Y007155D01*
+X020210Y006505D02*
+X020212Y006544D01*
+X020218Y006582D01*
+X020227Y006620D01*
+X020241Y006656D01*
+X020257Y006692D01*
+X020278Y006725D01*
+X020301Y006756D01*
+X020328Y006784D01*
+X020357Y006810D01*
+X020388Y006833D01*
+X020422Y006852D01*
+X020458Y006868D01*
+X020494Y006880D01*
+X020532Y006889D01*
+X020571Y006894D01*
+X020610Y006895D01*
+X020648Y006892D01*
+X020687Y006885D01*
+X020724Y006875D01*
+X020760Y006860D01*
+X020795Y006843D01*
+X020828Y006822D01*
+X020858Y006797D01*
+X020886Y006770D01*
+X020911Y006740D01*
+X020933Y006708D01*
+X020951Y006674D01*
+X020966Y006638D01*
+X020978Y006601D01*
+X020986Y006563D01*
+X020990Y006524D01*
+X020990Y006486D01*
+X020986Y006447D01*
+X020978Y006409D01*
+X020966Y006372D01*
+X020951Y006336D01*
+X020933Y006302D01*
+X020911Y006270D01*
+X020886Y006240D01*
+X020858Y006213D01*
+X020828Y006188D01*
+X020795Y006167D01*
+X020760Y006150D01*
+X020724Y006135D01*
+X020687Y006125D01*
+X020648Y006118D01*
+X020610Y006115D01*
+X020571Y006116D01*
+X020532Y006121D01*
+X020494Y006130D01*
+X020458Y006142D01*
+X020422Y006158D01*
+X020388Y006177D01*
+X020357Y006200D01*
+X020328Y006226D01*
+X020301Y006254D01*
+X020278Y006285D01*
+X020257Y006318D01*
+X020241Y006354D01*
+X020227Y006390D01*
+X020218Y006428D01*
+X020212Y006466D01*
+X020210Y006505D01*
+X020200Y006105D02*
+X021000Y006905D01*
+X019760Y006655D02*
+X019762Y006694D01*
+X019768Y006732D01*
+X019777Y006770D01*
+X019791Y006806D01*
+X019807Y006842D01*
+X019828Y006875D01*
+X019851Y006906D01*
+X019878Y006934D01*
+X019907Y006960D01*
+X019938Y006983D01*
+X019972Y007002D01*
+X020008Y007018D01*
+X020044Y007030D01*
+X020082Y007039D01*
+X020121Y007044D01*
+X020160Y007045D01*
+X020198Y007042D01*
+X020237Y007035D01*
+X020274Y007025D01*
+X020310Y007010D01*
+X020345Y006993D01*
+X020378Y006972D01*
+X020408Y006947D01*
+X020436Y006920D01*
+X020461Y006890D01*
+X020483Y006858D01*
+X020501Y006824D01*
+X020516Y006788D01*
+X020528Y006751D01*
+X020536Y006713D01*
+X020540Y006674D01*
+X020540Y006636D01*
+X020536Y006597D01*
+X020528Y006559D01*
+X020516Y006522D01*
+X020501Y006486D01*
+X020483Y006452D01*
+X020461Y006420D01*
+X020436Y006390D01*
+X020408Y006363D01*
+X020378Y006338D01*
+X020345Y006317D01*
+X020310Y006300D01*
+X020274Y006285D01*
+X020237Y006275D01*
+X020198Y006268D01*
+X020160Y006265D01*
+X020121Y006266D01*
+X020082Y006271D01*
+X020044Y006280D01*
+X020008Y006292D01*
+X019972Y006308D01*
+X019938Y006327D01*
+X019907Y006350D01*
+X019878Y006376D01*
+X019851Y006404D01*
+X019828Y006435D01*
+X019807Y006468D01*
+X019791Y006504D01*
+X019777Y006540D01*
+X019768Y006578D01*
+X019762Y006616D01*
+X019760Y006655D01*
+X019750Y006255D02*
+X020550Y007055D01*
+X018560Y007155D02*
+X018562Y007194D01*
+X018568Y007232D01*
+X018577Y007270D01*
+X018591Y007306D01*
+X018607Y007342D01*
+X018628Y007375D01*
+X018651Y007406D01*
+X018678Y007434D01*
+X018707Y007460D01*
+X018738Y007483D01*
+X018772Y007502D01*
+X018808Y007518D01*
+X018844Y007530D01*
+X018882Y007539D01*
+X018921Y007544D01*
+X018960Y007545D01*
+X018998Y007542D01*
+X019037Y007535D01*
+X019074Y007525D01*
+X019110Y007510D01*
+X019145Y007493D01*
+X019178Y007472D01*
+X019208Y007447D01*
+X019236Y007420D01*
+X019261Y007390D01*
+X019283Y007358D01*
+X019301Y007324D01*
+X019316Y007288D01*
+X019328Y007251D01*
+X019336Y007213D01*
+X019340Y007174D01*
+X019340Y007136D01*
+X019336Y007097D01*
+X019328Y007059D01*
+X019316Y007022D01*
+X019301Y006986D01*
+X019283Y006952D01*
+X019261Y006920D01*
+X019236Y006890D01*
+X019208Y006863D01*
+X019178Y006838D01*
+X019145Y006817D01*
+X019110Y006800D01*
+X019074Y006785D01*
+X019037Y006775D01*
+X018998Y006768D01*
+X018960Y006765D01*
+X018921Y006766D01*
+X018882Y006771D01*
+X018844Y006780D01*
+X018808Y006792D01*
+X018772Y006808D01*
+X018738Y006827D01*
+X018707Y006850D01*
+X018678Y006876D01*
+X018651Y006904D01*
+X018628Y006935D01*
+X018607Y006968D01*
+X018591Y007004D01*
+X018577Y007040D01*
+X018568Y007078D01*
+X018562Y007116D01*
+X018560Y007155D01*
+X018550Y006755D02*
+X019350Y007555D01*
+X017360Y006605D02*
+X017362Y006644D01*
+X017368Y006682D01*
+X017377Y006720D01*
+X017391Y006756D01*
+X017407Y006792D01*
+X017428Y006825D01*
+X017451Y006856D01*
+X017478Y006884D01*
+X017507Y006910D01*
+X017538Y006933D01*
+X017572Y006952D01*
+X017608Y006968D01*
+X017644Y006980D01*
+X017682Y006989D01*
+X017721Y006994D01*
+X017760Y006995D01*
+X017798Y006992D01*
+X017837Y006985D01*
+X017874Y006975D01*
+X017910Y006960D01*
+X017945Y006943D01*
+X017978Y006922D01*
+X018008Y006897D01*
+X018036Y006870D01*
+X018061Y006840D01*
+X018083Y006808D01*
+X018101Y006774D01*
+X018116Y006738D01*
+X018128Y006701D01*
+X018136Y006663D01*
+X018140Y006624D01*
+X018140Y006586D01*
+X018136Y006547D01*
+X018128Y006509D01*
+X018116Y006472D01*
+X018101Y006436D01*
+X018083Y006402D01*
+X018061Y006370D01*
+X018036Y006340D01*
+X018008Y006313D01*
+X017978Y006288D01*
+X017945Y006267D01*
+X017910Y006250D01*
+X017874Y006235D01*
+X017837Y006225D01*
+X017798Y006218D01*
+X017760Y006215D01*
+X017721Y006216D01*
+X017682Y006221D01*
+X017644Y006230D01*
+X017608Y006242D01*
+X017572Y006258D01*
+X017538Y006277D01*
+X017507Y006300D01*
+X017478Y006326D01*
+X017451Y006354D01*
+X017428Y006385D01*
+X017407Y006418D01*
+X017391Y006454D01*
+X017377Y006490D01*
+X017368Y006528D01*
+X017362Y006566D01*
+X017360Y006605D01*
+X017350Y006205D02*
+X018150Y007005D01*
+X016660Y006705D02*
+X016662Y006744D01*
+X016668Y006782D01*
+X016677Y006820D01*
+X016691Y006856D01*
+X016707Y006892D01*
+X016728Y006925D01*
+X016751Y006956D01*
+X016778Y006984D01*
+X016807Y007010D01*
+X016838Y007033D01*
+X016872Y007052D01*
+X016908Y007068D01*
+X016944Y007080D01*
+X016982Y007089D01*
+X017021Y007094D01*
+X017060Y007095D01*
+X017098Y007092D01*
+X017137Y007085D01*
+X017174Y007075D01*
+X017210Y007060D01*
+X017245Y007043D01*
+X017278Y007022D01*
+X017308Y006997D01*
+X017336Y006970D01*
+X017361Y006940D01*
+X017383Y006908D01*
+X017401Y006874D01*
+X017416Y006838D01*
+X017428Y006801D01*
+X017436Y006763D01*
+X017440Y006724D01*
+X017440Y006686D01*
+X017436Y006647D01*
+X017428Y006609D01*
+X017416Y006572D01*
+X017401Y006536D01*
+X017383Y006502D01*
+X017361Y006470D01*
+X017336Y006440D01*
+X017308Y006413D01*
+X017278Y006388D01*
+X017245Y006367D01*
+X017210Y006350D01*
+X017174Y006335D01*
+X017137Y006325D01*
+X017098Y006318D01*
+X017060Y006315D01*
+X017021Y006316D01*
+X016982Y006321D01*
+X016944Y006330D01*
+X016908Y006342D01*
+X016872Y006358D01*
+X016838Y006377D01*
+X016807Y006400D01*
+X016778Y006426D01*
+X016751Y006454D01*
+X016728Y006485D01*
+X016707Y006518D01*
+X016691Y006554D01*
+X016677Y006590D01*
+X016668Y006628D01*
+X016662Y006666D01*
+X016660Y006705D01*
+X016650Y006305D02*
+X017450Y007105D01*
+X015710Y006255D02*
+X015712Y006294D01*
+X015718Y006332D01*
+X015727Y006370D01*
+X015741Y006406D01*
+X015757Y006442D01*
+X015778Y006475D01*
+X015801Y006506D01*
+X015828Y006534D01*
+X015857Y006560D01*
+X015888Y006583D01*
+X015922Y006602D01*
+X015958Y006618D01*
+X015994Y006630D01*
+X016032Y006639D01*
+X016071Y006644D01*
+X016110Y006645D01*
+X016148Y006642D01*
+X016187Y006635D01*
+X016224Y006625D01*
+X016260Y006610D01*
+X016295Y006593D01*
+X016328Y006572D01*
+X016358Y006547D01*
+X016386Y006520D01*
+X016411Y006490D01*
+X016433Y006458D01*
+X016451Y006424D01*
+X016466Y006388D01*
+X016478Y006351D01*
+X016486Y006313D01*
+X016490Y006274D01*
+X016490Y006236D01*
+X016486Y006197D01*
+X016478Y006159D01*
+X016466Y006122D01*
+X016451Y006086D01*
+X016433Y006052D01*
+X016411Y006020D01*
+X016386Y005990D01*
+X016358Y005963D01*
+X016328Y005938D01*
+X016295Y005917D01*
+X016260Y005900D01*
+X016224Y005885D01*
+X016187Y005875D01*
+X016148Y005868D01*
+X016110Y005865D01*
+X016071Y005866D01*
+X016032Y005871D01*
+X015994Y005880D01*
+X015958Y005892D01*
+X015922Y005908D01*
+X015888Y005927D01*
+X015857Y005950D01*
+X015828Y005976D01*
+X015801Y006004D01*
+X015778Y006035D01*
+X015757Y006068D01*
+X015741Y006104D01*
+X015727Y006140D01*
+X015718Y006178D01*
+X015712Y006216D01*
+X015710Y006255D01*
+X015700Y005855D02*
+X016500Y006655D01*
+X016060Y005905D02*
+X016062Y005944D01*
+X016068Y005982D01*
+X016077Y006020D01*
+X016091Y006056D01*
+X016107Y006092D01*
+X016128Y006125D01*
+X016151Y006156D01*
+X016178Y006184D01*
+X016207Y006210D01*
+X016238Y006233D01*
+X016272Y006252D01*
+X016308Y006268D01*
+X016344Y006280D01*
+X016382Y006289D01*
+X016421Y006294D01*
+X016460Y006295D01*
+X016498Y006292D01*
+X016537Y006285D01*
+X016574Y006275D01*
+X016610Y006260D01*
+X016645Y006243D01*
+X016678Y006222D01*
+X016708Y006197D01*
+X016736Y006170D01*
+X016761Y006140D01*
+X016783Y006108D01*
+X016801Y006074D01*
+X016816Y006038D01*
+X016828Y006001D01*
+X016836Y005963D01*
+X016840Y005924D01*
+X016840Y005886D01*
+X016836Y005847D01*
+X016828Y005809D01*
+X016816Y005772D01*
+X016801Y005736D01*
+X016783Y005702D01*
+X016761Y005670D01*
+X016736Y005640D01*
+X016708Y005613D01*
+X016678Y005588D01*
+X016645Y005567D01*
+X016610Y005550D01*
+X016574Y005535D01*
+X016537Y005525D01*
+X016498Y005518D01*
+X016460Y005515D01*
+X016421Y005516D01*
+X016382Y005521D01*
+X016344Y005530D01*
+X016308Y005542D01*
+X016272Y005558D01*
+X016238Y005577D01*
+X016207Y005600D01*
+X016178Y005626D01*
+X016151Y005654D01*
+X016128Y005685D01*
+X016107Y005718D01*
+X016091Y005754D01*
+X016077Y005790D01*
+X016068Y005828D01*
+X016062Y005866D01*
+X016060Y005905D01*
+X016050Y005505D02*
+X016850Y006305D01*
+X016710Y005855D02*
+X016712Y005894D01*
+X016718Y005932D01*
+X016727Y005970D01*
+X016741Y006006D01*
+X016757Y006042D01*
+X016778Y006075D01*
+X016801Y006106D01*
+X016828Y006134D01*
+X016857Y006160D01*
+X016888Y006183D01*
+X016922Y006202D01*
+X016958Y006218D01*
+X016994Y006230D01*
+X017032Y006239D01*
+X017071Y006244D01*
+X017110Y006245D01*
+X017148Y006242D01*
+X017187Y006235D01*
+X017224Y006225D01*
+X017260Y006210D01*
+X017295Y006193D01*
+X017328Y006172D01*
+X017358Y006147D01*
+X017386Y006120D01*
+X017411Y006090D01*
+X017433Y006058D01*
+X017451Y006024D01*
+X017466Y005988D01*
+X017478Y005951D01*
+X017486Y005913D01*
+X017490Y005874D01*
+X017490Y005836D01*
+X017486Y005797D01*
+X017478Y005759D01*
+X017466Y005722D01*
+X017451Y005686D01*
+X017433Y005652D01*
+X017411Y005620D01*
+X017386Y005590D01*
+X017358Y005563D01*
+X017328Y005538D01*
+X017295Y005517D01*
+X017260Y005500D01*
+X017224Y005485D01*
+X017187Y005475D01*
+X017148Y005468D01*
+X017110Y005465D01*
+X017071Y005466D01*
+X017032Y005471D01*
+X016994Y005480D01*
+X016958Y005492D01*
+X016922Y005508D01*
+X016888Y005527D01*
+X016857Y005550D01*
+X016828Y005576D01*
+X016801Y005604D01*
+X016778Y005635D01*
+X016757Y005668D01*
+X016741Y005704D01*
+X016727Y005740D01*
+X016718Y005778D01*
+X016712Y005816D01*
+X016710Y005855D01*
+X016700Y005455D02*
+X017500Y006255D01*
+X017860Y005355D02*
+X017862Y005394D01*
+X017868Y005432D01*
+X017877Y005470D01*
+X017891Y005506D01*
+X017907Y005542D01*
+X017928Y005575D01*
+X017951Y005606D01*
+X017978Y005634D01*
+X018007Y005660D01*
+X018038Y005683D01*
+X018072Y005702D01*
+X018108Y005718D01*
+X018144Y005730D01*
+X018182Y005739D01*
+X018221Y005744D01*
+X018260Y005745D01*
+X018298Y005742D01*
+X018337Y005735D01*
+X018374Y005725D01*
+X018410Y005710D01*
+X018445Y005693D01*
+X018478Y005672D01*
+X018508Y005647D01*
+X018536Y005620D01*
+X018561Y005590D01*
+X018583Y005558D01*
+X018601Y005524D01*
+X018616Y005488D01*
+X018628Y005451D01*
+X018636Y005413D01*
+X018640Y005374D01*
+X018640Y005336D01*
+X018636Y005297D01*
+X018628Y005259D01*
+X018616Y005222D01*
+X018601Y005186D01*
+X018583Y005152D01*
+X018561Y005120D01*
+X018536Y005090D01*
+X018508Y005063D01*
+X018478Y005038D01*
+X018445Y005017D01*
+X018410Y005000D01*
+X018374Y004985D01*
+X018337Y004975D01*
+X018298Y004968D01*
+X018260Y004965D01*
+X018221Y004966D01*
+X018182Y004971D01*
+X018144Y004980D01*
+X018108Y004992D01*
+X018072Y005008D01*
+X018038Y005027D01*
+X018007Y005050D01*
+X017978Y005076D01*
+X017951Y005104D01*
+X017928Y005135D01*
+X017907Y005168D01*
+X017891Y005204D01*
+X017877Y005240D01*
+X017868Y005278D01*
+X017862Y005316D01*
+X017860Y005355D01*
+X017850Y004955D02*
+X018650Y005755D01*
+X018810Y005255D02*
+X018812Y005294D01*
+X018818Y005332D01*
+X018827Y005370D01*
+X018841Y005406D01*
+X018857Y005442D01*
+X018878Y005475D01*
+X018901Y005506D01*
+X018928Y005534D01*
+X018957Y005560D01*
+X018988Y005583D01*
+X019022Y005602D01*
+X019058Y005618D01*
+X019094Y005630D01*
+X019132Y005639D01*
+X019171Y005644D01*
+X019210Y005645D01*
+X019248Y005642D01*
+X019287Y005635D01*
+X019324Y005625D01*
+X019360Y005610D01*
+X019395Y005593D01*
+X019428Y005572D01*
+X019458Y005547D01*
+X019486Y005520D01*
+X019511Y005490D01*
+X019533Y005458D01*
+X019551Y005424D01*
+X019566Y005388D01*
+X019578Y005351D01*
+X019586Y005313D01*
+X019590Y005274D01*
+X019590Y005236D01*
+X019586Y005197D01*
+X019578Y005159D01*
+X019566Y005122D01*
+X019551Y005086D01*
+X019533Y005052D01*
+X019511Y005020D01*
+X019486Y004990D01*
+X019458Y004963D01*
+X019428Y004938D01*
+X019395Y004917D01*
+X019360Y004900D01*
+X019324Y004885D01*
+X019287Y004875D01*
+X019248Y004868D01*
+X019210Y004865D01*
+X019171Y004866D01*
+X019132Y004871D01*
+X019094Y004880D01*
+X019058Y004892D01*
+X019022Y004908D01*
+X018988Y004927D01*
+X018957Y004950D01*
+X018928Y004976D01*
+X018901Y005004D01*
+X018878Y005035D01*
+X018857Y005068D01*
+X018841Y005104D01*
+X018827Y005140D01*
+X018818Y005178D01*
+X018812Y005216D01*
+X018810Y005255D01*
+X018800Y004855D02*
+X019600Y005655D01*
+X020310Y005255D02*
+X020312Y005294D01*
+X020318Y005332D01*
+X020327Y005370D01*
+X020341Y005406D01*
+X020357Y005442D01*
+X020378Y005475D01*
+X020401Y005506D01*
+X020428Y005534D01*
+X020457Y005560D01*
+X020488Y005583D01*
+X020522Y005602D01*
+X020558Y005618D01*
+X020594Y005630D01*
+X020632Y005639D01*
+X020671Y005644D01*
+X020710Y005645D01*
+X020748Y005642D01*
+X020787Y005635D01*
+X020824Y005625D01*
+X020860Y005610D01*
+X020895Y005593D01*
+X020928Y005572D01*
+X020958Y005547D01*
+X020986Y005520D01*
+X021011Y005490D01*
+X021033Y005458D01*
+X021051Y005424D01*
+X021066Y005388D01*
+X021078Y005351D01*
+X021086Y005313D01*
+X021090Y005274D01*
+X021090Y005236D01*
+X021086Y005197D01*
+X021078Y005159D01*
+X021066Y005122D01*
+X021051Y005086D01*
+X021033Y005052D01*
+X021011Y005020D01*
+X020986Y004990D01*
+X020958Y004963D01*
+X020928Y004938D01*
+X020895Y004917D01*
+X020860Y004900D01*
+X020824Y004885D01*
+X020787Y004875D01*
+X020748Y004868D01*
+X020710Y004865D01*
+X020671Y004866D01*
+X020632Y004871D01*
+X020594Y004880D01*
+X020558Y004892D01*
+X020522Y004908D01*
+X020488Y004927D01*
+X020457Y004950D01*
+X020428Y004976D01*
+X020401Y005004D01*
+X020378Y005035D01*
+X020357Y005068D01*
+X020341Y005104D01*
+X020327Y005140D01*
+X020318Y005178D01*
+X020312Y005216D01*
+X020310Y005255D01*
+X020300Y004855D02*
+X021100Y005655D01*
+X021860Y005205D02*
+X021862Y005244D01*
+X021868Y005282D01*
+X021877Y005320D01*
+X021891Y005356D01*
+X021907Y005392D01*
+X021928Y005425D01*
+X021951Y005456D01*
+X021978Y005484D01*
+X022007Y005510D01*
+X022038Y005533D01*
+X022072Y005552D01*
+X022108Y005568D01*
+X022144Y005580D01*
+X022182Y005589D01*
+X022221Y005594D01*
+X022260Y005595D01*
+X022298Y005592D01*
+X022337Y005585D01*
+X022374Y005575D01*
+X022410Y005560D01*
+X022445Y005543D01*
+X022478Y005522D01*
+X022508Y005497D01*
+X022536Y005470D01*
+X022561Y005440D01*
+X022583Y005408D01*
+X022601Y005374D01*
+X022616Y005338D01*
+X022628Y005301D01*
+X022636Y005263D01*
+X022640Y005224D01*
+X022640Y005186D01*
+X022636Y005147D01*
+X022628Y005109D01*
+X022616Y005072D01*
+X022601Y005036D01*
+X022583Y005002D01*
+X022561Y004970D01*
+X022536Y004940D01*
+X022508Y004913D01*
+X022478Y004888D01*
+X022445Y004867D01*
+X022410Y004850D01*
+X022374Y004835D01*
+X022337Y004825D01*
+X022298Y004818D01*
+X022260Y004815D01*
+X022221Y004816D01*
+X022182Y004821D01*
+X022144Y004830D01*
+X022108Y004842D01*
+X022072Y004858D01*
+X022038Y004877D01*
+X022007Y004900D01*
+X021978Y004926D01*
+X021951Y004954D01*
+X021928Y004985D01*
+X021907Y005018D01*
+X021891Y005054D01*
+X021877Y005090D01*
+X021868Y005128D01*
+X021862Y005166D01*
+X021860Y005205D01*
+X021850Y004805D02*
+X022650Y005605D01*
+X020110Y004505D02*
+X020112Y004544D01*
+X020118Y004582D01*
+X020127Y004620D01*
+X020141Y004656D01*
+X020157Y004692D01*
+X020178Y004725D01*
+X020201Y004756D01*
+X020228Y004784D01*
+X020257Y004810D01*
+X020288Y004833D01*
+X020322Y004852D01*
+X020358Y004868D01*
+X020394Y004880D01*
+X020432Y004889D01*
+X020471Y004894D01*
+X020510Y004895D01*
+X020548Y004892D01*
+X020587Y004885D01*
+X020624Y004875D01*
+X020660Y004860D01*
+X020695Y004843D01*
+X020728Y004822D01*
+X020758Y004797D01*
+X020786Y004770D01*
+X020811Y004740D01*
+X020833Y004708D01*
+X020851Y004674D01*
+X020866Y004638D01*
+X020878Y004601D01*
+X020886Y004563D01*
+X020890Y004524D01*
+X020890Y004486D01*
+X020886Y004447D01*
+X020878Y004409D01*
+X020866Y004372D01*
+X020851Y004336D01*
+X020833Y004302D01*
+X020811Y004270D01*
+X020786Y004240D01*
+X020758Y004213D01*
+X020728Y004188D01*
+X020695Y004167D01*
+X020660Y004150D01*
+X020624Y004135D01*
+X020587Y004125D01*
+X020548Y004118D01*
+X020510Y004115D01*
+X020471Y004116D01*
+X020432Y004121D01*
+X020394Y004130D01*
+X020358Y004142D01*
+X020322Y004158D01*
+X020288Y004177D01*
+X020257Y004200D01*
+X020228Y004226D01*
+X020201Y004254D01*
+X020178Y004285D01*
+X020157Y004318D01*
+X020141Y004354D01*
+X020127Y004390D01*
+X020118Y004428D01*
+X020112Y004466D01*
+X020110Y004505D01*
+X020100Y004105D02*
+X020900Y004905D01*
+X020560Y003955D02*
+X020562Y003994D01*
+X020568Y004032D01*
+X020577Y004070D01*
+X020591Y004106D01*
+X020607Y004142D01*
+X020628Y004175D01*
+X020651Y004206D01*
+X020678Y004234D01*
+X020707Y004260D01*
+X020738Y004283D01*
+X020772Y004302D01*
+X020808Y004318D01*
+X020844Y004330D01*
+X020882Y004339D01*
+X020921Y004344D01*
+X020960Y004345D01*
+X020998Y004342D01*
+X021037Y004335D01*
+X021074Y004325D01*
+X021110Y004310D01*
+X021145Y004293D01*
+X021178Y004272D01*
+X021208Y004247D01*
+X021236Y004220D01*
+X021261Y004190D01*
+X021283Y004158D01*
+X021301Y004124D01*
+X021316Y004088D01*
+X021328Y004051D01*
+X021336Y004013D01*
+X021340Y003974D01*
+X021340Y003936D01*
+X021336Y003897D01*
+X021328Y003859D01*
+X021316Y003822D01*
+X021301Y003786D01*
+X021283Y003752D01*
+X021261Y003720D01*
+X021236Y003690D01*
+X021208Y003663D01*
+X021178Y003638D01*
+X021145Y003617D01*
+X021110Y003600D01*
+X021074Y003585D01*
+X021037Y003575D01*
+X020998Y003568D01*
+X020960Y003565D01*
+X020921Y003566D01*
+X020882Y003571D01*
+X020844Y003580D01*
+X020808Y003592D01*
+X020772Y003608D01*
+X020738Y003627D01*
+X020707Y003650D01*
+X020678Y003676D01*
+X020651Y003704D01*
+X020628Y003735D01*
+X020607Y003768D01*
+X020591Y003804D01*
+X020577Y003840D01*
+X020568Y003878D01*
+X020562Y003916D01*
+X020560Y003955D01*
+X020550Y003555D02*
+X021350Y004355D01*
+X020060Y003355D02*
+X020062Y003394D01*
+X020068Y003432D01*
+X020077Y003470D01*
+X020091Y003506D01*
+X020107Y003542D01*
+X020128Y003575D01*
+X020151Y003606D01*
+X020178Y003634D01*
+X020207Y003660D01*
+X020238Y003683D01*
+X020272Y003702D01*
+X020308Y003718D01*
+X020344Y003730D01*
+X020382Y003739D01*
+X020421Y003744D01*
+X020460Y003745D01*
+X020498Y003742D01*
+X020537Y003735D01*
+X020574Y003725D01*
+X020610Y003710D01*
+X020645Y003693D01*
+X020678Y003672D01*
+X020708Y003647D01*
+X020736Y003620D01*
+X020761Y003590D01*
+X020783Y003558D01*
+X020801Y003524D01*
+X020816Y003488D01*
+X020828Y003451D01*
+X020836Y003413D01*
+X020840Y003374D01*
+X020840Y003336D01*
+X020836Y003297D01*
+X020828Y003259D01*
+X020816Y003222D01*
+X020801Y003186D01*
+X020783Y003152D01*
+X020761Y003120D01*
+X020736Y003090D01*
+X020708Y003063D01*
+X020678Y003038D01*
+X020645Y003017D01*
+X020610Y003000D01*
+X020574Y002985D01*
+X020537Y002975D01*
+X020498Y002968D01*
+X020460Y002965D01*
+X020421Y002966D01*
+X020382Y002971D01*
+X020344Y002980D01*
+X020308Y002992D01*
+X020272Y003008D01*
+X020238Y003027D01*
+X020207Y003050D01*
+X020178Y003076D01*
+X020151Y003104D01*
+X020128Y003135D01*
+X020107Y003168D01*
+X020091Y003204D01*
+X020077Y003240D01*
+X020068Y003278D01*
+X020062Y003316D01*
+X020060Y003355D01*
+X020050Y002955D02*
+X020850Y003755D01*
+X020360Y003055D02*
+X020362Y003094D01*
+X020368Y003132D01*
+X020377Y003170D01*
+X020391Y003206D01*
+X020407Y003242D01*
+X020428Y003275D01*
+X020451Y003306D01*
+X020478Y003334D01*
+X020507Y003360D01*
+X020538Y003383D01*
+X020572Y003402D01*
+X020608Y003418D01*
+X020644Y003430D01*
+X020682Y003439D01*
+X020721Y003444D01*
+X020760Y003445D01*
+X020798Y003442D01*
+X020837Y003435D01*
+X020874Y003425D01*
+X020910Y003410D01*
+X020945Y003393D01*
+X020978Y003372D01*
+X021008Y003347D01*
+X021036Y003320D01*
+X021061Y003290D01*
+X021083Y003258D01*
+X021101Y003224D01*
+X021116Y003188D01*
+X021128Y003151D01*
+X021136Y003113D01*
+X021140Y003074D01*
+X021140Y003036D01*
+X021136Y002997D01*
+X021128Y002959D01*
+X021116Y002922D01*
+X021101Y002886D01*
+X021083Y002852D01*
+X021061Y002820D01*
+X021036Y002790D01*
+X021008Y002763D01*
+X020978Y002738D01*
+X020945Y002717D01*
+X020910Y002700D01*
+X020874Y002685D01*
+X020837Y002675D01*
+X020798Y002668D01*
+X020760Y002665D01*
+X020721Y002666D01*
+X020682Y002671D01*
+X020644Y002680D01*
+X020608Y002692D01*
+X020572Y002708D01*
+X020538Y002727D01*
+X020507Y002750D01*
+X020478Y002776D01*
+X020451Y002804D01*
+X020428Y002835D01*
+X020407Y002868D01*
+X020391Y002904D01*
+X020377Y002940D01*
+X020368Y002978D01*
+X020362Y003016D01*
+X020360Y003055D01*
+X020350Y002655D02*
+X021150Y003455D01*
+X021860Y003305D02*
+X021862Y003344D01*
+X021868Y003382D01*
+X021877Y003420D01*
+X021891Y003456D01*
+X021907Y003492D01*
+X021928Y003525D01*
+X021951Y003556D01*
+X021978Y003584D01*
+X022007Y003610D01*
+X022038Y003633D01*
+X022072Y003652D01*
+X022108Y003668D01*
+X022144Y003680D01*
+X022182Y003689D01*
+X022221Y003694D01*
+X022260Y003695D01*
+X022298Y003692D01*
+X022337Y003685D01*
+X022374Y003675D01*
+X022410Y003660D01*
+X022445Y003643D01*
+X022478Y003622D01*
+X022508Y003597D01*
+X022536Y003570D01*
+X022561Y003540D01*
+X022583Y003508D01*
+X022601Y003474D01*
+X022616Y003438D01*
+X022628Y003401D01*
+X022636Y003363D01*
+X022640Y003324D01*
+X022640Y003286D01*
+X022636Y003247D01*
+X022628Y003209D01*
+X022616Y003172D01*
+X022601Y003136D01*
+X022583Y003102D01*
+X022561Y003070D01*
+X022536Y003040D01*
+X022508Y003013D01*
+X022478Y002988D01*
+X022445Y002967D01*
+X022410Y002950D01*
+X022374Y002935D01*
+X022337Y002925D01*
+X022298Y002918D01*
+X022260Y002915D01*
+X022221Y002916D01*
+X022182Y002921D01*
+X022144Y002930D01*
+X022108Y002942D01*
+X022072Y002958D01*
+X022038Y002977D01*
+X022007Y003000D01*
+X021978Y003026D01*
+X021951Y003054D01*
+X021928Y003085D01*
+X021907Y003118D01*
+X021891Y003154D01*
+X021877Y003190D01*
+X021868Y003228D01*
+X021862Y003266D01*
+X021860Y003305D01*
+X021850Y002905D02*
+X022650Y003705D01*
+X022710Y003255D02*
+X022712Y003294D01*
+X022718Y003332D01*
+X022727Y003370D01*
+X022741Y003406D01*
+X022757Y003442D01*
+X022778Y003475D01*
+X022801Y003506D01*
+X022828Y003534D01*
+X022857Y003560D01*
+X022888Y003583D01*
+X022922Y003602D01*
+X022958Y003618D01*
+X022994Y003630D01*
+X023032Y003639D01*
+X023071Y003644D01*
+X023110Y003645D01*
+X023148Y003642D01*
+X023187Y003635D01*
+X023224Y003625D01*
+X023260Y003610D01*
+X023295Y003593D01*
+X023328Y003572D01*
+X023358Y003547D01*
+X023386Y003520D01*
+X023411Y003490D01*
+X023433Y003458D01*
+X023451Y003424D01*
+X023466Y003388D01*
+X023478Y003351D01*
+X023486Y003313D01*
+X023490Y003274D01*
+X023490Y003236D01*
+X023486Y003197D01*
+X023478Y003159D01*
+X023466Y003122D01*
+X023451Y003086D01*
+X023433Y003052D01*
+X023411Y003020D01*
+X023386Y002990D01*
+X023358Y002963D01*
+X023328Y002938D01*
+X023295Y002917D01*
+X023260Y002900D01*
+X023224Y002885D01*
+X023187Y002875D01*
+X023148Y002868D01*
+X023110Y002865D01*
+X023071Y002866D01*
+X023032Y002871D01*
+X022994Y002880D01*
+X022958Y002892D01*
+X022922Y002908D01*
+X022888Y002927D01*
+X022857Y002950D01*
+X022828Y002976D01*
+X022801Y003004D01*
+X022778Y003035D01*
+X022757Y003068D01*
+X022741Y003104D01*
+X022727Y003140D01*
+X022718Y003178D01*
+X022712Y003216D01*
+X022710Y003255D01*
+X022700Y002855D02*
+X023500Y003655D01*
+X024760Y002255D02*
+X024762Y002294D01*
+X024768Y002332D01*
+X024777Y002370D01*
+X024791Y002406D01*
+X024807Y002442D01*
+X024828Y002475D01*
+X024851Y002506D01*
+X024878Y002534D01*
+X024907Y002560D01*
+X024938Y002583D01*
+X024972Y002602D01*
+X025008Y002618D01*
+X025044Y002630D01*
+X025082Y002639D01*
+X025121Y002644D01*
+X025160Y002645D01*
+X025198Y002642D01*
+X025237Y002635D01*
+X025274Y002625D01*
+X025310Y002610D01*
+X025345Y002593D01*
+X025378Y002572D01*
+X025408Y002547D01*
+X025436Y002520D01*
+X025461Y002490D01*
+X025483Y002458D01*
+X025501Y002424D01*
+X025516Y002388D01*
+X025528Y002351D01*
+X025536Y002313D01*
+X025540Y002274D01*
+X025540Y002236D01*
+X025536Y002197D01*
+X025528Y002159D01*
+X025516Y002122D01*
+X025501Y002086D01*
+X025483Y002052D01*
+X025461Y002020D01*
+X025436Y001990D01*
+X025408Y001963D01*
+X025378Y001938D01*
+X025345Y001917D01*
+X025310Y001900D01*
+X025274Y001885D01*
+X025237Y001875D01*
+X025198Y001868D01*
+X025160Y001865D01*
+X025121Y001866D01*
+X025082Y001871D01*
+X025044Y001880D01*
+X025008Y001892D01*
+X024972Y001908D01*
+X024938Y001927D01*
+X024907Y001950D01*
+X024878Y001976D01*
+X024851Y002004D01*
+X024828Y002035D01*
+X024807Y002068D01*
+X024791Y002104D01*
+X024777Y002140D01*
+X024768Y002178D01*
+X024762Y002216D01*
+X024760Y002255D01*
+X024750Y001855D02*
+X025550Y002655D01*
+X027260Y002255D02*
+X027262Y002294D01*
+X027268Y002332D01*
+X027277Y002370D01*
+X027291Y002406D01*
+X027307Y002442D01*
+X027328Y002475D01*
+X027351Y002506D01*
+X027378Y002534D01*
+X027407Y002560D01*
+X027438Y002583D01*
+X027472Y002602D01*
+X027508Y002618D01*
+X027544Y002630D01*
+X027582Y002639D01*
+X027621Y002644D01*
+X027660Y002645D01*
+X027698Y002642D01*
+X027737Y002635D01*
+X027774Y002625D01*
+X027810Y002610D01*
+X027845Y002593D01*
+X027878Y002572D01*
+X027908Y002547D01*
+X027936Y002520D01*
+X027961Y002490D01*
+X027983Y002458D01*
+X028001Y002424D01*
+X028016Y002388D01*
+X028028Y002351D01*
+X028036Y002313D01*
+X028040Y002274D01*
+X028040Y002236D01*
+X028036Y002197D01*
+X028028Y002159D01*
+X028016Y002122D01*
+X028001Y002086D01*
+X027983Y002052D01*
+X027961Y002020D01*
+X027936Y001990D01*
+X027908Y001963D01*
+X027878Y001938D01*
+X027845Y001917D01*
+X027810Y001900D01*
+X027774Y001885D01*
+X027737Y001875D01*
+X027698Y001868D01*
+X027660Y001865D01*
+X027621Y001866D01*
+X027582Y001871D01*
+X027544Y001880D01*
+X027508Y001892D01*
+X027472Y001908D01*
+X027438Y001927D01*
+X027407Y001950D01*
+X027378Y001976D01*
+X027351Y002004D01*
+X027328Y002035D01*
+X027307Y002068D01*
+X027291Y002104D01*
+X027277Y002140D01*
+X027268Y002178D01*
+X027262Y002216D01*
+X027260Y002255D01*
+X027250Y001855D02*
+X028050Y002655D01*
+X029060Y002305D02*
+X029062Y002344D01*
+X029068Y002382D01*
+X029077Y002420D01*
+X029091Y002456D01*
+X029107Y002492D01*
+X029128Y002525D01*
+X029151Y002556D01*
+X029178Y002584D01*
+X029207Y002610D01*
+X029238Y002633D01*
+X029272Y002652D01*
+X029308Y002668D01*
+X029344Y002680D01*
+X029382Y002689D01*
+X029421Y002694D01*
+X029460Y002695D01*
+X029498Y002692D01*
+X029537Y002685D01*
+X029574Y002675D01*
+X029610Y002660D01*
+X029645Y002643D01*
+X029678Y002622D01*
+X029708Y002597D01*
+X029736Y002570D01*
+X029761Y002540D01*
+X029783Y002508D01*
+X029801Y002474D01*
+X029816Y002438D01*
+X029828Y002401D01*
+X029836Y002363D01*
+X029840Y002324D01*
+X029840Y002286D01*
+X029836Y002247D01*
+X029828Y002209D01*
+X029816Y002172D01*
+X029801Y002136D01*
+X029783Y002102D01*
+X029761Y002070D01*
+X029736Y002040D01*
+X029708Y002013D01*
+X029678Y001988D01*
+X029645Y001967D01*
+X029610Y001950D01*
+X029574Y001935D01*
+X029537Y001925D01*
+X029498Y001918D01*
+X029460Y001915D01*
+X029421Y001916D01*
+X029382Y001921D01*
+X029344Y001930D01*
+X029308Y001942D01*
+X029272Y001958D01*
+X029238Y001977D01*
+X029207Y002000D01*
+X029178Y002026D01*
+X029151Y002054D01*
+X029128Y002085D01*
+X029107Y002118D01*
+X029091Y002154D01*
+X029077Y002190D01*
+X029068Y002228D01*
+X029062Y002266D01*
+X029060Y002305D01*
+X029050Y001905D02*
+X029850Y002705D01*
+X026060Y000705D02*
+X026062Y000744D01*
+X026068Y000782D01*
+X026077Y000820D01*
+X026091Y000856D01*
+X026107Y000892D01*
+X026128Y000925D01*
+X026151Y000956D01*
+X026178Y000984D01*
+X026207Y001010D01*
+X026238Y001033D01*
+X026272Y001052D01*
+X026308Y001068D01*
+X026344Y001080D01*
+X026382Y001089D01*
+X026421Y001094D01*
+X026460Y001095D01*
+X026498Y001092D01*
+X026537Y001085D01*
+X026574Y001075D01*
+X026610Y001060D01*
+X026645Y001043D01*
+X026678Y001022D01*
+X026708Y000997D01*
+X026736Y000970D01*
+X026761Y000940D01*
+X026783Y000908D01*
+X026801Y000874D01*
+X026816Y000838D01*
+X026828Y000801D01*
+X026836Y000763D01*
+X026840Y000724D01*
+X026840Y000686D01*
+X026836Y000647D01*
+X026828Y000609D01*
+X026816Y000572D01*
+X026801Y000536D01*
+X026783Y000502D01*
+X026761Y000470D01*
+X026736Y000440D01*
+X026708Y000413D01*
+X026678Y000388D01*
+X026645Y000367D01*
+X026610Y000350D01*
+X026574Y000335D01*
+X026537Y000325D01*
+X026498Y000318D01*
+X026460Y000315D01*
+X026421Y000316D01*
+X026382Y000321D01*
+X026344Y000330D01*
+X026308Y000342D01*
+X026272Y000358D01*
+X026238Y000377D01*
+X026207Y000400D01*
+X026178Y000426D01*
+X026151Y000454D01*
+X026128Y000485D01*
+X026107Y000518D01*
+X026091Y000554D01*
+X026077Y000590D01*
+X026068Y000628D01*
+X026062Y000666D01*
+X026060Y000705D01*
+X026050Y000305D02*
+X026850Y001105D01*
+X023260Y001405D02*
+X023262Y001444D01*
+X023268Y001482D01*
+X023277Y001520D01*
+X023291Y001556D01*
+X023307Y001592D01*
+X023328Y001625D01*
+X023351Y001656D01*
+X023378Y001684D01*
+X023407Y001710D01*
+X023438Y001733D01*
+X023472Y001752D01*
+X023508Y001768D01*
+X023544Y001780D01*
+X023582Y001789D01*
+X023621Y001794D01*
+X023660Y001795D01*
+X023698Y001792D01*
+X023737Y001785D01*
+X023774Y001775D01*
+X023810Y001760D01*
+X023845Y001743D01*
+X023878Y001722D01*
+X023908Y001697D01*
+X023936Y001670D01*
+X023961Y001640D01*
+X023983Y001608D01*
+X024001Y001574D01*
+X024016Y001538D01*
+X024028Y001501D01*
+X024036Y001463D01*
+X024040Y001424D01*
+X024040Y001386D01*
+X024036Y001347D01*
+X024028Y001309D01*
+X024016Y001272D01*
+X024001Y001236D01*
+X023983Y001202D01*
+X023961Y001170D01*
+X023936Y001140D01*
+X023908Y001113D01*
+X023878Y001088D01*
+X023845Y001067D01*
+X023810Y001050D01*
+X023774Y001035D01*
+X023737Y001025D01*
+X023698Y001018D01*
+X023660Y001015D01*
+X023621Y001016D01*
+X023582Y001021D01*
+X023544Y001030D01*
+X023508Y001042D01*
+X023472Y001058D01*
+X023438Y001077D01*
+X023407Y001100D01*
+X023378Y001126D01*
+X023351Y001154D01*
+X023328Y001185D01*
+X023307Y001218D01*
+X023291Y001254D01*
+X023277Y001290D01*
+X023268Y001328D01*
+X023262Y001366D01*
+X023260Y001405D01*
+X023250Y001005D02*
+X024050Y001805D01*
+X023084Y001829D02*
+X023086Y001868D01*
+X023092Y001906D01*
+X023101Y001944D01*
+X023115Y001980D01*
+X023131Y002016D01*
+X023152Y002049D01*
+X023175Y002080D01*
+X023202Y002108D01*
+X023231Y002134D01*
+X023262Y002157D01*
+X023296Y002176D01*
+X023332Y002192D01*
+X023368Y002204D01*
+X023406Y002213D01*
+X023445Y002218D01*
+X023484Y002219D01*
+X023522Y002216D01*
+X023561Y002209D01*
+X023598Y002199D01*
+X023634Y002184D01*
+X023669Y002167D01*
+X023702Y002146D01*
+X023732Y002121D01*
+X023760Y002094D01*
+X023785Y002064D01*
+X023807Y002032D01*
+X023825Y001998D01*
+X023840Y001962D01*
+X023852Y001925D01*
+X023860Y001887D01*
+X023864Y001848D01*
+X023864Y001810D01*
+X023860Y001771D01*
+X023852Y001733D01*
+X023840Y001696D01*
+X023825Y001660D01*
+X023807Y001626D01*
+X023785Y001594D01*
+X023760Y001564D01*
+X023732Y001537D01*
+X023702Y001512D01*
+X023669Y001491D01*
+X023634Y001474D01*
+X023598Y001459D01*
+X023561Y001449D01*
+X023522Y001442D01*
+X023484Y001439D01*
+X023445Y001440D01*
+X023406Y001445D01*
+X023368Y001454D01*
+X023332Y001466D01*
+X023296Y001482D01*
+X023262Y001501D01*
+X023231Y001524D01*
+X023202Y001550D01*
+X023175Y001578D01*
+X023152Y001609D01*
+X023131Y001642D01*
+X023115Y001678D01*
+X023101Y001714D01*
+X023092Y001752D01*
+X023086Y001790D01*
+X023084Y001829D01*
+X023074Y001429D02*
+X023874Y002229D01*
+X022660Y002005D02*
+X022662Y002044D01*
+X022668Y002082D01*
+X022677Y002120D01*
+X022691Y002156D01*
+X022707Y002192D01*
+X022728Y002225D01*
+X022751Y002256D01*
+X022778Y002284D01*
+X022807Y002310D01*
+X022838Y002333D01*
+X022872Y002352D01*
+X022908Y002368D01*
+X022944Y002380D01*
+X022982Y002389D01*
+X023021Y002394D01*
+X023060Y002395D01*
+X023098Y002392D01*
+X023137Y002385D01*
+X023174Y002375D01*
+X023210Y002360D01*
+X023245Y002343D01*
+X023278Y002322D01*
+X023308Y002297D01*
+X023336Y002270D01*
+X023361Y002240D01*
+X023383Y002208D01*
+X023401Y002174D01*
+X023416Y002138D01*
+X023428Y002101D01*
+X023436Y002063D01*
+X023440Y002024D01*
+X023440Y001986D01*
+X023436Y001947D01*
+X023428Y001909D01*
+X023416Y001872D01*
+X023401Y001836D01*
+X023383Y001802D01*
+X023361Y001770D01*
+X023336Y001740D01*
+X023308Y001713D01*
+X023278Y001688D01*
+X023245Y001667D01*
+X023210Y001650D01*
+X023174Y001635D01*
+X023137Y001625D01*
+X023098Y001618D01*
+X023060Y001615D01*
+X023021Y001616D01*
+X022982Y001621D01*
+X022944Y001630D01*
+X022908Y001642D01*
+X022872Y001658D01*
+X022838Y001677D01*
+X022807Y001700D01*
+X022778Y001726D01*
+X022751Y001754D01*
+X022728Y001785D01*
+X022707Y001818D01*
+X022691Y001854D01*
+X022677Y001890D01*
+X022668Y001928D01*
+X022662Y001966D01*
+X022660Y002005D01*
+X022650Y001605D02*
+X023450Y002405D01*
+X022236Y001829D02*
+X022238Y001868D01*
+X022244Y001906D01*
+X022253Y001944D01*
+X022267Y001980D01*
+X022283Y002016D01*
+X022304Y002049D01*
+X022327Y002080D01*
+X022354Y002108D01*
+X022383Y002134D01*
+X022414Y002157D01*
+X022448Y002176D01*
+X022484Y002192D01*
+X022520Y002204D01*
+X022558Y002213D01*
+X022597Y002218D01*
+X022636Y002219D01*
+X022674Y002216D01*
+X022713Y002209D01*
+X022750Y002199D01*
+X022786Y002184D01*
+X022821Y002167D01*
+X022854Y002146D01*
+X022884Y002121D01*
+X022912Y002094D01*
+X022937Y002064D01*
+X022959Y002032D01*
+X022977Y001998D01*
+X022992Y001962D01*
+X023004Y001925D01*
+X023012Y001887D01*
+X023016Y001848D01*
+X023016Y001810D01*
+X023012Y001771D01*
+X023004Y001733D01*
+X022992Y001696D01*
+X022977Y001660D01*
+X022959Y001626D01*
+X022937Y001594D01*
+X022912Y001564D01*
+X022884Y001537D01*
+X022854Y001512D01*
+X022821Y001491D01*
+X022786Y001474D01*
+X022750Y001459D01*
+X022713Y001449D01*
+X022674Y001442D01*
+X022636Y001439D01*
+X022597Y001440D01*
+X022558Y001445D01*
+X022520Y001454D01*
+X022484Y001466D01*
+X022448Y001482D01*
+X022414Y001501D01*
+X022383Y001524D01*
+X022354Y001550D01*
+X022327Y001578D01*
+X022304Y001609D01*
+X022283Y001642D01*
+X022267Y001678D01*
+X022253Y001714D01*
+X022244Y001752D01*
+X022238Y001790D01*
+X022236Y001829D01*
+X022226Y001429D02*
+X023026Y002229D01*
+X023050Y001405D02*
+X022650Y001405D01*
+X023050Y001405D02*
+X023450Y001805D01*
+X023450Y001005D01*
+X023050Y001405D01*
+X022236Y000981D02*
+X022238Y001020D01*
+X022244Y001058D01*
+X022253Y001096D01*
+X022267Y001132D01*
+X022283Y001168D01*
+X022304Y001201D01*
+X022327Y001232D01*
+X022354Y001260D01*
+X022383Y001286D01*
+X022414Y001309D01*
+X022448Y001328D01*
+X022484Y001344D01*
+X022520Y001356D01*
+X022558Y001365D01*
+X022597Y001370D01*
+X022636Y001371D01*
+X022674Y001368D01*
+X022713Y001361D01*
+X022750Y001351D01*
+X022786Y001336D01*
+X022821Y001319D01*
+X022854Y001298D01*
+X022884Y001273D01*
+X022912Y001246D01*
+X022937Y001216D01*
+X022959Y001184D01*
+X022977Y001150D01*
+X022992Y001114D01*
+X023004Y001077D01*
+X023012Y001039D01*
+X023016Y001000D01*
+X023016Y000962D01*
+X023012Y000923D01*
+X023004Y000885D01*
+X022992Y000848D01*
+X022977Y000812D01*
+X022959Y000778D01*
+X022937Y000746D01*
+X022912Y000716D01*
+X022884Y000689D01*
+X022854Y000664D01*
+X022821Y000643D01*
+X022786Y000626D01*
+X022750Y000611D01*
+X022713Y000601D01*
+X022674Y000594D01*
+X022636Y000591D01*
+X022597Y000592D01*
+X022558Y000597D01*
+X022520Y000606D01*
+X022484Y000618D01*
+X022448Y000634D01*
+X022414Y000653D01*
+X022383Y000676D01*
+X022354Y000702D01*
+X022327Y000730D01*
+X022304Y000761D01*
+X022283Y000794D01*
+X022267Y000830D01*
+X022253Y000866D01*
+X022244Y000904D01*
+X022238Y000942D01*
+X022236Y000981D01*
+X022226Y000581D02*
+X023026Y001381D01*
+X022060Y001405D02*
+X022062Y001444D01*
+X022068Y001482D01*
+X022077Y001520D01*
+X022091Y001556D01*
+X022107Y001592D01*
+X022128Y001625D01*
+X022151Y001656D01*
+X022178Y001684D01*
+X022207Y001710D01*
+X022238Y001733D01*
+X022272Y001752D01*
+X022308Y001768D01*
+X022344Y001780D01*
+X022382Y001789D01*
+X022421Y001794D01*
+X022460Y001795D01*
+X022498Y001792D01*
+X022537Y001785D01*
+X022574Y001775D01*
+X022610Y001760D01*
+X022645Y001743D01*
+X022678Y001722D01*
+X022708Y001697D01*
+X022736Y001670D01*
+X022761Y001640D01*
+X022783Y001608D01*
+X022801Y001574D01*
+X022816Y001538D01*
+X022828Y001501D01*
+X022836Y001463D01*
+X022840Y001424D01*
+X022840Y001386D01*
+X022836Y001347D01*
+X022828Y001309D01*
+X022816Y001272D01*
+X022801Y001236D01*
+X022783Y001202D01*
+X022761Y001170D01*
+X022736Y001140D01*
+X022708Y001113D01*
+X022678Y001088D01*
+X022645Y001067D01*
+X022610Y001050D01*
+X022574Y001035D01*
+X022537Y001025D01*
+X022498Y001018D01*
+X022460Y001015D01*
+X022421Y001016D01*
+X022382Y001021D01*
+X022344Y001030D01*
+X022308Y001042D01*
+X022272Y001058D01*
+X022238Y001077D01*
+X022207Y001100D01*
+X022178Y001126D01*
+X022151Y001154D01*
+X022128Y001185D01*
+X022107Y001218D01*
+X022091Y001254D01*
+X022077Y001290D01*
+X022068Y001328D01*
+X022062Y001366D01*
+X022060Y001405D01*
+X022050Y001005D02*
+X022850Y001805D01*
+X023084Y000981D02*
+X023086Y001020D01*
+X023092Y001058D01*
+X023101Y001096D01*
+X023115Y001132D01*
+X023131Y001168D01*
+X023152Y001201D01*
+X023175Y001232D01*
+X023202Y001260D01*
+X023231Y001286D01*
+X023262Y001309D01*
+X023296Y001328D01*
+X023332Y001344D01*
+X023368Y001356D01*
+X023406Y001365D01*
+X023445Y001370D01*
+X023484Y001371D01*
+X023522Y001368D01*
+X023561Y001361D01*
+X023598Y001351D01*
+X023634Y001336D01*
+X023669Y001319D01*
+X023702Y001298D01*
+X023732Y001273D01*
+X023760Y001246D01*
+X023785Y001216D01*
+X023807Y001184D01*
+X023825Y001150D01*
+X023840Y001114D01*
+X023852Y001077D01*
+X023860Y001039D01*
+X023864Y001000D01*
+X023864Y000962D01*
+X023860Y000923D01*
+X023852Y000885D01*
+X023840Y000848D01*
+X023825Y000812D01*
+X023807Y000778D01*
+X023785Y000746D01*
+X023760Y000716D01*
+X023732Y000689D01*
+X023702Y000664D01*
+X023669Y000643D01*
+X023634Y000626D01*
+X023598Y000611D01*
+X023561Y000601D01*
+X023522Y000594D01*
+X023484Y000591D01*
+X023445Y000592D01*
+X023406Y000597D01*
+X023368Y000606D01*
+X023332Y000618D01*
+X023296Y000634D01*
+X023262Y000653D01*
+X023231Y000676D01*
+X023202Y000702D01*
+X023175Y000730D01*
+X023152Y000761D01*
+X023131Y000794D01*
+X023115Y000830D01*
+X023101Y000866D01*
+X023092Y000904D01*
+X023086Y000942D01*
+X023084Y000981D01*
+X023074Y000581D02*
+X023874Y001381D01*
+X022660Y000805D02*
+X022662Y000844D01*
+X022668Y000882D01*
+X022677Y000920D01*
+X022691Y000956D01*
+X022707Y000992D01*
+X022728Y001025D01*
+X022751Y001056D01*
+X022778Y001084D01*
+X022807Y001110D01*
+X022838Y001133D01*
+X022872Y001152D01*
+X022908Y001168D01*
+X022944Y001180D01*
+X022982Y001189D01*
+X023021Y001194D01*
+X023060Y001195D01*
+X023098Y001192D01*
+X023137Y001185D01*
+X023174Y001175D01*
+X023210Y001160D01*
+X023245Y001143D01*
+X023278Y001122D01*
+X023308Y001097D01*
+X023336Y001070D01*
+X023361Y001040D01*
+X023383Y001008D01*
+X023401Y000974D01*
+X023416Y000938D01*
+X023428Y000901D01*
+X023436Y000863D01*
+X023440Y000824D01*
+X023440Y000786D01*
+X023436Y000747D01*
+X023428Y000709D01*
+X023416Y000672D01*
+X023401Y000636D01*
+X023383Y000602D01*
+X023361Y000570D01*
+X023336Y000540D01*
+X023308Y000513D01*
+X023278Y000488D01*
+X023245Y000467D01*
+X023210Y000450D01*
+X023174Y000435D01*
+X023137Y000425D01*
+X023098Y000418D01*
+X023060Y000415D01*
+X023021Y000416D01*
+X022982Y000421D01*
+X022944Y000430D01*
+X022908Y000442D01*
+X022872Y000458D01*
+X022838Y000477D01*
+X022807Y000500D01*
+X022778Y000526D01*
+X022751Y000554D01*
+X022728Y000585D01*
+X022707Y000618D01*
+X022691Y000654D01*
+X022677Y000690D01*
+X022668Y000728D01*
+X022662Y000766D01*
+X022660Y000805D01*
+X022650Y000405D02*
+X023450Y001205D01*
+X020160Y002405D02*
+X020162Y002444D01*
+X020168Y002482D01*
+X020177Y002520D01*
+X020191Y002556D01*
+X020207Y002592D01*
+X020228Y002625D01*
+X020251Y002656D01*
+X020278Y002684D01*
+X020307Y002710D01*
+X020338Y002733D01*
+X020372Y002752D01*
+X020408Y002768D01*
+X020444Y002780D01*
+X020482Y002789D01*
+X020521Y002794D01*
+X020560Y002795D01*
+X020598Y002792D01*
+X020637Y002785D01*
+X020674Y002775D01*
+X020710Y002760D01*
+X020745Y002743D01*
+X020778Y002722D01*
+X020808Y002697D01*
+X020836Y002670D01*
+X020861Y002640D01*
+X020883Y002608D01*
+X020901Y002574D01*
+X020916Y002538D01*
+X020928Y002501D01*
+X020936Y002463D01*
+X020940Y002424D01*
+X020940Y002386D01*
+X020936Y002347D01*
+X020928Y002309D01*
+X020916Y002272D01*
+X020901Y002236D01*
+X020883Y002202D01*
+X020861Y002170D01*
+X020836Y002140D01*
+X020808Y002113D01*
+X020778Y002088D01*
+X020745Y002067D01*
+X020710Y002050D01*
+X020674Y002035D01*
+X020637Y002025D01*
+X020598Y002018D01*
+X020560Y002015D01*
+X020521Y002016D01*
+X020482Y002021D01*
+X020444Y002030D01*
+X020408Y002042D01*
+X020372Y002058D01*
+X020338Y002077D01*
+X020307Y002100D01*
+X020278Y002126D01*
+X020251Y002154D01*
+X020228Y002185D01*
+X020207Y002218D01*
+X020191Y002254D01*
+X020177Y002290D01*
+X020168Y002328D01*
+X020162Y002366D01*
+X020160Y002405D01*
+X020150Y002005D02*
+X020950Y002805D01*
+X019010Y002255D02*
+X019012Y002294D01*
+X019018Y002332D01*
+X019027Y002370D01*
+X019041Y002406D01*
+X019057Y002442D01*
+X019078Y002475D01*
+X019101Y002506D01*
+X019128Y002534D01*
+X019157Y002560D01*
+X019188Y002583D01*
+X019222Y002602D01*
+X019258Y002618D01*
+X019294Y002630D01*
+X019332Y002639D01*
+X019371Y002644D01*
+X019410Y002645D01*
+X019448Y002642D01*
+X019487Y002635D01*
+X019524Y002625D01*
+X019560Y002610D01*
+X019595Y002593D01*
+X019628Y002572D01*
+X019658Y002547D01*
+X019686Y002520D01*
+X019711Y002490D01*
+X019733Y002458D01*
+X019751Y002424D01*
+X019766Y002388D01*
+X019778Y002351D01*
+X019786Y002313D01*
+X019790Y002274D01*
+X019790Y002236D01*
+X019786Y002197D01*
+X019778Y002159D01*
+X019766Y002122D01*
+X019751Y002086D01*
+X019733Y002052D01*
+X019711Y002020D01*
+X019686Y001990D01*
+X019658Y001963D01*
+X019628Y001938D01*
+X019595Y001917D01*
+X019560Y001900D01*
+X019524Y001885D01*
+X019487Y001875D01*
+X019448Y001868D01*
+X019410Y001865D01*
+X019371Y001866D01*
+X019332Y001871D01*
+X019294Y001880D01*
+X019258Y001892D01*
+X019222Y001908D01*
+X019188Y001927D01*
+X019157Y001950D01*
+X019128Y001976D01*
+X019101Y002004D01*
+X019078Y002035D01*
+X019057Y002068D01*
+X019041Y002104D01*
+X019027Y002140D01*
+X019018Y002178D01*
+X019012Y002216D01*
+X019010Y002255D01*
+X019000Y001855D02*
+X019800Y002655D01*
+X018310Y002205D02*
+X018312Y002244D01*
+X018318Y002282D01*
+X018327Y002320D01*
+X018341Y002356D01*
+X018357Y002392D01*
+X018378Y002425D01*
+X018401Y002456D01*
+X018428Y002484D01*
+X018457Y002510D01*
+X018488Y002533D01*
+X018522Y002552D01*
+X018558Y002568D01*
+X018594Y002580D01*
+X018632Y002589D01*
+X018671Y002594D01*
+X018710Y002595D01*
+X018748Y002592D01*
+X018787Y002585D01*
+X018824Y002575D01*
+X018860Y002560D01*
+X018895Y002543D01*
+X018928Y002522D01*
+X018958Y002497D01*
+X018986Y002470D01*
+X019011Y002440D01*
+X019033Y002408D01*
+X019051Y002374D01*
+X019066Y002338D01*
+X019078Y002301D01*
+X019086Y002263D01*
+X019090Y002224D01*
+X019090Y002186D01*
+X019086Y002147D01*
+X019078Y002109D01*
+X019066Y002072D01*
+X019051Y002036D01*
+X019033Y002002D01*
+X019011Y001970D01*
+X018986Y001940D01*
+X018958Y001913D01*
+X018928Y001888D01*
+X018895Y001867D01*
+X018860Y001850D01*
+X018824Y001835D01*
+X018787Y001825D01*
+X018748Y001818D01*
+X018710Y001815D01*
+X018671Y001816D01*
+X018632Y001821D01*
+X018594Y001830D01*
+X018558Y001842D01*
+X018522Y001858D01*
+X018488Y001877D01*
+X018457Y001900D01*
+X018428Y001926D01*
+X018401Y001954D01*
+X018378Y001985D01*
+X018357Y002018D01*
+X018341Y002054D01*
+X018327Y002090D01*
+X018318Y002128D01*
+X018312Y002166D01*
+X018310Y002205D01*
+X018300Y001805D02*
+X019100Y002605D01*
+X017910Y003655D02*
+X017912Y003694D01*
+X017918Y003732D01*
+X017927Y003770D01*
+X017941Y003806D01*
+X017957Y003842D01*
+X017978Y003875D01*
+X018001Y003906D01*
+X018028Y003934D01*
+X018057Y003960D01*
+X018088Y003983D01*
+X018122Y004002D01*
+X018158Y004018D01*
+X018194Y004030D01*
+X018232Y004039D01*
+X018271Y004044D01*
+X018310Y004045D01*
+X018348Y004042D01*
+X018387Y004035D01*
+X018424Y004025D01*
+X018460Y004010D01*
+X018495Y003993D01*
+X018528Y003972D01*
+X018558Y003947D01*
+X018586Y003920D01*
+X018611Y003890D01*
+X018633Y003858D01*
+X018651Y003824D01*
+X018666Y003788D01*
+X018678Y003751D01*
+X018686Y003713D01*
+X018690Y003674D01*
+X018690Y003636D01*
+X018686Y003597D01*
+X018678Y003559D01*
+X018666Y003522D01*
+X018651Y003486D01*
+X018633Y003452D01*
+X018611Y003420D01*
+X018586Y003390D01*
+X018558Y003363D01*
+X018528Y003338D01*
+X018495Y003317D01*
+X018460Y003300D01*
+X018424Y003285D01*
+X018387Y003275D01*
+X018348Y003268D01*
+X018310Y003265D01*
+X018271Y003266D01*
+X018232Y003271D01*
+X018194Y003280D01*
+X018158Y003292D01*
+X018122Y003308D01*
+X018088Y003327D01*
+X018057Y003350D01*
+X018028Y003376D01*
+X018001Y003404D01*
+X017978Y003435D01*
+X017957Y003468D01*
+X017941Y003504D01*
+X017927Y003540D01*
+X017918Y003578D01*
+X017912Y003616D01*
+X017910Y003655D01*
+X017900Y003255D02*
+X018700Y004055D01*
+X018860Y004355D02*
+X018862Y004394D01*
+X018868Y004432D01*
+X018877Y004470D01*
+X018891Y004506D01*
+X018907Y004542D01*
+X018928Y004575D01*
+X018951Y004606D01*
+X018978Y004634D01*
+X019007Y004660D01*
+X019038Y004683D01*
+X019072Y004702D01*
+X019108Y004718D01*
+X019144Y004730D01*
+X019182Y004739D01*
+X019221Y004744D01*
+X019260Y004745D01*
+X019298Y004742D01*
+X019337Y004735D01*
+X019374Y004725D01*
+X019410Y004710D01*
+X019445Y004693D01*
+X019478Y004672D01*
+X019508Y004647D01*
+X019536Y004620D01*
+X019561Y004590D01*
+X019583Y004558D01*
+X019601Y004524D01*
+X019616Y004488D01*
+X019628Y004451D01*
+X019636Y004413D01*
+X019640Y004374D01*
+X019640Y004336D01*
+X019636Y004297D01*
+X019628Y004259D01*
+X019616Y004222D01*
+X019601Y004186D01*
+X019583Y004152D01*
+X019561Y004120D01*
+X019536Y004090D01*
+X019508Y004063D01*
+X019478Y004038D01*
+X019445Y004017D01*
+X019410Y004000D01*
+X019374Y003985D01*
+X019337Y003975D01*
+X019298Y003968D01*
+X019260Y003965D01*
+X019221Y003966D01*
+X019182Y003971D01*
+X019144Y003980D01*
+X019108Y003992D01*
+X019072Y004008D01*
+X019038Y004027D01*
+X019007Y004050D01*
+X018978Y004076D01*
+X018951Y004104D01*
+X018928Y004135D01*
+X018907Y004168D01*
+X018891Y004204D01*
+X018877Y004240D01*
+X018868Y004278D01*
+X018862Y004316D01*
+X018860Y004355D01*
+X018850Y003955D02*
+X019650Y004755D01*
+X017360Y004255D02*
+X017362Y004294D01*
+X017368Y004332D01*
+X017377Y004370D01*
+X017391Y004406D01*
+X017407Y004442D01*
+X017428Y004475D01*
+X017451Y004506D01*
+X017478Y004534D01*
+X017507Y004560D01*
+X017538Y004583D01*
+X017572Y004602D01*
+X017608Y004618D01*
+X017644Y004630D01*
+X017682Y004639D01*
+X017721Y004644D01*
+X017760Y004645D01*
+X017798Y004642D01*
+X017837Y004635D01*
+X017874Y004625D01*
+X017910Y004610D01*
+X017945Y004593D01*
+X017978Y004572D01*
+X018008Y004547D01*
+X018036Y004520D01*
+X018061Y004490D01*
+X018083Y004458D01*
+X018101Y004424D01*
+X018116Y004388D01*
+X018128Y004351D01*
+X018136Y004313D01*
+X018140Y004274D01*
+X018140Y004236D01*
+X018136Y004197D01*
+X018128Y004159D01*
+X018116Y004122D01*
+X018101Y004086D01*
+X018083Y004052D01*
+X018061Y004020D01*
+X018036Y003990D01*
+X018008Y003963D01*
+X017978Y003938D01*
+X017945Y003917D01*
+X017910Y003900D01*
+X017874Y003885D01*
+X017837Y003875D01*
+X017798Y003868D01*
+X017760Y003865D01*
+X017721Y003866D01*
+X017682Y003871D01*
+X017644Y003880D01*
+X017608Y003892D01*
+X017572Y003908D01*
+X017538Y003927D01*
+X017507Y003950D01*
+X017478Y003976D01*
+X017451Y004004D01*
+X017428Y004035D01*
+X017407Y004068D01*
+X017391Y004104D01*
+X017377Y004140D01*
+X017368Y004178D01*
+X017362Y004216D01*
+X017360Y004255D01*
+X017350Y003855D02*
+X018150Y004655D01*
+X016660Y004955D02*
+X016662Y004994D01*
+X016668Y005032D01*
+X016677Y005070D01*
+X016691Y005106D01*
+X016707Y005142D01*
+X016728Y005175D01*
+X016751Y005206D01*
+X016778Y005234D01*
+X016807Y005260D01*
+X016838Y005283D01*
+X016872Y005302D01*
+X016908Y005318D01*
+X016944Y005330D01*
+X016982Y005339D01*
+X017021Y005344D01*
+X017060Y005345D01*
+X017098Y005342D01*
+X017137Y005335D01*
+X017174Y005325D01*
+X017210Y005310D01*
+X017245Y005293D01*
+X017278Y005272D01*
+X017308Y005247D01*
+X017336Y005220D01*
+X017361Y005190D01*
+X017383Y005158D01*
+X017401Y005124D01*
+X017416Y005088D01*
+X017428Y005051D01*
+X017436Y005013D01*
+X017440Y004974D01*
+X017440Y004936D01*
+X017436Y004897D01*
+X017428Y004859D01*
+X017416Y004822D01*
+X017401Y004786D01*
+X017383Y004752D01*
+X017361Y004720D01*
+X017336Y004690D01*
+X017308Y004663D01*
+X017278Y004638D01*
+X017245Y004617D01*
+X017210Y004600D01*
+X017174Y004585D01*
+X017137Y004575D01*
+X017098Y004568D01*
+X017060Y004565D01*
+X017021Y004566D01*
+X016982Y004571D01*
+X016944Y004580D01*
+X016908Y004592D01*
+X016872Y004608D01*
+X016838Y004627D01*
+X016807Y004650D01*
+X016778Y004676D01*
+X016751Y004704D01*
+X016728Y004735D01*
+X016707Y004768D01*
+X016691Y004804D01*
+X016677Y004840D01*
+X016668Y004878D01*
+X016662Y004916D01*
+X016660Y004955D01*
+X016650Y004555D02*
+X017450Y005355D01*
+X015710Y004755D02*
+X015712Y004794D01*
+X015718Y004832D01*
+X015727Y004870D01*
+X015741Y004906D01*
+X015757Y004942D01*
+X015778Y004975D01*
+X015801Y005006D01*
+X015828Y005034D01*
+X015857Y005060D01*
+X015888Y005083D01*
+X015922Y005102D01*
+X015958Y005118D01*
+X015994Y005130D01*
+X016032Y005139D01*
+X016071Y005144D01*
+X016110Y005145D01*
+X016148Y005142D01*
+X016187Y005135D01*
+X016224Y005125D01*
+X016260Y005110D01*
+X016295Y005093D01*
+X016328Y005072D01*
+X016358Y005047D01*
+X016386Y005020D01*
+X016411Y004990D01*
+X016433Y004958D01*
+X016451Y004924D01*
+X016466Y004888D01*
+X016478Y004851D01*
+X016486Y004813D01*
+X016490Y004774D01*
+X016490Y004736D01*
+X016486Y004697D01*
+X016478Y004659D01*
+X016466Y004622D01*
+X016451Y004586D01*
+X016433Y004552D01*
+X016411Y004520D01*
+X016386Y004490D01*
+X016358Y004463D01*
+X016328Y004438D01*
+X016295Y004417D01*
+X016260Y004400D01*
+X016224Y004385D01*
+X016187Y004375D01*
+X016148Y004368D01*
+X016110Y004365D01*
+X016071Y004366D01*
+X016032Y004371D01*
+X015994Y004380D01*
+X015958Y004392D01*
+X015922Y004408D01*
+X015888Y004427D01*
+X015857Y004450D01*
+X015828Y004476D01*
+X015801Y004504D01*
+X015778Y004535D01*
+X015757Y004568D01*
+X015741Y004604D01*
+X015727Y004640D01*
+X015718Y004678D01*
+X015712Y004716D01*
+X015710Y004755D01*
+X015700Y004355D02*
+X016500Y005155D01*
+X016010Y004055D02*
+X016012Y004094D01*
+X016018Y004132D01*
+X016027Y004170D01*
+X016041Y004206D01*
+X016057Y004242D01*
+X016078Y004275D01*
+X016101Y004306D01*
+X016128Y004334D01*
+X016157Y004360D01*
+X016188Y004383D01*
+X016222Y004402D01*
+X016258Y004418D01*
+X016294Y004430D01*
+X016332Y004439D01*
+X016371Y004444D01*
+X016410Y004445D01*
+X016448Y004442D01*
+X016487Y004435D01*
+X016524Y004425D01*
+X016560Y004410D01*
+X016595Y004393D01*
+X016628Y004372D01*
+X016658Y004347D01*
+X016686Y004320D01*
+X016711Y004290D01*
+X016733Y004258D01*
+X016751Y004224D01*
+X016766Y004188D01*
+X016778Y004151D01*
+X016786Y004113D01*
+X016790Y004074D01*
+X016790Y004036D01*
+X016786Y003997D01*
+X016778Y003959D01*
+X016766Y003922D01*
+X016751Y003886D01*
+X016733Y003852D01*
+X016711Y003820D01*
+X016686Y003790D01*
+X016658Y003763D01*
+X016628Y003738D01*
+X016595Y003717D01*
+X016560Y003700D01*
+X016524Y003685D01*
+X016487Y003675D01*
+X016448Y003668D01*
+X016410Y003665D01*
+X016371Y003666D01*
+X016332Y003671D01*
+X016294Y003680D01*
+X016258Y003692D01*
+X016222Y003708D01*
+X016188Y003727D01*
+X016157Y003750D01*
+X016128Y003776D01*
+X016101Y003804D01*
+X016078Y003835D01*
+X016057Y003868D01*
+X016041Y003904D01*
+X016027Y003940D01*
+X016018Y003978D01*
+X016012Y004016D01*
+X016010Y004055D01*
+X016000Y003655D02*
+X016800Y004455D01*
+X015560Y003255D02*
+X015562Y003294D01*
+X015568Y003332D01*
+X015577Y003370D01*
+X015591Y003406D01*
+X015607Y003442D01*
+X015628Y003475D01*
+X015651Y003506D01*
+X015678Y003534D01*
+X015707Y003560D01*
+X015738Y003583D01*
+X015772Y003602D01*
+X015808Y003618D01*
+X015844Y003630D01*
+X015882Y003639D01*
+X015921Y003644D01*
+X015960Y003645D01*
+X015998Y003642D01*
+X016037Y003635D01*
+X016074Y003625D01*
+X016110Y003610D01*
+X016145Y003593D01*
+X016178Y003572D01*
+X016208Y003547D01*
+X016236Y003520D01*
+X016261Y003490D01*
+X016283Y003458D01*
+X016301Y003424D01*
+X016316Y003388D01*
+X016328Y003351D01*
+X016336Y003313D01*
+X016340Y003274D01*
+X016340Y003236D01*
+X016336Y003197D01*
+X016328Y003159D01*
+X016316Y003122D01*
+X016301Y003086D01*
+X016283Y003052D01*
+X016261Y003020D01*
+X016236Y002990D01*
+X016208Y002963D01*
+X016178Y002938D01*
+X016145Y002917D01*
+X016110Y002900D01*
+X016074Y002885D01*
+X016037Y002875D01*
+X015998Y002868D01*
+X015960Y002865D01*
+X015921Y002866D01*
+X015882Y002871D01*
+X015844Y002880D01*
+X015808Y002892D01*
+X015772Y002908D01*
+X015738Y002927D01*
+X015707Y002950D01*
+X015678Y002976D01*
+X015651Y003004D01*
+X015628Y003035D01*
+X015607Y003068D01*
+X015591Y003104D01*
+X015577Y003140D01*
+X015568Y003178D01*
+X015562Y003216D01*
+X015560Y003255D01*
+X015550Y002855D02*
+X016350Y003655D01*
+X016760Y002455D02*
+X016762Y002494D01*
+X016768Y002532D01*
+X016777Y002570D01*
+X016791Y002606D01*
+X016807Y002642D01*
+X016828Y002675D01*
+X016851Y002706D01*
+X016878Y002734D01*
+X016907Y002760D01*
+X016938Y002783D01*
+X016972Y002802D01*
+X017008Y002818D01*
+X017044Y002830D01*
+X017082Y002839D01*
+X017121Y002844D01*
+X017160Y002845D01*
+X017198Y002842D01*
+X017237Y002835D01*
+X017274Y002825D01*
+X017310Y002810D01*
+X017345Y002793D01*
+X017378Y002772D01*
+X017408Y002747D01*
+X017436Y002720D01*
+X017461Y002690D01*
+X017483Y002658D01*
+X017501Y002624D01*
+X017516Y002588D01*
+X017528Y002551D01*
+X017536Y002513D01*
+X017540Y002474D01*
+X017540Y002436D01*
+X017536Y002397D01*
+X017528Y002359D01*
+X017516Y002322D01*
+X017501Y002286D01*
+X017483Y002252D01*
+X017461Y002220D01*
+X017436Y002190D01*
+X017408Y002163D01*
+X017378Y002138D01*
+X017345Y002117D01*
+X017310Y002100D01*
+X017274Y002085D01*
+X017237Y002075D01*
+X017198Y002068D01*
+X017160Y002065D01*
+X017121Y002066D01*
+X017082Y002071D01*
+X017044Y002080D01*
+X017008Y002092D01*
+X016972Y002108D01*
+X016938Y002127D01*
+X016907Y002150D01*
+X016878Y002176D01*
+X016851Y002204D01*
+X016828Y002235D01*
+X016807Y002268D01*
+X016791Y002304D01*
+X016777Y002340D01*
+X016768Y002378D01*
+X016762Y002416D01*
+X016760Y002455D01*
+X016750Y002055D02*
+X017550Y002855D01*
+X015210Y001805D02*
+X015212Y001844D01*
+X015218Y001882D01*
+X015227Y001920D01*
+X015241Y001956D01*
+X015257Y001992D01*
+X015278Y002025D01*
+X015301Y002056D01*
+X015328Y002084D01*
+X015357Y002110D01*
+X015388Y002133D01*
+X015422Y002152D01*
+X015458Y002168D01*
+X015494Y002180D01*
+X015532Y002189D01*
+X015571Y002194D01*
+X015610Y002195D01*
+X015648Y002192D01*
+X015687Y002185D01*
+X015724Y002175D01*
+X015760Y002160D01*
+X015795Y002143D01*
+X015828Y002122D01*
+X015858Y002097D01*
+X015886Y002070D01*
+X015911Y002040D01*
+X015933Y002008D01*
+X015951Y001974D01*
+X015966Y001938D01*
+X015978Y001901D01*
+X015986Y001863D01*
+X015990Y001824D01*
+X015990Y001786D01*
+X015986Y001747D01*
+X015978Y001709D01*
+X015966Y001672D01*
+X015951Y001636D01*
+X015933Y001602D01*
+X015911Y001570D01*
+X015886Y001540D01*
+X015858Y001513D01*
+X015828Y001488D01*
+X015795Y001467D01*
+X015760Y001450D01*
+X015724Y001435D01*
+X015687Y001425D01*
+X015648Y001418D01*
+X015610Y001415D01*
+X015571Y001416D01*
+X015532Y001421D01*
+X015494Y001430D01*
+X015458Y001442D01*
+X015422Y001458D01*
+X015388Y001477D01*
+X015357Y001500D01*
+X015328Y001526D01*
+X015301Y001554D01*
+X015278Y001585D01*
+X015257Y001618D01*
+X015241Y001654D01*
+X015227Y001690D01*
+X015218Y001728D01*
+X015212Y001766D01*
+X015210Y001805D01*
+X015200Y001405D02*
+X016000Y002205D01*
+X013710Y002905D02*
+X013712Y002944D01*
+X013718Y002982D01*
+X013727Y003020D01*
+X013741Y003056D01*
+X013757Y003092D01*
+X013778Y003125D01*
+X013801Y003156D01*
+X013828Y003184D01*
+X013857Y003210D01*
+X013888Y003233D01*
+X013922Y003252D01*
+X013958Y003268D01*
+X013994Y003280D01*
+X014032Y003289D01*
+X014071Y003294D01*
+X014110Y003295D01*
+X014148Y003292D01*
+X014187Y003285D01*
+X014224Y003275D01*
+X014260Y003260D01*
+X014295Y003243D01*
+X014328Y003222D01*
+X014358Y003197D01*
+X014386Y003170D01*
+X014411Y003140D01*
+X014433Y003108D01*
+X014451Y003074D01*
+X014466Y003038D01*
+X014478Y003001D01*
+X014486Y002963D01*
+X014490Y002924D01*
+X014490Y002886D01*
+X014486Y002847D01*
+X014478Y002809D01*
+X014466Y002772D01*
+X014451Y002736D01*
+X014433Y002702D01*
+X014411Y002670D01*
+X014386Y002640D01*
+X014358Y002613D01*
+X014328Y002588D01*
+X014295Y002567D01*
+X014260Y002550D01*
+X014224Y002535D01*
+X014187Y002525D01*
+X014148Y002518D01*
+X014110Y002515D01*
+X014071Y002516D01*
+X014032Y002521D01*
+X013994Y002530D01*
+X013958Y002542D01*
+X013922Y002558D01*
+X013888Y002577D01*
+X013857Y002600D01*
+X013828Y002626D01*
+X013801Y002654D01*
+X013778Y002685D01*
+X013757Y002718D01*
+X013741Y002754D01*
+X013727Y002790D01*
+X013718Y002828D01*
+X013712Y002866D01*
+X013710Y002905D01*
+X013700Y002505D02*
+X014500Y003305D01*
+X013160Y003055D02*
+X013162Y003094D01*
+X013168Y003132D01*
+X013177Y003170D01*
+X013191Y003206D01*
+X013207Y003242D01*
+X013228Y003275D01*
+X013251Y003306D01*
+X013278Y003334D01*
+X013307Y003360D01*
+X013338Y003383D01*
+X013372Y003402D01*
+X013408Y003418D01*
+X013444Y003430D01*
+X013482Y003439D01*
+X013521Y003444D01*
+X013560Y003445D01*
+X013598Y003442D01*
+X013637Y003435D01*
+X013674Y003425D01*
+X013710Y003410D01*
+X013745Y003393D01*
+X013778Y003372D01*
+X013808Y003347D01*
+X013836Y003320D01*
+X013861Y003290D01*
+X013883Y003258D01*
+X013901Y003224D01*
+X013916Y003188D01*
+X013928Y003151D01*
+X013936Y003113D01*
+X013940Y003074D01*
+X013940Y003036D01*
+X013936Y002997D01*
+X013928Y002959D01*
+X013916Y002922D01*
+X013901Y002886D01*
+X013883Y002852D01*
+X013861Y002820D01*
+X013836Y002790D01*
+X013808Y002763D01*
+X013778Y002738D01*
+X013745Y002717D01*
+X013710Y002700D01*
+X013674Y002685D01*
+X013637Y002675D01*
+X013598Y002668D01*
+X013560Y002665D01*
+X013521Y002666D01*
+X013482Y002671D01*
+X013444Y002680D01*
+X013408Y002692D01*
+X013372Y002708D01*
+X013338Y002727D01*
+X013307Y002750D01*
+X013278Y002776D01*
+X013251Y002804D01*
+X013228Y002835D01*
+X013207Y002868D01*
+X013191Y002904D01*
+X013177Y002940D01*
+X013168Y002978D01*
+X013162Y003016D01*
+X013160Y003055D01*
+X013150Y002655D02*
+X013950Y003455D01*
+X012660Y003055D02*
+X012662Y003094D01*
+X012668Y003132D01*
+X012677Y003170D01*
+X012691Y003206D01*
+X012707Y003242D01*
+X012728Y003275D01*
+X012751Y003306D01*
+X012778Y003334D01*
+X012807Y003360D01*
+X012838Y003383D01*
+X012872Y003402D01*
+X012908Y003418D01*
+X012944Y003430D01*
+X012982Y003439D01*
+X013021Y003444D01*
+X013060Y003445D01*
+X013098Y003442D01*
+X013137Y003435D01*
+X013174Y003425D01*
+X013210Y003410D01*
+X013245Y003393D01*
+X013278Y003372D01*
+X013308Y003347D01*
+X013336Y003320D01*
+X013361Y003290D01*
+X013383Y003258D01*
+X013401Y003224D01*
+X013416Y003188D01*
+X013428Y003151D01*
+X013436Y003113D01*
+X013440Y003074D01*
+X013440Y003036D01*
+X013436Y002997D01*
+X013428Y002959D01*
+X013416Y002922D01*
+X013401Y002886D01*
+X013383Y002852D01*
+X013361Y002820D01*
+X013336Y002790D01*
+X013308Y002763D01*
+X013278Y002738D01*
+X013245Y002717D01*
+X013210Y002700D01*
+X013174Y002685D01*
+X013137Y002675D01*
+X013098Y002668D01*
+X013060Y002665D01*
+X013021Y002666D01*
+X012982Y002671D01*
+X012944Y002680D01*
+X012908Y002692D01*
+X012872Y002708D01*
+X012838Y002727D01*
+X012807Y002750D01*
+X012778Y002776D01*
+X012751Y002804D01*
+X012728Y002835D01*
+X012707Y002868D01*
+X012691Y002904D01*
+X012677Y002940D01*
+X012668Y002978D01*
+X012662Y003016D01*
+X012660Y003055D01*
+X012650Y002655D02*
+X013450Y003455D01*
+X012210Y003305D02*
+X012212Y003344D01*
+X012218Y003382D01*
+X012227Y003420D01*
+X012241Y003456D01*
+X012257Y003492D01*
+X012278Y003525D01*
+X012301Y003556D01*
+X012328Y003584D01*
+X012357Y003610D01*
+X012388Y003633D01*
+X012422Y003652D01*
+X012458Y003668D01*
+X012494Y003680D01*
+X012532Y003689D01*
+X012571Y003694D01*
+X012610Y003695D01*
+X012648Y003692D01*
+X012687Y003685D01*
+X012724Y003675D01*
+X012760Y003660D01*
+X012795Y003643D01*
+X012828Y003622D01*
+X012858Y003597D01*
+X012886Y003570D01*
+X012911Y003540D01*
+X012933Y003508D01*
+X012951Y003474D01*
+X012966Y003438D01*
+X012978Y003401D01*
+X012986Y003363D01*
+X012990Y003324D01*
+X012990Y003286D01*
+X012986Y003247D01*
+X012978Y003209D01*
+X012966Y003172D01*
+X012951Y003136D01*
+X012933Y003102D01*
+X012911Y003070D01*
+X012886Y003040D01*
+X012858Y003013D01*
+X012828Y002988D01*
+X012795Y002967D01*
+X012760Y002950D01*
+X012724Y002935D01*
+X012687Y002925D01*
+X012648Y002918D01*
+X012610Y002915D01*
+X012571Y002916D01*
+X012532Y002921D01*
+X012494Y002930D01*
+X012458Y002942D01*
+X012422Y002958D01*
+X012388Y002977D01*
+X012357Y003000D01*
+X012328Y003026D01*
+X012301Y003054D01*
+X012278Y003085D01*
+X012257Y003118D01*
+X012241Y003154D01*
+X012227Y003190D01*
+X012218Y003228D01*
+X012212Y003266D01*
+X012210Y003305D01*
+X012200Y002905D02*
+X013000Y003705D01*
+X012960Y004305D02*
+X012962Y004344D01*
+X012968Y004382D01*
+X012977Y004420D01*
+X012991Y004456D01*
+X013007Y004492D01*
+X013028Y004525D01*
+X013051Y004556D01*
+X013078Y004584D01*
+X013107Y004610D01*
+X013138Y004633D01*
+X013172Y004652D01*
+X013208Y004668D01*
+X013244Y004680D01*
+X013282Y004689D01*
+X013321Y004694D01*
+X013360Y004695D01*
+X013398Y004692D01*
+X013437Y004685D01*
+X013474Y004675D01*
+X013510Y004660D01*
+X013545Y004643D01*
+X013578Y004622D01*
+X013608Y004597D01*
+X013636Y004570D01*
+X013661Y004540D01*
+X013683Y004508D01*
+X013701Y004474D01*
+X013716Y004438D01*
+X013728Y004401D01*
+X013736Y004363D01*
+X013740Y004324D01*
+X013740Y004286D01*
+X013736Y004247D01*
+X013728Y004209D01*
+X013716Y004172D01*
+X013701Y004136D01*
+X013683Y004102D01*
+X013661Y004070D01*
+X013636Y004040D01*
+X013608Y004013D01*
+X013578Y003988D01*
+X013545Y003967D01*
+X013510Y003950D01*
+X013474Y003935D01*
+X013437Y003925D01*
+X013398Y003918D01*
+X013360Y003915D01*
+X013321Y003916D01*
+X013282Y003921D01*
+X013244Y003930D01*
+X013208Y003942D01*
+X013172Y003958D01*
+X013138Y003977D01*
+X013107Y004000D01*
+X013078Y004026D01*
+X013051Y004054D01*
+X013028Y004085D01*
+X013007Y004118D01*
+X012991Y004154D01*
+X012977Y004190D01*
+X012968Y004228D01*
+X012962Y004266D01*
+X012960Y004305D01*
+X012950Y003905D02*
+X013750Y004705D01*
+X013460Y005505D02*
+X013462Y005544D01*
+X013468Y005582D01*
+X013477Y005620D01*
+X013491Y005656D01*
+X013507Y005692D01*
+X013528Y005725D01*
+X013551Y005756D01*
+X013578Y005784D01*
+X013607Y005810D01*
+X013638Y005833D01*
+X013672Y005852D01*
+X013708Y005868D01*
+X013744Y005880D01*
+X013782Y005889D01*
+X013821Y005894D01*
+X013860Y005895D01*
+X013898Y005892D01*
+X013937Y005885D01*
+X013974Y005875D01*
+X014010Y005860D01*
+X014045Y005843D01*
+X014078Y005822D01*
+X014108Y005797D01*
+X014136Y005770D01*
+X014161Y005740D01*
+X014183Y005708D01*
+X014201Y005674D01*
+X014216Y005638D01*
+X014228Y005601D01*
+X014236Y005563D01*
+X014240Y005524D01*
+X014240Y005486D01*
+X014236Y005447D01*
+X014228Y005409D01*
+X014216Y005372D01*
+X014201Y005336D01*
+X014183Y005302D01*
+X014161Y005270D01*
+X014136Y005240D01*
+X014108Y005213D01*
+X014078Y005188D01*
+X014045Y005167D01*
+X014010Y005150D01*
+X013974Y005135D01*
+X013937Y005125D01*
+X013898Y005118D01*
+X013860Y005115D01*
+X013821Y005116D01*
+X013782Y005121D01*
+X013744Y005130D01*
+X013708Y005142D01*
+X013672Y005158D01*
+X013638Y005177D01*
+X013607Y005200D01*
+X013578Y005226D01*
+X013551Y005254D01*
+X013528Y005285D01*
+X013507Y005318D01*
+X013491Y005354D01*
+X013477Y005390D01*
+X013468Y005428D01*
+X013462Y005466D01*
+X013460Y005505D01*
+X013450Y005105D02*
+X014250Y005905D01*
+X013160Y006255D02*
+X013162Y006294D01*
+X013168Y006332D01*
+X013177Y006370D01*
+X013191Y006406D01*
+X013207Y006442D01*
+X013228Y006475D01*
+X013251Y006506D01*
+X013278Y006534D01*
+X013307Y006560D01*
+X013338Y006583D01*
+X013372Y006602D01*
+X013408Y006618D01*
+X013444Y006630D01*
+X013482Y006639D01*
+X013521Y006644D01*
+X013560Y006645D01*
+X013598Y006642D01*
+X013637Y006635D01*
+X013674Y006625D01*
+X013710Y006610D01*
+X013745Y006593D01*
+X013778Y006572D01*
+X013808Y006547D01*
+X013836Y006520D01*
+X013861Y006490D01*
+X013883Y006458D01*
+X013901Y006424D01*
+X013916Y006388D01*
+X013928Y006351D01*
+X013936Y006313D01*
+X013940Y006274D01*
+X013940Y006236D01*
+X013936Y006197D01*
+X013928Y006159D01*
+X013916Y006122D01*
+X013901Y006086D01*
+X013883Y006052D01*
+X013861Y006020D01*
+X013836Y005990D01*
+X013808Y005963D01*
+X013778Y005938D01*
+X013745Y005917D01*
+X013710Y005900D01*
+X013674Y005885D01*
+X013637Y005875D01*
+X013598Y005868D01*
+X013560Y005865D01*
+X013521Y005866D01*
+X013482Y005871D01*
+X013444Y005880D01*
+X013408Y005892D01*
+X013372Y005908D01*
+X013338Y005927D01*
+X013307Y005950D01*
+X013278Y005976D01*
+X013251Y006004D01*
+X013228Y006035D01*
+X013207Y006068D01*
+X013191Y006104D01*
+X013177Y006140D01*
+X013168Y006178D01*
+X013162Y006216D01*
+X013160Y006255D01*
+X013150Y005855D02*
+X013950Y006655D01*
+X011960Y007905D02*
+X011962Y007944D01*
+X011968Y007982D01*
+X011977Y008020D01*
+X011991Y008056D01*
+X012007Y008092D01*
+X012028Y008125D01*
+X012051Y008156D01*
+X012078Y008184D01*
+X012107Y008210D01*
+X012138Y008233D01*
+X012172Y008252D01*
+X012208Y008268D01*
+X012244Y008280D01*
+X012282Y008289D01*
+X012321Y008294D01*
+X012360Y008295D01*
+X012398Y008292D01*
+X012437Y008285D01*
+X012474Y008275D01*
+X012510Y008260D01*
+X012545Y008243D01*
+X012578Y008222D01*
+X012608Y008197D01*
+X012636Y008170D01*
+X012661Y008140D01*
+X012683Y008108D01*
+X012701Y008074D01*
+X012716Y008038D01*
+X012728Y008001D01*
+X012736Y007963D01*
+X012740Y007924D01*
+X012740Y007886D01*
+X012736Y007847D01*
+X012728Y007809D01*
+X012716Y007772D01*
+X012701Y007736D01*
+X012683Y007702D01*
+X012661Y007670D01*
+X012636Y007640D01*
+X012608Y007613D01*
+X012578Y007588D01*
+X012545Y007567D01*
+X012510Y007550D01*
+X012474Y007535D01*
+X012437Y007525D01*
+X012398Y007518D01*
+X012360Y007515D01*
+X012321Y007516D01*
+X012282Y007521D01*
+X012244Y007530D01*
+X012208Y007542D01*
+X012172Y007558D01*
+X012138Y007577D01*
+X012107Y007600D01*
+X012078Y007626D01*
+X012051Y007654D01*
+X012028Y007685D01*
+X012007Y007718D01*
+X011991Y007754D01*
+X011977Y007790D01*
+X011968Y007828D01*
+X011962Y007866D01*
+X011960Y007905D01*
+X011950Y007505D02*
+X012750Y008305D01*
+X012710Y008455D02*
+X012712Y008494D01*
+X012718Y008532D01*
+X012727Y008570D01*
+X012741Y008606D01*
+X012757Y008642D01*
+X012778Y008675D01*
+X012801Y008706D01*
+X012828Y008734D01*
+X012857Y008760D01*
+X012888Y008783D01*
+X012922Y008802D01*
+X012958Y008818D01*
+X012994Y008830D01*
+X013032Y008839D01*
+X013071Y008844D01*
+X013110Y008845D01*
+X013148Y008842D01*
+X013187Y008835D01*
+X013224Y008825D01*
+X013260Y008810D01*
+X013295Y008793D01*
+X013328Y008772D01*
+X013358Y008747D01*
+X013386Y008720D01*
+X013411Y008690D01*
+X013433Y008658D01*
+X013451Y008624D01*
+X013466Y008588D01*
+X013478Y008551D01*
+X013486Y008513D01*
+X013490Y008474D01*
+X013490Y008436D01*
+X013486Y008397D01*
+X013478Y008359D01*
+X013466Y008322D01*
+X013451Y008286D01*
+X013433Y008252D01*
+X013411Y008220D01*
+X013386Y008190D01*
+X013358Y008163D01*
+X013328Y008138D01*
+X013295Y008117D01*
+X013260Y008100D01*
+X013224Y008085D01*
+X013187Y008075D01*
+X013148Y008068D01*
+X013110Y008065D01*
+X013071Y008066D01*
+X013032Y008071D01*
+X012994Y008080D01*
+X012958Y008092D01*
+X012922Y008108D01*
+X012888Y008127D01*
+X012857Y008150D01*
+X012828Y008176D01*
+X012801Y008204D01*
+X012778Y008235D01*
+X012757Y008268D01*
+X012741Y008304D01*
+X012727Y008340D01*
+X012718Y008378D01*
+X012712Y008416D01*
+X012710Y008455D01*
+X012700Y008055D02*
+X013500Y008855D01*
+X013060Y008155D02*
+X013062Y008194D01*
+X013068Y008232D01*
+X013077Y008270D01*
+X013091Y008306D01*
+X013107Y008342D01*
+X013128Y008375D01*
+X013151Y008406D01*
+X013178Y008434D01*
+X013207Y008460D01*
+X013238Y008483D01*
+X013272Y008502D01*
+X013308Y008518D01*
+X013344Y008530D01*
+X013382Y008539D01*
+X013421Y008544D01*
+X013460Y008545D01*
+X013498Y008542D01*
+X013537Y008535D01*
+X013574Y008525D01*
+X013610Y008510D01*
+X013645Y008493D01*
+X013678Y008472D01*
+X013708Y008447D01*
+X013736Y008420D01*
+X013761Y008390D01*
+X013783Y008358D01*
+X013801Y008324D01*
+X013816Y008288D01*
+X013828Y008251D01*
+X013836Y008213D01*
+X013840Y008174D01*
+X013840Y008136D01*
+X013836Y008097D01*
+X013828Y008059D01*
+X013816Y008022D01*
+X013801Y007986D01*
+X013783Y007952D01*
+X013761Y007920D01*
+X013736Y007890D01*
+X013708Y007863D01*
+X013678Y007838D01*
+X013645Y007817D01*
+X013610Y007800D01*
+X013574Y007785D01*
+X013537Y007775D01*
+X013498Y007768D01*
+X013460Y007765D01*
+X013421Y007766D01*
+X013382Y007771D01*
+X013344Y007780D01*
+X013308Y007792D01*
+X013272Y007808D01*
+X013238Y007827D01*
+X013207Y007850D01*
+X013178Y007876D01*
+X013151Y007904D01*
+X013128Y007935D01*
+X013107Y007968D01*
+X013091Y008004D01*
+X013077Y008040D01*
+X013068Y008078D01*
+X013062Y008116D01*
+X013060Y008155D01*
+X013050Y007755D02*
+X013850Y008555D01*
+X011360Y007605D02*
+X011362Y007644D01*
+X011368Y007682D01*
+X011377Y007720D01*
+X011391Y007756D01*
+X011407Y007792D01*
+X011428Y007825D01*
+X011451Y007856D01*
+X011478Y007884D01*
+X011507Y007910D01*
+X011538Y007933D01*
+X011572Y007952D01*
+X011608Y007968D01*
+X011644Y007980D01*
+X011682Y007989D01*
+X011721Y007994D01*
+X011760Y007995D01*
+X011798Y007992D01*
+X011837Y007985D01*
+X011874Y007975D01*
+X011910Y007960D01*
+X011945Y007943D01*
+X011978Y007922D01*
+X012008Y007897D01*
+X012036Y007870D01*
+X012061Y007840D01*
+X012083Y007808D01*
+X012101Y007774D01*
+X012116Y007738D01*
+X012128Y007701D01*
+X012136Y007663D01*
+X012140Y007624D01*
+X012140Y007586D01*
+X012136Y007547D01*
+X012128Y007509D01*
+X012116Y007472D01*
+X012101Y007436D01*
+X012083Y007402D01*
+X012061Y007370D01*
+X012036Y007340D01*
+X012008Y007313D01*
+X011978Y007288D01*
+X011945Y007267D01*
+X011910Y007250D01*
+X011874Y007235D01*
+X011837Y007225D01*
+X011798Y007218D01*
+X011760Y007215D01*
+X011721Y007216D01*
+X011682Y007221D01*
+X011644Y007230D01*
+X011608Y007242D01*
+X011572Y007258D01*
+X011538Y007277D01*
+X011507Y007300D01*
+X011478Y007326D01*
+X011451Y007354D01*
+X011428Y007385D01*
+X011407Y007418D01*
+X011391Y007454D01*
+X011377Y007490D01*
+X011368Y007528D01*
+X011362Y007566D01*
+X011360Y007605D01*
+X011350Y007205D02*
+X012150Y008005D01*
+X010360Y008505D02*
+X010362Y008544D01*
+X010368Y008582D01*
+X010377Y008620D01*
+X010391Y008656D01*
+X010407Y008692D01*
+X010428Y008725D01*
+X010451Y008756D01*
+X010478Y008784D01*
+X010507Y008810D01*
+X010538Y008833D01*
+X010572Y008852D01*
+X010608Y008868D01*
+X010644Y008880D01*
+X010682Y008889D01*
+X010721Y008894D01*
+X010760Y008895D01*
+X010798Y008892D01*
+X010837Y008885D01*
+X010874Y008875D01*
+X010910Y008860D01*
+X010945Y008843D01*
+X010978Y008822D01*
+X011008Y008797D01*
+X011036Y008770D01*
+X011061Y008740D01*
+X011083Y008708D01*
+X011101Y008674D01*
+X011116Y008638D01*
+X011128Y008601D01*
+X011136Y008563D01*
+X011140Y008524D01*
+X011140Y008486D01*
+X011136Y008447D01*
+X011128Y008409D01*
+X011116Y008372D01*
+X011101Y008336D01*
+X011083Y008302D01*
+X011061Y008270D01*
+X011036Y008240D01*
+X011008Y008213D01*
+X010978Y008188D01*
+X010945Y008167D01*
+X010910Y008150D01*
+X010874Y008135D01*
+X010837Y008125D01*
+X010798Y008118D01*
+X010760Y008115D01*
+X010721Y008116D01*
+X010682Y008121D01*
+X010644Y008130D01*
+X010608Y008142D01*
+X010572Y008158D01*
+X010538Y008177D01*
+X010507Y008200D01*
+X010478Y008226D01*
+X010451Y008254D01*
+X010428Y008285D01*
+X010407Y008318D01*
+X010391Y008354D01*
+X010377Y008390D01*
+X010368Y008428D01*
+X010362Y008466D01*
+X010360Y008505D01*
+X010350Y008105D02*
+X011150Y008905D01*
+X009760Y008105D02*
+X009762Y008144D01*
+X009768Y008182D01*
+X009777Y008220D01*
+X009791Y008256D01*
+X009807Y008292D01*
+X009828Y008325D01*
+X009851Y008356D01*
+X009878Y008384D01*
+X009907Y008410D01*
+X009938Y008433D01*
+X009972Y008452D01*
+X010008Y008468D01*
+X010044Y008480D01*
+X010082Y008489D01*
+X010121Y008494D01*
+X010160Y008495D01*
+X010198Y008492D01*
+X010237Y008485D01*
+X010274Y008475D01*
+X010310Y008460D01*
+X010345Y008443D01*
+X010378Y008422D01*
+X010408Y008397D01*
+X010436Y008370D01*
+X010461Y008340D01*
+X010483Y008308D01*
+X010501Y008274D01*
+X010516Y008238D01*
+X010528Y008201D01*
+X010536Y008163D01*
+X010540Y008124D01*
+X010540Y008086D01*
+X010536Y008047D01*
+X010528Y008009D01*
+X010516Y007972D01*
+X010501Y007936D01*
+X010483Y007902D01*
+X010461Y007870D01*
+X010436Y007840D01*
+X010408Y007813D01*
+X010378Y007788D01*
+X010345Y007767D01*
+X010310Y007750D01*
+X010274Y007735D01*
+X010237Y007725D01*
+X010198Y007718D01*
+X010160Y007715D01*
+X010121Y007716D01*
+X010082Y007721D01*
+X010044Y007730D01*
+X010008Y007742D01*
+X009972Y007758D01*
+X009938Y007777D01*
+X009907Y007800D01*
+X009878Y007826D01*
+X009851Y007854D01*
+X009828Y007885D01*
+X009807Y007918D01*
+X009791Y007954D01*
+X009777Y007990D01*
+X009768Y008028D01*
+X009762Y008066D01*
+X009760Y008105D01*
+X009750Y007705D02*
+X010550Y008505D01*
+X008510Y009355D02*
+X008512Y009394D01*
+X008518Y009432D01*
+X008527Y009470D01*
+X008541Y009506D01*
+X008557Y009542D01*
+X008578Y009575D01*
+X008601Y009606D01*
+X008628Y009634D01*
+X008657Y009660D01*
+X008688Y009683D01*
+X008722Y009702D01*
+X008758Y009718D01*
+X008794Y009730D01*
+X008832Y009739D01*
+X008871Y009744D01*
+X008910Y009745D01*
+X008948Y009742D01*
+X008987Y009735D01*
+X009024Y009725D01*
+X009060Y009710D01*
+X009095Y009693D01*
+X009128Y009672D01*
+X009158Y009647D01*
+X009186Y009620D01*
+X009211Y009590D01*
+X009233Y009558D01*
+X009251Y009524D01*
+X009266Y009488D01*
+X009278Y009451D01*
+X009286Y009413D01*
+X009290Y009374D01*
+X009290Y009336D01*
+X009286Y009297D01*
+X009278Y009259D01*
+X009266Y009222D01*
+X009251Y009186D01*
+X009233Y009152D01*
+X009211Y009120D01*
+X009186Y009090D01*
+X009158Y009063D01*
+X009128Y009038D01*
+X009095Y009017D01*
+X009060Y009000D01*
+X009024Y008985D01*
+X008987Y008975D01*
+X008948Y008968D01*
+X008910Y008965D01*
+X008871Y008966D01*
+X008832Y008971D01*
+X008794Y008980D01*
+X008758Y008992D01*
+X008722Y009008D01*
+X008688Y009027D01*
+X008657Y009050D01*
+X008628Y009076D01*
+X008601Y009104D01*
+X008578Y009135D01*
+X008557Y009168D01*
+X008541Y009204D01*
+X008527Y009240D01*
+X008518Y009278D01*
+X008512Y009316D01*
+X008510Y009355D01*
+X008500Y008955D02*
+X009300Y009755D01*
+X008660Y009955D02*
+X008662Y009994D01*
+X008668Y010032D01*
+X008677Y010070D01*
+X008691Y010106D01*
+X008707Y010142D01*
+X008728Y010175D01*
+X008751Y010206D01*
+X008778Y010234D01*
+X008807Y010260D01*
+X008838Y010283D01*
+X008872Y010302D01*
+X008908Y010318D01*
+X008944Y010330D01*
+X008982Y010339D01*
+X009021Y010344D01*
+X009060Y010345D01*
+X009098Y010342D01*
+X009137Y010335D01*
+X009174Y010325D01*
+X009210Y010310D01*
+X009245Y010293D01*
+X009278Y010272D01*
+X009308Y010247D01*
+X009336Y010220D01*
+X009361Y010190D01*
+X009383Y010158D01*
+X009401Y010124D01*
+X009416Y010088D01*
+X009428Y010051D01*
+X009436Y010013D01*
+X009440Y009974D01*
+X009440Y009936D01*
+X009436Y009897D01*
+X009428Y009859D01*
+X009416Y009822D01*
+X009401Y009786D01*
+X009383Y009752D01*
+X009361Y009720D01*
+X009336Y009690D01*
+X009308Y009663D01*
+X009278Y009638D01*
+X009245Y009617D01*
+X009210Y009600D01*
+X009174Y009585D01*
+X009137Y009575D01*
+X009098Y009568D01*
+X009060Y009565D01*
+X009021Y009566D01*
+X008982Y009571D01*
+X008944Y009580D01*
+X008908Y009592D01*
+X008872Y009608D01*
+X008838Y009627D01*
+X008807Y009650D01*
+X008778Y009676D01*
+X008751Y009704D01*
+X008728Y009735D01*
+X008707Y009768D01*
+X008691Y009804D01*
+X008677Y009840D01*
+X008668Y009878D01*
+X008662Y009916D01*
+X008660Y009955D01*
+X008650Y009555D02*
+X009450Y010355D01*
+X009260Y010105D02*
+X009262Y010144D01*
+X009268Y010182D01*
+X009277Y010220D01*
+X009291Y010256D01*
+X009307Y010292D01*
+X009328Y010325D01*
+X009351Y010356D01*
+X009378Y010384D01*
+X009407Y010410D01*
+X009438Y010433D01*
+X009472Y010452D01*
+X009508Y010468D01*
+X009544Y010480D01*
+X009582Y010489D01*
+X009621Y010494D01*
+X009660Y010495D01*
+X009698Y010492D01*
+X009737Y010485D01*
+X009774Y010475D01*
+X009810Y010460D01*
+X009845Y010443D01*
+X009878Y010422D01*
+X009908Y010397D01*
+X009936Y010370D01*
+X009961Y010340D01*
+X009983Y010308D01*
+X010001Y010274D01*
+X010016Y010238D01*
+X010028Y010201D01*
+X010036Y010163D01*
+X010040Y010124D01*
+X010040Y010086D01*
+X010036Y010047D01*
+X010028Y010009D01*
+X010016Y009972D01*
+X010001Y009936D01*
+X009983Y009902D01*
+X009961Y009870D01*
+X009936Y009840D01*
+X009908Y009813D01*
+X009878Y009788D01*
+X009845Y009767D01*
+X009810Y009750D01*
+X009774Y009735D01*
+X009737Y009725D01*
+X009698Y009718D01*
+X009660Y009715D01*
+X009621Y009716D01*
+X009582Y009721D01*
+X009544Y009730D01*
+X009508Y009742D01*
+X009472Y009758D01*
+X009438Y009777D01*
+X009407Y009800D01*
+X009378Y009826D01*
+X009351Y009854D01*
+X009328Y009885D01*
+X009307Y009918D01*
+X009291Y009954D01*
+X009277Y009990D01*
+X009268Y010028D01*
+X009262Y010066D01*
+X009260Y010105D01*
+X009250Y009705D02*
+X010050Y010505D01*
+X009910Y011105D02*
+X009912Y011144D01*
+X009918Y011182D01*
+X009927Y011220D01*
+X009941Y011256D01*
+X009957Y011292D01*
+X009978Y011325D01*
+X010001Y011356D01*
+X010028Y011384D01*
+X010057Y011410D01*
+X010088Y011433D01*
+X010122Y011452D01*
+X010158Y011468D01*
+X010194Y011480D01*
+X010232Y011489D01*
+X010271Y011494D01*
+X010310Y011495D01*
+X010348Y011492D01*
+X010387Y011485D01*
+X010424Y011475D01*
+X010460Y011460D01*
+X010495Y011443D01*
+X010528Y011422D01*
+X010558Y011397D01*
+X010586Y011370D01*
+X010611Y011340D01*
+X010633Y011308D01*
+X010651Y011274D01*
+X010666Y011238D01*
+X010678Y011201D01*
+X010686Y011163D01*
+X010690Y011124D01*
+X010690Y011086D01*
+X010686Y011047D01*
+X010678Y011009D01*
+X010666Y010972D01*
+X010651Y010936D01*
+X010633Y010902D01*
+X010611Y010870D01*
+X010586Y010840D01*
+X010558Y010813D01*
+X010528Y010788D01*
+X010495Y010767D01*
+X010460Y010750D01*
+X010424Y010735D01*
+X010387Y010725D01*
+X010348Y010718D01*
+X010310Y010715D01*
+X010271Y010716D01*
+X010232Y010721D01*
+X010194Y010730D01*
+X010158Y010742D01*
+X010122Y010758D01*
+X010088Y010777D01*
+X010057Y010800D01*
+X010028Y010826D01*
+X010001Y010854D01*
+X009978Y010885D01*
+X009957Y010918D01*
+X009941Y010954D01*
+X009927Y010990D01*
+X009918Y011028D01*
+X009912Y011066D01*
+X009910Y011105D01*
+X009900Y010705D02*
+X010700Y011505D01*
+X008510Y010505D02*
+X008512Y010544D01*
+X008518Y010582D01*
+X008527Y010620D01*
+X008541Y010656D01*
+X008557Y010692D01*
+X008578Y010725D01*
+X008601Y010756D01*
+X008628Y010784D01*
+X008657Y010810D01*
+X008688Y010833D01*
+X008722Y010852D01*
+X008758Y010868D01*
+X008794Y010880D01*
+X008832Y010889D01*
+X008871Y010894D01*
+X008910Y010895D01*
+X008948Y010892D01*
+X008987Y010885D01*
+X009024Y010875D01*
+X009060Y010860D01*
+X009095Y010843D01*
+X009128Y010822D01*
+X009158Y010797D01*
+X009186Y010770D01*
+X009211Y010740D01*
+X009233Y010708D01*
+X009251Y010674D01*
+X009266Y010638D01*
+X009278Y010601D01*
+X009286Y010563D01*
+X009290Y010524D01*
+X009290Y010486D01*
+X009286Y010447D01*
+X009278Y010409D01*
+X009266Y010372D01*
+X009251Y010336D01*
+X009233Y010302D01*
+X009211Y010270D01*
+X009186Y010240D01*
+X009158Y010213D01*
+X009128Y010188D01*
+X009095Y010167D01*
+X009060Y010150D01*
+X009024Y010135D01*
+X008987Y010125D01*
+X008948Y010118D01*
+X008910Y010115D01*
+X008871Y010116D01*
+X008832Y010121D01*
+X008794Y010130D01*
+X008758Y010142D01*
+X008722Y010158D01*
+X008688Y010177D01*
+X008657Y010200D01*
+X008628Y010226D01*
+X008601Y010254D01*
+X008578Y010285D01*
+X008557Y010318D01*
+X008541Y010354D01*
+X008527Y010390D01*
+X008518Y010428D01*
+X008512Y010466D01*
+X008510Y010505D01*
+X008500Y010105D02*
+X009300Y010905D01*
+X007660Y010255D02*
+X007662Y010294D01*
+X007668Y010332D01*
+X007677Y010370D01*
+X007691Y010406D01*
+X007707Y010442D01*
+X007728Y010475D01*
+X007751Y010506D01*
+X007778Y010534D01*
+X007807Y010560D01*
+X007838Y010583D01*
+X007872Y010602D01*
+X007908Y010618D01*
+X007944Y010630D01*
+X007982Y010639D01*
+X008021Y010644D01*
+X008060Y010645D01*
+X008098Y010642D01*
+X008137Y010635D01*
+X008174Y010625D01*
+X008210Y010610D01*
+X008245Y010593D01*
+X008278Y010572D01*
+X008308Y010547D01*
+X008336Y010520D01*
+X008361Y010490D01*
+X008383Y010458D01*
+X008401Y010424D01*
+X008416Y010388D01*
+X008428Y010351D01*
+X008436Y010313D01*
+X008440Y010274D01*
+X008440Y010236D01*
+X008436Y010197D01*
+X008428Y010159D01*
+X008416Y010122D01*
+X008401Y010086D01*
+X008383Y010052D01*
+X008361Y010020D01*
+X008336Y009990D01*
+X008308Y009963D01*
+X008278Y009938D01*
+X008245Y009917D01*
+X008210Y009900D01*
+X008174Y009885D01*
+X008137Y009875D01*
+X008098Y009868D01*
+X008060Y009865D01*
+X008021Y009866D01*
+X007982Y009871D01*
+X007944Y009880D01*
+X007908Y009892D01*
+X007872Y009908D01*
+X007838Y009927D01*
+X007807Y009950D01*
+X007778Y009976D01*
+X007751Y010004D01*
+X007728Y010035D01*
+X007707Y010068D01*
+X007691Y010104D01*
+X007677Y010140D01*
+X007668Y010178D01*
+X007662Y010216D01*
+X007660Y010255D01*
+X007650Y009855D02*
+X008450Y010655D01*
+X006160Y010255D02*
+X006162Y010294D01*
+X006168Y010332D01*
+X006177Y010370D01*
+X006191Y010406D01*
+X006207Y010442D01*
+X006228Y010475D01*
+X006251Y010506D01*
+X006278Y010534D01*
+X006307Y010560D01*
+X006338Y010583D01*
+X006372Y010602D01*
+X006408Y010618D01*
+X006444Y010630D01*
+X006482Y010639D01*
+X006521Y010644D01*
+X006560Y010645D01*
+X006598Y010642D01*
+X006637Y010635D01*
+X006674Y010625D01*
+X006710Y010610D01*
+X006745Y010593D01*
+X006778Y010572D01*
+X006808Y010547D01*
+X006836Y010520D01*
+X006861Y010490D01*
+X006883Y010458D01*
+X006901Y010424D01*
+X006916Y010388D01*
+X006928Y010351D01*
+X006936Y010313D01*
+X006940Y010274D01*
+X006940Y010236D01*
+X006936Y010197D01*
+X006928Y010159D01*
+X006916Y010122D01*
+X006901Y010086D01*
+X006883Y010052D01*
+X006861Y010020D01*
+X006836Y009990D01*
+X006808Y009963D01*
+X006778Y009938D01*
+X006745Y009917D01*
+X006710Y009900D01*
+X006674Y009885D01*
+X006637Y009875D01*
+X006598Y009868D01*
+X006560Y009865D01*
+X006521Y009866D01*
+X006482Y009871D01*
+X006444Y009880D01*
+X006408Y009892D01*
+X006372Y009908D01*
+X006338Y009927D01*
+X006307Y009950D01*
+X006278Y009976D01*
+X006251Y010004D01*
+X006228Y010035D01*
+X006207Y010068D01*
+X006191Y010104D01*
+X006177Y010140D01*
+X006168Y010178D01*
+X006162Y010216D01*
+X006160Y010255D01*
+X006150Y009855D02*
+X006950Y010655D01*
+X005760Y010855D02*
+X005762Y010894D01*
+X005768Y010932D01*
+X005777Y010970D01*
+X005791Y011006D01*
+X005807Y011042D01*
+X005828Y011075D01*
+X005851Y011106D01*
+X005878Y011134D01*
+X005907Y011160D01*
+X005938Y011183D01*
+X005972Y011202D01*
+X006008Y011218D01*
+X006044Y011230D01*
+X006082Y011239D01*
+X006121Y011244D01*
+X006160Y011245D01*
+X006198Y011242D01*
+X006237Y011235D01*
+X006274Y011225D01*
+X006310Y011210D01*
+X006345Y011193D01*
+X006378Y011172D01*
+X006408Y011147D01*
+X006436Y011120D01*
+X006461Y011090D01*
+X006483Y011058D01*
+X006501Y011024D01*
+X006516Y010988D01*
+X006528Y010951D01*
+X006536Y010913D01*
+X006540Y010874D01*
+X006540Y010836D01*
+X006536Y010797D01*
+X006528Y010759D01*
+X006516Y010722D01*
+X006501Y010686D01*
+X006483Y010652D01*
+X006461Y010620D01*
+X006436Y010590D01*
+X006408Y010563D01*
+X006378Y010538D01*
+X006345Y010517D01*
+X006310Y010500D01*
+X006274Y010485D01*
+X006237Y010475D01*
+X006198Y010468D01*
+X006160Y010465D01*
+X006121Y010466D01*
+X006082Y010471D01*
+X006044Y010480D01*
+X006008Y010492D01*
+X005972Y010508D01*
+X005938Y010527D01*
+X005907Y010550D01*
+X005878Y010576D01*
+X005851Y010604D01*
+X005828Y010635D01*
+X005807Y010668D01*
+X005791Y010704D01*
+X005777Y010740D01*
+X005768Y010778D01*
+X005762Y010816D01*
+X005760Y010855D01*
+X005750Y010455D02*
+X006550Y011255D01*
+X005010Y012005D02*
+X005012Y012044D01*
+X005018Y012082D01*
+X005027Y012120D01*
+X005041Y012156D01*
+X005057Y012192D01*
+X005078Y012225D01*
+X005101Y012256D01*
+X005128Y012284D01*
+X005157Y012310D01*
+X005188Y012333D01*
+X005222Y012352D01*
+X005258Y012368D01*
+X005294Y012380D01*
+X005332Y012389D01*
+X005371Y012394D01*
+X005410Y012395D01*
+X005448Y012392D01*
+X005487Y012385D01*
+X005524Y012375D01*
+X005560Y012360D01*
+X005595Y012343D01*
+X005628Y012322D01*
+X005658Y012297D01*
+X005686Y012270D01*
+X005711Y012240D01*
+X005733Y012208D01*
+X005751Y012174D01*
+X005766Y012138D01*
+X005778Y012101D01*
+X005786Y012063D01*
+X005790Y012024D01*
+X005790Y011986D01*
+X005786Y011947D01*
+X005778Y011909D01*
+X005766Y011872D01*
+X005751Y011836D01*
+X005733Y011802D01*
+X005711Y011770D01*
+X005686Y011740D01*
+X005658Y011713D01*
+X005628Y011688D01*
+X005595Y011667D01*
+X005560Y011650D01*
+X005524Y011635D01*
+X005487Y011625D01*
+X005448Y011618D01*
+X005410Y011615D01*
+X005371Y011616D01*
+X005332Y011621D01*
+X005294Y011630D01*
+X005258Y011642D01*
+X005222Y011658D01*
+X005188Y011677D01*
+X005157Y011700D01*
+X005128Y011726D01*
+X005101Y011754D01*
+X005078Y011785D01*
+X005057Y011818D01*
+X005041Y011854D01*
+X005027Y011890D01*
+X005018Y011928D01*
+X005012Y011966D01*
+X005010Y012005D01*
+X005000Y011605D02*
+X005800Y012405D01*
+X003160Y011155D02*
+X003162Y011194D01*
+X003168Y011232D01*
+X003177Y011270D01*
+X003191Y011306D01*
+X003207Y011342D01*
+X003228Y011375D01*
+X003251Y011406D01*
+X003278Y011434D01*
+X003307Y011460D01*
+X003338Y011483D01*
+X003372Y011502D01*
+X003408Y011518D01*
+X003444Y011530D01*
+X003482Y011539D01*
+X003521Y011544D01*
+X003560Y011545D01*
+X003598Y011542D01*
+X003637Y011535D01*
+X003674Y011525D01*
+X003710Y011510D01*
+X003745Y011493D01*
+X003778Y011472D01*
+X003808Y011447D01*
+X003836Y011420D01*
+X003861Y011390D01*
+X003883Y011358D01*
+X003901Y011324D01*
+X003916Y011288D01*
+X003928Y011251D01*
+X003936Y011213D01*
+X003940Y011174D01*
+X003940Y011136D01*
+X003936Y011097D01*
+X003928Y011059D01*
+X003916Y011022D01*
+X003901Y010986D01*
+X003883Y010952D01*
+X003861Y010920D01*
+X003836Y010890D01*
+X003808Y010863D01*
+X003778Y010838D01*
+X003745Y010817D01*
+X003710Y010800D01*
+X003674Y010785D01*
+X003637Y010775D01*
+X003598Y010768D01*
+X003560Y010765D01*
+X003521Y010766D01*
+X003482Y010771D01*
+X003444Y010780D01*
+X003408Y010792D01*
+X003372Y010808D01*
+X003338Y010827D01*
+X003307Y010850D01*
+X003278Y010876D01*
+X003251Y010904D01*
+X003228Y010935D01*
+X003207Y010968D01*
+X003191Y011004D01*
+X003177Y011040D01*
+X003168Y011078D01*
+X003162Y011116D01*
+X003160Y011155D01*
+X003150Y010755D02*
+X003950Y011555D01*
+X003160Y010405D02*
+X003162Y010444D01*
+X003168Y010482D01*
+X003177Y010520D01*
+X003191Y010556D01*
+X003207Y010592D01*
+X003228Y010625D01*
+X003251Y010656D01*
+X003278Y010684D01*
+X003307Y010710D01*
+X003338Y010733D01*
+X003372Y010752D01*
+X003408Y010768D01*
+X003444Y010780D01*
+X003482Y010789D01*
+X003521Y010794D01*
+X003560Y010795D01*
+X003598Y010792D01*
+X003637Y010785D01*
+X003674Y010775D01*
+X003710Y010760D01*
+X003745Y010743D01*
+X003778Y010722D01*
+X003808Y010697D01*
+X003836Y010670D01*
+X003861Y010640D01*
+X003883Y010608D01*
+X003901Y010574D01*
+X003916Y010538D01*
+X003928Y010501D01*
+X003936Y010463D01*
+X003940Y010424D01*
+X003940Y010386D01*
+X003936Y010347D01*
+X003928Y010309D01*
+X003916Y010272D01*
+X003901Y010236D01*
+X003883Y010202D01*
+X003861Y010170D01*
+X003836Y010140D01*
+X003808Y010113D01*
+X003778Y010088D01*
+X003745Y010067D01*
+X003710Y010050D01*
+X003674Y010035D01*
+X003637Y010025D01*
+X003598Y010018D01*
+X003560Y010015D01*
+X003521Y010016D01*
+X003482Y010021D01*
+X003444Y010030D01*
+X003408Y010042D01*
+X003372Y010058D01*
+X003338Y010077D01*
+X003307Y010100D01*
+X003278Y010126D01*
+X003251Y010154D01*
+X003228Y010185D01*
+X003207Y010218D01*
+X003191Y010254D01*
+X003177Y010290D01*
+X003168Y010328D01*
+X003162Y010366D01*
+X003160Y010405D01*
+X003150Y010005D02*
+X003950Y010805D01*
+X002317Y010446D02*
+X001517Y009646D01*
+X002317Y009646D02*
+X002317Y010446D01*
+X002317Y009646D02*
+X001517Y010446D01*
+X001517Y009646D01*
+X001760Y009405D02*
+X001762Y009444D01*
+X001768Y009482D01*
+X001777Y009520D01*
+X001791Y009556D01*
+X001807Y009592D01*
+X001828Y009625D01*
+X001851Y009656D01*
+X001878Y009684D01*
+X001907Y009710D01*
+X001938Y009733D01*
+X001972Y009752D01*
+X002008Y009768D01*
+X002044Y009780D01*
+X002082Y009789D01*
+X002121Y009794D01*
+X002160Y009795D01*
+X002198Y009792D01*
+X002237Y009785D01*
+X002274Y009775D01*
+X002310Y009760D01*
+X002345Y009743D01*
+X002378Y009722D01*
+X002408Y009697D01*
+X002436Y009670D01*
+X002461Y009640D01*
+X002483Y009608D01*
+X002501Y009574D01*
+X002516Y009538D01*
+X002528Y009501D01*
+X002536Y009463D01*
+X002540Y009424D01*
+X002540Y009386D01*
+X002536Y009347D01*
+X002528Y009309D01*
+X002516Y009272D01*
+X002501Y009236D01*
+X002483Y009202D01*
+X002461Y009170D01*
+X002436Y009140D01*
+X002408Y009113D01*
+X002378Y009088D01*
+X002345Y009067D01*
+X002310Y009050D01*
+X002274Y009035D01*
+X002237Y009025D01*
+X002198Y009018D01*
+X002160Y009015D01*
+X002121Y009016D01*
+X002082Y009021D01*
+X002044Y009030D01*
+X002008Y009042D01*
+X001972Y009058D01*
+X001938Y009077D01*
+X001907Y009100D01*
+X001878Y009126D01*
+X001851Y009154D01*
+X001828Y009185D01*
+X001807Y009218D01*
+X001791Y009254D01*
+X001777Y009290D01*
+X001768Y009328D01*
+X001762Y009366D01*
+X001760Y009405D01*
+X001750Y009005D02*
+X002550Y009805D01*
+X002317Y009264D02*
+X001517Y008464D01*
+X002317Y008464D02*
+X002317Y009264D01*
+X002317Y008464D02*
+X001517Y009264D01*
+X001517Y008464D01*
+X002860Y008355D02*
+X002862Y008394D01*
+X002868Y008432D01*
+X002877Y008470D01*
+X002891Y008506D01*
+X002907Y008542D01*
+X002928Y008575D01*
+X002951Y008606D01*
+X002978Y008634D01*
+X003007Y008660D01*
+X003038Y008683D01*
+X003072Y008702D01*
+X003108Y008718D01*
+X003144Y008730D01*
+X003182Y008739D01*
+X003221Y008744D01*
+X003260Y008745D01*
+X003298Y008742D01*
+X003337Y008735D01*
+X003374Y008725D01*
+X003410Y008710D01*
+X003445Y008693D01*
+X003478Y008672D01*
+X003508Y008647D01*
+X003536Y008620D01*
+X003561Y008590D01*
+X003583Y008558D01*
+X003601Y008524D01*
+X003616Y008488D01*
+X003628Y008451D01*
+X003636Y008413D01*
+X003640Y008374D01*
+X003640Y008336D01*
+X003636Y008297D01*
+X003628Y008259D01*
+X003616Y008222D01*
+X003601Y008186D01*
+X003583Y008152D01*
+X003561Y008120D01*
+X003536Y008090D01*
+X003508Y008063D01*
+X003478Y008038D01*
+X003445Y008017D01*
+X003410Y008000D01*
+X003374Y007985D01*
+X003337Y007975D01*
+X003298Y007968D01*
+X003260Y007965D01*
+X003221Y007966D01*
+X003182Y007971D01*
+X003144Y007980D01*
+X003108Y007992D01*
+X003072Y008008D01*
+X003038Y008027D01*
+X003007Y008050D01*
+X002978Y008076D01*
+X002951Y008104D01*
+X002928Y008135D01*
+X002907Y008168D01*
+X002891Y008204D01*
+X002877Y008240D01*
+X002868Y008278D01*
+X002862Y008316D01*
+X002860Y008355D01*
+X002850Y007955D02*
+X003650Y008755D01*
+X003610Y009305D02*
+X003612Y009344D01*
+X003618Y009382D01*
+X003627Y009420D01*
+X003641Y009456D01*
+X003657Y009492D01*
+X003678Y009525D01*
+X003701Y009556D01*
+X003728Y009584D01*
+X003757Y009610D01*
+X003788Y009633D01*
+X003822Y009652D01*
+X003858Y009668D01*
+X003894Y009680D01*
+X003932Y009689D01*
+X003971Y009694D01*
+X004010Y009695D01*
+X004048Y009692D01*
+X004087Y009685D01*
+X004124Y009675D01*
+X004160Y009660D01*
+X004195Y009643D01*
+X004228Y009622D01*
+X004258Y009597D01*
+X004286Y009570D01*
+X004311Y009540D01*
+X004333Y009508D01*
+X004351Y009474D01*
+X004366Y009438D01*
+X004378Y009401D01*
+X004386Y009363D01*
+X004390Y009324D01*
+X004390Y009286D01*
+X004386Y009247D01*
+X004378Y009209D01*
+X004366Y009172D01*
+X004351Y009136D01*
+X004333Y009102D01*
+X004311Y009070D01*
+X004286Y009040D01*
+X004258Y009013D01*
+X004228Y008988D01*
+X004195Y008967D01*
+X004160Y008950D01*
+X004124Y008935D01*
+X004087Y008925D01*
+X004048Y008918D01*
+X004010Y008915D01*
+X003971Y008916D01*
+X003932Y008921D01*
+X003894Y008930D01*
+X003858Y008942D01*
+X003822Y008958D01*
+X003788Y008977D01*
+X003757Y009000D01*
+X003728Y009026D01*
+X003701Y009054D01*
+X003678Y009085D01*
+X003657Y009118D01*
+X003641Y009154D01*
+X003627Y009190D01*
+X003618Y009228D01*
+X003612Y009266D01*
+X003610Y009305D01*
+X003600Y008905D02*
+X004400Y009705D01*
+X005710Y010255D02*
+X005712Y010294D01*
+X005718Y010332D01*
+X005727Y010370D01*
+X005741Y010406D01*
+X005757Y010442D01*
+X005778Y010475D01*
+X005801Y010506D01*
+X005828Y010534D01*
+X005857Y010560D01*
+X005888Y010583D01*
+X005922Y010602D01*
+X005958Y010618D01*
+X005994Y010630D01*
+X006032Y010639D01*
+X006071Y010644D01*
+X006110Y010645D01*
+X006148Y010642D01*
+X006187Y010635D01*
+X006224Y010625D01*
+X006260Y010610D01*
+X006295Y010593D01*
+X006328Y010572D01*
+X006358Y010547D01*
+X006386Y010520D01*
+X006411Y010490D01*
+X006433Y010458D01*
+X006451Y010424D01*
+X006466Y010388D01*
+X006478Y010351D01*
+X006486Y010313D01*
+X006490Y010274D01*
+X006490Y010236D01*
+X006486Y010197D01*
+X006478Y010159D01*
+X006466Y010122D01*
+X006451Y010086D01*
+X006433Y010052D01*
+X006411Y010020D01*
+X006386Y009990D01*
+X006358Y009963D01*
+X006328Y009938D01*
+X006295Y009917D01*
+X006260Y009900D01*
+X006224Y009885D01*
+X006187Y009875D01*
+X006148Y009868D01*
+X006110Y009865D01*
+X006071Y009866D01*
+X006032Y009871D01*
+X005994Y009880D01*
+X005958Y009892D01*
+X005922Y009908D01*
+X005888Y009927D01*
+X005857Y009950D01*
+X005828Y009976D01*
+X005801Y010004D01*
+X005778Y010035D01*
+X005757Y010068D01*
+X005741Y010104D01*
+X005727Y010140D01*
+X005718Y010178D01*
+X005712Y010216D01*
+X005710Y010255D01*
+X005700Y009855D02*
+X006500Y010655D01*
+X007660Y009405D02*
+X007662Y009444D01*
+X007668Y009482D01*
+X007677Y009520D01*
+X007691Y009556D01*
+X007707Y009592D01*
+X007728Y009625D01*
+X007751Y009656D01*
+X007778Y009684D01*
+X007807Y009710D01*
+X007838Y009733D01*
+X007872Y009752D01*
+X007908Y009768D01*
+X007944Y009780D01*
+X007982Y009789D01*
+X008021Y009794D01*
+X008060Y009795D01*
+X008098Y009792D01*
+X008137Y009785D01*
+X008174Y009775D01*
+X008210Y009760D01*
+X008245Y009743D01*
+X008278Y009722D01*
+X008308Y009697D01*
+X008336Y009670D01*
+X008361Y009640D01*
+X008383Y009608D01*
+X008401Y009574D01*
+X008416Y009538D01*
+X008428Y009501D01*
+X008436Y009463D01*
+X008440Y009424D01*
+X008440Y009386D01*
+X008436Y009347D01*
+X008428Y009309D01*
+X008416Y009272D01*
+X008401Y009236D01*
+X008383Y009202D01*
+X008361Y009170D01*
+X008336Y009140D01*
+X008308Y009113D01*
+X008278Y009088D01*
+X008245Y009067D01*
+X008210Y009050D01*
+X008174Y009035D01*
+X008137Y009025D01*
+X008098Y009018D01*
+X008060Y009015D01*
+X008021Y009016D01*
+X007982Y009021D01*
+X007944Y009030D01*
+X007908Y009042D01*
+X007872Y009058D01*
+X007838Y009077D01*
+X007807Y009100D01*
+X007778Y009126D01*
+X007751Y009154D01*
+X007728Y009185D01*
+X007707Y009218D01*
+X007691Y009254D01*
+X007677Y009290D01*
+X007668Y009328D01*
+X007662Y009366D01*
+X007660Y009405D01*
+X007650Y009005D02*
+X008450Y009805D01*
+X007660Y008905D02*
+X007662Y008944D01*
+X007668Y008982D01*
+X007677Y009020D01*
+X007691Y009056D01*
+X007707Y009092D01*
+X007728Y009125D01*
+X007751Y009156D01*
+X007778Y009184D01*
+X007807Y009210D01*
+X007838Y009233D01*
+X007872Y009252D01*
+X007908Y009268D01*
+X007944Y009280D01*
+X007982Y009289D01*
+X008021Y009294D01*
+X008060Y009295D01*
+X008098Y009292D01*
+X008137Y009285D01*
+X008174Y009275D01*
+X008210Y009260D01*
+X008245Y009243D01*
+X008278Y009222D01*
+X008308Y009197D01*
+X008336Y009170D01*
+X008361Y009140D01*
+X008383Y009108D01*
+X008401Y009074D01*
+X008416Y009038D01*
+X008428Y009001D01*
+X008436Y008963D01*
+X008440Y008924D01*
+X008440Y008886D01*
+X008436Y008847D01*
+X008428Y008809D01*
+X008416Y008772D01*
+X008401Y008736D01*
+X008383Y008702D01*
+X008361Y008670D01*
+X008336Y008640D01*
+X008308Y008613D01*
+X008278Y008588D01*
+X008245Y008567D01*
+X008210Y008550D01*
+X008174Y008535D01*
+X008137Y008525D01*
+X008098Y008518D01*
+X008060Y008515D01*
+X008021Y008516D01*
+X007982Y008521D01*
+X007944Y008530D01*
+X007908Y008542D01*
+X007872Y008558D01*
+X007838Y008577D01*
+X007807Y008600D01*
+X007778Y008626D01*
+X007751Y008654D01*
+X007728Y008685D01*
+X007707Y008718D01*
+X007691Y008754D01*
+X007677Y008790D01*
+X007668Y008828D01*
+X007662Y008866D01*
+X007660Y008905D01*
+X007650Y008505D02*
+X008450Y009305D01*
+X005710Y008405D02*
+X005712Y008444D01*
+X005718Y008482D01*
+X005727Y008520D01*
+X005741Y008556D01*
+X005757Y008592D01*
+X005778Y008625D01*
+X005801Y008656D01*
+X005828Y008684D01*
+X005857Y008710D01*
+X005888Y008733D01*
+X005922Y008752D01*
+X005958Y008768D01*
+X005994Y008780D01*
+X006032Y008789D01*
+X006071Y008794D01*
+X006110Y008795D01*
+X006148Y008792D01*
+X006187Y008785D01*
+X006224Y008775D01*
+X006260Y008760D01*
+X006295Y008743D01*
+X006328Y008722D01*
+X006358Y008697D01*
+X006386Y008670D01*
+X006411Y008640D01*
+X006433Y008608D01*
+X006451Y008574D01*
+X006466Y008538D01*
+X006478Y008501D01*
+X006486Y008463D01*
+X006490Y008424D01*
+X006490Y008386D01*
+X006486Y008347D01*
+X006478Y008309D01*
+X006466Y008272D01*
+X006451Y008236D01*
+X006433Y008202D01*
+X006411Y008170D01*
+X006386Y008140D01*
+X006358Y008113D01*
+X006328Y008088D01*
+X006295Y008067D01*
+X006260Y008050D01*
+X006224Y008035D01*
+X006187Y008025D01*
+X006148Y008018D01*
+X006110Y008015D01*
+X006071Y008016D01*
+X006032Y008021D01*
+X005994Y008030D01*
+X005958Y008042D01*
+X005922Y008058D01*
+X005888Y008077D01*
+X005857Y008100D01*
+X005828Y008126D01*
+X005801Y008154D01*
+X005778Y008185D01*
+X005757Y008218D01*
+X005741Y008254D01*
+X005727Y008290D01*
+X005718Y008328D01*
+X005712Y008366D01*
+X005710Y008405D01*
+X005700Y008005D02*
+X006500Y008805D01*
+X005160Y008055D02*
+X005162Y008094D01*
+X005168Y008132D01*
+X005177Y008170D01*
+X005191Y008206D01*
+X005207Y008242D01*
+X005228Y008275D01*
+X005251Y008306D01*
+X005278Y008334D01*
+X005307Y008360D01*
+X005338Y008383D01*
+X005372Y008402D01*
+X005408Y008418D01*
+X005444Y008430D01*
+X005482Y008439D01*
+X005521Y008444D01*
+X005560Y008445D01*
+X005598Y008442D01*
+X005637Y008435D01*
+X005674Y008425D01*
+X005710Y008410D01*
+X005745Y008393D01*
+X005778Y008372D01*
+X005808Y008347D01*
+X005836Y008320D01*
+X005861Y008290D01*
+X005883Y008258D01*
+X005901Y008224D01*
+X005916Y008188D01*
+X005928Y008151D01*
+X005936Y008113D01*
+X005940Y008074D01*
+X005940Y008036D01*
+X005936Y007997D01*
+X005928Y007959D01*
+X005916Y007922D01*
+X005901Y007886D01*
+X005883Y007852D01*
+X005861Y007820D01*
+X005836Y007790D01*
+X005808Y007763D01*
+X005778Y007738D01*
+X005745Y007717D01*
+X005710Y007700D01*
+X005674Y007685D01*
+X005637Y007675D01*
+X005598Y007668D01*
+X005560Y007665D01*
+X005521Y007666D01*
+X005482Y007671D01*
+X005444Y007680D01*
+X005408Y007692D01*
+X005372Y007708D01*
+X005338Y007727D01*
+X005307Y007750D01*
+X005278Y007776D01*
+X005251Y007804D01*
+X005228Y007835D01*
+X005207Y007868D01*
+X005191Y007904D01*
+X005177Y007940D01*
+X005168Y007978D01*
+X005162Y008016D01*
+X005160Y008055D01*
+X005150Y007655D02*
+X005950Y008455D01*
+X003310Y007655D02*
+X003312Y007694D01*
+X003318Y007732D01*
+X003327Y007770D01*
+X003341Y007806D01*
+X003357Y007842D01*
+X003378Y007875D01*
+X003401Y007906D01*
+X003428Y007934D01*
+X003457Y007960D01*
+X003488Y007983D01*
+X003522Y008002D01*
+X003558Y008018D01*
+X003594Y008030D01*
+X003632Y008039D01*
+X003671Y008044D01*
+X003710Y008045D01*
+X003748Y008042D01*
+X003787Y008035D01*
+X003824Y008025D01*
+X003860Y008010D01*
+X003895Y007993D01*
+X003928Y007972D01*
+X003958Y007947D01*
+X003986Y007920D01*
+X004011Y007890D01*
+X004033Y007858D01*
+X004051Y007824D01*
+X004066Y007788D01*
+X004078Y007751D01*
+X004086Y007713D01*
+X004090Y007674D01*
+X004090Y007636D01*
+X004086Y007597D01*
+X004078Y007559D01*
+X004066Y007522D01*
+X004051Y007486D01*
+X004033Y007452D01*
+X004011Y007420D01*
+X003986Y007390D01*
+X003958Y007363D01*
+X003928Y007338D01*
+X003895Y007317D01*
+X003860Y007300D01*
+X003824Y007285D01*
+X003787Y007275D01*
+X003748Y007268D01*
+X003710Y007265D01*
+X003671Y007266D01*
+X003632Y007271D01*
+X003594Y007280D01*
+X003558Y007292D01*
+X003522Y007308D01*
+X003488Y007327D01*
+X003457Y007350D01*
+X003428Y007376D01*
+X003401Y007404D01*
+X003378Y007435D01*
+X003357Y007468D01*
+X003341Y007504D01*
+X003327Y007540D01*
+X003318Y007578D01*
+X003312Y007616D01*
+X003310Y007655D01*
+X003300Y007255D02*
+X004100Y008055D01*
+X002910Y007305D02*
+X002912Y007344D01*
+X002918Y007382D01*
+X002927Y007420D01*
+X002941Y007456D01*
+X002957Y007492D01*
+X002978Y007525D01*
+X003001Y007556D01*
+X003028Y007584D01*
+X003057Y007610D01*
+X003088Y007633D01*
+X003122Y007652D01*
+X003158Y007668D01*
+X003194Y007680D01*
+X003232Y007689D01*
+X003271Y007694D01*
+X003310Y007695D01*
+X003348Y007692D01*
+X003387Y007685D01*
+X003424Y007675D01*
+X003460Y007660D01*
+X003495Y007643D01*
+X003528Y007622D01*
+X003558Y007597D01*
+X003586Y007570D01*
+X003611Y007540D01*
+X003633Y007508D01*
+X003651Y007474D01*
+X003666Y007438D01*
+X003678Y007401D01*
+X003686Y007363D01*
+X003690Y007324D01*
+X003690Y007286D01*
+X003686Y007247D01*
+X003678Y007209D01*
+X003666Y007172D01*
+X003651Y007136D01*
+X003633Y007102D01*
+X003611Y007070D01*
+X003586Y007040D01*
+X003558Y007013D01*
+X003528Y006988D01*
+X003495Y006967D01*
+X003460Y006950D01*
+X003424Y006935D01*
+X003387Y006925D01*
+X003348Y006918D01*
+X003310Y006915D01*
+X003271Y006916D01*
+X003232Y006921D01*
+X003194Y006930D01*
+X003158Y006942D01*
+X003122Y006958D01*
+X003088Y006977D01*
+X003057Y007000D01*
+X003028Y007026D01*
+X003001Y007054D01*
+X002978Y007085D01*
+X002957Y007118D01*
+X002941Y007154D01*
+X002927Y007190D01*
+X002918Y007228D01*
+X002912Y007266D01*
+X002910Y007305D01*
+X002900Y006905D02*
+X003700Y007705D01*
+X003010Y006305D02*
+X003012Y006344D01*
+X003018Y006382D01*
+X003027Y006420D01*
+X003041Y006456D01*
+X003057Y006492D01*
+X003078Y006525D01*
+X003101Y006556D01*
+X003128Y006584D01*
+X003157Y006610D01*
+X003188Y006633D01*
+X003222Y006652D01*
+X003258Y006668D01*
+X003294Y006680D01*
+X003332Y006689D01*
+X003371Y006694D01*
+X003410Y006695D01*
+X003448Y006692D01*
+X003487Y006685D01*
+X003524Y006675D01*
+X003560Y006660D01*
+X003595Y006643D01*
+X003628Y006622D01*
+X003658Y006597D01*
+X003686Y006570D01*
+X003711Y006540D01*
+X003733Y006508D01*
+X003751Y006474D01*
+X003766Y006438D01*
+X003778Y006401D01*
+X003786Y006363D01*
+X003790Y006324D01*
+X003790Y006286D01*
+X003786Y006247D01*
+X003778Y006209D01*
+X003766Y006172D01*
+X003751Y006136D01*
+X003733Y006102D01*
+X003711Y006070D01*
+X003686Y006040D01*
+X003658Y006013D01*
+X003628Y005988D01*
+X003595Y005967D01*
+X003560Y005950D01*
+X003524Y005935D01*
+X003487Y005925D01*
+X003448Y005918D01*
+X003410Y005915D01*
+X003371Y005916D01*
+X003332Y005921D01*
+X003294Y005930D01*
+X003258Y005942D01*
+X003222Y005958D01*
+X003188Y005977D01*
+X003157Y006000D01*
+X003128Y006026D01*
+X003101Y006054D01*
+X003078Y006085D01*
+X003057Y006118D01*
+X003041Y006154D01*
+X003027Y006190D01*
+X003018Y006228D01*
+X003012Y006266D01*
+X003010Y006305D01*
+X003000Y005905D02*
+X003800Y006705D01*
+X004460Y005755D02*
+X004462Y005794D01*
+X004468Y005832D01*
+X004477Y005870D01*
+X004491Y005906D01*
+X004507Y005942D01*
+X004528Y005975D01*
+X004551Y006006D01*
+X004578Y006034D01*
+X004607Y006060D01*
+X004638Y006083D01*
+X004672Y006102D01*
+X004708Y006118D01*
+X004744Y006130D01*
+X004782Y006139D01*
+X004821Y006144D01*
+X004860Y006145D01*
+X004898Y006142D01*
+X004937Y006135D01*
+X004974Y006125D01*
+X005010Y006110D01*
+X005045Y006093D01*
+X005078Y006072D01*
+X005108Y006047D01*
+X005136Y006020D01*
+X005161Y005990D01*
+X005183Y005958D01*
+X005201Y005924D01*
+X005216Y005888D01*
+X005228Y005851D01*
+X005236Y005813D01*
+X005240Y005774D01*
+X005240Y005736D01*
+X005236Y005697D01*
+X005228Y005659D01*
+X005216Y005622D01*
+X005201Y005586D01*
+X005183Y005552D01*
+X005161Y005520D01*
+X005136Y005490D01*
+X005108Y005463D01*
+X005078Y005438D01*
+X005045Y005417D01*
+X005010Y005400D01*
+X004974Y005385D01*
+X004937Y005375D01*
+X004898Y005368D01*
+X004860Y005365D01*
+X004821Y005366D01*
+X004782Y005371D01*
+X004744Y005380D01*
+X004708Y005392D01*
+X004672Y005408D01*
+X004638Y005427D01*
+X004607Y005450D01*
+X004578Y005476D01*
+X004551Y005504D01*
+X004528Y005535D01*
+X004507Y005568D01*
+X004491Y005604D01*
+X004477Y005640D01*
+X004468Y005678D01*
+X004462Y005716D01*
+X004460Y005755D01*
+X004450Y005355D02*
+X005250Y006155D01*
+X005460Y005355D02*
+X005462Y005394D01*
+X005468Y005432D01*
+X005477Y005470D01*
+X005491Y005506D01*
+X005507Y005542D01*
+X005528Y005575D01*
+X005551Y005606D01*
+X005578Y005634D01*
+X005607Y005660D01*
+X005638Y005683D01*
+X005672Y005702D01*
+X005708Y005718D01*
+X005744Y005730D01*
+X005782Y005739D01*
+X005821Y005744D01*
+X005860Y005745D01*
+X005898Y005742D01*
+X005937Y005735D01*
+X005974Y005725D01*
+X006010Y005710D01*
+X006045Y005693D01*
+X006078Y005672D01*
+X006108Y005647D01*
+X006136Y005620D01*
+X006161Y005590D01*
+X006183Y005558D01*
+X006201Y005524D01*
+X006216Y005488D01*
+X006228Y005451D01*
+X006236Y005413D01*
+X006240Y005374D01*
+X006240Y005336D01*
+X006236Y005297D01*
+X006228Y005259D01*
+X006216Y005222D01*
+X006201Y005186D01*
+X006183Y005152D01*
+X006161Y005120D01*
+X006136Y005090D01*
+X006108Y005063D01*
+X006078Y005038D01*
+X006045Y005017D01*
+X006010Y005000D01*
+X005974Y004985D01*
+X005937Y004975D01*
+X005898Y004968D01*
+X005860Y004965D01*
+X005821Y004966D01*
+X005782Y004971D01*
+X005744Y004980D01*
+X005708Y004992D01*
+X005672Y005008D01*
+X005638Y005027D01*
+X005607Y005050D01*
+X005578Y005076D01*
+X005551Y005104D01*
+X005528Y005135D01*
+X005507Y005168D01*
+X005491Y005204D01*
+X005477Y005240D01*
+X005468Y005278D01*
+X005462Y005316D01*
+X005460Y005355D01*
+X005450Y004955D02*
+X006250Y005755D01*
+X005510Y004805D02*
+X005512Y004844D01*
+X005518Y004882D01*
+X005527Y004920D01*
+X005541Y004956D01*
+X005557Y004992D01*
+X005578Y005025D01*
+X005601Y005056D01*
+X005628Y005084D01*
+X005657Y005110D01*
+X005688Y005133D01*
+X005722Y005152D01*
+X005758Y005168D01*
+X005794Y005180D01*
+X005832Y005189D01*
+X005871Y005194D01*
+X005910Y005195D01*
+X005948Y005192D01*
+X005987Y005185D01*
+X006024Y005175D01*
+X006060Y005160D01*
+X006095Y005143D01*
+X006128Y005122D01*
+X006158Y005097D01*
+X006186Y005070D01*
+X006211Y005040D01*
+X006233Y005008D01*
+X006251Y004974D01*
+X006266Y004938D01*
+X006278Y004901D01*
+X006286Y004863D01*
+X006290Y004824D01*
+X006290Y004786D01*
+X006286Y004747D01*
+X006278Y004709D01*
+X006266Y004672D01*
+X006251Y004636D01*
+X006233Y004602D01*
+X006211Y004570D01*
+X006186Y004540D01*
+X006158Y004513D01*
+X006128Y004488D01*
+X006095Y004467D01*
+X006060Y004450D01*
+X006024Y004435D01*
+X005987Y004425D01*
+X005948Y004418D01*
+X005910Y004415D01*
+X005871Y004416D01*
+X005832Y004421D01*
+X005794Y004430D01*
+X005758Y004442D01*
+X005722Y004458D01*
+X005688Y004477D01*
+X005657Y004500D01*
+X005628Y004526D01*
+X005601Y004554D01*
+X005578Y004585D01*
+X005557Y004618D01*
+X005541Y004654D01*
+X005527Y004690D01*
+X005518Y004728D01*
+X005512Y004766D01*
+X005510Y004805D01*
+X005500Y004405D02*
+X006300Y005205D01*
+X004410Y004005D02*
+X004412Y004044D01*
+X004418Y004082D01*
+X004427Y004120D01*
+X004441Y004156D01*
+X004457Y004192D01*
+X004478Y004225D01*
+X004501Y004256D01*
+X004528Y004284D01*
+X004557Y004310D01*
+X004588Y004333D01*
+X004622Y004352D01*
+X004658Y004368D01*
+X004694Y004380D01*
+X004732Y004389D01*
+X004771Y004394D01*
+X004810Y004395D01*
+X004848Y004392D01*
+X004887Y004385D01*
+X004924Y004375D01*
+X004960Y004360D01*
+X004995Y004343D01*
+X005028Y004322D01*
+X005058Y004297D01*
+X005086Y004270D01*
+X005111Y004240D01*
+X005133Y004208D01*
+X005151Y004174D01*
+X005166Y004138D01*
+X005178Y004101D01*
+X005186Y004063D01*
+X005190Y004024D01*
+X005190Y003986D01*
+X005186Y003947D01*
+X005178Y003909D01*
+X005166Y003872D01*
+X005151Y003836D01*
+X005133Y003802D01*
+X005111Y003770D01*
+X005086Y003740D01*
+X005058Y003713D01*
+X005028Y003688D01*
+X004995Y003667D01*
+X004960Y003650D01*
+X004924Y003635D01*
+X004887Y003625D01*
+X004848Y003618D01*
+X004810Y003615D01*
+X004771Y003616D01*
+X004732Y003621D01*
+X004694Y003630D01*
+X004658Y003642D01*
+X004622Y003658D01*
+X004588Y003677D01*
+X004557Y003700D01*
+X004528Y003726D01*
+X004501Y003754D01*
+X004478Y003785D01*
+X004457Y003818D01*
+X004441Y003854D01*
+X004427Y003890D01*
+X004418Y003928D01*
+X004412Y003966D01*
+X004410Y004005D01*
+X004400Y003605D02*
+X005200Y004405D01*
+X003910Y003605D02*
+X003912Y003644D01*
+X003918Y003682D01*
+X003927Y003720D01*
+X003941Y003756D01*
+X003957Y003792D01*
+X003978Y003825D01*
+X004001Y003856D01*
+X004028Y003884D01*
+X004057Y003910D01*
+X004088Y003933D01*
+X004122Y003952D01*
+X004158Y003968D01*
+X004194Y003980D01*
+X004232Y003989D01*
+X004271Y003994D01*
+X004310Y003995D01*
+X004348Y003992D01*
+X004387Y003985D01*
+X004424Y003975D01*
+X004460Y003960D01*
+X004495Y003943D01*
+X004528Y003922D01*
+X004558Y003897D01*
+X004586Y003870D01*
+X004611Y003840D01*
+X004633Y003808D01*
+X004651Y003774D01*
+X004666Y003738D01*
+X004678Y003701D01*
+X004686Y003663D01*
+X004690Y003624D01*
+X004690Y003586D01*
+X004686Y003547D01*
+X004678Y003509D01*
+X004666Y003472D01*
+X004651Y003436D01*
+X004633Y003402D01*
+X004611Y003370D01*
+X004586Y003340D01*
+X004558Y003313D01*
+X004528Y003288D01*
+X004495Y003267D01*
+X004460Y003250D01*
+X004424Y003235D01*
+X004387Y003225D01*
+X004348Y003218D01*
+X004310Y003215D01*
+X004271Y003216D01*
+X004232Y003221D01*
+X004194Y003230D01*
+X004158Y003242D01*
+X004122Y003258D01*
+X004088Y003277D01*
+X004057Y003300D01*
+X004028Y003326D01*
+X004001Y003354D01*
+X003978Y003385D01*
+X003957Y003418D01*
+X003941Y003454D01*
+X003927Y003490D01*
+X003918Y003528D01*
+X003912Y003566D01*
+X003910Y003605D01*
+X003900Y003205D02*
+X004700Y004005D01*
+X002310Y003155D02*
+X002312Y003194D01*
+X002318Y003232D01*
+X002327Y003270D01*
+X002341Y003306D01*
+X002357Y003342D01*
+X002378Y003375D01*
+X002401Y003406D01*
+X002428Y003434D01*
+X002457Y003460D01*
+X002488Y003483D01*
+X002522Y003502D01*
+X002558Y003518D01*
+X002594Y003530D01*
+X002632Y003539D01*
+X002671Y003544D01*
+X002710Y003545D01*
+X002748Y003542D01*
+X002787Y003535D01*
+X002824Y003525D01*
+X002860Y003510D01*
+X002895Y003493D01*
+X002928Y003472D01*
+X002958Y003447D01*
+X002986Y003420D01*
+X003011Y003390D01*
+X003033Y003358D01*
+X003051Y003324D01*
+X003066Y003288D01*
+X003078Y003251D01*
+X003086Y003213D01*
+X003090Y003174D01*
+X003090Y003136D01*
+X003086Y003097D01*
+X003078Y003059D01*
+X003066Y003022D01*
+X003051Y002986D01*
+X003033Y002952D01*
+X003011Y002920D01*
+X002986Y002890D01*
+X002958Y002863D01*
+X002928Y002838D01*
+X002895Y002817D01*
+X002860Y002800D01*
+X002824Y002785D01*
+X002787Y002775D01*
+X002748Y002768D01*
+X002710Y002765D01*
+X002671Y002766D01*
+X002632Y002771D01*
+X002594Y002780D01*
+X002558Y002792D01*
+X002522Y002808D01*
+X002488Y002827D01*
+X002457Y002850D01*
+X002428Y002876D01*
+X002401Y002904D01*
+X002378Y002935D01*
+X002357Y002968D01*
+X002341Y003004D01*
+X002327Y003040D01*
+X002318Y003078D01*
+X002312Y003116D01*
+X002310Y003155D01*
+X002300Y002755D02*
+X003100Y003555D01*
+X001910Y003855D02*
+X001912Y003894D01*
+X001918Y003932D01*
+X001927Y003970D01*
+X001941Y004006D01*
+X001957Y004042D01*
+X001978Y004075D01*
+X002001Y004106D01*
+X002028Y004134D01*
+X002057Y004160D01*
+X002088Y004183D01*
+X002122Y004202D01*
+X002158Y004218D01*
+X002194Y004230D01*
+X002232Y004239D01*
+X002271Y004244D01*
+X002310Y004245D01*
+X002348Y004242D01*
+X002387Y004235D01*
+X002424Y004225D01*
+X002460Y004210D01*
+X002495Y004193D01*
+X002528Y004172D01*
+X002558Y004147D01*
+X002586Y004120D01*
+X002611Y004090D01*
+X002633Y004058D01*
+X002651Y004024D01*
+X002666Y003988D01*
+X002678Y003951D01*
+X002686Y003913D01*
+X002690Y003874D01*
+X002690Y003836D01*
+X002686Y003797D01*
+X002678Y003759D01*
+X002666Y003722D01*
+X002651Y003686D01*
+X002633Y003652D01*
+X002611Y003620D01*
+X002586Y003590D01*
+X002558Y003563D01*
+X002528Y003538D01*
+X002495Y003517D01*
+X002460Y003500D01*
+X002424Y003485D01*
+X002387Y003475D01*
+X002348Y003468D01*
+X002310Y003465D01*
+X002271Y003466D01*
+X002232Y003471D01*
+X002194Y003480D01*
+X002158Y003492D01*
+X002122Y003508D01*
+X002088Y003527D01*
+X002057Y003550D01*
+X002028Y003576D01*
+X002001Y003604D01*
+X001978Y003635D01*
+X001957Y003668D01*
+X001941Y003704D01*
+X001927Y003740D01*
+X001918Y003778D01*
+X001912Y003816D01*
+X001910Y003855D01*
+X001900Y003455D02*
+X002700Y004255D01*
+X006110Y002305D02*
+X006112Y002344D01*
+X006118Y002382D01*
+X006127Y002420D01*
+X006141Y002456D01*
+X006157Y002492D01*
+X006178Y002525D01*
+X006201Y002556D01*
+X006228Y002584D01*
+X006257Y002610D01*
+X006288Y002633D01*
+X006322Y002652D01*
+X006358Y002668D01*
+X006394Y002680D01*
+X006432Y002689D01*
+X006471Y002694D01*
+X006510Y002695D01*
+X006548Y002692D01*
+X006587Y002685D01*
+X006624Y002675D01*
+X006660Y002660D01*
+X006695Y002643D01*
+X006728Y002622D01*
+X006758Y002597D01*
+X006786Y002570D01*
+X006811Y002540D01*
+X006833Y002508D01*
+X006851Y002474D01*
+X006866Y002438D01*
+X006878Y002401D01*
+X006886Y002363D01*
+X006890Y002324D01*
+X006890Y002286D01*
+X006886Y002247D01*
+X006878Y002209D01*
+X006866Y002172D01*
+X006851Y002136D01*
+X006833Y002102D01*
+X006811Y002070D01*
+X006786Y002040D01*
+X006758Y002013D01*
+X006728Y001988D01*
+X006695Y001967D01*
+X006660Y001950D01*
+X006624Y001935D01*
+X006587Y001925D01*
+X006548Y001918D01*
+X006510Y001915D01*
+X006471Y001916D01*
+X006432Y001921D01*
+X006394Y001930D01*
+X006358Y001942D01*
+X006322Y001958D01*
+X006288Y001977D01*
+X006257Y002000D01*
+X006228Y002026D01*
+X006201Y002054D01*
+X006178Y002085D01*
+X006157Y002118D01*
+X006141Y002154D01*
+X006127Y002190D01*
+X006118Y002228D01*
+X006112Y002266D01*
+X006110Y002305D01*
+X006100Y001905D02*
+X006900Y002705D01*
+X008160Y003255D02*
+X008162Y003294D01*
+X008168Y003332D01*
+X008177Y003370D01*
+X008191Y003406D01*
+X008207Y003442D01*
+X008228Y003475D01*
+X008251Y003506D01*
+X008278Y003534D01*
+X008307Y003560D01*
+X008338Y003583D01*
+X008372Y003602D01*
+X008408Y003618D01*
+X008444Y003630D01*
+X008482Y003639D01*
+X008521Y003644D01*
+X008560Y003645D01*
+X008598Y003642D01*
+X008637Y003635D01*
+X008674Y003625D01*
+X008710Y003610D01*
+X008745Y003593D01*
+X008778Y003572D01*
+X008808Y003547D01*
+X008836Y003520D01*
+X008861Y003490D01*
+X008883Y003458D01*
+X008901Y003424D01*
+X008916Y003388D01*
+X008928Y003351D01*
+X008936Y003313D01*
+X008940Y003274D01*
+X008940Y003236D01*
+X008936Y003197D01*
+X008928Y003159D01*
+X008916Y003122D01*
+X008901Y003086D01*
+X008883Y003052D01*
+X008861Y003020D01*
+X008836Y002990D01*
+X008808Y002963D01*
+X008778Y002938D01*
+X008745Y002917D01*
+X008710Y002900D01*
+X008674Y002885D01*
+X008637Y002875D01*
+X008598Y002868D01*
+X008560Y002865D01*
+X008521Y002866D01*
+X008482Y002871D01*
+X008444Y002880D01*
+X008408Y002892D01*
+X008372Y002908D01*
+X008338Y002927D01*
+X008307Y002950D01*
+X008278Y002976D01*
+X008251Y003004D01*
+X008228Y003035D01*
+X008207Y003068D01*
+X008191Y003104D01*
+X008177Y003140D01*
+X008168Y003178D01*
+X008162Y003216D01*
+X008160Y003255D01*
+X008150Y002855D02*
+X008950Y003655D01*
+X009310Y003355D02*
+X009312Y003394D01*
+X009318Y003432D01*
+X009327Y003470D01*
+X009341Y003506D01*
+X009357Y003542D01*
+X009378Y003575D01*
+X009401Y003606D01*
+X009428Y003634D01*
+X009457Y003660D01*
+X009488Y003683D01*
+X009522Y003702D01*
+X009558Y003718D01*
+X009594Y003730D01*
+X009632Y003739D01*
+X009671Y003744D01*
+X009710Y003745D01*
+X009748Y003742D01*
+X009787Y003735D01*
+X009824Y003725D01*
+X009860Y003710D01*
+X009895Y003693D01*
+X009928Y003672D01*
+X009958Y003647D01*
+X009986Y003620D01*
+X010011Y003590D01*
+X010033Y003558D01*
+X010051Y003524D01*
+X010066Y003488D01*
+X010078Y003451D01*
+X010086Y003413D01*
+X010090Y003374D01*
+X010090Y003336D01*
+X010086Y003297D01*
+X010078Y003259D01*
+X010066Y003222D01*
+X010051Y003186D01*
+X010033Y003152D01*
+X010011Y003120D01*
+X009986Y003090D01*
+X009958Y003063D01*
+X009928Y003038D01*
+X009895Y003017D01*
+X009860Y003000D01*
+X009824Y002985D01*
+X009787Y002975D01*
+X009748Y002968D01*
+X009710Y002965D01*
+X009671Y002966D01*
+X009632Y002971D01*
+X009594Y002980D01*
+X009558Y002992D01*
+X009522Y003008D01*
+X009488Y003027D01*
+X009457Y003050D01*
+X009428Y003076D01*
+X009401Y003104D01*
+X009378Y003135D01*
+X009357Y003168D01*
+X009341Y003204D01*
+X009327Y003240D01*
+X009318Y003278D01*
+X009312Y003316D01*
+X009310Y003355D01*
+X009300Y002955D02*
+X010100Y003755D01*
+X009860Y003305D02*
+X009862Y003344D01*
+X009868Y003382D01*
+X009877Y003420D01*
+X009891Y003456D01*
+X009907Y003492D01*
+X009928Y003525D01*
+X009951Y003556D01*
+X009978Y003584D01*
+X010007Y003610D01*
+X010038Y003633D01*
+X010072Y003652D01*
+X010108Y003668D01*
+X010144Y003680D01*
+X010182Y003689D01*
+X010221Y003694D01*
+X010260Y003695D01*
+X010298Y003692D01*
+X010337Y003685D01*
+X010374Y003675D01*
+X010410Y003660D01*
+X010445Y003643D01*
+X010478Y003622D01*
+X010508Y003597D01*
+X010536Y003570D01*
+X010561Y003540D01*
+X010583Y003508D01*
+X010601Y003474D01*
+X010616Y003438D01*
+X010628Y003401D01*
+X010636Y003363D01*
+X010640Y003324D01*
+X010640Y003286D01*
+X010636Y003247D01*
+X010628Y003209D01*
+X010616Y003172D01*
+X010601Y003136D01*
+X010583Y003102D01*
+X010561Y003070D01*
+X010536Y003040D01*
+X010508Y003013D01*
+X010478Y002988D01*
+X010445Y002967D01*
+X010410Y002950D01*
+X010374Y002935D01*
+X010337Y002925D01*
+X010298Y002918D01*
+X010260Y002915D01*
+X010221Y002916D01*
+X010182Y002921D01*
+X010144Y002930D01*
+X010108Y002942D01*
+X010072Y002958D01*
+X010038Y002977D01*
+X010007Y003000D01*
+X009978Y003026D01*
+X009951Y003054D01*
+X009928Y003085D01*
+X009907Y003118D01*
+X009891Y003154D01*
+X009877Y003190D01*
+X009868Y003228D01*
+X009862Y003266D01*
+X009860Y003305D01*
+X009850Y002905D02*
+X010650Y003705D01*
+X011160Y004305D02*
+X011162Y004344D01*
+X011168Y004382D01*
+X011177Y004420D01*
+X011191Y004456D01*
+X011207Y004492D01*
+X011228Y004525D01*
+X011251Y004556D01*
+X011278Y004584D01*
+X011307Y004610D01*
+X011338Y004633D01*
+X011372Y004652D01*
+X011408Y004668D01*
+X011444Y004680D01*
+X011482Y004689D01*
+X011521Y004694D01*
+X011560Y004695D01*
+X011598Y004692D01*
+X011637Y004685D01*
+X011674Y004675D01*
+X011710Y004660D01*
+X011745Y004643D01*
+X011778Y004622D01*
+X011808Y004597D01*
+X011836Y004570D01*
+X011861Y004540D01*
+X011883Y004508D01*
+X011901Y004474D01*
+X011916Y004438D01*
+X011928Y004401D01*
+X011936Y004363D01*
+X011940Y004324D01*
+X011940Y004286D01*
+X011936Y004247D01*
+X011928Y004209D01*
+X011916Y004172D01*
+X011901Y004136D01*
+X011883Y004102D01*
+X011861Y004070D01*
+X011836Y004040D01*
+X011808Y004013D01*
+X011778Y003988D01*
+X011745Y003967D01*
+X011710Y003950D01*
+X011674Y003935D01*
+X011637Y003925D01*
+X011598Y003918D01*
+X011560Y003915D01*
+X011521Y003916D01*
+X011482Y003921D01*
+X011444Y003930D01*
+X011408Y003942D01*
+X011372Y003958D01*
+X011338Y003977D01*
+X011307Y004000D01*
+X011278Y004026D01*
+X011251Y004054D01*
+X011228Y004085D01*
+X011207Y004118D01*
+X011191Y004154D01*
+X011177Y004190D01*
+X011168Y004228D01*
+X011162Y004266D01*
+X011160Y004305D01*
+X011150Y003905D02*
+X011950Y004705D01*
+X011610Y004305D02*
+X011612Y004344D01*
+X011618Y004382D01*
+X011627Y004420D01*
+X011641Y004456D01*
+X011657Y004492D01*
+X011678Y004525D01*
+X011701Y004556D01*
+X011728Y004584D01*
+X011757Y004610D01*
+X011788Y004633D01*
+X011822Y004652D01*
+X011858Y004668D01*
+X011894Y004680D01*
+X011932Y004689D01*
+X011971Y004694D01*
+X012010Y004695D01*
+X012048Y004692D01*
+X012087Y004685D01*
+X012124Y004675D01*
+X012160Y004660D01*
+X012195Y004643D01*
+X012228Y004622D01*
+X012258Y004597D01*
+X012286Y004570D01*
+X012311Y004540D01*
+X012333Y004508D01*
+X012351Y004474D01*
+X012366Y004438D01*
+X012378Y004401D01*
+X012386Y004363D01*
+X012390Y004324D01*
+X012390Y004286D01*
+X012386Y004247D01*
+X012378Y004209D01*
+X012366Y004172D01*
+X012351Y004136D01*
+X012333Y004102D01*
+X012311Y004070D01*
+X012286Y004040D01*
+X012258Y004013D01*
+X012228Y003988D01*
+X012195Y003967D01*
+X012160Y003950D01*
+X012124Y003935D01*
+X012087Y003925D01*
+X012048Y003918D01*
+X012010Y003915D01*
+X011971Y003916D01*
+X011932Y003921D01*
+X011894Y003930D01*
+X011858Y003942D01*
+X011822Y003958D01*
+X011788Y003977D01*
+X011757Y004000D01*
+X011728Y004026D01*
+X011701Y004054D01*
+X011678Y004085D01*
+X011657Y004118D01*
+X011641Y004154D01*
+X011627Y004190D01*
+X011618Y004228D01*
+X011612Y004266D01*
+X011610Y004305D01*
+X011600Y003905D02*
+X012400Y004705D01*
+X013060Y002605D02*
+X013062Y002644D01*
+X013068Y002682D01*
+X013077Y002720D01*
+X013091Y002756D01*
+X013107Y002792D01*
+X013128Y002825D01*
+X013151Y002856D01*
+X013178Y002884D01*
+X013207Y002910D01*
+X013238Y002933D01*
+X013272Y002952D01*
+X013308Y002968D01*
+X013344Y002980D01*
+X013382Y002989D01*
+X013421Y002994D01*
+X013460Y002995D01*
+X013498Y002992D01*
+X013537Y002985D01*
+X013574Y002975D01*
+X013610Y002960D01*
+X013645Y002943D01*
+X013678Y002922D01*
+X013708Y002897D01*
+X013736Y002870D01*
+X013761Y002840D01*
+X013783Y002808D01*
+X013801Y002774D01*
+X013816Y002738D01*
+X013828Y002701D01*
+X013836Y002663D01*
+X013840Y002624D01*
+X013840Y002586D01*
+X013836Y002547D01*
+X013828Y002509D01*
+X013816Y002472D01*
+X013801Y002436D01*
+X013783Y002402D01*
+X013761Y002370D01*
+X013736Y002340D01*
+X013708Y002313D01*
+X013678Y002288D01*
+X013645Y002267D01*
+X013610Y002250D01*
+X013574Y002235D01*
+X013537Y002225D01*
+X013498Y002218D01*
+X013460Y002215D01*
+X013421Y002216D01*
+X013382Y002221D01*
+X013344Y002230D01*
+X013308Y002242D01*
+X013272Y002258D01*
+X013238Y002277D01*
+X013207Y002300D01*
+X013178Y002326D01*
+X013151Y002354D01*
+X013128Y002385D01*
+X013107Y002418D01*
+X013091Y002454D01*
+X013077Y002490D01*
+X013068Y002528D01*
+X013062Y002566D01*
+X013060Y002605D01*
+X013050Y002205D02*
+X013850Y003005D01*
+X011610Y001455D02*
+X011612Y001494D01*
+X011618Y001532D01*
+X011627Y001570D01*
+X011641Y001606D01*
+X011657Y001642D01*
+X011678Y001675D01*
+X011701Y001706D01*
+X011728Y001734D01*
+X011757Y001760D01*
+X011788Y001783D01*
+X011822Y001802D01*
+X011858Y001818D01*
+X011894Y001830D01*
+X011932Y001839D01*
+X011971Y001844D01*
+X012010Y001845D01*
+X012048Y001842D01*
+X012087Y001835D01*
+X012124Y001825D01*
+X012160Y001810D01*
+X012195Y001793D01*
+X012228Y001772D01*
+X012258Y001747D01*
+X012286Y001720D01*
+X012311Y001690D01*
+X012333Y001658D01*
+X012351Y001624D01*
+X012366Y001588D01*
+X012378Y001551D01*
+X012386Y001513D01*
+X012390Y001474D01*
+X012390Y001436D01*
+X012386Y001397D01*
+X012378Y001359D01*
+X012366Y001322D01*
+X012351Y001286D01*
+X012333Y001252D01*
+X012311Y001220D01*
+X012286Y001190D01*
+X012258Y001163D01*
+X012228Y001138D01*
+X012195Y001117D01*
+X012160Y001100D01*
+X012124Y001085D01*
+X012087Y001075D01*
+X012048Y001068D01*
+X012010Y001065D01*
+X011971Y001066D01*
+X011932Y001071D01*
+X011894Y001080D01*
+X011858Y001092D01*
+X011822Y001108D01*
+X011788Y001127D01*
+X011757Y001150D01*
+X011728Y001176D01*
+X011701Y001204D01*
+X011678Y001235D01*
+X011657Y001268D01*
+X011641Y001304D01*
+X011627Y001340D01*
+X011618Y001378D01*
+X011612Y001416D01*
+X011610Y001455D01*
+X011600Y001055D02*
+X012400Y001855D01*
+X011010Y002555D02*
+X011012Y002594D01*
+X011018Y002632D01*
+X011027Y002670D01*
+X011041Y002706D01*
+X011057Y002742D01*
+X011078Y002775D01*
+X011101Y002806D01*
+X011128Y002834D01*
+X011157Y002860D01*
+X011188Y002883D01*
+X011222Y002902D01*
+X011258Y002918D01*
+X011294Y002930D01*
+X011332Y002939D01*
+X011371Y002944D01*
+X011410Y002945D01*
+X011448Y002942D01*
+X011487Y002935D01*
+X011524Y002925D01*
+X011560Y002910D01*
+X011595Y002893D01*
+X011628Y002872D01*
+X011658Y002847D01*
+X011686Y002820D01*
+X011711Y002790D01*
+X011733Y002758D01*
+X011751Y002724D01*
+X011766Y002688D01*
+X011778Y002651D01*
+X011786Y002613D01*
+X011790Y002574D01*
+X011790Y002536D01*
+X011786Y002497D01*
+X011778Y002459D01*
+X011766Y002422D01*
+X011751Y002386D01*
+X011733Y002352D01*
+X011711Y002320D01*
+X011686Y002290D01*
+X011658Y002263D01*
+X011628Y002238D01*
+X011595Y002217D01*
+X011560Y002200D01*
+X011524Y002185D01*
+X011487Y002175D01*
+X011448Y002168D01*
+X011410Y002165D01*
+X011371Y002166D01*
+X011332Y002171D01*
+X011294Y002180D01*
+X011258Y002192D01*
+X011222Y002208D01*
+X011188Y002227D01*
+X011157Y002250D01*
+X011128Y002276D01*
+X011101Y002304D01*
+X011078Y002335D01*
+X011057Y002368D01*
+X011041Y002404D01*
+X011027Y002440D01*
+X011018Y002478D01*
+X011012Y002516D01*
+X011010Y002555D01*
+X011000Y002155D02*
+X011800Y002955D01*
+X010510Y001805D02*
+X010512Y001844D01*
+X010518Y001882D01*
+X010527Y001920D01*
+X010541Y001956D01*
+X010557Y001992D01*
+X010578Y002025D01*
+X010601Y002056D01*
+X010628Y002084D01*
+X010657Y002110D01*
+X010688Y002133D01*
+X010722Y002152D01*
+X010758Y002168D01*
+X010794Y002180D01*
+X010832Y002189D01*
+X010871Y002194D01*
+X010910Y002195D01*
+X010948Y002192D01*
+X010987Y002185D01*
+X011024Y002175D01*
+X011060Y002160D01*
+X011095Y002143D01*
+X011128Y002122D01*
+X011158Y002097D01*
+X011186Y002070D01*
+X011211Y002040D01*
+X011233Y002008D01*
+X011251Y001974D01*
+X011266Y001938D01*
+X011278Y001901D01*
+X011286Y001863D01*
+X011290Y001824D01*
+X011290Y001786D01*
+X011286Y001747D01*
+X011278Y001709D01*
+X011266Y001672D01*
+X011251Y001636D01*
+X011233Y001602D01*
+X011211Y001570D01*
+X011186Y001540D01*
+X011158Y001513D01*
+X011128Y001488D01*
+X011095Y001467D01*
+X011060Y001450D01*
+X011024Y001435D01*
+X010987Y001425D01*
+X010948Y001418D01*
+X010910Y001415D01*
+X010871Y001416D01*
+X010832Y001421D01*
+X010794Y001430D01*
+X010758Y001442D01*
+X010722Y001458D01*
+X010688Y001477D01*
+X010657Y001500D01*
+X010628Y001526D01*
+X010601Y001554D01*
+X010578Y001585D01*
+X010557Y001618D01*
+X010541Y001654D01*
+X010527Y001690D01*
+X010518Y001728D01*
+X010512Y001766D01*
+X010510Y001805D01*
+X010500Y001405D02*
+X011300Y002205D01*
+X010110Y001655D02*
+X010112Y001694D01*
+X010118Y001732D01*
+X010127Y001770D01*
+X010141Y001806D01*
+X010157Y001842D01*
+X010178Y001875D01*
+X010201Y001906D01*
+X010228Y001934D01*
+X010257Y001960D01*
+X010288Y001983D01*
+X010322Y002002D01*
+X010358Y002018D01*
+X010394Y002030D01*
+X010432Y002039D01*
+X010471Y002044D01*
+X010510Y002045D01*
+X010548Y002042D01*
+X010587Y002035D01*
+X010624Y002025D01*
+X010660Y002010D01*
+X010695Y001993D01*
+X010728Y001972D01*
+X010758Y001947D01*
+X010786Y001920D01*
+X010811Y001890D01*
+X010833Y001858D01*
+X010851Y001824D01*
+X010866Y001788D01*
+X010878Y001751D01*
+X010886Y001713D01*
+X010890Y001674D01*
+X010890Y001636D01*
+X010886Y001597D01*
+X010878Y001559D01*
+X010866Y001522D01*
+X010851Y001486D01*
+X010833Y001452D01*
+X010811Y001420D01*
+X010786Y001390D01*
+X010758Y001363D01*
+X010728Y001338D01*
+X010695Y001317D01*
+X010660Y001300D01*
+X010624Y001285D01*
+X010587Y001275D01*
+X010548Y001268D01*
+X010510Y001265D01*
+X010471Y001266D01*
+X010432Y001271D01*
+X010394Y001280D01*
+X010358Y001292D01*
+X010322Y001308D01*
+X010288Y001327D01*
+X010257Y001350D01*
+X010228Y001376D01*
+X010201Y001404D01*
+X010178Y001435D01*
+X010157Y001468D01*
+X010141Y001504D01*
+X010127Y001540D01*
+X010118Y001578D01*
+X010112Y001616D01*
+X010110Y001655D01*
+X010100Y001255D02*
+X010900Y002055D01*
+X010360Y001255D02*
+X010362Y001294D01*
+X010368Y001332D01*
+X010377Y001370D01*
+X010391Y001406D01*
+X010407Y001442D01*
+X010428Y001475D01*
+X010451Y001506D01*
+X010478Y001534D01*
+X010507Y001560D01*
+X010538Y001583D01*
+X010572Y001602D01*
+X010608Y001618D01*
+X010644Y001630D01*
+X010682Y001639D01*
+X010721Y001644D01*
+X010760Y001645D01*
+X010798Y001642D01*
+X010837Y001635D01*
+X010874Y001625D01*
+X010910Y001610D01*
+X010945Y001593D01*
+X010978Y001572D01*
+X011008Y001547D01*
+X011036Y001520D01*
+X011061Y001490D01*
+X011083Y001458D01*
+X011101Y001424D01*
+X011116Y001388D01*
+X011128Y001351D01*
+X011136Y001313D01*
+X011140Y001274D01*
+X011140Y001236D01*
+X011136Y001197D01*
+X011128Y001159D01*
+X011116Y001122D01*
+X011101Y001086D01*
+X011083Y001052D01*
+X011061Y001020D01*
+X011036Y000990D01*
+X011008Y000963D01*
+X010978Y000938D01*
+X010945Y000917D01*
+X010910Y000900D01*
+X010874Y000885D01*
+X010837Y000875D01*
+X010798Y000868D01*
+X010760Y000865D01*
+X010721Y000866D01*
+X010682Y000871D01*
+X010644Y000880D01*
+X010608Y000892D01*
+X010572Y000908D01*
+X010538Y000927D01*
+X010507Y000950D01*
+X010478Y000976D01*
+X010451Y001004D01*
+X010428Y001035D01*
+X010407Y001068D01*
+X010391Y001104D01*
+X010377Y001140D01*
+X010368Y001178D01*
+X010362Y001216D01*
+X010360Y001255D01*
+X010350Y000855D02*
+X011150Y001655D01*
+X011010Y001105D02*
+X011012Y001144D01*
+X011018Y001182D01*
+X011027Y001220D01*
+X011041Y001256D01*
+X011057Y001292D01*
+X011078Y001325D01*
+X011101Y001356D01*
+X011128Y001384D01*
+X011157Y001410D01*
+X011188Y001433D01*
+X011222Y001452D01*
+X011258Y001468D01*
+X011294Y001480D01*
+X011332Y001489D01*
+X011371Y001494D01*
+X011410Y001495D01*
+X011448Y001492D01*
+X011487Y001485D01*
+X011524Y001475D01*
+X011560Y001460D01*
+X011595Y001443D01*
+X011628Y001422D01*
+X011658Y001397D01*
+X011686Y001370D01*
+X011711Y001340D01*
+X011733Y001308D01*
+X011751Y001274D01*
+X011766Y001238D01*
+X011778Y001201D01*
+X011786Y001163D01*
+X011790Y001124D01*
+X011790Y001086D01*
+X011786Y001047D01*
+X011778Y001009D01*
+X011766Y000972D01*
+X011751Y000936D01*
+X011733Y000902D01*
+X011711Y000870D01*
+X011686Y000840D01*
+X011658Y000813D01*
+X011628Y000788D01*
+X011595Y000767D01*
+X011560Y000750D01*
+X011524Y000735D01*
+X011487Y000725D01*
+X011448Y000718D01*
+X011410Y000715D01*
+X011371Y000716D01*
+X011332Y000721D01*
+X011294Y000730D01*
+X011258Y000742D01*
+X011222Y000758D01*
+X011188Y000777D01*
+X011157Y000800D01*
+X011128Y000826D01*
+X011101Y000854D01*
+X011078Y000885D01*
+X011057Y000918D01*
+X011041Y000954D01*
+X011027Y000990D01*
+X011018Y001028D01*
+X011012Y001066D01*
+X011010Y001105D01*
+X011000Y000705D02*
+X011800Y001505D01*
+X011860Y000505D02*
+X011862Y000544D01*
+X011868Y000582D01*
+X011877Y000620D01*
+X011891Y000656D01*
+X011907Y000692D01*
+X011928Y000725D01*
+X011951Y000756D01*
+X011978Y000784D01*
+X012007Y000810D01*
+X012038Y000833D01*
+X012072Y000852D01*
+X012108Y000868D01*
+X012144Y000880D01*
+X012182Y000889D01*
+X012221Y000894D01*
+X012260Y000895D01*
+X012298Y000892D01*
+X012337Y000885D01*
+X012374Y000875D01*
+X012410Y000860D01*
+X012445Y000843D01*
+X012478Y000822D01*
+X012508Y000797D01*
+X012536Y000770D01*
+X012561Y000740D01*
+X012583Y000708D01*
+X012601Y000674D01*
+X012616Y000638D01*
+X012628Y000601D01*
+X012636Y000563D01*
+X012640Y000524D01*
+X012640Y000486D01*
+X012636Y000447D01*
+X012628Y000409D01*
+X012616Y000372D01*
+X012601Y000336D01*
+X012583Y000302D01*
+X012561Y000270D01*
+X012536Y000240D01*
+X012508Y000213D01*
+X012478Y000188D01*
+X012445Y000167D01*
+X012410Y000150D01*
+X012374Y000135D01*
+X012337Y000125D01*
+X012298Y000118D01*
+X012260Y000115D01*
+X012221Y000116D01*
+X012182Y000121D01*
+X012144Y000130D01*
+X012108Y000142D01*
+X012072Y000158D01*
+X012038Y000177D01*
+X012007Y000200D01*
+X011978Y000226D01*
+X011951Y000254D01*
+X011928Y000285D01*
+X011907Y000318D01*
+X011891Y000354D01*
+X011877Y000390D01*
+X011868Y000428D01*
+X011862Y000466D01*
+X011860Y000505D01*
+X011850Y000105D02*
+X012650Y000905D01*
+X008460Y001355D02*
+X008462Y001394D01*
+X008468Y001432D01*
+X008477Y001470D01*
+X008491Y001506D01*
+X008507Y001542D01*
+X008528Y001575D01*
+X008551Y001606D01*
+X008578Y001634D01*
+X008607Y001660D01*
+X008638Y001683D01*
+X008672Y001702D01*
+X008708Y001718D01*
+X008744Y001730D01*
+X008782Y001739D01*
+X008821Y001744D01*
+X008860Y001745D01*
+X008898Y001742D01*
+X008937Y001735D01*
+X008974Y001725D01*
+X009010Y001710D01*
+X009045Y001693D01*
+X009078Y001672D01*
+X009108Y001647D01*
+X009136Y001620D01*
+X009161Y001590D01*
+X009183Y001558D01*
+X009201Y001524D01*
+X009216Y001488D01*
+X009228Y001451D01*
+X009236Y001413D01*
+X009240Y001374D01*
+X009240Y001336D01*
+X009236Y001297D01*
+X009228Y001259D01*
+X009216Y001222D01*
+X009201Y001186D01*
+X009183Y001152D01*
+X009161Y001120D01*
+X009136Y001090D01*
+X009108Y001063D01*
+X009078Y001038D01*
+X009045Y001017D01*
+X009010Y001000D01*
+X008974Y000985D01*
+X008937Y000975D01*
+X008898Y000968D01*
+X008860Y000965D01*
+X008821Y000966D01*
+X008782Y000971D01*
+X008744Y000980D01*
+X008708Y000992D01*
+X008672Y001008D01*
+X008638Y001027D01*
+X008607Y001050D01*
+X008578Y001076D01*
+X008551Y001104D01*
+X008528Y001135D01*
+X008507Y001168D01*
+X008491Y001204D01*
+X008477Y001240D01*
+X008468Y001278D01*
+X008462Y001316D01*
+X008460Y001355D01*
+X008450Y000955D02*
+X009250Y001755D01*
+X007060Y001455D02*
+X007062Y001494D01*
+X007068Y001532D01*
+X007077Y001570D01*
+X007091Y001606D01*
+X007107Y001642D01*
+X007128Y001675D01*
+X007151Y001706D01*
+X007178Y001734D01*
+X007207Y001760D01*
+X007238Y001783D01*
+X007272Y001802D01*
+X007308Y001818D01*
+X007344Y001830D01*
+X007382Y001839D01*
+X007421Y001844D01*
+X007460Y001845D01*
+X007498Y001842D01*
+X007537Y001835D01*
+X007574Y001825D01*
+X007610Y001810D01*
+X007645Y001793D01*
+X007678Y001772D01*
+X007708Y001747D01*
+X007736Y001720D01*
+X007761Y001690D01*
+X007783Y001658D01*
+X007801Y001624D01*
+X007816Y001588D01*
+X007828Y001551D01*
+X007836Y001513D01*
+X007840Y001474D01*
+X007840Y001436D01*
+X007836Y001397D01*
+X007828Y001359D01*
+X007816Y001322D01*
+X007801Y001286D01*
+X007783Y001252D01*
+X007761Y001220D01*
+X007736Y001190D01*
+X007708Y001163D01*
+X007678Y001138D01*
+X007645Y001117D01*
+X007610Y001100D01*
+X007574Y001085D01*
+X007537Y001075D01*
+X007498Y001068D01*
+X007460Y001065D01*
+X007421Y001066D01*
+X007382Y001071D01*
+X007344Y001080D01*
+X007308Y001092D01*
+X007272Y001108D01*
+X007238Y001127D01*
+X007207Y001150D01*
+X007178Y001176D01*
+X007151Y001204D01*
+X007128Y001235D01*
+X007107Y001268D01*
+X007091Y001304D01*
+X007077Y001340D01*
+X007068Y001378D01*
+X007062Y001416D01*
+X007060Y001455D01*
+X007050Y001055D02*
+X007850Y001855D01*
+X005610Y001205D02*
+X005612Y001244D01*
+X005618Y001282D01*
+X005627Y001320D01*
+X005641Y001356D01*
+X005657Y001392D01*
+X005678Y001425D01*
+X005701Y001456D01*
+X005728Y001484D01*
+X005757Y001510D01*
+X005788Y001533D01*
+X005822Y001552D01*
+X005858Y001568D01*
+X005894Y001580D01*
+X005932Y001589D01*
+X005971Y001594D01*
+X006010Y001595D01*
+X006048Y001592D01*
+X006087Y001585D01*
+X006124Y001575D01*
+X006160Y001560D01*
+X006195Y001543D01*
+X006228Y001522D01*
+X006258Y001497D01*
+X006286Y001470D01*
+X006311Y001440D01*
+X006333Y001408D01*
+X006351Y001374D01*
+X006366Y001338D01*
+X006378Y001301D01*
+X006386Y001263D01*
+X006390Y001224D01*
+X006390Y001186D01*
+X006386Y001147D01*
+X006378Y001109D01*
+X006366Y001072D01*
+X006351Y001036D01*
+X006333Y001002D01*
+X006311Y000970D01*
+X006286Y000940D01*
+X006258Y000913D01*
+X006228Y000888D01*
+X006195Y000867D01*
+X006160Y000850D01*
+X006124Y000835D01*
+X006087Y000825D01*
+X006048Y000818D01*
+X006010Y000815D01*
+X005971Y000816D01*
+X005932Y000821D01*
+X005894Y000830D01*
+X005858Y000842D01*
+X005822Y000858D01*
+X005788Y000877D01*
+X005757Y000900D01*
+X005728Y000926D01*
+X005701Y000954D01*
+X005678Y000985D01*
+X005657Y001018D01*
+X005641Y001054D01*
+X005627Y001090D01*
+X005618Y001128D01*
+X005612Y001166D01*
+X005610Y001205D01*
+X005600Y000805D02*
+X006400Y001605D01*
+X007760Y003955D02*
+X007762Y003994D01*
+X007768Y004032D01*
+X007777Y004070D01*
+X007791Y004106D01*
+X007807Y004142D01*
+X007828Y004175D01*
+X007851Y004206D01*
+X007878Y004234D01*
+X007907Y004260D01*
+X007938Y004283D01*
+X007972Y004302D01*
+X008008Y004318D01*
+X008044Y004330D01*
+X008082Y004339D01*
+X008121Y004344D01*
+X008160Y004345D01*
+X008198Y004342D01*
+X008237Y004335D01*
+X008274Y004325D01*
+X008310Y004310D01*
+X008345Y004293D01*
+X008378Y004272D01*
+X008408Y004247D01*
+X008436Y004220D01*
+X008461Y004190D01*
+X008483Y004158D01*
+X008501Y004124D01*
+X008516Y004088D01*
+X008528Y004051D01*
+X008536Y004013D01*
+X008540Y003974D01*
+X008540Y003936D01*
+X008536Y003897D01*
+X008528Y003859D01*
+X008516Y003822D01*
+X008501Y003786D01*
+X008483Y003752D01*
+X008461Y003720D01*
+X008436Y003690D01*
+X008408Y003663D01*
+X008378Y003638D01*
+X008345Y003617D01*
+X008310Y003600D01*
+X008274Y003585D01*
+X008237Y003575D01*
+X008198Y003568D01*
+X008160Y003565D01*
+X008121Y003566D01*
+X008082Y003571D01*
+X008044Y003580D01*
+X008008Y003592D01*
+X007972Y003608D01*
+X007938Y003627D01*
+X007907Y003650D01*
+X007878Y003676D01*
+X007851Y003704D01*
+X007828Y003735D01*
+X007807Y003768D01*
+X007791Y003804D01*
+X007777Y003840D01*
+X007768Y003878D01*
+X007762Y003916D01*
+X007760Y003955D01*
+X007750Y003555D02*
+X008550Y004355D01*
+X001310Y007055D02*
+X001312Y007094D01*
+X001318Y007132D01*
+X001327Y007170D01*
+X001341Y007206D01*
+X001357Y007242D01*
+X001378Y007275D01*
+X001401Y007306D01*
+X001428Y007334D01*
+X001457Y007360D01*
+X001488Y007383D01*
+X001522Y007402D01*
+X001558Y007418D01*
+X001594Y007430D01*
+X001632Y007439D01*
+X001671Y007444D01*
+X001710Y007445D01*
+X001748Y007442D01*
+X001787Y007435D01*
+X001824Y007425D01*
+X001860Y007410D01*
+X001895Y007393D01*
+X001928Y007372D01*
+X001958Y007347D01*
+X001986Y007320D01*
+X002011Y007290D01*
+X002033Y007258D01*
+X002051Y007224D01*
+X002066Y007188D01*
+X002078Y007151D01*
+X002086Y007113D01*
+X002090Y007074D01*
+X002090Y007036D01*
+X002086Y006997D01*
+X002078Y006959D01*
+X002066Y006922D01*
+X002051Y006886D01*
+X002033Y006852D01*
+X002011Y006820D01*
+X001986Y006790D01*
+X001958Y006763D01*
+X001928Y006738D01*
+X001895Y006717D01*
+X001860Y006700D01*
+X001824Y006685D01*
+X001787Y006675D01*
+X001748Y006668D01*
+X001710Y006665D01*
+X001671Y006666D01*
+X001632Y006671D01*
+X001594Y006680D01*
+X001558Y006692D01*
+X001522Y006708D01*
+X001488Y006727D01*
+X001457Y006750D01*
+X001428Y006776D01*
+X001401Y006804D01*
+X001378Y006835D01*
+X001357Y006868D01*
+X001341Y006904D01*
+X001327Y006940D01*
+X001318Y006978D01*
+X001312Y007016D01*
+X001310Y007055D01*
+X001300Y006655D02*
+X002100Y007455D01*
+X000510Y012255D02*
+X000512Y012294D01*
+X000518Y012332D01*
+X000527Y012370D01*
+X000541Y012406D01*
+X000557Y012442D01*
+X000578Y012475D01*
+X000601Y012506D01*
+X000628Y012534D01*
+X000657Y012560D01*
+X000688Y012583D01*
+X000722Y012602D01*
+X000758Y012618D01*
+X000794Y012630D01*
+X000832Y012639D01*
+X000871Y012644D01*
+X000910Y012645D01*
+X000948Y012642D01*
+X000987Y012635D01*
+X001024Y012625D01*
+X001060Y012610D01*
+X001095Y012593D01*
+X001128Y012572D01*
+X001158Y012547D01*
+X001186Y012520D01*
+X001211Y012490D01*
+X001233Y012458D01*
+X001251Y012424D01*
+X001266Y012388D01*
+X001278Y012351D01*
+X001286Y012313D01*
+X001290Y012274D01*
+X001290Y012236D01*
+X001286Y012197D01*
+X001278Y012159D01*
+X001266Y012122D01*
+X001251Y012086D01*
+X001233Y012052D01*
+X001211Y012020D01*
+X001186Y011990D01*
+X001158Y011963D01*
+X001128Y011938D01*
+X001095Y011917D01*
+X001060Y011900D01*
+X001024Y011885D01*
+X000987Y011875D01*
+X000948Y011868D01*
+X000910Y011865D01*
+X000871Y011866D01*
+X000832Y011871D01*
+X000794Y011880D01*
+X000758Y011892D01*
+X000722Y011908D01*
+X000688Y011927D01*
+X000657Y011950D01*
+X000628Y011976D01*
+X000601Y012004D01*
+X000578Y012035D01*
+X000557Y012068D01*
+X000541Y012104D01*
+X000527Y012140D01*
+X000518Y012178D01*
+X000512Y012216D01*
+X000510Y012255D01*
+X000500Y011855D02*
+X001300Y012655D01*
+X011760Y010155D02*
+X011762Y010194D01*
+X011768Y010232D01*
+X011777Y010270D01*
+X011791Y010306D01*
+X011807Y010342D01*
+X011828Y010375D01*
+X011851Y010406D01*
+X011878Y010434D01*
+X011907Y010460D01*
+X011938Y010483D01*
+X011972Y010502D01*
+X012008Y010518D01*
+X012044Y010530D01*
+X012082Y010539D01*
+X012121Y010544D01*
+X012160Y010545D01*
+X012198Y010542D01*
+X012237Y010535D01*
+X012274Y010525D01*
+X012310Y010510D01*
+X012345Y010493D01*
+X012378Y010472D01*
+X012408Y010447D01*
+X012436Y010420D01*
+X012461Y010390D01*
+X012483Y010358D01*
+X012501Y010324D01*
+X012516Y010288D01*
+X012528Y010251D01*
+X012536Y010213D01*
+X012540Y010174D01*
+X012540Y010136D01*
+X012536Y010097D01*
+X012528Y010059D01*
+X012516Y010022D01*
+X012501Y009986D01*
+X012483Y009952D01*
+X012461Y009920D01*
+X012436Y009890D01*
+X012408Y009863D01*
+X012378Y009838D01*
+X012345Y009817D01*
+X012310Y009800D01*
+X012274Y009785D01*
+X012237Y009775D01*
+X012198Y009768D01*
+X012160Y009765D01*
+X012121Y009766D01*
+X012082Y009771D01*
+X012044Y009780D01*
+X012008Y009792D01*
+X011972Y009808D01*
+X011938Y009827D01*
+X011907Y009850D01*
+X011878Y009876D01*
+X011851Y009904D01*
+X011828Y009935D01*
+X011807Y009968D01*
+X011791Y010004D01*
+X011777Y010040D01*
+X011768Y010078D01*
+X011762Y010116D01*
+X011760Y010155D01*
+X011750Y009755D02*
+X012550Y010555D01*
+X012360Y010255D02*
+X012362Y010294D01*
+X012368Y010332D01*
+X012377Y010370D01*
+X012391Y010406D01*
+X012407Y010442D01*
+X012428Y010475D01*
+X012451Y010506D01*
+X012478Y010534D01*
+X012507Y010560D01*
+X012538Y010583D01*
+X012572Y010602D01*
+X012608Y010618D01*
+X012644Y010630D01*
+X012682Y010639D01*
+X012721Y010644D01*
+X012760Y010645D01*
+X012798Y010642D01*
+X012837Y010635D01*
+X012874Y010625D01*
+X012910Y010610D01*
+X012945Y010593D01*
+X012978Y010572D01*
+X013008Y010547D01*
+X013036Y010520D01*
+X013061Y010490D01*
+X013083Y010458D01*
+X013101Y010424D01*
+X013116Y010388D01*
+X013128Y010351D01*
+X013136Y010313D01*
+X013140Y010274D01*
+X013140Y010236D01*
+X013136Y010197D01*
+X013128Y010159D01*
+X013116Y010122D01*
+X013101Y010086D01*
+X013083Y010052D01*
+X013061Y010020D01*
+X013036Y009990D01*
+X013008Y009963D01*
+X012978Y009938D01*
+X012945Y009917D01*
+X012910Y009900D01*
+X012874Y009885D01*
+X012837Y009875D01*
+X012798Y009868D01*
+X012760Y009865D01*
+X012721Y009866D01*
+X012682Y009871D01*
+X012644Y009880D01*
+X012608Y009892D01*
+X012572Y009908D01*
+X012538Y009927D01*
+X012507Y009950D01*
+X012478Y009976D01*
+X012451Y010004D01*
+X012428Y010035D01*
+X012407Y010068D01*
+X012391Y010104D01*
+X012377Y010140D01*
+X012368Y010178D01*
+X012362Y010216D01*
+X012360Y010255D01*
+X012350Y009855D02*
+X013150Y010655D01*
+X012710Y011005D02*
+X012712Y011044D01*
+X012718Y011082D01*
+X012727Y011120D01*
+X012741Y011156D01*
+X012757Y011192D01*
+X012778Y011225D01*
+X012801Y011256D01*
+X012828Y011284D01*
+X012857Y011310D01*
+X012888Y011333D01*
+X012922Y011352D01*
+X012958Y011368D01*
+X012994Y011380D01*
+X013032Y011389D01*
+X013071Y011394D01*
+X013110Y011395D01*
+X013148Y011392D01*
+X013187Y011385D01*
+X013224Y011375D01*
+X013260Y011360D01*
+X013295Y011343D01*
+X013328Y011322D01*
+X013358Y011297D01*
+X013386Y011270D01*
+X013411Y011240D01*
+X013433Y011208D01*
+X013451Y011174D01*
+X013466Y011138D01*
+X013478Y011101D01*
+X013486Y011063D01*
+X013490Y011024D01*
+X013490Y010986D01*
+X013486Y010947D01*
+X013478Y010909D01*
+X013466Y010872D01*
+X013451Y010836D01*
+X013433Y010802D01*
+X013411Y010770D01*
+X013386Y010740D01*
+X013358Y010713D01*
+X013328Y010688D01*
+X013295Y010667D01*
+X013260Y010650D01*
+X013224Y010635D01*
+X013187Y010625D01*
+X013148Y010618D01*
+X013110Y010615D01*
+X013071Y010616D01*
+X013032Y010621D01*
+X012994Y010630D01*
+X012958Y010642D01*
+X012922Y010658D01*
+X012888Y010677D01*
+X012857Y010700D01*
+X012828Y010726D01*
+X012801Y010754D01*
+X012778Y010785D01*
+X012757Y010818D01*
+X012741Y010854D01*
+X012727Y010890D01*
+X012718Y010928D01*
+X012712Y010966D01*
+X012710Y011005D01*
+X012700Y010605D02*
+X013500Y011405D01*
+X013160Y011205D02*
+X013162Y011244D01*
+X013168Y011282D01*
+X013177Y011320D01*
+X013191Y011356D01*
+X013207Y011392D01*
+X013228Y011425D01*
+X013251Y011456D01*
+X013278Y011484D01*
+X013307Y011510D01*
+X013338Y011533D01*
+X013372Y011552D01*
+X013408Y011568D01*
+X013444Y011580D01*
+X013482Y011589D01*
+X013521Y011594D01*
+X013560Y011595D01*
+X013598Y011592D01*
+X013637Y011585D01*
+X013674Y011575D01*
+X013710Y011560D01*
+X013745Y011543D01*
+X013778Y011522D01*
+X013808Y011497D01*
+X013836Y011470D01*
+X013861Y011440D01*
+X013883Y011408D01*
+X013901Y011374D01*
+X013916Y011338D01*
+X013928Y011301D01*
+X013936Y011263D01*
+X013940Y011224D01*
+X013940Y011186D01*
+X013936Y011147D01*
+X013928Y011109D01*
+X013916Y011072D01*
+X013901Y011036D01*
+X013883Y011002D01*
+X013861Y010970D01*
+X013836Y010940D01*
+X013808Y010913D01*
+X013778Y010888D01*
+X013745Y010867D01*
+X013710Y010850D01*
+X013674Y010835D01*
+X013637Y010825D01*
+X013598Y010818D01*
+X013560Y010815D01*
+X013521Y010816D01*
+X013482Y010821D01*
+X013444Y010830D01*
+X013408Y010842D01*
+X013372Y010858D01*
+X013338Y010877D01*
+X013307Y010900D01*
+X013278Y010926D01*
+X013251Y010954D01*
+X013228Y010985D01*
+X013207Y011018D01*
+X013191Y011054D01*
+X013177Y011090D01*
+X013168Y011128D01*
+X013162Y011166D01*
+X013160Y011205D01*
+X013150Y010805D02*
+X013950Y011605D01*
+X016060Y012355D02*
+X016062Y012394D01*
+X016068Y012432D01*
+X016077Y012470D01*
+X016091Y012506D01*
+X016107Y012542D01*
+X016128Y012575D01*
+X016151Y012606D01*
+X016178Y012634D01*
+X016207Y012660D01*
+X016238Y012683D01*
+X016272Y012702D01*
+X016308Y012718D01*
+X016344Y012730D01*
+X016382Y012739D01*
+X016421Y012744D01*
+X016460Y012745D01*
+X016498Y012742D01*
+X016537Y012735D01*
+X016574Y012725D01*
+X016610Y012710D01*
+X016645Y012693D01*
+X016678Y012672D01*
+X016708Y012647D01*
+X016736Y012620D01*
+X016761Y012590D01*
+X016783Y012558D01*
+X016801Y012524D01*
+X016816Y012488D01*
+X016828Y012451D01*
+X016836Y012413D01*
+X016840Y012374D01*
+X016840Y012336D01*
+X016836Y012297D01*
+X016828Y012259D01*
+X016816Y012222D01*
+X016801Y012186D01*
+X016783Y012152D01*
+X016761Y012120D01*
+X016736Y012090D01*
+X016708Y012063D01*
+X016678Y012038D01*
+X016645Y012017D01*
+X016610Y012000D01*
+X016574Y011985D01*
+X016537Y011975D01*
+X016498Y011968D01*
+X016460Y011965D01*
+X016421Y011966D01*
+X016382Y011971D01*
+X016344Y011980D01*
+X016308Y011992D01*
+X016272Y012008D01*
+X016238Y012027D01*
+X016207Y012050D01*
+X016178Y012076D01*
+X016151Y012104D01*
+X016128Y012135D01*
+X016107Y012168D01*
+X016091Y012204D01*
+X016077Y012240D01*
+X016068Y012278D01*
+X016062Y012316D01*
+X016060Y012355D01*
+X016050Y011955D02*
+X016850Y012755D01*
+X018960Y011055D02*
+X018962Y011094D01*
+X018968Y011132D01*
+X018977Y011170D01*
+X018991Y011206D01*
+X019007Y011242D01*
+X019028Y011275D01*
+X019051Y011306D01*
+X019078Y011334D01*
+X019107Y011360D01*
+X019138Y011383D01*
+X019172Y011402D01*
+X019208Y011418D01*
+X019244Y011430D01*
+X019282Y011439D01*
+X019321Y011444D01*
+X019360Y011445D01*
+X019398Y011442D01*
+X019437Y011435D01*
+X019474Y011425D01*
+X019510Y011410D01*
+X019545Y011393D01*
+X019578Y011372D01*
+X019608Y011347D01*
+X019636Y011320D01*
+X019661Y011290D01*
+X019683Y011258D01*
+X019701Y011224D01*
+X019716Y011188D01*
+X019728Y011151D01*
+X019736Y011113D01*
+X019740Y011074D01*
+X019740Y011036D01*
+X019736Y010997D01*
+X019728Y010959D01*
+X019716Y010922D01*
+X019701Y010886D01*
+X019683Y010852D01*
+X019661Y010820D01*
+X019636Y010790D01*
+X019608Y010763D01*
+X019578Y010738D01*
+X019545Y010717D01*
+X019510Y010700D01*
+X019474Y010685D01*
+X019437Y010675D01*
+X019398Y010668D01*
+X019360Y010665D01*
+X019321Y010666D01*
+X019282Y010671D01*
+X019244Y010680D01*
+X019208Y010692D01*
+X019172Y010708D01*
+X019138Y010727D01*
+X019107Y010750D01*
+X019078Y010776D01*
+X019051Y010804D01*
+X019028Y010835D01*
+X019007Y010868D01*
+X018991Y010904D01*
+X018977Y010940D01*
+X018968Y010978D01*
+X018962Y011016D01*
+X018960Y011055D01*
+X018950Y010655D02*
+X019750Y011455D01*
+X016060Y008555D02*
+X016062Y008594D01*
+X016068Y008632D01*
+X016077Y008670D01*
+X016091Y008706D01*
+X016107Y008742D01*
+X016128Y008775D01*
+X016151Y008806D01*
+X016178Y008834D01*
+X016207Y008860D01*
+X016238Y008883D01*
+X016272Y008902D01*
+X016308Y008918D01*
+X016344Y008930D01*
+X016382Y008939D01*
+X016421Y008944D01*
+X016460Y008945D01*
+X016498Y008942D01*
+X016537Y008935D01*
+X016574Y008925D01*
+X016610Y008910D01*
+X016645Y008893D01*
+X016678Y008872D01*
+X016708Y008847D01*
+X016736Y008820D01*
+X016761Y008790D01*
+X016783Y008758D01*
+X016801Y008724D01*
+X016816Y008688D01*
+X016828Y008651D01*
+X016836Y008613D01*
+X016840Y008574D01*
+X016840Y008536D01*
+X016836Y008497D01*
+X016828Y008459D01*
+X016816Y008422D01*
+X016801Y008386D01*
+X016783Y008352D01*
+X016761Y008320D01*
+X016736Y008290D01*
+X016708Y008263D01*
+X016678Y008238D01*
+X016645Y008217D01*
+X016610Y008200D01*
+X016574Y008185D01*
+X016537Y008175D01*
+X016498Y008168D01*
+X016460Y008165D01*
+X016421Y008166D01*
+X016382Y008171D01*
+X016344Y008180D01*
+X016308Y008192D01*
+X016272Y008208D01*
+X016238Y008227D01*
+X016207Y008250D01*
+X016178Y008276D01*
+X016151Y008304D01*
+X016128Y008335D01*
+X016107Y008368D01*
+X016091Y008404D01*
+X016077Y008440D01*
+X016068Y008478D01*
+X016062Y008516D01*
+X016060Y008555D01*
+X016050Y008155D02*
+X016850Y008955D01*
+X015610Y008505D02*
+X015612Y008544D01*
+X015618Y008582D01*
+X015627Y008620D01*
+X015641Y008656D01*
+X015657Y008692D01*
+X015678Y008725D01*
+X015701Y008756D01*
+X015728Y008784D01*
+X015757Y008810D01*
+X015788Y008833D01*
+X015822Y008852D01*
+X015858Y008868D01*
+X015894Y008880D01*
+X015932Y008889D01*
+X015971Y008894D01*
+X016010Y008895D01*
+X016048Y008892D01*
+X016087Y008885D01*
+X016124Y008875D01*
+X016160Y008860D01*
+X016195Y008843D01*
+X016228Y008822D01*
+X016258Y008797D01*
+X016286Y008770D01*
+X016311Y008740D01*
+X016333Y008708D01*
+X016351Y008674D01*
+X016366Y008638D01*
+X016378Y008601D01*
+X016386Y008563D01*
+X016390Y008524D01*
+X016390Y008486D01*
+X016386Y008447D01*
+X016378Y008409D01*
+X016366Y008372D01*
+X016351Y008336D01*
+X016333Y008302D01*
+X016311Y008270D01*
+X016286Y008240D01*
+X016258Y008213D01*
+X016228Y008188D01*
+X016195Y008167D01*
+X016160Y008150D01*
+X016124Y008135D01*
+X016087Y008125D01*
+X016048Y008118D01*
+X016010Y008115D01*
+X015971Y008116D01*
+X015932Y008121D01*
+X015894Y008130D01*
+X015858Y008142D01*
+X015822Y008158D01*
+X015788Y008177D01*
+X015757Y008200D01*
+X015728Y008226D01*
+X015701Y008254D01*
+X015678Y008285D01*
+X015657Y008318D01*
+X015641Y008354D01*
+X015627Y008390D01*
+X015618Y008428D01*
+X015612Y008466D01*
+X015610Y008505D01*
+X015600Y008105D02*
+X016400Y008905D01*
+X017010Y000805D02*
+X017012Y000844D01*
+X017018Y000882D01*
+X017027Y000920D01*
+X017041Y000956D01*
+X017057Y000992D01*
+X017078Y001025D01*
+X017101Y001056D01*
+X017128Y001084D01*
+X017157Y001110D01*
+X017188Y001133D01*
+X017222Y001152D01*
+X017258Y001168D01*
+X017294Y001180D01*
+X017332Y001189D01*
+X017371Y001194D01*
+X017410Y001195D01*
+X017448Y001192D01*
+X017487Y001185D01*
+X017524Y001175D01*
+X017560Y001160D01*
+X017595Y001143D01*
+X017628Y001122D01*
+X017658Y001097D01*
+X017686Y001070D01*
+X017711Y001040D01*
+X017733Y001008D01*
+X017751Y000974D01*
+X017766Y000938D01*
+X017778Y000901D01*
+X017786Y000863D01*
+X017790Y000824D01*
+X017790Y000786D01*
+X017786Y000747D01*
+X017778Y000709D01*
+X017766Y000672D01*
+X017751Y000636D01*
+X017733Y000602D01*
+X017711Y000570D01*
+X017686Y000540D01*
+X017658Y000513D01*
+X017628Y000488D01*
+X017595Y000467D01*
+X017560Y000450D01*
+X017524Y000435D01*
+X017487Y000425D01*
+X017448Y000418D01*
+X017410Y000415D01*
+X017371Y000416D01*
+X017332Y000421D01*
+X017294Y000430D01*
+X017258Y000442D01*
+X017222Y000458D01*
+X017188Y000477D01*
+X017157Y000500D01*
+X017128Y000526D01*
+X017101Y000554D01*
+X017078Y000585D01*
+X017057Y000618D01*
+X017041Y000654D01*
+X017027Y000690D01*
+X017018Y000728D01*
+X017012Y000766D01*
+X017010Y000805D01*
+X017000Y000405D02*
+X017800Y001205D01*
+X019110Y000805D02*
+X019112Y000844D01*
+X019118Y000882D01*
+X019127Y000920D01*
+X019141Y000956D01*
+X019157Y000992D01*
+X019178Y001025D01*
+X019201Y001056D01*
+X019228Y001084D01*
+X019257Y001110D01*
+X019288Y001133D01*
+X019322Y001152D01*
+X019358Y001168D01*
+X019394Y001180D01*
+X019432Y001189D01*
+X019471Y001194D01*
+X019510Y001195D01*
+X019548Y001192D01*
+X019587Y001185D01*
+X019624Y001175D01*
+X019660Y001160D01*
+X019695Y001143D01*
+X019728Y001122D01*
+X019758Y001097D01*
+X019786Y001070D01*
+X019811Y001040D01*
+X019833Y001008D01*
+X019851Y000974D01*
+X019866Y000938D01*
+X019878Y000901D01*
+X019886Y000863D01*
+X019890Y000824D01*
+X019890Y000786D01*
+X019886Y000747D01*
+X019878Y000709D01*
+X019866Y000672D01*
+X019851Y000636D01*
+X019833Y000602D01*
+X019811Y000570D01*
+X019786Y000540D01*
+X019758Y000513D01*
+X019728Y000488D01*
+X019695Y000467D01*
+X019660Y000450D01*
+X019624Y000435D01*
+X019587Y000425D01*
+X019548Y000418D01*
+X019510Y000415D01*
+X019471Y000416D01*
+X019432Y000421D01*
+X019394Y000430D01*
+X019358Y000442D01*
+X019322Y000458D01*
+X019288Y000477D01*
+X019257Y000500D01*
+X019228Y000526D01*
+X019201Y000554D01*
+X019178Y000585D01*
+X019157Y000618D01*
+X019141Y000654D01*
+X019127Y000690D01*
+X019118Y000728D01*
+X019112Y000766D01*
+X019110Y000805D01*
+X019100Y000405D02*
+X019900Y001205D01*
+D11*
+X001720Y008864D02*
+X001722Y008891D01*
+X001728Y008918D01*
+X001737Y008944D01*
+X001750Y008968D01*
+X001766Y008991D01*
+X001785Y009010D01*
+X001807Y009027D01*
+X001831Y009041D01*
+X001856Y009051D01*
+X001883Y009058D01*
+X001910Y009061D01*
+X001938Y009060D01*
+X001965Y009055D01*
+X001991Y009047D01*
+X002015Y009035D01*
+X002038Y009019D01*
+X002059Y009001D01*
+X002076Y008980D01*
+X002091Y008956D01*
+X002102Y008931D01*
+X002110Y008905D01*
+X002114Y008878D01*
+X002114Y008850D01*
+X002110Y008823D01*
+X002102Y008797D01*
+X002091Y008772D01*
+X002076Y008748D01*
+X002059Y008727D01*
+X002038Y008709D01*
+X002016Y008693D01*
+X001991Y008681D01*
+X001965Y008673D01*
+X001938Y008668D01*
+X001910Y008667D01*
+X001883Y008670D01*
+X001856Y008677D01*
+X001831Y008687D01*
+X001807Y008701D01*
+X001785Y008718D01*
+X001766Y008737D01*
+X001750Y008760D01*
+X001737Y008784D01*
+X001728Y008810D01*
+X001722Y008837D01*
+X001720Y008864D01*
+X001720Y010046D02*
+X001722Y010073D01*
+X001728Y010100D01*
+X001737Y010126D01*
+X001750Y010150D01*
+X001766Y010173D01*
+X001785Y010192D01*
+X001807Y010209D01*
+X001831Y010223D01*
+X001856Y010233D01*
+X001883Y010240D01*
+X001910Y010243D01*
+X001938Y010242D01*
+X001965Y010237D01*
+X001991Y010229D01*
+X002015Y010217D01*
+X002038Y010201D01*
+X002059Y010183D01*
+X002076Y010162D01*
+X002091Y010138D01*
+X002102Y010113D01*
+X002110Y010087D01*
+X002114Y010060D01*
+X002114Y010032D01*
+X002110Y010005D01*
+X002102Y009979D01*
+X002091Y009954D01*
+X002076Y009930D01*
+X002059Y009909D01*
+X002038Y009891D01*
+X002016Y009875D01*
+X001991Y009863D01*
+X001965Y009855D01*
+X001938Y009850D01*
+X001910Y009849D01*
+X001883Y009852D01*
+X001856Y009859D01*
+X001831Y009869D01*
+X001807Y009883D01*
+X001785Y009900D01*
+X001766Y009919D01*
+X001750Y009942D01*
+X001737Y009966D01*
+X001728Y009992D01*
+X001722Y010019D01*
+X001720Y010046D01*
+X002703Y016644D02*
+X002705Y016670D01*
+X002711Y016696D01*
+X002721Y016721D01*
+X002734Y016744D01*
+X002750Y016764D01*
+X002770Y016782D01*
+X002792Y016797D01*
+X002815Y016809D01*
+X002841Y016817D01*
+X002867Y016821D01*
+X002893Y016821D01*
+X002919Y016817D01*
+X002945Y016809D01*
+X002969Y016797D01*
+X002990Y016782D01*
+X003010Y016764D01*
+X003026Y016744D01*
+X003039Y016721D01*
+X003049Y016696D01*
+X003055Y016670D01*
+X003057Y016644D01*
+X003055Y016618D01*
+X003049Y016592D01*
+X003039Y016567D01*
+X003026Y016544D01*
+X003010Y016524D01*
+X002990Y016506D01*
+X002968Y016491D01*
+X002945Y016479D01*
+X002919Y016471D01*
+X002893Y016467D01*
+X002867Y016467D01*
+X002841Y016471D01*
+X002815Y016479D01*
+X002791Y016491D01*
+X002770Y016506D01*
+X002750Y016524D01*
+X002734Y016544D01*
+X002721Y016567D01*
+X002711Y016592D01*
+X002705Y016618D01*
+X002703Y016644D01*
+X002703Y018022D02*
+X002705Y018048D01*
+X002711Y018074D01*
+X002721Y018099D01*
+X002734Y018122D01*
+X002750Y018142D01*
+X002770Y018160D01*
+X002792Y018175D01*
+X002815Y018187D01*
+X002841Y018195D01*
+X002867Y018199D01*
+X002893Y018199D01*
+X002919Y018195D01*
+X002945Y018187D01*
+X002969Y018175D01*
+X002990Y018160D01*
+X003010Y018142D01*
+X003026Y018122D01*
+X003039Y018099D01*
+X003049Y018074D01*
+X003055Y018048D01*
+X003057Y018022D01*
+X003055Y017996D01*
+X003049Y017970D01*
+X003039Y017945D01*
+X003026Y017922D01*
+X003010Y017902D01*
+X002990Y017884D01*
+X002968Y017869D01*
+X002945Y017857D01*
+X002919Y017849D01*
+X002893Y017845D01*
+X002867Y017845D01*
+X002841Y017849D01*
+X002815Y017857D01*
+X002791Y017869D01*
+X002770Y017884D01*
+X002750Y017902D01*
+X002734Y017922D01*
+X002721Y017945D01*
+X002711Y017970D01*
+X002705Y017996D01*
+X002703Y018022D01*
+M02*
diff --git a/pcb/proxmark3_fix/CAM/proxmark3.dri b/pcb/proxmark3_fix/CAM/proxmark3.dri
new file mode 100644 (file)
index 0000000..77a9a07
--- /dev/null
@@ -0,0 +1,41 @@
+Generated by EAGLE CAM Processor 6.4.0
+
+Drill Station Info File: proxmark3.dri
+
+ Date              : 2015.11.13. 16:16:25
+ Drills            : generated
+ Device            : Excellon drill station
+
+Parameter settings:
+
+ Tolerance Drill + :  0.00 %
+ Tolerance Drill - :  0.00 %
+ Rotate            : no
+ Mirror            : no
+ Optimize          : no
+ Auto fit          : yes
+ OffsetX           : 0inch
+ OffsetY           : 0inch
+ Layers            : Drills Holes
+
+Drill File Info:
+
+ Data Mode         : Absolute
+ Units             : 1/10000 Inch
+
+Drills used:
+
+ Code  Size       used
+
+ T01   0.0157inch   326
+ T02   0.0354inch     2
+ T03   0.0394inch     2
+ T04   0.0450inch    26
+ T05   0.0630inch     1
+ T06   0.0787inch     2
+
+Total number of drills: 359
+
+Plotfiles:
+
+ proxmark3.TXT
diff --git a/pcb/proxmark3_fix/CAM/proxmark3.gpi b/pcb/proxmark3_fix/CAM/proxmark3.gpi
new file mode 100644 (file)
index 0000000..2d5e684
--- /dev/null
@@ -0,0 +1,80 @@
+Generated by EAGLE CAM Processor 6.4.0
+
+Photoplotter Info File: proxmark3.gpi
+
+ Date              : 2015.11.13. 16:16:26
+ Plotfile          : proxmark3.GTL
+ Apertures         : generated: 
+ Device            : Gerber RS-274-X photoplotter, coordinate format 2.4 inch
+
+Parameter settings:
+
+ Emulate Apertures : no
+ Tolerance Draw  + :  0.00 %
+ Tolerance Draw  - :  0.00 %
+ Tolerance Flash + :  0.00 %
+ Tolerance Flash - :  0.00 %
+ Rotate            : no
+ Mirror            : no
+ Optimize          : yes
+ Auto fit          : yes
+ OffsetX           : 0inch
+ OffsetY           : 0inch
+
+Plotfile Info:
+
+ Coordinate Format : 2.4
+ Coordinate Units  : Inch
+ Data Mode         : Absolute
+ Zero Suppression  : None
+ End Of Block      : *
+
+Apertures used:
+
+ Code     Shape     Size                  used
+
+ D10      draw      0.0010inch               4
+ D11      draw      0.0160inch              89
+ D12      draw      0.0090inch              17
+ D13      draw      0.0110inch              16
+ D14      rectangle 0.0591inch x 0.0157inch    10
+ D15      rectangle 0.0906inch x 0.0197inch     5
+ D16      square    0.1378inch               4
+ D17      draw      0.0000inch               4
+ D18      rectangle 0.0433inch x 0.0394inch   126
+ D19      rectangle 0.0591inch x 0.0098inch    50
+ D20      rectangle 0.0098inch x 0.0492inch    50
+ D21      square    0.0945inch               4
+ D22      rectangle 0.0591inch x 0.0197inch     5
+ D23      rectangle 0.0098inch x 0.0787inch    32
+ D24      rectangle 0.0787inch x 0.0098inch    32
+ D25      rectangle 0.1496inch x 0.0906inch     2
+ D26      rectangle 0.0984inch x 0.0217inch     4
+ D27      rectangle 0.0142inch x 0.0512inch    28
+ D28      rectangle 0.0394inch x 0.0433inch    82
+ D29      rectangle 0.1142inch x 0.0591inch     6
+ D30      square    0.0675inch               2
+ D31      round     0.0675inch              24
+ D32      square    0.0400inch              18
+ D33      rectangle 0.0400inch x 0.0700inch     6
+ D34      rectangle 0.0700inch x 0.0400inch     3
+ D35      rectangle 0.0118inch x 0.0591inch    24
+ D36      rectangle 0.0142inch x 0.0551inch    40
+ D37      rectangle 0.0512inch x 0.0591inch     2
+ D38      rectangle 0.0128inch x 0.0709inch     8
+ D39      rectangle 0.0260inch x 0.0800inch     8
+ D40      rectangle 0.0591inch x 0.1142inch     2
+ D41      rectangle 0.0402inch x 0.0161inch     8
+ D42      rectangle 0.0394inch x 0.1181inch    10
+ D43      rectangle 0.1181inch x 0.0591inch     4
+ D44      rectangle 0.1378inch x 0.0591inch     2
+ D45      rectangle 0.0591inch x 0.1378inch     2
+ D46      rectangle 0.0700inch x 0.1350inch     1
+ D47      rectangle 0.1350inch x 0.0700inch     6
+ D48      round     0.0945inch               1
+ D49      rectangle 0.0800inch x 0.0260inch     8
+ D50      draw      0.0080inch            8696
+ D51      round     0.0317inch             326
+ D52      round     0.1575inch               2
+ D53      draw      0.0240inch              52
+
diff --git a/pcb/proxmark3_fix/IN1_layer_preview.png b/pcb/proxmark3_fix/IN1_layer_preview.png
new file mode 100644 (file)
index 0000000..f67aaab
Binary files /dev/null and b/pcb/proxmark3_fix/IN1_layer_preview.png differ
diff --git a/pcb/proxmark3_fix/IN2_layer_preview.png b/pcb/proxmark3_fix/IN2_layer_preview.png
new file mode 100644 (file)
index 0000000..3026b09
Binary files /dev/null and b/pcb/proxmark3_fix/IN2_layer_preview.png differ
diff --git a/pcb/proxmark3_fix/MFG/proxmark3_IN1.pdf b/pcb/proxmark3_fix/MFG/proxmark3_IN1.pdf
new file mode 100644 (file)
index 0000000..256c662
Binary files /dev/null and b/pcb/proxmark3_fix/MFG/proxmark3_IN1.pdf differ
diff --git a/pcb/proxmark3_fix/MFG/proxmark3_IN2.pdf b/pcb/proxmark3_fix/MFG/proxmark3_IN2.pdf
new file mode 100644 (file)
index 0000000..6382052
Binary files /dev/null and b/pcb/proxmark3_fix/MFG/proxmark3_IN2.pdf differ
diff --git a/pcb/proxmark3_fix/MFG/proxmark3_bot.pdf b/pcb/proxmark3_fix/MFG/proxmark3_bot.pdf
new file mode 100644 (file)
index 0000000..1969d3c
Binary files /dev/null and b/pcb/proxmark3_fix/MFG/proxmark3_bot.pdf differ
diff --git a/pcb/proxmark3_fix/MFG/proxmark3_cam.zip b/pcb/proxmark3_fix/MFG/proxmark3_cam.zip
new file mode 100644 (file)
index 0000000..3164e5b
Binary files /dev/null and b/pcb/proxmark3_fix/MFG/proxmark3_cam.zip differ
diff --git a/pcb/proxmark3_fix/MFG/proxmark3_sch.pdf b/pcb/proxmark3_fix/MFG/proxmark3_sch.pdf
new file mode 100644 (file)
index 0000000..5e2b910
Binary files /dev/null and b/pcb/proxmark3_fix/MFG/proxmark3_sch.pdf differ
diff --git a/pcb/proxmark3_fix/MFG/proxmark3_top.pdf b/pcb/proxmark3_fix/MFG/proxmark3_top.pdf
new file mode 100644 (file)
index 0000000..0edf7f1
Binary files /dev/null and b/pcb/proxmark3_fix/MFG/proxmark3_top.pdf differ
diff --git a/pcb/proxmark3_fix/README.md b/pcb/proxmark3_fix/README.md
new file mode 100644 (file)
index 0000000..774c59a
--- /dev/null
@@ -0,0 +1,3 @@
+Corrected Eagle layout files and re-generated CAM files. DRC checked (via eurocircuits.com 's PCB visualizer too) no problems found, ready to production!
+
+Please find the change list in the CAD folder text file.
\ No newline at end of file
diff --git a/pcb/proxmark3_fix/TOP_layer_preview.png b/pcb/proxmark3_fix/TOP_layer_preview.png
new file mode 100644 (file)
index 0000000..5bb1d2d
Binary files /dev/null and b/pcb/proxmark3_fix/TOP_layer_preview.png differ
diff --git a/pcb/proxmark3_original_cad_cam_zip_files/README.md b/pcb/proxmark3_original_cad_cam_zip_files/README.md
new file mode 100644 (file)
index 0000000..1d267c5
--- /dev/null
@@ -0,0 +1,5 @@
+These files are downloaded from here: http://cq.cx/proxmark3.pl
+
+These are the original, non-modified parts. 
+
+What I've noticed that there are problems with the stop mask layers (via and component silkscreen print) This is what I'm going to modify in my cad / cam version.
\ No newline at end of file
diff --git a/pcb/proxmark3_original_cad_cam_zip_files/proxmark3-eagle.zip b/pcb/proxmark3_original_cad_cam_zip_files/proxmark3-eagle.zip
new file mode 100644 (file)
index 0000000..c886728
Binary files /dev/null and b/pcb/proxmark3_original_cad_cam_zip_files/proxmark3-eagle.zip differ
diff --git a/pcb/proxmark3_original_cad_cam_zip_files/proxmark3-mfgr-data.zip b/pcb/proxmark3_original_cad_cam_zip_files/proxmark3-mfgr-data.zip
new file mode 100644 (file)
index 0000000..d90585d
Binary files /dev/null and b/pcb/proxmark3_original_cad_cam_zip_files/proxmark3-mfgr-data.zip differ
diff --git a/zlib/ChangeLog b/zlib/ChangeLog
new file mode 100644 (file)
index 0000000..b996515
--- /dev/null
@@ -0,0 +1,1481 @@
+
+                ChangeLog file for zlib
+
+Changes in 1.2.8.f-Proxmark3 (for Proxmark3 project only) (26 May 2015)
+- disable decoding of fixed code blocks in deflate (eliminates the need
+  to store the fixed tree in RAM or ROM)
+- disable generating fixed code blocks in inflate  
+- look harder for local optimum of consecutive matches and single literals
+  in inflate.
+- stripped down version - unnecessary files from original distribution
+  are not included
+
+Changes in 1.2.8 (28 Apr 2013)
+- Update contrib/minizip/iowin32.c for Windows RT [Vollant]
+- Do not force Z_CONST for C++
+- Clean up contrib/vstudio [Ro§]
+- Correct spelling error in zlib.h
+- Fix mixed line endings in contrib/vstudio
+
+Changes in 1.2.7.3 (13 Apr 2013)
+- Fix version numbers and DLL names in contrib/vstudio/*/zlib.rc
+
+Changes in 1.2.7.2 (13 Apr 2013)
+- Change check for a four-byte type back to hexadecimal
+- Fix typo in win32/Makefile.msc
+- Add casts in gzwrite.c for pointer differences
+
+Changes in 1.2.7.1 (24 Mar 2013)
+- Replace use of unsafe string functions with snprintf if available
+- Avoid including stddef.h on Windows for Z_SOLO compile [Niessink]
+- Fix gzgetc undefine when Z_PREFIX set [Turk]
+- Eliminate use of mktemp in Makefile (not always available)
+- Fix bug in 'F' mode for gzopen()
+- Add inflateGetDictionary() function
+- Correct comment in deflate.h
+- Use _snprintf for snprintf in Microsoft C
+- On Darwin, only use /usr/bin/libtool if libtool is not Apple
+- Delete "--version" file if created by "ar --version" [Richard G.]
+- Fix configure check for veracity of compiler error return codes
+- Fix CMake compilation of static lib for MSVC2010 x64
+- Remove unused variable in infback9.c
+- Fix argument checks in gzlog_compress() and gzlog_write()
+- Clean up the usage of z_const and respect const usage within zlib
+- Clean up examples/gzlog.[ch] comparisons of different types
+- Avoid shift equal to bits in type (caused endless loop)
+- Fix unintialized value bug in gzputc() introduced by const patches
+- Fix memory allocation error in examples/zran.c [Nor]
+- Fix bug where gzopen(), gzclose() would write an empty file
+- Fix bug in gzclose() when gzwrite() runs out of memory
+- Check for input buffer malloc failure in examples/gzappend.c
+- Add note to contrib/blast to use binary mode in stdio
+- Fix comparisons of differently signed integers in contrib/blast
+- Check for invalid code length codes in contrib/puff
+- Fix serious but very rare decompression bug in inftrees.c
+- Update inflateBack() comments, since inflate() can be faster
+- Use underscored I/O function names for WINAPI_FAMILY
+- Add _tr_flush_bits to the external symbols prefixed by --zprefix
+- Add contrib/vstudio/vc10 pre-build step for static only
+- Quote --version-script argument in CMakeLists.txt
+- Don't specify --version-script on Apple platforms in CMakeLists.txt
+- Fix casting error in contrib/testzlib/testzlib.c
+- Fix types in contrib/minizip to match result of get_crc_table()
+- Simplify contrib/vstudio/vc10 with 'd' suffix
+- Add TOP support to win32/Makefile.msc
+- Suport i686 and amd64 assembler builds in CMakeLists.txt
+- Fix typos in the use of _LARGEFILE64_SOURCE in zconf.h
+- Add vc11 and vc12 build files to contrib/vstudio
+- Add gzvprintf() as an undocumented function in zlib
+- Fix configure for Sun shell
+- Remove runtime check in configure for four-byte integer type
+- Add casts and consts to ease user conversion to C++
+- Add man pages for minizip and miniunzip
+- In Makefile uninstall, don't rm if preceding cd fails
+- Do not return Z_BUF_ERROR if deflateParam() has nothing to write
+
+Changes in 1.2.7 (2 May 2012)
+- Replace use of memmove() with a simple copy for portability
+- Test for existence of strerror
+- Restore gzgetc_ for backward compatibility with 1.2.6
+- Fix build with non-GNU make on Solaris
+- Require gcc 4.0 or later on Mac OS X to use the hidden attribute
+- Include unistd.h for Watcom C
+- Use __WATCOMC__ instead of __WATCOM__
+- Do not use the visibility attribute if NO_VIZ defined
+- Improve the detection of no hidden visibility attribute
+- Avoid using __int64 for gcc or solo compilation
+- Cast to char * in gzprintf to avoid warnings [Zinser]
+- Fix make_vms.com for VAX [Zinser]
+- Don't use library or built-in byte swaps
+- Simplify test and use of gcc hidden attribute
+- Fix bug in gzclose_w() when gzwrite() fails to allocate memory
+- Add "x" (O_EXCL) and "e" (O_CLOEXEC) modes support to gzopen()
+- Fix bug in test/minigzip.c for configure --solo
+- Fix contrib/vstudio project link errors [Mohanathas]
+- Add ability to choose the builder in make_vms.com [Schweda]
+- Add DESTDIR support to mingw32 win32/Makefile.gcc
+- Fix comments in win32/Makefile.gcc for proper usage
+- Allow overriding the default install locations for cmake
+- Generate and install the pkg-config file with cmake
+- Build both a static and a shared version of zlib with cmake
+- Include version symbols for cmake builds
+- If using cmake with MSVC, add the source directory to the includes
+- Remove unneeded EXTRA_CFLAGS from win32/Makefile.gcc [Truta]
+- Move obsolete emx makefile to old [Truta]
+- Allow the use of -Wundef when compiling or using zlib
+- Avoid the use of the -u option with mktemp
+- Improve inflate() documentation on the use of Z_FINISH
+- Recognize clang as gcc
+- Add gzopen_w() in Windows for wide character path names
+- Rename zconf.h in CMakeLists.txt to move it out of the way
+- Add source directory in CMakeLists.txt for building examples
+- Look in build directory for zlib.pc in CMakeLists.txt
+- Remove gzflags from zlibvc.def in vc9 and vc10
+- Fix contrib/minizip compilation in the MinGW environment
+- Update ./configure for Solaris, support --64 [Mooney]
+- Remove -R. from Solaris shared build (possible security issue)
+- Avoid race condition for parallel make (-j) running example
+- Fix type mismatch between get_crc_table() and crc_table
+- Fix parsing of version with "-" in CMakeLists.txt [Snider, Ziegler]
+- Fix the path to zlib.map in CMakeLists.txt
+- Force the native libtool in Mac OS X to avoid GNU libtool [Beebe]
+- Add instructions to win32/Makefile.gcc for shared install [Torri]
+
+Changes in 1.2.6.1 (12 Feb 2012)
+- Avoid the use of the Objective-C reserved name "id"
+- Include io.h in gzguts.h for Microsoft compilers
+- Fix problem with ./configure --prefix and gzgetc macro
+- Include gz_header definition when compiling zlib solo
+- Put gzflags() functionality back in zutil.c
+- Avoid library header include in crc32.c for Z_SOLO
+- Use name in GCC_CLASSIC as C compiler for coverage testing, if set
+- Minor cleanup in contrib/minizip/zip.c [Vollant]
+- Update make_vms.com [Zinser]
+- Remove unnecessary gzgetc_ function
+- Use optimized byte swap operations for Microsoft and GNU [Snyder]
+- Fix minor typo in zlib.h comments [Rzesniowiecki]
+
+Changes in 1.2.6 (29 Jan 2012)
+- Update the Pascal interface in contrib/pascal
+- Fix function numbers for gzgetc_ in zlibvc.def files
+- Fix configure.ac for contrib/minizip [Schiffer]
+- Fix large-entry detection in minizip on 64-bit systems [Schiffer]
+- Have ./configure use the compiler return code for error indication
+- Fix CMakeLists.txt for cross compilation [McClure]
+- Fix contrib/minizip/zip.c for 64-bit architectures [Dalsnes]
+- Fix compilation of contrib/minizip on FreeBSD [Marquez]
+- Correct suggested usages in win32/Makefile.msc [Shachar, Horvath]
+- Include io.h for Turbo C / Borland C on all platforms [Truta]
+- Make version explicit in contrib/minizip/configure.ac [Bosmans]
+- Avoid warning for no encryption in contrib/minizip/zip.c [Vollant]
+- Minor cleanup up contrib/minizip/unzip.c [Vollant]
+- Fix bug when compiling minizip with C++ [Vollant]
+- Protect for long name and extra fields in contrib/minizip [Vollant]
+- Avoid some warnings in contrib/minizip [Vollant]
+- Add -I../.. -L../.. to CFLAGS for minizip and miniunzip
+- Add missing libs to minizip linker command
+- Add support for VPATH builds in contrib/minizip
+- Add an --enable-demos option to contrib/minizip/configure
+- Add the generation of configure.log by ./configure
+- Exit when required parameters not provided to win32/Makefile.gcc
+- Have gzputc return the character written instead of the argument
+- Use the -m option on ldconfig for BSD systems [Tobias]
+- Correct in zlib.map when deflateResetKeep was added
+
+Changes in 1.2.5.3 (15 Jan 2012)
+- Restore gzgetc function for binary compatibility
+- Do not use _lseeki64 under Borland C++ [Truta]
+- Update win32/Makefile.msc to build test/*.c [Truta]
+- Remove old/visualc6 given CMakefile and other alternatives
+- Update AS400 build files and documentation [Monnerat]
+- Update win32/Makefile.gcc to build test/*.c [Truta]
+- Permit stronger flushes after Z_BLOCK flushes
+- Avoid extraneous empty blocks when doing empty flushes
+- Permit Z_NULL arguments to deflatePending
+- Allow deflatePrime() to insert bits in the middle of a stream
+- Remove second empty static block for Z_PARTIAL_FLUSH
+- Write out all of the available bits when using Z_BLOCK
+- Insert the first two strings in the hash table after a flush
+
+Changes in 1.2.5.2 (17 Dec 2011)
+- fix ld error: unable to find version dependency 'ZLIB_1.2.5'
+- use relative symlinks for shared libs
+- Avoid searching past window for Z_RLE strategy
+- Assure that high-water mark initialization is always applied in deflate
+- Add assertions to fill_window() in deflate.c to match comments
+- Update python link in README
+- Correct spelling error in gzread.c
+- Fix bug in gzgets() for a concatenated empty gzip stream
+- Correct error in comment for gz_make()
+- Change gzread() and related to ignore junk after gzip streams
+- Allow gzread() and related to continue after gzclearerr()
+- Allow gzrewind() and gzseek() after a premature end-of-file
+- Simplify gzseek() now that raw after gzip is ignored
+- Change gzgetc() to a macro for speed (~40% speedup in testing)
+- Fix gzclose() to return the actual error last encountered
+- Always add large file support for windows
+- Include zconf.h for windows large file support
+- Include zconf.h.cmakein for windows large file support
+- Update zconf.h.cmakein on make distclean
+- Merge vestigial vsnprintf determination from zutil.h to gzguts.h
+- Clarify how gzopen() appends in zlib.h comments
+- Correct documentation of gzdirect() since junk at end now ignored
+- Add a transparent write mode to gzopen() when 'T' is in the mode
+- Update python link in zlib man page
+- Get inffixed.h and MAKEFIXED result to match
+- Add a ./config --solo option to make zlib subset with no libary use
+- Add undocumented inflateResetKeep() function for CAB file decoding
+- Add --cover option to ./configure for gcc coverage testing
+- Add #define ZLIB_CONST option to use const in the z_stream interface
+- Add comment to gzdopen() in zlib.h to use dup() when using fileno()
+- Note behavior of uncompress() to provide as much data as it can
+- Add files in contrib/minizip to aid in building libminizip
+- Split off AR options in Makefile.in and configure
+- Change ON macro to Z_ARG to avoid application conflicts
+- Facilitate compilation with Borland C++ for pragmas and vsnprintf
+- Include io.h for Turbo C / Borland C++
+- Move example.c and minigzip.c to test/
+- Simplify incomplete code table filling in inflate_table()
+- Remove code from inflate.c and infback.c that is impossible to execute
+- Test the inflate code with full coverage
+- Allow deflateSetDictionary, inflateSetDictionary at any time (in raw)
+- Add deflateResetKeep and fix inflateResetKeep to retain dictionary
+- Fix gzwrite.c to accommodate reduced memory zlib compilation
+- Have inflate() with Z_FINISH avoid the allocation of a window
+- Do not set strm->adler when doing raw inflate
+- Fix gzeof() to behave just like feof() when read is not past end of file
+- Fix bug in gzread.c when end-of-file is reached
+- Avoid use of Z_BUF_ERROR in gz* functions except for premature EOF
+- Document gzread() capability to read concurrently written files
+- Remove hard-coding of resource compiler in CMakeLists.txt [Blammo]
+
+Changes in 1.2.5.1 (10 Sep 2011)
+- Update FAQ entry on shared builds (#13)
+- Avoid symbolic argument to chmod in Makefile.in
+- Fix bug and add consts in contrib/puff [Oberhumer]
+- Update contrib/puff/zeros.raw test file to have all block types
+- Add full coverage test for puff in contrib/puff/Makefile
+- Fix static-only-build install in Makefile.in
+- Fix bug in unzGetCurrentFileInfo() in contrib/minizip [Kuno]
+- Add libz.a dependency to shared in Makefile.in for parallel builds
+- Spell out "number" (instead of "nb") in zlib.h for total_in, total_out
+- Replace $(...) with `...` in configure for non-bash sh [Bowler]
+- Add darwin* to Darwin* and solaris* to SunOS\ 5* in configure [Groffen]
+- Add solaris* to Linux* in configure to allow gcc use [Groffen]
+- Add *bsd* to Linux* case in configure [Bar-Lev]
+- Add inffast.obj to dependencies in win32/Makefile.msc
+- Correct spelling error in deflate.h [Kohler]
+- Change libzdll.a again to libz.dll.a (!) in win32/Makefile.gcc
+- Add test to configure for GNU C looking for gcc in output of $cc -v
+- Add zlib.pc generation to win32/Makefile.gcc [Weigelt]
+- Fix bug in zlib.h for _FILE_OFFSET_BITS set and _LARGEFILE64_SOURCE not
+- Add comment in zlib.h that adler32_combine with len2 < 0 makes no sense
+- Make NO_DIVIDE option in adler32.c much faster (thanks to John Reiser)
+- Make stronger test in zconf.h to include unistd.h for LFS
+- Apply Darwin patches for 64-bit file offsets to contrib/minizip [Slack]
+- Fix zlib.h LFS support when Z_PREFIX used
+- Add updated as400 support (removed from old) [Monnerat]
+- Avoid deflate sensitivity to volatile input data
+- Avoid division in adler32_combine for NO_DIVIDE
+- Clarify the use of Z_FINISH with deflateBound() amount of space
+- Set binary for output file in puff.c
+- Use u4 type for crc_table to avoid conversion warnings
+- Apply casts in zlib.h to avoid conversion warnings
+- Add OF to prototypes for adler32_combine_ and crc32_combine_ [Miller]
+- Improve inflateSync() documentation to note indeterminancy
+- Add deflatePending() function to return the amount of pending output
+- Correct the spelling of "specification" in FAQ [Randers-Pehrson]
+- Add a check in configure for stdarg.h, use for gzprintf()
+- Check that pointers fit in ints when gzprint() compiled old style
+- Add dummy name before $(SHAREDLIBV) in Makefile [Bar-Lev, Bowler]
+- Delete line in configure that adds -L. libz.a to LDFLAGS [Weigelt]
+- Add debug records in assmebler code [Londer]
+- Update RFC references to use http://tools.ietf.org/html/... [Li]
+- Add --archs option, use of libtool to configure for Mac OS X [Borstel]
+
+Changes in 1.2.5 (19 Apr 2010)
+- Disable visibility attribute in win32/Makefile.gcc [Bar-Lev]
+- Default to libdir as sharedlibdir in configure [Nieder]
+- Update copyright dates on modified source files
+- Update trees.c to be able to generate modified trees.h
+- Exit configure for MinGW, suggesting win32/Makefile.gcc
+- Check for NULL path in gz_open [Homurlu]
+
+Changes in 1.2.4.5 (18 Apr 2010)
+- Set sharedlibdir in configure [Torok]
+- Set LDFLAGS in Makefile.in [Bar-Lev]
+- Avoid mkdir objs race condition in Makefile.in [Bowler]
+- Add ZLIB_INTERNAL in front of internal inter-module functions and arrays
+- Define ZLIB_INTERNAL to hide internal functions and arrays for GNU C
+- Don't use hidden attribute when it is a warning generator (e.g. Solaris)
+
+Changes in 1.2.4.4 (18 Apr 2010)
+- Fix CROSS_PREFIX executable testing, CHOST extract, mingw* [Torok]
+- Undefine _LARGEFILE64_SOURCE in zconf.h if it is zero, but not if empty
+- Try to use bash or ksh regardless of functionality of /bin/sh
+- Fix configure incompatibility with NetBSD sh
+- Remove attempt to run under bash or ksh since have better NetBSD fix
+- Fix win32/Makefile.gcc for MinGW [Bar-Lev]
+- Add diagnostic messages when using CROSS_PREFIX in configure
+- Added --sharedlibdir option to configure [Weigelt]
+- Use hidden visibility attribute when available [Frysinger]
+
+Changes in 1.2.4.3 (10 Apr 2010)
+- Only use CROSS_PREFIX in configure for ar and ranlib if they exist
+- Use CROSS_PREFIX for nm [Bar-Lev]
+- Assume _LARGEFILE64_SOURCE defined is equivalent to true
+- Avoid use of undefined symbols in #if with && and ||
+- Make *64 prototypes in gzguts.h consistent with functions
+- Add -shared load option for MinGW in configure [Bowler]
+- Move z_off64_t to public interface, use instead of off64_t
+- Remove ! from shell test in configure (not portable to Solaris)
+- Change +0 macro tests to -0 for possibly increased portability
+
+Changes in 1.2.4.2 (9 Apr 2010)
+- Add consistent carriage returns to readme.txt's in masmx86 and masmx64
+- Really provide prototypes for *64 functions when building without LFS
+- Only define unlink() in minigzip.c if unistd.h not included
+- Update README to point to contrib/vstudio project files
+- Move projects/vc6 to old/ and remove projects/
+- Include stdlib.h in minigzip.c for setmode() definition under WinCE
+- Clean up assembler builds in win32/Makefile.msc [Rowe]
+- Include sys/types.h for Microsoft for off_t definition
+- Fix memory leak on error in gz_open()
+- Symbolize nm as $NM in configure [Weigelt]
+- Use TEST_LDSHARED instead of LDSHARED to link test programs [Weigelt]
+- Add +0 to _FILE_OFFSET_BITS and _LFS64_LARGEFILE in case not defined
+- Fix bug in gzeof() to take into account unused input data
+- Avoid initialization of structures with variables in puff.c
+- Updated win32/README-WIN32.txt [Rowe]
+
+Changes in 1.2.4.1 (28 Mar 2010)
+- Remove the use of [a-z] constructs for sed in configure [gentoo 310225]
+- Remove $(SHAREDLIB) from LIBS in Makefile.in [Creech]
+- Restore "for debugging" comment on sprintf() in gzlib.c
+- Remove fdopen for MVS from gzguts.h
+- Put new README-WIN32.txt in win32 [Rowe]
+- Add check for shell to configure and invoke another shell if needed
+- Fix big fat stinking bug in gzseek() on uncompressed files
+- Remove vestigial F_OPEN64 define in zutil.h
+- Set and check the value of _LARGEFILE_SOURCE and _LARGEFILE64_SOURCE
+- Avoid errors on non-LFS systems when applications define LFS macros
+- Set EXE to ".exe" in configure for MINGW [Kahle]
+- Match crc32() in crc32.c exactly to the prototype in zlib.h [Sherrill]
+- Add prefix for cross-compilation in win32/makefile.gcc [Bar-Lev]
+- Add DLL install in win32/makefile.gcc [Bar-Lev]
+- Allow Linux* or linux* from uname in configure [Bar-Lev]
+- Allow ldconfig to be redefined in configure and Makefile.in [Bar-Lev]
+- Add cross-compilation prefixes to configure [Bar-Lev]
+- Match type exactly in gz_load() invocation in gzread.c
+- Match type exactly of zcalloc() in zutil.c to zlib.h alloc_func
+- Provide prototypes for *64 functions when building zlib without LFS
+- Don't use -lc when linking shared library on MinGW
+- Remove errno.h check in configure and vestigial errno code in zutil.h
+
+Changes in 1.2.4 (14 Mar 2010)
+- Fix VER3 extraction in configure for no fourth subversion
+- Update zlib.3, add docs to Makefile.in to make .pdf out of it
+- Add zlib.3.pdf to distribution
+- Don't set error code in gzerror() if passed pointer is NULL
+- Apply destination directory fixes to CMakeLists.txt [Lowman]
+- Move #cmakedefine's to a new zconf.in.cmakein
+- Restore zconf.h for builds that don't use configure or cmake
+- Add distclean to dummy Makefile for convenience
+- Update and improve INDEX, README, and FAQ
+- Update CMakeLists.txt for the return of zconf.h [Lowman]
+- Update contrib/vstudio/vc9 and vc10 [Vollant]
+- Change libz.dll.a back to libzdll.a in win32/Makefile.gcc
+- Apply license and readme changes to contrib/asm686 [Raiter]
+- Check file name lengths and add -c option in minigzip.c [Li]
+- Update contrib/amd64 and contrib/masmx86/ [Vollant]
+- Avoid use of "eof" parameter in trees.c to not shadow library variable
+- Update make_vms.com for removal of zlibdefs.h [Zinser]
+- Update assembler code and vstudio projects in contrib [Vollant]
+- Remove outdated assembler code contrib/masm686 and contrib/asm586
+- Remove old vc7 and vc8 from contrib/vstudio
+- Update win32/Makefile.msc, add ZLIB_VER_SUBREVISION [Rowe]
+- Fix memory leaks in gzclose_r() and gzclose_w(), file leak in gz_open()
+- Add contrib/gcc_gvmat64 for longest_match and inflate_fast [Vollant]
+- Remove *64 functions from win32/zlib.def (they're not 64-bit yet)
+- Fix bug in void-returning vsprintf() case in gzwrite.c
+- Fix name change from inflate.h in contrib/inflate86/inffas86.c
+- Check if temporary file exists before removing in make_vms.com [Zinser]
+- Fix make install and uninstall for --static option
+- Fix usage of _MSC_VER in gzguts.h and zutil.h [Truta]
+- Update readme.txt in contrib/masmx64 and masmx86 to assemble
+
+Changes in 1.2.3.9 (21 Feb 2010)
+- Expunge gzio.c
+- Move as400 build information to old
+- Fix updates in contrib/minizip and contrib/vstudio
+- Add const to vsnprintf test in configure to avoid warnings [Weigelt]
+- Delete zconf.h (made by configure) [Weigelt]
+- Change zconf.in.h to zconf.h.in per convention [Weigelt]
+- Check for NULL buf in gzgets()
+- Return empty string for gzgets() with len == 1 (like fgets())
+- Fix description of gzgets() in zlib.h for end-of-file, NULL return
+- Update minizip to 1.1 [Vollant]
+- Avoid MSVC loss of data warnings in gzread.c, gzwrite.c
+- Note in zlib.h that gzerror() should be used to distinguish from EOF
+- Remove use of snprintf() from gzlib.c
+- Fix bug in gzseek()
+- Update contrib/vstudio, adding vc9 and vc10 [Kuno, Vollant]
+- Fix zconf.h generation in CMakeLists.txt [Lowman]
+- Improve comments in zconf.h where modified by configure
+
+Changes in 1.2.3.8 (13 Feb 2010)
+- Clean up text files (tabs, trailing whitespace, etc.) [Oberhumer]
+- Use z_off64_t in gz_zero() and gz_skip() to match state->skip
+- Avoid comparison problem when sizeof(int) == sizeof(z_off64_t)
+- Revert to Makefile.in from 1.2.3.6 (live with the clutter)
+- Fix missing error return in gzflush(), add zlib.h note
+- Add *64 functions to zlib.map [Levin]
+- Fix signed/unsigned comparison in gz_comp()
+- Use SFLAGS when testing shared linking in configure
+- Add --64 option to ./configure to use -m64 with gcc
+- Fix ./configure --help to correctly name options
+- Have make fail if a test fails [Levin]
+- Avoid buffer overrun in contrib/masmx64/gvmat64.asm [Simpson]
+- Remove assembler object files from contrib
+
+Changes in 1.2.3.7 (24 Jan 2010)
+- Always gzopen() with O_LARGEFILE if available
+- Fix gzdirect() to work immediately after gzopen() or gzdopen()
+- Make gzdirect() more precise when the state changes while reading
+- Improve zlib.h documentation in many places
+- Catch memory allocation failure in gz_open()
+- Complete close operation if seek forward in gzclose_w() fails
+- Return Z_ERRNO from gzclose_r() if close() fails
+- Return Z_STREAM_ERROR instead of EOF for gzclose() being passed NULL
+- Return zero for gzwrite() errors to match zlib.h description
+- Return -1 on gzputs() error to match zlib.h description
+- Add zconf.in.h to allow recovery from configure modification [Weigelt]
+- Fix static library permissions in Makefile.in [Weigelt]
+- Avoid warnings in configure tests that hide functionality [Weigelt]
+- Add *BSD and DragonFly to Linux case in configure [gentoo 123571]
+- Change libzdll.a to libz.dll.a in win32/Makefile.gcc [gentoo 288212]
+- Avoid access of uninitialized data for first inflateReset2 call [Gomes]
+- Keep object files in subdirectories to reduce the clutter somewhat
+- Remove default Makefile and zlibdefs.h, add dummy Makefile
+- Add new external functions to Z_PREFIX, remove duplicates, z_z_ -> z_
+- Remove zlibdefs.h completely -- modify zconf.h instead
+
+Changes in 1.2.3.6 (17 Jan 2010)
+- Avoid void * arithmetic in gzread.c and gzwrite.c
+- Make compilers happier with const char * for gz_error message
+- Avoid unused parameter warning in inflate.c
+- Avoid signed-unsigned comparison warning in inflate.c
+- Indent #pragma's for traditional C
+- Fix usage of strwinerror() in glib.c, change to gz_strwinerror()
+- Correct email address in configure for system options
+- Update make_vms.com and add make_vms.com to contrib/minizip [Zinser]
+- Update zlib.map [Brown]
+- Fix Makefile.in for Solaris 10 make of example64 and minizip64 [Torok]
+- Apply various fixes to CMakeLists.txt [Lowman]
+- Add checks on len in gzread() and gzwrite()
+- Add error message for no more room for gzungetc()
+- Remove zlib version check in gzwrite()
+- Defer compression of gzprintf() result until need to
+- Use snprintf() in gzdopen() if available
+- Remove USE_MMAP configuration determination (only used by minigzip)
+- Remove examples/pigz.c (available separately)
+- Update examples/gun.c to 1.6
+
+Changes in 1.2.3.5 (8 Jan 2010)
+- Add space after #if in zutil.h for some compilers
+- Fix relatively harmless bug in deflate_fast() [Exarevsky]
+- Fix same problem in deflate_slow()
+- Add $(SHAREDLIBV) to LIBS in Makefile.in [Brown]
+- Add deflate_rle() for faster Z_RLE strategy run-length encoding
+- Add deflate_huff() for faster Z_HUFFMAN_ONLY encoding
+- Change name of "write" variable in inffast.c to avoid library collisions
+- Fix premature EOF from gzread() in gzio.c [Brown]
+- Use zlib header window size if windowBits is 0 in inflateInit2()
+- Remove compressBound() call in deflate.c to avoid linking compress.o
+- Replace use of errno in gz* with functions, support WinCE [Alves]
+- Provide alternative to perror() in minigzip.c for WinCE [Alves]
+- Don't use _vsnprintf on later versions of MSVC [Lowman]
+- Add CMake build script and input file [Lowman]
+- Update contrib/minizip to 1.1 [Svensson, Vollant]
+- Moved nintendods directory from contrib to .
+- Replace gzio.c with a new set of routines with the same functionality
+- Add gzbuffer(), gzoffset(), gzclose_r(), gzclose_w() as part of above
+- Update contrib/minizip to 1.1b
+- Change gzeof() to return 0 on error instead of -1 to agree with zlib.h
+
+Changes in 1.2.3.4 (21 Dec 2009)
+- Use old school .SUFFIXES in Makefile.in for FreeBSD compatibility
+- Update comments in configure and Makefile.in for default --shared
+- Fix test -z's in configure [Marquess]
+- Build examplesh and minigzipsh when not testing
+- Change NULL's to Z_NULL's in deflate.c and in comments in zlib.h
+- Import LDFLAGS from the environment in configure
+- Fix configure to populate SFLAGS with discovered CFLAGS options
+- Adapt make_vms.com to the new Makefile.in [Zinser]
+- Add zlib2ansi script for C++ compilation [Marquess]
+- Add _FILE_OFFSET_BITS=64 test to make test (when applicable)
+- Add AMD64 assembler code for longest match to contrib [Teterin]
+- Include options from $SFLAGS when doing $LDSHARED
+- Simplify 64-bit file support by introducing z_off64_t type
+- Make shared object files in objs directory to work around old Sun cc
+- Use only three-part version number for Darwin shared compiles
+- Add rc option to ar in Makefile.in for when ./configure not run
+- Add -WI,-rpath,. to LDFLAGS for OSF 1 V4*
+- Set LD_LIBRARYN32_PATH for SGI IRIX shared compile
+- Protect against _FILE_OFFSET_BITS being defined when compiling zlib
+- Rename Makefile.in targets allstatic to static and allshared to shared
+- Fix static and shared Makefile.in targets to be independent
+- Correct error return bug in gz_open() by setting state [Brown]
+- Put spaces before ;;'s in configure for better sh compatibility
+- Add pigz.c (parallel implementation of gzip) to examples/
+- Correct constant in crc32.c to UL [Leventhal]
+- Reject negative lengths in crc32_combine()
+- Add inflateReset2() function to work like inflateEnd()/inflateInit2()
+- Include sys/types.h for _LARGEFILE64_SOURCE [Brown]
+- Correct typo in doc/algorithm.txt [Janik]
+- Fix bug in adler32_combine() [Zhu]
+- Catch missing-end-of-block-code error in all inflates and in puff
+    Assures that random input to inflate eventually results in an error
+- Added enough.c (calculation of ENOUGH for inftrees.h) to examples/
+- Update ENOUGH and its usage to reflect discovered bounds
+- Fix gzerror() error report on empty input file [Brown]
+- Add ush casts in trees.c to avoid pedantic runtime errors
+- Fix typo in zlib.h uncompress() description [Reiss]
+- Correct inflate() comments with regard to automatic header detection
+- Remove deprecation comment on Z_PARTIAL_FLUSH (it stays)
+- Put new version of gzlog (2.0) in examples with interruption recovery
+- Add puff compile option to permit invalid distance-too-far streams
+- Add puff TEST command options, ability to read piped input
+- Prototype the *64 functions in zlib.h when _FILE_OFFSET_BITS == 64, but
+  _LARGEFILE64_SOURCE not defined
+- Fix Z_FULL_FLUSH to truly erase the past by resetting s->strstart
+- Fix deflateSetDictionary() to use all 32K for output consistency
+- Remove extraneous #define MIN_LOOKAHEAD in deflate.c (in deflate.h)
+- Clear bytes after deflate lookahead to avoid use of uninitialized data
+- Change a limit in inftrees.c to be more transparent to Coverity Prevent
+- Update win32/zlib.def with exported symbols from zlib.h
+- Correct spelling errors in zlib.h [Willem, Sobrado]
+- Allow Z_BLOCK for deflate() to force a new block
+- Allow negative bits in inflatePrime() to delete existing bit buffer
+- Add Z_TREES flush option to inflate() to return at end of trees
+- Add inflateMark() to return current state information for random access
+- Add Makefile for NintendoDS to contrib [Costa]
+- Add -w in configure compile tests to avoid spurious warnings [Beucler]
+- Fix typos in zlib.h comments for deflateSetDictionary()
+- Fix EOF detection in transparent gzread() [Maier]
+
+Changes in 1.2.3.3 (2 October 2006)
+- Make --shared the default for configure, add a --static option
+- Add compile option to permit invalid distance-too-far streams
+- Add inflateUndermine() function which is required to enable above
+- Remove use of "this" variable name for C++ compatibility [Marquess]
+- Add testing of shared library in make test, if shared library built
+- Use ftello() and fseeko() if available instead of ftell() and fseek()
+- Provide two versions of all functions that use the z_off_t type for
+  binary compatibility -- a normal version and a 64-bit offset version,
+  per the Large File Support Extension when _LARGEFILE64_SOURCE is
+  defined; use the 64-bit versions by default when _FILE_OFFSET_BITS
+  is defined to be 64
+- Add a --uname= option to configure to perhaps help with cross-compiling
+
+Changes in 1.2.3.2 (3 September 2006)
+- Turn off silly Borland warnings [Hay]
+- Use off64_t and define _LARGEFILE64_SOURCE when present
+- Fix missing dependency on inffixed.h in Makefile.in
+- Rig configure --shared to build both shared and static [Teredesai, Truta]
+- Remove zconf.in.h and instead create a new zlibdefs.h file
+- Fix contrib/minizip/unzip.c non-encrypted after encrypted [Vollant]
+- Add treebuild.xml (see http://treebuild.metux.de/) [Weigelt]
+
+Changes in 1.2.3.1 (16 August 2006)
+- Add watcom directory with OpenWatcom make files [Daniel]
+- Remove #undef of FAR in zconf.in.h for MVS [Fedtke]
+- Update make_vms.com [Zinser]
+- Use -fPIC for shared build in configure [Teredesai, Nicholson]
+- Use only major version number for libz.so on IRIX and OSF1 [Reinholdtsen]
+- Use fdopen() (not _fdopen()) for Interix in zutil.h [B\8ack]
+- Add some FAQ entries about the contrib directory
+- Update the MVS question in the FAQ
+- Avoid extraneous reads after EOF in gzio.c [Brown]
+- Correct spelling of "successfully" in gzio.c [Randers-Pehrson]
+- Add comments to zlib.h about gzerror() usage [Brown]
+- Set extra flags in gzip header in gzopen() like deflate() does
+- Make configure options more compatible with double-dash conventions
+  [Weigelt]
+- Clean up compilation under Solaris SunStudio cc [Rowe, Reinholdtsen]
+- Fix uninstall target in Makefile.in [Truta]
+- Add pkgconfig support [Weigelt]
+- Use $(DESTDIR) macro in Makefile.in [Reinholdtsen, Weigelt]
+- Replace set_data_type() with a more accurate detect_data_type() in
+  trees.c, according to the txtvsbin.txt document [Truta]
+- Swap the order of #include <stdio.h> and #include "zlib.h" in
+  gzio.c, example.c and minigzip.c [Truta]
+- Shut up annoying VS2005 warnings about standard C deprecation [Rowe,
+  Truta] (where?)
+- Fix target "clean" from win32/Makefile.bor [Truta]
+- Create .pdb and .manifest files in win32/makefile.msc [Ziegler, Rowe]
+- Update zlib www home address in win32/DLL_FAQ.txt [Truta]
+- Update contrib/masmx86/inffas32.asm for VS2005 [Vollant, Van Wassenhove]
+- Enable browse info in the "Debug" and "ASM Debug" configurations in
+  the Visual C++ 6 project, and set (non-ASM) "Debug" as default [Truta]
+- Add pkgconfig support [Weigelt]
+- Add ZLIB_VER_MAJOR, ZLIB_VER_MINOR and ZLIB_VER_REVISION in zlib.h,
+  for use in win32/zlib1.rc [Polushin, Rowe, Truta]
+- Add a document that explains the new text detection scheme to
+  doc/txtvsbin.txt [Truta]
+- Add rfc1950.txt, rfc1951.txt and rfc1952.txt to doc/ [Truta]
+- Move algorithm.txt into doc/ [Truta]
+- Synchronize FAQ with website
+- Fix compressBound(), was low for some pathological cases [Fearnley]
+- Take into account wrapper variations in deflateBound()
+- Set examples/zpipe.c input and output to binary mode for Windows
+- Update examples/zlib_how.html with new zpipe.c (also web site)
+- Fix some warnings in examples/gzlog.c and examples/zran.c (it seems
+  that gcc became pickier in 4.0)
+- Add zlib.map for Linux: "All symbols from zlib-1.1.4 remain
+  un-versioned, the patch adds versioning only for symbols introduced in
+  zlib-1.2.0 or later.  It also declares as local those symbols which are
+  not designed to be exported." [Levin]
+- Update Z_PREFIX list in zconf.in.h, add --zprefix option to configure
+- Do not initialize global static by default in trees.c, add a response
+  NO_INIT_GLOBAL_POINTERS to initialize them if needed [Marquess]
+- Don't use strerror() in gzio.c under WinCE [Yakimov]
+- Don't use errno.h in zutil.h under WinCE [Yakimov]
+- Move arguments for AR to its usage to allow replacing ar [Marot]
+- Add HAVE_VISIBILITY_PRAGMA in zconf.in.h for Mozilla [Randers-Pehrson]
+- Improve inflateInit() and inflateInit2() documentation
+- Fix structure size comment in inflate.h
+- Change configure help option from --h* to --help [Santos]
+
+Changes in 1.2.3 (18 July 2005)
+- Apply security vulnerability fixes to contrib/infback9 as well
+- Clean up some text files (carriage returns, trailing space)
+- Update testzlib, vstudio, masmx64, and masmx86 in contrib [Vollant]
+
+Changes in 1.2.2.4 (11 July 2005)
+- Add inflatePrime() function for starting inflation at bit boundary
+- Avoid some Visual C warnings in deflate.c
+- Avoid more silly Visual C warnings in inflate.c and inftrees.c for 64-bit
+  compile
+- Fix some spelling errors in comments [Betts]
+- Correct inflateInit2() error return documentation in zlib.h
+- Add zran.c example of compressed data random access to examples
+  directory, shows use of inflatePrime()
+- Fix cast for assignments to strm->state in inflate.c and infback.c
+- Fix zlibCompileFlags() in zutil.c to use 1L for long shifts [Oberhumer]
+- Move declarations of gf2 functions to right place in crc32.c [Oberhumer]
+- Add cast in trees.c t avoid a warning [Oberhumer]
+- Avoid some warnings in fitblk.c, gun.c, gzjoin.c in examples [Oberhumer]
+- Update make_vms.com [Zinser]
+- Initialize state->write in inflateReset() since copied in inflate_fast()
+- Be more strict on incomplete code sets in inflate_table() and increase
+  ENOUGH and MAXD -- this repairs a possible security vulnerability for
+  invalid inflate input.  Thanks to Tavis Ormandy and Markus Oberhumer for
+  discovering the vulnerability and providing test cases.
+- Add ia64 support to configure for HP-UX [Smith]
+- Add error return to gzread() for format or i/o error [Levin]
+- Use malloc.h for OS/2 [Necasek]
+
+Changes in 1.2.2.3 (27 May 2005)
+- Replace 1U constants in inflate.c and inftrees.c for 64-bit compile
+- Typecast fread() return values in gzio.c [Vollant]
+- Remove trailing space in minigzip.c outmode (VC++ can't deal with it)
+- Fix crc check bug in gzread() after gzungetc() [Heiner]
+- Add the deflateTune() function to adjust internal compression parameters
+- Add a fast gzip decompressor, gun.c, to examples (use of inflateBack)
+- Remove an incorrect assertion in examples/zpipe.c
+- Add C++ wrapper in infback9.h [Donais]
+- Fix bug in inflateCopy() when decoding fixed codes
+- Note in zlib.h how much deflateSetDictionary() actually uses
+- Remove USE_DICT_HEAD in deflate.c (would mess up inflate if used)
+- Add _WIN32_WCE to define WIN32 in zconf.in.h [Spencer]
+- Don't include stderr.h or errno.h for _WIN32_WCE in zutil.h [Spencer]
+- Add gzdirect() function to indicate transparent reads
+- Update contrib/minizip [Vollant]
+- Fix compilation of deflate.c when both ASMV and FASTEST [Oberhumer]
+- Add casts in crc32.c to avoid warnings [Oberhumer]
+- Add contrib/masmx64 [Vollant]
+- Update contrib/asm586, asm686, masmx86, testzlib, vstudio [Vollant]
+
+Changes in 1.2.2.2 (30 December 2004)
+- Replace structure assignments in deflate.c and inflate.c with zmemcpy to
+  avoid implicit memcpy calls (portability for no-library compilation)
+- Increase sprintf() buffer size in gzdopen() to allow for large numbers
+- Add INFLATE_STRICT to check distances against zlib header
+- Improve WinCE errno handling and comments [Chang]
+- Remove comment about no gzip header processing in FAQ
+- Add Z_FIXED strategy option to deflateInit2() to force fixed trees
+- Add updated make_vms.com [Coghlan], update README
+- Create a new "examples" directory, move gzappend.c there, add zpipe.c,
+  fitblk.c, gzlog.[ch], gzjoin.c, and zlib_how.html.
+- Add FAQ entry and comments in deflate.c on uninitialized memory access
+- Add Solaris 9 make options in configure [Gilbert]
+- Allow strerror() usage in gzio.c for STDC
+- Fix DecompressBuf in contrib/delphi/ZLib.pas [ManChesTer]
+- Update contrib/masmx86/inffas32.asm and gvmat32.asm [Vollant]
+- Use z_off_t for adler32_combine() and crc32_combine() lengths
+- Make adler32() much faster for small len
+- Use OS_CODE in deflate() default gzip header
+
+Changes in 1.2.2.1 (31 October 2004)
+- Allow inflateSetDictionary() call for raw inflate
+- Fix inflate header crc check bug for file names and comments
+- Add deflateSetHeader() and gz_header structure for custom gzip headers
+- Add inflateGetheader() to retrieve gzip headers
+- Add crc32_combine() and adler32_combine() functions
+- Add alloc_func, free_func, in_func, out_func to Z_PREFIX list
+- Use zstreamp consistently in zlib.h (inflate_back functions)
+- Remove GUNZIP condition from definition of inflate_mode in inflate.h
+  and in contrib/inflate86/inffast.S [Truta, Anderson]
+- Add support for AMD64 in contrib/inflate86/inffas86.c [Anderson]
+- Update projects/README.projects and projects/visualc6 [Truta]
+- Update win32/DLL_FAQ.txt [Truta]
+- Avoid warning under NO_GZCOMPRESS in gzio.c; fix typo [Truta]
+- Deprecate Z_ASCII; use Z_TEXT instead [Truta]
+- Use a new algorithm for setting strm->data_type in trees.c [Truta]
+- Do not define an exit() prototype in zutil.c unless DEBUG defined
+- Remove prototype of exit() from zutil.c, example.c, minigzip.c [Truta]
+- Add comment in zlib.h for Z_NO_FLUSH parameter to deflate()
+- Fix Darwin build version identification [Peterson]
+
+Changes in 1.2.2 (3 October 2004)
+- Update zlib.h comments on gzip in-memory processing
+- Set adler to 1 in inflateReset() to support Java test suite [Walles]
+- Add contrib/dotzlib [Ravn]
+- Update win32/DLL_FAQ.txt [Truta]
+- Update contrib/minizip [Vollant]
+- Move contrib/visual-basic.txt to old/ [Truta]
+- Fix assembler builds in projects/visualc6/ [Truta]
+
+Changes in 1.2.1.2 (9 September 2004)
+- Update INDEX file
+- Fix trees.c to update strm->data_type (no one ever noticed!)
+- Fix bug in error case in inflate.c, infback.c, and infback9.c [Brown]
+- Add "volatile" to crc table flag declaration (for DYNAMIC_CRC_TABLE)
+- Add limited multitasking protection to DYNAMIC_CRC_TABLE
+- Add NO_vsnprintf for VMS in zutil.h [Mozilla]
+- Don't declare strerror() under VMS [Mozilla]
+- Add comment to DYNAMIC_CRC_TABLE to use get_crc_table() to initialize
+- Update contrib/ada [Anisimkov]
+- Update contrib/minizip [Vollant]
+- Fix configure to not hardcode directories for Darwin [Peterson]
+- Fix gzio.c to not return error on empty files [Brown]
+- Fix indentation; update version in contrib/delphi/ZLib.pas and
+  contrib/pascal/zlibpas.pas [Truta]
+- Update mkasm.bat in contrib/masmx86 [Truta]
+- Update contrib/untgz [Truta]
+- Add projects/README.projects [Truta]
+- Add project for MS Visual C++ 6.0 in projects/visualc6 [Cadieux, Truta]
+- Update win32/DLL_FAQ.txt [Truta]
+- Update list of Z_PREFIX symbols in zconf.h [Randers-Pehrson, Truta]
+- Remove an unnecessary assignment to curr in inftrees.c [Truta]
+- Add OS/2 to exe builds in configure [Poltorak]
+- Remove err dummy parameter in zlib.h [Kientzle]
+
+Changes in 1.2.1.1 (9 January 2004)
+- Update email address in README
+- Several FAQ updates
+- Fix a big fat bug in inftrees.c that prevented decoding valid
+  dynamic blocks with only literals and no distance codes --
+  Thanks to "Hot Emu" for the bug report and sample file
+- Add a note to puff.c on no distance codes case.
+
+Changes in 1.2.1 (17 November 2003)
+- Remove a tab in contrib/gzappend/gzappend.c
+- Update some interfaces in contrib for new zlib functions
+- Update zlib version number in some contrib entries
+- Add Windows CE definition for ptrdiff_t in zutil.h [Mai, Truta]
+- Support shared libraries on Hurd and KFreeBSD [Brown]
+- Fix error in NO_DIVIDE option of adler32.c
+
+Changes in 1.2.0.8 (4 November 2003)
+- Update version in contrib/delphi/ZLib.pas and contrib/pascal/zlibpas.pas
+- Add experimental NO_DIVIDE #define in adler32.c
+    - Possibly faster on some processors (let me know if it is)
+- Correct Z_BLOCK to not return on first inflate call if no wrap
+- Fix strm->data_type on inflate() return to correctly indicate EOB
+- Add deflatePrime() function for appending in the middle of a byte
+- Add contrib/gzappend for an example of appending to a stream
+- Update win32/DLL_FAQ.txt [Truta]
+- Delete Turbo C comment in README [Truta]
+- Improve some indentation in zconf.h [Truta]
+- Fix infinite loop on bad input in configure script [Church]
+- Fix gzeof() for concatenated gzip files [Johnson]
+- Add example to contrib/visual-basic.txt [Michael B.]
+- Add -p to mkdir's in Makefile.in [vda]
+- Fix configure to properly detect presence or lack of printf functions
+- Add AS400 support [Monnerat]
+- Add a little Cygwin support [Wilson]
+
+Changes in 1.2.0.7 (21 September 2003)
+- Correct some debug formats in contrib/infback9
+- Cast a type in a debug statement in trees.c
+- Change search and replace delimiter in configure from % to # [Beebe]
+- Update contrib/untgz to 0.2 with various fixes [Truta]
+- Add build support for Amiga [Nikl]
+- Remove some directories in old that have been updated to 1.2
+- Add dylib building for Mac OS X in configure and Makefile.in
+- Remove old distribution stuff from Makefile
+- Update README to point to DLL_FAQ.txt, and add comment on Mac OS X
+- Update links in README
+
+Changes in 1.2.0.6 (13 September 2003)
+- Minor FAQ updates
+- Update contrib/minizip to 1.00 [Vollant]
+- Remove test of gz functions in example.c when GZ_COMPRESS defined [Truta]
+- Update POSTINC comment for 68060 [Nikl]
+- Add contrib/infback9 with deflate64 decoding (unsupported)
+- For MVS define NO_vsnprintf and undefine FAR [van Burik]
+- Add pragma for fdopen on MVS [van Burik]
+
+Changes in 1.2.0.5 (8 September 2003)
+- Add OF to inflateBackEnd() declaration in zlib.h
+- Remember start when using gzdopen in the middle of a file
+- Use internal off_t counters in gz* functions to properly handle seeks
+- Perform more rigorous check for distance-too-far in inffast.c
+- Add Z_BLOCK flush option to return from inflate at block boundary
+- Set strm->data_type on return from inflate
+    - Indicate bits unused, if at block boundary, and if in last block
+- Replace size_t with ptrdiff_t in crc32.c, and check for correct size
+- Add condition so old NO_DEFLATE define still works for compatibility
+- FAQ update regarding the Windows DLL [Truta]
+- INDEX update: add qnx entry, remove aix entry [Truta]
+- Install zlib.3 into mandir [Wilson]
+- Move contrib/zlib_dll_FAQ.txt to win32/DLL_FAQ.txt; update [Truta]
+- Adapt the zlib interface to the new DLL convention guidelines [Truta]
+- Introduce ZLIB_WINAPI macro to allow the export of functions using
+  the WINAPI calling convention, for Visual Basic [Vollant, Truta]
+- Update msdos and win32 scripts and makefiles [Truta]
+- Export symbols by name, not by ordinal, in win32/zlib.def [Truta]
+- Add contrib/ada [Anisimkov]
+- Move asm files from contrib/vstudio/vc70_32 to contrib/asm386 [Truta]
+- Rename contrib/asm386 to contrib/masmx86 [Truta, Vollant]
+- Add contrib/masm686 [Truta]
+- Fix offsets in contrib/inflate86 and contrib/masmx86/inffas32.asm
+  [Truta, Vollant]
+- Update contrib/delphi; rename to contrib/pascal; add example [Truta]
+- Remove contrib/delphi2; add a new contrib/delphi [Truta]
+- Avoid inclusion of the nonstandard <memory.h> in contrib/iostream,
+  and fix some method prototypes [Truta]
+- Fix the ZCR_SEED2 constant to avoid warnings in contrib/minizip
+  [Truta]
+- Avoid the use of backslash (\) in contrib/minizip [Vollant]
+- Fix file time handling in contrib/untgz; update makefiles [Truta]
+- Update contrib/vstudio/vc70_32 to comply with the new DLL guidelines
+  [Vollant]
+- Remove contrib/vstudio/vc15_16 [Vollant]
+- Rename contrib/vstudio/vc70_32 to contrib/vstudio/vc7 [Truta]
+- Update README.contrib [Truta]
+- Invert the assignment order of match_head and s->prev[...] in
+  INSERT_STRING [Truta]
+- Compare TOO_FAR with 32767 instead of 32768, to avoid 16-bit warnings
+  [Truta]
+- Compare function pointers with 0, not with NULL or Z_NULL [Truta]
+- Fix prototype of syncsearch in inflate.c [Truta]
+- Introduce ASMINF macro to be enabled when using an ASM implementation
+  of inflate_fast [Truta]
+- Change NO_DEFLATE to NO_GZCOMPRESS [Truta]
+- Modify test_gzio in example.c to take a single file name as a
+  parameter [Truta]
+- Exit the example.c program if gzopen fails [Truta]
+- Add type casts around strlen in example.c [Truta]
+- Remove casting to sizeof in minigzip.c; give a proper type
+  to the variable compared with SUFFIX_LEN [Truta]
+- Update definitions of STDC and STDC99 in zconf.h [Truta]
+- Synchronize zconf.h with the new Windows DLL interface [Truta]
+- Use SYS16BIT instead of __32BIT__ to distinguish between
+  16- and 32-bit platforms [Truta]
+- Use far memory allocators in small 16-bit memory models for
+  Turbo C [Truta]
+- Add info about the use of ASMV, ASMINF and ZLIB_WINAPI in
+  zlibCompileFlags [Truta]
+- Cygwin has vsnprintf [Wilson]
+- In Windows16, OS_CODE is 0, as in MSDOS [Truta]
+- In Cygwin, OS_CODE is 3 (Unix), not 11 (Windows32) [Wilson]
+
+Changes in 1.2.0.4 (10 August 2003)
+- Minor FAQ updates
+- Be more strict when checking inflateInit2's windowBits parameter
+- Change NO_GUNZIP compile option to NO_GZIP to cover deflate as well
+- Add gzip wrapper option to deflateInit2 using windowBits
+- Add updated QNX rule in configure and qnx directory [Bonnefoy]
+- Make inflate distance-too-far checks more rigorous
+- Clean up FAR usage in inflate
+- Add casting to sizeof() in gzio.c and minigzip.c
+
+Changes in 1.2.0.3 (19 July 2003)
+- Fix silly error in gzungetc() implementation [Vollant]
+- Update contrib/minizip and contrib/vstudio [Vollant]
+- Fix printf format in example.c
+- Correct cdecl support in zconf.in.h [Anisimkov]
+- Minor FAQ updates
+
+Changes in 1.2.0.2 (13 July 2003)
+- Add ZLIB_VERNUM in zlib.h for numerical preprocessor comparisons
+- Attempt to avoid warnings in crc32.c for pointer-int conversion
+- Add AIX to configure, remove aix directory [Bakker]
+- Add some casts to minigzip.c
+- Improve checking after insecure sprintf() or vsprintf() calls
+- Remove #elif's from crc32.c
+- Change leave label to inf_leave in inflate.c and infback.c to avoid
+  library conflicts
+- Remove inflate gzip decoding by default--only enable gzip decoding by
+  special request for stricter backward compatibility
+- Add zlibCompileFlags() function to return compilation information
+- More typecasting in deflate.c to avoid warnings
+- Remove leading underscore from _Capital #defines [Truta]
+- Fix configure to link shared library when testing
+- Add some Windows CE target adjustments [Mai]
+- Remove #define ZLIB_DLL in zconf.h [Vollant]
+- Add zlib.3 [Rodgers]
+- Update RFC URL in deflate.c and algorithm.txt [Mai]
+- Add zlib_dll_FAQ.txt to contrib [Truta]
+- Add UL to some constants [Truta]
+- Update minizip and vstudio [Vollant]
+- Remove vestigial NEED_DUMMY_RETURN from zconf.in.h
+- Expand use of NO_DUMMY_DECL to avoid all dummy structures
+- Added iostream3 to contrib [Schwardt]
+- Replace rewind() with fseek() for WinCE [Truta]
+- Improve setting of zlib format compression level flags
+    - Report 0 for huffman and rle strategies and for level == 0 or 1
+    - Report 2 only for level == 6
+- Only deal with 64K limit when necessary at compile time [Truta]
+- Allow TOO_FAR check to be turned off at compile time [Truta]
+- Add gzclearerr() function [Souza]
+- Add gzungetc() function
+
+Changes in 1.2.0.1 (17 March 2003)
+- Add Z_RLE strategy for run-length encoding [Truta]
+    - When Z_RLE requested, restrict matches to distance one
+    - Update zlib.h, minigzip.c, gzopen(), gzdopen() for Z_RLE
+- Correct FASTEST compilation to allow level == 0
+- Clean up what gets compiled for FASTEST
+- Incorporate changes to zconf.in.h [Vollant]
+    - Refine detection of Turbo C need for dummy returns
+    - Refine ZLIB_DLL compilation
+    - Include additional header file on VMS for off_t typedef
+- Try to use _vsnprintf where it supplants vsprintf [Vollant]
+- Add some casts in inffast.c
+- Enchance comments in zlib.h on what happens if gzprintf() tries to
+  write more than 4095 bytes before compression
+- Remove unused state from inflateBackEnd()
+- Remove exit(0) from minigzip.c, example.c
+- Get rid of all those darn tabs
+- Add "check" target to Makefile.in that does the same thing as "test"
+- Add "mostlyclean" and "maintainer-clean" targets to Makefile.in
+- Update contrib/inflate86 [Anderson]
+- Update contrib/testzlib, contrib/vstudio, contrib/minizip [Vollant]
+- Add msdos and win32 directories with makefiles [Truta]
+- More additions and improvements to the FAQ
+
+Changes in 1.2.0 (9 March 2003)
+- New and improved inflate code
+    - About 20% faster
+    - Does not allocate 32K window unless and until needed
+    - Automatically detects and decompresses gzip streams
+    - Raw inflate no longer needs an extra dummy byte at end
+    - Added inflateBack functions using a callback interface--even faster
+      than inflate, useful for file utilities (gzip, zip)
+    - Added inflateCopy() function to record state for random access on
+      externally generated deflate streams (e.g. in gzip files)
+    - More readable code (I hope)
+- New and improved crc32()
+    - About 50% faster, thanks to suggestions from Rodney Brown
+- Add deflateBound() and compressBound() functions
+- Fix memory leak in deflateInit2()
+- Permit setting dictionary for raw deflate (for parallel deflate)
+- Fix const declaration for gzwrite()
+- Check for some malloc() failures in gzio.c
+- Fix bug in gzopen() on single-byte file 0x1f
+- Fix bug in gzread() on concatenated file with 0x1f at end of buffer
+  and next buffer doesn't start with 0x8b
+- Fix uncompress() to return Z_DATA_ERROR on truncated input
+- Free memory at end of example.c
+- Remove MAX #define in trees.c (conflicted with some libraries)
+- Fix static const's in deflate.c, gzio.c, and zutil.[ch]
+- Declare malloc() and free() in gzio.c if STDC not defined
+- Use malloc() instead of calloc() in zutil.c if int big enough
+- Define STDC for AIX
+- Add aix/ with approach for compiling shared library on AIX
+- Add HP-UX support for shared libraries in configure
+- Add OpenUNIX support for shared libraries in configure
+- Use $cc instead of gcc to build shared library
+- Make prefix directory if needed when installing
+- Correct Macintosh avoidance of typedef Byte in zconf.h
+- Correct Turbo C memory allocation when under Linux
+- Use libz.a instead of -lz in Makefile (assure use of compiled library)
+- Update configure to check for snprintf or vsnprintf functions and their
+  return value, warn during make if using an insecure function
+- Fix configure problem with compile-time knowledge of HAVE_UNISTD_H that
+  is lost when library is used--resolution is to build new zconf.h
+- Documentation improvements (in zlib.h):
+    - Document raw deflate and inflate
+    - Update RFCs URL
+    - Point out that zlib and gzip formats are different
+    - Note that Z_BUF_ERROR is not fatal
+    - Document string limit for gzprintf() and possible buffer overflow
+    - Note requirement on avail_out when flushing
+    - Note permitted values of flush parameter of inflate()
+- Add some FAQs (and even answers) to the FAQ
+- Add contrib/inflate86/ for x86 faster inflate
+- Add contrib/blast/ for PKWare Data Compression Library decompression
+- Add contrib/puff/ simple inflate for deflate format description
+
+Changes in 1.1.4 (11 March 2002)
+- ZFREE was repeated on same allocation on some error conditions.
+  This creates a security problem described in
+  http://www.zlib.org/advisory-2002-03-11.txt
+- Returned incorrect error (Z_MEM_ERROR) on some invalid data
+- Avoid accesses before window for invalid distances with inflate window
+  less than 32K.
+- force windowBits > 8 to avoid a bug in the encoder for a window size
+  of 256 bytes. (A complete fix will be available in 1.1.5).
+
+Changes in 1.1.3 (9 July 1998)
+- fix "an inflate input buffer bug that shows up on rare but persistent
+  occasions" (Mark)
+- fix gzread and gztell for concatenated .gz files (Didier Le Botlan)
+- fix gzseek(..., SEEK_SET) in write mode
+- fix crc check after a gzeek (Frank Faubert)
+- fix miniunzip when the last entry in a zip file is itself a zip file
+  (J Lillge)
+- add contrib/asm586 and contrib/asm686 (Brian Raiter)
+  See http://www.muppetlabs.com/~breadbox/software/assembly.html
+- add support for Delphi 3 in contrib/delphi (Bob Dellaca)
+- add support for C++Builder 3 and Delphi 3 in contrib/delphi2 (Davide Moretti)
+- do not exit prematurely in untgz if 0 at start of block (Magnus Holmgren)
+- use macro EXTERN instead of extern to support DLL for BeOS (Sander Stoks)
+- added a FAQ file
+
+- Support gzdopen on Mac with Metrowerks (Jason Linhart)
+- Do not redefine Byte on Mac (Brad Pettit & Jason Linhart)
+- define SEEK_END too if SEEK_SET is not defined (Albert Chin-A-Young)
+- avoid some warnings with Borland C (Tom Tanner)
+- fix a problem in contrib/minizip/zip.c for 16-bit MSDOS (Gilles Vollant)
+- emulate utime() for WIN32 in contrib/untgz  (Gilles Vollant)
+- allow several arguments to configure (Tim Mooney, Frodo Looijaard)
+- use libdir and includedir in Makefile.in (Tim Mooney)
+- support shared libraries on OSF1 V4 (Tim Mooney)
+- remove so_locations in "make clean"  (Tim Mooney)
+- fix maketree.c compilation error (Glenn, Mark)
+- Python interface to zlib now in Python 1.5 (Jeremy Hylton)
+- new Makefile.riscos (Rich Walker)
+- initialize static descriptors in trees.c for embedded targets (Nick Smith)
+- use "foo-gz" in example.c for RISCOS and VMS (Nick Smith)
+- add the OS/2 files in Makefile.in too (Andrew Zabolotny)
+- fix fdopen and halloc macros for Microsoft C 6.0 (Tom Lane)
+- fix maketree.c to allow clean compilation of inffixed.h (Mark)
+- fix parameter check in deflateCopy (Gunther Nikl)
+- cleanup trees.c, use compressed_len only in debug mode (Christian Spieler)
+- Many portability patches by Christian Spieler:
+  . zutil.c, zutil.h: added "const" for zmem*
+  . Make_vms.com: fixed some typos
+  . Make_vms.com: msdos/Makefile.*: removed zutil.h from some dependency lists
+  . msdos/Makefile.msc: remove "default rtl link library" info from obj files
+  . msdos/Makefile.*: use model-dependent name for the built zlib library
+  . msdos/Makefile.emx, nt/Makefile.emx, nt/Makefile.gcc:
+     new makefiles, for emx (DOS/OS2), emx&rsxnt and mingw32 (Windows 9x / NT)
+- use define instead of typedef for Bytef also for MSC small/medium (Tom Lane)
+- replace __far with _far for better portability (Christian Spieler, Tom Lane)
+- fix test for errno.h in configure (Tim Newsham)
+
+Changes in 1.1.2 (19 March 98)
+- added contrib/minzip, mini zip and unzip based on zlib (Gilles Vollant)
+  See http://www.winimage.com/zLibDll/unzip.html
+- preinitialize the inflate tables for fixed codes, to make the code
+  completely thread safe (Mark)
+- some simplifications and slight speed-up to the inflate code (Mark)
+- fix gzeof on non-compressed files (Allan Schrum)
+- add -std1 option in configure for OSF1 to fix gzprintf (Martin Mokrejs)
+- use default value of 4K for Z_BUFSIZE for 16-bit MSDOS (Tim Wegner + Glenn)
+- added os2/Makefile.def and os2/zlib.def (Andrew Zabolotny)
+- add shared lib support for UNIX_SV4.2MP (MATSUURA Takanori)
+- do not wrap extern "C" around system includes (Tom Lane)
+- mention zlib binding for TCL in README (Andreas Kupries)
+- added amiga/Makefile.pup for Amiga powerUP SAS/C PPC (Andreas Kleinert)
+- allow "make install prefix=..." even after configure (Glenn Randers-Pehrson)
+- allow "configure --prefix $HOME" (Tim Mooney)
+- remove warnings in example.c and gzio.c (Glenn Randers-Pehrson)
+- move Makefile.sas to amiga/Makefile.sas
+
+Changes in 1.1.1 (27 Feb 98)
+- fix macros _tr_tally_* in deflate.h for debug mode  (Glenn Randers-Pehrson)
+- remove block truncation heuristic which had very marginal effect for zlib
+  (smaller lit_bufsize than in gzip 1.2.4) and degraded a little the
+  compression ratio on some files. This also allows inlining _tr_tally for
+  matches in deflate_slow.
+- added msdos/Makefile.w32 for WIN32 Microsoft Visual C++ (Bob Frazier)
+
+Changes in 1.1.0 (24 Feb 98)
+- do not return STREAM_END prematurely in inflate (John Bowler)
+- revert to the zlib 1.0.8 inflate to avoid the gcc 2.8.0 bug (Jeremy Buhler)
+- compile with -DFASTEST to get compression code optimized for speed only
+- in minigzip, try mmap'ing the input file first (Miguel Albrecht)
+- increase size of I/O buffers in minigzip.c and gzio.c (not a big gain
+  on Sun but significant on HP)
+
+- add a pointer to experimental unzip library in README (Gilles Vollant)
+- initialize variable gcc in configure (Chris Herborth)
+
+Changes in 1.0.9 (17 Feb 1998)
+- added gzputs and gzgets functions
+- do not clear eof flag in gzseek (Mark Diekhans)
+- fix gzseek for files in transparent mode (Mark Diekhans)
+- do not assume that vsprintf returns the number of bytes written (Jens Krinke)
+- replace EXPORT with ZEXPORT to avoid conflict with other programs
+- added compress2 in zconf.h, zlib.def, zlib.dnt
+- new asm code from Gilles Vollant in contrib/asm386
+- simplify the inflate code (Mark):
+ . Replace ZALLOC's in huft_build() with single ZALLOC in inflate_blocks_new()
+ . ZALLOC the length list in inflate_trees_fixed() instead of using stack
+ . ZALLOC the value area for huft_build() instead of using stack
+ . Simplify Z_FINISH check in inflate()
+
+- Avoid gcc 2.8.0 comparison bug a little differently than zlib 1.0.8
+- in inftrees.c, avoid cc -O bug on HP (Farshid Elahi)
+- in zconf.h move the ZLIB_DLL stuff earlier to avoid problems with
+  the declaration of FAR (Gilles VOllant)
+- install libz.so* with mode 755 (executable) instead of 644 (Marc Lehmann)
+- read_buf buf parameter of type Bytef* instead of charf*
+- zmemcpy parameters are of type Bytef*, not charf* (Joseph Strout)
+- do not redeclare unlink in minigzip.c for WIN32 (John Bowler)
+- fix check for presence of directories in "make install" (Ian Willis)
+
+Changes in 1.0.8 (27 Jan 1998)
+- fixed offsets in contrib/asm386/gvmat32.asm (Gilles Vollant)
+- fix gzgetc and gzputc for big endian systems (Markus Oberhumer)
+- added compress2() to allow setting the compression level
+- include sys/types.h to get off_t on some systems (Marc Lehmann & QingLong)
+- use constant arrays for the static trees in trees.c instead of computing
+  them at run time (thanks to Ken Raeburn for this suggestion). To create
+  trees.h, compile with GEN_TREES_H and run "make test".
+- check return code of example in "make test" and display result
+- pass minigzip command line options to file_compress
+- simplifying code of inflateSync to avoid gcc 2.8 bug
+
+- support CC="gcc -Wall" in configure -s (QingLong)
+- avoid a flush caused by ftell in gzopen for write mode (Ken Raeburn)
+- fix test for shared library support to avoid compiler warnings
+- zlib.lib -> zlib.dll in msdos/zlib.rc (Gilles Vollant)
+- check for TARGET_OS_MAC in addition to MACOS (Brad Pettit)
+- do not use fdopen for Metrowerks on Mac (Brad Pettit))
+- add checks for gzputc and gzputc in example.c
+- avoid warnings in gzio.c and deflate.c (Andreas Kleinert)
+- use const for the CRC table (Ken Raeburn)
+- fixed "make uninstall" for shared libraries
+- use Tracev instead of Trace in infblock.c
+- in example.c use correct compressed length for test_sync
+- suppress +vnocompatwarnings in configure for HPUX (not always supported)
+
+Changes in 1.0.7 (20 Jan 1998)
+- fix gzseek which was broken in write mode
+- return error for gzseek to negative absolute position
+- fix configure for Linux (Chun-Chung Chen)
+- increase stack space for MSC (Tim Wegner)
+- get_crc_table and inflateSyncPoint are EXPORTed (Gilles Vollant)
+- define EXPORTVA for gzprintf (Gilles Vollant)
+- added man page zlib.3 (Rick Rodgers)
+- for contrib/untgz, fix makedir() and improve Makefile
+
+- check gzseek in write mode in example.c
+- allocate extra buffer for seeks only if gzseek is actually called
+- avoid signed/unsigned comparisons (Tim Wegner, Gilles Vollant)
+- add inflateSyncPoint in zconf.h
+- fix list of exported functions in nt/zlib.dnt and mdsos/zlib.def
+
+Changes in 1.0.6 (19 Jan 1998)
+- add functions gzprintf, gzputc, gzgetc, gztell, gzeof, gzseek, gzrewind and
+  gzsetparams (thanks to Roland Giersig and Kevin Ruland for some of this code)
+- Fix a deflate bug occurring only with compression level 0 (thanks to
+  Andy Buckler for finding this one).
+- In minigzip, pass transparently also the first byte for .Z files.
+- return Z_BUF_ERROR instead of Z_OK if output buffer full in uncompress()
+- check Z_FINISH in inflate (thanks to Marc Schluper)
+- Implement deflateCopy (thanks to Adam Costello)
+- make static libraries by default in configure, add --shared option.
+- move MSDOS or Windows specific files to directory msdos
+- suppress the notion of partial flush to simplify the interface
+  (but the symbol Z_PARTIAL_FLUSH is kept for compatibility with 1.0.4)
+- suppress history buffer provided by application to simplify the interface
+  (this feature was not implemented anyway in 1.0.4)
+- next_in and avail_in must be initialized before calling inflateInit or
+  inflateInit2
+- add EXPORT in all exported functions (for Windows DLL)
+- added Makefile.nt (thanks to Stephen Williams)
+- added the unsupported "contrib" directory:
+   contrib/asm386/ by Gilles Vollant <info@winimage.com>
+        386 asm code replacing longest_match().
+   contrib/iostream/ by Kevin Ruland <kevin@rodin.wustl.edu>
+        A C++ I/O streams interface to the zlib gz* functions
+   contrib/iostream2/  by Tyge Løvset <Tyge.Lovset@cmr.no>
+        Another C++ I/O streams interface
+   contrib/untgz/  by "Pedro A. Aranda Guti\irrez" <paag@tid.es>
+        A very simple tar.gz file extractor using zlib
+   contrib/visual-basic.txt by Carlos Rios <c_rios@sonda.cl>
+        How to use compress(), uncompress() and the gz* functions from VB.
+- pass params -f (filtered data), -h (huffman only), -1 to -9 (compression
+  level) in minigzip (thanks to Tom Lane)
+
+- use const for rommable constants in deflate
+- added test for gzseek and gztell in example.c
+- add undocumented function inflateSyncPoint() (hack for Paul Mackerras)
+- add undocumented function zError to convert error code to string
+  (for Tim Smithers)
+- Allow compilation of gzio with -DNO_DEFLATE to avoid the compression code.
+- Use default memcpy for Symantec MSDOS compiler.
+- Add EXPORT keyword for check_func (needed for Windows DLL)
+- add current directory to LD_LIBRARY_PATH for "make test"
+- create also a link for libz.so.1
+- added support for FUJITSU UXP/DS (thanks to Toshiaki Nomura)
+- use $(SHAREDLIB) instead of libz.so in Makefile.in (for HPUX)
+- added -soname for Linux in configure (Chun-Chung Chen,
+- assign numbers to the exported functions in zlib.def (for Windows DLL)
+- add advice in zlib.h for best usage of deflateSetDictionary
+- work around compiler bug on Atari (cast Z_NULL in call of s->checkfn)
+- allow compilation with ANSI keywords only enabled for TurboC in large model
+- avoid "versionString"[0] (Borland bug)
+- add NEED_DUMMY_RETURN for Borland
+- use variable z_verbose for tracing in debug mode (L. Peter Deutsch).
+- allow compilation with CC
+- defined STDC for OS/2 (David Charlap)
+- limit external names to 8 chars for MVS (Thomas Lund)
+- in minigzip.c, use static buffers only for 16-bit systems
+- fix suffix check for "minigzip -d foo.gz"
+- do not return an error for the 2nd of two consecutive gzflush() (Felix Lee)
+- use _fdopen instead of fdopen for MSC >= 6.0 (Thomas Fanslau)
+- added makelcc.bat for lcc-win32 (Tom St Denis)
+- in Makefile.dj2, use copy and del instead of install and rm (Frank Donahoe)
+- Avoid expanded $Id$. Use "rcs -kb" or "cvs admin -kb" to avoid Id expansion.
+- check for unistd.h in configure (for off_t)
+- remove useless check parameter in inflate_blocks_free
+- avoid useless assignment of s->check to itself in inflate_blocks_new
+- do not flush twice in gzclose (thanks to Ken Raeburn)
+- rename FOPEN as F_OPEN to avoid clash with /usr/include/sys/file.h
+- use NO_ERRNO_H instead of enumeration of operating systems with errno.h
+- work around buggy fclose on pipes for HP/UX
+- support zlib DLL with BORLAND C++ 5.0 (thanks to Glenn Randers-Pehrson)
+- fix configure if CC is already equal to gcc
+
+Changes in 1.0.5 (3 Jan 98)
+- Fix inflate to terminate gracefully when fed corrupted or invalid data
+- Use const for rommable constants in inflate
+- Eliminate memory leaks on error conditions in inflate
+- Removed some vestigial code in inflate
+- Update web address in README
+
+Changes in 1.0.4 (24 Jul 96)
+- In very rare conditions, deflate(s, Z_FINISH) could fail to produce an EOF
+  bit, so the decompressor could decompress all the correct data but went
+  on to attempt decompressing extra garbage data. This affected minigzip too.
+- zlibVersion and gzerror return const char* (needed for DLL)
+- port to RISCOS (no fdopen, no multiple dots, no unlink, no fileno)
+- use z_error only for DEBUG (avoid problem with DLLs)
+
+Changes in 1.0.3 (2 Jul 96)
+- use z_streamp instead of z_stream *, which is now a far pointer in MSDOS
+  small and medium models; this makes the library incompatible with previous
+  versions for these models. (No effect in large model or on other systems.)
+- return OK instead of BUF_ERROR if previous deflate call returned with
+  avail_out as zero but there is nothing to do
+- added memcmp for non STDC compilers
+- define NO_DUMMY_DECL for more Mac compilers (.h files merged incorrectly)
+- define __32BIT__ if __386__ or i386 is defined (pb. with Watcom and SCO)
+- better check for 16-bit mode MSC (avoids problem with Symantec)
+
+Changes in 1.0.2 (23 May 96)
+- added Windows DLL support
+- added a function zlibVersion (for the DLL support)
+- fixed declarations using Bytef in infutil.c (pb with MSDOS medium model)
+- Bytef is define's instead of typedef'd only for Borland C
+- avoid reading uninitialized memory in example.c
+- mention in README that the zlib format is now RFC1950
+- updated Makefile.dj2
+- added algorithm.doc
+
+Changes in 1.0.1 (20 May 96) [1.0 skipped to avoid confusion]
+- fix array overlay in deflate.c which sometimes caused bad compressed data
+- fix inflate bug with empty stored block
+- fix MSDOS medium model which was broken in 0.99
+- fix deflateParams() which could generated bad compressed data.
+- Bytef is define'd instead of typedef'ed (work around Borland bug)
+- added an INDEX file
+- new makefiles for DJGPP (Makefile.dj2), 32-bit Borland (Makefile.b32),
+  Watcom (Makefile.wat), Amiga SAS/C (Makefile.sas)
+- speed up adler32 for modern machines without auto-increment
+- added -ansi for IRIX in configure
+- static_init_done in trees.c is an int
+- define unlink as delete for VMS
+- fix configure for QNX
+- add configure branch for SCO and HPUX
+- avoid many warnings (unused variables, dead assignments, etc...)
+- no fdopen for BeOS
+- fix the Watcom fix for 32 bit mode (define FAR as empty)
+- removed redefinition of Byte for MKWERKS
+- work around an MWKERKS bug (incorrect merge of all .h files)
+
+Changes in 0.99 (27 Jan 96)
+- allow preset dictionary shared between compressor and decompressor
+- allow compression level 0 (no compression)
+- add deflateParams in zlib.h: allow dynamic change of compression level
+  and compression strategy.
+- test large buffers and deflateParams in example.c
+- add optional "configure" to build zlib as a shared library
+- suppress Makefile.qnx, use configure instead
+- fixed deflate for 64-bit systems (detected on Cray)
+- fixed inflate_blocks for 64-bit systems (detected on Alpha)
+- declare Z_DEFLATED in zlib.h (possible parameter for deflateInit2)
+- always return Z_BUF_ERROR when deflate() has nothing to do
+- deflateInit and inflateInit are now macros to allow version checking
+- prefix all global functions and types with z_ with -DZ_PREFIX
+- make falloc completely reentrant (inftrees.c)
+- fixed very unlikely race condition in ct_static_init
+- free in reverse order of allocation to help memory manager
+- use zlib-1.0/* instead of zlib/* inside the tar.gz
+- make zlib warning-free with "gcc -O3 -Wall -Wwrite-strings -Wpointer-arith
+  -Wconversion -Wstrict-prototypes -Wmissing-prototypes"
+- allow gzread on concatenated .gz files
+- deflateEnd now returns Z_DATA_ERROR if it was premature
+- deflate is finally (?) fully deterministic (no matches beyond end of input)
+- Document Z_SYNC_FLUSH
+- add uninstall in Makefile
+- Check for __cpluplus in zlib.h
+- Better test in ct_align for partial flush
+- avoid harmless warnings for Borland C++
+- initialize hash_head in deflate.c
+- avoid warning on fdopen (gzio.c) for HP cc -Aa
+- include stdlib.h for STDC compilers
+- include errno.h for Cray
+- ignore error if ranlib doesn't exist
+- call ranlib twice for NeXTSTEP
+- use exec_prefix instead of prefix for libz.a
+- renamed ct_* as _tr_* to avoid conflict with applications
+- clear z->msg in inflateInit2 before any error return
+- initialize opaque in example.c, gzio.c, deflate.c and inflate.c
+- fixed typo in zconf.h (_GNUC__ => __GNUC__)
+- check for WIN32 in zconf.h and zutil.c (avoid farmalloc in 32-bit mode)
+- fix typo in Make_vms.com (f$trnlnm -> f$getsyi)
+- in fcalloc, normalize pointer if size > 65520 bytes
+- don't use special fcalloc for 32 bit Borland C++
+- use STDC instead of __GO32__ to avoid redeclaring exit, calloc, etc...
+- use Z_BINARY instead of BINARY
+- document that gzclose after gzdopen will close the file
+- allow "a" as mode in gzopen.
+- fix error checking in gzread
+- allow skipping .gz extra-field on pipes
+- added reference to Perl interface in README
+- put the crc table in FAR data (I dislike more and more the medium model :)
+- added get_crc_table
+- added a dimension to all arrays (Borland C can't count).
+- workaround Borland C bug in declaration of inflate_codes_new & inflate_fast
+- guard against multiple inclusion of *.h (for precompiled header on Mac)
+- Watcom C pretends to be Microsoft C small model even in 32 bit mode.
+- don't use unsized arrays to avoid silly warnings by Visual C++:
+     warning C4746: 'inflate_mask' : unsized array treated as  '__far'
+     (what's wrong with far data in far model?).
+- define enum out of inflate_blocks_state to allow compilation with C++
+
+Changes in 0.95 (16 Aug 95)
+- fix MSDOS small and medium model (now easier to adapt to any compiler)
+- inlined send_bits
+- fix the final (:-) bug for deflate with flush (output was correct but
+  not completely flushed in rare occasions).
+- default window size is same for compression and decompression
+  (it's now sufficient to set MAX_WBITS in zconf.h).
+- voidp -> voidpf and voidnp -> voidp (for consistency with other
+  typedefs and because voidnp was not near in large model).
+
+Changes in 0.94 (13 Aug 95)
+- support MSDOS medium model
+- fix deflate with flush (could sometimes generate bad output)
+- fix deflateReset (zlib header was incorrectly suppressed)
+- added support for VMS
+- allow a compression level in gzopen()
+- gzflush now calls fflush
+- For deflate with flush, flush even if no more input is provided.
+- rename libgz.a as libz.a
+- avoid complex expression in infcodes.c triggering Turbo C bug
+- work around a problem with gcc on Alpha (in INSERT_STRING)
+- don't use inline functions (problem with some gcc versions)
+- allow renaming of Byte, uInt, etc... with #define.
+- avoid warning about (unused) pointer before start of array in deflate.c
+- avoid various warnings in gzio.c, example.c, infblock.c, adler32.c, zutil.c
+- avoid reserved word 'new' in trees.c
+
+Changes in 0.93 (25 June 95)
+- temporarily disable inline functions
+- make deflate deterministic
+- give enough lookahead for PARTIAL_FLUSH
+- Set binary mode for stdin/stdout in minigzip.c for OS/2
+- don't even use signed char in inflate (not portable enough)
+- fix inflate memory leak for segmented architectures
+
+Changes in 0.92 (3 May 95)
+- don't assume that char is signed (problem on SGI)
+- Clear bit buffer when starting a stored block
+- no memcpy on Pyramid
+- suppressed inftest.c
+- optimized fill_window, put longest_match inline for gcc
+- optimized inflate on stored blocks.
+- untabify all sources to simplify patches
+
+Changes in 0.91 (2 May 95)
+- Default MEM_LEVEL is 8 (not 9 for Unix) as documented in zlib.h
+- Document the memory requirements in zconf.h
+- added "make install"
+- fix sync search logic in inflateSync
+- deflate(Z_FULL_FLUSH) now works even if output buffer too short
+- after inflateSync, don't scare people with just "lo world"
+- added support for DJGPP
+
+Changes in 0.9 (1 May 95)
+- don't assume that zalloc clears the allocated memory (the TurboC bug
+  was Mark's bug after all :)
+- let again gzread copy uncompressed data unchanged (was working in 0.71)
+- deflate(Z_FULL_FLUSH), inflateReset and inflateSync are now fully implemented
+- added a test of inflateSync in example.c
+- moved MAX_WBITS to zconf.h because users might want to change that.
+- document explicitly that zalloc(64K) on MSDOS must return a normalized
+  pointer (zero offset)
+- added Makefiles for Microsoft C, Turbo C, Borland C++
+- faster crc32()
+
+Changes in 0.8 (29 April 95)
+- added fast inflate (inffast.c)
+- deflate(Z_FINISH) now returns Z_STREAM_END when done. Warning: this
+  is incompatible with previous versions of zlib which returned Z_OK.
+- work around a TurboC compiler bug (bad code for b << 0, see infutil.h)
+  (actually that was not a compiler bug, see 0.81 above)
+- gzread no longer reads one extra byte in certain cases
+- In gzio destroy(), don't reference a freed structure
+- avoid many warnings for MSDOS
+- avoid the ERROR symbol which is used by MS Windows
+
+Changes in 0.71 (14 April 95)
+- Fixed more MSDOS compilation problems :( There is still a bug with
+  TurboC large model.
+
+Changes in 0.7 (14 April 95)
+- Added full inflate support.
+- Simplified the crc32() interface. The pre- and post-conditioning
+  (one's complement) is now done inside crc32(). WARNING: this is
+  incompatible with previous versions; see zlib.h for the new usage.
+
+Changes in 0.61 (12 April 95)
+- workaround for a bug in TurboC. example and minigzip now work on MSDOS.
+
+Changes in 0.6 (11 April 95)
+- added minigzip.c
+- added gzdopen to reopen a file descriptor as gzFile
+- added transparent reading of non-gziped files in gzread.
+- fixed bug in gzread (don't read crc as data)
+- fixed bug in destroy (gzio.c) (don't return Z_STREAM_END for gzclose).
+- don't allocate big arrays in the stack (for MSDOS)
+- fix some MSDOS compilation problems
+
+Changes in 0.5:
+- do real compression in deflate.c. Z_PARTIAL_FLUSH is supported but
+  not yet Z_FULL_FLUSH.
+- support decompression but only in a single step (forced Z_FINISH)
+- added opaque object for zalloc and zfree.
+- added deflateReset and inflateReset
+- added a variable zlib_version for consistency checking.
+- renamed the 'filter' parameter of deflateInit2 as 'strategy'.
+  Added Z_FILTERED and Z_HUFFMAN_ONLY constants.
+
+Changes in 0.4:
+- avoid "zip" everywhere, use zlib instead of ziplib.
+- suppress Z_BLOCK_FLUSH, interpret Z_PARTIAL_FLUSH as block flush
+  if compression method == 8.
+- added adler32 and crc32
+- renamed deflateOptions as deflateInit2, call one or the other but not both
+- added the method parameter for deflateInit2.
+- added inflateInit2
+- simplied considerably deflateInit and inflateInit by not supporting
+  user-provided history buffer. This is supported only in deflateInit2
+  and inflateInit2.
+
+Changes in 0.3:
+- prefix all macro names with Z_
+- use Z_FINISH instead of deflateEnd to finish compression.
+- added Z_HUFFMAN_ONLY
+- added gzerror()
diff --git a/zlib/FAQ b/zlib/FAQ
new file mode 100644 (file)
index 0000000..99b7cf9
--- /dev/null
+++ b/zlib/FAQ
@@ -0,0 +1,368 @@
+
+                Frequently Asked Questions about zlib
+
+
+If your question is not there, please check the zlib home page
+http://zlib.net/ which may have more recent information.
+The lastest zlib FAQ is at http://zlib.net/zlib_faq.html
+
+
+ 1. Is zlib Y2K-compliant?
+
+    Yes. zlib doesn't handle dates.
+
+ 2. Where can I get a Windows DLL version?
+
+    The zlib sources can be compiled without change to produce a DLL.  See the
+    file win32/DLL_FAQ.txt in the zlib distribution.  Pointers to the
+    precompiled DLL are found in the zlib web site at http://zlib.net/ .
+
+ 3. Where can I get a Visual Basic interface to zlib?
+
+    See
+        * http://marknelson.us/1997/01/01/zlib-engine/
+        * win32/DLL_FAQ.txt in the zlib distribution
+
+ 4. compress() returns Z_BUF_ERROR.
+
+    Make sure that before the call of compress(), the length of the compressed
+    buffer is equal to the available size of the compressed buffer and not
+    zero.  For Visual Basic, check that this parameter is passed by reference
+    ("as any"), not by value ("as long").
+
+ 5. deflate() or inflate() returns Z_BUF_ERROR.
+
+    Before making the call, make sure that avail_in and avail_out are not zero.
+    When setting the parameter flush equal to Z_FINISH, also make sure that
+    avail_out is big enough to allow processing all pending input.  Note that a
+    Z_BUF_ERROR is not fatal--another call to deflate() or inflate() can be
+    made with more input or output space.  A Z_BUF_ERROR may in fact be
+    unavoidable depending on how the functions are used, since it is not
+    possible to tell whether or not there is more output pending when
+    strm.avail_out returns with zero.  See http://zlib.net/zlib_how.html for a
+    heavily annotated example.
+
+ 6. Where's the zlib documentation (man pages, etc.)?
+
+    It's in zlib.h .  Examples of zlib usage are in the files test/example.c
+    and test/minigzip.c, with more in examples/ .
+
+ 7. Why don't you use GNU autoconf or libtool or ...?
+
+    Because we would like to keep zlib as a very small and simple package.
+    zlib is rather portable and doesn't need much configuration.
+
+ 8. I found a bug in zlib.
+
+    Most of the time, such problems are due to an incorrect usage of zlib.
+    Please try to reproduce the problem with a small program and send the
+    corresponding source to us at zlib@gzip.org .  Do not send multi-megabyte
+    data files without prior agreement.
+
+ 9. Why do I get "undefined reference to gzputc"?
+
+    If "make test" produces something like
+
+       example.o(.text+0x154): undefined reference to `gzputc'
+
+    check that you don't have old files libz.* in /usr/lib, /usr/local/lib or
+    /usr/X11R6/lib. Remove any old versions, then do "make install".
+
+10. I need a Delphi interface to zlib.
+
+    See the contrib/delphi directory in the zlib distribution.
+
+11. Can zlib handle .zip archives?
+
+    Not by itself, no.  See the directory contrib/minizip in the zlib
+    distribution.
+
+12. Can zlib handle .Z files?
+
+    No, sorry.  You have to spawn an uncompress or gunzip subprocess, or adapt
+    the code of uncompress on your own.
+
+13. How can I make a Unix shared library?
+
+    By default a shared (and a static) library is built for Unix.  So:
+
+    make distclean
+    ./configure
+    make
+
+14. How do I install a shared zlib library on Unix?
+
+    After the above, then:
+
+    make install
+
+    However, many flavors of Unix come with a shared zlib already installed.
+    Before going to the trouble of compiling a shared version of zlib and
+    trying to install it, you may want to check if it's already there!  If you
+    can #include <zlib.h>, it's there.  The -lz option will probably link to
+    it.  You can check the version at the top of zlib.h or with the
+    ZLIB_VERSION symbol defined in zlib.h .
+
+15. I have a question about OttoPDF.
+
+    We are not the authors of OttoPDF. The real author is on the OttoPDF web
+    site: Joel Hainley, jhainley@myndkryme.com.
+
+16. Can zlib decode Flate data in an Adobe PDF file?
+
+    Yes. See http://www.pdflib.com/ . To modify PDF forms, see
+    http://sourceforge.net/projects/acroformtool/ .
+
+17. Why am I getting this "register_frame_info not found" error on Solaris?
+
+    After installing zlib 1.1.4 on Solaris 2.6, running applications using zlib
+    generates an error such as:
+
+        ld.so.1: rpm: fatal: relocation error: file /usr/local/lib/libz.so:
+        symbol __register_frame_info: referenced symbol not found
+
+    The symbol __register_frame_info is not part of zlib, it is generated by
+    the C compiler (cc or gcc).  You must recompile applications using zlib
+    which have this problem.  This problem is specific to Solaris.  See
+    http://www.sunfreeware.com for Solaris versions of zlib and applications
+    using zlib.
+
+18. Why does gzip give an error on a file I make with compress/deflate?
+
+    The compress and deflate functions produce data in the zlib format, which
+    is different and incompatible with the gzip format.  The gz* functions in
+    zlib on the other hand use the gzip format.  Both the zlib and gzip formats
+    use the same compressed data format internally, but have different headers
+    and trailers around the compressed data.
+
+19. Ok, so why are there two different formats?
+
+    The gzip format was designed to retain the directory information about a
+    single file, such as the name and last modification date.  The zlib format
+    on the other hand was designed for in-memory and communication channel
+    applications, and has a much more compact header and trailer and uses a
+    faster integrity check than gzip.
+
+20. Well that's nice, but how do I make a gzip file in memory?
+
+    You can request that deflate write the gzip format instead of the zlib
+    format using deflateInit2().  You can also request that inflate decode the
+    gzip format using inflateInit2().  Read zlib.h for more details.
+
+21. Is zlib thread-safe?
+
+    Yes.  However any library routines that zlib uses and any application-
+    provided memory allocation routines must also be thread-safe.  zlib's gz*
+    functions use stdio library routines, and most of zlib's functions use the
+    library memory allocation routines by default.  zlib's *Init* functions
+    allow for the application to provide custom memory allocation routines.
+
+    Of course, you should only operate on any given zlib or gzip stream from a
+    single thread at a time.
+
+22. Can I use zlib in my commercial application?
+
+    Yes.  Please read the license in zlib.h.
+
+23. Is zlib under the GNU license?
+
+    No.  Please read the license in zlib.h.
+
+24. The license says that altered source versions must be "plainly marked". So
+    what exactly do I need to do to meet that requirement?
+
+    You need to change the ZLIB_VERSION and ZLIB_VERNUM #defines in zlib.h.  In
+    particular, the final version number needs to be changed to "f", and an
+    identification string should be appended to ZLIB_VERSION.  Version numbers
+    x.x.x.f are reserved for modifications to zlib by others than the zlib
+    maintainers.  For example, if the version of the base zlib you are altering
+    is "1.2.3.4", then in zlib.h you should change ZLIB_VERNUM to 0x123f, and
+    ZLIB_VERSION to something like "1.2.3.f-zachary-mods-v3".  You can also
+    update the version strings in deflate.c and inftrees.c.
+
+    For altered source distributions, you should also note the origin and
+    nature of the changes in zlib.h, as well as in ChangeLog and README, along
+    with the dates of the alterations.  The origin should include at least your
+    name (or your company's name), and an email address to contact for help or
+    issues with the library.
+
+    Note that distributing a compiled zlib library along with zlib.h and
+    zconf.h is also a source distribution, and so you should change
+    ZLIB_VERSION and ZLIB_VERNUM and note the origin and nature of the changes
+    in zlib.h as you would for a full source distribution.
+
+25. Will zlib work on a big-endian or little-endian architecture, and can I
+    exchange compressed data between them?
+
+    Yes and yes.
+
+26. Will zlib work on a 64-bit machine?
+
+    Yes.  It has been tested on 64-bit machines, and has no dependence on any
+    data types being limited to 32-bits in length.  If you have any
+    difficulties, please provide a complete problem report to zlib@gzip.org
+
+27. Will zlib decompress data from the PKWare Data Compression Library?
+
+    No.  The PKWare DCL uses a completely different compressed data format than
+    does PKZIP and zlib.  However, you can look in zlib's contrib/blast
+    directory for a possible solution to your problem.
+
+28. Can I access data randomly in a compressed stream?
+
+    No, not without some preparation.  If when compressing you periodically use
+    Z_FULL_FLUSH, carefully write all the pending data at those points, and
+    keep an index of those locations, then you can start decompression at those
+    points.  You have to be careful to not use Z_FULL_FLUSH too often, since it
+    can significantly degrade compression.  Alternatively, you can scan a
+    deflate stream once to generate an index, and then use that index for
+    random access.  See examples/zran.c .
+
+29. Does zlib work on MVS, OS/390, CICS, etc.?
+
+    It has in the past, but we have not heard of any recent evidence.  There
+    were working ports of zlib 1.1.4 to MVS, but those links no longer work.
+    If you know of recent, successful applications of zlib on these operating
+    systems, please let us know.  Thanks.
+
+30. Is there some simpler, easier to read version of inflate I can look at to
+    understand the deflate format?
+
+    First off, you should read RFC 1951.  Second, yes.  Look in zlib's
+    contrib/puff directory.
+
+31. Does zlib infringe on any patents?
+
+    As far as we know, no.  In fact, that was originally the whole point behind
+    zlib.  Look here for some more information:
+
+    http://www.gzip.org/#faq11
+
+32. Can zlib work with greater than 4 GB of data?
+
+    Yes.  inflate() and deflate() will process any amount of data correctly.
+    Each call of inflate() or deflate() is limited to input and output chunks
+    of the maximum value that can be stored in the compiler's "unsigned int"
+    type, but there is no limit to the number of chunks.  Note however that the
+    strm.total_in and strm_total_out counters may be limited to 4 GB.  These
+    counters are provided as a convenience and are not used internally by
+    inflate() or deflate().  The application can easily set up its own counters
+    updated after each call of inflate() or deflate() to count beyond 4 GB.
+    compress() and uncompress() may be limited to 4 GB, since they operate in a
+    single call.  gzseek() and gztell() may be limited to 4 GB depending on how
+    zlib is compiled.  See the zlibCompileFlags() function in zlib.h.
+
+    The word "may" appears several times above since there is a 4 GB limit only
+    if the compiler's "long" type is 32 bits.  If the compiler's "long" type is
+    64 bits, then the limit is 16 exabytes.
+
+33. Does zlib have any security vulnerabilities?
+
+    The only one that we are aware of is potentially in gzprintf().  If zlib is
+    compiled to use sprintf() or vsprintf(), then there is no protection
+    against a buffer overflow of an 8K string space (or other value as set by
+    gzbuffer()), other than the caller of gzprintf() assuring that the output
+    will not exceed 8K.  On the other hand, if zlib is compiled to use
+    snprintf() or vsnprintf(), which should normally be the case, then there is
+    no vulnerability.  The ./configure script will display warnings if an
+    insecure variation of sprintf() will be used by gzprintf().  Also the
+    zlibCompileFlags() function will return information on what variant of
+    sprintf() is used by gzprintf().
+
+    If you don't have snprintf() or vsnprintf() and would like one, you can
+    find a portable implementation here:
+
+        http://www.ijs.si/software/snprintf/
+
+    Note that you should be using the most recent version of zlib.  Versions
+    1.1.3 and before were subject to a double-free vulnerability, and versions
+    1.2.1 and 1.2.2 were subject to an access exception when decompressing
+    invalid compressed data.
+
+34. Is there a Java version of zlib?
+
+    Probably what you want is to use zlib in Java. zlib is already included
+    as part of the Java SDK in the java.util.zip package. If you really want
+    a version of zlib written in the Java language, look on the zlib home
+    page for links: http://zlib.net/ .
+
+35. I get this or that compiler or source-code scanner warning when I crank it
+    up to maximally-pedantic. Can't you guys write proper code?
+
+    Many years ago, we gave up attempting to avoid warnings on every compiler
+    in the universe.  It just got to be a waste of time, and some compilers
+    were downright silly as well as contradicted each other.  So now, we simply
+    make sure that the code always works.
+
+36. Valgrind (or some similar memory access checker) says that deflate is
+    performing a conditional jump that depends on an uninitialized value.
+    Isn't that a bug?
+
+    No.  That is intentional for performance reasons, and the output of deflate
+    is not affected.  This only started showing up recently since zlib 1.2.x
+    uses malloc() by default for allocations, whereas earlier versions used
+    calloc(), which zeros out the allocated memory.  Even though the code was
+    correct, versions 1.2.4 and later was changed to not stimulate these
+    checkers.
+
+37. Will zlib read the (insert any ancient or arcane format here) compressed
+    data format?
+
+    Probably not. Look in the comp.compression FAQ for pointers to various
+    formats and associated software.
+
+38. How can I encrypt/decrypt zip files with zlib?
+
+    zlib doesn't support encryption.  The original PKZIP encryption is very
+    weak and can be broken with freely available programs.  To get strong
+    encryption, use GnuPG, http://www.gnupg.org/ , which already includes zlib
+    compression.  For PKZIP compatible "encryption", look at
+    http://www.info-zip.org/
+
+39. What's the difference between the "gzip" and "deflate" HTTP 1.1 encodings?
+
+    "gzip" is the gzip format, and "deflate" is the zlib format.  They should
+    probably have called the second one "zlib" instead to avoid confusion with
+    the raw deflate compressed data format.  While the HTTP 1.1 RFC 2616
+    correctly points to the zlib specification in RFC 1950 for the "deflate"
+    transfer encoding, there have been reports of servers and browsers that
+    incorrectly produce or expect raw deflate data per the deflate
+    specification in RFC 1951, most notably Microsoft.  So even though the
+    "deflate" transfer encoding using the zlib format would be the more
+    efficient approach (and in fact exactly what the zlib format was designed
+    for), using the "gzip" transfer encoding is probably more reliable due to
+    an unfortunate choice of name on the part of the HTTP 1.1 authors.
+
+    Bottom line: use the gzip format for HTTP 1.1 encoding.
+
+40. Does zlib support the new "Deflate64" format introduced by PKWare?
+
+    No.  PKWare has apparently decided to keep that format proprietary, since
+    they have not documented it as they have previous compression formats.  In
+    any case, the compression improvements are so modest compared to other more
+    modern approaches, that it's not worth the effort to implement.
+
+41. I'm having a problem with the zip functions in zlib, can you help?
+
+    There are no zip functions in zlib.  You are probably using minizip by
+    Giles Vollant, which is found in the contrib directory of zlib.  It is not
+    part of zlib.  In fact none of the stuff in contrib is part of zlib.  The
+    files in there are not supported by the zlib authors.  You need to contact
+    the authors of the respective contribution for help.
+
+42. The match.asm code in contrib is under the GNU General Public License.
+    Since it's part of zlib, doesn't that mean that all of zlib falls under the
+    GNU GPL?
+
+    No.  The files in contrib are not part of zlib.  They were contributed by
+    other authors and are provided as a convenience to the user within the zlib
+    distribution.  Each item in contrib has its own license.
+
+43. Is zlib subject to export controls?  What is its ECCN?
+
+    zlib is not subject to export controls, and so is classified as EAR99.
+
+44. Can you please sign these lengthy legal documents and fax them back to us
+    so that we can use your software in our product?
+
+    No. Go away. Shoo.
diff --git a/zlib/README b/zlib/README
new file mode 100644 (file)
index 0000000..ace67a5
--- /dev/null
@@ -0,0 +1,124 @@
+//-----------------------------------------------------------------------------
+// This version of zlib is modified for use within the Proxmark3 project. 
+// Files from the original distribution which are not required for this
+// purpose are not included. All modifications can easily be found
+// by searching for #ifdef ZLIB_PM3_TUNED and #ifndef ZLIB_PM3_TUNED.
+//
+// The rest of this file consists of the original README content
+//-----------------------------------------------------------------------------
+
+ZLIB DATA COMPRESSION LIBRARY
+
+zlib 1.2.8 is a general purpose data compression library.  All the code is
+thread safe.  The data format used by the zlib library is described by RFCs
+(Request for Comments) 1950 to 1952 in the files
+http://tools.ietf.org/html/rfc1950 (zlib format), rfc1951 (deflate format) and
+rfc1952 (gzip format).
+
+All functions of the compression library are documented in the file zlib.h
+(volunteer to write man pages welcome, contact zlib@gzip.org).  A usage example
+of the library is given in the file test/example.c which also tests that
+the library is working correctly.  Another example is given in the file
+test/minigzip.c.  The compression library itself is composed of all source
+files in the root directory.
+
+To compile all files and run the test program, follow the instructions given at
+the top of Makefile.in.  In short "./configure; make test", and if that goes
+well, "make install" should work for most flavors of Unix.  For Windows, use
+one of the special makefiles in win32/ or contrib/vstudio/ .  For VMS, use
+make_vms.com.
+
+Questions about zlib should be sent to <zlib@gzip.org>, or to Gilles Vollant
+<info@winimage.com> for the Windows DLL version.  The zlib home page is
+http://zlib.net/ .  Before reporting a problem, please check this site to
+verify that you have the latest version of zlib; otherwise get the latest
+version and check whether the problem still exists or not.
+
+PLEASE read the zlib FAQ http://zlib.net/zlib_faq.html before asking for help.
+
+Mark Nelson <markn@ieee.org> wrote an article about zlib for the Jan.  1997
+issue of Dr.  Dobb's Journal; a copy of the article is available at
+http://marknelson.us/1997/01/01/zlib-engine/ .
+
+The changes made in version 1.2.8 are documented in the file ChangeLog.
+
+Unsupported third party contributions are provided in directory contrib/ .
+
+zlib is available in Java using the java.util.zip package, documented at
+http://java.sun.com/developer/technicalArticles/Programming/compression/ .
+
+A Perl interface to zlib written by Paul Marquess <pmqs@cpan.org> is available
+at CPAN (Comprehensive Perl Archive Network) sites, including
+http://search.cpan.org/~pmqs/IO-Compress-Zlib/ .
+
+A Python interface to zlib written by A.M. Kuchling <amk@amk.ca> is
+available in Python 1.5 and later versions, see
+http://docs.python.org/library/zlib.html .
+
+zlib is built into tcl: http://wiki.tcl.tk/4610 .
+
+An experimental package to read and write files in .zip format, written on top
+of zlib by Gilles Vollant <info@winimage.com>, is available in the
+contrib/minizip directory of zlib.
+
+
+Notes for some targets:
+
+- For Windows DLL versions, please see win32/DLL_FAQ.txt
+
+- For 64-bit Irix, deflate.c must be compiled without any optimization. With
+  -O, one libpng test fails. The test works in 32 bit mode (with the -n32
+  compiler flag). The compiler bug has been reported to SGI.
+
+- zlib doesn't work with gcc 2.6.3 on a DEC 3000/300LX under OSF/1 2.1 it works
+  when compiled with cc.
+
+- On Digital Unix 4.0D (formely OSF/1) on AlphaServer, the cc option -std1 is
+  necessary to get gzprintf working correctly. This is done by configure.
+
+- zlib doesn't work on HP-UX 9.05 with some versions of /bin/cc. It works with
+  other compilers. Use "make test" to check your compiler.
+
+- gzdopen is not supported on RISCOS or BEOS.
+
+- For PalmOs, see http://palmzlib.sourceforge.net/
+
+
+Acknowledgments:
+
+  The deflate format used by zlib was defined by Phil Katz.  The deflate and
+  zlib specifications were written by L.  Peter Deutsch.  Thanks to all the
+  people who reported problems and suggested various improvements in zlib; they
+  are too numerous to cite here.
+
+Copyright notice:
+
+ (C) 1995-2013 Jean-loup Gailly and Mark Adler
+
+  This software is provided 'as-is', without any express or implied
+  warranty.  In no event will the authors be held liable for any damages
+  arising from the use of this software.
+
+  Permission is granted to anyone to use this software for any purpose,
+  including commercial applications, and to alter it and redistribute it
+  freely, subject to the following restrictions:
+
+  1. The origin of this software must not be misrepresented; you must not
+     claim that you wrote the original software. If you use this software
+     in a product, an acknowledgment in the product documentation would be
+     appreciated but is not required.
+  2. Altered source versions must be plainly marked as such, and must not be
+     misrepresented as being the original software.
+  3. This notice may not be removed or altered from any source distribution.
+
+  Jean-loup Gailly        Mark Adler
+  jloup@gzip.org          madler@alumni.caltech.edu
+
+If you use the zlib library in a product, we would appreciate *not* receiving
+lengthy legal documents to sign.  The sources are provided for free but without
+warranty of any kind.  The library has been entirely written by Jean-loup
+Gailly and Mark Adler; it does not include third-party code.
+
+If you redistribute modified sources, we would appreciate that you include in
+the file ChangeLog history information documenting your changes.  Please read
+the FAQ for more information on the distribution of modified source versions.
diff --git a/zlib/adler32.c b/zlib/adler32.c
new file mode 100644 (file)
index 0000000..a868f07
--- /dev/null
@@ -0,0 +1,179 @@
+/* adler32.c -- compute the Adler-32 checksum of a data stream
+ * Copyright (C) 1995-2011 Mark Adler
+ * For conditions of distribution and use, see copyright notice in zlib.h
+ */
+
+/* @(#) $Id$ */
+
+#include "zutil.h"
+
+#define local static
+
+local uLong adler32_combine_ OF((uLong adler1, uLong adler2, z_off64_t len2));
+
+#define BASE 65521      /* largest prime smaller than 65536 */
+#define NMAX 5552
+/* NMAX is the largest n such that 255n(n+1)/2 + (n+1)(BASE-1) <= 2^32-1 */
+
+#define DO1(buf,i)  {adler += (buf)[i]; sum2 += adler;}
+#define DO2(buf,i)  DO1(buf,i); DO1(buf,i+1);
+#define DO4(buf,i)  DO2(buf,i); DO2(buf,i+2);
+#define DO8(buf,i)  DO4(buf,i); DO4(buf,i+4);
+#define DO16(buf)   DO8(buf,0); DO8(buf,8);
+
+/* use NO_DIVIDE if your processor does not do division in hardware --
+   try it both ways to see which is faster */
+#ifdef NO_DIVIDE
+/* note that this assumes BASE is 65521, where 65536 % 65521 == 15
+   (thank you to John Reiser for pointing this out) */
+#  define CHOP(a) \
+    do { \
+        unsigned long tmp = a >> 16; \
+        a &= 0xffffUL; \
+        a += (tmp << 4) - tmp; \
+    } while (0)
+#  define MOD28(a) \
+    do { \
+        CHOP(a); \
+        if (a >= BASE) a -= BASE; \
+    } while (0)
+#  define MOD(a) \
+    do { \
+        CHOP(a); \
+        MOD28(a); \
+    } while (0)
+#  define MOD63(a) \
+    do { /* this assumes a is not negative */ \
+        z_off64_t tmp = a >> 32; \
+        a &= 0xffffffffL; \
+        a += (tmp << 8) - (tmp << 5) + tmp; \
+        tmp = a >> 16; \
+        a &= 0xffffL; \
+        a += (tmp << 4) - tmp; \
+        tmp = a >> 16; \
+        a &= 0xffffL; \
+        a += (tmp << 4) - tmp; \
+        if (a >= BASE) a -= BASE; \
+    } while (0)
+#else
+#  define MOD(a) a %= BASE
+#  define MOD28(a) a %= BASE
+#  define MOD63(a) a %= BASE
+#endif
+
+/* ========================================================================= */
+uLong ZEXPORT adler32(adler, buf, len)
+    uLong adler;
+    const Bytef *buf;
+    uInt len;
+{
+    unsigned long sum2;
+    unsigned n;
+
+    /* split Adler-32 into component sums */
+    sum2 = (adler >> 16) & 0xffff;
+    adler &= 0xffff;
+
+    /* in case user likes doing a byte at a time, keep it fast */
+    if (len == 1) {
+        adler += buf[0];
+        if (adler >= BASE)
+            adler -= BASE;
+        sum2 += adler;
+        if (sum2 >= BASE)
+            sum2 -= BASE;
+        return adler | (sum2 << 16);
+    }
+
+    /* initial Adler-32 value (deferred check for len == 1 speed) */
+    if (buf == Z_NULL)
+        return 1L;
+
+    /* in case short lengths are provided, keep it somewhat fast */
+    if (len < 16) {
+        while (len--) {
+            adler += *buf++;
+            sum2 += adler;
+        }
+        if (adler >= BASE)
+            adler -= BASE;
+        MOD28(sum2);            /* only added so many BASE's */
+        return adler | (sum2 << 16);
+    }
+
+    /* do length NMAX blocks -- requires just one modulo operation */
+    while (len >= NMAX) {
+        len -= NMAX;
+        n = NMAX / 16;          /* NMAX is divisible by 16 */
+        do {
+            DO16(buf);          /* 16 sums unrolled */
+            buf += 16;
+        } while (--n);
+        MOD(adler);
+        MOD(sum2);
+    }
+
+    /* do remaining bytes (less than NMAX, still just one modulo) */
+    if (len) {                  /* avoid modulos if none remaining */
+        while (len >= 16) {
+            len -= 16;
+            DO16(buf);
+            buf += 16;
+        }
+        while (len--) {
+            adler += *buf++;
+            sum2 += adler;
+        }
+        MOD(adler);
+        MOD(sum2);
+    }
+
+    /* return recombined sums */
+    return adler | (sum2 << 16);
+}
+
+/* ========================================================================= */
+local uLong adler32_combine_(adler1, adler2, len2)
+    uLong adler1;
+    uLong adler2;
+    z_off64_t len2;
+{
+    unsigned long sum1;
+    unsigned long sum2;
+    unsigned rem;
+
+    /* for negative len, return invalid adler32 as a clue for debugging */
+    if (len2 < 0)
+        return 0xffffffffUL;
+
+    /* the derivation of this formula is left as an exercise for the reader */
+    MOD63(len2);                /* assumes len2 >= 0 */
+    rem = (unsigned)len2;
+    sum1 = adler1 & 0xffff;
+    sum2 = rem * sum1;
+    MOD(sum2);
+    sum1 += (adler2 & 0xffff) + BASE - 1;
+    sum2 += ((adler1 >> 16) & 0xffff) + ((adler2 >> 16) & 0xffff) + BASE - rem;
+    if (sum1 >= BASE) sum1 -= BASE;
+    if (sum1 >= BASE) sum1 -= BASE;
+    if (sum2 >= (BASE << 1)) sum2 -= (BASE << 1);
+    if (sum2 >= BASE) sum2 -= BASE;
+    return sum1 | (sum2 << 16);
+}
+
+/* ========================================================================= */
+uLong ZEXPORT adler32_combine(adler1, adler2, len2)
+    uLong adler1;
+    uLong adler2;
+    z_off_t len2;
+{
+    return adler32_combine_(adler1, adler2, len2);
+}
+
+uLong ZEXPORT adler32_combine64(adler1, adler2, len2)
+    uLong adler1;
+    uLong adler2;
+    z_off64_t len2;
+{
+    return adler32_combine_(adler1, adler2, len2);
+}
diff --git a/zlib/deflate.c b/zlib/deflate.c
new file mode 100644 (file)
index 0000000..8e9a3e6
--- /dev/null
@@ -0,0 +1,2061 @@
+/* deflate.c -- compress data using the deflation algorithm
+ * Copyright (C) 1995-2013 Jean-loup Gailly and Mark Adler
+ * For conditions of distribution and use, see copyright notice in zlib.h
+ */
+
+/*
+ *  ALGORITHM
+ *
+ *      The "deflation" process depends on being able to identify portions
+ *      of the input text which are identical to earlier input (within a
+ *      sliding window trailing behind the input currently being processed).
+ *
+ *      The most straightforward technique turns out to be the fastest for
+ *      most input files: try all possible matches and select the longest.
+ *      The key feature of this algorithm is that insertions into the string
+ *      dictionary are very simple and thus fast, and deletions are avoided
+ *      completely. Insertions are performed at each input character, whereas
+ *      string matches are performed only when the previous match ends. So it
+ *      is preferable to spend more time in matches to allow very fast string
+ *      insertions and avoid deletions. The matching algorithm for small
+ *      strings is inspired from that of Rabin & Karp. A brute force approach
+ *      is used to find longer strings when a small match has been found.
+ *      A similar algorithm is used in comic (by Jan-Mark Wams) and freeze
+ *      (by Leonid Broukhis).
+ *         A previous version of this file used a more sophisticated algorithm
+ *      (by Fiala and Greene) which is guaranteed to run in linear amortized
+ *      time, but has a larger average cost, uses more memory and is patented.
+ *      However the F&G algorithm may be faster for some highly redundant
+ *      files if the parameter max_chain_length (described below) is too large.
+ *
+ *  ACKNOWLEDGEMENTS
+ *
+ *      The idea of lazy evaluation of matches is due to Jan-Mark Wams, and
+ *      I found it in 'freeze' written by Leonid Broukhis.
+ *      Thanks to many people for bug reports and testing.
+ *
+ *  REFERENCES
+ *
+ *      Deutsch, L.P.,"DEFLATE Compressed Data Format Specification".
+ *      Available in http://tools.ietf.org/html/rfc1951
+ *
+ *      A description of the Rabin and Karp algorithm is given in the book
+ *         "Algorithms" by R. Sedgewick, Addison-Wesley, p252.
+ *
+ *      Fiala,E.R., and Greene,D.H.
+ *         Data Compression with Finite Windows, Comm.ACM, 32,4 (1989) 490-595
+ *
+ */
+
+/* @(#) $Id$ */
+
+#include "deflate.h"
+
+const char deflate_copyright[] =
+   " deflate 1.2.8.f-Proxmark3 Copyright 1995-2013 Jean-loup Gailly and Mark Adler ";
+/*
+  If you use the zlib library in a product, an acknowledgment is welcome
+  in the documentation of your product. If for some reason you cannot
+  include such an acknowledgment, I would appreciate that you keep this
+  copyright string in the executable of your product.
+ */
+
+//-----------------------------------------------------------------------------
+// This version of zlib is modified for use within the Proxmark3 project. 
+// Files from the original distribution which are not required for this
+// purpose are not included. All modifications can easily be found
+// by searching for #ifdef ZLIB_PM3_TUNED and #ifndef ZLIB_PM3_TUNED.
+//-----------------------------------------------------------------------------
+
+
+/* ===========================================================================
+ *  Function prototypes.
+ */
+typedef enum {
+    need_more,      /* block not completed, need more input or more output */
+    block_done,     /* block flush performed */
+    finish_started, /* finish started, need only more output at next deflate */
+    finish_done     /* finish done, accept no more input or output */
+} block_state;
+
+typedef block_state (*compress_func) OF((deflate_state *s, int flush));
+/* Compression function. Returns the block state after the call. */
+
+local void fill_window    OF((deflate_state *s));
+local block_state deflate_stored OF((deflate_state *s, int flush));
+local block_state deflate_fast   OF((deflate_state *s, int flush));
+#ifndef FASTEST
+local block_state deflate_slow   OF((deflate_state *s, int flush));
+#endif
+local block_state deflate_rle    OF((deflate_state *s, int flush));
+local block_state deflate_huff   OF((deflate_state *s, int flush));
+local void lm_init        OF((deflate_state *s));
+local void putShortMSB    OF((deflate_state *s, uInt b));
+local void flush_pending  OF((z_streamp strm));
+local int read_buf        OF((z_streamp strm, Bytef *buf, unsigned size));
+#ifdef ASMV
+      void match_init OF((void)); /* asm code initialization */
+      uInt longest_match  OF((deflate_state *s, IPos cur_match));
+#else
+local uInt longest_match  OF((deflate_state *s, IPos cur_match));
+#endif
+
+#ifdef DEBUG
+local  void check_match OF((deflate_state *s, IPos start, IPos match,
+                            int length));
+#endif
+
+/* ===========================================================================
+ * Local data
+ */
+
+#define NIL 0
+/* Tail of hash chains */
+
+#ifndef TOO_FAR
+#  define TOO_FAR 4096
+#endif
+/* Matches of length 3 are discarded if their distance exceeds TOO_FAR */
+
+/* Values for max_lazy_match, good_match and max_chain_length, depending on
+ * the desired pack level (0..9). The values given below have been tuned to
+ * exclude worst case performance for pathological files. Better values may be
+ * found for specific files.
+ */
+typedef struct config_s {
+   ush good_length; /* reduce lazy search above this match length */
+   ush max_lazy;    /* do not perform lazy search above this match length */
+   ush nice_length; /* quit search above this match length */
+   ush max_chain;
+   compress_func func;
+} config;
+
+#ifdef FASTEST
+local const config configuration_table[2] = {
+/*      good lazy nice chain */
+/* 0 */ {0,    0,  0,    0, deflate_stored},  /* store only */
+/* 1 */ {4,    4,  8,    4, deflate_fast}}; /* max speed, no lazy matches */
+#else
+local const config configuration_table[10] = {
+/*      good lazy nice chain */
+/* 0 */ {0,    0,  0,    0, deflate_stored},  /* store only */
+/* 1 */ {4,    4,  8,    4, deflate_fast}, /* max speed, no lazy matches */
+/* 2 */ {4,    5, 16,    8, deflate_fast},
+/* 3 */ {4,    6, 32,   32, deflate_fast},
+
+/* 4 */ {4,    4, 16,   16, deflate_slow},  /* lazy matches */
+/* 5 */ {8,   16, 32,   32, deflate_slow},
+/* 6 */ {8,   16, 128, 128, deflate_slow},
+/* 7 */ {8,   32, 128, 256, deflate_slow},
+/* 8 */ {32, 128, 258, 1024, deflate_slow},
+/* 9 */ {32, 258, 258, 4096, deflate_slow}}; /* max compression */
+#endif
+
+/* Note: the deflate() code requires max_lazy >= MIN_MATCH and max_chain >= 4
+ * For deflate_fast() (levels <= 3) good is ignored and lazy has a different
+ * meaning.
+ */
+
+#define EQUAL 0
+/* result of memcmp for equal strings */
+
+#ifndef NO_DUMMY_DECL
+struct static_tree_desc_s {int dummy;}; /* for buggy compilers */
+#endif
+
+/* rank Z_BLOCK between Z_NO_FLUSH and Z_PARTIAL_FLUSH */
+#define RANK(f) (((f) << 1) - ((f) > 4 ? 9 : 0))
+
+/* ===========================================================================
+ * Update a hash value with the given input byte
+ * IN  assertion: all calls to to UPDATE_HASH are made with consecutive
+ *    input characters, so that a running hash key can be computed from the
+ *    previous key instead of complete recalculation each time.
+ */
+#define UPDATE_HASH(s,h,c) (h = (((h)<<s->hash_shift) ^ (c)) & s->hash_mask)
+
+
+/* ===========================================================================
+ * Insert string str in the dictionary and set match_head to the previous head
+ * of the hash chain (the most recent string with same hash key). Return
+ * the previous length of the hash chain.
+ * If this file is compiled with -DFASTEST, the compression level is forced
+ * to 1, and no hash chains are maintained.
+ * IN  assertion: all calls to to INSERT_STRING are made with consecutive
+ *    input characters and the first MIN_MATCH bytes of str are valid
+ *    (except for the last MIN_MATCH-1 bytes of the input file).
+ */
+#ifdef FASTEST
+#define INSERT_STRING(s, str, match_head) \
+   (UPDATE_HASH(s, s->ins_h, s->window[(str) + (MIN_MATCH-1)]), \
+    match_head = s->head[s->ins_h], \
+    s->head[s->ins_h] = (Pos)(str))
+#else
+#define INSERT_STRING(s, str, match_head) \
+   (UPDATE_HASH(s, s->ins_h, s->window[(str) + (MIN_MATCH-1)]), \
+    match_head = s->prev[(str) & s->w_mask] = s->head[s->ins_h], \
+    s->head[s->ins_h] = (Pos)(str))
+#endif
+
+/* ===========================================================================
+ * Initialize the hash table (avoiding 64K overflow for 16 bit systems).
+ * prev[] will be initialized on the fly.
+ */
+#define CLEAR_HASH(s) \
+    s->head[s->hash_size-1] = NIL; \
+    zmemzero((Bytef *)s->head, (unsigned)(s->hash_size-1)*sizeof(*s->head));
+
+/* ========================================================================= */
+int ZEXPORT deflateInit_(strm, level, version, stream_size)
+    z_streamp strm;
+    int level;
+    const char *version;
+    int stream_size;
+{
+    return deflateInit2_(strm, level, Z_DEFLATED, MAX_WBITS, DEF_MEM_LEVEL,
+                         Z_DEFAULT_STRATEGY, version, stream_size);
+    /* To do: ignore strm->next_in if we use it as window */
+}
+
+/* ========================================================================= */
+int ZEXPORT deflateInit2_(strm, level, method, windowBits, memLevel, strategy,
+                  version, stream_size)
+    z_streamp strm;
+    int  level;
+    int  method;
+    int  windowBits;
+    int  memLevel;
+    int  strategy;
+    const char *version;
+    int stream_size;
+{
+    deflate_state *s;
+    int wrap = 1;
+    static const char my_version[] = ZLIB_VERSION;
+
+    ushf *overlay;
+    /* We overlay pending_buf and d_buf+l_buf. This works since the average
+     * output size for (length,distance) codes is <= 24 bits.
+     */
+
+    if (version == Z_NULL || version[0] != my_version[0] ||
+        stream_size != sizeof(z_stream)) {
+        return Z_VERSION_ERROR;
+    }
+    if (strm == Z_NULL) return Z_STREAM_ERROR;
+
+    strm->msg = Z_NULL;
+    if (strm->zalloc == (alloc_func)0) {
+#ifdef Z_SOLO
+        return Z_STREAM_ERROR;
+#else
+        strm->zalloc = zcalloc;
+        strm->opaque = (voidpf)0;
+#endif
+    }
+    if (strm->zfree == (free_func)0)
+#ifdef Z_SOLO
+        return Z_STREAM_ERROR;
+#else
+        strm->zfree = zcfree;
+#endif
+
+#ifdef FASTEST
+    if (level != 0) level = 1;
+#else
+    if (level == Z_DEFAULT_COMPRESSION) level = 6;
+#endif
+
+    if (windowBits < 0) { /* suppress zlib wrapper */
+        wrap = 0;
+        windowBits = -windowBits;
+    }
+#ifdef GZIP
+    else if (windowBits > 15) {
+        wrap = 2;       /* write gzip wrapper instead */
+        windowBits -= 16;
+    }
+#endif
+    if (memLevel < 1 || memLevel > MAX_MEM_LEVEL || method != Z_DEFLATED ||
+        windowBits < 8 || windowBits > 15 || level < 0 || level > 9 ||
+        strategy < 0 || strategy > Z_FIXED) {
+        return Z_STREAM_ERROR;
+    }
+    if (windowBits == 8) windowBits = 9;  /* until 256-byte window bug fixed */
+    s = (deflate_state *) ZALLOC(strm, 1, sizeof(deflate_state));
+    if (s == Z_NULL) return Z_MEM_ERROR;
+    strm->state = (struct internal_state FAR *)s;
+    s->strm = strm;
+
+    s->wrap = wrap;
+    s->gzhead = Z_NULL;
+    s->w_bits = windowBits;
+    s->w_size = 1 << s->w_bits;
+    s->w_mask = s->w_size - 1;
+
+    s->hash_bits = memLevel + 7;
+    s->hash_size = 1 << s->hash_bits;
+    s->hash_mask = s->hash_size - 1;
+    s->hash_shift =  ((s->hash_bits+MIN_MATCH-1)/MIN_MATCH);
+
+    s->window = (Bytef *) ZALLOC(strm, s->w_size, 2*sizeof(Byte));
+    s->prev   = (Posf *)  ZALLOC(strm, s->w_size, sizeof(Pos));
+    s->head   = (Posf *)  ZALLOC(strm, s->hash_size, sizeof(Pos));
+
+    s->high_water = 0;      /* nothing written to s->window yet */
+
+    s->lit_bufsize = 1 << (memLevel + 6); /* 16K elements by default */
+
+    overlay = (ushf *) ZALLOC(strm, s->lit_bufsize, sizeof(ush)+2);
+    s->pending_buf = (uchf *) overlay;
+    s->pending_buf_size = (ulg)s->lit_bufsize * (sizeof(ush)+2L);
+
+    if (s->window == Z_NULL || s->prev == Z_NULL || s->head == Z_NULL ||
+        s->pending_buf == Z_NULL) {
+        s->status = FINISH_STATE;
+        strm->msg = ERR_MSG(Z_MEM_ERROR);
+        deflateEnd (strm);
+        return Z_MEM_ERROR;
+    }
+    s->d_buf = overlay + s->lit_bufsize/sizeof(ush);
+    s->l_buf = s->pending_buf + (1+sizeof(ush))*s->lit_bufsize;
+
+    s->level = level;
+    s->strategy = strategy;
+    s->method = (Byte)method;
+
+    return deflateReset(strm);
+}
+
+/* ========================================================================= */
+int ZEXPORT deflateSetDictionary (strm, dictionary, dictLength)
+    z_streamp strm;
+    const Bytef *dictionary;
+    uInt  dictLength;
+{
+    deflate_state *s;
+    uInt str, n;
+    int wrap;
+    unsigned avail;
+    z_const unsigned char *next;
+
+    if (strm == Z_NULL || strm->state == Z_NULL || dictionary == Z_NULL)
+        return Z_STREAM_ERROR;
+    s = strm->state;
+    wrap = s->wrap;
+    if (wrap == 2 || (wrap == 1 && s->status != INIT_STATE) || s->lookahead)
+        return Z_STREAM_ERROR;
+
+    /* when using zlib wrappers, compute Adler-32 for provided dictionary */
+    if (wrap == 1)
+        strm->adler = adler32(strm->adler, dictionary, dictLength);
+    s->wrap = 0;                    /* avoid computing Adler-32 in read_buf */
+
+    /* if dictionary would fill window, just replace the history */
+    if (dictLength >= s->w_size) {
+        if (wrap == 0) {            /* already empty otherwise */
+            CLEAR_HASH(s);
+            s->strstart = 0;
+            s->block_start = 0L;
+            s->insert = 0;
+        }
+        dictionary += dictLength - s->w_size;  /* use the tail */
+        dictLength = s->w_size;
+    }
+
+    /* insert dictionary into window and hash */
+    avail = strm->avail_in;
+    next = strm->next_in;
+    strm->avail_in = dictLength;
+    strm->next_in = (z_const Bytef *)dictionary;
+    fill_window(s);
+    while (s->lookahead >= MIN_MATCH) {
+        str = s->strstart;
+        n = s->lookahead - (MIN_MATCH-1);
+        do {
+            UPDATE_HASH(s, s->ins_h, s->window[str + MIN_MATCH-1]);
+#ifndef FASTEST
+            s->prev[str & s->w_mask] = s->head[s->ins_h];
+#endif
+            s->head[s->ins_h] = (Pos)str;
+            str++;
+        } while (--n);
+        s->strstart = str;
+        s->lookahead = MIN_MATCH-1;
+        fill_window(s);
+    }
+    s->strstart += s->lookahead;
+    s->block_start = (long)s->strstart;
+    s->insert = s->lookahead;
+    s->lookahead = 0;
+    s->match_length = s->prev_length = MIN_MATCH-1;
+    s->match_available = 0;
+    strm->next_in = next;
+    strm->avail_in = avail;
+    s->wrap = wrap;
+    return Z_OK;
+}
+
+/* ========================================================================= */
+int ZEXPORT deflateResetKeep (strm)
+    z_streamp strm;
+{
+    deflate_state *s;
+
+    if (strm == Z_NULL || strm->state == Z_NULL ||
+        strm->zalloc == (alloc_func)0 || strm->zfree == (free_func)0) {
+        return Z_STREAM_ERROR;
+    }
+
+    strm->total_in = strm->total_out = 0;
+    strm->msg = Z_NULL; /* use zfree if we ever allocate msg dynamically */
+    strm->data_type = Z_UNKNOWN;
+
+    s = (deflate_state *)strm->state;
+    s->pending = 0;
+    s->pending_out = s->pending_buf;
+
+    if (s->wrap < 0) {
+        s->wrap = -s->wrap; /* was made negative by deflate(..., Z_FINISH); */
+    }
+    s->status = s->wrap ? INIT_STATE : BUSY_STATE;
+    strm->adler =
+#ifdef GZIP
+        s->wrap == 2 ? crc32(0L, Z_NULL, 0) :
+#endif
+        adler32(0L, Z_NULL, 0);
+    s->last_flush = Z_NO_FLUSH;
+
+    _tr_init(s);
+
+    return Z_OK;
+}
+
+/* ========================================================================= */
+int ZEXPORT deflateReset (strm)
+    z_streamp strm;
+{
+    int ret;
+
+    ret = deflateResetKeep(strm);
+    if (ret == Z_OK)
+        lm_init(strm->state);
+    return ret;
+}
+
+/* ========================================================================= */
+int ZEXPORT deflateSetHeader (strm, head)
+    z_streamp strm;
+    gz_headerp head;
+{
+    if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
+    if (strm->state->wrap != 2) return Z_STREAM_ERROR;
+    strm->state->gzhead = head;
+    return Z_OK;
+}
+
+/* ========================================================================= */
+int ZEXPORT deflatePending (strm, pending, bits)
+    unsigned *pending;
+    int *bits;
+    z_streamp strm;
+{
+    if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
+    if (pending != Z_NULL)
+        *pending = strm->state->pending;
+    if (bits != Z_NULL)
+        *bits = strm->state->bi_valid;
+    return Z_OK;
+}
+
+/* ========================================================================= */
+int ZEXPORT deflatePrime (strm, bits, value)
+    z_streamp strm;
+    int bits;
+    int value;
+{
+    deflate_state *s;
+    int put;
+
+    if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
+    s = strm->state;
+    if ((Bytef *)(s->d_buf) < s->pending_out + ((Buf_size + 7) >> 3))
+        return Z_BUF_ERROR;
+    do {
+        put = Buf_size - s->bi_valid;
+        if (put > bits)
+            put = bits;
+        s->bi_buf |= (ush)((value & ((1 << put) - 1)) << s->bi_valid);
+        s->bi_valid += put;
+        _tr_flush_bits(s);
+        value >>= put;
+        bits -= put;
+    } while (bits);
+    return Z_OK;
+}
+
+/* ========================================================================= */
+int ZEXPORT deflateParams(strm, level, strategy)
+    z_streamp strm;
+    int level;
+    int strategy;
+{
+    deflate_state *s;
+    compress_func func;
+    int err = Z_OK;
+
+    if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
+    s = strm->state;
+
+#ifdef FASTEST
+    if (level != 0) level = 1;
+#else
+    if (level == Z_DEFAULT_COMPRESSION) level = 6;
+#endif
+    if (level < 0 || level > 9 || strategy < 0 || strategy > Z_FIXED) {
+        return Z_STREAM_ERROR;
+    }
+    func = configuration_table[s->level].func;
+
+    if ((strategy != s->strategy || func != configuration_table[level].func) &&
+        strm->total_in != 0) {
+        /* Flush the last buffer: */
+        err = deflate(strm, Z_BLOCK);
+        if (err == Z_BUF_ERROR && s->pending == 0)
+            err = Z_OK;
+    }
+    if (s->level != level) {
+        s->level = level;
+        s->max_lazy_match   = configuration_table[level].max_lazy;
+        s->good_match       = configuration_table[level].good_length;
+        s->nice_match       = configuration_table[level].nice_length;
+        s->max_chain_length = configuration_table[level].max_chain;
+    }
+    s->strategy = strategy;
+    return err;
+}
+
+/* ========================================================================= */
+int ZEXPORT deflateTune(strm, good_length, max_lazy, nice_length, max_chain)
+    z_streamp strm;
+    int good_length;
+    int max_lazy;
+    int nice_length;
+    int max_chain;
+{
+    deflate_state *s;
+
+    if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
+    s = strm->state;
+    s->good_match = good_length;
+    s->max_lazy_match = max_lazy;
+    s->nice_match = nice_length;
+    s->max_chain_length = max_chain;
+    return Z_OK;
+}
+
+/* =========================================================================
+ * For the default windowBits of 15 and memLevel of 8, this function returns
+ * a close to exact, as well as small, upper bound on the compressed size.
+ * They are coded as constants here for a reason--if the #define's are
+ * changed, then this function needs to be changed as well.  The return
+ * value for 15 and 8 only works for those exact settings.
+ *
+ * For any setting other than those defaults for windowBits and memLevel,
+ * the value returned is a conservative worst case for the maximum expansion
+ * resulting from using fixed blocks instead of stored blocks, which deflate
+ * can emit on compressed data for some combinations of the parameters.
+ *
+ * This function could be more sophisticated to provide closer upper bounds for
+ * every combination of windowBits and memLevel.  But even the conservative
+ * upper bound of about 14% expansion does not seem onerous for output buffer
+ * allocation.
+ */
+uLong ZEXPORT deflateBound(strm, sourceLen)
+    z_streamp strm;
+    uLong sourceLen;
+{
+    deflate_state *s;
+    uLong complen, wraplen;
+    Bytef *str;
+
+    /* conservative upper bound for compressed data */
+    complen = sourceLen +
+              ((sourceLen + 7) >> 3) + ((sourceLen + 63) >> 6) + 5;
+
+    /* if can't get parameters, return conservative bound plus zlib wrapper */
+    if (strm == Z_NULL || strm->state == Z_NULL)
+        return complen + 6;
+
+    /* compute wrapper length */
+    s = strm->state;
+    switch (s->wrap) {
+    case 0:                                 /* raw deflate */
+        wraplen = 0;
+        break;
+    case 1:                                 /* zlib wrapper */
+        wraplen = 6 + (s->strstart ? 4 : 0);
+        break;
+    case 2:                                 /* gzip wrapper */
+        wraplen = 18;
+        if (s->gzhead != Z_NULL) {          /* user-supplied gzip header */
+            if (s->gzhead->extra != Z_NULL)
+                wraplen += 2 + s->gzhead->extra_len;
+            str = s->gzhead->name;
+            if (str != Z_NULL)
+                do {
+                    wraplen++;
+                } while (*str++);
+            str = s->gzhead->comment;
+            if (str != Z_NULL)
+                do {
+                    wraplen++;
+                } while (*str++);
+            if (s->gzhead->hcrc)
+                wraplen += 2;
+        }
+        break;
+    default:                                /* for compiler happiness */
+        wraplen = 6;
+    }
+
+    /* if not default parameters, return conservative bound */
+    if (s->w_bits != 15 || s->hash_bits != 8 + 7)
+        return complen + wraplen;
+
+    /* default settings: return tight bound for that case */
+    return sourceLen + (sourceLen >> 12) + (sourceLen >> 14) +
+           (sourceLen >> 25) + 13 - 6 + wraplen;
+}
+
+/* =========================================================================
+ * Put a short in the pending buffer. The 16-bit value is put in MSB order.
+ * IN assertion: the stream state is correct and there is enough room in
+ * pending_buf.
+ */
+local void putShortMSB (s, b)
+    deflate_state *s;
+    uInt b;
+{
+    put_byte(s, (Byte)(b >> 8));
+    put_byte(s, (Byte)(b & 0xff));
+}
+
+/* =========================================================================
+ * Flush as much pending output as possible. All deflate() output goes
+ * through this function so some applications may wish to modify it
+ * to avoid allocating a large strm->next_out buffer and copying into it.
+ * (See also read_buf()).
+ */
+local void flush_pending(strm)
+    z_streamp strm;
+{
+    unsigned len;
+    deflate_state *s = strm->state;
+
+    _tr_flush_bits(s);
+    len = s->pending;
+    if (len > strm->avail_out) len = strm->avail_out;
+    if (len == 0) return;
+
+    zmemcpy(strm->next_out, s->pending_out, len);
+    strm->next_out  += len;
+    s->pending_out  += len;
+    strm->total_out += len;
+    strm->avail_out  -= len;
+    s->pending -= len;
+    if (s->pending == 0) {
+        s->pending_out = s->pending_buf;
+    }
+}
+
+/* ========================================================================= */
+int ZEXPORT deflate (strm, flush)
+    z_streamp strm;
+    int flush;
+{
+    int old_flush; /* value of flush param for previous deflate call */
+    deflate_state *s;
+
+    if (strm == Z_NULL || strm->state == Z_NULL ||
+        flush > Z_BLOCK || flush < 0) {
+        return Z_STREAM_ERROR;
+    }
+    s = strm->state;
+
+    if (strm->next_out == Z_NULL ||
+        (strm->next_in == Z_NULL && strm->avail_in != 0) ||
+        (s->status == FINISH_STATE && flush != Z_FINISH)) {
+        ERR_RETURN(strm, Z_STREAM_ERROR);
+    }
+    if (strm->avail_out == 0) ERR_RETURN(strm, Z_BUF_ERROR);
+
+    s->strm = strm; /* just in case */
+    old_flush = s->last_flush;
+    s->last_flush = flush;
+
+    /* Write the header */
+    if (s->status == INIT_STATE) {
+#ifdef GZIP
+        if (s->wrap == 2) {
+            strm->adler = crc32(0L, Z_NULL, 0);
+            put_byte(s, 31);
+            put_byte(s, 139);
+            put_byte(s, 8);
+            if (s->gzhead == Z_NULL) {
+                put_byte(s, 0);
+                put_byte(s, 0);
+                put_byte(s, 0);
+                put_byte(s, 0);
+                put_byte(s, 0);
+                put_byte(s, s->level == 9 ? 2 :
+                            (s->strategy >= Z_HUFFMAN_ONLY || s->level < 2 ?
+                             4 : 0));
+                put_byte(s, OS_CODE);
+                s->status = BUSY_STATE;
+            }
+            else {
+                put_byte(s, (s->gzhead->text ? 1 : 0) +
+                            (s->gzhead->hcrc ? 2 : 0) +
+                            (s->gzhead->extra == Z_NULL ? 0 : 4) +
+                            (s->gzhead->name == Z_NULL ? 0 : 8) +
+                            (s->gzhead->comment == Z_NULL ? 0 : 16)
+                        );
+                put_byte(s, (Byte)(s->gzhead->time & 0xff));
+                put_byte(s, (Byte)((s->gzhead->time >> 8) & 0xff));
+                put_byte(s, (Byte)((s->gzhead->time >> 16) & 0xff));
+                put_byte(s, (Byte)((s->gzhead->time >> 24) & 0xff));
+                put_byte(s, s->level == 9 ? 2 :
+                            (s->strategy >= Z_HUFFMAN_ONLY || s->level < 2 ?
+                             4 : 0));
+                put_byte(s, s->gzhead->os & 0xff);
+                if (s->gzhead->extra != Z_NULL) {
+                    put_byte(s, s->gzhead->extra_len & 0xff);
+                    put_byte(s, (s->gzhead->extra_len >> 8) & 0xff);
+                }
+                if (s->gzhead->hcrc)
+                    strm->adler = crc32(strm->adler, s->pending_buf,
+                                        s->pending);
+                s->gzindex = 0;
+                s->status = EXTRA_STATE;
+            }
+        }
+        else
+#endif
+        {
+            uInt header = (Z_DEFLATED + ((s->w_bits-8)<<4)) << 8;
+            uInt level_flags;
+
+            if (s->strategy >= Z_HUFFMAN_ONLY || s->level < 2)
+                level_flags = 0;
+            else if (s->level < 6)
+                level_flags = 1;
+            else if (s->level == 6)
+                level_flags = 2;
+            else
+                level_flags = 3;
+            header |= (level_flags << 6);
+            if (s->strstart != 0) header |= PRESET_DICT;
+            header += 31 - (header % 31);
+
+            s->status = BUSY_STATE;
+            putShortMSB(s, header);
+
+            /* Save the adler32 of the preset dictionary: */
+            if (s->strstart != 0) {
+                putShortMSB(s, (uInt)(strm->adler >> 16));
+                putShortMSB(s, (uInt)(strm->adler & 0xffff));
+            }
+            strm->adler = adler32(0L, Z_NULL, 0);
+        }
+    }
+#ifdef GZIP
+    if (s->status == EXTRA_STATE) {
+        if (s->gzhead->extra != Z_NULL) {
+            uInt beg = s->pending;  /* start of bytes to update crc */
+
+            while (s->gzindex < (s->gzhead->extra_len & 0xffff)) {
+                if (s->pending == s->pending_buf_size) {
+                    if (s->gzhead->hcrc && s->pending > beg)
+                        strm->adler = crc32(strm->adler, s->pending_buf + beg,
+                                            s->pending - beg);
+                    flush_pending(strm);
+                    beg = s->pending;
+                    if (s->pending == s->pending_buf_size)
+                        break;
+                }
+                put_byte(s, s->gzhead->extra[s->gzindex]);
+                s->gzindex++;
+            }
+            if (s->gzhead->hcrc && s->pending > beg)
+                strm->adler = crc32(strm->adler, s->pending_buf + beg,
+                                    s->pending - beg);
+            if (s->gzindex == s->gzhead->extra_len) {
+                s->gzindex = 0;
+                s->status = NAME_STATE;
+            }
+        }
+        else
+            s->status = NAME_STATE;
+    }
+    if (s->status == NAME_STATE) {
+        if (s->gzhead->name != Z_NULL) {
+            uInt beg = s->pending;  /* start of bytes to update crc */
+            int val;
+
+            do {
+                if (s->pending == s->pending_buf_size) {
+                    if (s->gzhead->hcrc && s->pending > beg)
+                        strm->adler = crc32(strm->adler, s->pending_buf + beg,
+                                            s->pending - beg);
+                    flush_pending(strm);
+                    beg = s->pending;
+                    if (s->pending == s->pending_buf_size) {
+                        val = 1;
+                        break;
+                    }
+                }
+                val = s->gzhead->name[s->gzindex++];
+                put_byte(s, val);
+            } while (val != 0);
+            if (s->gzhead->hcrc && s->pending > beg)
+                strm->adler = crc32(strm->adler, s->pending_buf + beg,
+                                    s->pending - beg);
+            if (val == 0) {
+                s->gzindex = 0;
+                s->status = COMMENT_STATE;
+            }
+        }
+        else
+            s->status = COMMENT_STATE;
+    }
+    if (s->status == COMMENT_STATE) {
+        if (s->gzhead->comment != Z_NULL) {
+            uInt beg = s->pending;  /* start of bytes to update crc */
+            int val;
+
+            do {
+                if (s->pending == s->pending_buf_size) {
+                    if (s->gzhead->hcrc && s->pending > beg)
+                        strm->adler = crc32(strm->adler, s->pending_buf + beg,
+                                            s->pending - beg);
+                    flush_pending(strm);
+                    beg = s->pending;
+                    if (s->pending == s->pending_buf_size) {
+                        val = 1;
+                        break;
+                    }
+                }
+                val = s->gzhead->comment[s->gzindex++];
+                put_byte(s, val);
+            } while (val != 0);
+            if (s->gzhead->hcrc && s->pending > beg)
+                strm->adler = crc32(strm->adler, s->pending_buf + beg,
+                                    s->pending - beg);
+            if (val == 0)
+                s->status = HCRC_STATE;
+        }
+        else
+            s->status = HCRC_STATE;
+    }
+    if (s->status == HCRC_STATE) {
+        if (s->gzhead->hcrc) {
+            if (s->pending + 2 > s->pending_buf_size)
+                flush_pending(strm);
+            if (s->pending + 2 <= s->pending_buf_size) {
+                put_byte(s, (Byte)(strm->adler & 0xff));
+                put_byte(s, (Byte)((strm->adler >> 8) & 0xff));
+                strm->adler = crc32(0L, Z_NULL, 0);
+                s->status = BUSY_STATE;
+            }
+        }
+        else
+            s->status = BUSY_STATE;
+    }
+#endif
+
+    /* Flush as much pending output as possible */
+    if (s->pending != 0) {
+        flush_pending(strm);
+        if (strm->avail_out == 0) {
+            /* Since avail_out is 0, deflate will be called again with
+             * more output space, but possibly with both pending and
+             * avail_in equal to zero. There won't be anything to do,
+             * but this is not an error situation so make sure we
+             * return OK instead of BUF_ERROR at next call of deflate:
+             */
+            s->last_flush = -1;
+            return Z_OK;
+        }
+
+    /* Make sure there is something to do and avoid duplicate consecutive
+     * flushes. For repeated and useless calls with Z_FINISH, we keep
+     * returning Z_STREAM_END instead of Z_BUF_ERROR.
+     */
+    } else if (strm->avail_in == 0 && RANK(flush) <= RANK(old_flush) &&
+               flush != Z_FINISH) {
+        ERR_RETURN(strm, Z_BUF_ERROR);
+    }
+
+    /* User must not provide more input after the first FINISH: */
+    if (s->status == FINISH_STATE && strm->avail_in != 0) {
+        ERR_RETURN(strm, Z_BUF_ERROR);
+    }
+
+    /* Start a new block or continue the current one.
+     */
+    if (strm->avail_in != 0 || s->lookahead != 0 ||
+        (flush != Z_NO_FLUSH && s->status != FINISH_STATE)) {
+        block_state bstate;
+
+        bstate = s->strategy == Z_HUFFMAN_ONLY ? deflate_huff(s, flush) :
+                    (s->strategy == Z_RLE ? deflate_rle(s, flush) :
+                        (*(configuration_table[s->level].func))(s, flush));
+
+        if (bstate == finish_started || bstate == finish_done) {
+            s->status = FINISH_STATE;
+        }
+        if (bstate == need_more || bstate == finish_started) {
+            if (strm->avail_out == 0) {
+                s->last_flush = -1; /* avoid BUF_ERROR next call, see above */
+            }
+            return Z_OK;
+            /* If flush != Z_NO_FLUSH && avail_out == 0, the next call
+             * of deflate should use the same flush parameter to make sure
+             * that the flush is complete. So we don't have to output an
+             * empty block here, this will be done at next call. This also
+             * ensures that for a very small output buffer, we emit at most
+             * one empty block.
+             */
+        }
+        if (bstate == block_done) {
+            if (flush == Z_PARTIAL_FLUSH) {
+                _tr_align(s);
+            } else if (flush != Z_BLOCK) { /* FULL_FLUSH or SYNC_FLUSH */
+                _tr_stored_block(s, (char*)0, 0L, 0);
+                /* For a full flush, this empty block will be recognized
+                 * as a special marker by inflate_sync().
+                 */
+                if (flush == Z_FULL_FLUSH) {
+                    CLEAR_HASH(s);             /* forget history */
+                    if (s->lookahead == 0) {
+                        s->strstart = 0;
+                        s->block_start = 0L;
+                        s->insert = 0;
+                    }
+                }
+            }
+            flush_pending(strm);
+            if (strm->avail_out == 0) {
+              s->last_flush = -1; /* avoid BUF_ERROR at next call, see above */
+              return Z_OK;
+            }
+        }
+    }
+    Assert(strm->avail_out > 0, "bug2");
+
+    if (flush != Z_FINISH) return Z_OK;
+    if (s->wrap <= 0) return Z_STREAM_END;
+
+    /* Write the trailer */
+#ifdef GZIP
+    if (s->wrap == 2) {
+        put_byte(s, (Byte)(strm->adler & 0xff));
+        put_byte(s, (Byte)((strm->adler >> 8) & 0xff));
+        put_byte(s, (Byte)((strm->adler >> 16) & 0xff));
+        put_byte(s, (Byte)((strm->adler >> 24) & 0xff));
+        put_byte(s, (Byte)(strm->total_in & 0xff));
+        put_byte(s, (Byte)((strm->total_in >> 8) & 0xff));
+        put_byte(s, (Byte)((strm->total_in >> 16) & 0xff));
+        put_byte(s, (Byte)((strm->total_in >> 24) & 0xff));
+    }
+    else
+#endif
+    {
+        putShortMSB(s, (uInt)(strm->adler >> 16));
+        putShortMSB(s, (uInt)(strm->adler & 0xffff));
+    }
+    flush_pending(strm);
+    /* If avail_out is zero, the application will call deflate again
+     * to flush the rest.
+     */
+    if (s->wrap > 0) s->wrap = -s->wrap; /* write the trailer only once! */
+    return s->pending != 0 ? Z_OK : Z_STREAM_END;
+}
+
+/* ========================================================================= */
+int ZEXPORT deflateEnd (strm)
+    z_streamp strm;
+{
+    int status;
+
+    if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
+
+    status = strm->state->status;
+    if (status != INIT_STATE &&
+        status != EXTRA_STATE &&
+        status != NAME_STATE &&
+        status != COMMENT_STATE &&
+        status != HCRC_STATE &&
+        status != BUSY_STATE &&
+        status != FINISH_STATE) {
+      return Z_STREAM_ERROR;
+    }
+
+    /* Deallocate in reverse order of allocations: */
+    TRY_FREE(strm, strm->state->pending_buf);
+    TRY_FREE(strm, strm->state->head);
+    TRY_FREE(strm, strm->state->prev);
+    TRY_FREE(strm, strm->state->window);
+
+    ZFREE(strm, strm->state);
+    strm->state = Z_NULL;
+
+    return status == BUSY_STATE ? Z_DATA_ERROR : Z_OK;
+}
+
+/* =========================================================================
+ * Copy the source state to the destination state.
+ * To simplify the source, this is not supported for 16-bit MSDOS (which
+ * doesn't have enough memory anyway to duplicate compression states).
+ */
+int ZEXPORT deflateCopy (dest, source)
+    z_streamp dest;
+    z_streamp source;
+{
+#ifdef MAXSEG_64K
+    return Z_STREAM_ERROR;
+#else
+    deflate_state *ds;
+    deflate_state *ss;
+    ushf *overlay;
+
+
+    if (source == Z_NULL || dest == Z_NULL || source->state == Z_NULL) {
+        return Z_STREAM_ERROR;
+    }
+
+    ss = source->state;
+
+    zmemcpy((voidpf)dest, (voidpf)source, sizeof(z_stream));
+
+    ds = (deflate_state *) ZALLOC(dest, 1, sizeof(deflate_state));
+    if (ds == Z_NULL) return Z_MEM_ERROR;
+    dest->state = (struct internal_state FAR *) ds;
+    zmemcpy((voidpf)ds, (voidpf)ss, sizeof(deflate_state));
+    ds->strm = dest;
+
+    ds->window = (Bytef *) ZALLOC(dest, ds->w_size, 2*sizeof(Byte));
+    ds->prev   = (Posf *)  ZALLOC(dest, ds->w_size, sizeof(Pos));
+    ds->head   = (Posf *)  ZALLOC(dest, ds->hash_size, sizeof(Pos));
+    overlay = (ushf *) ZALLOC(dest, ds->lit_bufsize, sizeof(ush)+2);
+    ds->pending_buf = (uchf *) overlay;
+
+    if (ds->window == Z_NULL || ds->prev == Z_NULL || ds->head == Z_NULL ||
+        ds->pending_buf == Z_NULL) {
+        deflateEnd (dest);
+        return Z_MEM_ERROR;
+    }
+    /* following zmemcpy do not work for 16-bit MSDOS */
+    zmemcpy(ds->window, ss->window, ds->w_size * 2 * sizeof(Byte));
+    zmemcpy((voidpf)ds->prev, (voidpf)ss->prev, ds->w_size * sizeof(Pos));
+    zmemcpy((voidpf)ds->head, (voidpf)ss->head, ds->hash_size * sizeof(Pos));
+    zmemcpy(ds->pending_buf, ss->pending_buf, (uInt)ds->pending_buf_size);
+
+    ds->pending_out = ds->pending_buf + (ss->pending_out - ss->pending_buf);
+    ds->d_buf = overlay + ds->lit_bufsize/sizeof(ush);
+    ds->l_buf = ds->pending_buf + (1+sizeof(ush))*ds->lit_bufsize;
+
+    ds->l_desc.dyn_tree = ds->dyn_ltree;
+    ds->d_desc.dyn_tree = ds->dyn_dtree;
+    ds->bl_desc.dyn_tree = ds->bl_tree;
+
+    return Z_OK;
+#endif /* MAXSEG_64K */
+}
+
+/* ===========================================================================
+ * Read a new buffer from the current input stream, update the adler32
+ * and total number of bytes read.  All deflate() input goes through
+ * this function so some applications may wish to modify it to avoid
+ * allocating a large strm->next_in buffer and copying from it.
+ * (See also flush_pending()).
+ */
+local int read_buf(strm, buf, size)
+    z_streamp strm;
+    Bytef *buf;
+    unsigned size;
+{
+    unsigned len = strm->avail_in;
+
+    if (len > size) len = size;
+    if (len == 0) return 0;
+
+    strm->avail_in  -= len;
+
+    zmemcpy(buf, strm->next_in, len);
+    if (strm->state->wrap == 1) {
+        strm->adler = adler32(strm->adler, buf, len);
+    }
+#ifdef GZIP
+    else if (strm->state->wrap == 2) {
+        strm->adler = crc32(strm->adler, buf, len);
+    }
+#endif
+    strm->next_in  += len;
+    strm->total_in += len;
+
+    return (int)len;
+}
+
+/* ===========================================================================
+ * Initialize the "longest match" routines for a new zlib stream
+ */
+local void lm_init (s)
+    deflate_state *s;
+{
+    s->window_size = (ulg)2L*s->w_size;
+
+    CLEAR_HASH(s);
+
+    /* Set the default configuration parameters:
+     */
+    s->max_lazy_match   = configuration_table[s->level].max_lazy;
+    s->good_match       = configuration_table[s->level].good_length;
+    s->nice_match       = configuration_table[s->level].nice_length;
+    s->max_chain_length = configuration_table[s->level].max_chain;
+
+    s->strstart = 0;
+    s->block_start = 0L;
+    s->lookahead = 0;
+    s->insert = 0;
+    s->match_length = s->prev_length = MIN_MATCH-1;
+    s->match_available = 0;
+    s->ins_h = 0;
+#ifndef FASTEST
+#ifdef ASMV
+    match_init(); /* initialize the asm code */
+#endif
+#endif
+}
+
+#ifndef FASTEST
+/* ===========================================================================
+ * Set match_start to the longest match starting at the given string and
+ * return its length. Matches shorter or equal to prev_length are discarded,
+ * in which case the result is equal to prev_length and match_start is
+ * garbage.
+ * IN assertions: cur_match is the head of the hash chain for the current
+ *   string (strstart) and its distance is <= MAX_DIST, and prev_length >= 1
+ * OUT assertion: the match length is not greater than s->lookahead.
+ */
+#ifndef ASMV
+/* For 80x86 and 680x0, an optimized version will be provided in match.asm or
+ * match.S. The code will be functionally equivalent.
+ */
+local uInt longest_match(s, cur_match)
+    deflate_state *s;
+    IPos cur_match;                             /* current match */
+{
+    unsigned chain_length = s->max_chain_length;/* max hash chain length */
+    register Bytef *scan = s->window + s->strstart; /* current string */
+    register Bytef *match;                       /* matched string */
+    register int len;                           /* length of current match */
+#ifdef ZLIB_PM3_TUNED
+       int best_len =  MIN_MATCH-1;                            // lift the restriction on prev-length
+#else
+    int best_len = s->prev_length;              /* best match length so far */
+#endif
+    int nice_match = s->nice_match;             /* stop if match long enough */
+    IPos limit = s->strstart > (IPos)MAX_DIST(s) ?
+        s->strstart - (IPos)MAX_DIST(s) : NIL;
+    /* Stop when cur_match becomes <= limit. To simplify the code,
+     * we prevent matches with the string of window index 0.
+     */
+    Posf *prev = s->prev;
+    uInt wmask = s->w_mask;
+
+#ifdef UNALIGNED_OK
+    /* Compare two bytes at a time. Note: this is not always beneficial.
+     * Try with and without -DUNALIGNED_OK to check.
+     */
+    register Bytef *strend = s->window + s->strstart + MAX_MATCH - 1;
+    register ush scan_start = *(ushf*)scan;
+    register ush scan_end   = *(ushf*)(scan+best_len-1);
+#else
+    register Bytef *strend = s->window + s->strstart + MAX_MATCH;
+    register Byte scan_end1  = scan[best_len-1];
+    register Byte scan_end   = scan[best_len];
+#endif
+
+    /* The code is optimized for HASH_BITS >= 8 and MAX_MATCH-2 multiple of 16.
+     * It is easy to get rid of this optimization if necessary.
+     */
+    Assert(s->hash_bits >= 8 && MAX_MATCH == 258, "Code too clever");
+
+    /* Do not waste too much time if we already have a good match: */
+    if (s->prev_length >= s->good_match) {
+        chain_length >>= 2;
+    }
+    /* Do not look for matches beyond the end of the input. This is necessary
+     * to make deflate deterministic.
+     */
+    if ((uInt)nice_match > s->lookahead) nice_match = s->lookahead;
+
+    Assert((ulg)s->strstart <= s->window_size-MIN_LOOKAHEAD, "need lookahead");
+
+    do {
+        Assert(cur_match < s->strstart, "no future");
+        match = s->window + cur_match;
+
+        /* Skip to next match if the match length cannot increase
+         * or if the match length is less than 2.  Note that the checks below
+         * for insufficient lookahead only occur occasionally for performance
+         * reasons.  Therefore uninitialized memory will be accessed, and
+         * conditional jumps will be made that depend on those values.
+         * However the length of the match is limited to the lookahead, so
+         * the output of deflate is not affected by the uninitialized values.
+         */
+#if (defined(UNALIGNED_OK) && MAX_MATCH == 258)
+        /* This code assumes sizeof(unsigned short) == 2. Do not use
+         * UNALIGNED_OK if your compiler uses a different size.
+         */
+        if (*(ushf*)(match+best_len-1) != scan_end ||
+            *(ushf*)match != scan_start) continue;
+
+        /* It is not necessary to compare scan[2] and match[2] since they are
+         * always equal when the other bytes match, given that the hash keys
+         * are equal and that HASH_BITS >= 8. Compare 2 bytes at a time at
+         * strstart+3, +5, ... up to strstart+257. We check for insufficient
+         * lookahead only every 4th comparison; the 128th check will be made
+         * at strstart+257. If MAX_MATCH-2 is not a multiple of 8, it is
+         * necessary to put more guard bytes at the end of the window, or
+         * to check more often for insufficient lookahead.
+         */
+        Assert(scan[2] == match[2], "scan[2]?");
+        scan++, match++;
+        do {
+        } while (*(ushf*)(scan+=2) == *(ushf*)(match+=2) &&
+                 *(ushf*)(scan+=2) == *(ushf*)(match+=2) &&
+                 *(ushf*)(scan+=2) == *(ushf*)(match+=2) &&
+                 *(ushf*)(scan+=2) == *(ushf*)(match+=2) &&
+                 scan < strend);
+        /* The funny "do {}" generates better code on most compilers */
+
+        /* Here, scan <= window+strstart+257 */
+        Assert(scan <= s->window+(unsigned)(s->window_size-1), "wild scan");
+        if (*scan == *match) scan++;
+
+        len = (MAX_MATCH - 1) - (int)(strend-scan);
+        scan = strend - (MAX_MATCH-1);
+
+#else /* UNALIGNED_OK */
+
+        if (match[best_len]   != scan_end  ||
+            match[best_len-1] != scan_end1 ||
+            *match            != *scan     ||
+            *++match          != scan[1])      continue;
+
+        /* The check at best_len-1 can be removed because it will be made
+         * again later. (This heuristic is not always a win.)
+         * It is not necessary to compare scan[2] and match[2] since they
+         * are always equal when the other bytes match, given that
+         * the hash keys are equal and that HASH_BITS >= 8.
+         */
+        scan += 2, match++;
+        Assert(*scan == *match, "match[2]?");
+
+        /* We check for insufficient lookahead only every 8th comparison;
+         * the 256th check will be made at strstart+258.
+         */
+        do {
+        } while (*++scan == *++match && *++scan == *++match &&
+                 *++scan == *++match && *++scan == *++match &&
+                 *++scan == *++match && *++scan == *++match &&
+                 *++scan == *++match && *++scan == *++match &&
+                 scan < strend);
+
+        Assert(scan <= s->window+(unsigned)(s->window_size-1), "wild scan");
+
+        len = MAX_MATCH - (int)(strend - scan);
+        scan = strend - MAX_MATCH;
+
+#endif /* UNALIGNED_OK */
+
+        if (len > best_len) {
+            s->match_start = cur_match;
+            best_len = len;
+            if (len >= nice_match) break;
+#ifdef UNALIGNED_OK
+            scan_end = *(ushf*)(scan+best_len-1);
+#else
+            scan_end1  = scan[best_len-1];
+            scan_end   = scan[best_len];
+#endif
+        }
+    } while ((cur_match = prev[cur_match & wmask]) > limit
+             && --chain_length != 0);
+
+    if ((uInt)best_len <= s->lookahead) return (uInt)best_len;
+    return s->lookahead;
+}
+#endif /* ASMV */
+
+#else /* FASTEST */
+
+/* ---------------------------------------------------------------------------
+ * Optimized version for FASTEST only
+ */
+local uInt longest_match(s, cur_match)
+    deflate_state *s;
+    IPos cur_match;                             /* current match */
+{
+    register Bytef *scan = s->window + s->strstart; /* current string */
+    register Bytef *match;                       /* matched string */
+    register int len;                           /* length of current match */
+    register Bytef *strend = s->window + s->strstart + MAX_MATCH;
+
+    /* The code is optimized for HASH_BITS >= 8 and MAX_MATCH-2 multiple of 16.
+     * It is easy to get rid of this optimization if necessary.
+     */
+    Assert(s->hash_bits >= 8 && MAX_MATCH == 258, "Code too clever");
+
+    Assert((ulg)s->strstart <= s->window_size-MIN_LOOKAHEAD, "need lookahead");
+
+    Assert(cur_match < s->strstart, "no future");
+
+    match = s->window + cur_match;
+
+    /* Return failure if the match length is less than 2:
+     */
+    if (match[0] != scan[0] || match[1] != scan[1]) return MIN_MATCH-1;
+
+    /* The check at best_len-1 can be removed because it will be made
+     * again later. (This heuristic is not always a win.)
+     * It is not necessary to compare scan[2] and match[2] since they
+     * are always equal when the other bytes match, given that
+     * the hash keys are equal and that HASH_BITS >= 8.
+     */
+    scan += 2, match += 2;
+    Assert(*scan == *match, "match[2]?");
+
+    /* We check for insufficient lookahead only every 8th comparison;
+     * the 256th check will be made at strstart+258.
+     */
+    do {
+    } while (*++scan == *++match && *++scan == *++match &&
+             *++scan == *++match && *++scan == *++match &&
+             *++scan == *++match && *++scan == *++match &&
+             *++scan == *++match && *++scan == *++match &&
+             scan < strend);
+
+    Assert(scan <= s->window+(unsigned)(s->window_size-1), "wild scan");
+
+    len = MAX_MATCH - (int)(strend - scan);
+
+    if (len < MIN_MATCH) return MIN_MATCH - 1;
+
+    s->match_start = cur_match;
+    return (uInt)len <= s->lookahead ? (uInt)len : s->lookahead;
+}
+
+#endif /* FASTEST */
+
+#ifdef DEBUG
+/* ===========================================================================
+ * Check that the match at match_start is indeed a match.
+ */
+local void check_match(s, start, match, length)
+    deflate_state *s;
+    IPos start, match;
+    int length;
+{
+    /* check that the match is indeed a match */
+    if (zmemcmp(s->window + match,
+                s->window + start, length) != EQUAL) {
+        fprintf(stderr, " start %u, match %u, length %d\n",
+                start, match, length);
+        do {
+            fprintf(stderr, "%c%c", s->window[match++], s->window[start++]);
+        } while (--length != 0);
+        z_error("invalid match");
+    }
+    if (z_verbose > 1) {
+        fprintf(stderr,"\\[%d,%d]", start-match, length);
+        do { putc(s->window[start++], stderr); } while (--length != 0);
+    }
+}
+#else
+#  define check_match(s, start, match, length)
+#endif /* DEBUG */
+
+/* ===========================================================================
+ * Fill the window when the lookahead becomes insufficient.
+ * Updates strstart and lookahead.
+ *
+ * IN assertion: lookahead < MIN_LOOKAHEAD
+ * OUT assertions: strstart <= window_size-MIN_LOOKAHEAD
+ *    At least one byte has been read, or avail_in == 0; reads are
+ *    performed for at least two bytes (required for the zip translate_eol
+ *    option -- not supported here).
+ */
+local void fill_window(s)
+    deflate_state *s;
+{
+    register unsigned n, m;
+    register Posf *p;
+    unsigned more;    /* Amount of free space at the end of the window. */
+    uInt wsize = s->w_size;
+
+    Assert(s->lookahead < MIN_LOOKAHEAD, "already enough lookahead");
+
+    do {
+        more = (unsigned)(s->window_size -(ulg)s->lookahead -(ulg)s->strstart);
+
+        /* Deal with !@#$% 64K limit: */
+        if (sizeof(int) <= 2) {
+            if (more == 0 && s->strstart == 0 && s->lookahead == 0) {
+                more = wsize;
+
+            } else if (more == (unsigned)(-1)) {
+                /* Very unlikely, but possible on 16 bit machine if
+                 * strstart == 0 && lookahead == 1 (input done a byte at time)
+                 */
+                more--;
+            }
+        }
+
+        /* If the window is almost full and there is insufficient lookahead,
+         * move the upper half to the lower one to make room in the upper half.
+         */
+        if (s->strstart >= wsize+MAX_DIST(s)) {
+
+            zmemcpy(s->window, s->window+wsize, (unsigned)wsize);
+            s->match_start -= wsize;
+            s->strstart    -= wsize; /* we now have strstart >= MAX_DIST */
+            s->block_start -= (long) wsize;
+
+            /* Slide the hash table (could be avoided with 32 bit values
+               at the expense of memory usage). We slide even when level == 0
+               to keep the hash table consistent if we switch back to level > 0
+               later. (Using level 0 permanently is not an optimal usage of
+               zlib, so we don't care about this pathological case.)
+             */
+            n = s->hash_size;
+            p = &s->head[n];
+            do {
+                m = *--p;
+                *p = (Pos)(m >= wsize ? m-wsize : NIL);
+            } while (--n);
+
+            n = wsize;
+#ifndef FASTEST
+            p = &s->prev[n];
+            do {
+                m = *--p;
+                *p = (Pos)(m >= wsize ? m-wsize : NIL);
+                /* If n is not on any hash chain, prev[n] is garbage but
+                 * its value will never be used.
+                 */
+            } while (--n);
+#endif
+            more += wsize;
+        }
+        if (s->strm->avail_in == 0) break;
+
+        /* If there was no sliding:
+         *    strstart <= WSIZE+MAX_DIST-1 && lookahead <= MIN_LOOKAHEAD - 1 &&
+         *    more == window_size - lookahead - strstart
+         * => more >= window_size - (MIN_LOOKAHEAD-1 + WSIZE + MAX_DIST-1)
+         * => more >= window_size - 2*WSIZE + 2
+         * In the BIG_MEM or MMAP case (not yet supported),
+         *   window_size == input_size + MIN_LOOKAHEAD  &&
+         *   strstart + s->lookahead <= input_size => more >= MIN_LOOKAHEAD.
+         * Otherwise, window_size == 2*WSIZE so more >= 2.
+         * If there was sliding, more >= WSIZE. So in all cases, more >= 2.
+         */
+        Assert(more >= 2, "more < 2");
+
+        n = read_buf(s->strm, s->window + s->strstart + s->lookahead, more);
+        s->lookahead += n;
+
+        /* Initialize the hash value now that we have some input: */
+        if (s->lookahead + s->insert >= MIN_MATCH) {
+            uInt str = s->strstart - s->insert;
+            s->ins_h = s->window[str];
+            UPDATE_HASH(s, s->ins_h, s->window[str + 1]);
+#if MIN_MATCH != 3
+            Call UPDATE_HASH() MIN_MATCH-3 more times
+#endif
+            while (s->insert) {
+                UPDATE_HASH(s, s->ins_h, s->window[str + MIN_MATCH-1]);
+#ifndef FASTEST
+                s->prev[str & s->w_mask] = s->head[s->ins_h];
+#endif
+                s->head[s->ins_h] = (Pos)str;
+                str++;
+                s->insert--;
+                if (s->lookahead + s->insert < MIN_MATCH)
+                    break;
+            }
+        }
+        /* If the whole input has less than MIN_MATCH bytes, ins_h is garbage,
+         * but this is not important since only literal bytes will be emitted.
+         */
+
+    } while (s->lookahead < MIN_LOOKAHEAD && s->strm->avail_in != 0);
+
+    /* If the WIN_INIT bytes after the end of the current data have never been
+     * written, then zero those bytes in order to avoid memory check reports of
+     * the use of uninitialized (or uninitialised as Julian writes) bytes by
+     * the longest match routines.  Update the high water mark for the next
+     * time through here.  WIN_INIT is set to MAX_MATCH since the longest match
+     * routines allow scanning to strstart + MAX_MATCH, ignoring lookahead.
+     */
+    if (s->high_water < s->window_size) {
+        ulg curr = s->strstart + (ulg)(s->lookahead);
+        ulg init;
+
+        if (s->high_water < curr) {
+            /* Previous high water mark below current data -- zero WIN_INIT
+             * bytes or up to end of window, whichever is less.
+             */
+            init = s->window_size - curr;
+            if (init > WIN_INIT)
+                init = WIN_INIT;
+            zmemzero(s->window + curr, (unsigned)init);
+            s->high_water = curr + init;
+        }
+        else if (s->high_water < (ulg)curr + WIN_INIT) {
+            /* High water mark at or above current data, but below current data
+             * plus WIN_INIT -- zero out to current data plus WIN_INIT, or up
+             * to end of window, whichever is less.
+             */
+            init = (ulg)curr + WIN_INIT - s->high_water;
+            if (init > s->window_size - s->high_water)
+                init = s->window_size - s->high_water;
+            zmemzero(s->window + s->high_water, (unsigned)init);
+            s->high_water += init;
+        }
+    }
+
+    Assert((ulg)s->strstart <= s->window_size - MIN_LOOKAHEAD,
+           "not enough room for search");
+}
+
+/* ===========================================================================
+ * Flush the current block, with given end-of-file flag.
+ * IN assertion: strstart is set to the end of the current match.
+ */
+#define FLUSH_BLOCK_ONLY(s, last) { \
+   _tr_flush_block(s, (s->block_start >= 0L ? \
+                   (charf *)&s->window[(unsigned)s->block_start] : \
+                   (charf *)Z_NULL), \
+                (ulg)((long)s->strstart - s->block_start), \
+                (last)); \
+   s->block_start = s->strstart; \
+   flush_pending(s->strm); \
+   Tracev((stderr,"[FLUSH]")); \
+}
+
+/* Same but force premature exit if necessary. */
+#define FLUSH_BLOCK(s, last) { \
+   FLUSH_BLOCK_ONLY(s, last); \
+   if (s->strm->avail_out == 0) return (last) ? finish_started : need_more; \
+}
+
+/* ===========================================================================
+ * Copy without compression as much as possible from the input stream, return
+ * the current block state.
+ * This function does not insert new strings in the dictionary since
+ * uncompressible data is probably not useful. This function is used
+ * only for the level=0 compression option.
+ * NOTE: this function should be optimized to avoid extra copying from
+ * window to pending_buf.
+ */
+local block_state deflate_stored(s, flush)
+    deflate_state *s;
+    int flush;
+{
+    /* Stored blocks are limited to 0xffff bytes, pending_buf is limited
+     * to pending_buf_size, and each stored block has a 5 byte header:
+     */
+    ulg max_block_size = 0xffff;
+    ulg max_start;
+
+    if (max_block_size > s->pending_buf_size - 5) {
+        max_block_size = s->pending_buf_size - 5;
+    }
+
+    /* Copy as much as possible from input to output: */
+    for (;;) {
+        /* Fill the window as much as possible: */
+        if (s->lookahead <= 1) {
+
+            Assert(s->strstart < s->w_size+MAX_DIST(s) ||
+                   s->block_start >= (long)s->w_size, "slide too late");
+
+            fill_window(s);
+            if (s->lookahead == 0 && flush == Z_NO_FLUSH) return need_more;
+
+            if (s->lookahead == 0) break; /* flush the current block */
+        }
+        Assert(s->block_start >= 0L, "block gone");
+
+        s->strstart += s->lookahead;
+        s->lookahead = 0;
+
+        /* Emit a stored block if pending_buf will be full: */
+        max_start = s->block_start + max_block_size;
+        if (s->strstart == 0 || (ulg)s->strstart >= max_start) {
+            /* strstart == 0 is possible when wraparound on 16-bit machine */
+            s->lookahead = (uInt)(s->strstart - max_start);
+            s->strstart = (uInt)max_start;
+            FLUSH_BLOCK(s, 0);
+        }
+        /* Flush if we may have to slide, otherwise block_start may become
+         * negative and the data will be gone:
+         */
+        if (s->strstart - (uInt)s->block_start >= MAX_DIST(s)) {
+            FLUSH_BLOCK(s, 0);
+        }
+    }
+    s->insert = 0;
+    if (flush == Z_FINISH) {
+        FLUSH_BLOCK(s, 1);
+        return finish_done;
+    }
+    if ((long)s->strstart > s->block_start)
+        FLUSH_BLOCK(s, 0);
+    return block_done;
+}
+
+/* ===========================================================================
+ * Compress as much as possible from the input stream, return the current
+ * block state.
+ * This function does not perform lazy evaluation of matches and inserts
+ * new strings in the dictionary only for unmatched strings or for short
+ * matches. It is used only for the fast compression options.
+ */
+local block_state deflate_fast(s, flush)
+    deflate_state *s;
+    int flush;
+{
+    IPos hash_head;       /* head of the hash chain */
+    int bflush;           /* set if current block must be flushed */
+
+    for (;;) {
+        /* Make sure that we always have enough lookahead, except
+         * at the end of the input file. We need MAX_MATCH bytes
+         * for the next match, plus MIN_MATCH bytes to insert the
+         * string following the next match.
+         */
+        if (s->lookahead < MIN_LOOKAHEAD) {
+            fill_window(s);
+            if (s->lookahead < MIN_LOOKAHEAD && flush == Z_NO_FLUSH) {
+                return need_more;
+            }
+            if (s->lookahead == 0) break; /* flush the current block */
+        }
+
+        /* Insert the string window[strstart .. strstart+2] in the
+         * dictionary, and set hash_head to the head of the hash chain:
+         */
+        hash_head = NIL;
+        if (s->lookahead >= MIN_MATCH) {
+            INSERT_STRING(s, s->strstart, hash_head);
+        }
+
+        /* Find the longest match, discarding those <= prev_length.
+         * At this point we have always match_length < MIN_MATCH
+         */
+        if (hash_head != NIL && s->strstart - hash_head <= MAX_DIST(s)) {
+            /* To simplify the code, we prevent matches with the string
+             * of window index 0 (in particular we have to avoid a match
+             * of the string with itself at the start of the input file).
+             */
+            s->match_length = longest_match (s, hash_head);
+            /* longest_match() sets match_start */
+        }
+        if (s->match_length >= MIN_MATCH) {
+            check_match(s, s->strstart, s->match_start, s->match_length);
+
+            _tr_tally_dist(s, s->strstart - s->match_start,
+                           s->match_length - MIN_MATCH, bflush);
+
+            s->lookahead -= s->match_length;
+
+            /* Insert new strings in the hash table only if the match length
+             * is not too large. This saves time but degrades compression.
+             */
+#ifndef FASTEST
+            if (s->match_length <= s->max_insert_length &&
+                s->lookahead >= MIN_MATCH) {
+                s->match_length--; /* string at strstart already in table */
+                do {
+                    s->strstart++;
+                    INSERT_STRING(s, s->strstart, hash_head);
+                    /* strstart never exceeds WSIZE-MAX_MATCH, so there are
+                     * always MIN_MATCH bytes ahead.
+                     */
+                } while (--s->match_length != 0);
+                s->strstart++;
+            } else
+#endif
+            {
+                s->strstart += s->match_length;
+                s->match_length = 0;
+                s->ins_h = s->window[s->strstart];
+                UPDATE_HASH(s, s->ins_h, s->window[s->strstart+1]);
+#if MIN_MATCH != 3
+                Call UPDATE_HASH() MIN_MATCH-3 more times
+#endif
+                /* If lookahead < MIN_MATCH, ins_h is garbage, but it does not
+                 * matter since it will be recomputed at next deflate call.
+                 */
+            }
+        } else {
+            /* No match, output a literal byte */
+            Tracevv((stderr,"%c", s->window[s->strstart]));
+            _tr_tally_lit (s, s->window[s->strstart], bflush);
+            s->lookahead--;
+            s->strstart++;
+        }
+        if (bflush) FLUSH_BLOCK(s, 0);
+    }
+    s->insert = s->strstart < MIN_MATCH-1 ? s->strstart : MIN_MATCH-1;
+    if (flush == Z_FINISH) {
+        FLUSH_BLOCK(s, 1);
+        return finish_done;
+    }
+    if (s->last_lit)
+        FLUSH_BLOCK(s, 0);
+    return block_done;
+}
+
+
+#ifdef ZLIB_PM3_TUNED
+local uInt try_harder(s, strstart, lookahead, hash_head)
+       deflate_state *s;
+       uInt strstart;
+       uInt lookahead;
+       IPos hash_head;
+{
+       uInt strstart_save = s->strstart;
+       s->strstart = strstart;
+       uInt lookahead_save = s->lookahead;
+       s->lookahead = lookahead;
+       uInt ins_h_save = s->ins_h;
+       uInt combined_gain;
+       uInt best_combined_gain = 0;
+       uInt match_length;
+       uInt prev_length = s->prev_length < MIN_MATCH ? 1 : s->prev_length;
+       uInt best_prev_length = prev_length;
+       uInt current_match_start = s->match_start;
+       uInt current_match_length = s->match_length;
+
+       do {
+        if (hash_head != NIL && s->strstart - hash_head <= MAX_DIST(s)) {
+                       match_length = longest_match (s, hash_head);
+                       /* longest_match() sets match_start */
+               } else {
+                       match_length = MIN_MATCH - 1;
+               }
+#if TOO_FAR <= 32767
+               if (match_length == MIN_MATCH && s->strstart - s->match_start > TOO_FAR) {
+                       match_length = MIN_MATCH-1;
+               }
+#endif
+               if (s->strstart == strstart) {                                          // store match at current position
+                       current_match_length = match_length;
+                       current_match_start = s->match_start;
+               }
+               if (s->strstart - strstart + 1 < MIN_MATCH) {           // previous match reduced to one or two literals
+                       combined_gain = 0;                                                              // need one literal per byte: no gain (assuming 8 bits per literal)
+               } else {
+                       combined_gain = s->strstart - strstart + 1 - MIN_MATCH;  // (possibly truncated) previous_length - 3 literals
+               }
+               if (match_length < MIN_MATCH) { 
+                       combined_gain += 0;                                                     // no gain
+               } else {
+                       combined_gain += match_length - MIN_MATCH;      // match_length bytes are coded as three literals
+               }
+               if (combined_gain >= best_combined_gain) {                      // in case of a tie we prefer the longer prev_length
+                       best_combined_gain = combined_gain;
+                       best_prev_length = s->strstart - strstart + 1;
+               }
+               s->strstart++;
+               s->lookahead--;
+               UPDATE_HASH(s, s->ins_h, s->window[(s->strstart) + (MIN_MATCH-1)]);
+               hash_head = s->head[s->ins_h];
+       } while (s->strstart <= strstart-1 + prev_length                        // try to truncate the previous match to 1, 3, ... prev_length
+                       && s->strstart <= s->window_size - MIN_LOOKAHEAD);      // watch out for the end of the input
+       
+       s->strstart = strstart_save;
+       s->lookahead = lookahead_save;
+       s->ins_h = ins_h_save;
+       s->match_length = current_match_length;
+       s->match_start = current_match_start;
+       if (best_prev_length >= MIN_MATCH) {
+               s->prev_length = best_prev_length;
+               s->match_length = MIN_MATCH - 1;
+       } else {
+               s->prev_length = MIN_MATCH - 1;
+       }
+       return best_combined_gain;
+}
+#endif
+
+
+
+#ifndef FASTEST
+/* ===========================================================================
+ * Same as above, but achieves better compression. We use a lazy
+ * evaluation for matches: a match is finally adopted only if there is
+ * no better match at the next window position.
+ */
+local block_state deflate_slow(s, flush)
+    deflate_state *s;
+    int flush;
+{
+    IPos hash_head;          /* head of hash chain */
+    int bflush;              /* set if current block must be flushed */
+
+    /* Process the input block. */
+    for (;;) {
+        /* Make sure that we always have enough lookahead, except
+         * at the end of the input file. We need MAX_MATCH bytes
+         * for the next match, plus MIN_MATCH bytes to insert the
+         * string following the next match.
+         */
+        if (s->lookahead < MIN_LOOKAHEAD) {
+            fill_window(s);
+            if (s->lookahead < MIN_LOOKAHEAD && flush == Z_NO_FLUSH) {
+                return need_more;
+            }
+            if (s->lookahead == 0) break; /* flush the current block */
+        }
+
+        /* Insert the string window[strstart .. strstart+2] in the
+         * dictionary, and set hash_head to the head of the hash chain:
+         */
+        hash_head = NIL;
+        if (s->lookahead >= MIN_MATCH) {
+            INSERT_STRING(s, s->strstart, hash_head);
+        }
+
+        /* Find the longest match, discarding those <= prev_length. */
+        s->prev_length = s->match_length, s->prev_match = s->match_start;
+        s->match_length = MIN_MATCH-1;
+
+#ifdef ZLIB_PM3_TUNED
+               if (s->prev_length < s->max_lazy_match) {
+                       try_harder(s, s->strstart, s->lookahead, hash_head);
+               }
+
+#else
+        if (hash_head != NIL && s->prev_length < s->max_lazy_match &&
+            s->strstart - hash_head <= MAX_DIST(s)) {
+            /* To simplify the code, we prevent matches with the string
+             * of window index 0 (in particular we have to avoid a match
+             * of the string with itself at the start of the input file).
+             */
+            s->match_length = longest_match (s, hash_head);
+            /* longest_match() sets match_start */
+
+            if (s->match_length <= 5 && (s->strategy == Z_FILTERED
+#if TOO_FAR <= 32767
+                || (s->match_length == MIN_MATCH &&
+                    s->strstart - s->match_start > TOO_FAR)
+#endif
+                )) {
+
+                /* If prev_match is also MIN_MATCH, match_start is garbage
+                 * but we will ignore the current match anyway.
+                 */
+                s->match_length = MIN_MATCH-1;
+            }
+        }
+#endif /* ZLIB_PM3_TUNED */
+        /* If there was a match at the previous step and the current
+         * match is not better, output the previous match:
+         */
+        if (s->prev_length >= MIN_MATCH && s->match_length <= s->prev_length) {
+            uInt max_insert = s->strstart + s->lookahead - MIN_MATCH;
+            /* Do not insert strings in hash table beyond this. */
+
+            check_match(s, s->strstart-1, s->prev_match, s->prev_length);
+
+            _tr_tally_dist(s, s->strstart -1 - s->prev_match,
+                           s->prev_length - MIN_MATCH, bflush);
+
+            /* Insert in hash table all strings up to the end of the match.
+             * strstart-1 and strstart are already inserted. If there is not
+             * enough lookahead, the last two strings are not inserted in
+             * the hash table.
+             */
+            s->lookahead -= s->prev_length-1;
+            s->prev_length -= 2;
+            do {
+                if (++s->strstart <= max_insert) {
+                    INSERT_STRING(s, s->strstart, hash_head);
+                }
+            } while (--s->prev_length != 0);
+            s->match_available = 0;
+            s->match_length = MIN_MATCH-1;
+            s->strstart++;
+
+            if (bflush) FLUSH_BLOCK(s, 0);
+
+        } else if (s->match_available) {
+            /* If there was no match at the previous position, output a
+             * single literal. If there was a match but the current match
+             * is longer, truncate the previous match to a single literal.
+             */
+            Tracevv((stderr,"%c", s->window[s->strstart-1]));
+            _tr_tally_lit(s, s->window[s->strstart-1], bflush);
+            if (bflush) {
+                FLUSH_BLOCK_ONLY(s, 0);
+            }
+            s->strstart++;
+            s->lookahead--;
+            if (s->strm->avail_out == 0) return need_more;
+        } else {
+            /* There is no previous match to compare with, wait for
+             * the next step to decide.
+             */
+            s->match_available = 1;
+            s->strstart++;
+            s->lookahead--;
+        }
+    }
+    Assert (flush != Z_NO_FLUSH, "no flush?");
+    if (s->match_available) {
+        Tracevv((stderr,"%c", s->window[s->strstart-1]));
+        _tr_tally_lit(s, s->window[s->strstart-1], bflush);
+        s->match_available = 0;
+    }
+    s->insert = s->strstart < MIN_MATCH-1 ? s->strstart : MIN_MATCH-1;
+    if (flush == Z_FINISH) {
+        FLUSH_BLOCK(s, 1);
+        return finish_done;
+    }
+    if (s->last_lit)
+        FLUSH_BLOCK(s, 0);
+    return block_done;
+}
+#endif /* FASTEST */
+
+/* ===========================================================================
+ * For Z_RLE, simply look for runs of bytes, generate matches only of distance
+ * one.  Do not maintain a hash table.  (It will be regenerated if this run of
+ * deflate switches away from Z_RLE.)
+ */
+local block_state deflate_rle(s, flush)
+    deflate_state *s;
+    int flush;
+{
+    int bflush;             /* set if current block must be flushed */
+    uInt prev;              /* byte at distance one to match */
+    Bytef *scan, *strend;   /* scan goes up to strend for length of run */
+
+    for (;;) {
+        /* Make sure that we always have enough lookahead, except
+         * at the end of the input file. We need MAX_MATCH bytes
+         * for the longest run, plus one for the unrolled loop.
+         */
+        if (s->lookahead <= MAX_MATCH) {
+            fill_window(s);
+            if (s->lookahead <= MAX_MATCH && flush == Z_NO_FLUSH) {
+                return need_more;
+            }
+            if (s->lookahead == 0) break; /* flush the current block */
+        }
+
+        /* See how many times the previous byte repeats */
+        s->match_length = 0;
+        if (s->lookahead >= MIN_MATCH && s->strstart > 0) {
+            scan = s->window + s->strstart - 1;
+            prev = *scan;
+            if (prev == *++scan && prev == *++scan && prev == *++scan) {
+                strend = s->window + s->strstart + MAX_MATCH;
+                do {
+                } while (prev == *++scan && prev == *++scan &&
+                         prev == *++scan && prev == *++scan &&
+                         prev == *++scan && prev == *++scan &&
+                         prev == *++scan && prev == *++scan &&
+                         scan < strend);
+                s->match_length = MAX_MATCH - (int)(strend - scan);
+                if (s->match_length > s->lookahead)
+                    s->match_length = s->lookahead;
+            }
+            Assert(scan <= s->window+(uInt)(s->window_size-1), "wild scan");
+        }
+
+        /* Emit match if have run of MIN_MATCH or longer, else emit literal */
+        if (s->match_length >= MIN_MATCH) {
+            check_match(s, s->strstart, s->strstart - 1, s->match_length);
+
+            _tr_tally_dist(s, 1, s->match_length - MIN_MATCH, bflush);
+
+            s->lookahead -= s->match_length;
+            s->strstart += s->match_length;
+            s->match_length = 0;
+        } else {
+            /* No match, output a literal byte */
+            Tracevv((stderr,"%c", s->window[s->strstart]));
+            _tr_tally_lit (s, s->window[s->strstart], bflush);
+            s->lookahead--;
+            s->strstart++;
+        }
+        if (bflush) FLUSH_BLOCK(s, 0);
+    }
+    s->insert = 0;
+    if (flush == Z_FINISH) {
+        FLUSH_BLOCK(s, 1);
+        return finish_done;
+    }
+    if (s->last_lit)
+        FLUSH_BLOCK(s, 0);
+    return block_done;
+}
+
+/* ===========================================================================
+ * For Z_HUFFMAN_ONLY, do not look for matches.  Do not maintain a hash table.
+ * (It will be regenerated if this run of deflate switches away from Huffman.)
+ */
+local block_state deflate_huff(s, flush)
+    deflate_state *s;
+    int flush;
+{
+    int bflush;             /* set if current block must be flushed */
+
+    for (;;) {
+        /* Make sure that we have a literal to write. */
+        if (s->lookahead == 0) {
+            fill_window(s);
+            if (s->lookahead == 0) {
+                if (flush == Z_NO_FLUSH)
+                    return need_more;
+                break;      /* flush the current block */
+            }
+        }
+
+        /* Output a literal byte */
+        s->match_length = 0;
+        Tracevv((stderr,"%c", s->window[s->strstart]));
+        _tr_tally_lit (s, s->window[s->strstart], bflush);
+        s->lookahead--;
+        s->strstart++;
+        if (bflush) FLUSH_BLOCK(s, 0);
+    }
+    s->insert = 0;
+    if (flush == Z_FINISH) {
+        FLUSH_BLOCK(s, 1);
+        return finish_done;
+    }
+    if (s->last_lit)
+        FLUSH_BLOCK(s, 0);
+    return block_done;
+}
diff --git a/zlib/deflate.h b/zlib/deflate.h
new file mode 100644 (file)
index 0000000..ce0299e
--- /dev/null
@@ -0,0 +1,346 @@
+/* deflate.h -- internal compression state
+ * Copyright (C) 1995-2012 Jean-loup Gailly
+ * For conditions of distribution and use, see copyright notice in zlib.h
+ */
+
+/* WARNING: this file should *not* be used by applications. It is
+   part of the implementation of the compression library and is
+   subject to change. Applications should only use zlib.h.
+ */
+
+/* @(#) $Id$ */
+
+#ifndef DEFLATE_H
+#define DEFLATE_H
+
+#include "zutil.h"
+
+/* define NO_GZIP when compiling if you want to disable gzip header and
+   trailer creation by deflate().  NO_GZIP would be used to avoid linking in
+   the crc code when it is not needed.  For shared libraries, gzip encoding
+   should be left enabled. */
+#ifndef NO_GZIP
+#  define GZIP
+#endif
+
+/* ===========================================================================
+ * Internal compression state.
+ */
+
+#define LENGTH_CODES 29
+/* number of length codes, not counting the special END_BLOCK code */
+
+#define LITERALS  256
+/* number of literal bytes 0..255 */
+
+#define L_CODES (LITERALS+1+LENGTH_CODES)
+/* number of Literal or Length codes, including the END_BLOCK code */
+
+#define D_CODES   30
+/* number of distance codes */
+
+#define BL_CODES  19
+/* number of codes used to transfer the bit lengths */
+
+#define HEAP_SIZE (2*L_CODES+1)
+/* maximum heap size */
+
+#define MAX_BITS 15
+/* All codes must not exceed MAX_BITS bits */
+
+#define Buf_size 16
+/* size of bit buffer in bi_buf */
+
+#define INIT_STATE    42
+#define EXTRA_STATE   69
+#define NAME_STATE    73
+#define COMMENT_STATE 91
+#define HCRC_STATE   103
+#define BUSY_STATE   113
+#define FINISH_STATE 666
+/* Stream status */
+
+
+/* Data structure describing a single value and its code string. */
+typedef struct ct_data_s {
+    union {
+        ush  freq;       /* frequency count */
+        ush  code;       /* bit string */
+    } fc;
+    union {
+        ush  dad;        /* father node in Huffman tree */
+        ush  len;        /* length of bit string */
+    } dl;
+} FAR ct_data;
+
+#define Freq fc.freq
+#define Code fc.code
+#define Dad  dl.dad
+#define Len  dl.len
+
+typedef struct static_tree_desc_s  static_tree_desc;
+
+typedef struct tree_desc_s {
+    ct_data *dyn_tree;           /* the dynamic tree */
+    int     max_code;            /* largest code with non zero frequency */
+    static_tree_desc *stat_desc; /* the corresponding static tree */
+} FAR tree_desc;
+
+typedef ush Pos;
+typedef Pos FAR Posf;
+typedef unsigned IPos;
+
+/* A Pos is an index in the character window. We use short instead of int to
+ * save space in the various tables. IPos is used only for parameter passing.
+ */
+
+typedef struct internal_state {
+    z_streamp strm;      /* pointer back to this zlib stream */
+    int   status;        /* as the name implies */
+    Bytef *pending_buf;  /* output still pending */
+    ulg   pending_buf_size; /* size of pending_buf */
+    Bytef *pending_out;  /* next pending byte to output to the stream */
+    uInt   pending;      /* nb of bytes in the pending buffer */
+    int   wrap;          /* bit 0 true for zlib, bit 1 true for gzip */
+    gz_headerp  gzhead;  /* gzip header information to write */
+    uInt   gzindex;      /* where in extra, name, or comment */
+    Byte  method;        /* can only be DEFLATED */
+    int   last_flush;    /* value of flush param for previous deflate call */
+
+                /* used by deflate.c: */
+
+    uInt  w_size;        /* LZ77 window size (32K by default) */
+    uInt  w_bits;        /* log2(w_size)  (8..16) */
+    uInt  w_mask;        /* w_size - 1 */
+
+    Bytef *window;
+    /* Sliding window. Input bytes are read into the second half of the window,
+     * and move to the first half later to keep a dictionary of at least wSize
+     * bytes. With this organization, matches are limited to a distance of
+     * wSize-MAX_MATCH bytes, but this ensures that IO is always
+     * performed with a length multiple of the block size. Also, it limits
+     * the window size to 64K, which is quite useful on MSDOS.
+     * To do: use the user input buffer as sliding window.
+     */
+
+    ulg window_size;
+    /* Actual size of window: 2*wSize, except when the user input buffer
+     * is directly used as sliding window.
+     */
+
+    Posf *prev;
+    /* Link to older string with same hash index. To limit the size of this
+     * array to 64K, this link is maintained only for the last 32K strings.
+     * An index in this array is thus a window index modulo 32K.
+     */
+
+    Posf *head; /* Heads of the hash chains or NIL. */
+
+    uInt  ins_h;          /* hash index of string to be inserted */
+    uInt  hash_size;      /* number of elements in hash table */
+    uInt  hash_bits;      /* log2(hash_size) */
+    uInt  hash_mask;      /* hash_size-1 */
+
+    uInt  hash_shift;
+    /* Number of bits by which ins_h must be shifted at each input
+     * step. It must be such that after MIN_MATCH steps, the oldest
+     * byte no longer takes part in the hash key, that is:
+     *   hash_shift * MIN_MATCH >= hash_bits
+     */
+
+    long block_start;
+    /* Window position at the beginning of the current output block. Gets
+     * negative when the window is moved backwards.
+     */
+
+    uInt match_length;           /* length of best match */
+    IPos prev_match;             /* previous match */
+    int match_available;         /* set if previous match exists */
+    uInt strstart;               /* start of string to insert */
+    uInt match_start;            /* start of matching string */
+    uInt lookahead;              /* number of valid bytes ahead in window */
+
+    uInt prev_length;
+    /* Length of the best match at previous step. Matches not greater than this
+     * are discarded. This is used in the lazy match evaluation.
+     */
+
+    uInt max_chain_length;
+    /* To speed up deflation, hash chains are never searched beyond this
+     * length.  A higher limit improves compression ratio but degrades the
+     * speed.
+     */
+
+    uInt max_lazy_match;
+    /* Attempt to find a better match only when the current match is strictly
+     * smaller than this value. This mechanism is used only for compression
+     * levels >= 4.
+     */
+#   define max_insert_length  max_lazy_match
+    /* Insert new strings in the hash table only if the match length is not
+     * greater than this length. This saves time but degrades compression.
+     * max_insert_length is used only for compression levels <= 3.
+     */
+
+    int level;    /* compression level (1..9) */
+    int strategy; /* favor or force Huffman coding*/
+
+    uInt good_match;
+    /* Use a faster search when the previous match is longer than this */
+
+    int nice_match; /* Stop searching when current match exceeds this */
+
+                /* used by trees.c: */
+    /* Didn't use ct_data typedef below to suppress compiler warning */
+    struct ct_data_s dyn_ltree[HEAP_SIZE];   /* literal and length tree */
+    struct ct_data_s dyn_dtree[2*D_CODES+1]; /* distance tree */
+    struct ct_data_s bl_tree[2*BL_CODES+1];  /* Huffman tree for bit lengths */
+
+    struct tree_desc_s l_desc;               /* desc. for literal tree */
+    struct tree_desc_s d_desc;               /* desc. for distance tree */
+    struct tree_desc_s bl_desc;              /* desc. for bit length tree */
+
+    ush bl_count[MAX_BITS+1];
+    /* number of codes at each bit length for an optimal tree */
+
+    int heap[2*L_CODES+1];      /* heap used to build the Huffman trees */
+    int heap_len;               /* number of elements in the heap */
+    int heap_max;               /* element of largest frequency */
+    /* The sons of heap[n] are heap[2*n] and heap[2*n+1]. heap[0] is not used.
+     * The same heap array is used to build all trees.
+     */
+
+    uch depth[2*L_CODES+1];
+    /* Depth of each subtree used as tie breaker for trees of equal frequency
+     */
+
+    uchf *l_buf;          /* buffer for literals or lengths */
+
+    uInt  lit_bufsize;
+    /* Size of match buffer for literals/lengths.  There are 4 reasons for
+     * limiting lit_bufsize to 64K:
+     *   - frequencies can be kept in 16 bit counters
+     *   - if compression is not successful for the first block, all input
+     *     data is still in the window so we can still emit a stored block even
+     *     when input comes from standard input.  (This can also be done for
+     *     all blocks if lit_bufsize is not greater than 32K.)
+     *   - if compression is not successful for a file smaller than 64K, we can
+     *     even emit a stored file instead of a stored block (saving 5 bytes).
+     *     This is applicable only for zip (not gzip or zlib).
+     *   - creating new Huffman trees less frequently may not provide fast
+     *     adaptation to changes in the input data statistics. (Take for
+     *     example a binary file with poorly compressible code followed by
+     *     a highly compressible string table.) Smaller buffer sizes give
+     *     fast adaptation but have of course the overhead of transmitting
+     *     trees more frequently.
+     *   - I can't count above 4
+     */
+
+    uInt last_lit;      /* running index in l_buf */
+
+    ushf *d_buf;
+    /* Buffer for distances. To simplify the code, d_buf and l_buf have
+     * the same number of elements. To use different lengths, an extra flag
+     * array would be necessary.
+     */
+
+    ulg opt_len;        /* bit length of current block with optimal trees */
+    ulg static_len;     /* bit length of current block with static trees */
+    uInt matches;       /* number of string matches in current block */
+    uInt insert;        /* bytes at end of window left to insert */
+
+#ifdef DEBUG
+    ulg compressed_len; /* total bit length of compressed file mod 2^32 */
+    ulg bits_sent;      /* bit length of compressed data sent mod 2^32 */
+#endif
+
+    ush bi_buf;
+    /* Output buffer. bits are inserted starting at the bottom (least
+     * significant bits).
+     */
+    int bi_valid;
+    /* Number of valid bits in bi_buf.  All bits above the last valid bit
+     * are always zero.
+     */
+
+    ulg high_water;
+    /* High water mark offset in window for initialized bytes -- bytes above
+     * this are set to zero in order to avoid memory check warnings when
+     * longest match routines access bytes past the input.  This is then
+     * updated to the new high water mark.
+     */
+
+} FAR deflate_state;
+
+/* Output a byte on the stream.
+ * IN assertion: there is enough room in pending_buf.
+ */
+#define put_byte(s, c) {s->pending_buf[s->pending++] = (c);}
+
+
+#define MIN_LOOKAHEAD (MAX_MATCH+MIN_MATCH+1)
+/* Minimum amount of lookahead, except at the end of the input file.
+ * See deflate.c for comments about the MIN_MATCH+1.
+ */
+
+#define MAX_DIST(s)  ((s)->w_size-MIN_LOOKAHEAD)
+/* In order to simplify the code, particularly on 16 bit machines, match
+ * distances are limited to MAX_DIST instead of WSIZE.
+ */
+
+#define WIN_INIT MAX_MATCH
+/* Number of bytes after end of data in window to initialize in order to avoid
+   memory checker errors from longest match routines */
+
+        /* in trees.c */
+void ZLIB_INTERNAL _tr_init OF((deflate_state *s));
+int ZLIB_INTERNAL _tr_tally OF((deflate_state *s, unsigned dist, unsigned lc));
+void ZLIB_INTERNAL _tr_flush_block OF((deflate_state *s, charf *buf,
+                        ulg stored_len, int last));
+void ZLIB_INTERNAL _tr_flush_bits OF((deflate_state *s));
+void ZLIB_INTERNAL _tr_align OF((deflate_state *s));
+void ZLIB_INTERNAL _tr_stored_block OF((deflate_state *s, charf *buf,
+                        ulg stored_len, int last));
+
+#define d_code(dist) \
+   ((dist) < 256 ? _dist_code[dist] : _dist_code[256+((dist)>>7)])
+/* Mapping from a distance to a distance code. dist is the distance - 1 and
+ * must not have side effects. _dist_code[256] and _dist_code[257] are never
+ * used.
+ */
+
+#ifndef DEBUG
+/* Inline versions of _tr_tally for speed: */
+
+#if defined(GEN_TREES_H) || !defined(STDC)
+  extern uch ZLIB_INTERNAL _length_code[];
+  extern uch ZLIB_INTERNAL _dist_code[];
+#else
+  extern const uch ZLIB_INTERNAL _length_code[];
+  extern const uch ZLIB_INTERNAL _dist_code[];
+#endif
+
+# define _tr_tally_lit(s, c, flush) \
+  { uch cc = (c); \
+    s->d_buf[s->last_lit] = 0; \
+    s->l_buf[s->last_lit++] = cc; \
+    s->dyn_ltree[cc].Freq++; \
+    flush = (s->last_lit == s->lit_bufsize-1); \
+   }
+# define _tr_tally_dist(s, distance, length, flush) \
+  { uch len = (length); \
+    ush dist = (distance); \
+    s->d_buf[s->last_lit] = dist; \
+    s->l_buf[s->last_lit++] = len; \
+    dist--; \
+    s->dyn_ltree[_length_code[len]+LITERALS+1].Freq++; \
+    s->dyn_dtree[d_code(dist)].Freq++; \
+    flush = (s->last_lit == s->lit_bufsize-1); \
+  }
+#else
+# define _tr_tally_lit(s, c, flush) flush = _tr_tally(s, 0, c)
+# define _tr_tally_dist(s, distance, length, flush) \
+              flush = _tr_tally(s, distance, length)
+#endif
+
+#endif /* DEFLATE_H */
diff --git a/zlib/inffast.c b/zlib/inffast.c
new file mode 100644 (file)
index 0000000..bda59ce
--- /dev/null
@@ -0,0 +1,340 @@
+/* inffast.c -- fast decoding
+ * Copyright (C) 1995-2008, 2010, 2013 Mark Adler
+ * For conditions of distribution and use, see copyright notice in zlib.h
+ */
+
+#include "zutil.h"
+#include "inftrees.h"
+#include "inflate.h"
+#include "inffast.h"
+
+#ifndef ASMINF
+
+/* Allow machine dependent optimization for post-increment or pre-increment.
+   Based on testing to date,
+   Pre-increment preferred for:
+   - PowerPC G3 (Adler)
+   - MIPS R5000 (Randers-Pehrson)
+   Post-increment preferred for:
+   - none
+   No measurable difference:
+   - Pentium III (Anderson)
+   - M68060 (Nikl)
+ */
+#ifdef POSTINC
+#  define OFF 0
+#  define PUP(a) *(a)++
+#else
+#  define OFF 1
+#  define PUP(a) *++(a)
+#endif
+
+/*
+   Decode literal, length, and distance codes and write out the resulting
+   literal and match bytes until either not enough input or output is
+   available, an end-of-block is encountered, or a data error is encountered.
+   When large enough input and output buffers are supplied to inflate(), for
+   example, a 16K input buffer and a 64K output buffer, more than 95% of the
+   inflate execution time is spent in this routine.
+
+   Entry assumptions:
+
+        state->mode == LEN
+        strm->avail_in >= 6
+        strm->avail_out >= 258
+        start >= strm->avail_out
+        state->bits < 8
+
+   On return, state->mode is one of:
+
+        LEN -- ran out of enough output space or enough available input
+        TYPE -- reached end of block code, inflate() to interpret next block
+        BAD -- error in block data
+
+   Notes:
+
+    - The maximum input bits used by a length/distance pair is 15 bits for the
+      length code, 5 bits for the length extra, 15 bits for the distance code,
+      and 13 bits for the distance extra.  This totals 48 bits, or six bytes.
+      Therefore if strm->avail_in >= 6, then there is enough input to avoid
+      checking for available input while decoding.
+
+    - The maximum bytes that a single length/distance pair can output is 258
+      bytes, which is the maximum length that can be coded.  inflate_fast()
+      requires strm->avail_out >= 258 for each loop to avoid checking for
+      output space.
+ */
+void ZLIB_INTERNAL inflate_fast(strm, start)
+z_streamp strm;
+unsigned start;         /* inflate()'s starting value for strm->avail_out */
+{
+    struct inflate_state FAR *state;
+    z_const unsigned char FAR *in;      /* local strm->next_in */
+    z_const unsigned char FAR *last;    /* have enough input while in < last */
+    unsigned char FAR *out;     /* local strm->next_out */
+    unsigned char FAR *beg;     /* inflate()'s initial strm->next_out */
+    unsigned char FAR *end;     /* while out < end, enough space available */
+#ifdef INFLATE_STRICT
+    unsigned dmax;              /* maximum distance from zlib header */
+#endif
+    unsigned wsize;             /* window size or zero if not using window */
+    unsigned whave;             /* valid bytes in the window */
+    unsigned wnext;             /* window write index */
+    unsigned char FAR *window;  /* allocated sliding window, if wsize != 0 */
+    unsigned long hold;         /* local strm->hold */
+    unsigned bits;              /* local strm->bits */
+    code const FAR *lcode;      /* local strm->lencode */
+    code const FAR *dcode;      /* local strm->distcode */
+    unsigned lmask;             /* mask for first level of length codes */
+    unsigned dmask;             /* mask for first level of distance codes */
+    code here;                  /* retrieved table entry */
+    unsigned op;                /* code bits, operation, extra bits, or */
+                                /*  window position, window bytes to copy */
+    unsigned len;               /* match length, unused bytes */
+    unsigned dist;              /* match distance */
+    unsigned char FAR *from;    /* where to copy match from */
+
+    /* copy state to local variables */
+    state = (struct inflate_state FAR *)strm->state;
+    in = strm->next_in - OFF;
+    last = in + (strm->avail_in - 5);
+    out = strm->next_out - OFF;
+    beg = out - (start - strm->avail_out);
+    end = out + (strm->avail_out - 257);
+#ifdef INFLATE_STRICT
+    dmax = state->dmax;
+#endif
+    wsize = state->wsize;
+    whave = state->whave;
+    wnext = state->wnext;
+    window = state->window;
+    hold = state->hold;
+    bits = state->bits;
+    lcode = state->lencode;
+    dcode = state->distcode;
+    lmask = (1U << state->lenbits) - 1;
+    dmask = (1U << state->distbits) - 1;
+
+    /* decode literals and length/distances until end-of-block or not enough
+       input data or output space */
+    do {
+        if (bits < 15) {
+            hold += (unsigned long)(PUP(in)) << bits;
+            bits += 8;
+            hold += (unsigned long)(PUP(in)) << bits;
+            bits += 8;
+        }
+        here = lcode[hold & lmask];
+      dolen:
+        op = (unsigned)(here.bits);
+        hold >>= op;
+        bits -= op;
+        op = (unsigned)(here.op);
+        if (op == 0) {                          /* literal */
+            Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ?
+                    "inflate:         literal '%c'\n" :
+                    "inflate:         literal 0x%02x\n", here.val));
+            PUP(out) = (unsigned char)(here.val);
+        }
+        else if (op & 16) {                     /* length base */
+            len = (unsigned)(here.val);
+            op &= 15;                           /* number of extra bits */
+            if (op) {
+                if (bits < op) {
+                    hold += (unsigned long)(PUP(in)) << bits;
+                    bits += 8;
+                }
+                len += (unsigned)hold & ((1U << op) - 1);
+                hold >>= op;
+                bits -= op;
+            }
+            Tracevv((stderr, "inflate:         length %u\n", len));
+            if (bits < 15) {
+                hold += (unsigned long)(PUP(in)) << bits;
+                bits += 8;
+                hold += (unsigned long)(PUP(in)) << bits;
+                bits += 8;
+            }
+            here = dcode[hold & dmask];
+          dodist:
+            op = (unsigned)(here.bits);
+            hold >>= op;
+            bits -= op;
+            op = (unsigned)(here.op);
+            if (op & 16) {                      /* distance base */
+                dist = (unsigned)(here.val);
+                op &= 15;                       /* number of extra bits */
+                if (bits < op) {
+                    hold += (unsigned long)(PUP(in)) << bits;
+                    bits += 8;
+                    if (bits < op) {
+                        hold += (unsigned long)(PUP(in)) << bits;
+                        bits += 8;
+                    }
+                }
+                dist += (unsigned)hold & ((1U << op) - 1);
+#ifdef INFLATE_STRICT
+                if (dist > dmax) {
+                    strm->msg = (char *)"invalid distance too far back";
+                    state->mode = BAD;
+                    break;
+                }
+#endif
+                hold >>= op;
+                bits -= op;
+                Tracevv((stderr, "inflate:         distance %u\n", dist));
+                op = (unsigned)(out - beg);     /* max distance in output */
+                if (dist > op) {                /* see if copy from window */
+                    op = dist - op;             /* distance back in window */
+                    if (op > whave) {
+                        if (state->sane) {
+                            strm->msg =
+                                (char *)"invalid distance too far back";
+                            state->mode = BAD;
+                            break;
+                        }
+#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR
+                        if (len <= op - whave) {
+                            do {
+                                PUP(out) = 0;
+                            } while (--len);
+                            continue;
+                        }
+                        len -= op - whave;
+                        do {
+                            PUP(out) = 0;
+                        } while (--op > whave);
+                        if (op == 0) {
+                            from = out - dist;
+                            do {
+                                PUP(out) = PUP(from);
+                            } while (--len);
+                            continue;
+                        }
+#endif
+                    }
+                    from = window - OFF;
+                    if (wnext == 0) {           /* very common case */
+                        from += wsize - op;
+                        if (op < len) {         /* some from window */
+                            len -= op;
+                            do {
+                                PUP(out) = PUP(from);
+                            } while (--op);
+                            from = out - dist;  /* rest from output */
+                        }
+                    }
+                    else if (wnext < op) {      /* wrap around window */
+                        from += wsize + wnext - op;
+                        op -= wnext;
+                        if (op < len) {         /* some from end of window */
+                            len -= op;
+                            do {
+                                PUP(out) = PUP(from);
+                            } while (--op);
+                            from = window - OFF;
+                            if (wnext < len) {  /* some from start of window */
+                                op = wnext;
+                                len -= op;
+                                do {
+                                    PUP(out) = PUP(from);
+                                } while (--op);
+                                from = out - dist;      /* rest from output */
+                            }
+                        }
+                    }
+                    else {                      /* contiguous in window */
+                        from += wnext - op;
+                        if (op < len) {         /* some from window */
+                            len -= op;
+                            do {
+                                PUP(out) = PUP(from);
+                            } while (--op);
+                            from = out - dist;  /* rest from output */
+                        }
+                    }
+                    while (len > 2) {
+                        PUP(out) = PUP(from);
+                        PUP(out) = PUP(from);
+                        PUP(out) = PUP(from);
+                        len -= 3;
+                    }
+                    if (len) {
+                        PUP(out) = PUP(from);
+                        if (len > 1)
+                            PUP(out) = PUP(from);
+                    }
+                }
+                else {
+                    from = out - dist;          /* copy direct from output */
+                    do {                        /* minimum length is three */
+                        PUP(out) = PUP(from);
+                        PUP(out) = PUP(from);
+                        PUP(out) = PUP(from);
+                        len -= 3;
+                    } while (len > 2);
+                    if (len) {
+                        PUP(out) = PUP(from);
+                        if (len > 1)
+                            PUP(out) = PUP(from);
+                    }
+                }
+            }
+            else if ((op & 64) == 0) {          /* 2nd level distance code */
+                here = dcode[here.val + (hold & ((1U << op) - 1))];
+                goto dodist;
+            }
+            else {
+                strm->msg = (char *)"invalid distance code";
+                state->mode = BAD;
+                break;
+            }
+        }
+        else if ((op & 64) == 0) {              /* 2nd level length code */
+            here = lcode[here.val + (hold & ((1U << op) - 1))];
+            goto dolen;
+        }
+        else if (op & 32) {                     /* end-of-block */
+            Tracevv((stderr, "inflate:         end of block\n"));
+            state->mode = TYPE;
+            break;
+        }
+        else {
+            strm->msg = (char *)"invalid literal/length code";
+            state->mode = BAD;
+            break;
+        }
+    } while (in < last && out < end);
+
+    /* return unused bytes (on entry, bits < 8, so in won't go too far back) */
+    len = bits >> 3;
+    in -= len;
+    bits -= len << 3;
+    hold &= (1U << bits) - 1;
+
+    /* update state and return */
+    strm->next_in = in + OFF;
+    strm->next_out = out + OFF;
+    strm->avail_in = (unsigned)(in < last ? 5 + (last - in) : 5 - (in - last));
+    strm->avail_out = (unsigned)(out < end ?
+                                 257 + (end - out) : 257 - (out - end));
+    state->hold = hold;
+    state->bits = bits;
+    return;
+}
+
+/*
+   inflate_fast() speedups that turned out slower (on a PowerPC G3 750CXe):
+   - Using bit fields for code structure
+   - Different op definition to avoid & for extra bits (do & for table bits)
+   - Three separate decoding do-loops for direct, window, and wnext == 0
+   - Special case for distance > 1 copies to do overlapped load and store copy
+   - Explicit branch predictions (based on measured branch probabilities)
+   - Deferring match copy and interspersed it with decoding subsequent codes
+   - Swapping literal/length else
+   - Swapping window/direct else
+   - Larger unrolled copy loops (three is about right)
+   - Moving len -= 3 statement into middle of loop
+ */
+
+#endif /* !ASMINF */
diff --git a/zlib/inffast.h b/zlib/inffast.h
new file mode 100644 (file)
index 0000000..e5c1aa4
--- /dev/null
@@ -0,0 +1,11 @@
+/* inffast.h -- header to use inffast.c
+ * Copyright (C) 1995-2003, 2010 Mark Adler
+ * For conditions of distribution and use, see copyright notice in zlib.h
+ */
+
+/* WARNING: this file should *not* be used by applications. It is
+   part of the implementation of the compression library and is
+   subject to change. Applications should only use zlib.h.
+ */
+
+void ZLIB_INTERNAL inflate_fast OF((z_streamp strm, unsigned start));
diff --git a/zlib/inffixed.h b/zlib/inffixed.h
new file mode 100644 (file)
index 0000000..d628327
--- /dev/null
@@ -0,0 +1,94 @@
+    /* inffixed.h -- table for decoding fixed codes
+     * Generated automatically by makefixed().
+     */
+
+    /* WARNING: this file should *not* be used by applications.
+       It is part of the implementation of this library and is
+       subject to change. Applications should only use zlib.h.
+     */
+
+    static const code lenfix[512] = {
+        {96,7,0},{0,8,80},{0,8,16},{20,8,115},{18,7,31},{0,8,112},{0,8,48},
+        {0,9,192},{16,7,10},{0,8,96},{0,8,32},{0,9,160},{0,8,0},{0,8,128},
+        {0,8,64},{0,9,224},{16,7,6},{0,8,88},{0,8,24},{0,9,144},{19,7,59},
+        {0,8,120},{0,8,56},{0,9,208},{17,7,17},{0,8,104},{0,8,40},{0,9,176},
+        {0,8,8},{0,8,136},{0,8,72},{0,9,240},{16,7,4},{0,8,84},{0,8,20},
+        {21,8,227},{19,7,43},{0,8,116},{0,8,52},{0,9,200},{17,7,13},{0,8,100},
+        {0,8,36},{0,9,168},{0,8,4},{0,8,132},{0,8,68},{0,9,232},{16,7,8},
+        {0,8,92},{0,8,28},{0,9,152},{20,7,83},{0,8,124},{0,8,60},{0,9,216},
+        {18,7,23},{0,8,108},{0,8,44},{0,9,184},{0,8,12},{0,8,140},{0,8,76},
+        {0,9,248},{16,7,3},{0,8,82},{0,8,18},{21,8,163},{19,7,35},{0,8,114},
+        {0,8,50},{0,9,196},{17,7,11},{0,8,98},{0,8,34},{0,9,164},{0,8,2},
+        {0,8,130},{0,8,66},{0,9,228},{16,7,7},{0,8,90},{0,8,26},{0,9,148},
+        {20,7,67},{0,8,122},{0,8,58},{0,9,212},{18,7,19},{0,8,106},{0,8,42},
+        {0,9,180},{0,8,10},{0,8,138},{0,8,74},{0,9,244},{16,7,5},{0,8,86},
+        {0,8,22},{64,8,0},{19,7,51},{0,8,118},{0,8,54},{0,9,204},{17,7,15},
+        {0,8,102},{0,8,38},{0,9,172},{0,8,6},{0,8,134},{0,8,70},{0,9,236},
+        {16,7,9},{0,8,94},{0,8,30},{0,9,156},{20,7,99},{0,8,126},{0,8,62},
+        {0,9,220},{18,7,27},{0,8,110},{0,8,46},{0,9,188},{0,8,14},{0,8,142},
+        {0,8,78},{0,9,252},{96,7,0},{0,8,81},{0,8,17},{21,8,131},{18,7,31},
+        {0,8,113},{0,8,49},{0,9,194},{16,7,10},{0,8,97},{0,8,33},{0,9,162},
+        {0,8,1},{0,8,129},{0,8,65},{0,9,226},{16,7,6},{0,8,89},{0,8,25},
+        {0,9,146},{19,7,59},{0,8,121},{0,8,57},{0,9,210},{17,7,17},{0,8,105},
+        {0,8,41},{0,9,178},{0,8,9},{0,8,137},{0,8,73},{0,9,242},{16,7,4},
+        {0,8,85},{0,8,21},{16,8,258},{19,7,43},{0,8,117},{0,8,53},{0,9,202},
+        {17,7,13},{0,8,101},{0,8,37},{0,9,170},{0,8,5},{0,8,133},{0,8,69},
+        {0,9,234},{16,7,8},{0,8,93},{0,8,29},{0,9,154},{20,7,83},{0,8,125},
+        {0,8,61},{0,9,218},{18,7,23},{0,8,109},{0,8,45},{0,9,186},{0,8,13},
+        {0,8,141},{0,8,77},{0,9,250},{16,7,3},{0,8,83},{0,8,19},{21,8,195},
+        {19,7,35},{0,8,115},{0,8,51},{0,9,198},{17,7,11},{0,8,99},{0,8,35},
+        {0,9,166},{0,8,3},{0,8,131},{0,8,67},{0,9,230},{16,7,7},{0,8,91},
+        {0,8,27},{0,9,150},{20,7,67},{0,8,123},{0,8,59},{0,9,214},{18,7,19},
+        {0,8,107},{0,8,43},{0,9,182},{0,8,11},{0,8,139},{0,8,75},{0,9,246},
+        {16,7,5},{0,8,87},{0,8,23},{64,8,0},{19,7,51},{0,8,119},{0,8,55},
+        {0,9,206},{17,7,15},{0,8,103},{0,8,39},{0,9,174},{0,8,7},{0,8,135},
+        {0,8,71},{0,9,238},{16,7,9},{0,8,95},{0,8,31},{0,9,158},{20,7,99},
+        {0,8,127},{0,8,63},{0,9,222},{18,7,27},{0,8,111},{0,8,47},{0,9,190},
+        {0,8,15},{0,8,143},{0,8,79},{0,9,254},{96,7,0},{0,8,80},{0,8,16},
+        {20,8,115},{18,7,31},{0,8,112},{0,8,48},{0,9,193},{16,7,10},{0,8,96},
+        {0,8,32},{0,9,161},{0,8,0},{0,8,128},{0,8,64},{0,9,225},{16,7,6},
+        {0,8,88},{0,8,24},{0,9,145},{19,7,59},{0,8,120},{0,8,56},{0,9,209},
+        {17,7,17},{0,8,104},{0,8,40},{0,9,177},{0,8,8},{0,8,136},{0,8,72},
+        {0,9,241},{16,7,4},{0,8,84},{0,8,20},{21,8,227},{19,7,43},{0,8,116},
+        {0,8,52},{0,9,201},{17,7,13},{0,8,100},{0,8,36},{0,9,169},{0,8,4},
+        {0,8,132},{0,8,68},{0,9,233},{16,7,8},{0,8,92},{0,8,28},{0,9,153},
+        {20,7,83},{0,8,124},{0,8,60},{0,9,217},{18,7,23},{0,8,108},{0,8,44},
+        {0,9,185},{0,8,12},{0,8,140},{0,8,76},{0,9,249},{16,7,3},{0,8,82},
+        {0,8,18},{21,8,163},{19,7,35},{0,8,114},{0,8,50},{0,9,197},{17,7,11},
+        {0,8,98},{0,8,34},{0,9,165},{0,8,2},{0,8,130},{0,8,66},{0,9,229},
+        {16,7,7},{0,8,90},{0,8,26},{0,9,149},{20,7,67},{0,8,122},{0,8,58},
+        {0,9,213},{18,7,19},{0,8,106},{0,8,42},{0,9,181},{0,8,10},{0,8,138},
+        {0,8,74},{0,9,245},{16,7,5},{0,8,86},{0,8,22},{64,8,0},{19,7,51},
+        {0,8,118},{0,8,54},{0,9,205},{17,7,15},{0,8,102},{0,8,38},{0,9,173},
+        {0,8,6},{0,8,134},{0,8,70},{0,9,237},{16,7,9},{0,8,94},{0,8,30},
+        {0,9,157},{20,7,99},{0,8,126},{0,8,62},{0,9,221},{18,7,27},{0,8,110},
+        {0,8,46},{0,9,189},{0,8,14},{0,8,142},{0,8,78},{0,9,253},{96,7,0},
+        {0,8,81},{0,8,17},{21,8,131},{18,7,31},{0,8,113},{0,8,49},{0,9,195},
+        {16,7,10},{0,8,97},{0,8,33},{0,9,163},{0,8,1},{0,8,129},{0,8,65},
+        {0,9,227},{16,7,6},{0,8,89},{0,8,25},{0,9,147},{19,7,59},{0,8,121},
+        {0,8,57},{0,9,211},{17,7,17},{0,8,105},{0,8,41},{0,9,179},{0,8,9},
+        {0,8,137},{0,8,73},{0,9,243},{16,7,4},{0,8,85},{0,8,21},{16,8,258},
+        {19,7,43},{0,8,117},{0,8,53},{0,9,203},{17,7,13},{0,8,101},{0,8,37},
+        {0,9,171},{0,8,5},{0,8,133},{0,8,69},{0,9,235},{16,7,8},{0,8,93},
+        {0,8,29},{0,9,155},{20,7,83},{0,8,125},{0,8,61},{0,9,219},{18,7,23},
+        {0,8,109},{0,8,45},{0,9,187},{0,8,13},{0,8,141},{0,8,77},{0,9,251},
+        {16,7,3},{0,8,83},{0,8,19},{21,8,195},{19,7,35},{0,8,115},{0,8,51},
+        {0,9,199},{17,7,11},{0,8,99},{0,8,35},{0,9,167},{0,8,3},{0,8,131},
+        {0,8,67},{0,9,231},{16,7,7},{0,8,91},{0,8,27},{0,9,151},{20,7,67},
+        {0,8,123},{0,8,59},{0,9,215},{18,7,19},{0,8,107},{0,8,43},{0,9,183},
+        {0,8,11},{0,8,139},{0,8,75},{0,9,247},{16,7,5},{0,8,87},{0,8,23},
+        {64,8,0},{19,7,51},{0,8,119},{0,8,55},{0,9,207},{17,7,15},{0,8,103},
+        {0,8,39},{0,9,175},{0,8,7},{0,8,135},{0,8,71},{0,9,239},{16,7,9},
+        {0,8,95},{0,8,31},{0,9,159},{20,7,99},{0,8,127},{0,8,63},{0,9,223},
+        {18,7,27},{0,8,111},{0,8,47},{0,9,191},{0,8,15},{0,8,143},{0,8,79},
+        {0,9,255}
+    };
+
+    static const code distfix[32] = {
+        {16,5,1},{23,5,257},{19,5,17},{27,5,4097},{17,5,5},{25,5,1025},
+        {21,5,65},{29,5,16385},{16,5,3},{24,5,513},{20,5,33},{28,5,8193},
+        {18,5,9},{26,5,2049},{22,5,129},{64,5,0},{16,5,2},{23,5,385},
+        {19,5,25},{27,5,6145},{17,5,7},{25,5,1537},{21,5,97},{29,5,24577},
+        {16,5,4},{24,5,769},{20,5,49},{28,5,12289},{18,5,13},{26,5,3073},
+        {22,5,193},{64,5,0}
+    };
diff --git a/zlib/inflate.c b/zlib/inflate.c
new file mode 100644 (file)
index 0000000..091b9a2
--- /dev/null
@@ -0,0 +1,1531 @@
+/* inflate.c -- zlib decompression
+ * Copyright (C) 1995-2012 Mark Adler
+ * For conditions of distribution and use, see copyright notice in zlib.h
+ */
+
+/*
+ * Change history:
+ *
+ * 1.2.beta0    24 Nov 2002
+ * - First version -- complete rewrite of inflate to simplify code, avoid
+ *   creation of window when not needed, minimize use of window when it is
+ *   needed, make inffast.c even faster, implement gzip decoding, and to
+ *   improve code readability and style over the previous zlib inflate code
+ *
+ * 1.2.beta1    25 Nov 2002
+ * - Use pointers for available input and output checking in inffast.c
+ * - Remove input and output counters in inffast.c
+ * - Change inffast.c entry and loop from avail_in >= 7 to >= 6
+ * - Remove unnecessary second byte pull from length extra in inffast.c
+ * - Unroll direct copy to three copies per loop in inffast.c
+ *
+ * 1.2.beta2    4 Dec 2002
+ * - Change external routine names to reduce potential conflicts
+ * - Correct filename to inffixed.h for fixed tables in inflate.c
+ * - Make hbuf[] unsigned char to match parameter type in inflate.c
+ * - Change strm->next_out[-state->offset] to *(strm->next_out - state->offset)
+ *   to avoid negation problem on Alphas (64 bit) in inflate.c
+ *
+ * 1.2.beta3    22 Dec 2002
+ * - Add comments on state->bits assertion in inffast.c
+ * - Add comments on op field in inftrees.h
+ * - Fix bug in reuse of allocated window after inflateReset()
+ * - Remove bit fields--back to byte structure for speed
+ * - Remove distance extra == 0 check in inflate_fast()--only helps for lengths
+ * - Change post-increments to pre-increments in inflate_fast(), PPC biased?
+ * - Add compile time option, POSTINC, to use post-increments instead (Intel?)
+ * - Make MATCH copy in inflate() much faster for when inflate_fast() not used
+ * - Use local copies of stream next and avail values, as well as local bit
+ *   buffer and bit count in inflate()--for speed when inflate_fast() not used
+ *
+ * 1.2.beta4    1 Jan 2003
+ * - Split ptr - 257 statements in inflate_table() to avoid compiler warnings
+ * - Move a comment on output buffer sizes from inffast.c to inflate.c
+ * - Add comments in inffast.c to introduce the inflate_fast() routine
+ * - Rearrange window copies in inflate_fast() for speed and simplification
+ * - Unroll last copy for window match in inflate_fast()
+ * - Use local copies of window variables in inflate_fast() for speed
+ * - Pull out common wnext == 0 case for speed in inflate_fast()
+ * - Make op and len in inflate_fast() unsigned for consistency
+ * - Add FAR to lcode and dcode declarations in inflate_fast()
+ * - Simplified bad distance check in inflate_fast()
+ * - Added inflateBackInit(), inflateBack(), and inflateBackEnd() in new
+ *   source file infback.c to provide a call-back interface to inflate for
+ *   programs like gzip and unzip -- uses window as output buffer to avoid
+ *   window copying
+ *
+ * 1.2.beta5    1 Jan 2003
+ * - Improved inflateBack() interface to allow the caller to provide initial
+ *   input in strm.
+ * - Fixed stored blocks bug in inflateBack()
+ *
+ * 1.2.beta6    4 Jan 2003
+ * - Added comments in inffast.c on effectiveness of POSTINC
+ * - Typecasting all around to reduce compiler warnings
+ * - Changed loops from while (1) or do {} while (1) to for (;;), again to
+ *   make compilers happy
+ * - Changed type of window in inflateBackInit() to unsigned char *
+ *
+ * 1.2.beta7    27 Jan 2003
+ * - Changed many types to unsigned or unsigned short to avoid warnings
+ * - Added inflateCopy() function
+ *
+ * 1.2.0        9 Mar 2003
+ * - Changed inflateBack() interface to provide separate opaque descriptors
+ *   for the in() and out() functions
+ * - Changed inflateBack() argument and in_func typedef to swap the length
+ *   and buffer address return values for the input function
+ * - Check next_in and next_out for Z_NULL on entry to inflate()
+ *
+ * The history for versions after 1.2.0 are in ChangeLog in zlib distribution.
+ */
+
+//-----------------------------------------------------------------------------
+// This version of zlib is modified for use within the Proxmark3 project. 
+// Files from the original distribution which are not required for this
+// purpose are not included. All modifications can easily be found
+// by searching for #ifdef ZLIB_PM3_TUNED and #ifndef ZLIB_PM3_TUNED.
+//-----------------------------------------------------------------------------
+
+
+#include "zutil.h"
+#include "inftrees.h"
+#include "inflate.h"
+#include "inffast.h"
+
+#ifdef MAKEFIXED
+#  ifndef BUILDFIXED
+#    define BUILDFIXED
+#  endif
+#endif
+
+/* function prototypes */
+#ifdef ZLIB_PM3_TUNED
+extern void Dbprintf(const char *fmt, ...);
+#else
+local void fixedtables OF((struct inflate_state FAR *state));
+#endif
+local int updatewindow OF((z_streamp strm, const unsigned char FAR *end,
+                           unsigned copy));
+#ifdef BUILDFIXED
+   void makefixed OF((void));
+#endif
+local unsigned syncsearch OF((unsigned FAR *have, const unsigned char FAR *buf,
+                              unsigned len));
+
+int ZEXPORT inflateResetKeep(strm)
+z_streamp strm;
+{
+    struct inflate_state FAR *state;
+
+    if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
+    state = (struct inflate_state FAR *)strm->state;
+    strm->total_in = strm->total_out = state->total = 0;
+    strm->msg = Z_NULL;
+    if (state->wrap)        /* to support ill-conceived Java test suite */
+        strm->adler = state->wrap & 1;
+    state->mode = HEAD;
+    state->last = 0;
+    state->havedict = 0;
+    state->dmax = 32768U;
+    state->head = Z_NULL;
+    state->hold = 0;
+    state->bits = 0;
+    state->lencode = state->distcode = state->next = state->codes;
+    state->sane = 1;
+    state->back = -1;
+    Tracev((stderr, "inflate: reset\n"));
+    return Z_OK;
+}
+
+int ZEXPORT inflateReset(strm)
+z_streamp strm;
+{
+    struct inflate_state FAR *state;
+
+    if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
+    state = (struct inflate_state FAR *)strm->state;
+    state->wsize = 0;
+    state->whave = 0;
+    state->wnext = 0;
+    return inflateResetKeep(strm);
+}
+
+int ZEXPORT inflateReset2(strm, windowBits)
+z_streamp strm;
+int windowBits;
+{
+    int wrap;
+    struct inflate_state FAR *state;
+
+    /* get the state */
+    if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
+    state = (struct inflate_state FAR *)strm->state;
+
+    /* extract wrap request from windowBits parameter */
+    if (windowBits < 0) {
+        wrap = 0;
+        windowBits = -windowBits;
+    }
+    else {
+        wrap = (windowBits >> 4) + 1;
+#ifdef GUNZIP
+        if (windowBits < 48)
+            windowBits &= 15;
+#endif
+    }
+
+    /* set number of window bits, free window if different */
+    if (windowBits && (windowBits < 8 || windowBits > 15))
+        return Z_STREAM_ERROR;
+    if (state->window != Z_NULL && state->wbits != (unsigned)windowBits) {
+        ZFREE(strm, state->window);
+        state->window = Z_NULL;
+    }
+
+    /* update state and reset the rest of it */
+    state->wrap = wrap;
+    state->wbits = (unsigned)windowBits;
+    return inflateReset(strm);
+}
+
+int ZEXPORT inflateInit2_(strm, windowBits, version, stream_size)
+z_streamp strm;
+int windowBits;
+const char *version;
+int stream_size;
+{
+    int ret;
+    struct inflate_state FAR *state;
+
+    if (version == Z_NULL || version[0] != ZLIB_VERSION[0] ||
+        stream_size != (int)(sizeof(z_stream)))
+        return Z_VERSION_ERROR;
+    if (strm == Z_NULL) return Z_STREAM_ERROR;
+    strm->msg = Z_NULL;                 /* in case we return an error */
+    if (strm->zalloc == (alloc_func)0) {
+#ifdef Z_SOLO
+        return Z_STREAM_ERROR;
+#else
+        strm->zalloc = zcalloc;
+        strm->opaque = (voidpf)0;
+#endif
+    }
+    if (strm->zfree == (free_func)0)
+#ifdef Z_SOLO
+        return Z_STREAM_ERROR;
+#else
+        strm->zfree = zcfree;
+#endif
+    state = (struct inflate_state FAR *)
+            ZALLOC(strm, 1, sizeof(struct inflate_state));
+    if (state == Z_NULL) return Z_MEM_ERROR;
+    Tracev((stderr, "inflate: allocated\n"));
+    strm->state = (struct internal_state FAR *)state;
+    state->window = Z_NULL;
+    ret = inflateReset2(strm, windowBits);
+    if (ret != Z_OK) {
+        ZFREE(strm, state);
+        strm->state = Z_NULL;
+    }
+    return ret;
+}
+
+int ZEXPORT inflateInit_(strm, version, stream_size)
+z_streamp strm;
+const char *version;
+int stream_size;
+{
+    return inflateInit2_(strm, DEF_WBITS, version, stream_size);
+}
+
+int ZEXPORT inflatePrime(strm, bits, value)
+z_streamp strm;
+int bits;
+int value;
+{
+    struct inflate_state FAR *state;
+
+    if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
+    state = (struct inflate_state FAR *)strm->state;
+    if (bits < 0) {
+        state->hold = 0;
+        state->bits = 0;
+        return Z_OK;
+    }
+    if (bits > 16 || state->bits + bits > 32) return Z_STREAM_ERROR;
+    value &= (1L << bits) - 1;
+    state->hold += value << state->bits;
+    state->bits += bits;
+    return Z_OK;
+}
+
+/*
+   Return state with length and distance decoding tables and index sizes set to
+   fixed code decoding.  Normally this returns fixed tables from inffixed.h.
+   If BUILDFIXED is defined, then instead this routine builds the tables the
+   first time it's called, and returns those tables the first time and
+   thereafter.  This reduces the size of the code by about 2K bytes, in
+   exchange for a little execution time.  However, BUILDFIXED should not be
+   used for threaded applications, since the rewriting of the tables and virgin
+   may not be thread-safe.
+ */
+#ifndef ZLIB_PM3_TUNED
+local void fixedtables(state)
+struct inflate_state FAR *state;
+{
+#ifdef BUILDFIXED
+    static int virgin = 1;
+    static code *lenfix, *distfix;
+    static code fixed[544];
+
+    /* build fixed huffman tables if first call (may not be thread safe) */
+    if (virgin) {
+        unsigned sym, bits;
+        static code *next;
+
+        /* literal/length table */
+        sym = 0;
+        while (sym < 144) state->lens[sym++] = 8;
+        while (sym < 256) state->lens[sym++] = 9;
+        while (sym < 280) state->lens[sym++] = 7;
+        while (sym < 288) state->lens[sym++] = 8;
+        next = fixed;
+        lenfix = next;
+        bits = 9;
+        inflate_table(LENS, state->lens, 288, &(next), &(bits), state->work);
+
+        /* distance table */
+        sym = 0;
+        while (sym < 32) state->lens[sym++] = 5;
+        distfix = next;
+        bits = 5;
+        inflate_table(DISTS, state->lens, 32, &(next), &(bits), state->work);
+
+        /* do this just once */
+        virgin = 0;
+    }
+#else /* !BUILDFIXED */
+#   include "inffixed.h"
+#endif /* BUILDFIXED */
+    state->lencode = lenfix;
+    state->lenbits = 9;
+    state->distcode = distfix;
+    state->distbits = 5;
+}
+
+#ifdef MAKEFIXED
+#include <stdio.h>
+
+/*
+   Write out the inffixed.h that is #include'd above.  Defining MAKEFIXED also
+   defines BUILDFIXED, so the tables are built on the fly.  makefixed() writes
+   those tables to stdout, which would be piped to inffixed.h.  A small program
+   can simply call makefixed to do this:
+
+    void makefixed(void);
+
+    int main(void)
+    {
+        makefixed();
+        return 0;
+    }
+
+   Then that can be linked with zlib built with MAKEFIXED defined and run:
+
+    a.out > inffixed.h
+ */
+void makefixed()
+{
+    unsigned low, size;
+    struct inflate_state state;
+
+    fixedtables(&state);
+    puts("    /* inffixed.h -- table for decoding fixed codes");
+    puts("     * Generated automatically by makefixed().");
+    puts("     */");
+    puts("");
+    puts("    /* WARNING: this file should *not* be used by applications.");
+    puts("       It is part of the implementation of this library and is");
+    puts("       subject to change. Applications should only use zlib.h.");
+    puts("     */");
+    puts("");
+    size = 1U << 9;
+    printf("    static const code lenfix[%u] = {", size);
+    low = 0;
+    for (;;) {
+        if ((low % 7) == 0) printf("\n        ");
+        printf("{%u,%u,%d}", (low & 127) == 99 ? 64 : state.lencode[low].op,
+               state.lencode[low].bits, state.lencode[low].val);
+        if (++low == size) break;
+        putchar(',');
+    }
+    puts("\n    };");
+    size = 1U << 5;
+    printf("\n    static const code distfix[%u] = {", size);
+    low = 0;
+    for (;;) {
+        if ((low % 6) == 0) printf("\n        ");
+        printf("{%u,%u,%d}", state.distcode[low].op, state.distcode[low].bits,
+               state.distcode[low].val);
+        if (++low == size) break;
+        putchar(',');
+    }
+    puts("\n    };");
+}
+#endif /* MAKEFIXED */
+#endif /* ZLIB_PM3_TUNED */
+/*
+   Update the window with the last wsize (normally 32K) bytes written before
+   returning.  If window does not exist yet, create it.  This is only called
+   when a window is already in use, or when output has been written during this
+   inflate call, but the end of the deflate stream has not been reached yet.
+   It is also called to create a window for dictionary data when a dictionary
+   is loaded.
+
+   Providing output buffers larger than 32K to inflate() should provide a speed
+   advantage, since only the last 32K of output is copied to the sliding window
+   upon return from inflate(), and since all distances after the first 32K of
+   output will fall in the output data, making match copies simpler and faster.
+   The advantage may be dependent on the size of the processor's data caches.
+ */
+local int updatewindow(strm, end, copy)
+z_streamp strm;
+const Bytef *end;
+unsigned copy;
+{
+    struct inflate_state FAR *state;
+    unsigned dist;
+
+    state = (struct inflate_state FAR *)strm->state;
+
+    /* if it hasn't been done already, allocate space for the window */
+    if (state->window == Z_NULL) {
+        state->window = (unsigned char FAR *)
+                        ZALLOC(strm, 1U << state->wbits,
+                               sizeof(unsigned char));
+        if (state->window == Z_NULL) return 1;
+    }
+
+    /* if window not in use yet, initialize */
+    if (state->wsize == 0) {
+        state->wsize = 1U << state->wbits;
+        state->wnext = 0;
+        state->whave = 0;
+    }
+
+    /* copy state->wsize or less output bytes into the circular window */
+    if (copy >= state->wsize) {
+        zmemcpy(state->window, end - state->wsize, state->wsize);
+        state->wnext = 0;
+        state->whave = state->wsize;
+    }
+    else {
+        dist = state->wsize - state->wnext;
+        if (dist > copy) dist = copy;
+        zmemcpy(state->window + state->wnext, end - copy, dist);
+        copy -= dist;
+        if (copy) {
+            zmemcpy(state->window, end - copy, copy);
+            state->wnext = copy;
+            state->whave = state->wsize;
+        }
+        else {
+            state->wnext += dist;
+            if (state->wnext == state->wsize) state->wnext = 0;
+            if (state->whave < state->wsize) state->whave += dist;
+        }
+    }
+    return 0;
+}
+
+/* Macros for inflate(): */
+
+/* check function to use adler32() for zlib or crc32() for gzip */
+#ifdef GUNZIP
+#  define UPDATE(check, buf, len) \
+    (state->flags ? crc32(check, buf, len) : adler32(check, buf, len))
+#else
+#  define UPDATE(check, buf, len) adler32(check, buf, len)
+#endif
+
+/* check macros for header crc */
+#ifdef GUNZIP
+#  define CRC2(check, word) \
+    do { \
+        hbuf[0] = (unsigned char)(word); \
+        hbuf[1] = (unsigned char)((word) >> 8); \
+        check = crc32(check, hbuf, 2); \
+    } while (0)
+
+#  define CRC4(check, word) \
+    do { \
+        hbuf[0] = (unsigned char)(word); \
+        hbuf[1] = (unsigned char)((word) >> 8); \
+        hbuf[2] = (unsigned char)((word) >> 16); \
+        hbuf[3] = (unsigned char)((word) >> 24); \
+        check = crc32(check, hbuf, 4); \
+    } while (0)
+#endif
+
+/* Load registers with state in inflate() for speed */
+#define LOAD() \
+    do { \
+        put = strm->next_out; \
+        left = strm->avail_out; \
+        next = strm->next_in; \
+        have = strm->avail_in; \
+        hold = state->hold; \
+        bits = state->bits; \
+    } while (0)
+
+/* Restore state from registers in inflate() */
+#define RESTORE() \
+    do { \
+        strm->next_out = put; \
+        strm->avail_out = left; \
+        strm->next_in = next; \
+        strm->avail_in = have; \
+        state->hold = hold; \
+        state->bits = bits; \
+    } while (0)
+
+/* Clear the input bit accumulator */
+#define INITBITS() \
+    do { \
+        hold = 0; \
+        bits = 0; \
+    } while (0)
+
+/* Get a byte of input into the bit accumulator, or return from inflate()
+   if there is no input available. */
+#define PULLBYTE() \
+    do { \
+        if (have == 0) goto inf_leave; \
+        have--; \
+        hold += (unsigned long)(*next++) << bits; \
+        bits += 8; \
+    } while (0)
+
+/* Assure that there are at least n bits in the bit accumulator.  If there is
+   not enough available input to do that, then return from inflate(). */
+#define NEEDBITS(n) \
+    do { \
+        while (bits < (unsigned)(n)) \
+            PULLBYTE(); \
+    } while (0)
+
+/* Return the low n bits of the bit accumulator (n < 16) */
+#define BITS(n) \
+    ((unsigned)hold & ((1U << (n)) - 1))
+
+/* Remove n bits from the bit accumulator */
+#define DROPBITS(n) \
+    do { \
+        hold >>= (n); \
+        bits -= (unsigned)(n); \
+    } while (0)
+
+/* Remove zero to seven bits as needed to go to a byte boundary */
+#define BYTEBITS() \
+    do { \
+        hold >>= bits & 7; \
+        bits -= bits & 7; \
+    } while (0)
+
+/*
+   inflate() uses a state machine to process as much input data and generate as
+   much output data as possible before returning.  The state machine is
+   structured roughly as follows:
+
+    for (;;) switch (state) {
+    ...
+    case STATEn:
+        if (not enough input data or output space to make progress)
+            return;
+        ... make progress ...
+        state = STATEm;
+        break;
+    ...
+    }
+
+   so when inflate() is called again, the same case is attempted again, and
+   if the appropriate resources are provided, the machine proceeds to the
+   next state.  The NEEDBITS() macro is usually the way the state evaluates
+   whether it can proceed or should return.  NEEDBITS() does the return if
+   the requested bits are not available.  The typical use of the BITS macros
+   is:
+
+        NEEDBITS(n);
+        ... do something with BITS(n) ...
+        DROPBITS(n);
+
+   where NEEDBITS(n) either returns from inflate() if there isn't enough
+   input left to load n bits into the accumulator, or it continues.  BITS(n)
+   gives the low n bits in the accumulator.  When done, DROPBITS(n) drops
+   the low n bits off the accumulator.  INITBITS() clears the accumulator
+   and sets the number of available bits to zero.  BYTEBITS() discards just
+   enough bits to put the accumulator on a byte boundary.  After BYTEBITS()
+   and a NEEDBITS(8), then BITS(8) would return the next byte in the stream.
+
+   NEEDBITS(n) uses PULLBYTE() to get an available byte of input, or to return
+   if there is no input available.  The decoding of variable length codes uses
+   PULLBYTE() directly in order to pull just enough bytes to decode the next
+   code, and no more.
+
+   Some states loop until they get enough input, making sure that enough
+   state information is maintained to continue the loop where it left off
+   if NEEDBITS() returns in the loop.  For example, want, need, and keep
+   would all have to actually be part of the saved state in case NEEDBITS()
+   returns:
+
+    case STATEw:
+        while (want < need) {
+            NEEDBITS(n);
+            keep[want++] = BITS(n);
+            DROPBITS(n);
+        }
+        state = STATEx;
+    case STATEx:
+
+   As shown above, if the next state is also the next case, then the break
+   is omitted.
+
+   A state may also return if there is not enough output space available to
+   complete that state.  Those states are copying stored data, writing a
+   literal byte, and copying a matching string.
+
+   When returning, a "goto inf_leave" is used to update the total counters,
+   update the check value, and determine whether any progress has been made
+   during that inflate() call in order to return the proper return code.
+   Progress is defined as a change in either strm->avail_in or strm->avail_out.
+   When there is a window, goto inf_leave will update the window with the last
+   output written.  If a goto inf_leave occurs in the middle of decompression
+   and there is no window currently, goto inf_leave will create one and copy
+   output to the window for the next call of inflate().
+
+   In this implementation, the flush parameter of inflate() only affects the
+   return code (per zlib.h).  inflate() always writes as much as possible to
+   strm->next_out, given the space available and the provided input--the effect
+   documented in zlib.h of Z_SYNC_FLUSH.  Furthermore, inflate() always defers
+   the allocation of and copying into a sliding window until necessary, which
+   provides the effect documented in zlib.h for Z_FINISH when the entire input
+   stream available.  So the only thing the flush parameter actually does is:
+   when flush is set to Z_FINISH, inflate() cannot return Z_OK.  Instead it
+   will return Z_BUF_ERROR if it has not reached the end of the stream.
+ */
+
+int ZEXPORT inflate(strm, flush)
+z_streamp strm;
+int flush;
+{
+    struct inflate_state FAR *state;
+    z_const unsigned char FAR *next;    /* next input */
+    unsigned char FAR *put;     /* next output */
+    unsigned have, left;        /* available input and output */
+    unsigned long hold;         /* bit buffer */
+    unsigned bits;              /* bits in bit buffer */
+    unsigned in, out;           /* save starting available input and output */
+    unsigned copy;              /* number of stored or match bytes to copy */
+    unsigned char FAR *from;    /* where to copy match bytes from */
+    code here;                  /* current decoding table entry */
+    code last;                  /* parent table entry */
+    unsigned len;               /* length to copy for repeats, bits to drop */
+    int ret;                    /* return code */
+#ifdef GUNZIP
+    unsigned char hbuf[4];      /* buffer for gzip header crc calculation */
+#endif
+    static const unsigned short order[19] = /* permutation of code lengths */
+        {16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15};
+
+    if (strm == Z_NULL || strm->state == Z_NULL || strm->next_out == Z_NULL ||
+        (strm->next_in == Z_NULL && strm->avail_in != 0))
+        return Z_STREAM_ERROR;
+
+    state = (struct inflate_state FAR *)strm->state;
+    if (state->mode == TYPE) state->mode = TYPEDO;      /* skip check */
+    LOAD();
+    in = have;
+    out = left;
+    ret = Z_OK;
+    for (;;)
+        switch (state->mode) {
+        case HEAD:
+            if (state->wrap == 0) {
+                state->mode = TYPEDO;
+                break;
+            }
+            NEEDBITS(16);
+#ifdef GUNZIP
+            if ((state->wrap & 2) && hold == 0x8b1f) {  /* gzip header */
+                state->check = crc32(0L, Z_NULL, 0);
+                CRC2(state->check, hold);
+                INITBITS();
+                state->mode = FLAGS;
+                break;
+            }
+            state->flags = 0;           /* expect zlib header */
+            if (state->head != Z_NULL)
+                state->head->done = -1;
+            if (!(state->wrap & 1) ||   /* check if zlib header allowed */
+#else
+            if (
+#endif
+                ((BITS(8) << 8) + (hold >> 8)) % 31) {
+                strm->msg = (char *)"incorrect header check";
+                state->mode = BAD;
+                break;
+            }
+            if (BITS(4) != Z_DEFLATED) {
+                strm->msg = (char *)"unknown compression method";
+                state->mode = BAD;
+                break;
+            }
+            DROPBITS(4);
+            len = BITS(4) + 8;
+            if (state->wbits == 0)
+                state->wbits = len;
+            else if (len > state->wbits) {
+                strm->msg = (char *)"invalid window size";
+                state->mode = BAD;
+                break;
+            }
+            state->dmax = 1U << len;
+            Tracev((stderr, "inflate:   zlib header ok\n"));
+            strm->adler = state->check = adler32(0L, Z_NULL, 0);
+            state->mode = hold & 0x200 ? DICTID : TYPE;
+            INITBITS();
+            break;
+#ifdef GUNZIP
+        case FLAGS:
+            NEEDBITS(16);
+            state->flags = (int)(hold);
+            if ((state->flags & 0xff) != Z_DEFLATED) {
+                strm->msg = (char *)"unknown compression method";
+                state->mode = BAD;
+                break;
+            }
+            if (state->flags & 0xe000) {
+                strm->msg = (char *)"unknown header flags set";
+                state->mode = BAD;
+                break;
+            }
+            if (state->head != Z_NULL)
+                state->head->text = (int)((hold >> 8) & 1);
+            if (state->flags & 0x0200) CRC2(state->check, hold);
+            INITBITS();
+            state->mode = TIME;
+        case TIME:
+            NEEDBITS(32);
+            if (state->head != Z_NULL)
+                state->head->time = hold;
+            if (state->flags & 0x0200) CRC4(state->check, hold);
+            INITBITS();
+            state->mode = OS;
+        case OS:
+            NEEDBITS(16);
+            if (state->head != Z_NULL) {
+                state->head->xflags = (int)(hold & 0xff);
+                state->head->os = (int)(hold >> 8);
+            }
+            if (state->flags & 0x0200) CRC2(state->check, hold);
+            INITBITS();
+            state->mode = EXLEN;
+        case EXLEN:
+            if (state->flags & 0x0400) {
+                NEEDBITS(16);
+                state->length = (unsigned)(hold);
+                if (state->head != Z_NULL)
+                    state->head->extra_len = (unsigned)hold;
+                if (state->flags & 0x0200) CRC2(state->check, hold);
+                INITBITS();
+            }
+            else if (state->head != Z_NULL)
+                state->head->extra = Z_NULL;
+            state->mode = EXTRA;
+        case EXTRA:
+            if (state->flags & 0x0400) {
+                copy = state->length;
+                if (copy > have) copy = have;
+                if (copy) {
+                    if (state->head != Z_NULL &&
+                        state->head->extra != Z_NULL) {
+                        len = state->head->extra_len - state->length;
+                        zmemcpy(state->head->extra + len, next,
+                                len + copy > state->head->extra_max ?
+                                state->head->extra_max - len : copy);
+                    }
+                    if (state->flags & 0x0200)
+                        state->check = crc32(state->check, next, copy);
+                    have -= copy;
+                    next += copy;
+                    state->length -= copy;
+                }
+                if (state->length) goto inf_leave;
+            }
+            state->length = 0;
+            state->mode = NAME;
+        case NAME:
+            if (state->flags & 0x0800) {
+                if (have == 0) goto inf_leave;
+                copy = 0;
+                do {
+                    len = (unsigned)(next[copy++]);
+                    if (state->head != Z_NULL &&
+                            state->head->name != Z_NULL &&
+                            state->length < state->head->name_max)
+                        state->head->name[state->length++] = len;
+                } while (len && copy < have);
+                if (state->flags & 0x0200)
+                    state->check = crc32(state->check, next, copy);
+                have -= copy;
+                next += copy;
+                if (len) goto inf_leave;
+            }
+            else if (state->head != Z_NULL)
+                state->head->name = Z_NULL;
+            state->length = 0;
+            state->mode = COMMENT;
+        case COMMENT:
+            if (state->flags & 0x1000) {
+                if (have == 0) goto inf_leave;
+                copy = 0;
+                do {
+                    len = (unsigned)(next[copy++]);
+                    if (state->head != Z_NULL &&
+                            state->head->comment != Z_NULL &&
+                            state->length < state->head->comm_max)
+                        state->head->comment[state->length++] = len;
+                } while (len && copy < have);
+                if (state->flags & 0x0200)
+                    state->check = crc32(state->check, next, copy);
+                have -= copy;
+                next += copy;
+                if (len) goto inf_leave;
+            }
+            else if (state->head != Z_NULL)
+                state->head->comment = Z_NULL;
+            state->mode = HCRC;
+        case HCRC:
+            if (state->flags & 0x0200) {
+                NEEDBITS(16);
+                if (hold != (state->check & 0xffff)) {
+                    strm->msg = (char *)"header crc mismatch";
+                    state->mode = BAD;
+                    break;
+                }
+                INITBITS();
+            }
+            if (state->head != Z_NULL) {
+                state->head->hcrc = (int)((state->flags >> 9) & 1);
+                state->head->done = 1;
+            }
+            strm->adler = state->check = crc32(0L, Z_NULL, 0);
+            state->mode = TYPE;
+            break;
+#endif
+        case DICTID:
+            NEEDBITS(32);
+            strm->adler = state->check = ZSWAP32(hold);
+            INITBITS();
+            state->mode = DICT;
+        case DICT:
+            if (state->havedict == 0) {
+                RESTORE();
+                return Z_NEED_DICT;
+            }
+            strm->adler = state->check = adler32(0L, Z_NULL, 0);
+            state->mode = TYPE;
+        case TYPE:
+            if (flush == Z_BLOCK || flush == Z_TREES) goto inf_leave;
+        case TYPEDO:
+            if (state->last) {
+                BYTEBITS();
+                state->mode = CHECK;
+                break;
+            }
+            NEEDBITS(3);
+            state->last = BITS(1);
+            DROPBITS(1);
+            switch (BITS(2)) {
+            case 0:                             /* stored block */
+                Tracev((stderr, "inflate:     stored block%s\n",
+                        state->last ? " (last)" : ""));
+                state->mode = STORED;
+                break;
+            case 1:                             /* fixed block */
+#ifdef ZLIB_PM3_TUNED
+                strm->msg = (char *)"fixed block coding not supported";
+                               state->mode = BAD;
+#else                          
+                fixedtables(state);
+                Tracev((stderr, "inflate:     fixed codes block%s\n",
+                        state->last ? " (last)" : ""));
+                state->mode = LEN_;             /* decode codes */
+                if (flush == Z_TREES) {
+                    DROPBITS(2);
+                    goto inf_leave;
+                }
+#endif
+                break;
+            case 2:                             /* dynamic block */
+                Tracev((stderr, "inflate:     dynamic codes block%s\n",
+                        state->last ? " (last)" : ""));
+                state->mode = TABLE;
+                break;
+            case 3:
+                strm->msg = (char *)"invalid block type";
+                state->mode = BAD;
+            }
+            DROPBITS(2);
+            break;
+        case STORED:
+            BYTEBITS();                         /* go to byte boundary */
+            NEEDBITS(32);
+            if ((hold & 0xffff) != ((hold >> 16) ^ 0xffff)) {
+                strm->msg = (char *)"invalid stored block lengths";
+                state->mode = BAD;
+                break;
+            }
+            state->length = (unsigned)hold & 0xffff;
+            Tracev((stderr, "inflate:       stored length %u\n",
+                    state->length));
+            INITBITS();
+            state->mode = COPY_;
+            if (flush == Z_TREES) goto inf_leave;
+        case COPY_:
+            state->mode = COPY;
+        case COPY:
+            copy = state->length;
+            if (copy) {
+                if (copy > have) copy = have;
+                if (copy > left) copy = left;
+                if (copy == 0) goto inf_leave;
+                zmemcpy(put, next, copy);
+                have -= copy;
+                next += copy;
+                left -= copy;
+                put += copy;
+                state->length -= copy;
+                break;
+            }
+            Tracev((stderr, "inflate:       stored end\n"));
+            state->mode = TYPE;
+            break;
+        case TABLE:
+            NEEDBITS(14);
+            state->nlen = BITS(5) + 257;
+            DROPBITS(5);
+            state->ndist = BITS(5) + 1;
+            DROPBITS(5);
+            state->ncode = BITS(4) + 4;
+            DROPBITS(4);
+#ifndef PKZIP_BUG_WORKAROUND
+            if (state->nlen > 286 || state->ndist > 30) {
+                strm->msg = (char *)"too many length or distance symbols";
+                state->mode = BAD;
+                break;
+            }
+#endif
+            Tracev((stderr, "inflate:       table sizes ok\n"));
+            state->have = 0;
+            state->mode = LENLENS;
+        case LENLENS:
+            while (state->have < state->ncode) {
+                NEEDBITS(3);
+                state->lens[order[state->have++]] = (unsigned short)BITS(3);
+                DROPBITS(3);
+            }
+            while (state->have < 19)
+                state->lens[order[state->have++]] = 0;
+            state->next = state->codes;
+            state->lencode = (const code FAR *)(state->next);
+            state->lenbits = 7;
+            ret = inflate_table(CODES, state->lens, 19, &(state->next),
+                                &(state->lenbits), state->work);
+            if (ret) {
+                strm->msg = (char *)"invalid code lengths set";
+                state->mode = BAD;
+                break;
+            }
+            Tracev((stderr, "inflate:       code lengths ok\n"));
+            state->have = 0;
+            state->mode = CODELENS;
+        case CODELENS:
+            while (state->have < state->nlen + state->ndist) {
+                for (;;) {
+                    here = state->lencode[BITS(state->lenbits)];
+                    if ((unsigned)(here.bits) <= bits) break;
+                    PULLBYTE();
+                }
+                if (here.val < 16) {
+                    DROPBITS(here.bits);
+                    state->lens[state->have++] = here.val;
+                }
+                else {
+                    if (here.val == 16) {
+                        NEEDBITS(here.bits + 2);
+                        DROPBITS(here.bits);
+                        if (state->have == 0) {
+                            strm->msg = (char *)"invalid bit length repeat";
+                            state->mode = BAD;
+                            break;
+                        }
+                        len = state->lens[state->have - 1];
+                        copy = 3 + BITS(2);
+                        DROPBITS(2);
+                    }
+                    else if (here.val == 17) {
+                        NEEDBITS(here.bits + 3);
+                        DROPBITS(here.bits);
+                        len = 0;
+                        copy = 3 + BITS(3);
+                        DROPBITS(3);
+                    }
+                    else {
+                        NEEDBITS(here.bits + 7);
+                        DROPBITS(here.bits);
+                        len = 0;
+                        copy = 11 + BITS(7);
+                        DROPBITS(7);
+                    }
+                    if (state->have + copy > state->nlen + state->ndist) {
+                        strm->msg = (char *)"invalid bit length repeat";
+                        state->mode = BAD;
+                        break;
+                    }
+                    while (copy--)
+                        state->lens[state->have++] = (unsigned short)len;
+                }
+            }
+
+            /* handle error breaks in while */
+            if (state->mode == BAD) break;
+
+            /* check for end-of-block code (better have one) */
+            if (state->lens[256] == 0) {
+                strm->msg = (char *)"invalid code -- missing end-of-block";
+                state->mode = BAD;
+                break;
+            }
+
+            /* build code tables -- note: do not change the lenbits or distbits
+               values here (9 and 6) without reading the comments in inftrees.h
+               concerning the ENOUGH constants, which depend on those values */
+            state->next = state->codes;
+            state->lencode = (const code FAR *)(state->next);
+            state->lenbits = 9;
+            ret = inflate_table(LENS, state->lens, state->nlen, &(state->next),
+                                &(state->lenbits), state->work);
+            if (ret) {
+                strm->msg = (char *)"invalid literal/lengths set";
+                state->mode = BAD;
+                break;
+            }
+            state->distcode = (const code FAR *)(state->next);
+            state->distbits = 6;
+            ret = inflate_table(DISTS, state->lens + state->nlen, state->ndist,
+                            &(state->next), &(state->distbits), state->work);
+            if (ret) {
+                strm->msg = (char *)"invalid distances set";
+                state->mode = BAD;
+                break;
+            }
+            Tracev((stderr, "inflate:       codes ok\n"));
+            state->mode = LEN_;
+            if (flush == Z_TREES) goto inf_leave;
+        case LEN_:
+            state->mode = LEN;
+        case LEN:
+            if (have >= 6 && left >= 258) {
+                RESTORE();
+                inflate_fast(strm, out);
+                LOAD();
+                if (state->mode == TYPE)
+                    state->back = -1;
+                break;
+            }
+            state->back = 0;
+            for (;;) {
+                here = state->lencode[BITS(state->lenbits)];
+                if ((unsigned)(here.bits) <= bits) break;
+                PULLBYTE();
+            }
+            if (here.op && (here.op & 0xf0) == 0) {
+                last = here;
+                for (;;) {
+                    here = state->lencode[last.val +
+                            (BITS(last.bits + last.op) >> last.bits)];
+                    if ((unsigned)(last.bits + here.bits) <= bits) break;
+                    PULLBYTE();
+                }
+                DROPBITS(last.bits);
+                state->back += last.bits;
+            }
+            DROPBITS(here.bits);
+            state->back += here.bits;
+            state->length = (unsigned)here.val;
+            if ((int)(here.op) == 0) {
+                Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ?
+                        "inflate:         literal '%c'\n" :
+                        "inflate:         literal 0x%02x\n", here.val));
+                state->mode = LIT;
+                break;
+            }
+            if (here.op & 32) {
+                Tracevv((stderr, "inflate:         end of block\n"));
+                state->back = -1;
+                state->mode = TYPE;
+                break;
+            }
+            if (here.op & 64) {
+                strm->msg = (char *)"invalid literal/length code";
+                state->mode = BAD;
+                break;
+            }
+            state->extra = (unsigned)(here.op) & 15;
+            state->mode = LENEXT;
+        case LENEXT:
+            if (state->extra) {
+                NEEDBITS(state->extra);
+                state->length += BITS(state->extra);
+                DROPBITS(state->extra);
+                state->back += state->extra;
+            }
+            Tracevv((stderr, "inflate:         length %u\n", state->length));
+            state->was = state->length;
+            state->mode = DIST;
+        case DIST:
+            for (;;) {
+                here = state->distcode[BITS(state->distbits)];
+                if ((unsigned)(here.bits) <= bits) break;
+                PULLBYTE();
+            }
+            if ((here.op & 0xf0) == 0) {
+                last = here;
+                for (;;) {
+                    here = state->distcode[last.val +
+                            (BITS(last.bits + last.op) >> last.bits)];
+                    if ((unsigned)(last.bits + here.bits) <= bits) break;
+                    PULLBYTE();
+                }
+                DROPBITS(last.bits);
+                state->back += last.bits;
+            }
+            DROPBITS(here.bits);
+            state->back += here.bits;
+            if (here.op & 64) {
+                strm->msg = (char *)"invalid distance code";
+                state->mode = BAD;
+                break;
+            }
+            state->offset = (unsigned)here.val;
+            state->extra = (unsigned)(here.op) & 15;
+            state->mode = DISTEXT;
+        case DISTEXT:
+            if (state->extra) {
+                NEEDBITS(state->extra);
+                state->offset += BITS(state->extra);
+                DROPBITS(state->extra);
+                state->back += state->extra;
+            }
+#ifdef INFLATE_STRICT
+            if (state->offset > state->dmax) {
+                strm->msg = (char *)"invalid distance too far back";
+                state->mode = BAD;
+                break;
+            }
+#endif
+            Tracevv((stderr, "inflate:         distance %u\n", state->offset));
+            state->mode = MATCH;
+        case MATCH:
+            if (left == 0) goto inf_leave;
+            copy = out - left;
+            if (state->offset > copy) {         /* copy from window */
+                copy = state->offset - copy;
+                if (copy > state->whave) {
+                    if (state->sane) {
+                        strm->msg = (char *)"invalid distance too far back";
+                        state->mode = BAD;
+                        break;
+                    }
+#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR
+                    Trace((stderr, "inflate.c too far\n"));
+                    copy -= state->whave;
+                    if (copy > state->length) copy = state->length;
+                    if (copy > left) copy = left;
+                    left -= copy;
+                    state->length -= copy;
+                    do {
+                        *put++ = 0;
+                    } while (--copy);
+                    if (state->length == 0) state->mode = LEN;
+                    break;
+#endif
+                }
+                if (copy > state->wnext) {
+                    copy -= state->wnext;
+                    from = state->window + (state->wsize - copy);
+                }
+                else
+                    from = state->window + (state->wnext - copy);
+                if (copy > state->length) copy = state->length;
+            }
+            else {                              /* copy from output */
+                from = put - state->offset;
+                copy = state->length;
+            }
+            if (copy > left) copy = left;
+            left -= copy;
+            state->length -= copy;
+            do {
+                *put++ = *from++;
+            } while (--copy);
+            if (state->length == 0) state->mode = LEN;
+            break;
+        case LIT:
+            if (left == 0) goto inf_leave;
+            *put++ = (unsigned char)(state->length);
+            left--;
+            state->mode = LEN;
+            break;
+        case CHECK:
+            if (state->wrap) {
+                NEEDBITS(32);
+                out -= left;
+                strm->total_out += out;
+                state->total += out;
+                if (out)
+                    strm->adler = state->check =
+                        UPDATE(state->check, put - out, out);
+                out = left;
+                if ((
+#ifdef GUNZIP
+                     state->flags ? hold :
+#endif
+                     ZSWAP32(hold)) != state->check) {
+                    strm->msg = (char *)"incorrect data check";
+                    state->mode = BAD;
+                    break;
+                }
+                INITBITS();
+                Tracev((stderr, "inflate:   check matches trailer\n"));
+            }
+#ifdef GUNZIP
+            state->mode = LENGTH;
+        case LENGTH:
+            if (state->wrap && state->flags) {
+                NEEDBITS(32);
+                if (hold != (state->total & 0xffffffffUL)) {
+                    strm->msg = (char *)"incorrect length check";
+                    state->mode = BAD;
+                    break;
+                }
+                INITBITS();
+                Tracev((stderr, "inflate:   length matches trailer\n"));
+            }
+#endif
+            state->mode = DONE;
+        case DONE:
+            ret = Z_STREAM_END;
+            goto inf_leave;
+        case BAD:
+            ret = Z_DATA_ERROR;
+            goto inf_leave;
+        case MEM:
+            return Z_MEM_ERROR;
+        case SYNC:
+        default:
+            return Z_STREAM_ERROR;
+        }
+
+    /*
+       Return from inflate(), updating the total counts and the check value.
+       If there was no progress during the inflate() call, return a buffer
+       error.  Call updatewindow() to create and/or update the window state.
+       Note: a memory error from inflate() is non-recoverable.
+     */
+  inf_leave:
+    RESTORE();
+    if (state->wsize || (out != strm->avail_out && state->mode < BAD &&
+            (state->mode < CHECK || flush != Z_FINISH)))
+        if (updatewindow(strm, strm->next_out, out - strm->avail_out)) {
+            state->mode = MEM;
+            return Z_MEM_ERROR;
+        }
+    in -= strm->avail_in;
+    out -= strm->avail_out;
+    strm->total_in += in;
+    strm->total_out += out;
+    state->total += out;
+    if (state->wrap && out)
+        strm->adler = state->check =
+            UPDATE(state->check, strm->next_out - out, out);
+    strm->data_type = state->bits + (state->last ? 64 : 0) +
+                      (state->mode == TYPE ? 128 : 0) +
+                      (state->mode == LEN_ || state->mode == COPY_ ? 256 : 0);
+    if (((in == 0 && out == 0) || flush == Z_FINISH) && ret == Z_OK)
+        ret = Z_BUF_ERROR;
+    return ret;
+}
+
+int ZEXPORT inflateEnd(strm)
+z_streamp strm;
+{
+    struct inflate_state FAR *state;
+    if (strm == Z_NULL || strm->state == Z_NULL || strm->zfree == (free_func)0)
+        return Z_STREAM_ERROR;
+    state = (struct inflate_state FAR *)strm->state;
+    if (state->window != Z_NULL) ZFREE(strm, state->window);
+    ZFREE(strm, strm->state);
+    strm->state = Z_NULL;
+    Tracev((stderr, "inflate: end\n"));
+    return Z_OK;
+}
+
+int ZEXPORT inflateGetDictionary(strm, dictionary, dictLength)
+z_streamp strm;
+Bytef *dictionary;
+uInt *dictLength;
+{
+    struct inflate_state FAR *state;
+
+    /* check state */
+    if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
+    state = (struct inflate_state FAR *)strm->state;
+
+    /* copy dictionary */
+    if (state->whave && dictionary != Z_NULL) {
+        zmemcpy(dictionary, state->window + state->wnext,
+                state->whave - state->wnext);
+        zmemcpy(dictionary + state->whave - state->wnext,
+                state->window, state->wnext);
+    }
+    if (dictLength != Z_NULL)
+        *dictLength = state->whave;
+    return Z_OK;
+}
+
+int ZEXPORT inflateSetDictionary(strm, dictionary, dictLength)
+z_streamp strm;
+const Bytef *dictionary;
+uInt dictLength;
+{
+    struct inflate_state FAR *state;
+    unsigned long dictid;
+    int ret;
+
+    /* check state */
+    if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
+    state = (struct inflate_state FAR *)strm->state;
+    if (state->wrap != 0 && state->mode != DICT)
+        return Z_STREAM_ERROR;
+
+    /* check for correct dictionary identifier */
+    if (state->mode == DICT) {
+        dictid = adler32(0L, Z_NULL, 0);
+        dictid = adler32(dictid, dictionary, dictLength);
+        if (dictid != state->check)
+            return Z_DATA_ERROR;
+    }
+
+    /* copy dictionary to window using updatewindow(), which will amend the
+       existing dictionary if appropriate */
+    ret = updatewindow(strm, dictionary + dictLength, dictLength);
+    if (ret) {
+        state->mode = MEM;
+        return Z_MEM_ERROR;
+    }
+    state->havedict = 1;
+    Tracev((stderr, "inflate:   dictionary set\n"));
+    return Z_OK;
+}
+
+int ZEXPORT inflateGetHeader(strm, head)
+z_streamp strm;
+gz_headerp head;
+{
+    struct inflate_state FAR *state;
+
+    /* check state */
+    if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
+    state = (struct inflate_state FAR *)strm->state;
+    if ((state->wrap & 2) == 0) return Z_STREAM_ERROR;
+
+    /* save header structure */
+    state->head = head;
+    head->done = 0;
+    return Z_OK;
+}
+
+/*
+   Search buf[0..len-1] for the pattern: 0, 0, 0xff, 0xff.  Return when found
+   or when out of input.  When called, *have is the number of pattern bytes
+   found in order so far, in 0..3.  On return *have is updated to the new
+   state.  If on return *have equals four, then the pattern was found and the
+   return value is how many bytes were read including the last byte of the
+   pattern.  If *have is less than four, then the pattern has not been found
+   yet and the return value is len.  In the latter case, syncsearch() can be
+   called again with more data and the *have state.  *have is initialized to
+   zero for the first call.
+ */
+local unsigned syncsearch(have, buf, len)
+unsigned FAR *have;
+const unsigned char FAR *buf;
+unsigned len;
+{
+    unsigned got;
+    unsigned next;
+
+    got = *have;
+    next = 0;
+    while (next < len && got < 4) {
+        if ((int)(buf[next]) == (got < 2 ? 0 : 0xff))
+            got++;
+        else if (buf[next])
+            got = 0;
+        else
+            got = 4 - got;
+        next++;
+    }
+    *have = got;
+    return next;
+}
+
+int ZEXPORT inflateSync(strm)
+z_streamp strm;
+{
+    unsigned len;               /* number of bytes to look at or looked at */
+    unsigned long in, out;      /* temporary to save total_in and total_out */
+    unsigned char buf[4];       /* to restore bit buffer to byte string */
+    struct inflate_state FAR *state;
+
+    /* check parameters */
+    if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
+    state = (struct inflate_state FAR *)strm->state;
+    if (strm->avail_in == 0 && state->bits < 8) return Z_BUF_ERROR;
+
+    /* if first time, start search in bit buffer */
+    if (state->mode != SYNC) {
+        state->mode = SYNC;
+        state->hold <<= state->bits & 7;
+        state->bits -= state->bits & 7;
+        len = 0;
+        while (state->bits >= 8) {
+            buf[len++] = (unsigned char)(state->hold);
+            state->hold >>= 8;
+            state->bits -= 8;
+        }
+        state->have = 0;
+        syncsearch(&(state->have), buf, len);
+    }
+
+    /* search available input */
+    len = syncsearch(&(state->have), strm->next_in, strm->avail_in);
+    strm->avail_in -= len;
+    strm->next_in += len;
+    strm->total_in += len;
+
+    /* return no joy or set up to restart inflate() on a new block */
+    if (state->have != 4) return Z_DATA_ERROR;
+    in = strm->total_in;  out = strm->total_out;
+    inflateReset(strm);
+    strm->total_in = in;  strm->total_out = out;
+    state->mode = TYPE;
+    return Z_OK;
+}
+
+/*
+   Returns true if inflate is currently at the end of a block generated by
+   Z_SYNC_FLUSH or Z_FULL_FLUSH. This function is used by one PPP
+   implementation to provide an additional safety check. PPP uses
+   Z_SYNC_FLUSH but removes the length bytes of the resulting empty stored
+   block. When decompressing, PPP checks that at the end of input packet,
+   inflate is waiting for these length bytes.
+ */
+int ZEXPORT inflateSyncPoint(strm)
+z_streamp strm;
+{
+    struct inflate_state FAR *state;
+
+    if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
+    state = (struct inflate_state FAR *)strm->state;
+    return state->mode == STORED && state->bits == 0;
+}
+
+int ZEXPORT inflateCopy(dest, source)
+z_streamp dest;
+z_streamp source;
+{
+    struct inflate_state FAR *state;
+    struct inflate_state FAR *copy;
+    unsigned char FAR *window;
+    unsigned wsize;
+
+    /* check input */
+    if (dest == Z_NULL || source == Z_NULL || source->state == Z_NULL ||
+        source->zalloc == (alloc_func)0 || source->zfree == (free_func)0)
+        return Z_STREAM_ERROR;
+    state = (struct inflate_state FAR *)source->state;
+
+    /* allocate space */
+    copy = (struct inflate_state FAR *)
+           ZALLOC(source, 1, sizeof(struct inflate_state));
+    if (copy == Z_NULL) return Z_MEM_ERROR;
+    window = Z_NULL;
+    if (state->window != Z_NULL) {
+        window = (unsigned char FAR *)
+                 ZALLOC(source, 1U << state->wbits, sizeof(unsigned char));
+        if (window == Z_NULL) {
+            ZFREE(source, copy);
+            return Z_MEM_ERROR;
+        }
+    }
+
+    /* copy state */
+    zmemcpy((voidpf)dest, (voidpf)source, sizeof(z_stream));
+    zmemcpy((voidpf)copy, (voidpf)state, sizeof(struct inflate_state));
+    if (state->lencode >= state->codes &&
+        state->lencode <= state->codes + ENOUGH - 1) {
+        copy->lencode = copy->codes + (state->lencode - state->codes);
+        copy->distcode = copy->codes + (state->distcode - state->codes);
+    }
+    copy->next = copy->codes + (state->next - state->codes);
+    if (window != Z_NULL) {
+        wsize = 1U << state->wbits;
+        zmemcpy(window, state->window, wsize);
+    }
+    copy->window = window;
+    dest->state = (struct internal_state FAR *)copy;
+    return Z_OK;
+}
+
+int ZEXPORT inflateUndermine(strm, subvert)
+z_streamp strm;
+int subvert;
+{
+    struct inflate_state FAR *state;
+
+    if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
+    state = (struct inflate_state FAR *)strm->state;
+    state->sane = !subvert;
+#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR
+    return Z_OK;
+#else
+    state->sane = 1;
+    return Z_DATA_ERROR;
+#endif
+}
+
+long ZEXPORT inflateMark(strm)
+z_streamp strm;
+{
+    struct inflate_state FAR *state;
+
+    if (strm == Z_NULL || strm->state == Z_NULL) return -1L << 16;
+    state = (struct inflate_state FAR *)strm->state;
+    return ((long)(state->back) << 16) +
+        (state->mode == COPY ? state->length :
+            (state->mode == MATCH ? state->was - state->length : 0));
+}
diff --git a/zlib/inflate.h b/zlib/inflate.h
new file mode 100644 (file)
index 0000000..95f4986
--- /dev/null
@@ -0,0 +1,122 @@
+/* inflate.h -- internal inflate state definition
+ * Copyright (C) 1995-2009 Mark Adler
+ * For conditions of distribution and use, see copyright notice in zlib.h
+ */
+
+/* WARNING: this file should *not* be used by applications. It is
+   part of the implementation of the compression library and is
+   subject to change. Applications should only use zlib.h.
+ */
+
+/* define NO_GZIP when compiling if you want to disable gzip header and
+   trailer decoding by inflate().  NO_GZIP would be used to avoid linking in
+   the crc code when it is not needed.  For shared libraries, gzip decoding
+   should be left enabled. */
+#ifndef NO_GZIP
+#  define GUNZIP
+#endif
+
+/* Possible inflate modes between inflate() calls */
+typedef enum {
+    HEAD,       /* i: waiting for magic header */
+    FLAGS,      /* i: waiting for method and flags (gzip) */
+    TIME,       /* i: waiting for modification time (gzip) */
+    OS,         /* i: waiting for extra flags and operating system (gzip) */
+    EXLEN,      /* i: waiting for extra length (gzip) */
+    EXTRA,      /* i: waiting for extra bytes (gzip) */
+    NAME,       /* i: waiting for end of file name (gzip) */
+    COMMENT,    /* i: waiting for end of comment (gzip) */
+    HCRC,       /* i: waiting for header crc (gzip) */
+    DICTID,     /* i: waiting for dictionary check value */
+    DICT,       /* waiting for inflateSetDictionary() call */
+        TYPE,       /* i: waiting for type bits, including last-flag bit */
+        TYPEDO,     /* i: same, but skip check to exit inflate on new block */
+        STORED,     /* i: waiting for stored size (length and complement) */
+        COPY_,      /* i/o: same as COPY below, but only first time in */
+        COPY,       /* i/o: waiting for input or output to copy stored block */
+        TABLE,      /* i: waiting for dynamic block table lengths */
+        LENLENS,    /* i: waiting for code length code lengths */
+        CODELENS,   /* i: waiting for length/lit and distance code lengths */
+            LEN_,       /* i: same as LEN below, but only first time in */
+            LEN,        /* i: waiting for length/lit/eob code */
+            LENEXT,     /* i: waiting for length extra bits */
+            DIST,       /* i: waiting for distance code */
+            DISTEXT,    /* i: waiting for distance extra bits */
+            MATCH,      /* o: waiting for output space to copy string */
+            LIT,        /* o: waiting for output space to write literal */
+    CHECK,      /* i: waiting for 32-bit check value */
+    LENGTH,     /* i: waiting for 32-bit length (gzip) */
+    DONE,       /* finished check, done -- remain here until reset */
+    BAD,        /* got a data error -- remain here until reset */
+    MEM,        /* got an inflate() memory error -- remain here until reset */
+    SYNC        /* looking for synchronization bytes to restart inflate() */
+} inflate_mode;
+
+/*
+    State transitions between above modes -
+
+    (most modes can go to BAD or MEM on error -- not shown for clarity)
+
+    Process header:
+        HEAD -> (gzip) or (zlib) or (raw)
+        (gzip) -> FLAGS -> TIME -> OS -> EXLEN -> EXTRA -> NAME -> COMMENT ->
+                  HCRC -> TYPE
+        (zlib) -> DICTID or TYPE
+        DICTID -> DICT -> TYPE
+        (raw) -> TYPEDO
+    Read deflate blocks:
+            TYPE -> TYPEDO -> STORED or TABLE or LEN_ or CHECK
+            STORED -> COPY_ -> COPY -> TYPE
+            TABLE -> LENLENS -> CODELENS -> LEN_
+            LEN_ -> LEN
+    Read deflate codes in fixed or dynamic block:
+                LEN -> LENEXT or LIT or TYPE
+                LENEXT -> DIST -> DISTEXT -> MATCH -> LEN
+                LIT -> LEN
+    Process trailer:
+        CHECK -> LENGTH -> DONE
+ */
+
+/* state maintained between inflate() calls.  Approximately 10K bytes. */
+struct inflate_state {
+    inflate_mode mode;          /* current inflate mode */
+    int last;                   /* true if processing last block */
+    int wrap;                   /* bit 0 true for zlib, bit 1 true for gzip */
+    int havedict;               /* true if dictionary provided */
+    int flags;                  /* gzip header method and flags (0 if zlib) */
+    unsigned dmax;              /* zlib header max distance (INFLATE_STRICT) */
+    unsigned long check;        /* protected copy of check value */
+    unsigned long total;        /* protected copy of output count */
+    gz_headerp head;            /* where to save gzip header information */
+        /* sliding window */
+    unsigned wbits;             /* log base 2 of requested window size */
+    unsigned wsize;             /* window size or zero if not using window */
+    unsigned whave;             /* valid bytes in the window */
+    unsigned wnext;             /* window write index */
+    unsigned char FAR *window;  /* allocated sliding window, if needed */
+        /* bit accumulator */
+    unsigned long hold;         /* input bit accumulator */
+    unsigned bits;              /* number of bits in "in" */
+        /* for string and stored block copying */
+    unsigned length;            /* literal or length of data to copy */
+    unsigned offset;            /* distance back to copy string from */
+        /* for table and code decoding */
+    unsigned extra;             /* extra bits needed */
+        /* fixed and dynamic code tables */
+    code const FAR *lencode;    /* starting table for length/literal codes */
+    code const FAR *distcode;   /* starting table for distance codes */
+    unsigned lenbits;           /* index bits for lencode */
+    unsigned distbits;          /* index bits for distcode */
+        /* dynamic table building */
+    unsigned ncode;             /* number of code length code lengths */
+    unsigned nlen;              /* number of length code lengths */
+    unsigned ndist;             /* number of distance code lengths */
+    unsigned have;              /* number of code lengths in lens[] */
+    code FAR *next;             /* next available space in codes[] */
+    unsigned short lens[320];   /* temporary storage for code lengths */
+    unsigned short work[288];   /* work area for code table building */
+    code codes[ENOUGH];         /* space for code tables */
+    int sane;                   /* if false, allow invalid distance too far */
+    int back;                   /* bits back of last unprocessed length/lit */
+    unsigned was;               /* initial length of match */
+};
diff --git a/zlib/inftrees.c b/zlib/inftrees.c
new file mode 100644 (file)
index 0000000..7fd506d
--- /dev/null
@@ -0,0 +1,302 @@
+/* inftrees.c -- generate Huffman trees for efficient decoding
+ * Copyright (C) 1995-2013 Mark Adler
+ * For conditions of distribution and use, see copyright notice in zlib.h
+ */
+
+#include "zutil.h"
+#include "inftrees.h"
+
+#define MAXBITS 15
+
+const char inflate_copyright[] =
+   " inflate 1.2.8.f-Proxmark3 Copyright 1995-2013 Mark Adler ";
+/*
+  If you use the zlib library in a product, an acknowledgment is welcome
+  in the documentation of your product. If for some reason you cannot
+  include such an acknowledgment, I would appreciate that you keep this
+  copyright string in the executable of your product.
+ */
+
+/*
+   Build a set of tables to decode the provided canonical Huffman code.
+   The code lengths are lens[0..codes-1].  The result starts at *table,
+   whose indices are 0..2^bits-1.  work is a writable array of at least
+   lens shorts, which is used as a work area.  type is the type of code
+   to be generated, CODES, LENS, or DISTS.  On return, zero is success,
+   -1 is an invalid code, and +1 means that ENOUGH isn't enough.  table
+   on return points to the next available entry's address.  bits is the
+   requested root table index bits, and on return it is the actual root
+   table index bits.  It will differ if the request is greater than the
+   longest code or if it is less than the shortest code.
+ */
+int ZLIB_INTERNAL inflate_table(codetype type, unsigned short FAR *lens,
+                             unsigned codes, code FAR * FAR *table,
+                             unsigned FAR *bits, unsigned short FAR *work)
+{
+    unsigned len;               /* a code's length in bits */
+    unsigned sym;               /* index of code symbols */
+    unsigned min, max;          /* minimum and maximum code lengths */
+    unsigned root;              /* number of index bits for root table */
+    unsigned curr;              /* number of index bits for current table */
+    unsigned drop;              /* code bits to drop for sub-table */
+    int left;                   /* number of prefix codes available */
+    unsigned used;              /* code entries in table used */
+    unsigned huff;              /* Huffman code */
+    unsigned incr;              /* for incrementing code, index */
+    unsigned fill;              /* index for replicating entries */
+    unsigned low;               /* low bits for current root entry */
+    unsigned mask;              /* mask for low root bits */
+    code here;                  /* table entry for duplication */
+    code FAR *next;             /* next available space in table */
+    const unsigned short FAR *base;     /* base value table to use */
+    const unsigned short FAR *extra;    /* extra bits table to use */
+    int end;                    /* use base and extra for symbol > end */
+    unsigned short count[MAXBITS+1];    /* number of codes of each length */
+    unsigned short offs[MAXBITS+1];     /* offsets in table for each length */
+    static const unsigned short lbase[31] = { /* Length codes 257..285 base */
+        3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31,
+        35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0};
+    static const unsigned short lext[31] = { /* Length codes 257..285 extra */
+        16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18,
+        19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 72, 78};
+    static const unsigned short dbase[32] = { /* Distance codes 0..29 base */
+        1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193,
+        257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145,
+        8193, 12289, 16385, 24577, 0, 0};
+    static const unsigned short dext[32] = { /* Distance codes 0..29 extra */
+        16, 16, 16, 16, 17, 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, 22,
+        23, 23, 24, 24, 25, 25, 26, 26, 27, 27,
+        28, 28, 29, 29, 64, 64};
+
+    /*
+       Process a set of code lengths to create a canonical Huffman code.  The
+       code lengths are lens[0..codes-1].  Each length corresponds to the
+       symbols 0..codes-1.  The Huffman code is generated by first sorting the
+       symbols by length from short to long, and retaining the symbol order
+       for codes with equal lengths.  Then the code starts with all zero bits
+       for the first code of the shortest length, and the codes are integer
+       increments for the same length, and zeros are appended as the length
+       increases.  For the deflate format, these bits are stored backwards
+       from their more natural integer increment ordering, and so when the
+       decoding tables are built in the large loop below, the integer codes
+       are incremented backwards.
+
+       This routine assumes, but does not check, that all of the entries in
+       lens[] are in the range 0..MAXBITS.  The caller must assure this.
+       1..MAXBITS is interpreted as that code length.  zero means that that
+       symbol does not occur in this code.
+
+       The codes are sorted by computing a count of codes for each length,
+       creating from that a table of starting indices for each length in the
+       sorted table, and then entering the symbols in order in the sorted
+       table.  The sorted table is work[], with that space being provided by
+       the caller.
+
+       The length counts are used for other purposes as well, i.e. finding
+       the minimum and maximum length codes, determining if there are any
+       codes at all, checking for a valid set of lengths, and looking ahead
+       at length counts to determine sub-table sizes when building the
+       decoding tables.
+     */
+
+    /* accumulate lengths for codes (assumes lens[] all in 0..MAXBITS) */
+    for (len = 0; len <= MAXBITS; len++)
+        count[len] = 0;
+    for (sym = 0; sym < codes; sym++)
+        count[lens[sym]]++;
+
+    /* bound code lengths, force root to be within code lengths */
+    root = *bits;
+    for (max = MAXBITS; max >= 1; max--)
+        if (count[max] != 0) break;
+    if (root > max) root = max;
+    if (max == 0) {                     /* no symbols to code at all */
+        here.op = (unsigned char)64;    /* invalid code marker */
+        here.bits = (unsigned char)1;
+        here.val = (unsigned short)0;
+        *(*table)++ = here;             /* make a table to force an error */
+        *(*table)++ = here;
+        *bits = 1;
+        return 0;     /* no symbols, but wait for decoding to report error */
+    }
+    for (min = 1; min < max; min++)
+        if (count[min] != 0) break;
+    if (root < min) root = min;
+
+    /* check for an over-subscribed or incomplete set of lengths */
+    left = 1;
+    for (len = 1; len <= MAXBITS; len++) {
+        left <<= 1;
+        left -= count[len];
+        if (left < 0) return -1;        /* over-subscribed */
+    }
+    if (left > 0 && (type == CODES || max != 1))
+        return -1;                      /* incomplete set */
+
+    /* generate offsets into symbol table for each length for sorting */
+    offs[1] = 0;
+    for (len = 1; len < MAXBITS; len++)
+        offs[len + 1] = offs[len] + count[len];
+
+    /* sort symbols by length, by symbol order within each length */
+    for (sym = 0; sym < codes; sym++)
+        if (lens[sym] != 0) work[offs[lens[sym]]++] = (unsigned short)sym;
+
+    /*
+       Create and fill in decoding tables.  In this loop, the table being
+       filled is at next and has curr index bits.  The code being used is huff
+       with length len.  That code is converted to an index by dropping drop
+       bits off of the bottom.  For codes where len is less than drop + curr,
+       those top drop + curr - len bits are incremented through all values to
+       fill the table with replicated entries.
+
+       root is the number of index bits for the root table.  When len exceeds
+       root, sub-tables are created pointed to by the root entry with an index
+       of the low root bits of huff.  This is saved in low to check for when a
+       new sub-table should be started.  drop is zero when the root table is
+       being filled, and drop is root when sub-tables are being filled.
+
+       When a new sub-table is needed, it is necessary to look ahead in the
+       code lengths to determine what size sub-table is needed.  The length
+       counts are used for this, and so count[] is decremented as codes are
+       entered in the tables.
+
+       used keeps track of how many table entries have been allocated from the
+       provided *table space.  It is checked for LENS and DIST tables against
+       the constants ENOUGH_LENS and ENOUGH_DISTS to guard against changes in
+       the initial root table size constants.  See the comments in inftrees.h
+       for more information.
+
+       sym increments through all symbols, and the loop terminates when
+       all codes of length max, i.e. all codes, have been processed.  This
+       routine permits incomplete codes, so another loop after this one fills
+       in the rest of the decoding tables with invalid code markers.
+     */
+
+    /* set up for code type */
+    switch (type) {
+    case CODES:
+        base = extra = work;    /* dummy value--not used */
+        end = 19;
+        break;
+    case LENS:
+        base = lbase;
+        base -= 257;
+        extra = lext;
+        extra -= 257;
+        end = 256;
+        break;
+    default:            /* DISTS */
+        base = dbase;
+        extra = dext;
+        end = -1;
+    }
+
+    /* initialize state for loop */
+    huff = 0;                   /* starting code */
+    sym = 0;                    /* starting code symbol */
+    len = min;                  /* starting code length */
+    next = *table;              /* current table to fill in */
+    curr = root;                /* current table index bits */
+    drop = 0;                   /* current bits to drop from code for index */
+    low = (unsigned)(-1);       /* trigger new sub-table when len > root */
+    used = 1U << root;          /* use root table entries */
+    mask = used - 1;            /* mask for comparing low */
+
+    /* check available table space */
+    if ((type == LENS && used > ENOUGH_LENS) ||
+        (type == DISTS && used > ENOUGH_DISTS))
+        return 1;
+
+    /* process all codes and make table entries */
+    for (;;) {
+        /* create table entry */
+        here.bits = (unsigned char)(len - drop);
+        if ((int)(work[sym]) < end) {
+            here.op = (unsigned char)0;
+            here.val = work[sym];
+        }
+        else if ((int)(work[sym]) > end) {
+            here.op = (unsigned char)(extra[work[sym]]);
+            here.val = base[work[sym]];
+        }
+        else {
+            here.op = (unsigned char)(32 + 64);         /* end of block */
+            here.val = 0;
+        }
+
+        /* replicate for those indices with low len bits equal to huff */
+        incr = 1U << (len - drop);
+        fill = 1U << curr;
+        min = fill;                 /* save offset to next table */
+        do {
+            fill -= incr;
+            next[(huff >> drop) + fill] = here;
+        } while (fill != 0);
+
+        /* backwards increment the len-bit code huff */
+        incr = 1U << (len - 1);
+        while (huff & incr)
+            incr >>= 1;
+        if (incr != 0) {
+            huff &= incr - 1;
+            huff += incr;
+        }
+        else
+            huff = 0;
+
+        /* go to next symbol, update count, len */
+        sym++;
+        if (--(count[len]) == 0) {
+            if (len == max) break;
+            len = lens[work[sym]];
+        }
+
+        /* create new sub-table if needed */
+        if (len > root && (huff & mask) != low) {
+            /* if first time, transition to sub-tables */
+            if (drop == 0)
+                drop = root;
+
+            /* increment past last table */
+            next += min;            /* here min is 1 << curr */
+
+            /* determine length of next table */
+            curr = len - drop;
+            left = (int)(1 << curr);
+            while (curr + drop < max) {
+                left -= count[curr + drop];
+                if (left <= 0) break;
+                curr++;
+                left <<= 1;
+            }
+
+            /* check for enough space */
+            used += 1U << curr;
+            if ((type == LENS && used > ENOUGH_LENS) ||
+                (type == DISTS && used > ENOUGH_DISTS))
+                return 1;
+
+            /* point entry in root table to sub-table */
+            low = huff & mask;
+            (*table)[low].op = (unsigned char)curr;
+            (*table)[low].bits = (unsigned char)root;
+            (*table)[low].val = (unsigned short)(next - *table);
+        }
+    }
+
+    /* fill in remaining table entry if code is incomplete (guaranteed to have
+       at most one remaining entry, since if the code is incomplete, the
+       maximum code length that was allowed to get this far is one bit) */
+    if (huff != 0) {
+        here.op = (unsigned char)64;            /* invalid code marker */
+        here.bits = (unsigned char)(len - drop);
+        here.val = (unsigned short)0;
+        next[huff] = here;
+    }
+
+    /* set return parameters */
+    *table += used;
+    *bits = root;
+    return 0;
+}
diff --git a/zlib/inftrees.h b/zlib/inftrees.h
new file mode 100644 (file)
index 0000000..baa53a0
--- /dev/null
@@ -0,0 +1,62 @@
+/* inftrees.h -- header to use inftrees.c
+ * Copyright (C) 1995-2005, 2010 Mark Adler
+ * For conditions of distribution and use, see copyright notice in zlib.h
+ */
+
+/* WARNING: this file should *not* be used by applications. It is
+   part of the implementation of the compression library and is
+   subject to change. Applications should only use zlib.h.
+ */
+
+/* Structure for decoding tables.  Each entry provides either the
+   information needed to do the operation requested by the code that
+   indexed that table entry, or it provides a pointer to another
+   table that indexes more bits of the code.  op indicates whether
+   the entry is a pointer to another table, a literal, a length or
+   distance, an end-of-block, or an invalid code.  For a table
+   pointer, the low four bits of op is the number of index bits of
+   that table.  For a length or distance, the low four bits of op
+   is the number of extra bits to get after the code.  bits is
+   the number of bits in this code or part of the code to drop off
+   of the bit buffer.  val is the actual byte to output in the case
+   of a literal, the base length or distance, or the offset from
+   the current table to the next table.  Each entry is four bytes. */
+typedef struct {
+    unsigned char op;           /* operation, extra bits, table bits */
+    unsigned char bits;         /* bits in this part of the code */
+    unsigned short val;         /* offset in table or code value */
+} code;
+
+/* op values as set by inflate_table():
+    00000000 - literal
+    0000tttt - table link, tttt != 0 is the number of table index bits
+    0001eeee - length or distance, eeee is the number of extra bits
+    01100000 - end of block
+    01000000 - invalid code
+ */
+
+/* Maximum size of the dynamic table.  The maximum number of code structures is
+   1444, which is the sum of 852 for literal/length codes and 592 for distance
+   codes.  These values were found by exhaustive searches using the program
+   examples/enough.c found in the zlib distribtution.  The arguments to that
+   program are the number of symbols, the initial root table size, and the
+   maximum bit length of a code.  "enough 286 9 15" for literal/length codes
+   returns returns 852, and "enough 30 6 15" for distance codes returns 592.
+   The initial root table size (9 or 6) is found in the fifth argument of the
+   inflate_table() calls in inflate.c and infback.c.  If the root table size is
+   changed, then these maximum sizes would be need to be recalculated and
+   updated. */
+#define ENOUGH_LENS 852
+#define ENOUGH_DISTS 592
+#define ENOUGH (ENOUGH_LENS+ENOUGH_DISTS)
+
+/* Type of code to build for inflate_table() */
+typedef enum {
+    CODES,
+    LENS,
+    DISTS
+} codetype;
+
+int ZLIB_INTERNAL inflate_table OF((codetype type, unsigned short FAR *lens,
+                             unsigned codes, code FAR * FAR *table,
+                             unsigned FAR *bits, unsigned short FAR *work));
diff --git a/zlib/trees.c b/zlib/trees.c
new file mode 100644 (file)
index 0000000..dbfa49c
--- /dev/null
@@ -0,0 +1,1239 @@
+/* trees.c -- output deflated data using Huffman coding
+ * Copyright (C) 1995-2012 Jean-loup Gailly
+ * detect_data_type() function provided freely by Cosmin Truta, 2006
+ * For conditions of distribution and use, see copyright notice in zlib.h
+ */
+
+/*
+ *  ALGORITHM
+ *
+ *      The "deflation" process uses several Huffman trees. The more
+ *      common source values are represented by shorter bit sequences.
+ *
+ *      Each code tree is stored in a compressed form which is itself
+ * a Huffman encoding of the lengths of all the code strings (in
+ * ascending order by source values).  The actual code strings are
+ * reconstructed from the lengths in the inflate process, as described
+ * in the deflate specification.
+ *
+ *  REFERENCES
+ *
+ *      Deutsch, L.P.,"'Deflate' Compressed Data Format Specification".
+ *      Available in ftp.uu.net:/pub/archiving/zip/doc/deflate-1.1.doc
+ *
+ *      Storer, James A.
+ *          Data Compression:  Methods and Theory, pp. 49-50.
+ *          Computer Science Press, 1988.  ISBN 0-7167-8156-5.
+ *
+ *      Sedgewick, R.
+ *          Algorithms, p290.
+ *          Addison-Wesley, 1983. ISBN 0-201-06672-6.
+ */
+
+/* @(#) $Id$ */
+
+//-----------------------------------------------------------------------------
+// This version of zlib is modified for use within the Proxmark3 project. 
+// Files from the original distribution which are not required for this
+// purpose are not included. All modifications can easily be found
+// by searching for #ifdef ZLIB_PM3_TUNED and #ifndef ZLIB_PM3_TUNED.
+//-----------------------------------------------------------------------------
+
+/* #define GEN_TREES_H */
+
+
+#include "deflate.h"
+
+#ifdef DEBUG
+#  include <ctype.h>
+#endif
+
+/* ===========================================================================
+ * Constants
+ */
+
+#define MAX_BL_BITS 7
+/* Bit length codes must not exceed MAX_BL_BITS bits */
+
+#define END_BLOCK 256
+/* end of block literal code */
+
+#define REP_3_6      16
+/* repeat previous bit length 3-6 times (2 bits of repeat count) */
+
+#define REPZ_3_10    17
+/* repeat a zero length 3-10 times  (3 bits of repeat count) */
+
+#define REPZ_11_138  18
+/* repeat a zero length 11-138 times  (7 bits of repeat count) */
+
+local const int extra_lbits[LENGTH_CODES] /* extra bits for each length code */
+   = {0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0};
+
+local const int extra_dbits[D_CODES] /* extra bits for each distance code */
+   = {0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13};
+
+local const int extra_blbits[BL_CODES]/* extra bits for each bit length code */
+   = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7};
+
+local const uch bl_order[BL_CODES]
+   = {16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15};
+/* The lengths of the bit length codes are sent in order of decreasing
+ * probability, to avoid transmitting the lengths for unused bit length codes.
+ */
+
+/* ===========================================================================
+ * Local data. These are initialized only once.
+ */
+
+#define DIST_CODE_LEN  512 /* see definition of array dist_code below */
+
+#if defined(GEN_TREES_H) || !defined(STDC)
+/* non ANSI compilers may not accept trees.h */
+
+local ct_data static_ltree[L_CODES+2];
+/* The static literal tree. Since the bit lengths are imposed, there is no
+ * need for the L_CODES extra codes used during heap construction. However
+ * The codes 286 and 287 are needed to build a canonical tree (see _tr_init
+ * below).
+ */
+
+local ct_data static_dtree[D_CODES];
+/* The static distance tree. (Actually a trivial tree since all codes use
+ * 5 bits.)
+ */
+
+uch _dist_code[DIST_CODE_LEN];
+/* Distance codes. The first 256 values correspond to the distances
+ * 3 .. 258, the last 256 values correspond to the top 8 bits of
+ * the 15 bit distances.
+ */
+
+uch _length_code[MAX_MATCH-MIN_MATCH+1];
+/* length code for each normalized match length (0 == MIN_MATCH) */
+
+local int base_length[LENGTH_CODES];
+/* First normalized length for each code (0 = MIN_MATCH) */
+
+local int base_dist[D_CODES];
+/* First normalized distance for each code (0 = distance of 1) */
+
+#else
+#  include "trees.h"
+#endif /* GEN_TREES_H */
+
+struct static_tree_desc_s {
+    const ct_data *static_tree;  /* static tree or NULL */
+    const intf *extra_bits;      /* extra bits for each code or NULL */
+    int     extra_base;          /* base index for extra_bits */
+    int     elems;               /* max number of elements in the tree */
+    int     max_length;          /* max bit length for the codes */
+};
+
+local static_tree_desc  static_l_desc =
+{static_ltree, extra_lbits, LITERALS+1, L_CODES, MAX_BITS};
+
+local static_tree_desc  static_d_desc =
+{static_dtree, extra_dbits, 0,          D_CODES, MAX_BITS};
+
+local static_tree_desc  static_bl_desc =
+{(const ct_data *)0, extra_blbits, 0,   BL_CODES, MAX_BL_BITS};
+
+/* ===========================================================================
+ * Local (static) routines in this file.
+ */
+
+local void tr_static_init OF((void));
+local void init_block     OF((deflate_state *s));
+local void pqdownheap     OF((deflate_state *s, ct_data *tree, int k));
+local void gen_bitlen     OF((deflate_state *s, tree_desc *desc));
+local void gen_codes      OF((ct_data *tree, int max_code, ushf *bl_count));
+local void build_tree     OF((deflate_state *s, tree_desc *desc));
+local void scan_tree      OF((deflate_state *s, ct_data *tree, int max_code));
+local void send_tree      OF((deflate_state *s, ct_data *tree, int max_code));
+local int  build_bl_tree  OF((deflate_state *s));
+local void send_all_trees OF((deflate_state *s, int lcodes, int dcodes,
+                              int blcodes));
+local void compress_block OF((deflate_state *s, const ct_data *ltree,
+                              const ct_data *dtree));
+local int  detect_data_type OF((deflate_state *s));
+local unsigned bi_reverse OF((unsigned value, int length));
+local void bi_windup      OF((deflate_state *s));
+local void bi_flush       OF((deflate_state *s));
+local void copy_block     OF((deflate_state *s, charf *buf, unsigned len,
+                              int header));
+
+#ifdef GEN_TREES_H
+local void gen_trees_header OF((void));
+#endif
+
+#ifndef DEBUG
+#  define send_code(s, c, tree) send_bits(s, tree[c].Code, tree[c].Len)
+   /* Send a code of the given tree. c and tree must not have side effects */
+
+#else /* DEBUG */
+#  define send_code(s, c, tree) \
+     { if (z_verbose>2) fprintf(stderr,"\ncd %3d ",(c)); \
+       send_bits(s, tree[c].Code, tree[c].Len); }
+#endif
+
+/* ===========================================================================
+ * Output a short LSB first on the stream.
+ * IN assertion: there is enough room in pendingBuf.
+ */
+#define put_short(s, w) { \
+    put_byte(s, (uch)((w) & 0xff)); \
+    put_byte(s, (uch)((ush)(w) >> 8)); \
+}
+
+/* ===========================================================================
+ * Send a value on a given number of bits.
+ * IN assertion: length <= 16 and value fits in length bits.
+ */
+#ifdef DEBUG
+local void send_bits      OF((deflate_state *s, int value, int length));
+
+local void send_bits(s, value, length)
+    deflate_state *s;
+    int value;  /* value to send */
+    int length; /* number of bits */
+{
+    Tracevv((stderr," l %2d v %4x ", length, value));
+    Assert(length > 0 && length <= 15, "invalid length");
+    s->bits_sent += (ulg)length;
+
+    /* If not enough room in bi_buf, use (valid) bits from bi_buf and
+     * (16 - bi_valid) bits from value, leaving (width - (16-bi_valid))
+     * unused bits in value.
+     */
+    if (s->bi_valid > (int)Buf_size - length) {
+        s->bi_buf |= (ush)value << s->bi_valid;
+        put_short(s, s->bi_buf);
+        s->bi_buf = (ush)value >> (Buf_size - s->bi_valid);
+        s->bi_valid += length - Buf_size;
+    } else {
+        s->bi_buf |= (ush)value << s->bi_valid;
+        s->bi_valid += length;
+    }
+}
+#else /* !DEBUG */
+
+#define send_bits(s, value, length) \
+{ int len = length;\
+  if (s->bi_valid > (int)Buf_size - len) {\
+    int val = value;\
+    s->bi_buf |= (ush)val << s->bi_valid;\
+    put_short(s, s->bi_buf);\
+    s->bi_buf = (ush)val >> (Buf_size - s->bi_valid);\
+    s->bi_valid += len - Buf_size;\
+  } else {\
+    s->bi_buf |= (ush)(value) << s->bi_valid;\
+    s->bi_valid += len;\
+  }\
+}
+#endif /* DEBUG */
+
+
+/* the arguments must not have side effects */
+
+/* ===========================================================================
+ * Initialize the various 'constant' tables.
+ */
+local void tr_static_init()
+{
+#if defined(GEN_TREES_H) || !defined(STDC)
+    static int static_init_done = 0;
+    int n;        /* iterates over tree elements */
+    int bits;     /* bit counter */
+    int length;   /* length value */
+    int code;     /* code value */
+    int dist;     /* distance index */
+    ush bl_count[MAX_BITS+1];
+    /* number of codes at each bit length for an optimal tree */
+
+    if (static_init_done) return;
+
+    /* For some embedded targets, global variables are not initialized: */
+#ifdef NO_INIT_GLOBAL_POINTERS
+    static_l_desc.static_tree = static_ltree;
+    static_l_desc.extra_bits = extra_lbits;
+    static_d_desc.static_tree = static_dtree;
+    static_d_desc.extra_bits = extra_dbits;
+    static_bl_desc.extra_bits = extra_blbits;
+#endif
+
+    /* Initialize the mapping length (0..255) -> length code (0..28) */
+    length = 0;
+    for (code = 0; code < LENGTH_CODES-1; code++) {
+        base_length[code] = length;
+        for (n = 0; n < (1<<extra_lbits[code]); n++) {
+            _length_code[length++] = (uch)code;
+        }
+    }
+    Assert (length == 256, "tr_static_init: length != 256");
+    /* Note that the length 255 (match length 258) can be represented
+     * in two different ways: code 284 + 5 bits or code 285, so we
+     * overwrite length_code[255] to use the best encoding:
+     */
+    _length_code[length-1] = (uch)code;
+
+    /* Initialize the mapping dist (0..32K) -> dist code (0..29) */
+    dist = 0;
+    for (code = 0 ; code < 16; code++) {
+        base_dist[code] = dist;
+        for (n = 0; n < (1<<extra_dbits[code]); n++) {
+            _dist_code[dist++] = (uch)code;
+        }
+    }
+    Assert (dist == 256, "tr_static_init: dist != 256");
+    dist >>= 7; /* from now on, all distances are divided by 128 */
+    for ( ; code < D_CODES; code++) {
+        base_dist[code] = dist << 7;
+        for (n = 0; n < (1<<(extra_dbits[code]-7)); n++) {
+            _dist_code[256 + dist++] = (uch)code;
+        }
+    }
+    Assert (dist == 256, "tr_static_init: 256+dist != 512");
+
+    /* Construct the codes of the static literal tree */
+    for (bits = 0; bits <= MAX_BITS; bits++) bl_count[bits] = 0;
+    n = 0;
+    while (n <= 143) static_ltree[n++].Len = 8, bl_count[8]++;
+    while (n <= 255) static_ltree[n++].Len = 9, bl_count[9]++;
+    while (n <= 279) static_ltree[n++].Len = 7, bl_count[7]++;
+    while (n <= 287) static_ltree[n++].Len = 8, bl_count[8]++;
+    /* Codes 286 and 287 do not exist, but we must include them in the
+     * tree construction to get a canonical Huffman tree (longest code
+     * all ones)
+     */
+    gen_codes((ct_data *)static_ltree, L_CODES+1, bl_count);
+
+    /* The static distance tree is trivial: */
+    for (n = 0; n < D_CODES; n++) {
+        static_dtree[n].Len = 5;
+        static_dtree[n].Code = bi_reverse((unsigned)n, 5);
+    }
+    static_init_done = 1;
+
+#  ifdef GEN_TREES_H
+    gen_trees_header();
+#  endif
+#endif /* defined(GEN_TREES_H) || !defined(STDC) */
+}
+
+/* ===========================================================================
+ * Genererate the file trees.h describing the static trees.
+ */
+#ifdef GEN_TREES_H
+#  ifndef DEBUG
+#    include <stdio.h>
+#  endif
+
+#  define SEPARATOR(i, last, width) \
+      ((i) == (last)? "\n};\n\n" :    \
+       ((i) % (width) == (width)-1 ? ",\n" : ", "))
+
+void gen_trees_header()
+{
+    FILE *header = fopen("trees.h", "w");
+    int i;
+
+    Assert (header != NULL, "Can't open trees.h");
+    fprintf(header,
+            "/* header created automatically with -DGEN_TREES_H */\n\n");
+
+    fprintf(header, "local const ct_data static_ltree[L_CODES+2] = {\n");
+    for (i = 0; i < L_CODES+2; i++) {
+        fprintf(header, "{{%3u},{%3u}}%s", static_ltree[i].Code,
+                static_ltree[i].Len, SEPARATOR(i, L_CODES+1, 5));
+    }
+
+    fprintf(header, "local const ct_data static_dtree[D_CODES] = {\n");
+    for (i = 0; i < D_CODES; i++) {
+        fprintf(header, "{{%2u},{%2u}}%s", static_dtree[i].Code,
+                static_dtree[i].Len, SEPARATOR(i, D_CODES-1, 5));
+    }
+
+    fprintf(header, "const uch ZLIB_INTERNAL _dist_code[DIST_CODE_LEN] = {\n");
+    for (i = 0; i < DIST_CODE_LEN; i++) {
+        fprintf(header, "%2u%s", _dist_code[i],
+                SEPARATOR(i, DIST_CODE_LEN-1, 20));
+    }
+
+    fprintf(header,
+        "const uch ZLIB_INTERNAL _length_code[MAX_MATCH-MIN_MATCH+1]= {\n");
+    for (i = 0; i < MAX_MATCH-MIN_MATCH+1; i++) {
+        fprintf(header, "%2u%s", _length_code[i],
+                SEPARATOR(i, MAX_MATCH-MIN_MATCH, 20));
+    }
+
+    fprintf(header, "local const int base_length[LENGTH_CODES] = {\n");
+    for (i = 0; i < LENGTH_CODES; i++) {
+        fprintf(header, "%1u%s", base_length[i],
+                SEPARATOR(i, LENGTH_CODES-1, 20));
+    }
+
+    fprintf(header, "local const int base_dist[D_CODES] = {\n");
+    for (i = 0; i < D_CODES; i++) {
+        fprintf(header, "%5u%s", base_dist[i],
+                SEPARATOR(i, D_CODES-1, 10));
+    }
+
+    fclose(header);
+}
+#endif /* GEN_TREES_H */
+
+/* ===========================================================================
+ * Initialize the tree data structures for a new zlib stream.
+ */
+void ZLIB_INTERNAL _tr_init(s)
+    deflate_state *s;
+{
+    tr_static_init();
+
+    s->l_desc.dyn_tree = s->dyn_ltree;
+    s->l_desc.stat_desc = &static_l_desc;
+
+    s->d_desc.dyn_tree = s->dyn_dtree;
+    s->d_desc.stat_desc = &static_d_desc;
+
+    s->bl_desc.dyn_tree = s->bl_tree;
+    s->bl_desc.stat_desc = &static_bl_desc;
+
+    s->bi_buf = 0;
+    s->bi_valid = 0;
+#ifdef DEBUG
+    s->compressed_len = 0L;
+    s->bits_sent = 0L;
+#endif
+
+    /* Initialize the first block of the first file: */
+    init_block(s);
+}
+
+/* ===========================================================================
+ * Initialize a new block.
+ */
+local void init_block(s)
+    deflate_state *s;
+{
+    int n; /* iterates over tree elements */
+
+    /* Initialize the trees. */
+    for (n = 0; n < L_CODES;  n++) s->dyn_ltree[n].Freq = 0;
+    for (n = 0; n < D_CODES;  n++) s->dyn_dtree[n].Freq = 0;
+    for (n = 0; n < BL_CODES; n++) s->bl_tree[n].Freq = 0;
+
+    s->dyn_ltree[END_BLOCK].Freq = 1;
+    s->opt_len = s->static_len = 0L;
+    s->last_lit = s->matches = 0;
+}
+
+#define SMALLEST 1
+/* Index within the heap array of least frequent node in the Huffman tree */
+
+
+/* ===========================================================================
+ * Remove the smallest element from the heap and recreate the heap with
+ * one less element. Updates heap and heap_len.
+ */
+#define pqremove(s, tree, top) \
+{\
+    top = s->heap[SMALLEST]; \
+    s->heap[SMALLEST] = s->heap[s->heap_len--]; \
+    pqdownheap(s, tree, SMALLEST); \
+}
+
+/* ===========================================================================
+ * Compares to subtrees, using the tree depth as tie breaker when
+ * the subtrees have equal frequency. This minimizes the worst case length.
+ */
+#define smaller(tree, n, m, depth) \
+   (tree[n].Freq < tree[m].Freq || \
+   (tree[n].Freq == tree[m].Freq && depth[n] <= depth[m]))
+
+/* ===========================================================================
+ * Restore the heap property by moving down the tree starting at node k,
+ * exchanging a node with the smallest of its two sons if necessary, stopping
+ * when the heap property is re-established (each father smaller than its
+ * two sons).
+ */
+local void pqdownheap(s, tree, k)
+    deflate_state *s;
+    ct_data *tree;  /* the tree to restore */
+    int k;               /* node to move down */
+{
+    int v = s->heap[k];
+    int j = k << 1;  /* left son of k */
+    while (j <= s->heap_len) {
+        /* Set j to the smallest of the two sons: */
+        if (j < s->heap_len &&
+            smaller(tree, s->heap[j+1], s->heap[j], s->depth)) {
+            j++;
+        }
+        /* Exit if v is smaller than both sons */
+        if (smaller(tree, v, s->heap[j], s->depth)) break;
+
+        /* Exchange v with the smallest son */
+        s->heap[k] = s->heap[j];  k = j;
+
+        /* And continue down the tree, setting j to the left son of k */
+        j <<= 1;
+    }
+    s->heap[k] = v;
+}
+
+/* ===========================================================================
+ * Compute the optimal bit lengths for a tree and update the total bit length
+ * for the current block.
+ * IN assertion: the fields freq and dad are set, heap[heap_max] and
+ *    above are the tree nodes sorted by increasing frequency.
+ * OUT assertions: the field len is set to the optimal bit length, the
+ *     array bl_count contains the frequencies for each bit length.
+ *     The length opt_len is updated; static_len is also updated if stree is
+ *     not null.
+ */
+local void gen_bitlen(s, desc)
+    deflate_state *s;
+    tree_desc *desc;    /* the tree descriptor */
+{
+    ct_data *tree        = desc->dyn_tree;
+    int max_code         = desc->max_code;
+    const ct_data *stree = desc->stat_desc->static_tree;
+    const intf *extra    = desc->stat_desc->extra_bits;
+    int base             = desc->stat_desc->extra_base;
+    int max_length       = desc->stat_desc->max_length;
+    int h;              /* heap index */
+    int n, m;           /* iterate over the tree elements */
+    int bits;           /* bit length */
+    int xbits;          /* extra bits */
+    ush f;              /* frequency */
+    int overflow = 0;   /* number of elements with bit length too large */
+
+    for (bits = 0; bits <= MAX_BITS; bits++) s->bl_count[bits] = 0;
+
+    /* In a first pass, compute the optimal bit lengths (which may
+     * overflow in the case of the bit length tree).
+     */
+    tree[s->heap[s->heap_max]].Len = 0; /* root of the heap */
+
+    for (h = s->heap_max+1; h < HEAP_SIZE; h++) {
+        n = s->heap[h];
+        bits = tree[tree[n].Dad].Len + 1;
+        if (bits > max_length) bits = max_length, overflow++;
+        tree[n].Len = (ush)bits;
+        /* We overwrite tree[n].Dad which is no longer needed */
+
+        if (n > max_code) continue; /* not a leaf node */
+
+        s->bl_count[bits]++;
+        xbits = 0;
+        if (n >= base) xbits = extra[n-base];
+        f = tree[n].Freq;
+        s->opt_len += (ulg)f * (bits + xbits);
+        if (stree) s->static_len += (ulg)f * (stree[n].Len + xbits);
+    }
+    if (overflow == 0) return;
+
+    Trace((stderr,"\nbit length overflow\n"));
+    /* This happens for example on obj2 and pic of the Calgary corpus */
+
+    /* Find the first bit length which could increase: */
+    do {
+        bits = max_length-1;
+        while (s->bl_count[bits] == 0) bits--;
+        s->bl_count[bits]--;      /* move one leaf down the tree */
+        s->bl_count[bits+1] += 2; /* move one overflow item as its brother */
+        s->bl_count[max_length]--;
+        /* The brother of the overflow item also moves one step up,
+         * but this does not affect bl_count[max_length]
+         */
+        overflow -= 2;
+    } while (overflow > 0);
+
+    /* Now recompute all bit lengths, scanning in increasing frequency.
+     * h is still equal to HEAP_SIZE. (It is simpler to reconstruct all
+     * lengths instead of fixing only the wrong ones. This idea is taken
+     * from 'ar' written by Haruhiko Okumura.)
+     */
+    for (bits = max_length; bits != 0; bits--) {
+        n = s->bl_count[bits];
+        while (n != 0) {
+            m = s->heap[--h];
+            if (m > max_code) continue;
+            if ((unsigned) tree[m].Len != (unsigned) bits) {
+                Trace((stderr,"code %d bits %d->%d\n", m, tree[m].Len, bits));
+                s->opt_len += ((long)bits - (long)tree[m].Len)
+                              *(long)tree[m].Freq;
+                tree[m].Len = (ush)bits;
+            }
+            n--;
+        }
+    }
+}
+
+/* ===========================================================================
+ * Generate the codes for a given tree and bit counts (which need not be
+ * optimal).
+ * IN assertion: the array bl_count contains the bit length statistics for
+ * the given tree and the field len is set for all tree elements.
+ * OUT assertion: the field code is set for all tree elements of non
+ *     zero code length.
+ */
+local void gen_codes (tree, max_code, bl_count)
+    ct_data *tree;             /* the tree to decorate */
+    int max_code;              /* largest code with non zero frequency */
+    ushf *bl_count;            /* number of codes at each bit length */
+{
+    ush next_code[MAX_BITS+1]; /* next code value for each bit length */
+    ush code = 0;              /* running code value */
+    int bits;                  /* bit index */
+    int n;                     /* code index */
+
+    /* The distribution counts are first used to generate the code values
+     * without bit reversal.
+     */
+    for (bits = 1; bits <= MAX_BITS; bits++) {
+        next_code[bits] = code = (code + bl_count[bits-1]) << 1;
+    }
+    /* Check that the bit counts in bl_count are consistent. The last code
+     * must be all ones.
+     */
+    Assert (code + bl_count[MAX_BITS]-1 == (1<<MAX_BITS)-1,
+            "inconsistent bit counts");
+    Tracev((stderr,"\ngen_codes: max_code %d ", max_code));
+
+    for (n = 0;  n <= max_code; n++) {
+        int len = tree[n].Len;
+        if (len == 0) continue;
+        /* Now reverse the bits */
+        tree[n].Code = bi_reverse(next_code[len]++, len);
+
+        Tracecv(tree != static_ltree, (stderr,"\nn %3d %c l %2d c %4x (%x) ",
+             n, (isgraph(n) ? n : ' '), len, tree[n].Code, next_code[len]-1));
+    }
+}
+
+/* ===========================================================================
+ * Construct one Huffman tree and assigns the code bit strings and lengths.
+ * Update the total bit length for the current block.
+ * IN assertion: the field freq is set for all tree elements.
+ * OUT assertions: the fields len and code are set to the optimal bit length
+ *     and corresponding code. The length opt_len is updated; static_len is
+ *     also updated if stree is not null. The field max_code is set.
+ */
+local void build_tree(s, desc)
+    deflate_state *s;
+    tree_desc *desc; /* the tree descriptor */
+{
+    ct_data *tree         = desc->dyn_tree;
+    const ct_data *stree  = desc->stat_desc->static_tree;
+    int elems             = desc->stat_desc->elems;
+    int n, m;          /* iterate over heap elements */
+    int max_code = -1; /* largest code with non zero frequency */
+    int node;          /* new node being created */
+
+    /* Construct the initial heap, with least frequent element in
+     * heap[SMALLEST]. The sons of heap[n] are heap[2*n] and heap[2*n+1].
+     * heap[0] is not used.
+     */
+    s->heap_len = 0, s->heap_max = HEAP_SIZE;
+
+    for (n = 0; n < elems; n++) {
+        if (tree[n].Freq != 0) {
+            s->heap[++(s->heap_len)] = max_code = n;
+            s->depth[n] = 0;
+        } else {
+            tree[n].Len = 0;
+        }
+    }
+
+    /* The pkzip format requires that at least one distance code exists,
+     * and that at least one bit should be sent even if there is only one
+     * possible code. So to avoid special checks later on we force at least
+     * two codes of non zero frequency.
+     */
+    while (s->heap_len < 2) {
+        node = s->heap[++(s->heap_len)] = (max_code < 2 ? ++max_code : 0);
+        tree[node].Freq = 1;
+        s->depth[node] = 0;
+        s->opt_len--; if (stree) s->static_len -= stree[node].Len;
+        /* node is 0 or 1 so it does not have extra bits */
+    }
+    desc->max_code = max_code;
+
+    /* The elements heap[heap_len/2+1 .. heap_len] are leaves of the tree,
+     * establish sub-heaps of increasing lengths:
+     */
+    for (n = s->heap_len/2; n >= 1; n--) pqdownheap(s, tree, n);
+
+    /* Construct the Huffman tree by repeatedly combining the least two
+     * frequent nodes.
+     */
+    node = elems;              /* next internal node of the tree */
+    do {
+        pqremove(s, tree, n);  /* n = node of least frequency */
+        m = s->heap[SMALLEST]; /* m = node of next least frequency */
+
+        s->heap[--(s->heap_max)] = n; /* keep the nodes sorted by frequency */
+        s->heap[--(s->heap_max)] = m;
+
+        /* Create a new node father of n and m */
+        tree[node].Freq = tree[n].Freq + tree[m].Freq;
+        s->depth[node] = (uch)((s->depth[n] >= s->depth[m] ?
+                                s->depth[n] : s->depth[m]) + 1);
+        tree[n].Dad = tree[m].Dad = (ush)node;
+#ifdef DUMP_BL_TREE
+        if (tree == s->bl_tree) {
+            fprintf(stderr,"\nnode %d(%d), sons %d(%d) %d(%d)",
+                    node, tree[node].Freq, n, tree[n].Freq, m, tree[m].Freq);
+        }
+#endif
+        /* and insert the new node in the heap */
+        s->heap[SMALLEST] = node++;
+        pqdownheap(s, tree, SMALLEST);
+
+    } while (s->heap_len >= 2);
+
+    s->heap[--(s->heap_max)] = s->heap[SMALLEST];
+
+    /* At this point, the fields freq and dad are set. We can now
+     * generate the bit lengths.
+     */
+    gen_bitlen(s, (tree_desc *)desc);
+
+    /* The field len is now set, we can generate the bit codes */
+    gen_codes ((ct_data *)tree, max_code, s->bl_count);
+}
+
+/* ===========================================================================
+ * Scan a literal or distance tree to determine the frequencies of the codes
+ * in the bit length tree.
+ */
+local void scan_tree (s, tree, max_code)
+    deflate_state *s;
+    ct_data *tree;   /* the tree to be scanned */
+    int max_code;    /* and its largest code of non zero frequency */
+{
+    int n;                     /* iterates over all tree elements */
+    int prevlen = -1;          /* last emitted length */
+    int curlen;                /* length of current code */
+    int nextlen = tree[0].Len; /* length of next code */
+    int count = 0;             /* repeat count of the current code */
+    int max_count = 7;         /* max repeat count */
+    int min_count = 4;         /* min repeat count */
+
+    if (nextlen == 0) max_count = 138, min_count = 3;
+    tree[max_code+1].Len = (ush)0xffff; /* guard */
+
+    for (n = 0; n <= max_code; n++) {
+        curlen = nextlen; nextlen = tree[n+1].Len;
+        if (++count < max_count && curlen == nextlen) {
+            continue;
+        } else if (count < min_count) {
+            s->bl_tree[curlen].Freq += count;
+        } else if (curlen != 0) {
+            if (curlen != prevlen) s->bl_tree[curlen].Freq++;
+            s->bl_tree[REP_3_6].Freq++;
+        } else if (count <= 10) {
+            s->bl_tree[REPZ_3_10].Freq++;
+        } else {
+            s->bl_tree[REPZ_11_138].Freq++;
+        }
+        count = 0; prevlen = curlen;
+        if (nextlen == 0) {
+            max_count = 138, min_count = 3;
+        } else if (curlen == nextlen) {
+            max_count = 6, min_count = 3;
+        } else {
+            max_count = 7, min_count = 4;
+        }
+    }
+}
+
+/* ===========================================================================
+ * Send a literal or distance tree in compressed form, using the codes in
+ * bl_tree.
+ */
+local void send_tree (s, tree, max_code)
+    deflate_state *s;
+    ct_data *tree; /* the tree to be scanned */
+    int max_code;       /* and its largest code of non zero frequency */
+{
+    int n;                     /* iterates over all tree elements */
+    int prevlen = -1;          /* last emitted length */
+    int curlen;                /* length of current code */
+    int nextlen = tree[0].Len; /* length of next code */
+    int count = 0;             /* repeat count of the current code */
+    int max_count = 7;         /* max repeat count */
+    int min_count = 4;         /* min repeat count */
+
+    /* tree[max_code+1].Len = -1; */  /* guard already set */
+    if (nextlen == 0) max_count = 138, min_count = 3;
+
+    for (n = 0; n <= max_code; n++) {
+        curlen = nextlen; nextlen = tree[n+1].Len;
+        if (++count < max_count && curlen == nextlen) {
+            continue;
+        } else if (count < min_count) {
+            do { send_code(s, curlen, s->bl_tree); } while (--count != 0);
+
+        } else if (curlen != 0) {
+            if (curlen != prevlen) {
+                send_code(s, curlen, s->bl_tree); count--;
+            }
+            Assert(count >= 3 && count <= 6, " 3_6?");
+            send_code(s, REP_3_6, s->bl_tree); send_bits(s, count-3, 2);
+
+        } else if (count <= 10) {
+            send_code(s, REPZ_3_10, s->bl_tree); send_bits(s, count-3, 3);
+
+        } else {
+            send_code(s, REPZ_11_138, s->bl_tree); send_bits(s, count-11, 7);
+        }
+        count = 0; prevlen = curlen;
+        if (nextlen == 0) {
+            max_count = 138, min_count = 3;
+        } else if (curlen == nextlen) {
+            max_count = 6, min_count = 3;
+        } else {
+            max_count = 7, min_count = 4;
+        }
+    }
+}
+
+/* ===========================================================================
+ * Construct the Huffman tree for the bit lengths and return the index in
+ * bl_order of the last bit length code to send.
+ */
+local int build_bl_tree(s)
+    deflate_state *s;
+{
+    int max_blindex;  /* index of last bit length code of non zero freq */
+
+    /* Determine the bit length frequencies for literal and distance trees */
+    scan_tree(s, (ct_data *)s->dyn_ltree, s->l_desc.max_code);
+    scan_tree(s, (ct_data *)s->dyn_dtree, s->d_desc.max_code);
+
+    /* Build the bit length tree: */
+    build_tree(s, (tree_desc *)(&(s->bl_desc)));
+    /* opt_len now includes the length of the tree representations, except
+     * the lengths of the bit lengths codes and the 5+5+4 bits for the counts.
+     */
+
+    /* Determine the number of bit length codes to send. The pkzip format
+     * requires that at least 4 bit length codes be sent. (appnote.txt says
+     * 3 but the actual value used is 4.)
+     */
+    for (max_blindex = BL_CODES-1; max_blindex >= 3; max_blindex--) {
+        if (s->bl_tree[bl_order[max_blindex]].Len != 0) break;
+    }
+    /* Update opt_len to include the bit length tree and counts */
+    s->opt_len += 3*(max_blindex+1) + 5+5+4;
+    Tracev((stderr, "\ndyn trees: dyn %ld, stat %ld",
+            s->opt_len, s->static_len));
+
+    return max_blindex;
+}
+
+/* ===========================================================================
+ * Send the header for a block using dynamic Huffman trees: the counts, the
+ * lengths of the bit length codes, the literal tree and the distance tree.
+ * IN assertion: lcodes >= 257, dcodes >= 1, blcodes >= 4.
+ */
+local void send_all_trees(s, lcodes, dcodes, blcodes)
+    deflate_state *s;
+    int lcodes, dcodes, blcodes; /* number of codes for each tree */
+{
+    int rank;                    /* index in bl_order */
+
+    Assert (lcodes >= 257 && dcodes >= 1 && blcodes >= 4, "not enough codes");
+    Assert (lcodes <= L_CODES && dcodes <= D_CODES && blcodes <= BL_CODES,
+            "too many codes");
+    Tracev((stderr, "\nbl counts: "));
+    send_bits(s, lcodes-257, 5); /* not +255 as stated in appnote.txt */
+    send_bits(s, dcodes-1,   5);
+    send_bits(s, blcodes-4,  4); /* not -3 as stated in appnote.txt */
+    for (rank = 0; rank < blcodes; rank++) {
+        Tracev((stderr, "\nbl code %2d ", bl_order[rank]));
+        send_bits(s, s->bl_tree[bl_order[rank]].Len, 3);
+    }
+    Tracev((stderr, "\nbl tree: sent %ld", s->bits_sent));
+
+    send_tree(s, (ct_data *)s->dyn_ltree, lcodes-1); /* literal tree */
+    Tracev((stderr, "\nlit tree: sent %ld", s->bits_sent));
+
+    send_tree(s, (ct_data *)s->dyn_dtree, dcodes-1); /* distance tree */
+    Tracev((stderr, "\ndist tree: sent %ld", s->bits_sent));
+}
+
+/* ===========================================================================
+ * Send a stored block
+ */
+void ZLIB_INTERNAL _tr_stored_block(s, buf, stored_len, last)
+    deflate_state *s;
+    charf *buf;       /* input block */
+    ulg stored_len;   /* length of input block */
+    int last;         /* one if this is the last block for a file */
+{
+    send_bits(s, (STORED_BLOCK<<1)+last, 3);    /* send block type */
+#ifdef DEBUG
+    s->compressed_len = (s->compressed_len + 3 + 7) & (ulg)~7L;
+    s->compressed_len += (stored_len + 4) << 3;
+#endif
+    copy_block(s, buf, (unsigned)stored_len, 1); /* with header */
+}
+
+/* ===========================================================================
+ * Flush the bits in the bit buffer to pending output (leaves at most 7 bits)
+ */
+void ZLIB_INTERNAL _tr_flush_bits(s)
+    deflate_state *s;
+{
+    bi_flush(s);
+}
+
+/* ===========================================================================
+ * Send one empty static block to give enough lookahead for inflate.
+ * This takes 10 bits, of which 7 may remain in the bit buffer.
+ */
+void ZLIB_INTERNAL _tr_align(s)
+    deflate_state *s;
+{
+    send_bits(s, STATIC_TREES<<1, 3);
+    send_code(s, END_BLOCK, static_ltree);
+#ifdef DEBUG
+    s->compressed_len += 10L; /* 3 for block type, 7 for EOB */
+#endif
+    bi_flush(s);
+}
+
+/* ===========================================================================
+ * Determine the best encoding for the current block: dynamic trees, static
+ * trees or store, and output the encoded block to the zip file.
+ */
+void ZLIB_INTERNAL _tr_flush_block(s, buf, stored_len, last)
+    deflate_state *s;
+    charf *buf;       /* input block, or NULL if too old */
+    ulg stored_len;   /* length of input block */
+    int last;         /* one if this is the last block for a file */
+{
+    int max_blindex = 0;  /* index of last bit length code of non zero freq */
+#ifndef ZLIB_PM3_TUNED
+    ulg opt_lenb, static_lenb; /* opt_len and static_len in bytes */
+
+    /* Build the Huffman trees unless a stored block is forced */
+    if (s->level > 0) {
+#endif
+        /* Check if the file is binary or text */
+        if (s->strm->data_type == Z_UNKNOWN)
+            s->strm->data_type = detect_data_type(s);
+
+        /* Construct the literal and distance trees */
+        build_tree(s, (tree_desc *)(&(s->l_desc)));
+        Tracev((stderr, "\nlit data: dyn %ld, stat %ld", s->opt_len,
+                s->static_len));
+
+        build_tree(s, (tree_desc *)(&(s->d_desc)));
+        Tracev((stderr, "\ndist data: dyn %ld, stat %ld", s->opt_len,
+                s->static_len));
+        /* At this point, opt_len and static_len are the total bit lengths of
+         * the compressed block data, excluding the tree representations.
+         */
+
+        /* Build the bit length tree for the above two trees, and get the index
+         * in bl_order of the last bit length code to send.
+         */
+        max_blindex = build_bl_tree(s);
+
+#ifndef ZLIB_PM3_TUNED
+        /* Determine the best encoding. Compute the block lengths in bytes. */
+        opt_lenb = (s->opt_len+3+7)>>3;
+        static_lenb = (s->static_len+3+7)>>3;
+
+        Tracev((stderr, "\nopt %lu(%lu) stat %lu(%lu) stored %lu lit %u ",
+                opt_lenb, s->opt_len, static_lenb, s->static_len, stored_len,
+                s->last_lit));
+
+        if (static_lenb <= opt_lenb) opt_lenb = static_lenb;
+
+    } else {
+        Assert(buf != (char*)0, "lost buf");
+        opt_lenb = static_lenb = stored_len + 5; /* force a stored block */
+    }
+
+#ifdef FORCE_STORED
+    if (buf != (char*)0) { /* force stored block */
+#else
+    if (stored_len+4 <= opt_lenb && buf != (char*)0) {
+                       /* 4: two words for the lengths */
+#endif
+        /* The test buf != NULL is only necessary if LIT_BUFSIZE > WSIZE.
+         * Otherwise we can't have processed more than WSIZE input bytes since
+         * the last block flush, because compression would have been
+         * successful. If LIT_BUFSIZE <= WSIZE, it is never too late to
+         * transform a block into a stored block.
+         */
+        _tr_stored_block(s, buf, stored_len, last);
+
+#ifdef FORCE_STATIC
+    } else if (static_lenb >= 0) { /* force static trees */
+#else
+    } else if (s->strategy == Z_FIXED || static_lenb == opt_lenb) {
+#endif
+        send_bits(s, (STATIC_TREES<<1)+last, 3);
+        compress_block(s, (const ct_data *)static_ltree,
+                       (const ct_data *)static_dtree);
+#ifdef DEBUG
+        s->compressed_len += 3 + s->static_len;
+#endif
+    } else {
+#endif /* !ZLIB_PM3_TUNED */
+               send_bits(s, (DYN_TREES<<1)+last, 3);
+        send_all_trees(s, s->l_desc.max_code+1, s->d_desc.max_code+1,
+                       max_blindex+1);
+        compress_block(s, (const ct_data *)s->dyn_ltree,
+                       (const ct_data *)s->dyn_dtree);
+#ifdef DEBUG
+        s->compressed_len += 3 + s->opt_len;
+#endif
+#ifndef ZLIB_PM3_TUNED 
+    }
+#endif 
+    Assert (s->compressed_len == s->bits_sent, "bad compressed size");
+    /* The above check is made mod 2^32, for files larger than 512 MB
+     * and uLong implemented on 32 bits.
+     */
+    init_block(s);
+
+    if (last) {
+        bi_windup(s);
+#ifdef DEBUG
+        s->compressed_len += 7;  /* align on byte boundary */
+#endif
+    }
+    Tracev((stderr,"\ncomprlen %lu(%lu) ", s->compressed_len>>3,
+           s->compressed_len-7*last));
+}
+
+/* ===========================================================================
+ * Save the match info and tally the frequency counts. Return true if
+ * the current block must be flushed.
+ */
+int ZLIB_INTERNAL _tr_tally (s, dist, lc)
+    deflate_state *s;
+    unsigned dist;  /* distance of matched string */
+    unsigned lc;    /* match length-MIN_MATCH or unmatched char (if dist==0) */
+{
+    s->d_buf[s->last_lit] = (ush)dist;
+    s->l_buf[s->last_lit++] = (uch)lc;
+    if (dist == 0) {
+        /* lc is the unmatched char */
+        s->dyn_ltree[lc].Freq++;
+    } else {
+        s->matches++;
+        /* Here, lc is the match length - MIN_MATCH */
+        dist--;             /* dist = match distance - 1 */
+        Assert((ush)dist < (ush)MAX_DIST(s) &&
+               (ush)lc <= (ush)(MAX_MATCH-MIN_MATCH) &&
+               (ush)d_code(dist) < (ush)D_CODES,  "_tr_tally: bad match");
+
+        s->dyn_ltree[_length_code[lc]+LITERALS+1].Freq++;
+        s->dyn_dtree[d_code(dist)].Freq++;
+    }
+
+#ifdef TRUNCATE_BLOCK
+    /* Try to guess if it is profitable to stop the current block here */
+    if ((s->last_lit & 0x1fff) == 0 && s->level > 2) {
+        /* Compute an upper bound for the compressed length */
+        ulg out_length = (ulg)s->last_lit*8L;
+        ulg in_length = (ulg)((long)s->strstart - s->block_start);
+        int dcode;
+        for (dcode = 0; dcode < D_CODES; dcode++) {
+            out_length += (ulg)s->dyn_dtree[dcode].Freq *
+                (5L+extra_dbits[dcode]);
+        }
+        out_length >>= 3;
+        Tracev((stderr,"\nlast_lit %u, in %ld, out ~%ld(%ld%%) ",
+               s->last_lit, in_length, out_length,
+               100L - out_length*100L/in_length));
+        if (s->matches < s->last_lit/2 && out_length < in_length/2) return 1;
+    }
+#endif
+    return (s->last_lit == s->lit_bufsize-1);
+    /* We avoid equality with lit_bufsize because of wraparound at 64K
+     * on 16 bit machines and because stored blocks are restricted to
+     * 64K-1 bytes.
+     */
+}
+
+/* ===========================================================================
+ * Send the block data compressed using the given Huffman trees
+ */
+local void compress_block(s, ltree, dtree)
+    deflate_state *s;
+    const ct_data *ltree; /* literal tree */
+    const ct_data *dtree; /* distance tree */
+{
+    unsigned dist;      /* distance of matched string */
+    int lc;             /* match length or unmatched char (if dist == 0) */
+    unsigned lx = 0;    /* running index in l_buf */
+    unsigned code;      /* the code to send */
+    int extra;          /* number of extra bits to send */
+
+    if (s->last_lit != 0) do {
+        dist = s->d_buf[lx];
+        lc = s->l_buf[lx++];
+        if (dist == 0) {
+            send_code(s, lc, ltree); /* send a literal byte */
+            Tracecv(isgraph(lc), (stderr," '%c' ", lc));
+        } else {
+            /* Here, lc is the match length - MIN_MATCH */
+            code = _length_code[lc];
+            send_code(s, code+LITERALS+1, ltree); /* send the length code */
+            extra = extra_lbits[code];
+            if (extra != 0) {
+                lc -= base_length[code];
+                send_bits(s, lc, extra);       /* send the extra length bits */
+            }
+            dist--; /* dist is now the match distance - 1 */
+            code = d_code(dist);
+            Assert (code < D_CODES, "bad d_code");
+
+            send_code(s, code, dtree);       /* send the distance code */
+            extra = extra_dbits[code];
+            if (extra != 0) {
+                dist -= base_dist[code];
+                send_bits(s, dist, extra);   /* send the extra distance bits */
+            }
+        } /* literal or match pair ? */
+
+        /* Check that the overlay between pending_buf and d_buf+l_buf is ok: */
+        Assert((uInt)(s->pending) < s->lit_bufsize + 2*lx,
+               "pendingBuf overflow");
+
+    } while (lx < s->last_lit);
+
+    send_code(s, END_BLOCK, ltree);
+}
+
+/* ===========================================================================
+ * Check if the data type is TEXT or BINARY, using the following algorithm:
+ * - TEXT if the two conditions below are satisfied:
+ *    a) There are no non-portable control characters belonging to the
+ *       "black list" (0..6, 14..25, 28..31).
+ *    b) There is at least one printable character belonging to the
+ *       "white list" (9 {TAB}, 10 {LF}, 13 {CR}, 32..255).
+ * - BINARY otherwise.
+ * - The following partially-portable control characters form a
+ *   "gray list" that is ignored in this detection algorithm:
+ *   (7 {BEL}, 8 {BS}, 11 {VT}, 12 {FF}, 26 {SUB}, 27 {ESC}).
+ * IN assertion: the fields Freq of dyn_ltree are set.
+ */
+local int detect_data_type(s)
+    deflate_state *s;
+{
+    /* black_mask is the bit mask of black-listed bytes
+     * set bits 0..6, 14..25, and 28..31
+     * 0xf3ffc07f = binary 11110011111111111100000001111111
+     */
+    unsigned long black_mask = 0xf3ffc07fUL;
+    int n;
+
+    /* Check for non-textual ("black-listed") bytes. */
+    for (n = 0; n <= 31; n++, black_mask >>= 1)
+        if ((black_mask & 1) && (s->dyn_ltree[n].Freq != 0))
+            return Z_BINARY;
+
+    /* Check for textual ("white-listed") bytes. */
+    if (s->dyn_ltree[9].Freq != 0 || s->dyn_ltree[10].Freq != 0
+            || s->dyn_ltree[13].Freq != 0)
+        return Z_TEXT;
+    for (n = 32; n < LITERALS; n++)
+        if (s->dyn_ltree[n].Freq != 0)
+            return Z_TEXT;
+
+    /* There are no "black-listed" or "white-listed" bytes:
+     * this stream either is empty or has tolerated ("gray-listed") bytes only.
+     */
+    return Z_BINARY;
+}
+
+/* ===========================================================================
+ * Reverse the first len bits of a code, using straightforward code (a faster
+ * method would use a table)
+ * IN assertion: 1 <= len <= 15
+ */
+local unsigned bi_reverse(code, len)
+    unsigned code; /* the value to invert */
+    int len;       /* its bit length */
+{
+    register unsigned res = 0;
+    do {
+        res |= code & 1;
+        code >>= 1, res <<= 1;
+    } while (--len > 0);
+    return res >> 1;
+}
+
+/* ===========================================================================
+ * Flush the bit buffer, keeping at most 7 bits in it.
+ */
+local void bi_flush(s)
+    deflate_state *s;
+{
+    if (s->bi_valid == 16) {
+        put_short(s, s->bi_buf);
+        s->bi_buf = 0;
+        s->bi_valid = 0;
+    } else if (s->bi_valid >= 8) {
+        put_byte(s, (Byte)s->bi_buf);
+        s->bi_buf >>= 8;
+        s->bi_valid -= 8;
+    }
+}
+
+/* ===========================================================================
+ * Flush the bit buffer and align the output on a byte boundary
+ */
+local void bi_windup(s)
+    deflate_state *s;
+{
+    if (s->bi_valid > 8) {
+        put_short(s, s->bi_buf);
+    } else if (s->bi_valid > 0) {
+        put_byte(s, (Byte)s->bi_buf);
+    }
+    s->bi_buf = 0;
+    s->bi_valid = 0;
+#ifdef DEBUG
+    s->bits_sent = (s->bits_sent+7) & ~7;
+#endif
+}
+
+/* ===========================================================================
+ * Copy a stored block, storing first the length and its
+ * one's complement if requested.
+ */
+local void copy_block(s, buf, len, header)
+    deflate_state *s;
+    charf    *buf;    /* the input data */
+    unsigned len;     /* its length */
+    int      header;  /* true if block header must be written */
+{
+    bi_windup(s);        /* align on byte boundary */
+
+    if (header) {
+        put_short(s, (ush)len);
+        put_short(s, (ush)~len);
+#ifdef DEBUG
+        s->bits_sent += 2*16;
+#endif
+    }
+#ifdef DEBUG
+    s->bits_sent += (ulg)len<<3;
+#endif
+    while (len--) {
+        put_byte(s, *buf++);
+    }
+}
diff --git a/zlib/trees.h b/zlib/trees.h
new file mode 100644 (file)
index 0000000..d35639d
--- /dev/null
@@ -0,0 +1,128 @@
+/* header created automatically with -DGEN_TREES_H */
+
+local const ct_data static_ltree[L_CODES+2] = {
+{{ 12},{  8}}, {{140},{  8}}, {{ 76},{  8}}, {{204},{  8}}, {{ 44},{  8}},
+{{172},{  8}}, {{108},{  8}}, {{236},{  8}}, {{ 28},{  8}}, {{156},{  8}},
+{{ 92},{  8}}, {{220},{  8}}, {{ 60},{  8}}, {{188},{  8}}, {{124},{  8}},
+{{252},{  8}}, {{  2},{  8}}, {{130},{  8}}, {{ 66},{  8}}, {{194},{  8}},
+{{ 34},{  8}}, {{162},{  8}}, {{ 98},{  8}}, {{226},{  8}}, {{ 18},{  8}},
+{{146},{  8}}, {{ 82},{  8}}, {{210},{  8}}, {{ 50},{  8}}, {{178},{  8}},
+{{114},{  8}}, {{242},{  8}}, {{ 10},{  8}}, {{138},{  8}}, {{ 74},{  8}},
+{{202},{  8}}, {{ 42},{  8}}, {{170},{  8}}, {{106},{  8}}, {{234},{  8}},
+{{ 26},{  8}}, {{154},{  8}}, {{ 90},{  8}}, {{218},{  8}}, {{ 58},{  8}},
+{{186},{  8}}, {{122},{  8}}, {{250},{  8}}, {{  6},{  8}}, {{134},{  8}},
+{{ 70},{  8}}, {{198},{  8}}, {{ 38},{  8}}, {{166},{  8}}, {{102},{  8}},
+{{230},{  8}}, {{ 22},{  8}}, {{150},{  8}}, {{ 86},{  8}}, {{214},{  8}},
+{{ 54},{  8}}, {{182},{  8}}, {{118},{  8}}, {{246},{  8}}, {{ 14},{  8}},
+{{142},{  8}}, {{ 78},{  8}}, {{206},{  8}}, {{ 46},{  8}}, {{174},{  8}},
+{{110},{  8}}, {{238},{  8}}, {{ 30},{  8}}, {{158},{  8}}, {{ 94},{  8}},
+{{222},{  8}}, {{ 62},{  8}}, {{190},{  8}}, {{126},{  8}}, {{254},{  8}},
+{{  1},{  8}}, {{129},{  8}}, {{ 65},{  8}}, {{193},{  8}}, {{ 33},{  8}},
+{{161},{  8}}, {{ 97},{  8}}, {{225},{  8}}, {{ 17},{  8}}, {{145},{  8}},
+{{ 81},{  8}}, {{209},{  8}}, {{ 49},{  8}}, {{177},{  8}}, {{113},{  8}},
+{{241},{  8}}, {{  9},{  8}}, {{137},{  8}}, {{ 73},{  8}}, {{201},{  8}},
+{{ 41},{  8}}, {{169},{  8}}, {{105},{  8}}, {{233},{  8}}, {{ 25},{  8}},
+{{153},{  8}}, {{ 89},{  8}}, {{217},{  8}}, {{ 57},{  8}}, {{185},{  8}},
+{{121},{  8}}, {{249},{  8}}, {{  5},{  8}}, {{133},{  8}}, {{ 69},{  8}},
+{{197},{  8}}, {{ 37},{  8}}, {{165},{  8}}, {{101},{  8}}, {{229},{  8}},
+{{ 21},{  8}}, {{149},{  8}}, {{ 85},{  8}}, {{213},{  8}}, {{ 53},{  8}},
+{{181},{  8}}, {{117},{  8}}, {{245},{  8}}, {{ 13},{  8}}, {{141},{  8}},
+{{ 77},{  8}}, {{205},{  8}}, {{ 45},{  8}}, {{173},{  8}}, {{109},{  8}},
+{{237},{  8}}, {{ 29},{  8}}, {{157},{  8}}, {{ 93},{  8}}, {{221},{  8}},
+{{ 61},{  8}}, {{189},{  8}}, {{125},{  8}}, {{253},{  8}}, {{ 19},{  9}},
+{{275},{  9}}, {{147},{  9}}, {{403},{  9}}, {{ 83},{  9}}, {{339},{  9}},
+{{211},{  9}}, {{467},{  9}}, {{ 51},{  9}}, {{307},{  9}}, {{179},{  9}},
+{{435},{  9}}, {{115},{  9}}, {{371},{  9}}, {{243},{  9}}, {{499},{  9}},
+{{ 11},{  9}}, {{267},{  9}}, {{139},{  9}}, {{395},{  9}}, {{ 75},{  9}},
+{{331},{  9}}, {{203},{  9}}, {{459},{  9}}, {{ 43},{  9}}, {{299},{  9}},
+{{171},{  9}}, {{427},{  9}}, {{107},{  9}}, {{363},{  9}}, {{235},{  9}},
+{{491},{  9}}, {{ 27},{  9}}, {{283},{  9}}, {{155},{  9}}, {{411},{  9}},
+{{ 91},{  9}}, {{347},{  9}}, {{219},{  9}}, {{475},{  9}}, {{ 59},{  9}},
+{{315},{  9}}, {{187},{  9}}, {{443},{  9}}, {{123},{  9}}, {{379},{  9}},
+{{251},{  9}}, {{507},{  9}}, {{  7},{  9}}, {{263},{  9}}, {{135},{  9}},
+{{391},{  9}}, {{ 71},{  9}}, {{327},{  9}}, {{199},{  9}}, {{455},{  9}},
+{{ 39},{  9}}, {{295},{  9}}, {{167},{  9}}, {{423},{  9}}, {{103},{  9}},
+{{359},{  9}}, {{231},{  9}}, {{487},{  9}}, {{ 23},{  9}}, {{279},{  9}},
+{{151},{  9}}, {{407},{  9}}, {{ 87},{  9}}, {{343},{  9}}, {{215},{  9}},
+{{471},{  9}}, {{ 55},{  9}}, {{311},{  9}}, {{183},{  9}}, {{439},{  9}},
+{{119},{  9}}, {{375},{  9}}, {{247},{  9}}, {{503},{  9}}, {{ 15},{  9}},
+{{271},{  9}}, {{143},{  9}}, {{399},{  9}}, {{ 79},{  9}}, {{335},{  9}},
+{{207},{  9}}, {{463},{  9}}, {{ 47},{  9}}, {{303},{  9}}, {{175},{  9}},
+{{431},{  9}}, {{111},{  9}}, {{367},{  9}}, {{239},{  9}}, {{495},{  9}},
+{{ 31},{  9}}, {{287},{  9}}, {{159},{  9}}, {{415},{  9}}, {{ 95},{  9}},
+{{351},{  9}}, {{223},{  9}}, {{479},{  9}}, {{ 63},{  9}}, {{319},{  9}},
+{{191},{  9}}, {{447},{  9}}, {{127},{  9}}, {{383},{  9}}, {{255},{  9}},
+{{511},{  9}}, {{  0},{  7}}, {{ 64},{  7}}, {{ 32},{  7}}, {{ 96},{  7}},
+{{ 16},{  7}}, {{ 80},{  7}}, {{ 48},{  7}}, {{112},{  7}}, {{  8},{  7}},
+{{ 72},{  7}}, {{ 40},{  7}}, {{104},{  7}}, {{ 24},{  7}}, {{ 88},{  7}},
+{{ 56},{  7}}, {{120},{  7}}, {{  4},{  7}}, {{ 68},{  7}}, {{ 36},{  7}},
+{{100},{  7}}, {{ 20},{  7}}, {{ 84},{  7}}, {{ 52},{  7}}, {{116},{  7}},
+{{  3},{  8}}, {{131},{  8}}, {{ 67},{  8}}, {{195},{  8}}, {{ 35},{  8}},
+{{163},{  8}}, {{ 99},{  8}}, {{227},{  8}}
+};
+
+local const ct_data static_dtree[D_CODES] = {
+{{ 0},{ 5}}, {{16},{ 5}}, {{ 8},{ 5}}, {{24},{ 5}}, {{ 4},{ 5}},
+{{20},{ 5}}, {{12},{ 5}}, {{28},{ 5}}, {{ 2},{ 5}}, {{18},{ 5}},
+{{10},{ 5}}, {{26},{ 5}}, {{ 6},{ 5}}, {{22},{ 5}}, {{14},{ 5}},
+{{30},{ 5}}, {{ 1},{ 5}}, {{17},{ 5}}, {{ 9},{ 5}}, {{25},{ 5}},
+{{ 5},{ 5}}, {{21},{ 5}}, {{13},{ 5}}, {{29},{ 5}}, {{ 3},{ 5}},
+{{19},{ 5}}, {{11},{ 5}}, {{27},{ 5}}, {{ 7},{ 5}}, {{23},{ 5}}
+};
+
+const uch ZLIB_INTERNAL _dist_code[DIST_CODE_LEN] = {
+ 0,  1,  2,  3,  4,  4,  5,  5,  6,  6,  6,  6,  7,  7,  7,  7,  8,  8,  8,  8,
+ 8,  8,  8,  8,  9,  9,  9,  9,  9,  9,  9,  9, 10, 10, 10, 10, 10, 10, 10, 10,
+10, 10, 10, 10, 10, 10, 10, 10, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+11, 11, 11, 11, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
+12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 13, 13, 13, 13,
+13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+13, 13, 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 15, 15, 15, 15, 15, 15, 15, 15,
+15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,  0,  0, 16, 17,
+18, 18, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 22, 22, 22, 22, 22, 22, 22, 22,
+23, 23, 23, 23, 23, 23, 23, 23, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
+24, 24, 24, 24, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
+26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 27, 27, 27, 27, 27, 27, 27, 27,
+27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
+27, 27, 27, 27, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
+28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
+28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
+28, 28, 28, 28, 28, 28, 28, 28, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
+29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
+29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
+29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29
+};
+
+const uch ZLIB_INTERNAL _length_code[MAX_MATCH-MIN_MATCH+1]= {
+ 0,  1,  2,  3,  4,  5,  6,  7,  8,  8,  9,  9, 10, 10, 11, 11, 12, 12, 12, 12,
+13, 13, 13, 13, 14, 14, 14, 14, 15, 15, 15, 15, 16, 16, 16, 16, 16, 16, 16, 16,
+17, 17, 17, 17, 17, 17, 17, 17, 18, 18, 18, 18, 18, 18, 18, 18, 19, 19, 19, 19,
+19, 19, 19, 19, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
+21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 22, 22, 22, 22,
+22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 23, 23, 23, 23, 23, 23, 23, 23,
+23, 23, 23, 23, 23, 23, 23, 23, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
+24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
+25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
+25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 26, 26, 26, 26, 26, 26, 26, 26,
+26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+26, 26, 26, 26, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
+27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 28
+};
+
+local const int base_length[LENGTH_CODES] = {
+0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 12, 14, 16, 20, 24, 28, 32, 40, 48, 56,
+64, 80, 96, 112, 128, 160, 192, 224, 0
+};
+
+local const int base_dist[D_CODES] = {
+    0,     1,     2,     3,     4,     6,     8,    12,    16,    24,
+   32,    48,    64,    96,   128,   192,   256,   384,   512,   768,
+ 1024,  1536,  2048,  3072,  4096,  6144,  8192, 12288, 16384, 24576
+};
+
diff --git a/zlib/zconf.h b/zlib/zconf.h
new file mode 100644 (file)
index 0000000..9987a77
--- /dev/null
@@ -0,0 +1,511 @@
+/* zconf.h -- configuration of the zlib compression library
+ * Copyright (C) 1995-2013 Jean-loup Gailly.
+ * For conditions of distribution and use, see copyright notice in zlib.h
+ */
+
+/* @(#) $Id$ */
+
+#ifndef ZCONF_H
+#define ZCONF_H
+
+/*
+ * If you *really* need a unique prefix for all types and library functions,
+ * compile with -DZ_PREFIX. The "standard" zlib should be compiled without it.
+ * Even better than compiling with -DZ_PREFIX would be to use configure to set
+ * this permanently in zconf.h using "./configure --zprefix".
+ */
+#ifdef Z_PREFIX     /* may be set to #if 1 by ./configure */
+#  define Z_PREFIX_SET
+
+/* all linked symbols */
+#  define _dist_code            z__dist_code
+#  define _length_code          z__length_code
+#  define _tr_align             z__tr_align
+#  define _tr_flush_bits        z__tr_flush_bits
+#  define _tr_flush_block       z__tr_flush_block
+#  define _tr_init              z__tr_init
+#  define _tr_stored_block      z__tr_stored_block
+#  define _tr_tally             z__tr_tally
+#  define adler32               z_adler32
+#  define adler32_combine       z_adler32_combine
+#  define adler32_combine64     z_adler32_combine64
+#  ifndef Z_SOLO
+#    define compress              z_compress
+#    define compress2             z_compress2
+#    define compressBound         z_compressBound
+#  endif
+#  define crc32                 z_crc32
+#  define crc32_combine         z_crc32_combine
+#  define crc32_combine64       z_crc32_combine64
+#  define deflate               z_deflate
+#  define deflateBound          z_deflateBound
+#  define deflateCopy           z_deflateCopy
+#  define deflateEnd            z_deflateEnd
+#  define deflateInit2_         z_deflateInit2_
+#  define deflateInit_          z_deflateInit_
+#  define deflateParams         z_deflateParams
+#  define deflatePending        z_deflatePending
+#  define deflatePrime          z_deflatePrime
+#  define deflateReset          z_deflateReset
+#  define deflateResetKeep      z_deflateResetKeep
+#  define deflateSetDictionary  z_deflateSetDictionary
+#  define deflateSetHeader      z_deflateSetHeader
+#  define deflateTune           z_deflateTune
+#  define deflate_copyright     z_deflate_copyright
+#  define get_crc_table         z_get_crc_table
+#  ifndef Z_SOLO
+#    define gz_error              z_gz_error
+#    define gz_intmax             z_gz_intmax
+#    define gz_strwinerror        z_gz_strwinerror
+#    define gzbuffer              z_gzbuffer
+#    define gzclearerr            z_gzclearerr
+#    define gzclose               z_gzclose
+#    define gzclose_r             z_gzclose_r
+#    define gzclose_w             z_gzclose_w
+#    define gzdirect              z_gzdirect
+#    define gzdopen               z_gzdopen
+#    define gzeof                 z_gzeof
+#    define gzerror               z_gzerror
+#    define gzflush               z_gzflush
+#    define gzgetc                z_gzgetc
+#    define gzgetc_               z_gzgetc_
+#    define gzgets                z_gzgets
+#    define gzoffset              z_gzoffset
+#    define gzoffset64            z_gzoffset64
+#    define gzopen                z_gzopen
+#    define gzopen64              z_gzopen64
+#    ifdef _WIN32
+#      define gzopen_w              z_gzopen_w
+#    endif
+#    define gzprintf              z_gzprintf
+#    define gzvprintf             z_gzvprintf
+#    define gzputc                z_gzputc
+#    define gzputs                z_gzputs
+#    define gzread                z_gzread
+#    define gzrewind              z_gzrewind
+#    define gzseek                z_gzseek
+#    define gzseek64              z_gzseek64
+#    define gzsetparams           z_gzsetparams
+#    define gztell                z_gztell
+#    define gztell64              z_gztell64
+#    define gzungetc              z_gzungetc
+#    define gzwrite               z_gzwrite
+#  endif
+#  define inflate               z_inflate
+#  define inflateBack           z_inflateBack
+#  define inflateBackEnd        z_inflateBackEnd
+#  define inflateBackInit_      z_inflateBackInit_
+#  define inflateCopy           z_inflateCopy
+#  define inflateEnd            z_inflateEnd
+#  define inflateGetHeader      z_inflateGetHeader
+#  define inflateInit2_         z_inflateInit2_
+#  define inflateInit_          z_inflateInit_
+#  define inflateMark           z_inflateMark
+#  define inflatePrime          z_inflatePrime
+#  define inflateReset          z_inflateReset
+#  define inflateReset2         z_inflateReset2
+#  define inflateSetDictionary  z_inflateSetDictionary
+#  define inflateGetDictionary  z_inflateGetDictionary
+#  define inflateSync           z_inflateSync
+#  define inflateSyncPoint      z_inflateSyncPoint
+#  define inflateUndermine      z_inflateUndermine
+#  define inflateResetKeep      z_inflateResetKeep
+#  define inflate_copyright     z_inflate_copyright
+#  define inflate_fast          z_inflate_fast
+#  define inflate_table         z_inflate_table
+#  ifndef Z_SOLO
+#    define uncompress            z_uncompress
+#  endif
+#  define zError                z_zError
+#  ifndef Z_SOLO
+#    define zcalloc               z_zcalloc
+#    define zcfree                z_zcfree
+#  endif
+#  define zlibCompileFlags      z_zlibCompileFlags
+#  define zlibVersion           z_zlibVersion
+
+/* all zlib typedefs in zlib.h and zconf.h */
+#  define Byte                  z_Byte
+#  define Bytef                 z_Bytef
+#  define alloc_func            z_alloc_func
+#  define charf                 z_charf
+#  define free_func             z_free_func
+#  ifndef Z_SOLO
+#    define gzFile                z_gzFile
+#  endif
+#  define gz_header             z_gz_header
+#  define gz_headerp            z_gz_headerp
+#  define in_func               z_in_func
+#  define intf                  z_intf
+#  define out_func              z_out_func
+#  define uInt                  z_uInt
+#  define uIntf                 z_uIntf
+#  define uLong                 z_uLong
+#  define uLongf                z_uLongf
+#  define voidp                 z_voidp
+#  define voidpc                z_voidpc
+#  define voidpf                z_voidpf
+
+/* all zlib structs in zlib.h and zconf.h */
+#  define gz_header_s           z_gz_header_s
+#  define internal_state        z_internal_state
+
+#endif
+
+#if defined(__MSDOS__) && !defined(MSDOS)
+#  define MSDOS
+#endif
+#if (defined(OS_2) || defined(__OS2__)) && !defined(OS2)
+#  define OS2
+#endif
+#if defined(_WINDOWS) && !defined(WINDOWS)
+#  define WINDOWS
+#endif
+#if defined(_WIN32) || defined(_WIN32_WCE) || defined(__WIN32__)
+#  ifndef WIN32
+#    define WIN32
+#  endif
+#endif
+#if (defined(MSDOS) || defined(OS2) || defined(WINDOWS)) && !defined(WIN32)
+#  if !defined(__GNUC__) && !defined(__FLAT__) && !defined(__386__)
+#    ifndef SYS16BIT
+#      define SYS16BIT
+#    endif
+#  endif
+#endif
+
+/*
+ * Compile with -DMAXSEG_64K if the alloc function cannot allocate more
+ * than 64k bytes at a time (needed on systems with 16-bit int).
+ */
+#ifdef SYS16BIT
+#  define MAXSEG_64K
+#endif
+#ifdef MSDOS
+#  define UNALIGNED_OK
+#endif
+
+#ifdef __STDC_VERSION__
+#  ifndef STDC
+#    define STDC
+#  endif
+#  if __STDC_VERSION__ >= 199901L
+#    ifndef STDC99
+#      define STDC99
+#    endif
+#  endif
+#endif
+#if !defined(STDC) && (defined(__STDC__) || defined(__cplusplus))
+#  define STDC
+#endif
+#if !defined(STDC) && (defined(__GNUC__) || defined(__BORLANDC__))
+#  define STDC
+#endif
+#if !defined(STDC) && (defined(MSDOS) || defined(WINDOWS) || defined(WIN32))
+#  define STDC
+#endif
+#if !defined(STDC) && (defined(OS2) || defined(__HOS_AIX__))
+#  define STDC
+#endif
+
+#if defined(__OS400__) && !defined(STDC)    /* iSeries (formerly AS/400). */
+#  define STDC
+#endif
+
+#ifndef STDC
+#  ifndef const /* cannot use !defined(STDC) && !defined(const) on Mac */
+#    define const       /* note: need a more gentle solution here */
+#  endif
+#endif
+
+#if defined(ZLIB_CONST) && !defined(z_const)
+#  define z_const const
+#else
+#  define z_const
+#endif
+
+/* Some Mac compilers merge all .h files incorrectly: */
+#if defined(__MWERKS__)||defined(applec)||defined(THINK_C)||defined(__SC__)
+#  define NO_DUMMY_DECL
+#endif
+
+/* Maximum value for memLevel in deflateInit2 */
+#ifndef MAX_MEM_LEVEL
+#  ifdef MAXSEG_64K
+#    define MAX_MEM_LEVEL 8
+#  else
+#    define MAX_MEM_LEVEL 9
+#  endif
+#endif
+
+/* Maximum value for windowBits in deflateInit2 and inflateInit2.
+ * WARNING: reducing MAX_WBITS makes minigzip unable to extract .gz files
+ * created by gzip. (Files created by minigzip can still be extracted by
+ * gzip.)
+ */
+#ifndef MAX_WBITS
+#  define MAX_WBITS   15 /* 32K LZ77 window */
+#endif
+
+/* The memory requirements for deflate are (in bytes):
+            (1 << (windowBits+2)) +  (1 << (memLevel+9))
+ that is: 128K for windowBits=15  +  128K for memLevel = 8  (default values)
+ plus a few kilobytes for small objects. For example, if you want to reduce
+ the default memory requirements from 256K to 128K, compile with
+     make CFLAGS="-O -DMAX_WBITS=14 -DMAX_MEM_LEVEL=7"
+ Of course this will generally degrade compression (there's no free lunch).
+
+   The memory requirements for inflate are (in bytes) 1 << windowBits
+ that is, 32K for windowBits=15 (default value) plus a few kilobytes
+ for small objects.
+*/
+
+                        /* Type declarations */
+
+#ifndef OF /* function prototypes */
+#  ifdef STDC
+#    define OF(args)  args
+#  else
+#    define OF(args)  ()
+#  endif
+#endif
+
+#ifndef Z_ARG /* function prototypes for stdarg */
+#  if defined(STDC) || defined(Z_HAVE_STDARG_H)
+#    define Z_ARG(args)  args
+#  else
+#    define Z_ARG(args)  ()
+#  endif
+#endif
+
+/* The following definitions for FAR are needed only for MSDOS mixed
+ * model programming (small or medium model with some far allocations).
+ * This was tested only with MSC; for other MSDOS compilers you may have
+ * to define NO_MEMCPY in zutil.h.  If you don't need the mixed model,
+ * just define FAR to be empty.
+ */
+#ifdef SYS16BIT
+#  if defined(M_I86SM) || defined(M_I86MM)
+     /* MSC small or medium model */
+#    define SMALL_MEDIUM
+#    ifdef _MSC_VER
+#      define FAR _far
+#    else
+#      define FAR far
+#    endif
+#  endif
+#  if (defined(__SMALL__) || defined(__MEDIUM__))
+     /* Turbo C small or medium model */
+#    define SMALL_MEDIUM
+#    ifdef __BORLANDC__
+#      define FAR _far
+#    else
+#      define FAR far
+#    endif
+#  endif
+#endif
+
+#if defined(WINDOWS) || defined(WIN32)
+   /* If building or using zlib as a DLL, define ZLIB_DLL.
+    * This is not mandatory, but it offers a little performance increase.
+    */
+#  ifdef ZLIB_DLL
+#    if defined(WIN32) && (!defined(__BORLANDC__) || (__BORLANDC__ >= 0x500))
+#      ifdef ZLIB_INTERNAL
+#        define ZEXTERN extern __declspec(dllexport)
+#      else
+#        define ZEXTERN extern __declspec(dllimport)
+#      endif
+#    endif
+#  endif  /* ZLIB_DLL */
+   /* If building or using zlib with the WINAPI/WINAPIV calling convention,
+    * define ZLIB_WINAPI.
+    * Caution: the standard ZLIB1.DLL is NOT compiled using ZLIB_WINAPI.
+    */
+#  ifdef ZLIB_WINAPI
+#    ifdef FAR
+#      undef FAR
+#    endif
+#    include <windows.h>
+     /* No need for _export, use ZLIB.DEF instead. */
+     /* For complete Windows compatibility, use WINAPI, not __stdcall. */
+#    define ZEXPORT WINAPI
+#    ifdef WIN32
+#      define ZEXPORTVA WINAPIV
+#    else
+#      define ZEXPORTVA FAR CDECL
+#    endif
+#  endif
+#endif
+
+#if defined (__BEOS__)
+#  ifdef ZLIB_DLL
+#    ifdef ZLIB_INTERNAL
+#      define ZEXPORT   __declspec(dllexport)
+#      define ZEXPORTVA __declspec(dllexport)
+#    else
+#      define ZEXPORT   __declspec(dllimport)
+#      define ZEXPORTVA __declspec(dllimport)
+#    endif
+#  endif
+#endif
+
+#ifndef ZEXTERN
+#  define ZEXTERN extern
+#endif
+#ifndef ZEXPORT
+#  define ZEXPORT
+#endif
+#ifndef ZEXPORTVA
+#  define ZEXPORTVA
+#endif
+
+#ifndef FAR
+#  define FAR
+#endif
+
+#if !defined(__MACTYPES__)
+typedef unsigned char  Byte;  /* 8 bits */
+#endif
+typedef unsigned int   uInt;  /* 16 bits or more */
+typedef unsigned long  uLong; /* 32 bits or more */
+
+#ifdef SMALL_MEDIUM
+   /* Borland C/C++ and some old MSC versions ignore FAR inside typedef */
+#  define Bytef Byte FAR
+#else
+   typedef Byte  FAR Bytef;
+#endif
+typedef char  FAR charf;
+typedef int   FAR intf;
+typedef uInt  FAR uIntf;
+typedef uLong FAR uLongf;
+
+#ifdef STDC
+   typedef void const *voidpc;
+   typedef void FAR   *voidpf;
+   typedef void       *voidp;
+#else
+   typedef Byte const *voidpc;
+   typedef Byte FAR   *voidpf;
+   typedef Byte       *voidp;
+#endif
+
+#if !defined(Z_U4) && !defined(Z_SOLO) && defined(STDC)
+#  include <limits.h>
+#  if (UINT_MAX == 0xffffffffUL)
+#    define Z_U4 unsigned
+#  elif (ULONG_MAX == 0xffffffffUL)
+#    define Z_U4 unsigned long
+#  elif (USHRT_MAX == 0xffffffffUL)
+#    define Z_U4 unsigned short
+#  endif
+#endif
+
+#ifdef Z_U4
+   typedef Z_U4 z_crc_t;
+#else
+   typedef unsigned long z_crc_t;
+#endif
+
+#ifdef HAVE_UNISTD_H    /* may be set to #if 1 by ./configure */
+#  define Z_HAVE_UNISTD_H
+#endif
+
+#ifdef HAVE_STDARG_H    /* may be set to #if 1 by ./configure */
+#  define Z_HAVE_STDARG_H
+#endif
+
+#ifdef STDC
+#  ifndef Z_SOLO
+#    include <sys/types.h>      /* for off_t */
+#  endif
+#endif
+
+#if defined(STDC) || defined(Z_HAVE_STDARG_H)
+#  ifndef Z_SOLO
+#    include <stdarg.h>         /* for va_list */
+#  endif
+#endif
+
+#ifdef _WIN32
+#  ifndef Z_SOLO
+#    include <stddef.h>         /* for wchar_t */
+#  endif
+#endif
+
+/* a little trick to accommodate both "#define _LARGEFILE64_SOURCE" and
+ * "#define _LARGEFILE64_SOURCE 1" as requesting 64-bit operations, (even
+ * though the former does not conform to the LFS document), but considering
+ * both "#undef _LARGEFILE64_SOURCE" and "#define _LARGEFILE64_SOURCE 0" as
+ * equivalently requesting no 64-bit operations
+ */
+#if defined(_LARGEFILE64_SOURCE) && -_LARGEFILE64_SOURCE - -1 == 1
+#  undef _LARGEFILE64_SOURCE
+#endif
+
+#if defined(__WATCOMC__) && !defined(Z_HAVE_UNISTD_H)
+#  define Z_HAVE_UNISTD_H
+#endif
+#ifndef Z_SOLO
+#  if defined(Z_HAVE_UNISTD_H) || defined(_LARGEFILE64_SOURCE)
+#    include <unistd.h>         /* for SEEK_*, off_t, and _LFS64_LARGEFILE */
+#    ifdef VMS
+#      include <unixio.h>       /* for off_t */
+#    endif
+#    ifndef z_off_t
+#      define z_off_t off_t
+#    endif
+#  endif
+#endif
+
+#if defined(_LFS64_LARGEFILE) && _LFS64_LARGEFILE-0
+#  define Z_LFS64
+#endif
+
+#if defined(_LARGEFILE64_SOURCE) && defined(Z_LFS64)
+#  define Z_LARGE64
+#endif
+
+#if defined(_FILE_OFFSET_BITS) && _FILE_OFFSET_BITS-0 == 64 && defined(Z_LFS64)
+#  define Z_WANT64
+#endif
+
+#if !defined(SEEK_SET) && !defined(Z_SOLO)
+#  define SEEK_SET        0       /* Seek from beginning of file.  */
+#  define SEEK_CUR        1       /* Seek from current position.  */
+#  define SEEK_END        2       /* Set file pointer to EOF plus "offset" */
+#endif
+
+#ifndef z_off_t
+#  define z_off_t long
+#endif
+
+#if !defined(_WIN32) && defined(Z_LARGE64)
+#  define z_off64_t off64_t
+#else
+#  if defined(_WIN32) && !defined(__GNUC__) && !defined(Z_SOLO)
+#    define z_off64_t __int64
+#  else
+#    define z_off64_t z_off_t
+#  endif
+#endif
+
+/* MVS linker does not support external names larger than 8 bytes */
+#if defined(__MVS__)
+  #pragma map(deflateInit_,"DEIN")
+  #pragma map(deflateInit2_,"DEIN2")
+  #pragma map(deflateEnd,"DEEND")
+  #pragma map(deflateBound,"DEBND")
+  #pragma map(inflateInit_,"ININ")
+  #pragma map(inflateInit2_,"ININ2")
+  #pragma map(inflateEnd,"INEND")
+  #pragma map(inflateSync,"INSY")
+  #pragma map(inflateSetDictionary,"INSEDI")
+  #pragma map(compressBound,"CMBND")
+  #pragma map(inflate_table,"INTABL")
+  #pragma map(inflate_fast,"INFA")
+  #pragma map(inflate_copyright,"INCOPY")
+#endif
+
+#endif /* ZCONF_H */
diff --git a/zlib/zlib.h b/zlib/zlib.h
new file mode 100644 (file)
index 0000000..b2aa557
--- /dev/null
@@ -0,0 +1,1786 @@
+/* zlib.h -- interface of the 'zlib' general purpose compression library
+  version 1.2.8, April 28th, 2013
+
+  Copyright (C) 1995-2013 Jean-loup Gailly and Mark Adler
+
+  This software is provided 'as-is', without any express or implied
+  warranty.  In no event will the authors be held liable for any damages
+  arising from the use of this software.
+
+  Permission is granted to anyone to use this software for any purpose,
+  including commercial applications, and to alter it and redistribute it
+  freely, subject to the following restrictions:
+
+  1. The origin of this software must not be misrepresented; you must not
+     claim that you wrote the original software. If you use this software
+     in a product, an acknowledgment in the product documentation would be
+     appreciated but is not required.
+  2. Altered source versions must be plainly marked as such, and must not be
+     misrepresented as being the original software.
+  3. This notice may not be removed or altered from any source distribution.
+
+  Jean-loup Gailly        Mark Adler
+  jloup@gzip.org          madler@alumni.caltech.edu
+
+
+  The data format used by the zlib library is described by RFCs (Request for
+  Comments) 1950 to 1952 in the files http://tools.ietf.org/html/rfc1950
+  (zlib format), rfc1951 (deflate format) and rfc1952 (gzip format).
+*/
+
+//-----------------------------------------------------------------------------
+// This version of zlib is modified for use within the Proxmark3 project. 
+// Files from the original distribution which are not required for this
+// purpose are not included. All modifications can easily be found
+// by searching for #ifdef ZLIB_PM3_TUNED and #ifndef ZLIB_PM3_TUNED.
+//-----------------------------------------------------------------------------
+
+#ifndef ZLIB_H
+#define ZLIB_H
+
+#include "zconf.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef ZLIB_PM3_TUNED
+#define ZLIB_VERSION "1.2.8"
+#define ZLIB_VERNUM 0x1280
+#define ZLIB_VER_MAJOR 1
+#define ZLIB_VER_MINOR 2
+#define ZLIB_VER_REVISION 8
+#define ZLIB_VER_SUBREVISION 0
+#else
+#define ZLIB_VERSION "1.2.8.f-Proxmark3"
+#define ZLIB_VERNUM 0x128f
+#define ZLIB_VER_MAJOR 1
+#define ZLIB_VER_MINOR 2
+#define ZLIB_VER_REVISION 8
+#define ZLIB_VER_SUBREVISION f
+#endif
+
+
+
+/*
+    The 'zlib' compression library provides in-memory compression and
+  decompression functions, including integrity checks of the uncompressed data.
+  This version of the library supports only one compression method (deflation)
+  but other algorithms will be added later and will have the same stream
+  interface.
+
+    Compression can be done in a single step if the buffers are large enough,
+  or can be done by repeated calls of the compression function.  In the latter
+  case, the application must provide more input and/or consume the output
+  (providing more output space) before each call.
+
+    The compressed data format used by default by the in-memory functions is
+  the zlib format, which is a zlib wrapper documented in RFC 1950, wrapped
+  around a deflate stream, which is itself documented in RFC 1951.
+
+    The library also supports reading and writing files in gzip (.gz) format
+  with an interface similar to that of stdio using the functions that start
+  with "gz".  The gzip format is different from the zlib format.  gzip is a
+  gzip wrapper, documented in RFC 1952, wrapped around a deflate stream.
+
+    This library can optionally read and write gzip streams in memory as well.
+
+    The zlib format was designed to be compact and fast for use in memory
+  and on communications channels.  The gzip format was designed for single-
+  file compression on file systems, has a larger header than zlib to maintain
+  directory information, and uses a different, slower check method than zlib.
+
+    The library does not install any signal handler.  The decoder checks
+  the consistency of the compressed data, so the library should never crash
+  even in case of corrupted input.
+*/
+
+typedef voidpf (*alloc_func) OF((voidpf opaque, uInt items, uInt size));
+typedef void   (*free_func)  OF((voidpf opaque, voidpf address));
+
+struct internal_state;
+
+typedef struct z_stream_s {
+    z_const Bytef *next_in;     /* next input byte */
+    uInt     avail_in;  /* number of bytes available at next_in */
+    uLong    total_in;  /* total number of input bytes read so far */
+
+    Bytef    *next_out; /* next output byte should be put there */
+    uInt     avail_out; /* remaining free space at next_out */
+    uLong    total_out; /* total number of bytes output so far */
+
+    z_const char *msg;  /* last error message, NULL if no error */
+    struct internal_state FAR *state; /* not visible by applications */
+
+    alloc_func zalloc;  /* used to allocate the internal state */
+    free_func  zfree;   /* used to free the internal state */
+    voidpf     opaque;  /* private data object passed to zalloc and zfree */
+
+    int     data_type;  /* best guess about the data type: binary or text */
+    uLong   adler;      /* adler32 value of the uncompressed data */
+    uLong   reserved;   /* reserved for future use */
+} z_stream;
+
+typedef z_stream FAR *z_streamp;
+
+/*
+     gzip header information passed to and from zlib routines.  See RFC 1952
+  for more details on the meanings of these fields.
+*/
+typedef struct gz_header_s {
+    int     text;       /* true if compressed data believed to be text */
+    uLong   time;       /* modification time */
+    int     xflags;     /* extra flags (not used when writing a gzip file) */
+    int     os;         /* operating system */
+    Bytef   *extra;     /* pointer to extra field or Z_NULL if none */
+    uInt    extra_len;  /* extra field length (valid if extra != Z_NULL) */
+    uInt    extra_max;  /* space at extra (only when reading header) */
+    Bytef   *name;      /* pointer to zero-terminated file name or Z_NULL */
+    uInt    name_max;   /* space at name (only when reading header) */
+    Bytef   *comment;   /* pointer to zero-terminated comment or Z_NULL */
+    uInt    comm_max;   /* space at comment (only when reading header) */
+    int     hcrc;       /* true if there was or will be a header crc */
+    int     done;       /* true when done reading gzip header (not used
+                           when writing a gzip file) */
+} gz_header;
+
+typedef gz_header FAR *gz_headerp;
+
+/*
+     The application must update next_in and avail_in when avail_in has dropped
+   to zero.  It must update next_out and avail_out when avail_out has dropped
+   to zero.  The application must initialize zalloc, zfree and opaque before
+   calling the init function.  All other fields are set by the compression
+   library and must not be updated by the application.
+
+     The opaque value provided by the application will be passed as the first
+   parameter for calls of zalloc and zfree.  This can be useful for custom
+   memory management.  The compression library attaches no meaning to the
+   opaque value.
+
+     zalloc must return Z_NULL if there is not enough memory for the object.
+   If zlib is used in a multi-threaded application, zalloc and zfree must be
+   thread safe.
+
+     On 16-bit systems, the functions zalloc and zfree must be able to allocate
+   exactly 65536 bytes, but will not be required to allocate more than this if
+   the symbol MAXSEG_64K is defined (see zconf.h).  WARNING: On MSDOS, pointers
+   returned by zalloc for objects of exactly 65536 bytes *must* have their
+   offset normalized to zero.  The default allocation function provided by this
+   library ensures this (see zutil.c).  To reduce memory requirements and avoid
+   any allocation of 64K objects, at the expense of compression ratio, compile
+   the library with -DMAX_WBITS=14 (see zconf.h).
+
+     The fields total_in and total_out can be used for statistics or progress
+   reports.  After compression, total_in holds the total size of the
+   uncompressed data and may be saved for use in the decompressor (particularly
+   if the decompressor wants to decompress everything in a single step).
+*/
+
+                        /* constants */
+
+#define Z_NO_FLUSH      0
+#define Z_PARTIAL_FLUSH 1
+#define Z_SYNC_FLUSH    2
+#define Z_FULL_FLUSH    3
+#define Z_FINISH        4
+#define Z_BLOCK         5
+#define Z_TREES         6
+/* Allowed flush values; see deflate() and inflate() below for details */
+
+#define Z_OK            0
+#define Z_STREAM_END    1
+#define Z_NEED_DICT     2
+#define Z_ERRNO        (-1)
+#define Z_STREAM_ERROR (-2)
+#define Z_DATA_ERROR   (-3)
+#define Z_MEM_ERROR    (-4)
+#define Z_BUF_ERROR    (-5)
+#define Z_VERSION_ERROR (-6)
+/* Return codes for the compression/decompression functions. Negative values
+ * are errors, positive values are used for special but normal events.
+ */
+
+#define Z_NO_COMPRESSION         0
+#define Z_BEST_SPEED             1
+#define Z_BEST_COMPRESSION       9
+#define Z_DEFAULT_COMPRESSION  (-1)
+/* compression levels */
+
+#define Z_FILTERED            1
+#define Z_HUFFMAN_ONLY        2
+#define Z_RLE                 3
+#define Z_FIXED               4
+#define Z_DEFAULT_STRATEGY    0
+/* compression strategy; see deflateInit2() below for details */
+
+#define Z_BINARY   0
+#define Z_TEXT     1
+#define Z_ASCII    Z_TEXT   /* for compatibility with 1.2.2 and earlier */
+#define Z_UNKNOWN  2
+/* Possible values of the data_type field (though see inflate()) */
+
+#define Z_DEFLATED   8
+/* The deflate compression method (the only one supported in this version) */
+
+#define Z_NULL  0  /* for initializing zalloc, zfree, opaque */
+
+#define zlib_version zlibVersion()
+/* for compatibility with versions < 1.0.2 */
+
+
+                        /* basic functions */
+
+ZEXTERN const char * ZEXPORT zlibVersion OF((void));
+/* The application can compare zlibVersion and ZLIB_VERSION for consistency.
+   If the first character differs, the library code actually used is not
+   compatible with the zlib.h header file used by the application.  This check
+   is automatically made by deflateInit and inflateInit.
+ */
+
+/*
+ZEXTERN int ZEXPORT deflateInit OF((z_streamp strm, int level));
+
+     Initializes the internal stream state for compression.  The fields
+   zalloc, zfree and opaque must be initialized before by the caller.  If
+   zalloc and zfree are set to Z_NULL, deflateInit updates them to use default
+   allocation functions.
+
+     The compression level must be Z_DEFAULT_COMPRESSION, or between 0 and 9:
+   1 gives best speed, 9 gives best compression, 0 gives no compression at all
+   (the input data is simply copied a block at a time).  Z_DEFAULT_COMPRESSION
+   requests a default compromise between speed and compression (currently
+   equivalent to level 6).
+
+     deflateInit returns Z_OK if success, Z_MEM_ERROR if there was not enough
+   memory, Z_STREAM_ERROR if level is not a valid compression level, or
+   Z_VERSION_ERROR if the zlib library version (zlib_version) is incompatible
+   with the version assumed by the caller (ZLIB_VERSION).  msg is set to null
+   if there is no error message.  deflateInit does not perform any compression:
+   this will be done by deflate().
+*/
+
+
+ZEXTERN int ZEXPORT deflate OF((z_streamp strm, int flush));
+/*
+    deflate compresses as much data as possible, and stops when the input
+  buffer becomes empty or the output buffer becomes full.  It may introduce
+  some output latency (reading input without producing any output) except when
+  forced to flush.
+
+    The detailed semantics are as follows.  deflate performs one or both of the
+  following actions:
+
+  - Compress more input starting at next_in and update next_in and avail_in
+    accordingly.  If not all input can be processed (because there is not
+    enough room in the output buffer), next_in and avail_in are updated and
+    processing will resume at this point for the next call of deflate().
+
+  - Provide more output starting at next_out and update next_out and avail_out
+    accordingly.  This action is forced if the parameter flush is non zero.
+    Forcing flush frequently degrades the compression ratio, so this parameter
+    should be set only when necessary (in interactive applications).  Some
+    output may be provided even if flush is not set.
+
+    Before the call of deflate(), the application should ensure that at least
+  one of the actions is possible, by providing more input and/or consuming more
+  output, and updating avail_in or avail_out accordingly; avail_out should
+  never be zero before the call.  The application can consume the compressed
+  output when it wants, for example when the output buffer is full (avail_out
+  == 0), or after each call of deflate().  If deflate returns Z_OK and with
+  zero avail_out, it must be called again after making room in the output
+  buffer because there might be more output pending.
+
+    Normally the parameter flush is set to Z_NO_FLUSH, which allows deflate to
+  decide how much data to accumulate before producing output, in order to
+  maximize compression.
+
+    If the parameter flush is set to Z_SYNC_FLUSH, all pending output is
+  flushed to the output buffer and the output is aligned on a byte boundary, so
+  that the decompressor can get all input data available so far.  (In
+  particular avail_in is zero after the call if enough output space has been
+  provided before the call.) Flushing may degrade compression for some
+  compression algorithms and so it should be used only when necessary.  This
+  completes the current deflate block and follows it with an empty stored block
+  that is three bits plus filler bits to the next byte, followed by four bytes
+  (00 00 ff ff).
+
+    If flush is set to Z_PARTIAL_FLUSH, all pending output is flushed to the
+  output buffer, but the output is not aligned to a byte boundary.  All of the
+  input data so far will be available to the decompressor, as for Z_SYNC_FLUSH.
+  This completes the current deflate block and follows it with an empty fixed
+  codes block that is 10 bits long.  This assures that enough bytes are output
+  in order for the decompressor to finish the block before the empty fixed code
+  block.
+
+    If flush is set to Z_BLOCK, a deflate block is completed and emitted, as
+  for Z_SYNC_FLUSH, but the output is not aligned on a byte boundary, and up to
+  seven bits of the current block are held to be written as the next byte after
+  the next deflate block is completed.  In this case, the decompressor may not
+  be provided enough bits at this point in order to complete decompression of
+  the data provided so far to the compressor.  It may need to wait for the next
+  block to be emitted.  This is for advanced applications that need to control
+  the emission of deflate blocks.
+
+    If flush is set to Z_FULL_FLUSH, all output is flushed as with
+  Z_SYNC_FLUSH, and the compression state is reset so that decompression can
+  restart from this point if previous compressed data has been damaged or if
+  random access is desired.  Using Z_FULL_FLUSH too often can seriously degrade
+  compression.
+
+    If deflate returns with avail_out == 0, this function must be called again
+  with the same value of the flush parameter and more output space (updated
+  avail_out), until the flush is complete (deflate returns with non-zero
+  avail_out).  In the case of a Z_FULL_FLUSH or Z_SYNC_FLUSH, make sure that
+  avail_out is greater than six to avoid repeated flush markers due to
+  avail_out == 0 on return.
+
+    If the parameter flush is set to Z_FINISH, pending input is processed,
+  pending output is flushed and deflate returns with Z_STREAM_END if there was
+  enough output space; if deflate returns with Z_OK, this function must be
+  called again with Z_FINISH and more output space (updated avail_out) but no
+  more input data, until it returns with Z_STREAM_END or an error.  After
+  deflate has returned Z_STREAM_END, the only possible operations on the stream
+  are deflateReset or deflateEnd.
+
+    Z_FINISH can be used immediately after deflateInit if all the compression
+  is to be done in a single step.  In this case, avail_out must be at least the
+  value returned by deflateBound (see below).  Then deflate is guaranteed to
+  return Z_STREAM_END.  If not enough output space is provided, deflate will
+  not return Z_STREAM_END, and it must be called again as described above.
+
+    deflate() sets strm->adler to the adler32 checksum of all input read
+  so far (that is, total_in bytes).
+
+    deflate() may update strm->data_type if it can make a good guess about
+  the input data type (Z_BINARY or Z_TEXT).  In doubt, the data is considered
+  binary.  This field is only for information purposes and does not affect the
+  compression algorithm in any manner.
+
+    deflate() returns Z_OK if some progress has been made (more input
+  processed or more output produced), Z_STREAM_END if all input has been
+  consumed and all output has been produced (only when flush is set to
+  Z_FINISH), Z_STREAM_ERROR if the stream state was inconsistent (for example
+  if next_in or next_out was Z_NULL), Z_BUF_ERROR if no progress is possible
+  (for example avail_in or avail_out was zero).  Note that Z_BUF_ERROR is not
+  fatal, and deflate() can be called again with more input and more output
+  space to continue compressing.
+*/
+
+
+ZEXTERN int ZEXPORT deflateEnd OF((z_streamp strm));
+/*
+     All dynamically allocated data structures for this stream are freed.
+   This function discards any unprocessed input and does not flush any pending
+   output.
+
+     deflateEnd returns Z_OK if success, Z_STREAM_ERROR if the
+   stream state was inconsistent, Z_DATA_ERROR if the stream was freed
+   prematurely (some input or output was discarded).  In the error case, msg
+   may be set but then points to a static string (which must not be
+   deallocated).
+*/
+
+
+/*
+ZEXTERN int ZEXPORT inflateInit OF((z_streamp strm));
+
+     Initializes the internal stream state for decompression.  The fields
+   next_in, avail_in, zalloc, zfree and opaque must be initialized before by
+   the caller.  If next_in is not Z_NULL and avail_in is large enough (the
+   exact value depends on the compression method), inflateInit determines the
+   compression method from the zlib header and allocates all data structures
+   accordingly; otherwise the allocation will be deferred to the first call of
+   inflate.  If zalloc and zfree are set to Z_NULL, inflateInit updates them to
+   use default allocation functions.
+
+     inflateInit returns Z_OK if success, Z_MEM_ERROR if there was not enough
+   memory, Z_VERSION_ERROR if the zlib library version is incompatible with the
+   version assumed by the caller, or Z_STREAM_ERROR if the parameters are
+   invalid, such as a null pointer to the structure.  msg is set to null if
+   there is no error message.  inflateInit does not perform any decompression
+   apart from possibly reading the zlib header if present: actual decompression
+   will be done by inflate().  (So next_in and avail_in may be modified, but
+   next_out and avail_out are unused and unchanged.) The current implementation
+   of inflateInit() does not process any header information -- that is deferred
+   until inflate() is called.
+*/
+
+
+ZEXTERN int ZEXPORT inflate OF((z_streamp strm, int flush));
+/*
+    inflate decompresses as much data as possible, and stops when the input
+  buffer becomes empty or the output buffer becomes full.  It may introduce
+  some output latency (reading input without producing any output) except when
+  forced to flush.
+
+  The detailed semantics are as follows.  inflate performs one or both of the
+  following actions:
+
+  - Decompress more input starting at next_in and update next_in and avail_in
+    accordingly.  If not all input can be processed (because there is not
+    enough room in the output buffer), next_in is updated and processing will
+    resume at this point for the next call of inflate().
+
+  - Provide more output starting at next_out and update next_out and avail_out
+    accordingly.  inflate() provides as much output as possible, until there is
+    no more input data or no more space in the output buffer (see below about
+    the flush parameter).
+
+    Before the call of inflate(), the application should ensure that at least
+  one of the actions is possible, by providing more input and/or consuming more
+  output, and updating the next_* and avail_* values accordingly.  The
+  application can consume the uncompressed output when it wants, for example
+  when the output buffer is full (avail_out == 0), or after each call of
+  inflate().  If inflate returns Z_OK and with zero avail_out, it must be
+  called again after making room in the output buffer because there might be
+  more output pending.
+
+    The flush parameter of inflate() can be Z_NO_FLUSH, Z_SYNC_FLUSH, Z_FINISH,
+  Z_BLOCK, or Z_TREES.  Z_SYNC_FLUSH requests that inflate() flush as much
+  output as possible to the output buffer.  Z_BLOCK requests that inflate()
+  stop if and when it gets to the next deflate block boundary.  When decoding
+  the zlib or gzip format, this will cause inflate() to return immediately
+  after the header and before the first block.  When doing a raw inflate,
+  inflate() will go ahead and process the first block, and will return when it
+  gets to the end of that block, or when it runs out of data.
+
+    The Z_BLOCK option assists in appending to or combining deflate streams.
+  Also to assist in this, on return inflate() will set strm->data_type to the
+  number of unused bits in the last byte taken from strm->next_in, plus 64 if
+  inflate() is currently decoding the last block in the deflate stream, plus
+  128 if inflate() returned immediately after decoding an end-of-block code or
+  decoding the complete header up to just before the first byte of the deflate
+  stream.  The end-of-block will not be indicated until all of the uncompressed
+  data from that block has been written to strm->next_out.  The number of
+  unused bits may in general be greater than seven, except when bit 7 of
+  data_type is set, in which case the number of unused bits will be less than
+  eight.  data_type is set as noted here every time inflate() returns for all
+  flush options, and so can be used to determine the amount of currently
+  consumed input in bits.
+
+    The Z_TREES option behaves as Z_BLOCK does, but it also returns when the
+  end of each deflate block header is reached, before any actual data in that
+  block is decoded.  This allows the caller to determine the length of the
+  deflate block header for later use in random access within a deflate block.
+  256 is added to the value of strm->data_type when inflate() returns
+  immediately after reaching the end of the deflate block header.
+
+    inflate() should normally be called until it returns Z_STREAM_END or an
+  error.  However if all decompression is to be performed in a single step (a
+  single call of inflate), the parameter flush should be set to Z_FINISH.  In
+  this case all pending input is processed and all pending output is flushed;
+  avail_out must be large enough to hold all of the uncompressed data for the
+  operation to complete.  (The size of the uncompressed data may have been
+  saved by the compressor for this purpose.) The use of Z_FINISH is not
+  required to perform an inflation in one step.  However it may be used to
+  inform inflate that a faster approach can be used for the single inflate()
+  call.  Z_FINISH also informs inflate to not maintain a sliding window if the
+  stream completes, which reduces inflate's memory footprint.  If the stream
+  does not complete, either because not all of the stream is provided or not
+  enough output space is provided, then a sliding window will be allocated and
+  inflate() can be called again to continue the operation as if Z_NO_FLUSH had
+  been used.
+
+     In this implementation, inflate() always flushes as much output as
+  possible to the output buffer, and always uses the faster approach on the
+  first call.  So the effects of the flush parameter in this implementation are
+  on the return value of inflate() as noted below, when inflate() returns early
+  when Z_BLOCK or Z_TREES is used, and when inflate() avoids the allocation of
+  memory for a sliding window when Z_FINISH is used.
+
+     If a preset dictionary is needed after this call (see inflateSetDictionary
+  below), inflate sets strm->adler to the Adler-32 checksum of the dictionary
+  chosen by the compressor and returns Z_NEED_DICT; otherwise it sets
+  strm->adler to the Adler-32 checksum of all output produced so far (that is,
+  total_out bytes) and returns Z_OK, Z_STREAM_END or an error code as described
+  below.  At the end of the stream, inflate() checks that its computed adler32
+  checksum is equal to that saved by the compressor and returns Z_STREAM_END
+  only if the checksum is correct.
+
+    inflate() can decompress and check either zlib-wrapped or gzip-wrapped
+  deflate data.  The header type is detected automatically, if requested when
+  initializing with inflateInit2().  Any information contained in the gzip
+  header is not retained, so applications that need that information should
+  instead use raw inflate, see inflateInit2() below, or inflateBack() and
+  perform their own processing of the gzip header and trailer.  When processing
+  gzip-wrapped deflate data, strm->adler32 is set to the CRC-32 of the output
+  producted so far.  The CRC-32 is checked against the gzip trailer.
+
+    inflate() returns Z_OK if some progress has been made (more input processed
+  or more output produced), Z_STREAM_END if the end of the compressed data has
+  been reached and all uncompressed output has been produced, Z_NEED_DICT if a
+  preset dictionary is needed at this point, Z_DATA_ERROR if the input data was
+  corrupted (input stream not conforming to the zlib format or incorrect check
+  value), Z_STREAM_ERROR if the stream structure was inconsistent (for example
+  next_in or next_out was Z_NULL), Z_MEM_ERROR if there was not enough memory,
+  Z_BUF_ERROR if no progress is possible or if there was not enough room in the
+  output buffer when Z_FINISH is used.  Note that Z_BUF_ERROR is not fatal, and
+  inflate() can be called again with more input and more output space to
+  continue decompressing.  If Z_DATA_ERROR is returned, the application may
+  then call inflateSync() to look for a good compression block if a partial
+  recovery of the data is desired.
+*/
+
+
+ZEXTERN int ZEXPORT inflateEnd OF((z_streamp strm));
+/*
+     All dynamically allocated data structures for this stream are freed.
+   This function discards any unprocessed input and does not flush any pending
+   output.
+
+     inflateEnd returns Z_OK if success, Z_STREAM_ERROR if the stream state
+   was inconsistent.  In the error case, msg may be set but then points to a
+   static string (which must not be deallocated).
+*/
+
+
+                        /* Advanced functions */
+
+/*
+    The following functions are needed only in some special applications.
+*/
+
+/*
+ZEXTERN int ZEXPORT deflateInit2 OF((z_streamp strm,
+                                     int  level,
+                                     int  method,
+                                     int  windowBits,
+                                     int  memLevel,
+                                     int  strategy));
+
+     This is another version of deflateInit with more compression options.  The
+   fields next_in, zalloc, zfree and opaque must be initialized before by the
+   caller.
+
+     The method parameter is the compression method.  It must be Z_DEFLATED in
+   this version of the library.
+
+     The windowBits parameter is the base two logarithm of the window size
+   (the size of the history buffer).  It should be in the range 8..15 for this
+   version of the library.  Larger values of this parameter result in better
+   compression at the expense of memory usage.  The default value is 15 if
+   deflateInit is used instead.
+
+     windowBits can also be -8..-15 for raw deflate.  In this case, -windowBits
+   determines the window size.  deflate() will then generate raw deflate data
+   with no zlib header or trailer, and will not compute an adler32 check value.
+
+     windowBits can also be greater than 15 for optional gzip encoding.  Add
+   16 to windowBits to write a simple gzip header and trailer around the
+   compressed data instead of a zlib wrapper.  The gzip header will have no
+   file name, no extra data, no comment, no modification time (set to zero), no
+   header crc, and the operating system will be set to 255 (unknown).  If a
+   gzip stream is being written, strm->adler is a crc32 instead of an adler32.
+
+     The memLevel parameter specifies how much memory should be allocated
+   for the internal compression state.  memLevel=1 uses minimum memory but is
+   slow and reduces compression ratio; memLevel=9 uses maximum memory for
+   optimal speed.  The default value is 8.  See zconf.h for total memory usage
+   as a function of windowBits and memLevel.
+
+     The strategy parameter is used to tune the compression algorithm.  Use the
+   value Z_DEFAULT_STRATEGY for normal data, Z_FILTERED for data produced by a
+   filter (or predictor), Z_HUFFMAN_ONLY to force Huffman encoding only (no
+   string match), or Z_RLE to limit match distances to one (run-length
+   encoding).  Filtered data consists mostly of small values with a somewhat
+   random distribution.  In this case, the compression algorithm is tuned to
+   compress them better.  The effect of Z_FILTERED is to force more Huffman
+   coding and less string matching; it is somewhat intermediate between
+   Z_DEFAULT_STRATEGY and Z_HUFFMAN_ONLY.  Z_RLE is designed to be almost as
+   fast as Z_HUFFMAN_ONLY, but give better compression for PNG image data.  The
+   strategy parameter only affects the compression ratio but not the
+   correctness of the compressed output even if it is not set appropriately.
+   Z_FIXED prevents the use of dynamic Huffman codes, allowing for a simpler
+   decoder for special applications.
+
+     deflateInit2 returns Z_OK if success, Z_MEM_ERROR if there was not enough
+   memory, Z_STREAM_ERROR if any parameter is invalid (such as an invalid
+   method), or Z_VERSION_ERROR if the zlib library version (zlib_version) is
+   incompatible with the version assumed by the caller (ZLIB_VERSION).  msg is
+   set to null if there is no error message.  deflateInit2 does not perform any
+   compression: this will be done by deflate().
+*/
+
+ZEXTERN int ZEXPORT deflateSetDictionary OF((z_streamp strm,
+                                             const Bytef *dictionary,
+                                             uInt  dictLength));
+/*
+     Initializes the compression dictionary from the given byte sequence
+   without producing any compressed output.  When using the zlib format, this
+   function must be called immediately after deflateInit, deflateInit2 or
+   deflateReset, and before any call of deflate.  When doing raw deflate, this
+   function must be called either before any call of deflate, or immediately
+   after the completion of a deflate block, i.e. after all input has been
+   consumed and all output has been delivered when using any of the flush
+   options Z_BLOCK, Z_PARTIAL_FLUSH, Z_SYNC_FLUSH, or Z_FULL_FLUSH.  The
+   compressor and decompressor must use exactly the same dictionary (see
+   inflateSetDictionary).
+
+     The dictionary should consist of strings (byte sequences) that are likely
+   to be encountered later in the data to be compressed, with the most commonly
+   used strings preferably put towards the end of the dictionary.  Using a
+   dictionary is most useful when the data to be compressed is short and can be
+   predicted with good accuracy; the data can then be compressed better than
+   with the default empty dictionary.
+
+     Depending on the size of the compression data structures selected by
+   deflateInit or deflateInit2, a part of the dictionary may in effect be
+   discarded, for example if the dictionary is larger than the window size
+   provided in deflateInit or deflateInit2.  Thus the strings most likely to be
+   useful should be put at the end of the dictionary, not at the front.  In
+   addition, the current implementation of deflate will use at most the window
+   size minus 262 bytes of the provided dictionary.
+
+     Upon return of this function, strm->adler is set to the adler32 value
+   of the dictionary; the decompressor may later use this value to determine
+   which dictionary has been used by the compressor.  (The adler32 value
+   applies to the whole dictionary even if only a subset of the dictionary is
+   actually used by the compressor.) If a raw deflate was requested, then the
+   adler32 value is not computed and strm->adler is not set.
+
+     deflateSetDictionary returns Z_OK if success, or Z_STREAM_ERROR if a
+   parameter is invalid (e.g.  dictionary being Z_NULL) or the stream state is
+   inconsistent (for example if deflate has already been called for this stream
+   or if not at a block boundary for raw deflate).  deflateSetDictionary does
+   not perform any compression: this will be done by deflate().
+*/
+
+ZEXTERN int ZEXPORT deflateCopy OF((z_streamp dest,
+                                    z_streamp source));
+/*
+     Sets the destination stream as a complete copy of the source stream.
+
+     This function can be useful when several compression strategies will be
+   tried, for example when there are several ways of pre-processing the input
+   data with a filter.  The streams that will be discarded should then be freed
+   by calling deflateEnd.  Note that deflateCopy duplicates the internal
+   compression state which can be quite large, so this strategy is slow and can
+   consume lots of memory.
+
+     deflateCopy returns Z_OK if success, Z_MEM_ERROR if there was not
+   enough memory, Z_STREAM_ERROR if the source stream state was inconsistent
+   (such as zalloc being Z_NULL).  msg is left unchanged in both source and
+   destination.
+*/
+
+ZEXTERN int ZEXPORT deflateReset OF((z_streamp strm));
+/*
+     This function is equivalent to deflateEnd followed by deflateInit,
+   but does not free and reallocate all the internal compression state.  The
+   stream will keep the same compression level and any other attributes that
+   may have been set by deflateInit2.
+
+     deflateReset returns Z_OK if success, or Z_STREAM_ERROR if the source
+   stream state was inconsistent (such as zalloc or state being Z_NULL).
+*/
+
+ZEXTERN int ZEXPORT deflateParams OF((z_streamp strm,
+                                      int level,
+                                      int strategy));
+/*
+     Dynamically update the compression level and compression strategy.  The
+   interpretation of level and strategy is as in deflateInit2.  This can be
+   used to switch between compression and straight copy of the input data, or
+   to switch to a different kind of input data requiring a different strategy.
+   If the compression level is changed, the input available so far is
+   compressed with the old level (and may be flushed); the new level will take
+   effect only at the next call of deflate().
+
+     Before the call of deflateParams, the stream state must be set as for
+   a call of deflate(), since the currently available input may have to be
+   compressed and flushed.  In particular, strm->avail_out must be non-zero.
+
+     deflateParams returns Z_OK if success, Z_STREAM_ERROR if the source
+   stream state was inconsistent or if a parameter was invalid, Z_BUF_ERROR if
+   strm->avail_out was zero.
+*/
+
+ZEXTERN int ZEXPORT deflateTune OF((z_streamp strm,
+                                    int good_length,
+                                    int max_lazy,
+                                    int nice_length,
+                                    int max_chain));
+/*
+     Fine tune deflate's internal compression parameters.  This should only be
+   used by someone who understands the algorithm used by zlib's deflate for
+   searching for the best matching string, and even then only by the most
+   fanatic optimizer trying to squeeze out the last compressed bit for their
+   specific input data.  Read the deflate.c source code for the meaning of the
+   max_lazy, good_length, nice_length, and max_chain parameters.
+
+     deflateTune() can be called after deflateInit() or deflateInit2(), and
+   returns Z_OK on success, or Z_STREAM_ERROR for an invalid deflate stream.
+ */
+
+ZEXTERN uLong ZEXPORT deflateBound OF((z_streamp strm,
+                                       uLong sourceLen));
+/*
+     deflateBound() returns an upper bound on the compressed size after
+   deflation of sourceLen bytes.  It must be called after deflateInit() or
+   deflateInit2(), and after deflateSetHeader(), if used.  This would be used
+   to allocate an output buffer for deflation in a single pass, and so would be
+   called before deflate().  If that first deflate() call is provided the
+   sourceLen input bytes, an output buffer allocated to the size returned by
+   deflateBound(), and the flush value Z_FINISH, then deflate() is guaranteed
+   to return Z_STREAM_END.  Note that it is possible for the compressed size to
+   be larger than the value returned by deflateBound() if flush options other
+   than Z_FINISH or Z_NO_FLUSH are used.
+*/
+
+ZEXTERN int ZEXPORT deflatePending OF((z_streamp strm,
+                                       unsigned *pending,
+                                       int *bits));
+/*
+     deflatePending() returns the number of bytes and bits of output that have
+   been generated, but not yet provided in the available output.  The bytes not
+   provided would be due to the available output space having being consumed.
+   The number of bits of output not provided are between 0 and 7, where they
+   await more bits to join them in order to fill out a full byte.  If pending
+   or bits are Z_NULL, then those values are not set.
+
+     deflatePending returns Z_OK if success, or Z_STREAM_ERROR if the source
+   stream state was inconsistent.
+ */
+
+ZEXTERN int ZEXPORT deflatePrime OF((z_streamp strm,
+                                     int bits,
+                                     int value));
+/*
+     deflatePrime() inserts bits in the deflate output stream.  The intent
+   is that this function is used to start off the deflate output with the bits
+   leftover from a previous deflate stream when appending to it.  As such, this
+   function can only be used for raw deflate, and must be used before the first
+   deflate() call after a deflateInit2() or deflateReset().  bits must be less
+   than or equal to 16, and that many of the least significant bits of value
+   will be inserted in the output.
+
+     deflatePrime returns Z_OK if success, Z_BUF_ERROR if there was not enough
+   room in the internal buffer to insert the bits, or Z_STREAM_ERROR if the
+   source stream state was inconsistent.
+*/
+
+ZEXTERN int ZEXPORT deflateSetHeader OF((z_streamp strm,
+                                         gz_headerp head));
+/*
+     deflateSetHeader() provides gzip header information for when a gzip
+   stream is requested by deflateInit2().  deflateSetHeader() may be called
+   after deflateInit2() or deflateReset() and before the first call of
+   deflate().  The text, time, os, extra field, name, and comment information
+   in the provided gz_header structure are written to the gzip header (xflag is
+   ignored -- the extra flags are set according to the compression level).  The
+   caller must assure that, if not Z_NULL, name and comment are terminated with
+   a zero byte, and that if extra is not Z_NULL, that extra_len bytes are
+   available there.  If hcrc is true, a gzip header crc is included.  Note that
+   the current versions of the command-line version of gzip (up through version
+   1.3.x) do not support header crc's, and will report that it is a "multi-part
+   gzip file" and give up.
+
+     If deflateSetHeader is not used, the default gzip header has text false,
+   the time set to zero, and os set to 255, with no extra, name, or comment
+   fields.  The gzip header is returned to the default state by deflateReset().
+
+     deflateSetHeader returns Z_OK if success, or Z_STREAM_ERROR if the source
+   stream state was inconsistent.
+*/
+
+/*
+ZEXTERN int ZEXPORT inflateInit2 OF((z_streamp strm,
+                                     int  windowBits));
+
+     This is another version of inflateInit with an extra parameter.  The
+   fields next_in, avail_in, zalloc, zfree and opaque must be initialized
+   before by the caller.
+
+     The windowBits parameter is the base two logarithm of the maximum window
+   size (the size of the history buffer).  It should be in the range 8..15 for
+   this version of the library.  The default value is 15 if inflateInit is used
+   instead.  windowBits must be greater than or equal to the windowBits value
+   provided to deflateInit2() while compressing, or it must be equal to 15 if
+   deflateInit2() was not used.  If a compressed stream with a larger window
+   size is given as input, inflate() will return with the error code
+   Z_DATA_ERROR instead of trying to allocate a larger window.
+
+     windowBits can also be zero to request that inflate use the window size in
+   the zlib header of the compressed stream.
+
+     windowBits can also be -8..-15 for raw inflate.  In this case, -windowBits
+   determines the window size.  inflate() will then process raw deflate data,
+   not looking for a zlib or gzip header, not generating a check value, and not
+   looking for any check values for comparison at the end of the stream.  This
+   is for use with other formats that use the deflate compressed data format
+   such as zip.  Those formats provide their own check values.  If a custom
+   format is developed using the raw deflate format for compressed data, it is
+   recommended that a check value such as an adler32 or a crc32 be applied to
+   the uncompressed data as is done in the zlib, gzip, and zip formats.  For
+   most applications, the zlib format should be used as is.  Note that comments
+   above on the use in deflateInit2() applies to the magnitude of windowBits.
+
+     windowBits can also be greater than 15 for optional gzip decoding.  Add
+   32 to windowBits to enable zlib and gzip decoding with automatic header
+   detection, or add 16 to decode only the gzip format (the zlib format will
+   return a Z_DATA_ERROR).  If a gzip stream is being decoded, strm->adler is a
+   crc32 instead of an adler32.
+
+     inflateInit2 returns Z_OK if success, Z_MEM_ERROR if there was not enough
+   memory, Z_VERSION_ERROR if the zlib library version is incompatible with the
+   version assumed by the caller, or Z_STREAM_ERROR if the parameters are
+   invalid, such as a null pointer to the structure.  msg is set to null if
+   there is no error message.  inflateInit2 does not perform any decompression
+   apart from possibly reading the zlib header if present: actual decompression
+   will be done by inflate().  (So next_in and avail_in may be modified, but
+   next_out and avail_out are unused and unchanged.) The current implementation
+   of inflateInit2() does not process any header information -- that is
+   deferred until inflate() is called.
+*/
+
+ZEXTERN int ZEXPORT inflateSetDictionary OF((z_streamp strm,
+                                             const Bytef *dictionary,
+                                             uInt  dictLength));
+/*
+     Initializes the decompression dictionary from the given uncompressed byte
+   sequence.  This function must be called immediately after a call of inflate,
+   if that call returned Z_NEED_DICT.  The dictionary chosen by the compressor
+   can be determined from the adler32 value returned by that call of inflate.
+   The compressor and decompressor must use exactly the same dictionary (see
+   deflateSetDictionary).  For raw inflate, this function can be called at any
+   time to set the dictionary.  If the provided dictionary is smaller than the
+   window and there is already data in the window, then the provided dictionary
+   will amend what's there.  The application must insure that the dictionary
+   that was used for compression is provided.
+
+     inflateSetDictionary returns Z_OK if success, Z_STREAM_ERROR if a
+   parameter is invalid (e.g.  dictionary being Z_NULL) or the stream state is
+   inconsistent, Z_DATA_ERROR if the given dictionary doesn't match the
+   expected one (incorrect adler32 value).  inflateSetDictionary does not
+   perform any decompression: this will be done by subsequent calls of
+   inflate().
+*/
+
+ZEXTERN int ZEXPORT inflateGetDictionary OF((z_streamp strm,
+                                             Bytef *dictionary,
+                                             uInt  *dictLength));
+/*
+     Returns the sliding dictionary being maintained by inflate.  dictLength is
+   set to the number of bytes in the dictionary, and that many bytes are copied
+   to dictionary.  dictionary must have enough space, where 32768 bytes is
+   always enough.  If inflateGetDictionary() is called with dictionary equal to
+   Z_NULL, then only the dictionary length is returned, and nothing is copied.
+   Similary, if dictLength is Z_NULL, then it is not set.
+
+     inflateGetDictionary returns Z_OK on success, or Z_STREAM_ERROR if the
+   stream state is inconsistent.
+*/
+
+ZEXTERN int ZEXPORT inflateSync OF((z_streamp strm));
+/*
+     Skips invalid compressed data until a possible full flush point (see above
+   for the description of deflate with Z_FULL_FLUSH) can be found, or until all
+   available input is skipped.  No output is provided.
+
+     inflateSync searches for a 00 00 FF FF pattern in the compressed data.
+   All full flush points have this pattern, but not all occurrences of this
+   pattern are full flush points.
+
+     inflateSync returns Z_OK if a possible full flush point has been found,
+   Z_BUF_ERROR if no more input was provided, Z_DATA_ERROR if no flush point
+   has been found, or Z_STREAM_ERROR if the stream structure was inconsistent.
+   In the success case, the application may save the current current value of
+   total_in which indicates where valid compressed data was found.  In the
+   error case, the application may repeatedly call inflateSync, providing more
+   input each time, until success or end of the input data.
+*/
+
+ZEXTERN int ZEXPORT inflateCopy OF((z_streamp dest,
+                                    z_streamp source));
+/*
+     Sets the destination stream as a complete copy of the source stream.
+
+     This function can be useful when randomly accessing a large stream.  The
+   first pass through the stream can periodically record the inflate state,
+   allowing restarting inflate at those points when randomly accessing the
+   stream.
+
+     inflateCopy returns Z_OK if success, Z_MEM_ERROR if there was not
+   enough memory, Z_STREAM_ERROR if the source stream state was inconsistent
+   (such as zalloc being Z_NULL).  msg is left unchanged in both source and
+   destination.
+*/
+
+ZEXTERN int ZEXPORT inflateReset OF((z_streamp strm));
+/*
+     This function is equivalent to inflateEnd followed by inflateInit,
+   but does not free and reallocate all the internal decompression state.  The
+   stream will keep attributes that may have been set by inflateInit2.
+
+     inflateReset returns Z_OK if success, or Z_STREAM_ERROR if the source
+   stream state was inconsistent (such as zalloc or state being Z_NULL).
+*/
+
+ZEXTERN int ZEXPORT inflateReset2 OF((z_streamp strm,
+                                      int windowBits));
+/*
+     This function is the same as inflateReset, but it also permits changing
+   the wrap and window size requests.  The windowBits parameter is interpreted
+   the same as it is for inflateInit2.
+
+     inflateReset2 returns Z_OK if success, or Z_STREAM_ERROR if the source
+   stream state was inconsistent (such as zalloc or state being Z_NULL), or if
+   the windowBits parameter is invalid.
+*/
+
+ZEXTERN int ZEXPORT inflatePrime OF((z_streamp strm,
+                                     int bits,
+                                     int value));
+/*
+     This function inserts bits in the inflate input stream.  The intent is
+   that this function is used to start inflating at a bit position in the
+   middle of a byte.  The provided bits will be used before any bytes are used
+   from next_in.  This function should only be used with raw inflate, and
+   should be used before the first inflate() call after inflateInit2() or
+   inflateReset().  bits must be less than or equal to 16, and that many of the
+   least significant bits of value will be inserted in the input.
+
+     If bits is negative, then the input stream bit buffer is emptied.  Then
+   inflatePrime() can be called again to put bits in the buffer.  This is used
+   to clear out bits leftover after feeding inflate a block description prior
+   to feeding inflate codes.
+
+     inflatePrime returns Z_OK if success, or Z_STREAM_ERROR if the source
+   stream state was inconsistent.
+*/
+
+ZEXTERN long ZEXPORT inflateMark OF((z_streamp strm));
+/*
+     This function returns two values, one in the lower 16 bits of the return
+   value, and the other in the remaining upper bits, obtained by shifting the
+   return value down 16 bits.  If the upper value is -1 and the lower value is
+   zero, then inflate() is currently decoding information outside of a block.
+   If the upper value is -1 and the lower value is non-zero, then inflate is in
+   the middle of a stored block, with the lower value equaling the number of
+   bytes from the input remaining to copy.  If the upper value is not -1, then
+   it is the number of bits back from the current bit position in the input of
+   the code (literal or length/distance pair) currently being processed.  In
+   that case the lower value is the number of bytes already emitted for that
+   code.
+
+     A code is being processed if inflate is waiting for more input to complete
+   decoding of the code, or if it has completed decoding but is waiting for
+   more output space to write the literal or match data.
+
+     inflateMark() is used to mark locations in the input data for random
+   access, which may be at bit positions, and to note those cases where the
+   output of a code may span boundaries of random access blocks.  The current
+   location in the input stream can be determined from avail_in and data_type
+   as noted in the description for the Z_BLOCK flush parameter for inflate.
+
+     inflateMark returns the value noted above or -1 << 16 if the provided
+   source stream state was inconsistent.
+*/
+
+ZEXTERN int ZEXPORT inflateGetHeader OF((z_streamp strm,
+                                         gz_headerp head));
+/*
+     inflateGetHeader() requests that gzip header information be stored in the
+   provided gz_header structure.  inflateGetHeader() may be called after
+   inflateInit2() or inflateReset(), and before the first call of inflate().
+   As inflate() processes the gzip stream, head->done is zero until the header
+   is completed, at which time head->done is set to one.  If a zlib stream is
+   being decoded, then head->done is set to -1 to indicate that there will be
+   no gzip header information forthcoming.  Note that Z_BLOCK or Z_TREES can be
+   used to force inflate() to return immediately after header processing is
+   complete and before any actual data is decompressed.
+
+     The text, time, xflags, and os fields are filled in with the gzip header
+   contents.  hcrc is set to true if there is a header CRC.  (The header CRC
+   was valid if done is set to one.) If extra is not Z_NULL, then extra_max
+   contains the maximum number of bytes to write to extra.  Once done is true,
+   extra_len contains the actual extra field length, and extra contains the
+   extra field, or that field truncated if extra_max is less than extra_len.
+   If name is not Z_NULL, then up to name_max characters are written there,
+   terminated with a zero unless the length is greater than name_max.  If
+   comment is not Z_NULL, then up to comm_max characters are written there,
+   terminated with a zero unless the length is greater than comm_max.  When any
+   of extra, name, or comment are not Z_NULL and the respective field is not
+   present in the header, then that field is set to Z_NULL to signal its
+   absence.  This allows the use of deflateSetHeader() with the returned
+   structure to duplicate the header.  However if those fields are set to
+   allocated memory, then the application will need to save those pointers
+   elsewhere so that they can be eventually freed.
+
+     If inflateGetHeader is not used, then the header information is simply
+   discarded.  The header is always checked for validity, including the header
+   CRC if present.  inflateReset() will reset the process to discard the header
+   information.  The application would need to call inflateGetHeader() again to
+   retrieve the header from the next gzip stream.
+
+     inflateGetHeader returns Z_OK if success, or Z_STREAM_ERROR if the source
+   stream state was inconsistent.
+*/
+
+/*
+ZEXTERN int ZEXPORT inflateBackInit OF((z_streamp strm, int windowBits,
+                                        unsigned char FAR *window));
+
+     Initialize the internal stream state for decompression using inflateBack()
+   calls.  The fields zalloc, zfree and opaque in strm must be initialized
+   before the call.  If zalloc and zfree are Z_NULL, then the default library-
+   derived memory allocation routines are used.  windowBits is the base two
+   logarithm of the window size, in the range 8..15.  window is a caller
+   supplied buffer of that size.  Except for special applications where it is
+   assured that deflate was used with small window sizes, windowBits must be 15
+   and a 32K byte window must be supplied to be able to decompress general
+   deflate streams.
+
+     See inflateBack() for the usage of these routines.
+
+     inflateBackInit will return Z_OK on success, Z_STREAM_ERROR if any of
+   the parameters are invalid, Z_MEM_ERROR if the internal state could not be
+   allocated, or Z_VERSION_ERROR if the version of the library does not match
+   the version of the header file.
+*/
+
+typedef unsigned (*in_func) OF((void FAR *,
+                                z_const unsigned char FAR * FAR *));
+typedef int (*out_func) OF((void FAR *, unsigned char FAR *, unsigned));
+
+ZEXTERN int ZEXPORT inflateBack OF((z_streamp strm,
+                                    in_func in, void FAR *in_desc,
+                                    out_func out, void FAR *out_desc));
+/*
+     inflateBack() does a raw inflate with a single call using a call-back
+   interface for input and output.  This is potentially more efficient than
+   inflate() for file i/o applications, in that it avoids copying between the
+   output and the sliding window by simply making the window itself the output
+   buffer.  inflate() can be faster on modern CPUs when used with large
+   buffers.  inflateBack() trusts the application to not change the output
+   buffer passed by the output function, at least until inflateBack() returns.
+
+     inflateBackInit() must be called first to allocate the internal state
+   and to initialize the state with the user-provided window buffer.
+   inflateBack() may then be used multiple times to inflate a complete, raw
+   deflate stream with each call.  inflateBackEnd() is then called to free the
+   allocated state.
+
+     A raw deflate stream is one with no zlib or gzip header or trailer.
+   This routine would normally be used in a utility that reads zip or gzip
+   files and writes out uncompressed files.  The utility would decode the
+   header and process the trailer on its own, hence this routine expects only
+   the raw deflate stream to decompress.  This is different from the normal
+   behavior of inflate(), which expects either a zlib or gzip header and
+   trailer around the deflate stream.
+
+     inflateBack() uses two subroutines supplied by the caller that are then
+   called by inflateBack() for input and output.  inflateBack() calls those
+   routines until it reads a complete deflate stream and writes out all of the
+   uncompressed data, or until it encounters an error.  The function's
+   parameters and return types are defined above in the in_func and out_func
+   typedefs.  inflateBack() will call in(in_desc, &buf) which should return the
+   number of bytes of provided input, and a pointer to that input in buf.  If
+   there is no input available, in() must return zero--buf is ignored in that
+   case--and inflateBack() will return a buffer error.  inflateBack() will call
+   out(out_desc, buf, len) to write the uncompressed data buf[0..len-1].  out()
+   should return zero on success, or non-zero on failure.  If out() returns
+   non-zero, inflateBack() will return with an error.  Neither in() nor out()
+   are permitted to change the contents of the window provided to
+   inflateBackInit(), which is also the buffer that out() uses to write from.
+   The length written by out() will be at most the window size.  Any non-zero
+   amount of input may be provided by in().
+
+     For convenience, inflateBack() can be provided input on the first call by
+   setting strm->next_in and strm->avail_in.  If that input is exhausted, then
+   in() will be called.  Therefore strm->next_in must be initialized before
+   calling inflateBack().  If strm->next_in is Z_NULL, then in() will be called
+   immediately for input.  If strm->next_in is not Z_NULL, then strm->avail_in
+   must also be initialized, and then if strm->avail_in is not zero, input will
+   initially be taken from strm->next_in[0 ..  strm->avail_in - 1].
+
+     The in_desc and out_desc parameters of inflateBack() is passed as the
+   first parameter of in() and out() respectively when they are called.  These
+   descriptors can be optionally used to pass any information that the caller-
+   supplied in() and out() functions need to do their job.
+
+     On return, inflateBack() will set strm->next_in and strm->avail_in to
+   pass back any unused input that was provided by the last in() call.  The
+   return values of inflateBack() can be Z_STREAM_END on success, Z_BUF_ERROR
+   if in() or out() returned an error, Z_DATA_ERROR if there was a format error
+   in the deflate stream (in which case strm->msg is set to indicate the nature
+   of the error), or Z_STREAM_ERROR if the stream was not properly initialized.
+   In the case of Z_BUF_ERROR, an input or output error can be distinguished
+   using strm->next_in which will be Z_NULL only if in() returned an error.  If
+   strm->next_in is not Z_NULL, then the Z_BUF_ERROR was due to out() returning
+   non-zero.  (in() will always be called before out(), so strm->next_in is
+   assured to be defined if out() returns non-zero.) Note that inflateBack()
+   cannot return Z_OK.
+*/
+
+ZEXTERN int ZEXPORT inflateBackEnd OF((z_streamp strm));
+/*
+     All memory allocated by inflateBackInit() is freed.
+
+     inflateBackEnd() returns Z_OK on success, or Z_STREAM_ERROR if the stream
+   state was inconsistent.
+*/
+
+ZEXTERN uLong ZEXPORT zlibCompileFlags OF((void));
+/* Return flags indicating compile-time options.
+
+    Type sizes, two bits each, 00 = 16 bits, 01 = 32, 10 = 64, 11 = other:
+     1.0: size of uInt
+     3.2: size of uLong
+     5.4: size of voidpf (pointer)
+     7.6: size of z_off_t
+
+    Compiler, assembler, and debug options:
+     8: DEBUG
+     9: ASMV or ASMINF -- use ASM code
+     10: ZLIB_WINAPI -- exported functions use the WINAPI calling convention
+     11: 0 (reserved)
+
+    One-time table building (smaller code, but not thread-safe if true):
+     12: BUILDFIXED -- build static block decoding tables when needed
+     13: DYNAMIC_CRC_TABLE -- build CRC calculation tables when needed
+     14,15: 0 (reserved)
+
+    Library content (indicates missing functionality):
+     16: NO_GZCOMPRESS -- gz* functions cannot compress (to avoid linking
+                          deflate code when not needed)
+     17: NO_GZIP -- deflate can't write gzip streams, and inflate can't detect
+                    and decode gzip streams (to avoid linking crc code)
+     18-19: 0 (reserved)
+
+    Operation variations (changes in library functionality):
+     20: PKZIP_BUG_WORKAROUND -- slightly more permissive inflate
+     21: FASTEST -- deflate algorithm with only one, lowest compression level
+     22,23: 0 (reserved)
+
+    The sprintf variant used by gzprintf (zero is best):
+     24: 0 = vs*, 1 = s* -- 1 means limited to 20 arguments after the format
+     25: 0 = *nprintf, 1 = *printf -- 1 means gzprintf() not secure!
+     26: 0 = returns value, 1 = void -- 1 means inferred string length returned
+
+    Remainder:
+     27-31: 0 (reserved)
+ */
+
+#ifndef Z_SOLO
+
+                        /* utility functions */
+
+/*
+     The following utility functions are implemented on top of the basic
+   stream-oriented functions.  To simplify the interface, some default options
+   are assumed (compression level and memory usage, standard memory allocation
+   functions).  The source code of these utility functions can be modified if
+   you need special options.
+*/
+
+ZEXTERN int ZEXPORT compress OF((Bytef *dest,   uLongf *destLen,
+                                 const Bytef *source, uLong sourceLen));
+/*
+     Compresses the source buffer into the destination buffer.  sourceLen is
+   the byte length of the source buffer.  Upon entry, destLen is the total size
+   of the destination buffer, which must be at least the value returned by
+   compressBound(sourceLen).  Upon exit, destLen is the actual size of the
+   compressed buffer.
+
+     compress returns Z_OK if success, Z_MEM_ERROR if there was not
+   enough memory, Z_BUF_ERROR if there was not enough room in the output
+   buffer.
+*/
+
+ZEXTERN int ZEXPORT compress2 OF((Bytef *dest,   uLongf *destLen,
+                                  const Bytef *source, uLong sourceLen,
+                                  int level));
+/*
+     Compresses the source buffer into the destination buffer.  The level
+   parameter has the same meaning as in deflateInit.  sourceLen is the byte
+   length of the source buffer.  Upon entry, destLen is the total size of the
+   destination buffer, which must be at least the value returned by
+   compressBound(sourceLen).  Upon exit, destLen is the actual size of the
+   compressed buffer.
+
+     compress2 returns Z_OK if success, Z_MEM_ERROR if there was not enough
+   memory, Z_BUF_ERROR if there was not enough room in the output buffer,
+   Z_STREAM_ERROR if the level parameter is invalid.
+*/
+
+ZEXTERN uLong ZEXPORT compressBound OF((uLong sourceLen));
+/*
+     compressBound() returns an upper bound on the compressed size after
+   compress() or compress2() on sourceLen bytes.  It would be used before a
+   compress() or compress2() call to allocate the destination buffer.
+*/
+
+ZEXTERN int ZEXPORT uncompress OF((Bytef *dest,   uLongf *destLen,
+                                   const Bytef *source, uLong sourceLen));
+/*
+     Decompresses the source buffer into the destination buffer.  sourceLen is
+   the byte length of the source buffer.  Upon entry, destLen is the total size
+   of the destination buffer, which must be large enough to hold the entire
+   uncompressed data.  (The size of the uncompressed data must have been saved
+   previously by the compressor and transmitted to the decompressor by some
+   mechanism outside the scope of this compression library.) Upon exit, destLen
+   is the actual size of the uncompressed buffer.
+
+     uncompress returns Z_OK if success, Z_MEM_ERROR if there was not
+   enough memory, Z_BUF_ERROR if there was not enough room in the output
+   buffer, or Z_DATA_ERROR if the input data was corrupted or incomplete.  In
+   the case where there is not enough room, uncompress() will fill the output
+   buffer with the uncompressed data up to that point.
+*/
+
+                        /* gzip file access functions */
+
+/*
+     This library supports reading and writing files in gzip (.gz) format with
+   an interface similar to that of stdio, using the functions that start with
+   "gz".  The gzip format is different from the zlib format.  gzip is a gzip
+   wrapper, documented in RFC 1952, wrapped around a deflate stream.
+*/
+
+typedef struct gzFile_s *gzFile;    /* semi-opaque gzip file descriptor */
+
+/*
+ZEXTERN gzFile ZEXPORT gzopen OF((const char *path, const char *mode));
+
+     Opens a gzip (.gz) file for reading or writing.  The mode parameter is as
+   in fopen ("rb" or "wb") but can also include a compression level ("wb9") or
+   a strategy: 'f' for filtered data as in "wb6f", 'h' for Huffman-only
+   compression as in "wb1h", 'R' for run-length encoding as in "wb1R", or 'F'
+   for fixed code compression as in "wb9F".  (See the description of
+   deflateInit2 for more information about the strategy parameter.)  'T' will
+   request transparent writing or appending with no compression and not using
+   the gzip format.
+
+     "a" can be used instead of "w" to request that the gzip stream that will
+   be written be appended to the file.  "+" will result in an error, since
+   reading and writing to the same gzip file is not supported.  The addition of
+   "x" when writing will create the file exclusively, which fails if the file
+   already exists.  On systems that support it, the addition of "e" when
+   reading or writing will set the flag to close the file on an execve() call.
+
+     These functions, as well as gzip, will read and decode a sequence of gzip
+   streams in a file.  The append function of gzopen() can be used to create
+   such a file.  (Also see gzflush() for another way to do this.)  When
+   appending, gzopen does not test whether the file begins with a gzip stream,
+   nor does it look for the end of the gzip streams to begin appending.  gzopen
+   will simply append a gzip stream to the existing file.
+
+     gzopen can be used to read a file which is not in gzip format; in this
+   case gzread will directly read from the file without decompression.  When
+   reading, this will be detected automatically by looking for the magic two-
+   byte gzip header.
+
+     gzopen returns NULL if the file could not be opened, if there was
+   insufficient memory to allocate the gzFile state, or if an invalid mode was
+   specified (an 'r', 'w', or 'a' was not provided, or '+' was provided).
+   errno can be checked to determine if the reason gzopen failed was that the
+   file could not be opened.
+*/
+
+ZEXTERN gzFile ZEXPORT gzdopen OF((int fd, const char *mode));
+/*
+     gzdopen associates a gzFile with the file descriptor fd.  File descriptors
+   are obtained from calls like open, dup, creat, pipe or fileno (if the file
+   has been previously opened with fopen).  The mode parameter is as in gzopen.
+
+     The next call of gzclose on the returned gzFile will also close the file
+   descriptor fd, just like fclose(fdopen(fd, mode)) closes the file descriptor
+   fd.  If you want to keep fd open, use fd = dup(fd_keep); gz = gzdopen(fd,
+   mode);.  The duplicated descriptor should be saved to avoid a leak, since
+   gzdopen does not close fd if it fails.  If you are using fileno() to get the
+   file descriptor from a FILE *, then you will have to use dup() to avoid
+   double-close()ing the file descriptor.  Both gzclose() and fclose() will
+   close the associated file descriptor, so they need to have different file
+   descriptors.
+
+     gzdopen returns NULL if there was insufficient memory to allocate the
+   gzFile state, if an invalid mode was specified (an 'r', 'w', or 'a' was not
+   provided, or '+' was provided), or if fd is -1.  The file descriptor is not
+   used until the next gz* read, write, seek, or close operation, so gzdopen
+   will not detect if fd is invalid (unless fd is -1).
+*/
+
+ZEXTERN int ZEXPORT gzbuffer OF((gzFile file, unsigned size));
+/*
+     Set the internal buffer size used by this library's functions.  The
+   default buffer size is 8192 bytes.  This function must be called after
+   gzopen() or gzdopen(), and before any other calls that read or write the
+   file.  The buffer memory allocation is always deferred to the first read or
+   write.  Two buffers are allocated, either both of the specified size when
+   writing, or one of the specified size and the other twice that size when
+   reading.  A larger buffer size of, for example, 64K or 128K bytes will
+   noticeably increase the speed of decompression (reading).
+
+     The new buffer size also affects the maximum length for gzprintf().
+
+     gzbuffer() returns 0 on success, or -1 on failure, such as being called
+   too late.
+*/
+
+ZEXTERN int ZEXPORT gzsetparams OF((gzFile file, int level, int strategy));
+/*
+     Dynamically update the compression level or strategy.  See the description
+   of deflateInit2 for the meaning of these parameters.
+
+     gzsetparams returns Z_OK if success, or Z_STREAM_ERROR if the file was not
+   opened for writing.
+*/
+
+ZEXTERN int ZEXPORT gzread OF((gzFile file, voidp buf, unsigned len));
+/*
+     Reads the given number of uncompressed bytes from the compressed file.  If
+   the input file is not in gzip format, gzread copies the given number of
+   bytes into the buffer directly from the file.
+
+     After reaching the end of a gzip stream in the input, gzread will continue
+   to read, looking for another gzip stream.  Any number of gzip streams may be
+   concatenated in the input file, and will all be decompressed by gzread().
+   If something other than a gzip stream is encountered after a gzip stream,
+   that remaining trailing garbage is ignored (and no error is returned).
+
+     gzread can be used to read a gzip file that is being concurrently written.
+   Upon reaching the end of the input, gzread will return with the available
+   data.  If the error code returned by gzerror is Z_OK or Z_BUF_ERROR, then
+   gzclearerr can be used to clear the end of file indicator in order to permit
+   gzread to be tried again.  Z_OK indicates that a gzip stream was completed
+   on the last gzread.  Z_BUF_ERROR indicates that the input file ended in the
+   middle of a gzip stream.  Note that gzread does not return -1 in the event
+   of an incomplete gzip stream.  This error is deferred until gzclose(), which
+   will return Z_BUF_ERROR if the last gzread ended in the middle of a gzip
+   stream.  Alternatively, gzerror can be used before gzclose to detect this
+   case.
+
+     gzread returns the number of uncompressed bytes actually read, less than
+   len for end of file, or -1 for error.
+*/
+
+ZEXTERN int ZEXPORT gzwrite OF((gzFile file,
+                                voidpc buf, unsigned len));
+/*
+     Writes the given number of uncompressed bytes into the compressed file.
+   gzwrite returns the number of uncompressed bytes written or 0 in case of
+   error.
+*/
+
+ZEXTERN int ZEXPORTVA gzprintf Z_ARG((gzFile file, const char *format, ...));
+/*
+     Converts, formats, and writes the arguments to the compressed file under
+   control of the format string, as in fprintf.  gzprintf returns the number of
+   uncompressed bytes actually written, or 0 in case of error.  The number of
+   uncompressed bytes written is limited to 8191, or one less than the buffer
+   size given to gzbuffer().  The caller should assure that this limit is not
+   exceeded.  If it is exceeded, then gzprintf() will return an error (0) with
+   nothing written.  In this case, there may also be a buffer overflow with
+   unpredictable consequences, which is possible only if zlib was compiled with
+   the insecure functions sprintf() or vsprintf() because the secure snprintf()
+   or vsnprintf() functions were not available.  This can be determined using
+   zlibCompileFlags().
+*/
+
+ZEXTERN int ZEXPORT gzputs OF((gzFile file, const char *s));
+/*
+     Writes the given null-terminated string to the compressed file, excluding
+   the terminating null character.
+
+     gzputs returns the number of characters written, or -1 in case of error.
+*/
+
+ZEXTERN char * ZEXPORT gzgets OF((gzFile file, char *buf, int len));
+/*
+     Reads bytes from the compressed file until len-1 characters are read, or a
+   newline character is read and transferred to buf, or an end-of-file
+   condition is encountered.  If any characters are read or if len == 1, the
+   string is terminated with a null character.  If no characters are read due
+   to an end-of-file or len < 1, then the buffer is left untouched.
+
+     gzgets returns buf which is a null-terminated string, or it returns NULL
+   for end-of-file or in case of error.  If there was an error, the contents at
+   buf are indeterminate.
+*/
+
+ZEXTERN int ZEXPORT gzputc OF((gzFile file, int c));
+/*
+     Writes c, converted to an unsigned char, into the compressed file.  gzputc
+   returns the value that was written, or -1 in case of error.
+*/
+
+ZEXTERN int ZEXPORT gzgetc OF((gzFile file));
+/*
+     Reads one byte from the compressed file.  gzgetc returns this byte or -1
+   in case of end of file or error.  This is implemented as a macro for speed.
+   As such, it does not do all of the checking the other functions do.  I.e.
+   it does not check to see if file is NULL, nor whether the structure file
+   points to has been clobbered or not.
+*/
+
+ZEXTERN int ZEXPORT gzungetc OF((int c, gzFile file));
+/*
+     Push one character back onto the stream to be read as the first character
+   on the next read.  At least one character of push-back is allowed.
+   gzungetc() returns the character pushed, or -1 on failure.  gzungetc() will
+   fail if c is -1, and may fail if a character has been pushed but not read
+   yet.  If gzungetc is used immediately after gzopen or gzdopen, at least the
+   output buffer size of pushed characters is allowed.  (See gzbuffer above.)
+   The pushed character will be discarded if the stream is repositioned with
+   gzseek() or gzrewind().
+*/
+
+ZEXTERN int ZEXPORT gzflush OF((gzFile file, int flush));
+/*
+     Flushes all pending output into the compressed file.  The parameter flush
+   is as in the deflate() function.  The return value is the zlib error number
+   (see function gzerror below).  gzflush is only permitted when writing.
+
+     If the flush parameter is Z_FINISH, the remaining data is written and the
+   gzip stream is completed in the output.  If gzwrite() is called again, a new
+   gzip stream will be started in the output.  gzread() is able to read such
+   concatented gzip streams.
+
+     gzflush should be called only when strictly necessary because it will
+   degrade compression if called too often.
+*/
+
+/*
+ZEXTERN z_off_t ZEXPORT gzseek OF((gzFile file,
+                                   z_off_t offset, int whence));
+
+     Sets the starting position for the next gzread or gzwrite on the given
+   compressed file.  The offset represents a number of bytes in the
+   uncompressed data stream.  The whence parameter is defined as in lseek(2);
+   the value SEEK_END is not supported.
+
+     If the file is opened for reading, this function is emulated but can be
+   extremely slow.  If the file is opened for writing, only forward seeks are
+   supported; gzseek then compresses a sequence of zeroes up to the new
+   starting position.
+
+     gzseek returns the resulting offset location as measured in bytes from
+   the beginning of the uncompressed stream, or -1 in case of error, in
+   particular if the file is opened for writing and the new starting position
+   would be before the current position.
+*/
+
+ZEXTERN int ZEXPORT    gzrewind OF((gzFile file));
+/*
+     Rewinds the given file. This function is supported only for reading.
+
+     gzrewind(file) is equivalent to (int)gzseek(file, 0L, SEEK_SET)
+*/
+
+/*
+ZEXTERN z_off_t ZEXPORT    gztell OF((gzFile file));
+
+     Returns the starting position for the next gzread or gzwrite on the given
+   compressed file.  This position represents a number of bytes in the
+   uncompressed data stream, and is zero when starting, even if appending or
+   reading a gzip stream from the middle of a file using gzdopen().
+
+     gztell(file) is equivalent to gzseek(file, 0L, SEEK_CUR)
+*/
+
+/*
+ZEXTERN z_off_t ZEXPORT gzoffset OF((gzFile file));
+
+     Returns the current offset in the file being read or written.  This offset
+   includes the count of bytes that precede the gzip stream, for example when
+   appending or when using gzdopen() for reading.  When reading, the offset
+   does not include as yet unused buffered input.  This information can be used
+   for a progress indicator.  On error, gzoffset() returns -1.
+*/
+
+ZEXTERN int ZEXPORT gzeof OF((gzFile file));
+/*
+     Returns true (1) if the end-of-file indicator has been set while reading,
+   false (0) otherwise.  Note that the end-of-file indicator is set only if the
+   read tried to go past the end of the input, but came up short.  Therefore,
+   just like feof(), gzeof() may return false even if there is no more data to
+   read, in the event that the last read request was for the exact number of
+   bytes remaining in the input file.  This will happen if the input file size
+   is an exact multiple of the buffer size.
+
+     If gzeof() returns true, then the read functions will return no more data,
+   unless the end-of-file indicator is reset by gzclearerr() and the input file
+   has grown since the previous end of file was detected.
+*/
+
+ZEXTERN int ZEXPORT gzdirect OF((gzFile file));
+/*
+     Returns true (1) if file is being copied directly while reading, or false
+   (0) if file is a gzip stream being decompressed.
+
+     If the input file is empty, gzdirect() will return true, since the input
+   does not contain a gzip stream.
+
+     If gzdirect() is used immediately after gzopen() or gzdopen() it will
+   cause buffers to be allocated to allow reading the file to determine if it
+   is a gzip file.  Therefore if gzbuffer() is used, it should be called before
+   gzdirect().
+
+     When writing, gzdirect() returns true (1) if transparent writing was
+   requested ("wT" for the gzopen() mode), or false (0) otherwise.  (Note:
+   gzdirect() is not needed when writing.  Transparent writing must be
+   explicitly requested, so the application already knows the answer.  When
+   linking statically, using gzdirect() will include all of the zlib code for
+   gzip file reading and decompression, which may not be desired.)
+*/
+
+ZEXTERN int ZEXPORT    gzclose OF((gzFile file));
+/*
+     Flushes all pending output if necessary, closes the compressed file and
+   deallocates the (de)compression state.  Note that once file is closed, you
+   cannot call gzerror with file, since its structures have been deallocated.
+   gzclose must not be called more than once on the same file, just as free
+   must not be called more than once on the same allocation.
+
+     gzclose will return Z_STREAM_ERROR if file is not valid, Z_ERRNO on a
+   file operation error, Z_MEM_ERROR if out of memory, Z_BUF_ERROR if the
+   last read ended in the middle of a gzip stream, or Z_OK on success.
+*/
+
+ZEXTERN int ZEXPORT gzclose_r OF((gzFile file));
+ZEXTERN int ZEXPORT gzclose_w OF((gzFile file));
+/*
+     Same as gzclose(), but gzclose_r() is only for use when reading, and
+   gzclose_w() is only for use when writing or appending.  The advantage to
+   using these instead of gzclose() is that they avoid linking in zlib
+   compression or decompression code that is not used when only reading or only
+   writing respectively.  If gzclose() is used, then both compression and
+   decompression code will be included the application when linking to a static
+   zlib library.
+*/
+
+ZEXTERN const char * ZEXPORT gzerror OF((gzFile file, int *errnum));
+/*
+     Returns the error message for the last error which occurred on the given
+   compressed file.  errnum is set to zlib error number.  If an error occurred
+   in the file system and not in the compression library, errnum is set to
+   Z_ERRNO and the application may consult errno to get the exact error code.
+
+     The application must not modify the returned string.  Future calls to
+   this function may invalidate the previously returned string.  If file is
+   closed, then the string previously returned by gzerror will no longer be
+   available.
+
+     gzerror() should be used to distinguish errors from end-of-file for those
+   functions above that do not distinguish those cases in their return values.
+*/
+
+ZEXTERN void ZEXPORT gzclearerr OF((gzFile file));
+/*
+     Clears the error and end-of-file flags for file.  This is analogous to the
+   clearerr() function in stdio.  This is useful for continuing to read a gzip
+   file that is being written concurrently.
+*/
+
+#endif /* !Z_SOLO */
+
+                        /* checksum functions */
+
+/*
+     These functions are not related to compression but are exported
+   anyway because they might be useful in applications using the compression
+   library.
+*/
+
+ZEXTERN uLong ZEXPORT adler32 OF((uLong adler, const Bytef *buf, uInt len));
+/*
+     Update a running Adler-32 checksum with the bytes buf[0..len-1] and
+   return the updated checksum.  If buf is Z_NULL, this function returns the
+   required initial value for the checksum.
+
+     An Adler-32 checksum is almost as reliable as a CRC32 but can be computed
+   much faster.
+
+   Usage example:
+
+     uLong adler = adler32(0L, Z_NULL, 0);
+
+     while (read_buffer(buffer, length) != EOF) {
+       adler = adler32(adler, buffer, length);
+     }
+     if (adler != original_adler) error();
+*/
+
+/*
+ZEXTERN uLong ZEXPORT adler32_combine OF((uLong adler1, uLong adler2,
+                                          z_off_t len2));
+
+     Combine two Adler-32 checksums into one.  For two sequences of bytes, seq1
+   and seq2 with lengths len1 and len2, Adler-32 checksums were calculated for
+   each, adler1 and adler2.  adler32_combine() returns the Adler-32 checksum of
+   seq1 and seq2 concatenated, requiring only adler1, adler2, and len2.  Note
+   that the z_off_t type (like off_t) is a signed integer.  If len2 is
+   negative, the result has no meaning or utility.
+*/
+
+ZEXTERN uLong ZEXPORT crc32   OF((uLong crc, const Bytef *buf, uInt len));
+/*
+     Update a running CRC-32 with the bytes buf[0..len-1] and return the
+   updated CRC-32.  If buf is Z_NULL, this function returns the required
+   initial value for the crc.  Pre- and post-conditioning (one's complement) is
+   performed within this function so it shouldn't be done by the application.
+
+   Usage example:
+
+     uLong crc = crc32(0L, Z_NULL, 0);
+
+     while (read_buffer(buffer, length) != EOF) {
+       crc = crc32(crc, buffer, length);
+     }
+     if (crc != original_crc) error();
+*/
+
+/*
+ZEXTERN uLong ZEXPORT crc32_combine OF((uLong crc1, uLong crc2, z_off_t len2));
+
+     Combine two CRC-32 check values into one.  For two sequences of bytes,
+   seq1 and seq2 with lengths len1 and len2, CRC-32 check values were
+   calculated for each, crc1 and crc2.  crc32_combine() returns the CRC-32
+   check value of seq1 and seq2 concatenated, requiring only crc1, crc2, and
+   len2.
+*/
+
+
+                        /* various hacks, don't look :) */
+
+/* deflateInit and inflateInit are macros to allow checking the zlib version
+ * and the compiler's view of z_stream:
+ */
+ZEXTERN int ZEXPORT deflateInit_ OF((z_streamp strm, int level,
+                                     const char *version, int stream_size));
+ZEXTERN int ZEXPORT inflateInit_ OF((z_streamp strm,
+                                     const char *version, int stream_size));
+ZEXTERN int ZEXPORT deflateInit2_ OF((z_streamp strm, int  level, int  method,
+                                      int windowBits, int memLevel,
+                                      int strategy, const char *version,
+                                      int stream_size));
+ZEXTERN int ZEXPORT inflateInit2_ OF((z_streamp strm, int  windowBits,
+                                      const char *version, int stream_size));
+ZEXTERN int ZEXPORT inflateBackInit_ OF((z_streamp strm, int windowBits,
+                                         unsigned char FAR *window,
+                                         const char *version,
+                                         int stream_size));
+#define deflateInit(strm, level) \
+        deflateInit_((strm), (level), ZLIB_VERSION, (int)sizeof(z_stream))
+#define inflateInit(strm) \
+        inflateInit_((strm), ZLIB_VERSION, (int)sizeof(z_stream))
+#define deflateInit2(strm, level, method, windowBits, memLevel, strategy) \
+        deflateInit2_((strm),(level),(method),(windowBits),(memLevel),\
+                      (strategy), ZLIB_VERSION, (int)sizeof(z_stream))
+#define inflateInit2(strm, windowBits) \
+        inflateInit2_((strm), (windowBits), ZLIB_VERSION, \
+                      (int)sizeof(z_stream))
+#define inflateBackInit(strm, windowBits, window) \
+        inflateBackInit_((strm), (windowBits), (window), \
+                      ZLIB_VERSION, (int)sizeof(z_stream))
+
+#ifndef Z_SOLO
+
+/* gzgetc() macro and its supporting function and exposed data structure.  Note
+ * that the real internal state is much larger than the exposed structure.
+ * This abbreviated structure exposes just enough for the gzgetc() macro.  The
+ * user should not mess with these exposed elements, since their names or
+ * behavior could change in the future, perhaps even capriciously.  They can
+ * only be used by the gzgetc() macro.  You have been warned.
+ */
+struct gzFile_s {
+    unsigned have;
+    unsigned char *next;
+    z_off64_t pos;
+};
+ZEXTERN int ZEXPORT gzgetc_ OF((gzFile file));  /* backward compatibility */
+#ifdef Z_PREFIX_SET
+#  undef z_gzgetc
+#  define z_gzgetc(g) \
+          ((g)->have ? ((g)->have--, (g)->pos++, *((g)->next)++) : gzgetc(g))
+#else
+#  define gzgetc(g) \
+          ((g)->have ? ((g)->have--, (g)->pos++, *((g)->next)++) : gzgetc(g))
+#endif
+
+/* provide 64-bit offset functions if _LARGEFILE64_SOURCE defined, and/or
+ * change the regular functions to 64 bits if _FILE_OFFSET_BITS is 64 (if
+ * both are true, the application gets the *64 functions, and the regular
+ * functions are changed to 64 bits) -- in case these are set on systems
+ * without large file support, _LFS64_LARGEFILE must also be true
+ */
+#ifdef Z_LARGE64
+   ZEXTERN gzFile ZEXPORT gzopen64 OF((const char *, const char *));
+   ZEXTERN z_off64_t ZEXPORT gzseek64 OF((gzFile, z_off64_t, int));
+   ZEXTERN z_off64_t ZEXPORT gztell64 OF((gzFile));
+   ZEXTERN z_off64_t ZEXPORT gzoffset64 OF((gzFile));
+   ZEXTERN uLong ZEXPORT adler32_combine64 OF((uLong, uLong, z_off64_t));
+   ZEXTERN uLong ZEXPORT crc32_combine64 OF((uLong, uLong, z_off64_t));
+#endif
+
+#if !defined(ZLIB_INTERNAL) && defined(Z_WANT64)
+#  ifdef Z_PREFIX_SET
+#    define z_gzopen z_gzopen64
+#    define z_gzseek z_gzseek64
+#    define z_gztell z_gztell64
+#    define z_gzoffset z_gzoffset64
+#    define z_adler32_combine z_adler32_combine64
+#    define z_crc32_combine z_crc32_combine64
+#  else
+#    define gzopen gzopen64
+#    define gzseek gzseek64
+#    define gztell gztell64
+#    define gzoffset gzoffset64
+#    define adler32_combine adler32_combine64
+#    define crc32_combine crc32_combine64
+#  endif
+#  ifndef Z_LARGE64
+     ZEXTERN gzFile ZEXPORT gzopen64 OF((const char *, const char *));
+     ZEXTERN z_off_t ZEXPORT gzseek64 OF((gzFile, z_off_t, int));
+     ZEXTERN z_off_t ZEXPORT gztell64 OF((gzFile));
+     ZEXTERN z_off_t ZEXPORT gzoffset64 OF((gzFile));
+     ZEXTERN uLong ZEXPORT adler32_combine64 OF((uLong, uLong, z_off_t));
+     ZEXTERN uLong ZEXPORT crc32_combine64 OF((uLong, uLong, z_off_t));
+#  endif
+#else
+   ZEXTERN gzFile ZEXPORT gzopen OF((const char *, const char *));
+   ZEXTERN z_off_t ZEXPORT gzseek OF((gzFile, z_off_t, int));
+   ZEXTERN z_off_t ZEXPORT gztell OF((gzFile));
+   ZEXTERN z_off_t ZEXPORT gzoffset OF((gzFile));
+   ZEXTERN uLong ZEXPORT adler32_combine OF((uLong, uLong, z_off_t));
+   ZEXTERN uLong ZEXPORT crc32_combine OF((uLong, uLong, z_off_t));
+#endif
+
+#else /* Z_SOLO */
+
+   ZEXTERN uLong ZEXPORT adler32_combine OF((uLong, uLong, z_off_t));
+   ZEXTERN uLong ZEXPORT crc32_combine OF((uLong, uLong, z_off_t));
+
+#endif /* !Z_SOLO */
+
+/* hack for buggy compilers */
+#if !defined(ZUTIL_H) && !defined(NO_DUMMY_DECL)
+    struct internal_state {int dummy;};
+#endif
+
+/* undocumented functions */
+ZEXTERN const char   * ZEXPORT zError           OF((int));
+ZEXTERN int            ZEXPORT inflateSyncPoint OF((z_streamp));
+ZEXTERN const z_crc_t FAR * ZEXPORT get_crc_table    OF((void));
+ZEXTERN int            ZEXPORT inflateUndermine OF((z_streamp, int));
+ZEXTERN int            ZEXPORT inflateResetKeep OF((z_streamp));
+ZEXTERN int            ZEXPORT deflateResetKeep OF((z_streamp));
+#if defined(_WIN32) && !defined(Z_SOLO)
+ZEXTERN gzFile         ZEXPORT gzopen_w OF((const wchar_t *path,
+                                            const char *mode));
+#endif
+#if defined(STDC) || defined(Z_HAVE_STDARG_H)
+#  ifndef Z_SOLO
+ZEXTERN int            ZEXPORTVA gzvprintf Z_ARG((gzFile file,
+                                                  const char *format,
+                                                  va_list va));
+#  endif
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* ZLIB_H */
diff --git a/zlib/zutil.c b/zlib/zutil.c
new file mode 100644 (file)
index 0000000..23d2ebe
--- /dev/null
@@ -0,0 +1,324 @@
+/* zutil.c -- target dependent utility functions for the compression library
+ * Copyright (C) 1995-2005, 2010, 2011, 2012 Jean-loup Gailly.
+ * For conditions of distribution and use, see copyright notice in zlib.h
+ */
+
+/* @(#) $Id$ */
+
+#include "zutil.h"
+#ifndef Z_SOLO
+#  include "gzguts.h"
+#endif
+
+#ifndef NO_DUMMY_DECL
+struct internal_state      {int dummy;}; /* for buggy compilers */
+#endif
+
+z_const char * const z_errmsg[10] = {
+"need dictionary",     /* Z_NEED_DICT       2  */
+"stream end",          /* Z_STREAM_END      1  */
+"",                    /* Z_OK              0  */
+"file error",          /* Z_ERRNO         (-1) */
+"stream error",        /* Z_STREAM_ERROR  (-2) */
+"data error",          /* Z_DATA_ERROR    (-3) */
+"insufficient memory", /* Z_MEM_ERROR     (-4) */
+"buffer error",        /* Z_BUF_ERROR     (-5) */
+"incompatible version",/* Z_VERSION_ERROR (-6) */
+""};
+
+
+const char * ZEXPORT zlibVersion()
+{
+    return ZLIB_VERSION;
+}
+
+uLong ZEXPORT zlibCompileFlags()
+{
+    uLong flags;
+
+    flags = 0;
+    switch ((int)(sizeof(uInt))) {
+    case 2:     break;
+    case 4:     flags += 1;     break;
+    case 8:     flags += 2;     break;
+    default:    flags += 3;
+    }
+    switch ((int)(sizeof(uLong))) {
+    case 2:     break;
+    case 4:     flags += 1 << 2;        break;
+    case 8:     flags += 2 << 2;        break;
+    default:    flags += 3 << 2;
+    }
+    switch ((int)(sizeof(voidpf))) {
+    case 2:     break;
+    case 4:     flags += 1 << 4;        break;
+    case 8:     flags += 2 << 4;        break;
+    default:    flags += 3 << 4;
+    }
+    switch ((int)(sizeof(z_off_t))) {
+    case 2:     break;
+    case 4:     flags += 1 << 6;        break;
+    case 8:     flags += 2 << 6;        break;
+    default:    flags += 3 << 6;
+    }
+#ifdef DEBUG
+    flags += 1 << 8;
+#endif
+#if defined(ASMV) || defined(ASMINF)
+    flags += 1 << 9;
+#endif
+#ifdef ZLIB_WINAPI
+    flags += 1 << 10;
+#endif
+#ifdef BUILDFIXED
+    flags += 1 << 12;
+#endif
+#ifdef DYNAMIC_CRC_TABLE
+    flags += 1 << 13;
+#endif
+#ifdef NO_GZCOMPRESS
+    flags += 1L << 16;
+#endif
+#ifdef NO_GZIP
+    flags += 1L << 17;
+#endif
+#ifdef PKZIP_BUG_WORKAROUND
+    flags += 1L << 20;
+#endif
+#ifdef FASTEST
+    flags += 1L << 21;
+#endif
+#if defined(STDC) || defined(Z_HAVE_STDARG_H)
+#  ifdef NO_vsnprintf
+    flags += 1L << 25;
+#    ifdef HAS_vsprintf_void
+    flags += 1L << 26;
+#    endif
+#  else
+#    ifdef HAS_vsnprintf_void
+    flags += 1L << 26;
+#    endif
+#  endif
+#else
+    flags += 1L << 24;
+#  ifdef NO_snprintf
+    flags += 1L << 25;
+#    ifdef HAS_sprintf_void
+    flags += 1L << 26;
+#    endif
+#  else
+#    ifdef HAS_snprintf_void
+    flags += 1L << 26;
+#    endif
+#  endif
+#endif
+    return flags;
+}
+
+#ifdef DEBUG
+
+#  ifndef verbose
+#    define verbose 0
+#  endif
+int ZLIB_INTERNAL z_verbose = verbose;
+
+void ZLIB_INTERNAL z_error (m)
+    char *m;
+{
+    fprintf(stderr, "%s\n", m);
+    exit(1);
+}
+#endif
+
+/* exported to allow conversion of error code to string for compress() and
+ * uncompress()
+ */
+const char * ZEXPORT zError(err)
+    int err;
+{
+    return ERR_MSG(err);
+}
+
+#if defined(_WIN32_WCE)
+    /* The Microsoft C Run-Time Library for Windows CE doesn't have
+     * errno.  We define it as a global variable to simplify porting.
+     * Its value is always 0 and should not be used.
+     */
+    int errno = 0;
+#endif
+
+#ifndef HAVE_MEMCPY
+
+void ZLIB_INTERNAL zmemcpy(dest, source, len)
+    Bytef* dest;
+    const Bytef* source;
+    uInt  len;
+{
+    if (len == 0) return;
+    do {
+        *dest++ = *source++; /* ??? to be unrolled */
+    } while (--len != 0);
+}
+
+int ZLIB_INTERNAL zmemcmp(s1, s2, len)
+    const Bytef* s1;
+    const Bytef* s2;
+    uInt  len;
+{
+    uInt j;
+
+    for (j = 0; j < len; j++) {
+        if (s1[j] != s2[j]) return 2*(s1[j] > s2[j])-1;
+    }
+    return 0;
+}
+
+void ZLIB_INTERNAL zmemzero(dest, len)
+    Bytef* dest;
+    uInt  len;
+{
+    if (len == 0) return;
+    do {
+        *dest++ = 0;  /* ??? to be unrolled */
+    } while (--len != 0);
+}
+#endif
+
+#ifndef Z_SOLO
+
+#ifdef SYS16BIT
+
+#ifdef __TURBOC__
+/* Turbo C in 16-bit mode */
+
+#  define MY_ZCALLOC
+
+/* Turbo C malloc() does not allow dynamic allocation of 64K bytes
+ * and farmalloc(64K) returns a pointer with an offset of 8, so we
+ * must fix the pointer. Warning: the pointer must be put back to its
+ * original form in order to free it, use zcfree().
+ */
+
+#define MAX_PTR 10
+/* 10*64K = 640K */
+
+local int next_ptr = 0;
+
+typedef struct ptr_table_s {
+    voidpf org_ptr;
+    voidpf new_ptr;
+} ptr_table;
+
+local ptr_table table[MAX_PTR];
+/* This table is used to remember the original form of pointers
+ * to large buffers (64K). Such pointers are normalized with a zero offset.
+ * Since MSDOS is not a preemptive multitasking OS, this table is not
+ * protected from concurrent access. This hack doesn't work anyway on
+ * a protected system like OS/2. Use Microsoft C instead.
+ */
+
+voidpf ZLIB_INTERNAL zcalloc (voidpf opaque, unsigned items, unsigned size)
+{
+    voidpf buf = opaque; /* just to make some compilers happy */
+    ulg bsize = (ulg)items*size;
+
+    /* If we allocate less than 65520 bytes, we assume that farmalloc
+     * will return a usable pointer which doesn't have to be normalized.
+     */
+    if (bsize < 65520L) {
+        buf = farmalloc(bsize);
+        if (*(ush*)&buf != 0) return buf;
+    } else {
+        buf = farmalloc(bsize + 16L);
+    }
+    if (buf == NULL || next_ptr >= MAX_PTR) return NULL;
+    table[next_ptr].org_ptr = buf;
+
+    /* Normalize the pointer to seg:0 */
+    *((ush*)&buf+1) += ((ush)((uch*)buf-0) + 15) >> 4;
+    *(ush*)&buf = 0;
+    table[next_ptr++].new_ptr = buf;
+    return buf;
+}
+
+void ZLIB_INTERNAL zcfree (voidpf opaque, voidpf ptr)
+{
+    int n;
+    if (*(ush*)&ptr != 0) { /* object < 64K */
+        farfree(ptr);
+        return;
+    }
+    /* Find the original pointer */
+    for (n = 0; n < next_ptr; n++) {
+        if (ptr != table[n].new_ptr) continue;
+
+        farfree(table[n].org_ptr);
+        while (++n < next_ptr) {
+            table[n-1] = table[n];
+        }
+        next_ptr--;
+        return;
+    }
+    ptr = opaque; /* just to make some compilers happy */
+    Assert(0, "zcfree: ptr not found");
+}
+
+#endif /* __TURBOC__ */
+
+
+#ifdef M_I86
+/* Microsoft C in 16-bit mode */
+
+#  define MY_ZCALLOC
+
+#if (!defined(_MSC_VER) || (_MSC_VER <= 600))
+#  define _halloc  halloc
+#  define _hfree   hfree
+#endif
+
+voidpf ZLIB_INTERNAL zcalloc (voidpf opaque, uInt items, uInt size)
+{
+    if (opaque) opaque = 0; /* to make compiler happy */
+    return _halloc((long)items, size);
+}
+
+void ZLIB_INTERNAL zcfree (voidpf opaque, voidpf ptr)
+{
+    if (opaque) opaque = 0; /* to make compiler happy */
+    _hfree(ptr);
+}
+
+#endif /* M_I86 */
+
+#endif /* SYS16BIT */
+
+
+#ifndef MY_ZCALLOC /* Any system without a special alloc function */
+
+#ifndef STDC
+extern voidp  malloc OF((uInt size));
+extern voidp  calloc OF((uInt items, uInt size));
+extern void   free   OF((voidpf ptr));
+#endif
+
+voidpf ZLIB_INTERNAL zcalloc (opaque, items, size)
+    voidpf opaque;
+    unsigned items;
+    unsigned size;
+{
+    if (opaque) items += size - size; /* make compiler happy */
+    return sizeof(uInt) > 2 ? (voidpf)malloc(items * size) :
+                              (voidpf)calloc(items, size);
+}
+
+void ZLIB_INTERNAL zcfree (opaque, ptr)
+    voidpf opaque;
+    voidpf ptr;
+{
+    free(ptr);
+    if (opaque) return; /* make compiler happy */
+}
+
+#endif /* MY_ZCALLOC */
+
+#endif /* !Z_SOLO */
diff --git a/zlib/zutil.h b/zlib/zutil.h
new file mode 100644 (file)
index 0000000..24ab06b
--- /dev/null
@@ -0,0 +1,253 @@
+/* zutil.h -- internal interface and configuration of the compression library
+ * Copyright (C) 1995-2013 Jean-loup Gailly.
+ * For conditions of distribution and use, see copyright notice in zlib.h
+ */
+
+/* WARNING: this file should *not* be used by applications. It is
+   part of the implementation of the compression library and is
+   subject to change. Applications should only use zlib.h.
+ */
+
+/* @(#) $Id$ */
+
+#ifndef ZUTIL_H
+#define ZUTIL_H
+
+#ifdef HAVE_HIDDEN
+#  define ZLIB_INTERNAL __attribute__((visibility ("hidden")))
+#else
+#  define ZLIB_INTERNAL
+#endif
+
+#include "zlib.h"
+
+#if defined(STDC) && !defined(Z_SOLO)
+#  if !(defined(_WIN32_WCE) && defined(_MSC_VER))
+#    include <stddef.h>
+#  endif
+#  include <string.h>
+#  include <stdlib.h>
+#endif
+
+#ifdef Z_SOLO
+   typedef long ptrdiff_t;  /* guess -- will be caught if guess is wrong */
+#endif
+
+#ifndef local
+#  define local static
+#endif
+/* compile with -Dlocal if your debugger can't find static symbols */
+
+typedef unsigned char  uch;
+typedef uch FAR uchf;
+typedef unsigned short ush;
+typedef ush FAR ushf;
+typedef unsigned long  ulg;
+
+extern z_const char * const z_errmsg[10]; /* indexed by 2-zlib_error */
+/* (size given to avoid silly warnings with Visual C++) */
+
+#define ERR_MSG(err) z_errmsg[Z_NEED_DICT-(err)]
+
+#define ERR_RETURN(strm,err) \
+  return (strm->msg = ERR_MSG(err), (err))
+/* To be used only when the state is known to be valid */
+
+        /* common constants */
+
+#ifndef DEF_WBITS
+#  define DEF_WBITS MAX_WBITS
+#endif
+/* default windowBits for decompression. MAX_WBITS is for compression only */
+
+#if MAX_MEM_LEVEL >= 8
+#  define DEF_MEM_LEVEL 8
+#else
+#  define DEF_MEM_LEVEL  MAX_MEM_LEVEL
+#endif
+/* default memLevel */
+
+#define STORED_BLOCK 0
+#define STATIC_TREES 1
+#define DYN_TREES    2
+/* The three kinds of block type */
+
+#define MIN_MATCH  3
+#define MAX_MATCH  258
+/* The minimum and maximum match lengths */
+
+#define PRESET_DICT 0x20 /* preset dictionary flag in zlib header */
+
+        /* target dependencies */
+
+#if defined(MSDOS) || (defined(WINDOWS) && !defined(WIN32))
+#  define OS_CODE  0x00
+#  ifndef Z_SOLO
+#    if defined(__TURBOC__) || defined(__BORLANDC__)
+#      if (__STDC__ == 1) && (defined(__LARGE__) || defined(__COMPACT__))
+         /* Allow compilation with ANSI keywords only enabled */
+         void _Cdecl farfree( void *block );
+         void *_Cdecl farmalloc( unsigned long nbytes );
+#      else
+#        include <alloc.h>
+#      endif
+#    else /* MSC or DJGPP */
+#      include <malloc.h>
+#    endif
+#  endif
+#endif
+
+#ifdef AMIGA
+#  define OS_CODE  0x01
+#endif
+
+#if defined(VAXC) || defined(VMS)
+#  define OS_CODE  0x02
+#  define F_OPEN(name, mode) \
+     fopen((name), (mode), "mbc=60", "ctx=stm", "rfm=fix", "mrs=512")
+#endif
+
+#if defined(ATARI) || defined(atarist)
+#  define OS_CODE  0x05
+#endif
+
+#ifdef OS2
+#  define OS_CODE  0x06
+#  if defined(M_I86) && !defined(Z_SOLO)
+#    include <malloc.h>
+#  endif
+#endif
+
+#if defined(MACOS) || defined(TARGET_OS_MAC)
+#  define OS_CODE  0x07
+#  ifndef Z_SOLO
+#    if defined(__MWERKS__) && __dest_os != __be_os && __dest_os != __win32_os
+#      include <unix.h> /* for fdopen */
+#    else
+#      ifndef fdopen
+#        define fdopen(fd,mode) NULL /* No fdopen() */
+#      endif
+#    endif
+#  endif
+#endif
+
+#ifdef TOPS20
+#  define OS_CODE  0x0a
+#endif
+
+#ifdef WIN32
+#  ifndef __CYGWIN__  /* Cygwin is Unix, not Win32 */
+#    define OS_CODE  0x0b
+#  endif
+#endif
+
+#ifdef __50SERIES /* Prime/PRIMOS */
+#  define OS_CODE  0x0f
+#endif
+
+#if defined(_BEOS_) || defined(RISCOS)
+#  define fdopen(fd,mode) NULL /* No fdopen() */
+#endif
+
+#if (defined(_MSC_VER) && (_MSC_VER > 600)) && !defined __INTERIX
+#  if defined(_WIN32_WCE)
+#    define fdopen(fd,mode) NULL /* No fdopen() */
+#    ifndef _PTRDIFF_T_DEFINED
+       typedef int ptrdiff_t;
+#      define _PTRDIFF_T_DEFINED
+#    endif
+#  else
+#    define fdopen(fd,type)  _fdopen(fd,type)
+#  endif
+#endif
+
+#if defined(__BORLANDC__) && !defined(MSDOS)
+  #pragma warn -8004
+  #pragma warn -8008
+  #pragma warn -8066
+#endif
+
+/* provide prototypes for these when building zlib without LFS */
+#if !defined(_WIN32) && \
+    (!defined(_LARGEFILE64_SOURCE) || _LFS64_LARGEFILE-0 == 0)
+    ZEXTERN uLong ZEXPORT adler32_combine64 OF((uLong, uLong, z_off_t));
+    ZEXTERN uLong ZEXPORT crc32_combine64 OF((uLong, uLong, z_off_t));
+#endif
+
+        /* common defaults */
+
+#ifndef OS_CODE
+#  define OS_CODE  0x03  /* assume Unix */
+#endif
+
+#ifndef F_OPEN
+#  define F_OPEN(name, mode) fopen((name), (mode))
+#endif
+
+         /* functions */
+
+#if defined(pyr) || defined(Z_SOLO)
+#  define NO_MEMCPY
+#endif
+#if defined(SMALL_MEDIUM) && !defined(_MSC_VER) && !defined(__SC__)
+ /* Use our own functions for small and medium model with MSC <= 5.0.
+  * You may have to use the same strategy for Borland C (untested).
+  * The __SC__ check is for Symantec.
+  */
+#  define NO_MEMCPY
+#endif
+#if defined(STDC) && !defined(HAVE_MEMCPY) && !defined(NO_MEMCPY)
+#  define HAVE_MEMCPY
+#endif
+#ifdef HAVE_MEMCPY
+#  ifdef SMALL_MEDIUM /* MSDOS small or medium model */
+#    define zmemcpy _fmemcpy
+#    define zmemcmp _fmemcmp
+#    define zmemzero(dest, len) _fmemset(dest, 0, len)
+#  else
+#    define zmemcpy memcpy
+#    define zmemcmp memcmp
+#    define zmemzero(dest, len) memset(dest, 0, len)
+#  endif
+#else
+   void ZLIB_INTERNAL zmemcpy OF((Bytef* dest, const Bytef* source, uInt len));
+   int ZLIB_INTERNAL zmemcmp OF((const Bytef* s1, const Bytef* s2, uInt len));
+   void ZLIB_INTERNAL zmemzero OF((Bytef* dest, uInt len));
+#endif
+
+/* Diagnostic functions */
+#ifdef DEBUG
+#  include <stdio.h>
+   extern int ZLIB_INTERNAL z_verbose;
+   extern void ZLIB_INTERNAL z_error OF((char *m));
+#  define Assert(cond,msg) {if(!(cond)) z_error(msg);}
+#  define Trace(x) {if (z_verbose>=0) fprintf x ;}
+#  define Tracev(x) {if (z_verbose>0) fprintf x ;}
+#  define Tracevv(x) {if (z_verbose>1) fprintf x ;}
+#  define Tracec(c,x) {if (z_verbose>0 && (c)) fprintf x ;}
+#  define Tracecv(c,x) {if (z_verbose>1 && (c)) fprintf x ;}
+#else
+#  define Assert(cond,msg)
+#  define Trace(x)
+#  define Tracev(x)
+#  define Tracevv(x)
+#  define Tracec(c,x)
+#  define Tracecv(c,x)
+#endif
+
+#ifndef Z_SOLO
+   voidpf ZLIB_INTERNAL zcalloc OF((voidpf opaque, unsigned items,
+                                    unsigned size));
+   void ZLIB_INTERNAL zcfree  OF((voidpf opaque, voidpf ptr));
+#endif
+
+#define ZALLOC(strm, items, size) \
+           (*((strm)->zalloc))((strm)->opaque, (items), (size))
+#define ZFREE(strm, addr)  (*((strm)->zfree))((strm)->opaque, (voidpf)(addr))
+#define TRY_FREE(s, p) {if (p) ZFREE(s, p);}
+
+/* Reverse the bytes in a 32-bit value */
+#define ZSWAP32(q) ((((q) >> 24) & 0xff) + (((q) >> 8) & 0xff00) + \
+                    (((q) & 0xff00) << 8) + (((q) & 0xff) << 24))
+
+#endif /* ZUTIL_H */
Impressum, Datenschutz