Ben Simms

Brew B0y – My Arduino powered dual thermometer with counter

 BrewB0y – Arduino Powered thermometer for Homebrewing.

DSC_0111

The Plan:

I wanted to improve my homebrewing process and one part of the process requiring some attention was the constant monitoring of my beer and boiling temperatures.

I looked around for a thermometer with two probes, all I could find were food thermometer, I needed something better, something waterproof and something that could withstand temps of 90+. I couldn’t find one so I decided to make one!

The Outcome:

I was extremely pleased with the outcome, it actually worked and worked very well! The process was fairly plain sailing, as with most Arduino projects there were a number of existing libraries available so all I had to do was wire it up and create the functions I needed to make it mine.

The probes I bought were fantastic and to make life easier I could wire up multiple probes into a single port using the OneWire Library, then using a short bit of code, assign an address to each probe. This meant I could run both probes at the same time thus allowing me to keep an eye of the temperature in my mash tun while I boil up the next batch of water. I wanted a nice length so that I could run the probes around my shed without hassle and at 3meters, I had more than enough.

The first part was just getting the probes working and understanding how they worked, the next part was wiring up the LCD screen for which I used the Adafruit GFX library. After working out how to display text, this was actually a simple and fun part of the process.

Finally I tweaked and refactored some of my code to make the BrewBoy updated in a timely fashion.


DSC_0119
DSC_0109 DSC_0114 DSC_0115

Early Development Video:

https://goo.gl/photos/LoZtg522LKEUGH9P7

The Shopping List.

LCD Screen: http://www.ebay.co.uk/itm/Nokia-5110-LCD-Module-Monochrome-Display-Screen-84-x-48-for-Arduino-PIC-etc-/161258450379

Probes: (2 x 3m) http://www.ebay.co.uk/itm/111635721085?_trksid=p2057872.m2749.l2649&ssPageName=STRK%3AMEBIDX%3AIT

Arduino Nano: http://www.ebay.co.uk/itm/New-Arduino-Nano-V3-0-with-CH340G-5V-16M-compatible-ATmega328P-Headers-UK-/151765624720?hash=item2355efa790

4.7k Ohm Resistor http://www.maplin.co.uk/p/metal-film-06w-47k-ohm-resistor-m4k7

The Code.

The entire project and it’s dependancies can be found on GitHub here: https://github.com/zerosimms/Brewb0y

#include <OneWire.h>
#include <DallasTemperature.h>
#include <Adafruit_GFX.h>
#include <Adafruit_PCD8544.h>

//New display object.
Adafruit_PCD8544 display = Adafruit_PCD8544(12, 11, 10, 9, 8);
 
//Temperature Pins.
#define ONE_WIRE_BUS 3

//LCD Pins.
#define PIN_RESET 8
#define PIN_SCE   9
#define PIN_DC 10
#define PIN_SDIN  11
#define PIN_SCLK  12

//Onewire object.
OneWire oneWire(ONE_WIRE_BUS);
 
//Pass our oneWire reference to Dallas Temperature. 
DallasTemperature sensors(&oneWire);
 
//Each thermometer has a unique address, this can be found with addressFinder.ino
DeviceAddress thermometer1 = { 0x28, 0xFF, 0xE3, 0x86, 0x66, 0x14, 0x03, 0x4D };
DeviceAddress thermometer2 = { 0x28, 0xFF, 0xD7, 0x76, 0x66, 0x14, 0x03, 0xA7 };
 
int buttonOne = 7;
int buttonState = 0;
int temperature1;
int temperature2;
int timer = 90;
int seconds = 0;
boolean startCountDown = false;
 
//Prints all the data to the LCD screen.
void printScreen() {
  display.setCursor(0,0);
  display.println("---BREW-B0Y---");
  display.setCursor(0,10);
  display.println("BOIL:");
  display.setCursor(32,10);
  display.print( temperature1);
  display.print("c");
  display.setCursor(0,20);
  display.println("MASH:");
  display.setCursor(32,20);
  display.print(temperature2);
  display.print("c");
  display.setCursor(0,30);
  display.print("TIME:");
  display.setCursor(32 ,30);
  display.print(timer);
  display.print("m ");
  display.print(seconds);
  display.print("s");
  display.setCursor(0,36);
  display.print("--------------");
  display.display();
  display.clearDisplay();
}
 
void setup(void) {
  Serial.begin(9600); 
  pinMode(buttonOne, INPUT);
  display.clearDisplay();  
  display.begin();
  display.setContrast(45);
  display.setTextSize(1);
  display.setTextColor(BLACK);
 
  sensors.begin();
  sensors.setResolution(thermometer1, 10);
  sensors.setResolution(thermometer2, 10);
}
 
//Does what it says.
void getTemperatures() {
  temperature1 = sensors.getTempC(thermometer1);
  temperature2 = sensors.getTempC(thermometer2);
}
 
//Check to see what state the timer is at.
void checkTimer() {
  if (timer > 0 && startCountDown){
    if (seconds >= 1){
      seconds = seconds -1; 
    }
    if (seconds == 0){
      timer = timer -1;
      seconds = 60;
    }
    if (timer <= 0){
      timer = 0;
      seconds = 0;   
    }
    delay(1000);
  }
}
 
void checkIfTimerStarted() {
  if (buttonState == HIGH) {
    startCountDown = true; 
  }
}
 
void loop(void) {
  buttonState = digitalRead(buttonOne);
  printScreen();
  getTemperatures();
  sensors.requestTemperatures();
  checkIfTimerStarted();
  checkTimer();
}

Exporting an image in binary

The Plan

To see what an image looked in binary… Why? I wasn’t sure to be honest, just interest I guess and because once I had the binary I could do something else with it… maybe

