1111101000000010111001000101011000011111110110110011110000101011100101111100010000101010100011110111010110110011000110000100110011101010011101010000010101011110010010100011111011010010011001101110000000000000011000101101111110101111100100101011010010000011010101011101111110111110110001101111011111000100110100101010100111101101001001100000111100001000001101010010101111100010000000001111101100000001 0000110111100110011010010110101011111011110011011000100101100110010001101110111111011110000110100010000100101001101011101001100100011101011001011111101010100100110000001011010001111000011000011011110011001010000010111010011110111011010110011101000101011111010111111010111111101000111101010010110001111000001001110011010111001100100010101111101110001001010001000110001100100101010101111010110100011011 0110011100001001010111100111010010001001100001011001011011100100100001000000110100111010111000001110011000001010101110111101000100110010011101110001010101010101010100001110110110100010101101110011101110010000010010011100101011110010001011101111011001010101101001110010010100000010011000010100110000110010110111100101011101010111100101001111010110010111000010111111010111010110100000000111010110011011 0110111000010110000110000101110110010011001010111101110001101110110110101101101000011011100011101010000100000110110001001100100001101010010110101011001100001000111010000011011001010110010000110101110111001010000011001000101111101010100100110110010011101101001100111010110101001000101101100000101111101011111111111010100101110011000100111000111111010010111001010100111010100000111001101011100001100001 1011011101111110001010100010111011000001100110101001001000001110001101010100001111001100001001001101111101001111011111010011111011011011101101110011111011101111000111101101110000000000010111100001110011000111101100000100101010010111011100111111111111011011001001001011110101101010000111100011010101111001011100101110100110011100111011111000011001111000001100110001001010111101001011000000100011011011 1110111000010011000011110110001000010101010100011110010111101000110111010011110100100101100001010000000010111100101010001011101010010110011000111110110010001101001110101001110001111111100001000111111101100111000001001000000011011011000010100101011100000011110011100000110011000010101010010100101010011100011111100110111000110101110111011011000010001101100100010011110110001000101111111111110110100000 0100010110001010110110111010110000101110011110001101000110011101110101011111010110100111110110100111011111101110001010101110101100001111011101000011000101101111100011110100111000000101100000110111000001000000001100001011011111011111000010001001000110011001000010101100100000000011101000001011011000001010001100010011100110111000000111000011111110101001000101000101110011111011011001001101010110001001 1100001000000101001000100111000001011111101010001100111001010010000101101110100100011011011101111010111001000111110011010000110100001101000100001010100011000110100110110011111111010001100100111100010111110000111010011111100110111000011011100000000010100011101100100011011111100011010001000011000110111000010010010100011010100000010001111100001001100011100010100111000111111001110000000100110111100101 1011000101101010111110110010100000011011111001100100010110001100001001110000110000100011100110000011111100000010100110000110111010001100110100000010110111011010111011000010001110000111111100111001011010101011101011001100001101000010111011110001010011100111010010001111000110101000111110101011100100100111110100011101101001001111000011011011010101010001111100010000000001010100011100110001111001000111 1101000111010010111010001111110100110001000110001110001010101011110110010111100110010111011010100010000100010001101111100000100110010111010110001010111100100101101010010101011111111000110111000001101111000001011001010100111110111110000011101010110100110001010100001000001011010100001001101101100110001110111000000010010011011100010100101101011110000111001101011000111110000101001101100011101011000010 1010001001100011010111001010111010010001001101010000010100110111101100011010110000011001001011001100100011100010101001000000101110110100001001001001100001101110100011110010100011001110100101110111000111110101000000011100110111001000100000100001101001001101001000001000111001010111111000010101110011110010111110000111010011001011011100011111010011010111000001010000000110100101010101101000110110000000 1101001010000110000011000100000001101110110011010011010101010111011101011011101111011000011010110000110010001011010001001101010011000001000011010110101110010000000110010001010100010101000101010001100010110100101000110011100011110001001110111111100011111100110011110111110011000111000011100011100000011010011111111100101000100001001101100110001000111010001001001101100111001100101000001101011111100001 0110010000110110010100000101111000000101110101101001111100100110110011011010011000111001111011111110101010100010010001011100010101000100100011100000101111010101000100011001010001100101010101011110111101011100000101001000001011110100010110100100110011010001110100110110001010011011000001011110110010001010000110010110100101010011111010000101111110001111011011100000111100010011000010100000011010111000 1011011110111110111111011101011110100111011100110101000000000001100101011100001110010100101101100110111000100001100101111010111110101010110101100100011100001100001111101111000100111110010000010011100110000010010101111111011001100111011100111100101110001000100010101111101001111110000100101000011111000101111101100101110111100101000100111100111000010111101000111111100001001011000001000110100100011110 0011110011000111010111010010000010110001001100110001101110001010000101110101101111000001101100010011101101000111101101010100111110110110110000111000100011001011011001000000011000110010000100100111000110000110110101011101110111011010000110111110110001010110001111010110001010101101111010100101011011100101011111001011010110010100111011010010101011101100101111001100010010111010001100100110001011100000 1110001100110010010011000100000000110000010110100100100010111000110101000000010110011000100001000111001110100010110110001110101101000100001011110010010110110001110110111101110101001011010101101110000001000001101010111111111010001000110110100110011100000010111100001100111100100011001011010111111110000001010001111001001101010110101001101010001110111011010000100111011010101000101110000110010010101100 1000100011000110001111010001010101110101101100100111100010000010011111111111010100000001110110011101000100001010010101111110111101101100101100101110011100111111011100011000010100110111011011111010011111011101111001000010100110111011001011010101100110101010111000111101101101010101011011100000010100110001000001011100111101101111001000110101011000010100000100010001101101010010010000011110101001110000 0101001001110011101001010110010100111110001101000010010101101010001101110010110010000011000010101100110010100111100000010000011100001011011110110101001010011101100001000100110011011010010111101001100110011110100010101111101011110111011111011101111011110101000101000010110100100010100000101010101000101000011111000001110111100000101100011001011000000100101100111110001010010001100111111011111101100000 0111011110101110000010010001111000100001111001001100111100011010001100010101101011010101011011000100010000111011010000101100010000111100010111110110000111000100001011010000100111101101101010110101110100011001111111011000101100111000000010000011000011001110010000100100101011111101011110001010110001011001001000100010111010001110010101111000011101000111000010001111110000010000100000011110101110000011 1101100110010111100110010110110111001110011001100011101100010111011100010010100101001110010100100001110100010000000101001011100111001001001111010100111100100010000010110101001010101110111001001111011101011000011010011011101001100110110101100101110001011100110001110101001111111100000100010100011101001000100000000001110111100000010000101101110011110110101110010101101000000001100000000001111011100110 0010001011010100101010110000110100011000010110100011000101110000000110101010001111010011010001010011010101110111110110110100001011100010011101110111110001010010000111010011011101111100010101001001000101011011001011011001111111111110011010000010110111011101010001001011101011000100001101111000101010111100001110010111100100110100101010000110110101110000011111010000010101000001001000010001111011110001 0010010110000011101100010100011010100011000001010110011011000100000011000001100100001001010001101100000010100101000111101011001101010101100101011001010110000011010100101101100111000010100110011000001011010010101001010100100011110111100100110001001000011100110001111100001000110100110101001111010011011010011001111110101001101101001010000010111001100010000111100000010100010011111110001001000100110000 1011011011011010011110101100011110111101111110000111100110110010011100111010000110001000011000101111110101001100100010111101000100001001011111110111110110010100101101101110011000010000111000111100110101011011100110100000001111110100000011110101101101100001101101000111001110101111101110010100000001101000001000111101100101010011111011100001110101001000110101100010001010111100011010100111011001111101 0001101010001001010101100100100001011011011000011110110001001101001000001011111110011111011110001110100100010101011111111000000010101001111110100100111110100110001010011101000111110000101100010000111110010010010101100011010110100111100010100010111110000010111010110111111101101010100110101000010011101010011011101111101110010001100101100001010111001010100000011001110011011111111111011001100101100111 0111100111000000110001100011101110101101000000111101101101101111100110011011000010110110101010011010111111100001111011010100110001000111011000011110100001100000111011000010101100110001011001100001011110001100000000011000000011111001110001000001100111111000011000100010111001100011101111100011010010110000011100111100000110100101011010111011111001011010010010111100100000110001110011110001111110000111 1101010011100101010000011000110010111011100000000111010101111110100110010111001111010100010101101011011101110010101011011000011101110110001101010111011011101011001010001001001011110101101100011111010000101000110000011111100001010110010101010000010101000100010000010001111011110010110001110011001100001110100100110010011000110101001101011011110010110010111000010001011001100001111000101000010100001000 0111010100010110101000111111010110100100100001110100110111111101101100001110111000110101100111111011001010011001111110110101000101000101010001100100111100010100111110110110011010011101101111101111000001000010011101010010100111001000011110000010011111110001111111111011010110000000100101100010110001100110111100011100011111010011000111100100010011101110011010100101111100100101001101110111111110001011 0100011010110101010100011000110001100110010101110010001001011010010101011001111110001000010111100000110100110101011101101011001001101000111000111101011111001101110110111110001100100011010101001010011000111011000100110001100001011001000100000000000100001011110011101000010110110101010010101100110110011101100001101010101100000101010000101111111001100001110010000110100011011101011100001010011100011101 1011000101100100011001000110000011010110011011011001000101110101111001001011110100111101010111100001001111000110000000010011000001100101111100011111110000011100100011000111001001110001011010001011001001011100100100011110000101000011100101100111111110100011111000000100000110101101010101000111111001100110101110001100110001101001010100000110001000111110100110111010101000110111110111110101110011011011 0000110100011001011010110111001101100110111010111011111001000111001110110101011010010101010110111110001000101010010011110000100010001010000010111011001010100101010110111010101110111000110011110110000110011010010000100110001110011001101101101000010111100010010010010000010111011001100010100110001010000111101100001110011000111110010110000010000010101101001100000001010111101011110100101110000001101001 1010101111111011100001111110110110010010001010110100110000000011011110000000110000101000110110111000111001100001011111110011011000101010100000001110111101000110101110010110101010000000001011111110100110001110000110111010111101110010101000010101000101010010011001011011001110101101010011101000110011100011100000011101101101110001000001011001101001101110011011001010010110011101111111010101100011100111 0101110101100111100011000001011101111101010010010000101100011110000110100100100111000010000111000000000010011011111000011011100111001000011100000111001101011000010111100001100011110111111111001111001011101011010111000100110101011001011010000010100010101110110010111101110010010100101011111000011000110100010000001001100111110111001100100010011101011111010101000101111000110000110110010110001010101110 1110001010011011011000001100000010101010010111010010011001101110111101111110111011010100001001100110000100010100011111011010010100111110101101101111011111010110111110111010000101001111111101011000011101111010100101000000111000000011011110010111010010010111110011011100010101101100011010010000100010101110000010100001011000010000111001000110011101010010101100000010011101001000100110001011110000011100 1011111001101001101010100111001011001110101010110101110101101110100011011101001001100011111110101100010001010000000110110001000101111110110110101011100001110001101111110010001101101110010100000011010010100010000100100000011111000000011000000000011000100010100111111100110001101011100010110000111010101110100111111000000111011101010101010101110001011001001100000100011001000000010110010100101100010001 0111111001111000110011001010000011100110010101001100100100010010001111101101011000001010001001100111000000010001100100011001001111010100011001000100110110000011011110000110100001001100101101010000011111010010010111000011111000111001001100011110100100100101101010111100011000001011100001100110010011101000110000001001011111010100000000010001010111001111100001010111101010101001111000001011101010000111 0011000101001100100001100100110101010111001111000110010101101001110110010110010110010011100001010101100100111111111111000001001101001100110110110010011000100101010010100110100010110011111001010100011011001100101101101010100010001011110011011110010101000101000000110100110100011000111011001010101001111101011100010101111110001010010011110101000100000001000111011110010111000000100001111110010110001011 0110010111110111001111001110100010110110101000010101111010001111110100010011011101101111111110000111110001111000110000010010010011111011000010111101011111111000001010010110011000001010011010100010100110100110001000000001111010001011000000111100000111110100100010001000101010101100111101101101100111000000010011001011001001111000000011011111010101101011001010110100111010110101111000101011001110011100 0011111001000111101100100111101101111110110010100001110100100110010110101000100111010000101100010010010000101100100011110110011000000001000011000100110110010110010011101011111100100000100111111001000010100111100110011111011001011000011010111101100101100110111000001000101110001111000100001110010011111000010010110001100110011000111001011001111101100101010010010100111111110010000101101011001011101101 1110111000110000011001010110101011010000101110010111101001100011110111110101100110011111111101101110101010010011000100011110000100000000010100001101011111010111110000100001101110000000000100011100101000111001101110110101111001111000100010101101010011110011010111110011001010110000101010000100011101100011111010010100010000000111010100101111100101001010010001110011100100010110110110111011100001111001 1100101001101011000100000110100011110011001101011100010010011011001101011000000100010011001000011111111011011110100000110001001110111010110101001011101110010010110000111101100101011001100000110010001000111001000010111111110110111011110010111011110100001110000010010001001100101101010110110100001101001111100011110110011010000111000001011111011101101000011000110110011000011100000001011011101111010011 1001110101101001101000100110000100011110011101011101011101100111010101101100001101001011111110010100100110100001011110100111001100001101110011001010010011000011010010111101100101100001001000000110110010010111111011001110101010010100001000101100101101100100110110111000111001100110000110011000101111111000000000010110110101111001100011110101010111001010111000011000010101000111000111010100011101001001 0011001011011110111111001000000011110001110000100101111100100000000001100110001000000110111000011100101110001101110100001011001111000101100001001000110011110001011110011011110001001110010111011011100011100100111100000010111101111011100110101111000101010100110011100011111101010001010101010010001010010011011111011010010000011110101101010101100110101001001001010000110111011101010001111001110010100011 0110100111000000111010001111111110001000110001111111010110110110010011111001000101010101010010100100110001110001101111100100001000011000001000011111010001110011011100101001110011110101111110010100010011110011100001011001101101111010000101010110001101010000110111011111110110101100100101100000000001110100110000100111110111101011111111011010100101111001010011010000100111110101111111111100000101110011 1010011100010011110110111111111010011100000100011011100111001000011100010100111000110111001100000001110011001001011001101111000010001010011110110110010010111110101101111010111011010100011100001000010000111011000000010101011001010000100111010111100011101000101111101000101001000110100100100110000110011010111101010100000100100011010100101011111110010010101110000001111100001011001100000000000000010001 1011110010010110111010101010111110011001100000000001011101110010001111010101011110001011101000000011011101000000101110111000010110111011000100001100101111010110100010011100110011010110100000000011101000001110001001000001010111000100100100001000110001100000110010101000010110010001001111001101110100101110001101110110100101010001010001100111110101100010001010100110010000001100101011001001011101101001 0000110101011111000011100011111010101011001011110000000111101010100001000101100010010010100010010001000011000011111000011010011111110101110000001010101111001100111010000011000101001101111111101000000000101110000101101101101001111010001000111011100011000010010001010100011010010100111000100111011100101111011101000001011011001110110111100000101010000010110011010110011111111000100010110110100100110110 0010110010000010110110010001010101100110010000001010011000000111010000011101110111100101010110001111111001010101010110000010011101111000000110110110000010010101000101001010010110101011101000100110100010110011001010000001101111111110110100011010100101111101110011110000100100010110111110001011110000100000101111111101101010110100001001101110110001011011000110101111000100000101000100100111001100010011 1010101110001110000010110010010100100001010101110100011110001010111001111011000010100010001000001111010101111110110111010000101101010110000111100011011011001111111101110101001101000110110110011011001011010001100011011000000000110010010010100101111001100101100111010000110011111111001110101100000010110110010010000000010001111111101100011011011111001001111110111011001011100110000101110111010001001101 0011011101111100100000000010001011011111000111101100010111001001111100100001011111101010110010011111011011001010010110001111000100110001011011100110101011011100101110001010010000010010110100010111100001011100010101001010010000111110000101001001010111100101101010110110011100011100100001000101001000000011001000111100010000000001011100011101111110101000111101100011111111100000001000111001010111000111 0010100110010010010000000101001111000011010001101101010011100111111111111100000000010111010110110101010000101110001000001001110100010111000111111110100101110101111100011110100010011001001100001111010111111101111010111110010001010101001111001001110100111111101101110001101010010111101111000101101000110001101000100101110010011111111010100110010111000001111101010111100011110011110101000101101011001101 1111111111110001001111001110111101001100011000011010110111110100110010011100101001100010101111110100010000111111111110011110100011010000001110111110000100101010111100011110000011101010101110010010100001100011000110001110111010010010011010011000011100110001101010100111001011111001000100101101111001001011111011101000100001010101010001100101100001001101110101100001001101101110010101111001101101010000 0000110000011101010001100110011101000001100101010100111001010011101110001111101011011101111111010000100101110001100000010000110111100011101001111000110001010000010110000000001111100111010011001010100001001100000011110100010000110111101110101110110111010101100000010100000010101110100100110101010100010000001010101011011101100010111110011101111000100100010110111110000110001110100000000111110011100001 0110111011000111101001111010111001111110011100100111011101010001111100011101111111000101100000101110111111001101010001011000111101010110000011110110101100000111110001110000011011101010110111110110011000011111100100100000110100001011111011010011000010111110111001001010001100101111111000101000100101110111010011011101100110000011100000111100111110110100001001101001100011010001101110011000110000110111 0111011110100101011011011010110110011001010000101010011001110010101111000100011101011001000100001001110011101110110011000001010001110010100110011010101100010101111001010100101011111000011100110010010000000111101010001100010101001111000100100110000010011110000010000100111101001110101000101101010100001111101001000100110011001000111100110010111010001110011010001000101010011001001111001011001001001011 1111101111110000001001101111000000000110110110000001100111011000010010011111010010101010011110111110110001111111100010011111100011101110111110101010111010011011010000111011101100101001111000100010110010001000010011111010101101111101010011101110010011011001111110111001110011101010001111111100110101100101010101000001101001111011111110110101010100001011100001100010001101001110100001111011001011000100 0111001010010111100111101000001111111110111110110100011010110001100101001001100111011010001101010110101000011101001111101100000110111100000110110101010101000011110010110101111011011000011001010100001100011110010110010011010111111001111001100111100101010000100110110110111011001101101100101101101111100001010110111101011010000111010001110110101001110100001110011100100010101000001111110100001001110010 1011100010001111010000111010001110111000111011111001111001101000001110101100111000011110110111110011110001001110100111111100101000011100001000110010001001010010111000111101100011110110111111001001101100101011010110001100101010100000011110110001001010100110001111000110100001011011110010100110111110011110000100001111001011011101011101101101001001111000010100111011110011011010100000010010010100001001 1011010101101100111100001111010011110001111010010100100110111101110100011011101101000101111100001101111011111100110010101110001011111010001010001110111010011010111101010000010101111100111111101110111001101111111111011010100010001110010001000111010101000101100010000001110101010010010100110010110011010111110000011011101001101001011101111111010110010010100110001011111001100111100001110100000000010000 1000101100001101101000010111000000101000110100000000111110101000111010101100011110110001110001010000010011010110111010001100010101101000010000101010000101110100110011101110011110100100001101011101010111010001100110110000101111011100110101010101011111010100110010111111110101000011000011100001010001011010101000000110110011110111111100011001101001010011100101011010100101111100010001101101000100000011 0110111101001111111010001100010001101111110100010100100001001101001011011011011010011001111010101111001000100001000101110111100100000100000101001110101010101010011100100010110111011001110000100001001110111111010110111001010011101101110001000111101000001000001001001010110011110010001010111100000011110000000101010010001001010111001000001000011011111100111100000111100001101101101111100011110110100011 0010101000101100110111010111011100000110100010101010000000001100100000101000001001010001111100000111011100001100110010110011110000010000110111101000101100100110110110000011110101010001100111111100111001111011111110010001110000101001101101001101011001000010010110101110000110001110000100001100010110110010100110000111011010110101100000000111111101101101100101100110010001000110110011111010101010000111 1010110001000011001001011001110100010101010010101110011101110011111011101010111010010011011100010101011010111000111101100101010100011100101011000011101101011110101100000110100011011000010111000001111110111011111010101011001111110010101110001101001010011001000101000110001010001110101100000010111110100100100100111100000100011000011001001000110100101111100010000011011010001001001010111101111001101001 0000000010001010101101101100000011001001001100111000110111110110011011110011110001101100100010101001011001011011000011011001110011100011010000100111000110011110111110000101101101100000111101111100011110011000000010001000000111001001101000011101100110011110100000101101001011100100110011011110111100001111111110010000110100111010111001010110001010110100011011100110101001110101011000011000101010011110 1111110100011100111001001010101010010100101101000001000100101110001001000011110111011011110110000000000000101001010001000000110011101010001000011100010111111111100000011011111011110001111110100001001001011111101010000111110101000010000110100101011100010110111100101011111111101000000000000000011010110001011010110100000011000000111111110011101100000101110110000001001011010011110100010011011100010111 1011000010011001101001101111110011010111101010010100010000000111111111100010111010000110100110010100011001001100110001111101011101110001011100000100101100000100110111011110001011111001001100111110101101000000011000100001011010101011110010101011011000010011110110100101010010000110001010101000000000101111010111011110001010000100010011000110101010010110101000101001110000010001001001111110101110011001 0110001101010010000100011001000110111011001110001010001100101100100110111011110100101110011010001110000110101111110010001001011110001010010101011010010001110010100100101010011000101101001000001111010111001010110001011111111111011110101011110011101001010010010001010000001000011001100101101101000100110010101001101100101111001111101111101000111001011111011011110010100101101101110010111000011101100100 0110110100101100100100001100000011111011100001001110000101100011100111111010101101011010111011010010101000101101000101101001101011001111100000110101100110000110111011100000100101100111000111001001000101010000001000111100000011110110001000111000100010001111011101110000101101100001000100000101101000010100101000011101011000111001110111011010110010001100001101010111101011001000001011011001101101111111 1001100110110110001001111001101010000111010110101100010001110001001011111000000000100000010010000111110011011001101100010000010100010111111010111001110100111000001001100000100101100100100010011110101011100111101010001100011000010110011000110100111111100010111111111010110110001000100010010010100101101100011010000010110100000101010110110000110111111000111001001100101011111111010100111111101100100110 1001100011111010100110110111010111011111110001001111011111110010000100110011110011000110111011000111110011101111000011100010001110110011110111100000001001100100101010110011000000111110001010110100010011000010000010011000010010111111010000100110011100100011111101011101000111000101011000111001011000111000111010010000000011010011001000010001111000110001001100111000000111111111010101010101001000100011 1001000111101111110100001001000010111001000000100001111011010101001101110111110100001000100111101000010011000101000100011001000101011110001111010011101101101010101001011010000101000000100101111000111010000000110101111000000110000110011111111000110011010001111001100001100011111100001100010010011100100000101110001110100110101001010000101001111011011001100010011011100110001010000111001101101000101011 0001111111110001010111110000110000001000010011100110011011111001110101011101000111000100110011001110001101001010110001110111000000001101100101001100110100011001110111001010100111011001011010111110110010111110010101100000011101010110000010101011011011100011011011111110010011100000111100000100000011110100000110000111110111001110010011101110001110000101010110010111001011100010010100001101011101011111 0101111101010110110001111011111101110110000001110011000001010011010110001101000001111110100001000100010000101010010111100111011011110010011011001101000101101101011011010010000010111111110110111100000100100010111111001110110101110001111011101111101110100001010010011111111101000011111001011001011010010111011010100101001001010100101100110011001001101010000110110101101100101011000110010010101000010110 0000010000111101001100101110001001010000001101110000010000001101110001100110110001001111111001101011010001011110011000001011110111000010100100110111100000111110100101010110100100000000111011011111011101101000010101110110110011001100111111010100101001001100110011001111111101000100011011001111000111010010111100101010110010101010110001000010110111101001011010000110010001011010001011100101001101011100 0010011001111001110110100111111110111010100001001001011100011010011001101011111100000000010000100001100000010001110001100011000011100001111010111000100100000001100010101000101101100111011111101010010001010111100100000101001010001110000111000011100011110010111010011000011000011101110000101110011101100110101001010111111011110110010000101111010111110101000001111111010011111000110010101001111000000010 0011111110011000000001100110011101100010100011111100110011101111100011001000001111011010101111100000011101011010011111100101001001100100000111000000010110001111010101100101000111111000011001011001100001010101111010000001010101101001010101100100100010000011000010000101101100000110011000010100111010111011001011110000110111001100101011000101111010101101000110011010100110000110100100101001101000000011 1010000101001001001000011011111011111001111010010110111101101100001100010010101101011110011100111000001011111000000100001000010111010111001110111111000111011111110111101001111111101110000000000111011010100000100000110011010000001100101101111100011011101110011001110111011110011101100100100101010100111001010001111100011111010000000111000100111011011011011111101110001101111001110101110001111100011111 1110111110010110010110000100010101001110011010011101100010010111011100000110011101001100001111100101110010100101011000100010010110110001011000111100111100111001100111001100100111011100011010001000111010001101001101100111001110101100100100101101011111100110111100011010100001010110001010110101001010101100000111000010100101001010110101010100110001000101011101000101000110001110000100100100000000100011 0001011000010101010100010111011010100001011010100100001111101110011100011100101111110010010000000011110000100010100111001110010001000100010000011001101010100110000101100101001010000111110000100011001010011111000101011111010010111111010010000000001011101010011100100000101000001111111000000101100001000011100000011000101010001001000101111000100011111000011001100000100010100011101101011000001000001111 0011011000111010110101011001110011111101101100110110101101000001100010011110101111100000111100110101011011000010101110001111010011100001000000111100100111010110011010110100111010000111101101110011000001010101100001000110001001011110000110000101110011111011110111101101011011010111101100111111111111011001100110010110010110111000001010110111110111111100011101001111001000111000110010011111001000111110 1111110010010100000010101110000011010000001011111101011000101001011101000010110111110110011101110110000111111000011110111100000000100111110110001011011011110010010111001101010111111100101111100001010001010000100100011010111001101101110000110010001011000101110000000000111001000110110111011001010010011001101110010000001111111010100010111111001011010001110001001101000001000111010111000011001000110010 1110000001010111001001110001011011101110101110000110101001001011110000111111001110011101101000111011110111100011110101100101000100101010111111011010001100110110111110001110111001111100011010110000101011000011100011110000000110101011101100110110001011111011100110101010001000000000101000101111011001110111001001110111011001000101111010010011101110111110111111101111101100100011010000100001000000001000 1100010111110101001011111111010000000111010100100111100110001000110111101000101011001000111101111001101110011100111101011101001100100110001010101010010110001110111001011111110100101101000011011111110100101110110101110100010000111001111101100111100101010000010110101101000110101011110001011010010001111101010101011011101101101010100000111000110110110111101010011101100000000101100011100010110010011111 1001000110011001000010110101010101110111101111100000110010100100010001110110011010010011011101111011001011001100011100101110101001001000001010100000001000000011010100001001000100101101011011011000101101001110001010011101111001101000111011110101011011111100110101010110001110100101001000000111110001111110100011111111010011101010101110100101000101011110000001010110101111000001111011111011101010101110 1000010110110111001110000110100001000011101000001110100100010000010001010010000010101100110101100101010110100000100010101111101111111011101010101110110100000011000011011111000111111010010110110110001111000011000111001001000011011100110111111011101111000010000110001101001000111010110111101101101011110111011100010100001110001001000110100111010100011000000110111010010110011111011111010011111000110110 1000111110111101111011100100110001000100011101101101001101110001111101010001111100110000000110101001100100001001010000101110001010000010000011101011101001101100011010011011110110000011000011111110111110101001100000001100100011000110001100010110111110111001000011001011111000110111010101100011111010000011100001001011011110101000100001100001010101000100001111010110110110010010000111101011011111000101 0011100101010010101111010110001000000011110110000111000110011100011011000010010010011110101101101001011100110010010110111000100011111101011001011011100001011111111011100110001100100101011011010001000111100000111101101100011101101110000001011011110011001010100100100101101011010010101101010111000001100111001011110000110110011010101101011110110110100000101111010000000010111110011111100011001011111111 0011110001000101101011100100100001000011111100010100111111001100101111100110101110010011110100100001101011101101100100010011111001111111101101101010000110101011110010101010110100010000011111000110000111110001001011000000000101100001110001011011001010010001110001010011101110011101011111111001111001001111111111111110110111001110100100111111010010101110000100100010111001101101110100111110010110000001 0101000000100010101110111100000111000000001111010001010111000001100100000110110011000110011011010110000100101010011010000010100101001001000000100100000110100010001110000010111000101000100111001110010110010110001111011111000111111101010101100011101100100110010001011101011010101010111110001010110010010010111010100000010011101110110001010010001101010111000000011010001111101001111010101001000101100101 1001111001101110010010101100001011000100001000001100111111010111011000111110001101011110011010001100010011101101011101001011011100001101000011100000000111101000100000001001000001000000110101010001010110100010000111000111101000011010011111001000110000000000111110000110100010011110001111101010110111010111101101101001111000010110000100100110111011101111111100111011010001011111100000111100100010111010 0000011000000011011101101111101010000110100110110000011000110101111001111001100010001000101110100001111101110101001111111101101101111000010100001000011111010010001101001110010110000110101000110111101101000011010110011000011110000001111011110110100110100010101100111111011000100010100010101110011101100100110001110100111010111011011000100101000001011001001001100111101110101101110010011111001000010001 0101110010000111010110011101000100110010101001011110001111011100000110101000010000101010101100111011010011101011100010000011001000101000011111001010100001011010110100100100001110101111111111011001100110111000110100110100110010100000001111101001000110100000010100011101100101000111010000100101011001000011010011111110100101010110110100000010001010010010000011011011010001011101011001101100110101100100 1111110101101111110011101001100010111100101110010000010110110011100000001101110100011110110101001011101010110110001101001111101001110001010111011110010010010001000100000011010111001011111110011010000100101101010101100010110111011101100111001110110000110000111111011010010010000011100010010100111100000101011010010111001011111010101011110000100101010100011001111100011001001011101100011110110010101001 1001110010111011011110000001001000101001010101101100101001000111111110100000010101110101101110001110111001000101101101010000110011111000111110110000100010101100110001101111001110100010110110101000100101110011001100111100010001101110010011100111111110011010101011100111110000101101111010101110001101010111001111000110010101111100111010010111000100111101100010011110000110010000011111011010101110010100 1001111111001010011011001110000100011000100001010100000010100101111101011100001110010001100010011001111000110010111000011101010111100000000110000011110111111001110000000111011001001000111001110001000110100000100101101011010111010010110000101011111111111111001010101110100000011011010010110010100011011111100001010111111111000100111100110010111001001010101010001101111001110110100011000110100000110001 1100010000000010100110010000111011010101010100011100100010011100001011100110100010101111110101101100010001100011010011110001000010110100001011000000001100111000111010110101101100100010110100101001010111010010000011010011111001111010001011000000011010011101010101101111101110110100001000100011110100011011111001101000010010100000011011001111111101000101111111111000100110001001100100001111110101111110 0010011000100100110011100010001100001000000010111010101001010010111011101100011101101000001001100110110001111101110101001111001111010111000011001010100100111110000100110000001100100100010000111111010111100001001101000110001100100100011011101000110011010011011111111101100110000110101100110011011101011000101011101001011011111110001111111011101111001000101110001011000010111001011011110010101111010011 1100111111100111000110011011111001100101111101000001110110001111011011101110101010110111010111100011110000011111101011011011111101100101111001001110110000000011100111000101000001010010011001011010101001110101111110001001000000001101010111011000100110100001011100011111101100010111101001111010101010111111010011001010111100001111000111010110001001111111101100001111000001011100011010011110110011100001 1100000111110110101101011010110010011110101011101010010010010011001111111010101011011010010001001110000000110000001100111001111100100100100101101110010011100110101100100001001111001010111111011011010101010100011000010011100110110100100001100111011000011010011001000101011111000111100000100011101111110110011110101110001100101110110111010100111111100000110001100001100111111101110000101011101010110101 1110111010110100001010011111010101100111000011010111001011010011011100110100011011011100001011110000010001111001010000101110101001101110000010111010100110011111110011101100000111110000000001011100111101100011010011101000010110110011110111000100110100100100111100010111100101111101111001000111000111011111101011000011111111011111110001011000101001100100010001110001111101110101001110101001111001011100 1001000000000111011111011101010110010010110110010111010101000001011001110101010110101110101011001111100010011010011001010010111011111000001110101010011001101111100010000110001001010011000001010011011010111001110111101100110000011110101111100111101100100110100100101010000010001111101101000100000010001110110011010110101101111000101000000111111110011001110101010101000000101010110100110001101111011001
cTrader Algo

