NFL · Empirical Bayes

True-Talent Leaderboards

A raw single-season rate is a noisy guess at a player’s real ability, and the noise is worst for the smallest samples — so a naïve leaderboard is topped by whoever got lucky in the fewest tries. This one shrinks every rate toward its position-group prior by how much the sample can be trusted, and shows a 90% credible interval instead of a point. Toggle raw vs. shrunk to watch the flukes fall back to the pack.

Target success rate · 2017

Share of targets with positive EPA, shrunk within position.

Beats raw by
21.9%
lower out-of-sample error
RMSE raw → shrunk
11.7% → 9.1%
odd vs. even weeks
Split-half reliability
0.19
how repeatable the raw stat is
Stabilizes at
150 TE · 159 WR
targets to trust the number
shrunkrawthe shrink90% CI
40%45%50%55%60%TE avgWR avg1Hunter HenryLAC · 6255.2%2Rob GronkowskiNE · 10654.3%3Michael ThomasNO · 14953.4%4Zach ErtzPHI · 11152.9%5Danny AmendolaNE · 8652.9%6Rhett EllisonNYG · 3252.8%7Tyreek HillKC · 10552.1%8Keenan AllenLAC · 15952.0%9Antonio BrownPIT · 16552.0%10Cooper KuppLA · 9452.0%11Trey BurtonPHI · 3251.7%12Jason WittenDAL · 8751.5%13JuJu Smith-Schust…PIT · 7951.5%14Jack DoyleIND · 10951.4%15Albert WilsonKC · 6251.4%16Benjamin WatsonBAL · 8051.3%17Levine ToiloloATL · 1451.3%18Adam ShaheenCHI · 1451.3%19Mohamed SanuATL · 9651.2%20Allen HurnsJAX · 5751.2%21Coby FleenerNO · 3051.1%22Travis KelceKC · 12251.1%23Cameron BrateTB · 7751.1%24Davante AdamsGB · 11851.1%25Jared CookLV · 8650.9%26Jordan ReedWAS · 3550.8%27Sterling ShepardNYG · 8450.8%28O.J. HowardTB · 3950.8%29Chris Godwin Jr.TB · 5550.7%30Seth RobertsLV · 6550.7%31David MorganMIN · 1250.7%32C.J. UzomahCIN · 1550.3%33Nick VannettSEA · 1550.3%34Justin HardyATL · 2950.3%35Cody LatimerDEN · 3250.0%36Chris ConleyKC · 1650.0%37Mack HollinsPHI · 2250.0%38Jeremy KerleyNYJ · 2749.7%39Jarius WrightMIN · 2549.7%40Michael CampanaroBAL · 2749.7%41Alex EricksonCIN · 1649.4%42Brenton BersinCAR · 1448.8%

Each row is a player: the solid dot is the shrunk estimate, the hollow dot the raw rate, joined by the red pull of regression; the grey bar is the 90% credible interval. A hollow shrunk dot means the sample is below the stabilization line — the number is mostly the position prior. Switch to Raw rank and watch the small-sample names climb.

Target success rate · 2017 · full board