The Outcome

It was actually fairly simple I had most of the code from my other projects that I recycled, I then looked into how to get Processing exporting a text file with the binary code. Both of these were documented well and to my surprise all I had to do to get the RGB values of each pixel was cast it as a binary whoop whoop!

I did find it funny how the exported binary ended up being 100kb from the original image @ 591bytes

The Code

String imageUrl = "http://static.bbci.co.uk/weather/0.5.284/images/icons/individual_56_icons/en_on_light_bg/3.gif";
 
PImage image;
PrintWriter exportedValues;
int pixelYPosition;
int pixelXPosition;
boolean binaryExport = true;
 
public void setup() {
  exportedValues = createWriter("values.txt");
  image = loadImage(imageUrl, "png");
  size(image.width, image.height);
  loadPixels();
  image.loadPixels();
  print("Image Dimensions: " + image.width + "x" + image.height);
}
 
public void draw() {
  for (pixelYPosition = 0; pixelYPosition < image.height; pixelYPosition++) {
    for (pixelXPosition = 0; pixelXPosition < image.width; pixelXPosition++) {
      int loc = pixelXPosition + pixelYPosition * image.width;
      float r = red(image.pixels[loc]);
      float g = green(image.pixels[loc]);
      float b = blue(image.pixels[loc]);
      pixels[loc] = color(r, g, b);
      if (binaryExport == false) {
        String red = str(round(r));
        String blue = str(round(b));
        String green = str(round(g));
        exportedValues.print(red+green+blue);
      } else {
        int red = int(r);
        int green = int(g);
        int blue = int (b);
        exportedValues.print(binary(red+green+blue));
      }
    }
  }
  exportedValues.flush();
  exportedValues.close();
  updatePixels();
  noLoop();
}

Original Image:

3

Binary:

00000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001010111111000000000000000000000010000101000000000000000000000000100001010000000000000000000000001000010100000000000000000000000010000101000000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101011111100000000000000000000001000010100000000000000000000000010000101000000000000000000000000100001010000000000000000000000001000010100000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010101111110000000000000000000000100001010000000000000000000000001000010100000000000000000000000010000101000000000000000000000000100001010000000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010100000010000000000000000000000101000000100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001010111111000000000000000000000010000101000000000000000000000000100001010000000000000000000000001000010100000000000000000000000010000101000000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101011111100000000000000000000001000010100000000000000000000000010000101000000000000000000000000100011001100000000000000000000001010111111000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101011111100000000000000000000001000010100000000000000000000000010000101000000000000000000000000100001010000000000000000000000001000010100000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010010100100000000000000000000000100001010000000000000000000000001000010100000000000000000000000010000101000000000000000000000000100010010000000000000000000000001011011110000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010110011010000000000000000000000101100110100000000000000000000001010110010000000000000000000000010101100100000000000000000000000101100110100000000000000000000001011001101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010101111110000000000000000000000100001010000000000000000000000001000010100000000000000000000000010000101000000000000000000000000100001010000000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101010000000000000000000000000001000010100000000000000000000000010000101000000000000000000000000100001010000000000000000000000001000010100000000000000000000000010100000010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010101100100000000000000000000000101001101000000000000000000000001010000010000000000000000000000010100000100000000000000000000000101000001000000000000000000000001010000010000000000000000000000010100000100000000000000000000000101000001000000000000000000000001010000010000000000000000000000010101100100000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001010111111000000000000000000000010000101000000000000000000000000100001010000000000000000000000001000010100000000000000000000000010000101000000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011101101000000000000000000000010001100110000000000000000000000100001010000000000000000000000001000010100000000000000000000000010000101000000000000000000000000100011001100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010110011010000000000000000000000101000001000000000000000000000001010000010000000000000000000000010100000100000000000000000000000101000001000000000000000000000001010000010000000000000000000000010100000100000000000000000000000101000001000000000000000000000001010000010000000000000000000000010100000100000000000000000000000101000001000000000000000000000001010000010000000000000000000000010100000100000000000000000000000101100110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101011111100000000000000000000001000010100000000000000000000000010000101000000000000000000000000100001010000000000000000000000001000010100000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101000000100000000000000000000001000010100000000000000000000000010000101000000000000000000000000100001010000000000000000000000001000010100000000000000000000000010101011110000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101011001000000000000000000000001010000010000000000000000000000010100000100000000000000000000000101000001000000000000000000000001010000010000000000000000000000010100000100000000000000000000000101000001000000000000000000000001010000010000000000000000000000010100000100000000000000000000000101000001000000000000000000000001010000010000000000000000000000010100000100000000000000000000000101000001000000000000000000000001010000010000000000000000000000010100000100000000000000000000000101011001000000000000000000000001011111101000000000000000000000010110111100000000000000000000000101001000000000000000000000000001010010000000000000000000000000010100100000000000000000000000000101001000000000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011011110000000000000000000000010000101000000000000000000000000100001010000000000000000000000001000010100000000000000000000000010000101000000000000000000000000100101001000000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001010011010000000000000000000000010100000100000000000000000000000101000001000000000000000000000001010000010000000000000000000000010100000100000000000000000000000101000001000000000000000000000001010000010000000000000000000000010100000100000000000000000000000101001101000000000000000000000001010011010000000000000000000000010100000100000000000000000000000101000001000000000000000000000001010000010000000000000000000000010100000100000000000000000000000101000001000000000000000000000001010000010000000000000000000000010100000100000000000000000000000101001101000000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101011111100000000000000000000001000110011000000000000000000000010000101000000000000000000000000100001010000000000000000000000001000010100000000000000000000000010110011100000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011011110000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010101100100000000000000000000000101000001000000000000000000000001010000010000000000000000000000010100000100000000000000000000000101000001000000000000000000000001010000010000000000000000000000010101100100000000000000000000000101110010100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111001010000000000000000000000101011001000000000000000000000001010000010000000000000000000000010100000100000000000000000000000101000001000000000000000000000001010000010000000000000000000000010100000100000000000000000000000101011001000000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101110110100000000000000000000001010010000000000000000000000000010000101000000000000000000000000100111000100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011101101000000000000000000000010100000010000000000000000000000100010010000000000000000000000001010111111000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101110010100000000000000000000001010000010000000000000000000000010100000100000000000000000000000101000001000000000000000000000001010000010000000000000000000000010100000100000000000000000000000101110010100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101100110100000000000000000000001010000010000000000000000000000010100000100000000000000000000000101000001000000000000000000000001010000010000000000000000000000010100000100000000000000000000000101110010100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011011110000000000000000000000010111011010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010101011110000000000000000000000100011001100000000000000000000001000010100000000000000000000000010000101000000000000000000000000100011001100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010100110100000000000000000000000101000001000000000000000000000001010000010000000000000000000000010100000100000000000000000000000101000001000000000000000000000001011100101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101110010100000000000000000000001010000010000000000000000000000010100000100000000000000000000000101000001000000000000000000000001010000010000000000000000000000010100110100000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010110011100000000000000000000000100101001000000000000000000000001000010100000000000000000000000010000101000000000000000000000000100001010000000000000000000000001000010100000000000000000000000010000101000000000000000000000000101000000100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001010000010000000000000000000000010100000100000000000000000000000101000001000000000000000000000001010000010000000000000000000000010101100100000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101011001000000000000000000000001010000010000000000000000000000010100000100000000000000000000000101000001000000000000000000000001010000010000000000000000000000010111001010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111011010000000000000000000000100111000100000000000000000000001000010100000000000000000000000010000101000000000000000000000000100001010000000000000000000000001000010100000000000000000000000010000101000000000000000000000000100001010000000000000000000000001000010100000000000000000000000010100000010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011001101000000000000000000000010101100100000000000000000000000101001101000000000000000000000001010000010000000000000000000000010100000100000000000000000000000101000001000000000000000000000001010000010000000000000000000000010100000100000000000000000000000101000001000000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101001101000000000000000000000001010000010000000000000000000000010100000100000000000000000000000101000001000000000000000000000001010000010000000000000000000000010100000100000000000000000000000101000001000000000000000000000001010110010000000000000000000000010110011010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011011110000000000000000000000010001001000000000000000000000000100001010000000000000000000000001000010100000000000000000000000010000101000000000000000000000000100001010000000000000000000000001000010100000000000000000000000010010100100000000000000000000000101011111100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011100101000000000000000000000010100110100000000000000000000000101000001000000000000000000000001010000010000000000000000000000010100000100000000000000000000000101000001000000000000000000000001010000010000000000000000000000010100000100000000000000000000000101000001000000000000000000000001010000010000000000000000000000010100110100000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010101100100000000000000000000000101000001000000000000000000000001010000010000000000000000000000010100000100000000000000000000000101000001000000000000000000000001010000010000000000000000000000010100000100000000000000000000000101000001000000000000000000000001010000010000000000000000000000010100000100000000000000000000000101110010100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001010000001000000000000000000000010000101000000000000000000000000100001010000000000000000000000001000010100000000000000000000000010001100110000000000000000000000101010000000000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010110011010000000000000000000000101000001000000000000000000000001010000010000000000000000000000010100000100000000000000000000000101000001000000000000000000000001010000010000000000000000000000010100000100000000000000000000000101000001000000000000000000000001010000010000000000000000000000010100000100000000000000000000000101000001000000000000000000000001010000010000000000000000000000010100110100000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011001101000000000000000000000010100000100000000000000000000000101000001000000000000000000000001010000010000000000000000000000010100000100000000000000000000000101000001000000000000000000000001010000010000000000000000000000010100000100000000000000000000000101000001000000000000000000000001010000010000000000000000000000010100000100000000000000000000000101100110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101110110100000000000000000000001000110011000000000000000000000010000101000000000000000000000000101001000000000000000000000000001011101101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101110010100000000000000000000001010000010000000000000000000000010100000100000000000000000000000101000001000000000000000000000001010000010000000000000000000000010100000100000000000000000000000101000001000000000000000000000001010000010000000000000000000000010100000100000000000000000000000101000001000000000000000000000001010000010000000000000000000000010100000100000000000000000000000101000001000000000000000000000001010000010000000000000000000000010100110100000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101110010100000000000000000000001010000010000000000000000000000010100000100000000000000000000000101000001000000000000000000000001010000010000000000000000000000010100000100000000000000000000000101000001000000000000000000000001010000010000000000000000000000010100000100000000000000000000000101000001000000000000000000000001010000010000000000000000000000010100000100000000000000000000000101110010100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101011111100000000000000000000001011011110000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010100110100000000000000000000000101000001000000000000000000000001010000010000000000000000000000010100000100000000000000000000000101000001000000000000000000000001010011010000000000000000000000010110011010000000000000000000000101100110100000000000000000000001011001101000000000000000000000010101100100000000000000000000000101000001000000000000000000000001010000010000000000000000000000010100000100000000000000000000000101000001000000000000000000000001010011010000000000000000000000010111001010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010110011010000000000000000000000101000001000000000000000000000001010000010000000000000000000000010100000100000000000000000000000101001101000000000000000000000001011100101000000000000000000000010110011010000000000000000000000101001101000000000000000000000001010000010000000000000000000000010100000100000000000000000000000101000001000000000000000000000001010000010000000000000000000000010100000100000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101100110100000000000000000000001010000010000000000000000000000010100000100000000000000000000000101000001000000000000000000000001010000010000000000000000000000010101100100000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111001010000000000000000000000101000001000000000000000000000001010000010000000000000000000000010110011010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001010110010000000000000000000000010100000100000000000000000000000101000001000000000000000000000001010000010000000000000000000000010100110100000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101011001000000000000000000000001010000010000000000000000000000010100000100000000000000000000000101000001000000000000000000000001010000010000000000000000000000010110011010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010101100100000000000000000000000101000001000000000000000000000001010000010000000000000000000000010100000100000000000000000000000101001101000000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101000001000000000000000000000001010000010000000000000000000000010100000100000000000000000000000101000001000000000000000000000001011001101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101001101000000000000000000000001010000010000000000000000000000010100000100000000000000000000000101000001000000000000000000000001010110010000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001010000010000000000000000000000010100000100000000000000000000000101000001000000000000000000000001010000010000000000000000000000010110011010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011100101000000000000000000000010100110100000000000000000000000101001101000000000000000000000001010011010000000000000000000000010100110100000000000000000000000101110010100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010110011010000000000000000000000101000001000000000000000000000001010000010000000000000000000000010100000100000000000000000000000101000001000000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101000000100000000000000000000001000010100000000000000000000000010000101000000000000000000000000100001010000000000000000000000001000010100000000000000000000000010000101000000000000000000000000100001010000000000000000000000001000010100000000000000000000000010000101000000000000000000000000101000001000000000000000000000001010000010000000000000000000000010100000100000000000000000000000101000001000000000000000000000001011100101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011100101000000000000000000000010100000100000000000000000000000101000001000000000000000000000001010000010000000000000000000000010100000100000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010100000010000000000000000000000100001010000000000000000000000001000010100000000000000000000000010000101000000000000000000000000100001010000000000000000000000001000010100000000000000000000000010000101000000000000000000000000100001010000000000000000000000001000010100000000000000000000000010100000100000000000000000000000101000001000000000000000000000001010000010000000000000000000000010100000100000000000000000000000101110010100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101110010100000000000000000000001010000010000000000000000000000010100000100000000000000000000000101000001000000000000000000000001010000010000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001010000001000000000000000000000010000101000000000000000000000000100001010000000000000000000000001000010100000000000000000000000010000101000000000000000000000000100001010000000000000000000000001000010100000000000000000000000010000101000000000000000000000000100001010000000000000000000000001010011010000000000000000000000010100000100000000000000000000000101000001000000000000000000000001010000010000000000000000000000010101100100000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010101100100000000000000000000000101000001000000000000000000000001010000010000000000000000000000010100000100000000000000000000000101001101000000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101000000100000000000000000000001000010100000000000000000000000010000101000000000000000000000000100001010000000000000000000000001000010100000000000000000000000010000101000000000000000000000000100001010000000000000000000000001000010100000000000000000000000010000101000000000000000000000000101011001000000000000000000000001010000010000000000000000000000010100000100000000000000000000000101000001000000000000000000000001010000010000000000000000000000010111001010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101110010100000000000000000000001010000010000000000000000000000010100000100000000000000000000000101000001000000000000000000000001010000010000000000000000000000010101100100000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010110111100000000000000000000000101011111100000000000000000000001010111111000000000000000000000010101111110000000000000000000000101011111100000000000000000000001010111111000000000000000000000010101111110000000000000000000000101011111100000000000000000000001010111111000000000000000000000010111001010000000000000000000000101001101000000000000000000000001010000010000000000000000000000010100000100000000000000000000000101000001000000000000000000000001010000010000000000000000000000010101100100000000000000000000000101100110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101100110100000000000000000000001010110010000000000000000000000010100000100000000000000000000000101000001000000000000000000000001010000010000000000000000000000010100000100000000000000000000000101001101000000000000000000000001011100101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010101100100000000000000000000000101001101000000000000000000000001010000010000000000000000000000010100000100000000000000000000000101000001000000000000000000000001010000010000000000000000000000010100000100000000000000000000000101000001000000000000000000000001010000010000000000000000000000010100000100000000000000000000000101000001000000000000000000000001010000010000000000000000000000010100000100000000000000000000000101000001000000000000000000000001010000010000000000000000000000010100000100000000000000000000000101000001000000000000000000000001010000010000000000000000000000010100000100000000000000000000000101000001000000000000000000000001010000010000000000000000000000010100000100000000000000000000000101000001000000000000000000000001010000010000000000000000000000010100000100000000000000000000000101000001000000000000000000000001010000010000000000000000000000010100000100000000000000000000000101000001000000000000000000000001010000010000000000000000000000010100000100000000000000000000000101000001000000000000000000000001010000010000000000000000000000010100000100000000000000000000000101000001000000000000000000000001010000010000000000000000000000010100000100000000000000000000000101000001000000000000000000000001010011010000000000000000000000010101100100000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010101100100000000000000000000000101001101000000000000000000000001010000010000000000000000000000010100000100000000000000000000000101000001000000000000000000000001010000010000000000000000000000010100000100000000000000000000000101000001000000000000000000000001010000010000000000000000000000010100000100000000000000000000000101000001000000000000000000000001010000010000000000000000000000010100000100000000000000000000000101000001000000000000000000000001010000010000000000000000000000010100000100000000000000000000000101000001000000000000000000000001010000010000000000000000000000010100000100000000000000000000000101000001000000000000000000000001010000010000000000000000000000010100000100000000000000000000000101000001000000000000000000000001010000010000000000000000000000010100000100000000000000000000000101000001000000000000000000000001010000010000000000000000000000010100000100000000000000000000000101000001000000000000000000000001010000010000000000000000000000010100000100000000000000000000000101000001000000000000000000000001010000010000000000000000000000010100000100000000000000000000000101000001000000000000000000000001010000010000000000000000000000010100110100000000000000000000000101011001000000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011011110000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010101100100000000000000000000000101001101000000000000000000000001010000010000000000000000000000010100000100000000000000000000000101000001000000000000000000000001010000010000000000000000000000010100000100000000000000000000000101000001000000000000000000000001010000010000000000000000000000010100000100000000000000000000000101000001000000000000000000000001010000010000000000000000000000010100000100000000000000000000000101000001000000000000000000000001010000010000000000000000000000010100000100000000000000000000000101000001000000000000000000000001010000010000000000000000000000010100000100000000000000000000000101000001000000000000000000000001010000010000000000000000000000010100000100000000000000000000000101000001000000000000000000000001010000010000000000000000000000010100000100000000000000000000000101000001000000000000000000000001010000010000000000000000000000010100000100000000000000000000000101000001000000000000000000000001010000010000000000000000000000010100000100000000000000000000000101000001000000000000000000000001010000010000000000000000000000010100000100000000000000000000000101001101000000000000000000000001010110010000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000100100001100000000000000000000001000110011000000000000000000000010101011110000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111001010000000000000000000000101100110100000000000000000000001010110010000000000000000000000010101100100000000000000000000000101000001000000000000000000000001010000010000000000000000000000010100000100000000000000000000000101000001000000000000000000000001010000010000000000000000000000010100000100000000000000000000000101000001000000000000000000000001010000010000000000000000000000010100000100000000000000000000000101000001000000000000000000000001010000010000000000000000000000010100000100000000000000000000000101000001000000000000000000000001010000010000000000000000000000010100000100000000000000000000000101000001000000000000000000000001010000010000000000000000000000010100000100000000000000000000000101000001000000000000000000000001010000010000000000000000000000010100000100000000000000000000000101000001000000000000000000000001010000010000000000000000000000010100000100000000000000000000000101000001000000000000000000000001010000010000000000000000000000010100110100000000000000000000000101011001000000000000000000000001011001101000000000000000000000010110011010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001010100000000000000000000000000010000101000000000000000000000000100001010000000000000000000000001000010100000000000000000000000010010100100000000000000000000000101100111000000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111011010000000000000000000000100010010000000000000000000000001000010100000000000000000000000010000101000000000000000000000000100001010000000000000000000000001000010100000000000000000000000010000101000000000000000000000000101000000100000000000000000000001011101101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011011110000000000000000000000010010100100000000000000000000000100001010000000000000000000000001000010100000000000000000000000010000101000000000000000000000000100001010000000000000000000000001000010100000000000000000000000010000101000000000000000000000000100010010000000000000000000000001010010000000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010101000000000000000000000000000100010010000000000000000000000001000010100000000000000000000000010000101000000000000000000000000100001010000000000000000000000001000010100000000000000000000000010000101000000000000000000000000101000000100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111011010000000000000000000000101001000000000000000000000000001000010100000000000000000000000010000101000000000000000000000000100001010000000000000000000000001000100100000000000000000000000010111011010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101010111100000000000000000000001000110011000000000000000000000010100000010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101101111000000000000000000000001001100010000000000000000000000010000101000000000000000000000000101001000000000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101100111000000000000000000000001001010010000000000000000000000010000101000000000000000000000000100001010000000000000000000000001000100100000000000000000000000010110111100000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001010111111000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101110110100000000000000000000001010111111000000000000000000000010101111110000000000000000000000101011111100000000000000000000001010111111000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010101111110000000000000000000000100001010000000000000000000000001000010100000000000000000000000010000101000000000000000000000000100001010000000000000000000000001001110001000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010101111110000000000000000000000100001010000000000000000000000001000010100000000000000000000000010000101000000000000000000000000100001010000000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010011100010000000000000000000000100001010000000000000000000000001000010100000000000000000000000010000101000000000000000000000000100001010000000000000000000000001010111111000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001010111111000000000000000000000010000101000000000000000000000000100001010000000000000000000000001000010100000000000000000000000010000101000000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011011110000000000000000000000010001001000000000000000000000000100001010000000000000000000000001000010100000000000000000000000010000101000000000000000000000000100101001000000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101011111100000000000000000000001000010100000000000000000000000010000101000000000000000000000000100001010000000000000000000000001000010100000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001010000001000000000000000000000010000101000000000000000000000000100001010000000000000000000000001000010100000000000000000000000010000101000000000000000000000000101010000000000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010101111110000000000000000000000100001010000000000000000000000001000010100000000000000000000000010000101000000000000000000000000100001010000000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001000110011000000000000000000000010000101000000000000000000000000100001010000000000000000000000001000010100000000000000000000000010001001000000000000000000000000101110110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001010111111000000000000000000000010000101000000000000000000000000100001010000000000000000000000001000010100000000000000000000000010000101000000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101010111100000000000000000000001000010100000000000000000000000010000101000000000000000000000000100010010000000000000000000000001010010000000000000000000000000010111011010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101011111100000000000000000000001000010100000000000000000000000010000101000000000000000000000000100001010000000000000000000000001000010100000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000100101001000000000000000000000001001110001000000000000000000000010110111100000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010101111110000000000000000000000100001010000000000000000000000001000010100000000000000000000000010000101000000000000000000000000100001010000000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001010111111000000000000000000000010000101000000000000000000000000100001010000000000000000000000001000010100000000000000000000000010000101000000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101110110100000000000000000000001010111111000000000000000000000010101111110000000000000000000000101011111100000000000000000000001010111111000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101000000000000000000000010111111010000000000000000000000101111110100000000000000000000001011111101

 