【cTrader】水平線で音鳴らす【SampleIndicator】

6/6/2022 8/18/2023

3年以上前の記事です。内容が古くなっている可能性があります。

水平線到達で音を鳴らすだけのインジケーター

久しぶりにcTraderプログラムのサンプルコード代わりの単純インジケーターを公開してみます。

コメント欄から「水平線で音鳴らすcBotできませんか?」という感じのコメントをいただいたため作ってみました。(コメントありがとうございます!)

機能としては「チャート上の水平線に価格が到達したら設定したサウンドファイルを再生する」というだけのものです。

cBotではなくIndicatorとして作ってあります。

単純ですが人によっては有用に使えるのではないでしょうか。

 

ソースコード解説

全ソースコード

using System.Linq;
using cAlgo.API;

namespace cAlgo {
    [Indicator(IsOverlay = true, TimeZone = TimeZones.UTC, AccessRights = AccessRights.None)]
    public class HorizontalLineChaim : Indicator {
        [Parameter(DefaultValue = "Alarm01.wav")]
        public string SoundFile1 { get; set; }
        [Parameter(DefaultValue = "Alarm02.wav")]
        public string SoundFile2 { get; set; }

        private double _exBid;
        protected override void Initialize() {
            _exBid = Bid;
        }

        public override void Calculate(int index) {
            if (!IsLastBar) return;
            var lines = Chart.FindAllObjects < ChartHorizontalLine >();
            if (lines.Select(l => l.Y).Any(price => price < _exBid && price >= Bid)) {
                Notifications.PlaySound("C:\\Windows\\Media\\" + SoundFile1);
            } else if (lines.Select(l => l.Y).Any(price => price > _exBid && price <= Bid)) {
                Notifications.PlaySound("C:\\Windows\\Media\\" + SoundFile2);
            }

            _exBid = Bid;
        }
    }
}

