0110001011010011000100100110101110110101100000111010101111101101111111011111001010001000110011111110010111010011010111101100010111001001111010011000011110001111011100100101100101011111101001011110000110011011011111111101100110101001010110000001010100111110100110110011001000000110100011001110000111101101010001111011011101111001010110111100101000010101001001101010111111011111101010110101100111011000 1011111100001001000000000000111111011111000111010110011101000001100010011010110011100101000001100100100010101110111000011010100101001000010100110011000101110110010100101010101100111011001111110101100101111111000110111010000100000111110111111001001010010111100011101101010111111001111110010100111111101100010110100110111110011011010010010000011100010100010101101100101110011111000010110000101001100011 0101001001000110101111010100001100100011010001110100000110100011110110101100011111110011000001100101111110101110101001011000011100010000010101110000000100111000100101001010000110011111111001101111101000011101011110110001000110101001001111000011110100100000100011000010100111011010101100001101001110010001000110101000111111110000000000100110011000110110110101001010001110010001101010000100010000010101 0101110110110001011001010100011010011000111011000011100010111101001010101011000111111000101111001101110011111011110000111001010110100000011010101110110010010100001011000001011010101101000001101011100100011110001101110100101010110000000000010111011111011111111101010010000100000000010110110100100110011001000111011111101000110100010010001111111001101001000110100110000011110111110001101100111000101111 0111101100011110010110010000111010101110000000100001100001001110001000011000011110001011001010110101010010110101101001100000101001101000110000010101011001101111001100001111100111101000000100001110110100010100010010101101110001010011000000101110011010101101000000111000110011111110100010111011001110011110111010100100011101001011000001011000110110100101000110001111110000000010100110111010101011001011 0111001010101100011110010101101111110110010100100001101011101111000110110100011000011010000001101010100100010101101001000001011010011001011101011000101111000101000011010111010100010111101100100010100111101010001101111011000010100000100101011111101100110000110011111111011000101101000110101110110001010010110111110010010110011011101110110100000010100001100011011111110110001011100101001100011001101110 1001111011000101101011101011000100111010000001010000111000001001000010000101110000110001000101000100110101011101010010011001101000101000101100111110110100111000000001111111100001100010011011001101101110110010010110000011110011111100111010001111011001101010101101100110001011001010011100010010000100110011101110101111000001111000001001000001111111111101111100000110010100010010010000010001010110110011 1101100111111111100011010011011011000110011100000110101110101011000001101001001000010100000011001101100001110100011011101010101000111001001101111111100100111000100000011001011100100000001000110011111111111101111111010111010110111000001001111000101001010000101011101111011000010110001001011001010011000001111111110000100001001011000111101000010111101100011000100001111101110100010011110011110010011000 0100001100101001001101010001001011111101010101100000111001001100010011001101010011100100101001101010100011111111101110000111110001000011100010110010000000010101000111100000110110100001010111100110111001011101100001001011001100110101001010110001110001110101110110100101101110110111111110001000010111001001011010111000101100111011111001101100111011110000011000111000000100101001111100100001110000001010 1100101111111100000100000101001000011111011001100111010001001000001010011111011100000010001100010100011111111101111100011100010110101111001000111001111101010101110100000010111001001110000001001100000001001011100000110000000101011001011000101000011101000000000101111000101111101000111100000001101111011110100000110011100000001110001101100001000111111011010111011001010100101001001100010000101000011110 0000100111011011010100101110001011011101011101101001100100000010100111100010100111101011000110000001001111000011111011011100111100111011010101110010000101110010110000101100011100111111001010110110111110111000110111110011111100011010000100101100110111011011010001111011010011011001000100010101000111101111001101101000110111000001001100001010011001010111010011110010010000000111000001101010111010111110 1011110101011011010110011000111010110001011100111110101101000000101001101101101111010111011100111100100010000001100001000101010101111000011010001100100110111110101100111111110100010001100101100110110001011101100000010110011000110110010001110110101101101101101100010010010011011111001001100100110101000101001011100011000010101100000110100110101101100100111001111010111000100001011111101110110111110001 1011000001110000101101111001100111000110010011111011110001111100000101000111101011001111111111011000111001001100011100011010110001011110110001011010111110111100110101010010001000110110100010010110111010001010101100001011001011010100101100110001000011010000000111010011010001001111110110101001010010000100010111010101000000010001011111000000001001100111101111110110010110100110110100100101111111011111 1101100000010101110001111010000110101010000001111000111100101011010010000110001001111010110100111111110111011110110110011011101001100000000011100111011110010100010001100101111001000110100010100100010110101001001100111100111000001101010101010000111111001010000110000111100100000111111111100011100100011011100010011111101010000000001111101011011000001011111000011001110001001101110000111111100011000001 1111011001110111110001000010000110101101011011101101011111101101100111111000000000000111101110110100010001110100100101100100000000011110110111011110011110010101101110111010001011100011100011101000010110001101111001100100111110100011110110011000010100010001111000110000001100111111101111010101001001010101111000110110000100100011011111101100101001000111101000110000011001011111110011101010001010000101 0101110001100011001000011010100110010110011110111111011001001110110101101111000101000111110010010000001010111001001111011111101100100000111010110010001110110110111010101100000111101011001001010001110110010000001110111110001001011011111011100111000110001101000101001110110100001010110000000011101101011111110010011101100110011011110011100001000111101010110101000010011011100101001101101010100110100101 0001101011010011000100010101010011001100011000110001100100111101101110011101111000000101010010001010011010010100010000000110101110011111100000101011001001101001101001001111110101101110010111010000101111101101000111100011001010000110101100100100011011011010110011011100010110011001001110111011001100101110100100100100110100001100111111010100100101000110101111001111001000011111100110111110101101111010 0000110101110010010000001100000111000111001101011001100101011011011010101111010110001111001000001101001100010010110011011101100110110110100110110010011111100000100001011110111001110110111100000000000011100000100000011110011001111010110110011110111100000101001101110100001001101110111010011110110010110101011010010011010101101101100100001000111111100101101001000001101010101011001110111100010000010000 1001101011001011110001001101010101000110110011000010001000111001001011100101101001011100110110111111010011010111100100110011111101011101110100001000010100000010001000101110011100100100111000110010010010001010010101011101001111100000110011001010001001001010100111101101101101010011011000011111010000101101110100010001001101010110010001101000111010011011011001110011101000011001011100101011100100011111 0010111100010001000101011100101111011001101101101100010010000111000000111000011101100000111110111100100111001010001010000101100010011110001111011110001000001111101101110110111111101111110100011010100000000110111110010001111010000010010101100110100100100011111110101000101011010011110101001101100111111111010100011100101101010010001111111100100110010000000100111001010001000101001011010111101000101010 0111110001101110100101100001110110100011110101111101001110010110011100110111010000111001000111001010101110000010011111101110111111000001000101101101011111000101101101011011011000011000010001101001111111010000111110100101110010011011000110010001001000100100100110000001100111100011000000110111101110110011111001111110000100001101011110101011100111001000011110001110000001110111011011101101101110101100 1111101010110100110010010100010001010110010001100011000011000101000100000111011101001100111111101110101011110000010111011011000011000010101000010101011110010010100011111101100010111010010000011100110110110001010101010011111101110010010010011110100000111111100000010010000100000100001000101110100010001011010100000001001100010010101100010100111111100010100000100110101010110001101011100110011100011001 1111001100111001011000110100011000001001000001001111110010000110010010100111100111111000100010111010001110111011101001000010010001011001100010100100000101011100011000100100011100101101111000001001101011001111111101100011011011001011101100100110111001010101000110010001101100010011101100110000111000111100111001111000110010011100111011100100000110100010111010010101000010000010000111010111000000001101 0010110110110110101110110101111110100111000111000100101001111101100100000100011100110001011010011001101111000000100000000000100100111010011111001001010110000010010100110101001000011011000111101100011100110111001011111101111010011010110100100010001000000000101001011011000010110101111100111111110111101010000000010010100101001110010101111101101100100110011001011101001001001011101000101010110101110101 0111001000010110101101001100110011001110100100101101001011010110111001110100111101100111010110001101111011101111100100101000001010001111001011111111110101100000000000110011101100010110010011010101010010100101101111011100110100011010101011101010101010001111100101110001001111000010010110001011001110110010001101111011100001100010101000101010100010001010011011110111010011010110110110001000100000001011 0101110100100011101110110000000111101101111101111011000111111011101001100111001100000110001000001110011110110100111110010001010100001111110011100111010101000111000000001110011111101101111111100110010100011101001011000100110000011111001101001000111100011001000001100100111101011110010100001111100100101011110111010110010010110011101100100100110000000000011101001110000100110000111010101000111001010011 0110001000101110000110100001001101110100111110100001001110100001111101000011111000111001101011110110101001000110011110111111010011001100011101010010101000001010110110110100101101111110000111001101111110001000011111001001101111010110101010110110100100110010111110001010101011111101100001100011011100001001011011001100101101001010010110110011001111110101001110001101101111001010110000110010110000111100 1001010000100111001100101111011011010101011000011011000001101001011001001000000000100100101001010101110111000100101010110100011001111011111100111110111001110101011101110001111011000001011111011110000101111111011100100101110110000101010101000010000000011100100110001110011001100011000101010101010010001001011111111011000010101111100000000010111000001000000111100100011001100001010011111100011101001110 1011100110100001100001001100110111100111111100101110110000110100111111010010111100000001110110001100001000101010001111110010111110001111101010010110111000000010010011010100001101011110011001011000110011110100100010110001101001010100000001001100100001111010101001101000101111010101001011010010011011101001100111111001011111000100101110000101000111101101011000110000111101111111010110100010011100001011 0110011101101110101011001111010010010101100110000100011011110010101000000000010010001101100000001001110000000010111111110101010111101010010000101000000011001000001000010001111101011111100100100011100111100001010000111111110111111011111110101100011001110100110100110110011111000010111011000001000010110111001110111101011111100100010001001010110011010111010001100011100111000011100000101000101010101100 0110111000011001011000011010000011001000110001001101101001100111111000100011111000000001011100101010110001010100110010100110011100011001000101011111001011000110011100110101000010010000110010101011011000100000001101011010000100100000111111111000010100010000000000000101110001110001001000101001110011101010111110100111000111011001010011101001101111101010101011100010010011111100000001010110011010001110 1100000100110010101011111010110001000111001101011100100000001110010011011001000111110000011000001101000011010000010101111101110000100011010010000100100101001010110001001101100110111110100010100001011011000011011110010100001100111101001001101111100001110011100110010000010101001010000110111100010110011100011000011100000010101001110110111001001100000100010100001111100010001101011000011001110011110110 0100011011001001110010011100110100000000111100011111010011010010010010100001100110100101001100011111100101011010110110111100010110001101110011010100111010100010010000010000010011011100101101000111101011100011101101111010101001000101010100100100111111110000001001101101010010001011000000101110001011000001100101000000110100101111101101110111111011111100011011000011000110011001100101100001111000011011 1100010010000111001000000100111101001000110100101111010111001010110010000010000110100001110011011111000000100001000100000110001001101010010000011101000001101101110100111001011100101010000000010000011001100110111010001010111010101000011100000111010110001011101110101111100011000110000110110000110001111100011010001111111000100011111000001010101010000010001001100111011111010100111011111110000101000010 1101011100110101101000110110111000100110100000000010111001111010000010100110101110100001000111101110010001111111010101011000001110100101111001010100100001110001101000001001011000101001000001001010110010101011101100000101110100101100001110101011010010111110001010000111101001011011000111110001111110110110000101000001010010000010010010111110100111101001010001110111101011001011100011000101111000001101 1000011110101000010110001111101100111010000010110101110000111111100000000110111110010010101001100110100100010111010110011110101100101110100010011011011000010100110110011010001101110101111111001110010111011001101111111001011001100011010110111101110100110110011101011010000001011011101000110011010011010100001111100101100100100100000011010111011111000011001001001100110001101010010110001000000001100101 1011000010100000100101111010100011011111101111110111100010100100010111100100010110101111001111000000001010110100111011110011101111101101001101100010100011010010000000011101111110011011101000011011001111010000110011000010000010000110111100111110011100100011000110110001110101111111000101010001111111100000100111111000110110010100111000100000111011010011000100100011111100100011010001110001101001111100 0100001111011000001101101000111011101010100110101100011011101100000000101011010100101101110001111011001101000000111000010100100100011000110011100010111001111010001011111000111000111110100111001000000011101010101000111101111001001001000110101101000001010111001110011101111110101101101110001001011110101101000101100111101001001100000000010010100011001100101111101011011000011001101100000001100010110101 1011011011111000001101110110001001100011111101011111101100001010101111111101011100010110111010011110001001011111110011011100110100011101000001101110011111110000101110011110001010001111111011001110011110111011100100000100110100100111011001010100101111001101010100001001001011010110001011110010001101000110000110001000110010011010010000010110000101010100101111110010001010110101010010010001000001000101 1010010001011100110111000000101100111010000111011110100101001001000100110000110011100101110101111011111001111110101110101111100100111010100101000000111011010000110001100111010100001111001111000010101001000000001011011111111100100101000001000101000101101011101011111100011001101000100100110101101000011011101010111100101000101101010010000001011011011001010100110100101111001111000100100000100101111111 0000110111001110010000100100101111110011001001011000010100001000110101001011100100010110100100010010010100011001000111101010000100111111010111011010110010101001100000011111100101100011010110001111100011100111000101001000101101010100110000010111000010110000010001000110010101000111110000000000100000010001111100000011110111101011111110011011111101001010000111000110001011101001001010001011100001100000 0100001110000011011100011101100011001111110011000110010010001110101111101111100000111010111111011111100011110011010000100101110011010111101110101001011111001110000101100011011011110111010000110000000110011001111110011011111000110011001111000110001111111101000100100100111101110011011110011000000011111110100111001000110110110100111010110111100111011010011101000011011001001110100001110101010111110110 1010011101111101101010111110010010001011011100100101000010010101001111100111111111001111001000011001010101010101000011000101110010011110111001101000010011101010010011000100010100111010101011001001111011001100001110010100010010111110110101010111011110011001100010111010011111001111001000010111011011001110100110100110001111111010011100110101010110001101011101100111001111010100100001000100001000000100 0100100001001011010100010111100100010111110110111101000100110101101010001001010001100010111111011011001000010011110010011010011111100110001010011011101011100001001001110111010001011110010111010010011111101011010001101010101100101000111000110111100100111001100101111100001001110110000110011000011100110010010101100000111101100110011011000011011000111101001111000011111010110011010001111000111010100000 0111111100001011101001001101011000000011100100110001010001100000000011001111001010000111010011111000100101010011110001111001101111101100001111000000101001000110010000001001100100110010001111101011111000100011000010000101011100011010000010110010001110110100010011010000110111110010100011001101110110000100101001110011011011011100101001010101100011100010110110010001011011001111111110101110111101010101 0000101111111011110110000101010100100101101100100011111010111111110100110010100011000111101011000100000001111011001110111010100001011001010001100011011101011111111100001111011011111001010110111100111110000010110110111111001001000100010001010010100001111100111011011011001001101010001100110110110110111010000101001010000101100111111101010100111001001010010100111011001011110111010001011100101001110111 1000100101111001011011001001001001101111110001011101001111101100010110111100110010110000010010000010111111110000011001111101000011001101110000111000101111111011000100000111011111010100100101000000000111100010100101011110010001001000010100111111100111111111111110000101101011110111011100000000111000011010111000010000111000101111110110110110101101010001010110000111011111011001011010110111000010000101 0110110101101000100100101101101100101110011011100000010111100110001111010010110111111000111001000001001101010110100111001001011010011000011101100100110010011001111101011101110001011000100011000001011110011100010111001001100010100101101111000110111001111010011011000001100000001101111001011101100111011010100010110110000110010111000111011101110101110110011000011010100101110010111011011101111111011100 1010111111000010111010010100100110010011100111001110100111111100010001000111011000101100011011110111001010000010101101010101110010000011100000010100100011111111001001001101001111011010000110110100110011100100101010000111110000010100110001101001101101011100011000010111010011101101010001011100000010110101000011001000110101001000111111010100100100101010101100001001100001101100111000001000101000101000 1011010100111110010101000100011010100001001110011001110001001010010100110000001000110000100000101110101110100110010011010010011111001111101010110011001001110000111010001110111010010101001011010110110000001000101100000110000000010010100011101001101001011110000010000001110001110101001010011100111000100001101111011011111001000011000110010110000011111101101111001010101110111100001011110101101000100100 0100111001110101110001111101110110111010101101010110101000001110001001100011010101011011011101011010000011010011001011000101110010011100101110011001111010101110000001110100101001100000001101101101001111001011011010000011110010010000111010100101001001011111011001001101100001001100100100100000000110110101001001001100100110000000010010010010010011111001111010001101111001000000010000111001001000011000 0110110101101101001011100000100011011100010111101110010100010001111001101011101100101000010000001111001011101011011001101101110111000101010110011100101001011111100101000001110100011101100001010110110110011111110111001101111100100101001111001001010011111011111101001000010100001100011111011001101100111010001011001101111011101000000000000011101011111100000110001000001001000110000001000100011110100010 0111100000011101111011001001010101111010111001111110110011000011001001011010011101000001011111001110001011011000011110110100000110010001000010000010000100101101101011000010100110011000001001100011111010010100101001110011011100000010100000011000110001011010010100000000111101011001010011101110010110000001111000011111001110010111100111100011011111100000011011000110000001110101111101101110101111100100 1110110011001011110110100111000001101001011111101101011111000001101001011100101000011001100111111100110011100000111010001111101100010110010001111011011111110110011100000110011011111110011110100111010001111000011001111100000001011101110101111100110001001111100100101101111101110110111001010101101111000001001111011011010010011001000010001000111101000100000001110010101000111100111101111010000101100011 0111001010011000001110011110110000100110100000010010010011000110111111000001111110011011010011011010111110001011010110010000011110011110001010100000001100100100111010000101001110111001111101001001110100010101111111010101001001000111110011101011001100010100000110001011000100001101001000111110101000101101001100111110001101000100010100000000010000100110000000110100010000100001000101001011010111101000 1111100110111110111000011101000000000000010110000100100110000000110001100111011010010010010001101010001111011111101011111110100000001000111110011100110001001110000100101010000001110001111101000000101011110100000001101101000100011100010000011110111101100101110110110000100011100101000100101010010101101001001000000100101111000001110101001101111001010111110100100001011000010010011100110010110110111111 1101111000110001001110001101011001000010100001101000011111110011010001001001111001111111011010110101100100110001101110011001010100101101110010001101011011010011011001000111010100100100111011001100100101011111011001001010000000001000111010001000000011000101001001010011111010011010011101010111110010111111000111000011110010010100110100111001101001001100001101111110010001001010100011000110110011010111 0111100101101110110101011010011110011111010110110111010100111011000111010101101010110111011001011111110011100110101110011011100010011110001110001011110010101101011000110110100110100101111100100101100001011011110000011010110100100100000101100110010100110111000011111010001110111000100001011111111100001001110100100000011100001110010000101110000011110000000100001101001110101010001010100010000001101001 1111001111010010100010001011110000011010011100101111000101010101011010001100100001000010010111100110111010111011010110111000110011100001110000111100000001110011011000100011001001011001111010000001111011000001010001100011010001101000101100000110111100011011110111010001001111001111000110001000010011110110101100100010111011011101111010001100001110101000111111010101101100110110110000101100001111011101 0011100101011110000100000101101011001010111000110101010011011101110100100010100011101010100101000100000100111010000011100111011011000011011011101101100100001101000001001110110111101111001011000111111011100011101000000011111011101100100010001111111110101001010001010001010011110111011011000011001011111111011111101000010000010000000111110000010001010110011111101111110110011001011111001110010111000101 1100000001110011010111111101010101111101101000000000110111001100100000001010101111000000010011110011001100011111011101011110110010010001011001011010101010000101000111101111110110001100111101001011110011011110000110111001100001101000100001010101011001101010011100101000100110000110111001000100001111011010011111001010111100101010101100011001001011110101100111101111100100011000010000101100000011011110 1000111100000011111101011010011100010010001110001011100010110001011100110000000011100110001000101100010111011001010101011000000011000110100111000010001110001101011111010000010010100010001101011010110011011101101101001000110101100000010101101110110011010100110011010011000101001111110111011101100110000010101100000100101010001100001101010010010111111001100010010011111011000101101010110001001011100100 0101010001001011000111000111001001001110101100011001110001100011010001010111100000110010101100100111110110110011101011011101100101100010010100001101101100100010001111001111011110001110000000110111001011001111101010000010101010111111011011100101110100100010001100111011110101100011001001100110010111011000011011010110001110111111111011000000010010010101001100010001101111010100010001111000100010001110 1101011001001010010001101000111110111111101011111101111110011001001001101101111000111101110101111100110000100111110001101101001010111001010010010010001100101011000100010101110100100111101011011011000010001011111110110000001101111010111110100000000101011101110011011001000000111100100001011010110111101100100001010101100000010111101011001001001101100001100100011100001110000110001111110100111001101111 0110110100101101111001011001011101111000111011101001101000101101110100110111010111100110001110001101110010001101001001111111111000000011111110000101100011010001111010100101011111000001101000010111011011111011010000011010000110100101111100100101111101110010100010010111000101011110101110011000011000000100111010101111100001011000100111110111000101101111111000011010110001011000000111101110000100011111 0010111111010101100000101011011011011111001101011000110010011001010111111000000010011100111011101000110100000010101011010010110011111101101010010110110010011011011000101011100001101001001101011000101110000100011110011001101111010110100101111010101001001001010011110001101000111110010001011011111010100110011000100111110000011111001110110000000111101011011110111001110010100100011001001101111110001110 1101010100101101000000000011000100111111111010100000010100100110100010010101001010111110010101111111111111001101101110001011001100010001111001010100111111101000011101110100000000000110010000111100010111011110110000001011101100010000111011100111110111111100110101000011111011110111100100101000011000100110001001011101011000001000100010100100101000000011010000110010001001101010111101101110110111000111 0110011101010001100011011100110100011011011110100001111111001110011000001101111111010110110101110100000101111100001001000011001110101001111000010101000110111011011111010101111101000010110111111100111100011111010011100101000001010110011101011110011011110011111000000111011101110100101001111110001011001100000001000010010100001101111010100101101110011000101010000100111111100101101100001001111110001111 1001010001110101001000011110011011010010001010011110010010110000011101110101010111110111100001010111000110000001100000110101011000110100010000111001100110110100001111100000111101110111101001000110001010111111001110001011001001111000011110111100011000000011110110000000010011000100010110001101001001001111110111010011110010010101100010110011111100001111111110000100111001101010001000100110000010111100 0100010000110100110111000001101001101001010111011010010101101001010101111000100100011001000100110001100110011001110010000100001000101010010000100000011101011100111000100100000000000101010110001111011100110010001000000001110010111110101101110000000010001101010101011100011000010011011101100101101001100010010101101000011011010100001000011110110000011111101111111010101110111000000111001101011000000011 0111110001111010111100011011110011001110001101000010010111100110010011101100111000011111101011010010010001010110100100110001110011011101110100100011101100000010011101101001101100011110111000000101000101011100110111010111000011101010010111100100001100000011001111001111000110100100001101100011110110010101110101001111001111101001000010100100110011001100011111110000010111011110000110011100011111101110 0000000100010110000010000010010001001000100110011100100001000000000011010101100110011111000111001100110011111011010000000011100110110000000001011111000110011101000000010010111000111000010001100100111011111100111101001111100010011000000101101111111000100000010110001111011000110111111010011110100110011000100001011111000100100101100101111110100101101011111000111111110101010010101010001011000001101000 1001110010010110010000011111000100001111011100110101000011000100100101110000100101101011000110100101010111000100100110111110001010110110011010100110010001100111000000010011011000110001011001100100110010100100101011101110100010100000101101000011110001010011001111100100000110010000110101110010010110100011010011011111110111010100001011101011101111111001001111110100100011101111001000101001111011011110 0011010100100100100111001011000111100011101111110011001001101101100101101110010110011010100110101111011100010000101101011000001000010001010000100111100101111011011010101000011110011010001001101001110100110110110101000010010111101100011111001101001010010011100100101110100011001010110110011010011011101101010110111100111100101100010100000000111100110010000101011010010011111000011110001010001111011000 1011001100001000111100111101101011100000000111110100000001100101001100111110010011011110011011110101110110001000110100101110011110001110111000101110111101110111001100111110001001011001111100011110001111010110110000001111110001000010111010001101010110111111111101111110000101101100111000010001001001001000111011100011101111001111010111101100100110111100010101101011111110110101011111010101111101010111 0011100011011101010101101110101110000111110101100000010000100110000110101110101000111010110001001001101011010011001000110101001011001011111110111111111101010110111100010011011100100100000000100100110100000000001100011111001000010110110001001001011110010000001010111111100101100101110101111111001100100100001110101101011010101100000101010000011110111111011100111110000111100111010011110000111100011101 1110001010100010111000011110011000100010010011000010010111111101101000001000100100100011101111110101010000100000100001101100100101100010100000011000111000100010110111101101100111110000001010010011010000011101100110000110101101110110001010101110100000101000000000101010010101010010000100111010000010011011111010000101100111110000100111111010000100100010100011010110110010000001001110100100111000010101 1111110001110000111100100011100111010101001010111101100010101010000101001000111001000111001111101011110000000010010001100001011010111010100101110100011100110011011011000101110101110111011101000111010110101000010100011101001010110000011010011101000110110001011011001010001010111011110101101010011101001011001101010100011010011011010100111010001010001000110011011110101101001110001010100000110100110111 0101001111110010101010001110010101110001010010100010111100100101010000110011000001100000001100101011010001000100101111110000011111000000011000111000101010110110111101101111001001111111000000011001000010110111111011000110110000100101010010101100010111101010100011000100101010100000101011110101010001011100101100010110011011101001100101110100010010000100110011001101010010011000001011001001010110110000 1101100100100001100000011001001001101001110000010100000100111100101100000010011001110001010010110001110111101110100100011110001010001001011001010000011100010000101111011100011110110000010010001010111000100011110100111010100110111111101110010011010011010101101000110011010000001111101010110110010011110011111110101011010001110010010110000001000100110100110000110111001111101001110110100001111101101110 0001110000000000011110110010111011011100000110111010110111010000010011010100111011011000101011101100011000001101000101100101011100111000101011110000100101011110110111101101010101100010101100000100100101101000110100001100000110110001010000011111100101010011010001101011011011100010110011011100011011001101011101011111010000100101010101001011100001111101000110000000111010110100101101100010011110000010 0000000011001001101110001010001000111011000000100111000010001110010101011110001001000010010101010000110000001000111010100011001100100101101101010000111110110000101000111011011110110000110101010011100111110011000001010010110100001101110100110101000000100101100111001111011100011111011110110100111111000010100001100000000100010000011100100010011110111000011011001000101101001000111100100001001110101101 0110001111100010101001000101001001010000100110001011100101111111010010110001111110011101001100111111010101111110100010010000001111001011100001011111100000101110100001100011100110111011111011000011101010011010010111110100010101111101001111010110000110101011001110010000010101101000111111100111110100001011111100010000000010100000110011101000000010010111101011110111111001011111100001000101011001010101 0101111010000010111011101100100111000100110010110100100111000101010101010101110000010011101101101000100011111010101100001000010111111001101000001110100010000010110101111111011001101101010110010011100011100100101011100111011001110000100100000011110111110000100000000010001100000001101011001100011100110110111111101011010010110010100100001010000111001011101100011000001100100110010000110110101011010101 1011101001101100101010001100101100111110011011011101001100001000110011010100101011101110000011111100000111011100101001111011010110100001100011010111100101100100011000111101001010010000001110001101101001001100001110100001111110111111011111011101011011100001010110010111101101001110110110011010000110011010010011101110001111100101010101111010101110010000100111111001111100000101011110100001101001101001 1101111010001011010110011111111110100100110100110110001110010111101000111110000111001100100110001100001000111000101000100011111000011000010111000111100110100001110110001101010110000011000101111010101110101000001001111000001110110111100010111111111011111001010001111110100010011000100100101110000001000010011001101100101000010011100011001100000110100100010011101010011011100011010001000101000011000100 0010101000101010101110000011001001010010110001011011101010001011001011111110101110101011111011101011110010110111111001100010110001011000011111000011110100101111100111011001110000001001110010110000100111100000100011111101000101011110010001100110101010000100110000111001010011111110101010100110100100000111010011101010110110100000111101010010111001010101010011111111100000111010010011111101000111101101 0011101100100001000101001011010111001110100111100101010010111110100000111101100110111111101110101101110000001100100101100110110101101010010010111011111010001111101010010101110010010110110101101101000001000010000111111001100010000001011010110001000110010001110101000100111001101111010100001110110110110010101100001101101010110101111110100111111001101100111011011100110101111001100101000001111000101100 0010111111100111111001111011111010001111111011011100100000000110110011100110010101011111011011010100010111001011100001101111001011110111011011010000000101000010101011010110111000001111110011101010111011101110111101000110010101101111110111001011111101001101001010100111111011101000010110110111001101011101010110110111111010001000110110101010110101100010101000010010101101100001000011000010011110100111 0110111100000001110101100111001000011111010100111110100010110011111000111110111101111010101011101101101101011001110000111010101011100110010100111101011011001100100001001011010011100011101100100100110000101111010100010010101101011110111010110101000010111011101011011100100100100100000001100000111010010001111010111100100011110110100001111100000101001110111010000111111000110100111111001110011011000011 0001011111001011010010001001011101110001001100001011101001000101101110110010100001000100100000100010100010000110001011110100101101011110100101000110100111101110100011000111000011111101111111000011001011010010001110100101001000001011111001100000000000001110011010011110100100011110100000011111001101100010100101110111001100011011000010111100001101001000111001001101000001100110011110100011000110100001 1111011010100100001110110011000011011001101100000111001100100111001011100011101001100011000111110011110101010001101010010000111010110101000100100101011010110100101101011101011001100110110000000011111001101010010000011011001100001000010110111011110110000010011110011100011001011110100010101101111111111001011000011100101000101010000111001101100001001000001000100011100010110010100000010110100110011110 0101011111010100000101001000110100000101000101001010001101000110100011010111011001111111100000100100111100101101010101111010100110111001100010000100001000110001110100011010101001010100001110111000000110000111001110001111110001010110010000110101101100000010000000111010101110100011010110101101011110010101100000011001101111100101011010010101100110100010011010010110011111111110000100010011111111010011 1001000010011101000001011110100111010101001011001100001110110110010111111001000000100011010000010101110110100111101011110101011010001110010110000011000001000100101111000110011011101010101101100111010100101111001001100110000000100010011100011000010101100001000111111011000010101010110110010111001101110011111011001010010110110000010010100000010011000111100110000100111010000100000010010011010010000100 1111000001111100100000111011000110011110010001000111001110010000001010111000010011100111111100110110001000010110111101110011100010100111100000110110111101011101001111010000110001111110000100110010000111110111111101000101110111001001100011000101010100111011011000000011101011000100101010001001010110001011000000101110010101100011011100110100001001111011000100000110011000100000110100010000110001011100 1001010100100001101100000010000111101000111101001101110100111101100111100100101110111010100101011101110000100000000110011011100001100011100000000100111110111110110100100100011001001011100100010010010110111000010001000011101010010100110100000011000111000001010010100100010001101111001111000110111000111100000001010001001001101010000111110001001010011001101100001010010010001000100000011100001111100100 0101011010100111101011101111110111111100111100110100000010010001111111000001101100100101101001111111101101001100110100000100110111000111000010101001111110101010010101111011010101010011111110111111010111010101110000011011111000001111110110111001101100011001100111111010000011110010111110000011011110110101110101100111010011110010010010001000110110111011100101111100110000011111100000110011101011111100 1000011110100101111011100011110010001000010101111111010110111101111111101000101001111010100010110110111111011100101001000011011001101010110100101111100110011001011110110000010100111100001110011101001100000001111011011000011101000101000100101100100110000001101111000011010111010110001011000001100001111000100010001011111111010111001111010011011100101100101100100001010010111011000001001010110001100001 0110011101101001011011100101001010011101110100101100010111100111101111010011010011011110101100100001101000110011100101110010000001101110001111011111100100100000101010111010111111011110100111110011011100101100110001111011001101101101011000111111010100001111000001001000111010110001110100011001111010010101111001001010000010111001011101101110011010000101010001000000110100101001001000111000110000100010 0101000100010110011010101001010110001111000001101011110010101111000110010000001001011010011100010011101100101001111101000100011101010000101010011100110010010101100111110011010100110011011001010110000101000100101011010100000010111000011100000011111100110110010110010101011000101010001100110100001101110101011100100100101011111101001000001010101001100110110000101111100000100110000001001100000101011101
cTrader Algo