Target success rate leaderboard for the 2017 NFL season, shrunk by empirical Bayes with 90% credible intervals, ranked by the shrunk estimate.
#PlayerTeamPostargetsRawShrunk90% interval
1Hunter Henry◦ provisionalLACTE6269.3%55.2%49.6%60.8%
2Rob Gronkowski◦ provisionalNETE10661.3%54.3%49.2%59.4%
3Michael Thomas◦ provisionalNOWR14959.1%53.4%48.7%58.1%
4Zach Ertz◦ provisionalPHITE11157.7%52.9%47.8%58.0%
5Danny Amendola◦ provisionalNEWR8661.6%52.9%47.6%58.1%
6Rhett Ellison◦ provisionalNYGTE3268.8%52.8%46.7%58.9%
7Tyreek Hill◦ provisionalKCWR10558.1%52.1%47.0%57.1%
8Keenan AllenLACWR15956.0%52.0%47.4%56.6%
9Antonio BrownPITWR16555.8%52.0%47.4%56.6%
10Cooper Kupp◦ provisionalLAWR9458.5%52.0%46.8%57.1%
11Trey Burton◦ provisionalPHITE3262.5%51.7%45.6%57.8%
12Jason Witten◦ provisionalDALTE8755.2%51.5%46.2%56.8%
13JuJu Smith-Schuster◦ provisionalPITWR7958.2%51.5%46.1%56.8%
14Jack Doyle◦ provisionalINDTE10954.1%51.4%46.3%56.5%
15Albert Wilson◦ provisionalKCWR6259.7%51.4%45.8%56.9%
16Benjamin Watson◦ provisionalBALTE8055.0%51.3%45.9%56.7%
17Levine Toilolo◦ provisionalATLTE1471.4%51.3%44.9%57.7%
18Adam Shaheen◦ provisionalCHITE1471.4%51.3%44.9%57.7%
19Mohamed Sanu◦ provisionalATLWR9656.3%51.2%46.0%56.3%
20Allen Hurns◦ provisionalJAXWR5759.7%51.2%45.6%56.7%
21Coby Fleener◦ provisionalNOTE3060.0%51.1%45.0%57.3%
22Travis Kelce◦ provisionalKCTE12253.3%51.1%46.1%56.1%
23Cameron Brate◦ provisionalTBTE7754.5%51.1%45.7%56.6%
24Davante Adams◦ provisionalGBWR11855.1%51.1%46.1%56.0%
25Jared Cook◦ provisionalLVTE8653.5%50.9%45.5%56.2%
26Jordan Reed◦ provisionalWASTE3557.1%50.8%44.8%56.9%
27Sterling Shepard◦ provisionalNYGWR8456.0%50.8%45.6%56.1%
28O.J. Howard◦ provisionalTBTE3956.4%50.8%44.9%56.8%
29Chris Godwin Jr.◦ provisionalTBWR5558.2%50.7%45.1%56.3%
30Seth Roberts◦ provisionalLVWR6556.9%50.7%45.2%56.2%
31David Morgan◦ provisionalMINTE1266.7%50.7%44.2%57.1%
32Kelvin Benjamin◦ provisionalBUFWR7755.8%50.6%45.3%56.0%
33Adam Humphries◦ provisionalTBWR8355.4%50.6%45.3%55.9%
34Rishard Matthews◦ provisionalTENWR8755.2%50.6%45.4%55.9%
35Stefon Diggs◦ provisionalMINWR9554.7%50.6%45.4%55.8%
36Nick O'Leary◦ provisionalBUFTE3256.3%50.6%44.5%56.7%
37Tyler Kroft◦ provisionalCINTE6253.2%50.5%44.9%56.1%
38Ted Ginn◦ provisionalNOWR7055.7%50.4%45.0%55.9%
39Golden Tate◦ provisionalDETWR12053.3%50.4%45.4%55.3%
40C.J. Uzomah◦ provisionalCINTE1560.0%50.3%44.0%56.7%
41Nick Vannett◦ provisionalSEATE1560.0%50.3%44.0%56.7%
42Julio Jones◦ provisionalATLWR14852.7%50.3%45.6%55.0%
43Justin Hardy◦ provisionalATLWR2962.1%50.3%44.3%56.3%
44Kyle Rudolph◦ provisionalMINTE8151.8%50.2%44.8%55.6%
45Delanie Walker◦ provisionalTENTE11151.3%50.2%45.1%55.3%
46Eric Decker◦ provisionalTENWR8354.2%50.2%44.9%55.5%
47Martellus Bennett◦ provisionalNETE4452.3%50.0%44.1%55.9%
48Darren Fells◦ provisionalDETTE2653.8%50.0%43.9%56.2%
49Jordan Matthews◦ provisionalBUFTE3652.8%50.0%44.0%56.1%
50C.J. Fiedorowicz◦ provisionalHOUTE2254.5%50.0%43.8%56.3%
51Nick Boyle◦ provisionalBALTE3852.6%50.0%44.0%56.0%
52Daniel Brown◦ provisionalCHITE2055.0%50.0%43.7%56.3%
53Marvin Jones◦ provisionalDETWR10852.8%50.0%45.0%55.0%
54Cody Latimer◦ provisionalDENWR3259.4%50.0%44.1%56.0%
55Chris Conley◦ provisionalKCWR1668.8%50.0%43.8%56.2%
56Mack Hollins◦ provisionalPHIWR2263.6%50.0%43.9%56.1%
57Doug Baldwin◦ provisionalSEAWR11752.1%49.8%44.9%54.8%
58Jesse James◦ provisionalPITTE6350.8%49.8%44.2%55.4%
59Austin Hooper◦ provisionalATLTE6550.8%49.8%44.2%55.4%
60Garrett Celek◦ provisionalSFTE3351.5%49.8%43.7%55.8%
61Brandon Williams◦ provisionalINDTE1752.9%49.7%43.4%56.1%
62Richard Rodgers◦ provisionalGBTE1952.6%49.7%43.4%56.1%
63Jeremy Kerley◦ provisionalNYJWR2759.3%49.7%43.7%55.8%
64Jarius Wright◦ provisionalMINWR2560.0%49.7%43.7%55.8%
65Michael Campanaro◦ provisionalBALWR2759.3%49.7%43.7%55.8%
66Austin Traylor◦ provisionalDENTE1353.8%49.7%43.3%56.2%
67Julius Thomas◦ provisionalMIATE6250.0%49.6%43.9%55.2%
68Sammy Watkins◦ provisionalLAWR7052.9%49.6%44.1%55.0%
69Jermaine Gresham◦ provisionalARITE4650.0%49.5%43.7%55.4%
70T.J. Jones◦ provisionalDETWR5054.0%49.5%43.8%55.2%
71Dontrelle Inman◦ provisionalCHIWR4454.5%49.5%43.7%55.3%
72Tyler Boyd◦ provisionalCINWR3256.3%49.5%43.5%55.4%
73Virgil Green◦ provisionalDENTE2250.0%49.5%43.2%55.7%
74Vance McDonald◦ provisionalPITTE2450.0%49.5%43.2%55.7%
75James O'Shaughnessy◦ provisionalJAXTE2450.0%49.5%43.2%55.7%
76Anthony Fasano◦ provisionalMIATE1650.0%49.4%43.1%55.8%
77Jermaine Kearse◦ provisionalNYJWR10351.5%49.4%44.4%54.5%
78Marquise Goodwin◦ provisionalSFWR10551.4%49.4%44.4%54.5%
79Alex Erickson◦ provisionalCINWR1662.5%49.4%43.2%55.6%
80Larry FitzgeraldARIWR16250.6%49.4%44.8%54.0%
81Robert Woods◦ provisionalLAWR8551.8%49.4%44.1%54.6%
82Ryan Grant◦ provisionalWASWR6552.3%49.3%43.8%54.8%
83Trent Taylor◦ provisionalSFWR6152.5%49.3%43.8%54.9%
84Ed Dickson◦ provisionalCARTE4949.0%49.3%43.5%55.1%
85Zach Miller◦ provisionalCHITE3548.6%49.2%43.2%55.3%
86Kendall Wright◦ provisionalCHIWR9251.1%49.2%44.0%54.4%
87Adam Thielen◦ provisionalMINWR14250.0%49.0%44.3%53.7%
88Paul Richardson◦ provisionalSEAWR8150.6%49.0%43.7%54.3%
89Luke Willson◦ provisionalSEATE2245.5%48.9%42.6%55.1%
90Phillip Dorsett◦ provisionalNEWR1855.6%48.9%42.7%55.0%
91Brenton Bersin◦ provisionalCARWR1457.1%48.8%42.6%55.1%
92Antonio Gates◦ provisionalLACTE5347.2%48.8%43.0%54.6%
93Marcedes Lewis◦ provisionalJAXTE4946.9%48.8%43.0%54.6%
94Donte Moncrief◦ provisionalINDWR4751.1%48.8%43.1%54.5%
95Demarcus Robinson◦ provisionalKCWR3951.3%48.7%42.9%54.6%
96Brandon Coleman◦ provisionalNOWR3751.3%48.7%42.9%54.6%
97Brandin Cooks◦ provisionalNEWR11549.6%48.7%43.8%53.7%
98Brandon Marshall◦ provisionalNYGWR3351.5%48.7%42.8%54.6%
99Charles Clay◦ provisionalBUFTE7447.3%48.7%43.2%54.2%
100Michael Crabtree◦ provisionalLVWR10349.5%48.7%43.6%53.7%
101Mike Evans◦ provisionalTBWR13849.3%48.6%43.9%53.4%
102Troy Niklas◦ provisionalARITE2343.5%48.6%42.4%54.8%
103Clive Walford◦ provisionalLVTE1338.5%48.5%42.1%54.9%
104Demetrius Harris◦ provisionalKCTE3644.4%48.4%42.4%54.4%
105Jimmy Graham◦ provisionalSEATE9846.9%48.4%43.2%53.6%
106DeSean Jackson◦ provisionalTBWR9248.9%48.4%43.2%53.6%
107Brice Butler◦ provisionalDALWR2450.0%48.4%42.3%54.4%
108Robbie Chosen◦ provisionalNYJWR11548.7%48.4%43.4%53.3%
109DeAndre HopkinsHOUWR17548.6%48.4%43.9%52.8%
110Jordan Taylor◦ provisionalDENWR2050.0%48.3%42.2%54.5%
111Brent Celek◦ provisionalPHITE2441.7%48.3%42.1%54.5%
112Jarvis LandryMIAWR16148.4%48.3%43.7%52.9%
113Odell Beckham Jr.◦ provisionalNYGWR4348.8%48.3%42.5%54.0%
114Maxx Williams◦ provisionalBALTE1838.9%48.3%41.9%54.6%
115Jeff Heuerman◦ provisionalDENTE1838.9%48.3%41.9%54.6%
116Marqise Lee◦ provisionalJAXWR9748.4%48.2%43.1%53.4%
117Randall Cobb◦ provisionalGBWR9348.4%48.2%43.0%53.4%
118Terrelle Pryor◦ provisionalWASWR3748.6%48.2%42.4%54.1%
119Chester Rogers◦ provisionalINDWR3748.6%48.2%42.4%54.1%
120Jordy Nelson◦ provisionalGBWR8948.3%48.2%43.0%53.4%
121Martavis Bryant◦ provisionalPITWR8548.2%48.1%42.9%53.4%
122Andre Holmes◦ provisionalBUFWR2347.8%48.1%42.0%54.2%
123Ryan Griffin◦ provisionalHOUTE2740.7%48.1%41.9%54.2%
124Tyler Lockett◦ provisionalSEAWR7147.9%48.0%42.6%53.5%
125Pierre Garcon◦ provisionalSFWR6747.8%48.0%42.5%53.5%
126Demaryius Thomas◦ provisionalDENWR14247.9%48.0%43.3%52.8%
127Tre McBride◦ provisionalCHIWR1546.7%48.0%41.8%54.2%
128Niles Paul◦ provisionalWASTE1936.8%48.0%41.7%54.3%
129Ross Travis◦ provisionalINDTE1735.3%47.9%41.6%54.3%
130Chris Hogan◦ provisionalNEWR5947.5%47.9%42.4%53.5%
131George Kittle◦ provisionalSFTE6344.4%47.9%42.3%53.5%
132Kendrick Bourne◦ provisionalSFWR3447.1%47.9%42.0%53.8%
133Kenny Stills◦ provisionalMIAWR10547.6%47.9%42.9%53.0%
134Terrance Williams◦ provisionalDALWR8047.5%47.9%42.6%53.2%
135Ricky Seals-Jones◦ provisionalARITE2839.3%47.8%41.6%53.9%
136Devin Funchess◦ provisionalCARWR11247.3%47.8%42.8%52.8%
137Kasen Williams◦ provisionalCLEWR1844.4%47.7%41.6%53.9%
138Johnny Holton◦ provisionalLVWR1844.4%47.7%41.6%53.9%
139De'Anthony Thomas◦ provisionalKCWR1643.8%47.7%41.5%53.9%
140Tavarres King◦ provisionalNYGWR3746.0%47.7%41.9%53.6%
141Alshon Jeffery◦ provisionalPHIWR12347.1%47.7%42.8%52.6%
142Brandon Tate◦ provisionalBUFWR1442.9%47.7%41.5%53.9%
143Deonte Thompson◦ provisionalBUFWR6946.4%47.6%42.2%53.0%
144Tyrell Williams◦ provisionalLACWR6946.4%47.6%42.2%53.0%
145Josh Bellamy◦ provisionalCHIWR4645.6%47.6%41.8%53.3%
146Vernon Davis◦ provisionalWASTE6943.5%47.5%42.0%53.1%
147Dion Sims◦ provisionalCHITE2937.9%47.5%41.4%53.7%
148Mike Williams◦ provisionalLACWR2343.5%47.5%41.5%53.6%
149J.J. Nelson◦ provisionalARIWR6145.9%47.5%42.0%53.0%
150DeVante Parker◦ provisionalMIAWR9746.4%47.5%42.3%52.6%
151Louis Murphy◦ provisionalSFWR1741.2%47.4%41.3%53.6%
152Michael Floyd◦ provisionalMINWR1741.2%47.4%41.3%53.6%
153Chad Hansen◦ provisionalNYJWR1741.2%47.4%41.3%53.6%
154Jeremy Maclin◦ provisionalBALWR7245.8%47.4%42.0%52.8%
155A.J. Derby◦ provisionalMIATE4040.0%47.4%41.5%53.4%
156Will Fuller◦ provisionalHOUWR5145.1%47.4%41.7%53.0%
157Amara Darboh◦ provisionalSEAWR1338.5%47.4%41.1%53.6%
158Kenny Golladay◦ provisionalDETWR4944.9%47.3%41.7%53.0%
159Curtis Samuel◦ provisionalCARWR2642.3%47.3%41.3%53.3%
160Darrell Daniels◦ provisionalINDTE1323.1%47.3%40.9%53.7%
161Jonnu Smith◦ provisionalTENTE3036.7%47.3%41.2%53.4%
162Jakeem Grant◦ provisionalMIAWR2240.9%47.2%41.1%53.3%
163Geronimo Allison◦ provisionalGBWR3943.6%47.2%41.4%53.1%
164Mike Wallace◦ provisionalBALWR9245.6%47.2%42.0%52.4%
165Tyler Higbee◦ provisionalLATE4540.0%47.2%41.4%53.1%
166Seth DeValve◦ provisionalCLETE5841.4%47.1%41.5%52.8%
167Josh Hill◦ provisionalNOTE2231.8%47.1%40.9%53.4%
168Ty Montgomery◦ provisionalGBWR3141.9%47.1%41.2%53.1%
169Leonte Carroo◦ provisionalMIAWR1435.7%47.1%40.9%53.4%
170Travis Benjamin◦ provisionalLACWR6544.6%47.1%41.6%52.6%
171Cole Beasley◦ provisionalDALWR6344.4%47.1%41.6%52.6%
172Stephen Anderson◦ provisionalHOUTE5240.4%47.1%41.3%52.8%
173Nelson Agholor◦ provisionalPHIWR9545.3%47.0%41.9%52.2%
174Chris Moore◦ provisionalBALWR3842.1%46.9%41.1%52.8%
175Austin Seferian-Jenkins◦ provisionalNYJTE7441.9%46.9%41.4%52.4%
176Keelan Cole◦ provisionalJAXWR8344.6%46.9%41.6%52.2%
177Dede Westbrook◦ provisionalJAXWR5143.1%46.9%41.3%52.6%
178Damiere Byrd◦ provisionalCARWR1735.3%46.9%40.7%53.1%
179A.J. Green◦ provisionalCINWR14345.5%46.9%42.1%51.6%
180Greg Olsen◦ provisionalCARTE3836.8%46.8%40.9%52.8%
181Tommylee Lewis◦ provisionalNOWR1533.3%46.8%40.6%53.1%
182Taywan Taylor◦ provisionalTENWR2839.3%46.8%40.8%52.8%
183Jamison Crowder◦ provisionalWASWR10344.7%46.8%41.7%51.8%
184Bennie Fowler◦ provisionalDENWR5642.9%46.7%41.2%52.3%
185Eric Ebron◦ provisionalDETTE8641.9%46.6%41.3%52.0%
186Laquon Treadwell◦ provisionalMINWR3540.0%46.6%40.8%52.5%
187Willie Snead◦ provisionalNOWR1631.3%46.6%40.4%52.8%
188Dwayne Allen◦ provisionalNETE2227.3%46.6%40.3%52.8%
189Braxton Miller◦ provisionalHOUWR2937.9%46.5%40.6%52.5%
190Lance Kendricks◦ provisionalGBTE3534.3%46.5%40.5%52.6%
191Michael Clark◦ provisionalGBWR1428.6%46.5%40.3%52.8%
192Taylor Gabriel◦ provisionalATLWR5141.2%46.4%40.8%52.1%
193Emmanuel Sanders◦ provisionalDENWR9243.5%46.4%41.3%51.6%
194Eli Rogers◦ provisionalPITWR3638.9%46.4%40.6%52.3%
195Russell Shepard◦ provisionalCARWR3237.5%46.3%40.4%52.3%
196Josh Malone◦ provisionalCINWR1729.4%46.3%40.2%52.5%
197ArDarius Stewart◦ provisionalNYJWR1323.1%46.2%40.0%52.5%
198Gerald Everett◦ provisionalLATE3231.3%46.2%40.1%52.3%
199Josh Reynolds◦ provisionalLAWR2433.3%46.2%40.1%52.2%
200T.Y. Hilton◦ provisionalINDWR10943.1%46.1%41.1%51.1%
201Kaelin Clay◦ provisionalCARWR2030.0%46.1%40.0%52.2%
202Bryce Treggs◦ provisionalCLEWR1827.8%46.0%39.9%52.2%
203Josh Gordon◦ provisionalCLEWR4238.1%46.0%40.3%51.8%
204David Njoku◦ provisionalCLETE6036.7%45.7%40.1%51.4%
205Evan Engram◦ provisionalNYGTE11540.9%45.7%40.7%50.7%
206Isaiah McKenzie◦ provisionalDENWR1315.4%45.6%39.4%51.9%
207Torrey Smith◦ provisionalPHIWR6839.7%45.6%40.2%51.0%
208Jaron Brown◦ provisionalARIWR6939.1%45.4%40.0%50.8%
209Brandon LaFell◦ provisionalCINWR8940.5%45.4%40.2%50.6%
210Josh Doctson◦ provisionalWASWR7839.7%45.4%40.1%50.7%
211Roger Lewis◦ provisionalNYGWR7238.9%45.2%39.9%50.6%
212Ricardo Louis◦ provisionalCLEWR6137.7%45.2%39.7%50.8%
213Pharoh Cooper◦ provisionalLAWR1921.1%45.2%39.1%51.4%
214Travis Rudolph◦ provisionalNYGWR2222.7%45.0%39.0%51.1%
215Dez Bryant◦ provisionalDALWR13240.9%44.8%40.1%49.6%
216Kenny Britt◦ provisionalNEWR4332.6%44.8%39.1%50.6%
217Rashard Higgins◦ provisionalCLEWR5034.0%44.7%39.1%50.4%
218Markus Wheaton◦ provisionalCHIWR1711.8%44.6%38.5%50.8%
219Amari Cooper◦ provisionalLVWR9638.5%44.5%39.4%49.6%
220Bruce Ellington◦ provisionalHOUWR5834.5%44.5%39.0%50.0%
221Zay Jones◦ provisionalBUFWR7435.1%44.0%38.7%49.4%
222John Brown◦ provisionalARIWR5632.1%43.9%38.4%49.5%
223Tavon Austin◦ provisionalLAWR2213.6%43.9%37.9%50.0%
224Aldrick Robinson◦ provisionalSFWR4829.2%43.7%38.1%49.4%
225Corey Coleman◦ provisionalCLEWR5831.0%43.5%38.0%49.1%
226Corey Davis◦ provisionalTENWR6532.3%43.5%38.1%49.0%
227Kamar Aiken◦ provisionalINDWR4425.0%43.1%37.4%48.8%
228Breshad Perriman◦ provisionalBALWR3520.0%43.0%37.2%48.9%

How the shrinkage works

Two estimators

Rate stats (completion %, success rate, catch rate) use a beta-binomial model: a Beta(α, β) prior fit by marginal likelihood over each position group, then a Beta posterior per player. Per-play averages (EPA, CPOE, yards) use a normal-normal model with DerSimonian–Laird between-player variance. Both pull each player toward their group by exactly how thin their sample is.

Does it help? & the fine print

The trust panel’s numbers come from a leakage-free odd/even-week holdout: fit on odd weeks, predict even-week raw. Shrinkage lowers out-of-sample error for every stat. Priors are fit per season and per position (WR and TE separately), so a TE’s baseline isn’t a skill. Regular season only, 2016–2025. Rushing and receiving efficiency are heavily scheme-driven — read the wide bands as the honesty they are.

Source: nflverse play-by-play. Counted and computed deterministically — never modeled by a language model. Built by build_nfl_leaderboards.py (byte-reproducible).