はい、これだけです。短いですよね。自動生成されたテンプレートに数行追加しただけです。

インジケーター始めてで自動生成コードの意味がさっぱりわからんという方は先にこちらをどうぞ。

今回は表示させるものがないので5行目のIsOverlayはfalseからtrueに変更しておいてください。falseだと空っぽの別窓が出てきてしまいます。

7~10行目はインジケーターのパラメータとして音声ファイル名を指定するようにしました。

“C:\Windows\Mediaフォルダ内ファイルで指定する形にしてありますが、自分で使うために改変するならパラメータ自体なくしてしまって21,23行目の命令文に直接ファイル名指定してやっても構いません。

 

「到達したら音を鳴らす」やり方

「到達したら音を鳴らす」をプログラムで表現するにはどうしたらいいでしょう。

単純に値動きがあるたびに「その値動きにより水平線をまたいだ(もしくは重なった)か」を確認して、音を鳴らせばいいですよね。

式で表すなら上抜けなら「1Tick前の価格」<「水平線の価格」<=「動いた今の価格」、下抜けなら「1Tick前の価格」>「水平線の価格」>=「動いた今の価格」ということです。

インジケーターにはCalculateという毎Tick実行される関数がありますので、そこで上記の判定をして音鳴らす処理を入れてあげるだけの話です。

