The Stack Overflow Podcast

Diving into headless automation, active monitoring, Playwright and Puppeteer

Episode Summary

This week we chat with Tim Nolet, whose commentary appeared in a previous episode after he complained about Amazon forking his OS service and presenting it as new product without so much as a "thanks." Since then they have worked things out, and Tim came on the show to explain what happened, what he builds, and the company he runs.

Episode Notes

You can find the original tweet here. AWS will work with them on publicity and open source their version so that there can be a flow of value in both directions. 

You can learn more about Tim's company, Checkly.hq, which works on active monitoring for developers. 

The team there also works on  Headless Recorder, a Chrome extension that records your browser interactions and generates a Playwright or Puppeteer script. 

They also operate The Headless Dev, which helps coders learn Playwright and Puppeteer. 

This week's Lifeboat badge goes to Ravindra Bagale for answering the question:  How to Convert Integer to Character Array using C

Episode Transcription

Tim Nolet Really running a company is something quite different than shepherding your open source thing. It has nothing to do with each other, actually, yes, they both use the same code. And that's literally where it ends.

[INTRO MUSIC]

Ben Popper Are you struggling to deploy cloud native applications to a hybrid cloud? Do you want to become familiar with Kubernetes and Istio? IBM cloud has a set of free, hands on training, ebooks, and an always on free tier services to help you learn. Visit IBM.biz/StackOverflow to learn more, that's IBM.biz/Stack Overflow. 

BP Hello and good morning, everybody. Welcome to the Stack Overflow podcast. I'm Ben Popper, Director of Content here at Stack Overflow with my wonderful co hosts, Paul and Sara. Good morning, y'all.

Paul Ford Good morning!

BP Paul, you sound unusually chipper this morning. What's going on?

PF Just getting by in a mixed up world. My kids are in school. The sun is shining. All is well.

BP Ah, wonderful, kids in school is a nice thing. Sara, how you doing? 

SC Good. I was just yawning. I have no kids in school. 

BP But you did, you brought your cat with you to Florida?

SC Yeah, she's not in school. She didn't make it in any of the private schools. We tried, they have a really high bar. [Ben laughs]

BP So we have a great guest today, Tim Nolet, I'm gonna walk us back a little bit. We had an episode a few weeks ago after I saw a tweet. And it was about AWS barring some open source code to create a new feature inside of their service. And this sort of directly copied some of what Tim had been working on. And the question that Paul and Sara, that we all discuss then, was sort of like what is you know, big codes responsibility when they do this? What's the best way for this interaction to happen? 

PF Well, and I mean, it's worth like legally none. But ethically, maybe it's a little more complicated because you want to, it's a tragedy, the commons thing you want to you want to make sure that you're taking care of the world that you're profiting from.

SC I don't want to descend into the debate right away. But is it true that legally none, like does it depend on licensing? Or do you mean like--

PF Well, they gotta use I mean, they have to follow the terms of the license, that is real, you always have that like, but yeah, so legally, according to the license, but the license doesn't incur a financial obligation or even a kind of cultural obligation, it incurs a license obligation.

SC Yeah, but but that kind of means legally you can't copy most open source code without attributing. 

PF I wonder if we could talk to somebody who actually knows what happened?

SC Yeah!

PF Wonder what that would be like.

SC So convenient!

BP I wonder if there could be like someone who's sort of worked through all these issues firsthand? Well, actually, as it happens, Tim Nolet agreed to come on the show today. Hey, Tim, how's it going?

TN Hi, Ben. I'm good. Thank you.

BP I know you agreed to come on after working this out with AWS. So the degree that you can legally or whatever it may be, tell us a little bit about what happened and what that what that discussion was like, and where you ended up.

TN So legally, nothing happened. Because legally, nothing happened. They were completely in the clear. So I guess, where we are right now is that I had a really interesting talk with I think one of their head open source, people, the actual team that used the the code in their product. And it was really nice, they're nice people. And we're going to do some interesting stuff with regard to a little bit of publicity around how they develop, let's say their version of the software that I open sourced, and where they actually updated their, their, their, their product, blurps to include this information. And that is kind of it and then they're actually going to open source their version also. So we're going to be in kind of like an upstream downstream kind of situation. Because, yeah, I think that was probably the best solution for this whole case.

