SPOILER ALERT: Do not read unless you have watched the Nov. 28 “The Flash” and “DC’s Legends of Tomorrow” episodes, entitled “Crisis on Earth-X Part III” and “Crisis on Earth-X Part IV.”

The annual Arrowverse crossover continues with Oliver (Stephen Amell), Barry (Grant Gustin), Sara (Caity Lotz), Professor Stein (Victor Garber), Jax (Franz Drameh) and Alex (Chyler Leigh) imprisoned in an Earth-X camp. Jax notices the people around them have symbols on their prison uniforms, and Stein explains they denote what crime the individual is being imprisoned for. The symbols are the same as the ones the actual Nazis used to mark prisoners in their concentration camps of the 1930s: stars for Jewish prisoners, pink triangles for homosexual ones. Jax spots a pink triangle on a nearby man (Russell Tovey, who is revealed later in the episode as The Ray, a superhero whose name is actually Ray) and asks him what it means. He replies that he’s here for “loving the wrong person.”

Back on Earth-One, Cisco (Carlos Valdes), Wells (Tom Cavanagh), Caitlin (Danielle Panabaker) Black Canary (Julianna Harkavy), Wild Dog (Rick Gonzalez), Mr. Terrific (Echo Kellum) and Heatwave (Dominic Purcell) have been locked in the S.T.A.R. Labs metahuman prison. Eobard (Cavanagh) is busy prepping Supergirl (Melissa Benoist) for her heart surgery by blasting her with red sunlight, which will make her weak enough to cut into.

In the vents, Iris (Candice Patton) and Felicity (Emily Bett Rickards) overhear the Earth-Xer’s plans and realize they’re the only two that are able to stop them. They head to the pipeline to try to break out Cisco and the others.

On Earth-X, the heroes and Ray are rounded up by Nazis, led by the Earth-X version of Quentin Lance (Paul Blackthorne). He plans to execute them but can’t help marveling at Sara’s blond hair and blue eyes, wondering why she’d align herself with this lot. She replies that it’s because she likes both men and women, and he mentions his own daughter momentarily, though her resemblance to his Earth-X version of Sara is not enough to earn her a reprieve from his firing squad.

However, before the heroes can be killed, they are saved by Citizen Cold aka Earth-X’s Leonard Snart (Wentworth Miller), who goes by Leo. Leo removes Ray’s power-dampening collar, which allows him to take to the sky and blast the remaining Nazis with light to cover the group’s escape.

Meanwhile back at S.T.A.R. Labs, Felicity and Iris make their way to the pipeline to rescue the heroes imprisoned there. They realize they can’t open the doors, but Felicity has time to send an SOS to the remaining Legends to see if they can help.

Leo and Ray lead the group on Earth-X to the planet’s version of Green Arrow’s bunker, where they learn the gate they came through is about to be destroyed by the resistance led by General Winn Schott (Jeremy Jordan).

Alex pulls the Earth-X Winn aside to talk him out of destroying the bunker before they can use it to return to Earth-One. He explains they have a doomsday weapon that can affect other worlds. Despite that, he eventually gives them an hour to get through the bunker before he blows it.

Before they leave, Jax and Stein have a heart-to-heart where Stein explains that Jax is his family — that before he had a daughter he found himself with a son in Jax. The two bury the hatchet before they head out.

Leo and Ray — who is actually from Earth-One — agree that they should help the heroes as well and then share a kiss.

Felicity and Iris make it to the time vault in time to cut the power to S.T.A.R. Labs just as Eobard is about to cut into the now-weakened Supergirl. While Eobard and Arrow-X (Amell) search the darkened facility, the women manage to sneak in to the operating room and pull Supergirl out. Their escape is short-lived when Metallo takes them out at the elevator, though.