Line, PolyLine, Polygon【cAlgoAPI】

3/13/2021 3/30/2021

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

線と多角形

線や多角形を描くことができます。うまく使えば簡単なアイコンなどはプログラム内で作成できてしまいます。

 

Lineクラス

1本の線です。

public class Line : Shape

 

プロパティ
(double) X1 {get; set;}

始点のX座標を取得、設定します。

(double) X2 {get; set;}

終点のX座標を取得、設定します。

(double) Y1 {get; set;}

始点のY座標を取得、設定します。

(double) Y2 {get; set;}

終点のY座標を取得、設定します。

Shape, ControlBaseのプロパティすべて

StrokeColorは必ず設定します。サイズ自動調整をさせる場合、StretchはUniformにしておく方がいいでしょう。

 

サンプルコードは下記PenLineCap参照。

 

 

Polylineクラス

複数のつながった線です。

public class Polyine : Shape

 

プロパティ
(Point[]) Points {get; set;}

つなげる点の座標をPointの配列で設定、取得します。

(FillRule) FillRule {get; set;}

ぬりつぶし方式を取得、設定します。

Shape, ControlBaseのプロパティすべて

StrokeColorかFillColorは必ず設定します。サイズ自動調整をさせる場合、StretchはUniformにしておく方がいいでしょう。

 