Byte:

-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-6520202020-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-6520202020-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-6520202020-3-3-3-3-3-3-3-127-127-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-6520202020-3-3-3-3-3-3-65202051-65-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-6520202020-3-3-3-3-3-38220202036-34-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-51-51-78-78-51-51-3-3-3-3-3-3-6520202020-3-3-3-3-3-9620202020-127-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-78-102-126-126-126-126-126-126-126-78-3-3-3-3-6520202020-3-3-3-3-195120202051-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-51-126-126-126-126-126-126-126-126-126-126-126-126-51-3-3-6520202020-3-3-3-3-12720202020-81-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-78-126-126-126-126-126-126-126-126-126-126-126-126-126-126-78-3-34-112-112-112-112-3-3-3-342020202082-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-102-126-126-126-126-126-126-126-102-102-126-126-126-126-126-126-126-102-3-3-3-3-3-3-3-3-6551202020-50-3-3-3-3-3-3-3-34-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-78-126-126-126-126-126-78-27-3-3-3-3-27-78-126-126-126-126-126-78-3-3-3-3-3-3-3-3-19-11220113-3-3-3-3-3-3-19-12736-65-3-3-3-3-3-3-3-3-3-3-3-3-3-27-126-126-126-126-126-27-3-3-3-3-3-3-3-3-51-126-126-126-126-126-27-3-3-3-3-3-3-3-3-3-34-19-3-3-3-3-3-8151202051-3-3-3-3-3-3-3-3-3-3-3-3-3-102-126-126-126-126-27-3-3-3-3-3-3-3-3-3-3-27-126-126-126-126-102-3-3-3-3-3-3-3-3-3-3-3-3-3-3-50822020202020-127-3-3-3-3-3-3-3-3-3-3-3-3-126-126-126-126-78-3-3-3-3-3-3-3-3-3-3-3-3-78-126-126-126-126-27-3-3-3-3-3-3-3-3-3-3-3-1911320202020202020-127-3-3-3-3-3-3-3-51-78-102-126-126-126-126-126-126-3-3-3-3-3-3-3-3-3-3-3-3-3-3-102-126-126-126-126-126-126-78-51-3-3-3-3-3-3-3-3436202020202082-65-3-3-3-3-3-3-27-102-126-126-126-126-126-126-126-126-102-3-3-3-3-3-3-3-3-3-3-3-3-3-3-78-126-126-126-126-126-126-126-126-126-27-3-3-3-3-3-3-12720202051-96-3-3-3-3-3-3-3-51-126-126-126-126-126-126-126-126-126-126-126-102-3-3-3-3-3-3-3-3-3-3-3-3-3-51-126-126-126-126-126-126-126-126-126-126-51-3-3-3-3-3-195120-112-19-3-3-3-3-3-3-3-27-126-126-126-126-126-126-126-126-126-126-126-126-126-102-3-3-3-3-3-3-3-3-3-3-3-3-27-126-126-126-126-126-126-126-126-126-126-126-27-3-3-3-3-3-65-34-3-3-3-3-3-3-3-3-3-102-126-126-126-126-102-51-51-51-78-126-126-126-126-102-27-3-3-3-3-3-3-3-3-3-3-3-51-126-126-126-102-27-51-102-126-126-126-126-126-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-51-126-126-126-126-78-3-3-3-3-3-27-126-126-51-3-3-3-3-3-3-3-3-3-3-3-3-3-78-126-126-126-102-3-3-3-78-126-126-126-126-51-3-3-3-3-3-3-3-3-3-3-3-3-3-3-78-126-126-126-102-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-126-126-126-126-51-3-3-3-3-102-126-126-126-78-3-3-3-3-3-3-3-3-3-3-3-3-3-3-126-126-126-126-51-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-27-102-102-102-102-27-3-3-3-3-51-126-126-126-126-3-3-3-3-3-1272020202020202020-126-126-126-126-27-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-27-126-126-126-126-3-3-3-3-3-1272020202020202020-126-126-126-126-27-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-27-126-126-126-126-3-3-3-3-3-1272020202020202020-102-126-126-126-78-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-78-126-126-126-102-3-3-3-3-3-1272020202020202020-78-126-126-126-126-27-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-27-126-126-126-126-78-3-3-3-3-3-34-65-65-65-65-65-65-65-65-27-102-126-126-126-126-78-51-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-51-78-126-126-126-126-102-27-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-78-102-126-126-126-126-126-126-126-126-126-126-126-126-126-126-126-126-126-126-126-126-126-126-126-126-126-126-126-126-126-126-126-126-126-126-126-126-102-78-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-78-102-126-126-126-126-126-126-126-126-126-126-126-126-126-126-126-126-126-126-126-126-126-126-126-126-126-126-126-126-126-126-126-126-126-126-102-78-3-3-3-3-3-3-34-3-3-3-3-3-3-3-3-3-3-3-3-78-102-126-126-126-126-126-126-126-126-126-126-126-126-126-126-126-126-126-126-126-126-126-126-126-126-126-126-126-126-126-126-126-126-102-78-3-3-3-3-3-3-36751-81-3-3-3-3-3-3-3-3-3-3-3-27-51-78-78-126-126-126-126-126-126-126-126-126-126-126-126-126-126-126-126-126-126-126-126-126-126-126-126-126-126-102-78-51-51-3-3-3-3-3-3-3-9620202082-50-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-19362020202020-127-19-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-348220202020202036-112-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-96362020202020-127-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-19-11220202036-19-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-8151-127-3-3-3-3-3-3-349820-112-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-5082202036-34-3-3-3-3-3-3-3-65-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-19-65-65-65-65-3-3-3-6520202020113-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-6520202020-3-3-3-311320202020-65-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-6520202020-3-3-3-3-343620202082-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-6520202020-3-3-3-3-3-12720202020-96-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-6520202020-3-3-3-3-3-35120202036-19-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-6520202020-3-3-3-3-3-3-81202036-112-19-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-6520202020-3-3-3-3-3-3-382113-34-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-6520202020-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-6520202020-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-19-65-65-65-65-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3

