1

Remove drafts

This commit is contained in:
Evan Pratten 2020-07-20 16:11:20 -04:00
parent 07fbb140bd
commit 4b2a9621fa
No known key found for this signature in database
GPG Key ID: 93AC7B3D071356D3
26 changed files with 5 additions and 954 deletions

View File

@ -1,40 +0,0 @@
{
"featured": {
"name": "DeepSpace Offseason Codebase",
"description": "This is the code behind <a href='https://frc5024.github.io'>@frc5024</a>'s robot for the 2019 offseason. I have spent a large amount of my free time adding every feature that I wished we had during the season as a way to familiarize myself with the WPIlib Java API.",
"url": "https://github.com/frc5024/DeepSpace-SWI",
"image": "https://i.ytimg.com/vi/aifZLWQ_N7U/maxresdefault.jpg"
},
"other": {
"rows": [
[
{
"name": "ThriftyField",
"description": "ThriftyField is an open source replacement for the FIRST FMS software. This tool allows mass control over robots, along with real-time scoring and an audience display.",
"url": "https://github.com/frc5024/ThriftyField",
"image": ""
},
{
"name": "DevDNS",
"description": "DevDNS is a <a href='https://devrant.com/'>devRant</a> bot for resolving DNS queries send via devRants comments system.",
"url": "https://github.com/Ewpratten/devDNS",
"image": ""
}
],
[
{
"name": "Dirobium",
"description": "Dirobium is a fantasy CPU emulator that I built to teach myself basic low-level programming",
"url": "https://github.com/Ewpratten/Dirobium",
"image": ""
},
{
"name": "devCredits",
"description": "My first community project, a tool help people credit contributors on their devRant community projects",
"url": "https://github.com/Ewpratten/devCredits",
"image": ""
}
]
]
}
}

View File

@ -1,29 +0,0 @@
---
layout: post
title: "Building a safe and easy system for sending computer vision data from a raspberry pi to a roborio"
date: 2019-05-27 09:22:00+0000
categories: frc
---
Computer vision on an FRC robot has some problems.
- RoboRIO is not powerfull enough
- NetworkTables is not fast enough
- A TCP connection is great until you lose connection
- mDNS discovery is not reliable on the field
- UDP can skip frames
## Needs
These are the things I need to have.
- Send data from any device
- Recive data on RoboRIO at any time
- Data rate faster than period time
## Wants
These are the things I would like to have.
- Easy discovery
- Threaded
- Simple interface for new programmers
- Fallback in case of UDP issues
- FMS network firewall compliant
I am currently working on a protocol for solving this problem, nad will post an update here once it has been tested. Feel free to let me know your thoughts and ideas.

View File