サンプルコードは下記PenLineJoin参照

 

 

Polygonクラス

多角形です。Polylineの始点と終点をつなげただけのものです。

public class Polygon : Shape

プロパティもPolylineと全く同じです。

 

プロパティ
(Point[]) Points {get; set;}

つなげる点の座標をPointの配列で設定、取得します。

(FillRule) FillRule {get; set;}

ぬりつぶし方式を取得、設定します。

Shape, ControlBaseのプロパティすべて

StrokeColorかFillColorは必ず設定します。サイズ自動調整をさせる場合、StretchはUniformにしておく方がいいでしょう。

 

サンプルコードは下記FillRule参照。

 

 

Pointクラス

PolylineとPolygonの座標を表すためのオブジェクトです。

public class Point : Object

 

コンストラクタ
Point(double x, double y)

x座標とy座標を指定してオブジェクトを作れます。

 

プロパティ
(double) X {get; set;}

x座標を取得、設定します。

(double) Y {get; set;}

y座標を取得、設定します。

 

 

関連する列挙型

PenLineCap列挙型

線や点線の終端形を表します。線の端にキャップをかぶせるイメージです。ぶっとい線じゃないと違いがわかりません

Flat 終端なし。デフォルト。
Square 四角
Round
Triangle 三角

 

サンプルコード

