Hollow marker is the consensus estimate; filled is the reported figure, colored by beat or miss.
Outlined bar is the consensus estimate; solid is reported.
Periods without a consensus estimate or a reported figure show a dash.
| Period | EPS estimate | EPS actual | EPS surprise % | Revenue estimate | Revenue actual | Revenue surprise % |
|---|---|---|---|---|---|---|
| Q3 26 | $1.55 | $1.68 | +8.4% | — | — | — |
| Q2 26 | $1.84 | $2.04 | +10.9% | — | — | — |
| Q1 26 | $1.32 | $1.16 | -12.1% | — | — | — |
| Q4 25 | $1.41 | $1.51 | +7.1% | — | — | — |
| Q3 25 | $1.44 | $1.58 | +9.7% | — | — | — |
| Q2 25 | $1.86 | $2.42 | +30.1% | — | — | — |
| Q1 25 | $1.2 | $0.98 | -18.3% | — | — | — |
| Q4 24 | $1.21 | $1.37 | +13.2% | — | — | — |
| Q3 24 | $1.33 | $1.3 | -2.3% | — | — | — |
| Q2 24 | $1.63 | $1.58 | -3.1% | — | — | — |
| Q1 24 | — | $1.01 | — | — | — | — |
| Q4 23 | $0.98 | $1.1 | +12.2% | — | — | — |
| Q3 23 | $1.17 | $1.07 | -8.5% | — | — | — |
| Q2 23 | $1.76 | $1.61 | -8.5% | — | — | — |
| Q1 23 | $0.94 | $0.94 | 0.0% | — | — | — |
| Q4 22 | $0.74 | $0.99 | +33.8% | — | — | — |
Reported per-share earnings by fiscal year; the line turns dotted where reported figures end and the analyst consensus begins, with the shaded band marking the low–high range.
Reported revenue by fiscal year; the line turns dotted where reported figures end and the analyst consensus begins, with the shaded band marking the low–high range.
Periods without a consensus estimate or a reported figure show a dash.
| Period | EPS estimate | EPS actual | EPS surprise % | Revenue estimate | Revenue actual | Revenue surprise % |
|---|---|---|---|---|---|---|
| FY25 | — | $6.74 | — | — | $411.1M | — |
| FY24 | — | $5.24 | — | — | $379M | — |
| FY23 | — | $4.64 | — | — | $354.3M | — |
| FY22 | — | $4.6 | — | — | $308.7M |
Reported revenue per period; the line is the change from the same period a year earlier, on its own left axis.
| Period | FY16 | FY17 | FY18 | FY19 | FY20 | FY21 | FY22 | FY23 | FY24 | FY25 |
|---|---|---|---|---|---|---|---|---|---|---|
| Revenue | $209.4M | $252.9M | $285M | $298.4M | $315.1M | $304.4M | $308.7M | $354.3M | $379M | $411.1M |
| YoY change | +24.6% | +20.8% | +12.7% | +4.71% | +5.57% | -3.4% | +1.44% | +14.8% | +6.97% | +8.49% |
Reported revenue per period; the line is the change from the same period a year earlier, on its own left axis.
Revenue, gross profit, operating income, and net income per period.
Click a row to chart it; unreported figures show a dash.
| Period | FY16 | FY17 | FY18 | FY19 | FY20 | FY21 | FY22 | FY23 | FY24 | FY25 |
|---|---|---|---|---|---|---|---|---|---|---|
| Revenue | 209.4M | 252.9M | 285M | 298.4M | 315.1M | 304.4M | 308.7M | 354.3M | 379M | 411.1M |
| Cost of revenue | — | — | — | — | — | — | — | — | — | — |
| Gross profit | — | — | — | — | — | — | — | — | — | — |
| Gross margin | — | — | — | — | — | — | — | — | — | — |
| Research & development | — | — | — | — | — | — | — | — | — | — |
| Selling, general & administrative | 87.2M | 102.9M | 113M | 104.9M | 111.2M | 116.1M | 119.8M | 127M | 131.1M | 137.8M |
| Operating expenses | 87.2M | 102.9M | 113M | 104.9M | 111.2M | 116.1M | 119.8M | 127M | 131.1M | 137.8M |
| Operating income | — | — | — | — | — | — | — | — | — | — |
| Operating margin | — | — | — | — | — | — | — | — | — | — |
| Non-operating income, net | — | — | — | — | — | — | — | — | — | — |
| Pretax income | 69M | 78.4M | 94.3M | 113.2M | 102.6M | 111.4M | 116.8M | 113.2M | 127.7M | 165.7M |
| Income tax | 23.1M | 32.8M | 16.4M | 21.5M | 19.4M | 23.8M | 25.7M | 22.8M | 26.3M | 34.4M |
| Net income | 45.9M | 45.6M | 77.9M | 91.7M | 83.2M | 87.6M | 91.1M | 90.4M | 101.4M | 131.3M |
| Net margin | 21.9% | 18% | 27.3% | 30.7% | 26.4% | 28.8% | 29.5% | 25.5% | 26.7% | 31.9% |
| EBITDA | — | — | — | — | — | — | — | — | — | — |
| EPS | 2.22 | 2.21 | 3.76 | 4.41 | 4 | 4.25 | 4.6 | 4.64 | 5.24 | 6.74 |
| Diluted EPS | 2.22 | 2.2 | 3.74 | 4.39 | 3.99 | 4.24 | 4.59 | 4.62 | 5.21 | 6.72 |
Revenue, gross profit, operating income, and net income per period.
Click a row to chart it; unreported figures show a dash.
| Period | Q3 23 | Q4 23 | Q1 24 | Q2 24 | Q3 24 | Q4 24 | Q1 25 | Q2 25 | Q3 25 | Q4 25 | Q1 26 | Q2 26 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Revenue | — | — | — | — | — | — | — | — | 91.9M | 92.7M | 119M | 99.9M |
| Cost of revenue | — | — | — | — | — | — | — | — | — | — | — | — |
| Gross profit | — | — | — | — | — | — | — | — | — | — | — | — |
| Gross margin | — | — | — | — | — | — | — | — | — | — | — | — |
| Research & development | — | — | — | — | — | — | — | — | — | — | — | — |
| Selling, general & administrative | — | — | — | — | — | — | — | — | 34.5M | 37.3M | 34.7M | 34.8M |
| Operating expenses | — | — | — | — | — | — | — | — | 34.5M | 37.3M | 34.7M | 34.8M |
| Operating income | — | — | — | — | — | — | — | — | — | — | — | — |
| Operating margin | — | — | — | — | — | — | — | — | — | — | — | — |
| Non-operating income, net | — | — | — | — | — | — | — | — | — | — | — | — |
| Pretax income | — | — | — | — | — | — | — | — | 37.8M | 27.6M | 55.4M | 42.5M |
| Income tax | — | — | — | — | — | — | — | — | 8M | 4.8M | 12.8M | 9.7M |
| Net income | — | — | — | — | — | — | — | — | 29.7M | 22.8M | 42.6M | 32.9M |
| Net margin | — | — | — | — | — | — | — | — | 32.4% | 24.6% | 35.8% | 32.9% |
| EBITDA | — | — | — | — | — | — | — | — | — | — | — | — |
| EPS | 1.11 | 1.01 | 1.59 | 1.31 | 1.37 | 0.99 | 2.43 | 1.62 | 1.53 | 1.17 | 2.18 | 1.69 |
| Diluted EPS | 1.1 | 1.01 | 1.58 | 1.3 | 1.37 | 0.98 | 2.42 | 1.47 | 1.52 | 1.17 | 2.18 | 1.53 |
Annual history by fiscal year; click a table row below to chart a different metric.
Current values are trailing twelve months where available, otherwise the latest fiscal year; unreported figures show a dash.
| Metric | FY16 | FY17 | FY18 | FY19 | FY20 | FY21 | FY22 | FY23 | FY24 | FY25 | Current |
|---|---|---|---|---|---|---|---|---|---|---|---|
| Market cap | 828M | 795.4M | 811.6M | 983.9M | 758.9M | 1.1B | 819.9M | 1.1B | 1.4B | 1.4B | 1.8B |
| Enterprise value | 901.2M | 750.5M | 835.6M | 955M | 70M | -136.3M | 18.7M | 599.4M | 1B | 1B | 1.8B |
| Shares outstanding | 20.9M | 20.9M | 21M | 21M | 21M | 20.7M | 20M | 19.8M | 19.6M | 19.7M | 19.7M |
| Metric | FY16 | FY17 | FY18 | FY19 | FY20 | FY21 | FY22 | FY23 | FY24 | FY25 | Current |
|---|---|---|---|---|---|---|---|---|---|---|---|
| P/E | 18 | 17.4 | 10.4 | 10.7 | 9.12 | 12 | 9 | 12.1 | 13.5 | 10.4 | 14.5 |
| P/S | 3.95 | 3.14 | 2.85 | 3.3 | 2.41 | 3.45 | 2.66 | 3.08 | 3.62 | 3.31 | 4.85 |
| P/B | 1.37 | 1.26 | 1.18 | 1.29 | 0.92 | 1.26 | 0.96 | 1.2 | 1.38 | 1.24 | 1.6 |
| EV/Sales | 4.3 | 2.97 | 2.93 | 3.2 | 0.22 | -0.45 | 0.06 | 1.69 | 2.72 | 2.46 | 4.6 |
| Earnings yield | 5.54% | 5.74% | 9.59% | 9.32% | 11% | 8.34% | 11.1% | 8.28% | 7.38% | 9.64% | 6.92% |
| FCF yield | 4.91% | 8.22% | 13.5% | 9.38% | 9.47% | 8.99% | 18.5% | 9.31% | 10.4% | 11.8% | 7.16% |
| PEG | — | — | — | — | — | — | — | — | — | — | 3.35 |
| Metric | FY16 | FY17 | FY18 | FY19 | FY20 | FY21 | FY22 | FY23 | FY24 | FY25 | Current |
|---|---|---|---|---|---|---|---|---|---|---|---|
| Operating margin | — | — | — | — | — | — | — | — | — | — | 45% |
| Net margin | 21.9% | 18% | 27.3% | 30.7% | 26.4% | 28.8% | 29.5% | 25.5% | 26.7% | 31.9% | 33.5% |
| ROE | 7.59% | 7.22% | 11.3% | 12% | 10.1% | 10.5% | 10.6% | 9.9% | 10.2% | 11.9% | 11.5% |
| ROA | — | — | — | — | — | — | — | — | 1.48% | 1.86% | 1.82% |
| Return on tangible assets | — | — | — | — | — | — | — | — | 1.5% | 1.89% | 1.83% |
| Metric | FY16 | FY17 | FY18 | FY19 | FY20 | FY21 | FY22 | FY23 | FY24 | FY25 | Current |
|---|---|---|---|---|---|---|---|---|---|---|---|
| Debt / equity | 1.4 | 1.23 | 1.23 | 1.08 | 0.39 | 0.08 | 0.16 | 0.46 | 0.44 | 0.49 | 0 |
| Debt / assets | — | — | — | — | — | — | — | — | 0.06 | 0.08 | 0.03 |
| Effective tax rate | 33.4% | 41.8% | 17.4% | 19% | 18.9% | 21.4% | 22% | 20.2% | 20.6% | 20.8% | 21.6% |
| Metric | FY16 | FY17 | FY18 | FY19 | FY20 | FY21 | FY22 | FY23 | FY24 | FY25 | Current |
|---|---|---|---|---|---|---|---|---|---|---|---|
| Revenue per share | 10 | 12.1 | 13.6 | 14.2 | 15 | 14.7 | 15.4 | 17.9 | 19.3 | 20.8 | 19.3 |
| EPS (basic) | 2.22 | 2.21 | 3.76 | 4.41 | 4 | 4.25 | 4.6 | 4.64 | 5.24 | 6.74 | 6.74 |
| EPS (diluted) | 2.22 | 2.2 | 3.74 | 4.39 | 3.99 | 4.24 | 4.59 | 4.62 | 5.21 | 6.72 | 6.54 |
| Book value per share | 28.9 | 30.2 | 32.9 | 36.4 | 39.1 | 40.4 | 42.8 | 46.1 | 50.5 | 55.8 | 58.9 |
| FCF per share | 1.94 | 3.13 | 5.22 | 4.39 | 3.42 | 4.57 | 7.55 | 5.14 | 7.29 | 8.16 | 6.87 |
| Cash per share | 36.8 | 39.4 | 39.5 | 40.7 | 48 | 60.6 | 46.6 | 45.9 | 39.4 | 45.1 | 18.3 |
| Capex per share | 0.34 | 0.59 | 0.43 | 0.57 | 0.13 | 0.25 | 0.17 | 0.35 | 0.3 | — | — |
| Metric | FY16 | FY17 | FY18 | FY19 | FY20 | FY21 | FY22 | FY23 | FY24 | FY25 | Current |
|---|---|---|---|---|---|---|---|---|---|---|---|
| Capex / revenue | 3.36% | 4.9% | 3.18% | 4.01% | 0.85% | 1.69% | 1.13% | 1.95% | 1.53% | — | — |
| Capex / operating cash flow | 16.9% | 21.4% | 9.35% | 11.9% | 3.53% | 4.59% | 2.41% | 9.78% | 5.4% | — | — |
| Payout ratio | 36.5% | 38.7% | 25% | 23.3% | 27.9% | 28.2% | 28.7% | 31.4% | 30.1% | 25.8% | 28.9% |
| Dividend yield | 2.03% | 2.22% | 2.4% | 2.17% | 3.06% | 2.35% | 3.19% | 2.6% | 2.22% | 2.49% | 2.12% |
Split-adjusted payout per share by ex-dividend date.
| Ex-dividend | Amount |
|---|---|
| Sep 18, 2026 | $0.495 |
| Jun 18, 2026 | $0.495 |
| Mar 20, 2026 | $0.495 |
| — |
| FY21 | — | $4.25 | — | — | $304.4M | — |
| FY20 | — | $4 | — | — | $315.1M | — |
| FY19 | — | $4.41 | — | — | $298.4M | — |
| FY18 | — | $3.76 | — | — | $285M | — |
| FY17 | — | $2.21 | — | — | $252.9M | — |
| FY16 | — | $2.22 | — | — | $209.4M | — |
| Period | Q3 23 | Q4 23 | Q1 24 | Q2 24 | Q3 24 | Q4 24 | Q1 25 | Q2 25 | Q3 25 | Q4 25 | Q1 26 | Q2 26 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Revenue | — | — | — | — | — | — | — | — | $91.9M | $92.7M | $119M | $99.9M |
| YoY change | — | — | — | — | — | — | — | — | — | — | — | — |
What the company owns (left stack) against what it owes plus shareholders' equity (right stack). The two stacks should match — that's the balance.
Click a row to chart it; unreported figures show a dash.
| Period | FY16 | FY17 | FY18 | FY19 | FY20 | FY21 | FY22 | FY23 | FY24 | FY25 |
|---|---|---|---|---|---|---|---|---|---|---|
| Cash & short-term investments | 770.6M | 823.7M | 827.2M | 856.7M | 1B | 1.3B | 934.1M | 907.9M | 775.1M | 891.2M |
| Receivables | — | — | — | — | — | — | — | — | — | — |
| Inventory | — | — | — | — | — | — | — | — | — | — |
| Total current assets | — | — | — | — | — | — | — | — | — | — |
| Property, plant & equipment | 5.8M | 8.1M | 7.9M | 82.8M | 49.6M | 42.3M | 36.2M | 34.5M | 35.3M | 35M |
| Goodwill & intangibles | 32.6M | 32.6M | 32.6M | 32.6M | 32.6M | 32.6M | 32.6M | 81M | 81M | 81M |
| Total assets | — | — | — | — | — | — | — | — | 6.8B | 7B |
| Accounts payable | — | — | — | — | — | — | — | — | — | — |
| Short-term debt | — | — | — | — | — | — | — | — | — | — |
| Total current liabilities | — | — | — | — | — | — | — | — | — | — |
| Long-term debt | 843.7M | 778.7M | 851.2M | 827.8M | 320.6M | 64.7M | 132.8M | 415.5M | 432.1M | 538.4M |
| Total liabilities | — | — | — | — | — | — | — | — | 5.9B | 5.9B |
| Shareholders' equity | 604.4M | 632.4M | 689.9M | 764.2M | 823.3M | 835.1M | 856.6M | 912.8M | 992M | 1.1B |
| Total debt | 843.7M | 778.7M | 851.2M | 827.8M | 320.6M | 64.7M | 132.8M | 415.5M | 432.1M | 538.4M |
| Net debt | 554.4M | 479.4M | 499.8M | 442.5M | -165M | -692.3M | -180.9M | 99M | -30K | 318.4M |
What the company owns (left stack) against what it owes plus shareholders' equity (right stack). The two stacks should match — that's the balance.
Click a row to chart it; unreported figures show a dash.
| Period | Q3 23 | Q4 23 | Q1 24 | Q2 24 | Q3 24 | Q4 24 | Q1 25 | Q2 25 | Q3 25 | Q4 25 | Q1 26 | Q2 26 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Cash & short-term investments | 820.9M | 907.9M | 1.1B | 881.1M | 997.8M | 775.1M | 1.2B | 979.6M | 1.1B | 891.2M | 1.3B | 1.1B |
| Receivables | — | — | — | — | — | — | — | — | — | — | — | — |
| Inventory | — | — | — | — | — | — | — | — | — | — | — | — |
| Total current assets | — | — | — | — | — | — | — | — | — | — | — | — |
| Property, plant & equipment | 69.8M | 34.5M | 66.8M | 64.9M | 68.9M | 35.3M | 67.9M | 71M | 70.7M | 35M | 71.3M | 71.3M |
| Goodwill & intangibles | 81M | 81M | 81M | 81M | 81M | 81M | 81M | 81M | 81M | 81M | 81M | 81M |
| Total assets | — | — | 6.9B | 6.6B | 6.7B | 6.8B | 7.1B | 7B | 7B | 7B | 7.3B | 7.1B |
| Accounts payable | — | — | — | — | — | — | — | — | — | — | — | — |
| Short-term debt | — | — | — | — | — | — | — | — | — | — | — | — |
| Total current liabilities | — | — | — | — | — | — | — | — | — | — | — | — |
| Long-term debt | 501.7M | 415.5M | 304.1M | 402.6M | 406.8M | 432.1M | 406.8M | 405.3M | 408.8M | 538.4M | 398M | 187.1M |
| Total liabilities | — | — | 5.9B | 5.7B | 5.7B | 5.9B | 6B | 5.9B | 5.9B | 5.9B | 6.1B | 5.9B |
| Shareholders' equity | 893.4M | 912.8M | 935.6M | 955.4M | 979.7M | 992M | 1B | 1.1B | 1.1B | 1.1B | 1.1B | 1.2B |
| Total debt | 501.7M | 415.5M | 304.1M | 402.6M | 406.8M | 432.1M | 406.8M | 405.3M | 408.8M | 538.4M | 398M | 187.1M |
| Net debt | 282.1M | 99M | -242.3M | 2.5M | -124.1M | -30K | -386.2M | -79.5M | -75.4M | 318.4M | -201.1M | -167M |
Cash from operations, what's left after capex, and what went back to shareholders. Bars below the line are cash going out.
Click a row to chart it; unreported figures show a dash.
| Period | FY16 | FY17 | FY18 | FY19 | FY20 | FY21 | FY22 | FY23 | FY24 | FY25 |
|---|---|---|---|---|---|---|---|---|---|---|
| Net income | 45.9M | 45.6M | 77.9M | 91.7M | 83.2M | 87.6M | 91.1M | 90.4M | 101.4M | 131.3M |
| Depreciation & amortization | 9.1M | 10M | 10.8M | 11.1M | 13.5M | 18.3M | 18.1M | 15M | 14.6M | 14.7M |
| Stock-based compensation | 1.2M | 1.3M | 1.6M | 1.6M | 1.9M | 2.6M | 3M | 2.7M | 2.8M | 3.1M |
| Change in working capital | -7.6M | 2M | 8.3M | -2M | -25.7M | -3.6M | -3.6M | -30.3M | -12.9M | 876K |
| Operating cash flow | 41.7M | 58M | 96.9M | 100.9M | 76.1M | 112.2M | 145.2M | 70.5M | 107.6M | 168.2M |
| Capital expenditure | -7M | -12.4M | -9.1M | -12M | -2.7M | -5.1M | -3.5M | -6.9M | -5.8M | — |
| Investing cash flow | 3.3M | -74.8M | 38.2M | 201K | -34.2M | -13.4M | -222.5M | 22M | 60.8M | -306.8M |
| Dividends paid | -16.8M | -17.7M | -19.5M | -21.4M | -23.2M | -24.7M | -26.1M | -28.4M | -30.5M | -33.9M |
| Share repurchases | -1.2M | -1M | -827K | -1.4M | -3.9M | -47.5M | -12.6M | -20.3M | 0 | -72K |
| Financing cash flow | 81M | -83.7M | 52.2M | -82.8M | -544.2M | -322.2M | 31.3M | 236.4M | -15.5M | 77.1M |
| Net change in cash | 126M | -100.5M | 187.3M | 18.3M | -502.3M | -223.4M | -46.1M | 328.9M | 152.9M | -61.5M |
| Free cash flow | 40.6M | 65.4M | 109.4M | 92.3M | 71.8M | 94.5M | 151.3M | 101.6M | 143.2M | 161.1M |
Cash from operations, what's left after capex, and what went back to shareholders. Bars below the line are cash going out.
Click a row to chart it; unreported figures show a dash.
| Period | Q3 23 | Q4 23 | Q1 24 | Q2 24 | Q3 24 | Q4 24 | Q1 25 | Q2 25 | Q3 25 | Q4 25 | Q1 26 | Q2 26 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Net income | — | — | — | — | — | — | — | — | 29.7M | 22.8M | 42.6M | 32.9M |
| Depreciation & amortization | 3.6M | 8.6M | 3.9M | 3.5M | 3.2M | 4M | 3.9M | 3.5M | 3.5M | 3.7M | 3.9M | 4.1M |
| Stock-based compensation | — | — | — | — | — | — | — | — | 728K | 928K | 855K | 1.3M |
| Change in working capital | — | — | — | — | — | — | — | — | 6.4M | -7M | 28.9M | -26M |
| Operating cash flow | 3.6M | 8.6M | 3.9M | 3.5M | 3.2M | 4M | 3.9M | 3.5M | 37.4M | 33.3M | 73M | 1.1M |
| Capital expenditure | — | — | — | — | — | — | — | — | — | — | — | — |
| Investing cash flow | — | — | — | — | — | — | — | — | -144.1M | -48.9M | -4.7M | -4.3M |
| Dividends paid | — | — | — | — | — | — | — | — | -8.7M | -8.7M | -8.7M | -9.6M |
| Share repurchases | — | — | — | — | — | — | — | — | 0 | 0 | — | — |
| Financing cash flow | — | — | — | — | — | — | — | — | -3.7M | 122.3M | -148.2M | -219.1M |
| Net change in cash | 3.6M | 8.6M | 3.9M | 3.5M | 3.2M | 4M | 3.9M | 3.5M | -110.4M | 106.7M | -79.8M | -222.3M |
| Free cash flow | — | — | — | — | — | — | — | — | 34.9M | 33.6M | 68.1M | -120K |
| Dec 19, 2025 |
| $0.451 |
| Sep 19, 2025 | $0.451 |
| Jun 20, 2025 | $0.451 |
| Mar 21, 2025 | $0.451 |
| Dec 20, 2024 | $0.407 |
| Date | Ratio |
|---|---|
| Mar 21, 2007 | 105:100 |
| Mar 22, 2006 | 105:100 |
| Mar 22, 2005 | 105:100 |
| Mar 26, 2004 | 105:100 |