Good morning, everybody. All right, let's do the Wednesday thing, where everybody stands up. And people have started to realize that I'm actually serious about halfway, well, not quite halfway through the week, but we're getting close. All right, so today we're going to talk about, we're going to finish talking about context switches, the actual mechanism that we use to switch between threads, so that we can produce the illusion of concurrency. Next, we're going to talk about threads, right? We talked a little bit about this at the beginning of class. We said a thread is one of the abstractions that the operating system creates that allows processes to use the CPU more efficiently. So we'll go back to that abstraction. We'll talk about what is a thread and what pieces of state are associated with a thread. We'll briefly discuss differences between threading implementations, right? So we'll try to justify why would you write a multi-threaded program? We've talked a little bit about this before, but then we'll discuss different ways of implementing user space threats. So historically, user space threads have been implemented both in user space libraries, and we'll show you a little bit about how that's possible, and also in the kernel itself. And there are pluses and minuses to either one of those. And then finally, we'll talk about the kernel's view of threads, different thread transitions that go on within the kernel as the kernel moves threads back and forth on and off the CPU. So the AutoGrader is alive again, and it will start grading some of your scripts today. And once that happens, then we'll be able to grade your scripts and assignment zero implementations. And then pretty much at that point, everything else should just start to work again. So you guys should be able to submit. For assignments one, two, and three, there aren't any scripts to submit. It's just implementations and code reading questions. And then for assignments two and three, there are design documents that need to be submitted. Those are clearly not graded by the AutoGrader. I wish we could, but those are graded by Humanize. So those will be graded by the staff. All right. Any questions about assignment logistics? I know some people have been having struggles saving answers, Sarah. Yeah, I saw that. OK, yeah.  I'm sorry about that. I'll. Oh, interesting. OK, well, OK. So saving should post something to the server. If it does it, then it's not saving. So I do think it has something to do with the JavaScript. And if you guys, are you using Chrome? Yeah, it's a VM Firefox. We have the same problem. Yeah, Jeremy. Yeah, OK. So there are also some issues with resubmissions that we'll try to fix. But the saving thing I will look at, and apparently this is broken in the VM. So that gives me a good place to start with reproducing it. But I'm sorry about these sorts of issues. But if you can get them submitted and into the system, then we will grade them. And maybe as a backup, it would be nice to keep them at a text file somewhere, so you don't have to. I know it's a pain to put them back and forth into the browser. But I will definitely look at the saving issue today. All right, so let's review. Well, first of all, do we have any questions about the material that we covered Monday and Friday? So Monday we talked about context switching. We gave you a historical overview of limitations with the CPU and how operating systems have tried to address those. So any questions about that material before we do a little review? OK. So when I transition between two threads, what do I call that, Robert? Context switch, all right? That's what it is. So what were some of the problems with the CPU? We talked about limitations with the CPU that the operating system is trying to correct or overcome or improve upon? Manish? What's one of them? Time? That might be a move in the right direction. Let's see, Kevin. Sure. Jim? Well, OK, so that's a good point. So how would you express that problem? The problem is that what? OK, but what creates this issue of usage in the first place? Yeah, Tom? Yeah, so one problem is that the CPU is much, much, much faster than other parts of the system. And part of what we do to try to use the CPU efficiently is identify delays in other parts of the system and try to hide those delays from the process. There's no point having a process sitting there, a thread sitting there waiting for the CPU to do something when I could use that time more efficiently to let something else run. So while I'm waiting for something slow to happen, I might as well grab the CPU and give it to something else. If I didn't grab the CPU and give it to something else, what would I be doing? We talked about this as a certain type of scheduling approach. What is the kind of scheduling where I don't switch between threads? Just give the one process the whole machine and let it run until it's done? Yeah, Sarah? Yeah, we call that batch scheduling. So that meant I give the entire machine to one process, one application, and just let it run until completion. And one of the problems with that was the mismatch between the speed of the CPU and the speed of other components on the system. But what's the other, I would argue, even more fundamental limitation with the CPU that we're trying to address? Is it Satish? Yeah, basic, basic, basics. Yeah? There's only one CPU. There's only one, right? Or some small number, right? Maybe not one anymore, maybe four or eight, but there's a smaller number of CPUs than there are available things that the system is trying to do. And again, the CPU is also far faster than other parts of the system. So these are limitations. To some degree, the second one is an opportunity, as well as a limitation. It gives us a chance to use those delays to do other things. We just talked about this. What is batch scheduling? Anybody? This is a remembering what I said two minutes ago question, Wembley. Yeah, I allow a job or a processor and applications to just essentially run with full access to the entire machine until it completes. And this was a form of scheduling that was done on early computer systems to allow them to do multiple things, but without requiring that I do any more fine-grained resource sharing. So I just give you the entire machine, I run your thing until it's done, it produces some output, and then it gives the machine to somebody else. And what's the problem with this? I wonder who came in late. What's your name? Yeah? What's your name? Ravi. So what's the problem with batch scheduling? Why wouldn't I just hand over the machine to your process and let it run until it's finished? Well, but that's OK anyway. Your job will probably run faster if it has access to the entire machine. Help him out. Harish? Why is it item? That's true. Yashas? Yeah. Why is the machine idle most of the time if I'm doing batch schedule? And what parts of the machine are idle most of the time? I liked that answer. And then you took it in a bad direction. The CPU is idle most of the time. While the disk is fetching data, while the network is moving data around, while even to some degree, while memory is loading and storing information, the CPU is idle. And so this is the reason that every slow device, anything that takes longer than the CPU and everything takes longer than the CPU, will cause the CPU to stall and just sit there. And this is, again, this is a problem with batch scheduling, but it also creates the opportunity to do things more intelligently. So I have a uniprocessor system. One processor, how does the operating system create this illusion of concurrency? Is it? What's your name? Mike. How do I do this? I have one processor. I want to look like the machine is doing multiple things at once. Yeah, I'm going to rapidly switch back and forth between different processes, so it looks to the user as if things are happening simultaneously. And what do I exploit here to do this? Does anybody remember? What fundamental limitation of a computer system is the CPU able to exploit by doing this? Whose wait time? Yeah, user, your limitations. If suddenly human beings, if suddenly we all took some sort of pill, maybe some of you guys take these pills already, but if suddenly we all took a pill that caused us to be able to detect, what is it? I think dogs, dogs can actually see much higher frame rates that humans can, which is, I guess, one reason why some dogs aren't interested in TV, because it just looks like a series of pictures to them. It doesn't look like something moving. It would look if I showed you a very slow flip book. So if suddenly we all took this pill and you guys were able to see things much, much, your reaction taps are much faster, then we'd have to redesign computer systems. We'd have to change all these scheduling quota, because you would notice. You would see Firefox repainting the screen. Luckily for us and for the computers, that pill doesn't exist, or at least it's not legal. And people aren't taking it that off. So yeah, what we're doing is we're exploiting. Uh-oh, it's happened again. One of these days, I'm just going to see if I can power through this slide without fixing it. But clearly it needs to be fixed. Sorry about this. OK. So now finally, how does the operating system make sure it stays in control? Now we talked about this problem where if a process is running, I've given it control of the CPU. And if for some reason there's no hardware activity and the process doesn't explicitly request help from the operating system by making a system call, it could potentially maintain control of the CPU indefinitely. So how do I make sure that that doesn't happen? Yeah, definitely. Yeah, I use an interrupt. So that's the mechanism. But how do I make sure that periodically I get this chance? Yeah. Yeah, I use a timer. It's Akshay. Yeah, so I use a timer interrupt. So every system, every modern system that implements this type of, the name is escaping me, but any system where the kernel is going to periodically rip the CPU away from one thread and give it to another, has to have a mechanism to do this. And it's all done by using these timer and episode are generated by hardware. So I just attach a timer to my CPU and I just run it. And every time that timer fires, I enter the operating system and I look and I say, do I want to keep running this thread or should I start something else? OK. Any questions about this sort of stuff before we keep going? Yeah, I'll show you. Is there a way of measuring the context of switching timing within two threads? Measuring what about the context? Sure. Yeah, absolutely. There's overhead to this. We're about to talk about that. It's a good segue. Any other questions? So as Anshil pointed out there is, OK, we just talked about this. Where? Hold on. We're going to come back to that in a second. So remember, providing the solution concurrency means that I have to stop threads. And if I am not willing to allow threads to help me figure out when to stop them, then I'm essentially going to stop them roughly at any point. So at any point your thread can stop running. Another thread might run. And when your thread starts running, some things will be the same and other things will be different. We'll talk today about what the operating system will guarantee will be the same and what things can potentially change. But one way of thinking about it is the processor state should look the same. In between instructions, the thread should not be able to tell that it was stopped, another thread was started, ran for a while, and when the thread starts running again, it shouldn't be able to notice.  Clearly, I was stopped and somebody else ran. But it shouldn't be able to tell by looking at the CPU state. On the other hand, the memory state that it's exposed to can change quite a bit. And that creates a lot of the synchronization problems that you guys are going to be hopefully finding and fixing and thinking about when you're writing your operating system. And certainly, things you have to think about when you write multi-threaded user programs, right? That's certainly as important as not more important in the operating system. Yeah, auction. Is the time fixed for the time? Yeah, Jeremy asked a question about this last time after class. And normally, it's a fixed rate timer. That time frame doesn't complete the execution that you wanted to do. Sure. Switch back to the other process. Get back to date. Yeah, we'll talk about that today. But the idea is, if I'm in the middle of doing something, then I'm in the middle of doing it when I come back. Firefox may be trying to repaint, or trying to send a network packet or something. And it's in the middle of constructing a request, and it gets context-pitched. And when it comes back, it just keeps going. Hopefully, and it doesn't, I don't get much control over this as a user program. This is what we're talking about. At any point, I can be stopped, other stuff can happen, and I can start to run it. And if I'm in the middle of doing something, I just go back to it. As a programmer, you're not really exposed to this very much. You write your sequential code. In reality, your program is constantly being stopped and started. But because of the context switch mechanism we're talking about today, your threads don't notice. Unless they're trying to share state and other things are happening, we'll talk more about that quite a bit in the next few lectures. Jim. OK, this is a good question. A little bit of a review. So I set up this hardware interrupt to fire periodically. What happens when the interrupt fires? Three things. What happens when the interrupt fires? This will definitely be on an exam. We've covered it like six times now. Yeah. It goes into kernel mode. It goes to CPU, goes into privileged mode, right? What's the second thing? Sheldra. Three things. Jenny, you want to help? What's that? Yeah, it records some state about what happened. And then what else? Yeah. Yeah, well, the operating system gets control, but how does it happen, Jeremy? Yeah, I jump into my interrupt service routine. So what happens is every time that interrupt fires, this happens. I'm going to show you a little bit of this today. How many people have been in recitation this week? Then you saw a little bit of this as well. You saw some of this happening on your own system. You saw the interrupt service routines. You saw exactly what happens. I'm going to show you a little bit of that code again. So when we talk about thread state, again, a thread is this abstraction that is designed to encompass the state that the processor was in. So what and some other state that's associated with the thread. So when you think about a thread and the state that I would have to save, so again, I'm going to stop one thread. I want to preserve as much information about what that thread was doing. So that I can restart it, what do I need to save? Bam, timer interrupt happens. I'm in the interrupt service routine. What information about the processor I need to save immediately so that I can restart it? Yeah, it doesn't. Yeah, so I need to save. Who knows what this is called? How would I save this information? Yeah, Robert. Yeah, the program counter. I need to save the program counter. Program counter is a special case of another larger class of things that I need to save all of, Satish. I need to save the registers. Like, that's what the CPU is.  So if I'm going to put everything back, I mean, think about it.  And they are going to sort out the M&M issues. But they also need to make sure that when you come back, they want you to not notice at all that she's been there. So they need to carefully look at everything in your house exactly where it was. Take detailed measurements so that when they bring all your stuff back, they can put it back in the exact same spot. The goal is that the thread has no idea what has just happened to it. Registers, and then what else? What's the other? So the registers encompass the CPU state, and then what's with one other piece of information? What else do threads? Where do threads store sort of local state that's not in registers? The page table is actually not a per thread, so that's actually shared between threads. But you're getting closer. Yeah, the stack. So in C and other languages, threads have a private memory area called a stack that they use to store local variables and other things that aren't stored in registers. So when I stop a thread, I need to save two things. I need to make sure that I save the registers, and I need to preserve the stack. OK? Essentially, what happens in the kernel is that we rely on memory protection to keep the stack unchanged. We do need, however, we do need to make sure that we create a new stack. We adjust the stack pointer properly when we switch threads back and forth, because otherwise threads would be using each other stacks. But basically, the way that we preserve the stack is we just make sure that whatever happens next doesn't use the same memory, and we rely on the memory protection mechanisms to keep the stack unchanged. So here's another good question. How does a thread know where its stack is? Yeah, Amit. There's a stack pointer, and the stack pointer is a what? Tim? He's looking confused. It's a register, right? So when I save the register state, oh, I got both of you guys. When I save the register state, and you guys both had the right answer. When I save the register state, I'm also saving the stack pointer. So I will also record the exact point at which the thread had was using its stack. And when I restart that thread, assuming that I can keep that memory from being altered, the stack contents will be unchanged. So if you remember, when we enter the kernel in OS 161, I'll show you a little bit of code here that Aditya has already looked at. The thread state is the first thing that we save. Maybe not exactly. I mean, it's like 10 instructions later. We go into this big block of code that's saving all of the thread state. Why is that? Why would that have to be the first thing that we would do when we enter the kernel? I don't know. Yeah, but it's not just a stack or memory, right? The instructions that I execute on the processor are modifying the registers on the processor, right? So as I'm running, if I don't quickly make sure I save all this state, I'm going to start altering it, right? And then I won't know what it was, right? So for example, I need to know exactly what value the process had in register A3. Because if I don't, then eventually the compiler will have outputted some instructions that use A3 for something else, and then that register will be gone, right? If you look in OS 161, what we call this saved register state is a trap, right? And the first thing that the kernel does or one of the very, very first things, right, is it allocates space for the trap frame, and it stores all the registers into that structure, right? So there's a trapframe.h, I think it's called trapframe.h. It's somewhere in the machine dependent code. And one of the first things we do, again, is just we enter this block of code, which goes on and on. And again, there's a big block there with maybe 20 or 30 of these instructions. And what this is doing, this is saving all of these. This is saying, take the value in T9 and store it in this memory address, right? And what we've done is we've allocated space on the stack for my trapframe. So what's wrong with this, right? What do I need to make sure of before I can start saving the values of the registers on the stack? Tim, I wouldn't want them to be cleared, right? Because I want to know the exact state that the process had them in, a grim. Remember, there were a couple of things we needed to preserve about the state of the process, right? Ravi. OK, but interrupts are off here, right? So this is a nice big comment, right? One of the things you guys should appreciate, just as an aside about the OS 161 source code, is that all this is for your benefit, right? So when you guys are looking and browsing through here, all of these long comments, you'll never find this stuff in Linux, right? In Linux, there'll just be thousands of assembly instructions, and it's like, good luck trying to figure out what they do, right? Because they're written by someone who is really smart and who looks at that stuff and just writes assembly and is asleep, right? And the reason this stuff is so well-commented is so you guys can understand, right? So it's really kind of a nice thing that David has done here along with this code, right? Again, the state for the thread consisted of registers and what else? Daniel. Stack. So I'm saying I'm storing the registers on the stack. What's wrong with that? If I'm still using the same stack, then I'm potentially modifying the stack that the process was using, right? Why is that okay here? There's an answer in the comment. Yeah, because I've already saved the old stack pointer, right? So up here in code that I didn't show you, I already saved the stack pointer that the process was using, and what I've done is I've repointed it to a new kernel stack that's a page of kernel memory that the kernel uses as a stack when it's executed, right? So even before I start saving this trap frame, what I've done is I've switched stacks, right? So I said I'm not gonna use this old stack, I'm gonna use this new stack over here, and now I can save my registers into a data structure on that stack without worrying about modifying the stack that was there, right? And then again, here's this trap frame, right? This is the trapframe.hStructure, and you can see it has space for all the contents of all the registers, right? And yeah, I just answered this question, but there's two issues here, right? The first thing is I don't wanna pollute the user stack, but when we start talking about memory management, I also don't trust the user stack, right? I don't believe that the user stack points to memory that is potentially not bogus, right? And so I don't wanna touch it, right? Because it's possible that the user program is trying to mess with me and it loaded some bogus value into its stack pointer register right before it started, right before it made a system call and it's trying to give me to overwrite that memory and to do something nasty, right? So I don't believe this fact, right? All right, so now I've entered the kernel, I've saved the state associated with the thread, I've done whatever it is I'm going to do, right? Maybe I've just started to start a new thread, maybe I'm returning to the old thread. What do I need to do? Oh God, I can't abandon that thing. Wait over there. What do I need to do when I return, right?  And then they put it all into this big box and they shipped the box away, right? Now I'm about to send you back to your house, what do I need to do? Yeah. What's your name? John. Yeah, so what I need to do is I need to reload all those registers and take this trap frame that I saved and reload all the registers, right? And then what's the last thing? I don't know if I did you, it got you all the way through the return, right? But the last thing that happens, right? On that exit path out of the kernel is I call this special MIPS instruction called RFE, right? And RFE is the dual of syscall, right? RFE kind of undoes the exception state that syscall created, right? And RFE will essentially put you back into user mode and allow the process to continue running as well, right? But it's really important, so, and Adich is doing a great job of this in recitation, but as we go on for the next few weeks and we start talking about this gooey stuff, I don't do too many examples like this in lecture because I like to leave this for recitation, but it's really important you guys go to recitation and allow Adich to walk through this stuff, but it's also important to remember that, like, you guys have access to all this code, right? So this doesn't have to stay abstract, right? If you're confused about how something works, go read about it in the OS 161 source code, right? At some level, like, that is the text for this class, right? And you guys can see exactly, right? What happens when I handle an exception, every instruction that's in there and the different paths for interrupts and system calls and all sorts of things, right? And again, the code is not only there, but it's very nicely set up and it's commented in a way that's designed to aid your understanding, okay? All right, so, somebody, Anshil, I think, brought this up before, yeah? So the... Yeah. Yeah, yeah, yeah, this saved state, right? So remember, I had this on my stack somewhere, right? And this structure called a trap frame, right? And on my way out, I still have this kernel stack that I set up, right? That I'm using as scratch base. So on my way out, I reload all the registers from the kernel stack and then when the last things I do is I have to switch the stack point, right?  And the RFE will put me back into user mode. So it lowers the privilege. So, and the mode, say RFE is not called for some time. Well, I mean, RFE has to be called, right? So there's, yeah. Like, we are still in the kernel mode, right? Yep. But I'm not, so what I said before is I don't trust the user memory, right? But I've never touched user memory, right? I've loaded the registers from the CPU into kernel memory that I trust and then I've loaded them out of kernel memory and back into the registers, right? Then I do point the stack pointer back at a user address, right? But I don't do any reads or writes to it, right? It's like one of the very, very last things that happens is I do that and then I jump back to whatever, I have to set the PC back to what, sorry, the program counter, back to what the program counter was that transfers instruction back to wherever the user space code was actually, right? Yeah, great, get a question. Yeah, yeah, exactly. And you guys will see places, if you walk through the system called code, the system called handler is actually take values out of the trapper, right? So for example, the arguments of system calls are passed in specific registers, right? So what happens is when you make a system call, the trap frame saves all that register state and then your system calls will actually process it, right? And in the case of a system call, you'll modify the registers, right? Because that's how you return about, right? So the calling convention is that, you know, you pass arguments and certain registers and I think on the MIPS it's A3 is the register that holds the value of the system call return, right? So your system call will set that value to indicate what happened, right? So usually zero if everything was okay, right? And then there's different values indicating different types of error. And then, so when you come back, so again, I mean, this is a good point, right? So there's a difference when it comes to system calls versus context, if there's a context switch, right? A system call will send you down the same path, but the system call handling code will modify the trap frame, right? And it will modify the user's view of the world, but that's because the user asked it to, right? The user said, hey, do something for me. And I did it, and of course it's world changed, right? Because it needed to. When I do a context switch between threads, right? When I stop a thread that's running, that didn't make a system call, right? Or I process a hardware interrupt, I need to set up that thread so it looks like nothing happened, right? So there's a small difference between a system call where the thread expects something different to happen, right? Because it asks me to do something on its behalf and, you know, a timer interrupt or some sort of other kind of hardware interrupt where the thread was just going along, minding its own business, didn't ask me to do anything and then suddenly this happened, right? So there is a difference in the semantics between those two cases, yeah? So what you'll see is that usually when you're processing some of these interrupts, you disable the timer, right? Because in that case, you know, if I'm already in the interrupt handler and I'm already processing, then I don't necessarily want to handle timers, right? And there's cases, you'll see cases in the kernel where I disable interrupts and that's usually because I'm doing something and I don't want to be bothered by the time, right? Why did interrupt handlers that are thread safe is difficult, right? So normally interrupt handlers in certain places want to make sure that nobody will interrupt them, right? And the kernel can do that by changing the interrupt mask on the processor, right? Processes can't do that, right? So a process can't stop the timer from firing, right? But when I'm running in kernel mode, I can't, right? And sometimes I do because I want to make sure that I'm not stopped, right? That's a good question. All right, so let's see here. So as Anshiel pointed out, these are great questions, right? As Anshiel pointed out, there is this overhead, right? To getting in and out of the kernel, right? To context switching to interrupt handling to making system calls, right? And that overhead consists of, you know, basically saving all the state, right? Saving all the state of the trap frame, right? Running in the kernel, doing something, right? Whether it's if I hadn't have to handle the interrupt, maybe I have to look around and figure out what to do, maybe I have to read some of the data from a device or whatever. And then transitioning back to the thread that was running, and this overhead limits the rate at which we want to perform these context switches, right? So, again, there's this nice balance here, right? If I wait too long between context switches, then I start to violate these user perceptual limits, right? Then you start to notice, right? Then the computer starts flickering at it, right? If I go too fast, right? Then what happens is the amount of time I spend in the kernel figuring out what to do starts to dominate and I don't get as much useful work done, right? So modern systems, you know, choose some scheduling quantum that is a balance between these two desires, right? And depending on the type of system you're running, you know, maybe if you're running a server workload, you might want a longer scheduling quantum because there's not this interactive response necessary, right? You want threads to be able to do more work before they're stopped and I have to think about what to do again, right? So again, too fast, I spend too much time in the kernel figuring out what to do, saving state, restoring state, right? So for example, if I take a hard, if I set my hardware timer to fire really fast, right? And I don't have very many threads on the CPU, what might happen is the hardware timer fires, I enter the kernel, I run my scheduler and I decided to just keep running the same thread that was already running, right? And then I have to exit the kernel, restore the thread state and let it go, right? So now what I've done is I've taken this completely spurious context switch, right? Accomplished nothing, except give me a chance to think about what I wanted to be doing and it's a waste, right? So all those instructions are wasted, right? All I did was put the machine back exactly the way I found it and let the thread keep running, right? And if I do that too often, then I'm wasting a lot of time and things slow down. Yeah, AJ, I don't think so. This is like usually like a kernel compile option and Jeremy was asking about, you know, would you want cases where this could be dynamic, right? So I could have dynamic and I think people have looked into this and they've just found that it doesn't help that much, right? So normally there's some value that's a good balance and tuning in at runtime is, you know, kernel designers and you guys maybe will pick up some of this as you start to do some of the harder assignments in this class, kernel designers have this fetish or preference for simplicity, right? Particularly, you know, if you tell someone who's hacking on Linux, I can improve performance by, you know, 2% in exchange for this huge mass of new code and new complexity they will always say no way. Like no way, it doesn't matter, right? 2% in exchange for this huge pile of code that has to run all the time but I don't really know what it does and it might be buggy. They just don't care, right? Like if you have a simple solution that improves performance, great, right? Simple changes, simple fixes but all these little tunings that don't actually end up doing much good but introduce a great deal of extra complexity are typically just discarded and filtered out by people who do this for a living because they don't want to maintain that stuff, right? They don't want to think about, oh, well, let's see here my timer and up was normally firing at 10 milliseconds and now it's seven and what does that mean or whatever? They just, they don't care, right? They keep things, yeah. Question?  All right, so now we have this idea of a threat abstraction, right, where you have registers and stack and I think I just, I want to stop here and kind of sort out what belongs in the threat abstraction and what belongs in a process, right? So registers are clearly this thread private state, right? Thread has registers and when I start and stop it's important to save that register state, right? Threads also have their own stack. So when we start talking about multi-threaded user programs, every thread in the process has its own stack, right? And those stacks have to live in memory somewhere and they're not shared by threads, right? Memory and the file descriptor table are shared by all the threads within the process, right? So this is kind of an important thing to keep in mind, right? Stack registers thread private, right? You know, you can share variables on your stack with other threads, but it's typically very dodgy, right? If you want to share variables, you know, malloc of variable and send an address to it to the other thread and that will be in the heap, right? Anything on your stack, who knows if it's still going to be there in a couple of seconds, right? Because you may have gotten rid of it. So registers and stack thread private, right? Typically thought of as private to each thread. The rest of the address space, right? So my heap and all the code and any other things that are in my address space are typically thought of as shared between threads, right? And this is where all the GUI problems start to come up, right? With some of the shared states, right? So the file descriptor table and memory are shared between threads in a process, right? Let's see what time it is. So we talked a little bit about this before, right? And part of what's going to make your life miserable for the next couple of weeks is you guys work on assignment one is going to be dealing with threads, right? So in a user space perspective, right? Let's not talk about the kernel for now. Let's just talk about you're writing a user space program. Why use threads, right? Or I should say, why use more than one thread, right? If you guys have written multi-threaded programs, why are they designed that way? Yeah, yeah, so it can be trying to accomplish multiple things at the same time. Of course, frequently, you know, let's say again we're talking about a uniprocessor system, we know the concurrency is an illusion, right? We know that. There's only one thing happening at once, right? So anybody, yeah. So there's some notion of multiple things, but it's not necessarily happening at a time, right? What do threads allow me to do maybe as I'm programming? Yeah, I agree. Yeah, okay, okay, so, right, okay, so that's a good point. So rather, let's say I wanted to run, I'm running a web server, and I have a bunch of different requests coming in, and I want them to be able to be handled in parallel, right?  So I could just take Apache, and I could start 50 Apache processes, right? But as the grimace pointed out, there's this overhead to switching between processes, right? I have to go into the kernel, I have to, you know, save all the state for the thread that was executing. It turns out when we switch between processes, there's memory state that also has to be updated, which we'll talk about in a few weeks. So there's this overhead between switching between multiple processes, and maybe it's lower if I'm switching between multiple threads maybe, Jeremy. Yeah, and yeah, so, so on some level, one of the reasons we use threads is conceptual, right? I mean, your program, again, your program might not actually ever be doing multiple things at the same time for real, but it's a nice way to think about it, right? So for example, you could write a web browser that had one huge like for loop, right? Actually wouldn't be a for loop, probably like one huge while true, right? And you could have, you know, 6,000 different K statements in there, right? Like if the user clicked the mouse, right? And if like a socket IO request completed and boom, boom, boom, boom, boom, like all the different things that could happen that would cause me to wanna change the state of my process, right? You can write things that way. Like you could write a web browser that way, and if you could wrap your mind around it, right? It might not work that badly, right? Especially if you were doing sort of asynchronous IO. But again, what's hard about that, right? Why do we write a web browser and have like one thread that just sits there waiting for mouse events, right? Looked at. This kinda comes back to what Jeremy said, right? So the thread that's sitting there waiting for mouse events may be blocked a lot, right? Cause there might be times when I'm not moving the mouse or I'm not clicking on things, right? While that thread is blocked conceptually, that part of my code is not executing, right? And the nice thing about writing in a separate thread is that I can write a little piece of code that just reads whatever the event was and then updates some state, right? And it doesn't have to do everything else, right? So in my big case statement, let's say the user opened a new tab, right? Well now, first of all, I have to process that mouse event and then I have to redraw the entire screen, right? So there's all this interdependency between these things and threads can be a nice way of trying to separate those out as a program. Yeah, right? Yeah, oh, yeah, yeah, yeah. Don't worry, we'll get back to that, right? Yeah, so threading introduces this gooey problem of synchronization that we're gonna spend quite a bit of time on. You guys will spend time on that as I'm at one, right? Yeah, and then again, threads may naturally, there's these natural separations of concerns within many applications that allow me to write them using multiple threads, right? Usually there's some data, for example, about a particular tab, right? Or request that I'm making or a particular page. I'm using web browsers as an example here, right? But similarly, for something like a web server, right? It's kind of like here's a request and then there's all this stuff that has to happen and to some degree, again, that stuff happens very independently of anything else that's happened, right? So I can give that to a thread and that thread could just take care of it and all the latencies are sort of sunk into that thread and while that thread is waiting for IO, some other thread is running, right? And this is the other thing, right? So slow devices in a multi-threaded program if one thread blocks, right? This goes back to the argument we made before about the CPU, right? In your Firefox browser, if the thread waiting for network IO blocks, the whole process doesn't stop running, right? It can still paint. It can still respond to your mouse clicks, right? Other things will happen.  And that would produce a very, very ugly experience. Brian? What you said doesn't that depend on... Yeah, okay, so what I'm talking about here is user-level threading, right? And we will get to probably Friday differences between where that can happen, right? But it actually turns out that I can do user-level threading quite easily without any support from the kernel, right? But now many modern kernels have support natively for multiple user-level threads, and we'll talk about the differences in trade-offs between user-level threading libraries and kernel-level user-threading libraries, right? All right, so this is one of my favorite analogies, and I think this is a good one, for threads, right? If any of you guys have been to a nice restaurant, that there's like 30 cooks in the kitchen, right? And for any given dish or meal or thing that you order, many of them will be involved, right? Like, they have to cooperate, like, at any given point in time, right? They're all doing one thing, right? There's no real concurrency when you map all the things that have to be done down to the cooks in the kitchen, right? Unless they're like chopping with two hands or something, right, but that doesn't sound safe. So they're doing one thing at a time. They're frequently doing different things. So there's frequently a separation of concerns, right? I might have one person who's handling like one stage of a particular meal, right? Or one task, like chopping onions all day long or whatever, that sounds pretty miserable as well. They all have to cooperate, right? They're all sharing some recipe, right? And this to some degree is kind of like thread sharing the same code in an address space, right? Like, they're all sharing the same set of instructions. They have private state, right? So they have the stuff that's right in front of them, whatever they're thinking about, but it's very easy for them to communicate, right? And one of the differences between threads and processes are multiple threads in the same process can communicate very easily in shared memory, right? Whereas multiple processes have to communicate using these sort of gawky IPC mechanisms that we discussed at the beginning of the semester, right, which exist partly because processes don't trust each other, whereas multiple threads in the same process implicitly do trust each other, right? The operating system plays no role in defending multiple threads when this is in the same process from each other, right? It does play a role in defending multiple processes from each other, right? And then finally, these guys have to coordinate to get anything done, right? And that's the other big thing, right? All right, so I think this is a good place to stop. On Friday, we will talk about, you know, more multi-threaded applications and then discuss the pros and cons of user versus kernel level threading approaches. Hey.