・・・と、その前に「今の価格」はBidという変数が用意されてるのですが、「1Tick前の価格」というのはIndicator側で用意してくれていないため、自分で用意する必要があります。

12行目で定義してる_exBidがそれです。毎Tick更新する必要があるためCalculateの最後(26行目)で_exBid=Bidというように更新しています。

 

Calculateのコード

if (!IsLastBar) return;

18行目のこれは今計算してるのが最後の(=今現在の)ローソク足分じゃなかったらなにもしないようにするためのおまじないです。

インジケーターは初期化後ローソク足の本数分だけCalculate()を実行します。このインジについては過去ローク足分の計算は不要なのでこうしてます。

var lines = Chart.FindAllObjects();

19行目のここでChartのFindAllObjectsメソッドを使ってチャート上の水平線を全部集めてます。

毎Tickこの処理をするのに抵抗があれば、初期化時に集めてフィールド(メンバ変数)に持たせておいても構いません。ただし、その場合は水平線の追加削除時にフィールドの値も変更する必要がありますので注意してください。

次の20~24行目部分が本インジケーターのメイン機能部分ですね。処理としてはこうしてます。

if(価格が水平線のどれかを上に抜けてたら){
    File1の音を鳴らす
}else if(価格が水平線のどれかを下に抜けてたら){
    File2の音を鳴らす
}