PF That's a really big win. Because a lot of times when the big organizations help themselves, they're like, yeah, it's just gonna be too complicated otherwise. Yeah, to get them to to, to start putting what they've done back into the comments is good open source. Good. Great. 

TN It is, it is. And I think what's interesting with Sara and Paul already mentioned was they were legally completely okay. So in my, I made a tweet, it was a slap on the wrist, and it completely mentioned, hey, legally, there's nothing going on. The thing is, the project, my open source project is kind of a user facing tool, and it's a Chrome extension. And if you download it, you're not going to unpack it with a specific piece of software, and then browse through all the notices dot txt files and see what's there. So it was a little bit hidden, but I guess legally, completely okay.

PF So wait, tell us what it does, actually, we're talking about in the abstract, what was this code and what is the AWS service set they built on top of it?

TN So you mentioned a little bit earlier, browser automation, so writing code that talks to your browser and does stuff, click on stuff, open windows, fill in fields and stuff like. This has been around for ages, you have like selenium, which is a big name in this space. But more recently, Google open source puppeteer and Microsoft open source playwrights. They're both frameworks that ultimate browser. My extension, or the extension that I developed and later kind of is, and is now maintained by my company, actually automates the creation of those scripts. So it's a browser extension, you load it into Chrome, you click record, kind of like a tape player or cassette recorder. So you click record, you start clicking around filling in field, stuff like that. You hit stop, an outcomes piece of JavaScript. 

PF Oh, so it's a it's a macro generator for browsers or...

TN Yeeaahh... [Tim laughs]

PF I'm thinking like, Emacs macros. There's a keystroke recording is an under sun aspect of programming.

TN I honestly have never used Emacs in my life. 

SC Yeah, welcome to most of the world.

PF Yeah. Welcome to the next 40 minutes your life! [Sara & Ben laugh]

SC This is turning into a full Emacs tutorial podcast, Paul can get away with it.

PF Let me just describe this because it doesn't. It might exist in vim, but it doesn't always exist in other in other environments. So Emacs, I can literally type a keystroke, and then it will record every keyboard command that I do, including command invocation. And then I can rerun that. So that can be really valuable for like, removing the same thing from every line. But it can also be really specific, like every single line, I'm going to search for the comma, and I'm going to erase the comma, then proceed to the next line. Now I'm going to evaluate that 1000 times and it's very built into the system. And I actually always think of it as a gateway to programming, right? Because it was actually how I learned I'm using this text editor and I couldn't figure out how to make the macros do a few things I wanted to. And then I saw the code that it output. I was like, oh, okay, I can I can dig in here. And so it sounds a little bit similar, right? Like I'm going to do, I'm going to perform an act and then the computer is going to repeat it over and over. What did Amazon build on top of it?

TN What they did was basically fork the repo. So the repos called Hatless Recorder. And that's also the name that it has on the Chrome extension store.

PF That was a little tacky. Right? That was that was part of the conversation. 

TN Yeah, exactly. A little bit tacky. [Tim chuckles] So recently, AWS launched a service. It's called Cloud watch synthetics, which runs the scripts, which is they're kind of a competitor of my company. They're kind of they're literally a competitor of me, and my colleagues, of course, and they found it very useful that this extension already existed, so they forked it, at least I think, I don't know. I can't really see it. I don't see any specific AWS people in the in the forks. And then they slapped a different label on it and did a little bit of tweaking, I guess. And that's basically it. And then they shipped it as their own product. Yeah.

PF So first of all, tell us what Checkly is, it has a delightful raccoon, [Tim laughs] as its logo. So frankly, at this point, I'd prefer to use it over AWS, which does not have a delightful reccoon.

TN That's absolutely true.

PF So from there, aside from the raccoon, what should I know about this company?

TN Checkly is active monitoring for developers. This means that we do two things. We check your API's. And we check your web apps. For API's, we do API monitoring, let's say at the payload levels, we can check if it's responding and responding quickly, if the payload is correct, all those kinds of things. For your web apps, we allow you as a developer, to create these scripts, and we run them for you in the cloud. You can you know, click around on your website, fill shopping carts, do logins, all those kinds of things. And if things break, we send you feel alert, like SMS, Slack. 

SC Yeah, these are very cool. I've used these in the past. They're great. And especially as someone who hates CSS and is constantly breaking it, that version of front end testing is great.

