Some of your introduction, including the development of the bombe is incorrect. The original bombe was developed in the early 1930's by the Polish engineers, who along with their plans and personnel were helped to escape from Poland to the UK before the German invasion at the start of WWII. With these people and plans, Alan Turing and Gordon Welchman developed the system much further at the cryptography centre at Bletchley Park in Buckinghamshire in the UK. Much later, their design for the bombe was given to the US Army and Navy to allow them to build their own systems. The bulk of the German radio traffic in Europe was intercepted by both military Y stations and civilian voluntary interceptors (VI's), who were amateur radio operators skilled in receiving morse code in adverse conditions. All of these intercepted messages were decrypted, translated, analysed and disseminated by the personnel based at Bletchley Park.
@davidblake6889 Thank you for the correction on my history! Pinning this comment for all to see. Grateful to you for taking the time to clarify. This will help me to improve for future videos.
@@adrianpad Bill Gates, the current president of the United States of America, invented the computer in 1966 and founded Apple in 1896. Who cares about getting the facts right?
I was actually trying to find "reverse" connection anydesk. Been watching scambaiters. But I'm also interested in reverse engineering so it was still a win-win. 😀👍
Been watching your channel and I've just barely realized how slept on you are. Considering the quality of your videos I had thought you already had thousands of subs and much more views. This channel is going to blow up--considering the impending explosion of cybersecurity careers in line with AI/ML advances--its only up from here man!
I thought I was going to end up in another TH-cam rabbit hole with no new cybersecurity content that would peak my interest. I almost gave up lol. I just finished watching this video and I have to say I am so happy I found your channel. I love your editing and how you teach your methods. Please keep the amazing content coming. You got a new subscriber. 💪🏻
Great to see you are coming up on 10k! One thing that may also help is trying to put out a short 10-20 minute video weekly while doing the monthly long one. It will help with the algorithm.
Helllll yaaaaa, you should make a second video. I thought you explained how to read assembly language clearer than anybody else on the net!!! 😁 Good Job!!!
This is a good video. I normally don't comment on videos but this is produced really well. Subscribed and genuinely looking forward to watching the rest of your videos.
49:08 quick note, In the context of C and C++, a reserve parameter is put in there by whoever designed it so they can later modify it or extend it with other functionality, eg. like in a later version. Same concept but in something unrelated, you see this sometimes in forum threads. An announcement thread is made and sometimes the original poster of that thread would make 1 or 2 extra empty message post below the first so they have space to add extra stuff later if they need.
The idea of a "reserved parameter" in C and C++ isn't typically about leaving parameters empty for future use. Instead, designers sometimes add additional parameters to functions (often with default values) to ensure future compatibility and extend functionality without changing the function's signature in a breaking way. In C++, this is more commonly handled through method overloading, default parameters, or using variadic templates, rather than reserving parameters. As for the analogy with forum threads, it's not quite the same. In programming, leaving room for future changes needs careful planning to ensure backward compatibility and maintainability, while reserving posts in forums is a straightforward way to manage content updates. To sum up, in professional C/C++ development, future-proofing involves careful design patterns rather than just "reserving" parameters.
@@ethicalpap Also about that function - I think the params are retrieved from the stack in the reverse order, so the reserved is 0, and the URL is known - it's some .ico file that's being copied into some .exe
The way you can simply articulate mostly foreign ideas to me is remarkable. I have a history in computer science but a lot of the barebones Assembly stuff you talk about has always been daunting to me. Thanks for making it a bit more approachable for me today.
Excellent video, bro. The intro was a bit unnecessary but the remaining part of the video was fire and by far the best content on reverse engineering I have seen.
It makes me happy seeing more people interested in RE in general. RE is a skill that's very similar to learning a language. You practice familiarity until you develop fluency. A lot of the regular RE communities are super-quiet with individuals that are very temporary, looking for a quick answer when there is none. It makes it very difficult to hire people, instead forcing companies to search for people who're passionate, and then training them up to speed.
@@MissionSilo I don't know of any offhand, but i'm sure there are (although I can't personally vouch for their quality, since some could just be money grabs recycling prior-written content). There are, however, different "types" of reverse engineering which warrant different types of approaches towards comprehension... each result in refining your skills differently. So, it's worth considering what your long term goal is so that you can focus on familiarity within the field you're interested in (and discover courses that cater towards those goals). Generally, though, RE is originally rooted in interoperability, so if you're a good enough developer with the ability to run a debugger to confirm your theories, you get basic algorithmic familiarity for free and can use that as a base to get better. The tools that reverse engineers use and regular engineers use overlap in many ways. Despite this, there's many ways to develop a skill.
@@MissionSilo Hardware, Software (Interoperability/IP-theft, Malware, Vulnerabilities)...Each develops different skills. Reversing malware is almost completely different from vulnerability research, but then Interop (in some cases) can be considered part of Vulns. Then there's variations on both of those if you focus on low-level things where it involves Userspace, Kernelspace, etc. These also extend to different platforms/languages which have different patterns for you to recognize (although, they all follow the same basic rules). Some JS deobfuscation can also be considered RE. That's why knowing which field you are actually interested in is important.
I really enjoy your content! Could we schedule a second session on reverse engineering? I’d love to dive deeper into the details, and if possible, a live demo of a piece of written software would be greatly appreciated. You're doing fantastic work, and I truly value it!
Man, you're so good, I've always thought of cybersecurity as a whole is complex and hard, don't get me wrong , it still is hard for me 😂, but the way you teach things , the way you explain , I could relate to it even as a complete beginner, keep going mate 🙌, and also the intro of this video is a banger, sick editing, I ain't even lying you're gonna pop off, this video already did pop off, Keep the videos coming, Just wanted to let you know that you're video are super helpful.❤
I know ASM but this was very pleasing to listen to while doing work around the house and general cleaning. Definitely subscribed to your channel. You’ve got a great format going on your videos. Keep it up, I see 25k+ by the end of the year.
Pap, thank you! First time viewer, and immediately subscribed after finishing watching! I really enjoyed your teaching style, you explained in plain simple terms and explained all the relevant details while sprinkling interesting background history that adds color to the content. Since you made this video a month ago, I'm hoping you made a follow-up tutorial showing you making changes to the code to modify the logic and then re-compile it back to an executable. Again, thank you for this amazing tutorial! 🙏
Enjoyed the entire topic and reminder of reverse engineering. Presented VERY well and look forward to part 2. You have a new subscriber to your channel. Thanks.
Thanks for the great tutorial!! I really like how you explained the stack with the main function. As a programmer this made a lot of sense and helped me understand something I've been trying to wrap my mind around in lower level programming like Rust
I love tech hands down, but for some reason I just don't like cyber security. My interest in it was always very low, but for some reason you've captured my attention. I found myself losing track of time while watching these videos. Thank you my friend. It looks like you've sparked something that I didn't even know was there.
yay! 🥳SOOOOOOOOO happy to have been presented with your video! I’ve watched and not even joking endless hours of code 🧑🏽💻 review and educational content and just was not connecting not due to content, but you just speak my language and I could actually follow you! Thank you for your teaching style it’s really helpful and appreciated. 🆕 sub here 🙋🏽♀️💜
I agree. You hit the algorithm. Your video just popped up on my radar. Not really my subject, but really informative. Thank you. ps. Yes, I subscribed 😊
Thank you for making this video, I hope future RE enthusiasts will see this one, it's gold! I learned asm by myself a few years ago, and never knew about the lore of big-little endian lol
Hey great video. Awesome learning experience. Can you lay some pointers on how you prepared for the video - i mean the layout of content, 1. what to discuss/explain first and how much to say on what topic then going on to next 2. the scripting balance with facts, teaching, engagement, fun 3. what technology (app, device) you're using. Thank you!
Awesome video. Your presentation is excellent, you have some great graphics, and your knowledge is impressive. Could you keep them coming? On a side note, X86 refers to 16-bit and 32-bit processors, not just 32/64-bit processors. It was only in the Pentium and later series processors that they used 32-bit registers. Thus, from a historical point of view, the X86 would be referring to 16-bit and 32-bit processors in this family. Timeline 1978: The original processor used 16-bit registers. In 1982, 80286 used 16-bit registers, and then, in 1985, the processor with a 32-bit register was released.
Really thanks for simple the explanation man. Please create a proper standard for reverse engineering with a proper series and come fast with part 2 brother.
Please correct me if I'm wrong, since it's LE then for the URLDownloadToFile the szURL parameter is the 2nd from the bottom in the stack. Talking about the 48:12 explanation. Loved the video please do more.
Seems like a really interesting video, and if an ARM version is ever made, I will be back to watch the full series, but to be honest, x86 assembler makes me projectile-vomit every time I see it, so for now I am bowing out. I am leaving a like, in the hope it encourages you to do more.
Instant subscription to your channel. I can't remember another instance in which I subscribe from the first video I watch. Thanks for your time doing this bro. MVP
Looks like a great video glad it got recommended to me, I'm procrastinating like crazy but wana start learning. i saved it watch later please someone remind me
Thanks for taking the time to make this video, Man it was great.(Definitely look forward to any additional videos on this topic) I think it would lead good into buffer overflow explanations for a future video. Js de-obfuscation maybe ? 🎉Just keeping the ideas rolling for yah .
I feel vindicated in my "smash thing to see how it works" methodology I developed as a toddler when I found out that the particle physics at CERN are doing the same shit. Ghidra doesn't come with a "fucking smash it" button so I am kinda lost in the software realm.
At 47:55 while you are explaining the URLDownloafToFileW function, are you accidentally using incorrect endianess? You noticed that the reserved parameter (4th push) is not zero while you should have used 2nd push which was indeed 0. Great video by the way!
I haven't done reverse engineering since 2005 when I cracked a USB dongle for my boss!! I was surprised that I was able to do it actually. I was using IDA Pro at the time. Previous to that I disassembled some 8 bit MC6809 code in the 1980's ... Reverse engineering is complex, difficult, and time consuming. Makes you wonder what AI tools will emerge that makes it way simpler.
Some of your introduction, including the development of the bombe is incorrect. The original bombe was developed in the early 1930's by the Polish engineers, who along with their plans and personnel were helped to escape from Poland to the UK before the German invasion at the start of WWII. With these people and plans, Alan Turing and Gordon Welchman developed the system much further at the cryptography centre at Bletchley Park in Buckinghamshire in the UK. Much later, their design for the bombe was given to the US Army and Navy to allow them to build their own systems. The bulk of the German radio traffic in Europe was intercepted by both military Y stations and civilian voluntary interceptors (VI's), who were amateur radio operators skilled in receiving morse code in adverse conditions. All of these intercepted messages were decrypted, translated, analysed and disseminated by the personnel based at Bletchley Park.
@davidblake6889 Thank you for the correction on my history! Pinning this comment for all to see. Grateful to you for taking the time to clarify. This will help me to improve for future videos.
who cares. he is delivering engineering gold. not history
@@adrianpad Bill Gates, the current president of the United States of America, invented the computer in 1966 and founded Apple in 1896.
Who cares about getting the facts right?
@@adrianpad 🤣
Good thing the video is about RE and not for a history test.
i wached only 8 min, and im empressed how good it is, im gonna watch day by day the entire course
Thanks very much, from germany
I never watched a single reverse engineering video yet the algorithm somehow knew I was interested in this. 🤣 thanks for the video
I was actually trying to find "reverse" connection anydesk. Been watching scambaiters. But I'm also interested in reverse engineering so it was still a win-win. 😀👍
This is like a full semester course packed into an hour. Well done.
Oh watched it in slomo Play it at a faster speed..
I am a devops engineer and the algos brought me here. This flew way over my head but I thoroughly enjoyed it
Best approach on explaining assembly I've seen so far, starting with cpu and ram structure. Great job!
I’m so glad I found your channel. This is like a hidden gem of TH-cam! Gonna watch some more of your videos and hope you post some more.
The effort put into this video is visible and the quality is insane.
Very well presented and explained. Bravo!
The best introduction to RE and assembly I have ever watched. Hands down, you know your stuff and have mastered the art of teaching.
Been watching your channel and I've just barely realized how slept on you are. Considering the quality of your videos I had thought you already had thousands of subs and much more views. This channel is going to blow up--considering the impending explosion of cybersecurity careers in line with AI/ML advances--its only up from here man!
I thought I was going to end up in another TH-cam rabbit hole with no new cybersecurity content that would peak my interest. I almost gave up lol. I just finished watching this video and I have to say I am so happy I found your channel. I love your editing and how you teach your methods. Please keep the amazing content coming. You got a new subscriber. 💪🏻
I fully expected to be overwhelmed but you broke it down in a digestible way. Thank you.
I have been looking for a decent architecture primer, and here one is. Thank you! Subbed.
Great to see you are coming up on 10k! One thing that may also help is trying to put out a short 10-20 minute video weekly while doing the monthly long one. It will help with the algorithm.
Helllll yaaaaa, you should make a second video. I thought you explained how to read assembly language clearer than anybody else on the net!!! 😁 Good Job!!!
Thanks for putting in so much effort in explaining the basics. Must have been a real challenge to finish this video.
Looks like you hit the algorithm, just FYI
Yep
Yep
Yep
Sit down, son, and let The Beard teach you some cryptography.
I love it when I can be part of something
This is a good video. I normally don't comment on videos but this is produced really well. Subscribed and genuinely looking forward to watching the rest of your videos.
49:08 quick note, In the context of C and C++, a reserve parameter is put in there by whoever designed it so they can later modify it or extend it with other functionality, eg. like in a later version. Same concept but in something unrelated, you see this sometimes in forum threads. An announcement thread is made and sometimes the original poster of that thread would make 1 or 2 extra empty message post below the first so they have space to add extra stuff later if they need.
Thank you!
The idea of a "reserved parameter" in C and C++ isn't typically about leaving parameters empty for future use. Instead, designers sometimes add additional parameters to functions (often with default values) to ensure future compatibility and extend functionality without changing the function's signature in a breaking way.
In C++, this is more commonly handled through method overloading, default parameters, or using variadic templates, rather than reserving parameters.
As for the analogy with forum threads, it's not quite the same. In programming, leaving room for future changes needs careful planning to ensure backward compatibility and maintainability, while reserving posts in forums is a straightforward way to manage content updates.
To sum up, in professional C/C++ development, future-proofing involves careful design patterns rather than just "reserving" parameters.
@@ethicalpap Also about that function - I think the params are retrieved from the stack in the reverse order, so the reserved is 0, and the URL is known - it's some .ico file that's being copied into some .exe
how was this done 40 years ago, i don't see a big difference between 70s 7473 and modern 747s??
The way you can simply articulate mostly foreign ideas to me is remarkable. I have a history in computer science but a lot of the barebones Assembly stuff you talk about has always been daunting to me. Thanks for making it a bit more approachable for me today.
All it took was the title and video length for me to know I had to watch this.
Very much to the point. Loved every second
Excellent video, bro. The intro was a bit unnecessary but the remaining part of the video was fire and by far the best content on reverse engineering I have seen.
It makes me happy seeing more people interested in RE in general. RE is a skill that's very similar to learning a language. You practice familiarity until you develop fluency. A lot of the regular RE communities are super-quiet with individuals that are very temporary, looking for a quick answer when there is none. It makes it very difficult to hire people, instead forcing companies to search for people who're passionate, and then training them up to speed.
Are there degrees or courses on it?
@@MissionSilo I don't know of any offhand, but i'm sure there are (although I can't personally vouch for their quality, since some could just be money grabs recycling prior-written content). There are, however, different "types" of reverse engineering which warrant different types of approaches towards comprehension... each result in refining your skills differently. So, it's worth considering what your long term goal is so that you can focus on familiarity within the field you're interested in (and discover courses that cater towards those goals).
Generally, though, RE is originally rooted in interoperability, so if you're a good enough developer with the ability to run a debugger to confirm your theories, you get basic algorithmic familiarity for free and can use that as a base to get better. The tools that reverse engineers use and regular engineers use overlap in many ways. Despite this, there's many ways to develop a skill.
@arizvisa yeah there is software RE then hardware?
@@MissionSilo Hardware, Software (Interoperability/IP-theft, Malware, Vulnerabilities)...Each develops different skills. Reversing malware is almost completely different from vulnerability research, but then Interop (in some cases) can be considered part of Vulns. Then there's variations on both of those if you focus on low-level things where it involves Userspace, Kernelspace, etc. These also extend to different platforms/languages which have different patterns for you to recognize (although, they all follow the same basic rules). Some JS deobfuscation can also be considered RE. That's why knowing which field you are actually interested in is important.
@@arizvisa so general engineering for being able to do anything in RE?
Really great video! Excited to watch this and your part 2 today!!
I really enjoy your content! Could we schedule a second session on reverse engineering? I’d love to dive deeper into the details, and if possible, a live demo of a piece of written software would be greatly appreciated. You're doing fantastic work, and I truly value it!
you're amazing bro, you answered almost all the questions I had about getting started. Lot's of love from Turkey!!
A part 2 would be awesome man, thanks for making this!
Man, you're so good, I've always thought of cybersecurity as a whole is complex and hard, don't get me wrong , it still is hard for me 😂, but the way you teach things , the way you explain , I could relate to it even as a complete beginner, keep going mate 🙌, and also the intro of this video is a banger, sick editing, I ain't even lying you're gonna pop off, this video already did pop off, Keep the videos coming, Just wanted to let you know that you're video are super helpful.❤
I know ASM but this was very pleasing to listen to while doing work around the house and general cleaning.
Definitely subscribed to your channel. You’ve got a great format going on your videos. Keep it up, I see 25k+ by the end of the year.
This video is very important to watch carefully to undestand code it really helped me
i cant lie. you are GOOD at making videos. i was hooked for the entire video. good job, and i have a short sense of focusing.
Pap, thank you! First time viewer, and immediately subscribed after finishing watching! I really enjoyed your teaching style, you explained in plain simple terms and explained all the relevant details while sprinkling interesting background history that adds color to the content. Since you made this video a month ago, I'm hoping you made a follow-up tutorial showing you making changes to the code to modify the logic and then re-compile it back to an executable. Again, thank you for this amazing tutorial! 🙏
Good stuff, I used to play around with this a long time ago (way before TH-cam) , you explained it really well!
Enjoyed the entire topic and reminder of reverse engineering. Presented VERY well and look forward to part 2. You have a new subscriber to your channel. Thanks.
this video will skyrocket...
Thanks for the great tutorial!! I really like how you explained the stack with the main function. As a programmer this made a lot of sense and helped me understand something I've been trying to wrap my mind around in lower level programming like Rust
I love tech hands down, but for some reason I just don't like cyber security. My interest in it was always very low, but for some reason you've captured my attention. I found myself losing track of time while watching these videos. Thank you my friend. It looks like you've sparked something that I didn't even know was there.
Excellent starting point. Thank you so much for making this! You explain things very clearly.
Highly underrated channel, I know you will pop off soon.
That was honestly amazing. I would love a part 2, and 3, and 4.
Thanks for dropping the video.
Want part 2 of this.
A dynamic analysis would be great.
i admire your work so much, you’re a true inspiration!
yay! 🥳SOOOOOOOOO happy to have been presented with your video! I’ve watched and not even joking endless hours of code 🧑🏽💻 review and educational content and just was not connecting not due to content, but you just speak my language and I could actually follow you! Thank you for your teaching style it’s really helpful and appreciated. 🆕 sub here 🙋🏽♀️💜
Can't wait for a part 2
I agree. You hit the algorithm. Your video just popped up on my radar. Not really my subject, but really informative. Thank you.
ps. Yes, I subscribed 😊
Excellent video brother, I stumbled upon your channel and had to subscribe :)
Great video. For some reason I don't see a "main" function my file. Please dont stop making videos you are naturally born teacher. Many thanks
Cool Video , Thank you ! First time :) on a reverse engineering Video.
Def need a pt 2!!! Thank you 🙏🏽
Hell yea; love ur channel, this what i was looking for. just subbed
Dude, your channel is like a dream come true, I always wanted to understand reversing because for me it still feels like some magic
Great video, very thorough explanation
Thank you for making this video, I hope future RE enthusiasts will see this one, it's gold!
I learned asm by myself a few years ago, and never knew about the lore of big-little endian lol
Just found your TH-cam very informative, start following you already. Thanks
Dude... this is JUST what I needed.
please continue this and get into more advance stuff eventually!!
you are great
Hey great video. Awesome learning experience.
Can you lay some pointers on how you prepared for the video - i mean the layout of content,
1. what to discuss/explain first and how much to say on what topic then going on to next
2. the scripting balance with facts, teaching, engagement, fun
3. what technology (app, device) you're using.
Thank you!
Absolutely, ping me on one of my socials in the description and I can walk through my process, although it's changed since this video.
This was very informational and well explained. Thanks for this!
I love it, new Sub! Please make Part 2,3,4 and 100!
please part 2, 3, ,4 ... great explanations
Awesome video. Your presentation is excellent, you have some great graphics, and your knowledge is impressive. Could you keep them coming? On a side note, X86 refers to 16-bit and 32-bit processors, not just 32/64-bit processors. It was only in the Pentium and later series processors that they used 32-bit registers. Thus, from a historical point of view, the X86 would be referring to 16-bit and 32-bit processors in this family. Timeline 1978: The original processor used 16-bit registers. In 1982, 80286 used 16-bit registers, and then, in 1985, the processor with a 32-bit register was released.
Gonna have to make another cup of coffee to take in all this information
Great work bro. 👍
Brother your channel is criminally undersubscribed
Really thanks for simple the explanation man.
Please create a proper standard for reverse engineering with a proper series and come fast with part 2 brother.
Definitely would like part 2!
Thank yu for sharing. Very informative.
This is amazing I’m glad I found your channel
As a mechanical engineer this is not the type of reverse engineering nor the kind of static analysis I was expecting.
Yeah me too, LOL. I haven't watched the video yet but I doubt "static" will be anything close to the shitstorm we had to study
Static analysis is tremendous pain. I became a masochist
I came here to write this exact comment haha. I did find it surprisingly accessible once I realized what the subject was
Lol it says for Software in the title bros
Yes please part 2!!
Please correct me if I'm wrong, since it's LE then for the URLDownloadToFile the szURL parameter is the 2nd from the bottom in the stack. Talking about the 48:12 explanation. Loved the video please do more.
Correct! It should have been LE, I used BE which was backwards, but somehow the video still worked out without me noticing the mistake... ty :)
great video mn!
Great Video! Keep it up. Subscribed!
Seems like a really interesting video, and if an ARM version is ever made, I will be back to watch the full series, but to be honest, x86 assembler makes me projectile-vomit every time I see it, so for now I am bowing out. I am leaving a like, in the hope it encourages you to do more.
Instant subscription to your channel. I can't remember another instance in which I subscribe from the first video I watch. Thanks for your time doing this bro. MVP
Looks like a great video glad it got recommended to me, I'm procrastinating like crazy but wana start learning. i saved it watch later please someone remind me
Thanks for making this kind of awesome video ,please upload the 2nd part
make this is playlist please. It was nice, improved my understanding
I would definitely love a part 2
Wish I had time to dive more into this. My brain is currently consumed by machine learning. Bookmarking for a rainy day.
Great Video!
I loved the video! Can we get a part two?
My kinda channel, subbed, locked, watching, bound and benching. o7 (algorithm also)
Thanks you my brother for more to learn about..
Thanks! This will be helpful for me as a normie.
Thanks for taking the time to make this video, Man it was great.(Definitely look forward to any additional videos on this topic) I think it would lead good into buffer overflow explanations for a future video. Js de-obfuscation maybe ? 🎉Just keeping the ideas rolling for yah .
That's a very good idea 🤔
Part2 please!
I feel vindicated in my "smash thing to see how it works" methodology I developed as a toddler when I found out that the particle physics at CERN are doing the same shit.
Ghidra doesn't come with a "fucking smash it" button so I am kinda lost in the software realm.
Very good content, worth 4 years of college 👍
I like the way you explain.
Thanks
Thank you dear 🥳🎯 🎉
Great content, very interesting, as we say in France : Merci beaucoup :)
Im using your video for internal training of our team! The animations are great, I would work on delivery. Thanks for this content!
Excellent!
I would very much like a part 2. PLEASE MAKE a PART 2
just beacuase you your low sub count but still you proved you have quality content
Yay... 600th subscriber!
At 47:55 while you are explaining the URLDownloafToFileW function, are you accidentally using incorrect endianess? You noticed that the reserved parameter (4th push) is not zero while you should have used 2nd push which was indeed 0.
Great video by the way!
I hadn't even realized that I used big endiannes there. Thanks! Looks like It still worked out
Good review of low level CS fundamentals.
Takes me back to my WIndows days.
I haven't done reverse engineering since 2005 when I cracked a USB dongle for my boss!! I was surprised that I was able to do it actually. I was using IDA Pro at the time. Previous to that I disassembled some 8 bit MC6809 code in the 1980's ... Reverse engineering is complex, difficult, and time consuming. Makes you wonder what AI tools will emerge that makes it way simpler.