Step 2: Using the Selenium factory

Feel free to clone the example here:

git clone https://[email protected]/zerosimms/sense.git

Switch to the branch: WebDriver-Factory

Selenium Factory

Selenium has a factory which can be used in your automated framework to make your life that little bit easier. A great benefit, on-top of it’s ease to setup is that it eliminates Stale objects forming. That is, an object that has lost it identity.

Stale objects can happen when bouncing around web pages using navigation, when you return the elements don’t always have the same ID that Selenium originally assigned to them so it can no longer find them and Bang!! Your script fails! So, the factory can take care of that for you.

The factory also handles lazy objects, this will save your script from bombing out if it can’t find an element because it only instantiates the object when you call it. It can also help keep your scripts just that bit smaller as you don’t need to instantiate your elements.

So how do you use the factory?
In your Page Object class, fairly simply. Add the annotation:

@FindBy(id"element id")
private WebElement myElementID

If your using IntelliJ you can Alt + Enter on the annotation and import or just add:

import org.openqa.selenium.support.FindBy;

 

Your page class should then look something like this:
Screen Shot 2014-09-20 at 20.26.48

That’s its, you now can use the element in your methods with the comfort of knowing that it will never become stale.
It is a slightly different way of thinking but it does speed up creating scripts especially for small scale projects.