The heroes on Earth-X have a simple plan to get to the gate that will take them home: Oliver will impersonate his doppelganger and take out the power dampening field, and then the group will fight their way to the gate. Earth-X Quentin sees through this facade when he brings Earth-X Felicity out for Oliver to kill, though. Given a gun, Oliver spins it onto Earth-X Quentin and pulls the trigger — but it doesn’t fire because Earth-X Quentin knows better than to give a loaded weapon to someone he’s not sure he can trust. Despite all that Oliver still manages to take out the Nazis and lower the field — but not before the Earth-X version of the Waverider is sent to Earth-One.

Earth-X Winn sends his destroyer — which turns out to be Red Tornado — to the base early. Barry and Ray head out to stop it before it can take out their only way home.

While those two handle Red Tornado, the rest work to clear the gate. Firestorm realizes they need to separate in order to activate the gate properly. Shortly after they do, the heroes get pinned down. Stein makes a run for it, but he is shot before he reaches the gate.

Stein manages to crawl to the breach activation console, but he gets shot again as he activates it. With Stein now in critical condition, Jax figures if they merge once more, he can lend the man his strength and keep him alive until they can get him proper medical attention. They do, and Barry and Ray finally take down Red Tornado. They head back to Earth-One, where Supergirl has been strapped down for surgery and Iris and Felicity have been caught.

Just as Eobard is about to make the first cut in Supergirl, he stops. Arrow-X asks what’s wrong, and he says he can’t move down his scalpel anymore. That’s because The Atom (Brandon Routh) has shrunk down and caught it before it can cut into Kara. He takes out the Nazis in the room and sets the women free. The Legends arrive and break the other heroes out of the metahuman prison.

The heroes stranded on Earth-X arrive back in time to help the Legends and remaining Earth-One heroes take down Metallo as Arrow-X, Overgirl and Eobard retreat.

On the Waverider, Firestorm splits back into Jax and Stein to see if Gideon can fix him. Unfortunately, when the two merged, their connection was the only thing keeping Stein alive, making Jax a living life support system.

While the rest of the heroes reconnect and catch up — including a fun scene between Mick and a chipper Leo — Stein wakes up and says he wants to take Cisco’s Firestorm cure to sever his and Jax’s connection. Jax tearfully begs Stein not to take the serum, while Stein tells Jax he needs to do it to save him.

“You once told be that I was like your father, and I said you were my son,” Stein says. “How could a father do anything less?”

Eventually Jax gives Stein the serum and holds his hand until their connection is gone and he dies.

The Legends and heroes mourn the death of Stein: Jax leaves the Waverider to be with Stein’s family, Ray reminisces over a photo from their time in the old west and Mick drinks. But they aren’t allowed to grieve long, as Overgirl’s body threatens to “go nuclear” and destroy the entire planet.

The Nazis arrive in Central City, killing anyone in their path. The Earth-One heroes all band together for a fight that makes the church fight in the event’s first episode look like nothing. Every character gets at least one shining moment throughout the long scene.

While the Legends, Iris, Cisco and Caitlin take out the Earth-X Waverider, Supergirl fights Overgirl until she hits nuclear level. Supergirl flies the Nazi up into space where the blast can’t hurt anyone and falls to Earth only to be caught by Citizen Steel (Nick Zano).

Arrow-X sees the explosion and falls to his knees. Oliver hesitates shooting him in the back, but when the archer turns to take a shot, Oliver puts an arrow in his heart.

With the fight over, and Stein’s funeral attended, people begin to head home. The Ray heads back to Earth-X to continue the fight, but Leo says he’s going to stick around on Earth-One for a bit. The Legends head back out to deal with their anachronisms a man down, and Kara and Alex head back to Earth-38.

But Barry and Iris still want to get married. After their wedding was interrupted, they toyed with the idea of eloping, but still surrounded by some friends (though it is worth noting, Joe is not there), they ask Oliver if he can marry them since he is the mayor. He says that would only be legal inside Star City, but he knows someone else who can get the job done. Barry races to pick up Diggle (David Ramsey), who’s an ordained minister.

The two exchange their vows, but before the they can say “I do” Felicity interrupts and asks Oliver if they want to get married, as well. With that, “Crisis on Earth-X” ends with not one wedding, but two.