Three men were convicted of first-degree murder and related crimes for a 2023 shooting at a North Philadelphia playground that left three people dead and one injured, prosecutors said Wednesday.
Tyyon Bates, 21, Quaza Lopez, 22, and Eric Reid, 23, were all found guilty this week for their roles in the crime, which brought chaos to a basketball court at Eighth and Diamond Streets on a hot summer night as children played outside.
Nyreese Moore, 22, Nassir Folk, 24, and Isaiah Williams, 22, were killed. A fourth person was shot in the abdomen and survived.
In addition to murder, Bates, Lopez, and Reid were convicted of conspiracy to commit murder, recklessly endangering others, and firearms offenses, prosecutors said.
A jury found a fourth suspect, Sufyann Kinslow, not guilty of murder and related charges, court records show. And a jury could not reach a verdict in the trial of a fifth suspect, Tynel Love, on similar charges, though prosecutors say they intend to retry that case.
Prosecutors said the Aug. 11, 2023, shooting stemmed from “vengeance” over a 2018 shooting that left Bates’ brother, Tyree, dead just several blocks away at Fourth and Diamond Streets.
“The motivation was for ‘Ree,’ Tyree Bates,” said Assistant District Attorney Cydney Pope. “And Tyyon Bates made sure he got his ‘get-back’ for him — and bragged about it.”
Investigators recovered more than 100 pieces of ballistic evidence from what prosecutors said was an unusually large crime scene involving six shooters. Surveillance video from the recreation center and a nearby vacant lot helped investigators link the men to the crime, Pope said.
Bates, Lopez, and Reid were sentenced by Common Pleas Court Judge Glenn Bronson to three consecutive life sentences in prison plus an additional 24 to 48 years in custody.
Prosecutors said that their work is not finished and that they plan to bring charges against two more people involved in the crime.
OpenAI introduced its own web browser, Atlas, on Tuesday, putting the ChatGPT maker in direct competition with Google as more internet users rely on artificial intelligence to answer their questions.
Making its popular AI chatbot a gateway to online searches could allow OpenAI, the world’s most valuable startup, to pull in more internet traffic and the revenue made from digital advertising. It could also further cut off the lifeblood of online publishers if ChatGPT so effectively feeds people summarized information that they stop exploring the internet and clicking on traditional web links.
OpenAI has said ChatGPT already has more than 800 million users but many of them get it for free. The San Francisco-based company also sells paid subscriptions but is losing more money than it makes and has been looking for ways to turn a profit.
OpenAI said Atlas launches Tuesday on Apple laptops and will later come to Microsoft’s Windows, Apple’s iOS phone operating system and Google’s Android phone system.
OpenAI CEO Sam Altman called it a “rare, once-a-decade opportunity to rethink what a browser can be about and how to use one.”
But analyst Paddy Harrington of market research group Forrester said it will be a big challenge “competing with a giant who has ridiculous market share.”
OpenAI’s browser is coming out just a few months after one of its executives testified that the company would be interested in buying Google’s industry-leading Chrome browser if a federal judge had required it to be sold to prevent the abuses that resulted in Google’s ubiquitous search engine being declared an illegal monopoly.
But U.S. District Judge Amit Mehta last month issued a decision that rejected the Chrome sale sought by the U.S. Justice Department in the monopoly case, partly because he believed advances in the AI industry already are reshaping the competitive landscape.
OpenAI’s browser will face a daunting challenge against Chrome, which has amassed about 3 billion worldwide users and has been adding some AI features from Google’s Gemini technology.
Chrome’s immense success could provide a blueprint for OpenAI as it enters the browser market. When Google released Chrome in 2008, Microsoft’s Internet Explorer was so dominant that few observers believed a new browser could mount a formidable threat.
But Chrome quickly won over legions of admirers by loading webpages more quickly than Internet Explorer while offering other advantages that enabled it to upend the market. Microsoft ended up abandoning Explorer and introducing its Edge browser, which operates similarly to Chrome and holds a distant third place in market share behind Apple’s Safari.
Perplexity, another smaller AI startup, rolled out its own Comet browser earlier this year. It also expressed interest in buying Chrome and eventually submitted an unsolicited $34.5 billion offer for the browser that hit a dead end when Mehta decided against a Google breakup.
Altman said he expects a chatbot interface to replace a traditional browser’s URL bar as the center of how he hopes people will use the internet in the future.
“Tabs were great, but we haven’t seen a lot of browser innovation since then,” he said on a video presentation aired Tuesday.
A premium feature of the ChatGPT Atlas browser is an “agent mode” that accesses the laptop and effectively clicks around the internet on the person’s behalf, armed with a users’ browser history and what they are seeking to learn and explaining its process as it searches.
“It’s using the internet for you,” Altman said.
Harrington, the Forrester analyst, says another way of thinking about that is it’s “taking personality away from you.”
“Your profile will be personally attuned to you based on all the information sucked up about you. OK, scary,” Harrington said. “But is it really you, really what you’re thinking, or what that engine decides it’s going to do? … And will it add in preferred solutions based on ads?”
Google since last year has automatically provided AI-generated responses that attempt to answer a person’s search query, appearing at the top of results.
Reliance on AI chatbots to summarize information they collect online has raised a number of concerns, including the technology’s propensity to confidently spout false information, a problem known as hallucination.
The way that chatbots trained on online content spout new writings has been particularly troubling to the news industry, leading The New York Times and other outlets to sue OpenAI for copyright infringement and others, including The Associated Press, to sign licensing deals.
A study of four top AI assistants including ChatGPT and Google’s Gemini released Wednesday showed nearly half their responses were flawed and fell short of the standards of “high-quality” journalism.
The research from the European Broadcasting Union, a group of public broadcasters in 56 countries, compiled the results of more than 3,000 responses to news-related questions to help ascertain quality responses and identify problems to fix.
Mayor Cherelle L. Parker is shaking up the board of the Philadelphia Land Bank, which helps control the sale of city-owned land but hasn’t been moving fast enough to advance her housing priorities.
Parker’s first land bank board chair, Herb Wetzel, has been asked to step down as well as board member Majeedah Rashid, who leads the Nicetown Community Development Corp. The board has 13 members.
Angela D. Brooks, who serves as the city’s chief housing officer, will be joining the board. Earlier this year Parker appointed Brooks to lead the mayor’s campaign, Housing Opportunities Made Easy, or H.O.M.E., to build or renovate 30,000 houses over the course of her administration.
The mayor has long championed the Turn the Key program as part of that plan, a policy that depends on getting inexpensive city-owned land to developers so they can build houses that are affordable to working and middle-class families.
Rashid is being replaced by Alexander Balloon, who formerly served on the Land Bank’s board and is the executive director of the Passyunk Avenue Revitalization Corp.
“It is clear from the Land Bank’s success with its Turn The Key program: A strong and effective Land Bank is essential for reaching the H.O.M.E. initiative’s goal to produce and preserve 30,000 homes,” Parker said in a statement.
Several Turn the Key proposals have been held up by the Land Bank board, which has been riven between factions that are either more or less friendly to private-sector developers.
Rashid and other board members who come from a nonprofit development background have argued that scarce city-owned land should be earmarked for affordable housing, community gardens, and similar projects.
Mayor Cherelle L. Parker and Turn the Key’s 100th homebuyer hold giant scissors as they prepare to cut a ceremonial ribbon.
Although the Turn the Key program produces units that are more affordable than market-rate homes, many of the projects are built by private-sector developers and still unaffordable to Philadelphians with low incomes.
“Majeedah Rashid has worked with me on economic development issues dating to my time in the Pennsylvania General Assembly, and her advice has been invaluable,” Parker said in a statement. “Our city is stronger for Herb’s and Majeedah’s public service.”
Rashid did not respond to a request for comment.
During Balloon’s previous tenure on the board, he was among members who pushed for vacant city-owned land to be put back into productive use as quickly as possible because empty lots attract crime and litter and are a drag on city services.
Private-sector developers often can build more — and faster — than their nonprofit counterparts because they are less reliant on public funds, which are increasingly unreliable from the federal level.
“I’m excited to rejoin the Philadelphia Land Bank and help Mayor Parker deliver on her bold vision to build and preserve 30,000 homes across our city,” Balloon said in an email statement. “This is an inspiring moment for Philadelphia’s growth and the success of the Turn the Key program and other initiatives.”
“Herb Wetzel has been a subject matter expert for me on any housing issue that I’ve worked on throughout my career as an elected official, and I have always relied on his counsel,” Parker said in a statement. “He will continue to be part of my circle of advisers on housing issues, just in a different capacity.”
But according to three City Hall sources, who did not have permission to speak to the media, Parker’s team felt Wetzel sought to play peacemaker between the factions and was not always able to get their favored Turn the Key projects moving. As a recent arrival to the city and leader of the administration’s housing initiative, Brooks is expected to pursue the mayor’s priorities.
Brooks said in an interview that her appointment was no reflection on Wetzel’s performance and that he would continue to serve on the H.O.M.E. advisory board.
“I don’t have any thoughts on what he didn’t do or didn’t other than he’s been a great supporter of both the mayor and me and this housing plan,” Brooks said. “He’ll continue to be a part of that as we move it forward. [It’s just that] historically, we have had a city staff person to sit on the Land Bank board, and since I’m spearheading the H.O.M.E. Initiative, it seemed to be time.”
Frequent stalemates on the board were not the only challenge facing Turn the Key projects. Under the tradition of so-called councilmanic prerogative, the Land Bank requires action from City Council to release property for development even if the mayor backs a particular proposal.
For example, the administration sent over a 50-unitTurn the Key proposal in North Philadelphia to City Council last November, and District Councilmember Jeffery Young simply never introduced it, effectively killing the deal.
Or in Kensington, Councilmember Quetcy Lozada declined to endorse several Turn the Key proposals, leading developers to abandon them.
Parker sought to loosen Council’s grip on some city-owned land during budget negotiations earlier this year, but the campaign was largely unsuccessful. National land bank experts have long argued that land banks like Philadelphia’s are much less effective than counterparts that do not have political veto checkpoints.
During budget hearings this year, Council asked for an organization assessment of the Land Bank, and some members questioned why its staff wasn’t more robust.
Brooks said that an assessment will be released soon from the consultant group Guidehouse and that the Land Bank “is in the process of filling positions.”
HBO's Task once again brought the Philadelphia region back into the spotlight over its seven-episode run, showcasing a slew of local spots from Ridley Township to Coatesville and beyond.
And with the series wrapped, we can say: Creator Brad Ingelsby did right by Delco, where the series is largely set.
Sure, the accents were pretty great — but as we look back at the show, it's clear that the Philadelphia region was integral to Task. Here, we've rounded up all the local spots — sans private homes — we could identify in Task. Check out the map below to see what locations wound up the show, and why the series takes us there:
Loading…
Aston Township
Mirenda Center at Neumann University
First seen in episode one
Courtesy of Neumann University
Tom (Mark Ruffalo) mans a table at a job fair here while temporarily working as a recruiter for the FBI. Next to his station, the distinctive pillars of the center’s atrium are visible.
Collingdale
Rita’s Italian Ice & Frozen Custard
First seen in episode one
Alejandro A. Alvarez / Staff Photographer
Emily (Silvia Dionicio), Tom’s daughter, works her part-time job here. In the scene where it is shown, Tom orders a black cherry water ice, a flavor choice of which we approve.
Philadelphia
Former Philadelphia Police Department Headquarters
First seen in episode one
Jessica Griffin / Staff Photographer
We get a brief glimpse of the exterior of the former Philadelphia police headquarters, colloquially known as the Roundhouse. Whether the interior is the same building is unclear, but in the show, this appears to be where the FBI’s Philly field office is located.
Bangor
Bangor Quarry
First seen in episode one
Robbie (Tom Pelphrey), Cliff (Raúl Castillo), and Peaches (Owen Teague) head here for a post-robbery swim. On a real-life note, you should not do the same — not only is it dangerous, but it’s also trespassing, according to the Bangor Borough Police Department.
Coatesville
Lincoln Highway and 2nd Avenue
First seen in episode two
TOM GRALISH / Staff Photographer
The Dark Hearts motorcycle gang rides through this intersection in formation, the giveaway being Presence Bank in the background in one shot.
Coatesville
Polish American Citizens Club
First seen in episode two
Courtesy of HBO
Done up as the so-called Lefty’s Taproom in the show, this location serves as the Dark Hearts’ clubhouse and watering hole. In real life, it’s just off Lincoln Highway, lending a bit of realism to the gang’s ride through downtown Coatesville.
Aston Township
Martin’s Taphouse
First seen in episode two
Martin's stands in as the exterior of the Tip Top Lounge in the series, which we see in this episode stacked with motorcycles parked outside the front door.
Sharon Hill
Dixon’s Lounge
First seen in episode two
Courtesy of HBO
While the exterior of the Tip Top Lounge is in Aston, the interior bears a striking resemblance to Delco’s own Dixon’s Lounge. Here, Robbie and Cliff are stood up by an, ahem, “business partner” before walking out on an order of crabfries.
Boothwyn
Willowbrook Shopping Center
First seen in episode two
Isaiah Vazquez / For The Inquirer
Maeve (Emilia Jones) takes Sam (Ben Lewis Doherty) to a fictional “Val-U Corner” store here with the intent of dropping him off for police to find before the plan goes awry. The store is located near the real Blue Cherry Ice Cream and Bakery, which is visible in the background.
Phoenixville
Phoenixville Area High School
First seen in episode two
During his search for his daughter, Emily (Silvia Dionicio), Tom (Mark Ruffalo) finds her in the dugout of a baseball field that, in real life, is at Phoenixville Area High School. Its distinctive backstop is visible from a bird's-eye view in the series.
Philadelphia
Ralph’s Italian Restaurant
First seen in episode three
MICHAEL KLEIN / Staff
Dark Hearts leaders Jayson (Sam Keeley) and Perry (Jamie McShane) walk through the kitchen here to meet with local drug kingpin Freddy Frias (Elvis Nolasco), but in the show, it doesn’t appear to be serving the Italian food we’re used to in real life.
Aston Township
Mount Hope Cemetery
First seen in episode three
Isaiah Vazquez / For The Inquirer
It’s a very quick shot, but it’s there just under four minutes into the episode. In the background, you can see the Commodore Barry Bridge, and graves on a hill in the cemetery in the foreground.
Union Township
Sixpenny Creek Quarry
First seen in episode three
Courtesy of HBO
Robbie (Tom Pelphrey) and Cliff (Raúl Castillo) finally get their meeting with Eryn (Margarita Levieva), their Dark Hearts insider, but it doesn’t go according to plan.
Upper Darby
Llanerch Diner
First seen in episode three
Tom Gralish / Staff Photographer
Taskforce members Aleah (Thuso Mbedu) and Lizzie (Alison Oliver) head to Upper Darby's famed Llanerch Diner for a tip on the drug house robberies they're investigating, and get a break in the case.
Lansdowne
Rosedon Plaza
First seen in episode three
Jose F. Moreno / Staff Photographer
In the background of one shot during the chase for Ray (Peter Patrikios), you can see the old Doc's Deli (Deli Green). That puts Ray in the corner of the Rosedon Plaza parking lot as Lizzie (Alison Oliver) makes the arrest.
Coatesville
Coatesville Police Department
First seen in episode three
Steven M. Falk / For The Inquirer
Whether the interior is the same station isn’t clear, but an exterior shot sets this spot up as the place where the Task team interrogates Ray (Peter Patrikios) and Shelley (Mickey Sumner). Out front, a police cruiser reads “Delaware County Sheriff,” which is a little far from home.
Holmes
The Ridley House
First seen in episode three
Isaiah Vazquez / For The Inquirer
Following the chase and interrogation, Lizzie (Alison Oliver) and Grasso (Fabien Frankel) head to this local bar to unwind. Grasso indicates it is a Barnaby’s, which, in real life, was true at one point – until the location became the Ridley House in 2019.
King of Prussia
Pennsylvania Turnpike on-ramp
First seen in episode four
TOM GRALISH / Staff Photographer
It’s a quick shot as Tom (Mark Ruffalo) drives around at the beginning of the episode, but you can just make out the LasikPlus building on Mall Boulevard in the background. That puts this Pennsylvania Turnpike entrance in King of Prussia.
Malvern
I-76 Exit 320
First seen in episode four
Tom (Mark Ruffalo) appears to take this exit as he is driving to meet his fellow taskforce members.
Marcus Hook
Marcus Hook Community Center
First seen in episode four
Erin Blewett / For The Inquirer
As County Chief Dorsey (Raphael Sbarge) exits the building, you can see a door tagged with “Delaware County Sheriff’s Office.” But the green awning above him is a dead giveaway — that’s the Marcus Hook Community Center.
Aston Township
Rockdale Industrial Center
First seen in episode four
It's disguised as a trucking depot in the series, but this is where Robbie (Tom Pelphrey) and Cliff (Raúl Castillo) travel with Sam (Ben Lewis Doherty) to arrange transportation for their escape into Canada before being confronted by a Good Samaritan.
Chester
Upland Diner
First seen in episode four
Erin Blewett / For The Inquirer
Upland Diner’s parking lot serves as Robbie’s (Tom Pelphrey) holding area during this episode’s drug deal. Unfortunately, we only get an exterior shot of the building, but the restaurant’s vintage-style sign is proudly on display. Great pancakes, for the record.
Newtown Square
Ridley Creek State Park entrance
First seen in episode four
JOSE F. MORENO / Staff Photographer
Cliff (Raúl Castillo) can be seen turning onto North Sandy Flash Drive from Gradyville Road as he heads to the drug deal meeting spot. If you look closely, you can just barely make out a sign for Ridley Creek State Park.
Wilmington, Del.
Beaver Creek
First seen in episode four
It's tough to spot, but the dam that Cliff (Raúl Castillo) parks his car next to during this episode's failed drug deal — or, more accurately, the Dark Hearts' setup — appears to be in Beaver Creek on the Delaware-Pennsylvania border.
Coatesville
City Clock Apartments
First seen in episode four
Steven M. Falk / For The Inquirer
Another brief shot, but the clock face on the tower of the City Clock Apartments is prominently featured. The building formerly was the National Bank of Coatesville, and has been on the National Register of Historic Places since 1977.
Downingtown
Coatesville-Downingtown Bypass
First seen in episode five
FBI Boss Kathleen McGinty (Martha Plimpton) and the rest of the task force swerve across traffic here while looking for Tom (Mark Ruffalo). In the background, you can just make out the sign for Pacer Pool Services & Supplies.
Downingtown
Marsh Creek State Park
First seen in episode five
After surviving his encounter with Robbie (Tom Pelphrey), Tom (Mark Ruffalo) emerges from the woods to see a beautiful summer scene of families enjoying the lake at Marsh Creek State Park.
Boothwyn
I-95 Pennsylvania Welcome Center
First seen in episode five
Erin Blewett / For The Inquirer
FBI boss Kathleen McGinty (Martha Plimpton) stuffs her face with fast food at the center's picnic tables as the task crew looks for their leader. As McGinty explains, she is “an emotional eater.”
Everett
Woy Bridge
First seen in episode five
In what is likely the farthest-flung filming location – at least in relation to the rest of the local spots – we get some shots of Everett’s Woy Bridge in Bedford County as the taskforce closes in on Robbie (Tom Pelphrey).
Milmont Park
Our Lady of Peace Parish
First seen in episode six
RON TARVER / Staff Photographer
Though disguised well as a juvenile detention facility in the show, this little Delco parish provides at least the exterior shots for where Tom (Mark Ruffalo) meets Sam (Ben Lewis Doherty) for the first time.
Coatesville
High Bridge
First seen in episode seven
This instantly recognizable Coatesville landmark serves as the location for where County Chief Dorsey (Raphael Sbarge) appears to seal Grasso's (Fabien Frankel) fate with the Dark Hearts.
Media
Delaware County Courthouse and Government Center
First seen in episode seven
Courtesy of Delaware County Government Center and Courthouse
Here, Tom (Mark Ruffalo) gives a touching family statement at a court hearing for his son, Ethan (Andrew Russel), in what is the emotional climax of the series. As The Inquirer reported last year, the production took over Courtroom 15 for filming.
story continues after advertisement
Explore the map of all locations at your own pace. Tap onHover overa pin to learn more.
That's it for Task. But rest assured, if HBO decides to focus on Philly again, we'll be back. Until then, see youse later.
Staff Contributors
Design and Development: Sam Morris
Reporting: Nick Vadala
Editing: Emily Babay
First seen in episode
(()=>{var fr=Object.create;var _e=Object.defineProperty;var dr=Object.getOwnPropertyDescriptor;var pr=Object.getOwnPropertyNames;var vr=Object.getPrototypeOf,gr=Object.prototype.hasOwnProperty;var et=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports);var mr=(e,t,r,n)=>{if(t&&typeof t==”object”||typeof t==”function”)for(let i of pr(t))!gr.call(e,i)&&i!==r&&_e(e,i,{get:()=>t[i],enumerable:!(n=dr(t,i))||n.enumerable});return e};var yr=(e,t,r)=>(r=e!=null?fr(vr(e)):{},mr(t||!e||!e.__esModule?_e(r,”default”,{value:e,enumerable:!0}):r,e));var ft=et(I=>{var Sr={0:”Jan.”,1:”Feb.”,2:”March”,3:”April”,4:”May”,5:”June”,6:”July”,7:”Aug.”,8:”Sept.”,9:”Oct.”,10:”Nov.”,11:”Dec.”};function at(e){return e===void 0&&(e=new Date),Sr[e.getMonth()]}var xr={0:”Jan”,1:”Feb”,2:”Mar”,3:”Apr”,4:”May”,5:”Jun”,6:”Jul”,7:”Aug”,8:”Sep”,9:”Oct”,10:”Nov”,11:”Dec”};function lt(e){return e===void 0&&(e=new Date),xr[e.getMonth()]}function ne(e){return e==null}function ht(e){return typeof e==”number”&&isFinite(e)}function Se(e){return ht(e)&&Math.floor(e)===e}var Tr=[“one”,”two”,”three”,”four”,”five”,”six”,”seven”,”eight”,”nine”],Cr=[“million”,”billion”,”trillion”,”quadrillion”,”quintillion”,”sextillion”,”septillion”,”octillion”,”nonillion”,”decillion”],ut=[“th”,”st”,”nd”,”rd”,”th”,”th”,”th”,”th”,”th”,”th”],Lr=[11,12,13];function ct(e){if(ne(e))return””;var t=+e;return Se(t)?Lr.indexOf(t%100)>-1?ut[0]:ut[t%10]:””}var Pr=[“first”,”second”,”third”,”fourth”,”fifth”,”sixth”,”seventh”,”eighth”,”ninth”],Ar=new RegExp(/s+([^s]*)s*$/);I.apdate=function(e){return e===void 0&&(e=new Date),at(e)+” “+e.getDate()+”, “+e.getFullYear()},I.apdatetab=function(e){return e===void 0&&(e=new Date),lt(e)+” “+e.getDate()+”, “+e.getFullYear()},I.apmonth=at,I.apmonthtab=lt,I.apnumber=function(e){if(ne(e))return””;var t=+e;return Se(t)?t=10?e.toString():Tr[t-1]:e.toString()},I.aptime=function(e){e===void 0&&(e=new Date);var t,r,n=e.getHours(),i=e.getMinutes(),o=i===0;if(o){if(n===0)return”midnight”;if(n===12)return”noon”}return n0?n:12):(t=”p.m.”,r=n===12?n:n-12),o?r+” “+t:r+”:”+(i<10?"0"+i:i)+" "+t},I.capfirst=function(e){if(ne(e))return"";var t=String(e);return""+t.charAt(0).toUpperCase()+t.slice(1)},I.intcomma=function(e){if(ne(e))return"";var t,r=+e;return ht(r)?((t=r.toString().split("."))[0]=t[0].replace(/B(?=(d{3})+(?!d))/g,","),t.join(".")):e.toString()},I.intword=function(e){if(ne(e))return"";var t=+e;if(!Se(t))return e.toString();var r=Math.abs(t);if(r<1e6)return e.toString();var n=Math.ceil(Math.log(r+1)/Math.LN10)-1,i=n-n%3,o=t/Math.pow(10,i);return(o=Math.round(10*o)/10)+" "+Cr[Math.floor(i/3)-2]},I.ordinal=function(e,t){if(t===void 0&&(t=!1),ne(e))return"";var r=+e;return Se(r)?t&&r{(function(e,t){typeof We==”object”&&typeof je<"u"?je.exports=t():typeof define=="function"&&define.amd?define(t):(e=typeof globalThis=h?m:””+Array(h+1-p.length).join(u)+m},K={s:O,z:function(m){var h=-m.utcOffset(),u=Math.abs(h),p=Math.floor(u/60),c=u%60;return(h<=0?"+":"-")+O(p,2,"0")+":"+O(c,2,"0")},m:function m(h,u){if(h.date()<u.date())return-m(u,h);var p=12*(u.year()-h.year())+(u.month()-h.month()),c=h.clone().add(p,f),y=u-c<0,w=h.clone().add(p+(y?-1:1),f);return+(-(p+(u-c)/(y?c-w:w-c))||0)},a:function(m){return m1)return m(w[0])}else{var b=h.name;$[b]=h,c=b}return!p&&c&&(C=c),c||!p&&C},E=function(m,h){if(ie(m))return m.clone();var u=typeof h==”object”?h:{};return u.date=m,u.args=arguments,new te(u)},M=K;M.l=oe,M.i=ie,M.w=function(m,h){return E(m,{locale:h.$L,utc:h.$u,x:h.$x,$offset:h.$offset})};var te=function(){function m(u){this.$L=oe(u.locale,null,!0),this.parse(u),this.$x=this.$x||u.x||{},this[R]=!0}var h=m.prototype;return h.parse=function(u){this.$d=function(p){var c=p.date,y=p.utc;if(c===null)return new Date(NaN);if(M.u(c))return new Date;if(c instanceof Date)return new Date(c);if(typeof c==”string”&&!/Z$/i.test(c)){var w=c.match(F);if(w){var b=w[2]-1||0,A=(w[7]||”0″).substring(0,3);return y?new Date(Date.UTC(w[1],b,w[3]||1,w[4]||0,w[5]||0,w[6]||0,A)):new Date(w[1],b,w[3]||1,w[4]||0,w[5]||0,w[6]||0,A)}}return new Date(c)}(u),this.init()},h.init=function(){var u=this.$d;this.$y=u.getFullYear(),this.$M=u.getMonth(),this.$D=u.getDate(),this.$W=u.getDay(),this.$H=u.getHours(),this.$m=u.getMinutes(),this.$s=u.getSeconds(),this.$ms=u.getMilliseconds()},h.$utils=function(){return M},h.isValid=function(){return this.$d.toString()!==x},h.isSame=function(u,p){var c=E(u);return this.startOf(p)<=c&&c<=this.endOf(p)},h.isAfter=function(u,p){return E(u)<this.startOf(p)},h.isBefore=function(u,p){return this.endOf(p)<E(u)},h.$g=function(u,p,c){return M.u(u)?this[p]:this.set(c,u)},h.unix=function(){return Math.floor(this.valueOf()/1e3)},h.valueOf=function(){return this.$d.getTime()},h.startOf=function(u,p){var c=this,y=!!M.u(p)||p,w=M.p(u),b=function(j,H){var J=M.w(c.$u?Date.UTC(c.$y,H,j):new Date(c.$y,H,j),c);return y?J:J.endOf(a)},A=function(j,H){return M.w(c.toDate()[j].apply(c.toDate("s"),(y?[0,0,0,0]:[23,59,59,999]).slice(H)),c)},k=this.$W,D=this.$M,z=this.$D,X="set"+(this.$u?"UTC":"");switch(w){case l:return y?b(1,0):b(31,11);case f:return y?b(1,D):b(0,D+1);case d:var q=this.$locale().weekStart||0,Q=(k<q?k+7:k)-q;return b(y?z-Q:z+(6-Q),D);case a:case v:return A(X+"Hours",0);case s:return A(X+"Minutes",1);case o:return A(X+"Seconds",2);case i:return A(X+"Milliseconds",3);default:return this.clone()}},h.endOf=function(u){return this.startOf(u,!1)},h.$set=function(u,p){var c,y=M.p(u),w="set"+(this.$u?"UTC":""),b=(c={},c[a]=w+"Date",c[v]=w+"Date",c[f]=w+"Month",c[l]=w+"FullYear",c[s]=w+"Hours",c[o]=w+"Minutes",c[i]=w+"Seconds",c[n]=w+"Milliseconds",c)[y],A=y===a?this.$D+(p-this.$W):p;if(y===f||y===l){var k=this.clone().set(v,1);k.$d[b](A),k.init(),this.$d=k.set(v,Math.min(this.$D,k.daysInMonth())).$d}else b&&this.$d[b](A);return this.init(),this},h.set=function(u,p){return this.clone().$set(u,p)},h.get=function(u){return this[M.p(u)]()},h.add=function(u,p){var c,y=this;u=Number(u);var w=M.p(p),b=function(D){var z=E(y);return M.w(z.date(z.date()+Math.round(D*u)),y)};if(w===f)return this.set(f,this.$M+u);if(w===l)return this.set(l,this.$y+u);if(w===a)return b(1);if(w===d)return b(7);var A=(c={},c[o]=t,c[s]=r,c[i]=e,c)[w]||1,k=this.$d.getTime()+u*A;return M.w(k,this)},h.subtract=function(u,p){return this.add(-1*u,p)},h.format=function(u){var p=this,c=this.$locale();if(!this.isValid())return c.invalidDate||x;var y=u||"YYYY-MM-DDTHH:mm:ssZ",w=M.z(this),b=this.$H,A=this.$m,k=this.$M,D=c.weekdays,z=c.months,X=c.meridiem,q=function(H,J,se,ae){return H&&(H[J]||H(p,y))||se[J].slice(0,ae)},Q=function(H){return M.s(b%12||12,H,"0")},j=X||function(H,J,se){var ae=H{window.addEventListener(“resize”,()=>{rt(),$e()}),window.addEventListener(“scroll”,()=>{$e()})},rt=()=>{wr.setAttribute(“viewBox”,`0 0 ${window.innerWidth} ${window.innerHeight}`)},$e=()=>{let e=document.querySelector(“.js-steps”).dataset.current;re!==e&&(re=e,ot()),!re||re==”all”?it():nt()},nt=()=>{if(re){let e=document.querySelector(`.js-steps-step[data-step=”${re}”] .js-steps-pin`),t=document.querySelector(“.js-map-location.is-current .js-map-pin”);if(t){let r=e.getBoundingClientRect(),n=t.getBoundingClientRect(),o=document.querySelector(“.js-steps”).getBoundingClientRect(),s=o.top>0?o.top:0,a=r.width/2;ce.setAttribute(“y1”,r.top+a-s),ce.setAttribute(“x1”,r.left+a),ce.setAttribute(“y2”,n.top+a-s),ce.setAttribute(“x2”,n.left+a)}}},it=()=>{ce.classList.add(“is-hidden”)},Mr=()=>{ce.classList.remove(“is-hidden”)},ot=()=>{it(),clearTimeout(tt),tt=setTimeout(()=>{re!==void 0&&re!==”all”&&(nt(),Mr())},1200)},st={init:()=>{br(),rt(),$e()},onChange:()=>{ot()}};var Rn=ft();var ze=e=>{if(e)return e.trim().toLowerCase().normalize(“NFD”).replace(/[u0300-u036f]/g,””).replace(/[^A-Z0-9 ]/gi,””).trim().replace(/ /g,”-“)};var dt=()=>/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);var pe=(e,t=null,r=null)=>{r||(r=document.querySelector(“head”));let n=document.createElement(“script”);n.type=”text/javascript”,n.src=e,t&&(n.onload=t),r.appendChild(n)},pt=()=>(window.PMNdataLayer?.[0]!==void 0&&window.PMNdataLayer[0])?.analytics?.user?.state===”Subscribed”,vt=()=>{let t=(window.PMNdataLayer?.[0]!==void 0&&window.PMNdataLayer[0])?.analytics?.user?.state;return window.location.host.includes(“zzz-systest”)||window.location.host.includes(“pmn.arcpublishing.com”)||window.location.host.includes(“stage.fusion.inquirer.com”)||typeof t>”u”},gt=()=>{let t=(window.PMNdataLayer?.[0]!==void 0&&window.PMNdataLayer[0])?.analytics?.user?.hasAdsFreeReading;return!!(t&&t==1)},Be=()=>window.location.host.includes(“localhost”),xe=(e,t=””)=>{let r=document.querySelector(`template#${e}`);if(!r||!(r instanceof HTMLTemplateElement))return console.log(`Couldn’t find .`),null;let n=r.content.cloneNode(!0).childNodes;if(n.length==0)return console.log(`Template ${r} has no children, returning null.`),null;n.length>1&&console.log(`Template ${r} has multiple children, only returning the first.`);let i=n[0];return i.setAttribute(“data-id”,t),i},Te=(e,t)=>{let r=[…e.querySelectorAll(“[data-populate]”)];e.dataset.populate&&r.unshift(e);let n=r.filter(i=>{let o=i.closest(“[data-populate-context]”);return!o||o==e});for(let i of n){let s=i.dataset.populate.trim().split(/s*,s*/).map(a=>a.split(/s*:s*/));for(let[a,d]of s){let g=a.split(“.”).reduce((x,F)=>x?.[F],t),l=g==null||g==null,v=d?.split(/s+/)||[“innerHTML”];for(let x of v)x.startsWith(“.”)&&i.classList.toggle(x.substring(1),l?!1:g),!l&&(x==”innerHTML”?i.innerHTML=g:x.startsWith(“@”)?i.setAttribute(x.substring(1),g):x.startsWith(“–“)&&i.style.setProperty(x,g))}}};var Er=()=>{gt()&&document.querySelectorAll(“.js-adbox”).forEach(t=>{t.classList.add(“is-hidden”)})},mt={init:()=>{Er()}};var le,yt,kr=()=>{le=document.getElementById(“js-inno-toast”)},Dr=e=>{if(!le)return;le.innerHTML=e,le.classList.add(“inno-toast–active”);let t=()=>{le.addEventListener(“transitionend”,$r,{once:!0}),le.classList.remove(“inno-toast–active”)};clearTimeout(yt),yt=setTimeout(t,5e3)},$r=()=>{le.innerHTML=””},ue={init:()=>{kr()},showToast:Dr};var Ce,wt=!1,zr=async()=>new Promise(e=>{setTimeout(()=>{console.log(“simulating createShareLink for localhost”),e(“https://inquirer.com/interactives”),Br()},100)}),Br=()=>{let e=document.querySelector(“.js-gift-toast-receiver”);!e||!(e instanceof HTMLElement)||setTimeout(()=>{let t=e?.querySelector(“span”);t&&(t.innerHTML=”Gift link copied to clipboard“)},20)},Fr=()=>{let e=window.services?.createShareLink;e&&(Ce=e),Be()&&(Ce=zr),Ce&&Or()},Hr=async e=>{let t=”text/plain”,r=async()=>{try{return await Ce(window.location.pathname)}catch{e.dataset.state=”error”,ue.showToast(“Hmm, we couldn’t generate a gift link…”)}},n=new ClipboardItem({[t]:r()});await navigator.clipboard.write([n]).catch(i=>{console.log(i),ue.showToast(“Couldn’t copy to clipboard, try again?”),e.dataset.state=”error”}),ue.showToast(“Gift link copied to clipboard!”),e.dataset.state=”complete”},Or=()=>{document.querySelectorAll(“.js-gift”).forEach(t=>{(pt()||Be()||vt())&&t.classList.add(“is-available”)}),document.querySelectorAll(“.js-gift-button”).forEach(t=>{t instanceof HTMLButtonElement&&t.addEventListener(“click”,()=>{t.classList.contains(“disabled”)||(t.dataset.state=”loading”,wt=!0,Hr(t),setTimeout(()=>{t.dataset.state=”ready”},2e3))})});let e=document.querySelector(“.js-gift-toast-receiver”);!e||!(e instanceof HTMLElement)||Rr(e)},Rr=e=>{new MutationObserver(r=>{for(let n of r){let i=[…n.addedNodes].at(0);if(!(i instanceof HTMLElement))return;wt&&ue.showToast(i.outerHTML)}}).observe(e,{subtree:!0,childList:!0})},bt={init:()=>{Fr()}};var Ur=()=>{window.addEventListener(“message”,e=>{if(e.data[“datawrapper-height”]){let t=e.data[“datawrapper-height”];for(let r in t)document.querySelector(`#datawrapper-chart-${r}`).setAttribute(“height”,t[r])}})},Ir=()=>{document.querySelectorAll(“.js-datawrapper-graphic”).forEach(e=>{pe(`https://datawrapper.dwcdn.net/${e.dataset.id}/embed.js`,null,e)})},qr=()=>{window.addEventListener(“message”,e=>{let t=e.data;document.querySelectorAll(`iframe[src*=”${t.id}”]`).forEach(n=>{n.style.height=`${t.height}px`})},!1)},Gr=()=>{document.querySelectorAll(“.js-pym-graphic”).forEach(e=>{if(typeof window{new window.pym.Parent(e.id,e.dataset.iframe)};typeof window.pym>”u”?pe(“https://pym.nprapps.org/pym.v1.min.js”,t):t()}})},Mt={init:()=>{Ur(),Ir(),Gr(),qr()}};var ve,Nr=()=>{document.querySelectorAll(“.js-hover”).forEach(e=>{e.addEventListener(“click”,()=>{St(e)}),e.addEventListener(“mouseenter”,()=>{St(e)}),e.addEventListener(“mouseout”,()=>{xt(e)})}),window.addEventListener(“scroll”,()=>{ve!==null&&Zr()})},Zr=()=>{(ve>window.scrollY+100||ve{xt(e)})},St=e=>{e.classList.add(“is-visible”),ve=window.scrollY},xt=e=>{e.classList.remove(“is-visible”),ve=null},Tt={init:()=>{Nr()}};var N=Uint8Array,he=Uint16Array,Wr=Int32Array,Ct=new N([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]),Lt=new N([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]),jr=new N([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),Pt=function(e,t){for(var r=new he(31),n=0;n<31;++n)r[n]=t+=1<<e[n-1];for(var i=new Wr(r[30]),n=1;n<30;++n)for(var o=r[n];o<r[n+1];++o)i[o]=o-r[n]<<5|n;return{b:r,r:i}},At=Pt(Ct,2),Et=At.b,Jr=At.r;Et[28]=258,Jr[258]=28;var kt=Pt(Lt,0),Yr=kt.b,Vn=kt.r,Oe=new he(32768);for(S=0;S>1|(S&21845)<>2|(_&13107)<>4|(_&3855)<>8|(_&255)<>1;var _,S,ge=function(e,t,r){for(var n=e.length,i=0,o=new he(t);i<n;++i)e[i]&&++o[e[i]-1];var s=new he(t);for(i=1;i<t;++i)s[i]=s[i-1]+o[i-1]<<1;var a;if(r){a=new he(1<<t);var d=15-t;for(i=0;i<n;++i)if(e[i])for(var f=i<<4|e[i],g=t-e[i],l=s[e[i]-1]++<<g,v=l|(1<<g)-1;l>d]=f}else for(a=new he(n),i=0;i>15-e[i]);return a},me=new N(288);for(S=0;S<144;++S)me[S]=8;var S;for(S=144;S<256;++S)me[S]=9;var S;for(S=256;S<280;++S)me[S]=7;var S;for(S=280;S<288;++S)me[S]=8;var S,Dt=new N(32);for(S=0;S<32;++S)Dt[S]=5;var S;var Vr=ge(me,9,1);var Kr=ge(Dt,5,1),Fe=function(e){for(var t=e[0],r=1;rt&&(t=e[r]);return t},Y=function(e,t,r){var n=t/8|0;return(e[n]|e[n+1]<>(t&7)&r},He=function(e,t){var r=t/8|0;return(e[r]|e[r+1]<<8|e[r+2]<>(t&7)},Xr=function(e){return(e+7)/8|0},Qr=function(e,t,r){return(t==null||te.length)&&(r=e.length),new N(e.subarray(t,r))};var _r=[“unexpected EOF”,”invalid block type”,”invalid length/literal”,”invalid distance”,”stream finished”,”no stream handler”,,”no callback”,”invalid UTF-8 data”,”extra field too long”,”date not in range 1980-2099″,”filename too long”,”stream finishing”,”invalid zip data”],G=function(e,t,r){var n=new Error(t||_r[e]);if(n.code=e,Error.captureStackTrace&&Error.captureStackTrace(n,G),!r)throw n;return n},Re=function(e,t,r,n){var i=e.length,o=n?n.length:0;if(!i||t.f&&!t.l)return r||new N(0);var s=!r,a=s||t.i!=2,d=t.i;s&&(r=new N(i*3));var f=function(ae){var Xe=r.length;if(ae>Xe){var Qe=new N(Math.max(Xe*2,ae));Qe.set(r),r=Qe}},g=t.f||0,l=t.p||0,v=t.b||0,x=t.l,F=t.d,P=t.m,V=t.n,O=i*8;do{if(!x){g=Y(e,l,1);var K=Y(e,l+1,3);if(l+=3,K)if(K==1)x=Vr,F=Kr,P=9,V=5;else if(K==2){var ie=Y(e,l,31)+257,oe=Y(e,l+10,15)+4,E=ie+Y(e,l+5,31)+1;l+=14;for(var M=new N(E),te=new N(19),U=0;U<oe;++U)te[jr[U]]=Y(e,l+U*3,7);l+=oe*3;for(var m=Fe(te),h=(1<<m)-1,u=ge(te,m,1),U=0;U>4;if(C<16)M[U++]=C;else{var c=0,y=0;for(C==16?(y=3+Y(e,l,3),l+=2,c=M[U-1]):C==17?(y=3+Y(e,l,7),l+=3):C==18&&(y=11+Y(e,l,127),l+=7);y–;)M[U++]=c}}var w=M.subarray(0,ie),b=M.subarray(ie);P=Fe(w),V=Fe(b),x=ge(w,P,1),F=ge(b,V,1)}else G(1);else{var C=Xr(l)+4,$=e[C-4]|e[C-3]<i){d&&G(0);break}a&&f(v+$),r.set(e.subarray(C,R),v),t.b=v+=$,t.p=l=R*8,t.f=g;continue}if(l>O){d&&G(0);break}}a&&f(v+131072);for(var A=(1<<P)-1,k=(1<>4;if(l+=c&15,l>O){d&&G(0);break}if(c||G(2),z264){var U=z-257,q=Ct[U];X=Y(e,l,(1<>4;Q||G(3),l+=Q&15;var b=Yr[j];if(j>3){var q=Lt[j];b+=He(e,l)&(1<O){d&&G(0);break}a&&f(v+131072);var H=v+X;if(v<b){var J=o-b,se=Math.min(b,H);for(J+v<0&&G(3);v<se;++v)r[v]=n[J+v]}for(;v<H;++v)r[v]=r[v-b]}}t.l=x,t.p=D,t.b=v,t.f=g,x&&(g=1,t.m=P,t.d=F,t.n=V)}while(!g);return v!=r.length&&s?Qr(r,0,v):r.subarray(0,v)};var en=new N(0);var tn=function(e){(e[0]!=31||e[1]!=139||e[2]!=8)&&G(6,"invalid gzip data");var t=e[3],r=10;t&4&&(r+=(e[10]|e[11]<>3&1)+(t>>4&1);n>0;n-=!e[r++]);return r+(t&2)},rn=function(e){var t=e.length;return(e[t-4]|e[t-3]<<8|e[t-2]<<16|e[t-1]<>>0};var nn=function(e,t){return((e[0]&15)!=8||e[0]>>4>7||(e[0]<>5&1)==+!t&&G(6,”invalid zlib data: “+(e[1]&32?”need”:”unexpected”)+” dictionary”),(e[1]>>3&4)+2};function on(e,t){return Re(e,{i:2},t&&t.out,t&&t.dictionary)}function sn(e,t){var r=tn(e);return r+8>e.length&&G(6,”invalid gzip data”),Re(e.subarray(r,-8),{i:2},t&&t.out||new N(rn(e)),t&&t.dictionary)}function an(e,t){return Re(e.subarray(nn(e,t&&t.dictionary),-4),{i:2},t&&t.out,t&&t.dictionary)}function $t(e,t){return e[0]==31&&e[1]==139&&e[2]==8?sn(e,t):(e[0]&15)!=8||e[0]>>4>7||(e[0]<<8|e[1])%31?on(e,t):an(e,t)}var ln=typeof TextDecodercn(e,”name”,{value:t,configurable:!0}),B=(e,t,r)=>new Promise((n,i)=>{var o=d=>{try{a(r.next(d))}catch(f){i(f)}},s=d=>{try{a(r.throw(d))}catch(f){i(f)}},a=d=>d.done?n(d.value):Promise.resolve(d.value).then(o,s);a((r=r.apply(e,t)).next())}),Qn=T((e,t)=>{let r=!1,n=””,i=L.GridLayer.extend({createTile:T((o,s)=>{let a=document.createElement(“img”),d=new AbortController,f=d.signal;return a.cancel=()=>{d.abort()},r||(e.getHeader().then(g=>{g.tileType===1?console.error(“Error: archive contains MVT vector tiles, but leafletRasterLayer is for displaying raster tiles. See https://github.com/protomaps/PMTiles/tree/main/js for details.”):g.tileType===2?n=”image/png”:g.tileType===3?n=”image/jpeg”:g.tileType===4?n=”image/webp”:g.tileType===5&&(n=”image/avif”)}),r=!0),e.getZxy(o.z,o.x,o.y,f).then(g=>{if(g){let l=new Blob([g.data],{type:n}),v=window.URL.createObjectURL(l);a.src=v,a.cancel=void 0,s(void 0,a)}}).catch(g=>{if(g.name!==”AbortError”)throw g}),a},”createTile”),_removeTile:T(function(o){let s=this._tiles[o];s&&(s.el.cancel&&s.el.cancel(),s.el.width=0,s.el.height=0,s.el.deleted=!0,L.DomUtil.remove(s.el),delete this._tiles[o],this.fire(“tileunload”,{tile:s.el,coords:this._keyToTileCoords(o)}))},”_removeTile”)});return new i(t)},”leafletRasterLayer”),hn=T(e=>(t,r)=>{if(r instanceof AbortController)return e(t,r);let n=new AbortController;return e(t,n).then(i=>r(void 0,i.data,i.cacheControl||””,i.expires||””),i=>r(i)).catch(i=>r(i)),{cancel:T(()=>n.abort(),”cancel”)}},”v3compat”),zt=class{constructor(t){this.tilev4=T((r,n)=>B(this,null,function*(){if(r.type===”json”){let x=r.url.substr(10),F=this.tiles.get(x);if(F||(F=new Le(x),this.tiles.set(x,F)),this.metadata)return{data:yield F.getTileJson(r.url)};let P=yield F.getHeader();return(P.minLon>=P.maxLon||P.minLat>=P.maxLat)&&console.error(`Bounds of PMTiles archive ${P.minLon},${P.minLat},${P.maxLon},${P.maxLat} are not valid.`),{data:{tiles:[`${r.url}/{z}/{x}/{y}`],minzoom:P.minZoom,maxzoom:P.maxZoom,bounds:[P.minLon,P.minLat,P.maxLon,P.maxLat]}}}let i=new RegExp(/pmtiles://(.+)/(d+)/(d+)/(d+)/),o=r.url.match(i);if(!o)throw new Error(“Invalid PMTiles protocol URL”);let s=o[1],a=this.tiles.get(s);a||(a=new Le(s),this.tiles.set(s,a));let d=o[2],f=o[3],g=o[4],l=yield a.getHeader(),v=yield a?.getZxy(+d,+f,+g,n.signal);if(v)return{data:new Uint8Array(v.data),cacheControl:v.cacheControl,expires:v.expires};if(l.tileType===1){if(this.errorOnMissingTile)throw new Error(“Tile not found.”);return{data:new Uint8Array}}return{data:null}}),”tilev4″),this.tile=hn(this.tilev4),this.tiles=new Map,this.metadata=t?.metadata||!1,this.errorOnMissingTile=t?.errorOnMissingTile||!1}add(t){this.tiles.set(t.source.getKey(),t)}get(t){return this.tiles.get(t)}};T(zt,”Protocol”);var Bt=zt;function Ft(e,t){return(t>>>0)*4294967296+(e>>>0)}T(Ft,”toNum”);function Ht(e,t){let r=t.buf,n=r[t.pos++],i=(n&112)>>4;if(n<128||(n=r[t.pos++],i|=(n&127)<<3,n<128)||(n=r[t.pos++],i|=(n&127)<<10,n<128)||(n=r[t.pos++],i|=(n&127)<<17,n<128)||(n=r[t.pos++],i|=(n&127)<<24,n<128)||(n=r[t.pos++],i|=(n&1)<<31,n<128))return Ft(e,i);throw new Error("Expected varint not more than 10 bytes")}T(Ht,"readVarintRemainder");function fe(e){let t=e.buf,r=t[e.pos++],n=r&127;return r<128||(r=t[e.pos++],n|=(r&127)<<7,r<128)||(r=t[e.pos++],n|=(r&127)<<14,r<128)||(r=t[e.pos++],n|=(r&127)<<21,r<128)?n:(r=t[e.pos],n|=(r&15)<<28,Ht(n,e))}T(fe,"readVarint");function Ie(e,t,r,n){if(n===0){r===1&&(t[0]=e-1-t[0],t[1]=e-1-t[1]);let i=t[0];t[0]=t[1],t[1]=i}}T(Ie,"rotate");function Ot(e,t){let r=ye(2,e),n=t,i=t,o=t,s=[0,0],a=1;for(;a26)throw new Error(“Tile zoom level exceeds max safe number limit (26)”);if(t>ye(2,e)-1||r>ye(2,e)-1)throw new Error(“tile x/y outside zoom level bounds”);let n=fn[e],i=ye(2,e),o=0,s=0,a=0,d=[t,r],f=i/2;for(;f>0;)o=(d[0]&f)>0?1:0,s=(d[1]&f)>0?1:0,a+=f*f*(3*o^s),Ie(f,d,o,s),f=f/2;return n+a}T(Rt,”zxyToTileId”);function dn(e){let t=0,r=0;for(let n=0;n<27;n++){let i=(1<<n)*(1<e)return Ot(n,e-t);t+=i}throw new Error(“Tile zoom level exceeds max safe number limit (26)”)}T(dn,”tileIdToZxy”);var pn=(e=>(e[e.Unknown=0]=”Unknown”,e[e.None=1]=”None”,e[e.Gzip=2]=”Gzip”,e[e.Brotli=3]=”Brotli”,e[e.Zstd=4]=”Zstd”,e))(pn||{});function Pe(e,t){return B(this,null,function*(){if(t===1||t===0)return e;if(t===2){if(typeof globalThis.DecompressionStream>”u”)return $t(new Uint8Array(e));let r=new Response(e).body;if(!r)throw new Error(“Failed to read response stream”);let n=r.pipeThrough(new globalThis.DecompressionStream(“gzip”));return new Response(n).arrayBuffer()}throw new Error(“Compression method not supported”)})}T(Pe,”defaultDecompress”);var vn=(e=>(e[e.Unknown=0]=”Unknown”,e[e.Mvt=1]=”Mvt”,e[e.Png=2]=”Png”,e[e.Jpeg=3]=”Jpeg”,e[e.Webp=4]=”Webp”,e[e.Avif=5]=”Avif”,e))(vn||{});function Ut(e){return e===1?”.mvt”:e===2?”.png”:e===3?”.jpg”:e===4?”.webp”:e===5?”.avif”:””}T(Ut,”tileTypeExt”);var gn=127;function It(e,t){let r=0,n=e.length-1;for(;r>1,o=t-e[i].tileId;if(o>0)r=i+1;else if(o=0&&(e[n].runLength===0||t-e[n].tileId-1,o=/Chrome|Chromium|Edg|OPR|Brave/.test(n);this.chromeWindowsNoCache=!1,i&&o&&(this.chromeWindowsNoCache=!0)}getKey(){return this.url}setHeaders(t){this.customHeaders=t}getBytes(t,r,n,i){return B(this,null,function*(){let o,s;n?s=n:(o=new AbortController,s=o.signal);let a=new Headers(this.customHeaders);a.set(“range”,`bytes=${t}-${t+r-1}`);let d;this.mustReload?d=”reload”:this.chromeWindowsNoCache&&(d=”no-store”);let f=yield fetch(this.url,{signal:s,cache:d,headers:a});if(t===0&&f.status===416){let v=f.headers.get(“Content-Range”);if(!v||!v.startsWith(“bytes */”))throw new Error(“Missing content-length on 416 response”);let x=+v.substr(8);f=yield fetch(this.url,{signal:s,cache:”reload”,headers:{range:`bytes=0-${x-1}`}})}let g=f.headers.get(“Etag”);if(g!=null&&g.startsWith(“W/”)&&(g=null),f.status===416||i&&g&&g!==i)throw this.mustReload=!0,new Ue(`Server returned non-matching ETag ${i} after one retry. Check browser extensions and servers for issues that may affect correct ETag headers.`);if(f.status>=300)throw new Error(`Bad response code: ${f.status}`);let l=f.headers.get(“Content-Length”);if(f.status===200&&(!l||+l>r))throw o&&o.abort(),new Error(“Server returned no content-length header or content-length exceeding request. Check that your storage backend supports HTTP Byte Serving.”);return{data:yield f.arrayBuffer(),etag:g||void 0,cacheControl:f.headers.get(“Cache-Control”)||void 0,expires:f.headers.get(“Expires”)||void 0}})}};T(qt,”FetchSource”);var yn=qt;function W(e,t){let r=e.getUint32(t+4,!0),n=e.getUint32(t+0,!0);return r*ye(2,32)+n}T(W,”getUint64″);function Gt(e,t){let r=new DataView(e),n=r.getUint8(7);if(n>3)throw new Error(`Archive is spec version ${n} but this library supports up to spec version 3`);return{specVersion:n,rootDirectoryOffset:W(r,8),rootDirectoryLength:W(r,16),jsonMetadataOffset:W(r,24),jsonMetadataLength:W(r,32),leafDirectoryOffset:W(r,40),leafDirectoryLength:W(r,48),tileDataOffset:W(r,56),tileDataLength:W(r,64),numAddressedTiles:W(r,72),numTileEntries:W(r,80),numTileContents:W(r,88),clustered:r.getUint8(96)===1,internalCompression:r.getUint8(97),tileCompression:r.getUint8(98),tileType:r.getUint8(99),minZoom:r.getUint8(100),maxZoom:r.getUint8(101),minLon:r.getInt32(102,!0)/1e7,minLat:r.getInt32(106,!0)/1e7,maxLon:r.getInt32(110,!0)/1e7,maxLat:r.getInt32(114,!0)/1e7,centerZoom:r.getUint8(118),centerLon:r.getInt32(119,!0)/1e7,centerLat:r.getInt32(123,!0)/1e7,etag:t}}T(Gt,”bytesToHeader”);function qe(e){let t={buf:new Uint8Array(e),pos:0},r=fe(t),n=[],i=0;for(let o=0;o<r;o++){let s=fe(t);n.push({tileId:i+s,offset:0,length:0,runLength:1}),i+=s}for(let o=0;o<r;o++)n[o].runLength=fe(t);for(let o=0;o<r;o++)n[o].length=fe(t);for(let o=0;o0?n[o].offset=n[o-1].offset+n[o-1].length:n[o].offset=s-1}return n}T(qe,”deserializeIndex”);var Nt=class extends Error{};T(Nt,”EtagMismatch”);var Ue=Nt;function Ge(e,t){return B(this,null,function*(){let r=yield e.getBytes(0,16384);if(new DataView(r.data).getUint16(0,!0)!==19792)throw new Error(“Wrong magic number for PMTiles archive”);let n=r.data.slice(0,gn),i=Gt(n,r.etag),o=r.data.slice(i.rootDirectoryOffset,i.rootDirectoryOffset+i.rootDirectoryLength),s=`${e.getKey()}|${i.etag||””}|${i.rootDirectoryOffset}|${i.rootDirectoryLength}`,a=qe(yield t(o,i.internalCompression));return[i,[s,a.length,a]]})}T(Ge,”getHeaderAndRoot”);function Ne(e,t,r,n,i){return B(this,null,function*(){let o=yield e.getBytes(r,n,void 0,i.etag),s=yield t(o.data,i.internalCompression),a=qe(s);if(a.length===0)throw new Error(“Empty directory is invalid”);return a})}T(Ne,”getDirectory”);var wn=class{constructor(t=100,r=!0,n=Pe){this.cache=new Map,this.maxCacheEntries=t,this.counter=1,this.decompress=n}getHeader(t){return B(this,null,function*(){let r=t.getKey(),n=this.cache.get(r);if(n)return n.lastUsed=this.counter++,n.data;let i=yield Ge(t,this.decompress);return i[1]&&this.cache.set(i[1][0],{lastUsed:this.counter++,data:i[1][2]}),this.cache.set(r,{lastUsed:this.counter++,data:i[0]}),this.prune(),i[0]})}getDirectory(t,r,n,i){return B(this,null,function*(){let o=`${t.getKey()}|${i.etag||””}|${r}|${n}`,s=this.cache.get(o);if(s)return s.lastUsed=this.counter++,s.data;let a=yield Ne(t,this.decompress,r,n,i);return this.cache.set(o,{lastUsed:this.counter++,data:a}),this.prune(),a})}prune(){if(this.cache.size>this.maxCacheEntries){let t=1/0,r;this.cache.forEach((n,i)=>{n.lastUsed{Ge(t,this.decompress).then(a=>{a[1]&&this.cache.set(a[1][0],{lastUsed:this.counter++,data:Promise.resolve(a[1][2])}),o(a[0]),this.prune()}).catch(a=>{s(a)})});return this.cache.set(r,{lastUsed:this.counter++,data:i}),i})}getDirectory(t,r,n,i){return B(this,null,function*(){let o=`${t.getKey()}|${i.etag||””}|${r}|${n}`,s=this.cache.get(o);if(s)return s.lastUsed=this.counter++,yield s.data;let a=new Promise((d,f)=>{Ne(t,this.decompress,r,n,i).then(g=>{d(g),this.prune()}).catch(g=>{f(g)})});return this.cache.set(o,{lastUsed:this.counter++,data:a}),a})}prune(){if(this.cache.size>=this.maxCacheEntries){let t=1/0,r;this.cache.forEach((n,i)=>{n.lastUsed{this.getHeader(t).then(s=>{i(),this.invalidations.delete(r)}).catch(s=>{o(s)})});this.invalidations.set(r,n)})}};T(Zt,”SharedPromiseCache”);var bn=Zt,Wt=class{constructor(t,r,n){typeof t==”string”?this.source=new yn(t):this.source=t,n?this.decompress=n:this.decompress=Pe,r?this.cache=r:this.cache=new bn}getHeader(){return B(this,null,function*(){return yield this.cache.getHeader(this.source)})}getZxyAttempt(t,r,n,i){return B(this,null,function*(){let o=Rt(t,r,n),s=yield this.cache.getHeader(this.source);if(ts.maxZoom)return;let a=s.rootDirectoryOffset,d=s.rootDirectoryLength;for(let f=0;f0){let v=yield this.source.getBytes(s.tileDataOffset+l.offset,l.length,i,s.etag);return{data:yield this.decompress(v.data,s.tileCompression),cacheControl:v.cacheControl,expires:v.expires}}a=s.leafDirectoryOffset+l.offset,d=l.length}else return}throw new Error(“Maximum directory depth exceeded”)})}getZxy(t,r,n,i){return B(this,null,function*(){try{return yield this.getZxyAttempt(t,r,n,i)}catch(o){if(o instanceof Ue)return this.cache.invalidate(this.source),yield this.getZxyAttempt(t,r,n,i);throw o}})}getMetadataAttempt(){return B(this,null,function*(){let t=yield this.cache.getHeader(this.source),r=yield this.source.getBytes(t.jsonMetadataOffset,t.jsonMetadataLength,void 0,t.etag),n=yield this.decompress(r.data,t.internalCompression),i=new TextDecoder(“utf-8″);return JSON.parse(i.decode(n))})}getMetadata(){return B(this,null,function*(){try{return yield this.getMetadataAttempt()}catch(t){if(t instanceof Ue)return this.cache.invalidate(this.source),yield this.getMetadataAttempt();throw t}})}getTileJson(t){return B(this,null,function*(){let r=yield this.getHeader(),n=yield this.getMetadata(),i=Ut(r.tileType);return{tilejson:”3.0.0″,scheme:”xyz”,tiles:[`${t}/{z}/{x}/{y}${i}`],vector_layers:n.vector_layers,attribution:n.attribution,description:n.description,name:n.name,version:n.version,bounds:[r.minLon,r.minLat,r.maxLon,r.maxLat],center:[r.centerLon,r.centerLat,r.centerZoom],minzoom:r.minZoom,maxzoom:r.maxZoom}})}};T(Wt,”PMTiles”);var Le=Wt;var we=[{name:”Mirenda Center at Neumann University”,town:”Aston Township”,coordinates:”39.87518295957942, -75.44287264018742″,photo:”CUFT75EQJFCNXF6TBJWB47IZBE”,description:”Tom (Mark Ruffalo) mans a table at a job fair here while temporarily working as a recruiter for the FBI. Next to his station, the distinctive pillars of the centeru2019s atrium are visible.”,episode:”1″},{name:”Rita’s Italian Ice & Frozen Custard”,town:”Collingdale”,coordinates:”39.91438144966683, -75.27198755476991″,photo:”PVN6FY7AZVH57NJJ5QZMPSORVQ”,description:”Emily (Silvia Dionicio), Tomu2019s daughter, works her part-time job here. In the scene where it is shown, Tom orders a black cherry water ice, a flavor choice of which we approve.”,episode:”1″},{name:”Former Philadelphia Police Department Headquarters”,town:”Philadelphia”,coordinates:”39.95454212611587, -75.15196309318775″,photo:”L7RTCVGETVB6BGP3OI6FGI75II”,description:”We get a brief glimpse of the exterior of the former Philadelphia police headquarters, colloquially known as the Roundhouse. Whether the interior is the same building is unclear, but in the show, this appears to be where the FBIu2019s Philly field office is located.”,episode:”1″},{name:”Bangor Quarry”,town:”Bangor”,coordinates:”40.870304770450126, -75.20395382209078″,photo:””,description:”Robbie (Tom Pelphrey), Cliff (RaxFAl Castillo), and Peaches (Owen Teague) head here for a post-robbery swim. On a real-life note, you should not do the same u2014 not only is it dangerous, but itu2019s also trespassing, according to the Bangor Borough Police Department.”,episode:”1″},{name:”Lincoln Highway and 2nd Avenue”,town:”Coatesville”,coordinates:”39.98367030794463, -75.82206085300957″,photo:”DKXFYZ5EGBEHJJKLSUGLQQDAR4″,description:”The Dark Hearts motorcycle gang rides through this intersection in formation, the giveaway being Presence Bank in the background in one shot.”,episode:”2″},{name:”Polish American Citizens Club”,town:”Coatesville”,coordinates:”39.98079295642107, -75.83090353169075″,photo:”WICMTOVTBFE3HANVTH2PSHED5M”,description:”Done up as the so-called Leftyu2019s Taproom in the show, this location serves as the Dark Heartsu2019 clubhouse and watering hole. In real life, itu2019s just off Lincoln Highway, lending a bit of realism to the gangu2019s ride through downtown Coatesville.”,episode:”2″},{name:”Martin’s Taphouse”,town:”Aston Township”,coordinates:”39.89042265129427, -75.43449503510138″,photo:””,description:”Martin’s stands in as the exterior of the Tip Top Lounge in the series, which we see in this episode stacked with motorcycles parked outside the front door.”,episode:”2″},{name:”Dixon’s Lounge”,town:”Sharon Hill”,coordinates:”39.897139107273794, -75.27191565278125″,photo:”BHMNCU4FFJGOBPUKYCZBB2XEOA”,description:”While the exterior of the Tip Top Lounge is in Aston, the interior bears a striking resemblance to Delcou2019s own Dixonu2019s Lounge. Here, Robbie and Cliff are stood up by an, ahem, u201Cbusiness partneru201D before walking out on an order of crabfries.”,episode:”2″},{name:”Willowbrook Shopping Center”,town:”Boothwyn”,coordinates:”39.83646391291799, -75.44319408140227″,photo:”ZU5QXUIDONETHIPPADUJYMAKCY”,description:”Maeve (Emilia Jones) takes Sam (Ben Lewis Doherty) to a fictional u201CVal-U Corneru201D store here with the intent of dropping him off for police to find before the plan goes awry. The store is located near the real Blue Cherry Ice Cream and Bakery, which is visible in the background.”,episode:”2″},{name:”Phoenixville Area High School”,town:”Phoenixville”,coordinates:”40.11868357112564, -75.51793551723154″,photo:””,description:”During his search for his daughter, Emily (Silvia Dionicio), Tom (Mark Ruffalo) finds her in the dugout of a baseball field that, in real life, is at Phoenixville Area High School. Its distinctive backstop is visible from a bird’s-eye view in the series.”,episode:”2″},{name:”Ralph’s Italian Restaurant”,town:”Philadelphia”,coordinates:”39.94006065749021, -75.15774535245488″,photo:”GMDZYMAHRNFGPBTYLRABBDJYHM”,description:”Dark Hearts leaders Jayson (Sam Keeley) and Perry (Jamie McShane) walk through the kitchen here to meet with local drug kingpin Freddy Frias (Elvis Nolasco), but in the show, it doesnu2019t appear to be serving the Italian food weu2019re used to in real life.”,episode:”3″},{name:”Mount Hope Cemetery”,town:”Aston Township”,coordinates:”39.871593701306836, -75.4390865914003″,photo:”4PCNSW4SPBAW7L2WFSJ2STJ3IM”,description:”Itu2019s a very quick shot, but itu2019s there just under four minutes into the episode. In the background, you can see the Commodore Barry Bridge, and graves on a hill in the cemetery in the foreground.”,episode:”3″},{name:”Sixpenny Creek Quarry”,town:”Union Township”,coordinates:”40.23700358370588, -75.78650582204335″,photo:”PLM34YOMIRCPPDVCGTFXM5FGME”,description:”Robbie (Tom Pelphrey) and Cliff (RaxFAl Castillo) finally get their meeting with Eryn (Margarita Levieva), their Dark Hearts insider, but it doesnu2019t go according to plan.”,episode:”3″},{name:”Llanerch Diner”,town:”Upper Darby”,coordinates:”39.96894828437008, -75.29301814827437″,photo:”6QXQDIMGKVDR5J64W4PVS3WP3E”,description:”Taskforce members Aleah (Thuso Mbedu) and Lizzie (Alison Oliver) head to Upper Darby’s famed Llanerch Diner for a tip on the drug house robberies they’re investigating, and get a break in the case.”,episode:”3″},{name:”Rosedon Plaza”,town:”Lansdowne”,coordinates:”39.94225704587108, -75.26528827286353″,photo:”SCB2N67GLFACZO33OOA7CLXQMM”,description:”In the background of one shot during the chase for Ray (Peter Patrikios), you can see the old Doc’s Deli (Deli Green). That puts Ray in the corner of the Rosedon Plaza parking lot as Lizzie (Alison Oliver) makes the arrest.”,episode:”3″},{name:”Coatesville Police Department”,town:”Coatesville”,coordinates:”39.982144078230384, -75.82033869646108″,photo:”XTADWTS6UNEDHOJGNIMWPBBOLE”,description:”Whether the interior is the same station isnu2019t clear, but an exterior shot sets this spot up as the place where the Task team interrogates Ray (Peter Patrikios) and Shelley (Mickey Sumner). Out front, a police cruiser reads u201CDelaware County Sheriff,u201D which is a little far from home.”,episode:”3″},{name:”The Ridley House”,town:”Holmes”,coordinates:”39.89753600427107, -75.31137880453917″,photo:”F2JJYIIZWFA3FFTHDPSXFI5M5A”,description:”Following the chase and interrogation, Lizzie (Alison Oliver) and Grasso (Fabien Frankel) head to this local bar to unwind. Grasso indicates it is a Barnabyu2019s, which, in real life, was true at one point u2013 until the location became the Ridley House in 2019.”,episode:”3″},{name:”Pennsylvania Turnpike on-ramp”,town:”King of Prussia”,coordinates:”40.08960425823238, -75.39689126886788″,photo:”BURLUGM6TRDX3CE46XSFYGJK7M”,description:”Itu2019s a quick shot as Tom (Mark Ruffalo) drives around at the beginning of the episode, but you can just make out the LasikPlus building on Mall Boulevard in the background. That puts this Pennsylvania Turnpike entrance in King of Prussia.”,episode:”4″},{name:”I-76 Exit 320″,town:”Malvern”,coordinates:”40.073716457225665, -75.52365668680957″,photo:””,description:”Tom (Mark Ruffalo) appears to take this exit as he is driving to meet his fellow taskforce members.”,episode:”4″},{name:”Marcus Hook Community Center”,town:”Marcus Hook”,coordinates:”39.81198192114949, -75.41200706776057″,photo:”B76EM6PKTFEB7KFWEUWGOWYDL4″,description:”As County Chief Dorsey (Raphael Sbarge) exits the building, you can see a door tagged with u201CDelaware County Sheriffu2019s Office.u201D But the green awning above him is a dead giveaway u2014 thatu2019s the Marcus Hook Community Center.”,episode:”4″},{name:”Rockdale Industrial Center”,town:”Aston Township “,coordinates:”39.885281970146785, -75.44479191780039″,photo:””,description:”It’s disguised as a trucking depot in the series, but this is where Robbie (Tom Pelphrey) and Cliff (RaxFAl Castillo) travel with Sam (Ben Lewis Doherty) to arrange transportation for their escape into Canada before being confronted by a Good Samaritan. “,episode:”4″},{name:”Upland Diner”,town:”Chester”,coordinates:”39.85816357241053, -75.37189095611281″,photo:”PVJMMBSI2ZBGJNQO46VYY5P6GQ”,description:”Upland Dineru2019s parking lot serves as Robbieu2019s (Tom Pelphrey) holding area during this episodeu2019s drug deal. Unfortunately, we only get an exterior shot of the building, but the restaurantu2019s vintage-style sign is proudly on display. Great pancakes, for the record.”,episode:”4″},{name:”Ridley Creek State Park entrance”,town:”Newtown Square”,coordinates:”39.95853496065017, -75.43948479664033″,photo:”KOSWCMRRHRAB7MLGNLQIF535UM”,description:”Cliff (RaxFAl Castillo) can be seen turning onto North Sandy Flash Drive from Gradyville Road as he heads to the drug deal meeting spot. If you look closely, you can just barely make out a sign for Ridley Creek State Park.”,episode:”4″},{name:”Beaver Creek”,town:”Wilmington, Del.”,coordinates:”39.839261612846315, -75.57139152554225″,photo:””,description:”It’s tough to spot, but the dam that Cliff (RaxFAl Castillo) parks his car next to during this episode’s failed drug deal u2014 or, more accurately, the Dark Hearts’ setup u2014 appears to be in Beaver Creek on the Delaware-Pennsylvania border.”,episode:”4″},{name:”City Clock Apartments”,town:”Coatesville”,coordinates:”39.98382540387415, -75.8211284189516″,photo:”3BYXFXCYUFFRZBUSN5UAPYVYOA”,description:”Another brief shot, but the clock face on the tower of the City Clock Apartments is prominently featured. The building formerly was the National Bank of Coatesville, and has been on the National Register of Historic Places since 1977.”,episode:”4″},{name:”Coatesville-Downingtown Bypass”,town:”Downingtown”,coordinates:”40.01895444780408, -75.70181027552258″,photo:””,description:”FBI Boss Kathleen McGinty (Martha Plimpton) and the rest of the task force swerve across traffic here while looking for Tom (Mark Ruffalo). In the background, you can just make out the sign for Pacer Pool Services & Supplies.”,episode:”5″},{name:”Marsh Creek State Park”,town:”Downingtown”,coordinates:”40.06782560219195, -75.72000193749815″,photo:”NT5JGVMLZFDJTGHC6M7BZFI7Y4″,description:”After surviving his encounter with Robbie (Tom Pelphrey), Tom (Mark Ruffalo) emerges from the woods to see a beautiful summer scene of families enjoying the lake at Marsh Creek State Park.”,episode:”5″},{name:”I-95 Pennsylvania Welcome Center”,town:”Boothwyn”,coordinates:”39.82418322018552, -75.43745107822149″,photo:”5HPTTXFG3ZA2HGAW54OXM4D5ZY”,description:”FBI boss Kathleen McGinty (Martha Plimpton) stuffs her face with fast food at the center’s picnic tables as the task crew looks for their leader. As McGinty explains, she is u201Can emotional eater.u201D”,episode:”5″},{name:”Woy Bridge”,town:”Everett”,coordinates:”40.0150517796881, -78.304498566625″,photo:””,description:”In what is likely the farthest-flung filming location u2013 at least in relation to the rest of the local spots u2013 we get some shots of Everettu2019s Woy Bridge in Bedford County as the taskforce closes in on Robbie (Tom Pelphrey).”,episode:”5″},{name:”Our Lady of Peace Parish”,town:”Milmont Park”,coordinates:”39.88193514095659, -75.33589782814482″,photo:”HGPPGXLRFZFUFE5WBNNXP3DXFM”,description:”Though disguised well as a juvenile detention facility in the show, this little Delco parish provides at least the exterior shots for where Tom (Mark Ruffalo) meets Sam (Ben Lewis Doherty) for the first time.”,episode:”6″},{name:”High Bridge”,town:”Coatesville”,coordinates:”39.98390784773821, -75.82749681114403″,photo:””,description:”This instantly recognizable Coatesville landmark serves as the location for where County Chief Dorsey (Raphael Sbarge) appears to seal Grasso’s (Fabien Frankel) fate with the Dark Hearts.”,episode:”7″},{name:”Delaware County Courthouse and Government Center”,town:”Media”,coordinates:”39.92029464476607, -75.39155431097433″,photo:”NWW6JA6A4FBAJHW7ZIXSIPZ2YA”,description:”Here, Tom (Mark Ruffalo) gives a touching family statement at a court hearing for his son, Ethan (Andrew Russel), in what is the emotional climax of the series. As The Inquirer reported last year, the production took over Courtroom 15 for filming.”,episode:”7″}];var Z=63710088e-1,ai={centimeters:Z*100,centimetres:Z*100,degrees:360/(2*Math.PI),feet:Z*3.28084,inches:Z*39.37,kilometers:Z/1e3,kilometres:Z/1e3,meters:Z,metres:Z,miles:Z/1609.344,millimeters:Z*1e3,millimetres:Z*1e3,nauticalmiles:Z/1852,radians:1,yards:Z*1.0936};function xn(e,t,r={}){let n={type:”Feature”};return(r.id===0||r.id)&&(n.id=r.id),r.bbox&&(n.bbox=r.bbox),n.properties=t||{},n.geometry=e,n}function jt(e,t,r={}){return xn({type:”MultiPoint”,coordinates:e},t,r)}function Ze(e,t,r){if(e!==null)for(var n,i,o,s,a,d,f,g=0,l=0,v,x=e.type,F=x===”FeatureCollection”,P=x===”Feature”,V=F?e.features.length:1,O=0;O<V;O++){f=F?e.features[O].geometry:P?e.geometry:e,v=f?f.type==="GeometryCollection":!1,a=v?f.geometries.length:1;for(var K=0;K<a;K++){var C=0,$=0;if(s=v?f.geometries[K]:f,s!==null){d=s.coordinates;var R=s.type;switch(g=r&&(R==="Polygon"||R==="MultiPolygon")?1:0,R){case null:break;case"Point":if(t(d,l,O,C,$)===!1)return!1;l++,C++;break;case"LineString":case"MultiPoint":for(n=0;n<d.length;n++){if(t(d[n],l,O,C,$)===!1)return!1;l++,R==="MultiPoint"&&C++}R==="LineString"&&C++;break;case"Polygon":case"MultiLineString":for(n=0;n<d.length;n++){for(i=0;i<d[n].length-g;i++){if(t(d[n][i],l,O,C,$)===!1)return!1;l++}R==="MultiLineString"&&C++,R==="Polygon"&&$++}R==="Polygon"&&C++;break;case"MultiPolygon":for(n=0;n<d.length;n++){for($=0,i=0;i<d[n].length;i++){for(o=0;o<d[n][i].length-g;o++){if(t(d[n][i][o],l,O,C,$)===!1)return!1;l++}$++}C++}break;case"GeometryCollection":for(n=0;n{r[0]>n[0]&&(r[0]=n[0]),r[1]>n[1]&&(r[1]=n[1]),r[2]<n[0]&&(r[2]=n[0]),r[3]{pe(“https://interactives.inquirer.com/storage/dependencies/maplibre/5.3.0/maplibre-gl.js”,()=>{let e=new Bt;be=window.maplibregl,be.addProtocol(“pmtiles”,e.tile);let t=”https://interactives.inquirer.com/melish/1.2″,r=`${t}/us-latest.pmtiles`,n=new Le(r);e.add(n),n.getHeader().then(async()=>{let o=await(await fetch(`${t}/styles/neutral.json`)).json();ee=new be.Map({container:”map”,zoom:13,center:[-75.165222,39.952583],cooperativeGestures:!0,attributionControl:!1,padding,style:{…o,sources:{openmaptiles:{type:”vector”,url:`pmtiles://${r}`}}}}),ee.scrollZoom.disable(),ee.touchPitch.disable(),ee.addControl(new be.NavigationControl({showCompass:!1,showZoom:!0,visualizePitch:!1}),”bottom-right”),ee.on(“load”,()=>{Cn(),Ee!==”all”?Ae=we.filter(s=>parseInt(s.episode)parseFloat(d)).reverse(),s.id=ze(s.name),s.photo&&(s.imageSrc=`https://interactives.inquirer.com/secondbank/arc/${s.photo}/650.webp`);let a=xe(“js-map-stub”);Te(a,s),a.addEventListener(“click”,()=>{Yt(a)}),a.addEventListener(“mouseover”,()=>{Yt(a)}),a.addEventListener(“mouseout”,()=>{Xt()}),new be.Marker({element:a}).setLngLat(s.coordinates).addTo(ee)}document.querySelector(“.js-map”).classList.add(“is-loaded”),Kt=!0,Me!=””&&(er(Me),_t(Me))})})})},Yt=e=>{Xt(),e.classList.add(“is-highlight”)},Xt=()=>{document.querySelectorAll(“.js-map-location”).forEach(e=>{e.classList.remove(“is-highlight”)})},Cn=()=>{Ee=document.querySelector(“.js-steps”).dataset.episodeForPage},Qt=()=>{let e=window.innerWidth>960;padding={top:50,bottom:e?50:window.innerHeight/2,left:e?window.innerWidth/2+50:50,right:50}},Ln=()=>{window.addEventListener(“resize”,()=>{Qt()})},_t=e=>{if(Me=null,e==null){let t=we.filter(r=>r.episode==Ee);ee.fitBounds(Vt(t),{animate:!0})}else if(e.step==”all”)ee.fitBounds(Vt(Ae),{animate:!0});else{let t=we.filter(r=>ze(r.name)==e.step);t.length>0&&ee.flyTo({center:t[0].coordinates,padding,zoom:13,animate:!0,duration:1e3})}},er=e=>{document.querySelectorAll(“.js-map-location”).forEach(t=>{t.classList.remove(“is-current”)}),e&&e.step!==”all”&&document.querySelector(`.js-map-location[data-id=”${e.step}”]`).classList.add(“is-current”)},Vt=e=>{let t=jt(e.map(n=>n.coordinates));return Jt(t)},ke={init:()=>{Tn(),Qt(),Ln()},update:e=>{Kt?(_t(e),er(e)):Me=e}};var Je=yr(tr());var Pn=async()=>{let t=await(await fetch(“https://interactives.inquirer.com/pepper/2025-task-locations/data.json”)).json();t=t.nav,console.log(t);let r=(0,Je.default)();t=t.filter(i=>r.isAfter((0,Je.default)(`${i.date} 22:00`))),t=t.filter(i=>i.link);let n=document.querySelector(“.js-nav-links”);for(let i of t){i.text=`Episode ${i.episode}`;let o=xe(“js-nav-link-stub”);Te(o,i),n.appendChild(o)}},rr={init:()=>{Pn()}};var De,An=(e,t)=>{De=De||window.PMNdataLayer,De?De.push({event:”misc_event”,eventAction:e,eventLabel:t}):window.location.hostname.includes(“localhost”)?console.log(“Analytics event:”,e,t,”(not actually being sent due to localhost)”):console.log(“Failed to push analytics event”,e,t)},nr={event:(e,t)=>{An(e,t)}};var ir=1,Ye=class{constructor(t){this.el=t,this.contentPosition=”default”,this.possibleSteps=new Array,this.currentStep=null,this.offset=window.innerHeight*.5,this.instanceOfSteps=ir,this.hasMap=!!t.dataset.map,ir++,this.setOffset(),this.setPossibleSteps(),this.updateContent(),this.bindings()}setPossibleSteps(){this.el.querySelectorAll(“.js-steps-step”).forEach(t=>{t.dataset.step&&this.possibleSteps.push(t.dataset.step)})}bindings(){window.addEventListener(“scroll”,()=>{this.updateContent()}),window.addEventListener(“resize”,()=>{this.updateContent(),this.setOffset()})}setOffset(){window.innerWidth>960?this.offset=window.innerHeight*.5:this.offset=window.innerHeight*.8}updateContent(){this.updateCurrentStep()}updateCurrentStep(){let t,r;if(this.el.querySelectorAll(“.js-steps-step”).forEach((i,o)=>{i.getBoundingClientRect().top{let a=”is-“+o,d=”is-“+s;this.possibleSteps.indexOf(o){document.querySelectorAll(“.js-steps”).forEach(e=>{new Ye(e)})}};var En=()=>{},sr={init:()=>{En()}};var de,Ve,Ke=!0,kn=()=>{de=document.querySelectorAll(“.js-video-autoplay”)},Dn=()=>{window.addEventListener(“resize”,()=>{ar()}),window.addEventListener(“scroll”,()=>{ar()}),de.forEach(e=>{e.addEventListener(“volumechange”,t=>{e.muted!==Ke&&!dt()&&(Ke=e.muted,$n())})})},ar=()=>{let e;de.forEach((t,r)=>{let n=t.getBoundingClientRect(),i=n.height/2;n.y-i&&(e=t)}),e!==Ve&&(Ve=e,de.forEach(t=>{t.pause()}),e?e.play():Ve=null)},$n=()=>{de.forEach(e=>{e.muted=Ke})},lr={init:()=>{kn(),de&&Dn()}};var ur={init:()=>{st.init?.(),mt.init?.(),bt.init?.(),Mt.init?.(),Tt.init?.(),ke.init?.(),rr.init?.(),or.init?.(),sr.init?.(),lr.init?.(),ue.init?.()}};var zn=()=>{},cr={init:()=>{zn()}};var Bn=document.querySelector(“.js-inno”),hr=()=>{ur.init(),cr.init()};Bn?hr():new MutationObserver((t,r)=>{if(document.querySelector(“.js-inno”)){r.disconnect(),hr();return}}).observe(document,{attributes:!0,childList:!0,subtree:!0});})();
Golfers can test their skills on a putting green at the new PGA Tour Superstore.
Golfers don’t need to hop on a plane to tee off on the sunlit fairway of California’s Titleist Performance Institute. They just have to venture to the 40,000-square-foot PGA Tour Superstore at 2232 Route 70, where the shop will open this Saturday at 9 a.m.
A major highlight is the golf simulation bay, where customers can cycle through a list of world-famous golf courses projected onto a screen and receive analytics on their swings, The Inquirer’s Henry Savage reports.
The sprawling store also sells gear, offers club fittings, and will have $30,000 in giveaways during its grand opening.
Cherry Hill police are warning residents about a calling and texting scam in which someone is claiming to be from the police department. Residents should not engage with the scammer and are encouraged to report incidents to the non-emergency line.
Alocal bakery helped a Cherry Hilldoodle named Zeus celebrate a “bark mitzvah” last month by creating a bone-shaped cake dotted with bite-sized Stars of David. Zeus’ cake and the bakery behind it are part of a growing trend of upscale pet bakeries catering to pooches.
Longtime Cherry Hill contractor Craig Taylor tapped his friends and family to help grow a grassroots event to bring people together against hate. Known as “Kiss Hate Goodbye,” the event is slated to take place in Berlin on Nov. 20 and will include dinner, dancing, and throwback tunes. (6abc)
The township is hosting a free rabies clinic on Saturday from noon to 2 p.m. at Challenge Grove Park. Pet owners can bring their licensed cat or dog to get vaccinated. And on Sunday, there’s a free drive-up shredding and recycling event where residents can drop off up to four boxes of papers for shredding, as well as single-stream recyclables, tires, car batteries, rechargeable batteries, and CFL light bulbs. Read more about the event here.
Lamberti’s Tutti Toscani is celebrating its 40th anniversary through the end of November with a menu that includes items from the past four decades. The Brace Road BYOB’s anniversary menu includes clams casino, manicotti, chicken cacciatore, and veal casalinga.
The recently opened Barclay Pies on Marlton Pike is serving up pizzas that meet certain dietary restrictions, like those with Celiac disease, something the families ofowners TJ Hunton and Daniel Romero face. Not only can pizzas be made gluten-free, but so can the salads, chicken fingers, and wings. (Patch)
🎳 Things to Do
🔍 Killer Night Out: The library’s 21-and-over murder mystery event will transport participants back to the Roaring ‘20s where they must solve a murder. ⏰ Friday, Oct. 24, 6-9 p.m. 💵 $30 📍 Cherry Hill Library
🌽 Cherry Hill Harvest Fest: This fall-themed festival includes food vendors, a trunk-or-treat, games, and music. Costumes are encouraged. ⏰ Saturday, Oct. 25, 3-6 p.m. 💵 Pay as you go 📍 The Church of the Good Shepherd
🎃 Pumpkin Picking Hayrides: It’s your last chance to take a hayride and go pumpkin picking at Springdale Farms for the season. ⏰ Saturday, Oct. 25-Sunday, Oct. 26, 10 a.m.-4 p.m. 💵 $7.50 for hayrides, pumpkins are priced by the pound 📍 Springdale Farms
💗 Party in Pink: This breast cancer awareness event includes a discussion with a survivor, a 90-minute session with dancing and music, and access to other health and wellness resources. ⏰ Sunday, Oct. 26, 10 a.m.-12:30 p.m. 💵 $20-$25 📍 Katz JCC
🛼 Mickey & Minnie Halloween Skatetacular: The beloved duo will be visiting for this skate party that includes trick-or-treating, a costume contest, face painting, and ICEEs. ⏰ Sunday, Oct. 26, 12:30-3:30 p.m. and 4:30-7:30 p.m. 💵 $14 admission plus $6 skate rental 📍 Hot Wheelz
🎃 No-Carve Pumpkin Decorating: Kids in sixth through 12th grade can create a one-of-a-kind artificial mini pumpkin. ⏰ Wednesday, Oct. 29, 7-8 p.m. 💵 Free 📍 Cherry Hill Library
The front of the home features white siding, red brick, and a white picket fence.
Built in 1957, this white-siding and red-brick home has four bedrooms, including a primary suite with its own bathroom, all located on the upper level. On the home’s main level, there’s a family room with original hardwood flooring, a dining room, and an eat-in kitchen. It has updated appliances, floral wallpaper, and a white tile backsplash with fruits interspersed throughout. The home also has a living room off its entryway, complete with a wood-burning fireplace and log storage. Outside, there’s a covered front porch offset by a white picket fence, while out back there’s a fenced yard with a storage shed. The home has a newly installed roof, as well. There’s an open house Sunday from 11 a.m. to 1 p.m.
By submitting your written, visual, and/or audio contributions, you agree to The Inquirer’s Terms of Use, including the grant of rights in Section 10.
This suburban content is produced with support from the Leslie Miller and Richard Worley Foundation and The Lenfest Institute for Journalism. Editorial content is created independently of the project donors. Gifts to support The Inquirer’s high-impact journalism can be made at inquirer.com/donate. A list of Lenfest Institute donors can be found at lenfestinstitute.org/supporters.
More than 30 years ago, Philadelphia was the battleground in a brutal mob war as a group of young mafia upstarts challenged the rule of the established La Cosa Nostra leadership.
Known as the Young Turks, that group consisted mostly of younger men who were the sons, brothers, and nephews of former crime family members who were dead or in prison, and was purportedly led by Joseph “Skinny Joey” Merlino and Michael “Mikey Chang” Ciancaglini. They believed that mob boss John Stanfa, a Sicilian immigrant who preferred to keep a low profile, was an outsider who was not fit to lead. Instead, their bloodlines and connections gave them the right to rule their hometown neighborhoods.
Now, a new docuseries from Netflix, Mob War: Philadelphia vs. The Mafia, examines that conflict, complete with interviews from the law enforcement agents and former mobsters who were there, vintage 1990s Philly TV news footage, and the perspective of a hitman-turned-informant who made headlines. The goal, said director Raïssa Botterman, is to show the human element behind the violence.
“They’ve committed crimes, but they’re still humans, and understanding who they were and having their versions of events” is important, she said. “Whether it’s fighting against crime or it’s committing crimes, [we’re] trying to get a more holistic picture of what’s going on.”
Notably missing from the series is Merlino, who Botterman said declined to participate. Merlino has long denied having been behind a faction of the city’s mob and has never been convicted of mob-related violence.
Likewise, Merlino declined through a representative to comment about Mob Wars.
Throughout the ’90s, mob violence regularly dominated Inquirer and Daily News headlines, and resulted in several high-profile deaths and criminal trials, and a new mob leader in the city.
By most accounts, the first strike in the brewing mob war happened in January 1992 with the killing of Felix “Tom Mix” Bocchino, a Stanfa loyalist, on the 1200 block of Mifflin Street. Bocchino, 73, was shot four times in his 1977 Buick, and authorities believed he was targeted by members of the Young Turks faction, according to an Inquirer report from the time.
Retaliation was swift. Two months later, gunmen attempted to assassinate Michael Ciancaglini at his home near 12th and McKean Streets — just steps south of where Bocchino was killed. In that incident, the Daily News reported, Ciancaglini was returning home from a basketball game when two men carrying shotguns began chasing him. He made it inside, and the gunmen fired shotgun blasts through the front door and window.
Ciancaglini was not injured, and neither were his wife and two children, who were inside the house. Law enforcement sources told the People Paper that Ciancaglini “had something to do with Bocchino’s death,” but Ciancaglini’s attorney maintained his client was in the dark about the attempt on his life.
“He don’t know why. He don’t know who. And he don’t know what,” attorney Joseph C. Santaguida told The Inquirer following the shooting.
In March 1993, almost exactly a year after the attempt on Michael Ciancaglini’s life, older brother Joseph Ciancaglini, 35, was shot at the Warfield Breakfast and Lunch Express in Grays Ferry. The attempted hit on Stanfa’s underboss was captured on FBI surveillance video.
Though he survived, Joseph Ciancaglini became permanently paralyzed.
On Aug. 5, 1993, the warfare arrived on the 600 block of Catharine Street with an afternoon shooting that injured Merlino and killed Michael Ciancaglini. The pair were walking down the block when two gunmen began firing, striking Merlino in the leg and buttocks, and Ciancaglini in the heart, reports from the time indicate. Ciancaglini died at Thomas Jefferson University Hospital, while Merlino was placed in stable condition at the Hospital of the University of Pennsylvania.
window.addEventListener(“message”,function(a){if(void 0!==a.data[“datawrapper-height”]){var e=document.querySelectorAll(“iframe”);for(var t in a.data[“datawrapper-height”])for(var r,i=0;r=e[i];i++)if(r.contentWindow===a.source){var d=a.data[“datawrapper-height”][t]+”px”;r.style.height=d}}});
The car used in the shooting, meanwhile, was found some 35 blocks away, burned to a crisp. It had been leased to Philip Colletti, a mob associate who later admitted his role in the crime.
Hundreds attended Ciancaglini’s viewing at the Carto Funeral Home at Broad and Jackson days later; some neighborhood residents were not surprised by his killing, The Inquirer reported.
“Why’d he get killed? The same reason the rest of these hoods in South Philly do,” said one South Philly hairdresser. “Most Italians are good, hard-working people, and these people give us a bad name.”
By the end of August 1993, the Young Turks struck back — this time with a botched assassination attempt on Stanfa himself that ended up wounding the mob boss’ son, Joseph, who was 23 and not involved with mafia activities.
That attempt took place during the morning rush hour as Stanfa and his son traveled from their home in Medford to their food importing business in South Philadelphia. As they drove toward the Vare Avenue off-ramp on the Schuylkill Expressway, gunmen ambushed them from a van that had been modified with makeshift gunports, allowing the assailants to fire from concealment.
The attackers, police later learned, had not cut eye holes in the van, and fired on the Stanfas wildly, missing their intended target. The younger Stanfa, however, was struck in the face, leaving a bullet lodged in his neck though he survived.
The van was found near 29th and Mifflin Streets as police attempted to reconstruct possible escape routes. It was littered with spent cartridges, and had “a number of punctures in it,” leading police to believe that a shooter lost control of his weapon, tearing bullet holes into the vehicle.
Stanfa’s vehicle, meanwhile, was heavily damaged, with at least 10 bullet holes running from the front hood to the right rear fender. A tire was shredded, and a window panel in the rear-passenger side — where Joseph had been sitting — was shattered. Stanfa, The Inquirer reported at the time, had his driver hide the car in the garage of the restaurant where Joseph Ciancaglini had been shot, requiring police to obtain a warrant to examine it.
“You’ve got to understand: This is an all-out mob war,” said Col. Justin J. Dintino, superintendent of the New Jersey State Police. ”They’re going to take their shot whenever the opportunity presents itself.”
In September 1993, the opportunity presented itself at the Melrose Diner, where Frank Baldino Sr., a reportedly low-level associate of the Young Turks, was shot to death in his car. His last meal was a $6.95 chopped steak dinner, the Daily News reported.
Gunmen approached Baldino’s vehicle, investigators said, and “pumped several bullets” through its closed window, striking him in the head and torso. The assailants fled west on Passyunk Avenue in a rainstorm, and Baldino died while en route to the hospital.
Baldino was not considered to be a major player in the local mob. His killing, friends and investigators said, was something of a shock — even former mobster Nicholas “Nicky Crow” Caramandi, who was in hiding at the time, denounced it.
“This guy was not a gangster,” Caramandi told The Inquirer. “He wouldn’t hurt anybody. He was not a threat. It should never have happened.”
Though mob violence cooled as 1993 wore on, it didn’t fully stop, and late one Friday in January 1994, police found John Veasey near Sixth and Sigel Streets, grievously injured.
He had three bullet wounds to his head, one to his chest, and seven stab wounds, having fought off his attackers in an assassination attempt in the apartment above a nearby meat store. Somehow Veasey, then 28, had survived, and was placed in critical but stable condition at Jefferson Hospital.
“He’s a tough kid,” one underworld source told The Inquirer. “He knows a lot, and what he knows can hurt a lot of people.”
Veasey, it turned out, had gone to the FBI days before and copped to the Ciancaglini and Baldino killings at the behest of his brother, William “Billy” Veasey, who had told him there was a contract out on John Veasey’s life.
His assailants, Veasey told police, were Stanfa loyalists Frank Martines and Vincent “Al Pajamas” Pagano, both of which later surrendered.
The pair, John Veasey said, had lured him to a mob-run “numbers house” under the guise of protecting him. But once inside, Martines pulled a gun and shot him in the head and chest, telling him, “Bye, John-John.” When that failed to kill Veasey, a battle ensued in which Veasey wrestled a knife away from Pagano, and used it to slash Martines in the eye.
“I have a real powerful neck, real, real big,” Veasey later said of his survival, according to a Daily News report. “I was not knocked out. It wasn’t sending any messages to the brain.”
Following the attack on Veasey, Stanfa and 23 associates were indicted on federal racketeering charges and imprisoned by March 1994. As the legal proceedings wore on, mob violence in the city trickled almost to a stop — with one notable exception.
On Oct. 5, 1995, just hours before Veasey was set to take the witness stand against Stanfa and his codefendants, his brother Billy was shot and killed on the 1700 block of Oregon Avenue.
Veasey was distraught, but his resolve to testify was hardened by the killing, law enforcement sources said. Five days later, he did just that.
Delivering his testimony in what The Inquirer called “South Philadelphia tough-guy jargon,” Veasey made the federal government’s case clear — in some cases, graphically so — for jurors. Calling himself a triggerman for Stanfa, he testified that the mob boss had given orders in 1993 to kill anyone who was aligned with Merlino and the Young Turks faction, and that a hit list with more than a dozen names had been circulated to mob members.
“A couple of [defense] lawyers tried to catch him up in semantics,” one federal source told The Inquirer of Veasey. “John doesn’t even know what semantics means.”
By November 1995, Stanfa and his associates were convicted on all counts, including murder, extortion, gambling, and kidnapping. Stanfa received five life sentences, and, at 84, remains in prison.
With that, the Young Turks had officially won the war. According to Inquirer and Daily News reports from the time, Ralph Natale had been installed as the head of the Philadelphia mob but focused his efforts on South Jersey, allegedly leaving Merlino and his cohorts to run South Philadelphia.
Following Natale’s arrest on a parole violation in 1998, Daily News and Inquirer reports from the time indicate, Merlino purportedly took over as acting mob boss, and later cut out Natale completely. Merlino himself was arrested on drug conspiracy charges in 1999, and Natale served as a government witness against him.
Ultimately, Merlino received a 14-year sentence after being convicted of racketeering. He was acquitted of drug trafficking and murder charges, the latter for which prosecutors initially considered pursuing the death penalty. With credit for two and a half years served, he was to spend nine more years in prison.
“It ain’t bad,” Merlino said of the verdict, according to an Inquirer report. “Nine’s better than a death penalty.”
“Mob Wars” is a three-part series on Netflix. Its release date is Wednesday, Oct. 22.
Hit man-turned-government informant John Veasey, whose testimony helped bring down mob boss John Stanfa and a dozen of his top associates in the 1990s, says he’s on the road to redemption.
The new Netflix docuseries Mob War: Philadelphia vs. The Mafia, now streaming, chronicles a violent 1990s power struggle in the local La Cosa Nostra through the eyes of investigators and former crime family members who were there.
Veasey, a South Philly native, was a central figure in the ’90s Philly mob, having admitted to participating in two high-profile murders. He went on to serve nearly 11 years in prison after becoming a government witness against Stanfa and other top mob associates in a federal racketeering trial, and was released in 2005. He has since denounced the mob life, and, in the Netflix series, calls joining the mafia the “worst decision” he ever made.
While he became a feared killer, Veasey was also something of a folk hero after Stanfa’s 1995 trial. The jury, according to Inquirer and Daily News reports from the time, was enamored with his frank and sometimes graphic testimony, which was a key component of federal prosecutors’ case against Stanfa and others.
Veasey agreed to become an FBI informant in January 1994 after his brother, William “Billy” Veasey, told him Stanfa had taken a contract out on his life, reports from the time indicate. In agreeing to work with federal authorities, Veasey admitted to being one of the shooters behind two then-recent mob killings: Michael “Mikey Chang” Ciancaglini and Frank Baldino Sr.
Ciancaglini was killed in August 1993 in a shooting that also wounded Joseph “Skinny Joey” Merlino. The pair were the purported leaders of the so-called “Young Turks” faction who opposed the rule of Stanfa, reports indicated. Merlino has long denied having been behind a faction of the city’s mob and has never been convicted of mob violence.
Ahead of that shooting, Veasey testified, Stanfa had given orders to “kill anybody aligned with Merlino” and circulated a list of about a dozen people who were to be killed. Veasey undertook the hit with fellow mob enforcer Philip Colletti in a white Ford Taurus that, shockingly, was leased in Colletti’s name.
Veasey also admitted to burning the vehicle, badly burning his hand in the process. Knowing he needed an explanation to have his injury treated, Veasey returned to his house and poured lighter fluid into a barbecue grill, and intentionally lit his injured hand on fire.
“I screamed and told the neighbors I had burned it trying to light the grill,” he told jurors during the Stanfa trial. The cover, he says in the Netflix docuseries, wasn’t a great one — the grill he used was electric, arousing the suspicion of police.
Likewise, Veasey was the triggerman in the killing of Frank Baldino Sr., a then-suspected low-level mob associate who was killed outside the Melrose Diner in September 1993.
Baldino was shot multiple times in his car in the diner’s parking lot, and died en route to Thomas Jefferson University Hospital. Veasey later tipped off authorities to the location of the murder weapons, which divers found in a pond at FDR Park in April 1994, reports from the time indicate.
The attempted murder of John Veasey
In January 1994, police found Veasey grievously injured near Sixth and Sigel Streets, having somehow survived a brutal assassination attempt in which he was shot four times and stabbed seven. The attempted murder, he later testified, was undertaken by Stanfa associates Frank Martines and Vincent “Al Pajamas” Pagano in an apartment above a meat store near where Veasey was found.
“One bullet fragmented in the back of my head. One went in the back and out through my forehead,” Veasey later said of the shooting. ”One hit the back of my head and bounced into my neck. And one is still in my chest, in my rib cage.”
His assailants, Veasey said, had targeted him because they believed he was working with the FBI — which he had been for a few days by the time the attack happened.
The shots failed to kill Veasey, who in the struggle wrestled a knife away from Pagano and used it to stab Martines near the eye. The ordeal lasted about 18 minutes, according to a Daily News report, and ended with Martines and Pagano letting Veasey go in exchange for their lives.
After he escaped, Veasey attempted to stop a car for help. But because of the way he looked, he said, no one would help him.
Eventually, police arrived but believed Veasey would die.
“I could hear them talking, saying I was DOA,” Veasey said. “I’m saying, ‘I’m alive, I’m alive. Everyone is giving up on me tonight.’”
Veasey later said he left the mob that night, putting his time in the mafia at just over five months, the Daily News reported. He had been recruited in August 1993, days before the Ciancaglini murder, after landing a job at a construction company owned by Stanfa’s brother-in-law.
“I wouldn’t recommend this life to an enemy,” he later said of the mob.
Hours before Veasey was set to take the stand for Stanfa’s trial in October 1995, his brother, Billy, was shot and killed on the 1700 block of Oregon Avenue. The killing, authorities speculated, could have been ordered by Stanfa as a way to silence Veasey, or by suspected Young Turks leader Merlino as revenge for the Ciancaglini and Baldino murders.
Ultimately, it only delayed Veasey’s testimony by five days.
From the stand, Veasey referred to himself as a triggerman and divulged his involvement with the murders of Ciancaglini and Baldino.
Veasey’s testimony at trial
In total, Veasey testified for about two and a half days, which he wrapped up with two pieces of information: That he refused to kill kids, and he did not like gambling. He also mocked Sergio Battaglia, a would-be Stanfa hit man who, despite going on a number of hits, never actually killed anyone, according to an Inquirer report.
Battaglia “went on a hundred hits and didn’t shoot nobody,” Veasey said.
He quickly became well-liked by the jury, who seemed to hang on his every word, The Inquirer reported. Among his more graphic accounts from the witness stand was the “drilling” of Joseph “Joe Fudge” DeSimone, a mob associate who had wanted to kill Veasey, to which Veasey took less-than-kindly.
Veasey testified that he had warned Stanfa of a coming altercation with DeSimone, and at one point persuaded another mob associate to bring DeSimone over to Veasey’s house to settle their dispute. Veasey was on house arrest at the time.
DeSimone arrived, kicking off a violent encounter with an electric drill.
“I smacked him in the face with the drill. I stuck the drill in his chest and in his legs. I stuck it in his head, and from the rotation of the drill, clumps of hair was going out,” Veasey testified. “Then I hit him in the knee with a baseball bat. I chambered the gun … gave it to him and asked, ‘Do you still want to kill me?’”
Veasey said that DeSimone declined.
The testimony was not only well received by jurors, but it was considered a success by prosecutors. Though violent, Veasey appeared relatable to the jury and seemed to have a secret weapon against the defense.
Former mob hit man John Veasey’s biography details his work for one of the city’s mob organizations, the hits he carried out, the attempt on his life, and more.
The reformed hit man
Stanfa was ultimately found guilty and sentenced to five consecutive life terms. Veasey, meanwhile, spent almost 11 years in prison, and was released in 2005. By 2012, he was back in the news, this time for a detailed account of his story in The Hit Man: A True Story of Murder, Redemption and the Melrose Diner, a book by former Inquirer reporter Ralph Cipriano.
By then, Veasey was working as a car salesman in the Midwest, and claimed to have turned over a new leaf.
“I never respected the Mafia or what it stood for,” Veasey said in an interview with The Inquirer in 2012. “My only regret was being dumb enough to join … I always said they either rat or kill each other.”
Convicted former Philadelphia mob boss John Stanfa made headlines as part of a bloody mafia power struggle in the 1990s, which is now being chronicled in the newly released Netflix docuseries,Mob War: Philadelphia vs. The Mafia.
He was missing one thing that many of his contemporaries had — at least in the papers.
A nickname.
Don of the Philadelphia La Cosa Nostra from 1990 to 1995, when he was convicted on racketeering, murder, and conspiracy charges that netted him five life sentences, Stanfa went without an official street name during his time at the top. In September 1993, the Daily News set out to change that with a “Name the Don” contest encouraging readers to send in their best handles for Stanfa.
“Philadelphia mobsters have had nicknames since there’s been a Philadelphia mob,” the People Paper wrote in a contest announcement. “But poor John Stanfa, the acknowledged leader of the local Cosa Nostra, has suffered long enough. Our godfather needs a nickname — and fast.”
A classic Daily News stunt, yes — but its timing was somewhat, well, insensitive. Just days before the contest was announced, Stanfa was the target in a brazen morning rush-hour shooting on the Schuylkill Expressway in Grays Ferry. His then-23-year-old son, Joseph, was seriously injured with a gunshot wound to the face.
That shooting, the Daily News reported, signaled an “all-out war” for control of the local mafia, escalating the then-ongoing feud between Stanfa’s crew and a group of young upstarts referred to by the press as the “Young Turks,” purportedly led by Joseph “Skinny Joey” Merlino. The month before, Merlino was injured in a shooting on the 600 block of Catharine Street, and his friend Michael “Mikey Chang” Ciancaglini was killed.
Stanfa was uninjured in the expressway shooting. His son survived and was never implicated in Stanfa’s underworld dealings.
Still, some of the Daily News’ audience was game to participate in the contest, though the total number of submissions was not reported. Some of the potential monikers were directly inspired by the attempt on his life, including “Nine Lives,” “The Dodger,” and “Johnny Wheels.”
Others poked fun at his appearance, like “Sourpuss,” “Stoneface,” and “Big Baldy.” And some — such as “Johnny Meatballs,” “The Grocer,” and “Sticky Buns” — focused on Stanfa’s work in the food business, thanks to his involvement in a South Philly-based Italian food importer.
The contest, however, was not without its detractors. It was, after all, a controversial move — this was a mob boss being roasted, and one who was nearly killed only days before the Daily News began soliciting jokes at his expense. And it didn’t help that the paper went directly to some law enforcement officials to ask for their suggestions.
“I don’t think I should be in the business of characterizing Mr. Stanfa,” said Joel Friedman, then-head of the U.S. Organized Crime Strike Force in Philly. ”I am in the business of investigating criminal activity, and prosecuting it.”
Regular folks were upset, too — largely over the perception that the contest mocked Italian Americans at large. One reader, retired high school principal Richard Capozzola, took particular umbrage, postulating that the Daily News “wouldn’t have done it if [Stanfa] weren’t Italian.”
“How much more insulting can your paper be to the Italian-American community of Philadelphia?” said Arthur Gajarsa, of the National Italian-American Foundation. “Would you dare run a contest involving any other ethnic criminal element?”
The outcry became so significant that after almost two weeks, the Daily News’ editor at the time, Zachary Stalberg, addressed it in a note to readers. The message: Relax.
“I think people understand that nothing in our handling of the contest mocked those of Italian descent,” Stalberg wrote. “And I think people know it’s OK to be intrigued by the mob, even if you hate their business.”
By mid-September, the Daily News had a winner with John “Tightlips” Stanfa. That entry came from South Philadelphia resident Brian Baratta, who won, of course, a videotape box set of The Godfather I, II, and III for his effort.
“‘Tightlips’ certainly is descriptive of this strong and silent guy,” the Daily News wrote of the winning entry. “John Stanfa doesn’t talk to the cops, the feds, or the press.”
With that, the contest was over — but it wasn’t so quickly forgotten, and not just in Philadelphia.
In 1995, ahead of Stanfa’s trial, the Daily News sent reporter Kitty Caparella to Italy to investigate the mob boss’ family tree. While in Caccamo, on Sicily’s Tyrrhenian coast, Caparella was approached by a police officer, editor Stalberg wrote in a note that year.
The officer, Stalberg said, pulled out the 1993 Daily News issue advertising the “Name the Don” contest.
Democratic veterans in Congress, including two from Pennsylvania, are taking personally comments U.S. Rep. Scott Perry made to a conservative radio station asserting that Democrats in Congress “hate the military” — and the lawmakers are hitting back.
“That’s only a credential that they get when they want to run for office,” Perry said, of Democrats, during an interview last week on The Chris Stigall Show.
”They join the military, they serve a little bit, they get the credential and then they run for office and wear the uniform and say, ‘Look at me — I support America.’ But let’s face it, all their votes say they don’t support America.”
Perry made the commentslast week, but a report this week from the New York Times prompted backlash from Perry’s colleagues on the other side of the aisle, including U.S. Rep. Chris Deluzio, a Democrat who represents the Pittsburgh suburbs and served six years in the Navy.
On Wednesday, members of the Democratic Veterans Caucus, cochaired by Deluzio and U.S. Rep. Pat Ryan (D., N.Y.) called the remarks “insulting to their service,” in a statement shared with The Inquirer.
“It’s disgusting to see a sitting member of Congress attack the integrity and honor of veterans and servicemembers due to their political party,” the veterans wrote. “He should immediately apologize to his constituents for insulting their service and questioning their patriotism.”
The statement blasted Perry as an “oathbreaker,” noting he was part of an effort to throw out Pennsylvania’s electoral votes after President Donald Trump’s loss in the 2020 election. The lawmakers also criticized Perry’s unwillingness to hold in-person town halls, something very few Republican lawmakers have been doing since Trump’s first administration.
“If he had a spine he’d stand in front of the Democratic veterans he represents and say this garbage to their faces, but Scott Perry doesn’t have the guts,” his House colleagues wrote.
Perry, in a statement, pushed back clarifying his remarks were not about “all Democrats,” but “Leftists in Congress who served in the military and use that as a shield to insulate themselves from accountability for their radial and corrosive ideologies.”
“The leftists now stomping their feet about my response are the same leftists who caused our government to shut down,” Perry said in his response.
Still, the comments from Perry about his colleagues and their jilted response illustrate the ways in which political insults have accelerated. Lawmakers who have served in the military had long been one of the few bipartisan groups bonded through service. A group of Democratic and Republican former service members serving in Congress called For Country Caucus still meets for early morning breakfasts on the Hill.
Perry, a House member since 2013, served in the U.S. Army and has been a staunch conservative voice, unabashed with his criticism of Democrats. Perry retired from the Army National Guard in 2019 with the rank of brigadier general after 39 years of service.
Investors, meanwhile, are betting that private college loans will balloon under the Trump rules. But less than half of families who apply qualify for mainstream lenders’ private student loans.
So a group of executives who used to work at Sallie Mae, which is based in Wilmington, have organized a start-up company, GradBridge, to make loans at higher interest rates to students who max out on scholarships and government loans but still hope to finish college or graduate school.
On Wednesday, GradBridge said it had raised $20 million to speed its growth before the new loan limits begin next summer.
The money was raised from private investors led by Acorn Investment Partners, which is managed by Los Angeles-based Oaktree Capital Management. Oaktree’s investors include the Pennsylvania public schoolteachers’ (PSERS) and state workers’ (SERS) pension funds.
GradBridge will be a “second-look” lender for families turned down by mainstream private college lenders, said Jen O’Donald, GradBridge founder and CEO.
O’Donald, who lives in Chester County, is a former head of products for Sallie Mae and the mother of two college students. Her top lieutenants include chief financial officer Brian Carp and chief operations officer Lisa Kaplan, also Sallie Mae veterans. Advisers include Sallie Mae Bank’s former president, Paul Thome, and former chief credit officer Dan Hill.
After Trump’s election last year, O’Donald said, she and former colleagues reviewed the “massive disruption” the Trump platform promised in college financing and looked for business opportunities.
Even if only some of the changes were enacted, “only about 35% to 45% of private college loans get approved,” and many students’ families are not able to get a private student loan after they have exhausted federal grant and loan programs, she said in an interview.
With the lifetime limits on student loans enacted by the Trump administration, O’Donald sees an “overwhelming shift” away from government programs to private loans over the next few years, as students grandfathered under earlier programs graduate and new students borrow up to the new program limits.
GradBridge expects to get referrals from colleges and mainstream lenders of borrowers who don’t fit the high-end ability-to-pay profile.
While mainstream lenders could charge an annual interest rate from the mid-single digits to as much as 18% a year, GradBridge might charge less-bankworthy borrowers an additional 3% or 4% on top of the mainstream rate, driving monthly payment up by $30 or $40 for every $10,000 owed.
O’Donald said GradBridge offers an alternative to “credit cards, personal loans, parents’ 401(k) accounts, home equity loans” and other costly alternatives families use to help their children stay in college.
Federal student loans are made to applicants who apply to government-approved, mostly four-year colleges, without the kind of traditional loan underwriting used to evaluate if borrowers are likely to repay home, auto, or small-business loans.
Not surprisingly, those student loans suffer a high loss rate, the justification lenders used to get the government to agree to prevent federal student loan debtors from having their loans discharged in bankruptcy.
But private lenders like Sallie Mae and GradBridge consider family income and other factors that affect whether the loan will likely be paid, O’Donald said.
Most private college loans require adult cosigners. Because they rely mostly on family income to ensure they get paid back, lenderstypically don’t worry about what majors or graduate degrees a borrower pursues, she added.
“GradBridge’s approach addresses a real market gap” for students who “fall just outside of traditional credit underwriting models,” Yadin Rozov, Acorn’s chief investment officer, said in a statement.
GradBridge employs around half a dozen people. It plans to increase to around 30 by 2027.
O’Donald said the Wilmington area is a national center for student lending and a good place to hire for a loan start-up.
Besides Sallie Mae, it is home to College Avenue, another student lender founded by Sallie Mae veterans; Navient, a student-loan servicing company; and other consumer payment companies.
“The first big impact will be next summer,“ she said. ”It will take a few years before the full impact will be seen, but schools are starting to be concerned about how they will keep kids enrolled.”