Just to add, though my screen shot uses Xpath, you can use all the standard Selenium search methods ID, CSS, CLASSNAME etc

Step 1: How to get selenium up and running in under 10 mins!

Feel free to clone the example here:

git clone https://[email protected]/zerosimms/sense.git

Switch to the branch: WebDriver

Selenium

Hopefully your reading this post because you know what Selenium is about, so I’ll just carry on:)

I wanted to show and help others learn how to get an automation framework of the ground by starting from the beginning. It’s also good practice for me to document what I know because Frameworks on an enterprise level quickly become massive mazes!

So, from the beginning, fresh start with the absolute minimal code and working examples along the way!

The first stage, getting Selenium running!

To begin with, all my examples will be done in IntelliJ.

There are a number of reasons why but the biggest reason comes later, when we introduce Cucumber. Out of the box IntelliJ has better support for this and hell, they have a free version (which I am using) so why the Devil not?

 

The Code

I always create a new Maven project so that I can take advantage of the POM, using a POM is the easiest way to manage and update your dependencies. The very first one being Selenium itself :)

Add selenium as a dependency to your project.

<dependencies>
      <dependency>
         <groupId>org.seleniumhq.selenium</groupId>
         <artifactId>selenium-java</artifactId>
         <version>2.42.2</version>
      </dependency>
