From e3ac0d70956f5b5fee633f7cbf4b3b8616e4f06c Mon Sep 17 00:00:00 2001 From: Martin Holst Swende Date: Tue, 1 Apr 2014 20:52:45 +0200 Subject: [PATCH 01/49] Fixed so build scripts utilises the git version --- tools/mkversion.pl | 48 ++++++++++------------------------------------ 1 file changed, 10 insertions(+), 38 deletions(-) diff --git a/tools/mkversion.pl b/tools/mkversion.pl index 6f2eff69b..de394a85d 100644 --- a/tools/mkversion.pl +++ b/tools/mkversion.pl @@ -3,58 +3,30 @@ # Normally a couple of lines of bash would be enough (see openpcd project, original firmware by Harald Welte and Milosch Meriac) # but this will, at least in theory, also work on Windows with our current compile environment. # -- Henryk Plötz 2009-09-28 +# Modified april 2014 because of the move to github. +# --- Martin Holst Swende -my $main_dir = shift; # Clear environment locale so that svn will not use localized strings $ENV{'LC_ALL'} = "C"; $ENV{'LANG'} = "C"; -my $svnversion = 0; +my $gitversion = `git describe --dirty`; +my $gitbranch = `git rev-parse --abbrev-ref HEAD`; my $clean = 2; my @compiletime = gmtime(); -# Strategy one: call svn info and extract last changed revision, call svn status and look for ^M -if(open(SVNINFO, "svn info $main_dir|")) { - while() { - if (/^Last Changed Rev: (.*)/) { - $svnversion = $1; - ## last; # Do not abort here, since SVN tends to complain about a Broken pipe - } - } - close(SVNINFO); +my $fullgitinfo= $gitbranch . '/'.$gitversion; - if(open(SVNSTATUS, "svn status $main_dir|")) { - $clean = 1; - while() { - if(/^M/) { - $clean = 0; - ## last; - } - } - close(SVNINFO); - } +$fullgitinfo=~ s/(\s)//g; -} else { - # Strategy two: look for .svn/entries. The third line should be "dir", the fourth line should contain - # the currently checked out revision, the eleventh line should contain the last changed revision. - # revision. - if(open(ENTRIES, "$main_dir/.svn/entries")) { - my $i = 1; - while() { - last if($i == 3 and !/^dir/); - if($i == 11 and /^([0-9]*)/) { - $svnversion = $1; - } - $i++; - } - } -} +# Crop so it fits within 50 characters +$fullgitinfo =~ s/.{50}\K.*//s; $compiletime[4] += 1; $compiletime[5] += 1900; my $ctime = sprintf("%6\$04i-%5\$02i-%4\$02i %3\$02i:%2\$02i:%1\$02i", @compiletime); -$svnversion=~ s/(^\s+|\s+$)//g; + print < Date: Wed, 2 Apr 2014 11:55:16 +0200 Subject: [PATCH 02/49] Changed size of version info --- include/proxmark3.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/proxmark3.h b/include/proxmark3.h index e54da312e..ee76875eb 100644 --- a/include/proxmark3.h +++ b/include/proxmark3.h @@ -89,7 +89,7 @@ struct version_information { char versionversion; /* Must be 1 */ char present; /* 1 if the version information could be created at compile time, otherwise 0 and the remaining fields (except for magic) are empty */ char clean; /* 1: Tree was clean, no local changes. 0: Tree was unclean. 2: Couldn't be determined */ - char svnversion[9]; /* String with the SVN revision */ + char svnversion[50]; /* String with the SVN revision */ char buildtime[30]; /* string with the build time */ } __attribute__((packed)); From 9c6837165bbe5d7e01d7d4f96dcdad761451c2d1 Mon Sep 17 00:00:00 2001 From: ikarus Date: Wed, 2 Apr 2014 21:46:25 +0200 Subject: [PATCH 03/49] Updated nameing (svn -> git) & fixed whitespaces. --- armsrc/util.c | 2 +- include/proxmark3.h | 2 +- tools/mkversion.pl | 6 +++--- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/armsrc/util.c b/armsrc/util.c index 905bad253..a250e5293 100644 --- a/armsrc/util.c +++ b/armsrc/util.c @@ -239,7 +239,7 @@ void FormatVersionInformation(char *dst, int len, const char *prefix, void *vers return; } - strncat(dst, v->svnversion, len); + strncat(dst, v->gitversion, len); if(v->clean == 0) { strncat(dst, "-unclean", len); } else if(v->clean == 2) { diff --git a/include/proxmark3.h b/include/proxmark3.h index ee76875eb..ce263ca11 100644 --- a/include/proxmark3.h +++ b/include/proxmark3.h @@ -89,7 +89,7 @@ struct version_information { char versionversion; /* Must be 1 */ char present; /* 1 if the version information could be created at compile time, otherwise 0 and the remaining fields (except for magic) are empty */ char clean; /* 1: Tree was clean, no local changes. 0: Tree was unclean. 2: Couldn't be determined */ - char svnversion[50]; /* String with the SVN revision */ + char gitversion[50]; /* String with the git revision */ char buildtime[30]; /* string with the build time */ } __attribute__((packed)); diff --git a/tools/mkversion.pl b/tools/mkversion.pl index de394a85d..19616441a 100644 --- a/tools/mkversion.pl +++ b/tools/mkversion.pl @@ -7,7 +7,7 @@ # --- Martin Holst Swende -# Clear environment locale so that svn will not use localized strings +# Clear environment locale so that git will not use localized strings $ENV{'LC_ALL'} = "C"; $ENV{'LANG'} = "C"; @@ -16,9 +16,9 @@ my $gitbranch = `git rev-parse --abbrev-ref HEAD`; my $clean = 2; my @compiletime = gmtime(); -my $fullgitinfo= $gitbranch . '/'.$gitversion; +my $fullgitinfo = $gitbranch . '/' . $gitversion; -$fullgitinfo=~ s/(\s)//g; +$fullgitinfo =~ s/(\s)//g; # Crop so it fits within 50 characters $fullgitinfo =~ s/.{50}\K.*//s; From 7eb0f3d0ff084a9ef0a8475dfd0db024652e01f1 Mon Sep 17 00:00:00 2001 From: ikarus Date: Wed, 2 Apr 2014 21:51:35 +0200 Subject: [PATCH 04/49] Added lua, luac and proxmark3 (compieled binaries) to .gitignore. --- .gitignore | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.gitignore b/.gitignore index a43a00fe7..3f6347a0d 100644 --- a/.gitignore +++ b/.gitignore @@ -12,8 +12,11 @@ *.moc.cpp *.exe proxmark +proxmark3 flasher version.c +lua +luac fpga/* !fpga/fpga.bit From cba867f20282576a947b2c7f2396cc7b62be655a Mon Sep 17 00:00:00 2001 From: Martin Holst Swende Date: Fri, 4 Apr 2014 20:14:58 +0200 Subject: [PATCH 05/49] Final (?) fixes to git versioning https://github.com/Proxmark/proxmark3/issues/10 --- armsrc/appmain.c | 2 +- armsrc/util.c | 16 ++++++++-------- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/armsrc/appmain.c b/armsrc/appmain.c index 7af47a519..b6c322008 100644 --- a/armsrc/appmain.c +++ b/armsrc/appmain.c @@ -336,7 +336,7 @@ extern struct version_information version_information; extern char *_bootphase1_version_pointer, _flash_start, _flash_end; void SendVersion(void) { - char temp[48]; /* Limited data payload in USB packets */ + char temp[256]; /* Limited data payload in USB packets */ DbpString("Prox/RFID mark3 RFID instrument"); /* Try to find the bootrom version information. Expect to find a pointer at diff --git a/armsrc/util.c b/armsrc/util.c index a250e5293..2d3aab9ca 100644 --- a/armsrc/util.c +++ b/armsrc/util.c @@ -227,27 +227,27 @@ void FormatVersionInformation(char *dst, int len, const char *prefix, void *vers dst[0] = 0; strncat(dst, prefix, len); if(v->magic != VERSION_INFORMATION_MAGIC) { - strncat(dst, "Missing/Invalid version information", len); + strncat(dst, "Missing/Invalid version information", len - strlen(dst) - 1); return; } if(v->versionversion != 1) { - strncat(dst, "Version information not understood", len); + strncat(dst, "Version information not understood", len - strlen(dst) - 1); return; } if(!v->present) { - strncat(dst, "Version information not available", len); + strncat(dst, "Version information not available", len - strlen(dst) - 1); return; } - strncat(dst, v->gitversion, len); + strncat(dst, v->gitversion, len - strlen(dst) - 1); if(v->clean == 0) { - strncat(dst, "-unclean", len); + strncat(dst, "-unclean", len - strlen(dst) - 1); } else if(v->clean == 2) { - strncat(dst, "-suspect", len); + strncat(dst, "-suspect", len - strlen(dst) - 1); } - strncat(dst, " ", len); - strncat(dst, v->buildtime, len); + strncat(dst, " ", len - strlen(dst) - 1); + strncat(dst, v->buildtime, len - strlen(dst) - 1); } // ------------------------------------------------------------------------- From c3963755b7bdb05523e694fbecca4dca2ad0112b Mon Sep 17 00:00:00 2001 From: penturalabs Date: Tue, 15 Apr 2014 11:47:01 +0100 Subject: [PATCH 06/49] Implement replay command. --- README.txt | 164 ++--------------------------------------- armsrc/appmain.c | 3 + armsrc/apps.h | 1 + armsrc/iclass.c | 144 ++++++++++++++++++++++++++++++++++++ client/cmdhficlass.c | 34 ++++++--- client/cmdhficlass.h | 1 + common/iso15693tools.c | 29 ++++++++ common/iso15693tools.h | 1 + include/usb_cmd.h | 1 + 9 files changed, 210 insertions(+), 168 deletions(-) diff --git a/README.txt b/README.txt index 1e46bf0c6..1f506f21f 100644 --- a/README.txt +++ b/README.txt @@ -1,161 +1,7 @@ -NOTICE: -(2014-03-17) -Moving the repository from google code to GitHub is up for discussion! -Please check out the following thread and post your comments... -http://www.proxmark.org/forum/viewtopic.php?id=1902 -Discussions will close on March 31st. +iclass research +=============== -INTRO: - -This file contains enough software, logic (for the FPGA), and design -documentation for the hardware that you could, at least in theory, -do something useful with a proxmark3. It has commands to: - - * read any kind of 125 kHz unidirectional tag - * simulate any kind of 125 kHz unidirectional tag - -(This is enough to perform all of the silly cloning attacks, like the -ones that I did at the Capitol in Sacramento, or anything involving -a Verichip. From a technical standpoint, these are not that exciting, -although the `software radio' architecture of the proxmark3 makes it -easy and fun to support new formats.) - -As a bonus, I include some code to use the 13.56 MHz hardware, so you can: - - * do anything that a (medium-range) ISO 15693 reader could - * read an ISO 14443 tag, if you know the higher-layer protocol - * pretend to be an ISO 14443 tag, if you know the higher-layer protocol - * snoop on an ISO 14443 transaction - -I am not actively developing any of this. I have other projects that -seem to be more useful. - -USING THE PACKAGE: - -The software tools required to build include: - - * cygwin or other unix-like tools for Windows - * devkitPro (http://wiki.devkitpro.org/index.php/Getting_Started/devkitARM) - * Xilinx's WebPack tools - * Modelsim (for test only) - * perl - -When installing devkitPro, you only need to install the compiler itself. Additional -support libraries are not required. - -Documentation is minimal, but see the doc/ directory for what exists. A -previous familiarity with the ARM, with digital signal processing, -and with embedded programming in general is assumed. - -The device is used through a specialized command line interface; for -example, to clone a Verichip, you might type: - - loread ; this reads the tag, and stores the - ; raw samples in memory on the ARM - - losamples ; then we download the samples to - ; the PC - - vchdemod clone ; demodulate the ID, and then put it - ; back in a format that we can replay - - losim ; and then replay it - -To read an ISO 15693 tag, you might type: - - hiread ; read the tag; this involves sending a - ; particular command, and then getting - ; the response (which is stored as raw - ; samples in memory on the ARM) - - hisamples ; then download those samples to the PC - - hi15demod ; and demod them to bits (and check the - ; CRC etc. at the same time) - -Notice that in both cases the signal processing mostly happened on the PC -side; that is of course not practical for a real reader, but it is easier -to initially write your code and debug on the PC side than on the ARM. As -long as you use integer math (and I do), it's trivial to port it over -when you're done. - -The USB driver and bootloader are documented (and available separately -for download, if you wish to use them in another project) at - - http://cq.cx/trivia.pl - - -OBTAINING HARDWARE: - -Most of the ultra-low-volume contract assemblers that have sprung up -(Screaming Circuits, the various cheap Asian suppliers, etc.) could put -something like this together with a reasonable yield. A run of around -a dozen units is probably cost-effective. The BOM includes (possibly- -outdated) component pricing, and everything is available from Digikey -and the usual distributors. - -If you've never assembled a modern circuit board by hand, then this is -not a good place to start. Some of the components (e.g. the crystals) -must not be assembled with a soldering iron, and require hot air. - -The schematics are included; the component values given are not -necessarily correct for all situations, but it should be possible to do -nearly anything you would want with appropriate population options. - -The printed circuit board artwork is also available, as Gerbers and an -Excellon drill file. - - -FUTURE PLANS, ENHANCEMENTS THAT YOU COULD MAKE: - -At some point I should write software involving a proper real-time -operating system for the ARM. I would then provide interrupt-driven -drivers for many of the peripherals that are polled now (the USB, -the data stream from the FPGA), which would make it easier to develop -complex applications. - -It would not be all that hard to implement the ISO 15693 reader properly -(with anticollision, all the commands supported, and so on)--the signal -processing is already written, so it is all straightforward applications -work. - -I have basic support for ISO 14443 as well: a sniffer, a simulated -tag, and a reader. It won't do anything useful unless you fill in the -high-layer protocol. - -Nicer (i.e., closer-to-optimal) implementations of all kinds of signal -processing would be useful as well. - -A practical implementation of the learning-the-tag's-ID-from-what-the- -reader-broadcasts-during-anticollision attacks would be relatively -straightforward. This would involve some signal processing on the FPGA, -but not much else after that. - -It would be neat to write a driver that could stream samples from the A/Ds -over USB to the PC, using the full available bandwidth of USB. I am not -yet sure what that would be good for, but surely something. This would -require a kernel-mode driver under Windows, though, which is more work. - - -LICENSING: - -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 St, Fifth Floor, Boston, MA 02110-1301 USA - - -Jonathan Westhues -user jwesthues, at host cq.cx - -May 2007, Cambridge MA +Implemented "hf iclass replay " where MAC is 8-char Hexidecimal MAC. +Useful to replay a snooped authentication sequence if cc (e-purse) is not correctly updated as per the specification. +Currently hardset to only read Page 1. \ No newline at end of file diff --git a/armsrc/appmain.c b/armsrc/appmain.c index 7af47a519..71952b12f 100644 --- a/armsrc/appmain.c +++ b/armsrc/appmain.c @@ -858,6 +858,9 @@ void UsbPacketReceived(uint8_t *packet, int len) case CMD_READER_ICLASS: ReaderIClass(c->arg[0]); break; + case CMD_READER_ICLASS_REPLAY: + ReaderIClass_Replay(c->arg[0], c->d.asBytes); + break; #endif case CMD_SIMULATE_TAG_HF_LISTEN: diff --git a/armsrc/apps.h b/armsrc/apps.h index e21b5ce5e..12aedcc2f 100644 --- a/armsrc/apps.h +++ b/armsrc/apps.h @@ -190,6 +190,7 @@ void SetDebugIso15693(uint32_t flag); void RAMFUNC SnoopIClass(void); void SimulateIClass(uint8_t arg0, uint8_t *datain); void ReaderIClass(uint8_t arg0); +void ReaderIClass_Replay(uint8_t arg0,uint8_t *MAC); // hitag2.h void SnoopHitag(uint32_t type); diff --git a/armsrc/iclass.c b/armsrc/iclass.c index e876132e7..c827ed51d 100644 --- a/armsrc/iclass.c +++ b/armsrc/iclass.c @@ -45,6 +45,7 @@ // same construction as in ISO 14443; // different initial value (CRC_ICLASS) #include "iso14443crc.h" +#include "iso15693tools.h" static int timeout = 4096; @@ -1476,4 +1477,147 @@ void ReaderIClass(uint8_t arg0) { LED_A_OFF(); } +void ReaderIClass_Replay(uint8_t arg0, 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 }; + + uint16_t crc = 0; + uint8_t cardsize=0; + bool read_success=false; + uint8_t mem=0; + + static struct memory_t{ + int k16; + int book; + int k2; + int lockauth; + int keyaccess; + } memory; + + uint8_t* resp = (((uint8_t *)BigBuf) + 3560); // was 3560 - tied to other size changes + + // Reset trace buffer + memset(trace, 0x44, RECV_CMD_OFFSET); + traceLen = 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); + + SetAdcMuxFor(GPIO_MUXSEL_HIPKD); + + // 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); + + LED_A_ON(); + + for(int i=0;i<1;i++) { + + if(traceLen > TRACE_SIZE) { + DbpString("Trace full"); + break; + } + + 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("Dump Contents"); + //first get configuration block + 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; + //then loop around remaining blocks + for(uint8_t j=0; j> 8; + read[3] = crc & 0xff; + while(!read_success){ + ReaderTransmitIClass(read, sizeof(read)); + if(ReaderReceiveIClass(resp) == 10) { + read_success=true; + Dbprintf(" %02x: %02x %02x %02x %02x %02x %02x %02x %02x", + j, resp[0], resp[1], resp[2], + resp[3], resp[4], resp[5], + resp[6], resp[7]); + } + } + } + } + } + WDT_HIT(); + } + + LED_A_OFF(); +} + diff --git a/client/cmdhficlass.c b/client/cmdhficlass.c index f807e9721..aa5a2145f 100644 --- a/client/cmdhficlass.c +++ b/client/cmdhficlass.c @@ -219,20 +219,35 @@ int CmdHFiClassReader(const char *Cmd) PrintAndLog("--readertype:%02x", readerType); UsbCommand c = {CMD_READER_ICLASS, {readerType}}; - //memcpy(c.d.asBytes, CSN, 8); SendCommand(&c); - /*UsbCommand * resp = WaitForResponseTimeout(CMD_ACK, 1500); - if (resp != NULL) { - uint8_t isOK = resp->arg[0] & 0xff; - PrintAndLog("isOk:%02x", isOK); - } else { - PrintAndLog("Command execute timeout"); - }*/ - return 0; } +int CmdHFiClassReader_Replay(const char *Cmd) +{ + uint8_t readerType = 0; + uint8_t MAC[4]={0x00, 0x00, 0x00, 0x00}; + + if (strlen(Cmd)<1) { + PrintAndLog("Usage: hf iclass replay "); + PrintAndLog(" sample: hf iclass replay 00112233"); + return 0; + } + + if (param_gethex(Cmd, 0, MAC, 8)) { + PrintAndLog("MAC must include 8 HEX symbols"); + return 1; + } + + UsbCommand c = {CMD_READER_ICLASS_REPLAY, {readerType}}; + memcpy(c.d.asBytes, MAC, 4); + SendCommand(&c); + + return 0; +} + + static command_t CommandTable[] = { {"help", CmdHelp, 1, "This help"}, @@ -240,6 +255,7 @@ static command_t CommandTable[] = {"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"}, {NULL, NULL, 0, NULL} }; diff --git a/client/cmdhficlass.h b/client/cmdhficlass.h index c1bf60c79..e4048eb17 100644 --- a/client/cmdhficlass.h +++ b/client/cmdhficlass.h @@ -18,5 +18,6 @@ int CmdHFiClassSnoop(const char *Cmd); int CmdHFiClassSim(const char *Cmd); int CmdHFiClassList(const char *Cmd); int CmdHFiClassReader(const char *Cmd); +int CmdHFiClassReader_Replay(const char *Cmd); #endif diff --git a/common/iso15693tools.c b/common/iso15693tools.c index add0ba69f..0f7a250bf 100644 --- a/common/iso15693tools.c +++ b/common/iso15693tools.c @@ -12,6 +12,9 @@ #include //#include "iso15693tools.h" +#define POLY 0x8408 + + // The CRC as described in ISO 15693-Part 3-Annex C // v buffer with data // n length @@ -63,5 +66,31 @@ char* Iso15693sprintUID(char *target,uint8_t *uid) { return target; } +unsigned short iclass_crc16(char *data_p, unsigned short length) +{ + unsigned char i; + unsigned int data; + unsigned int crc = 0xffff; + if (length == 0) + return (~crc); + + do + { + for (i=0, data=(unsigned int)0xff & *data_p++; + i < 8; + i++, data >>= 1) + { + if ((crc & 0x0001) ^ (data & 0x0001)) + crc = (crc >> 1) ^ POLY; + else crc >>= 1; + } + } while (--length); + + crc = ~crc; + data = crc; + crc = (crc << 8) | (data >> 8 & 0xff); + crc = crc ^ 0xBC3; + return (crc); +} diff --git a/common/iso15693tools.h b/common/iso15693tools.h index c831fec4c..ec63728fe 100644 --- a/common/iso15693tools.h +++ b/common/iso15693tools.h @@ -70,6 +70,7 @@ uint16_t Iso15693Crc(uint8_t *v, int n); int Iso15693AddCrc(uint8_t *req, int n); char* Iso15693sprintUID(char *target,uint8_t *uid); +unsigned short iclass_crc16(char *data_p, unsigned short length); //----------------------------------------------------------------------------- // Map a sequence of octets (~layer 2 command) into the set of bits to feed diff --git a/include/usb_cmd.h b/include/usb_cmd.h index 9c25555df..cd5a8b752 100644 --- a/include/usb_cmd.h +++ b/include/usb_cmd.h @@ -116,6 +116,7 @@ typedef struct { #define CMD_SNOOP_ICLASS 0x0392 #define CMD_SIMULATE_TAG_ICLASS 0x0393 #define CMD_READER_ICLASS 0x0394 +#define CMD_READER_ICLASS_REPLAY 0x0395 // For measurements of the antenna tuning #define CMD_MEASURE_ANTENNA_TUNING 0x0400 From ff7bb4ef177ba1c680dd9af5a1e30d4f7f29c65f Mon Sep 17 00:00:00 2001 From: Martin Holst Swende Date: Thu, 17 Apr 2014 09:53:54 +0200 Subject: [PATCH 07/49] Experimenting with hacking iclass --- armsrc/appmain.c | 2 +- armsrc/apps.h | 4 +- armsrc/iclass.c | 106 +++++++++++++++++++++++++++++++---------------- 3 files changed, 74 insertions(+), 38 deletions(-) diff --git a/armsrc/appmain.c b/armsrc/appmain.c index b6c322008..30e5ac53c 100644 --- a/armsrc/appmain.c +++ b/armsrc/appmain.c @@ -853,7 +853,7 @@ void UsbPacketReceived(uint8_t *packet, int len) SnoopIClass(); break; case CMD_SIMULATE_TAG_ICLASS: - SimulateIClass(c->arg[0], c->d.asBytes); + SimulateIClass(c->arg[0], c->arg[1], c->arg[2], c->d.asBytes); break; case CMD_READER_ICLASS: ReaderIClass(c->arg[0]); diff --git a/armsrc/apps.h b/armsrc/apps.h index e21b5ce5e..1e97f2945 100644 --- a/armsrc/apps.h +++ b/armsrc/apps.h @@ -188,9 +188,9 @@ void SetDebugIso15693(uint32_t flag); /// iclass.h void RAMFUNC SnoopIClass(void); -void SimulateIClass(uint8_t arg0, uint8_t *datain); +void SimulateIClass(uint32_t arg0, uint32_t arg1, uint32_t arg2, uint8_t *datain); void ReaderIClass(uint8_t arg0); - +void doIClassSimulation(uint8_t csn[], int breakAfterMacReceived); // hitag2.h void SnoopHitag(uint32_t type); void SimulateHitagTag(bool tag_mem_supplied, byte_t* data); diff --git a/armsrc/iclass.c b/armsrc/iclass.c index e876132e7..bfa4a730c 100644 --- a/armsrc/iclass.c +++ b/armsrc/iclass.c @@ -986,31 +986,70 @@ static void CodeIClassTagSOF() ToSendMax++; } -//----------------------------------------------------------------------------- -// Simulate iClass Card -// Only CSN (Card Serial Number) -// -//----------------------------------------------------------------------------- -void SimulateIClass(uint8_t arg0, uint8_t *datain) +/** + * @brief SimulateIClass simulates an iClass card. + * @param arg0 type of simulation + * - 0 uses the first 8 bytes in usb data as CSN + * - 2 "dismantling iclass"-attack. This mode iterates through all CSN's specified + * in the usb data. This mode collects MAC from the reader, in order to do an offline + * attack on the keys. For more info, see "dismantling iclass" and proxclone.com. + * - Other : Uses the default CSN (031fec8af7ff12e0) + * @param arg1 - number of CSN's contained in datain (applicable for mode 2 only) + * @param arg2 + * @param datain + */ +void SimulateIClass(uint32_t arg0, uint32_t arg1, uint32_t arg2, uint8_t *datain) { - uint8_t simType = arg0; + uint32_t simType = arg0; + uint32_t numberOfCSNS = arg1; - // Enable and clear the trace - tracing = TRUE; - traceLen = 0; - memset(trace, 0x44, TRACE_SIZE); + // Enable and clear the trace + iso14a_set_tracing(TRUE); + iso14a_clear_trace(); - // CSN followed by two CRC bytes - uint8_t response2[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; - uint8_t response3[] = { 0x03, 0x1f, 0xec, 0x8a, 0xf7, 0xff, 0x12, 0xe0, 0x00, 0x00 }; - - // e-Purse - uint8_t response4[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; + uint8_t csn_crc[] = { 0x03, 0x1f, 0xec, 0x8a, 0xf7, 0xff, 0x12, 0xe0, 0x00, 0x00 }; if(simType == 0) { // Use the CSN from commandline - memcpy(response3, datain, 8); + memcpy(csn_crc, datain, 8); + doIClassSimulation(csn_crc,0); + }else if(simType == 1) + { + doIClassSimulation(csn_crc,0); } + else if(simType == 2) + { + // In this mode, a number of csns are within datain. We'll simulate each one, one at a time + // in order to collect MAC's from the reader. This can later be used in an offlne-attack + // in order to obtain the keys, as in the "dismantling iclass"-paper. + for(int i = 0 ; i < numberOfCSNS && i*8+8 < USB_CMD_DATA_SIZE; i++) + { + // The usb data is 512 bytes, fitting 65 8-byte CSNs in there. + + memcpy(csn_crc, datain+(i*8), 8); + doIClassSimulation(csn_crc,1); + } + }else{ + // We may want a mode here where we hardcode the csns to use (from proxclone). + // That will speed things up a little, but not required just yet. + Dbprintf("The mode is not implemented, reserved for future use"); + } + +} +/** + * @brief Does the actual simulation + * @param csn - csn to use + * @param breakAfterMacReceived if true, returns after reader MAC has been received. + */ +void doIClassSimulation(uint8_t csn[], int breakAfterMacReceived) +{ + // CSN followed by two CRC bytes + uint8_t response2[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; + uint8_t response3[] = { 0,0,0,0,0,0,0,0,0,0}; + memcpy(response3,csn,sizeof(response3)); + + // e-Purse + uint8_t response4[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; // Construct anticollision-CSN rotateCSN(response3,response2); @@ -1019,6 +1058,7 @@ void SimulateIClass(uint8_t arg0, uint8_t *datain) ComputeCrc14443(CRC_ICLASS, response2, 8, &response2[8], &response2[9]); ComputeCrc14443(CRC_ICLASS, response3, 8, &response3[8], &response3[9]); + int exitLoop = 0; // Reader 0a // Tag 0f // Reader 0c @@ -1052,7 +1092,7 @@ void SimulateIClass(uint8_t arg0, uint8_t *datain) int resp4Len; // + 1720.. - uint8_t *receivedCmd = (((uint8_t *)BigBuf) + RECV_CMD_OFFSET); + uint8_t *receivedCmd = (((uint8_t *)BigBuf) + RECV_CMD_OFFSET); memset(receivedCmd, 0x44, RECV_CMD_SIZE); int len; @@ -1083,7 +1123,7 @@ void SimulateIClass(uint8_t arg0, uint8_t *datain) int cmdsRecvd = 0; LED_A_ON(); - for(;;) { + while(!exitLoop) { LED_B_OFF(); if(!GetIClassCommandFromReader(receivedCmd, &len, 100)) { DbpString("button press"); @@ -1119,24 +1159,21 @@ void SimulateIClass(uint8_t arg0, uint8_t *datain) LED_B_ON(); } else if(receivedCmd[0] == 0x05) { // Reader random and reader MAC!!! - // Lets store this ;-) -/* - Dbprintf(" CSN: %02x %02x %02x %02x %02x %02x %02x %02x", - response3[0], response3[1], response3[2], - response3[3], response3[4], response3[5], - response3[6], response3[7]); -*/ - Dbprintf("READER AUTH (len=%02d): %02x %02x %02x %02x %02x %02x %02x %02x %02x", - len, - receivedCmd[0], receivedCmd[1], receivedCmd[2], - receivedCmd[3], receivedCmd[4], receivedCmd[5], - receivedCmd[6], receivedCmd[7], receivedCmd[8]); - // Do not respond // We do not know what to answer, so lets keep quit resp = resp1; respLen = 0; //order = 5; respdata = NULL; respsize = 0; + if (breakAfterMacReceived){ + // TODO, actually return this to the caller instead of just + // dbprintf:ing ... + Dbprintf("CSN: %02x %02x %02x %02x %02x %02x %02x %02x"); + Dbprintf("RDR: (len=%02d): %02x %02x %02x %02x %02x %02x %02x %02x %02x",len, + receivedCmd[0], receivedCmd[1], receivedCmd[2], + receivedCmd[3], receivedCmd[4], receivedCmd[5], + receivedCmd[6], receivedCmd[7], receivedCmd[8]); + exitLoop = true; + } } else if(receivedCmd[0] == 0x00 && len == 1) { // Reader ends the session resp = resp1; respLen = 0; //order = 0; @@ -1177,7 +1214,6 @@ void SimulateIClass(uint8_t arg0, uint8_t *datain) break; } } - memset(receivedCmd, 0x44, RECV_CMD_SIZE); } @@ -1422,7 +1458,7 @@ void ReaderIClass(uint8_t arg0) { uint8_t* resp = (((uint8_t *)BigBuf) + 3560); // was 3560 - tied to other size changes // Reset trace buffer - memset(trace, 0x44, RECV_CMD_OFFSET); + memset(trace, 0x44, RECV_CMD_OFFSET); traceLen = 0; // Setup SSC From 17cba2693d87d80b98a20ad8c2774155fa55d3fa Mon Sep 17 00:00:00 2001 From: Martin Holst Swende Date: Thu, 24 Apr 2014 14:13:33 +0200 Subject: [PATCH 08/49] Implemented client side changes for iclass hack, attempted to fix issues with trace. The trace functionality from iso14443 has been rewritten, unfortunately iclass used that also, which made iclass 'list' stop functioning, both for simulation and snooping --- armsrc/apps.h | 2 +- armsrc/iclass.c | 90 +++++++------------ armsrc/iso14443a.c | 5 +- client/cmdhficlass.c | 204 +++++++++++++++++++++++++++++++++++++++++-- 4 files changed, 230 insertions(+), 71 deletions(-) diff --git a/armsrc/apps.h b/armsrc/apps.h index 1e97f2945..93760aae3 100644 --- a/armsrc/apps.h +++ b/armsrc/apps.h @@ -146,7 +146,7 @@ void RAMFUNC SnoopIso14443a(uint8_t param); void SimulateIso14443aTag(int tagType, int uid_1st, int uid_2nd, byte_t* data); void ReaderIso14443a(UsbCommand * c); // Also used in iclass.c -bool RAMFUNC LogTrace(const uint8_t * btBytes, uint8_t iLen, uint32_t iSamples, uint32_t dwParity, bool bReader); +bool RAMFUNC LogTrace(const uint8_t * btBytes, uint8_t iLen, uint32_t iSamples, uint32_t dwParity, bool readerToTag); uint32_t GetParity(const uint8_t * pbtCmd, int iLen); void iso14a_set_trigger(bool enable); void iso14a_clear_trace(); diff --git a/armsrc/iclass.c b/armsrc/iclass.c index bfa4a730c..42fed888f 100644 --- a/armsrc/iclass.c +++ b/armsrc/iclass.c @@ -666,12 +666,7 @@ static RAMFUNC int ManchesterDecoding(int v) //----------------------------------------------------------------------------- void RAMFUNC SnoopIClass(void) { -// DEFINED ABOVE -// #define RECV_CMD_OFFSET 3032 -// #define RECV_RES_OFFSET 3096 -// #define DMA_BUFFER_OFFSET 3160 -// #define DMA_BUFFER_SIZE 4096 -// #define TRACE_SIZE 3000 + // 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 @@ -681,14 +676,10 @@ void RAMFUNC SnoopIClass(void) // The command (reader -> tag) that we're receiving. // The length of a received command will in most cases be no more than 18 bytes. // So 32 should be enough! - uint8_t *receivedCmd = (((uint8_t *)BigBuf) + RECV_CMD_OFFSET); + uint8_t *readerToTagCmd = (((uint8_t *)BigBuf) + RECV_CMD_OFFSET); // The response (tag -> reader) that we're receiving. - uint8_t *receivedResponse = (((uint8_t *)BigBuf) + RECV_RES_OFFSET); + uint8_t *tagToReaderResponse = (((uint8_t *)BigBuf) + RECV_RES_OFFSET); - // 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; - // reset traceLen to 0 iso14a_set_tracing(TRUE); iso14a_clear_trace(); @@ -709,7 +700,7 @@ void RAMFUNC SnoopIClass(void) memset(trace, 0x44, RECV_CMD_OFFSET); // Set up the demodulator for tag -> reader responses. - Demod.output = receivedResponse; + Demod.output = tagToReaderResponse; Demod.len = 0; Demod.state = DEMOD_UNSYNCD; @@ -721,7 +712,7 @@ void RAMFUNC SnoopIClass(void) // And the reader -> tag commands memset(&Uart, 0, sizeof(Uart)); - Uart.output = receivedCmd; + Uart.output = readerToTagCmd; Uart.byteCntMax = 32; // was 100 (greg)//////////////////////////////////////////////////////////////////////// Uart.state = STATE_UNSYNCD; @@ -764,20 +755,13 @@ void RAMFUNC SnoopIClass(void) //samples += 4; samples += 1; - //div2++; - //if(div2 > 3) { - //div2 = 0; - //decbyte ^= ((smpl & 0x01) << (3 - div)); - //decbyte ^= (((smpl & 0x01) | ((smpl & 0x02) >> 1)) << (3 - div)); // better already... - //decbyte ^= (((smpl & 0x01) | ((smpl & 0x02) >> 1) | ((smpl & 0x04) >> 2)) << (3 - div)); // even better... if(smpl & 0xF) { decbyte ^= (1 << (3 - div)); } - //decbyte ^= (MajorityNibble[(smpl & 0x0F)] << (3 - div)); // FOR READER SIDE COMMUMICATION... - //decbyte ^= ((smpl & 0x10) << (3 - div)); + decbyter <<= 2; decbyter ^= (smpl & 0x30); @@ -788,21 +772,11 @@ void RAMFUNC SnoopIClass(void) if(OutOfNDecoding((smpl & 0xF0) >> 4)) { rsamples = samples - Uart.samples; LED_C_ON(); - //if(triggered) { - trace[traceLen++] = ((rsamples >> 0) & 0xff); - trace[traceLen++] = ((rsamples >> 8) & 0xff); - trace[traceLen++] = ((rsamples >> 16) & 0xff); - trace[traceLen++] = ((rsamples >> 24) & 0xff); - trace[traceLen++] = ((Uart.parityBits >> 0) & 0xff); - trace[traceLen++] = ((Uart.parityBits >> 8) & 0xff); - trace[traceLen++] = ((Uart.parityBits >> 16) & 0xff); - trace[traceLen++] = ((Uart.parityBits >> 24) & 0xff); - trace[traceLen++] = Uart.byteCnt; - memcpy(trace+traceLen, receivedCmd, Uart.byteCnt); - traceLen += Uart.byteCnt; - if(traceLen > TRACE_SIZE) break; - //} - /* And ready to receive another command. */ + + if(!LogTrace(readerToTagCmd,Uart.byteCnt, rsamples, Uart.parityBits,TRUE)) break; + //if(!LogTrace(NULL, 0, Uart.endTime*16 - DELAY_READER_AIR2ARM_AS_SNIFFER, 0, TRUE)) break; + + /* And ready to receive another command. */ Uart.state = STATE_UNSYNCD; /* And also reset the demod code, which might have been */ /* false-triggered by the commands from the reader. */ @@ -819,26 +793,13 @@ void RAMFUNC SnoopIClass(void) rsamples = samples - Demod.samples; LED_B_ON(); - // timestamp, as a count of samples - trace[traceLen++] = ((rsamples >> 0) & 0xff); - trace[traceLen++] = ((rsamples >> 8) & 0xff); - trace[traceLen++] = ((rsamples >> 16) & 0xff); - trace[traceLen++] = 0x80 | ((rsamples >> 24) & 0xff); - trace[traceLen++] = ((Demod.parityBits >> 0) & 0xff); - trace[traceLen++] = ((Demod.parityBits >> 8) & 0xff); - trace[traceLen++] = ((Demod.parityBits >> 16) & 0xff); - trace[traceLen++] = ((Demod.parityBits >> 24) & 0xff); - // length - trace[traceLen++] = Demod.len; - memcpy(trace+traceLen, receivedResponse, Demod.len); - traceLen += Demod.len; - if(traceLen > TRACE_SIZE) break; + if(!LogTrace(tagToReaderResponse,Demod.len, rsamples, Demod.parityBits,FALSE)) break; + //if (!LogTrace(NULL, 0, Demod.endTime*16 - DELAY_TAG_AIR2ARM_AS_SNIFFER, 0, FALSE)) break; - //triggered = TRUE; // And ready to receive another response. memset(&Demod, 0, sizeof(Demod)); - Demod.output = receivedResponse; + Demod.output = tagToReaderResponse; Demod.state = DEMOD_UNSYNCD; LED_C_OFF(); } @@ -1019,6 +980,7 @@ void SimulateIClass(uint32_t arg0, uint32_t arg1, uint32_t arg2, uint8_t *datain } else if(simType == 2) { + Dbprintf("Going into attack mode"); // In this mode, a number of csns are within datain. We'll simulate each one, one at a time // in order to collect MAC's from the reader. This can later be used in an offlne-attack // in order to obtain the keys, as in the "dismantling iclass"-paper. @@ -1131,13 +1093,13 @@ void doIClassSimulation(uint8_t csn[], int breakAfterMacReceived) } // Okay, look at the command now. - if(receivedCmd[0] == 0x0a) { + if(receivedCmd[0] == 0x0a || receivedCmd[0] == 0x26) { // Reader in anticollission phase resp = resp1; respLen = resp1Len; //order = 1; respdata = &sof; respsize = sizeof(sof); //resp = resp2; respLen = resp2Len; order = 2; - //DbpString("Hello request from reader:"); + Dbprintf("Hello request from reader, %02x, tracing=%d", receivedCmd[0], tracing); } else if(receivedCmd[0] == 0x0c) { // Reader asks for anticollission CSN resp = resp2; respLen = resp2Len; //order = 2; @@ -1180,6 +1142,7 @@ void doIClassSimulation(uint8_t csn[], int breakAfterMacReceived) respdata = NULL; respsize = 0; } else { + //#db# Unknown command received from reader (len=5): 26 1 0 f6 a 44 44 44 44 // Never seen this command before Dbprintf("Unknown command received from reader (len=%d): %x %x %x %x %x %x %x %x %x", len, @@ -1205,14 +1168,21 @@ void doIClassSimulation(uint8_t csn[], int breakAfterMacReceived) } if (tracing) { - LogTrace(receivedCmd,len, rsamples, Uart.parityBits, TRUE); - if (respdata != NULL) { - LogTrace(respdata,respsize, rsamples, SwapBits(GetParity(respdata,respsize),respsize), FALSE); - } - if(traceLen > TRACE_SIZE) { + //LogTrace(receivedCmd,len, rsamples, Uart.parityBits, TRUE); + if(!LogTrace(receivedCmd,len, rsamples, Uart.parityBits,TRUE)) + { DbpString("Trace full"); break; } + + if (respdata != NULL) { + //LogTrace(respdata,respsize, rsamples, SwapBits(GetParity(respdata,respsize),respsize), FALSE); + if(!LogTrace(respdata,respsize, rsamples,SwapBits(GetParity(respdata,respsize),respsize),FALSE)) + { + DbpString("Trace full"); + break; + } + } } memset(receivedCmd, 0x44, RECV_CMD_SIZE); } diff --git a/armsrc/iso14443a.c b/armsrc/iso14443a.c index 9afe0788c..8e4082eab 100644 --- a/armsrc/iso14443a.c +++ b/armsrc/iso14443a.c @@ -190,7 +190,7 @@ void AppendCrc14443a(uint8_t* data, int len) } // The function LogTrace() is also used by the iClass implementation in iClass.c -bool RAMFUNC LogTrace(const uint8_t * btBytes, uint8_t iLen, uint32_t timestamp, uint32_t dwParity, bool bReader) +bool RAMFUNC LogTrace(const uint8_t * btBytes, uint8_t iLen, uint32_t timestamp, uint32_t dwParity, bool readerToTag) { // Return when trace is full if (traceLen + sizeof(timestamp) + sizeof(dwParity) + iLen >= TRACE_SIZE) { @@ -203,7 +203,8 @@ bool RAMFUNC LogTrace(const uint8_t * btBytes, uint8_t iLen, uint32_t timestamp, trace[traceLen++] = ((timestamp >> 8) & 0xff); trace[traceLen++] = ((timestamp >> 16) & 0xff); trace[traceLen++] = ((timestamp >> 24) & 0xff); - if (!bReader) { + + if (!readerToTag) { trace[traceLen - 1] |= 0x80; } trace[traceLen++] = ((dwParity >> 0) & 0xff); diff --git a/client/cmdhficlass.c b/client/cmdhficlass.c index f807e9721..9f6842b81 100644 --- a/client/cmdhficlass.c +++ b/client/cmdhficlass.c @@ -21,10 +21,139 @@ #include "cmdhficlass.h" #include "common.h" #include "util.h" +#include "cmdmain.h" static int CmdHelp(const char *Cmd); +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 + res = res ^ (res >> 4); // 4th pass + return res & 1; +} + int CmdHFiClassList(const char *Cmd) +{ + + bool ShowWaitCycles = false; + char param = param_getchar(Cmd, 0); + + if (param != 0) { + PrintAndLog("List data in trace buffer."); + PrintAndLog("Usage: hf iclass list"); + PrintAndLog("h - help"); + PrintAndLog("sample: hf iclass list"); + return 0; + } + + uint8_t got[1920]; + GetFromBigBuf(got,sizeof(got),0); + WaitForResponse(CMD_ACK,NULL); + + PrintAndLog("Recorded Activity"); + PrintAndLog(""); + PrintAndLog("Start = Start of Start Bit, End = End of last modulation. Src = Source of Transfer"); + PrintAndLog("All times are in carrier periods (1/13.56Mhz)"); + PrintAndLog(""); + PrintAndLog(" Start | End | Src | Data"); + PrintAndLog("-----------|-----------|-----|--------"); + + int i; + uint32_t first_timestamp = 0; + uint32_t timestamp; + bool tagToReader; + uint32_t parityBits; + uint8_t len; + uint8_t *frame; + uint32_t EndOfTransmissionTimestamp = 0; + + uint8_t empty[4] = {0x44,0x44,0x44,0x44}; + + for( i=0; i < 1900;) + { + //First 32 bits contain + // isResponse (1 bit) + // timestamp (remaining) + //Then paritybits + //Then length + timestamp = *((uint32_t *)(got+i)); + parityBits = *((uint32_t *)(got+i+4)); + len = got[i+8]; + frame = (got+i+9); + uint32_t next_timestamp = (*((uint32_t *)(got+i+9))) & 0x7fffffff; + + tagToReader = timestamp & 0x80000000; + timestamp &= 0x7fffffff; + + if(i==0) { + first_timestamp = timestamp; + } + + // Break and stick with current result if buffer + // was not completely full + if(memcmp(frame,empty,sizeof(empty))) break; + + char line[1000] = ""; + + if(len)//We have some data to display + { + int j,oddparity; + + for(j = 0; j < len ; j++) + { + oddparity = 0x01 ^ xorbits_8(frame[j] & 0xFF); + + if (tagToReader && (oddparity != ((parityBits >> (len - j - 1)) & 0x01))) { + sprintf(line+(j*4), "%02x! ", frame[j]); + } else { + sprintf(line+(j*4), "%02x ", frame[j]); + } + } + }else + { + if (ShowWaitCycles) { + sprintf(line, "fdt (Frame Delay Time): %d", (next_timestamp - timestamp)); + } + } + + char *crc = ""; + + if(len > 2) + { + uint8_t b1, b2; + if(!tagToReader && len == 4) { + // Rough guess that this is a command from the reader + // For iClass the command byte is not part of the CRC + ComputeCrc14443(CRC_ICLASS, &frame[1], len-3, &b1, &b2); + } + else { + // For other data.. CRC might not be applicable (UPDATE commands etc.) + ComputeCrc14443(CRC_ICLASS, frame, len-2, &b1, &b2); + } + + if (b1 != frame[len-2] || b2 != frame[len-1]) { + crc = (tagToReader & (len < 8)) ? "" : " !crc"; + } + } + + i += (len + 9); + EndOfTransmissionTimestamp = (*((uint32_t *)(got+i))) & 0x7fffffff; + + // Not implemented for iclass on the ARM-side + //if (!ShowWaitCycles) i += 9; + + PrintAndLog(" %9d | %9d | %s | %s %s", + (timestamp - first_timestamp), + (EndOfTransmissionTimestamp - first_timestamp), + (len?(tagToReader ? "Tag" : "Rdr"):" "), + line, crc); + } + return 0; +} + +int CmdHFiClassListOld(const char *Cmd) { uint8_t got[1920]; GetFromBigBuf(got,sizeof(got),0); @@ -50,7 +179,9 @@ int CmdHFiClassList(const char *Cmd) isResponse = 0; } + int metric = 0; + int parityBits = *((uint32_t *)(got+i+4)); // 4 bytes of additional information... // maximum of 32 additional parity bit information @@ -177,21 +308,78 @@ int CmdHFiClassSim(const char *Cmd) uint8_t simType = 0; uint8_t CSN[8] = {0, 0, 0, 0, 0, 0, 0, 0}; - if (strlen(Cmd)<2) { - PrintAndLog("Usage: hf iclass sim "); + if (strlen(Cmd)<1) { + PrintAndLog("Usage: hf iclass sim [0 ] | x"); + PrintAndLog(" options"); + PrintAndLog(" 0 simulate the given CSN"); + PrintAndLog(" 1 simulate default CSN"); + PrintAndLog(" 2 iterate CSNs, gather MACs"); PrintAndLog(" sample: hf iclass sim 0 031FEC8AF7FF12E0"); + PrintAndLog(" sample: hf iclass sim 2"); return 0; } simType = param_get8(Cmd, 0); - if (param_gethex(Cmd, 1, CSN, 16)) { - PrintAndLog("A CSN should consist of 16 HEX symbols"); - return 1; - } - PrintAndLog("--simtype:%02x csn:%s", simType, sprint_hex(CSN, 8)); - UsbCommand c = {CMD_SIMULATE_TAG_ICLASS, {simType}}; + if(simType == 0) + { + if (param_gethex(Cmd, 1, CSN, 16)) { + PrintAndLog("A CSN should consist of 16 HEX symbols"); + return 1; + } + PrintAndLog("--simtype:%02x csn:%s", simType, sprint_hex(CSN, 8)); + + } + if(simType > 2) + { + PrintAndLog("Undefined simptype %d", simType); + return 1; + } + uint8_t numberOfCSNs=0; + + UsbCommand c = {CMD_SIMULATE_TAG_ICLASS, {simType,numberOfCSNs}}; memcpy(c.d.asBytes, CSN, 8); + + if(simType == 2) + { + c.arg[1] = 10;//10 CSNs + uint8_t csns[] ={ + /* Order Simulated CSN HASH1 Recovered key bytes */ + /* 1 */ 0x00,0x0B,0x0F,0xFF,0xF7,0xFF,0x12,0xE0,// 0101000045014545 00,01 45 + /* 2 */ 0x03,0x0B,0x0E,0xFE,0xF7,0xFF,0x12,0xE0,// 0202000045014545 02 + /* 3 */ 0x04,0x0D,0x0D,0xFD,0xF7,0xFF,0x12,0xE0,// 0303000045014545 03 + /* 4 */ 0x04,0x0F,0x0F,0xF7,0xF7,0xFF,0x12,0xE0,// 0901000045014545 09 + /* 5 */ 0x01,0x13,0x10,0xF4,0xF7,0xFF,0x12,0xE0,// 0C00000045014545 0C + /* 6 */ 0x02,0x14,0x10,0xF2,0xF7,0xFF,0x12,0xE0,// 0E00000045014545 0E + /* 7 */ 0x05,0x17,0x10,0xEC,0xF7,0xFF,0x12,0xE0,// 1400000045014545 14 + /* 8 */ 0x00,0x6B,0x6F,0xDF,0xF7,0xFF,0x12,0xE0,// 2121000045014545 21 + /* 9 */ 0x03,0x6B,0x6E,0xDE,0xF7,0xFF,0x12,0xE0,// 2222000045014545 22 + /* 10 */ 0x04,0x6D,0x6D,0xDD,0xF7,0xFF,0x12,0xE0,// 2323000045014545 23 + /* 11 */ 0x00,0x4F,0x4B,0x43,0xF7,0xFF,0x12,0xE0,// 3D45000045014545 3D + /* 12 */ 0x00,0x4B,0x4F,0x3F,0xF7,0xFF,0x12,0xE0,// 4141000045014545 41 + /* 13 */ 0x03,0x4B,0x4E,0x3E,0xF7,0xFF,0x12,0xE0,// 4242000045014545 42 + /* 14 */ 0x04,0x4D,0x4D,0x3D,0xF7,0xFF,0x12,0xE0,// 4343000045014545 43 + /* 15 */ 0x04,0x37,0x37,0x7F,0xF7,0xFF,0x12,0xE0,// 0159000045014545 59 + /* 16 */ 0x00,0x2B,0x2F,0x9F,0xF7,0xFF,0x12,0xE0,// 6161000045014545 61 + /* 17 */ 0x03,0x2B,0x2E,0x9E,0xF7,0xFF,0x12,0xE0,// 6262000045014545 62 + /* 18 */ 0x04,0x2D,0x2D,0x9D,0xF7,0xFF,0x12,0xE0,// 6363000045014545 63 + /* 19 */ 0x00,0x27,0x23,0xBB,0xF7,0xFF,0x12,0xE0,// 456D000045014545 6D + /* 20 */ 0x02,0x52,0xAA,0x80,0xF7,0xFF,0x12,0xE0,// 0066000045014545 66 + /* 21 */ 0x00,0x5C,0xA6,0x80,0xF7,0xFF,0x12,0xE0,// 006A000045014545 6A + /* 22 */ 0x01,0x5F,0xA4,0x80,0xF7,0xFF,0x12,0xE0,// 006C000045014545 6C + /* 23 */ 0x06,0x5E,0xA2,0x80,0xF7,0xFF,0x12,0xE0,// 006E000045014545 6E + /* 24 */ 0x02,0x0E,0x0E,0xFC,0xF7,0xFF,0x12,0xE0,// 0402000045014545 04 + /* 25 */ 0x05,0x0D,0x0E,0xFA,0xF7,0xFF,0x12,0xE0,// 0602000045014545 06 + /* 26 */ 0x06,0x0F,0x0D,0xF9,0xF7,0xFF,0x12,0xE0,// 0703000045014545 07 + /* 27 */ 0x00,0x01,0x05,0x1D,0xF7,0xFF,0x12,0xE0,// 630B000045014545 0B + /* 28 */ 0x02,0x07,0x01,0x1D,0xF7,0xFF,0x12,0xE0,// 630F000045014545 0F + /* 29 */ 0x04,0x7F,0x7F,0xA7,0xF7,0xFF,0x12,0xE0,// 5911000045014545 11 + /* 30 */ 0x04,0x60,0x6E,0xE8,0xF7,0xFF,0x12,0xE0,// 1822000045014545 18 + }; + memcpy(c.d.asBytes, csns, sizeof(c.d.asBytes)); + + } + SendCommand(&c); /*UsbCommand * resp = WaitForResponseTimeout(CMD_ACK, 1500); From f83cc12613d18f6a5a3a5e6c01f7b83cae2ee92f Mon Sep 17 00:00:00 2001 From: Martin Holst Swende Date: Thu, 24 Apr 2014 15:48:00 +0200 Subject: [PATCH 09/49] More work on iclass --- armsrc/apps.h | 2 +- armsrc/iclass.c | 39 +++++++++++++++++++++++++++++++-------- client/cmdhficlass.c | 6 ++---- 3 files changed, 34 insertions(+), 13 deletions(-) diff --git a/armsrc/apps.h b/armsrc/apps.h index 93760aae3..087abd0a6 100644 --- a/armsrc/apps.h +++ b/armsrc/apps.h @@ -190,7 +190,7 @@ void SetDebugIso15693(uint32_t flag); void RAMFUNC SnoopIClass(void); void SimulateIClass(uint32_t arg0, uint32_t arg1, uint32_t arg2, uint8_t *datain); void ReaderIClass(uint8_t arg0); -void doIClassSimulation(uint8_t csn[], int breakAfterMacReceived); +int doIClassSimulation(uint8_t csn[], int breakAfterMacReceived); // hitag2.h void SnoopHitag(uint32_t type); void SimulateHitagTag(bool tag_mem_supplied, byte_t* data); diff --git a/armsrc/iclass.c b/armsrc/iclass.c index 42fed888f..5a4c15d00 100644 --- a/armsrc/iclass.c +++ b/armsrc/iclass.c @@ -989,7 +989,10 @@ void SimulateIClass(uint32_t arg0, uint32_t arg1, uint32_t arg2, uint8_t *datain // The usb data is 512 bytes, fitting 65 8-byte CSNs in there. memcpy(csn_crc, datain+(i*8), 8); - doIClassSimulation(csn_crc,1); + if(doIClassSimulation(csn_crc,1)) + { + return; // Button pressed + } } }else{ // We may want a mode here where we hardcode the csns to use (from proxclone). @@ -1003,13 +1006,13 @@ void SimulateIClass(uint32_t arg0, uint32_t arg1, uint32_t arg2, uint8_t *datain * @param csn - csn to use * @param breakAfterMacReceived if true, returns after reader MAC has been received. */ -void doIClassSimulation(uint8_t csn[], int breakAfterMacReceived) +int doIClassSimulation(uint8_t csn[], int breakAfterMacReceived) { // CSN followed by two CRC bytes uint8_t response2[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; uint8_t response3[] = { 0,0,0,0,0,0,0,0,0,0}; memcpy(response3,csn,sizeof(response3)); - + Dbprintf("Simulating CSN %02x%02x%02x%02x%02x%02x%02x%02x",csn[0],csn[1],csn[2],csn[3],csn[4],csn[5],csn[6],csn[7]); // e-Purse uint8_t response4[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; @@ -1085,26 +1088,28 @@ void doIClassSimulation(uint8_t csn[], int breakAfterMacReceived) int cmdsRecvd = 0; LED_A_ON(); + bool displayDebug = true; + bool buttonPressed = false; while(!exitLoop) { LED_B_OFF(); if(!GetIClassCommandFromReader(receivedCmd, &len, 100)) { - DbpString("button press"); + buttonPressed = true; break; } // Okay, look at the command now. - if(receivedCmd[0] == 0x0a || receivedCmd[0] == 0x26) { + if(receivedCmd[0] == 0x0a ) { // Reader in anticollission phase resp = resp1; respLen = resp1Len; //order = 1; respdata = &sof; respsize = sizeof(sof); - //resp = resp2; respLen = resp2Len; order = 2; - Dbprintf("Hello request from reader, %02x, tracing=%d", receivedCmd[0], tracing); + displayDebug = false; } else if(receivedCmd[0] == 0x0c) { // Reader asks for anticollission CSN resp = resp2; respLen = resp2Len; //order = 2; respdata = response2; respsize = sizeof(response2); + displayDebug = false; //DbpString("Reader requests anticollission CSN:"); } else if(receivedCmd[0] == 0x81) { // Reader selects anticollission CSN. @@ -1165,8 +1170,19 @@ void doIClassSimulation(uint8_t csn[], int breakAfterMacReceived) if(respLen > 0) { SendIClassAnswer(resp, respLen, 21); + + if(displayDebug) Dbprintf("R2T:(len=%d): %x %x %x %x %x %x %x %x %x\nT2R: (total/data =%d/%d): %x %x %x %x %x %x %x %x %x", + len, + receivedCmd[0], receivedCmd[1], receivedCmd[2], + receivedCmd[3], receivedCmd[4], receivedCmd[5], + receivedCmd[6], receivedCmd[7], receivedCmd[8], + respLen,respsize, + resp[0], resp[1], resp[2], + resp[3], resp[4], resp[5], + resp[6], resp[7], resp[8]); + } - + if (tracing) { //LogTrace(receivedCmd,len, rsamples, Uart.parityBits, TRUE); if(!LogTrace(receivedCmd,len, rsamples, Uart.parityBits,TRUE)) @@ -1177,6 +1193,7 @@ void doIClassSimulation(uint8_t csn[], int breakAfterMacReceived) if (respdata != NULL) { //LogTrace(respdata,respsize, rsamples, SwapBits(GetParity(respdata,respsize),respsize), FALSE); + //if(!LogTrace(resp,respLen, rsamples,SwapBits(GetParity(respdata,respsize),respsize),FALSE)) if(!LogTrace(respdata,respsize, rsamples,SwapBits(GetParity(respdata,respsize),respsize),FALSE)) { DbpString("Trace full"); @@ -1190,6 +1207,12 @@ void doIClassSimulation(uint8_t csn[], int breakAfterMacReceived) Dbprintf("%x", cmdsRecvd); LED_A_OFF(); LED_B_OFF(); + if(buttonPressed) + { + DbpString("Button pressed"); + } + + return buttonPressed; } static int SendIClassAnswer(uint8_t *resp, int respLen, int delay) diff --git a/client/cmdhficlass.c b/client/cmdhficlass.c index 9f6842b81..13ffc8ba7 100644 --- a/client/cmdhficlass.c +++ b/client/cmdhficlass.c @@ -69,7 +69,6 @@ int CmdHFiClassList(const char *Cmd) uint8_t *frame; uint32_t EndOfTransmissionTimestamp = 0; - uint8_t empty[4] = {0x44,0x44,0x44,0x44}; for( i=0; i < 1900;) { @@ -91,9 +90,8 @@ int CmdHFiClassList(const char *Cmd) first_timestamp = timestamp; } - // Break and stick with current result if buffer - // was not completely full - if(memcmp(frame,empty,sizeof(empty))) break; + // Break and stick with current result if buffer was not completely full + if (frame[0] == 0x44 && frame[1] == 0x44 && frame[2] == 0x44 && frame[3] == 0x44) break; char line[1000] = ""; From fdcd43eb159b98ea8732ea4479ec1f7e38334f57 Mon Sep 17 00:00:00 2001 From: Martin Holst Swende Date: Sat, 26 Apr 2014 16:15:16 +0200 Subject: [PATCH 10/49] Fixed (?) http://www.proxmark.org/forum/viewtopic.php?id=1967, two bytes are discarded when adding crc and sending raw iso14443a commands --- armsrc/iso14443a.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/armsrc/iso14443a.c b/armsrc/iso14443a.c index 8e4082eab..cd7c95406 100644 --- a/armsrc/iso14443a.c +++ b/armsrc/iso14443a.c @@ -192,6 +192,7 @@ void AppendCrc14443a(uint8_t* data, int len) // The function LogTrace() is also used by the iClass implementation in iClass.c bool RAMFUNC LogTrace(const uint8_t * btBytes, uint8_t iLen, uint32_t timestamp, uint32_t dwParity, bool readerToTag) { + if (!tracing) return FALSE; // Return when trace is full if (traceLen + sizeof(timestamp) + sizeof(dwParity) + iLen >= TRACE_SIZE) { tracing = FALSE; // don't trace any more @@ -1859,8 +1860,10 @@ void ReaderIso14443a(UsbCommand *c) if(param & ISO14A_APPEND_CRC) { AppendCrc14443a(cmd,len); len += 2; + lenbits += 16; } if(lenbits>0) { + ReaderTransmitBitsPar(cmd,lenbits,GetParity(cmd,lenbits/8), NULL); } else { ReaderTransmit(cmd,len, NULL); From a66fca86b9f81e07161e89c101338968eda9d6c5 Mon Sep 17 00:00:00 2001 From: Andrew Davies Date: Fri, 2 May 2014 11:11:54 +0100 Subject: [PATCH 11/49] Updated proxmark research with Holiman's loclass framework --- client/Makefile | 14 +- client/cmdhficlass.c | 71 +++ client/loclass/cipher.c | 260 +++++++++ client/loclass/cipher.h | 46 ++ client/loclass/cipherutils.c | 195 +++++++ client/loclass/cipherutils.h | 55 ++ client/loclass/des.c | 1014 ++++++++++++++++++++++++++++++++++ client/loclass/des.h | 256 +++++++++ client/loclass/ikeys.c | 469 ++++++++++++++++ client/loclass/ikeys.h | 8 + 10 files changed, 2383 insertions(+), 5 deletions(-) create mode 100644 client/loclass/cipher.c create mode 100644 client/loclass/cipher.h create mode 100644 client/loclass/cipherutils.c create mode 100644 client/loclass/cipherutils.h create mode 100644 client/loclass/des.c create mode 100644 client/loclass/des.h create mode 100644 client/loclass/ikeys.c create mode 100644 client/loclass/ikeys.h diff --git a/client/Makefile b/client/Makefile index 6d75b4bbb..c47e8526e 100644 --- a/client/Makefile +++ b/client/Makefile @@ -15,7 +15,7 @@ OBJDIR = obj LDLIBS = -L/opt/local/lib -L/usr/local/lib -lreadline -lpthread ../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 -lcrypto -I. -I../include -I../common -I/opt/local/include -I../liblua -Wall $(COMMON_FLAGS) -g -O4 LUAPLATFORM = generic ifneq (,$(findstring MINGW,$(platform))) @@ -24,9 +24,9 @@ QTLDLIBS = -L$(QTDIR)/lib -lQtCore4 -lQtGui4 MOC = $(QTDIR)/bin/moc LUAPLATFORM = mingw else ifeq ($(platform),Darwin) -CXXFLAGS = -I/Library/Frameworks/QtGui.framework/Versions/Current/Headers -I/Library/Frameworks/QtCore.framework/Versions/Current/Headers -QTLDLIBS = -framework QtGui -framework QtCore -MOC = moc +CXXFLAGS = $(shell pkg-config --cflags QtCore QtGui 2>/dev/null) -Wall -O4 +QTLDLIBS = $(shell pkg-config --libs QtCore QtGui 2>/dev/null) +MOC = $(shell pkg-config --variable=moc_location QtCore) LUAPLATFORM = macosx else CXXFLAGS = $(shell pkg-config --cflags QtCore QtGui 2>/dev/null) -Wall -O4 @@ -56,6 +56,10 @@ 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 \ mifarehost.c\ crc16.c \ iso14443crc.c \ @@ -74,8 +78,8 @@ CMDSRCS = nonce2key/crapto1.c\ cmdhfmf.c \ cmdhw.c \ cmdlf.c \ - cmdlfhid.c \ cmdlfio.c \ + cmdlfhid.c \ cmdlfem4x.c \ cmdlfhitag.c \ cmdlfti.c \ diff --git a/client/cmdhficlass.c b/client/cmdhficlass.c index aa5a2145f..34e8f6d9f 100644 --- a/client/cmdhficlass.c +++ b/client/cmdhficlass.c @@ -21,6 +21,10 @@ #include "cmdhficlass.h" #include "common.h" #include "util.h" +#include "loclass/des.h" +#include "loclass/cipherutils.h" +#include "loclass/cipher.h" +#include "loclass/ikeys.h" static int CmdHelp(const char *Cmd); @@ -247,6 +251,72 @@ 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 result[8]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; + uint8_t div_key[8]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; + des_context ctx_enc; + uint64_t crypted_id=0; + + if (strlen(Cmd)<3) { + PrintAndLog("Usage: hf iclass dump "); + PrintAndLog(" sample: hf iclass dump 0011223344556677 aabbccddeeffgghh FFFFFFFFFFFFFFFF"); + return 0; + } + + if (param_gethex(Cmd, 0, KEY, 16)) { + PrintAndLog("KEY must include 16 HEX symbols"); + return 1; + } + + if (param_gethex(Cmd, 1, CSN, 16)) { + PrintAndLog("CSN must include 16 HEX symbols"); + return 1; + } + if (param_gethex(Cmd, 2, CC_temp, 16)) { + PrintAndLog("CC must include 16 HEX symbols"); + return 1; + } + + memcpy(CCNR,CC_temp,8); + des_setkey_enc( &ctx_enc, KEY); + des_crypt_ecb(&ctx_enc,CSN,result); + PrintAndLog("DES Key: %s",sprint_hex(result,8)); + uint64_t newz=0; + crypted_id = bytes_to_num(result,8); + uint64_t x = (crypted_id & 0xFFFF000000000000 ); + pushbackSixBitByte(&newz, getSixBitByte(crypted_id,0),7); + pushbackSixBitByte(&newz, getSixBitByte(crypted_id,1),6); + pushbackSixBitByte(&newz, getSixBitByte(crypted_id,2),5); + pushbackSixBitByte(&newz, getSixBitByte(crypted_id,3),4); + pushbackSixBitByte(&newz, getSixBitByte(crypted_id,4),3); + pushbackSixBitByte(&newz, getSixBitByte(crypted_id,5),2); + pushbackSixBitByte(&newz, getSixBitByte(crypted_id,6),1); + pushbackSixBitByte(&newz, getSixBitByte(crypted_id,7),0); + newz|= x; + crypted_id=newz; + num_to_bytes(crypted_id,8,result); + PrintAndLog("DESr Key: %s",sprint_hex(result,8)); + //crypted_id = bytes_to_num(result,8); + //memset(result,0,8); + hash0(crypted_id,div_key); + //memcpy(div_key,result,8); + PrintAndLog("Div Key: %s",sprint_hex(div_key,8)); + calc_iclass_mac(CCNR,div_key,MAC); + + UsbCommand c = {CMD_READER_ICLASS_REPLAY, {readerType}}; + memcpy(c.d.asBytes, MAC, 4); + SendCommand(&c); + + return 0; +} + static command_t CommandTable[] = { @@ -256,6 +326,7 @@ static command_t CommandTable[] = {"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"}, {NULL, NULL, 0, NULL} }; diff --git a/client/loclass/cipher.c b/client/loclass/cipher.c new file mode 100644 index 000000000..d7c9abdac --- /dev/null +++ b/client/loclass/cipher.c @@ -0,0 +1,260 @@ +/***************************************************************************** + * This file is part of iClassCipher. It is a reconstructon of the cipher engine + * used in iClass, and RFID techology. + * + * The implementation is based on the work performed by + * Flavio D. Garcia, Gerhard de Koning Gans, Roel Verdult and + * Milosch Meriac in the paper "Dismantling IClass". + * + * Copyright (C) 2014 Martin Holst Swende + * + * This is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as published + * by the Free Software Foundation. + * + * This file 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 IClassCipher. If not, see . + ****************************************************************************/ + +#include +#include +#include +#include +#include +#include "loclass/cipher.h" +#include "loclass/cipherutils.h" +#include "loclass/ikeys.h" + +uint8_t keytable[] = { 0,0,0,0,0,0,0,0}; + +/** +* Definition 2. The feedback function for the top register T : F 16/2 → F 2 +* is defined as +* T (x 0 x 1 . . . . . . x 15 ) = x 0 ⊕ x 1 ⊕ x 5 ⊕ x 7 ⊕ x 10 ⊕ x 11 ⊕ x 14 ⊕ x 15 . +**/ +bool T(State state) +{ + bool x0 = state.t & 0x8000; + bool x1 = state.t & 0x4000; + bool x5 = state.t & 0x0400; + bool x7 = state.t & 0x0100; + bool x10 = state.t & 0x0020; + bool x11 = state.t & 0x0010; + bool x14 = state.t & 0x0002; + bool x15 = state.t & 0x0001; + return x0 ^ x1 ^ x5 ^ x7 ^ x10 ^ x11 ^ x14 ^ x15; +} +/** +* Similarly, the feedback function for the bottom register B : F 8/2 → F 2 is defined as +* B(x 0 x 1 . . . x 7 ) = x 1 ⊕ x 2 ⊕ x 3 ⊕ x 7 . +**/ +bool B(State state) +{ + bool x1 = state.b & 0x40; + bool x2 = state.b & 0x20; + bool x3 = state.b & 0x10; + bool x7 = state.b & 0x01; + + return x1 ^ x2 ^ x3 ^ x7; + +} + + +/** +* Definition 3 (Selection function). The selection function select : F 2 × F 2 × +* F 8/2 → F 3/2 is defined as select(x, y, r) = z 0 z 1 z 2 where +* z 0 = (r 0 ∧ r 2 ) ⊕ (r 1 ∧ r 3 ) ⊕ (r 2 ∨ r 4 ) +* z 1 = (r 0 ∨ r 2 ) ⊕ (r 5 ∨ r 7 ) ⊕ r 1 ⊕ r 6 ⊕ x ⊕ y +* z 2 = (r 3 ∧ r 5 ) ⊕ (r 4 ∧ r 6 ) ⊕ r 7 ⊕ x +**/ +uint8_t _select(bool x, bool y, uint8_t r) +{ + bool r0 = r >> 7 & 0x1; + bool r1 = r >> 6 & 0x1; + bool r2 = r >> 5 & 0x1; + bool r3 = r >> 4 & 0x1; + bool r4 = r >> 3 & 0x1; + bool r5 = r >> 2 & 0x1; + bool r6 = r >> 1 & 0x1; + bool r7 = r & 0x1; + + bool z0 = (r0 & r2) ^ (r1 & ~r3) ^ (r2 | r4); + bool z1 = (r0 | r2) ^ ( r5 | r7) ^ r1 ^ r6 ^ x ^ y; + bool z2 = (r3 & ~r5) ^ (r4 & r6 ) ^ r7 ^ x; + + // The three bitz z0.. z1 are packed into a uint8_t: + // 00000ZZZ + //Return value is a uint8_t + uint8_t retval = 0; + retval |= (z0 << 2) & 4; + retval |= (z1 << 1) & 2; + retval |= z2 & 1; + + // Return value 0 <= retval <= 7 + return retval; +} + +/** +* Definition 4 (Successor state). Let s = l, r, t, b be a cipher state, k ∈ (F 82 ) 8 +* be a key and y ∈ F 2 be the input bit. Then, the successor cipher state s ′ = +* l ′ , r ′ , t ′ , b ′ is defined as +* t ′ := (T (t) ⊕ r 0 ⊕ r 4 )t 0 . . . t 14 l ′ := (k [select(T (t),y,r)] ⊕ b ′ ) ⊞ l ⊞ r +* b ′ := (B(b) ⊕ r 7 )b 0 . . . b 6 r ′ := (k [select(T (t),y,r)] ⊕ b ′ ) ⊞ l +* +* @param s - state +* @param k - array containing 8 bytes +**/ +State successor(uint8_t* k, State s, bool y) +{ + bool r0 = s.r >> 7 & 0x1; + bool r4 = s.r >> 3 & 0x1; + bool r7 = s.r & 0x1; + + State successor = {0,0,0,0}; + + successor.t = s.t >> 1; + successor.t |= (T(s) ^ r0 ^ r4) << 15; + + successor.b = s.b >> 1; + successor.b |= (B(s) ^ r7) << 7; + + bool Tt = T(s); + + successor.l = ((k[_select(Tt,y,s.r)] ^ successor.b) + s.l+s.r ) & 0xFF; + successor.r = ((k[_select(Tt,y,s.r)] ^ successor.b) + s.l ) & 0xFF; + + return successor; +} +/** +* We define the successor function suc which takes a key k ∈ (F 82 ) 8 , a state s and +* an input y ∈ F 2 and outputs the successor state s ′ . We overload the function suc +* to multiple bit input x ∈ F n 2 which we define as +* @param k - array containing 8 bytes +**/ +State suc(uint8_t* k,State s, BitstreamIn *bitstream) +{ + if(bitsLeft(bitstream) == 0) + { + return s; + } + bool lastbit = tailBit(bitstream); + return successor(k,suc(k,s,bitstream), lastbit); +} + +/** +* Definition 5 (Output). Define the function output which takes an internal +* state s =< l, r, t, b > and returns the bit r 5 . We also define the function output +* on multiple bits input which takes a key k, a state s and an input x ∈ F n 2 as +* output(k, s, ǫ) = ǫ +* output(k, s, x 0 . . . x n ) = output(s) · output(k, s ′ , x 1 . . . x n ) +* where s ′ = suc(k, s, x 0 ). +**/ +void output(uint8_t* k,State s, BitstreamIn* in, BitstreamOut* out) +{ + if(bitsLeft(in) == 0) + { + return; + } + //printf("bitsleft %d" , bitsLeft(in)); + //printf(" %0d", s.r >> 2 & 1); + pushBit(out,(s.r >> 2) & 1); + //Remove first bit + uint8_t x0 = headBit(in); + State ss = successor(k,s,x0); + output(k,ss,in, out); +} + +/** +* Definition 6 (Initial state). Define the function init which takes as input a +* key k ∈ (F 82 ) 8 and outputs the initial cipher state s =< l, r, t, b > +**/ + +State init(uint8_t* k) +{ + State s = { + ((k[0] ^ 0x4c) + 0xEC) & 0xFF,// l + ((k[0] ^ 0x4c) + 0x21) & 0xFF,// r + 0x4c, // b + 0xE012 // t + }; + return s; +} +void MAC(uint8_t* k, BitstreamIn input, BitstreamOut out) +{ + uint8_t zeroes_32[] = {0,0,0,0}; + BitstreamIn input_32_zeroes = {zeroes_32,sizeof(zeroes_32)*8,0}; + State initState = suc(k,init(k),&input); + output(k,initState,&input_32_zeroes,&out); + +} + + +void printarr(char * name, uint8_t* arr, int len) +{ + int i ; + printf("uint8_t %s[] = {", name); + for(i =0 ; i< len ; i++) + { + printf("0x%02x,",*(arr+i)); + } + printf("};\n"); +} + +int testMAC() +{ + + //From the "dismantling.IClass" paper: + uint8_t cc_nr[] = {0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0,0,0,0}; + // But actually, that must be reversed, it's "on-the-wire" data + reverse_arraybytes(cc_nr,sizeof(cc_nr)); + + //From the paper + uint8_t div_key[] = {0xE0,0x33,0xCA,0x41,0x9A,0xEE,0x43,0xF9}; + uint8_t correct_MAC[] = {0x1d,0x49,0xC9,0xDA}; + + BitstreamIn bitstream = {cc_nr,sizeof(cc_nr) * 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)); + + if(false && memcmp(dest, correct_MAC,4) == 0) + { + printf("MAC calculation OK!\n"); + + }else + { + printf("MAC calculation failed\n"); + printarr("Calculated_MAC", dest, 4); + printarr("Correct_MAC ", correct_MAC, 4); + return 1; + } + return 0; +} + +int calc_iclass_mac(uint8_t *cc_nr_p, uint8_t *div_key_p, uint8_t *mac) +{ + uint8_t cc_nr[12]; + uint8_t div_key[8]; + memcpy(cc_nr,cc_nr_p,12); + memcpy(div_key,div_key_p,8); + + reverse_arraybytes(cc_nr,sizeof(cc_nr)); + BitstreamIn bitstream = {cc_nr,sizeof(cc_nr) * 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)); + + printf("Calculated_MAC\t%02x%02x%02x%02x\n", dest[0],dest[1],dest[2],dest[3]); + memcpy(mac,dest,4); + + return 1; +} \ No newline at end of file diff --git a/client/loclass/cipher.h b/client/loclass/cipher.h new file mode 100644 index 000000000..10ea8059b --- /dev/null +++ b/client/loclass/cipher.h @@ -0,0 +1,46 @@ +/***************************************************************************** + * This file is part of iClassCipher. It is a reconstructon of the cipher engine + * used in iClass, and RFID techology. + * + * The implementation is based on the work performed by + * Flavio D. Garcia, Gerhard de Koning Gans, Roel Verdult and + * Milosch Meriac in the paper "Dismantling IClass". + * + * Copyright (C) 2014 Martin Holst Swende + * + * This is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as published + * by the Free Software Foundation. + * + * This file 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 IClassCipher. If not, see . + ****************************************************************************/ + +#ifndef CIPHER_H +#define CIPHER_H +#include + +/** +* Definition 1 (Cipher state). A cipher state of iClass s is an element of F 40/2 +* consisting of the following four components: +* 1. the left register l = (l 0 . . . l 7 ) ∈ F 8/2 ; +* 2. the right register r = (r 0 . . . r 7 ) ∈ F 8/2 ; +* 3. the top register t = (t 0 . . . t 15 ) ∈ F 16/2 . +* 4. the bottom register b = (b 0 . . . b 7 ) ∈ F 8/2 . +**/ +typedef struct { + uint8_t l; + uint8_t r; + uint8_t b; + uint16_t t; +} State; + +void printarr(char * name, uint8_t* arr, int len); +int calc_iclass_mac(uint8_t *cc_nr_p, uint8_t *div_key_p, uint8_t *mac); + +#endif // CIPHER_H diff --git a/client/loclass/cipherutils.c b/client/loclass/cipherutils.c new file mode 100644 index 000000000..685a3815b --- /dev/null +++ b/client/loclass/cipherutils.c @@ -0,0 +1,195 @@ +/***************************************************************************** + * This file is part of iClassCipher. It is a reconstructon of the cipher engine + * used in iClass, and RFID techology. + * + * The implementation is based on the work performed by + * Flavio D. Garcia, Gerhard de Koning Gans, Roel Verdult and + * Milosch Meriac in the paper "Dismantling IClass". + * + * Copyright (C) 2014 Martin Holst Swende + * + * This is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as published + * by the Free Software Foundation. + * + * This file 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 IClassCipher. If not, see . + ****************************************************************************/ + +#include "cipherutils.h" +#include "../util.h" +#include +#include +#include + +/** + * + * @brief Return and remove the first bit (x0) in the stream : + * @param stream + * @return + */ +bool headBit( BitstreamIn *stream) +{ + int bytepos = stream->position >> 3; // divide by 8 + int bitpos = (stream->position++) & 7; // mask out 00000111 + return (*(stream->buffer + bytepos) >> (7-bitpos)) & 1; +} +/** + * @brief Return and remove the last bit (xn) in the stream: + * @param stream + * @return + */ +bool tailBit( BitstreamIn *stream) +{ + int bitpos = stream->numbits -1 - (stream->position++); + + int bytepos= bitpos >> 3; + bitpos &= 7; + return (*(stream->buffer + bytepos) >> (7-bitpos)) & 1; +} +/** + * @brief Pushes bit onto the stream + * @param stream + * @param bit + */ +void pushBit( BitstreamOut* stream, bool bit) +{ + int bytepos = stream->position >> 3; // divide by 8 + int bitpos = stream->position & 7; + *(stream->buffer+bytepos) |= (bit & 1) << (7 - bitpos); + stream->position++; + stream->numbits++; +} + +/** + * @brief Pushes the lower six bits onto the stream + * as b0 b1 b2 b3 b4 b5 b6 + * @param stream + * @param bits + */ +void push6bits( BitstreamOut* stream, uint8_t bits) +{ + pushBit(stream, bits & 0x20); + pushBit(stream, bits & 0x10); + pushBit(stream, bits & 0x08); + pushBit(stream, bits & 0x04); + pushBit(stream, bits & 0x02); + pushBit(stream, bits & 0x01); +} + +/** + * @brief bitsLeft + * @param stream + * @return number of bits left in stream + */ +int bitsLeft( BitstreamIn *stream) +{ + return stream->numbits - stream->position; +} +/** + * @brief numBits + * @param stream + * @return Number of bits stored in stream + */ +int numBits(BitstreamOut *stream) +{ + return stream->numbits; +} + +uint8_t reversebytes(uint8_t b) { + b = (b & 0xF0) >> 4 | (b & 0x0F) << 4; + b = (b & 0xCC) >> 2 | (b & 0x33) << 2; + b = (b & 0xAA) >> 1 | (b & 0x55) << 1; + return b; +} +void reverse_arraybytes(uint8_t* arr, size_t len) +{ + uint8_t i; + for( i =0; i< len ; i++) + { + arr[i] = reversebytes(arr[i]); + } +} + + +//----------------------------- +// Code for testing below +//----------------------------- + + +int testBitStream() +{ + uint8_t input [] = {0xDE,0xAD,0xBE,0xEF,0xDE,0xAD,0xBE,0xEF}; + uint8_t output [] = {0,0,0,0,0,0,0,0}; + BitstreamIn in = { input, sizeof(input) * 8,0}; + BitstreamOut out ={ output, 0,0} + ; + while(bitsLeft(&in) > 0) + { + pushBit(&out, headBit(&in)); + //printf("Bits left: %d\n", bitsLeft(&in)); + //printf("Bits out: %d\n", numBits(&out)); + } + if(memcmp(input, output, sizeof(input)) == 0) + { + printf("Bitstream test 1 ok\n"); + }else + { + printf("Bitstream test 1 failed\n"); + uint8_t i; + for(i = 0 ; i < sizeof(input) ; i++) + { + printf("IN %02x, OUT %02x\n", input[i], output[i]); + } + return 1; + } + return 0; +} + +int testReversedBitstream() +{ + uint8_t input [] = {0xDE,0xAD,0xBE,0xEF,0xDE,0xAD,0xBE,0xEF}; + uint8_t reverse [] = {0,0,0,0,0,0,0,0}; + uint8_t output [] = {0,0,0,0,0,0,0,0}; + BitstreamIn in = { input, sizeof(input) * 8,0}; + BitstreamOut out ={ output, 0,0}; + BitstreamIn reversed_in ={ reverse, sizeof(input)*8,0}; + BitstreamOut reversed_out ={ reverse,0 ,0}; + + while(bitsLeft(&in) > 0) + { + pushBit(&reversed_out, tailBit(&in)); + } + while(bitsLeft(&reversed_in) > 0) + { + pushBit(&out, tailBit(&reversed_in)); + } + if(memcmp(input, output, sizeof(input)) == 0) + { + printf("Bitstream test 2 ok\n"); + }else + { + printf("Bitstream test 2 failed\n"); + uint8_t i; + for(i = 0 ; i < sizeof(input) ; i++) + { + printf("IN %02x, MIDDLE: %02x, OUT %02x\n", input[i],reverse[i], output[i]); + } + return 1; + } + return 0; +} + + +int testCipherUtils(void) +{ + int retval = 0; + retval |= testBitStream(); + retval |= testReversedBitstream(); + return retval; +} diff --git a/client/loclass/cipherutils.h b/client/loclass/cipherutils.h new file mode 100644 index 000000000..84435da94 --- /dev/null +++ b/client/loclass/cipherutils.h @@ -0,0 +1,55 @@ +/***************************************************************************** + * This file is part of iClassCipher. It is a reconstructon of the cipher engine + * used in iClass, and RFID techology. + * + * The implementation is based on the work performed by + * Flavio D. Garcia, Gerhard de Koning Gans, Roel Verdult and + * Milosch Meriac in the paper "Dismantling IClass". + * + * Copyright (C) 2014 Martin Holst Swende + * + * This is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as published + * by the Free Software Foundation. + * + * This file 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 IClassCipher. If not, see . + ****************************************************************************/ + +#ifndef CIPHERUTILS_H +#define CIPHERUTILS_H +#include +#include +#include + +typedef struct { + uint8_t * buffer; + uint8_t numbits; + uint8_t position; +} BitstreamIn; + +typedef struct { + uint8_t * buffer; + uint8_t numbits; + uint8_t position; +}BitstreamOut; + +bool headBit( BitstreamIn *stream); +bool tailBit( BitstreamIn *stream); +void pushBit( BitstreamOut *stream, bool bit); +int bitsLeft( BitstreamIn *stream); +bool xorbits_8(uint8_t val); +bool xorbits_16(uint16_t val); +int testCipherUtils(void); +int testMAC(); +void push6bits( BitstreamOut* stream, uint8_t bits); +void EncryptDES(bool key[56], bool outBlk[64], bool inBlk[64], int verbose) ; +uint8_t reversebytes(uint8_t b); +void reverse_arraybytes(uint8_t* arr, size_t len); + +#endif // CIPHERUTILS_H diff --git a/client/loclass/des.c b/client/loclass/des.c new file mode 100644 index 000000000..746752d7e --- /dev/null +++ b/client/loclass/des.c @@ -0,0 +1,1014 @@ +/* + * FIPS-46-3 compliant Triple-DES implementation + * + * Copyright (C) 2006-2014, Brainspark B.V. + * + * This file is part of PolarSSL (http://www.polarssl.org) + * Lead Maintainer: Paul Bakker + * + * All rights reserved. + * + * 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. + */ +/* + * DES, on which TDES is based, was originally designed by Horst Feistel + * at IBM in 1974, and was adopted as a standard by NIST (formerly NBS). + * + * http://csrc.nist.gov/publications/fips/fips46-3/fips46-3.pdf + */ + +//#include "polarssl/config.h" +#define POLARSSL_DES_C + +#if defined(POLARSSL_DES_C) + +#include "des.h" + +#if defined(POLARSSL_PLATFORM_C) +#include "polarssl/platform.h" +#else +#define polarssl_printf printf +#endif + +#if !defined(POLARSSL_DES_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 + +/* + * Expanded DES S-boxes + */ +static const uint32_t SB1[64] = +{ + 0x01010400, 0x00000000, 0x00010000, 0x01010404, + 0x01010004, 0x00010404, 0x00000004, 0x00010000, + 0x00000400, 0x01010400, 0x01010404, 0x00000400, + 0x01000404, 0x01010004, 0x01000000, 0x00000004, + 0x00000404, 0x01000400, 0x01000400, 0x00010400, + 0x00010400, 0x01010000, 0x01010000, 0x01000404, + 0x00010004, 0x01000004, 0x01000004, 0x00010004, + 0x00000000, 0x00000404, 0x00010404, 0x01000000, + 0x00010000, 0x01010404, 0x00000004, 0x01010000, + 0x01010400, 0x01000000, 0x01000000, 0x00000400, + 0x01010004, 0x00010000, 0x00010400, 0x01000004, + 0x00000400, 0x00000004, 0x01000404, 0x00010404, + 0x01010404, 0x00010004, 0x01010000, 0x01000404, + 0x01000004, 0x00000404, 0x00010404, 0x01010400, + 0x00000404, 0x01000400, 0x01000400, 0x00000000, + 0x00010004, 0x00010400, 0x00000000, 0x01010004 +}; + +static const uint32_t SB2[64] = +{ + 0x80108020, 0x80008000, 0x00008000, 0x00108020, + 0x00100000, 0x00000020, 0x80100020, 0x80008020, + 0x80000020, 0x80108020, 0x80108000, 0x80000000, + 0x80008000, 0x00100000, 0x00000020, 0x80100020, + 0x00108000, 0x00100020, 0x80008020, 0x00000000, + 0x80000000, 0x00008000, 0x00108020, 0x80100000, + 0x00100020, 0x80000020, 0x00000000, 0x00108000, + 0x00008020, 0x80108000, 0x80100000, 0x00008020, + 0x00000000, 0x00108020, 0x80100020, 0x00100000, + 0x80008020, 0x80100000, 0x80108000, 0x00008000, + 0x80100000, 0x80008000, 0x00000020, 0x80108020, + 0x00108020, 0x00000020, 0x00008000, 0x80000000, + 0x00008020, 0x80108000, 0x00100000, 0x80000020, + 0x00100020, 0x80008020, 0x80000020, 0x00100020, + 0x00108000, 0x00000000, 0x80008000, 0x00008020, + 0x80000000, 0x80100020, 0x80108020, 0x00108000 +}; + +static const uint32_t SB3[64] = +{ + 0x00000208, 0x08020200, 0x00000000, 0x08020008, + 0x08000200, 0x00000000, 0x00020208, 0x08000200, + 0x00020008, 0x08000008, 0x08000008, 0x00020000, + 0x08020208, 0x00020008, 0x08020000, 0x00000208, + 0x08000000, 0x00000008, 0x08020200, 0x00000200, + 0x00020200, 0x08020000, 0x08020008, 0x00020208, + 0x08000208, 0x00020200, 0x00020000, 0x08000208, + 0x00000008, 0x08020208, 0x00000200, 0x08000000, + 0x08020200, 0x08000000, 0x00020008, 0x00000208, + 0x00020000, 0x08020200, 0x08000200, 0x00000000, + 0x00000200, 0x00020008, 0x08020208, 0x08000200, + 0x08000008, 0x00000200, 0x00000000, 0x08020008, + 0x08000208, 0x00020000, 0x08000000, 0x08020208, + 0x00000008, 0x00020208, 0x00020200, 0x08000008, + 0x08020000, 0x08000208, 0x00000208, 0x08020000, + 0x00020208, 0x00000008, 0x08020008, 0x00020200 +}; + +static const uint32_t SB4[64] = +{ + 0x00802001, 0x00002081, 0x00002081, 0x00000080, + 0x00802080, 0x00800081, 0x00800001, 0x00002001, + 0x00000000, 0x00802000, 0x00802000, 0x00802081, + 0x00000081, 0x00000000, 0x00800080, 0x00800001, + 0x00000001, 0x00002000, 0x00800000, 0x00802001, + 0x00000080, 0x00800000, 0x00002001, 0x00002080, + 0x00800081, 0x00000001, 0x00002080, 0x00800080, + 0x00002000, 0x00802080, 0x00802081, 0x00000081, + 0x00800080, 0x00800001, 0x00802000, 0x00802081, + 0x00000081, 0x00000000, 0x00000000, 0x00802000, + 0x00002080, 0x00800080, 0x00800081, 0x00000001, + 0x00802001, 0x00002081, 0x00002081, 0x00000080, + 0x00802081, 0x00000081, 0x00000001, 0x00002000, + 0x00800001, 0x00002001, 0x00802080, 0x00800081, + 0x00002001, 0x00002080, 0x00800000, 0x00802001, + 0x00000080, 0x00800000, 0x00002000, 0x00802080 +}; + +static const uint32_t SB5[64] = +{ + 0x00000100, 0x02080100, 0x02080000, 0x42000100, + 0x00080000, 0x00000100, 0x40000000, 0x02080000, + 0x40080100, 0x00080000, 0x02000100, 0x40080100, + 0x42000100, 0x42080000, 0x00080100, 0x40000000, + 0x02000000, 0x40080000, 0x40080000, 0x00000000, + 0x40000100, 0x42080100, 0x42080100, 0x02000100, + 0x42080000, 0x40000100, 0x00000000, 0x42000000, + 0x02080100, 0x02000000, 0x42000000, 0x00080100, + 0x00080000, 0x42000100, 0x00000100, 0x02000000, + 0x40000000, 0x02080000, 0x42000100, 0x40080100, + 0x02000100, 0x40000000, 0x42080000, 0x02080100, + 0x40080100, 0x00000100, 0x02000000, 0x42080000, + 0x42080100, 0x00080100, 0x42000000, 0x42080100, + 0x02080000, 0x00000000, 0x40080000, 0x42000000, + 0x00080100, 0x02000100, 0x40000100, 0x00080000, + 0x00000000, 0x40080000, 0x02080100, 0x40000100 +}; + +static const uint32_t SB6[64] = +{ + 0x20000010, 0x20400000, 0x00004000, 0x20404010, + 0x20400000, 0x00000010, 0x20404010, 0x00400000, + 0x20004000, 0x00404010, 0x00400000, 0x20000010, + 0x00400010, 0x20004000, 0x20000000, 0x00004010, + 0x00000000, 0x00400010, 0x20004010, 0x00004000, + 0x00404000, 0x20004010, 0x00000010, 0x20400010, + 0x20400010, 0x00000000, 0x00404010, 0x20404000, + 0x00004010, 0x00404000, 0x20404000, 0x20000000, + 0x20004000, 0x00000010, 0x20400010, 0x00404000, + 0x20404010, 0x00400000, 0x00004010, 0x20000010, + 0x00400000, 0x20004000, 0x20000000, 0x00004010, + 0x20000010, 0x20404010, 0x00404000, 0x20400000, + 0x00404010, 0x20404000, 0x00000000, 0x20400010, + 0x00000010, 0x00004000, 0x20400000, 0x00404010, + 0x00004000, 0x00400010, 0x20004010, 0x00000000, + 0x20404000, 0x20000000, 0x00400010, 0x20004010 +}; + +static const uint32_t SB7[64] = +{ + 0x00200000, 0x04200002, 0x04000802, 0x00000000, + 0x00000800, 0x04000802, 0x00200802, 0x04200800, + 0x04200802, 0x00200000, 0x00000000, 0x04000002, + 0x00000002, 0x04000000, 0x04200002, 0x00000802, + 0x04000800, 0x00200802, 0x00200002, 0x04000800, + 0x04000002, 0x04200000, 0x04200800, 0x00200002, + 0x04200000, 0x00000800, 0x00000802, 0x04200802, + 0x00200800, 0x00000002, 0x04000000, 0x00200800, + 0x04000000, 0x00200800, 0x00200000, 0x04000802, + 0x04000802, 0x04200002, 0x04200002, 0x00000002, + 0x00200002, 0x04000000, 0x04000800, 0x00200000, + 0x04200800, 0x00000802, 0x00200802, 0x04200800, + 0x00000802, 0x04000002, 0x04200802, 0x04200000, + 0x00200800, 0x00000000, 0x00000002, 0x04200802, + 0x00000000, 0x00200802, 0x04200000, 0x00000800, + 0x04000002, 0x04000800, 0x00000800, 0x00200002 +}; + +static const uint32_t SB8[64] = +{ + 0x10001040, 0x00001000, 0x00040000, 0x10041040, + 0x10000000, 0x10001040, 0x00000040, 0x10000000, + 0x00040040, 0x10040000, 0x10041040, 0x00041000, + 0x10041000, 0x00041040, 0x00001000, 0x00000040, + 0x10040000, 0x10000040, 0x10001000, 0x00001040, + 0x00041000, 0x00040040, 0x10040040, 0x10041000, + 0x00001040, 0x00000000, 0x00000000, 0x10040040, + 0x10000040, 0x10001000, 0x00041040, 0x00040000, + 0x00041040, 0x00040000, 0x10041000, 0x00001000, + 0x00000040, 0x10040040, 0x00001000, 0x00041040, + 0x10001000, 0x00000040, 0x10000040, 0x10040000, + 0x10040040, 0x10000000, 0x00040000, 0x10001040, + 0x00000000, 0x10041040, 0x00040040, 0x10000040, + 0x10040000, 0x10001000, 0x10001040, 0x00000000, + 0x10041040, 0x00041000, 0x00041000, 0x00001040, + 0x00001040, 0x00040040, 0x10000000, 0x10041000 +}; + +/* + * PC1: left and right halves bit-swap + */ +static const uint32_t LHs[16] = +{ + 0x00000000, 0x00000001, 0x00000100, 0x00000101, + 0x00010000, 0x00010001, 0x00010100, 0x00010101, + 0x01000000, 0x01000001, 0x01000100, 0x01000101, + 0x01010000, 0x01010001, 0x01010100, 0x01010101 +}; + +static const uint32_t RHs[16] = +{ + 0x00000000, 0x01000000, 0x00010000, 0x01010000, + 0x00000100, 0x01000100, 0x00010100, 0x01010100, + 0x00000001, 0x01000001, 0x00010001, 0x01010001, + 0x00000101, 0x01000101, 0x00010101, 0x01010101, +}; + +/* + * Initial Permutation macro + */ +#define DES_IP(X,Y) \ +{ \ + T = ((X >> 4) ^ Y) & 0x0F0F0F0F; Y ^= T; X ^= (T << 4); \ + T = ((X >> 16) ^ Y) & 0x0000FFFF; Y ^= T; X ^= (T << 16); \ + T = ((Y >> 2) ^ X) & 0x33333333; X ^= T; Y ^= (T << 2); \ + T = ((Y >> 8) ^ X) & 0x00FF00FF; X ^= T; Y ^= (T << 8); \ + Y = ((Y << 1) | (Y >> 31)) & 0xFFFFFFFF; \ + T = (X ^ Y) & 0xAAAAAAAA; Y ^= T; X ^= T; \ + X = ((X << 1) | (X >> 31)) & 0xFFFFFFFF; \ +} + +/* + * Final Permutation macro + */ +#define DES_FP(X,Y) \ +{ \ + X = ((X << 31) | (X >> 1)) & 0xFFFFFFFF; \ + T = (X ^ Y) & 0xAAAAAAAA; X ^= T; Y ^= T; \ + Y = ((Y << 31) | (Y >> 1)) & 0xFFFFFFFF; \ + T = ((Y >> 8) ^ X) & 0x00FF00FF; X ^= T; Y ^= (T << 8); \ + T = ((Y >> 2) ^ X) & 0x33333333; X ^= T; Y ^= (T << 2); \ + T = ((X >> 16) ^ Y) & 0x0000FFFF; Y ^= T; X ^= (T << 16); \ + T = ((X >> 4) ^ Y) & 0x0F0F0F0F; Y ^= T; X ^= (T << 4); \ +} + +/* + * DES round macro + */ +#define DES_ROUND(X,Y) \ +{ \ + T = *SK++ ^ X; \ + Y ^= SB8[ (T ) & 0x3F ] ^ \ + SB6[ (T >> 8) & 0x3F ] ^ \ + SB4[ (T >> 16) & 0x3F ] ^ \ + SB2[ (T >> 24) & 0x3F ]; \ + \ + T = *SK++ ^ ((X << 28) | (X >> 4)); \ + Y ^= SB7[ (T ) & 0x3F ] ^ \ + SB5[ (T >> 8) & 0x3F ] ^ \ + SB3[ (T >> 16) & 0x3F ] ^ \ + SB1[ (T >> 24) & 0x3F ]; \ +} + +#define SWAP(a,b) { uint32_t t = a; a = b; b = t; t = 0; } + +static const unsigned char odd_parity_table[128] = { 1, 2, 4, 7, 8, + 11, 13, 14, 16, 19, 21, 22, 25, 26, 28, 31, 32, 35, 37, 38, 41, 42, 44, + 47, 49, 50, 52, 55, 56, 59, 61, 62, 64, 67, 69, 70, 73, 74, 76, 79, 81, + 82, 84, 87, 88, 91, 93, 94, 97, 98, 100, 103, 104, 107, 109, 110, 112, + 115, 117, 118, 121, 122, 124, 127, 128, 131, 133, 134, 137, 138, 140, + 143, 145, 146, 148, 151, 152, 155, 157, 158, 161, 162, 164, 167, 168, + 171, 173, 174, 176, 179, 181, 182, 185, 186, 188, 191, 193, 194, 196, + 199, 200, 203, 205, 206, 208, 211, 213, 214, 217, 218, 220, 223, 224, + 227, 229, 230, 233, 234, 236, 239, 241, 242, 244, 247, 248, 251, 253, + 254 }; + +void des_key_set_parity( unsigned char key[DES_KEY_SIZE] ) +{ + int i; + + for( i = 0; i < DES_KEY_SIZE; i++ ) + key[i] = odd_parity_table[key[i] / 2]; +} + +/* + * Check the given key's parity, returns 1 on failure, 0 on SUCCESS + */ +int des_key_check_key_parity( const unsigned char key[DES_KEY_SIZE] ) +{ + int i; + + for( i = 0; i < DES_KEY_SIZE; i++ ) + if ( key[i] != odd_parity_table[key[i] / 2] ) + return( 1 ); + + return( 0 ); +} + +/* + * Table of weak and semi-weak keys + * + * Source: http://en.wikipedia.org/wiki/Weak_key + * + * Weak: + * Alternating ones + zeros (0x0101010101010101) + * Alternating 'F' + 'E' (0xFEFEFEFEFEFEFEFE) + * '0xE0E0E0E0F1F1F1F1' + * '0x1F1F1F1F0E0E0E0E' + * + * Semi-weak: + * 0x011F011F010E010E and 0x1F011F010E010E01 + * 0x01E001E001F101F1 and 0xE001E001F101F101 + * 0x01FE01FE01FE01FE and 0xFE01FE01FE01FE01 + * 0x1FE01FE00EF10EF1 and 0xE01FE01FF10EF10E + * 0x1FFE1FFE0EFE0EFE and 0xFE1FFE1FFE0EFE0E + * 0xE0FEE0FEF1FEF1FE and 0xFEE0FEE0FEF1FEF1 + * + */ + +#define WEAK_KEY_COUNT 16 + +static const unsigned char weak_key_table[WEAK_KEY_COUNT][DES_KEY_SIZE] = +{ + { 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01 }, + { 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE }, + { 0x1F, 0x1F, 0x1F, 0x1F, 0x0E, 0x0E, 0x0E, 0x0E }, + { 0xE0, 0xE0, 0xE0, 0xE0, 0xF1, 0xF1, 0xF1, 0xF1 }, + + { 0x01, 0x1F, 0x01, 0x1F, 0x01, 0x0E, 0x01, 0x0E }, + { 0x1F, 0x01, 0x1F, 0x01, 0x0E, 0x01, 0x0E, 0x01 }, + { 0x01, 0xE0, 0x01, 0xE0, 0x01, 0xF1, 0x01, 0xF1 }, + { 0xE0, 0x01, 0xE0, 0x01, 0xF1, 0x01, 0xF1, 0x01 }, + { 0x01, 0xFE, 0x01, 0xFE, 0x01, 0xFE, 0x01, 0xFE }, + { 0xFE, 0x01, 0xFE, 0x01, 0xFE, 0x01, 0xFE, 0x01 }, + { 0x1F, 0xE0, 0x1F, 0xE0, 0x0E, 0xF1, 0x0E, 0xF1 }, + { 0xE0, 0x1F, 0xE0, 0x1F, 0xF1, 0x0E, 0xF1, 0x0E }, + { 0x1F, 0xFE, 0x1F, 0xFE, 0x0E, 0xFE, 0x0E, 0xFE }, + { 0xFE, 0x1F, 0xFE, 0x1F, 0xFE, 0x0E, 0xFE, 0x0E }, + { 0xE0, 0xFE, 0xE0, 0xFE, 0xF1, 0xFE, 0xF1, 0xFE }, + { 0xFE, 0xE0, 0xFE, 0xE0, 0xFE, 0xF1, 0xFE, 0xF1 } +}; + +int des_key_check_weak( const unsigned char key[DES_KEY_SIZE] ) +{ + int i; + + for( i = 0; i < WEAK_KEY_COUNT; i++ ) + if( memcmp( weak_key_table[i], key, DES_KEY_SIZE) == 0) + return( 1 ); + + return( 0 ); +} + +static void des_setkey( uint32_t SK[32], const unsigned char key[DES_KEY_SIZE] ) +{ + int i; + uint32_t X, Y, T; + + GET_UINT32_BE( X, key, 0 ); + GET_UINT32_BE( Y, key, 4 ); + + /* + * Permuted Choice 1 + */ + T = ((Y >> 4) ^ X) & 0x0F0F0F0F; X ^= T; Y ^= (T << 4); + T = ((Y ) ^ X) & 0x10101010; X ^= T; Y ^= (T ); + + X = (LHs[ (X ) & 0xF] << 3) | (LHs[ (X >> 8) & 0xF ] << 2) + | (LHs[ (X >> 16) & 0xF] << 1) | (LHs[ (X >> 24) & 0xF ] ) + | (LHs[ (X >> 5) & 0xF] << 7) | (LHs[ (X >> 13) & 0xF ] << 6) + | (LHs[ (X >> 21) & 0xF] << 5) | (LHs[ (X >> 29) & 0xF ] << 4); + + Y = (RHs[ (Y >> 1) & 0xF] << 3) | (RHs[ (Y >> 9) & 0xF ] << 2) + | (RHs[ (Y >> 17) & 0xF] << 1) | (RHs[ (Y >> 25) & 0xF ] ) + | (RHs[ (Y >> 4) & 0xF] << 7) | (RHs[ (Y >> 12) & 0xF ] << 6) + | (RHs[ (Y >> 20) & 0xF] << 5) | (RHs[ (Y >> 28) & 0xF ] << 4); + + X &= 0x0FFFFFFF; + Y &= 0x0FFFFFFF; + + /* + * calculate subkeys + */ + for( i = 0; i < 16; i++ ) + { + if( i < 2 || i == 8 || i == 15 ) + { + X = ((X << 1) | (X >> 27)) & 0x0FFFFFFF; + Y = ((Y << 1) | (Y >> 27)) & 0x0FFFFFFF; + } + else + { + X = ((X << 2) | (X >> 26)) & 0x0FFFFFFF; + Y = ((Y << 2) | (Y >> 26)) & 0x0FFFFFFF; + } + + *SK++ = ((X << 4) & 0x24000000) | ((X << 28) & 0x10000000) + | ((X << 14) & 0x08000000) | ((X << 18) & 0x02080000) + | ((X << 6) & 0x01000000) | ((X << 9) & 0x00200000) + | ((X >> 1) & 0x00100000) | ((X << 10) & 0x00040000) + | ((X << 2) & 0x00020000) | ((X >> 10) & 0x00010000) + | ((Y >> 13) & 0x00002000) | ((Y >> 4) & 0x00001000) + | ((Y << 6) & 0x00000800) | ((Y >> 1) & 0x00000400) + | ((Y >> 14) & 0x00000200) | ((Y ) & 0x00000100) + | ((Y >> 5) & 0x00000020) | ((Y >> 10) & 0x00000010) + | ((Y >> 3) & 0x00000008) | ((Y >> 18) & 0x00000004) + | ((Y >> 26) & 0x00000002) | ((Y >> 24) & 0x00000001); + + *SK++ = ((X << 15) & 0x20000000) | ((X << 17) & 0x10000000) + | ((X << 10) & 0x08000000) | ((X << 22) & 0x04000000) + | ((X >> 2) & 0x02000000) | ((X << 1) & 0x01000000) + | ((X << 16) & 0x00200000) | ((X << 11) & 0x00100000) + | ((X << 3) & 0x00080000) | ((X >> 6) & 0x00040000) + | ((X << 15) & 0x00020000) | ((X >> 4) & 0x00010000) + | ((Y >> 2) & 0x00002000) | ((Y << 8) & 0x00001000) + | ((Y >> 14) & 0x00000808) | ((Y >> 9) & 0x00000400) + | ((Y ) & 0x00000200) | ((Y << 7) & 0x00000100) + | ((Y >> 7) & 0x00000020) | ((Y >> 3) & 0x00000011) + | ((Y << 2) & 0x00000004) | ((Y >> 21) & 0x00000002); + } +} + +/* + * DES key schedule (56-bit, encryption) + */ +int des_setkey_enc( des_context *ctx, const unsigned char key[DES_KEY_SIZE] ) +{ + des_setkey( ctx->sk, key ); + + return( 0 ); +} + +/* + * DES key schedule (56-bit, decryption) + */ +int des_setkey_dec( des_context *ctx, const unsigned char key[DES_KEY_SIZE] ) +{ + int i; + + des_setkey( ctx->sk, key ); + + for( i = 0; i < 16; i += 2 ) + { + SWAP( ctx->sk[i ], ctx->sk[30 - i] ); + SWAP( ctx->sk[i + 1], ctx->sk[31 - i] ); + } + + return( 0 ); +} + +static void des3_set2key( uint32_t esk[96], + uint32_t dsk[96], + const unsigned char key[DES_KEY_SIZE*2] ) +{ + int i; + + des_setkey( esk, key ); + des_setkey( dsk + 32, key + 8 ); + + for( i = 0; i < 32; i += 2 ) + { + dsk[i ] = esk[30 - i]; + dsk[i + 1] = esk[31 - i]; + + esk[i + 32] = dsk[62 - i]; + esk[i + 33] = dsk[63 - i]; + + esk[i + 64] = esk[i ]; + esk[i + 65] = esk[i + 1]; + + dsk[i + 64] = dsk[i ]; + dsk[i + 65] = dsk[i + 1]; + } +} + +/* + * Triple-DES key schedule (112-bit, encryption) + */ +int des3_set2key_enc( des3_context *ctx, const unsigned char key[DES_KEY_SIZE * 2] ) +{ + uint32_t sk[96]; + + des3_set2key( ctx->sk, sk, key ); + memset( sk, 0, sizeof( sk ) ); + + return( 0 ); +} + +/* + * Triple-DES key schedule (112-bit, decryption) + */ +int des3_set2key_dec( des3_context *ctx, const unsigned char key[DES_KEY_SIZE * 2] ) +{ + uint32_t sk[96]; + + des3_set2key( sk, ctx->sk, key ); + memset( sk, 0, sizeof( sk ) ); + + return( 0 ); +} + +static void des3_set3key( uint32_t esk[96], + uint32_t dsk[96], + const unsigned char key[24] ) +{ + int i; + + des_setkey( esk, key ); + des_setkey( dsk + 32, key + 8 ); + des_setkey( esk + 64, key + 16 ); + + for( i = 0; i < 32; i += 2 ) + { + dsk[i ] = esk[94 - i]; + dsk[i + 1] = esk[95 - i]; + + esk[i + 32] = dsk[62 - i]; + esk[i + 33] = dsk[63 - i]; + + dsk[i + 64] = esk[30 - i]; + dsk[i + 65] = esk[31 - i]; + } +} + +/* + * Triple-DES key schedule (168-bit, encryption) + */ +int des3_set3key_enc( des3_context *ctx, const unsigned char key[DES_KEY_SIZE * 3] ) +{ + uint32_t sk[96]; + + des3_set3key( ctx->sk, sk, key ); + memset( sk, 0, sizeof( sk ) ); + + return( 0 ); +} + +/* + * Triple-DES key schedule (168-bit, decryption) + */ +int des3_set3key_dec( des3_context *ctx, const unsigned char key[DES_KEY_SIZE * 3] ) +{ + uint32_t sk[96]; + + des3_set3key( sk, ctx->sk, key ); + memset( sk, 0, sizeof( sk ) ); + + return( 0 ); +} + +/* + * DES-ECB block encryption/decryption + */ +int des_crypt_ecb( des_context *ctx, + const unsigned char input[8], + unsigned char output[8] ) +{ + int i; + uint32_t X, Y, T, *SK; + + SK = ctx->sk; + + GET_UINT32_BE( X, input, 0 ); + GET_UINT32_BE( Y, input, 4 ); + + DES_IP( X, Y ); + + for( i = 0; i < 8; i++ ) + { + DES_ROUND( Y, X ); + DES_ROUND( X, Y ); + } + + DES_FP( Y, X ); + + PUT_UINT32_BE( Y, output, 0 ); + PUT_UINT32_BE( X, output, 4 ); + + return( 0 ); +} + +#if defined(POLARSSL_CIPHER_MODE_CBC) +/* + * DES-CBC buffer encryption/decryption + */ +int des_crypt_cbc( des_context *ctx, + int mode, + size_t length, + unsigned char iv[8], + const unsigned char *input, + unsigned char *output ) +{ + int i; + unsigned char temp[8]; + + if( length % 8 ) + return( POLARSSL_ERR_DES_INVALID_INPUT_LENGTH ); + + if( mode == DES_ENCRYPT ) + { + while( length > 0 ) + { + for( i = 0; i < 8; i++ ) + output[i] = (unsigned char)( input[i] ^ iv[i] ); + + des_crypt_ecb( ctx, output, output ); + memcpy( iv, output, 8 ); + + input += 8; + output += 8; + length -= 8; + } + } + else /* DES_DECRYPT */ + { + while( length > 0 ) + { + memcpy( temp, input, 8 ); + des_crypt_ecb( ctx, input, output ); + + for( i = 0; i < 8; i++ ) + output[i] = (unsigned char)( output[i] ^ iv[i] ); + + memcpy( iv, temp, 8 ); + + input += 8; + output += 8; + length -= 8; + } + } + + return( 0 ); +} +#endif /* POLARSSL_CIPHER_MODE_CBC */ + +/* + * 3DES-ECB block encryption/decryption + */ +int des3_crypt_ecb( des3_context *ctx, + const unsigned char input[8], + unsigned char output[8] ) +{ + int i; + uint32_t X, Y, T, *SK; + + SK = ctx->sk; + + GET_UINT32_BE( X, input, 0 ); + GET_UINT32_BE( Y, input, 4 ); + + DES_IP( X, Y ); + + for( i = 0; i < 8; i++ ) + { + DES_ROUND( Y, X ); + DES_ROUND( X, Y ); + } + + for( i = 0; i < 8; i++ ) + { + DES_ROUND( X, Y ); + DES_ROUND( Y, X ); + } + + for( i = 0; i < 8; i++ ) + { + DES_ROUND( Y, X ); + DES_ROUND( X, Y ); + } + + DES_FP( Y, X ); + + PUT_UINT32_BE( Y, output, 0 ); + PUT_UINT32_BE( X, output, 4 ); + + return( 0 ); +} + +#if defined(POLARSSL_CIPHER_MODE_CBC) +/* + * 3DES-CBC buffer encryption/decryption + */ +int des3_crypt_cbc( des3_context *ctx, + int mode, + size_t length, + unsigned char iv[8], + const unsigned char *input, + unsigned char *output ) +{ + int i; + unsigned char temp[8]; + + if( length % 8 ) + return( POLARSSL_ERR_DES_INVALID_INPUT_LENGTH ); + + if( mode == DES_ENCRYPT ) + { + while( length > 0 ) + { + for( i = 0; i < 8; i++ ) + output[i] = (unsigned char)( input[i] ^ iv[i] ); + + des3_crypt_ecb( ctx, output, output ); + memcpy( iv, output, 8 ); + + input += 8; + output += 8; + length -= 8; + } + } + else /* DES_DECRYPT */ + { + while( length > 0 ) + { + memcpy( temp, input, 8 ); + des3_crypt_ecb( ctx, input, output ); + + for( i = 0; i < 8; i++ ) + output[i] = (unsigned char)( output[i] ^ iv[i] ); + + memcpy( iv, temp, 8 ); + + input += 8; + output += 8; + length -= 8; + } + } + + return( 0 ); +} +#endif /* POLARSSL_CIPHER_MODE_CBC */ + +#endif /* !POLARSSL_DES_ALT */ + +#if defined(POLARSSL_SELF_TEST) + +#include + +/* + * DES and 3DES test vectors from: + * + * http://csrc.nist.gov/groups/STM/cavp/documents/des/tripledes-vectors.zip + */ +static const unsigned char des3_test_keys[24] = +{ + 0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF, + 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF, 0x01, + 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF, 0x01, 0x23 +}; + +static const unsigned char des3_test_buf[8] = +{ + 0x4E, 0x6F, 0x77, 0x20, 0x69, 0x73, 0x20, 0x74 +}; + +static const unsigned char des3_test_ecb_dec[3][8] = +{ + { 0xCD, 0xD6, 0x4F, 0x2F, 0x94, 0x27, 0xC1, 0x5D }, + { 0x69, 0x96, 0xC8, 0xFA, 0x47, 0xA2, 0xAB, 0xEB }, + { 0x83, 0x25, 0x39, 0x76, 0x44, 0x09, 0x1A, 0x0A } +}; + +static const unsigned char des3_test_ecb_enc[3][8] = +{ + { 0x6A, 0x2A, 0x19, 0xF4, 0x1E, 0xCA, 0x85, 0x4B }, + { 0x03, 0xE6, 0x9F, 0x5B, 0xFA, 0x58, 0xEB, 0x42 }, + { 0xDD, 0x17, 0xE8, 0xB8, 0xB4, 0x37, 0xD2, 0x32 } +}; + +#if defined(POLARSSL_CIPHER_MODE_CBC) +static const unsigned char des3_test_iv[8] = +{ + 0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF, +}; + +static const unsigned char des3_test_cbc_dec[3][8] = +{ + { 0x12, 0x9F, 0x40, 0xB9, 0xD2, 0x00, 0x56, 0xB3 }, + { 0x47, 0x0E, 0xFC, 0x9A, 0x6B, 0x8E, 0xE3, 0x93 }, + { 0xC5, 0xCE, 0xCF, 0x63, 0xEC, 0xEC, 0x51, 0x4C } +}; + +static const unsigned char des3_test_cbc_enc[3][8] = +{ + { 0x54, 0xF1, 0x5A, 0xF6, 0xEB, 0xE3, 0xA4, 0xB4 }, + { 0x35, 0x76, 0x11, 0x56, 0x5F, 0xA1, 0x8E, 0x4D }, + { 0xCB, 0x19, 0x1F, 0x85, 0xD1, 0xED, 0x84, 0x39 } +}; +#endif /* POLARSSL_CIPHER_MODE_CBC */ + +/* + * Checkup routine + */ +int des_self_test( int verbose ) +{ + int i, j, u, v; + des_context ctx; + des3_context ctx3; + unsigned char key[24]; + unsigned char buf[8]; +#if defined(POLARSSL_CIPHER_MODE_CBC) + unsigned char prv[8]; + unsigned char iv[8]; +#endif + + memset( key, 0, 24 ); + + /* + * ECB mode + */ + for( i = 0; i < 6; i++ ) + { + u = i >> 1; + v = i & 1; + + if( verbose != 0 ) + polarssl_printf( " DES%c-ECB-%3d (%s): ", + ( u == 0 ) ? ' ' : '3', 56 + u * 56, + ( v == DES_DECRYPT ) ? "dec" : "enc" ); + + memcpy( buf, des3_test_buf, 8 ); + + switch( i ) + { + case 0: + des_setkey_dec( &ctx, des3_test_keys ); + break; + + case 1: + des_setkey_enc( &ctx, des3_test_keys ); + break; + + case 2: + des3_set2key_dec( &ctx3, des3_test_keys ); + break; + + case 3: + des3_set2key_enc( &ctx3, des3_test_keys ); + break; + + case 4: + des3_set3key_dec( &ctx3, des3_test_keys ); + break; + + case 5: + des3_set3key_enc( &ctx3, des3_test_keys ); + break; + + default: + return( 1 ); + } + + for( j = 0; j < 10000; j++ ) + { + if( u == 0 ) + des_crypt_ecb( &ctx, buf, buf ); + else + des3_crypt_ecb( &ctx3, buf, buf ); + } + + if( ( v == DES_DECRYPT && + memcmp( buf, des3_test_ecb_dec[u], 8 ) != 0 ) || + ( v != DES_DECRYPT && + memcmp( buf, des3_test_ecb_enc[u], 8 ) != 0 ) ) + { + if( verbose != 0 ) + polarssl_printf( "failed\n" ); + + return( 1 ); + } + + if( verbose != 0 ) + polarssl_printf( "passed\n" ); + } + + if( verbose != 0 ) + polarssl_printf( "\n" ); + +#if defined(POLARSSL_CIPHER_MODE_CBC) + /* + * CBC mode + */ + for( i = 0; i < 6; i++ ) + { + u = i >> 1; + v = i & 1; + + if( verbose != 0 ) + polarssl_printf( " DES%c-CBC-%3d (%s): ", + ( u == 0 ) ? ' ' : '3', 56 + u * 56, + ( v == DES_DECRYPT ) ? "dec" : "enc" ); + + memcpy( iv, des3_test_iv, 8 ); + memcpy( prv, des3_test_iv, 8 ); + memcpy( buf, des3_test_buf, 8 ); + + switch( i ) + { + case 0: + des_setkey_dec( &ctx, des3_test_keys ); + break; + + case 1: + des_setkey_enc( &ctx, des3_test_keys ); + break; + + case 2: + des3_set2key_dec( &ctx3, des3_test_keys ); + break; + + case 3: + des3_set2key_enc( &ctx3, des3_test_keys ); + break; + + case 4: + des3_set3key_dec( &ctx3, des3_test_keys ); + break; + + case 5: + des3_set3key_enc( &ctx3, des3_test_keys ); + break; + + default: + return( 1 ); + } + + if( v == DES_DECRYPT ) + { + for( j = 0; j < 10000; j++ ) + { + if( u == 0 ) + des_crypt_cbc( &ctx, v, 8, iv, buf, buf ); + else + des3_crypt_cbc( &ctx3, v, 8, iv, buf, buf ); + } + } + else + { + for( j = 0; j < 10000; j++ ) + { + unsigned char tmp[8]; + + if( u == 0 ) + des_crypt_cbc( &ctx, v, 8, iv, buf, buf ); + else + des3_crypt_cbc( &ctx3, v, 8, iv, buf, buf ); + + memcpy( tmp, prv, 8 ); + memcpy( prv, buf, 8 ); + memcpy( buf, tmp, 8 ); + } + + memcpy( buf, prv, 8 ); + } + + if( ( v == DES_DECRYPT && + memcmp( buf, des3_test_cbc_dec[u], 8 ) != 0 ) || + ( v != DES_DECRYPT && + memcmp( buf, des3_test_cbc_enc[u], 8 ) != 0 ) ) + { + if( verbose != 0 ) + polarssl_printf( "failed\n" ); + + return( 1 ); + } + + if( verbose != 0 ) + polarssl_printf( "passed\n" ); + } +#endif /* POLARSSL_CIPHER_MODE_CBC */ + + if( verbose != 0 ) + polarssl_printf( "\n" ); + + return( 0 ); +} + +#endif + +#endif diff --git a/client/loclass/des.h b/client/loclass/des.h new file mode 100644 index 000000000..907d56b10 --- /dev/null +++ b/client/loclass/des.h @@ -0,0 +1,256 @@ +/** + * \file des.h + * + * \brief DES block cipher + * + * Copyright (C) 2006-2013, Brainspark B.V. + * + * This file is part of PolarSSL (http://www.polarssl.org) + * Lead Maintainer: Paul Bakker + * + * All rights reserved. + * + * 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_DES_H +#define POLARSSL_DES_H + +//#include "config.h" + +#include + +#if defined(_MSC_VER) && !defined(EFIX64) && !defined(EFI32) +#include +typedef UINT32 uint32_t; +#else +#include +#endif + +#define DES_ENCRYPT 1 +#define DES_DECRYPT 0 + +#define POLARSSL_ERR_DES_INVALID_INPUT_LENGTH -0x0032 /**< The data input has an invalid length. */ + +#define DES_KEY_SIZE 8 + +#if !defined(POLARSSL_DES_ALT) +// Regular implementation +// + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \brief DES context structure + */ +typedef struct +{ + int mode; /*!< encrypt/decrypt */ + uint32_t sk[32]; /*!< DES subkeys */ +} +des_context; + +/** + * \brief Triple-DES context structure + */ +typedef struct +{ + int mode; /*!< encrypt/decrypt */ + uint32_t sk[96]; /*!< 3DES subkeys */ +} +des3_context; + +/** + * \brief Set key parity on the given key to odd. + * + * DES keys are 56 bits long, but each byte is padded with + * a parity bit to allow verification. + * + * \param key 8-byte secret key + */ +void des_key_set_parity( unsigned char key[DES_KEY_SIZE] ); + +/** + * \brief Check that key parity on the given key is odd. + * + * DES keys are 56 bits long, but each byte is padded with + * a parity bit to allow verification. + * + * \param key 8-byte secret key + * + * \return 0 is parity was ok, 1 if parity was not correct. + */ +int des_key_check_key_parity( const unsigned char key[DES_KEY_SIZE] ); + +/** + * \brief Check that key is not a weak or semi-weak DES key + * + * \param key 8-byte secret key + * + * \return 0 if no weak key was found, 1 if a weak key was identified. + */ +int des_key_check_weak( const unsigned char key[DES_KEY_SIZE] ); + +/** + * \brief DES key schedule (56-bit, encryption) + * + * \param ctx DES context to be initialized + * \param key 8-byte secret key + * + * \return 0 + */ +int des_setkey_enc( des_context *ctx, const unsigned char key[DES_KEY_SIZE] ); + +/** + * \brief DES key schedule (56-bit, decryption) + * + * \param ctx DES context to be initialized + * \param key 8-byte secret key + * + * \return 0 + */ +int des_setkey_dec( des_context *ctx, const unsigned char key[DES_KEY_SIZE] ); + +/** + * \brief Triple-DES key schedule (112-bit, encryption) + * + * \param ctx 3DES context to be initialized + * \param key 16-byte secret key + * + * \return 0 + */ +int des3_set2key_enc( des3_context *ctx, const unsigned char key[DES_KEY_SIZE * 2] ); + +/** + * \brief Triple-DES key schedule (112-bit, decryption) + * + * \param ctx 3DES context to be initialized + * \param key 16-byte secret key + * + * \return 0 + */ +int des3_set2key_dec( des3_context *ctx, const unsigned char key[DES_KEY_SIZE * 2] ); + +/** + * \brief Triple-DES key schedule (168-bit, encryption) + * + * \param ctx 3DES context to be initialized + * \param key 24-byte secret key + * + * \return 0 + */ +int des3_set3key_enc( des3_context *ctx, const unsigned char key[DES_KEY_SIZE * 3] ); + +/** + * \brief Triple-DES key schedule (168-bit, decryption) + * + * \param ctx 3DES context to be initialized + * \param key 24-byte secret key + * + * \return 0 + */ +int des3_set3key_dec( des3_context *ctx, const unsigned char key[DES_KEY_SIZE * 3] ); + +/** + * \brief DES-ECB block encryption/decryption + * + * \param ctx DES context + * \param input 64-bit input block + * \param output 64-bit output block + * + * \return 0 if successful + */ +int des_crypt_ecb( des_context *ctx, + const unsigned char input[8], + unsigned char output[8] ); + +#if defined(POLARSSL_CIPHER_MODE_CBC) +/** + * \brief DES-CBC buffer encryption/decryption + * + * \param ctx DES context + * \param mode DES_ENCRYPT or DES_DECRYPT + * \param length length of the input data + * \param iv initialization vector (updated after use) + * \param input buffer holding the input data + * \param output buffer holding the output data + */ +int des_crypt_cbc( des_context *ctx, + int mode, + size_t length, + unsigned char iv[8], + const unsigned char *input, + unsigned char *output ); +#endif /* POLARSSL_CIPHER_MODE_CBC */ + +/** + * \brief 3DES-ECB block encryption/decryption + * + * \param ctx 3DES context + * \param input 64-bit input block + * \param output 64-bit output block + * + * \return 0 if successful + */ +int des3_crypt_ecb( des3_context *ctx, + const unsigned char input[8], + unsigned char output[8] ); + +#if defined(POLARSSL_CIPHER_MODE_CBC) +/** + * \brief 3DES-CBC buffer encryption/decryption + * + * \param ctx 3DES context + * \param mode DES_ENCRYPT or DES_DECRYPT + * \param length length of the input data + * \param iv initialization vector (updated after use) + * \param input buffer holding the input data + * \param output buffer holding the output data + * + * \return 0 if successful, or POLARSSL_ERR_DES_INVALID_INPUT_LENGTH + */ +int des3_crypt_cbc( des3_context *ctx, + int mode, + size_t length, + unsigned char iv[8], + const unsigned char *input, + unsigned char *output ); +#endif /* POLARSSL_CIPHER_MODE_CBC */ + +#ifdef __cplusplus +} +#endif + +#else /* POLARSSL_DES_ALT */ +#include "des_alt.h" +#endif /* POLARSSL_DES_ALT */ + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \brief Checkup routine + * + * \return 0 if successful, or 1 if the test failed + */ +int des_self_test( int verbose ); + +#ifdef __cplusplus +} +#endif + +#endif /* des.h */ diff --git a/client/loclass/ikeys.c b/client/loclass/ikeys.c new file mode 100644 index 000000000..18571b0de --- /dev/null +++ b/client/loclass/ikeys.c @@ -0,0 +1,469 @@ +/***************************************************************************** + * This file is part of iClassCipher. It is a reconstructon of the cipher engine + * used in iClass, and RFID techology. + * + * The implementation is based on the work performed by + * Flavio D. Garcia, Gerhard de Koning Gans, Roel Verdult and + * Milosch Meriac in the paper "Dismantling IClass". + * + * Copyright (C) 2014 Martin Holst Swende + * + * This is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as published + * by the Free Software Foundation. + * + * This file 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 IClassCipher. If not, see . + ****************************************************************************/ +/** +From "Dismantling iclass": + This section describes in detail the built-in key diversification algorithm of iClass. + Besides the obvious purpose of deriving a card key from a master key, this + algorithm intends to circumvent weaknesses in the cipher by preventing the + usage of certain ‘weak’ keys. In order to compute a diversified key, the iClass + reader first encrypts the card identity id with the master key K, using single + DES. The resulting ciphertext is then input to a function called hash0 which + outputs the diversified key k. + + k = hash0(DES enc (id, K)) + + Here the DES encryption of id with master key K outputs a cryptogram c + of 64 bits. These 64 bits are divided as c = x, y, z [0] , . . . , z [7] ∈ F 82 × F 82 × (F 62 ) 8 + which is used as input to the hash0 function. This function introduces some + obfuscation by performing a number of permutations, complement and modulo + operations, see Figure 2.5. Besides that, it checks for and removes patterns like + similar key bytes, which could produce a strong bias in the cipher. Finally, the + output of hash0 is the diversified card key k = k [0] , . . . , k [7] ∈ (F 82 ) 8 . + + +**/ + + +#include +#include +#include +#include "cipherutils.h" +#include "cipher.h" +#include "../util.h" +#include +#include "des.h" +#include + +uint8_t pi[35] = {0x0F,0x17,0x1B,0x1D,0x1E,0x27,0x2B,0x2D,0x2E,0x33,0x35,0x39,0x36,0x3A,0x3C,0x47,0x4B,0x4D,0x4E,0x53,0x55,0x56,0x59,0x5A,0x5C,0x63,0x65,0x66,0x69,0x6A,0x6C,0x71,0x72,0x74,0x78}; + +static des_context ctx_enc = {DES_ENCRYPT,{0}}; +static des_context ctx_dec = {DES_DECRYPT,{0}}; + +static bool debug_print = false; + +/** + * @brief The key diversification algorithm uses 6-bit bytes. + * This implementation uses 64 bit uint to pack seven of them into one + * variable. When they are there, they are placed as follows: + * XXXX XXXX N0 .... N7, occupying the lsat 48 bits. + * + * This function picks out one from such a collection + * @param all + * @param n bitnumber + * @return + */ +uint8_t getSixBitByte(uint64_t c, int n) +{ + return (c >> (42-6*n)) & 0x3F; + //return (c >> n*6) & 0x3f; +} + +/** + * @brief Puts back a six-bit 'byte' into a uint64_t. + * @param c buffer + * @param z the value to place there + * @param n bitnumber. + */ +void pushbackSixBitByte(uint64_t *c, uint8_t z, int n) +{ + //0x XXXX YYYY ZZZZ ZZZZ ZZZZ + // ^z0 ^z7 + //z0: 1111 1100 0000 0000 + + uint64_t masked = z & 0x3F; + uint64_t eraser = 0x3F; + masked <<= 42-6*n; + eraser <<= 42-6*n; + + //masked <<= 6*n; + //eraser <<= 6*n; + + eraser = ~eraser; + (*c) &= eraser; + (*c) |= masked; + +} + +uint64_t swapZvalues(uint64_t c) +{ + uint64_t newz = 0; + pushbackSixBitByte(&newz, getSixBitByte(c,0),7); + pushbackSixBitByte(&newz, getSixBitByte(c,1),6); + pushbackSixBitByte(&newz, getSixBitByte(c,2),5); + pushbackSixBitByte(&newz, getSixBitByte(c,3),4); + pushbackSixBitByte(&newz, getSixBitByte(c,4),3); + pushbackSixBitByte(&newz, getSixBitByte(c,5),2); + pushbackSixBitByte(&newz, getSixBitByte(c,6),1); + pushbackSixBitByte(&newz, getSixBitByte(c,7),0); + newz |= (c & 0xFFFF000000000000); + return newz; +} + +/** +* @return 4 six-bit bytes chunked into a uint64_t,as 00..00a0a1a2a3 +*/ +uint64_t ck(int i, int j, uint64_t z) +{ + +// printf("ck( i=%d, j=%d), zi=[%d],zj=[%d] \n",i,j,getSixBitByte(z,i),getSixBitByte(z,j) ); + + if(i == 1 && j == -1) + { + // ck(1, −1, z [0] . . . z [3] ) = z [0] . . . z [3] + return z; + + }else if( j == -1) + { + // ck(i, −1, z [0] . . . z [3] ) = ck(i − 1, i − 2, z [0] . . . z [3] ) + return ck(i-1,i-2, z); + } + + if(getSixBitByte(z,i) == getSixBitByte(z,j)) + { + // TODO, I dont know what they mean here in the paper + //ck(i, j − 1, z [0] . . . z [i] ← j . . . z [3] ) + uint64_t newz = 0; + int c; + //printf("z[i]=z[i] (0x%02x), i=%d, j=%d\n",getSixBitByte(z,i),i,j ); + for(c = 0; c < 4 ;c++) + { + uint8_t val = getSixBitByte(z,c); + if(c == i) + { + //printf("oops\n"); + pushbackSixBitByte(&newz, j, c); + }else + { + pushbackSixBitByte(&newz, val, c); + } + } + return ck(i,j-1,newz); + }else + { + return ck(i,j-1,z); + } + +} +/** + + Definition 8. + Let the function check : (F 62 ) 8 → (F 62 ) 8 be defined as + check(z [0] . . . z [7] ) = ck(3, 2, z [0] . . . z [3] ) · ck(3, 2, z [4] . . . z [7] ) + + where ck : N × N × (F 62 ) 4 → (F 62 ) 4 is defined as + + ck(1, −1, z [0] . . . z [3] ) = z [0] . . . z [3] + ck(i, −1, z [0] . . . z [3] ) = ck(i − 1, i − 2, z [0] . . . z [3] ) + ck(i, j, z [0] . . . z [3] ) = + ck(i, j − 1, z [0] . . . z [i] ← j . . . z [3] ), if z [i] = z [j] ; + ck(i, j − 1, z [0] . . . z [3] ), otherwise + + otherwise. +**/ + +uint64_t check(uint64_t z) +{ + //These 64 bits are divided as c = x, y, z [0] , . . . , z [7] + + // ck(3, 2, z [0] . . . z [3] ) + uint64_t ck1 = ck(3,2, z ); + + // ck(3, 2, z [4] . . . z [7] ) + uint64_t ck2 = ck(3,2, z << 24); + ck1 &= 0x00000000FFFFFF000000; + ck2 &= 0x00000000FFFFFF000000; + + return ck1 | ck2 >> 24; + +} + +void permute(BitstreamIn *p_in, uint64_t z,int l,int r, BitstreamOut* out) +{ + if(bitsLeft(p_in) == 0) + { + return; + } + bool pn = tailBit(p_in); + if( pn ) // pn = 1 + { + uint8_t zl = getSixBitByte(z,l); + //printf("permute pushing, zl=0x%02x, zl+1=0x%02x\n", zl, zl+1); + push6bits(out, zl+1); + permute(p_in, z, l+1,r, out); + }else // otherwise + { + uint8_t zr = getSixBitByte(z,r); + //printf("permute pushing, zr=0x%02x\n", zr); + push6bits(out, zr); + permute(p_in,z,l,r+1,out); + } +} +void testPermute() +{ + + uint64_t x = 0; + pushbackSixBitByte(&x,0x00,0); + pushbackSixBitByte(&x,0x01,1); + pushbackSixBitByte(&x,0x02,2); + pushbackSixBitByte(&x,0x03,3); + pushbackSixBitByte(&x,0x04,4); + pushbackSixBitByte(&x,0x05,5); + pushbackSixBitByte(&x,0x06,6); + pushbackSixBitByte(&x,0x07,7); + + uint8_t mres[8] = { getSixBitByte(x, 0), + getSixBitByte(x, 1), + getSixBitByte(x, 2), + getSixBitByte(x, 3), + getSixBitByte(x, 4), + getSixBitByte(x, 5), + getSixBitByte(x, 6), + getSixBitByte(x, 7)}; + printarr("input_perm", mres,8); + + uint8_t p = ~pi[0]; + BitstreamIn p_in = { &p, 8,0 }; + uint8_t outbuffer[] = {0,0,0,0,0,0,0,0}; + BitstreamOut out = {outbuffer,0,0}; + + permute(&p_in, x,0,4, &out); + + uint64_t permuted = bytes_to_num(outbuffer,8); + //printf("zTilde 0x%"PRIX64"\n", zTilde); + permuted >>= 16; + + uint8_t res[8] = { getSixBitByte(permuted, 0), + getSixBitByte(permuted, 1), + getSixBitByte(permuted, 2), + getSixBitByte(permuted, 3), + getSixBitByte(permuted, 4), + getSixBitByte(permuted, 5), + getSixBitByte(permuted, 6), + getSixBitByte(permuted, 7)}; + printarr("permuted", res, 8); +} +void printbegin() +{ + if(! debug_print) + return; + + printf(" | x| y|z0|z1|z2|z3|z4|z5|z6|z7|\n"); +} + +void printState(char* desc, int x,int y, uint64_t c) +{ + if(! debug_print) + return; + + printf("%s : ", desc); + //uint8_t x = (c & 0xFF00000000000000 ) >> 56; + //uint8_t y = (c & 0x00FF000000000000 ) >> 48; + printf(" %02x %02x", x,y); + int i ; + for(i =0 ; i < 8 ; i++) + { + printf(" %02x", getSixBitByte(c,i)); + } + printf("\n"); +} + +/** + * @brief + *Definition 11. Let the function hash0 : F 82 × F 82 × (F 62 ) 8 → (F 82 ) 8 be defined as + * hash0(x, y, z [0] . . . z [7] ) = k [0] . . . k [7] where + * z'[i] = (z[i] mod (63-i)) + i i = 0...3 + * z'[i+4] = (z[i+4] mod (64-i)) + i i = 0...3 + * ẑ = check(z'); + * @param c + * @param k this is where the diversified key is put (should be 8 bytes) + * @return + */ +void hash0(uint64_t c, uint8_t *k) +{ + printbegin(); + //These 64 bits are divided as c = x, y, z [0] , . . . , z [7] + // x = 8 bits + // y = 8 bits + // z0-z7 6 bits each : 48 bits + uint8_t x = (c & 0xFF00000000000000 ) >> 56; + uint8_t y = (c & 0x00FF000000000000 ) >> 48; + printState("origin",x,y,c); + int n; + uint8_t zn, zn4, _zn, _zn4; + uint64_t zP = 0; + + for(n = 0; n < 4 ; n++) + { + zn = getSixBitByte(c,n); + zn4 = getSixBitByte(c,n+4); + + _zn = (zn % (63-n)) + n; + _zn4 = (zn4 % (64-n)) + n; + + pushbackSixBitByte(&zP, _zn,n); + pushbackSixBitByte(&zP, _zn4,n+4); + + } + printState("x|y|z'",x,y,zP); + + uint64_t zCaret = check(zP); + printState("x|y|z^",x,y,zP); + + + uint8_t p = pi[x % 35]; + + if(x & 1) //Check if x7 is 1 + { + p = ~p; + } + printState("p|y|z^",p,y,zP); + //if(debug_print) printf("p:%02x\n", p); + + BitstreamIn p_in = { &p, 8,0 }; + uint8_t outbuffer[] = {0,0,0,0,0,0,0,0}; + BitstreamOut out = {outbuffer,0,0}; + permute(&p_in,zCaret,0,4,&out);//returns 48 bits? or 6 8-bytes + + //Out is now a buffer containing six-bit bytes, should be 48 bits + // if all went well + //printf("Permute output is %d num bits (48?)\n", out.numbits); + //Shift z-values down onto the lower segment + + uint64_t zTilde = bytes_to_num(outbuffer,8); + + //printf("zTilde 0x%"PRIX64"\n", zTilde); + zTilde >>= 16; + //printf("z~ 0x%"PRIX64"\n", zTilde); + printState("p|y|z~", p,y,zTilde); + + int i; + int zerocounter =0 ; + for(i =0 ; i < 8 ; i++) + { + + // the key on index i is first a bit from y + // then six bits from z, + // then a bit from p + + // Init with zeroes + k[i] = 0; + // First, place yi leftmost in k + //k[i] |= (y << i) & 0x80 ; + + // First, place y(7-i) leftmost in k + k[i] |= (y << (7-i)) & 0x80 ; + + //printf("y%d = %d\n",i,(y << i) & 0x80); + + uint8_t zTilde_i = getSixBitByte(zTilde, i); + //printf("zTilde_%d 0x%02x (should be <= 0x3F)\n",i, zTilde_i); + // zTildeI is now on the form 00XXXXXX + // with one leftshift, it'll be + // 0XXXXXX0 + // So after leftshift, we can OR it into k + // However, when doing complement, we need to + // again MASK 0XXXXXX0 (0x7E) + zTilde_i <<= 1; + + //Finally, add bit from p or p-mod + //Shift bit i into rightmost location (mask only after complement) + uint8_t p_i = p >> i & 0x1; + + if( k[i] )// yi = 1 + { + //printf("k[%d] +1\n", i); + k[i] |= ~zTilde_i & 0x7E; + k[i] |= p_i & 1; + k[i] += 1; + + }else // otherwise + { + k[i] |= zTilde_i & 0x7E; + k[i] |= (~p_i) & 1; + } + if((k[i] & 1 )== 0) + { + zerocounter ++; + } + } + //printf("zerocounter=%d (should be 4)\n",zerocounter); + //printf("permute fin, y:0x%02x, x: 0x%02x\n", y, x); + + //return k; +} + +void reorder(uint8_t arr[8]) +{ + uint8_t tmp[4] = {arr[3],arr[2],arr[1], arr[0]}; + arr[0] = arr[7]; + arr[1] = arr[6]; + arr[2] = arr[5]; + arr[3] = arr[4]; + arr[4] = tmp[0];//arr[3]; + arr[5] = tmp[1];//arr[2]; + arr[6] = tmp[2];//arr[3]; + arr[7] = tmp[3];//arr[1] +} + +//extern void printarr(char * name, uint8_t* arr, int len); + +bool des_getParityBitFromKey(uint8_t key) +{//The top 7 bits is used + bool parity = ((key & 0x80) >> 7) + ^ ((key & 0x40) >> 6) ^ ((key & 0x20) >> 5) + ^ ((key & 0x10) >> 4) ^ ((key & 0x08) >> 3) + ^ ((key & 0x04) >> 2) ^ ((key & 0x02) >> 1); + return !parity; +} +void des_checkParity(uint8_t* key) +{ + int i; + int fails =0; + for(i =0 ; i < 8 ; i++) + { + bool parity = des_getParityBitFromKey(key[i]); + if(parity != (key[i] & 0x1)) + { + fails++; + printf("parity1 fail, byte %d [%02x] was %d, should be %d\n",i,key[i],(key[i] & 0x1),parity); + } + } + if(fails) + { + printf("parity fails: %d\n", fails); + }else + { + printf("Key syntax is with parity bits inside each byte\n"); + } +} + +void printarr2(char * name, uint8_t* arr, int len) +{ + int i ; + printf("%s :", name); + for(i =0 ; i< len ; i++) + { + printf("%02x",*(arr+i)); + } + printf("\n"); +} diff --git a/client/loclass/ikeys.h b/client/loclass/ikeys.h new file mode 100644 index 000000000..0b943d6be --- /dev/null +++ b/client/loclass/ikeys.h @@ -0,0 +1,8 @@ +#ifndef IKEYS_H +#define IKEYS_H +int testKeyDiversification(); +int doKeyTests(); +void hash0(uint64_t c, uint8_t *k); +void pushbackSixBitByte(uint64_t *c, uint8_t z, int n); +uint8_t getSixBitByte(uint64_t c, int n); +#endif // IKEYS_H From fe53c0311c94943b162fcd12dc0974fb1b672ca0 Mon Sep 17 00:00:00 2001 From: penturalabs Date: Fri, 2 May 2014 23:30:03 +0100 Subject: [PATCH 12/49] improved calc_iclass_mac to work independant of size --- client/cmdhficlass.c | 2 +- client/loclass/cipher.c | 13 +++++++------ client/loclass/cipher.h | 2 +- 3 files changed, 9 insertions(+), 8 deletions(-) diff --git a/client/cmdhficlass.c b/client/cmdhficlass.c index 34e8f6d9f..389fb5c1c 100644 --- a/client/cmdhficlass.c +++ b/client/cmdhficlass.c @@ -308,7 +308,7 @@ int CmdHFiClassReader_Dump(const char *Cmd) hash0(crypted_id,div_key); //memcpy(div_key,result,8); PrintAndLog("Div Key: %s",sprint_hex(div_key,8)); - calc_iclass_mac(CCNR,div_key,MAC); + calc_iclass_mac(CCNR,12,div_key,MAC); UsbCommand c = {CMD_READER_ICLASS_REPLAY, {readerType}}; memcpy(c.d.asBytes, MAC, 4); diff --git a/client/loclass/cipher.c b/client/loclass/cipher.c index d7c9abdac..aad77a2e0 100644 --- a/client/loclass/cipher.c +++ b/client/loclass/cipher.c @@ -238,15 +238,16 @@ int testMAC() return 0; } -int calc_iclass_mac(uint8_t *cc_nr_p, uint8_t *div_key_p, uint8_t *mac) +int calc_iclass_mac(uint8_t *cc_nr_p, int length, uint8_t *div_key_p, uint8_t *mac) { - uint8_t cc_nr[12]; + uint8_t *cc_nr; uint8_t div_key[8]; - memcpy(cc_nr,cc_nr_p,12); + cc_nr=(uint8_t*)malloc(length+1); + memcpy(cc_nr,cc_nr_p,length); memcpy(div_key,div_key_p,8); - reverse_arraybytes(cc_nr,sizeof(cc_nr)); - BitstreamIn bitstream = {cc_nr,sizeof(cc_nr) * 8,0}; + reverse_arraybytes(cc_nr,length); + BitstreamIn bitstream = {cc_nr,length * 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); @@ -255,6 +256,6 @@ int calc_iclass_mac(uint8_t *cc_nr_p, uint8_t *div_key_p, uint8_t *mac) printf("Calculated_MAC\t%02x%02x%02x%02x\n", dest[0],dest[1],dest[2],dest[3]); memcpy(mac,dest,4); - + free(cc_nr); return 1; } \ No newline at end of file diff --git a/client/loclass/cipher.h b/client/loclass/cipher.h index 10ea8059b..4af92b165 100644 --- a/client/loclass/cipher.h +++ b/client/loclass/cipher.h @@ -41,6 +41,6 @@ typedef struct { } State; void printarr(char * name, uint8_t* arr, int len); -int calc_iclass_mac(uint8_t *cc_nr_p, uint8_t *div_key_p, uint8_t *mac); +int calc_iclass_mac(uint8_t *cc_nr_p, int length, uint8_t *div_key_p, uint8_t *mac); #endif // CIPHER_H From 12401d8dbc7639009d90e3a5c8933cbedc2816dc Mon Sep 17 00:00:00 2001 From: Martin Holst Swende Date: Sat, 7 Jun 2014 21:39:52 +0200 Subject: [PATCH 13/49] Added 424KHz mode for iso 15693 simulation --- fpga/hi_simulate.v | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/fpga/hi_simulate.v b/fpga/hi_simulate.v index efaf452fa..c04ade80b 100644 --- a/fpga/hi_simulate.v +++ b/fpga/hi_simulate.v @@ -89,7 +89,9 @@ always @(mod_type or ssp_clk or ssp_dout) else if(mod_type == 3'b001) modulating_carrier <= ssp_dout ^ ssp_clk_divider[3]; // XOR means BPSK else if(mod_type == 3'b010) - modulating_carrier <= ssp_dout & ssp_clk_divider[5]; // switch 212kHz subcarrier on/off + modulating_carrier <= ssp_dout & ssp_clk_divider[5]; // switch 212kHz subcarrier on/off + else if(mod_type == 3'b100) + modulating_carrier <= ssp_dout & ssp_clk_divider[4]; // switch 424kHz modulation on/off else modulating_carrier <= 1'b0; // yet unused @@ -105,5 +107,8 @@ assign pwr_oe4 = modulating_carrier; assign pwr_oe3 = 1'b0; assign dbg = after_hysteresis; +//reg dbg; +//always @(ssp_dout) +// dbg <= ssp_dout; endmodule From 83fd67ba0bf3c525f7dd8b3b6ce8137ce644c3ac Mon Sep 17 00:00:00 2001 From: Martin Holst Swende Date: Sat, 7 Jun 2014 21:40:47 +0200 Subject: [PATCH 14/49] Added mode for 424k modulation (iso 15693) --- armsrc/apps.h | 1 + 1 file changed, 1 insertion(+) diff --git a/armsrc/apps.h b/armsrc/apps.h index e21b5ce5e..92228b8db 100644 --- a/armsrc/apps.h +++ b/armsrc/apps.h @@ -100,6 +100,7 @@ void SetAdcMuxFor(uint32_t whichGpio); #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) // Options for ISO14443A #define FPGA_HF_ISO14443A_SNIFFER (0<<0) #define FPGA_HF_ISO14443A_TAGSIM_LISTEN (1<<0) From 94090295a742e44b9e33e2909ab8b4a823ccec20 Mon Sep 17 00:00:00 2001 From: Martin Holst Swende Date: Sat, 7 Jun 2014 21:44:45 +0200 Subject: [PATCH 15/49] new fpga image for better iso15693 simulation --- fpga/fpga.bit | Bin 42172 -> 42172 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/fpga/fpga.bit b/fpga/fpga.bit index e773ef9326d66be61c29bc6c169be07d9703a364..e5ea4fcd33b41a65cf776e06d388ebfcad02bff9 100644 GIT binary patch literal 42172 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 ChxqLP literal 42172 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 From e3dc1e4cf50cac8af65b062ab7ce6cf1a01bd5fc Mon Sep 17 00:00:00 2001 From: Martin Holst Swende Date: Sat, 7 Jun 2014 21:49:56 +0200 Subject: [PATCH 16/49] Minor changes in iclass.c --- armsrc/iclass.c | 69 ++++++++++++++++++++++++++----------------------- 1 file changed, 37 insertions(+), 32 deletions(-) diff --git a/armsrc/iclass.c b/armsrc/iclass.c index e876132e7..8d65b523b 100644 --- a/armsrc/iclass.c +++ b/armsrc/iclass.c @@ -1075,6 +1075,12 @@ void SimulateIClass(uint8_t arg0, uint8_t *datain) CodeIClassTagAnswer(response4, sizeof(response4)); memcpy(resp4, ToSend, ToSendMax); resp4Len = ToSendMax; + + // Start from off (no field generated) + FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF); + SpinDelay(200); + + // We need to listen to the high-frequency, peak-detected path. SetAdcMuxFor(GPIO_MUXSEL_HIPKD); FpgaSetupSsc(); @@ -1085,10 +1091,17 @@ void SimulateIClass(uint8_t arg0, uint8_t *datain) LED_A_ON(); for(;;) { LED_B_OFF(); + //Signal tracer + // Can be used to get a trigger for an oscilloscope.. + LED_C_OFF(); + if(!GetIClassCommandFromReader(receivedCmd, &len, 100)) { DbpString("button press"); break; } + //Signal tracer + LED_C_ON(); + // Okay, look at the command now. if(receivedCmd[0] == 0x0a) { @@ -1188,41 +1201,34 @@ void SimulateIClass(uint8_t arg0, uint8_t *datain) static int SendIClassAnswer(uint8_t *resp, int respLen, int delay) { - int i = 0, u = 0, d = 0; + int i = 0, d=0;//, u = 0, d = 0; uint8_t b = 0; - // return 0; - // Modulate Manchester - // FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_ISO14443A | FPGA_HF_ISO14443A_TAGSIM_MOD424); - FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_ISO14443A | FPGA_HF_ISO14443A_TAGSIM_MOD); + + FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_SIMULATOR|FPGA_HF_SIMULATOR_MODULATE_424K); + AT91C_BASE_SSC->SSC_THR = 0x00; FpgaSetupSsc(); - - // send cycle - for(;;) { - if(AT91C_BASE_SSC->SSC_SR & (AT91C_SSC_RXRDY)) { - volatile uint8_t b = (uint8_t)AT91C_BASE_SSC->SSC_RHR; - (void)b; + while(!BUTTON_PRESS()) { + if((AT91C_BASE_SSC->SSC_SR & AT91C_SSC_RXRDY)){ + b = AT91C_BASE_SSC->SSC_RHR; (void) b; } - if(AT91C_BASE_SSC->SSC_SR & (AT91C_SSC_TXRDY)) { + if(AT91C_BASE_SSC->SSC_SR & (AT91C_SSC_TXRDY)){ + b = 0x00; if(d < delay) { - b = 0x00; d++; } - else if(i >= respLen) { - b = 0x00; - u++; - } else { - b = resp[i]; - u++; - if(u > 1) { i++; u = 0; } + else { + if( i < respLen){ + b = resp[i]; + //Hack + //b = 0xAC; + } + i++; } AT91C_BASE_SSC->SSC_THR = b; + } - if(u > 4) break; - } - if(BUTTON_PRESS()) { - break; - } + if (i > respLen +4) break; } return 0; @@ -1236,7 +1242,6 @@ static int SendIClassAnswer(uint8_t *resp, int respLen, int delay) static void TransmitIClassCommand(const uint8_t *cmd, int len, int *samples, int *wait) { int c; - FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_ISO14443A | FPGA_HF_ISO14443A_READER_MOD); AT91C_BASE_SSC->SSC_THR = 0x00; FpgaSetupSsc(); @@ -1312,12 +1317,12 @@ void CodeIClassCommand(const uint8_t * cmd, int len) b = cmd[i]; for(j = 0; j < 4; j++) { for(k = 0; k < 4; k++) { - if(k == (b & 3)) { - ToSend[++ToSendMax] = 0x0f; - } - else { - ToSend[++ToSendMax] = 0x00; - } + if(k == (b & 3)) { + ToSend[++ToSendMax] = 0x0f; + } + else { + ToSend[++ToSendMax] = 0x00; + } } b >>= 2; } From 81012e670bf7d1d6a33d292d8a2777572710ad9d Mon Sep 17 00:00:00 2001 From: Martin Holst Swende Date: Sat, 7 Jun 2014 22:00:31 +0200 Subject: [PATCH 17/49] debug in progress --- armsrc/iclass.c | 87 ++++++++++++++++++++++++++++++------------------- 1 file changed, 53 insertions(+), 34 deletions(-) diff --git a/armsrc/iclass.c b/armsrc/iclass.c index 5a4c15d00..7474598b6 100644 --- a/armsrc/iclass.c +++ b/armsrc/iclass.c @@ -48,17 +48,6 @@ static int timeout = 4096; -// CARD TO READER -// Sequence D: 11110000 modulation with subcarrier during first half -// Sequence E: 00001111 modulation with subcarrier during second half -// Sequence F: 00000000 no modulation with subcarrier -// READER TO CARD -// Sequence X: 00001100 drop after half a period -// Sequence Y: 00000000 no drop -// Sequence Z: 11000000 drop at start -#define SEC_X 0x0c -#define SEC_Y 0x00 -#define SEC_Z 0xc0 static int SendIClassAnswer(uint8_t *resp, int respLen, int delay); @@ -697,8 +686,6 @@ void RAMFUNC SnoopIClass(void) int samples = 0; rsamples = 0; - memset(trace, 0x44, RECV_CMD_OFFSET); - // Set up the demodulator for tag -> reader responses. Demod.output = tagToReaderResponse; Demod.len = 0; @@ -722,6 +709,9 @@ void RAMFUNC SnoopIClass(void) FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_ISO14443A | FPGA_HF_ISO14443A_SNIFFER); SetAdcMuxFor(GPIO_MUXSEL_HIPKD); + uint32_t time_0 = GetCountSspClk(); + + int div = 0; //int div2 = 0; int decbyte = 0; @@ -773,8 +763,14 @@ void RAMFUNC SnoopIClass(void) rsamples = samples - Uart.samples; LED_C_ON(); - if(!LogTrace(readerToTagCmd,Uart.byteCnt, rsamples, Uart.parityBits,TRUE)) break; + //if(!LogTrace(Uart.output,Uart.byteCnt, rsamples, Uart.parityBits,TRUE)) break; //if(!LogTrace(NULL, 0, Uart.endTime*16 - DELAY_READER_AIR2ARM_AS_SNIFFER, 0, TRUE)) break; + if(tracing) + { + LogTrace(Uart.output,Uart.byteCnt, (GetCountSspClk()-time_0) << 4, Uart.parityBits,TRUE); + LogTrace(NULL, 0, (GetCountSspClk()-time_0) << 4, 0, TRUE); + } + /* And ready to receive another command. */ Uart.state = STATE_UNSYNCD; @@ -793,8 +789,11 @@ void RAMFUNC SnoopIClass(void) rsamples = samples - Demod.samples; LED_B_ON(); - if(!LogTrace(tagToReaderResponse,Demod.len, rsamples, Demod.parityBits,FALSE)) break; - //if (!LogTrace(NULL, 0, Demod.endTime*16 - DELAY_TAG_AIR2ARM_AS_SNIFFER, 0, FALSE)) break; + if(tracing) + { + LogTrace(Demod.output,Demod.len, (GetCountSspClk()-time_0) << 4 , Demod.parityBits,FALSE); + LogTrace(NULL, 0, (GetCountSspClk()-time_0) << 4, 0, FALSE); + } // And ready to receive another response. @@ -883,6 +882,8 @@ static int GetIClassCommandFromReader(uint8_t *received, int *len, int maxLen) //----------------------------------------------------------------------------- static void CodeIClassTagAnswer(const uint8_t *cmd, int len) { + //So far a dummy implementation, not used + //int lastProxToAirDuration =0; int i; ToSendReset(); @@ -891,7 +892,7 @@ static void CodeIClassTagAnswer(const uint8_t *cmd, int len) ToSend[++ToSendMax] = 0x00; ToSend[++ToSendMax] = 0x00; ToSend[++ToSendMax] = 0x00; - ToSend[++ToSendMax] = 0xff; + ToSend[++ToSendMax] = 0xff;//Proxtoair duration starts here ToSend[++ToSendMax] = 0xff; ToSend[++ToSendMax] = 0xff; ToSend[++ToSendMax] = 0x00; @@ -919,11 +920,13 @@ static void CodeIClassTagAnswer(const uint8_t *cmd, int len) ToSend[++ToSendMax] = 0x00; ToSend[++ToSendMax] = 0xff; ToSend[++ToSendMax] = 0xff; - ToSend[++ToSendMax] = 0xff; + ToSend[++ToSendMax] = 0xff; ToSend[++ToSendMax] = 0x00; ToSend[++ToSendMax] = 0x00; ToSend[++ToSendMax] = 0x00; + //lastProxToAirDuration = 8*ToSendMax - 3*8 - 3*8;//Not counting zeroes in the beginning or end + // Convert from last byte pos to length ToSendMax++; } @@ -931,8 +934,10 @@ static void CodeIClassTagAnswer(const uint8_t *cmd, int len) // Only SOF static void CodeIClassTagSOF() { - ToSendReset(); + //So far a dummy implementation, not used + //int lastProxToAirDuration =0; + ToSendReset(); // Send SOF ToSend[++ToSendMax] = 0x00; ToSend[++ToSendMax] = 0x00; @@ -942,6 +947,9 @@ static void CodeIClassTagSOF() ToSend[++ToSendMax] = 0xff; ToSend[++ToSendMax] = 0x00; ToSend[++ToSendMax] = 0xff; + +// lastProxToAirDuration = 8*ToSendMax - 3*8;//Not counting zeroes in the beginning + // Convert from last byte pos to length ToSendMax++; @@ -994,7 +1002,8 @@ void SimulateIClass(uint32_t arg0, uint32_t arg1, uint32_t arg2, uint8_t *datain return; // Button pressed } } - }else{ + } + else{ // We may want a mode here where we hardcode the csns to use (from proxclone). // That will speed things up a little, but not required just yet. Dbprintf("The mode is not implemented, reserved for future use"); @@ -1008,6 +1017,7 @@ void SimulateIClass(uint32_t arg0, uint32_t arg1, uint32_t arg2, uint8_t *datain */ int doIClassSimulation(uint8_t csn[], int breakAfterMacReceived) { + // CSN followed by two CRC bytes uint8_t response2[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; uint8_t response3[] = { 0,0,0,0,0,0,0,0,0,0}; @@ -1086,16 +1096,22 @@ int doIClassSimulation(uint8_t csn[], int breakAfterMacReceived) // To control where we are in the protocol int cmdsRecvd = 0; + uint32_t time_0 = GetCountSspClk(); + uint32_t t2r_time =0; + uint32_t r2t_time =0; LED_A_ON(); bool displayDebug = true; bool buttonPressed = false; while(!exitLoop) { + displayDebug = true; + LED_B_OFF(); if(!GetIClassCommandFromReader(receivedCmd, &len, 100)) { buttonPressed = true; break; } + r2t_time = GetCountSspClk(); // Okay, look at the command now. if(receivedCmd[0] == 0x0a ) { @@ -1109,7 +1125,7 @@ int doIClassSimulation(uint8_t csn[], int breakAfterMacReceived) resp = resp2; respLen = resp2Len; //order = 2; respdata = response2; respsize = sizeof(response2); - displayDebug = false; + //displayDebug = false; //DbpString("Reader requests anticollission CSN:"); } else if(receivedCmd[0] == 0x81) { // Reader selects anticollission CSN. @@ -1160,8 +1176,8 @@ int doIClassSimulation(uint8_t csn[], int breakAfterMacReceived) respsize = 0; } - if(cmdsRecvd > 999) { - DbpString("1000 commands later..."); + if(cmdsRecvd > 100) { + //DbpString("100 commands later..."); break; } else { @@ -1170,7 +1186,9 @@ int doIClassSimulation(uint8_t csn[], int breakAfterMacReceived) if(respLen > 0) { SendIClassAnswer(resp, respLen, 21); + t2r_time = GetCountSspClk(); +// } if(displayDebug) Dbprintf("R2T:(len=%d): %x %x %x %x %x %x %x %x %x\nT2R: (total/data =%d/%d): %x %x %x %x %x %x %x %x %x", len, receivedCmd[0], receivedCmd[1], receivedCmd[2], @@ -1185,21 +1203,23 @@ int doIClassSimulation(uint8_t csn[], int breakAfterMacReceived) if (tracing) { //LogTrace(receivedCmd,len, rsamples, Uart.parityBits, TRUE); - if(!LogTrace(receivedCmd,len, rsamples, Uart.parityBits,TRUE)) - { - DbpString("Trace full"); - break; - } + + LogTrace(receivedCmd,len, (r2t_time-time_0)<< 4, Uart.parityBits,TRUE); + LogTrace(NULL,0, (r2t_time-time_0) << 4, 0,TRUE); if (respdata != NULL) { //LogTrace(respdata,respsize, rsamples, SwapBits(GetParity(respdata,respsize),respsize), FALSE); //if(!LogTrace(resp,respLen, rsamples,SwapBits(GetParity(respdata,respsize),respsize),FALSE)) - if(!LogTrace(respdata,respsize, rsamples,SwapBits(GetParity(respdata,respsize),respsize),FALSE)) - { - DbpString("Trace full"); - break; - } + LogTrace(respdata,respsize, (t2r_time-time_0) << 4,SwapBits(GetParity(respdata,respsize),respsize),FALSE); + LogTrace(NULL,0, (t2r_time-time_0) << 4,0,FALSE); + + } + if(!tracing) { + DbpString("Trace full"); + //break; + } + } memset(receivedCmd, 0x44, RECV_CMD_SIZE); } @@ -1211,7 +1231,6 @@ int doIClassSimulation(uint8_t csn[], int breakAfterMacReceived) { DbpString("Button pressed"); } - return buttonPressed; } From fa541aca9602e1629ab6d57238e3abc89c9b4ac3 Mon Sep 17 00:00:00 2001 From: Martin Holst Swende Date: Sat, 7 Jun 2014 22:16:57 +0200 Subject: [PATCH 18/49] Minor changes, it may actually work now, need to test with a credentialed reader --- armsrc/iclass.c | 29 +++++------------------------ 1 file changed, 5 insertions(+), 24 deletions(-) diff --git a/armsrc/iclass.c b/armsrc/iclass.c index 7289abbc2..117e4035a 100644 --- a/armsrc/iclass.c +++ b/armsrc/iclass.c @@ -1092,10 +1092,11 @@ int doIClassSimulation(uint8_t csn[], int breakAfterMacReceived) // Start from off (no field generated) - FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF); - SpinDelay(200); - - + //FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF); + //SpinDelay(200); + FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_ISO14443A | FPGA_HF_ISO14443A_TAGSIM_LISTEN); + SpinDelay(100); + StartCountSspClk(); // We need to listen to the high-frequency, peak-detected path. SetAdcMuxFor(GPIO_MUXSEL_HIPKD); FpgaSetupSsc(); @@ -1107,10 +1108,8 @@ int doIClassSimulation(uint8_t csn[], int breakAfterMacReceived) uint32_t r2t_time =0; LED_A_ON(); - bool displayDebug = true; bool buttonPressed = false; while(!exitLoop) { - displayDebug = true; LED_B_OFF(); //Signal tracer @@ -1131,13 +1130,11 @@ int doIClassSimulation(uint8_t csn[], int breakAfterMacReceived) resp = resp1; respLen = resp1Len; //order = 1; respdata = &sof; respsize = sizeof(sof); - displayDebug = false; } else if(receivedCmd[0] == 0x0c) { // Reader asks for anticollission CSN resp = resp2; respLen = resp2Len; //order = 2; respdata = response2; respsize = sizeof(response2); - //displayDebug = false; //DbpString("Reader requests anticollission CSN:"); } else if(receivedCmd[0] == 0x81) { // Reader selects anticollission CSN. @@ -1199,29 +1196,13 @@ int doIClassSimulation(uint8_t csn[], int breakAfterMacReceived) if(respLen > 0) { SendIClassAnswer(resp, respLen, 21); t2r_time = GetCountSspClk(); - -// } - if(displayDebug) Dbprintf("R2T:(len=%d): %x %x %x %x %x %x %x %x %x\nT2R: (total/data =%d/%d): %x %x %x %x %x %x %x %x %x", - len, - receivedCmd[0], receivedCmd[1], receivedCmd[2], - receivedCmd[3], receivedCmd[4], receivedCmd[5], - receivedCmd[6], receivedCmd[7], receivedCmd[8], - respLen,respsize, - resp[0], resp[1], resp[2], - resp[3], resp[4], resp[5], - resp[6], resp[7], resp[8]); - } if (tracing) { - //LogTrace(receivedCmd,len, rsamples, Uart.parityBits, TRUE); - LogTrace(receivedCmd,len, (r2t_time-time_0)<< 4, Uart.parityBits,TRUE); LogTrace(NULL,0, (r2t_time-time_0) << 4, 0,TRUE); if (respdata != NULL) { - //LogTrace(respdata,respsize, rsamples, SwapBits(GetParity(respdata,respsize),respsize), FALSE); - //if(!LogTrace(resp,respLen, rsamples,SwapBits(GetParity(respdata,respsize),respsize),FALSE)) LogTrace(respdata,respsize, (t2r_time-time_0) << 4,SwapBits(GetParity(respdata,respsize),respsize),FALSE); LogTrace(NULL,0, (t2r_time-time_0) << 4,0,FALSE); From d51b2eda8f91b17dd02cdbd931b089fc8f8d61db Mon Sep 17 00:00:00 2001 From: Martin Holst Swende Date: Wed, 11 Jun 2014 08:42:37 +0200 Subject: [PATCH 19/49] Added enios dirthreshold command, patch from http://www.proxmark.org/forum/viewtopic.php?pid=11577#p11577 --- client/cmddata.c | 37 +++++++++++++++++++++++++++++++++++++ client/cmddata.h | 1 + 2 files changed, 38 insertions(+) diff --git a/client/cmddata.c b/client/cmddata.c index a7b804809..fa54d01a6 100644 --- a/client/cmddata.c +++ b/client/cmddata.c @@ -17,6 +17,7 @@ #include "ui.h" #include "graph.h" #include "cmdparser.h" +#include "util.h" #include "cmdmain.h" #include "cmddata.h" @@ -818,6 +819,41 @@ int CmdThreshold(const char *Cmd) return 0; } +int CmdDirectionalThreshold(const char *Cmd) +{ + int8_t upThres = param_get8(Cmd, 0); + int8_t downThres = param_get8(Cmd, 1); + + printf("Applying Up Threshold: %d, Down Threshold: %d\n", upThres, downThres); + + int lastValue = GraphBuffer[0]; + GraphBuffer[0] = 0; // Will be changed at the end, but init 0 as we adjust to last samples value if no threshold kicks in. + + for (int i = 1; i < GraphTraceLen; ++i) { + // Apply first threshold to samples heading up + if (GraphBuffer[i] >= upThres && GraphBuffer[i] > lastValue) + { + lastValue = GraphBuffer[i]; // Buffer last value as we overwrite it. + GraphBuffer[i] = 1; + } + // Apply second threshold to samples heading down + else if (GraphBuffer[i] <= downThres && GraphBuffer[i] < lastValue) + { + lastValue = GraphBuffer[i]; // Buffer last value as we overwrite it. + GraphBuffer[i] = -1; + } + else + { + lastValue = GraphBuffer[i]; // Buffer last value as we overwrite it. + GraphBuffer[i] = GraphBuffer[i-1]; + + } + } + GraphBuffer[0] = GraphBuffer[1]; // Aline with first edited sample. + RepaintGraphWindow(); + return 0; +} + int CmdZerocrossings(const char *Cmd) { // Zero-crossings aren't meaningful unless the signal is zero-mean. @@ -874,6 +910,7 @@ static command_t CommandTable[] = {"scale", CmdScale, 1, " -- Set cursor display scale"}, {"threshold", CmdThreshold, 1, " -- Maximize/minimize every value in the graph window depending on threshold"}, {"zerocrossings", CmdZerocrossings, 1, "Count time between zero-crossings"}, + {"dirthreshold", CmdDirectionalThreshold, 1, " -- Max rising higher up-thres/ Min falling lower down-thres, keep rest as prev."}, {NULL, NULL, 0, NULL} }; diff --git a/client/cmddata.h b/client/cmddata.h index 2f86a9417..716c9c39c 100644 --- a/client/cmddata.h +++ b/client/cmddata.h @@ -38,6 +38,7 @@ int CmdSamples(const char *Cmd); int CmdSave(const char *Cmd); int CmdScale(const char *Cmd); int CmdThreshold(const char *Cmd); +int CmdDirectionalThreshold(const char *Cmd); int CmdZerocrossings(const char *Cmd); #endif From 9f6e9d15755fdaefa4fee7a660cac988721268cd Mon Sep 17 00:00:00 2001 From: Martin Holst Swende Date: Mon, 16 Jun 2014 21:27:12 +0200 Subject: [PATCH 20/49] More work on iclass simulation attack --- armsrc/apps.h | 2 +- armsrc/iclass.c | 35 +++++-- client/cmdhficlass.c | 221 +++++++++++++++++++++++++++++++++++++++---- client/cmdhficlass.h | 1 + 4 files changed, 230 insertions(+), 29 deletions(-) diff --git a/armsrc/apps.h b/armsrc/apps.h index 59be5f118..c6520702a 100644 --- a/armsrc/apps.h +++ b/armsrc/apps.h @@ -191,7 +191,7 @@ void SetDebugIso15693(uint32_t flag); void RAMFUNC SnoopIClass(void); void SimulateIClass(uint32_t arg0, uint32_t arg1, uint32_t arg2, uint8_t *datain); void ReaderIClass(uint8_t arg0); -int doIClassSimulation(uint8_t csn[], int breakAfterMacReceived); +//int doIClassSimulation(uint8_t csn[], int breakAfterMacReceived); // hitag2.h void SnoopHitag(uint32_t type); void SimulateHitagTag(bool tag_mem_supplied, byte_t* data); diff --git a/armsrc/iclass.c b/armsrc/iclass.c index 117e4035a..be27aa3ad 100644 --- a/armsrc/iclass.c +++ b/armsrc/iclass.c @@ -954,7 +954,7 @@ static void CodeIClassTagSOF() // Convert from last byte pos to length ToSendMax++; } - +int doIClassSimulation(uint8_t csn[], int breakAfterMacReceived, uint8_t *reader_mac_buf); /** * @brief SimulateIClass simulates an iClass card. * @param arg0 type of simulation @@ -977,37 +977,42 @@ void SimulateIClass(uint32_t arg0, uint32_t arg1, uint32_t arg2, uint8_t *datain iso14a_clear_trace(); uint8_t csn_crc[] = { 0x03, 0x1f, 0xec, 0x8a, 0xf7, 0xff, 0x12, 0xe0, 0x00, 0x00 }; - if(simType == 0) { // Use the CSN from commandline memcpy(csn_crc, datain, 8); - doIClassSimulation(csn_crc,0); + doIClassSimulation(csn_crc,0,NULL); }else if(simType == 1) { - doIClassSimulation(csn_crc,0); + doIClassSimulation(csn_crc,0,NULL); } else if(simType == 2) { + + uint8_t mac_responses[64] = { 0 }; Dbprintf("Going into attack mode"); // In this mode, a number of csns are within datain. We'll simulate each one, one at a time // in order to collect MAC's from the reader. This can later be used in an offlne-attack // in order to obtain the keys, as in the "dismantling iclass"-paper. - for(int i = 0 ; i < numberOfCSNS && i*8+8 < USB_CMD_DATA_SIZE; i++) + int i = 0; + for( ; i < numberOfCSNS && i*8+8 < USB_CMD_DATA_SIZE; i++) { // The usb data is 512 bytes, fitting 65 8-byte CSNs in there. memcpy(csn_crc, datain+(i*8), 8); - if(doIClassSimulation(csn_crc,1)) + if(doIClassSimulation(csn_crc,1,mac_responses)) { return; // Button pressed } } + cmd_send(CMD_ACK,CMD_SIMULATE_TAG_ICLASS,i,0,mac_responses,i*8); + } else{ // We may want a mode here where we hardcode the csns to use (from proxclone). // That will speed things up a little, but not required just yet. Dbprintf("The mode is not implemented, reserved for future use"); } + Dbprintf("Done..."); } /** @@ -1015,7 +1020,7 @@ void SimulateIClass(uint32_t arg0, uint32_t arg1, uint32_t arg2, uint8_t *datain * @param csn - csn to use * @param breakAfterMacReceived if true, returns after reader MAC has been received. */ -int doIClassSimulation(uint8_t csn[], int breakAfterMacReceived) +int doIClassSimulation(uint8_t csn[], int breakAfterMacReceived, uint8_t *reader_mac_buf) { // CSN followed by two CRC bytes @@ -1109,6 +1114,12 @@ int doIClassSimulation(uint8_t csn[], int breakAfterMacReceived) LED_A_ON(); bool buttonPressed = false; + + /** Hack for testing + memcpy(reader_mac_buf,csn,8); + exitLoop = true; + end hack **/ + while(!exitLoop) { LED_B_OFF(); @@ -1159,11 +1170,15 @@ int doIClassSimulation(uint8_t csn[], int breakAfterMacReceived) if (breakAfterMacReceived){ // TODO, actually return this to the caller instead of just // dbprintf:ing ... - Dbprintf("CSN: %02x %02x %02x %02x %02x %02x %02x %02x"); + Dbprintf("CSN: %02x %02x %02x %02x %02x %02x %02x %02x",csn[0],csn[1],csn[2],csn[3],csn[4],csn[5],csn[6],csn[7]); Dbprintf("RDR: (len=%02d): %02x %02x %02x %02x %02x %02x %02x %02x %02x",len, receivedCmd[0], receivedCmd[1], receivedCmd[2], receivedCmd[3], receivedCmd[4], receivedCmd[5], receivedCmd[6], receivedCmd[7], receivedCmd[8]); + if (reader_mac_buf != NULL) + { + memcpy(reader_mac_buf,receivedCmd+1,8); + } exitLoop = true; } } else if(receivedCmd[0] == 0x00 && len == 1) { @@ -1187,7 +1202,7 @@ int doIClassSimulation(uint8_t csn[], int breakAfterMacReceived) if(cmdsRecvd > 100) { //DbpString("100 commands later..."); - break; + //break; } else { cmdsRecvd++; @@ -1217,7 +1232,7 @@ int doIClassSimulation(uint8_t csn[], int breakAfterMacReceived) memset(receivedCmd, 0x44, RECV_CMD_SIZE); } - Dbprintf("%x", cmdsRecvd); + //Dbprintf("%x", cmdsRecvd); LED_A_OFF(); LED_B_OFF(); if(buttonPressed) diff --git a/client/cmdhficlass.c b/client/cmdhficlass.c index 13ffc8ba7..f31bced74 100644 --- a/client/cmdhficlass.c +++ b/client/cmdhficlass.c @@ -12,6 +12,7 @@ #include #include #include +#include #include "iso14443crc.h" // Can also be used for iClass, using 0xE012 as CRC-type #include "data.h" //#include "proxusb.h" @@ -328,20 +329,19 @@ int CmdHFiClassSim(const char *Cmd) PrintAndLog("--simtype:%02x csn:%s", simType, sprint_hex(CSN, 8)); } - if(simType > 2) + if(simType > 5) { PrintAndLog("Undefined simptype %d", simType); return 1; } uint8_t numberOfCSNs=0; - UsbCommand c = {CMD_SIMULATE_TAG_ICLASS, {simType,numberOfCSNs}}; - memcpy(c.d.asBytes, CSN, 8); + if(simType == 2) + { + UsbCommand c = {CMD_SIMULATE_TAG_ICLASS, {simType,63}}; + UsbCommand resp = {0}; - if(simType == 2) - { - c.arg[1] = 10;//10 CSNs - uint8_t csns[] ={ + uint8_t csns1[] ={ /* Order Simulated CSN HASH1 Recovered key bytes */ /* 1 */ 0x00,0x0B,0x0F,0xFF,0xF7,0xFF,0x12,0xE0,// 0101000045014545 00,01 45 /* 2 */ 0x03,0x0B,0x0E,0xFE,0xF7,0xFF,0x12,0xE0,// 0202000045014545 02 @@ -373,21 +373,156 @@ int CmdHFiClassSim(const char *Cmd) /* 28 */ 0x02,0x07,0x01,0x1D,0xF7,0xFF,0x12,0xE0,// 630F000045014545 0F /* 29 */ 0x04,0x7F,0x7F,0xA7,0xF7,0xFF,0x12,0xE0,// 5911000045014545 11 /* 30 */ 0x04,0x60,0x6E,0xE8,0xF7,0xFF,0x12,0xE0,// 1822000045014545 18 - }; - memcpy(c.d.asBytes, csns, sizeof(c.d.asBytes)); + /*31*/ 0x04,0x77,0x77,0xBF,0xF7,0xFF,0x12,0xE0, // 4119000045014545 19 + /*32*/ 0x00,0x69,0x6D,0xE5,0xF7,0xFF,0x12,0xE0, // 1B23000045014545 1B + /*33*/ 0x01,0x69,0x6E,0xE2,0xF7,0xFF,0x12,0xE0, // 1E22000045014545 1E + /*34*/ 0x02,0x6B,0x6D,0xE1,0xF7,0xFF,0x12,0xE0, // 1F23000045014545 1F + /*35*/ 0x01,0x3F,0x04,0xE0,0xF7,0xFF,0x12,0xE0, // 200C000045014545 20 + /*36*/ 0x02,0x6E,0x6E,0xDC,0xF7,0xFF,0x12,0xE0, // 2422000045014545 24 + /*37*/ 0x05,0x6D,0x6E,0xDA,0xF7,0xFF,0x12,0xE0, // 2622000045014545 26 + /*38*/ 0x06,0x6F,0x6D,0xD9,0xF7,0xFF,0x12,0xE0, // 2723000045014545 27 + /*39*/ 0x01,0x6B,0x68,0xEC,0xF7,0xFF,0x12,0xE0, // 1428000045014545 28 + /*40*/ 0x04,0x6F,0x6F,0xD7,0xF7,0xFF,0x12,0xE0, // 2921000045014545 29 + /*41*/ 0x02,0x66,0x66,0xF4,0xF7,0xFF,0x12,0xE0, // 0C2A000045014545 2A + /*42*/ 0x00,0x61,0x65,0xFD,0xF7,0xFF,0x12,0xE0, // 032B000045014545 2B + /*43*/ 0x00,0x62,0x64,0xFE,0xF7,0xFF,0x12,0xE0, // 022C000045014545 2C + /*44*/ 0x01,0x65,0x62,0xFE,0xF7,0xFF,0x12,0xE0, // 022E000045014545 2E + /*45*/ 0x02,0x67,0x61,0xFD,0xF7,0xFF,0x12,0xE0, // 032F000045014545 2F + /*46*/ 0x00,0x5F,0x5B,0x13,0xF7,0xFF,0x12,0xE0, // 6D35000045014545 35 + /*47*/ 0x00,0x44,0x4E,0x48,0xF7,0xFF,0x12,0xE0, // 3842000045014545 38 + /*48*/ 0x00,0x53,0x57,0x27,0xF7,0xFF,0x12,0xE0, // 5939000045014545 39 + /*49*/ 0x00,0x49,0x4D,0x45,0xF7,0xFF,0x12,0xE0, // 3B43000045014545 3B + /*50*/ 0x01,0x49,0x4E,0x42,0xF7,0xFF,0x12,0xE0, // 3E42000045014545 3E + /*51*/ 0x02,0x4B,0x4D,0x41,0xF7,0xFF,0x12,0xE0, // 3F43000045014545 3F + /*52*/ 0x02,0x4E,0x4E,0x3C,0xF7,0xFF,0x12,0xE0, // 4442000045014545 44 + /*53*/ 0x05,0x4D,0x4E,0x3A,0xF7,0xFF,0x12,0xE0, // 4642000045014545 46 + /*54*/ 0x06,0x4F,0x4D,0x39,0xF7,0xFF,0x12,0xE0, // 4743000045014545 47 + /*55*/ 0x01,0x77,0x7C,0xB8,0xF7,0xFF,0x12,0xE0, // 4814000045014545 48 + /*56*/ 0x04,0x4F,0x4F,0x37,0xF7,0xFF,0x12,0xE0, // 4941000045014545 49 + /*57*/ 0x00,0x7A,0x7C,0xB6,0xF7,0xFF,0x12,0xE0, // 4A14000045014545 4A + /*58*/ 0x00,0x41,0x45,0x5D,0xF7,0xFF,0x12,0xE0, // 234B000045014545 4B + /*59*/ 0x00,0x42,0x44,0x5E,0xF7,0xFF,0x12,0xE0, // 224C000045014545 4C + /*60*/ 0x01,0x45,0x42,0x5E,0xF7,0xFF,0x12,0xE0, // 224E000045014545 4E + /*61*/ 0x02,0x47,0x41,0x5D,0xF7,0xFF,0x12,0xE0, // 234F000045014545 4F + /*62*/ 0x04,0x7E,0x7C,0xAE,0xF7,0xFF,0x12,0xE0, // 5214000045014545 52 + /*63*/ 0x00,0x57,0x53,0x2B,0xF7,0xFF,0x12,0xE0, // 553D000045014545 55 + }; + memcpy(c.d.asBytes, csns1, sizeof(c.d.asBytes)); - } + SendCommand(&c); + if (!WaitForResponseTimeout(CMD_ACK, &resp, -1)) { + PrintAndLog("Command timed out"); + return 0; + } - SendCommand(&c); + uint8_t num_mac_responses_1 = resp.arg[1]; + PrintAndLog("Mac responses, first part : %d MACs obtained (should be 63)", num_mac_responses_1); - /*UsbCommand * resp = WaitForResponseTimeout(CMD_ACK, 1500); - if (resp != NULL) { - uint8_t isOK = resp->arg[0] & 0xff; - PrintAndLog("isOk:%02x", isOK); - } else { - PrintAndLog("Command execute timeout"); - }*/ + UsbCommand c2 = {CMD_SIMULATE_TAG_ICLASS, {simType,63}}; + UsbCommand resp2 = {0}; + uint8_t csns2[] ={ + /*64*/ 0x04,0x3C,0x3A,0x74,0xF7,0xFF,0x12,0xE0, // 0C56000045014545 56 + /*65*/ 0x00,0x24,0x2E,0xA8,0xF7,0xFF,0x12,0xE0, // 5862000045014545 58 + /*66*/ 0x00,0x29,0x2D,0xA5,0xF7,0xFF,0x12,0xE0, // 5B63000045014545 5B + /*67*/ 0x00,0x00,0x02,0x24,0xF7,0xFF,0x12,0xE0, // 5C0E000045014545 5C + /*68*/ 0x01,0x29,0x2E,0xA2,0xF7,0xFF,0x12,0xE0, // 5E62000045014545 5E + /*69*/ 0x02,0x2B,0x2D,0xA1,0xF7,0xFF,0x12,0xE0, // 5F63000045014545 5F + /*70*/ 0x02,0x2E,0x2E,0x9C,0xF7,0xFF,0x12,0xE0, // 6462000045014545 64 + /*71*/ 0x02,0x0A,0x02,0x18,0xF7,0xFF,0x12,0xE0, // 680E000045014545 68 + /*72*/ 0x00,0x03,0x07,0x17,0xF7,0xFF,0x12,0xE0, // 6909000045014545 69 + /*73*/ 0x00,0x21,0x25,0xBD,0xF7,0xFF,0x12,0xE0, // 436B000045014545 6B + /*74*/ 0x02,0x27,0x21,0xBD,0xF7,0xFF,0x12,0xE0, // 436F000045014545 6F + /*75*/ 0x04,0x07,0x07,0x0F,0xF7,0xFF,0x12,0xE0, // 7109000045014545 71 + /*76*/ 0x00,0x04,0x0E,0x08,0xF7,0xFF,0x12,0xE0, // 7802000045014545 78 + /*77*/ 0x00,0x33,0x37,0x87,0xF7,0xFF,0x12,0xE0, // 7959000045014545 79 + /*78*/ 0x00,0x09,0x0D,0x05,0xF7,0xFF,0x12,0xE0, // 7B03000045014545 7B + /*79*/ 0x01,0x09,0x0E,0x02,0xF7,0xFF,0x12,0xE0, // 7E02000045014545 7E + /*80*/ 0x02,0x0B,0x0D,0x01,0xF7,0xFF,0x12,0xE0, // 7F03000045014545 7F + /*81*/ 0x00,0x34,0x3E,0x78,0xF7,0xFF,0x12,0xE0, // 0852000045014545 08 + /*82*/ 0x04,0x66,0x64,0xF6,0xF7,0xFF,0x12,0xE0, // 0A2C000045014545 0A + /*83*/ 0x00,0x3F,0x3B,0x73,0xF7,0xFF,0x12,0xE0, // 0D55000045014545 0D + /*84*/ 0x03,0x3B,0x3E,0x6E,0xF7,0xFF,0x12,0xE0, // 1252000045014545 12 + /*85*/ 0x00,0x11,0x15,0xED,0xF7,0xFF,0x12,0xE0, // 137B000045014545 13 + /*86*/ 0x00,0x6E,0x68,0xEA,0xF7,0xFF,0x12,0xE0, // 1628000045014545 16 + /*87*/ 0x00,0x6D,0x69,0xE9,0xF7,0xFF,0x12,0xE0, // 1727000045014545 17 + /*88*/ 0x00,0x6A,0x6C,0xE6,0xF7,0xFF,0x12,0xE0, // 1A24000045014545 1A + /*89*/ 0x00,0x40,0x42,0x64,0xF7,0xFF,0x12,0xE0, // 1C4E000045014545 1C + /*90*/ 0x00,0x77,0x73,0xCB,0xF7,0xFF,0x12,0xE0, // 351D000045014545 1D + /*91*/ 0x06,0x6E,0x72,0xD0,0xF7,0xFF,0x12,0xE0, // 301E000045014545 30 + /*92*/ 0x00,0x1B,0x1F,0xCF,0xF7,0xFF,0x12,0xE0, // 3171000045014545 31 + /*93*/ 0x01,0x75,0x72,0xCE,0xF7,0xFF,0x12,0xE0, // 321E000045014545 32 + /*94*/ 0x00,0x71,0x75,0xCD,0xF7,0xFF,0x12,0xE0, // 331B000045014545 33 + /*95*/ 0x00,0x48,0x4A,0x4C,0xF7,0xFF,0x12,0xE0, // 3446000045014545 34 + /*96*/ 0x00,0x4E,0x48,0x4A,0xF7,0xFF,0x12,0xE0, // 3648000045014545 36 + /*97*/ 0x00,0x4D,0x49,0x49,0xF7,0xFF,0x12,0xE0, // 3747000045014545 37 + /*98*/ 0x00,0x4A,0x4C,0x46,0xF7,0xFF,0x12,0xE0, // 3A44000045014545 3A + /*99*/ 0x00,0x20,0x22,0xC4,0xF7,0xFF,0x12,0xE0, // 3C6E000045014545 3C + /*100*/ 0x00,0x1C,0x66,0x40,0xF7,0xFF,0x12,0xE0, // 402A000045014545 40 + /*101*/ 0x06,0x4E,0x52,0x30,0xF7,0xFF,0x12,0xE0, // 503E000045014545 50 + /*102*/ 0x00,0x7B,0x7F,0xAF,0xF7,0xFF,0x12,0xE0, // 5111000045014545 51 + /*103*/ 0x00,0x51,0x55,0x2D,0xF7,0xFF,0x12,0xE0, // 533B000045014545 53 + /*104*/ 0x00,0x28,0x2A,0xAC,0xF7,0xFF,0x12,0xE0, // 5466000045014545 54 + /*105*/ 0x02,0x53,0x55,0x29,0xF7,0xFF,0x12,0xE0, // 573B000045014545 57 + /*106*/ 0x00,0x2A,0x2C,0xA6,0xF7,0xFF,0x12,0xE0, // 5A64000045014545 5A + /*107*/ 0x00,0x7C,0x46,0x20,0xF7,0xFF,0x12,0xE0, // 604A000045014545 60 + /*108*/ 0x02,0x03,0x05,0x19,0xF7,0xFF,0x12,0xE0, // 670B000045014545 67 + /*109*/ 0x01,0x2F,0x34,0x90,0xF7,0xFF,0x12,0xE0, // 705C000045014545 70 + /*110*/ 0x00,0x32,0x34,0x8E,0xF7,0xFF,0x12,0xE0, // 725C000045014545 72 + /*111*/ 0x00,0x31,0x35,0x8D,0xF7,0xFF,0x12,0xE0, // 735B000045014545 73 + /*112*/ 0x00,0x08,0x0A,0x0C,0xF7,0xFF,0x12,0xE0, // 7406000045014545 74 + /*113*/ 0x03,0x37,0x32,0x8A,0xF7,0xFF,0x12,0xE0, // 765E000045014545 76 + /*114*/ 0x00,0x0D,0x09,0x09,0xF7,0xFF,0x12,0xE0, // 7707000045014545 77 + /*115*/ 0x00,0x0A,0x0C,0x06,0xF7,0xFF,0x12,0xE0, // 7A04000045014545 7A + /*116*/ 0x00,0x60,0x62,0x04,0xF7,0xFF,0x12,0xE0, // 7C2E000045014545 7C + /*117*/ 0x00,0x07,0x03,0x1B,0xF7,0xFF,0x12,0xE0, // 650D000045014545 65 + /*118*/ 0x00,0x0C,0x16,0xF0,0xF7,0xFF,0x12,0xE0, // 107A000045014545 10 + /*119*/ 0x00,0x6F,0x6B,0xE3,0xF7,0xFF,0x12,0xE0, // 1D25000045014545 25 + /*120*/ 0x00,0x2F,0x2B,0xA3,0xF7,0xFF,0x12,0xE0, // 5D65000045014545 5D + /*121*/ 0x00,0x47,0x43,0x5B,0xF7,0xFF,0x12,0xE0, // 254D000045014545 4D + /*122*/ 0x00,0x37,0x33,0x8B,0xF7,0xFF,0x12,0xE0, // 755D000045014545 75 + /*123*/ 0x00,0x1F,0x1B,0xD3,0xF7,0xFF,0x12,0xE0, // 2D75000045014545 2D + /*124*/ 0x00,0x67,0x63,0xFB,0xF7,0xFF,0x12,0xE0, // 052D000045014545 05 + /*125*/ 0x00,0x0F,0x0B,0x03,0xF7,0xFF,0x12,0xE0, // 7D05000045014545 7D + /*126*/ 0x00,0x17,0x13,0xEB,0xF7,0xFF,0x12,0xE0, // 157D000045014545 15 + }; + + memcpy(c2.d.asBytes, csns2, sizeof(c2.d.asBytes)); + + SendCommand(&c); + if (!WaitForResponseTimeout(CMD_ACK, &resp2, -1)) { + PrintAndLog("Command timed out"); + return 0; + } + uint8_t num_mac_responses_2 = resp2.arg[1]; + PrintAndLog("Mac responses, second part : %d MACs obtained (should be 63)", num_mac_responses_2); + size_t datalen = 126 * 16; + /* + * Now, time to dump to file. We'll use this format: + * <8-byte CSN><8-byte MAC>.... + * So, it should wind up as + * (63+63) * (8 + 8 ) bytes. + **/ + void* macs = malloc(datalen); + uint8_t i = 0; + while(i < 63) + { + memcpy(macs+i*16, csns1+i*8,8); + memcpy(macs+i*16+8, resp.d.asBytes+i*8,8); + + memcpy(macs+i*16+63*16, csns2+i*8,8); + memcpy(macs+i*16+8+63*16, resp2.d.asBytes+i*8,8); + i++; + } + /** Now, save to dumpfile **/ + saveFile("iclass_mac_attack", "bin", macs,datalen); + free(macs); + }else + { + UsbCommand c = {CMD_SIMULATE_TAG_ICLASS, {simType,numberOfCSNs}}; + memcpy(c.d.asBytes, CSN, 8); + SendCommand(&c); + } return 0; } @@ -440,3 +575,53 @@ int CmdHelp(const char *Cmd) CmdsHelp(CommandTable); return 0; } + +/** + * @brief checks if a file exists + * @param filename + * @return + */ +int fileExists(const char *filename) { + struct stat st; + int result = stat(filename, &st); + return result == 0; +} +/** + * @brief Utility function to save data to a file. This method takes a preferred name, but if that + * file already exists, it tries with another name until it finds something suitable. + * E.g. dumpdata-15.txt + * @param preferredName + * @param suffix the file suffix. Leave out the ".". + * @param data The binary data to write to the file + * @param datalen the length of the data + * @return + */ +int saveFile(const char *preferredName, const char *suffix, const void* data, size_t datalen) +{ + FILE *f = fopen(preferredName, "wb"); + int size = sizeof(char) * (strlen(preferredName)+strlen(suffix)+5); + char * fileName = malloc(size); + + memset(fileName,0,size); + int num = 1; + sprintf(fileName,"%s.%s", preferredName, suffix); + while(fileExists(fileName)) + { + sprintf(fileName,"%s-%d.%s", preferredName, num, suffix); + num++; + } + /* We should have a valid filename now, e.g. dumpdata-3.bin */ + + /*Opening file for writing in binary mode*/ + FILE *fileHandle=fopen(fileName,"wb"); + if(!f) { + PrintAndLog("Failed to write to file '%s'", fileName); + return 0; + } + fwrite(data, 1, datalen, fileHandle); + fclose(fileHandle); + PrintAndLog("Saved data to '%s'", fileName); + + free(fileName); + return 0; +} diff --git a/client/cmdhficlass.h b/client/cmdhficlass.h index c1bf60c79..98c79e4b2 100644 --- a/client/cmdhficlass.h +++ b/client/cmdhficlass.h @@ -18,5 +18,6 @@ int CmdHFiClassSnoop(const char *Cmd); int CmdHFiClassSim(const char *Cmd); int CmdHFiClassList(const char *Cmd); int CmdHFiClassReader(const char *Cmd); +int saveFile(const char *preferredName, const char *suffix, const void* data, size_t datalen); #endif From fecd8202a5ad638db4c1ba088842390e78ef52db Mon Sep 17 00:00:00 2001 From: penturalabs Date: Tue, 17 Jun 2014 10:55:37 +0100 Subject: [PATCH 21/49] implemented 'hf iclass dump xxxx', all you need is the magic key to dump contents of an iclass card --- armsrc/appmain.c | 5 +- armsrc/apps.h | 1 + armsrc/iclass.c | 228 ++++++++++++++++++++++++++++++++++++++++++- client/cmdhficlass.c | 205 +++++++++++++++++++++++++++++--------- include/usb_cmd.h | 4 +- 5 files changed, 392 insertions(+), 51 deletions(-) diff --git a/armsrc/appmain.c b/armsrc/appmain.c index 71952b12f..78605bda2 100644 --- a/armsrc/appmain.c +++ b/armsrc/appmain.c @@ -859,8 +859,11 @@ 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_ISO14443A_GETPUBLIC: + IClass_iso14443A_GetPublic(c->arg[0]); + break; #endif case CMD_SIMULATE_TAG_HF_LISTEN: diff --git a/armsrc/apps.h b/armsrc/apps.h index 12aedcc2f..237c52917 100644 --- a/armsrc/apps.h +++ b/armsrc/apps.h @@ -191,6 +191,7 @@ void RAMFUNC SnoopIClass(void); void SimulateIClass(uint8_t arg0, uint8_t *datain); void ReaderIClass(uint8_t arg0); void ReaderIClass_Replay(uint8_t arg0,uint8_t *MAC); +void IClass_iso14443A_GetPublic(uint8_t arg0); // hitag2.h void SnoopHitag(uint32_t type); diff --git a/armsrc/iclass.c b/armsrc/iclass.c index c827ed51d..9971b670c 100644 --- a/armsrc/iclass.c +++ b/armsrc/iclass.c @@ -41,6 +41,7 @@ #include "util.h" #include "string.h" #include "common.h" +#include "cmd.h" // Needed for CRC in emulation mode; // same construction as in ISO 14443; // different initial value (CRC_ICLASS) @@ -1485,7 +1486,7 @@ void ReaderIClass_Replay(uint8_t arg0, uint8_t *MAC) { uint8_t check[] = { 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; uint8_t read[] = { 0x0c, 0x00, 0x00, 0x00 }; - uint16_t crc = 0; + uint16_t crc = 0; uint8_t cardsize=0; bool read_success=false; uint8_t mem=0; @@ -1501,7 +1502,7 @@ void ReaderIClass_Replay(uint8_t arg0, uint8_t *MAC) { uint8_t* resp = (((uint8_t *)BigBuf) + 3560); // was 3560 - tied to other size changes // Reset trace buffer - memset(trace, 0x44, RECV_CMD_OFFSET); + memset(trace, 0x44, RECV_CMD_OFFSET); traceLen = 0; // Setup SSC @@ -1620,4 +1621,227 @@ void ReaderIClass_Replay(uint8_t arg0, uint8_t *MAC) { LED_A_OFF(); } +//1. Create Method to Read sectors/blocks 0,1,2 and Send to client +void IClass_iso14443A_GetPublic(uint8_t arg0) { + 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 read[] = { 0x0c, 0x00, 0x00, 0x00 }; + uint8_t card_data[24]={0}; + + //bool read_success=false; + uint8_t* resp = (((uint8_t *)BigBuf) + 3560); // was 3560 - tied to other size changes + // Reset trace buffer + memset(trace, 0x44, RECV_CMD_OFFSET); + traceLen = 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); + + SetAdcMuxFor(GPIO_MUXSEL_HIPKD); + + // 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); + + LED_A_ON(); + + for(int i=0;i<1;i++) { + + if(traceLen > TRACE_SIZE) { + DbpString("Trace full"); + break; + } + + 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]); + } + memcpy(card_data,resp,8); + // 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]); + } + memcpy(card_data+8,resp,8); + //prep to read config block + /* read card configuration block + while(!read_success){ + uint8_t sector_config=0x01; + memcpy(read+1,§or_config,1); + ReaderTransmitIClass(read, sizeof(read)); + 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]); + read_success=true; + memcpy(card_data+16,resp,8); + } + }*/ + } + } + WDT_HIT(); + } + //Dbprintf("DEBUG: %02x%02x%02x%02x%02x%02x%02x%02x",card_data[0],card_data[1],card_data[2],card_data[3],card_data[4],card_data[5],card_data[6],card_data[7]); + //Dbprintf("DEBUG: %02x%02x%02x%02x%02x%02x%02x%02x",card_data[8],card_data[9],card_data[10],card_data[11],card_data[12],card_data[13],card_data[14],card_data[15]); + LED_A_OFF(); + LED_B_ON(); + //send data back to the client + cmd_send(CMD_ACK,0,0,0,card_data,16); + LED_B_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); // was 3560 - tied to other size changes + + // Reset trace buffer + memset(trace, 0x44, RECV_CMD_OFFSET); + traceLen = 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); + + SetAdcMuxFor(GPIO_MUXSEL_HIPKD); + + // 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); + + LED_A_ON(); + + for(int i=0;i<1;i++) { + + if(traceLen > TRACE_SIZE) { + DbpString("Trace full"); + break; + } + + 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; + } + }// + } + WDT_HIT(); + } + + LED_A_OFF(); +}*/ diff --git a/client/cmdhficlass.c b/client/cmdhficlass.c index 389fb5c1c..e68fdc4f1 100644 --- a/client/cmdhficlass.c +++ b/client/cmdhficlass.c @@ -1,6 +1,7 @@ //----------------------------------------------------------------------------- // Copyright (C) 2010 iZsh , Hagen Fritsch // Copyright (C) 2011 Gerhard de Koning Gans +// Copyright (C) 2014 Midnitesnake & Andy Davies // // 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 @@ -164,11 +165,6 @@ int CmdHFiClassList(const char *Cmd) return 0; } -/*void iso14a_set_timeout(uint32_t timeout) { - UsbCommand c = {CMD_READER_ISO_14443a, {ISO14A_SET_TIMEOUT, 0, timeout}}; - SendCommand(&c); -}*/ - int CmdHFiClassSnoop(const char *Cmd) { UsbCommand c = {CMD_SNOOP_ICLASS}; @@ -198,14 +194,6 @@ int CmdHFiClassSim(const char *Cmd) memcpy(c.d.asBytes, CSN, 8); SendCommand(&c); - /*UsbCommand * resp = WaitForResponseTimeout(CMD_ACK, 1500); - if (resp != NULL) { - uint8_t isOK = resp->arg[0] & 0xff; - PrintAndLog("isOk:%02x", isOK); - } else { - PrintAndLog("Command execute timeout"); - }*/ - return 0; } @@ -258,75 +246,198 @@ int CmdHFiClassReader_Dump(const char *Cmd) 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 CC_temp[8]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; uint8_t result[8]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; uint8_t div_key[8]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; des_context ctx_enc; uint64_t crypted_id=0; - if (strlen(Cmd)<3) { - PrintAndLog("Usage: hf iclass dump "); - PrintAndLog(" sample: hf iclass dump 0011223344556677 aabbccddeeffgghh FFFFFFFFFFFFFFFF"); + if (strlen(Cmd)<1) + { + //PrintAndLog("Usage: hf iclass dump "); + //PrintAndLog(" sample: hf iclass dump 0011223344556677 aabbccddeeffgghh FFFFFFFFFFFFFFFF"); + PrintAndLog("Usage: hf iclass dump "); + PrintAndLog(" sample: hf iclass dump 0011223344556677"); return 0; } - if (param_gethex(Cmd, 0, KEY, 16)) { + if (param_gethex(Cmd, 0, KEY, 16)) + { PrintAndLog("KEY must include 16 HEX symbols"); return 1; } - if (param_gethex(Cmd, 1, CSN, 16)) { + /*if (param_gethex(Cmd, 1, CSN, 16)) + { PrintAndLog("CSN must include 16 HEX symbols"); return 1; } - if (param_gethex(Cmd, 2, CC_temp, 16)) { + if (param_gethex(Cmd, 2, CC_temp, 16)) + { PrintAndLog("CC must include 16 HEX symbols"); return 1; + }*/ + + UsbCommand c = {CMD_ICLASS_ISO14443A_GETPUBLIC, {0}}; + //memcpy(c.d.asBytes, MAC, 4); + SendCommand(&c); + + UsbCommand resp; + if (WaitForResponseTimeout(CMD_ACK,&resp,4500)) { + uint8_t isOK = resp.arg[0] & 0xff; + uint8_t * data = resp.d.asBytes; + + 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"); } - memcpy(CCNR,CC_temp,8); + + //memcpy(CCNR,CC_temp,8); des_setkey_enc( &ctx_enc, KEY); des_crypt_ecb(&ctx_enc,CSN,result); PrintAndLog("DES Key: %s",sprint_hex(result,8)); - uint64_t newz=0; - crypted_id = bytes_to_num(result,8); - uint64_t x = (crypted_id & 0xFFFF000000000000 ); - pushbackSixBitByte(&newz, getSixBitByte(crypted_id,0),7); - pushbackSixBitByte(&newz, getSixBitByte(crypted_id,1),6); - pushbackSixBitByte(&newz, getSixBitByte(crypted_id,2),5); - pushbackSixBitByte(&newz, getSixBitByte(crypted_id,3),4); - pushbackSixBitByte(&newz, getSixBitByte(crypted_id,4),3); - pushbackSixBitByte(&newz, getSixBitByte(crypted_id,5),2); - pushbackSixBitByte(&newz, getSixBitByte(crypted_id,6),1); - pushbackSixBitByte(&newz, getSixBitByte(crypted_id,7),0); - newz|= x; - crypted_id=newz; - num_to_bytes(crypted_id,8,result); + uint64_t newz=0; + crypted_id = bytes_to_num(result,8); + uint64_t x = (crypted_id & 0xFFFF000000000000 ); + pushbackSixBitByte(&newz, getSixBitByte(crypted_id,0),7); + pushbackSixBitByte(&newz, getSixBitByte(crypted_id,1),6); + pushbackSixBitByte(&newz, getSixBitByte(crypted_id,2),5); + pushbackSixBitByte(&newz, getSixBitByte(crypted_id,3),4); + pushbackSixBitByte(&newz, getSixBitByte(crypted_id,4),3); + pushbackSixBitByte(&newz, getSixBitByte(crypted_id,5),2); + pushbackSixBitByte(&newz, getSixBitByte(crypted_id,6),1); + pushbackSixBitByte(&newz, getSixBitByte(crypted_id,7),0); + newz|= x; + crypted_id=newz; + num_to_bytes(crypted_id,8,result); PrintAndLog("DESr Key: %s",sprint_hex(result,8)); - //crypted_id = bytes_to_num(result,8); - //memset(result,0,8); hash0(crypted_id,div_key); - //memcpy(div_key,result,8); PrintAndLog("Div Key: %s",sprint_hex(div_key,8)); calc_iclass_mac(CCNR,12,div_key,MAC); - UsbCommand c = {CMD_READER_ICLASS_REPLAY, {readerType}}; - memcpy(c.d.asBytes, MAC, 4); + UsbCommand d = {CMD_READER_ICLASS_REPLAY, {readerType}}; + memcpy(d.d.asBytes, MAC, 4); + SendCommand(&d); + + 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 CC_temp[8]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; + uint8_t result[8]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; + uint8_t div_key[8]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; + des_context ctx_enc; + uint64_t crypted_id=0; + uint8_t blockNo=0; + uint8_t bldata[8]={0}; + + if (strlen(Cmd)<3) + { + PrintAndLog("Usage: hf iclass write "); + PrintAndLog(" sample: hf iclass write 0011223344556677 10 AAAAAAAAAAAAAAAA"); + return 0; + } + + if (param_gethex(Cmd, 0, KEY, 16)) + { + PrintAndLog("KEY must include 16 HEX symbols"); + return 1; + } + + blockNo = param_get8(Cmd, 1); + if (blockNo>32) + { + PrintAndLog("Error: Maximum number of blocks is 32 for iClass 2K Cards!"); + return 1; + } + if (param_gethex(Cmd, 2, bldata, 8)) + { + PrintAndLog("Block data must include 8 HEX symbols"); + return 1; + } + + UsbCommand c = {CMD_ICLASS_ISO14443A_GETPUBLIC, {0}}; + //memcpy(c.d.asBytes, MAC, 4); + SendCommand(&c); + + UsbCommand resp; + if (WaitForResponseTimeout(CMD_ACK,&resp,4500)) { + uint8_t isOK = resp.arg[0] & 0xff; + uint8_t * data = resp.d.asBytes; + + 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"); + } + + des_setkey_enc( &ctx_enc, KEY); + des_crypt_ecb(&ctx_enc,CSN,result); + PrintAndLog("DES Key: %s",sprint_hex(result,8)); + uint64_t newz=0; + crypted_id = bytes_to_num(result,8); + uint64_t x = (crypted_id & 0xFFFF000000000000 ); + pushbackSixBitByte(&newz, getSixBitByte(crypted_id,0),7); + pushbackSixBitByte(&newz, getSixBitByte(crypted_id,1),6); + pushbackSixBitByte(&newz, getSixBitByte(crypted_id,2),5); + pushbackSixBitByte(&newz, getSixBitByte(crypted_id,3),4); + pushbackSixBitByte(&newz, getSixBitByte(crypted_id,4),3); + pushbackSixBitByte(&newz, getSixBitByte(crypted_id,5),2); + pushbackSixBitByte(&newz, getSixBitByte(crypted_id,6),1); + pushbackSixBitByte(&newz, getSixBitByte(crypted_id,7),0); + newz|= x; + crypted_id=newz; + num_to_bytes(crypted_id,8,result); + PrintAndLog("DESr Key: %s",sprint_hex(result,8)); + hash0(crypted_id,div_key); + PrintAndLog("Div Key: %s",sprint_hex(div_key,8)); + calc_iclass_mac(CCNR,12,div_key,MAC); + + UsbCommand c = {CMD_ICLASS_ISO14443A_WRITE, {readerType,blockNo}}; + memcpy(c.d.asBytes, bldata, 8); + memcpy(c.d.asBytes+8, MAC, 4); SendCommand(&c); + UsbCommand resp; + if (WaitForResponseTimeout(CMD_ACK,&resp,1500)) { + uint8_t isOK = resp.arg[0] & 0xff; + uint8_t * data = resp.d.asBytes; + + if (isOK) + PrintAndLog("isOk:%02x data:%s", isOK, sprint_hex(data, 4)); + else + PrintAndLog("isOk:%02x", isOK); + } else { + PrintAndLog("Command execute timeout"); + } return 0; } static command_t CommandTable[] = { - {"help", CmdHelp, 1, "This help"}, - {"list", CmdHFiClassList, 0, "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"}, + {"help", CmdHelp, 1, "This help"}, + {"list", CmdHFiClassList, 0, "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"}, {NULL, NULL, 0, NULL} }; diff --git a/include/usb_cmd.h b/include/usb_cmd.h index cd5a8b752..00b9b586c 100644 --- a/include/usb_cmd.h +++ b/include/usb_cmd.h @@ -116,7 +116,9 @@ typedef struct { #define CMD_SNOOP_ICLASS 0x0392 #define CMD_SIMULATE_TAG_ICLASS 0x0393 #define CMD_READER_ICLASS 0x0394 -#define CMD_READER_ICLASS_REPLAY 0x0395 +#define CMD_READER_ICLASS_REPLAY 0x0395 +#define CMD_ICLASS_ISO14443A_GETPUBLIC 0x0396 +#define CMD_ICLASS_ISO14443A_WRITE 0x0397 // For measurements of the antenna tuning #define CMD_MEASURE_ANTENNA_TUNING 0x0400 From 7cc204bff881ce1d1833d8e93469f6bbba80c70e Mon Sep 17 00:00:00 2001 From: iZsh Date: Fri, 20 Jun 2014 01:02:59 +0200 Subject: [PATCH 22/49] THIS REQUIRES A BOOTROM UPDATE!! To save FPGA area, split the LF and HF bitstreams and load them on-demand. --- .gitignore | 6 +- armsrc/Makefile | 9 +- armsrc/appmain.c | 9 +- armsrc/apps.h | 28 ++- armsrc/fpgaloader.c | 45 +++- armsrc/hitag2.c | 3 + armsrc/iclass.c | 6 + armsrc/iso14443.c | 4 + armsrc/iso14443a.c | 1 + armsrc/iso15693.c | 5 + armsrc/ldscript | 3 +- armsrc/legicrf.c | 2 + armsrc/lfops.c | 12 + armsrc/mifarecmd.c | 506 ++++++++++++++++++++--------------------- client/Makefile | 6 +- common/ldscript.common | 4 +- fpga/Makefile | 40 ++-- fpga/clk_divider.v | 25 ++ fpga/fpga.bit | Bin 42172 -> 0 bytes fpga/fpga.v | 220 ------------------ fpga/fpga_hf.bit | Bin 0 -> 42175 bytes fpga/fpga_hf.v | 150 ++++++++++++ fpga/fpga_lf.bit | Bin 0 -> 42175 bytes fpga/fpga_lf.v | 125 ++++++++++ fpga/go.bat | 52 ++++- fpga/lo_edge_detect.v | 53 +---- fpga/lo_passthru.v | 44 +--- fpga/lo_read.v | 67 ++---- fpga/xst.scr | 1 - fpga/xst_hf.scr | 1 + fpga/xst_lf.scr | 1 + include/proxmark3.h | 4 + 32 files changed, 771 insertions(+), 661 deletions(-) create mode 100644 fpga/clk_divider.v delete mode 100644 fpga/fpga.bit delete mode 100644 fpga/fpga.v create mode 100644 fpga/fpga_hf.bit create mode 100644 fpga/fpga_hf.v create mode 100644 fpga/fpga_lf.bit create mode 100644 fpga/fpga_lf.v delete mode 100644 fpga/xst.scr create mode 100644 fpga/xst_hf.scr create mode 100644 fpga/xst_lf.scr diff --git a/.gitignore b/.gitignore index 3f6347a0d..3b258b3be 100644 --- a/.gitignore +++ b/.gitignore @@ -19,11 +19,13 @@ lua luac fpga/* -!fpga/fpga.bit +!fpga/fpga_lf.bit +!fpga/fpga_hf.bit !fpga/*.v !fpga/Makefile !fpga/fpga.ucf -!fpga/xst.scr +!fpga/xst_lf.scr +!fpga/xst_hf.scr !fpga/go.bat !fpga/sim.tcl diff --git a/armsrc/Makefile b/armsrc/Makefile index 2e5350bb3..e10c10019 100644 --- a/armsrc/Makefile +++ b/armsrc/Makefile @@ -52,10 +52,13 @@ OBJS = $(OBJDIR)/osimage.s19 $(OBJDIR)/fpgaimage.s19 all: $(OBJS) -$(OBJDIR)/fpga.o: fpga.bit - $(OBJCOPY) -O elf32-littlearm -I binary -B arm --redefine-sym _binary____fpga_fpga_bit_start=_binary_fpga_bit_start --redefine-sym _binary____fpga_fpga_bit_end=_binary_fpga_bit_end --prefix-sections=fpga_bit $^ $@ +$(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 $^ $@ -$(OBJDIR)/fullimage.elf: $(VERSIONOBJ) $(OBJDIR)/fpga.o $(THUMBOBJ) $(ARMOBJ) +$(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)/fullimage.elf: $(VERSIONOBJ) $(OBJDIR)/fpga_lf.o $(OBJDIR)/fpga_hf.o $(THUMBOBJ) $(ARMOBJ) $(CC) $(LDFLAGS) -Wl,-T,ldscript,-Map,$(patsubst %.elf,%.map,$@) -o $@ $^ $(LIBS) $(OBJDIR)/fpgaimage.elf: $(OBJDIR)/fullimage.elf diff --git a/armsrc/appmain.c b/armsrc/appmain.c index b6c322008..b7bc87e70 100644 --- a/armsrc/appmain.c +++ b/armsrc/appmain.c @@ -214,6 +214,7 @@ void MeasureAntennaTuning(void) * ( hopefully around 95 if it is tuned to 125kHz!) */ + FpgaDownloadAndGo(FPGA_BITSTREAM_LF); FpgaWriteConfWord(FPGA_MAJOR_MODE_LF_READER); for (i=255; i>19; i--) { WDT_HIT(); @@ -236,6 +237,7 @@ void MeasureAntennaTuning(void) LED_A_ON(); // Let the FPGA drive the high-frequency antenna around 13.56 MHz. + FpgaDownloadAndGo(FPGA_BITSTREAM_HF); FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_READER_RX_XCORR); SpinDelay(20); // Vref = 3300mV, and an 10:1 voltage divider on the input @@ -264,6 +266,7 @@ void MeasureAntennaTuningHf(void) for (;;) { // Let the FPGA drive the high-frequency antenna around 13.56 MHz. + FpgaDownloadAndGo(FPGA_BITSTREAM_HF); FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_READER_RX_XCORR); SpinDelay(20); // Vref = 3300mV, and an 10:1 voltage divider on the input @@ -286,6 +289,7 @@ void SimulateTagHfListen(void) // 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. @@ -365,6 +369,7 @@ void SendVersion(void) void SamyRun() { DbpString("Stand-alone mode! No PC necessary."); + FpgaDownloadAndGo(FPGA_BITSTREAM_LF); // 3 possible options? no just 2 for now #define OPTS 2 @@ -923,6 +928,7 @@ void UsbPacketReceived(uint8_t *packet, int len) break; case CMD_SET_LF_DIVISOR: + FpgaDownloadAndGo(FPGA_BITSTREAM_LF); FpgaSendCommand(FPGA_CMD_SET_DIVISOR, c->arg[0]); break; @@ -1017,7 +1023,8 @@ void __attribute__((noreturn)) AppMain(void) AT91C_BASE_SSC->SSC_CR = AT91C_SSC_SWRST; // Load the FPGA image, which we have stored in our flash. - FpgaDownloadAndGo(); + // (the HF version by default) + FpgaDownloadAndGo(FPGA_BITSTREAM_HF); StartTickCount(); diff --git a/armsrc/apps.h b/armsrc/apps.h index 92228b8db..76d1247a9 100644 --- a/armsrc/apps.h +++ b/armsrc/apps.h @@ -67,7 +67,8 @@ extern uint32_t BigBuf[]; /// fpga.h void FpgaSendCommand(uint16_t cmd, uint16_t v); void FpgaWriteConfWord(uint8_t v); -void FpgaDownloadAndGo(void); +void FpgaDownloadAndGo(int bitstream_version); +int FpgaGatherBitstreamVersion(); void FpgaGatherVersion(char *dst, int len); void FpgaSetupSsc(void); void SetupSpi(int mode); @@ -77,17 +78,20 @@ bool FpgaSetupSscDma(uint8_t *buf, int len); 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_CONFREG (1<<12) +#define FPGA_CMD_SET_DIVISOR (2<<12) // Definitions for the FPGA configuration word. -#define FPGA_MAJOR_MODE_LF_READER (0<<5) +// LF +#define FPGA_MAJOR_MODE_LF_READER (0<<5) #define FPGA_MAJOR_MODE_LF_EDGE_DETECT (1<<5) -#define FPGA_MAJOR_MODE_HF_READER_TX (2<<5) -#define FPGA_MAJOR_MODE_HF_READER_RX_XCORR (3<<5) -#define FPGA_MAJOR_MODE_HF_SIMULATOR (4<<5) -#define FPGA_MAJOR_MODE_HF_ISO14443A (5<<5) -#define FPGA_MAJOR_MODE_LF_PASSTHRU (6<<5) -#define FPGA_MAJOR_MODE_OFF (7<<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_EDGE_DETECT #define FPGA_LF_EDGE_DETECT_READER_FIELD (1<<0) // Options for the HF reader, tx to tag @@ -95,14 +99,14 @@ void SetAdcMuxFor(uint32_t whichGpio); // 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) +#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) // Options for ISO14443A -#define FPGA_HF_ISO14443A_SNIFFER (0<<0) +#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) diff --git a/armsrc/fpgaloader.c b/armsrc/fpgaloader.c index d63310a35..2f996bc57 100644 --- a/armsrc/fpgaloader.c +++ b/armsrc/fpgaloader.c @@ -252,7 +252,7 @@ static void DownloadFPGA(const char *FpgaImage, int FpgaImageLen, int byterevers static char *bitparse_headers_start; static char *bitparse_bitstream_end; -static int bitparse_initialized; +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 @@ -322,12 +322,28 @@ int bitparse_find_section(char section_name, char **section_start, unsigned int // 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_bit_start, _binary_fpga_bit_end; -void FpgaDownloadAndGo(void) +extern char _binary_fpga_lf_bit_start, _binary_fpga_lf_bit_end; +extern char _binary_fpga_hf_bit_start, _binary_fpga_hf_bit_end; +void FpgaDownloadAndGo(int bitstream_version) { + void *bit_start; + void *bit_end; + + // check whether or not the bitstream is already loaded + if (FpgaGatherBitstreamVersion() == 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 + return; /* Check for the new flash image format: Should have the .bit file at &_binary_fpga_bit_start */ - if(bitparse_init(&_binary_fpga_bit_start, &_binary_fpga_bit_end)) { + if(bitparse_init(bit_start, bit_end)) { /* Successfully initialized the .bit parser. Find the 'e' section and * send its contents to the FPGA. */ @@ -351,6 +367,17 @@ void FpgaDownloadAndGo(void) DownloadFPGA((char*)0x102000, 10524*4, 1); } +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) { char *fpga_info; @@ -359,13 +386,15 @@ void FpgaGatherVersion(char *dst, int len) if(!bitparse_find_section('e', &fpga_info, &fpga_info_len)) { strncat(dst, "FPGA image: legacy image without version information", len-1); } else { - strncat(dst, "FPGA image built", len-1); /* USB packets only have 48 bytes data payload, so be terse */ -#if 0 if(bitparse_find_section('a', &fpga_info, &fpga_info_len) && fpga_info[fpga_info_len-1] == 0 ) { - strncat(dst, " from ", len-1); - strncat(dst, fpga_info, len-1); + 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); } + 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); diff --git a/armsrc/hitag2.c b/armsrc/hitag2.c index 1a0e9b56a..9181a62ea 100644 --- a/armsrc/hitag2.c +++ b/armsrc/hitag2.c @@ -743,6 +743,7 @@ void SnoopHitag(uint32_t type) { // 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); FpgaSendCommand(FPGA_CMD_SET_DIVISOR, 95); //125Khz SetAdcMuxFor(GPIO_MUXSEL_LOPKD); @@ -966,6 +967,7 @@ 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); FpgaSendCommand(FPGA_CMD_SET_DIVISOR, 95); //125Khz SetAdcMuxFor(GPIO_MUXSEL_LOPKD); @@ -1124,6 +1126,7 @@ void ReaderHitag(hitag_function htf, hitag_data* htd) { bool bStop; bool bQuitTraceFull = false; + FpgaDownloadAndGo(FPGA_BITSTREAM_LF); // Reset the return status bSuccessful = false; diff --git a/armsrc/iclass.c b/armsrc/iclass.c index 8d65b523b..9c5e8b2be 100644 --- a/armsrc/iclass.c +++ b/armsrc/iclass.c @@ -689,6 +689,8 @@ void RAMFUNC SnoopIClass(void) // into trace, along with its length and other annotations. //uint8_t *trace = (uint8_t *)BigBuf; + FpgaDownloadAndGo(FPGA_BITSTREAM_HF); + // reset traceLen to 0 iso14a_set_tracing(TRUE); iso14a_clear_trace(); @@ -995,6 +997,8 @@ void SimulateIClass(uint8_t arg0, uint8_t *datain) { uint8_t simType = arg0; + FpgaDownloadAndGo(FPGA_BITSTREAM_HF); + // Enable and clear the trace tracing = TRUE; traceLen = 0; @@ -1426,6 +1430,8 @@ void ReaderIClass(uint8_t arg0) { uint8_t* resp = (((uint8_t *)BigBuf) + 3560); // was 3560 - tied to other size changes + FpgaDownloadAndGo(FPGA_BITSTREAM_HF); + // Reset trace buffer memset(trace, 0x44, RECV_CMD_OFFSET); traceLen = 0; diff --git a/armsrc/iso14443.c b/armsrc/iso14443.c index 5e8eddd24..7a445bcb8 100644 --- a/armsrc/iso14443.c +++ b/armsrc/iso14443.c @@ -350,6 +350,7 @@ void SimulateIso14443Tag(void) int cmdsRecvd = 0; + FpgaDownloadAndGo(FPGA_BITSTREAM_HF); memset(receivedCmd, 0x44, 400); CodeIso14443bAsTag(response1, sizeof(response1)); @@ -867,6 +868,7 @@ void ReadSTMemoryIso14443(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(); @@ -1011,6 +1013,7 @@ void RAMFUNC SnoopIso14443(void) // response from the tag. int triggered = TRUE; + FpgaDownloadAndGo(FPGA_BITSTREAM_HF); // The command (reader -> tag) that we're working on receiving. uint8_t *receivedCmd = (uint8_t *)(BigBuf) + DEMOD_TRACE_SIZE; // The response (tag -> reader) that we're working on receiving. @@ -1196,6 +1199,7 @@ done: 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; diff --git a/armsrc/iso14443a.c b/armsrc/iso14443a.c index 9afe0788c..099e1d68e 100644 --- a/armsrc/iso14443a.c +++ b/armsrc/iso14443a.c @@ -1763,6 +1763,7 @@ int iso14443a_select_card(byte_t* uid_ptr, iso14a_card_select_t* p_hi14a_card, u } void iso14443a_setup(uint8_t fpga_minor_mode) { + FpgaDownloadAndGo(FPGA_BITSTREAM_HF); // Set up the synchronous serial port FpgaSetupSsc(); // connect Demodulated Signal to ADC: diff --git a/armsrc/iso15693.c b/armsrc/iso15693.c index 63e72c14a..ed7beb6fb 100644 --- a/armsrc/iso15693.c +++ b/armsrc/iso15693.c @@ -606,6 +606,7 @@ void AcquireRawAdcSamplesIso15693(void) int8_t prev = 0; + FpgaDownloadAndGo(FPGA_BITSTREAM_HF); BuildIdentifyRequest(); SetAdcMuxFor(GPIO_MUXSEL_HIPKD); @@ -687,6 +688,7 @@ void RecordRawAdcSamplesIso15693(void) int8_t prev = 0; + FpgaDownloadAndGo(FPGA_BITSTREAM_HF); // Setup SSC FpgaSetupSsc(); @@ -753,6 +755,7 @@ void Iso15693InitReader() { LED_C_OFF(); LED_D_OFF(); + FpgaDownloadAndGo(FPGA_BITSTREAM_HF); // Setup SSC // FpgaSetupSsc(); @@ -1015,6 +1018,7 @@ void ReaderIso15693(uint32_t parameter) // Blank arrays memset(BigBuf + 3660, 0, 300); + FpgaDownloadAndGo(FPGA_BITSTREAM_HF); // Setup SSC FpgaSetupSsc(); @@ -1165,6 +1169,7 @@ void SimTagIso15693(uint32_t parameter) // Blank arrays memset(answer1, 0, 100); + FpgaDownloadAndGo(FPGA_BITSTREAM_HF); // Setup SSC FpgaSetupSsc(); diff --git a/armsrc/ldscript b/armsrc/ldscript index dcb04bf09..d0be3b6a0 100644 --- a/armsrc/ldscript +++ b/armsrc/ldscript @@ -21,7 +21,8 @@ ENTRY(Vector) SECTIONS { .fpgaimage : { - *(fpga_bit.data) + *(fpga_lf_bit.data) + *(fpga_hf_bit.data) } >fpgaimage :fpgaimage .start : { diff --git a/armsrc/legicrf.c b/armsrc/legicrf.c index f2eb680b4..3fbdf5cba 100644 --- a/armsrc/legicrf.c +++ b/armsrc/legicrf.c @@ -310,6 +310,7 @@ static uint32_t perform_setup_phase_rwd(int iv) } static void LegicCommonInit(void) { + FpgaDownloadAndGo(FPGA_BITSTREAM_HF); SetAdcMuxFor(GPIO_MUXSEL_HIPKD); FpgaSetupSsc(); FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_READER_TX); @@ -687,6 +688,7 @@ void LegicRfSimulate(int phase, int frame, int reqresp) legic_frame_drift = frame; legic_reqresp_drift = reqresp; + FpgaDownloadAndGo(FPGA_BITSTREAM_HF); SetAdcMuxFor(GPIO_MUXSEL_HIPKD); FpgaSetupSsc(); FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_SIMULATOR | FPGA_HF_SIMULATOR_MODULATE_212K); diff --git a/armsrc/lfops.c b/armsrc/lfops.c index 76c4b44e7..a0fa870b6 100644 --- a/armsrc/lfops.c +++ b/armsrc/lfops.c @@ -17,6 +17,7 @@ void AcquireRawAdcSamples125k(int divisor) { + FpgaDownloadAndGo(FPGA_BITSTREAM_LF); if ( (divisor == 1) || (divisor < 0) || (divisor > 255) ) FpgaSendCommand(FPGA_CMD_SET_DIVISOR, 88); //134.8Khz else if (divisor == 0) @@ -69,6 +70,7 @@ void ModThenAcquireRawAdcSamples125k(int delay_off, int period_0, int period_1, int at134khz; /* Make sure the tag is reset */ + FpgaDownloadAndGo(FPGA_BITSTREAM_LF); FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF); SpinDelay(2500); @@ -158,6 +160,7 @@ void ReadTItag(void) uint32_t threshold = (sampleslo - sampleshi + 1)>>1; // TI tags charge at 134.2Khz + FpgaDownloadAndGo(FPGA_BITSTREAM_LF); FpgaSendCommand(FPGA_CMD_SET_DIVISOR, 88); //134.8Khz // Place FPGA in passthrough mode, in this mode the CROSS_LO line @@ -365,6 +368,7 @@ void AcquireTiType(void) // if not provided a valid crc will be computed from the data and written. void WriteTItag(uint32_t idhi, uint32_t idlo, uint16_t crc) { + FpgaDownloadAndGo(FPGA_BITSTREAM_LF); if(crc == 0) { crc = update_crc16(crc, (idlo)&0xff); crc = update_crc16(crc, (idlo>>8)&0xff); @@ -436,6 +440,7 @@ void SimulateTagLowFrequency(int period, int gap, int ledcontrol) int i; uint8_t *tab = (uint8_t *)BigBuf; + FpgaDownloadAndGo(FPGA_BITSTREAM_LF); FpgaWriteConfWord(FPGA_MAJOR_MODE_LF_EDGE_DETECT); AT91C_BASE_PIOA->PIO_PER = GPIO_SSC_DOUT | GPIO_SSC_CLK; @@ -602,6 +607,7 @@ void CmdHIDdemodFSK(int findone, int *high, int *low, int ledcontrol) int m=0, n=0, i=0, idx=0, found=0, lastval=0; uint32_t hi2=0, hi=0, lo=0; + FpgaDownloadAndGo(FPGA_BITSTREAM_LF); FpgaSendCommand(FPGA_CMD_SET_DIVISOR, 95); //125Khz FpgaWriteConfWord(FPGA_MAJOR_MODE_LF_READER); @@ -815,6 +821,7 @@ void CmdIOdemodFSK(int findone, int *high, int *low, int ledcontrol) uint32_t code=0, code2=0; //uint32_t hi2=0, hi=0, lo=0; + FpgaDownloadAndGo(FPGA_BITSTREAM_LF); FpgaSendCommand(FPGA_CMD_SET_DIVISOR, 95); //125Khz FpgaWriteConfWord(FPGA_MAJOR_MODE_LF_READER); @@ -1132,6 +1139,7 @@ void CmdIOdemodFSK(int findone, int *high, int *low, int ledcontrol) // 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_READER); if (bit == 0) @@ -1147,6 +1155,7 @@ void T55xxWriteBlock(uint32_t Data, uint32_t Block, uint32_t Pwd, uint8_t PwdMod { unsigned int i; + FpgaDownloadAndGo(FPGA_BITSTREAM_LF); FpgaSendCommand(FPGA_CMD_SET_DIVISOR, 95); //125Khz FpgaWriteConfWord(FPGA_MAJOR_MODE_LF_READER); @@ -1191,6 +1200,7 @@ void T55xxReadBlock(uint32_t Block, uint32_t Pwd, uint8_t PwdMode) uint8_t *dest = (uint8_t *)BigBuf; int m=0, i=0; + FpgaDownloadAndGo(FPGA_BITSTREAM_LF); m = sizeof(BigBuf); // Clear destination buffer before sending the command memset(dest, 128, m); @@ -1255,6 +1265,7 @@ void T55xxReadTrace(void){ uint8_t *dest = (uint8_t *)BigBuf; int m=0, i=0; + FpgaDownloadAndGo(FPGA_BITSTREAM_LF); m = sizeof(BigBuf); // Clear destination buffer before sending the command memset(dest, 128, m); @@ -1970,6 +1981,7 @@ 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_READER); diff --git a/armsrc/mifarecmd.c b/armsrc/mifarecmd.c index c934a2802..6a491b532 100644 --- a/armsrc/mifarecmd.c +++ b/armsrc/mifarecmd.c @@ -91,66 +91,66 @@ void MifareReadBlock(uint8_t arg0, uint8_t arg1, uint8_t arg2, uint8_t *datain) FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF); LEDsoff(); // iso14a_set_tracing(TRUE); - -} - -void MifareUReadBlock(uint8_t arg0,uint8_t *datain) -{ - // params - uint8_t blockNo = arg0; - - // variables - byte_t isOK = 0; - byte_t dataoutbuf[16]; - uint8_t uid[10]; - uint32_t cuid; - - // clear trace - iso14a_clear_trace(); + +} + +void MifareUReadBlock(uint8_t arg0,uint8_t *datain) +{ + // params + uint8_t blockNo = arg0; + + // variables + byte_t isOK = 0; + byte_t dataoutbuf[16]; + uint8_t uid[10]; + uint32_t cuid; + + // clear trace + iso14a_clear_trace(); iso14443a_setup(FPGA_HF_ISO14443A_READER_LISTEN); - - LED_A_ON(); - LED_B_OFF(); - LED_C_OFF(); - - while (true) { - if(!iso14443a_select_card(uid, NULL, &cuid)) { - if (MF_DBGLEVEL >= 1) Dbprintf("Can't select card"); - break; - }; - - if(mifare_ultra_readblock(cuid, blockNo, dataoutbuf)) { - if (MF_DBGLEVEL >= 1) Dbprintf("Read block error"); - break; - }; - - if(mifare_ultra_halt(cuid)) { - if (MF_DBGLEVEL >= 1) Dbprintf("Halt error"); - break; - }; - - isOK = 1; - break; - } - - if (MF_DBGLEVEL >= 2) DbpString("READ BLOCK FINISHED"); - - // add trace trailer - memset(uid, 0x44, 4); - LogTrace(uid, 4, 0, 0, TRUE); - LED_B_ON(); - cmd_send(CMD_ACK,isOK,0,0,dataoutbuf,16); - LED_B_OFF(); - - - // Thats it... - FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF); - LEDsoff(); -} - -//----------------------------------------------------------------------------- -// Select, Authenticaate, Read an MIFARE tag. -// read sector (data = 4 x 16 bytes = 64 bytes) + + LED_A_ON(); + LED_B_OFF(); + LED_C_OFF(); + + while (true) { + if(!iso14443a_select_card(uid, NULL, &cuid)) { + if (MF_DBGLEVEL >= 1) Dbprintf("Can't select card"); + break; + }; + + if(mifare_ultra_readblock(cuid, blockNo, dataoutbuf)) { + if (MF_DBGLEVEL >= 1) Dbprintf("Read block error"); + break; + }; + + if(mifare_ultra_halt(cuid)) { + if (MF_DBGLEVEL >= 1) Dbprintf("Halt error"); + break; + }; + + isOK = 1; + break; + } + + if (MF_DBGLEVEL >= 2) DbpString("READ BLOCK FINISHED"); + + // add trace trailer + memset(uid, 0x44, 4); + LogTrace(uid, 4, 0, 0, TRUE); + LED_B_ON(); + cmd_send(CMD_ACK,isOK,0,0,dataoutbuf,16); + LED_B_OFF(); + + + // Thats it... + FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF); + LEDsoff(); +} + +//----------------------------------------------------------------------------- +// Select, Authenticaate, Read an MIFARE tag. +// read sector (data = 4 x 16 bytes = 64 bytes) //----------------------------------------------------------------------------- void MifareReadSector(uint8_t arg0, uint8_t arg1, uint8_t arg2, uint8_t *datain) { @@ -242,72 +242,72 @@ void MifareReadSector(uint8_t arg0, uint8_t arg1, uint8_t arg2, uint8_t *datain) FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF); LEDsoff(); // iso14a_set_tracing(TRUE); - -} - -void MifareUReadCard(uint8_t arg0, uint8_t *datain) -{ - // params - uint8_t sectorNo = arg0; - - // variables - byte_t isOK = 0; - byte_t dataoutbuf[16 * 4]; - uint8_t uid[10]; - uint32_t cuid; - - // clear trace - iso14a_clear_trace(); -// iso14a_set_tracing(false); - + +} + +void MifareUReadCard(uint8_t arg0, uint8_t *datain) +{ + // params + uint8_t sectorNo = arg0; + + // variables + byte_t isOK = 0; + byte_t dataoutbuf[16 * 4]; + uint8_t uid[10]; + uint32_t cuid; + + // clear trace + iso14a_clear_trace(); +// iso14a_set_tracing(false); + iso14443a_setup(FPGA_HF_ISO14443A_READER_LISTEN); - - LED_A_ON(); - LED_B_OFF(); - LED_C_OFF(); - - while (true) { - if(!iso14443a_select_card(uid, NULL, &cuid)) { - if (MF_DBGLEVEL >= 1) Dbprintf("Can't select card"); - break; - }; - for(int sec=0;sec<16;sec++){ - if(mifare_ultra_readblock(cuid, sectorNo * 4 + sec, dataoutbuf + 4 * sec)) { - if (MF_DBGLEVEL >= 1) Dbprintf("Read block %d error",sec); - break; - }; - } - if(mifare_ultra_halt(cuid)) { - if (MF_DBGLEVEL >= 1) Dbprintf("Halt error"); - break; - }; - - isOK = 1; - break; - } - - if (MF_DBGLEVEL >= 2) DbpString("READ CARD FINISHED"); - - // add trace trailer - memset(uid, 0x44, 4); - LogTrace(uid, 4, 0, 0, TRUE); - - LED_B_ON(); - cmd_send(CMD_ACK,isOK,0,0,dataoutbuf,64); - //cmd_send(CMD_ACK,isOK,0,0,dataoutbuf+32, 32); - LED_B_OFF(); - - // Thats it... - FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF); - LEDsoff(); -// iso14a_set_tracing(TRUE); - -} - - -//----------------------------------------------------------------------------- -// Select, Authenticaate, Read an MIFARE tag. -// read block + + LED_A_ON(); + LED_B_OFF(); + LED_C_OFF(); + + while (true) { + if(!iso14443a_select_card(uid, NULL, &cuid)) { + if (MF_DBGLEVEL >= 1) Dbprintf("Can't select card"); + break; + }; + for(int sec=0;sec<16;sec++){ + if(mifare_ultra_readblock(cuid, sectorNo * 4 + sec, dataoutbuf + 4 * sec)) { + if (MF_DBGLEVEL >= 1) Dbprintf("Read block %d error",sec); + break; + }; + } + if(mifare_ultra_halt(cuid)) { + if (MF_DBGLEVEL >= 1) Dbprintf("Halt error"); + break; + }; + + isOK = 1; + break; + } + + if (MF_DBGLEVEL >= 2) DbpString("READ CARD FINISHED"); + + // add trace trailer + memset(uid, 0x44, 4); + LogTrace(uid, 4, 0, 0, TRUE); + + LED_B_ON(); + cmd_send(CMD_ACK,isOK,0,0,dataoutbuf,64); + //cmd_send(CMD_ACK,isOK,0,0,dataoutbuf+32, 32); + LED_B_OFF(); + + // Thats it... + FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF); + LEDsoff(); +// iso14a_set_tracing(TRUE); + +} + + +//----------------------------------------------------------------------------- +// Select, Authenticaate, Read an MIFARE tag. +// read block //----------------------------------------------------------------------------- void MifareWriteBlock(uint8_t arg0, uint8_t arg1, uint8_t arg2, uint8_t *datain) { @@ -384,137 +384,137 @@ void MifareWriteBlock(uint8_t arg0, uint8_t arg1, uint8_t arg2, uint8_t *datain) FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF); LEDsoff(); // iso14a_set_tracing(TRUE); - -} - -void MifareUWriteBlock(uint8_t arg0, uint8_t *datain) -{ - // params - uint8_t blockNo = arg0; - byte_t blockdata[16]; - - memset(blockdata,'\0',16); - memcpy(blockdata, datain,16); - - // variables - byte_t isOK = 0; - uint8_t uid[10]; - uint32_t cuid; - - // clear trace - iso14a_clear_trace(); - // iso14a_set_tracing(false); - + +} + +void MifareUWriteBlock(uint8_t arg0, uint8_t *datain) +{ + // params + uint8_t blockNo = arg0; + byte_t blockdata[16]; + + memset(blockdata,'\0',16); + memcpy(blockdata, datain,16); + + // variables + byte_t isOK = 0; + uint8_t uid[10]; + uint32_t cuid; + + // clear trace + iso14a_clear_trace(); + // iso14a_set_tracing(false); + iso14443a_setup(FPGA_HF_ISO14443A_READER_LISTEN); - - LED_A_ON(); - LED_B_OFF(); - LED_C_OFF(); - - while (true) { - if(!iso14443a_select_card(uid, NULL, &cuid)) { - if (MF_DBGLEVEL >= 1) Dbprintf("Can't select card"); - break; - }; - - if(mifare_ultra_writeblock(cuid, blockNo, blockdata)) { - if (MF_DBGLEVEL >= 1) Dbprintf("Write block error"); - break; - }; - - if(mifare_ultra_halt(cuid)) { - if (MF_DBGLEVEL >= 1) Dbprintf("Halt error"); - break; - }; - - isOK = 1; - break; - } - - if (MF_DBGLEVEL >= 2) DbpString("WRITE BLOCK FINISHED"); - - // add trace trailer - memset(uid, 0x44, 4); - LogTrace(uid, 4, 0, 0, TRUE); - - LED_B_ON(); - cmd_send(CMD_ACK,isOK,0,0,0,0); -// UsbSendPacket((uint8_t *)&ack, sizeof(UsbCommand)); - LED_B_OFF(); - - - // Thats it... - FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF); - LEDsoff(); -// iso14a_set_tracing(TRUE); - -} - -void MifareUWriteBlock_Special(uint8_t arg0, uint8_t *datain) -{ - // params - uint8_t blockNo = arg0; - byte_t blockdata[4]; - - memcpy(blockdata, datain,4); - - // variables - byte_t isOK = 0; - uint8_t uid[10]; - uint32_t cuid; - - // clear trace - iso14a_clear_trace(); - // iso14a_set_tracing(false); - + + LED_A_ON(); + LED_B_OFF(); + LED_C_OFF(); + + while (true) { + if(!iso14443a_select_card(uid, NULL, &cuid)) { + if (MF_DBGLEVEL >= 1) Dbprintf("Can't select card"); + break; + }; + + if(mifare_ultra_writeblock(cuid, blockNo, blockdata)) { + if (MF_DBGLEVEL >= 1) Dbprintf("Write block error"); + break; + }; + + if(mifare_ultra_halt(cuid)) { + if (MF_DBGLEVEL >= 1) Dbprintf("Halt error"); + break; + }; + + isOK = 1; + break; + } + + if (MF_DBGLEVEL >= 2) DbpString("WRITE BLOCK FINISHED"); + + // add trace trailer + memset(uid, 0x44, 4); + LogTrace(uid, 4, 0, 0, TRUE); + + LED_B_ON(); + cmd_send(CMD_ACK,isOK,0,0,0,0); +// UsbSendPacket((uint8_t *)&ack, sizeof(UsbCommand)); + LED_B_OFF(); + + + // Thats it... + FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF); + LEDsoff(); +// iso14a_set_tracing(TRUE); + +} + +void MifareUWriteBlock_Special(uint8_t arg0, uint8_t *datain) +{ + // params + uint8_t blockNo = arg0; + byte_t blockdata[4]; + + memcpy(blockdata, datain,4); + + // variables + byte_t isOK = 0; + uint8_t uid[10]; + uint32_t cuid; + + // clear trace + iso14a_clear_trace(); + // iso14a_set_tracing(false); + iso14443a_setup(FPGA_HF_ISO14443A_READER_LISTEN); - - LED_A_ON(); - LED_B_OFF(); - LED_C_OFF(); - - while (true) { - if(!iso14443a_select_card(uid, NULL, &cuid)) { - if (MF_DBGLEVEL >= 1) Dbprintf("Can't select card"); - break; - }; - - if(mifare_ultra_special_writeblock(cuid, blockNo, blockdata)) { - if (MF_DBGLEVEL >= 1) Dbprintf("Write block error"); - break; - }; - - if(mifare_ultra_halt(cuid)) { - if (MF_DBGLEVEL >= 1) Dbprintf("Halt error"); - break; - }; - - isOK = 1; - break; - } - - if (MF_DBGLEVEL >= 2) DbpString("WRITE BLOCK FINISHED"); - - // add trace trailer - memset(uid, 0x44, 4); - LogTrace(uid, 4, 0, 0, TRUE); - - LED_B_ON(); - cmd_send(CMD_ACK,isOK,0,0,0,0); -// UsbSendPacket((uint8_t *)&ack, sizeof(UsbCommand)); - LED_B_OFF(); - - - // Thats it... - FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF); - LEDsoff(); -// iso14a_set_tracing(TRUE); - -} - -// Return 1 if the nonce is invalid else return 0 -int valid_nonce(uint32_t Nt, uint32_t NtEnc, uint32_t Ks1, byte_t * parity) { - return ((oddparity((Nt >> 24) & 0xFF) == ((parity[0]) ^ oddparity((NtEnc >> 24) & 0xFF) ^ BIT(Ks1,16))) & \ + + LED_A_ON(); + LED_B_OFF(); + LED_C_OFF(); + + while (true) { + if(!iso14443a_select_card(uid, NULL, &cuid)) { + if (MF_DBGLEVEL >= 1) Dbprintf("Can't select card"); + break; + }; + + if(mifare_ultra_special_writeblock(cuid, blockNo, blockdata)) { + if (MF_DBGLEVEL >= 1) Dbprintf("Write block error"); + break; + }; + + if(mifare_ultra_halt(cuid)) { + if (MF_DBGLEVEL >= 1) Dbprintf("Halt error"); + break; + }; + + isOK = 1; + break; + } + + if (MF_DBGLEVEL >= 2) DbpString("WRITE BLOCK FINISHED"); + + // add trace trailer + memset(uid, 0x44, 4); + LogTrace(uid, 4, 0, 0, TRUE); + + LED_B_ON(); + cmd_send(CMD_ACK,isOK,0,0,0,0); +// UsbSendPacket((uint8_t *)&ack, sizeof(UsbCommand)); + LED_B_OFF(); + + + // Thats it... + FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF); + LEDsoff(); +// iso14a_set_tracing(TRUE); + +} + +// Return 1 if the nonce is invalid else return 0 +int valid_nonce(uint32_t Nt, uint32_t NtEnc, uint32_t Ks1, byte_t * parity) { + return ((oddparity((Nt >> 24) & 0xFF) == ((parity[0]) ^ oddparity((NtEnc >> 24) & 0xFF) ^ BIT(Ks1,16))) & \ (oddparity((Nt >> 16) & 0xFF) == ((parity[1]) ^ oddparity((NtEnc >> 16) & 0xFF) ^ BIT(Ks1,8))) & \ (oddparity((Nt >> 8) & 0xFF) == ((parity[2]) ^ oddparity((NtEnc >> 8) & 0xFF) ^ BIT(Ks1,0)))) ? 1 : 0; } diff --git a/client/Makefile b/client/Makefile index 6d75b4bbb..e4a3580b8 100644 --- a/client/Makefile +++ b/client/Makefile @@ -24,8 +24,10 @@ QTLDLIBS = -L$(QTDIR)/lib -lQtCore4 -lQtGui4 MOC = $(QTDIR)/bin/moc LUAPLATFORM = mingw else ifeq ($(platform),Darwin) -CXXFLAGS = -I/Library/Frameworks/QtGui.framework/Versions/Current/Headers -I/Library/Frameworks/QtCore.framework/Versions/Current/Headers -QTLDLIBS = -framework QtGui -framework QtCore +#CXXFLAGS = -I/Library/Frameworks/QtGui.framework/Versions/Current/Headers -I/Library/Frameworks/QtCore.framework/Versions/Current/Headers +#QTLDLIBS = -framework QtGui -framework QtCore +CXXFLAGS = -I$(QTDIR)/include -I$(QTDIR)/include/QtCore -I$(QTDIR)/include/QtGui +QTLDLIBS = -F/opt/local/Library/Frameworks -framework QtGui -framework QtCore MOC = moc LUAPLATFORM = macosx else diff --git a/common/ldscript.common b/common/ldscript.common index 7cde5891d..f1b63550d 100644 --- a/common/ldscript.common +++ b/common/ldscript.common @@ -13,8 +13,8 @@ MEMORY { bootphase1 : ORIGIN = 0x00100000, LENGTH = 0x200 /* Phase 1 bootloader: Copies real bootloader to RAM */ bootphase2 : ORIGIN = 0x00100200, LENGTH = 0x2000 - 0x200 /* Main bootloader code, stored in Flash, executed from RAM */ - fpgaimage : ORIGIN = 0x00102000, LENGTH = 64k - 0x2000 /* Place where the FPGA image will end up */ - osimage : ORIGIN = 0x00110000, LENGTH = 256K - 64k /* Place where the main OS will end up */ + fpgaimage : ORIGIN = 0x00102000, LENGTH = 96k - 0x2000 /* Place where the FPGA image will end up */ + osimage : ORIGIN = 0x00118000, LENGTH = 256K - 96k /* Place where the main OS will end up */ ram : ORIGIN = 0x00200000, LENGTH = 64K - 0x20 /* RAM, minus small common area */ commonarea : ORIGIN = 0x00200000 + 64K - 0x20, LENGTH = 0x20 /* Communication between bootloader and main OS */ } diff --git a/fpga/Makefile b/fpga/Makefile index 12aeaaaec..1aaa9f760 100644 --- a/fpga/Makefile +++ b/fpga/Makefile @@ -1,31 +1,33 @@ include ../common/Makefile.common -all: fpga.ngc fpga.ngd fpga.ncd fpga-placed.ncd fpga.bit +all: fpga_lf.bit fpga_hf.bit clean: - $(DELETE) fpga.bgn fpga.drc fpga.ncd fpga.ngd fpga_par.xrpt fpga-placed.pad fpga-placed.par fpga-placed.xpi fpga_usage.xml xlnx_auto_0.ise xst.srp - $(DELETE) fpga.map fpga.ngc fpga_ngdbuild.xrpt fpga.pcf fpga-placed_pad.csv fpga-placed.ptwx fpga.rbt xlnx_auto_0_xdb - $(DELETE) fpga.bld fpga.mrp fpga.ngc_xst.xrpt fpga.ngm fpga-placed.ncd fpga-placed_pad.txt fpga-placed.unroutes fpga_summary.xml netlist.lst xst + $(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.ngc: fpga.v fpga.ucf xst.scr util.v lo_edge_detect.v lo_read.v lo_passthru.v hi_simulate.v hi_read_tx.v hi_read_rx_xcorr.v hi_iso14443a.v - $(DELETE) fpga.ngc - $(XILINX_TOOLS_PREFIX)xst -ifn xst.scr +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 + $(DELETE) $@ + $(XILINX_TOOLS_PREFIX)xst -ifn xst_hf.scr -fpga.ngd: fpga.ngc - $(DELETE) fpga.ngd - $(XILINX_TOOLS_PREFIX)ngdbuild -aul -p xc2s30-5-vq100 -nt timestamp -uc fpga.ucf fpga.ngc fpga.ngd +fpga_lf.ngc: fpga_lf.v fpga.ucf xst_lf.scr util.v clk_divider.v lo_edge_detect.v lo_read.v lo_passthru.v + $(DELETE) $@ + $(XILINX_TOOLS_PREFIX)xst -ifn xst_lf.scr -fpga.ncd: fpga.ngd - $(DELETE) fpga.ncd - $(XILINX_TOOLS_PREFIX)map -p xc2s30-5-vq100 fpga.ngd +%.ngd: %.ngc + $(DELETE) $@ + $(XILINX_TOOLS_PREFIX)ngdbuild -aul -p xc2s30-5-vq100 -nt timestamp -uc fpga.ucf $< $@ -fpga-placed.ncd: fpga.ncd - $(DELETE) fpga-placed.ncd - $(XILINX_TOOLS_PREFIX)par fpga.ncd fpga-placed.ncd +%.ncd: %.ngd + $(DELETE) $@ + $(XILINX_TOOLS_PREFIX)map -p xc2s30-5-vq100 $< -fpga.bit: fpga-placed.ncd - $(DELETE) fpga.bit fpga.drc fpga.rbt - $(XILINX_TOOLS_PREFIX)bitgen fpga-placed.ncd fpga.bit +%-placed.ncd: %.ncd + $(DELETE) $@ + $(XILINX_TOOLS_PREFIX)par $< $@ +%.bit: %-placed.ncd + $(DELETE) $@ $*.drc $*.rbt + $(XILINX_TOOLS_PREFIX)bitgen $< $@ .PHONY: all clean help help: diff --git a/fpga/clk_divider.v b/fpga/clk_divider.v new file mode 100644 index 000000000..882af5cc8 --- /dev/null +++ b/fpga/clk_divider.v @@ -0,0 +1,25 @@ +//----------------------------------------------------------------------------- +// Copyright (C) 2014 iZsh +// +// 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. +//----------------------------------------------------------------------------- +module clk_divider(input clk, input [7:0] divisor, output [7:0] div_cnt, output div_clk); + + reg [7:0] div_cnt_ = 0; + reg div_clk_; + assign div_cnt = div_cnt_; + assign div_clk = div_clk_; + + always @(posedge clk) + begin + if(div_cnt == divisor) begin + div_cnt_ <= 8'd0; + div_clk_ = !div_clk_; + end else + div_cnt_ <= div_cnt_ + 1; + end + +endmodule + diff --git a/fpga/fpga.bit b/fpga/fpga.bit deleted file mode 100644 index e5ea4fcd33b41a65cf776e06d388ebfcad02bff9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 42172 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 ChxqLP diff --git a/fpga/fpga.v b/fpga/fpga.v deleted file mode 100644 index a083ae5cf..000000000 --- a/fpga/fpga.v +++ /dev/null @@ -1,220 +0,0 @@ -//----------------------------------------------------------------------------- -// The FPGA is responsible for interfacing between the A/D, the coil drivers, -// and the ARM. In the low-frequency modes it passes the data straight -// through, so that the ARM gets raw A/D samples over the SSP. In the high- -// frequency modes, the FPGA might perform some demodulation first, to -// reduce the amount of data that we must send to the ARM. -// -// I am not really an FPGA/ASIC designer, so I am sure that a lot of this -// could be improved. -// -// Jonathan Westhues, March 2006 -// Added ISO14443-A support by Gerhard de Koning Gans, April 2008 -//----------------------------------------------------------------------------- - -`include "lo_read.v" -`include "lo_passthru.v" -`include "lo_edge_detect.v" -`include "hi_read_tx.v" -`include "hi_read_rx_xcorr.v" -`include "hi_simulate.v" -`include "hi_iso14443a.v" -`include "util.v" - -module fpga( - spck, miso, mosi, ncs, - pck0, ck_1356meg, ck_1356megb, - pwr_lo, pwr_hi, pwr_oe1, pwr_oe2, pwr_oe3, pwr_oe4, - adc_d, adc_clk, adc_noe, - ssp_frame, ssp_din, ssp_dout, ssp_clk, - cross_hi, cross_lo, - dbg -); - input spck, mosi, ncs; - output miso; - 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, adc_noe; - input ssp_dout; - output ssp_frame, ssp_din, ssp_clk; - input cross_hi, cross_lo; - output dbg; - -//assign pck0 = pck0i; -// IBUFG #(.IOSTANDARD("DEFAULT") ) pck0b( -// .O(pck0), -// .I(pck0i) -// ); -//assign spck = spcki; -// IBUFG #(.IOSTANDARD("DEFAULT") ) spckb( - // .O(spck), - // .I(spcki) -// ); - - -//----------------------------------------------------------------------------- -// The SPI receiver. This sets up the configuration word, which the rest of -// the logic looks at to determine how to connect the A/D and the coil -// drivers (i.e., which section gets it). Also assign some symbolic names -// to the configuration bits, for use below. -//----------------------------------------------------------------------------- - -reg [15:0] shift_reg; -reg [7:0] divisor; -reg [7:0] conf_word; - -// We switch modes between transmitting to the 13.56 MHz tag and receiving -// from it, which means that we must make sure that we can do so without -// glitching, or else we will glitch the transmitted carrier. -always @(posedge ncs) -begin - case(shift_reg[15:12]) - 4'b0001: conf_word <= shift_reg[7:0]; // FPGA_CMD_SET_CONFREG - 4'b0010: divisor <= shift_reg[7:0]; // FPGA_CMD_SET_DIVISOR - endcase -end - -always @(posedge spck) -begin - if(~ncs) - begin - shift_reg[15:1] <= shift_reg[14:0]; - shift_reg[0] <= mosi; - end -end - -wire [2:0] major_mode; -assign major_mode = conf_word[7:5]; - -// For the low-frequency configuration: -wire lo_is_125khz; -assign lo_is_125khz = conf_word[3]; - -// For the high-frequency transmit configuration: modulation depth, either -// 100% (just quite driving antenna, steady LOW), or shallower (tri-state -// some fraction of the buffers) -wire hi_read_tx_shallow_modulation; -assign hi_read_tx_shallow_modulation = conf_word[0]; - -// For the high-frequency receive correlator: frequency against which to -// correlate. -wire hi_read_rx_xcorr_848; -assign 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; -assign 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; -assign 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; -assign hi_simulate_mod_type = conf_word[2:0]; - -// For the high-frequency simulated tag: what kind of modulation to use. -wire lf_field; -assign lf_field = conf_word[0]; - -//----------------------------------------------------------------------------- -// And then we instantiate the modules corresponding to each of the FPGA's -// major modes, and use muxes to connect the outputs of the active mode to -// the output pins. -//----------------------------------------------------------------------------- - -lo_read lr( - pck0, ck_1356meg, ck_1356megb, - lr_pwr_lo, lr_pwr_hi, lr_pwr_oe1, lr_pwr_oe2, lr_pwr_oe3, lr_pwr_oe4, - adc_d, lr_adc_clk, - lr_ssp_frame, lr_ssp_din, ssp_dout, lr_ssp_clk, - cross_hi, cross_lo, - lr_dbg, - lo_is_125khz, divisor -); - -lo_passthru lp( - pck0, ck_1356meg, ck_1356megb, - lp_pwr_lo, lp_pwr_hi, lp_pwr_oe1, lp_pwr_oe2, lp_pwr_oe3, lp_pwr_oe4, - adc_d, lp_adc_clk, - lp_ssp_frame, lp_ssp_din, ssp_dout, lp_ssp_clk, - cross_hi, cross_lo, - lp_dbg, divisor -); - -lo_edge_detect ls( - pck0, ck_1356meg, ck_1356megb, - ls_pwr_lo, ls_pwr_hi, ls_pwr_oe1, ls_pwr_oe2, ls_pwr_oe3, ls_pwr_oe4, - adc_d, ls_adc_clk, - ls_ssp_frame, ls_ssp_din, ssp_dout, ls_ssp_clk, - cross_hi, cross_lo, - ls_dbg, divisor, - lf_field -); - -hi_read_tx ht( - pck0, ck_1356meg, ck_1356megb, - ht_pwr_lo, ht_pwr_hi, ht_pwr_oe1, ht_pwr_oe2, ht_pwr_oe3, ht_pwr_oe4, - adc_d, ht_adc_clk, - ht_ssp_frame, ht_ssp_din, ssp_dout, ht_ssp_clk, - cross_hi, cross_lo, - ht_dbg, - hi_read_tx_shallow_modulation -); - -hi_read_rx_xcorr hrxc( - pck0, ck_1356meg, ck_1356megb, - hrxc_pwr_lo, hrxc_pwr_hi, hrxc_pwr_oe1, hrxc_pwr_oe2, hrxc_pwr_oe3, hrxc_pwr_oe4, - adc_d, hrxc_adc_clk, - 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_simulate hs( - pck0, ck_1356meg, ck_1356megb, - hs_pwr_lo, hs_pwr_hi, hs_pwr_oe1, hs_pwr_oe2, hs_pwr_oe3, hs_pwr_oe4, - adc_d, hs_adc_clk, - hs_ssp_frame, hs_ssp_din, ssp_dout, hs_ssp_clk, - cross_hi, cross_lo, - hs_dbg, - hi_simulate_mod_type -); - -hi_iso14443a hisn( - pck0, ck_1356meg, ck_1356megb, - hisn_pwr_lo, hisn_pwr_hi, hisn_pwr_oe1, hisn_pwr_oe2, hisn_pwr_oe3, hisn_pwr_oe4, - adc_d, hisn_adc_clk, - hisn_ssp_frame, hisn_ssp_din, ssp_dout, hisn_ssp_clk, - cross_hi, cross_lo, - hisn_dbg, - hi_simulate_mod_type -); - -// Major modes: -// 000 -- LF reader (generic) -// 001 -- LF simulated tag (generic) -// 010 -- HF reader, transmitting to tag; modulation depth selectable -// 011 -- HF reader, receiving from tag, correlating as it goes; frequency selectable -// 100 -- HF simulated tag -// 101 -- HF ISO14443-A -// 110 -- LF passthrough -// 111 -- everything off - -mux8 mux_ssp_clk (major_mode, ssp_clk, lr_ssp_clk, ls_ssp_clk, ht_ssp_clk, hrxc_ssp_clk, hs_ssp_clk, hisn_ssp_clk, lp_ssp_clk, 1'b0); -mux8 mux_ssp_din (major_mode, ssp_din, lr_ssp_din, ls_ssp_din, ht_ssp_din, hrxc_ssp_din, hs_ssp_din, hisn_ssp_din, lp_ssp_din, 1'b0); -mux8 mux_ssp_frame (major_mode, ssp_frame, lr_ssp_frame, ls_ssp_frame, ht_ssp_frame, hrxc_ssp_frame, hs_ssp_frame, hisn_ssp_frame, lp_ssp_frame, 1'b0); -mux8 mux_pwr_oe1 (major_mode, pwr_oe1, lr_pwr_oe1, ls_pwr_oe1, ht_pwr_oe1, hrxc_pwr_oe1, hs_pwr_oe1, hisn_pwr_oe1, lp_pwr_oe1, 1'b0); -mux8 mux_pwr_oe2 (major_mode, pwr_oe2, lr_pwr_oe2, ls_pwr_oe2, ht_pwr_oe2, hrxc_pwr_oe2, hs_pwr_oe2, hisn_pwr_oe2, lp_pwr_oe2, 1'b0); -mux8 mux_pwr_oe3 (major_mode, pwr_oe3, lr_pwr_oe3, ls_pwr_oe3, ht_pwr_oe3, hrxc_pwr_oe3, hs_pwr_oe3, hisn_pwr_oe3, lp_pwr_oe3, 1'b0); -mux8 mux_pwr_oe4 (major_mode, pwr_oe4, lr_pwr_oe4, ls_pwr_oe4, ht_pwr_oe4, hrxc_pwr_oe4, hs_pwr_oe4, hisn_pwr_oe4, lp_pwr_oe4, 1'b0); -mux8 mux_pwr_lo (major_mode, pwr_lo, lr_pwr_lo, ls_pwr_lo, ht_pwr_lo, hrxc_pwr_lo, hs_pwr_lo, hisn_pwr_lo, lp_pwr_lo, 1'b0); -mux8 mux_pwr_hi (major_mode, pwr_hi, lr_pwr_hi, ls_pwr_hi, ht_pwr_hi, hrxc_pwr_hi, hs_pwr_hi, hisn_pwr_hi, lp_pwr_hi, 1'b0); -mux8 mux_adc_clk (major_mode, adc_clk, lr_adc_clk, ls_adc_clk, ht_adc_clk, hrxc_adc_clk, hs_adc_clk, hisn_adc_clk, lp_adc_clk, 1'b0); -mux8 mux_dbg (major_mode, dbg, lr_dbg, ls_dbg, ht_dbg, hrxc_dbg, hs_dbg, hisn_dbg, lp_dbg, 1'b0); - -// In all modes, let the ADC's outputs be enabled. -assign adc_noe = 1'b0; - -endmodule diff --git a/fpga/fpga_hf.bit b/fpga/fpga_hf.bit new file mode 100644 index 0000000000000000000000000000000000000000..5389428c5539eb60eee9f27b6956ca950aa79b15 GIT binary patch literal 42175 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

eu*}zWMx6WDri0MtNP{{*8u|VkeY~bQJ-m} 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 literal 0 HcmV?d00001 diff --git a/fpga/fpga_hf.v b/fpga/fpga_hf.v new file mode 100644 index 000000000..ff7c904a5 --- /dev/null +++ b/fpga/fpga_hf.v @@ -0,0 +1,150 @@ +//----------------------------------------------------------------------------- +// The FPGA is responsible for interfacing between the A/D, the coil drivers, +// and the ARM. In the low-frequency modes it passes the data straight +// through, so that the ARM gets raw A/D samples over the SSP. In the high- +// frequency modes, the FPGA might perform some demodulation first, to +// reduce the amount of data that we must send to the ARM. +// +// I am not really an FPGA/ASIC designer, so I am sure that a lot of this +// could be improved. +// +// Jonathan Westhues, March 2006 +// Added ISO14443-A support by Gerhard de Koning Gans, April 2008 +//----------------------------------------------------------------------------- + +`include "hi_read_tx.v" +`include "hi_read_rx_xcorr.v" +`include "hi_simulate.v" +`include "hi_iso14443a.v" +`include "util.v" + +module fpga_hf( + input spck, output miso, input mosi, input ncs, + input pck0, input ck_1356meg, input ck_1356megb, + output pwr_lo, output pwr_hi, + output pwr_oe1, output pwr_oe2, output pwr_oe3, output pwr_oe4, + input [7:0] adc_d, output adc_clk, output adc_noe, + output ssp_frame, output ssp_din, input ssp_dout, output ssp_clk, + input cross_hi, input cross_lo, + output dbg +); + +//----------------------------------------------------------------------------- +// The SPI receiver. This sets up the configuration word, which the rest of +// the logic looks at to determine how to connect the A/D and the coil +// drivers (i.e., which section gets it). Also assign some symbolic names +// to the configuration bits, for use below. +//----------------------------------------------------------------------------- + +reg [15:0] shift_reg; +reg [7:0] conf_word; + +// We switch modes between transmitting to the 13.56 MHz tag and receiving +// from it, which means that we must make sure that we can do so without +// glitching, or else we will glitch the transmitted carrier. +always @(posedge ncs) +begin + case(shift_reg[15:12]) + 4'b0001: conf_word <= shift_reg[7:0]; // FPGA_CMD_SET_CONFREG + endcase +end + +always @(posedge spck) +begin + if(~ncs) + begin + shift_reg[15:1] <= shift_reg[14:0]; + shift_reg[0] <= mosi; + end +end + +wire [2:0] major_mode; +assign major_mode = conf_word[7:5]; + +// For the high-frequency transmit configuration: modulation depth, either +// 100% (just quite driving antenna, steady LOW), or shallower (tri-state +// some fraction of the buffers) +wire hi_read_tx_shallow_modulation = conf_word[0]; + +// For the high-frequency receive correlator: frequency against which to +// correlate. +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]; + +//----------------------------------------------------------------------------- +// And then we instantiate the modules corresponding to each of the FPGA's +// major modes, and use muxes to connect the outputs of the active mode to +// the output pins. +//----------------------------------------------------------------------------- + +hi_read_tx ht( + pck0, ck_1356meg, ck_1356megb, + ht_pwr_lo, ht_pwr_hi, ht_pwr_oe1, ht_pwr_oe2, ht_pwr_oe3, ht_pwr_oe4, + adc_d, ht_adc_clk, + ht_ssp_frame, ht_ssp_din, ssp_dout, ht_ssp_clk, + cross_hi, cross_lo, + ht_dbg, + hi_read_tx_shallow_modulation +); + +hi_read_rx_xcorr hrxc( + pck0, ck_1356meg, ck_1356megb, + hrxc_pwr_lo, hrxc_pwr_hi, hrxc_pwr_oe1, hrxc_pwr_oe2, hrxc_pwr_oe3, hrxc_pwr_oe4, + adc_d, hrxc_adc_clk, + 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_simulate hs( + pck0, ck_1356meg, ck_1356megb, + hs_pwr_lo, hs_pwr_hi, hs_pwr_oe1, hs_pwr_oe2, hs_pwr_oe3, hs_pwr_oe4, + adc_d, hs_adc_clk, + hs_ssp_frame, hs_ssp_din, ssp_dout, hs_ssp_clk, + cross_hi, cross_lo, + hs_dbg, + hi_simulate_mod_type +); + +hi_iso14443a hisn( + pck0, ck_1356meg, ck_1356megb, + hisn_pwr_lo, hisn_pwr_hi, hisn_pwr_oe1, hisn_pwr_oe2, hisn_pwr_oe3, hisn_pwr_oe4, + adc_d, hisn_adc_clk, + hisn_ssp_frame, hisn_ssp_din, ssp_dout, hisn_ssp_clk, + cross_hi, cross_lo, + hisn_dbg, + hi_simulate_mod_type +); + +// 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 +// 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); + +// In all modes, let the ADC's outputs be enabled. +assign adc_noe = 1'b0; + +endmodule diff --git a/fpga/fpga_lf.bit b/fpga/fpga_lf.bit new file mode 100644 index 0000000000000000000000000000000000000000..133ea9924b546523b0128737e5082cc723406319 GIT binary patch literal 42175 zcmeHQeQ*`mbw9grA1snUE0A1ejNL_GTlGBPN!ZvWM7jupRfjfmjcwZTv=5u4{J~`8 zWZEG!ZRSeC0e>{8NoMLco{pSk8k*)00dWkm$5~{71tvyA84qK7>}N`dN-$Au>Ie|1 z=YH(f?%TWjghdFc-(v&-1&#bI!ej8I>dA4}h^A=6s>!Z`S|yrY|h)*tGu9 z&u>`t#YZ>5BT&}(v6{?r4P11AMPz z96vw!mj}L(1!@4m^sJF%KkcmH8bF&DX2E0s2KoJrEMWP>zl|&qXom%l!fb~X$9ycx zznI+~^F1rJDELs$X|pTfLs;%rW>bgZ zLvuNH6ca?rQ897IO$qH9nwDel+L4ZSiz+z{ynouNo`n}+p;z8vz6~#!3%yxf5G6-N zKYQ?Rk*cc7kATbG)mA+*lt$s;9<}(G4%h5}3(!O>dsD*^;evQq8{}aWnxK-VgfPn& zu;eH%Vf@(6NjMKpq_QU!75c@ysI>w1!Xi@MW1fr%d2rZsYSRlMUn%7SVk~USf}M~d z<&HTJ5&F3qfju*G;X13zqi{CW&ffLRP0^~Vl2g+ux6xdteciQ!^^O zF4}IVqg7QU{bHTg)_gCa?P4r?tG^fD&%Xnhsb=d|c&fZ!S|(DB6j$_3UJ?6$(jb5M-?4z!s8d-&CmVU+Kppez6r!a8}e zz6>X7DpiTs%GY40wJB^5gN8a!`1+#hBprW!Rm9s&xxQe=reM3m2Hz9wtM?{VLln%g z!5t`dHwuMU3o8pZKz$5p~FxQ6)UhVZLk^RLIRu$|ZAS6Jt&<5$6+ zKWH=aSAbtLuN1!u2#XHCE+Y|}Ih<-D@*8vbQp>Oox2BN2O1G*HLC@HvCq zd*_@nUxQt212ZJ{havv8r!_N#8^trQ9qJfE)Zy1I8+BYHnBCwafikuHYa0@=jY!0{ z(s_)L>G;!7j$g z^!)4P2_hE5zb^JRZrt88=Oi2yj7-PBcG9{WBVy(gf|2R@*LN6M8vv=J=U*-iixV6f821e{JXF(cvso&%c@l!8{0!Oi1Kk+n|myvPAyX3B8O(YWbHf ziRu$j$2#GF|!0|^REzod5akl ztA{6{jtM&c)#qdYmsQ4}W0HS`@aspgkd$9A=fYOt^I7t*5PqGbpXo&+*4*_9ZD5Q{ z$G=8hwDZ~W_j@I~k^C!!Ut?ag`}A1%Wm|fvbo`6er!3&#(D5(Sp>{w=@~;qn_2n{N zS-^Rv!>{wG6Lenb@C)s{a9$k|HZ#D#zU}+R_Vx%znfa6`QT$6; z>@)Ba8zG<%?V+!u!LMDA$#bV%w*Y9Le+BUi9XO&suQ8!772sd*`mi+ypAkCJ^QObE zLPug8egz$gI{Yg1HR#U>+he*umkCTi#N5Mn*4#j!a(A@aedZ(D_*cfO-(xO-r`&piI$5zl zYz_JkNApcyW>0DZyhfIhOg7aXjek{Ks^xo$bLKcKCEL%Zbo`6$Th{cIFM!u@-Bi_Nj^BPnc`)7*-YKA(RD`v>Q0e??zv;E~s8BSAs(ufYQU z{E(e9k5SyOw&N!7s6|*@hKAx_$QkQ5n;*gB+iuy2b=L8(-5$36HsmSYga1zK27C_p z8xN-g@vqBH6V05&A$XlErI{Tu{A;*8QLCs~qzZ4CMk zFVf`%sbbzdFNm1WzaSX@B8`CEl7m5Lgo+sc1xqQ;Ll+qTYSZ(t-8t8*&zhT%e=YFP zfavh+rxd?BY2MU>>ub2S10!n$@Dt)+zuDGs+FqCXtNvF9Ul`5k`Pao<)A7aG)EV+& zZrPi-=hxxaM|8;vG=rDnNavC~3VQtdBd3xAH?;g!>^y>SM}|<@VDCYQKw6f zU$=Yq9jMbyUC+MT)Zy0!SmIT@lsbd<8HGJ5Eq-mlt^V_n zDT!ZH#=mB;G=SZ?rJnuL?6bIb>O8cEdi=t#o;A`PZjJ{A(tooE&q9xWI|nb;`e>z&?k#uouOz694L(n5(Bn z|Ag~5#5NTZIfQU@T8^#vE6v~Vx5R3fB5~(qNtG5q2g9X@`Q@;9!B{0*1QjUxFQ zLTBpv8|+mu<@^n~KdeuRe;vZ@0Dh*NzcD1@DZickjRF#STFDrlO8je+&&U)tQ$k+k+t^SMF&D~i^z)&>!Pw*@tg5OKJd^Ja!}%M&BT-g97Qfb| zX2Z|ul0n>W#QG2W&_~U183|N^|8NoWV-MjzD%OAa4Rev*NjbhJ_z!0xZ`#FhS?fQv zoA+%;fJXj>gFB+*UxwU@)Wch_E6<n%sl& zuY<5_AfxzK5WgG=TXQk4H-DJ(uN-T81ixtM z!|r8ph%TWOG4U_LVe7=bN%-Y5I#7P=lLyVljWPUdFU9!Ix6IqjCrDjK9RIQxttfZ8 zZh=lx*B;Bic-V_^ncjP2`4`q1QZAC|Mw|1mcGic{{KKQ)KGu7wzUf{Zlv8F0)2R){ zn=Y{s(zj9;93+jc*sj?4S6Nxzcec^z-1>z0SG!qlJ`T?jUT68P!u&(Wtg#=5d7OL7 z_*aO3vHJ9+ZsqYWtdB1K#gjsxP5m6sdt6z|zZ^cME*v+OFe0Xlf4$tkh?egtWAU%~ z)YkK_T{N?={B9H17j-GlF&+OB^SNs|Y$fw3&Sx$EqL_%d5$)JJbY~77O0oXKUff4v z@P)+iuW`C0UwJ&$#Oz^jCXRpI>6H(4&4tHVyY&3)1>|4l#B|)JVO|b(^!#gqS5C_e zn}SQQ?K=MT0kAN4`67&W@1khOlJJY7(WBTd9e!Ox`c|1wW#M&bCKLQCoPX#n#khHy zV}IRT%=}St{HwgDEQ3Cf42|+H9`@ReRJz|b?pos7OnzfqX{uk{}m><{DdE2R?Y_4ymz)|L1d z0!J)<1rq5K^Ec!v0B!yT$ovg?;y|0fA@ECi6l3v==cNc`AHOEUztW}r!}1POxjvMj z$1mI;3WpmPbodon?_y6Jya;vdL|6iT4Zv;}lhzXWSD$&x-HTiX6DJbz>m)MGT^{Zw z;_&Np7$*Xmr^XdJhb)(Mp$@-J_@k46UjyVtaabcBzh=K-Nl=KyzmR{){EY$l z&{)1NCjU^*F>F^n|MJIu+CigfANEfoer-kn;b-;vhq9_~Apcs(awZe->(y=a? z!@)N${}3VR7;ut>{A-%vL>j&`fP7~cNye{Xt9bt5NqE9?32tr^@hd6+Q1tTwvJV4} zSf2#^It%A}Li|gEU+?+-qvK!lAlPa52e2qE|4{7@yT$s7=U**v!}lG2!ZDVAv4dc* z_8}2V;9q?!-|xCexJ}T-zhwT#yKtndnb|{q{0pn`7{q=LGUt~=`SS|9rSRM4U$dA~PTI_P{K7;InPixVU%pNfe#v&l;n%D{9N#mz zfBxgezj(e)58rQ$tl)b{FPMKQF5+l83*EiJ^IwB$Wz{DHQ|A1i=*%&`6FUDToBS(` zqj3-)5xEDt{Ebr>|Kb2G^EXC}m;9brL!fwy#IN?k`#1iuFU6j-Oz=2?UxwhqvjT2R z59EF$0lx;^ZrI575)!{g43U3Wws``!-hl6S&J*Xq9M<;m{TmqnD$k|{F#qswJcME% zHJJ+d_iqHJ)-k`OL(_9iClvpZ{Aox=P>54VNKEV=hPD!6Aj|4`7bk9__m z_lLpzH+)y{fIp`4IlBCf^Kgjy-jRQ$bF4m*`!_1-%J*EwzxW)}-M{e*jO%@s@q&I? zXU+W^2PVV6c#a}F10~m2YxMq&lkl9(<5m4sii zKEtA)L-~jPr6{fx-V}38fB%N$rwRP)xcQ{dzj#0E@;3&Fv>S)SohrRm(eukAfP9Bd z>_MTk1ETkDya})Na{hHl+Le^f&L#&NRU;OEgK zCvxCfKVwR{4aZmxFsrj%UpdYB>7i{&$lo}KyovjxektZyPx$@~ZYqaa{0ke1 z@h{%49?kt5qxhWNjDPKGby?f}{KMceqSL-TOu(pyl!G6`5U9~E8&llzJe*=zcC{6WJ2ec3-=Nqi1nqzFNN=u;a`){uj!BY62$Uf3udeyO%6 z_zx!?|6*8h4f78%k)E)%bKTq@bxP#3Me^r^7fDSf{*{1V6L)7N;g`gw1plFmk-aI_ zmma_5o+JUk)J0N<#8~L?OU>>_qMWX)@9pi!cmyUm(fzfa9y+oq_@I2)Q!HW0~8`+*@ zC;`75jO(%bB;r?}*h@(K%1Qnegn)P8M^y4JZZq}x^#Sx1#V@>wgYA(L@#{QY%G#9} z|Jo_`ens*(ZYdJ~Lfg{L_fc{9Rn9I#yiAuS$G=i}Yt-hkq-%m-NcQ;|s093ScGee< ze~r4u;$J5V;$J%crLf>i@;5a63yGMKAvYF@f9>5S+MbACgvYifgI~${8-(}I?-PDm zlBY=g((y0!9}0ier2L1XpLP5T@yiazzjXWy*B31o|3W)YxjmFvspDU$V>6xUGXACG zUutjs@%@LlGgJ9-@T-7-akrSluSvwe<|pKDD1YxYjDIENZ>V-9;#cwb*AFL=zoEt= z0l%K+&a@kq|M1H1?-jJ`X+M#pz<(GFd#O2=h+lFICgPV2A{W80g~jnp>`CJA3*Cm3 z=3l|{%cb*Q*XI0JFrQ!2E`_I4$1nK3!!O?^Ooo450e)Tg@voqf`S|!1&e^_N{A&{U zm6Sg}24l{WV*D#P|FE9XF63XX>!F=5!oL#o4<#;-W+iXpe*U~B{&fZ>!@vI9F2=vc zthYG-YDvJa!_XVzUwZudmX?2&XD9Lx55tMc@UQs$4<&4k;jQChKPLQ9!Si3f6aF1| zUgSO{<5$-t@Qd*MVIqEAc18S4>_s*4FLcZAnGF9TJTIi^Sdxq{Yww?@qb|P)F(Lki{HvaGnS}hqQ@vl2iGT6_!}lC{BYjc-;b)y` z$@v>shkw~P*;vdjnSZrR0>7SER5bsvZ(GJoC7u65|Dl}EiT=Znw(6FNi-N=VT8aL{&DgH(D*mO*KYW|MVDSB+%-_)EAHG9= zL^=OT&fgfA1pgw%`PXO%->WCYzfMu<;ELy8b-#eUIUe6h;$N`WEf)Ve+&hW**Ot+6 z{A;H2yiEu@!u(4Y|9XR70?sRokC;A7^GRDgW?Byq`b4*N(q`p2HU2^MBq8 zp8wM3AHuJDUS|9&DSyKqbmQ-z2Tr>#z}KO!2>&`{ev>R<4xEJijW^wYhFe%JUn2i{ zm);pX|1~qRzUH5S{{imgNr-=a0F{D&CFE}m(XH8H{Oef3`7b~Ig-lb~mXmg;IRBN9 zzcFmSMvC#TVYujW9f@C5lYe*?^AEYrlsOE#{6oB7lnVYO@;r6;m8Vak&S(2D$Ad6? zsLMZm9lATY-H`r`g7_D&>PgJY6?IN=yQ<6IIA@Moyw0D%_?H3&iC-oD#nDO~RZ~L3 z`DL}x68(qrH(HkN-@xCeIRR}T;aHViCI0nDiGLN`-%GjMQ2ipysrnBg;rFK$-fwe- z{=?{=UzU{k7wGUy`J*I$!TuGg4)V5hmo;;r5)4`5H83~@*x#Cd%y^hQoWYcSe(1F53K)kA~MO3?h;PwQ6zcu)RjRJa|0ai$z{W;TyF2H-; zTqa;2F(KUrc#GQ#`L6vWoiqLd9)uby1X4q%Z!p?;iC<@u%Hi3dr7)BF!Zssk9)}-e ziLcXQWjia}m9~S-MG2Ib_{0=x=Q39~Ix;sXERm}co3caClK`@$>fMvs?x zQfGflI@h_*ebBDy@`dhn&TC^O)NfadYWIYY?c_b-*ZJ`lE7w`;uC}YXCWJdWXSl1| zs(hXOx%4{YL3n`HObAA;(ZWiId{^f*V+C!`RoAAY0!*|EC~+OzG7TkIbcO4*S-#Hx z)v5dFvD}@tGlN1WFY({Ce|7q?&WCdk)z%zP!gN{U$+1|qI`tTRJ9k&@%mYd=WQkWL z`gxV+IaUL$$lYICFx@Ya?b=ULh3kvr@t;9l zaW_%_Wng8E3Rnq_HzDM}<|RspEvsB`eGS0^)ZrykDQz^6HSKe%t^G>k5tvt)$^*hF~M4G z+_$YYS5vzMOD3MPs=aEh^?*@Bl(0gS1jb@si{0K;?LKaEp~ii@ZC*>oS}fVGs#9i| zl=M3FmJpyGm;kIq=~SfdhhyHI*_ms&FfVJbnR9=73o9YMk{yJAxf~RxOLXvjo%ywG z2b_j2Pp_9k#rpXU@n&bYJU!1>f#&hgjsMs9x$#R;LFr6J$h=j)^p*Gfc5h-r|IdPg z`tM7YuQ@X3!-2!U=E9PopmaX{)jxapn=hPv|2z}Eao5RzJpbvCmw)fh09WqIt1}lgUbS`iNq9Rwe?u%+}u62RRaMX>GbX>D#=t?{*pKt+9ERnFRM+zj{7s(eK7 z=LU{f2$vN=Gh7zWAvj(kTvhQ#w=J#oqR-)eb^4T@=1l0vS43C z@Z@tK4GpBCJyi|+BSJr#6#S4?E3MqV+U)9zs_uwDWgi-Z!SRGSF(p8Y68(A;}zJ81;@NAut(x39KdA-&=a^!R{d$}esXN+&O2sC z1>(1>Edl`w6g*L900zgieOwL+D}0r!ipya*_5u1I)Vrc^?3Y|pIw4$E0L=xZV{XB# zBI-$*6BU$>+Mxynv~4(boC%#RFpq889PkBuiz!Q#Qjk)L|E@}u4vn8=LML_xvdJkw zw%9hZOaJ)(F(lx;Wgpauo69cyLg1|6aa4 z?i(zxtW5awxAj%?`1rWT9v&6cE2CejlIvC{x`b7Us&iloBX&S&L#dSF=c-bf)N^9y zn7_K%8pP>VMC-a)%W`GJuR*kazK(7!`-{5hTAp}L{90xvMSY6&AnL`gW%i8HTGp9@ z-|c!=V;d`E!8O=)%RVZ-ZlzO1l1E1g?;QJ-qFyVfQe1f~7 z)bvshlzO1l1En4)^+2fyKA}B;QGRs(KEE{!6n{c03uMM*x ..\armsrc\fpgaimg.c +perl ..\tools\rbt2c.pl fpga_lf.rbt > ..\armsrc\fpgaimg.c :done diff --git a/fpga/lo_edge_detect.v b/fpga/lo_edge_detect.v index 8458ee692..af600b833 100644 --- a/fpga/lo_edge_detect.v +++ b/fpga/lo_edge_detect.v @@ -7,34 +7,18 @@ //----------------------------------------------------------------------------- module lo_edge_detect( - 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, - divisor, - lf_field + input pck0, input [7:0] pck_cnt, input pck_divclk, + output pwr_lo, output pwr_hi, + output pwr_oe1, output pwr_oe2, output pwr_oe3, output pwr_oe4, + input [7:0] adc_d, output adc_clk, + output ssp_frame, input ssp_dout, output ssp_clk, + input cross_lo, + output dbg, + input lf_field ); - 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 [7:0] divisor; - input lf_field; -// Divide the clock to be used for the ADC -reg [7:0] pck_divider; -reg clk_state; - -wire tag_modulation; -assign tag_modulation = ssp_dout & !lf_field; -wire reader_modulation; -assign reader_modulation = !ssp_dout & lf_field & clk_state; +wire tag_modulation = ssp_dout & !lf_field; +wire reader_modulation = !ssp_dout & lf_field & pck_divclk; // No logic, straight through. assign pwr_oe1 = 1'b0; // not used in LF mode @@ -46,20 +30,7 @@ assign pwr_lo = reader_modulation; assign pwr_hi = 1'b0; assign dbg = ssp_frame; -always @(posedge pck0) -begin - if(pck_divider == divisor[7:0]) - begin - pck_divider <= 8'd0; - clk_state = !clk_state; - end - else - begin - pck_divider <= pck_divider + 1; - end -end - -assign adc_clk = ~clk_state; +assign adc_clk = ~pck_divclk; // Toggle the output with hysteresis // Set to high if the ADC value is above 200 @@ -70,7 +41,7 @@ reg output_state; always @(posedge pck0) begin - if((pck_divider == 8'd7) && !clk_state) begin + if((pck_cnt == 8'd7) && !pck_divclk) begin is_high = (adc_d >= 8'd190); is_low = (adc_d <= 8'd70); end diff --git a/fpga/lo_passthru.v b/fpga/lo_passthru.v index 5c59d11ca..933728eb0 100644 --- a/fpga/lo_passthru.v +++ b/fpga/lo_passthru.v @@ -4,42 +4,14 @@ //----------------------------------------------------------------------------- module lo_passthru( - 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, divisor + input pck_divclk, + output pwr_lo, output pwr_hi, + output pwr_oe1, output pwr_oe2, output pwr_oe3, output pwr_oe4, + output adc_clk, + output ssp_din, input ssp_dout, + input cross_lo, + output dbg ); - 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 [7:0] divisor; - -reg [7:0] pck_divider; -reg ant_lo; - -// this task runs on the rising egde of pck0 clock (24Mhz) and creates ant_lo -// which is high for (divisor+1) pck0 cycles and low for the same duration -// ant_lo is therefore a 50% duty cycle clock signal with a frequency of -// 12Mhz/(divisor+1) which drives the antenna as well as the ADC clock adc_clk -always @(posedge pck0) -begin - if(pck_divider == divisor[7:0]) - begin - pck_divider <= 8'd0; - ant_lo = !ant_lo; - end - else - begin - pck_divider <= pck_divider + 1; - end -end // the antenna is modulated when ssp_dout = 1, when 0 the // antenna drivers stop modulating and go into listen mode @@ -47,7 +19,7 @@ assign pwr_oe3 = 1'b0; assign pwr_oe1 = ssp_dout; assign pwr_oe2 = ssp_dout; assign pwr_oe4 = ssp_dout; -assign pwr_lo = ant_lo && ssp_dout; +assign pwr_lo = pck_divclk && ssp_dout; assign pwr_hi = 1'b0; assign adc_clk = 1'b0; assign ssp_din = cross_lo; diff --git a/fpga/lo_read.v b/fpga/lo_read.v index e6f245ca6..f2d79127c 100644 --- a/fpga/lo_read.v +++ b/fpga/lo_read.v @@ -7,65 +7,34 @@ //----------------------------------------------------------------------------- module lo_read( - 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, - lo_is_125khz, divisor + input pck0, input [7:0] pck_cnt, input pck_divclk, + output pwr_lo, output pwr_hi, + output pwr_oe1, output pwr_oe2, output pwr_oe3, output pwr_oe4, + input [7:0] adc_d, output adc_clk, + output ssp_frame, output ssp_din, output ssp_clk, + output dbg ); - 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 lo_is_125khz; // redundant signal, no longer used anywhere - input [7:0] divisor; reg [7:0] to_arm_shiftreg; -reg [7:0] pck_divider; -reg ant_lo; - -// this task runs on the rising egde of pck0 clock (24Mhz) and creates ant_lo -// which is high for (divisor+1) pck0 cycles and low for the same duration -// ant_lo is therefore a 50% duty cycle clock signal with a frequency of -// 12Mhz/(divisor+1) which drives the antenna as well as the ADC clock adc_clk -always @(posedge pck0) -begin - if(pck_divider == divisor[7:0]) - begin - pck_divider <= 8'd0; - ant_lo = !ant_lo; - end - else - begin - pck_divider <= pck_divider + 1; - end -end // this task also runs at pck0 frequency (24Mhz) and is used to serialize // the ADC output which is then clocked into the ARM SSP. -// because ant_lo always transitions when pck_divider = 0 we use the -// pck_divider counter to sync our other signals off it -// we read the ADC value when pck_divider=7 and shift it out on counts 8..15 +// because pck_divclk always transitions when pck_cnt = 0 we use the +// pck_div counter to sync our other signals off it +// we read the ADC value when pck_cnt=7 and shift it out on counts 8..15 always @(posedge pck0) begin - if((pck_divider == 8'd7) && !ant_lo) - to_arm_shiftreg <= adc_d; - else - begin - to_arm_shiftreg[7:1] <= to_arm_shiftreg[6:0]; + if((pck_cnt == 8'd7) && !pck_divclk) + to_arm_shiftreg <= adc_d; + else begin + to_arm_shiftreg[7:1] <= to_arm_shiftreg[6:0]; // simulation showed a glitch occuring due to the LSB of the shifter // not being set as we shift bits out // this ensures the ssp_din remains low after a transfer and suppresses // the glitch that would occur when the last data shifted out ended in // a 1 bit and the next data shifted out started with a 0 bit - to_arm_shiftreg[0] <= 1'b0; + to_arm_shiftreg[0] <= 1'b0; end end @@ -83,11 +52,11 @@ end // ssp_clk |_| |_| |_| |_| |_| |_| |_| |_| |_| |_ // serialized SSP data is gated by ant_lo to suppress unwanted signal -assign ssp_din = to_arm_shiftreg[7] && !ant_lo; +assign ssp_din = to_arm_shiftreg[7] && !pck_divclk; // SSP clock always runs at 24Mhz assign ssp_clk = pck0; // SSP frame is gated by ant_lo and goes high when pck_divider=8..15 -assign ssp_frame = (pck_divider[7:3] == 5'd1) && !ant_lo; +assign ssp_frame = (pck_cnt[7:3] == 5'd1) && !pck_divclk; // unused signals tied low assign pwr_hi = 1'b0; assign pwr_oe1 = 1'b0; @@ -95,9 +64,9 @@ assign pwr_oe2 = 1'b0; assign pwr_oe3 = 1'b0; assign pwr_oe4 = 1'b0; // this is the antenna driver signal -assign pwr_lo = ant_lo; +assign pwr_lo = pck_divclk; // ADC clock out of phase with antenna driver -assign adc_clk = ~ant_lo; +assign adc_clk = ~pck_divclk; // ADC clock also routed to debug pin assign dbg = adc_clk; endmodule diff --git a/fpga/xst.scr b/fpga/xst.scr deleted file mode 100644 index 406bbeee7..000000000 --- a/fpga/xst.scr +++ /dev/null @@ -1 +0,0 @@ -run -ifn fpga.v -ifmt Verilog -ofn fpga.ngc -ofmt NGC -p xc2s30-5-vq100 -opt_mode Speed -opt_level 1 -ent fpga diff --git a/fpga/xst_hf.scr b/fpga/xst_hf.scr new file mode 100644 index 000000000..dd2fdc859 --- /dev/null +++ b/fpga/xst_hf.scr @@ -0,0 +1 @@ +run -ifn fpga_hf.v -ifmt Verilog -ofn fpga_hf.ngc -ofmt NGC -p xc2s30-5-vq100 -top fpga_hf -opt_mode area -opt_level 2 -resource_sharing yes -fsm_style bram -fsm_encoding compact diff --git a/fpga/xst_lf.scr b/fpga/xst_lf.scr new file mode 100644 index 000000000..2d6c7e951 --- /dev/null +++ b/fpga/xst_lf.scr @@ -0,0 +1 @@ +run -ifn fpga_lf.v -ifmt Verilog -ofn fpga_lf.ngc -ofmt NGC -p xc2s30-5-vq100 -top fpga_lf -opt_mode area -opt_level 2 -resource_sharing yes -fsm_style bram -fsm_encoding compact diff --git a/include/proxmark3.h b/include/proxmark3.h index ce263ca11..8c9417da5 100644 --- a/include/proxmark3.h +++ b/include/proxmark3.h @@ -60,6 +60,10 @@ #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 From 62638f87dba4d889dbbee1a88d37a3b8a3d30d78 Mon Sep 17 00:00:00 2001 From: iZsh Date: Fri, 20 Jun 2014 12:29:58 +0200 Subject: [PATCH 23/49] armsrc/fpgaloader.c: forgot the copyright notice --- armsrc/fpgaloader.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/armsrc/fpgaloader.c b/armsrc/fpgaloader.c index 2f996bc57..077b378a9 100644 --- a/armsrc/fpgaloader.c +++ b/armsrc/fpgaloader.c @@ -1,5 +1,6 @@ //----------------------------------------------------------------------------- // Jonathan Westhues, April 2006 +// iZsh , 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 @@ -8,7 +9,6 @@ // Routines to load the FPGA image, and then to configure the FPGA's major // mode once it is configured. //----------------------------------------------------------------------------- - #include "proxmark3.h" #include "apps.h" #include "util.h" From fa57f6e12e23c7b78d24902926d1122b31cb2c67 Mon Sep 17 00:00:00 2001 From: iZsh Date: Fri, 20 Jun 2014 12:38:58 +0200 Subject: [PATCH 24/49] fpga/fpga_hf.v, fpga_lf.v, lo_edge_detect.v, lo_passthru.v, lo_read.v: copyright notice --- fpga/fpga_hf.v | 1 + fpga/fpga_lf.v | 2 +- fpga/lo_edge_detect.v | 1 + fpga/lo_passthru.v | 1 + fpga/lo_read.v | 1 + 5 files changed, 5 insertions(+), 1 deletion(-) diff --git a/fpga/fpga_hf.v b/fpga/fpga_hf.v index ff7c904a5..a2100df65 100644 --- a/fpga/fpga_hf.v +++ b/fpga/fpga_hf.v @@ -10,6 +10,7 @@ // // Jonathan Westhues, March 2006 // Added ISO14443-A support by Gerhard de Koning Gans, April 2008 +// iZsh , June 2014 //----------------------------------------------------------------------------- `include "hi_read_tx.v" diff --git a/fpga/fpga_lf.v b/fpga/fpga_lf.v index 8dea68d75..1e20aa903 100644 --- a/fpga/fpga_lf.v +++ b/fpga/fpga_lf.v @@ -9,7 +9,7 @@ // could be improved. // // Jonathan Westhues, March 2006 -// Added ISO14443-A support by Gerhard de Koning Gans, April 2008 +// iZsh , June 2014 //----------------------------------------------------------------------------- `include "lo_read.v" diff --git a/fpga/lo_edge_detect.v b/fpga/lo_edge_detect.v index af600b833..2856e5c65 100644 --- a/fpga/lo_edge_detect.v +++ b/fpga/lo_edge_detect.v @@ -4,6 +4,7 @@ // (because it is so slow). // // Jonathan Westhues, April 2006 +// iZsh , June 2014 //----------------------------------------------------------------------------- module lo_edge_detect( diff --git a/fpga/lo_passthru.v b/fpga/lo_passthru.v index 933728eb0..3507f660e 100644 --- a/fpga/lo_passthru.v +++ b/fpga/lo_passthru.v @@ -2,6 +2,7 @@ // For reading TI tags, we need to place the FPGA in pass through mode // and pass everything through to the ARM //----------------------------------------------------------------------------- +// iZsh , June 2014 module lo_passthru( input pck_divclk, diff --git a/fpga/lo_read.v b/fpga/lo_read.v index f2d79127c..b1fa7fc70 100644 --- a/fpga/lo_read.v +++ b/fpga/lo_read.v @@ -4,6 +4,7 @@ // The A/D samples at that same rate and the result is serialized. // // Jonathan Westhues, April 2006 +// iZsh , June 2014 //----------------------------------------------------------------------------- module lo_read( From b014c96d685962e4d4eea887b211397ba17fbf3d Mon Sep 17 00:00:00 2001 From: iZsh Date: Sat, 21 Jun 2014 21:33:54 +0200 Subject: [PATCH 25/49] new command "lf snoop" to snoop raw ADC values fpga/lo_read.v (lf_field): new argument. fpga/fpga_lf.v: modify accordingly. armsrc/apps.h (FPGA_MAJOR_MODE_LF_READER): Rename as FPGA_MAJOR_MODE_LF_ADC. armsrc/apps.h (FPGA_LF_ADC_READER_FIELD): New LF option. armsrc/lfops.c: Modify accordingly. client/cmdlf.c (CmdLFSnoop): New command. armsrc/appmain.c, armsrc/lfops.c, client/cmdlf.h, include/usb_cmd.h: Modify accordingly. --- armsrc/appmain.c | 6 ++++- armsrc/apps.h | 9 ++++--- armsrc/lfops.c | 60 +++++++++++++++++++++++++++------------------- client/cmdlf.c | 23 ++++++++++++++++++ client/cmdlf.h | 1 + fpga/fpga_lf.bit | Bin 42175 -> 42175 bytes fpga/fpga_lf.v | 2 +- fpga/lo_read.v | 5 ++-- include/usb_cmd.h | 1 + 9 files changed, 75 insertions(+), 32 deletions(-) diff --git a/armsrc/appmain.c b/armsrc/appmain.c index b7bc87e70..8c224b6a1 100644 --- a/armsrc/appmain.c +++ b/armsrc/appmain.c @@ -215,7 +215,7 @@ void MeasureAntennaTuning(void) */ FpgaDownloadAndGo(FPGA_BITSTREAM_LF); - FpgaWriteConfWord(FPGA_MAJOR_MODE_LF_READER); + FpgaWriteConfWord(FPGA_MAJOR_MODE_LF_ADC | FPGA_LF_ADC_READER_FIELD); for (i=255; i>19; i--) { WDT_HIT(); FpgaSendCommand(FPGA_CMD_SET_DIVISOR, i); @@ -638,6 +638,10 @@ void UsbPacketReceived(uint8_t *packet, int len) case CMD_MOD_THEN_ACQUIRE_RAW_ADC_SAMPLES_125K: ModThenAcquireRawAdcSamples125k(c->arg[0],c->arg[1],c->arg[2],c->d.asBytes); break; + case CMD_LF_SNOOP_RAW_ADC_SAMPLES: + SnoopLFRawAdcSamples(c->arg[0], c->arg[1]); + cmd_send(CMD_ACK,0,0,0,0,0); + break; case CMD_HID_DEMOD_FSK: CmdHIDdemodFSK(0, 0, 0, 1); // Demodulate HID tag break; diff --git a/armsrc/apps.h b/armsrc/apps.h index 76d1247a9..4c7fa1900 100644 --- a/armsrc/apps.h +++ b/armsrc/apps.h @@ -59,7 +59,8 @@ void ToSendStuffBit(int b); void ToSendReset(void); void ListenReaderField(int limit); void AcquireRawAdcSamples125k(int at134khz); -void DoAcquisition125k(void); +void SnoopLFRawAdcSamples(int divisor, int trigger_threshold); +void DoAcquisition125k(int trigger_threshold); extern int ToSendMax; extern uint8_t ToSend[]; extern uint32_t BigBuf[]; @@ -82,8 +83,8 @@ void SetAdcMuxFor(uint32_t whichGpio); #define FPGA_CMD_SET_DIVISOR (2<<12) // Definitions for the FPGA configuration word. // LF -#define FPGA_MAJOR_MODE_LF_READER (0<<5) -#define FPGA_MAJOR_MODE_LF_EDGE_DETECT (1<<5) +#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) @@ -92,6 +93,8 @@ void SetAdcMuxFor(uint32_t whichGpio); #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_LF_EDGE_DETECT_READER_FIELD (1<<0) // Options for the HF reader, tx to tag diff --git a/armsrc/lfops.c b/armsrc/lfops.c index a0fa870b6..6b131c261 100644 --- a/armsrc/lfops.c +++ b/armsrc/lfops.c @@ -15,7 +15,7 @@ #include "crc16.h" #include "string.h" -void AcquireRawAdcSamples125k(int divisor) +void LFSetupFPGAForADC(int divisor, bool lf_field) { FpgaDownloadAndGo(FPGA_BITSTREAM_LF); if ( (divisor == 1) || (divisor < 0) || (divisor > 255) ) @@ -25,23 +25,30 @@ void AcquireRawAdcSamples125k(int divisor) else FpgaSendCommand(FPGA_CMD_SET_DIVISOR, divisor); - FpgaWriteConfWord(FPGA_MAJOR_MODE_LF_READER); + FpgaWriteConfWord(FPGA_MAJOR_MODE_LF_ADC | (lf_field ? FPGA_LF_ADC_READER_FIELD : 0)); // Connect the A/D to the peak-detected low-frequency path. SetAdcMuxFor(GPIO_MUXSEL_LOPKD); - // Give it a bit of time for the resonant antenna to settle. SpinDelay(50); - // Now set up the SSC to get the ADC samples that are now streaming at us. FpgaSetupSsc(); +} - // Now call the acquisition routine - DoAcquisition125k(); +void AcquireRawAdcSamples125k(int divisor) +{ + LFSetupFPGAForADC(divisor, true); + DoAcquisition125k(-1); +} + +void SnoopLFRawAdcSamples(int divisor, int trigger_threshold) +{ + LFSetupFPGAForADC(divisor, false); + DoAcquisition125k(trigger_threshold); } // split into two routines so we can avoid timing issues after sending commands // -void DoAcquisition125k(void) +void DoAcquisition125k(int trigger_threshold) { uint8_t *dest = (uint8_t *)BigBuf; int n = sizeof(BigBuf); @@ -56,9 +63,12 @@ void DoAcquisition125k(void) } if (AT91C_BASE_SSC->SSC_SR & AT91C_SSC_RXRDY) { dest[i] = (uint8_t)AT91C_BASE_SSC->SSC_RHR; - i++; LED_D_OFF(); - if (i >= n) break; + if (trigger_threshold != -1 && dest[i] < trigger_threshold) + continue; + else + trigger_threshold = -1; + if (++i >= n) break; } } Dbprintf("buffer samples: %02x %02x %02x %02x %02x %02x %02x %02x ...", @@ -85,7 +95,7 @@ void ModThenAcquireRawAdcSamples125k(int delay_off, int period_0, int period_1, else FpgaSendCommand(FPGA_CMD_SET_DIVISOR, 95); //125Khz - FpgaWriteConfWord(FPGA_MAJOR_MODE_LF_READER); + FpgaWriteConfWord(FPGA_MAJOR_MODE_LF_ADC | FPGA_LF_ADC_READER_FIELD); // Give it a bit of time for the resonant antenna to settle. SpinDelay(50); @@ -105,7 +115,7 @@ void ModThenAcquireRawAdcSamples125k(int delay_off, int period_0, int period_1, else FpgaSendCommand(FPGA_CMD_SET_DIVISOR, 95); //125Khz - FpgaWriteConfWord(FPGA_MAJOR_MODE_LF_READER); + FpgaWriteConfWord(FPGA_MAJOR_MODE_LF_ADC | FPGA_LF_ADC_READER_FIELD); LED_D_ON(); if(*(command++) == '0') SpinDelayUs(period_0); @@ -120,10 +130,10 @@ void ModThenAcquireRawAdcSamples125k(int delay_off, int period_0, int period_1, else FpgaSendCommand(FPGA_CMD_SET_DIVISOR, 95); //125Khz - FpgaWriteConfWord(FPGA_MAJOR_MODE_LF_READER); + FpgaWriteConfWord(FPGA_MAJOR_MODE_LF_ADC | FPGA_LF_ADC_READER_FIELD); // now do the read - DoAcquisition125k(); + DoAcquisition125k(-1); } /* blank r/w tag data stream @@ -609,7 +619,7 @@ void CmdHIDdemodFSK(int findone, int *high, int *low, int ledcontrol) FpgaDownloadAndGo(FPGA_BITSTREAM_LF); FpgaSendCommand(FPGA_CMD_SET_DIVISOR, 95); //125Khz - FpgaWriteConfWord(FPGA_MAJOR_MODE_LF_READER); + FpgaWriteConfWord(FPGA_MAJOR_MODE_LF_ADC | FPGA_LF_ADC_READER_FIELD); // Connect the A/D to the peak-detected low-frequency path. SetAdcMuxFor(GPIO_MUXSEL_LOPKD); @@ -823,7 +833,7 @@ void CmdIOdemodFSK(int findone, int *high, int *low, int ledcontrol) FpgaDownloadAndGo(FPGA_BITSTREAM_LF); FpgaSendCommand(FPGA_CMD_SET_DIVISOR, 95); //125Khz - FpgaWriteConfWord(FPGA_MAJOR_MODE_LF_READER); + FpgaWriteConfWord(FPGA_MAJOR_MODE_LF_ADC | FPGA_LF_ADC_READER_FIELD); // Connect the A/D to the peak-detected low-frequency path. SetAdcMuxFor(GPIO_MUXSEL_LOPKD); @@ -1141,7 +1151,7 @@ void T55xxWriteBit(int bit) { FpgaDownloadAndGo(FPGA_BITSTREAM_LF); FpgaSendCommand(FPGA_CMD_SET_DIVISOR, 95); //125Khz - FpgaWriteConfWord(FPGA_MAJOR_MODE_LF_READER); + FpgaWriteConfWord(FPGA_MAJOR_MODE_LF_ADC | FPGA_LF_ADC_READER_FIELD); if (bit == 0) SpinDelayUs(WRITE_0); else @@ -1157,7 +1167,7 @@ void T55xxWriteBlock(uint32_t Data, uint32_t Block, uint32_t Pwd, uint8_t PwdMod FpgaDownloadAndGo(FPGA_BITSTREAM_LF); FpgaSendCommand(FPGA_CMD_SET_DIVISOR, 95); //125Khz - FpgaWriteConfWord(FPGA_MAJOR_MODE_LF_READER); + 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 @@ -1189,7 +1199,7 @@ void T55xxWriteBlock(uint32_t Data, uint32_t Block, uint32_t Pwd, uint8_t PwdMod // Now 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_READER); + FpgaWriteConfWord(FPGA_MAJOR_MODE_LF_ADC | FPGA_LF_ADC_READER_FIELD); SpinDelay(20); FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF); } @@ -1211,7 +1221,7 @@ void T55xxReadBlock(uint32_t Block, uint32_t Pwd, uint8_t PwdMode) LED_D_ON(); FpgaSendCommand(FPGA_CMD_SET_DIVISOR, 95); //125Khz - FpgaWriteConfWord(FPGA_MAJOR_MODE_LF_READER); + 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 @@ -1237,7 +1247,7 @@ void T55xxReadBlock(uint32_t Block, uint32_t Pwd, uint8_t PwdMode) // Turn field on to read the response FpgaSendCommand(FPGA_CMD_SET_DIVISOR, 95); //125Khz - FpgaWriteConfWord(FPGA_MAJOR_MODE_LF_READER); + FpgaWriteConfWord(FPGA_MAJOR_MODE_LF_ADC | FPGA_LF_ADC_READER_FIELD); // Now do the acquisition i = 0; @@ -1276,7 +1286,7 @@ void T55xxReadTrace(void){ LED_D_ON(); FpgaSendCommand(FPGA_CMD_SET_DIVISOR, 95); //125Khz - FpgaWriteConfWord(FPGA_MAJOR_MODE_LF_READER); + 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 @@ -1292,7 +1302,7 @@ void T55xxReadTrace(void){ // Turn field on to read the response FpgaSendCommand(FPGA_CMD_SET_DIVISOR, 95); //125Khz - FpgaWriteConfWord(FPGA_MAJOR_MODE_LF_READER); + FpgaWriteConfWord(FPGA_MAJOR_MODE_LF_ADC | FPGA_LF_ADC_READER_FIELD); // Now do the acquisition i = 0; @@ -1983,7 +1993,7 @@ void SendForward(uint8_t fwd_bit_count) { //Field on FpgaDownloadAndGo(FPGA_BITSTREAM_LF); FpgaSendCommand(FPGA_CMD_SET_DIVISOR, 95); //125Khz - FpgaWriteConfWord(FPGA_MAJOR_MODE_LF_READER); + 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 @@ -1995,7 +2005,7 @@ void SendForward(uint8_t fwd_bit_count) { 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_READER);//field on + FpgaWriteConfWord(FPGA_MAJOR_MODE_LF_ADC | FPGA_LF_ADC_READER_FIELD);//field on SpinDelayUs(16*8); //16 cycles on (8us each) // now start writting @@ -2007,7 +2017,7 @@ void SendForward(uint8_t fwd_bit_count) { 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_READER);//field on + FpgaWriteConfWord(FPGA_MAJOR_MODE_LF_ADC | FPGA_LF_ADC_READER_FIELD);//field on SpinDelayUs(9*8); //16 cycles on (8us each) } } diff --git a/client/cmdlf.c b/client/cmdlf.c index 387e60d58..22aa1e059 100644 --- a/client/cmdlf.c +++ b/client/cmdlf.c @@ -450,6 +450,28 @@ int CmdLFSimManchester(const char *Cmd) return 0; } +int CmdLFSnoop(const char *Cmd) +{ + UsbCommand c = {CMD_LF_SNOOP_RAW_ADC_SAMPLES}; + // 'h' means higher-low-frequency, 134 kHz + c.arg[0] = 0; + c.arg[1] = -1; + if (*Cmd == 0) { + // empty + } else if (*Cmd == 'l') { + sscanf(Cmd, "l %"lli, &c.arg[1]); + } else if(*Cmd == 'h') { + c.arg[0] = 1; + sscanf(Cmd, "h %"lli, &c.arg[1]); + } else if (sscanf(Cmd, "%"lli" %"lli, &c.arg[0], &c.arg[1]) < 1) { + PrintAndLog("use 'snoop' or 'snoop {l,h} [trigger threshold]', or 'snoop [trigger threshold]'"); + return 0; + } + SendCommand(&c); + WaitForResponse(CMD_ACK,NULL); + return 0; +} + int CmdVchDemod(const char *Cmd) { // Is this the entire sync pattern, or does this also include some @@ -540,6 +562,7 @@ static command_t CommandTable[] = {"sim", CmdLFSim, 0, "[GAP] -- Simulate LF tag from buffer with optional GAP (in microseconds)"}, {"simbidir", CmdLFSimBidir, 0, "Simulate LF tag (with bidirectional data transmission between reader and tag)"}, {"simman", CmdLFSimManchester, 0, " [GAP] Simulate arbitrary Manchester LF tag"}, + {"snoop", CmdLFSnoop, 0, "['l'|'h'|] [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"}, diff --git a/client/cmdlf.h b/client/cmdlf.h index 471e4e0cb..7278754b8 100644 --- a/client/cmdlf.h +++ b/client/cmdlf.h @@ -21,6 +21,7 @@ int CmdLFRead(const char *Cmd); int CmdLFSim(const char *Cmd); int CmdLFSimBidir(const char *Cmd); int CmdLFSimManchester(const char *Cmd); +int CmdLFSnoop(const char *Cmd); int CmdVchDemod(const char *Cmd); #endif diff --git a/fpga/fpga_lf.bit b/fpga/fpga_lf.bit index 133ea9924b546523b0128737e5082cc723406319..d9c7515ea737c6ae3bcddf7d21fc3c9ed2220795 100644 GIT binary patch delta 7464 zcmaKx3v?6bmB;UV-;6wx#@2xCApFwkK@dikWgC)|I`;4gID{1Q$fMn~RZ|X2Taq}B zZD~pH7(2niG&s5JDcjN^l6bvK{JfmrlX$-??B2lNflsZQGd?VjkYhrhjK=pSA*Ae=g6B(3<0z9S8xfMZC{q37si0^Z~TIRU*yK^`@J>ngw$m3 z?Bnl)^As)9_P{}?vAu2V?VM51G}x9q@}`^=7qsD7IGCHpJ2_)BtAcI#gr~~YlMoAo z?{j+SC>+Nkxk}z?aT^n|;aaKl2pq#ZWg6GZBJd=BPYx)%9qU=yxXmM59S}3UI(tnL zH-i4cB#c25_$;2u8IOAnHrVPM`GB{IF}o{A;0!dGzFtlSBV!jIG109U$`R*waV1a< z9s{}|4ql6$%x$Tv48V)In~fXOJ+iBV;dhjP>=ASOk`{E%-=YP$#Ro8>1eFf*twB7h z1r&=#VLMj40!lwEP$w1@2C5%o6|hZr7H>4SKhLXGIgj2n;o9HpDN^4^;SXF@(gFN- zVT5^whleHdZ+gR#!Z2<3Vf2u9$KVpii>lbp1i5#3Za;6N?Q0PGXfJWxvP0gO=QE6a z<`B8uVF=-#qJZO1p=Z>pYTA)B7{YnSmlX;(!nvIHopy|sS#OMt`t;!X8`EN+= z^9?P_AGJ?e4Wor)JUi~=`Uh}07a76`CA-Ji&Cv6F_!CvciXrx6P?-o3ij~7~z2&K6 zw?mI%*zN>-kI+J|t70Xz(9=f~?}3o5_OYz+GF05Y_K)EP7Vj(G$X@T;XMbOWinHSx zDc_;>=4fG-zYUix3a2a|13DXEt^UHKM+B{}_%u5K^|qEDa?+KE?T+cnrbXvz7W3_B zANvSQ{C8H;z8gNrhSW}4KQ+O|z?ndwRCOf)4p=qDlaI2Ku+y3~qE3p;v=f=M3?G?| zmYOIYVy{EO))IWG$UG0tK=Z$l{1gJ>L55x8L2x~v=Fxq9i%%0T_Kjjk)r>n2Kn?Rg zOqbmY#+%VLHXfE%eptRlv+{0c?^xTc;3&;13kF>cT1xUZrw?L&hiE?)Plq4y>$Ho| zw9l7XJPIeF9(!XItt&0vhB3q!E=yhqhahfx zd)Wva8jP>%*-ge<*YtKBn`O*ZqhT*pQA$t zUM8c*3JG3>K)uY1me24)U*08mfMKcvR|#xa{K{VEnJVJt?YH=J?_PGSb)OmQ<)gAQ zmkrY1E2N_Mdv9egUq{Gl6zn>l^V=w-@`z_PLBJ}u+2F!@h*|u2F2bTpRLs)yrr0RF zY?AS3eH6Ass9R03;|_T6rMR!%p!9STxruPz?gahfIB!a-xI*~-YK`S>TQp?tG@i57 zHoBfkD*{(zYs5?ZGTzAaWwcHFeI|y0TA3GN1YnWN{$hP>I>u|{ytt&K*qzb_c~j(+ z-GIrG@-?<+)$~T#3D4P-U*6AU6M(#o^AaT*ng(GMf?|xFb6X?dZTCTJz>^TrHB+`1 zPu9-xQs`4yH^QmRK5Q%SyU1aOSL#GfqqgBSniu_|HY}l_8V9FE;QY}A5C0}<&N)xWkMA~w0E_+lt9b~YR?BWrdHX%r6Ig4;uB|p$RYiN(H z-o8)-$5cvFzMJ?gyoUu`qrOl0Cn|Q_UsY@RQoNR2@hTYRMnp z=}vj)Ikz>iZEj`FpV)P9z?zep%)6_Vh(eNtc!vvkx%wc_nj}8{6Ti&MT2r)J@`M1& zQyw?wD-TZ_D-p_Lko;h3^(_?W12BE%06Bu*GOcpS3^ATSw{{${T(<*^6p2L_j31iKs zHq7_Khr~01v7B_f34c|i#|tfHr~+nJ(DfOqL&SPQc#x^$_mnb^yKig6I^=x)iso-` zY}5Sw=MJeNm)RA~XBS2La^J4b5%pZq(Onbl((~DslWhjAdOgs?PRTB)?eLCWMfz0WB8|GWM}Xp0D`+pjCb%-b4U4PfPrK8ZIR4O8-k#tj zc#NiZ3j4S~lz2%ONjfxVd}CY~H)pglsst`s4Z^T8FMyuBtAZN3-#+fbFfuaYs`+ zkN27S%hStLbt}1t>M#%ktkk3K_B;SvfzeuCRLk5&FY{_R4)p{0`)Yq(4#8t^5t=i# zmsO&9l}fZJnnvj)3M>32EAvpGjLJ`CXeo$+eh+=p0k)MG(>AvvuHMalXFg%qB(F(9 zT7I1mve#&@1O>|qYHgl{i+=nEUfHVkE~W}8mo~02P@YtMsl&_-L*PmJV^(Lf#s`cg(C1=G}IcsRu$JsIPijQ8~X$orqXhP zFST!WezNyWw0R*GDrN50nC^|4$Mggyl=7OWx_x^Hc33~Tc0E^Ps;#WVdfYH@lTx9o zYgtLxYAPd;z>+)s0+3P*I#)l&eM= z83XuOVVOHgJh}mfx*9O!DqBN*X=C$@9XXjaHG^tEH9fldI1$o&g+W-GJS-})pN zBUo5eu4?;vjeZ=`m?)}ft?l!khO-pYE3XL}OK40u^>@lrsI^p^y!c<8vb4-YS*LG# zL?(6pj9R|Rq_vAc3P{OKA_+aVO?Y#F2O2Ck^kd>4S9De7WZ;2MMAij(6*sC+OFcw@ z`=rIV(Y-?&NT2!AYGuBFdxM~S)^sweJ-L*1x;<3WLiO*jNUyrApDUV$Puw;W-<_i~3gZvwm=a5W zblYnR&MS&YBly;;r4mD9^)e}h8&BV+M9f$jHjU*8(D~1 z3oywHS-sG55W84VI*aSw5oX76XibO>YnWXVFX=-6O6gSbrJiv1SOzWu@RH1 z!n_nTOQ2(-Dn!dw$}d{;akndY{aIKbJbqk8(Y}~@GHP5;UFgMkU7^_r5>8KSVw+%( zly`^mUgLgtAC6LMcb~NpwW3fc>FoOWDZ5Al&KPn2b zLk3D|RtH>ByPS3uEAOA_ za-9|!!1Gi+oi7=a#jb`}?~T}Xzabl0wF#qNGq~}23r{fGC)!sQD(J3pnzA_afl6ux z+{lC6yrff>H~0t8P5T_ut*d&d*!Msw>)J|{OOUfp9skTj?4(UG8*s7T!qfN}<2=?;;{1e6nS z*iNBd7?}PRsa7YgO!$V1(()4isZ~eL5s*f4Q{gP>ReZ-4l>gg2Xdo{Lu>%bMSQt=T zBkGI8=q)nj44gBuw#b-GhT-h@wd5@A*T--QUn&U7e}yM)+G#@`fgYRo+K>h?Ra$|K zkLU!z+aIY+e^dRPOS|HXk!BpeFEEYZ-s@04n`==GqPb!jE@Lz5GtR9Ca#Ww(T%4%f zFBy){j5imT;P8qtrtdGo&FkGb%;v7kN_ic@%e`@G!U?xHpA*s4tGDti=g@Ap$R6US$!VD#Wa<2Ccl1qgplRPRk zJDV%Uu2jA%DISyXpI23$gB)_0=+T8GA`bBPEr!crI!keK(}OLp<{pyl1jcJ zj!2d>fVz{57+98Js45di3Zla3aE`$E%x*EIq;xmj38j`IjBn$7D=rn{I;)->;0M-C z^pCk=YvIZWU7i67@h8gMh3v!Tqv@k9EfJ>zy;CC~ofDD6PWL&aX(c ziCtl7clujhmpJ_s?_1qBFud=nQ2O=lEs`{Z+KvkKVWvYD1cxxOqe3&CXYUXVTfppg ge}U;NMG(KUqf%|i-G3;(XUDM_Y{d%v$Gvy|KZ&AyH~;_u delta 7393 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 diff --git a/fpga/fpga_lf.v b/fpga/fpga_lf.v index 1e20aa903..819763759 100644 --- a/fpga/fpga_lf.v +++ b/fpga/fpga_lf.v @@ -80,7 +80,7 @@ lo_read lr( lr_pwr_lo, lr_pwr_hi, lr_pwr_oe1, lr_pwr_oe2, lr_pwr_oe3, lr_pwr_oe4, adc_d, lr_adc_clk, lr_ssp_frame, lr_ssp_din, lr_ssp_clk, - lr_dbg + lr_dbg, lf_field ); lo_passthru lp( diff --git a/fpga/lo_read.v b/fpga/lo_read.v index b1fa7fc70..a6d077b99 100644 --- a/fpga/lo_read.v +++ b/fpga/lo_read.v @@ -13,7 +13,8 @@ module lo_read( output pwr_oe1, output pwr_oe2, output pwr_oe3, output pwr_oe4, input [7:0] adc_d, output adc_clk, output ssp_frame, output ssp_din, output ssp_clk, - output dbg + output dbg, + input lf_field ); reg [7:0] to_arm_shiftreg; @@ -65,7 +66,7 @@ assign pwr_oe2 = 1'b0; assign pwr_oe3 = 1'b0; assign pwr_oe4 = 1'b0; // this is the antenna driver signal -assign pwr_lo = pck_divclk; +assign pwr_lo = lf_field & pck_divclk; // ADC clock out of phase with antenna driver assign adc_clk = ~pck_divclk; // ADC clock also routed to debug pin diff --git a/include/usb_cmd.h b/include/usb_cmd.h index 9c25555df..4b1fc2b68 100644 --- a/include/usb_cmd.h +++ b/include/usb_cmd.h @@ -96,6 +96,7 @@ typedef struct { #define CMD_ISO_15693_COMMAND_DONE 0x0314 #define CMD_ISO_15693_FIND_AFI 0x0315 #define CMD_ISO_15693_DEBUG 0x0316 +#define CMD_LF_SNOOP_RAW_ADC_SAMPLES 0x0317 // For Hitag2 transponders #define CMD_SNOOP_HITAG 0x0370 From 72b1090acf6b16cb5596d0591af82fd726537113 Mon Sep 17 00:00:00 2001 From: pwpiwi Date: Thu, 26 Jun 2014 07:57:49 +0200 Subject: [PATCH 26/49] Bugfixes: - Byteorder was wrong when displaying ATQA in hf 14a read - 7 Byte UIDs were truncated to 4 Bytes when displaying in hf 14a cuids --- client/cmdhf14a.c | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/client/cmdhf14a.c b/client/cmdhf14a.c index d16d71ff0..c469b48a1 100644 --- a/client/cmdhf14a.c +++ b/client/cmdhf14a.c @@ -196,7 +196,7 @@ int CmdHF14AReader(const char *Cmd) return 0; } - PrintAndLog("ATQA : %02x %02x", card->atqa[0], card->atqa[1]); + PrintAndLog("ATQA : %02x %02x", card->atqa[1], card->atqa[0]); PrintAndLog(" UID : %s", sprint_hex(card->uid, card->uidlen)); PrintAndLog(" SAK : %02x [%d]", card->sak, resp.arg[0]); @@ -357,23 +357,20 @@ int CmdHF14ACUIDs(const char *Cmd) UsbCommand c = {CMD_READER_ISO_14443a, {ISO14A_CONNECT, 0, 0}}; SendCommand(&c); - UsbCommand resp; - WaitForResponse(CMD_ACK,&resp); + UsbCommand resp; + WaitForResponse(CMD_ACK,&resp); - uint8_t *uid = resp.d.asBytes; - iso14a_card_select_t *card = (iso14a_card_select_t *)(uid + 12); + iso14a_card_select_t *card = (iso14a_card_select_t *) resp.d.asBytes; // check if command failed if (resp.arg[0] == 0) { PrintAndLog("Card select failed."); } else { - // check if UID is 4 bytes - if ((card->atqa[1] & 0xC0) == 0) { - PrintAndLog("%02X%02X%02X%02X", - *uid, *(uid + 1), *(uid + 2), *(uid + 3)); - } else { - PrintAndLog("UID longer than 4 bytes"); + char uid_string[20]; + for (uint16_t i = 0; i < card->uidlen; i++) { + sprintf(&uid_string[2*i], "%02X", card->uid[i]); } + PrintAndLog("%s", uid_string); } } PrintAndLog("End: %u", time(NULL)); From e17437f985b1c955b3a2e3cab4f9146db54631a1 Mon Sep 17 00:00:00 2001 From: ikarus Date: Thu, 26 Jun 2014 10:50:23 +0200 Subject: [PATCH 27/49] Keep the PM3 code repo clean of website/wiki stuff. --- _Sidebar.md | 10 ---------- images/Hirose-connector.png | Bin 32635 -> 0 bytes images/prox3-straight.jpg | Bin 68416 -> 0 bytes images/proxmark3-parts-2.jpg | Bin 37784 -> 0 bytes 4 files changed, 10 deletions(-) delete mode 100644 _Sidebar.md delete mode 100644 images/Hirose-connector.png delete mode 100644 images/prox3-straight.jpg delete mode 100644 images/proxmark3-parts-2.jpg diff --git a/_Sidebar.md b/_Sidebar.md deleted file mode 100644 index fcffb6c0c..000000000 --- a/_Sidebar.md +++ /dev/null @@ -1,10 +0,0 @@ -# Proxmark Wiki - * [Home Page](HomePage) - * [Getting Started](GettingStarted) - * [Hardware](Hardware) - * *Software / firmware* - * [Linux (Gentoo)](Gentoo Linux) - * [Windows](Windows) - * *Usage* - * [EM4102 Walk through](EM4102 1.pm3 Walkthrough) - * [Command Reference](commands) \ No newline at end of file diff --git a/images/Hirose-connector.png b/images/Hirose-connector.png deleted file mode 100644 index 4c1690374cbb39bdcf2203b6fd4cfec4adfccf88..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32635 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�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

Y}`3{w*OVsDN0$WGI%!I^GyKM0- z!D^2=Gvz%6ZWaoKo7RpUrQac|pEcGnIw)wL^28T@= zZ-2sYco+9m(jpR6mjRlO?NEx%L0qVK5d~$W$}R)wDwZ5BXTpETW!M%Uc(ocLfoSj3 zx37dS6GI8FW>M01Op8to->C-$mJO>$7ccRZIZn#qh^1`SNz<>I@*>L$`r<0E{;Wnu zF^Q@GG|5zS#?l0ENF}q*f{n^MKa_2CDcj&mj#H+TxW5D^N?f?Gz6QO9+)5jZfI`Ns9uCIbixN%%qd|#{3Xs^u4tD~?Pgm8K7qs-; zEja1Q!^2}IGGH161T*KwHfDILf%#k#5+-C9Tmv_MjAaCBR5*D)}-GsWzHGx zTPw?KcGq%WbhW@wZAGs#OYpu%D!>h!l*spoVSI2!?TVMkPa25Gz|fqt|Da!zpPxUa z6l5{95i;$Q8VT=xD5xz^-MTB$;IO*i{yNAC!2=ke8J3NC*Rn6(CQnybCJr87 z#Y8|YmoDWihpxqOhHI;fl~C}_LRT3KA2Yv+=Grdd0t&0uXw<8xlC%S<+~6K-2H#>G z;`K;sI5QcTtH@}p@p08AmWbR>16WjX-1L^(5S%?@K9>0|SH-pTkvK-~+vLxf<#;Nu zpU2J`6RiqN3U71>`Ye+mXN@3fz-&x~xlDIh0-hhY`my!^?z-BW_7+t&!V$0$%0QsU zdj#S!U-1vt3SNqDRfSBX&6wBT3n6@VbiCRql~~wT(6iW3MJycZjE^<-)AjWh<^Lqe z{;$pO|HmU~P2ru*?U3!4EaG*kt@+B4WP{u2MTFR9f-%PyL0wszFDpO&bJhQMWc6)+!XJgjFHZ^E-ZM!B%-R(o#+Z~lRj1SsbR!8 zvDl`Ha>u!KUr*7b0WP$!!I8E@spD!i#aLv=Am+w}+S=BBO%hHM+0(6bCB5%X$2*j$ zx5JjfY&!$*GTZFR2djTfINGr=3j&)2*}vM$U}Lo1Hm+&$7>#o=dZTmpWaHrHy^cj3 zNYT!J9yX7znc02S%GQu1P@5s3k|G$q{)L4QW24JkZNHKLa+(6h z{F1uFrQhsot$A>YDs*j+G0an+E4_9--()LXky3a2ZY-o3>7BG`^NS=T`8Vx-O*Sw_r+I<9jjJ1K!W+K;WY(;Mu<5}wsQMqYg(9$YhK)@z2s=|lRC@Zy^6P%(cak@b<}nDAIzFDse;@Nrn9w8$Z&2qU_W&fTRYJjycMYbiU4ALv#Zn#f2h! zzJMfI4sWq2qY$ls^O+f*>!8M#OS(J{hp}9 zV$FEPT)H~l2#FxeI&pJ%`xhq;tiC%%Dj9khP-8o?V?7iLO1@0PH`2cYfU}tRIT#i@QCZTON)ls z(s4=WVoq=T9qaHw+;gDO8O+wwt%FHgyCOBS*#1p^Ew7%K;>P@jEHtHfQct`~eyV*O zs9Zz%eFPNm>M9V|s$F#YffJd1-}Ln7w0udZM2~8X(SeE4?dtMKg>p`&CiCOQFH}^9 z=<9o&2eOhoBS${^(tY>qO)`>f&blUpP>Cj-{~Qz2 zRhIiED9?C$klVT^+!Jnab)-$b@KbvpWkYk$MU+Uaz@Z(^Kj{uJH`m~;6jz}i4D+At zz?|^Ft!*?lGSN(aJLVT~Kx*pAO{%_;^)oHO`_=@I*`<;6(ujs->YeSZG4O*wki2Pv zCK<_Rn?A-wXA{GE9l%4W@JD>Z->YRW{YrNvCGaiOwC{?%h_+`L%CcW9CQfX+6h80v zk3;V-a>Vb5VZP4o&)Gha835Y0V9-Lj2PSSHOyf)J47l?#m-Mv$eZxtVTwG?4UTj5` z`VFU$zW?^OOxEsb{nrX-Dup1aqITG(4RY*wiY$~>%W&@VjR0Zt z!;iZEP;Bac{B9Yhfi!*#iX4^KEvmR>?gx+a+Rl{(>ghu5!v*_~*aHNb!Tr9&8S;-Q z4`ON+fiPMetU9P&vlYRs`UKBr-YQ_zIE;N)@86%=9#8UuLt63+{JgL-W8tX=Ff4>?#I z_YAUwJ}=m_aQ1|@jHUdMSsv_lmLk!OP?|I2J!eXah*d)f3^Ju<882`(H#}mH%r)$a zi(rAUO>g^zhjj_Kohj54s?Cn4VDijq#CcvLHYvG1HNt>Y)v;MEMJlkn2XwjPQmElL z=tD3hSC%PhF;r03a2`zkvs=QT6$%u(jk;-L9nss3$6vIkR^bdAuk1$z`}UbFY@2B? zeatED;t#r15%)4Ekq812aEO?**IWo%vv{vJg#KZi;CMUAu+6pY^J}A_W_xYY_rl4F z70PK^Gvp(rh7|?Y4`R|+g#E-Y$S5mH?YLNOVL8MtGQ@fkQ2a9{=j_^Oy3qo#af)3RNmk)P#ph#(i_@>fir-u z`6l0)v+i$5e#+W&axz((F6?l0Z_c3I#6rXEP&aNQXGWk|W@I`5Y5%M|U_j+pSc6}j znfqDIj{$~!zmv0mJW!e>&G7X&lsqeo7yj2Wb63LR%qo*Pg_6Q61BF0-OD6Z)CF#{H zcUcBY2ZUV2>KV#Q_9H z;z_V+M@<+s^1A@wy^t74>chE5KI$h-FYZ1kmctgQc~i+I#YyCrL|}$KXH;@x;wMMK z7x;8%6ffw)zAIZ9`{OtayHlyQOgCN9xJGYm_cmb1;j{q}RwAg4s_uw7Aw)u*^ijLZ zr9E}D90`aBeR2LJb@GxKqjo;XI1qQen0Tj`>k-d6G+w5`Li>yrua_(Lo*VAoT5J!k z1Bq1t%jhWL+-Sotxw!}*naZ99GPKFx^>s(D2>*H_;3E%`UM(laWhc!u?CBdqjEm_y zIVS(yw|K-whadZvC~~#;RB+l@!wFSrD}!#1VqX`484~QFI%ELPCN(0-S&rd%{BLT; zc2GecH{wzzyj*5&8y^TS3jQo{b!^ZlLnd;06#Y|Go4G1R{x+c9iv9im@dbh2qBYT4 zC=Tp}IJ7q#6*6*Zeaqqt`X23YwP<(MH}fC^XPe{oV=q=YJq6@6l)Kba<%&Zpn-qV8 zK(7QBpD0WkuYQGN?Xt(HUXuak~X`M%<6+UMy>{nTVw=vSr5ip{c0`~ z%?xIlI1!R$0!@z&f4m4c1Rk7!Eb?8*iX7_0pgpVXhDjnn2#T*JE>=inYJRGhIk5aY zQLh{cQ#Q|I(?}SM+|}49V|?}*X_y6E;x#Zd1CH#cD*P;Gl?Y~nkDNjgHS4P;ax{En zPUyqlLsX-3F#48bhBwY?g~EIJ%Z7L!ffXC{;X!=}-a7q1&X*yNfN)ySl3T|HB0=-G9!ew8#F&t_TfL z*kcnoH4E^5%5N{_IgXL2P^=hQLiST)oHj0a3$2rv$7C<2Eu5n>y-dizz@3;BQ zpX6?7jk#xaggQ&1Z_L>%_ z$Z?VxcMBXIB`l&e5y^{v|MmDCu6oApX2hywPM`#2@ZO+9UHeh zozJ{1uDod)$YK%=>>6WlmsPD}Q-Ou6Jgj|ij-hU*<7-$WAvwAVnT{QPv(gQ6giG*V zZ*o>~U>?QjH+(764R51{6sidPU7uEF8J{>30@Cdf56Kr~Akgq#>t6E{yEfVj(rbHq z#eaa5SN?kEv{Y5vTxhB+aicxF6yNiMLLwyNwz1m)j@&G3E`4XB=zA(99@>7Y%~2y- zuAB1M@4`wYog}>3vH@%yH-ay^mB+RK`!|sd^qWY`pW9EaEJdn|?kvpJ;?RZ)Kg+hyvWidp40~xhL47)BFnK0Mune;S*Skzmcae3cu=`uu!Ehp z1U=hJS!4pO!-y^BQg+g^23M@ElV05z=11W#7EjHHnIkE_lY5>~|r&d_u5x#lLWvc)2mw;(P>L zhB1RzK?JLVSro?Uy2dNVMdd^h&7(ixPsR^~JET`Kea@n@I2B;(Q1oM6u}2%#p_Nr$ z4@|OZ{H&?VEJrQtt}aVRn;>cJ(e`b5cZA!9s<6q;$!+xTZAPZ`e<-A!_8f1k-sJxl z7YGg`?IGf)&db?B&dYtYt*&MW{|W;eaB&stFf|mXxz=&jgx+xI?L8&h7k#8HFQTt7 zVh-Di{TwV^JpP;?ZGXV-`vU$Gpx*}C{`R^c`gqx!)Zsk@X&TQV7Kf|>i>CaSLXF#F zblgPde*NHj<9I<>Ya~d4*6kG(EvYIIY~jJHI6pF$r7_(qvIKJ$E;Q05uF;)2y2Q|! zi|P}0>{~wDcRrt5Ldv_-j*R-M_x~fuK^)C?fOH}@sRVkcv>sWUIjI>`y* zuF(ln7RIE+4FZ0mz@Ucn5DO%K)9j%7}* z-efheLgals6{lN`<39PGYvgFO`UTSXa9@mX6Rg*x5S|KqWT&8N+sW!_%O%bgX=3 z9pMoslx8XrVjB0kZc4qMX1r1%^ErRx%MLHA{m49`SS53d8ZlAo5e25vZxj8p&7_5w ze5pXF#hPSZ!zwO6l8%}=6b?#50(C>ApJ&O{YMiW;+&RCO$+@>SB>OgS869;kXPp9t zzcsj^JA8u4RJ zmR)6)D3>~Bb}8OKZIRrOmuvUO$x{^zSqUlHuvaQno>?g?7D;zI?oDM!?|6#**s@3g z|M)e~w$hV?3e)6SLdoqb&R>NTt$%l4%Pe*Xp9%DCZ2D>?NRF$6NEt@=malOpA8#7@ zYNonO!SkbTAoF0=ZROKjE18w9)XeJ;^sA0X?8u}T!TAT%`P8?FXr?i)C+yHHzpCGQ z0CGbSsCl7j-KsnY5+x-L_-XS?D@v#AHgxRUZGB7C$}zeB2@SnYZ%fwveU$(?*#1M- zuD4N&;SKd}0{T`Sb&|9h&l(_(yO-L(vw$g1*Aanz0MQoSnDO4o``p4=Pil_!M;LOh z-J%S5%&64TMX8jUmT_Th%If~Ozl${_>RxS*duE{nzx6QD5xLmlV<|B( z^tWwTNxj&cdBKX4--__E4~ocGeW&y6y;MIW|Rskhv(;g zn*UH=vCilZ+Bj9nHm;l0au3u?c_?Qze_|T0p2Q@Val2(gzW7%nmj>5{PC~6aGI1Y7 zl1-d6i`?C8BN6n&Xu44bhZI?3HzrT6^kIi)FLnxr+_kMhx&S!QU%NNrK0-oYWLj<- z%bybtPHHIGA}KoB?mIE!Po!G1(?QB4;HQe+c*M=!p^`)*v&j$QJF&apt806{rO!Ud z(+^GCb-i=nTUm76hF$ehr+0|8DP$;y#&#bl+vtVX0t*kgxxW^;^VsT^y?-?~3`;P^ zvOSc|bk}{pHkmWkLj2<`bwUJ+VP(#nh1kz&GYi70?Tjc2pL>Eg$JTaxR=xZdieX2* zHpx4#LhE^u3PBJX)JQNB3U*T97xdZfrzp#zk#%b%-o9yj%}gZ7-TwRX9|cx?<=6N^ z9+w}VOViLb{b zyk_Xcx$H?C)@(pugMOQlwY&GMgcl#mL1d-XTJi*Y=}Br^8_kBA*#mkFyA4LlmpE=& z`2Wz=5HYzc6Rq)l#mRl@G6g6}FZzABmfrzi+e>gVri&g!EY6#sPA*$3`Xw`lhVv0G zOgtxD>&m!1Y{__FA<2`v7pyX$w@yss#cheyT&}}Uz^jq?-%-ISY7Mb1ZpAp+mcpefU%e+v-;z_YW%*zl3to_Jz*kQbVl=fPjzwJbV?+&_06 zw@Le{eTD|%eJ(l7xj)zM>FV+{P!x+B)jkPiNHk#~-|@0OaKYFQBCyVd?ts>r$oWN4 zuL*Zs&MD+H0dF!tTNSqQwPDuK5ccCtpffM;mdg-;g5O-uabi+dN)g@>OJw}z8n+}^ z2G=V8Mc=kKJ)LLrdr+ZbzIiHUTH|eCuq5if@;NY%ufA%4Bb&s3n(7H#vzN-`WgOD&Yz z^CgaO>zh15Y^$N}(?Y$fpBJZNm)~M*vaOMOF&NBk00SRVDl>%`)rZnCpK;ncO#OlD z-fJrgH9~4MxF+>SwDyIWec7x0#cnL_bA6nni@k6Qsmvi1`|{qI? zFJRW{ei~^0ni}_v3rv3Cmb9QVA_TrAR|2PlP}Xx>*w*&Oh+OLE9P8>UkTGBFyf}e+ zPwx71;}-_I@jZkY9?kJ}V-zvpGZTF7CA8*pCudo%)IyvUA_+It(}0d#y5bUoNRMBm z{M&&zuTI5Z!1nN_;IxyxUJtEH{0b)*kLzx6cSb_oDxBt?%DIUn$uR0+uD>OsfBIK< z>`MaXgyD;ybF91M0l;JZ;192k)H>{CM>nNdAJoX*)C?ES{78FxSW4}>b5|p+DT&U0 zaFbGWCJrz~6_ApoTLN-}Dg7+3zNtx4zD(*{U_ z%&Yc=t_}#^{US0$ zY3|Jx#x{~~BHIaX?}1V8PPq6`V2@X^CB_M$j+mCIn~HmRw85Tm_2!s6jI8>($y!H| zTj&r-#}^M{GILz|b4JO|V3}SE?$^<6rm(QkK_v3~XCDEgrthV$VxSvc0KdO9((s*fKeg+GN85oN%Sng>1j3D_{v|HQ|D@-C zx3=jdIwz=1O5ExOWZ(*N{UWm0Ff@Z}&cT$F7DuQlC4jy!^fWW$(Ubkm@X`@ zL-1wWaIjAp)??P68k%yyBasKI#f}U~`O0q#+qhLP>fRM08*Sa?{ufhk!PQp7h1&ux z4n>N)Q%G=Yf#MQeO0Xcs2^5zCMOxgQ;O_1Or?|U&@j`(D#U<~}J!hOTzW9nGOv>5UUsX#ar+Nt zBJBuV-w{10#4oq58@*xRe^H%m_vWW}sPmD(yy#V=VND!O*!-cTtNss7X|xncVEkjk zn+BdOf$-zCh4@|;R{?E-vChb90=W9>C+}jZJXk4$pQgZofT*ncXGWv{QA;}G#$%N9 zvP-fd8-p92;A@*VbQU>Ml$4o%Bd$^uf9L0u6g&;D^DRF8;-_Ors>D6$f}fL|J`y7= z+t3b|R?u6(IUYxY(6J_*VT;ksxYHf0iDi5j5OQ!sdI*Q^oH3P@er0yKK0WUyy}={_^;a~CTRfyjx!gru|Hfgbeb`-Ce1yW)UNk+K}?cO4K|L~ChlZNk%%lG?V+FZK}_+rQsldi%G(!S zP6yd`SAObS9&qB31|Mw=8W2+`C5QkVLS%m5CW6dP4#R%5C0E|pJcV&SW?1zP`%W!F z&K7G0e;_*vWM9F0|DI`j)JKEb*er7|M$=DbgGuF&PnOnpRswt3E1t3} ztpJaxjcg5r+)wjg7^3@`)s?RMMu!)yJeANTBupE&Pb9_pKwQ>Qs<3ai3~k@#_N(G$ zR4XFCH>k$3qQwGwGjHppsFP!F6|ty&z9Lm8;b_eB0m7_@J%&@`8Z8&(zQ*a#Dre)ljLhT>Qeuq6w}`W`A98-V+*=AAnX)$G@$&? zUr3t(M@`E>3O-!+%2%AZVbQY8(Y1pCQ0JlBpwEIEi-0)1!9^;**NBhjbRD#NADHA^ zEgmh^aQ;}_r>+hQZZ+RVxMu**STyZ)ztC2{*qGN-C>JdpaW-5yo%iI<4I6El+KF

92VE`g+?ojMoOn1`oegmQD8JbT`W4I5)$%yEDa* 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 NH~zn^g4zCh|9`Z!qWAy+ From 77abe781af30bb7ac36cc22aa5bdcbb70b4e1a94 Mon Sep 17 00:00:00 2001 From: Martin Holst Swende Date: Fri, 27 Jun 2014 12:52:28 +0200 Subject: [PATCH 28/49] fix for better csns --- client/cmdhficlass.c | 192 +++++++------------------------------------ 1 file changed, 31 insertions(+), 161 deletions(-) diff --git a/client/cmdhficlass.c b/client/cmdhficlass.c index f31bced74..b8e1e0989 100644 --- a/client/cmdhficlass.c +++ b/client/cmdhficlass.c @@ -329,7 +329,7 @@ int CmdHFiClassSim(const char *Cmd) PrintAndLog("--simtype:%02x csn:%s", simType, sprint_hex(CSN, 8)); } - if(simType > 5) + if(simType > 2) { PrintAndLog("Undefined simptype %d", simType); return 1; @@ -341,73 +341,17 @@ int CmdHFiClassSim(const char *Cmd) UsbCommand c = {CMD_SIMULATE_TAG_ICLASS, {simType,63}}; UsbCommand resp = {0}; - uint8_t csns1[] ={ - /* Order Simulated CSN HASH1 Recovered key bytes */ - /* 1 */ 0x00,0x0B,0x0F,0xFF,0xF7,0xFF,0x12,0xE0,// 0101000045014545 00,01 45 - /* 2 */ 0x03,0x0B,0x0E,0xFE,0xF7,0xFF,0x12,0xE0,// 0202000045014545 02 - /* 3 */ 0x04,0x0D,0x0D,0xFD,0xF7,0xFF,0x12,0xE0,// 0303000045014545 03 - /* 4 */ 0x04,0x0F,0x0F,0xF7,0xF7,0xFF,0x12,0xE0,// 0901000045014545 09 - /* 5 */ 0x01,0x13,0x10,0xF4,0xF7,0xFF,0x12,0xE0,// 0C00000045014545 0C - /* 6 */ 0x02,0x14,0x10,0xF2,0xF7,0xFF,0x12,0xE0,// 0E00000045014545 0E - /* 7 */ 0x05,0x17,0x10,0xEC,0xF7,0xFF,0x12,0xE0,// 1400000045014545 14 - /* 8 */ 0x00,0x6B,0x6F,0xDF,0xF7,0xFF,0x12,0xE0,// 2121000045014545 21 - /* 9 */ 0x03,0x6B,0x6E,0xDE,0xF7,0xFF,0x12,0xE0,// 2222000045014545 22 - /* 10 */ 0x04,0x6D,0x6D,0xDD,0xF7,0xFF,0x12,0xE0,// 2323000045014545 23 - /* 11 */ 0x00,0x4F,0x4B,0x43,0xF7,0xFF,0x12,0xE0,// 3D45000045014545 3D - /* 12 */ 0x00,0x4B,0x4F,0x3F,0xF7,0xFF,0x12,0xE0,// 4141000045014545 41 - /* 13 */ 0x03,0x4B,0x4E,0x3E,0xF7,0xFF,0x12,0xE0,// 4242000045014545 42 - /* 14 */ 0x04,0x4D,0x4D,0x3D,0xF7,0xFF,0x12,0xE0,// 4343000045014545 43 - /* 15 */ 0x04,0x37,0x37,0x7F,0xF7,0xFF,0x12,0xE0,// 0159000045014545 59 - /* 16 */ 0x00,0x2B,0x2F,0x9F,0xF7,0xFF,0x12,0xE0,// 6161000045014545 61 - /* 17 */ 0x03,0x2B,0x2E,0x9E,0xF7,0xFF,0x12,0xE0,// 6262000045014545 62 - /* 18 */ 0x04,0x2D,0x2D,0x9D,0xF7,0xFF,0x12,0xE0,// 6363000045014545 63 - /* 19 */ 0x00,0x27,0x23,0xBB,0xF7,0xFF,0x12,0xE0,// 456D000045014545 6D - /* 20 */ 0x02,0x52,0xAA,0x80,0xF7,0xFF,0x12,0xE0,// 0066000045014545 66 - /* 21 */ 0x00,0x5C,0xA6,0x80,0xF7,0xFF,0x12,0xE0,// 006A000045014545 6A - /* 22 */ 0x01,0x5F,0xA4,0x80,0xF7,0xFF,0x12,0xE0,// 006C000045014545 6C - /* 23 */ 0x06,0x5E,0xA2,0x80,0xF7,0xFF,0x12,0xE0,// 006E000045014545 6E - /* 24 */ 0x02,0x0E,0x0E,0xFC,0xF7,0xFF,0x12,0xE0,// 0402000045014545 04 - /* 25 */ 0x05,0x0D,0x0E,0xFA,0xF7,0xFF,0x12,0xE0,// 0602000045014545 06 - /* 26 */ 0x06,0x0F,0x0D,0xF9,0xF7,0xFF,0x12,0xE0,// 0703000045014545 07 - /* 27 */ 0x00,0x01,0x05,0x1D,0xF7,0xFF,0x12,0xE0,// 630B000045014545 0B - /* 28 */ 0x02,0x07,0x01,0x1D,0xF7,0xFF,0x12,0xE0,// 630F000045014545 0F - /* 29 */ 0x04,0x7F,0x7F,0xA7,0xF7,0xFF,0x12,0xE0,// 5911000045014545 11 - /* 30 */ 0x04,0x60,0x6E,0xE8,0xF7,0xFF,0x12,0xE0,// 1822000045014545 18 - /*31*/ 0x04,0x77,0x77,0xBF,0xF7,0xFF,0x12,0xE0, // 4119000045014545 19 - /*32*/ 0x00,0x69,0x6D,0xE5,0xF7,0xFF,0x12,0xE0, // 1B23000045014545 1B - /*33*/ 0x01,0x69,0x6E,0xE2,0xF7,0xFF,0x12,0xE0, // 1E22000045014545 1E - /*34*/ 0x02,0x6B,0x6D,0xE1,0xF7,0xFF,0x12,0xE0, // 1F23000045014545 1F - /*35*/ 0x01,0x3F,0x04,0xE0,0xF7,0xFF,0x12,0xE0, // 200C000045014545 20 - /*36*/ 0x02,0x6E,0x6E,0xDC,0xF7,0xFF,0x12,0xE0, // 2422000045014545 24 - /*37*/ 0x05,0x6D,0x6E,0xDA,0xF7,0xFF,0x12,0xE0, // 2622000045014545 26 - /*38*/ 0x06,0x6F,0x6D,0xD9,0xF7,0xFF,0x12,0xE0, // 2723000045014545 27 - /*39*/ 0x01,0x6B,0x68,0xEC,0xF7,0xFF,0x12,0xE0, // 1428000045014545 28 - /*40*/ 0x04,0x6F,0x6F,0xD7,0xF7,0xFF,0x12,0xE0, // 2921000045014545 29 - /*41*/ 0x02,0x66,0x66,0xF4,0xF7,0xFF,0x12,0xE0, // 0C2A000045014545 2A - /*42*/ 0x00,0x61,0x65,0xFD,0xF7,0xFF,0x12,0xE0, // 032B000045014545 2B - /*43*/ 0x00,0x62,0x64,0xFE,0xF7,0xFF,0x12,0xE0, // 022C000045014545 2C - /*44*/ 0x01,0x65,0x62,0xFE,0xF7,0xFF,0x12,0xE0, // 022E000045014545 2E - /*45*/ 0x02,0x67,0x61,0xFD,0xF7,0xFF,0x12,0xE0, // 032F000045014545 2F - /*46*/ 0x00,0x5F,0x5B,0x13,0xF7,0xFF,0x12,0xE0, // 6D35000045014545 35 - /*47*/ 0x00,0x44,0x4E,0x48,0xF7,0xFF,0x12,0xE0, // 3842000045014545 38 - /*48*/ 0x00,0x53,0x57,0x27,0xF7,0xFF,0x12,0xE0, // 5939000045014545 39 - /*49*/ 0x00,0x49,0x4D,0x45,0xF7,0xFF,0x12,0xE0, // 3B43000045014545 3B - /*50*/ 0x01,0x49,0x4E,0x42,0xF7,0xFF,0x12,0xE0, // 3E42000045014545 3E - /*51*/ 0x02,0x4B,0x4D,0x41,0xF7,0xFF,0x12,0xE0, // 3F43000045014545 3F - /*52*/ 0x02,0x4E,0x4E,0x3C,0xF7,0xFF,0x12,0xE0, // 4442000045014545 44 - /*53*/ 0x05,0x4D,0x4E,0x3A,0xF7,0xFF,0x12,0xE0, // 4642000045014545 46 - /*54*/ 0x06,0x4F,0x4D,0x39,0xF7,0xFF,0x12,0xE0, // 4743000045014545 47 - /*55*/ 0x01,0x77,0x7C,0xB8,0xF7,0xFF,0x12,0xE0, // 4814000045014545 48 - /*56*/ 0x04,0x4F,0x4F,0x37,0xF7,0xFF,0x12,0xE0, // 4941000045014545 49 - /*57*/ 0x00,0x7A,0x7C,0xB6,0xF7,0xFF,0x12,0xE0, // 4A14000045014545 4A - /*58*/ 0x00,0x41,0x45,0x5D,0xF7,0xFF,0x12,0xE0, // 234B000045014545 4B - /*59*/ 0x00,0x42,0x44,0x5E,0xF7,0xFF,0x12,0xE0, // 224C000045014545 4C - /*60*/ 0x01,0x45,0x42,0x5E,0xF7,0xFF,0x12,0xE0, // 224E000045014545 4E - /*61*/ 0x02,0x47,0x41,0x5D,0xF7,0xFF,0x12,0xE0, // 234F000045014545 4F - /*62*/ 0x04,0x7E,0x7C,0xAE,0xF7,0xFF,0x12,0xE0, // 5214000045014545 52 - /*63*/ 0x00,0x57,0x53,0x2B,0xF7,0xFF,0x12,0xE0, // 553D000045014545 55 - }; - memcpy(c.d.asBytes, csns1, sizeof(c.d.asBytes)); + uint8_t csns[64] = { + 0x00,0x0B,0x0F,0xFF,0xF7,0xFF,0x12,0xE0 , + 0x00,0x13,0x94,0x7e,0x76,0xff,0x12,0xe0 , + 0x2a,0x99,0xac,0x79,0xec,0xff,0x12,0xe0 , + 0x17,0x12,0x01,0xfd,0xf7,0xff,0x12,0xe0 , + 0xcd,0x56,0x01,0x7c,0x6f,0xff,0x12,0xe0 , + 0x4b,0x5e,0x0b,0x72,0xef,0xff,0x12,0xe0 , + 0x00,0x73,0xd8,0x75,0x58,0xff,0x12,0xe0 , + 0x0c,0x90,0x32,0xf3,0x5d,0xff,0x12,0xe0 }; + + memcpy(c.d.asBytes, csns, 64); SendCommand(&c); if (!WaitForResponseTimeout(CMD_ACK, &resp, -1)) { @@ -415,108 +359,34 @@ int CmdHFiClassSim(const char *Cmd) return 0; } - uint8_t num_mac_responses_1 = resp.arg[1]; - PrintAndLog("Mac responses, first part : %d MACs obtained (should be 63)", num_mac_responses_1); + uint8_t num_mac_responses = resp.arg[1]; + PrintAndLog("Mac responses: %d MACs obtained (should be 8)", num_mac_responses); - UsbCommand c2 = {CMD_SIMULATE_TAG_ICLASS, {simType,63}}; - UsbCommand resp2 = {0}; - - uint8_t csns2[] ={ - /*64*/ 0x04,0x3C,0x3A,0x74,0xF7,0xFF,0x12,0xE0, // 0C56000045014545 56 - /*65*/ 0x00,0x24,0x2E,0xA8,0xF7,0xFF,0x12,0xE0, // 5862000045014545 58 - /*66*/ 0x00,0x29,0x2D,0xA5,0xF7,0xFF,0x12,0xE0, // 5B63000045014545 5B - /*67*/ 0x00,0x00,0x02,0x24,0xF7,0xFF,0x12,0xE0, // 5C0E000045014545 5C - /*68*/ 0x01,0x29,0x2E,0xA2,0xF7,0xFF,0x12,0xE0, // 5E62000045014545 5E - /*69*/ 0x02,0x2B,0x2D,0xA1,0xF7,0xFF,0x12,0xE0, // 5F63000045014545 5F - /*70*/ 0x02,0x2E,0x2E,0x9C,0xF7,0xFF,0x12,0xE0, // 6462000045014545 64 - /*71*/ 0x02,0x0A,0x02,0x18,0xF7,0xFF,0x12,0xE0, // 680E000045014545 68 - /*72*/ 0x00,0x03,0x07,0x17,0xF7,0xFF,0x12,0xE0, // 6909000045014545 69 - /*73*/ 0x00,0x21,0x25,0xBD,0xF7,0xFF,0x12,0xE0, // 436B000045014545 6B - /*74*/ 0x02,0x27,0x21,0xBD,0xF7,0xFF,0x12,0xE0, // 436F000045014545 6F - /*75*/ 0x04,0x07,0x07,0x0F,0xF7,0xFF,0x12,0xE0, // 7109000045014545 71 - /*76*/ 0x00,0x04,0x0E,0x08,0xF7,0xFF,0x12,0xE0, // 7802000045014545 78 - /*77*/ 0x00,0x33,0x37,0x87,0xF7,0xFF,0x12,0xE0, // 7959000045014545 79 - /*78*/ 0x00,0x09,0x0D,0x05,0xF7,0xFF,0x12,0xE0, // 7B03000045014545 7B - /*79*/ 0x01,0x09,0x0E,0x02,0xF7,0xFF,0x12,0xE0, // 7E02000045014545 7E - /*80*/ 0x02,0x0B,0x0D,0x01,0xF7,0xFF,0x12,0xE0, // 7F03000045014545 7F - /*81*/ 0x00,0x34,0x3E,0x78,0xF7,0xFF,0x12,0xE0, // 0852000045014545 08 - /*82*/ 0x04,0x66,0x64,0xF6,0xF7,0xFF,0x12,0xE0, // 0A2C000045014545 0A - /*83*/ 0x00,0x3F,0x3B,0x73,0xF7,0xFF,0x12,0xE0, // 0D55000045014545 0D - /*84*/ 0x03,0x3B,0x3E,0x6E,0xF7,0xFF,0x12,0xE0, // 1252000045014545 12 - /*85*/ 0x00,0x11,0x15,0xED,0xF7,0xFF,0x12,0xE0, // 137B000045014545 13 - /*86*/ 0x00,0x6E,0x68,0xEA,0xF7,0xFF,0x12,0xE0, // 1628000045014545 16 - /*87*/ 0x00,0x6D,0x69,0xE9,0xF7,0xFF,0x12,0xE0, // 1727000045014545 17 - /*88*/ 0x00,0x6A,0x6C,0xE6,0xF7,0xFF,0x12,0xE0, // 1A24000045014545 1A - /*89*/ 0x00,0x40,0x42,0x64,0xF7,0xFF,0x12,0xE0, // 1C4E000045014545 1C - /*90*/ 0x00,0x77,0x73,0xCB,0xF7,0xFF,0x12,0xE0, // 351D000045014545 1D - /*91*/ 0x06,0x6E,0x72,0xD0,0xF7,0xFF,0x12,0xE0, // 301E000045014545 30 - /*92*/ 0x00,0x1B,0x1F,0xCF,0xF7,0xFF,0x12,0xE0, // 3171000045014545 31 - /*93*/ 0x01,0x75,0x72,0xCE,0xF7,0xFF,0x12,0xE0, // 321E000045014545 32 - /*94*/ 0x00,0x71,0x75,0xCD,0xF7,0xFF,0x12,0xE0, // 331B000045014545 33 - /*95*/ 0x00,0x48,0x4A,0x4C,0xF7,0xFF,0x12,0xE0, // 3446000045014545 34 - /*96*/ 0x00,0x4E,0x48,0x4A,0xF7,0xFF,0x12,0xE0, // 3648000045014545 36 - /*97*/ 0x00,0x4D,0x49,0x49,0xF7,0xFF,0x12,0xE0, // 3747000045014545 37 - /*98*/ 0x00,0x4A,0x4C,0x46,0xF7,0xFF,0x12,0xE0, // 3A44000045014545 3A - /*99*/ 0x00,0x20,0x22,0xC4,0xF7,0xFF,0x12,0xE0, // 3C6E000045014545 3C - /*100*/ 0x00,0x1C,0x66,0x40,0xF7,0xFF,0x12,0xE0, // 402A000045014545 40 - /*101*/ 0x06,0x4E,0x52,0x30,0xF7,0xFF,0x12,0xE0, // 503E000045014545 50 - /*102*/ 0x00,0x7B,0x7F,0xAF,0xF7,0xFF,0x12,0xE0, // 5111000045014545 51 - /*103*/ 0x00,0x51,0x55,0x2D,0xF7,0xFF,0x12,0xE0, // 533B000045014545 53 - /*104*/ 0x00,0x28,0x2A,0xAC,0xF7,0xFF,0x12,0xE0, // 5466000045014545 54 - /*105*/ 0x02,0x53,0x55,0x29,0xF7,0xFF,0x12,0xE0, // 573B000045014545 57 - /*106*/ 0x00,0x2A,0x2C,0xA6,0xF7,0xFF,0x12,0xE0, // 5A64000045014545 5A - /*107*/ 0x00,0x7C,0x46,0x20,0xF7,0xFF,0x12,0xE0, // 604A000045014545 60 - /*108*/ 0x02,0x03,0x05,0x19,0xF7,0xFF,0x12,0xE0, // 670B000045014545 67 - /*109*/ 0x01,0x2F,0x34,0x90,0xF7,0xFF,0x12,0xE0, // 705C000045014545 70 - /*110*/ 0x00,0x32,0x34,0x8E,0xF7,0xFF,0x12,0xE0, // 725C000045014545 72 - /*111*/ 0x00,0x31,0x35,0x8D,0xF7,0xFF,0x12,0xE0, // 735B000045014545 73 - /*112*/ 0x00,0x08,0x0A,0x0C,0xF7,0xFF,0x12,0xE0, // 7406000045014545 74 - /*113*/ 0x03,0x37,0x32,0x8A,0xF7,0xFF,0x12,0xE0, // 765E000045014545 76 - /*114*/ 0x00,0x0D,0x09,0x09,0xF7,0xFF,0x12,0xE0, // 7707000045014545 77 - /*115*/ 0x00,0x0A,0x0C,0x06,0xF7,0xFF,0x12,0xE0, // 7A04000045014545 7A - /*116*/ 0x00,0x60,0x62,0x04,0xF7,0xFF,0x12,0xE0, // 7C2E000045014545 7C - /*117*/ 0x00,0x07,0x03,0x1B,0xF7,0xFF,0x12,0xE0, // 650D000045014545 65 - /*118*/ 0x00,0x0C,0x16,0xF0,0xF7,0xFF,0x12,0xE0, // 107A000045014545 10 - /*119*/ 0x00,0x6F,0x6B,0xE3,0xF7,0xFF,0x12,0xE0, // 1D25000045014545 25 - /*120*/ 0x00,0x2F,0x2B,0xA3,0xF7,0xFF,0x12,0xE0, // 5D65000045014545 5D - /*121*/ 0x00,0x47,0x43,0x5B,0xF7,0xFF,0x12,0xE0, // 254D000045014545 4D - /*122*/ 0x00,0x37,0x33,0x8B,0xF7,0xFF,0x12,0xE0, // 755D000045014545 75 - /*123*/ 0x00,0x1F,0x1B,0xD3,0xF7,0xFF,0x12,0xE0, // 2D75000045014545 2D - /*124*/ 0x00,0x67,0x63,0xFB,0xF7,0xFF,0x12,0xE0, // 052D000045014545 05 - /*125*/ 0x00,0x0F,0x0B,0x03,0xF7,0xFF,0x12,0xE0, // 7D05000045014545 7D - /*126*/ 0x00,0x17,0x13,0xEB,0xF7,0xFF,0x12,0xE0, // 157D000045014545 15 - }; - - memcpy(c2.d.asBytes, csns2, sizeof(c2.d.asBytes)); - - SendCommand(&c); - if (!WaitForResponseTimeout(CMD_ACK, &resp2, -1)) { - PrintAndLog("Command timed out"); - return 0; - } - uint8_t num_mac_responses_2 = resp2.arg[1]; - PrintAndLog("Mac responses, second part : %d MACs obtained (should be 63)", num_mac_responses_2); - size_t datalen = 126 * 16; + size_t datalen = 8*24; /* * Now, time to dump to file. We'll use this format: - * <8-byte CSN><8-byte MAC>.... + * <8-byte CSN><8-byte CC><4 byte NR><4 byte MAC>.... * So, it should wind up as - * (63+63) * (8 + 8 ) bytes. + * 8 * 24 bytes. + * + * The returndata from the pm3 is on the following format + * <4 byte NR><4 byte MAC> + * CC are all zeroes, CSN is the same as was sent in **/ - void* macs = malloc(datalen); + void* dump = malloc(datalen); + memset(dump,0,datalen);//<-- Need zeroes for the CC-field uint8_t i = 0; - while(i < 63) + for(i = 0 ; i < 8 ; i++) { - memcpy(macs+i*16, csns1+i*8,8); - memcpy(macs+i*16+8, resp.d.asBytes+i*8,8); + memcpy(dump+i*24, csns+i*8,8); //CSN + //8 zero bytes here... + //Then comes NR_MAC (eight bytes from the response) + memcpy(dump+i*24+16,resp.d.asBytes+i*8,8); - memcpy(macs+i*16+63*16, csns2+i*8,8); - memcpy(macs+i*16+8+63*16, resp2.d.asBytes+i*8,8); - i++; } /** Now, save to dumpfile **/ - saveFile("iclass_mac_attack", "bin", macs,datalen); - free(macs); + saveFile("iclass_mac_attack", "bin", dump,datalen); + free(dump); }else { UsbCommand c = {CMD_SIMULATE_TAG_ICLASS, {simType,numberOfCSNs}}; @@ -594,7 +464,7 @@ int fileExists(const char *filename) { * @param suffix the file suffix. Leave out the ".". * @param data The binary data to write to the file * @param datalen the length of the data - * @return + * @return 0 for ok, 1 for failz */ int saveFile(const char *preferredName, const char *suffix, const void* data, size_t datalen) { From 3b2fee43ea7d9e08b7729d662d8d010ee0e2a2e3 Mon Sep 17 00:00:00 2001 From: iZsh Date: Sun, 22 Jun 2014 00:26:38 +0200 Subject: [PATCH 29/49] New LF edge detection algorithm + lowpass filter This is a new LF edge detection algorithm for the FPGA. - It uses a low-pass IIR filter to clean the signal (see https://fail0verflow.com/blog/2014/proxmark3-fpga-iir-filter.html) - The algorithm is able to detect consecutive peaks in the same direction - It uses an envelope follower to dynamically adjust the peak thresholds - The main threshold used in the envelope follower can be set from the ARM side fpga/lf_edge_detect.v, fpga/lp20khz_1MSa_iir_filter.v, fpga/min_max_tracker.v: New file. fpga/lo_edge_detect.v, fpga/fpga_lf.v: Modify accordingly. armsrc/apps.h (FPGA_CMD_SET_USER_BYTE1, FPGA_CMD_SET_EDGE_DETECT_THRESHOLD): New FPGA command. fpga/fpga_lf.v: Modify accordingly/Add a 8bit user register. fpga/fpga_lf.bit: Update accordingly. fpga/tests: New directory for testbenches fpga/tests/Makefile: New file. It compiles the testbenches and runs all the tests by default (comparing with the golden output) fpga/tests/tb_lp20khz_1MSa_iir_filter.v, fpga/tests/tb_min_max_tracker.v, fpga/tests/tb_lf_edge_detect.v: New testbenches fpga/tests/plot_edgedetect.py: New script to plot the results from the edge detection tests. fpga/tests/tb_data: New directory for data and golden outputs --- .gitignore | 1 + armsrc/apps.h | 3 + fpga/Makefile | 2 +- fpga/fpga_lf.bit | Bin 42175 -> 42175 bytes fpga/fpga_lf.v | 36 +++--- fpga/lf_edge_detect.v | 77 ++++++++++++ fpga/lo_edge_detect.v | 78 ++++++------ fpga/lp20khz_1MSa_iir_filter.v | 81 +++++++++++++ fpga/min_max_tracker.v | 65 ++++++++++ fpga/tests/Makefile | 87 ++++++++++++++ fpga/tests/plot_edgedetect.py | 58 +++++++++ .../pcf7931_read_1MSA_data.filtered.gold | 1 + .../tb_data/pcf7931_read_1MSA_data.high.gold | 1 + .../tb_data/pcf7931_read_1MSA_data.highz.gold | 1 + fpga/tests/tb_data/pcf7931_read_1MSA_data.in | 1 + .../tb_data/pcf7931_read_1MSA_data.low.gold | 1 + .../tb_data/pcf7931_read_1MSA_data.lowz.gold | 1 + .../tb_data/pcf7931_read_1MSA_data.max.gold | Bin 0 -> 524288 bytes .../tb_data/pcf7931_read_1MSA_data.min.gold | 1 + .../tb_data/pcf7931_read_1MSA_data.state.gold | Bin 0 -> 524288 bytes .../tests/tb_data/pcf7931_read_1MSA_data.time | Bin 0 -> 4194304 bytes .../pcf7931_read_1MSA_data.toggle.gold | Bin 0 -> 524288 bytes ...pcf7931_write1byte_1MSA_data.filtered.gold | 1 + .../pcf7931_write1byte_1MSA_data.high.gold | 1 + .../pcf7931_write1byte_1MSA_data.highz.gold | 1 + .../tb_data/pcf7931_write1byte_1MSA_data.in | 1 + .../pcf7931_write1byte_1MSA_data.low.gold | 1 + .../pcf7931_write1byte_1MSA_data.lowz.gold | 1 + .../pcf7931_write1byte_1MSA_data.max.gold | Bin 0 -> 26215 bytes .../pcf7931_write1byte_1MSA_data.min.gold | 1 + .../pcf7931_write1byte_1MSA_data.state.gold | Bin 0 -> 26215 bytes .../tb_data/pcf7931_write1byte_1MSA_data.time | Bin 0 -> 209720 bytes .../pcf7931_write1byte_1MSA_data.toggle.gold | Bin 0 -> 26215 bytes fpga/tests/tb_lf_edge_detect.v | 111 ++++++++++++++++++ fpga/tests/tb_lp20khz_1MSa_iir_filter.v | 55 +++++++++ fpga/tests/tb_min_max_tracker.v | 74 ++++++++++++ 36 files changed, 685 insertions(+), 57 deletions(-) create mode 100644 fpga/lf_edge_detect.v create mode 100644 fpga/lp20khz_1MSa_iir_filter.v create mode 100644 fpga/min_max_tracker.v create mode 100644 fpga/tests/Makefile create mode 100755 fpga/tests/plot_edgedetect.py create mode 100644 fpga/tests/tb_data/pcf7931_read_1MSA_data.filtered.gold create mode 100644 fpga/tests/tb_data/pcf7931_read_1MSA_data.high.gold create mode 100644 fpga/tests/tb_data/pcf7931_read_1MSA_data.highz.gold create mode 100644 fpga/tests/tb_data/pcf7931_read_1MSA_data.in create mode 100644 fpga/tests/tb_data/pcf7931_read_1MSA_data.low.gold create mode 100644 fpga/tests/tb_data/pcf7931_read_1MSA_data.lowz.gold create mode 100644 fpga/tests/tb_data/pcf7931_read_1MSA_data.max.gold create mode 100644 fpga/tests/tb_data/pcf7931_read_1MSA_data.min.gold create mode 100644 fpga/tests/tb_data/pcf7931_read_1MSA_data.state.gold create mode 100644 fpga/tests/tb_data/pcf7931_read_1MSA_data.time create mode 100644 fpga/tests/tb_data/pcf7931_read_1MSA_data.toggle.gold create mode 100644 fpga/tests/tb_data/pcf7931_write1byte_1MSA_data.filtered.gold create mode 100644 fpga/tests/tb_data/pcf7931_write1byte_1MSA_data.high.gold create mode 100644 fpga/tests/tb_data/pcf7931_write1byte_1MSA_data.highz.gold create mode 100644 fpga/tests/tb_data/pcf7931_write1byte_1MSA_data.in create mode 100644 fpga/tests/tb_data/pcf7931_write1byte_1MSA_data.low.gold create mode 100644 fpga/tests/tb_data/pcf7931_write1byte_1MSA_data.lowz.gold create mode 100644 fpga/tests/tb_data/pcf7931_write1byte_1MSA_data.max.gold create mode 100644 fpga/tests/tb_data/pcf7931_write1byte_1MSA_data.min.gold create mode 100644 fpga/tests/tb_data/pcf7931_write1byte_1MSA_data.state.gold create mode 100644 fpga/tests/tb_data/pcf7931_write1byte_1MSA_data.time create mode 100644 fpga/tests/tb_data/pcf7931_write1byte_1MSA_data.toggle.gold create mode 100644 fpga/tests/tb_lf_edge_detect.v create mode 100644 fpga/tests/tb_lp20khz_1MSa_iir_filter.v create mode 100644 fpga/tests/tb_min_max_tracker.v diff --git a/.gitignore b/.gitignore index 3b258b3be..ea93d61f6 100644 --- a/.gitignore +++ b/.gitignore @@ -19,6 +19,7 @@ lua luac fpga/* +!fpga/tests !fpga/fpga_lf.bit !fpga/fpga_hf.bit !fpga/*.v diff --git a/armsrc/apps.h b/armsrc/apps.h index 4c7fa1900..364efe4b3 100644 --- a/armsrc/apps.h +++ b/armsrc/apps.h @@ -81,6 +81,7 @@ 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) @@ -96,7 +97,9 @@ void SetAdcMuxFor(uint32_t whichGpio); // 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 diff --git a/fpga/Makefile b/fpga/Makefile index 1aaa9f760..fad2ff04c 100644 --- a/fpga/Makefile +++ b/fpga/Makefile @@ -9,7 +9,7 @@ fpga_hf.ngc: fpga_hf.v fpga.ucf xst_hf.scr util.v hi_simulate.v hi_read_tx.v hi_ $(DELETE) $@ $(XILINX_TOOLS_PREFIX)xst -ifn xst_hf.scr -fpga_lf.ngc: fpga_lf.v fpga.ucf xst_lf.scr util.v clk_divider.v lo_edge_detect.v lo_read.v lo_passthru.v +fpga_lf.ngc: fpga_lf.v fpga.ucf xst_lf.scr util.v clk_divider.v lo_edge_detect.v lo_read.v lo_passthru.v lp20khz_1MSa_iir_filter.v min_max_tracker.v lf_edge_detect.v $(DELETE) $@ $(XILINX_TOOLS_PREFIX)xst -ifn xst_lf.scr diff --git a/fpga/fpga_lf.bit b/fpga/fpga_lf.bit index d9c7515ea737c6ae3bcddf7d21fc3c9ed2220795..e942921a8685731cbcf0e7bb6f86a11ea629dd0c 100644 GIT binary patch literal 42175 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�$DR4HSsNmqcrsV|eYUj>P75ugYUv3T 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 literal 42175 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 xf%**8XW&CP1DNH, June 2014 //----------------------------------------------------------------------------- @@ -39,15 +30,20 @@ module fpga_lf( reg [15:0] shift_reg; reg [7:0] divisor; reg [7:0] conf_word; +reg [7:0] user_byte1; -// We switch modes between transmitting to the 13.56 MHz tag and receiving -// from it, which means that we must make sure that we can do so without -// glitching, or else we will glitch the transmitted carrier. always @(posedge ncs) begin case(shift_reg[15:12]) - 4'b0001: conf_word <= shift_reg[7:0]; // FPGA_CMD_SET_CONFREG - 4'b0010: divisor <= shift_reg[7:0]; // FPGA_CMD_SET_DIVISOR + 4'b0001: + begin + conf_word <= shift_reg[7:0]; + if (shift_reg[7:0] == 8'b00000001) begin // LF edge detect + user_byte1 <= 127; // default threshold + end + end + 4'b0010: divisor <= shift_reg[7:0]; // FPGA_CMD_SET_DIVISOR + 4'b0011: user_byte1 <= shift_reg[7:0]; // FPGA_CMD_SET_USER_BYTE1 endcase end @@ -60,11 +56,12 @@ begin end end -wire [2:0] major_mode; -assign major_mode = conf_word[7:5]; +wire [2:0] major_mode = conf_word[7:5]; // For the low-frequency configuration: wire lf_field = conf_word[0]; +wire lf_ed_toggle_mode = conf_word[1]; // for lo_edge_detect +wire [7:0] lf_ed_threshold = user_byte1; //----------------------------------------------------------------------------- // And then we instantiate the modules corresponding to each of the FPGA's @@ -93,13 +90,14 @@ lo_passthru lp( ); lo_edge_detect le( - pck0, pck_cnt, pck_divclk, + pck0, pck_divclk, le_pwr_lo, le_pwr_hi, le_pwr_oe1, le_pwr_oe2, le_pwr_oe3, le_pwr_oe4, adc_d, le_adc_clk, le_ssp_frame, ssp_dout, le_ssp_clk, cross_lo, le_dbg, - lf_field + lf_field, + lf_ed_toggle_mode, lf_ed_threshold ); // Major modes: @@ -108,7 +106,7 @@ lo_edge_detect le( // 010 -- LF passthrough mux8 mux_ssp_clk (major_mode, ssp_clk, lr_ssp_clk, le_ssp_clk, 1'b0, 1'b0, 1'b0, 1'b0, 1'b0, 1'b0); -mux8 mux_ssp_din (major_mode, ssp_din, lr_ssp_din, 1'b0, 1'b0, 1'b0, 1'b0, 1'b0, 1'b0, 1'b0); +mux8 mux_ssp_din (major_mode, ssp_din, lr_ssp_din, 1'b0, lp_ssp_din, 1'b0, 1'b0, 1'b0, 1'b0, 1'b0); mux8 mux_ssp_frame (major_mode, ssp_frame, lr_ssp_frame, le_ssp_frame, 1'b0, 1'b0, 1'b0, 1'b0, 1'b0, 1'b0); mux8 mux_pwr_oe1 (major_mode, pwr_oe1, lr_pwr_oe1, le_pwr_oe1, lp_pwr_oe1, 1'b0, 1'b0, 1'b0, 1'b0, 1'b0); mux8 mux_pwr_oe2 (major_mode, pwr_oe2, lr_pwr_oe2, le_pwr_oe2, lp_pwr_oe2, 1'b0, 1'b0, 1'b0, 1'b0, 1'b0); diff --git a/fpga/lf_edge_detect.v b/fpga/lf_edge_detect.v new file mode 100644 index 000000000..573adf7bd --- /dev/null +++ b/fpga/lf_edge_detect.v @@ -0,0 +1,77 @@ +//----------------------------------------------------------------------------- +// Copyright (C) 2014 iZsh +// +// 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. +//----------------------------------------------------------------------------- +// input clk is 24Mhz +`include "min_max_tracker.v" + +module lf_edge_detect(input clk, input [7:0] adc_d, input [7:0] lf_ed_threshold, + output [7:0] max, output [7:0] min, + output [7:0] high_threshold, output [7:0] highz_threshold, + output [7:0] lowz_threshold, output [7:0] low_threshold, + output edge_state, output edge_toggle); + + min_max_tracker tracker(clk, adc_d, lf_ed_threshold, min, max); + + // auto-tune + assign high_threshold = (max + min) / 2 + (max - min) / 4; + assign highz_threshold = (max + min) / 2 + (max - min) / 8; + assign lowz_threshold = (max + min) / 2 - (max - min) / 8; + assign low_threshold = (max + min) / 2 - (max - min) / 4; + + // heuristic to see if it makes sense to try to detect an edge + wire enabled = + (high_threshold > highz_threshold) + & (highz_threshold > lowz_threshold) + & (lowz_threshold > low_threshold) + & ((high_threshold - highz_threshold) > 8) + & ((highz_threshold - lowz_threshold) > 16) + & ((lowz_threshold - low_threshold) > 8); + + // Toggle the output with hysteresis + // Set to high if the ADC value is above the threshold + // Set to low if the ADC value is below the threshold + reg is_high = 0; + reg is_low = 0; + reg is_zero = 0; + reg trigger_enabled = 1; + reg output_edge = 0; + reg output_state; + + always @(posedge clk) + begin + is_high <= (adc_d >= high_threshold); + is_low <= (adc_d <= low_threshold); + is_zero <= ((adc_d > lowz_threshold) & (adc_d < highz_threshold)); + end + + // all edges detection + always @(posedge clk) + if (enabled) begin + // To enable detecting two consecutive peaks at the same level + // (low or high) we check whether or not we went back near 0 in-between. + // This extra check is necessary to prevent from noise artifacts + // around the threshold values. + if (trigger_enabled & (is_high | is_low)) begin + output_edge <= ~output_edge; + trigger_enabled <= 0; + end else + trigger_enabled <= trigger_enabled | is_zero; + end + + // edge states + always @(posedge clk) + if (enabled) begin + if (is_high) + output_state <= 1'd1; + else if (is_low) + output_state <= 1'd0; + end + + assign edge_state = output_state; + assign edge_toggle = output_edge; + +endmodule diff --git a/fpga/lo_edge_detect.v b/fpga/lo_edge_detect.v index 2856e5c65..dc97fc6f5 100644 --- a/fpga/lo_edge_detect.v +++ b/fpga/lo_edge_detect.v @@ -1,21 +1,34 @@ //----------------------------------------------------------------------------- -// The way that we connect things in low-frequency simulation mode. In this -// case just pass everything through to the ARM, which can bit-bang this -// (because it is so slow). +// Copyright (C) 2014 iZsh // -// Jonathan Westhues, April 2006 -// iZsh , June 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. //----------------------------------------------------------------------------- +// +// There are two modes: +// - lf_ed_toggle_mode == 0: the output is set low (resp. high) when a low +// (resp. high) edge/peak is detected, with hysteresis +// - lf_ed_toggle_mode == 1: the output is toggling whenever an edge/peak +// is detected. +// That way you can detect two consecutive edges/peaks at the same level (L/H) +// +// Output: +// - ssp_frame (wired to TIOA1 on the arm) for the edge detection/state +// - ssp_clk: cross_lo +`include "lp20khz_1MSa_iir_filter.v" +`include "lf_edge_detect.v" module lo_edge_detect( - input pck0, input [7:0] pck_cnt, input pck_divclk, - output pwr_lo, output pwr_hi, - output pwr_oe1, output pwr_oe2, output pwr_oe3, output pwr_oe4, - input [7:0] adc_d, output adc_clk, - output ssp_frame, input ssp_dout, output ssp_clk, - input cross_lo, - output dbg, - input lf_field + input pck0, input pck_divclk, + output pwr_lo, output pwr_hi, + output pwr_oe1, output pwr_oe2, output pwr_oe3, output pwr_oe4, + input [7:0] adc_d, output adc_clk, + output ssp_frame, input ssp_dout, output ssp_clk, + input cross_lo, + output dbg, + input lf_field, + input lf_ed_toggle_mode, input [7:0] lf_ed_threshold ); wire tag_modulation = ssp_dout & !lf_field; @@ -29,34 +42,25 @@ assign pwr_oe4 = tag_modulation; assign ssp_clk = cross_lo; assign pwr_lo = reader_modulation; assign pwr_hi = 1'b0; -assign dbg = ssp_frame; -assign adc_clk = ~pck_divclk; +// filter the ADC values +wire data_rdy; +wire [7:0] adc_filtered; +assign adc_clk = pck0; +lp20khz_1MSa_iir_filter adc_filter(pck0, adc_d, data_rdy, adc_filtered); -// Toggle the output with hysteresis -// Set to high if the ADC value is above 200 -// Set to low if the ADC value is below 64 -reg is_high; -reg is_low; -reg output_state; +// detect edges +wire [7:0] high_threshold, highz_threshold, lowz_threshold, low_threshold; +wire [7:0] max, min; +wire edge_state, edge_toggle; +lf_edge_detect lf_ed(pck0, adc_filtered, lf_ed_threshold, + max, min, + high_threshold, highz_threshold, lowz_threshold, low_threshold, + edge_state, edge_toggle); -always @(posedge pck0) -begin - if((pck_cnt == 8'd7) && !pck_divclk) begin - is_high = (adc_d >= 8'd190); - is_low = (adc_d <= 8'd70); - end -end +assign dbg = lf_ed_toggle_mode ? edge_toggle : edge_state; -always @(posedge is_high or posedge is_low) -begin - if(is_high) - output_state <= 1'd1; - else if(is_low) - output_state <= 1'd0; -end - -assign ssp_frame = output_state; +assign ssp_frame = lf_ed_toggle_mode ? edge_toggle : edge_state; endmodule diff --git a/fpga/lp20khz_1MSa_iir_filter.v b/fpga/lp20khz_1MSa_iir_filter.v new file mode 100644 index 000000000..a227a902c --- /dev/null +++ b/fpga/lp20khz_1MSa_iir_filter.v @@ -0,0 +1,81 @@ +//----------------------------------------------------------------------------- +// Copyright (C) 2014 iZsh +// +// 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. +//----------------------------------------------------------------------------- +// Butterworth low pass IIR filter +// input: 8bit ADC signal, 1MS/s +// output: 8bit value, Fc=20khz +// +// coef: (using http://www-users.cs.york.ac.uk/~fisher/mkfilter/trad.html) +// Recurrence relation: +// y[n] = ( 1 * x[n- 2]) +// + ( 2 * x[n- 1]) +// + ( 1 * x[n- 0]) + +// + ( -0.8371816513 * y[n- 2]) +// + ( 1.8226949252 * y[n- 1]) +// +// therefore: +// a = [1,2,1] +// b = [-0.8371816513, 1.8226949252] +// b is approximated to b = [-0xd6/0x100, 0x1d3 / 0x100] (for optimization) +// gain = 2.761139367e2 +// +// See details about its design see +// https://fail0verflow.com/blog/2014/proxmark3-fpga-iir-filter.html +module lp20khz_1MSa_iir_filter(input clk, input [7:0] adc_d, output rdy, output [7:0] out); + + // clk is 24Mhz, the IIR filter is designed for 1MS/s + // hence we need to divide it by 24 + // using a shift register takes less area than a counter + reg [23:0] cnt = 1; + assign rdy = cnt[0]; + always @(posedge clk) + cnt <= {cnt[22:0], cnt[23]}; + + reg [7:0] x0 = 0; + reg [7:0] x1 = 0; + reg [16:0] y0 = 0; + reg [16:0] y1 = 0; + + always @(posedge clk) + begin + if (rdy) + begin + x0 <= x1; + x1 <= adc_d; + y0 <= y1; + y1 <= + // center the signal: + // input range is [0; 255] + // We want "128" to be at the center of the 17bit register + // (128+z)*gain = 17bit center + // z = (1<<16)/gain - 128 = 109 + // We could use 9bit x registers for that, but that would be + // a waste, let's just add the constant during the computation + // (x0+109) + 2*(x1+109) + (x2+109) = x0 + 2*x1 + x2 + 436 + x0 + {x1, 1'b0} + adc_d + 436 + // we want "- y0 * 0xd6 / 0x100" using only shift and add + // 0xd6 == 0b11010110 + // so *0xd6/0x100 is equivalent to + // ((x << 1) + (x << 2) + (x << 4) + (x << 6) + (x << 7)) >> 8 + // which is also equivalent to + // (x >> 7) + (x >> 6) + (x >> 4) + (x >> 2) + (x >> 1) + - ((y0 >> 7) + (y0 >> 6) + (y0 >> 4) + (y0 >> 2) + (y0 >> 1)) // - y0 * 0xd6 / 0x100 + // we want "+ y1 * 0x1d3 / 0x100" + // 0x1d3 == 0b111010011 + // so this is equivalent to + // ((x << 0) + (x << 1) + (x << 4) + (x << 6) + (x << 7) + (x << 8)) >> 8 + // which is also equivalent to + // (x >> 8) + (x >> 7) + (x >> 4) + (x >> 2) + (x >> 1) + (x >> 0) + + ((y1 >> 8) + (y1 >> 7) + (y1 >> 4) + (y1 >> 2) + (y1 >> 1) + y1); + end + end + + // output: reduce to 8bit + assign out = y1[16:9]; + +endmodule diff --git a/fpga/min_max_tracker.v b/fpga/min_max_tracker.v new file mode 100644 index 000000000..516f0d6f3 --- /dev/null +++ b/fpga/min_max_tracker.v @@ -0,0 +1,65 @@ +//----------------------------------------------------------------------------- +// Copyright (C) 2014 iZsh +// +// 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. +//----------------------------------------------------------------------------- +// track min and max peak values (envelope follower) +// +// NB: the min value (resp. max value) is updated only when the next high peak +// (resp. low peak) is reached/detected, since you can't know it isn't a +// local minima (resp. maxima) until then. +// This also means the peaks are detected with an unpredictable delay. +// This algorithm can't therefore be used directly for realtime peak detections, +// but it can be used as a simple envelope follower. +module min_max_tracker(input clk, input [7:0] adc_d, input [7:0] threshold, + output [7:0] min, output [7:0] max); + + reg [7:0] min_val = 255; + reg [7:0] max_val = 0; + reg [7:0] cur_min_val = 255; + reg [7:0] cur_max_val = 0; + reg [1:0] state = 0; + + always @(posedge clk) + begin + case (state) + 0: + begin + if (cur_max_val >= ({1'b0, adc_d} + threshold)) + state <= 2; + else if (adc_d >= ({1'b0, cur_min_val} + threshold)) + state <= 1; + if (cur_max_val <= adc_d) + cur_max_val <= adc_d; + else if (adc_d <= cur_min_val) + cur_min_val <= adc_d; + end + 1: + begin + if (cur_max_val <= adc_d) + cur_max_val <= adc_d; + else if (({1'b0, adc_d} + threshold) <= cur_max_val) begin + state <= 2; + cur_min_val <= adc_d; + max_val <= cur_max_val; + end + end + 2: + begin + if (adc_d <= cur_min_val) + cur_min_val <= adc_d; + else if (adc_d >= ({1'b0, cur_min_val} + threshold)) begin + state <= 1; + cur_max_val <= adc_d; + min_val <= cur_min_val; + end + end + endcase + end + + assign min = min_val; + assign max = max_val; + +endmodule diff --git a/fpga/tests/Makefile b/fpga/tests/Makefile new file mode 100644 index 000000000..755604633 --- /dev/null +++ b/fpga/tests/Makefile @@ -0,0 +1,87 @@ +#----------------------------------------------------------------------------- +# Copyright (C) 2014 iZsh +# +# 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. +#----------------------------------------------------------------------------- + +TEST_OUTDIR = tb_tmp + +TB_SOURCES = \ + tb_lp20khz_1MSa_iir_filter.v \ + tb_min_max_tracker.v \ + tb_lf_edge_detect.v + +TBS = $(TB_SOURCES:.v=.vvp) + +TB_DATA = \ + pcf7931_write1byte_1MSA_data \ + pcf7931_read_1MSA_data + +all: $(TBS) tests + +%.vvp: %.v + iverilog -I .. -o $@ $< + +clean: + rm -rf *.vvp $(TEST_OUTDIR) + +tests: tb_lp20khz_1MSa_iir_filter tb_min_max_tracker tb_lf_edge_detect + +tb_lp20khz_1MSa_iir_filter: tb_lp20khz_1MSa_iir_filter.vvp | test_dir + @printf "Testing $@\n" + @for d in $(TB_DATA); do \ + $(call run_test,$@.vvp,$$d,in); \ + $(call check_golden,$$d,filtered); \ + done; \ + rm -f $(TEST_OUTDIR)/data.* + +tb_min_max_tracker: tb_min_max_tracker.vvp | test_dir + @printf "Testing $@\n" + @for d in $(TB_DATA); do \ + $(call run_test,$@.vvp,$$d,in filtered.gold); \ + $(call check_golden,$$d,min); \ + $(call check_golden,$$d,max); \ + done; \ + rm -f $(TEST_OUTDIR)/data.* + +tb_lf_edge_detect: tb_lf_edge_detect.vvp | test_dir + @printf "Testing $@\n" + @for d in $(TB_DATA); do \ + $(call run_test,$@.vvp,$$d,in filtered.gold); \ + $(call check_golden,$$d,min); \ + $(call check_golden,$$d,max); \ + $(call check_golden,$$d,state); \ + $(call check_golden,$$d,toggle); \ + $(call check_golden,$$d,high); \ + $(call check_golden,$$d,highz); \ + $(call check_golden,$$d,lowz); \ + $(call check_golden,$$d,low); \ + done; \ + rm -f $(TEST_OUTDIR)/data.* + +test_dir: + @if [ ! -d $(TEST_OUTDIR) ] ; then mkdir $(TEST_OUTDIR) ; fi + +.PHONY: all clean + +# $(1) = basename +# $(2) = extension to check +check_golden = \ + printf " Checking $(1).$(2)... "; \ + mv $(TEST_OUTDIR)/data.$(2) $(TEST_OUTDIR)/$(1).$(2); \ + if cmp -s tb_data/$(1).$(2).gold $(TEST_OUTDIR)/$(1).$(2); then \ + printf "OK\n"; \ + else \ + printf "ERROR\n"; \ + fi + +# $(1) = vvp file +# $(2) = data basename +# $(3) = data extensions to copy +run_test = \ + env echo " With $(2)... "; \ + cp tb_data/$(2).time $(TEST_OUTDIR); \ + for e in $(3); do cp tb_data/$(2).$$e $(TEST_OUTDIR)/data.$$e; done; \ + ./$(1) diff --git a/fpga/tests/plot_edgedetect.py b/fpga/tests/plot_edgedetect.py new file mode 100755 index 000000000..4e244ebc3 --- /dev/null +++ b/fpga/tests/plot_edgedetect.py @@ -0,0 +1,58 @@ +#!/usr/bin/env python +#----------------------------------------------------------------------------- +# Copyright (C) 2014 iZsh +# +# 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. +#----------------------------------------------------------------------------- +import numpy +import matplotlib.pyplot as plt +import sys + +if len(sys.argv) != 2: + print "Usage: %s " % sys.argv[0] + sys.exit(1) + +BASENAME = sys.argv[1] + +nx = numpy.fromfile(BASENAME + ".time") + +def plot_time(dat1): + plt.plot(nx, dat1) + +sig = open(BASENAME + ".filtered").read() +sig = map(lambda x: ord(x), sig) + +min_vals = open(BASENAME + ".min").read() +min_vals = map(lambda x: ord(x), min_vals) + +max_vals = open(BASENAME + ".max").read() +max_vals = map(lambda x: ord(x), max_vals) + +states = open(BASENAME + ".state").read() +states = map(lambda x: ord(x) * 10 + 65, states) + +toggles = open(BASENAME+ ".toggle").read() +toggles = map(lambda x: ord(x) * 10 + 80, toggles) + +high = open(BASENAME + ".high").read() +high = map(lambda x: ord(x), high) +highz = open(BASENAME + ".highz").read() +highz = map(lambda x: ord(x), highz) +lowz = open(BASENAME + ".lowz").read() +lowz = map(lambda x: ord(x), lowz) +low = open(BASENAME + ".low").read() +low = map(lambda x: ord(x), low) + +plot_time(sig) +plot_time(min_vals) +plot_time(max_vals) +plot_time(states) +plot_time(toggles) +plot_time(high) +plot_time(highz) +plot_time(lowz) +plot_time(low) + +plt.show() diff --git a/fpga/tests/tb_data/pcf7931_read_1MSA_data.filtered.gold b/fpga/tests/tb_data/pcf7931_read_1MSA_data.filtered.gold new file mode 100644 index 000000000..7851db99a --- /dev/null +++ b/fpga/tests/tb_data/pcf7931_read_1MSA_data.filtered.gold @@ -0,0 +1 @@ +  (/7?GNU\cioty~}zwtqmjgeb_][YWUTRQPONNMMMMMMMNOPPQRSUVXY[\]_`bdeghijlmopqrstuvwxxyyzz{||}}}}~~|yurolifca^\ZXVTRQPONMMLLLLLLLMNOPQRSTVWYZ\]_`bdeghiklmopqrstuvwxxyyz{{||}}}}~~~|xurolifc`^\YWVTRQPONMMLLLLLLMNNOPQRTUWXZ[]^`acefhijkmnpqrstuvwxxyzz{{||}}}~~~|xurolifc`^\YWVTRQPONMMMLLLLMMNOPQRSUVXZ[]^`acefhiklmopqsttuvwxyz{{||}}~~~{xtqnkheb`][YWVTSQQPPPPOOPPQRSTUVWYZ\]_`acdfgijlmnoprstuvvwxyz{{|||}~~~~{xurnkhec`^[YWUTRQOONMMMMMMMMNOPQRSTUWYZ\^_`bdfgijlmnpqstuuvwxyz{|||}~~|xurolifc`^\YWVTRQPONNNMMMMMNOPQRSTUWXZ\]_`bceghjkmnoqrtuvwwyz{{|}}~~}zvspmjgda_]ZYWUSRQPOOOOONNOOPQRSTUVXY[]^`abdfhiklmnpqstuvwxyz{|}}~~|xurokhec`^[YWVTRQPONNNNMMMMNOPPQRSTVXY[\^_abdfhiklmoprstuvwxyz{||}}~~zwspmjgda_][YWUTSRQQPPPPPPQRSTUVWXZ[]^`abdfgijlmnoqrsuvwwxyz{|}}}~~}yvspmjgda_\ZXWUSRQPOOONNNNNOPPQRSTUWYZ\]_`bceghjklnoqrstuvwxyz{||}}~|yvrolifc`^\ZXVTSQPONNNMMMMMNNOPQRSTVWY[\]_`bdfgijkmnpqrtuuvwyzz{||}}~{xurnkheb`][YWUTRQPONNMMMMMMMNOPQRSTUWXZ[]^`bceghjklnoqrstuvwxyz{{||}~~~{wtqnjgeb_][YXVTSRQQQQQPPQQRSTUVWXZ[]^`abdegijkmnoprstuvwxyzz{||}}~}yvrolifc`^\ZXVUSRQPPPOOOOPPQRSTUVWXZ\]_`acdfgijkmnoprstuuvwxyzz{{|}}~~|xurolifc`^\YXVTSQPONNNNMMMMNOPQRSTUVXY[]^_acdfhijlmnpqstuvwxyz{{||}}~|xurolifca^\ZXVTSQPOONNNNMMNNOPQRSSUVXY[\^_abdfgijklnoqrstuvwxyzz{{|}}~~~{wtqnkheb_][YWUSRPONNMMMMLLLMNOPQQRSUWXZ[]^`acefhijlmopqsstuvwxyzz{{|}}~~~~{wtqnkheb_][YWUSRQOONNMMMMMMMNOPQRRTUWXZ[]^`acefhijlmopqsttuvwxyz{{||}}~~}zwspmjgda_][YWVTSRQQQQPPPQRRSTUVWYZ\]_`acdfgijlmnopqstuvvwxyz{{||}}~~}zwtpmjgdb_]ZXVUSRPONNMMMMLLLMNOPQQRTUWXZ[]^_acefhijlmnpqrstuvwxyzz{{|}}~~~zwtpmjgdb_]ZXVUSRPONNMMMMLLLMNOOPQRSUVXZ[]^_acefhijlmopqsttuvwxyz{{||}~~~~{wtqnkheb_][YWUSRQOONNMMMMMMMNOPQRSTUWYZ\]_`bdegijkmnoqrstuvwxyz{{||}~~|xurnkheb`][YWVTSQPPOOOOOOOPPQRSTUVXY[\^_`bcefhijkmnoqrsttuvwxyyzzz{||}}}~~~|yvrolifc`^\ZXVUSRQPPPPPPPPPQRSTUVWYZ\]_`acdfhiklmnoqrstuvvwxyz{{||}}~~}zwtpmjgdb_]ZXVUSRPONNMMMLLLLMMNOPQRSUVXY[\]_abdfghjklnoqrsstuwxxyzz{{|}}~~~~}yvspmjgda_\ZXVTSQPONMMMMLLLLMNNOPQRSUVXY[\]_abdfgijkmnpqrstuvwxyyzz{||}}~~~~}zwspmjgda_\ZXVTSQPONMMMMLLLLMNNOPQRSUVXY[\^_abdfghjklnoqrstuvwxyyzz{||}~~~~}yvspmigda_][YWVTSRQQQPPPPPQRSTUVWXY[\^_`acdfhijklnopqsstuvwxxyzz{{||}}~~~~~{xuqnkheb`][YWUTRQPPOOOONNOOPQRSTUVWYZ\]^`acdfgijklnoprsstuvwxyyzz{{|}}}~~~~}zwtpmjgeb_][YWUTRQPONNNMMMMMMNOPQRRTUVXY[\]_abdeghiklnopqrstuvwxyyzz{||}}~~~~}zwspmjgda_]ZXVUSRPONNMMLLLLLLMNOPQQSTVWYZ\]^`bceghijlmopqrstuvwxxyzz{||}}}~~~|yvsolifca^\ZXVTSQPONMMLLLLLLLMNOPQRSTVWYZ[]^`bcefhijkmnpqrstuvwxxyyz{{||}}}}~~|xurolifc`^\ZXVUSRQPPPOOOOOPQRRSTUVXY[\]_`acdfgijklmopqrsttuvwxyyyzz{|||}}}}~~~~~~~{wtqmjgdb_][YWUTRQPOOOOONNOOPQRSTUVWYZ\]_`acdfgijklmopqrstuuvwxyyzz{{||}}}}~~~~zwtpmjgda_\ZXWUSRQPOOONNNNNOPQQRSTUWXZ[]^_abdeghiklmnpqrsstuvwxxyyzz{{||||}}}~~~~~~~~{wtqnkheb_][YWVTSRQPPOOOOOOPQRSTUVWXZ[]^`abdeghjklmnoqrsttuvwxyyzzz{||}}}}}~~~}zwspmjgda_\ZXVUSRQPOONNNNNNOPQQRSTVWXZ[]^_abdfghiklmnpqrsstuvwxxyyzz{{|||}}}~~~~~~~{xuqnkheb`][YXVTSRQPOOOOOOOPPQRSTUVXY[\^_`bcefhijklnopqrstuvvwxyyyzz{|||}}}}~~~~~~~~zwtpmjgda_\ZXWUSRQPOOONNNNOOPQRSTUVXY[\^_`bdeghiklmnoqrsttuvwxyyzzz{||}}}}~~~}zwspmjgda_\ZXVUSRQPOOONNNNOOPQRSTUVXY[]^_abdeghiklmnpqrsttuvwxyyzz{{||}}}}~~~~{xtqnkheb`][YWVTSRQPPPPPPPQRSTUVWXY[\^_`bcdfgijklnopqrstuvwwxyzz{{||}}~~~~~}zwspmjgda_\ZXVUSRQPOOOOONOOPQRSTUVXY[\^_abceghjklmnpqrstuuvwxyyzz{{||}}~~~~~zwtpmjgdb_][YWUTRQPPPOOOOOPQRSTUVWXZ[]^`abdfgijklnopqstuuvwxyzz{{||}}~~~~}zwspmjgda_\ZXWUSRQPPPOOOOPPQRSTUVWY[\^_abcefhjklmnpqrsuuvwxyzz{|||}}~}zwspmjgda^\ZXVUSRQPPPPOOOPPQRSTUVXY[\^_abceghjklmopqstuvvwxyz{{||}}~~~{wtqmjgdb_][YXVUSRRQQQQQQQRSTUVWXYZ\^_`bcdfgijlmnoprstuvwxyz{{||}}~~~zwspmjgda_][YWUTSRQQPPPPPPQRSTUVWXY[]^`abdeghjkmnoprstuvwxyz{{|}}}~~zwspmjgda_][YWUTSRQQPPPPPPQRSTUVWXY[\^_abceghjkmnoprstuvwwxyz{||}}~~~zwspmjgda_][YWVTSRQQQQPPPQQRSTUVWXZ\]_`acdfgiklmnoqrsuvvwxyz{||}}~~}zvspmjgda_][YWUTRQPOOOONNNOOPQRSTUVWY[\^_abdfgijlmnpqstuvwxyz{||}}~~}zwspmjgda_\ZYWUTRRQQPPPPPPQRSTUVWXY[]^`abdegijlmnoprstuvwxyz{{||}}~|yvsolifca^\ZXVTSQPOONNNNMMNNOPQRSTUVXZ[]^`aceghjklnoqrsuvvwxyz{|}}~~}zwspmjgdb_][YWUTRQPOOONNNNNOOPQRSTUWXZ[]^`acefhiklmoprstuvwxyz{{||}~~~zwspmjgda_\ZXWUSRQPPPPPPOPPQRSTUVWYZ\]_`bcefhjklmnpqrtuvvwxyz{|||}}~|yurolifc`^\ZXVTSQPOONNNNMMNNOPQRSTUVXY[]^_acdfhiklmopqstuvwxyz{{||}~~}yvrolifc`^\ZXVTSRQPPOOOOOOPQRSTUVWXZ[]^`abdegijklmopqsttuvwxyzz{{||}}~~~{xuqnkheb`][YWUTRQPONNMMMMMMMNOPQRSTUWYZ\]_`bdegijklnoqrstuvwxyz{||}}~{xurokhfc`^[YWVTRQPONNNNMMMMNOPQRRSUVXY[]^`acefhiklmoprstuvwxyzz{||}}~|yvrolifc`^\ZXVUSRQPPPOOOOOPQRSTTUWXZ[]^`abdegijklnoprstuuvwxyzz{{||}}~~~~}zwspmjgda_][YWUTSRQQPPPPPPPQRSTUVWXZ[]^`abdfgijklmopqrttuvwxyzz{{||}}~~~~}yvsolifca^\ZXVUSRQPPPPOOOPPQRSTUVWXZ[]^`abdfgijklnoprstuuvwxyzz{{|}}~~~{xuqnkhec`^[YWVTRQPONNNNMMMMNOPQRSTUVXY[\^_abdfgijkmnpqrttuvwxyz{{||}}~~{xuqnkheb`][YWUTRQPONNMMMMMMMNOPQRSTUWYZ\]^`acefhijlmopqrstuvwxyzz{{|}}~~~zwtqmjgdb_]ZXVUSQPONMMMMLLLLMMNOPQRSUVXY[\^_acdfgijkmnpqrstuvwxyyzz{||}}~~~~|yvrolifc`^\ZXVUSRQPPPPPOOPPQRSTUVWXZ[]^`abdfgijklnoprstuvvwxyz{{{|}}~~~|xuqnkheb`][YWVTSQPPOOOOOOOOPQRSTUVWYZ\]_`acefhijkmnoqrstuuvwxyzz{{||}}~~~~}zwtpmjgdb_]ZXWUSRPONNMMMMLLMMNOPQRRTUWXZ[]^`aceghiklmoprstuvwxyzz{{||}~~~{xtqnkheb`][YWVTRQPONNNMMMMMNOOPQRSTVWYZ\]_`bceghijlmopqrstuvwxyyzz{||}}~~~~|yurolifc`^\ZXVTSRQPPOOOOOOPPQRSTUVXY[\^_`bcefhiklmnpqrstuvwwxyzz{{||}}~~~~~}zvspmjgda_\ZXVUSRPONNMMMMLLMMNOPQRRTUWXZ[]^_acefhijlmoprsttuvxxyz{{||}}~~~~{xtqnkgeb_][YWUTRQPOOOOONNOOPQRSTUVWYZ\]_`acefhijklnopqrstuvwxxyzzz{||}}}}}~~|yurolifca^\ZXWUTRQQPPPPPPPQQRSTUVWXZ[]^_abceghijkmnoprsttuvwxxyyzz{{||}}}}~~~}zvspmjgda_\ZXVTSQPONMMMLLLLLMMNOPQRSTVWYZ\]_`bdeghijlmopqrstuvwxyyzz{||}}}~~~|yvsplifda^\ZXVTSQPONMMMLLLLLLMNOPQRSTVWYZ\]^`bcefhijlmopqrstuvwxxyyz{{||}}}}~~{xurnkhec`^\ZXVTSRQPPOOOOOOPQRSTUVWXZ[]^`abdeghjklmnpqrstuvwwxyzz{{||}}}~~~~~{wtqmjgdb_][YWUTRQPOOOOONNOOPQRSTUVWYZ\]^`acdfgijklmnpqrsstuvwxxyyzz{|||}}}}~~{xurnkhec`^\ZXVTSRQPPOOOOOOPPQRSTUVWYZ\]^`acdfghjklmnpqrsstuvwxxyyzz{{|||}}}~~~|yvrolifca^\ZXVTRQPONMMLLLLLLLMNOPQRSTVWYZ\]^`bcefhijlmnpqrstuvwwxyyzz{|||}}}}~~|yurolifca^\ZXVTRQPONMMLLLLLLLMNOPQRSTVXY[\^_acdfghjklnoprsstuvwxyyzz{||}}~~~~|yurolhfc`^\ZXVTSRQPPOOOOOOPPQRSTUWXZ[]^_abdeghjklmnpqrsttuvwxyyzz{{||}}}}}~~~}zwspmjgda_\ZXWUSRQPOOOONNOOPQRSSTVWXZ[]^`acdfgijklnopqsstuvwxyyzz{{||}}~~~~}zwspmjgda_\ZXWUSRQPOOOONNOOPQRSTUVWXZ\]^`abdfgijklmopqsstuvwxyzz{{{|}}}~~~~~~{wtqnjgeb_][YWUTSQQPPPPPPPPQRSTUVWXZ\]_`abdegijklnopqstuuvwxyzz{{||}}~~~~~|xurolifc`^\YWVTRQPONMMMMLLLMNNOPQRSUVXZ[]^`aceghiklmoprstuvwxyzz{{||}~~{xurolifc`^[YWUTRQPONNMMMMMMMNOPQRSTVWY[\^_abdfhijlmnpqstuvwxyz{{||}~~|yuroligeca_]\[[[ZZZZZ[\]^_`abcefhiklmoprsuvwxyz{}}~}zvspmjgda^\ZXVTSQPOONNNNMMNNOPQRRSTVXY[\^_abdfhiklmoprsuvwxyz{|}}~~}yvsolifca^\ZXVTSQPOONNNMMMMNNOPQRSTVWY[\^_abdfhiklmoprstuvwxz{||}}~|yurolifc`^[YWUTRQPONNNMMMMMNNOPQRSTVWY[\^_`bdfgijkmnpqrtuvwxyz{{||}~~{xuqnkheb`^\ZXWUTSRRQQQQQQRSTUVVWYZ\]_`acdfgijlmnoprstuvwwxyz{|||}}~~{xtqnkheb_][YWUSRPONNMMMMLLLMNOPQRSTUWXZ[]^`acefhiklmoprstuvwxyzz{{|}}~~{xuqnkheb`][YWUSRQONNNMMMMMMMNOPQRSTUWYZ\]^`bceghjklnoqrstuvwxyz{{|}}~}yvsolifc`^\ZXVUSRQPPPPPOOPPQRSTUVWXZ[]^`abdfgijklnoprstuuvwxyzz{{||}}~~~~~{xtqnkheb`][YWUTRQOONNMMMMLMMNOPQQRTUWXZ[]^`acefhiklmoprstuvwxyzz{{|}}~}zwspmjgda_][YWVTSRQQQPPPPQQRSTUVWXZ[]^`abdegijlmnoprstuvwwxyz{||}}~~~{xtqnkheb`][YWUSRQONNMMMMLLMMNOPQQRSUVXZ[\^_acefhijkmnpqrstuvwxyz{{||}~~~~{wtqnjgeb_][XWUSRPONNMMMMLLLMNOOPQRSUVXZ[\^_acefhijlmopqsttuwxyyz{{||}~~}zvsplifda_\ZYWUTSRQQPPPPPPQRSTUVWXZ[]^`abdeghjklmopqrstuvwxyyz{{||}}~~zwtqnjgeb_][XWUSRPONNMMMMLLLMNOOPQRSUVXY[\^_acdfgijkmnpqrstuvwxyzz{{|}}~~~}yvrolifc`^\ZXVUSRQPPPPOOOPPQRSTUVWYZ\]_`acdfgijkmnoprstuuvwxyzz{{||}~~~~zwtqnjgeb_][YWUSRQONNMMMMMLMMNOOPQRSUVXY[\]_abdfgijkmnoqrstuvwxyyzz{||}~~~~}zwspmjgda_\ZXVUSRPONNMMMLLLLMNNOPQRSUVXY[\^_acdfgijkmnpqrstuvwxyyzz{||}}~~~~}yvsplifda_\ZYWUTSRQQPPPPPPQQRSTUVWYZ\]^`abdeghjklmopqrstuvwwxyzz{{||}}~~~~~~{xtqnkheb_][YWUTRQPPOOOOONOOPQRSTUVWYZ\]_`acefhijkmnoqrsttuvwxyyzz{{|}}}~~~~}zwspmjgdb_]ZXVUSRPONNMMMMMLMMNOPQRSTUWXZ[]^`acefhijkmnpqrstuvwxyzz{{|}}~~~{xuqnkheb`][YWVTRQPPOOOOOOOOPQRSTUVWYZ\]^`acdfgijklmopqrstuuvwxyyzz{{||}}}}~~~}zvspmjgda_\ZXVTSQPONMMMLLLLLMMNOPQRSTVWYZ\]_`bdeghiklnopqrstuvwxyyzz{||}}~~~}zvspmjgda_\ZXVUSQPONNMMMMLLMMNOPQRSTUWXZ[]^`acefhijlmopqrstuvwxyzz{{|}}~~~~{xuqnkheb_][YWVTRQPPOOOOOOOOPQRSTUVWYZ\]_`acdfgijklnoprsstuvwxyyzzz{||}}}}}~~|yvsolifca^\ZXVTSQPONMMMLLLLLLMNOPQRSTVWYZ\]_`bdeghiklnopqrstuvwxyyzz{||}}~~~~~{wtqmjgdb_][YWUSRQPOOONNNNNOPQQRSTUWXZ[]^_abdfghiklmnpqrsstuvwxxyyzz{|||}}}}~~~~|yvrolifca^\ZXVTSQPONMMMLLLLLLMNOPPQSTVWYZ\]^`bceghijlmopqrstuvwxxyyz{{||}}}}~~{xuqnkheb`][YXVTSRQPPOOOOOOPQRSTUVWXZ[]^`abdeghjklmnpqrstuvwxxyzz{{||}}~~~~~|yvrolifca^\ZXVTSQPONMMLLLLLLLMNOPQQSTVWYZ\]^`bdeghijlmopqrstuvwwxyyzz{|||}}}}~~~~{xtqnkheb`][YXVTSRQPPOOOOOPPQRSTUVWXZ[]^`abdeghiklmnoqrsttuvwxxyzzz{{||}}}}}~~~{wtqmjgdb_][YWUTRQPOOOONNNOOPQRSTUVXY[\^_`bceghiklmnoqrsttuvwxyyzzz{||}}}}}~~~|xurolifca^\ZXVTRQPONMMMLLLLLMNOPQQSTUWYZ\]_`bdeghjklnoprsttuvwxyzz{{||}}~~~|yvspmjgda_\ZXVUSRPONNNMMMMMNNOPQRSTVWYZ\]_`bdeghjklnoqrstuvwxyzz{{||}~~}zwspmjgda^\ZXVUSRQPOOOOOOOPQRSTUVWXZ\]_`acdfhiklmnoqrstuvwxyzz{|||}}~~~{wtqnkheb`][YWVTSRQQQPPPPQQRSTUVWXZ[]_`acdegijlmnopqstuvvwxyz{{||}}~~|xurolifc`^[YWVTRQPONNMMMMMMNNOPQRSTVXY[\^_acdfhiklmoprstuvwxyz{{||}~~~{xtqnkheb`^\ZXVUTSRRQQQQQRRSTUVWXYZ\^_`bcdfhiklmnoqrsuvvwxyz{||}}~~|yvsolifca^\ZXVUSRPOONNNNMMMNOPQRRSUVXY[]^_acefhjklnoqrsuuvwxyz{|}}~~~{wtpmjgda_][YWVTSRQQQPPPPPQRSTUVWXY[]^`abdegijlmnoqrsuvwwxyz{|}}~~~zwspmjgda_][YWUTSRQQPPPPPPQRSTUVWXY[\^_abceghjklnoprstuvwxyz{{||}}~~zwtpmjgda_][YWVTSRQQQQPPPQQRSTUVWXZ[]_`acdfgijlmnoqrsuvvwxyz{||}}~~|xurokhfc`^[YWVTRQPONNNNMMMMNOOPQRSTVWYZ\]_`bdfgijkmnpqrtuuvwyzz{||}}~~zwspmjgda_][YWVTSRQQQPPPPQQRSTUVWXZ[]^`abdeghjkmnoprstuvwxyz{{||}}~~}yvspmjgda_\ZXWUSRQPOONNNNMNNOPQRRSUVXY[\^_`bdfgijkmnoqrstuvwxyz{{||}~~{xurnkhec`][YWUTRQPONNMMMMLMMNOPQRSTUWXZ\]^`aceghiklnoqrstuvwxyz{{||}~~{xurnkheb`][YWUTRQOONNMMMMMMMNOPQRSTUWYZ\]^`bceghiklmoprstuvwxyzz{{|}}~~}zwtpmjgdb_][YWVTSRQQQPPPPPQRSTUVVXY[\^_`bcefhiklmnoqrstuvvwxyzz{{||}~~~}yvsolifca^\ZXWUSRQQPPPPPPPPQRSTUVWYZ\]_`acdfhijkmnoprstuuvwxyz{{{|}}~~~{xurnkhec`^[YWVTRQPONNNMMMMMNOOPQRSUVXY[\^_abdfhijlmnpqstuvwxyz{{||}}~}zvsplifca^\ZXVUSRQPPPPOOOPPQRSTUVWXZ[]^`abdfgijkmnoqrstuvvwxyz{{||}}~~~~{wtqnkheb_][YWUSRPONNMMMMLLMMNOPQRSTUWXZ\]^`bceghjklnoqrstuvwxyzz{{|}}~~}zvspmjgda_][YWUTRQQPPPPPPPPQRSTUVWXZ\]_`abdfgijklmopqsttuvwxyzz{{||}}~~|yurokhec`^[YXVTSRQPPOOOOOOPQRSTUVWXZ[]^`abdfgijklmopqstuuvwxyz{{{|}}~~~{xuqnkheb`][YWUTRQPONNMMMMLMMNOOPQRSUVXY[\^_acdfhijkmnpqrstuvwxyzz{{|}}~~~{wtqnjgeb_][YWUSRPONNMMMLLLLMNNOPQRSUVXZ[\^_abdfgijkmnpqrstuvwxyzz{{|}}~~~~}yvrolifc`^\ZXVUSRQPPPPPOOPPQRSTUVWYZ\]_`acdfgijkmnoprstuvvwxyz{{{||}~~~~zwtqnjheb_][YWUSRPONNMMMMLLLMNOPPQRSUVXY[\^_abdfgijkmnoqrstuvwxyzz{{|}}~~~~|xurnkheb`][YWVTSQQPPOOOOOOPQRSTUVWXZ[]^_abdeghjklmnpqrstuvwxxyzz{{||}}~~~~|xuqnkheb`][YWVTRQPPOOOOOOOOPQRSTUVWYZ\]_`acdfhijklnopqrstuvwxxyyzz{||}}}~~~}zwspmjgda_\ZXVUSRPONNMMMLLLLMNNOPQRSUVXY[\]_abdfghjkmnoqrstuvwxyyzz{{|}}~~~~}zvspmjgda_][YWVTSRQQPPPPPPQRSTUUVXYZ\]_`abdeghjklmnpqrstuuvwxyzzz{{|}}~~~~~~{xtqnkheb_][YWUTRQPOOOOONNOOPQRSTUVWYZ\]_`acefhijlmnoqrsttuvwxyyzz{{||}}~~~~}zwtqnkheb`][YWUTRQPONNMMMMMMMNOPQRSTUWXZ[\^_acdfgijkmnoqrsttuvwxyzz{{|}}~~~~~{wtqmjgdb_][YWUSRQPOOONNNNOOPQRSTUVWYZ\]_`acdfgijklnopqrstuvvwxyyzz{{||}}}}~~~{wtqnjgdb_][YWUTRQPOOOONNNOOPQRSSTUWXZ[]^_abdeghiklmnpqrsstuvwxyyyz{{||}}}}}~~~}yvsplifda^\ZXVTSQPONMMMLLLLLLMNOPQQSTUWYZ[]^`bcefhijlmnpqrstuvwwxyyzz{||}}}~~~|yvsolifca^\ZXVTSQPONMMMLLLLLLMNOPQRSTVWYZ\]_`bdeghiklnopqrstuvwxyzz{{|}}}~~~|yurolifca^\ZXWUTRQQPPPOOOOPQQRSTUVXY[\^_`acefhijklnopqrstuvvwxyyzz{{||}}}}~~~~{wtpmjgda_][YWUTRQPOOOONNNOOPQRSTUVWYZ\]_`acdfhijklnopqrstuvwxxyyzz{{||}}}}~~~zwtpmjgda_\ZXWUSRQPOONNNNNNOPQQRSTVWYZ\]^`acdfgijklmopqrstuuvwxyyyzz{|||}}}}~~~|xurolifc`^\YWVTRQPONMMLLLLLLMMNOPQRSUVXZ[\^_acdfgijkmnoqrsttuvwxyzz{{|}}}~~~|yvspmjgda_\ZXVUSRPONNMMMMMMMNOPQRSTUWXZ[]^`acdfhijlmnpqrstuvwxyzz{{||}~~~~}zvspmjgda^\ZXVUSRQPOOOONNOOPQRSTUVWYZ\]_`acdfgijklnopqsttuvwxyyzz{{|}}~~~~~{xuqnkheb`][YXVTSRQQPPPPPPQRSTUVWXY[\^_abcefhjklmnpqrsuuvwxyzz{{||}}~~}zvsplifda^\ZXVUSRQPOOOOOOOPQRSTUVWXZ[]_`acdfgijlmnoqrstuvwxyzz{{||}}~~~{wtqnjgeb_][YWVTSRQPPPPPPPQQRSTUVWYZ\^_`bcefhiklmnoqrstuvwxyzz{||}}~~{xurokhfc`^[YWUTRQPONNMMMMMMNNOPQRSTVWY[\^_abdfhijlmoprstuvwxyz{||}}~|yurolifc`^\ZXVTSQPOONNNNMMNNOPQRSTUWXZ\]^`aceghjkmnoqrtuvwxyz{||}}~~~zwspmjgda_\ZYWUTRQQPPPPPPPQQRSTUVXY[\^`abdegijkmnoprstuvwwxyz{||}}~~{xtqnkheb`^\ZXVUTSRRQQQQQQRSTUVWXYZ\]_`bcdfhiklmnpqrtuvvwxyz{{||}}~}zvsplifca^\ZXWUTRQQPPPPPPPQQRSUUWXY[]^`abdegijkmnoprstuvwxyz{{||}}~~zwspmjgda_][YWUTRQQPPPPPPPQRSTUVWXY[\^_abceghjklmopqstuvvwxyz{|||}~~~zwspmjgda_\ZYWUTSRQQPPPPPPQRSTUVWXZ[]^`abdegijlmnoqrstuvwxyz{{|}}~~~zwspmjgda_\ZYWUTRQQPPPPPPPPQRSTUVWYZ\]_`acdfhiklmnpqrtuuvwxyz{{||}}~~{xurnkhec`^\ZXVUTSRQQQQQQQRSTTUVWYZ\]_`acdfgijlmnoprstuvwwxyz{|||}~~~zwspmjgda_][YWUTRQQPPPPPPPPQRSTUVWYZ\^_`bcefhiklmnpqrsuuvwxyz{{||}}~|yvrolifca^\ZXVTSQPOONNNMMMMNOPQRSTUVXZ[]^_acdfhiklmoprstuvwxyz{||}}~~~zwtpmjgda_\ZXWUSRQQPPPPOOPPQRSTUVWYZ\]_`acdfhijlmnoqrstuvwxxyz{{||}}~~}zvspmifda_\ZYWUTSRQQPPPPPPQRSTUVWXY[]^`abdegijkmnopqstuvvwxyz{{||}}~~}yvrolifc`^\ZXVTSRQPPOOOOOOPQRSTUUWXZ[]^`abdfgijklnoprstuuvwxyzz{{||}~~~}zwspmjgda_][YWVTSRQQPPPPPPQRSSTUVWYZ\]_`acdfgijkmnoprstuuvwxyzz{{||}~~~}yvsolifc`^\ZXVUSRQPPPOOOOPPQRSTUVWYZ\]_`acdfgijlmnoqrstuvwxyzz{||}}~~~{wtpmjheca`^\[ZZYYYYYYZ[\]^_`abdeghiklmoprstuvwyz{|}}~}zvspmjgda_\ZXVUSRPOONNNNMMNNOPQRRSUVXY[\^_abdfgijlmnpqstuvwxyz{||}}~}zwtpmjgeb_][YWUSRPONMLKKJIIIHHHHGGGGGGGGGGGGGGGHIKNRUY^bhnu|¾~{xtqnkheb`][YWUTRQOONNMMMMMMMNOPQRSTVWYZ\]_`bdfgijkmnpqstuvwxyz{||}}~~{xtqnkheb`][YWUTRQPONNNMMMMMNOOPQRSUVXY[\^_abdfgijklnoqrstuuvwxyzz{{|}}~~~}zwtpmjgdb_]ZXVUSRPONNMMMMLLLMNOPQQRSUVXZ[\^_abdfghjklnoqrsttvwxyyzz{||}}~~~~}zwspmjgda_]ZXVUSQPONMMMMLLLLMMNOPQRSUVXY[\^_acdfgijkmnoqrsttvwxyyzz{||}}~~~~|yvrolifc`^\ZXVUSRQPPPPPPPPPQRSTUVWYZ\]_`acdfgijklnoprstuuvwxyz{{{||}~~~}zwtqmjgeb_][YWUSRPONNMMMMLLLMNNOPQRSUVXY[\]_abdfghjklnoprsstuvwxyzz{{|}}~~~~}zwspmjgda_\ZXVUSQPONMMMLLLLLMMNOPQRSTVWYZ\]^`bdeghijlmopqrstuvwxyyz{{||}}~~~~}zvspmjgda_\ZXVTSQPONMMMLLLLLLMNOPQRSTVWYZ\]_`bdeghiklnoprsstuvwxyzz{{|}}~~~~}zvspmjgda_]ZXVUSRPONNMMMMLLLMNOPQRSTUWXZ\]^`acefhiklmoprsttuvwxyzz{{|}}~~{xuqnkheb`][YWVTSQPPOOOOOOOOPQRSTUVWYZ\]^`acdfgijklmopqrstuvwwxyyzz{||}}}}~~~|yvsolifda^\ZXVTSQPONMMMLLLLLLMNOPQRSTVWYZ\]^`bdeghiklmopqrstuvwxyyzz{||}}~~~~}zvspmjgdb_]ZXWUSRPONNMMMMMMMMNOPQRSTUWXZ[]^_acefhijkmnpqrstuvwxyyzz{||}}~~~~~}yvspmjgda_\ZXVUSRPONNMMMLLLLMMNOPQRSTVXY[\]_`bdeghiklmopqrstuvwxxyyzz{||}}}}~~~~{wtqnkgeb_][YWUTRQPPOOOOOOOOPQRSTUVXY[\]_`acefhijklnopqrsttuvwxyyyzz{|||}}}}~~~{xtqnkheb`][YWVTSQPPOOOOOOOOPQRSTUVWY[\]_`acdfgijklmopqrsstuvwxxyyzz{|||}}}}~~~~~~~{xurolifc`^\YWVTRQPONMMLLLLLLMMNOPQRSUVXZ[\^_acdfgijkmnoqrsstuvwxyzz{{||}}}~~~|yurolifca^\ZXVTRQPONMMMLLLLLMNOPQRSTVXY[\^_abdfgijkmnoqrstuvwxyz{{||}}~~|yvsolifda^\ZXVTSQPONNNNMMMNNOPQRSTUWXZ\]_`acefhjklmopqstuvwxyzz{||}}~~|yvsolifca^\ZXVTSQPONNNMMMMMNNOPQRSTVWY[\^_abdfgijlmnpqstuvwxyz{{||}~~~zwtpmjgda_][YWUTRQQPPPPPPPQRSTUVWXY[]^`abdegijkmnoprstuvwxyz{{||}}~~|yvspmjgda_\ZXWUSRQPOOOONNNOOPQRSTUVXY[\^_abdfgiklmnpqstuvwxyz{||}}~~|yurolifc`^\YXVTSQPOONNNNMMMNOPQRRSUVXZ[]^`acefhjklmoprstuvwxyz{|}}~~|xurnkheb`][YWUTRQPONNNNMMMMNOOPQRSTVWY[\^_abdfgijkmnpqstuvwxyz{||}}~~{xtqnkheb`^\ZXVUTSRQQQQQQQRSTUVWWYZ\]_`acdfgijlmnoprstuvwwxyz{|||}}~~zwspmjgda_][YWUTRQQPPPPPPPQQRSTUVWY[\^_`bceghjklmopqrtuvvwxyz{{||}}~|yurolifc`^\ZXVTSQPOONNNNMMNNOPQRSTUVXZ[]^_acdfhiklmoprstuvwxyz{||}}~|yvspmjgda_\ZXVUSRPPONNNNNMNNOPQRRSUVXY[\^_abdfgijlmnpqstuvwxyzz{||}}~|xurnkhec`][YWUTRQPONNMMMMLMMNOPQRSTUWXZ\]^`bceghjklnoqrstuvwxyz{{||}}~}zvsplifca^\ZXWUSRQQPPPPPPPQQRSTUVWYZ\]_`bcefhjklmopqrtuuvwxyz{{||}}~}yvsolifc`^\ZXVUSRQPPPPOOOPPQRSTUVWXZ[]^`abdegijklnoprstuuvwxyz{{{|}}~~~{xtqnkheb_][YWUSRPONNMMMMMMMMNOPQRSTUWYZ\]_`bdeghjklnoqrstuvwxyz{{||}~~|xurolifc`^\YXVTSQPOONNNNMMNNOPQRSTUWXZ[]^`acefhiklmoprstuvwxyzz{||}}~~|xurolifc`^\YWVTSQPONNNMMMMMMNOPQRRTUWXZ[]^_acefhijlmopqrstuvwxyz{{||}}~~|yurolifc`^\ZXVTSRQPPOOOOOOPQRSTUVWXZ\]_`acdfgijkmnoprstuuvwxyzz{{||}}~~|yurokheb`][YWVTSQPPOOOOOOOOPQRSTUVWY[\]_`acefhijlmnpqrstuuvwxyzzz{||}}~~~~~}yvsolifca^\ZXWUTRQQPPPPPPPQRSTUVWXY[]^_abceghjklmnoqrstuvvwxyzz{{||}}~~~~|xurnkheb`][YWVTSQPPOOOOOOOOPQRSTUVXY[\^_`bcefhijlmnoqrsttuvwxyzz{{||}}~~~~|yvrolifc`^\ZXVTSRQPPOOOOOOPQQRSTUVXY[\^_`bcefhijkmnoqrsttuvwxyyzz{{||}}}~~~|yurolhfc`^\ZXVUSRQPPPOOOOOPQRSTUVWXZ[]^`abdfgijklmopqsttuvwxyzz{{||}}~~~|xurnkheb`][YWVTRQPPOOOOOOOOPQRSTUVXY[\^_`bcefhijkmnoqrsttuvwxyyzzz{||}}}}~~~}yvspmjgda_][YWUTSRQQPPPPPPQRSTUUVXYZ\]_`acdfgijklnopqsttuvwxxyzz{{||}}~~~~~|xurnkheb`][YWVTSQPPOOOOOOOPPQRSTUVXY[\^_`bcefhijkmnoqrsttuvwxyyzz{{|}}~~~~|xurnkheb`][YXVTSQQPPOOOOOOOPQRSTUVWYZ\]_`acefhijklnopqrstuvwwxyyzz{{||}}}}~~|xurnkhec`^[YXVTSQQPOOOOOOOPQRSTUVWXZ[]^`abdeghjklmopqrstuvwxyyzz{{||}~~~~~{xtqnkheb_][YWUTRQPPOOOOONOOPQRSTUVWYZ\]_`acdfhijklnoprsstuvwxxyzzz{{|}}}}}~~~|yvsplifda_][YWUTSRQQPPPPPPQRSSTUVWYZ\]_`abdfgijklmnpqrstuuvwxyyzz{{||}}}}~~~{xuqnkheb`][YWVTSQPPOOOOOOOOPQRSTUVWY[\]_`acefhijkmnoqrsttuvwxyyzz{{||}}}}~~~{xuqnkheb`][YWVTSQPPOOOOOOOOPQRSTUVWYZ\]_`acdfgijklmopqrstuvvwxyyzz{{|}}}}}~~{xuqnkheb`][YWVTSQPPOOOOOOOPPQRSTUVXY[\^_`bcefhijlmnpqrstuvvwxyzz{{||}}~~~~~{wtqmjgdb_][YWUTRQPOOOONNNOOPQRSTUVWYZ\]^`acdfghjklmopqrsttuvwxyyzz{{||}}}}~~~|yvsolifda^\ZXVTSQPONMMMLLLLLLMNOPQRSTVWYZ\]_`bdfghjklnopqrstuvwxyyzz{||}}~~~~{wtqmjgdb_][YWUTRQPOOONNNNNOOPQRSTUVXY[\^_`bdeghijkmnoqrrstuvwxxyyzz{||}}}}}~~~|yvsolifca^\ZXVTSQPONMMLLLLLLLMNOPPQRTUWXZ[]^`acefgijkmnpqrsstvwwxyyzz{||}}}}~~|yvsplifda^\ZXVTSQPONMMMLLLLLLMNOPQQSTVWYZ[]^`bceghijlmopqrstuvwxxyyz{{||}}}}~~|xurolifc`^\ZXVUSRQPPOOOOOOOPQRSTUVXY[\]_`acefhijklnopqrstuvwwxyyzz{{||}}}}}~~~~{xurokhfc`^[YWVTRQPNNMMLLLLKLLMNOPPQSTVWYZ\]^`bdeghijlmopqrstuvwxxyyz{{||}}}}~~{xuqnkheb`^[YXVTSRQPOOOOOOOOPQRSTUVXY[\]_`acdfgijklmopqrsstuvwxxyyzz{{||||}}}~~~~~~|yurolifc`^\YWVTRQPONMMLLLLLLMNNOPQRTUWXZ[]^`acefhijlmopqrstuvwxyzz{{||}}~~~~~{xurokhfc`^[YWUTRQPONMMMLLLLMMNOPQRSTVXY[\^_acdfhijlmnpqrstuvwxyz{{||}}~~~{wtqmjgdb_][YWUTRQPPOOOOOOPQQSTUUWXZ[]^`abdegijklnopqstuuvwxyyz{{{|}}~~~~}zwspmjgda_\ZXWUSRQPPPOOOOPPQRSTUVWYZ\^_abcefhjklmopqrtuvvwxyz{{||}}~~~{xtqnjgeb_][YWVTSRQQPPPPPPQRSTUVWXZ[]^`abdegijlmnoprstuvwxyzz{||}}~~|xurolifc`^[YWVTRQPONNNMMMMMNNOPQRSUVXY[]^_acdfhiklmoprstuvwxyz{|}}~~|yvrolifc`^\ZXVTSQPOONNNNNNNNOPQRSTUWXZ\]_`bcegijlmnpqstuvwxyz{|}}~~}zvspmjgda_]ZYWUSRQPOOONNNNNOPQRSTUVWYZ\^_`bcegijkmnoqrtuvvwxzz{|}}~~~{wtqmjgda_][YWVTSRQQQPPPPPQRSTUVWXY[\^_abceghjklnoprstuvwxyzz{||}}~~~{xtqnkheb`][ZXVUSRRQQQQQQQRSSTUVWYZ\]_`acdfgijlmnoprstuvwxyyz{|||}~~|xurnkhec`][YWUTRQPONNMMMMMMMNOPQRSTUWYZ\]_`bdegijkmnpqrstuvwxyz{{||}~|xurnkhec`][YWUTRQPONNMMMMMMMNOPQRSTVWYZ\]_`bdegijkmnpqrstuvwxyz{||}}~~{xtqnkheb`^\ZXVUTRRQQQQQQQQRSTUVWXZ[]^`abdeghjklmopqrtuuvwxyz{{||}}~~~{xtqnkheb_][YWUSRPONNMMMMLLMMNOPQQRTUWXZ[]^`acefhijlmopqrstuvxyyz{{|}}~~zwtqmjgeb_][YXVTSRQQQPPPPPQRRSTUVWYZ\]_`acdfgijkmnoprstuuvwxyzz{{||}}~~~}zvsplifca^\ZXVUSRQPPPPOOOPPQRSTUVWXZ\]_`acdfgijkmnoprstuuvwxyz{{{||}~~~{xurnkhec`^[YWVTSQPONNNNNMMNNOPQRSTUVXZ[]^_acdfhiklmnpqstuuvwxyz{{||}~~|xurolifc`^\ZXVTSQPONNNMMMMMMNOPQRSTUWXZ[]^`acefhijlmopqsttuvwyyz{{||}~~}yvrolifc`^\ZXVUSRQPPPOOOOOPQRSSTUWXZ[]^_abdeghjklmopqsttuvwxyzz{{||}}~~~}yvsplifda_\ZYWUTRQQPPPPPPPPQRSTUVWXZ[]^`abdeghjklmopqrstuvwxyyz{{{|}}~~~~~|yurolhec`^\ZXVTSRQPPPOOOOPPQRSTUVWXZ[]^`abdeghjklmopqsttuvwxyzz{{|}}~~~{wtqnjgeb_][YWUSRPONNMMMMLLLMNOPPQRSUWXZ[]^`acefhijlmnpqrstuvwxyzz{{|}}~~}zwtpmjgdb_]ZXVUSRPONNMMMMLLLMNOPPQRSUVXY[\]_abdfgijkmnoqrstuvwxyzz{{|}}~~~~|yvrolifc`^\ZXVUSRQPPPOOOOPPQRSTUVWXZ\]^`abdfgijkmnoprstuvvwxyz{{||}}~~|xurnkheb`][YWVTSQPPOOOOOOOPPQRSTUVWY[\]_`acefhijkmnoqrsttuvwxyyzz{{|}}}~~~~|yvsolifda_\ZYWUTSRQQPPPPPPQRSTUVWXY[\^_`bcefhijlmnoprstuuvwxyyzz{{||}~~~~~|xuqnkheb_][YWUTRQPPOOOOOOOPPQRSTUVXY[\^_`bcefhijkmnoqrstuuvwxyyzz{{|}}~~~~~{wtqnkheb`][YWUTRQPONNNMMMMMNNOPQRSTVWYZ\]^`bceghiklmopqsttuvwxyzzz{||}}~~~~}zwspmjgda_\ZXVTSQPONMMMMLLLLMMNOPQRSTVWYZ\]_`bdeghijlmopqrstuvwxyyz{{|}}}~~~~{wtpmjheca_^\[ZYYYYYYYYZ[\]^_`acdfghiklnoqrstuvwyz{{|}~~~{wtqnkheb_][YWUSRPONNMMLLLLLLMNOPPQRTUWXZ[]^`bcefhijlmopqrstuvwxyzz{{|}}~~~~zwtqnkheb`][YWUTRQPONNMMMMLLMNNOPQRSUVXY[\]_abdfgijkmnpqrstuvwxyzz{{||}~~~}yvspmjgda_\ZXVTSQPONMMMLLLLLLMNOPQQSTUWYZ[]^`bceghijlmopqrstuvwxxyyzz{||}}}}~~~{wtqmjgdb_][YWUTRQPOOOOOONOOPQRSTUVXY[\^_`bcefhijlmnoqrsttuvwxyyzz{{||}}}}~~~}zwspmjgeb_][YWUSRPONNMMMLLLLMMNOPQRSTVWYZ\]_`bdeghijlmopqrstuvwxxyyz{{||}}}}~~~|yurolifca^\ZXVTRQPONMMLLLLLLLMNOPQRSTVXY[\]_abdfghjklnopqrstuvwxyyzz{{||}}}}~~~~{xtqnkheb`][YXVTSRQPPPOOOOPQQRSTUVXY[\^_`acdfgijklnopqrstuvwwxyyzz{{||}}}}}~~~|yvspmjgda_\ZXVTSQPONMMMLLLLLMNOPQRSTVWYZ\]_`bdeghiklnoprstuuwxyyzz{||}}~~~~~zwspmjgda_\ZXVUSRQPOOOOOOOPPQRSTUWXZ[]^`abdfgijkmnoprstuuvwxyzz{{||}}~~|yvspmjgda_]ZXWUSRQPONNNNNNNOOPQRSTUWXZ\]_`bceghjklnoqrstuvwxyz{|||}}~|yvrolifca^\ZXVTRQPONNMMMMMMMNOPQRSTVWY[\^_abdfhijlmoprstuvwxyz{||}}~~~{wtpmjgda_][YWUTRQQPPPPPPPQRSTUVWXY[]^`acdfgijlmnoqrtuvwwxyz{|}}}~~}yvspmjgda_\ZXWUSRQPOOOONNNOOPQRSTUVXY[\^_abdfgijlmnpqstuvwxyz{|}}~~~{wtpmjgda_][YWVTSRQQQPPPPPQRSTUVWXZ[]^`abdfgijlmnoqrsuvvwxyz{||}}~~|xurolhfc`^[YXVTSQPOONNNNMMNNOPQRSTUWXZ[]^`aceghjklnoqrsuvwwyz{||}}~}zwspmjgdb_][YWUSRQPOONNNNNNOOPQRSTUVXZ[]^_acdfhiklmoprstuvwxyz{{||}~~}zvspmifda_\ZXWUSRQQPPPPPOPPQRSTUVWYZ\]_`bcefhjklmnpqrtuvvwxyz{{||}}~}zvsolifca^\ZXWUSRQQPPPPPPPPQRSTUVWYZ\]_`acdfhijlmnoqrstuvwxyzz{|||}~~|xurokhec`^[YWUTRQPONNMMMMLMMNOPQRSTUWXZ[]^`aceghiklmoprstuvwxyz{{||}~~~{wtqnkheb`][ZXVUSRRQQQQPPQQRSTUVVXY[\^_`bcdfhiklmnoqrstuvwwxyz{{||}}~~~{xuqnkheb`][YWUSRQONNMMMMLLLMNOPQQRTUWXZ[]^`aceghiklnoprstuvwxyzz{{|}}~~~{xuqnkheb`][YWUSRQOONNMMMMLMMNOPQQRTUWXZ[]^`bceghjklnoqrstuvwxyz{{||}}~}zwspmjgda_][YWUTSRQQPPPPPQQRSTUVWXZ[]^`abdegijkmnoprstuvwxyzz{||}}~~~{xtqnkheb`][YWUSRQONNMMMMMLMMNOPQQRTUWXZ[]^`acefhijlmoprsttuvxyyz{{||}~~}yvsolifca^\ZXWUTRRQQPPPPPPQRSTUVWXZ[]^`abdeghjklmnpqrstuvwwxyz{{{||}~~~~{xurokhfc`^[YWVTRQPONNMMMMMMMNOPQRRTUWXZ[]^`acefhijlmopqsstuvwxyz{{||}~~}yvrolifc`^\ZXVUSRQPPPOOOOOPQRSTTUWXZ[]^`abdeghjklmopqsttuvwxyyz{{{|}}~~~~~{xurnkhec`^[YWVTSQPONNNNMMMNNOPQRSTUVXY[\^_`bdegijklnoqrstuvwxyyz{{||}}~~~|yurokheb`][YWVTSQPPOOOOOOOOPQRSTUVWY[\^_`bcefhijkmnoqrstuuvwxyzz{{||}}~~~~}zwspmjgda_][YWVTSRQQQPPPPQQRSTUVWXY[\^_abcefhiklmnoqrstuvwwxyz{{|||}~~~~}zwspmjgda_\ZXVUSQPONMMMMLLLLMMNOPQRSTVXY[\]_abdfghjkmnoqrstuvwxxyzz{{|}}~~~~}zwspmjgda_\ZXVTSQPONMMMMLLLLMMNOPQRSTVXY[\]_abdfghjklnoqrsttuwxxyzz{{|}}~~~~}zvspmjgda_][YWVTSRQQQPPPPQQRSTUVWXY[\^_abcefhijlmnoprsttuvwxyyzz{{|}}~~~~~~{xtqnkheb_][YWUTRQPPOOOOOOOOPQRSTUVWY[\]_`acefhijkmnoqrstuuvwxyzzz{||}}~~~~~}zwtqnkheb`][YWUTRQPONNNMMMMMNNOPQRSTUWXZ[]^`acefhijkmnpqrstuvwxxyzz{{|}}}~~~~~{wtqmjgdb_][YWUTRQPOOOOONNOOPQRSTUVWY[\]_`acefhijkmnoprsstuvwxxyzzz{||}}}}~~}zvspmjgda_\ZXVUSRPONNMMMMLLMMNOPQRSTUWXZ[]^`acefhijkmnpqrstuvwxyyzz{||}}~~~~|xuqnkheb`][YWVTRQPPOOOOOOOOPQRSTUVWYZ\]_`acefhijklnoprsttuvwxyyzz{{||}}}}~~~~{xtqnkheb`][YXVTSRQPPOOOOOOPQRSSTUVXY[\^_`bcefhijlmnoqrstuuvwxyzzz{||}}~~~~~~{wtqmjgdb_][YWUSRQPOOONNNNNOOPQRSTUWXZ[]^_abdfghjklmnpqrsstuvwxxyyzz{|||}}}}~~~}zvspmjgda_\ZXVUSRPONNMMMMLLMMNOPQRSTUWXZ[]^_acdfgijkmnoqrsttuwxxyzz{{|}}~~~~~zwtpmjgda_\ZXWUSRQPOONNNNNNOOPQRSTUVXZ[\^_`bdeghijlmnoqrrstuvwxxyyyz{{||||}}}~~~~~~|yvsolifda^\ZXVTSQPONMMMLLLLLLMNOPQRSTVWYZ\]_`bdeghiklnopqrstuvwxyyzz{||}}~~~|yvspmjgda_\ZXVUSRPONNMMMMMMMNNOPQRSTVWYZ\]^`acefhijlmopqrstuvwxyyzz{{|}}~~~~|yvspmjgda_\ZXVUSRPONNMMLLLLLMNOPPQRTUWXZ[]^_acefgijkmnoqrsstuvwxyyzz{{|}}}}}~~~zwtpmjgda_\ZXWUSRQPOOOONNOOPQQRSTUWXZ[]^`abdfgijklnopqrstuvwxxyzz{{||}}~~~~}zwspmjgda_\ZXVUSRQPOOOONNNOPQRSTTVWXZ\]^`abdfghjklmopqrstuvwwxyzz{{||}}}~~~~~{xurokhfc`^[YWUTRQPONMMMMLLMMNOPQRSTUWXZ\]^`aceghiklmoprstuvwxyz{{||}~~~{xuqnkheb`^\ZXVUSRRQQQQQQQRRSTVVWYZ\]_`acdfgijlmnoprstuvwwxyz{||}}~~~{xurnkhec`^[YWUTRQPONNMMMMMMMNOPQRSTUWYZ\]_`bdfgijkmnpqrtuuvwyzz{||}}~~{wtpmjgdb_][YWVTSRQQQQQPPQQRSTUVWYZ\]_`bcdfhiklmopqrtuvwxxyz{|}}~~}zwspmifda_\ZYWUTRQQPPPPPPPQRSTUUVXY[\^_abceghjklnoprstuvwwxyz{||}}~|yurolifc`^\YXVTSQPOONNNNNMNNOPQRSTUWYZ\]_`bcegijlmnpqstuvwxyz{|}}~~}zwspmjgda_]ZXWUSRQPOONNNNNNOOPQRSTUWXZ\]_`aceghjklnoqrstuvwxyz{||}}~~{wtpmjgda_][YWUTSRQPPPPPPPPQRSTUVWY[\^_abceghjklnopqstuvvwxyz{|||}~~|yvrolifca^\ZXVTSQPOONNNNMMMNOPQRSTUWXZ[]^`aceghjklnoqrsuvvwxz{{|}}~}zvsplifca^\ZXWUSRQQPPPPPPPPQRSTUVWYZ\]_`acdfgijkmnoprstuvvwxyz{{||}}~~~{wtqnkheb`][YXVUSRRQQQQQQQQRSTUVWXZ[]^`abdeghjklmnpqrstuvwxyzz{{||}}~~|xurnkheb`][YWUSRQONNNMMMMLMMNOPQRSTUWYZ\]^`bceghjklnoqrstuvwxyz{{||}}~~~zwspmjgda_\ZYWUTRQQPPPPPPPQQRSTUVXY[\^_`bceghjklmopqstuvvwxyz{{||}}~}zvsplifca^\ZXVUSRQPPPOOOOOPQRSTUVWXZ\]_`acdfgijkmnoprstuvvwxyz{{{|}}~~~{xtqnkheb`][YWUTRQOONNMMMMMMMNOPQRSTVWYZ\]_`bdegijklnoqrstuvwxyz{{||}~~}yvsolifc`^\ZXVUSRQPPPOOOOOPQRSTTUWXZ[]^_abdegijklmopqstuuvwxyzz{{||}}~~~}yvspmigda_][YWUTSRQQPPPPPPQRSTUVWXZ[]^`abdeghjklmopqrtuuvwxyyz{{||}}~~{xurokhfc`^[YWVTSQPONNNMMMMMMNOPQRSTUWXZ[]^`acefhijlmopqsttuvxyyz{{||}~~~{wtqnjgeb_][YWUSRPONNMMMMLLLMNOOPQRSUVXZ[]^_acefhijlmopqrstuvwxyz{{||}~~~}yvsolifc`^\ZXVUSRQPPPPOOOPPQRSTUVWYZ\]_`acdfgijkmnoprstuuvwxyz{{{|}}~~|xurnkheb`][YWVTSQPPOOOOOOOOPQRSTUVXY[\^_`bceghjklmopqrstuvwxyyz{{{|}}~~~~~}yvspmjgda_][YWUTSRQQPPPPPPQRSTUVWXY[\^_abcefhiklmnoqrstuvvwxyzz{{||}}~~~~~}zwtpmjgdb_]ZXVUSRPONNMMMLLLLMNNOPQRSUVXY[\^_abdfgijkmnoqrstuvwxyzz{{||}~~~~}zwspmjgda_]ZXVUSRPONNMMMLLLLMNNOPQRSUVXY[\]_abdfgijkmnpqrstuvwxyzz{{|}}~~~|yurokhec`^[YXVTSQQPOOOOOOOPPQRSTUVXY[\^_`bcefhijlmnoqrsttuvwxyyzz{{||}}}}~~~|yurolifc`^\ZXVTSRQPPOOOOOOPPQRSTUVXY[\^_`bdeghjklmnpqrstuvwxyyzz{{|}}~~~~|xurnkheb`][YWVTSQPPOOOOOOOOPQRSTUVWY[\]_`acefhijkmnoqrsttuvwxyzzz{||}}~~~~|xurnkheb`^[YXVTSQQPPOOOOOOPQRSTUUWXZ[]^_abdeghjklmnpqrstuvwxxyzz{{||}~~~~~}zvspmjgda_\ZXVTSQPONNMMMLLLLMNNOPQRSTVWYZ\]_`bdeghijlmopqrstuvwxyyzz{||}}~~~~}yvspmigda^\ZXVTSQPONMMMLLLLLLMNOPQRSTVWYZ\]_`bdeghiklnoprstuvwxyyzz{{|}}~~~~|yvrolifca^\ZXWUTRQQPPPPPPPPQRSTUVWXY[\^_`bcefhijklnopqrstuvwxxyyzz{||}}}}~~~~{xtqnjgdb_][YWUTRQPOOOONNNOOPQRSTTVWXZ[]^_abdfghjklmopqrstuvwwxyyzz{||}}}}~~~~{wtqnjgdb_][YWUTRQPOOOONNNOOPQRSTUVWYZ\]^`acdfgijklmopqrsttuvwxyyzz{{||}}}}~~~{xuqnkheb`][YXVTSRQPPPOOOOPPQRSTUVWXZ[]^`abdeghjklmnpqrstuvvwxyzzz{{|}}}}~~~~~{wtqnjgdb_][YWUSRQPOOONNNNNOPQQRSTUWXZ[]^_abdfghiklmnpqrsstuvwxxyyzz{{||||}}~~~|xurolifc`^\ZXVUSRQPPPOOOOOPPQRSTUVWYZ\]^_abdfghjklmnpqrsttuvwxyyyzz{|||}}}}~~~~{wtqmjgdb_][YWUTRQPOOOOONNOOPQRSTUVWYZ\]_`acdfhijklnopqrstuvwwxyyzz{{|}}}}~~~~{wtqnjgeb_][YWUTRQPPOOONNNNOPPQRSTUWXZ[]^_abdeghiklmnpqrsstuvwxxyyzz{{|||}}}}~~~~~~|yvrolifca^\ZXVTRQPONMMLLLLLLLMNOPQRSTVWYZ\]_`bdeghiklmopqrstuvwxyyzz{{|}}}}~~~{xurnkhec`^\ZXVUSRQPPPPOOPPQQRTUVWXY[\^_`bcefhijlmnoprsttuvwxyyzz{{||}}}}~~~}zwspmjgda_\ZXVUSRQPOONNNNNNOPQRSTUVXY[\^_`bceghijlmnoprsstuvwxxyyzz{{||}}}}}~~~~~~~{wtqnkheb_][YWVTSQPPOOOOOOOPQQRSTUWXZ[]^_abdeghijlmnoqrsstuvwxxyyzz{{||}}}}~~~~zwtpmjgda_]ZXWUSRQPOOOOOOOOPQRSTUVWYZ\]_`acefhijlmnoprstuuvwxyzz{{||}}~~~~~zwspmjgda_\ZXVUSRQPOOOONNOOPQRSTUVWYZ\]_`acdfhijkmnoprsttuvwxyyzz{{||}}~~~~~{wtpmjgeca_][ZYYXXXXXXXYZ[\]^_abdeghijlmoprstuvwxz{{|}}~|yvsolifca^\ZXVTSQPONNMMMMMMMNOPQRRTUWXZ\]_`bdegijkmnpqstuvwxyz{|}}~~}yvsolifc`^\ZYWUTSRRRQQQQRRSTUVWXZ[]_`bcefhjkmnpqrsuvwxyz{|}~~zwspmjgda_\ZYWUTRRQQPPPPPPQRSTUVWXY[\^_abceghjklnoprstuvwxyz{{||}}~~zwtpmjgda_][YWVTSRQQQQPPPQQRSTUVWYZ\]_`bcdfhiklmnpqrtuvwxxyz{|}}~~~zwspmjgda_][YWUTSRQQPPPPPPQRSTUUVXY[\^_abceghjklmopqstuvvwxyz{||}}~~~{xtqnkheb`^\ZXWUTSRRQQQQQQRSTUVVWYZ\]_`abdegijkmnoprstuvvwxyz{|||}~~}zwspmifda^\ZXWUTRQQPPPPPPPQQRSTUVXY[\^_abceghjklnoprstuvwxxyz{||}}~~}zvsplifca^\ZXWUSRQPPPPPOOPPQRSTUVWYZ\]_`acdfhiklmnoqrstuvwxyz{{||}}~~zwspmjgda_][YWUTSRQQPPPPPQQRSTUVWXZ[]^`abdegijlmnoprstuvwxyz{{|}}}~|yurolifc`^[YWVTRQPONNMMMMMMMNOPQRSTUWXZ[]^`aceghiklnoqrstuvwxyz{{||}~~{xuqnkheb`][YWUSRQOONNMMMMLMMNOPQRSTUWYZ\]^`bceghiklmoprsttuvwxyz{{||}~~~{xuqnkheb`][YWUSRQOONNMMMMLMMNOPQRSTUWYZ\]^`bceghjklnoqrstuvwxzz{||}}~|xurolifc`^\YXVTSQPOONNNNMMNNOPQRSTUVXZ[]^_acefhiklmopqstuvwxyzz{||}}~|xurolifc`^\ZXVTSQPONNNMMMMMNNOPQRSTUWYZ\]^`aceghiklmopqsttuvxyyz{{||}~~~{wtqnjgeb_][YWUSRPONNMMMMLLLMNNOPQRSUVXY[\^_acdfhijkmnpqrstuvwxyz{{||}~~~~zwtqmjgdb_]ZXVUSRPONNMMMMLLLMNOOPQRSUVXZ[\^_acdfhijkmnpqrstuvwxyzz{||}~~~{wtqnkheb_][YWUSRPONNNMMMMMMMNOPQRSTVWYZ\]_`bdegijklnoqrstuvwxyzz{{|}}~~|xurnkheb`][YWVTSQPPOOOOOOOOPQRSTUVWYZ\]_`acdfhijklnopqrstuuvwxyyyz{{||}}}}~~~}zwspmjgdb_]ZXVUSRPONNMMMLLLLMNNOPQRSUVXY[\]_`bdeghiklnopqrstuvwxyyzz{|}}}~~~{xuqnkheb`][YWVTRQPPOOOOONOOPQRSTUVWYZ\]^`abdfghjklmnpqrsstuvwxyyyz{{||}}}}~~~}zvspmjgda_\ZXVTSQPONMMMMLLLLMMNOPQRSTVWY[\]_`bdeghiklnopqrstuvwxyyzz{||}}~~~~|yurolifc`^\ZXVTSRQPPOOOOOOPQRSTUVWXZ[]^_abdeghjklmopqrstuvwxxyzz{{||}}~~~~}zvspmjgda_\ZXVUSQPONNMMLLLLLLMNOPQRSTVWYZ[]^`bcefhijlmnpqrstuvwxxyyzz{||}}}}~~}yvspmigda^\ZXVTSQPONMMMLLLLLLMNOPQRSTVWYZ\]^`bdeghijlmopqrstuvwxxyyz{{|}}}}~~|yvspligda_\ZXVTSQPONMMMLLLLLLMNOPQRSTVWYZ\]^`bceghijlmopqrstuvwxyyz{{|}}}~~~}zwspmjgdb_]ZXWUSRPONNMMMMMMMMNOPQRSTUWXZ[]^`acefhijlmopqsttuvwxyzz{{|}}~~~~}zwtqmjheb_][YWUTRQPONNMMMLLLMMNOPQRSTVWYZ[]^`bcefhijlmnpqrstuvwwxyyzz{||}}}}}~~|yurolifca^\ZXVTRQPONMMLLLLLLLMNOOPQRTUWXZ[\^`acefgijkmnoqqrstuvwxxyyz{{|||}}}~~~|xurolifc`^\YWVTRQPONMMLLLLKLLMMNOPQRTUWXZ[\^_acdfghjkmnopqrstuvwxxyyz{{||}}}}~~|yurolifca^\ZXVTSQPONMMMLLLLLLMNOPQRSTVWYZ\]^`bcefhijlmopqrstuvwxxyyzz{||}}}}~~|yurolifca^\ZXVTSQPONMMMMLLLLMNOPPQRTUWXZ[\^_acdfghjklnopqrstuvwxxyyzz{{|||}}}~~~}zvspmifda^\ZXVUSRPOONNNNNNNOOPQRSTVWYZ\]^`acdfghjklmopqrsstuvwwxxyyzz{{||||}}~~~~~~~{xtqnkheb`][YWVTSRQPPPOOOPPQRSTUVWXY[\^_`bcefhijlmnoprsttuvwwxyyzz{{||}}}}}~~~{xurnkhec`^[YWUTRQPONMMMLLLLLMNOPQRSTVWYZ\]_`bdeghiklmopqrstuvwxyyzz{{|}}}}~~~~{xuqnkhec`^[YWUTRQPONMMMMLLLMNNOPQRSUVXZ[\^_acefhijlmopqstuvwxyzz{{||}~~}zvsplifda^\ZXVUSRQPPOOOOOOPPQRSTUVXY[\^_`bceghiklmnpqrstuvwxyyz{{{|}}~~~~|yurolifc`^\YWVTRQPONNNMMMMMNOPPQRSUVXY[]^_acdfhiklmoprstuvwxyz{||}}~|xurolifc`^[YWVTSQPOONNNMMMMNOOPQRSTVXY[\^_abdfhijlmoprstuvwxyz{||}}~|xurolifc`^\YXVTSQPOONNNNNNNNOPQRSTUWXZ[]^`aceghjklnoqrsuuvwxyz{|}}~~}zvspmjgda_][YWUTRQPOOONNNNNOOPQRSTUVXZ[]^_acdfhijlmnpqstuvvwxyz{||}}~|xurokhec`^[YWVTRQPONNNMMMMMMNOPQRSTUWXZ[]^`aceghiklmoprstuvwxyzz{{|}}~~{wtqnkheb_][YWUSRPONNMMMMLLLMNOOPQRSUVXZ[\^_acdfhijkmnpqrstuvwxyz{{||}~~~{xtqnkheb`][YWUSRQONNMMMMLLLMNOPPQRSUVXZ[\^_acefhijlmoprstuvwxyzz{{|}}~~~{xurolifc`^\ZXVTSQPONNNNMMMMNOOPQRSTVWY[\]_`bdeghjklnoqrstuvwxyzz{{|}}~~}zvsplifca^\ZXVUSRQPPPOOOOOPQRSTTUWXZ[]^_abdeghjklmnpqrstuvwxyyzz{{|}}~~~~}zvspmigda_\ZYWUTRQQPPPPPPPQRSTUVWXY[\^_`bcefhiklmnoprstuuvwxyzz{{||}~~~~zwtqmjgdb_][XWUSRPONNMMMLLLLMMNOPQRSUVXY[\]_`bdfghjklnoqrstuvwxyyzz{||}}~~~}yvsolifca^\ZXWUSRQQPPPPPPPQQRSTUVWYZ\]_`acdfhijkmnoprstuuvwxyzz{{{|}}~~~~~~{xurnkhec`^[YWUTRQPONNMMMLLMMNOPPQRSUVXY[\^_abdfgijkmnpqrstuvwxyzz{{||}~~~~}zwtqmjgdb_]ZXWUSRPONNMMMLLLLMMNOPQRSTVWYZ\]_`bdfghjklnoqrsttvwxyyzz{||}}~~~|yvsolifda_\ZYWUTRRQQPPPPPPQRSTUVWXY[\^_`acdfgijklmopqrstuuvwxyzz{{||}}~~~~|yvrolifc`^\ZXVTSRQPPOOOOOOPQRSTUVWXZ[]^`abdfgijklnoprstuuvwxyzz{{{|}}~~~~|yvrolifca^\ZXWUTRQQPPPPPPPQQRSTUVWYZ\]_`abdfghjklmnpqrstuuvwxyyzz{{||}}~~~~|xuqnkheb_][YWUTRQPOOOONNNNOPQRSTUVWYZ\]_`acefhijkmnoqrstuuvwxyzz{{||}}~~~~~{xtqnkheb_][YWVTRQPPOOOONNOOPQRSSTVWXZ[]^_abdfghjklmopqrstuvwxxyzzz{||}}}}~~~|xurnkheb`][YXVTSRQPPOOOOOOPPQRSTUVXY[\^_`bceghjklmnpqrstuuvwxyzz{{||}}~~~~|yvsplifda^\ZXVTSQPONMMMLLLLLLMNOPQQSTUWXZ[]^`acefhijkmnpqrstuvwxxyyz{{|}}}}~~~{xuqnkheb`][YWVTSQPPOOOOOOOOPQRSTUVWYZ\]^`acdfgijklnopqrstuvwxxyzzz{||}}}}~~~~{wtqnjgdb_][YWUTRQPOOOONNNNOOPQRSTUVXY[\^_`bdeghijlmnpqrsstuvwxxyyzz{|||}}}}~~~|yurolifca^\ZXWUTRQQPPPPOOPPQRSSTUVXY[\]_`acdfgijklmnpqrsstuvwxxyyzz{{||||}}}~~~~~~~{wtqmjgdb_][YWUTRQPOOONNNNNOOPQRSTUVXY[\^_`bdeghijkmnopqrstuvwxxyyzz{|||}}}}~~~~{wtqmjgdb_][YWUTRQPOOONNNNNOOPQRSTUVXY[\]_`bcefhijklnopqrstuvwwxyyyz{{||||}}}~~~~~~~~{xtqnkheb`][YWVTSQPPOOOOOOOOPQRSTUVWYZ\]_`acdfgijklnopqrstuvwwxyyzz{{||}}}}}~~~~zwtpmjgdb_][YWUSRQPOOONNNNNOOPQRSTUVXY[\^_`bcefhijklnopqrstuvvwxxyyzz{{||||}}}~~~~~~~{xtqnkheb`][YXVTSRQPOOOOONOOPQRSSTUWXZ[\^_`bceghijkmnopqrstuvvwxxyyzz{{|||||}}}}}}~~~~~zwtpmjgda_]ZYWUTRQPOOOONNNNOPQRRSTUWXZ[]^_`bdeghijkmnopqrstuvwwxxyyzz{{||||}}}~~~~~~|yurolifca^\ZXWUSRQPPPOOOOOPPQRSTUVWYZ\]^`acdfgijklmopqrsttuvwxyyyzz{{|||}}}~~~~~~~|yurolifca^\ZXVTSQPONMMLLLLLLLMNOOPQRTUWXZ[\^`acefgijkmnoqrrstuvwxxyyz{{||}}}~~~|yvrolifca^\ZXVTRQPONMMMLLLLLLMNOPQRSTVWYZ\]^`bdeghijlmopqrstuvwxxyzz{{|}}}}~~~zwtpmjgda_\ZXWUSRQPOONNNNNNOOPQRSTUVXY[\]_`bcefhijklnopqrstuvvwxxyyzz{{||||}}}~~~~~~~{wtqnjgeb_][YWUTRQPOOOONNNOOPQRSTUVWYZ\]_`acdfgijklmopqrstuuvwxyyzz{{|||}}}}~~~|yurolifca^\ZXVTSQPONMMLLLLLLLMNOPQRSTVWYZ\]^`bcefhijlmnpqrsstvvwxyyzz{{|||}}}}~~~~~~~~zwtpmjgdb_][YWUSRQPOOONNNNOOPQRSTUVXY[]^_abdeghiklmnoqrsstuvwxxyyzz{{||}}}}~~~}zvspmjgda_\ZXVUSRQPOONNNNNNOPQRSTUVXY[\^_`bcefhijklnopqrstuvvwxyyyzz{||||}}}~~~~~~~zwtpmjgdb_][YWUTRQPPPOOOOOPQRSTUVWXY[\^_`bcefhijklnopqrstuvwwxyzzz{{||}}}}~~~}yvsplifca^\ZXVTSQPPOONNNNNOOPQRSTVWXZ\]^`acdfgijklmopqrstuvvwxyyzz{{|}}}}~~~}zwspmjgda_\ZXWUSRQPPOOOOOOPPQRSTUVXY[\^_abceghiklmnoqrsttuvwxyyzz{{||}}}~~~}zvspmifda^\ZXVUSRQPPOOOOOOPQRSTUVWXZ[]^`abdfgijklnopqstuuvwxyz{{{||}~~|yvspmjgda_]ZXWUSRQPOONNNNNNNOPQRSTUVXZ[]^_abdfhijlmnpqstuuvwxzz{||}}~~~zwspmjgda_\ZYWUTRQQPPPPPPPPQRSTUVWYZ\^_`bcefhiklmnpqrtuvvwxyz{|||}}~{xurolifc`^\ZXVTSQPOONNNNMMNNOPQRSTUVXZ[]^`aceghjklnoqrstuvwxyz{|}}~~}yvspmjgda_\ZXWUSRQPOOONNNNNNOPQRSTUVXY[]^_abdfhijlmopqstuvwxyz{{||}}~}zvsplifca^\ZXWUSRQPPPPPOOPPQRSTUVWXZ\]_`acefhiklmnpqrtuuvwxyz{{||}}~~zwspmjgda_][YWUTRQQPPPPPPPPQRSTUVWYZ\]_`acdfhiklmnpqrstuvwxyzz{|||}~~~zwtpmjgda_][YWVTSRQQQPPPPPQRSTUVWXY[]^`abdegijlmnoprstuvwxyzz{||}}~~~zwtpmjgda_][YWUTRQQPPPPPPPPQRSTUVWYZ\]_`acefhiklmnpqrtuuvwxyz{{||}}~~~{wtqnjgeb_][ZXVUSRRQQQPPPPQRSSTUVWYZ\]_`acdfgijklmopqsttuvwxyzz{{||}~~~~zwspmjgda_\ZYWUTRQQPPPPPPPQQRSTUVWYZ\^_`bcefhiklmnoqrstuvwxyyz{{||}}~{xurnkhec`^[YWUTRQPONNNMMMMMNOPPQRSUVXY[\^_`bdfgijkmnoqrstuvwxyz{{||}~~|yuroligeca`^]\[[[[[[[[\]^_`abdeghiklmopqstuvwxz{|}~~|yvspmjgda_\ZXVUSRPPONNNNMMMNOPQQRSTVWY[\]_`bdegijklnoqrstuvwxyz{||}}~|yvrolifca^\ZYWUTSRRQQQQQQRSTUVWXY[\^_abdeghjlmnoqrsuvwxyyz{|}~~~|xurnkheb`][YWVTSQPPOOOOOOOOPQRSTUVWYZ\]_`acefhijkmnoqrsttuvwxyzzz{||}}~~~~}yvsolifca^\ZXVUSRQPPOOOOOOPPQRSTUVWYZ\]_`acefhijklnoprsstuvwxyyzz{{||}}}~~~|yurokhec`^[YXVTSQPPOOOOOOOPPQRSTUVXY[\^_`bceghiklmnoqrstuuvwxyzz{{||}~~~~~|xurnkheb`][YWVTSQPPOOOOOOOOPQRSTUVWYZ\]^`acdfgijklnopqrstuvwwxyyzz{||}}}}~~~|yvrolifca^\ZYWUTSRQQPPPPPPQRSSTUVXYZ\^_`acdfgijklnopqsttuvwxyyzz{{||}}~~~~|xurnkheb`][YWVTSQPPOOOOOOOOPQRSTUVXY[\^_`bceghjklmnpqrstuuvwxyzzz{{|}}~~~~~|xurnkheb`][YXVTSQPPOOOONNOOPQRSTTVWYZ\]^`acdfgijklmopqrstuvwwxyyzz{||}}}}}~~~zwtqnjgeb_][YWUSRPONNMMMMLLLMNOOPQRSUVXY[\^_acdfhijkmnpqrstuvwxyz{{||}~~~}zwtpmjgdb_][YWUSRPONNMMMMLLMMNOOPQRSUVXY[\^_abdfghjkmnoqrsttvwxxyzz{{|}}~~~~~{wtqnkheb`][YWUTRQPONNNMMMMMNNOPQRSTUWXZ[]^_acdfgijkmnoqrsttvwxxyzz{{|}}~~~~~|yvsolifda^\ZXVTSQPONMMLLLLLLLMNOPPQRTUWXZ[]^`acefgijkmnoqrrstvwwxyyzz{||}}}}~~~|yvsolifda^\ZXVTSQPONMMMLLLLLLMNOPPQRTUWXZ[]^`acefhijkmnpqrstuvwwxyyzz{||}}}}~~|yurolifca^\ZXVTRQPONMMLLLLLLLMNOPQQSTVWYZ[]^`bcefhijlmnpqrstuvwxxyyz{{||}}}~~~|yvspmjgda_\ZXVTSQPONMMMMLLLLMNNOPQRSUVXY[\]_abdfghiklnopqrstuvwxyyzz{||}}}}~~~}zvspmjgdb_][XWUSRPONNMMMLLLLLMNOPPQRTUWXZ[\^_acdfghjkmnopqrstuvwxxyyz{{||}}}}~~~{wtqmjgdb_][YWUSRQPOOONNNNNOOPQRSTUVXY[\]_`bcefhijkmnopqrstuvwxxyyzz{{||}}}}~~~}zvspmjgdb_][YWUSRQOONNMMMMMMMNOPQRSTUWXZ[]^_acdfgijkmnoqrsttuwxxyzz{{|}}}~~~~}zwspmjgda^\ZXVUSRPPOONNNNNNNOPQRSTUVXY[\^_`bcefhijklnopqrsttuvwxxyyzz{{||||}}}~~~~~~~{xurnkhec`^[YWUTRQPNNMMLLLLLLLMNOPQRSTVWYZ\]_`bcefhijlmopqrstuvwxxyyz{{||}}}~~~~{xtqnkheb`][YWVTSQPPOOOONOOPPQRSTUVXY[\^_`bcefhijkmnoprsstuvwxxyyzz{{||}}}}~~~~{xurolifc`^\YWVTRQPONMMLLLKKLLMNOPQRSTVXY[\]_abdfghiklnopqrstuvwxyyzz{{||}}}}~~~~{xurnkhec`^[YWUTRQONNMMMLLLLMMNOPQRSUVXY[\^_abdfgijklnoqrstuvwxyyz{{||}}~~~~|yvsolifda_\ZXVUSRPOONNNMMMMNOOPQRSUVXY[\^_abdfgijklnoqrstuvwxyzz{{||}~~~~{xuqnkhec`][YWUTRQPONNMMMMMMMNOPQRRTUWXZ[]^`aceghiklmoprstuvwxyz{{||}~~~{xuqnkhec`][YWUTRQPONNNMMMMMMNOPQRSTVWYZ\]_`bdegijkmnpqrtuuvwyzz{||}}~~{xuqnkheb`][YWUTRQPONNNMMMMMNNOPQRSTVWYZ\]_`bdfgijkmnpqrtuvwxyz{{||}~~{xurnkhec`^[YWVTRQPONNNNMMMMNOPQRRSUVXY[\^_abdfhijlmnpqstuvwxyz{{||}~~|yvsplifda_\ZXWUSRQPOONNNNNNNOPQRSTUVXY[\]_`bdeghjklnoprstuvwxyzz{{|}}~|xurnkhec`][YWUTRQPONNMMMMMMMNOPQRRTUWXZ[]^`acefhijlmoprstuvwxyzz{{|}}~}zwspmjgda_][YWVTSRQQPPPPPPQRSTUVWXY[]^`abdeghjklmopqrtuuvwxyzz{{||}~~~zwspmjgda_\ZXWUSRQPPPPOOOOPQRSTUVWYZ\]_`acdfgijklnoprstuvvwxyz{{||}}~~~{wtqnkheb_][YWUSRQONNMMMMLLMMNOPQQRTUWXZ[]^`acefhijlmoprstuvwxyzz{{|}}~~{xurolifc`^\ZXVTSQPOONNNNMMNNOPQRSTUVXY[\^_abdfgijkmnpqrstuvwxyz{{||}~~}yvrolifc`^\ZXVTSRQPPOOOOOOPPQRSTUVXY[\^_`bceghiklmnpqrstuvwwxyzz{{||}~~~~~}zwtpmjgdb_][XWUSRPONNMMMMLLLMNNOPQRSUVXY[\]_abdfgijkmnpqrstuvwxyzz{{|}}~~~{xurnkhec`^[YWVTSQPONNNMMMMMNOOPQRSTVWYZ\]_`bceghijlmopqrstuvwxyzz{{|}}~~~~~zwtqnjgeb_][YWUSRPONNMMMLLLLMNNOPQRSTVWYZ\]_`bdeghiklnoqrsstuvwxyzz{{|}}~~~~~zwtqmjgdb_][XWUSRPONNMMMLLLLLMNOPQRSTVWYZ\]_`bdeghiklmopqrstuvwxyyz{{||}}~~~~}zwspmjgda_\ZXVUSRPONNMMMLLLLLMNOPQQSTVWYZ\]_`bdeghjklnoqrsstuvwxyzz{{|}}~~~~~zwtqmjgeb_][XWUSRPONNMMMMMLMMNOPQQRTUWXZ[]^`acefhijlmopqsttuvxyyz{{||}~~~~{xtqnkheb`][YWVTRQPONNNMMMMMNOOPQRSTVWYZ\]^`acefhijkmnpqrstuvwxyyzz{||}}~~~}zwspmjgda_]ZXVUSQPONMMMLLLLLLMNOPQRSTVWYZ[]^`bcefhijlmopqrstuvwxyzz{{|}}}~~~|yurolifc`^\ZXVTSRQPPOOOOOOPPQRSTUVXY[\^_`acefhijkmnoprsstuvwxyyzz{{||}}~~~~{xtqnkheb_][YWUTRQPPOOOOONOOPQRSTUVWYZ\]^`acdfgijklmopqrsttuvwxyyzz{{||}}}}~~|yvsolifda^\ZXVTSQPONMMMLLLLLLMNOPQRSTVWYZ\]^`bdeghijlmopqrstuvwxyyzz{||}}~~~~~{xtqnkgeb_][YWUTRQPPOOOONNNOPQQRSTUWXZ[\^_`bdeghijkmnopqrstuvwwxyyyz{{||||}}}~~~~~~|yvsolifda^\ZXVTSQPONMMLLLLLLLMNOPPQRTUWXZ[\^`acefgijkmnpqrsstvwwxyyz{{|}}}}~~~|yvsplifda^\ZXVTSQPONMMMLLLLLLMNOPPQRTUWXZ[]^`acefgijkmnpqrrstuvwxyyzz{||}}}}~~~zwtpmjgda_\ZXVUSRQPOONNNNNNNOPQRSSUVWYZ\]^`acdfghiklmnpqqrstuvwwxxyyzz{{{{||}}}}}}~~~~~{xtqnkheb_][YWUTRQPOOOONNNOOPQRSTUVWYZ\]_`acdfgijklnopqrstuvwxxyyzz{||}}}}~~~~zwtpmjgda_\ZXWUSRQPOONNNNNNOOPQRSTUVXY[\^_`bcefhijklnopqrstuvwwxyyzz{{||||}}}~~~~~~~{wtqnkheb`][YWVTSQQPPOOOOOOPQRSTTUWXY[\^_`bcefhijklnopqrstuuvwxyyyzz{{|||}}}~~~~~~~}zwspmjgda_\ZXVUSRPPOONNNNNNNOPQRSTUVXZ[\^_`bdeghijkmnopqrstuvwwxxyyzz{{||||}}~~~~~~{xurnkhec`^\ZXVTSRQPPOOOOOOPPQRSTUVXY[\]_`acefhijklnopqrstuvwwxyyzz{{|}}}}}~~|yvsolifda^\ZXVTSQPONMMMLLLLLLMNOPQRSUVXY[\]_abdfghjklnoprrstuvwxyyzz{||}}~~~~{wtqnkheb_][YWUTRQPPOOONNNOOPQRSTUVXY[\^_`bcefhijkmnoprsstuvwxxyyzz{{||}}}}}~~~~zwtpmjgda_]ZYWUTRQPOOOOONOOPQRSTUVWXZ[]^`abdeghjklmnpqrstuuvwxyzzz{{|}}}}~~~}zwspmjgda_\ZXVUSRQPOOONNNNOPPQRSTVWXZ[]^_abdeghjklmopqrstuvvwxyyzz{{|}}}}~~~~{xuqnkheb`^\ZXVUSRQQPPPPPPQRSTUUVXYZ\]_`acdfgijklnopqrttuvwwxyzz{{||}}~~~~}zwspmjgda_\ZXVUSRQPOOOOOOOPPQRSTUWXY[]^_abdeghjklmopqstuuvwxyzz{{||}}~~~~zwspmjgda_\ZXVUSRQPPOOOOOOPPQRSTUVXY[]^_abdeghjklmopqstuuvwxyz{{{||}~~~zwspmjgda_\ZXWUTRQQPPPPPPPQRRTUVWXY[]^`abdeghjkmnopqstuvwwxyz{|||}}~}zwspmifda^\ZXWUTRQQPPPPPPPQQRSTUVWYZ\^_`bcefhiklmnoqrstuvwxyz{{||}}~~~{xtqnkheb`^\ZXVUSRRQQQQQQQRSTUVWWYZ\]_`bcdfgijlmnoprstuvwxyyz{||}}~~{wtpmjgda_][YWUTSRQQPPPPPPQRSTUVWXZ[]^`abdfgijlmnoqrstvvwxyz{|}}}~~|yvrolifc`^\ZXVTSQPOONNNNNNNNOPQRSTUWYZ\]_`bdegijlmnpqstuvwxyz{|}}~~}yvspmjgda_][YWUTRQPOOONNNNNOOPQRSTUWXZ[]^`acefhjklnoprstuvwxyz{||}}~}zwspmjgda_][YWUTSRQQPPPPPPQRSTUVWXY[\^_abceghjklmnpqrtuvvwxyz{|||}~~|xurokhec`^\ZXWUTSRRRQQQQQRSTUUVWYZ\]_`acdfgijlmnoqrstuvwxyyz{||}}~~|xurokhec`^[YWVTRQPONNNMMMMMMNOPQRSTUWYZ\]^`bdegijkmnpqrtuuvwxyz{||}}~~{xtqnkheb`^\ZXVUSRQQQQPPPPQRSTUVWXY[\^_`bcefhiklmnpqrstuvwxyyz{{||}}~~ \ No newline at end of file diff --git a/fpga/tests/tb_data/pcf7931_read_1MSA_data.high.gold b/fpga/tests/tb_data/pcf7931_read_1MSA_data.high.gold new file mode 100644 index 000000000..a9719827c --- /dev/null +++ b/fpga/tests/tb_data/pcf7931_read_1MSA_data.high.gold @@ -0,0 +1 @@ +?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? \ No newline at end of file diff --git a/fpga/tests/tb_data/pcf7931_read_1MSA_data.highz.gold b/fpga/tests/tb_data/pcf7931_read_1MSA_data.highz.gold new file mode 100644 index 000000000..7a576391f --- /dev/null +++ b/fpga/tests/tb_data/pcf7931_read_1MSA_data.highz.gold @@ -0,0 +1 @@ +ߜ \ No newline at end of file diff --git a/fpga/tests/tb_data/pcf7931_read_1MSA_data.in b/fpga/tests/tb_data/pcf7931_read_1MSA_data.in new file mode 100644 index 000000000..00d0ab3dc --- /dev/null +++ b/fpga/tests/tb_data/pcf7931_read_1MSA_data.in @@ -0,0 +1 @@ +ùƼƼƹùƹùƼƹù~~~{{w~w~w~w{t{t{w~{t~wt~wq~wq~wq~wq~wq{wq{tm~wm{wm~tm{tm{tm{tm{wm{tm{tm{tmwtm{tm{tm{qm{tm{tj{tm~wtmwtm{tmwtmwtm{tj~wqm~wtj~wtj{tmwqm~wtm~wqj~wqj~wtm~wqj~wtj~wqj~wqj~wqj~wqjwqm~wtmwqm~wtj~wtj~{qm~wtmwqjwtmwtmwqmwqm~{tm~wtm~wqmwtj~wqmwtj~wqm~wqj~wtmwtjwqjwqmwqj~wtj~wtjwqm~wqm~wqmwqj~wqjwqj~wqj~wtj~wqmwqj~wqm~wqj~{qmwtmwtm~{tmwtj~wtm~wtmwtmwtj{qmwtj{tm{tm~{tm{tm~{tm{tm~wtj~{qm~wtj{qmwtm~wtmwqmwtj~{tm~{qjwtj~wtm{tm{tm{tmwtjwqjwtmwtmwtj~wqmwtm{tjwtm{tj{tjwtm{tmwqjwtjwtm{tm{tm{tm{tm{tm{tm{tj{tm{qm{qm~wtm{tm{tm{qmwtm{tm~wtmwtmwtmwtmwtmwqm{tmwtmwtmwtmwtm{tm{tj{tm{tmwtmwtm{tj{tmwtm{tm{tmwtmwqmwtj{tm{tmwtq~wtm{tm{tm~{tm{tm{tm{tm{tm{tmwtm{tmwtmwtm{tm{tj{tm{tmwtmwtm{tmwtjwtm{tm{tmwtm{tm{tjwtmwqmwtmwtm{tm{tm{tm{tj{tm{tmwtmwtm{tm{tm{tmwtm{tm{tm{tm{tmwtm{tm{tm{tm{tm{tmwtm{tm{tmwtm{tm{qm{tm{tmwtm~{tmwtmwtm{tm{tmwtm{tmwtj{qm{tm{tm{qm{tm{tm{tm{tm{tm{tm{wm{tmwtm{tmwtm{tm{tm{tm{tm{tm{tm{tmwtm{tm{tmwtm{tm{tm{tm{tm{tm{tm{tm{tm{tmwtm{tmwtmwtm{tm{qm{tm{tmwqj{tm{tm{tm{tm{tm{tm{tm{tm{tm{tm{tm{tm{tm{wm{tm{tm{tm{tm{tm{tm{tm{tm{tj{tmwtmwtm{tm{tm{tm{tm{tm{tmwtmwtm{tm{tm{tm{tm{tmwtm{tm{tm{tm{wm{tm{tm{tm{tm{tm{tm{tm{tm{tm{tm{tm{tm{tmwtm{tm{tm{tm{tm{tm{tm{tm{tm~wtm{tm{tm{tmwtmwqj{tm{tj{tj{tm{tm{tm{tm{tmwtm{tm{tm{tm{tm{tm{tm{tm{tm{tm{tm{tm{tm{wm{tm{tm{tm{tmwtm{tm{tm{tm{tmwtm{tj{tm{tmwtm{tm{tm{tm{tm{tm{tm{tm{tm{tm{tm{tm{qm{tmwtm{tm{tm{tm{tm{tmwtm{tm{tm{tm{tm{tm{tm{tm{tm{qmwtm{tm{tm{tm{tm{tmwtmwtm{tm{tm{tm{tm{tm{qmwtm{tm{tm{tm{tm{tm{tm{tm{tm{tm{tm{tm{tm{tm{tm{tm{tm~{tm{tm{tm{tm{tm{tmwtm{tm{qm{tm{tm{tm{tjwtmwtmwtmwtm{tmwtm{tmwtm{tmwtmwtmwtmwqm{tm{tm{tm{tm{tm{tm~{tm{tm{tm{tm{tm{tm{tm{tm{tm{tm{tm{tm{tm{tm{tm{tm{tm{tm{tm{tm{tm{tm{tj{tm{tmwtm{tm{tm{qm{tmwtm{tj{tmwtm~{tmwtmwtm{tmwtm{tm{tm{tm{tm{tm{tmwtm{tm{tm{tm{tm{tm{tm{tm{tm{tmwtm{tmwtm{tm{tm{tj{tm{tjwtm{tmwtm{tmwtm{tmwtj{tm~wtm{tm{tm{tm{tm{tm{tmwtm{tm{tm{tm{tm{tm{tm{tm{tm{tm{tm{tm{tmwtm{tm{tm{tm{tm{tm{tm{tm{tm{tj{tm{tm~{tjwtm{tm{tmwtm{tmwtm{qmwtjwtmwtm{qm{tm{tm{tm{tm{tm{tm{qm{tm{tm{tm{qm{tm{tm{tmwtm{tm{tm{tm{tm{tm{tj{tm{tm{tm{tmwtm{tm{tm{tmwqm{tm{tjwtm{tm{tmwqj{qm{tm{tmwtmwtm{tm{qm{tm{tm~wtm{tm{tm{qm{tm{tm{qm{tm{tm{tm{tm{tm{tm{tm~{tm{tm{tm{tmwtmwtmwtm{tm{tmwtm{tmwtm~{tm{qm{tm{tj{tm{tmwtm{tmwtmwtm{tm{tm{tm~wtm{tm{tmwtm{tmwtm{tmwtj{tm{tm{tm{tm{tm{tm{tmwtm{tmwtmwtmwtm~{tm{tmwtm{tmwtm{tmwtmwtm{tm{tm{tm{tjwtmwtm{tm{tmwtm{tm{tm{tm{tj{tm{tmwtm{tm{tm{tm{tm{tm{tm{tm{tm{tmwtm{tm{tm{tm{tmwtm{tmwtm{tm{tjwtmwtmwtj{tj{tm{tm{tmwtmwtm{tmwtmwtm{tj{tm{tmwtmwtm{tmwtm{tm{tm{tm{tm~{tm{tjwtm{qmwtm~{qm{tm{tm{tm{qj{tmwtmwtm{tj{tmwtmwtm{tm{tmwtm{tmwqm{qm~wtm{tm{tm{tmwtm{tm~{tm{tm~{tm{tm{qmwtm{tm{tm~{qmwtm{tmwtmwqmwtm{tm~{tm{qmwtmwtm~{qm{tm{tm{qmwqm{tmwtm~{qm{tmwtm{tm{tj{qmwtm{qmwtm{tm{tj{tmwtmwtj~{qm{tm{tm{tmwtm{tm{tm{tm{tmwtm{tm{tmwtm{tmwtm{tm{tm{tm{tm{tmwtm{tm{tm{tm{tmwtm{tmwtj{tm{tmwtm~wtj{tj{tm~{tjwtmwtjwtm~{tm{tm{tm{tm~wtm{tm{tm~wtmwtm{tm{tm{tm{tm{tmwtm{tm{tm{tm{tmwtm{tmwtm{tm~{tj{tm{tj~{qm{tmwtj~{tmwtmwtm~{tmwtm{tmwtm{tmwtmwtm{tjwtm~{tj~{tmwtm~{qm{tm{tj~wtmwtm{tj~{tm{tm{tm{tm~{tm{tm{tm{tm{tm{tmwtm~{tmwtm~wtm{tmwtm{tjwqmwtjwtjwtjwqm~wtj{tj~wtmwtmwtj{tm~wqm{tj~{tmwtj{qjwtm{tj~{tm~{tmwtm{tjwtm{tj~{qm~wtm{tm{qmwtj{tm{tm{tmwtm{qm{qm~{tmwtm~wqjwtjwtmwqj~wqm{qm{qm~{qm~wtm{tm{tj~wqmwtj{tmwtjwqmwtm{tjwqmwtm~wqj~{tm{tmwtmwtm{qm{qm{tm{tmwtm{tm{tm~{tm{tm{tm~wtm{tm~wtm~{tm{tm~wtm~wtmwqmwtjwtm~wtm~wqm~wqmwtm{tjwtjwqm~wtm~{tmwtmwtj~wtj{tjwtj{tj{tm~{tm~wtmwtjwtm{tmwtm~{tm~wtmwtm~{tm~{tm{tm~{tmwtmwtmwtmwtmwtmwtm~wtm~wqj{tm~{tm~wtmwtj~{tjwqmwtj~{tj{tm~wtmwtm~wtjwtj~wtj~wtm~wtj{tmwtjwtm~wtmwtmwtj{tm{tmwtmwtmwtmwtm~{tm{tmwtm{tmwtm{qmwtjwtjwtmwtm{tmwtm{tjwqm~wtjwtm~wtmwtmwtj~{tm~wqjwtj~{tmwtmwtm~wtm{tmwtm~wtmwtmwtj~wqm~{tm{tm~wtm~{tm~{tmwtmwtm~{tm{qm{qm{tm~wtm~{tmwtmwqm{tmwtj{tm~wqj~wqm~wqm~{tm~wqmwqj~{qm~wtj~wtj~wqm~wqjwtj~wtm~wqm{qj~{qmwqmwqm~wqm~wtm{qm~{tm{qm~{tm{tm{qm{tm{tmwtm~wtm{qm{qmwtm~{tm{qm~{tm{tm~wtm~wtj~wtjwtmwqjwtm{qm{tjwqj~wtmwtjwqj~wqmwtj~wtm~wqm~wtj{tj~wtjwtj~wqjwtm~wtm~wtj~wtmwtmwtm{tm{tm~{tj~{qm~{tm{tm~wtm~{tm~{tm~wqm{qm~wtm~wtm~{tjwtmwtmwtmwqm~wqm{tm~wqm~wtj~wtmwtm~{qm~wtj{tmwtj~wtj~wtj{tm~wqjwtj~wqmwtj~wtm{tmwtm{tj~{qm~wtm~wqm~wtj{tmwtm~wtm{tm{tm~wtm~{tmwtmwtm~wqj{tj~{qmwqj~wtj~wtjwtmwtm~wtj~{tmwtjwtmwtj~wqjwtm~wtj~wtm{tj~wtj~wtm~wtjwqjwtm~{tj~{tm~wtm~wqm~wtm{tmwtjwtmwtjwtmwqm{tm~{tm{qm{tm~wtm{tm~wtmwqmwqjwtmwtj~wtj~{tm~wqj~wtm~wqm{tj~{tm~wqjwtj~wqj~wqj{qm~wtmwtjwqm~wqm~wqjwtjwqjwtm~wtm~wtm{qm~{tm{qm~{qj{tj~{qm~wtm{tmwtjwqm~wqmwtm~{tj~wtm~wqjwtj~wqj~wqjwtm~wtm~wqjwqm~wqj~wqj~wtj~wqj~{tj~wtm~wtj~wqj~wqm~wqj~{tj~wqj~wtm~{qj~{tj~wtm{qjwtj~{qj~{tmwqm~{tm{tm{tm~wtmwqjwtm~wqj~wtj~wqm~{tm~{qj~wtj~wqj~wqj~wqj~wqjwtjwqj~wqj~wtj~wqjwtj~wqmwqj~wtj~wqjwtj~wqj~wtm~wtjwtj~wqj~wtm~wqj~wqm~wtm{tm~{qjwtj~wtj~wtm~{tmwtmwtm~wtm~wqm~wtm~wtj{tm~wtj~wtmwtjwtmwtj~wtj~wtj~{tj~wtj~wqj~wqj~wtm~wqj~wtm~wqm~wqj~wtm~wtj{qm~wqmwqm{qmwtm~wtj~{tj~wtm~wqm~wqj~{tm~wtm~wqj~wtj~{qmwtj{tm~wtm{tm~wtm~wtm~wtmwqm~wqm~wqj~wtjwtm~wqm~wtj~wqj~wtm~wqj~wqjwqm~wtjwqm~wqj~wqj~wtj~wtj{qj~wtjwqm~{tj~wqj~wqm~{tmwqj~wqj~wtm~{qmwqj~wtjwtm~wqj~{qmwtmwtj~wqj~wqj~{qj~wqj~wqj~wqj~wtj~wqm~wqj~wqj~wqj~wqj~wqj~{qj~wqj~wqj~wtj~wqj~wqj~wqjwqjwtj~wtm~wtm~wqm~wqmwtjwtm~wqm~wtjwqmwqm~{qm~{tm~{tm{qm~wqmwtm~wtm~wtm~wtmwtjwtmwqm~wtj~wtj~wqj~wtj~wqjwqj~wqj~wqj~wqmwqm~wqm~wqj~wqj~wqm~wtj~wtm~wqj~wtj~wtj~wqm~wtj~wqm~wqj~wqjwqj~{qm~wtm~wqj~wqm~wqj~{qm{tm~wqjwqj~wqj~wtm{wtj~{tm~wtjwqjwtj~wqj~wqj~{qj~wqj~wqj~wqm~wqj~wtj~{qj~wtmwtm~wtm~{qmwtj~wqm~wqj~wqj~wqj~wqj~wqj~wtj~wtj~wtj~wtm~wtj~wtj~wqj~wqj~wqmwtm~wtm~wqjwtj~wqj~wtm~wtj~{qj~wqj~wtm~wtj~wtj~wqj~wqj~wqm~wqj~wqj~wqm~wqm~wqjwqj~wqj~{qj~wqj~wqm~wqj~wtj~wtj~{qj~wqj~wqj~wqj~wtj~wqjwqm~wtj~wqj~wqm~wqj~wtj~wtj~wtj~wtj~wqj~wtm~wqj~wtm~{tj~wqm~wqj~{qj~wqj~wqm~wqj~wqj~wqj~wqj~wtmwqj~wqj~wqj~wqj~wqj~wqj~wqj~wqj~{qj~wqj~wqj~wqj~wqj~wqm~wqjwqjwqj~wqm~wqj~wtj{{tj~wqm~wqj~wqm~wqj~wtm~wtm~wqj~{qj~wqj~wqj~wtj~wqj~wqj~wqm~wqj~wtj~wqm~{qj~wqj~wqj~wqm~wtj~wqj~wqj~wqj~wqj~wqj~wqj~wtj~wqj~wqj~wtj~wqj~wtj~wqj~wqj~wqj~wqm~wqj~wtj~wqj~wqj~wqm~wtm~wtj~wqj~wqm~wqj~{qmwtm~wqm~wqj~wqj~wqj~wqj~wqj~wqj~wqm~wtj~wtj~{qj~wqj~wqj~wqj~wqj~wqj~wqj~wqj~wqjwtj~wqj~wqj~wqj~wtj~wtm~wqj~wqm~wqm~wtj~wqj~{qj~wqm~wtj~wqj~wtm~{qj~wqm~wtm~wqj~wqm~wtm~wqj~wtj~wqj~wtj~wtm~{qj~wtjwqj~wqj~wqj~wqj~wqj~wqj~wtj~wqj~wqj~wqj~wqj~wqj~wqj~wtj~wqm~wqj~{qj~wtm~wtj~wqj~{tm~wtj~wqj~wtj~wqj~{qmwqj~wqm~wqm~wqj~wtm~wqj{wqj~wqj~wqj~wqm~wqj~wqj~wqj~wqj~wqj~wqj~wtj~wqj~wqj~wtj~wqj~{qjwqj~wtj~wqj~wqj~wqj~wtj~wtj~wqj~wtj~wqm~wqj~wtj~wqj~wqm~wqj~wqj~{qm~{qm~wqj~wqm~wtj~wtj~wqj~wqj~wqj~wtj~wqm~wqj~wqj{wqj~wqj~wqm~wqj~wqj~wqj~wqjwqj~wqj~wtj~wqj~wqm~wqj~wqm~wqj~wqj~wqj~wqj~wqj~wqj~wqj~wqj~wtj~wqj~wqm~wqj~wqj~wtm~wqm~wtj~wqm~wqm~wqm~{qj~wqj~wqj~wqj~{qj~wqj~wqj~wqj~wqj~wqjwqj~{qj~wqj~wqj~wqj~wtj~wqj~wqj~wqm~wqj~wqj~wqj~wqj~wqj~wqj~wtm~wqj~wqj~wqjwqj~wtj~wqj~wqj~wqj{wqj~wtj~wqj~wqj~wqj~wqj~wqj~wtj~wqj~wqj~wqj~wqj~wqj{{qj~wqj~wtj~wqj~wqj~wqj~wqj~wqj~wqj~wqj~tqj~wqj~wqj~wqj~wqj~wqj~wqm~wqj~wqj~wqj~wqj~wqj~wtj~wqj~{tj~wqj~wqm~wqj~wqm~wtj~wtj~wqm~wqj~wqj~wqj~wqj~wqm~wqj~{qj~wqj~wtj~wqj~wqj~wqj~wtj~wqj~wqj~wqj~wqj~wqj~wqj~wqj~wqj~wqj~wqj~wqj{wqj~wqj~wqj~wtj~wqj~wqm~{qm~wqj~wqj~wqj~wqj~wqj~wqm{wqj~wqj{wqj~wqj~wqj~wqj~wqj~wqj~wqj~wqj~wqj~tqj~wqj~wqj~wqj~wqj~wqj~wqj~wqm~wqj~wqj~wqj~wqj~wqj~wqj~wqj~wqj~wqj~wqj~wqj~wqj~wqm~wqm~wqj~wqj~wqm~wqj~wqj~wqj~wqj~wqm~wqj~wqj~wqm~wqj~wqj~wqj~wqj~wqj~wqj~wqm~wqj~wqj~wqj~wqj~wqj{wqm~wqm~wqj~wqj~wqj~wqj~wqj~wqj~wqj~wqj~wqj~wqj~wqj~wqj~wqj~wqj~wqj~wqj~wqm~wqm~wqj~wqj~wqm~wqm~wqj~wqj~wtj~wtj~wtm~wqm~wqj~wqj~wqj~wqm~wqj~wqm~wqm~wqj~wqqùƼʼƹƹùƼù~~{{~{w~w~t{t{twtwt~wq~wq{wm{wm{tm{tm{tm{tmwtm{tm~{tj~{tj~wtj~wqj~wqj~wqj~{qj~wqj~wqj~wqj~wqj~wmj~wqj~wqj~wqj~wqj~wmj~wqj~wqj{wqj~tjg`ZSPF<62/,("  "92,%"PI?96/,,]SMF?<66g]SPFC?9j`ZPPF?03bks009Dd0!MB= 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 literal 0 HcmV?d00001 diff --git a/fpga/tests/tb_data/pcf7931_read_1MSA_data.time b/fpga/tests/tb_data/pcf7931_read_1MSA_data.time new file mode 100644 index 0000000000000000000000000000000000000000..9e17e2a8039f007d9b53a8ddd5c0ea54f69ea8e5 GIT binary patch literal 4194304 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 _3x*(Ny6ovuC+a* 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%0DD(a#lvfJ7 zV4LF(Gyt>zD$#%u5cXeFS17ybW^j{}1WU623LZ0|G_3P+GL3*=!GYsLmtBF8u^X9u#}hTS|Je@Zwe4y+|IN{f3t_DDnJ8~aSs*(&JfRop?7x`4 zY|Z-Xq45!olf{xjLZR)}&FZ(arI@-f7{8p<6*PN0EI(Win z0#~PaVut)=;fcqyuVy~R6H>blwSE<94I9)t7O1i8P~%yl#3o~YVmU^mvkNKI}I+r1jblRZ4qUcT(`M5Gio;0d!C z(|^U|30id0p?qyTg8yvgfia$#7dGfP3{Bh?x&ywTRdqG2&grv1^wwezJmD%02YBN2 z&FEgRXPJj@TEj42BRN6jJGcU@)kI$E z@F|!v)iz@{Y@h=Sc!IQo0M^%6HCgKei+yf$XA~ULt8>2oFe+M#gYX3Db@gGhN$y7~ zL&AOD6@_;kW#9!*ET1*>(*ry~nt2k`x?cEGYWrYYEtCl>P{%o4>te$%vfdC;ChRaw$*#=P zQaqtQ2zcWEMRvydvMuIJ;;$E+)qxRZJn^&}Hye1OsSIG^2~tEHV7*_Xh`PfQE|VS< zfY(mQFAnx!T71Yk9jTI!S?_$fk{7&qqW*?Y$6-?)*u@iHcGK{OCwd>=KAj7mYvV^%7oN}n2|OY7&a5{}%_G#hC#ba#P~)GW#y~=igMu0h z0d+hSev~m0*o5|v>Tsbv8-cgv`UsZNqHjDQpObg+g#1`RIW@ZoTWLTIo;Xrz>^9c- zi`FEP5l?u_%RW4z2P=5ONs8gwe+74yY7e91$G+!Uz?I#H{BnQ^ys9q??Fvn#A{I}K zmkCxp5j*Gk8<Scep5Tj;kf<3eG0Ip^2k*|+e72BzVObLJDDvzAt#n~+B% zNha9ng&g$bi5Bv*9#3ql6}S|Zq@~ptx^bHA3HO|mfIU26({oZs*m8!;t_CpRvD-^K zc(0LM4B?4&llz!K!Y6}1-^3IB7F>P_vyLvyj)PhY3bh^#YE1~NEOFs*f?g!z35gG5 zol{~&U>6xDhHGT32Mf`5I5qmgNOq*i{UJ+uF-R1w0YiXFy9x7z#(Sc!KuivQTcBEMRdB2*wlh zX7jWUPb4nlCW8G}%N1$YU<-ZN!a3dF%_NoM3D>BQwXn?TgEtnzk!4PrO@jw#N}x2J zcyf&ww|Jt--2-hQQhi+qKKdaKq3{H$Bvx?T@z1ONUB?q8e#d@*Ii{IWeaQYx1IRh2 zlaxxz4hT7o``P14hc`tS}+>Qzuf^a>~?pa0^kWp39QEx%ZK?^ zfzo1E9LjFr3>MOdmh8U@%y&(`#yOqT$HNS%k%bMUP7co1f&)Au@$#%SW)^DP9Msqu zsN?5Q$IzfYM~C_>4VKnI4EA4gOnsGeI@zwmpQ0_;Rv&WX3DSa&vW_on%hds%m?bBa zc;cy3fd%krQz=lv6C2v_1Qk#G`tMi|xXPvXhnDc!33>R>{;QNbqs;8Trprq_&guBA z`}+!>XfUf_2JE4QJ9y$t(Cq81Q)rhw3FQ=xb$1}66-LI+Q@ zk$-@ALJQ#V1gXyEtd9(nrc69>cJ7yCNH{u!i+E!8%8}=x)(=9hA%a>*0AnPU7@A8w zA?!};t1DbDaRo40#ulN2j4#0H@{AFlTl4O5KB(6k7x9D^OyUXo%wes6yRfcz$?r#@ zOwVkGJice-p8eO#+FKXE!5!=}g#XMl&MA@xR4Fl)7EI9xNLQ%X-LuZvql`-(37k;4=7 z+&EFh6N#g*7J_+OP0sQ6Ec-7Frepv0cfR*i)@iQG_TGR_r&p!Mz?piXf+t8HTF=@t zVQ=sf=+flqwdru%`qMOP;fWs-WQZq7qiql89e=p59=uWF#j8rNxL&}q|9bFYKu*@X zX(!1%gD3bco(Nlf&TDoDF6kv-I(Q=5dfI+i#;PI}iFkrjy+Fv&9T&EE!m;VVv9R6p zwyOrh|0>`yy(H`7VbDR ztvR01dQ&{1HD`E2>rU{5#-8H|jX%W`8iR%>=F5W+_Fp;{&HhWrqd2G2XVQ2=pG)Bh zy*9-YdVGo}bQ^^y^w%k#&<8|#qG?&wfG21TS`FpvY9VAeG~X2X>4XG#v;Qh3FKXC- z(IVR##&OzS8N_xBW@=ncIFAY10C~75;&e1S<2!7Jby`wB=7|3?Ln~rLMNWK zu>VSK%!^je>DtHxXgsm?zY+hzIXR^94o|S_sRoN0BMOy*u39{TCuUC}Y6nly?wktc z7VJLs-zX2}@kADNxX^k~_@=GUUFvb*eu>G4KO`;}wvpI87%1^M@S%*+!wNcJfhXiy zJ!^el2lbl$1fG!NcBtEKsQQIfRu(lKhh85`f87C3b(eu0JVA=4KkQzpe#8{Geth%C zBVclDdq(r|gcf1p30f7LSW5_B1z6y}QA9lA2_4|V6M20+-yg>lwCp{DavBi}XY2oC z&guN6I1NvvZt>p$2e;dOCIIf>cG?Gi%qatZcw+d4(f#4Vb2qkjfVV2#PpA*&wK6Z= zjNw|ehbLORTa=6Sw@qJZ!eamR=g*HMxNNWth;mMMs?b;imM>kBQ9e8|Lnb=$#AErz zh9^ifngu(qYeXazp7`GC+#s0HPrgj>gbozriQ)r^7RM7)B)JSv+#mBi5A3EQWd9W+ zMV_3~WiAMK0Bd4}i*TCMCqqMO6k+~}lF*MQq*eiHyfW07MW}I0P-7RMj$c9@!+?V{ zuz>xSJj*!3Ih|b3z{YY+0~atwa1Gv+e{HbjcALPRkRhc@Yv7&{HHad`6HJv)g)J+} z$pD_1*KSvDcrURFl{R=nH)ia=v{;(`*I$pI!u<8$t`n$6#uKNf@kbL+l#v%Ocw**a zubZ%P!iwD{IH8F&{|}E zy>sMb9#1gcGafeF+mb3p_Fn}gxtsmhm>$=gz!KL7O>OaO3nkRCsev z$16(@SX%=l@x+UQ^e6fDPhi@uU?` z)LxYL7Nk6izY{$1Va<%aaA>#9hr{5meLG1y;he6ZT#VxhQaMM%#W#$#17Mu}wL2YQ z>7{X;*x?Bcq{S1oG!$noKh0*aZJy8XKJUj9Bjq6lp172Y%1=B&Yu`CIj?;~U@K|!0 z0uk_E8woJR6I&fPy1)~(xQ~a=x$PbdtLeiVJW;+oPhjxGY?;8s6VHdxWx4LS~zFA4TvF##Vh!3$E)4lSgn75109Hn>G5N?NW3)MsCN@q}Fe!bNfn4DZNx5ZZ_qpgWd{g8Royb0nUKm4~2sqNbC_ zG#I$7akvMRQ^!8A!he#0fG4zo0Z-%|G`}M2zoSMl!jC6-h4OC?`>!gplV|_s?>F)V zteU!T^DXGrPLe+H1XBt7pt%-y;ECZo7A#{e|1xI4{GG)(seL=UR9zd z@I+!Q5&-dp4py@NB3-^O>nndd5n0MP-H@J%b>SfWg@7l@NTDH~plvJ%Y|O6g<4!!$ zWagh2@aB3M#KjXomrXnarG0uIlv}!u@M{SX2%gXaO!i+7j?(DLIbFRomt0^uUTt=Q zo;tXVCwj$Cs>=Fz^b3+n@PyUtm*!BW_`dGI6St)>6;IU4vHTvKusk0pYKB^jQ0-REiz*t?@Em5X>{ zhXg~gpP=>O=XN~7pN`j%vYpg;c&ULV|?@q`8y;fW$WsQShelcnhqPs9yNF9KKBmIF3CLHcgyHazjc zmn#cA(M=Ky*njO?n)@uwtHD;B)6vGViS@=C+oA*ED|^{_;|V>G#S`hK!2?-e>?FyY zc!E>RMsPr$hk2?&E)iRmgc+A!`R0ZV?Bsn}rEAalnKg*t2zX+U zdt81P6f=&eGVH%dK}&}feP{VSg5w_fAH4#PHC+Dw82qy(TPqaCwOC3dG zAD(D8=~L!rJV6>o612%R&;1T`A0DvjEZl!?B{$D_qQVBta46}7K``*eZkj3ZM2o{Q zV_}8xQ=bPy4qtfS#Qtk=tVd&*ed<0F7M#40P9U0yXDs=JaNmLh$%eb;8*l9ETY8)cp@Xv|2S){nTH>DZ=x9r zPw0bNJR$WntZz#UJ+ziMS~z0y6($_sCt7PwHO6Y&?*?f`sv>q=X_w5A#x+dIh{V}#}j4R6G?$5Xqm4MyKx&|8Ln$G zq+~Jpa=jGk;EA6T0zQS|i2?HR8c*;#`wq;n10Z-}nlv-wi3jU;gv0cDTV4dgx=icN zg0r-E2~YHrgaJHp==_EM;2^6TzZ=8tq&HQEA8sd1C}Z zlr-N5&~2}I;6=#r+oi+s+n5rJu$qikI$(w;Xm^>%`aTw%1k1f{NE8~L(0?#^VuuvF z;R)J49iW_wmVv<+-Leb7CzWLK2~RAT?DYmtcsYY=M)qH=wHevSrGJn(r_&-pJTa7d zV*d9@XCklo!x~ao1gGi%E1q~td@*Z{F@zdt1U1$G>Ubm6F^6?{LY_Oq%ku027S@4h z>YBgmt8R4#D^Gj|DbTQR4|xwtZO>-n7yamYCf1dVe@9u5GT4aCdDPkjE3WF4;l( zIxPm5bn{5d1@G;X4?Ff>T1?A1-MHByajc`ctuSDg{R*>#u)PK<;ED9jB<$gdPEiMD zL3zD44vyE20G=2rMaFpI@-=RX@r2#o*y>QGnXF-AvIKCj|7!bo`u8=Q({25H@D)6h z<9GT4m{&KBctVS>@kIIJtGDsjU(GH{^#h)GZbxG(p3uM+Jh8EX?=aSdez%}P6i*E5 z__hVy8Y2e{?7v9AFAE#;pDGCFJ@Vuz1Wz>d%KH`;*MJ{9@onCWYpi$mU3&Ng{Cp&Y zgj+oE|AQ%GvG=wii&$&D71WvwsBza&V=v(^iNAvF4m_aAiE}y`hlP)1EG86B$n#h@ zPM*oYV{%;v_1FyR=QGqlM(}xF+ha>%HBT`sp3sADJW-_ypHA$*7PTRHi~U#XfA<=| zuy(x*R)MLckQRrva=FhogTBM%1_@7`oAU7`w9tzZJV7hPIo9&0_aNjS-u=z6et5XW z3OGjt3h@Ljh2vQl<1}Y598%iI>x(>T* zU@o2*y>dYm>lCR!hmKN%3VrmU2cD2x6xIbhoTAAXPe@EEjF7lAsIe(f$EV@!ijv5K zC*(Ob)Mr&tuUDZSv%*Z-Zo#JVYZv;TmOySiQAU!d@q}OPv!me%rZ5J;eNE&c8J<}0 zJfo}k4k zAC#}%AItGXfz0P=u)x@#CF5aVEr{Tpj#l5Jtkb#uh=g@t+tB=gC-h-6p4d@i!erJ~ zx$80NiYIst*8>uQ%LD_Ss3e6Vcw#|cBGd51OII3B@dVRRzk}F+=|gz-U;m~Nz0Wz_ z&^b}p;kPr3N$S88<$`T?!KJgLfCf)UZ7$UMJg7A~P~-F=mnoClL5MGh$n80rt%3-=>I`Hp@nF8B7J`FdH(wQPRp)E zLz!CK0_W$EK|VY&Qf_?k#O1yFCct5KM_;)@I&S#^#1qL9f6pZ7E!6ECn z!0No>35MRKr4fyDx)~CTgD0LGo;3vaY-~E#6^1d@(F~@3mjfLwcK#5)N{h4Qqu*qrLF^NY&X>SPN*?nP~$wH zj`hM*GTyTgPcUtj2z&hhLdw`6*M6*1@}B& z3p{aX360=*!b&c@@dRycE1~Ra=fV-Sb|*}P96pn5g(u!g&@7&yy}LP-Th5x0M`=Gw z!wUL9g8kR^lrg{Nb52+N-L`c2mshWkV5irAieH5x9VM6;PwXhf5j392UGm&&C{vIN zVa!E&P=hBb*XAiBo>b(_h~5l@7Lmf8Td#vN*%E7V#ysP!&TW8PsCS`_QUg%bM) zZ%O7+Y>I2GabU%2gn=}REiG5P6!2ZiZ zexlibjcZ2~3+Hr9Cs%`Z`XCrjEOqtD!}?^p2a&#b!g)e+DwMRU2awWcPHyqU$i>SK z!y1=YT-gfwXeZejPmo?b59UjWnmh^iX&b#~C=B0vGNl`QokLzI;t4Ho!4p`&4C~9~ zrNInO%t_9XH5*UpzyY41-SjbQhJW{7g^hljF^P*O23eHf31efV=m$^Olw0W!-FOu= z1@3v|$QLE&bPZ)d1y8JPIkgQ8_|}ocIXuCXNCjB-=m4rD@Prma;R)~2A@675iMw9h zoZ<;m18zdf#TjVA6Can-tbiwatU9m(PB;+uIsl%K`d^q+i^TAR)B&+xBeei9QR0E2 zy$-$^TDJ^2)oNk5`TjGf)Yu1Lqk&QRsnFkN9+sT9;p7<^U*?6M=iJ9FYk0WUC#uLS_ zy>oz)?pPL%(;`$nQTOG#tQmMBtP`+$;ey9@Lhp%k zqk<=H$%iMN(BfP?!7kaIby!CId%a<5=N44w;t36Wz!Ukq&$eYPx2A=m#kHXyvwhir z=|+Y9*J3GJ=A7=8PuNY^pu@cTCOCI{fW=;T-An>P@PxZe$m59%TTl2xt&N0Q9|g5W z0&1Kz)L2PqBk@wuLjz^lf62J159f3;b^_bV^HUf^>gqWdFV|7fR*t2hex5@8F@@5? zF&@fqtHE&9w8m^1@Wg}GUz$KlLYUlP|3xdKH8gR0l^5pjEzQ1o;?P*DG`PV^egg5t zBtJ$N@C2_JjzFJUl2C&umdimao_N1$)O^^l>y8L77_oQ%<6-bk0Xb>K6B=;F{_Fac zg^sMRRhJ}Y&gqzTE(l%qU>;9&O!s^{4NvUI-0}oA%`Gnq@dW8tCn4c9{EER7m8EeE zPb?^Xb`jk7veJ*KP|}b+VCyaQ#`J-K|C%v5%l>O<`=@nag|l6G@`xuiKoL*y74dH> zo_IQvFF-ueY~s)7FeFSa{_w=FIV8m4iGfQZ_rgghgP(=Lm{RLYEQ4Av4!Qi`rjz}b z)Q!R9)iJ+1LI=Gl#uE}l%KF^ld)te{0uoCCbv$_ro{%vmsLz$5K3jr%eF^m#6Y6#b z4wheQaL2f+iR0nN8?{KTz!Mtiizk-0V$=ptq<6Y#4@)`s{9_FzrJNHOV{e|}M7H3G zkz=CLAZ5%XwBiZ7nKqZ9v{oI3@^v2xN4E{VvHx{;SgoYUoyhf8>Z7GpQKlG~mh zFroaJmo1^)oXe$aK_2fC7>*~J#|K$JdHwf$GM@OImi-no)XPIRJQ4GQ#%(-dlVi_G zIE`trC}=#g;%P4DbQ&;^C)QRZISNmFv%l&AUy}~f7uL~-k$9q5JMX%zFMG=k2%fmt zhp0e2QOC7h4j8#o3JLJU$ML~0V51(>sGMN`bzpYRGw>$u0sCOd3G&hxPuyI)ZyDSp zb@cG-vM8DW@q`vw;0dXzVXblXP-APM#@9h<7dMAG&OQlG$XFW;mgnv8i9BVhx&NJwhGZgcw(;OL06dgqCt8WXx~y^Am9lt$iWkTx`*1Z&g&`- zC3u3=o}Uxhf0dTO4)$L&ynN!J(-Yt5%W!66nY6(Zq_}Q}mRhKUC;CehFP=EI?bc-Y zuDJZf;0YZB!V~=VYsLCTT}hO|6RU2%Ee9Efs9Xr{rseU^1omH?hGoDOh2>-vPfYxt z_XfOsO9sdAgrg)U;|X3ztb>Fn5^0GiI?LZMp3uTJJds~s0OAQ=%eR9SueHfv502A8 zL-t>bd;1k(og-}!6}xz%gFF9<@x*rd1A-^aWYQH+xX)UD26|uczq=1gn${-BAsmCL zcp@pBFE%_OHO5fu458KL;I0V#Z zkx-vUKxtpy0`<5A>Sq(we|)f+4!*Ph3avl4E9*F3Ej5Fsdw2L$1A6EO8=kO|!dW~q zY3Qb(WAOx2EU#futx1-TVEl3kO28BE=gvC@$94^f*$ySuAQW;~%m+T6(1K$2U)Oh& zsLKAU`r-JVuo@|Mt>I)1*1!`TW9OG=oqOkfUIyWb+|R!J8G|QCJ%0yNE=r*_o~Zn7 z^9@Mo%%d21{$=hWyP>pTt%tH(SOT{YMmrt89a@cFMV!;=0Ro=T0(3mV?NL4cdeLXj z9BJc;X1$6Qg*(F}xCc-C8t$Jt8c*<=FcJEn^!|Pu^6|of6Q1yq8w)%UAGmcB+|P7b zApEg<6N%=W(`nEXo{;)W)(;OKJL?Q9NF4?oqX(3DLgF!5YfKjG6r4zNAD)o0S*YVP zP@mC4eNF>U$+a3Z*8^?N>Ett;^?Lc^29wikJRbrboMk74Cp1V7Pq2%x$-2NONm|4c zm-}Yrhnwx>0t8RcR-O*!R`(H{)mB~%u>aaRhiDh}Um84!C)}h_1W)kFcOm>(e#>tn zf{iA6VTLE3M^EU*`c`w9jKLF3eb$DXShiYJQ6NhY4~uEi5xJaMmKc6&Hc zFXZtAzfCK%&Xw7NQE)ub!zDQ$t^(jze)Ss$y7`%yp)lZ+XOB3!7`rMQ;?TDcp`ssA`9>YDG5HX;Way&e(*#!DGFi#wYUM% zm+ZgNTHLM=hmo3R2X}9m2kv;nYycH1c*1?y;ZJUO;({lQ)_9_#mt7nzqs20KB5B^* z1FSh*yAuw7Z4M!s2~X%i1fF2`F^=_Psn>;-q-GC}_mdk2JR!0BFh^73cVTCV;e)Gx z62~(PPsmt4)bTv1&-9@_*MoX(5B2yS>NXy}5}m`^y{i+sjwf{B3Qt%yncaeQAupL2 z#}lNNl!04o$$t<}ESI7)Jn?=+*c-?%dv-o}V(%2TAb3It^zg)3Nk+sI*Mm;1fuF0d z$@GWK^#==2@KfNIQo?rfo)3KWKID?dJ&Jp@lINc!|1 z#=n$bM0i4r6!C=I60<(`FK7H7_;08*-EvN+1HgEqoctTX6TBMsgw>wa{L&vzR&n8p zFe%=|6It!~m4zpmA}t0frL{7HDW&A(5l{Gx;^-Ss@KF*6FOVu^KnwlQ;hav3TJc1m zl@ZJN>u(RQe>@A;FDftW@Pq~o;0dW^WUci~P-_~Xw2oLqjctS)-!vFcNQ?u#BjcRV zMgu80r<3QMtoO?^5BNi_dte*gNZ|?j{9`SzH-^CqqiR3x4k<}utBfb?B)|kuEOcI6 z7Rqb>f{^lLo?Nj1+A14w_Fq~Y&N-c%cjPtJr;M45?%;_E3rj@7?izT5C!UA$!W~aE z-*j#&l(a8*I9(5F@Wdb~n#U8T&TOv(``TQ2ZVM&-*$TdSBmqh6zZxY5e1NmpzCQmP zUj6nl>n1Fs2YYyeucp1McNEKyTJeN;k;J92$vqnqOYsElu%n@zq7Q(jGV5OK2r2XW z(*W*0AP2$hzY2BbsW1C4UR9aFWj9@E=D`y+N7^LA@*2Q~C*DpAJjePlQ#J?TpIwWY zFvAmiaeya0*G-zuI^jwL4b*r->bs%VctWl7f@V_d0lP`OH(Vz%pYWx`eGR}968izC z$@nicWDE%APyAixDAZ>`P_GA}9uq>{E`DJ!#2^8J=j|sa!eu zf!1aV*qGa`-~I7Ke>b9v@WipvITK(>y~xHBQ)R*%Pw?6?3VyA-?A2P>a@DHxiy@B` z2#{s})l+sV?7x_P>jOOtAI;Sc9-1f*AMnJjOH(Vt4vx3>Tftz`Q2zD96B*Ade1w%X za2QYQ`4Do8^@;pHZk&daj!9#O(M2E1;E8HhJV|H&wb=UL3|J%0HhnalN?U>pJj+j2 zCz#K?X=p>(+g+Mz@x+DBxl2H4&ohT|%J8Kxo=9?!PKK9SNx}-Ah?q*%3ZBTGMW8vJ z;MO?;zCXSE)(Y6Dteg~bPUj~N@$iJyy~7ex`wE9i{TtjZH84=);GxFCLXC&(gC`^= z2I{yt)Uh$B&&OewJR^hc0VvPFj&D#Fyo~R65xq84`%0pG9B=-7oPZ+ zN@FGauVL@2--biAz=w0Xa@k?~Sbv_C=fOtU{Fx=m3wWZL4xSisVHM_%VNI#bNf#*T zVV&TClZ`n+z!RmU@Ci@&{I{tD42thX!YG~~P5Nt3_Fp=v#Qy8+*m?I@AL}zE<~;m& z*pHVoc!GAJEija?uweK+Zguz^Sj{OsegfoiV&NfBYl5NH1wyS2f?6K{HAWcL(n2}T z=_FRD2cD340cas(hOoa5LgEQ|cF6iIA;+OmuOXlwM?n27f%;z$N{T}(xU+5ZqP5|t ztui>v{wrrU|3Yw)TR*ncc!E^F3}~aj@bQEeR^o~0(|MYKCz{Vq*aao!eLW2PErZs0 zV$k|U(_w{ETh5MzJfi*47asAI4+QpK?2hU|=SCN{Rf4P5-gsIBKKpjBcurVV2lMd+ zw`Gal@IX=;X}C}7CE<6enS!mQZUQco*lGAc;wQV{ z2|eJz6I#%YCuA&@zpmpcP@kznX=h&z_1X$nk>e{kNj_s?jQlu5v-NeoTElL3G49=<%*rHmz{WS&V)JTcXkQ8YZkl7CwN^_4F)H5l%xcMA9^AX@PuCI;fd^F(^8%B1k(ohA%|h?_}PDzond*PN>@+sK5T;?yhz6wt>=K z>jdSLzXDt`w)0_2$S>!Nza80s*$=jR4@YURGv{=?`ifbQ?UKcStN4fiQMua z2~T(|pBVsU3djeJue|x)D0qCqPF|Mc2@L|r6KzhctIt|eAu7Wc|E}gQ2JQ6$8~d-b zkNrM%;GC}9%cDs!FDZd{V6SJNsv2-(GYO8z6JfbFgu~id1?~kwNsXTcDU0F3Bc8Cf zn>`2)@R6iIJP}`?$X7hkphflSu%Q+Wu>bnnEi4b~8-3))8&4b=YVisV)d#Y8g4?%? ztUt&3P(h6+oaSY2g^Pm&>_cGO2Pvk&6WwL915fPV`d}#3+Ipzi8SfXYf#;!$G|khmzho1?n~#sxD#AoKBnD zz%aMQkDOqt(b~!u*3y9uJTa%&g6y_(hQv;SJV|62$6>Dw{B5b%T+YvBoANf%>%rmMs5J;s zo;A`sDo4oc)&`B(eYUlVm^6=@P~h zm4GLjPJ49(F5NJ@d?dX8Qv#gugp1x#8=fcDUiV^ssANPgH^@*74HkGp>an5LWJ0aW zf?AsaCu-mq`!9*nY{ogA#A(5<5~~5%%6KhIk}(@tL!R40eRc!&`VHpOfH*uMpX03c zk0ngI-XM2f=%g1L?7sp!`dG2P%(UOXrkvAtl4M;xv2z#^U3en51PbB_53kjyVI$IC z_QLs<<%JlYSRfZ+cp^E(cLp5RMjE8>1ZkiHAj4agJHZwjK*|2=tZ7XZ*7wTEBqW}o z9l{)r(u-3((d_w*Z&dwXbqq)k;DI7I_)@dU4~e>BDucL&`~gT0*G3&g{X z!SXNzPkfld3vE2X6mBG(vETp0D#&9(8XWP21|qZniVff3#(Gk(miDCqp2&P^l>)c)kcY^4;=nr+uki%o+0k$=>DdwR`pw+6f?+W& z0KpT1C3(4tC*GES;tD^}rqmTS(}(MLB41;wu<(Ru>oYdc=Bo4ee2~pn?Vt7W1h){c z;g8heC>>9wLDPc`Rm~ciRpzJ*9SL9Y!6J4@qOsH{%7Pa=p)bh;dy!12Mg*T z6`qh|e%89(hpK&8PyYu`Xn`4?_|$Gk5&n9SUXl=kCulj#tjqq3-C!cjoH%mnZP@ho zgbQb&zoVRV;fWymfx#16c!wvtND?ld*t0Hi4E&ydi}gU*S_d`p1g}LKu_j!A7hQN_ z$@xDe;As5?!~Uy-G(K@o$Mj$d>|~yjbPtBOXV_eTPcO(|FP^9*lZ$wQG?`!+lVp)S z2b!sn@Prm>;)(1k7#L5GF4_$8Lt3ULoUVi5?7#dvafQh_-P0ademda^+9qDZ&HSl+ z1k-;?0V|$xnY`y1Ktn035j)v-z44|wv2-IsKsK-Na zrFH5& z@I;&0M0w$fEsM;9pxDw6_SOP<_Frc=GttEUt6WsNGps`^Xk+N7!AE$a*}2e?tP5|v z#-B_)krkKwnfpC~T<*ym+FhBO@Dlf@%Ajuqm9uWC~A^l3xwV|Fu$( z@GFvQ@x*~Uo4(oO3CqV1Q{ie_(;mPV>@F|D>JIV(3r__8irETJzs>n&CCo#M_B_~A zgQxLCzA~GKvQG7^{HPnGMBAzb^wkGbc!JlbWmwB5ssQZYUYf|+e?|7AGK>9JE-@zO zbW9^&g>%nOe0&^Ux0OUKJfRQl@I>O0h5oFgTCO}j1%3)&|7`?p_IC?6LwLefg6;8y z)WSophlN@b2M-giGjpiV&7fX8 zLp^?mx($V@BPi|mcF@EtfMPKBBxkBxIj6hblm955a2#0TB}@sD2j6&tSK$Wq>Eg|i z6Q0;J^H(@5SYTn@<&fb3idOIhQ^Momn`)b$4}$fUY%kdv5*omO0Q;{F#{#OuqNGNZ zg0ALQvhu*4?ziiGuYxBoNHGtdsFb+l0rV$D_#&iafQDi`p#vp&A|eNWlJG=!zKio9 z<%54FL9y>JxU8%cIkErps}a=#R(M)B$pMa`Wwb0j!f9+l`1fa*z$`mF;nMfg8yIrJ zl|*SgQF0_#op?fvzwpGvX}fl^j;TNAV#PrkXk|5SL%f-;|Zx5fEqUpHFgkc{1DU_0;uDNP{$IWK2L-n<(UF( zBG(mgp&VPlTk`n=OUd5`98TL)ak!VSVl(({ffP~ViR1x1vBMK>++M{&Y5zS3c~r#! zHJ%tIlL_p<&d$HS9R4Y{EZ1z zt57f2uSr=P2J76l&D{g~>Ba(21WPe8p7_`#x-68`{en>b+x@o16BZKafhWcfUi}2l zk9EIw4c?@M?IbLz8&S^bv`8CII7@Rlo`_ohb}DR1E4K#>7$pHPc;fQTHEm(pDw2SO zC!~HFMyJTZ1)h*PstR~QYAK+`Q^O|`Qwb|;U=ZhY5?jIggp9AkoHE7&yXZj|o{(oP zto3>e>M3r{3amHn60mBRt+&+?KHPe^?k%#a$BGI&Db%;DS;#F|2lH-p6A?=Id9 zn%w1K8lJcqv)BgqsC2=|2RG0j^}_~F@Rj`pv|)bT{X8P37bVPw)z_6)gIz){a`x)kTtF@x+N%r3%5!lJf8s zPcW600sSAkTu6XCLg7;uPplqOKL(D_!U;UlTN;qqe;rzoxEQu65@q~0EC%`GI%GAaku+M7~%LgMeC#^6GY!-E=&1I=YT9(I>8 zIk;Y)%fn=OHU}N#`W#ND<=Yva`yWZ?9oKW){$WZ&WJ^L6*&>7p8QIw)JF-XiyzLz_ zL)qD*5aNqIC_*U73?U<{keShQoagiV=XhOSzt{6T_pQFi_qwk0dcS2m4OOeK`wO=# z#UY2H*|}iaj`j_{mcSEQfP^Oo^gWo!nqjHbi?DE6X&_|(r4M&Fr{lF`AnS}qi(_ZQ zh9RqRjD-ubf_O=fCwfa^7M>tIrx6@f^61N|@X*xLWlF(s_vE41S%c8kz@NqO1Zk>o z;GM4zNsMIwrT+uje`&!Qo+y%ecsGCkhjxv1(34N01#opOc^HT%0*kE~1S@2erWplK z(6-nNo<1T!(0D=%`S8T(CSe6wb9m3yJ)WrAsoV!xO&^kSPWN^I4ZwJ!&2XN8;EDbI z{G{Ru{Q$%hOsy|r{pRvAl5Frq#kFaEaOT3`@;%_?RC#!eCt4g@R|odq6~T!to{(B( zm@f5*uz?nSa!x082}SXQ#3sWM5}ybMy30d#JRxxkP@h#oeO>`|%o6Ij1=MR7sK+l* zzlOoz^49@defJ2mfPp>Q#eXe=Cul)^2_5wdIiAo$VLXvID&iP_p3`O0haIr}npu)0 zXUO!>9LS^8jbmYz@C^z5;6&?fc{{@MV`Kxz{!0s}*?(1!JW-1EmH>ms1U&IB*6CMa zJfXoUc!G3+`>bQ~JimPfS`U}We>|ZZemvnMh2?mHw7CV)^;JGbOz=d@qLqE&^-u}g zVgF@bA-EYFK>D~dJaDmYetVc%P7a9hgcjW6iIk2+-r$KQa#DjQ_|_f={WO>fPxO@} zS3GfcYSJbs?Ziu=+~Q1yJf5C26go7Ni6r)4n|6L~2~YhvP_-`1p+R1FLTa>Gua`Pa z_*81O3gQVpfW{LNv&~xLHlfCDL5<&l!AB+d4Nu5(9Ox`#xp2CS=fG&Wrh^6KxDI;D z*LJv5etqHlgUyIq#1k46h$lvL+5XZRPtXc*2g<*_XxL9LxbVd52@7_z{@iNjxz(^S zEpc<;Vs_KxV8UPxmNZI5Z`sk2^$-VX48#+(hF6C_pUH(No@f@eFdtm8{mS`Y1@Oeb zTfBV76aDWyKY%iA8w*dAPTP43{+s#f(H__~`6oL#>Cb0v%8A`f?(y^s6w@On9PK zsh?fo*+_@l9?(LAYw-kWJocJnoRHn>8x=u|8c)x zCfKv^SeJuvhra|Jn1I~=S7U7XWNOdIPT64wGf{CKtv1LXM@yvr2)D5&FH zP_K2N9`8ck=0W|qhie8jjmZs@qgvA>#{R2pXMRQ4e`)YO=X9iGMYGP;c*OJL&?{s- zN3D1wO9n>qMDO`4=0ZtL9tWqCT=%a(Bs7I@c6dUI8t{bc;RDrKON)*jBuv%L3f9p9 zWAeI|w~1PBsgMJmPD#3_ePg;vhUhdfhNMc305ro{(@KdrxSl4_?@RT?k)O zf%QiF)7Oi_=Tg@Tt4VF2C7y7X2_ihPRegiW6TD@!{!^4S87O?+nI4f}(oVRJA)pQv5L%zu32`%Eq6Q{PG@??FW_}+|qFmqB^<%-Z< z10?W-)H}1*nn!ayA$3nsYagJ-KSN1-4Tmiy4hpW4SP1w)o`*sQc_so!%eW{!C1WEn zhi;Vdgcg0{3Hdt7pX-kmlvA@GW_UsaYVgGC9$W9S&h6QsNJjQwdxkRE$Nq~cict7! zuoT1NiRd|0d*BI&rJ4RPdfw{l17QITG{O_jc5Z9JnovJpu;Ph-#|o8!_4FVPPw>k6 zcTPM(*#A3Nbe4P*WB-+$T;m$t?oMwl>Cm$tX4^MPluxmObWFmPuJZrVSST88kO|4<4>$?}bLc%AF ziZFHQ$)CkwjkNQ%bHQmE$Y?SyNj+G$$;dA?A+V>!g~J^Z8w%e^d>E`NF(Oc(6GMGg z1a-U^N*Z2!sMn29j~$_IKj0$y7=rPnqyPA4GHe^m%QllSIHY^sd+1iqS#AHAjd z+GKdpmK6$RSFsM>ohpM0Cd2;z;^pHZVJIXxnG9)9?gZtQsVQu&0l_9?ZN$-iWmrEh zA~z8x!)d}r+dqFzhQAKBm<&@bNh&uPxmG`lxdy#5Ui>``H+j8x-47{Ml|X5udI6cZ zH5pSz=Xx<2B2_y-m`?|xOhyk6DZfH!kWf}+W=(ZG6>;d^22 zpAZL`85%nS_4zp*C(qE}85u{1<}#KBJ8B_@$=E2z)U2P&b`@3=ZNbSp$ZawtE$B^_ z$zWKNs{@nKExZpWlqO@V^$_=y@XZ)0P%#;j9=i_Cs{UWve0U{bQTYk5kPiNv44-yE z>pHXEePA1tcqSvAPhDr&V0d_wvT%N^6z-Ue8%`IF{`qAxq+RkolvB85NEsCmMNG!m z(C553H5pCJ-`(5~m-&9ly$RmAm_;MK$ta@*O(tX5Tr2tJWE@K=`o25--K2DdmavsR zEHW8^f2#*Mu;%hIzA$t==bk4g9AoFn$co93SKBF&q2`ENuzkY;AI`&|O~ZKlWHO%p zkcVg{qbez00dUf(xd}61RPkkbN5VY%FVJLk)dDz^A*s&w`SaIn57LxrGHQJ}?olh=< zylS7nG1O}fsK*;nzve*w$Ng?H{Pwi1k_M0RdgeaN8tlW9dy~;J+BfMWT;(vTz#jNu zo(SD!IA|fM$r#;CUZRcg|K&Oi>GiCd3BHPy;02T6Y$G=ZCPUh{mO$C1Ooat> z!(cMJweZ+v$e~Y5{``Gc$FFsu+*&!pxf;}AGOqhK-ky_nv4oZnK7BPA{hg&j&t&Xp ziZLF3`6vb1CZlo3q34dk#fQfd8E!HXtmGxQ$&goVGvScyOLmNeVO3T?>-h ztQC|NggH>3xk7#J0(I;a2Fv&hd@0vpu%;Y`!D)Kni6`XO;|refX>%bB_M|2KK9t+! zSjb~0g2wQ~{ShRw;0f0WPu9b$8)lSP2njjifE-VB4_N98_eHGZMA2k?F0v)78EiCR zcb!^r5wA_{VSKHVd#s`D>hn+ke#R3Smu)`6BVKZ$f+t8Hih~{nQZAVwWvRapz`Jo7 zG;5g*dkr$g6Qt2jWqsmpo@Ybhzcz)5Br_Rp^a2h~SULpMW&N0T5=ZF7r+5+QU$K#^ z88j`F;7dI5vi<&N(5ppvDiZMor+NnD(H$4Icw*3)6U+4?6a#3|I-V8JYhP$GB<0jHP65kQf~_PJhX#Gt{FIuL><ZNfOukVdfaAs zCFOgrWw21wZ1-uf{EkAu-q5G`O zm7BvQ$?|~9WF)#B3@!&t)3R3(4&^i=`z@a6CI7{EB2tRe@PtiLP=jJ;`Mz!!`HTLT+%biV#o4NRcO=phUtF_Qwj}-{1+UPlj5f2q~8& zp&w63tpe0|WvDTWP~(+oLG*G{;y~Y#r z*9P0(?-2D6@<{2&Rrq8>KcYzSga%yTiSBYTU^31{Oi5k@a~GXMrH#qxtQ#{tLCRP+ z)-P*qGMdAht9SgY4X0)7uU#Hq@{$P{JP~##H2W2vC~)a>1Ab^H6Dm#uJ?0w}y)<$|n|{SSZEyc;aPE zqRa3^3rRG>6HIeuzQhwbC2$E(4C+h-KAyPHE9C;bXD=u7CZn7l6q<~YPsdZGh$q}7 zxf@Sxng3@rZ1ZP%y}od59|`Ef6Q+=TZqTWeOrYY4>4$A?q3MAfEaQm=(olydq;4B( z?Iui>`Yl*P1KmuKG5y>pZB(dQjS; zf4{&J+^W5Yp919Kiv8F7ZrqHUjD_v`#-4_^4h*5f8&5E0xe@wmU?iT1{qN9Z*592L zzZ?RaEnZcoJCs*eq4IkCeNb`nU7CunJC4dtiV6;5tg zv78e$Hpw6b`>&t%sQfe;-D&O1e1<1D-AILL#XGqtLKh7%#uG^cIJ&?Sb%v*HhjQB; z2z_+$22XUEw{8sU^rOpofr%#yt+nU?W%`*6BID*Q3A|?iRrAnMTR3QC1m7g^#D}vE zKU468)U(5;Qqu~TNnIP%+7_ts?NDP}p~ksEjdg+gyc_B>FZf8tywtzF4La75U_mZ7Fo;V%0sW9wq6L~ua44ooLpLl{-2`R9?7Ixr? z^$$*-XU$(m`e9hSn@p_W2^}=Y6NR%j&tU!4Um9)Le_~bL90<9 z%*nUE*|2@?xmCx)4Sw>F1y97R-qHb9sURomc!Jx2YViDv1FcIz%l{Wh8C`ao&iqWq z6FH*4yn$Nl3$@-4YRwPSxPNFZvA?jF#Q(uv5(5N3NE`rkm1lu)t~?Kb*GZ3XhB__) z_1XaH@xdcJAzve){>Q<^-MgH-4ih4J6E(s9tEeOZvj5VDm3ZRzgdIy*|Ee{U$WlD9 zdO?w)aAk&kAm9lvDKx|rw2jq)vMY0dl$badf!T5L5EoBWi`x0=A)cUpIt9utT|BI; z0x=mAv;Y%NSf)j7;m>mq`}89Kc4lgGCJe4954Z8e!n}+W;)$1qNhZM)ElL${0Ob{5 zCCD%wPgC*4pgI>U;EoH8IALS|W#7`}C9J0p{Y}Q4r`<{5#S`xRo*aWkxB8XX3H#|6 zR6Nl~3U={?X*QE&c%syjtbUMC-8vm%`~wMwz!S7SRD<%{Q3_JFW0Md5>>(Q(_Fr1a zY%*3z4K(X}QU?jkNi7r{sX-!mLSmv>Yg{DM*eIy+5m29zLVZpGb*vQ1G_^gn(BK*N zUvk`Z&tzC{D_BcA=S(Q4n4{qGhI!n4AeV>)p_vT(pCu1BfFrzR z!h~}=rdn*^-{NwBk0&Ne0}Y-?YJTk{Os>=3ED6dhhiEuXgY)o27kNpACytGNy&85b zG}(SGlvnTL;PYFH*7S$fYsx1A`>&Nj=I-#qhi#3k!+aXFh$jw(hvj3vE#K)kzwY3P z5f{q6g<2a9wLTPTjTqEA5$Gea;!xv7p|m7TgbgKb1TK(g$MB{+KY}(gh71SEI1)T0 z*OKs?98V_V3E8GV{kVd6&U^8d2v5kg862hq2zVlS*oMulf4li}wZ{G{c$(!jxSH2T z!{DP{68wuNPOmxM3XZjr#6CPRWmkm?&`bwb@I<|cAT!pK?8Se+jVCgrxp~GD-EMd! zKuISwU{qmgreOay{?&)Auv@~%iYwt(XBlw96RZAh90hBq=jMe4p6FOGUpsjDuniTq zctV54@dWKTJfQ<|cp|MWNg{ZHHtT3uVxNyy1RR)qFe6=@)A>md zJ)Ve}$cY%9s4y#I99+s2=m41bLIx=DMDq>7?vT=lJJsRQ9DDPZhVm-V3bxeZ0z6UH zh0k<}p@X45Q-}Io4eHoB z)bTYaEfNKx9%tXe6SA#^wM1`lh8Cl6PA9E`tgUPJ&pZfwtscsa6rRYCfqp#UHI+yT zJVDF+Fetb2-thY9)ondtF)h-;6O@xwV7-6&0Vc2U1k>5(&|M#Zu>abBiDpL5=`7#2Yq{;s4Y5l10H#nzrZ}#IAth}`iPgwDUJ}|=*w7W#G&W#0k z!Oo>d5`~5*rpvz=Jn=w^-S7l$p97$rih99I-`CY{0`u#GMD|}NcZZf{y|dVn$5!zD z#FI25;|cvm!V_8qh$p0;m_IN2`QEQcsC7k9YYU*p7ekFPgj~AV41pSJ0QGqz93syg zV3>?M!k;qs0GsQBXFMUtAlLDPd>w-29y@}dqdd>;E7FAWX%5S=WlL`*?)QG%I*WN@|vkVETRD% zcw%yygH>4XO{$n$5`L;vlgK_ip&Lg$@kNTS@kE!_v3Fs~W1Xmez!Qa}F%?gcb{Gl? z89THVdej_Gg(&;4mD9_Nhj%~7K?9!9qI5jL|5p>%5&1%L)`WjYgu0c1l#+3Rg(ql3 z`yGoXmYjR_4pw{gL-Us1y5*z7@m+{Bi4l)bxS)3`vmvFtn9x?oe6;%y+-rZ z2~V7!MDiA%u=&qo1iU$AQIlTKMg!;YM7^M+uB;EO-^L9Rp2*zmP#iYZixNCRD@EpI zJi%}83&_8`+=*~_LPFDv@VK)C6mm{SOW}6t$!X3ixVqyP$Jy}FVYyht6Zy@9`a)@~ zZx7{mzY#R6TH2#3?4W^`cp|NOL>|`9TGylM7Edtk{RU3fi&*wwezLR06PJ4?oPgab z4B*HPPw@J89endb0#NZp^Jyo>!{8B*rJ1P7ilHgBp4L(A^ET?T&q zPa0nE#FOJK{zS9?A|3cWyb%(8@)0Z{_2+P))S$wHXJpU=Pe?5aY$EaKP-9Y|#-%}x zO@Y!L+5+k`DyZYsu$2x5vHz0mRn`yXnDr8#knI*6BOkjkGD8Bn@kA$|(}!XEFyGH1 zP+nmKK*B|Na)2jp%-k{pPOK&qlz3wK3hOpdUgg(^T{Xa+{n!3IXNt3aZ5j3@7pyhx zRJE@c@q`W@;)#m#QW#GxiobUe_Ii20;4!$X#j`d$prm#OLOGU9`q|E%@25D zx(qhsi3k05?1n8G4CSdSo?seo0VD*M7Yukp3q{y}om_IhGwV~uq~Vlvx=EXyonbp2 zgvS#u2X+=<{dCQ-M}G`F@%ao%9eASir4GsPT(}g_;0dYCg<78ngKwsC;)Ew8P9JKl zE}Sm$dN5jIc3^>n1-x29Z!Ijs6Ec3!`n`^C88jq zOcJqTeD;-sD?CBlb^u(=t>g@tFn0z~y`0nO!z?_}G+<8~)?wS$VM08?lxii|T>k^{ z#5pNM!xMHVFMU0aCuW}ioeJgE;vIORp*-Zn6PxaF6-Vseg{eyq6vh*@9xi~hIUSk+ujZR==L?Id;P8YNbmEE1 z8?QL?=Q1r&7P`IJ*T5Ps^puC?cw*1#gC8Iz)T1`*&1jb*|U8qa_y&KE0Nm;apqKi9w$I<|=?bbJF(=rs=eFFnp-|D|8+ zIH%LUUOaKy`}GkMp0F8czZJfiA{#C|@&CeTLo7X#HR1Q>J}}?cWsTdy?izH0Cyob) zRbovk-kTE8W&ELXx#54hL1+KvEEA8M(*?%F-GP0W;)#ZPI!YrNo;WPQICvue>+scZ z!Kn1KIZ$48jDt3Mpo1s0kRDH@6(oWZPqZ$XyE>Ft{&sMAZuy4F{>!g6RVJL%U2ga; z4Gym$33hmb)VEmp=S5d4aq&d+KKzy7iJgNjH^4_ZFpGc37&^RMOZFqu~;5gWA8nxU|>p7v; zbV04_fEwEkHNF#Sj2F~654c;N^}=*{-UA!(+Nvm=FXKM&hFtrd!V_}*2M5YF0P4p9 z{5o2KAo0YF{!BvQiE6_#R=~vN$98a{63vWCT8i%>?1iRYfaKoU-1$IFWpGmgD z6B;y&Cur{;$2y8z&i*h@libz3U{@WGz!QH;P~D6t`q=Z)fhU-HwSqHB)oPP<0#8hr zU}8M+uo*|tc%nhu%vdO|AS2<2?=nz>Cwlra%7`aUj-;uO{a3Mxg(kt`q~Z*Q12o7Q zPq?f&>%ls6&3azkZ3dJ&7p3veJJc0GSSTp2HgBhMUR=jQvxT26eIKUIMn_59R1E>U4egp1!ezVj$ z_)hA7VO=c}!xK^m#9C_spvD73Nfq~o8W#jLHUR4LL8#9NV7!bILR%Rt2*VR{y#SBM zF$4S|UpJtK{MW(&ZfCZ^yX%LPSq1I&7adP%Q6Zi<{vQ=)c!FuY_OSK%Rc>yOvO6Z1 z*nc^1KU@+z1@3!g3H^D!_2USh=%`{aa%r(8p2&agS`2@_Y1D1A6HwATLSc1%kj;K# z*}Eh2STh_!gEyXN^V@zPlyt{Va9eIELS_HuS1hgutaG_ENmO{ELPhudFqX9c--q!; zYQ6Axuut3xaW0-G(DU{UJ%!7DB zi`?;q980m*ucuIdOrf-JY=`n`wF+L@KZ-2_`>#BcoW?*OJvhS?v@*75ozCf%8*H#> z1I@m8;^o#Bw(v#^`3b}mpF{G?BUs+HIi6A#wAPR&v-W#RRe zGU&$s>tj_Kw>hWlQ0K{exS!Wx$?!|QmW<}&2@ROX6W6+v9EB$;_siM{B^_i59HN7f zc*1ka9zWJU_sr%71W#Bjv1th0A1#Fh?7tj$Tq+Dl&ENk!2R!-wXx&etc!KtT z6xf!3%eUaV>}x6K;S;H&hgwSuwVn=YO%2qzdZ@9rP~+?1OWMWj!}gtNQ#B3cMf93S{15E52zHwX3|FB1rOB0&mr*nc_C zztRCV3S6Gu2reSEry7j!C=WaE#F5a0dEwyvhf{y<#1o_Br461S#q~bqaDzf6JhAL1 zO}uy_?QV`e(7uiQ#NY{i2!tp2^qau?pPwYku>ZQ8U52|qV{L^zjF97r1yaC;CpZl& z3;mnR$ta%KS%oM9_7nPW3{MPnJCe*=rX#LH!V`(K#1r}tj3=H*VH=)kEE9n2znGSv z3VZyX)OaY|?jsKk@x+-$VJ%@D+f{Gs!2hNNm2-r#_vIG^PiVm(o(Kw$`?MWTe2dKW z3`&|-Jme6LhpBj?sC;9?6H;RgOC~-qzXJN|2P&SBdIQ$qCFU45lej~;Tw;%45^Xz` zpgx0y`Wyo4SmZW5A>$EHuSuXDmq7j61S`tFJ~&PvzT=52!;a5kZO+uvSlDsVvjZ}kJ=%Qcn zIj7TtVm$HZF^Q^pqVKD`3!x7wcN5|6QWC6zC#L^9(FHbmn48HUJkg*a(W`iZ)N?k3 zMhPvn#uGg&C;r`nCr;L)!iW7=v4$-l!=@U=R{M-iUT0|Y$L zSqjkc1h+>+VXK0(IMT)wV;8n+1s~p&;2u0tV?(4Plxe~uF!KGLDrV4351iP49X!R2 z1?O~mjih+^jMrrbta>$`L~}f$K~H!>>MvR6d7buoCe%6%sIk~k<1wMeWWgDiiqPDL zC*;{IEU3X??7w7;Hkfld8K;3Cw{fio>+69wo{+EEtmEX@4Hhrmzt9>uV5aP(@C5C2 zW1B%y!*PpNRssM{=5H6nJbj^(Q{_MlQ zK5xVm{iV?hPv`&#o+xu=x4}AL)~zRDP;1hm)}=zNO@lvwWn3HuTlD@(b3NyD5~m99 zORO3!FYzjH)IHl28+cNlTR|PW4#E=}w2dd^8kV&l$3oqfLH&4!gwXF>19R7srUCX} zfn#j_VK8aU1K`V!63mV#jx3IGhtu-Q#5|rDwb8XSl=dDgDBp6jHsFb6N1wli99oom z2t2ZGinQzo@?m?yDdJsCZ&Q=7GVm5mQiI;iBfbxFW<8 zJM;Ib4Q;jf0Z$Ap6I+nAyo$+Qk0;93Y?ux`bYK}zJZZut51we;S|SUKa-<|2f+K%> z)AYkRosSfS;E6NCiN3@Ww&QaShij)zck_mi@5_KYo~Xb4a6RZBwDwg6$S)C%)_9^v zsJA)v(qb7rQS`*M=j-sqgmY%MVU5HXl9||l>4ON)=~mx8vW>Ns)a$|?QnLrQhoy7F zfF~q&A8PzA)EGXfaXe6;955TGOh>R=evANK5g@C0d=zt^z; z(g%9%zqUq_jL13NALHFsSh4R_$J20}{$Sw=ehPwEo6nFNemwE;t>t96vB8&SL!h+X zb%Q(_i)aof_p~Bf15cbRTCqILs~<${zqCk^{TH{y>8tUCOTD~Lq03r#nr`ugJ^;oO zo#k%?PcStc41Ed?a9R#2pCPdYPu!H^O*~O!8XsABf>)%iA*Hk}Tww`)FwXw#;O3LX zSRcx}E8QG^8!pMjctXGE;E76SDQd+Ni=z`Sz%sAntd7EAtz^OuPe>gz)LKTU^-M7E z(znWep~f}C3R>*T{!8MUSf7>{2WYmP=bW&E22$V&8Sh+$CuGb6>U9s)V;>mxNQ$8G zg!~x5uA6!w%Z6S%Jc!GA=5GbeU%VB%Rq2H&&4fDr3kANx9^&r@&;xUI&Up&E7l`A}-9Y`|| zo*1yHLvh$e1K8M4lsOQU8Gt8vW%B|$KR&|?Gd!Ue2Y4d*`mUp_3uGlGZ->2lQ{N4D zNsTA`Aa!2QRcbxpT#5IF*Cpl?7SoF+JRz|kto8XX)Mr4;@q~;6Lmdl(dOZmBm=OBO zb^(UV#|HexZe~7gabyIOuXrN=1fH1TiBU5;cZTIP5EM^vyH%4lW%R$x!0fb;x&>fc zy~xHB`wsKM8&Bjuneqr$8hXCubvWVjizgP|W2b^Ac>T5*1~-3GZwh?5 zQwAUKM9!c4y2EJ$bMO@qPmqRE2NG(~%>nkDEjRLb;z@a~67fXis{b;U;tA3*Q{WsO zl;NDtrv)SFc*4~F#bMabw!7UHxR17k0Qi}osu{3R{V`WYK*|wmro|KA{%g<%+Uj5x zp5T9}=HgylY6$Z-jd>?9|Jcp^*& z@$iJyy+f^ig z%CR!ElI#$>l0jcQanV0)5TwMDZ!mab&b)HXptP7c!@gRu!TxJ&a9jb_ zpZ@I1^>-1T=zGZh16)X}Wiq@~N^a`##Eh7+vm+QknMwP}0L@!sqWtae{y+wD5`j*TGrwZCGE(D+!~V z(~%}!33k_qN_e8uwg?N>X^Z!M___d3ybfbh22Zq#?0*N!x3EjFP%dfG!4rcM^6rET zCpKRVwI T_9W_wL$Qv)CWKt{R_bpS}2DnBvyz&|0eMQu&F#VoR25uxdGI%LnyCy zu0XwpfO;GO^=k>#|9NmVDGn3iqsil1`N9hNa28M0og3MV_33p>KRH7)QvK{<2mQdu z6UU^m5>FI5nDhZw^*>(VF_e_|I2ct^9$MpxRdJ^ez^)(feBK1Nc6eNMDSSig*HlfDk)Jnq?sh5ORG$;m7NZkZ$jh%)XKMAFc&kkxF1=MG$v+;yHPk}RJOcln+xC*r9 z7W)+JCC68Amwb(dALPdwy2km1PJ}Ym>I15z?i5EY)-7kI%Q$}3lE z$RPtw?(DxV%K<9;uL|;wgLArtXP(4CKS@1;;mswH3{UKo;4(asGx_3D$fJa;sZdgI zhr#lC;EpF||Jl=uHDLuQbzyd6N#4g3w4xM+>#>I!eCp#A{dpGWbf%hrp1}#WGC__f zXvs8SZcY=!VCVYMFo`FEdfBdoFTV|BbRADV+Qr zuiESO+pvDmYlGad-ltG@{CJ|%;clrx!oE7dh9^E-g;!wxsdKTkqR@?$Ky$dTU`3u-;EAyk9FHe%)w_`Z zeQPwaxBw+JJ{(dO!@wh+XzzV=B@8$?fTTe7UwMZU`D!xkX%XuKM`+Oio~ShMW<%D0 z7cb++8&AAm)3hX%R%uHpw{PF4;)z^`-o1k321hvFg=a3E?HdElwU`1=%)7zM4)$Nq zk}TK47gAdftLs2Dp7{6i_yE=yq|OHBlURG$UE*z_#@s=TyMg-beF~nC=WkHQ;GvGg zLA@4-dr0rx2Qy@w3>#|k4W6hw`1T~$H`k5IHw4MxB{c!GAn?8$h7Q;>AXC0ODUIPBvotDEq62YFe^{)@KvL(r33@nE=mq%^PNiEGa) zPlpw%$TtK$p~YHwf+=ZF)@H3GK@3mq%}1mRp0JPyVR&MQ-Dz_uuV%kY!V`{i6UP2) zzWjr*|I#8h&gncPDIZUeqO={p$?nm56|Aif2=PSJ&@-c1UoImP-*|#l-S)7z{@~+@ zMpE2|CxTbsD+%joZ7P@tO3TWRiR{0y(Q8VtMXA=fFaH}IN02sQ;SbL@koV6Zc*P#cp91U#LxvDT;P_=5`e(|tHS!I zLa^4tEkCly;|bEPGhj?}`QnZzw0Ia#(yXd~@fV z?$hGBRpI(ha*%{4!ZwoZhbOFer2H6%C&uhA`39c5akR@l$nXmRPIw~VA~)1{;@!1B zp-@uj*Fhe|aPWvHq#heaOHC#$5SwY+8G1`?2HYv}+3>x@Xu^6Drv>Lotj1V8AHe(E)ApIo;p6DqPVtC@DT!i6?;+GE{hHEEDgB1HO(m(@X zr8-Z0&Vb`JfD%u9PQTiVwM7?s35h3Yho}!X^IPNuQ^!hEI-a;y@^vmq*egcI6SM`U zLOE4Qggx3z;uoGc*qo;r?7#B1Z@dH6)r)pK!7cl2)>kXZ%@v+lGP+zp*!T6M-W}lH zRuXWFCw4E2s|ww6t;$sjE*u=>o)_M_B!d}v!a*jq@x;9Fw0rRIv&iyS;E$%#;K(_h z1|s8$e+f6%vA)~yp~V7dFLmm0gbwoH38`0O{a0#MpvJ93ja`KrzXmmiWh9=E=h#r6 zWx-tkAN(@BWK4_oCb_PKFXY%3R;R^t37n#V>v-bWuy{Y#`3g(344&|xMkN8Bh?hY@ zJi+vf19Vxn=0jmP>*Ho#NU{Iwu&e*45$wM-pr3O(UPIhsy=UavyiqXYS~S1uctQtD z@x;=k69KH{b^Hv-V_2t=aM0e51A4U=X4&GiJrj|q-WoOf3h14x&%G700d7&wPkV>Pn7AJe>Idgr8!W(b&iFUZBvDX zCqgEE>Hs@r&8*TGO1o|~_?%maQm|Ud4M}<7aek;{eNeCWp&s)?-R?uxJ{+q5hbJyeff@U+3R54ngsm3N zAt8iwI$F*g;X`(VMWExZP3LmLF*$dB`{aiw2Fghnp3ol{JfVemcw)9B;o^xW*Nbe0 zRow5iUjZlTLrpxvwCG6IdHTpi7yB>MSLe2Hi>-XX;E8F{_=G1O6d-CFPt-3_EH{h^ zD%oNcDb&OhwZ*{fzepDy2M2r_;ng1= z=p+xp@kH1Rt}yY0^@3m3;F2)`E_U!Xzm@r*offd-iGbZt(gx#+cZW+nfWO*G5$$O;87!(nHh7}AG{NABNk{+1!!LJE*Ee8eJ%HhyZmkr^ z;MkS7~> zg4g!_A<{4F1vd|#?(Gg!FG;W(o^V)x%??WXniahGESM%X_FsA-!2WCdp(77i@Awz- zIu^d`cg{W%);%A?i()*XL40^(=H2THSr8EaeZ&!=g>=oVe!P$ND@8p1gVJO zuzKsO&9=cQI?#Y8EFK=8#X6s#oJ`>fQu6yi`A=&H3BMw_mi^ZYGe$xi`U%7$6f^cp|F$$0V3hrk+y_loss>D7THf;LS!}x7R?Mke>PGK}xh+_`^fJ zWnc&;dI< zQRM8YNY;i5>4uWHA$;}X+2$W!Z_Fqy94?9XdEZitHaqzj+#lUJ38xJQ- zd@M9*ugLbn6A~u_^;tR8=VegG%%P5(LA`c{di)Fv$u<=Fh>qay)R9BHVLDR)p0L5L znN+pniJY=y#S;Tpv?&Hl{D0uvkRgCCz465CJ(;J0Z1|J6H999K7YB3L<=uzaM zC2L6${?Q9h6qANxJfROt@I+!Aev|M-?Z)3DU{zXWLg6IryB0=uk|HNO5#H~SKkRBf zwCF&%g_hAy@HMBgO<=9+bE0a%839Xvl!h_y0!fs{6YVyQ`0b4+wD=28q_Q=(*B#-gZ-C2pyr%z?O}PDV7&T#;?D)>+~s_| zqj0*4A5Snfw~BRvard762fc4SwH*TqVd>fzzF#2^?(qb#sNCS3_BsAlfrPWxw}nOZ ziz53kExP5Lj#Q1;-SI@Fs&@Ba<0UR6&EkpI63~DrTD7<$qmGSY87?*ne$b6`P;+$$vpP{&d3=w6ML0ZFM7xCrV3^ zHlCO%&Ea?=`9hifaJ-us4o`4FbGdbY(-Z*A=RY|*2DW+e>TO@R)+61a1AM&Wd!I(oNdxTg!~n}%wyaH21ugT!TxF$c z1yAV33!Y%g{2pscu-;#W)k7LqI0>g@dGKNgPxO|+Lp*V&Yy5oJqogznv;Uepm?#_0 z>F&uz9iDKV6wws^M+#L<82fc0$vAkT`^x?WU>^<0#1lofCA{y1CrBkuh7414!iy(r z$;B?72sBRYhc+3pBtWzOqNQdDJdDk!!0-7bP!&%|T{&DXwWTnL*3vq#tPTR;35hdj zt+A$1ieg%h09EjmI2 z5}tT`|5AP%S`W|Ft&oi3RJd&l^j8Yl|nkNCP3BI4Tc!@C2_VFF}WKXR?mL z(YG$v*$Ge8keBp$LJPC-1nD_rS+8%OYSSM+J@~$JM_Bp)550_uBmP{f#`-*Is->W1 zWl4<06Z$_8PrR0bH9XPE>DhhgOuI%bluw~kkdjs&2I7h6)-mg$w}UjJ;0f9mCqg-u z@`d%ZkdOV>_VLe~vA+IqI#>6c)AgU<%^vpGhopF-v@`(YiJ2k)KETGwq5P!c2{-uw z#1k^L4teZHk`12db=ht+42!(keJT7|LLMIDi78L7423K2zUD-h{g>1t!}2OjJfVf3 zctYwD`15RuO@?hHKG73TNQ@HHI0dNBDxp5FfI4Ogb=(5#wF?ZU^=1@&DPO~2O$|1{ z6ICW(Yry)_(*MjV!~AKB8ri^}`h^@%?3F@cJYli@^-EaSZ=Zbc=x6w>-eZIG$!DQvcG#*hlE%YoPsAv z7sv;HG%9A1)e=vHl;&svPh`o4A5Zj_!g4%8+T1BPvSbrROxS--_3X0&{<|kZJ9xs? z`{qQrmh|z#@bTASO}j!TJs`ppT5yjiip+aw&!6X-ASX3=f^Y5rTHuLV63m1r0(X(* ziYGD-THb(DrJWdFsDd^7AZS|*b4L|jsZY4B~;C;f)OIvV7KC!|K3wbp4u zt<{2k^Z*)9NX#~CjoWOFCnR_DQ%SJm^stO*IF6RM z2zZ9w^e$+w!IF65d;FcbtT*tx2s-o^2E=P?$Aj5^{G0{>mo1T@x+>Z zgRS5;rfsvDvH$91clRxH33rqyb;c}f*}>t7F>-;9CwP6i7y49}ghxCP(6QPgnEtNE zkV&wC2G`;V(s;VEzL7^J74XFHscmY*fjV%({)^#~f~>zSTAlf?DV}(>sd_qG)^exc z6L=?7f{yWoxxC216TYTGhoF3_1w+CpXzaxkbMKs;1_M))`N_f)v^RP~tzCy&zY0%F z4I4C*Iu_VLV%cGk#IrWR6B5$~t4dr8)Mwi;>PLMdLGgqJspAP5=VGnbx=@dIp>Ffw zO!>Hnm)B1C(GV8=GJ_^DJke#rh>|e$s08oh2~x7YyW@#*TZ+Ag^KR|tMJ%4EAp@g$ zV&zFA0!nJ~E_k5*mD+0|p(%W`!xLK6!2WAQ%Hsj76KT=u1WQ-`5>Hh9_ptE?FLSNnYHg5DamX2MlH4CvbYN{q=4_9`TJm2McI%5T2MKCoAl~?q0K94nNdQ>^dE~>Vp?Nk@+IVoAvds z@BezjVp7)&`%7&f)cPK%G5%2FeBJPb#QH&v_ksG%AL?^I7%pS~@RyAL!4_Ifh9~4Y zfc1Sj7J%i`hI1u=C-gxbp4dA*whHTPi}^WhVOu{*gu)Xs@`HdU9Hqz(Pb>(1c^8g< zaj48?c+Nv^HrRjZ15D28ND*1fI(UF2pW}(ByKduQP5t1&6Iy(TCrFiS!k-gP%>*x= z2+8&?19xP}gIzq)yAaizc!HLJ_fY;e9>Hrt14e)@q`xf;)%BjZ>O^+EX`pAblU&CPcP`N0TOsZ z>YZ6@%_G#hC%9Q^A7E;#6gP8DCozz4s>DITixLX~tu$~1PslS7*4t%V6zbRr)axVo zpBy7W{W=Nt#|m;8-@hu{Ym$H(_FuNk67oQ|>1*=-tcNEaY-X|#PcTJs50=zocs%j_ zIL%*pqQ_aM-SGQ~=mG1XOx4ea%O@t?9uEoi;{_|8aCz0DGaRl5aqPc%WnGi?-%kJ1 z%fQy*x%noBC#(w&`coHAjFA8=JVEN#BRH;l<^0#-nSffY&Om+$IJm_V?L2sThbKs3 zUJRe-=~`t94^Gy=H1=Okqmo*%&POXx9oYTVOiu^6t)(3Ffj0AtyNQ?oMzvGg*0FfPs}}a_b_WhCakx>^d_;b1E5Sd&4Ba&-aj(}-t7DAOD|}1 zF0EP{I7sTi;UTF7h2Nwe3^tXT5V%a@!d>u$#D+qR4}%&b0`)mD)MrId$BUtk8No+# z-3Tklu_GL-7teS?K89GEk&a#!b{How+wjD#CByQ6Wi+-KLEe}YwEQLHqk*S zJV7eS6xNBQd;ju-rDqLt=>dl(kD&SxPq@j;ay&swr2}LLuS5~Js#id#obW-U49?*R z8`&Y@i7C6YZox?YcB5duv&zgWcyCHpUrjs9uSP772xrz1V~3hVFz zN9|6*Us0#K?}06J@E=e7ckRjo*3u?20m`SYFB}!}Vtf}!=rn~pc%pY^sxy>!NqZ=# zaMtkYRCy@E{_B1*UYv4H=UOJ`V|Z>uMYlMZ`&*5PCfHdEn(#zK6TUg&i6X7bE`>EG zbn>1GWlDc2yi{x8wH}bmOS4w6XNG^Hx^RcrbVgR#fAMO&2&`9N`Rkl;&gixFpR3`C zxL|1zFpBC!G(16yR}|}gZzIgZ;O92y8gGS-^j{$R2}>z}!xKaAz8MK^uRNhC6Hiop z-McL$9G!=Y?7yUT7&e#sLAXL{h~Pb`BdCfev@j4)NIW6y6STfYLyaqd`fL&E^9875 zj8MlJpiE2khkCpLE#zws>?HrVaPxy%eeGZ>uV?bX8XH&A;DaZ=Z?Jp|FZS5h>;be= zq2mcHB*haG*FCko*-S%7Z&L(pQxPEg}?RifP1aw3m~2t zBZ*6Rg0yvOxUjmF)4$4iBB1DikFcZ$FW`xGa&v$uqlb~a^RI-}&&9Qx1*hnN1fC$}#D{ghM=w9M zh20xU;vt@pnrf(Zl~8M|pw?G7;R%Vch8kxHHP#AB3&L@jAW~LpKmUJs9x5-%*@q`AA;fZ{b#DXVA>?w2={<(Uj zZ6x&619HykmPDQ1!1~eaE1W3e3D5W%li=7r_lFLKr+IDK6`Bo6d*A^(M1Lw=8&ZnW zt{i+ePcBsO1nEQnD&UD`MZSN8l%+a9fqAnXcuLCtOM?tKr#oNg(LvU4N;fVV3~SG7 zNhBGb&YB-uHB$aUp0qcrpn7P_FwmZ zJTC{AxaP1c1aEK1Lv$XV&;dm}(Oo_P@kB)V>>Kb`k*ZWM;E4&6kc1~lX9$M(YqdyS z2FtH*UwS$mmC>!oaLA=31Fh`8!iL0p!gdA5FrI1!L zcV;%j*tzSSw;Oz)QwHYogw)}}IZ}%UuSq>lSvCf8sa7ipZu6KkXh3s2Ch5Ckjn)3+Fo55Li8GCXT754iBe*e5r;!A`X7wSb#B zjc|df0rFprC$u;XPqedqpIsVH(7K)h<#zfhy-pXQ$GI@RnXvz|lLy6kVuo>h6|{d8OL7^WXqeDq42;+$ zBE%Cvq{tIb(01Ym#R^qnveYL-tx<&IlJfCY8&62B0@QeA=%rtrIH!}iCDtz_b^%r| z-})S9@&`T2~x%uLqbizOooG^?^N@Hha4Uc=?=fm zlRy+aLF%*%T-NMcK?ite`(GMz*njCpp8b~=k#kN*3(?b(c!Fh4|B0L zG6RZywZRkJZpCAk|M=Lp4X8$!x8tT}8N!>QQA+?*Zgw$`9z!U!ubTbZ095?H)63YoSo(pPB z2h``fP@nBU9p8mI#sl>_54MtHJs3z^v@?7tzvj?UFRt)JS-Ba<6aNKfy@xrUY^;+E zWyp9wi=CH1d384h5)ysM4|cu(=y!Lx#Z?+&Ij7t3 zeoP%$O9MvnME5@_g;~c$Go+v6wCwM|H#_8Occ9#MUxF(u%HR#2Sa{;f4p{!>IbLA0|7vl$!5nyM*Uj-`VGa$v z#uI~{rgmVx{=#d%N#F_lj2_isWgXPQ6H?R4TI<@1;EAo&wm{0yiFU>l65|Rr&JAj; z3!E;`yJ56E^MVCr+#7n!*caR>*T3++90Nn$4noxe6w6q{qIVYc`db)J=pZPbSQB(T znYFZO#=*vN>IfHyhm(N7Ii0l>FyM)?7v3y^LvCIzHx-64g)$WW43NQLJn{Z{TuZp3 z-Md_M;k^T2NczMRd4EqS0!M0L2cC$vqEZA;I2Chv2HP$!&BO}(FJ7rf!6z+iP)&;` zcGu%y4W2M>(sTtp>+3mfCbZCk7d%nknP&`k@Z@I=zb57k)Ts`I^~9n@N1I9MM(vHy~qA8XF(B<>%2NbD~R zkoZ4%S7Lymy~F`PeHI8KKD6a(7f;BTAk=XIsMiKij}M@Jje!1IP{;mj$-<1k1vsaB zv!e1x=;bL1fOuk$JgmeMx%S>M!RkZ8@*jj#qEEHj3<)dcCL2#^p&_22ZEPrO*_HK# zl$iLof-d?Hm;G1&&qtl1zdprgUsG3d$=!A1K3cZQ=6uLo*w|q|C9Lu;GbrQ~hk3t4_`J%?cJ8p6ZfNj?7Bb@rse$It^GY3LK0G0{P*Ce3pvFW)jf;dD8wE8! z0_rnT=p)Zb;BFZ!h3QOFbB1L!(BK(7A;(RuZ^+k9SVDgMpuDdAmzVuSh!no#iL7-$ zAHya-TWa5cOV8|Pk{eHuwsa7do_6x_W;pErd72*Cf4N@qng)MwkOMY6LHce_7}!1K zS1b51;th!fc%ta1Q5E1A4YtA)w6U167HfUUgC|xOX6KD3GUPxOPk1@-gc?uK&KU+L zaf-POMvZPXW+lv{L1=iQT8ETTthX%h&V&h`V5+4ZtfdF|cw+w;8ffr@<&-}*(0bVH zdX`XLIefRo6BQ*m4^J%I$V)0b@p8Lu44l_uf7b{Y$E){Uu(;Wom^E;~Ao)bV6Bn+z z`om27#Bl?ly9O=diKj1~yR*LS{=QTVXty=9TWRR07le31>O*tm38@i-S|8f(JzN$kTD2kv@% zLrJ6XgmZ?!zE%%XvS(Hi7Of;V&v;^S_9Sz-pLD`6x!8ZTlx7M%vAbls+iFnA_a_Kgdu96}EUngT?U#?Pcv)%P!9i@>s*C3LL2eaqPeB zBuRvGI@+v%nBxg<{a(X$4TGlMg-d0ZKeE`RYx7 z)|5Wv9tczGJZ#zt%B#R8aGDkuu>b1v-Ani=s#qkmSppjUA2R+%~Q1g~{pz!$xwcnMFOwkKf#PuNthaujly z?YkZ3(+5L%qMk?6f2{vU(s{?_*tcOkC0k~ZEoE0SQg*T_;gKEL$;=iain6zitn9sV z-_~W%Y_c~ILPmw;{hsIh{`39(`aGZKedNBc<2ujZc^=2QrLC!yslUE=Xweha>eQXl zLv%uey3mP2!Kqa^7aBFXsy*y+Gn5rpbi!2@%*=+QyCgwT!9+O2XKl;#@Y*i<#h8s^ z8ti5^B<*uC=UsF~!(m#Li~UEzCc2PlHlp9(Pi)WmZp#-18pAS7$+*D5`b9Du60Vz% zv&Iu=nT-~Xc_=Z>hQ<}aM-p2A)xH?2jUhCPoe{Ls2d~-i(cnn4u|n1y`1wm2cZAiR zGWGz+>cX?x&^8EXeI0`OYk_OcBGhI>T(+M<%$w4#!O;8bT~ELZ?%N0Nf(3O!-fVOy zbt#&29B-$S;OB!^+66%meX%ne;UN-CYc>*Yy-s(Ba$8Xm_F4EN$QBX;jiG|s_~9!K zduF52p8U42p-ivchIfWaAz(I2Yml+o7*tJeip|FU=(;r*z&~s=O@+l8p$nku74OoUY} z*E~B9#{|X|I}A^r+T|Aqb7`Z&Y;?r^KAf}sQ=?!~!|SyJVU4wk!~EbRHTW?bl7{BO z+2+`n;$>jh65?=cHa1C|^>4G0BC(dRF6r2h;B<+(fLF!t8rrHMl-cMl_E(&@7nLL@ zv!Uy-P}gFhj>keBlYx3&24&080q&F6XZTybMzGoN$dX@wnT`3^=A*1;;{mQS*P+AQ zbr(*+p&z&6yk$1x+wAjL11)x#M$Lhk-1_rrWXuTLrb%9rDUI^`kae~4kqf>Yy>dvT>@_Nl#5ui z@onXFDqFMBAS24^J&f$KxWRoW+rJkeri~b&nvMQrcfN~*d+r`Aw-jd7I^Jyt6gQ|4 zIQLt^)j)W^!@cYsVEO$|Nq8|E!3C4Xxx&M^1DApSuBW}v4_iz8d79Z+A~C2?8b5RD#%tp_Ddv2_OTLNT)(rl!jFuX!xeYWz4z=+9e z;BMS_{NPh7&i3_RI(fi;tC9mM!QHsD*}?R#vMFpfyiAsPe*Q2UbBg69O2=&68&_oV z9Vo8dXCO^#-gwQ%p{3P{WHuXF-)r+oFdMCOP}OWKCdFwu=O?`F2EdA={An$ljgdD4 zrZj*owGj|uHYC-z1eDv4JaDCtBtMu9%x)NLHXGIRExL0bjth>-cM+au8ZI8@ttuM~ zW}~wPikOXc?~i_+!8y65B%GR!T5L!4g;R78-fUbP@Z@e2&V|mu$zKB!nu}A1*$}r3 z8~Ejw1kj)p5}OM(J`Y}(7#&z#7bna{U$NEYyi4r$VA>RHc3=}(w};WV=?{cDeh+mF z59)P1)V4g-@*Jv6!-e-}v`$Sm8;{-RhQEML8gOMcMv%6BlCzmx$vx2O(C&e2p^q+R zp%Wn|AB1v#dFuj7h)yu2+8vJ7e<3>YMFP>#iT3Y*R)T~(yA*@6wU`6GA1aG{W}{|8 zZf<+i`<15qDycEf==iM5S`EfJ#=DQt@MTb{BzC*jMAbLgPH}6fZ}Qz027=# zKlXuk5xrQ+Mkn43Ao&oT@RkRb+4#9p0vF9jW1a@TzL<@uz*%m|@Xo0PZ1AHKx+siJ zka`%;c|YBuEf7<2-(|453LH9-DFL16M2{=K`a;6SaH>QnN<0qsf=4FGV!7F{eE9Kc zS=i3whg|`=Ngb62Ab|h8e0IBUD=^sP+u7Mrz9rgP^W! zKpoqJ1!Q~!c9UxyxJlYMFa@_^OITO_dQ;GekJ0uo;ng-vI^Kk~T5zEg8W@dEpwesk zIp+87^I*eDCq_($vm(Xl#BAIqjkG%~)jY988#plTStn1p&q@k(bfT|JJfah4(z9~F z`AqRJ@@+hrmWxC*bV7}B(22(Oug`Lhk1daN06M`|$41By1)II-#Bm9vHyh7OdSgLp zHmZcS_3RBtv*qs#Pk723DmoFG` zV#ZkS63ky)Zer01HQquezU_UxjPs`slGI=}-1ndAG6qi5hA}!pDpW_#MR|K}3IkkZ z;{ctQ_hC#q$d?zRHguw$B$A>N63Y!Wo)cukMo2MOPmkAUrSOUI?-~A_g2^nSDfW=aSk!EMkfXspU1$8=P$Bxk4`w=?9&Mz zogo8Q=)~(6x80y`)8xG6;mQrERF3F`#qTNqlFWv)8lRhu@e=3C`Lx8k!Mqah0z2!# z9y%d*ubh*`_6@523!EZr;854WppJz@9S?(gO$@(EyBOA!vJuV{`FM*?Fpd5S7C*F* zq+oPHgB8$;5cx!-6SuZkTL)!3c|OF8k%3@z;>(%Dp|DK*s|9+(!F%qsY751!svi71 zR64h2qh-RU@5SMwYCo&zf{&yB;_Qr0=m0r7(b|THadcvv9TJC5qAw#|-n4uGIS`F$04R2XEFdKPDH*Ey}qYLZ;V*_Oq7o9j2GBY2nsX;&J zMA(e953kV)rh*>9f{o;j5}nWm6?7sq?$K7xpL>Yo96G_4NF)p|aWY~oBt-0Fe^~6{ z_4H0K&_ixc&Bo3Z&x2~hpJ}qtgiiQNvI07BIHRZqyi+ur@0VBTgv9?sjRAxj2Lv@1 z05(sp%7_j+AvS?f?Si1A*apDivOWk+vPJ+cHFyr4kg)>J%jJ3jzK}Kp)Ypxd=!E>= zLb;u}4Rc*u;ddH#)GsKLMjUz_39E2xIu4F@Ip28z zJTXrS6?8&_meGlJ&n#+jmMK~X_%_d%kV4Q^4MNa~%m3bdd4^6%Tr{+i*htt_3tO|X zQDP)Ge-b-s=q|RBaGKal!7E}j0d?IJ>e>m^@l&W{C{VAXpthx;zMej%{*sR=9H0h7 zW@9f;tJ9o+J&rB6A9~l{+HF0Yw@Mmk=me>ZQ=xRPhQnafrG~vA;i2Q&!GGiA6NpYE zzI_;l$v9BQb)w9!ia)yWDg46||kK;9hpVGgF-FF?Oh(rHB}Zi>MfI^pX4 zVF`3uPzNVwbb@W?5O~H%8uRGHZr|&E&_7?7oK4{RV4Wy5#Qmxa=Q?VLNBtEwfy6Ph zaryl;$4{_GtEgU&VK2SNK__yox?$#=IzTpO(TVdryjH>p$Agn*!5cHgKoOnbEn)!d z*HqpB(TNRr1De5f3%U5C{^}zRanxUQl?%hfGHFe-!E#fxLccyjC)98gosgJO&RG&S z1~qmBs{J@r8&artWKeBMpspuFT~mVXWn3A?$k-BmjSGPtbk@NFbVACRhvKg{drF=LnH0kRsHnHlw>|N&NkoNKn_={u zYDAHv6AbUpfMqr{_#Og-nEvYv4+i=S=m7tol0i3gqMRgdqZ45R3zmhC*#@(LPL0OP zXs$6r4d&5_%vm@`p%Xn9I$wpDfDb$hSCo*!NOWT2_6I9rwTJt;0ipi#IND}BJcV22 zK$u4Z3D61uJ3pIojy?R?r8azD^v$3Ou%-^uq7(dhku2^;b%^eP=Ze2+7kdRb+H4T zc#-(D0cXPP?W)5UvG3TlK__r=%>!v}5U7Ms9Je5e7o8}TyY>UvDO5f&)L*1}#KU(y z{We3ln5sC+pc5H2JIsXVyVPfd9G%brE_8x!SO?CV#!6=tow(Z*D*|*v7st?vCBtw| zMkkn#$hw10bexK%CH0s7fvLX=YG9l3V}wiqq7zKZ?|`#iwvC8^x97>CAv%#_dO02r zYNBeTJ`n-bZ2U5Bb;X1*<}&DQcPah&KO%h4iB?0$7l0vZ z#DY#xEu`E)Ck941JcWMe=k-W{s~n|)fKHH#yaUSZ5l?bsLessCqu`khM}fJL7U)ESZ#k`C5w^>|T}LPWSmJ1oPDt!E z)c8wS-@cU7UZ`;xP;IfH+GE20Vv_~;h+PKEkhNLZRE@#V2^pj1oG9Zou$)}0K}jP> zyM|84Yc|xc8*J5nk@q>ccux$K6gojV-9|{5(&t5RRKfwA7OB6g9qTg^TI&S}Izd{w zFXtF;bsNFg+nz8nfKKFkJEasHuf~Ju#D$+Eil7rr`F?<0zF`rJPP~x|Gjzhc*xe(r z)~2#-#!!E;^|>5g3ak+p0Sl{9B|1^gE43fzEn)IEj85PJ)D+fhBp0mc#M-_%z@QVE zLu?Ad;yp)m^@2{|3i}!EDj~+E=)^?nWTF!fmsUFt=Xk8`zZ2eDAs6!W>C$&6M!_Ke z_yQB*!NVt84TgV91D){ub^qHHbYfq& zLa(64q{EdGmkM7=Y#OZYT;XRd949vF@RZo8!aO?ggHDLO3g_6|K84#tUAKZdb`5p> z3hFg1)OPG;bVAB9xLF?0@Qc;LN9UktKS>%uC(f*Iw+UXut$8slrpD~(#0zu!NX|PO z%fvi75ql-5J(TpGMo`{zoZ+40uZxz3G%bAc!9k%vBL7^X{vyrw1I(oB{SdZ@$zSs_ zT$o|Ys~tMgMFvpOi6a%CE{8G&6$wpa>vBbiPTXreyFYBF!4K%f62IR~Im=c|O<1*K z;L!4LtPU(we-)HT9{O}6Ct+EDPT-R846b#Nq#tx*o&<%U6Dh0z?1Z81;%cvk;+hu? z2~lKY4V@Tr;`v~>>GJvFT_Im060OmR*@@BaF#Mea%TRx{c$Zle+HLt#Cp+w8EzV5n z1gToD;E%JpXepu-60Zw2W)EuI4wRJT`B3e5q1y04wc~-hmJb)mdLDczWBRayjO)Q+ za%~TfNc;XgIw55|Y%6jOmzm~|Iu8l;*l`F}8NcrJCOA5AD;wkJ1nwo_kg!kwL3Bcc z&ZxgSUAFM!oOIw8l@EP7+$>$-Bwf%$CvJYg84;bR@x65BIdo#dAODX~(hVL#`4n7+ z42N;Uk51$(%}NA15$rT(1(dYANXXJy(pb1Xsu9*2)L-vgbo~!D)CUndLHc=3&bPQF zc7P=Z4sK8g4mdxOq+4{tQ5JyFi5b)R8$lPRPdqMkFlrIt*`Ci=7k)OQ?YfI`Lu8r*O`DnC1_G z8QYA2K-g3ZZ**diBmJ^G+Ipw4xIa$2b3KP=9%dV<~;Q6=JAGpN=m22{_e1rpj)3>F|cWYhYn* z1fvsU4&0r@S*EInz^^qWnFpO%d^M~UoS7;HZ0LmFlhlf^_`Ww)?O@*mvSCL3HC!$Z zsK2iLz4sb=IsZR_dXB_*bG|1rp0KPM_MsCJ>%sY8ZgEmVC&cCxs@)e<+YhMgzfjkJ zppFB>qcRo*v&;413Ho%>CWI@cT!61g>AC=`Q_UQP<6f*`@)ezEyt&O%m}lMY88e`y zHiy7iZnpv(O&Iys5vKcC>*#V!pQhdmNp}$e8&Fe(53x zvgpK-+*B&)glxaTYhz0UZHFu`F!+E@)UNh;7Tmd{7O#Nl1a2q;A*KeAonh2|F&w7; zD%hE;MCz}Rz1%9m!MI}`Kt+FNWsm1h>xC zuv3K}wSFE&C&Dx76rvL^We^XY(71PWLStXiiGLFRhE8Y<3_789@aTlv!cu>!Jsf>H zwTVF|bX^>s(6upiLdVC^2^}LtC-gcQozS*2I-%tyI-xRyPT*P_Z$>9{&=;NfvFYVf z&igyb8w~Z=fkT}}!{(%z^o0v}+IN5tZ(hr40xQ%=tXl&PTkvdTStzNNHc+~Me@*Db z?(~u=a9KW!&QBmiUpV=r6B@{ZPB0C!gY(I#@}4m;S8|n**|4K75}*@X>#;h4POu%| z4{HpR#7cDHe5VDq;W@TOBdVd(@9()=Xi+?f)=BR4}fj{ z{}*B`6+1!BYAXcQUI6NvA=GsPsAGpv#}5vp6LJj!-%2|Ix@rI+eLDHi<9rquhb=Jw z_Kg#k!7jQui%twW_+d2Xj~9+r=m*8suOsB8mHoa|90E)|d z)*oCnbf4|$=a{#qe{xYS=vPkuXyPWVsuehHr*p2-b5 zI-y1m=){<1pZ9P+#x`9nw63+K&pg;(3lMZ7RRWaJ2|pum4=C;`Z6L+l6i;}1xEOy> ze_ek;k}Q2X=j6&c;rh9${E5+tk5aIr6B@XUPVC5oBMLepvC>fEC85SlL5-V$YC8?< zB{k^R8>$TzydicJ&|cP3VLw?wN7`3VUt^(uoMBMb%ET>D zrka<-zsI+?ih%sfrjLP(LS<8v`s>k|?;T-9wp^RSkui5jaz`gJq=AY~bd@&_bmGXT zg8%lR6Sy9IhOfqoBN;lO#%1V4ZJVFRIG+(fv!d2=5{hcj!ux0`E4&ckvH_wOE_bQBut_c zm*=!Q1&dW#8nG7!sxcxu!F0(y&S@>gDS`TH%i*A*Fxpx!^w5d^7aq5PW!N^T2M1S> ziXWW_e;!#JX1)|7O?1Lb96`|uw$GE`qkk5`_n@O*0HYHUL(W;_NTHR)l0hGdCxI)( zrX0Q$yHZ$9Y|G$S+^HKuL)Ms~t}{U$Ylb@Bv>Tm}Yfh-`PN-!M)W;tzcyPtAt+2Ze zn9!%A%OAn{^UZz5$3l-9<_`T~_=3~XonXReF?L2LnEG;qeRe;pQy%WfCyw0cM6e7b zp%YiXzxWJg3+NfV9hJS)HCQ@1ACsljUup!7PHZimwTknf9FjbTP7HJzIT0>6F9U4o zgk$4ZU0{WoElak9;u7c%k2LMdiUm5M#_{MxwxEAjoR{?(;(YSyVw?ieiH55?uY(;)5t|R!P;E_tN!<@w41>HxaN~_m*q;w+3nf*$9+ca+ zDzIzaXQl1o#^p)=xnRoA&kNFbP=9GK1${cEF%vmoEs~2?Iyxb-^{}@NRHG9TW5-$J zY@piOL$$YsYI6tG?golmiwo5CH~3q|;9)Zvhucn{POin_1Kc|wK?f<5;ZO~}K_><+ z&%TYb#l_f$E1;w~L_+!0kA=_P9C_a#^0Hh0KNzy<5{Xpk1nGV?VNMN7qW(Jl(z+1m z)#W}kvVd>HWU~^T&;=iKqLI~yYn;!n%}eq+I`Owi&t0%fPkBQ?Cyq(57COO{^dwkk zk~oN=6Av3=DT7XU$U+$P*Gk`y?l6F@*@|$RzubhO6Nlvwf=*}<8#*yYobu5LT$FA@ z!nY=!hW&Mc5S>Vk`LvF6hM!D)qZ7F5PK9#|$Oj*t7%stm)L+-n=57arofDeYhlfd7 zsS5w0M)t6ETX8l(Cw8P%%-DiXZ70RlSF^-QdWSW=w*j6YYG$>%#16u!2r7MP|!+<&c5S*6`Kk;k;6!6WSO+Cp6d` zonWiz3_s7?a$%eOu=AFcGuFd()?&zmPW0dYb1JNb%fxUvrNYrcz2L=gX(XW&udd+i zhfa9iDO?ST>tG4^<=^X>xgov|s+$A$g^?5mAO`g9VH%{fhC zGGP;m%YxCQl7+y#VxJAwMiZ)?7F1gesOz;**KDAU+ipN7Wb6hy$@Lo?p$2jE>14W- zvz2@;p-+u9!7Jg41#+>0PJG_=bR4Yad)RIu9J~7j&bsJCz6-OPL7K4`3ZfHN6Ms8E zaepZc-$lJ+LX7%LFT$w5T4g+YzMekaRtplO&#er5}hC&VhEIPQ8#F}(VL`nbRt_jdk=`&D~gUzkQQhM8>?X{_19E!{Gw0ybS$eF z=tRS*BksUKdeM$faLc}*^Plc=bA?VEUDs(LTwuR#ZW!d{0B3u2;(;lv7aUgibX^~K zWclTh4Iq~W3}#S&b(RTj>aRnuO6GwtihTU7X1tYPC)dNfqKb*Q$hQ0>=XH?d)Xn`9jurpQ_rtgC}x=!A@Etwkr~x)$0> z+ZJm12K6xx2{E>efeo8UvJ5)0Y3G>nke65n1S%ziQ1D$wSZpmEu z%tHblsJ~XaSqH<>xTST6C;Xd^Zw+(mATl~(D~{Lb#F!pf&!7{yXXk*fwT3SJxf-3& z01$K{buyEi=tPHz#%H0VDII|F*0})^w*6rtbicl(!ZbL|d2i1V@Cxa=0kEhB#-I~z zFXe2=dE1VgO{&9hxgSm}2^;9513JM}+OJjUM5S+z$&lgfUJqdZBukw5(23>}FoaIT z70JB?dP@v1oF{R7@V>ucYw>6bf9s|>w#u@{|~-IvWpbOJY- zv=!(?%hCPc!XYY1)L+&Ts7ar$zbG&|fxGBNxVXaF>5Jf#a9IRLCtmITJ_3&Pim%=q z9$kNOfG?D9Wkcwz0j%i6$@>LMab~EcbzUgxgTI$kf2nZ*^;i90KOS(-yE>c8CD{3Q z?m`^D0nxY6x8U127;p#SItGca2D6!7BDmFN@N|_ zQjKh=zgj)cD8l*i*4J)U(1{e7Z%fgM|2JR^^LYu7M<<+QqY0gunZNyBD5;>aP`an{ zAZ9H@3!)R*U<*8 zm-Eg;=j$|rKZ{5b8#1-6E6Ya%_51rVP zE9(esZd0i4Rw(IA%b~`7LXG``!zKO$n#2YiT8bSgY^TPJ=!DpVaDE|c!mz5W3oSw? z^uiIHknthTdW{IRod~t8fckiWvh@@VLr-sI(}DV{+`f>(uz+4rqZ7|hk%Wp);DX@} zQ`X+{cY<~QK3q@~PVXtku;|3G4>)?D6D7abdj)$>`ZM|#-2PAo8qf)kd`Wv@!<9uT z<*C1L$)68z^KY91OR14CI$`V1NC-MHrcr~o@HeSx^C@?OblaWfN5K<2 z4w6KUPUJbhq&@7QM&;-P+lVfl-&VTUs5Eq)^%O@fbV3L0(23@slRwNyCpM=!Jc3=a z|LbuXZtN#FL-gs+h_O97A+hjqn#9AxD-sh2i|RloIw7|4oVR6pIeJ62k%MX{19hz& z>UtS0A!FwA&#g2c4MRJYRjz;v!rX5;8zS zvDpaIg%av7YxyS8ryDS$$~)MLRGCD$74?ml_6svk@*EsoOY#FVRRT;N=$b4tU+`cG`~!*Z+Nw9Je~Cw_loG7_EW zCJSrm1lt;yVXNYjoQ6(}x50V=ok)~lG&-R{ap;7^3UbzXA*e9}Q0<0cjMxss*SNVk zKxeTbfaCRxiB8B`LKHe7aSKO z3%7z_w_a#l7uF;Fw<4U$Er~6>e*QU|3Fw5=d)FVc(TSN~2fv0aTOs`D1XFXTVUvxy zi|&Wf*$VrthnTQLE`Vip;U1k}i)t9>gHvm{^@4w&)*r$hgV9o76w!$_5_F4B;Hpsq zI`!z~n;VWeIsm6x>Ir)>Xh0_>j{B7e33IJ^0j{V!EBG*cxm*ehbV7rX(TUFM?PhR3 zh3kF@%)@_OApB1aJXTf6HxIiZ~cpaUPSPFjrQ|zf>W3j1( zYF7o-wgT$7X=4L~p ze&`lo@XdM{YHMG5Av`~(ynh%haJR~W;jo(;*r5}P>t*xdoRZqKUISRSgCwn>6Z`by z#gHlU+?)x)D)VawI&pnym-ldovuq4ef6W!cL;7@|A}r(K?6#69j85!WK4vK_r5APR zM9|ix5YFO4)ffJ*B+fYK#H>?`n!x!GbJj{26YPF(~*+u0x@_v_;`GDUYB&CLu-qvQQYHhRx^%ZUEgmf7^eo zNo&aE{zMNLIZ_6VsK0L9<%X5|3wO92aKQYxy?#zZCsI;KU_d9@iNQBIu`4UrSvU{3 z@B{GvkOH9_V0j%(Lno?~O9|tQNnphhP|~9UpuA=Kz$IJ65T5$Wx=o(yu=0S8-X&oO zX~KEnac*6Hg`pEOfJXdH`2>O~$$#omfAU&JQ}F0Rrem?`3(HaXxc$EzYp$ zM42s9Mniucd_^bN%Id)RV|}Bt7p$}TA`?#N#P1uc%EHUtBya+qz@;N=Dmqa-xp@lQ zIzDyk6PTJPgVN}PyJhN8D6Wk=;Ef-J`^7+ww}<^SpoIEM;_f(SNbC)4D)#qquGrwh zM6ttz<-`^T4k6Xe66%`V6m&wy<)MzvLA^eQ+D3;JbrA!d5LxAXtks6q6 zeY(+W9?#@_@OE6$G4QXOZ1|uPiw;M2go~I`@Pd!qO9C)DvG=-LIXJ>bKB?%$FnIu? z6B^)%PE;2s8+2k$hHnCV^}%BHF<4y}kLlB~#T>)=R4(brq7xE}4F6NXL?3D- zaS2dulcCxtLbXwXYNr6j<@nn~bVAlE;1?OQgq|7@OP@}zT{vGO^(Gb;lh-g9sKy59 zM9*!R!JN5ds?!5DE@>X#21>Ws6W)0!fx_s7=WYAqaL~#}9dp9{>925-qyA!g=q+p! z|NZY>xX?D!{TzHWCOc6G=!6z<=!6DPqZ5lumz>VeEx$RDn1D`naGBQ|F5f4{Dd+_5 z0u5o+5iLEO;h5{~X$_zg&QkDGe`#PjeLCFcK8!~v+Kytx1fAG1asDOfrbavHL{PNF zR?gx+z8n^)ygDQTcGCtCI*}v+_vl3PL!~=GNuz2C<*nTfCiD|yChD)V_i%EhPv`Kg z-oJ6^1nI<|;SX+cp29{=(%&Y)+3Wt5ISy}UmI^4iXcfd%4I?jfLSnR`#%V&0 z)q?ZuNdubtOKi4b1+m+N!^CzA9ufNum`#n}& z>CQD=-U!}e+SVDCoZ*|RG#v2CpOrdv!b>VRbYi_+praFPUp|CY7Cr(ZaFv0R= zqE>8$!D?KKPT#q`eFK>i{4+ z!B+GX&Kc)7R~-hMI!TfkIx#bTOB;O`bc!* z)cbEqP+XG};ghMq`k#lDo@L|Bjy|0RHJ}q~3Kv|$**dcXtDopZj|$>~Vp1QSsJU>^3fObe%Jq?O3)?AU;n()t3lD(x_U>={ADn4(bf!1FK1>!E(1~kT z#F4`2Tm6n}A-HSKbsIy6r#ctk9>+^|###Saz^=&f;c132Iy~)Yv|#@jcMVs)=n~sCK?kZT(<&U67*wk~RNf^yy^X556Mp_%^IA z<9~3R29u!^avi`~+XC>vl51v9h5C=d_YZgd?g?vp9Vw$J@ChN2T=aTg;B>Yi-eQN7o1|HyVBR|aCAwq*rXiz3P5hR=H z=me>ASD;qskYa`fZ*(GQe%1jA;)((I#`iUbW_19Tb$!2h@!|DHO zL1X&mc@8kQ8UmmbO=PkFomltE`GWYGx?;zcJ)WiP#(pJSHhzXo=D zT$HFTbfTVY(4Z3%?+iU8<`ITV+!IWY*av8*!OiG|*g$gLA$CykhuA^{p%ZF2f=>t2@QrvC#p#D7dkQfbGQ4j%KNm%7obelABHEk1%N#z*`XYuyZ8QvN%jed0E zzQJTYI^llFu>xe7q*q}m-Rx}8TMhQmiG#_xUJOJh3V-vu0UbhqPdW*Q>ctR!x*B;? z)^N61Sft`y*yc;g-l1@*#DT+S5(^479t>(s2voapm_siT(Fw5+4BEjF_-UF_zdSF8-?q7$-y z4)4ht8q{%g7*taJ=Fkbbo`%|{hFY#dl`Z%u^4>?tDi_n3;8r1OaqH7tzoOT)a{P(1}v-++RY+$zMj?gv0e0h)&d#0627F zRj!h;(C1e{teC04y4ug13|}6R#YJ>NVu#^ai64Z9#1O&U`h`O$G%ygI5PL#?t~N!z z&k(12`o;$VV9QGWiZ@Vy>Z&^<&p!KuI4YI_N<*7%&`7PMWM*7y|c z{UvL{Ubx*?DjIYGmy>z0VgBNdQ{b$j;&_NoNK7@#Qi5Z!8Q;tI)hZBot+8Cs;%;RH(mjA9CZoZFKW0<>9y6K79+q1~vUx|LcNI zED|F_bOJZpXRw6dh!)pi|Gnd}Bts``NHKVby3TPw|N`an6P{gCWCp zyy;MXwK-tZ5*{Y4(jESztLFq;>xC^kaq-SKE6z_VKB@NIADxJN)BhEeDUVz5STiw7 zMJM9^7T5>dTZ!X8I?>lAd_I(^|0&S9eAypE;RJ~_hi4?-6y|H}v92EUS7TjtLTt}D ze-QgqSX*q+I-?Uh5Q0wN3U-gPu17%~lZHAj1@+n#ic54jjF2)4-jK&BwATS5bmHz| zoJi3LQiEJzI&W8{q1U(T8}h+99mKdBo!IxBi5hf*6xl}*)2N8c@ZfbBI726#vt?|B zE$8KSTLBk;Dl{Y#K4JQ5EUc(T@90FHYPSDzJ{nZZ*BfTPTp#N^bV3Id(TQ2@cmkpm zN&nTffYn>{B7y;(*gOD-By<9IhHEfS|8aIF;D2YQ66Hz#ugX!7bP@SVjlt(Fuve<*c!IFtejn zAn1hH7bR2)k7Z{uY)V(njOBBb~~)5!A9tW$S-H3 z%C7(XAVc-@8pBSykb_R(qFI{ryDir|@U>w5d)x|{vV?g8k~ksOsQ9<7C-;-q$!cJ=mfXZ zg<#ZbS@@&=`rX6wYkT^1-TT*n4hNZs(mF#Ym{vXk|BRQQJ#^xJMA6S`){jNH+baW-Uh88%O7lXq7(XHqyECp$d>bq8j|=KX>raZIRV8BnihptfnCzOF(2 zYlHh59&~I1f3G>#%M~`uJiELMoX=Kye)!<%T{;8kM2V+fpWx7mZzny5@eiahLnky? z8l6~?<+Ppi(zF~zBcl_Y3-HxMC)5xHoxpW^Amf_Iq%e<#fwg8A&*Whk|1() zf)t{{(3Q8fY;fY;g9 zSGKRk(TF}B(_GzPfEq5L6Bpz2d2s$#(P&-?Hi*1PXC9qkyT=;dZ1&*mk2dH;+zXt$ z(Fv>MzIWiBzNxFvKyiE64>8}RB&7bDmWK&c>aXX8r-i}t+E_*>VkDYwIx)+&NOR8VNp)F` zMkiW`(+N7USuV!W30yg|!Lt3kVX=o!oDB?m0S`Gy$Bz1Ix){>Zrz53d4_w?t9DUJ= zb#o%;!iqXbfldUh$r!?!A!N7iP`Vqfq3`6wn>^sk$6{cNPSlg+Ds*Dib>AFNZo7ZB zp#JJAgE!P)rgy*Yz|O^F0~4JXml1pbCf~EzyaCoy!)tV6X`y1%IA8p3&zl4~(a9ky z0QS&9Ep$R+S~+W68`RhqIK#Ca*3Q&lV&mGJ`b+HGU|+FyfxBeA8>Y#c7i=Qq-Y{Cm zzMx+JLTv*>EeD~>0u+_;f-Q1ra-^|vfDD3Cf1SJh*9JO~rkT|YouKQO0?n^p;edcn zXaEB`vEh4(W1Lr5WOmvCWeOz*V!BTyk4}`a{Wl&OQ%Yk6iB3Fq!s!#8U@M_HT)SEV zJE*^YHzHDmK3(^gor}Q9=Jrgipc8DVr+T9k6Z#NMi%#4h%&!KWa32+7z|YGj?%V^# zwQMa6|1Y}qJeY8BF`HTFM3L1Cf?*$BOrZY4#kvjWpEVBE^Ms8T9_I;zPJB7Hs~EiF zD}g}h#GZRN5TO&i{k?_zhbAq&3o(IYkp-QomTq|vO3LjLkfReCAVvL^ zvwXSUoGk}c>E;XDNvtniF7bZwg~a^8s$%yK$9Q)d_uC7d5c@xk;;-V9a z9EngyCrF=e0h{^B#s)gER|Eu|u#o^vbYi$9x}p=;`~$uk#8~QD||bq z!=k;4O&tjXw4gyJO3KD0Iw3L8P~#w>#zH}jhk$Am-4LA+yGW?EQSg`8M?h~4@J1(O zorLrKS~L4Chvj9w1O}_|3_2n0CeHfW3H9R#WxLi5KD{o1@92cf#cBoNsChT~|7(Cw ze7eshH}#hq715{L`Mv;A-^QvulJtm91pS)66S`=F4V}P!H;VI_S%tZ>Kquanz_9?G zXi;HZ7r1`27+aweq_Ma|Q7tDp^=vaLZ|W}xX~bl|U zPr>?XgoaK8gcV-L`NoM^Oqie(Otnmb3>VYDM<*VyCxHf?sJGp#}%ySc-XHdoH^qJo6P9MD;YpQ zCz@XW^UnjF*pOKJ3*2S#eAqK6+eg=66E*%tC(2|L-^Cd-eR1qF$~?_ACmMm>j`7O$Uq!A;VVue z=)@kAM^!jE|LIZo@WRl`J95E-YDAAtRFjSvIuZS)yeI0Z{>}VlP zLN*-H2@SeHCuB{Xv#zT_M;Tj(!*xI#oses6&X&^7hV7)Rh08_W;EM+mjDk*(D(C>E z`%(y=OiSQK3Z2k_estpS)9lY{qZ6deUx)9wjXwe1?xgMA1w%DR2c1}y(_s$h0;vU< zyhbOO&JKc`_R0bXI$UXbOtUhUv~ ztG&zX!v}q3!3>=s-K7M?6vrz!jGuOMQbtYcFa5<(e`&BAeY)6Wrwjc2IbG4iuu8Ar zE8^g2T}VVHO6JWogLBT%B1AKy6HLhj!quMgMM5W5N)RAAA@RgeV+x_h6+s(aV5R;N z`(iixbYf!&KZ%_Ybk_$jI-$Xl=!C2}@N*q^ggW*B_4)&98wBd>5Y%4_y!lCln)*wF zMybDcUL~=OK3$%>eZST~CxV`=eh$5LK^~nTb?GGM`@Eg*hUMS=4O;_)^~DaI*et=c z=maUeL!jJNbc0LIR$AK%5&|t(8%E`D4;=QWzg{+JWe1Nly=Dz_Xd!@3Xpk{F5g<3k z=){R31I|F%X4(%Yr~wB$@pwkTg`620ZXE{wS1k=64#nM~7yQswHX^9MOuL;Mz_4QR z1FONy<0LT^olwITbfV6ULcd(liKX}3yoagZpU=1t>uaL{oxuJ6FlYIvHbeVS*=U8J z6E|~jm;raYN(T#_m|vnuU)YqYu>+jzBM!Idgv43HauRC^hmekK0}n~eg)=%KcGpmC zFQM9BLAAkvx(*93vH<*1Zz|$6@tmuR` zzR?Ne_OGwi(TOtRyoF9oc^!NM)_VFe?j)R|hI8n|>P)+}oD2WS&J7avSNHr;p>T^? zE=te|QYpH@dVG6Z!_9KbEg_;Bdb`yVpX~UNLY- zCko^%HyO4YUbI^)>54F+`LxCDxz6D2=a zI08$BO2R2R!FJR#xX)7t;n9he1+d;nCo+n8^@D`w;?#jo;FjS9D`)@>^_Rrvay}yQ zc`%#A=s2Mhx;TMOh^;Q?=VGr1)n*6kx;@mjJE-ILP{;6~UdKai%flK{p2JBZ)9_rL zBa&C#3yJWE(oyb>~mI*o$T&Yb{c$w*OH&{eph|mcQbVVm5 zcBwo%A@K`PZJ43jF+#Ovf@;qI`^%ap+=IJR6wHvZP1sb%H{e{k#({~_&Vl9BxB{J! zzh2IV%A9Oh6lP7i5Mc#dX~Bg~kUsOW96EtY--4Lm2c3eWx_{lc7alW<(Fr<18tHu4 zp04c_7<0c6S9R!wyALl?s>Z23=zUx(@&s!=atMX^4dXI5M9 z*B)ZJfP)=6p$$NEqP6)?DbBmLovxh^rscdc>`xi$uR(GXOZ|1>5yo5e>6~5{zYNPp zd?cv>op|#-dMiBWEe&IIf>fvoNO+_BShy%qHV)8C|cf_!;dHAE-EB#{)IkXUYL zCGnilS1%Z-za*}sG<~`r;;eyAhQzoJ4(=EEz`FkmJBK6+VJomxC z;prjk;LdCRcFu?5&OZgppJEt{`dA!`3v{B5B!Z(8df`p|MOs@`&IhP!?P2D{reku! z7L~-=3Y~})qgix<^zKCH$Svo2$WYp%L(pU;H#F!(zbQmFqZ4N$8iYfcdL0E{Ok2LE z53H)j#MEDnx0a&?Z5Xk8ySc#JY(bWWophiEoj86edu9oAqNF4hq7$JH$324LigOvB z_Y@;*bRygJ+Zl^~ zbV7~K(Fuuj<@`fp-C!e$cdmb6P}jhru7km5?V=nf!38oN1|P~b zF|42ip6G;>jhv5&e86l>quau^@6H~~4wto%UVh6Zt<6aUH*4TVkwRPIwB+MKL`voktTS_a6` ziOF6>jH45eTO)DkME#Ca-oa_Bx-+4OPLO7E9*XK8hP_RrNid`SDmHo568L?bEF7Q{ zq??AoS#*H|;jN`>*~CRBer!I{7!J^&A9UhCe3desWhy8?^d2Q|l<34wSx`YITp#3r z49hQgf#V$Ymu!i^c%M|$HfW*2Q0PQH%WAVYFAbKPQ*`1=VIoP<30-JHC!#8ltbk6u zuhyy-q_~{!05$#>Y78LMI3QbeLSg~nM8^O|bf~|?CJ^QqyCB#_Yy;p1Ss#QSWsLyV z(cn3=p<@M{^?Ctnn*r+U29(rcJ1Dm^*0BDcD>Hr+rT*$JUv%m(vji2=r?Y?Kat8Ki zT5mtxbN|Qs^)SO-CYR8O<<>>Q;M|}2c@;w^*xu>|%c(G+6B=xZPK3B}rH4-3svA@S zwsMmVJ?gK8vXD*v^~I0TaQbxZCBYk=*b^9e0UpEM@i4U3AXIcBVUpWY&N0=*i3**F zp0gC?FJatVPXXpf}jQgQ< zuQtHgkAFz^MJL*1-w_6Ds$muNS8iKY7^uIPX7GW9E;->)gHC9p6`hE5#|i_Tc-zP` z5AHj49?Jretk+`gn?%UbmQoH zqv74y#Y_~^r^EfK101Y|c<99Oog|K-6D1FIDGOVK9$#n!#SQtd4Lad@%`yc##@u6b z7M;j=I_4@gbxGQN6k7h@K+%x5h#1Z*#>yKY_1E2;tj^M>(~CcJVo7lv;?N1Y%FSW! zj#aQ=LnrpT?X3VcUL0!7DAc&I{OE+ljzF~^hiXF#)s76ti7g5IEbGb8Lk(Kd2^m-B zoFHRM&`z!|VILhVKqsV};jE7}*vR_Sgd7laWt=O}iL+wpi%wK{Sm7=l82+;7S-AgY z^0EW)4=&{!VDt6Ab1s4l{#klWgAW75p%tAtS>#{<9Hs`)=mc-~4LN6fQazwLY+GL@ zjnIizGPs0JkYfBhFFL_(Pcj^B@(+CgPZsM<6gl;m8iv!SOB_*g3+FXV|1E<_OQ)@z z32W$}8#>WR61UNb12Ntmp=^VB!LFlr9IgR3-V}p*bi!4fqtJ;3XZvL3K_@<6jY)x5 zePl3_`fK--ya}*(KDhxwCxTO^?10~Ki;RH{HIM+Eh{{oA0%tJ<#KAptWz@cJS597tQ7Fy`wH98?SHk_9l ztg}O1YlE_U9t?HN4eE6_l&M@#sO2wQEiwq-nokzU30>_kwo1!|POzo<7M{I-p9utX zLIZNpiRJIBALLAk9SJ4q1g<@cU>#lTKqrdiDKwHZ;r4BM!y>m!uxW!%;Nsd4Zd)jU zO4MIpYLUcCpRRp_L3v^1o@RVv&)gkCtxpcB;w&O8EHhG2voozMU- zbb@YJ1n0zUv*?VX6S)>{=m&@B;u!VUh4nZmQ-3iX;Rahr?2jl1m%NcbFgoEafoBdGBPP;HK(+8x5LMME~n zLbX4Dx&{ev$T|eHm$69LPX!pAkZTgo>2#^9KreZ1f^+282k%{z#dmbV`FimrC{s)K z;K7g2qR+vDJw z#nr$Wu8flxe00L9J^{t(L_cvC0C6Xa4u9L)`ly@ncpnGKzg7%XU(I1Ff|4NCfSVvosrh1g`l zmtvOztKmL51&&o?Fmyu3XgTXR4b*EjsO>eVuh~$)ZZI_b+_-cL>aUjxR8rJmY9vRW zZvE5p=Q+pydyCT|IuY=B$tLKb7a-^aY31RZD50X*k>DiA6B=S24LTGa04Fx5@bt4od9EW{k<$&(`N<_-ARq118v9jVevX zf=*)`S8#rKU^0KhCPQ3+#=>EG!D=#&++2nOjLE>n%gY3n-F*Y?B zRd*Y7GEK&qe3t^gWSNYU!8cbtgSqrV-eh#-X?lY5nyBQayI|7$)X>$iMyub4qM@Wl zPK4533xYNSi}dLVDF#XOG8r2kWq`wEq|B&JG=<5i%d~|poGvlx@T$b6{xuo4|2IxH zdiU|Ke4F!ju~CO=rwY|p4XV8g)HQ3U>sC<5uAz=!!QXNX3!6zh7S6|=%N{l76HxNQhmgeId-uF=OM960-+2ZU;)r@@c5{yYP+J@Ie=`J)XXUJ$Kx;yAQYImW^?fk&1iCVOU@P zL6Z?tNrKKy#*N6#S~H-1Qg$jIlhF@1%Rsn0P8Re`M!Jj=Q;?Z%G8hiyhTmiyZ0yHMgvrQ??Yi{}Y^4jGCSx&Of$f~193O?XhRLW{YSNrp zaHKwnOvX{t&j)apTjI{pH)i#SW^iT3CX#MV1}3vC0Go{JM-K5fVlrfEI2$}Q_Wazh zX(l7D3YW>~tihWmW8IQxbx-p1WVT3m!&)7`Y+nPX=)$fF;IhKA5}eVlW{4dWmsx9ATnz?HMqi0#{An_FNjwuwlb8nB zL|=?eMzq*Aa=t6}O;BwdpssU5UF(24-U)Tg1L}1T)V2?F(jaJ)F+x5DKTL-C-=#6{ zp;hl&yYE9EH83$5D@wmA8_)SA)BKxZwI|;eErnyX@HQF7DhUoZ8N56<>d{;~iZ%jtb@iO6VGA1Y1!2-r)T)^$??{||?P#ZNSqq_#pn~by`}20l5-v^-CL`hI1c%wsuEz8p<6)l#QA-CxNdxK(<*lhXY`lA8K7_gZP%b5k7y2Ey_iv_fX%bUuE89K2+E)LL%Y;L)W!7+U#ff}8V`0iA6qO3eA z(Frx|LnkEGgR|OuL$&#YYWD@z_5&7>^im z1t=+9zrLCbsb-Sl_98O*icW+)m~s&|y!|3R9!hHSW+=B?%V4RmzXE5%f$c3_0F&suGn$4~@2zJ=Cu)jZCjXP#@_%=`m zWzdP!+Y30tiRBKoDgw`j9i46o^FKes<_S8X2G!`q+B?;6awZ&+WLlHq-t$fD9ym=0 zt4zifx(xF;7oGIC^<)_E&>Dvobi%`is1cVFxN= zV2iCsQBhQEMNw4jR_wqQ6%)IAWB%;KZtU*vzH>eI`)7{VamW4c@xY$@jc2W=&&I8S z18Fgt0}u0Q9|DuaiAlvDp6HOUdk47maLN_`LA6>|fja#w0f*l&$W{eUc$J!v9P;Rk zB>zaKwH2~NI;(jNa)^!`sL z2zX+v3ZL*qibth4!+b$X7{wFkKdqh$`Le;F5}ueACsPmD;7yVytzcL^y_CTd>$7r1 z9_bXZg0M(uK!BQbBAr90$^^xSiQT+-YKbRounkYBE|B#L)doSU4}caU3@uI&TC5PX zcmZf*hS0_hpl1~&A4NJLdVT=U=^6rNuwP(2VFiSELjUug;|Wq6ZoiG#zMXn^MQ{i((9#aq*H4^3Z7;}Iy0_i2(Aimk@8*w=Cwg< zJn^{%BR+VdiD!#{&+x?dsx#g~wSL`!+8v#R4=%K-un#g^+iyMW7usXf0;m?~iBPv? zgJ9E*V|}~A#YvPr80kFkt}m2$!U}Qm1g|IavOYd>bN@6j#S0fV=y<|{9Pq^IlQ|zg z#S=`^U4$N;Z_YXhM<3G$1W)8qfij*5`B-ThZ1?CVlOmDM`l_*c5*+D#S*G9*JP}h( zvUtKji=QXF?BwB}7*E)S6;D{aa?Q85~JYff7c%np9!f4id)qDyT ze}8*OBplN4$&S_V*d_&0;fZ8l^NoYPfq&cfgAq~jXmZCBg>-<5Cnl%o8wZ|vnZ0^R zsMMpJFzwpnB$D9?3ogSGU8)p#_XtlMuifr0tV9a#SvX;=4%{Q1OOM+p*#NUt?_Oge z>>SaTyuhW5M(+BGNaWI?^`zqIYSAL;zi#~-Zr^z_nb zIF%XIa}zE>wTK;p+HGxt8K*rfwG{Ftf*WrUL0!BRgj z2Azi1<^c6mzXqnv@G5f{^c(Q0>3F#6+AkWZBAxfN`*nhz|1U~%LO!P{SDp2_CRzKG zf*H2wWwH`a*nkh7=v^jjOx9m7RHAtuPZX~edJj$tZOAtSJn>e=T6lt2(i>s7ja^9) zWB-+;H<2=t&Y$iY2*VR+Mr8|tGnkt7g|{Zo!sk&R?!K(Vfk8~1QaUY(D`K`hT){FiB_3H_r z)3VYUmb8IWJTY9!26*C54xSF*_$%W-&C z^+zzhY7k&M#UaD>ibaH96psYGtQZteXk3!DjZHv%J_+p^1+?oFsA={;H}HhMUcu@5 zYlhLAR3sbeR+y5y-!2ELQvMByQ+pxTdO!bM{hn8E(*agBWUVTtNW(8d!H&4|#(6SU!OgvqU_ z8c!VRRc#9Eh#YzeiYG>l+!+ANTEGgP;1yYI)@K&Y_xFHl|16uIAGWoF0rp>eRcy}w zi>ab7*YL#PBf}oU2{+H|x(qLQD3AwFgxxN%4R$7FVj0}h?9GDd@aIk)B;kp)O7_DO z!SRSnz!Rhn)`z)DrH`xtdHh0v6Z@|Z`MIIyoUU>44vAphEgs=NuHuR0I(Wnrs>gy^_mj%^Iwh~%=HnbQ`XmMK5Vl|+R*TTUXvw=tT+!iL&vm4k#*KcsSj^VE030`-; zfo1e-2}gD~zxWJ1eOMP8cp}&R6zia-{pQ0p_urGOizmE(>>U6(j3rQz{ny`wMVrBk zq`%aFnfGVng&3Z&i!eMfq)@8Vtbat8qCpBzkOoR+pu_Oi{`>IycLh-5i55P^9N68} znn_4JK|91EsNbR~u=dsdG^MluavxEzJG?t@bp zb!fG!(CXEo)vUlxid%=@6}t+nw$+XrPaGhI1zyuQHq4>1EEsTG55Mq)o@qh5u7!4N zdjU^q`v!H|c^gt$(vSFeL{?V%v&bi96<$a?#-C%lz-jVD%5^Qi-so?Q;M@4Vzh0l49q z3PA8g9=+Ve6Csg(zMjJqv?)D-SNYa?1!iAYm;e`iP#|IPHU<{t{>6&9MYm4cH7S{(Ywg=kyKD04Ds1(Bz(4O_dmAc-C z?{v%`#W|g}`)~}Y_IKdfDE%LvumUqYG5JoV^{m&wd_qD9o}lGyBGhhhAe@-sU#_n3 za+mmi%^{BkIO)O@_5;KIi`&7xtbac)KoTzJbk$2R+J+}0%5D3222aG&peCN+wdh6I z^U#01=)w~@TFu=IW7!7`p7?)3qNC}-Vf^|1MMDSofCc}AY;OgFZLpX9*WNiyF0%h3 zO~ws28N6y<2Ds>^goGzNRH%t3!W;~YCrB5)3i%=3aTF%EL2x{g_CdY~))B!k+RlV( zn-~T4TNwmL%~Sy^`>zj)syBq`8mAss3HoozOcFhw;FKl{{M@r}fh4ffIrnzIPT`3n z6&JjOYNNjit+p9jeIv9QCunsJu(}0J;0eV$vc9R9CzxAt4=~U+NO+=#3ZC(Vo`J%; zdJY2T=vwF`p3w0Sw6BR!DNko1AEx2^V0_z9;|VJS#}j{F*P6tiKPB~d5G=m`&+e{p zum#!Ri6Lr&!4tRA5#@y^Xo1NKmt)H`@bz~U$m59?nrOlkuF9hyLbZZkggQMv2nlPU zS`bgT>o=4A*Q|gg(_lqAu)`DoDY*wvY#mdFEs~Qt<&-gXVW*(k`#j<1^9sts6HHfR zgw>{P?2-UZeY11vx8r!Co(_2N#D?Rku0c)PAA`FBu7~V^F;3sx9|7xFuo|A2@V?k+ z)_0$M@7fy{sHG-0JYg3Ccp`49G+wNEBv`*FY;-i&xU6tNZcP;9iO~w;!xIn7mv{vS zR;eBk4Ueei8z!|2B+lvDQv1bvnd(2_E5(4r(zNyVgCi`s5l<){gtd(cLmL-@ln`;@ zh$r-X2--CwwBy91?7y_FfSD}llXE(zp7yie^f{VI2RzZ_(aMFes$EdyiBxJr#S^4p zbb~oA#+lRt1{6WW8$m-KHzx z`#Vo*BF7UI-yI(fL&6nQjwgQo^JoV%v`WyY5p2IF1&LaCBBLJIvHu#FGix?j<%V0c zq;PWClA*s3;fcAP+zjCf3%17-K6O1$v)-0@w)I>{kef&%0>H ziYHEd+%y;twFlpLf>+_btW!Qo%#jo4bk)<$DhpReWQocL-^EhV3Z7`Mml=5CQ0W1m z9Xyev(w0Y%&;SMm@Wj0ajKJXuQlqxQFN@mFUJ3~lJR1rp`e_1*{ny@sUOizpQiNN> zu7lN3j3;htpaf5N=r;*Zge~{W1gFy~lMu?j-w)skD{{gUX^&RE&N?zUYS3{Q>&lgF zJE2ZvS3nM>^2~-0KD=o?1{P|pL}||Hw){Qc4m!NfX$%wgN?x@xY;rFBkYaFA5xtDW z6H_#>h9_PZ&-Z6Po~WzlG(54c3egLA!v3Q1gcZf%3DpYn=WkUn1U*zU07ols7)I3? zn!htlr}!c0uNVTjPUDEs#uA`CPlWbN0orxNK0ILqv3NpXUs&5e2K+_a(?(dsKFB$z z%c4dHJTc@$jUh1itslb!U?A9BapUW-P+!S+QFPn=iL zEuJ7%qdugxWmE;Y{7o21vv{JO0vhndhP8zgL8UDI*n=km_AGu5)7r*@{n!7Ck)5>@ zF4x}0pMN5CeV79q=Xr3r}QI{WPAig9|)ibyRr5YANu9 z#Z%)6i>bsD7FUHQEVcqq*!U`*urU@qVb59Ff7!DZ>xW3s2ZF7oM=MyLiHW?D0gZ z>m@ct;tA4E7s1jOpG8c8Tt;y)iYG$9GntPk-oZOHq@tv2mF{M6MnUlleK1zVb6FbWA6#-9R^V`tR0#)&Z>dILYzQ$D(o=|-m zv>Fp=apo|iVohNO#hby6iaCMbH0}(mXzU42*7Ik0RnMTHU5D<#6HI?RfVMq?_Av?B z#Gl**XXH~d9iAW!U@FY_3>% zgcS(jiJ2!Won-yx!v&II*?%>@xn&icv_%hJ@dQ&@V_~*lA6o^(uIGO0g_EuupIHw~$=PK)8TWb$L3TveNk7zJF5u_aL?gEtuKj@c;b!z2jU4USi=(=rqry&TJ0J|pgx7Nz=Ady$o|W1Q^8-GIH#Mi zi)Iu&LEGX@_@DhixIREjAfid?K_MC0Jc?3UC@J$9drmjaR^2_5}-1SV1hF(6!43Jkf{a z7ieF@p#AHBcSCO#TLQUc>N*Xo1$7wIX>ku2&kBXvfAxr4zb@;AXOfQdgii`8Ne)j~ z5C)!jk*`Do)y@{{kvhBK-iJqrm{BghL+s74!F zohBTpS}k~3^%^jVVzyy3#cjf+irs=Q6~6&(3>PZ(BQ3ONxzL{Hticm@VSy)fT*q1| zkcVJ-{rbYO)uWFuf#)L>6o@Bczw#IkJGB4QI}mQMSuOm0_qz}q*QXIlaDmGf^t3kHRC z;)eNYX^rX>;fH6FnyVnH9ssQJmQIu+h@Fj zK8^RCj)qIND7cn$I;HWzQoZz20Z*K}vuPeYQA7_e@Wj-&G@0ND(pfvfm39BkYzp74 ziyu`DGIT=FF`nqAi5xsZTSrQ$Pqi4Zy*{*?;Ld*9y+*bgc{P>v$K= z(>4!2U@CemEcD|>>!q+?3pI)13D=AB!y%8L2;RpNq-3>*i>}5RQV%|J*F-Fyum_{; zzdmKomx=XpQj-(H6x#~(WDifI)Hgdk5u~C9JaN88wd2r(7M-0?-!@jjs5g3Gj3?@M z$v+1AZ|FsY7@nY2wH?&yb0b*EiapqWxvAlRbGixhhh>9VpD){$6n3!(>3Cw*wgRu0 zsgEZ*9a(T1h8{h0c{kK_%37Fv%^i_;MjG*1h7rs%fA1rGFQg}jR{;bbv+z+PJvwvvM|CZtjJp+Jt z9RTfE0NU3Bs8@nZVdkXwi%f@|dpz$v0&Y3;o&Xt4~&8FZD1Eq9PCfSAD+lQqFZD5gnt{AVKEa8p0J`!JQ2Q>Np(Cy>)fBkc!J&e zYshAX0dG8!@oG#p60eT45qPSRXp+aRf7Sn*Z6!M-x+?~@%x|; ztYCovc%rXf7T}3XX?x^`3`MU@1v}aoSv>JxMZ9>TVcACaAz^6~&%>$7ys7G9{}reS z8qVod?+m-E<`M2x-4pz$+6P$MiktC-Vjx*t92B%z2x#M>aIeNhpxQsagyRW48-WXS zeFPut7zq~D*GV{#Hppf0FsEkIVG;|d!4o6jmFdNL>Ai2g+CU!Z^Rf?5*ue^(uwr;T z;iu*=Jh3n5)I`uPbHU?37P9~1RsD1L;ie}Qv3R1KCRp)ASlxBI;Q4Plh{F?1Sa3s0ogH!(aB-0wttSj7Uc@I)ykwc&}G)A|&L*+0%*pB?f;@HiRVv1N7EzY930 zBZc`5^zIcIdK=C>cktvHc)N%K)9}R9i=OMCT6yL}eS4Vz%AEaOgE z4QFnGRtFAKS|B5yP(2uHs|kS?7Y;2p6ox2144zYr2+W{yV%T0|MR0?j7l+{qJu`xp zb=?T<*b&3&4)GgBu_~4BKg7HNCIy~*e6C3{HCIU|+Znb?5)T_e~ zNO=k)qU^uig4=X}&nFC>_a7|zJmf+ZIMf2A@x-b*ytu^^@fHtB4qJ9wwd3zxJaJSH zq3{H$BzK_47^iI%@&&H~8s1SyphS+8&VV(38l<-muXU7(jeoWm2t zv_rxZw-dE14YTrZHxKNxFf&g9@Wf9A*5e7^!Zkk5!4tIDJ%HNnUw}6U=p_K2xL)6F zGYl-#to>pbIfoiq7)y0>u$~nh;0eXcv%a5-m|0k`k0xI5ggwl~6B<8fZDVNAo}Ub^i`N~4;2Uq9P~wR-f37uvqvEST1y7J3 zTLh*(o^Es&*fwwWy@}!45Iy|I6OW29%8Vzf=_MYX;8XV`ycDzc4HwK}g*$lSpl_YI zthdlEITrrp6fPK6w?Pp+QBf18cp`jEm#Q$=@5xI`K)uSy0e9_DK@*=d%V(*f^PGU7uyH>em&Q9J>2heec1vSf9JjEiLkL1df|z_@9TAC{p8a3 zvCUzzl4=mZ6E=v3C*G$lk(YJSMwtTAz~-BC5uwBWE1CWR*?$G90FHCIv*jCHgd+>9 zDHBgju6J-VOk;zKc%n}0lG9jQ{UEd&B4~94&|-<9#S=n{DS{SP05@xF5&qEl!gS8* z^o$Ws)pG`TUDp~grxi@%34P6BZU4CNU!_NfM?p=`1VJ9()8KEg!%WySzQVC zHlefsB26JH>v+*wnMC89u3Wy!ze4duSka>|;p1-_q{kDa>z#rFch%w(6;GsXv}QFV z#GfyKc)|*7@dRn>{aC-8*?USyNV(s!CUCd~FR=gGGKrf5_FuGb<%F$!EnJ%du0E#? z1D+_N!ecx!bw|^?a4c=iXQ6Jb_Q8x6)PW}wUGrGTdSkb{y(htMC!f-whbL@P9}X-V%5J-JQxhao8yG=?XF zl*EE3E+igM6t*vxW=mGMf!D=J;MX^K_?5#G^>w0%CpMIx9SyG}u5|Vkv}se=^>hQT zHE_FI^MUi=p9yWZj)S%ALIqEdKGccztyKg4n!>#CM$M@Pdv#K?7M?h&AVWMs8f{8g zf6VehG2pz1>$bg{geR)#0uE0s+neVc>=)x`>;3Q`pW+)}BInBag|MjwU*d^jPpS-N z{rvWu!QEg|=5Cw|7uSC(~(mdV@ZgDrQbXRC)Nc;yiXz8#>TR6KFLc(q4x zbQvZ7v;Ue?W#=K7-Y)n#r)&CO{-vzftJWNTQN1bjQq38hsJatqvFFg@Poc%2L5o9y zN(D;@Z9HlMp3pOC7_H}0FpmW>b55t@Q`V8%M!{J6IED4>0TG^vZ%L$%T7%m0=lXWl z2r?Xc)e9a7QE)e&c$|tCHF$y+*`!dRQNPEt|B9&xXY9Y)xfi+xha9ZX@iaV^y~d*5 zFgdTU)<9niddCwL+jx&>P07@#{;=%to9N$kH!XNUvJM4B^2HnQH*_j2cO`18^& zlECpq$;USa!)Y^AB!MSLZ})|{8vPmL4SQ^k%ZpY#kxUPu*?;v+S1cW@do~**Qh0)0 z&*!mtVsf$QN6^iRNAN_Q%0%tpiM8HLZsQ4V!Ir|t_Fx`Qs1BF)lY9Z)dP1wmffkbw zEiM-(Q*0h=q4*rQTx0a`wZ`c}@PwY#!;yMk2kn|2+HpHnYRXDz`h_3;?u{PCMSa^a~g+F8P#IAx9U&HHZ zOA+yiCv1QVPh6?yzK6A1_SQn3MufrI_Wu}9G}Z|q`>!p5jXT2vw66QWKHN@Mhx^WH z;15p}4K1A;HkvxGXDYbh^^(;wp$+Wp^o)`z>P2@6l0I(2j-)bwgN zTsl6w%oOBC+_VCkBg=;WNvKG^UCX-2hKr|zi6cRX<<$<+LCbuN7~!4so2P>d%? zxBW5-PgGWN8J<{DX5D3&(L{(RtjH5j>~H9^j6eU56{f?gs!xVfRHF#5sZI&zp#8Ew z3{bo>+@Y97XmLx>Vi%x|Uyj5R8pDA09245J3~1LgFs_biU_<+&%{iU^wXuE_^t5?j zSmeUn>FwcwV&6_RhKHCcuL2XljnBydo~WOqUv{`;Lk3maI4=@wV}>WJSQ<~9F5!Ed z^$9mms*%}$O{~hVCi^c7MB$vSR+EbJS-)S^s{aJ&8BYy4c%qXw@_6E?ipcQ%}o~WV#9XzpYaiv&Lt+XG8;|Wgh@5AhN@WcMgitF*ju#>Ge@#lYTUm(#4 zPw<*+3Y@V}flGMe=L@gykYT!kEn%BO}uBRrs8&8zUGB+N4 zFelIXFT>b>SwI)(bWKaMCBzfkEAj#rPo%E7eH(0Q2g`WkVl$o=;0e`jL#y3{R=)+U zh65@Mz9O_(PH6F5@SS2hU^$KJ4&|JVcCZ)lte)?}^m@hv+gSi0p3t!#Yx{Z+b*mNv zC+5|~6`lxr!_7FJc>KlxKiH+(-}zObURf50zhf#elKoe^^fi*h=?Ak9|2qUvWG}!~ z1fKZ+MW@sAu7_I`>&S{#+V6$27S-lSE1vk>_{w~!6qbqb{+{+V2f~7xx-%M$Ck83$ z1W(-1#W?#fQaMY*CiA9r$O9LBogJPUKJ(Fu9iFg2T0B8Z!-K(iqOTHt@xbZ1>on&dU%5; zUS;A544$Z?2~0e(w$PF%FiS%B8&@D<=8RI|i4)c9Y==Md>6-+e80WKZ2DEy1Xf>@c zx9ZwpplVy7tNjR~o$-VPq~i(2xv`$3SQmItt~fp139Fj(FRX+Te0$Ee>`z&!`%l^sbv=-k2e|} zg#Vr%V={~VSIu*W7sJ^rHJE@WNUo|!sbJ(5kby5-7OVJ;R(;CO=iN< z3;d>xf+JMx3s0%u4_eI+w77q`y8pPfMWDt1L5l%`76%ZFCo~oaGif{kcC8^EeMK7dp7H3D8EO|T!#@%E)pM;K85)3hdV$A(`d0OE zvJ_9aW!>eXf%=x&4C?7y-_RQS|~bGl(lCczVT zwr{!!{p-{DR6OxB%6AF$Y^f7AJhA)EnPE_=E`cz^Kqc_viR)kc*M%F({M+ma zzs}JYRQ6w1u*?3dsa}$CPPaYB>~FpCL~1uG7x9DzL*NNoAC9s9!*9n9NZHQT2sq=N zHZ*vmfhH#LgleFn)j>k5g@RTO0UIbL8ipw@5m@gyu%IG5aW^wn z-*}>;njZ1QqQX1x!ghARh9^kh-Ou{Vo*G zBMZW3Ym@EH2sQPd01oMzz0mhSJaHmFp9pv&fAK}vpzk;jp32~fCkk4`6V+>buYeva z8jqRw?R7zjCsZE_{Z%6d*QrhfepakFw0KcyF=No;Mta~0jU7W9KZ5oQ z8QOCsSVPy6FjU8r@TRsYFt&_CuJ=qb;|Y6!fG7IJELMv3oGS^rTEi2i zQY}jfHGLEV_O;+&JkhuiPqgvG)>0()vHwa@;lO?vP8!7q`1D*oM*Z+MT$?MelUb52Kl*;ZJQUEWeS{>Y_+q3~iZJ&3~-qaTqZf+rrl>fRda)~_D? zvE=ui^01l((c_6WIuXMY`_oQL2=xl|dpGu9_JET8*R7)N*ICCXUpDYKth2z2h$%e5 zRNxADw}oDQ;fcr=jmJQ%nTPxOs~HMU*n?XGJ7NT`_l26)^@iTgFn-n9e`Qm`0OxeWriG@1`R~j<85j1pfgwDxaJA>- z&UoV2W_HSWqGjZU!*KrYgHN_XrTH#{MFw7MJ{>arHhlybYSAZ|K$0iC5PuO1!p0Hv!JaI9L?~hJ+f>Y7w&~JK?GuPp&cN$2<6Ada=+yy;1 z)ufscPb5_{GM?z6UnD$XMS$$T3UzJSp7lo66vA(+D}q&QfE7o+Ta15YG#RXYNCG(2=0oOJfY&Smfl=@!#rHY>iy6R+<3_hP-R&WrhN;P15` zXiUWu7TAI(y2h$en054tL{y04iTtTuiC|AVXuuPs-@j;wC-_g@fb~|ma}>hz zyWoTNI>EvdhwImz1N*US41vzbHYD8Q2|Jj=6RNdjZS_{rYA&F~T|V~hcN>Jhy=hB7Ep*MXelhmTBkV$pxd*_`_scSb96&QYGXY>*HG?x+q@Wklj^_IiI56+F90rlFOziKC$UBu#vf6v(2 z;)yozyETBX_kUkr5o-FkFdQ{h0jTW1Zl!FH7^W?siKkz9VnMEhFW}lAy12&^ElQO< z2`fgHXM_+>q*ucWp6Fli&K#K80(0?1>DEM1;R)5BL#siBR)+?s(H2tz-cUR`%%zxA z*h6t?et1H$DKJJTPjZR6Jo15AlTK&!jN>uWa3dTEUOQdQ+vtIo+K>56i)Eq;|W(3kxUljTcY+ znmIK-?AUVQ@vklM#BM!Q#S^qRU4{C#dlXK&zHi-jc&*H_N6R5YZQShQ30i$e!JXWG z1i^pXpVIumIooJ+xzRhbKzv#s^Q#7&yoi7XC1Dn;TS$ zO$NxN9|d}NBKd;W-Vw?tr@dT}hR75yB9ZCWT72o;Ghy7P<36A|& zdlhtYPItJt|0y_0uLaMi_fOu}n=lr&BxwoTo8O_<(e&eXx)f0OJWg-(YRmIM9xBpwfoBLHpMW zpEdq4q82Q%^+#kGIK(zw?7wKANy|C~mW~5k7R^k>J)W4Fo3B`S;lKe5tn{oWjc9nHrh;+Uf2|x*yCBROcf#n5 zunSWi3E2~OctUX=(8hY9jrTxJTWx^$+y~mVAKaqjKloGI09c*$ zjTUfPJOx4GiB5V6g(r^1n3xat$diyOWjsL|V;mUcQAYRA4e>}3TRO~4Z| zO5HmImCnBv>YrjM+@Gx;5f|*ghN}^rb2_{5#uK!)wPyW{q|l<>8=~O18oi zyA?ExCur|Z2zAT(y#b!MzU1gL_^OOUQ@EZD|^ ziSb0A=q7zwf4ul`N;_DADab}}+;lyt!4vO(l`RGdx235NPi#uEE-6$h&hPqoqDNLn zV(~;&UY}cVN+C_$v;Ue@=EQE8(;i@PPFK5DxiHo{*EH-i9{!83og<#;;!i|B`w7*! zL#uOzR_g|>-UV9BJ5-BeOlYxh_3(t^U*Kbnfy1H}l+QWch<(jBvOcWmVK9lViD5H) z;E5-+ZDeiwfO?JY4Ton^Q!t(wq+$g;aWg(Y(Rjim1yL+`g6ZVXb=iM?)q`O6U(MVq zUWQ|LmLSp>Po(kOycK37t!gRkU_~5wqGS`Qq430vRZpP&*98ht7tI86LmJ9Jr48PzyY41-E<}E zJzY-@oDJigyuc(bp2&amWgi$ePDMX>;>ioY#!#<TRWX6yctUYOaFSvJpp6eg8zX>f znOX$xSpl@`1!%_%(7tZKTeJ?>hIzT2@qoRG{@s-y?w+b&bUa~2g?OS~dMeED1h4fT z!v~29T)7M>yJNr>Pn`0oxeYo6s_<0|PcXeT9X2sB;E9?lwq*acvOQON?7!l653di0 zcGQF(o;ad`Y&?-Wq*i9wa`Y4$yz#_?*}H$##1o`DK8GGwgo-ErZR~i0byOQAQQ?UL z2d=GzO8cJ!^|ulNzudY$sxR~^uNxK4=@#gVC!V1FtqRP_F1a}D5*c$zcDOZtBC2!o zM1KW7;0fBm-$31(-i9}47ut6QQp(6i1y5MfGM?C0y~}*ou~OAvIsw+}?ZZf8mxm=8wn4nJ_=fm1hhD57~VZ>*@xP4**n`{XA7*t6BWD}VZal-W*7;p|7t-(4W4MJgH}ATyBkp$ zcp_t;9u;AafrD2ThP$qh=A;!*Sil*cm^-V{&#HLh%R-Wv@dVS(H=vsx%yUkcdZ)XK z_5MEl16RTLmyYqG5KoYP6#^GdS0Emqcz2h^F+9=m*`)vApiS?NRDp!na*=~40%MfP z0h>o9U~(2u6iT_~Zx!}mlQQz;k^PqiC~{86w}>d#r`MF^8z7!YP@d6QJYg4qc!IXn ziL5{7Z5lKXRv7C?1RI`s-0@*Ec%hmCH}QmOMxoV>L8~2sKNLR>t0{)GGUs$7mh^rA zuPc@W=G1sH>}~uV=*?%=l z!l(`BbUV{b|LTP&(qujL1QxZ2D0t#>5h7dgM9DJ2+aYDlB(&m*4>h08fNHH81@-Md z2)ZZtpV1Z$@2QtYc;c)cF0ucj#kdG;&23K>xcb$^O^M-$Iy0aBtb`{lFdR=LjPSk5 z`aG}yPQr{Qx1VuAhI)DEh9|}yrEwciJc;T*7HS$S7*1Ys=XnQsHMRog*?)CVauoZo z!(V5WfICPB$pQb4)Wb+TaX-1&zlwOmOE(~RVsQ?l0`bJ(0xzRrkQEZ(iGAh#*0ZKG zoXQD2F{IA9i7+f$4{7m4Ilc5{|24k@)urseR7VdFsg@QdwgL-0p_&@jOB7cRUnsV= z0-msk*LXrPHmq%&9okqMwCC;6p1Hwyy)LvF20eA`4MVj3h3BL}nBmQbs-CcYy`Mwe z;0C5NGr+Hj^a24-SV0b+IF;G|X?Z+RKn*2$g4CX)u&WJr;E9?Qt4FY=+v%5#3t}~di?|A z2`g;F6W9Lm0uWE|T0RAQJ3HC6f93Fm4I1K!CfU93vX0u8pNd`fUrbN$gYE1WgmbzJ zD)_?_#cFq&1ieBVb5w{Y-uhne3NP2!U@D&27{E6+JfRw6xV8I`y?LS48bPZ!fEIJ? zfhQDq2=jQaym1ls{Qn@c6R9ys*0D4W0qf~mB%G_~5%9jQNuW-t{h)nqg7()36WHK8 zp74)ZFC%NcT1o()W=nP8TUqvB_Jxi8mle)(PFJB&w`2Tya;8{zK;K{GZ$-d}mI_M1 z6T9ox9}UZ9^cmM1D%HRra#+k4d^}+V#gR_ix&290#S>qKM`VRcxk~~oS+EBCuhd}; zUX|gTu8&>@;fYIY4xWOYZ9|ABrmN5zPrN(SeI6uqX2m!-ZPTSY{h(T~IzjCgnnJ>8 zCsc#G3Vl9Q62`Ct1omH6fX@D_wm!)@r(2VjBW*m9AltpWu&)L8;ECf!8}DZwpVx#N zVB@h~M;1c9yl~)zC#vbj0#8J=V8j+r#A>&?1>{nLL~}f0K~L=E zGIl_TClrtAjwck81=IMcxerfhY!=%1476vo(4NykyHI%qDB$+U%c{d1oyq_K}0Z~unRLhv2K`WHr5LgYBB~-F!lMnB%U}q_sJ_b z(1I%Q#JJVXPqR+)bTj{k@kEWtQ)}ST6}n)>6S0*5!~Uzo#o+#M#NnG8JHb<=!ZwAe zE!Y%K-2cc)CZ6#6H6s`NusHUalu#`pF`+(9-`?4?!jwiC@-Fyyq7*gcRr)%M`>in9sCc`P;8_?**IbCx-;J_2Ewp3H#30_-x!yT$ghksR<3avH`T73$% z81>?KLUF3lV%4Cy*)@Em=U1?Zu3_N-9mm2$+Lpn@_CO3z1bnSr zi1m_Fe`y-P69wXLPY9LP{Jj{SuwZsPQ8P!I>#S3*D!_|*_Fr*J5M|B&i}s$C@IBvh zW<$^1b%u!%B*?J5LOI+Z8Mawc6h=bpyG+FQ>*{fo&+tYCS0u?`SPWNM%|5{j!shBW0Bl5(h@$go9Jy^yQ1N4#y zPh7h{%m*qZp*oB`=L1bYc*2T8@I;eXL|@{GZHX4fgi6hOUxfXaJ#c6Lbs;wuDtMxJ z;SmR5(@=LBt?>jY>f!KteSPxciH-I7QNR;PnuQ0z6t#X=X%ht?V%mtL)*qfO{-Oa zzp{O~PUN~%(*~~Cf8B{&ClTxD3Yr+l6Qq|shdu2-$bC*r6`kRUJ;l20f_&Js^T87X zE3*Z`6W2AMhbPJ^84*v+^$lqc4}59IRW_cmA1wA?R*c8~E46O;Ij8G0W?3>=;?m^k zKLzoG4RqoOP6ckWPX2zy*fY?#;l=}dV8kYU5a9{h&*wwk5>J4mqRuTJ0M8Us(=DE` z0burDFQ4&mg#8z!4UFT7 zYNa^(#uE|cCoF=~VkwyzPqfn)9Xw%0t?a*YwC>T8wQEGDm9=3^Qf571T?-h%6RKro zeNXjF&`mWB1@MG@F~$>$ZDeinP0(T-ppA1vwNTE0_Pi4g)-w-yRM$N)nQf%-gcU*K z30`j$=FeZ3{JlCeEHg6>TV*`)!2(R2(~Z(Ld66Ga@S6Vyq&%4?7kHwlHr{yRtct_& zL=mr`IdDAF-68PetA-Ez!ps(UgD2Mc^THiZB-qUT}#c;CO!)Q~c-Q?cMcI|#-T(HVH^izj$hbpcZH zO*0SsukR(EZi26xD}W78xT?083P+@?J7Xw3)lU;kS9ToElH!1E5epl=Vtg7)}I7MSX@S2_j!yFdyh$nPC$l8tx zp=}qSTDpor?PjvT+cov_6;G^6%!nELuefPmzJPmaZN3TPa=UdBHq2dws3JTuy7akK z@X-TZWaEh{n()RGymkzRhyFF&)&VAN+xFFekVgsx$l{5t+Nt0Prr&bFQnyE*PY#FM z!w2?X3uaV#n~QV0pYsRbfqtZ+M8Q>&>t64L@6+o>9#0I|+hzd_xprjUM5uJkfiQzT zl))39Z&z*3dP9>ZLux`w5O$P?YD>riC-YO4241}o&p$TIUR=$zcp^0Yr3Y~PTRp78 z6Pz*}gtaynAGR6JNTP%lJkh-hRV#SH0?qLRx6VCS@1EFlK`R*hMSD&P@q|6ZWB;YP zch(P8`w9!I{tfn54NML^p*VP$C}dIltFWo!;h@FDKpPi_HZ}(B`8ZT4XArdOWN63A zaHY1F@SQXR%aK}}1&;ZphrW2CWg_oi+401lRD6TM6B#q_xe3)`auV97J@hK;PQ@Rd zm|J1-TzL6Q_3LAyS}prQo&I%%+fuh-tHS=PPv^Z=Va-cDN%F@NB~-|QCwL8#0_J%? ze#yUVc%tF-8*gFcCJhqciDb*_oQ0YW*ar!Tp|KKA6x#D;0W4?*K6v8g=`Mp779seAX7nUGBEDanoHZCU!c;c}NpYTNWblo08--v7^ zjN*w{`Kgx16YVspgeMM_t-l10%29dTG#E8PFJ(BVyVr;#ay(%LVR&LuJDPOx#P4nq zp0JW%AD&v`3DpEcs|$oy8=BOU?dE zsebV3D}CT|PG^Occw${Oo@U^Qg!NYUgULvFr^(J~VT0CqB7Y}FeDK7$z{w>ck7$qP zgd=O{3j+HIc1JN_nmD1o-etlQ9pe5OS%@KQW%L4J)45 zs={qNkwS?mcp_*J5rud{^^)+2YNj%<|5DuqY_8a8xJ>br@ReeyU}-C8#}gV$Wo_dr z(4MJ6wX?T_c5Mai_zK$BSZF`a@IuFb6_UbCylVcP9#7;>vH2C;G&;lcX!!ksf~fFB z6*orF@B~w?YaoXVG`ZsmJ3z$~2kP*R15adaGN2RuOX^Wm=zY5biDY=9yakszcNPS< z%EdbW&!MwZ!rs1P&&GgzBX!`8Co;_Sx(6E$SUm6?oPTW<$@_SMR+J4;_6UcB82U|y zhnk$6GZ-e`et{R{c)~7d@C2uc-mG6ypoD z@x;c|BqiX9Bw2_+z!Tkdp@%2V6t21zYT95ajKKc09|4zq`hWx%UCP zOTjS>^|BOCY*G+7o=6tbF(yPC9JLW%Atf*z zW?OsU(`4Ayg5&W-m-C$hSpPnLeX%dBNou?|oIX|$9`VHE_qFrGJk^yHh$kXq68VZJ zVkP?WIVGO3q5(W{C{vfqtoahbjW_$R5ruAUg@x>aEa!CGzD;NCEUHcgHJk+ z;pg+UHC(h;#T0lVlO{Xx#NeJBrQ-?J)I`wx%i8v^?;E7szij#tw6li`W`3zZ<|JoQ>}?*J@r17UdL z?~cZcSZiu_3QV^D7&l>f!u~<<#1Iv+;fd(GB<14?Qj|O(vX*26JdvU) zPlxeDkl*q8aO!z|P_qBxbh0qaHLV{zbk6BicMNx__Am*aumNQ}p&A6%vlWL7Efx`4 zJQB2+1Zd-u(8ea9J)ea3i~>HYS?jr614HewTWjwB*GK4;XZ)6HMjt$d|uw)f!CVoB`BWQzWw|ylJJDLlKt?+>T*OSu>T@;a3pNjxz4LzaOp7x zIN^yrx}nAsAsyycgu@?oKVKN0tg3@YJfV7QXf>G$@Pz-=?JuC!WUZFb9hrwk!CR@7tjqqZZ($<3IH$8fK|E2SV!Mf~|7;dS7ch{spULAA%bLEW-vfRw{> zbA=~z#M|>VF8i+$$v!=Sl`Y_wb2?sKA7y=IQU1l-VYWZTt}lmO{q!&cPwcJC3vE2X z6mAf#Ik@rOwvfk!G&tf34+SFQiLd}ZD)Gd(K1;Gdt5b)u?I92QFV(BX;hau2EAWBh z)?p#VuEKs6pp7RK!@}Cev7wD+L3^GJ?U@#|>sn~Xw$Qe3FogxKv;V3av)jMeoYSpK zNV5!{NSNx@9q3^X1@XkmT=n;{j>=zX+8^Td<{Et?GXX+`54^LRZ5T0O4DGBSf0o3ruz!R$DgI3D} zEuJ4*OfR&!K4`H$(8l+njq$% zoY@Cb^tt=b<=oAxgbF7Q*-oJwqqK#y_ia(&cg%`sxS9(nS+Men_8x`{Qz|+90^gnc|&>D@>PjZFQDe$6!v{CU(H?_65e} z>^!CdR+sZHPo)8)VeOEbTYAG;j~b9f?{e;NO4A7DU*5Kr7i8FFc2T(3Kj>^$7}vh= zx*V%*{_S$Cz7blD6D+Da2RP7zCS1;8#XGW2qL?SxOmPozsm4CxOO1a(P4zZ~_8bJ- zwGg!9A!uI{p;De=Kt4=)I_GlA+lJcZjJ>2naF=twM2;c*VMbDaH^2_>i@#Y2H#Ss| zjm!DAsR~UnE{DfgM0vR!wZOE1vZXi7ZUyo#hoLMcnq1EImwk7pg=z(j1HCQy$mPsT zFxCIjPnUDMi+(d*PQDY1E**kFc3|gn_Ke*`a*xZ2^JLesP}rclvuijEi#YKv5K`_! zP?pQlbVWVb|Iqyf<>A2`FD@5^iR^&a<@ntDQ6nMiB~06Y|KW08ApK{s)SpxzuEAjz ztmbk~?9JU_C+n1%3x}_Otp=-!&E>4TsS5#@^UkA2tv;|^SpAXh;FxbdyBoo?%`{Q$ za?)E6pUY{VwpYh&tTzM?Sdby=$Pwf1le^yzZuG4=HRo6C8SUy}|lr_lIx zH_yR-c0uiOoEmCEbva7G2!~DLcxobufH(Si!I^r(`ZAdbpgSq#}C5&|MORuqyM%?knk&lgk4V5knnDYVY*u@mT!e> zO%0Y(JDNtE&AQ&S@+-%{ zxo@hGsO56**V6+#ms4;<(?*S9FzGav;emiohl{}krvteeayblRyC;L;6NU%=`RsD6 z9u`_n9JIO^XtD9o;$xvN?G<4#LUA(ijmFAhS&f&$QF>+$&*-@sOluE#T~1paKeM)N zC^Q{GwcEe{1;67xtPgSeS$-FQt|52CI`DfmT8{rmTJ@|GxKY0~C1y;}C#gUWC znKq!-@c?+^TEl<7FqajrxSSqy{CSz-a&~?0x-LJA(X{uYbdb;h1_ba#s?k1QKH>>d zqaMQo7iXTh4Eq*e7~=@sAF5&=Jn?RQpJlKyDZ^>G*E&kdgwO^Pn@|L zS|3tAc(MYNeG9|pR^)^yyubBL#QN3he;a;$z!UKkJbeyF+5nQvIejccixaHV;kcM}H?@Zs{Pi*tPuRd3p2*(Ow>axf!_}OI zC+-9jz2I`H*wSq9G>V;r;)eOL$iW`Ri25xRSA6onnv={T*^m2pXK8KmX8W;P!a1 z{E3mTzr4j0`805kCzztT0y93DKko=6ob|#sxG_Rs6!AnXoh0E2QZ+_GN?UgHf>(1W zX%lYt}kbs3J8i!nY1FePX-{w*4JHVKlZQiM2$p@6ypifPcOi(aWY?bAeT`bjN*yIg_z98 z6S>?+PlYpR!x##0@u|@r=CwdFJh8-w9VVXm+j>bk7`sj98wFr}J4nY9Sq9XJ&-%fT z5o5l-#1ps1?|TCKc~1Xw1?pA7QJC<@(k|N}Vb@ES!^N(xG_AOt=jn9uf+u)o9t4M8 zJsr{(9(TXIzX41!`xX;Jc)|h?@dQ)HSy;c_`k6*yJdyHG^v@S~B1k{^c;bB0`Zu9c zs7}Im)3T9_<8s!&$@hH~{8CQ=nRsGD*?_TdV&ckFYvG9io$%rbyV%7OZoUnwvfetO z9SP8Q;#oJoBH#&Zo*ag*QlKiHP+d7Be2tfkE~lsJ%V4BxOkga8>Xaus%_J?bdj!nf@0@MjVQ!sCe^TY_f7X=ftW zj)H0v4uZOM@rRTOHf;!Zc}GvJ1Y@juc)SSYhl-OQmoulc3Itrvy<@+6|9awb-0~_J z7EgpEd3+P@f24=6ctTTIu<`P|p{pT}Q1~i~C;ZFA90!Y8;RK$@t_CDLF}xvHqIlwN z^Cwkdb9*T5a+Zg8ZJv|$Yf>9iz%s1{o%;6}PpIA=o>t8*OfzU^@LAYKwKve>@1e!u zLW{$L7K;OIJRaJZ9JJ^1aI>Dx!5_Llht+h94ySS(8V6pNRv+Ps&GBbFgx!;+h`I=O z24;wR2?gpE#g zV5AdIx4Z!Tb(w1ffg#A~reo|dd4*LMa6IS4e zCuTMyN(4`QXtT2<^lsecZB96Iiw2MJMDl?|(&C9;I+4W_szruYj|i^56$;~tB_1P(vp)B?^6o&Gp^cK{@Pq|n;E60PJC>0q>u>tG&zZNG&l^y>>F2P7qG5l>i9 zAf70bt;bf@b7=)w3iY=a3Jcl=7oOPe)u<=y1F5_xwuWkns|U54E)T%;LeMe$ukgBj z<#jnRY3ryC>+-2q3eMT12Re8nV<1VJF_-z!R!nhgQD|t%eO+9SgKr zc4+ae&|=!)QN^{uWE$IsEi}Fbm-7nV1HRUCE?7p_x^Se9ccE?buHy-&q94OHg_F#< z4A)FfLz5Vuc$tM?5jw4QCk|rMwzd^s0laNh>d|A*p1yDyF0ME3%k1$6BQF%w}JY@ZozI*LB+)GxN|-C`)7{V zamW4cIl`X%jb|-9@$GNiw@}k54`4G_GPY)T!aePt!|?UsEU&k~;x@p5CrB%p#`^q% z(o2THR39sac7<&l){fr{ZrY{dAUr{OT`^d;pYPu6kZ_+jDPd><4ZPrq*`wNhxPd1~ zGk*-Nt`~k+Z6B;`MN@b}G5)M?(QY*hW>Ksk>}dm1ctT_TtZm#6+OvOX&;Ou31AulN z0PR@dI-bzi0~p5!>NuyXn5yGR*2~vq@ZSR?{$}TCDW0$&1Uz9yc6cJA&zOGvd7@F( z7*WO(_v>=AfhWpn025D;B9b2#{n3@EJ3P^%-;IRu+yQ-Xu>Z2+L(b_)mAu1xBjMC% z;rn9CKe%8S8`#AYpSIBOhbL$mm<08=F$i`t(cp>xD$2wYq1TyI#}l;96@uEGd%~M< zHQ>$utL~T1f3I>*7xaf67oMPn`~m#KZS5sk!-`e$L>|uxTUpvDK|za!fHocqqctW1OVj?58&1@-5qMeG zN6^EHzVU>u2m7z+CLum>UcI(I^22+)s?P|$lJun_7Ekon1S_7nIOgF?7|Rag@B~xV=U5Z= zKkWc~TvOk~@WkfLKNrKn7J!8(x+(gua(rr5S~~%ps^byd~(*uOL(H` zgws#p&wVrghC!y7Jdsn)*LZ@qtp2bCyNdR3 zT~$3)z!U2mH!lwfL*YmkPtcy65$cvHF-&a%!FXcaXrA`riSWtXM6mxVKj-;5=wlCC zIH&uwnxt|((Pq>9B{0L0ofjsW<0~slF%-Z-3K6 zC_F(bNpjfB^>M+!^LWDj*Tr`*#t=8E57~cN06FJ$q*NYZ{b)hPUE5&pk6thR;Xr#h zhbMLwXNQC*Xf5at^|#v``d_KXQvf_sK!NpmVs`uCIiOnXQbXg3>9D>%RtikD|?F|*L(=AgySKpQ`YHiic6IXbjwX)wJNVzB?x zG4)x_>9k#i-=!^B*&cG^3DSc0vA&ft3s(ntVw6rO@x=W?2`9jPWmKSoCze;@2`ZlW zQEPvFxS&O&cje)O1A6$+{>#IcQD*jEL-i7mb2>hCf1SY-#YZK24eMLs4xaclYxH^6 z5o(u&I)&Q=DWhUg1W)wW#3`N#bNLT}O}(A#ouOW3G=VSQs-TJeS6zK`;+!t%@qw)H zT%wonlf#rYScE4o{OA;Y8c*bjwek^sKP}8@Nny1@NiH7GZvkFTkOC z#t1_ezqu11+O@_>JYfZsctT%uSld4?EHW_7*L_gaGaDd}?-{vg|25A$U;=C%UGm-l z7+6n2#}lL}5Z&mMPNGRPJkh)5v4ZgO#g5-HK@S_G#}hLK_V|4QPrMw-Cn}z(Ir08I zNQggQ0P#dTB`)C!($+V_%x5+@OJVmM+rLkNdnPG(0Z&96<>mlS(7x3K&SRHS1>TFP z4FjIA!ecxU@?vTV)@oyp0d;E?eH>3%PzRpyNznTW>&Gio1RjO?ey1bqiT#&tFgd3? ztb%Mjk-q5kk+AWIvP6dCi91!81jiF473_j1mNw~A68e2@L-ib3r?uYesCV-2?|&Jup^bG%VoXz>=% z#$2I|yFh#P3hns|v}-U2Pv|%dR|Oi7s3No6*Pt? zHk2TV1y8tD*xC^;?o=b90o3c_iZD;s7W~TLiE$ltqUanA?|wE3j8|bmj6cWNf2~$9 z9s938;|Jb{&)dw{b^#VTvLNyh9BCISc!KnyWvr9l+ctM9q%8H^P`GZ{5t_B|#5V;Q z;tA4dtHN=vn?Xh41@}kKvcc4L0muI9#=GV*S#P18MS%c%qJO^w@t{P%8Vc zgq??`VeRUn#D6?-esI+1BY46t`0>Ql$*r!lexzD+X!WMhYR;h5oj{8{hZcVdEd~un zj@N?__Fo!{h9fi{1yAakG)$uBQn0xNG2;mxp9bRzZKI%loI)Of@_-0Wlu;5Xo}e{o z5!APFvQ8o>ns5Ag+?Y z@kAGo#5>^eQ!0|c6QsA#g3Trt;%N)}ucxJW(aJepB|U(~69Kh4)q-PUsPPU@uc)|uO@Ps|9#}oFv4o}!MJD#xPc06I*ZaiW7#S`;V2D=Wh z|B6okIS?MMr-2+iL5k)iST9MjHG|-?-sSFef=@42Wi%g8SP>SUpjDv|YeM*rc*2CW zx)Sk-Cv1QVPsAJ6?X3$>(6aXc>NMga9R2_Q$IjVFDo(=_k!vR{hplN{p9TZDogN0G zV`|_JPjo!dy&0Ssav`7^yzF`XUNNZG%3iRe746{(pEr|ZvHr61Gfi0RzkdJz_887+ ztpQQa=?*99>A=kC(=f`1Cq`(Z6HnaH2OFLs&1e*?zO*EfPND!4o!6 zj3-jJBw8F#3{r9#p19uQVO&_(M9BVYzKT3Kr+YtP+6|ZwE1ZNwRG$nT)hNOQeU;FU zCseBdEnXQ~%p$b7C1|k=(8e#JjbXr67FfXkOV2X)a!#k~8CXikG;jh_1n1x-{k6d~ z8`90(2pLj3wHR*gl$R({Ji%1?U|2q@P6qJAxGI|)!E51lsIWyR9$zy5Td zm5e|C)us>C$avz&5PmiBLj0#990;1ZrFn288{JTW^*&}_KwO#x2k@dVR7yLZ>%gHr=_u#6{StDz20sBRlt?IyJPEoe0y zP-*b};T*+s!aIuRg4ygM0#9gMm$ge{J1|Bjp6|lidd9O8Pv|-i+OZzAulLY?&Eb(2 zy12p<2eWW9jwd|wESd~g3@uEBH|KP`vg{1KEie*KEUG=cGV7C{8tpC&lQeG4RRo@} zi%vX|qIa8rJMcvR!HeI);$fqB(uya%C&#-CDUafx1W&wMJYpMcS9kRuf4DhlBS|Nm z(r&+*~%6$-q@6F-NIehv$?(l-hAUx%hepMob;&khr- zrWH0*T^n4h+7|dq@$Imf1*GE%#ksMzSQlvH-O$Fopwe;^LwokM4NvI$7f#kOFbvgp z5T;Xm3iQP?o8b1|YL3Jc7xfSnPvk4qc?g_2qtvR-P^XTKp=T{6Am9lrV89dcT8+=j z`cKzRjPTh_%+u*vW66z*^hsb#U@%fs&{e%iu0 zU3yJs;fWD3zg~rB?`SXqPmp503$|XGK41+D{F;qV7(CH5U#c;Xum?u|@I-1Q5a9{F z{nddU*Z=!g26nVT7WQBB+xAGu`YSEB@nJ=71HNs>6FY|zL5?SqDrp-}^qo58H0*wP zuCovB$xp2>w0b{iH9yee{-MSGLW}={76SwiDGmU-X)F-d)p!70N_xcaO?X1j1zC+lCk9+6CfCz8K-5*uoYk1re! zkKrgx#S;Z%%)SQu%#P0q8=iQR{NFC9RF}1|&bF*1@Us6(n0M92_-tO-sCpYJ7x6@(f+6q(tqurB5%P{*|ed-6IRHK zCsYH?dcEo(;ak;0!IBmvf+rLc&HAF^BB8rtqhNd60OJXbk+S}zaS~|HO4s8FJuiWF z%>?bZ3EJ0AxJy5N@F&x?%V1S2e8&@u3Q*C6Cq5Ow*ac>5te4z)!h(wMM2h-UedCD% zYI?*IVeO+*z(w9VV8aun@4jD$C*BR`$^uW+Rbm1Aub}C1j=^{qY{fYpZ7eHUueh*o z*G%{r>B$$AQJY^uh#B z@Tw&OUU;eleD+_Jt%1gA7m#epZq}P)qzzpQKQiSo50NT|W5zXDdDt@I))$umo_{pSOXtCnZ;zglak}5)r8-X@<4E;5J1S9nfc@5`uwC28n z!*wkQPw03OCbl3~JfV*()@x^E;42ZHc$u9^W;|gJ5b(t2Vx79OJ{Ql2t2I2)t=f&M zP}4`n;HDf3{$>9)sU1(WIj18`KPH@9rQe75tMLSB6pvxLSmS&{p>M}&E04kLA@jI- z#uJ{)ldghFC!7UmKH5Sv1)lKPbEqfuTy^+kOUU6151iP4wZ7Q76#RSmIujP0)1`lK zD-B#QA~IQA_~4F$#qk8~Ws$HyyS(d=VU5oxU~GF3hbQ)@AxQ*Jr1o4h59-!$EX;r1 zngaJgH3q_nh&nosRxvJB59{?31QK`J=gwNi6<@(Bw`9r z0X z&K~sRi40YVq`(uj%ol@oxsA^bmzHjuCKY_LOhr0);(MQIAN=t|bG^LA6THq2g$Zl` z1Wyc6Gb5h3u{3ZMj4HbJ(JWYmY28t9loc=GiH1rTz!STVpQr^}CBN{i6x=|1Q*QX~ z%Dp}wuv9_ql<~yu*Wq85PefBxLyQ)E@YyhdU#zoYUEW8J?is zWgP44Sg;?=^rD2K(421eF9uHps@M%r(Ds=h>QpoXoO`mv--PgPHcdX^i3tPxzl43B zjG&s4{Z~abBeVaqUnI`ytOyWKw4jh?6N)cpZ83(>;*6lh z8bBLwgf`}|6i?{6BRs8V4=|YxJabN`V-VKs^>qlo)xQ>4(nO6X_NZtSPoyX^uN!n9 zQ09Cy*gmXstm<%!w+7_#1g%S6P~T2d!KrmSKaT~k1?h_&`!6e|<(#h9==ou+cX3eZM6D)a4^PzCv||+1>$P5xSt~XIc%qAnjPb76~Mv%tMaR%Ul(&u7w~cCGk7${uc#X^o^2fQgcV=oiOi`Nt>e$1jm}8*1D<&3 zMPn+Su)r2Pv7-3!_No>oRD^X3)MqL;E#?594LoKON@kCbQxR zJNU*EIZE@@iT&5)N+fTw|B9@2tvK|r(kM|57)c6gYFIFq?`StTyrXWA@I=U<=qHf! zJT6M`1g#VyP`|x9A^-BOuZG1|tx7xxj)7PyVLc1X#S`7f7+UWI|H;{+Um@3q~6W%RKNCmm5BH=f9# z41+@PZOgG;eu7HPlpoY?#>s-0{Safm5E& z!4o$|I#=PJq7%P|z#8`OkaN0^3z-zg6Af3cp96F3-tb^F?3aAIdmng+)b2KrLu$V9 z;)#N1Ldw9Uv#cA73=BC>Wr;kzr4W3YKF0}eQ zXf-;};`E`#>OzaxgBG&`ZQLGuSz!_TFFn7Xi6`_75604UJp9iFZSaJ)=d2&I3ta*8 z4#*TS0}{$a#0sA9R>2jXpl!Pa)U9LgIVmq61N!W4*hz`gm~gYcPgLo zg#8!d2`fay6H(*m9_P>B)|hc_7u3|^S~xzg2Kn$r7v1>aiPPJH`oQ*H`<}IdO0oG5 za_L8b9{aD#m*?e$(*kauPY18XcoZuE%xHt3c*1!%_{DTQk@?&9Tkz*-H6P*$`@q5z zv|Maptxto6Fx#&z7bif%!FA~87d;!e{nig0WQ8>JE|ZIFCoF<2`lKt z6JLB6{+@;>crEZ6#@jbI&VAU>2Fvlpz{$f7v8IH4*Jh~KSO~yH06>Yfi1no05VHGT063*^ekBWOd5z>sWSa`yMPVfY6q@SnYiAVkR zMZkYP!?~)%6ShIe6Tek3jwf2rU$z$J<`vIeI552$(Kx3YpKUkiC^@-Hau6>`3Cz$e&g3T;Q2~QOHJNgXkSM%c@*bj?; zNJ@eo`!72HJGLf}u;Mp5(8BM?w z#k!{aGJ*Y<1&4A@$3Mk&*6$mRCE@~4?4C*^IG#wZ3vWC@TiZOSUF}%dso<7-eIbX> zBwOK$Hwv1?6SQ}igSzF+2YHnCEj{$K2NLYR&PVk4F`jd}+;7%J!9Touy$x%;_?`MJ zoL^nR#CRew2}jU)B2Jo+MNm_a6XBtgdQgKWvU~HC5l>7gNmC)7cv9hEMW|GqLNLDt zS+oE8*J4^y)*<1=I6u%iX#;|V(|MiDv)Rs|rypoYOI#oC|u{gJ3){y-okPtPe(Y zCejyA)a>-P3g2Bfr^lUqE|Wy#@z z!~exJctG{PFs2oW;R)3Nv0kiN02r=#V3@}S;P8avf>>K@0JQNzKRjW7ad?83sW8^| ztN_~e0vxGh26#$eH(*lzzlANho#_SFbu9d<6?_w-UvxZSMTK}`Y;7vc@C2{*JYeeb zt>eXml-==i2~Yg)HR2ik*m^Ku#n^u_y>${!O)oKUPB%iumU!as;wAH8mr|=k$HART zH!`7zC%$SR8&5PlFtQ%xal~F9csupEH~FE`9W%mSR)mTtiac5Ra|E84|B@ss_Fo@9 zB)AI~k@kNMKH3>;)B%_~S)%(-Lok z=iL+#f+u`6A&)0c1RNL+tu_)`eH64B321TB&|)Q_#Y@4?7AV91OXH@)IH%Lt39PK= zr*Iajt0C}~uA^WU9ZNy`dJ65w6sm=zH`J$9Yq(%YDYguF;zq?!r6DCDOzyD%qLnc% z4CeGI9*omS&AxbIchBU{;qv7A3B(iq{1{=t6TD{F3x^d{LJgjnt%FuP@pfg`@v!NC zfouB1HQTn|X%Al})JZFzuz)l6U+2$EEWr9)ZY42uPRF!!BG|?b=J7=JsBW)@;EBNZ zYwyA`arB}PPbmEg5>CTM44%lY#xXoGA^ow*Fz89PZ-b%IkUPVQYm4@13}^l;%j7Kk zuXa`M7lxk4{^Q9bp0EH#Ji)h!e}nPF{Vse1#1m!vGCGSV{B`k%CumDO0{N1&ejDs} zaP9+tc*tX!`wVFH;*iS^ZaUe2scsBDT}15&%x@RPctSCxtV8x(+mIS2R4fU!@#H~x zLSstMo-0Fpwgm0^6525)wCxORt&cSr*ehpvZy0@{AjuVY!UBEq#PkY`+Te+(8YlBW zkD3jBr-e!>j}N!S?MP$`p6JqJ({o4}GYPGD!fRx@(@?Ed`=GwvuZP_$FFdsX?g?1I zOC!$dV(8%#o}k6J1DwZgPkneV^U){eq1Twx=?g+0?-Ce}C(7NLl^E*v->(69;@9)P zuOLIcJaoeohrZFcjVIE@*m@8SVH#``bZ#f-X)fn<7BG(|mSiP43Qv5=bG9>lK{`ki zSlAv$;)zsM1{Ps`dZ2DV@Wi#oLt)BVl+#$KLROw!bi@J=Dh&S#l^^$XPtLz|J<1u==Pv zFi&~CK)@4Lkb@_F*ISs5b-XreD8Un?_I&Tl{wuu(JJ^4X=s)ZhEOdAHuG4U2DNWko z2~u1)z@%2FgeRJ*i5E}oUw3%`e3M!~F?eF|UIu~i1fPBt;DsVel))1VF1^YG8HUK7 z1a6__@pm8gUz~=$hCa!3GKweqevNklUcIcrF+5Q~$;o(v*AYu0;fX|A;)&Y&2gVat z*oG$(=mj92;I(`enDtzx1Vv#l8#HA9HKmbX3f3{6x1wSfPgL{euNY5k&@Tv{aMPqK zp70&D>?j;~V$#(hcqHrWgexJ3a15s6iN~w>#)coCecXy|m(H>&m_FYIhz*ziPh70%*`e(hF%?};avVtD~)73`PvHoP@kK?!)`?bvbq zVbA}j9ohhuYOoM;Sj-oEJYfaJ?7z-$AyJk6SMEKx8o*qn+*O1FELa0iRKGYrGwV1T zuk$hpPsDlf>30u2LF)M%7;#dC)_5ZOm(>>_p)QDtS0nS z9R}=S2b6e1@tCYFCJWY>8%}c{p3vAVwDB2e&uF1Nr-6rctp;P;fi~xK`kKvpnSR~i z)2O@;+rs=cwUfdV79@u!*v02#ov^Et7V*UCCO;Fv)n2*)!4tHVM?u}{-iD(p>%{>3 zuYfT`yRiSV;6XgmL5(7Kf>*v1VRYuTzXrn6c43Am9`5SXkoDzqnvB5{OnrL8j=#>Q z^@Q76DX0=p9J)8-PZvCqPJhFAV)*Od_u-A(x?ts;uA~xR@WhhXo43F{UlMcmf+t9Y zod&C0uqmEMrISoNF|Z&{c=5!w5`U}0zIGvxC-^kY&N|ln`iz3(iTW*`#)M0Ebja|b zGy5-EBOk+joUVn!A(uv+IR>44YV^Vr_J9LVyjn0|7VA~DR&4cyR+A2`E)`mB8npTp zXff*0;#A=V#j3$~idXUFoNoQ|ZIN(-#;xEbJ-dc!ENB}~=o*%_9mhi3mO=Y?hJ?@$ zZU?XZE=+FU0=oq7*~JZ8Aq3FcX_Gj=0Lh6oQ(*?%<%8CnR& z-*t`?4$kS4U5!c#SN6S|^>0T!aaqL=c%s0og%99JreZF_Q?Gx<35H4S!7`rMnuwP? zcp^b+A`9>YDG9@1iE~~w{osjQDhgr$HKjPwm+Zfu`&=mo+mo8-1-ER_19v>()|?6z zJmK4Z&xa0p;zTzZt?@+G{$61)gB8o*iO1uX>|o8|TIeeHWA%KJnec=SMBoW_AH7)L zQN1qArkXw2TXj3orPzHKqYUx8u(o3O;3CEGw8s+~%ZE0e2kn_YwC8%zuI-^6-$UER z!)MYt^lp?pQF}PT2Cnc#^3tPySSRVPiE%tZdPxQtP*DFtJTY5EXL#amC;yj_4|{e# zcw*Ziwjg-I2K4YmPfJF0bO^kdKmV9}@%u@zoc&-+APu%Jo90pI2D&)Y#_C<$tIxA|$6OHGsna!WS+OzD=C|E3|UfAIY3mCu?s%2zt z^-R!e8lYN7(n5=Egcje_8c!(30fuUv6Q;933eM^Dyp#2IJ@bIybln3h*+vRa=<6SA zz20aKJ-d3}uLmhfVylcNycA%9CnnaMk`d}PeZYlv^1>1dOA!FJCy+4r=g3D;3S-iNi-X6oyUG zoq3oAD*ZV*e0f^|N$kH$hEID3M=yDC{2@I1CHm(jn8FVB@C4tQwy_ROl>oKkiGeA? zr^C|M(vet-CuoQ54t0v&9D2Mjav=OZ$yxeecYg&Ap-3cSEc3 zgjVMT-BjxV>nh$GE>+AYe4@Co=6FJ}A8?4qf1#r>AgEOKeXy|wJmLvm53;snLTK9s zXdfF;yP5hh`AEHd<(%$rc}C3eM5!8?GQoGWHYbLqxZV2I3{N!cKvWT)*xx%ML;2SfPrQEU84a^r;4q%p`fmPZ)&~-NyKn?59Ww~lv4=8v zB3E*rq_h8;l6L0^nD=>>sP1quZ3!*lF@CCQ!1%GtEGz*V`Kp-~Pn@V7#~rFYFE-RE z!>1;A;<4|pr|?t-C9L3yHG`>I!4no}jwiTvUc>tBk=d8$z>*ntQph=-pC01j3Dvzr zch$ba_Nsq_TT}xBEe;-9EG)EmxW;%wF)`4_#i5OjL3=(9f9e?-tg7o|I7i3I@Q${Z zFqT1} z^*oH1XL!Oxu%SH+=bVnyzoo37RiD3q3iRH%{M`^ZB94;$@kD18vfv3`gH(advj<-* z0vQHNlnuUqVuJ)u@k%#F$6&4Lfar#J;$I|giPFr9ti z;|VLQ#1jvP@-zcalpA|*GgQj^GC1>>2CeZ#t7VgiLeIl%k9C1OqW#tc?j5c#2<*Su z9TkN&OP*Ml4K7%6;eHDE;LEktF=0*{%*PYlmW9{F6RF-fS77WxN*=@$_JtBp6jmWF zp5XQ5Oql<@`@@lNXnozFkpXo~Wfs5j?S_2Ty|Wgav=#iEe6=#S>>HoLCE$wmBD0oU9Eio`_W8Hv6xtN=6nHF`Ro0exCB{+;&*uxf?IY z*?-ZJISXFrG|>-cimir8JmH(;c}uwaL;;?zqE@YTyaQmO+azfi3O90OxcXXJY+U&zfOL zJ#T{JX)BrpFY34x+O`MU#~zaDM%#I{U9Yt-apD zt`_XfIUTRQF0%eveQ@YuSastl61nk296dHM$jSK1@l0c;Z$uB46=Dai83|VF@c5 zVE^^Gu76zC7aHrv8&B+Qm-rcMXAflY1h;P|S%2hmVGk@j*^!4pguj*X z#KV@sZ((8|HB#XT+Wjs;oq_~IF2UApg~bj}yt5pRNvFw5JVD$0aHw1HZm?}hHLr6{ zw`BX5YVgCC{d_~f6IQH+CwL{DigjozC5YjPLAO(Wtb`|QAPi3wj+zw4T2r$Qtn~gn zH(_|9zWzb*#10j);fbV5%4h#Yic&AQ?^3qZt>NE%HbCgqoLO{AY1Ru~mF2}Zo*-4% z1Lm|Jd^};reR!f<+x5>X;)%0exbndhIs3Ywg0j(G$Ym|b26&?C)R6gb*!sCY#=+yX zZuW9N)|i9Z#t47`_~PC`|!q^+(WZ5TL~&SHKgBMT8cQ1OtOr42mZ-y#UK- zYywWw^GSF`&nRG8U8lfKI#z)}`g#Sw>R&UgXhpJkVsM2`Sy(IGEE&vPv_ZOm3(yoKy{ABv#&N*FQ6%XTyD>F7vhy4mHd@>v!qW!2lbhE$= zJW(fTR&~}(x9%fB8&4!S`qvAp4L3E^t$`bKa^2eU(FadVeZ)&p_FvDRXSfPiS5v?W z=XAUx+X;)rj&XK19OWCIuatP=gboJqgcY0P38so#v!=|Dt4Tajp-84Ou#^Sz;EBJL z=cZ+Ssja@bu)M*njyc*^hI&d%cNDz!PPLJlhMWFCU$GJ-q&10Zw?L zg>I*9%x?TP5Z6LAzMh$lMtUvvbPB>iO@9G_h;#PGxfU4-F@r}Kx8fbA=( zK?+Zh2HG4lyp_EM^sxX+_Fu<>7w2GoEt4i8@dWJlX)s&7W{GaW)3akEn zi_!5!%dcL$piWiRz-(!i_=P8iC1Vr=Pu%iI&EIv>xWyB^y8c!QPh4$v^*L-<$T#6FxMHpzX5fi;gLt8hCz!%r4@YdD^lky< zF(D0(c)|ja*?(PJwY&rCb$K^ls}J9(P92u8hdg*f^=hmyY&z>o3{xv^y(FGc>?*YQ zHE1y`(8jT$jb%Z5o(=7p7VM(yTDVikw(y6xZ?K95uH%U@#a0$!efwcKnq}~WPc^{^CAGz}Qv0{Sx@Ujs&_+ViOdEI8Rz8ydm)#PbB>kybF#cJ$ns2e<@DExiFO#fZ&OlX?VGbCthW~+XjB1P3b>a z)*i0oiTI_c!om~XDjrP-)19sPH9lms<^8=Fp5PYZ1^gD-5vAjasy*+WhO^cWOtl~0 zilspZ&gpoSwh;C_KJ(ZFxG&41Zv)`pu}b1&KVbz!c%uCFbro1!4KK7hKG@#|WAKFH z`HSL-47Z)v(Bk^wa>e$*2#xQ<0vh9k!}OdV9@n!zn8*gH@Pv-}S=)9Wn)YE)`#(Hk z1!j2SLzTc3{CSFoN(jLdw4A*!!v2fhU^sl=x6AY^u*{V{Cyv5N1$5GdCuZpf22WVw z9iFJ8BwRePb!m7H_%*@Wv@Kyp8`Q)TycR9Vns5PLbm57q$A7!S?)Cx0{;QfApE##u zdN2akh#m3x8l3O@I^79)|AYp6@kBOFF5(H&Wah#{j}!kL1KmtWc)|)b@x3orXG)i$%ftolaip&BRHQFRX9 zctWwx@QdOdVFkrJL5q8UHuec^`~zyLcPg~!AkeObpdAmvdHR|N@9D<{detby(>Xk0 z8)`feM}^>cqD$i)?+fAyQh&qYlI)$cgu=%Y6l8-Zo(`r722WHPO_Ud&SUWlPEGS$0 z!A4df&;IM!Y9^Z4e`VSfRTCDb6|@xev*05#$_nSG!KY@xwm8+zl_@`k5^NQtm=f7M@_bVl3SHIn|ZE@N?sg@!G-icEF1# zQWjuj15Yq*pATld>hn51>{_V0S3=Uc%tUIr43n!Z`vAG5#~|NHymUaNO(fEU#zYE zBOjhn3^-IiZ80&SqMucy4oCr&3TLH&e&?lZ? z>M1*GzML}YfF};uN*oJrPNxfMJTY8NsCa@)t57(lWUu$f;MFCA^6Y>aEEpC~G*zMp zo*)&`5B^BCI7u&9#U3=^iEDvlYq7pvSSM3>f|UGRQ2%Wnknk&#Yw^U6(3M~E;EAMn zZbrgIw5HvFkJw$Fgt_zU1s0x|`QuOkJn|~$r+F|gE!yK?0}GzU6Y(>wZpS*ZTlU*^ zAtl<$ec*6=Foh?0eVTzao2cM~uvt|#k+c6=-;~NM_Fu7NOzv}-Mm!709`Ad{1h+6;$7yLN_l{0way3Qb2)?e<jCy^q25>hfiLouGPff78iCI-Jrc;avTlj9)egTMPh*|$BMkx@lX z?7#f-Zt{Vi_lrEv4|~uuni1~hG&T|Z^S#c@pI&&PMUzu6;rs(_NR-ACX}WOLi6^Z1 z3s2k}vUwxxL&e5CSq$A4P2puEp0I&6Ji)YvFYBkf*PLzy^QYMSw-Ov`|Dy4P>V#P* zRIMOvqI#k1ctSM;(Bg)n#STKHxdlUuA%HfH2yH9@+Veyht!E0bw5}`QL>*he%li5P zJ@k(OJJR-)8gAoTu^ap{K}D2!;%Rf9*x`vv9iD|jwf}}d9#t_wjVIb`GJ*ZqvGM0; z!{3=^#2O8&oA~hrujX2_zE^hr_S(>E#kS|AVc(y7J@deWEj4hDCzzs&2mecZ`NG$% zcw*R1x99NjEqzhM6IOJKCrH)U%i8(;^~E}vpox-ZIj6IL20W26`NICJUy!oc9u~fu zB~E?lXB!JVF;~UNcp|#=u8dHr`-!0b*ZsCr)o%Tp4D}p#&^Eq55gKD?$esctUkl zo_IpF6wuze z7;l6RBgJ@v^iwyuqGY{ zPh6YE4iirlo`0=3R6AlDs8ggm@Iw8qqsze5JNLNqKtipe)56VtPUemeKk=&ITPF5j z`EU3?hf`-hxPB8}eHBU53ZAfw7d*i$^YyHEQi8Pr{^%C>!+2QbY*HqM@I+1p9^wh6 zj_bp$&vMZyj3=rVBFY9&tk*>y`!Baj;}XN#q)`3Jh$oIWBpC-!WNDS}9?We4nRp_+ z=c_#vz#gBOtijVEZSX$)oaD)7Wz1*)?DQe8Q0 zzU&w;8S#Yb%iwF(m}I~ciZh2}6>ADD-VCO?@xDM1v~g!>V^7eYKSO&41t;&)!x8ph zIu?cLwLOBJ^)U%|6e#EI4!_S*U^AW|4d7FHJW;3Vy{C}N{Z!Xr7JF!fCwl0H6;F^3 zw+8a)|Jxi`bLvzY81Te%1$?vrsl<@H%in>@BIw!eC!LOv4i=4^2r2>t{RR z#D~jikNTDlPw*}K1uS5J@OWZP#QM{$kN{VQ@CK+`mxYj0!D$oVE59Vi2f$+Y z-HGnzoUV*ce((gZ@G8KRKMDpGgl$?V85U0*sNj(VzE7ivuXuu~tk-bT%@!x_K^~#- zRTfVy>QU?v>|})#c%sqBjZ0a7+dUzC3apf3X4;`}W`8}D#uK3{W;B7Gq&8N8J>~@c zE&}(e-X2=bEhNlxQw(UeHy(IG@%PYTaG}NFL5szKu{9nK>uF35F4J>)_*Bp4V18Yn z!=bc%*MuS3PD9fwZ1S|s8F$E`=)c%7YHgiTpVQz8D?q{%?b~d<#+t`c5yxSQ%xWNH z|7C+aoYOHaIhS>G*(qnoz|t$`#OMnr{#?Q&J)UT(!Yn*NdQMr`G3~C%yl~sFgPGF9 zFSj)4g(pg!pZnb%Pmrei0$%@om&8c+U-mzc{g)N2;fa)=f;RByziHQ42&?lcG!f1# zq`^QuF*o)6j?gPQBh4syg0{tq@Zfg+K;sE3;n)_@M?W3>lde|lVpP@ax94I0{tfWXKe~kM`-XE zPgL2quqbS~ZZ9XYctW+v@SW-rVJR#8@#ENe)l&dT1!lKT_a{+F=Bz;0e+NZo^aYpIkiylXln3e>`Cuems#=h2?mH zw7H3}#IuAvF~Jj6Q|0aiFRWM44*M@RFaL_LJ?Z1#aLe&xi9O+`EIJ^<6IO7KC%6oK zlN?W!*GUbY;9L7e*u{dG@I)IWx#Ef7VKnY0MXJ+;k5sFb3{ThrG@ek*HfxL9gciF6Eq(*~?^5s^p3pcB z^wzUnI6}{J;7MK6!6Z7agU$7|9R}#v7rx$Fk*GyH@&BMehfDi4kxB6ctpL}d{_UNF zZS8^!PdpzuF@W`lYJNxN!E&_3jfGR#P4|Ogz6zGa6DL=$tqVJ6Q)3{Wpfx-{{Qg)M zqIja>u}KNxtTktj{z!r+{$6479Z$5o?R^L8we4BBFJn}I3;y+ce=iW$y8oRW9Orap zbb*d1n7$kYbNxs`G!vd^k^Xx_7sFTYuqmkM~ISXKAGiSdLz zxWE&in$To|CrD?#2ovw=^5ZaUmZEQwt#ECB1s&sw&@p`F#S`9B9}a_K_*Cl#&%Mu-u{ zft5724QFb63*O`vd@pFvxu9L^LOb4tw#|d~aS!LWuW%|Zynn0)O=9f7GB@B?g#DKV z?{iM~pu^^qtYeq!@njFIw_*TCt$5<69*p9NmJ?=;gGx>A2ZyFz__rM-G=*<=c*2Sr z@I;BAE%{liMJEF!Of^FySkxXEv;W$AdG^Z$oYSSeb>iRgb3lif?!vd14lZU-A|ylLc0^A{h2xFDtV( zWKZM&?e5&n>hbMgWf(TEnyt^X|CQzI& zv{*lA@jlST{9$2@`$2p55AFFMv}XXYm97Ke1|18)clvq&OW8mjo)}bp(bu?m;#$4S z&tRG&N`%4__Je>Y-mAzCPt@lN%{1G{)4ryBn7gjxom{x&wj#Z@I5 zJh5Iyne4yZG^x)1i`F?`c#Pe7V;J8Cyz#`i+&o3W6XAu}ap4JC$dg0e*8Yo)C#+Z% zPqb;Y{~_z7M_RqR1bO_N>j>2A-EHvA-9fx8VEjm7x+iG0576SDp~}^E!m5gcf^!rL z0q{~26VF5LG;(60mH(AH6 z-i}B{_FsWrdD+MQi&qru;WJ+q!{dpQW2yGQ6WOMH>JLwjpO?P_Ok#mXc%ov!>hi1! z^<#n+PyF4TJQFN#2XX8tn6myA6HjEk82k#R8l`Vy?7!~cFK`}iE~5Y}&gn?q+62q} z_hTn_j@-6}^TVNWV_*60=Icv4@ z{ELAn_S8%j4SU%^Kl`u#dRfmoU1-N+M_?^lTDQT4oMx|p58oK0J1n`*%N7dA{O0STXUa=?gb`@g4#1)`1?jtz%fAfwAUp?a`?E+?^SLSQq+ zg~PRq4TY~19|nslMg-b8F|@HFXwQqG((vj)yKaPb>q@;3}6MNphQ|Dp5 z=%;@U!e#Ydm)Hy`RV7f`<>XJI7q>2FXz$ohhd`v7p$klC520L6Q&LH)uwL^r$C)DV zWzB;BvcjU9OHh62azuMFj;RDim*Zi9^)9DV$bxMxSOvfD2SE80U#movj>-&}XrH&h=F zGt+AR`IpPFIyq>yGSK4Xp~cL?d3WA1@#1nUb_Uw`Iqat~GX@4K6Kz*vK4}XMv4`9)M`=MXe!3hUi*j|~avJY!%?YK;S(UW2&wlu#j|x;=j?!Zn z!cqB0M@@idW=_sJ5GJ>W|1PIh?IjBvu->p`H81g8&O1JJy<&-$x(WPMKBHGvSj`5DT+ZA-`Ils4&E;ii3Yh(fPyCp$PloC|S#dd< z+75?2YTkPV)+yco%~7~ySvN+XT+ZWf8botBc}ek_2?x8zg^h&A+@~k#3FF(pK$p|V z3gBFhQk_fk=g${xr76?p6#BR)XBtR2I)jTY$7+Yaxg4t>gjPcY*Q<^IzEvzSEU9=x zI9@SD@S@@hpt}vax}5eJUtn#|7~!XLo{7sryVihqyaDZN4zz#VuP&!cV68k+a2L}v zx8YA;HTbxkswX?$*bnDq>y;!B-We~UyPRxRNa}KWSJWh$%W%P4Wl<-{Xx{XT5?UEX>NtbE{8*(;Hvz&+L((%-CAXb<1DDdnvwDVSjp3B+HE5=ax@vRE7T~4{WU5{*sQ-b;u8SZkz5@{0LiH9zymujj%xt#r{ z6a?gQ{;9SK)>3^1v>0n>ahA|xt)N;E#zGr&g*NU2?b$2z*Yg(`scSG;P{(0#xE*-n z3H^F}#1pM*hD5<;w4~pLx=lU{8D=7A3{TwdK@tm|C^7KiB6x1`$TX86AtxM=*+!T zPmn%z5mrhPe&R5sEcMqGc=KYknzbBH3o^tLq|pvzz3*lG$6evynkk4Rb2&Bb0?y?u zh?i|&~&w|H2$FS9NIf=&VMh{O|P%57AS-Pbb>z6Cnkob=$es9W<8;-UMemrsb z;Ow}pt=2pmPpIA$2Hv?^>ISsB6KJvL(Be`X#RIsy zlbWSnP88EP!LUeHeFEZ%aqliJhiAgS#-0w7S5QI{o*^mJh5PQywTGGNbMl z4<5Xt2lFl`mg;cff3w3vZ@?w0$AOO(lMnMME*B0~Y#y}u92oz6tepL!jnhGURuAoY z9kgq9XvgjFw6@(ane_Y0<+MCm?cGbbK3lz9cj4Rd8py#DO3{SlD|WlK5i)F_XbE)x zH;mDIJYhvxc!E|1U)K8RYXp5pEzeyUPQ9-IE|+ty%vS#_Fe5E{$zWGbBmTX_6D{=r z7*8BfaT=cRxN+bToI~q+Fx2hzHppKZ1Alm8(U%p|q3hG18^d9Y#&J11!xQ#{iYHR2 zXwT(@_xC(h9Oenj#S<(%;awUOz?ya6ypifZCkT`vvCp0WiF>g+*QfTz;Px*JaI}z zo_K<`lX$QlR`~h?PpCc_T8$zs7jT<|emtRC1*lWP_0VD#p~Wr1or+z6KQw*`t7r@Z z&en5Gcw5ghU{+nvz+O70f%bLnIiAp88?1HvzhieHLrUMy!H0|65=Dw9EZ_o9G||a` z%Q>=l=>5qsZmO|V+PItswlTvKq>MFY9a(6ZQyCVVxAuEsI6QiD;jHjPJ-vXz6FUyA z|Mv_}BsuZm9bDU64LNw?qBin)!ivc81T93{SfA(HnmzC(;E8x~0=u*R z&@~Aor+9+X`xlS(QB?xk$57e0+;Ya#|A{;O@Pz8Nq1A4}2-R=F0v71za)v36oAq(Ua>7K4=Ymb` zA_7lnT$icLs);!IVG|)tT<&(rY2BRcU2%E(Q}Ky%o{eH%L==@ zsUa3mbUIij2K;ke0i*1{vYrom1m};t`s^~iAAXml6FgxT<9LEp&K0Z={rPx)24qta zYb30D#Ela>Jdr_xw0MG+h8j>m%_ZQF(mAr^gw8TOq+tK`y*QPhE~g2teV-oV2~Ia6 zV3d1(pKGv)1sLOr8|^u|z!OEgN3DUn?Vbx;*~1$=(Qy32KCIvEn$83!o=CnR&VNv^ zpUc9_R}^^7{;S}&UFl%Q*?ajWfhXPsXZs$GCsfZ4E2yRwPFGzUwAvPE@$JxJT%pCe zL5p>PHr@?w%nRPrb8qOSXJ4?du7BY{9RtHy7O0OWq=iR#0?XWkkJmKf$_!7~Lr^@? z&Ufi%*2j+a3R?NpiP8l?mTJaJzI4D7$k%-+`o7WQBKwhHv)6-rTfx`lS~c;euW zWhr1wj{{d@!1Y6w^ob{!N(hG~t*`@6EV{G*C~N*Q-UUJT#(J@WC+wj)o=EX?`AF8E z`>WB0{a0AR#4X`8?^M-l!fT|Km4q32ypa=jt*gl_JP}kZPaOC&kp>g+1S!@LaL$Fg zH?F}udGrZ`C#JWnz8ezuppievRYM6x?7#T-HwM;;J1%cuxVVc3S@6WEc`N^edAxLz zjwiSc$On%;-BKexjAsQ>cp~8Nq3`$cM2wRkUqGw%g;wtet>y<>+&@gJ*k9N}@qcig zVu0Wq#R0$)8ViKuG#&sikRIU;?YRK7YXfM<2lw!VzD7X%uY*&XG(2(vhV5-h)CBvl zR7wD3|7C-fc;f27wNqLDDC9?EDV~@&F=bacJ6azIc%q&P4eVB(2*QO8#D=W)Be|27jg;MJxd^v|Ke zZ9Fk40Z$6?L}Ut*N$^CK^zNmgrucF}9>X!3iYGc24T%HShLq)mjs2Hr)gqCwxDEQd zoUxCZkid&4eA+(T4O6Y^k|qGQwJ)f6qO}Tk@xI9}B+Q~(DA?12MDT=SqFGy9B(&Hl zXz>xy#z>)!lR$e`3iX=W6UMRN8TMZ~Zo1`img{RLjL?rCEMNyFc)|+b@x<8dEWi`tM@oITi6<=B3Qy3+63Y6@pPLcKVA{6YdE*H?ki`=jqUX$Ft#(d7s8h^d za7O9)Wm-Wl5eY(L|Mfj>P$}4>xn7uXPRFYj5BSGj2l#kmh#F|{#Er`5BjNp`bz>_xTRdUG;&_7gG7r|;<;8^zYvlSGh9~Sn9G-}( zMUn`fpw0RuOtYy~qP?&~Twk7aaZcAoLG*ay)F4j8@PyZ>=zee-uRzHfK z?C%39eYl<aS`Yg1M7?1|Qs4<%=DR`N#y5u-de5s>9j3M-9XydQAlQrb z<{4Xfd5tG{o$UsFYygD)*X9#6GjdKB@8X>>n4#PC6d|w+)4Dt1&KxRU!V{C;kT8HJ zB0ql_1v$(v*c;wnr-30n5i4mxZP=@$cFK4nBy*}f@SkTco*uIQ8mlBt_Fs=m9{YNU zb2^`j-=4wTt7os)8PWQp~XkQ2c0w^&;EV ziyfY@Vp=>w3$Gi09>HzJ$Mbli?eP*%;V=tSz!Mpiu!kr7?mgKF*#x9t1J{(+MgUJN zQ;{+IukXLODQ5rGJodlV@Ep@jbzn*h;J_0@GHuPndgF~85ozK3q6LZU!xOe~#1kJ? ze2pg>);N0;rrlki>IXcLT#c!Cg0#c+kdU!$3t**!1E>&X|22C=rUCHg8yz&@2`fs+ z6a1&jv)-Fcb`lgqb&9u_!< zCyFoGRf6@lMXR|%!V{l1W^;!X?4kru&`R;?G@jtM_bKFGUfgT2dstY7<8Y6+0tz{& zqor^Stj=l995}D;$LwR^y&zqz;fcg|+#!UNF_xhlpJ^_4u0Cw6rDumWldV%~FUQptR z8MBhsgqq4P2^(2}JNvKAfrs2#KaaQLV{BNcn=9Yv<9Naz9^#1{niR$plS6MEhb`xCOhUSMvj&7@>#Fc;ZgmwHsiSQe7E!#S^@Sn+OTP zWr6`uSfL2}ul-YxHel^at%g(1=>{+J_J+0XAv~TavLzr1>qql<-}~+0i4TWJ>cA5X zPW*Qt9@(h^8a$!eTxj)q(EoA-Cr)@mar)3=b>Rrb>%o(X*?~#6CaH(}o#s|pgeUa; zp7m=z!-K_j9S`kT{uuiS+SS6LX&ScO&>+n*NGKB#D|n)l3a;=3ZQC>96mBI)!mx28 ziR$H?&IYsaM1`4wHCgXiy$}=P30|q@f|c#R5KkOYAsU{@u>Zv8qjG0f0fg9z}1#4@qgcn0|QQmKj!pgz}tI<^UQd;{t=&UyA34hse;R!8_#uHe26l=oo&AefOuZx>@fIT(n1W%mY99EsRoZ6Ow zjuQ@7$^&QV2A%y^9hrFKoG#?r?T4^0Q#@DU-pB@oK1 zj`7e!4|MQ^7SiL1l%hmX;)!-;^VEX!%HIku$s^xT*?$eIN0kZZbk`fFroa)ll3<4? zNPW8j|Ge^`5*JUj>dRjVp4c@c?>hK2hup;C2@T%D6UI!A_V7eSX==a|vzObtLU%nd zX8+Z6`+95ENql=Q0_}f?@!|kac%O0o2#s?R)P^T$3BC<`aGP=-{=c3RPiRdSp3u4u zJfX4Oc%rAocj5_+@xl`t=fVCB>%Y}9rwW#dhLfN^!N`?=r#aP z=*Iz`7$ZTDc;b!^lTdiVe)y+lFlNbku9WeFUSQ&h4s$kpvp#WP(Zde#civTn8pF23 zH?^$+LrCYhfbmrioyh}j7M%S2&4ef3oTm{SPqdZ`Z#)rt8*||acC{zrxKi9cniZpIURt@-G{6HL7pgfq(3ZJ%`- zPfV9!VmuMwk|St5;oKqf2Gm!O@WXc*sKFDSgBfMS6Q)r#6|(;-HL2KSSejIvA#i{O zS>p-EWfxpoXRcbyi+engv9)$3xUicHVBv{lM|WhO!V^XRd-4$u8z(zQJP{q)@eb4) zcc^u)aD~*m!6#Dh0;}l29-ff6SJwYY>>JE+llT|dQJ#TAeGUe7EF9{17}RUxlXyao zi=l2Cq3Q!}VH%w$G{)OG{b>s3oKA}s@I(vwiN+J#{fT116TD9D3%zt87*AXb32n?e z&1&Pb8n9u&&eCO}q*djGlr~eufhRVdyZjdR|9RzCEIi;P$=pI;H=|# z!a-i*vj1A%qI*32_d$w&IHz;(cJ&Ng!&J~dm{>r*QQ`@Gpn@l&ChVWg`a%s!oWm2m z66pcEzFXqa3Q{7rv>trDcgwX(u(r9}oZ<;m1O6Rj|8-R!G_n7(k!A(X>4L5&-GMuk zqRU-`sZ#$78)%Ujo{%~q)>;byH69pBs<;=_xFD#p0Z^Y0LVZR6@5wkJw3M-eFgzjG z3-G8MGr%A6bpyJ}|690}+nMd~(b}OERzU0j|Dqd&+EY}BCr-|y!VFI^t=9>*o3O&g z1yXj$6idMMYg>y>aw|T&JO=d4$4R z`XC!mEKWT-mo>u?GY*3b*HxB2@NY!%E$*4eMVoPZAZLu&vsx5WGR! z|L-Gs;&sDgsjzRW<|*-T?=ClPRPaO&`QnKuv^W<}uuERgI=bQr^I&K(+mGs8JfVRP z?7y1MJ>G-$cWzBv!Ir;QRdIw%yk(<;C(cRHGM=zJ9R2Swo?wdh6Fm9&LW}3{kCOz1 z;EDBjcp;A`q%In2Z6wtCD5y0O@SMa+Lo(^7LKc-MxICen!v|0fp4~%BZ!2T=W~XvGti?r%B`IaH1b zg%6o-Ujr*Nmy=e`=``RBPcUpYkoE7rlEjQBcUIpZvRS<2Jy0JPJK9M0(;`fd$o9quSEXYs`9sYQlC zkBmS@9`Qss2~flne2Z{|b&JY3Ks+&Smwj<~Em|)A@I-A%h{F@h&c{86yVD|y-i04K z-fn*hHqyXN>^YO(&j^x-nQL5<|*5^Q}3Rka$93NuWMYhWbni>bNr0 zv88=@f)s++FiVaxVH?@bz!mbb2A^#2Q(`BqLMmMd9HW80c;ezjp4#Av@&VubK}whE zxWl!ilsAFT8?W7E2WxEF`qUCq#!Nyhp71*A{&O$;FAad^oQ`kzajdsYiTrULzKy-h zq!FIb!6iIFi}4!Pa@!LG3wwMnH4%E9_}O_7WOx@9;)(J3FSmd){pSD!9m+XYgtwN< zpd0(Ik9IU}b57@8KQRp+;5AqR{8FF|qq%rO1LpBWR8Nwl@I;ONSsS3FgDiwYbubc7 zxcToL#`@>p+1!BO3G;;(ZJ?w@)`yR;N+ALJFPoha#o_3n1HW@XQ_}GUpF{Bk?Ex=f z2mUSJg=_vry|@Imjvi_)E!28Cs5LcE>35s-w zO+uE?P{KJKsXg}aUT1mOfhUfJ9?B1g6gu+y=Po=kT3^~2lH&T9HHRA%D&dL6(KPYm ziIhh<_Co9S@)N^;LLUO*2|oQMvd$hRi8AcJuK%mh9j>;`#|Sx|m?s5Xc!JZgiqNl> zoQ&d$T{Vd!z!Um#3{MP{?7^aYFa05F2{|mk`bDI=w?me(2~y6*Qh$?afCKp3nmXJkd=G(D4Mf zN4~Ia(U}}+GB(~ z_uxxjml@FR<~=P-C*-jEE96_u&b7HVcbt zFc|wU8Kd3IIh~Btz>nLxR)dZ7KpRiU*KF3e<<||CF7H!p6&w&CJ1IOtJKcCFyLcbi zY*Qdfi+JMa!rIN?124G%VgGez;|?q6%dKt!czlXX4B&~_6CK~fHX1yLC)PyJD1s+s z$`^9^=CBWr(F-#?QS8mm`K)vJ$;%i#!K=?9aIM4NP9E_2atW$r|MjtOcwIQjUH*nS zry~WZD9o!DtaxISB*5T_s749T;M*E4xq879q{3c+(>2%>Pq@iRCZ5X@z8B9#4$k;8Y$;drv_q-*U3n;fck^liouPEy~5i2JNr(xCyn* z70RjiK3LNCY4$qU|N5&&3*dfR89>Do^D++(flZi#;)KIk&?+}qgm_|Cp1V*agVKT*-4aXNI>fn_|A*qlioJkhirkp=9(NJ%&hNB#El+zd~9OHl}( zI5&dmOFUsYA?FCVn$$cm`0TL^xZ{aNOO7;ze(P7iwT1i=(P)h)dWCwK!7f@XgC|O! zj!IgCCnjFZ^#In6xkfS*`!9VE!8zT^M@P4_E-3Z7u$R>A!5v}g+%Vt?iQR`9zY8^n z4{96_)MxpSkd9+{p^oXV#uGBG2VLaa9?qBJdw5s2@vyAu91dR4m&kQI@kSn8;fdB` zj{Cuup_6$rjweVj=?W?PK zbGko9>P=X+-%XpdaJ>Ft;R${U*0VO7AvgSZBL02eDR6`HmzG1JwB7Z9JQ_RI3QqAX zNVEo?FqN!I_K}faKZw|WX^|rPFK&s`SKO*~P18XsABf>)&NAf>deonRS#FwXw#&?ZwU)`#=&PB(+! zMo2O-p3pBkc%r%#wc?53t1*{hh2+}>kHg_@Wx@_mNF6iOT1Ke#OfV$kTaA8DwZ z7W=aQlK3XpXC=k~=91@}&|L#5@Pv$auD}yA<^lD(2kNm841X#`(0D?A44}uR!9{`~ zB}r_R@r0KIn6Upk6L7983}BkSIlMk)nY{xnsvB=Sp~c~NV$I&T-^=mDm!n0~U?Y$J z+CPPJPe|Ymo+u_0?s&rQUgmx%X-&z65r%@%=s>t_vDhXC!=)BnQEG!ZnalUp&E7l@q-5FN9_uJTYLSduiBR1K99H zg@fUlOYsD+Y+k`S&(86}3{U9A0iM`=Yxi;1g|lL4pl1Ii_1$o{)Of-VQs)Joq}Bt@ zk$7)-OJY7@DZOaI6B7HuTA%+yeFn4yPslhh)UhC_*Mm@x3E?o=F2G~*u>pUvn+bxg zkB(&W6;BkJ$P+U>F?vR~Zm_Zjg5n8ow;WhgM*q74{Fkz&L1EZIFS7B({v*8b#uIr= zFP_5czL(10f)lS_?|u$mw3Pr^JTX6xoeG}d^;r$u;zbj%kpPzPl=r}J(tBk4xT^POHD zf&DFeT5W~fo* zP~+gC#==64hl3gu1H0B4r^}QQU~_af(`ax+cw`W%=+`6-MRlRz!UurH~RqR zUy#9YJi+PTEm(HOwUl#kaQvOh2O&dWB>Cfs4N}O0CzuBDhf6%u&3z${!J7Ai74;zj z`>)A)c{;)Vi`M~F;9o~+ti%(mEA`6>S7k_n51!~&@9qm&mDl3;;P|4FynrXh$-@&o zao6MIR!FH#+EOU#VF55HZ8RqcctQ)G*nb_Gd9OX|%lRc?lyf@Lq^rZ8`cMf^RNsEe zoOMd@z7JpL;fdrhCS~wM+cQ27p?nLAfW>l4lMbF3azFnr$Z%q-l~8Mfq1FY$c~Tn$ zqoqCoTIgR0p3p)$JRz|{{P{PD7l19~nPCu~kmm+a#}1*q+KGgE4FUBy0_xWisQ>fe zN>Usq!KYKkw;c>^_2Dd@pcJ_!>$7VXeXav@k?Lm+-Sq<>Pn?j#N<2~QQ0xb2=XbL3 zGbkzVw_&)0Jha9WD{h}X2t7VN%-9IGxj(a81mDs6H5Jy=f>S&(>f57UtglD?Ez%Yi zt(m8N1K39&=Hm%&%Sy2R=w_Xn6E@mco#a70VJ=@N@x)Lm#KjZWT0Rbk18q7K3xkJ( zx^sihIbD(jIp7J`!50GHB3{#tf-(Ol*7kpV z=XCSWCEkX^NIkj$kF}CSGCZ+Mg3Itk&V(zAAdeEVrozXh;0}kC^}roZ%>J{tEo)O^ z?iUTq(%- zl*2HID}_HLwhXo+ow^`gCeN5>;0bxo1S`o{GaM!3O;E2np&oZa-S$BJ_=C>^hq_FL z(q20R$|=7Gys&N7TUTiQcR|H^uxq~+UX|dc3li*%Cz$%mo{lGG?9Y`Br^X*6ksD7q z%RmyI*m(Kq1t_n84#6Fs53D!C_ojFzOYwvTfwTXboO)|G>zfb1&^*UEUH#up-C#c* zV8as`1&`UX{@krpN=fKKN}w5>U$iPuEbzoQ3694TcN^Zh4+qz7Zhjd`YWy)sSMoK_#vlk9>H@F7y4a;W?D>vC+6PaWe5AOm$7+Q!&g#U4{PZ_HJ-@+ zcya*i%Ti|p3rMUz>?!fKP-E_(#@#?idG_v)C*=7X)G>Id<8V-~#o=DkJNLs+vQ37K zwfF{4G#K(=GVACyqYDg$7PL9^fP?hG2A()E-&Bt^Uv|?g!4`hfNQEb8_xm>mPjCv7 z4!H!2Nrb$CEEo+>y35N-_FuHUABJuW$8LrzM@jQKo``x`V>-00Dc=zAgcfVz38tjo zSm$ad31WC+UjZUz@PxTM2*VRYtDSxGj)6I0J;GCFJ=ii@aq8h)j9GZZ%0qDMUOHGv&Eo{+j@sI`aC zS05W98WdJR{?iFsD9f#}jg$!g?LA+1Eq; zdIj}gGn}MFvUpSsNGlos%n5>I@Sg8@9D z#pZZ|S4AsWQ)bB3B%YWwtlL;PS_665f7SDk=)^k5s@Z&V=bY|ya05HIwyPW@;fb&f zB>UlsB0FFF7>_5$9w_?`Uc7U>dmLo=g#af!vGfWz)OaE_>Q5+?6#6xgM==~c;t8q8 zhF7H~6BfRaY1s{WNo@w)CGpuXO=2`*Ly6OZffB1R4o}GQTBy%#ppM%@9lL>g{RW$8 zKpdWsuj8!m%daIY_jiQzFgR2%Ht@uS>4#dg{>f`UN7!nHBzy*%7hr6Fv&$2o+y3&@DaFrvNTAs{~`@^DXd=qx#tWxK?5l9L`M3} z-mJ~L%S%W+K|4evxQXAQYVh?qX-dZvcgrT{hJ?LhbUZ;@;A<$SDlxEECrSLm6Ng&y z6odU&{!UGI!UlTLjwiTfpUwJab-B616AQ;w>JR%RPwwLm_qCOPTRgF6!EHO}l6yt& za&Z2T_096byAd*&fhVfSgf^a-dn_dm9(j4DawPoGLK+-7r_(@WJdu6>&KlN_`p28k zgVs`~4oCifkjFSB^=hoOW(8{8I@H)zsPSu1V^~Jv33-kU^;s6ot%F~j)5(|?>y2_< z3t!2xEv!Y0=R)W&ALH=yiQ)H#!2-plSq4w|O{03Bj1OYy{_*waf{%j@_VkjJpq zM!`Y*J`U&u51UJ&1D+U~{h$$)w6yAQu}#r7WngTO3?j4tdSy-GHRp7$HHeVAB=O-1 zEf~TR6J9==$XaW7q1N$1t>uB~={e8WfzA@s3xg!C58jd39$!46g;aRrw*BJ-)`w)A zAL>{i)a!ky$NW&Y`%twHef9tF#C0h!WB+A4^+_Apc77lUA)M3Ea%KbL*$tL}HoG@o z%n8Tl-1Y7AFg!6(PP*`f{=nb~Exf}Mvn2@^PbA(du?^O2_OR13I7uIB;t8fjN3qV= zS0=jHf1UqYrvuz-DIYL+VwyBQ;fW`OiQ2{!jmnhD1Fx;G*!kN~JfRPJ@kB3qxrir7 zlZk*IO17+b5<01n@I;IhYT}7{Vqo@Pq>GM+13r)J;sXzMm51PXB5Vd%n0TVdykGWk z;n<~)R`3D8l?9-c7O>)prF#-nhTw_RBW0ezUmYZg9#3d+0G`Mfd1Wta9=l|%g;j3E z)t?W?=oel*A+^n{bG)U#5q6XsC%9JX9H7QJLydQY8uK(5Pe|MY)MuZN(hLfo@q~3Cgnl67MBb~$&$>I=KNtb!BtfEQ1+9mtanJi%*wABglTc7dCQO!sOAUq?u= z8lI@KB+3d(`dUGF<>h9Y*w}yRg#i1n9fyxTVZAf^RPqg&+W(^U8Q9>`HC`0s2@T@I z69JEI&1YRAA<=9y)S7Rob)Qgczo6ECK#c*18V3q3HMo)em&Akka84)Bgy9c)E(Bfm z!Vym}<#vemBe_O|dYlM#TLJas13UOM23k26~|gbD6)LCyZ_$a0!c*?*CO zkqe$5wcX}Re>`z(U%w>SMT24S#G*4Kdf*9C5s$%I?QXW*4*hkY0Z*96pPb3Mz%V(P z!V{$A_l5G`))5kZMRG0suUEMk3E`a1wP60T@CL1Ed0}xKfWZ?3WC9CMgxC5Q3qMt8 zSnV2=7VT3|ZX0*Q=q6nrtb!I>JPXW)lxVm1gNOUbz!aWf`m_sdS$0}_Gq_}`G?C+p zxJ3iY!-^VIjwg7HnAI0geBD(r75?cViCTC<2kh`fi3|UoVf}Q%)ld7N?StDj*28gi z3FTN z9+rL^LvtFQXp>NH3OpDp|Dy4P)Coha6@*$Z1hr-WYTPi?*g;P`L7H1S)EENTMt?Ec zf6221)=y+S5mu2g1vo~oE8u@}YyopL=Iaa8e+(#XPwk+5D|Ui4w1^TLa{Nz!Mp#|6GQ3x?gH|98Op9;|ZqbRXzrfQK`?BHY%K6ZgcKv=i7I1XcZHI=-vY}2ItN%; z13lP(?O1W65NlKR`W%0H;0apT(qISOh~kOzQlyP10;D+{Pb6HfZ~#tl5yRmLZZCtO z`LFn!Q()KLl7NLLq<$J|4JCAtIx09#YAIlZ#8bmU5>p91GbJzxPe^P9OqJ)WP@l0t z9cP6))&li<3+gc!)UUfxf9zqCBYr$7X8%R{DR+*>y-{@e}fuxsW!p|m50KsiO44gUru9v=(azk2(=A6)I4 zUd0_g+xfk36Ie|H?C`{Zymu{GpARpZH$Ti>QJPlpgkHSh38u{BSW|+Pb{*E*(%9An z{j*$oF@z`jNZ=u!IOlOM2=*!~jl%4|rVb&>hI6_&xv0YvPLofyfU`)Ua)39!&L`eV?7wKKSqP6{ zbAR}~kOZpY38^cGOQg0G#?o3^A6C>s06Zaa=Bzc=6l%O#7d(;IcF+r`&z+$@dxARt z49CkD6g(%_q0o#H_ZhIWY>(gu`Iv-B1IG_;5A8Lu8BdS~P>r=Qdr{#skjs5HIAy6M;t9TGmxBW}5FSs&lzIHq9Z%G=E|vmY&?fvCF6P!H z5BXE&Em&GK9i}6Z@|lTZeyu>#IrO1m|=Mj?#dHC*GP$oQIR!gm*d!!$W0I z8c&$ryR;BWYNJ2gdgVnOU#Ru=P-|`>VU|zpL#@4m8h;P_=wLnjFNwqJ$T^+F;=o3< zy4{0w<(VA3E#vaAw2aL`y*`K1@*MzmI}KH#NslMAFbhwR zo->a1+D@-6eBkp#Y27-*8v4+S{nyAp5%#Pvk)~P>=B*)#k$6J?2jYojDOkf3ZL7U} z4C~OYaRch75TvA)hkPd{!e0)VF!s%bi)%8 zqXach0qV0#sLv~)j#)w-w}5)>0yoooGa9~;uVK(ZgAMRR%_&jNtRoi9%2fjvN?Fjv z0($Bfay+q53Wf26`Hti_u)(nX*0FH*wPPg7;R&XPPC_1~-r5EGzq)C*3hsA(&~y&W z*eM%0JfQ{Dcw#{6yUwidg@2(j0Z&x?-KQ2L#CnYtlyrdt@JEwU=2>m<#Fp|L4d96^ z+3@3uK2lhYCnRkSjw;)n5fk=bQ{DQmgV}Ksw1X#{yrL(;)ufLPfzQ4UZ{Y!}=>ZX* z(1LqBQDSbYHGiIaqMX#=3BI*wx5g87C720MgzP5C6;FIRl=lvtN;~ldc!gV>L$F}s zYbQ6sUSnh;2~XUPwVejv+a>lN4(n@>7oLzBZPquWP7`Xa7VN7B(0D>(wpnZ3W-B}) zv0HGy#Bad6@(dT2mFGBcu#DxxBQl-?zsofpY$?ZeP`|cA{q=2#^i(&p)Sao{Xr>k&0EpeydId;>#p_v9t;)(C~9?oIC zp_euW8qyj*fVJGNc7anSWt?dSjhJ7bYr*`E^70)|tST_1Al%NhZB|S6UtO&py@!s+ zY&t!6yOtz8;)$i5?H9oG)Lug;LuU=H#S^6Qc(A^cPbL-c z#E7Zw>%oCKaKZkonlzcP|5~szGrI+zc)PJyI$Ydl*RVwRFjRt$@r0SY$iWkX&lfuk zMlYzf>rm@g;aRC+gSn)R1-eTtJ6tdEtj+O+ z#I!*>iEDxSY#WCEXhb9^p3oq5JR##;to2$K>hUhrZ5|Aek9&B1^~4{IVbL!$XcEH{ z-RF%g3qy}f@IIa(CF^@LJTZQ2sbo0!?jBym;)&WaFp4LZn~YOXQj>SXgPkJlt%iiA z@XZcSXi)?EuaPgF4PYHZi%wTqzQ*S+?9B{c9Wcfd$vLi+XPwnHKM`Vhf>zbvP4NV$ z&#Caq5GnS+6IbnsqQ?_e>RX(J|IKaEZ9kN0r1cQ_QfbKkYe!Ee_1S-A_iHc|*7O-R zwg;S~MKE}xygyqrJTY^2*~+kcLU8wDaEpsPV89ck6{N#DzjpjdgwuN;Xc!H7#5e9D zEUd*rc*0*!R@i?%in3e+KQxH(m=2xv!3&^(~LIzizP9$xJ6F=p(g#Q0sf3 z#`r^x^L4=!66*&w-UsS4f2hy>;4vBdhreX}54P4~GCU#I0jwX(u>h=`GJ-1sJfRQj z@Wj69H)^u}XC9Qp5_T9SiBNdrn*1Q(2^%T0!xQsD-#mg7ULCG*9bR;mn+^6~`T&!2 zI#NVdv)(*FlF#u(_#>AI&_O>q@Prm0;t5hEoAc*{Q!~MfC${|assMLp>4RM(wU0FX z;R#v>(xCipJcUtHMKtWcv?vo#ILS+OJVEQ+2AIL_JQz072i|z%R9{9>@I(pOap8%H zW16*wa$D;NkJgn$Mm!O+Af*^|{j|Jt4#@Dc_oqheznI>A4l5Ow$pSnv=9u{4C4 z=0{+*oqUnS6I#TJC*I$GKbMDsfQoio`;|f*Lr2C*+w3YaJJbIyM6J`UvVV64bAgP=Bl-m+?M!aNl_e zsA2zQx%hrQ=rVm({+|u;#FI@-_TdSpDB@sQEr!Pv-%rx~g(rGlsI~`wKYew;8Yols zL2${W*as6Jp?Q>JQ2E#$$C6twl3pSeLOLEo81d2r`dO5F%8(m z6LbE1bc8h_6GgVd^yW9(Erl}OGy?|xeSB^tjPCdHOK)g#F~z<;93*w%@UYZ^!f#R! z23tr?2wW_2;f{DhVndn>a!xK1A_5H^6RJFSQmAZn+QCy_p5sy7|PUPMM!xHPek#=)xtmj)Ws83 z%GCP+Z_lkbDgnwXv|DgMOPRRE6FVA}J_x^Nx9GAFHrGKYJV7dnKkJzCeSQst;-)jMpAu*S!;%0P{m zcfb=8GYhXt+#D>TgSnj3$@6p8yX6@g{2=4#&`HM9;2bT)z!P#z&04psP_+dQT$4d= zJV9DeImobRc77QAY6T~h?7v($_@zKAEl}Z{j`Y|_*2e}MxB3tM3P0O(FKn%Y|9E0n zROCF?(k3zy%BSvNIC{&g3Ed%~(-iLDi9VUH>p*Fjw1#pDR|GzvDi1~2e?2b6i&M_& zoGRpe1~0Cw>T(VTIwLFWzj(D>0yZqXBsnJx9JAUw!yZrE-b{l4p3sMAc!CtKaMt_Z zpE3)B8SO7N-3FWJzd$^ZR|??pgzuwwqo8GEB2AfiqH1!V4v=v4)z0vz)DFW|Qa=cn zNevNKG%`aRw;UQa(_RH=wzE&4FFz z9~W+VGP9o*e9h~b0kaEed_|0UCJTYQa22E;)WC+v;V5rC4DNi4)&}*9FFAH$`hVy zqZ6{m-_Y?f4Oq7`n^w>kt{N;2dU%2<##~SyiDXpA6LU6wdI`_H*j3{`G;1L*!SRF! zyWokx=O1ok{i@&9Ld#*Ti?`d(g#LOUfhR~g@n&7%>6_0TV9&;qc!(#YrW$HpCDhs~ zsPz@q@Px!zLyfb98fyim1>q$8#81m^*jS#sz$i2mG!ap~Ub~ppw^njdmx`p8v*0Fw? z9Lb3yo^ZQYdomoi_p$E~c$U|u9x&I?lqasx{p#o9^&q7v9V@|?bLBz>Pmn&8ZHp&b zmiYb=QkGgL5$69_g{P$Kzck2@b2`#!53zn%zG=zLu-?ozM3UhNy@10LF1^BsvzB%e zPbi<_ZZNd>xRDLv$1@Uqi6<-q6G}p9t2Bdhs`tf){g+U**By{NuW$M2p%=(yixiM@bwdPRkP2rP* z=40|g8x7WF|0S{KRq%wwpTe9Hg9bb4KnR{76>K-_7xFv`>XCs~ zew;#vKp7xn|FtWKBvQ`lXbsA$j3@YZl?sa(TgJu1-WuGECuYe+4W6Jyc0VLE%40p8 zvqc8Z@I+ShwaKuQcii70(C6H9ryfwIuUf$`Q|09t`>)48k}AQ4PC2ZK!3XQ|_54=} zPw0Rmp6Dr`fOz6m<$rhJuM&1tFyM)al8}TaNN3m#AJ=XDdNHiLvJ+LFc;Zu!ULzov zk_@!6{|Xy=!wq&UJT`|DTsuaR!12WGSrbda8d@ZQCrEGqVvQ%>udl#pi@_siCR*`? z4nX6HyvJ`IV=Zl7J0Rg^E-T=)s!@|>!HD@%Ji`9#P5j%w(2I8GPH@-mR4*5pmQx1i z@r2aj!a%9TgHckCQxQ)v6`2e*E*ENS9@O|8*yK;cKA}*b(?K1phvj6v4i1%Tb{Hnd z?eM2;yJ0KQFI@J0TIC8buGd`eLa>rP$iWk&Xr@-c6O%TZKZQKDZyp8PJ4)j$o>(PC zSa^a~h4rvHKYhV)!m&Gjr@#wEcA@q~V`;R!8f#1ntF(fE!h z`t7TB1-f1glW!)*QmZpOD8>_{+pd7tPj8T1h9?@|Z#@>C+9)DqKk-9~Jn;l=CoWK| zU^Y+Td3{Q|U77PhB{W1j(y86(57(86%+0dTw+gu4m!4pXz;vC`Pmfwn2 zfe&~5r6Gs?mu}?Qe`ygp=XA6XJuizV__lTzy3LfAUU(uw0(9_%i}RB$P+Do1LOH#k z0nhf9Pb@s4#r1f?VldHVc*0*2jqn81T-Bhx1}?GxT01X3H)|tvX^F2Ec%p}#%;O0? zD8v)R_g=cf`kkL7cjJlsraC)eK%MXrAyCpD2z8XFE{GccG5) zK)ud`ZRJ=GhR_yW2gb{D?CwAZpQJ%tdOiUm@{!h{RAjembc)#EfN@sC$f$| zKLBfbpR?EqC!M>}Z6TCbcm9x&=!jv^ga-X^7>VZe7~g`mnABjN*x&e_j-4 zeeG0ko<`$|l9F_SC-h<*Pms!am-UCb)ri=`6Du8@j>0*goH((=6I~>b7EjR9Far)K zEQ!ACzsB_L(FbPUmO%UIUJ?|#&{yHG*{sX-z`=T zq1<*yz~xnC@CHxJKOMOfR(^Al7ntn7T3>e#g#Yc1o-hvP(7es&iE5>)yo4Qs%QLaU{)<=Y;V`jHZK`SU#GZ!ytHBdy&08#k7Y4gc z3xMWY@Pa2QdvU~uC*};`Wfq=zF}$BMtgR0d@B}H=WmsSNJ11`*Sg^l*!m$6kxN76roQ6J*6|MJO* zwPAgO_UV$aIJb1UU|$soo=A`aOg!OY#ZfSx*lc5OK$+SMgVDX^;WnN)+mw+)JYgZp zBzVHVbNkUyUh#QDhT(Xc%KmGuZ>BSh%^b%G8=mMfb(jSlp%4A>L~%*r#S?xji@k+z z_cwNkg@otu1r<+_@_7>4rk`Mv3{P}EUwaiKRM&S7%%#B)cw+R!CqAq<@Y~S^Ce?h? zu^F`24Go^qLS{T6HPHNdeyM{jfG4CD3T~5n2&gg9P~#$@#zsMnkAV7&6ne{Z61Ydk zN?|(F)E>}TgJ9u} z7LL_mD?C9POD@)8tuOiT#LD9Ayz#^*IgrH@U8?Ye8c)#983reFin$$zk7+V?In1X) zXn4Zj{l#e3TbJ}?!URt+)zT5x)dPGyabPSBG=_?{O}RF&X7 zJTZR*FRAdvn;n+d;M~>+JWj#eyn5daOXoUwZ513aNIntp#N{X_KbUD9GkySUra_B% z;`ytjW~?7HODk6!T5ZehQ63J{3qm|0^`Uw2gw%*ZtrLMOBvu?gd7{CbMiq$}V?9RV zM&N()>=@?I3uQbZW5}#^90}^RB-G#@q`3%<%-%X6bOtF&RK$|5aqm z%{#EpxX_#z;q>UkE{EY&ULS3Sg*EsWPo!OYJB>AA`Xu(@iGz>4yr85}xWT{?$x#g< zC40H5!jjeH<{3`}|C?+E50FmyB{%!8HquOiC-#)B^Z*8%Rqk^c-XAOjPI!W}`t5LN zWqDzNC+4(jHVZP8L4_@z&|q;qL3>$8*0RfUfjrjmt_er!KpguoD@hXJoQ^i@A7*%h zTfbzurt$izk6_|P38KdnKlgDWh9|s^RSAVM1-crV>i{L5m~u1Pk2R$ac?QDQ_2XM~ zh4Lz}Ih>}&1?<1Ne@QLRx{%b&Lrm|g%ZVpw6-0Yd#U3$jkHRp6pXFEYZeE@Bn;pQiyAeLLk_bC?|=pL!4RHk z=o&kV^^Ub2*eSFB%Ixme57zJD&FCSX(4sCpQG9epP1eOHOtQ0teeVbGgcVQJkq2fb zL)u-Ep;#~u&g;Cb-E|m!ME=E?3=1uGGZ}+u`&`ZX2&bY!@O#Z0LnpwN`XJF{EJ=AB z*Ohf_yO%{*dWgw`12$gcZBvb_5i2ogJ+YW#~`fr>k!m`EpXd85w*#Xlr(U@?6lZ!)}TU0T9=58qB_!1PnM+($xZ{bFY_f+k8at;x9a z;PnqDD7O{W;J}q%N0x?^Koh87GQM_^ggukdJgji(*HEU{V&KCuvJo&D6|~6MWDK{L zn_`o3Vo4*%5cvCj3!Yk=jJ6uUVKPDvbW7~VnxWw`?$BoVAR_xrhNN5A!829mMTE)7 zxnM?CKG^9^Q2n33O~(4x(wJ&8UXpeg2kmlgeSRHI9<;~81j8>M>9z;v(}M<+;X(R+ z5Nr8QO@PVG?lu?%>u!r1+YQdpfFF|~ZDxN_LID2GXCp$+<7a^ap>%X zrI3*PLo?vo5mB#4!sj<0aD!wrYE*yPt38~k7bPa+60H=~Sm))pw+!sQ=XYasxWz0t zkpL#+?O+KgG#PbhDU5;BIn9ZHSLakETGC_`){8Zh;nl(^DulJP)(1kl-5&=V_U}5m zKMd4BOOtWSYG85`)};bQP<3lEe3>%~$-%Z9EsX>KWhX%D41!_Dx)R3Fv20> zq70ImjDG*Z?rnwpd}M;sWMo`2TmxVeUgeL13ua1yyUDnh@Z>{#XxSvGsxut2`Mpnd zc$Ad3GVn)lc`0l%T+ikz@a?O~SZYy_Djk#Y$iL*whfq?xBOr&=eB(74r`Oh^lG$Wr zXExv?!DO`8K~bN7Yrt&mllecj2$WGKhI>U!4p!O3$;EE-jy01SXLiS zn2f;^tIPU`#OuND60-wa%5!_Tgfx9$sN?rg$MB$D$3s1qhq^t7s%g0L@w^Th873pa zX<5)qSXB$IOvZTHws}Eloa0t944R!j>bnhg)`wYmVq*A{0M z7URdHf59+PYiD}ay*n&Qy+MzYOjROu*`z~JjuorZ-&u)h$mXh2bRhB zw%eb=MU&BjPlI2dOvd6t3+ugy4=;!Cf*()lLt#82t%s~na5}UP5-Q$h9c-(D!xMj` zpc7B@z4dD_q->0&N<2|6VYDkeGhH5*n~YrXX^Ga*-T7;oqHz6&KTKTU38`6zc3S9) zC!}_Xb-2_oK#gIB8pjAVmI-P+1FW0TuKRGP&o!WqZNj25z5)BlH4Y4w;~e;rwBcN^ zk^J?3#1m;tER*2vj%z&b!_vCp!V_8;jVG}5HvXLOdnYRHjb_y^jh_h@220S1$%vti z)Eky>8&|F)^xgBkM`L*0Og89vVz5j+;)#eK*?Hg!rg*-8z!P)w(TIj8G#Cd@w6J`A zmGytyD-#`nCwSGd8!|+}%U(QjQ3~lz#tW;~L{OTHngN{}4}g<+<=+KfYAoMS@x-Q~ zRGHw3pJOVNhg-ZP!46OSCkKFdqD=73_i*}@6*=P}VT>*}Vc`aH6N@J_cneQ_IrerP z>kr+fsljA8ow)2Z8P3rIV>~hbL6isUQha-E1$`Xk#Q~mJo;tY_JAHay`jjih)& zYPq4-b3(1@f?C%BHMSf6lK4*8T4KE5a*6YRkL6h}tZXhPM0i5Re4$CkeV|_ZK|TJ1 zx($H(aqu2bXb>cx__vBlC_Le_xyogjCwzC`W3ZcEV4950Gfzb?XZmyk5 zs|CqcCZoRw&6= z&O-uf!yiW^m>5qKn#>V2o)|r|+V6LGf>)5Ku#yhcn2b@2*FCt&`gF=RnhNnmyM3+q z!}g@&tcR=fNRTz27-pnThSjd$;Kez6V0V3$_!3s#03cV)11 z#1lEPX8lVx8MQU|++<9ZI#>*N)1 z$x0ar#uJ|+;>N&=U2hld2S`Jn?7G z)BUW|`%2;*p5T>8FbpaezF-QZL@azLw1~g^qX!)1EH|enVKiu079(;f?5jz+h*7?qJt+SCJ<^|5VV!p060#b55lwZ zi~#1+;yFAaV+E|&%k=_$DaQ;@ziuSq3Hg5u<#r|p=DWF}+ZE`czvy@(Sc(eq#M|S) zSHOBq>&=D%d#;Qf3$L5W=W^{Y!evD>n%I@agK-qPiV0vo@nvs4_A5y zhagVxprm=k!2$Xp8&6!Uz-Tz0u#yIE_Fn-GJ=VZQq&o(|n8s3siYGR;%N_`Qe|9B_ z3Qu_T_GVa zCmew5ib>!Do)~}nbug^St*Jkp|uKhwn4f`)WXl4J^!;B~l zlX3B6!90&)9;VwPVYdl#(uybUOTZbPs8c(24Ri=;ND?!i;I;Ea7|~e{=JCYQE_b^@ z&q7{#Tf&{AWug#IkbYGWHq<~o_Fs#q(Ku!@qEhDAet;$0FYccJ`|Cvxp2)NL-Z|D8 z!{p^Gp16L z4Xe2lQo1xa5K2nOlhLk{G;ZUGK;L54FoD-#MPSwDQyI<06B;m&C;luXISNnoTUq-yBm~^| zJls%D1|#vr^n*_}Li_j=+<>tEaz5X2D!fcuq%SO>g#>uQ^WnEPthbvI92&rsQg4Ra zKt~;<#S{En&dEB`@o$NYI6NVB^iXSQ;U1}{gIZGq8%tb0oF}ohFk0g4pat#Xqu?NU z&JGXDvo`om#@nHexk0_|hBB3#2kQ3s5uVUNeLNAo^w~q!zu&GYeHFU#O7kRKxn~a( z2%OWINkI;t7-ISr2**WSqM-y&klNz|bLqnlJn=Fvu_t0P5A;%N{ zFW@rdG^{)8&?#~2+gckhaiKtiE zHmsl2NNZFQN}5(KI94B~vj1|EZ)}{?NsTe=Bz1;xozxn^7gBEkYf8*9)VM>au}4ta zcD$iJgM|7V0_s>K)bR*7LkmRNf5~yl13V#Ln_zGG*9UiRmWS_n;@9T4C!rHlOS|Em zvxmJ_!CMycg$++=;VhnryOwJJYk9@e1%6rkXmT^yRD%-OfAvUCwqpI@WV&@hXho_) z)_pvoU-0q7eJLo$6Llm}6;FheZFUAq%H2NrxU&Rn;EAL4Qs%?ag=8`aPmFFw^eUdX zB^yFKp@r7$zZUm3XC}mWo-%|AA3V{1%+#WAq6V?x33dw~@8JpG1yvGZx9iLM-hrEK zrTt~1l7!9p6`!~SdF%~Vg;yO<_)gJ~7x`!$3O^}q>F zB);dy0#7vklGhBD?8y3OJ11J9Tkz!Ul2&MFV5YVaVQ zi2O#Q2%ccdHx+XEMno{4cq12Pc%rpM>={@;)S8zu?7w*RxgOpeR5x$|ETKV_c%qVP z#t_!~0_ATQPmluC3cBb8E1uXkm;@L+@n=+#Vz6w#NpkgKNGfbPJW@`AP4UEZImyHm z@oVib!llmJh8~8GXbIU2t$!SiTMS2f{#SH5JY@=RKLY+Obz`m>BF$71V23sK>EUc!G4UWVly8p5Z66l~1q1#zUlO z08d2hbPt8mq&2UG78=ZsCtjZW;m7)L3z?Y56Wec%>QMuBq@3r{3|#D7f-xX};Rw2`?Ey#S>?$C9a1u1r-d>PHDsy zA)a{DV$o3OuEh^{VokTKR;=Y!j3c!37&N9boT3BE?7xc1BoF6welv(Hz!Rh-JcrvH zwCTrqw_J)s@WjV0zYoIz_dN}^KuOJ80x41C#TxsGQI}qffT2;>%l3x+647XlClzj+JYBct(!zuj2{X#=}mcbGYv8iV4>tr5=Y) z!4|e8A3!b2`#29pDUopob^! zr;?0_C+cQa_;U?Ug#7kQgVJvB6v|IQ6l6Gz8-6@dr~*$S@WkkoBJIC&Hfx44*-;m2SN8#BgZ_z!Q;A^4Ed#y1ODA zwcvd~VR-tD1m56@)-vIaCqi=(0mJ@_w69w*agZF;a89R1^LV0?Em6XFBCuAQh0vVz zXMfmL1CsE>wzgDK;fX(;YqWv2`*{wk52X#L3Y2e6#bLo2<54S~h@aZ_v%&t$SrSXx ze{GOJEzapUMZW}Rdv2%0walrm7`tPIH(6zQSP~!=y?}m@0#uHj=U>}~4 zS`XHz@=KBuo{*SNsBvFVV?Uri|AqPt2v@_2#42RzZh zK4Bp|yrw>10rA9_CY^mDp$5Ud;NlY!IL!X5STC*;*?;-?e|B5D!mC-8k*vC!fO;a;yw> zdkIxDP*ZDRc^&k{6JJA<*0Mg)L%zYV|2lcP$0XR67L&m+girhKF#djYc1vheH?C1# zI5y>VcGW11~Kc3J+7CgZ;$RXC@iz_$Y1oOSG zIdKv6(1!$gV!sPdC-4NX13Y0}Uumqw6W4o$G=SG^rN9SI%paPwB$U_Ux!~?rlDvQ? zcFDsNJdrc_?LA1TOhp6UCOs?+mbR7?1kUNS@Ci>O9?Lb8b!JmZ7{wD?FHiP{3xCT) zB|PE%AlVsOosYM!0f$-2qzs;zmb!`~aznm_eftkjG?FGAJh9%aSuA|=tstY8?7#G3 z8|QRd7lLk`_kr!-+KuPuUfP5+D z10PSkk-|zm(Izo(CD=doZOfuiQr@#qv;P_-53SjMUCB;+27@c*t$GLE4=n0)0hZG* z2zWvZPVvOH8u=IV=RB@$H4V1v*EnD}lon`DD7R&8VWk-!)f&Q4@!lj4;t6N@LdpJX zgB0Sj|6+Rb%PBnJIkR;VOf=2s1|3gmkOQ8Wye>VA^#xwjZHMOd_YGVQyXpo6Ph?1e zGM?yW6zmHnU8N&r^ERt7yfRLLKiGfWeMyrn=XAB-*T@TZF3aGb7*C|hh80izzi``_ zeW(D5D0o6@rJ>eKLamvCS~meTb{e`QHyttnY77;;CvgI941LzDYTc^GB|~F>gLdpXUtHaGeI3|hC1GK z6i>)CC)DFksM{W>AAhjesSRWILvI~0;hc_B{spYl?;kHa1v=L~*L^4q3c0eR2fULm z!OnPssjqr);L)cIE5k#DB#|3WjFy2UJaIeoWjd5sK+j>!;@mx=VTJdFm@H-gr9t3$ zVt<9~&8&atk>)u(;p^Zx9fn+&0X95g+v1fMw3*+|svVS+Kqq*nRd1eH;0XP6r-2r<=Xx^<~!KiK|Hp#1qZ7^x6SEXc1chx3b%s1(Ur` z=NJq562Xl(p0K<=u@jV5X%{HBZ#7}>M$ao)!rkkWJ@dhj-_k>V9Af{a#T1;=F^w6= z`gX~D9Hrw4sjY_tbf6kfNR1t9t+Rm|YY#Qv7HZ5L)VLccX)O*=pTEH@8H0yyWE}1w z=X7!{4xfZ899A#W#3j`1;%jSm(I0z1apRZ4SXue(I;d=WouW4268zt=tn% z482Js6`r8o&k^R;q9pcTSCY(&v))oEwRsNsHc(zx;t74=gD0AsrAD*9x~(A1>v-aC z$$m$mS3miNfF~|Uu@;_SN_qxtI71S|@I-twB4zM|vpfi6|FyA8niKTl)oe9*z*BC* z@PtYJLGXkYvEhlyl9Z1pNKuM`lyA+r0*C4YLOhYN>BA1zKfB4qH=ZC>cQ#yBRDSUB z#5gJLWB+ycYJPV(y7rw`O`wUE6+8G38~u-@^N#DeZU3;4EkZ~#QW28OWQJ_X2wB+_ zDP$`oBRjJQ8QHSFGV`%#_UyJZL&!>5&vBm5@1Ns!c|EV^_uTIK9^dP_&g=cQhHcwR zvH_mhk?#0&3!cdT!|x5OtRIwkLW>^pL}l5b;|ZxdhFW_FV?5=7GMzKub}=l!!1*!NET20 z7hiY|Z0IhH%lmlKt?6$L(U(prj6# zfuH`ph{z8aej&gKPn`J14K<#y{o`^UmL`S%JRGP8kDSvvY&$6FFU8=S$Tv)g zvH#MGF!o<LoWun3BLB1T2Y>y`%9RAxE2G&1Szau=f@=|ak$fW^; z8SKA&WI~($mnqez0DM;beYdQ2cw($HIN}KnM8*@Yx%sHX6H$d4BtorIhgz!&wO$R@ zw5VY_7D`I*K&Y{+P~+F2uf(vxP4XNYrpvP|SYHRf@Pv$Mt;G{^T??(`*cM8Q=TWF1 zpCA0D;|U!s#S_Q!zCFQOUdJau9>X%~fhSTbEL#AdxJjV{`>$wM z^AT_?X=%M+QupQ)+QPg#h>Rz!B=H(gg!CqQ22YTlod>$q9=ZJc8a$x|Ab28UDwCUd zqVue#XP~qx?T7NMa|5Jo``r>)@7k71)8TaIJ$-`Uuo!3 zG^-B32Ry-4TGnbjQTdB~8e}-T?*lmabxxA_@PubUMvU>q=HmIcz!p-& z3l~ZqAG|NMJg}m~^TQDm(+dwuTp#==u{}_q@55z(`xPhxb(}v2Psmsw)a!ky$NW&Y z`_P+Idn#Cs)iLsaoYVc30y8|(b4S66aN?o;B!u9JlE*^3!$SJ-4o}>@@~IB%xH@;L z*h7W|IO)O@`U8U}wD1m3?E6jv;qA4bC&ofLpK2Lru=Hb& zuRLffyxu`RVDN+%B;tvJ9z<>9iGa4P8^Fv# z!LML|3W@!fxfE)0PB&N#j3-DJ-3XUfT00{OJ_?tI;CLc+_tzj8?2%aA4<3y>F~keX zZ)IcXr3I{b;>7);Wmz-S(zYO!_QC9x?7uWPfc;m)tZxrk7hGdj<0ACQ&OhuBTu&SQ z7MLcr&9JuAH$ts(f?DSQEj4HYPe{BYYmIq=8utM8*(Z!BCI!!&)5#bpEG^?8aG+cZ z!Ci7Z1b@iaMA%GzTp%B&{*mxbA>B|L<+KnSPh2@tq6dF2slTn@@5sxu>%!I=WW)Ze zjWoe zGx^QL6aDLt><#nlfgSs=@{-)c{wvIzEfVK+k9&HThP4_Gh|CM8YETxQ;C02TWq6|Z zvxnw-@W3rgL?h z!0*MSi49Nag#ezo_2gMW*0){XSpQmzCrIOd2Zw#mpr2@e!)>v{{at63^>dwaiFk+1~=k~e8hvWekRX^VO4o96on`B!Vyo%_z-Ko zMud8t2z6Tl_2UJ~tEYKz%BiiqbYTBgVegpXu!vqzUFTst25g-OA2p>vpiy2ErZwNHcShLavD1tawwJ2AMQSJ zw5m7Ew3S3@JP~>&wgz0lbdD{&*YJ@=VOU|!%htc=;fd@IOh)1f-|swF!xOyLxCGmj zmgY1(F~Nf91w3(2{-W`O7RBKSsTE|c^+Hf<2B5|b!x)JjgfB>QvxCkOLjWh}FD9Ol zX9?IYytJ_3)FuMC~Z%Zp?oX$hs4SSb!7Hjj)(66ByY_{D9ybi=09)%9MLZEJMYnk3S2wFN(4lukbS zCZ4!9vd3Gv!&zPovHw~ifrp&aeVCOq5zcKdjly_h$I6i9u&iFx;R*k(ug9>K6smzR zyRszX;E6dWqng1*uO%Q8Pk7$URUS$zu?1w9niF33UxVagm;Kk7FK-^g_I8p0jVEU0 z;wu84z~rhxvjz!^g*&adtn1pQNS4@HZG_V;@kOt6;^_P9enze;o?oV=qvx8;O zi2c{~JKV6c{~{eO4;-@SRp0N^@kDw$4Gegqg9LoziCus5oq-EU3*Qg#2NapI0anz( zG(6!{A$=NaLINFw;J-IDX&S{7e9P_#mu-=hh`_ z8lIRr;^SNBojSJi1Gw5_D$(6|A})fHA3UK20(io2MZp!UPoG#zGAy1bwA!U<1gUte7wUh=3R zJW(%a#!)D#jXU7=Z^Z`1K&`ijgS4Q8{g>3;vHmHwH?TSXw4QK*#Nfhv5{CyXNGuKv zpw%rW)Ms*`ctXbIp^nW#y*`I}j1F}>4OOe~Sep&ir$X~>+lP#Ro$~Hq*9*ol9orVZ zICr{e1L*8uX-gm~hGJlw$(yq5ev6;EvZ;QR`%H~T*H4ovGWFX{1w7G~iI z(sMSlz8F@reH1MAq#V&;oYUz;FFX`W)JYg*bYj|Rk zZ}Eaq+BLGL;0Zp3(jXgsKHGkeV9g~{-QKXN z&5=>KN-^HnmOyZ&FfC4xrh8Nz68^ zBypQCP-3^>A&K9BW*Yp4C*(QKI6NU^xlqS*pkC8KJ+6b20=Wq4uP^Luxpmn{xF%R` zO4xs0KV;q>)^s`9#2rrNZ_f#yO_vKUJkc>FEidf3>$zQK2%exN?lqL%^j*j!e}X0P zgj24(CU|*nK^g<`1g+sqq1>*{fZMj%zYm6A&7JN0!^T78kMsX zdgZf)LsGl*qz+Gb$PNxq#OVdPA+Ik}So6a|G!vdUF}>emSg~B>s;zK@2G`;V(s*XG z&e2FF71)2R*)e4>T%Iih7kI)~noRJ-ku#39;F!|Meih;I33sB4LLQwEbc`qJ$%`C3 zL0iWYD4%Lqp@dN!hZ7Iv;p!Am6qBDU_FuF&&VxOqb{%ez`c?Q|YS>_1sbhiDygb6{ z!Ala)3N@w;YFrD{XWOIkggoDZI>rrkoD1r;E-WL*yKt}$0OAQ=MTfHfc`m+cAZ+d+ zO=5T=A~Ci-y!S$a_wfWNSyf@c#_O%Ep~*~M#NvtmGBAoKPQLx}8cJ&NJ@_arYw$T( z`H30d>^P^>q6Rz>Tde3Z*5a zXIofMi#_nfkG@3F;|ZUk?cT$8rcpEhgLQNuopZXe)4o$_Xk5HChe>@rQESPtRj^M~ zblhyXh1V(L;O9=;iw%M9d-k>O1|uwvMzny}0_6b%p169ML<&4n{kDrG+%^B<@EkDn z-HQ#MMzR0W;vmlHwtwSf1yAJr(;*3#A8tN-7xdQ$FL=VS)o~#`!{x^@F+fffV~MdFCI;Ih{QBgQ>I~--6X;{11-TVlq4-*8!~cSO9jj ziJcn;^*;vRrtHe@18X%nSi1w98l6NU6rRYG9|ZPayc)BHy%X=1$`9kMo_hZri6=tj zW&=;?157+YipV+ESC{4>>JCqQ$v0{<9H1W@cw(;fIe|f2nCup6!3}ttI1hSdofj6Fb zz3A^Mn6s7cxQq_*>x0L$mfPAP@Yx_qWMuz!=CDmmIL_`=x7yH{acQ9)%&&m}c%qq1 z7T}5XscxSG@WkJDqn|=o{UVDew1^i^l+A6sn?ENkt$Qr=eOQ93E2MC-h(iPiQebo^X=pFFY~# zqwjs_^!CTn^H8ViVbYeoRK&9X$|EmW*?$cwJz*w{Ju3%sc!F2f17OXWt{ipYiPQ#s z6T=f8&6m4C3k|@+6FDTQ4Nv&>Zu(~!o;WdR;s?kN!M=xZdT0nw@9+dE%txVBqgj2n zL%%f(S46|@*%FwBCw$lCod6rt$}<$s;oFN3yg5M*`tihlgUNb4QSYLCCCFovzQv%N zW}Cql8nA~a4y5IKHWW`3`{HpO+KtJcd;*Ttiy_YGY8Fh7Wu0S5amNL)-6tErDR8;e zfx{qS{ou5X`+3=hC(MqmZUl>K;47Xud4=X{JV9Gl0VunQtikNR zbWnl)SL5{0_gUYF{Z4`tp7{M|U?LpMEmJ&9I4S|bc*43AqkVW{lH5e#i3gRZ4}>yx z*cnou!V^(E@uOL_n$YCac5r$4*VK8f1#GK<((J#+%ET?_bhiT9Jc5;Ljh%4?j@Cga zJV7eScGl+J3#!LJ4%>&!g)tUu*G+&g0_9~no*<>NJ0$DBttUJ+|3r8lSn&UYb4K@e zvO{A3wf(+xPWX<0yBP!V#BfPa#1k4=k0%_nEDhGhW}CH7fU?_P3%9hCNdP>tsmzZl z&^=crml05FWTDo{L9La6gCt%a?v|KYm??2{&_f4v@q|1-AAl$185-1abm(s*|K{+7 zTu(ziriQv*g{m$1FjEG(*?*B1)DZ?J9&v39k6OtIC7u{}d6NzF(gGDcL3(U}1D zg;yG^{^k9g2XMR&{^NFX(I91e=T$@H3){%F4+ZM z;1tdSTIxd)JW)VioZ<<8?>a@`r;9xU|N7wxrZUpu%sEofgeP8)=9?3qXf?U>F*qPT zeBKTyQ~ELR`=DjN=fY-Z*3_K{=h$uRqtt9{&D& zl?DMkp%2mU1Swt_{qRKDH}#%F`>CITZopCc7lceO}arq<-K6t|El6zVBZSKvn1z{5v zI-Vd+A*~Od*z%5-Xm}#e*B%$)upz&e9D@7K%0qh2=}6aG2|Z_);1d;3q?R2Q0#iKX z3m~4*0$V&m+In-=hy0rOxy43@;OxJ6)%F}-srfO_O=z{`M^mcj48Ko*C+>mUy<|s&CrCM2 z2pbnJZ66BfjFiMfJRvpJQ0pq8)>c8SuYek34O{8~7W*%WwesbhjuwR1&`zGY!jbaa z1t!YaE6nkd@fWDqU{H_4pnffe`s)G5oJ?@+1f?at36$GpXV_VT#@K%~mLwL=>0%$W z_|+3n{C+m|9h{^Gb1S3zv}-MLaPn=YXw{@YB^Rp}aPo1?#S|DKrjF`%%er zFr*YEtSc<87b@((NFQ=#y=|y%wVWV2otc53{B*+j?kVg9imhld1brlZY zGl57lJYgXhaCjncZpLaT?IiP{e2Pzk_vUYi9S#|;OT}ZS1kW+B%CO<=J2%Co5Dg;a|XL>ur8jE*mKtJB>oiEkr*@|JfQ<2c!E^0yR7wj z6x1M4u>i`j+xO4DF6V|(F4XOb%`F3RsJ-%GqPzcWN zEWzD)V((KXYVZUtvj0Isqh?)#2d>G$8J=)9`?(diUYOr?6E?Tv2@dux#d zo*=#5k@cstm%XiEgQ+sniYFe*05qO(fAK37mZHt;797Z~=M>!4^Y@m$@W&x39>Ei( z3KO-1C&tUmZ9Ks(SRgF-|ABc!>u_0XEgt;cMRp)~LSpiv#^pkd&FhROBt8cQ$uoL* zM4r>ZTrySgz=f1Q;gEY9g@Rk#d$@zZw%ZchETXdC?KArH9l#D=0~bD*^B zjfZj?F$9*>|HpVji_`E#sC&8E{Q0*>&8eKl6WmT)!pJr9;E(-RcJG{@J8@3eYjDG- zaM+QN9G&3_rj?W6uL)ALhbQjODjy3M*OMkJJh5VB)MO~HSN&mNx2?H+;h_V28nuBu z{@_I?p3o0A_FtqKS+RarQySknr(2TZ`^^hae0t6|6FlK14~p>w>9(g~m%@@`@r1-J zK`V(}fPO84`<#b5H3D@U6Y5w7)ax0j$23sCu0j3R2KP2TVBZX8#~$nJ0$ct*v$7mq z#H;ec@WIhLoDATJGLJnzz>$+)O@0UyAIQcGPiV0;o>=wQVLR*PKk`tGj3<1G@T-X@ zG!O+(kUBk-b<)@>Eqq|!+ci1j#S^-b#}iRfM2;tDAu0x4__k&SC++FQOD{ZOAptsg zV$_I&*P*o1o`7q33D16RxVE_^9tJg|la0OE-|9P6<@ON88Q}j6n(XAnj{VmR38dwmj+TZ5xU`uh`r?W8^Jg!BjygzzC;G+y3}7v-eZ8QZ zZnTBmrEGG8(GMlS7*DuMa}}Ogea$Nml-us_t=NC{l))SJUx(jh-G)A;UI#S7NA(h1GdT|&5?Lw zhzx?V|2li=j|Fs~P4jO{Ji)1BIy{n^N&*6&&;kZLvEgf(W2{%@_}z5}lqr-LNa#L0 zc|1|h>fZ!tgxV4Xi65hNAxu87l$Tj}qWGG{BVd1h zn85yv6zg`Zzt=RmH-Jr-9On}TPkcJNs}#KLC51qEBH=CxM0kR4f3M)ak*}BBfrLQv zkOfav%glKIO3Up=D7OJoka7qj$nk_0NU{IQTd{&4>zu=!e7#@?sr7{`rQQ!dlbRn` zRpS0(NQd?4Tn zEi}Xvw2iH1eT!XLBrJQo_{xcJs6NES6H)e5DB}s*r(406-tuAtPwWwa;0X&Uz{C@y zq|p^mTYy0#m>!6c<;ozK33sdpLg&49luX77k@2iK75(g40{DG9uIV)L06rQxJp$y4*fGXv!dDxT1ST|7}yCdu%` z^z{B`;fJT+V-CQ28VrFa*5xU*l=WqPJ7&NVeM^M}!+yG(g_JabLk&X16aA(YThID>(i|pC@B~vWp^)KX z4)F2B!#Emf@Pzwzm-f(O^}gZmP+mDW!FxR=IFJ3;;mf?F;+(G3?GBmlcw+p+S+C(= zUcKLiZR&o=JPVgD|HdZ*p7{FPe-m`1qF7i+@wN$kTDkMqr+2PKVS65PMWny3Ekzp^XV>j_);lACAF>5kOeRu4WT zozMX~Oq6B{JaNB$*WB<(y>1J>*2fb%;DjegtG~&5RX2HIfhP`(3*HME%Amp)PiU|> zo}j%fjCBEad4aIolJyJwz;&NwAP!G>NspGgQbQQB4Ubjy7MJ=jfOiNWbzA7L^zc5 zhE1hr9!5&tEW9nXb5QGNpvKVG#S;=o3ppg@g(IHOq6<9nB)I$$*7{rx+RNBF9Hj%= zctWnRS?84FY}i4zwQ!~A4L*Ay#VB}!RzW)`r!SW9#E)dTkuvh>KtG;1_&E2|I(UMX z`D^eExA95P_4bcFyWkWp(!mo^dF|%2E|O7%$!k2}U3$4c+_Xm?fZz!WX=cO|qg;Z!x9x*g+=5N?!4T(k!$b1!V}0wwRCdaE zqVlXsi{a4O3-^b?y`=dD!t9po?E69(U&~^XE_HR1`Y(&0e(`j@1W=c*3S&ftjrHPAN_`Bc5PN zW&m8%Kz@<%M6?tE;t8oIhFVhywXO(S=mS>vUlL#J$~m3H7{U({X9Vl%2QQw`;z&Fp z&m8!39e0E}_5k(z1L`pd)UQKO|61UU4JbU%2c{<+W`fCD2@L zu>T5oBVmvI*Yjp=O2XqzubIOgD01prl*$h3|UGiwO2#hj%+Sg40SR4y^_+jhDt$JfVRtc%trg%d8rB zV)^}cZ(+vQr!()vhI-I|CnWuzwfv{zq4j7pjzaLnjr<#C!rd-%f`um*l_@?DHfPt^ z87}B33AcDc>a1Y}skMXwv}0R9lhj-|;|Ynoh8lYbHU0`}3!0j(Amqr*eo{@q`|H;|b$d*5~SYqMRge;fc@}Bd){R zkKb=T0SU=}yc=Fv^Sk6)SnOABZjji2^(q`W1#USa7bSRtRtjI}&Tns97;(Qwpc}ka zuRf6gctQgT@dPb}d05M7&i86~;y_QLCGmt_tl^0<{=ZMNme%_HuspZ>8=(J^@U2VW zflm@>i6^|4SqH(^32VCagHcR-cZ3f|%0(=mNH(#v#S_(%>e;{}^Uehofb#k`t16z* z08~7&?Mayjte@w7)Aa(ZKJ3$iL^xhA?m4G($nkGE>jJa#@q`dhyevw?3!Z3Uy<;GJ zOFD38SSx2$qNwnM)SpAGL4{g}2Bj_LuM?h-cyy>Ssjz{>rNNmJn*y)W9=ZdTl4n$K zfQ(baoibJhzsvP1)MHjCQ#YPaKXxG@A_Q{diGwFep2ia;F7?O> z;LJ;5Jn_D6<0|k(yCziW;E5fr_T+(GHSnMP*Kqm9izhDlQOS%aDi7x)0Z-_lDxRRl zX(Q_*eA|tJzMCT_Ooy9tE!`UgdDKQh1fHPP*9*$+M`L(p`T?3B@PrOFv;S&(Hcvs; zJJuyP&342SOv9zYCVk}v1D-f8g(7&u=3}KpumZj#>ftHjqJhJP}=l=zTo# zvy{gmNNFxf9e9GY3=ddI3uxGXNo_9cLsFjy&7?-h0Z-_|2|V$ISY6gnC0-9|%nsD& z_E4YQK^?z`I)(@JIv(n=Jgh0(b2wQv4bK)hG}Rtj5Xw{>_SAwaJVD#`7kfOxt>kk^ zSaZw`IK7oT%)%4#83p&i66Rt;Ji(OeLb&aW{1@U0J4wo7{}pcI)EmxuUWw{(&gpoy zh`J0LeaMF={x#yp2T%0#Y?T*gC3WNq1W)J>Ap41_QlN(?9uBQ~7FKK+#3(JESUn+j zBa~FrDEP1ET#Fg7-QgvzgW>X0(tOA{-FW%H!V_A!h$r|oaAtjc`O(2;VV-ZNdBKk- z^r0}Gp!M*b9iHHHCh5mCl>#yz7qCeT3{C3(9vRj2ze?nH+Y@Nek(S-D^v-EiRv+Gn0u zz!O;dCM5jc|0EpU>+{Av@YoRvI>8gxW>$+}Cr)icVa$C?uIlhaJ=vh+2`w1M6W^=W za%U}5JWjBnsUeMMc;f%TIL7)h9ZF`F#}hZZ5gmXhc-3(ihUtM0=X9T>kRDHT8czfz zo=6BAxfE{UmH!O*d8B+p#S_V^O7({k)#AK6K|&Wuu)`C20Ej2r9{E+4^{#EF>J)-M z@?H-7RgV4FFu93k|8-u1w>YPBcv1QiEI;c#O$~VB<=1&z;ei%%V2medg_;E^Z>%>C zMh%b`2YBM7?Y6FvUtXRX;)!X}NQx(xJFilp#uKM!H429^^*S0po4zukKdh?3#O%MCZmrOiwXtrGZw;8ASCF=_ zs}9uQiQ^Y@|1N_kY;Mw2h$p6`jQ)#}hqrEuRh3 z6J-DkPn0Z?X9x@*SGH+4n0&{cog?RTb)1Rl#}gWSjwhtfmGw8Nb%RazQSV}nCnV+_ zYTPT-*f*&0FHoO>LwybgTXu-Fp9~kvco*P}~>5L2n;eVSihOy7{ObvstNvjHk zHMNKXPy8!SH58ucSEYYLXmO$@$=OD0PG8-N2}L|X zo6R|>)`xzF$4Y~lvAxvP)yv@5@$%pRPta~U2F~FWcmTY)d@V0=@x-_ILrvijE&9O| z`xBkYv6iWz!m!0?`9_H+ZpZ@_JmK=7@IzQ}@iP+V*nja#jkLC3{byrKxrK=3FUUi z95(!QdFHng?7w=+FFO0LBT`hzIi2;(8mHl4ruFv0g!|v(;^5DEGP#5&R+<-|1{ZuU z%vUiy!RxKQu!4#KPiV0vo*3i8l^&kBS>L}5Y~v~~^w@tbkq6oAzdm_08qPUgCu#7; z6A1%mpNGdJ-4U8=5h|WYp6t4ubxbu$qQVpN=5HDUCGCFzl)shE@YJ@=Ud>>^d~&0L zC-jRa`!Cwx3bTI4F8NO}&go`d8}R{#y}Y;iA-vc^0w3_irZ**z!am%ZZiib2{G1yN zDP?4%f+w_S8Ba{JtTU9gOwszl(oO6bCBqXM5W@cJcP(DXv;UI1Xy_rek#N4$M_J+t zsgZ!?B~BXpOROZ+cqync6HuR!eI_m z`Lz086i*bn)%7JDKkB~)x8cdFa&U$xXl2|7<@9O;T=)JL&Axb|UG5#zU@Z--V*i!j ziYE;0znEs|2rVx__%&tci2A+7;q(K4Lfa&(EB6wnRCr(=NL@o(9!xMx0 z+g^YJP7f!E8Bg%qIUatWE(h~?;@J$d2sp3lJomBi&bp;c6mm{S`c-E*{QrS?#{T0w zX&l27Hl`lsVXG;}msmhaL;hodCmLMMnGWq^?(%XLPyBowas?jl@p|`Bm{S83@dV!@ zVpy*lC*J_sf8EK;(^<~x^x_XsEGtby9G>7**%RjP;zR@+p4jKQrxMh9ai}$;Q0vAD z;|Zx9ff_#!HHH*w92wj!u_W-LJWqyh8qkU-WL%kbvWzXkl5%|s`|Dr6UoF3C* zN(n|OL&47=nIQDS& zDG%U@QhrpCv;We-aL(!O1vzeE9n19J3ix{Y^ymm!QwQDfL|19t#uNKvT6BT(8q5Rs z9KGXUO}O!f1kB?J7fp^b>McIg|8D_2@$pJbI=s?R1|!*j?S51+8Tu8H8xTA(B0Y2m z{7PD63~a201b8AckJCifl!j9|fhXFOTGJg4(Lq`~!QXOS)>%VpQeBECq>dggw3jA8 z_Fqy@m!ESwsi}b@C9WPON^C96p@Y|WLSk%KFPG=+P@lCy9dCy^<_7h;8_HB}1E||y zxJEPxUmZD7BrkNazR>1JK0LuI%~$Zu{rgNH;0Z0r!4oUrRzJX+5<417@C2znQLwH) z?7$Pn3s?rTrrf@rA1r>W3@>f)1SzhK;kG4GsKoy3Q*D}fIj8H?XjnlwJE0{%F?fPj zk2F|@Prnp6IJqy0GI*le(1=5j#}JH=;|VR`!V{c^&0>9T+Z;|t@kG8Q8wSAueK^Mc z>wFx^$?U(Fj&Ox-XYHF+0WNzf|G;>ng%q~oiA|T80K^ka%TtYF92@X(V=^??hlY5f z!iN$&S;tKK)^RnI*VB>ES${$Bgckg<|N3oJs|SBxs82bL3OT1c=D4{oj4LA#Q}M(k z`NoDPq{bMANu8lNo{(B2sPzU=V~(N59m3Bg#>B6K8h-%w86>PFc=xJ2e8&^c*Gj*JGPQIU9(ey`-dXskoqS=#6IwWnC-VQS zyOi}KUa`!8ju-Q73x>fOlz=B@TbJp?I``{}U7J8JQVpD8^k(^jk0)|TK{1{fB#Ekc z;&l7qcTiI9QeXiM*1!|b2HPBFy{@TD2C@HIH;(94_FuXo#1mR*jVF#TavRK_Tb5ll zx-0BGW&MukFrF4HS17xMijXi`pQ3Q)&y$P(<-`*`_DEOEa$&JjZ(TzgHwJ;)#AAmu-S> zdI5qbXe$qAEw{R(VaZ2Dm>9ql4NDX4f+to>@F1SZszRd(o?yz?7S27~fQVrBU!~;2 z%w*V3XqWdr9Coh@FJnx`K3;uZg1?pz+J6{&YEY%gSll(leiiGK{ZsijY%(MTXdDdG z3s#eH=*9{XU`z%fULGxA`^8%(*MgD?TM<6%D8Z&Cqv~#hlT4ElQs`p8Pk&9ui4iwe zJ%Rc3Lf&L_;nOsUb!=o>^Ih=u+l(n|V9hq!rg>0WBbnGULKjZG3&Tmt&4&E`WirlGYs*(VlTla)P)$aUcfLh0vz95SBk=vU z0Imp4M%{d4kFA2!wD`ef5Psl1o^=Uc#SDS{W-VXe4Q_iW1Is4kOADFgF&T|E?QUlW zXOog(32zLLrXQ0*Spr2NCS!1g>ouOjglYGOU4xREmjo$MNT_s{n8 zVZ}buXl*h^kfQDn50;TnUX$@}QW^PCFxsZr`PYZb+$5RFWJs%)6|9`ukRwHtq4m01 zCgYgY>_M&Dfzq;k3Tpf=d?_(}u!h9(z=`^R#$=rKo?|tNbs-tkhuvjd55~#0J=EiS zsM~lbuhsIyi|}KtOMZDVZZa|?y#zMY|Deg3RauJ8Ovd%u zziZEg)~|E3^D!BNNV6OOcW;&ldL|44E1>gD1zGTk!dZ$tbAeG8sNv zylFDlFMCq|1b?2!E7IMtc9&1vV_~R17&jRgiss}oY|q)7&5R7Ntrc=r8Qu{WDJyA#_uL$m((-CA5zl*o9P#0lQB)yMGEiWG?}1 zCL?D=5rK!UmB?Kgw%Iu;ED43Noi=E7i+Ec zfEw=&HRcm)+!xf?4_HK=|3Y7R1_U>e%H9#C%UBSsFV}-`h8z>ZE3#dHR(dgsC)mxT zeZ~{TW%3nIjCl}x0XDw%EHM#EYjZr5+pQI_?B}cj5pZayoNLCyy$N!WjVB7r3vWCT zXhY;Ro=C1VttNa>t@`2ekRb&EWbwqiM(kAZ1h3!HVUFz`V;?~tFOX!2Cx-R2I0m1b zAIeuili@@fN(>x3Yr>JaFzKZP4&#ZIbE^%5oi{BR+#RkV9n%xO8X$u*c;eLdBKB}n zh5c=c!!y&4&d3R+Eg|D0p3s15JhAq6^&6}yN2Hn7WYp{Pa$N$Pu7g!3<1(iV3t5+# z{HN_y*e}JLgcUsDW(P;=6Hfz=LT?g_sYYnz#9i$I4Q&vI*5lSr0zW(Pe|=6 z)cQBrVktE+aG}J(!~5O=E*oJ*iHCzDBqjzPl;`5`pFA6bIzA3{j11~^GSp*bsM|}Z zn)!eyNUcqS-a6=OGFDf56B0vY-u$=_u3)j}4Nv6X3%$E-7scN>`u z8%zO^ zBzeJPRM3YfCL^HEkx$KYKS3*hkn+5q& z%m+T6C?%7sCZqL)qKsykjHr91Lz=^fq`bRA2YqObC%(Dz#0O7wb?^D_4W2mAJnAEq z*00AqvwVlcb%i8(&}6(FAzvu* zgcjoB38p6O!4vjU zpo}LXzBE|`2fWDUrHIMc**q5`!6xJT1_}Pa6K2vRizoV*?c)w_8}|GY;|blc;t4I> z#uJYllZb*R8nqKl)@43;bDoPf;qLI9Z$%!RMsoyc?x_c zW2&&K1`FW{xwc}h$5&9l#=c}fp$B4k!ZkVnf2?Jy`4X)8`O%caa0>rrTj99`38KOi z7C#(kLtkFGj)R+$^TZ5>>DA-_6;I4B#WxN-@veN!T2NAtDnhI6HAy7H6B=BGCx&@c z`Sb!$oNqhe32Z_N?o~Kl>Z2ZIBP= zh*j|5>2FE1;lGM<;*KYn`WgZ`wDs=>A2*dmZakp_N$kJ=I+n0weVkW7mM~9J{nE`2pmuR=k0n8)*uxk2~La|uxS@O{Zj_m@I=osR`X%^LzBHGLrDqrhwsMC zKiLx!3QKT2`>#5&wd%u5%Qla2gvCjXw}O3j;1N&kODg&837#k_Nr8AG_}biCP+G)J zLD_BXh1QGS)Q*FEiQvW?PjvVh9|kjb%784M;P$OATo7PM1vUGxOV)e@;t40aGgV=L z7E|B}rZMxg{@bb{N9lM%YU`oa*FvqagIZ?;HP#+#ye-t2JE(CtFov|20q})9e}m3C zfR86+9FFxVxfX{7<#-(GHu({r5M9Ew)tBl>fD8249BK=5PecPyIG%S^B+AH0(3s zYqvRY%e`MTQkjg;wEGQ#?plPAweSQ}(z~Jm?%^bevHvPGnn)Rw@n?iQ2*VRsW|Rwn zQM{V_Jt3}*p z;+y>!sk-~%$>#EdZ!!vKaUY&A%WO1_^}7E5#*Kn+X<6wDYw3eiJP{_z26*Ce1xAPQ zL}RCAWneG;pu`iLPG+UxiC(fp#}iU_3};$*-FqHhohT2KO-3oHL4X4!4jJy0SVZ_; z;*nreEe6FC@?4U&KAV6#J_&V<0_t@Nl-KNk9^eW2dIgurUo-qKL5gHehP_2fv!ien z>1NyE;pDXa(J-e5AmEAl+4d7yuY8xY-%u!N*FLbSesRYWT0D#=hS@i-#GmK8P<=`< zDD6jPaP2G!%wYfZ($n!7bZsdK+IV79cOta$1Z}vxVG%8=#uKN4S}b6_se(*`;t9eD z17Lj(Siuuak+o%gWo=AeF^8LTuHnQ zZ@Ebz51xpARAoOLO3K6rxVL-y>LoDypd2LO2`fqV!xJHSh)Tc{qz-n3cC||#ZUh;A zA;5|KS4L%Ss5z(WTyszX*nY2DY}Q>oQA7?N@r2Z4Lno=pgj$ycrIjomYJ4`-7)_{g zT2Ny(pgymKljWHWJS*e2&_c#;U{ASzgB#@-?hc+{x-%WtlV3|XebDuFSK#H-a%ZDGNZ|?6Kr?RRiI|p2&*1%^5{e3w!J&P z_*A&O&a@6A;FD!@FgoXSv<0?>V>nfDgU9#9k@$rtEVuiYg5JUVHs*oS9{>Fop5T`K z6{H-Nn=3q#erxs_c)G(wV?X4}0Rgvof~o5$xFO(Mz;yWj((g?{u&xef;EB0~nb5`) zyuxh^i?=Q}w>s>*#gPU_JYg<@$arFKeLgDj1gT7EQ0vs8)~Z6SSA$x!0uv-|9sZQq zRoGkuwDH6VVpv$;ljqp5f;`KD0Xq1FCuB^EwO-dkJ+{4pCuI8u<+Sq=q{O&xG7O#| z%`)u2?mgMM1DflgAm?;UzeKW*`IgybB7D(RUP$4I1NqK%hZ8iQA5V;y24y^PvtqD4 zWayRObUd+G221h8M|Ybq*YO0e8^9C%Yg${V)%3!y3thbPswh(@f z9JgaCbk{*-JkdrHukpmzMLzAIq-QsP1Bb4^PzCNfCj}sQ!d@mf@kGSoF+Z;13EGri z!Ml9xyaUT`ylHzD`kVdN{Qx}BKXvg&_=k4gDA-yHWAH@SFZW>94l#`Qss?ScAyAL=tcC@F@nP{;aUyj<_YPjbwk%sHKG_u))Z?H|Ld$?|`A zLJQ3B#QeuicCz02?iC3kc!HL*NGQ9(i7+zXKfB@Z_OQHtdO(H+IO)O@`UAuMi`zkF zs*T?-tB{1tIbBOvp0?qMO%3*cxq>Hh%0o>&!L;a2IOk34n%`2Gemf(229)2*U^ru`6tJ@Y$|%sX z6D--ecxV&Yf3FQm^mu|(nzHcQsOnV;!6w)04ES{kPdGPT{SHbSeG1gtW~lXzP-~o^ z);YkI8Z?0?B;JvAio`s@N)q<~19gLhCp@L#8BfRl?;)7axMuWqREgcgG1iN7CO&*RTullnUe)=c_yWH_9xK{j||iZsFCiH9YL^1>6e zz&OB-*s=ut@KXxp@kCF3(PT_N)GR#p0-m51^d^+k)02>}7ODmDL>>9fWdF4+VErQ4 zSP$&*L>Ec!!4vytw(A3JEEmjd4~GOVKkg3qT$i9MJi+SnCr14j&Dxw3a3|JfRl? zc*49`iKeU>66{z5dY`qMZ3|adk{88zB3y#_@I-1u*Y|LuN6Uc!;2Ej;hK2P4iE}!s z{bIdA>ObIni2;XoY3m&ar)h8_o{)GD*7{5s>T@AT2@w~LctXa9pk510}brIMmDv60Y_hH%~l>ykdl82n)Bbb7k1Jh zVLZ{spOFwev2}D%7?jquKu9Py12A~v+&m_*@Pxy%t_`72#F_^=7V)M zn(F^N%{iS}Qt%sivH!X4_h2y{n8Fh>ead=E*pqIX;pfM%X(GoHjX#|ahY_)v7!yzM z8gT$D-8T^kuH$-)hZ-XXHBJWVvvQbQo|i!{88e5`v>95$RJnGB z)#dp4B%Y9MC_E`Tf(6>$yqpAO3Sc*6v)?Edz8xkzRy=XxOTuJ0RR_ND1XJO@tSw&^ z*$3embuP%m>edGla`>$gYn~s9zND=M}hfkJiRg`e z%D^R=J67a}V&9)9@PrmQ;R&m=&F-^49FjcgJj{9L&i;c?PGdJi4yEju!{-_4eP_aI zoh4D4bGp5MuMdC*(>a}C{-7ewo58NvN=5>G6U2WxoZLrup&NqC~YG^gQ- z9Ueq4;0gVU#uHi;hbN>~kU#$@^+M21Y6f7q#0|q_ G%!jcj{1p7-20o)!uN#4Sl1XqHusmkD^Hr_G?saK)iYu_fWtk|KUQp~a3Bu8f%WTsLkBN`H7$eIPJ@&6iz1%5u0^+oq-u2J&na!0(Fkr#k0xmr zPjrxg20XEAd-VcPQWmq0;)#Hx>)t{u-B_^y(qd%J>E_;Uo5-JkC3Qa@Hs*ibayVy; z1bW~J^Y6}Mq0Nv#LkGekXU%yTh$kw^MiftkOOZC7NG(TmIG*sROw=r%h;zYk?7uVs zhW(dcGnYrK6Hl}u0Six*>%8G8Y^MhoctYx^SU-_k3aIhaP-7~g##KR$t$_M`73wn< zsN<~AMaEj-B)Q%?j3?xn3l^5IyRe4_OyP-Q_gxcMzbE~4Ev$R<&87vA%P0;;@x3AZoMX5Wi z6WVm}J_8B0irf#I=k0rX1C*(PCGg(4z&g_*Vb_5{Fd!m~rWHK#LM~p|e=%j=7`ENG zsxx=b#xk?Gc{cEIe|a&4Cp7R7Pw?tEEfG(INuw~Hcyej$1<2-zi#j|J`=9j|C@EAc zpmT3Y#=#Ruzn&cnPgzSqCi|~Rx$Ad<-5(U9T8neK`f|dHCsxYEE}r<|U{eH!`A7mZ zo-ozpD*~Rt=8s?>4OGPwT33!ITxF6GPiTD^p5SzMF6;ltnX~`WSX1_28gIrqoyMHt z34QL2C-m79p3w1UJfUMyctWp3@dU3wo}2K5ZjbPUeoW$t3wJLj@aIvEl1zsuNCQ|1 z9bbJMI~4}E%-l5s9^E8^MtCBZ+_2&a(%~Aw=u@Sms=(9=(!hWxG~gRgJaujK;{cu@ zE<Mu&#N+9oS6=)9^%}t`!cjCM3{zBdkq(R1^&5TlRE#Aw>e=@kE2r#(uDO^sMn- zFrGHy#_$ujF4bX!#B~+R!kJcEdliINL-s5qy4&D~ijyBap#=hXV(G;u7g>MLxIr>3 z`>)O^d$+)Odu8wyPw*;h7AzO^rFRG%el42`Cp_Vt>slB1dw~>A;0aPXTp^EBxDv$^ zJM8xtf%ZBmjVJu;+JD@KCoVQ-v>s1XX|*yLc9eR1xJqhn;d80GgVm(=29A^XduT`u zF3c}+cu-?;pgxa>`b-Y$xIEOcIjGm?d+~%Eqr+bM5QB3%(JJeYQ||cffo=~UMX!V5 z?yqhxgvm_DhQg9r-&>4?3`29$=k>Qq^s7uqhb z$&*g@Us{;OIUVUacUk}1*EZ}d^t9|kG#H);mK`CUxIWNnDU>wT88C3sSP~=gM7sPB z#1mSuh9`C{Xw`(Zv}-s+`4lP(tLno*_Fqm3RevRLPB%A^W)wU@+hPjr^8X)bBX)}v z^5F^d2d%e44)1y4gD1|uJu(Z*ltKu!n3+WbFrG*?;|U0!@Q|NWJP{`!fb74tz>)oz zpCs9EPIsbO_`ltFqFkM0AEBQcwt=r0?7JfVfemiDp+P%%A~vb^f2<{a{1R;5`&#^A zxZtQ95a9`HEx0$h4E3JPdIW7$R!T4vp7@cEBv(A)V>zl8d`vrWMOax6 z6!FB^s#I{{iCeXpNWv4f8qR+LJ4LlPdleF@MvxbtkQ!~Mb((OZ)M~-gQm+9ENz69v zE^(VMPGYyW3B7v0SL*Iot4rURdA>Ij&#=RYmcy(*NJIBO`o>3on!{sc?n zi9Yq*-@re|n$Q@?{)^V|b8xBLuEIwtJ<4r{jt%b(I@)SpNK=>^B0D%dp%>_Qg4dUYS@Xj}!Xuveavdp<#-pal5HM*&a3Esuv*rGzHx9| zPiYdv6Nl2She3v*2;RpN4(NchV^*BfG0>R@PRA+@(gMTpPjIXtqrS|D|Ocn zhG=mRo*=!>jCH<7HK%{xfG5_t9eE04v*p1Hp73p3?F5uG^W9MEdZE_#L9OqBz7pdP zH_>k83)3am57yTQQg}k1`Ln(v&;6j4jQv9$|BJ&DG6n$kIsodi0MxGsP^JXqpiSXt z&P(9Xk#C1igL|)hCJ~Brx~lSnfG4!b4o{@zZ{LXZgEqx@qKqfDmEmRsPv`?oJVA;` z)_Oc~zBW;Jc*3F4hWl`NgnV$|i5F6Qh$l#ujE7@4_GN;X{g>I$6Ek66eXxrsPL8MH z4^Nbz=HD5<;@?Iy=%S**6IzssCt~Axsg5UTo%^#6Pp~`x0NKp&z#C6kpLV?h>rRp# z7yGXVw>E8um+Q+H6VBIXI*kk|o zx@@E3tP8es7?%_J#5*Ts#NdhCaxsJ_1~sX01J*v%%GZFQcAb_cK&=CZmKw;2C!`*X zwbq0{jSGhw8ww*NJ`7%y7!g=no)g1?@~jB%lJVkbJRxI7u$f#pLOphby8VFqF$5(Y zJqj}1#LG53QRm~;AlOO+U)g_s{Y&#T`!CwE8bb$m71d#o4l3Y@;0pEyS?9V@g(F!! z;o`b74azOk1Nb~$0)p{G$99bN;fY;cxQW0M1$!S@0cGki0#csB6H)eGP9gmU!MAg# zuId77y^Xlx0jFx9G@jV9f{9x^k!RhMBCr=y{ksxRoRvW+JV7eSW9T;1@Jogqwnra> z$sRXu?tmpVfE-VdQW?p5r(fFCiSYZ0jDy2qQyrYc6QQz0!V`}Q45$lj`L}Bihpn+; z6aY_TOJF^o@U8CoWd)v~#qK$j-Tn=jGC?K*@WlO&PJ5u%$HT)bsF8&^rA`iZ(1HUz zA@TC8pA{o!7FHc2FJAD34(8$sd4A4XpP@k=M_-O7WGoHp^)%FDYN*>)cuuqhi|8OX zo**q~2J1~}9|i}*^fq!ri6^%Gx#tCERyDm%-TLU1j}mS4xTva+ioT6y|hctg4vwHg}|2jPy|mjmKUdZ zB6jAm=Fsl<{5V%AQyCRt;!!DR!V_iWn-iXxv^(M>T=C#w(qs6PDg9*VwCcReaX9wJ zwc$HqlF$7Ot6|=QPydUAowd*lPmKNCVL0now|>s*0bOcIg8-h;hiG`>v!$y8>%!h; z0!qLhd+dnNVgF?ze}U}30;K?sbGoYyy>7zk)ukyDPt5Odat|z_4;S%-)DE-O`a!5Q zL{RGppvDqIjVFW}Qw0A<(s{@A+`s+X-XmmhvNwsWY}ul^No5 z84+(IGb75L4Mb7)*7rEi@9&@E@$$GI_wT;0OC9gmIG<0AD}aY(Y!UvH@r4l1>EszB zTp`aH-~+kVfYr5N5>Loy4r~3#h1nfaE-ZjDJ>vy=d{2W9o^bl((I3`{$+M>eoT5T! z|3#WYW!Cu~S7s88b2{tV%YO&si4Bco-@(-HRt(bP3DWhhL7(G2_>GDuN)On(2NL4X z2Oyr%0$V&m+WK_X?^aC-a)p%pT^bDMYVZR4uc&3*9I*eQeXBYgF?sVoGq~rLY#8uF zBPl$_6D$6+dkz=T#(WdXtyK&xuR$GnqR{=;n^_;6@O;WL`2Ff@8uajlZZPr05-G@L z|MfcCz6Y$__Ciy= zp+4*3-@s8v7Q-HTp@Jt!A97>;WVer#9juja!P+ixvYRw(;fYuYGQ<<4(UyRH7w+)Q z0oNz*KbpA=Pjr$CI6Sfaw8bqrJxA<_Gw>Y0#Uo)MBk}fTXs5xKc*5^hr&+Aip1z+o z0XFAU&jHTS3tK$#D_`watj!#YkE#tFqsy|@!xOyn$OAvjl%P~R@t|p!6zFdyiT~`s z)^<8}9+uS$e$MIa2G!Zd`hbaAbNE&2O`(m{oWZ41cLFu`9BTY2)EG3VaVSty!HB{& zbUZ2$PslTA_*kAxK?@CH=A2GaqFJAmZ4}HUzfNHveL#dK@=Fpao}e{oG?cHa0g&O) zdp7WFfCP8riPVz3sKFDo$QFf!Mn(Tw!u~6#JUC|orfdHe>%6BPp8TEJ1hAzN#}eGfN~ zki`CrbcUR;!}@(avleqs_w9)P3wYQ5)ahHWl0Im~6XtP^4ziA#nlN??{B`#UN#J;* zdFsPiaAl|zN#F_6+lRp#1O6_wh3<#*@}d<_6q5(g?7uwAG${jn->kxj6rNz$^JNj9 zSl;Au3aqEaBY2`$N1}G{#6DXlxA6qGVB6q8eK3zFqz;$$tJ)JMctWkmff|z!H7*wx zlh{1yAn`eHhm6s~3>l{jz!UPU9?qBNbx^O_p&qwGNll4>s$clY>BW+TkVp0Byy4=C zGLXamixka)u;Sw!?j50oKgJUS-Nx_+v%<_=9Ucn;fcn< zEo;I7E7p6Kgqt$L_vD1~S~<%fPiWB|o+uPO=r-#M6Ql_XPh7hedl1U>>K3?d$z!V^ znEpC>@@&|$yG(R)PN%=v@C0c_Jz1A>mBx2Gak0pXI&e=7`7*&13uK@ePmpf=bpf8} zD9L4bBHU_!0xYj0#1mTNi6_qVx8Kg6|G)|%u(Q-B!yu_qg!iRR309;1vM-z{@yhT& ziCKgiw*)nI0qXeWd^{mz7*L;MLVcD2^?C;8m17#%Uq7@tr<4C|tW&&R51k4d#eWEK zfis(Yzcvt_XR5ptEc_uqCj)q*ui5mfFg&sxl{R>yux!lmgceKViR;aVJ!O5RUK^^B z*?%qV%#SAfFAYTDoUX^<_8VDe?H)cO5VpxD4LNwiO*Zm)B36pX@dPbI-JpD}SwbYp zq!*s(Bmp{jV*Az(xuCStew>RZIK6)ftLniI`!6l7#}j^6hack4|2~Z;(FjlQnkxu~ zZkE6$Jn`$T%_PV$osT1&9Q})vc|5^%PivUlr!ZBDc;Z1RlDqMQRi$0*%IOjQ+r;Z;)zn-O-G@f9xUUDJ41L{fG4DG8*1$))cP%`H5^dV;M+ru z<%Al~1v4e416s?t?i|kPXa{=>Z_4vsSXQ3#z|k52h$rM&kF|c@L%CH8fJG33hT*}Ry^@%VB$t7DJ)Cj%Tq4hePI0xlNgQ06TXskf+rrz#W?#f zQaM|~!Rv#@SirDvYqpevZ|vp74o_$xEuNsIA!!z#m@0|Bcp~9!v;l|dLkc_*db`0^ z*3#Oy0?O&e9Jt_c+Wko|u9yTEv;Xpx<|_7Iw76Tt{oHofgf+N(C(+CPKo@8KuG#SGx8x!C$rIO9D?UwvP#gTF(x(rWMwdx;E$`wJq?3 z%RHi;@q`AX;|Ym#W4%^lUEm8D@AknH`mhgAke2(1wLbfTdi@La7#Qky5K4Q>BG?qm zOoOwmr8$ywx()IW6i@v4)3h^mpiQ$G+`*}1HJDLa5)kl&7BJw6#M=En%)}EdnlQqT zCwPT&0}{H=P99GTv~7L>eu^4E6eRmEGfDbn|HV{-54>|r3On#bV{a-&@WhH)f!*QZ z41Zp%;0dPGEnt@et6P{u4ryq#!4ng9MSPlpC$2?4Pl9BXmc0XcyfNS$%zk}|$t?C? z-EUpk3fDy3XD|UzkYeoz>$<-2aEIO(Gx-gJCu;n7(F^9&LLfYmRDc8`Ji*srIhYz= zJ~lrj1d>4(JTbDq)oUm%xA$OCZUbWB&^cX*Am^O!i4;iTi8gkFSHYH>oPrj>c~a{O zuSvZh)S4ftasP17jK%vJL5=@|8UqA14qzIdkg-5mLB<21s}9O>pCiu&SpSe~1K3%P z4`7gdM!@@|2~LOAKD@Jcg%kUJUO5>47x|k6Ks-@c1}pId>GIX#s_W(wS!z73S2;3! zD*G?}g~0wx3k^A^qiyUaf1a0JSq$u-ugA3maHE?H;^K+ep;Rd23EHQ9A?2n_Y~YDx z5eS~p0!%!yeF2TGcp}HL&{|MlZJI+%9o%OBRb^+p&)%HV`AISfo_Js_57_Vo>APoGe?8TWD+@ePK@tn_gzu2M%V5Go3AVx$w6RQp&chSwf0?Ah6TR}yuMgksD;8ZI%G7%S zID35620uLT#FaYyM!*wwnugtn!xp#ZsSKWYB|(dLqH9mvU9k18feThc|J;s@Tyak4 zA{T^sLh3`Iv($*e{Zc0azeub&WK&BpC!Ua)F{p7P?s!7Rj-iepL4Ae{r8PGic9UyK z7%az=@R4j&U`_dT1wDqQEp&q?j%P8+j3>&-0|Y!VJ!g{^aBX5iuGa8Gi;~+*K$$+u z0jFy4FP<3KfG65`;z$b;``CY(wL5zTZXu0=2P?+wTYVVy#}ke1CoG4vR*c~08Bb)m zJ(&QD^^u@xJaJ$K%@lZ|(7eU1V8(cz1?^eO=}TAmv7X#W;R$`v&;BdTj7SR3 z>1dhH2`g|LpEV9oXcA{{&t+s6JZ>}(+~uki%0v$w$e$uaIjrH-|euG&z+$mkm0wGdGNed@-UrwcW25#BA)2iq5W~#=1_O48Sz9> zX-38q?(&0#C$tEV{a1tWjxMYZN=+gBE_Fq)lMb-r35hReeNSQxVbyV)qW-$#3H`;3 zCuF>lwT?MJeeMYL*#p$;52(i=&`Umt;3@gn0`sV-@q`wQ;)&<~Xl%n1?enjz2^)qL zzg-f}&;fZoLF>}TF?fQn)0fb$LNn8CxYbua?C``xDW=5}wD5*OKW;06;FWKV@v~tG z4OGAr$0m`mhbPRZ&F%>^dA-&eTI)stPc)YzV>}VMmYZTc@iA<}R~I}nVE3I=c;K)E zaNvnzC%RmOJQ|*J6fV1Y<=A$ZNV-J`tfIx&cq09!^JLaXd%fK_68_ouk;YU!p@A)U zVtlS{4Ou_FQiuvsJW;3Ai9*m*4;t_U>Gy9(;|cz!9>PAmEIA5c|CPIa;&GVdA}3gQ zf;P0Za5}rj0BFn~Ny06j(1R&FA+?sQwcZM9%>~rBYpAi8P~)$h@r1-+KplsLyJRc| zevs#}u(dpsf&N2fA`wr>u^B9*0b+PUevDY}Ps~^_1b%5DX2lbF@Qo)v<>k`}PYjgg zEj)3gOn5Fh)~xEokE7UskwTgTf8T1-D;{=hEH_AaVnxT8L-0|CT$JDmS}9gQ`RSbl z`IonC63jVqB9Q=iLIVo%1TBTutmQPPF0A)v`5B@mjcIzZ#{Mf}OOtOSIj5tw{uLa= z?S3NMa`D*Xi|};~Nd&+X{+IjgfU}ZrEeeJ5+Iv1MrWdhzBKr+HTRbr`YeGMmapuR4 z_E4sO8^Q&1BmkBD*OLh&trV^%1yZhWBr+J%IO5XjB`EA2DM)9k-`{8`o#Hem|G z0{ZGhGCbi{+A25eqL(W3f)Y>PmwHphA9>nZ7!TVO1Qg%Rw+PK+eKS8VS0(gwu4=MBfemxu6p z;znnp_whu7-qY5>3(E$R)WJC&X&KYt5G|m=6H=SY`kmD0K})I8fpc|m0#8V+E^Cd~ zbHEc4vjcV99!i@2O{mZBp+3Wdx8*t>me)ZWJR#e2)(6>zj)&jdzdJk>b_)BH)*UYY zBL!D@g0}5iP;Mp7Az{r#_2LO%8O*{H4=rqxVUN~gLiS(lTT=PN{_C6kFXWs~3(@ez zv3^b~S)Vc=y4DZoVQSGG_R~Q=JkeZkeDFl5k8c~;@Zifi?epZE4`%o5KrhYEIgrwi+F z=9TyB`$NLR;yb{Fi)Bz4PtbZ;8OrHU5h$VJzwOz7Fyp_MF-3Agv}t1Oz^~3N5AP%UXQy%tyzXzw+OX%32OZU)EH(MEpd!6x5P5p zaZV@k3~;@SX~HDZrD9+MEda(7@_d7}UgJPL&ViCPJOS!|UifC<$9X+qvm-xGTEW@6 z;bQ+q`%G!pW>`88bZlIaihDeMxkz8)!_-|^+Ph8!5<30k3|p?p2> zg|TaFnK-}`Uj{r`4Ef<@)DTY`9Ze%C`!A{GhOMNY6E2XNE*K|u9k6upa*{Rhgv573 zjqw_QCnU}T>R2z-@g6ACR*_Jj`#`<+gHdw)2Y<;n0CpvP!vU_$Cqa;S!cAU6;fYH* zmez*u76rLd#uKD5=7Bj<%3FTvk0(0U@JNAcw%2Dg0Z-&;@!~v`bp9hy{wcP>GgbN! zal!s;t~7#kPNx^%c!IXJ5v*UatL+1u{GPt2E%bGiWGg%oEkUz*g7)r$P;NPY^urSm z!eigSbSt@`!4vDEtS-ZOUr$ax2Cwt#br&@M?^@DoI8uX&@r3u|!QQMt-AN7_4cjpV z$xCEoafm#q!4sLkTQz}%+fJzhT@Mx6Uld9z&Y!;QC)_2-8c*D)W&Z>QHIRvW_Fv1a zu0+G?`T&b_x}H6(H?Tgox4-uin4MpCj(B36GZFoGLTcQh*11Bhb%R>(0yX9xN{eDn zsIhN-@Px#_z*HFnhmAETpL4o-F+&fsz97%TU=g_{hC}p$C!UaPBWu+MwB$9qEu33H znu76!uM{ibiAVYQ8;vJgn-Rr=CzwwD(wqI)H+c}u{%c6R_6cy&v1Ua2;tBIMhmXMW zq*ZN$W3-3^Pc$D)H58r*9lqKV^3hJRGoB#5xG%hScp4Ssc%rx;io+A0i=rw()6EsU zP-Oo_o6XN&?7y&n8eEmWn+7vH(d+Qd%doZ%9N-DsO(R&J8h_Pi4a{>jo=IFhQRmS+ zZ@6Kx6#d|dS8tsLLU|R`5zg54i!Vw%ky{5;jKX6IcPhr({z54d=kNqmA{p@Qd<&{1 z@Prma;R&0TBTuouvb8-or+DIDH!4Z-gbp;}iI^cYE8vNWqh^nV*0aa`XAiah7v7Q@ zKv+)dfS`-i0>DU#2ZrAyCeRj7NL&zHCb0of#|NQ~5kP5~3WNHr0P6Ju)MEyypBwNA zt;0QGEpBI8!^w^R9j^nUSI7@Kp3tH~Jkh5t6=ryX*LtZisZia-1W4H(1GaeLTI=pd zp;5OJpJI4|>8%hrSjB)Rx=XPo`>zNWuJqV{<(;&pFP!5l6MA^!q6}o?iJAdDDndv9 zAR4^!MADk*pWX2U>5gfzwHBe`iR^=}S6JT|DM?g#;_TV`5m3_p*FyQX5&*wGd9YwA zv}r3hDxA}8k`GTjLHk=LSeadNQ#kHq&hV=6NZCSE=i-SO68L~8Xaj!_<<|5me6*%P zOdOu!;w2yiPc)GUc{~y98PE+*liEml zR_ddm)<{5&lZIO+ZP@;?E1r;eDX1|MP{&Q7j-9~b^86GI(}NJs>Et?!^?Ny%g01B9 z6fTgzrZA2c4r?gCt?I&2o%6C~z!Texp34V6=a7RlJmFlW`70==SBdaW6>0Wm|24PO zv!igV23FyTcD9T#;0azc%!gfnJCIO=CmiLV6;DJ@APNIdl=pUT58ZucMKpxRANX_9 ziYGMS3{R|EJ>XYoJn?liNz8bHY3GNqo*v9|PFL!f(vX|Nq8>S{s==W*3NSf~CmNL4`>zxGuVv+V z^2q*60~9%@<169@>+5@)%NL+wUZ5?bvv@);{_q5CsY_XZs%7Wp1KTZfB7zN1q`D># zf$?1=a1&2R%_!8mF{rg8@TbI&!!8m-+L3d*dErx%-~)*zfz@R^8BWrGRy-lkm09bv zC8*bzP>(U8ZfBtWT7y$se?DLh30Ee$g8i2U`m+BTQiM?(&gqVshkUca6Xun#y@HMP zAqt*IXhdWSo@j10%>*f9CZQEieC+-@6iRE=0w`biUeL0*bLc2I*Hc~^;fb5_aEbjF zEyj)D2yS~S!9D3q4;6+Vd#!r&s{@|Uz;HZKaObc`tZ(!B?R)f9IEGStgMH$1U8 zmd0&7@#@BmMNp=}rorXAo~4a}_i{_XJo~RPk{reU>%zCy&ES8egH(h6=F7uKJn^!) zO?G=cVIwyncw%ccq5|>6zq;>kKrbyMz!NdnP6t?18oqWD>^HmDt)+0oV|hr6C#>bA zFZ-{JW2i1=|0Q+w@VwO0!opf$fhVMaW-wMeK1U#VyIe6k) zMd#OT@kCu|D8Un?_Qb;RI@p0Hy0`DTlQre`eyd=QyfSISIUOmkUhv69DOAD}HKmCc zPxw#X)B#2(&E#(kp3p%cJi%|jBCOYEhma_PCq`~O@eVQ!k@W~l%i}dDr(q{yp{J)f z8D;;~_G02XxOI~Zj^T-)2_z@u30_CI!Z{~XPY#Bc%gR46p3uTJJaPXoF97ibujS3) zhc(6SXItY59W=xfgR9y;XMN*n9V&L&e=$8B14ru*29wzkF!BnI2!HIma;R&fRhDRpNK3xlHtr66E0~jnZ$F1>%#2rEl+lYsEpr;Np zb518?kgRjbI0Wn?&m!SEc^&~@$~6g;Q)(xupG{Ez^}zx<_>L!>bM`6ET3#&`fUm2R zJo~*B`!D@qWB;Xvvz*hlYcSywe_mXsSm3bVZJ+FfI~^q`0Z&Bt>FW<$mA79!1xl)c zGvu(C4}3hK1;uz`-3$^{@x<4;J1av;xhn!YXs`zRuTmTOrCV`M=PfUT@WkD{=dQuA zx*^09AyR0KCo<1ZS`P`G*|iw1JaqTjbSN!YZcug$c91aIz%KB3gD>Zs!yI~m!2U}M z(Aj@+dz6Def3deTN7{IzK$REI;ZzOo!4sDo4?M#U7dJybUN~^V6J6xS z0#EF8V8j+rpeOcUQh&*Mhty!f45`C_R(e2*CnO%z5>H4>7BqK~ z<~}?jW3y1lXW%D!Mho>h4b*EjsK;wiKeM5m{J6ox$G-2Y4}Y4=P6|(GkQ|;!Fth*B z0#7uTq(wZjs`{1taFSkt;0b9fXDzq7yI{}a@?ro_c=jgR1y9_R;6e6Zjigb8{THu% z2f&zgcOruEgkG58iT!?Us<7TvP$pyW1XG`Xn&XM9>t3Zp9}TL+6N~o@z0SJG>%;sP z#uMF6UfT<|?UD;tJds-xVAy|+xif7BoOj{TK{t4fR9HJ$N`p=D#LG{dWa0^%-=Q_& z$E~^JN zW)1r@jlB(SlxNp4MV?>5Msf`cXUcIbJTKcaSXdv3;faagIyPV(e(fJk19+ltep5jx zY0W>H;0X<8#}nPFjeNkm#O}Jhm}mc$w;55^?7wL5iGW#r<*b2iYWAAF5C(8);SFyk zIldna%W055p5WBGBWoTrY-j?%jhw@$9iGq!sCc6CiY|W}>3$w}-UoXy6|(_`p1g8*34Bsk9xUUDnevhcPuzd$XAdPMp)1V2_9IO{ zctVRp@WkL;L|@{GqlGr-gp!(<)rkGq6nWsz{wuyF6)Je5X~TJEpgjn;UA6!k4I zt*`v%#S;hn@>c;*6dAH*BD_3Fl9}*?4n*Jyb|0--YrQVinmwp>J8&T_%U>IEPABoZ zu&l)J!O;@O0}sepKKv@>hV3)Z9J4|wRZ4#m9GyP!0tM5#s2GA z-d=@RKW--z<9LGfk~HY4|ATnKQHsv+#Hl9ZjzfOgv-80dJ{{SD;E4w^pob?~Nirgy zST`)d1)lvnnyYL)p?|U1e`zru`>#@R!_PUL_rmSPV6(f+AOEe7Cv>0_PjD*mly&i} zU5n!2u>J?no`O3M$uA;2LHqeeD7VCcaKVjRJ7&VT1`lYu#S=OJ%>L`$8~%&1|KioK zCH%7Yhfx!DP;udjaZ$#v+#Ok;nCBMJ6Xqmkwl(an0RwnKY8hF-ka{LqPih+K;tBmQ z#uF0T$Xer@pvE{r9p{A7LP;Qnq0c+vEP3VuW97OB7SoLso{-N!);oB;(GX@d|Ffqe zv|5#itumhYC;=vTVnFG^Z=t;Ae+Vg0=E((~@RW@=p13K+;dr8vjn`VZgz4@8cqhGo z@>Ez+18?xeerH~|HFZ?x$rFcRE zweSR|=oYL~W3q!wLCUTK+MNb!JR$YnP-{G))_Fm#^{~Jb67LON zCFTS@q}CtvesilsM`f7EnSVE>}D##r`_e{ zE1uY0m=QDfUwO^ny@jV~ZGHsva=UdE_OIE9s3JV!-}2UOn35zH*?6LpOnBo7UOP^M z=d*_#9RmxG8kIf>@<@RISv*l$b}D#+>9=aI#nbt>i^IA4@PYl;rqE6wYH&{XYvZhE z(1|pZ8*ul@{TZiWR#~}`#}hM8kK6w!f?5iBl!{g25BzE1r4;rN!hbl;8Fzp-n4GD*o`qx^`RF!Gy0}A1s2>YB?Rs z>7Oe+T52R)74~1=V^4R6-S2vSX$C`@Ng)fK;5CRDw8&Z#o?Qh`^bdLX0iHZ0g9Lb@ z*!EsGp-czFKtf_@ti%%yPJP`3>uZ4zo_KeCoG)vmXTrAeu;9KYBro6z9X!Dk<1%_% zv3_&;OF%8yjPx*bID1iEP7v@!suVuqiLPZPB*S4ltB^2?Cvw%HS{hG`mO&*valTdG zaJZma$Hgn*jd}7?hI2aFh1{XD7KGu6u+cQ>;E6vIcD8{XoVg_U?> ze;1x+;E95L_DqMxNO^aK4mxO!C+fH{;)5p^dn|7bc|;pq9ZKt$8I;{o4rrbycyeY1 zJTYed-sf=Nh47@C@G~vYXJC77%Oc^DmnVZZ!#g&TJcuXsgAz|@AugWa^`rxT{xc?d zUk})&lH8!grzje;)&J$gFPUZy8IL43Ei;bi6c_DjVH_`5d}|p`4UlxC!}5y zUX+@ta_qmPZUPRK*lD<3;wNFcwDG}~TF{OsWGt1nj;BC?H@x_5BDi5CN1|{{#4%$8)Ln0ZTXe+^G?7ucm8(ss}`88)v2{>igqMJG3>63Ec zjwi~kvv~pg&)n*B3vRr>o8)~wK`Tlm6nkueGrt&4%i;OKSJ%#hg-!9iAjcDWL4zka zO|)hGF8(bIlbq8v{dBZ8oE!Wry)?Y~L4pzS1g}fJl*SVWOOcd-CyG=e0s&7OQ4Q1Lmg*=r{q~P%p=d6U_aW52EYw+ z+zFFq+XEZQuRl1W{J(^vP}*z%mckR9@@GK1R%Pcsf&6klc^#&Gt@AM&HrHThJi)84 z4Xm$}>a=AEEHPCQxjCoP2T6FMnPU%o)|pHJb%oYh6Qf(eh5hAaDV{haLEw0zSb%Fz zD5(%xCGo_KHTPe@uMOk@8=hDmVS5%XeRpudL6}HN;1*bA-`UU0;dl*>#}ngjyG>;M z=kkNC!(ew(<85KcB6;wLCsMO|)`1pXB`FY3?955zE1t+z=%No9vy)V^nonrblkp$ur|WFQbCO;{`TQlAf9lt|26`Kot9z>JW)X=JMhFT zPma>@gw)nUt*?bzV`qjZq|OFvtUdf7@wTwF7MXBPCvi8dZ^+m?EF*iAnXGdz84xiR_I~ZaWF?-U?Y$e6TX9QRFOM{@!2U~%wK%8amGsMEc;e+|62$O?&8`<`VN)Fl!xR7h8yLn~re=d+u``#r3Bwcm z4}vFVOA#BMc>J8Cd^|ylQfo;0*2_9D?uQHzvj1|(F*qL_b)o<-zVQU9x~cHgHVe;EB&|l0%@_Xg=h!mSh7wVP?nEVLajGbh$5Faa(>-vj5_A zvLURoaymP7&grD?7#^3}!y2bA%I)F7~4BXP)3V-caoBSDQxfI2P-b!-Ca^GT@B zDBvr(PJvD2SOxmZ=M}st|C(V@Et16(or+9*Ul>o2ZuS(WXIFY12U}_Y0-iYA$YDS0 zYn81+H$q9f4um80!yQkwmEvLcUz>(b9|GI`8g-}}Tul2B(MLu+Ux^m5LOI`IrJ(Cf zNzld<_m{?fEQBX$!%c#6YY-2EzU-J`!25&cB`BUSnbN}GL=9NM6TBju!#X?u#_CD1 zXVZH(9O3F=W@dPOoi7;hp zwObcqBRxpM6Sk7678MOA_FOCoJTK8czg_S=S!UO__AN zA-vjI4j%D@)MG=f$t-{;oL89MLaoh!8lMd{MiXkB7A!BZ8gPsrRO1O5vtj*Rp4-As zlxqxv%jNnF-jicED6c!KLH)6WrggdQ{>zUizRJZ0p0F>~^%)HPucF@#_@tC1>$3lv z+K`AY&gnEz5KlB~KYA(aJfy$)zv#+?jgM8cKV7Jt(*A%$B@ak?WfwDAN}xL&aPtbwOTK^_y*;D{$$ zOCU0y*f5b_m3ZR2cX%bJb?Pv;KICElCG~1~IH!}E6__M(>#%{uuEOaWpp7RahK03` zV?!Owg8Dog>N72<*R@cOZJ}=8pqU1)v;XRyb3%4*&gu3Sq*(?}6f8+40iMu@f_UO; zjlMCgZ`5h9_y8=kqy-aFc;a>2A4}o>ZW7RsCzys94?EAu1gw2wlpK{>|Ep)&W|JF~s!}<|vY3E?gGkc#Mh93G58BffX z#A`h9wpLZnFP6kseVGo~2Ex94x?BX8}0qULLBj z@PuX2Wv}7u)uk`qgVL@W3-uNP#vW;m((y!zR(n=K2QQnK3*e61GU$LOc$MZ1Tdj0h z-XAV_?;P6!#`TdTK0KiXLwJHIr6R2NO{9i52cD2RKB%=kP~-Wb#`Hps>w_BG19f~K z>KGsFN{XQ?Tq)1`;6u6Ihc)DwAG*tSA08L&!yNkm@PrnanT$1O&Agvyn~dj`B_YIQ zNXuCal-*z?jA`3^$Yz*-bDQ90aNw`boOGFt&BNp`jLCS#?Vtl}QcjX^O@{AG*GMaP z@xJ@3TCk`NYMKmrEt-cl;R3wqG8yTES6)koE%g_S$(W}Fi6%p)2c!6N^E-zRhQpCf zPrhCW_Xf*gugUoI;VP4hCZio`GEQ*u!AIA7!}ua1B$Gi&A%&VI!!_;`1~wUzE?NNc zmo)ABUz5>U2f|yR2ypPdj_vtPJz&2d~M{+U7qdL+cx%);Ph&Qs)4D zG-$$PT#$H2)pYX|i?2-IsKsK-N4KNF#(JmrA=GUe%< z$!Mz^YLl_(t`vfsjN8qs%{~LmbI2MA$7D5qzZo9vFF`gYI; zs1FP20k6rhfAO6&AXu`W@u;g(%+ z_$+B+GZ_(&R9rXgqWGs`~FV=}t{{b}y97M85H$w;arlMW`M!ICnMZo%n#L2WXOZqkHmG9(3K z3mlxM^_k@`Y)r>*v*4Qx5)5lHn%9s-50f#6R76{N`Q_-xt)Q7cXfPR$;og19u-^4= z7F&6f@qv{5FW*dt{BKKvgkKRPY%*@l-ZJ3=Ec0a7jw4W7)3(9=8|49v$@uc)3@@-u zhKPxGP9vSBBRo6N?Lre+;JODlLneb^Y|CPBOW<6Ozh6v-*26-riGx}f12r}tYJ4ml zMtj8uxKrX};CmS>hplA13@(so<}gm4o59lhfY)T`@iS}PhC{9&n81&0lb84 z_Ni($85K8I=6}>=jQv$B`5=rMCJ(+%#xGul2f?o8Y&dc<87pV@xI7U)yx%{27_6a1 zD<;Ezturq(OvdpqFd%>@O8VP>{e&k-jY@@e@2t9#0H-$HoZ})q z6D-9%cp~$F_jWjt6yXrK`CtqU#dxBK43yvrclk-e6LI%~`$EbGueO6?--d9g7CGSw z+wW7!kTufxWJmt|h$r$Fc%264>j09;xPGae!xh%%wW^06ha&^(ktmHPQkrqqi6?lS z69C)o=sbNYT%5D_Ar~0$EH5MRgbu9XiK?!{nzBALSDMrC#ItEcFPMxj`Y+mKtk@z& zaVFz|)C$7tQZEE2NzDK}CUL_s+vl+3MyT;aP-6(7jw3=HOMv=35$ZDqsMi&6fDXi( zj7{?S!a7y{F*5N4ZBH+ukNzUZ6aA&p0Z$yZ;E5fcDAwp`7?k$kAjqRC2B`5wLzzs# z6U+OpbA(sl4Y}PDmQ?YZj1gK~YBKf|@S0VYKmRz+$CMAYy)r-J>jykhTL$j&1XEOr zu>7ly>n}pWS>unwgFEFz5l`fjlO#Mrs>XaMr7e@;y=sy)izhUo!DLK)@pM#s*8h>R z*bx2;dw-`QwAGCTo^X<4WIS;?pWj(>2r8w)iA7_(*g(n6E zB)*4QLkYEx3TiC{)Oc#BF_kbgNCJcKgv3_B02yC}w`7b3meYeSJR#3oSVzkB7W^j1 zT(F~j?n3=*pN=QG6=I|qPmq2Z569=J_`rZ%MsYBTCoVK#G9ORWu=HO6Lutd91E26) zV-l>Tfn<0h+@2jKp7=K++#2Sl9kDL#s|V?LqSDM>`B^8;p11JZJ3R4ZNz5xay-mp1 zL@2KcVqw9b+s2vTV26F%cEGJCj?lDXGSbS(#S5O`mAMz3bMJbehw&n>F zLwG_15Ag(3$CX%rIP!%?VLVad@8e%@@r0NB&BqhBi}rm4C57rL9KEs%$v7tC!28-i zcEhiIBp?${M7El^2rez$k!meGF;Px<@q}LNnv8MvhV|>r`bgkt5}@(Kn+bd(;0bJA z90u=}Kvg^;b>)!oHC{5B3{R;qgD0iN1m==BbJ#~>P2oC;H-j%F<^&H~#+}@^07{#%7nEBUXGp1_ zU4MAo_VJ1iFvs5H%Z(s^sW|yD8EbikR|LMe^n1$hS0C5k7W4}H}c4%LU!CS%8z z@k6V#&LFkX3|bBMy_TJdC#2pUUYD9%Xzsge+D$l8YHy&%-$RYTg&KzkH5Lczcs$fG zIjGO&;bD0;2Y<@-IqV|G=x_zMp?Tl~(P|2wIGlfVGMrS*?8Y5<%%fc1^H5&LM!}v9 z>&*;@JeG=D37@^QrhyPo=->{XU|Q0NbxeW5YkI?cjD0|#6g!$>Eds4azAc!Knt z0Ju%OGZH0e@&CWsV1YE{sP1kTHuH$Rt=FT5#!&- zk;j@t+kxXgREMjgWbhbI6!#&L7Eer;6InbVwa8HG5uw&3L9I)G8znXwrbv7uY@~zg zctYY7Sf7`%N?2INE1ZARfhXiY2P|>1*qFPJOQtR7;ci+` zqhJ=N#oJ&TEfmHR;jQP-Wqs>k$7l~&Zlom1;Ry}Gz!Q}mUE8w$HrpkvKJ55pB2@@@ zqK$0e@We(bpvDtF7cO`M$2&-40{gEMYd&9sf6GX4ipl6fy1*_Ndhg)Y)$oa>y!^)# zy5YwYT3C)JNShnLpXWaM;Is{-^!iIGcJRdQtg%I*q>ul3h9_3$e3TB)y_W+b z_Fr0XZ!+v6D-d~uCko3+4W8hueLZZh!Ay9fo+P>AiNLPg-Jn@opT~AkZgILohNr3E z!V`JrMG~HH^E_Ju`p3@ro&(AB{LKtUz zW{)?dERY=>p3n<)_Fqh2c4YnK(sL3XO-6@WZ(^&!z<|uZMd95P39iKxr150Hu{#Rz zQUOooERlR2{&JQF7kJ`ab(&1@1nI0B;KRAiFE4>Lp0~-K0U0_W=$QT2mfn2wvj3v3 zqbuyqZ?zV1?J0SngD1*+aCM3&eC2Nzo_OeYCF>!cklJ;q^{Y^8*x+V+>R6!0vO|q$ zg&NZaV&yBlsmbkNmsg{B zvWF+S%9kCU*y%-41D?q3JLBhlJVA?28kDb%2Qa&uJTS%+^EWvjhpS)gSRDbM)2g}# z*5&j$0D5b&2cB?}h66kib0caX98mGz+m3J(uaTNU6o>(zwgMbwCPF$e2HC9ruI!>>uj$Kd8?Dpk4<+Jr+p76Y_Zg^Xfny z=X4!QjlRfwV|c|)M`6mpnmjGV6Z#hcPiT=Ho~YD*?qvSF@SJXpDC3DIeYx4d6K!Mw z6HkyL(h#=zIhLq9JmD}ou@Jm^LVj_u|I*?^&gn>%e8_tDy%1jT;t9)*ACJQ}I!ejb(&387oN}n2|OY7&aAge%_G#h zC#ba#P~)GW#y~_6}Xd}%9RVt8Wj-d}6s zG!4MQ6QpiUV_op_`G_%aaINdl2f?raIk?3WDUSyibtBYc$2dHp7teS? zehsmfbo5yGx`0f!vHu!hJ?Bn1O9Nl=L~Uul#uKzSpt%MFpb@g>$;UTS+R%6Ha?V z*TIT0hp#V!ZWT}Fo(>Psl0a!Z@#rcqZt;ZmokN`=Qhn15KKL#Vq3{H$BxZ2Z@lUI= zui=T(zvDi@9Mf}CeaQYx1IRh2Bc(Ei_48Ggq7J~ipDf;Pg5LUY4o^h2WQT+&%sQ+Y z59Pn^P`K$KJ)VMjQu`^J|&!LW?L4A%6^;sIMpoJLhzvP(u3g>jPU4=hH zTd=b}NNz+39@V_=vpn@khcH#*tp7`1GSbw<6VbF&T z@aYM8_|N{U>=;Iw*?-NDmw24h@mu%zWjxVxPT_ReUki8e#OENtYphdfmplpO6mAcs zjEX@KJmDo1r+6a%_@?R5zKN0G3guOX9en#<3Yyq|^_4Ft&gmjwo~RD57Ji#$221K- z5uUjI(*dlBw;|p+xJY$6C)@D2`0QFkq zBA)nv!K9&|Ijr>`7dH1U^X)$<(=)pukM9||Xa5z_WV=5cp4sa06d2J@gpMajQy2iP zi^?P#o^T&_wlTaJH~M>JSXKw=@x(Ik34bo&iMO-(jfy917e09m3GwFx5KrWn#3ejI z+WKBt zTH2U%K)JQbJdY0JhJ;G8qrnqesE#M5&Rv#r4o}=& zOyVK?FR7`9{-F{C#5tYRR>3k-UjdyZ#v1OII7|4&S*?-B82kS?*ORqQvYtoXw3wm&yyc(Y9DnVm-VwV+3EO;Wf&HmAF ztxJ!T0Z?8ScZBt-JMbfiC+0hIqKGG6jK5M8=C_%W4gfOAbn^9>tc@&1TTSF2L%Ky$r-WB---VQ5a)`)DW0I)f+pE&c+w|CB%XZMbBheCgncsB+T}!ir|qsYt{V zoa!xy4Bc^Iizgbj88#7iSL`pS3| zyeQA4VNrQ51&3-7GoFy+)6;lDwoy=jokAXg@_-0Ww2>rIJV9&F8Yo{^3n9ay1*XD} zCnUI={a0CeQN#X=7TJz4p40Xwu!24~!xL-9jV#9c(C5kP|DM7VgM8vMpuE0%3WG|> zd1?C?BTP*l8}Tav={(S zTz@*JChODnUL7k5^Dce=At&Tgl9PTs(c_=T%#fiOGlGB`z0slGr@BT;g-! zJsG2iRdv7uPsp=+*802->NWcbJR!&JP`BMs^$Tl-lstVLdSzDl5&=*3lYtyOL5gMo z>{rw>d@9`F-tM6bOpfa+qxnWdEyBVRv??@ZO$c91RamI!SRx+rgbr}ApU6LR-23Br zf|k9fP);M_pr8JK%sE|v6sO^d)NKJ9;c!~l17QTW(=%aaP8s;a6QeJT9|9MiyS}{} zyjeBju_ct($`)|67VY7Q_8E(EvHrT{3r$$;zyAFB{t_-5E(4;R)14|h(STJdlwp() zPx#72C!TmHzu52uX-0Ek_w}uagu)ZwY|c5t$M*7Nf+uvK7*CiFBU&6!OqJv^JdrTr zSw7fTMacduREj(~r_1sWOoR=v!bLb;>yz<>)+pi$Pf6&<6I!c)Cp2CePiV{{p3t}@ zJfX1*ctXc7@q~_Hu>aEMnC!pwSqA5HdOd?D^q2-uFhy|HgeUYr8=lxze)(?J3@OE~ zh5KFV6Ge(Am@1zJJ5-mG0X#9k%iclo?u*`3+TaP@n6dxbs>RaAk-x4%#rgB!P99Vv z1o52azC? zUU)(Sbl86--kH*p^;ueJEnopo?@Pf!dhmlM21;=~o{0LrG6^;{lSCst!E3H_F!q)N zF5!vBm5IQ|6Dw*(u7Eo-8gVj@Cz$SWhgJtVP^HNJtB@pjv;UgV|C%){eQjv2dT^8m zbm565=PXe%?d&7i1b17Ll4(I7I5&;5Mmk zf$t=~9a?HYI-Za?H`W^K0(HC_>X;XlwA><4pM4#`6LS3v7s)X&ye->7SYEUM$6%Q~ z@SwXiN8*V%c?gOp8Z>pC4wo-$9p(z<)NwGZ+EWq`@PrmH;EDW>3#zmJJJy8}emub| zlI*%51;EB-@{>xbNALFzyOs*;~ zR`7&AG{+OqFOTiPnnRj!D_AJ(!NXe6?$3)7rC~U!WqIJ+Q&|f?@8g`Vf=p)N3E!OG z?!YS#WiSCxkYXJLhp(@&Jsd`StHEy=JYnCU)Lcl|10#QU!dw!F@C09fy&t(85LwDO-G~7%nnOqZg@7k2 zN}(a1plvJ%Y|XALb2px_p7rNBys<$Baq+~DWu9lCv`A$X|7vk2)&W-L)n*SkP6xL+ryF>Ga&6YXqn?vYf+x)0B;|oJ#rGuwPu!BiR6Nl* z$BMhqV?_Z@*ziP#S#}hZRF`eA_krpp@Us6ZRDb_m_;Nz?6c1QmKTz?67VP4QCB1n` zh9}+(zEU3!>h474BA$qlU%)&-c!HmfH;}TO)cY{DhHPl?gcdU638{f*y;JHS z;d`ltf~_=21W!mzH0wBti-e^mHVTf?4KSXNF;dn#P6G8==}tT$&r6_QGeJFWg8JDB zqvWq2{Ka(b2G~^#-|@tnMpQK6iO((L++dBt@{$`*XiyQJDAAv)Z#*$YnjY~){HU}N za7`0AV8aun?`G}56CZrIvcMC4C9#10SLD*XXJLK~w&I+QHkK`{H(%cowH&^xCp&LE zp$D>fBJK2WMyQR8JtUbEPjHIa3J%S8FJB$VC8A9km>&DeCogPiAumku1g~0B;PqrV zz-Rx}SsG~Y#P;Irj=;S+%H7@uKQZMH0^4bD9-gQolT>)Z&)PHsR(RGaqYsp+_jd5m z=0PJHz#qRH`Hg@l9LK~LghA1hcq+sGixjjpSlwsN><4fX5tkHPG4ZUW`SX1=Q{ajAN24dgs$r)-4TBuM@W6@v*YG&k*6`n{1evffY%4syUk0x7O)Z`e zK7A;`;&_7gvQ+5BE-wKxtnuXn%%czD@Win)B#Gb&^Qz$?P;UL^!G;MD%4 zS7=90#Mpm*w2f&8?Rf>-0EQoy2b6fCn9I0Au!ZNuZ9li*iJRU;OyP-!vr9gNCA7Ez zPoysoILiGSPYjip*LZ^0*|%Xq9RR@-)1{da zPb9972!m-YwmlDm&6(Dn1LtV*5}p_+2?KcI$oUIBp`+RL->u;;(wpkS54RqBl!dJu z%T5_jtVnx9ybuyRhP17>)Fc9;3A6R_Z9 zSow_=QD}HV|Ha^m2q|{M6SRFcgmNlc5e8p${#OV-sv(n4c*1{**IVe3&4D zjLiN^e~>t*(;`4TF_L;>{`}>cotFb(eW@#g({z9pPe^<*YmG64gCx!fYODd&@kXd) z4(suRJa>ebz(pB1mDZQ7T8KfjVDOi_F+wUQ^+`2dP!QEgQz42c9J{}354T6lK?D0Q((fxlEB>bn!}$-!aTJ0lti1BSgXS9W zgD1Yu_r1z`FT2JQ@RKQ&gj+nJ2UB>$d&h`HthL?>YRv`IxNE4fm++^=U%@Vi5@~Yc zoKD7J;R6|qS&b*;c`TeH&t%{+xh{ixYzFo78S0M_e3rl3v8AxiI58`p(1UM0QOlZ7 zC-z^9I+47^{wuZT-Ij1umqCSV!BkR6&0*tQWBhVMpV4xIgeT5T%}j!n=W$VjCupTO z2j!>tFyvoe!d7S*7FJ{>oT~wac!HKfch;pi%^40yR4}r7!9Bimv4$re-gc=6+tONJ z4ld$$KR>+vEv@MHP&}c5mU!aW&w2M)A2iQJ)h(Wo*WR#`Uc};w=DM>r?uFJ2Tfm=J z``CaZJI?8t{&j}`9hLx8JW;IMf)3EuvoBA-@Wf5~&y^r$4!q#N6G3C$euvd#>#sX>J^^`QrzkXjVhg(V&x+Dl9-441ex zsIe(f$ETr=Q3c}(c}@-WSrydlRT!}~@Aep&CEG37Mt<$WfEWqn#uF7Kc^Xg5ZgO@! zbYTi(D2%k0hh%tSgY5(>*zv~zUQptRp~Ie-Lz&9Y1FL9&JD!;Cy*PO#o=BW!+<|{v zEc|f}_RxoioYQ?;&7?4%7`SEUN?7a2uBU!*vf07X9x$5JZYRhgHDA1VqVeT(ZQ%M9 zw|>@xNg47`6;IIOQ~=7??)MdVqEObe*RasUA7$=CJ1vOdoK9MOS*LOPu@g3bQ=aAr zJfRPp@kB&@k14Fp^0tssS3_RI^@oJuGQof+YDl37p76ILG7V28Ini*6Czy`<9mM`i zAHuW$%AQX2KIe2J=kB=%zn)o4QU{)>99(`cTslVzXz+y8=0dH{gIc2lk4T(8)L31p z@p@2WcA$>iLkk(ZgP!vIemS0yXLvA|T*t#cI%tC@WP8r~CA-kgu>O?FDa#ROjIwPh?K!B_FqLDyi3E`lf;C0;`(?hpYVkKFT@jCh=wQ9 z76hN?&)@f0b~Osh)Z#X{AfF8K;R!dn@xc?94n%rDvX)*sK}oUc1G)4Y+7@=`d^4mz z4BUS2T6uUk$MakTVI>{>#1qDcX>XR|i7MX@-iN>Zr1=m}=r1fhLCeK1*7Dn6HLUTw zTAV*5Jd6o`JP|E}!tB4wx1l0}{THW0HgN5OUTKZt3o8*Ep3s6$Jn?nR>OX;ag4Y7+ zF#mtk@;-qBb+8;ycrTh6&6*POsJ&2LkFSSXvkbLv5f+o$CFmga3vh?TFvARqV}w=` z%LM03JOjKgW13LXrLvab2`vD|6Y_k6wO->uJvo@Pr1P;0fADzbwWRl;Wkp?Djrf)!_-3k&^2TwdYI%fnN(E9YTK5!FL9c^LiH#yM36Iw`* zCyqVcSdjGv^H+C&EW#5^`KQ4l8l;3Ln*Z~=%=%quz7xk_%a6rKuw(zF2Y{T@9j;0x zE}ke}m;WSq!n0}OXt?KQYi?rk1S#MhVcVdd9PQzW^no-r;E7(2AB)2B|35G`#uS{y z6EQr&*Ygwj{mN`64%mOy2`F|71}&DLHqPl@t)Y<=Pe?5{oGA62@IR^Pg8!th18QtH z)c8)QFa_z@DMUMYqBiRPPnWS$7!SmJ<1c@g$ zHsB=`p7_xsW*7_~+Kww_JV6>`YuKVp-*I&yWg^?kz$=L(7)`(vmSanP^=JR3!J(Yf z@lTP!I&0uOA};X6ktH;O;|Vjl@WvCgwS_?0)y{)1jrTqFgd9GTY=tK>Bxn{-(B9n+ z$}MLD$fLCH6<}3;Ai@6YTFQi<3pl5%o3SGe{^ix{1K8uuAM-0Pw7Uco- z@kFE)E3p46B7dXVe@*H_6bt8cOefcY7WyC=feUid!|f=gF8p<9|^;@pG@fs-{g=Nig-ec zTkr(dugLmR6=^WT6LXVu{PM#SI&gp|Xg7Vxn&ICAS758(xtYYp6OKiy?1pjCQuKo- z%2y5vfX=)MnhN(nXv7yK=X6#wpn@mXb(q!(27c{M;vAk}N~9{R^xsgbB=Ce5L*WVU z@uBbM;E6k4+??VGQUh*4%EcLI!V{TGX;#1!{Z}2@2t5vMdJ_mwNc}I&sYPOVLh686 zua#N=_(I}=VLcsy!xIu0#9CtmppFmD#uNG<4o}cB70+6q6+pdSfV1S70mjPb1}rB3 z-$Dm&XC}cNqno{Rgc;}L2OUpnQ6Zj~*NX}>Ji%+dve3N4@cj89Wp}(>!V`Zc`M!dm zhEL;DjQtnWTNmMy3L*y1>3pTw5>Gr@yDk*EwcdJrK0LgBHxqhz;+qU)^CPPu!FbPduT;xp;zI@)*{e(k<@}f~mdQQ=N+^{zuYz$MxK{e;CP@ktC}q zn^H#h-g|SCnZ0)i8OaDClFTHLgf9uvhisvQY}v9>vPV6~c|N~?j@RY&yq@24-|BmO zuj@Lm_ge!W@I?M@3+!0St!WWh=*p1KS##Kb=|+Y9myZ-Jb58f#Bj`G;*LKnE80fWU zMWF-ms+k0Y;0bqmA&)2Gf}`g^t&N0Q9|g5W0&1Kz)L2QV@ltT42FkGilINx#oYTp( z6WB_|PvL4(SI@#^xsHN%ax4Y)>nYS9Qz$JQ6QO)s4T2kHHDJqtC+@V!YzQd{;pGnd zFIpK(!5B`j@Tj*Kt*25u=TKY@5+iYHGP@Pte=Ko3VrsKFC!!fE)3!4vkK9$ zUe0n(H>AxYXJ{MSg^@=*p#h3`f^QMoGx5ZuQG5f$6OAYHbQVtp$;BU@pe^+@z1OQ^?~P`5L1kbJDc&R3Zz(7#<@w-&Jj01>!4sp#g}s54F_X}WCmiP4T!h+M1?Ag)2prqW|H1}n z3f{`35$AL{WN-;j&|*9cuH&|+JA7FF%=2c@Vd2Hnj*#J90>kk{ljPNfpiKY$nT99+ zyvceGdDP3G8=g4%gT`$xW1Uy%!P zo`KhC4~T#zC&{EQp12+mu?mJu9XyR5HtUk3f ztkz5>5b%T+=XH~Y5x)4)$Mjr+OsA+7IR&z6j?vke4=i zf)v+1&_WB9@I*gp;>8nDyKhW`A4|wj44%-3KzM>rzvis3xk#c6p4f2xeL2Wu2>Zft ze-A0(V*kZy*az6Oh@6b#iOJvdUW2!8$ip!_QA?7O@dVQmn<3$eL|WpBPVx_oC$z8) zPvn;gKs>>;d}~%tOu z2>W~9FK7;fCH`Ono{(pdu%0}JfI1clbvyz}`|2*J$0bm|HbMQ@2OI0dclKZYb-lW< zPGoASF)ZDyZANuCQopd_iK0?CizlWG+4gfhp5PVBTe#YBip4#cyhef&@WdytMNx2k zmlY@XKuI<5ha4931s_jnK{5NUtNTe*W&c&xl-vVWA?2aZaZP2zWvZ(D4MfM|Jq~;*UFUq>U#U_bgr2lpFH);N z84PQ7kew9!2@R6N6YSz^ur4rKk{0pA#Xi6D!yOKC0fHxJD^G=Tt9uX5ZzU50?7xB+ z679nNOM?gT#4u?T!4pjRE`^`V@A@+xHq;94zT=j1hp0JU>VLUPC!{0~n&ONzc<($q{5@7H|K<<6}q3K&8u3qp2sjw?x zI}J9)6P9w4i6^EzGQx`|lImx*fs^$@9#8OTYR@`XdUu|Jr$cCra`Swff}O@ zHBJ@okytgDCh;onoYRH8Iq(WDk>^(Mx{O`Jk{Yy)C*&HIwI0Vp-IhW9c!q?~&m01i z{yNh%fG6ATz~bO@NAxB8uQyF^)`de!&2xbJ_sD=do-pfAg$kZ2-#PGq562~(XPsp=;sL%7Dj_E@k*MoX(5B2yS>NXy}7M(+< zUR8-)#}oSC3QrVmxS%QP!c*nNIG!NAqznvpl>Z=}SR+Mec;eHDpm&fDdv-o};=l~H zAb3I_=;4X+l8lHauC9*W1iw_>lNQyV{#P2qIWZ?;3ky=7ZX^Wb{m)3Ifh$lQobM%cT zk|)O`!Z=ce3|L6N=x|P_MXh+E_qv^H`1ALs!29!I-QqG~hbJ^(08dCQBWtZ^f?Cr6 zrFEnfbaexW(oDVgWWXn22VWkXTlv%G}(4`CX}=c91f!zxCjONI3{*|5dmPqrU9Fn5r^^tFF7z%!4OtjIwzF z%WD7|o_IgY_bh8u$AuRT!N2=_cwvSo^x^f;tWibu0+#^&r$^La5sXs2>|pb~D{! z(RniY$~oPGW;`*&6AjvzD+kkPZ7u{GaJ%)VAD-wpjHn_!5j8gFLs(KTvhl=BdEt#G zn05?}e$ujtWCvIGrSpl}K zb>m=B=tmk#c3(X4;fd{MXs?08cp^M){SDU9`F~tH4J92j0(RCx89Y&?C?o0YzkEs^ znhUGHu}d8bXVR810LJoD)gI={-N?T_?By=aw0I(}lera?_PpFsP8l-$;E8AMhhM-8 z%_U(4PwbpY)e4@_Kyy67t@BRSpH8p2u@<_Pm6Jlw={#i+4^K$lJG7G8S2$Ga-{5|! zfq@za4>cARYCK$TJRvbLP@juKeKrPld>sCkF*4Xju9M+fIaY@EWqS!Lie}(MQfqs_ zl<%;#m%E?9%O1At)^-e|zBxE!e;l;yCrQFoNF#g{&-@f6tdt6ra@Z6{`N6RE|AAy1uMc2&*dQj zo@jYzK@KRd13ve}6WOn5tYrT+^i$QFaEKQ8a86e)D=32Xm-%__Y=uo8TadhfCmPGc z6Fd=Q>opEiDsy50l=QInF!DqLP7v^fwG=+#36GB3tl;Y8o+OOo3DTs$_F(^|50%(| zeI36jiFH)(87I%dY?CLGGI)Y^pTv|ruO(3b z=RrwvXb$(bYEs+@W(3Q_S@vH!yLuOf%ZBx3ON}Q;_4@#A^aCGHXkjIucru&O3_Q`q z>)}2qDer;M_m4cZ#uEbrm+{2MusyXab`)fY_D3IhbdG#MVE@JLs1EGl8n?S5+z@c> zQ8D=VTT+Rfu(CeP#}nL^rF6v;mLH9qF!u~e9>f#+g%VFVOCc_vSXX$DFRYnv^<*BL z-Cb_b@kFEqIk5k-a9Ys;_T@F5E8Ka#`R~f`T@BfQ;0Y~I#uM)cgnsRUCpyYY5j?Sf z93#PaLW4i>#29Ik#S@p7#O;ETw&@3#E|U!_o_HmN+w8yENFoaRFR7J=5mGM+ze~*& zY$0_MaFxVP!#ff`*%?ph0SBJYf_6M1&rfqu{0k(7WZns+Ax0Z-_K9-hb=I_p&j zJi%*&+mORBcKqzW%FeYj!2nMQ(!>)FSCR;dCmL;t_kuIG1m&IrV}Hs8FrJVaa>$z} zCR^}?)RIB1CxIGM4hhxp|J5E(NNgF@_!9V^4h(QkC(oH!f0D6g=qlq)a4~H~-Y{N{ zJE3lSpnm+p{au{%wuI7NTN}zLzb#xozLUuU^5Oj9Upw|+)do3yf}=IqnR7a(zT#Q` zZZ|XG6l}A1K8f6T!dwQD@WjY9^HxB41>^xI+VA){8XjM=m&sB*p+VqyqGj~vx~wG? z!X7@&zMP*o<3=?dU}OIkd*3soE$4LQo*#P#^O6#n0DC^psBFNkjU_l9PXy)KvK>18 zE|9buN^1OkNLdU6k9eY#!-9dZzlS6R;)&$CM84t)TEwct`dT!={_AVkpggRv^_ClN zJaKeLq1SMT4#?sOZr{$c{*vfH1vQ?iy(m2x`uMG=wjL&?NihYU=q4{a@WjF3J42w> z)#&;|VP?!4qMxw%uo)EzjPeK7WHc1`l-{4(hcy zl=RLSP`AlYbqRaqti7Wp3>wzpUTyfwXi?M-I_iTBJh8CnlB`yE;>mw8pJ1V;(ny6T zX!pAg4J+#pKAzCxK0GmI zaLDTxc;fOXu6*!B<;hkTpxOv>Sxd43o@lfD?0V=C;`eJ2JV)#1R9H}p9`VGveeBTj zgw!3wcU~t;)`D7p1hobMY8-NNJRz}&P~(wcXp9tt;t6>!2^-0?3Fs~3lkldDQNU7i zodQS5u?mckuUGK9{A-3Sv`7|D%xoTJ$6C_Oioo)9de~$)!xI{SfG0AB`95L&x5u~( z*I|3ou4CZ(BJ#zZbGpe=Jd7u9uG+T}PO0Vpd=5NG`_WivrhyrFqI1ORcC0stA0t5< zPvk$76jv;Db8@oo#XNj zINv=VUn%iKoE!|`2`x6q6TB)K#F{cgt|swBbC+_BU;_>0!4p}n{7SLDK3KlF%|89uNCb)in6}QYrpJ9oYS?JWL-S5 zcPJ5Ec*0x)1@XklsT)s2SJGb&z{U15A%-WG$VC{Qc(H!YTsX9)G)UnI(m?w|9&g#V zhn&$6K*|0qHfB>Lm{d+)LgES9A#%gfdU1*;8cS0;o(Otvx&_<({)Ex-#DCu%4nsLr z*$FF_lEg1O;Za1MVi?Dht@BTU(jM;y<(9oO-1N0JH&>j~^=|m78mxA-Wn~*ULj!K{ z1XI^P8sLdr18=>7J!`ucNQPVeWH19yq|IPL8&B{GHw4Z-=$*C!GE7K=Bc9MeWcFY2 z+qVp3y}SC}r0(#e)TzVzI>>`3q+X5nwXn;_3&9c+x9*B3Bz6^Q{2J647O2m$p+3uk zI-U)6Obd>Z>sok7j&0#D*}lQn8n})p7S`S7!usBmCN#_7iKcC-B)}6oD2ONi^j-A1 zKAspj@ziKuNZ|>aDK*Z(CvzmAA5ZWaVk?~Px*~ZMJRPu(-*nFDbg&dp^bKA- zfOQbBRdxQ-|CHJ}O$PmF1C z#s=D4?(jVyWV7Y;vo8AyZXw>nAFqa^bUe{!{KJcIb;xwfD43i}9y)MN$5fg>9DmL? zb_qOYxADg`nB^r&e0V|&hVVqQgS(rv)*4=@b$n23d7#Gg*TEAK(+f4O4{njz9{5t8 z@55SwKSTCG4;kl&=VYu87SxASctVc(S?hKms`gWE=m;%!$k6L*XHo7?}?hN#Oa^*A8O(WrbS&@6E46+7oJ#t?ynUbs~<4zzuHRU6X$fi9()Pg=YIJt39fhlU=s%) z#mU27JW)|zF5(H&Wc=XCXN9sBLNgT-p3p)~Jdsri1LFzOMH@qYNXyiKv;Y4P+&Jsm zo-0hw=^k~z^s_depl#wU+`(_Kmc8)HuQ6Qs>}=CnVMxev^1d*j!?spvFBw zefA0U`3IC&z00AFgFw9&f_gjz*U8sJ_)vaaphNpcjLzW+-B9BRb14MJ6Qg=ZraR&Z zQh!rmfc;3j1o&);1liz;7c*&s!4oYP5aop@b}h@j8j3AFVJ|I^Xa5zugBMNgzsiNB zc7V>bf;NDj8hnH&8lUwq$-2naEBt2SiQkFl-)iBB|Kz|9PcTh$8@iTye>e^<_W1Jd z2#inuT`?F^?m|!&p5S$b7YzSud2=%S+PiGtA+VVq@ZyQ$wRp0DCwOgN1D3tj^h0Sl zx^_E<0`Rb(1gqhRw0;4pP}0}#!L^X znJ~N{&xN3cUO3_jrrbPO@0M#s_)(4%VSU+Fz(pGLi6?mVWY3x}r@VB)6Q?>B$_4k? z$OSc?m?KT7c!Cs+1nA>BAw3q}3YbwX5|+_mSUk~J5MvI-$ua3|8{XRgeTl2*d9+vEj-kESg18|FjDGbs<8i(*m&4V;$z`z+AHE=vc$d(^K?$DNnS^l^$Dl0`!?7uv#hc$(^k6fPBgyU!#Eenrw z8e0(l``Ov|w*#IS(C5NCxIWsAL}@%xauipcctVT6@WkC&`}VRvS$E;{P0(zkk4#1y zUG>2lp5V2HJL?xmc3$iSYZlv=)e_Fuf6<)NNu4n30#Yjo`$)ZzJ)V%70jP1qP-6$7 zq`AdFjUj;g91-fX1gPVQ@Ux65z=m>N0hh|L1-v0&U!b-8W5D6GJ(Yk5_*QHNzb%m> zN<8tRKO=T{qUEsHiBQ^q&q9W(ctDLOhRVwX_Fu7!udacA%dN__0Jc-{;|Zqb2C;tF zIOJd_=&<#`n}%@m@1wTW;EDg_!9AYf6;)o?rPPgU-z(q=kGp1X;Im};qKGH7=oU{% zss?N0>-V?2Vg5dnG|M@i1~lM_;zj+ZvVKd-;!x;(%g($z^wf<7p74`mWIXY?;o-7S zQuhl&`Cs?P4o?)4Ko2}IanQyGaB;l*jVtgvEo>)XN!^HYPNzlMc%p+ehvSK`HScG_ zX0&pTgeyjC0F04zaqp&9tjkuC1S~uu_0#b1OF6i}6H-TIizlR(0%|-pd>}EE&|U+B zIH!}?3f9r`d==)DXDqO@9(3Ue8EauJrNjN99&OKDA-v4zoUZSfsI%|_Z5W531)mx_;Q$RJ!xKp>*kR%c=k-Ywp|m5q zK{-Y046k($U(g7aIAl6r4H9bgxfI+t>3r3EFq5f*ALZD8)w~n*1}^t~eETlE_5Kx2 zD|kXLUho7{<{_*P<;#lR0Dq0ild%}KzHGsZAv{r80uS*7ua3LJ3a_isD2ylC)F#RX zPlU)t9s4h{mWv9(PNY!%DT^o0^&}YwPuLBt@eo$kfJ{7*GJg9B)~B1zpjr!0?C|7- z7fr=}22b!U`z@@c zf$(@@=gW|btj}eAczg^>oA4eew=VvWQo$8V;Cs))=cd8BkF1F9=A5pPoc!Pkrtq4> z;=de29iiI*NruG}(ao(3!}O9e_=+cZmGuF7-yIP55Hf_qS6Mu!soBtXstiiwiG;1I`aoM!8(YJ1Ya{-;z@t)c54GkN5@s2e18VJ! zHJ*_8d#EwEP~-5R#^S)-@;n}PlV@@;P{!rq3mKb(HRbvo&ZgzN13W9+X{cI-eO@%W zWCb}C&CU%|cXe*?wIrU<0wg>!)Ga)THN#Rb&%t8lrGb$Bmp4$7HzlcK|Qx@x*^pn1v@u&uI*Ympc5aIy~TUqFibCEmiBE*X^r1SQkT?a_`m7S_^9rbAmQcqnpkBK`J$`}u zH4OfdzYf^;d&>ZG=-0PX!q?(>f)>{K;9Gk<9Hqfbc*0GR zT=7JV$DKeZ?Zhjf+~RmZ9#4CXh7}viL=yY2z~GEF@c57Y)$76>8svp1q(+C#4i=Wig^@Sh8TM)H~Cp0J!PmJri^OXgjpcUXYlz)5Y;b6Vs!V_<%FAZj$(bn_yI@pAk zI4|hKZh8t#beCXBJaK;8uC8!oMQIGg6SRicgg>9jg(#kA5$jz5uHJd+%&)?DBI_nE z-|@tddrtSEOxs?D$I7M#ABS0<=?_C;$45We!EsL4NG{Ov1g|e=z$(9r5zT}r29*BU z6UIbWbZ!aFHMkZ}kj7)ndduC$Oe)}sx^1ko3gHPIxWE&ceP}Yl6Qr}o!$PJ}zfQq^ z#U{Ii!(CG)=on8VEaWRMo^V?J!~-tmQ*8{q@<|4C@I=>LE80T0h<*HI;faDre%nJi z<+6lYzY4X6tstI|Iu>XnvFy-Y2f8??lbANvKP0XNwv=bv&{v*s!MjYsPk=hk1@&4N z>hUhrZ64H*d$@jR^9y<4quBN|iLw7G--BNf_Fo#j&p90_S?5{jZZht<33l5$jiXjP z@mmH)@x*^iRxg5*nmh&0F6Ey!1QMFUH#F^OoaI*&KGK|AJljssL%YNKKFw<_78RZ59$~I z94OZTaE}}dz%==K02}CoIy^C>-Nx^E@I+F#8?RwW7fFP|6Z(UIC(@*HY`R>l!4E}j99~^i>ix2Sxsgea*KgcH& zym(^lb%*zGl0MkQ6P2am4^PlC5Dn#TBMfe8Bcj0*AySmd{>w~WsJYB)b>C0rcnU2rap{~=#w@q`xf;)&zikGEsJ-)isYdN6ZlWYtQrsRl^k zi8|Cfv(}nNGdv-6Pf%+gpvFH#Nqap6+ejP~Tr05<@V-0`g%#zQ2%IS6qVTwkjldkb zQN|Nm^o=Lv>m+}!KUPpq&FB_1rfWbAo_N!D`(4&~+6^I+k^NWbXeRsEe=$W70$;mJ zF+83)??tr-o~XDYb1FQ)cwNn5u&@Ri;fWT(JDRa3)Q=aecp~da(Q>e!9>n1ZURnRi zi6_d&$GnG@^W~cu`>#ijYF&l<8c6^a=X9iQg~2AjzTOXjJ_G(0^MQ%ca&U_$tSxwY zhbKs3?hPaFmjB)g{;XTY$pyC3z%)FO=^9*=wY2hN=fD%D4wj$c1U=|y|20)6>p7=O z7#@2XcBG~C0QBcHdnPj!Lm(8A*l(0{Uk0N?vmJ0_+H|}U|oq3f%=>n>a!xK z`%r%$q*RqaX_Ha2uuR;V zjM)=&znBG)YMD{6fDS^LjJ~9jv}V2YU8PGd@LdPT>Pa8RWIWpBbzZyB638J}N{Wrt)kq_toxl)qhHcq6AID4Gmw4XigABhGF( zFo1Q0?bcWA;dgfXuCRp;TAGYiO^^9mvA!eq@vuCt=3oDq46T!cS}OxJULI=9EL?X# zjTbK_Lt|&4K0k+3cC|5J~W6EN|UkOVr0`O_;!*MsF(~%kM)Q1Yc5D#0x$V4t1ulF)xm$0F|bpB ze-GAs_U~X4&t#JX~^F3U^G#^~z@t|NUh$q+Rj@lvB7zkTNPBikOVA zAxFG`#TW35)^9}n~Czd)1GOAFvk#{n^_*BgEi0d>CZp>7;}#Zh zhJFDw8D|T%E#EaBMpj$*;6M0tMPTuc zkWfi>G$vyWDJNCny}d`yl!O)XNaCT%m>@OPnIAXjBKf`f*qy40&0vk)HqA1 zu~tx85WJv1bA|fc1?t!<43hB|_)4z9pragz!8v;1i6`XO;|rb`*x_s{>_#Q;@RMKl|a` z_|G(J;Ry{g#1o{^dayqBF5k1!Fsnl`BFRif2fcv96L~B8)@A*eb`pD7nNRWJaB8K- z^>e{f-V%I?Cth{l_Y8Jx-G_=qJi)1+0eN)Cg)N>KK56xKIQ#6Zi>u)|+l6fPOh!R3 zxzWQD8kCABnr`0Tk@dT6J4yV<6Mw_XRD}!lf*((uI#(QBU4erJhon)d0PtYPe1DbK#?hd=^z!{#n9JIbA z>*tk2uGNNwNt@Y0nZ7CljW+sn%*emzLgc4Uc*5+)+sAOn2x*o!8L7O+iGeN^$J1JHQl&iqaDSs$q* zjdyrr!QtCgNi4LNztCkNSSJTvL39KScMTR zJmFNkMhSRktvnFL6KO5Be@Vp?T|4rW4^Kq&yLXkl3Zpo>gU;Bv=LmSBE%CHq{tIb&~}m+4#5iF-{J|W zPlj5f2%7}oBcUHpNc$z!cx9+Di%{d1;30`!fWPGVC2TFvFyI;)$AtG}ECW`M>lrvf zj%lENU3-HkR}i_c>R9aouDB22Vtu49R|tCkn?sPJ_E9N<$8w zh?k8#p3ow4JV6W50oGUfw#KNSVcAh$dYO#D8lZzG@|uT^Wt}lvnxOFnr}ypQvP$xa zg(tkFxE@cuawNJ8PqdaqBRs)0SLQ1`ky8Sf@Wk*QMBw9zvjbAj!em=HnKv1BdQfOG z#y_1#l_H*KD#_h=V%w6x6JdwHtLnMI4TB`03s0Qd8rBF_E-e$Ncw%mZjSW0?Uk;Y> zL<4E4!xK`s4YhU?zLfecSW5%lOooTVakD-rv7E4=#B;&EdJ%yq85% z57g^CsKqBpD#!ZHIC%4Nd;LZIbsqn@VOj&M*BQ!7) zPh4JbU>57|m3>}~ge`p5mg@uM)m>{yNVJ~|EWao0N(DI9Od4YG#E27(a=?G*Bw&>N zSB0w)PvQDSw_e|Xk5V3xbb=@JVjNG9%DI*G$$ww2u7YeTa?OKXPn*e!ow2!$1k&OO zS{m9z`Dv~XXEm&3R~Z_CGDyMx>t{VGKTSrT{>|bupWz8kH(tV2tL{ycpo<0=ym3(_Th5mypoGjaR zfJvm5QSf4vO|$2S4Nr8HmsxlsqHZ;F_`9GyOu!SQSigj8uXVkX1n*aqPZ&J0a!9)) zkgx}y{NV{&jr?FvzWptPo%1ZJJ{fKrB@bEf#D#U+y1;4;fE_-MH1vwR@niEdJ8h$m_MRuNKS;#3@F$IC-pJW(SyIQ;>h zpnW<8$}L?2tf~Sr8Pl}@6Hnw#jorqd=NXg!!x#2oYSR-2Rg#C>c)~kBBZYY4RWXuD z@I>p=Pn=rFBpIG4z5MrJNT_a|t}x-g1Vi8nS|4ga`RynTDci9w z0DtzC4GsG*Eo3$stEC2-b+Xh!LOZF2g5xzv1W!mzG;58Egc=(KH9i9BGg7F}NuZ9E zLYbzvh2|PO!~RQ-o03h&7Wvus6yAmE8dV>WGJ{io4X zuGZLp18U19 zz!P1I6zBvmMp#o}izhT#98b_*X3bi5d3hj@HL841#1lFYhbK}yk|csBXtO>KONI?B zcoYuH<1QmzM))WRqQ?^#W^f{gCmiN~o&r}e1v(Tay^sM)Jke@XP*X_h!|j^zaE`r& z%0hV+SP-_+;sQKT-iUsefG4D89@;-ipc#t&mk!)=PAByg%`pki%@piSXWT zc`$@0a#;j-f)j?zP8m;}EpJ&3X4_U_^pO3Rmn3Pj|9a{g`~5oSbWL0Qcnzy=@4ypQ zJfRQF@PxFxu+D=8cf%f~#}kEyC+5n(7(8)bi`@)q`y9$zPDQ)HxbObX&0ryYkjVZk zYEMX6*1;tXJ}wA9%#dbeJfXixctVQ+@r2Y9^XHZs$-koE;2x6jgD0f60BU?O)EGm^ zrHl1QsIdl6pEtsh^2`B7%D5x^DPs??l|FdJ6LJi44Nu6|A!sN6THtsUHJ%`4`v7ag zo6ZNp4tpm3T?sds&8{~WJ{}@Py~X=ZBz7ukD088_GriPXtPlG5fEdf4C`T z|J6Tt_8@qL*G!#ZaShnOkley!%lO8t{Y`rQ-?yQ_WZ(EwDAG zBm6fmq)|CYDH$hNc!D;xKbP^u^3$*1!%A;2kZ_A9^k524NUbGnX~zzO-K6FM21?vD zd?B%yu%^Uc!Pydn0nf^FSXe+0GVz3r$FkNj8K~D~P>;|2|o+LOnF|qkMXmXN(LeA-EDclL$ahkIhuIu{6 zej$7qAs1_SqL5jD8C8d(Vr!d z8&7nXxTp4-O388u{r5>KpJZP5YBt9)13O9R~5f9(rB zX~p_Y-pDVxVeK);YkWP2Cv@--PgIhZ!gyj?Lh?B{;MKh%N8s+(&pPaalG^PDIi%(r zFP<3wD{~UOb~Yy;33x&WRoQ=e72nyI^?ttXR)?8Q?KxV;6WeQa$`6ER@WS2N!2ViTgePSDp7jSA!-MtYIv(n=d@P=zT`dKw zrs3c{JxazxLYatI!4o5-;0jOBw(SdjxRsm-6Bo@Rs+V&*eVBzOn)`-!U>&)`9~0sU zrc|rIR{CFvCr(Qt8lET<75DWFp71>L=OvU^i?`vihVqaPPXs1&d@F)PP~!K`EM#4tl!4I;o363fI|;~C(;GbPH`h5B3r>ewdK@eQcgIH%Zu$#D)m zC12}cZu#ql-A?p>a}Wkv52Kn4Pt2AL7oO0l;XWD30wylQ&_a4Vky?ZZN<7iNRGykpUip`StMbShpLC4I?P+mbs!;jx(paxI$8^I_eo`@PxQz84W5;Ka>JG#T6 z8f1+pTvo@lWSzNwBQNgpM8>vSc5rzQ8Nk95hYs${I*KQX9KZhwj+!hxM?7)kQm5n|Y=reFUq0hnagpP&d2^|l^ z6M9XIC-k@&Pw2K0PpCfFe=&`I$i)6@(O{Z_Ij7TN1w7GQexmWjj@d-9;0azQ4}$%5 zAQ(@a_6upq`a_w($5mlH&s|ofprlphg_Jf^#DOQaoILv)4*q%W*B!X8za%@e|C01# z*rep6J-eaLtd~#L!^AruN-l<_>&k>8p3veJJc0GQv1Z7Z1~WWy#HwyBxVor3IKUIM zn-+v}3jF&po^W*KB`*7~HO+fIfY~3V=!bK6L#3vL;APVO|3u&k{;j-+gIYC9eE>s)+i|0UCvwOaPduT;xp;zIascZa<;R-) zKDL9#70I zv$Y(we_(&75S-LNCJONc=~o{h;WT{2;E8_HIEE*px@Me!&r0;Gz7JN{iyY4BZjavP z!#dVQUe4l)4IUPwV6O}>Mjr7*4+&7j6MTzsfwhasH$XfwIk-kKc;SXz{NagOCKBTC z#OhPYPvPzlaYb&zPo3gBoPn+yxXC$Pe!1zy6HFPcf>u&H0*C5FF`keZQr4NT&8dXM z6B0`T^?5SXXG&1Vm7$I;?Zp$M5WIxHu|{ME-J(mQ}Ul} z4rTh!5qde6b}0|9t&u@D_Ftc>)40t!U6(pfKEQpv273g*6llX}E}qbUc|38o56Mw@ zqUzw^o1vtGEQcd?FcMF+n;kle_0Q0S+<@Q-^X1lUprl3Cf%nc!Ap!d@`(1Ix;Djan z{^WpB&kxs455W_(2c*D`{9C>W{j;y8oPkfIjvi_)E!28Cs5LcEpBOx$4}tImpMKL>XN{6X8TMZnv&;2_8yxa6 zLXIbvN&y$1;54i}oZ3oGM)5>&HKGXcggzX@6T>7q8BZ`BaSallNTem6(0^b&p@nUD zqKQlZvj1XQ-UIgiGqcHPxO1R9G{h4pmqoULb!^tYtpgX#39z$=m+#3h2%gY_KRgj| zC_a5Bp7<7>`x%rptpvy+91m0Rgr$6A!xK_t3`-?Fudo`9&<|8RA@v5Vze~(9Y$0)n zaFxU!!8;Ov0QDIp)aMXT$0B#&2^o)odQAfLxCH9gCRj=S^}#9n@EuQF8e{TeZN}8n zWY~4t9ETxr^DF(rW;|~#g|m1fWPL&nD6d$`Kx6psmIYvb4N71?VR!Us>UKQg74z{P zOeNLeGIY@|_?**eK{1~A`geMvl zA$k>0ka}(lOa72TYdq1fYSO=Lcp|Dc6+Z00N;GWq7&g}+7S8F|Eu3O~+ocy((0F3Q zKt77_gdQN^i5^mbjwiT18V%bPna`0no|x?2wk>>cLxOwoM6FHH_E4q?i^J#-q1AH1 zTzcTd{ww@AHx``JA2_%~12@QI}6HJUhbQFOEG(kIVC=tSj5dgKIvJ;dpLTGq23_?)8&AmBY}WDe>jtgL4k@}G z4)v6s6rP}+ZVHrL{1Di5ix)|Yc;e^sT20}t{&E4r{)@KqGH^7vx&`3jSu!zzC+-~S z^bWSs;6Xg$A4j7Io?y!NIOOupaW9;BL@vzmMA28fykU;1@-hZb@aoeYZgl+Dxfgu8 zMuIBYe|;((TN}>kB7ei2(~$yH1m@KXRy;9Y5@7JeRo6$4;p?g`xO%}8q{7C)xf*PW zC)&wLCZ5`@@PrO<;E8gV_86=a=ihu13AH92YF#SS+BEp{*XMH+U~7p{ zhifEG72cCrHCRF7Rp119W(}j{xfRs0>i|5VLECsju3=g0aV*qr8PtzwNCkr5l@tNY?uaH>cBFdc+!kX9z4;cJ&^_Mzeq_q z0LTC7Pty_s0{{Pv^P?Yb9MEnTh?EK8WC)Zr$C3J6IP?r(PHKm6|=c zGct`E20S6L`%vR|p~mn*jpKp(EFTimaVRg;G5rmALdNxABe}MR-g0~oZ^||vmJ*%A z5z7VQro0XNFB=EI(y51t^+ z^3QtqU;03g{nz&BBM(?V`fI$u0xP*)vF9q=n4&*ec!HmT0M=&nZCxLh)Cc42 zzrwdfm0*1!|L!z1_-(8t6XOZ}qJt-@NKq@E@HwA!7M6PxU+^#-(^e+z@PyPcL#<_m zTF(Ui;=WaNgBsTi9kke&{g=cyu|6R&4ltKI=Y(A}kOEK0c;{L?A!8m;uX~^#`@qaVn|s#MRQ@io)Mj?HzMKX#@Ja8c*=8=_$P5t_f?{nd%C6k@T!IbB65R4~UdNJyYCzz_L56@)# z(aeJkMcPNIRD{g>2t z!`)Kj2|r4m7pyO}9&nMwd&6rI^9f7nMH8No*bmnF{1@sopjCK6#(|-Z1wp+YgnCQ} zN6B^p9+Hm@_>0}l64?6SI3{25M4{ zRj>>`;E9|+!}`EE!*cKy5KoYXQU?-h(7Ph+r-8$G;zRF#x;0e+(Q=pd) z%5Y9Mur(v;c;Zy&7ZGrI!)zA%HIs(G-n>!eHLAmxZO)8dJ53mSBQHab{^ zCpcxO%=)0^=9gCR$8F8yqdI5@t$oD|}TNEyV# z6H@mMwe}Ti{TtL87^rdZP-9`C#=}94iGkg9aFhL)JR9@joKD8aVJ#UWgC2674A052 zGAtLLt;0dqAb}e8rT1=dvn-*-a|JoiDUzm0J z-`%W~WKsrCw2dBe8_Kt^I9N2dH0j_8_r(0ckm1Bu z>!8*IL#+#hOQkjl-jMnLXsv%CctQ*1@Pxz)@#o(pUH~?iXNF7gggiHZI(7)<)y^fT z*AP&TBcOgQf%-oWt|P@^27EYcO4||8K_AZIiMorTTd+RizarfU<|5V47Ix7Od^~YP z3M=tM(eOJTVfCq|!jGY(yvM^>M|o(CC)UQF*bjSsx}6aSw|9A5eFc0=>z4;~)`C+! zG5*`#zN{}^{b$h@7O9q}LtXfvKFr4x+?Ew*{i&U8W=`n3w~8bW8jH>43niWyDTTOr z;zEmiv2d7u$D)xid`VAk&^f1jEqUDGfPq>2DbmL)C_Vii<@-OS+0RWb@W34_w<=fUm2)z6i}a~F2ob^JO$2^F;#d$##NvNx7f$w z06D&byX9*v{3t)puzvigkQq>>nn%EED`#8vg8Y|tYY8ctCx{A9g!!Gdh4RYP0&>Ve zlRNvbi*kU<{>wqWad1xOeey{>97XC;3_R3I63OsHumqRkiJXtlt$;jA`0W8D1$PXr zpa<@FV&UJ=wyX&&NU006n@I9Lo}d-Q5^lsEx!}`*mCt9)=bY}8x&B%TNuV6z6k`ZkQwbv&WLhrW< zC)8~Z)Q>;-*lT2?nNZqm-JzWF_kuCo7rbr>&HpVc?+m-Ut?h3Ix5P-WGoE1TD{C&E zm=~5S4SGB{L?SnyXdnYgcp~uZ!5Ap7fWqOCT7s~D1cMm*~`@s9xaEkj;`@8UDT#VZVXr{#!cw+H&UUsnmdUhx8 z2KYj1>tRhDsKygnpG-qppOrcrSU_U!VIPUNg&K1QHSPxLv-jC}LY}`t9fOBD4hQvG z9EOtK83sSgHW@Y)UBabx-EYl=H~c3Q7zwRubLb6+>w^tEal|{ynKfT_)9hgLsnSS= zCusM}o`okk1xbTkf+anHV?G@(cmtZc$jeIhU$ng+fbF;y4}$B)OY=IOxcaQ>T!#qx9UV!1raW#*@ue5H4z-C(Xh$p^2 zVuy|=r0y7M?I9ek50vo)(<;qaYaBAvSVXAtNbrHgBuwX=PM%A`N%Cw0M$7ml%&8CB z@q}Ebu-?RL_5i3~ub}>GhBLHC7Egptf7qKfer^rw!_0yCpHzZPPZeVl6i?Wc?w%Xonj--#c!DXi7jTqoo!_@0 zr3HMY#1r4-U;s~Ou{oaLRnc13lo@h0i6>@^>M;pU&_EvcU(U1RIHkgwyc6Xn+umi{-k!6-OVFE;Q*%-rzStbg*_&jq%cC&{{a z;=zW##b9y+2^7Q=fgzVaPr?(Vzofup{bWK6PejQ@7@n}Ycpw69m?;fX?7v6@^@UaH zJnc6RPSXHNJdu%hWdLjQp7IhBPaMu}py1>0{ zCEylM>{%9H9X86nHg{?0?HIgBeDtiZY>%Cl(({O@Rz)60iHSzB~AV`BG>rb?R`O4)Wj$saIpIH7ii#)}h9(LXBU88pARkPsnp@sL!%s zZXNvMoKD8HSO>~=Eqo!zwy-8Gp3C8E4P3_)N5&+KVqKt^G|S+LsdK0#z!M2FD2OK< zS01ehUDmGuSPahpw1pQ^?7zC~9+Eze{g(#xb56%=h?}fK$H(N4g`cmU=QkZs=wK8!Pe7it|J)LI^xmX`CB6Ko(cy>N-d^}*{B z+cO$ZXdxAzh_7+)5$kXn=Z8Ah2laX%>M=jm?LJiP!_oSGc;ccIn6dwI@VMUww)OTR zA%t@}TF&g@19pSOq5bZ_(>dX!oWbAHN8yQKa?*t-^aln{XyF~6SSU%jc;d;m;@e@h zrnftPgJhzM{nx3lP95Pk8~K326LX~T2~XTFOw=}>a4lIP54;di zzU#M(PM9$+16Hizy{Z#`lpXBRO2HxVgvH&cj1*~|&ch8elcRcYvqU3$}tD_{*;|UE8 zz!Ui{oeO2nW0&6>Va3bIb-dw3{lbeUq_&xLj@Q&T!cJ1-1UE{Z1Jqb&sPT?aW1dFf z35k1v`s@?x^AD(FpzyVfgFq*_7J_p%m;_JA*F@HZ<;Ml~pErroIXv+|Hq>~cffRz{ zi9ny{_E1uPE#cLEn|tSimKtP(C#<9i22ad9oRt8-+&gFGQGx0>N+zqS3nENqEIqIlKXia_wS$Q zo+E!GHN`dp?4lG$@O6I(c2eI=)JWoI7BZ z`EE|j;W$0u#S`rY@ni!}@Y;R=MEYf2;rby{yjsA-ixRAcC+rv9u!EAmW(hC6-ar!@ z`!Br^VE?uCz@ewCw`Ctox&~AFpDlM1HavHk7sYr&gZS`7@Z+0vS=+?Ln@@yV^9{A` z6Mm7}FR1k&P-DQM#(_dx4Q^!rCGj8wIH!|m!tkd&7lO`u;fN=ga@)`Pv0NiUJx+wW zt$_OR0_D|{C*;d1FCFm2=V`4P!MLt+LCyZ_U>HrP?7v9CFoRJew^aPvA5Ywj==TP? zYA`IGSa6a=4?ICC;t^Q0!}Zo%V4w~(;0YeNPGgWyb2?|sd?n#ETGR5t!a4whCkDy{7M_T%`S}q{E7Qo~GSn7rD7TF};GJf!50=9c z8$I*ShLmW#1i%B{GBAZFm_BudtxHZ$Z2=brNfSAqh+QzKG%Tw@<#>YEh?#xy#P{u% zDKM*tBx>Oa9k9a_HfJJFvVK19Qd$J8^x#(2HE>K_xf#L};Sy}m{!41%VK=FVg=?iI z4!)7P7+6DMqZ{ z#F4&UFqJ8Q_OQv0V5(a2L{8bU;)y{^Iu?b+b>JIMFctpQ8&AyG{p}6>9)GCj1K6@f zq~CeS;{b|Q@C2`fx4<%e?-g1KhebWYlGTFiqddf7b7!&*{=fA+=`MWvw_Pw0aZJQ34?-y}RyuX)BXSe;gxop2)dT>+!r zq{sx_JK2((rOhIEm7DqVu{Df4uO7 z7JuQ1y!+ywvHmp7RP+XHeC;%ok?g-5V%=z3PP!&iF2<>G|0gjgI3K%KJ z7BELszP>>H$AHrI)B(!3VnytE#Cz2$f0Z+7Zxw;cd%Hj&> zo2zG&5O{cqY%K7^MJYzc6ZZazZctM9TS56>R~uH)Ko9m`TbEud!1_e?njBd@@B}Sv zA7Llmh~kOTQlyP1f~7eePsE)svlotY62svMZZAWj#qVd=CqcK~l7NLLq<$J|4JE8C zbyRS&)Kb8U5>E{aNK7U4)W9G-A+Z%6ctW19LVd;pb(|IISPRtaEvUy_P`~a%{jrD5 z4hHa~nEe;&r;Xvgk+WMkKwCW+#S_)!Wj>x*u;IhE?s$SWj6}$gYM&UmI6?x+@Pviz zF!6-nWs7Z4+7ZK{oFdJDe?#Jr`ooS1?~?n$70#*lUEzyu8GV~U2Mw^p69e6j0c)=4)na8rG1nc7!SaW03N+)1orZX>w@PxMn9^#499`{0EuaeRz z%>FBA2vIhi)5Xd~9iDKUc&rtiP6}0Rcm zRtEv_gv6P%)>u=h@n)`gB2T5kub@76hWhLY>i9DpD`Qabv|NWmb2%1;-DG_b}kOt`D@iwKYkL!xI^wPIrYNy?%Uc25%q#OVcQx;9GVn zI7kEG@kC7VC%?MliF)MfkG$;8j*x)+h5W`C$baLSe#*{nxck!#=?^ z4pKP5Io-TNG$7%LcPDJ3;Ka7kUG~A~oiZqmC(Q4in-3+mF%WLL@T$&GsP*9rMfkU+biT&4#@OTT>ndxhb|LBA#x=RBgo;WHGckl$S zB`-qzv8OXlaP-{^4YtF`TJn+}PiSElo*+GE4C_^05=#t#FZX|R?*^;tLofDUBeE{m zV114>)lx7|RY{D*6Z$_8Pb5jf8lGt9@cId?L%YT`D4#-+kdjs&2I7fJ9WJkeUiR)Z zqu>eJ7AHVCmGXg&w2+Ve*Vb`wTC={HJ%y`#&glk(^e6`h=tELGQCb>+@kH>(>`$a$9y&nuvgSwbDRfO_o$H_&=B z3ci)EVX(Fa8{mm*lWsI&eR08bv#PMbhk4CPKu`Tbjwd3dP#8~GY)yI#8~W`j_Xy6o ze1s%9JR#FVkVmOEx5NGk*Ugv1JK*LXRp!4rII&vwBR zbtRYyPlWFv$rVqe?ay-?2Du(<2tBc+oAsY!m=+X5VeRWG$;^HY?>QWg0-{)khx^Y-(H3@`>!au;9~z} z8xi>kR-SS=?GhX-EphNPyXhU!T!SU?M8>^`vska~C5?f2g4XbXP;OUU;iL)aCtE-x z=J%JHFkgLn`Hm-+=O1DTw=iv+*_!>Ao89ANSpP^xp48z9YuUl!34ggj#}mB1jDUS= zO2Q+aSlq3~JeZo&%XcDdqQSLzf;1iv*0=M@qynB89@McO9Havm?7tkO$%Osayk+0A zTj7a!>uRRLg>AR{#lwd?CFmGWn9GYCJmC{n=m3;YwGEIk3L1Oy#H@#BCd2Soar|WA z3ECUIpw_NKtzU(wq=pTeNgWI9DzWTvjl{FI#1j(J2CGY43)E-ZP@iu>9pi>N&IR>a z7wYjY)NLLNmXCXQWyScPO<}>WQ)v>z6W!;GC<%8SmEe6mK}uFe3p_D)Q_&Cl2i(`?YP}VZ&=kJe;R!8jVE;AZ)r*0wV`$NFgQcr}acv2Q z>VPqxNXl`cH0#WE`G^q16SS)SX^tm2eNKT-he)vpp14$a+jK?$^*4RvX~w-vdt2A{abTI*_dyo|rbHWChqgF0^|gxY0=- zFyIN&3Q}R6-&?cd;gsHc8{L6C;u~`oT4`|*o(Pna74~0`Z`dw^pBlz^Oo5L2-~~^7 zOStUC`liRnzwKdBsq2LUq_z)geGk+af2eW3PIy9M{h-GCKz-&9^|>EBB4hvXw~YTm z7cC~k6LKBE`iUG1zzQFRb0vT$^g$h-h?sJ%8tZ=+AvtVeCqGGq!V{O}2LVr1lp;Gk zF=yx7$8cQ2fihR%S!cP~VE^_12bhLCDIzOaZx|@a=XfIevC}wMTR%APgccv-2~s6n z^5=w8Gr@}|HvaP}1Gi<$gIzq~Ee(Hof|h}gQ2uQ^hc|*mH0-~$C=*XO%1d=TLF?RF zn9lAz6gJZb-gx3zUq(^zgpKUD@WlAhEnJ}7*4BrI>PjLbo(P}!p%8RV3#*U=GW^^p ztugyArgvY$@>VigfG0*Du{Z~h-#XdyAk3~VUu5xw7V+YVQ1F7pLO@Fm9KjRvOoX+Li$Wb6 zfqH!er)$wSo{+DTto6qVav49MI*f>tfExB+whQm)g-%nJ=lj(NPdr`EWFMYjiXs-4 z)M9u%k?|kRUwER|8HZgk9zCEU)*#f67p!=q{yP_UI9w0n*njcL zx;E>-ZrQ12V22~Q`6h-ZtP2j#YKSNNB>)Rgkh=98j;&d>z)g61aou*OAwL8h+~SGO z&OE)t6QnSQ!Z&$6ss%z0hkX3tBn?bs|K%|1kqhhmwDL57J>Lblw})HW%0WM#*tvws zdOTsiIz6ocp77aR{S}nc?7Og#2JGR9S&@$qvL48l4D0WMlYW6gnSIKHX|LqI_x@DUbf+hyYq+TgRg5z;47X8TSxOX zo}ex336x#MRhU-?74SsZCz2AMyR$CXUT-1{ z@7>?K)?vMqsl&36@)Vwk;)zREzq0D$3H##pKEYeF%Z`kL@(S%H9N1bWZt=v{#>Mu* z@7b+f*TI%L2!$s|B?)95Q`-BtA1pm>aQ$9zXxs>@5AlSPye!8Pq*U5NhVY8pz@@zx zyXAyWPs-pNo+u$ZBs@WD!CiQgf4k8zXCp~a+!_5D=!zbe&unuL@=zzZhs`4 zP*^4b@I=7-iyfiX$3tl~uL8AB4r;9o)Oh*YctT=k;bn=NgVs8j%Q>AqKWDu|o}s}{ zGL8-%Wh@QO(n1V8A;;9Lb-M~xTX64X8RW(jqy?3N42x#xgP{paIiY0#<-9iF1GLiu z70&5MkG;zJ$iSm^k??o)sh+!`iw^$diRm}4&S5QWBIBWa>iWP@8xzKLhlEa3xPvFW zza`dz(k@vJ$|)RgQ;nBF@=%2R*OQ{WIOUwqu}sbv@a*c!PPbt0AGIb#L3b@^!V||@ z^34fP*mNkn0M;Jw<`o2GN`EN4Sa;BkUXaU6vv$xkEudLLxXpD6BP;B`c(rW<8(A$% z$_ZzVUQsT+2A;UJfd&CQp%2mU1Sww8toI}zGd~Q|JDzR688*|uKs=F03gGa>(8upb zLffnHG-cw6%1PdxAmQjdTx9&Z4QL@>bD*325e2j zJHrTT`2vV1{3US-Pms254d>RhbjYrXCl(hO_!*Y`fAE6g(^+l~@C5B!XJAI&MlSnd zYuzy5iEC1L%>K*4H8lv93-zor436N|$`c-ID-*JKV&~YHhOmSAWXno$xsNpH;R&V~ z%^;6ND9FYWv(~4*hNoX`uX-Pvx009OctV3+@WkJ!hnra^^t)6b4Awk*tKBphs0R{w zf|Qd!tn)vA`=t}?*;En_@r2Y=L#?ZXT3ZFRzQO@dNQ^bqI7_IpR#4+DV46I0g-zwT z3!EckukenHzrYf-;thm@l(=G=?YgOA-s7 z7_qz1b(nSiP^Xiyy&jNrPB%aL%xc!pldf{2h$q_Lt2Ggh+5Keb5O|8$rXJAD_rp_X z*!9wv!u24fD4om0*R$n91y7JZlwAo=w6@9k3@J;k6A$zKv*#%(`!5YLC4k+S@p7IHZCyrJ4cN_k;sZIq0o)|9) zNqB;Eh7IsZU6;g#u)?w~QsrrkO6$>UIOI~2fmZfkhkdWLhn=nbb2!3Pqa_I(Pu!Y5 zz9_7!MG|;|^!Bgi@I>;OG6|4J%uKZ62_1mO6M2qaKf+qtytYEZ&779P$(3(Rm<}(_ zmEsZhUvHni>kGYTckTkW??~}-f**6rz&xIiI$StYYVqI=smCdcCzy&%f*O|#H8u}w zd=6}u)yR7%)aP_i$Le7z8LxxBa?K78%W*sWMQTb**hcgVmt;(?PzJ{Kn%$=WEUyo8 z@B}HEDP{1)gbfzYA&>1_-hdtJOXDn_ST03ac!E}iHLwaleW7sNk=uPI!86wKfD2EI ziNDhWy3w-d0@rgIQ6DBQmj7Zrp~Y!`*W7LD(>~DMx4Qzw`%{bGo)tw1+2ld3+iU`=u~0i{mO9e ztZ6*u!xOLO@}d(@=m#772`y&C6Mr|;_>L#~ML1l5&Swwv&4m4zojfSU6QtWNh2@@K zBe@JuG`;WQ509-A5#ouTQsjvzXghI&Vuk8Z>yx3@D8jLi^7B<2Pe`o-)Ocm+s$ZNq zr<1rP)(H~30BaU%QEep*lxG<5yo_VQ{4$mS^?C+w`82eBE2v-Bp#E!v)AG+sF93O@ zR6WZUPuy5G0T-Op&EL++0G>$NXMGwrZU0|~y>QNM*_h!8QpQ3dp{8Fa!NHdv z*6@P|>|glygg<6WAPSx!b-F%W*!o97d-!ncUm9}Qf9Xb^{g)Pzb52JK(aVx}f^Tbg zVf$(F(hE<-Nq`QXaBA{&Ba~L!#ZXS~r@~Xc7g)a!kmPPWasNb}Z7{e_^zd*f zX%90X;k(cMp?5c#K*bXWUv=#YKU>PdGW)Ml(oo0#OX{}aZK>Ua#if3$IG)fzH#{M6 z+^oM#EGN`>E~qgbP@n5UeYOL2d>85%57g^C*iMf1U^s2jb>K7kHHQ`T;tEfcm78%q zF+Du{L7v%Y*R7f++{L=j0k!4rBhjweXvyvzDiT?Zoe z@Wis(j)&l^G)GSC@Pw-b(&7nP8m7X5R+8w;{%dsa9^UZVEg7W16E#Lq`H3fJ?Q?(+ zINc}??K*`7SU^7wFvb&kw7JUoJ#?ep!y!+mfhVq6QYnHb9E#e%hMhu7GqJ+{ zi&yH=FurXqs%i1Wu15UT;0g1Vt(L$uKJ6z5LklfeClPso@c)Nui**9K6J51@XHfB{-i z$Np>n+_b+|oYTEuQuQ-*Z7&Iccw)Cati%(!A|6J;n!bk%?1zDuBHOKpgq3oWjVH9w z5KquHHk7sO$~++@CO++8eSL__{%b(`ql&Dr(LP-S7Uq`D4E9xl;E6aJ3NZ16lO0FF zcw$4v8U~c9&BO3cZ+Wn^M6Fq|bO2Faz&>v3}mIPir5wNV#JJ|mIx=xQE;W>Ok#S@b92`i)KJuId?vk-mn94M@2W+CjGk8Ldn^@nLubr^C{P;n6 zU7MW`Pi&OJcRZ1~^4AO4vd^Y^x8Z`*yO`w06QnKehovWj}eqzWUt`K0EfF!~#4~rVp>p2!oJRRUTMo6#r_lvfTJdGJJK3C_b4bJy~c3QxSH34Bq0^`wm#l z?DXa3aNuD1M8Fg0Z#V|PZ{=df4umcKAGB!9f0^*61?vYbK9;Hl?KXewQ5yQ`1tFf0 z`q13$C!|IUYMlsNDzW15=~D^jcmzF9PTBZ@M|vi zUu~tC0#EEJS^fbGHLu`(9^Utn0Vg~`TKyL2TR~n};E7pnT1bs&!Ymz^Yua85^?^-ps=@jR?$5?tAIP0(W)zfOYa@x-qPPQ>tp z*Ae@jP^LgvKnoq9#1oUQ-w9w%=|k>8FtNe2R&G#U1-68fwYY%&SNE?erCAq{ntA9c zb+cx8LTcw=iqy}*h7v;$HI5c)EFHAbq6<7B&(vA#b2X@A>rltn;5@m;hWF$+8`{dY z77h`;!9%;H7zIzzDwqnLIemEv7hhV>jTD}+mw|pf5wicm0Vpl=8=>6BFM@x!UYa%q zcF-an_Fn@YrFyY`aqb0^*PPQao$Uw%^Z^K-i2Fe^Bc5oMZJ7(YZphv4TMj(IYuyBx z&|8X^@WiQdBn;q*5>=}mg&b!4Y=!w_<-ri1Xyp88I^4Rd6FX)0U*Ed7?*|+7=)>qC zp3tH$JW+U5dNtOC$4#hi3;W&=<_RmFs3Q-|Oop_(BtfxYES%GAbB8PN&O!N$F&QPa z*v(`}+vf__2RRiDff?1V`Hq9F^+BS^SoGmZtQ+e`9bOk~1j$sN=%&SyCS$EUbKuY4$hae{ zA!844l0JAg8F~!DTE7lK{cC}nPm8EchNNu2goHO`+=0PQw$(WYuR87}J;yu!(-LGZ`V{rI^-a+JD6->r= zS4r4287&W66-$INy%qx>j+Tvp$ta^m#wKG}4Y?^c8Ky;z>xaWX$*p*5Z8F+v0Efv4 z-|HUVk2OQX#k<0a!v+)CXEG$+qB=ZTSzbh#jGXhPX6A)m-i9>z^~YqaagoMUlku9g z!&q3|Y}3mtaN^)yB~HNT^9S8`!Mu9VU@|;NzYk$8|EX~>sm0xfgJIpxvHtFGss{X+ z3~58F&D#1*TFJ7ocPUA@H5ogl&N|a%e3n{E*qC0WJGp8+GG>VvH#S##gLHv{Zrwp;WrXTz?at^aD!wrs#ba4 zt0Nq*7bPa+9IX@%tn={OTO4-Z^{1%?+-RPQNC1=Z&PM_YO-3DB3S;0DPIE58OS38y zEom~W^kU6qc(ro85zbm#>t{l_-5&!R^>>@tAI{W3OOtWaZctJ))$=(OY)wY+DHJZ$?%mwdf_YcPD${c*1Du!1R`h8L4Ds!&p39e9Ft;Ii=F-HZ=bu#?oEXPAtY zQiBS$4h?E83eDDiqQLt=JdYk6)D z7m=nv6zcdr)G<7$*YQw~<)LoRp=uf~dorg}db-Job6gVg8dlbVE0Zynw(V%vr@56p z49$-p8oC*F(}!7jVtn+|VAgLQT*ZWVf+^KLaFYHX#1m;!h=wQJKK!TxDR-`20?Mn! z-0;I_dB|rn>fg@CjgQHgR>P*qBY1UDDXu{9g#G~H2`$jW6MGx{T*jZL=4s9-EuI+G zcEngHsip(q?aIC4y20Y}`tu|kPrUV``4CUI$Oo3m__0F@7fnVhJ`H}SnT&;l=hsVy z56_45f*()lLt#8Y>tQ5o6Q@HFkWg{g)v%ok4o_rBK_{N*d-JyslxYDE=wB*slruaz zMIM%$46|n+ao|ol&Vipv8#aTDi*yI%Ha3Xhu01|3iM z$iyR_xcDV@;y)RWJc;eUSGNs{0FG;Y&6OnQNh$o7N zUQdQoCN0hR3=+oZbRAkXl$%&Qp}|{t;_H!jt66{QE=>(4!_jo!Ya*Pb2gZ1URwxhF zMfvvJ1`en#FAnfTSjxomkY8Sc+VDhIX(YuHQp*jso)c8rGo)lRr7840^{!$y zxUGaVg5!xmx$wplvDuglPq3>^g4b6Sbbbtrd@n(=mC5L@L9-@f5AEGMSf_K#xdJvD z*L1*aIPbm;NZ^S&ovCid6X70wbl{29J|wu~iEcxJYr&rfC72jb6qv{nG@ckW&Ed~` zJi#l-6j)vdYD~t+g{vQ2XMOy`W||7|M285MJ+LFGIBVdF+!ADsC;W`miO}K7HD27~ ziAwhe^?*@xWB?0KB)*QR2VL7FTULPUwx_dm#1lC(r~gYb8MQR{+++kvoh$1LQtJjS zrQQYh(t$lZA#ty)lO^^IYWxe-XW&qugFzh&hdLex^_m!dk>g_MB-=(fSM>1?PcV(1 z081WUMpH1JD5Av*#=-IO6OAVx?5nXA%IoB%aM3au2*wj>7h^}mvTnBu_JhL@KkV2A zN?Mf@{5x7sZcRpq+n>Ibgv)FEsF@eWE&5BcGoH`^ay-$=nu>8ev9~yi!xMSSbv_Qe z4U-8)JVBey3Mkf}4H@#K!3DP&fy7OiG;$CQql7!K}y7; zePM}bcYpSPgPX|BsmVC7_SJ~`@JEI`Xu=bo(yV|dPW&pG13oO8(={ytPe}bQ)EYpj zbwE&S0bslI>Wt{%35f}W8W#jBNo)WdBhLrnDS1W!&9rz9PsmsS>osz{0AI^71Jth@ zZ}5ct*Fw3SiGg{quXVowJ@gkHPlQTQA)a`5^bZwgMm?tWX29TG7ySL<6?2(f!V^Pc zUUh-q7oV4G26ys$t2+EVOT>UDwAd0)w93l*`5I4b$>sPSN}5M39HbjJ`F(^QI3@x=NL*@NKFUv4B(;R&za0j*#rY5%pM{H>IMODB!9 zvw}|_P2olbPv{p4gNfb$Hpe7VHeZRaeLwFLK66ZC&nI6429LWH4TIl zYG3K)2hWAcMg>o3(K4Rs`Z7lY)-pwF58vfa8($dK(SQ&Y|~w)JDSI zy0JAGJETT}^(TpwhK>>|31>;X6uc=h6HuR%G|Bl;I-UMBm?eX3Q!#2pl8J?h(aR!vrt1)oYsq510Yfv5<*cJW@ zl%GI65&PytbtuyerC|K3uO!s4|I&k2_Fp~BiNY`$XaBRz{RHM_y8SA2A15cRc;dbU zoZ*Q&wNh5X+To2zV#X7^b{-Eec9Vm7JaNeNt~>NB;FYH}+%`%k3h@N#S7l)%4a8&r zwQw?xVINffNJ1-~SoC^k4d|o+(0GDx_xV`g-TS-x@27YouS^=@2_0NwKS7J}Rn~Ib6A4?- ztJrZjT=cdERpfZWMFPX|#Lnj5#={Xz|M|dUgS+{4hkwt@pc|ejFOA!HV&>37;t36y#}ireNshu3{g&0b1qlHk8U@#ulEFwkF=gM=b&!7sZa~<7HHqpR z1kaNeITYsCLIOPD`S3?u)>}@*)outs6n#6aBCM~2w0MHQ<(#aq*8gjh9*ZZWjvi_) zE!28Cs5LdPsl?U8ITBk7??`+dEJ3^YNH|!Yv%>@OtPTE<@phQ(WY@b#AWytKg+q`2mX9BxRVk`aA22Ti`H5lw zMXN_7e9x!fZdh-9brNOp#IO3@=fW#q%@`ra6I#H9CpZo3&U)u0IT^(hkNOcsfG70f z7@k<^PjWJzU^*iEA)fG8iD-(ctf@%5va6#?8W7or&FnMT* zCqAEg69k8Ly-;cxl-JXqFf+gWg5U`)_`?%760$3@ep>Zo<04Sfw9KHtK1^l*)n2}_ zaZV>S#;}Xj8N$_4YXo0Oy#cHyF~?Bj4xz>#L229R1N9js)aMXT$0DJQN5H9CAjHv zD;8Jyb=BjEEnssEN?`xhBPq#_^@IOX%UMD@QVlZi;|cwOk0#G!g0=E6}0WHJa(jA}#lDxSD08$vvxh1Tr97WTEM$NJ@mAyoL_ ziH@U#3c~Rk#DXW-EquO*Cx*_mkB9D8!usBZ8!E{G0-m51c|VlfqYZF!nIF}b3Y!WKmXcsoJTXO1GV#Q-RW;7S#Z5N*9)OS6%7r}V zbUzQpE`%dIBMVM}$4*3d91i~$y*AqmcF-VPJi+N&Bi3>CU)QV**$mR?g(q}?15ddB ze)9Duo;aGba01ktbhu9HQelGBroo!ED*o6410_Zso|iaPm|q8e@Px#xu-=ldn@ty} z&#j=2T|*tef_e=L^*Htho*zPi(n4!VOA$PfIA@a%#bcXA_H-fgD5! zQ}1W6{d%kVH{h~g#rSH6C%j|;6;GUWh+hL`3Mv$yn$(ypLOk)f)dFAGRf`|+#7g(f zHmv1UOnq40WANw-aFPxzv;Qh2lRTW$1xzKf08fyT@DgsWElodoB20=x@Wkhhe-6Ol zuDcp;gp!)K2vVZRi#0qk^4zQ8aOaIHC3{1DiDG zTBBTWkcA{O;R#x`65#hsc{x(V6H>1WwPp`$-42wN<)u*Lci~Zq;e#5-1NB)x443D5 z@R^M1!-_Jl2mR&R9-frr`zv@tw(+ow=p3#-wRGGSNU6vE_lj3>hX zcz%S^Ztxt+Pr(hya2PlIc%ncVo z=m!y=p#7YeEXD(FiS41?(BaJsL%%BlG~MEfO7Z|0Pt2LkzY+EmOby?KVQp4;pM#Xo zATB(i#hZ9y(1BcwSx54UbSlhI?rh))*jXQpTCv5+XgPJPsMYB8EU4WVgZ)<%Ni1dmwN?VPIH%(j{T!U( zxxU&Vc>Tn7pH0w44}$T;#Qz>mWi3-xBjK0&(#(S=R@|D|5zbAQ05&|~{vzE0mOT2l zdU5DeP+pj^{~99~2kgJ@{C%7Vooh)0HJ*_AZunSgJYhKv?86gM>%sb1K1ou-6B6?Y zHSP;)><856zfhk6K^+H%Q8E?;bIJAKInL?im=La$?E*}orRyrJ$!_KZ41B$b$yYql zYIo;VF#py=bLK#4Z5|Khc55)CjJ|evSikhWVXfgby~t+&_52ktyxD&-?Pv}AuK&{I z?^!(Y>(|^*FwIK>WbwqweC$;41h3zs;GIdOM(l$;USRM6Pc*C%Hy<8Y*?_Nrc!D&P zp^#96&|Yw%Ndkx2e--M*RU-SZfd2I=!r`Q2+Q9#6%b*ON2n%E+9Z!6oQS3Eb)^)z? zJt%Dn(NKP>4#6=axBcD(DMzH47Ee?&jS7Zcb+8IgaLVA#`c3;)pT-k%tPFK~2~{&tQfnh&X&v;%6W@2f zS;gAaL%zYV|N8HEj|s4y&ABB$Fq}{O?(o_DJK3#a#k#SL>q7tVmjUIVv|3t2IsN;4 z3QrvRY4;hfE|8xH&|5#A79t|SFMcw(+^&LU7=i<`k6Z6tXCPi&WmCwL-f=(~H6Qkk*_ zyhVE0VOXr3o*)WAbX~r4MKE#IR#26Ig$|dZywKD5-uPkT1o2;Nyw6Qdo&6+Q#Q85Bu+Y*Sa8- zl=tl8?7s%fLu>Y57qUOTfT88{RK5-G&n!6L3@oKz5b%T+oZ^YiRr4+6&v{(iW-@Hk zuW9fwC@s*QP;SfG!SYi*92&uq&-#!&h$ouJ7fSYDYo!pE{TI`dUytDl&uK1iVEl=> z+@RwL4RXK}6IZ7mW_^a&bX%ZBgNQ+4&`mcWcp_a3l#N7p!?G`bF6k+WlsWI3m+m0UFs+_og0e_}lGQ8ui2LJPO?#QyvwqTmUwmBtfVFNr5KCJi#q?vI$S<@fDuX zud#SSf1L3|_PW>z{{LmFc@6w~c3;PNkhd5GoQ_tM_V60^Xaox{_0FgS`+go=rzqUrRVK*s1TC3g zkKhT*;OB4PoRQKni6?F>?s^`UsJ3d}5ja?b5%C1mC1I>H+DlRb`>%)-BSynT7ILA7 zCw#BQb%temZQullSCkz;o(OprS`ucxkswVx;rxX}P&~ow^CbBEUyf0aVI{o)#uHLQ z&RXk8p}EwO!ERDd0@q4RIea5=rLcy?mcdD+Q@4bMJY$CXoC)e!Gt}{>LwG{2IiVhR zLf!U2{rH20j;;0I1N-QJ3Fma2^3P+PdjDw2Nw7)X)7^bxNce?CJ>czB33kR4OnudZ zgAP4!Q~~ZUAc@>~Vw4Od;fY({UZ+BN1@sceEX>v84lI*gfXPz!Um66CC-#)d-oW}# zZfTyw6GLkUOo8E7WPlA%RBDyr1uM?&VAlakN}wY=*`_y7EbxQ|$K#2dBmSAQUOi}B zlWzy`1gY@}u(}RBa!xm6QQ~>l(eW!t3d9pFHul;IJ!lbI3OBLanhult9M9no`4Yj6 zH=eM)GQJCxR%s_Fw{O*8@5V37*uoual05kcG(P`G4ga~H{g)O~a8AcGW-RMlMe=f# zjwhtH9uCxjYCIt|cC59|25PK5)OcH{F?UeoZlI*K)Q0-}4Q9$1JZvlDaQir?lWTGK zl=RN$&|bF5aI_ZR;E7>ta_wcEj&-$Cfr zPrf1Gi8E5Hg(sMjo(daHl>{+7@vH@rGI)Y8tq!p0I@gbmZ~(7n9pGM1xe3D)C*&Ul zPiPSvo|q^}`FMg9r5H&0*3=8oS051KiS+fKwzB@^E)(B)f>hlZa7jV=!N(J0q_~g$ z*WF9`y24SlZntR$PtdYb9sa{cwy;wdNjAU}`#(GUiog^3G6uefRsR1$X)wf1(IcLy zB0F?EA$7-4YY!ohyGih5KOr>;u(re@!^skh2ro)J5-gy_pm;)_OS0Z3&n94sj8E>y z6Z)VXPsnu&YkAFn6YAG1sDI5cB3O!K@x=4pR`X#qCuwA6|Fu4HrXRfbO9Bw^MDJ_q zE^x@nd(|7jL!@2X!=IDni#wjs;$b||Fx~pgEV{hb?XJW=LvohPs) zDfCyNj~+a7PAB!)tTUu06SkJREVzhPvhnbd#Aic|(S#bO1vOR!>hoHt&upNM+iu4b zGIj$i%k>)^s{wJG(=pw7nzgz7TEcF1H;q~c*M`f*2A)Vg7#|30xSl9J6izyHj$~at zQQ+!=wvfYE0tNBJt=LR^DCsXY@cqK~Oo*}n(u*+mUmbtFe6@{px;;5)kirwBfkwkV zLkllD1b1DL07^Vj$v$f_Y%;exFCp;+?GPiO{1$n`;yYYuO2-p9yV^E^guP;PJV9Gv zao9=&OWA+Tki;*}>Eb8x6a!DRm@)Pt9HtlTctUR3S^w!HH&=KfYHN>WFx+w&C+g+mqY_V$$`lE;P918kD%5&4Sl7CCnF&zi)}h9(LXBU8-V(zCcgk~Y_*tH1 z!NxlHg(qZ8YcrmZ>snY$j%}f|ct%0}7>AS?o2`c}+Dfwwp4fR{Vi4p@EQ5l0g6WrD zaOj20<=Vlc<>iGGo|yS~c}3V(1N!jKi!<#Jbe?M_?y9RI-bzMQao`c&xdH% z@;d%7V|;5pAWL7iY89Yn?x#U$|>PfYAf z^bDRLJv%q7(_r+f9~<$67J%T1^l40P;)(9_T3v$LrUd0%=XOZhcFHp7csHWrEI6yy zk$z+0P1l)N|0dzPP*`f{=nb~Exf}MrXM8X;)%l9?e4?=0l8-y zaL+w?sL44U)1sSUv!&&j=)x19s|=Y2?{$?A7(Af`iFm@&nW$|%F|t#Krts&D?z5^w zXMNahdauH9ECX=xiPjr~z`wos&A+i6mkU~w)>3qe&c!G4%9dJd(&9j%o7a{Tx z98V-1`Zg8@I7ikT2&1+|`?*5-t!x2ZwSW~*L_aB1nl(c$oh+fW4`!}m|E0kJ?7y1* z{{ED;<;I+~uftxM`G%c@TWO<@fXPzZ3>!#&Bh(rvsC5poum(-w35j=Ptuaqf;~t0}HPmXvW2=p)xc@Sq$I!3_DD2wTgK3*^Ie#6tL}fNZGogcgG1iCd?O zda;(&-}W$T;my!SutTy0*|7iWC`~Y&)9p#DXAUdV0`qkhp3nmrJaI(|7KwAZ_}=a% zVf_|^7v_P}G$;#C@VesNN<7hbYQx8{PgIEiWk~5O3DtOF^2%2`puDzU0g-<9+3@z7 zgNp)SaSc{u|JCbUmMiN6$FDSM34aukCN?~w7Xo-9=H+Wk)(`8wxBasMPb^RKNP)w? z{NzP3o^X>OK0I+aZ}v&p&bn~pJy2`Dq1Jsut^I;yr2Ye*k{EDkCUKy!s|GjX35f?` z{aT(0!|L)}XgQwH3r9R5<3p_V8WHMoBGhdK)Q=Y^ubvjc;0t?r>A?Q0{L%5lVL`p1 z#uKm3(}apANWpM~pEp17tPC6feHLC6&h96{uz2E33W*+g!tR?>0vtH?&x8kX-!mC# zz!OahBprb*))i$d&;ILY>E26W4FA`r!_pcgj3}312Odfhjz} z^yzFkq04~^w5$47$P@AoYP&DV0%0vweWD3)WgD?QWFP@>Odx*kl1+Ed$XM@ zxj>DPgBm9T^;tR8=VegG%){`6jGMtDa_tO%%keXGk!>gp6CJ@P#kZ_o1S@E92A+6) zINu1?CmPC*6;G@*f;+%YI`EArm<wsslQ^gI8(Zx?>`$vqEZl>AufX&WDRROS3CpZ@!FkT> z+pmQ8wr!so0_8Mz9OO_ceGohp9aY^O{wyPj(s*L}txdJz5~g#?z}RLltgT@Ajc+?- zEy5F-pO}oq6W;P*4Nve|;|AZ#mfXdQTaoi?+ft6+%LluA&;#P zKb~M}?gDJRBVSPyT$IzM+croDOK3POs}Jt+1h1(4Ss$Cxpk9CYH@?}(uCRlCQN$CQ zr05n;kg8D%R_@#1H6I)s~)PePBVJi!#=|&V!xJi*Vo;dQ6 z=5Rb={oOqd?(!GI;R$XpPs1iPt+MvQkj2GFz+(TEQfAD2SV9jj@Prnx;|Zyy;Lm>y zlbakoAu*LuRzQ8e3iTPwJUk)etWd{VprqYI!)0>J1)s~;U06v2rtrk8o!L`a zpCbKqBsAM{Jir@v{r|zJv8JEA%*PXF?$}j<(uPqS%BO|}jD9A8WO$;f>@e}fx}QxR z!p*cJUWD)E6baUgEcA983@&C{W*NLPv4ZDJSnyG`@G;O^1MKj`3a6aiSbt7$Mxn3CP3~?H-tygOW;Y4H>59gqQu- z5V_c8|8?o>`#9LeUJ{`3#B6iEBH#&Zz7JN@Kvg^;b>*zJwiHTh=}_2R2LbSe#F?|! zSW~F+W>8~J;AMI446Wta(`?S^Wc(TKILR0k{3O?*&{2*>;Vju6LH(G7Y~oi3!vPxD zj3-C~=)?M}=}hZRkjwokO<-t%3>vZjy7x$KSPeVU;c`R2rSJOxn1v@kf2M%}Pjr=l zZ#;1@JMSeJCTZdD$;g7i+hGMAOv4k^%7328nvg(;vGCvfx-^aA3BF}_gDWE>5T5;) zMd$oAVO2j57dtqfHsSp6EVnMdXX1%Dqf$RW_k;;mp27{z(}?cI6Wiu;@`ER|Kmbn+ zTy43U^~LDTB*Wr~vJulKKu;Zf#S^^B>dyLOGoz|AY_#zj6Ha&{^WKJX@P@Y(PT&br zI1b05+`h$j-|;SQeQwd9X!cw)z= zTJPZ2oIi#>g2{vAB|Vc`H%ELfBkumk>HMppkG^4Qp zqHQq(meU_-&gmv>ikr*&Sj?`X6XD-_^1=sCEI$$I0hcqS;0)v3qyZRD9JyPsJREB+ zKdE@aUp@fwgcdmBiJFpRgC`dMa=i@`QgSRf18eHTW6tS##k`*N`Mh!>izlQO8TM3R z;t2;yY{nB(mjE?38ESkY)EFhGaSBjUj=xU96Y{(QrpcHkY^nvZoYTp*3+p?y-fV#- zQ=4o_$SHJ(^e#%?x$ZuYe@jR|<7d+o4+ zaLrK(PQeqT3$%dM$98B^3r@W2#?b(ts3jYI_Fr09&N&@vb16Z1qRTi&Oz_11DNC=z zdK$EYCq^vFv4^#!kFS9Rt8N@W4|?kX5uQkrf_psC?s%CVP}->4K>5~Q58fUk!A$JG zE!0s#!v$Oal|2h%vh(yl080-jw0r|3RE;1n zJRvpOQ0p|I)@s3}PI3Uv{!3!EVMU4Cg#Hq{1y4%+2F$6!Z+JqU<4nR6GL{Q3obm-?OAdj z*!$oc`=1l>1TAq%PkCmc$d)%<~+FHy2pa7>Flm4POBz{ErJ!V{b&Ij{)$T zMXgGMU<*Ha`OZ1rZ71)1m+#l=Z z<09xKwd-)Z)UU#iQo{xtNgWHE>FPYg5#Eq^R;V#;P~%#lKHDCLC*=7S)G=y@IIa(C966dx#M03TX;OD zyokjUgJfV7Pn`eoH3>>;ax8o?Smk9-zS(h3r$r5TVv|jwm8>mj(FuWWeJh5H zgX^PYz!*>1HvH}eYfWiRgczQnRkb#h)8{hKQj0zCL`Hw2=|nbgM<^_LA>3;Qi!w=EP#@H%A@{NlFH#t(Am+@&X+YaKP$1>W_S z2Ml=P&P@_2@I=jrbqd3Si{pmpfIm|bx2KI^|E0x2oYU?5&dCa%$oseJIaqGEMd(2| zLLa=~35Vjp7O|Ez^QlnldZE_#L9OqBmCaihYYa8c7iz2@%%u;c*ni10e}B&D>}j`Y!3?PXG5F!x!OVWJe$x{Ty25Ge&XEX(Cw|Hg z0{bssjoHG!k+CK6!QI7Px&IoCCnn0x2Ah84`(FQUN{ zT9k<=M#xKbJVEQ+O(?tb(~!*!54`b2($eg;(5$`exbVd8tpR~hZfpJE>micJ$o}in zDZ93ClKq9A4WKdmMwmU!r-1-?qP0vG;EAmXO}>o86WJ-_Ucq|$MHWwJ5ig!7ovX|t z{+zHh&rQ%ft|(Pqc*03u(BKKFcZN-*<`ITS-4nbmwGXhk7B}MwiGgIjU*e$PcZr1< zfhRO@1W(8_5!N~`3iVSG>h%%SVErd3uK@NMVkG#hTCSw+{~77`A#H+?OeVX?VhWOP(Ouf>xfPa6aE& zdcg-la?p<_o)}El;|a&>l`29Wlk~TNa+;kJx@f>2o;a4A_w`UbVe{4b9<(2yIW-!N z){7y|>FQd3-o!e`vLX&kVCOWufx&Q<)Pcj7QVR;T9t>(t2-LW6m|HIr@r1;OvDO$7 zKRhANiD4aiRs^SLfG6j4l7`3HO0FBBmmE97?XvxVALU~RN;>)gICIB;yllf0InQip z4vT2uE1o!ii{@)QL0eXSD7%W^zU;qrP=Wndi_c%4u)e?P2MJDiBI~bDB=qH$X*WC^ zB>};B!nOpXeRyJu+(h7sr&VV8K$$x14k=IJi71}PXkDW&Jl?C5Z#kHKy!&Qr*hvGW z*?&!tiCfO;Vn%j+0jt!XF#8r9_y0jC;|!@J`&e7JFR8g6a@g*-0Is**yd?-G`pe65 zJV8pOCk(0?*{L18usAxTA+*%NIrd+jWrxK6Yu}SvW-x_+yXii7Vz?wI;t36`#}f{} z3mdF$LUVRG3}v^!8Ah~~NdP>tvs6YfbTY44XB5;LS*Ue#P-|u25Q&$Eha_ee{*<^m z=&XaectW0^55^Pn3=QfyI@GZ=sMpg_kEx+Vq&8Z!(&ntgDO zCoHRlUU;JQIon38|J!=SqY})@zC(imp3sMAc!CtK^Z|IH^n1rQu+p@&vG?H^{R_ks zPEr7eCpP4@+XB1&E<_YF`>)=%VbkE7lk#v8Pe|=BoFw&w(BRupQ!jkhlV<&laIRUw}Hs2>Zx51Kh>5)N+_A#~ZMTe9eI&@{bE|TOJK}g~jz@ zG@iJ5o(3O0QSF9PY50A?g9(oS-t?`2`#Y26Qr%TVSRF7OYeFxr_p{zdDumR7x2V% zxjDcSv~Q)tYR!iS#>0uaVPOB2DTT*)qR;FK2cXC4g?%=_P25^7gh@d%A&V!T?64RP zr#c>J=>;#ZK1PEcp3n^@p3s79JaO!{eNq1Wlg;D4=FoAxyaZ?e#jCbA@K)W_+z()} zWf`r`!+~kplaIiCuCk-S6QrDk!4_5}D@}*R@beo>K{OOG+vR+S1fm8H=98W~0r(S1mRZ312@x&Cf!F%BL zr};Omf%4jP9&EJMuD~QXGoxZVUq~s+j2^IvUZ}ADB7LYH>%9}&RjUBM#&q*31e@2F zW-UCiT!IYo1ZlJ{VJY{q?e9R}BSA!x;R$QGfWs613(_~hHg}d)Uj*e-dj zrmX~};)z{<3m%1T=92i2Cw#0!mO`2OpAKtPDEECdoGi8G@S@b4!U9rr20b-c7f(p+ zIqMXOKZOk?2CWyK(18#71>oZD65Nd^j=o}|22ao;`y3J)HSY#Ic2@?@@IFnu)%I%v>4p2%OLSWnhbBO186z+5+)5uJx8bU+bL%#EFu!kL@pG`}r5RLtvj4K5zhEOwo-G5dc!IRP zDR6r0Z4E}iYg_k{1db>E9o^jl_SGT@JVAQ91M9TXH{FZDrqg7i6;H(J0JL$(De+H& z2cDqKD+c$w0A_Rfkp3Nubh@d%zMVMWvqo(Pne+jxRoFn?H92j=mF)Zwz$T0EHL zAv+K}Au;(-<8q4Ng^CrHsO!}@*1ohDY0$M)m0+}VHmN#iX0ugg+|#W@|V3O8XN ze)>+sT?zk|?uDt&@_-9ZY%i2^K9rWdKq#jXez3Uy7vl*nPQw$^oys=g&%eKDL**=< z;C8w&T)0sl{IUPa>}&SLjdQv_zRh02VW&rPbcQFGRz3&+1WC~zo_I2^+$I?AC{0*+ zV)dHkQ=zif()i9f-Lhxi-(B%U z+8e%^;0afGP>d%?w;fF<6437|)Mpq_$1$OfWk9{2fqF~> z?evQ_p3tIT_FpZIRcg(jXKp&vzYc7hb!kmmxRh7rR`6-mBTfeJM5%b^PjK{rSl9vvVv8NvBG}m7 zs98BxI#isObB%UK&wD4q*iOb4`aU8r`j zop7O^@50A=#siC403e>wu^#I~v_-dvDfD9wo7u$`o@k_-aXjHTR5TYXo#u4sR8X%h z|J1@0XB8NUCyG5zdmFZy`r7X_T>JX-nBDLLQ+MlO`Hcy`hQo2mQh7{(=YrJ`iziOz zT+tbJuz*oK@t;Tf>a4##Eyrjyo~WUu6Fd>2i*Y!8`vG8pDL{PWgUuv-bYN3ZW?7yO){kR1EGiw49PYn9reH(mnB~HW&Sjqyg z@x+|8nMboe{>gjNjav%*zL2J%)%4t7ftUD18p#Y{TC_LeyqO~ z-{I{AeP-P5cVts$c&WY$f$&7+6%vT>1Ydto;MN{bXIzGaKr+aJCklUyw;ihG zb|utpz)VOv1QFzT!V09=ek9OlR-ay z@r2_4pv3?|ivxf*76_l_3gK!OPuQRwp3rjv)<<=108{Ju0JgM$!FWRdajf6$-j%lm zESL2_>)bGOs1gA2#B~i;;t9_iiQd9?^B?%!f$P7%7!nIV`Rf+~p0GkgJVD#oLe>}A zl}&`%FQuP11a`JTTs$$;l?r7%LHl$KSgoNZHt@t22?S51QUNBO=%q$iJaML3z(*fE z!K=*&Fpdpw{%if{;Y*>reQ0$<=Sk(%=@r1@nSYInOw!=J_N6$-OcMG1u6FP2UZJ(Xc{`x^p*Oq{H&Z_Vo zPZT>|I1TJO^<2k)74XFCYrN!U|7Af%oYQT5p85>yg~`ez?0^kVkiI*S z^`ZaLabJV6^vStx6{!I6invGZpCl~)I{?7zbN8KLH! zj&{z6a4n~p7vP6wy_O$<?kW7s)cX}!tIX?fN8qeE zpZSe|CqDfSUIp_vNyt+fJYhkLcp`14jD1;CURFO4)<2)0kt;mmp$kIxU#bsE^mdJE zSQ3sMvyVw;Jn>Ku5b#8mv%mg%;)xYkOTUAg;@s=nSlE!M}JS=l3j|SQDmC zVjrHklVtKFs5FY9aN8mmM*Z1;{mfIg1+3XhH_x2Y#gtrE7TzMA&<(l`Q8NXexK^i0 z0vJ=a>6B09@WeblaKaO$)n9<~n`*)WPi!C9#{qeiL4_@zuwZdKL3`Oq*2&oA^@L4l zESuT}E`6s5ad@J>l0@)CWVB}?I3nf2zAo@skCPjcz%&*_k0%Q2L<~<%dgy-@>J{iw z=xGlq@x;1caaOaY^uc>J%-kgf5mTJg9m}w(FWl&+mtS~dtXs~8&_^}%aH8sF;U(41 zL93sE7DHbKPbiKSa!AO8Bc8CL3p}AQb=Een23_@R9rm&Z+IT|O*sSB}I2+d0wieEl z-r)V~Dn`K*v(n1o^YR)`@H#sfuG*pj5Im7e&5U@WR|%hTF!YSqko-{6$_O)B@e-bR z)tH06 z7jDP+^Lw0%MnU(sKj*K8{cRu-Ph?A;Yz*tf!_!mEh$na@69gA|=?4i97cDeog;&>wX_M&^Rstw5F30jx-v%bdH>1LSc z*`HC1VR!qm!xIrIro|Jq@OFc`t!N2nA1<(@7Ni84s}1&FVV)%HvHyBdxmG5)m)C0v zVItcI;0Y@-#uEX$DaI4~x^+4PZJG%Vu>cM{acfMP8LW9UTzeF3ws1~ZFQ{~jw(w;O zO+>K&ir!qb0vwfjXXnE3Vhr5up%W}TF)eHQ_OJ@O#zt^TJtf@Y3DsG{+^V&N-Dt;7 z1$U_Cq9~qF+%>e=OK9;|&|)y4jl)74i-Gn$7ADj)8Q4JAWpDvghW_x8KA&Mx{TRW) zD`M*Bg9qctta!o>zVU?f;*a-5@I+1}Z{dlMN8QiCQg>dh-VX`Mzq1)0U-UcE5}58+ z0&bAlf3-?EaX4HPql*$eK`TW|=*>@WZ8-K?v7VmrY}s-|0^kV?D8v)A6eeP=)0{7b z@x=BPL`&icyI8{${epiVVtrYy^)MH=`zv7ZjIgyc;P!V4w8RtjXS?)Y2Bhd??8N%N~-k|0?+~-g(wHXTIbGC7$^3aX=*O z)$rHmB`|u60^IRL>J+(0z`DIMwCoNkBP9YAPmt198y1>Ulu2Pc@v2P4f^ffIC8~7r z#D*GM62T@G_|N{UtG;;g#PN1iGUJH?UHO%OC+wjro}k5PCF|6D?aqWPS5F)~8m@{z z%h4M$)J8!Bo}ksYKGf|;MRl8N6m!}FFl0E6XB_e-p3Q)Gy8Ucl;)DufhS1I@P+xT zfQJ3oKx%VY?^1mpjH?J$G&=8f#3=I3y3F1s6Y=--0EED2+UKyH&1Et#KOUgS3;$l&V>J3Oh^?9{i0{o z>;vayR`Vg}bc6H@3r|?#BA(#4K~dIw=j`s79VYsGhzWi?VS~bWg4V;AdGQ3NLpLCy z;-M$t5EC4p@K8Y~o|yip$UNAb*8=0c;R!2r#S^Ms%7Z6VzW^X=30PNf9{mLzH zPmBefI1|!FI*oM$PHjWrf@^8Hs>2gywL!-dRxpkyz7#6y&04Q`++p$^jxX_g706f7|#}zoz4s2<8#aK1E|6e{C+q+aPt=b2m7Vpbbq7nQfL{}z>iH`t`>!s#iDmzFOu<{6 z)44s$auVhm_o`7e41WA+(ptE^st%0t1g%ixAmxo^2f~>_nmE7{2Xd@y0{P)()DTaM zQX?szP%SsKdQMp1E*RKbzWycdAu1tFf$B@Q&0iN0NG|oYo zIrTd)2Mp@M z0)HQ`G9U@8Q9#L7cw)SQX7L2=-B+P2x12{IkJ4uDfYI@FLxU$egizg#Ck~CP5C-+? zwJ*FsdR}B8EM&pN?7w{0=JsLjT)L%YF_@Go$Q-bVJ*dGGdru_zofS`HQ&S>ITB7wDKege@zc&^Q>ZR(GQ7 zFgRV$!{7~F6T^J=z!Ohs+sJyC^a11Y8a*Sd^XxE9!FZyEiWTrg#AW_Q2la8>~EFnaPfmgBSylfq*e8V#jS_~PyEY8H58r*C>U5CrrKYe zWM@2K56JPv2wy73@x-m#C=O4QZyfRrj$YV`7m9d-Hk+eR){lbiqWjZe#{Mhwh=sG^ zr$HJxz!S8a_JjX%3LFG4%vr)DE}r-tvC9W`vZ5b6v2CY&PS!utI@_m&Rr~6T5>K4h zfC`@QxSsMB%rpHyiF53~m=cMBJL`RjUI*iBRxuQwND;5_e{fEB-JIfyQ|YKA#S=Er zgeNBEqgeq@JTF|U6l8N5nipFAFSHs!Xmvmt@q}st;8529p6IauQcNIBskk86T(JRg zg~kWrD~%DrGFCi?C-kg(rRf8Q6cd(hoZOuNV~- za!%*+xY!}sQLpu2PVM%uASl6rA!UC7)t=g6XZcFt>>TPgt=fp6KVn zl^&kBP%bzttX0A$^qjM2Xds*Y*Sm&14dp#G^ef(O^Fu3s4@Pof(YJYgT6?7wJ#OUe2ryW~IVIHwzT zw)<;1^6}Nxx8RAY3Vgs5tDa@r4cl;Qx*o0x`aU5XQp(6i1y5MfGM*TfwsdFKdPVCG zvsB8w1hjEe zXk#bPo}WT{h63$63hvgi6ilGcQ&?YrO<_1K90}n=ep`J>gC|m7Z1NZm>UDF|wBm{J zWr@PT6Hh96C4*kPZvT-QPpodhNh_X+Zvkgc9-HMj&N}E&SCW|V1k=tD@XKf&%;Sms zp>fB;Nj{Uj`@_piXYrztb2`$m8o{m>h=(WkZlrMxPh{KCJQu7neD91@P-)12QsD`& zGx6R)*9BLYoW&F0?+iE%qnkh7yc@=|07X2(SHuF=^9Sk+kp0)?#Ei~zPG=W?cw%-I z65{X#r^?k~(#GyYu;GcVCAQ>)Rxb{%W)xc8SV}yh+7W2+sUQof|+!E2?On60iMuyhPC}#gOw5<7?KDoT=`21JaJfozIY7JK&|>^EIiBFQ=LPH^-E8=ExIc3{s>s=YSztKlbXR-lU&DGa zum9%4r*lS!kA=nUp&OoPqQ-4Jv28)s#!%B>zOY5#4N=A6%JT}C#}gh(j=~eu4+s8D zh9};hUhoEFJOYwy2=;2gXH372!8lwUW&goQB1A8d09`00ZEsSFi zuknOpY*^3HI6JhlHfYb=VLvN8!4tafX02DbUeLC`aFH|!pTz7>ofvw!9Iy2?37%j| z^9ekB?HVr-@PrlQ;E8$9i)?32i5(3kc!JcPnXrrvcHoKh$

=O}V{aJDC1rRwixm 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 RGSKDk+m2{`WzXLg%4#+1`e0&GAP^9Q=q;+ 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

<`|AkY-Wi8GI=)@5>Mu*Xf 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