See inside for notes If there's anything anyone else wants me to add, just tell me in the comments!
Code and notes by me.