</dependencies>

Now, create a class and add the following to get you started:

public class ExampleTest {
   public static void main(String[] args) throws InterruptedException {
      WebDriver senseDriver = new FirefoxDriver();
      WebDriverWait wait = new WebDriverWait(senseDriver, 10);
 
      senseDriver.get("http://www.google.com");
      WebElement feelingLuckyButton = wait.until(ExpectedConditions.elementToBeClickable(By.id("gbqfbb")));
      feelingLuckyButton.click();
      senseDriver.quit();
   }
}

Right click on your class and select Run:

Screen Shot 2014-09-20 at 21.07.21

That’s it, Selenium in under 10 minuets running!

The tiny test launches Firefox, heads to Google and then clicks the ‘Feeling Lucky’ button.

 

 

ASCII Visualiser

AsciiVisualiser1 AsciiVisualiser

The Plan

In an attempt to make a fake QR visualiser I started thinking if I could export the pixels as 0’s and 1’s to generate a unique URL So naturally I started thinking about a way to generate this output. My thought was to convert the image to black and white, make the blacks 1 and whites 0 which is what I did.

At which point the output of the video was an image vaguely visible and at which point I though ASCII art! So the plan changed slightly to make a poor mans ASCII art visualier!

The Result

I thought the output looked good, but if you compared it with a real ASCII art image you would notice straight away the lack of varying characters in my images and that was true because I simply converted the pixel colours either ‘255’ or ‘o’ to a”#” and “.@.”. I could have, if I was serious about taking this to the next level (which I wasn’t) start thinking about ways to add extra details. But anyhow, it worked fine the way it was and the result were good enough for my liking.

It can be hard to see the image, so squinting the eyes helps!

The Instructions

  • Spacebar to capture frames
  • Q to export your gif animation

The Download

mac

 

The Code

import processing.video.*;
 
int cameraScale = 9;
int columns;
int rows;
Capture camera;
 
void setup() {
  size(288, 280);
  columns = width/cameraScale;
  rows = height/cameraScale+1;
  camera = new Capture(this, columns, rows, 30);
   selectFolder("Export Location:", "folderSelected");
}
 
