Claudio Bravo was Manchester City's hero, saving two spot-kicks as his side beat a brave Wolves team 4-1 on penalties to reach the EFL Cup quarter-finals.
Alfred N'Diaye and Conor Coady were denied by the Chile goalkeeper, while the hosts scored all four of their attempts in the shoot-out.
Sergio Aguero was chasing City's goalscoring record, having equalled it against Burnley on Saturday by moving on to 177 goals, but endured a frustrating evening until scoring the winning penalty with a cheeky Panenka.
The drama came after neither team could find a breakthrough as a tense, end-to-end battle over 120 minutes ended 0-0.
The Championship leaders made nine changes to their team but still produced an impressive defensive display and created three brilliant chances themselves, with Bravo, who was standing in for Ederson, the home hero on each occasion, before starring further on penalties.
Free-scoring City had netted 59 goals in 18 games since the last time they failed to score in a 0-0 draw with Manchester United in April, but were taken to the limit on a damp night.
The win means Pep Guardiola still has all four potential avenues for silverware available as City look to make up for his trophyless debut campaign in England.
Final penalty shoot out score!WolvesCity October 24, 2017
After a pitch-invading squirrel captured the home fans' attention ahead of kick-off, the record-chasing Aguero almost had them out of their seats when his early 20-yard strike was parried to safety by Wolves goalkeeper Will Norris.
Aguero - City's captain in the absence of Vincent Kompany and David Silva - then had an even better chance to make history when Raheem Sterling squared into his path, but could only scuff an effort wide from inside 12 yards.
Despite fielding a weakened side, Wolves were competing well and threatened when Ryan Bennett's header tested Bravo.
An Aguero long-range drive was dealt with by Norris, while the Argentina forward lashed another Sterling delivery narrowly wide.
It was Wolves, though, who had the best chance of the first half, Bright Enobakhare forcing a dallying Eliaquim Mangala to lose possession in a dangerous area and racing through on goal, only for Bravo to make a critical save.
"Come on, City!" October 24, 2017
For those asking, our furry pitch invader was safely released by the club groundstaff before kick-off October 24, 2017
After a quiet start to the second half, Bravo was called upon to make another vital stop, racing out to deny Helder Costa before the Portugal winger could dink a shot over him.
Norris then made a key touch at the other end to stop a frustrated Aguero from rounding him, atoning for a poor clearance from his goal, before the Wolves shot stopper kept out a drive from Bernardo Silva, who had charged into the box from the right channel.
Aguero had a late penalty claim turned down as he surged into the box and appeared to be tugged back by Coady, while Sterling somehow missed the target after Norris parried a cross from substitute Kevin De Bruyne.
But there was still time for Wolves to waste another golden chance as the match moved into extra time, Enobakhare racing clear after being played in on the counter-attack and embarking on a lung-busting run from inside his own half, but failing to beat Bravo as he made a third key save of the contest.
Sterling had a left-footed drive from the edge of the area saved by Norris in the first period of extra time, while Yaya Toure was also denied. Substitute Leroy Sane had an effort deflected inches wide and the Wolves keeper denied Aguero for a final time as the tie moved to penalties.
De Bruyne, Toure, and Sane all netted for City from 12 yards, while Leo Bonatini converted for Wolves, but that would prove in vain as Bravo showed impressive reflexes to deny N'Diaye and Coady, allowing Aguero to dink in the clinching penalty.
See you in the fifth round, ! October 24, 2017
Get the best features, fun and footballing frolics straight to your inbox every week.
Thank you for signing up to Four Four Two. You will receive a verification email shortly.
There was a problem. Please refresh the page and try again.