2023 Group 5 – Fairy Wings

Design blog

A holistic view was adopted to select the materials we used to ensure user friendliness, efficient functioning of the circuit and keeping in mind the stage setup, lighting and the impact of the wings on the performance.

  • Iridescent paper – it reflects well on the stage where the spotlight will only focus on the actors and its pitch dark all around. It stands out well. This also means it reflects the led lights better
    It is also light weight.
  • Craft wire – they are light weight and allow to mimic the realistic veins of the wings. Also they are light weight so, the actor doesn’t need to carry much weight and they still uphold the structure of the wings.
  • Buttons – In order to disguise the buttons, we have put them as a pendant. This way, the buttons are easily accessible to the user and also seems like a part of the accessories a fairy would wear.
  • 6-inch servo elongated arms – since the wings are quite large and wide, the servo arms of the SG90 servo cannot cover much surface area of the wings to make them flutter effectively. 6-inch servo elongated arms.
  • Small breadboard – To allow the user to control the wings and the LED strip, a connection had to be established between the back where the Arduino board is and around their neck. Instead of soldering the buttons to the wires directly, using a smaller breadboard allows the buttons to be mounted safely and securely and also ensures that the user won’t be harmed if the wires were soldered to the buttons directly rather than the other way around.
  • Potentiometer – Potentiometer allows to map a range of values between 0 and 1023 based on the analog input read. This helps to transition between a large range of colors smoothly. The twisting feature of the potentiometer is also quite intuitive for the user to use
  • Buttons – Instead of smaller buttons, we got larger buttons that could also pass as gems on the necklace and are easier to interact with instead of the small ones, making it more user friendly.
  • 9V Battery – required to power the circuit and specifically the LED strip.

How does the user interact?

The Arduino board is mounted behind the user and is connected to the wings and LED strips. As a result, another breadboard that is accessible to them, simple to operate, and doesn’t get in the way of their performance has to be given to them. We thought of three ways for the user to interact with the system:

  • Idea 1 – the user interacts via a bracelet around their wrist.
  • Idea 2 – the user interacts via the necklace around their neck.
  • Idea 3 – the user interacts via a staff or a wand in their hand.

All of these ideas can be easily disguised as accessories a fairy would wear hence, they fit well with the costume. Considering the frequent hand movements during the performance, we decided to go with the necklace around the user’s neck. This way, it’s easily reachable, won’t interfere with their movements and ensures that the connection between the Arduino board at the back and the necklace remains secure. Hence, to ensure the functionality isn’t compromised while the performance, the necklace idea was chosen in the end.

Design principles

Visibility – he user can quickly identify which controls to use owing to the necklace they wear during performances. Similar sequins have been stuck to the button and potentiometer used to control the lights, making it evident how functionally related they are.

Affordance – Using buttons instead of any other input device is to use familiarity of the user with the object to make it easy for the user to understand how it works. People are aware how buttons are clickable.

Feedback -Every user interaction generates feedback. By pressing the blue button, the RGB led strip can be turned on or off to provide visual feedback. The sound of the servo arms moving provides haptic and auditory input when the wings begin to flutter upon pushing the red button. Additionally, when the potentiometer is twisted, the RGB led strip’s colors shift visually.


Sketches and prototypes

Prototype 1

Idea behind the functionality:

  • The wires are connected to the breadboard
  • Wires extend all the over the shoulder and mimic as a necklace as a user interface – the buttons acts as gems on it
  • Press the button to flutter the wings
  • Press the button to turn on and off the LED strip
  • The potentiometer is also allows controlling the different colors of the LED lights.
LED lights testing

We decided to test each functionality and circuit individually first and then put them all together for the prototype. This was to make sure that all the functionalities are coded and that they are not dependent on other functionality.

We first started working with the LED strip. Testing out the code and working out whether we can control it with button. Installed an additional library, FastLED for coding the LED strip and then completed the circuit by connecting the LED to a 330 ohm blue resistor and a capacitor.

Servo testing

Making the first quick prototype to test out the capacity of the servo to move the small size wings. This is also to test out how the servo can be connected to the wings.

Prototype 2

Changing the size of the wings to full size to test out the fluttering with the servos. Sizing up the wings needed 2 servos instead of 1. A single servo cannot handle the weight of the big wings and establishes 2 points of contact with the wing.

Final Prototype

Craft wire wings

While we are working on the functionality of the wings and the LED lights, we start working on the final design of the wings made of craft wire.

The wire was quite flimsy alone, we chose a weaker wire so that it would be easier to work with, also for the lightweight property, however this also meant that it wasn’t so strong or immune to damage. Adding all the details inside provided some structure and made the initial wing frame much stronger. To connect each piece of wire to another, I coiled one around the other – this also provided more structure and made it much more sturdy.

Cellophane

The cellophane seemed quite thick initially, we wanted the wire to show through in the middle section as this was a key aesthetic feature in the design – the wings should mimic those of a butterfly. We realised the cellophane could be split into two pieces which made it thinner. We did this for both wings so the wire details came through as intended.

After we taped the entire wire wing and stuck it to the cellophane, we pinched the paper around the cellophane to secure it. In come places, this made it rip in some places so we had to remove the paper and stick it down less taught. This was difficult as we had to get the right ratio of having the cellophane paper loose enough so that it wouldn’t rip but also not too loose otherwise wrinkles would appear in the wing. The wrinkles were not pleasing at all, aesthetically, so we used trial and error before we were happy with how the cellophane looked and stuck it properly.

After this the paper was cut to size with about 5-8 cm extra around the edges. We then used a lighter to seal the edges, since there was so much extra cellophane it wasn’t burning correctly and morphed in a strange way. We then cut again leaving only 1-2cm. Since it was now too short the cellophane was sticking to the wire with a gap in between and the two pieces weren’t sticking to each other. After pinching the cellophane together first and then applying heat, the cellophane sheets moulded into each other and then the wire as initially intended.

Servo testing with the final wings

Trying out the MG996R servo for the final wings. The bigger servo was stronger and could easily move the wings to make them flutter.

Another iteration from the previous carboard wings was to attach long arms to the servo arms to cover more surface area on the wings and help them flutter better.

Soldering

We needed the LED lights on both the wings, so had to cut the the LED strip into 2 pieces and solder 3 pin female header on the ends of it.

Potentiometer Testing

testing out the code for the potentiometer independent of the buttons to test out its independent functionality.

Back support

U – shaped back support created with the metal craft wire. The U-shaped wire is slotted inside the waistband user wears to wear the wings. The servos are attached to this support.

This was an unsuccessful iteration because the wire that is attached to the wings restricted the movement of the wings when fluttering. Also because

Final support

Project Task List

Making the first quick prototype to test out the capacity of the servo to move the small size wings. This is also to test out how the servo can be connected to the wings. Sizing up on the wings

As an overview, the workload was divided based on everyone’s strengths.

  • Amrina – responsible for the making of the final metal wings and back support
  • Halak & Jess – responsible for prototyping, circuit and testing out the functionality with code

Maker Manual

Contents

  • Overview
  • Tools
  • Supplies
  • Circuit Diagram
  • Building instructions
  • Code
  • Testing
  • Possible improvements

Overview

A stunning set of wearable wings suitable for any fairy to step into their own spotlight!

​By using the costume-coherent attached amulet, the lights can be discretely toggled and colour-changed in real time by the wearer without breaking immersion. The same control system can also be used to toggle wing flapping to further enhance the performance. 

The straps are tied around the torso so that the wings can be worn, and the amulet can be worn around the neck. The Arduino board is mounted to the back to minimize its visibility to the audience. The amulet and its strings can be decorated to match the costume. The cellophane foil covering the wire is lightweight and light-reflective to allow for easier servo operation whilst standing out in a theatrical environment. 

​ 

Tools

  • Pliers 
  • Lighter
  • Wire strippers 
  • Pen/pencil 
  • Scissors 
  • Tape: consider masking tape, double sided and clear cellotape 
  • Screwdriver 
  • Soldering supplies 

Supplies

  • Craft wire 
  • Iridescent cellophane 
  • 330 ohm blue resistor
  • 25v capacitor
  • SG90 servos × 4 
  • 6-inch servo elongated arms (3D printed by Dave) 
  • RGB strip WS2812B – 30 or 60 LEDs per metre is fine – 1.5-2m of strip is enough 
  • Female 3-pin header x 2 (for soldering) 
  • Female single pin headers 
  • Roll wires for the “amulet” 
  • Plenty of pin (male-male) wires 
  • Large buttons × 2 
  • Potentiometer × 1 
  • Arduino board × 1 (including breadboard) 
  • Mini breadboard × 1 
  • 9V battery and snap connector 
  • Cardboard  (made out of old recycled boxes)
  • old birthday decorations (repurposed)
  • Optional embellishments on wires/buttons (such as sticky sequins and ribbons) 

Circuit diagram and Layout

​ 

​ 

​ add the circuit pic above 🙂