TN Yeah, it's, it's it's extremely powerful. Because in the end, you kind of want to know if things work and it sounds obvious, but unit testing, integration testing, all kinds of things. They give you security.

SC It's all fine, yeah, you have no idea if your button has gotten so big that you can't get in the textbox.

PF It's only screenshots, I've solved this in the hacky ways in the past, the best thing I ever did was for one executive, she was in charge of like, it must have been 60 separate sites, all sort of big media properties. And I made I would auto screenshot them every hour and then give her a movie at the end of the day that she could watch. So she could see the change and sort of like, oh, the ad implementation, it happened over here or like, wow, that there's no headline or like, nothing's loading. And it was amazing what it would reveal to just look at the sights every day. So this is a power tool for that with the API connected.

TN Yeah, it goes one step further, because I think snapping a screenshot, which we totally support is really cool. But you also want to exercise the really crucial bits. So can I still log in? Is my shopping cart still working? And it just gives a really good feeling. If that's just checked every 10 minutes. And on each deploy, that's kind of the little trick we do, too. If you deploy a new version of whatever, we can get a web hook and we check it right then at that moment, so you get that extra bit of confidence, like, hmm, we didn't break production this time.

PF Why is this such a hard problem? Because I feel like I'm on year 15 of trying to get good accurate screenshots. And let me just describe some of the things that you face when you try to do this. This is sort of a, this one drives me bananas.

SC Oh yeah, it's a huge pain.

PF So it's like, alright, I'm gonna screenshot. Okay, well, first of all, there's sometimes a problem it like Firefox promises a command line screenshot or it comes and goes with version, sometimes you can get it to work, sometimes you can't, okay, there's in browser screenshotting, which at least thank God, that kind of works. But then you want to automate it. Now you need to let the page load for three to five seconds. Like that's hard to get.

SC HTML 5 was like we're doing it, we're making it simple.

PF Oh, and you know what, and then puppeteer all every time I go in there. And I'm like, Oh, I need somehow to make sure that it can recognize my cookies. And it's always like, semi documented, and I can never quite get a screenshot of the real thing I want to see. So anyway, that's me complaining for a minute. Why is this space so hard? Like when I hit I use the browser, I see things on the screen at all work so hard when I go to automate it. It's really, really challenging. And I'm assuming you've lived with this in ways that I haven't.

TN Yes, well, this is a little actual interesting thing here. When I started building, I started building Checkly by myself, by the way, we're now 10 people, so we've grown a little bit. 

PF Yay, congratulations. That's great. 

TN Thank you. Thank you. Thank you. So when I started Checkly, I wanted this functionality. And I was doing it with Selenium. And then the guys at Google and girls released puppeteer. And I basically just took the back like, this might be something interesting, this is gonna be something. But the core of the problem is in the end that a browser is as async as it gets, you never know when something is done. This is a really, really tricky issue. And I can give you more examples. Sara mentioned, html5, Canvas, video, overlays, transparency, how do you know when a thing is loaded, and it's visible? It sounds so easy, but if you dive into it, it's actually really, really tricky. 

PF Well, one of the things for those screenshots of all those media properties, right is essentially they all popped a modals asking to subscribe, and things like that. So you know, half the day if you mode so that now you have to log in to all of them, right? It's just it's infinite. Okay, so it's async. It's basically like 20 little browsers inside of every webpage. Right? It's it's different applications, different platforms.

TN And what's even funnier is that sometimes the internet is just terrible. It's just something just doesn't load. And you click refresh, and it does load.

PF I mean, it's terrible. Top to bottom, we have to give it to the internet for being full stack terrible. Like it's terrible at the infrastructure level. It's terrible at the interface level, and then the content is terrible. Like it's not.

TN Yeah, well it depends on where you look, come on. We have I mean, this is literally the feature, we double try or double check everything. So if something fails, we just run it again. Because we want to make sure for our customers like, was this just one of those occasions that the internet just said, No, I'm not happy, because you still, there still is 1% of let's say, false positives or flakiness. And that's what we're battling right now. Or actually credit where credit's due. This is the people at Microsoft and Google that are working on that with their respective frameworks that they are publishing. But it is a super tricky, tricky business.

PF What are those frameworks? I'm curious. 

