From c871cd0465b332f2c36ce9b563953f21b01068aa Mon Sep 17 00:00:00 2001 From: astoria-d Date: Tue, 8 Jul 2014 11:31:39 +0900 Subject: [PATCH] clean up. some write bug remains, but move forward at this moment... --- tools/qt_proj_test5/qt_proj_test5.qsf | 13 +- tools/qt_proj_test5/qt_proj_test5.vhd | 1565 +++++++++++----------- tools/qt_proj_test5/sdram-test.stp | 177 ++- tools/qt_proj_test5/sdram-test_auto_stripped.stp | 176 ++- tools/qt_proj_test5/sdram_rw.vhd | 2 +- 5 files changed, 938 insertions(+), 995 deletions(-) diff --git a/tools/qt_proj_test5/qt_proj_test5.qsf b/tools/qt_proj_test5/qt_proj_test5.qsf index 0299a37..38be24e 100644 --- a/tools/qt_proj_test5/qt_proj_test5.qsf +++ b/tools/qt_proj_test5/qt_proj_test5.qsf @@ -408,11 +408,12 @@ set_instance_assignment -name CONNECT_TO_SLD_NODE_ENTITY_PORT acq_data_in[177] - set_instance_assignment -name CONNECT_TO_SLD_NODE_ENTITY_PORT acq_data_in[178] -to "sdram_rw:sdr_rw|wbm_we_i" -section_id auto_signaltap_0 set_instance_assignment -name CONNECT_TO_SLD_NODE_ENTITY_PORT acq_data_in[179] -to "sdram_rw:sdr_rw|writing" -section_id auto_signaltap_0 set_global_assignment -name SLD_NODE_PARAMETER_ASSIGNMENT "SLD_DATA_BITS=180" -section_id auto_signaltap_0 -set_instance_assignment -name CONNECT_TO_SLD_NODE_ENTITY_PORT acq_trigger_in[59] -to "sdram_rw:sdr_rw|writing" -section_id auto_signaltap_0 -set_global_assignment -name SLD_NODE_PARAMETER_ASSIGNMENT "SLD_TRIGGER_BITS=60" -section_id auto_signaltap_0 -set_global_assignment -name SLD_NODE_PARAMETER_ASSIGNMENT "SLD_INVERSION_MASK=000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" -section_id auto_signaltap_0 -set_global_assignment -name SLD_NODE_PARAMETER_ASSIGNMENT "SLD_INVERSION_MASK_LENGTH=204" -section_id auto_signaltap_0 -set_global_assignment -name SLD_NODE_PARAMETER_ASSIGNMENT "SLD_NODE_CRC_LOWORD=5695" -section_id auto_signaltap_0 -set_global_assignment -name SLD_NODE_PARAMETER_ASSIGNMENT "SLD_NODE_CRC_HIWORD=65471" -section_id auto_signaltap_0 +set_instance_assignment -name CONNECT_TO_SLD_NODE_ENTITY_PORT acq_trigger_in[59] -to "sdram_rw:sdr_rw|wbm_we_i" -section_id auto_signaltap_0 +set_instance_assignment -name CONNECT_TO_SLD_NODE_ENTITY_PORT acq_trigger_in[60] -to "sdram_rw:sdr_rw|writing" -section_id auto_signaltap_0 +set_global_assignment -name SLD_NODE_PARAMETER_ASSIGNMENT "SLD_TRIGGER_BITS=61" -section_id auto_signaltap_0 +set_global_assignment -name SLD_NODE_PARAMETER_ASSIGNMENT "SLD_INVERSION_MASK=000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" -section_id auto_signaltap_0 +set_global_assignment -name SLD_NODE_PARAMETER_ASSIGNMENT "SLD_INVERSION_MASK_LENGTH=207" -section_id auto_signaltap_0 +set_global_assignment -name SLD_NODE_PARAMETER_ASSIGNMENT "SLD_NODE_CRC_LOWORD=13771" -section_id auto_signaltap_0 +set_global_assignment -name SLD_NODE_PARAMETER_ASSIGNMENT "SLD_NODE_CRC_HIWORD=11951" -section_id auto_signaltap_0 set_global_assignment -name SLD_FILE "D:/daisuke/nes/repo/motonesfpga/tools/qt_proj_test5/sdram-test_auto_stripped.stp" set_instance_assignment -name PARTITION_HIERARCHY root_partition -to | -section_id Top \ No newline at end of file diff --git a/tools/qt_proj_test5/qt_proj_test5.vhd b/tools/qt_proj_test5/qt_proj_test5.vhd index e89147b..b7e18e8 100644 --- a/tools/qt_proj_test5/qt_proj_test5.vhd +++ b/tools/qt_proj_test5/qt_proj_test5.vhd @@ -1,14 +1,13 @@ -library ieee; -use ieee.std_logic_1164.all; -use ieee.std_logic_unsigned.conv_integer; - -- -- MOTO NES FPGA On GHDL Simulation Environment Virtual Cuicuit Board -- All of the components are assembled and instanciated on this board. -- +library ieee; +use ieee.std_logic_1164.all; +use ieee.std_logic_unsigned.conv_integer; -entity qt_proj_test5 is +entity qt_proj_test5_old is port ( signal dbg_cpu_clk : out std_logic; @@ -59,7 +58,7 @@ entity qt_proj_test5 is signal red_led : out std_logic; --Test fail base_clk : in std_logic; - base_clk_24mhz : in std_logic; + base_clk_27mhz : in std_logic; rst_n : in std_logic; h_sync_n : out std_logic; v_sync_n : out std_logic; @@ -81,11 +80,91 @@ entity qt_proj_test5 is dram_we_n : out std_logic --Write Enable ); -end qt_proj_test5; +end qt_proj_test5_old; -architecture rtl of qt_proj_test5 is +architecture rtl of qt_proj_test5_old is -component sdram_controller + component clock_divider + port ( base_clk : in std_logic; + reset_n : in std_logic; + cpu_clk : out std_logic; + ppu_clk : out std_logic; + mem_clk : out std_logic; + vga_clk : out std_logic + ); + end component; + + component dummy_ppu + port ( ppu_clk : in std_logic; + rst_n : in std_logic; + pos_x : out std_logic_vector (8 downto 0); + pos_y : out std_logic_vector (8 downto 0); + nes_r : out std_logic_vector (3 downto 0); + nes_g : out std_logic_vector (3 downto 0); + nes_b : out std_logic_vector (3 downto 0) + ); + end component; + + component vga_clk_gen + PORT + ( + inclk0 : IN STD_LOGIC := '0'; + c0 : OUT STD_LOGIC ; + locked : OUT STD_LOGIC + ); + end component; + +signal pos_x : std_logic_vector (8 downto 0); +signal pos_y : std_logic_vector (8 downto 0); +signal nes_r : std_logic_vector (3 downto 0); +signal nes_g : std_logic_vector (3 downto 0); +signal nes_b : std_logic_vector (3 downto 0); + +component vga_ctl + port ( + signal dbg_vga_x : out std_logic_vector (9 downto 0); + signal dbg_vga_y : out std_logic_vector (9 downto 0); + signal dbg_nes_x : out std_logic_vector(7 downto 0); + signal dbg_nes_x_old : out std_logic_vector(7 downto 0); + signal dbg_sw_state : out std_logic_vector(2 downto 0); + + signal dbg_f_in : out std_logic_vector(11 downto 0); + signal dbg_f_out : out std_logic_vector(11 downto 0); + signal dbg_f_cnt : out std_logic_vector(7 downto 0); + signal dbg_f_rd, dbg_f_wr, dbg_f_emp, dbg_f_ful + : out std_logic; + signal dbg_bst_cnt : out std_logic_vector(7 downto 0); + + ppu_clk : in std_logic; + vga_clk : in std_logic; + mem_clk : in std_logic; + rst_n : in std_logic; + pos_x : in std_logic_vector (8 downto 0); + pos_y : in std_logic_vector (8 downto 0); + nes_r : in std_logic_vector (3 downto 0); + nes_g : in std_logic_vector (3 downto 0); + nes_b : in std_logic_vector (3 downto 0); + h_sync_n : out std_logic; + v_sync_n : out std_logic; + r : out std_logic_vector(3 downto 0); + g : out std_logic_vector(3 downto 0); + b : out std_logic_vector(3 downto 0); + + --SDRAM Signals + wbs_adr_i : out std_logic_vector (21 downto 0); --Address (Bank, Row, Col) + wbs_dat_i : out std_logic_vector (15 downto 0); --Data In (16 bits) + wbs_we_i : out std_logic; --Write Enable + wbs_tga_i : out std_logic_vector (7 downto 0); --Address Tag : Read/write burst length-1 (0 represents 1 word, FF represents 256 words) + wbs_cyc_i : out std_logic; --Cycle Command from interface + wbs_stb_i : out std_logic; --Strobe Command from interface + wbs_dat_o : in std_logic_vector (15 downto 0); --Data Out (16 bits) + wbs_stall_o : in std_logic; --Slave is not ready to receive new data + wbs_err_o : in std_logic; --Error flag: OOR Burst. Burst length is greater that 256-column address + wbs_ack_o : in std_logic --When Read Burst: DATA bus must be valid in this cycle + ); +end component; + +component sdram_controller generic ( reset_polarity_g : std_logic := '0' --When rst = reset_polarity_g, system is in RESET mode @@ -126,10 +205,11 @@ component sdram_controller cmd_done : out std_logic; --Command has finished (read/write) init_st_o : out std_logic_vector (3 downto 0); --Current init state main_st_o : out std_logic_vector (3 downto 0) --Current main state - ); + ); end component; -component sdram_rw + +component sdram_rw generic( reset_polarity : std_logic := '0' --When rst = reset_polarity, system at RESET ); @@ -161,850 +241,719 @@ component sdram_rw ); end component; -component sdram_model - GENERIC ( - addr_bits : INTEGER := 12; - data_bits : INTEGER := 16 ; - col_bits : INTEGER := 8 - ); - PORT ( - Dq : inout std_logic_vector (15 downto 0) := (others => 'Z'); - Addr : in std_logic_vector (11 downto 0) ;-- := (others => '0'); - Ba : in std_logic_vector(1 downto 0);-- := "00"; - Clk : in std_logic ;--:= '0'; - Cke : in std_logic ;--:= '0'; - Cs : in std_logic ;--:= '1'; - Ras : in std_logic ;--:= '0'; - Cas : in std_logic ;--:= '0'; - We : in std_logic ;--:= '0'; - Dqm : in std_logic_vector(1 downto 0)-- := (others => 'Z') - ); - -END component; + constant data_size : integer := 8; + constant addr_size : integer := 16; + constant size14 : integer := 14; -component vga_clk_gen - PORT - ( - inclk0 : IN STD_LOGIC := '0'; - c0 : OUT STD_LOGIC ; - locked : OUT STD_LOGIC - ); -end component; + signal cpu_clk : std_logic; + signal ppu_clk : std_logic; + signal mem_clk : std_logic; + signal vga_clk : std_logic; + signal vga_clk_pll, sdram_clk : std_logic; + signal pll_locked : std_logic; ---Clock and Reset -signal clk_133 : std_logic := '0'; --133 MHz -signal rst : std_logic := '0'; --Reset + -- Wishbone Slave signals to Read/Write interface + signal wbs_adr_i : std_logic_vector (21 downto 0); --Address (Bank, Row, Col) + signal wbs_dat_i : std_logic_vector (15 downto 0); --Data In (16 bits) + signal wbs_we_i : std_logic; --Write Enable + signal wbs_tga_i : std_logic_vector (7 downto 0); --Address Tag : Read/write burst length-1 (0 represents 1 word, FF represents 256 words) + signal wbs_cyc_i : std_logic; --Cycle Command from interface + signal wbs_stb_i : std_logic; --Strobe Command from interface + signal wbs_dat_o : std_logic_vector (15 downto 0); --Data Out (16 bits) + signal wbs_stall_o : std_logic; --Slave is not ready to receive new data + signal wbs_err_o : std_logic; --Error flag: OOR Burst. Burst length is greater that 256-column address + signal wbs_ack_o : std_logic; --When Read Burst: DATA bus must be valid in this cycle + --When Write Burst: Data has been read from SDRAM and is valid -----SDRAM Signals ---signal dram_addr : std_logic_vector (11 downto 0); ---signal dram_bank : std_logic_vector (1 downto 0); ---signal dram_cas_n : std_logic; ---signal dram_cke : std_logic; ---signal dram_cs_n : std_logic; ---signal dram_dq : std_logic_vector (15 downto 0); ---signal dram_ldqm : std_logic; ---signal dram_udqm : std_logic; ---signal dram_ras_n : std_logic; ---signal dram_we_n : std_logic; + --Debug signals + signal cmd_ack : std_logic; --Command has been acknowledged + signal cmd_done : std_logic; --Command has finished (read/write) + signal init_st_o : std_logic_vector (3 downto 0); --Current init state + signal main_st_o : std_logic_vector (3 downto 0); --Current main state ---Read / Write signals to SDRAM -signal addr : std_logic_vector (21 downto 0); -signal dat_tb2ram : std_logic_vector (15 downto 0); -signal dat_ram2tb : std_logic_vector (15 downto 0); -signal we_i : std_logic; -signal stall_i : std_logic; -signal cyc_o : std_logic; -signal err_o : std_logic; -signal ack_i : std_logic; -signal stb_o : std_logic; -signal burst_len : std_logic_vector (7 downto 0); -signal cmd_ack : std_logic; -signal cmd_done : std_logic; + signal writing : std_logic; --'1' when writing, '0' when reading + signal mem_val_o : std_logic_vector (15 downto 0); --Memory value written / compared to SDRAM + signal sdram_val_o : std_logic_vector (15 downto 0); --Read value from SDRAM + signal cur_st_o : std_logic_vector (3 downto 0); --Current state + +begin ---LEDs ---signal green_led : std_logic; ---signal red_led : std_logic; -signal writing : std_logic; ---States -signal init_st_o : std_logic_vector (3 downto 0); -signal main_st_o : std_logic_vector (3 downto 0); + dbg_mem_clk <= mem_clk ; + dbg_cpu_clk <= cpu_clk; + dbg_ppu_clk <= ppu_clk; ---Debug -signal cur_st_o : std_logic_vector (3 downto 0); + dbg_pos_x <= pos_x ; + dbg_pos_y <= pos_y ; + dbg_nes_r <= nes_r ; + dbg_nes_g <= nes_g ; + dbg_nes_b <= nes_b ; -signal sdram_clk, pll_locked : std_logic; -begin - --Clock process - vga_clk_gen_inst : vga_clk_gen - PORT map - ( - --sdram_clk = 133.3333 MHz. - base_clk, sdram_clk, pll_locked - ); - clk_proc: - clk_133 <= sdram_clk; - dram_clk <= sdram_clk; - dbg_mem_clk <= sdram_clk; - - rst_proc: - rst <= rst_n; - - --Componenets: - sdr_ctrl : sdram_controller generic map ( - reset_polarity_g => '0' - ) - port map( - clk_i => clk_133, - rst => rst, - pll_locked => pll_locked, - - dram_addr => dram_addr, - dram_bank => dram_bank, - dram_cas_n => dram_cas_n, - dram_cke => dram_cke, - dram_cs_n => dram_cs_n, - dram_dq => dram_dq, - dram_ldqm => dram_ldqm, - dram_udqm => dram_udqm, - dram_ras_n => dram_ras_n, - dram_we_n => dram_we_n, - - wbs_adr_i => addr, - wbs_dat_i => dat_tb2ram, - wbs_we_i => we_i, - wbs_tga_i => burst_len, - wbs_cyc_i => cyc_o, - wbs_stb_i => stb_o, - wbs_dat_o => dat_ram2tb, - wbs_stall_o => stall_i, - wbs_err_o => err_o, - wbs_ack_o => ack_i, - - cmd_ack => cmd_ack, - cmd_done => cmd_done, - init_st_o => init_st_o, - main_st_o => main_st_o - ); - - sdr_rw : sdram_rw port map ( - clk_i => clk_133, - rst => rst, - - wbm_adr_o => addr, - wbm_dat_i => dat_ram2tb, - wbm_dat_o => dat_tb2ram, - wbm_we_i => we_i, - wbm_tga_o => burst_len, - wbm_cyc_o => cyc_o, - wbm_stb_o => stb_o, - wbm_stall_i => stall_i, - wbm_ack_i => ack_i, + dbg_wbs_adr_i <= wbs_adr_i ; + dbg_wbs_dat_i <= wbs_dat_i ; + dbg_wbs_we_i <= wbs_we_i ; + dbg_wbs_tga_i <= wbs_tga_i ; + dbg_wbs_cyc_i <= wbs_cyc_i ; + dbg_wbs_stb_i <= wbs_stb_i ; - cmd_ack => cmd_ack, - cmd_done => cmd_done, - green_led => green_led, - red_led => red_led, - writing => writing - ); --- sdram_model_inst : sdram_model port map ( --- Dq => dram_dq, --- Addr => dram_addr, --- Ba => dram_bank, --- Clk => clk_133, --- Cke => dram_cke, --- Cs => dram_cs_n, --- Ras => dram_ras_n, --- Cas => dram_cas_n, --- We => dram_we_n, --- Dqm(0) => dram_ldqm, --- Dqm(1) => dram_udqm --- ); - -end architecture rtl; - --------------------------------------------------------------------- --------------------------------------------------------------------- --------------------------------------------------------------------- --------------------------------------------------------------------- --------------------------------------------------------------------- -library ieee; -use ieee.std_logic_1164.all; -use ieee.std_logic_unsigned.conv_integer; - -entity qt_proj_test5_old is - port ( - - signal dbg_cpu_clk : out std_logic; - signal dbg_ppu_clk : out std_logic; - signal dbg_mem_clk : out std_logic; - signal dbg_addr : out std_logic_vector( 16 - 1 downto 0); - signal dbg_d_io : out std_logic_vector( 8 - 1 downto 0); - --- signal dbg_status : out std_logic_vector(7 downto 0); --- signal dbg_dec_oe_n : out std_logic; --- signal dbg_dec_val : out std_logic_vector (7 downto 0); --- signal dbg_int_dbus : out std_logic_vector (7 downto 0); --- signal dbg_status_val : out std_logic_vector (7 downto 0); --- signal dbg_stat_we_n : out std_logic; - ----monitor inside cpu --- signal dbg_d1, dbg_d2, dbg_d_out: out std_logic_vector (7 downto 0); --- signal dbg_ea_carry, dbg_carry_clr_n : out std_logic; --- signal dbg_gate_n : out std_logic; - - signal dbg_pos_x : out std_logic_vector (8 downto 0); - signal dbg_pos_y : out std_logic_vector (8 downto 0); - signal dbg_nes_r : out std_logic_vector (3 downto 0); - signal dbg_nes_g : out std_logic_vector (3 downto 0); - signal dbg_nes_b : out std_logic_vector (3 downto 0); - signal dbg_wbs_adr_i : out std_logic_vector (21 downto 0); --Address (Bank, Row, Col) - signal dbg_wbs_dat_i : out std_logic_vector (15 downto 0); --Data In (16 bits) - signal dbg_wbs_we_i : out std_logic; --Write Enable - signal dbg_wbs_tga_i : out std_logic_vector (7 downto 0); --Address Tag : Read/write burst length-1 (0 represents 1 word, FF represents 256 words) - signal dbg_wbs_cyc_i : out std_logic; --Cycle Command from interface - signal dbg_wbs_stb_i : out std_logic; --Strobe Command from interface - - signal dbg_vga_x : out std_logic_vector (9 downto 0); - signal dbg_vga_y : out std_logic_vector (9 downto 0); - signal dbg_nes_x : out std_logic_vector(7 downto 0); - signal dbg_nes_x_old : out std_logic_vector(7 downto 0); - signal dbg_sw_state : out std_logic_vector(2 downto 0); - - signal dbg_f_in : out std_logic_vector(11 downto 0); - signal dbg_f_out : out std_logic_vector(11 downto 0); - signal dbg_f_cnt : out std_logic_vector(7 downto 0); - signal dbg_f_rd, dbg_f_wr, dbg_f_emp, dbg_f_ful - : out std_logic; - signal dbg_bst_cnt : out std_logic_vector(7 downto 0); - - signal green_led : out std_logic; --Test passed - signal red_led : out std_logic; --Test fail - - base_clk : in std_logic; - base_clk_27mhz : in std_logic; - rst_n : in std_logic; - h_sync_n : out std_logic; - v_sync_n : out std_logic; - r : out std_logic_vector(3 downto 0); - g : out std_logic_vector(3 downto 0); - b : out std_logic_vector(3 downto 0); - --SDRAM Signals - dram_addr : out std_logic_vector (11 downto 0); --Address (12 bit) - dram_bank : out std_logic_vector (1 downto 0); --Bank - dram_cas_n : out std_logic; --Column Address is being transmitted - dram_cke : out std_logic; --Clock Enable - dram_clk : out std_logic; --Clock - dram_cs_n : out std_logic; --Chip Select (Here - Mask commands) - dram_dq : inout std_logic_vector (15 downto 0); --Data in / Data out - dram_ldqm : out std_logic; --Byte masking - dram_udqm : out std_logic; --Byte masking - dram_ras_n : out std_logic; --Row Address is being transmitted - dram_we_n : out std_logic --Write Enable + --ppu/cpu clock generator + clock_inst : clock_divider port map + (base_clk, rst_n, cpu_clk, ppu_clk, mem_clk, vga_clk); + ppu_inst: dummy_ppu + port map ( ppu_clk , + rst_n , + pos_x , + pos_y , + nes_r , + nes_g , + nes_b ); -end qt_proj_test5_old; - -architecture rtl of qt_proj_test5_old is - component clock_divider - port ( base_clk : in std_logic; - reset_n : in std_logic; - cpu_clk : out std_logic; - ppu_clk : out std_logic; - mem_clk : out std_logic; - vga_clk : out std_logic - ); - end component; +-- vga_clk_gen_inst : vga_clk_gen +-- PORT map +-- ( +-- --mem_clk_pll = 133.333 MHz. +-- base_clk, vga_clk_pll, sdram_clk, pll_locked +-- ); + --- testbench pll clock.. +-- dummy_clock_p: process +-- begin +-- sdram_clk <= '1'; +-- wait for 6250 ps / 2; +-- sdram_clk <= '0'; +-- wait for 6250 ps / 2; +-- end process; - component dummy_ppu - port ( ppu_clk : in std_logic; - rst_n : in std_logic; - pos_x : out std_logic_vector (8 downto 0); - pos_y : out std_logic_vector (8 downto 0); - nes_r : out std_logic_vector (3 downto 0); - nes_g : out std_logic_vector (3 downto 0); - nes_b : out std_logic_vector (3 downto 0) - ); - end component; + +-- vga_ctl_inst : vga_ctl +-- port map ( +-- dbg_vga_x , +-- dbg_vga_y , +-- dbg_nes_x , +-- dbg_nes_x_old , +-- dbg_sw_state , +-- +-- dbg_f_in , +-- dbg_f_out , +-- dbg_f_cnt , +-- dbg_f_rd, dbg_f_wr, dbg_f_emp, dbg_f_ful , +-- dbg_bst_cnt , +-- +-- ppu_clk , +-- --vga_clk_pll, +-- --ppu_clk , +-- vga_clk , +-- mem_clk , +-- rst_n , +-- pos_x , +-- pos_y , +-- nes_r , +-- nes_g , +-- nes_b , +-- h_sync_n , +-- v_sync_n , +-- r , +-- g , +-- b , +-- +-- --SDRAM Signals +-- wbs_adr_i , +-- wbs_dat_i , +-- wbs_we_i , +-- wbs_tga_i , +-- wbs_cyc_i , +-- wbs_stb_i , +-- wbs_dat_o , +-- wbs_stall_o , +-- wbs_err_o , +-- wbs_ack_o +-- ); - component vga_clk_gen - PORT - ( - inclk0 : IN STD_LOGIC := '0'; - c0 : OUT STD_LOGIC ; - locked : OUT STD_LOGIC - ); - end component; + test_sdram_inst : sdram_rw + port map ( + mem_clk, + rst_n, + + --Signals to SDRAM controller + wbs_adr_i, + wbs_dat_o, + wbs_dat_i, + wbs_we_i, + wbs_tga_i, + wbs_cyc_i, + wbs_stb_i, + wbs_stall_o, + wbs_ack_o, + + --Debug and test signals + cmd_ack , + cmd_done , + green_led , + red_led , + writing , + mem_val_o , + sdram_val_o , + cur_st_o + ); -signal pos_x : std_logic_vector (8 downto 0); -signal pos_y : std_logic_vector (8 downto 0); -signal nes_r : std_logic_vector (3 downto 0); -signal nes_g : std_logic_vector (3 downto 0); -signal nes_b : std_logic_vector (3 downto 0); + dram_clk <= not mem_clk; + sdram_clk <= not mem_clk; +sdram_ctl_inst : sdram_controller + port map ( + --Clocks and Reset + sdram_clk, + rst_n, + '0', + + --SDRAM Signals + dram_addr , + dram_bank , + dram_cas_n , + dram_cke , + dram_cs_n , + dram_dq , + dram_ldqm , + dram_udqm , + dram_ras_n , + dram_we_n , + + -- Wishbone Slave signals to Read/Write interface + wbs_adr_i , + wbs_dat_i , + wbs_we_i , + wbs_tga_i , + wbs_cyc_i , + wbs_stb_i , + wbs_dat_o , + wbs_stall_o , + wbs_err_o , + wbs_ack_o , -component vga_ctl - port ( - signal dbg_vga_x : out std_logic_vector (9 downto 0); - signal dbg_vga_y : out std_logic_vector (9 downto 0); - signal dbg_nes_x : out std_logic_vector(7 downto 0); - signal dbg_nes_x_old : out std_logic_vector(7 downto 0); - signal dbg_sw_state : out std_logic_vector(2 downto 0); + --Debug signals + cmd_ack , + cmd_done , + init_st_o , + main_st_o + ); - signal dbg_f_in : out std_logic_vector(11 downto 0); - signal dbg_f_out : out std_logic_vector(11 downto 0); - signal dbg_f_cnt : out std_logic_vector(7 downto 0); - signal dbg_f_rd, dbg_f_wr, dbg_f_emp, dbg_f_ful - : out std_logic; - signal dbg_bst_cnt : out std_logic_vector(7 downto 0); - - ppu_clk : in std_logic; - vga_clk : in std_logic; - mem_clk : in std_logic; - rst_n : in std_logic; - pos_x : in std_logic_vector (8 downto 0); - pos_y : in std_logic_vector (8 downto 0); - nes_r : in std_logic_vector (3 downto 0); - nes_g : in std_logic_vector (3 downto 0); - nes_b : in std_logic_vector (3 downto 0); - h_sync_n : out std_logic; - v_sync_n : out std_logic; - r : out std_logic_vector(3 downto 0); - g : out std_logic_vector(3 downto 0); - b : out std_logic_vector(3 downto 0); - - --SDRAM Signals - wbs_adr_i : out std_logic_vector (21 downto 0); --Address (Bank, Row, Col) - wbs_dat_i : out std_logic_vector (15 downto 0); --Data In (16 bits) - wbs_we_i : out std_logic; --Write Enable - wbs_tga_i : out std_logic_vector (7 downto 0); --Address Tag : Read/write burst length-1 (0 represents 1 word, FF represents 256 words) - wbs_cyc_i : out std_logic; --Cycle Command from interface - wbs_stb_i : out std_logic; --Strobe Command from interface - wbs_dat_o : in std_logic_vector (15 downto 0); --Data Out (16 bits) - wbs_stall_o : in std_logic; --Slave is not ready to receive new data - wbs_err_o : in std_logic; --Error flag: OOR Burst. Burst length is greater that 256-column address - wbs_ack_o : in std_logic --When Read Burst: DATA bus must be valid in this cycle - ); -end component; - -component sdram_controller - generic - ( - reset_polarity_g : std_logic := '0' --When rst = reset_polarity_g, system is in RESET mode - ); - port ( - --Clocks and Reset - clk_i : in std_logic; --Wishbone input clock - rst : in std_logic; --Reset - pll_locked : in std_logic; --PLL Locked indication, for CKE (Clock Enable) signal to SDRAM - - --SDRAM Signals - dram_addr : out std_logic_vector (11 downto 0); --Address (12 bit) - dram_bank : out std_logic_vector (1 downto 0); --Bank - dram_cas_n : out std_logic; --Column Address is being transmitted - dram_cke : out std_logic; --Clock Enable - dram_cs_n : out std_logic; --Chip Select (Here - Mask commands) - dram_dq : inout std_logic_vector (15 downto 0); --Data in / Data out - dram_ldqm : out std_logic; --Byte masking - dram_udqm : out std_logic; --Byte masking - dram_ras_n : out std_logic; --Row Address is being transmitted - dram_we_n : out std_logic; --Write Enable - - -- Wishbone Slave signals to Read/Write interface - wbs_adr_i : in std_logic_vector (21 downto 0); --Address (Bank, Row, Col) - wbs_dat_i : in std_logic_vector (15 downto 0); --Data In (16 bits) - wbs_we_i : in std_logic; --Write Enable - wbs_tga_i : in std_logic_vector (7 downto 0); --Address Tag : Read/write burst length-1 (0 represents 1 word, FF represents 256 words) - wbs_cyc_i : in std_logic; --Cycle Command from interface - wbs_stb_i : in std_logic; --Strobe Command from interface - wbs_dat_o : out std_logic_vector (15 downto 0); --Data Out (16 bits) - wbs_stall_o : out std_logic; --Slave is not ready to receive new data - wbs_err_o : out std_logic; --Error flag: OOR Burst. Burst length is greater that 256-column address - wbs_ack_o : out std_logic; --When Read Burst: DATA bus must be valid in this cycle - --When Write Burst: Data has been read from SDRAM and is valid + -- signal addr : std_logic_vector( addr_size - 1 downto 0); +-- signal d_io : std_logic_vector( data_size - 1 downto 0); +-- +--component counter_register +-- generic ( +-- dsize : integer := 8; +-- inc : integer := 1 +-- ); +-- port ( clk : in std_logic; +-- rst_n : in std_logic; +-- ce_n : in std_logic; +-- we_n : in std_logic; +-- d : in std_logic_vector(dsize - 1 downto 0); +-- q : out std_logic_vector(dsize - 1 downto 0) +-- ); +--end component; +-- +--component prg_rom +-- generic (abus_size : integer := 15; dbus_size : integer := 8); +-- port ( clk : in std_logic; +-- ce_n : in std_logic; --select pin active low. +-- addr : in std_logic_vector (abus_size - 1 downto 0); +-- data : inout std_logic_vector (dbus_size - 1 downto 0) +-- ); +--end component; +-- +--component processor_status +-- generic ( +-- dsize : integer := 8 +-- ); +-- port ( +-- signal dbg_dec_oe_n : out std_logic; +-- signal dbg_dec_val : out std_logic_vector (dsize - 1 downto 0); +-- signal dbg_int_dbus : out std_logic_vector (dsize - 1 downto 0); +-- signal dbg_status_val : out std_logic_vector (7 downto 0); +-- signal dbg_stat_we_n : out std_logic; +-- +-- clk : in std_logic; +-- res_n : in std_logic; +-- dec_oe_n : in std_logic; +-- bus_oe_n : in std_logic; +-- set_flg_n : in std_logic; +-- flg_val : in std_logic; +-- load_bus_all_n : in std_logic; +-- load_bus_nz_n : in std_logic; +-- set_from_alu_n : in std_logic; +-- alu_n : in std_logic; +-- alu_v : in std_logic; +-- alu_z : in std_logic; +-- alu_c : in std_logic; +-- stat_c : out std_logic; +-- dec_val : inout std_logic_vector (dsize - 1 downto 0); +-- int_dbus : inout std_logic_vector (dsize - 1 downto 0) +-- ); +--end component; +-- +-- ---status register +-- signal status_reg, int_d_bus : std_logic_vector (7 downto 0); +-- signal stat_dec_oe_n : std_logic; +-- signal stat_bus_oe_n : std_logic; +-- signal stat_set_flg_n : std_logic; +-- signal stat_flg : std_logic; +-- signal stat_bus_all_n : std_logic; +-- signal stat_bus_nz_n : std_logic; +-- signal stat_alu_we_n : std_logic; +-- signal alu_n : std_logic; +-- signal alu_z : std_logic; +-- signal alu_c : std_logic; +-- signal alu_v : std_logic; +-- signal stat_c : std_logic; +-- signal trig_clk : std_logic; +-- +-- +-- +-- component alu_test +-- port ( +-- d1 : in std_logic_vector(7 downto 0); +-- d2 : in std_logic_vector(7 downto 0); +-- d_out : out std_logic_vector(7 downto 0); +-- carry_clr_n : in std_logic; +-- ea_carry : out std_logic +-- ); +--end component; +-- +-- signal d1, d2, d_out : std_logic_vector (7 downto 0); +-- signal ea_carry, gate_n : std_logic; +-- signal carry_clr_n : std_logic; - --Debug signals - cmd_ack : out std_logic; --Command has been acknowledged - cmd_done : out std_logic; --Command has finished (read/write) - init_st_o : out std_logic_vector (3 downto 0); --Current init state - main_st_o : out std_logic_vector (3 downto 0) --Current main state - ); -end component; + + +-- trig_clk <= not cpu_clk; +-- +-- pcl_inst : counter_register generic map (16) port map +-- (cpu_clk, rst_n, '0', '1', (others => '0'), addr(15 downto 0)); +-- +-- rom_inst : prg_rom generic map (12, 8) port map +-- (base_clk, '0', addr(11 downto 0), d_io); +-- +-- dbg_addr <= addr; +-- dbg_d_io <= d_io; +-- +-- dbg_d1 <= d1; +-- dbg_d2 <= d2; +-- dbg_d_out <= d_out; +-- dbg_ea_carry <= ea_carry; +-- dbg_carry_clr_n <= carry_clr_n; +-- dbg_gate_n <= gate_n; +-- +-- dummy_alu : alu_test +-- port map ( +-- d1, d2, d_out, carry_clr_n , ea_carry +-- ); +-- +-- gate_n <= not ea_carry; +-- dec_test_p : process (rst_n, ea_carry, trig_clk) +-- begin +-- if (rst_n = '0') then +-- d1 <= "00000000"; +-- d2 <= "00000000"; +-- carry_clr_n <= '0'; +-- --gate_n <= '1'; +---- elsif (ea_carry = '1') then +---- gate_n <= '0'; +---- carry_clr_n <= '0'; +-- elsif (rising_edge(trig_clk)) then +-- if (addr(5 downto 0) = "000001") then +-- --addr=01 +-- carry_clr_n <= '1'; +-- d1 <= "00010011"; +-- d2 <= "01000111"; +-- --gate_n <= '1'; +-- elsif (addr(5 downto 0) = "000010") then +-- --addr=02 +-- carry_clr_n <= '1'; +-- d1 <= "00110011"; +-- d2 <= "11001111"; +-- --gate_n <= '1'; +-- elsif (addr(5 downto 0) = "000011") then +-- --addr=03 +-- carry_clr_n <= '1'; +-- d1 <= "00001010"; +-- d2 <= "01011001"; +-- --gate_n <= '1'; +-- elsif (addr(5 downto 0) = "000100") then +-- --addr=04 +-- carry_clr_n <= '1'; +-- d1 <= "10001010"; +-- d2 <= "10011001"; +-- --gate_n <= '1'; +-- else +-- carry_clr_n <= '1'; +-- d1 <= "00000000"; +-- d2 <= "00000000"; +-- --gate_n <= '1'; +-- end if; +-- end if; +-- end process; +-- +-- +-- --status register +-- status_register : processor_status generic map (8) +-- port map ( +-- dbg_dec_oe_n, +-- dbg_dec_val, +-- dbg_int_dbus, +-- dbg_status_val, +-- dbg_stat_we_n , +-- trig_clk , rst_n, +-- stat_dec_oe_n, stat_bus_oe_n, +-- stat_set_flg_n, stat_flg, stat_bus_all_n, stat_bus_nz_n, +-- stat_alu_we_n, alu_n, alu_v, alu_z, alu_c, stat_c, +-- status_reg, int_d_bus); +-- +-- dbg_status <= status_reg; +-- status_test_p : process (addr) +-- begin +-- if (addr(5 downto 0) = "000010") then +-- --addr=02 +-- --set status(7) = '1' +-- stat_dec_oe_n <= '1'; +-- stat_bus_oe_n <= '1'; +-- stat_set_flg_n <= '0'; +-- stat_flg <= '1'; +-- stat_bus_all_n <= '1'; +-- stat_bus_nz_n <= '1'; +-- stat_alu_we_n <= '1'; +-- status_reg <= "01000000"; +-- int_d_bus <= "00000000"; +-- +-- elsif (addr(5 downto 0) = "000100") then +-- --addr=04 +-- --set status(2) = '0' +-- stat_dec_oe_n <= '1'; +-- stat_bus_oe_n <= '1'; +-- stat_set_flg_n <= '0'; +-- stat_flg <= '0'; +-- stat_bus_all_n <= '1'; +-- stat_bus_nz_n <= '1'; +-- stat_alu_we_n <= '1'; +-- status_reg <= "00000100"; +-- int_d_bus <= "00000000"; +-- +-- elsif (addr(5 downto 0) = "000110") then +-- --addr=06 +-- --set nz from bus, n=1 +-- stat_dec_oe_n <= '1'; +-- stat_bus_oe_n <= '1'; +-- stat_set_flg_n <= '1'; +-- stat_flg <= '0'; +-- stat_bus_all_n <= '1'; +-- stat_bus_nz_n <= '0'; +-- stat_alu_we_n <= '1'; +-- status_reg <= (others => 'Z'); +-- int_d_bus <= "10000000"; +-- +-- elsif (addr(5 downto 0) = "001000") then +-- --addr=08 +-- --set nz from bus, z=1 +-- stat_dec_oe_n <= '1'; +-- stat_bus_oe_n <= '1'; +-- stat_set_flg_n <= '1'; +-- stat_flg <= '0'; +-- stat_bus_all_n <= '1'; +-- stat_bus_nz_n <= '0'; +-- stat_alu_we_n <= '1'; +-- status_reg <= (others => 'Z'); +-- int_d_bus <= "00000000"; +-- +-- else +-- stat_dec_oe_n <= '0'; +-- stat_bus_oe_n <= '1'; +-- stat_set_flg_n <= '1'; +-- stat_flg <= '1'; +-- stat_bus_all_n <= '1'; +-- stat_bus_nz_n <= '1'; +-- stat_alu_we_n <= '1'; +-- status_reg <= (others => 'Z'); +-- int_d_bus <= (others => 'Z'); +-- end if; +-- end process; -component sdram_rw - generic( - reset_polarity : std_logic := '0' --When rst = reset_polarity, system at RESET - ); - port( - --Clock and Reset - clk_i : in std_logic; --WISHBONE Clock - rst : in std_logic; --RESET - - --Signals to SDRAM controller - wbm_adr_o : out std_logic_vector (21 downto 0); --Address to read from / write to - wbm_dat_i : in std_logic_vector (15 downto 0); --Data out (to SDRAM) - wbm_dat_o : out std_logic_vector (15 downto 0); --Data in (from SDRAM) - wbm_we_i : out std_logic; --'1' - Write, '0' - Read - wbm_tga_o : out std_logic_vector (7 downto 0); --Read/write burst length-1 (0 represents 1 word, FF represents 256 words) - wbm_cyc_o : out std_logic; --Transmit command to SDRAM controller - wbm_stb_o : out std_logic; --Transmit command to SDRAM controller - wbm_stall_i : in std_logic; --When '1', write data to SDRAM - wbm_ack_i : in std_logic; --when '1', data is ready to be read from SDRAM - - --Debug and test signals - cmd_ack : in std_logic; --Command has been acknowledged by SDRAM controller - cmd_done : in std_logic; --Command has finished (read/write) - green_led : out std_logic; --Test passed - red_led : out std_logic; --Test fail - writing : out std_logic; --'1' when writing, '0' when reading - mem_val_o : out std_logic_vector (15 downto 0); --Memory value written / compared to SDRAM - sdram_val_o : out std_logic_vector (15 downto 0); --Read value from SDRAM - cur_st_o : out std_logic_vector (3 downto 0) --Current state - ); -end component; +end rtl; - constant data_size : integer := 8; - constant addr_size : integer := 16; - constant size14 : integer := 14; - signal cpu_clk : std_logic; - signal ppu_clk : std_logic; - signal mem_clk : std_logic; - signal vga_clk : std_logic; - signal vga_clk_pll, sdram_clk : std_logic; - signal pll_locked : std_logic; - -- Wishbone Slave signals to Read/Write interface - signal wbs_adr_i : std_logic_vector (21 downto 0); --Address (Bank, Row, Col) - signal wbs_dat_i : std_logic_vector (15 downto 0); --Data In (16 bits) - signal wbs_we_i : std_logic; --Write Enable - signal wbs_tga_i : std_logic_vector (7 downto 0); --Address Tag : Read/write burst length-1 (0 represents 1 word, FF represents 256 words) - signal wbs_cyc_i : std_logic; --Cycle Command from interface - signal wbs_stb_i : std_logic; --Strobe Command from interface - signal wbs_dat_o : std_logic_vector (15 downto 0); --Data Out (16 bits) - signal wbs_stall_o : std_logic; --Slave is not ready to receive new data - signal wbs_err_o : std_logic; --Error flag: OOR Burst. Burst length is greater that 256-column address - signal wbs_ack_o : std_logic; --When Read Burst: DATA bus must be valid in this cycle - --When Write Burst: Data has been read from SDRAM and is valid - --Debug signals - signal cmd_ack : std_logic; --Command has been acknowledged - signal cmd_done : std_logic; --Command has finished (read/write) - signal init_st_o : std_logic_vector (3 downto 0); --Current init state - signal main_st_o : std_logic_vector (3 downto 0); --Current main state - signal writing : std_logic; --'1' when writing, '0' when reading - signal mem_val_o : std_logic_vector (15 downto 0); --Memory value written / compared to SDRAM - signal sdram_val_o : std_logic_vector (15 downto 0); --Read value from SDRAM - signal cur_st_o : std_logic_vector (3 downto 0); --Current state - -begin - dbg_mem_clk <= mem_clk ; - dbg_cpu_clk <= cpu_clk; - dbg_ppu_clk <= ppu_clk; +--------------------------------------------------------------- +--------------------------------------------------------------- +--------------------------------------------------------------- +------------- SDRAM TEST IMAGE --------------- +--------------------------------------------------------------- +--------------------------------------------------------------- +--------------------------------------------------------------- - dbg_pos_x <= pos_x ; - dbg_pos_y <= pos_y ; - dbg_nes_r <= nes_r ; - dbg_nes_g <= nes_g ; - dbg_nes_b <= nes_b ; - dbg_wbs_adr_i <= wbs_adr_i ; - dbg_wbs_dat_i <= wbs_dat_i ; - dbg_wbs_we_i <= wbs_we_i ; - dbg_wbs_tga_i <= wbs_tga_i ; - dbg_wbs_cyc_i <= wbs_cyc_i ; - dbg_wbs_stb_i <= wbs_stb_i ; +library ieee; +use ieee.std_logic_1164.all; +use ieee.std_logic_unsigned.conv_integer; +entity qt_proj_test5 is + port ( + signal dbg_cpu_clk : out std_logic; + signal dbg_ppu_clk : out std_logic; + signal dbg_mem_clk : out std_logic; + signal dbg_addr : out std_logic_vector( 16 - 1 downto 0); + signal dbg_d_io : out std_logic_vector( 8 - 1 downto 0); - --ppu/cpu clock generator - clock_inst : clock_divider port map - (base_clk, rst_n, cpu_clk, ppu_clk, mem_clk, vga_clk); + signal dbg_pos_x : out std_logic_vector (8 downto 0); + signal dbg_pos_y : out std_logic_vector (8 downto 0); + signal dbg_nes_r : out std_logic_vector (3 downto 0); + signal dbg_nes_g : out std_logic_vector (3 downto 0); + signal dbg_nes_b : out std_logic_vector (3 downto 0); - ppu_inst: dummy_ppu - port map ( ppu_clk , - rst_n , - pos_x , - pos_y , - nes_r , - nes_g , - nes_b - ); + signal dbg_wbs_adr_i : out std_logic_vector (21 downto 0); --Address (Bank, Row, Col) + signal dbg_wbs_dat_i : out std_logic_vector (15 downto 0); --Data In (16 bits) + signal dbg_wbs_we_i : out std_logic; --Write Enable + signal dbg_wbs_tga_i : out std_logic_vector (7 downto 0); --Address Tag : Read/write burst length-1 (0 represents 1 word, FF represents 256 words) + signal dbg_wbs_cyc_i : out std_logic; --Cycle Command from interface + signal dbg_wbs_stb_i : out std_logic; --Strobe Command from interface --- vga_clk_gen_inst : vga_clk_gen --- PORT map --- ( --- --mem_clk_pll = 133.333 MHz. --- base_clk, vga_clk_pll, sdram_clk, pll_locked --- ); - --- testbench pll clock.. --- dummy_clock_p: process --- begin --- sdram_clk <= '1'; --- wait for 6250 ps / 2; --- sdram_clk <= '0'; --- wait for 6250 ps / 2; --- end process; + signal dbg_vga_x : out std_logic_vector (9 downto 0); + signal dbg_vga_y : out std_logic_vector (9 downto 0); + signal dbg_nes_x : out std_logic_vector(7 downto 0); + signal dbg_nes_x_old : out std_logic_vector(7 downto 0); + signal dbg_sw_state : out std_logic_vector(2 downto 0); - --- vga_ctl_inst : vga_ctl --- port map ( --- dbg_vga_x , --- dbg_vga_y , --- dbg_nes_x , --- dbg_nes_x_old , --- dbg_sw_state , --- --- dbg_f_in , --- dbg_f_out , --- dbg_f_cnt , --- dbg_f_rd, dbg_f_wr, dbg_f_emp, dbg_f_ful , --- dbg_bst_cnt , --- --- ppu_clk , --- --vga_clk_pll, --- --ppu_clk , --- vga_clk , --- mem_clk , --- rst_n , --- pos_x , --- pos_y , --- nes_r , --- nes_g , --- nes_b , --- h_sync_n , --- v_sync_n , --- r , --- g , --- b , --- --- --SDRAM Signals --- wbs_adr_i , --- wbs_dat_i , --- wbs_we_i , --- wbs_tga_i , --- wbs_cyc_i , --- wbs_stb_i , --- wbs_dat_o , --- wbs_stall_o , --- wbs_err_o , --- wbs_ack_o --- ); + signal dbg_f_in : out std_logic_vector(11 downto 0); + signal dbg_f_out : out std_logic_vector(11 downto 0); + signal dbg_f_cnt : out std_logic_vector(7 downto 0); + signal dbg_f_rd, dbg_f_wr, dbg_f_emp, dbg_f_ful + : out std_logic; + signal dbg_bst_cnt : out std_logic_vector(7 downto 0); + + signal green_led : out std_logic; --Test passed + signal red_led : out std_logic; --Test fail - test_sdram_inst : sdram_rw - port map ( - mem_clk, - rst_n, - - --Signals to SDRAM controller - wbs_adr_i, - wbs_dat_o, - wbs_dat_i, - wbs_we_i, - wbs_tga_i, - wbs_cyc_i, - wbs_stb_i, - wbs_stall_o, - wbs_ack_o, - - --Debug and test signals - cmd_ack , - cmd_done , - green_led , - red_led , - writing , - mem_val_o , - sdram_val_o , - cur_st_o - ); + base_clk : in std_logic; + base_clk_24mhz : in std_logic; + rst_n : in std_logic; + h_sync_n : out std_logic; + v_sync_n : out std_logic; + r : out std_logic_vector(3 downto 0); + g : out std_logic_vector(3 downto 0); + b : out std_logic_vector(3 downto 0); - dram_clk <= not mem_clk; - sdram_clk <= not mem_clk; -sdram_ctl_inst : sdram_controller - port map ( + --SDRAM Signals + dram_addr : out std_logic_vector (11 downto 0); --Address (12 bit) + dram_bank : out std_logic_vector (1 downto 0); --Bank + dram_cas_n : out std_logic; --Column Address is being transmitted + dram_cke : out std_logic; --Clock Enable + dram_clk : out std_logic; --Clock + dram_cs_n : out std_logic; --Chip Select (Here - Mask commands) + dram_dq : inout std_logic_vector (15 downto 0); --Data in / Data out + dram_ldqm : out std_logic; --Byte masking + dram_udqm : out std_logic; --Byte masking + dram_ras_n : out std_logic; --Row Address is being transmitted + dram_we_n : out std_logic --Write Enable + + ); +end qt_proj_test5; + +architecture rtl of qt_proj_test5 is + +component sdram_controller + generic + ( + reset_polarity_g : std_logic := '0' --When rst = reset_polarity_g, system is in RESET mode + ); + port ( --Clocks and Reset - sdram_clk, - rst_n, - '0', + clk_i : in std_logic; --Wishbone input clock + rst : in std_logic; --Reset + pll_locked : in std_logic; --PLL Locked indication, for CKE (Clock Enable) signal to SDRAM --SDRAM Signals - dram_addr , - dram_bank , - dram_cas_n , - dram_cke , - dram_cs_n , - dram_dq , - dram_ldqm , - dram_udqm , - dram_ras_n , - dram_we_n , + dram_addr : out std_logic_vector (11 downto 0); --Address (12 bit) + dram_bank : out std_logic_vector (1 downto 0); --Bank + dram_cas_n : out std_logic; --Column Address is being transmitted + dram_cke : out std_logic; --Clock Enable + dram_cs_n : out std_logic; --Chip Select (Here - Mask commands) + dram_dq : inout std_logic_vector (15 downto 0); --Data in / Data out + dram_ldqm : out std_logic; --Byte masking + dram_udqm : out std_logic; --Byte masking + dram_ras_n : out std_logic; --Row Address is being transmitted + dram_we_n : out std_logic; --Write Enable -- Wishbone Slave signals to Read/Write interface - wbs_adr_i , - wbs_dat_i , - wbs_we_i , - wbs_tga_i , - wbs_cyc_i , - wbs_stb_i , - wbs_dat_o , - wbs_stall_o , - wbs_err_o , - wbs_ack_o , + wbs_adr_i : in std_logic_vector (21 downto 0); --Address (Bank, Row, Col) + wbs_dat_i : in std_logic_vector (15 downto 0); --Data In (16 bits) + wbs_we_i : in std_logic; --Write Enable + wbs_tga_i : in std_logic_vector (7 downto 0); --Address Tag : Read/write burst length-1 (0 represents 1 word, FF represents 256 words) + wbs_cyc_i : in std_logic; --Cycle Command from interface + wbs_stb_i : in std_logic; --Strobe Command from interface + wbs_dat_o : out std_logic_vector (15 downto 0); --Data Out (16 bits) + wbs_stall_o : out std_logic; --Slave is not ready to receive new data + wbs_err_o : out std_logic; --Error flag: OOR Burst. Burst length is greater that 256-column address + wbs_ack_o : out std_logic; --When Read Burst: DATA bus must be valid in this cycle + --When Write Burst: Data has been read from SDRAM and is valid --Debug signals - cmd_ack , - cmd_done , - init_st_o , - main_st_o - ); - - -- signal addr : std_logic_vector( addr_size - 1 downto 0); --- signal d_io : std_logic_vector( data_size - 1 downto 0); --- ---component counter_register --- generic ( --- dsize : integer := 8; --- inc : integer := 1 --- ); --- port ( clk : in std_logic; --- rst_n : in std_logic; --- ce_n : in std_logic; --- we_n : in std_logic; --- d : in std_logic_vector(dsize - 1 downto 0); --- q : out std_logic_vector(dsize - 1 downto 0) --- ); ---end component; --- ---component prg_rom --- generic (abus_size : integer := 15; dbus_size : integer := 8); --- port ( clk : in std_logic; --- ce_n : in std_logic; --select pin active low. --- addr : in std_logic_vector (abus_size - 1 downto 0); --- data : inout std_logic_vector (dbus_size - 1 downto 0) --- ); ---end component; --- ---component processor_status --- generic ( --- dsize : integer := 8 --- ); --- port ( --- signal dbg_dec_oe_n : out std_logic; --- signal dbg_dec_val : out std_logic_vector (dsize - 1 downto 0); --- signal dbg_int_dbus : out std_logic_vector (dsize - 1 downto 0); --- signal dbg_status_val : out std_logic_vector (7 downto 0); --- signal dbg_stat_we_n : out std_logic; --- --- clk : in std_logic; --- res_n : in std_logic; --- dec_oe_n : in std_logic; --- bus_oe_n : in std_logic; --- set_flg_n : in std_logic; --- flg_val : in std_logic; --- load_bus_all_n : in std_logic; --- load_bus_nz_n : in std_logic; --- set_from_alu_n : in std_logic; --- alu_n : in std_logic; --- alu_v : in std_logic; --- alu_z : in std_logic; --- alu_c : in std_logic; --- stat_c : out std_logic; --- dec_val : inout std_logic_vector (dsize - 1 downto 0); --- int_dbus : inout std_logic_vector (dsize - 1 downto 0) --- ); ---end component; --- --- ---status register --- signal status_reg, int_d_bus : std_logic_vector (7 downto 0); --- signal stat_dec_oe_n : std_logic; --- signal stat_bus_oe_n : std_logic; --- signal stat_set_flg_n : std_logic; --- signal stat_flg : std_logic; --- signal stat_bus_all_n : std_logic; --- signal stat_bus_nz_n : std_logic; --- signal stat_alu_we_n : std_logic; --- signal alu_n : std_logic; --- signal alu_z : std_logic; --- signal alu_c : std_logic; --- signal alu_v : std_logic; --- signal stat_c : std_logic; --- signal trig_clk : std_logic; --- --- --- --- component alu_test --- port ( --- d1 : in std_logic_vector(7 downto 0); --- d2 : in std_logic_vector(7 downto 0); --- d_out : out std_logic_vector(7 downto 0); --- carry_clr_n : in std_logic; --- ea_carry : out std_logic --- ); ---end component; --- --- signal d1, d2, d_out : std_logic_vector (7 downto 0); --- signal ea_carry, gate_n : std_logic; --- signal carry_clr_n : std_logic; + cmd_ack : out std_logic; --Command has been acknowledged + cmd_done : out std_logic; --Command has finished (read/write) + init_st_o : out std_logic_vector (3 downto 0); --Current init state + main_st_o : out std_logic_vector (3 downto 0) --Current main state + ); +end component; + +component sdram_rw + generic( + reset_polarity : std_logic := '0' --When rst = reset_polarity, system at RESET + ); + port( + --Clock and Reset + clk_i : in std_logic; --WISHBONE Clock + rst : in std_logic; --RESET + + --Signals to SDRAM controller + wbm_adr_o : out std_logic_vector (21 downto 0); --Address to read from / write to + wbm_dat_i : in std_logic_vector (15 downto 0); --Data out (to SDRAM) + wbm_dat_o : out std_logic_vector (15 downto 0); --Data in (from SDRAM) + wbm_we_i : out std_logic; --'1' - Write, '0' - Read + wbm_tga_o : out std_logic_vector (7 downto 0); --Read/write burst length-1 (0 represents 1 word, FF represents 256 words) + wbm_cyc_o : out std_logic; --Transmit command to SDRAM controller + wbm_stb_o : out std_logic; --Transmit command to SDRAM controller + wbm_stall_i : in std_logic; --When '1', write data to SDRAM + wbm_ack_i : in std_logic; --when '1', data is ready to be read from SDRAM + + --Debug and test signals + cmd_ack : in std_logic; --Command has been acknowledged by SDRAM controller + cmd_done : in std_logic; --Command has finished (read/write) + green_led : out std_logic; --Test passed + red_led : out std_logic; --Test fail + writing : out std_logic; --'1' when writing, '0' when reading + mem_val_o : out std_logic_vector (15 downto 0); --Memory value written / compared to SDRAM + sdram_val_o : out std_logic_vector (15 downto 0); --Read value from SDRAM + cur_st_o : out std_logic_vector (3 downto 0) --Current state + ); +end component; + +component vga_clk_gen + PORT + ( + inclk0 : IN STD_LOGIC := '0'; + c0 : OUT STD_LOGIC ; + locked : OUT STD_LOGIC + ); +end component; +--Clock and Reset +signal clk_133 : std_logic := '0'; --133 MHz +signal rst : std_logic := '0'; --Reset - - --- trig_clk <= not cpu_clk; --- --- pcl_inst : counter_register generic map (16) port map --- (cpu_clk, rst_n, '0', '1', (others => '0'), addr(15 downto 0)); --- --- rom_inst : prg_rom generic map (12, 8) port map --- (base_clk, '0', addr(11 downto 0), d_io); --- --- dbg_addr <= addr; --- dbg_d_io <= d_io; --- --- dbg_d1 <= d1; --- dbg_d2 <= d2; --- dbg_d_out <= d_out; --- dbg_ea_carry <= ea_carry; --- dbg_carry_clr_n <= carry_clr_n; --- dbg_gate_n <= gate_n; --- --- dummy_alu : alu_test --- port map ( --- d1, d2, d_out, carry_clr_n , ea_carry --- ); --- --- gate_n <= not ea_carry; --- dec_test_p : process (rst_n, ea_carry, trig_clk) --- begin --- if (rst_n = '0') then --- d1 <= "00000000"; --- d2 <= "00000000"; --- carry_clr_n <= '0'; --- --gate_n <= '1'; ----- elsif (ea_carry = '1') then ----- gate_n <= '0'; ----- carry_clr_n <= '0'; --- elsif (rising_edge(trig_clk)) then --- if (addr(5 downto 0) = "000001") then --- --addr=01 --- carry_clr_n <= '1'; --- d1 <= "00010011"; --- d2 <= "01000111"; --- --gate_n <= '1'; --- elsif (addr(5 downto 0) = "000010") then --- --addr=02 --- carry_clr_n <= '1'; --- d1 <= "00110011"; --- d2 <= "11001111"; --- --gate_n <= '1'; --- elsif (addr(5 downto 0) = "000011") then --- --addr=03 --- carry_clr_n <= '1'; --- d1 <= "00001010"; --- d2 <= "01011001"; --- --gate_n <= '1'; --- elsif (addr(5 downto 0) = "000100") then --- --addr=04 --- carry_clr_n <= '1'; --- d1 <= "10001010"; --- d2 <= "10011001"; --- --gate_n <= '1'; --- else --- carry_clr_n <= '1'; --- d1 <= "00000000"; --- d2 <= "00000000"; --- --gate_n <= '1'; --- end if; --- end if; --- end process; --- --- --- --status register --- status_register : processor_status generic map (8) --- port map ( --- dbg_dec_oe_n, --- dbg_dec_val, --- dbg_int_dbus, --- dbg_status_val, --- dbg_stat_we_n , --- trig_clk , rst_n, --- stat_dec_oe_n, stat_bus_oe_n, --- stat_set_flg_n, stat_flg, stat_bus_all_n, stat_bus_nz_n, --- stat_alu_we_n, alu_n, alu_v, alu_z, alu_c, stat_c, --- status_reg, int_d_bus); --- --- dbg_status <= status_reg; --- status_test_p : process (addr) --- begin --- if (addr(5 downto 0) = "000010") then --- --addr=02 --- --set status(7) = '1' --- stat_dec_oe_n <= '1'; --- stat_bus_oe_n <= '1'; --- stat_set_flg_n <= '0'; --- stat_flg <= '1'; --- stat_bus_all_n <= '1'; --- stat_bus_nz_n <= '1'; --- stat_alu_we_n <= '1'; --- status_reg <= "01000000"; --- int_d_bus <= "00000000"; --- --- elsif (addr(5 downto 0) = "000100") then --- --addr=04 --- --set status(2) = '0' --- stat_dec_oe_n <= '1'; --- stat_bus_oe_n <= '1'; --- stat_set_flg_n <= '0'; --- stat_flg <= '0'; --- stat_bus_all_n <= '1'; --- stat_bus_nz_n <= '1'; --- stat_alu_we_n <= '1'; --- status_reg <= "00000100"; --- int_d_bus <= "00000000"; --- --- elsif (addr(5 downto 0) = "000110") then --- --addr=06 --- --set nz from bus, n=1 --- stat_dec_oe_n <= '1'; --- stat_bus_oe_n <= '1'; --- stat_set_flg_n <= '1'; --- stat_flg <= '0'; --- stat_bus_all_n <= '1'; --- stat_bus_nz_n <= '0'; --- stat_alu_we_n <= '1'; --- status_reg <= (others => 'Z'); --- int_d_bus <= "10000000"; --- --- elsif (addr(5 downto 0) = "001000") then --- --addr=08 --- --set nz from bus, z=1 --- stat_dec_oe_n <= '1'; --- stat_bus_oe_n <= '1'; --- stat_set_flg_n <= '1'; --- stat_flg <= '0'; --- stat_bus_all_n <= '1'; --- stat_bus_nz_n <= '0'; --- stat_alu_we_n <= '1'; --- status_reg <= (others => 'Z'); --- int_d_bus <= "00000000"; --- --- else --- stat_dec_oe_n <= '0'; --- stat_bus_oe_n <= '1'; --- stat_set_flg_n <= '1'; --- stat_flg <= '1'; --- stat_bus_all_n <= '1'; --- stat_bus_nz_n <= '1'; --- stat_alu_we_n <= '1'; --- status_reg <= (others => 'Z'); --- int_d_bus <= (others => 'Z'); --- end if; --- end process; +--Read / Write signals to SDRAM +signal addr : std_logic_vector (21 downto 0); +signal dat_tb2ram : std_logic_vector (15 downto 0); +signal dat_ram2tb : std_logic_vector (15 downto 0); +signal we_i : std_logic; +signal stall_i : std_logic; +signal cyc_o : std_logic; +signal err_o : std_logic; +signal ack_i : std_logic; +signal stb_o : std_logic; +signal burst_len : std_logic_vector (7 downto 0); +signal cmd_ack : std_logic; +signal cmd_done : std_logic; -end rtl; +--LEDs +signal writing : std_logic; + +--States +signal init_st_o : std_logic_vector (3 downto 0); +signal main_st_o : std_logic_vector (3 downto 0); + +--Debug +signal cur_st_o : std_logic_vector (3 downto 0); + +signal sdram_clk, pll_locked : std_logic; + +begin + --Clock process + vga_clk_gen_inst : vga_clk_gen + PORT map + ( + --sdram_clk = 133.3333 MHz. + base_clk, sdram_clk, pll_locked + ); + clk_proc: + clk_133 <= sdram_clk; + dram_clk <= sdram_clk; + dbg_mem_clk <= sdram_clk; + + rst_proc: + rst <= rst_n; + + --Componenets: + sdr_ctrl : sdram_controller generic map ( + reset_polarity_g => '0' + ) + port map( + clk_i => clk_133, + rst => rst, + pll_locked => pll_locked, + + dram_addr => dram_addr, + dram_bank => dram_bank, + dram_cas_n => dram_cas_n, + dram_cke => dram_cke, + dram_cs_n => dram_cs_n, + dram_dq => dram_dq, + dram_ldqm => dram_ldqm, + dram_udqm => dram_udqm, + dram_ras_n => dram_ras_n, + dram_we_n => dram_we_n, + + wbs_adr_i => addr, + wbs_dat_i => dat_tb2ram, + wbs_we_i => we_i, + wbs_tga_i => burst_len, + wbs_cyc_i => cyc_o, + wbs_stb_i => stb_o, + wbs_dat_o => dat_ram2tb, + wbs_stall_o => stall_i, + wbs_err_o => err_o, + wbs_ack_o => ack_i, + + cmd_ack => cmd_ack, + cmd_done => cmd_done, + init_st_o => init_st_o, + main_st_o => main_st_o + ); + + sdr_rw : sdram_rw port map ( + clk_i => clk_133, + rst => rst, + + wbm_adr_o => addr, + wbm_dat_i => dat_ram2tb, + wbm_dat_o => dat_tb2ram, + wbm_we_i => we_i, + wbm_tga_o => burst_len, + wbm_cyc_o => cyc_o, + wbm_stb_o => stb_o, + wbm_stall_i => stall_i, + wbm_ack_i => ack_i, + cmd_ack => cmd_ack, + cmd_done => cmd_done, + green_led => green_led, + red_led => red_led, + writing => writing + ); + +end architecture rtl; diff --git a/tools/qt_proj_test5/sdram-test.stp b/tools/qt_proj_test5/sdram-test.stp index 34c8dc4..2104f42 100644 --- a/tools/qt_proj_test5/sdram-test.stp +++ b/tools/qt_proj_test5/sdram-test.stp @@ -1,22 +1,22 @@ - + - - + + - - - - + + + + - + @@ -81,6 +81,7 @@ + @@ -453,8 +454,8 @@ - - + + @@ -584,28 +585,28 @@ - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + @@ -659,8 +660,8 @@ - - + + @@ -790,28 +791,28 @@ - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + @@ -829,7 +830,7 @@ - + @@ -865,8 +866,8 @@ - - + + @@ -996,28 +997,28 @@ - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + @@ -1035,7 +1036,7 @@ - + @@ -1070,18 +1071,18 @@ - + - 'red_led' == rising edge + 'red_led' == low && 'sdram_controller:sdr_ctrl|address_r[0]' == high && 'sdram_controller:sdr_ctrl|address_r[10]' == low && 'sdram_controller:sdr_ctrl|address_r[11]' == low && 'sdram_controller:sdr_ctrl|address_r[12]' == high && 'sdram_controller:sdr_ctrl|address_r[13]' == high && 'sdram_controller:sdr_ctrl|address_r[14]' == high && 'sdram_controller:sdr_ctrl|address_r[15]' == high && 'sdram_controller:sdr_ctrl|address_r[16]' == low && 'sdram_controller:sdr_ctrl|address_r[17]' == low && 'sdram_controller:sdr_ctrl|address_r[18]' == low && 'sdram_controller:sdr_ctrl|address_r[19]' == low && 'sdram_controller:sdr_ctrl|address_r[1]' == low && 'sdram_controller:sdr_ctrl|address_r[20]' == low && 'sdram_controller:sdr_ctrl|address_r[21]' == low && 'sdram_controller:sdr_ctrl|address_r[2]' == low && 'sdram_controller:sdr_ctrl|address_r[3]' == high && 'sdram_controller:sdr_ctrl|address_r[4]' == high && 'sdram_controller:sdr_ctrl|address_r[5]' == low && 'sdram_controller:sdr_ctrl|address_r[6]' == low && 'sdram_controller:sdr_ctrl|address_r[7]' == high && 'sdram_controller:sdr_ctrl|address_r[8]' == low && 'sdram_controller:sdr_ctrl|address_r[9]' == low - 111111111111110000000000000000000000001111111111111111111111111111111111011111110000000000000000000000000000000010000000000000000000000100000000000000000000000000000000110000000001 - 111111111111110000000000000000000000001111111111111111111111111111111111011111110000000000000000000000000000000010000000000000000000000100000000000000000000000000000000110000000001 + 111111111111110000000000000000000000001111111111111111111111111111111111011111110000000000000000000000000000000010000000000000000000000100000000000000000000000000000000110000000011 + 111111111111110000000000000000000000001111111111111111111111111111111111011111110000000000000000000000000000000010000000000000000000000100000000000000000000000000000000110000000011 @@ -1099,10 +1100,6 @@ - - 000000000000001110110010101111101001010010111111111100000000011001011100100100010100101011111010101010111101111010111111111100000000011101001010111110101010101111011110011111111100000000000000001110010010111111101001010010111111111100000000011110011100100100011100101011111010101010111101111010111111111100000000011111001010111110101010101111011110011111111100000000000000001110110010111111101001010010111111111100000000011010011100100100010100101111111010101010111101111010111111111100000000011101001011111110101010101111011110011111111100000000000000001110010010100000011001010010111111111100000000011100011100100100011100101111111010101010111101111010111111111100000000011111001011111110101010101111011110011111111100000000000000001110110010100000011001010010111111111100000000011000011100100100010100101000000110101010111101111010111111111100000000011101001010000001101010101111011110011111111100000000000000001110010010110000011001010010111111111100000000011111101100100100011100101000000110101010111101111010111111111100000000011111001010000001101010101111011110011111111100000000000000001110110010110000011001010010111111111100000000011011101100100100010100101100000110101010111101111010111111111100000000011101001011000001101010101111011110011111111100000000000000001110010010101000011001010010111111111100000000011101101100100100011100101100000110101010111101111010111111111100000000011111001011000001101010101111011110011111111100000000000000001110110010101000011001010010111111111100000000011001101100100100010100101010000110101010111101111010111111111100000000011101001010100001101010101111011110011111111100000000000000001110010010111000011001010010111111111100000000011110101100100100011100101010000110101010111101111010111111111100000000011111001010100001101010101111011110011111111100000000000000001110110010111000011001010010111111111100000000011010101100100100010100101110000110101010111101111010111111111100000000011101001011100001101010101111011110011111111100000000000000001110010010100100011001010010111111111100000000011100101100100100011100101110000110101010111101111010111111111100000000011111001011100001101010101111011110011111111100000000000000001110110010100100011001010010111111111100000000011000101100100100010100101001000110101010111101111010111111111100000000011101001010010001101010101111011110011111111100000000000000001110010010110100011001010010111111111100000000011111001100100100011100101001000110101010111101111010111111111100000000011111001010010001101010101111011110011111111100000000000000001110110010110100011001010010111111111100000000011011001100100100010100101101000110101010111101111010111111111100000000011101001011010001101010101111011110011111111100000000000000001110010010101100011001010010111111111100000000011101001100100100011100101101000110101010111101111010111111111100000000011111001011010001101010101111011110011111111100000000000000001110110010101100011001010010111111111100000000011001001100100100010100101011000110101010111101111010111111111100000000011101001010110001101010101111011110011111111100000000000000001110010010111100011001010010111111111100000000011110001100100100011100101011000110101010111101111010111111111100000000011111001010110001101010101111011110011111111100000000000000001110110010111100011001010010111111111100000000011010001100100100010100101111000110101010111101111010111111111100000000011101001011110001101010101111011110011111111100000000000000001110010010100010011001010010111111111100000000011100001100100100011100101111000110101010111101111010111111111100000000011111001011110001101010101111011110011111111100000000000000001110110010100010011001010010111111111100000000011000001100100100010100101000100110101010111101111010111111111100000000011101001010001001101010101111011110011111111100000000000000001110010010110010011001010010111111111100000000011111110100100100011100101000100110101010111101111010111111111100000000011111001010001001101010101111011110011111111100000000000000001110110010110010011001010010111111111100000000011011110100100100010100101100100110101010111101111010111111111100000000011101001011001001101010101111011110011111111100000000000000001110010010101010011001010010111111111100000000011101110100100100011100101100100110101010111101111010111111111100000000011111001011001001101010101111011110011111111100000000000000001110110010101010011001010010111111111100000000011001110100100100010100101010100110101010111101111010111111111100000000011101001010101001101010101111011110011111111100000000000000001110010010111010011001010010111111111100000000011110110100100100011100101010100110101010111101111010111111111100000000011111001010101001101010101111011110011111111100000000000000001110110010111010011001010010111111111100000000011010110100100100010100101110100110101010111101111010111111111100000000011101001011101001101010101111011110011111111100000000000000001110010010100110011001010010111111111100000000011100110100100100011100101110100110101010111101111010111111111100000000011111001011101001101010101111011110011111111100000000000000001110110010100110011001010010111111111100000000011000110100100100010100101001100110101010111101111010111111111100000000011101001010011001101010101111011110011111111100000000000000001110010010110110011001010010111111111100000000011111010100100100011100101001100110101010111101111010111111111100000000011111001010011001101010101111011110011111111100000000000000001110110010110110011001010010111111111100000000011011010100100100010100101101100110101010111101111010111111111100000000011101001011011001101010101111011110011111111100000000000000001110010010101110011001010010111111111100000000011101010100100100011100101101100110101010111101111010111111111100000000011111001011011001101010101111011110011111111100000000000000001110110010101110011001010010111111111100000000011001010100100100010100101011100110101010111101111010111111111100000000011101001010111001101010101111011110011111111100000000000000001110010010111110011001010010111111111100000000011110010100100100011100101011100110101010111101111010111111111100000000011111001010111001101010101111011110011111111100000000000000001110110010111110011001010010111111111100000000011010010100100100010100101111100110101010111101111010111111111100000000011101001011111001101010101111011110011111111100000000000000001110010010100001011001010010111111111100000000011100010100100100011100101111100110101010111101111010111111111100000000011111001011111001101010101111011110011111111100000000000000001110110010100001011001010010111111111100000000011000010100100100010100101000010110101010111101111010111111111100000000011101001010000101101010101111011110011111111100000000000000001110010010110001011001010010111111111100000000011111100100100100011100101000010110101010111101111010111111111100000000011111001010000101101010101111011110011111111100000000000000001110110010110001011001010010111111111100000000011011100100100100010100101100010110101010111101111010111111111100000000011101001011000101101010101111011110011111111100000000000000001110010010101001011001010010111111111100000000011101100100100100011100101100010110101010111101111010111111111100000000011111001011000101101010101111011110011111111100000000000000001110110010101001011001010010111111111100000000011001100100100100010100101010010110101010111101111010111111111100000000011101001010100101101010101111011110011111111100000000000000001110010010111001011001010010111111111100000000011110100100100100011100101010010110101010111101111010111111111100000000011111001010100101101010101111011110011111111100000000000000001110110010111001011001010010111111111100000000011010100100100100010100101110010110101010111101111010111111111100000000011101001011100101101010101111011110011111111100000000000000001110010010100101011001010010111111111100000000011100100100100100011100101110010110101010111101111010111111111100000000011111001011100101101010101111011110011111111100000000000000001110110010100101011001010010111111111100000000011000100100100100010100101001010110101010111101111010111111111100000000011101001010010101101010101111011110011111111100000000000000001110010010110101011001010010111111111100000000011111000100100100011100101001010110101010111101111010111111111100000000011111001010010101101010101111011110011111111100000000000000001110110010110101011001010010111111111100000000011011000100100100010100101101010110101010111101111010111111111100000000011101001011010101101010101111011110011111111100000000000000001110010010101101011001010010111111111100000000011101000100100100011100101101010110101010111101111010111111111100000000011111001011010101101010101111011110011111111100000000000000001110110010101101011001010010111111111100000000011001000100100100010100101011010110101010111101111010111111111100000000011101001010110101101010101111011110011111111100000000000000001110010010111101011001010010111111111100000000011110000100100100011100101011010110101010111101111010111111111100000000011111001010110101101010101111011110011111111100000000000000001110110010111101011001010010111111111100000000011010000100100100010100101111010110101010111101111010111111111100000000011101001011110101101010101111011110011111111100000000000000001110010010100011011001010010111111111100000000011100000100100100011100101111010110101010111101111010111111111100000000011111001011110101101010101111011110011111111100000000000000001110110010100011011001010010111111111100000000011000000100100100010100101000110110101010111101111010111111111100000000011101001010001101101010101111011110011111111100000000000000001110010010110011011001010010111111111100000000011111111000100100011100101000110110101010111101111010111111111100000000011111001010001101101010101111011110011111111100000000000000001110110010110011011001010010111111111100000000011011111000100100010100101100110110101010111101111010111111111100000000011101001011001101101010101111011110011111111100000000000000001110010010101011011001010010111111111100000000011101111000100100011100101100110110101010111101111010111111111100000000011111001011001101101010101111011110011111111100000000000000001110110010101011011001010010111111111100000000011001111000100100010100101010110110101010111101111010111111111100000000011101001010101101101010101111011110011111111100000000000000001110010010111011011001010010111111111100000000011110111000100100011100101010110110101010111101111010111111111100000000011111001010101101101010101111011110011111111100000000000000001110110010111011011001010010111111111100000000011010111000100100010100101110110110101010111101111010111111111100000000011101001011101101101010101111011110011111111100000000000000001110010010100111011001010010111111111100000000011100111000100100011100101110110110101010111101111010111111111100000000011111001011101101101010101111011110011111111100000000000000001110110010100111011001010010111111111100000000011000111000100100010100101001110110101010111101111010111111111100000000011101001010011101101010101111011110011111111100000000000000001110010010110111011001010010111111111100000000011111011000100100011100101001110110101010111101111010111111111100000000011111001010011101101010101111011110011111111100000000000000001110110010110111011001010010111111111100000000011011011000100100010100101101110110101010111101111010111111111100000000011101001011011101101010101111011110011111111100000000000000001110010010101111011001010010111111111100000000011101011000100100011100101101110110101010111101111010111111111100000000011111001011011101101010101111011110011111111100000000000000001110110010101111011001010010111111111100000000011001011000100100010100101011110110101010111101111010111111111100000000011101001010111101101010101111011110011111111100000000000000001110010010111111011001010010111111111100000000011110011000100100011100101011110110101010111101111010111111111100000000011111001010111101101010101111011110011111111100000000000000001110110010111111011001010010111111111100000000011010011000100100010100101111110110101010111101111010111111111100000000011101001011111101101010101111011110011111111100000000000000001110010010100000111001010010111111111100000000011100011000100100011100101111110110101010111101111010111111111100000000011111001011111101101010101111011110011111111100000000000000001110110010100000111001010010111111111100000000011000011000100100010100101000001110101010111101111010111111111100000000011101001010000011101010101111011110011111111100000000000000001110010010110000111001010010111111111100000000011111101000100100011100101000001110101010111101111010111111111100000000011111001010000011101010101111011110011111111100000000000000001110110010110000111001010010111111111100000000011011101000100100010100101100001110101010111101111010111111111100000000011101001011000011101010101111011110011111111100000000000000001110010010101000111001010010111111111100000000011101101000100100011100101100001110101010111101111010111111111100000000011111001011000011101010101111011110011111111100000000000000001110110010101000111001010010111111111100000000011001101000100100010100101010001110101010111101111010111111111100000000011101001010100011101010101111011110011111111100000000000000001110010010111000111001010010111111111100000000011110101000100100011100101010001110101010111101111010111111111100000000011111001010100011101010101111011110011111111100000000000000001110110010111000111001010010111111111100000000011010101000100100010100101110001110101010111101111010111111111100000000011101001011100011101010101111011110011111111100000000000000001110010010100100111001010010111111111100000000011100101000100100011100101110001110101010111101111010111111111100000000011111001011100011101010101111011110011111111100000000000000001110110010100100111001010010111111111100000000011000101000100100010100101001001110101010111101111010111111111100000000011101001010010011101010101111011110011111111100000000000000001110010010110100111001010010111111111100000000011111001000100100011100101001001110101010111101111010111111111100000000011111001010010011101010101111011110011111111100000000000000001110110010110100111001010010111111111100000000011011001000100100010100101101001110101010111101111010111111111100000000011101001011010011101010101111011110011111111100000000000000001110010010101100111001010010111111111100000000011101001000100100011100101101001110101010111101111010111111111100000000011111001011010011101010101111011110011111111100000000000000001110110010101100111001010010111111111100000000011001001000100100010100101011001110101010111101111010111111111100000000011101001010110011101010101111011110011111111100000000000000001110010010111100111001010010111111111100000000011110001000100100011100101011001110101010111101111010111111111100000000011111001010110011101010101111011110011111111100000000000000001110110010111100111001010010111111111100000000011010001000100100010100101111001110101010111101111010111111111100000000011101001011110011101010101111011110011111111100000000000000001110010010100010111001010010111111111100000000011100001000100100011100101111001110101010111101111010111111111100000000011111001011110011101010101111011110011111111100000000000000001110110010100010111001010010111111111100000000011000001000100100010100101000101110101010111101111010111111111100000000011101001010001011101010101111011110011111111100000000000000001110010010110010111001010010111111111100000000011111110000100100011100101000101110101010111101111010111111111100000000011111001010001011101010101111011110011111111100000000000000001110110010110010111001010010111111111100000000011011110000100100010100101100101110101010111101111010111111111100000000011101001011001011101010101111011110011111111100000000000000001110010010101010111001010010111111111100000000011101110000100100011100101100101110101010111101111010111111111100000000011111001011001011101010101111011110011111111100000000000000001110110010101010111001010010111111111100000000011001110000100100010100101010101110101010111101111010111111111100000000011101001010101011101010101111011110011111111100000000000000001110010010111010111001010010111111111100000000011110110000100100011100101010101110101010111101111010111111111100000000011111001010101011101010101111011110011111111100000000000000001110110010111010111001010010111111111100000000011010110000100100010100101110101110101010111101111010111111111100000000011101001011101011101010101111011110011111111100000000000000001110010010100110111001010010111111111100000000011100110000100100011100101110101110101010111101111010111111111100000000011111001011101011101010101111011110011111111100000000000000001110110010100110111001010010111111111100000000011000110000100100010100101001101110101010111101111010111111111100000000011101001010011011101010101111011110011111111100000000000000001110010010110110111001010010111111111100000000011111010000100100011100101001101110101010111101111010111111111100000000011111001010011011101010101111011110011111111100000000000000001110110010110110111001010010111111111100000000011011010000100100010100101101101110101010111101111010111111111100000000011101001011011011101010101111011110011111111100000000000000001110010010101110111001010010111111111100000000011101010000100100011100101101101110101010111101111010111111111100000000011111001011011011101010101111011110011111111100000000000000001110110010101110111001010010111111111100000000011001010000100100010100101011101110101010111101111010111111111100000000011101001010111011101010101111011110011111111100000000000000001110010010111110111001010010111111111100000000011110010000100100011100101011101110101010111101111010111111111100000000011111001010111011101010101111011110011111111100000000000000001110110010111110111001010010111111111100000000011010010000100100010100101111101110101010111101111010111111111100000000011101001011111011101010101111011110011111111100000000000000001110010010100001111001010010111111111100000000011100010000100100011100101111101110101010111101111010111111111100000000011111001011111011101010101111011110011111111100000000000000001110110010100001111001010010111111111100000000011000010000100100010100101000011110101010111101111010111111111100000000011101001010000111101010101111011110011111111100000000000000001110010010110001111001010010111111111100000000011111100000100100011100101000011110101010111101111010111111111100000000011111001010000111101010101111011110011111111100000000000000001110110010110001111001010010111111111100000000011011100000100100010100101100011110101010111101111010111111111100000000011101001011000111101010101111011110011111111100000000000000001110010010101001111001010010111111111100000000011101100000100100011100101100011110101010111101111010111111111100000000011111001011000111101010101111011110011111111100000000000000001110110010101001111001010010111111111100000000011001100000100100010100101010011110101010111101111010111111111100000000011101001010100111101010101111011110011111111100000000000000001110010010111001111001010010111111111100000000011110100000100100011100101010011110101010111101111010111111111100000000011111001010100111101010101111011110011111111100000000000000001110110010111001111001010010111111111100000000011010100000100100010100101110011110101010111101111010111111111100000000011101001011100111101010101111011110011111111100000000000000001110010010100101111001010010111111111100000000011100100000100100011100101110011110101010111101111010111111111100000000011111001011100111101010101111011110011111111100000000000000001110110010100101111001010010111111111100000000011000100000100100010100101001011110101010111101111010111111111100000000011101001010010111101010101111011110011111111100000000000000001110010010110101111001010010111111111100000000011111000000100100011100101001011110101010111101111010111111111100000000011111001010010111101010101111011110011111111100000000000000001110110010110101111001010010111111111100000000011011000000100100010100101101011110101010111101111010111111111100000000011101001011010111101010101111011110011111111100000000000000001110010010101101111001010010111111111100000000011101000000100100011100101101011110101010111101111010111111111100000000011111001011010111101010101111011110011111111100000000000000001110110010101101111001010010111111111100000000011001000000100100010100101011011110101010111101111010111111111100000000011101001010110111101010101111011110011111111100000000000000001110010010111101111000000010111111111100000000011110000000101100011100101011011110101010111101111010111111111100000000011111001010110111101010101111011110011111111100000000000000001110110010111101111001010010111111111100000000011010000000100100010100101111011110101010111101111010111111111100000000011101001011110111101010101111011110011111111100000000000000001110010010100011110001010010111111111100000000011100000000100100011100101111011110101010111101111010000000000001000000000111001011110111101010101111011110011111111100000000000000001110110010100011110001010010111111111100000000011000000001100100010100101000111110101010111101111000000000000001000000000111001011110111101010101111011110111111111100000000000000001110110010100011110001010010000000000001000000000000000001100100010100101000111110101010111101111000000000000001000000000111001011110111101010101111011110111111111100000000000000101110110010100011110000010010000000000001000000000000000001100100010100101000111110101010111101111000000000000001000000000111001011110111101010101111011110111111111100000000000000001110110010100011110001010010000000000001000000000000000001110100010100101000111110101010111101111000000000000001000000000111001011110111101010101111011110111111111100000000000000001110110010100011110001010010000000000001000000000000000001110100010100101000111110101010111101111000000000000001000000000111001011110111101010101111011110111111111100000000000000001110110010100011110001010010000000000001000000000000000001110100010100101000111110101010111101111000000000000001000000000111001011110111101010101111011110111111111100000000000000100110110010100011110001010010000000000001000000000000000001100100010100101000111110101010111101111000000000000001000000000111001011110111101010101111011110111111111100000000000000001110110010100011110001010010000000000001000000000000000001100100010100101000111110101010111101111000000000000001000000000111001011110111101010101111011110111111111100000000000000001110110010100011110001010010000000000001000000000000000001100100010100101000111110101010111101111000000000000001000000000111001011110111101010101111011110111111111100000000000000001110110010100011110001010010000000000001000000000000000001100100010100101000111110101010111101111000000000000001000000000111001011110111101010101111011110111111111100000000000000001110001010100011110001010010000000000001000000000000000001100100010100101000111110101010111101111000000000000001000000000111001011110111101010101111011110111111111100000000000000001110101010111101111001010010000000000001000000000000000001100100010100101000111110101010111101111010000000000001000000000100101010001111001010101111011110011111111100000000000000001110101010111101111001010110000000000001000000000111111110100100010100101000111110101010111101111010000000000001000000000110101011110111101010101111011110011111111100000000000000001110101010111101111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011110111101010101111011110011111111100000000000000001110101010111101111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011110111101010101111011110011111111100000000000000001110101010111101111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011110111101010101111011110011111111100000000000000001110101010111101111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011110111101010101111011110011111111100000000000000001110101010111101111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011110111101010101111011110011111111100000000000000001110101010111101111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011110111101010101111011110011111111100000000000000001110101010111101111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011110111101010101111011110011111111100000000000000001110101010111101111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011110111101010101111011110011111111100000000000000001110101010111101111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011110111101010101111011110011111111100000000000000001110101010111101111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011110111101010101111011110011111111100000000000000001110101010111101111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011110111101010101111011110011111111100000000000000001110101010111101111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011110111101010101111011110011111111100000000000000001110101010111101111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011110111101010101111011110011111111100000000000000001110101010111101111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011110111101010101111011110011111111100000000000000001110101010111101111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011110111101010101111011110011111111100000000000000001110001010110000001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011110111101010101111011110011111111100000000000000001110101010110000001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011000000101010101111011110011111111100000000000000001110001010101000001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011000000101010101111011110011111111100000000000000001110101010101000001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010100000101010101111011110011111111100000000000000001110001010111000001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010100000101010101111011110011111111100000000000000001110101010111000001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011100000101010101111011110011111111100000000000000001110001010100100001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011100000101010101111011110011111111100000000000000001110101010100100001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010010000101010101111011110011111111100000000000000001110001010110100001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010010000101010101111011110011111111100000000000000001110101010110100001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011010000101010101111011110011111111100000000000000001110001010101100001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011010000101010101111011110011111111100000000000000001110101010101100001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010110000101010101111011110011111111100000000000000001110001010111100001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010110000101010101111011110011111111100000000000000001110101010111100001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011110000101010101111011110011111111100000000000000001110001010100010001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011110000101010101111011110011111111100000000000000001110101010100010001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010001000101010101111011110011111111100000000000000001110001010110010001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010001000101010101111011110011111111100000000000000001110101010110010001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011001000101010101111011110011111111100000000000000001110001010101010001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011001000101010101111011110011111111100000000000000001110101010101010001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010101000101010101111011110011111111100000000000000001110001010111010001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010101000101010101111011110011111111100000000000000001110101010111010001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011101000101010101111011110011111111100000000000000001110001010100110001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011101000101010101111011110011111111100000000000000001110101010100110001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010011000101010101111011110011111111100000000000000001110001010110110001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010011000101010101111011110011111111100000000000000001110101010110110001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011011000101010101111011110011111111100000000000000001110001010101110001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011011000101010101111011110011111111100000000000000001110101010101110001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010111000101010101111011110011111111100000000000000001110001010111110001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010111000101010101111011110011111111100000000000000001110101010111110001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011111000101010101111011110011111111100000000000000001110001010100001001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011111000101010101111011110011111111100000000000000001110101010100001001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010000100101010101111011110011111111100000000000000001110001010110001001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010000100101010101111011110011111111100000000000000001110101010110001001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011000100101010101111011110011111111100000000000000001110001010101001001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011000100101010101111011110011111111100000000000000001110101010101001001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010100100101010101111011110011111111100000000000000001110001010111001001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010100100101010101111011110011111111100000000000000001110101010111001001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011100100101010101111011110011111111100000000000000001110001010100101001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011100100101010101111011110011111111100000000000000001110101010100101001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010010100101010101111011110011111111100000000000000001110001010110101001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010010100101010101111011110011111111100000000000000001110101010110101001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011010100101010101111011110011111111100000000000000001110001010101101001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011010100101010101111011110011111111100000000000000001110101010101101001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010110100101010101111011110011111111100000000000000001110001010111101001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010110100101010101111011110011111111100000000000000001110101010111101001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011110100101010101111011110011111111100000000000000001110001010100011001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011110100101010101111011110011111111100000000000000001110101010100011001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010001100101010101111011110011111111100000000000000001110001010110011001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010001100101010101111011110011111111100000000000000001110101010110011001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011001100101010101111011110011111111100000000000000001110001010101011001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011001100101010101111011110011111111100000000000000001110101010101011001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010101100101010101111011110011111111100000000000000001110001010111011001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010101100101010101111011110011111111100000000000000001110101010111011001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011101100101010101111011110011111111100000000000000001110001010100111001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011101100101010101111011110011111111100000000000000001110101010100111001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010011100101010101111011110011111111100000000000000001110001010110111001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010011100101010101111011110011111111100000000000000001110101010110111001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011011100101010101111011110011111111100000000000000001110001010101111001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011011100101010101111011110011111111100000000000000001110101010101111001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010111100101010101111011110011111111100000000000000001110001010111111001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010111100101010101111011110011111111100000000000000001110101010111111001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011111100101010101111011110011111111100000000000000001110001010100000101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011111100101010101111011110011111111100000000000000001110101010100000101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010000010101010101111011110011111111100000000000000001110001010110000101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010000010101010101111011110011111111100000000000000001110101010110000101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011000010101010101111011110011111111100000000000000001110001010101000101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011000010101010101111011110011111111100000000000000001110101010101000101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010100010101010101111011110011111111100000000000000001110001010111000101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010100010101010101111011110011111111100000000000000001110101010111000101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011100010101010101111011110011111111100000000000000001110001010100100101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011100010101010101111011110011111111100000000000000001110101010100100101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010010010101010101111011110011111111100000000000000001110001010110100101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010010010101010101111011110011111111100000000000000001110101010110100101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011010010101010101111011110011111111100000000000000001110001010101100101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011010010101010101111011110011111111100000000000000001110101010101100101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010110010101010101111011110011111111100000000000000001110001010111100101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010110010101010101111011110011111111100000000000000001110101010111100101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011110010101010101111011110011111111100000000000000001110001010100010101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011110010101010101111011110011111111100000000000000001110101010100010101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010001010101010101111011110011111111100000000000000001110001010110010101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010001010101010101111011110011111111100000000000000001110101010110010101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011001010101010101111011110011111111100000000000000001110001010101010101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011001010101010101111011110011111111100000000000000001110101010101010101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010101010101010101111011110011111111100000000000000001110001010111010101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010101010101010101111011110011111111100000000000000001110101010111010101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011101010101010101111011110011111111100000000000000001110001010100110101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011101010101010101111011110011111111100000000000000001110101010100110101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010011010101010101111011110011111111100000000000000001110001010110110101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010011010101010101111011110011111111100000000000000001110101010110110101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011011010101010101111011110011111111100000000000000001110001010101110101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011011010101010101111011110011111111100000000000000001110101010101110101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010111010101010101111011110011111111100000000000000001110001010111110101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010111010101010101111011110011111111100000000000000001110101010111110101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011111010101010101111011110011111111100000000000000001110001010100001101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011111010101010101111011110011111111100000000000000001110101010100001101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010000110101010101111011110011111111100000000000000001110001010110001101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010000110101010101111011110011111111100000000000000001110101010110001101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011000110101010101111011110011111111100000000000000001110001010101001101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011000110101010101111011110011111111100000000000000001110101010101001101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010100110101010101111011110011111111100000000000000001110001010111001101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010100110101010101111011110011111111100000000000000001110101010111001101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011100110101010101111011110011111111100000000000000001110001010100101101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011100110101010101111011110011111111100000000000000001110101010100101101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010010110101010101111011110011111111100000000000000001110001010110101101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010010110101010101111011110011111111100000000000000001110101010110101101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011010110101010101111011110011111111100000000000000001110001010101101101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011010110101010101111011110011111111100000000000000001110101010101101101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010110110101010101111011110011111111100000000000000001110001010111101101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010110110101010101111011110011111111100000000000000001110101010111101101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011110110101010101111011110011111111100000000000000001110001010100011101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011110110101010101111011110011111111100000000000000001110101010100011101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010001110101010101111011110011111111100000000000000001110001010110011101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010001110101010101111011110011111111100000000000000001110101010110011101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011001110101010101111011110011111111100000000000000001110001010101011101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011001110101010101111011110011111111100000000000000001110101010101011101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010101110101010101111011110011111111100000000000000001110001010111011101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010101110101010101111011110011111111100000000000000001110101010111011101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011101110101010101111011110011111111100000000000000001110001010100111101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011101110101010101111011110011111111100000000000000001110101010100111101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010011110101010101111011110011111111100000000000000001110001010110111101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010011110101010101111011110011111111100000000000000001110101010110111101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011011110101010101111011110011111111100000000000000001110001010101111101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011011110101010101111011110011111111100000000000000001110101010101111101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010111110101010101111011110011111111100000000000000001110001010111111101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010111110101010101111011110011111111100000000000000001110101010111111101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011111110101010101111011110011111111100000000000000001110001010100000011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011111110101010101111011110011111111100000000000000001110101010100000011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010000001101010101111011110011111111100000000000000001110001010110000011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010000001101010101111011110011111111100000000000000001110101010110000011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011000001101010101111011110011111111100000000000000001110001010101000011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011000001101010101111011110011111111100000000000000001110101010101000011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010100001101010101111011110011111111100000000000000001110001010111000011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010100001101010101111011110011111111100000000000000001110101010111000011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011100001101010101111011110011111111100000000000000001110001010100100011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011100001101010101111011110011111111100000000000000001110101010100100011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010010001101010101111011110011111111100000000000000001110001010110100011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010010001101010101111011110011111111100000000000000001110101010110100011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011010001101010101111011110011111111100000000000000001110001010101100011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011010001101010101111011110011111111100000000000000001110101010101100011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010110001101010101111011110011111111100000000000000001110001010111100011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010110001101010101111011110011111111100000000000000001110101010111100011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011110001101010101111011110011111111100000000000000001110001010100010011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011110001101010101111011110011111111100000000000000001110101010100010011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010001001101010101111011110011111111100000000000000001110001010110010011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010001001101010101111011110011111111100000000000000001110101010110010011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011001001101010101111011110011111111100000000000000001110001010101010011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011001001101010101111011110011111111100000000000000001110101010101010011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010101001101010101111011110011111111100000000000000001110001010111010011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010101001101010101111011110011111111100000000000000001110101010111010011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011101001101010101111011110011111111100000000000000001110001010100110011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011101001101010101111011110011111111100000000000000001110101010100110011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010011001101010101111011110011111111100000000000000001110001010110110011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010011001101010101111011110011111111100000000000000001110101010110110011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011011001101010101111011110011111111100000000000000001110001010101110011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011011001101010101111011110011111111100000000000000001110101010101110011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010111001101010101111011110011111111100000000000000001110001010111110011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010111001101010101111011110011111111100000000000000001110101010111110011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011111001101010101111011110011111111100000000000000001110001010100001011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011111001101010101111011110011111111100000000000000001110101010100001011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010000101101010101111011110011111111100000000000000001110001010110001011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010000101101010101111011110011111111100000000000000001110101010110001011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011000101101010101111011110011111111100000000000000001110001010101001011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011000101101010101111011110011111111100000000000000001110101010101001011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010100101101010101111011110011111111100000000000000001110001010111001011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010100101101010101111011110011111111100000000000000001110101010111001011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011100101101010101111011110011111111100000000000000001110001010100101011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011100101101010101111011110011111111100000000000000001110101010100101011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010010101101010101111011110011111111100000000000000001110001010110101011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010010101101010101111011110011111111100000000000000001110101010110101011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011010101101010101111011110011111111100000000000000001110001010101101011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011010101101010101111011110011111111100000000000000001110101010101101011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010110101101010101111011110011111111100000000000000001110001010111101011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010110101101010101111011110011111111100000000000000001110101010111101011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011110101101010101111011110011111111100000000000000001110001010100011011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011110101101010101111011110011111111100000000000000001110101010100011011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010001101101010101111011110011111111100000000000000001110001010110011011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010001101101010101111011110011111111100000000000000001110101010110011011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011001101101010101111011110011111111100000000000000001110001010101011011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011001101101010101111011110011111111100000000000000001110101010101011011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010101101101010101111011110011111111100000000000000001110001010111011011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010101101101010101111011110011111111100000000000000001110101010111011011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011101101101010101111011110011111111100000000000000001110001010100111011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011101101101010101111011110011111111100000000000000001110101010100111011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010011101101010101111011110011111111100000000000000001110001010110111011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010011101101010101111011110011111111100000000000000001110101010110111011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011011101101010101111011110011111111100000000000000001110001010101111011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011011101101010101111011110011111111100000000000000001110101010101111011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010111101101010101111011110011111111100000000000000001110001010111111011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010111101101010101111011110011111111100000000000000001110101010111111011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011111101101010101111011110011111111100000000000000001110001010100000111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011111101101010101111011110011111111100000000000000001110101010100000111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010000011101010101111011110011111111100000000000000001110001010110000111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010000011101010101111011110011111111100000000000000001110101010110000111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011000011101010101111011110011111111100000000000000001110001010101000111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011000011101010101111011110011111111100000000000000001110101010101000111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010100011101010101111011110011111111100000000000000001110001010111000111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010100011101010101111011110011111111100000000000000001110101010111000111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011100011101010101111011110011111111100000000000000001110001010100100111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011100011101010101111011110011111111100000000000000001110101010100100111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010010011101010101111011110011111111100000000000000001110001010110100111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010010011101010101111011110011111111100000000000000001110101010110100111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011010011101010101111011110011111111100000000000000001110001010101100111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011010011101010101111011110011111111100000000000000001110101010101100111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010110011101010101111011110011111111100000000000000001110001010111100111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010110011101010101111011110011111111100000000000000001110101010111100111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011110011101010101111011110011111111100000000000000001110001010100010111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011110011101010101111011110011111111100000000000000001110101010100010111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010001011101010101111011110011111111100000000000000001110001010110010111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010001011101010101111011110011111111100000000000000001110101010110010111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011001011101010101111011110011111111100000000000000001110001010101010111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011001011101010101111011110011111111100000000000000001110101010101010111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010101011101010101111011110011111111100000000000000001110001010111010111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010101011101010101111011110011111111100000000000000001110101010111010111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011101011101010101111011110011111111100000000000000001110001010100110111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011101011101010101111011110011111111100000000000000001110101010100110111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010011011101010101111011110011111111100000000000000001110001010110110111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010011011101010101111011110011111111100000000000000001110101010110110111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011011011101010101111011110011111111100000000000000001110001010101110111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011011011101010101111011110011111111100000000000000001110101010101110111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010111011101010101111011110011111111100000000000000001110001010111110111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010111011101010101111011110011111111100000000000000001110101010111110111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011111011101010101111011110011111111100000000000000001110001010100001111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011111011101010101111011110011111111100000000000000001110101010100001111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010000111101010101111011110011111111100000000000000001110001010110001111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010000111101010101111011110011111111100000000000000001110101010110001111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011000111101010101111011110011111111100000000000000001110001010101001111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011000111101010101111011110011111111100000000000000001110101010101001111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010100111101010101111011110011111111100000000000000001110001010111001111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010100111101010101111011110011111111100000000000000001110101010111001111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011100111101010101111011110011111111100000000000000001110001010100101111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011100111101010101111011110011111111100000000000000001110101010100101111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010010111101010101111011110011111111100000000000000001110001010110101111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010010111101010101111011110011111111100000000000000001110101010110101111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011010111101010101111011110011111111100000000000000001110001010101101111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011010111101010101111011110011111111100000000000000001110101010101101111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010110111101010101111011110011111111100000000000000001110001010111101111000000110000000000001000000000111111110101101010100101000111110101010111101111010000000000001000000000110101010110111101010101111011110011111111100000000000000001110101010111101111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011110111101010101111011110011111111100000000000000001110001010100011110001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011110111101010101111011110011111111100000000000000001110101010111101111001010110000000000001000000000111111110100101010100101000111110101010111101111000000000000001000000000110101011110111101010101111011110111111111100000000000000001110101010111101111001010110000000000001000000000111111110100101010100101000111110101010111101111000000000000001000000000110101011110111101010101111011110111111111100000000000000101110101010111101111000010110000000000001000000000111111110100101010100101000111110101010111101111000000000000001000000000110101011110111101010101111011110111111111100000000000000001110101010111101111001010110000000000001000000000111111110110101010100101000111110101010111101111000000000000001000000000110101011110111101010101111011110111111111100000000000000001110101010111101111001010110000000000001000000000111111110110101010100101000111110101010111101111000000000000001000000000110101011110111101010101111011110111111111100000000000000001110101010111101111001010110000000000001000000000111111110110101010100101000111110101010111101111000000000000001000000000110101011110111101010101111011110111111111100000000000000100110101010111101111001010110000000000001000000000111111110100101010100101000111110101010111101111000000000000001000000000110101011110111101010101111011110111111111100000000000000001110101010111101111001010110000000000001000000000111111110100101010100101000111110101010111101111000000000000001000000000110101011110111101010101111011110111111111100000000000000001110101010111101111001010110000000000001000000000111111110100101010100101000111110101010111101111000000000000001000000000110101011110111101010101111011110111111111100000000000000001110101010111101111001010110000000000001000000000111111110100101010100101000111110101010111101111000000000000001000000000110101011110111101010101111011110111111111100000000000000001110001010100011110001010110000000000001000000000111111110100101010100101000111110101010111101111000000000000001000000000110101011110111101010101111011110111111111100000000000000001110101010111101111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010001111001010101111011110011111111100000000000000001110101010111101111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011110111101010101111011110011111111100000000000000001110101010111101111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011110111101010101111011110011111111100000000000000001110101010111101111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011110111101010101111011110011111111100000000000000001110101010111101111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011110111101010101111011110011111111100000000000000001110101010111101111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011110111101010101111011110011111111100000000000000001110101010111101111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011110111101010101111011110011111111100000000000000001110101010111101111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011110111101010101111011110011111111100000000000000001110101010111101111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011110111101010101111011110011111111100000000000000001110101010111101111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011110111101010101111011110011111111100000000000000001110101010111101111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011110111101010101111011110011111111100000000000000001110101010111101111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011110111101010101111011110011111111100000000000000001110101010111101111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011110111101010101111011110011111111100000000000000001110101010111101111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011110111101010101111011110011111111100000000000000001110101010111101111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011110111101010101111011110011111111100000000000000001110101010111101111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011110111101010101111011110011111111100000000000000001110101010111101111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011110111101010101111011110011111111100000000000000001110001010110000001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011110111101010101111011110011111111100000000000000001110101010110000001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011000000101010101111011110011111111100000000000000001110001010101000001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011000000101010101111011110011111111100000000000000001110101010101000001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010100000101010101111011110011111111100000000000000001110001010111000001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010100000101010101111011110011111111100000000000000001110101010111000001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011100000101010101111011110011111111100000000000000001110001010100100001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011100000101010101111011110011111111100000000000000001110101010100100001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010010000101010101111011110011111111100000000000000001110001010110100001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010010000101010101111011110011111111100000000000000001110101010110100001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011010000101010101111011110011111111100000000000000001110001010101100001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011010000101010101111011110011111111100000000000000001110101010101100001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010110000101010101111011110011111111100000000000000001110001010111100001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010110000101010101111011110011111111100000000000000001110101010111100001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011110000101010101111011110011111111100000000000000001110001010100010001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011110000101010101111011110011111111100000000000000001110101010100010001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010001000101010101111011110011111111100000000000000001110001010110010001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010001000101010101111011110011111111100000000000000001110101010110010001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011001000101010101111011110011111111100000000000000001110001010101010001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011001000101010101111011110011111111100000000000000001110101010101010001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010101000101010101111011110011111111100000000000000001110001010111010001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010101000101010101111011110011111111100000000000000001110101010111010001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011101000101010101111011110011111111100000000000000001110001010100110001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011101000101010101111011110011111111100000000000000001110101010100110001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010011000101010101111011110011111111100000000000000001110001010110110001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010011000101010101111011110011111111100000000000000001110101010110110001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011011000101010101111011110011111111100000000000000001110001010101110001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011011000101010101111011110011111111100000000000000001110101010101110001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010111000101010101111011110011111111100000000000000001110001010111110001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010111000101010101111011110011111111100000000000000001110101010111110001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011111000101010101111011110011111111100000000000000001110001010100001001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011111000101010101111011110011111111100000000000000001110101010100001001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010000100101010101111011110011111111100000000000000001110001010110001001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010000100101010101111011110011111111100000000000000001110101010110001001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011000100101010101111011110011111111100000000000000001110001010101001001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011000100101010101111011110011111111100000000000000001110101010101001001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010100100101010101111011110011111111100000000000000001110001010111001001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010100100101010101111011110011111111100000000000000001110101010111001001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011100100101010101111011110011111111100000000000000001110001010100101001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011100100101010101111011110011111111100000000000000001110101010100101001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010010100101010101111011110011111111100000000000000001110001010110101001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010010100101010101111011110011111111100000000000000001110101010110101001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011010100101010101111011110011111111100000000000000001110001010101101001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011010100101010101111011110011111111100000000000000001110101010101101001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010110100101010101111011110011111111100000000000000001110001010111101001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010110100101010101111011110011111111100000000000000001110101010111101001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011110100101010101111011110011111111100000000000000001110001010100011001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011110100101010101111011110011111111100000000000000001110101010100011001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010001100101010101111011110011111111100000000000000001110001010110011001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010001100101010101111011110011111111100000000000000001110101010110011001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011001100101010101111011110011111111100000000000000001110001010101011001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011001100101010101111011110011111111100000000000000001110101010101011001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010101100101010101111011110011111111100000000000000001110001010111011001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010101100101010101111011110011111111100000000000000001110101010111011001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011101100101010101111011110011111111100000000000000001110001010100111001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011101100101010101111011110011111111100000000000000001110101010100111001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010011100101010101111011110011111111100000000000000001110001010110111001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010011100101010101111011110011111111100000000000000001110101010110111001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011011100101010101111011110011111111100000000000000001110001010101111001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011011100101010101111011110011111111100000000000000001110101010101111001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010111100101010101111011110011111111100000000000000001110001010111111001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010111100101010101111011110011111111100000000000000001110101010111111001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011111100101010101111011110011111111100000000000000001110001010100000101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011111100101010101111011110011111111100000000000000001110101010100000101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010000010101010101111011110011111111100000000000000001110001010110000101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010000010101010101111011110011111111100000000000000001110101010110000101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011000010101010101111011110011111111100000000000000001110001010101000101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011000010101010101111011110011111111100000000000000001110101010101000101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010100010101010101111011110011111111100000000000000001110001010111000101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010100010101010101111011110011111111100000000000000001110101010111000101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011100010101010101111011110011111111100000000000000001110001010100100101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011100010101010101111011110011111111100000000000000001110101010100100101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010010010101010101111011110011111111100000000000000001110001010110100101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010010010101010101111011110011111111100000000000000001110101010110100101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011010010101010101111011110011111111100000000000000001110001010101100101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011010010101010101111011110011111111100000000000000001110101010101100101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010110010101010101111011110011111111100000000000000001110001010111100101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010110010101010101111011110011111111100000000000000001110101010111100101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011110010101010101111011110011111111100000000000000001110001010100010101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011110010101010101111011110011111111100000000000000001110101010100010101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010001010101010101111011110011111111100000000000000001110001010110010101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010001010101010101111011110011111111100000000000000001110101010110010101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011001010101010101111011110011111111100000000000000001110001010101010101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011001010101010101111011110011111111100000000000000001110101010101010101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010101010101010101111011110011111111100000000000000001110001010111010101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010101010101010101111011110011111111100000000000000001110101010111010101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011101010101010101111011110011111111100000000000000001110001010100110101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011101010101010101111011110011111111100000000000000001110101010100110101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010011010101010101111011110011111111100000000000000001110001010110110101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010011010101010101111011110011111111100000000000000001110101010110110101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011011010101010101111011110011111111100000000000000001110001010101110101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011011010101010101111011110011111111100000000000000001110101010101110101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010111010101010101111011110011111111100000000000000001110001010111110101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010111010101010101111011110011111111100000000000000001110101010111110101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011111010101010101111011110011111111100000000000000001110001010100001101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011111010101010101111011110011111111100000000000000001110101010100001101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010000110101010101111011110011111111100000000000000001110001010110001101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010000110101010101111011110011111111100000000000000001110101010110001101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011000110101010101111011110011111111100000000000000001110001010101001101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011000110101010101111011110011111111100000000000000001110101010101001101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010100110101010101111011110011111111100000000000000001110001010111001101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010100110101010101111011110011111111100000000000000001110101010111001101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011100110101010101111011110011111111100000000000000001110001010100101101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011100110101010101111011110011111111100000000000000001110101010100101101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010010110101010101111011110011111111100000000000000001110001010110101101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010010110101010101111011110011111111100000000000000001110101010110101101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011010110101010101111011110011111111100000000000000001110001010101101101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011010110101010101111011110011111111100000000000000001110101010101101101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010110110101010101111011110011111111100000000000000001110001010111101101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010110110101010101111011110011111111100000000000000001110101010111101101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011110110101010101111011110011111111100000000000000001110001010100011101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011110110101010101111011110011111111100000000000000001110101010100011101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010001110101010101111011110011111111100000000000000001110001010110011101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010001110101010101111011110011111111100000000000000001110101010110011101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011001110101010101111011110011111111100000000000000001110001010101011101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011001110101010101111011110011111111100000000000000001110101010101011101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010101110101010101111011110011111111100000000000000001110001010111011101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010101110101010101111011110011111111100000000000000001110101010111011101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011101110101010101111011110011111111100000000000000001110001010100111101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011101110101010101111011110011111111100000000000000001110101010100111101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010011110101010101111011110011111111100000000000000001110001010110111101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010011110101010101111011110011111111100000000000000001110101010110111101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011011110101010101111011110011111111100000000000000001110001010101111101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011011110101010101111011110011111111100000000000000001110101010101111101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010111110101010101111011110011111111100000000000000001110001010111111101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010111110101010101111011110011111111100000000000000001110101010111111101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011111110101010101111011110011111111100000000000000001110001010100000011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011111110101010101111011110011111111100000000000000001110101010100000011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010000001101010101111011110011111111100000000000000001110001010110000011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010000001101010101111011110011111111100000000000000001110101010110000011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011000001101010101111011110011111111100000000000000001110001010101000011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011000001101010101111011110011111111100000000000000001110101010101000011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010100001101010101111011110011111111100000000000000001110001010111000011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010100001101010101111011110011111111100000000000000001110101010111000011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011100001101010101111011110011111111100000000000000001110001010100100011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011100001101010101111011110011111111100000000000000001110101010100100011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010010001101010101111011110011111111100000000000000001110001010110100011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010010001101010101111011110011111111100000000000000001110101010110100011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011010001101010101111011110011111111100000000000000001110001010101100011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011010001101010101111011110011111111100000000000000001110101010101100011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010110001101010101111011110011111111100000000000000001110001010111100011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010110001101010101111011110011111111100000000000000001110101010111100011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011110001101010101111011110011111111100000000000000001110001010100010011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011110001101010101111011110011111111100000000000000001110101010100010011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010001001101010101111011110011111111100000000000000001110001010110010011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010001001101010101111011110011111111100000000000000001110101010110010011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011001001101010101111011110011111111100000000000000001110001010101010011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011001001101010101111011110011111111100000000000000001110101010101010011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010101001101010101111011110011111111100000000000000001110001010111010011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010101001101010101111011110011111111100000000000000001110101010111010011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011101001101010101111011110011111111100000000000000001110001010100110011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011101001101010101111011110011111111100000000000000001110101010100110011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010011001101010101111011110011111111100000000000000001110001010110110011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010011001101010101111011110011111111100000000000000001110101010110110011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011011001101010101111011110011111111100000000000000001110001010101110011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011011001101010101111011110011111111100000000000000001110101010101110011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010111001101010101111011110011111111100000000000000001110001010111110011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010111001101010101111011110011111111100000000000000001110101010111110011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011111001101010101111011110011111111100000000000000001110001010100001011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011111001101010101111011110011111111100000000000000001110101010100001011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010000101101010101111011110011111111100000000000000001110001010110001011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010000101101010101111011110011111111100000000000000001110101010110001011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011000101101010101111011110011111111100000000000000001110001010101001011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011000101101010101111011110011111111100000000000000001110101010101001011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010100101101010101111011110011111111100000000000000001110001010111001011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010100101101010101111011110011111111100000000000000001110101010111001011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011100101101010101111011110011111111100000000000000001110001010100101011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011100101101010101111011110011111111100000000000000001110101010100101011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010010101101010101111011110011111111100000000000000001110001010110101011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010010101101010101111011110011111111100000000000000001110101010110101011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011010101101010101111011110011111111100000000000000001110001010101101011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011010101101010101111011110011111111100000000000000001110101010101101011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010110101101010101111011110011111111100000000000000001110001010111101011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010110101101010101111011110011111111100000000000000001110101010111101011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011110101101010101111011110011111111100000000000000001110001010100011011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011110101101010101111011110011111111100000000000000001110101010100011011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010001101101010101111011110011111111100000000000000001110001010110011011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010001101101010101111011110011111111100000000000000001110101010110011011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011001101101010101111011110011111111100000000000000001110001010101011011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011001101101010101111011110011111111100000000000000001110101010101011011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010101101101010101111011110011111111100000000000000001110001010111011011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010101101101010101111011110011111111100000000000000001110101010111011011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011101101101010101111011110011111111100000000000000001110001010100111011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011101101101010101111011110011111111100000000000000001110101010100111011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010011101101010101111011110011111111100000000000000001110001010110111011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010011101101010101111011110011111111100000000000000001110101010110111011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011011101101010101111011110011111111100000000000000001110001010101111011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011011101101010101111011110011111111100000000000000001110101010101111011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010111101101010101111011110011111111100000000000000001110001010111111011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010111101101010101111011110011111111100000000000000001110101010111111011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011111101101010101111011110011111111100000000000000001110001010100000111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011111101101010101111011110011111111100000000000000001110101010100000111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010000011101010101111011110011111111100000000000000001110001010110000111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010000011101010101111011110011111111100000000000000001110101010110000111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011000011101010101111011110011111111100000000000000001110001010101000111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011000011101010101111011110011111111100000000000000001110101010101000111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010100011101010101111011110011111111100000000000000001110001010111000111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010100011101010101111011110011111111100000000000000001110101010111000111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011100011101010101111011110011111111100000000000000001110001010100100111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011100011101010101111011110011111111100000000000000001110101010100100111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010010011101010101111011110011111111100000000000000001110001010110100111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010010011101010101111011110011111111100000000000000001110101010110100111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011010011101010101111011110011111111100000000000000001110001010101100111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011010011101010101111011110011111111100000000000000001110101010101100111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010110011101010101111011110011111111100000000000000001110001010111100111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010110011101010101111011110011111111100000000000000001110101010111100111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011110011101010101111011110011111111100000000000000001110001010100010111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011110011101010101111011110011111111100000000000000001110101010100010111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010001011101010101111011110011111111100000000000000001110001010110010111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010001011101010101111011110011111111100000000000000001110101010110010111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011001011101010101111011110011111111100000000000000001110001010101010111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011001011101010101111011110011111111100000000000000001110101010101010111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010101011101010101111011110011111111100000000000000001110001010111010111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010101011101010101111011110011111111100000000000000001110101010111010111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011101011101010101111011110011111111100000000000000001110001010100110111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011101011101010101111011110011111111100000000000000001110101010100110111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010011011101010101111011110011111111100000000000000001110001010110110111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010011011101010101111011110011111111100000000000000001110101010110110111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011011011101010101111011110011111111100000000000000001110001010101110111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011011011101010101111011110011111111100000000000000001110101010101110111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010111011101010101111011110011111111100000000000000001110001010111110111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010111011101010101111011110011111111100000000000000001110101010111110111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011111011101010101111011110011111111100000000000000001110001010100001111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011111011101010101111011110011111111100000000000000001110101010100001111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010000111101010101111011110011111111100000000000000001110001010110001111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010000111101010101111011110011111111100000000000000001110101010110001111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011000111101010101111011110011111111100000000000000001110001010101001111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011000111101010101111011110011111111100000000000000001110101010101001111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010100111101010101111011110011111111100000000000000001110001010111001111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010100111101010101111011110011111111100000000000000001110101010111001111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011100111101010101111011110011111111100000000000000001110001010100101111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011100111101010101111011110011111111100000000000000001110101010100101111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010010111101010101111011110011111111100000000000000001110001010110101111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010010111101010101111011110011111111100000000000000001110101010110101111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011010111101010101111011110011111111100000000000000001110001010101101111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011010111101010101111011110011111111100000000000000001110101010101101111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010110111101010101111011110011111111100000000000000001110001010111101111000000110000000000001000000000111111110101101010100101000111110101010111101111010000000000001000000000110101010110111101010101111011110011111111100000000000000001110101010111101111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011110111101010101111011110011111111100000000000000001110001010100011110001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011110111101010101111011110011111111100000000000000001110101010111101111001010110000000000001000000000111111110100101010100101000111110101010111101111000000000000001000000000110101011110111101010101111011110111111111100000000000000001110101010111101111001010110000000000001000000000111111110100101010100101000111110101010111101111000000000000001000000000110101011110111101010101111011110111111111100000000000000101110101010111101111000010110000000000001000000000111111110100101010100101000111110101010111101111000000000000001000000000110101011110111101010101111011110111111111100000000000000001110101010111101111001010110000000000001000000000111111110110101010100101000111110101010111101111000000000000001000000000110101011110111101010101111011110111111111100000000000000001110101010111101111001010110000000000001000000000111111110110101010100101000111110101010111101111000000000000001000000000110101011110111101010101111011110111111111100000000000000001110101010111101111001010110000000000001000000000111111110110101010100101000111110101010111101111000000000000001000000000110101011110111101010101111011110111111111100000000000000100110101010111101111001010110000000000001000000000111111110100101010100101000111110101010111101111000000000000001000000000110101011110111101010101111011110111111111100000000000000001110101010111101111001010110000000000001000000000111111110100101010100101000111110101010111101111000000000000001000000000110101011110111101010101111011110111111111100000000000000001110101010111101111001010110000000000001000000000111111110100101010100101000111110101010111101111000000000000001000000000110101011110111101010101111011110111111111100000000000000001110101010111101111001010110000000000001000000000111111110100101010100101000111110101010111101111000000000000001000000000110101011110111101010101111011110111111111100000000000000001110001010100011110001010110000000000001000000000111111110100101010100101000111110101010111101111000000000000001000000000110101011110111101010101111011110111111111100000000000000001110101010111101111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010001111001010101111011110011111111100000000000000001110101010111101111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011110111101010101111011110011111111100000000000000001110101010111101111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011110111101010101111011110011111111100000000000000001110101010111101111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011110111101010101111011110011111111100000000000000001110101010111101111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011110111101010101111011110011111111100000000000000001110101010111101111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011110111101010101111011110011111111100000000000000001110101010111101111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011110111101010101111011110011111111100000000000000001110101010111101111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011110111101010101111011110011111111100000000000000001110101010111101111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011110111101010101111011110011111111100000000000000001110101010111101111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011110111101010101111011110011111111100000000000000001110101010111101111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011110111101010101111011110011111111100000000000000001110101010111101111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011110111101010101111011110011111111100000000000000001110101010111101111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011110111101010101111011110011111111100000000000000001110101010111101111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011110111101010101111011110011111111100000000000000001110101010111101111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011110111101010101111011110011111111100000000000000001110101010111101111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011110111101010101111011110011111111100000000000000001110101010111101111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011110111101010101111011110011111111100000000000000001110001010110000001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011110111101010101111011110011111111100000000000000001110101010110000001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011000000101010101111011110011111111100000000000000001110001010101000001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011000000101010101111011110011111111100000000000000001110101010101000001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010100000101010101111011110011111111100000000000000001110001010111000001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010100000101010101111011110011111111100000000000000001110101010111000001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011100000101010101111011110011111111100000000000000001110001010100100001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011100000101010101111011110011111111100000000000000001110101010100100001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010010000101010101111011110011111111100000000000000001110001010110100001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010010000101010101111011110011111111100000000000000001110101010110100001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011010000101010101111011110011111111100000000000000001110001010101100001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011010000101010101111011110011111111100000000000000001110101010101100001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010110000101010101111011110011111111100000000000000001110001010111100001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010110000101010101111011110011111111100000000000000001110101010111100001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011110000101010101111011110011111111100000000000000001110001010100010001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011110000101010101111011110011111111100000000000000001110101010100010001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010001000101010101111011110011111111100000000000000001110001010110010001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010001000101010101111011110011111111100000000000000001110101010110010001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011001000101010101111011110011111111100000000000000001110001010101010001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011001000101010101111011110011111111100000000000000001110101010101010001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010101000101010101111011110011111111100000000000000001110001010111010001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010101000101010101111011110011111111100000000000000001110101010111010001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011101000101010101111011110011111111100000000000000001110001010100110001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011101000101010101111011110011111111100000000000000001110101010100110001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010011000101010101111011110011111111100000000000000001110001010110110001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010011000101010101111011110011111111100000000000000001110101010110110001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011011000101010101111011110011111111100000000000000001110001010101110001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011011000101010101111011110011111111100000000000000001110101010101110001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010111000101010101111011110011111111100000000000000001110001010111110001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010111000101010101111011110011111111100000000000000001110101010111110001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011111000101010101111011110011111111100000000000000001110001010100001001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011111000101010101111011110011111111100000000000000001110101010100001001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010000100101010101111011110011111111100000000000000001110001010110001001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010000100101010101111011110011111111100000000000000001110101010110001001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011000100101010101111011110011111111100000000000000001110001010101001001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011000100101010101111011110011111111100000000000000001110101010101001001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010100100101010101111011110011111111100000000000000001110001010111001001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010100100101010101111011110011111111100000000000000001110101010111001001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011100100101010101111011110011111111100000000000000001110001010100101001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011100100101010101111011110011111111100000000000000001110101010100101001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010010100101010101111011110011111111100000000000000001110001010110101001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010010100101010101111011110011111111100000000000000001110101010110101001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011010100101010101111011110011111111100000000000000001110001010101101001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011010100101010101111011110011111111100000000000000001110101010101101001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010110100101010101111011110011111111100000000000000001110001010111101001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010110100101010101111011110011111111100000000000000001110101010111101001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011110100101010101111011110011111111100000000000000001110001010100011001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011110100101010101111011110011111111100000000000000001110101010100011001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010001100101010101111011110011111111100000000000000001110001010110011001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010001100101010101111011110011111111100000000000000001110101010110011001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011001100101010101111011110011111111100000000000000001110001010101011001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011001100101010101111011110011111111100000000000000001110101010101011001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010101100101010101111011110011111111100000000000000001110001010111011001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010101100101010101111011110011111111100000000000000001110101010111011001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011101100101010101111011110011111111100000000000000001110001010100111001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011101100101010101111011110011111111100000000000000001110101010100111001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010011100101010101111011110011111111100000000000000001110001010110111001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010011100101010101111011110011111111100000000000000001110101010110111001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011011100101010101111011110011111111100000000000000001110001010101111001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011011100101010101111011110011111111100000000000000001110101010101111001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010111100101010101111011110011111111100000000000000001110001010111111001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010111100101010101111011110011111111100000000000000001110101010111111001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011111100101010101111011110011111111100000000000000001110001010100000101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011111100101010101111011110011111111100000000000000001110101010100000101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010000010101010101111011110011111111100000000000000001110001010110000101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010000010101010101111011110011111111100000000000000001110101010110000101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011000010101010101111011110011111111100000000000000001110001010101000101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011000010101010101111011110011111111100000000000000001110101010101000101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010100010101010101111011110011111111100000000000000001110001010111000101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010100010101010101111011110011111111100000000000000001110101010111000101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011100010101010101111011110011111111100000000000000001110001010100100101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011100010101010101111011110011111111100000000000000001110101010100100101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010010010101010101111011110011111111100000000000000001110001010110100101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010010010101010101111011110011111111100000000000000001110101010110100101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011010010101010101111011110011111111100000000000000001110001010101100101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011010010101010101111011110011111111100000000000000001110101010101100101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010110010101010101111011110011111111100000000000000001110001010111100101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010110010101010101111011110011111111100000000000000001110101010111100101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011110010101010101111011110011111111100000000000000001110001010100010101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011110010101010101111011110011111111100000000000000001110101010100010101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010001010101010101111011110011111111100000000000000001110001010110010101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010001010101010101111011110011111111100000000000000001110101010110010101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011001010101010101111011110011111111100000000000000001110001010101010101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011001010101010101111011110011111111100000000000000001110101010101010101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010101010101010101111011110011111111100000000000000001110001010111010101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010101010101010101111011110011111111100000000000000001110101010111010101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011101010101010101111011110011111111100000000000000001110001010100110101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011101010101010101111011110011111111100000000000000001110101010100110101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010011010101010101111011110011111111100000000000000001110001010110110101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010011010101010101111011110011111111100000000000000001110101010110110101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011011010101010101111011110011111111100000000000000001110001010101110101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011011010101010101111011110011111111100000000000000001110101010101110101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010111010101010101111011110011111111100000000000000001110001010111110101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010111010101010101111011110011111111100000000000000001110101010111110101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011111010101010101111011110011111111100000000000000001110001010100001101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011111010101010101111011110011111111100000000000000001110101010100001101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010000110101010101111011110011111111100000000000000001110001010110001101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010000110101010101111011110011111111100000000000000001110101010110001101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011000110101010101111011110011111111100000000000000001110001010101001101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011000110101010101111011110011111111100000000000000001110101010101001101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010100110101010101111011110011111111100000000000000001110001010111001101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010100110101010101111011110011111111100000000000000001110101010111001101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011100110101010101111011110011111111100000000000000001110001010100101101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011100110101010101111011110011111111100000000000000001110101010100101101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010010110101010101111011110011111111100000000000000001110001010110101101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010010110101010101111011110011111111100000000000000001110101010110101101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011010110101010101111011110011111111100000000000000001110001010101101101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011010110101010101111011110011111111100000000000000001110101010101101101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010110110101010101111011110011111111100000000000000001110001010111101101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010110110101010101111011110011111111100000000000000001110101010111101101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011110110101010101111011110011111111100000000000000001110001010100011101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011110110101010101111011110011111111100000000000000001110101010100011101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010001110101010101111011110011111111100000000000000001110001010110011101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010001110101010101111011110011111111100000000000000001110101010110011101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011001110101010101111011110011111111100000000000000001110001010101011101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011001110101010101111011110011111111100000000000000001110101010101011101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010101110101010101111011110011111111100000000000000001110001010111011101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010101110101010101111011110011111111100000000000000001110101010111011101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011101110101010101111011110011111111100000000000000001110001010100111101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011101110101010101111011110011111111100000000000000001110101010100111101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010011110101010101111011110011111111100000000000000001110001010110111101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010011110101010101111011110011111111100000000000000001110101010110111101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011011110101010101111011110011111111100000000000000001110001010101111101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011011110101010101111011110011111111100000000000000001110101010101111101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010111110101010101111011110011111111100000000000000001110001010111111101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010111110101010101111011110011111111100000000000000001110101010111111101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011111110101010101111011110011111111100000000000000001110001010100000011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011111110101010101111011110011111111100000000000000001110101010100000011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010000001101010101111011110011111111100000000000000001110001010110000011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010000001101010101111011110011111111100000000000000001110101010110000011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011000001101010101111011110011111111100000000000000001110001010101000011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011000001101010101111011110011111111100000000000000001110101010101000011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010100001101010101111011110011111111100000000000000001110001010111000011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010100001101010101111011110011111111100000000000000001110101010111000011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011100001101010101111011110011111111100000000000000001110001010100100011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011100001101010101111011110011111111100000000000000001110101010100100011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010010001101010101111011110011111111100000000000000001110001010110100011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010010001101010101111011110011111111100000000000000001110101010110100011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011010001101010101111011110011111111100000000000000001110001010101100011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011010001101010101111011110011111111100000000000000001110101010101100011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010110001101010101111011110011111111100000000000000001110001010111100011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010110001101010101111011110011111111100000000000000001110101010111100011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011110001101010101111011110011111111100000000000000001110001010100010011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011110001101010101111011110011111111100000000000000001110101010100010011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010001001101010101111011110011111111100000000000000001110001010110010011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010001001101010101111011110011111111100000000000000001110101010110010011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011001001101010101111011110011111111100000000000000001110001010101010011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011001001101010101111011110011111111100000000000000001110101010101010011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010101001101010101111011110011111111100000000000000001110001010111010011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010101001101010101111011110011111111100000000000000001110101010111010011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011101001101010101111011110011111111100000000000000001110001010100110011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011101001101010101111011110011111111100000000000000001110101010100110011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010011001101010101111011110011111111100000000000000001110001010110110011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010011001101010101111011110011111111100000000000000001110101010110110011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011011001101010101111011110011111111100000000000000001110001010101110011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011011001101010101111011110011111111100000000000000001110101010101110011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010111001101010101111011110011111111100000000000000001110001010111110011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010111001101010101111011110011111111100000000000000001110101010111110011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011111001101010101111011110011111111100000000000000001110001010100001011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011111001101010101111011110011111111100000000000000001110101010100001011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010000101101010101111011110011111111100000000000000001110001010110001011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010000101101010101111011110011111111100000000000000001110101010110001011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011000101101010101111011110011111111100000000000000001110001010101001011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011000101101010101111011110011111111100000000000000001110101010101001011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010100101101010101111011110011111111100000000000000001110001010111001011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010100101101010101111011110011111111100000000000000001110101010111001011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011100101101010101111011110011111111100000000000000001110001010100101011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011100101101010101111011110011111111100000000000000001110101010100101011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010010101101010101111011110011111111100000000000000001110001010110101011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010010101101010101111011110011111111100000000000000001110101010110101011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011010101101010101111011110011111111100000000000000001110001010101101011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011010101101010101111011110011111111100000000000000001110101010101101011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010110101101010101111011110011111111100000000000000001110001010111101011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010110101101010101111011110011111111100000000000000001110101010111101011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011110101101010101111011110011111111100000000000000001110001010100011011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011110101101010101111011110011111111100000000000000001110101010100011011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010001101101010101111011110011111111100000000000000001110001010110011011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010001101101010101111011110011111111100000000000000001110101010110011011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011001101101010101111011110011111111100000000000000001110001010101011011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011001101101010101111011110011111111100000000000000001110101010101011011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010101101101010101111011110011111111100000000000000001110001010111011011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010101101101010101111011110011111111100000000000000001110101010111011011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011101101101010101111011110011111111100000000000000001110001010100111011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011101101101010101111011110011111111100000000000000001110101010100111011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010011101101010101111011110011111111100000000000000001110001010110111011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010011101101010101111011110011111111100000000000000001110101010110111011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011011101101010101111011110011111111100000000000000001110001010101111011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011011101101010101111011110011111111100000000000000001110101010101111011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010111101101010101111011110011111111100000000000000001110001010111111011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010111101101010101111011110011111111100000000000000001110101010111111011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011111101101010101111011110011111111100000000000000001110001010100000111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011111101101010101111011110011111111100000000000000001110101010100000111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010000011101010101111011110011111111100000000000000001110001010110000111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010000011101010101111011110011111111100000000000000001110101010110000111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011000011101010101111011110011111111100000000000000001110001010101000111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011000011101010101111011110011111111100000000000000001110101010101000111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010100011101010101111011110011111111100000000000000001110001010111000111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010100011101010101111011110011111111100000000000000001110101010111000111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011100011101010101111011110011111111100000000000000001110001010100100111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011100011101010101111011110011111111100000000000000001110101010100100111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010010011101010101111011110011111111100000000000000001110001010110100111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010010011101010101111011110011111111100000000000000001110101010110100111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011010011101010101111011110011111111100000000000000001110001010101100111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011010011101010101111011110011111111100000000000000001110101010101100111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010110011101010101111011110011111111100000000000000001110001010111100111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010110011101010101111011110011111111100000000000000001110101010111100111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011110011101010101111011110011111111100000000000000001110001010100010111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011110011101010101111011110011111111100000000000000001110101010100010111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010001011101010101111011110011111111100000000000000001110001010110010111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010001011101010101111011110011111111100000000000000001110101010110010111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011001011101010101111011110011111111100000000000000001110001010101010111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011001011101010101111011110011111111100000000000000001110101010101010111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010101011101010101111011110011111111100000000000000001110001010111010111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010101011101010101111011110011111111100000000000000001110101010111010111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011101011101010101111011110011111111100000000000000001110001010100110111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011101011101010101111011110011111111100000000000000001110101010100110111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010011011101010101111011110011111111100000000000000001110001010110110111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010011011101010101111011110011111111100000000000000001110101010110110111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011011011101010101111011110011111111100000000000000001110001010101110111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011011011101010101111011110011111111100000000000000001110101010101110111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010111011101010101111011110011111111100000000000000001110001010111110111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010111011101010101111011110011111111100000000000000001110101010111110111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011111011101010101111011110011111111100000000000000001110001010100001111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011111011101010101111011110011111111100000000000000001110101010100001111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010000111101010101111011110011111111100000000000000001110001010110001111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010000111101010101111011110011111111100000000000000001110101010110001111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011000111101010101111011110011111111100000000000000001110001010101001111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011000111101010101111011110011111111100000000000000001110101010101001111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010100111101010101111011110011111111100000000000000001110001010111001111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010100111101010101111011110011111111100000000000000001110101010111001111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011100111101010101111011110011111111100000000000000001110001010100101111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011100111101010101111011110011111111100000000000000001110101010100101111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010010111101010101111011110011111111100000000000000001110001010110101111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010010111101010101111011110011111111100000000000000001110101010110101111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011010111101010101111011110011111111100000000000000001110001010101101111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011010111101010101111011110011111111100000000000000001110101010101101111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010110111101010101111011110011111111100000000000000001110001010111101111000000110000000000001000000000111111110101101010100101000111110101010111101111010000000000001000000000110101010110111101010101111011110011111111100000000000000001110101010111101111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011110111101010101111011110011111111100000000000000001110001010100011110001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011110111101010101111011110011111111100000000000000001110101010111101111001010110000000000001000000000111111110100101010100101000111110101010111101111000000000000001000000000110101011110111101010101111011110111111111100000000000000001110101010111101111001010110000000000001000000000111111110100101010100101000111110101010111101111000000000000001000000000110101011110111101010101111011110111111111100000000000000101110101010111101111000010110000000000001000000000111111110100101010100101000111110101010111101111000000000000001000000000110101011110111101010101111011110111111111100000000000000001110101010111101111001010110000000000001000000000111111110110101010100101000111110101010111101111000000000000001000000000110101011110111101010101111011110111111111100000000000000001110101010111101111001010110000000000001000000000111111110110101010100101000111110101010111101111000000000000001000000000110101011110111101010101111011110111111111100000000000000001110101010111101111001010110000000000001000000000111111110110101010100101000111110101010111101111000000000000001000000000110101011110111101010101111011110111111111100000000000000100110101010111101111001010110000000000001000000000111111110100101010100101000111110101010111101111000000000000001000000000110101011110111101010101111011110111111111100000000000000001110101010111101111001010110000000000001000000000111111110100101010100101000111110101010111101111000000000000001000000000110101011110111101010101111011110111111111100000000000000001110101010111101111001010110000000000001000000000111111110100101010100101000111110101010111101111000000000000001000000000110101011110111101010101111011110111111111100000000000000001110101010111101111001010110000000000001000000000111111110100101010100101000111110101010111101111000000000000001000000000110101011110111101010101111011110111111111100000000000000001110001010100011110001010110000000000001000000000111111110100101010100101000111110101010111101111000000000000001000000000110101011110111101010101111011110111111111100000000000000001110101010111101111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010001111001010101111011110011111111100000000000000001110101010111101111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011110111101010101111011110011111111100000000000000001110101010111101111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011110111101010101111011110011111111100000000000000001110101010111101111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011110111101010101111011110011111111100000000000000001110101010111101111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011110111101010101111011110011111111100000000000000001110101010111101111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011110111101010101111011110011111111100000000000000001110101010111101111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011110111101010101111011110011111111100000000000000001110101010111101111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011110111101010101111011110011111111100000000000000001110101010111101111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011110111101010101111011110011111111100000000000000001110101010111101111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011110111101010101111011110011111111100000000000000001110101010111101111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011110111101010101111011110011111111100000000000000001110101010111101111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011110111101010101111011110011111111100000000000000001110101010111101111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011110111101010101111011110011111111100000000000000001110101010111101111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011110111101010101111011110011111111100000000000000001110101010111101111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011110111101010101111011110011111111100000000000000001110101010111101111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011110111101010101111011110011111111100000000000000001110101010111101111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011110111101010101111011110011111111100000000000000001110001010110000001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011110111101010101111011110011111111100000000000000001110101010110000001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011000000101010101111011110011111111100000000000000001110001010101000001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011000000101010101111011110011111111100000000000000001110101010101000001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010100000101010101111011110011111111100000000000000001110001010111000001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010100000101010101111011110011111111100000000000000001110101010111000001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011100000101010101111011110011111111100000000000000001110001010100100001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011100000101010101111011110011111111100000000000000001110101010100100001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010010000101010101111011110011111111100000000000000001110001010110100001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010010000101010101111011110011111111100000000000000001110101010110100001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011010000101010101111011110011111111100000000000000001110001010101100001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011010000101010101111011110011111111100000000000000001110101010101100001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010110000101010101111011110011111111100000000000000001110001010111100001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010110000101010101111011110011111111100000000000000001110101010111100001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011110000101010101111011110011111111100000000000000001110001010100010001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011110000101010101111011110011111111100000000000000001110101010100010001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010001000101010101111011110011111111100000000000000001110001010110010001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010001000101010101111011110011111111100000000000000001110101010110010001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011001000101010101111011110011111111100000000000000001110001010101010001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011001000101010101111011110011111111100000000000000001110101010101010001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010101000101010101111011110011111111100000000000000001110001010111010001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010101000101010101111011110011111111100000000000000001110101010111010001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011101000101010101111011110011111111100000000000000001110001010100110001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011101000101010101111011110011111111100000000000000001110101010100110001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010011000101010101111011110011111111100000000000000001110001010110110001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010011000101010101111011110011111111100000000000000001110101010110110001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011011000101010101111011110011111111100000000000000001110001010101110001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011011000101010101111011110011111111100000000000000001110101010101110001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010111000101010101111011110011111111100000000000000001110001010111110001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010111000101010101111011110011111111100000000000000001110101010111110001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011111000101010101111011110011111111100000000000000001110001010100001001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011111000101010101111011110011111111100000000000000001110101010100001001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010000100101010101111011110011111111100000000000000001110001010110001001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010000100101010101111011110011111111100000000000000001110101010110001001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011000100101010101111011110011111111100000000000000001110001010101001001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011000100101010101111011110011111111100000000000000001110101010101001001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010100100101010101111011110011111111100000000000000001110001010111001001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010100100101010101111011110011111111100000000000000001110101010111001001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011100100101010101111011110011111111100000000000000001110001010100101001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011100100101010101111011110011111111100000000000000001110101010100101001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010010100101010101111011110011111111100000000000000001110001010110101001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010010100101010101111011110011111111100000000000000001110101010110101001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011010100101010101111011110011111111100000000000000001110001010101101001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011010100101010101111011110011111111100000000000000001110101010101101001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010110100101010101111011110011111111100000000000000001110001010111101001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010110100101010101111011110011111111100000000000000001110101010111101001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011110100101010101111011110011111111100000000000000001110001010100011001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011110100101010101111011110011111111100000000000000001110101010100011001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010001100101010101111011110011111111100000000000000001110001010110011001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010001100101010101111011110011111111100000000000000001110101010110011001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011001100101010101111011110011111111100000000000000001110001010101011001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011001100101010101111011110011111111100000000000000001110101010101011001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010101100101010101111011110011111111100000000000000001110001010111011001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010101100101010101111011110011111111100000000000000001110101010111011001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011101100101010101111011110011111111100000000000000001110001010100111001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011101100101010101111011110011111111100000000000000001110101010100111001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010011100101010101111011110011111111100000000000000001110001010110111001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010011100101010101111011110011111111100000000000000001110101010110111001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011011100101010101111011110011111111100000000000000001110001010101111001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011011100101010101111011110011111111100000000000000001110101010101111001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010111100101010101111011110011111111100000000000000001110001010111111001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010111100101010101111011110011111111100000000000000001110101010111111001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011111100101010101111011110011111111100000000000000001110001010100000101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011111100101010101111011110011111111100000000000000001110101010100000101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010000010101010101111011110011111111100000000000000001110001010110000101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010000010101010101111011110011111111100000000000000001110101010110000101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011000010101010101111011110011111111100000000000000001110001010101000101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011000010101010101111011110011111111100000000000000001110101010101000101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010100010101010101111011110011111111100000000000000001110001010111000101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010100010101010101111011110011111111100000000000000001110101010111000101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011100010101010101111011110011111111100000000000000001110001010100100101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011100010101010101111011110011111111100000000000000001110101010100100101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010010010101010101111011110011111111100000000000000001110001010110100101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010010010101010101111011110011111111100000000000000001110101010110100101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011010010101010101111011110011111111100000000000000001110001010101100101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011010010101010101111011110011111111100000000000000001110101010101100101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010110010101010101111011110011111111100000000000000001110001010111100101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010110010101010101111011110011111111100000000000000001110101010111100101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011110010101010101111011110011111111100000000000000001110001010100010101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011110010101010101111011110011111111100 - 11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111T1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 - diff --git a/tools/qt_proj_test5/sdram-test_auto_stripped.stp b/tools/qt_proj_test5/sdram-test_auto_stripped.stp index 5af8f6c..799a21a 100644 --- a/tools/qt_proj_test5/sdram-test_auto_stripped.stp +++ b/tools/qt_proj_test5/sdram-test_auto_stripped.stp @@ -1,10 +1,10 @@ - + - + @@ -69,6 +69,7 @@ + @@ -441,8 +442,8 @@ - - + + @@ -572,28 +573,28 @@ - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + @@ -647,8 +648,8 @@ - - + + @@ -778,28 +779,28 @@ - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + @@ -817,7 +818,7 @@ - + @@ -853,8 +854,8 @@ - - + + @@ -984,28 +985,28 @@ - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + @@ -1023,7 +1024,7 @@ - + @@ -1058,17 +1059,17 @@ - + - 'red_led' == rising edge + 'red_led' == low && 'sdram_controller:sdr_ctrl|address_r[0]' == high && 'sdram_controller:sdr_ctrl|address_r[10]' == low && 'sdram_controller:sdr_ctrl|address_r[11]' == low && 'sdram_controller:sdr_ctrl|address_r[12]' == high && 'sdram_controller:sdr_ctrl|address_r[13]' == high && 'sdram_controller:sdr_ctrl|address_r[14]' == high && 'sdram_controller:sdr_ctrl|address_r[15]' == high && 'sdram_controller:sdr_ctrl|address_r[16]' == low && 'sdram_controller:sdr_ctrl|address_r[17]' == low && 'sdram_controller:sdr_ctrl|address_r[18]' == low && 'sdram_controller:sdr_ctrl|address_r[19]' == low && 'sdram_controller:sdr_ctrl|address_r[1]' == low && 'sdram_controller:sdr_ctrl|address_r[20]' == low && 'sdram_controller:sdr_ctrl|address_r[21]' == low && 'sdram_controller:sdr_ctrl|address_r[2]' == low && 'sdram_controller:sdr_ctrl|address_r[3]' == high && 'sdram_controller:sdr_ctrl|address_r[4]' == high && 'sdram_controller:sdr_ctrl|address_r[5]' == low && 'sdram_controller:sdr_ctrl|address_r[6]' == low && 'sdram_controller:sdr_ctrl|address_r[7]' == high && 'sdram_controller:sdr_ctrl|address_r[8]' == low && 'sdram_controller:sdr_ctrl|address_r[9]' == low - 111111111111110000000000000000000000001111111111111111111111111111111111011111110000000000000000000000000000000010000000000000000000000100000000000000000000000000000000110000000001 - 111111111111110000000000000000000000001111111111111111111111111111111111011111110000000000000000000000000000000010000000000000000000000100000000000000000000000000000000110000000001 + 111111111111110000000000000000000000001111111111111111111111111111111111011111110000000000000000000000000000000010000000000000000000000100000000000000000000000000000000110000000011 + 111111111111110000000000000000000000001111111111111111111111111111111111011111110000000000000000000000000000000010000000000000000000000100000000000000000000000000000000110000000011 @@ -1086,23 +1087,18 @@ - - 000000000000001110110010101111101001010010111111111100000000011001011100100100010100101011111010101010111101111010111111111100000000011101001010111110101010101111011110011111111100000000000000001110010010111111101001010010111111111100000000011110011100100100011100101011111010101010111101111010111111111100000000011111001010111110101010101111011110011111111100000000000000001110110010111111101001010010111111111100000000011010011100100100010100101111111010101010111101111010111111111100000000011101001011111110101010101111011110011111111100000000000000001110010010100000011001010010111111111100000000011100011100100100011100101111111010101010111101111010111111111100000000011111001011111110101010101111011110011111111100000000000000001110110010100000011001010010111111111100000000011000011100100100010100101000000110101010111101111010111111111100000000011101001010000001101010101111011110011111111100000000000000001110010010110000011001010010111111111100000000011111101100100100011100101000000110101010111101111010111111111100000000011111001010000001101010101111011110011111111100000000000000001110110010110000011001010010111111111100000000011011101100100100010100101100000110101010111101111010111111111100000000011101001011000001101010101111011110011111111100000000000000001110010010101000011001010010111111111100000000011101101100100100011100101100000110101010111101111010111111111100000000011111001011000001101010101111011110011111111100000000000000001110110010101000011001010010111111111100000000011001101100100100010100101010000110101010111101111010111111111100000000011101001010100001101010101111011110011111111100000000000000001110010010111000011001010010111111111100000000011110101100100100011100101010000110101010111101111010111111111100000000011111001010100001101010101111011110011111111100000000000000001110110010111000011001010010111111111100000000011010101100100100010100101110000110101010111101111010111111111100000000011101001011100001101010101111011110011111111100000000000000001110010010100100011001010010111111111100000000011100101100100100011100101110000110101010111101111010111111111100000000011111001011100001101010101111011110011111111100000000000000001110110010100100011001010010111111111100000000011000101100100100010100101001000110101010111101111010111111111100000000011101001010010001101010101111011110011111111100000000000000001110010010110100011001010010111111111100000000011111001100100100011100101001000110101010111101111010111111111100000000011111001010010001101010101111011110011111111100000000000000001110110010110100011001010010111111111100000000011011001100100100010100101101000110101010111101111010111111111100000000011101001011010001101010101111011110011111111100000000000000001110010010101100011001010010111111111100000000011101001100100100011100101101000110101010111101111010111111111100000000011111001011010001101010101111011110011111111100000000000000001110110010101100011001010010111111111100000000011001001100100100010100101011000110101010111101111010111111111100000000011101001010110001101010101111011110011111111100000000000000001110010010111100011001010010111111111100000000011110001100100100011100101011000110101010111101111010111111111100000000011111001010110001101010101111011110011111111100000000000000001110110010111100011001010010111111111100000000011010001100100100010100101111000110101010111101111010111111111100000000011101001011110001101010101111011110011111111100000000000000001110010010100010011001010010111111111100000000011100001100100100011100101111000110101010111101111010111111111100000000011111001011110001101010101111011110011111111100000000000000001110110010100010011001010010111111111100000000011000001100100100010100101000100110101010111101111010111111111100000000011101001010001001101010101111011110011111111100000000000000001110010010110010011001010010111111111100000000011111110100100100011100101000100110101010111101111010111111111100000000011111001010001001101010101111011110011111111100000000000000001110110010110010011001010010111111111100000000011011110100100100010100101100100110101010111101111010111111111100000000011101001011001001101010101111011110011111111100000000000000001110010010101010011001010010111111111100000000011101110100100100011100101100100110101010111101111010111111111100000000011111001011001001101010101111011110011111111100000000000000001110110010101010011001010010111111111100000000011001110100100100010100101010100110101010111101111010111111111100000000011101001010101001101010101111011110011111111100000000000000001110010010111010011001010010111111111100000000011110110100100100011100101010100110101010111101111010111111111100000000011111001010101001101010101111011110011111111100000000000000001110110010111010011001010010111111111100000000011010110100100100010100101110100110101010111101111010111111111100000000011101001011101001101010101111011110011111111100000000000000001110010010100110011001010010111111111100000000011100110100100100011100101110100110101010111101111010111111111100000000011111001011101001101010101111011110011111111100000000000000001110110010100110011001010010111111111100000000011000110100100100010100101001100110101010111101111010111111111100000000011101001010011001101010101111011110011111111100000000000000001110010010110110011001010010111111111100000000011111010100100100011100101001100110101010111101111010111111111100000000011111001010011001101010101111011110011111111100000000000000001110110010110110011001010010111111111100000000011011010100100100010100101101100110101010111101111010111111111100000000011101001011011001101010101111011110011111111100000000000000001110010010101110011001010010111111111100000000011101010100100100011100101101100110101010111101111010111111111100000000011111001011011001101010101111011110011111111100000000000000001110110010101110011001010010111111111100000000011001010100100100010100101011100110101010111101111010111111111100000000011101001010111001101010101111011110011111111100000000000000001110010010111110011001010010111111111100000000011110010100100100011100101011100110101010111101111010111111111100000000011111001010111001101010101111011110011111111100000000000000001110110010111110011001010010111111111100000000011010010100100100010100101111100110101010111101111010111111111100000000011101001011111001101010101111011110011111111100000000000000001110010010100001011001010010111111111100000000011100010100100100011100101111100110101010111101111010111111111100000000011111001011111001101010101111011110011111111100000000000000001110110010100001011001010010111111111100000000011000010100100100010100101000010110101010111101111010111111111100000000011101001010000101101010101111011110011111111100000000000000001110010010110001011001010010111111111100000000011111100100100100011100101000010110101010111101111010111111111100000000011111001010000101101010101111011110011111111100000000000000001110110010110001011001010010111111111100000000011011100100100100010100101100010110101010111101111010111111111100000000011101001011000101101010101111011110011111111100000000000000001110010010101001011001010010111111111100000000011101100100100100011100101100010110101010111101111010111111111100000000011111001011000101101010101111011110011111111100000000000000001110110010101001011001010010111111111100000000011001100100100100010100101010010110101010111101111010111111111100000000011101001010100101101010101111011110011111111100000000000000001110010010111001011001010010111111111100000000011110100100100100011100101010010110101010111101111010111111111100000000011111001010100101101010101111011110011111111100000000000000001110110010111001011001010010111111111100000000011010100100100100010100101110010110101010111101111010111111111100000000011101001011100101101010101111011110011111111100000000000000001110010010100101011001010010111111111100000000011100100100100100011100101110010110101010111101111010111111111100000000011111001011100101101010101111011110011111111100000000000000001110110010100101011001010010111111111100000000011000100100100100010100101001010110101010111101111010111111111100000000011101001010010101101010101111011110011111111100000000000000001110010010110101011001010010111111111100000000011111000100100100011100101001010110101010111101111010111111111100000000011111001010010101101010101111011110011111111100000000000000001110110010110101011001010010111111111100000000011011000100100100010100101101010110101010111101111010111111111100000000011101001011010101101010101111011110011111111100000000000000001110010010101101011001010010111111111100000000011101000100100100011100101101010110101010111101111010111111111100000000011111001011010101101010101111011110011111111100000000000000001110110010101101011001010010111111111100000000011001000100100100010100101011010110101010111101111010111111111100000000011101001010110101101010101111011110011111111100000000000000001110010010111101011001010010111111111100000000011110000100100100011100101011010110101010111101111010111111111100000000011111001010110101101010101111011110011111111100000000000000001110110010111101011001010010111111111100000000011010000100100100010100101111010110101010111101111010111111111100000000011101001011110101101010101111011110011111111100000000000000001110010010100011011001010010111111111100000000011100000100100100011100101111010110101010111101111010111111111100000000011111001011110101101010101111011110011111111100000000000000001110110010100011011001010010111111111100000000011000000100100100010100101000110110101010111101111010111111111100000000011101001010001101101010101111011110011111111100000000000000001110010010110011011001010010111111111100000000011111111000100100011100101000110110101010111101111010111111111100000000011111001010001101101010101111011110011111111100000000000000001110110010110011011001010010111111111100000000011011111000100100010100101100110110101010111101111010111111111100000000011101001011001101101010101111011110011111111100000000000000001110010010101011011001010010111111111100000000011101111000100100011100101100110110101010111101111010111111111100000000011111001011001101101010101111011110011111111100000000000000001110110010101011011001010010111111111100000000011001111000100100010100101010110110101010111101111010111111111100000000011101001010101101101010101111011110011111111100000000000000001110010010111011011001010010111111111100000000011110111000100100011100101010110110101010111101111010111111111100000000011111001010101101101010101111011110011111111100000000000000001110110010111011011001010010111111111100000000011010111000100100010100101110110110101010111101111010111111111100000000011101001011101101101010101111011110011111111100000000000000001110010010100111011001010010111111111100000000011100111000100100011100101110110110101010111101111010111111111100000000011111001011101101101010101111011110011111111100000000000000001110110010100111011001010010111111111100000000011000111000100100010100101001110110101010111101111010111111111100000000011101001010011101101010101111011110011111111100000000000000001110010010110111011001010010111111111100000000011111011000100100011100101001110110101010111101111010111111111100000000011111001010011101101010101111011110011111111100000000000000001110110010110111011001010010111111111100000000011011011000100100010100101101110110101010111101111010111111111100000000011101001011011101101010101111011110011111111100000000000000001110010010101111011001010010111111111100000000011101011000100100011100101101110110101010111101111010111111111100000000011111001011011101101010101111011110011111111100000000000000001110110010101111011001010010111111111100000000011001011000100100010100101011110110101010111101111010111111111100000000011101001010111101101010101111011110011111111100000000000000001110010010111111011001010010111111111100000000011110011000100100011100101011110110101010111101111010111111111100000000011111001010111101101010101111011110011111111100000000000000001110110010111111011001010010111111111100000000011010011000100100010100101111110110101010111101111010111111111100000000011101001011111101101010101111011110011111111100000000000000001110010010100000111001010010111111111100000000011100011000100100011100101111110110101010111101111010111111111100000000011111001011111101101010101111011110011111111100000000000000001110110010100000111001010010111111111100000000011000011000100100010100101000001110101010111101111010111111111100000000011101001010000011101010101111011110011111111100000000000000001110010010110000111001010010111111111100000000011111101000100100011100101000001110101010111101111010111111111100000000011111001010000011101010101111011110011111111100000000000000001110110010110000111001010010111111111100000000011011101000100100010100101100001110101010111101111010111111111100000000011101001011000011101010101111011110011111111100000000000000001110010010101000111001010010111111111100000000011101101000100100011100101100001110101010111101111010111111111100000000011111001011000011101010101111011110011111111100000000000000001110110010101000111001010010111111111100000000011001101000100100010100101010001110101010111101111010111111111100000000011101001010100011101010101111011110011111111100000000000000001110010010111000111001010010111111111100000000011110101000100100011100101010001110101010111101111010111111111100000000011111001010100011101010101111011110011111111100000000000000001110110010111000111001010010111111111100000000011010101000100100010100101110001110101010111101111010111111111100000000011101001011100011101010101111011110011111111100000000000000001110010010100100111001010010111111111100000000011100101000100100011100101110001110101010111101111010111111111100000000011111001011100011101010101111011110011111111100000000000000001110110010100100111001010010111111111100000000011000101000100100010100101001001110101010111101111010111111111100000000011101001010010011101010101111011110011111111100000000000000001110010010110100111001010010111111111100000000011111001000100100011100101001001110101010111101111010111111111100000000011111001010010011101010101111011110011111111100000000000000001110110010110100111001010010111111111100000000011011001000100100010100101101001110101010111101111010111111111100000000011101001011010011101010101111011110011111111100000000000000001110010010101100111001010010111111111100000000011101001000100100011100101101001110101010111101111010111111111100000000011111001011010011101010101111011110011111111100000000000000001110110010101100111001010010111111111100000000011001001000100100010100101011001110101010111101111010111111111100000000011101001010110011101010101111011110011111111100000000000000001110010010111100111001010010111111111100000000011110001000100100011100101011001110101010111101111010111111111100000000011111001010110011101010101111011110011111111100000000000000001110110010111100111001010010111111111100000000011010001000100100010100101111001110101010111101111010111111111100000000011101001011110011101010101111011110011111111100000000000000001110010010100010111001010010111111111100000000011100001000100100011100101111001110101010111101111010111111111100000000011111001011110011101010101111011110011111111100000000000000001110110010100010111001010010111111111100000000011000001000100100010100101000101110101010111101111010111111111100000000011101001010001011101010101111011110011111111100000000000000001110010010110010111001010010111111111100000000011111110000100100011100101000101110101010111101111010111111111100000000011111001010001011101010101111011110011111111100000000000000001110110010110010111001010010111111111100000000011011110000100100010100101100101110101010111101111010111111111100000000011101001011001011101010101111011110011111111100000000000000001110010010101010111001010010111111111100000000011101110000100100011100101100101110101010111101111010111111111100000000011111001011001011101010101111011110011111111100000000000000001110110010101010111001010010111111111100000000011001110000100100010100101010101110101010111101111010111111111100000000011101001010101011101010101111011110011111111100000000000000001110010010111010111001010010111111111100000000011110110000100100011100101010101110101010111101111010111111111100000000011111001010101011101010101111011110011111111100000000000000001110110010111010111001010010111111111100000000011010110000100100010100101110101110101010111101111010111111111100000000011101001011101011101010101111011110011111111100000000000000001110010010100110111001010010111111111100000000011100110000100100011100101110101110101010111101111010111111111100000000011111001011101011101010101111011110011111111100000000000000001110110010100110111001010010111111111100000000011000110000100100010100101001101110101010111101111010111111111100000000011101001010011011101010101111011110011111111100000000000000001110010010110110111001010010111111111100000000011111010000100100011100101001101110101010111101111010111111111100000000011111001010011011101010101111011110011111111100000000000000001110110010110110111001010010111111111100000000011011010000100100010100101101101110101010111101111010111111111100000000011101001011011011101010101111011110011111111100000000000000001110010010101110111001010010111111111100000000011101010000100100011100101101101110101010111101111010111111111100000000011111001011011011101010101111011110011111111100000000000000001110110010101110111001010010111111111100000000011001010000100100010100101011101110101010111101111010111111111100000000011101001010111011101010101111011110011111111100000000000000001110010010111110111001010010111111111100000000011110010000100100011100101011101110101010111101111010111111111100000000011111001010111011101010101111011110011111111100000000000000001110110010111110111001010010111111111100000000011010010000100100010100101111101110101010111101111010111111111100000000011101001011111011101010101111011110011111111100000000000000001110010010100001111001010010111111111100000000011100010000100100011100101111101110101010111101111010111111111100000000011111001011111011101010101111011110011111111100000000000000001110110010100001111001010010111111111100000000011000010000100100010100101000011110101010111101111010111111111100000000011101001010000111101010101111011110011111111100000000000000001110010010110001111001010010111111111100000000011111100000100100011100101000011110101010111101111010111111111100000000011111001010000111101010101111011110011111111100000000000000001110110010110001111001010010111111111100000000011011100000100100010100101100011110101010111101111010111111111100000000011101001011000111101010101111011110011111111100000000000000001110010010101001111001010010111111111100000000011101100000100100011100101100011110101010111101111010111111111100000000011111001011000111101010101111011110011111111100000000000000001110110010101001111001010010111111111100000000011001100000100100010100101010011110101010111101111010111111111100000000011101001010100111101010101111011110011111111100000000000000001110010010111001111001010010111111111100000000011110100000100100011100101010011110101010111101111010111111111100000000011111001010100111101010101111011110011111111100000000000000001110110010111001111001010010111111111100000000011010100000100100010100101110011110101010111101111010111111111100000000011101001011100111101010101111011110011111111100000000000000001110010010100101111001010010111111111100000000011100100000100100011100101110011110101010111101111010111111111100000000011111001011100111101010101111011110011111111100000000000000001110110010100101111001010010111111111100000000011000100000100100010100101001011110101010111101111010111111111100000000011101001010010111101010101111011110011111111100000000000000001110010010110101111001010010111111111100000000011111000000100100011100101001011110101010111101111010111111111100000000011111001010010111101010101111011110011111111100000000000000001110110010110101111001010010111111111100000000011011000000100100010100101101011110101010111101111010111111111100000000011101001011010111101010101111011110011111111100000000000000001110010010101101111001010010111111111100000000011101000000100100011100101101011110101010111101111010111111111100000000011111001011010111101010101111011110011111111100000000000000001110110010101101111001010010111111111100000000011001000000100100010100101011011110101010111101111010111111111100000000011101001010110111101010101111011110011111111100000000000000001110010010111101111000000010111111111100000000011110000000101100011100101011011110101010111101111010111111111100000000011111001010110111101010101111011110011111111100000000000000001110110010111101111001010010111111111100000000011010000000100100010100101111011110101010111101111010111111111100000000011101001011110111101010101111011110011111111100000000000000001110010010100011110001010010111111111100000000011100000000100100011100101111011110101010111101111010000000000001000000000111001011110111101010101111011110011111111100000000000000001110110010100011110001010010111111111100000000011000000001100100010100101000111110101010111101111000000000000001000000000111001011110111101010101111011110111111111100000000000000001110110010100011110001010010000000000001000000000000000001100100010100101000111110101010111101111000000000000001000000000111001011110111101010101111011110111111111100000000000000101110110010100011110000010010000000000001000000000000000001100100010100101000111110101010111101111000000000000001000000000111001011110111101010101111011110111111111100000000000000001110110010100011110001010010000000000001000000000000000001110100010100101000111110101010111101111000000000000001000000000111001011110111101010101111011110111111111100000000000000001110110010100011110001010010000000000001000000000000000001110100010100101000111110101010111101111000000000000001000000000111001011110111101010101111011110111111111100000000000000001110110010100011110001010010000000000001000000000000000001110100010100101000111110101010111101111000000000000001000000000111001011110111101010101111011110111111111100000000000000100110110010100011110001010010000000000001000000000000000001100100010100101000111110101010111101111000000000000001000000000111001011110111101010101111011110111111111100000000000000001110110010100011110001010010000000000001000000000000000001100100010100101000111110101010111101111000000000000001000000000111001011110111101010101111011110111111111100000000000000001110110010100011110001010010000000000001000000000000000001100100010100101000111110101010111101111000000000000001000000000111001011110111101010101111011110111111111100000000000000001110110010100011110001010010000000000001000000000000000001100100010100101000111110101010111101111000000000000001000000000111001011110111101010101111011110111111111100000000000000001110001010100011110001010010000000000001000000000000000001100100010100101000111110101010111101111000000000000001000000000111001011110111101010101111011110111111111100000000000000001110101010111101111001010010000000000001000000000000000001100100010100101000111110101010111101111010000000000001000000000100101010001111001010101111011110011111111100000000000000001110101010111101111001010110000000000001000000000111111110100100010100101000111110101010111101111010000000000001000000000110101011110111101010101111011110011111111100000000000000001110101010111101111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011110111101010101111011110011111111100000000000000001110101010111101111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011110111101010101111011110011111111100000000000000001110101010111101111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011110111101010101111011110011111111100000000000000001110101010111101111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011110111101010101111011110011111111100000000000000001110101010111101111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011110111101010101111011110011111111100000000000000001110101010111101111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011110111101010101111011110011111111100000000000000001110101010111101111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011110111101010101111011110011111111100000000000000001110101010111101111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011110111101010101111011110011111111100000000000000001110101010111101111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011110111101010101111011110011111111100000000000000001110101010111101111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011110111101010101111011110011111111100000000000000001110101010111101111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011110111101010101111011110011111111100000000000000001110101010111101111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011110111101010101111011110011111111100000000000000001110101010111101111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011110111101010101111011110011111111100000000000000001110101010111101111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011110111101010101111011110011111111100000000000000001110101010111101111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011110111101010101111011110011111111100000000000000001110001010110000001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011110111101010101111011110011111111100000000000000001110101010110000001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011000000101010101111011110011111111100000000000000001110001010101000001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011000000101010101111011110011111111100000000000000001110101010101000001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010100000101010101111011110011111111100000000000000001110001010111000001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010100000101010101111011110011111111100000000000000001110101010111000001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011100000101010101111011110011111111100000000000000001110001010100100001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011100000101010101111011110011111111100000000000000001110101010100100001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010010000101010101111011110011111111100000000000000001110001010110100001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010010000101010101111011110011111111100000000000000001110101010110100001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011010000101010101111011110011111111100000000000000001110001010101100001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011010000101010101111011110011111111100000000000000001110101010101100001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010110000101010101111011110011111111100000000000000001110001010111100001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010110000101010101111011110011111111100000000000000001110101010111100001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011110000101010101111011110011111111100000000000000001110001010100010001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011110000101010101111011110011111111100000000000000001110101010100010001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010001000101010101111011110011111111100000000000000001110001010110010001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010001000101010101111011110011111111100000000000000001110101010110010001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011001000101010101111011110011111111100000000000000001110001010101010001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011001000101010101111011110011111111100000000000000001110101010101010001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010101000101010101111011110011111111100000000000000001110001010111010001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010101000101010101111011110011111111100000000000000001110101010111010001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011101000101010101111011110011111111100000000000000001110001010100110001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011101000101010101111011110011111111100000000000000001110101010100110001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010011000101010101111011110011111111100000000000000001110001010110110001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010011000101010101111011110011111111100000000000000001110101010110110001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011011000101010101111011110011111111100000000000000001110001010101110001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011011000101010101111011110011111111100000000000000001110101010101110001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010111000101010101111011110011111111100000000000000001110001010111110001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010111000101010101111011110011111111100000000000000001110101010111110001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011111000101010101111011110011111111100000000000000001110001010100001001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011111000101010101111011110011111111100000000000000001110101010100001001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010000100101010101111011110011111111100000000000000001110001010110001001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010000100101010101111011110011111111100000000000000001110101010110001001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011000100101010101111011110011111111100000000000000001110001010101001001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011000100101010101111011110011111111100000000000000001110101010101001001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010100100101010101111011110011111111100000000000000001110001010111001001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010100100101010101111011110011111111100000000000000001110101010111001001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011100100101010101111011110011111111100000000000000001110001010100101001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011100100101010101111011110011111111100000000000000001110101010100101001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010010100101010101111011110011111111100000000000000001110001010110101001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010010100101010101111011110011111111100000000000000001110101010110101001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011010100101010101111011110011111111100000000000000001110001010101101001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011010100101010101111011110011111111100000000000000001110101010101101001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010110100101010101111011110011111111100000000000000001110001010111101001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010110100101010101111011110011111111100000000000000001110101010111101001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011110100101010101111011110011111111100000000000000001110001010100011001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011110100101010101111011110011111111100000000000000001110101010100011001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010001100101010101111011110011111111100000000000000001110001010110011001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010001100101010101111011110011111111100000000000000001110101010110011001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011001100101010101111011110011111111100000000000000001110001010101011001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011001100101010101111011110011111111100000000000000001110101010101011001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010101100101010101111011110011111111100000000000000001110001010111011001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010101100101010101111011110011111111100000000000000001110101010111011001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011101100101010101111011110011111111100000000000000001110001010100111001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011101100101010101111011110011111111100000000000000001110101010100111001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010011100101010101111011110011111111100000000000000001110001010110111001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010011100101010101111011110011111111100000000000000001110101010110111001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011011100101010101111011110011111111100000000000000001110001010101111001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011011100101010101111011110011111111100000000000000001110101010101111001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010111100101010101111011110011111111100000000000000001110001010111111001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010111100101010101111011110011111111100000000000000001110101010111111001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011111100101010101111011110011111111100000000000000001110001010100000101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011111100101010101111011110011111111100000000000000001110101010100000101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010000010101010101111011110011111111100000000000000001110001010110000101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010000010101010101111011110011111111100000000000000001110101010110000101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011000010101010101111011110011111111100000000000000001110001010101000101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011000010101010101111011110011111111100000000000000001110101010101000101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010100010101010101111011110011111111100000000000000001110001010111000101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010100010101010101111011110011111111100000000000000001110101010111000101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011100010101010101111011110011111111100000000000000001110001010100100101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011100010101010101111011110011111111100000000000000001110101010100100101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010010010101010101111011110011111111100000000000000001110001010110100101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010010010101010101111011110011111111100000000000000001110101010110100101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011010010101010101111011110011111111100000000000000001110001010101100101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011010010101010101111011110011111111100000000000000001110101010101100101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010110010101010101111011110011111111100000000000000001110001010111100101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010110010101010101111011110011111111100000000000000001110101010111100101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011110010101010101111011110011111111100000000000000001110001010100010101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011110010101010101111011110011111111100000000000000001110101010100010101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010001010101010101111011110011111111100000000000000001110001010110010101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010001010101010101111011110011111111100000000000000001110101010110010101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011001010101010101111011110011111111100000000000000001110001010101010101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011001010101010101111011110011111111100000000000000001110101010101010101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010101010101010101111011110011111111100000000000000001110001010111010101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010101010101010101111011110011111111100000000000000001110101010111010101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011101010101010101111011110011111111100000000000000001110001010100110101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011101010101010101111011110011111111100000000000000001110101010100110101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010011010101010101111011110011111111100000000000000001110001010110110101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010011010101010101111011110011111111100000000000000001110101010110110101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011011010101010101111011110011111111100000000000000001110001010101110101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011011010101010101111011110011111111100000000000000001110101010101110101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010111010101010101111011110011111111100000000000000001110001010111110101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010111010101010101111011110011111111100000000000000001110101010111110101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011111010101010101111011110011111111100000000000000001110001010100001101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011111010101010101111011110011111111100000000000000001110101010100001101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010000110101010101111011110011111111100000000000000001110001010110001101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010000110101010101111011110011111111100000000000000001110101010110001101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011000110101010101111011110011111111100000000000000001110001010101001101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011000110101010101111011110011111111100000000000000001110101010101001101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010100110101010101111011110011111111100000000000000001110001010111001101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010100110101010101111011110011111111100000000000000001110101010111001101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011100110101010101111011110011111111100000000000000001110001010100101101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011100110101010101111011110011111111100000000000000001110101010100101101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010010110101010101111011110011111111100000000000000001110001010110101101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010010110101010101111011110011111111100000000000000001110101010110101101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011010110101010101111011110011111111100000000000000001110001010101101101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011010110101010101111011110011111111100000000000000001110101010101101101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010110110101010101111011110011111111100000000000000001110001010111101101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010110110101010101111011110011111111100000000000000001110101010111101101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011110110101010101111011110011111111100000000000000001110001010100011101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011110110101010101111011110011111111100000000000000001110101010100011101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010001110101010101111011110011111111100000000000000001110001010110011101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010001110101010101111011110011111111100000000000000001110101010110011101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011001110101010101111011110011111111100000000000000001110001010101011101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011001110101010101111011110011111111100000000000000001110101010101011101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010101110101010101111011110011111111100000000000000001110001010111011101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010101110101010101111011110011111111100000000000000001110101010111011101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011101110101010101111011110011111111100000000000000001110001010100111101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011101110101010101111011110011111111100000000000000001110101010100111101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010011110101010101111011110011111111100000000000000001110001010110111101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010011110101010101111011110011111111100000000000000001110101010110111101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011011110101010101111011110011111111100000000000000001110001010101111101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011011110101010101111011110011111111100000000000000001110101010101111101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010111110101010101111011110011111111100000000000000001110001010111111101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010111110101010101111011110011111111100000000000000001110101010111111101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011111110101010101111011110011111111100000000000000001110001010100000011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011111110101010101111011110011111111100000000000000001110101010100000011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010000001101010101111011110011111111100000000000000001110001010110000011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010000001101010101111011110011111111100000000000000001110101010110000011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011000001101010101111011110011111111100000000000000001110001010101000011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011000001101010101111011110011111111100000000000000001110101010101000011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010100001101010101111011110011111111100000000000000001110001010111000011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010100001101010101111011110011111111100000000000000001110101010111000011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011100001101010101111011110011111111100000000000000001110001010100100011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011100001101010101111011110011111111100000000000000001110101010100100011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010010001101010101111011110011111111100000000000000001110001010110100011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010010001101010101111011110011111111100000000000000001110101010110100011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011010001101010101111011110011111111100000000000000001110001010101100011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011010001101010101111011110011111111100000000000000001110101010101100011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010110001101010101111011110011111111100000000000000001110001010111100011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010110001101010101111011110011111111100000000000000001110101010111100011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011110001101010101111011110011111111100000000000000001110001010100010011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011110001101010101111011110011111111100000000000000001110101010100010011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010001001101010101111011110011111111100000000000000001110001010110010011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010001001101010101111011110011111111100000000000000001110101010110010011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011001001101010101111011110011111111100000000000000001110001010101010011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011001001101010101111011110011111111100000000000000001110101010101010011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010101001101010101111011110011111111100000000000000001110001010111010011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010101001101010101111011110011111111100000000000000001110101010111010011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011101001101010101111011110011111111100000000000000001110001010100110011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011101001101010101111011110011111111100000000000000001110101010100110011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010011001101010101111011110011111111100000000000000001110001010110110011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010011001101010101111011110011111111100000000000000001110101010110110011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011011001101010101111011110011111111100000000000000001110001010101110011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011011001101010101111011110011111111100000000000000001110101010101110011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010111001101010101111011110011111111100000000000000001110001010111110011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010111001101010101111011110011111111100000000000000001110101010111110011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011111001101010101111011110011111111100000000000000001110001010100001011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011111001101010101111011110011111111100000000000000001110101010100001011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010000101101010101111011110011111111100000000000000001110001010110001011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010000101101010101111011110011111111100000000000000001110101010110001011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011000101101010101111011110011111111100000000000000001110001010101001011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011000101101010101111011110011111111100000000000000001110101010101001011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010100101101010101111011110011111111100000000000000001110001010111001011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010100101101010101111011110011111111100000000000000001110101010111001011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011100101101010101111011110011111111100000000000000001110001010100101011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011100101101010101111011110011111111100000000000000001110101010100101011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010010101101010101111011110011111111100000000000000001110001010110101011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010010101101010101111011110011111111100000000000000001110101010110101011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011010101101010101111011110011111111100000000000000001110001010101101011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011010101101010101111011110011111111100000000000000001110101010101101011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010110101101010101111011110011111111100000000000000001110001010111101011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010110101101010101111011110011111111100000000000000001110101010111101011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011110101101010101111011110011111111100000000000000001110001010100011011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011110101101010101111011110011111111100000000000000001110101010100011011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010001101101010101111011110011111111100000000000000001110001010110011011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010001101101010101111011110011111111100000000000000001110101010110011011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011001101101010101111011110011111111100000000000000001110001010101011011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011001101101010101111011110011111111100000000000000001110101010101011011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010101101101010101111011110011111111100000000000000001110001010111011011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010101101101010101111011110011111111100000000000000001110101010111011011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011101101101010101111011110011111111100000000000000001110001010100111011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011101101101010101111011110011111111100000000000000001110101010100111011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010011101101010101111011110011111111100000000000000001110001010110111011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010011101101010101111011110011111111100000000000000001110101010110111011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011011101101010101111011110011111111100000000000000001110001010101111011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011011101101010101111011110011111111100000000000000001110101010101111011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010111101101010101111011110011111111100000000000000001110001010111111011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010111101101010101111011110011111111100000000000000001110101010111111011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011111101101010101111011110011111111100000000000000001110001010100000111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011111101101010101111011110011111111100000000000000001110101010100000111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010000011101010101111011110011111111100000000000000001110001010110000111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010000011101010101111011110011111111100000000000000001110101010110000111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011000011101010101111011110011111111100000000000000001110001010101000111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011000011101010101111011110011111111100000000000000001110101010101000111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010100011101010101111011110011111111100000000000000001110001010111000111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010100011101010101111011110011111111100000000000000001110101010111000111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011100011101010101111011110011111111100000000000000001110001010100100111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011100011101010101111011110011111111100000000000000001110101010100100111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010010011101010101111011110011111111100000000000000001110001010110100111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010010011101010101111011110011111111100000000000000001110101010110100111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011010011101010101111011110011111111100000000000000001110001010101100111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011010011101010101111011110011111111100000000000000001110101010101100111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010110011101010101111011110011111111100000000000000001110001010111100111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010110011101010101111011110011111111100000000000000001110101010111100111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011110011101010101111011110011111111100000000000000001110001010100010111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011110011101010101111011110011111111100000000000000001110101010100010111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010001011101010101111011110011111111100000000000000001110001010110010111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010001011101010101111011110011111111100000000000000001110101010110010111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011001011101010101111011110011111111100000000000000001110001010101010111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011001011101010101111011110011111111100000000000000001110101010101010111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010101011101010101111011110011111111100000000000000001110001010111010111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010101011101010101111011110011111111100000000000000001110101010111010111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011101011101010101111011110011111111100000000000000001110001010100110111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011101011101010101111011110011111111100000000000000001110101010100110111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010011011101010101111011110011111111100000000000000001110001010110110111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010011011101010101111011110011111111100000000000000001110101010110110111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011011011101010101111011110011111111100000000000000001110001010101110111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011011011101010101111011110011111111100000000000000001110101010101110111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010111011101010101111011110011111111100000000000000001110001010111110111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010111011101010101111011110011111111100000000000000001110101010111110111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011111011101010101111011110011111111100000000000000001110001010100001111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011111011101010101111011110011111111100000000000000001110101010100001111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010000111101010101111011110011111111100000000000000001110001010110001111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010000111101010101111011110011111111100000000000000001110101010110001111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011000111101010101111011110011111111100000000000000001110001010101001111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011000111101010101111011110011111111100000000000000001110101010101001111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010100111101010101111011110011111111100000000000000001110001010111001111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010100111101010101111011110011111111100000000000000001110101010111001111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011100111101010101111011110011111111100000000000000001110001010100101111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011100111101010101111011110011111111100000000000000001110101010100101111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010010111101010101111011110011111111100000000000000001110001010110101111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010010111101010101111011110011111111100000000000000001110101010110101111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011010111101010101111011110011111111100000000000000001110001010101101111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011010111101010101111011110011111111100000000000000001110101010101101111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010110111101010101111011110011111111100000000000000001110001010111101111000000110000000000001000000000111111110101101010100101000111110101010111101111010000000000001000000000110101010110111101010101111011110011111111100000000000000001110101010111101111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011110111101010101111011110011111111100000000000000001110001010100011110001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011110111101010101111011110011111111100000000000000001110101010111101111001010110000000000001000000000111111110100101010100101000111110101010111101111000000000000001000000000110101011110111101010101111011110111111111100000000000000001110101010111101111001010110000000000001000000000111111110100101010100101000111110101010111101111000000000000001000000000110101011110111101010101111011110111111111100000000000000101110101010111101111000010110000000000001000000000111111110100101010100101000111110101010111101111000000000000001000000000110101011110111101010101111011110111111111100000000000000001110101010111101111001010110000000000001000000000111111110110101010100101000111110101010111101111000000000000001000000000110101011110111101010101111011110111111111100000000000000001110101010111101111001010110000000000001000000000111111110110101010100101000111110101010111101111000000000000001000000000110101011110111101010101111011110111111111100000000000000001110101010111101111001010110000000000001000000000111111110110101010100101000111110101010111101111000000000000001000000000110101011110111101010101111011110111111111100000000000000100110101010111101111001010110000000000001000000000111111110100101010100101000111110101010111101111000000000000001000000000110101011110111101010101111011110111111111100000000000000001110101010111101111001010110000000000001000000000111111110100101010100101000111110101010111101111000000000000001000000000110101011110111101010101111011110111111111100000000000000001110101010111101111001010110000000000001000000000111111110100101010100101000111110101010111101111000000000000001000000000110101011110111101010101111011110111111111100000000000000001110101010111101111001010110000000000001000000000111111110100101010100101000111110101010111101111000000000000001000000000110101011110111101010101111011110111111111100000000000000001110001010100011110001010110000000000001000000000111111110100101010100101000111110101010111101111000000000000001000000000110101011110111101010101111011110111111111100000000000000001110101010111101111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010001111001010101111011110011111111100000000000000001110101010111101111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011110111101010101111011110011111111100000000000000001110101010111101111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011110111101010101111011110011111111100000000000000001110101010111101111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011110111101010101111011110011111111100000000000000001110101010111101111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011110111101010101111011110011111111100000000000000001110101010111101111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011110111101010101111011110011111111100000000000000001110101010111101111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011110111101010101111011110011111111100000000000000001110101010111101111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011110111101010101111011110011111111100000000000000001110101010111101111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011110111101010101111011110011111111100000000000000001110101010111101111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011110111101010101111011110011111111100000000000000001110101010111101111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011110111101010101111011110011111111100000000000000001110101010111101111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011110111101010101111011110011111111100000000000000001110101010111101111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011110111101010101111011110011111111100000000000000001110101010111101111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011110111101010101111011110011111111100000000000000001110101010111101111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011110111101010101111011110011111111100000000000000001110101010111101111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011110111101010101111011110011111111100000000000000001110101010111101111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011110111101010101111011110011111111100000000000000001110001010110000001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011110111101010101111011110011111111100000000000000001110101010110000001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011000000101010101111011110011111111100000000000000001110001010101000001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011000000101010101111011110011111111100000000000000001110101010101000001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010100000101010101111011110011111111100000000000000001110001010111000001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010100000101010101111011110011111111100000000000000001110101010111000001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011100000101010101111011110011111111100000000000000001110001010100100001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011100000101010101111011110011111111100000000000000001110101010100100001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010010000101010101111011110011111111100000000000000001110001010110100001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010010000101010101111011110011111111100000000000000001110101010110100001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011010000101010101111011110011111111100000000000000001110001010101100001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011010000101010101111011110011111111100000000000000001110101010101100001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010110000101010101111011110011111111100000000000000001110001010111100001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010110000101010101111011110011111111100000000000000001110101010111100001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011110000101010101111011110011111111100000000000000001110001010100010001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011110000101010101111011110011111111100000000000000001110101010100010001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010001000101010101111011110011111111100000000000000001110001010110010001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010001000101010101111011110011111111100000000000000001110101010110010001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011001000101010101111011110011111111100000000000000001110001010101010001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011001000101010101111011110011111111100000000000000001110101010101010001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010101000101010101111011110011111111100000000000000001110001010111010001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010101000101010101111011110011111111100000000000000001110101010111010001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011101000101010101111011110011111111100000000000000001110001010100110001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011101000101010101111011110011111111100000000000000001110101010100110001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010011000101010101111011110011111111100000000000000001110001010110110001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010011000101010101111011110011111111100000000000000001110101010110110001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011011000101010101111011110011111111100000000000000001110001010101110001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011011000101010101111011110011111111100000000000000001110101010101110001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010111000101010101111011110011111111100000000000000001110001010111110001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010111000101010101111011110011111111100000000000000001110101010111110001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011111000101010101111011110011111111100000000000000001110001010100001001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011111000101010101111011110011111111100000000000000001110101010100001001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010000100101010101111011110011111111100000000000000001110001010110001001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010000100101010101111011110011111111100000000000000001110101010110001001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011000100101010101111011110011111111100000000000000001110001010101001001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011000100101010101111011110011111111100000000000000001110101010101001001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010100100101010101111011110011111111100000000000000001110001010111001001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010100100101010101111011110011111111100000000000000001110101010111001001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011100100101010101111011110011111111100000000000000001110001010100101001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011100100101010101111011110011111111100000000000000001110101010100101001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010010100101010101111011110011111111100000000000000001110001010110101001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010010100101010101111011110011111111100000000000000001110101010110101001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011010100101010101111011110011111111100000000000000001110001010101101001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011010100101010101111011110011111111100000000000000001110101010101101001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010110100101010101111011110011111111100000000000000001110001010111101001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010110100101010101111011110011111111100000000000000001110101010111101001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011110100101010101111011110011111111100000000000000001110001010100011001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011110100101010101111011110011111111100000000000000001110101010100011001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010001100101010101111011110011111111100000000000000001110001010110011001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010001100101010101111011110011111111100000000000000001110101010110011001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011001100101010101111011110011111111100000000000000001110001010101011001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011001100101010101111011110011111111100000000000000001110101010101011001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010101100101010101111011110011111111100000000000000001110001010111011001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010101100101010101111011110011111111100000000000000001110101010111011001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011101100101010101111011110011111111100000000000000001110001010100111001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011101100101010101111011110011111111100000000000000001110101010100111001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010011100101010101111011110011111111100000000000000001110001010110111001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010011100101010101111011110011111111100000000000000001110101010110111001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011011100101010101111011110011111111100000000000000001110001010101111001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011011100101010101111011110011111111100000000000000001110101010101111001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010111100101010101111011110011111111100000000000000001110001010111111001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010111100101010101111011110011111111100000000000000001110101010111111001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011111100101010101111011110011111111100000000000000001110001010100000101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011111100101010101111011110011111111100000000000000001110101010100000101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010000010101010101111011110011111111100000000000000001110001010110000101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010000010101010101111011110011111111100000000000000001110101010110000101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011000010101010101111011110011111111100000000000000001110001010101000101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011000010101010101111011110011111111100000000000000001110101010101000101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010100010101010101111011110011111111100000000000000001110001010111000101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010100010101010101111011110011111111100000000000000001110101010111000101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011100010101010101111011110011111111100000000000000001110001010100100101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011100010101010101111011110011111111100000000000000001110101010100100101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010010010101010101111011110011111111100000000000000001110001010110100101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010010010101010101111011110011111111100000000000000001110101010110100101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011010010101010101111011110011111111100000000000000001110001010101100101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011010010101010101111011110011111111100000000000000001110101010101100101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010110010101010101111011110011111111100000000000000001110001010111100101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010110010101010101111011110011111111100000000000000001110101010111100101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011110010101010101111011110011111111100000000000000001110001010100010101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011110010101010101111011110011111111100000000000000001110101010100010101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010001010101010101111011110011111111100000000000000001110001010110010101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010001010101010101111011110011111111100000000000000001110101010110010101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011001010101010101111011110011111111100000000000000001110001010101010101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011001010101010101111011110011111111100000000000000001110101010101010101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010101010101010101111011110011111111100000000000000001110001010111010101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010101010101010101111011110011111111100000000000000001110101010111010101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011101010101010101111011110011111111100000000000000001110001010100110101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011101010101010101111011110011111111100000000000000001110101010100110101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010011010101010101111011110011111111100000000000000001110001010110110101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010011010101010101111011110011111111100000000000000001110101010110110101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011011010101010101111011110011111111100000000000000001110001010101110101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011011010101010101111011110011111111100000000000000001110101010101110101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010111010101010101111011110011111111100000000000000001110001010111110101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010111010101010101111011110011111111100000000000000001110101010111110101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011111010101010101111011110011111111100000000000000001110001010100001101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011111010101010101111011110011111111100000000000000001110101010100001101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010000110101010101111011110011111111100000000000000001110001010110001101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010000110101010101111011110011111111100000000000000001110101010110001101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011000110101010101111011110011111111100000000000000001110001010101001101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011000110101010101111011110011111111100000000000000001110101010101001101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010100110101010101111011110011111111100000000000000001110001010111001101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010100110101010101111011110011111111100000000000000001110101010111001101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011100110101010101111011110011111111100000000000000001110001010100101101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011100110101010101111011110011111111100000000000000001110101010100101101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010010110101010101111011110011111111100000000000000001110001010110101101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010010110101010101111011110011111111100000000000000001110101010110101101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011010110101010101111011110011111111100000000000000001110001010101101101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011010110101010101111011110011111111100000000000000001110101010101101101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010110110101010101111011110011111111100000000000000001110001010111101101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010110110101010101111011110011111111100000000000000001110101010111101101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011110110101010101111011110011111111100000000000000001110001010100011101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011110110101010101111011110011111111100000000000000001110101010100011101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010001110101010101111011110011111111100000000000000001110001010110011101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010001110101010101111011110011111111100000000000000001110101010110011101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011001110101010101111011110011111111100000000000000001110001010101011101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011001110101010101111011110011111111100000000000000001110101010101011101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010101110101010101111011110011111111100000000000000001110001010111011101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010101110101010101111011110011111111100000000000000001110101010111011101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011101110101010101111011110011111111100000000000000001110001010100111101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011101110101010101111011110011111111100000000000000001110101010100111101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010011110101010101111011110011111111100000000000000001110001010110111101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010011110101010101111011110011111111100000000000000001110101010110111101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011011110101010101111011110011111111100000000000000001110001010101111101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011011110101010101111011110011111111100000000000000001110101010101111101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010111110101010101111011110011111111100000000000000001110001010111111101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010111110101010101111011110011111111100000000000000001110101010111111101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011111110101010101111011110011111111100000000000000001110001010100000011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011111110101010101111011110011111111100000000000000001110101010100000011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010000001101010101111011110011111111100000000000000001110001010110000011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010000001101010101111011110011111111100000000000000001110101010110000011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011000001101010101111011110011111111100000000000000001110001010101000011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011000001101010101111011110011111111100000000000000001110101010101000011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010100001101010101111011110011111111100000000000000001110001010111000011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010100001101010101111011110011111111100000000000000001110101010111000011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011100001101010101111011110011111111100000000000000001110001010100100011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011100001101010101111011110011111111100000000000000001110101010100100011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010010001101010101111011110011111111100000000000000001110001010110100011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010010001101010101111011110011111111100000000000000001110101010110100011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011010001101010101111011110011111111100000000000000001110001010101100011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011010001101010101111011110011111111100000000000000001110101010101100011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010110001101010101111011110011111111100000000000000001110001010111100011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010110001101010101111011110011111111100000000000000001110101010111100011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011110001101010101111011110011111111100000000000000001110001010100010011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011110001101010101111011110011111111100000000000000001110101010100010011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010001001101010101111011110011111111100000000000000001110001010110010011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010001001101010101111011110011111111100000000000000001110101010110010011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011001001101010101111011110011111111100000000000000001110001010101010011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011001001101010101111011110011111111100000000000000001110101010101010011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010101001101010101111011110011111111100000000000000001110001010111010011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010101001101010101111011110011111111100000000000000001110101010111010011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011101001101010101111011110011111111100000000000000001110001010100110011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011101001101010101111011110011111111100000000000000001110101010100110011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010011001101010101111011110011111111100000000000000001110001010110110011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010011001101010101111011110011111111100000000000000001110101010110110011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011011001101010101111011110011111111100000000000000001110001010101110011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011011001101010101111011110011111111100000000000000001110101010101110011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010111001101010101111011110011111111100000000000000001110001010111110011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010111001101010101111011110011111111100000000000000001110101010111110011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011111001101010101111011110011111111100000000000000001110001010100001011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011111001101010101111011110011111111100000000000000001110101010100001011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010000101101010101111011110011111111100000000000000001110001010110001011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010000101101010101111011110011111111100000000000000001110101010110001011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011000101101010101111011110011111111100000000000000001110001010101001011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011000101101010101111011110011111111100000000000000001110101010101001011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010100101101010101111011110011111111100000000000000001110001010111001011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010100101101010101111011110011111111100000000000000001110101010111001011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011100101101010101111011110011111111100000000000000001110001010100101011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011100101101010101111011110011111111100000000000000001110101010100101011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010010101101010101111011110011111111100000000000000001110001010110101011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010010101101010101111011110011111111100000000000000001110101010110101011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011010101101010101111011110011111111100000000000000001110001010101101011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011010101101010101111011110011111111100000000000000001110101010101101011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010110101101010101111011110011111111100000000000000001110001010111101011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010110101101010101111011110011111111100000000000000001110101010111101011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011110101101010101111011110011111111100000000000000001110001010100011011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011110101101010101111011110011111111100000000000000001110101010100011011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010001101101010101111011110011111111100000000000000001110001010110011011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010001101101010101111011110011111111100000000000000001110101010110011011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011001101101010101111011110011111111100000000000000001110001010101011011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011001101101010101111011110011111111100000000000000001110101010101011011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010101101101010101111011110011111111100000000000000001110001010111011011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010101101101010101111011110011111111100000000000000001110101010111011011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011101101101010101111011110011111111100000000000000001110001010100111011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011101101101010101111011110011111111100000000000000001110101010100111011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010011101101010101111011110011111111100000000000000001110001010110111011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010011101101010101111011110011111111100000000000000001110101010110111011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011011101101010101111011110011111111100000000000000001110001010101111011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011011101101010101111011110011111111100000000000000001110101010101111011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010111101101010101111011110011111111100000000000000001110001010111111011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010111101101010101111011110011111111100000000000000001110101010111111011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011111101101010101111011110011111111100000000000000001110001010100000111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011111101101010101111011110011111111100000000000000001110101010100000111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010000011101010101111011110011111111100000000000000001110001010110000111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010000011101010101111011110011111111100000000000000001110101010110000111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011000011101010101111011110011111111100000000000000001110001010101000111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011000011101010101111011110011111111100000000000000001110101010101000111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010100011101010101111011110011111111100000000000000001110001010111000111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010100011101010101111011110011111111100000000000000001110101010111000111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011100011101010101111011110011111111100000000000000001110001010100100111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011100011101010101111011110011111111100000000000000001110101010100100111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010010011101010101111011110011111111100000000000000001110001010110100111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010010011101010101111011110011111111100000000000000001110101010110100111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011010011101010101111011110011111111100000000000000001110001010101100111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011010011101010101111011110011111111100000000000000001110101010101100111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010110011101010101111011110011111111100000000000000001110001010111100111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010110011101010101111011110011111111100000000000000001110101010111100111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011110011101010101111011110011111111100000000000000001110001010100010111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011110011101010101111011110011111111100000000000000001110101010100010111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010001011101010101111011110011111111100000000000000001110001010110010111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010001011101010101111011110011111111100000000000000001110101010110010111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011001011101010101111011110011111111100000000000000001110001010101010111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011001011101010101111011110011111111100000000000000001110101010101010111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010101011101010101111011110011111111100000000000000001110001010111010111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010101011101010101111011110011111111100000000000000001110101010111010111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011101011101010101111011110011111111100000000000000001110001010100110111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011101011101010101111011110011111111100000000000000001110101010100110111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010011011101010101111011110011111111100000000000000001110001010110110111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010011011101010101111011110011111111100000000000000001110101010110110111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011011011101010101111011110011111111100000000000000001110001010101110111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011011011101010101111011110011111111100000000000000001110101010101110111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010111011101010101111011110011111111100000000000000001110001010111110111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010111011101010101111011110011111111100000000000000001110101010111110111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011111011101010101111011110011111111100000000000000001110001010100001111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011111011101010101111011110011111111100000000000000001110101010100001111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010000111101010101111011110011111111100000000000000001110001010110001111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010000111101010101111011110011111111100000000000000001110101010110001111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011000111101010101111011110011111111100000000000000001110001010101001111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011000111101010101111011110011111111100000000000000001110101010101001111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010100111101010101111011110011111111100000000000000001110001010111001111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010100111101010101111011110011111111100000000000000001110101010111001111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011100111101010101111011110011111111100000000000000001110001010100101111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011100111101010101111011110011111111100000000000000001110101010100101111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010010111101010101111011110011111111100000000000000001110001010110101111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010010111101010101111011110011111111100000000000000001110101010110101111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011010111101010101111011110011111111100000000000000001110001010101101111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011010111101010101111011110011111111100000000000000001110101010101101111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010110111101010101111011110011111111100000000000000001110001010111101111000000110000000000001000000000111111110101101010100101000111110101010111101111010000000000001000000000110101010110111101010101111011110011111111100000000000000001110101010111101111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011110111101010101111011110011111111100000000000000001110001010100011110001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011110111101010101111011110011111111100000000000000001110101010111101111001010110000000000001000000000111111110100101010100101000111110101010111101111000000000000001000000000110101011110111101010101111011110111111111100000000000000001110101010111101111001010110000000000001000000000111111110100101010100101000111110101010111101111000000000000001000000000110101011110111101010101111011110111111111100000000000000101110101010111101111000010110000000000001000000000111111110100101010100101000111110101010111101111000000000000001000000000110101011110111101010101111011110111111111100000000000000001110101010111101111001010110000000000001000000000111111110110101010100101000111110101010111101111000000000000001000000000110101011110111101010101111011110111111111100000000000000001110101010111101111001010110000000000001000000000111111110110101010100101000111110101010111101111000000000000001000000000110101011110111101010101111011110111111111100000000000000001110101010111101111001010110000000000001000000000111111110110101010100101000111110101010111101111000000000000001000000000110101011110111101010101111011110111111111100000000000000100110101010111101111001010110000000000001000000000111111110100101010100101000111110101010111101111000000000000001000000000110101011110111101010101111011110111111111100000000000000001110101010111101111001010110000000000001000000000111111110100101010100101000111110101010111101111000000000000001000000000110101011110111101010101111011110111111111100000000000000001110101010111101111001010110000000000001000000000111111110100101010100101000111110101010111101111000000000000001000000000110101011110111101010101111011110111111111100000000000000001110101010111101111001010110000000000001000000000111111110100101010100101000111110101010111101111000000000000001000000000110101011110111101010101111011110111111111100000000000000001110001010100011110001010110000000000001000000000111111110100101010100101000111110101010111101111000000000000001000000000110101011110111101010101111011110111111111100000000000000001110101010111101111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010001111001010101111011110011111111100000000000000001110101010111101111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011110111101010101111011110011111111100000000000000001110101010111101111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011110111101010101111011110011111111100000000000000001110101010111101111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011110111101010101111011110011111111100000000000000001110101010111101111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011110111101010101111011110011111111100000000000000001110101010111101111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011110111101010101111011110011111111100000000000000001110101010111101111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011110111101010101111011110011111111100000000000000001110101010111101111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011110111101010101111011110011111111100000000000000001110101010111101111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011110111101010101111011110011111111100000000000000001110101010111101111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011110111101010101111011110011111111100000000000000001110101010111101111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011110111101010101111011110011111111100000000000000001110101010111101111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011110111101010101111011110011111111100000000000000001110101010111101111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011110111101010101111011110011111111100000000000000001110101010111101111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011110111101010101111011110011111111100000000000000001110101010111101111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011110111101010101111011110011111111100000000000000001110101010111101111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011110111101010101111011110011111111100000000000000001110101010111101111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011110111101010101111011110011111111100000000000000001110001010110000001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011110111101010101111011110011111111100000000000000001110101010110000001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011000000101010101111011110011111111100000000000000001110001010101000001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011000000101010101111011110011111111100000000000000001110101010101000001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010100000101010101111011110011111111100000000000000001110001010111000001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010100000101010101111011110011111111100000000000000001110101010111000001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011100000101010101111011110011111111100000000000000001110001010100100001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011100000101010101111011110011111111100000000000000001110101010100100001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010010000101010101111011110011111111100000000000000001110001010110100001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010010000101010101111011110011111111100000000000000001110101010110100001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011010000101010101111011110011111111100000000000000001110001010101100001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011010000101010101111011110011111111100000000000000001110101010101100001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010110000101010101111011110011111111100000000000000001110001010111100001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010110000101010101111011110011111111100000000000000001110101010111100001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011110000101010101111011110011111111100000000000000001110001010100010001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011110000101010101111011110011111111100000000000000001110101010100010001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010001000101010101111011110011111111100000000000000001110001010110010001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010001000101010101111011110011111111100000000000000001110101010110010001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011001000101010101111011110011111111100000000000000001110001010101010001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011001000101010101111011110011111111100000000000000001110101010101010001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010101000101010101111011110011111111100000000000000001110001010111010001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010101000101010101111011110011111111100000000000000001110101010111010001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011101000101010101111011110011111111100000000000000001110001010100110001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011101000101010101111011110011111111100000000000000001110101010100110001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010011000101010101111011110011111111100000000000000001110001010110110001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010011000101010101111011110011111111100000000000000001110101010110110001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011011000101010101111011110011111111100000000000000001110001010101110001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011011000101010101111011110011111111100000000000000001110101010101110001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010111000101010101111011110011111111100000000000000001110001010111110001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010111000101010101111011110011111111100000000000000001110101010111110001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011111000101010101111011110011111111100000000000000001110001010100001001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011111000101010101111011110011111111100000000000000001110101010100001001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010000100101010101111011110011111111100000000000000001110001010110001001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010000100101010101111011110011111111100000000000000001110101010110001001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011000100101010101111011110011111111100000000000000001110001010101001001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011000100101010101111011110011111111100000000000000001110101010101001001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010100100101010101111011110011111111100000000000000001110001010111001001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010100100101010101111011110011111111100000000000000001110101010111001001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011100100101010101111011110011111111100000000000000001110001010100101001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011100100101010101111011110011111111100000000000000001110101010100101001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010010100101010101111011110011111111100000000000000001110001010110101001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010010100101010101111011110011111111100000000000000001110101010110101001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011010100101010101111011110011111111100000000000000001110001010101101001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011010100101010101111011110011111111100000000000000001110101010101101001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010110100101010101111011110011111111100000000000000001110001010111101001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010110100101010101111011110011111111100000000000000001110101010111101001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011110100101010101111011110011111111100000000000000001110001010100011001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011110100101010101111011110011111111100000000000000001110101010100011001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010001100101010101111011110011111111100000000000000001110001010110011001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010001100101010101111011110011111111100000000000000001110101010110011001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011001100101010101111011110011111111100000000000000001110001010101011001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011001100101010101111011110011111111100000000000000001110101010101011001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010101100101010101111011110011111111100000000000000001110001010111011001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010101100101010101111011110011111111100000000000000001110101010111011001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011101100101010101111011110011111111100000000000000001110001010100111001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011101100101010101111011110011111111100000000000000001110101010100111001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010011100101010101111011110011111111100000000000000001110001010110111001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010011100101010101111011110011111111100000000000000001110101010110111001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011011100101010101111011110011111111100000000000000001110001010101111001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011011100101010101111011110011111111100000000000000001110101010101111001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010111100101010101111011110011111111100000000000000001110001010111111001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010111100101010101111011110011111111100000000000000001110101010111111001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011111100101010101111011110011111111100000000000000001110001010100000101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011111100101010101111011110011111111100000000000000001110101010100000101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010000010101010101111011110011111111100000000000000001110001010110000101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010000010101010101111011110011111111100000000000000001110101010110000101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011000010101010101111011110011111111100000000000000001110001010101000101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011000010101010101111011110011111111100000000000000001110101010101000101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010100010101010101111011110011111111100000000000000001110001010111000101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010100010101010101111011110011111111100000000000000001110101010111000101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011100010101010101111011110011111111100000000000000001110001010100100101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011100010101010101111011110011111111100000000000000001110101010100100101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010010010101010101111011110011111111100000000000000001110001010110100101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010010010101010101111011110011111111100000000000000001110101010110100101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011010010101010101111011110011111111100000000000000001110001010101100101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011010010101010101111011110011111111100000000000000001110101010101100101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010110010101010101111011110011111111100000000000000001110001010111100101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010110010101010101111011110011111111100000000000000001110101010111100101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011110010101010101111011110011111111100000000000000001110001010100010101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011110010101010101111011110011111111100000000000000001110101010100010101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010001010101010101111011110011111111100000000000000001110001010110010101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010001010101010101111011110011111111100000000000000001110101010110010101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011001010101010101111011110011111111100000000000000001110001010101010101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011001010101010101111011110011111111100000000000000001110101010101010101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010101010101010101111011110011111111100000000000000001110001010111010101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010101010101010101111011110011111111100000000000000001110101010111010101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011101010101010101111011110011111111100000000000000001110001010100110101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011101010101010101111011110011111111100000000000000001110101010100110101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010011010101010101111011110011111111100000000000000001110001010110110101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010011010101010101111011110011111111100000000000000001110101010110110101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011011010101010101111011110011111111100000000000000001110001010101110101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011011010101010101111011110011111111100000000000000001110101010101110101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010111010101010101111011110011111111100000000000000001110001010111110101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010111010101010101111011110011111111100000000000000001110101010111110101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011111010101010101111011110011111111100000000000000001110001010100001101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011111010101010101111011110011111111100000000000000001110101010100001101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010000110101010101111011110011111111100000000000000001110001010110001101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010000110101010101111011110011111111100000000000000001110101010110001101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011000110101010101111011110011111111100000000000000001110001010101001101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011000110101010101111011110011111111100000000000000001110101010101001101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010100110101010101111011110011111111100000000000000001110001010111001101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010100110101010101111011110011111111100000000000000001110101010111001101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011100110101010101111011110011111111100000000000000001110001010100101101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011100110101010101111011110011111111100000000000000001110101010100101101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010010110101010101111011110011111111100000000000000001110001010110101101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010010110101010101111011110011111111100000000000000001110101010110101101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011010110101010101111011110011111111100000000000000001110001010101101101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011010110101010101111011110011111111100000000000000001110101010101101101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010110110101010101111011110011111111100000000000000001110001010111101101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010110110101010101111011110011111111100000000000000001110101010111101101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011110110101010101111011110011111111100000000000000001110001010100011101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011110110101010101111011110011111111100000000000000001110101010100011101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010001110101010101111011110011111111100000000000000001110001010110011101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010001110101010101111011110011111111100000000000000001110101010110011101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011001110101010101111011110011111111100000000000000001110001010101011101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011001110101010101111011110011111111100000000000000001110101010101011101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010101110101010101111011110011111111100000000000000001110001010111011101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010101110101010101111011110011111111100000000000000001110101010111011101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011101110101010101111011110011111111100000000000000001110001010100111101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011101110101010101111011110011111111100000000000000001110101010100111101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010011110101010101111011110011111111100000000000000001110001010110111101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010011110101010101111011110011111111100000000000000001110101010110111101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011011110101010101111011110011111111100000000000000001110001010101111101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011011110101010101111011110011111111100000000000000001110101010101111101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010111110101010101111011110011111111100000000000000001110001010111111101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010111110101010101111011110011111111100000000000000001110101010111111101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011111110101010101111011110011111111100000000000000001110001010100000011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011111110101010101111011110011111111100000000000000001110101010100000011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010000001101010101111011110011111111100000000000000001110001010110000011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010000001101010101111011110011111111100000000000000001110101010110000011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011000001101010101111011110011111111100000000000000001110001010101000011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011000001101010101111011110011111111100000000000000001110101010101000011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010100001101010101111011110011111111100000000000000001110001010111000011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010100001101010101111011110011111111100000000000000001110101010111000011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011100001101010101111011110011111111100000000000000001110001010100100011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011100001101010101111011110011111111100000000000000001110101010100100011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010010001101010101111011110011111111100000000000000001110001010110100011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010010001101010101111011110011111111100000000000000001110101010110100011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011010001101010101111011110011111111100000000000000001110001010101100011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011010001101010101111011110011111111100000000000000001110101010101100011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010110001101010101111011110011111111100000000000000001110001010111100011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010110001101010101111011110011111111100000000000000001110101010111100011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011110001101010101111011110011111111100000000000000001110001010100010011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011110001101010101111011110011111111100000000000000001110101010100010011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010001001101010101111011110011111111100000000000000001110001010110010011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010001001101010101111011110011111111100000000000000001110101010110010011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011001001101010101111011110011111111100000000000000001110001010101010011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011001001101010101111011110011111111100000000000000001110101010101010011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010101001101010101111011110011111111100000000000000001110001010111010011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010101001101010101111011110011111111100000000000000001110101010111010011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011101001101010101111011110011111111100000000000000001110001010100110011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011101001101010101111011110011111111100000000000000001110101010100110011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010011001101010101111011110011111111100000000000000001110001010110110011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010011001101010101111011110011111111100000000000000001110101010110110011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011011001101010101111011110011111111100000000000000001110001010101110011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011011001101010101111011110011111111100000000000000001110101010101110011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010111001101010101111011110011111111100000000000000001110001010111110011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010111001101010101111011110011111111100000000000000001110101010111110011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011111001101010101111011110011111111100000000000000001110001010100001011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011111001101010101111011110011111111100000000000000001110101010100001011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010000101101010101111011110011111111100000000000000001110001010110001011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010000101101010101111011110011111111100000000000000001110101010110001011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011000101101010101111011110011111111100000000000000001110001010101001011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011000101101010101111011110011111111100000000000000001110101010101001011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010100101101010101111011110011111111100000000000000001110001010111001011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010100101101010101111011110011111111100000000000000001110101010111001011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011100101101010101111011110011111111100000000000000001110001010100101011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011100101101010101111011110011111111100000000000000001110101010100101011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010010101101010101111011110011111111100000000000000001110001010110101011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010010101101010101111011110011111111100000000000000001110101010110101011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011010101101010101111011110011111111100000000000000001110001010101101011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011010101101010101111011110011111111100000000000000001110101010101101011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010110101101010101111011110011111111100000000000000001110001010111101011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010110101101010101111011110011111111100000000000000001110101010111101011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011110101101010101111011110011111111100000000000000001110001010100011011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011110101101010101111011110011111111100000000000000001110101010100011011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010001101101010101111011110011111111100000000000000001110001010110011011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010001101101010101111011110011111111100000000000000001110101010110011011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011001101101010101111011110011111111100000000000000001110001010101011011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011001101101010101111011110011111111100000000000000001110101010101011011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010101101101010101111011110011111111100000000000000001110001010111011011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010101101101010101111011110011111111100000000000000001110101010111011011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011101101101010101111011110011111111100000000000000001110001010100111011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011101101101010101111011110011111111100000000000000001110101010100111011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010011101101010101111011110011111111100000000000000001110001010110111011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010011101101010101111011110011111111100000000000000001110101010110111011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011011101101010101111011110011111111100000000000000001110001010101111011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011011101101010101111011110011111111100000000000000001110101010101111011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010111101101010101111011110011111111100000000000000001110001010111111011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010111101101010101111011110011111111100000000000000001110101010111111011001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011111101101010101111011110011111111100000000000000001110001010100000111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011111101101010101111011110011111111100000000000000001110101010100000111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010000011101010101111011110011111111100000000000000001110001010110000111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010000011101010101111011110011111111100000000000000001110101010110000111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011000011101010101111011110011111111100000000000000001110001010101000111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011000011101010101111011110011111111100000000000000001110101010101000111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010100011101010101111011110011111111100000000000000001110001010111000111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010100011101010101111011110011111111100000000000000001110101010111000111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011100011101010101111011110011111111100000000000000001110001010100100111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011100011101010101111011110011111111100000000000000001110101010100100111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010010011101010101111011110011111111100000000000000001110001010110100111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010010011101010101111011110011111111100000000000000001110101010110100111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011010011101010101111011110011111111100000000000000001110001010101100111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011010011101010101111011110011111111100000000000000001110101010101100111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010110011101010101111011110011111111100000000000000001110001010111100111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010110011101010101111011110011111111100000000000000001110101010111100111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011110011101010101111011110011111111100000000000000001110001010100010111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011110011101010101111011110011111111100000000000000001110101010100010111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010001011101010101111011110011111111100000000000000001110001010110010111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010001011101010101111011110011111111100000000000000001110101010110010111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011001011101010101111011110011111111100000000000000001110001010101010111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011001011101010101111011110011111111100000000000000001110101010101010111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010101011101010101111011110011111111100000000000000001110001010111010111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010101011101010101111011110011111111100000000000000001110101010111010111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011101011101010101111011110011111111100000000000000001110001010100110111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011101011101010101111011110011111111100000000000000001110101010100110111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010011011101010101111011110011111111100000000000000001110001010110110111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010011011101010101111011110011111111100000000000000001110101010110110111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011011011101010101111011110011111111100000000000000001110001010101110111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011011011101010101111011110011111111100000000000000001110101010101110111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010111011101010101111011110011111111100000000000000001110001010111110111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010111011101010101111011110011111111100000000000000001110101010111110111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011111011101010101111011110011111111100000000000000001110001010100001111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011111011101010101111011110011111111100000000000000001110101010100001111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010000111101010101111011110011111111100000000000000001110001010110001111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010000111101010101111011110011111111100000000000000001110101010110001111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011000111101010101111011110011111111100000000000000001110001010101001111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011000111101010101111011110011111111100000000000000001110101010101001111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010100111101010101111011110011111111100000000000000001110001010111001111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010100111101010101111011110011111111100000000000000001110101010111001111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011100111101010101111011110011111111100000000000000001110001010100101111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011100111101010101111011110011111111100000000000000001110101010100101111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010010111101010101111011110011111111100000000000000001110001010110101111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010010111101010101111011110011111111100000000000000001110101010110101111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011010111101010101111011110011111111100000000000000001110001010101101111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011010111101010101111011110011111111100000000000000001110101010101101111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010110111101010101111011110011111111100000000000000001110001010111101111000000110000000000001000000000111111110101101010100101000111110101010111101111010000000000001000000000110101010110111101010101111011110011111111100000000000000001110101010111101111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011110111101010101111011110011111111100000000000000001110001010100011110001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011110111101010101111011110011111111100000000000000001110101010111101111001010110000000000001000000000111111110100101010100101000111110101010111101111000000000000001000000000110101011110111101010101111011110111111111100000000000000001110101010111101111001010110000000000001000000000111111110100101010100101000111110101010111101111000000000000001000000000110101011110111101010101111011110111111111100000000000000101110101010111101111000010110000000000001000000000111111110100101010100101000111110101010111101111000000000000001000000000110101011110111101010101111011110111111111100000000000000001110101010111101111001010110000000000001000000000111111110110101010100101000111110101010111101111000000000000001000000000110101011110111101010101111011110111111111100000000000000001110101010111101111001010110000000000001000000000111111110110101010100101000111110101010111101111000000000000001000000000110101011110111101010101111011110111111111100000000000000001110101010111101111001010110000000000001000000000111111110110101010100101000111110101010111101111000000000000001000000000110101011110111101010101111011110111111111100000000000000100110101010111101111001010110000000000001000000000111111110100101010100101000111110101010111101111000000000000001000000000110101011110111101010101111011110111111111100000000000000001110101010111101111001010110000000000001000000000111111110100101010100101000111110101010111101111000000000000001000000000110101011110111101010101111011110111111111100000000000000001110101010111101111001010110000000000001000000000111111110100101010100101000111110101010111101111000000000000001000000000110101011110111101010101111011110111111111100000000000000001110101010111101111001010110000000000001000000000111111110100101010100101000111110101010111101111000000000000001000000000110101011110111101010101111011110111111111100000000000000001110001010100011110001010110000000000001000000000111111110100101010100101000111110101010111101111000000000000001000000000110101011110111101010101111011110111111111100000000000000001110101010111101111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010001111001010101111011110011111111100000000000000001110101010111101111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011110111101010101111011110011111111100000000000000001110101010111101111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011110111101010101111011110011111111100000000000000001110101010111101111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011110111101010101111011110011111111100000000000000001110101010111101111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011110111101010101111011110011111111100000000000000001110101010111101111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011110111101010101111011110011111111100000000000000001110101010111101111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011110111101010101111011110011111111100000000000000001110101010111101111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011110111101010101111011110011111111100000000000000001110101010111101111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011110111101010101111011110011111111100000000000000001110101010111101111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011110111101010101111011110011111111100000000000000001110101010111101111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011110111101010101111011110011111111100000000000000001110101010111101111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011110111101010101111011110011111111100000000000000001110101010111101111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011110111101010101111011110011111111100000000000000001110101010111101111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011110111101010101111011110011111111100000000000000001110101010111101111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011110111101010101111011110011111111100000000000000001110101010111101111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011110111101010101111011110011111111100000000000000001110101010111101111001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011110111101010101111011110011111111100000000000000001110001010110000001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011110111101010101111011110011111111100000000000000001110101010110000001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011000000101010101111011110011111111100000000000000001110001010101000001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011000000101010101111011110011111111100000000000000001110101010101000001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010100000101010101111011110011111111100000000000000001110001010111000001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010100000101010101111011110011111111100000000000000001110101010111000001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011100000101010101111011110011111111100000000000000001110001010100100001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011100000101010101111011110011111111100000000000000001110101010100100001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010010000101010101111011110011111111100000000000000001110001010110100001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010010000101010101111011110011111111100000000000000001110101010110100001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011010000101010101111011110011111111100000000000000001110001010101100001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011010000101010101111011110011111111100000000000000001110101010101100001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010110000101010101111011110011111111100000000000000001110001010111100001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010110000101010101111011110011111111100000000000000001110101010111100001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011110000101010101111011110011111111100000000000000001110001010100010001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011110000101010101111011110011111111100000000000000001110101010100010001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010001000101010101111011110011111111100000000000000001110001010110010001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010001000101010101111011110011111111100000000000000001110101010110010001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011001000101010101111011110011111111100000000000000001110001010101010001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011001000101010101111011110011111111100000000000000001110101010101010001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010101000101010101111011110011111111100000000000000001110001010111010001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010101000101010101111011110011111111100000000000000001110101010111010001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011101000101010101111011110011111111100000000000000001110001010100110001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011101000101010101111011110011111111100000000000000001110101010100110001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010011000101010101111011110011111111100000000000000001110001010110110001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010011000101010101111011110011111111100000000000000001110101010110110001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011011000101010101111011110011111111100000000000000001110001010101110001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011011000101010101111011110011111111100000000000000001110101010101110001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010111000101010101111011110011111111100000000000000001110001010111110001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010111000101010101111011110011111111100000000000000001110101010111110001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011111000101010101111011110011111111100000000000000001110001010100001001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011111000101010101111011110011111111100000000000000001110101010100001001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010000100101010101111011110011111111100000000000000001110001010110001001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010000100101010101111011110011111111100000000000000001110101010110001001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011000100101010101111011110011111111100000000000000001110001010101001001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011000100101010101111011110011111111100000000000000001110101010101001001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010100100101010101111011110011111111100000000000000001110001010111001001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010100100101010101111011110011111111100000000000000001110101010111001001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011100100101010101111011110011111111100000000000000001110001010100101001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011100100101010101111011110011111111100000000000000001110101010100101001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010010100101010101111011110011111111100000000000000001110001010110101001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010010100101010101111011110011111111100000000000000001110101010110101001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011010100101010101111011110011111111100000000000000001110001010101101001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011010100101010101111011110011111111100000000000000001110101010101101001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010110100101010101111011110011111111100000000000000001110001010111101001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010110100101010101111011110011111111100000000000000001110101010111101001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011110100101010101111011110011111111100000000000000001110001010100011001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011110100101010101111011110011111111100000000000000001110101010100011001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010001100101010101111011110011111111100000000000000001110001010110011001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010001100101010101111011110011111111100000000000000001110101010110011001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011001100101010101111011110011111111100000000000000001110001010101011001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011001100101010101111011110011111111100000000000000001110101010101011001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010101100101010101111011110011111111100000000000000001110001010111011001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010101100101010101111011110011111111100000000000000001110101010111011001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011101100101010101111011110011111111100000000000000001110001010100111001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011101100101010101111011110011111111100000000000000001110101010100111001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010011100101010101111011110011111111100000000000000001110001010110111001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010011100101010101111011110011111111100000000000000001110101010110111001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011011100101010101111011110011111111100000000000000001110001010101111001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011011100101010101111011110011111111100000000000000001110101010101111001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010111100101010101111011110011111111100000000000000001110001010111111001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010111100101010101111011110011111111100000000000000001110101010111111001001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011111100101010101111011110011111111100000000000000001110001010100000101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011111100101010101111011110011111111100000000000000001110101010100000101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010000010101010101111011110011111111100000000000000001110001010110000101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010000010101010101111011110011111111100000000000000001110101010110000101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011000010101010101111011110011111111100000000000000001110001010101000101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011000010101010101111011110011111111100000000000000001110101010101000101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010100010101010101111011110011111111100000000000000001110001010111000101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010100010101010101111011110011111111100000000000000001110101010111000101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011100010101010101111011110011111111100000000000000001110001010100100101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011100010101010101111011110011111111100000000000000001110101010100100101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010010010101010101111011110011111111100000000000000001110001010110100101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010010010101010101111011110011111111100000000000000001110101010110100101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011010010101010101111011110011111111100000000000000001110001010101100101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011010010101010101111011110011111111100000000000000001110101010101100101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101010110010101010101111011110011111111100000000000000001110001010111100101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101010110010101010101111011110011111111100000000000000001110101010111100101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000100101011110010101010101111011110011111111100000000000000001110001010100010101001010110000000000001000000000111111110100101010100101000111110101010111101111010000000000001000000000110101011110010101010101111011110011111111100 - 11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111T1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 - - - + + - - - - + + + diff --git a/tools/qt_proj_test5/sdram_rw.vhd b/tools/qt_proj_test5/sdram_rw.vhd index c235781..9c70e9d 100644 --- a/tools/qt_proj_test5/sdram_rw.vhd +++ b/tools/qt_proj_test5/sdram_rw.vhd @@ -81,7 +81,7 @@ architecture arc_sdram_rw of sdram_rw is -------------------------------- Constants ----------------------------------------- - constant MAX_ADDR : natural := 1 * 1024 * 1024; -- 1Mbit is the full 8 Mbytes of memory (1M*16Bit*4Banks=6MBits = 8MB) + constant MAX_ADDR : natural := 1 * 1024 * 1024; -- 1Mbit is the full 8 Mbytes of memory (1M*16Bit*4Banks=64MBits = 8MB) constant W_TO_R_WAIT_TIME : natural := 10; -- number of clock cycles between WRITE to READ constant BURST_LENGTH : natural range 1 to 256 := 256; --Maximum is 256 constant ADDR_INC : natural := 256; --Increment address by this value in each burst -- 2.11.0