Section 23 of Selected Works, Poems, by Voltairene DeClaire, this is a LibriVox recording. All LibriVox recordings are in the public domain. For more information, or to volunteer, please visit LibriVox.org. Recording by Lucy Perry. The Feast of Vultures from Selected Works, Poems, by Voltairene DeClaire. As the three anarchists, Valiant, Henry and Caeserio, were led to their several executions, a voice from the prison cried loudly, Viva la Anarchy! Through watch and ward the cry escaped, and no man owned the voice, but the cry is still resounding through the world. A moan in the gloom in the air-peaks heard, the bird of Omen, the wild-fierce bird. A flight, in the night, like a whizz of light. Arowee winging before the storm, far away flinging, the whistling singing, white curdle drops, wind-blown and warm. From its beating, flapping, thunderous wings, crashing and clapping, the split night swings, and rocks and totters. Bled of its leaven and reels and mutters accursed to heaven. Reels and mutters and rolls and dyes, with a wild light streak in its black, blind eyes. Far, far, far, through the red mad moan, like a hurtling star through the air, rub-borne, the herald-singer, the terror-bringer, speeds and behind through the cloud-rags-torn, gather and wheel a million wings, clanging as iron where the hammer rings. The whipped sky shivers, the white gate shakes, the rip-throne quivers, the dumb-god wakes, and feels in his heart the talon stings, the dead body's hurl from beaks for slings. Ruin, ruin, the whirlwind cries, and it leaps at his throat and tears his eyes. Death for death, as ye long have dealt, the heads of your victims, your head shall pelt, the blood ye wrung to get drunk upon. Drink and be poisoned, on, herald, on! Behold, behold, how a moan is grown, a cry hurled high against a scaffold's joist, the voice of defiance, the loud wild voice, world through the world, a smoke-wreath curled, breath-thround hot kisses, around a fire, see the ground hisses with curses and glisses, with red-streaming blood-clots of long-frozen ire, by the flying wild voice as it passes, groaning and crying, the surge of the masses rolls and flashes, with thunderous roar, seams and lashes, the livid shore, seams and lashes and crunches and beats, and drags a ragged wall to its howling retreats. Swift, swift, swift, thought the blood rains fall, through the fire-shot rift of the broken wall, the prophet crying, the storm-strong sighing, flies and from under nights lifted Paul, swarming menace ten million darts, uplifting fragments of human shards.  Knife for knife as ye long have dealt, the edge ye wetted for us be felt, ye chopper of necks on your own, your own, bear it cowered, on profit on, behold how high rolls of prison cry. Philadelphia, August 1894. End of the Feast of Vultures. Recording by Lucy Perry, in Bath, on March 23, 2009. Section 24 of Selected Works. Poems by Valterine DeClaire. This is a LibriVox recording. All LibriVox recordings are in the public domain. For more information or to volunteer, please visit LibriVox.org. The Suicide's Defense. From Selected Works. Poems by Valterine DeClaire. To say in my defense? Defense of what? Defense to whom? And why defense at all? Have I wronged any? Let that one accuse. Some priests there, mutters, I have outraged God. Let God then try me, and let Nondair judge himself as fit to put Heaven's ermine on. Again I say, let the wronged one accuse. I, silence, there is none to answer me. And whom could I, a homeless, friendless tramp, to whom all doors are shut, all hearts are locked, all hands withheld? Whom could I wrong? Indeed, by taking that which benefited none, and menaced all. I, since ye will it so, know then your risk. But Mark, tis not defense, tis accusation that I hurl at you. See to it that ye prepare your own defense. My life, I say, is an eternal threat to you and yours. And therefore it were well to have foreborn your unasked services. And why?  Every drop of blood that circles in your plethoric veins was wrung from out the gaunt and sapless trunks of men like me. Who in your cursed mills were crushed like grapes within the wine-press ground. To us ye leave the empty skin of life. The heart of it, the sweet of it, ye pour defeat your dogs and mistresses with all. Your mistresses, our daughters, bought for bread to grace the flesh that once was father's arms. Yes, I accuse you that ye murdered me. Ye killed the man, and this that speaks to you is but the beast that ye have made of me. What, is it life to creep and crawl and beg and slink for shelter where rats congregate, and for one's ideal dream of a fat meal? Is it then life to group like pigs and sties and bury decency and common filth, because forsooth your income must be made, though human flesh rotten your plague-rid dens? Is it then life to wait another's nod for leave to turn yourself to gold for him? Would it be life to you? And was I less than you? Was I not born with hopes and dreams and pains and passions even as were you? But these ye have denied. Ye seized the earth, though it was none of yours, and said, Hereon shall none rest, walk or work, till first to me ye render tribute. Every art of man, born to make light of the burdens of the world, ye also seized and made a tenfold curse to crush the man beneath the thing he made.  When we ask work ye shake your heads, homes ye evict us. Bread? Here, officer, this fellow's begging, jails the place for him. After the stripes, what's next? Poison. I took it. Now you say twas sin to take this life which troubled you so much. Sin to escape insults, starvation, brands of felony inflicted for the crime of asking food. Ye hypocrites, within your secret hearts the sin is that I failed. Because I failed, ye judge me to the stripes, and the hard toil denied when I was free. So be it, but beware. A prison sells an evil bed to grow morality. Black swamps breed black miasms. Sickly soils yield poison fruit. Snakes warm to life will sting. This time I was content to go alone. For chance the next, I shall not be so kind. End of The Suicide's Defense. Recording by Rhonda Federman. A novel of colour, from selected works, poems, by Valterine de Claire. CHAPTER I Chipmunks three sat on a tree, and there were as green as green could be. They cracked nuts early, they cracked nuts late, and chirrupt and chirrupt and ate and ate. Tis a pity of chipmunks, without nuts, and annoying hunger in their guts. But they should be wise, like you and me, and colour themselves to suit the tree. Achii achii, achii achii.  Inelephant white, in sorry plight, hungry and dirty and sad bedite, straggled one day on the nutting-ground. Low chattered the chipmunks, our chance is found. Behold the beast's colour, were he as we, green and sleek and not full were he. But the beast is big, and the beast is white, and his skin full of emptiness serves him right. Achii achii, achii achii.  CHAPTER II Three chipmunks, green right gay were seen, to leap on the beast his brows between. They munched at his ears and chiffered his chin, and sad and sad and sad on him. Not a single available spot of hide, where a well-sleaked chipmunk could sit with pride. But was chipped and chipped and chip-chip-munked, till ought but an elephant must have flunked? Achii achii, achii achii. What a ride we're having, we chipmunks three. CHAPTER III BRRRRRR CHAPTER IV What was it blue? A hue, a hue. Three green chipmunks have all turned blue. The elephant smiles a peaceful smile, and lifts off a tree trunk, sans haste or guile. Seize him, seize him, he's stealing our tree. We're undone, undone, shriek the chipmunks three. The elephant calmly upraised his trunk, and said, Did I hear a green chipmunk? Achii achii, achii achii.  End of A Novel of Color Recording by Joseph Nagy Of www.josephnagy.com That's J-O-Z-E-F-N-A-G-Y End of Selected Works Palms by Volterine DeClaire Section 26 of Selected Works Palms by Volterine DeClaire This is a LibriVox recording. All LibriVox recordings are in the public domain. For more information, to volunteer, please visit LibriVox.org. GERMINAL from Selected Works Palms by Volterine DeClaire GERMINAL, the field of Mars is plowing, and a hard the still that cuts, and a hot the breath of the great oxen, straining flanks and bowing beneath his goat, who guides the share of death. GERMINAL, the dragon's teeth are sewing, and a stern and white the silver flanks of the seed he shall not gather, though full swift the growing. Straight down, death furrowed heads and does not heed. GERMINAL, the helmet heads are springing far up the field of Mars in gleaming fires. With the wider ward notes, the bursting earth is ringing within his grave, the sober sleeps and smiles. End of GERMINAL, recording by Sergio Baldelli, Rome, February 2009. Section 27 of the Selected Works Palms by Volterine DeClaire This is a LibriVox recording. All LibriVox recordings are in the public domain. For more information or to volunteer, please visit LibriVox.org. Light upon Walderheim from Selected Works Palms by Volterine DeClaire. The figure on the monument over the grave of the Chicago martyrs in Walderheim cemetery is a warrior woman dropping with her left hand a crown upon the forehead of a fallen man just past his agony, and with her right drawing a dagger from her bosom. Light upon Walderheim, and the earth is grey, a bitter wind is driving from the north. The stone is cold, and the strange cold whispers say, What do ye hear with death?  May we not weep, o'er him the tomatoed lies slain our name, for that he loved us much. May we not linger till the days broad, nay, none are stirring in the stinging dawn, none but poor wretches that make no moon to God. What use are these, O thou with dagger drawn? Go forth, go forth, stand not to weep for these, till weaken with your whipping like the snow ye melt, dissolving in a covered piece. Light upon Walderheim, Brother, let us go. End of Light Upon Walderheim, Recording by Sergio Baldelli, Rome, March 2009 Section 28 of Selected Works, Poems by Valterine DeClaire This is a LibriVox recording. All LibriVox recordings are in the public domain. For more information, or to volunteer, please visit LibriVox.org. Love's compensation from Selected Works, Poems by Valterine DeClaire. I went before God, and he said, What fruit of the life I gave? Father, I said, it is dead, and nothing grows on the grave. Roth was the lord and stern. Hadst thou not to answer me, shall the fruitless root not burn, and be wasted utterly? Father, I said, forgive, for thou knowest what I have done, that another's life might live, mine turn to a barren stone. But the father of life sent fire and burned the root in the grave, and the pain in my heart is dire, for the thing that I could not save. For the thing it was laid on me by the lord of life to bring, fruit of the ungrown tree that died for no watering. Another has gone to God, and his fruit has pleased him well, for he sitteth high while I plod the dry ways down towards hell. Though thou knowest, thou knowest, lord, whose tears made that fruit's root wet, yet thou drivest me forth with a sword, and thy guards by the gate are set. Thou wilt give me up to the fire, and none shall deliver me, for I followed my heart's desire, and I labored not for thee. I labored for him thou hast set on my right hand high and fair. Thou lovest him, lord, and yet, twas my love won him there. But this is the thing that hath been, hath been since the world began, that love against self must sin, and a woman die for a man.  Kismet, my doom is on me. Why murmur since I am I? End of Love's Compensation, by Rhonda Federmann.  I saw one fall, his forehead on the rock, the helpless hand still clutching at the spade, the slack mouth full of earth. And he was dead. Federmann's gently turned his face until the fierce sun glittered hard upon his eyes, wide open, staring at the cruel sky. The blood yet ran upon the jagged stone, but it was ended.  He was no hero. He, a poor black man, taking the will of God and asking not. Think of him thus when next your horse's feet strike out the flint spark from the gleaming road. Think that for this, this common thing, the road, a human creature died. Tis a blood gift to an awe-reaching world that does not thank. Ignorant, mean, and soulless was he?  End of The Road Builders, Recording by Rhonda Federmann Section 30 of Selected Works, Poems by Valterine DeClaire. This is a LibriVox recording. All LibriVox recordings are in the public domain. For more information or to volunteer, please visit LibriVox.org. Angiolio from Selected Works, Poems by Valterine DeClaire. We are the souls that crept and cried in the days when they tortured men. His was the spirit that walked erect and met the beast in its den. Ours of the eyes that were dim with tears for the thing they shrunk to see. His was the glance that was crystal keen with the light that makes men free. Ours of the hands that were rung in pain in helpless pain and shame. His was the resolute hand that struck steady and keen to its aim. Ours of the lips that quivered with rage that cursed and prayed in a breath. His was the mouth that opened but once to speak from the throat of death. Assassin, assassin, the world cries out with a shake of its dotted head. Germinal rings back the grave where lies the dead that is not dead. Germinal, germinal, sings the wind as driving before the storm. Few are the drops that have fallen yet. Scattered but red and warm. Germinal, germinal, sings the fields where furrows of men are plowed. Ye shall gather a harvest over rich when the ear at the full is bowed. Springing, springing at every breath the word of invincible strife. The word of the dead that is calling loud the battle ranks of life. For these are not the dead that live, though the earth upon them lie. But the doers of deeds of the night of the dead, they are the live that die. End of Angiolio. Recording by Rhonda Fetterman. Section 31 of Selected Works This is a LibriVox recording. All LibriVox recordings are in the public domain. For more information or to volunteer, please visit LibriVox.org. Recording by Meena. Eve at Whale from Selected Works Poems by Walter Indeclair. Comrades, what matter the watch knife tells that a new viewer comes or goes what to us are the crashing bells that clang out the centuries close what to us is the garlard dress the wool of the dancing feet the glitter and blare in the laughing press and din of Mary Street. Do we not know that our brothers die in the cold and dark to-night shelterless faces turned towards the sky will not see the new-views light wandering children lonely lost drift away on the human sea while the prize of their lives in a glass is tossed and drunk in a revelry ah no we not in their feasting halls where the loud laugh echoes again that break and stone in the motored walls are bones of murdered men slowly murdered by day and day the beauty and strength are left till the man is sapped and sucked away and the human renders left a human rend with all-pin hair an all-pin voice to pray for arms in the bitter winter air a knife at his heart always and pure and hot are impure and flesh for the cost of a little food low when the gleaner of time shall thresh let these be accounted good for these are they who in bitter blame eat the bread whose salt is sin whose bosoms are burned over college shame till their heart are sealed with them the covetly jest of a hundred years will be thrown where they pass tonight to callous for hate and to dry for tears the saddest of human blight do we forget them these broken ones that are watched tonight a set may we smile in the face of the ear that comes because we do not forget we do not forget the tramp on the track crushed out in the wind-swept ways the curses of man upon his back and the curse of God in the space the stare in the eyes of the buried man face down in the fallen mine the despair of the child whose bare feet ran to thread out the rich man's mind the solemn light in the dying gaze of the babe utter empty breast the wax accusation the somber glaze of its frozen and rigid rest they are all in the smile that we turn to the east to welcome the centuries dawn they are all in a greeting tonight's high priest as we bid the old year be gone be gone and have done and go down and be dead deep drowned in your sea of tears we smile as you die for we weigh the red mourn gleam of a hundred years that shall see the end of the age old wrong the reapers that have not sown the reapers of men with the sickle strong who gather but have not strung for the earth shall be his and the fruits thereof and to him the corn and wine who labours the hills with an even laugh and knows not thine in mind and the silk shall be to the hand that weaves the pearl to him who dives the home to the builder and all life sheaves to the builder of human lives and none go blind that another see or die that another live and none insult with a charity that is not theirs to give for each of his plenty shall freely share and take at another's hand equals breathing the common air and toiling the common land a dream, a vision, eye what you will let it be to you as it seems of this nightmare real we have our fill tonight is for pleasant dreams dreams that shall awaken the hope that sleeps and knock at each torped heart till it be drum tapped and blood that creeps with the lion spring of stars for who are we to be bound and drowned in this river of human blood who are we to lie in a swound half sunk in the river's mud are we not they who delve and blast and hammer and build and burn without us not a nail made fast not a wheel in the world should turn must we the giant await the grace that is dealt by puny hand of him who sits in the feasting place while we his blind just stand between the pillars may not so, I such things were true better Vagaza again to show what the giant's rage may do bet yet not this it were wiser far to enter the feasting hall and say to the masters these things are not for you alone but all and this shall be in the century that hopes on our eyes tonight so here's to the struggle if it must be and to him who fights the fight and here's to the dauntless jubilant throat that loud to its comrade sing till over the earth shrill the mustering note and the world strike signal rings end of Eve it will section 32 of selected works poems by Walterine declare this is a LibriWalks recording all LibriWalks recording are in the public domain for more information or to volunteer please visit LibriWalks.org Recording by Mina March Bloom from selected works poems by Walterine declare to Gitano Brescott Rickquem, Rickquem, Rickquem blood red blossom of poison stem broken for man swam sung bleepage in dungeon bloom seeded bearer of royal doom what now is the path what to thee is the island grave with desert wind and desolate wave will thee silence there can thee we thee now with the heaviest stone can thee lay out on thee with thee alone that has conquered breath low it's finished a man for a king Mark you well who have done this thing the plover has ruled bitter and rank grow the things of the sea shall know what sap ran thick in the tree when ye pluck its roots Rickquem, Rickquem, Rickquem sleep on, sleep on accursed of them who work our pain a wild marsh blossom shall blow again from the buried root and the slime of men on the day of the great red rain end of marsh bloom Section 33 of Selected Works poems by Walterine DeClaire This is a Library Works recording. All Library Works recording are in the public domain. For more information or to volunteer, please visit librarywolves.org Recording by Mina Written in red from Selected Works poems by Walterine DeClaire To a living dead in Mexico's trouble written in red their brother stands for the gods of the world to see on the dooming wall their borderless hands have glazoned or parasol and the plating brands illumine the message seize the land open the prison and make men free flame out the living woods of the dead written in red Gods of the world their mouths are dumb your guns have spoken and they are dust but the shrouded living whose hearts were numb have felt the beat of a wakening drum within them sounding the dead men's tongue calling smite off the ancient rust have beheld Brexit, the word of death written in red We are at a loft a roaring flame skyward a loft we're all messy slaves of the world are cost as the same one is the immemorial shame one is the struggle and in one name manhood we battle to set men free uncoast us the land burn the woods of the dead written in red end of written in red a voice was there a voice that spoke or did I fancy I must have dreamed and have only now awoke again what is it I cannot see is there anyone in the room those words a minister come to pray my soul through the gates of gloom that's kind of you but what do you say do I shrink from death ah no I long for his terrible arms and the frost of his icy breath there is rest for me on his stony breast there is peace in his cold cold heart ah no I fear not my bosoms bear for the sting of his shadowy dart do you know what death means sir to such as I the wanton the wretch of the street the trodden thing that you godly ones crush down as a worm neath your feet it means the end of a ceaseless pain that none pity save those who bear dear death draw near lay your hands on mine draw nearer my pillow share you say that I wander that I forget the stains on my guilty soul I must turn to Christ with a trusting faith and he will wash out the hole why didn't your Christ save my soul before from pollution's dark living grave when I was honest and pure and good was the time for your Christ to save I wasn't always an outcast sir to disgrace my sex and name and it isn't from choice that these last five years I've been leading a life of shame why didn't your godly ones come to me ere my virtue was putrid dead if your Christ knew how hard I struggled why did he make so dear honest bread if I could only tell you how hard I tried if I only had time to speak but what does it matter it's over now and I'm growing so weak so weak what is it I didn't ask Christ you say nay sir on my bended knees in the streets I've prayed to him to send me work that I may not starve and freeze on my knees I prayed in the other days that his merciful hand might save the man I loved and whose name I bore from the stain of a drunkard's grave and I asked your Christ when I saw him die only six poor feet to yield of his great wide earth for a burial place and he gave me the potter's field I followed John's corpse to a pauper's grave in the aisles of eternal night and the love of my life went down with the clods that buried him from my sight I didn't think as I stood there then in the driving wind and sleet of my helpless self with my babe in arms turned homeless in the street I didn't think of the weary years nor the pain that was yet to come I could only think of those clothes shut lids and the dear lips sealed and dumb I didn't remember the life he'd led nor his last blood-curdling curse I only thought I'd once taken him for better or for worse that heart that I so often had pressed to mine lay pulseless and cold and still and a weary voidness was left to me that nothing might ever fill yes, he died of the tremors you'll comfort me by saying his soul is lost but where is the fiend who sold him rum the price that his rune cost he's sitting today in a cushioned pew a good Christian without flaw along with the praetors of Justice High and the deacons who make the law when he dies you will say the great white gates flew open to let him in while my John is lying in mortal pain from his great unforgivable sin ah, John, dear John I am faithful yet all the love I had to give is yours in death as in life, dear John and if somewhere again we live you will know and forgive me twas for our child you will pity, you will not blame that to save our child I sold myself and drank the dregs of shame I tried so hard to be honest, John but where was the use to try so many were willing to sell their toil and oh, so few to buy so few, so few have felt, have seen God's love in the blue skies though the ranks of the starving poor are filled with mournful, beseeching eyes they are filled with eyes that implore and haunt and follow you through the years strange, suffering eyes that are always dry and heavy with unshed tears what is it? could I get no work at all? sometimes but good sir, I pray would you care to preach for seventeen hours at thirty-five cents a day? it wasn't often I'd make that much for sewing without a fire in dead of winter is fearful work and your stiffened fingers tire and your head swims round and your shivering limbs grow numb with the cold well, it doesn't seem half so awful then this selling yourself for gold to me it didn't seem so bad as to you in the generous heat when I was forced in my mouth to hold my little one's freezing feet the nobler self, like a delicate plant dies fast in a pitiless hour and the numbing cold of starvation's tooth has a terrible blasting power I, and many a winter night while you, in your well-warmed home were teaching the love of Christ and God I was forced in the streets to roam forced in the streets to roam all night with the babe on my shivering breast and a minister's wife has refused me food or even a spot to rest how long do you think your own mother, sir would have led a virtuous life if she had been left in the world like this how long would your trusted wife have remained like the snow ere it falls to earth to mix in the muddy street with the filth and the mire and the grime and the ooze ground in by the trampling feet I tell you, sir, it's a terrible thing to judge of a woman's sin when a tenement's rent is a higher price than her honest toil can win no, don't talk of Christ any more to me when my little one's dying head was laid on my bosom I asked him then for the last time to send me bread I prayed to him oh, so earnestly and how did his answer come? the landlord knocked for his rent and I, like your Christ was dumb I was dumb with despair a dull blank despair as I went out into the night and I didn't know nor I didn't care if I did wrong or right I sold myself for a glittering price twas too late little Charlie died and I'm only waiting for death to come that we may sleep side by side life hasn't mattered to me since then all that I loved was gone but your god of vengeance perhaps decreed that I, in my grief, live on it is over now I am almost gone it is darker I'm nearly blind yes, I thank you for your intentions, sir I'm sure it was very kind no, your prayers would be useless I asked for bread and your Christ gave me a stone I can leave this world as I've lived in it in shame and in pain alone it isn't the dying who need God's help it's the living who cry for aid don't expect to have virtuous death, my friend when virtues so underpaid while virtues so underpaid in life an honor is sold so high don't talk about Jesus' tender love don't endeavor to help vice die I am weak, so weak and my voice it fails faintness steals over me oh, John, dear John and my little one I am coming light I see end of Nameless Recording by Rhonda Federman Section 35 of Selected Works Poems by Valterine DeClaire This is a LibriVox recording All LibriVox recordings are in the public domain For more information or to volunteer please visit LibriVox.org Santa Aguida from Selected Works, Poems by Valterine DeClaire Santa Aguida where the torturer Kanovas breathed his last Santa Aguida thou that wasst accursed with presence of a demon dressed in man Blessed art thou for on thy stones there ran the vampire blood from bitter torture nursed along thy streets there flash the lightning burst delivered, flaming on from eye to eye the lips said killed and all thy gateways hurst in lying black made mourning mockery Blessed art thou from thee when forth the cry vengeance yet loves renunciation hates and justice smites the torturer shall die across his path the steel-nerve slayer waits and both shall burn together one in light of unconsuming hell and reddened night and one with feet on hell and brow dawn raid pure white End of Santa Aguida Recording by Rhonda Fetterman Section 36 of Selected Works Poems by Valterine DeClaire This is a LibriVox recording All LibriVox recordings are in the public domain For more information or to volunteer please visit LibriVox.org End Thou too From Selected Works Poems by Valterine DeClaire The moonlight rolls down like a river the silence streams out like a sea and far where the eastern winds quiver my farewell goes floating to thee like night when the sunset is fading and starbeams troop up in the skies through a cold, dark and lonely forever gleams the light of the poet's eyes and sometimes when I'm weary when the path is thorny and wild I'll look back to the eyes in the twilight back to the eyes that smiled and pray that a wreath like a rainbow may slip from the beautiful past and crown me again with the sweet, strong love and keep me and hold me fast for the way is not strewn with petal soft it is covered with hearts that weep and the wounds I tread touch a deeper source than you think it mine to keep down the years I shall move without you yet ever must feel the blow that caused me a deeper pain to give than you will ever know for the tears that dropped on my hands that night beneath the mystical shining moon were a sacred dew consecrated there on the rose altered heart of June and the heart that beat against mine like a bird that is fluttering wounded sore with its nest all broken, deserted, torn will beat there forever more but the world moves on and the piteous earth still groans in the monster pain and the star that leads me points onward yet though the red drops fall like rain ah, not to a blaze of light I go nor shouts of a triumph train I go down to kiss the dregs of woe and drink up the cup of pain and whether a scaffold or crucifix waits beneath the light of my silver star I know and I care not I only know I shall pause not though it be far though a crucified life or an agonized death though long or quick and sharp I am firmly wrought in the endless thread of destiny's wolf and warp and I do not shrink though a wave of pain sobs over me now and then as I think of those saddest of all sad words the pitiful might have been it might have been it is not to be and the tones of your swans fare well ring sadly, solemnly, deep to me like the voice of a sobbing bell I gather your petals and take them back to the dead heart under the dew and crown it again with the red love bloom for the dead are always true but go not back to the sediment in the slime of the moaning sea for a better world belongs to you and a better friend to me end of, end thou too Recording by Rhonda Federman My love is old, my arms are strong I would woo thee now with the wave kiss cold on they pallid brow Thou art mine, thou art mine, my very own Thine ears shall hear my eternal moan Always near thou would feel my lips and the bathing tear where my sorrow drips Thou my king forever, behold thy throne Thine in thy majesty all alone None, none wept for thee nearing the verge of eternity I, thy solemn dirge, will chant for I Why does the wave merge into sky? I love thee, thou art my chosen own Thy heart like mine was cold as stone Thine eyes could shine like my blue waves fare Thy lips like wine curved to kiss's rare Hard as my waves were the eyes that shone and the wine as deadly come love alone Float, float on the swelling wave long as the hearse wide the grave Thy pall is a curse from the fading shore a broken verse from a heart-rung sore Life's streams rec strone, ah, like my own The words are low as a dying groan The voice thrills so it might rouse thy breast with pity's glow where thou like the rest But thou, my hero, were never known To feel as a human thou stutzt alone Down, down, behold the wrecks I strew the deep with these human specks No faith I keep with their moral trust See how I heap their crumbling dust I sneered in their faces my own, my own as they knelt to pray when the ships went down I flung my spray in their dying eyes and laughed at the way it drowned their cries On the shore they heard the exultant tone and said the sea laughs, ah, I laughed alone Now, now, we twain shall go Love-locked, laughing so The fools ye mocked with your tender eyes The trusts ye rocked with your cradling lies Even like these wretches my own, my own shall rot in clay or crumbled bone Thou shalt hold thy way, day-kissed and fair Where the wild waves play in the sun-thick air My arms, my kiss, my tears, my moan You shall know for I where we wander alone Love, love, thou wert like to me Thy luring gaze rolled relentlessly The marsh light blazed to some human soul Down the darkening maze to ruin's goal Ah, how ye crushed them, my beautiful own Like whistled leaves around these stone Whirled the dead beliefs of each long-mourned life Here no one grieves, neither tears nor strife Appeal to the sea where its wrecks are thrown Thou shalt stand in their midst and smile alone Laugh, laugh, o form of light Death hides thy faithless sight The flowing tides of thy heart are still Yet are wrecks thy brides, for it is my will That that which on earth made thy heaven my own May strew around thy eternal throne The gurgling sound of the dying cry The gushing wound of heart agony Where thy joy in life Now the sea makes known thy realm in death Thy heaven alone Years, years ye shall mix with me Ye shall grow apart of the laughing sea Of the moaning heart of the glittered wave Of the sun gleams dart in the ocean grave Fair, cold, and faithless were thou my own For that I love thy heart of stone From the heights above to the depths below Where dread things move there is not Can show a life so trustless Proud be thy crown, ruthless like none Save the sea alone I am from Selected Works Poems by Valterine DeClaire This is a LibriVox recording All LibriVox recordings are in the public domain For more information or to volunteer Please visit LibriVox.org I am from Selected Works Poems by Valterine DeClaire I am the ages on the ages roll And what I am I was Shall be by slow growth Filling higher destiny And widening ever to the widening goal I am the stone that slept Down deep in me that old, old sleep Has left its centering trace I am the plant that dreamed And lo, still see that dream life Dwelling on the human face I slept, I dreamed, I wakened I am man The hut grows palaces, the depths breath light Still on, forms pass But form yields kingly or might The singer dying where his song began In me yet lives And yet again shall he unseal The lips of greater songs to be Form mine the thousand tongues of immortality End of I Am Recording by Rhonda Federman Section 39 of Selected Works Poems by Valterine DeClaire This is a LibriVox recording All LibriVox recordings are in the public domain For more information or to volunteer Please visit LibriVox.org Loves Ghost From Selected Works Poems by Valterine DeClaire Among the leaves and the rolls of moonlight The moon which weaves lace on the road white Among the winds and among the flowers Our blithe feet wander, life is ours Life is ours and life is loving All our powers are locked in loving Hearts and eyes and lips are moving With the ecstasy of loving Ah, the roses there blooming And the June air throbbing, tuning Sings of love's eternal summer Chance of joy, life's only comer And we clasp our hands together Singing in the warm, sweet weather Kissing, thrilling with caressing All the sweet from love's rose pressing Ah, so easy, earth is heaven Darkness shadows do not live Like the rose our hearts are given Like the rose whose bloom is given To the sun gold and the heaven Not because it wills or wishes But because it is life to give Dreary, dreary snow-filled darkness Heavy, weary, voiceless darkness We have drifted, drifted, drifted You and I, far apart As snows and roses, sea and sky We have drifted, drifted, drifted Far asunder Any my lonely voice uplifted In sad wonder, heavy with its own Sad calls All your love was of the summer Born to die among the roses Wither, scatter like the roses Leaving me the gray-browed comer With the ashes on his forehead And the winter in his hair With the footsteps slow and solemn Going down the endless stair Joy is gone, and you, my lover Gone in other ways to hover Gone among the summer places Gone to seek for summer faces Bright-faced joy was not for me Born among the snows and pines Gray-faced sorrow was to be Imaged in my mournful lines Love not born for cold and sorrow Only for the sweet sunshine I shall keep your face forever Hidden in this heart of mine In its light one spot will brighten Keeping fair the sacred tomb Like old moonlight it will Whiten the inviolable room Like the moonlight it will whiten Softly all the darkened room And the broken stalk may put forth Memory's ghost of love's old bloom End of Love's Ghost. A soul half through the gate Said unto life What does thou offer me? And life replied Sorrow unceasing struggle Disappointment After these darkness and silence The soul said unto death What does thou offer me? And death replied In the beginning What life gives at last Turning to life And if I live and struggle Others shall live and struggle after thee Counting it easier where thou hast passed And by their struggles Easier place shall be for others Still to rise to keener pain Of conquering agony And what have I to do with all these others? Who are they? Yourself And all who went before? Yourself The darkness and the silence too Have end? They end in light and sound Peace ends in pain Death ends in me And thou must glide from self to self As light to shade and shade to light again Choose The soul sighing answered I will live End of Life or Death Recording by Rhonda Federman End of Selected Works