TN So Google does puppeteer. That's the one that came out first. This is roughly two and a half years ago, I think. And then there was a little bit of a power move, I guess, I don't know the details. But most of the folks working on puppeteer moved to Microsoft. And there they started working on playwright and playwright is uses up to a degree I think 99% the same API's, but it has a couple of more interesting features. And it does multiple browsers more reliably. So they came straight out of the gate with Hey, we support WebKit, chromium, and Firefox. I think in the end it's Selenium is the old, the old guard and the new guard is puppeteer and playwright and we're going to see where this is going to go. We, don't know.

PF What are your thoughts? Should we just throw away the DOM? Where are you at?

SC Should we have only one browser sponsored by Budweiser? [Tim & Paul laugh] Yeah, it's a tough one. Is that your biggest frustration like handling things across browsers? I mean, yeah. When you're thinking about that stuff, like, are people picking them for their browsers? Are they doing all the browsers? 

TN So we're making it very simple. We just only support Chrome right now.

SC Yeah! [Sarah laughs] Chrome on a 13 inch MacBook Air. That's, that's all you need to do. Yeah. 

BP This is also how Sara builds her websites.

SC Yeah, yeah, exactly. Yeah, that's it. If you don't have that, then we're not interested.

PF Let's come back to sort of how we met. Right, which is, it seems tricky and challenging. And I give you a lot of respect, right? You're building a fundamental cloud driven service and an organization like AWS comes in, it's like, yeah, we're going to help ourselves, right. And then everything is open source. It's all it's all kind of aboveboard. It's just a little weird, as a small org, how do you compete at that scale when you are little? What have you figured out?

TN Well, that's a very interesting topic. And a very good question. In the end, do you compete? Yes, of course you do. But we cannot compete on so many things. Of course. I mean, I have no idea how many people work at AWS, it's probably a lot. We were 10 people. You you compete mostly right now, at this moment, in what's called I guess, DX. So developer experience, UX, also just what it looks and feels like. And I think we're doing a great job there, by the way, and we get that feedback from our customers. We have some really interesting cool customers from the Bay Area, hip tech startups. And they tell us this.

PF Now I'm I mean, the site is clear, the pricing is simple. Like I'm looking at your pricing page. And it's like compared to many a pricing page. And also Amazon pricing or other other large cloud service pricing is is very opaque even when they try to be, like this is $1.20 pay as you go for 10,000 API check runs, like, okay, like I can do that, I can go to the ATM right now.

TN This is very cool, actually, because we launched that new pricing yesterday,

SC Oh you're getting live feedback, that's great!

PF Here's the question, is it showing me dollars because I'm in the US? Or is it? 

TN No, it's showing you dollars because literally the dollar is hard coded in the html.

PF Okay. Okay. I feel better because I was about to get, you know, like, kind of, wow, they figured that out, that would be hard one. And a nice free tier, I can check an API 50k times, which is what I do on Twitter. Yeah.

TN So this is literally since yesterday, we launched our free plan. So I I honestly hope people are gonna sign up for it. We're gonna, you know, really launch launch it next year. So January, we're dark launch it yesterday. We're looking at all the stats what's happening, but it looks awesome. And I'm on call also. So I hope nothing breaks.

PF Oh, wow. So right in the middle of this podcast, something could go off.

TN I'm looking at my clock now, I think, yeah, but the team is still online, they will have to deal with it now. Yeah.

BP There was a big event was earlier this week or last week, GitHub universe happened.

PF Wait, what's GitHub universe, just is that like their dream force?

SC Is it a parallel universe to our universe?

PF But it's cool because it's versioned.

SC Yeah, everyone's an octocat in that universe. 

BP Yeah. It's like the Marvel Universe, but the stars are all cats.

PF The problem is it's supposed to be a versioned universe when something changes that you don't like you're supposed to be able to revert but in reality, you just have to blow away the whole universe and start over again. [Sara laughs]

SC Yeah, reinstall. It's really annoying.

BP Sara, you made that joke. But the whole conceit of the show was that they animated the otocats. That was like, that was everything. 

SC Yeah, I love that. I love that so much. I feel like there's a lot of value in animated octocats.

PF I do too. That's what our industry needs.