Func<PenLineCap, Line> line = cap => 
    new Line {
        StrokeColor = Color.White,
        StrokeThickness = 30,
        X1 = 20,
        Y1 = 10,
        X2 = 80,
        Y2 = 10,
        StrokeStartLineCap = cap,
        StrokeEndLineCap = cap,
        Margin = 10,
    };
var flat = line(PenLineCap.Flat);
var square = line(PenLineCap.Square);
var round = line(PenLineCap.Round);
var triangle = line(PenLineCap.Triangle);

var panel = new StackPanel();
panel.AddChild(flat);
panel.AddChild(square);
panel.AddChild(round);
panel.AddChild(triangle);
Chart.AddControl(panel);

上から順にFlat,Square,Round,Triangleです。

FlatとSquareは見た目の形は同じですが、Squareは四角いキャップをかぶせてるので線が少し長く表示されます。

 

 

PenLineJoin列挙型

2本の線の接合部分の形を表します。これもぶっとい線じゃないと違いがわかりません

Miter 普通。デフォルト。
Bevel 斜め切り落とし。
Round 丸。

 

サンプルコード

Func<PenLineJoin, Polyline> line = join =>
    new Polyline {
        StrokeColor = Color.White,
        Points = new Point[] {new Point(50, 10), new Point(10, 10), new Point(10,50)},
        StrokeThickness = 30,
        StrokeLineJoin = join,
        Margin = 10,
    };