21st July, Ravinder and Amit were going to Palampur for regular check-up for some animals. On the way, they got a call from Kalp Sharma ji. They called for Dolly, which was an abandoned action. As soon as we heard about Dolly, we decided to bring her here immediately. While Palampur is outside our area. Dolly was a dermatitis. For this, he needed medicated baths and painkillers treatments. When we started doing all this, it started to get better slowly. Within 1-2 months, she got completely cured. For abandoned pets like Dolly, we feel even worse. Because her whole life, she has a habit of staying at home.  She also gets love from her family. But when all of a sudden, she takes away all these things. When she comes on the road, she doesn't know how to survive. Neither does she know how to save herself from cars. Nor does she know how to find food for herself. And it's even worse than not being able to take care of all these things. Not only that, by leaving her family all of a sudden, those who reach their feelings, may be able to understand some people. Physically, Dolly got cured. But she was still aggressive in nature. Because of leaving her on the road, she had lost her faith in humans. So now, it was very important for us to win Dolly's trust. Whenever she looked at someone, she started to be very strong. Like you are saying, she doesn't trust anyone. But the way she gradually got better with her treatments and baths, in the same way, she started to change her attitude with time. Even though she took time to trust us, but our hard work finally came to an end. And this was a very big victory for us. Many times, it takes time to completely correct some things. Every day, it is difficult. And it feels like this situation will never be better. But gradually, after a long time, that hard work comes to an end. This is how we felt with Dolly. From Pune, Mr. Tuhina saw her pictures. And as soon as she pressed the button, Dolly got a family. The rest of the world didn't know, but for Dolly and her family, New Year's Happy took place. With the passing year, Dolly also left behind his insecurities.