SC We're gonna talk to a bunch of what happened there. But one of the things that I saw up top was this sponsors thing, and I thought it was maybe relevant to the discussion, which is that there now is going to be a way for big companies to pay to support open source projects that they rely on. Right. So AWS and Amex were two that were cited in this wall street journal article. There are people out there from small teams, as Tim was talking about who may have built them, and that then becomes essential. This gets back to Sara's favorite XKCD. You know, the internet is held up by a tiny little pillar that some random person built once upon a time. And so back when we had our first podcast about Tim's issue, we kind of talked about this and decided there was no great way for big companies to financially support. Do you guys think that this implementation this feature has promised to become that thing? And, and I guess also, like, what are some of the you know, potential tensions there of having like big companies pay directly to support what they want?

SC Yeah, I think this is really, I think this is really great. So GitHub sponsors, has been around for a little while, which is the ability for people, for individuals to pay for open source projects that they like. And what they did recently was open it up to corporations. I think that corporations have been has been doing this for a little while just not through GitHub, I think this might make it a little easier for them to do this. The model I've seen a bunch in the past is for them hiring people that are working on the projects full time.

PF Or monetizing around it as a company like red hat, right? Like there are, there's a couple ways but this idea where the independence of the open source project is preserved. But money comes in, you know, in a kind of structured way is still pretty novel, even $8 million years into open source.

BP Yeah, it feels like big companies are increasingly sort of realizing the value of open source, and the way it makes developers see them and the way that it can sort of leverage and scale up because people want to start contributing. And this is just maybe an extension of that. I don't know, Tim, tell us what you think.

TN Yeah. So I was very happy to see that feature where you with a company organization account on GitHub can be a sponsor, because I literally asked that about a year ago. That question I think I added that's from GitHub, like, Hey, what is this coming? And we're he said, we were we are working on it, as well, it's because it's not only for big companies, where 10 people, as I mentioned earlier, we donate 1% of our revenue to open source. And I'm now doing that from my personal GitHub account. Which, you know, which works, but it's a tax nightmare. It's a little bit awkward. And I'm going to port that over to our, you know, our Checkly GitHub account. Because that makes way more sense.

PF No, yeah, we we do the same word sponsors have a couple different have at least one project, actually. And we've donated others. And it's just like, it's not convenient. Like it's it puts a burden on the entrepreneur on the open source developer, and it puts a burden on the organization. So I think it's good. Part of me gets a little sad, though, 'cause it's like tip jars versus people just sort of paying their taxes. Like, I feel like, I guess we're always gonna have a tip jar model here. It's like, good job, guys. Thanks for helping us build our multi trillion dollar cloud services. 

SC Yeah. Yeah, we'll give you $1,000. 

PF Yeah, exactly.

TN This is Paul, this is completely correct. I'm 80% really happy with this. But there's a 20% of it, I'm a little bit cynical, where I said like, this is not the end salute, this is not the solution, in the end, that really gonna solve anything, some people are going to do really well. But those are also the people that everyone knows there's going to be, I'm pretty sure like, like a little bit of a pyramid where there's only a couple of well known developers with well known projects, raking in 1000s. And the vast majority gets nothing,

PF Well sort of like, you know, we'll spend $6,000 on a phone, and then people just kind of look at that app that cost $2.99 and be like, then look at the free one and do in-app purchases. And either way. So it's just like, I just look at it a little bit like that, where I think that, you know, what's the end game on this? It's a lot of open source apps that when they run on the console are asking for essentially have the equivalent of in-app purchases, where it's like, sponsor us! Sponsor us! Sponsor us!

SC Yeah, I feel like a lot of NPM scripts starting that way from now on.

PF You know, the reason that very large organizations have trillions of dollars is in, I mean, partially because there's an anti competitive structure to American capitalism, but besides that, also, because they're really good at not giving money away, right? Like, like, you know, Google, Amazon, Apple, they're good at keeping their money. And so I think it's, you know, they have a lot of structure on that. So it's not like, it's not like department heads can be like, get out the Amex, we're going to GitHub, it's Christmas. We're not gonna see that. [Sara laughs] 

SC I would love that, that's the kind of Christmas that I want. 

PF At least a little structure here is good.

BP I mean, Paul, you said at the beginning of the episode, like what about licenses? And we sort of talked through that, on the last episode we were talking about this, we were joking, you know, what if there was a license you could implement that was like well, if you're an individual, this is free, if you're a startup you know, with 10 people this will cost you $1 and if you're a trillion dollar corporation, you can use this but the license will cost you X, right, that would be like the pay your taxes version.