var miter = line(PenLineJoin.Miter);
var bevel = line(PenLineJoin.Bevel);
var round = line(PenLineJoin.Round);
var panel = new WrapPanel();
panel.AddChild(miter);
panel.AddChild(bevel);
panel.AddChild(round);
Chart.AddControl(panel);

左からMiter,Bevel,Roundです。

 

 

FillRule列挙型

polylineやpolygonの塗りつぶし方式を表します。polylineも閉じた線とみなして判定します。

EvenOdd 領域内の任意の点から無限に伸びた光線を跨いだ線の数を数え、それが奇数であれば内側とみなし塗りつぶします。偶数であれば塗りつぶしません。
Nonzero 領域内の任意の点から無限に伸びた光線を左から右に跨いだ線の数と右から左に跨いだ線の数が異なる場合、内側とみなしぬりつぶします。

説明は私のざっくりとした意訳です。わかりにくくて申し訳ないですが、丁寧に訳してもたぶん同じくらいわかりにくいです。

cAlgo特有のものではないのでちゃんと知りたい場合はMSDNのFillRuleの説明探した方が早いかもしれません。

 

サンプルコード

Func<FillRule, Polygon> polygon = rule => 
    new Polygon {
    Points = new Point[] { new Point(0, 20), new Point(40, 20), new Point(10, 50), new Point(20, 0), new Point(30, 50) },
    StrokeColor = Color.Red,
    FillColor = Color.Yellow,
    FillRule = rule,
    Margin = 10,
    };

var evenodd = polygon(FillRule.EvenOdd);
var nonzero = polygon(FillRule.Nonzero);
var panel = new WrapPanel();
panel.AddChild(evenodd);
panel.AddChild(nonzero);
Chart.AddControl(panel);

 

左がEvenOdd、右がNonzeroです。

よくわからなければ中身全部塗りつぶしたければNonzeroと思ってもらえれば(cAlgoでは)だいたい大丈夫です。

 
 
 
 

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

新しいコメント

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

cTrader's Life

© 2025 ajinori