What's going on everyone? Sam here with late in sports cards. We are ripping 22-23 Panini, Don Rosloptic, basketball hobby, 6 box, half case break, number 53, pick your team style. Read off the list of our names and our teams. We've got Colby C. Hornets. Daniel C. with the Clippers. Thank you, Daniel. Dennis K. Nicks. Jarek R. with the Suns. Inku K. Heat. Jacob W. Nuggets. Jason A. Netsixer. Jeremy S. Lakers. Jesus T. with the Magic. Joseph S. Cavs. Justin C. Rockets. Pelican Spurs. Wizards Hawks. Kengo M. Mabs. Matt M. Thunder. Matt V. Grislyz. Michael B. Bucks. Mike M. with the Celtics. Nick V. with the Timberwolves. Robert W. Bowles. Rory C. Pistons. Russell P. Blazers. Stephen W. Raptors. Tom B. Jazz. Tyler S. Warriors. Vaughn with the Pacers. And Yuchen S. with the Kings. Good luck, everybody. Here we go. Okay, all cards ship. And, guys, impeccable basketball. That's what we're looking to fill up next. It's got 13 to go. There's our only basketball break left tonight that has spots. So if you want to get into a basketball break, it's going to be your only option. I'm all in. Kyle Lowry. Okay, okay, okay. A lot of dice roll at some point, too. Basketballs. Jada McDaniels. James Jackson. Redemption is going to be Kenneth Lawton Jr. Going to the Grislyz. Nice one, Memphis. Grats on that. Larry Bird. Ty Jones. You mind getting that on socials? Grislyz. Dice roll. 123 left, 456 right. We'll go for the rest of the break unless it's a one-of-one or super low number. Going to be a six. Going to go to the right. I'll go to Draymond Green and the Warriors. Working overtime over there on that. Trevor Keels. Yes, one right. Tray Murphy. Bam, out of bio. Warren Jordan Poole. 2199 for the Warriors, still. Recently traded to the Wizards. Kelly Ubre. Baseball on tonight. Bennett Kamathryn. Anthony Edward. Tray Jones. Photon Malcolm Brogdon. Nice one there for the Cs. It's a super short print. A little bit more common this year, I have to say, but still nice. Keegan Murray Rookie for the Kings. Cam Reddish Hollow. O'Shea Brissette Hollow. Jaden Hardy Rookie. Jeremy Sohan Rookie. There's an Orange, Monta Morris, the 199 for the Wizards. Paul George. Raining 3, Steve Kerr Hollow. These are the live look-ins, which is how these go. Hello, Damon Lillard. Hello, Rookie. Nice one there. And a blue to 49, Will Barton for the Wizards. And stops for Zingis. Very nice. And again, guys, impeccable coming up very soon. Here is a link to the Brick, 19 to go there. Hello, Malachi Branham. Nice one there for the Spurs on the Rated Group. Are there a young core? They've got going there in San Antonio now. Green. Norman Powell to 149. Clippis. Hello, Tobias Herrester. Is it Garland? Starland, that is. All Starland. Sorry, guys. On to the next one. Black Velocity is going to be Jalen Green on the second year. Nice one there to 39. That's clean. On the cleanest parallels. Inoptic. Inoptic across all Spurs. That is Marjanbo Champ. Hollow Rated Rookie Autograph. Nice one for the Bucks. Caleb Houston. Harden Base. Fred Van Blee. Hello, Luca. Raining 3s. Jalen Suggs Hollow. Pink Velocity. Victor Oladipo to 79 for the Heat. He just re-signed there. Opted into his player option. Grats there, Miami. Blue. I don't know. Red. Palo, the Rookies. 30 of 99. Nice one for the Magic. He just lost that in the reach out. Hello, Josh Hart. D'Angelo Russell. Shade on Sharp Rookie. Not of a Mitchell. Jalen Brunson. Got a Lime Green. Christian Coloco. Rookie to 149. And an Orange. Ryan Rollins. Rookie right behind it to 199. A couple of numbered rookies in that pack. Not bad. Not too bad. Austin Rivers. Duke Levin. Son of Doc. Hello, Elite Dominators. Trey Hux. He's not of a Mitchell. And there's a basketball. It's Jabari Smith Jr. for the Rockets. Very cool. Hello, Gordon Hayward. Small Murray. And going right, Julius Randall. Mox 3. Brian B. Picking up a spot. We're down to 18 to go, everybody. 18 to go. Unimpeccable now. Thank you all. Appreciate that very much. Thank you, Brian. And a three card pack. Very cool. Down Terry. Red. Patrick Baldwin. Rookie to 99 for the worst. Barry Walker. Nice one there on the base auto. Going to the Trail Blazers. Barry Walker. Dominators of Tatum. That's one of the risks you run with Optic all the time, though. It was OC, unfortunately. You know, all the chrome stuff. All the stuff that's cut on a press. Always tends to be Ochaic Bajie. Rookie. Tends to be a little like... There should be no reason for that. No, I know. There should be no reason for that. I know. I agree. Gold. Russell Westbrook to 10. 9 of 10. Nice one there, Lakers. Gratzaleh. Sainte-Marie Kaptu. Kwanak. A feat for soft sports. I guess the new Celtic. Blue. Luca to 49. Nice one for the Mabs. Oh, yeah. All the time, Dina. All the time. Like Wesley. Blue. Anthony Edwards to 49. Lights out for T-Wolves on the insert. Taylor and Hallya Durin. Orange. Nicola Jovic to 199 for the heat. Little Barton. Anthony Melton Hollow. Taylor and Horton Tucker. Nice T-H-T Hollow. Pink Velocity. Jalen Williams. Nice J-Dub. Going to the Thunder. 32 of 79. That's nasty. Gratz on that. Joseph D. Also taking a spot in Impeccable. Magnus J-Dub. That's nasty. Congrats on that to the Thunder. Pat Bev. Shade on Sharp Rookie. Deontay Murray. Davis Berton. wheat dominators. Hollow is Zion. And Jonathan Caminga. A.I. Vince Carter. That'll go right with the Raptors and Vince Sanity. Marjanbo Champ Rookie. And the Cell. Last pack of Box 3. Malcolm Random Rookie. I'm green to 149. McCall Bridges for the Nets. Not necessarily. There's a couple products that tend to run a little bit different. Hello. Bryce McGowan's Rookie. Cornets. Down to 17 to go. 15 to go. Really? Edward E. with two spots. Thank you, Edward. Appreciate you, buddy. I'm green step to 149. Again, guys. 15 to go now on Impeccable Random Team Style. David Roddy. Nice one there. Hollow. Rated Rookie Autograph for the Gris. Steve, what up? Steve, what up, dude? How you doing, buddy? Caleb Houston. Base. Okay, an Ivy Rookie. Poison Ivy. To 199. Sadiq the Freak Bay for the Hawks. Hawks traded John Collins yesterday. Salary Dump there. Sean Holmes. He got traded on Draft Night for the Mavs. Me? That's you. Yeah, but that's an opinion. That's a glorified opinion piece. It's a hit piece on me. It's anything. That's what it is. I'd like to put a hit on you. Geez. Quick Williams. What's up? I like that. Yeah, clip that. Clip it. Red, D'Angelo Russell to 99. Oh, God. That's a weirdo in here now. Creeper. A little bit. Orange, Justin Holliday to 199 and a hollow Kedinal Brown. Oh, you know it. You know it. Living the dream. Playing another Scramble tomorrow morning. Hecht Conniton. He has Dottie. I'm interested to see how that's going to go. Yeah, all you get this time is just straight from the blues. Straight up. That's it. That's it.  Yeah, my brother-in-law pulled a scam. What'd he do? I don't know. He talked to him and Donnie and those two to be two. Mellow ball. And I was like, I just walked up to it. I'm like, hi, whatever. Donnie would have beat all three of us. And you have my brother-in-law out there like, well, I do. I'm like, what did you do? You didn't do nothing. It falls way back there and over there. It's middle 10 to 49. I'm down.  Brother-in-law, you pulled a scam. Jeez, man. It takes three to beat Donnie. Oh, yeah. It takes three and you got to be on to beat Donnie. You can't go down on Donnie.  Jason with another two spots. Thank you, Jason. Jose with a spot in select. Cody with a spot in leaf. A bunch of break spots coming in. Down to 13 to go on impeccable, everybody. Thank you, Jason. Thank you, Edward. Thank you, everybody taking spots on impeccable. Appreciate it. Appreciate it. Keegan-Marie. There's a red. KD. Elite Dominators 299. Oh, God. Nonsense. Kyrie Hollow. What's he doing there? Some bot, clearly. Hello? Hello, Christian Kaloko. I'll see a gold vinyl come out of this again. Like five this year out of this. There's Paul George, basketballs. We got the Montreal Expos today. Got the Expos. Blake Wesley, 85 of 99. Rookie Otto for the Spurs. Nice one there, Stanton. Good day, mate. What up, smack. Smack. We got the Expos. They're not old, but a team that no longer exists. They're relocated. It needs to be baseball and Montreal again. There's Jay Shaw and Tate, 2199. The Expos need to return. KD McCallum. Smack. What do you think about mine? It's a bot red socks app. Dave Young, Mitchell Hollow. Where'd you get that from? New Era? I don't know. It's one of the many hats that Dylan has in my house. Oh, really? Yeah. He starts throwing them out. I'm like, oh, this one fits. I saw this one. I'm like, oh, please tell me a bit. And it was perfect. Let's go. Keldon Johnson, 2149. So they were for sale almost. Not anymore. Not ever since the hat game became a big thing here. Yeah. Jeremy Sohan. There's a Blake Wesley blue. Nice one there. I'm going to send an empty box and wrapper with the Spurs. There's always a little bit of crimping on the blue rookies. So that'll go with the Spurs. Sorry about that, Spurs. Not just the 49, by the way. Or is that the 59? 49. 49 is, I don't know. There's something in football. Moses Moody, Hallow. Hallow, Jason Tatum. I'll join up. Jayden Hardy, Rookie. Get all kinds of fit. These caps. That's what you've got to do. That's the tough one. It's very tough. Hallow, Kate Cunningham, lights out.  Because it goes with everything. Everything. You know what I mean? Benedict Matherin. Make some base and last pack. Makes things so much easier. There's a Palo base, Rookie. Red to 99. Danny Green for the caps. Makes everything so much easier. I'm with you. All right. On to the next one. I'm at the Neston Fortnight on Thursday, for sure. Oh, yeah. I'm on Thursday. Do you list any cards on Thursday? Did I? Yeah. No. I love Mark Williams, right, Rookie? No. But I, no, that's a lie. No, I didn't list cards, but I listed a lot of sealed cards.  Yeah, yeah. I didn't do cards, but I did do others. Won't you do sealed and what else?  Wax, yeah. Yeah.  But then I have a lot of the... Are you talking about champs? A lot of the Pokemon I'm keeping sealed.  Yeah, put away. That's smart. Not smart. Pokemon? There's some big stuff in there that F1, Bobbugs, all that stuff. Oh, yeah, yeah. 2021. Yeah, I'm just going to put that away. Not as well. Orange O'Shea Berset to $199. Ultra premium boxes. Celebrations. Blue to $49, Bruce Brown. Yeah. No, that's smart, honestly. Ring 3's Hollow is Desmond Dain. The Gris and Timework. So it came over to Dain. It was like, don't tell the SSS and that. Oh, Shaik Bajie. So I got it. It's okay. Honestly. That's what I like to do. If I set it down with my cards, I'd be there. I need to be really... Yeah, I know. So much. Did I have, like... Boats on! Jalen Brooks. Nice one there for the Gris. I just keep buying stuff, dude. I'm just always just buying stuff on Facebook and eBay. And, like, I'm, like, I have to start... Like, I've listed a good amount of stuff. Jalen Durin. Orange Palo. Nice to 199. What's up? I think we were looking at your thing. Oh, yeah? Nice one there. Nice. You can throw that Palo in this one. That's cool. Malachi Brannum. Lyme Green. 2.149. Dougie McBuckets. Yeah, I was... Man, I've used, like, for the month of June, I've already used, like, over 100 lists. Which is good. Yeah. I got, like, 150 free. Malachi Brannum! 25 of 25! That is a nasty color match on the Black Pandora. Congrats, San Antonio! Very, very cool. The Black Pandora. That's what I'm saying. The prices are just too good, man. And then, like, you go and list it and you make money on it. It's just the tedious task of listing cards. It's just, gosh, dude. Shade on Shark. Cause then I'll, like, I'll list, like, three and then I'll get distracted by something. And then, like, 20 minutes I'll go by and I would have not have listed one. I know. I think I do have a couple of of these guys. Whole Anthony. Last pack of the break, guys. Good luck here. But I definitely have... Because Middleton? The Ultra Premium Boxes. I got a few... That's good. And that's solid. Quite a few to just put away. The recap here, guys. We had, hey, Blake Wesley, David Roddy, Jabari Walker, Marjan Bochamp, Kenneth Lofton, Red Palo to 99, Gold Russell Westbrook to 10, Orange Palo to 199. Black Pandora is Auto Malachi Brannum. And, hey, Jalen Williams, 32 of 79. Had to go to do it for the break, guys. Thanks again for the filp. Up next is the second half case. That's fine.