PF Well, we do have that is software as a service, you get that pre free pricing tier and then there's like $29 personal and then there's always that one on the far right that's like enterprise, get in touch.

SC When you need to talk to a human, you know it's a high price.

PF I love enterprise get in touch. Yeah, 'cause you're also like you've just you've just told everyone like, 'cause no one wants to pick up the phone, right? No one wants to.

SC Yeah, kind of like wanting to quit the gym. The 'get in touch' people for enterprise are the same people that you have to talk to the gym. 

BP You're gonna have to bring the cable box in.

PF Oh, yeah, that is, ouff. Ouff. 

BP But the fun of the open sources that you can do it on your own, and then it can become something bigger. Like we don't want that to happen, force everybody to build a company around their open source project in order to monetize it. That's another nice thing about the sponsor thing, right? Like, it could just see your side project, your individual project, or this sort of loose collaboration of, you know, people were doing it together.

TN I think, I think honestly, really running a company and is something quite different than shepherding your open source thing. It has nothing to do with each other. Actually, yes, they both use the same code. And that's literally where it ends. There's so much more that you need to do. So there is no like, either or like, or I start a company, or I'm going to be, you know, free roaming open source dev, there's so many stages in between, because running a company is not for everyone, you know, it's it's takes a lot of other skills and stuff. So I think it's a very good thing, if you can get, you know, a couple of 100 bucks or 1000 bucks for this thing that you built for yourself, that is awesome already. And that's why I'm still very positive about GitHub doing this. But you know, it's not gonna make you, it's not gonna turn you into a company. Never.

PF I think that's a very critical point. That is very wisely put. This might go as far as helping you pay rent. But it's it's different than forming a business and making decisions about revenue and prioritization. And kind of just like, I feel the same way, where I'm like, Okay, well, this, this will help people with the hobby aspects. And this will help the big players have an easy way to ask for revenue.

TN And it's great for advertising to developers. 

PF Yes, that's right. 

TN This is a hiring tool too, because you can put it on your corporate page, you know, hey, we're doing this. It looks great. And we're all in the GitHub thing. I think a lot of companies are gonna get into this because it just looks good. Which is, which is cynical me speaking. Yeah.

PF It's the strangest thing in history is that Microsoft is becoming a pretty good pragmatic shepherd, of open source. It is just the weirdest irony. But like, Okay, alright. I mean, I'm glad it's happening. Like it happened. Good.

TN Yeah, they're kind of the lowly ones out there. But they, but they actually show us that it's possible for mega corp to actually do stuff where everyone's like, that's pretty decent. Really. I like it. 

PF They're doing fine. And they can still act like a giant terrifying mega corp thrusting Slack into the arms of Salesforce, like everybody you know, they can, they can still be Microsoft and support open source.

[MUSIC] 

BP Alright. Well, I love this because we got our news in and we discussed everything with Tim and all wraps up with a nice, neat bow. Tim, every week we do something called the lifeboat badge, we shout out somebody on Stack Overflow, who answered a question that had a score of negative three and got it up to a score of 20 or more. So today's lifeboat goes to Ravindra Bagale, how to convert integer to character array using C. Thank you. 

SC Woah, I can't believe that's a one that just got answered. 

PF Very good. 

BP Well, the question itself is seven years old, but he got an answer that people really liked. 

SC Oh nice, great job.

PF So Tim, how do people get in touch with you? And how do they learn more about your company? 

TN Oh, that's very easy. I think the best thing they could do is go to checklyhq.com. Check out the product. People can email me, tim@checklyhq.com. All the info about the open source project is also all on the company website. You can check it out. I'm on Twitter @Tim_Nolet. And I think that's all my social stuff I have.

PF Excellent. 

BP Alright. I'm Ben Popper, Director of Content here at Stack Overflow. You can find me on Twitter @BenPopper and email me podcast@stackoverflow.com with questions and suggestions. 

SC I'm Sara Chipps, Director of Community here at Stack Overflow and you can find me @SaraJo on GitHub.

PF And I'm Paul Ford, friend of Stack Overflow and you can check out my company Postlight.

BP Cool, alright everybody, it's getting close to the holidays. Don't forget Jewelbots are available.

PF Jewelbots!

SC Yes! Jewelbots.com

[OUTRO MUSIC]