Zimbabwe 287 and 266 for 7 (Williams 106*, Tiripano 63*, Rashid 5-105) lead Afghanistan 545 for 4 dec by eight runs
Sean Williams and Donald Tiripano saved Zimbabwe from an innings defeat and ensured Afghanistan will bat again in Abu Dhabi. They shared an unbroken stand of 124 for the eighth wicket, with Tiripano reaching his first Test half-century and Williams completing his second hundred in as many matches.
The pair came together when Zimbabwe were 142 for 7 and needed another 116 runs to make Afghanistan bat again. Rashid Khan had just completed his fourth five-wicket haul in only his fifth Test, and was only one wicket away from ten in the match for the second time in his career.
Tea was still over half an hour away too, and Afghanistan seemed on the brink of a big, series-levelling win. By stumps, however, they had bowled a further 42.4 overs without taking another wicket, leaving questions hanging over their decision to enforce the follow-on.
Afghanistan have now spent 197.3 overs on the field in the space of two days, and Khan has bowled 79.3 of them. This, for a bowler who has made his name in the shortest format of the game, is a workload equivalent to nearly 20 T20 games back-to-back.
Forty-three of those overs have come in the second innings, with Asghar Afghan turning to his star legspinner repeatedly with successes few and far between at the other end. As the bowlers tired and the ball lost its fizz off the surface, Williams and Tiripano prospered, using the slowness of the surface to their advantage by reading the turn off the pitch. Tiripano showed he had a range of shots too, playing a number of reverse-sweeps off Amir Hamza's left-arm spin.
For all that, Afghanistan remain favourites to win this Test match, with Zimbabwe effectively 8 for 7 with a whole day left to play.
The ball turned every now and then on day four and occasionally kept low too, but the surface remained good for batting throughout. Considering that, Zimbabwe will be disappointed with the bulk of their second-innings showing. They lost wickets in clusters with openers Kevin Kasuza and Prince Masvaure falling in the space of five balls in the morning session, Tarisai Musakanda and Wesley Madhevere falling in the space of six balls post lunch, and Sikandar Raza, Ryan Burl and Regis Chakabva falling in the space of 14 balls as tea approached.
Kasuza and Masvaure started the day cautiously, scoring just 10 runs in the first 11 overs. Then, Masvaure decided to take on the offspiner Javed Ahmadi and found boundaries behind square on the on and off side as Ahmadi tossed it up. In Ahmadi's next over, Masvuare was caught-and-bowled driving a full-toss carelessly in the air. Four balls later, Kasuza played inside the line trying to defend a Khan googly and edged to Rahmat Shah at first slip.
The loss of the top two did not put Williams off his usual approach and he counterattacked as soon as he was given the opportunity to. When Ahmadi gave him a half-tracker, Williams dispatched it through wide long-on for four. When Ahmadi offered width, he drove square for four more, and when Hamza tossed it up, Williams slog-swept over midwicket for six.
Williams' short-ball technique almost let him down when, two overs after lunch, he gloved a hook off Sayed Shirzad, but Nasir Jamal at wide slip could not hold on to an overhead chance. Williams was on 35 at the time.
At the other end, Khan continued to pose problems for Musakanda, who struggled to read the googly. He went forward to defend one that took the inside edge and evaded leg gully but was eventually trapped lbw by another.
That brought the 20-year old Wesley Madhevere to the crease, and his series only got worse. He fell for his third duck in three innings when he hung his bat out to a Shirzad delivery that straightened and was caught behind. Madhevere faced three balls on this occasion after first-ball ducks in his previous two Test innings.
In the Williams mould, Sikandar Raza opened his account by hitting a Khan long-hop for six, went after another short delivery to offer a chance at catching height to Hamza at deep square leg, which was parried over the rope, and lofted Khan over his head for a third six, but his enthusiasm got the better of him. In the next over, he tried to hit Khan through midwicket but ended up edging to second slip. Three balls later, Burl was out for his second duck of the match, trapped lbw in front of leg stump, and in Khan's next over, Chakabva missed a sweep to depart the same way.
Zimbabwe could have folded from there but Tiripano and Williams built solidly while offering just one clear chance. Tiripano was on 33 when he stepped out to slog Hamza and missed, giving Afsar Zazai a stumping chance, though the ball kept low and sneaked under his gloves. Tiripano seemed to read Khan out of the hand for most part, though there were a couple of anxious moments against him, including two massive appeals - for a catch at short leg and another behind the stumps - in the same over, both rightly turned down. Two balls after the second appeal, Tiripano reached fifty by hitting Khan over his head for four.
By then, Zimbabwe were closing in on erasing the deficit. Williams, who had moved swiftly through the nineties with a pair of boundaries off Ahmadi, killed two birds with one stone off Khan, slapping a short ball to the cover-point boundary to bring up his hundred as well as move Zimbabwe into the lead.
Only six more overs remained in the day, and Khan showed Zimbabwe they still have a mountain to climb on day five if they are to get anything out of this game other than defeat. In the final over of the day, Tiripano had to summon up all his watchfulness and defensive nous to keep out two balls that skidded through at shin height from just short of a good length.
Three more good balls in the space of an hour should still do it for Afghanistan, but Zimbabwe can still dream. Test cricket at its best.
Firdose Moonda is ESPNcricinfo's South Africa correspondent