Blog

  • Meld Comparison of the 32 and 64 bit test programs

    This is a screenshot of a test program in two different versions. Meld allows me to see them side by side.

    When I assembly and run these programs, I get the result

    Basically, my program has a binary input string which is the same as the decimal number that looks like my birthday. This program was a basic test of “chastelib”, my Assembly Language library of functions for input and output. Writing these IO routines is one of the hardest parts for most assembly language programmers.

    Included in this post is the full source of both the 32 and 64 bit editions of my library.

    First, here is the 32 bit version.

    ; This file is where I keep my function definitions.
    ; These are usually my string and integer output routines.
    
    ; function to print zero terminated string pointed to by register eax
    
    putstring: 
    
    mov edx,eax ; copy eax to edx as well. Now both registers have the address of the main_string
    
    putstring_strlen_start: ; this loop finds the lenge of the string as part of the putstring function
    
    cmp [edx],byte 0 ; compare byte at address edx with 0
    jz strlen_end ; if comparison was zero, jump to loop end because we have found the length
    inc edx
    jmp putstring_strlen_start
    
    strlen_end:
    sub edx,eax ; edx will now have correct number of bytes when we use it for the system write call
    
    mov ecx,eax ; pointer/address of string to write
    mov eax, 4  ; invoke SYS_WRITE (kernel opcode 4 on 32 bit systems)
    ;mov ebx, 1 ; write to the STDOUT file
    int 80h     ; system call to write the message
    
    ret ; this is the end of the putstring function return to calling location
    
    ;this is the location in memory where digits are written to by the putint function
    int_string     db 32 dup '?' ;enough bytes to hold maximum size 32-bit binary integer
    ; this is the end of the integer string optional line feed and terminating zero
    ; clever use of this label can change the ending to be a different character when needed 
    int_string_end db 0Ah,0
    
    radix dd 2 ;radix or base for integer output. 2=binary, 8=octal, 10=decimal, 16=hexadecimal
    int_width dd 8
    
    ;this function creates a string of the integer in eax
    ;it uses the above radix variable to determine base from 2 to 36
    ;it then loads eax with the address of the string
    ;this means that it can be used with the putstring function
    
    intstr:
    
    mov ebp,int_string_end-1 ;find address of lowest digit(just before the newline 0Ah)
    mov ecx,1
    
    digits_start:
    
    mov edx,0;
    mov esi,[radix] ;radix is from memory location just before this function
    div esi
    cmp edx,10
    jb decimal_digit
    jge hexadecimal_digit
    
    decimal_digit: ;we go here if it is only a digit 0 to 9
    add edx,'0'
    jmp save_digit
    
    hexadecimal_digit:
    sub edx,10
    add edx,'A'
    
    save_digit:
    
    mov [ebp],dl
    cmp eax,0
    jz intstr_end
    dec ebp
    inc ecx
    jmp digits_start
    
    intstr_end:
    
    prefix_zeros:
    cmp ecx,[int_width]
    jnb end_zeros
    dec ebp
    mov [ebp],byte '0'
    inc ecx
    jmp prefix_zeros
    end_zeros:
    
    mov eax,ebp ; now that the digits have been written to the string, display it!
    
    ret
    
    
    ; function to print string form of whatever integer is in eax
    ; The radix determines which number base the string form takes.
    ; Anything from 2 to 36 is a valid radix
    ; in practice though, only bases 2,8,10,and 16 will make sense to other programmers
    ; this function does not process anything by itself but calls the combination of my other
    ; functions in the order I intended them to be used.
    
    putint: 
    
    push eax ;save eax on the stack to restore later
    
    call intstr
    
    call putstring
    
    pop eax  ;load eax from the stack so it will be as it was before this function was called
    
    ret
    
    ;this function converts a string pointed to by eax into an integer returned in eax instead
    ;it is a little complicated because it has to account for whether the character in
    ;a string is a decimal digit 0 to 9, or an alphabet character for bases higher than ten
    ;it also checks for both uppercase and lowercase letters for bases 11 to 36
    ;finally, it checks if that letter makes sense for the base.
    ;For example, G to Z cannot be used in hexadecimal, only A to F can
    ;The purpose of writing this function was to be able to accept user input as integers
    
    strint:
    
    mov esi,eax ;copy string address from eax to esi because eax will be replaced soon!
    mov eax,0
    
    read_strint:
    mov ecx,0 ; zero ecx so only lower 8 bits are used
    mov cl,[esi]
    inc esi
    cmp cl,0 ; compare byte at address edx with 0
    jz strint_end ; if comparison was zero, this is the end of string
    
    ;if char is below '0' or above '9', it is outside the range of these and is not a digit
    cmp cl,'0'
    jb not_digit
    cmp cl,'9'
    ja not_digit
    
    ;but if it is a digit, then correct and process the character
    is_digit:
    sub cl,'0'
    jmp process_char
    
    not_digit:
    ;it isn't a digit, but it could be perhaps and alphabet character
    ;which is a digit in a higher base
    
    ;if char is below 'A' or above 'Z', it is outside the range of these and is not capital letter
    cmp cl,'A'
    jb not_upper
    cmp cl,'Z'
    ja not_upper
    
    is_upper:
    sub cl,'A'
    add cl,10
    jmp process_char
    
    not_upper:
    
    ;if char is below 'a' or above 'z', it is outside the range of these and is not lowercase letter
    cmp cl,'a'
    jb not_lower
    cmp cl,'z'
    ja not_lower
    
    is_lower:
    sub cl,'a'
    add cl,10
    jmp process_char
    
    not_lower:
    
    ;if we have reached this point, result invalid and end function
    jmp strint_end
    
    process_char:
    
    cmp ecx,[radix] ;compare char with radix
    jae strint_end ;if this value is above or equal to radix, it is too high despite being a valid digit/alpha
    
    mov edx,0 ;zero edx because it is used in mul sometimes
    mul [radix]    ;mul eax with radix
    add eax,ecx
    
    jmp read_strint ;jump back and continue the loop if nothing has exited it
    
    strint_end:
    
    ret
    

    Here is the 64 bit version.

    ; This file is where I keep my function definitions.
    ; These are usually my string and integer output routines.
    
    ; function to print zero terminated string pointed to by register rax
    
    putstring: 
    
    mov rdx,rax ; copy rax to rdx as well. Now both registers have the address of the main_string
    
    putstring_strlen_start: ; this loop finds the lenge of the string as part of the putstring function
    
    cmp [rdx],byte 0 ; compare byte at address rdx with 0
    jz strlen_end ; if comparison was zero, jump to loop end because we have found the length
    inc rdx
    jmp putstring_strlen_start
    
    strlen_end:
    sub rdx,rax ; rdx will now have correct number of bytes when we use it for the system write call
    
    mov rsi,rax ; pointer/address of string to write
    mov rax,1   ; invoke SYS_WRITE (kernel opcode 1 on 64 bit systems)
    ;mov rdi,1  ; write to the STDOUT file
    syscall     ; system call to write the message
    
    ret ; this is the end of the putstring function return to calling location
    
    ;this is the location in memory where digits are written to by the putint function
    int_string     db 64 dup '?' ;enough bytes to hold maximum size 64-bit binary integer
    ; this is the end of the integer string optional line feed and terminating zero
    ; clever use of this label can change the ending to be a different character when needed 
    int_string_end db 0Ah,0
    
    radix dq 2 ;radix or base for integer output. 2=binary, 8=octal, 10=decimal, 16=hexadecimal
    int_width dq 8
    
    ;this function creates a string of the integer in rax
    ;it uses the above radix variable to determine base from 2 to 36
    ;it then loads rax with the address of the string
    ;this means that it can be used with the putstring function
    
    intstr:
    
    mov rbp,int_string_end-1 ;find address of lowest digit(just before the newline 0Ah)
    mov rcx,1
    
    digits_start:
    
    mov rdx,0;
    mov rsi,[radix] ;radix is from memory location just before this function
    div rsi
    cmp rdx,10
    jb decimal_digit
    jge hexadecimal_digit
    
    decimal_digit: ;we go here if it is only a digit 0 to 9
    add rdx,'0'
    jmp save_digit
    
    hexadecimal_digit:
    sub rdx,10
    add rdx,'A'
    
    save_digit:
    
    mov [ebp],dl
    cmp rax,0
    jz intstr_end
    dec rbp
    inc rcx
    jmp digits_start
    
    intstr_end:
    
    prefix_zeros:
    cmp rcx,[int_width]
    jnb end_zeros
    dec rbp
    mov [rbp],byte '0'
    inc rcx
    jmp prefix_zeros
    end_zeros:
    
    mov rax,rbp ; now that the digits have been written to the string, display it!
    
    ret
    
    
    ; function to print string form of whatever integer is in rax
    ; The radix determines which number base the string form takes.
    ; Anything from 2 to 36 is a valid radix
    ; in practice though, only bases 2,8,10,and 16 will make sense to other programmers
    ; this function does not process anything by itself but calls the combination of my other
    ; functions in the order I intended them to be used.
    
    putint: 
    
    push rax ;save rax on the stack to restore later
    
    call intstr
    
    call putstring
    
    pop rax  ;load rax from the stack so it will be as it was before this function was called
    
    ret
    
    ;this function converts a string pointed to by eax into an integer returned in eax instead
    ;it is a little complicated because it has to account for whether the character in
    ;a string is a decimal digit 0 to 9, or an alphabet character for bases higher than ten
    ;it also checks for both uppercase and lowercase letters for bases 11 to 36
    ;finally, it checks if that letter makes sense for the base.
    ;For example, G to Z cannot be used in hexadecimal, only A to F can
    ;The purpose of writing this function was to be able to accept user input as integers
    
    strint:
    
    mov rsi,rax ;copy string address from eax to esi because eax will be replaced soon!
    mov rax,0
    
    read_strint:
    mov rcx,0 ; zero ecx so only lower 8 bits are used
    mov cl,[rsi]
    inc rsi
    cmp cl,0 ; compare byte at address edx with 0
    jz strint_end ; if comparison was zero, this is the end of string
    
    ;if char is below '0' or above '9', it is outside the range of these and is not a digit
    cmp cl,'0'
    jb not_digit
    cmp cl,'9'
    ja not_digit
    
    ;but if it is a digit, then correct and process the character
    is_digit:
    sub cl,'0'
    jmp process_char
    
    not_digit:
    ;it isn't a digit, but it could be perhaps and alphabet character
    ;which is a digit in a higher base
    
    ;if char is below 'A' or above 'Z', it is outside the range of these and is not capital letter
    cmp cl,'A'
    jb not_upper
    cmp cl,'Z'
    ja not_upper
    
    is_upper:
    sub cl,'A'
    add cl,10
    jmp process_char
    
    not_upper:
    
    ;if char is below 'a' or above 'z', it is outside the range of these and is not lowercase letter
    cmp cl,'a'
    jb not_lower
    cmp cl,'z'
    ja not_lower
    
    is_lower:
    sub cl,'a'
    add cl,10
    jmp process_char
    
    not_lower:
    
    ;if we have reached this point, result invalid and end function
    jmp strint_end
    
    process_char:
    
    cmp rcx,[radix] ;compare char with radix
    jae strint_end ;if this value is above or equal to radix, it is too high despite being a valid digit/alpha
    
    mov rdx,0 ;zero edx because it is used in mul sometimes
    mul [radix]    ;mul eax with radix
    add rax,rcx
    
    jmp read_strint ;jump back and continue the loop if nothing has exited it
    
    strint_end:
    
    ret
    

    The purpose of this post is mostly as a backup, in addition to my git repository that I use for my programming book. These functions represent my years of experience at converting between number bases.

  • Two Linux Assembly Hello World Programs

    I have two screenshots showing the exact same “Hello World” program using 32 bit and 64 bit Linux system calls in intel assembly language. The names of the registers and the number of the system calls differ slightly but the behavior is exactly the same.

    The purpose of a “Hello World” program is more important than you might think at first. It confirms that the assembler is working (in this case FASM), and that the assembly instructions and system calls match the operating system. In my case, I am running Debian Linux on a 64 bit computer which is capable of 64 or 32 bit code. I tend to prefer the 32 bit version because I am used to it. Back in my days of learning programming, there were no 64 bit registers.

  • Chandler Klebs Binary Calculator.

    Today, I am taking a break from my usual writing just to announce that I found an old program I wrote in 2013 that was still on my Dropbox account. It is the Chandler Klebs Binary Calculator.

    https://github.com/chastitywhiterose/Chandler-Klebs-Binary-Calculator

    I will keep this project available in honor of who I used to be. I may be Chastity now, but the one thing that has not changed is my love for the Binary Numeral System and Computer Programming.

    I have also been thinking about a new project that uses the same idea of a stack-based or Reverse Polish Notation calculator. For example, the Forth Programming Language and the Linux “dc” program use this notation to act as a basic calculator.

    If you don’t know what I am talking about, just know that this is a calculator format that does not require you to remember the order of operations, and no parentheses are required. This calculator notation means none of that “Please Excuse My Dear Aunt Sally” nonsense in some math textbooks. Humans are bad at performing math and even worse at teaching it. Math can be done better. We see evidence of this with the design of programming languages and calculator programs that find more efficient ways of calculating the result of any arithmetic operation.

  • Chapter 17: Blessed are the Peacemakers

    Right now, in September 2025, the world has gone mad on social media, with everyone having an opinion on the murder of Charlie Kirk. I have no such opinion about him but I think it is a fine time to remind you why I have been committed to non-violence for many years. Therefore, my only statement that I will ever make is that it doesn’t matter who Charlie was or whether you like the things he said; the fact is, nobody should be shot just for what they are speaking.

    I didn’t know Charlie and I didn’t know who he was prior to his being shot on September 10, 2025. However, I thought it was quite strange that this one act of murder got so much media attention, even though people are getting shot, bombed, stabbed, or starved to death, including many of those who are innocent and have done nothing wrong.

    Although I didn’t know Charlie Kirk personally, I think he had the right idea because he did not commit violence against people, but instead he had debates with them and talked about disagreements rather than resorting to violence. He talked to people, and he said some things that people disagreed with sometimes. After the news broke that he was shot, many people on Facebook, Instagram, and TikTok were celebrating that he was shot and said he deserved it.

    The real tragedy is not the death of Charlie Kirk but the death of freedom of speech. If you kill someone just because you don’t like what they said, then the same reasoning could be used to kill you when someone doesn’t like what you said.

    Moreover, I think violence is for the weak. I think it takes a stronger person to have difficult conversations about areas of disagreement and try to resolve them through peaceful means. I personally think that guns, bombs, and all manner of military equipment should be destroyed because nobody should be killing anyone.

    Let me be clear, I understand that others are violent and that they do not follow my philosophy of radical pacifism and peaceful protest. I also don’t think someone can reach this stage without an evolution in ethics and a strong moral framework based on a solid philosophy or religion.

    To be a peacemaker is to take the hard route, instead of the easy path of violence. Living peacefully and resolving conflicts takes time, conversations, studying history, reading books, and considering each new issue as it arises.

    Charlie was not perfect. He was just as flawed as any human is, but he did identify as a Christian, and I think he would have understood that violence is not good. Those who call themselves Christians would do well to remember what Jesus said about the importance of being peaceful and non-violent.


    Matthew 26:47 While he was still speaking, Judas, one of the twelve, arrived. With him was a large crowd armed with swords and clubs, sent by the chief priests and elders of the people. 48 (Now the betrayer had given them a sign, saying, “The one I kiss is the man. Arrest him!”) 49 Immediately he went up to Jesus and said, “Greetings, Rabbi,” and kissed him. 50 Jesus said to him, “Friend, do what you are here to do.” Then they came and took hold of Jesus and arrested him. 51 But one of those with Jesus grabbed his sword, drew it out, and struck the high priest’s slave, cutting off his ear. 52 Then Jesus said to him, “Put your sword back in its place! For all who take hold of the sword will die by the sword. 53 Or do you think that I cannot call on my Father and that he would send me more than 12 legions of angels right now? 54 How then would the scriptures that say it must happen this way be fulfilled?” 55 At that moment Jesus said to the crowd, “Have you come out with swords and clubs to arrest me like you would an outlaw? Day after day I sat teaching in the temple courts, yet you did not arrest me. 56 But this has happened so that the scriptures of the prophets would be fulfilled.” Then all the disciples left him and fled.


    Charlie was not a Vegan, unfortunately, and he did not take a Vegan seriously when they brought up the issue. Although Charlie called himself Pro-Life when it came to humans, he was dismissive of the idea that we should not cause unnecessary suffering and death to animals. He also interrupted a lot and changed the subject.

    Charlie Kirk Deleted This Debate With a Vegan

    I Debated Charlie Kirk – He Deleted The Video

    I bring this up not to say that Charlie deserved to be shot. Rather, I mention it to show why even his attitudes and those who celebrated his death are operating under a culture of violence. People believe that they have the right to kill any animal, including humans, as soon as they disagree with them or are of a difference race, species, religion, or political affiliation.

    Charlie got the Vegan topic wrong, and sadly, due to his death, we will never see him become consistently pro-life.

    There is one thing I do agree with Charlie on, though; he was right to be against abortion. In fact, one of the things many people criticized him for was saying that the 45 million babies killed in abortion was worse than the Holocaust, where 6 million Jews were killed.

    Charlie Kirk Compares Abortion to the Holocaust

    Charlie’s logic is correct on this issue. Deciding that a group of people is unwanted or undesirable and then killing them all is an unjustifiable genocide.

    And if Charlie were still alive, I would suggest to him that he use this same logic to reconsider what humans do to animals.

    https://christspiracy.com/

    The Ugly Truth: Most Important Films to Watch

    At this time, people are also trying to blame the transgender people for the death of Charlie Kirk. I must admit that part of the problem is that so many young people, including many transgender people, are celebrating the death of Charlie Kirk. This does not make us look any better in a time when we are the most hated group of people in the United States of America.

    Shortly after the death of Charlie Kirk, I couldn’t help but notice that the attitudes of some of my coworkers had changed towards me. Everyone was talking about the death of Charlie Kirk because it was all over the news media. They looked at me as if I had killed him, just because I am transgender.

    I didn’t want to make a statement about this issue, but I also felt a responsibility to say something because I will not risk my silence being interpreted as meaning that I am in favor of the murder of Charlie Kirk.

    When Transgender people are happy about the death of some famous dude like Charlie, how is it any better than when people murder transgender people?

    When Charlie jokes and cuts off a Vegan who questions him on veganism, how is he any better than those who laughed at him after he was shot?

    In times like this when a single word can inspire people to shoot or bomb people, I am reminded of a quote from Schindler’s List when Oskar Schindler explained what true power is to Amon Goeth.


    Schindler: They fear us because we have the power to kill arbitrarily. A man commits a crime, he should know better. We have him killed and we feel pretty good about it. Or we kill him ourselves and we feel even better. That’s not power, though, that’s justice. That’s different than power. Power is when we have every justification to kill – and we don’t. Goeth: You think that’s power.

    Schindler: That’s what the emperors had. A man stole something, he’s brought in before the emperor, he throws himself down on the ground, he begs for mercy, he knows he’s going to die. And the emperor pardons him. This worthless man, he lets him go.

    Goeth: I think you are drunk.

    Schindler: That’s power, Amon. That is power.


    Similarly, I think true power is to be able to do better than violence. Instead, we can educate, we can peacefully protest, and we can write and record ideas that live long after we die. Which reminds me, I have one more quote to share for this chapter.


    V: “Beneath this mask there is more than flesh. Beneath this mask there is an idea, Mr. Creedy, and ideas are bulletproof.”


    Killing people does not stop their ideas, their philosophy, their religion, or anything that they stood for. The death of someone solves nothing, helps no one, and is nothing to celebrate. Instead of killing people, become a peacemaker, because that is true power.

    Matthew 5:9 Blessed are the peacemakers, for they will be called the children of God.

  • Chapter 16: Pedophilia is no Joke

    An event happened that made me feel suicidal in the winter near Christmas time. A team lead at Walmart decided it would be a good idea to bother me while I was stocking the baking aisle A17. He decided to ask me if I wanted to have children. I told him maybe if I were married and wanted to adopt children. And he said, “No, I mean HAVE children in a way like pedophilia”.

    I was upset at the time, but told him I would never hurt a child because I know what it’s like to be molested. He went on, and I went back to stocking and trying to look like I was okay. Inside, I was thinking, “What the hell?!?!?! Why would he even ask me that?”

    A few days later, I questioned him on why he asked me that. He said he was joking, but I said it was not something to joke about at work and distract me from my job. He said, “Why does it bother you if it’s not true?”

    He apologized, reluctantly, in the presence of the overnight coach who witnessed our short fight.

    I was not completely satisfied with this, and he still made plenty of sexual jokes over the next few months. After a while, I really started wondering if he jokes this way with everyone (not good), or if he specifically is targeting me because I am a transgender woman.

    At first, I was afraid to report it because I knew the history of LGBTQIA+ people being accused of all being child molesters. It also became more prevalent during this time because of the open political hatred of transgender people during 2024 and 2025. Therefore, I had reason to believe I could be arrested just on the accusation of being a person who was sexually attracted to children, even if I had never done anything to suggest this was true, nor would I have done something sexual to a child even if it were true.

    I had a difficult decision to make:

    1. Report to ethics and get fired because they will probably think I am a pedophile, and then call the police. I could be written into a sex offender registry, quite possibly be sent to a men’s prison, and be raped by actual violent criminals.

    2. Quit my job to avoid seeing this team lead, who apparently thought I was a pedophile and that it was some kind of joke to ask me about it.

    3. Commit suicide because I live in a world where other transgender women are murdered every single day by transphobic people who assume they are criminals and deserve it.

    4. Stay silent and hope the problem goes away.

    I chose option 4 for longer than I should have; however, Pride Month of 2025 broke me emotionally. I started working on my book, Walking the Rainbow Bridge, for my Portfolio 3 project with Full Sail University.

    During this time, I did a lot of research and read the worst transphobic content on the internet. I became very depressed as I considered how dangerous the situation was. Finally, I decided to make a report against this team lead to protect other people. No matter what happens to me, I don’t want him to talk to someone else this way.

    1. It is simply unacceptable to distract someone from the work they are being paid to do with personal matters that should not be discussed in the workplace.
    2. Even if someone is a pedophile, this is not the same as a child molester. People don’t have to have sex with someone they are attracted to. Therefore, they are not a threat to anyone, especially if all they are doing is stocking shelves at Walmart.
    3. Pedophilia is no joke. It is an unfortunate condition to be attracted to children sexually. I feel bad for these people because they were also born with a brain that does not operate in a way society understands, and they face much persecution. This topic is nothing to joke about; no matter who you are or what your position is, it is not funny.

    Also, to make matters clear, a Pedophile is someone who is sexually attracted to children. A child molester is someone who actually tries to have sex with children. A person can be a pedophile but never have sex with children. A person can molest a child even if they are not a pedophile. These two things are only loosely related.

    I am tired of being treated as if I were some kind of danger to children. I was quite offended and depressed at the thought that this team lead thought that I wanted to have sex with children. Even now, I worry about what led him to think this about me. Is it because I am transgender, or is he trying to tell me something about himself? Either way, this has no place at Walmart or anywhere, for that matter, except perhaps a therapist’s office.

    The only reason I wrote this is so that people are aware of the reality that the innocent rainbow people are often accused of unspeakable crimes against children. But that’s not even the worst part. Those who are raping children are not the ones being called pedophiles. Most children are raped by their own fathers or a catholic priest. An overnight stocker at your local Walmart is not someone you should be afraid of. But that one team lead who thinks Pedophilia is some kind of joke, I still worry about him whenever I have to work overnight at Walmart.

    The conversation on the topic of Pedophilia should be had only outside of the workplace, but I do believe it is worth discussing. There are two main types of pedophiles.

    1. The people sexually attracted to children who will try to rape them if they have the chance.
    2. The people sexually attracted to children who, despite being sexually attracted to them, know that children cannot consent to sexual behavior of any kind. They know it is wrong to hurt children and would never do anything.

    However, society in general does not know the difference between these two types. More importantly, those who are born with the unfortunate condition of being attracted to children don’t really have a way to seek help. If they talk to a therapist about it, that therapist will probably be required to report it to others, and therefore, the person ends up on a sex offender registry, despite not committing any crime or even intending to.

    Therefore, the sad truth is that it seems the only option for a pedophile is to commit to a life of celibacy and keep their attraction a secret. Perhaps this is why the profession of being a catholic priest seems so attractive to people with this condition.

    But I also can’t help but wonder why people have repeatedly accused me of being a pedophile. My only guess is that they take my lack of sexual interest and lack of any activity as a sign that I am the same as those priests who claim to be celibate but are raping children.

    The difference is that I am a celibate person, not because the catholic church mandates it, but because it is the right thing to do. Unlike most Christians who view homosexuality as a sin, I apply the same standards to all sexual activity, no matter whether it is heterosexual, homosexual, adult, or child.

    I would prefer a world where biological sex and genitals didn’t even exist. Then no more children would be hurt. I say this as a child who was raped at the age of two years old.

    No, I am not a pedophile, and no, I do not in any way condone sexual relations with children. However, if being paranoid and protecting your kids from anyone who you think is a threat keeps them safe, then I suggest you do so.

    I have intentionally held back writing this chapter for months, even though it was on my mind constantly. However, just a few days ago, on September 10th, 2025, Charlie Kirk was shot in the neck and died very quickly. I just wanted to make sure that before someone shoots me in the neck that I have written what I need to say. Every death is a reminder of how short and unpredictable life is. Don’t wait until it is too late to write the book you have been planning, spend time with your loved ones, and live authentically for what you believe in, even though doing so is probably why someone will shoot you for it.