From fdf34b7ad3c06ceef8eea0ec63f538f5d41d463d Mon Sep 17 00:00:00 2001 From: Adam Megacz Date: Sun, 30 Aug 2009 00:34:51 -0700 Subject: [PATCH] Bee2 branch landing: step 1 --- Makefile | 78 ++- src/edu/berkeley/fleet/fpga/Bee2.java | 134 ++++- src/edu/berkeley/fleet/fpga/Client.java | 5 +- src/edu/berkeley/fleet/fpga/Server.java | 8 +- .../fleet/fpga/bee2/async_fifo_8_8_128.edn | 402 ++++++++++++++ .../berkeley/fleet/fpga/bee2/async_fifo_8_8_128.v | 155 ++++++ ...sync_fifo_8_8_128_fifo_generator_v2_2_xst_1.ngc | 3 + ...fifo_generator_v2_2_xst_1_blkmemdp_v6_2_xst.edn | 576 ++++++++++++++++++++ src/edu/berkeley/fleet/fpga/bee2/user_fifo.v | 249 +++++++++ 9 files changed, 1578 insertions(+), 32 deletions(-) create mode 100644 src/edu/berkeley/fleet/fpga/bee2/async_fifo_8_8_128.edn create mode 100644 src/edu/berkeley/fleet/fpga/bee2/async_fifo_8_8_128.v create mode 100644 src/edu/berkeley/fleet/fpga/bee2/async_fifo_8_8_128_fifo_generator_v2_2_xst_1.ngc create mode 100644 src/edu/berkeley/fleet/fpga/bee2/async_fifo_8_8_128_fifo_generator_v2_2_xst_1_blkmemdp_v6_2_xst.edn create mode 100644 src/edu/berkeley/fleet/fpga/bee2/user_fifo.v diff --git a/Makefile b/Makefile index e2f407b..cf1f3eb 100644 --- a/Makefile +++ b/Makefile @@ -6,13 +6,26 @@ java = java -Xmx500m -Dfleet.impl='edu.berkeley.fleet.fpga.ML509$$L effort = high opt_for = area xil_ver=10.1 +remote_ise = /tools/xilinx/${xil_ver}/ISE +remote_edk = /tools/xilinx/${xil_ver}/EDK +speed_grade = 1 +part = xc5vlx110t +package = ff1136 +board = ml505 # ?? +runhost=goliath else ifeq ($(impl),bee2) java = java -Xmx500m -Dfleet.impl=edu.berkeley.fleet.fpga.Bee2 # BEE2 does not work with ISE 10.1 xil_ver=9.1i +remote_ise = /tools/xilinx/ISE${xil_ver}_lin/ +remote_edk = /tools/xilinx/EDK${xil_ver}/ effort = high opt_for = area +part = xc2vp70 +package = ff1704 +speed_grade=6 +runhost=bee2-tunnel else ifeq ($(impl),java) java = java -Xmx500m -Dfleet.impl=edu.berkeley.fleet.interpreter.Interpreter @@ -22,6 +35,13 @@ java = java -Xmx500m -Dfleet.impl='edu.berkeley.fleet.fpga.ML509$$S effort = std opt_for = area xil_ver=10.1 +remote_ise = /tools/xilinx/${xil_ver}/ISE +remote_edk = /tools/xilinx/${xil_ver}/EDK +speed_grade = 1 +part = xc5vlx110t +package = ff1136 +board = ml505 # ?? +runhost=goliath else java = java -Xmx500m endif @@ -68,8 +88,6 @@ host = intel2950-5.eecs.berkeley.edu #host = amdr905-1.eecs.berkeley.edu remote_dir = /scratch/megacz/fleet/ -remote_ise = /tools/xilinx/${xil_ver}/ISE -remote_edk = /tools/xilinx/${xil_ver}/EDK #host = mm2.millennium.berkeley.edu @@ -90,29 +108,20 @@ xilinx += XILINX_EDK=$(remote_edk) xilinx_ise = $(xilinx) $(remote_ise)/bin/lin/ xilinx_edk = $(xilinx) $(remote_edk)/bin/lin/ -# ML50X -speed_grade = 1 -part = xc5vlx110t -package = ff1136 -board = ml505 # ?? - # ML410 #part = xc4vfx60 #package = ff1152 #speed_grade = 11 #board = ml410 +#runhost=goliath -# BEE2 -#part = xc2vp70 -#package = 7ff1704 - -device = ${part}${package}-${speed_grade} +device = ${part}-${package}-${speed_grade} rsync = rsync --exclude=.git --exclude=chips/marina/images -zare ssh --progress --verbose upload: fleet.jar build/fpga/main.bit mkdir -p build chmod +x misc/program.sh - ${rsync} ./ root@goliath:fleet/ + ${rsync} fleet.jar build/fpga/main.bit misc root@${runhost}:fleet/ build/fpga/main.bit: $(java_files) $(ship_files) make fleet.jar impl=${impl} @@ -126,7 +135,7 @@ build/fpga/main.bit: $(java_files) $(ship_files) ${rsync} --delete ./ ${host}:${remote_dir} time ssh ${host} 'make -C ${remote_dir} synth XILINX=${remote_ise} remote_ise=${remote_ise} remote_edk=${remote_edk} impl=${impl}' scp ${host}:${remote_dir}/build/fpga/main.bit build/fpga/ - scp ${host}:${remote_dir}/build/fpga/main.ace build/fpga/ + scp ${host}:${remote_dir}/build/fpga/main.ace build/fpga/ || true pcore = ${remote_edk}/hw/XilinxProcessorIPLib/pcores intstyle = -intstyle xflow @@ -136,6 +145,7 @@ synth: cd build/fpga; ln -sf ../../src/edu/berkeley/fleet/fpga/ddr2/* . cd build/fpga; ln -sf ../../src/edu/berkeley/fleet/fpga/dvi/* . cd build/fpga; ln -sf ../../src/edu/berkeley/fleet/fpga/zbt/* . + cd build/fpga; ln -sf ../../src/edu/berkeley/fleet/fpga/bee2/* . rm -f build/fpga/main.lso echo work >> build/fpga/main.lso rm -f build/fpga/main.prj @@ -207,6 +217,7 @@ synth: echo >> build/fpga/main.xst rm -f build/fpga/main.ut +ifneq ($(impl),bee2) echo '-w' >> build/fpga/main.ut echo '-g CclkPin:PULLUP' >> build/fpga/main.ut echo '-g TdoPin:PULLNONE' >> build/fpga/main.ut @@ -227,7 +238,39 @@ synth: echo '-g LCK_cycle:NoWait' >> build/fpga/main.ut echo '-g Security:NONE' >> build/fpga/main.ut echo '-g Persist:No' >> build/fpga/main.ut - +endif +ifeq ($(impl),bee2) + echo '-w' >> build/fpga/main.ut + echo '-g DebugBitstream:No' >> build/fpga/main.ut + echo '-g Binary:no' >> build/fpga/main.ut + echo '-g CRC:Enable' >> build/fpga/main.ut + echo '-g ConfigRate:4' >> build/fpga/main.ut + echo '-g CclkPin:PullUp' >> build/fpga/main.ut + echo '-g M0Pin:PullUp' >> build/fpga/main.ut + echo '-g M1Pin:PullUp' >> build/fpga/main.ut + echo '-g M2Pin:PullUp' >> build/fpga/main.ut + echo '-g ProgPin:PullUp' >> build/fpga/main.ut + echo '-g DonePin:PullUp' >> build/fpga/main.ut + echo '-g PowerdownPin:PullUp' >> build/fpga/main.ut + echo '-g TckPin:PullUp' >> build/fpga/main.ut + echo '-g TdiPin:PullUp' >> build/fpga/main.ut + echo '-g TdoPin:PullNone' >> build/fpga/main.ut + echo '-g TmsPin:PullUp' >> build/fpga/main.ut + echo '-g UnusedPin:PullDown' >> build/fpga/main.ut + echo '-g UserID:0xFFFFFFFF' >> build/fpga/main.ut + echo '-g DCMShutdown:Disable' >> build/fpga/main.ut + echo '-g DisableBandgap:No' >> build/fpga/main.ut + echo '-g DCIUpdateMode:AsRequired' >> build/fpga/main.ut + echo '-g StartUpClk:CClk' >> build/fpga/main.ut + echo '-g DONE_cycle:4' >> build/fpga/main.ut + echo '-g GTS_cycle:5' >> build/fpga/main.ut + echo '-g GWE_cycle:6' >> build/fpga/main.ut + echo '-g LCK_cycle:NoWait' >> build/fpga/main.ut + echo '-g Security:None' >> build/fpga/main.ut + echo '-g DonePipe:No' >> build/fpga/main.ut + echo '-g DriveDone:No' >> build/fpga/main.ut + echo '-g Encrypt:No' >> build/fpga/main.ut +endif $(xilinx_ise)xst ${intstyle} -ifn main.xst -ofn main.syr < main.xst \ | grep --line-buffered -v 'been backward balanced into' \ | grep --line-buffered -v 'IDDR has been replaced by IDDR_2CLK' \ @@ -238,9 +281,10 @@ synth: $(xilinx_ise)par ${intstyle} -pl ${effort} -ol ${effort} -w main_map.ncd main.ncd main.pcf $(xilinx_ise)trce ${intstyle} -e 3 -l 3 -s ${speed_grade} -xml main main.ncd -o main.twr main.pcf $(xilinx_ise)bitgen ${intstyle} -f main.ut main.ncd +ifneq ($(impl),bee2) $(xilinx) tcl $(remote_edk)/data/xmd/genace.tcl -jprog -hw main.bit -board ${board} -ace mainx.ace mv build/fpga/mainx.ace build/fpga/main.ace # genace throws a fit if the filename prefix is the same? - +endif runserver: fleet.jar $(java) -Djava.library.path=lib -cp fleet.jar:lib/RXTXcomm.jar edu.berkeley.fleet.fpga.Server diff --git a/src/edu/berkeley/fleet/fpga/Bee2.java b/src/edu/berkeley/fleet/fpga/Bee2.java index 701f262..e0af6b6 100644 --- a/src/edu/berkeley/fleet/fpga/Bee2.java +++ b/src/edu/berkeley/fleet/fpga/Bee2.java @@ -2,22 +2,138 @@ package edu.berkeley.fleet.fpga; import edu.berkeley.fleet.fpga.*; import edu.berkeley.fleet.api.*; import java.io.*; +import gnu.io.*; +import java.io.*; +import java.net.*; +import java.util.*; +import java.util.concurrent.Semaphore; public class Bee2 extends Fpga { public Bee2() throws IOException { - for(int i=0; i<2; i++) createShip("Memory"); - for(int i=0; i<8; i++) createShip("Alu"); - for(int i=0; i<1; i++) createShip("Fifo"); - for(int i=0; i<12; i++) createShip("Counter"); - - //createShip("CarrySaveAdder"); - //createShip("Rotator"); + for(int i=0; i<2; i++) createShip("Alu"); + for(int i=0; i<1; i++) createShip("Memory"); + for(int i=0; i<2; i++) createShip("Fifo"); createShip("Random"); - createShip("Button"); - createShip("Timer"); + createShip("Counter"); + //createShip("CarrySaveAdder"); + createShip("Rotator"); + createShip("Lut3"); + /* + for(int i=0; i<2; i++) createShip("Memory"); + for(int i=0; i<6; i++) createShip("Alu"); + for(int i=0; i<1; i++) createShip("Fifo"); + for(int i=0; i<12; i++) createShip("Counter"); + //createShip("CarrySaveAdder"); + //createShip("Rotator"); + createShip("Random"); + createShip("Button"); + createShip("Timer"); + */ init(); } + + // Server ////////////////////////////////////////////////////////////////////////////// + + private static class Gobbler extends Thread { + private final BufferedReader br; + public Gobbler(InputStream is) { + this.br = new BufferedReader(new InputStreamReader(is)); + } + public void run() { + try { + for(String s = br.readLine(); s!=null; s=br.readLine()) + System.err.println(s); + } catch (Exception e) { throw new RuntimeException(e); } + } + } + + private static RandomAccessFile raf; + private static OutputStream fos; + private static InputStream fis; + + public static String pass_string = "password=security_is_for_wimps "; + + public static void main(String[] args) throws Exception { + int idx = Integer.parseInt(args[0]); + + Process proc; + System.err.println("== unprogramming fpga " + idx); + proc = Runtime.getRuntime().exec("user_unprogram "+idx); + new Gobbler(proc.getInputStream()).start(); + proc.waitFor(); + System.err.println("== programming fpga " + idx); + proc = Runtime.getRuntime().exec("user_program "+idx+" main.bit"); + new Gobbler(proc.getInputStream()).start(); + int ret = proc.waitFor(); + if (ret!=0) System.exit(ret); + + raf = new RandomAccessFile(new File("/dev/selectmap"+idx), "rw"); + fos = new FileOutputStream(raf.getFD()); + fis = new BufferedInputStream(new FileInputStream(raf.getFD())); + ServerSocket ss = new ServerSocket(3133); + + while(true) { + System.out.println("listening..."); + Socket socket = ss.accept(); + try { + socket.setKeepAlive(true); + System.out.println("accept!"); + + //final InputStream is = new BufferedInputStream(socket.getInputStream()); + final InputStream is = socket.getInputStream(); + final OutputStream os = socket.getOutputStream(); //new BufferedOutputStream(socket.getOutputStream()); + + // read login string + byte[] buf = new byte[1024]; + StringBuffer sb = new StringBuffer(); + while(true) { + int i = is.read(); + if (i==-1) return; + if (((char)i)=='\n') break; + sb.append((char)i); + } + System.err.println("login string: " + sb.toString()); + if (!sb.toString().startsWith(pass_string)) return; + + socket.setSoTimeout(10); + while(true) { + boolean ok = false; + while (fis.available() > 0) { + ok = true; + int val = fis.read(); + if (val==-1) break; + System.err.println("fpga->host: 0x"+Integer.toString(val & 0xff, 16)); + if ((val & (3<<6)) == 0) + fos.write( (1<<6) | 1); + os.write((byte)val); + os.flush(); + } + try { + int r = is.read(); + if (r == -1) break; + ok = true; + System.err.println("host->fpga: 0x"+Integer.toString(r & 0xff, 16)); + fos.write(r); + } catch (SocketTimeoutException _) { } + if (!ok) { + if (socket.isOutputShutdown() || socket.isInputShutdown() || socket.isClosed() || !socket.isConnected()) { + socket.close(); + break; + } + System.err.println("flushing os..."); + os.flush(); + System.err.println("flushing fos..."); + fos.flush(); + System.err.println("sleeping..."); + Thread.sleep(10); + } + } + } catch (IOException e) { + e.printStackTrace(); + } + } + } } diff --git a/src/edu/berkeley/fleet/fpga/Client.java b/src/edu/berkeley/fleet/fpga/Client.java index 4c223fd..269181e 100644 --- a/src/edu/berkeley/fleet/fpga/Client.java +++ b/src/edu/berkeley/fleet/fpga/Client.java @@ -50,8 +50,9 @@ public class Client extends FleetProcess { public Client(Fpga fpga, String bitfile, Instruction[] instructions) throws Exception { this.fpga = fpga; - s = new Socket(InetAddress.getByName("goliath.megacz.com"), 3133); - //s = new Socket(InetAddress.getByName("localhost"), 3133); + s = fpga instanceof Bee2 + ? new Socket(InetAddress.getByName("megacz.com"), 3133) + : new Socket(InetAddress.getByName("goliath.megacz.com"), 3133); this.os = new BufferedOutputStream(s.getOutputStream()); final InputStream is = new BufferedInputStream(s.getInputStream()); PrintWriter pw = new PrintWriter(new OutputStreamWriter(os)); diff --git a/src/edu/berkeley/fleet/fpga/Server.java b/src/edu/berkeley/fleet/fpga/Server.java index 623da49..d6b90e1 100644 --- a/src/edu/berkeley/fleet/fpga/Server.java +++ b/src/edu/berkeley/fleet/fpga/Server.java @@ -15,7 +15,7 @@ public class Server { static { try { jarFileTime = new File("fleet.jar").lastModified(); - bitFileTime = new File("build/fpga/main.bit").lastModified(); + bitFileTime = new File("./main.bit").lastModified(); } catch (Exception e) { throw new RuntimeException(e); } } @@ -23,8 +23,8 @@ public class Server { public static void main(String[] args) throws Exception { System.err.println("programming..."); Process proc = Runtime.getRuntime().exec(new String[] { - "misc/program.sh", - "build/fpga/main.bit" + "./program.sh", + "./main.bit" }); BufferedReader br = new BufferedReader(new InputStreamReader(proc.getInputStream())); String str = null; @@ -46,7 +46,7 @@ public class Server { System.err.println("jarfile modified; exiting..."); System.exit(0); } - if (bitFileTime != new File("build/fpga/main.bit").lastModified()) { + if (bitFileTime != new File("./main.bit").lastModified()) { System.err.println("bitfile modified; exiting..."); System.exit(0); } diff --git a/src/edu/berkeley/fleet/fpga/bee2/async_fifo_8_8_128.edn b/src/edu/berkeley/fleet/fpga/bee2/async_fifo_8_8_128.edn new file mode 100644 index 0000000..5562d7c --- /dev/null +++ b/src/edu/berkeley/fleet/fpga/bee2/async_fifo_8_8_128.edn @@ -0,0 +1,402 @@ +(edif test (edifVersion 2 0 0) (edifLevel 0) (keywordMap (keywordLevel 0)) +(status (written (timeStamp 2006 2 18 19 6 14) + (author "Xilinx, Inc.") + (program "Xilinx CORE Generator" (version "Xilinx CORE Generator 7.1.04i; Cores Update # 3")))) + (comment " + This file is owned and controlled by Xilinx and must be used + solely for design, simulation, implementation and creation of + design files limited to Xilinx devices or technologies. Use + with non-Xilinx devices or technologies is expressly prohibited + and immediately terminates your license. + + XILINX IS PROVIDING THIS DESIGN, CODE, OR INFORMATION 'AS IS' + SOLELY FOR USE IN DEVELOPING PROGRAMS AND SOLUTIONS FOR + XILINX DEVICES. BY PROVIDING THIS DESIGN, CODE, OR INFORMATION + AS ONE POSSIBLE IMPLEMENTATION OF THIS FEATURE, APPLICATION + OR STANDARD, XILINX IS MAKING NO REPRESENTATION THAT THIS + IMPLEMENTATION IS FREE FROM ANY CLAIMS OF INFRINGEMENT, + AND YOU ARE RESPONSIBLE FOR OBTAINING ANY RIGHTS YOU MAY REQUIRE + FOR YOUR IMPLEMENTATION. XILINX EXPRESSLY DISCLAIMS ANY + WARRANTY WHATSOEVER WITH RESPECT TO THE ADEQUACY OF THE + IMPLEMENTATION, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OR + REPRESENTATIONS THAT THIS IMPLEMENTATION IS FREE FROM CLAIMS OF + INFRINGEMENT, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + FOR A PARTICULAR PURPOSE. + + Xilinx products are not intended for use in life support + appliances, devices, or systems. Use in such applications are + expressly prohibited. + + (c) Copyright 1995-2005 Xilinx, Inc. + All rights reserved. + + ") + (comment "Core parameters: ") + (comment "c_wr_response_latency = 1 ") + (comment "c_has_rd_data_count = 1 ") + (comment "c_din_width = 8 ") + (comment "c_has_wr_data_count = 1 ") + (comment "InstanceName = async_fifo_8_8_128 ") + (comment "c_implementation_type = 2 ") + (comment "c_family = virtex2p ") + (comment "c_has_wr_rst = 0 ") + (comment "c_underflow_low = 0 ") + (comment "c_has_meminit_file = 0 ") + (comment "c_has_overflow = 0 ") + (comment "c_preload_latency = 0 ") + (comment "c_dout_width = 8 ") + (comment "c_rd_depth = 128 ") + (comment "c_default_value = BlankString ") + (comment "c_mif_file_name = BlankString ") + (comment "c_has_underflow = 0 ") + (comment "c_has_rd_rst = 0 ") + (comment "c_has_almost_full = 0 ") + (comment "c_has_rst = 1 ") + (comment "c_data_count_width = 2 ") + (comment "c_has_wr_ack = 0 ") + (comment "c_wr_ack_low = 0 ") + (comment "c_common_clock = 0 ") + (comment "c_rd_pntr_width = 7 ") + (comment "c_has_almost_empty = 0 ") + (comment "c_rd_data_count_width = 8 ") + (comment "c_enable_rlocs = 0 ") + (comment "c_wr_pntr_width = 7 ") + (comment "c_overflow_low = 0 ") + (comment "c_prog_empty_type = 0 ") + (comment "c_optimization_mode = 0 ") + (comment "c_wr_data_count_width = 8 ") + (comment "c_preload_regs = 1 ") + (comment "c_dout_rst_val = 0 ") + (comment "c_has_data_count = 0 ") + (comment "c_prog_full_thresh_negate_val = 96 ") + (comment "c_wr_depth = 128 ") + (comment "c_prog_empty_thresh_negate_val = 32 ") + (comment "c_prog_empty_thresh_assert_val = 32 ") + (comment "c_has_valid = 0 ") + (comment "c_init_wr_pntr_val = 0 ") + (comment "c_prog_full_thresh_assert_val = 96 ") + (comment "c_use_fifo16_flags = 0 ") + (comment "c_has_backup = 0 ") + (comment "c_valid_low = 0 ") + (comment "c_prim_fifo_type = 512 ") + (comment "c_count_type = 0 ") + (comment "c_prog_full_type = 0 ") + (comment "c_memory_type = 1 ") + (external xilinxun (edifLevel 0) + (technology (numberDefinition)) + (cell VCC (cellType GENERIC) + (view view_1 (viewType NETLIST) + (interface + (port P (direction OUTPUT)) + ) + ) + ) + (cell GND (cellType GENERIC) + (view view_1 (viewType NETLIST) + (interface + (port G (direction OUTPUT)) + ) + ) + ) + ) + (external async_fifo_8_8_128_fifo_generator_v2_2_xst_1_lib (edifLevel 0) + (technology (numberDefinition)) + (cell async_fifo_8_8_128_fifo_generator_v2_2_xst_1 (cellType GENERIC) + (view view_1 (viewType NETLIST) + (interface + (port clk (direction INPUT)) + (port backup (direction INPUT)) + (port backup_marker (direction INPUT)) + (port ( array ( rename din "din<7:0>") 8 ) (direction INPUT)) + (port ( array ( rename prog_empty_thresh "prog_empty_thresh<6:0>") 7 ) (direction INPUT)) + (port ( array ( rename prog_empty_thresh_assert "prog_empty_thresh_assert<6:0>") 7 ) (direction INPUT)) + (port ( array ( rename prog_empty_thresh_negate "prog_empty_thresh_negate<6:0>") 7 ) (direction INPUT)) + (port ( array ( rename prog_full_thresh "prog_full_thresh<6:0>") 7 ) (direction INPUT)) + (port ( array ( rename prog_full_thresh_assert "prog_full_thresh_assert<6:0>") 7 ) (direction INPUT)) + (port ( array ( rename prog_full_thresh_negate "prog_full_thresh_negate<6:0>") 7 ) (direction INPUT)) + (port rd_clk (direction INPUT)) + (port rd_en (direction INPUT)) + (port rd_rst (direction INPUT)) + (port rst (direction INPUT)) + (port wr_clk (direction INPUT)) + (port wr_en (direction INPUT)) + (port wr_rst (direction INPUT)) + (port almost_empty (direction OUTPUT)) + (port almost_full (direction OUTPUT)) + (port ( array ( rename data_count "data_count<1:0>") 2 ) (direction OUTPUT)) + (port ( array ( rename dout "dout<7:0>") 8 ) (direction OUTPUT)) + (port empty (direction OUTPUT)) + (port full (direction OUTPUT)) + (port overflow (direction OUTPUT)) + (port prog_empty (direction OUTPUT)) + (port prog_full (direction OUTPUT)) + (port valid (direction OUTPUT)) + (port ( array ( rename rd_data_count "rd_data_count<7:0>") 8 ) (direction OUTPUT)) + (port underflow (direction OUTPUT)) + (port wr_ack (direction OUTPUT)) + (port ( array ( rename wr_data_count "wr_data_count<7:0>") 8 ) (direction OUTPUT)) + ) + ) + ) + ) +(library test_lib (edifLevel 0) (technology (numberDefinition (scale 1 (E 1 -12) (unit Time)))) +(cell async_fifo_8_8_128 + (cellType GENERIC) (view view_1 (viewType NETLIST) + (interface + (port ( array ( rename din "din<7:0>") 8 ) (direction INPUT)) + (port ( rename rd_clk "rd_clk") (direction INPUT)) + (port ( rename rd_en "rd_en") (direction INPUT)) + (port ( rename rst "rst") (direction INPUT)) + (port ( rename wr_clk "wr_clk") (direction INPUT)) + (port ( rename wr_en "wr_en") (direction INPUT)) + (port ( array ( rename dout "dout<7:0>") 8 ) (direction OUTPUT)) + (port ( rename empty "empty") (direction OUTPUT)) + (port ( rename full "full") (direction OUTPUT)) + (port ( array ( rename rd_data_count "rd_data_count<7:0>") 8 ) (direction OUTPUT)) + (port ( array ( rename wr_data_count "wr_data_count<7:0>") 8 ) (direction OUTPUT)) + ) + (contents + (instance VCC (viewRef view_1 (cellRef VCC (libraryRef xilinxun)))) + (instance GND (viewRef view_1 (cellRef GND (libraryRef xilinxun)))) + (instance BU2 + (viewRef view_1 (cellRef async_fifo_8_8_128_fifo_generator_v2_2_xst_1 (libraryRef async_fifo_8_8_128_fifo_generator_v2_2_xst_1_lib))) + ) + (net (rename N5 "din<7>") + (joined + (portRef (member din 0)) + (portRef (member din 0) (instanceRef BU2)) + ) + ) + (net (rename N6 "din<6>") + (joined + (portRef (member din 1)) + (portRef (member din 1) (instanceRef BU2)) + ) + ) + (net (rename N7 "din<5>") + (joined + (portRef (member din 2)) + (portRef (member din 2) (instanceRef BU2)) + ) + ) + (net (rename N8 "din<4>") + (joined + (portRef (member din 3)) + (portRef (member din 3) (instanceRef BU2)) + ) + ) + (net (rename N9 "din<3>") + (joined + (portRef (member din 4)) + (portRef (member din 4) (instanceRef BU2)) + ) + ) + (net (rename N10 "din<2>") + (joined + (portRef (member din 5)) + (portRef (member din 5) (instanceRef BU2)) + ) + ) + (net (rename N11 "din<1>") + (joined + (portRef (member din 6)) + (portRef (member din 6) (instanceRef BU2)) + ) + ) + (net (rename N12 "din<0>") + (joined + (portRef (member din 7)) + (portRef (member din 7) (instanceRef BU2)) + ) + ) + (net (rename N55 "rd_clk") + (joined + (portRef rd_clk) + (portRef rd_clk (instanceRef BU2)) + ) + ) + (net (rename N56 "rd_en") + (joined + (portRef rd_en) + (portRef rd_en (instanceRef BU2)) + ) + ) + (net (rename N58 "rst") + (joined + (portRef rst) + (portRef rst (instanceRef BU2)) + ) + ) + (net (rename N59 "wr_clk") + (joined + (portRef wr_clk) + (portRef wr_clk (instanceRef BU2)) + ) + ) + (net (rename N60 "wr_en") + (joined + (portRef wr_en) + (portRef wr_en (instanceRef BU2)) + ) + ) + (net (rename N66 "dout<7>") + (joined + (portRef (member dout 0)) + (portRef (member dout 0) (instanceRef BU2)) + ) + ) + (net (rename N67 "dout<6>") + (joined + (portRef (member dout 1)) + (portRef (member dout 1) (instanceRef BU2)) + ) + ) + (net (rename N68 "dout<5>") + (joined + (portRef (member dout 2)) + (portRef (member dout 2) (instanceRef BU2)) + ) + ) + (net (rename N69 "dout<4>") + (joined + (portRef (member dout 3)) + (portRef (member dout 3) (instanceRef BU2)) + ) + ) + (net (rename N70 "dout<3>") + (joined + (portRef (member dout 4)) + (portRef (member dout 4) (instanceRef BU2)) + ) + ) + (net (rename N71 "dout<2>") + (joined + (portRef (member dout 5)) + (portRef (member dout 5) (instanceRef BU2)) + ) + ) + (net (rename N72 "dout<1>") + (joined + (portRef (member dout 6)) + (portRef (member dout 6) (instanceRef BU2)) + ) + ) + (net (rename N73 "dout<0>") + (joined + (portRef (member dout 7)) + (portRef (member dout 7) (instanceRef BU2)) + ) + ) + (net (rename N74 "empty") + (joined + (portRef empty) + (portRef empty (instanceRef BU2)) + ) + ) + (net (rename N75 "full") + (joined + (portRef full) + (portRef full (instanceRef BU2)) + ) + ) + (net (rename N80 "rd_data_count<7>") + (joined + (portRef (member rd_data_count 0)) + (portRef (member rd_data_count 0) (instanceRef BU2)) + ) + ) + (net (rename N81 "rd_data_count<6>") + (joined + (portRef (member rd_data_count 1)) + (portRef (member rd_data_count 1) (instanceRef BU2)) + ) + ) + (net (rename N82 "rd_data_count<5>") + (joined + (portRef (member rd_data_count 2)) + (portRef (member rd_data_count 2) (instanceRef BU2)) + ) + ) + (net (rename N83 "rd_data_count<4>") + (joined + (portRef (member rd_data_count 3)) + (portRef (member rd_data_count 3) (instanceRef BU2)) + ) + ) + (net (rename N84 "rd_data_count<3>") + (joined + (portRef (member rd_data_count 4)) + (portRef (member rd_data_count 4) (instanceRef BU2)) + ) + ) + (net (rename N85 "rd_data_count<2>") + (joined + (portRef (member rd_data_count 5)) + (portRef (member rd_data_count 5) (instanceRef BU2)) + ) + ) + (net (rename N86 "rd_data_count<1>") + (joined + (portRef (member rd_data_count 6)) + (portRef (member rd_data_count 6) (instanceRef BU2)) + ) + ) + (net (rename N87 "rd_data_count<0>") + (joined + (portRef (member rd_data_count 7)) + (portRef (member rd_data_count 7) (instanceRef BU2)) + ) + ) + (net (rename N90 "wr_data_count<7>") + (joined + (portRef (member wr_data_count 0)) + (portRef (member wr_data_count 0) (instanceRef BU2)) + ) + ) + (net (rename N91 "wr_data_count<6>") + (joined + (portRef (member wr_data_count 1)) + (portRef (member wr_data_count 1) (instanceRef BU2)) + ) + ) + (net (rename N92 "wr_data_count<5>") + (joined + (portRef (member wr_data_count 2)) + (portRef (member wr_data_count 2) (instanceRef BU2)) + ) + ) + (net (rename N93 "wr_data_count<4>") + (joined + (portRef (member wr_data_count 3)) + (portRef (member wr_data_count 3) (instanceRef BU2)) + ) + ) + (net (rename N94 "wr_data_count<3>") + (joined + (portRef (member wr_data_count 4)) + (portRef (member wr_data_count 4) (instanceRef BU2)) + ) + ) + (net (rename N95 "wr_data_count<2>") + (joined + (portRef (member wr_data_count 5)) + (portRef (member wr_data_count 5) (instanceRef BU2)) + ) + ) + (net (rename N96 "wr_data_count<1>") + (joined + (portRef (member wr_data_count 6)) + (portRef (member wr_data_count 6) (instanceRef BU2)) + ) + ) + (net (rename N97 "wr_data_count<0>") + (joined + (portRef (member wr_data_count 7)) + (portRef (member wr_data_count 7) (instanceRef BU2)) + ) + ) +)))) +(design async_fifo_8_8_128 (cellRef async_fifo_8_8_128 (libraryRef test_lib)) + (property X_CORE_INFO (string "fifo_generator_v2_2, Coregen 7.1.04i_ip3")) + (property PART (string "xc2vp70-ff1704-7") (owner "Xilinx"))) +) diff --git a/src/edu/berkeley/fleet/fpga/bee2/async_fifo_8_8_128.v b/src/edu/berkeley/fleet/fpga/bee2/async_fifo_8_8_128.v new file mode 100644 index 0000000..ce27aa2 --- /dev/null +++ b/src/edu/berkeley/fleet/fpga/bee2/async_fifo_8_8_128.v @@ -0,0 +1,155 @@ +/******************************************************************************* +* This file is owned and controlled by Xilinx and must be used * +* solely for design, simulation, implementation and creation of * +* design files limited to Xilinx devices or technologies. Use * +* with non-Xilinx devices or technologies is expressly prohibited * +* and immediately terminates your license. * +* * +* XILINX IS PROVIDING THIS DESIGN, CODE, OR INFORMATION "AS IS" * +* SOLELY FOR USE IN DEVELOPING PROGRAMS AND SOLUTIONS FOR * +* XILINX DEVICES. BY PROVIDING THIS DESIGN, CODE, OR INFORMATION * +* AS ONE POSSIBLE IMPLEMENTATION OF THIS FEATURE, APPLICATION * +* OR STANDARD, XILINX IS MAKING NO REPRESENTATION THAT THIS * +* IMPLEMENTATION IS FREE FROM ANY CLAIMS OF INFRINGEMENT, * +* AND YOU ARE RESPONSIBLE FOR OBTAINING ANY RIGHTS YOU MAY REQUIRE * +* FOR YOUR IMPLEMENTATION. XILINX EXPRESSLY DISCLAIMS ANY * +* WARRANTY WHATSOEVER WITH RESPECT TO THE ADEQUACY OF THE * +* IMPLEMENTATION, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OR * +* REPRESENTATIONS THAT THIS IMPLEMENTATION IS FREE FROM CLAIMS OF * +* INFRINGEMENT, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS * +* FOR A PARTICULAR PURPOSE. * +* * +* Xilinx products are not intended for use in life support * +* appliances, devices, or systems. Use in such applications are * +* expressly prohibited. * +* * +* (c) Copyright 1995-2005 Xilinx, Inc. * +* All rights reserved. * +*******************************************************************************/ +// The synopsys directives "translate_off/translate_on" specified below are +// supported by XST, FPGA Compiler II, Mentor Graphics and Synplicity synthesis +// tools. Ensure they are correct for your synthesis tool(s). + +// You must compile the wrapper file async_fifo_8_8_128.v when simulating +// the core, async_fifo_8_8_128. When compiling the wrapper file, be sure to +// reference the XilinxCoreLib Verilog simulation library. For detailed +// instructions, please refer to the "CORE Generator Help". + +`timescale 1ns/1ps + +module async_fifo_8_8_128( + din, + rd_clk, + rd_en, + rst, + wr_clk, + wr_en, + dout, + empty, + full, + rd_data_count, + wr_data_count); + + +input [7 : 0] din; +input rd_clk; +input rd_en; +input rst; +input wr_clk; +input wr_en; +output [7 : 0] dout; +output empty; +output full; +output [7 : 0] rd_data_count; +output [7 : 0] wr_data_count; + +// synopsys translate_off + + FIFO_GENERATOR_V2_2 #( + 0, // c_common_clock + 0, // c_count_type + 2, // c_data_count_width + "BlankString", // c_default_value + 8, // c_din_width + "0", // c_dout_rst_val + 8, // c_dout_width + 0, // c_enable_rlocs + "virtex2p", // c_family + 0, // c_has_almost_empty + 0, // c_has_almost_full + 0, // c_has_backup + 0, // c_has_data_count + 0, // c_has_meminit_file + 0, // c_has_overflow + 1, // c_has_rd_data_count + 0, // c_has_rd_rst + 1, // c_has_rst + 0, // c_has_underflow + 0, // c_has_valid + 0, // c_has_wr_ack + 1, // c_has_wr_data_count + 0, // c_has_wr_rst + 2, // c_implementation_type + 0, // c_init_wr_pntr_val + 1, // c_memory_type + "BlankString", // c_mif_file_name + 0, // c_optimization_mode + 0, // c_overflow_low + 0, // c_preload_latency + 1, // c_preload_regs + 512, // c_prim_fifo_type + 32, // c_prog_empty_thresh_assert_val + 32, // c_prog_empty_thresh_negate_val + 0, // c_prog_empty_type + 96, // c_prog_full_thresh_assert_val + 96, // c_prog_full_thresh_negate_val + 0, // c_prog_full_type + 8, // c_rd_data_count_width + 128, // c_rd_depth + 7, // c_rd_pntr_width + 0, // c_underflow_low + 0, // c_use_fifo16_flags + 0, // c_valid_low + 0, // c_wr_ack_low + 8, // c_wr_data_count_width + 128, // c_wr_depth + 7, // c_wr_pntr_width + 1) // c_wr_response_latency + inst ( + .DIN(din), + .RD_CLK(rd_clk), + .RD_EN(rd_en), + .RST(rst), + .WR_CLK(wr_clk), + .WR_EN(wr_en), + .DOUT(dout), + .EMPTY(empty), + .FULL(full), + .RD_DATA_COUNT(rd_data_count), + .WR_DATA_COUNT(wr_data_count), + .CLK(), + .BACKUP(), + .BACKUP_MARKER(), + .PROG_EMPTY_THRESH(), + .PROG_EMPTY_THRESH_ASSERT(), + .PROG_EMPTY_THRESH_NEGATE(), + .PROG_FULL_THRESH(), + .PROG_FULL_THRESH_ASSERT(), + .PROG_FULL_THRESH_NEGATE(), + .RD_RST(), + .WR_RST(), + .ALMOST_EMPTY(), + .ALMOST_FULL(), + .DATA_COUNT(), + .OVERFLOW(), + .PROG_EMPTY(), + .PROG_FULL(), + .VALID(), + .UNDERFLOW(), + .WR_ACK()); + + +// synopsys translate_on + +endmodule + diff --git a/src/edu/berkeley/fleet/fpga/bee2/async_fifo_8_8_128_fifo_generator_v2_2_xst_1.ngc b/src/edu/berkeley/fleet/fpga/bee2/async_fifo_8_8_128_fifo_generator_v2_2_xst_1.ngc new file mode 100644 index 0000000..dc18c6b --- /dev/null +++ b/src/edu/berkeley/fleet/fpga/bee2/async_fifo_8_8_128_fifo_generator_v2_2_xst_1.ngc @@ -0,0 +1,3 @@ +XILINX-XDB 0.1 STUB 0.1 ASCII +XILINX-XDM V1.4e +$52f4=7:2:3=6?>;33;?71=AGZ^X7OKDSC?2?699;1<6D@_UU8B@ATE4?0;20BB][[:QPLCZCJX]STXE\JSI]MABGSM5<1<3?k;68JJUSS2YXDKRHZLM]WLWCT@5<1<3<;;68JJUSS2YXDKRHZLM]WLWCT@VKX_H\[<783:723:5=h58:HLSQQACE]NU\^R^ATS>5>585;2=1CXZ_UU8gags`W{nT|cz}_qnvw4Yu4?0;21=G\^[YY4kecwd[rtXxg~yS}bzs3]t83<768n0;7AZTQWW>ace}nU|~R~ats]q83<768n0;7AZTQWW>ace}nU|~R~ats]t83<76;13<95701224>>=AGZ^X7JFN=594;76310BB][[:EKME91=87;:754FNQWW>AOIJ5=1<3??;98JJUSS2mce0:4?>00857:NWWTPR=LF__N1950?3a?=11c9;>JSSX\^1[_QKAUC\GJSI\5=1<3?=;98LQQVR\3ndyy28:1<2f>>=G\^[YY4}d^fbpdYdg|d0:4?>0`8;868=56>:23=46OKDSC?4;>GCL[K78364AEFQE939i2KOH_O36;2=<>GCL[K7:364AEFQF96902KOH_L31?:8EABUJ58546OKDS@?7;>GKEFY_SK[CL89BW\HDW[OL86LNA@:8FPUXAGLD=6M=;B61?FC>3JBDENK>08;8GMINKL;9<45LHNK@A44012ICCDMJ12::?FNHAJO:9=74CIMJG@71901HDBGLE04;=>EOG@IN=:76;BJLMFC61830OEAFCD036==D@FCHI9;7;BJLMFC2>11HDBGLE7:;?FNHAJO<555LHNK@A=0?3JBDENK6739@M1=DDBK?7NBDB29@HW?BBJ\MT^IQ_NUP?5;773MOIYJQ]D^RMPW:568:0HHLZG^PG[UHSZ595==5KECWD[WBXXG^Y090>0:FFFPAXZMU[BY\35?31?ACE]NUYHR^ATS>5>58682NNNXIPRE]SJQT;>7;;7IKMUF]TVZVI\[6;2<>4DD@VCZQUWYD_^1?1119GAGS@W^XT\CZ]<3<24>BBJ\MT[_Q_NUP?7;773MOIYJQXR^RMPW:368:0HHLZG^UQ[UHSZ5?5=?5KECWD[RTXXG^Y0;4?>028@@DROV]YS]@[R=4=6>BN>2NBB1>16:FJJ979>2NBB1<16:FJJ959>2NBB1:16:FJJ939>2NBB1818:FJJ91=87<0HD@37?58@LHF494<7IGAA=3=3>BNFH692:5KIOC?7;189GMKG;?3:5;6JFN@>4:2=CAGH7<394DHLA84803MCEN1<17:FJJG:46>1OECL34?58@LHE4<4<7IGAB=4==>BNFK6<6=08;EKMF919?2NDYY2?>69GKPR;97=0HB[[<3<4?AIR\595;6J@UU>7:2=CG\^79394DNWW838>3ME^X1950?58@JSS4>437IAZT@>3:==CG\^J0<07;EMVPD:5611OCXZN<2<;?AIR\H6?255KOTVB808?3ME^XL29>`9GKPRF4>0;255KOTVB828?3ME^XO2?>99GKPRE48437IAZTC>1:==CG\^I0>07;EMVPG:3611OCXZM<4<;?AIR\K6=2l5KOTVA82<7611OCXZM<6<2?@35JN@18AKD53O>97K6<;GF@0>@CKL90JI^;;GFSA1=A]EF:7J=4GOF7?M(3:;1BJN:2FD;6B@GHABH1=K]];=7A[[1^N7?ISS:?1GYY6@?4:L03<51EC@K]GD38K==H^LXM@BY>;Q68TDTSi2ZBBRLZSHF[f>VNFVH^_COBE29SV@g0\_AH_DOSP\YS@[OXD1?1159SVJAXMDZ_URZGRDQK8786<2ZYCJQJMQVZ[QNUMZB7?3?;;QPLCZCJX]STXE\JSI>7:4211c9SVJAXMDZ_URZGRDQK[DUTM[^7:3?m;QPLCZCJX]STXE\JSI]MABGSM5:5=o5_RNE\AHVSQV^C^H]G_OGDEQC;97;i7]\@G^GNTQ_X\AXN_EQAEFCWA9499k1[^BIPELRW]ZROZLYCSCKHAUG?7;7e3YXDKRKBPU[\PMTB[AUEIJO[E=6=5g=WZFMTI@^[Y^VKV@UOWGOLMYK35?3g?UTHOVOF\YWPTIPFWMYIMNK_I1850?3a?UTHOVOF\YWPTIPFWMYIMNK_I1819:RQKBYA]EF:?6^]OF]EQIJX\AXN_E2?>018TWI@WO_G@RZGRDQK8486;2ZYCJQIUMN\PMTB[A692<=4PSMD[CSKDV^C^H]G<2<27>VUGNUMYABPTIPFWM:36890\_AH_GWOHZROZLYC080>5:RQKBYA]EFTXE\JSI>5>586;2ZYCJQIUMN\PMTB[A6=20c8TWI@WO_G@RZGRDQK[DUTM[^783?n;QPLCZ@RDEU_D_K\H^CPW@TS4<4:o6^]OF]EQIJX\AXN_EQNSRGQP90=87;j7]\@G^DVHIYS@[OXDRO\SDPW8386i2ZYCJQIUMN\PMTB[AUEIJO[E=2=5d=WZFMTJXBC_UJQAVNXFLMJXH2>>0c8TWI@WO_G@RZGRDQK[KC@I]O7>3?n;QPLCZ@RDEU_D_K\H^LFCDRB4:4:m6^]OF]EQIJX\AXN_EQAEFCWA9299h1[^BIPFTNO[QNUMZBTBHINTD>6:4e09R0>TCQH>0^IWM6:PG[FJL991YHRJNT@]@KPHS494:<6\K_ECWEZEH]G^7=3??;SF\@DRFWJE^BY2=>028VAYCI]KTOB[AT=1=55=ULVNJXLQLOTLW818682XOSIO[A^ALQKR;=7;;7_JPD@VB[FIRF]6=2<<4RE]GEQGXKF_EX1950?33?WBXLH^JSNAZNU>4:0=ULVOE86\ID@68VCBE;2XXX<5\6:QJJLRF>2YBBDZM6:QLQWEB<2^R\H94U1-ecdu>3\DOI_HCOVa8QVCUW_CXEOBJ5:TBHLB43_IH56XFEV]W]UC43^OJ?6YJB79TVZGDC?1\^RMCK028SWYCI]KTOB[AT=2=55=PZVNJXLQLOTLW848682]YSIO[A^ALQKR;:7;;7Z\PD@VB[FIRF]682<>4WS]GEQGXKF_EX1:1119TVZBF\HUHCX@[<4<24>QUWMK_MRM@UOV?2;753^XTHLZN_BMVJQ:0294:<6Y]_ECWEZEH]G^7;3;4WS]FJ4b^T\VMEH:5WSU]UGFdgkefySk{cl3a8evikVlbjbQ7_9]26=YaaoeTkh`jr`vlvZp5W;UsyQ>3d9bw|hdWocmcR6P8^31Rv|t79aefmrxm1imnezp^obvncu;2igg?j4covahn)`mgUyhRmats-amkYdf}Uc}!mle]amkYdf}%E?9o4covahn)`mgUyhRmats-amkYdf}Uc}!mle]amkYdf}%inQmio]`jqYdg|dSR`?012?4;Ydqf>37n`{bmi,c`hXzmUhby| bhl\gkrX|fz$najPbhl\gkr(jziTnd`Pcov\gjsi|VUe<=>?<1<`}1??0=3=g|2f3jdnae gdl\vaYdf}x$nd`Pcov\pjv(jenTnd`Pcov,fveXj`dToczPcnwmpZYi89:;0?0Pcxm7e>ei|kf`#jka_sf\gkru'kceSn`{_ums+gjcWkceSn`{/cq`[goiWjdSnaznu]\j5678585Sua}499`jqdkc&mnbR|k_blwv*dnfViexRz`p.`o`ZdnfViex"l|c^`jjZei|VidyczP_o2345:56js?m6matcnh+bciW{nTocz}/ckm[fhsW}e{#obk_ckm[fhs'kyhSoga_blw[firf}UTb=>?0=1=[fh^zlv1>37n`{bmi,c`hXzmUhby| bhl\gkrX|fz$najPbhl\gkr(jziTnd`Pcov\gjsi|VUe<=>?<5<`}1gj7n`{bmi,c`hXzmUhby| bhl\gkrX|fz$najPbhl\gkr(jziTnd`Pcov\gjsi|VUe<=>?<7<\|jt4:2iexobd/fgm[wbXkg~y#oga_blw[qiw'kfoSoga_blw+firf}U;??5lnu`oo*abfVxoSn`{r.`jjZei|V~d|"lcd^`jjZei|&idyczP1278gkredb%licQ}d^ampw)eagUhbyQ{oq-ahaYeagUhby!lotlw[4Yu|:80oczmlj-dakYulViex!mio]`jqYsgy%i`iQmio]`jq)dg|dS?=:;blwfim(oldT~iQlnup,flhXkg~Txb~ bmf\flhXkg~$ob{at^0\vq553jdnae gdl\vaYdf}x$nd`Pcov\pjv(jenTnd`Pcov,gjsi|V9896matcnh+bciW{nTocz}/ckm[fhsW}e{#obk_ckm[fhs'je~byQ<_sv06>ei|kf`#jka_sf\gkru'kceSn`{_ums+gjcWkceSn`{/bmvjqY3;<1hbylck.efjZtcWjd~"lfn^ampZrhx&hghRlfn^amp*eh}g~T8R|{339`jqdkc&mnbR|k_blwv*dnfViexRz`p.`o`ZdnfViex"m`uov\163<4covahn)`mgUyhRmats-amkYdf}Uc}!mle]amkYdf}%hcx`{_716?fhsjea$kh`Pre]`jqt(j`dToczPtnr,fibXj`dTocz cnwmpZ0Xz}9j7n`{bmi,c`hXzmUhby| bhl\gkrX|fz$najPbhl\gkr(kfexRQa01238484i2iexobd/fgm[wbXkg~y#oga_blw[qiw'kfoSoga_blw+firf}UTb=>?0=0=7d=df}hgg"ijn^pg[fhsz&hbbRmat^vlt*dklVhbbRmat.alqkrXWg:;<=2<>2c8gkredb%licQ}d^ampw)eagUhbyQ{oq-ahaYeagUhby!lotlw[Zh789:783=n;blwfim(oldT~iQlnup,flhXkg~Txb~ bmf\flhXkg~$ob{at^]m45674<48m6matcnh+bciW{nTocz}/ckm[fhsW}e{#obk_ckm[fhs'je~byQPn1234909;:1hbylck.efjZtcWjd~R~cur3,flhXkg~Txb~ bmf\flhXkg~$B>;=;blwfim(oldT~iQlnup\tist9&hbbRmat^vlt*dklVhbbRmat.`pgZdnfViexR>PcnwmpZYi89:;0=0Pcxm64>ei|kf`#jka_sf\gkruWyf~?0=2=g|363jdnae gdl\vaYdf}xT|a{|1.`jjZei|V~d|"lcd^`jjZei|&hxoRlfn^ampZ6XkfexRQa0123858k}}?97n`{bmi,c`hXzmUhby|Ppmwp5*dnfViexRz`p.`o`ZdnfViex"l|c^`jjZei|V:Tob{at^]m4567484Tota:2:ampgjl'noeSjPcovq[ujr{8%iecQlnu]wku)edmUiecQlnu-awfYeagUhbyQ?_bmvjqYXf9:;<1?1_ymq15=df}hgg"ijn^pg[fhszVzgy~? bhl\gkrX|fz$najPbhl\gkr(jziTnd`Pcov\4Zeh}g~TSc>?01>2:f2:2iexobd/fgm[wbXkg~yS}bzs0-amkYdf}Uc}!mle]amkYdf}%inQmio]`jqY7Wje~byQPn1234949Wjsd9?5lnu`oo*abfVxoSn`{r^roqv7(j`dToczPtnr,fibXj`dTocz bra\flhXkg~T32?az17=df}hgg"ijn^pg[fhszVzgy~? bhl\gkrX|fz$najPbhl\gkr(jziTnd`Pcov\4Zeh}g~TSc>?01>0:Ze~g<80oczmlj-dakYulViexQltq2+goiWjdSya/cng[goiWjd#o}l_ckm[fhsW9Uhcx`{_^l3456;;7Usc;?;blwfim(oldT~iQlnup\tist9&hbbRmat^vlt*dklVhbbRmat.`pgZdnfViexR>PcnwmpZYi89:;0>0ly408gkredb%licQ}d^ampwYwd|y:#oga_blw[qiw'kfoSoga_blw+gudWkceSn`{_1]`kphsWVd;<=>34?]`}j353jdnae gdl\vaYdf}xT|a{|1.`jjZei|V~d|"lcd^`jjZei|&hxoRlfn^ampZ6XkfexRQa0123818Xpfx><6matcnh+bciW{nTocz}_qnvw4)eagUhbyQ{oq-ahaYeagUhby!msb]amkYdf}U;Snaznu]\j56785>5ot;=;blwfim(oldT~iQlnup\tist9&hbbRmat^vlt*dklVhbbRmat.`pgZdnfViexR>PcnwmpZYi89:;080Pcxm66>ei|kf`#jka_sf\gkruWyf~?0=7=[}iu=91hbylck.efjZtcWjd~R~cur3,flhXkg~Txb~ bmf\flhXkg~$n~mPbhl\gkrX8VidyczP_o2345:26js>>6matcnh+bciW{nTocz}_qnvw4)eagUhbyQ{oq-ahaYeagUhby!msb]amkYdf}U;Snaznu]\j56785<5Sua}399`jqdkc&mnbR|k_blwvZvk}z;$nd`Pcov\pjv(jenTnd`Pcov,gjsi|V:846matcnh+bciW{nTocz}_qnvw4)eagUhbyQ{oq-ahaYeagUhby!lotlw[45e3jdnae gdl\vaYdf}xT|a{|1.`jjZei|V~d|"lcd^`jjZei|&idyczP1^pw7==df}hgg"ijn^pg[fhszVzgy~? bhl\gkrX|fz$najPbhl\gkr(kfexR<64covahn)`mgUyhRmats]shpu6'kceSn`{_ums+gjcWkceSn`{/bmvjqY4;k1hbylck.efjZtcWjd~R~cur3,flhXkg~Txb~ bmf\flhXkg~$ob{at^1\vq5?3jdnae gdl\vaYdf}xT|a{|1.`jjZei|V~d|"lcd^`jjZei|&idyczP42`8gkredb%licQ}d^ampwYwd|y:#oga_blw[qiw'kfoSoga_blw+firf}U?Sz<8:ampgjl'noeSjPcovq[ujr{8%iecQlnu]wku)edmUiecQlnu-`kphsW<9i7n`{bmi,c`hXzmUhby|Ppmwp5*dnfViexRz`p.`o`ZdnfViex"m`uov\1Zts;11hbylck.efjZtcWjd~R~cur3,flhXkg~Txb~ bmf\flhXkg~$ob{at^40f>ei|kf`#jka_sf\gkruWyf~?0=3=05=df}hgg"ijn^pg[fhszVzgy~? bhl\gkrX|fz$najPbhl\gkr(kfexRQa0123878382iexobd/fgm[wbXkg~yS}bzs0-amkYdf}Uc}!mle]amkYdf}%hcx`{_^l3456;;7>;7n`{bmi,c`hXzmUhby|Ppmwp5*dnfViexRz`p.`o`ZdnfViex"m`uov\[k67896?29>4covahn)`mgUyhRmats]shpu6'kceSn`{_ums+gjcWkceSn`{/bmvjqYXf9:;<1;1419`jqdkc&mnbR|k_blwvZvk}z;$nd`Pcov\pjv(jenTnd`Pcov,gjsi|VUe<=>?<7<1`>ei|kf`#jka_vp\gkru'kceSn`{_ums+gjcWkceSn`{/O17e>ei|kf`#jka_vp\gkru'kceSn`{_ums+gjcWkceSn`{/cq`[goiWjdSnaznu]\j56785:5Snw`499`jqdkc&mnbRy}_blwv*dnfViexRz`p.`o`ZdnfViex"l|c^`jjZei|VidyczP_o2345:76js?56matcnh+bciW~xTocz}/ckm[fhsW}e{#obk_ckm[fhs'kyhSoga_blw[firf}UTb=>?0=2=hpr3i2iexobd/fgm[rtXkg~y#oga_blw[qiw'kfoSoga_blw+gudWkceSn`{_bmvjqYXf9:;<1?1_b{l0d=df}hgg"ijn^uq[fhsz&hbbRmat^vlt*dklVhbbRmat.`pgZdnfViexRm`uov\[k67896:2Rv`r5:8gkredb%licQxr^ampw)eagUhbyQ{oq-ahaYeagUhby!msb]amkYdf}Uhcx`{_^l3456;97ir8l5lnu`oo*abfV}ySn`{r.`jjZei|V~d|"lcd^`jjZei|&hxoRlfn^ampZeh}g~TSc>?01>1:Ze~g=k0oczmlj-dakYpzViex!mio]`jqYsgy%i`iQmio]`jq)e{jUiecQlnu]`kphsWVd;<=>32?]{kw2?3jdnae gdl\swYdf}x$nd`Pcov\pjv(jenTnd`Pcov,fveXj`dToczPcnwmpZYi89:;0?0ly5c8gkredb%licQxr^ampw)eagUhbyQ{oq-ahaYeagUhby!msb]amkYdf}Uhcx`{_^l3456;;7Uhub:n;blwfim(oldT{Qlnup,flhXkg~Txb~ bmf\flhXkg~$n~mPbhl\gkrXkfexRQa0123868Xpfx?46matcnh+bciW~xTocz}/ckm[fhsW}e{#obk_ckm[fhs'kyhSoga_blw[firf}UTb=>?0=1=g|2f3jdnae gdl\swYdf}x$nd`Pcov\pjv(jenTnd`Pcov,fveXj`dToczPcnwmpZYi89:;090Pcxm7e>ei|kf`#jka_vp\gkru'kceSn`{_ums+gjcWkceSn`{/cq`[goiWjdSnaznu]\j56785>5Sua}499`jqdkc&mnbRy}_blwv*dnfViexRz`p.`o`ZdnfViex"l|c^`jjZei|VidyczP_o2345:36js?m6matcnh+bciW~xTocz}/ckm[fhsW}e{#obk_ckm[fhs'kyhSoga_blw[firf}UTb=>?0=7=[fh^zlv1><4covahn)`mgU|~Rmats-amkYdf}Uc}!mle]amkYdf}%hcx`{_111?fhsjea$kh`Pws]`jqt(j`dToczPtnr,fibXj`dTocz cnwmpZ74=2iexobd/fgm[rtXkg~y#oga_blw[qiw'kfoSoga_blw+firf}U:Sz<2:ampgjl'noeSz|Pcovq+goiWjdSya/cng[goiWjd#naznu]170=df}hgg"ijn^uq[fhsz&hbbRmat^vlt*dklVhbbRmat.alqkrX:Vx??5lnu`oo*abfV}ySn`{r.`jjZei|V~d|"lcd^`jjZei|&idyczP3278gkredb%licQxr^ampw)eagUhbyQ{oq-ahaYeagUhby!lotlw[6Yu|:80oczmlj-dakYpzViex!mio]`jqYsgy%i`iQmio]`jq)dg|dS9=:;blwfim(oldT{Qlnup,flhXkg~Txb~ bmf\flhXkg~$ob{at^6\vq553jdnae gdl\swYdf}x$nd`Pcov\pjv(jenTnd`Pcov,gjsi|V?896matcnh+bciW~xTocz}/ckm[fhsW}e{#obk_ckm[fhs'je~byQ:_sv06>ei|kf`#jka_vp\gkru'kceSn`{_ums+gjcWkceSn`{/bmvjqY1;<1hbylck.efjZquWjd~"lfn^ampZrhx&hghRlfn^amp*eh}g~T:R|{3`9`jqdkc&mnbRy}_blwv*dnfViexRz`p.`o`ZdnfViex"m`uov\[k67896:2>o4covahn)`mgU|~Rmats-amkYdf}Uc}!mle]amkYdf}%hcx`{_^l3456;:79j7n`{bmi,c`hX{Uhby| bhl\gkrX|fz$najPbhl\gkr(kfexRQa01238684i2iexobd/fgm[rtXkg~y#oga_blw[qiw'kfoSoga_blw+firf}UTb=>?0=6=7d=df}hgg"ijn^uq[fhsz&hbbRmat^vlt*dklVhbbRmat.alqkrXWg:;<=2:>2c8gkredb%licQxr^ampw)eagUhbyQ{oq-ahaYeagUhby!lotlw[Zh789:7:3=<;blwfim(oldT{Qlnup\tist9&hbbRmat^vlt*dklVhbbRmat.L017=df}hgg"ijn^uq[fhszVzgy~? bhl\gkrX|fz$najPbhl\gkr(jziTnd`Pcov\4Zeh}g~TSc>?01>3:Ze~g<:0oczmlj-dakYpzViexQltq2+goiWjdSya/cng[goiWjd#o}l_ckm[fhsW9Uhcx`{_^l3456;87ir9<5lnu`oo*abfV}ySn`{r^roqv7(j`dToczPtnr,fibXj`dTocz bra\flhXkg~T>^azk04/ckm[fhsW}e{#obk_ckm[fhs'kyhSoga_blw[5Ydg|dSR`?012?5;Yg{?;7n`{bmi,c`hX{Uhby|Ppmwp5*dnfViexRz`p.`o`ZdnfViex"l|c^`jjZei|V:Tob{at^]m4567484hu8<4covahn)`mgU|~Rmats]shpu6'kceSn`{_ums+gjcWkceSn`{/cq`[goiWjdS=Qlotlw[Zh789:7>3Qlyn71?fhsjea$kh`Pws]`jqtXxex="lfn^ampZrhx&hghRlfn^amp*dtkVhbbRmat^2\gjsi|VUe<=>?<3<\|jt282iexobd/fgm[rtXkg~yS}bzs0-amkYdf}Uc}!mle]amkYdf}%inQmio]`jqY7Wje~byQPn1234949kp?97n`{bmi,c`hX{Uhby|Ppmwp5*dnfViexRz`p.`o`ZdnfViex"l|c^`jjZei|V:Tob{at^]m45674:4Tota:2:ampgjl'noeSz|Pcovq[ujr{8%iecQlnu]wku)edmUiecQlnu-awfYeagUhbyQ?_bmvjqYXf9:;<1=1_ymq15=df}hgg"ijn^uq[fhszVzgy~? bhl\gkrX|fz$najPbhl\gkr(jziTnd`Pcov\4Zeh}g~TSc>?01>0:f2:2iexobd/fgm[rtXkg~yS}bzs0-amkYdf}Uc}!mle]amkYdf}%inQmio]`jqY7Wje~byQPn1234929Wjsd9?5lnu`oo*abfV}ySn`{r^roqv7(j`dToczPtnr,fibXj`dTocz bra\flhXkg~T34?az17=df}hgg"ijn^uq[fhszVzgy~? bhl\gkrX|fz$najPbhl\gkr(jziTnd`Pcov\4Zeh}g~TSc>?01>6:Ze~g<80oczmlj-dakYpzViexQltq2+goiWjdSya/cng[goiWjd#o}l_ckm[fhsW9Uhcx`{_^l3456;=7Usc;?;blwfim(oldT{Qlnup\tist9&hbbRmat^vlt*dklVhbbRmat.`pgZdnfViexR>PcnwmpZYi89:;080ly408gkredb%licQxr^ampwYwd|y:#oga_blw[qiw'kfoSoga_blw+gudWkceSn`{_1]`kphsWVd;<=>36?]{kw5?3jdnae gdl\swYdf}xT|a{|1.`jjZei|V~d|"lcd^`jjZei|&idyczP02:8gkredb%licQxr^ampwYwd|y:#oga_blw[qiw'kfoSoga_blw+firf}U:?o5lnu`oo*abfV}ySn`{r^roqv7(j`dToczPtnr,fibXj`dTocz cnwmpZ7Xz}937n`{bmi,c`hX{Uhby|Ppmwp5*dnfViexRz`p.`o`ZdnfViex"m`uov\66d/ckm[fhsW}e{#obk_ckm[fhs'je~byQ=_sv0<>ei|kf`#jka_vp\gkruWyf~=m;blwfim(oldT{Qlnup\tist9&hbbRmat^vlt*dklVhbbRmat.alqkrX;Vx?55lnu`oo*abfV}ySn`{r^roqv7(j`dToczPtnr,fibXj`dTocz cnwmpZ24j2iexobd/fgm[rtXkg~yS}bzs0-amkYdf}Uc}!mle]amkYdf}%hcx`{_5]qp6>/ckm[fhsW}e{#obk_ckm[fhs'je~byQ:3c9`jqdkc&mnbRy}_blwvZvk}z;$nd`Pcov\pjv(jenTnd`Pcov,gjsi|V?T~y=7;blwfim(oldT{Qlnup\tist9&hbbRmat^vlt*dklVhbbRmat.alqkrX>:h0oczmlj-dakYpzViexQltq2+goiWjdSya/cng[goiWjd#naznu]5[wr382iexobd/fgm[rtXkg~yS}bzs0-amkYdf}Uc}!mle]amkYdf}%hcx`{_^l3456;97>;7n`{bmi,c`hX{Uhby|Ppmwp5*dnfViexRz`p.`o`ZdnfViex"m`uov\[k67896929>4covahn)`mgU|~Rmats]shpu6'kceSn`{_ums+gjcWkceSn`{/bmvjqYXf9:;<1=1419`jqdkc&mnbRy}_blwvZvk}z;$nd`Pcov\pjv(jenTnd`Pcov,gjsi|VUe<=>?<5<74>ei|kf`#jka_vp\gkruWyf~_bmvjqYXf9:;<1>1_b{l15=df}hgg"ijn^uq[fhszVzgy~< bhl\gkrX|fz$najPbhl\gkr(jziTnd`Pcov\5Zeh}g~TSc>?01>3:f292iexobd/fgm[rtXkg~yS}bzs3-amkYdf}Uc}!mle]amkYdf}%inQmio]`jqY6Wje~byQPn1234969d|~>>6matcnh+bciW~xTocz}_qnvw7)eagUhbyQ{oq-ahaYeagUhby!msb]amkYdf}U:Snaznu]\j56785;5Snw`539`jqdkc&mnbRy}_blwvZvk}z8$nd`Pcov\pjv(jenTnd`Pcov,fveXj`dToczP1^alqkrXWg:;<=2>>^zlv063Qwos73?fhsjea$kh`Pws]`jqtXxex>"lfn^ampZrhx&hghRlfn^amp*dtkVhbbRmat^3\gjsi|VUe<=>?<3<`}04_bmvjqYXf9:;<1=1cx71?fhsjea$kh`Pws]`jqtXxex>"lfn^ampZrhx&hghRlfn^amp*dtkVhbbRmat^3\gjsi|VUe<=>?<5<\g|i2:2iexobd/fgm[rtXkg~yS}bzs3-amkYdf}Uc}!mle]amkYdf}%inQmio]`jqY6Wje~byQPn1234929Wqey9=5lnu`oo*abfV}ySn`{r^roqv4(j`dToczPtnr,fibXj`dTocz bra\flhXkg~T=Rm`uov\[k67896?2nw:2:ampgjl'noeSz|Pcovq[ujr{;%iecQlnu]wku)edmUiecQlnu-awfYeagUhbyQ>_bmvjqYXf9:;<1;1_b{l17=df}hgg"ijn^uq[fhszVzgy~< bhl\gkrX|fz$najPbhl\gkr(jziTnd`Pcov\5Zeh}g~TSc>?01>6:Z~hz<:0oczmlj-dakYpzViexQltq1+goiWjdSya/cng[goiWjd#o}l_ckm[fhsW8Uhcx`{_^l3456;=7ir9?5lnu`oo*abfV}ySn`{r^roqv4(j`dToczPtnr,fibXj`dTocz bra\flhXkg~T=Rm`uov\[k67896=2Rv`r2:8gkredb%licQxr^ampwYwd|y9#oga_blw[qiw'kfoSoga_blw+firf}U;?55lnu`oo*abfV}ySn`{r^roqv4(j`dToczPtnr,fibXj`dTocz cnwmpZ74j2iexobd/fgm[rtXkg~yS}bzs3-amkYdf}Uc}!mle]amkYdf}%hcx`{_0]qp6>"lfn^ampZrhx&hghRlfn^amp*eh}g~T8R|{399`jqdkc&mnbRy}_blwvZvk}z8$nd`Pcov\pjv(jenTnd`Pcov,gjsi|V?8n6matcnh+bciW~xTocz}_qnvw7)eagUhbyQ{oq-ahaYeagUhby!lotlw[0Yu|:20oczmlj-dakYpzViexQltq1+goiWjdSya/cng[goiWjd#naznu]57g=df}hgg"ijn^uq[fhszVzgy~< bhl\gkrX|fz$najPbhl\gkr(kfexR8Pru63?fhsjea$kh`Pws]`jqtXxex>"lfn^ampZrhx&hghRlfn^amp*eh}g~TSc>?01>2:16528gkredb%licQxr^ampwYwd|y9#oga_blw[qiw'kfoSoga_blw+firf}UTb=>?0=4=`>bf|hUhcx`{<1bf|hUhcx`{<0<2<>bbj|mT~iQnup\tist9Vx7<3?7;egaqbYulVzexQltq2[w:66820hhlzg^pg[uhszVzgy~?Pr=0=5==cmklSjPpovq[ujr{8Uy0>0>8:fffpaXzmU{by|Ppmwp5Zt;<7;37ikmuf]q`Zvi|{U{`x}>_s>6:4g008``droVxoS}`{r^p?0;753moiyjQ}d^rmpwYu4<4:86jjbte\vaYwf}xT~1850?31?ace}nUyhR~ats]q8386:2nnnxiPre]sjqtX5:5=?5kecwd[wbXxg~ySz2>>008``droVxoS}`{r^u?6;753moiyjQ}d^rmpwYp4:4:>6jjbte\vaYwf}xT{1:1139gags`W{nT|cz}_v>6:423:5=?5kecwd[wbXxg~ySz29>0:8``droV}yS}`{r^roqv7X5:5=55kecwd[rtXxg~yS}bzs0]t848602nnnxiPws]sjqtXxex=Ry32?3;?ace}nU|~R~ats]shpu6W~682<64dd`vcZquWyd~R~cur3\s929911oio{h_vp\tkruWyf~bbj|mT{Qnup\tist9V}7:7>1199gags`W~xT|cz}_qnvw4Yp4?4:46jjbte\swYwf}xT|a{|2^u?4;7?3moiyjQxr^rmpwYwd|y9Sz2>>0:8``droV}yS}`{r^roqv4X585=55kecwd[rtXxg~yS}bzs3]t868602nnnxiPws]sjqtXxex>Ry34?3;?ace}nU|~R~ats]shpu5W~6>25:442:fffpaX{U{by|Pr=0=57=cmklSz|Ppovq[w:46880hhlzg^uq[uhszVx783?=;egaqbYpzVzexQ}<4<20>bbj|mT{Qnup\v90=87;97ikmuf]tvZvi|{Uy0;0>2:fffpaX{U{by|Pw=2=57=cmklSz|Ppovq[r:66880hhlzg^uq[uhszV}7>3?=;egaqbYpzVzexQx<2<26>bbj|mT{Qnup\s9299;1oio{h_vp\tkruW~6>2<:4dd`vcZquWyd~Ry36;2=57=cmklSz|Ppovq[r:16?1oec2?>79gmk:66?1oec2=>79gmk:46?1oec2;>79gmk:26?1oec29>99gmk:0294=7iga<6<4?air|5:5;6j`uu>2:2=cg|~7>394dnww86803me~x1:17:flqq:26>1ocxz36?;8`jss4>0;2:5kotv?3;3.16j[lv49?1mekaPgdlfvdrhzV|9S?Qns0;8bidkc&KGXR\K_ECWEZEH]G^T<<74fm`oo*GK\VXOSIO[A^ALQKRX9830jalck.COPZTCWMK_MRM@UOV\64?830jalck.COPZQUWMK_MRM@UOV\3<=adkf`#C??9:dofim(F8;27kbmlj-M57?389ehgjl'G;?56hcbmi,J43>3ofi`f!A17;8bidkc&D:;45ilcnh+K7?12lgnae N0;:?cjedb%E>=74fm`oo*H5911m`obd/O4;?cjedb%E;55ilcnh+K>6=2lgnae WS]GEQGXKF_EXR>i;gnahn)Xf9:;>1>1119ehgjl'Vd;<=<30?3e?cjedb%Tb=>?2=3=55=adkf`#R`?010?5;7a3ofi`f!Pn1236949991m`obd/^l3454;:7;m7kbmlj-\j567:595==5ilcnh+Zh78987?3?i;gnahn)Xf9:;>1:1119ehgjl'Vd;<=<34?3e?cjedb%Tb=>?2=7=55=adkf`#R`?010?1;7a3ofi`f!Pn1236909991m`obd/^l3454;>7;m7kbmlj-\j567:5=5==5ilcnh+Zh78987;3?i;gnahn)Xf9:;?1<1f:dofim(Wg:;<>2<>g9ehgjl'Vd;<==34?d8bidkc&Ue<=><<4?3=4=b>`kjea$Sc>?06>1:c=adkf`#R`?015?7;`0jalck.aoohic'{ns#@v`r^]m4567W[oxyaz>259ehgjl'jf`abj rez,I}iuWVd;<=?PRdqvhq75<2lgnae cminka)ulq%Ftb|P_o2347YUmzgx<<;;gnahn)ddbgdh"|kx.O{kwYXf9:;?R\jstnw57295ilcnh+fjlefn$~iv Mymq[Zh789?T^h}zlu310>`kjea$oaeboe-q`})JpfxTSc>?06]Qavsk|88?7kbmlj-`hnkhl&xot"Cwos]\j5670VXnxb{1308bidkc&igg`ak/sf{+H~hzVUe<=??_Ym?4;443ofi`f!lljol`*tcp&GscQPn1224Z^h484:>95ilcnh+fjlefn$~iv Mymq[Zh788;T^h}zlu310>`kjea$oaeboe-q`})JpfxTSc>?13]Qavsk|88?7kbmlj-`hnkhl&xot"Cwos]\j566:VXnxb{20;8bidkc&igg`ak/sf{+UHSZVHT<<74fm`oo*ekcdeo#jw/QLWVZDX9830jalck.aoohic'{ns#]@[R^@\64?0<0>a:dofim(keafci!}dy-\j566=585=l5ilcnh+fjlefn$~iv _o2350:468k0jalck.aoohic'{ns#R`?007?0;7f3ofi`f!lljol`*tcp&Ue<=?:<4<2e>`kjea$oaeboe-q`})Xf9:::1>11`9ehgjl'jf`abj rez,[k679?6?2=8=2=5f=adkf`#nbdmnf,va~(xg~ySyc<1<2g>`kjea$oaeboe-q`})wf}xTx`~31?3`?cjedb%h`fc`d.pg|*vi|{Ua}2=>0a8bidkc&igg`ak/sf{+uhszV~f|1=11b9ehgjl'jf`abj rez,tkruW}g{090>c:dofim(keafci!}dy-sjqtX|dz793?l;gnahn)ddbgdh"|kx.rmpwYsey6=2`kjea$oaeboe-q`})wf}xTx`~P50`8bidkc&igg`ak/sf{+uhszV~f|R8>d:dofim(keafci!}dy-sjqtX|dzs0=0>d:dofim(keafci!}dy-sjqtX|dzs0<0>d:dofim(keafci!}dy-sjqtX|dzs0?0>d:dofim(keafci!}dy-sjqtX|dzs0>0>d:dofim(keafci!}dy-sjqtX|dzs090>d:dofim(keafci!}dy-sjqtX|dzs080>d:dofim(keafci!}dy-sjqtX|dzs0;0>c:dofim(keafci!}dy-sjqtX|dzsS=?l;gnahn)ddbgdh"|kx.rmpwYseyrT=?7^Pfwpjs9;>0jalck.aoohic'~xs#@v`r^]m456?W[oxyaz>239ehgjl'jf`abj wsz,I}iuWVd;<<>PXn>3:75>2^Pfwpjs9;>0jalck.aoohic'~xs#@v`r^]m4575W[oxyaz=189ehgjl'jf`abj wsz,TKRUWKU;=45ilcnh+fjlefn${v POVQ[GY6901m`obd/bnhijb({r$\CZ]_C]15<=adkf`#nbdmnf,sw~(XG^YSOQ<189ehgjl'jf`abj wsz,TKRUWKU?=45ilcnh+fjlefn${v POVQ[GY2901m`obd/bnhijb({r$\CZ]_C]55d=adkf`#nbdmnf,sw~(Wg:;=82?>0c8bidkc&igg`ak/vp{+Zh788?7=3?n;gnahn)ddbgdh"y}x.]m45724;4:m6hcbmi,gimjgm%|~u!Pn12219599h1m`obd/bnhijb({r$Sc>?14>7:4ga:dofim(keafci!xry-\j566>5>5=l5ilcnh+fjlefn${v _o2361:768k0jalck.aoohic'~xs#R`?037?4;7f3ofi`f!lljol`*qup&Ue<=<7<1<2g>`kjea$oaeboe-tv})wf}xTx`~30?3`?cjedb%h`fc`d.uq|*vi|{Ua}2>>0a8bidkc&igg`ak/vp{+uhszV~f|1<11b9ehgjl'jf`abj wsz,tkruW}g{0>0>c:dofim(keafci!xry-sjqtX|dz783?l;gnahn)ddbgdh"y}x.rmpwYsey6>23?k;gnahn)ddbgdh"y}x.rmpwYseyr7?3?k;gnahn)ddbgdh"y}x.rmpwYseyr783?k;gnahn)ddbgdh"y}x.rmpwYseyr793?k;gnahn)ddbgdh"y}x.rmpwYseyr7:3?l;gnahn)ddbgdh"y}x.rmpwYseyrT<2>>b{2f>`kjea$`bifc^cp[Zh78997=3bzt0a8bidkc&fdkdmPar]\j567;585Snw`1b9ehgjl'eelenQns^]m45644;4Ttb|>a:dofim(dfmboRo|_^l3455;:7ir=n5ilcnh+ii`ajUjRQa0120868Xkpe:o6hcbmi,hjankVkxSR`?011?7;Yg{;j7kbmlj-okbodWhyTSc>?02>0:f6k2lgnae lnejgZgtWVd;<==34?]`}j7d3ofi`f!cofk`[duXWg:;<>2;>^zlv4g2Rmvo0a8bidkc&fdkdmPar]\j567;5?5Sua}1`9ehgjl'eelenQns^]m45644<4hu8<0<\g|i6i2lgnae lnejgZgtWVd;<=931?az5g=adkf`#aahib]bwZYi89:<0<0cuu3`?cjedb%gcjgl_`q\[k678>692Rmvo0a8bidkc&fdkdmPar]\j567?585Sua}1`9ehgjl'eelenQns^]m45604;4hu8<5<\g|i6k2lgnae lnejgZgtWVd;<=934?]{kw7f3ofi`f!cofk`[duXWg:;<:2;>b{2g>`kjea$`bifc^cp[Zh789=793Qlyn3`?cjedb%gcjgl_`q\[k678>6>2Rv`r0c8bidkc&fdkdmPar]\j567?5?5ot?l;gnahn)kgnchSl}P_o2342:16Virc^azk7?3ofi`f!cofk`[duX|dzT|cz}_s]gmc`Xxhn7=3Qlyn0:?cjedb%gcjgl_`q\phvXxg~ySQkigd\tdb;97Usc<8;gnahn)kgnchSl}Ptlr\tkruW{UoekhPp`f?5;e~:11m`obd/mmdmfYf{V~f|R~ats]q[aoanVzjh1?1ltv1=>`kjea$`bifc^cp[qkwWyd~R|Pdhde[ugc4;4Tota=9:dofim(dfmboRo|_uos[uhszVxThdhi_qcg878Xpfx9;6hcbmi,hjankVkxSyc_qlwvZtXl`lmS}ok<3<`}7>45ilcnh+ii`ajUjRzbp^rmpwYuWmcmjR~nd=1=[}iu:>1m`obd/mmdmfYf{V~f|R~ats]q[aoanVzjh1=1cx0;?cjedb%gcjgl_`q\phvXxg~ySQkigd\tdb;;7f~x?74fm`oo*jho`iTm~Q{mq]sjqtXzVnbjkQae>0:iss9;30jalck.nlcleXizUa}Qnup\vZbnnoU{mi2;>^azk7?3ofi`f!cofk`[duX|dzT|cz}_s]gmc`Xxhn793Qlyn0:?cjedb%gcjgl_`q\phvXxg~ySQkigd\tdb;=7Usc<8;gnahn)kgnchSl}Ptlr\tkruW{UoekhPp`f?1;e~:11m`obd/mmdmfYf{V~f|R~ats]q[aoanVzjh1;1ltv1=>`kjea$`bifc^cp[qkwWyd~R|Pdhde[ugc4?4Ttb|=8:dofim(dfmboRo|_uos[uhszVxThdhi_qcg838k}}827kbmlj-okbodWhyTx`~Ppovq[rYcaolT|lj30?]`}j4>3ofi`f!cofk`[duX|dzT|cz}_v]gmc`Xxhn7<3Qwos04?cjedb%gcjgl_`q\phvXxg~ySzQkigd\tdb;87ir>55ilcnh+ii`ajUjRzbp^rmpwYpWmcmjR~nd=2=hpr512lgnae lnejgZgtW}g{S}`{r^u\`l`aWyko0<0Pcxm1=>`kjea$`bifc^cp[qkwWyd~RyPdhde[ugc484Ttb|=7:dofim(dfmboRo|_uos[uhszV}Thdhi_qcg848dq;20jalck.nlcleXizUa}Qnup\sZbnnoU{mi2>>mww6<=adkf`#aahib]bwZrjxVzexQx_ekebZvfl585Snw`289ehgjl'eelenQns^vntZvi|{U|Sigif^rb`949Wqey>:5ilcnh+ii`ajUjRzbp^rmpwYpWmcmjR~nd=0=g|4?3ofi`f!cofk`[duX|dzT|cz}_v]gmc`Xxhn7>3bzt3;8bidkc&fdkdmPar]wiuYwf}xT{Rjffg]sea:46Virc?74fm`oo*jho`iTm~Q{mq]sjqtXVnbjkQae>0:Z~hz;=0jalck.nlcleXizUa}Qnup\sZbnnoU{mi2<>b{1<>`kjea$`bifc^cp[qkwWyd~RyPdhde[ugc4:4gyy<6;gnahn)kgnchSl}Ptlr\tkruW~UoekhPp`f?0;Ydqf827kbmlj-okbodWhyTx`~Ppovq[rYcaolT|lj34?]{kw403ofi`f!cofk`[duX|dzT|cz}_v]gmc`Xxhn783mv299ehgjl'eelenQns^vntZvi|{U|Sigif^rb`929d|~956hcbmi,hjankVkxSyc_qlwvZqXl`lmS}ok<4<\g|i512lgnae lnejgZgtW}g{S}`{r^u\`l`aWyko080Pxnp13>`kjea$`bifc^cp[qkwWyd~RyPdhde[ugc4<4hu?64fm`oo*jho`iTm~Q{mq]sjqtXVnbjkQae>6:iss:01m`obd/mmdmfYf{V~f|R~ats]t[aoanVzjh181_ymq6==adkf`#aahib]bwZrjxVzexQx_ekebZvfl5<5`xz>4:dofim(zyxnabj _o2346723ofi`f!}psgnka)Xf9:;?=5ilcnh+qnuefn$iaahib-`5*bh}}Ub====0:dofim(|axfci!jlnejg*e6'me~xRg>193e?cjedb%dc`d.gokbod'j;$hb{{_h165c=adkf`#yf}mnf,aii`aj%h="j`uu]j33473ofi`f!{hsol`*ckgnch#n< dnww[l77;;:0jalck.vkvhic'lfdkdm c3-gkprXa8;3=k5ilcnh+qnuefn$iaahib-`6*bh}}Ub?8?i;gnahn)s`{gdh"kcofk`+f4(lfSd991d9ehgjl'}byabj emmdmf)d:&ndyyQf80a8bidkc&~c~`ak/dnlcle(kfg{=b{{1b9ehgjl'}byabj emmdmf)dgdz9cxz>f:dofim(|axfci!ilnejg*@RDEUECC\JG308bidkc&~c~`ak/gnlcle(N\FGSCAARDE\m47b3ofi`f!{hsol`*`kgnch#_OB_GWOHZo5;2lgnae tipnka)adfmbo"m`mq3,`jssW`;;??=4fm`oo*rozdeo#kb`gha,gjkw9&ndyyQf10:16>`kjea$xe|boe-ehjank&ida}? dnww[l52:;1m`obd/ujqijb(neelen!lolr2+air|Vc<:??4fm`oo*rozdeo#kb`gha,gjkw9&ndyyQf8318bidkc&~c~`ak/gnlcle(kfg{>"j`uu]j5555;2lgnae tipnka)adfmbo"m`mq0,`jssW`;:4?<4fm`oo*rozdeo#kb`gha,gjkw:&ndyyQf3401?cjedb%dc`d.dokbod'jef|?!kotv\m20592lgnae tipnka)adfmbo"m`mq0,`jssW`2:i6hcbmi,pmtjgm%m`bifc.aliuYa}ef:=h5ilcnh+qnuefn$jaahib-`khvXn|fg>5=k5ilcnh+qkwWyd~R|Pdhde[ugc4=4T~y?l;gnahn)seyU{by|Pr^fjbcYwim6>2c:dofim(|dzT|cz}_s]gmc`Xxhn7:3?i;gnahn)seyU{by|Pr^fjbcYwim6=2R|{1b9ehgjl'}g{S}`{r^u\`l`aWyko0=0>c:dofim(|dzT|cz}_v]gmc`Xxhn7=3?l;gnahn)seyU{by|Pw^fjbcYwim692c:dofim(|dzT|cz}_v]gmc`Xxhn7?3?i;gnahn)seyU{by|Pw^fjbcYwim682R|{1b9ehgjl'}g{S}`{r^u\`l`aWyko090>f:dofim(|dzT|cz}_v]gmc`Xxhn783Q}t0a8bidkc&~f|R~ats]t[aoanVzjh1;11g9ehgjl'}g{S}`{r^u\`l`aWyko080Pru3`?cjedb%a}Qnup\sZbnnoU{mi29>0d8bidkc&~f|R~ats]t[aoanVzjh181_sv2<>`kjea${}|jmnf,VDKX_[UNB<:4ftnob>oijea$~iQ}su]ef454mdoahn)CG\^Te1=1119nahdkc&NDYYQf<5<24>kbekf`#IAZT^k?1;773dofnae DNWW[l:168:0ahcmlj-GKPRXa5=5?n5bel`oo*gtqgiTjdh`_9];[44?WocmcRijndpbpjtX~;U9Su}{_0]`kwcnfz~:86cjmcnh+qkwW{kfSjPeo36?hcjjea$x`~Pr`o\vaYbf820c{k}fmmte>vugnUna}zv159svjaXmdzuRzgrdqk8586<2zycjQjmqvz[qnumzb7=3?;;qplcZcjx}sTxe|jsi>1:42vugnUna}zv_ujqavn;=7;=7}|`g^gntqX|axne29:1<20>vugnUna}zv_ujqavn;>7;i7}|`g^gntqX|axneQnsrgqp9699k1{~biPelrw}ZrozlycSl}|esv?5;7e3yxdkRkbpu{\pmtb{aUj~k}t=0=5g=wzfmTi`~{y^vkv`uoWhyxiz33?3a?uthoVof|ywPtipfwmYf{zoyx1:11c9svjaXmdzuRzgrdqk[dutm{~793?k;qplcZcjx}sTxe|jsi]bwvcu|5<1<3?m;qplcZcjx}sTxe|jsi]bwvcu|5<5=o5rne\ahvsqV~c~h}g_ogdeqc;87;i7}|`g^gntqX|axneQaefcwa9799k1{~biPelrw}ZrozlycSckhaug?6;7e3yxdkRkbpu{\pmtb{aUeijo{e=1=5g=wzfmTi`~{y^vkv`uoWgolmyk34?3a?uthoVof|ywPtipfwmYimnki1;11e9svjaXmdzuRzgrdqk[kc`i}o7:7>11c9svjaXmdzuRzgrdqk[kc`i}o7:374psmd[cskd890|ah_gwohZrozlyc0=0>3:rqkbYa}efTxe|jsi>2:45018twi`Wog`Rzgrdqk8186;2zycjQiumn\pmtb{a6>2<;4psmd[cskdV~c~h}g<783:452:4g0>a:rqkbYa}efTxe|jsi]bwvcu|5>5=l5rne\bpjkW}byi~fParqfvq:268i0|ah_gwohZrozlycSl}|esv?2?699h1{~biPftno[qnumzbTm~}jru>5:4ga:rqkbYa}efTxe|jsi]mabgsm585=l5rne\bpjkW}byi~fPndebp`:468k0|ah_gwohZrozlycSckhaug?0;7f3yxdkRhzlm]wlwct`Vdnklzj<4<2g>vugnUmyabPtipfwmYimnki1850?3b?uthoVl~`aQ{hsgplZhboh~n0;0k;scn[wc`g|~Tic84re]`hn773{nThlzn_bmvjq:768:0~iQkauc\gjsi|5;5==5}d^fbpdYdg|d0?0>0:pg[agsiVidycz33?33?wbXlh~jSnaznu>7:466|k_ecweZeh}g~7;7>1119q`Zbf|hUhcx`{<6<6?wbXmg<0~iQ}su18vvr>3|doihcov78rdjnl?1|~Rolk79tvZekc8:0{Qkauc\gjsi|5:5==5xr^fbpdYdg|d0<0>0:uq[agsiVidycz32?33?rtXlh~jSnaznu>0:46<{UomyoPcnwmp929991|~Rjnt`]`kphs4<4:<6y}_ecweZeh}g~7:3?=;vp\`drfWje~by28:1<24>quWmkmRm`uov?3;3<{Unb;5xr^ppp2=k;|{;=?>;Âɾ¹Ã¸ÐÄÍ´Ì°²Þ·³»g8Õǹ×Ä·ÝηÄγÅÄCDugc<2JKt<:?:G81>4}T>90:?i4ma;3064>4j3=<58ua12`95>h6;j0?7)?{T=o0:?i4ma;3064>4j3=<585k15294?7=9rY=<7?455919i6:965:tW54c=83;1=7?66zQ54?74l3hj6<==191a>21>=2.:>84l2:&g0?27j2h:8=4?:7296?3fsS><6ou>3;05>41=9?0:97?;:0090?4b2;i1>i4r$03e>4273A;9>6*>388113=n9=>1<75f3g;94?=n;oh1<75f15194?=n<931<75f3dd94?=n;ok1<75f3gd94?=n9=81<75f41c94?=n;ji1<7*k6;1`f>hc=3:07d=la;29 a0=;jh0bi;51:9j7f?=83.o:7=lb:lg1?4<3`9h47>5$e497fd39hn6`k5;68?l5d>3:1(i853b`8ja3==21b?n;50;&g2?5dj2do9784;h07f?6=,m<1>9o4ne794>=n:=31<7*k6;07e>hc=3;07d<;8;29 a0=:=k0bi;52:9j611=83.o:7<;a:lg1?5<3`8?:7>5$e4961g38?m6`k5;78?l43<3:1(i8525c8ja3=>21b>9=50;&g2?43i2do9794;h1f`?6=,m<1?hm4ne794>=n;lh1<7*k6;1fg>hc=3;07d=ja;29 a0=;li0bi;52:9j7`?=83.o:7=jc:lg1?5<3`9n47>5$e497`e39no6`k5;78?l5b>3:1(i853da8ja3=>21b?h;50;&g2?5b<2do97>4;h1f7?6=,m<1?h:4ne795>=n;l81<7*k6;1f0>hc=3807d=j1;29 a0=;l>0bi;53:9j7`6=83.o:7=j4:lg1?2<3`9oj7>5$e497`239n86`k5;48?l5cl3:1(i853ea8ja3=821b?il50;&g2?5ck2do97?4;h1ge?6=,m<1?im4ne796>=n;m31<7*k6;1gg>hc=3907d=k8;29 a0=;mi0bi;54:9j7a1=83.o:7=kc:lg1?3<3`9o:7>5$e497ae39o?6`k5;28?l5c:3:1(i853e18ja3=921b?i?50;&g2?5c;2do97<4;h1g4?6=,m<1?i=4ne797>=n;jl1<7*k6;1g7>hc=3>07d=le;29 a0=;m90bi;55:9j7fb=83.o:7=k3:lg1?0<3`9h87>5$e497f539h?6`k5;38?l5d93:1(i853b18ja3=:21b?n>50;&g2?5d;2do97=4;h1ab?6=,m<1?n=4ne790>=n;ko1<7*k6;1`7>hc=3?07d=md;29 a0=;j90bi;56:9l56`=831d?kk50;9l603=831d?km50;9l56c=831d?ol50;9l7cb=831d?l?50;9l7ge=831d?i;50;9l65g=83.o:75$e4965?3>;;6`k5;28?j27>3:1(i854158ja3=921d8=;50;&g2?27?2do97<4;n630?6=,m<18=94ne797>=h<991<7*k6;633>hc=3>07b:?2;29 a0=<9=0bi;55:9l057=83.o:7:?7:lg1?0<3f>;<7>5$e4905138>?6`k5;28?j42:3:1(i852418ja3=921d>8?50;&g2?42;2do97<4;n064?6=,m<1>8=4ne797>=h:=l1<7*k6;067>hc=3>07b<;e;29 a0=:<90bi;55:9l61b=83.o:7<:3:lg1?0<3f8?o7>5$e4960539m;6`k5;28?j5a>3:1(i853g58ja3=921d?k;50;&g2?5a?2do97<4;n1e0?6=,m<1?k94ne797>=h;o91<7*k6;1e3>hc=3>07b=i2;29 a0=;o=0bi;55:9l7c7=83.o:7=i7:lg1?0<3f9m<7>5$e497c145|l3886`=4>a;3a>4e=9009n7?k:0:95`<5?38j6p*>1g8112=O9;80(9>k:52`?l76?3:17d?>a;29?l74;3:17d??d;29?l7513:17dk7:18'`34;hg5>5<#l?0n;6`k5;38?lc2290/h;4j7:lg1?4<3`o?6=4+d78f3>hc=3907dk<:18'`35<#l?0n;6`k5;78?lc6290/h;4j7:lg1?0<3`=m6=4+d784a>hc=3:07d9k:18'`3<0m2do97?4;h5`>5<#l?0hc=3>07d96:18'`3<0m2do97;4;h5;>5<#l?05$e4955>3;;46`k5;38?l77>3:1(i8511:8ja3=:21b==;50;&g2?7702do97=4;h330?6=,m<1==64ne790>=n9991<7*k6;33<>hc=3?07d??2;29 a0=9920bi;56:9j557=83.o:7??0:lg1?6<3`lm6=4+d78245=il<0:76gie;29 a0=99:0bi;52:9jba<72-n=6<>?;of6>6=hc=3>07dhm:18'`3<6891eh84:;:kee?6=,m<1==>4ne792>=nn00;6)j9:g:8ja3=821bj:4?:%f5>c>!b12o20bi;52:9jb0<72-n=6k64ne797>=nn=0;6)j9:g:8ja3=<21bj>4?:%f5>c>!b12o20bi;56:9jb5<72-n=6hh4ne794>=nml0;6)j9:dd8ja3=921bii4?:%f5>``65feb83>!b12ll0bi;53:9jag<72-n=6hh4ne790>=nmh0;6)j9:dd8ja3==21bi44?:%f5>``!b12ml0bi;50:9j``<72-n=6ih4ne795>=nlm0;6)j9:ed8ja3=:21bhn4?:%f5>a`!b12ml0bi;54:9j`d<72-n=6ih4ne791>=nl00;6)j9:ed8ja3=>21d:94?::m57?6=3f>?6=44o7094?=h><0;66a>2983>>ifm3:17b?=1;29?j242900ci<50;9l575=831dn:4?::mg5<#l?09?45ad483?>i5;10;6)j9:31:?kb22810c?=8:18'`3<5;01eh84=;:m173<72-n=6?=6;of6>6=6=4+d7817<=il<0?76a=3583>!b12;927cj::498k754290/h;4=389m`0<132e98?4?:%f5>7263gn>6=54o363>5<#l?098<5ad482?>i5;o0;6)j9:362?kb22;10c?=j:18'`3<5<81eh84<;:m17a<72-n=6?:>;of6>1=76a=3c83>!b12;>:7cj::798k775290/h;4=109m`0<732e9==4?:%f5>7763gn>6<54o32e>5<#l?09=<5ad481?>i58l0;6)j9:332?kb22:10c?>k:18'`3<5981eh84;;:m14f<72-n=6??>;of6>0=!b12;;27cj::198k77?290/h;4=189m`0<632e9=:4?:%f5>77>3gn>6?54o335>5<#l?09=45ad480?>i59<0;6)j9:33:?kb22=10c??;:18'`3<5901eh84:;:m156<72-n=6??6;of6>3=!b12;8:7cj::098k77a290/h;4=209m`0<532e9=h4?:%f5>7463gn>6>54o33g>5<#l?09><5ad487?>i59j0;6)j9:302?kb22<10c??m:18'`3<5:81eh849;:m41?6=,m<1;95ad483?>i0;3:1(i85759m`0<632e<>7>5$e4931=il<0976a81;29 a0=?=1eh84<;:m44?6=,m<1;95ad487?>i1n3:1(i85759m`0<232e=i7>5$e4931=il<0=76a>3383>!b1289:7cj::198k457290/h;4>309m`0<632e:>k4?:%f5>4563gn>6?54o00f>5<#l?0:?<5ad480?>i6:m0;6)j9:012?kb22=10c<;of6>3=!b12;827cj::198k74?290/h;4=289m`0<632e9>:4?:%f5>74>3gn>6?54o305>5<#l?09>45ad480?>i5:<0;6)j9:30:?kb22=10c?<;:18'`3<5:01eh84:;:m166<72-n=6?<6;of6>3=6<54o7c94?"c>36=6854o7494?"c>37563gn>6<54o30e>5<#l?09?<5ad481?>i5:l0;6)j9:312?kb22:10c?;of6>0=i>?3:1(i85989m`0<532e2:7>5$e49=<=il<0876a65;29 a0=101eh84;;:m:0?6=,m<1545ad486?>i>;3:1(i85989m`0<132e2>7>5$e49=<=il<0<76a>1783>!b128;>7cj::198k473290/h;4>149m`0<632e:=>4?:%f5>4723gn>6?54o031>5<#l?0:=85ad480?>i6980;6)j9:036?kb22=10c3=1<729q/=5<>i68h0;66sm3`f94?3=83:p(t$03e>4523A;9>6F>379j1g<722ch<7>5;nf2>5<51;294~"69o0i56F>239K5605<4290;w)?>f;301>N6:;1C=>84i4`94?=nk90;66ak1;29?xd61o0;694?:1y'54`=kh1C=?<4H015?l3e2900e:850;9j54d=831dh<4?::a5f>=8391<7>t$03e>4523A;9>6F>379j1g<722ch<7>5;nf2>5<53;294~"69o0:?85G1308L4513`?i6=44ib294?=hl80;66sm14394?2=83:p(5<7s-;:j7?=4:J267=O9:<0ci=50;9~f6g1290?6=4?{%32b?d23A;9>6F>379K00=n>80;66gk7;29?l2?2900c<>n:188yg5f<3:197>50z&25c2B:>?5G1248L13>oc?3:17d:7:188k46f2900qo=n7;291?6=8r.:=k4m6:J267=O9:<0D9;4i7394?=nn:188yg5fm3:197>50z&25c?5G1248m37=831b8l4?::k6a?6=3`>36=44o02b>5<55;294~"69o0i86F>239K560>o2m3:17d:7:188k46f2900qo=ma;297?6=8r.:=k4l5:J267=#jo0jh6F>379jfg<722cio7>5;nf2>5<53b83>5}]<>0=wl4m:36960<503826p*>1g8204=O9;80enj50;9jg`<722cjj7>5;h`3>5<5<>o69j0;66g>1e83>>o413:1(i85399m`0<732c8;7>5$e497==il<0:76g<6;29 a0=;11eh84=;:k01?6=,m<1?55ad480?>o4<3:1(i85399m`0<332c8?7>5$e497==il<0>76g<2;29 a0=;11eh849;:k75?6=,m<18=5ad483?>o4n3:1(i85419m`0<632c8i7>5$e4905=il<0976go4j3:1(i85419m`0<232c8m7>5$e4905=il<0=76g78;29 a0=0>1eh84?;:k;2?6=,m<14:5ad482?>o?=3:1(i85869m`0<532c387>5$e49<2=il<0876g73;29 a0=0>1eh84;;:k;6?6=,m<14:5ad486?>o?93:1(i85869m`0<132c3<7>5$e49<2=il<0<76g61;29 a0=191eh84?;:k;b?6=,m<15=5ad482?>o?m3:1(i85919m`0<532c3h7>5$e49=5=il<0876g7c;29 a0=191eh84;;:k;f?6=,m<15=5ad486?>o?i3:1(i85919m`0<132c357>5$e49=5=il<0<76a>1983>>i6900;66a>0c83>>i68j0;66an3;29 a0=i;1eh84?;:mb5?6=,m<1m?5ad482?>if83:1(i85a39m`0<532e2j7>5$e49e7=il<0876a6e;29 a0=i;1eh84;;:m:`?6=,m<1m?5ad486?>i>k3:1(i85a39m`0<132e2n7>5$e49e7=il<0<76anc;29 a0=ik1eh84?;:mbe?6=,m<1mo5ad482?>if13:1(i85ac9m`0<532ej47>5$e49eg=il<0876an7;29 a0=ik1eh84;;:mb2?6=,m<1mo5ad486?>if=3:1(i85ac9m`0<132ej87>5$e49eg=il<0<76sm3`:94?3=83:p(t$03e>g2<@8897E?<6:k55?6=3`>j6=44i4g94?=n<10;66a>0`83>>{e;hk1<7;50;2x 47a2k>0D<<=;I302>o193:17d:n:188m0c=831b854?::m24d<722wi?ll50;794?6|,8;m6o:4H001?M74>2c==7>5;h6b>5<>i68h0;66sm3`a94?3=83:p(t$03e>g2<@8897E?<6:&ab?6>o2m3:17d:7:188k46f2900qo?k5;291?6=8r.:=k4m4:J267=O9:<0(oh50:k55?6=3`>j6=44i4g94?=n<10;66a>0`83>>{e9jn1<7=50;2x 47a289>7E?=2:J273=n=k0;66gl0;29?jb62900qo?k9;291?6=8r.:=k4m4:J267=O9:<0(oh50:k55?6=3`>j6=44i4g94?=n<10;66a>0`83>>{e9m=1<7;50;2x 47a2k>0D<<=;I302>"en3:0e;?50;9j0d<722c>i7>5;h6;>5<1g8a2>N6:;1C=>84$cd96>o193:17d:n:188ma1=831b854?::m24d<722wi=nh50;794?6|,8;m6o:4H001?M74>2.ij7>4i7394?=nn:188yg7c93:197>50z&25c?5G1248 g`=82c==7>5;h6b>5<>i68h0;66sm1b`94?5=83:p(>od83:17bj>:188yg7dk3:187>50z&25c?5G1248m0d=831b;;4?::k25g<722eo=7>5;|`2fa<72;0;6=u+10d9g6=O9;80(oh52:J273=njk0;66ak1;29?xd6jj0;694?:1y'54`=kh1C=?<4H015?l3e2900e:850;9j54d=831dh<4?::a7=7=83?1<7>t$03e>f?<@8897)li:228L4513`hi6=44ica94?=njm0;66gme;29?jb62900qo?l0;290?6=8r.:=k4la:J267=O9:<0e8l50;9j33<722c:=o4?::mg5?6=3th:nk4?:283>5}#98l1=>;4H001?M74>2c>n7>5;ha3>5<5<3290;w)?>f;ab?M75:2B:?;5f5c83>>o0>3:17d?>b;29?jb62900qo?l2;297?6=8r.:=k4>349K574<@89=7d;m:188mf6=831dh<4?::a5f0=83>1<7>t$03e>fg<@8897E?<6:k6f?6=3`==6=44i03a>5<5<4290;w)?>f;301>N6:;1C=>84i4`94?=nk90;66ak1;29?xd6k00;694?:1y'54`=kh1C=?<4H015?l3e2900e:850;9j54d=831dh<4?::a5=3=83?1<7>t$03e>g2<@8897E?<6:&ab?6>o2m3:17d:7:188k46f2900qo?77;291?6=8r.:=k4m4:J267=O9:<0(oh50:k55?6=3`>j6=44i4g94?=n<10;66a>0`83>>{e9>l1<7=50;2x 47a289>7E?=2:J273=n=k0;66gl0;29?jb62900qo?7b;291?6=8r.:=k4m4:J267=O9:<0(oh50:k55?6=3`>j6=44i4g94?=n<10;66a>0`83>>{e9131<7;50;2x 47a2k>0D<<=;I302>"en3:0e;?50;9j0d<722c>i7>5;h6;>5<1g8a2>N6:;1C=>84$cd96>o193:17d:n:188ma1=831b854?::m24d<722wi=5?50;794?6|,8;m6o:4H001?M74>2.ij7>4i7394?=nn:188yg7?;3:197>50z&25c?5G1248 g`=82c==7>5;h6b>5<>i68h0;66sm16f94?5=83:p(>od83:17bj>:188yg70m3:187>50z&25c?5G1248m0d=831b;;4?::k25g<722eo=7>5;|`22c<72;0;6=u+10d9g6=O9;80(oh52:J273=njk0;66ak1;29?xd6>l0;694?:1y'54`=kh1C=?<4H015?l3e2900e:850;9j54d=831dh<4?::a533=8381<7>t$03e>f5<@8897)li:29K560>{e9>81<7:50;2x 47a2jk0D<<=;I302>o2j3:17d99:188m47e2900ci?50;9~f41629086=4?{%32b?74=2B:>?5G1248m0d=831bo=4?::mg5?6=3th:;84?:583>5}#98l1ol5G1308L4513`?i6=44i6494?=n98h1<75`d083>>{e9>>1<7=50;2x 47a289>7E?=2:J273=n=k0;66gl0;29?jb62900qo?88;290?6=8r.:=k4la:J267=O9:<0e8l50;9j33<722c:=o4?::mg5?6=3th:;:4?:283>5}#98l1=>;4H001?M74>2c>n7>5;ha3>5<5<3290;w)?>f;ab?M75:2B:?;5f5c83>>o0>3:17d?>b;29?jb62900qo?ia;291?6=8r.:=k4m4:J267=O9:<0(oh50:k55?6=3`>j6=44i4g94?=n<10;66a>0`83>>{e9oi1<7;50;2x 47a2k>0D<<=;I302>"en3:0e;?50;9j0d<722c>i7>5;h6;>5<1g8270=O9;80D<=9;h7a>5<>{e:9:1<7;50;2x 47a2k>0D<<=;I302>"en3:0e;?50;9j0d<722c>i7>5;h6;>5<1g8a0>N6:;1C=>84$cd94>o193:17d:n:188m0c=831b854?::m24d<722wi=k;50;794?6|,8;m6o:4H001?M74>2.ij7>4i7394?=nn:188yg7a>3:197>50z&25c2B:>?5G1248 g`=:2c==7>5;h6b>5<>i68h0;66sm1g:94?3=83:p(36=44o02b>5<7>53;294~"69o0:?85G1308L4513`?i6=44ib294?=hl80;66sm1g194?2=83:p(5<7s-;:j7m<;I316>"en380D<=9;h`a>5<5<3290;w)?>f;ab?M75:2B:?;5f5c83>>o0>3:17d?>b;29?jb62900qo?m3;296?6=8r.:=k4l3:J267=#jo087E?<6:kaf?6=3fn:6=44}c3f3?6=<3:11g8`e>N6:;1C=>84i4`94?=n??0;66g>1c83>>ic93:17pl>e783>6<729q/=6F>379j1g<722c<:7>5;h32f?6=3fn:6=44}c3f=?6=;3:11g8270=O9;80D<=9;h7a>5<>{e9ln1<7:50;2x 47a2jk0D<<=;I302>o2j3:17d99:188m47e2900ci?50;9~f4cd29086=4?{%32b?74=2B:>?5G1248m0d=831bo=4?::mg5?6=3th:j=4?:583>5}#98l1ol5G1308L4513`?i6=44i6494?=n98h1<75`d083>>{e:1>1<7:50;2x 47a2j20D<<=;%`e>77<@89=7dlm:188mge=831bni4?::m`5?6=3th8>44?:283>5}#98l1=>;4H001?M74>2c>n7>5;ha3>5<5<4290;w)?>f;301>N6:;1C=>84i4`94?=nk90;66ak1;29?xd4<=0;6>4?:1y'54`=9:?0D<<=;I302>o2j3:17dm?:188ka7=831vn>;j:180>5<7s-;:j7?<5:J267=O9:<0e8l50;9jg5<722eo=7>5;|`20`<72=0;6=u+10d9gd=O9;80D<=9;h7a>5<<1<75f10`94?=hl80;66sm15c94?5=83:p(>od83:17bj>:188yg41>3:187>50z&25c?5G1248m37=831b9h4?::k75;|`11c<72=0;6=u+10d9f6=O9;80D<=9;h42>5<>i68h0;66sm15`94?2=83:p(o?:180>5<7s-;:j7m:;I316>"en3?0D<=9;h`a>5<>{e;1>1<7;50;2x 47a2j30D<<=;%`e>66<@89=7dlm:188mge=831bni4?::kaa?6=3fn:6=44}c157?6=<3:11g8`3>N6:;1/nk48;I302>oej3:17dll:188mgb=831dh<4?::a6g?=83>1<7>t$03e>g5<@8897E?<6:J71>"en3:0e;?50;9j1`<722c?47>5;n33e?6=3th94;4?:583>5}#98l1o55G1308 g`=:81C=>84ic`94?=njj0;66gmd;29?je62900qo=9f;291?6=8r.:=k4l9:J267=#jo09>6F>379jfg<722cio7>5;h`g>5<>{e9==1<7:50;2x 47a2jk0D<<=;I302>o2j3:17d99:188m47e2900ci?50;9~f42?29096=4?{%32b?e43A;9>6*mf;08L4513`hi6=44oe394?=zj8?<6=4;:183!76n3ij7E?=2:J273=n=k0;66g86;29?l76j3:17bj>:188yg72<3:187>50z&25c?5G1248m0d=831b;;4?::k25g<722eo=7>5;|`225<72<0;6=u+10d9f1=O9;80D<=9;%`e>5=n>80;66g;a;29?l3b2900e9650;9l55g=831vn<;j:186>5<7s-;:j7l;;I316>N6;?1/nk4?;h42>5<>o303:17b??a;29?xd6=j0;684?:1y'54`=j=1C=?<4H015?!da291b:<4?::k7e?6=3`?n6=44i5:94?=h99k1<75rb355>5<3290;w)?>f;`0?M75:2B:?;5f6083>>o2m3:17d:7:188k46f2900qo?:a;291?6=8r.:=k4m4:J267=O9:<0(oh50:k55?6=3`>j6=44i4g94?=n<10;66a>0`83>>{e9<31<7;50;2x 47a2k>0D<<=;I302>"en3:0e;?50;9j0d<722c>i7>5;h6;>5<1g8270=O9;80D<=9;h7a>5<>{e9?>1<7;50;2x 47a2k>0D<<=;I302>"en3:0e;?50;9j0d<722c>i7>5;h6;>5<1g8a0>N6:;1C=>84$cd94>o193:17d:n:188m0c=831b854?::m24d<722wi>:m50;694?6|,8;m6n64H001?!da2;;0D<=9;h`a>5<>id93:17pl=6183>1<729q/=:188m0c=831b854?::m24d<722wi>;?50;694?6|,8;m6o=4H001?M74>2c==7>5;h7f>5<80;66g:e;29?l2?2900c<>n:188yg41;3:187>50z&25c?5G1248m37=831b9h4?::k75;|`121<72=0;6=u+10d9f6=O9;80D<=9;h42>5<>i68h0;66sm27794?2=83:p(5<7s-;:j7l<;I316>N6;?1b:<4?::k6a?6=3`>36=44o02b>5<57>54;294~"69o0i?6F>239K560>o303:17b??a;29?xd5=h0;694?:1y'54`=j:1C=?<4H015?l062900e8k50;9j0=<722e:1<7>t$03e>g5<@8897E?<6:k55?6=3`?n6=44i5:94?=h99k1<75rb37`>5<3290;w)?>f;`0?M75:2B:?;5f6083>>o2m3:17d:7:188k46f2900qo<:d;290?6=8r.:=k4m3:J267=O9:<0e;?50;9j1`<722c?47>5;n33e?6=3th99h4?:583>5}#98l1n>5G1308L4513`<:6=44i4g94?=n<10;66a>0`83>>{e;;o1<7=50;2x 47a2j<0D<<=;%`e>7`<@89=7dlm:188mge=831do<4?::a77b=83>1<7>t$03e>fg<@8897E?<6:k6f?6=3`==6=44i03a>5<5<4290;w)?>f;301>N6:;1C=>84i4`94?=nk90;66ak1;29?xd4;;0;6>4?:1y'54`=k?1C=?<4$cd96c=O9:<0eol50;9jff<722eh=7>5;|`074<72=0;6=u+10d9gd=O9;80D<=9;h7a>5<<1<75f10`94?=hl80;66sm32294?5=83:p(>od83:17bj>:188yg54>3:1?7>50z&25c2B:>?5+bg81b>N6;?1bno4?::kag?6=3fi:6=44}c101?6=<3:11g8`e>N6:;1C=>84i4`94?=n??0;66g>1c83>>ic93:17pl<3583>6<729q/=6*mf;0e?M74>2cin7>5;h``>5<5<3290;w)?>f;ab?M75:2B:?;5f5c83>>o0>3:17d?>b;29?jb62900qo=<8;297?6=8r.:=k4>349K574<@89=7d;m:188mf6=831dh<4?::a76`=8391<7>t$03e>f0<@8897)li:3d8L4513`hi6=44ica94?=hk80;66sm32g94?2=83:p(=k:180>5<7s-;:j7?<5:J267=O9:<0e8l50;9jg5<722eo=7>5;|`006<72:0;6=u+10d9g3=O9;80(oh52g9K560>id93:17pl<4383>1<729q/=N6;?1b9o4?::k`4?6=3fn:6=44}c171?6=;3:11g8`2>N6:;1/nk4=f:J273=njk0;66gmc;29?je62900qo<88;290?6=8r.:=k4l7:J267=#jo0?56F>379jfg<722cio7>5;h`g>5<5<4290;w)?>f;a5?M75:2.ij7oej3:17dll:188kf7=831vn>:7:187>5<7s-;:j7mn;I316>N6;?1b9o4?::k42?6=3`;:n7>5;nf2>5<53;294~"69o0:?85G1308L4513`?i6=44ib294?=hl80;66sm35f94?5=83:p(2c>n7>5;h55>5<i6=4<:183!76n3;896F>239K560>ic93:17pl<5083>6<729q/=k5G1248mgd=831bnn4?::m`5?6=3th89=4?:583>5}#98l1ol5G1308L4513`?i6=44i6494?=n98h1<75`d083>>{e;=l1<7=50;2x 47a289>7E?=2:J273=n=k0;66gl0;29?jb62900qo=:5;297?6=8r.:=k4l6:J267=#jo09j6F>379jfg<722cio7>5;na2>5<87>54;294~"69o0hm6F>239K560>o69k0;66ak1;29?xd4=:0;6>4?:1y'54`=9:?0D<<=;I302>o2j3:17dm?:188ka7=831vn>;6:180>5<7s-;:j7m9;I316>"en38m7E?<6:kaf?6=3`hh6=44ob394?=zj:?36=4;:183!76n3ij7E?=2:J273=n=k0;66g86;29?l76j3:17bj>:188yg52?3:1?7>50z&25c<6;<1C=?<4H015?l3e2900en>50;9l`4<722wi?8j50;194?6|,8;m6n84H001?!da2;l0D<=9;h`a>5<>{e;o2j3:17d99:188m47e2900ci?50;9~f63e29086=4?{%32b?74=2B:>?5G1248m0d=831bo=4?::mg5?6=3th89k4?:283>5}#98l1o;5G1308 g`=:o1C=>84ic`94?=njj0;66al1;29?xd5?l0;694?:1y'54`=k11C=?<4$cd964=O9:<0eol50;9jff<722cih7>5;na2>5<52;294~"69o0h86F>239'fc<53A;8:6gmb;29?je62900qo=?8;290?6=8r.:=k4la:J267=O9:<0e8l50;9j33<722c:=o4?::mg5?6=3th9<<4?:383>5}#98l1o>5G1308 g`=;2B:?;5fbc83>>ic93:17pl<0b83>1<729q/=N6;?1b9o4?::k`4?6=3fn:6=44}c13b?6=<3:11g8`e>N6:;1C=>84i4`94?=n??0;66g>1c83>>ic93:17pl<0d83>6<729q/=6F>379j1g<722c<:7>5;h32f?6=3fn:6=44}c125?6=;3:11g8270=O9;80D<=9;h7a>5<>{e;8?1<7:50;2x 47a2jk0D<<=;I302>o2j3:17d99:188m47e2900ci?50;9~f67329086=4?{%32b?74=2B:>?5G1248m0d=831bo=4?::mg5?6=3th8=54?:583>5}#98l1ol5G1308L4513`?i6=44i6494?=n98h1<75`d083>>{e;8h1<7<50;2x 47a2j>0D<<=;%`e>7=O9:<0eol50;9lg4<722wi?2c>n7>5;h55>5<5;|`05`<72=0;6=u+10d9gd=O9;80D<=9;h7a>5<<1<75f10`94?=hl80;66sm30f94?5=83:p(>od83:17bj>:188yg5593:187>50z&25c?5G1248m0d=831b;;4?::k25g<722eo=7>5;|`065<72:0;6=u+10d9563<@8897E?<6:k6f?6=3`i;6=44oe394?=zj:8?6=4;:183!76n3ij7E?=2:J273=n=k0;66g86;29?l76j3:17bj>:188yg55;3:1?7>50z&25c<6;<1C=?<4H015?l3e2900en>50;9l`4<722wi??950;694?6|,8;m6no4H001?M74>2c>n7>5;h55>5<239K560>ic93:17pl<2`83>1<729q/=5>50;694?6|,8;m6n64H001?!da2;;0D<=9;h`a>5<>id93:17pl=8383>1<729q/=<5G1248mgd=831bnn4?::ka`?6=3fi:6=44}c15e?6=<3:11g8a1>N6:;1C=>84i7394?=nl>0;66g;8;29?j77i3:17pl>5783>6<729q/=6=4?{%32b?d33A;9>6F>379j24<722c?m7>5;h7f>5<80;66g:e;29?l2?2900c<>n:188yg72;3:1?7>50z&25c<6;<1C=?<4H015?l3e2900en>50;9l`4<722wi?;;50;794?6|,8;m6n74H001?!da2=80D<=9;h`a>5<>oem3:17bj>:188yg5193:187>50z&25c?5+bg8a5>N6;?1bno4?::kag?6=3`ho6=44oe394?=zj:<=6=4;:183!76n3i<7E?=2:&ab?2>3A;8:6gmb;29?ldd2900eoj50;9l`4<722wi?;950;794?6|,8;m6n74H001?!da2?1C=>84ic`94?=njj0;66gmd;29?ldb2900ci?50;9~f7dd290?6=4?{%32b?d43A;9>6F>379K00=#jo0;7d8>:188m0c=831b854?::m24d<722wi>i950;794?6|,8;m6n74H001?!da201C=>84ic`94?=njj0;66gmd;29?ldb2900ci?50;9~f7?e290?6=4?{%32b?e03A;9>6*mf;12?M74>2cin7>5;h``>5<>{e:m21<7;50;2x 47a2j30D<<=;%`e><=O9:<0eol50;9jff<722cih7>5;h`f>5<5<3290;w)?>f;`0?M75:2B:?;5G449'fc<73`<:6=44i4g94?=n<10;66a>0`83>>{e:m81<7=50;2x 47a2j?0D<<=;%`e>==O9:<0eol50;9jff<722eo=7>5;|`1fg<72=0;6=u+10d9f6=O9;80D<=9;I66?!da291b:<4?::k6a?6=3`>36=44o02b>5<54;294~"69o0h46F>239'fc<63A;8:6gmb;29?ldd2900eoj50;9lg4<722wi>nm50;194?6|,8;m6n;4H001?!da211C=>84ic`94?=njj0;66ak1;29?xd5l<0;6>4?:1y'54`=k<1C=?<4$cd9<>N6;?1bno4?::kag?6=3fn:6=44}c0``?6=;3:11g8`1>N6:;1/nk47;I302>oej3:17dll:188ka7=831vn?mj:180>5<7s-;:j7m:;I316>"en320D<=9;h`a>5<>{e:jl1<7=50;2x 47a2j?0D<<=;%`e>==O9:<0eol50;9jff<722eo=7>5;|`1`5<72:0;6=u+10d9g0=O9;80(oh58:J273=njk0;66gmc;29?jb62900qo5<>i68h0;66sm31494?2=83:p(5;|`1b=<72=0;6=u+10d9f6=O9;80D<=9;I66?!da291b:<4?::k6a?6=3`>36=44o02b>5<54;294~"69o0i?6F>239K560<@=?0(oh50:k55?6=3`?n6=44i5:94?=h99k1<75rb3fb>5<3290;w)?>f;`0?M75:2B:?;5G449'fc<73`<:6=44i4g94?=n<10;66a>0`83>>{e:mh1<7:50;2x 47a2k90D<<=;I302>N3=2.ij7>4i7394?=n=l0;66g;8;29?j77i3:17pl=db83>1<729q/=5=n>80;66g:e;29?l2?2900c<>n:188yg4cl3:187>50z&25c?5G1248L13<,kl1<6g91;29?l3b2900e9650;9l55g=831vn?jj:187>5<7s-;:j7l<;I316>N6;?1C885+bg83?l062900e8k50;9j0=<722e:1<7>t$03e>g5<@8897E?<6:&ab?6>o303:17b??a;29?xd4880;694?:1y'54`=j:1C=?<4H015?!da291b:<4?::k6a?6=3`>36=44o02b>5<7>54;294~"69o0i?6F>239K560<,kl1<6g91;29?l3b2900e9650;9l55g=831vn>><:187>5<7s-;:j7l<;I316>N6;?1/nk4?;h42>5<>i68h0;66sm31694?2=83:p(5;|`040<72=0;6=u+10d9f6=O9;80D<=9;%`e>5=n>80;66g:e;29?l2?2900c<>n:188yg4a:3:187>50z&25c?5G1248L13<,kl1<6g91;29?l3b2900e9650;9l55g=831vn?h<:187>5<7s-;:j7l<;I316>N6;?1C885+bg83?l062900e8k50;9j0=<722e:1<7>t$03e>g5<@8897E?<6:J71>"en3:0e;?50;9j1`<722c?47>5;n33e?6=3th9j84?:583>5}#98l1n>5G1308L4513A>>7)li:19j24<722c>i7>5;h6;>5<1g8a7>N6:;1C=>84H578 g`=82c==7>5;h7f>5<5<>i68h0;66sm2e194?2=83:p(?4H015?lde2900eom50;9jfa<722eo=7>5;|`03d<72<0;6=u+10d9g<=O9;80(oh5479K560>oel3:17dlj:188ka7=831vn?7k:186>5<7s-;:j7m6;I316>"en330D<=9;h`a>5<>oem3:17bj>:188yg4>03:187>50z&25c?5+bg805>N6;?1bno4?::kag?6=3`ho6=44oe394?=zj;3<6=4<:183!76n3i>7E?=2:&ab?><@89=7dlm:188mge=831dh<4?::a6t$03e>f?<@8897)li:89K560>oel3:17dlj:188ka7=831vn?j9:187>5<7s-;:j7m8;I316>"en39:7E?<6:kaf?6=3`hh6=44icf94?=hl80;66sm28394?5=83:p(5}#98l1o85G1308 g`=02B:?;5fbc83>>oek3:17bj>:188yg4>:3:1?7>50z&25c?5+bg8;?M74>2cin7>5;h``>5<5<4290;w)?>f;a6?M75:2.ij764H015?lde2900eom50;9l`4<722wi>4:50;194?6|,8;m6n;4H001?!da211C=>84ic`94?=njj0;66ak1;29?xd51<0;6>4?:1y'54`=k<1C=?<4$cd9<>N6;?1bno4?::kag?6=3fn:6=44}c0:2?6=;3:11g8`1>N6:;1/nk47;I302>oej3:17dll:188ka7=831vn?o;:187>5<7s-;:j7l<;I316>N6;?1C885+bg83?l062900e8k50;9j0=<722e:1<7>t$03e>g5<@8897E?<6:&ab?6>o303:17b??a;29?xd5jm0;694?:1y'54`=j:1C=?<4H015?M223-hm6=5f6083>>o2m3:17d:7:188k46f2900qo<6e;290?6=8r.:=k4m3:J267=O9:<0D9;4$cd94>o193:17d;j:188m1>=831d==o50;9~f7?a290?6=4?{%32b?d43A;9>6F>379K00=#jo0;7d8>:188m0c=831b854?::m24d<722wi>l>50;694?6|,8;m6o=4H001?M74>2B?96*mf;28m37=831b9h4?::k75;|`1e4<72=0;6=u+10d9f6=O9;80D<=9;I66?!da291b:<4?::k6a?6=3`>36=44o02b>5<7>54;294~"69o0i?6F>239K560<@=?0(oh50:k55?6=3`?n6=44i5:94?=h99k1<75rb3c0>5<3290;w)?>f;`0?M75:2B:?;5G449'fc<73`<:6=44i4g94?=n<10;66a>0`83>>{e:j?1<7:50;2x 47a2k90D<<=;I302>"en3:0e;?50;9j1`<722c?47>5;n33e?6=3th9o;4?:583>5}#98l1n>5G1308L4513-hm6=5f6083>>o2m3:17d:7:188k46f2900qo5<3290;w)?>f;`0?M75:2B:?;5+bg83?l062900e8k50;9j0=<722e:1<7>t$03e>g5<@8897E?<6:&ab?6>o303:17b??a;29?xd5kh0;694?:1y'54`=j:1C=?<4H015?!da291b:<4?::k6a?6=3`>36=44o02b>5<54;294~"69o0i?6F>239K560<@=?0(oh50:k55?6=3`?n6=44i5:94?=h99k1<75rb3`;>5<3290;w)?>f;`0?M75:2B:?;5G449'fc<73`<:6=44i4g94?=n<10;66a>0`83>>{e9<:1<7=50;2x 47a289>7E?=2:J273=n=k0;66gl0;29?jb62900qo?6b;297?6=8r.:=k4>349K574<@89=7d;m:188mf6=831dh<4?::a73e=83>1<7>t$03e>f1<@8897)li:c08L4513`hi6=44ica94?=njm0;66ak1;29?xd6j80;6?4?:1y'54`=k:1C=?<4$cd97>N6;?1bno4?::mg5?6=3th:5n4?:583>5}#98l1ol5G1308L4513`?i6=44i6494?=n98h1<75`d083>>{e;?n1<7:50;2x 47a2k?0D<<=;I302>"en380e;?50;9j`2<722c?47>5;n33e?6=3th8;>4?:483>5}#98l1o45G1308 g`=:;1C=>84ic`94?=njj0;66gmd;29?ldb2900ci?50;9~f4??29086=4?{%32b?74=2B:>?5G1248m0d=831bo=4?::mg5?6=3th84?4?:483>5}#98l1o45G1308 g`=:;1C=>84ic`94?=njj0;66gmd;29?ldb2900ci?50;9~f61e290?6=4?{%32b?d23A;9>6F>379'fc<53`<:6=44ie594?=n<10;66a>0`83>>{e;1?1<7=50;2x 47a2j?0D<<=;%`e>7`<@89=7dlm:188mge=831dh<4?::a7=6=8391<7>t$03e>f3<@8897)li:3d8L4513`hi6=44ica94?=hl80;66sm18;94?2=83:p(9;:186>5<7s-;:j7m6;I316>"en39;7E?<6:kaf?6=3`hh6=44icf94?=njl0;66ak1;29?xd61l0;6>4?:1y'54`=9:?0D<<=;I302>o2j3:17dm?:188ka7=831vn:180>5<7s-;:j7?<5:J267=O9:<0e8l50;9jg5<722eo=7>5;|`2e1<72:0;6=u+10d9563<@8897E?<6:k6f?6=3`i;6=44oe394?=zj8h;6=4::183!76n3h?7E?=2:J273=#jo0;7d8>:188m1g=831b9h4?::k75;|`2f7<72<0;6=u+10d9f1=O9;80D<=9;%`e>5=n>80;66g;a;29?l3b2900e9650;9l55g=831vn5<7s-;:j7?<5:J267=O9:<0e8l50;9jg5<722eo=7>5;|`2e2<72<0;6=u+10d9f1=O9;80D<=9;%`e>5=n>80;66g;a;29?l3b2900e9650;9l55g=831vn5<7s-;:j7l;;I316>N6;?1/nk4?;h42>5<>o303:17b??a;29?xd6ih0;684?:1y'54`=j=1C=?<4H015?!da291b:<4?::k7e?6=3`?n6=44i5:94?=h99k1<75rb0c`>5<2290;w)?>f;`7?M75:2B:?;5+bg83?l062900e9o50;9j1`<722c?47>5;n33e?6=3th:mh4?:483>5}#98l1n95G1308L4513-hm6=5f6083>>o3i3:17d;j:188m1>=831d==o50;9~f4g5290?6=4?{%32b?ef3A;9>6F>379j1g<722c<:7>5;h32f?6=3fn:6=44}c3b1?6=<3:11g8`e>N6:;1C=>84i4`94?=n??0;66g>1c83>>ic93:17pl>9783>7<729q/=6F>379jfg<722eo=7>5;|`2=0<72=0;6=u+10d9gd=O9;80D<=9;h7a>5<<1<75f10`94?=hl80;66sm37g94?3=83:p(>4H015?lde2900eom50;9jfa<722cii7>5;nf2>5<55;294~"69o0h56F>239'fc<482B:?;5fbc83>>oek3:17dlk:188mgc=831dh<4?::a720=8391<7>t$03e>f3<@8897)li:3d8L4513`hi6=44ica94?=hl80;66sm36g94?3=83:p(>4H015?lde2900eom50;9jfa<722cii7>5;nf2>5<52;294~"69o0h?6F>239'fc<43A;8:6gmb;29?jb62900qo=8d;291?6=8r.:=k4l9:J267=#jo09>6F>379jfg<722cio7>5;h`g>5<>{e;>i1<7;50;2x 47a2j30D<<=;%`e>66<@89=7dlm:188mge=831bni4?::kaa?6=3fn:6=44}c144?6==3:11g8`=>N6:;1/nk4<0:J273=njk0;66gmc;29?ldc2900eok50;9l`4<722wi=io50;094?6|,8;m6n=4H001?!da2:1C=>84ic`94?=hl80;66sm36d94?3=83:p(>4H015?lde2900eom50;9jfa<722cii7>5;nf2>5<7>55;294~"69o0h56F>239'fc<482B:?;5fbc83>>oek3:17dlk:188mgc=831dh<4?::a723=83?1<7>t$03e>f?<@8897)li:228L4513`hi6=44ica94?=njm0;66gme;29?jb62900qo?nd;296?6=8r.:=k4l3:J267=#jo087E?<6:kaf?6=3fn:6=44}c36b?6=:3:11g8`7>N6:;1/nk4<;I302>oej3:17bj>:188yg7c03:1>7>50z&25c?5+bg80?M74>2cin7>5;nf2>5<52;294~"69o0h?6F>239'fc<43A;8:6gmb;29?jb62900qo?k2;296?6=8r.:=k4l3:J267=#jo087E?<6:kaf?6=3fn:6=44}c3g0?6=:3:11g8`7>N6:;1/nk4<;I302>oej3:17bj>:188yg7c>3:1>7>50z&25c?5+bg80?M74>2cin7>5;nf2>5<52;294~"69o0h?6F>239'fc<43A;8:6gmb;29?jb62900qo?72;296?6=8r.:=k4l3:J267=#jo087E?<6:kaf?6=3fn:6=44}c3;0?6=:3:11g8`7>N6:;1/nk4<;I302>oej3:17bj>:188yg7?>3:1>7>50z&25c?5+bg80?M74>2cin7>5;nf2>5<52;294~"69o0h?6F>239'fc<43A;8:6gmb;29?jb62900qo?if;296?6=8r.:=k4l3:J267=#jo087E?<6:kaf?6=3fn:6=44}c3e3?6=:3:11g8`7>N6:;1/nk4<;I302>oej3:17bj>:188yg7a13:1>7>50z&25c?5+bg80?M74>2cin7>5;nf2>5<52;294~"69o0h?6F>239'fc<43A;8:6gmb;29?jb62900qo?id;296?6=8r.:=k4l3:J267=#jo087E?<6:kaf?6=3fn:6=44}c36`?6=:3:11g8`7>N6:;1/nk4<;I302>oej3:17bj>:188yg72j3:1>7>50z&25c?5+bg80?M74>2cin7>5;nf2>5<52;294~"69o0h?6F>239'fc<43A;8:6gmb;29?jb62900qo?91;296?6=8r.:=k4l3:J267=#jo087E?<6:kaf?6=3fn:6=44}c10f?6=;3:11g8`2>N6:;1/nk4=f:J273=njk0;66gmc;29?je62900qo=67;296?6=8r.:=k4l4:J267=#jo087E?<6:kaf?6=3fi:6=44}c1:=?6=:3:11g8`0>N6:;1/nk4<;I302>oej3:17bm>:188yg5>j3:1>7>50z&25c?5+bg80?M74>2cin7>5;na2>5<52;294~"69o0h86F>239'fc<43A;8:6gmb;29?je62900qo=6f;296?6=8r.:=k4l4:J267=#jo087E?<6:kaf?6=3fi:6=44}c1;f?6=:3:11g8`0>N6:;1/nk4<;I302>oej3:17bm>:188yg5?l3:1>7>50z&25c?5+bg80?M74>2cin7>5;na2>5<52;294~"69o0h86F>239'fc<43A;8:6gmb;29?je62900qo=61;296?6=8r.:=k4l4:J267=#jo087E?<6:kaf?6=3fi:6=44}c1:7?6=:3:11g8`0>N6:;1/nk4<;I302>oej3:17bm>:188yg7fj3:1>7>50z&25c?5+bg80?M74>2cin7>5;nf2>5<52;294~"69o0h?6F>239'fc<43A;8:6gmb;29?jb62900qo?nf;296?6=8r.:=k4l3:J267=#jo087E?<6:kaf?6=3fn:6=44}r47>5<6;rT=863;60<0?m63>8687e>;60k0?m63>8887e>;6090?m63>8087e>;60:0?m63>6187e>;6=l0?m63>5b87e>;6=h0?m63>5887e>;6>=0?m63>6387e>;4>10==63<668g5>;4>j0in6s|b683>0}Y>:1Un:523`29fg=:;>k1nn5236`955g3ho70=97;``?xu61h0;6>u218d91g=:90i1h<5218g91g=z{::j6=4<{<13g?b6349;j7;m;<13a?3e3ty:n44?:3y>5g4=>816=l85d09~w74f290?wS<=a:?2`<<68h16=io5bc9>72`=jl1v<78:18087>j3?i70?6c;7a?87>13n:7p}60|5:k=6<>n;<1b3?2f349i47?>c:?2`6<2m27:h84:e:?2`<<2m27:h:4:e:?2g`4:e:?121<2m279:84:e:?1b=<2m279j?4:e:?1b6<2m279j94:e:?1b0<2m279j;4:e:?1b2<2m279m94:e:?1gg<2m2795h4:e:?1=c<2m279m=4:e:?1e4<2m279m?4:e:?1e6<2m279o84:e:?1g3<2m279o:4:e:?1g=<2m279o44:e:?1gd<2m278;o4k7:?2f5<2m27:n?4:e:?2e2<2m27:m54:e:?2ed<2m27:mn4:e:?2e`<2m2wx=8;50;0x94302m;01<;7:4`8yv76i3:19vP>1`9>7d4=l>16?l85d69>7d2=l>16?l95d69~w34=83>pR;<4=246>gb<5:<<6ol4=24g>46f3ty:::4?:3y>51b=l816=8m5609~w33=83;3wS8:;<1a27:h>4;a:?2`0<3i27:h44;a:?2`2<3i27:oh4;a:?2gc<3i27:h<4;a:?2bd<3i27:jn4;a:?145<3i27:jh4;a:?2b0<3i27:j;4;a:?2b=<3i278m=4k1:?2f5<3i27:n?4;a:?2e2<3i27:m54;a:?2ed<3i27:mn4;a:?2e`<3i2wx>>>50;6xZ7573493=7lj;<3ea?77i27:jk4mb:p530=838p1<:n:e38943f2?;0q~5<4sW;8?63;4?h0ih6s|23494?2|V;8=70?k3;33e>;4090io63>d58af>{t:;>1<7:t^307?87dn3;;m63<7d8aa>;6l90in6s|11f94?5esW;;h63;4im0?463;4il0?463;4j10>h63;4i00?463;4ik0?463;60<0?463>8687<>;60k0?463>8887<>;6090?463>8087<>;60:0?463=5g87<>;5j00?463>6187<>;6=l0?463>5b87<>;6=h0?463>5887<>;6>=0?463>6387<>;5=10?463=5887<>;5=h0?463=5c87<>;5=j0?463=5e87<>;5=l0?463<6`87<>;4>10?463<6887<>;5jj0?463=b`87<>;5jk0?463=dg87<>;48?0?463=d887<>;5lh0?463=dc87<>;5lj0?463=de87<>;5ll0?463<0187<>;4880?463<0387<>;48:0?463<0587<>;48<0?463=be87<>;5j>0?463=b987<>;4>m0?46s|2dd94?4|5::?6;?4=3d5>46f3ty9>84?:5y]673<58n:6<>n;<14a?dd34;o>7lm;|q:6?6=:rT2>63;6kl0:l1nn5rs2c0>5<4jr78m?4>0`9>7db==l16?l:54`9>7dc==l16?lh55d9>7gg=jj16?o6510f896g?2o6:4g896gf2om:4g896gd202>2622287:4g8960>2>9:4g897b>2>>:4g896652><:4g896632>::4g897dc28k:e58yv7113:1>v3>61855>;6=:0o=6s|23594?2|V;8<70?k5;33e>;4?j0ii63>d78af>{t1<0;6?uQ949>7dd=99k0q~<1855227290==::?;1855227090==::?91855227690==::??185522g:90==::o8185522g190==::o>185522g790==::o<185522g590==::h>185522b`90==::0o1855228d90==::h:185522`390==::h8185522`190==::j?185522b490==::j=185522b:90==::j3185522bc90==:;>h185521c290==:9k8185521`590==:9h2185521`c90==:9hi185521`g90==z{;996=4;{_006>;4080io63=01824d=::9;1no5rs8494?4|V0<01>ol:02b?xu5ih0;6?u22ca924=::0;1h<5rs3d`>5<5s48o;7lm;<137?77i2wx5:4?:3y]=2=:;hn1==o4}r;;>5<5sW3370=ne;33e>{t98;1<7{t:h21<737<5;386i?4}r0bb?6=:r795:4k1:?1e6<192wx>ok50;0x97?c2kh01?m::02b?xu4>00;6hu22969ff=:;?91nn522949ff=::>i1nn5226:9ff=::>o1nn522929ff=::181nn5237;955g<5:<>6om4=242>ge<5:<=6ol4=244>gb<5;=j6om4}r0fk?50;0x96612?;01?h7:02b?xu5no0;68u22e59f`=::m81nn522ed924=:;9<1==o4=3f0>gb52z?1ff<68h16>no5609~w44c2909wS?=d:?127<68h1v<>j:181[77m279954>0`9~w4552909wS?<2:?123<68h1v<0`9~w7da2908w0<6b;`g?84>l3hh70{t9::1<7{t:j:1<7:t=3;a>gd<5;3o6oj4=3;b>gd<5;i<6<>n;|q26c<72;qU=?h4=347>46f3ty:594?:2y>5<>==k16=4755c9>5<3=l81vnl50;ax945?2m901<01<01>:7:4`896202>7:648967f2><01<7::648yv5f?3:1>v3;4i>0:5<5s48247j>;<0b6?063ty9o94?:4y>6<>=jm16>495bb9>6l:5609>6fd=99k0q~{t1=0;6?uQ959>7dg=99k0q~;5=l0:5<5sW;:?63=5e824d=z{8:m6=4={_33b>;5=00:5<5s482o7lm;<0`{t9;k1<73;;m6s|34c94?4|5:?n68l4=27`>a752z\26g=::?:1==o4}r326?6=:rT:=?5224a955g52z?227<1927:9;4k1:p5<5=839p1;3:1>vP63:?0e<<68h1v0`9~w7cb2909w0=?3;42?84a=3;;m6s|ad83>7}Yil16?;o511c8yv5bm3:15v3;4il0?m63;4i10?m63;4ih0?m63;4ij0?m63<678g5>{tn80;69?t^568Z44?3W;9=6P;3:\g6>X6::1Uh55Qf09>561=j116=4h5779>507=??16?l:5609>7d1=>816?o65ce9>7g>=kl16?o65ag9>7g>=9;=01>l7:83896d?21l01>l7:9g896d?21n01>l7:9a896d?21h01>l7:9c896d?21301<012><01<9j:648940b2<01<97:648941e2><01<01<01<:j:648942e2><01<:8:4`894302><01<;;:648966?2>l:648966a2><01>?=:64896722><01>?7:648967f2?j:64896462><01><;:64896402><01><01<76:64894g52><016a`=99k01>9>:cg896152ki0q~<<8;292~X5;116?9=5bc9>714=??16>ik511c8960b2ki01>9=:cg8yv44?3:1:vP=369>76`=jk16?>k5779>6ab=99k01>8j:cg896112ki0q~<<6;292~X5;?16?>o5bc9>76?=??16>im511c896132ki01>=m:c`8yv44=3:1:vP=349>760=jk16?>;5779>6ad=99k01>9;:cg896172ki0q~<<4;292~X5;=16?><5bc9>767=??16>io511c896172ko01>9::ca8yv44;3:1:vP=329>77c=jk16??j5779>6a?=99k01>9>:ca896122ko0q~;|q2e5<72:q6=l:55c9>5d4=l816=l;55c9~w6032909w0=98;6b?851=3n:7p}<0683>6}:;921h<5231a91g=:;9h19o5rs353>5<5s49>i7m?;<16b?e63ty9:k4?:2y>70b=k816?8m510`8963e2j:0q~=>f;297~;4:80o=63<2586f>;4::0>n6s|27a94?5|5:?:6n?4=273>47e349?j7m?;|q12=<72:q6?9=5c09>714=98h01>:>:b28yv40<3:1?v3<338`5>;4;80:=o523229g5=z{;b:?002;k50;1x963>2j;01>;7:03a?852?3i;7p}:2;296~;40:0o=63<838ag>{t:>?1<7=t=215>f7<5:9>676`=k816?>k510`8965c2j:0q~<99;296~;4<=0h<63<448`5>{t:?h1<7=t=26g>f7<5:>h6703=k816?8:510`896342j:0q~==5;297~;4:00>n63<268g5>;4:h0>n6s|26194?5|5:8n6n?4=20g>47e3499o7m?;|q167<72?<4=2:2>gd<5:?m6om4=3c7>46f349?>4=2:2>gb<5:?o6om4=3c0>46f349ge<5;k96<>n;<1;1?de349ge<5:286ol4=3c2>46f3493<7lm;|q15a<72ge<5:286oj4=3c3>46f349gd<5:>o6om4=3;e>46f349gb<5:>26om4=3;f>46f3497g>=;016=o=5bc9>70`=jk16>nm5bb9>6c>=>816=o<511c8yv142902wS<;0:\47>;4j108;63<5e8af>;4=j0<:63=cb8af>;5km0io63>b08af>;6j90:57lm;<16;01>l7:27896322kh01>;;:64897eb2kh01?mi:ca894gd28:j70?nd;`a?xu083:15vP=3e9]35=:;k21?9523439fg=:;<:1;;522bd9fg=::m:1nn521`c955g<58ki6ol4}r4e>5<>sW88o6P9f:?0f=<4;2788i4mb:?00f<0>279h=4mb:?1`40`9>5d?=jk1v;k50;:xZ75e3W;61?0in6s|21g94?2|V;:n70?75;33e>;4?=0in63>878af>{t:8:1<7:t^333?87?13;;m63<738a`>;60h0in6s|2d694?4|5;io6i?4=3d5>37o6=4={<147?de349<:7j>;|q0e1<72;q6?l<5609>7d2=99k0q~0io63<05824d=::m91no5rs30`>5<3sW89o63>f7824d=:;1>1nn521g59fg=z{;8n6=4;{_01a>;6nh0:5<4s49?47j>;<17g?3e349?n7;m;|q055<72:q6?<<5d09>743==k16?<:55c9~w6272909w0=;4;7a?853:3n:7p}<3b83>6}:;:o1h<5235091g=:;=;19o5rs214>5<4s49857j>;<10a?3e3498h7;m;|q076<72:q6?>;5d09>76?==k16?>655c9~w64a2908w0=<1;f2?854=3?i70=<4;7a?xu1l3:15vP=1`9]2a=:;k218<521779fg=:9?>1==o4=266>ge<5;3:6om4=3`g>37<5:=:6oj4}r4a>5<>sW8:46P9b:?0f=<4n27::?4>0`9>715=jj16>4?5bc9>6<4=jj16?;k5bc9>535=jk1v;o50;;xZ7703W;51;0in63=928ag>;4>l0ih63>608af>{t>00;64uQ2048Z3?<5:h36>j4=07f>46f3498m7ll;<0:7?de348287ll;<36b?de3498n7ll;|q57g>=;j16=8m511c896512ki01?7;:c`897?22ki01>9?:c`8943c2kh0q~88:18:[46<2T=;63;6=h0::1ni5214`9fg=z{?<1<76t^330?[01349i47=n;<3757??a:?06`=>:4`896572c;297~;49l0o=63<2086f>;4:90>n6s|33094?5|5:8?6i?4=204>0d<5:8=68l4}r162?6=;r78954k1:?01f<2j2789o4:b:p704=839p1>;;:e38963?2;8:4`8yv53m3:1?v3<518g5>;4==0>n63<5286f>{t;=k1<7=t=26`>a7<5:?;68l4=26e>0d54z\16g=:9o?1==o4=0g7>gd<5:2?6ok4}r015521e5955g<5:=h6om4=0f;>gd52z?21`<1927:9=4k1:p644=83>pR??=;<3;f?77i27:4n4mb:?0375086f>;65186f>{t9<81<7=t=074>0d<58??6i?4=075>0d54z\14f=:91;1==o4=256>gd<58296ol4}r35f?6=:r7:954k1:?221<192wx>?j50;6xZ74c34;m47??a:?0<646825g=:9=21h<5214;924=z{;:m6=4;{_03b>;60>0:5<3sW8;h63>82824d=:;>>1ni521969fg=z{;8m6=4;{_01b>;6nj0:5<3sW8;n63>81824d=:9?l1no523679fa=z{;o86=4={<0`a?b6348m978>;|q1b`<72=q6>i95be9>6a4=jk16?=;511c897b42ki0q~{t:l31<737<5;n=6i?4}r0a2?6=:r79oo491:?1fa<68h1v?l;:18184ej3;;m63=c8855>{t:031<7;t=3;a>ge<5;3o6ok4=3;`>a7<5;3j6om4=3c2>37h1<70q~9n:181[1f349i476<;|q4=?6=:rT<563{t?10;6?uQ799>7g>=081v:950;0xZ21<5:h365>4}r0a5?6=:r79o;491:?1f=<68h1v?ok:18184>i3n:700;6?u22ef924=::m91h<5rs3g6>5<5s48ho7j>;<0e3?063ty8;:4?:3y>73`=l816?;m5be9~w64?2909w0<76;`g?855i3n:7p}=e183>7}::m;1h<522g0924=z{:;26=4<{<12e?b6349:i7;m;<12`?3e3ty94h4?:3y>775=l816>5>5be9~w6?22909w0=;b;f2?85713hi7p}7}:;k21m8523`;924=z{:h96=4={<1a;|q0f<<72;q6?oo5d09>7g>=j91v>l8:18185fn3<:70=m8;c`?xu4j?0;6?u23`g924=:;k21ml5rs2`7>5<5s49i47o7;<1bg?063ty8n84?:3y>7db=>816?o65a89~w6d42909w0=m8;c4?85fj3<:7p}7}:;k21m9523`:924=z{8i<6=4<{<3`f?3e34;ho7;m;<3`=?b63ty:o94?:2y>5f>==k16=n85d09>5f?==k1v:18087d;3n:70?l6;7a?87d=3?i7p}>e183>7}:9jn1h<521e;924=z{8hn6=4<{<3`4?b634;h?7;m;<3`6?3e3ty:no4?:2y>5ge=l816=n>55c9>5g`==k1va752z?2gc<1927:nk4k1:p5a`=838p1c38g5>{t9mn1<737<58i>6i?4}r3ga?6=:r7:o54k1:?2`0<192wx=;;50;0x94022m;01<;7:b28yv7013:1?v3>7e86f>;6?l0>n63>7c8g5>{t9><1<7=t=05b>0d<58=36i?4=05a>0d53z?230738g5>;6?<0>n63>7586f>{t9?n1<7=t=04f>a7<58=968l4=052>0d53z?2<5<1927::k4k1:?22`<69k1v<9l:181870n3?i70?8e;f2?xu60m0;6?u2193924=:9>;1h<5rs0;2>5<5s4;3578>;<34`?b63ty:4h4?:3y>5=5=>816=::5d09~w4>a2909w0?75;42?870?3n:7p}>9183>7}:9>k1h<52195924=z{8h86=4={<3a7?b634;j:7m?;|q2a`<72:q6=k<55c9>5c5==k16=k>5d09~w4ce2908w0?jf;7a?87bl3n:70?i0;7a?xu6m10;6>u21dc9`4=:9ln19o521da91g=z{;:<6=4={<3e0?b6348;<78>;|q2a0<72:q6=h95d09>5`g==k16=h755c9~w4c52908w0?j3;f2?87b?3?i70?j6;7a?xu6m80;6>u21g7924=:9l>1h<521d1954d52z?2b1<2j27:j>4k1:p654=838p1f38g5>{t:991<737<58o26i?4}r030?6=:r7:jl491:?2af=;50;0x94ca2m;016}::?:1:<5231;9g4=:;921=50;0x960>2?;01>8>:e38yv7e<3:1>v3>998g5>;6i10==6s|26;94?4|5;?26;?4=35b>f752z?133<192788:4k1:p7<6=838p1>:>:e3896?62kh0q~=92;296~;4>:0o=63<6`855>{t;1i1<7a7<5:2o6ol4}r1;=?6=;r78?=4k1:?05g9n:e38961e2?;0q~0o=63=d98aa>;5l<0io63=db855>;5l?0io6s|37:94?c|5;2?6ol4=240>gd<5;2=6ol4=35`>gd<5;=36ol4=35f>gd<5;2;6ol4=3:1>gd<5:<36<>n;<151?de349==7lk;<152?dd349=;7lj;<04e?de3ty94<4?:3y>60b=>816>5<5c09~w6>b2909w0=7}::m:1h<522g1924=z{;=m6=4={<06g?063483<7m>;|q0<2<72;q6?:o5bd9>7=4=l81v?9k:181842j3<:70<8e;a2?xu5?k0;6?u226a9g4=::5<4s48247lm;<0:g?dd348h57??a:p6g5=838p1?ln:02b?84d03<:7p}>b683>7}:9h;1h<521`g924=z{;h;6=4={<0`1?06348i;7??a:p7=>=838p1>ab855>{t9=<1<7=t=06b>0d<58>i68l4=064>a752z?063p1?77:ca897?02kh01?7l:cf897ef28:j7p}<8783>7}:;>k1no5236f9`4=z{8nj6=4={<3``?e734;om7j>;|q1ag<72;q6?=>5609>6c4=99k0q~?m8;296~;6i=0o=63>b1855>{t:l81<7a7<5;l?6;?4}r77>5<5s493=7j>;<1;6?db3ty8:o4?:3y>73e=l816?;j5609~w7`72909w0=?5;42?84a?3;;m6s|39c94?4|5:9?6i?4=2:a>gd52z?1`=0`9~w7c12909w07}:;?i1nn523619`4=z{83o6=4<{<3:b?b634;j=7;m;<3b6?3e3ty9484?:3y>60`=>816>585c09~w4d22909w0?6b;f2?87fi3<:7p}=9183>7}::1>1ni5233;9`4=z{:336=4={<167?b6349257lm;|q1e`<72;q6>4l5d09>6<`=>81v>7l:181852j3n:70=6d;`a?xu41;0;6?u23569`4=:;091no5rs2;5>5<5s49?j7j>;<1:3?de3ty9jo4?:5y>6a>=jm16>i;5bc9>754=99k01?j9:c`8yv5>i3:1>v3<568g5>;41k0in6s|38g94?4|5:?n6i?4=2;e>gd52z?1fg<192795?4k1:p14<72;q6?5<5bc9>7=3=l81v?98:18184203<:70<88;f2?xu50>0;6?u2273924=:;9h1h<5rs3:;>5<5s48=>78>;<13a?b63ty:n<4?:2y>5g7=l816=l:5c19>5d3=98h0q~<79;296~;5>:0==63<108g5>{t:h=1<737<5;3?6i?4}r0;e?6=:r79:9491:?051?=:4`8967623;297~;49>0>n63<148g5>;4910>n6s|29`94?4|5:;<6i?4=346>37n6=4={<147?dd349<87j>;|q053<72;q6>;85609>74>=l81v?6l:181840k3ho70=>d;f2?xu5?;0;6?u230`9g4=:;8k1=73`=jj16?:>5d09~w0>=838p1>8i:cg8960b2m;0q~;8:181851n3ho70=81;f2?xu213:1>v3<818g5>;4?m0in6s|21394?4|58l?6n>4=322>a752z?23c72e=l81v9l50;0x961c2kn01>9i:e38yv3f2909w0=8e;f2?850l3hh7p}:5;296~;4>o0in63<3`8g5>{t=:0;6?u23969`4=:;181ni5rs5d94?4|5:=86oj4=256>a753z?2=c<69k16=4k5c19>5db=l81v<;i:18087293;:n63>518`4>;6=o0o=6s|1e:94?5|58ii6n>4=0a`>47e34;o47j>;|q2`5<72:q6=n>510`894da2j:01c2825g=:9j81o=521e09`4=z{8n?6=4<{<3`2?76j27:o84l0:?2`13n:7p}>8`83>6}:9>n1o=5216g954d<582j6i?4}r3;6?6=;r7:;?4>1c9>527=k916=5<5d09~w4>32908w0?85;32f>;6?=0h<63>858g5>{t91<1<7=t=05;>47e34;<;7m?;<3;2?b63ty:454?:2y>52g=k916=:l510`894>?2m;0q~?if;297~;6n;0h<63>f2825g=:9ol1h<5rs0d4>5<4s4;n;7?>b:?2a3u21df954d<58oh6n>4=0da>a753z?2ac1c9>5cb=l81v<;k:180873l3i;70?;e;32f>;6=m0o=6s|14`94?5|58>j6n>4=06a>47e34;>n7j>;|q226<72:q6=89510`894312j:01<8<:e38yv7193:1?v3>55825g=:9<91o=521739`4=z{ji1<7=t=21:>47e349847m?;<10f?e63ty85:4?:2y>75e=98h01>>m:b2896?02j;0q~=69;297~;48o0:=o5231g9g5=:;031o<5rs2;a>5<4s49:>7?>b:?054?::03a?856<3i;70=6d;a2?xu41o0;6>u23059g5=:;821=f753z?05`<69k16?7=d=k81v>6k:18085593;:n63<218`4>;40m0h=6s|39d94?5|5:8?6;|q0=4<72:q6??9510`896412j:01>7>:b38yv5>;3:1?v3<288`4>;4:h0:=o523819g4=z{8ki6=4<{<3:f?e734;2o7?>b:?2egag83>6}:9h;1o=521`0954d<58km6i?4}|`272<7280;6=u+10d9f<=O9;80D<=9;n`;>5<52z\0g4=:9;:1hi5rs2`g>5<5sW9ih63>218g=>{t;m81<77}Y;o301<5459~w6`e2909wS=ib:?265<69h1v>hj:181[5am27:>=4>299~w6b32909wS=k4:?2658;50;0xZ73234;9<7oj;|q0g1<72;qU?n:4=003>`6;57>52z\74<=:9;:1=>=4}r1eg?6=:rT8jn52132957752z\27`=:9;:18>5rs2ge>5<5sW9nj63>21824a=z{:io6=4={_1``>;6:90n56s|3c`94?4|V:hi70?=0;f1?xu4jl0;6?uQ3cg894472mk0q~=k6;296~X4l?16=?>5f39~w6`c2909wS=id:?265<6::1v>o>:181[5f927:>=4m7:p7ge=838pR>ll;<314?b?3ty8oh4?:3y]7fc<588;6ho4}r1eb?6=:rT8jk52132957?52z\0`0=:9;:1j<5rs2ae>5<5sW9hj63>218ff>{t;m:1<77}Y;m=01<vP576=lk1v>j7:181[5c027:>=4i4:p7f6=838pR>m?;<314?bd3ty9<54?:2y]65g51208yv27>3:1>vP;079>576=9::0q~:?5;296~X38<16=?>513d8yv27<3:1>vP;059>576=9;o0q~:?3;296~X38:16=?>513f8yv27:3:1>vP;039>576=9;i0q~:?1;296~X38816=?>513`8yv2783:1>vP;019>576=9;k0q~<:4;296~X5==16=?>59`9~w7352909wS<:2:?265<>02wx>8?50;0xZ73634;9<778;|q115<72;qU>8>4=003><052z\10c=:9;:1585rs36f>5<5sW8?i63>218:0>{t:=n1<77}Y:=i01<vP576=98<0q~=i6;296~X4n?16=?>51068yv5a=3:1>vP576=9890q~=i4;296~X4n=16=?>51008yv5a;3:1>vP576=98;0q~=i2;296~X4n;16=?>51028yv5a93:1>vP576=99l0q~=i0;296~X4n916=?>511g8yv5dk3:1>vP576=m11v>mn:181[5di27:>=4j6:p7f?=838pR>m6;<314?c23ty8o54?:3y]7f><588;6h:4}r1`3?6=:rT8o:521329a6=z{:i=6=4={_1`2>;6:90n>6s|3b794?4|V:i>70?=0;g2?xu5l0q~<;9;296~X5<016=?>57e9~w72?2909wS<;8:?265<0k2wx>9950;0xZ72034;9<79m;|q103<72;qU>984=003>2g52z\100=:9;:1;45rs367>5<5sW8?863>2184<>{t:=91<77}Y;ln01<7}Y;lk01<7p}7}Y;l201<0;6?uQ3d58944728:87p}7}Y;l<01<7}Y;l901<vP576=nl1v>k>:181[5b927:>=4id:p7`6=838pR>k?;<314?`d3ty8hk4?:3y]7a`<588;6kl4}r1ga?6=:rT8hh521329bd=z{:no6=4={_1g`>;6:90m56s|3e`94?4|V:ni70?=0;d4?xu4lh0;6?uQ3ec894472o<0q~=k9;296~X4l016=?>5f49~yk>b<3:1=vF>239~j=c2290:wE?=2:m<`0=83;pD<<=;|l;a2<72;qC=?<4}o:f?5rn9d2>5<>sA;9>6sa8dc94?4|@8897p`7eb83>4}O9;80qc6jd;296~N6:;1vb5kj:182M75:2we4hh50;0xL4453td3j?4?:3yK57451zJ267=zf1l>6=4>{I316>{i0o<1<7?tH001?xh?n10;6?uG1308yk>ai3:1=vF>239~j=`e2909wE?=2:m?5rn823>5<6sA;9>6sa91394?7|@8897p`60383>4}O9;80qc7?3;295~N6:;1vb4>;:182M75:2we5=;50;0xL4453td2<;4?:3yK57452zJ267=zf0:36=4={I316>{i1931<78h0;6?uG1308yk?7j3:1>vF>239~j<6d2909wE?=2:m=5b=838pD<<=;|l:4`<72;qC=?<4}o;3b?6=:rB:>?5rn833>5<5sA;9>6sa90394?4|@8897p`61383>7}O9;80qc7>3;296~N6:;1vb4?;:181M75:2we5<;50;0xL4453td2=;4?:3yK57452zJ267=zf0;36=4={I316>{i1831<79h0;6?uG1308yk?6j3:1>vF>239~j<7d2909wE?=2:m=4b=83;pD<<=;|l:5`<728qC=?<4}o;2b?6=9rB:>?5rn803>5<6sA;9>6sa93394?7|@8897p`62383>4}O9;80qc7=3;295~N6:;1vb4<;:181M75:2we5?;50;0xL4453td2>;4?:3yK57452zJ267=zf0836=4={I316>{i1;31<7:h0;6?uG1308yk?5j3:1>vF>239~j<4d290:wE?=2:m=7b=83;pD<<=;|l:6`<728qC=?<4}o;1b?6=9rB:>?5rn813>5<6sA;9>6sa92394?7|@8897p`63383>4}O9;80qc7<3;295~N6:;1vb4=;:182M75:2we5>;50;3xL4453td2?;4?:0yK57451zJ267=zf0936=4>{I316>{i1:31<7?tH001?xh>;h0;6239~j<5d290:wE?=2:m=6b=83;pD<<=;|l432<728qC=?<4}o54f?6=9rB:>?5rn65`>5<6sA;9>6sa76f94?7|@8897p`87d83>4}O9;80qc98f;295~N6:;1vb:6?:182M75:2Bo<6sa79394?7|@8897p`88283>4}O9;80qc974;295~N6:;1vb:6::182M75:2we;5850;3xL4453td<4:4?:0yK57451zJ267=zf>2j6=4>{I316>{i?1h1<7?tH001?xh00m0;651zJ267=zf>3;6=4>{I316>{i?0;1<7?tH001?Mb73td<5?4?:0yK57451zJ267=zf>3>6=4>{I316>Nc82we;4950;3xL4453td<544?:0yK57451zJ267=zf>3m6=4>{I316>{i?h:1<7?tH001?xh0i80;6239~j2g4290:wE?=2:m3d2=83;pD<<=;If3?xh0i<0;63:1=vF>239K`5=zf>ki6=4>{I316>{i?ho1<7?tH001?xh0j90;6239~j2d5290:wE?=2:Jg4>{i?k91<7?tH001?xh0j=0;6239~j2d0290:wE?=2:Jg4>{i?kh1<7?tH001?xh0jj0;6239~j2da290:wE?=2:m3f4=83;pD<<=;|l4g6<728qC=?<4}o5`2?6=9rB:>?5Gd19~j2e?290:wE?=2:m3fg=83;pD<<=;|l4gg<728qC=?<4}o5`g?6=9rB:>?5rn6ag>5<6sA;9>6sa7bg94?7|@8897p`8cg83>4}O9;80qc9k0;295~N6:;1vb:j>:182M75:2Bo<6sa7e094?7|@8897p`8d283>4}O9;80qc9k4;295~N6:;1vb:j::182M75:2we;i850;3xL4453td51zJ267=zf>n26=4>{I316>{i?mk1<7?tH001?xh0lk0;6239~j2bc290:wE?=2:m3ac=83;pD<<=;|l4`c<728qC=?<4}o5f4?6=9rB:>?5rn6g2>5<6sA;9>6sa7d094?7|@8897p`8e283>4}O9;80qc9j4;295~N6:;1vb:k::182M75:2we;h850;3xL4453td51zJ267=zf>o26=4>{I316>{i?lk1<7?tH001?xh0mk0;6239~j2cc290:wE?=2:m3`c=83;pD<<=;|l4ac<728qC=?<4}o5e4?6=9rB:>?5rn6d2>5<6sA;9>6sa7g094?7|@8897p`8f283>4}O9;80qc9i4;295~N6:;1vb:h::182M75:2we;k850;3xL4453td51zJ267=Ol91vb:h6:182M75:2we;ko50;3xL4453td51zJ267=zf>lo6=4>{I316>{i?oo1<7?tH001?xh0no0;6783:1=vF>239~j=66290:wE?=2:m<54=83;pD<<=;|l;46<728qC=?<4}o:30?6=9rB:>?5rn926>5<6sA;9>6sa81494?7|@8897p`70683>4}O9;80qc6?8;295~N6:;1vb5>6:182M75:2we4=o50;3xL4453td351zJ267=zf1:o6=4>{I316>{i09o1<7?tH001?xh?8o0;6683:1=vF>239~j=76290:wE?=2:m<44=83;pD<<=;|l;56<728qC=?<4}o:20?6=9rB:>?5rn936>5<6sA;9>6sa80494?7|@8897p`71683>4}O9;80qc6>8;295~N6:;1vb5?6:182M75:2we451zJ267=zf1;o6=4>{I316>{i08o1<7?tH001?xh?9o0;6583:1=vF>239~j=46290:wE?=2:m<74=83;pD<<=;|l;66<728qC=?<4}o:10?6=9rB:>?5rn906>5<6sA;9>6Fk0:m<70=83;pD<<=;If3?xh?:>0;6483:1=vF>239K`5=zf19:6=4>{I316>{i0:81<7?tH001?xh?;:0;64<3:1=vF>239~j=52290:wE?=2:m<60=83;pD<<=;|l;72<728qC=?<4}o:0?5rn91:>5<6sA;9>6sa82c94?7|@8897p`73c83>4}O9;80qc6k50;3xL4453td3?k4?:0yK57451zJ267=zf1>:6=4>{I316>{i0=81<7?tH001?xh?<:0;63<3:1=vF>239~j=22290:wE?=2:m<10=83;pD<<=;|l;02<728qC=?<4}o:7?5rn96:>5<6sA;9>6sa85c94?7|@8897p`74c83>4}O9;80qc6;c;295~N6:;1vb5:k:182M75:2we49k50;3xL4453td38k4?:0yK574<7>51zJ267=zf1?:6=4>{I316>{i0<81<7?tH001?xh?=:0;62<3:1=vF>239~j=32290:wE?=2:m<00=83;pD<<=;|l;12<728qC=?<4}o:6?5rn97:>5<6sA;9>6sa84c94?7|@8897p`75c83>4}O9;80qc6:c;295~N6:;1vb5;k:182M75:2we48k50;3xL4453td39k4?:0yK57451zJ267=zf1<:6=4>{I316>{i0?81<7?tH001?xh?>:0;61<3:1=vF>239~j=02290:wE?=2:m<30=83;pD<<=;|l;22<728qC=?<4}o:5?5rn94:>5<6sA;9>6sa87c94?7|@8897p`76c83>4}O9;80qc69c;295~N6:;1vb58k:182M75:2we4;k50;3xL4453td3:k4?:0yK57451zJ267=zf1=:6=4>{I316>{i0>81<7?tH001?xh??:0;60<3:1=vF>239~j=12290:wE?=2:m<20=83;pD<<=;|l;32<728qC=?<4}o:4?5rn95:>5<6sA;9>6sa86c94?7|@8897p`77c83>4}O9;80qc68c;295~N6:;1vb59k:182M75:2we4:k50;3xL4453td3;k4?:0yK57451zJ267=zf12:6=4>{I316>{i0181<7?tH001?Mb73td34>4?:0yK57451zJ267=Ol91vb56::182M75:2we45850;3xL4453td34:4?:0yK57451zJ267=zf1226=4>{I316>{i01k1<7?tH001?xh?0k0;6?k3:1=vF>239K`5=zf12o6=4>{I316>{i01o1<7?tH001?xh?0o0;6>83:1=vF>239~j=?6290:wE?=2:Jg4>{i0081<7?tH001?xh?1:0;6><3:1=vF>239~j=?2290:wE?=2:m<<0=83;pD<<=;|l;=2<728qC=?<4}o::?5rn9;:>5<6sA;9>6sa88c94?7|@8897p`79c83>4}O9;80qc66c;295~N6:;1vb57k:182M75:2we44k50;3xL4453td35k4?:0yK57451zJ267=zf1k:6=4>{I316>{i0h81<7?tH001?xh?i:0;6f<3:1=vF>239~j=g2290:wE?=2:m?5rn9c:>5<6sA;9>6sa8`c94?7|@8897p`7ac83>4}O9;80qc6nc;295~N6:;1vb5ok:182M75:2we4lk50;3xL4453td3mk4?:0yK57451zJ267=zf1h:6=4>{I316>{i0k81<7?tH001?xh?j:0;6e<3:1=vF>239~j=d2290:wE?=2:m?5rn9`:>5<6sA;9>6sa8cc94?7|@8897p`7bc83>4}O9;80qc6mc;295~N6:;1vb5lk:182M75:2we4ok50;3xL4453td3nk4?:0yK57451zJ267=zf1i:6=4>{I316>{i0j81<7?tH001?xh?k:0;6d<3:1=vF>239~j=e2290:wE?=2:m?5rn9a:>5<6sA;9>6sa8bc94?7|@8897p`7cc83>4}O9;80qc6lc;295~N6:;1vb5mk:182M75:2we4nk50;3xL4453td3ok4?:0yK57451zJ267=zf1n:6=4>{I316>{i0m81<7?tH001?xh?l:0;6c<3:1=vF>239~j=b2290:wE?=2:m?5rn9f:>5<6sA;9>6sa8ec94?7|@8897p`7dc83>4}O9;80qc6kc;295~N6:;1vb5jk:182M75:2we4ik50;3xL4453td3hk4?:0yK57451zJ267=zf1o:6=4>{I316>{zutJKOvok4;44<3gaj") (direction INPUT)) + (port (rename DIA_1_ "DIA<1>") (direction INPUT)) + (port (rename DIA_2_ "DIA<2>") (direction INPUT)) + (port (rename DIA_3_ "DIA<3>") (direction INPUT)) + (port (rename DIA_4_ "DIA<4>") (direction INPUT)) + (port (rename DIA_5_ "DIA<5>") (direction INPUT)) + (port (rename DIA_6_ "DIA<6>") (direction INPUT)) + (port (rename DIA_7_ "DIA<7>") (direction INPUT)) + (port (rename DOA_0_ "DOA<0>") (direction OUTPUT)) + (port (rename DOA_1_ "DOA<1>") (direction OUTPUT)) + (port (rename DOA_2_ "DOA<2>") (direction OUTPUT)) + (port (rename DOA_3_ "DOA<3>") (direction OUTPUT)) + (port (rename DOA_4_ "DOA<4>") (direction OUTPUT)) + (port (rename DOA_5_ "DOA<5>") (direction OUTPUT)) + (port (rename DOA_6_ "DOA<6>") (direction OUTPUT)) + (port (rename DOA_7_ "DOA<7>") (direction OUTPUT)) + (port (rename ADDRA_0_ "ADDRA<0>") (direction INPUT)) + (port (rename ADDRA_1_ "ADDRA<1>") (direction INPUT)) + (port (rename ADDRA_2_ "ADDRA<2>") (direction INPUT)) + (port (rename ADDRA_3_ "ADDRA<3>") (direction INPUT)) + (port (rename ADDRA_4_ "ADDRA<4>") (direction INPUT)) + (port (rename ADDRA_5_ "ADDRA<5>") (direction INPUT)) + (port (rename ADDRA_6_ "ADDRA<6>") (direction INPUT)) + (port (rename ADDRA_7_ "ADDRA<7>") (direction INPUT)) + (port (rename ADDRA_8_ "ADDRA<8>") (direction INPUT)) + (port (rename ADDRA_9_ "ADDRA<9>") (direction INPUT)) + (port (rename ADDRA_10_ "ADDRA<10>") (direction INPUT)) + (port (rename DIPA_0_ "DIPA<0>") (direction INPUT)) + (port (rename DOPA_0_ "DOPA<0>") (direction OUTPUT)) + (port WEB (direction INPUT)) + (port ENB (direction INPUT)) + (port SSRB (direction INPUT)) + (port CLKB (direction INPUT)) + (port (rename DIB_0_ "DIB<0>") (direction INPUT)) + (port (rename DIB_1_ "DIB<1>") (direction INPUT)) + (port (rename DIB_2_ "DIB<2>") (direction INPUT)) + (port (rename DIB_3_ "DIB<3>") (direction INPUT)) + (port (rename DIB_4_ "DIB<4>") (direction INPUT)) + (port (rename DIB_5_ "DIB<5>") (direction INPUT)) + (port (rename DIB_6_ "DIB<6>") (direction INPUT)) + (port (rename DIB_7_ "DIB<7>") (direction INPUT)) + (port (rename DOB_0_ "DOB<0>") (direction OUTPUT)) + (port (rename DOB_1_ "DOB<1>") (direction OUTPUT)) + (port (rename DOB_2_ "DOB<2>") (direction OUTPUT)) + (port (rename DOB_3_ "DOB<3>") (direction OUTPUT)) + (port (rename DOB_4_ "DOB<4>") (direction OUTPUT)) + (port (rename DOB_5_ "DOB<5>") (direction OUTPUT)) + (port (rename DOB_6_ "DOB<6>") (direction OUTPUT)) + (port (rename DOB_7_ "DOB<7>") (direction OUTPUT)) + (port (rename ADDRB_0_ "ADDRB<0>") (direction INPUT)) + (port (rename ADDRB_1_ "ADDRB<1>") (direction INPUT)) + (port (rename ADDRB_2_ "ADDRB<2>") (direction INPUT)) + (port (rename ADDRB_3_ "ADDRB<3>") (direction INPUT)) + (port (rename ADDRB_4_ "ADDRB<4>") (direction INPUT)) + (port (rename ADDRB_5_ "ADDRB<5>") (direction INPUT)) + (port (rename ADDRB_6_ "ADDRB<6>") (direction INPUT)) + (port (rename ADDRB_7_ "ADDRB<7>") (direction INPUT)) + (port (rename ADDRB_8_ "ADDRB<8>") (direction INPUT)) + (port (rename ADDRB_9_ "ADDRB<9>") (direction INPUT)) + (port (rename ADDRB_10_ "ADDRB<10>") (direction INPUT)) + (port (rename DIPB_0_ "DIPB<0>") (direction INPUT)) + (port (rename DOPB_0_ "DOPB<0>") (direction OUTPUT)) + ) + ) + ) + ) +(library test_lib (edifLevel 0) (technology (numberDefinition (scale 1 (E 1 -12) (unit Time)))) +(cell async_fifo_8_8_128_fifo_generator_v2_2_xst_1_blkmemdp_v6_2_xst + (cellType GENERIC) (view view_1 (viewType NETLIST) + (interface + (port ( rename dina_7_ "dina<7>") (direction INPUT)) + (port ( rename dina_6_ "dina<6>") (direction INPUT)) + (port ( rename dina_5_ "dina<5>") (direction INPUT)) + (port ( rename dina_4_ "dina<4>") (direction INPUT)) + (port ( rename dina_3_ "dina<3>") (direction INPUT)) + (port ( rename dina_2_ "dina<2>") (direction INPUT)) + (port ( rename dina_1_ "dina<1>") (direction INPUT)) + (port ( rename dina_0_ "dina<0>") (direction INPUT)) + (port ( rename dinb_7_ "dinb<7>") (direction INPUT)) + (port ( rename dinb_6_ "dinb<6>") (direction INPUT)) + (port ( rename dinb_5_ "dinb<5>") (direction INPUT)) + (port ( rename dinb_4_ "dinb<4>") (direction INPUT)) + (port ( rename dinb_3_ "dinb<3>") (direction INPUT)) + (port ( rename dinb_2_ "dinb<2>") (direction INPUT)) + (port ( rename dinb_1_ "dinb<1>") (direction INPUT)) + (port ( rename dinb_0_ "dinb<0>") (direction INPUT)) + (port ( rename ena "ena") (direction INPUT)) + (port ( rename enb "enb") (direction INPUT)) + (port ( rename wea "wea") (direction INPUT)) + (port ( rename web "web") (direction INPUT)) + (port ( rename sinita "sinita") (direction INPUT)) + (port ( rename sinitb "sinitb") (direction INPUT)) + (port ( rename nda "nda") (direction INPUT)) + (port ( rename ndb "ndb") (direction INPUT)) + (port ( rename clka "clka") (direction INPUT)) + (port ( rename clkb "clkb") (direction INPUT)) + (port ( rename addra_6_ "addra<6>") (direction INPUT)) + (port ( rename addra_5_ "addra<5>") (direction INPUT)) + (port ( rename addra_4_ "addra<4>") (direction INPUT)) + (port ( rename addra_3_ "addra<3>") (direction INPUT)) + (port ( rename addra_2_ "addra<2>") (direction INPUT)) + (port ( rename addra_1_ "addra<1>") (direction INPUT)) + (port ( rename addra_0_ "addra<0>") (direction INPUT)) + (port ( rename addrb_6_ "addrb<6>") (direction INPUT)) + (port ( rename addrb_5_ "addrb<5>") (direction INPUT)) + (port ( rename addrb_4_ "addrb<4>") (direction INPUT)) + (port ( rename addrb_3_ "addrb<3>") (direction INPUT)) + (port ( rename addrb_2_ "addrb<2>") (direction INPUT)) + (port ( rename addrb_1_ "addrb<1>") (direction INPUT)) + (port ( rename addrb_0_ "addrb<0>") (direction INPUT)) + (port ( rename rdya "rdya") (direction OUTPUT)) + (port ( rename rdyb "rdyb") (direction OUTPUT)) + (port ( rename rfda "rfda") (direction OUTPUT)) + (port ( rename rfdb "rfdb") (direction OUTPUT)) + (port ( rename douta_7_ "douta<7>") (direction OUTPUT)) + (port ( rename douta_6_ "douta<6>") (direction OUTPUT)) + (port ( rename douta_5_ "douta<5>") (direction OUTPUT)) + (port ( rename douta_4_ "douta<4>") (direction OUTPUT)) + (port ( rename douta_3_ "douta<3>") (direction OUTPUT)) + (port ( rename douta_2_ "douta<2>") (direction OUTPUT)) + (port ( rename douta_1_ "douta<1>") (direction OUTPUT)) + (port ( rename douta_0_ "douta<0>") (direction OUTPUT)) + (port ( rename doutb_7_ "doutb<7>") (direction OUTPUT)) + (port ( rename doutb_6_ "doutb<6>") (direction OUTPUT)) + (port ( rename doutb_5_ "doutb<5>") (direction OUTPUT)) + (port ( rename doutb_4_ "doutb<4>") (direction OUTPUT)) + (port ( rename doutb_3_ "doutb<3>") (direction OUTPUT)) + (port ( rename doutb_2_ "doutb<2>") (direction OUTPUT)) + (port ( rename doutb_1_ "doutb<1>") (direction OUTPUT)) + (port ( rename doutb_0_ "doutb<0>") (direction OUTPUT)) + ) + (contents + (instance VCC (viewRef view_1 (cellRef VCC (libraryRef xilinxun)))) + (instance GND (viewRef view_1 (cellRef GND (libraryRef xilinxun)))) + (instance (rename async_fifo_8_8_128_fifo_generator_v2_2_xst_1_blkmemdp_v6_2_xst_bm_mem_arch_v2_prim_3_b1_chk0_col_0_b2_mextd_arch_v2_c1_ram1_v2_d2048_by9_newSim8 "async_fifo_8_8_128_fifo_generator_v2_2_xst_1_blkmemdp_v6_2_xst/bm/mem/arch_v2/prim/3/b1/chk0/col/0/b2/mextd/arch_v2/c1/ram1/v2/d2048/by9/newSim8") + (viewRef view_1 (cellRef RAMB16_S9_S9 (libraryRef xilinxun))) + (property INIT_00 (string "0000000000000000000000000000000000000000000000000000000000000000")) + (property INIT_01 (string "0000000000000000000000000000000000000000000000000000000000000000")) + (property INIT_02 (string "0000000000000000000000000000000000000000000000000000000000000000")) + (property INIT_03 (string "0000000000000000000000000000000000000000000000000000000000000000")) + (property INIT_04 (string "0000000000000000000000000000000000000000000000000000000000000000")) + (property INIT_05 (string "0000000000000000000000000000000000000000000000000000000000000000")) + (property INIT_06 (string "0000000000000000000000000000000000000000000000000000000000000000")) + (property INIT_07 (string "0000000000000000000000000000000000000000000000000000000000000000")) + (property INIT_08 (string "0000000000000000000000000000000000000000000000000000000000000000")) + (property INIT_09 (string "0000000000000000000000000000000000000000000000000000000000000000")) + (property INIT_0A (string "0000000000000000000000000000000000000000000000000000000000000000")) + (property INIT_0B (string "0000000000000000000000000000000000000000000000000000000000000000")) + (property INIT_0C (string "0000000000000000000000000000000000000000000000000000000000000000")) + (property INIT_0D (string "0000000000000000000000000000000000000000000000000000000000000000")) + (property INIT_0E (string "0000000000000000000000000000000000000000000000000000000000000000")) + (property INIT_0F (string "0000000000000000000000000000000000000000000000000000000000000000")) + (property INIT_10 (string "0000000000000000000000000000000000000000000000000000000000000000")) + (property INIT_11 (string "0000000000000000000000000000000000000000000000000000000000000000")) + (property INIT_12 (string "0000000000000000000000000000000000000000000000000000000000000000")) + (property INIT_13 (string "0000000000000000000000000000000000000000000000000000000000000000")) + (property INIT_14 (string "0000000000000000000000000000000000000000000000000000000000000000")) + (property INIT_15 (string "0000000000000000000000000000000000000000000000000000000000000000")) + (property INIT_16 (string "0000000000000000000000000000000000000000000000000000000000000000")) + (property INIT_17 (string "0000000000000000000000000000000000000000000000000000000000000000")) + (property INIT_18 (string "0000000000000000000000000000000000000000000000000000000000000000")) + (property INIT_19 (string "0000000000000000000000000000000000000000000000000000000000000000")) + (property INIT_1A (string "0000000000000000000000000000000000000000000000000000000000000000")) + (property INIT_1B (string "0000000000000000000000000000000000000000000000000000000000000000")) + (property INIT_1C (string "0000000000000000000000000000000000000000000000000000000000000000")) + (property INIT_1D (string "0000000000000000000000000000000000000000000000000000000000000000")) + (property INIT_1E (string "0000000000000000000000000000000000000000000000000000000000000000")) + (property INIT_1F (string "0000000000000000000000000000000000000000000000000000000000000000")) + (property INIT_20 (string "0000000000000000000000000000000000000000000000000000000000000000")) + (property INIT_21 (string "0000000000000000000000000000000000000000000000000000000000000000")) + (property INIT_22 (string "0000000000000000000000000000000000000000000000000000000000000000")) + (property INIT_23 (string "0000000000000000000000000000000000000000000000000000000000000000")) + (property INIT_24 (string "0000000000000000000000000000000000000000000000000000000000000000")) + (property INIT_25 (string "0000000000000000000000000000000000000000000000000000000000000000")) + (property INIT_26 (string "0000000000000000000000000000000000000000000000000000000000000000")) + (property INIT_27 (string "0000000000000000000000000000000000000000000000000000000000000000")) + (property INIT_28 (string "0000000000000000000000000000000000000000000000000000000000000000")) + (property INIT_29 (string "0000000000000000000000000000000000000000000000000000000000000000")) + (property INIT_2A (string "0000000000000000000000000000000000000000000000000000000000000000")) + (property INIT_2B (string "0000000000000000000000000000000000000000000000000000000000000000")) + (property INIT_2C (string "0000000000000000000000000000000000000000000000000000000000000000")) + (property INIT_2D (string "0000000000000000000000000000000000000000000000000000000000000000")) + (property INIT_2E (string "0000000000000000000000000000000000000000000000000000000000000000")) + (property INIT_2F (string "0000000000000000000000000000000000000000000000000000000000000000")) + (property INIT_30 (string "0000000000000000000000000000000000000000000000000000000000000000")) + (property INIT_31 (string "0000000000000000000000000000000000000000000000000000000000000000")) + (property INIT_32 (string "0000000000000000000000000000000000000000000000000000000000000000")) + (property INIT_33 (string "0000000000000000000000000000000000000000000000000000000000000000")) + (property INIT_34 (string "0000000000000000000000000000000000000000000000000000000000000000")) + (property INIT_35 (string "0000000000000000000000000000000000000000000000000000000000000000")) + (property INIT_36 (string "0000000000000000000000000000000000000000000000000000000000000000")) + (property INIT_37 (string "0000000000000000000000000000000000000000000000000000000000000000")) + (property INIT_38 (string "0000000000000000000000000000000000000000000000000000000000000000")) + (property INIT_39 (string "0000000000000000000000000000000000000000000000000000000000000000")) + (property INIT_3A (string "0000000000000000000000000000000000000000000000000000000000000000")) + (property INIT_3B (string "0000000000000000000000000000000000000000000000000000000000000000")) + (property INIT_3C (string "0000000000000000000000000000000000000000000000000000000000000000")) + (property INIT_3D (string "0000000000000000000000000000000000000000000000000000000000000000")) + (property INIT_3E (string "0000000000000000000000000000000000000000000000000000000000000000")) + (property INIT_3F (string "0000000000000000000000000000000000000000000000000000000000000000")) + (property INITP_00 (string "0000000000000000000000000000000000000000000000000000000000000000")) + (property INITP_01 (string "0000000000000000000000000000000000000000000000000000000000000000")) + (property INITP_02 (string "0000000000000000000000000000000000000000000000000000000000000000")) + (property INITP_03 (string "0000000000000000000000000000000000000000000000000000000000000000")) + (property INITP_04 (string "0000000000000000000000000000000000000000000000000000000000000000")) + (property INITP_05 (string "0000000000000000000000000000000000000000000000000000000000000000")) + (property INITP_06 (string "0000000000000000000000000000000000000000000000000000000000000000")) + (property INITP_07 (string "0000000000000000000000000000000000000000000000000000000000000000")) + (property WRITE_MODE_A (string "WRITE_FIRST")) + (property INIT_A (string "000")) + (property SRVAL_A (string "000")) + (property WRITE_MODE_B (string "WRITE_FIRST")) + (property INIT_B (string "000")) + (property SRVAL_B (string "000")) + ) + (net (rename N0 "Gnd") + (joined + (portRef G (instanceRef GND)) + (portRef WEB (instanceRef async_fifo_8_8_128_fifo_generator_v2_2_xst_1_blkmemdp_v6_2_xst_bm_mem_arch_v2_prim_3_b1_chk0_col_0_b2_mextd_arch_v2_c1_ram1_v2_d2048_by9_newSim8)) + (portRef ADDRA_7_ (instanceRef async_fifo_8_8_128_fifo_generator_v2_2_xst_1_blkmemdp_v6_2_xst_bm_mem_arch_v2_prim_3_b1_chk0_col_0_b2_mextd_arch_v2_c1_ram1_v2_d2048_by9_newSim8)) + (portRef ADDRA_8_ (instanceRef async_fifo_8_8_128_fifo_generator_v2_2_xst_1_blkmemdp_v6_2_xst_bm_mem_arch_v2_prim_3_b1_chk0_col_0_b2_mextd_arch_v2_c1_ram1_v2_d2048_by9_newSim8)) + (portRef ADDRA_9_ (instanceRef async_fifo_8_8_128_fifo_generator_v2_2_xst_1_blkmemdp_v6_2_xst_bm_mem_arch_v2_prim_3_b1_chk0_col_0_b2_mextd_arch_v2_c1_ram1_v2_d2048_by9_newSim8)) + (portRef ADDRA_10_ (instanceRef async_fifo_8_8_128_fifo_generator_v2_2_xst_1_blkmemdp_v6_2_xst_bm_mem_arch_v2_prim_3_b1_chk0_col_0_b2_mextd_arch_v2_c1_ram1_v2_d2048_by9_newSim8)) + (portRef DIPA_0_ (instanceRef async_fifo_8_8_128_fifo_generator_v2_2_xst_1_blkmemdp_v6_2_xst_bm_mem_arch_v2_prim_3_b1_chk0_col_0_b2_mextd_arch_v2_c1_ram1_v2_d2048_by9_newSim8)) + (portRef ADDRB_7_ (instanceRef async_fifo_8_8_128_fifo_generator_v2_2_xst_1_blkmemdp_v6_2_xst_bm_mem_arch_v2_prim_3_b1_chk0_col_0_b2_mextd_arch_v2_c1_ram1_v2_d2048_by9_newSim8)) + (portRef ADDRB_8_ (instanceRef async_fifo_8_8_128_fifo_generator_v2_2_xst_1_blkmemdp_v6_2_xst_bm_mem_arch_v2_prim_3_b1_chk0_col_0_b2_mextd_arch_v2_c1_ram1_v2_d2048_by9_newSim8)) + (portRef ADDRB_9_ (instanceRef async_fifo_8_8_128_fifo_generator_v2_2_xst_1_blkmemdp_v6_2_xst_bm_mem_arch_v2_prim_3_b1_chk0_col_0_b2_mextd_arch_v2_c1_ram1_v2_d2048_by9_newSim8)) + (portRef ADDRB_10_ (instanceRef async_fifo_8_8_128_fifo_generator_v2_2_xst_1_blkmemdp_v6_2_xst_bm_mem_arch_v2_prim_3_b1_chk0_col_0_b2_mextd_arch_v2_c1_ram1_v2_d2048_by9_newSim8)) + (portRef DIB_0_ (instanceRef async_fifo_8_8_128_fifo_generator_v2_2_xst_1_blkmemdp_v6_2_xst_bm_mem_arch_v2_prim_3_b1_chk0_col_0_b2_mextd_arch_v2_c1_ram1_v2_d2048_by9_newSim8)) + (portRef DIB_1_ (instanceRef async_fifo_8_8_128_fifo_generator_v2_2_xst_1_blkmemdp_v6_2_xst_bm_mem_arch_v2_prim_3_b1_chk0_col_0_b2_mextd_arch_v2_c1_ram1_v2_d2048_by9_newSim8)) + (portRef DIB_2_ (instanceRef async_fifo_8_8_128_fifo_generator_v2_2_xst_1_blkmemdp_v6_2_xst_bm_mem_arch_v2_prim_3_b1_chk0_col_0_b2_mextd_arch_v2_c1_ram1_v2_d2048_by9_newSim8)) + (portRef DIB_3_ (instanceRef async_fifo_8_8_128_fifo_generator_v2_2_xst_1_blkmemdp_v6_2_xst_bm_mem_arch_v2_prim_3_b1_chk0_col_0_b2_mextd_arch_v2_c1_ram1_v2_d2048_by9_newSim8)) + (portRef DIB_4_ (instanceRef async_fifo_8_8_128_fifo_generator_v2_2_xst_1_blkmemdp_v6_2_xst_bm_mem_arch_v2_prim_3_b1_chk0_col_0_b2_mextd_arch_v2_c1_ram1_v2_d2048_by9_newSim8)) + (portRef DIB_5_ (instanceRef async_fifo_8_8_128_fifo_generator_v2_2_xst_1_blkmemdp_v6_2_xst_bm_mem_arch_v2_prim_3_b1_chk0_col_0_b2_mextd_arch_v2_c1_ram1_v2_d2048_by9_newSim8)) + (portRef DIB_6_ (instanceRef async_fifo_8_8_128_fifo_generator_v2_2_xst_1_blkmemdp_v6_2_xst_bm_mem_arch_v2_prim_3_b1_chk0_col_0_b2_mextd_arch_v2_c1_ram1_v2_d2048_by9_newSim8)) + (portRef DIB_7_ (instanceRef async_fifo_8_8_128_fifo_generator_v2_2_xst_1_blkmemdp_v6_2_xst_bm_mem_arch_v2_prim_3_b1_chk0_col_0_b2_mextd_arch_v2_c1_ram1_v2_d2048_by9_newSim8)) + (portRef DIPB_0_ (instanceRef async_fifo_8_8_128_fifo_generator_v2_2_xst_1_blkmemdp_v6_2_xst_bm_mem_arch_v2_prim_3_b1_chk0_col_0_b2_mextd_arch_v2_c1_ram1_v2_d2048_by9_newSim8)) + ) + ) + (net (rename N1 "Vcc") + (joined + (portRef P (instanceRef VCC)) + (portRef ENA (instanceRef async_fifo_8_8_128_fifo_generator_v2_2_xst_1_blkmemdp_v6_2_xst_bm_mem_arch_v2_prim_3_b1_chk0_col_0_b2_mextd_arch_v2_c1_ram1_v2_d2048_by9_newSim8)) + ) + ) + (net (rename N2 "dina<7>") + (joined + (portRef dina_7_) + (portRef DIA_7_ (instanceRef async_fifo_8_8_128_fifo_generator_v2_2_xst_1_blkmemdp_v6_2_xst_bm_mem_arch_v2_prim_3_b1_chk0_col_0_b2_mextd_arch_v2_c1_ram1_v2_d2048_by9_newSim8)) + ) + ) + (net (rename N3 "dina<6>") + (joined + (portRef dina_6_) + (portRef DIA_6_ (instanceRef async_fifo_8_8_128_fifo_generator_v2_2_xst_1_blkmemdp_v6_2_xst_bm_mem_arch_v2_prim_3_b1_chk0_col_0_b2_mextd_arch_v2_c1_ram1_v2_d2048_by9_newSim8)) + ) + ) + (net (rename N4 "dina<5>") + (joined + (portRef dina_5_) + (portRef DIA_5_ (instanceRef async_fifo_8_8_128_fifo_generator_v2_2_xst_1_blkmemdp_v6_2_xst_bm_mem_arch_v2_prim_3_b1_chk0_col_0_b2_mextd_arch_v2_c1_ram1_v2_d2048_by9_newSim8)) + ) + ) + (net (rename N5 "dina<4>") + (joined + (portRef dina_4_) + (portRef DIA_4_ (instanceRef async_fifo_8_8_128_fifo_generator_v2_2_xst_1_blkmemdp_v6_2_xst_bm_mem_arch_v2_prim_3_b1_chk0_col_0_b2_mextd_arch_v2_c1_ram1_v2_d2048_by9_newSim8)) + ) + ) + (net (rename N6 "dina<3>") + (joined + (portRef dina_3_) + (portRef DIA_3_ (instanceRef async_fifo_8_8_128_fifo_generator_v2_2_xst_1_blkmemdp_v6_2_xst_bm_mem_arch_v2_prim_3_b1_chk0_col_0_b2_mextd_arch_v2_c1_ram1_v2_d2048_by9_newSim8)) + ) + ) + (net (rename N7 "dina<2>") + (joined + (portRef dina_2_) + (portRef DIA_2_ (instanceRef async_fifo_8_8_128_fifo_generator_v2_2_xst_1_blkmemdp_v6_2_xst_bm_mem_arch_v2_prim_3_b1_chk0_col_0_b2_mextd_arch_v2_c1_ram1_v2_d2048_by9_newSim8)) + ) + ) + (net (rename N8 "dina<1>") + (joined + (portRef dina_1_) + (portRef DIA_1_ (instanceRef async_fifo_8_8_128_fifo_generator_v2_2_xst_1_blkmemdp_v6_2_xst_bm_mem_arch_v2_prim_3_b1_chk0_col_0_b2_mextd_arch_v2_c1_ram1_v2_d2048_by9_newSim8)) + ) + ) + (net (rename N9 "dina<0>") + (joined + (portRef dina_0_) + (portRef DIA_0_ (instanceRef async_fifo_8_8_128_fifo_generator_v2_2_xst_1_blkmemdp_v6_2_xst_bm_mem_arch_v2_prim_3_b1_chk0_col_0_b2_mextd_arch_v2_c1_ram1_v2_d2048_by9_newSim8)) + ) + ) + (net (rename N19 "enb") + (joined + (portRef enb) + (portRef ENB (instanceRef async_fifo_8_8_128_fifo_generator_v2_2_xst_1_blkmemdp_v6_2_xst_bm_mem_arch_v2_prim_3_b1_chk0_col_0_b2_mextd_arch_v2_c1_ram1_v2_d2048_by9_newSim8)) + ) + ) + (net (rename N20 "wea") + (joined + (portRef wea) + (portRef WEA (instanceRef async_fifo_8_8_128_fifo_generator_v2_2_xst_1_blkmemdp_v6_2_xst_bm_mem_arch_v2_prim_3_b1_chk0_col_0_b2_mextd_arch_v2_c1_ram1_v2_d2048_by9_newSim8)) + ) + ) + (net (rename N22 "sinita") + (joined + (portRef sinita) + (portRef SSRA (instanceRef async_fifo_8_8_128_fifo_generator_v2_2_xst_1_blkmemdp_v6_2_xst_bm_mem_arch_v2_prim_3_b1_chk0_col_0_b2_mextd_arch_v2_c1_ram1_v2_d2048_by9_newSim8)) + ) + ) + (net (rename N23 "sinitb") + (joined + (portRef sinitb) + (portRef SSRB (instanceRef async_fifo_8_8_128_fifo_generator_v2_2_xst_1_blkmemdp_v6_2_xst_bm_mem_arch_v2_prim_3_b1_chk0_col_0_b2_mextd_arch_v2_c1_ram1_v2_d2048_by9_newSim8)) + ) + ) + (net (rename N26 "clka") + (joined + (portRef clka) + (portRef CLKA (instanceRef async_fifo_8_8_128_fifo_generator_v2_2_xst_1_blkmemdp_v6_2_xst_bm_mem_arch_v2_prim_3_b1_chk0_col_0_b2_mextd_arch_v2_c1_ram1_v2_d2048_by9_newSim8)) + ) + ) + (net (rename N27 "clkb") + (joined + (portRef clkb) + (portRef CLKB (instanceRef async_fifo_8_8_128_fifo_generator_v2_2_xst_1_blkmemdp_v6_2_xst_bm_mem_arch_v2_prim_3_b1_chk0_col_0_b2_mextd_arch_v2_c1_ram1_v2_d2048_by9_newSim8)) + ) + ) + (net (rename N28 "addra<6>") + (joined + (portRef addra_6_) + (portRef ADDRA_6_ (instanceRef async_fifo_8_8_128_fifo_generator_v2_2_xst_1_blkmemdp_v6_2_xst_bm_mem_arch_v2_prim_3_b1_chk0_col_0_b2_mextd_arch_v2_c1_ram1_v2_d2048_by9_newSim8)) + ) + ) + (net (rename N29 "addra<5>") + (joined + (portRef addra_5_) + (portRef ADDRA_5_ (instanceRef async_fifo_8_8_128_fifo_generator_v2_2_xst_1_blkmemdp_v6_2_xst_bm_mem_arch_v2_prim_3_b1_chk0_col_0_b2_mextd_arch_v2_c1_ram1_v2_d2048_by9_newSim8)) + ) + ) + (net (rename N30 "addra<4>") + (joined + (portRef addra_4_) + (portRef ADDRA_4_ (instanceRef async_fifo_8_8_128_fifo_generator_v2_2_xst_1_blkmemdp_v6_2_xst_bm_mem_arch_v2_prim_3_b1_chk0_col_0_b2_mextd_arch_v2_c1_ram1_v2_d2048_by9_newSim8)) + ) + ) + (net (rename N31 "addra<3>") + (joined + (portRef addra_3_) + (portRef ADDRA_3_ (instanceRef async_fifo_8_8_128_fifo_generator_v2_2_xst_1_blkmemdp_v6_2_xst_bm_mem_arch_v2_prim_3_b1_chk0_col_0_b2_mextd_arch_v2_c1_ram1_v2_d2048_by9_newSim8)) + ) + ) + (net (rename N32 "addra<2>") + (joined + (portRef addra_2_) + (portRef ADDRA_2_ (instanceRef async_fifo_8_8_128_fifo_generator_v2_2_xst_1_blkmemdp_v6_2_xst_bm_mem_arch_v2_prim_3_b1_chk0_col_0_b2_mextd_arch_v2_c1_ram1_v2_d2048_by9_newSim8)) + ) + ) + (net (rename N33 "addra<1>") + (joined + (portRef addra_1_) + (portRef ADDRA_1_ (instanceRef async_fifo_8_8_128_fifo_generator_v2_2_xst_1_blkmemdp_v6_2_xst_bm_mem_arch_v2_prim_3_b1_chk0_col_0_b2_mextd_arch_v2_c1_ram1_v2_d2048_by9_newSim8)) + ) + ) + (net (rename N34 "addra<0>") + (joined + (portRef addra_0_) + (portRef ADDRA_0_ (instanceRef async_fifo_8_8_128_fifo_generator_v2_2_xst_1_blkmemdp_v6_2_xst_bm_mem_arch_v2_prim_3_b1_chk0_col_0_b2_mextd_arch_v2_c1_ram1_v2_d2048_by9_newSim8)) + ) + ) + (net (rename N35 "addrb<6>") + (joined + (portRef addrb_6_) + (portRef ADDRB_6_ (instanceRef async_fifo_8_8_128_fifo_generator_v2_2_xst_1_blkmemdp_v6_2_xst_bm_mem_arch_v2_prim_3_b1_chk0_col_0_b2_mextd_arch_v2_c1_ram1_v2_d2048_by9_newSim8)) + ) + ) + (net (rename N36 "addrb<5>") + (joined + (portRef addrb_5_) + (portRef ADDRB_5_ (instanceRef async_fifo_8_8_128_fifo_generator_v2_2_xst_1_blkmemdp_v6_2_xst_bm_mem_arch_v2_prim_3_b1_chk0_col_0_b2_mextd_arch_v2_c1_ram1_v2_d2048_by9_newSim8)) + ) + ) + (net (rename N37 "addrb<4>") + (joined + (portRef addrb_4_) + (portRef ADDRB_4_ (instanceRef async_fifo_8_8_128_fifo_generator_v2_2_xst_1_blkmemdp_v6_2_xst_bm_mem_arch_v2_prim_3_b1_chk0_col_0_b2_mextd_arch_v2_c1_ram1_v2_d2048_by9_newSim8)) + ) + ) + (net (rename N38 "addrb<3>") + (joined + (portRef addrb_3_) + (portRef ADDRB_3_ (instanceRef async_fifo_8_8_128_fifo_generator_v2_2_xst_1_blkmemdp_v6_2_xst_bm_mem_arch_v2_prim_3_b1_chk0_col_0_b2_mextd_arch_v2_c1_ram1_v2_d2048_by9_newSim8)) + ) + ) + (net (rename N39 "addrb<2>") + (joined + (portRef addrb_2_) + (portRef ADDRB_2_ (instanceRef async_fifo_8_8_128_fifo_generator_v2_2_xst_1_blkmemdp_v6_2_xst_bm_mem_arch_v2_prim_3_b1_chk0_col_0_b2_mextd_arch_v2_c1_ram1_v2_d2048_by9_newSim8)) + ) + ) + (net (rename N40 "addrb<1>") + (joined + (portRef addrb_1_) + (portRef ADDRB_1_ (instanceRef async_fifo_8_8_128_fifo_generator_v2_2_xst_1_blkmemdp_v6_2_xst_bm_mem_arch_v2_prim_3_b1_chk0_col_0_b2_mextd_arch_v2_c1_ram1_v2_d2048_by9_newSim8)) + ) + ) + (net (rename N41 "addrb<0>") + (joined + (portRef addrb_0_) + (portRef ADDRB_0_ (instanceRef async_fifo_8_8_128_fifo_generator_v2_2_xst_1_blkmemdp_v6_2_xst_bm_mem_arch_v2_prim_3_b1_chk0_col_0_b2_mextd_arch_v2_c1_ram1_v2_d2048_by9_newSim8)) + ) + ) + (net (rename N54 "doutb<7>") + (joined + (portRef doutb_7_) + (portRef DOB_7_ (instanceRef async_fifo_8_8_128_fifo_generator_v2_2_xst_1_blkmemdp_v6_2_xst_bm_mem_arch_v2_prim_3_b1_chk0_col_0_b2_mextd_arch_v2_c1_ram1_v2_d2048_by9_newSim8)) + ) + ) + (net (rename N55 "doutb<6>") + (joined + (portRef doutb_6_) + (portRef DOB_6_ (instanceRef async_fifo_8_8_128_fifo_generator_v2_2_xst_1_blkmemdp_v6_2_xst_bm_mem_arch_v2_prim_3_b1_chk0_col_0_b2_mextd_arch_v2_c1_ram1_v2_d2048_by9_newSim8)) + ) + ) + (net (rename N56 "doutb<5>") + (joined + (portRef doutb_5_) + (portRef DOB_5_ (instanceRef async_fifo_8_8_128_fifo_generator_v2_2_xst_1_blkmemdp_v6_2_xst_bm_mem_arch_v2_prim_3_b1_chk0_col_0_b2_mextd_arch_v2_c1_ram1_v2_d2048_by9_newSim8)) + ) + ) + (net (rename N57 "doutb<4>") + (joined + (portRef doutb_4_) + (portRef DOB_4_ (instanceRef async_fifo_8_8_128_fifo_generator_v2_2_xst_1_blkmemdp_v6_2_xst_bm_mem_arch_v2_prim_3_b1_chk0_col_0_b2_mextd_arch_v2_c1_ram1_v2_d2048_by9_newSim8)) + ) + ) + (net (rename N58 "doutb<3>") + (joined + (portRef doutb_3_) + (portRef DOB_3_ (instanceRef async_fifo_8_8_128_fifo_generator_v2_2_xst_1_blkmemdp_v6_2_xst_bm_mem_arch_v2_prim_3_b1_chk0_col_0_b2_mextd_arch_v2_c1_ram1_v2_d2048_by9_newSim8)) + ) + ) + (net (rename N59 "doutb<2>") + (joined + (portRef doutb_2_) + (portRef DOB_2_ (instanceRef async_fifo_8_8_128_fifo_generator_v2_2_xst_1_blkmemdp_v6_2_xst_bm_mem_arch_v2_prim_3_b1_chk0_col_0_b2_mextd_arch_v2_c1_ram1_v2_d2048_by9_newSim8)) + ) + ) + (net (rename N60 "doutb<1>") + (joined + (portRef doutb_1_) + (portRef DOB_1_ (instanceRef async_fifo_8_8_128_fifo_generator_v2_2_xst_1_blkmemdp_v6_2_xst_bm_mem_arch_v2_prim_3_b1_chk0_col_0_b2_mextd_arch_v2_c1_ram1_v2_d2048_by9_newSim8)) + ) + ) + (net (rename N61 "doutb<0>") + (joined + (portRef doutb_0_) + (portRef DOB_0_ (instanceRef async_fifo_8_8_128_fifo_generator_v2_2_xst_1_blkmemdp_v6_2_xst_bm_mem_arch_v2_prim_3_b1_chk0_col_0_b2_mextd_arch_v2_c1_ram1_v2_d2048_by9_newSim8)) + ) + ) +)))) +(design async_fifo_8_8_128_fifo_generator_v2_2_xst_1_blkmemdp_v6_2_xst (cellRef async_fifo_8_8_128_fifo_generator_v2_2_xst_1_blkmemdp_v6_2_xst (libraryRef test_lib)) + (property X_CORE_INFO (string "null")) + (property PART (string "XC2VP20-6-ff896") (owner "Xilinx"))) +) diff --git a/src/edu/berkeley/fleet/fpga/bee2/user_fifo.v b/src/edu/berkeley/fleet/fpga/bee2/user_fifo.v new file mode 100644 index 0000000..e506e8e --- /dev/null +++ b/src/edu/berkeley/fleet/fpga/bee2/user_fifo.v @@ -0,0 +1,249 @@ +`timescale 1ps / 1ps + +// Copyright (c) 2005-2006, Regents of the University of California +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without modification, +// are permitted provided that the following conditions are met: +// +// - Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// - Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// - Neither the name of the University of California, Berkeley nor the +// names of its contributors may be used to endorse or promote +// products derived from this software without specific prior +// written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR +// ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +//---------------------------------------------------------------------------- +// user_fifo.v +//---------------------------------------------------------------------------- + +`timescale 1ps / 1ps + +module user_fifo + ( + // FIFO interface ports + WrFifo_Din, // Write FIFO data-in + WrFifo_WrEn, // Write FIFO write enable + WrFifo_Full, // Write FIFO full + WrFifo_WrCnt, // Write FIFO write count + RdFifo_Dout, // Read FIFO data-out + RdFifo_RdEn, // Read FIFO read enable + RdFifo_Empty, // Read FIFO empty + RdFifo_RdCnt, // Read FIFO read count + User_Rst, // User reset + User_Clk, // User clock + Sys_Rst, // System clock reset + Sys_Clk, // 100MHz system clock for CCLK generation + + // SelectMAP interface ports + D_I, // Data bus input + D_O, // Data bus output + D_T, // Data bus tristate enable + RDWR_B, // Read/write signal + CS_B, // Chip select + INIT_B, // Initialization/interrupt signal + CCLK // CCLK output + ); + + // FIFO interface ports + input [0:7] WrFifo_Din; + input WrFifo_WrEn; + output WrFifo_Full; + output [0:7] WrFifo_WrCnt; + output [0:7] RdFifo_Dout; + input RdFifo_RdEn; + output RdFifo_Empty; + output [0:7] RdFifo_RdCnt; + input User_Rst; + input User_Clk; + input Sys_Rst; + input Sys_Clk; + + // SelectMAP protocol ports + input [0:7] D_I; + output [0:7] D_O; + output [0:7] D_T; + input RDWR_B; + input CS_B; + output INIT_B; + output CCLK; + + // ____ __ _ _ _ _ // + // | _ \ ___ / _(_)_ __ (_) |_(_) ___ _ __ ___ // + // | | | |/ _ \ |_| | '_ \| | __| |/ _ \| '_ \/ __| // + // | |_| | __/ _| | | | | | |_| | (_) | | | \__ \ // + // |____/ \___|_| |_|_| |_|_|\__|_|\___/|_| |_|___/ // + // // + + //---------------------------------------------------------------------------- + // Signal definitions + //---------------------------------------------------------------------------- + // Write FIFO signals + wire [0:7] WrFifo_Dout; + wire WrFifo_Empty; + wire WrFifo_RdEn; + wire [0:7] WrFifo_RdCnt; + wire [0:7] WrFifo_RdCnt_int; + wire [0:7] WrFifo_WrCnt_int; + + // Read FIFO signals + wire [0:7] RdFifo_Din; + wire RdFifo_Full; + wire RdFifo_WrEn; + wire [0:7] RdFifo_WrCnt; + wire [0:7] RdFifo_WrCnt_int; + wire [0:7] RdFifo_RdCnt_int; + + //---------------------------------------------------------------------------- + // IO Registers + //---------------------------------------------------------------------------- + reg CCLK; + + reg [0:7] D_I_reg; // synthesis attribute iob of D_I_reg is true; + reg [0:7] D_O_reg; // synthesis attribute iob of D_O_reg is true; + reg RDWR_B_reg; // synthesis attribute iob of RDWR_B_reg is true; + reg CS_B_reg; // synthesis attribute iob of CS_B_reg is true; + reg INIT_B_reg; // synthesis attribute iob of INIT_B_reg is true; + + // Outputs + assign D_O = D_O_reg; + assign INIT_B = INIT_B_reg; + + // Inputs + always @( posedge Sys_Clk ) + begin + D_I_reg <= D_I; + RDWR_B_reg <= RDWR_B; + CS_B_reg <= CS_B; + end + + //---------------------------------------------------------------------------- + // Generate CCLK and associated reset + //---------------------------------------------------------------------------- + reg SYNC_done; + reg SYNC_done_dly; + reg CS_B_reg_dly; + + always @( posedge Sys_Clk ) + begin + CS_B_reg_dly <= CS_B_reg; + end + + always @( posedge Sys_Clk ) + begin + if (Sys_Rst) + SYNC_done <= 1'b0; + else if (RDWR_B_reg && ~CS_B_reg) + SYNC_done <= 1'b1; + end + + always @( posedge Sys_Clk ) + begin + if (Sys_Rst) + SYNC_done_dly <= 1'b0; + else + SYNC_done_dly <= SYNC_done; + end + + always @( posedge Sys_Clk ) + begin + if (Sys_Rst) + CCLK <= 1'b0; + else if (~CS_B_reg && CS_B_reg_dly && CCLK) + CCLK <= 1'b1; + else + CCLK <= ~CCLK; + end + + // _____ ___ _____ ___ // + // | ___|_ _| ___/ _ \ ___ // + // | |_ | || |_ | | | / __| // + // | _| | || _|| |_| \__ \ // + // |_| |___|_| \___/|___/ // + // // + // Write FIFO: The write is with respect to the user. The user writes data to this + // FIFO and the control side of SelectMAP reads the data. + // + // Read FIFO: The read is with respect to the user. The user reads data sent from the + // control side of SelectMAP. + // + + //---------------------------------------------------------------------------- + // Read FIFO + //---------------------------------------------------------------------------- + assign RdFifo_WrEn = SYNC_done_dly && ~RDWR_B_reg && ~CS_B_reg && ~RdFifo_Full && CCLK; + assign RdFifo_Din = D_I_reg; + + async_fifo_8_8_128 RdFifo( .din( RdFifo_Din ), + .dout( RdFifo_Dout ), + .rd_clk( User_Clk ), + .rd_en( RdFifo_RdEn ), + .wr_clk( Sys_Clk ), + .wr_en( RdFifo_WrEn ), + .rst( User_Rst ), + .empty( RdFifo_Empty ), + .full( RdFifo_Full ), + .rd_data_count( RdFifo_RdCnt_int ), + .wr_data_count( RdFifo_WrCnt_int ) ); + + assign RdFifo_WrCnt = 8'd129 - RdFifo_WrCnt_int; + assign RdFifo_RdCnt = RdFifo_RdCnt_int; + + //---------------------------------------------------------------------------- + // Write FIFO + //---------------------------------------------------------------------------- + assign WrFifo_RdEn = SYNC_done_dly && RDWR_B_reg && ~CS_B_reg && ~WrFifo_Empty && CCLK; + + async_fifo_8_8_128 WrFifo( .din( WrFifo_Din ), + .dout( WrFifo_Dout ), + .rd_clk( Sys_Clk ), + .rd_en( WrFifo_RdEn ), + .wr_clk( User_Clk ), + .wr_en( WrFifo_WrEn ), + .rst( User_Rst ), + .empty( WrFifo_Empty ), + .full( WrFifo_Full ), + .rd_data_count( WrFifo_RdCnt_int ), + .wr_data_count( WrFifo_WrCnt_int ) ); + + assign WrFifo_WrCnt = 8'd129 - WrFifo_WrCnt_int; + assign WrFifo_RdCnt = WrFifo_RdCnt_int; + + // ____ _ _ __ __ _ ____ // + // / ___| ___| | ___ ___| |_| \/ | / \ | _ \ // + // \___ \ / _ \ |/ _ \/ __| __| |\/| | / _ \ | |_) | // + // ___) | __/ | __/ (__| |_| | | |/ ___ \| __/ // + // |____/ \___|_|\___|\___|\__|_| |_/_/ \_\_| // + // // + + //---------------------------------------------------------------------------- + // SelectMAP control outputs + //---------------------------------------------------------------------------- + wire [0:7] DataCnt = RDWR_B_reg ? WrFifo_RdCnt : RdFifo_WrCnt; + + assign D_T = {8{(~RDWR_B & ~CS_B)}}; // stop driving if master is sending + + always @( posedge Sys_Clk ) + begin + D_O_reg <= CS_B_reg ? DataCnt : WrFifo_Dout; + INIT_B_reg <= WrFifo_Empty; + end + + //---------------------------------------------------------------------------- + +endmodule -- 1.7.10.4