The head of Iran's Revolutionary Guards has declared the defeat of the "sedition" in the country, referring to a wave of anti-government protests.
Maj Gen Mohammad Ali Jafari made the announcement as tens of thousands of people attended pro-government rallies called to counter the unrest.
It began last Thursday in the city of Mashhad and has seen 21 people killed.
The protests were initially against price rises and corruption, but turned to wider anti-government sentiment.
They have been the largest since the disputed 2009 presidential election.
What was the general's announcement?
Gen Jafari said: "Today, we can say that this is the end of the 96 sedition," referring to the current year - 1396 - in the Persian calendar.
He said "security preparedness and people's vigilance" had led to the defeat of "enemies" and that the Guards had only intervened in a "limited" way in three provinces.
He added: "There were a maximum of 1,500 people in each place and the number of troublemakers did not exceed 15,000 people nationwide."
The general blamed anti-revolutionary agents, pro-monarchists and forces which he said had been "announced by [US-ex Secretary of State Hillary] Clinton to create riot, anarchy, insecurity and intrigue in Iran".
The "enemies" had tried to pose "cultural, economic and security threats against Islamic Iran", he said.
His comments echoed those by Supreme Leader Ayatollah Ali Khamenei on Tuesday, which also blamed unspecified "enemies" and which analysts believed referred to the US, Israel and Saudi Arabia.
But the general also blamed a "former official" for the protests, in a comment analysts believe referred to ex-President Mahmoud Ahmadinejad, who has been critical of government officials, in particular Judiciary Chief Sadegh Amoli Larijani, in recent weeks.
What about the rallies?
State television broadcast some of the pro-government rallies live.
Among those holding events were the cities of Kermanshah, Ilam and Gorgan.
Some marchers carried Iranian flags and images of Supreme Leader Ayatollah Ali Khamenei.
In the city of Qom, marchers chanted "death to American mercenaries". Chants elsewhere included "the blood in our veins is a gift to our leader" and "the seditionist rioters should be executed".
Are protests still going on?
Reuters news agency is reporting fresh protests after nightfall on Wednesday in the city of Malayer in western Hamadan province, with protesters chanting: "People are begging, the supreme leader is acting like God!"
Video on social media showed protesters in Nowshahr in the north chanting "death to the dictator", a phrase that has been used against Ayatollah Khamenei, the agency reported.
Another video showed a building burning in Gohardasht.
Associated Press said other video had emerged on Wednesday of protesters tearing down images of the ayatollah in Noor Abad, 360km (225 miles) south-west of Tehran, although it was unclear when the footage was shot.
Meanwhile three members of the security services have been killed in Piranshahr, an area in West Azerbaijan province which borders Iraqi Kurdistan, according to a statement by the Revolutionary Guards.
However, the area occasionally sees clashes with Kurdish separatists based in Iraq, and the attack is not thought to be linked to the recent protests.
What has the US approach been?
President Donald Trump has tweeted regularly in support of the protesters and did so again on Wednesday morning.
Such respect for the people of Iran as they try to take back their corrupt government. You will see great support from the United States at the appropriate time!— Donald J. Trump (@realDonaldTrump) January 3, 2018
On Tuesday, US envoy to the UN Nikki Haley branded as "complete nonsense" Iran's suggestion that external enemies were fomenting the unrest.
She said: "The people of Iran are crying out for freedom. All freedom-loving people must stand with their cause."
Mr Trump must decide by mid-January whether to re-impose sanctions that were eased when world powers struck a deal with Iran in 2015 that curbed its nuclear programme.
The US president has regularly called the agreement a bad deal.