void draw() {
 
  camera.start();
  background(255);
  if (camera.available()) {
    camera.read();
  }
  camera.loadPixels();
  camera.filter(THRESHOLD, 0.5);
 
  for (int column = 0; column < columns; column++) {
    for (int row = 0; row < rows; row++) {
      int x = column*cameraScale;
      int y = row*cameraScale;
      float r = red(camera.pixels[column + row*camera.width]);
      float g = green(camera.pixels[column + row*camera.width]);
      float b = blue(camera.pixels[column + row*camera.width]);
      noStroke();
 
      if (r <=120 && g <=120 && b<=120) {
        text(".@.", x, y);
        fill(0);
      } else  if (r >120 && g>120 && b>120) {
        text(" # ", x, y);
        fill(0);
      }
    }
  }
}
 
void keyPressed() {
  if (key == ' ') {
    saveImage();
  }
  if (key == 'q') {
    createAnimation();
  }
}

Virtual Boy Visualiser

The Plan

VirtualBoyMe  VirtualBoyMe

Thinking of my next tinker with video capture I remembered the work I had done with image comparison and wondered what would happen if I used live video feeds instead of images. The results were quiet interesting and I just so happened to choose red as my colour to define the changing pixels which reminded me a-lot of the Virtual Gameboy which seemed a bit weird seeing as my last project was recreating images as if they were from a Gameboy so I decided to run with it.

The Result

I was really happy with the result, it wasn’t as clear cut or defined as the Virtual boy, but the effect is very similar. I think for my next project I may try and recreate the SNES look… Seeing as though a theme is forming!

The Instructions

  • Spacebar to capture frames
  • Q to export your gif animation

The Download

mac

The Code

import processing.video.*;
 
PImage imageOne;
PImage imageTwo;
 
Capture camera;
int pixelYPosition;
int pixelXPosition;
 
public void setup() {
  saveFrame("imageOne.jpg");
  saveFrame("imageTwo.jpg");
  size (288, 288);
 
  imageOne = new PImage(width, height);
  imageTwo = new PImage(width, height);
  camera = new Capture(this, width, height, 30);
  camera.start();
  selectFolder("Export Location:", "folderSelected");
}
 
public void draw() {
  loadPixels();
 
  if (camera.available()) {
    camera.read();
    camera.filter(THRESHOLD, 0.3);
    image(camera, 0, 0);
    saveFrame("imageOne.jpg");
    saveFrame("imageTwo.jpg");
  }
 
  loadPixels();
  imageOne = loadImage("imageOne.jpg");
  imageOne.loadPixels();
 
  for (pixelYPosition = 0; pixelYPosition < imageOne.height; pixelYPosition++) {
    for (pixelXPosition = 0; pixelXPosition < imageOne.width; pixelXPosition++) {
      //
      int loc = pixelXPosition + pixelYPosition * imageOne.width;
      int loc1 = pixelXPosition + pixelYPosition * imageTwo.width;
      //
      float r = red(imageOne.pixels[loc]);
      float g = green(imageOne.pixels[loc]);
      float b = blue(imageOne.pixels[loc]);
      //
      float r1 = red(imageTwo.pixels[loc1]);
      float g1 = red(imageTwo.pixels[loc1]);
      float b1 = red(imageTwo.pixels[loc1]);
      if (r==r1 && g == g1 && b == b1) {
        r = 155;
        g = 0;
        b = 0;
      } else {
        r = 0;
        g = 0;
        b = 0;
      }
      pixels[loc] = color(r, g, b);
    }
  }
  updatePixels();
}

 

 

Gif Animation For Java

I spent a lot of time trying to find a nice light weight library for Java capable of exporting an animated Gif, so I wanted to share this with others who may find it useful.

I have to provide the Jar from my web site because I cannot for the life of me hunt down the original source, I by no means make claims to this Jar and if anyone out there recognizes it, let me know so I can give full credit.
Original author and full documentation here

Most of my work is done with Processing thus the example code below would be placed in a new tab inside the Processing IDE. Copy the code  into a new tab:

The Code

import gifAnimation.GifMaker;
 
PImage img;
String saveLocation;
int currentFrame = 0;
 
//Gif Animation Options
int playbackSpeed = 250;
int loopAnimation = 0;
int exportQaulity = 100;
String fileExportName = "GameBoyMe";
 
void folderSelected(File selection) {
  if (selection == null) {
    saveLocation = selection.getAbsolutePath();
    println("Default location selected");
  } else {
    saveLocation = selection.getAbsolutePath();
    println(saveLocation);
  }
}
 
//Save a shot of the current screen and increase the frame count.
void saveImage() {
  String frame = "frames/frame" + currentFrame + ".gif";
  saveFrame(frame);
  currentFrame ++;
}
 
//Loop through all our frames and add them to the gif.
void createAnimation() {
  GifMaker gifExport = new GifMaker (this, saveLocation + "/" + fileExportName + ".gif", exportQaulity);
  int framesCount = 0;
  gifExport.setRepeat(loopAnimation);
 
  while (framesCount < currentFrame ) {
    img = loadImage("frames/frame" + framesCount + ".gif");
    gifExport.addFrame(img);
    gifExport.setDelay(playbackSpeed);
    framesCount ++;
  }
  gifExport.finish();
  println("Animation Exported " + saveLocation);
}
 
//Keys for taking the frames and exporting the gif.
void keyPressed() {
  if (key == ' ') {
    saveImage();
  }
  if (key == 'q' || key == 'Q') {  
    createAnimation();
  }
}

 

Dont forget to add the below into your main tab so that we know where to export the Gif.

selectFolder("Export Location:", "folderSelected");

 

Now all you need to do is add the Gif Jar to your project by dragging the below file into Processing

The Jar File

That should be it, ready to run!

I’ve tried to make everything I can remember that’s configurable obvious by placing it at the top of my subclass

« Older posts

Copyright © 2015 Ben Simms

Theme by Anders NorenUp ↑