initial draft

This commit is contained in:
sneakers-the-rat 2024-05-13 22:46:17 -07:00
commit 56087703a0
Signed by untrusted user who does not match committer: jonny
GPG key ID: 6DCB96EF1E4D232D
18 changed files with 5853 additions and 0 deletions

1
.gitignore vendored Normal file
View file

@ -0,0 +1 @@
.venv

17
README.md Normal file
View file

@ -0,0 +1,17 @@
Install deps (with pdm):
```bash
cd src
pdm install
source ./.venv/bin/activate
```
To build:
from repository root -
```bash
mkdocs build -f ./src/mkdocs.yml -d ../build/site
```
use [monolith](https://github.com/Y2Z/monolith) to make the self-contained page in `build/monolith`

File diff suppressed because one or more lines are too long

251
build/site/css/timeline.css Normal file
View file

@ -0,0 +1,251 @@
@import url('https://fonts.googleapis.com/css2?family=Chivo:ital,wght@0,200;1,200&family=Roboto:ital,wght@0,700;1,700&display=swap');
:root {
--header-font: "Roboto", "aktiv-grotesk", sans-serif;
--body-font: "Chivo", serif;
--primary-color: #1A1A1A;
--primary-color-shade-0: #CACACA;
--primary-color-shade-0-alpha: #CACACA00;
--secondary-color: #FFDE00;
}
body {
font-family: var(--body-font);
font-weight: 200;
}
h1 {
font-family: var(--header-font);
font-weight: bold;
}
.nt-timeline-title {
font-family: var(--header-font);
font-weight: bold;
}
/* nt-timeline vendoring */
.nt-timeline {
margin-top: 30px;
}
.nt-timeline .nt-timeline-title {
font-size: 1.1rem;
margin-top: 0;
}
.nt-timeline .nt-timeline-sub-title {
margin-top: 0;
}
.nt-timeline .nt-timeline-content {
font-size: 1rem;
border-bottom: 2px dashed #ccc;
padding-bottom: 1.2rem;
}
.nt-timeline.horizontal .nt-timeline-items {
flex-direction: row;
overflow-x: scroll;
}
.nt-timeline.horizontal .nt-timeline-items > div {
min-width: 400px;
margin-right: 50px;
}
.nt-timeline.horizontal.reverse .nt-timeline-items {
flex-direction: row-reverse;
}
.nt-timeline.horizontal.center .nt-timeline-before {
background-image: linear-gradient(rgba(252, 70, 107, 0) 0%, rgb(252, 70, 107) 100%);
background-repeat: no-repeat;
background-size: 100% 2px;
background-position: 0 center;
}
.nt-timeline.horizontal.center .nt-timeline-after {
background-image: linear-gradient(180deg, var(--primary-color-shade-0) 0%, var(--primary-color-shade-0) 100%);
background-repeat: no-repeat;
background-size: 100% 2px;
background-position: 0 center;
}
.nt-timeline.horizontal.center .nt-timeline-items {
background-image: radial-gradient(circle, rgb(63, 94, 251) 0%, rgb(252, 70, 107) 100%);
background-repeat: no-repeat;
background-size: 100% 2px;
background-position: 0 center;
}
.nt-timeline.horizontal .nt-timeline-dot {
left: 50%;
}
.nt-timeline.horizontal .nt-timeline-dot:not(.bigger) {
top: calc(50% - 4px);
}
.nt-timeline.horizontal .nt-timeline-dot.bigger {
top: calc(50% - 15px);
}
.nt-timeline.vertical .nt-timeline-items {
flex-direction: column;
}
.nt-timeline.vertical.reverse .nt-timeline-items {
flex-direction: column-reverse;
}
.nt-timeline.vertical.center .nt-timeline-before {
background: linear-gradient(rgba(252, 70, 107, 0) 0%, rgb(252, 70, 107) 100%) no-repeat center/2px 100%;
}
.nt-timeline.vertical.center .nt-timeline-after {
background: linear-gradient(rgb(252, 70, 107) 0%, rgba(252, 70, 107, 0) 100%) no-repeat center/2px 100%;
}
.nt-timeline.vertical.center .nt-timeline-items {
background: radial-gradient(circle, rgb(63, 94, 251) 0%, rgb(252, 70, 107) 100%) no-repeat center/2px 100%;
}
.nt-timeline.vertical.center .nt-timeline-dot {
left: calc(50% - 10px);
}
.nt-timeline.vertical.center .nt-timeline-dot:not(.bigger) {
top: 10px;
}
.nt-timeline.vertical.center .nt-timeline-dot.bigger {
left: calc(50% - 20px);
}
.nt-timeline.vertical.left {
padding-left: 100px;
}
.nt-timeline.vertical.left .nt-timeline-item {
padding-left: 70px;
}
.nt-timeline.vertical.left .nt-timeline-sub-title {
left: -100px;
width: 100px;
text-align: right;
}
.nt-timeline.vertical.left .nt-timeline-before {
background: linear-gradient(var(--primary-color-shade-0-alpha) 0%, var(--primary-color-shade-0) 100%) no-repeat 30px/2px 100%;
}
.nt-timeline.vertical.left .nt-timeline-after {
background: linear-gradient(var(--primary-color-shade-0) 0%, var(--primary-color-shade-0-alpha) 100%) no-repeat 30px/2px 100%;
}
.nt-timeline.vertical.left .nt-timeline-items {
background: radial-gradient(circle, var(--primary-color) 0%, var(--primary-color-shade-0) 100%) no-repeat 30px/2px 100%;
}
.nt-timeline.vertical.left .nt-timeline-dot {
left: 24px;
top: 5px;
}
.nt-timeline.vertical.left .nt-timeline-dot.bigger {
top: 0px;
left: 10px;
}
.nt-timeline.vertical.right {
padding-right: 100px;
}
.nt-timeline.vertical.right .nt-timeline-sub-title {
right: -100px;
text-align: left;
width: 100px;
}
.nt-timeline.vertical.right .nt-timeline-item {
padding-right: 70px;
}
.nt-timeline.vertical.right .nt-timeline-before {
background: linear-gradient(rgba(252, 70, 107, 0) 0%, rgb(252, 70, 107) 100%) no-repeat calc(100% - 30px)/2px 100%;
}
.nt-timeline.vertical.right .nt-timeline-after {
background: linear-gradient(rgb(252, 70, 107) 0%, rgba(252, 70, 107, 0) 100%) no-repeat calc(100% - 30px)/2px 100%;
}
.nt-timeline.vertical.right .nt-timeline-items {
background: radial-gradient(circle, rgb(63, 94, 251) 0%, rgb(252, 70, 107) 100%) no-repeat calc(100% - 30px)/2px 100%;
}
.nt-timeline.vertical.right .nt-timeline-dot {
right: 21px;
top: 8px;
}
.nt-timeline.vertical.right .nt-timeline-dot.bigger {
top: 10px;
right: 10px;
}
.nt-timeline-items {
display: flex;
position: relative;
}
.nt-timeline-items > div {
min-height: 100px;
padding-top: 2px;
padding-bottom: 20px;
}
.nt-timeline-before {
content: "";
height: 15px;
}
.nt-timeline-after {
content: "";
height: 60px;
margin-bottom: 20px;
}
.nt-timeline-sub-title {
position: absolute;
width: 50%;
top: 4px;
font-size: 18px;
color: var(--nt-color-50);
}
[data-md-color-scheme=slate] .nt-timeline-sub-title {
color: var(--nt-color-51);
}
.nt-timeline-item {
position: relative;
}
.nt-timeline.vertical.center:not(.alternate) .nt-timeline-item {
padding-left: calc(50% + 40px);
}
.nt-timeline.vertical.center:not(.alternate) .nt-timeline-item .nt-timeline-sub-title {
left: 0;
padding-right: 40px;
text-align: right;
}
.nt-timeline.vertical.center.alternate .nt-timeline-item:nth-child(odd) {
padding-left: calc(50% + 40px);
}
.nt-timeline.vertical.center.alternate .nt-timeline-item:nth-child(odd) .nt-timeline-sub-title {
left: 0;
padding-right: 40px;
text-align: right;
}
.nt-timeline.vertical.center.alternate .nt-timeline-item:nth-child(even) {
text-align: right;
padding-right: calc(50% + 40px);
}
.nt-timeline.vertical.center.alternate .nt-timeline-item:nth-child(even) .nt-timeline-sub-title {
right: 0;
padding-left: 40px;
text-align: left;
}
.nt-timeline-dot {
position: relative;
width: 10px;
height: 10px;
border-radius: 100%;
background-color: var(--secondary-color);
position: absolute;
top: 0px;
z-index: 2;
display: flex;
justify-content: center;
align-items: center;
box-shadow: 0 2px 1px -1px rgba(0, 0, 0, 0.2), 0 1px 1px 0 rgba(0, 0, 0, 0.14), 0 1px 3px 0 rgba(0, 0, 0, 0.12);
border: 3px solid var(--primary-color);
}
.nt-timeline-dot:not(.bigger) .icon {
font-size: 10px;
}
.nt-timeline-dot.bigger {
width: 40px;
height: 40px;
padding: 3px;
}
.nt-timeline-dot .icon {
color: white;
}

230
build/site/index.html Normal file
View file

@ -0,0 +1,230 @@
<!doctype html>
<html>
<head>
<link rel="stylesheet" href="css/timeline.css">
</head>
<div class="nt-timeline vertical left">
<div class="nt-timeline-before"></div>
<div class="nt-timeline-items">
<div class="nt-timeline-item">
<p class="nt-timeline-title">Camp Established</p>
<span class="nt-timeline-sub-title">April 25</span><p class="nt-timeline-content">Early Thursday morning, UCLA students and employees set up tents on Dickson Court outside Royce Hall, establishing Palestine Solidarity Encampment. <br><br>
UCLA issues a BruinALERT: "We're actively monitoring this situation to support a safe and peaceful campus environment that respects our community's right to free expression while minimizing disruption to our teaching and learning mission."
</p>
<div class="nt-timeline-dot "></div>
</div>
<div class="nt-timeline-item">
<p class="nt-timeline-title">UCLA Issues First Statement</p>
<span class="nt-timeline-sub-title">April 26</span><p class="nt-timeline-content">UCLA issues <a href="https://newsroom.ucla.edu/ucla-statement-about-encampment-on-campus-april-26">a statement</a> on the encampment, including: "we are following University of California systemwide policy guidance, which directs us not to request law enforcement involvement preemptively, and only if absolutely necessary to protect the physical safety of our campus community"
</p>
<div class="nt-timeline-dot "></div>
</div>
<div class="nt-timeline-item">
<p class="nt-timeline-title">Peaceful Demonstration</p>
<p class="nt-timeline-content">The first phase of the encampment is marked by education and solidarity - with daily programming including teach-ins and multi-faith prayer. Counter-protesters are almost continuously present around the encampment day and night, and organizers are careful to de-escalate the few small scuffles between groups, but some injuries are reported among members of the encampment and counter-protesters.
</p>
<div class="nt-timeline-dot "></div>
</div>
<div class="nt-timeline-item">
<p class="nt-timeline-title">First Major Counter-demonstration</p>
<span class="nt-timeline-sub-title">April 28</span><p class="nt-timeline-content">Several groups organize a <a href="https://dailybruin.com/2024/04/27/counter-protests-of-ucla-encampment-raise-over-50000-on-gofundme">counter-demonstration</a> after raising $50,000 ($98,000 <a href="https://web.archive.org/web/20240514011726/https://www.gofundme.com/f/ucla-counter-protest">at the time of writing</a>) to fund a stage, jumbotron and loudspeakers for the event. Barricades separating the crowds of thousands are <a href="https://dailybruin.com/2024/04/28/protesters-counter-protesters-clash-as-they-converge-upon-ucla-encampment">breached</a> multiple times, and violence <a href="https://x.com/ACatWithNews/status/1784680676106870952">escalates</a> as private security officers fail to maintain a barrier between protesters and counter-protesters.
</p>
<div class="nt-timeline-dot "></div>
</div>
<div class="nt-timeline-item">
<p class="nt-timeline-title">Psychological Warfare</p>
<span class="nt-timeline-sub-title">April 28-May 1</span><p class="nt-timeline-content">The jumbotron and loudspeakers are allowed to stay on Dickson court throughout the week, playing footage from October 7th and sounds like <a href="https://youtu.be/_jL8cDm5Th4">babies crying</a> on repeat through the day and night to prevent sleep, a <a href="https://lapublicpress.org/2024/05/two-nights-of-violence-at-uclas-solidarity-encampment/">known torture tactic</a>.
</p>
<div class="nt-timeline-dot "></div>
</div>
<div class="nt-timeline-item">
<p class="nt-timeline-title">Encampment Declared Illegal</p>
<span class="nt-timeline-sub-title">April 30</span><p class="nt-timeline-content">UCLA declares the encampment illegal and warns everyone to leave.</p>
<div class="nt-timeline-dot "></div>
</div>
</div>
<div class="nt-timeline-after"></div>
</div>
<h2 id="april-30-the-encampment-is-attacked">April 30 - The Encampment is Attacked</h2>
<p>All times approximate.</p>
<div class="nt-timeline vertical left">
<div class="nt-timeline-before"></div>
<div class="nt-timeline-items">
<div class="nt-timeline-item">
<p class="nt-timeline-title">Attack Begins</p>
<span class="nt-timeline-sub-title">10:40pm
</span><p class="nt-timeline-content">Members of the encampment are <a href="https://x.com/m0thercity/status/1785593008693579901">peacefully occupying the camp</a>, when a crowd begins to <a href="https://youtu.be/C5LLK2SogPs?t=425">tear apart the barricade</a> surrounding the encampment. Members of the encampment reinforce the barricades, and private security halfheartedly tries to re-establish the buffer between the groups but do nothing to intervene.
</p>
<div class="nt-timeline-dot "></div>
</div>
<div class="nt-timeline-item">
<p class="nt-timeline-title">Police Notified</p>
<span class="nt-timeline-sub-title">10:45pm
</span><p class="nt-timeline-content">Administrative Vice Chancellor Michael Beck <a href="https://www.latimes.com/california/story/2024-05-07/a-ucla-timeline-from-peaceful-encampment-to-violent-attacks-aftermath">requests assistance</a> from LAPD Chief John Thomas, LASD, Beverly Hills, Culver City and Santa Monica Police Departments.
</p>
<div class="nt-timeline-dot "></div>
</div>
<div class="nt-timeline-item">
<p class="nt-timeline-title">Attack Escalates</p>
<span class="nt-timeline-sub-title">10:50pm
</span><p class="nt-timeline-content">Private security abandons the area, and the metal barricades outside of the encampment are completely removed. Attacks come in waves, with attackers retreating into Dickson plaza, and then returning in force to attack the barricades together. Attackers alternate between tearing down the barricade and attacking students and staff in the encampment with pipes, boards, lasers, <a href="https://youtu.be/C5LLK2SogPs?t=901">bear mace, skunk spray,</a> and <a href="https://youtu.be/C5LLK2SogPs?t=1455">Tasers</a>. Throughout the attack, members and organizers of the encampment do not pursue the attackers, maintaining their barricades.
</p>
<div class="nt-timeline-dot "></div>
</div>
<div class="nt-timeline-item">
<p class="nt-timeline-title">Private Security Leave</p>
<span class="nt-timeline-sub-title">10:53pm
</span><p class="nt-timeline-content">Campus security guards <a href="https://lapublicpress.org/2024/05/two-nights-of-violence-at-uclas-solidarity-encampment/">leave the scene,</a> or stand on the sidelines and watch.
</p>
<div class="nt-timeline-dot "></div>
</div>
<div class="nt-timeline-item">
<p class="nt-timeline-title">Fireworks Begin</p>
<span class="nt-timeline-sub-title">11:00pm
</span><p class="nt-timeline-content"><a href="https://www.nytimes.com/interactive/2024/05/03/us/ucla-protests-encampment-violence.html">Attackers launch large mortar fireworks directly into the encampment,</a> knocking a student <a href="https://www.latimes.com/california/story/2024-05-10/how-social-media-rumors-sparked-a-night-of-mayhem-at-ucla">unconscious</a> and hospitalizing her with a concussion after one explodes feet from her head.
</p>
<div class="nt-timeline-dot "></div>
</div>
<div class="nt-timeline-item">
<p class="nt-timeline-title">UCPD Arrives, Leaves</p>
<span class="nt-timeline-sub-title">11:15pm
</span><p class="nt-timeline-content">Two UCPD police cars arrive with an ambulance, treat someone, and <a href="https://www.latimes.com/california/story/2024-05-10/how-social-media-rumors-sparked-a-night-of-mayhem-at-ucla">leave 4 minutes later</a>.
</p>
<div class="nt-timeline-dot "></div>
</div>
<div class="nt-timeline-item">
<p class="nt-timeline-title">Injured Students Carried Out, Attacked</p>
<span class="nt-timeline-sub-title">11:27pm, continuous
</span><p class="nt-timeline-content">Injured students are being continuously carried out of the encampment to seek medical attention as no further ambulances are arriving, allegedly <a href="https://x.com/m0thercity/status/1785581710673162593">blocked by UCPD</a>. Attackers <a href="https://x.com/joeyneverjoe/status/1785556603602661422">throw a firework</a> directly at an injured student on a makeshift gurney.
</p>
<div class="nt-timeline-dot "></div>
</div>
<div class="nt-timeline-item">
<p class="nt-timeline-title">LAPD Chief Arrives, Officers Told to Wait</p>
<span class="nt-timeline-sub-title">12:00am
</span><p class="nt-timeline-content">LAPD chief Thomas arrives on campus <a href="https://www.latimes.com/california/story/2024-05-07/a-ucla-timeline-from-peaceful-encampment-to-violent-attacks-aftermath">shortly before midnight</a> asking officers on the scene "why they couldn't go in with the officers they had, and the lieutenant told him he was directed to wait."
</p>
<div class="nt-timeline-dot "></div>
</div>
<div class="nt-timeline-item">
<p class="nt-timeline-title">Attackers Pick Off Students As They Reinforce Barricades</p>
<span class="nt-timeline-sub-title">12:30AM, continuous
</span><p class="nt-timeline-content">As the students in the encampment try and reinforce their barricades, <a href="https://x.com/ACatWithNews/status/1785577318121119787">attackers pick them off</a>, <a href="https://www.nytimes.com/interactive/2024/05/03/us/ucla-protests-encampment-violence.html">pulling them into mobs</a>, spraying chemical irritants and hitting them with pipes and boards.
</p>
<div class="nt-timeline-dot "></div>
</div>
<div class="nt-timeline-item">
<p class="nt-timeline-title">LAPD thinks about responding</p>
<span class="nt-timeline-sub-title">12:32am
</span><p class="nt-timeline-content">A man on the LAPD police scanner says they "<a href="https://www.washingtonpost.com/investigations/2024/05/11/ucla-protests-police-inaction-fights/">might want to launch a UCLA unit</a>." Attacks intensify further, the crowd in the hundreds.
</p>
<div class="nt-timeline-dot "></div>
</div>
<div class="nt-timeline-item">
<p class="nt-timeline-title">Police officers arrive</p>
<span class="nt-timeline-sub-title">1:43am
</span><p class="nt-timeline-content">A line of CHP and LAPD officers begin lining up on the far end of Dickson Court near Portola Plaza. Attacks have been continuous and escalating since they began, and <a href="https://abc7.com/videoClip/14749795/">continue</a> in plain view of the assembled police. Some attackers are masked, but many are <a href="https://www.youtube.com/live/v3bAl2VshnA?t=6348">plainly identifiable</a>.
</p>
<div class="nt-timeline-dot "></div>
</div>
<div class="nt-timeline-item">
<p class="nt-timeline-title">Students Reinforce with Supplies</p>
<span class="nt-timeline-sub-title">2:00am, continuous
</span><p class="nt-timeline-content">On the other side of the attack at the Tongva Steps, <a href="https://itsgoingdown.org/the-cops-brought-guns-ucla-report/">students continued to resupply the encampment</a> with water, masks, food, and goggles - fearless in the face of violence.
</p>
<div class="nt-timeline-dot "></div>
</div>
<div class="nt-timeline-item">
<p class="nt-timeline-title">Police Begin to advance</p>
<span class="nt-timeline-sub-title">2:45am
</span><p class="nt-timeline-content">An hour after beginning to assemble, and <a href="https://www.washingtonpost.com/investigations/2024/05/11/ucla-protests-police-inaction-fights/">four hours</a> after the attack began, CHP and LAPD officers begin <a href="https://www.youtube.com/live/d5YNEoTqMZ4?t=2259">advancing</a> on the encampment. Attacks persist. Attackers are allowed to <a href="https://www.youtube.com/live/d5YNEoTqMZ4?t=3297">walk away</a> without interference through the advancing police line. Attackers on megaphones can be heard on live streams <a href="https://youtu.be/C5LLK2SogPs?t=9942">telling people to get out of the way of the police</a>, saying <a href="https://www.youtube.com/live/unD1Aj4I5Ys?t=4806">"once the police take them out, we'll be done with our job"</a> suggesting their intent was to provoke a police response to clear the encampment.
</p>
<div class="nt-timeline-dot "></div>
</div>
<div class="nt-timeline-item">
<p class="nt-timeline-title">Attackers cleared out</p>
<span class="nt-timeline-sub-title">3:30am
</span><p class="nt-timeline-content">The attackers are mostly gone, and the remaining police <a href="https://www.youtube.com/live/d5YNEoTqMZ4?t=6488">hold a perimeter</a> at the eastern side of Dickson Court.</p>
<div class="nt-timeline-dot "></div>
</div>
</div>
<div class="nt-timeline-after"></div>
</div>
<p>By the end of the night, </p>
<blockquote>
<p>"The medic team treated at least 29 distinct patients, according to another volunteer who requested anonymity. Fifteen people had serious injuries requiring hospitalization and 10 people had suffered blunt head trauma, she reported, and five people had lacerations "large and deep enough" to require stitching at the hospital." - <a href="https://lapublicpress.org/2024/05/two-nights-of-violence-at-uclas-solidarity-encampment/">LA Public Press.</a></p>
</blockquote>
<h2 id="may-1st-the-encampment-is-cleared">May 1st - The Encampment is Cleared</h2>
<div class="nt-timeline vertical left">
<div class="nt-timeline-before"></div>
<div class="nt-timeline-items">
<div class="nt-timeline-item">
<p class="nt-timeline-title">Supporters Rally to Defend the Encampment</p>
<span class="nt-timeline-sub-title">6:00pm
</span><p class="nt-timeline-content">Thousands of students, faculty, staff, and community members rally on the Tongva Steps and Portola Plaza in defense of the encampment. Police have taken and held the east side of Dickson Plaza in between supporters and the encampment. Rumors circulate the police have planned to begin the sweep at 6PM, but 6 comes and goes with no movement.
</p>
<div class="nt-timeline-dot "></div>
</div>
<div class="nt-timeline-item">
<p class="nt-timeline-title">Police Presence Grows</p>
<span class="nt-timeline-sub-title">7:00pm - 1:00am
</span><p class="nt-timeline-content">Organizers warn people with the lowest risk tolerance to leave, as police officers continually pour into Haines and Kaplan hall on the ease side of Dickson Court. EMTs are put on alert for a sweep sometime between 1-6AM. Supportive crowds chant on both sides of the encampment. A small crowd of roughly a dozen counter-protesters to the east tries to antagonize the crowd which vastly outnumbers them as organizers try to de-escalate and hold the line.
</p>
<div class="nt-timeline-dot "></div>
</div>
<div class="nt-timeline-item">
<p class="nt-timeline-title">Police Move to Kettle on Tongva Stairs</p>
<span class="nt-timeline-sub-title">1:20am
</span><p class="nt-timeline-content">Taking the resting and quiet crowd of supporters around Tongva stairs mostly by surprise, a line of officers in riot gear bypass an undertrained and inexperienced UAW security team by walking up the grass and cutting through the bushes at the top of the stairs, above the point which had been cleared to allow people to escape, and enter the encampment. The first flashbang of the night explodes in the southwest corner of Dickson Court.
</p>
<div class="nt-timeline-dot "></div>
</div>
<div class="nt-timeline-item">
<p class="nt-timeline-title">Police Ejected from Encampment</p>
<span class="nt-timeline-sub-title">1:50am
</span><p class="nt-timeline-content">Surrounded, the police officers on the west end of the encampment are <a href="https://x.com/PplsCityCouncil/status/1785964919273451690">forced out</a> and <a href="https://x.com/FilmThePoliceLA/status/1785958000273887733">down the stairs</a>. If the west end of the kettle were to have held, there would have been no avenue of escape for the many in the encampment that would flee the ensuing violence down the stairs through the night. This likely prevented the ~200 arrests from being ~500, and allowed those injured by the police to seek help. The Tongva and Fowler stairs are <a href="https://itsgoingdown.org/the-cops-brought-guns-ucla-report/">reinforced</a> by <a href="https://x.com/FilmThePoliceLA/status/1785976048007749972">supporters</a> and hold through the night despite <a href="https://x.com/FilmThePoliceLA/status/1786010332881912274">concerted efforts</a> to force through up the Fowler stairs.
</p>
<div class="nt-timeline-dot "></div>
</div>
<div class="nt-timeline-item">
<p class="nt-timeline-title">Police Begin Breaking the Barricades</p>
<span class="nt-timeline-sub-title">3:15am
</span><p class="nt-timeline-content">The police have had uncontested access to the reinforced east side of the encampment all night, and they begin disassembling the barricade. According to sources listening to police scanners, "it's go time." CHP officers begin pushing away the crowds that have assembled on Portola Plaza, shoving and clubbing as they go. The crowd of supporters are pushed to lines near the music building in the south. The walkway between Haines and Campbell Hall has been blocked off to stage police vehicles. The north walkway between Royce and Haines is blocked off by police, and the south walkway between Powell and Kaplan is blocked by hired security. The Tongva stairs are the only possible entrance to the camp. Information among those outside breaks down, and it becomes difficult to coordinate aid to the camp --- there are too many police to know where they're coming from.
</p>
<div class="nt-timeline-dot "></div>
</div>
<div class="nt-timeline-item">
<p class="nt-timeline-title">Rubber Bullets, Teargas, and Flashbangs</p>
<span class="nt-timeline-sub-title">3:40am
</span><p class="nt-timeline-content">Hundreds of aerial flashbangs are <a href="https://x.com/HuntedHorse/status/1785983464795501039">fired low overhead</a> almost continuously. The air is filling up with smoke and haze from the explosives, irritants, and fire extinguishers. Injured and bleeding students begin to trickle through the south exit and Tongva steps. The police have made the encampment into a warzone. <a href="https://x.com/SJPatUCLA/status/1786097688913867232">Multiple</a> students are <a href="https://x.com/HuntedHorse/status/1785996746952429875">shot</a> in the head</a> and <a href="https://www.latimes.com/california/story/2024-05-03/injuries-during-clearing-of-ucla-encampment">chest</a> at close range as the officers <a href="https://twitter.com/EyeonPalestine/status/1786020394475905517?">fire rubber bullets indiscriminately into the haze</a>. The police would later <a href="https://www.latimes.com/california/story/2024-05-03/injuries-during-clearing-of-ucla-encampment">plainly lie</a>, claiming they never fired rubber bullets, but the dozens of injured and thousands of witnesses tell a different story. Again individual members of the encampment are <a href="https://x.com/MrOlmos/status/1786007572711186564">picked off</a>, but this time by the Police. They are cuffed and <a href="https://lapublicpress.org/2024/05/two-nights-of-violence-at-uclas-solidarity-encampment/">dragged across the cement</a> to be arrested.
</p>
<div class="nt-timeline-dot "></div>
</div>
<div class="nt-timeline-item">
<p class="nt-timeline-title">The Encampment is Breached</p>
<span class="nt-timeline-sub-title">4:06am
</span><p class="nt-timeline-content">The eastern barricade of the encampment is <a href="https://x.com/MrOlmos/status/1785993119760302416">breached</a> and the officers file through, facing off with the remaining members of the camp who, despite the violence, hold the line, linking arms. Police on a raised area continue to <a href="https://x.com/MrOlmos/status/1785996617168171392">shoot into the crowd</a> despite being <a href="https://x.com/MrOlmos/status/1785997668122321032">unchallenged</a>. From across Dickson, people perched on the Powell scaffolding can see police firing rubber bullets at nearly point blank range in the east end of Royce walkway where press have been pushed away and the officers shine bright lights to dazzle cameras.
</p>
<div class="nt-timeline-dot "></div>
</div>
<div class="nt-timeline-item">
<p class="nt-timeline-title">The Encampment Is Lost</p>
<span class="nt-timeline-sub-title">4:45am
</span><p class="nt-timeline-content">The doors of Royce are finally breached and police file in from the north. Everyone caught in the middle is arrested. Those who avoid arrest flee west, being flanked, and officers <a href="https://x.com/HuntedHorse/status/1786000568860975327">fire flashbangs</a> over their heads as they walk away. A student with a mutilated finger is seen walking down the Tongva steps. As the crowd reaches the steps, the flashbangs get lower and are feet over the head of press and legal observers. The last remaining people try and rebuild a final barricade to protect those that fled, and the Fowler stairs are finally lost as the police make it to the west end of Dickson plaza.
</p>
<div class="nt-timeline-dot "></div>
</div>
<div class="nt-timeline-item">
<p class="nt-timeline-title">The Police Destroy the Camp</p>
<span class="nt-timeline-sub-title">5:30
</span><p class="nt-timeline-content">Police roam through the camp with knives, cutting open tents, crushing anything that can be broken with their boots. A rumor circulates that LAPD and CHP have to leave campus at 6am -- wishful thinking -- and some people wait to retrieve what they left in the field, but 12 hours after 6pm passed without incident, so too does 6am. The last remaining people stage a final show of resilience at the top of the steps and leave as a group. To the east, several dozen try to <a href="https://x.com/HuntedHorse/status/1786020031014604911">block the bus full of arrested students, faculty, and staff,</a> but are again beaten, flash banged, and arrested.</p>
<div class="nt-timeline-dot "></div>
</div>
</div>
<div class="nt-timeline-after"></div>
</div>
<p>The night after a mob of vigilantes attacked our students and colleagues to provoke a police sweep of the encampment, the mob got what they wanted. Hundreds of our comrades were brutalized and traumatized for peacefully occupying public spaces to advocate against an ongoing genocide. The police let the attackers walk free, but arrested, shot, and pepper sprayed anyone in sight in the encampment. </p>
<p>(Need final counts of number injured and arrested)</p>
</html>

3475
build/site/search/lunr.js Normal file

File diff suppressed because it is too large Load diff

109
build/site/search/main.js Normal file
View file

@ -0,0 +1,109 @@
function getSearchTermFromLocation() {
var sPageURL = window.location.search.substring(1);
var sURLVariables = sPageURL.split('&');
for (var i = 0; i < sURLVariables.length; i++) {
var sParameterName = sURLVariables[i].split('=');
if (sParameterName[0] == 'q') {
return decodeURIComponent(sParameterName[1].replace(/\+/g, '%20'));
}
}
}
function joinUrl (base, path) {
if (path.substring(0, 1) === "/") {
// path starts with `/`. Thus it is absolute.
return path;
}
if (base.substring(base.length-1) === "/") {
// base ends with `/`
return base + path;
}
return base + "/" + path;
}
function escapeHtml (value) {
return value.replace(/&/g, '&amp;')
.replace(/"/g, '&quot;')
.replace(/</g, '&lt;')
.replace(/>/g, '&gt;');
}
function formatResult (location, title, summary) {
return '<article><h3><a href="' + joinUrl(base_url, location) + '">'+ escapeHtml(title) + '</a></h3><p>' + escapeHtml(summary) +'</p></article>';
}
function displayResults (results) {
var search_results = document.getElementById("mkdocs-search-results");
while (search_results.firstChild) {
search_results.removeChild(search_results.firstChild);
}
if (results.length > 0){
for (var i=0; i < results.length; i++){
var result = results[i];
var html = formatResult(result.location, result.title, result.summary);
search_results.insertAdjacentHTML('beforeend', html);
}
} else {
var noResultsText = search_results.getAttribute('data-no-results-text');
if (!noResultsText) {
noResultsText = "No results found";
}
search_results.insertAdjacentHTML('beforeend', '<p>' + noResultsText + '</p>');
}
}
function doSearch () {
var query = document.getElementById('mkdocs-search-query').value;
if (query.length > min_search_length) {
if (!window.Worker) {
displayResults(search(query));
} else {
searchWorker.postMessage({query: query});
}
} else {
// Clear results for short queries
displayResults([]);
}
}
function initSearch () {
var search_input = document.getElementById('mkdocs-search-query');
if (search_input) {
search_input.addEventListener("keyup", doSearch);
}
var term = getSearchTermFromLocation();
if (term) {
search_input.value = term;
doSearch();
}
}
function onWorkerMessage (e) {
if (e.data.allowSearch) {
initSearch();
} else if (e.data.results) {
var results = e.data.results;
displayResults(results);
} else if (e.data.config) {
min_search_length = e.data.config.min_search_length-1;
}
}
if (!window.Worker) {
console.log('Web Worker API not supported');
// load index in main thread
$.getScript(joinUrl(base_url, "search/worker.js")).done(function () {
console.log('Loaded worker');
init();
window.postMessage = function (msg) {
onWorkerMessage({data: msg});
};
}).fail(function (jqxhr, settings, exception) {
console.error('Could not load worker.js');
});
} else {
// Wrap search in a web worker
var searchWorker = new Worker(joinUrl(base_url, "search/worker.js"));
searchWorker.postMessage({init: true});
searchWorker.onmessage = onWorkerMessage;
}

File diff suppressed because one or more lines are too long

133
build/site/search/worker.js Normal file
View file

@ -0,0 +1,133 @@
var base_path = 'function' === typeof importScripts ? '.' : '/search/';
var allowSearch = false;
var index;
var documents = {};
var lang = ['en'];
var data;
function getScript(script, callback) {
console.log('Loading script: ' + script);
$.getScript(base_path + script).done(function () {
callback();
}).fail(function (jqxhr, settings, exception) {
console.log('Error: ' + exception);
});
}
function getScriptsInOrder(scripts, callback) {
if (scripts.length === 0) {
callback();
return;
}
getScript(scripts[0], function() {
getScriptsInOrder(scripts.slice(1), callback);
});
}
function loadScripts(urls, callback) {
if( 'function' === typeof importScripts ) {
importScripts.apply(null, urls);
callback();
} else {
getScriptsInOrder(urls, callback);
}
}
function onJSONLoaded () {
data = JSON.parse(this.responseText);
var scriptsToLoad = ['lunr.js'];
if (data.config && data.config.lang && data.config.lang.length) {
lang = data.config.lang;
}
if (lang.length > 1 || lang[0] !== "en") {
scriptsToLoad.push('lunr.stemmer.support.js');
if (lang.length > 1) {
scriptsToLoad.push('lunr.multi.js');
}
if (lang.includes("ja") || lang.includes("jp")) {
scriptsToLoad.push('tinyseg.js');
}
for (var i=0; i < lang.length; i++) {
if (lang[i] != 'en') {
scriptsToLoad.push(['lunr', lang[i], 'js'].join('.'));
}
}
}
loadScripts(scriptsToLoad, onScriptsLoaded);
}
function onScriptsLoaded () {
console.log('All search scripts loaded, building Lunr index...');
if (data.config && data.config.separator && data.config.separator.length) {
lunr.tokenizer.separator = new RegExp(data.config.separator);
}
if (data.index) {
index = lunr.Index.load(data.index);
data.docs.forEach(function (doc) {
documents[doc.location] = doc;
});
console.log('Lunr pre-built index loaded, search ready');
} else {
index = lunr(function () {
if (lang.length === 1 && lang[0] !== "en" && lunr[lang[0]]) {
this.use(lunr[lang[0]]);
} else if (lang.length > 1) {
this.use(lunr.multiLanguage.apply(null, lang)); // spread operator not supported in all browsers: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Spread_operator#Browser_compatibility
}
this.field('title');
this.field('text');
this.ref('location');
for (var i=0; i < data.docs.length; i++) {
var doc = data.docs[i];
this.add(doc);
documents[doc.location] = doc;
}
});
console.log('Lunr index built, search ready');
}
allowSearch = true;
postMessage({config: data.config});
postMessage({allowSearch: allowSearch});
}
function init () {
var oReq = new XMLHttpRequest();
oReq.addEventListener("load", onJSONLoaded);
var index_path = base_path + '/search_index.json';
if( 'function' === typeof importScripts ){
index_path = 'search_index.json';
}
oReq.open("GET", index_path);
oReq.send();
}
function search (query) {
if (!allowSearch) {
console.error('Assets for search still loading');
return;
}
var resultDocuments = [];
var results = index.search(query);
for (var i=0; i < results.length; i++){
var result = results[i];
doc = documents[result.ref];
doc.summary = doc.text.substring(0, 200);
resultDocuments.push(doc);
}
return resultDocuments;
}
if( 'function' === typeof importScripts ) {
onmessage = function (e) {
if (e.data.init) {
init();
} else if (e.data.query) {
postMessage({ results: search(e.data.query) });
} else {
console.error("Worker - Unrecognized message: " + e);
}
};
}

3
build/site/sitemap.xml Normal file
View file

@ -0,0 +1,3 @@
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
</urlset>

BIN
build/site/sitemap.xml.gz Normal file

Binary file not shown.

1
src/.pdm-python Normal file
View file

@ -0,0 +1 @@
/Users/jonny/Dropbox/uaw/graphics/sav-timeline/src/.venv/bin/python

251
src/docs/css/timeline.css Normal file
View file

@ -0,0 +1,251 @@
@import url('https://fonts.googleapis.com/css2?family=Chivo:ital,wght@0,200;1,200&family=Roboto:ital,wght@0,700;1,700&display=swap');
:root {
--header-font: "Roboto", "aktiv-grotesk", sans-serif;
--body-font: "Chivo", serif;
--primary-color: #1A1A1A;
--primary-color-shade-0: #CACACA;
--primary-color-shade-0-alpha: #CACACA00;
--secondary-color: #FFDE00;
}
body {
font-family: var(--body-font);
font-weight: 200;
}
h1 {
font-family: var(--header-font);
font-weight: bold;
}
.nt-timeline-title {
font-family: var(--header-font);
font-weight: bold;
}
/* nt-timeline vendoring */
.nt-timeline {
margin-top: 30px;
}
.nt-timeline .nt-timeline-title {
font-size: 1.1rem;
margin-top: 0;
}
.nt-timeline .nt-timeline-sub-title {
margin-top: 0;
}
.nt-timeline .nt-timeline-content {
font-size: 1rem;
border-bottom: 2px dashed #ccc;
padding-bottom: 1.2rem;
}
.nt-timeline.horizontal .nt-timeline-items {
flex-direction: row;
overflow-x: scroll;
}
.nt-timeline.horizontal .nt-timeline-items > div {
min-width: 400px;
margin-right: 50px;
}
.nt-timeline.horizontal.reverse .nt-timeline-items {
flex-direction: row-reverse;
}
.nt-timeline.horizontal.center .nt-timeline-before {
background-image: linear-gradient(rgba(252, 70, 107, 0) 0%, rgb(252, 70, 107) 100%);
background-repeat: no-repeat;
background-size: 100% 2px;
background-position: 0 center;
}
.nt-timeline.horizontal.center .nt-timeline-after {
background-image: linear-gradient(180deg, var(--primary-color-shade-0) 0%, var(--primary-color-shade-0) 100%);
background-repeat: no-repeat;
background-size: 100% 2px;
background-position: 0 center;
}
.nt-timeline.horizontal.center .nt-timeline-items {
background-image: radial-gradient(circle, rgb(63, 94, 251) 0%, rgb(252, 70, 107) 100%);
background-repeat: no-repeat;
background-size: 100% 2px;
background-position: 0 center;
}
.nt-timeline.horizontal .nt-timeline-dot {
left: 50%;
}
.nt-timeline.horizontal .nt-timeline-dot:not(.bigger) {
top: calc(50% - 4px);
}
.nt-timeline.horizontal .nt-timeline-dot.bigger {
top: calc(50% - 15px);
}
.nt-timeline.vertical .nt-timeline-items {
flex-direction: column;
}
.nt-timeline.vertical.reverse .nt-timeline-items {
flex-direction: column-reverse;
}
.nt-timeline.vertical.center .nt-timeline-before {
background: linear-gradient(rgba(252, 70, 107, 0) 0%, rgb(252, 70, 107) 100%) no-repeat center/2px 100%;
}
.nt-timeline.vertical.center .nt-timeline-after {
background: linear-gradient(rgb(252, 70, 107) 0%, rgba(252, 70, 107, 0) 100%) no-repeat center/2px 100%;
}
.nt-timeline.vertical.center .nt-timeline-items {
background: radial-gradient(circle, rgb(63, 94, 251) 0%, rgb(252, 70, 107) 100%) no-repeat center/2px 100%;
}
.nt-timeline.vertical.center .nt-timeline-dot {
left: calc(50% - 10px);
}
.nt-timeline.vertical.center .nt-timeline-dot:not(.bigger) {
top: 10px;
}
.nt-timeline.vertical.center .nt-timeline-dot.bigger {
left: calc(50% - 20px);
}
.nt-timeline.vertical.left {
padding-left: 100px;
}
.nt-timeline.vertical.left .nt-timeline-item {
padding-left: 70px;
}
.nt-timeline.vertical.left .nt-timeline-sub-title {
left: -100px;
width: 100px;
text-align: right;
}
.nt-timeline.vertical.left .nt-timeline-before {
background: linear-gradient(var(--primary-color-shade-0-alpha) 0%, var(--primary-color-shade-0) 100%) no-repeat 30px/2px 100%;
}
.nt-timeline.vertical.left .nt-timeline-after {
background: linear-gradient(var(--primary-color-shade-0) 0%, var(--primary-color-shade-0-alpha) 100%) no-repeat 30px/2px 100%;
}
.nt-timeline.vertical.left .nt-timeline-items {
background: radial-gradient(circle, var(--primary-color) 0%, var(--primary-color-shade-0) 100%) no-repeat 30px/2px 100%;
}
.nt-timeline.vertical.left .nt-timeline-dot {
left: 24px;
top: 5px;
}
.nt-timeline.vertical.left .nt-timeline-dot.bigger {
top: 0px;
left: 10px;
}
.nt-timeline.vertical.right {
padding-right: 100px;
}
.nt-timeline.vertical.right .nt-timeline-sub-title {
right: -100px;
text-align: left;
width: 100px;
}
.nt-timeline.vertical.right .nt-timeline-item {
padding-right: 70px;
}
.nt-timeline.vertical.right .nt-timeline-before {
background: linear-gradient(rgba(252, 70, 107, 0) 0%, rgb(252, 70, 107) 100%) no-repeat calc(100% - 30px)/2px 100%;
}
.nt-timeline.vertical.right .nt-timeline-after {
background: linear-gradient(rgb(252, 70, 107) 0%, rgba(252, 70, 107, 0) 100%) no-repeat calc(100% - 30px)/2px 100%;
}
.nt-timeline.vertical.right .nt-timeline-items {
background: radial-gradient(circle, rgb(63, 94, 251) 0%, rgb(252, 70, 107) 100%) no-repeat calc(100% - 30px)/2px 100%;
}
.nt-timeline.vertical.right .nt-timeline-dot {
right: 21px;
top: 8px;
}
.nt-timeline.vertical.right .nt-timeline-dot.bigger {
top: 10px;
right: 10px;
}
.nt-timeline-items {
display: flex;
position: relative;
}
.nt-timeline-items > div {
min-height: 100px;
padding-top: 2px;
padding-bottom: 20px;
}
.nt-timeline-before {
content: "";
height: 15px;
}
.nt-timeline-after {
content: "";
height: 60px;
margin-bottom: 20px;
}
.nt-timeline-sub-title {
position: absolute;
width: 50%;
top: 4px;
font-size: 18px;
color: var(--nt-color-50);
}
[data-md-color-scheme=slate] .nt-timeline-sub-title {
color: var(--nt-color-51);
}
.nt-timeline-item {
position: relative;
}
.nt-timeline.vertical.center:not(.alternate) .nt-timeline-item {
padding-left: calc(50% + 40px);
}
.nt-timeline.vertical.center:not(.alternate) .nt-timeline-item .nt-timeline-sub-title {
left: 0;
padding-right: 40px;
text-align: right;
}
.nt-timeline.vertical.center.alternate .nt-timeline-item:nth-child(odd) {
padding-left: calc(50% + 40px);
}
.nt-timeline.vertical.center.alternate .nt-timeline-item:nth-child(odd) .nt-timeline-sub-title {
left: 0;
padding-right: 40px;
text-align: right;
}
.nt-timeline.vertical.center.alternate .nt-timeline-item:nth-child(even) {
text-align: right;
padding-right: calc(50% + 40px);
}
.nt-timeline.vertical.center.alternate .nt-timeline-item:nth-child(even) .nt-timeline-sub-title {
right: 0;
padding-left: 40px;
text-align: left;
}
.nt-timeline-dot {
position: relative;
width: 10px;
height: 10px;
border-radius: 100%;
background-color: var(--secondary-color);
position: absolute;
top: 0px;
z-index: 2;
display: flex;
justify-content: center;
align-items: center;
box-shadow: 0 2px 1px -1px rgba(0, 0, 0, 0.2), 0 1px 1px 0 rgba(0, 0, 0, 0.14), 0 1px 3px 0 rgba(0, 0, 0, 0.12);
border: 3px solid var(--primary-color);
}
.nt-timeline-dot:not(.bigger) .icon {
font-size: 10px;
}
.nt-timeline-dot.bigger {
width: 40px;
height: 40px;
padding: 3px;
}
.nt-timeline-dot .icon {
color: white;
}

196
src/docs/index.md Normal file
View file

@ -0,0 +1,196 @@
::timeline::
- title: Camp Established
sub_title: April 25
content: |
Early Thursday morning, UCLA students and employees set up tents on Dickson Court outside Royce Hall, establishing Palestine Solidarity Encampment. <br><br>
UCLA issues a BruinALERT: "We're actively monitoring this situation to support a safe and peaceful campus environment that respects our community's right to free expression while minimizing disruption to our teaching and learning mission."
- title: UCLA Issues First Statement
sub_title: April 26
content: |
UCLA issues <a href="https://newsroom.ucla.edu/ucla-statement-about-encampment-on-campus-april-26">a statement</a> on the encampment, including: "we are following University of California systemwide policy guidance, which directs us not to request law enforcement involvement preemptively, and only if absolutely necessary to protect the physical safety of our campus community"
- title: Peaceful Demonstration
content: |
The first phase of the encampment is marked by education and solidarity - with daily programming including teach-ins and multi-faith prayer. Counter-protesters are almost continuously present around the encampment day and night, and organizers are careful to de-escalate the few small scuffles between groups, but some injuries are reported among members of the encampment and counter-protesters.
- title: First Major Counter-demonstration
sub_title: April 28
content: |
Several groups organize a <a href="https://dailybruin.com/2024/04/27/counter-protests-of-ucla-encampment-raise-over-50000-on-gofundme">counter-demonstration</a> after raising $50,000 ($98,000 <a href="https://web.archive.org/web/20240514011726/https://www.gofundme.com/f/ucla-counter-protest">at the time of writing</a>) to fund a stage, jumbotron and loudspeakers for the event. Barricades separating the crowds of thousands are <a href="https://dailybruin.com/2024/04/28/protesters-counter-protesters-clash-as-they-converge-upon-ucla-encampment">breached</a> multiple times, and violence <a href="https://x.com/ACatWithNews/status/1784680676106870952">escalates</a> as private security officers fail to maintain a barrier between protesters and counter-protesters.
- title: Psychological Warfare
sub_title: April 28-May 1
content: |
The jumbotron and loudspeakers are allowed to stay on Dickson court throughout the week, playing footage from October 7th and sounds like <a href="https://youtu.be/_jL8cDm5Th4">babies crying</a> on repeat through the day and night to prevent sleep, a <a href="https://lapublicpress.org/2024/05/two-nights-of-violence-at-uclas-solidarity-encampment/">known torture tactic</a>.
- title: Encampment Declared Illegal
sub_title: April 30
content: UCLA declares the encampment illegal and warns everyone to leave.
::/timeline::
## April 30 - The Encampment is Attacked
All times approximate.
::timeline::
- title: Attack Begins
sub_title: |
10:40pm
content: |
Members of the encampment are <a href="https://x.com/m0thercity/status/1785593008693579901">peacefully occupying the camp</a>, when a crowd begins to <a href="https://youtu.be/C5LLK2SogPs?t=425">tear apart the barricade</a> surrounding the encampment. Members of the encampment reinforce the barricades, and private security halfheartedly tries to re-establish the buffer between the groups but do nothing to intervene.
- title: Police Notified
sub_title: |
10:45pm
content: |
Administrative Vice Chancellor Michael Beck <a href="https://www.latimes.com/california/story/2024-05-07/a-ucla-timeline-from-peaceful-encampment-to-violent-attacks-aftermath">requests assistance</a> from LAPD Chief John Thomas, LASD, Beverly Hills, Culver City and Santa Monica Police Departments.
- title: Attack Escalates
sub_title: |
10:50pm
content: |
Private security abandons the area, and the metal barricades outside of the encampment are completely removed. Attacks come in waves, with attackers retreating into Dickson plaza, and then returning in force to attack the barricades together. Attackers alternate between tearing down the barricade and attacking students and staff in the encampment with pipes, boards, lasers, <a href="https://youtu.be/C5LLK2SogPs?t=901">bear mace, skunk spray,</a> and <a href="https://youtu.be/C5LLK2SogPs?t=1455">Tasers</a>. Throughout the attack, members and organizers of the encampment do not pursue the attackers, maintaining their barricades.
- title: Private Security Leave
sub_title: |
10:53pm
content: |
Campus security guards <a href="https://lapublicpress.org/2024/05/two-nights-of-violence-at-uclas-solidarity-encampment/">leave the scene,</a> or stand on the sidelines and watch.
- title: Fireworks Begin
sub_title: |
11:00pm
content: |
<a href="https://www.nytimes.com/interactive/2024/05/03/us/ucla-protests-encampment-violence.html">Attackers launch large mortar fireworks directly into the encampment,</a> knocking a student <a href="https://www.latimes.com/california/story/2024-05-10/how-social-media-rumors-sparked-a-night-of-mayhem-at-ucla">unconscious</a> and hospitalizing her with a concussion after one explodes feet from her head.
- title: UCPD Arrives, Leaves
sub_title: |
11:15pm
content: |
Two UCPD police cars arrive with an ambulance, treat someone, and <a href="https://www.latimes.com/california/story/2024-05-10/how-social-media-rumors-sparked-a-night-of-mayhem-at-ucla">leave 4 minutes later</a>.
- title: Injured Students Carried Out, Attacked
sub_title: |
11:27pm, continuous
content: |
Injured students are being continuously carried out of the encampment to seek medical attention as no further ambulances are arriving, allegedly <a href="https://x.com/m0thercity/status/1785581710673162593">blocked by UCPD</a>. Attackers <a href="https://x.com/joeyneverjoe/status/1785556603602661422">throw a firework</a> directly at an injured student on a makeshift gurney.
- title: LAPD Chief Arrives, Officers Told to Wait
sub_title: |
12:00am
content: |
LAPD chief Thomas arrives on campus <a href="https://www.latimes.com/california/story/2024-05-07/a-ucla-timeline-from-peaceful-encampment-to-violent-attacks-aftermath">shortly before midnight</a> asking officers on the scene "why they couldn't go in with the officers they had, and the lieutenant told him he was directed to wait."
- title: Attackers Pick Off Students As They Reinforce Barricades
sub_title: |
12:30AM, continuous
content: |
As the students in the encampment try and reinforce their barricades, <a href="https://x.com/ACatWithNews/status/1785577318121119787">attackers pick them off</a>, <a href="https://www.nytimes.com/interactive/2024/05/03/us/ucla-protests-encampment-violence.html">pulling them into mobs</a>, spraying chemical irritants and hitting them with pipes and boards.
- title: LAPD thinks about responding
sub_title: |
12:32am
content: |
A man on the LAPD police scanner says they "<a href="https://www.washingtonpost.com/investigations/2024/05/11/ucla-protests-police-inaction-fights/">might want to launch a UCLA unit</a>." Attacks intensify further, the crowd in the hundreds.
- title: Police officers arrive
sub_title: |
1:43am
content: |
A line of CHP and LAPD officers begin lining up on the far end of Dickson Court near Portola Plaza. Attacks have been continuous and escalating since they began, and <a href="https://abc7.com/videoClip/14749795/">continue</a> in plain view of the assembled police. Some attackers are masked, but many are <a href="https://www.youtube.com/live/v3bAl2VshnA?t=6348">plainly identifiable</a>.
- title: Students Reinforce with Supplies
sub_title: |
2:00am, continuous
content: |
On the other side of the attack at the Tongva Steps, <a href="https://itsgoingdown.org/the-cops-brought-guns-ucla-report/">students continued to resupply the encampment</a> with water, masks, food, and goggles - fearless in the face of violence.
- title: Police Begin to advance
sub_title: |
2:45am
content: |
An hour after beginning to assemble, and <a href="https://www.washingtonpost.com/investigations/2024/05/11/ucla-protests-police-inaction-fights/">four hours</a> after the attack began, CHP and LAPD officers begin <a href="https://www.youtube.com/live/d5YNEoTqMZ4?t=2259">advancing</a> on the encampment. Attacks persist. Attackers are allowed to <a href="https://www.youtube.com/live/d5YNEoTqMZ4?t=3297">walk away</a> without interference through the advancing police line. Attackers on megaphones can be heard on live streams <a href="https://youtu.be/C5LLK2SogPs?t=9942">telling people to get out of the way of the police</a>, saying <a href="https://www.youtube.com/live/unD1Aj4I5Ys?t=4806">"once the police take them out, we'll be done with our job"</a> suggesting their intent was to provoke a police response to clear the encampment.
- title: Attackers cleared out
sub_title: |
3:30am
content: |
The attackers are mostly gone, and the remaining police <a href="https://www.youtube.com/live/d5YNEoTqMZ4?t=6488">hold a perimeter</a> at the eastern side of Dickson Court.
::/timeline::
By the end of the night,
> "The medic team treated at least 29 distinct patients, according to another volunteer who requested anonymity. Fifteen people had serious injuries requiring hospitalization and 10 people had suffered blunt head trauma, she reported, and five people had lacerations "large and deep enough" to require stitching at the hospital." - <a href="https://lapublicpress.org/2024/05/two-nights-of-violence-at-uclas-solidarity-encampment/">LA Public Press.</a>
## May 1st - The Encampment is Cleared
::timeline::
- title: Supporters Rally to Defend the Encampment
sub_title: |
6:00pm
content: |
Thousands of students, faculty, staff, and community members rally on the Tongva Steps and Portola Plaza in defense of the encampment. Police have taken and held the east side of Dickson Plaza in between supporters and the encampment. Rumors circulate the police have planned to begin the sweep at 6PM, but 6 comes and goes with no movement.
- title: Police Presence Grows
sub_title: |
7:00pm - 1:00am
content: |
Organizers warn people with the lowest risk tolerance to leave, as police officers continually pour into Haines and Kaplan hall on the ease side of Dickson Court. EMTs are put on alert for a sweep sometime between 1-6AM. Supportive crowds chant on both sides of the encampment. A small crowd of roughly a dozen counter-protesters to the east tries to antagonize the crowd which vastly outnumbers them as organizers try to de-escalate and hold the line.
- title: Police Move to Kettle on Tongva Stairs
sub_title: |
1:20am
content: |
Taking the resting and quiet crowd of supporters around Tongva stairs mostly by surprise, a line of officers in riot gear bypass an undertrained and inexperienced UAW security team by walking up the grass and cutting through the bushes at the top of the stairs, above the point which had been cleared to allow people to escape, and enter the encampment. The first flashbang of the night explodes in the southwest corner of Dickson Court.
- title: Police Ejected from Encampment
sub_title: |
1:50am
content: |
Surrounded, the police officers on the west end of the encampment are <a href="https://x.com/PplsCityCouncil/status/1785964919273451690">forced out</a> and <a href="https://x.com/FilmThePoliceLA/status/1785958000273887733">down the stairs</a>. If the west end of the kettle were to have held, there would have been no avenue of escape for the many in the encampment that would flee the ensuing violence down the stairs through the night. This likely prevented the ~200 arrests from being ~500, and allowed those injured by the police to seek help. The Tongva and Fowler stairs are <a href="https://itsgoingdown.org/the-cops-brought-guns-ucla-report/">reinforced</a> by <a href="https://x.com/FilmThePoliceLA/status/1785976048007749972">supporters</a> and hold through the night despite <a href="https://x.com/FilmThePoliceLA/status/1786010332881912274">concerted efforts</a> to force through up the Fowler stairs.
- title: Police Begin Breaking the Barricades
sub_title: |
3:15am
content: |
The police have had uncontested access to the reinforced east side of the encampment all night, and they begin disassembling the barricade. According to sources listening to police scanners, "it's go time." CHP officers begin pushing away the crowds that have assembled on Portola Plaza, shoving and clubbing as they go. The crowd of supporters are pushed to lines near the music building in the south. The walkway between Haines and Campbell Hall has been blocked off to stage police vehicles. The north walkway between Royce and Haines is blocked off by police, and the south walkway between Powell and Kaplan is blocked by hired security. The Tongva stairs are the only possible entrance to the camp. Information among those outside breaks down, and it becomes difficult to coordinate aid to the camp --- there are too many police to know where they're coming from.
- title: Rubber Bullets, Teargas, and Flashbangs
sub_title: |
3:40am
content: |
Hundreds of aerial flashbangs are <a href="https://x.com/HuntedHorse/status/1785983464795501039">fired low overhead</a> almost continuously. The air is filling up with smoke and haze from the explosives, irritants, and fire extinguishers. Injured and bleeding students begin to trickle through the south exit and Tongva steps. The police have made the encampment into a warzone. <a href="https://x.com/SJPatUCLA/status/1786097688913867232">Multiple</a> students are <a href="https://x.com/HuntedHorse/status/1785996746952429875">shot</a> in the head</a> and <a href="https://www.latimes.com/california/story/2024-05-03/injuries-during-clearing-of-ucla-encampment">chest</a> at close range as the officers <a href="https://twitter.com/EyeonPalestine/status/1786020394475905517?">fire rubber bullets indiscriminately into the haze</a>. The police would later <a href="https://www.latimes.com/california/story/2024-05-03/injuries-during-clearing-of-ucla-encampment">plainly lie</a>, claiming they never fired rubber bullets, but the dozens of injured and thousands of witnesses tell a different story. Again individual members of the encampment are <a href="https://x.com/MrOlmos/status/1786007572711186564">picked off</a>, but this time by the Police. They are cuffed and <a href="https://lapublicpress.org/2024/05/two-nights-of-violence-at-uclas-solidarity-encampment/">dragged across the cement</a> to be arrested.
- title: The Encampment is Breached
sub_title: |
4:06am
content: |
The eastern barricade of the encampment is <a href="https://x.com/MrOlmos/status/1785993119760302416">breached</a> and the officers file through, facing off with the remaining members of the camp who, despite the violence, hold the line, linking arms. Police on a raised area continue to <a href="https://x.com/MrOlmos/status/1785996617168171392">shoot into the crowd</a> despite being <a href="https://x.com/MrOlmos/status/1785997668122321032">unchallenged</a>. From across Dickson, people perched on the Powell scaffolding can see police firing rubber bullets at nearly point blank range in the east end of Royce walkway where press have been pushed away and the officers shine bright lights to dazzle cameras.
- title: The Encampment Is Lost
sub_title: |
4:45am
content: |
The doors of Royce are finally breached and police file in from the north. Everyone caught in the middle is arrested. Those who avoid arrest flee west, being flanked, and officers <a href="https://x.com/HuntedHorse/status/1786000568860975327">fire flashbangs</a> over their heads as they walk away. A student with a mutilated finger is seen walking down the Tongva steps. As the crowd reaches the steps, the flashbangs get lower and are feet over the head of press and legal observers. The last remaining people try and rebuild a final barricade to protect those that fled, and the Fowler stairs are finally lost as the police make it to the west end of Dickson plaza.
- title: The Police Destroy the Camp
sub_title: |
5:30
content: |
Police roam through the camp with knives, cutting open tents, crushing anything that can be broken with their boots. A rumor circulates that LAPD and CHP have to leave campus at 6am -- wishful thinking -- and some people wait to retrieve what they left in the field, but 12 hours after 6pm passed without incident, so too does 6am. The last remaining people stage a final show of resilience at the top of the steps and leave as a group. To the east, several dozen try to <a href="https://x.com/HuntedHorse/status/1786020031014604911">block the bus full of arrested students, faculty, and staff,</a> but are again beaten, flash banged, and arrested.
::/timeline::
The night after a mob of vigilantes attacked our students and colleagues to provoke a police sweep of the encampment, the mob got what they wanted. Hundreds of our comrades were brutalized and traumatized for peacefully occupying public spaces to advocate against an ongoing genocide. The police let the attackers walk free, but arrested, shot, and pepper sprayed anyone in sight in the encampment.
(Need final counts of number injured and arrested)

11
src/mkdocs.yml Normal file
View file

@ -0,0 +1,11 @@
site_name: Encampment Timeline
theme:
name: null
custom_dir: 'theme/'
extra_css:
- css/timeline.css
markdown_extensions:
- neoteroi.timeline

875
src/pdm.lock Normal file
View file

@ -0,0 +1,875 @@
# This file is @generated by PDM.
# It is not intended for manual editing.
[metadata]
groups = ["default"]
strategy = ["cross_platform", "inherit_metadata"]
lock_version = "4.4.1"
content_hash = "sha256:990113cc9cefcc9185ccc34da6b963bf4b66b50c54acfb690bab92df87825b4d"
[[package]]
name = "anyio"
version = "4.3.0"
requires_python = ">=3.8"
summary = "High level compatibility layer for multiple asynchronous event loop implementations"
groups = ["default"]
dependencies = [
"exceptiongroup>=1.0.2; python_version < \"3.11\"",
"idna>=2.8",
"sniffio>=1.1",
"typing-extensions>=4.1; python_version < \"3.11\"",
]
files = [
{file = "anyio-4.3.0-py3-none-any.whl", hash = "sha256:048e05d0f6caeed70d731f3db756d35dcc1f35747c8c403364a8332c630441b8"},
{file = "anyio-4.3.0.tar.gz", hash = "sha256:f75253795a87df48568485fd18cdd2a3fa5c4f7c5be8e5e36637733fce06fed6"},
]
[[package]]
name = "babel"
version = "2.15.0"
requires_python = ">=3.8"
summary = "Internationalization utilities"
groups = ["default"]
dependencies = [
"pytz>=2015.7; python_version < \"3.9\"",
]
files = [
{file = "Babel-2.15.0-py3-none-any.whl", hash = "sha256:08706bdad8d0a3413266ab61bd6c34d0c28d6e1e7badf40a2cebe67644e2e1fb"},
{file = "babel-2.15.0.tar.gz", hash = "sha256:8daf0e265d05768bc6c7a314cf1321e9a123afc328cc635c18622a2f30a04413"},
]
[[package]]
name = "certifi"
version = "2024.2.2"
requires_python = ">=3.6"
summary = "Python package for providing Mozilla's CA Bundle."
groups = ["default"]
files = [
{file = "certifi-2024.2.2-py3-none-any.whl", hash = "sha256:dc383c07b76109f368f6106eee2b593b04a011ea4d55f652c6ca24a754d1cdd1"},
{file = "certifi-2024.2.2.tar.gz", hash = "sha256:0569859f95fc761b18b45ef421b1290a0f65f147e92a1e5eb3e635f9a5e4e66f"},
]
[[package]]
name = "charset-normalizer"
version = "3.3.2"
requires_python = ">=3.7.0"
summary = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet."
groups = ["default"]
files = [
{file = "charset-normalizer-3.3.2.tar.gz", hash = "sha256:f30c3cb33b24454a82faecaf01b19c18562b1e89558fb6c56de4d9118a032fd5"},
{file = "charset_normalizer-3.3.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:25baf083bf6f6b341f4121c2f3c548875ee6f5339300e08be3f2b2ba1721cdd3"},
{file = "charset_normalizer-3.3.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:06435b539f889b1f6f4ac1758871aae42dc3a8c0e24ac9e60c2384973ad73027"},
{file = "charset_normalizer-3.3.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9063e24fdb1e498ab71cb7419e24622516c4a04476b17a2dab57e8baa30d6e03"},
{file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6897af51655e3691ff853668779c7bad41579facacf5fd7253b0133308cf000d"},
{file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1d3193f4a680c64b4b6a9115943538edb896edc190f0b222e73761716519268e"},
{file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cd70574b12bb8a4d2aaa0094515df2463cb429d8536cfb6c7ce983246983e5a6"},
{file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8465322196c8b4d7ab6d1e049e4c5cb460d0394da4a27d23cc242fbf0034b6b5"},
{file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a9a8e9031d613fd2009c182b69c7b2c1ef8239a0efb1df3f7c8da66d5dd3d537"},
{file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:beb58fe5cdb101e3a055192ac291b7a21e3b7ef4f67fa1d74e331a7f2124341c"},
{file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:e06ed3eb3218bc64786f7db41917d4e686cc4856944f53d5bdf83a6884432e12"},
{file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:2e81c7b9c8979ce92ed306c249d46894776a909505d8f5a4ba55b14206e3222f"},
{file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:572c3763a264ba47b3cf708a44ce965d98555f618ca42c926a9c1616d8f34269"},
{file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:fd1abc0d89e30cc4e02e4064dc67fcc51bd941eb395c502aac3ec19fab46b519"},
{file = "charset_normalizer-3.3.2-cp310-cp310-win32.whl", hash = "sha256:3d47fa203a7bd9c5b6cee4736ee84ca03b8ef23193c0d1ca99b5089f72645c73"},
{file = "charset_normalizer-3.3.2-cp310-cp310-win_amd64.whl", hash = "sha256:10955842570876604d404661fbccbc9c7e684caf432c09c715ec38fbae45ae09"},
{file = "charset_normalizer-3.3.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:802fe99cca7457642125a8a88a084cef28ff0cf9407060f7b93dca5aa25480db"},
{file = "charset_normalizer-3.3.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:573f6eac48f4769d667c4442081b1794f52919e7edada77495aaed9236d13a96"},
{file = "charset_normalizer-3.3.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:549a3a73da901d5bc3ce8d24e0600d1fa85524c10287f6004fbab87672bf3e1e"},
{file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f27273b60488abe721a075bcca6d7f3964f9f6f067c8c4c605743023d7d3944f"},
{file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1ceae2f17a9c33cb48e3263960dc5fc8005351ee19db217e9b1bb15d28c02574"},
{file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:65f6f63034100ead094b8744b3b97965785388f308a64cf8d7c34f2f2e5be0c4"},
{file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:753f10e867343b4511128c6ed8c82f7bec3bd026875576dfd88483c5c73b2fd8"},
{file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4a78b2b446bd7c934f5dcedc588903fb2f5eec172f3d29e52a9096a43722adfc"},
{file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e537484df0d8f426ce2afb2d0f8e1c3d0b114b83f8850e5f2fbea0e797bd82ae"},
{file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:eb6904c354526e758fda7167b33005998fb68c46fbc10e013ca97f21ca5c8887"},
{file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:deb6be0ac38ece9ba87dea880e438f25ca3eddfac8b002a2ec3d9183a454e8ae"},
{file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:4ab2fe47fae9e0f9dee8c04187ce5d09f48eabe611be8259444906793ab7cbce"},
{file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:80402cd6ee291dcb72644d6eac93785fe2c8b9cb30893c1af5b8fdd753b9d40f"},
{file = "charset_normalizer-3.3.2-cp311-cp311-win32.whl", hash = "sha256:7cd13a2e3ddeed6913a65e66e94b51d80a041145a026c27e6bb76c31a853c6ab"},
{file = "charset_normalizer-3.3.2-cp311-cp311-win_amd64.whl", hash = "sha256:663946639d296df6a2bb2aa51b60a2454ca1cb29835324c640dafb5ff2131a77"},
{file = "charset_normalizer-3.3.2-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:0b2b64d2bb6d3fb9112bafa732def486049e63de9618b5843bcdd081d8144cd8"},
{file = "charset_normalizer-3.3.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:ddbb2551d7e0102e7252db79ba445cdab71b26640817ab1e3e3648dad515003b"},
{file = "charset_normalizer-3.3.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:55086ee1064215781fff39a1af09518bc9255b50d6333f2e4c74ca09fac6a8f6"},
{file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8f4a014bc36d3c57402e2977dada34f9c12300af536839dc38c0beab8878f38a"},
{file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a10af20b82360ab00827f916a6058451b723b4e65030c5a18577c8b2de5b3389"},
{file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8d756e44e94489e49571086ef83b2bb8ce311e730092d2c34ca8f7d925cb20aa"},
{file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:90d558489962fd4918143277a773316e56c72da56ec7aa3dc3dbbe20fdfed15b"},
{file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6ac7ffc7ad6d040517be39eb591cac5ff87416c2537df6ba3cba3bae290c0fed"},
{file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:7ed9e526742851e8d5cc9e6cf41427dfc6068d4f5a3bb03659444b4cabf6bc26"},
{file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:8bdb58ff7ba23002a4c5808d608e4e6c687175724f54a5dade5fa8c67b604e4d"},
{file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:6b3251890fff30ee142c44144871185dbe13b11bab478a88887a639655be1068"},
{file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:b4a23f61ce87adf89be746c8a8974fe1c823c891d8f86eb218bb957c924bb143"},
{file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:efcb3f6676480691518c177e3b465bcddf57cea040302f9f4e6e191af91174d4"},
{file = "charset_normalizer-3.3.2-cp312-cp312-win32.whl", hash = "sha256:d965bba47ddeec8cd560687584e88cf699fd28f192ceb452d1d7ee807c5597b7"},
{file = "charset_normalizer-3.3.2-cp312-cp312-win_amd64.whl", hash = "sha256:96b02a3dc4381e5494fad39be677abcb5e6634bf7b4fa83a6dd3112607547001"},
{file = "charset_normalizer-3.3.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:6463effa3186ea09411d50efc7d85360b38d5f09b870c48e4600f63af490e56a"},
{file = "charset_normalizer-3.3.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:6c4caeef8fa63d06bd437cd4bdcf3ffefe6738fb1b25951440d80dc7df8c03ac"},
{file = "charset_normalizer-3.3.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:37e55c8e51c236f95b033f6fb391d7d7970ba5fe7ff453dad675e88cf303377a"},
{file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fb69256e180cb6c8a894fee62b3afebae785babc1ee98b81cdf68bbca1987f33"},
{file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ae5f4161f18c61806f411a13b0310bea87f987c7d2ecdbdaad0e94eb2e404238"},
{file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b2b0a0c0517616b6869869f8c581d4eb2dd83a4d79e0ebcb7d373ef9956aeb0a"},
{file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:45485e01ff4d3630ec0d9617310448a8702f70e9c01906b0d0118bdf9d124cf2"},
{file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:eb00ed941194665c332bf8e078baf037d6c35d7c4f3102ea2d4f16ca94a26dc8"},
{file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:2127566c664442652f024c837091890cb1942c30937add288223dc895793f898"},
{file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:a50aebfa173e157099939b17f18600f72f84eed3049e743b68ad15bd69b6bf99"},
{file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:4d0d1650369165a14e14e1e47b372cfcb31d6ab44e6e33cb2d4e57265290044d"},
{file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:923c0c831b7cfcb071580d3f46c4baf50f174be571576556269530f4bbd79d04"},
{file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:06a81e93cd441c56a9b65d8e1d043daeb97a3d0856d177d5c90ba85acb3db087"},
{file = "charset_normalizer-3.3.2-cp38-cp38-win32.whl", hash = "sha256:6ef1d82a3af9d3eecdba2321dc1b3c238245d890843e040e41e470ffa64c3e25"},
{file = "charset_normalizer-3.3.2-cp38-cp38-win_amd64.whl", hash = "sha256:eb8821e09e916165e160797a6c17edda0679379a4be5c716c260e836e122f54b"},
{file = "charset_normalizer-3.3.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:c235ebd9baae02f1b77bcea61bce332cb4331dc3617d254df3323aa01ab47bd4"},
{file = "charset_normalizer-3.3.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5b4c145409bef602a690e7cfad0a15a55c13320ff7a3ad7ca59c13bb8ba4d45d"},
{file = "charset_normalizer-3.3.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:68d1f8a9e9e37c1223b656399be5d6b448dea850bed7d0f87a8311f1ff3dabb0"},
{file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22afcb9f253dac0696b5a4be4a1c0f8762f8239e21b99680099abd9b2b1b2269"},
{file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e27ad930a842b4c5eb8ac0016b0a54f5aebbe679340c26101df33424142c143c"},
{file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1f79682fbe303db92bc2b1136016a38a42e835d932bab5b3b1bfcfbf0640e519"},
{file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b261ccdec7821281dade748d088bb6e9b69e6d15b30652b74cbbac25e280b796"},
{file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:122c7fa62b130ed55f8f285bfd56d5f4b4a5b503609d181f9ad85e55c89f4185"},
{file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:d0eccceffcb53201b5bfebb52600a5fb483a20b61da9dbc885f8b103cbe7598c"},
{file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:9f96df6923e21816da7e0ad3fd47dd8f94b2a5ce594e00677c0013018b813458"},
{file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:7f04c839ed0b6b98b1a7501a002144b76c18fb1c1850c8b98d458ac269e26ed2"},
{file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:34d1c8da1e78d2e001f363791c98a272bb734000fcef47a491c1e3b0505657a8"},
{file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:ff8fa367d09b717b2a17a052544193ad76cd49979c805768879cb63d9ca50561"},
{file = "charset_normalizer-3.3.2-cp39-cp39-win32.whl", hash = "sha256:aed38f6e4fb3f5d6bf81bfa990a07806be9d83cf7bacef998ab1a9bd660a581f"},
{file = "charset_normalizer-3.3.2-cp39-cp39-win_amd64.whl", hash = "sha256:b01b88d45a6fcb69667cd6d2f7a9aeb4bf53760d7fc536bf679ec94fe9f3ff3d"},
{file = "charset_normalizer-3.3.2-py3-none-any.whl", hash = "sha256:3e4d1f6587322d2788836a99c69062fbb091331ec940e02d12d179c1d53e25fc"},
]
[[package]]
name = "click"
version = "8.1.7"
requires_python = ">=3.7"
summary = "Composable command line interface toolkit"
groups = ["default"]
dependencies = [
"colorama; platform_system == \"Windows\"",
]
files = [
{file = "click-8.1.7-py3-none-any.whl", hash = "sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28"},
{file = "click-8.1.7.tar.gz", hash = "sha256:ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de"},
]
[[package]]
name = "colorama"
version = "0.4.6"
requires_python = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7"
summary = "Cross-platform colored terminal text."
groups = ["default"]
files = [
{file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"},
{file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"},
]
[[package]]
name = "essentials"
version = "1.1.5"
summary = "General purpose classes and functions, reusable in any kind of Python application"
groups = ["default"]
files = [
{file = "essentials-1.1.5-py3-none-any.whl", hash = "sha256:905fa4a69fcd2b2cf41ecc6cc65827e30c87ef91f3f5c71540bcc5e984fa8360"},
{file = "essentials-1.1.5.tar.gz", hash = "sha256:8736f738bb2c51d5069b2de2cf9146f7d402f25f9f95636781e59a422c908c46"},
]