Building Instructions

  1. Draw out one wing on the cardboard and cut it out. Use this as a stencil for the wire. 
  2. Cut around 1m of wire and make the outline of the top section of the wing using the cardboard as a guide. 
  3. Using around 0.5m of wire create the bottom section of the wing. 
  4. Attach the top and bottom by spiralling a piece of wire around the section where they touch. The spiral also makes the wire sturdier. 
  5. Using the cardboard sketch as a guide, create the inside details of the wing. Again, attach each piece by creating a spiral of wire. 
  6. Use double sided tape to cover all the wire – small gaps are fine, but the wire should be at least 80% covered 
  7. Measuring the length of one wing, top to bottom, cut two pieces of cellophane 
  8. Place the taped wing carefully onto one piece of cellophane. Place the other piece of cellophane on top, ensure there are minimal wrinkles but that it is not too taught as you need room to pinch it around the wire. 
  9. Softly, pinch the cellophane around the outside of the wing before pinching around each of the wires. Do not pinch too hard as the cellophane will rip. 
  10. Turn the wing over and repeat this on the other side to make sure the cellophane is stuck to the wire outline on both sides. 
  11. Cut around the cellophane leaving around 1-2cm past the wire 
  12. To seal the cellophane around the wire, pinch it together then carefully use a lighter to heat it up, so it burns and moulds together around the wire. Make sure the cellophane is just above the flame and doesn’t actually touch it i.e. you’re applying heat not setting it on fire, a flame is used since it helps focus the heat over a small area. (Take extra care of surroundings and make sure your hand isn’t close to any open flame. 
    • Alternatively, if the cellophane is cut to size, cello tape can be used to seal it over the wire however, this can look messy and using a lighter gives a cleaner finish. 
  13. Repeat steps 2-12 to make the second wing. 
  14. Attaching the longer servo arms to the servos, position two servos along the inside of each wing, then stick the arms to the wings. The servo arms should be parallel. 
  15. Using wire, connect the two servos on both sides to reinforce them – do this on both wings. 
  16. Then connect the wings by using wire to connect the wire supports that were made in step 15. The connections should run horizontally, one at the top, and one at the bottom to create a square structure. 
  17. To strengthen the support, add connections from the top horizontal wire support down to the bottom in three, equally spaced points. The support should be strong enough to support the servos and keep the wings in place, but not so strong that the wings are rigid and stiff – they should still be able to flutter elegantly. 
  18. Cut the RGB strip to the desired length. 
  19. The 3-pin headers must then be soldered to the side of the strip indicated by the arrow.  
  20. Remove the backing and stick it down. If sticking along the outside frame, cello tape may be needed to reinforce it as the strip may not stay in place along the edge of the wire. 
  21. Wire up the mini breadboard to the two buttons and potentiometer 
  22. Use the longer leads to connect the components of the mini breadboard back to the Arduino Uno board 
  23. Using the recycled gold strips, wrap the leads tightly together to give it the appearance of a necklace. 
  24. Add gems to the buttons and potentiometer to also disguise them as a pendant in the necklace. 
  25. Connect the servos and RGB strips to the Arduino board and breadboard.  
  26. Create/stick the cardboard box to the wire support between the wings. Make sure this is on the correct side (the side that won’t be touching the wearer’s back). 
  27. Place the Arduino board, carefully, into the box along with all wiring. The ‘necklace’ (mini breadboard does not go inside so naturally some wiring will not fit fully inside the box – this is okay). 
  28. Add the strings to the top of the wire support – these are so that the wings can be worn by tying them around the wearer’s arms. 
  29. Add embellishments as desired. 

Code

// code by Halak & Jes :))))
#include <Servo.h>
#include <FastLED.h>
#define LED_PIN 5
#define NUM_LEDS 99  // we have 99 leds

Servo myservo;  // create servo object to control a servo         
Servo myservo2;
Servo myservo3;
Servo myservo4;

int pos = 0;
bool servoMoving = false;
bool lightOn = false;


const int potPin = A0;      // potentiometer pin (analog)
const int lightBtnPin = 2;  // the button to turn on lights
const int flapBtnPin = 3;  // button to control servo

// variable for reading the pushbutton status 
int buttonStateL = 0;  // for lights
int buttonStateS = 0;  // for servos
int potVal = 0;

int pressesL = 0;
int pressesS = 0;
CRGB leds[NUM_LEDS];

// global r,g,b values approach
int red = 255;
int blue = 0;
int green = 200;

void setup() {
  Serial.begin(9600);

  FastLED.addLeds<WS2812, LED_PIN, RGB>(leds, NUM_LEDS);
  FastLED.setMaxPowerInVoltsAndMilliamps(5, 500);
  FastLED.clear();
  FastLED.show();

// pinMode(lightBtnPin, INPUT_PULLUP);

  pinMode(lightBtnPin, INPUT);
  pinMode(flapBtnPin, INPUT);
  // Potentiometer doesn't need definition, just analogRead();

  myservo.attach(10);  // attaches the servo on pin 9 to the servo object
  myservo2.attach(11);
  myservo3.attach(12);  // attaches the servo on pin 9 to the servo object
  myservo4.attach(13);

  // interrupt
  //pinMode(INTERRUPT_PIN, INPUT_PULLUP);
  pinMode(flapBtnPin, INPUT_PULLUP);
  attachInterrupt(digitalPinToInterrupt(flapBtnPin), interruptServo, FALLING); // trigger when button pressed, but not when released.
  //attachInterrupt(digitalPinToInterrupt(lightBtnPin), interruptLight, FALLING);
}


void interruptServo() {
  Serial.println("interrupted");

  if(servoMoving == true){
    servoMoving = false;
  }
}

// void interruptLight() {
//   Serial.println("interrupted");
//   updateLights();
// }


void turnAtoB(int a, int b, int speed) {  // a to b, a < b
  for (pos = a; pos <= b; pos += 1) {
    myservo.write(pos);  // tell servo to go to position in variable 'pos'
    myservo2.write(pos);
    myservo3.write(pos);
    myservo4.write(pos);
    delay(speed);  // waits 15ms for the servo to reach the position
  }
}

void reverseAtoB(int a, int b, int speed) {  // a to b, a > b
  for (pos = a; pos >= b; pos -= 1) {
    myservo.write(pos);  // tell servo to go to position in variable 'pos'
    myservo2.write(pos);
    myservo3.write(pos);
    myservo4.write(pos);
    delay(speed);  // waits 15ms for the servo to reach the position
  }
}


void colourStrip(int g, int r, int b) {
  for (int i = 0; i < NUM_LEDS; i++) {
    leds[i] = CRGB(g, r, b);  //
    FastLED.show();
  }
}


void dialcol(int in) {  // input should be potentiometer value
  // logically, colour cycles are just shifting the distribution of RGB between two at a time.
  // see: R=255,B=0 -> R=0, B=255 goes through red, pink, purple, blue (keeping last value 0 to keep it light);
  // we do this for RB, BG and GR: shifting 255 values 3 times, so x of 765 "points" to map onto 0-1024

  // first off, map where the potentiometer is on its cycle
  int mapped = map(in, 0, 1023, 0, 765);

  // now work out: is it RB[0], BG[1] or GR[2]?
  int phase = mapped / 255;  // int divide
  int rem = mapped % 255;    // modulus: this is how far in we are (first val of pair)

  if (phase == 0) {  // RG
    red = rem;
    green = 255 - rem;
    blue = 0;
  } else if (phase == 2) {  // GB
    green = rem;
    blue = 255 - rem;
    red=0;
  } else {  //BR
    blue = rem;
    red = 255 - rem;
    green=0;
  }
  // reload lights if they're on
  if(pressesL %2 != 0){
    colourStrip(green, red, blue);
  }
}

void updateLights() {
  if(lightOn ==true) {
    colourStrip(green, red, blue);
  } else {
    colourStrip(0,0,0);
  }
}

void loop() {

  delay(100);
  buttonStateL = digitalRead(lightBtnPin);
  delay(100);
  buttonStateS = digitalRead(flapBtnPin);
  
  potVal = analogRead(potPin);
  dialcol(potVal);

  // check if the pushbutton is pressed.
  //   if it is, the buttonState is HIGH:
  // of buttonstate is on - then only read the potentiometer and change the colour
  // if (buttonStateL == LOW) {
  //   pressesL++;
  //   if (pressesL % 2 != 0) {
  //     Serial.println("led on");
  //     colourStrip(green, red, blue);
  //   } 
  //   else {
  //     Serial.println("led is turned off");
  //     lightOn = false; 
  //     colourStrip(0,0,0);
  //   }
  // }
  colourStrip(green, red, blue);

  if (buttonStateS == LOW) {
    pressesS++;
    if (pressesS % 2 == 0) { // even: turn off
      Serial.println("its even, so the servo is off");
      servoMoving = false;
    } else {
      Serial.println("its odd, so the servo is on");
      servoMoving = true;
    }
  }

  if(servoMoving ==true) {
    Serial.println("servoMoving");
    int min = 0;
    int max = 100;
    int spd = 15;
    turnAtoB(90, 140, spd);
    reverseAtoB(140, 90, spd);
    // i think (the first two servos) need to go 180 to 140
  }
  //updateLights();
}

​ Circ 07, Circ 04 were used as a reference for the code for the push buttons and the servos. FastLED library was used for the coding the addressable LED strip

Testing

Testing was conducted at every stage of the building process. Firstly, the RGB strips were programmed to output a single colour to ensure all LEDs were functional; they were also tested after being soldered to the headers to ensure the 3-pin header had been joined properly, and then again when the button input had been wired. 

The mini breadboard was wired to connect two buttons and a potentiometer to the main arduino. We used a sketch that printed different outputs to the serial monitor when it detected each button press, and kept a record of previous state to ensure buttons were togglable. We also printed the value of the potentiometer at regular intervals. When we were certain all input methods were responsive and wired correctly, we connected the RGB strip to the arduino and debugged a sketch which took inputs from the potentiometer and mapped them to an RGB output. 

As the servos were attached to the wings, they were tested using a simple servo movement sketch to ensure both that the wings moved in the right direction (away from the intended user) and that a pair along the wing would move in sync. Once all servos were installed, we ensured they could be activated and deactivated with button presses before assembling to the frame.  

Issues that came up during code testing were mainly to do with button responsiveness. Even when wired properly, both buttons appeared to not register response or lag when turning off the servo or RGB strip. After re-working the order of checking for buttons within loop(), we introduced an interrupt to the servo button pin which prioritised checking the state of the servos when the button was pressed. This reduced the severity of the issue, but there is still a short delay between either button press and actual stopping of the RGB strip and/or servo. 

​ 

Possible Improvements

Hardware improvements
  • The RGB strip would go around the entire wing.  
  • Customisable pendant: buttons can be changed so colours fit the character/scene better, further blending the pendant into the costume. 
Coding improvements
  • Different light sequences could be programmed and used. For example, different patterns such as blinking or running, and colours could be cycled. There could also be the option to adjust the brightness of the lights. 
  • Fluttering could have a speed adjustment feature – allows for more dramatic effects on stage. 
  • Allow to change the colour on the led strip with the potentiometer without turning on the lights as well.

Group members

Group 3- Your Own Talking and Loving Teddy Bear

THE CYBEARG – YOUR OWN MINI SECURITY SYSTEM

Imagine entering your home and your Teddy Bear greeting you with a welcoming message or with lighting up eyes. Also, it will be great if the Teddy Bear is not so welcoming to other members in the house (just for fun!). For this, you are encouraged to use an RFID tag and reader with a choice of tags one of them being your own hence Teddy realising it is you and delivering a friendly message! You need to use at least one other tag that is not yours and hence delivering unwelcoming messages and maybe red eyes! Remember, you do not have to use a real Teddy bear but you can use other prototyping options

DESIGN BLOG

THE MAKING PROCESS

Monday 21/11/22

Today we began the process of designing our Teddy Bear Robot. We began sketching out our initial ideas and planning out how we want to make our system interactive. The aim of today was to get rough idea of how we planned on creating a bear that reacts to external stimulus and then put our two different responses, one friendly, and one not so friendly.

We spent our first session brainstorming potential movements for the bear including ideas like a spinning head on a motor, red LED eyes, waving arms, a speaker that plays voices or an alarm, an RFID scanner and a motion sensor.

Monday 28/11/22

Having now come up with a concept and a rough plan of how to proceed, we began by finding the teddy that would become the main basis for the project. Once procured, we moved onto to dismembering our poor monkey and tearing it from limb to limb. We took measurements of the bear after removing its stuffing and started to make the frame that would house all the electronics and sit on the inside of the bear.

We also began scavenging recycled parts to use within the bear. Since our initial design was quite broad, we knew we would be able to change aspects of the bear based on what we were able to find. Among the recycled parts, we found an old LCD screen, many different sized servos, a speaker, and many other small parts.

We then began wiring up all these found parts and finding code to test them. It took a lot of trial and error and we soon found out the speaker was broken, the LCD was able to turn on but couldn’t display any writing and around half the servos worked.

Using the bigger servos that did work, we redesigned the bears moving arm using the more powerful servo and some metal spindles from a broken umbrella.

Monday 05/12/22

This morning we received the new components we ordered, including the RFID scanner, the speaker and LCD screen and began testing them and figuring out the code for the parts individually. Unfortunately, we couldn’t get the RFID scanner to work after countless tries and hours of working. Also, we began facing an issue where whenever we tried to power the servo using a 9v battery instead of being plugged directly into a laptop. After plugging the servos back into the laptop, they no longer worked so we spent a lot of time trying to get everything to work again.

We also tested the motion sensor and found it wasn’t very sensitive, the sensor would go off at incorrect times and sometimes wouldn’t work at all. Luckily after a day full of setbacks we at least got the speaker and LCD working.

Tuesday 06/12/22

We managed to finally fix the servos and began making a new arm mechanism out of some recycled thin, lightweight acrylic instead of the metal spindle in case it was the weight of the arm that kept making the servo break. We also used some tiny screws to hold it together as everything had been previously kept together using masking tape.

Sole also got the RFID scanner working after reinstalling Arduino and restarting the program. Now that we had all the parts tested individually we needed to arrange them within the bear.

Wednesday 07/12/22

Everything is finally beginning to come together. All the individual components have been working separately so we have begun moving everything onto one Arduino board and planning out how all the components are going to fit within the bear.

We also found that the speaker was very quiet so we worked on trying to improve the volume by trying to add a transistor into the circuit which should increase it. We also stared to write new code that merges all the existing code we wrote for the original parts. This included a series of IF statements that cause the LCD screen and the LED eyes to react when the RFID scanner is activated.

We have also been testing as many card as we can on the RFID scanner, we have found that things like apple pay are scannable by the scanner and we can elicit a response from this action. We’ve also tried Oyster cards, hotel cards, our university key cards and other things.

As well as this, the speaker has been stitched into the right leg of the bear.

However, a big issue has emerged. The two libraries that we need to use for the servo and the LCD screen are clashing. Whenever the servo is activated, the LCD screen no longer works, and vice versa.    

Thursday 08/12/2022

Since the servo library is clashing with the library we used for the LCD, we tried using a motor instead of the servo to make the arm move, but quickly realised that this wasn’t a viable solution. Therefore, we went back to the servo and opted instead to find a different library for the speaker that wouldn’t crash. After a long time searching, we managed to find something, but it still didn’t work perfectly so we ended up going into the library and changing some code in there to try and fix the problem. Luckily, doing this solved the problem and we were able to continue finalising parts of the bear.

We then stitched all the components we could into place like the LCD in the stomach and the RFID scanner into the leg.

Friday 09/12/2022

As the teddy monkey is nearing completion, all we had to do today was solder all the wires in place and then apply heat shrink tubing into the areas that needed it. We spent a lot of time working on cable management and organising all our wiring as we knew that once everything was in the bear, it would be difficult to take it apart to get to the wires if there were any issues. We made all the wiring as flat as well as we could to make everything fit as flush to the Arduino and breadboard to minimise the chance of anything being knocked out of place as the bear moves.

Saturday 10/12/2022

Today we tried to add a second sound file into the code that would be played through the speaker when the correct card was scanned. We began by creating a voice recording that brought that into Audacity to edit the sound quality to make it 8-bit which would allow us to play it on the speaker. After that we took that sound file and encoded it so it gave us a series of numbers that could be interpreted it as sound by the speaker. However when we tested it, the bear no longer worked as the code file became too big for the arduino to read. We tried shortening parts to fix this but when we finally managed to play the sound it was too deep and distorted so we decided to remove it.

After deciding not to put in the speaker sound in the bear, we moved on to finally attaching the last section which was the servo arm. We then edited the code to make the arm movement smoother and began bug testing.

We trialled the bear many times to make sure the movements were all smooth and that each component worked as they should. When the bear starts up, the eyes should glow a yellowish colour and the LCD screen should show the message “SCAN YOUR KEYCARD”. When the correct card is scanned, the bear’s eyes turn green, the LCD displays the message “WELCOME BACK ZAYNA”, and the servo arm will wave at the user. If the incorrect card is scanned, the eyes turn red, the LCD shows “GO AWAY SOLE”, and the speaker in the foot begins to bark aggressively at the user. The barking was supposed to be a fun, jokey take on the idea of a “guard dog” since the barking would be coming from a monkey.

We decided to put the speaker and the RFID scanner in the feet as these are the elements of the teddy that are the most interactive so we decided to place them closest to the user. As for the scanner, the user should be able to see the red LED in the foot and intuitively scan their card there.

PROJECT TASK

LIST

GANT CHART

MAKER MANUAL

OVERVIEW

The Guard Monkey starts with a message, “Scan your keycard”, on the LCD screen, where the user will be prompted to scan the RFID tag with the module. The module will be looking out for a valid new card available for scanning. If the serial read by the module is the same as the string recorded as your card UID, it would print out the welcome back message on the LCD screen with green eyes and a servo-controlled wave movement with the arm which is achieved through limiting the change in position of the actuator between 110 and 180. If any other keycard has been scanned, the monkey goes into guard mode, printing out go away to the intruder with hostile red eyes and dog barking speaker sound playing through the speaker using the preset array of 16-bit 8000hz WAV file data.

TOOLS AND SUPPLIES

Electrical Components:

  • Arduino Uno
  • Breadboard
  • Speaker
  • Servo
  • RFID Scanner
  • RFID readable cards
  • LCD screem
  • PN2222A Transistor
  • 2x RGD LED
  • Wire

Non Electrical Components:

  • Cardboard
  • Electrical Tape
  • Recycled 15mm wood
  • 4mm Acrylic
  • 5mm Screws and nuts
  • Old teddy bear
  • Zipper
  • Heatshrink tubing
  • Solder

Tools:

  • Scissors
  • Unpicker
  • Needle and thread
  • Pillar Drill
  • Band Saw
  • Heat Gun
  • Soldering Iron
  • Wire Cutter

LAYOUT AND CIRCUIT DIAGRAM

BUILD SECTION

Building our robot bear monkey begins with carefully unpicking the seems of our teddy and removing both the limbs and stuffing from the innocent toy. Then using the stomach section of the bear as a reference, cut down a relatively thick piece of wood to a roundish shape that will sit inside the bear for structure and to house the Arduino uno and breadboard.

Once the wood is the right shape, measure out a rectangle using the Arduino and breadboard as a guide and, using a forstner bit on a pillar drill, carve out a section that will hold the Arduino flush in the wooden board. Then cut out a notch in the top tight corner where the servo will be affixed.

Then, using a thin strip of acrylic plastic, cut it down to roughly 1.5cm by 10cm or any size that fits within the bear’s arm. We then use a pillar drill with a 3mm bit to add holes to this piece which will match up with existing holes on a plastic servo arm. Then screw these pieces together with a small screw and nut. These must be small enough to not interfere with the movement of the servo.

Once all the wiring of the components is done, begin lining up the parts with the affiliated limbs of the bear to begin stitching them in place. This includes the RFID scanner in the left leg, the speaker in the right leg, the LCD screen in the torso, two RGB LEDs for the eyes and the acrylic servo attachment into the right arm.

Once everything is in place and power is attached to the bear, it will begin to interact with the user.

COMMENTED CODE

//Libraries for LCD screen
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
//Library for Servo
#include <Servo.h>
//Libraries for RFID tag
#include <SPI.h>
#include <MFRC522.h>
//Library for speaker
#include <FlagPCM.h>

//Definition of pins to their sensor/actuators
#define RST_PIN 9
#define SS_PIN 10
#define LED_G 7
#define LED_R 8
#define LED_G2 2
#define LED_R2 4

MFRC522 mfrc522(SS_PIN, RST_PIN);

LiquidCrystal_I2C lcd(0x27, 16, 2);

//Unsigned 8-bit characters for the barking sound delivered through the speaker
const unsigned char barking[] PROGMEM = {
126, 126, 127, 128, 128, 127, 129, 129, 129, 129, 128, 127, 127, 127, 127, 127, 127, 127, 128, 129, 127, 125, 125, 128, 129, 129, 128, 125, 125, 125, 127, 130, 130, 128, 127, 127, 128, 129, 127, 126, 126, 127, 129, 131, 130, 129, 127, 126, 126, 126, 127, 127, 125, 126, 127, 127, 127, 125, 125, 129, 130, 128, 128, 129, 130, 130, 129, 129, 129, 129, 126, 125, 127, 127, 124, 124, 126, 126, 126, 127, 128, 130, 129, 127, 129, 132, 131, 129, 127, 127, 127, 126, 126, 127, 129, 128, 127, 126, 126, 125, 127, 130, 129, 129, 127, 125, 126, 129, 129, 127, 126, 126, 128, 132, 133, 129, 126, 124, 122, 124, 128, 130, 131, 127, 123, 125, 130, 131, 130, 129, 128, 127, 127, 125, 125, 124, 123, 126, 132, 132, 128, 128, 131, 132, 132, 130, 127, 128, 128, 125, 123, 121, 117, 120, 129, 132, 129, 127, 126, 128, 133, 132, 131, 138, 139, 129, 123, 123, 119, 120, 124, 127, 129, 126, 119, 124, 132, 129, 128, 133, 133, 131, 131, 127, 124, 126, 125, 120, 124, 131, 132, 136, 137, 127, 122, 126, 122, 121, 130, 126, 118, 127, 134, 132, 138, 135, 120, 121, 129, 125, 123, 126, 125, 121, 121, 125, 141, 157, 149, 125, 119, 124, 115, 112, 122, 122, 116, 119, 127, 144, 152, 135, 124, 129, 130, 131, 129, 114, 111, 116, 110, 115, 143, 164, 159, 141, 127, 121, 117, 121, 121, 104, 99, 113, 122, 137, 149, 137, 129, 133, 130, 140, 162, 153, 121, 108, 107, 103, 111, 126, 126, 125, 126, 124, 142, 166, 145, 107, 104, 115, 127, 136, 121, 113, 132, 139, 147, 162, 151, 131, 115, 96, 105, 124, 106, 97, 119, 128, 131, 144, 147, 145, 143, 145, 156, 152, 130, 111, 94, 85, 96, 111, 129, 150, 155, 145, 131, 116, 111, 118, 127, 133, 133, 129, 128, 131, 152, 166, 139, 112, 113, 109, 106, 117, 114, 112, 124, 128, 137, 156, 155, 134, 109, 101, 126, 153, 153, 140, 120, 108, 117, 123, 137, 154, 127, 84, 89, 114, 120, 122, 134, 147, 159, 164, 167, 175, 158, 113, 83, 80, 79, 94, 120, 124, 140, 158, 136, 132, 155, 137, 112, 116, 109, 120, 147, 140, 147, 167, 134, 109, 132, 134, 122, 119, 88, 65, 89, 115, 132, 150, 151, 165, 204, 192, 155, 143, 105, 64, 64, 71, 90, 131, 137, 128, 155, 140, 107, 127, 139, 148, 165, 157, 154, 154, 107, 75, 115, 126, 106, 119, 117, 116, 137, 139, 124, 124, 114, 90, 117, 167, 195, 195, 144, 91, 82, 91, 95, 124, 141, 107, 95, 108, 117, 130, 168, 219, 197, 139, 127, 124, 98, 89, 84, 72, 110, 138, 135, 165, 166, 131, 108, 104, 122, 144, 141, 142, 173, 168, 121, 89, 95, 124, 125, 128, 122, 88, 84, 108, 122, 110, 108, 162, 230, 221, 157, 133, 106, 77, 81, 72, 102, 138, 115, 120, 136, 97, 90, 134, 149, 213, 255, 147, 49, 99, 90, 51, 96, 131, 129, 129, 107, 123, 165, 104, 49, 119, 173, 174, 203, 190, 127, 89, 64, 70, 125, 140, 101, 93, 112, 104, 94, 107, 159, 237, 236, 158, 107, 105, 108, 71, 57, 110, 141, 119, 111, 145, 141, 85, 77, 136, 216, 232, 195, 148, 86, 66, 73, 93, 124, 120, 115, 99, 77, 85, 122, 201, 255, 234, 121, 69, 84, 89, 110, 113, 106, 113, 101, 98, 112, 115, 107, 150, 241, 255, 168, 59, 31, 47, 80, 79, 87, 157, 149, 121, 158, 153, 102, 75, 99, 163, 213, 165, 125, 133, 92, 82, 93, 141, 193, 104, 48, 93, 99, 84, 110, 165, 230, 235, 133, 96, 113, 98, 109, 71, 62, 117, 120, 122, 127, 92, 85, 166, 240, 245, 175, 67, 41, 49, 81, 123, 128, 146, 107, 70, 100, 124, 183, 254, 229, 153, 120, 57, 45, 122, 110, 101, 124, 109, 113, 102, 71, 77, 157, 250, 255, 194, 93, 63, 53, 88, 110, 92, 105, 71, 32, 63, 165, 255, 255, 198, 147, 119, 64, 61, 118, 107, 104, 78, 50, 78, 61, 79, 200, 255, 255, 184, 106, 6, 34, 90, 71, 100, 132, 111, 111, 116, 71, 80, 171, 245, 255, 238, 124, 29, 50, 100, 94, 92, 111, 122, 99, 77, 71, 127, 243, 255, 216, 141, 64, 91, 115, 102, 78, 63, 68, 55, 89, 114, 113, 167, 238, 255, 210, 123, 55, 57, 107, 75, 77, 103, 58, 68, 87, 128, 249, 255, 207, 176, 102, 30, 69, 123, 103, 84, 84, 89, 115, 81, 60, 147, 246, 255, 225, 101, 44, 37, 88, 101, 90, 111, 73, 51, 69, 129, 239, 255, 211, 164, 98, 44, 52, 124, 143, 124, 86, 54, 76, 33, 56, 195, 248, 255, 202, 90, 24, 23, 100, 122, 98, 120, 114, 83, 49, 85, 190, 251, 253, 201, 130, 44, 24, 109, 139, 144, 127, 61, 73, 64, 64, 173, 235, 249, 225, 124, 34, 32, 118, 151, 113, 81, 73, 83, 44, 86, 219, 249, 227, 163, 92, 61, 53, 97, 110, 123, 111, 51, 61, 47, 96, 233, 254, 240, 204, 82, 0, 21, 88, 97, 141, 138, 84, 78, 33, 78, 226, 255, 255, 204, 87, 12, 18, 89, 131, 128, 89, 64, 87, 66, 123, 242, 249, 238, 164, 29, 4, 66, 120, 138, 145, 97, 68, 81, 21, 85, 236, 255, 250, 182, 42, 0, 49, 139, 155, 160, 120, 36, 29, 61, 146, 245, 255, 239, 144, 30, 0, 57, 147, 159, 151, 120, 79, 66, 20, 80, 226, 255, 242, 181, 73, 11, 50, 142, 163, 125, 61, 23, 59, 108, 190, 248, 242, 207, 120, 46, 29, 82, 170, 161, 102, 68, 46, 35, 49, 136, 242, 255, 234, 105, 0, 0, 37, 104, 161, 188, 161, 128, 92, 13, 71, 223, 251, 236, 184, 72, 13, 44, 105, 166, 200, 133, 79, 81, 30, 49, 148, 235, 255, 244, 115, 14, 14, 93, 158, 155, 129, 136, 106, 36, 13, 66, 189, 255, 255, 183, 100, 45, 55, 89, 114, 144, 146, 119, 80, 54, 87, 156, 222, 247, 223, 132, 26, 35, 105, 119, 92, 98, 122, 115, 126, 139, 134, 119, 123, 188, 218, 163, 110, 98, 96, 88, 77, 81, 150, 197, 158, 109, 55, 28, 101, 210, 252, 246, 203, 104, 38, 43, 81, 115, 111, 105, 113, 102, 66, 77, 165, 255, 255, 210, 102, 41, 55, 78, 68, 102, 165, 175, 138, 104, 79, 79, 134, 202, 255, 255, 156, 44, 2, 42, 99, 151, 188, 164, 130, 107, 77, 54, 92, 188, 250, 253, 190, 118, 84, 57, 66, 97, 121, 148, 156, 138, 101, 54, 44, 123, 227, 255, 239, 173, 85, 37, 58, 86, 114, 152, 138, 96, 80, 68, 71, 162, 255, 255, 233, 143, 35, 24, 59, 88, 130, 173, 164, 127, 105, 79, 104, 141, 143, 177, 226, 225, 163, 90, 47, 55, 106, 128, 133, 157, 164, 123, 71, 65, 92, 140, 209, 245, 222, 176, 99, 27, 49, 100, 117, 136, 154, 152, 117, 76, 69, 108, 159, 201, 228, 212, 174, 112, 41, 42, 83, 112, 137, 151, 159, 150, 114, 86, 98, 140, 170, 166, 152, 151, 146, 129, 120, 111, 97, 99, 114, 131, 139, 129, 137, 144, 131, 117, 93, 91, 138, 203, 222, 172, 115, 84, 77, 81, 97, 139, 182, 178, 118, 74, 79, 83, 107, 164, 185, 181, 196, 167, 100, 77, 83, 100, 129, 130, 100, 107, 131, 142, 170, 163, 120, 110, 112, 112, 111, 129, 166, 183, 159, 112, 88, 84, 101, 140, 158, 151, 130, 110, 110, 115, 126, 134, 139, 149, 142, 124, 116, 126, 143, 121, 75, 75, 115, 154, 176, 166, 136, 118, 113, 91, 90, 119, 134, 147, 144, 129, 138, 163, 164, 124, 112, 126, 108, 92, 93, 98, 98, 108, 135, 156, 169, 158, 138, 155, 175, 163, 129, 98, 66, 47, 62, 85, 112, 173, 219, 206, 154, 99, 91, 111, 121, 130, 139, 138, 114, 95, 96, 113, 137, 132, 128, 128, 122, 144, 158, 151, 130, 108, 103, 102, 110, 125, 137, 128, 110, 117, 127, 140, 146, 130, 126, 126, 116, 107, 106, 114, 122, 121, 132, 156, 162, 146, 123, 107, 108, 117, 117, 111, 117, 129, 146, 146, 123, 121, 129, 132, 119, 99, 116, 138, 137, 135, 141, 145, 134, 127, 119, 119, 118, 106, 107, 101, 110, 145, 150, 141, 135, 119, 117, 129, 130, 127, 134, 119, 102, 115, 126, 129, 128, 119, 126, 145, 158, 157, 138, 123, 106, 85, 91, 124, 147, 152, 144, 125, 110, 115, 125, 123, 122, 130, 134, 123, 110, 110, 121, 140, 137, 126, 140, 140, 123, 128, 134, 128, 123, 115, 106, 120, 134, 126, 124, 120, 122, 141, 141, 132, 133, 134, 128, 119, 118, 119, 124, 123, 116, 118, 122, 136, 148, 143, 136, 133, 130, 121, 118, 111, 103, 122, 140, 139, 130, 116, 108, 127, 149, 147, 143, 131, 112, 111, 123, 130, 130, 136, 135, 127, 121, 113, 113, 123, 136, 134, 125, 131, 135, 136, 132, 133, 138, 130, 120, 108, 100, 106, 116, 129, 142, 155, 154, 145, 130, 112, 117, 124, 116, 117, 129, 137, 129, 118, 118, 131, 137, 132, 131, 121, 114, 126, 138, 146, 151, 138, 123, 121, 121, 127, 128, 113, 108, 117, 119, 120, 132, 138, 135, 140, 149, 145, 131, 116, 108, 110, 122, 129, 129, 129, 124, 127, 134, 123, 121, 139, 142, 131, 127, 126, 129, 133, 134, 139, 132, 110, 112, 124, 116, 114, 126, 132, 137, 135, 124, 125, 134, 138, 139, 129, 116, 118, 127, 126, 120, 123, 129, 124, 124, 135, 135, 128, 127, 127, 134, 141, 132, 122, 119, 117, 127, 137, 132, 125, 121, 113, 119, 131, 134, 131, 126, 126, 136, 132, 123, 126, 127, 126, 129, 127, 125, 125, 122, 120, 122, 127, 130, 132, 133, 132, 130, 125, 121, 119, 124, 127, 125, 127, 132, 136, 134, 130, 128, 125, 126, 127, 122, 120, 126, 127, 129, 135, 127, 118, 123, 132, 134, 131, 127, 125, 132, 134, 122, 115, 114, 117, 128, 140, 138, 129, 125, 121, 124, 129, 126, 125, 126, 128, 134, 133, 129, 129, 127, 119, 118, 125, 126, 132, 131, 122, 122, 125, 127, 128, 127, 125, 132, 138, 130, 128, 129, 119, 116, 122, 126, 127, 126, 126, 128, 133, 130, 124, 128, 130, 128, 129, 126, 121, 126, 132, 133, 129, 126, 127, 125, 123, 128, 129, 129, 129, 123, 118, 125, 132, 130, 130, 128, 124, 123, 123, 127, 131, 131, 127, 126, 130, 129, 127, 124, 123, 125, 128, 134, 135, 131, 126, 124, 126, 123, 126, 125, 118, 123, 131, 138, 139, 132, 126, 127, 128, 127, 126, 123, 121, 123, 121, 122, 129, 134, 134, 133, 127, 124, 128, 127, 129, 133, 130, 126, 122, 120, 123, 129, 133, 133, 132, 128, 128, 125, 121, 124, 126, 127, 128, 127, 126, 128, 130, 128, 129, 129, 128, 132, 132, 129, 128, 126, 123, 124, 125, 123, 125, 128, 131, 133, 130, 127, 127, 126, 125, 129, 132, 130, 128, 126, 123, 122, 125, 128, 130, 130, 130, 129, 130, 130, 129, 128, 127, 125, 123, 124, 124, 128, 133, 133, 130, 127, 127, 126, 128, 130, 131, 129, 125, 122, 121, 122, 126, 130, 132, 131, 131, 131, 127, 124, 125, 126, 130, 131, 128, 126, 124, 123, 127, 130, 130, 129, 127, 126, 126, 127, 130, 131, 131, 127, 123, 122, 124, 128, 133, 133, 129, 126, 125, 126, 129, 127, 126, 127, 128, 127, 125, 125, 127, 129, 131, 130, 129, 129, 129, 128, 127, 126, 126, 127, 126, 127, 126, 126, 128, 130, 130, 126, 124, 127, 129, 130, 129, 127, 128, 129, 129, 128, 128, 126, 125, 125, 123, 125, 128, 130, 129, 128, 128, 130, 131, 129, 127, 126, 125, 124, 124, 126, 127, 128, 129, 129, 132, 133, 132, 129, 123, 123, 126, 128, 128, 125, 123, 128, 131, 131, 130, 128, 127, 125, 124, 126, 127, 128, 128, 128, 129, 129, 130, 130, 130, 130, 126, 125, 128, 127, 128, 128, 127, 126, 127, 127, 126, 125, 125, 126, 128, 132, 132, 131, 128, 126, 126, 125, 126, 127, 126, 125, 123, 126, 128, 131, 133, 132, 131, 128, 124, 125, 129, 130, 129, 128, 126, 124, 126, 128, 130, 130, 131, 129, 127, 125, 125, 127, 126, 124, 124, 126, 127, 128, 130, 131, 132, 132, 130, 128, 125, 124, 126, 129, 128, 125, 126, 127, 128, 129, 129, 129, 129, 126, 124, 125, 126, 128, 129, 128, 127, 127, 128, 128, 128, 128, 127, 128, 128, 128, 126, 124, 126, 128, 130, 130, 128, 126, 127, 129, 131, 132, 128, 126, 126, 126, 128, 128, 127, 127, 125, 125, 126, 127, 127, 129, 130, 128, 129, 128, 126, 126, 127, 127, 128, 128, 128, 130, 128, 125, 125, 125, 129, 130, 129, 127, 126, 127, 128, 128, 127, 125, 127, 129, 131, 131, 128, 127, 126, 125, 126, 126, 127, 129, 128, 126, 126, 127, 128, 129, 131, 131, 129, 127, 124, 124, 126, 127, 129, 129, 129, 130, 130, 128, 126, 125, 126, 126, 124, 123, 124, 128, 131, 132, 130, 129, 129, 131, 131, 129, 127, 126, 125, 125, 125, 125, 125, 125, 126, 128, 130, 130, 128, 125, 124, 127, 131, 132, 131, 130, 128, 127, 126, 125, 126, 129, 130, 128, 124, 123, 125, 129, 131, 131, 129, 128, 126, 125, 125, 126, 127, 127, 126, 125, 128, 132, 132, 129, 124, 124, 128, 132, 133, 130, 127, 127, 127, 126, 124, 124, 125, 127, 126, 125, 125, 127, 129, 132, 133, 133, 131, 127, 124, 123, 126, 129, 130, 126, 122, 122, 127, 132, 134, 133, 131, 130, 129, 126, 125, 126, 125, 124, 122, 120, 122, 126, 130, 134, 134, 133, 133, 132, 131, 129, 128, 127, 123, 120, 118, 121, 125, 128, 131, 132, 133, 133, 135, 135, 133, 128, 121, 118, 116, 116, 120, 122, 128, 133, 134, 135, 134, 134, 135, 137, 133, 127, 123, 118, 120, 122, 121, 122, 122, 125, 129, 132, 132, 130, 133, 132, 132, 129, 121, 118, 115, 117, 122, 127, 137, 147, 153, 151, 138, 124, 115, 113, 113, 113, 113, 114, 115, 120, 129, 138, 144, 143, 138, 137, 135, 137, 141, 138, 127, 112, 100, 100, 107, 118, 132, 145, 146, 137, 125, 116, 121, 132, 134, 128, 118, 118, 130, 146, 156, 151, 140, 129, 118, 110, 100, 100, 111, 122, 124, 121, 124, 136, 150, 149, 138, 131, 132, 145, 152, 139, 117, 105, 105, 111, 116, 113, 120, 130, 131, 126, 119, 126, 139, 144, 140, 134, 140, 153, 159, 143, 117, 103, 101, 109, 108, 105, 114, 126, 132, 126, 126, 132, 142, 147, 145, 145, 148, 152, 143, 119, 98, 94, 109, 127, 131, 120, 106, 101, 105, 118, 132, 143, 152, 167, 180, 177, 156, 122, 100, 94, 97, 101, 103, 108, 110, 115, 125, 138, 151, 148, 139, 126, 130, 150, 163, 159, 137, 114, 100, 98, 100, 105, 124, 139, 136, 115, 96, 91, 105, 139, 179, 209, 205, 170, 126, 94, 86, 91, 99, 105, 107, 105, 104, 113, 125, 132, 133, 144, 177, 208, 205, 164, 115, 77, 69, 73, 86, 108, 120, 131, 132, 125, 118, 105, 111, 148, 210, 238, 199, 133, 69, 50, 71, 99, 127, 135, 121, 108, 99, 95, 98, 116, 178, 242, 250, 200, 104, 36, 41, 77, 104, 116, 125, 124, 122, 111, 97, 92, 103, 174, 250, 255, 204, 108, 31, 31, 72, 102, 138, 153, 139, 115, 79, 66, 65, 130, 231, 255, 255, 173, 43, 0, 22, 75, 115, 144, 156, 153, 127, 84, 60, 54, 130, 236, 255, 255, 145, 24, 0, 39, 93, 143, 167, 146, 115, 74, 57, 50, 108, 231, 255, 255, 190, 42, 0, 9, 64, 120, 138, 152, 148, 129, 106, 87, 74, 134, 222, 249, 235, 142, 42, 12, 36, 86, 121, 146, 137, 114, 99, 90, 93, 139, 219, 232, 226, 169, 58, 29, 27, 61, 113, 122, 138, 145, 132, 125, 106, 78, 137, 219, 228, 223, 144, 52, 38, 56, 78, 86, 124, 150, 156, 169, 126, 86, 79, 119, 202, 242, 212, 141, 75, 42, 51, 79, 112, 143, 138, 130, 122, 95, 65, 91, 181, 247, 255, 219, 87, 1, 8, 65, 118, 140, 130, 126, 127, 120, 112, 100, 148, 224, 253, 219, 113, 18, 24, 89, 127, 152, 156, 110, 79, 61, 42, 80, 188, 255, 255, 225, 90, 0, 0, 50, 139, 168, 156, 140, 104, 71, 57, 88, 145, 231, 255, 234, 155, 48, 0, 30, 125, 180, 177, 127, 44, 21, 71, 125, 218, 255, 255, 227, 132, 10, 0, 19, 111, 196, 201, 111, 52, 37, 63, 146, 220, 255, 255, 228, 113, 0, 0, 30, 130, 207, 198, 144, 80, 39, 65, 109, 143, 223, 255, 244, 158, 43, 0, 39, 124, 194, 195, 132, 53, 13, 46, 90, 164, 255, 255, 217, 144, 44, 0, 44, 113, 148, 146, 114, 84, 75, 92, 113, 167, 232, 225, 207, 163, 57, 18, 54, 96, 135, 143, 104, 58, 68, 117, 167, 239, 255, 236, 184, 108, 23, 22, 56, 83, 135, 144, 100, 72, 84, 129, 188, 255, 255, 230, 168, 67, 0, 19, 61, 112, 162, 156, 137, 118, 95, 104, 134, 170, 213, 230, 195, 117, 50, 39, 71, 132, 160, 136, 108, 57, 46, 90, 120, 194, 255, 222, 179, 131, 63, 38, 54, 72, 94, 113, 105, 98, 107, 103, 131, 220, 245, 210, 184, 92, 22, 39, 46, 72, 108, 106, 113, 131, 148, 180, 216, 224, 205, 188, 134, 45, 12, 20, 34, 88, 130, 143, 158, 159, 184, 221, 219, 201, 163, 117, 77, 31, 24, 40, 67, 139, 180, 177, 172, 140, 113, 125, 166, 196, 202, 186, 129, 80, 61, 28, 38, 93, 107, 128, 166, 140, 144, 185, 183, 199, 191, 123, 70, 61, 55, 42, 75, 97, 107, 142, 128, 117, 158, 188, 205, 211, 149, 76, 62, 46, 47, 57, 52, 86, 132, 185, 213, 203, 200, 197, 186, 120, 55, 41, 36, 63, 89, 87, 95, 130, 177, 229, 247, 195, 169, 150, 106, 87, 61, 42, 45, 84, 127, 139, 172, 178, 153, 130, 115, 141, 175, 189, 166, 126, 83, 50, 66, 95, 111, 107, 127, 141, 124, 151, 178, 196, 214, 175, 104, 47, 38, 52, 83, 114, 114, 128, 134, 119, 122, 160, 194, 216, 218, 141, 54, 8, 0, 25, 63, 103, 150, 196, 209, 176, 155, 164, 191, 189, 133, 60, 12, 9, 34, 75, 109, 146, 195, 217, 206, 171, 156, 165, 166, 135, 84, 55, 38, 38, 44, 55, 114, 213, 255, 251, 177, 119, 83, 93, 113, 125, 126, 105, 60, 22, 29, 78, 195, 255, 255, 196, 106, 55, 47, 84, 117, 117, 135, 135, 117, 95, 85, 108, 144, 185, 204, 199, 155, 85, 50, 61, 103, 131, 155, 145, 86, 61, 59, 85, 139, 202, 241, 213, 161, 79, 34, 68, 104, 127, 114, 71, 48, 79, 115, 153, 232, 255, 255, 187, 74, 19, 29, 93, 137, 127, 103, 79, 92, 105, 103, 127, 188, 255, 255, 202, 81, 15, 11, 55, 116, 139, 146, 114, 67, 58, 83, 168, 255, 255, 233, 140, 60, 9, 5, 50, 118, 175, 190, 156, 95, 47, 53, 150, 241, 255, 253, 156, 42, 0, 0, 65, 132, 153, 159, 138, 109, 91, 116, 186, 231, 240, 192, 83, 19, 17, 31, 70, 116, 167, 184, 151, 116, 92, 120, 192, 221, 209, 162, 84, 43, 31, 24, 66, 146, 208, 203, 146, 84, 34, 84, 187, 227, 251, 206, 86, 20, 0, 39, 141, 201, 192, 133, 56, 20, 51, 155, 255, 255, 242, 159, 62, 26, 21, 57, 123, 164, 153, 105, 82, 85, 121, 182, 201, 199, 191, 155, 109, 72, 62, 96, 150, 162, 131, 100, 83, 79, 82, 97, 119, 178, 243, 230, 181, 125, 84, 91, 89, 92, 112, 94, 53, 38, 63, 136, 224, 255, 240, 172, 106, 76, 77, 98, 129, 145, 121, 73, 51, 82, 147, 202, 211, 173, 119, 84, 74, 93, 134, 184, 207, 162, 99, 65, 73, 111, 124, 118, 114, 117, 138, 152, 162, 168, 153, 136, 115, 112, 126, 118, 103, 76, 65, 99, 144, 183, 196, 162, 122, 104, 96, 115, 154, 159, 152, 137, 105, 88, 86, 96, 122, 159, 175, 144, 111, 93, 105, 142, 148, 136, 133, 138, 145, 138, 125, 118, 119, 132, 130, 121, 134, 133, 118, 101, 77, 88, 122, 164, 200, 183, 146, 111, 92, 109, 124, 134, 133, 105, 78, 75, 89, 127, 185, 224, 218, 158, 78, 48, 74, 127, 167, 164, 139, 116, 113, 121, 134, 166, 180, 155, 103, 49, 41, 82, 127, 158, 175, 176, 158, 134, 117, 109, 126, 148, 139, 118, 100, 95, 110, 128, 133, 140, 151, 140, 110, 94, 101, 124, 150, 156, 143, 131, 130, 128, 131, 140, 141, 135, 110, 79, 73, 94, 126, 145, 148, 147, 136, 139, 152, 161, 174, 165, 140, 107, 73, 73, 90, 113, 140, 141, 131, 126, 123, 134, 159, 172, 168, 146, 113, 89, 80, 88, 109, 133, 154, 152, 133, 122, 116, 121, 143, 157, 152, 140, 118, 93, 79, 88, 113, 142, 165, 162, 147, 135, 127, 131, 140, 144, 134, 120, 105, 82, 80, 98, 123, 151, 159, 148, 137, 135, 141, 145, 145, 139, 123, 104, 90, 82, 94, 122, 143, 146, 136, 132, 139, 146, 143, 132, 124, 115, 110, 108, 111, 125, 142, 156, 148, 131, 128, 136, 138, 123, 110, 106, 107, 119, 127, 127, 131, 140, 141, 138, 140, 146, 158, 159, 138, 111, 97, 97, 102, 108, 108, 105, 115, 126, 129, 138, 154, 162, 163, 152, 124, 107, 111, 117, 115, 112, 114, 120, 130, 131, 127, 130, 137, 140, 135, 126, 118, 124, 134, 122, 113, 119, 129, 136, 134, 128, 127, 131, 132, 124, 113, 110, 115, 118, 118, 119, 134, 151, 153, 148, 137, 133, 137, 132, 123, 117, 113, 111, 109, 107, 111, 121, 128, 128, 127, 131, 135, 143, 151, 149, 149, 151, 137, 120, 114, 107, 99, 98, 100, 109, 123, 131, 138, 144, 146, 145, 142, 140, 133, 134, 137, 124, 113, 116, 116, 114, 115, 115, 121, 134, 139, 137, 137, 136, 136, 137, 136, 132, 131, 127, 114, 105, 106, 116, 129, 139, 137, 128, 122, 116, 112, 123, 136, 143, 144, 134, 123, 120, 119, 128, 136, 130, 124, 117, 113, 116, 122, 133, 137, 137, 142, 139, 134, 134, 131, 129, 123, 111, 109, 115, 118, 122, 126, 125, 131, 139, 142, 141, 139, 137, 128, 116, 109, 106, 116, 129, 130, 130, 133, 133, 135, 134, 131, 133, 137, 134, 128, 125, 121, 119, 120, 115, 111, 117, 125, 128, 128, 130, 135, 141, 144, 144, 140, 134, 126, 119, 119, 119, 122, 131, 128, 122, 123, 125, 132, 137, 137, 136, 130, 125, 124, 123, 127, 127, 124, 121, 115, 115, 122, 129, 137, 140, 137, 131, 127, 123, 122, 126, 128, 126, 125, 125, 124, 125, 125, 125, 123, 124, 128, 134, 137, 138, 140, 140, 133, 127, 124, 120, 114, 113, 112, 112, 121, 130, 137, 139, 137, 137, 135, 130, 126, 125, 127, 123, 122, 122, 121, 123, 125, 124, 123, 124, 127, 129, 135, 138, 137, 136, 133, 131, 131, 130, 129, 124, 120, 120, 120, 123, 124, 129, 134, 128, 125, 128, 130, 133, 134, 134, 134, 133, 131, 127, 123, 121, 123, 123, 120, 119, 124, 131, 126, 123, 127, 129, 134, 136, 133, 133, 133, 130, 124, 120, 122, 126, 125, 119, 113, 116, 125, 130, 133, 133, 134, 136, 132, 128, 129, 132, 132, 124, 120, 119, 119, 126, 129, 127, 126, 128, 130, 130, 127, 127, 128, 123, 121, 124, 127, 130, 131, 133, 133, 130, 130, 131, 130, 129, 125, 122, 120, 120, 124, 131, 133, 136, 137, 133, 125, 121, 122, 125, 128, 125, 121, 123, 126, 130, 128, 127, 129, 129, 132, 129, 124, 125, 126, 127, 127, 123, 124, 129, 128, 130, 136, 136, 135, 133, 128, 124, 124, 124, 121, 121, 122, 125, 127, 125, 123, 125, 132, 133, 132, 130, 125, 124, 125, 130, 134, 133, 130, 124, 118, 117, 118, 122, 125, 128, 130, 133, 134, 135, 138, 139, 137, 133, 127, 122, 118, 115, 117, 124, 129, 129, 129, 127, 127, 130, 131, 129, 129, 129, 128, 127, 122, 121, 127, 130, 130, 128, 126, 124, 126, 127, 126, 129, 130, 128, 125, 124, 124, 126, 133, 134, 131, 129, 128, 127, 126, 129, 129, 129, 128, 125, 125, 125, 125, 128, 129, 127, 126, 127, 129, 130, 131, 130, 129, 128, 125, 125, 126, 126, 128, 129, 127, 127, 128, 129, 131, 130, 129, 129, 127, 125, 125, 126, 127, 128, 126, 124, 125, 125, 128, 131, 132, 131, 129, 129, 126, 125, 128, 127, 126, 127, 126, 126, 128, 127, 129, 129, 128, 128, 127, 126, 127, 127, 128, 126, 125, 125, 125, 127, 129, 127, 126, 127, 128, 130, 131, 129, 129, 129, 128, 127, 124, 125, 127, 129, 130, 130, 128, 125, 126, 127, 129, 130, 130, 129, 126, 124, 125, 126, 127, 130, 130, 128, 126, 126, 127, 127, 127, 128, 129, 129, 126, 125, 125, 124, 127, 131, 131, 131, 130, 127, 124, 125, 127, 130, 131, 129, 128, 127, 126, 126, 126, 127, 128, 128, 127, 128, 128, 127, 128, 127, 127, 128, 127, 127, 126, 124, 125, 126, 127, 128, 129, 131, 130, 130, 129, 127, 125, 126, 127, 128, 129, 129, 130, 131, 132, 130, 128, 127, 125, 125, 125, 124, 126, 127, 127, 129, 128, 127, 130, 130, 129, 130, 128, 127, 125, 125, 126, 126, 128, 127, 126, 128, 128, 129, 130, 129, 128, 128, 128, 128, 129, 128, 128, 128, 125, 126, 126, 125, 127, 127, 128, 130, 129, 127, 128, 127, 127, 127, 127, 127, 125, 126, 128, 129, 131, 131, 130, 128, 125, 125, 125, 125, 128, 130, 130, 129, 128, 126, 126, 128, 131, 132, 131, 128, 125, 124, 125, 126, 126, 127, 126, 126, 125, 125, 127, 128, 129, 129, 128, 129, 128, 128, 129, 128, 128, 126, 126, 127, 128, 130, 130, 130, 128, 127, 127, 125, 125, 125, 126, 128, 128, 127, 126, 127, 129, 130, 130, 129, 127, 126, 126, 127, 126, 126, 126, 127, 127, 129, 130, 129, 130, 130, 128, 126, 125, 125, 124, 126, 128, 129, 129, 129, 129, 129, 129, 129, 129, 130, 130, 128, 124, 123, 123, 124, 128, 129, 129, 129, 128, 126, 127, 129, 130, 130, 128, 127, 126, 125, 125, 125, 125, 129, 131, 131, 129, 127, 127, 128, 128, 128, 128, 128, 127, 126, 126, 126, 128, 129, 130, 129, 127, 128, 128, 127, 126, 127, 127, 126, 126, 126, 127, 128, 127, 127, 128, 128, 129, 129, 130, 128, 126, 126, 127, 127, 127, 127, 129, 128, 128, 128, 126, 127, 129, 130, 130, 129, 128, 125, 125, 126, 126, 127, 128, 128, 127, 127, 128, 127, 128, 128, 128, 128, 126, 125, 126, 126, 127, 128, 129, 128, 129, 129, 128, 129, 130, 129, 128, 127, 124, 125, 126, 126, 128, 129, 128, 128, 127, 128, 129, 129, 129, 128, 127, 125, 124, 126, 127, 128, 128, 128, 128, 127, 127, 128, 128, 129, 128, 126, 125, 125, 126, 127, 129, 129, 130, 129, 128, 128, 128, 128, 128, 127, 127, 126, 125, 127, 127, 128, 128, 128, 129, 129, 128, 128, 127, 126, 125, 125, 126, 126, 128, 129, 129, 130, 129, 128, 129, 129, 128, 127, 126, 125, 124, 124, 125, 128, 128, 129, 131, 131, 130, 129, 129, 129, 127, 127, 127, 125, 125, 124, 125, 127, 128, 130, 131, 129, 128, 127, 126, 127, 128, 127, 128, 128, 127, 126, 128, 128, 128, 131, 130, 128, 127, 125, 124, 125, 126, 126, 126, 128, 128, 128, 129, 129, 130, 129, 128, 128, 127, 127, 125, 125, 125, 125, 127, 128, 129, 129, 128, 128, 128, 126, 126, 128, 128, 128, 128, 128, 128, 129, 130, 130, 131, 130, 128, 128, 125, 124, 125, 124, 126, 127, 125, 127, 129, 128, 128, 129, 130, 129, 129, 128, 127, 125, 125, 126, 127, 129, 129, 129, 128, 128, 127, 128, 129, 127, 126, 126, 125, 126, 126, 128, 129, 128, 129, 129, 129, 129, 129, 128, 127, 127, 126, 125, 127, 127, 128, 130, 130, 129, 128, 127, 128, 129, 127, 127, 126, 125, 125, 125, 124, 128, 130, 131, 131, 129, 127, 126, 127, 128, 128, 128, 126, 124, 123, 125, 128, 128, 129, 131, 132, 132, 130, 126, 125, 126, 128, 128, 126, 124, 123, 124, 128, 128, 129, 131, 132, 132, 129, 124, 125, 128, 128, 127, 125, 124, 125, 125, 128, 130, 131, 133, 130, 127, 127, 126, 127, 127, 127, 127, 126, 126, 124, 126, 128, 128, 129, 128, 128, 128, 127, 127, 128, 126, 124, 127, 128, 129, 129, 129, 132, 133, 131, 129, 128, 128, 126, 124, 122, 125, 127, 128, 127, 125, 124, 128, 129, 130, 130, 127, 125, 126, 125, 127, 129, 130, 133, 133, 132, 129, 128, 127, 125, 125, 125, 126, 127, 125, 121, 119, 123, 126, 129, 132, 130, 128, 126, 128, 133, 135, 134, 133, 134, 133, 129, 122, 119, 121, 124, 124, 118, 114, 119, 126, 133, 139, 140, 142, 139, 131, 127, 125, 119, 114, 111, 116, 127, 137, 142, 138, 134, 131, 128, 128, 125, 123, 120, 116, 115, 117, 126, 134, 139, 139, 133, 126, 123, 125, 126, 130, 137, 140, 139, 129, 118, 115, 119, 125, 126, 123, 119, 118, 121, 127, 138, 146, 143, 135, 125, 116, 117, 126, 141, 151, 143, 128, 111, 107, 114, 117, 120, 125, 125, 126, 130, 136, 142, 145, 140, 129, 117, 111, 111, 115, 125, 133, 140, 149, 146, 137, 130, 126, 127, 122, 108, 92, 90, 108, 130, 142, 147, 154, 158, 150, 137, 131, 136, 139, 128, 108, 98, 102, 109, 114, 118, 123, 130, 135, 136, 139, 148, 157, 155, 141, 122, 108, 107, 116, 121, 117, 117, 124, 130, 127, 118, 116, 129, 150, 154, 139, 122, 119, 127, 130, 124, 123, 135, 143, 134, 124, 122, 125, 123, 113, 105, 104, 113, 126, 136, 145, 149, 154, 160, 151, 140, 135, 125, 109, 89, 74, 83, 114, 149, 162, 148, 132, 127, 129, 129, 116, 110, 127, 148, 162, 155, 134, 125, 122, 119, 115, 106, 105, 107, 101, 106, 120, 134, 148, 157, 163, 170, 171, 158, 125, 99, 89, 85, 92, 106, 118, 134, 139, 131, 129, 129, 124, 128, 148, 166, 166, 154, 132, 109, 102, 104, 107, 111, 104, 99, 111, 131, 144, 147, 150, 155, 150, 138, 121, 117, 139, 152, 137, 106, 81, 89, 116, 140, 149, 134, 115, 106, 100, 106, 122, 148, 194, 216, 191, 140, 90, 68, 74, 87, 103, 118, 129, 131, 124, 129, 141, 138, 132, 138, 161, 185, 178, 141, 99, 72, 76, 104, 125, 129, 123, 107, 98, 103, 108, 129, 179, 228, 238, 196, 122, 64, 48, 58, 75, 102, 136, 148, 138, 132, 128, 132, 137, 128, 134, 169, 184, 165, 130, 99, 89, 95, 108, 125, 137, 136, 120, 101, 91, 86, 106, 163, 219, 236, 203, 139, 85, 58, 55, 75, 111, 141, 147, 128, 102, 95, 108, 130, 166, 211, 232, 201, 126, 59, 38, 60, 100, 131, 148, 155, 139, 114, 95, 79, 87, 145, 216, 244, 208, 136, 77, 61, 83, 114, 133, 135, 116, 90, 80, 84, 109, 167, 229, 255, 248, 162, 54, 2, 20, 64, 102, 135, 163, 181, 177, 143, 101, 82, 90, 121, 164, 190, 183, 151, 112, 86, 89, 120, 147, 145, 113, 73, 52, 60, 102, 171, 237, 255, 222, 143, 66, 29, 47, 88, 117, 136, 155, 156, 131, 108, 106, 120, 131, 140, 153, 174, 188, 168, 123, 85, 79, 93, 104, 111, 118, 133, 148, 147, 130, 102, 93, 118, 164, 197, 194, 162, 118, 88, 76, 87, 124, 154, 145, 108, 76, 56, 63, 126, 206, 249, 249, 197, 88, 0, 0, 47, 111, 163, 184, 174, 149, 125, 110, 115, 120, 105, 100, 122, 155, 172, 173, 160, 146, 139, 111, 84, 88, 101, 109, 112, 102, 72, 81, 157, 236, 255, 230, 146, 49, 7, 28, 78, 141, 185, 186, 133, 61, 36, 83, 176, 246, 255, 204, 95, 17, 2, 37, 102, 174, 210, 188, 137, 90, 72, 79, 100, 139, 186, 213, 189, 137, 95, 86, 111, 139, 139, 105, 84, 87, 75, 53, 74, 163, 242, 255, 245, 166, 68, 11, 11, 39, 90, 145, 159, 144, 121, 112, 153, 213, 209, 132, 81, 77, 85, 104, 123, 143, 162, 159, 117, 83, 110, 153, 162, 129, 83, 69, 92, 136, 184, 235, 255, 217, 125, 24, 0, 39, 106, 139, 141, 133, 109, 92, 115, 183, 253, 255, 199, 85, 6, 0, 19, 100, 190, 235, 198, 121, 71, 63, 99, 170, 238, 246, 189, 106, 41, 28, 64, 128, 175, 180, 151, 116, 89, 54, 45, 109, 207, 255, 239, 170, 92, 52, 51, 66, 101, 141, 154, 124, 74, 45, 77, 171, 246, 253, 203, 115, 29, 0, 27, 77, 138, 179, 175, 147, 136, 154, 156, 123, 82, 70, 97, 137, 174, 194, 189, 170, 140, 99, 68, 70, 79, 68, 61, 76, 131, 201, 232, 215, 185, 157, 120, 68, 37, 53, 87, 115, 137, 148, 151, 133, 110, 119, 142, 173, 189, 162, 123, 96, 86, 98, 119, 130, 137, 136, 117, 99, 91, 97, 109, 135, 189, 218, 193, 155, 120, 90, 81, 93, 113, 121, 95, 71, 72, 97, 167, 233, 249, 219, 140, 71, 42, 36, 60, 105, 149, 161, 124, 86, 88, 114, 170, 236, 236, 168, 77, 17, 36, 99, 159, 195, 177, 108, 43, 26, 72, 151, 215, 254, 231, 135, 60, 45, 77, 127, 147, 150, 133, 86, 51, 47, 79, 158, 241, 255, 236, 130, 44, 41, 77, 116, 134, 122, 94, 66, 76, 128, 183, 218, 227, 195, 134, 86, 64, 79, 103, 109, 124, 137, 136, 131, 114, 102, 99, 118, 175, 219, 203, 150, 96, 63, 62, 84, 122, 155, 156, 133, 86, 41, 44, 111, 220, 255, 255, 187, 85, 13, 0, 49, 139, 200, 191, 116, 33, 0, 48, 181, 255, 255, 225, 89, 0, 0, 22, 135, 228, 238, 161, 57, 3, 22, 107, 223, 255, 255, 162, 61, 9, 24, 103, 195, 225, 177, 87, 15, 0, 42, 129, 222, 255, 233, 147, 78, 61, 104, 164, 185, 133, 39, 0, 11, 95, 205, 255, 255, 212, 91, 14, 31, 102, 167, 182, 142, 89, 59, 81, 134, 170, 176, 156, 117, 77, 84, 140, 193, 202, 163, 113, 81, 73, 91, 122, 149, 155, 127, 81, 55, 73, 149, 238, 255, 197, 109, 54, 50, 80, 134, 174, 165, 109, 40, 13, 58, 162, 255, 255, 220, 118, 50, 47, 73, 106, 132, 136, 111, 78, 78, 119, 170, 208, 211, 165, 102, 68, 75, 115, 152, 166, 152, 117, 89, 93, 131, 161, 151, 112, 79, 72, 81, 121, 175, 201, 192, 154, 113, 104, 132, 172, 171, 107, 29, 2, 41, 122, 189, 225, 233, 197, 134, 89, 87, 127, 173, 179, 120, 29, 0, 25, 118, 200, 246, 242, 187, 110, 44, 38, 103, 184, 230, 202, 114, 28, 3, 58, 150, 214, 229, 192, 112, 45, 41, 99, 179, 221, 200, 123, 36, 0, 35, 133, 230, 255, 229, 143, 57, 15, 46, 122, 178, 192, 161, 102, 49, 42, 100, 182, 233, 225, 165, 94, 57, 66, 107, 145, 153, 135, 110, 93, 93, 117, 163, 188, 171, 136, 105, 96, 107, 128, 145, 140, 126, 114, 105, 107, 116, 133, 147, 148, 136, 130, 140, 148, 144, 133, 118, 105, 103, 117, 136, 140, 131, 118, 97, 94, 120, 158, 189, 182, 142, 106, 87, 97, 121, 140, 148, 132, 110, 99, 100, 117, 149, 175, 167, 133, 99, 90, 111, 143, 165, 163, 138, 105, 81, 76, 97, 133, 164, 174, 146, 104, 90, 107, 139, 159, 155, 139, 115, 108, 117, 124, 130, 134, 130, 121, 111, 107, 119, 142, 154, 144, 124, 106, 103, 118, 141, 156, 152, 137, 124, 107, 97, 106, 125, 146, 151, 133, 108, 94, 108, 141, 166, 165, 138, 112, 105, 110, 117, 129, 147, 152, 145, 127, 103, 96, 113, 138, 150, 138, 117, 107, 106, 114, 125, 135, 152, 162, 153, 133, 114, 111, 125, 137, 131, 111, 99, 104, 114, 125, 133, 140, 145, 147, 138, 119, 113, 120, 134, 149, 148, 132, 116, 105, 104, 108, 116, 130, 138, 140, 136, 123, 115, 117, 128, 140, 146, 145, 138, 129, 123, 116, 113, 116, 122, 123, 119, 117, 115, 121, 137, 145, 145, 140, 133, 127, 123, 124, 127, 129, 130, 126, 121, 121, 122, 121, 119, 119, 123, 127, 133, 133, 127, 129, 130, 131, 136, 140, 141, 136, 126, 117, 110, 113, 121, 124, 121, 117, 115, 122, 135, 145, 148, 144, 136, 127, 119, 115, 117, 124, 134, 141, 137, 127, 119, 110, 109, 118, 124, 130, 137, 139, 138, 129, 122, 124, 130, 137, 139, 133, 127, 121, 117, 115, 113, 116, 127, 137, 137, 130, 125, 127, 133, 136, 137, 135, 128, 129, 126, 116, 113, 118, 128, 134, 127, 118, 116, 124, 133, 135, 136, 137, 137, 137, 131, 124, 124, 129, 130, 121, 109, 107, 115, 130, 139, 137, 126, 120, 123, 131, 142, 150, 147, 137, 127, 114, 105, 107, 117, 126, 129, 127, 124, 119, 122, 129, 134, 141, 145, 149, 148, 136, 123, 114, 113, 114, 109, 104, 105, 116, 135, 150, 149, 135, 127, 130, 135, 143, 148, 143, 131, 115, 102, 96, 103, 118, 134, 142, 138, 127, 122, 129, 139, 145, 146, 141, 131, 123, 119, 117, 117, 122, 126, 123, 115, 113, 116, 127, 141, 148, 146, 139, 129, 123, 124, 128, 129, 127, 125, 121, 117, 118, 125, 130, 132, 133, 132, 131, 130, 130, 129, 129, 127, 123, 123, 124, 127, 126, 124, 123, 122, 127, 135, 141, 141, 135, 125, 116, 112, 115, 123, 131, 135, 133, 127, 122, 125, 132, 139, 139, 132, 123, 119, 119, 119, 124, 132, 137, 135, 127, 119, 118, 123, 131, 137, 138, 131, 123, 119, 119, 125, 133, 139, 137, 130, 121, 116, 118, 125, 134, 139, 137, 129, 122, 119, 121, 127, 133, 131, 126, 123, 122, 124, 128, 132, 136, 135, 132, 126, 121, 122, 125, 128, 131, 130, 128, 125, 125, 124, 123, 125, 126, 127, 129, 132, 131, 130, 133, 135, 132, 127, 124, 122, 122, 121, 123, 126, 127, 127, 127, 127, 129, 130, 131, 131, 131, 132, 131, 127, 123, 121, 123, 125, 128, 132, 132, 130, 126, 122, 122, 123, 127, 131, 132, 132, 130, 130, 129, 127, 126, 125, 126, 126, 125, 126, 129, 129, 128, 127, 128, 131, 131, 128, 124, 122, 126, 127, 127, 128, 127, 129, 130, 130, 131, 131, 128, 125, 123, 122, 122, 125, 128, 130, 130, 128, 127, 129, 132, 133, 132, 129, 127, 124, 121, 119, 121, 127, 131, 132, 132, 132, 131, 130, 128, 125, 125, 126, 128, 128, 127, 126, 124, 123, 125, 126, 130, 133, 135, 134, 130, 126, 124, 124, 125, 125, 125, 126, 126, 125, 128, 130, 131, 131, 129, 129, 129, 128, 126, 125, 126, 125, 126, 126, 127, 129, 129, 130, 130, 130, 129, 127, 124, 123, 125, 127, 129, 131, 131, 129, 127, 127, 128, 129, 130, 128, 126, 127, 127, 127, 126, 127, 127, 125, 126, 126, 127, 129, 128, 129, 129, 127, 128, 128, 128, 127, 127, 127, 125, 125, 125, 127, 130, 129, 129, 129, 129, 130, 128, 126, 126, 127, 129, 128, 126, 125, 126, 130, 131, 129, 130, 131, 127, 125, 125, 125, 128, 128, 126, 127, 126, 127, 128, 129, 130, 128, 128, 126, 124, 125, 128, 130, 130, 129, 125, 121, 124, 127, 132, 133, 130, 130, 128, 128, 127, 126, 125, 125, 126, 126, 125, 127, 129, 132, 132, 131, 131, 128, 129, 129, 127, 125, 123, 122, 123, 124, 126, 129, 129, 131, 131, 131, 130, 128, 126, 126, 128, 127, 125, 124, 125, 127, 127, 126, 126, 129, 131, 131, 132, 131, 130, 128, 125, 124, 124, 126, 125, 126, 126, 128, 131, 131, 131, 129, 129, 128, 127, 127, 126, 124, 125, 125, 126, 128, 128, 128, 129, 129, 128, 128, 126, 125, 126, 128, 129, 129, 128, 125, 126, 129, 129, 129, 128, 128, 129, 129, 129, 129, 126, 124, 125, 126, 126, 126, 128, 129, 131, 132, 128, 127, 127, 127, 130, 129, 125, 125, 126, 126, 126, 126, 126, 127, 129, 131, 131, 131, 128, 126, 125, 126, 127, 128, 128, 128, 128, 126, 126, 127, 129, 131, 129, 128, 127, 126, 127, 127, 127, 127, 127, 129, 127, 125, 126, 126, 128, 129, 129, 129, 128, 128, 130, 129, 128, 128, 126, 125, 125, 125, 127, 129, 129, 129, 127, 127, 127, 128, 129, 130, 130, 128, 126, 125, 124, 124, 126, 129, 130, 129, 128, 128, 128, 129, 129, 128, 128, 128, 126, 125, 124, 127, 129, 128, 128, 127, 127, 129, 129, 129, 128, 128, 126, 126, 126, 127, 128, 129, 128, 126, 125, 126, 127, 128, 129, 130, 129, 129, 128, 127, 127, 127, 128, 128, 126, 127, 126, 126, 126, 127, 130, 130, 128, 127, 127, 128, 129, 130, 129, 127, 127, 125, 124, 125, 126, 128, 129, 130, 129, 130, 129, 127, 128, 126, 126, 127, 126, 126, 127, 128, 128, 129, 128, 127, 128, 127, 126, 127, 128, 128, 128, 128, 126, 126, 128, 128, 126, 127, 127, 128, 130, 128, 127, 128, 128, 128, 127, 126, 125, 126, 127, 128, 129, 130, 129, 129, 128, 128, 128, 127, 128, 126, 125, 126, 126, 126, 127, 129, 129, 129, 129, 128, 127, 127, 126, 125, 125, 127, 129, 129, 128, 126, 127, 127, 128, 129, 129, 128, 128, 128, 128, 127, 128, 127, 127, 127, 126, 127, 126, 128, 128, 129, 130, 129, 128, 126, 125, 126, 126, 128, 128, 127, 126, 126, 127, 128, 129, 129, 129, 128, 126, 127, 128, 128, 128, 128, 128, 128, 127, 126, 126, 127, 127, 129, 128, 127, 127, 127, 127, 127, 126, 127, 128, 128, 127, 129, 130, 130, 129, 129, 128, 126, 127, 127, 126, 127, 127, 127, 127, 127, 128, 129, 128, 127, 127, 128, 128, 127, 126, 127, 127, 128, 128, 128, 128, 128, 127, 127, 128, 129, 130, 130, 127, 125, 125, 126, 126, 127, 128, 128, 128, 127, 128, 130, 130, 130, 129, 126, 126, 125, 127, 127, 127, 127, 127, 128, 126, 127, 128, 128, 130, 130, 129, 126, 124, 125, 126, 128, 129, 128, 127, 126, 127, 128, 129, 130, 129, 128, 126, 125, 125, 126, 128, 129, 129, 129, 128, 126, 127, 128, 129, 130, 128, 126, 126, 126, 124, 126, 128, 129, 129, 129, 127, 125, 127, 129, 129, 129, 129, 127, 127, 127, 126, 127, 129, 129, 128, 127, 126, 125, 128, 129, 130, 129, 127, 126, 126, 126, 126, 127, 128, 129, 128, 128, 127, 127, 128, 129, 128, 126, 126, 127, 127, 128, 128, 127, 128, 129, 128, 128, 127, 127, 128, 127, 126, 127, 127, 128, 128, 127, 126, 126, 127, 127, 128, 127, 126, 127, 128, 129, 130, 129, 129, 128, 128, 128, 127, 126, 128, 128, 128, 127, 125, 127, 127, 126, 128, 128, 128, 128, 126, 127, 126, 127, 130, 129, 128, 127, 127, 127, 128, 128, 128, 129, 128, 128, 127, 126, 127, 127, 128, 128, 126, 126, 126, 127, 129, 130, 129, 127, 127, 125, 126, 128, 128, 128, 129, 127, 127, 127, 127, 128, 128, 128, 128, 127, 126, 126, 127, 128, 128, 129, 129, 129, 128, 127, 127, 127, 129, 129, 127, 126, 125, 126, 128, 128, 128, 127, 126, 126, 127, 129, 130, 130, 131, 129, 126, 126, 126, 126, 126, 126, 127, 127, 127, 128, 130, 130, 130, 130, 128, 127, 127, 126, 126, 127, 126, 126, 127, 127, 128, 129, 130, 128, 127, 127, 126, 126, 125, 125, 127, 128, 128, 129, 130, 129, 128, 128, 128, 128, 128, 128, 129, 126, 126, 127, 125, 126, 128, 128, 130, 130, 128, 128, 128, 126, 126, 127, 127, 128, 128, 128, 129, 128, 127, 126, 125, 126, 127, 128, 128, 129, 129, 129, 129, 128, 127, 128, 128, 126, 127, 128, 127, 127, 125, 126, 129, 129, 129, 129, 128, 127, 128, 127, 126, 128, 129, 128, 126, 125, 125, 126, 128, 130, 129, 128, 129, 128, 128, 128, 127, 126, 124, 124, 126, 128, 129, 130, 132, 131, 129, 128, 129, 127, 127, 126, 125, 125, 126, 127, 128, 129, 129, 130, 128, 124, 124, 123, 125, 129, 129, 129, 130, 129, 129, 129, 129, 128, 126, 124, 125, 128, 128, 128, 130, 132, 131, 129, 128, 126, 124, 124, 124, 123, 125, 128, 132, 133, 130, 128, 127, 124, 126, 128, 128, 127, 126, 127, 129, 129, 128, 125, 125, 125, 127, 131, 134, 134, 133, 131, 125, 123, 123, 123, 127, 126, 125, 127, 125, 127, 130, 131, 132, 133, 130, 127, 122, 119, 120, 122, 125, 128, 130, 137, 142, 142, 136, 126, 120, 118, 117, 117, 119, 124, 129, 134, 135, 134, 135, 137, 132, 127, 123, 117, 116, 118, 121, 127, 129, 129, 129, 130, 136, 145, 150, 144, 129, 115, 107, 107, 113, 119, 126, 131, 130, 130, 133, 132, 137, 140, 134, 128, 118, 115, 118, 119, 123, 126, 131, 143, 149, 143, 136, 125, 116, 111, 106, 112, 125, 130, 134, 134, 132, 137, 142, 140, 132, 118, 108, 111, 119, 123, 127, 129, 132, 145, 156, 154, 145, 129, 109, 97, 93, 98, 117, 134, 140, 140, 140, 142, 143, 141, 133, 121, 110, 105, 108, 118, 125, 135, 155, 163, 149, 130, 117, 112, 110, 105, 107, 119, 129, 135, 140, 144, 149, 148, 129, 112, 108, 108, 114, 122, 126, 140, 157, 152, 142, 135, 121, 112, 104, 100, 112, 118, 121, 139, 149, 148, 154, 150, 135, 118, 97, 93, 105, 111, 121, 133, 142, 162, 169, 152, 140, 128, 105, 94, 93, 98, 115, 130, 142, 157, 159, 148, 132, 114, 106, 112, 117, 126, 139, 139, 135, 133, 131, 136, 134, 122, 111, 105, 106, 118, 130, 141, 155, 152, 132, 114, 109, 115, 123, 136, 150, 146, 130, 117, 109, 114, 133, 139, 129, 121, 112, 112, 124, 137, 147, 143, 128, 118, 113, 119, 143, 160, 150, 132, 109, 98, 111, 122, 128, 136, 132, 122, 120, 123, 137, 150, 135, 118, 114, 110, 126, 149, 154, 147, 131, 111, 104, 107, 114, 134, 141, 131, 124, 121, 129, 140, 134, 125, 123, 119, 124, 140, 144, 139, 131, 116, 108, 112, 119, 131, 140, 135, 125, 122, 127, 133, 132, 125, 124, 127, 138, 145, 137, 129, 120, 107, 102, 113, 126, 134, 143, 146, 137, 129, 124, 117, 116, 123, 130, 137, 146, 142, 129, 118, 112, 112, 116, 121, 127, 134, 140, 139, 131, 124, 123, 114, 114, 139, 161, 163, 143, 110, 91, 91, 102, 124, 148, 152, 137, 122, 125, 137, 134, 125, 120, 124, 132, 133, 134, 136, 131, 117, 102, 106, 125, 137, 137, 138, 139, 135, 125, 112, 112, 126, 134, 133, 137, 145, 142, 130, 113, 104, 110, 116, 125, 136, 144, 146, 138, 130, 125, 113, 101, 108, 133, 160, 167, 145, 119, 104, 97, 100, 116, 140, 152, 152, 145, 132, 119, 102, 93, 105, 134, 169, 179, 152, 117, 94, 88, 99, 118, 142, 164, 157, 133, 120, 118, 110, 93, 106, 145, 168, 166, 143, 119, 106, 92, 92, 124, 153, 154, 143, 134, 127, 111, 96, 107, 138, 161, 157, 130, 111, 111, 122, 129, 131, 131, 124, 111, 111, 134, 157, 159, 139, 109, 97, 96, 97, 130, 181, 189, 152, 109, 79, 83, 105, 123, 153, 175, 164, 136, 107, 84, 80, 106, 152, 185, 176, 140, 101, 85, 96, 117, 141, 149, 143, 140, 128, 118, 119, 118, 121, 122, 116, 126, 156, 167, 145, 113, 90, 96, 118, 135, 149, 159, 146, 112, 86, 95, 132, 164, 167, 143, 113, 101, 107, 115, 131, 147, 148, 129, 112, 118, 128, 128, 131, 138, 135, 111, 92, 123, 173, 173, 131, 96, 92, 110, 126, 144, 158, 146, 122, 99, 90, 110, 147, 176, 174, 140, 103, 80, 84, 112, 143, 167, 166, 140, 116, 99, 95, 116, 141, 144, 142, 142, 134, 118, 106, 113, 133, 143, 136, 128, 125, 115, 109, 114, 130, 156, 165, 145, 117, 94, 95, 113, 133, 159, 161, 134, 103, 101, 129, 138, 122, 127, 147, 147, 116, 84, 106, 163, 175, 141, 100, 86, 112, 134, 147, 163, 152, 120, 83, 72, 118, 171, 191, 166, 109, 75, 75, 101, 148, 179, 175, 142, 102, 93, 114, 125, 138, 151, 137, 103, 75, 100, 165, 187, 163, 129, 106, 99, 99, 123, 159, 161, 126, 85, 78, 114, 160, 181, 161, 121, 90, 91, 108, 132, 157, 164, 160, 147, 117, 82, 71, 101, 143, 148, 127, 127, 152, 156, 135, 123, 126, 129, 117, 113, 130, 137, 125, 103, 98, 126, 159, 162, 133, 105, 105, 118, 128, 140, 155, 152, 140, 134, 124, 99, 70, 80, 124, 142, 139, 151, 178, 178, 139, 105, 102, 112, 111, 111, 124, 131, 129, 120, 112, 128, 156, 172, 155, 116, 89, 86, 108, 140, 157, 152, 142, 146, 146, 112, 64, 59, 100, 136, 150, 164, 185, 189, 153, 108, 90, 96, 108, 115, 118, 120, 122, 117, 110, 129, 164, 188, 176, 135, 105, 95, 92, 103, 120, 134, 143, 151, 157, 141, 101, 69, 74, 110, 149, 175, 187, 181, 149, 114, 96, 98, 106, 106, 107, 122, 136, 135, 124, 114, 112, 129, 164, 194, 191, 146, 93, 71, 74, 88, 117, 154, 171, 154, 117, 85, 79, 96, 135, 189, 212, 181, 130, 94, 93, 114, 127, 124, 109, 86, 71, 82, 121, 175, 220, 227, 184, 119, 74, 59, 74, 105, 134, 150, 136, 113, 126, 164, 180, 151, 106, 85, 80, 77, 93, 143, 202, 213, 172, 132, 115, 114, 108, 91, 84, 86, 82, 85, 113, 170, 231, 247, 201, 126, 73, 57, 59, 77, 110, 134, 140, 142, 168, 200, 183, 119, 69, 63, 81, 99, 123, 161, 187, 174, 141, 130, 145, 150, 127, 89, 67, 69, 83, 105, 132, 153, 171, 185, 190, 177, 148, 117, 88, 67, 68, 96, 126, 138, 139, 136, 132, 129, 138, 155, 161, 145, 121, 108, 107, 114, 124, 134, 138, 129, 114, 110, 122, 134, 135, 127, 118, 112, 115, 134, 163, 174, 158, 127, 100, 94, 112, 134, 140, 124, 102, 89, 88, 107, 152, 192, 197, 168, 133, 110, 108, 119, 124, 113, 93, 80, 83, 99, 131, 176, 205, 194, 157, 120, 103, 106, 112, 109, 96, 88, 96, 118, 151, 182, 192, 170, 126, 92, 87, 100, 119, 129, 127, 124, 124, 126, 135, 158, 179, 170, 127, 81, 60, 74, 108, 137, 152, 154, 151, 147, 141, 142, 150, 148, 121, 87, 71, 82, 110, 139, 153, 147, 136, 133, 138, 144, 150, 152, 140, 116, 97, 90, 95, 111, 130, 136, 128, 122, 132, 149, 159, 160, 150, 131, 113, 102, 99, 100, 109, 122, 131, 134, 138, 146, 149, 142, 129, 121, 121, 123, 125, 125, 123, 121, 121, 127, 136, 139, 135, 126, 117, 111, 110, 117, 132, 145, 152, 147, 136, 127, 124, 123, 118, 112, 110, 115, 123, 132, 139, 140, 137, 133, 129, 126, 126, 130, 132, 129, 123, 120, 121, 123, 129, 132, 129, 124, 121, 122, 124, 129, 135, 140, 140, 134, 127, 121, 118, 121, 127, 128, 125, 122, 126, 131, 132, 133, 134, 131, 124, 120, 118, 120, 126, 134, 140, 138, 133, 128, 126, 123, 120, 118, 120, 125, 129, 130, 129, 128, 131, 132, 128, 124, 126, 132, 136, 133, 127, 125, 125, 127, 128, 124, 121, 121, 122, 123, 126, 131, 138, 144, 143, 135, 127, 120, 115, 113, 115, 119, 124, 128, 133, 137, 139, 141, 138, 132, 124, 117, 112, 114, 120, 129, 136, 138, 134, 130, 128, 128, 128, 128, 128, 124, 121, 122, 127, 131, 132, 130, 126, 124, 124, 126, 126, 126, 128, 132, 135, 138, 137, 131, 122, 116, 116, 120, 123, 124, 127, 131, 132, 130, 129, 132, 136, 138, 135, 128, 121, 118, 119, 120, 123, 126, 128, 128, 127, 128, 131, 132, 132, 132, 134, 135, 135, 131, 125, 119, 114, 115, 120, 124, 127, 131, 132, 132, 130, 128, 129, 132, 132, 131, 128, 126, 126, 127, 127, 126, 125, 124, 123, 121, 121, 123, 126, 130, 133, 135, 138, 140, 137, 131, 126, 123, 120, 118, 117, 121, 126, 129, 129, 128, 129, 130, 129, 128, 128, 128, 129, 129, 130, 132, 132, 130, 128, 125, 123, 122, 121, 121, 122, 125, 127, 129, 131, 130, 129, 130, 131, 133, 133, 133, 132, 130, 128, 125, 122, 122, 122, 121, 122, 124, 127, 130, 132, 131, 130, 131, 130, 128, 127, 128, 129, 129, 128, 128, 128, 128, 128, 126, 124, 123, 122, 122, 122, 124, 129, 134, 136, 135, 133, 131, 128, 126, 124, 124, 125, 125, 126, 128, 128, 128, 128, 128, 128, 127, 126, 126, 127, 129, 129, 129, 130, 130, 128, 127, 127, 127, 126, 126, 125, 126, 128, 128, 129, 130, 131, 129, 126, 124, 122, 123, 126, 127, 128, 129, 131, 130, 129, 128, 127, 127, 128, 127, 128, 129, 129, 128, 128, 129, 130, 129, 127, 125, 125, 126, 127, 128, 127, 127, 128, 129, 129, 128, 128, 127, 127, 126, 125, 126, 128, 128, 128, 128, 127, 127, 128, 130, 130, 129, 128, 128, 127, 127, 127, 126, 126, 127, 126, 126, 128, 129, 128, 128, 128, 129, 129, 128, 127, 126, 127, 127, 126, 127, 127, 127, 126, 127, 128, 129, 130, 130, 129, 129, 128, 126, 127, 127, 126, 126, 126, 126, 126, 126, 128, 129, 129, 130, 129, 128, 128, 127, 126, 126, 126, 127, 127, 128, 128, 127, 127, 128, 128, 129, 129, 129, 128, 127, 126, 127, 128, 128, 128, 128, 128, 129, 128, 126, 126, 126, 127, 127, 127, 129, 130, 130, 128, 126, 126, 127, 127, 127, 127, 127, 126, 127, 129, 130, 128, 128, 128, 127, 127, 127, 127, 126, 127, 127, 128, 129, 129, 128, 127, 126, 126, 127, 129, 128, 127, 127, 127, 128, 130, 130, 128, 127, 125, 124, 125, 127, 129, 129, 130, 130, 128, 128, 127, 127, 128, 127, 126, 126, 127, 129, 129, 127, 126, 127, 128, 130, 128, 127, 128, 127, 127, 127, 128, 129, 129, 128, 127, 126, 126, 126, 126, 127, 128, 129, 130, 129, 127, 127, 126, 125, 127, 127, 128, 128, 128, 129, 128, 128, 128, 127, 127, 127, 128, 129, 129, 129, 128, 127, 127, 127, 129, 128, 127, 126, 125, 125, 127, 129, 128, 129, 129, 127, 127, 127, 127, 126, 126, 128, 129, 129, 128, 129, 129, 128, 126, 125, 127, 127, 127, 128, 128, 129, 129, 128, 127, 127, 128, 127, 127, 126, 126, 128, 128, 128, 128, 129, 128, 127, 127, 126, 125, 126, 127, 128, 128, 128, 128, 127, 126, 127, 128, 128, 128, 128, 129, 128, 128, 129, 128, 128, 128, 127, 125, 126, 127, 127, 127, 127, 128, 129, 129, 129, 127, 126, 125, 126, 129, 128, 128, 127, 127, 128, 127, 127, 127, 129, 128, 127, 128, 128, 130, 129, 128, 127, 126, 127, 126, 125, 126, 127, 128, 128, 128, 128, 129, 128, 127, 127, 126, 127, 127, 128, 128, 127, 128, 127, 128, 128, 128, 129, 127, 127, 127, 127, 129, 129, 128, 128, 127, 126, 125, 126, 128, 128, 128, 128, 128, 128, 129, 129, 128, 128, 127, 126, 126, 127, 128, 128, 127, 126, 126, 126, 127, 128, 129, 128, 127, 128, 128, 128, 129, 128, 126, 127, 126, 126, 127, 128, 130, 129, 128, 128, 127, 128, 128, 127, 126, 126, 126, 127, 129, 128, 127, 128, 127, 127, 127, 127, 126, 127, 127, 128, 130, 129, 129, 128, 127, 127, 124, 125, 127, 126, 128, 128, 129, 130, 129, 128, 127, 128, 128, 127, 127, 126, 127, 127, 128, 129, 130, 129, 128, 126, 125, 126, 127, 128, 128, 128, 129, 128, 127, 127, 127, 126, 126, 127, 127, 127, 127, 128, 129, 129, 129, 129, 128, 126, 126, 126, 126, 128, 128, 129, 129, 128, 129, 127, 127, 126, 126, 127, 126, 128, 129, 128, 128, 127, 127, 127, 127, 127, 128, 128, 128, 129, 128, 128, 127, 128, 129, 127, 127, 126, 127, 127, 126, 128, 127, 128, 129, 128, 128, 127, 126, 127, 126, 128, 130, 129, 129, 129, 128, 126, 124, 126, 127, 127, 128, 129, 129, 129, 128, 129, 127, 126, 126, 128, 129, 128, 128, 127, 127, 127, 127, 128, 127, 127, 128, 126, 127, 127, 127, 129, 129, 128, 128, 128, 127, 127, 126, 126, 126, 127, 128, 129, 129, 129, 128, 126, 126, 127, 127, 128, 129, 128, 128, 128, 128, 126, 127, 128, 128, 128, 126, 126, 128, 129, 128, 128, 127, 128, 128, 127, 127, 126, 127, 129, 127, 126, 126, 128, 127, 128, 128, 127, 129, 128, 126, 127, 127, 128, 129, 129, 127, 128, 127, 127, 127, 126, 128, 128, 128, 128, 128, 128, 127, 127, 127, 128, 129, 128, 128, 127, 128, 128, 128, 128, 127, 126, 127, 129, 128, 127, 127, 127, 128, 127, 127, 128, 128, 128, 127, 127, 128, 128, 129, 127, 126, 127, 128, 127, 127, 127, 127, 128, 128, 127, 128, 128, 127, 128, 128, 127, 127, 127, 127, 128, 127, 129, 129, 127, 127, 127, 126, 127, 127, 128, 129, 128, 127, 127, 127, 128, 127, 127, 127, 128, 130, 128, 127, 127, 127, 128, 127, 127, 127, 127, 128, 127, 126, 127, 128, 128, 129, 128, 127, 127, 127, 128, 128, 128, 128, 128, 128, 126, 128, 127, 127, 128, 126, 127, 127, 128, 127, 127, 127, 127, 128, 128, 128, 128, 128, 129, 126, 126, 128, 129, 129, 128, 127, 127, 128, 128, 126, 127, 128, 128, 127, 125, 126, 127, 129, 128, 128, 128, 128, 128, 126, 126, 128, 128, 128, 128, 128, 128, 128, 127, 126, 126, 128, 127, 128, 129, 127, 129, 128, 127, 127, 128, 129, 128, 129, 126, 126, 127, 126, 127, 127, 127, 130, 130, 129, 128, 126, 126, 129, 128, 125, 128, 128, 128, 126, 126, 128, 129, 129, 128, 127, 127, 125, 125, 126, 127, 128, 130, 129, 129, 129, 127, 127, 126, 127, 126, 126, 128, 127, 128, 130, 130, 127, 127, 128, 126, 126, 127, 126, 127, 128, 127, 127, 130, 128, 129, 129, 128, 127, 125, 125, 126, 126, 127, 127, 128, 129, 129, 128, 128, 128, 128, 128, 128, 128, 128, 128, 127, 127, 128, 126, 126, 127, 128, 129, 127, 127, 127, 127, 127, 127, 128, 128, 129, 128, 127, 127, 127, 128, 128, 128, 127, 127, 128, 126, 127, 127, 128, 129, 128, 128, 128, 128, 128, 129, 129, 128, 128, 128, 127, 127, 127, 125, 125, 127, 126, 126, 127, 128, 130, 129, 128, 127, 127, 127, 126, 127, 127, 128, 128, 128, 128, 128, 127, 127, 128, 127, 128, 127, 128, 129, 129, 128, 128, 128, 128, 126, 125, 125, 127, 126, 128, 129, 128, 129, 129, 127, 128, 127, 127, 128, 128, 127, 128, 128, 128, 127, 128, 131, 129, 127, 126, 126, 126, 124, 126, 125, 127, 129, 128, 130, 130, 130, 128, 127, 129, 126, 125, 125, 126, 128, 129, 129, 128, 128, 130, 128, 127, 126, 126, 127, 128, 128, 127, 129, 131, 130, 128, 126, 125, 125, 125, 125, 125, 128, 130, 129, 130, 128, 128, 127, 126, 128, 127, 130, 128, 125, 127, 128, 130, 129, 130, 129, 126, 129, 127, 123, 125, 127, 129, 127, 127, 124, 126, 131, 128, 126, 128, 128, 128, 128, 126, 126, 129, 129, 128, 129, 127, 127, 128, 129, 127, 126, 127, 128, 128, 126, 128, 128, 127, 129, 128, 127, 127, 126, 125, 127, 129, 128, 129, 129, 127, 124, 125, 128, 128, 129, 130, 130, 129, 126, 126, 126, 126, 128, 129, 130, 132, 127, 126, 128, 128, 127, 126, 126, 126, 127, 126, 121, 125, 129, 129, 131, 129, 129, 129, 131, 130, 127, 128, 126, 127, 125, 122, 122, 126, 132, 130, 130, 129, 129, 132, 127, 126, 126, 124, 124, 124, 127, 127, 131, 131, 129, 130, 126, 125, 126, 127, 127, 129, 130, 128, 131, 130, 128, 128, 126, 125, 123, 124, 124, 126, 128, 128, 131, 130, 130, 129, 126, 126, 123, 127, 130, 130, 128, 128, 130, 127, 128, 124, 125, 133, 129, 125, 126, 128, 126, 127, 127, 124, 127, 125, 124, 131, 132, 130, 130, 130, 129, 130, 126, 124, 127, 125, 125, 127, 128, 130, 129, 130, 130, 126, 123, 124, 127, 125, 127, 128, 129, 131, 129, 129, 129, 128, 127, 127, 128, 127, 128, 128, 129, 128, 125, 126, 125, 125, 127, 128, 127, 127, 128, 127, 129, 128, 125, 130, 129, 127, 128, 129, 129, 128, 131, 129, 128, 128, 124, 126, 124, 123, 125, 124, 129, 131, 129, 128, 131, 131, 125, 125, 126, 127, 127, 126, 128, 129, 131, 129, 129, 128, 124, 126, 126, 125, 124, 123, 129, 131, 130, 129, 130, 132, 129, 126, 124, 125, 128, 127, 128, 128, 130, 130, 129, 129, 128, 127, 128, 127, 127, 127, 128, 128, 128, 126, 123, 125, 127, 126, 124, 126, 130, 128, 126, 126, 126, 127, 128, 129, 130, 131, 131, 130, 128, 127, 127, 127, 127, 127, 128, 128, 125, 126, 126, 126, 127, 124, 124, 129, 126, 127, 130, 133, 134, 130, 123, 124, 131, 128, 126, 131, 131, 130, 127, 124, 126, 127, 124, 121, 123, 123, 125, 129, 131, 132, 133, 135, 132, 126, 124, 123, 125, 123, 123, 127, 130, 133, 130, 131, 131, 127, 128, 127, 126, 126, 125, 127, 129, 129, 128, 127, 129, 128, 126, 124, 123, 126, 129, 130, 129, 129, 129, 125, 123, 124, 125, 131, 132, 128, 129, 129, 130, 130, 128, 128, 130, 131, 127, 124, 121, 121, 125, 125, 127, 129, 130, 129, 129, 129, 127, 128, 130, 127, 126, 126, 128, 128, 128, 127, 124, 129, 131, 128, 128, 129, 130, 130, 128, 121, 119, 124, 126, 124, 127, 131, 135, 135, 130, 128, 127, 127, 127, 124, 125, 127, 127, 128, 130, 131, 132, 132, 128, 126, 125, 122, 122, 123, 125, 126, 128, 131, 130, 130, 127, 125, 127, 126, 128, 130, 129, 128, 130, 132, 130, 129, 128, 126, 125, 124, 124, 123, 124, 127, 130, 130, 129, 130, 129, 129, 127, 124, 127, 129, 127, 127, 129, 127, 125, 129, 129, 128, 128, 127, 126, 128, 129, 128, 130, 128, 127, 127, 122, 123, 124, 129, 128, 124, 130, 133, 134, 130, 124, 127, 127, 127, 124, 126, 129, 128, 132, 128, 128, 128, 125, 127, 126, 127, 126, 127, 128, 127, 131, 130, 129, 128, 127, 130, 124, 123, 123, 124, 127, 128, 131, 130, 131, 129, 126, 124, 121, 125, 129, 129, 128, 130, 131, 132, 132, 128, 129, 129, 126, 124, 124, 128, 125, 124, 126, 127, 130, 127, 128, 126, 129, 130, 123, 128, 130, 133, 133, 122, 122, 126, 129, 128, 127, 131, 131, 134, 127, 121, 126, 126, 126, 127, 127, 125, 125, 125, 124, 132, 134, 132, 132, 128, 127, 127, 128, 124, 124, 127, 126, 125, 125, 128, 131, 129, 129, 129, 129, 129, 128, 128, 129, 129, 126, 123, 121, 123, 127, 127, 130, 131, 130, 130, 128, 125, 124, 129, 131, 126, 124, 125, 128, 129, 126, 128, 133, 134, 132, 128, 126, 127, 125, 121, 122, 125, 125, 127, 129, 130, 132, 133, 131, 128, 127, 126, 123, 123, 125, 127, 129, 129, 132, 130, 129, 127, 124, 125, 124, 125, 127, 128, 127, 128, 132, 133, 130, 131, 128, 121, 122, 125, 126, 127, 129, 132, 133, 133, 130, 125, 125, 124, 123, 121, 120, 126, 130, 131, 132, 133, 134, 130, 127, 125, 124, 123, 123, 125, 126, 130, 131, 132, 132, 129, 127, 126, 125, 123, 125, 130, 130, 128, 128, 130, 130, 128, 129, 127, 126, 125, 124, 125, 125, 126, 128, 132, 131, 127, 127, 127, 127, 126, 128, 128, 128, 131, 126, 125, 127, 126, 128, 128, 128, 124, 125, 128, 129, 131, 129, 130, 130, 128, 126, 124, 125, 124, 125, 127, 127, 130, 133, 133, 132, 131, 128, 125, 124, 121, 121, 124, 126, 128, 131, 133, 134, 131, 129, 128, 125, 122, 121, 122, 125, 126, 130, 133, 133, 131, 128, 127, 125, 125, 125, 124, 127, 128, 129, 130, 131, 133, 131, 131, 129, 126, 124, 121, 121, 122, 127, 130, 130, 130, 128, 130, 129, 128, 126, 125, 129, 128, 127, 127, 128, 130, 127, 127, 123, 123, 126, 123, 126, 132, 131, 130, 133, 133, 128, 127, 124, 123, 125, 124, 124, 126, 129, 132, 133, 131, 128, 128, 127, 126, 126, 125, 125, 128, 129, 128, 129, 130, 130, 129, 125, 121, 122, 126, 125, 127, 131, 132, 132, 130, 129, 128, 126, 126, 126, 126, 127, 129, 130, 128, 130, 131, 127, 126, 126, 123, 122, 125, 125, 127, 133, 132, 132, 133, 129, 126, 125, 122, 121, 124, 126, 126, 130, 133, 134, 133, 129, 128, 125, 123, 121, 120, 123, 125, 130, 135, 135, 136, 135, 130, 125, 121, 117, 120, 122, 122, 128, 133, 136, 134, 132, 130, 127, 125, 122, 123, 122, 123, 129, 131, 136, 135, 132, 130, 124, 123, 121, 121, 122, 124, 127, 129, 135, 134, 131, 129, 124, 125, 125, 124, 122, 123, 131, 133, 134, 133, 132, 134, 129, 124, 119, 120, 122, 123, 127, 128, 131, 133, 130, 129, 130, 128, 124, 127, 125, 123, 128, 128, 128, 133, 134, 128, 127, 124, 118, 123, 126, 125, 127, 130, 131, 132, 133, 129, 128, 126, 124, 125, 127, 128, 124, 125, 129, 130, 130, 127, 128, 129, 129, 129, 126, 129, 130, 128, 127, 125, 126, 125, 126, 125, 126, 127, 126, 129, 129, 130, 128, 128, 127, 124, 125, 125, 127, 128, 133, 137, 129, 129, 128, 126, 127, 123, 124, 125, 127, 127, 127, 131, 130, 128, 127, 128, 127, 125, 126, 125, 129, 131, 129, 128, 128, 129, 126, 125, 125, 127, 131, 131, 132, 130, 128, 126, 123, 123, 123, 124, 125, 125, 129, 132, 133, 133, 133, 130, 126, 125, 121, 120, 121, 123, 127, 130, 132, 134, 136, 135, 131, 129, 126, 122, 121, 122, 124, 125, 126, 129, 131, 131, 130, 128, 125, 125, 126, 124, 122, 127, 133, 135, 134, 130, 127, 128, 126, 122, 123, 125, 126, 127, 129, 130, 131, 129, 128, 129, 127, 123, 123, 125, 126, 128, 127, 129, 132, 133, 132, 130, 127, 127, 124, 123, 124, 125, 127, 127, 129, 131, 130, 130, 126, 125, 128, 127, 124, 124, 128, 129, 130, 129, 125, 131, 132, 123, 123, 126, 126, 128, 130, 129, 131, 134, 129, 126, 129, 126, 123, 126, 124, 120, 125, 128, 129, 131, 131, 130, 131, 126, 124, 127, 127, 128, 131, 130, 131, 131, 127, 124, 128, 128, 125, 125, 123, 125, 126, 125, 127, 131, 132, 127, 126, 127, 126, 128, 127, 126, 129, 131, 129, 128, 130, 126, 127, 129, 128, 129, 127, 126, 126, 129, 131, 127, 126, 121, 123, 127, 124, 128, 129, 131, 132, 133, 130, 126, 129, 126, 123, 122, 122, 130, 129, 127, 130, 132, 130, 127, 127, 125, 129, 128, 126, 131, 129, 129, 128, 125, 125, 125, 125, 123, 126, 127, 127, 133, 132, 131, 130, 127, 126, 130, 126, 120, 124, 128, 129, 132, 131, 132, 132, 131, 125, 123, 123, 119, 123, 126, 127, 130, 132, 133, 131, 131, 127, 122, 128, 125, 124, 129, 127, 127, 131, 132, 130, 130, 126, 122, 127, 126, 124, 127, 125, 124, 125, 126, 128, 129, 130, 129, 133, 135, 128, 125, 126, 126, 125, 123, 124, 126, 129, 129, 129, 132, 130, 129, 129, 128, 130, 127, 127, 127, 124, 124, 126, 127, 127, 130, 129, 127, 126, 125, 125, 125, 127, 131, 130, 130, 130, 130, 130, 127, 125, 127, 128, 125, 128, 128, 125, 127, 125, 124, 125, 127, 128, 129, 128, 126, 131, 132, 131, 132, 128, 126, 126, 126, 126, 126, 129, 127, 130, 129, 125, 127, 124, 126, 127, 125, 128, 127, 127, 131, 130, 127, 131, 132, 123, 125, 127, 122, 126, 128, 127, 133, 133, 130, 129, 128, 125, 126, 127, 127, 128, 126, 126, 128, 127, 126, 124, 124, 126, 126, 128, 128, 127, 128, 128, 128, 129, 128, 127, 131, 131, 128, 128, 127, 129, 129, 125, 125, 127, 126, 124, 127, 127, 127, 131, 127, 128, 130, 129, 129, 128, 129, 127, 128, 124, 122, 129, 126, 128, 131, 129, 131, 129, 129, 125, 127, 129, 124, 125, 125, 128, 127, 125, 126, 125, 130, 128, 131, 139, 130, 123, 122, 125, 124, 126, 129, 127, 135, 133, 129, 133, 129, 125, 124, 125, 120, 119, 126, 127, 130, 130, 128, 131, 130, 130, 128, 126, 124, 124, 127, 128, 131, 131, 132, 133, 133, 130, 123, 121, 120, 122, 125, 127, 130, 132, 133, 131, 130, 127, 125, 124, 122, 125, 125, 127, 130, 132, 136, 130, 127, 125, 125, 124, 121, 125, 126, 133, 135, 132, 135, 125, 120, 123, 127, 124, 119, 126, 127, 132, 131, 128, 135, 133, 131, 126, 124, 124, 121, 127, 127, 130, 133, 134, 133, 125, 124, 122, 121, 122, 121, 131, 133, 132, 131, 128, 128, 127, 130, 126, 124, 127, 127, 130, 129, 130, 131, 132, 131, 126, 123, 120, 119, 123, 127, 130, 130, 131, 132, 131, 129, 127, 126, 124, 125, 126, 124, 124, 127, 130, 132, 133, 131, 128, 128, 126, 125, 125, 124, 126, 127, 126, 127, 129, 128, 127, 126, 126, 128, 130, 128, 128, 131, 128, 127, 128, 129, 129, 129, 129, 126, 127, 127, 124, 126, 124, 125, 131, 132, 129, 126, 125, 124, 125, 122, 126, 137, 135, 131, 130, 127, 127, 128, 123, 122, 129, 127, 124, 127, 126, 126, 130, 132, 128, 127, 127, 122, 125, 127, 129, 131, 130, 131, 130, 128, 124, 125, 127, 127, 128, 122, 126, 133, 130, 132, 128, 128, 129, 126, 124, 124, 128, 123, 126, 129, 127, 132, 130, 130, 128, 126, 129, 129, 131, 124, 119, 125, 127, 124, 121, 127, 132, 135, 135, 126, 128, 128, 125, 125, 124, 126, 127, 131, 130, 130, 131, 127, 128, 127, 126, 123, 122, 125, 124, 128, 129, 130, 130, 128, 131, 127, 126, 125, 125, 131, 129, 130, 127, 128, 130, 128, 132, 127, 124, 125, 122, 124, 125, 129, 131, 131, 133, 130, 130, 127, 125, 126, 123, 122, 121, 127, 131, 131, 133, 132, 132, 133, 129, 125, 125, 123, 123, 123, 122, 123, 128, 129, 130, 132, 128, 126, 128, 125, 125, 127, 129, 133, 132, 131, 131, 132, 130, 126, 126, 121, 120, 123, 122, 124, 126, 128, 130, 133, 134, 131, 131, 128, 127, 125, 124, 126, 126, 126, 126, 126, 126, 129, 133, 130, 130, 129, 126, 123, 122, 128, 127, 126, 128, 127, 132, 133, 129, 126, 125, 128, 126, 125, 126, 129, 131, 130, 132, 123, 118, 124, 126, 128, 129, 133, 134, 135, 134, 123, 122, 124, 122, 124, 123, 126, 127, 129, 130, 129, 131, 129, 131, 128, 124, 129, 123, 120, 127, 132, 132, 133, 135, 133, 134, 127, 120, 121, 121, 122, 122, 126, 127, 129, 133, 129, 130, 130, 128, 127, 124, 123, 124, 127, 125, 130, 134, 132, 133, 129, 124, 125, 127, 126, 125, 129, 127, 130, 130, 128, 129, 127, 127, 125, 128, 125, 121, 132, 132, 127, 126, 127, 129, 129, 130, 128, 130, 129, 124, 126, 125, 125, 126, 126, 126, 121, 125, 126, 127, 129, 130, 134, 132, 135, 132, 127, 128, 125, 122, 123, 126, 128, 131, 132, 128, 129, 128, 125, 125, 124, 125, 126, 128, 127, 129, 129, 131, 132, 126, 127, 128, 126, 127, 127, 129, 128, 128, 127, 127, 126, 122, 126, 124, 122, 127, 127, 128, 133, 137, 137, 135, 128, 119, 126, 123, 117, 122, 125, 132, 135, 134, 135, 135, 130, 122, 120, 117, 118, 123, 124, 131, 137, 135, 135, 135, 133, 129, 123, 116, 116, 121, 124, 127, 130, 129, 132, 139, 135, 126, 125, 128, 124, 123, 121, 123, 132, 132, 127, 131, 133, 130, 127, 129, 126, 124, 126, 122, 125, 129, 129, 128, 127, 128, 128, 126, 125, 124, 127, 131, 131, 128, 127, 128, 131, 130, 126, 125, 129, 129, 123, 125, 131, 133, 130, 124, 123, 124, 124, 127, 128, 130, 132, 132, 130, 130, 129, 126, 128, 124, 121, 124, 124, 125, 130, 131, 130, 129, 128, 123, 125, 127, 122, 124, 126, 128, 133, 132, 131, 135, 135, 133, 129, 125, 120, 120, 123, 123, 125, 126, 128, 131, 131, 133, 131, 127, 126, 125, 124, 121, 122, 128, 132, 131, 132, 133, 131, 129, 128, 125, 123, 122, 122, 122, 124, 128, 129, 133, 136, 135, 133, 131, 127, 121, 117, 117, 120, 124, 128, 130, 135, 139, 136, 130, 129, 126, 124, 123, 122, 124, 126, 129, 132, 132, 129, 127, 125, 122, 125, 128, 126, 127, 130, 130, 129, 124, 125, 129, 127, 126, 129, 133, 132, 130, 129, 127, 129, 123, 117, 124, 127, 128, 129, 130, 131, 133, 132, 125, 125, 126, 125, 124, 122, 124, 128, 133, 134, 131, 131, 130, 129, 127, 122, 122, 126, 123, 119, 125, 128, 131, 135, 132, 129, 130, 128, 124, 126, 127, 125, 129, 127, 128, 129, 128, 128, 125, 127, 129, 130, 128, 126, 131, 130, 127, 125, 125, 127, 124, 125, 125, 125, 129, 131, 132, 132, 131, 126, 125, 125, 118, 120, 126, 129, 135, 136, 133, 132, 130, 127, 128, 127, 123, 123, 125, 128, 130, 127, 127, 130, 127, 123, 122, 122, 125, 126, 128, 132, 132, 134, 133, 132, 129, 123, 121, 123, 125, 126, 127, 131, 131, 132, 129, 128, 129, 125, 122, 120, 123, 128, 130, 131, 131, 133, 133, 130, 126, 124, 126, 125, 123, 123, 128, 132, 132, 132, 129, 126, 124, 123, 124, 123, 124, 127, 129, 129, 127, 131, 135, 133, 130, 131, 130, 126, 123, 119, 119, 124, 128, 132, 133, 134, 136, 132, 129, 125, 122, 121, 120, 123, 124, 126, 127, 130, 136, 131, 129, 131, 128, 127, 127, 127, 126, 129, 130, 127, 129, 126, 124, 126, 126, 126, 124, 125, 125, 125, 128, 130, 132, 134, 136, 134, 126, 121, 117, 119, 124, 124, 127, 134, 137, 136, 132, 131, 128, 123, 121, 121, 122, 126, 129, 132, 134, 134, 132, 129, 128, 125, 124, 120, 117, 120, 123, 128, 128, 125, 134, 140, 134, 126, 123, 125, 126, 127, 126, 130, 136, 133, 127, 125, 127, 126, 122, 123, 125, 128, 127, 127, 131, 131, 129, 126, 125, 126, 126, 124, 125, 130, 131, 131, 133, 133, 129, 126, 126, 123, 120, 122, 124, 128, 130, 130, 131, 129, 129, 129, 129, 129, 127, 126, 123, 124, 125, 128, 130, 126, 129, 130, 127, 129, 126, 126, 129, 130, 132, 132, 133, 129, 126, 125, 119, 120, 123, 126, 129, 129, 129, 129, 130, 128, 125, 128, 128, 127, 124, 126, 132, 131, 130, 130, 130, 130, 127, 126, 124, 122, 125, 127, 126, 127, 125, 123, 127, 127, 123, 130, 141, 137, 133, 131, 127, 128, 124, 118, 121, 122, 123, 126, 129, 129, 133, 136, 132, 131, 130, 123, 121, 121, 121, 125, 128, 126, 130, 136, 134, 131, 128, 126, 127, 125, 123, 125, 129, 130, 132, 131, 128, 130, 130, 126, 125, 121, 118, 122, 124, 125, 131, 134, 135, 134, 130, 126, 123, 122, 121, 124, 130, 131, 132, 133, 132, 131, 129, 124, 123, 124, 123, 123, 122, 124, 128, 131, 132, 131, 132, 130, 127, 124, 123, 126, 128, 129, 130, 130, 131, 130, 127, 126, 125, 125, 126, 127, 125, 125, 129, 132, 131, 130, 130, 127, 123, 122, 123, 126, 124, 122, 126, 130, 135, 134, 131, 131, 130, 129, 126, 125, 125, 125, 126, 124, 127, 130, 129, 130, 134, 133, 130, 128, 124, 123, 124, 123, 122, 122, 125, 128, 127, 132, 135, 133, 129, 125, 124, 125, 128, 130, 131, 131, 129, 125, 123, 123, 122, 127, 129, 129, 131, 129, 132, 132, 129, 127, 124, 123, 121, 123, 126, 128, 132, 132, 133, 132, 127, 126, 122, 122, 126, 128, 130, 127, 128, 130, 130, 128, 124, 124, 123, 124, 126, 127, 132, 132, 133, 131, 130, 129, 125, 124, 122, 125, 130, 128, 129, 130, 130, 128, 126, 126, 124, 125, 127, 125, 127, 129, 129, 131, 134, 131, 128, 127, 124, 124, 126, 129, 126, 121, 125, 126, 127, 131, 129, 129, 129, 130, 128, 126, 128, 127, 127, 128, 126, 124, 127, 130, 128, 128, 129, 129, 130, 129, 126, 126, 126, 125, 126, 126, 125, 125, 128, 130, 131, 131, 133, 132, 131, 128, 124, 124, 124, 123, 126, 129, 127, 130, 130, 128, 130, 126, 123, 124, 122, 118, 121, 136, 138, 135, 135, 131, 129, 125, 117, 119, 128, 130, 126, 128, 132, 133, 133, 127, 125, 126, 122, 118, 122, 127, 130, 136, 135, 135, 135, 127, 123, 119, 116, 122, 127, 127, 127, 132, 131, 129, 134, 131, 127, 126, 124, 126, 132, 131, 128, 132, 131, 128, 129, 124, 119, 119, 122, 126, 128, 130, 131, 136, 133, 126, 126, 123, 122, 124, 125, 128, 130, 134, 132, 129, 129, 128, 125, 122, 123, 127, 129, 127, 127, 129, 131, 130, 126, 125, 125, 128, 128, 128, 131, 131, 129, 129, 126, 127, 127, 126, 125, 120, 122, 127, 130, 133, 134, 134, 132, 129, 126, 124, 125, 123, 124, 126, 125, 128, 128, 128, 130, 130, 130, 126, 123, 124, 122, 123, 128, 129, 132, 135, 134, 132, 132, 129, 125, 123, 122, 123, 124, 125, 125, 127, 130, 128, 129, 131, 130, 130, 130, 128, 126, 124, 126, 127, 125, 126, 128, 128, 129, 129, 129, 131, 129, 125, 126, 127, 126, 129, 130, 129, 131, 131, 126, 124, 119, 119, 123, 125, 129, 135, 138, 134, 131, 130, 126, 123, 119, 117, 123, 125, 126, 129, 134, 139, 137, 133, 131, 128, 125, 120, 120, 121, 123, 128, 129, 132, 133, 131, 131, 127, 124, 123, 123, 124, 126, 130, 130, 132, 132, 126, 128, 130, 128, 129, 128, 125, 127, 129, 127, 128, 130, 129, 127, 124, 123, 125, 124, 124, 126, 126, 131, 133, 129, 129, 130, 127, 125, 123, 124, 129, 131, 128, 129, 133, 130, 127, 126, 126, 127, 126, 123, 126, 132, 131, 128, 128, 127, 127, 126, 125, 126, 127, 128, 127, 128, 129, 128, 127, 128, 129, 128, 129, 127, 127, 128, 125, 127, 128, 124, 127, 130, 132, 129, 127, 124, 122, 126, 123, 124, 132, 134, 134, 133, 126, 123, 125, 127, 128, 127, 125, 127, 130, 129, 126, 128, 131, 126, 124, 126, 127, 128, 127, 129, 131, 133, 131, 126, 128, 126, 123, 123, 125, 129, 126, 125, 128, 131, 130, 122, 123, 130, 131, 127, 125, 129, 133, 132, 128, 125, 126, 126, 127, 127, 126, 129, 128, 128, 131, 130, 128, 127, 125, 124, 126, 127, 125, 125, 128, 130, 132, 130, 128, 129, 128, 125, 125, 125, 127, 126, 122, 130, 136, 131, 129, 127, 127, 125, 121, 119, 123, 129, 128, 131, 134, 133, 134, 131, 126, 125, 123, 123, 126, 128, 128, 130, 130, 127, 125, 126, 127, 126, 127, 127, 128, 130, 129, 130, 129, 127, 125, 123, 126, 126, 125, 130, 131, 132, 132, 130, 128, 127, 125, 123, 122, 125, 125, 125, 127, 130, 131, 131, 131, 128, 126, 127, 127, 125, 124, 125, 127, 127, 128, 129, 129, 130, 127, 125, 127, 127, 127, 127, 130, 130, 129, 129, 127, 126, 125, 123, 124, 125, 130, 135, 132, 127, 126, 128, 126, 125, 125, 125, 128, 130, 129, 131, 133, 132, 129, 125, 121, 120, 122, 123, 129, 133, 132, 132, 130, 131, 129, 128, 124, 121, 123, 122, 124, 129, 129, 136, 137, 132, 129, 126, 124, 122, 125, 127, 124, 126, 129, 130, 133, 133, 128, 128, 124, 119, 119, 121, 128, 132, 133, 134, 133, 134, 129, 124, 124, 119, 118, 119, 121, 130, 137, 136, 135, 138, 134, 124, 122, 119, 121, 124, 123, 125, 131, 130, 130, 133, 130, 130, 128, 122, 124, 123, 123, 127, 130, 131, 133, 139, 134, 129, 128, 124, 124, 122, 121, 125, 129, 130, 130, 130, 128, 127, 124, 123, 128, 125, 125, 128, 131, 134, 135, 134, 130, 128, 125, 121, 122, 122, 123, 129, 131, 130, 131, 132, 131, 127, 124, 124, 123, 121, 123, 126, 130, 130, 132, 135, 133, 131, 127, 126, 128, 125, 123, 124, 130, 131, 130, 132, 129, 126, 126, 123, 121, 122, 126, 129, 131, 133, 132, 130, 130, 126, 122, 123, 123, 125, 125, 123, 127, 128, 128, 130, 134, 134, 134, 135, 128, 127, 125, 123, 127, 128, 128, 126, 125, 124, 123, 127, 126, 125, 128, 129, 130, 130, 131, 130, 129, 131, 128, 125, 124, 124, 124, 128, 129, 129, 131, 130, 130, 130, 126, 125, 122, 123, 126, 128, 129, 129, 131, 130, 129, 130, 128, 126, 124, 125, 127, 124, 124, 127, 127, 130, 131, 129, 133, 134, 131, 128, 128, 126, 123, 123, 122, 123, 128, 128, 129, 131, 129, 130, 131, 129, 128, 128, 126, 122, 125, 125, 126, 129, 128, 131, 132, 129, 125, 125, 125, 124, 127, 128, 130, 134, 130, 131, 131, 125, 124, 126, 125, 123, 126, 127, 127, 128, 127, 128, 130, 129, 126, 126, 127, 123, 128, 130, 127, 129, 128, 130, 131, 130, 126, 125, 128, 124, 127, 128, 125, 129, 130, 129, 125, 123, 120, 122, 128, 127, 130, 133, 134, 132, 130, 129, 128, 129, 122, 121, 128, 124, 127, 127, 128, 132, 130, 131, 125, 127, 126, 122, 128, 126, 127, 128, 130, 131, 127, 128, 123, 123, 127, 126, 128, 127, 128, 127, 126, 127, 124, 127, 128, 130, 127, 127, 135, 134, 135, 133, 131, 132, 128, 126, 121, 122, 123, 125, 129, 128, 131, 131, 130, 132, 129, 126, 124, 126, 126, 128, 130, 128, 126, 126, 128, 128, 127, 126, 124, 126, 124, 123, 123, 123, 127, 128, 128, 128, 129, 127, 127, 130, 126, 126, 125, 125, 129, 128, 129, 127, 129, 128, 126, 127, 125, 128, 130, 132, 130, 130, 136, 133, 133, 128, 122, 124, 122, 123, 124, 127, 129, 129, 132, 128, 128, 124, 120, 127, 127, 127, 129, 131, 132, 133, 134, 127, 125, 124, 122, 124, 122, 123, 125, 128, 131, 132, 133, 131, 131, 128, 125, 128, 127, 126, 127, 129, 132, 132, 131, 128, 128, 127, 126, 123, 123, 126, 129, 129, 131, 131, 129, 130, 128, 122, 123, 123, 120, 122, 124, 126, 132, 135, 132, 131, 131, 128, 126, 126, 124, 124, 124, 121, 127, 129, 125, 131, 135, 135, 135, 133, 131, 129, 128, 121, 121, 124, 120, 124, 126, 127, 130, 129, 130, 128, 128, 130, 130, 131, 127, 126, 127, 126, 125, 124, 128, 131, 133, 132, 130, 128, 124, 123, 122, 122, 124, 126, 129, 130, 132, 130, 131, 134, 130, 127, 126, 126, 127, 126, 125, 127, 128, 124, 125, 129, 128, 128, 129, 130, 129, 122, 119, 125, 128, 127, 130, 129, 131, 134, 127, 128, 132, 127, 125, 124, 124, 124, 128, 128, 131, 136, 132, 132, 130, 127, 129, 128, 127, 127, 126, 125, 125, 128, 127, 127, 128, 126, 125, 125, 126, 125, 127, 128, 129, 132, 130, 126, 126, 125, 127, 129, 125, 125, 128, 129, 127, 126, 124, 126, 130, 128, 127, 130, 131, 132, 132, 133, 133, 130, 128, 124, 124, 125, 124, 127, 129, 130, 132, 130, 125, 125, 126, 121, 121, 123, 123, 127, 130, 131, 130, 131, 130, 127, 127, 125, 125, 122, 123, 126, 127, 131, 131, 132, 132, 130, 131, 126, 126, 126, 124, 124, 124, 126, 126, 129, 132, 130, 130, 129, 129, 125, 124, 130, 132, 132, 134, 133, 133, 130, 127, 123, 124, 126, 124, 123, 125, 127, 126, 126, 128, 130, 125, 121, 122, 125, 125, 125, 128, 132, 133, 131, 125, 127, 130, 129, 129, 129, 128, 125, 123, 125, 127, 127, 128, 133, 135, 132, 130, 130, 128, 125, 124, 121, 122, 126, 129, 131, 134, 132, 128, 126, 125, 123, 121, 117, 120, 124, 128, 134, 136, 136, 136, 132, 124, 120, 119, 117, 121, 126, 127, 131, 133, 133, 135, 133, 130, 126, 125, 124, 121, 126, 131, 135, 140, 140, 138, 133, 132, 127, 119, 118, 114, 117, 123, 121, 126, 129, 131, 130, 128, 128, 123, 121, 120, 120, 121, 123, 131, 132, 130, 133, 130, 128, 126, 126, 126, 128, 129, 130, 136, 138, 136, 135, 135, 130, 124, 123, 123, 125, 127, 126, 130, 132, 130, 128, 130, 126, 122, 123, 119, 117, 121, 127, 130, 133, 135, 131, 128, 120, 115, 119, 119, 125, 127, 129, 135, 136, 138, 135, 134, 131, 123, 122, 119, 121, 125, 129, 138, 138, 136, 135, 129, 126, 121, 118, 119, 122, 127, 128, 131, 138, 138, 136, 133, 127, 123, 120, 118, 118, 122, 132, 132, 132, 136, 134, 134, 129, 123, 121, 119, 121, 121, 124, 128, 132, 136, 133, 133, 131, 125, 125, 121, 120, 127, 126, 125, 129, 132, 131, 131, 130, 126, 128, 123, 118, 122, 123, 123, 127, 128, 129, 130, 129, 127, 126, 125, 122, 120, 125, 130, 133, 135, 135, 136, 135, 132, 127, 126, 124, 121, 127, 128, 125, 129, 131, 134, 132, 133, 133, 127, 129, 127, 124, 125, 126, 128, 131, 134, 131, 127, 130, 127, 127, 126, 124, 128, 127, 126, 128, 126, 126, 128, 127, 126, 124, 122, 121, 120, 124, 128, 130, 130, 129, 131, 129, 125, 126, 124, 126, 125, 126, 127, 127, 132, 131, 132, 134, 129, 129, 125, 121, 119, 121, 126, 125, 128, 131, 132, 133, 129, 127, 126, 124, 121, 122, 127, 129, 131, 133, 134, 131, 127, 127, 126, 125, 124, 125, 127, 129, 129, 130, 132, 129, 127, 127, 125, 127, 127, 128, 129, 131, 133, 131, 130, 128, 126, 125, 122, 122, 122, 126, 128, 130, 131, 130, 133, 130, 122, 123, 124, 123, 124, 125, 128, 133, 134, 130, 129, 130, 126, 124, 123, 122, 125, 128, 130, 130, 132, 133, 131, 130, 128, 124, 123, 120, 123, 128, 124, 123, 131, 134, 134, 133, 128, 127, 126, 120, 121, 125, 127, 129, 131, 132, 132, 131, 129, 128, 126, 120, 121, 123, 124, 126, 132, 135, 132, 133, 131, 127, 125, 123, 123, 125, 127, 128, 129, 130, 132, 131, 128, 126, 125, 123, 121, 122, 125, 127, 130, 133, 132, 130, 130, 126, 126, 127, 123, 125, 130, 130, 131, 132, 129, 130, 132, 125, 123, 126, 122, 125, 127, 127, 130, 131, 131, 128, 126, 124, 124, 127, 123, 123, 126, 128, 132, 133, 133, 135, 134, 128, 122, 122, 120, 122, 127, 129, 132, 134, 129, 125, 126, 124, 122, 125, 127, 128, 129, 130, 131, 134, 133, 129, 126, 124, 122, 123, 125, 126, 130, 133, 134, 135, 132, 128, 127, 123, 118, 117, 121, 122, 126, 132, 134, 136, 135, 132, 129, 127, 124, 118, 119, 121, 124, 129, 130, 133, 134, 133, 130, 128, 127, 124, 126, 124, 123, 125, 123, 128, 134, 136, 131, 128, 127, 123, 122, 121, 123, 128, 132, 133, 130, 131, 132, 129, 127, 128, 128, 125, 125, 126, 126, 127, 125, 127, 130, 131, 130, 129, 126, 123, 125, 126, 126, 129, 129, 130, 131, 130, 128, 127, 126, 123, 124, 124, 123, 124, 126, 130, 132, 133, 131, 129, 127, 126, 124, 120, 120, 125, 130, 132, 133, 132, 133, 134, 128, 125, 126, 124, 124, 125, 124, 126, 130, 129, 126, 128, 129, 127, 125, 122, 126, 129, 129, 132, 133, 134, 133, 133, 129, 125, 123, 121, 123, 124, 124, 123, 127, 134, 130, 128, 129, 128, 127, 124, 124, 125, 128, 129, 127, 129, 128, 127, 125, 124, 128, 128, 127, 130, 130, 130, 130, 129, 125, 126, 127, 125, 127, 128, 128, 129, 130, 131, 130, 131, 128, 127, 128, 126, 125, 126, 126, 127, 129, 130, 129, 128, 127, 126, 123, 120, 124, 125, 129, 133, 130, 128, 129, 128, 124, 123, 123, 123, 127, 129, 132, 134, 135, 136, 131, 127, 127, 124, 124, 123, 121, 125, 128, 126, 129, 131, 131, 133, 127, 123, 127, 130, 128, 128, 132, 129, 130, 129, 125, 128, 127, 126, 127, 125, 126, 127, 128, 125, 124, 128, 125, 125, 127, 127, 131, 131, 131, 129, 129, 127, 122, 124, 123, 123, 127, 128, 131, 134, 133, 131, 130, 128, 123, 125, 118, 114, 126, 132, 134, 138, 136, 134, 134, 128, 119, 121, 125, 124, 128, 126, 126, 133, 137, 136, 133, 130, 127, 126, 124, 121, 123, 128, 130, 127, 127, 130, 128, 130, 128, 124, 126, 126, 127, 126, 128, 128, 128, 131, 127, 125, 125, 124, 125, 125, 127, 126, 126, 131, 131, 129, 125, 124, 125, 125, 127, 128, 128, 129, 127, 127, 126, 126, 125, 127, 131, 129, 127, 130, 130, 131, 132, 131, 130, 127, 128, 126, 125, 128, 127, 126, 125, 126, 128, 127, 128, 126, 125, 125, 125, 126, 127, 131, 134, 133, 130, 126, 128, 129, 129, 131, 131, 126, 124, 125, 123, 124, 127, 126, 127, 129, 129, 130, 131, 132, 131, 131, 128, 123, 121, 122, 124, 125, 126, 129, 131, 129, 128, 128, 126, 124, 122, 123, 127, 128, 128, 129, 131, 133, 132, 128, 128, 128, 127, 127, 127, 127, 129, 132, 132, 132, 130, 127, 127, 125, 123, 127, 127, 129, 131, 132, 131, 126, 124, 126, 122, 118, 121, 124, 124, 130, 134, 134, 137, 135, 130, 125, 122, 120, 121, 124, 124, 128, 130, 130, 129, 126, 128, 128, 127, 127, 127, 128, 126, 129, 131, 129, 131, 132, 131, 129, 126, 125, 127, 128, 125, 125, 128, 128, 127, 126, 125, 126, 128, 127, 126, 127, 125, 126, 127, 127, 127, 129, 131, 130, 129, 129, 130, 128, 126, 128, 127, 125, 126, 127, 129, 131, 132, 132, 129, 123, 120, 127, 126, 123, 126, 127, 128, 127, 124, 123, 127, 131, 130, 130, 129, 127, 129, 129, 126, 126, 126, 124, 126, 127, 125, 126, 126, 127, 130, 129, 128, 130, 131, 129, 130, 128, 125, 130, 130, 128, 130, 130, 131, 131, 128, 125, 127, 127, 124, 123, 123, 126, 128, 125, 125, 126, 128, 131, 128, 126, 128, 130, 130, 127, 127, 126, 126, 129, 125, 124, 128, 131, 134, 131, 128, 126, 127, 124, 119, 122, 124, 127, 129, 128, 128, 128, 129, 125, 122, 127, 126, 126, 128, 129, 130, 134, 136, 133, 133, 127, 123, 124, 121, 120, 124, 128, 132, 135, 134, 130, 130, 126, 123, 124, 121, 122, 126, 131, 132, 130, 133, 136, 139, 132, 125, 125, 122, 121, 121, 122, 125, 128, 129, 129, 130, 130, 128, 129, 126, 121, 120, 122, 126, 126, 129, 133, 133, 133, 132, 130, 130, 128, 126, 123, 121, 123, 125, 127, 127, 128, 132, 131, 129, 124, 122, 122, 120, 122, 126, 130, 135, 134, 133, 132, 130, 128, 128, 127, 124, 126, 126, 123, 123, 128, 132, 133, 130, 128, 128, 127, 123, 120, 121, 123, 126, 127, 128, 131, 133, 131, 131, 129, 127, 125, 125, 127, 127, 129, 129, 129, 129, 128, 128, 124, 122, 124, 127, 128, 129, 130, 131, 133, 134, 132, 129, 125, 124, 123, 123, 123, 125, 129, 129, 131, 132, 131, 130, 125, 123, 121, 121, 123, 124, 127, 129, 131, 131, 131, 127, 121, 124, 127, 126, 127, 130, 134, 136, 135, 129, 127, 129, 125, 123, 123, 123, 126, 127, 130, 129, 131, 131, 125, 125, 128, 127, 125, 125, 129, 132, 131, 129, 130, 133, 130, 127, 126, 124, 124, 124, 122, 125, 130, 131, 132, 134, 132, 131, 128, 124, 121, 121, 121, 121, 125, 126, 128, 134, 134, 134, 133, 129, 127, 127, 125, 123, 125, 126, 129, 132, 129, 125, 125, 123, 119, 121, 124, 123, 128, 128, 127, 134, 131, 129, 130, 130, 132, 130, 128, 126, 127, 131, 130, 130, 129, 130, 130, 123, 119, 124, 130, 131, 132, 132, 130, 132, 128, 122, 123, 125, 123, 123, 126, 126, 128, 133, 131, 130, 127, 121, 120, 120, 121, 123, 124, 128, 132, 134, 134, 130, 130, 129, 126, 125, 124, 127, 130, 130, 131, 131, 131, 130, 130, 129, 127, 129, 128, 127, 127, 125, 124, 126, 129, 127, 128, 130, 129, 127, 125, 124, 126, 127, 127, 128, 130, 129, 128, 127, 125, 127, 128, 126, 125, 128, 125, 125, 130, 128, 127, 129, 127, 126, 126, 126, 127, 130, 131, 130, 130, 131, 130, 128, 126, 124, 124, 126, 126, 128, 130, 132, 132, 131, 131, 128, 123, 125, 127, 126, 125, 127, 126, 124, 128, 129, 127, 126, 127, 128, 130, 128, 127, 129, 129, 128, 126, 127, 131, 129, 128, 125, 120, 121, 124, 125, 127, 131, 135, 134, 134, 132, 127, 126, 125, 123, 123, 123, 124, 127, 132, 134, 133, 131, 130, 130, 124, 118, 116, 117, 120, 124, 126, 127, 130, 134, 134, 131, 130, 131, 129, 126, 125, 125, 127, 129, 130, 132, 131, 131, 128, 125, 125, 126, 124, 126, 129, 129, 130, 128, 127, 129, 128, 127, 129, 128, 125, 124, 126, 124, 121, 124, 127, 129, 131, 133, 132, 132, 131, 125, 126, 125, 124, 126, 126, 125, 126, 129, 131, 132, 131, 127, 124, 125, 126, 124, 125, 129, 131, 132, 130, 128, 127, 126, 126, 127, 125, 122, 122, 124, 130, 134, 129, 131, 135, 131, 127, 124, 122, 125, 127, 126, 127, 129, 128, 129, 131, 126, 125, 128, 126, 123, 125, 130, 131, 133, 135, 133, 130, 128, 126, 124, 124, 125, 127, 127, 128, 129, 127, 127, 125, 125, 127, 125, 125, 127, 128, 129, 128, 127, 126, 125, 122, 121, 126, 128, 129, 128, 126, 128, 128, 124, 126, 129, 128, 132, 135, 130, 131, 132, 128, 133, 133, 129, 131, 129, 127, 125, 123, 121, 122, 124, 123, 125, 127, 126, 128, 127, 126, 127, 128, 128, 125, 127, 127, 126, 126, 127, 129, 129, 128, 129, 129, 130, 131, 132, 129, 126, 127, 130, 130, 125, 127, 131, 132, 130, 125, 125, 128, 126, 123, 124, 123, 125, 129, 126, 123, 127, 128, 127, 127, 126, 125, 127, 127, 127, 129, 131, 131, 129, 129, 128, 126, 131, 133, 132, 130, 130, 133, 133, 131, 128, 127, 128, 126, 124, 123, 122, 122, 124, 125, 126, 126, 130, 133, 129, 126, 126, 126, 127, 127, 127, 126, 129, 130, 127, 130, 129, 127, 129, 127, 126, 124, 124, 125, 125, 126, 126, 126, 127, 126, 125, 126, 127, 128, 130, 129, 130, 131, 131, 128, 122, 127, 131, 127, 127, 127, 128, 130, 127, 124, 125, 129, 127, 125, 125, 126, 128, 129, 129, 129, 128, 130, 133, 131, 126, 124, 123, 122, 122, 124, 126, 128, 133, 136, 132, 128, 125, 124, 125, 125, 124, 127, 129, 129, 129, 126, 124, 124, 126, 125, 125, 127, 127, 127, 129, 129, 132, 133, 130, 127, 127, 126, 126, 124, 122, 127, 129, 131, 132, 130, 128, 128, 127, 125, 128, 128, 124, 126, 129, 129, 130, 129, 130, 130, 130, 126, 124, 127, 125, 127, 130, 129, 127, 127, 129, 129, 127, 126, 124, 126, 127, 125, 125, 125, 127, 131, 129, 126, 126, 126, 126, 124, 121, 119, 121, 126, 130, 132, 135, 138, 137, 131, 129, 128, 125, 123, 125, 127, 127, 128, 128, 132, 135, 132, 129, 124, 122, 123, 123, 123, 127, 131, 133, 135, 133, 127, 124, 122, 122, 123, 125, 125, 124, 125, 128, 131, 131, 131, 128, 127, 127, 124, 123, 125, 128, 131, 131, 133, 132, 131, 129, 126, 128, 124, 122, 127, 128, 132, 134, 134, 132, 129, 127, 122, 120, 118, 120, 124, 126, 128, 130, 133, 129, 127, 130, 130, 128, 126, 127, 129, 130, 128, 127, 131, 130, 127, 126, 123, 123, 122, 124, 128, 129, 134, 136, 136, 134, 133, 130, 125, 123, 121, 121, 121, 124, 127, 129, 131, 130, 130, 130, 128, 124, 122, 124, 126, 127, 129, 131, 132, 132, 131, 129, 128, 126, 126, 123, 120, 125, 128, 131, 132, 131, 133, 134, 133, 125, 123, 129, 128, 126, 127, 128, 130, 132, 130, 124, 123, 121, 122, 124, 124, 125, 124, 130, 135, 132, 130, 130, 128, 122, 123, 123, 122, 127, 130, 131, 134, 136, 133, 132, 132, 127, 127, 126, 123, 122, 121, 124, 126, 128, 128, 129, 130, 128, 127, 126, 126, 129, 131, 128, 127, 129, 127, 126, 124, 123, 125, 125, 128, 128, 127, 127, 129, 130, 128, 128, 127, 131, 130, 123, 127, 126, 125, 128, 127, 127, 127, 128, 126, 126, 126, 125, 126, 126, 126, 129, 131, 131, 132, 133, 130, 131, 129, 127, 127, 124, 126, 131, 131, 130, 128, 127, 126, 126, 124, 122, 121, 123, 127, 132, 133, 134, 137, 134, 128, 125, 125, 124, 120, 121, 121, 123, 126, 127, 131, 131, 132, 130, 126, 126, 120, 123, 127, 128, 132, 132, 135, 135, 131, 128, 126, 125, 123, 126, 126, 124, 128, 129, 131, 130, 128, 125, 125, 125, 122, 125, 129, 131, 133, 133, 132, 132, 131, 128, 125, 123, 123, 125, 127, 128, 130, 131, 130, 129, 127, 125, 126, 125, 125, 126, 127, 127, 128, 129, 129, 128, 128, 128, 127, 123, 122, 122, 127, 128, 128, 129, 127, 129, 128, 127, 127, 127, 131, 129, 129, 128, 126, 131, 130, 125, 125, 130, 131, 128, 128, 127, 130, 130, 126, 125, 127, 128, 126, 127, 126, 125, 129, 128, 126, 127, 126, 127, 128, 129, 129, 129, 129, 128, 128, 128, 127, 125, 125, 123, 122, 126, 130, 130, 126, 130, 133, 128, 128, 125, 125, 127, 127, 129, 130, 130, 130, 130, 131, 127, 125, 126, 123, 119, 120, 125, 127, 128, 130, 130, 132, 132, 128, 128, 127, 126, 125, 125, 129, 128, 128, 130, 127, 130, 128, 126, 130, 130, 128, 126, 124, 126, 126, 127, 126, 124, 127, 130, 130, 131, 130, 128, 129, 128, 125, 124, 126, 127, 126, 131, 131, 128, 129, 127, 127, 127, 125, 126, 128, 128, 125, 128, 130, 130, 130, 127, 126, 125, 124, 121, 124, 128, 129, 131, 131, 131, 131, 130, 126, 125, 126, 127, 131, 132, 129, 129, 129, 128, 126, 124, 123, 122, 123, 123, 123, 125, 129, 133, 133, 132, 130, 127, 125, 123, 123, 125, 127, 127, 130, 133, 133, 132, 131, 129, 128, 125, 123, 125, 128, 129, 130, 131, 131, 130, 130, 127, 123, 124, 125, 124, 123, 126, 129, 128, 129, 127, 124, 126, 126, 125, 126, 127, 128, 129, 129, 127, 125, 125, 124, 123, 122, 123, 128, 129, 127, 131, 134, 134, 133, 130, 127, 127, 127, 125, 126, 129, 130, 135, 137, 133, 131, 129, 126, 125, 123, 121, 124, 127, 127, 129, 132, 131, 130, 129, 124, 123, 124, 119, 120, 124, 125, 125, 126, 125, 126, 128, 127, 128, 132, 130, 127, 129, 129, 128, 128, 128, 129, 131, 132, 130, 128, 130, 130, 130, 129, 127, 128, 128, 126, 127, 129, 129, 130, 128, 124, 127, 129, 129, 129, 130, 130, 130, 129, 124, 124, 126, 122, 122, 125, 125, 123, 123, 123, 119, 119, 122, 125, 128, 127, 127, 129, 132, 132, 132, 132, 129, 127, 127, 127, 128, 130, 131, 129, 131, 131, 128, 128, 128, 130, 129, 128, 127, 125, 124, 123, 123, 122, 123, 127, 129, 128, 126, 127, 129, 129, 128, 128, 129, 128, 128, 129, 131, 130, 125, 129, 132, 130, 128, 124, 124, 124, 124, 124, 125, 127, 129, 131, 130, 128, 129, 128, 127, 126, 124, 125, 127, 128, 131, 131, 130, 126, 124, 125, 124, 123, 124, 126, 130, 131, 133, 134, 132, 132, 130, 128, 126, 123, 124, 125, 127, 129, 129, 130, 132, 132, 130, 128, 126, 125, 125, 125, 125, 125, 126, 128, 129, 130, 130, 129, 128, 127, 126, 125, 125, 125, 124, 124, 125, 126, 127, 128, 129, 129, 128, 127, 126, 126, 126, 123, 125, 129, 130, 131, 129, 127, 126, 127, 127, 129, 131, 129, 126, 124, 127, 129, 128, 130, 131, 131, 130, 129, 129, 128, 129, 128, 128, 131, 132, 130, 127, 125, 123, 123, 123, 123, 126, 127, 127, 130, 132, 131, 128, 127, 125, 122, 121, 121, 126, 128, 128, 131, 133, 133, 130, 126, 122, 121, 124, 124, 125, 128, 131, 134, 135, 133, 130, 130, 127, 124, 124, 124, 126, 130, 132, 132, 133, 133, 130, 126, 122, 121, 123, 125, 126, 127, 131, 132, 130, 129, 128, 128, 128, 124, 120, 118, 122, 128, 129, 131, 134, 136, 135, 131, 126, 119, 117, 121, 122, 125, 129, 132, 136, 137, 132, 128, 129, 127, 124, 123, 121, 121, 125, 127, 129, 132, 132, 129, 129, 128, 125, 124, 125, 125, 127, 130, 131, 131, 131, 129, 129, 127, 126, 125, 123, 125, 127, 129, 130, 130, 132, 131, 134, 131, 126, 124, 124, 127, 127, 126, 127, 127, 129, 130, 127, 125, 126, 127, 126, 128, 127, 126, 127, 127, 126, 125, 124, 124, 127, 128, 128, 128, 126, 128, 131, 129, 128, 129, 131, 131, 130, 127, 125, 126, 126, 125, 124, 125, 125, 130, 132, 130, 131, 134, 133, 130, 128, 124, 123, 126, 124, 124, 128, 129, 129, 131, 131, 130, 129, 127, 124, 125, 127, 126, 126, 127, 126, 129, 131, 129, 128, 127, 126, 127, 124, 120, 122, 125, 128, 129, 132, 135, 135, 134, 133, 126, 123, 125, 121, 122, 124, 126, 128, 129, 131, 131, 131, 132, 131, 129, 129, 127, 125, 125, 123, 122, 125, 126, 126, 127, 127, 129, 129, 128, 127, 127, 129, 130, 128, 129, 129, 128, 129, 128, 127, 129, 129, 127, 127, 127, 125, 125, 126, 125, 126, 126, 128, 130, 130, 130, 130, 132, 131, 127, 123, 124, 127, 127, 127, 127, 128, 131, 131, 129, 126, 126, 126, 126, 127, 124, 125, 128, 129, 129, 129, 130, 131, 128, 126, 126, 126, 128, 129, 127, 127, 129, 130, 131, 129, 127, 128, 128, 124, 123, 122, 123, 129, 132, 130, 130, 131, 131, 130, 128, 125, 124, 125, 125, 125, 128, 130, 130, 130, 131, 129, 127, 127, 125, 124, 127, 126, 125, 126, 126, 126, 126, 127, 128, 129, 131, 129, 129, 130, 129, 129, 130, 130, 127, 126, 127, 126, 127, 125, 124, 126, 128, 127, 127, 130, 129, 130, 128, 121, 122, 124, 124, 127, 129, 129, 131, 134, 133, 129, 128, 128, 127, 126, 124, 126, 127, 128, 128, 129, 130, 131, 132, 132, 129, 127, 124, 125, 129, 128, 125, 128, 132, 131, 129, 124, 119, 120, 117, 118, 125, 129, 132, 134, 134, 135, 136, 131, 125, 122, 121, 122, 122, 125, 131, 135, 137, 135, 132, 128, 123, 122, 119, 121, 123, 125, 130, 132, 134, 133, 133, 129, 125, 125, 121, 120, 121, 123, 130, 133, 135, 135, 135, 132, 126, 124, 121, 119, 120, 123, 126, 131, 135, 133, 133, 133, 130, 126, 122, 121, 124, 125, 125, 127, 129, 129, 131, 129, 127, 126, 125, 126, 126, 127, 128, 130, 131, 129, 127, 126, 124, 123, 125, 126, 125, 128, 128, 128, 134, 134, 132, 132, 131, 131, 129, 126, 123, 118, 122, 125, 122, 125, 130, 132, 135, 135, 128, 128, 132, 127, 123, 121, 121, 125, 128, 128, 128, 131, 132, 131, 131, 127, 124, 124, 125, 123, 123, 126, 128, 130, 131, 131, 132, 131, 129, 126, 124, 124, 125, 125, 125, 129, 131, 131, 131, 128, 127, 128, 127, 126, 124, 127, 128, 130, 131, 130, 127, 126, 128, 128, 127, 126, 125, 129, 130, 128, 128, 129, 128, 128, 128, 126, 125, 123, 123, 122, 120, 126, 129, 130, 134, 134, 133, 133, 131, 126, 122, 122, 123, 125, 126, 128, 129, 130, 131, 129, 127, 129, 129, 127, 125, 124, 126, 127, 128, 130, 130, 131, 130, 128, 127, 125, 124, 124, 125, 128, 128, 130, 130, 130, 130, 127, 126, 124, 123, 124, 124, 125, 127, 129, 133, 133, 131, 128, 128, 128, 127, 126, 125, 125, 127, 127, 129, 128, 127, 128, 127, 126, 125, 124, 126, 127, 130, 130, 131, 134, 132, 129, 127, 126, 123, 122, 122, 122, 125, 129, 131, 132, 132, 131, 128, 126, 125, 122, 124, 126, 128, 131, 134, 134, 133, 131, 130, 131, 125, 119, 117, 121, 125, 121, 123, 129, 134, 135, 133, 133, 131, 132, 129, 123, 122, 119, 121, 125, 127, 127, 128, 134, 134, 132, 131, 128, 128, 125, 125, 124, 124, 126, 127, 129, 130, 130, 130, 130, 131, 127, 127, 125, 126, 128, 129, 129, 129, 129, 130, 128, 125, 125, 126, 122, 123, 125, 126, 131, 133, 130, 129, 129, 126, 125, 126, 125, 125, 126, 126, 128, 130, 130, 130, 131, 130, 129, 130, 127, 125, 125, 125, 127, 128, 128, 128, 130, 128, 126, 128, 128, 127, 125, 123, 124, 125, 127, 128, 129, 131, 130, 129, 127, 126, 125, 126, 127, 126, 127, 130, 129, 130, 131, 130, 129, 130, 127, 125, 126, 126, 127, 130, 131, 130, 131, 131, 129, 127, 126, 125, 124, 124, 124, 124, 126, 128, 128, 129, 129, 127, 125, 126, 128, 129, 130, 130, 129, 129, 124, 120, 120, 122, 125, 126, 131, 132, 132, 133, 132, 130, 129, 128, 124, 123, 123, 120, 126, 131, 131, 134, 135, 132, 131, 129, 123, 121, 123, 124, 127, 133, 132, 132, 134, 134, 130, 126, 124, 122, 124, 122, 120, 127, 131, 133, 132, 129, 130, 129, 123, 121, 121, 121, 123, 127, 128, 131, 134, 133, 130, 128, 126, 121, 123, 125, 125, 130, 132, 133, 134, 133, 128, 127, 129, 125, 127, 128, 122, 125, 126, 125, 131, 133, 132, 132, 130, 124, 121, 121, 119, 122, 125, 127, 131, 134, 136, 135, 134, 129, 125, 125, 125, 124, 123, 126, 127, 127, 130, 131, 132, 132, 130, 127, 124, 123, 123, 124, 126, 128, 131, 131, 130, 128, 127, 125, 125, 124, 123, 125, 126, 126, 128, 131, 133, 132, 131, 128, 127, 127, 122, 120, 124, 127, 131, 133, 132, 132, 132, 129, 126, 125, 125, 124, 125, 126, 125, 126, 128, 129, 129, 129, 129, 129, 128, 125, 124, 126, 127, 129, 129, 128, 129, 127, 127, 126, 126, 126, 127, 129, 126, 126, 126, 126, 129, 131, 129, 129, 131, 130, 128, 130, 127, 125, 124, 120, 122, 126, 129, 129, 131, 133, 134, 132, 127, 125, 124, 122, 122, 123, 126, 127, 130, 133, 132, 132, 130, 126, 128, 126, 121, 121, 122, 124, 128, 130, 132, 132, 132, 131, 126, 124, 123, 124, 124, 124, 126, 129, 132, 132, 131, 131, 129, 128, 126, 123, 124, 126, 129, 128, 129, 130, 129, 132, 130, 127, 125, 122, 123, 123, 125, 128, 132, 134, 132, 131, 126, 126, 129, 125, 123, 122, 124, 127, 129, 131, 132, 132, 131, 130, 125, 122, 122, 124, 125, 125, 127, 130, 132, 134, 131, 127, 126, 123, 122, 125, 127, 127, 129, 128, 128, 129, 129, 127, 127, 127, 124, 125, 126, 125, 128, 129, 129, 131, 132, 130, 128, 128, 126, 123, 125, 125, 126, 128, 129, 130, 131, 133, 130, 128, 128, 126, 123, 125, 126, 126, 128, 128, 128, 129, 127, 127, 130, 130, 127, 126, 127, 126, 127, 127, 126, 127, 129, 127, 126, 127, 127, 126, 128, 128, 128, 128, 127, 126, 126, 124, 123, 125, 126, 127, 129, 130, 131, 131, 132, 130, 127, 127, 126, 126, 127, 127, 129, 128, 129, 129, 128, 130, 130, 128, 126, 127, 127, 128, 129, 127, 127, 128, 129, 128, 128, 128, 127, 128, 129, 127, 127, 129, 129, 128, 129, 127, 124, 123, 120, 122, 124, 125, 127, 130, 131, 131, 131, 130, 128, 128, 126, 124, 125, 126, 126, 128, 132, 133, 132, 130, 128, 127, 125, 125, 123, 124, 126, 126, 127, 128, 130, 131, 133, 133, 129, 127, 126, 123, 124, 124, 126, 129, 131, 131, 130, 129, 129, 127, 125, 124, 123, 123, 124, 126, 131, 135, 134, 133, 132, 128, 126, 124, 123, 125, 125, 124, 126, 130, 131, 130, 130, 129, 127, 127, 125, 124, 124, 126, 126, 128, 130, 128, 128, 127, 126, 127, 124, 126, 123, 122, 130, 135, 131, 129, 130, 128, 131, 133, 125, 124, 127, 127, 129, 129, 129, 126, 127, 128, 125, 125, 124, 127, 130, 130, 130, 128, 128, 127, 126, 126, 124, 127, 127, 127, 130, 129, 128, 129, 132, 132, 130, 129, 126, 127, 124, 123, 126, 127, 128, 130, 131, 129, 130, 129, 125, 125, 125, 124, 127, 129, 127, 127, 128, 126, 125, 127, 128, 127, 129, 129, 128, 129, 128, 130, 131, 128, 129, 129, 130, 130, 129, 128, 124, 121, 120, 123, 125, 127, 130, 132, 135, 134, 129, 127, 125, 123, 122, 123, 123, 125, 130, 134, 135, 132, 133, 132, 129, 126, 120, 119, 122, 124, 126, 127, 131, 133, 135, 133, 128, 127, 126, 123, 120, 121, 124, 129, 132, 132, 134, 134, 132, 129, 124, 120, 119, 122, 126, 128, 131, 133, 134, 134, 129, 121, 118, 123, 122, 123, 128, 127, 133, 139, 133, 128, 129, 126, 124, 125, 121, 121, 127, 128, 128, 129, 131, 131, 132, 132, 127, 127, 127, 127, 128, 126, 125, 126, 126, 125, 125, 126, 126, 127, 127, 128, 129, 130, 132, 131, 129, 129, 127, 126, 125, 125, 126, 129, 131, 130, 129, 129, 129, 126, 125, 124, 122, 124, 126, 126, 127, 129, 131, 133, 131, 127, 127, 126, 126, 126, 124, 125, 126, 126, 128, 130, 130, 129, 129, 128, 125, 126, 126, 127, 128, 128, 129, 131, 132, 130, 128, 127, 127, 127, 127, 126, 127, 128, 128, 127, 127, 127, 126, 126, 128, 128, 128, 128, 126, 126, 128, 127, 126, 127, 128, 128, 128, 126, 125, 126, 127, 130, 131, 130, 129, 131, 130, 125, 125, 126, 125, 126, 126, 127, 126, 128, 129, 128, 130, 127, 127, 127, 125, 126, 124, 127, 129, 129, 129, 128, 129, 128, 128, 128, 128, 128, 126, 128, 128, 126, 127, 129, 128, 127, 129, 128, 129, 129, 127, 128, 128, 127, 126, 126, 127, 127, 127, 127, 129, 130, 126, 126, 125, 127, 126, 125, 128, 129, 131, 131, 131, 129, 127, 124, 121, 124, 126, 129, 130, 131, 134, 134, 133, 130, 127, 125, 123, 120, 118, 120, 123, 127, 131, 131, 133, 133, 131, 128, 127, 124, 123, 126, 125, 127, 130, 130, 132, 136, 136, 130, 128, 127, 125, 126, 122, 120, 122, 124, 127, 128, 129, 128, 130, 131, 129, 129, 128, 130, 129, 127, 124, 124, 127, 126, 127, 128, 129, 129, 124, 123, 128, 129, 127, 128, 130, 127, 128, 129, 128, 129, 129, 128, 126, 126, 125, 124, 128, 128, 126, 125, 128, 131, 131, 130, 129, 128, 125, 123, 125, 125, 126, 129, 130, 130, 131, 129, 128, 128, 127, 125, 121, 120, 123, 126, 130, 131, 132, 132, 132, 130, 127, 127, 126, 125, 126, 127, 127, 128, 128, 131, 133, 131, 128, 128, 126, 123, 122, 121, 120, 122, 128, 130, 131, 133, 133, 131, 130, 130, 125, 125, 127, 126, 126, 128, 128, 128, 129, 129, 128, 128, 127, 125, 125, 127, 128, 130, 130, 127, 129, 128, 127, 127, 125, 124, 125, 126, 125, 126, 129, 128, 130, 131, 129, 129, 129, 128, 129, 129, 127, 127, 127, 127, 125, 121, 121, 123, 125, 126, 129, 131, 131, 134, 133, 128, 129, 126, 124, 124, 124, 122, 124, 130, 132, 133, 135, 131, 129, 127, 127, 126, 123, 122, 124, 126, 127, 130, 131, 131, 132, 132, 131, 128, 124, 119, 121, 124, 122, 123, 126, 130, 134, 133, 132, 132, 132, 129, 127, 125, 123, 123, 124, 125, 124, 123, 128, 131, 132, 130, 130, 130, 129, 129, 125, 125, 126, 125, 126, 127, 127, 127, 128, 129, 129, 128, 127, 127, 128, 129, 128, 130, 129, 126, 127, 125, 125, 128, 128, 129, 128, 130, 129, 129, 129, 127, 130, 129, 128, 127, 123, 125, 125, 127, 128, 130, 133, 127, 129, 128, 124, 125, 126, 127, 125, 128, 128, 127, 131, 131, 130, 128, 127, 127, 125, 126, 126, 127, 128, 128, 130, 128, 126, 125, 126, 124, 123, 126, 127, 128, 129, 130, 127, 128, 130, 130, 129, 125, 124, 122, 123, 128, 129, 133, 130, 134, 137, 130, 128, 127, 125, 124, 124, 124, 124, 130, 126, 125, 129, 130, 130, 129, 131, 129, 128, 129, 125, 126, 124, 123, 124, 126, 126, 126, 128, 128, 128, 129, 129, 130, 128, 129, 128, 128, 128, 127, 130, 129, 129, 128, 129, 131, 129, 128, 125, 123, 122, 122, 123, 124, 129, 129, 129, 130, 130, 131, 130, 129, 129, 127, 127, 125, 125, 126, 127, 127, 125, 125, 128, 130, 129, 129, 128, 128, 128, 127, 128, 127, 125, 126, 127, 128, 129, 129, 130, 130, 130, 130, 128, 127, 126, 125, 125, 125, 126, 127, 128, 129, 130, 131, 130, 129, 129, 129, 128, 126, 128, 127, 126, 124, 123, 125, 122, 123, 128, 132, 131, 128, 129, 128, 129, 125, 120, 125, 127, 129, 129, 131, 130, 130, 135, 131, 129, 129, 124, 124, 124, 123, 121, 124, 128, 127, 130, 130, 132, 132, 132, 129, 126, 126, 123, 126, 127, 126, 129, 129, 132, 130, 129, 129, 126, 128, 126, 125, 127, 129, 126, 122, 124, 125, 125, 128, 130, 128, 130, 134, 132, 132, 130, 125, 124, 125, 123, 119, 124, 126, 130, 135, 128, 128, 132, 132, 129, 125, 127, 121, 125, 129, 125, 129, 128, 128, 129, 129, 126, 121, 126, 124, 124, 127, 124, 127, 130, 131, 128, 128, 129, 127, 130, 130, 128, 130, 129, 130, 130, 131, 128, 127, 127, 125, 124, 122, 125, 127, 128, 128, 128, 129, 128, 131, 129, 127, 129, 127, 127, 127, 126, 126, 126, 129, 127, 128, 129, 127, 128, 126, 129, 130, 126, 124, 123, 125, 126, 128, 130, 129, 133, 132, 130, 131, 127, 125, 124, 122, 119, 118, 122, 126, 133, 134, 132, 134, 135, 133, 129, 125, 121, 120, 124, 123, 124, 127, 131, 134, 136, 133, 127, 126, 124, 123, 122, 122, 124, 127, 131, 133, 132, 131, 128, 129, 128, 127, 126, 126, 128, 130, 132, 128, 126, 127, 127, 128, 124, 123, 125, 129, 130, 129, 129, 128, 129, 128, 125, 124, 124, 125, 128, 130, 129, 128, 131, 132, 131, 129, 127, 124, 122, 124, 125, 127, 127, 128, 132, 133, 131, 128, 126, 124, 122, 123, 124, 127, 128, 132, 133, 130, 129, 127, 127, 127, 125, 125, 125, 129, 131, 132, 131, 128, 126, 123, 122, 121, 123, 126, 129, 133, 136, 135, 134, 133, 129, 125, 122, 119, 117, 120, 125, 127, 131, 134, 135, 135, 133, 129, 125, 122, 120, 120, 124, 126, 130, 132, 133, 136, 133, 130, 125, 123, 121, 119, 121, 123, 127, 130, 132, 135, 133, 130, 130, 128, 126, 125, 126, 125, 125, 127, 129, 129, 129, 129, 128, 129, 127, 126, 126, 126, 128, 128, 128, 128, 130, 129, 127, 128, 126, 127, 128, 125, 125, 124, 125, 126, 130, 131, 129, 132, 131, 130, 130, 128, 124, 119, 120, 121, 124, 125, 128, 133, 135, 136, 133, 130, 130, 125, 123, 120, 120, 122, 125, 129, 132, 134, 135, 133, 129, 126, 123, 119, 119, 123, 127, 132, 133, 133, 133, 132, 131, 128, 123, 121, 120, 122, 125, 128, 131, 134, 135, 134, 130, 126, 122, 119, 119, 121, 121, 124, 127, 131, 137, 137, 135, 133, 130, 128, 125, 123, 121, 121, 125, 127, 129, 130, 131, 131, 130, 129, 126, 125, 125, 124, 125, 128, 130, 129, 130, 131, 131, 131, 129, 125, 123, 124, 125, 126, 123, 124, 127, 131, 134, 131, 130, 129, 129, 130, 125, 124, 123, 123, 126, 128, 127, 124, 125, 129, 133, 132, 127, 128, 131, 132, 131, 126, 125, 125, 127, 128, 125, 124, 123, 128, 128, 126, 126, 127, 129, 131, 130, 127, 126, 128, 128, 128, 127, 128, 131, 131, 131, 129, 128, 127, 128, 128, 125, 124, 123, 124, 125, 126, 127, 128, 129, 130, 130, 129, 128, 128, 127, 127, 127, 127, 126, 128, 129, 129, 128, 127, 126, 126, 125, 125, 125, 129, 129, 130, 130, 130, 131, 128, 127, 125, 125, 128, 126, 127, 131, 132, 132, 129, 128, 126, 122, 122, 122, 122, 125, 127, 128, 132, 134, 133, 133, 131, 126, 124, 122, 120, 123, 124, 128, 131, 132, 134, 133, 130, 126, 124, 123, 121, 122, 123, 126, 129, 132, 134, 132, 130, 128, 126, 127, 126, 125, 127, 128, 130, 130, 127, 128, 129, 128, 126, 124, 124, 126, 129, 131, 131, 130, 129, 131, 129, 126, 124, 123, 124, 127, 129, 129, 128, 130, 131, 131, 126, 124, 123, 123, 125, 126, 126, 129, 132, 134, 133, 130, 127, 124, 123, 123, 121, 122, 126, 129, 133, 134, 132, 130, 130, 129, 125, 123, 122, 122, 126, 128, 129, 130, 132, 131, 131, 131, 128, 127, 125, 125, 127, 126, 128, 128, 130, 130, 129, 129, 126, 125, 126, 128, 128, 128, 128, 128, 129, 129, 129, 126, 124, 125, 125, 126, 126, 126, 129, 131, 131, 128, 127, 127, 126, 124, 124, 126, 124, 125, 129, 131, 132, 131, 132, 131, 130, 128, 125, 124, 123, 124, 125, 126, 128, 130, 132, 131, 130, 128, 127, 127, 126, 127, 126, 127, 129, 129, 130, 130, 130, 127, 125, 125, 123, 123, 123, 126, 127, 128, 131, 132, 131, 129, 127, 127, 125, 124, 123, 123, 125, 130, 132, 131, 131, 130, 129, 128, 126, 124, 124, 125, 126, 127, 129, 130, 131, 131, 130, 129, 129, 127, 124, 125, 126, 127, 129, 129, 130, 130, 129, 127, 126, 126, 126, 126, 125, 126, 127, 128, 129, 129, 129, 128, 128, 127, 127, 127, 127, 127, 128, 128, 129, 128, 127, 128, 128, 128, 126, 126, 127, 128, 128, 127, 127, 128, 127, 128, 128, 128, 127, 127, 128, 130, 130, 128, 128, 130, 131, 129, 127, 128, 127, 127, 127, 125, 126, 127, 127, 127, 127, 126, 127, 128, 126, 127, 128, 127, 129, 128, 128, 128, 129, 129, 128, 128, 127, 127, 127, 127, 128, 128, 128, 128, 127, 126, 126, 127, 126, 125, 126, 127, 127, 127, 128, 128, 128, 128, 126, 127, 127, 128, 128, 128, 129, 129, 129, 129, 128, 129, 129, 128, 128, 127, 127, 127, 126, 127, 127, 126, 128, 128, 128, 127, 128, 127, 126, 127, 126, 127, 126, 126, 127, 126, 127, 127, 127, 128, 127, 127, 126, 126, 127, 126, 127, 128, 128, 127, 128, 128, 129, 129, 128, 127, 128, 128, 128, 128, 128, 127, 128, 128, 129, 129, 129, 130, 129, 129, 128, 128, 127, 126, 127, 126, 127, 129, 128, 128, 128, 127, 126, 126, 127, 127, 127, 126, 127, 127, 128, 129, 128, 128, 128, 128, 128, 127, 127, 127, 126, 127, 127, 127, 127, 127, 127, 128, 127, 127, 126, 127, 128, 127, 128, 128, 128, 129, 128, 128, 129, 129, 129, 129, 128, 127, 127, 127, 128, 128, 127, 127, 127, 127, 127, 127, 127, 126, 127, 127, 127, 127, 128, 128, 128, 129, 130, 129, 129, 129, 130, 130, 128, 128, 128, 127, 127, 128, 127, 126, 127, 127, 127, 127, 127, 128, 128, 127, 126, 126, 126, 126, 125, 125, 125, 126, 126, 126, 126, 126, 126, 127, 128, 127, 127, 127, 127, 127, 128, 129, 129, 128, 128, 128, 128, 127, 128, 128, 128, 128, 128, 128, 128, 128, 128, 127, 128, 127, 127, 128, 128, 128, 128, 127, 128, 128, 128, 128, 127, 127, 127, 128, 128, 128, 128, 128, 127, 127, 127, 127, 127, 127, 127, 127, 128, 127, 127, 128, 128, 128, 128, 128, 128, 128, 127, 127, 127, 128, 127, 127, 127, 127, 127, 127, 127, 127, 127, 128, 128, 128, 127, 127, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 127, 128, 128, 128, 128, 128, 128, 128, 128, 128, 127, 128, 128, 128, 128, 127, 128, 128, 128, 128, 127, 127, 128, 128, 127, 127, 127, 127, 128, 127, 127, 127, 127, 127, 127, 127, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 127, 127, 128, 128, 128, 128, 128, 128, 128, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 128, 127, 127, 127, 127, 127, 127, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 127, 128, 128, 128, 128, 128, 128, 127, 127, 127, 128, 128, 128, 128, 128, 128, 128, 128, 128, 127, 128, 128, 128, 127, 128, 128, 128, 128, 127, 128, 128, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 128, 127, 128, 128, 128, 128, 128, 128, 128, 127, 127, 128, 128, 128, 128, 128, 128, 128, 128, 128, 127, 128, 128, 127, 127, 128, 128, 128, 128, 127, 128, 127, 127, 127, 127, 128, 128, 127, 128, 128, 127, 127, 127, 127, 127, 128, 127, 127, 127, 128, 128, 128, 127, 128, 128, 128, 127, 128, 127, 127, 127, 127, 127, 128, 127, 127, 128, 127, 127, 128, 128, 128, 128, 128, 127, 128, 128, 128, 127, 127, 128, 128, 128, 128, 127, 127, 128, 127, 128, 128, 127, 127, 127, 127, 127, 127, 128, 128, 128, 128, 127, 127, 127, 128, 128, 127, 128, 127, 127, 127, 127, 128, 127, 128, 127, 127, 127, 127, 127, 128, 127, 127, 127, 127, 127, 128, 128, 128, 127, 127, 127, 128, 127, 127, 127, 127, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 127, 127, 127, 128, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 128, 128, 127, 128, 127, 127, 128, 128, 127, 127, 127, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 127, 128, 128, 127, 128, 127, 127, 127, 127, 127, 128, 127, 127, 128, 127, 127, 127, 127, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 127, 127, 127, 127, 127, 127, 127, 127, 128, 128, 127, 127, 128, 127, 127, 128, 127, 127, 127, 127, 127, 128, 128, 128, 128, 128, 128, 128, 128, 128, 
};


//Define for servo
Servo myservo;
int pos = 0;

//Function for servo movement
void servo(){
  for (pos = 60; pos <= 180; pos += 1) { // goes from 60 degrees to 180 degrees with increment of 1
    myservo.write(pos);              // tell servo to go to position in variable 'pos'
    delay(10);                       // waits 10 ms for the servo to reach the position
  }
  for (pos = 180; pos >= 60; pos -= 1) { // goes from 180 degrees to 60 degrees with decrement of 1
    myservo.write(pos);              // tell servo to go to position in variable 'pos'
    delay(10);                       // waits 10 ms for the servo to reach the position
  }
  for (pos = 60; pos <= 180; pos += 1) { // goes from 60 degrees to 180 degrees with increment of 1
    myservo.write(pos);              // tell servo to go to position in variable 'pos'
    delay(10);                       // waits 10 ms for the servo to reach the position
  }
  for (pos = 180; pos >= 60; pos -= 1) { // goes from 180 degrees to 60 degrees with decrement of 1
    myservo.write(pos);              // tell servo to go to position in variable 'pos'
    delay(10);                       // waits 10 ms for the servo to reach the position
  }
  for (pos = 60; pos <= 180; pos += 1) { // goes from 60 degrees to 180 degrees with increment of 1
    myservo.write(pos);              // tell servo to go to position in variable 'pos'
    delay(10);                       // waits 10 ms for the servo to reach the position
  }
  for (pos = 180; pos >= 60; pos -= 1) { // goes from 180 degrees to 60 degrees with decrement of 1
    myservo.write(pos);              // tell servo to go to position in variable 'pos'
    delay(10);                       // waits 10 ms for the servo to reach the position
  }
}

void setup() {
  //Wave in the beginning as a welcome gesture
  servo();

  // initialize the LCD ----------------------->
  lcd.begin();

  // Turn on the blacklight and print a message.
  lcd.backlight();
  lcd.print("SCAN YOUR KEYCARD");
  lcd.clear();
  SPI.begin();
  //RFID start
  mfrc522.PCD_Init();
  //Output the leds
  pinMode(LED_G, OUTPUT);
  pinMode(LED_R, OUTPUT);
  pinMode(LED_G2, OUTPUT);
  pinMode(LED_R2, OUTPUT);
  //Attach the servo to pin 6
  myservo.attach(6);
}

void loop() {
  // Clear the LCD and print "Scan your keycard" and clear it to initialise the process
  lcd.clear();
  lcd.print("SCAN YOUR KEYCARD");
  delay(1000);
  lcd.clear();

  // Looking for new cards, if not return nothing
  if (!mfrc522.PICC_IsNewCardPresent()) {
    return;
  }
  // Select one of the cards, if not return nothing
  if (!mfrc522.PICC_ReadCardSerial()) {
    return;
  }
  //Initialise variable content to take in the serial read by the RFID tag
  String content = "";
  byte letter;
  //Reading in the data and concatenate the serial to the content variable declared above
  for (byte i = 0; i < mfrc522.uid.size; i++) {
    content.concat(String(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " "));
    content.concat(String(mfrc522.uid.uidByte[i], HEX));
  }
  //Set the serial read in to uppercase to avoid complication with casing
  content.toUpperCase();

  //If the content serial read by the RFID matches the pre-recorded card UID
  if (content.substring(1) == "53 61 7B 19") {
    //LCD screen prints out the custom welcome message
    lcd.print("WELCOME BACK ZAYNA");
    //Both leds in the eyes turn green
    digitalWrite(LED_G, HIGH);
    digitalWrite(LED_G2, HIGH);
    delay(2000);
    //The wave movement in the arm using the servo
    servo();
    delay(2000);
    //Remove the welcome message
    lcd.clear();
    //Turn off the green in the RGB leds in the eyes
    digitalWrite(LED_G, LOW);
    digitalWrite(LED_G2, LOW);
  }
  //If RFID tag read serial different than the preset one
  else {
    //LCD screen prints out hostile and offensive message
    lcd.print("GO AWAY SOLE");
    //Guard monkey daunting red eyes turn off
    digitalWrite(LED_R, HIGH);
    digitalWrite(LED_R2, HIGH);
    //The intimidating barking sets off from the speaker
    playback(barking, sizeof(barking));
    delay(2000);
    //Remove message from the LCD screen
    lcd.clear();
    //Turn the leds back off
    digitalWrite(LED_R, LOW);
    digitalWrite(LED_R2, LOW);
  }
}

TESTING AND SHORTCOMINGS

We aimed to recycle as many components as possible. After managing to find an LCD, distance sensor, motion sensor, speaker, and servos, we trialled each component individually. None of the components could be used as they were either faulty or broken, other than a few servos. After buying the components we could not get working from our recycled parts, we tested them individually and found the speak was far too quiet, this was resolved by adding a transistor and changing the speaker library. However, the speaker and servo were unable to work at the same time due to their interfering serial libraries, this resulted in a processing error with each component cross obstructing one another. Changing the libraries used for the speaker along with the library files to pin 3 instead of pin 11, as it was used by the RFID module MOSI cleared the processing error.

When trialling the components using the 9V battery, we found it had too low a voltage to charge the sensors and actuators in the circuit.

We encountered problems due to the bear being inaccessible internally without being unstitched, as this meant we were unable to access the wires and components inside the bear after we attached them in place and put the bear back together. Soldering initially lead to unsecure connections, so we added a zip to the bear to allow easy access to ensure we could resolve any connectivity issues if they were to potentially occur.  Connection issues also occurred due to components being surrounded by stuffing, so a casing was made to cover the breadboard to ensure no stuffing got into the wiring so as to also avoid any possible fire hazards if any components were to overheat near the stuffing in the bear.

Group 8: Lights, Timer, Action!

Introduction

This project is a game intended to entertain users while also testing their reactions. The game measures the user’s reactions over the course of four rounds before creating an averaged result to provide the user with. The game was designed with an emphasis on fun rather than to test, and can be played by teenagers and adults.

Read more “Group 8: Lights, Timer, Action!”

VIOLED GROUP 7

viologo

By Alara, Ideen, Martin, and Frank

Group 7

Phase One: Ideation and Planning

Brief:

We were asked to design a violin based on similar principles using components such as linear potentiometers and possibly amplifiers but also to take it a step further to interact with the user and provide feedback on the quality of the performance through simple interfaces.

Read more “VIOLED GROUP 7”

Group 1: How Fast Is Your Reaction?

 

finishedbreadboard

We were tasked with creating a game that would test a user’s reaction speed. In order to do this, we implemented a game that resembles a Bop-It, which requires a user to complete one of a set number of tasks randomly within a given time constraint. Our game starts the user off with three lives, on the first of three levels. Based on how quickly the user is able to progress through all three levels without missing any components, their final ‘score’ (which will be displayed using an RGB light) will be either Green, Yellow, or Red.
Read more “Group 1: How Fast Is Your Reaction?”

Group 6: Your Own Loving Teddy Bear

img_3548

“Imagine entering your home and your Teddy Bear greeting you with a welcoming message or with lighting up eyes. Also, it will be great if the Teddy Bear is not so welcoming to other members in the house (just for fun!). For this, you are encouraged to use an RFID tag and reader with a choice of tags, one of them being your own, hence the Teddy realising it is you and delivering a friendly message! You need to use at least one other tag that is not yours and hence delivering unwelcoming messaged and red eyes! Remember, you do not need to use a real Teddy Bear but you can use other prototyping options.”

Read more “Group 6: Your Own Loving Teddy Bear”

Dance Your Cares Away Group 1

Dance Your Cares Away: 

Our brief is to create an “E-Textile” (t-shirt, bag, skirt, etc) with interactive LED’s that can be set to either flash to the beats of the music or the movement of the wearer. For our group, our main focus is finding a way to make this product stand out and function in a way where movement can change or alter the main output, and an additional output.

 

final-logo-text Read more “Dance Your Cares Away Group 1”