ifの中はC#のLinqという機能を使ってるため、知らない方にはわかりにくいかもしれませんが、下記と全く同じことをしています。

foreach(var line in lines){
    var price = line.Y;
    if(price < _exBid && price >= Bid){
        Notifications.PlaySound("C:\\Windows\\Media\\" + SoundFile1);
    }
    break;
}

(「価格が水平線のどれかを上に抜けてたらFile1の音を鳴らす」部分のみ)

Notirications.PlaySoundはcAlgoの機能で指定した音声ファイルを再生してくれます。

注意点としてはフルファイルパスを指定すること、文字列内のパス区切りは\\で表現すること、ぐらいでしょうか。

 

これで完成です。

これだけじゃさすがに機能少なすぎるかもしれませんが、自分で作るならここから好きに編集していくことができます。

ぜひ理想のインジケーターを作ってみてください。

 

(2022/8/12 追記)

現時点ではcTrader4.2で機能しません(泣)

先日アップデートされたcTrader4.2ではFindAllObjectsが効かず機能しないようです。明らかにcTrader(Automate)側のバグですね。

cTrader4.2で機能させるためには18行目あたりに以下の1行を追加してください。

Chart.Objects.Count();

コード自体に意味は無いです。意味は無いですがこれで機能するようになります。

FindAllObjectsが普通に使えないというのは結構致命的なので早く修正してほしいです・・・

 

(2023/8/18 追記)

上記気づいたら直ってるようです。cTrader4.8で追記なしでこのまま動くこと確認済み。

 


まだコメントはありません

新しいコメント

コメントは承認後に公開されます。承認まで次のコメントは投稿できません。

cTrader's Life

© 2026 ajinori