@ -1,20 +0,0 @@
---
layout: post
title: "I made a new song!"
description: "Releasing a new song with friends at school"
date: 2019-06-17 10:20:00
categories: music
---
I am currently taking a class in school called [Music and computers (AMM2M)](https://www.facebook.com/studio225beal/), where as part of the class, whe get together into bands, and produce a song. After taking a break from music production for over a year, we have released our song for the class (we do two songs, but the second is not finished yet).
## My contribution
My main contribution to the project was a mix of live drumming, and most of the song's MIDI work. The song is far from perfect, but pretty good for the time we had to produce it.
## Just give me the song!
Ok. Ok. Here is the song:
<audio controls>
<source src="/assets/audio/SpamPhoneCalls.mp3" type="audio/mpeg">
Your browser does not support audio players
</audio>

View File

@ -1,46 +0,0 @@
---
layout: post
title: "I had some fun with a router"
description: "cleartext passwords + external management = death wish"
date: 2019-06-27 17:16:00
categories: projects
tag: projects
---
I was playing around with some D-link routers today and remembered an [ExploitDB Entry](https://www.exploit-db.com/exploits/33520) I read a while ago. Many D-link routers have a great feature that allows remote management and configuration queries. Interestingly, this cannot be disabled, and one of the pages contains a cleartext version of the admin password (yay!).
## How to get yourself an admin password
On any supported router, make an HTTP request to `http://your.router.ip.addr/tools_admin.asp/`. This will return a pretty large XML file containing information about your router's hardware and configuration.
Notice the fact that you did not have to log in. This is due to the fact that this file seems to be used by a remote management service of some sort.
The important thing to note here is that, when parsed with the regex pattern: `name="user_password_tmp" value="(.*)">`, you get a single string. This string is the admin password of the device.
## Supported routers
This is supported by many D-link routers. The ones I know about are:
- DIR-835
- DIR-855L
- DGL-5500
Some routers have this XML file, but it is restricted... By a user without a password. These are:
- DHP-1565
- DIR-652
## PWNlink
Like everything I play with, I made a script to do this all for me (and spent a large amount of time adding colours to the text).
My script is called PWNlink (PWN + D-link), It automatically finds a router on your network by looking for a specific DNS entry created by many D-link routers, then checking your gateway. Next, PWNlink reads you router's `hnap1` config to find it's model number. If supported, the script will read and parse the appropriate configs to give you the admin credentials for your router.
PWNlink can be installed on any *nix computer that has both `python3.7` and `python3-pip` installed. To install PWNlink, run:
```
pip3 install pwnlink
```
Run the script without any arguments for automatic detection, or pass any IP address to use manual detection.
## Disclamier thingy
I don't see much point to these, but I should probably put one anyways.
**Don't be dumb with this script.**
I have only used it on my own (or 5024's) routers, and did not create PWNlink with any malicious intent.

View File

@ -1,42 +0,0 @@
---
layout: post
title: "Project In 3 Days: 1 year recap"
description: "The never ending stream of projects"
date: 2019-07-08 18:22:00
categories: projects
---
## What is PI3D?
Project In 3 Days (PI3D) is a project I started in July of 2018 (1 year ago). The goal was simple:
- Start a project
- Finish it within the next three days
- Take a two or three day break
- Repeat
## Why?
I started PI3D because I had a large number of small ideas that I wanted to try out, but did not want feel the need to continue supporting said projects in the long term.
PI3D quickly became a great learning tool for me, and I rapidly improved my prototyping, research, efficiency, and programming skills. I get many comments from other people I work with about how quickly I take an idea and turn it into a program, a skill which I can confidently attribute to the time spent working on my PI3D projects.
At this point, I would not be surprised if I am more fluent in Python than English.
## My favorite projects
Here are the projects I enjoyed working on and using the most:
- [ThriftyField](https://github.com/frc5024/ThriftyField)
- [Dirobium](https://github.com/Ewpratten/Dirobium)
- [DevDNS](https://github.com/Ewpratten/devDNS)
- [PWNLink](https://github.com/Ewpratten/PWNlink)
- [BashSmash](https://github.com/Ewpratten/BashSmash)
- [FlippyCat](https://github.com/Ewpratten/FlippyCat)
- [Give Me A Distro](https://retrylife.ca/gmad/)
## Things I have learned
## The downside
## What's next?
- Counter
- project badge
- other people?
## Will I keep doing PI3D?

View File

@ -1,16 +0,0 @@
---
layout: post
title: "My new email setup"
description: "It's finally <em>almost</em> fixed!"
date: 2019-08-01 17:53:00
categories: email configuration
---
Over the past year, I have been having issues with my retrylife.ca email addresses, but have finally fixed them. This post is mostly a reminder to myself for the next time I have to do this.
## DNS settings
## Setting up with Gmail
## Improvements
To finish this up, Im looking to add catch-all, and suffix support to my email addresses. This would allow me to do something like: send all email from snapchat to `spam+snapchat@__domain__.ca`.

View File

@ -1,9 +0,0 @@
---
layout: post
title: "Never roll your own crypto!"
description: "My thoughts on this statement"
date: 2019-08-25 22:36:00
categories: random
---
https://security.stackexchange.com/questions/62699/what-if-i-develop-my-own-hash-algorithm-to-create-strong-passwords-from-easy-one

View File

@ -1,9 +0,0 @@
---
layout: post
title: "What the fstring?" #"PEP 498: Literal String Interpolation"
description: "Every language should have this feature"
date: 2019-09-09 14:09:00
categories: python
---
If you haven't notices by now, I love Python.

View File

@ -1,44 +0,0 @@
---
layout: post
title: "I want to build a satellite"
description: "For under $100"
date: 2019-09-19 21:13:00
categories: idea
redirect_from:
- /post/e9gb3490/
- /e9gb3490/
---
I like learning and trying new things. Most recently, I have been working with radios, and have obtained a licence to operate some [RPAs](https://en.wikipedia.org/wiki/Unmanned_aerial_vehicle). So, obviously the next step is *space*, right? As I am entering this with near 0 experience, I'm going to start simple.
## Design
My first satellite project (named [Spike](https://github.com/Ewpratten/Spike)) is designed to do the following:
- Be deployed in [LEO](https://en.wikipedia.org/wiki/Low_Earth_orbit) by a [cubesat launcher](https://en.wikipedia.org/wiki/CubeSat#Launch_and_deployment)
- Be solar powered
- 24/7 data is not required, so the device may go dark
- I may look into an on-board [LCB](https://en.wikipedia.org/wiki/Solid-state_battery) for night operation
- Record temperature, and light levels
- Stream data down to earth
- Burn up in the atmosphere
I am currently working with the following parts to build a grounded test device.
- [Arduino pro mini](https://www.ebay.com/itm/New-Pro-Micro-ATmega32U4-5V-16MHz-Replace-ATmega328-Arduino-Pro-Mini-/221891843710)
- [315mhz transmitter](https://www.sparkfun.com/products/10535) (This will be replaced)
- [A photocell](https://www.sparkfun.com/products/9088)
- [A TMP102 sensor](https://www.sparkfun.com/products/13314)
My goal for the grounded test device is for it to survive ~14 weeks of un-attended operation, and some temperature tests.
## Current progress
Currently, My testing setup consists of the following components that I had lying around:
- Arduino pro mini
- Photocell
- [lm35 sensor](http://www.ti.com/product/LM35)
- Buzzer (To emulate a radio)
![Current Test Board](/assets/images/satv1.jpg)
The board has been "transmitting" telemetry data for over a week now, and is operating as expected.
## Project on hold
I am currently waiting for [SparkFun](https://www.sparkfun.com/) to send me some new components to work with.. A new post will come eventually.

View File

@ -1,27 +0,0 @@
---
layout: post
title: "5024's first offseason event of 2019"
description: "A 120lb headless chicken that doesn't understand the word \"stop\""
date: 2019-09-28 24:00:00
categories: frc recap
redirect_from:
- /post/e9g9d6s90/
- /e9g9d6s90/
---
<!-- One of these days I should add a blog-like section to the [5024 Programming Team's website]()... -->
*Before we start, I will point out that the content of this post does not reflect the views of [5024](https://www.thebluealliance.com/team/5024), or the [programming team](https://frc5024.github.io/).*
*My views, my opinions, my website.*
This weekend, a few of us brought our robot down to [team 4525](https://www.thebluealliance.com/team/4525)'s yearly community robotics showcase / outreach event. We had a lot of fun, and this post will outline some things I learned while working with the bot, and some problems we encountered while competing.
<blockquote class="twitter-tweet" data-dnt="true"><p lang="en" dir="ltr">The robots are painting! The robots are painting! Upstairs at the <a href="https://twitter.com/CoventMarket?ref_src=twsrc%5Etfw">@CoventMarket</a> in <a href="https://twitter.com/hashtag/ldnont?src=hash&amp;ref_src=twsrc%5Etfw">#ldnont</a> come see the spectacle that is <a href="https://twitter.com/hashtag/FIRSTrobotics?src=hash&amp;ref_src=twsrc%5Etfw">#FIRSTrobotics</a> + <a href="https://twitter.com/ONCultureDays?ref_src=twsrc%5Etfw">@ONCultureDays</a> until 2pm!!! <a href="https://twitter.com/hashtag/techartfusion?src=hash&amp;ref_src=twsrc%5Etfw">#techartfusion</a> <a href="https://twitter.com/hashtag/omgrobots?src=hash&amp;ref_src=twsrc%5Etfw">#omgrobots</a> <a href="https://twitter.com/hashtag/artmeetstech?src=hash&amp;ref_src=twsrc%5Etfw">#artmeetstech</a> <a href="https://twitter.com/hashtag/creativekids?src=hash&amp;ref_src=twsrc%5Etfw">#creativekids</a> <a href="https://twitter.com/CANFIRST?ref_src=twsrc%5Etfw">@CANFIRST</a> <a href="https://t.co/VVdgXES9Gt">pic.twitter.com/VVdgXES9Gt</a></p>&mdash; Renaissance Robotics (@4525FRC) <a href="https://twitter.com/4525FRC/status/1177967036410073088?ref_src=twsrc%5Etfw">September 28, 2019</a></blockquote>
## Robot issues
### Wifi
### Always test code before deployment
## Preparing for our next event

View File

@ -1,32 +0,0 @@
---
layout: post
title: "Turning a web IDE into a disposable linux environment"
description: "My Python code keeps popping shells"
date: 2019-11-09 24:00:00
categories: random
redirect_from:
- /post/e9g9dfs90/
- /e9g9dfs90/
---
## Getting a token
Layer1
```
ZXlKamNtVmhkR1ZrSWpveE5UY3pOVEV5TVRJM09EYzNMQ0p6WVd4MElqb2libmw1YTJGelpEQmtlR1VpTENKdVpYUWlPblJ5ZFdVc0ltbGtJam9pTWpReE1UWTNPV0l0TnpnNFpTMDBaRFl5TFRnMU0ySXRORGt4WVdNeU1tUmhaall6SWl3aWNHRjBhQ0k2SWxOMFpXVnNZbXgxWlV0b1lXdHBRMnhoYzNObGN5SXNJbTkzYm1WeUlqcDBjblZsTENKc1lXNW5kV0ZuWlNJNkluQjVkR2h2YmpNaUxDSjFjMlZ5SWpvaVptbDJaUzF1YVc1bElpd2lZblZqYTJWMElqb2ljbVZ3YkdsMExYSmxjR3h6SWl3aWNIVnNiRVpwYkdWeklqcDBjblZsTENKd2IyeDVaMjkwZENJNlptRnNjMlVzSW1GMGRHRmphQ0k2ZEhKMVpTd2labTl5YldGMElqb2ljR0oxWmlJc0ltWnNZV2R6SWpwN2ZYMD06Tk5aRVFFSGErSXU5RHU1TUZUblNDODFTT2docFN2WUc4bkwrcTFKSXB4cz0=
```
Layer2
```
eyJjcmVhdGVkIjoxNTczNTEyMTI3ODc3LCJzYWx0Ijoibnl5a2FzZDBkeGUiLCJuZXQiOnRydWUsImlkIjoiMjQxMTY3OWItNzg4ZS00ZDYyLTg1M2ItNDkxYWMyMmRhZjYzIiwicGF0aCI6IlN0ZWVsYmx1ZUtoYWtpQ2xhc3NlcyIsIm93bmVyIjp0cnVlLCJsYW5ndWFnZSI6InB5dGhvbjMiLCJ1c2VyIjoiZml2ZS1uaW5lIiwiYnVja2V0IjoicmVwbGl0LXJlcGxzIiwicHVsbEZpbGVzIjp0cnVlLCJwb2x5Z290dCI6ZmFsc2UsImF0dGFjaCI6dHJ1ZSwiZm9ybWF0IjoicGJ1ZiIsImZsYWdzIjp7fX0=:NNZEQEHa+Iu9Du5MFTnSC81SOghpSvYG8nL+q1JIpxs=
```
output
```
{"created":1573512127877,"salt":"nyykasd0dxe","net":true,"id":"2411679b-788e-4d62-853b-491ac22daf63","path":"SteelblueKhakiClasses","owner":true,"language":"python3","user":"five-nine","bucket":"replit-repls","pullFiles":true,"polygott":false,"attach":true,"format":"pbuf","flags":{}}
5v"CNtTR)
```
- double Base64 encoded (ASCII)

View File

@ -1,25 +0,0 @@
---
layout: post
title: "Notes from the 2020 FRC preseason"
description: "A little kid ran over my foot with a robot"
date: 2019-12-02 21:44:00
categories: frc
redirect_from:
- /post/vcd99dfs90/
- /vcd99dfs90/
---
As we near 2020 kickoff, I should probably make note of the things I have done with FRC team [5024]() throughout the offseason. So, here are said notes.
## New members
## New language(s)
## Computer vision
## Team management
### GitHub Projects
### GitHub Issues

View File

@ -1,54 +0,0 @@
---
layout: post
title: "Graphical drivebase simulation for FRC robots"
description: "Showcasing part of the frc5024 codebase"
date: 2020-01-07 22:13:00
categories: frc
redirect_from:
- /post/vcv4101s90/
- /vcv4101s90/
---
The 2020 FRC season has kicked off, and the @frc5024 software team is already hard at work developing the software that will power this year's robot. Throughout the season, I'm hoping to showcase cool things we work on.
Today, I built a little tool to provide a graphical simulation of our robot's drivebase in 2D space. This post will outline how I did it.
## Robot simulation
As our code is developed with [WPILib](https://github.com/wpilibsuite/allwpilib), we make use of [HALSIM](https://github.com/wpilibsuite/allwpilib/tree/master/simulation/halsim_gui) to test out code before pushing to real hardware. This tool is great for checking for null pointer exceptions, and ensuring telemetry data is correctly pushed, but has some limitations. Mainly, we use a fair amount of un-supported hardware, and our own robotics library does not integrate with WPILib's "Sendable" system.
### Faking HAL device support
To give HALSIM support to our custom devices, we use WPILib's [SimDevice](https://github.com/wpilibsuite/allwpilib/blob/master/hal/src/main/java/edu/wpi/first/hal/SimDevice.java) wrapper. @PeterJohnson explained to me how to do this [in this thread](https://www.chiefdelphi.com/t/ctre-halsim/370106/2?u=ewpratten).
### Simulating sensors
For drivebase simulation, we need to simulate two devices. Our [encoders](https://www.usdigital.com/products/encoders/incremental/kit/E4T), and our [gyroscope](https://pdocs.kauailabs.com/navx-mxp/). Neither of these devices have HALSIM support, so I added my own [[1](https://github.com/frc5024/InfiniteRecharge/commit/837e9f571a03917c72b2df83d4e19650bab4ad66)] [[2](https://github.com/frc5024/InfiniteRecharge/commit/78c501a4bbaeee1d05e95a3c1ba07a897bc78a80)].
Now that the device I/O has been simulated, we need to simulate sensor readings.
#### Encoders
Encoder readings can be estimated, assuming we know these properties:
- Current motor speed (percent output)
- Max motor speed (RPM)
- Encoder Pulses per Revolution
- Gearing ratio between simulated motor and sensor
Inside a quickly-updating loop, I used this pseudocode to determine the reading for an encoder:
```java
double current_time = getSeconds();
double dt = current_time - last_time;
last_time = current_time;
double rpm = (getMotorSpeed() * max_rpm) / gearbox_ratio;
double revs = (rpm / 60.0) * dt;
encoder_ticks += (revs * tpr);
```
#### Gyroscope

View File

@ -1,89 +0,0 @@
---
layout: post
title: "Interpolating motor control commands from Dart data"
description: "And other weird things to do with XY datasets"
date: 2020-01-14 20:13:00
categories: frc data
redirect_from:
- /post/eb3v140d/
- /eb3v140d/
---
At some FRC events, [ZEBRA Technologies](https://www.zebra.com/us/en.html) places dart trackers for their [MotionWorks](https://www.zebra.com/us/en/solutions/intelligent-edge-solutions/rtls.html) system on robots. They then provide real-time motion tracking data for all bots on the field. I got my hands on a few data archives from various events in 2019 that used the darts. Here is a little post about what I have been able to do with this data.
## The data
For this post, I will be working with data from [Chezy Champs 2019](https://chezychamps.com/). I recived the tracking data in the following CSV format:
```csv
X position (Feet), Y position (Feet), UNIX epoch time (UTC)
```
## Data analysis
I wrote a little parser that converts the CSV data to pose data. A pose is a vector containing the following field-absolute components:
```c++
struct Pose {
double x;
double y;
double theta;
}
```
While we are at it, Ill define a "Transpose", which is like a pose, but relative to other poses, and a "ChassisSpeed" vector:
```c++
struct ChassisSpeed {
double left;
double right;
}
class Transpose {
private:
double x;
double y;
double theta;
public:
ChassisSpeed fromTranspose();
}
```
### Converting a difference to a Transpose
The only data we can directly read from the Dart data is poses over time (all poses have an angle of 0 degrees). To convert these to Transposes, we need to do a little math. Basically, we can take two poses, then calculate their differences:
```python
# Find the differences in coords
dx: float = now.x - last.x
dy: float = now.y - last.y
# Calculate a heading from translation
theta: float = atan2(dx, dy)
```
Now, with this data, we can build a Transpose out of any pair of data points.
### Converting a transpose to a ChassisSpeed
To be completely honest, I originally had no idea what I was going to use this data for, but ended up deciding to try to reconstruct motor data from the position data. This is just a form of [Inverse Kinematics](https://en.wikipedia.org/wiki/Inverse_kinematics).
To do this, all we need is a little math:
```java
ChassisSpeed fromTranspose(){
double delta = TRACK_WIDTH * this.theta / 2 * 1.0469745223;
return (new ChassisSpeed(this.x - deltaV, this.x + deltaV);
}
```
This will calculate the heading difference between 0,0 and the transpose, then apply that to the X vector as a wheel velocity. `TRACK_WIDTH` is the width of the robot drivebase in inches (I used `25.4` because that is team [254](https://www.thebluealliance.com/team/254)'s track width)
#### Chassis speeds over time
Here is a little graph of the calculated chassis speeds over time. (Keeping in mind that inaccuracies in the Dart system cause some "drift")
![Chassis Speeds](/assets/images/chassis-speeds.png)
### Extrapolating further

View File

@ -1,12 +0,0 @@
---
layout: post
title: "A small introduction to drivebase kinematics"
description: "Using a 4 century old technique to tell a robot where it is"
date: 2020-02-12 20:12:00
categories: frc
redirect_from:
- /post/eb3sdf9d/
- /eb3sdf9d/
---
In my work with @frc5024's robots, I have been spending a lot of time with drivebase kinematics.

View File

@ -1,399 +0,0 @@
---
layout: post
title: "The Coronavirus source code"
description: "Compile yourself an unstoppable virus from under 8KB of source"
date: 2020-03-01 10:57:00
categories: random
redirect_from:
- /post/eb3cvo9d/
- /eb3cvo9d/
---
## Features
- Remote exploitation
- Persistance
- Cross-platform
## Source
Here it is, the official leaked Coronavirus source code:
```
attaaaggtttataccttcccaggtaacaaaccaaccaactttcgatctcttgtagatctgttctctaaacgaactttaa
aatctgtgtggctgtcactcggctgcatgcttagtgcactcacgcagtataattaataactaattactgtcgttgacagg
acacgagtaactcgtctatcttctgcaggctgcttacggtttcgtccgtgttgcagccgatcatcagcacatctaggttt
cgtccgggtgtgaccgaaaggtaagatggagagccttgtccctggtttcaacgagaaaacacacgtccaactcagtttgc
ctgttttacaggttcgcgacgtgctcgtacgtggctttggagactccgtggaggaggtcttatcagaggcacgtcaacat
cttaaagatggcacttgtggcttagtagaagttgaaaaaggcgttttgcctcaacttgaacagccctatgtgttcatcaa
acgttcggatgctcgaactgcacctcatggtcatgttatggttgagctggtagcagaactcgaaggcattcagtacggtc
gtagtggtgagacacttggtgtccttgtccctcatgtgggcgaaataccagtggcttaccgcaaggttcttcttcgtaag
aacggtaataaaggagctggtggccatagttacggcgccgatctaaagtcatttgacttaggcgacgagcttggcactga
tccttatgaagattttcaagaaaactggaacactaaacatagcagtggtgttacccgtgaactcatgcgtgagcttaacg
gaggggcatacactcgctatgtcgataacaacttctgtggccctgatggctaccctcttgagtgcattaaagaccttcta
gcacgtgctggtaaagcttcatgcactttgtccgaacaactggactttattgacactaagaggggtgtatactgctgccg
tgaacatgagcatgaaattgcttggtacacggaacgttctgaaaagagctatgaattgcagacaccttttgaaattaaat
tggcaaagaaatttgacaccttcaatggggaatgtccaaattttgtatttcccttaaattccataatcaagactattcaa
ccaagggttgaaaagaaaaagcttgatggctttatgggtagaattcgatctgtctatccagttgcgtcaccaaatgaatg
caaccaaatgtgcctttcaactctcatgaagtgtgatcattgtggtgaaacttcatggcagacgggcgattttgttaaag
ccacttgcgaattttgtggcactgagaatttgactaaagaaggtgccactacttgtggttacttaccccaaaatgctgtt
gttaaaatttattgtccagcatgtcacaattcagaagtaggacctgagcatagtcttgccgaataccataatgaatctgg
cttgaaaaccattcttcgtaagggtggtcgcactattgcctttggaggctgtgtgttctcttatgttggttgccataaca
agtgtgcctattgggttccacgtgctagcgctaacataggttgtaaccatacaggtgttgttggagaaggttccgaaggt
cttaatgacaaccttcttgaaatactccaaaaagagaaagtcaacatcaatattgttggtgactttaaacttaatgaaga
gatcgccattattttggcatctttttctgcttccacaagtgcttttgtggaaactgtgaaaggtttggattataaagcat
tcaaacaaattgttgaatcctgtggtaattttaaagttacaaaaggaaaagctaaaaaaggtgcctggaatattggtgaa
cagaaatcaatactgagtcctctttatgcatttgcatcagaggctgctcgtgttgtacgatcaattttctcccgcactct
tgaaactgctcaaaattctgtgcgtgttttacagaaggccgctataacaatactagatggaatttcacagtattcactga
gactcattgatgctatgatgttcacatctgatttggctactaacaatctagttgtaatggcctacattacaggtggtgtt
gttcagttgacttcgcagtggctaactaacatctttggcactgtttatgaaaaactcaaacccgtccttgattggcttga
agagaagtttaaggaaggtgtagagtttcttagagacggttgggaaattgttaaatttatctcaacctgtgcttgtgaaa
ttgtcggtggacaaattgtcacctgtgcaaaggaaattaaggagagtgttcagacattctttaagcttgtaaataaattt
ttggctttgtgtgctgactctatcattattggtggagctaaacttaaagccttgaatttaggtgaaacatttgtcacgca
ctcaaagggattgtacagaaagtgtgttaaatccagagaagaaactggcctactcatgcctctaaaagccccaaaagaaa
ttatcttcttagagggagaaacacttcccacagaagtgttaacagaggaagttgtcttgaaaactggtgatttacaacca
ttagaacaacctactagtgaagctgttgaagctccattggttggtacaccagtttgtattaacgggcttatgttgctcga
aatcaaagacacagaaaagtactgtgcccttgcacctaatatgatggtaacaaacaataccttcacactcaaaggcggtg
caccaacaaaggttacttttggtgatgacactgtgatagaagtgcaaggttacaagagtgtgaatatcacttttgaactt
gatgaaaggattgataaagtacttaatgagaagtgctctgcctatacagttgaactcggtacagaagtaaatgagttcgc
ctgtgttgtggcagatgctgtcataaaaactttgcaaccagtatctgaattacttacaccactgggcattgatttagatg
agtggagtatggctacatactacttatttgatgagtctggtgagtttaaattggcttcacatatgtattgttctttctac
cctccagatgaggatgaagaagaaggtgattgtgaagaagaagagtttgagccatcaactcaatatgagtatggtactga
agatgattaccaaggtaaacctttggaatttggtgccacttctgctgctcttcaacctgaagaagagcaagaagaagatt
ggttagatgatgatagtcaacaaactgttggtcaacaagacggcagtgaggacaatcagacaactactattcaaacaatt
gttgaggttcaacctcaattagagatggaacttacaccagttgttcagactattgaagtgaatagttttagtggttattt
aaaacttactgacaatgtatacattaaaaatgcagacattgtggaagaagctaaaaaggtaaaaccaacagtggttgtta
atgcagccaatgtttaccttaaacatggaggaggtgttgcaggagccttaaataaggctactaacaatgccatgcaagtt
gaatctgatgattacatagctactaatggaccacttaaagtgggtggtagttgtgttttaagcggacacaatcttgctaa
acactgtcttcatgttgtcggcccaaatgttaacaaaggtgaagacattcaacttcttaagagtgcttatgaaaatttta
atcagcacgaagttctacttgcaccattattatcagctggtatttttggtgctgaccctatacattctttaagagtttgt
gtagatactgttcgcacaaatgtctacttagctgtctttgataaaaatctctatgacaaacttgtttcaagctttttgga
aatgaagagtgaaaagcaagttgaacaaaagatcgctgagattcctaaagaggaagttaagccatttataactgaaagta
aaccttcagttgaacagagaaaacaagatgataagaaaatcaaagcttgtgttgaagaagttacaacaactctggaagaa
actaagttcctcacagaaaacttgttactttatattgacattaatggcaatcttcatccagattctgccactcttgttag
tgacattgacatcactttcttaaagaaagatgctccatatatagtgggtgatgttgttcaagagggtgttttaactgctg
tggttatacctactaaaaaggctggtggcactactgaaatgctagcgaaagctttgagaaaagtgccaacagacaattat
ataaccacttacccgggtcagggtttaaatggttacactgtagaggaggcaaagacagtgcttaaaaagtgtaaaagtgc
cttttacattctaccatctattatctctaatgagaagcaagaaattcttggaactgtttcttggaatttgcgagaaatgc
ttgcacatgcagaagaaacacgcaaattaatgcctgtctgtgtggaaactaaagccatagtttcaactatacagcgtaaa
tataagggtattaaaatacaagagggtgtggttgattatggtgctagattttacttttacaccagtaaaacaactgtagc
gtcacttatcaacacacttaacgatctaaatgaaactcttgttacaatgccacttggctatgtaacacatggcttaaatt
tggaagaagctgctcggtatatgagatctctcaaagtgccagctacagtttctgtttcttcacctgatgctgttacagcg
tataatggttatcttacttcttcttctaaaacacctgaagaacattttattgaaaccatctcacttgctggttcctataa
agattggtcctattctggacaatctacacaactaggtatagaatttcttaagagaggtgataaaagtgtatattacacta
gtaatcctaccacattccacctagatggtgaagttatcacctttgacaatcttaagacacttctttctttgagagaagtg
aggactattaaggtgtttacaacagtagacaacattaacctccacacgcaagttgtggacatgtcaatgacatatggaca
acagtttggtccaacttatttggatggagctgatgttactaaaataaaacctcataattcacatgaaggtaaaacatttt
atgttttacctaatgatgacactctacgtgttgaggcttttgagtactaccacacaactgatcctagttttctgggtagg
tacatgtcagcattaaatcacactaaaaagtggaaatacccacaagttaatggtttaacttctattaaatgggcagataa
caactgttatcttgccactgcattgttaacactccaacaaatagagttgaagtttaatccacctgctctacaagatgctt
attacagagcaagggctggtgaagctgctaacttttgtgcacttatcttagcctactgtaataagacagtaggtgagtta
ggtgatgttagagaaacaatgagttacttgtttcaacatgccaatttagattcttgcaaaagagtcttgaacgtggtgtg
taaaacttgtggacaacagcagacaacccttaagggtgtagaagctgttatgtacatgggcacactttcttatgaacaat
ttaagaaaggtgttcagataccttgtacgtgtggtaaacaagctacaaaatatctagtacaacaggagtcaccttttgtt
atgatgtcagcaccacctgctcagtatgaacttaagcatggtacatttacttgtgctagtgagtacactggtaattacca
gtgtggtcactataaacatataacttctaaagaaactttgtattgcatagacggtgctttacttacaaagtcctcagaat
acaaaggtcctattacggatgttttctacaaagaaaacagttacacaacaaccataaaaccagttacttataaattggat
ggtgttgtttgtacagaaattgaccctaagttggacaattattataagaaagacaattcttatttcacagagcaaccaat
tgatcttgtaccaaaccaaccatatccaaacgcaagcttcgataattttaagtttgtatgtgataatatcaaatttgctg
atgatttaaaccagttaactggttataagaaacctgcttcaagagagcttaaagttacatttttccctgacttaaatggt
gatgtggtggctattgattataaacactacacaccctcttttaagaaaggagctaaattgttacataaacctattgtttg
gcatgttaacaatgcaactaataaagccacgtataaaccaaatacctggtgtatacgttgtctttggagcacaaaaccag
ttgaaacatcaaattcgtttgatgtactgaagtcagaggacgcgcagggaatggataatcttgcctgcgaagatctaaaa
ccagtctctgaagaagtagtggaaaatcctaccatacagaaagacgttcttgagtgtaatgtgaaaactaccgaagttgt
aggagacattatacttaaaccagcaaataatagtttaaaaattacagaagaggttggccacacagatctaatggctgctt
atgtagacaattctagtcttactattaagaaacctaatgaattatctagagtattaggtttgaaaacccttgctactcat
ggtttagctgctgttaatagtgtcccttgggatactatagctaattatgctaagccttttcttaacaaagttgttagtac
aactactaacatagttacacggtgtttaaaccgtgtttgtactaattatatgccttatttctttactttattgctacaat
tgtgtacttttactagaagtacaaattctagaattaaagcatctatgccgactactatagcaaagaatactgttaagagt
gtcggtaaattttgtctagaggcttcatttaattatttgaagtcacctaatttttctaaactgataaatattataatttg
gtttttactattaagtgtttgcctaggttctttaatctactcaaccgctgctttaggtgttttaatgtctaatttaggca
tgccttcttactgtactggttacagagaaggctatttgaactctactaatgtcactattgcaacctactgtactggttct
ataccttgtagtgtttgtcttagtggtttagattctttagacacctatccttctttagaaactatacaaattaccatttc
atcttttaaatgggatttaactgcttttggcttagttgcagagtggtttttggcatatattcttttcactaggtttttct
atgtacttggattggctgcaatcatgcaattgtttttcagctattttgcagtacattttattagtaattcttggcttatg
tggttaataattaatcttgtacaaatggccccgatttcagctatggttagaatgtacatcttctttgcatcattttatta
tgtatggaaaagttatgtgcatgttgtagacggttgtaattcatcaacttgtatgatgtgttacaaacgtaatagagcaa
caagagtcgaatgtacaactattgttaatggtgttagaaggtccttttatgtctatgctaatggaggtaaaggcttttgc
aaactacacaattggaattgtgttaattgtgatacattctgtgctggtagtacatttattagtgatgaagttgcgagaga
cttgtcactacagtttaaaagaccaataaatcctactgaccagtcttcttacatcgttgatagtgttacagtgaagaatg
gttccatccatctttactttgataaagctggtcaaaagacttatgaaagacattctctctctcattttgttaacttagac
aacctgagagctaataacactaaaggttcattgcctattaatgttatagtttttgatggtaaatcaaaatgtgaagaatc
atctgcaaaatcagcgtctgtttactacagtcagcttatgtgtcaacctatactgttactagatcaggcattagtgtctg
atgttggtgatagtgcggaagttgcagttaaaatgtttgatgcttacgttaatacgttttcatcaacttttaacgtacca
atggaaaaactcaaaacactagttgcaactgcagaagctgaacttgcaaagaatgtgtccttagacaatgtcttatctac
ttttatttcagcagctcggcaagggtttgttgattcagatgtagaaactaaagatgttgttgaatgtcttaaattgtcac
atcaatctgacatagaagttactggcgatagttgtaataactatatgctcacctataacaaagttgaaaacatgacaccc
cgtgaccttggtgcttgtattgactgtagtgcgcgtcatattaatgcgcaggtagcaaaaagtcacaacattgctttgat
atggaacgttaaagatttcatgtcattgtctgaacaactacgaaaacaaatacgtagtgctgctaaaaagaataacttac
cttttaagttgacatgtgcaactactagacaagttgttaatgttgtaacaacaaagatagcacttaagggtggtaaaatt
gttaataattggttgaagcagttaattaaagttacacttgtgttcctttttgttgctgctattttctatttaataacacc
tgttcatgtcatgtctaaacatactgacttttcaagtgaaatcataggatacaaggctattgatggtggtgtcactcgtg
acatagcatctacagatacttgttttgctaacaaacatgctgattttgacacatggtttagccagcgtggtggtagttat
actaatgacaaagcttgcccattgattgctgcagtcataacaagagaagtgggttttgtcgtgcctggtttgcctggcac
gatattacgcacaactaatggtgactttttgcatttcttacctagagtttttagtgcagttggtaacatctgttacacac
catcaaaacttatagagtacactgactttgcaacatcagcttgtgttttggctgctgaatgtacaatttttaaagatgct
tctggtaagccagtaccatattgttatgataccaatgtactagaaggttctgttgcttatgaaagtttacgccctgacac
acgttatgtgctcatggatggctctattattcaatttcctaacacctaccttgaaggttctgttagagtggtaacaactt
ttgattctgagtactgtaggcacggcacttgtgaaagatcagaagctggtgtttgtgtatctactagtggtagatgggta
cttaacaatgattattacagatctttaccaggagttttctgtggtgtagatgctgtaaatttacttactaatatgtttac
accactaattcaacctattggtgctttggacatatcagcatctatagtagctggtggtattgtagctatcgtagtaacat
gccttgcctactattttatgaggtttagaagagcttttggtgaatacagtcatgtagttgcctttaatactttactattc
cttatgtcattcactgtactctgtttaacaccagtttactcattcttacctggtgtttattctgttatttacttgtactt
gacattttatcttactaatgatgtttcttttttagcacatattcagtggatggttatgttcacacctttagtacctttct
ggataacaattgcttatatcatttgtatttccacaaagcatttctattggttctttagtaattacctaaagagacgtgta
gtctttaatggtgtttcctttagtacttttgaagaagctgcgctgtgcacctttttgttaaataaagaaatgtatctaaa
gttgcgtagtgatgtgctattacctcttacgcaatataatagatacttagctctttataataagtacaagtattttagtg
gagcaatggatacaactagctacagagaagctgcttgttgtcatctcgcaaaggctctcaatgacttcagtaactcaggt
tctgatgttctttaccaaccaccacaaacctctatcacctcagctgttttgcagagtggttttagaaaaatggcattccc
atctggtaaagttgagggttgtatggtacaagtaacttgtggtacaactacacttaacggtctttggcttgatgacgtag
tttactgtccaagacatgtgatctgcacctctgaagacatgcttaaccctaattatgaagatttactcattcgtaagtct
aatcataatttcttggtacaggctggtaatgttcaactcagggttattggacattctatgcaaaattgtgtacttaagct
taaggttgatacagccaatcctaagacacctaagtataagtttgttcgcattcaaccaggacagactttttcagtgttag
cttgttacaatggttcaccatctggtgtttaccaatgtgctatgaggcccaatttcactattaagggttcattccttaat
ggttcatgtggtagtgttggttttaacatagattatgactgtgtctctttttgttacatgcaccatatggaattaccaac
tggagttcatgctggcacagacttagaaggtaacttttatggaccttttgttgacaggcaaacagcacaagcagctggta
cggacacaactattacagttaatgttttagcttggttgtacgctgctgttataaatggagacaggtggtttctcaatcga
tttaccacaactcttaatgactttaaccttgtggctatgaagtacaattatgaacctctaacacaagaccatgttgacat
actaggacctctttctgctcaaactggaattgccgttttagatatgtgtgcttcattaaaagaattactgcaaaatggta
tgaatggacgtaccatattgggtagtgctttattagaagatgaatttacaccttttgatgttgttagacaatgctcaggt
gttactttccaaagtgcagtgaaaagaacaatcaagggtacacaccactggttgttactcacaattttgacttcactttt
agttttagtccagagtactcaatggtctttgttcttttttttgtatgaaaatgcctttttaccttttgctatgggtatta
ttgctatgtctgcttttgcaatgatgtttgtcaaacataagcatgcatttctctgtttgtttttgttaccttctcttgcc
actgtagcttattttaatatggtctatatgcctgctagttgggtgatgcgtattatgacatggttggatatggttgatac
tagtttgtctggttttaagctaaaagactgtgttatgtatgcatcagctgtagtgttactaatccttatgacagcaagaa
ctgtgtatgatgatggtgctaggagagtgtggacacttatgaatgtcttgacactcgtttataaagtttattatggtaat
gctttagatcaagccatttccatgtgggctcttataatctctgttacttctaactactcaggtgtagttacaactgtcat
gtttttggccagaggtattgtttttatgtgtgttgagtattgccctattttcttcataactggtaatacacttcagtgta
taatgctagtttattgtttcttaggctatttttgtacttgttactttggcctcttttgtttactcaaccgctactttaga
ctgactcttggtgtttatgattacttagtttctacacaggagtttagatatatgaattcacagggactactcccacccaa
gaatagcatagatgccttcaaactcaacattaaattgttgggtgttggtggcaaaccttgtatcaaagtagccactgtac
agtctaaaatgtcagatgtaaagtgcacatcagtagtcttactctcagttttgcaacaactcagagtagaatcatcatct
aaattgtgggctcaatgtgtccagttacacaatgacattctcttagctaaagatactactgaagcctttgaaaaaatggt
ttcactactttctgttttgctttccatgcagggtgctgtagacataaacaagctttgtgaagaaatgctggacaacaggg
caaccttacaagctatagcctcagagtttagttcccttccatcatatgcagcttttgctactgctcaagaagcttatgag
caggctgttgctaatggtgattctgaagttgttcttaaaaagttgaagaagtctttgaatgtggctaaatctgaatttga
ccgtgatgcagccatgcaacgtaagttggaaaagatggctgatcaagctatgacccaaatgtataaacaggctagatctg
aggacaagagggcaaaagttactagtgctatgcagacaatgcttttcactatgcttagaaagttggataatgatgcactc
aacaacattatcaacaatgcaagagatggttgtgttcccttgaacataatacctcttacaacagcagccaaactaatggt
tgtcataccagactataacacatataaaaatacgtgtgatggtacaacatttacttatgcatcagcattgtgggaaatcc
aacaggttgtagatgcagatagtaaaattgttcaacttagtgaaattagtatggacaattcacctaatttagcatggcct
cttattgtaacagctttaagggccaattctgctgtcaaattacagaataatgagcttagtcctgttgcactacgacagat
gtcttgtgctgccggtactacacaaactgcttgcactgatgacaatgcgttagcttactacaacacaacaaagggaggta
ggtttgtacttgcactgttatccgatttacaggatttgaaatgggctagattccctaagagtgatggaactggtactatc
tatacagaactggaaccaccttgtaggtttgttacagacacacctaaaggtcctaaagtgaagtatttatactttattaa
aggattaaacaacctaaatagaggtatggtacttggtagtttagctgccacagtacgtctacaagctggtaatgcaacag
aagtgcctgccaattcaactgtattatctttctgtgcttttgctgtagatgctgctaaagcttacaaagattatctagct
agtgggggacaaccaatcactaattgtgttaagatgttgtgtacacacactggtactggtcaggcaataacagttacacc
ggaagccaatatggatcaagaatcctttggtggtgcatcgtgttgtctgtactgccgttgccacatagatcatccaaatc
ctaaaggattttgtgacttaaaaggtaagtatgtacaaatacctacaacttgtgctaatgaccctgtgggttttacactt
aaaaacacagtctgtaccgtctgcggtatgtggaaaggttatggctgtagttgtgatcaactccgcgaacccatgcttca
gtcagctgatgcacaatcgtttttaaacgggtttgcggtgtaagtgcagcccgtcttacaccgtgcggcacaggcactag
tactgatgtcgtatacagggcttttgacatctacaatgataaagtagctggttttgctaaattcctaaaaactaattgtt
gtcgcttccaagaaaaggacgaagatgacaatttaattgattcttactttgtagttaagagacacactttctctaactac
caacatgaagaaacaatttataatttacttaaggattgtccagctgttgctaaacatgacttctttaagtttagaataga
cggtgacatggtaccacatatatcacgtcaacgtcttactaaatacacaatggcagacctcgtctatgctttaaggcatt
ttgatgaaggtaattgtgacacattaaaagaaatacttgtcacatacaattgttgtgatgatgattatttcaataaaaag
gactggtatgattttgtagaaaacccagatatattacgcgtatacgccaacttaggtgaacgtgtacgccaagctttgtt
aaaaacagtacaattctgtgatgccatgcgaaatgctggtattgttggtgtactgacattagataatcaagatctcaatg
gtaactggtatgatttcggtgatttcatacaaaccacgccaggtagtggagttcctgttgtagattcttattattcattg
ttaatgcctatattaaccttgaccagggctttaactgcagagtcacatgttgacactgacttaacaaagccttacattaa
gtgggatttgttaaaatatgacttcacggaagagaggttaaaactctttgaccgttattttaaatattgggatcagacat
accacccaaattgtgttaactgtttggatgacagatgcattctgcattgtgcaaactttaatgttttattctctacagtg
ttcccacctacaagttttggaccactagtgagaaaaatatttgttgatggtgttccatttgtagtttcaactggatacca
cttcagagagctaggtgttgtacataatcaggatgtaaacttacatagctctagacttagttttaaggaattacttgtgt
atgctgctgaccctgctatgcacgctgcttctggtaatctattactagataaacgcactacgtgcttttcagtagctgca
cttactaacaatgttgcttttcaaactgtcaaacccggtaattttaacaaagacttctatgactttgctgtgtctaaggg
tttctttaaggaaggaagttctgttgaattaaaacacttcttctttgctcaggatggtaatgctgctatcagcgattatg
actactatcgttataatctaccaacaatgtgtgatatcagacaactactatttgtagttgaagttgttgataagtacttt
gattgttacgatggtggctgtattaatgctaaccaagtcatcgtcaacaacctagacaaatcagctggttttccatttaa
taaatggggtaaggctagactttattatgattcaatgagttatgaggatcaagatgcacttttcgcatatacaaaacgta
atgtcatccctactataactcaaatgaatcttaagtatgccattagtgcaaagaatagagctcgcaccgtagctggtgtc
tctatctgtagtactatgaccaatagacagtttcatcaaaaattattgaaatcaatagccgccactagaggagctactgt
agtaattggaacaagcaaattctatggtggttggcacaacatgttaaaaactgtttatagtgatgtagaaaaccctcacc
ttatgggttgggattatcctaaatgtgatagagccatgcctaacatgcttagaattatggcctcacttgttcttgctcgc
aaacatacaacgtgttgtagcttgtcacaccgtttctatagattagctaatgagtgtgctcaagtattgagtgaaatggt
catgtgtggcggttcactatatgttaaaccaggtggaacctcatcaggagatgccacaactgcttatgctaatagtgttt
ttaacatttgtcaagctgtcacggccaatgttaatgcacttttatctactgatggtaacaaaattgccgataagtatgtc
cgcaatttacaacacagactttatgagtgtctctatagaaatagagatgttgacacagactttgtgaatgagttttacgc
atatttgcgtaaacatttctcaatgatgatactctctgacgatgctgttgtgtgtttcaatagcacttatgcatctcaag
gtctagtggctagcataaagaactttaagtcagttctttattatcaaaacaatgtttttatgtctgaagcaaaatgttgg
actgagactgaccttactaaaggacctcatgaattttgctctcaacatacaatgctagttaaacagggtgatgattatgt
gtaccttccttacccagatccatcaagaatcctaggggccggctgttttgtagatgatatcgtaaaaacagatggtacac
ttatgattgaacggttcgtgtctttagctatagatgcttacccacttactaaacatcctaatcaggagtatgctgatgtc
tttcatttgtacttacaatacataagaaagctacatgatgagttaacaggacacatgttagacatgtattctgttatgct
tactaatgataacacttcaaggtattgggaacctgagttttatgaggctatgtacacaccgcatacagtcttacaggctg
ttggggcttgtgttctttgcaattcacagacttcattaagatgtggtgcttgcatacgtagaccattcttatgttgtaaa
tgctgttacgaccatgtcatatcaacatcacataaattagtcttgtctgttaatccgtatgtttgcaatgctccaggttg
tgatgtcacagatgtgactcaactttacttaggaggtatgagctattattgtaaatcacataaaccacccattagttttc
cattgtgtgctaatggacaagtttttggtttatataaaaatacatgtgttggtagcgataatgttactgactttaatgca
attgcaacatgtgactggacaaatgctggtgattacattttagctaacacctgtactgaaagactcaagctttttgcagc
agaaacgctcaaagctactgaggagacatttaaactgtcttatggtattgctactgtacgtgaagtgctgtctgacagag
aattacatctttcatgggaagttggtaaacctagaccaccacttaaccgaaattatgtctttactggttatcgtgtaact
aaaaacagtaaagtacaaataggagagtacacctttgaaaaaggtgactatggtgatgctgttgtttaccgaggtacaac
aacttacaaattaaatgttggtgattattttgtgctgacatcacatacagtaatgccattaagtgcacctacactagtgc
cacaagagcactatgttagaattactggcttatacccaacactcaatatctcagatgagttttctagcaatgttgcaaat
tatcaaaaggttggtatgcaaaagtattctacactccagggaccacctggtactggtaagagtcattttgctattggcct
agctctctactacccttctgctcgcatagtgtatacagcttgctctcatgccgctgttgatgcactatgtgagaaggcat
taaaatatttgcctatagataaatgtagtagaattatacctgcacgtgctcgtgtagagtgttttgataaattcaaagtg
aattcaacattagaacagtatgtcttttgtactgtaaatgcattgcctgagacgacagcagatatagttgtctttgatga
aatttcaatggccacaaattatgatttgagtgttgtcaatgccagattacgtgctaagcactatgtgtacattggcgacc
ctgctcaattacctgcaccacgcacattgctaactaagggcacactagaaccagaatatttcaattcagtgtgtagactt
atgaaaactataggtccagacatgttcctcggaacttgtcggcgttgtcctgctgaaattgttgacactgtgagtgcttt
ggtttatgataataagcttaaagcacataaagacaaatcagctcaatgctttaaaatgttttataagggtgttatcacgc
atgatgtttcatctgcaattaacaggccacaaataggcgtggtaagagaattccttacacgtaaccctgcttggagaaaa
gctgtctttatttcaccttataattcacagaatgctgtagcctcaaagattttgggactaccaactcaaactgttgattc
atcacagggctcagaatatgactatgtcatattcactcaaaccactgaaacagctcactcttgtaatgtaaacagattta
atgttgctattaccagagcaaaagtaggcatactttgcataatgtctgatagagacctttatgacaagttgcaatttaca
agtcttgaaattccacgtaggaatgtggcaactttacaagctgaaaatgtaacaggactctttaaagattgtagtaaggt
aatcactgggttacatcctacacaggcacctacacacctcagtgttgacactaaattcaaaactgaaggtttatgtgttg
acatacctggcatacctaaggacatgacctatagaagactcatctctatgatgggttttaaaatgaattatcaagttaat
ggttaccctaacatgtttatcacccgcgaagaagctataagacatgtacgtgcatggattggcttcgatgtcgaggggtg
tcatgctactagagaagctgttggtaccaatttacctttacagctaggtttttctacaggtgttaacctagttgctgtac
ctacaggttatgttgatacacctaataatacagatttttccagagttagtgctaaaccaccgcctggagatcaatttaaa
cacctcataccacttatgtacaaaggacttccttggaatgtagtgcgtataaagattgtacaaatgttaagtgacacact
taaaaatctctctgacagagtcgtatttgtcttatgggcacatggctttgagttgacatctatgaagtattttgtgaaaa
taggacctgagcgcacctgttgtctatgtgatagacgtgccacatgcttttccactgcttcagacacttatgcctgttgg
catcattctattggatttgattacgtctataatccgtttatgattgatgttcaacaatggggttttacaggtaacctaca
aagcaaccatgatctgtattgtcaagtccatggtaatgcacatgtagctagttgtgatgcaatcatgactaggtgtctag
ctgtccacgagtgctttgttaagcgtgttgactggactattgaatatcctataattggtgatgaactgaagattaatgcg
gcttgtagaaaggttcaacacatggttgttaaagctgcattattagcagacaaattcccagttcttcacgacattggtaa
ccctaaagctattaagtgtgtacctcaagctgatgtagaatggaagttctatgatgcacagccttgtagtgacaaagctt
ataaaatagaagaattattctattcttatgccacacattctgacaaattcacagatggtgtatgcctattttggaattgc
aatgtcgatagatatcctgctaattccattgtttgtagatttgacactagagtgctatctaaccttaacttgcctggttg
tgatggtggcagtttgtatgtaaataaacatgcattccacacaccagcttttgataaaagtgcttttgttaatttaaaac
aattaccatttttctattactctgacagtccatgtgagtctcatggaaaacaagtagtgtcagatatagattatgtacca
ctaaagtctgctacgtgtataacacgttgcaatttaggtggtgctgtctgtagacatcatgctaatgagtacagattgta
tctcgatgcttataacatgatgatctcagctggctttagcttgtgggtttacaaacaatttgatacttataacctctgga
acacttttacaagacttcagagtttagaaaatgtggcttttaatgttgtaaataagggacactttgatggacaacagggt
gaagtaccagtttctatcattaataacactgtttacacaaaagttgatggtgttgatgtagaattgtttgaaaataaaac
aacattacctgttaatgtagcatttgagctttgggctaagcgcaacattaaaccagtaccagaggtgaaaatactcaata
atttgggtgtggacattgctgctaatactgtgatctgggactacaaaagagatgctccagcacatatatctactattggt
gtttgttctatgactgacatagccaagaaaccaactgaaacgatttgtgcaccactcactgtcttttttgatggtagagt
tgatggtcaagtagacttatttagaaatgcccgtaatggtgttcttattacagaaggtagtgttaaaggtttacaaccat
ctgtaggtcccaaacaagctagtcttaatggagtcacattaattggagaagccgtaaaaacacagttcaattattataag
aaagttgatggtgttgtccaacaattacctgaaacttactttactcagagtagaaatttacaagaatttaaacccaggag
tcaaatggaaattgatttcttagaattagctatggatgaattcattgaacggtataaattagaaggctatgccttcgaac
atatcgtttatggagattttagtcatagtcagttaggtggtttacatctactgattggactagctaaacgttttaaggaa
tcaccttttgaattagaagattttattcctatggacagtacagttaaaaactatttcataacagatgcgcaaacaggttc
atctaagtgtgtgtgttctgttattgatttattacttgatgattttgttgaaataataaaatcccaagatttatctgtag
tttctaaggttgtcaaagtgactattgactatacagaaatttcatttatgctttggtgtaaagatggccatgtagaaaca
ttttacccaaaattacaatctagtcaagcgtggcaaccgggtgttgctatgcctaatctttacaaaatgcaaagaatgct
attagaaaagtgtgaccttcaaaattatggtgatagtgcaacattacctaaaggcataatgatgaatgtcgcaaaatata
ctcaactgtgtcaatatttaaacacattaacattagctgtaccctataatatgagagttatacattttggtgctggttct
gataaaggagttgcaccaggtacagctgttttaagacagtggttgcctacgggtacgctgcttgtcgattcagatcttaa
tgactttgtctctgatgcagattcaactttgattggtgattgtgcaactgtacatacagctaataaatgggatctcatta
ttagtgatatgtacgaccctaagactaaaaatgttacaaaagaaaatgactctaaagagggttttttcacttacatttgt
gggtttatacaacaaaagctagctcttggaggttccgtggctataaagataacagaacattcttggaatgctgatcttta
taagctcatgggacacttcgcatggtggacagcctttgttactaatgtgaatgcgtcatcatctgaagcatttttaattg
gatgtaattatcttggcaaaccacgcgaacaaatagatggttatgtcatgcatgcaaattacatattttggaggaataca
aatccaattcagttgtcttcctattctttatttgacatgagtaaatttccccttaaattaaggggtactgctgttatgtc
tttaaaagaaggtcaaatcaatgatatgattttatctcttcttagtaaaggtagacttataattagagaaaacaacagag
ttgttatttctagtgatgttcttgttaacaactaaacgaacaatgtttgtttttcttgttttattgccactagtctctag
tcagtgtgttaatcttacaaccagaactcaattaccccctgcatacactaattctttcacacgtggtgtttattaccctg
acaaagttttcagatcctcagttttacattcaactcaggacttgttcttacctttcttttccaatgttacttggttccat
gctatacatgtctctgggaccaatggtactaagaggtttgataaccctgtcctaccatttaatgatggtgtttattttgc
ttccactgagaagtctaacataataagaggctggatttttggtactactttagattcgaagacccagtccctacttattg
ttaataacgctactaatgttgttattaaagtctgtgaatttcaattttgtaatgatccatttttgggtgtttattaccac
aaaaacaacaaaagttggatggaaagtgagttcagagtttattctagtgcgaataattgcacttttgaatatgtctctca
gccttttcttatggaccttgaaggaaaacagggtaatttcaaaaatcttagggaatttgtgtttaagaatattgatggtt
attttaaaatatattctaagcacacgcctattaatttagtgcgtgatctccctcagggtttttcggctttagaaccattg
gtagatttgccaataggtattaacatcactaggtttcaaactttacttgctttacatagaagttatttgactcctggtga
ttcttcttcaggttggacagctggtgctgcagcttattatgtgggttatcttcaacctaggacttttctattaaaatata
atgaaaatggaaccattacagatgctgtagactgtgcacttgaccctctctcagaaacaaagtgtacgttgaaatccttc
actgtagaaaaaggaatctatcaaacttctaactttagagtccaaccaacagaatctattgttagatttcctaatattac
aaacttgtgcccttttggtgaagtttttaacgccaccagatttgcatctgtttatgcttggaacaggaagagaatcagca
actgtgttgctgattattctgtcctatataattccgcatcattttccacttttaagtgttatggagtgtctcctactaaa
ttaaatgatctctgctttactaatgtctatgcagattcatttgtaattagaggtgatgaagtcagacaaatcgctccagg
gcaaactggaaagattgctgattataattataaattaccagatgattttacaggctgcgttatagcttggaattctaaca
atcttgattctaaggttggtggtaattataattacctgtatagattgtttaggaagtctaatctcaaaccttttgagaga
gatatttcaactgaaatctatcaggccggtagcacaccttgtaatggtgttgaaggttttaattgttactttcctttaca
atcatatggtttccaacccactaatggtgttggttaccaaccatacagagtagtagtactttcttttgaacttctacatg
caccagcaactgtttgtggacctaaaaagtctactaatttggttaaaaacaaatgtgtcaatttcaacttcaatggttta
acaggcacaggtgttcttactgagtctaacaaaaagtttctgcctttccaacaatttggcagagacattgctgacactac
tgatgctgtccgtgatccacagacacttgagattcttgacattacaccatgttcttttggtggtgtcagtgttataacac
caggaacaaatacttctaaccaggttgctgttctttatcaggatgttaactgcacagaagtccctgttgctattcatgca
gatcaacttactcctacttggcgtgtttattctacaggttctaatgtttttcaaacacgtgcaggctgtttaataggggc
tgaacatgtcaacaactcatatgagtgtgacatacccattggtgcaggtatatgcgctagttatcagactcagactaatt
ctcctcggcgggcacgtagtgtagctagtcaatccatcattgcctacactatgtcacttggtgcagaaaattcagttgct
tactctaataactctattgccatacccacaaattttactattagtgttaccacagaaattctaccagtgtctatgaccaa
gacatcagtagattgtacaatgtacatttgtggtgattcaactgaatgcagcaatcttttgttgcaatatggcagttttt
gtacacaattaaaccgtgctttaactggaatagctgttgaacaagacaaaaacacccaagaagtttttgcacaagtcaaa
caaatttacaaaacaccaccaattaaagattttggtggttttaatttttcacaaatattaccagatccatcaaaaccaag
caagaggtcatttattgaagatctacttttcaacaaagtgacacttgcagatgctggcttcatcaaacaatatggtgatt
gccttggtgatattgctgctagagacctcatttgtgcacaaaagtttaacggccttactgttttgccacctttgctcaca
gatgaaatgattgctcaatacacttctgcactgttagcgggtacaatcacttctggttggacctttggtgcaggtgctgc
attacaaataccatttgctatgcaaatggcttataggtttaatggtattggagttacacagaatgttctctatgagaacc
aaaaattgattgccaaccaatttaatagtgctattggcaaaattcaagactcactttcttccacagcaagtgcacttgga
aaacttcaagatgtggtcaaccaaaatgcacaagctttaaacacgcttgttaaacaacttagctccaattttggtgcaat
ttcaagtgttttaaatgatatcctttcacgtcttgacaaagttgaggctgaagtgcaaattgataggttgatcacaggca
gacttcaaagtttgcagacatatgtgactcaacaattaattagagctgcagaaatcagagcttctgctaatcttgctgct
actaaaatgtcagagtgtgtacttggacaatcaaaaagagttgatttttgtggaaagggctatcatcttatgtccttccc
tcagtcagcacctcatggtgtagtcttcttgcatgtgacttatgtccctgcacaagaaaagaacttcacaactgctcctg
ccatttgtcatgatggaaaagcacactttcctcgtgaaggtgtctttgtttcaaatggcacacactggtttgtaacacaa
aggaatttttatgaaccacaaatcattactacagacaacacatttgtgtctggtaactgtgatgttgtaataggaattgt
caacaacacagtttatgatcctttgcaacctgaattagactcattcaaggaggagttagataaatattttaagaatcata
catcaccagatgttgatttaggtgacatctctggcattaatgcttcagttgtaaacattcaaaaagaaattgaccgcctc
aatgaggttgccaagaatttaaatgaatctctcatcgatctccaagaacttggaaagtatgagcagtatataaaatggcc
atggtacatttggctaggttttatagctggcttgattgccatagtaatggtgacaattatgctttgctgtatgaccagtt
gctgtagttgtctcaagggctgttgttcttgtggatcctgctgcaaatttgatgaagacgactctgagccagtgctcaaa
ggagtcaaattacattacacataaacgaacttatggatttgtttatgagaatcttcacaattggaactgtaactttgaag
caaggtgaaatcaaggatgctactccttcagattttgttcgcgctactgcaacgataccgatacaagcctcactcccttt
cggatggcttattgttggcgttgcacttcttgctgtttttcagagcgcttccaaaatcataaccctcaaaaagagatggc
aactagcactctccaagggtgttcactttgtttgcaacttgctgttgttgtttgtaacagtttactcacaccttttgctc
gttgctgctggccttgaagccccttttctctatctttatgctttagtctacttcttgcagagtataaactttgtaagaat
aataatgaggctttggctttgctggaaatgccgttccaaaaacccattactttatgatgccaactattttctttgctggc
atactaattgttacgactattgtataccttacaatagtgtaacttcttcaattgtcattacttcaggtgatggcacaaca
agtcctatttctgaacatgactaccagattggtggttatactgaaaaatgggaatctggagtaaaagactgtgttgtatt
acacagttacttcacttcagactattaccagctgtactcaactcaattgagtacagacactggtgttgaacatgttacct
tcttcatctacaataaaattgttgatgagcctgaagaacatgtccaaattcacacaatcgacggttcatccggagttgtt
aatccagtaatggaaccaatttatgatgaaccgacgacgactactagcgtgcctttgtaagcacaagctgatgagtacga
acttatgtactcattcgtttcggaagagacaggtacgttaatagttaatagcgtacttctttttcttgctttcgtggtat
tcttgctagttacactagccatccttactgcgcttcgattgtgtgcgtactgctgcaatattgttaacgtgagtcttgta
aaaccttctttttacgtttactctcgtgttaaaaatctgaattcttctagagttcctgatcttctggtctaaacgaacta
aatattatattagtttttctgtttggaactttaattttagccatggcagattccaacggtactattaccgttgaagagct
taaaaagctccttgaacaatggaacctagtaataggtttcctattccttacatggatttgtcttctacaatttgcctatg
ccaacaggaataggtttttgtatataattaagttaattttcctctggctgttatggccagtaactttagcttgttttgtg
cttgctgctgtttacagaataaattggatcaccggtggaattgctatcgcaatggcttgtcttgtaggcttgatgtggct
cagctacttcattgcttctttcagactgtttgcgcgtacgcgttccatgtggtcattcaatccagaaactaacattcttc
tcaacgtgccactccatggcactattctgaccagaccgcttctagaaagtgaactcgtaatcggagctgtgatccttcgt
ggacatcttcgtattgctggacaccatctaggacgctgtgacatcaaggacctgcctaaagaaatcactgttgctacatc
acgaacgctttcttattacaaattgggagcttcgcagcgtgtagcaggtgactcaggttttgctgcatacagtcgctaca
ggattggcaactataaattaaacacagaccattccagtagcagtgacaatattgctttgcttgtacagtaagtgacaaca
gatgtttcatctcgttgactttcaggttactatagcagagatattactaattattatgaggacttttaaagtttccattt
ggaatcttgattacatcataaacctcataattaaaaatttatctaagtcactaactgagaataaatattctcaattagat
gaagagcaaccaatggagattgattaaacgaacatgaaaattattcttttcttggcactgataacactcgctacttgtga
gctttatcactaccaagagtgtgttagaggtacaacagtacttttaaaagaaccttgctcttctggaacatacgagggca
attcaccatttcatcctctagctgataacaaatttgcactgacttgctttagcactcaatttgcttttgcttgtcctgac
ggcgtaaaacacgtctatcagttacgtgccagatcagtttcacctaaactgttcatcagacaagaggaagttcaagaact
ttactctccaatttttcttattgttgcggcaatagtgtttataacactttgcttcacactcaaaagaaagacagaatgat
tgaactttcattaattgacttctatttgtgctttttagcctttctgctattccttgttttaattatgcttattatctttt
ggttctcacttgaactgcaagatcataatgaaacttgtcacgcctaaacgaacatgaaatttcttgttttcttaggaatc
atcacaactgtagctgcatttcaccaagaatgtagtttacagtcatgtactcaacatcaaccatatgtagttgatgaccc
gtgtcctattcacttctattctaaatggtatattagagtaggagctagaaaatcagcacctttaattgaattgtgcgtgg
atgaggctggttctaaatcacccattcagtacatcgatatcggtaattatacagtttcctgtttaccttttacaattaat
tgccaggaacctaaattgggtagtcttgtagtgcgttgttcgttctatgaagactttttagagtatcatgacgttcgtgt
tgttttagatttcatctaaacgaacaaactaaaatgtctgataatggaccccaaaatcagcgaaatgcaccccgcattac
gtttggtggaccctcagattcaactggcagtaaccagaatggagaacgcagtggggcgcgatcaaaacaacgtcggcccc
aaggtttacccaataatactgcgtcttggttcaccgctctcactcaacatggcaaggaagaccttaaattccctcgagga
caaggcgttccaattaacaccaatagcagtccagatgaccaaattggctactaccgaagagctaccagacgaattcgtgg
tggtgacggtaaaatgaaagatctcagtccaagatggtatttctactacctaggaactgggccagaagctggacttccct
atggtgctaacaaagacggcatcatatgggttgcaactgagggagccttgaatacaccaaaagatcacattggcacccgc
aatcctgctaacaatgctgcaatcgtgctacaacttcctcaaggaacaacattgccaaaaggcttctacgcagaagggag
cagaggcggcagtcaagcctcttctcgttcctcatcacgtagtcgcaacagttcaagaaattcaactccaggcagcagta
ggggaacttctcctgctagaatggctggcaatggcggtgatgctgctcttgctttgctgctgcttgacagattgaaccag
cttgagagcaaaatgtctggtaaaggccaacaacaacaaggccaaactgtcactaagaaatctgctgctgaggcttctaa
gaagcctcggcaaaaacgtactgccactaaagcatacaatgtaacacaagctttcggcagacgtggtccagaacaaaccc
aaggaaattttggggaccaggaactaatcagacaaggaactgattacaaacattggccgcaaattgcacaatttgccccc
agcgcttcagcgttcttcggaatgtcgcgcattggcatggaagtcacaccttcgggaacgtggttgacctacacaggtgc
catcaaattggatgacaaagatccaaatttcaaagatcaagtcattttgctgaataagcatattgacgcatacaaaacat
tcccaccaacagagcctaaaaaggacaaaaagaagaaggctgatgaaactcaagccttaccgcagagacagaagaaacag
caaactgtgactcttcttcctgctgcagatttggatgatttctccaaacaattgcaacaatccatgagcagtgctgactc
aactcaggcctaaactcatgcagaccacacaaggcagatgggctatataaacgttttcgcttttccgtttacgatatata
gtctactcttgtgcagaatgaattctcgtaactacatagcacaagtagatgtagttaactttaatctcacatagcaatct
ttaatcagtgtgtaacattagggaggacttgaaagagccaccacattttcaccgaggccacgcggagtacgatcgagtgt
acagtgaacaatgctagggagagctgcctatatggaagagccctaatgtgtaaaattaattttagtagtgctatccccat
gtgattttaatagcttcttaggagaatgacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
```
### Credits
This post was inspired by [a Tweet](https://twitter.com/ortegaalfredo/status/1233360209181061120) posted by @ortegaalfredo.

View File

@ -1,11 +0,0 @@
---
layout: post
title: "Learn to drive an FRC robot"
description: "Commentary from someone who has never actually been on drive team"
date: 2020-04-05 12:25:00
categories: frc
redirect_from:
- /post/eb3sltd9/
- /eb3sltd9/
---

View File

@ -1,12 +0,0 @@
---
layout: post
title: "Livestreaming a secondary computer without a capture card"
description: "If your network is anything under Gigabit, don't even bother"
date: 2020-04-18 22:00:00
categories: random livestreaming obs
redirect_from:
- /post/ebd92td9/
- /ebd92td9/
---
I occasionally stream to [Twitch](https://www.twitch.tv/retrylife), and every time, I wish I had an HDMI capture card. The other day, I was streaming some [Warface](https://www.warface.com/en/) as a test, and devised this system for capturing my desktop, and combining it with my laptop audio & webcam feeds.

View File

@ -1,11 +0,0 @@
---
layout: post
title: "How I hacked together a VR streaming setup without a VR rig"
description: "Probably one of the least cost-effective methods possible"
date: 2020-04-28 11:00:00
categories: vr game livestream
redirect_from:
- /post/65sdjls4/
- /65sdjls4/
---

View File

@ -1,11 +0,0 @@
---
layout: post
title: "Reverse-engineering an IOS app and porting it to Android in under 24 hours"
description: "And accidentally wiping my profile while I'm at it"
date: 2020-05-29 22:40:00
categories: random app flutter api
redirect_from:
- /post/65sasls4/
- /65sasls4/
---

View File

@ -1,11 +0,0 @@
---
layout: post
title: "Giving an ATmega32u4 UART capability"
description: "Sometimes a CPU has too many extra features"
date: 2020-06-07 14:15:00
categories: avr 32u4 usart lowlevel
redirect_from:
- /post/61f9kjlf/
- /61f9kjlf/
---

View File

@ -25,7 +25,7 @@
rel="stylesheet">
<!-- Adsense -->
<script data-ad-client="ca-pub-6940033544404615" async
src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
<!-- <script data-ad-client="ca-pub-6940033544404615" async
src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script> -->
</head>

View File

@ -1 +0,0 @@
{{content}}

View File

@ -2,7 +2,7 @@
---
.custom-navbar {
{% if header_red %}
{% if page.header_red %}
background-color: var(--color-red)!important;
{% else %}
background-color: var(--color-purple)!important;

View File

@ -4,7 +4,7 @@
.color-space{
height:40vh;
{% if header_red %}
{% if page.header_red %}
background-color: var(--color-red)!important;
{% else %}
background-color: var(--color-purple)!important;

View File

@ -1,6 +1,7 @@
---
title: Blog Posts
layout: page
header_red: true
---
<div class="list-group" id="posts">