<?xml version="1.0" encoding="windows-1252"?>
<informationTable xmlns="http://www.sec.gov/edgar/document/thirteenf/informationtable" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<infoTable>
  <nameOfIssuer>3M Co</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>88579Y101</cusip>
  <value>3260</value>
  <shrsOrPrnAmt>
    <sshPrnamt>21895</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>21507</Sole>
    <Shared>0</Shared>
    <None>388</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Abbott Laboratories</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>002824100</cusip>
  <value>3391</value>
  <shrsOrPrnAmt>
    <sshPrnamt>28648</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>28393</Sole>
    <Shared>0</Shared>
    <None>255</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Abbvie Inc</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>00287Y109</cusip>
  <value>3992</value>
  <shrsOrPrnAmt>
    <sshPrnamt>24623</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>24583</Sole>
    <Shared>0</Shared>
    <None>40</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Accenture Plc</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>G1151C101</cusip>
  <value>42981</value>
  <shrsOrPrnAmt>
    <sshPrnamt>127452</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>126144</Sole>
    <Shared>0</Shared>
    <None>1308</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Activision Blizzard Inc</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>00507V109</cusip>
  <value>23050</value>
  <shrsOrPrnAmt>
    <sshPrnamt>287733</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>282515</Sole>
    <Shared>0</Shared>
    <None>5218</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Adobe Systems Inc</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>00724F101</cusip>
  <value>649</value>
  <shrsOrPrnAmt>
    <sshPrnamt>1425</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>1425</Sole>
    <Shared>0</Shared>
    <None>0</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Advanced Micro Devices Inc</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>007903107</cusip>
  <value>291</value>
  <shrsOrPrnAmt>
    <sshPrnamt>2658</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>2658</Sole>
    <Shared>0</Shared>
    <None>0</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Air Products &amp; Chemicals Inc</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>009158106</cusip>
  <value>898</value>
  <shrsOrPrnAmt>
    <sshPrnamt>3595</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>3595</Sole>
    <Shared>0</Shared>
    <None>0</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Akamai Technologies Inc</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>00971T101</cusip>
  <value>63627</value>
  <shrsOrPrnAmt>
    <sshPrnamt>532935</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>522600</Sole>
    <Shared>0</Shared>
    <None>10335</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Allstate Corp</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>020002101</cusip>
  <value>310</value>
  <shrsOrPrnAmt>
    <sshPrnamt>2236</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>2236</Sole>
    <Shared>0</Shared>
    <None>0</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Alphabet Inc-A</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>02079K305</cusip>
  <value>125818</value>
  <shrsOrPrnAmt>
    <sshPrnamt>45236</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>44047</Sole>
    <Shared>0</Shared>
    <None>1189</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Alphabet Inc-C</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>02079K107</cusip>
  <value>22369</value>
  <shrsOrPrnAmt>
    <sshPrnamt>8009</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>7903</Sole>
    <Shared>0</Shared>
    <None>106</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Altria Group Inc</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>02209S103</cusip>
  <value>294</value>
  <shrsOrPrnAmt>
    <sshPrnamt>5635</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>5385</Sole>
    <Shared>0</Shared>
    <None>250</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Amazon.com Inc</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>023135106</cusip>
  <value>89006</value>
  <shrsOrPrnAmt>
    <sshPrnamt>27303</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>26560</Sole>
    <Shared>0</Shared>
    <None>743</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>American Electric Power Inc</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>025537101</cusip>
  <value>245</value>
  <shrsOrPrnAmt>
    <sshPrnamt>2460</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>2460</Sole>
    <Shared>0</Shared>
    <None>0</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>American Express Co</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>025816109</cusip>
  <value>265</value>
  <shrsOrPrnAmt>
    <sshPrnamt>1419</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>1419</Sole>
    <Shared>0</Shared>
    <None>0</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>American Tower Corp</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>03027X100</cusip>
  <value>74453</value>
  <shrsOrPrnAmt>
    <sshPrnamt>296364</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>289920</Sole>
    <Shared>0</Shared>
    <None>6444</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>American Water Works Co Inc</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>030420103</cusip>
  <value>62277</value>
  <shrsOrPrnAmt>
    <sshPrnamt>376228</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>368359</Sole>
    <Shared>0</Shared>
    <None>7869</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>AMETEK Inc</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>031100100</cusip>
  <value>52485</value>
  <shrsOrPrnAmt>
    <sshPrnamt>394094</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>386109</Sole>
    <Shared>0</Shared>
    <None>7985</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Amgen Inc</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>031162100</cusip>
  <value>1381</value>
  <shrsOrPrnAmt>
    <sshPrnamt>5712</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>5275</Sole>
    <Shared>0</Shared>
    <None>437</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Amphenol Corp</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>032095101</cusip>
  <value>62934</value>
  <shrsOrPrnAmt>
    <sshPrnamt>835219</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>819337</Sole>
    <Shared>0</Shared>
    <None>15882</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Analog Devices Inc</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>032654105</cusip>
  <value>233</value>
  <shrsOrPrnAmt>
    <sshPrnamt>1413</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>1413</Sole>
    <Shared>0</Shared>
    <None>0</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Ansys Inc</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>03662Q105</cusip>
  <value>21066</value>
  <shrsOrPrnAmt>
    <sshPrnamt>66318</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>65603</Sole>
    <Shared>0</Shared>
    <None>715</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Aon PLC</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>G0403H108</cusip>
  <value>45908</value>
  <shrsOrPrnAmt>
    <sshPrnamt>140983</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>138821</Sole>
    <Shared>0</Shared>
    <None>2162</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Apple Inc</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>037833100</cusip>
  <value>199577</value>
  <shrsOrPrnAmt>
    <sshPrnamt>1142985</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>1117214</Sole>
    <Shared>0</Shared>
    <None>25771</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Applied Materials Inc</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>038222105</cusip>
  <value>550</value>
  <shrsOrPrnAmt>
    <sshPrnamt>4171</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>4171</Sole>
    <Shared>0</Shared>
    <None>0</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Assurant Inc</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>04621X108</cusip>
  <value>275</value>
  <shrsOrPrnAmt>
    <sshPrnamt>1511</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>1511</Sole>
    <Shared>0</Shared>
    <None>0</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>AT&amp;T Inc</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>00206R102</cusip>
  <value>827</value>
  <shrsOrPrnAmt>
    <sshPrnamt>34983</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>32973</Sole>
    <Shared>0</Shared>
    <None>2010</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Automatic Data Processing Inc</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>053015103</cusip>
  <value>9070</value>
  <shrsOrPrnAmt>
    <sshPrnamt>39861</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>39205</Sole>
    <Shared>0</Shared>
    <None>656</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Bank of America Corp</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>060505104</cusip>
  <value>23005</value>
  <shrsOrPrnAmt>
    <sshPrnamt>558099</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>545725</Sole>
    <Shared>0</Shared>
    <None>12374</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Becton Dickinson &amp; Co</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>075887109</cusip>
  <value>219</value>
  <shrsOrPrnAmt>
    <sshPrnamt>823</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>823</Sole>
    <Shared>0</Shared>
    <None>0</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Berkshire Hathaway Inc-A</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>084670108</cusip>
  <value>529</value>
  <shrsOrPrnAmt>
    <sshPrnamt>1</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>1</Sole>
    <Shared>0</Shared>
    <None>0</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Berkshire Hathaway Inc-B</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>084670702</cusip>
  <value>93538</value>
  <shrsOrPrnAmt>
    <sshPrnamt>265047</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>259895</Sole>
    <Shared>0</Shared>
    <None>5152</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>BlackRock Inc</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>09247X101</cusip>
  <value>1125</value>
  <shrsOrPrnAmt>
    <sshPrnamt>1472</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>1472</Sole>
    <Shared>0</Shared>
    <None>0</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Blackstone Inc</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>09260D107</cusip>
  <value>720</value>
  <shrsOrPrnAmt>
    <sshPrnamt>5669</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>5669</Sole>
    <Shared>0</Shared>
    <None>0</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Boeing Co</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>097023105</cusip>
  <value>375</value>
  <shrsOrPrnAmt>
    <sshPrnamt>1957</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>1917</Sole>
    <Shared>0</Shared>
    <None>40</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Borgwarner Inc</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>099724106</cusip>
  <value>23333</value>
  <shrsOrPrnAmt>
    <sshPrnamt>599828</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>590467</Sole>
    <Shared>0</Shared>
    <None>9361</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Bristol-Myers Squibb Co</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>110122108</cusip>
  <value>649</value>
  <shrsOrPrnAmt>
    <sshPrnamt>8881</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>7912</Sole>
    <Shared>0</Shared>
    <None>969</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Broadcom Inc</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>11135F101</cusip>
  <value>1356</value>
  <shrsOrPrnAmt>
    <sshPrnamt>2154</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>2154</Sole>
    <Shared>0</Shared>
    <None>0</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Brown Forman Corp-B</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>115637209</cusip>
  <value>1475</value>
  <shrsOrPrnAmt>
    <sshPrnamt>22012</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>22012</Sole>
    <Shared>0</Shared>
    <None>0</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Camden National Corp</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>133034108</cusip>
  <value>230</value>
  <shrsOrPrnAmt>
    <sshPrnamt>4900</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>4600</Sole>
    <Shared>0</Shared>
    <None>300</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Canadian National Railway Co</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>136375102</cusip>
  <value>471</value>
  <shrsOrPrnAmt>
    <sshPrnamt>3509</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>3509</Sole>
    <Shared>0</Shared>
    <None>0</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Caterpillar Inc</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>149123101</cusip>
  <value>1017</value>
  <shrsOrPrnAmt>
    <sshPrnamt>4565</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>4565</Sole>
    <Shared>0</Shared>
    <None>0</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Cerner Corp</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>156782104</cusip>
  <value>23194</value>
  <shrsOrPrnAmt>
    <sshPrnamt>247901</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>243965</Sole>
    <Shared>0</Shared>
    <None>3936</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Charles Schwab Corp</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>808513105</cusip>
  <value>398</value>
  <shrsOrPrnAmt>
    <sshPrnamt>4724</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>4724</Sole>
    <Shared>0</Shared>
    <None>0</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Chevron Corp</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>166764100</cusip>
  <value>3923</value>
  <shrsOrPrnAmt>
    <sshPrnamt>24094</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>23492</Sole>
    <Shared>0</Shared>
    <None>602</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Chubb Ltd</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>H1467J104</cusip>
  <value>57005</value>
  <shrsOrPrnAmt>
    <sshPrnamt>266501</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>261561</Sole>
    <Shared>0</Shared>
    <None>4940</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Church &amp; Dwight Inc</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>171340102</cusip>
  <value>801</value>
  <shrsOrPrnAmt>
    <sshPrnamt>8064</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>8064</Sole>
    <Shared>0</Shared>
    <None>0</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Cisco Systems Inc</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>17275R102</cusip>
  <value>1218</value>
  <shrsOrPrnAmt>
    <sshPrnamt>21840</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>21777</Sole>
    <Shared>0</Shared>
    <None>63</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Clorox Co</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>189054109</cusip>
  <value>394</value>
  <shrsOrPrnAmt>
    <sshPrnamt>2831</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>2781</Sole>
    <Shared>0</Shared>
    <None>50</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>CME Group Inc</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>12572Q105</cusip>
  <value>24297</value>
  <shrsOrPrnAmt>
    <sshPrnamt>102146</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>100054</Sole>
    <Shared>0</Shared>
    <None>2092</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Coca Cola Co</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>191216100</cusip>
  <value>1582</value>
  <shrsOrPrnAmt>
    <sshPrnamt>25524</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>20724</Sole>
    <Shared>0</Shared>
    <None>4800</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Cognizant Tech Solutions Corp</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>192446102</cusip>
  <value>31508</value>
  <shrsOrPrnAmt>
    <sshPrnamt>351378</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>346424</Sole>
    <Shared>0</Shared>
    <None>4954</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Colgate Palmolive Co</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>194162103</cusip>
  <value>10154</value>
  <shrsOrPrnAmt>
    <sshPrnamt>133910</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>130499</Sole>
    <Shared>0</Shared>
    <None>3411</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Comcast Corp</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>20030N101</cusip>
  <value>5107</value>
  <shrsOrPrnAmt>
    <sshPrnamt>109078</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>108325</Sole>
    <Shared>0</Shared>
    <None>753</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>ConocoPhillips</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>20825C104</cusip>
  <value>33677</value>
  <shrsOrPrnAmt>
    <sshPrnamt>336771</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>330349</Sole>
    <Shared>0</Shared>
    <None>6422</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Constellation Brands Inc-A</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>21036P108</cusip>
  <value>27971</value>
  <shrsOrPrnAmt>
    <sshPrnamt>121443</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>118600</Sole>
    <Shared>0</Shared>
    <None>2843</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Consumer Discretionary Select </nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>81369Y407</cusip>
  <value>20255</value>
  <shrsOrPrnAmt>
    <sshPrnamt>109489</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>106080</Sole>
    <Shared>0</Shared>
    <None>3409</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Cooper Companies Inc</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>216648402</cusip>
  <value>1035</value>
  <shrsOrPrnAmt>
    <sshPrnamt>2479</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>2457</Sole>
    <Shared>0</Shared>
    <None>22</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Copart Inc</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>217204106</cusip>
  <value>238</value>
  <shrsOrPrnAmt>
    <sshPrnamt>1900</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>1900</Sole>
    <Shared>0</Shared>
    <None>0</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Corning Inc</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>219350105</cusip>
  <value>248</value>
  <shrsOrPrnAmt>
    <sshPrnamt>6722</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>6677</Sole>
    <Shared>0</Shared>
    <None>45</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Costco Wholesale Corp</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>22160K105</cusip>
  <value>58508</value>
  <shrsOrPrnAmt>
    <sshPrnamt>101603</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>99842</Sole>
    <Shared>0</Shared>
    <None>1761</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>CSX Corp</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>126408103</cusip>
  <value>518</value>
  <shrsOrPrnAmt>
    <sshPrnamt>13834</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>13834</Sole>
    <Shared>0</Shared>
    <None>0</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Cullen/Frost Bankers Inc</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>229899109</cusip>
  <value>5732</value>
  <shrsOrPrnAmt>
    <sshPrnamt>41416</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>40751</Sole>
    <Shared>0</Shared>
    <None>665</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>CVS Health Corp</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>126650100</cusip>
  <value>594</value>
  <shrsOrPrnAmt>
    <sshPrnamt>5873</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>5573</Sole>
    <Shared>0</Shared>
    <None>300</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Danaher Corp</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>235851102</cusip>
  <value>101532</value>
  <shrsOrPrnAmt>
    <sshPrnamt>346136</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>340195</Sole>
    <Shared>0</Shared>
    <None>5941</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Deere &amp; Co</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>244199105</cusip>
  <value>9114</value>
  <shrsOrPrnAmt>
    <sshPrnamt>21938</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>21341</Sole>
    <Shared>0</Shared>
    <None>597</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Dow Inc</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>260557103</cusip>
  <value>338</value>
  <shrsOrPrnAmt>
    <sshPrnamt>5300</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>5300</Sole>
    <Shared>0</Shared>
    <None>0</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Du Pont de Nemours Inc</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>26614N102</cusip>
  <value>271</value>
  <shrsOrPrnAmt>
    <sshPrnamt>3685</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>3685</Sole>
    <Shared>0</Shared>
    <None>0</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Duke Energy Corp</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>26441C204</cusip>
  <value>481</value>
  <shrsOrPrnAmt>
    <sshPrnamt>4311</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>4311</Sole>
    <Shared>0</Shared>
    <None>0</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Eaton Corp PLC</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>G29183103</cusip>
  <value>29162</value>
  <shrsOrPrnAmt>
    <sshPrnamt>192156</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>187556</Sole>
    <Shared>0</Shared>
    <None>4600</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Ecolab Inc</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>278865100</cusip>
  <value>31048</value>
  <shrsOrPrnAmt>
    <sshPrnamt>175848</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>172666</Sole>
    <Shared>0</Shared>
    <None>3182</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Edwards Lifesciences Cp</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>28176E108</cusip>
  <value>338</value>
  <shrsOrPrnAmt>
    <sshPrnamt>2875</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>2875</Sole>
    <Shared>0</Shared>
    <None>0</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Eli Lilly &amp; Co</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>532457108</cusip>
  <value>1944</value>
  <shrsOrPrnAmt>
    <sshPrnamt>6790</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>5670</Sole>
    <Shared>0</Shared>
    <None>1120</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Emerson Electric Co</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>291011104</cusip>
  <value>2019</value>
  <shrsOrPrnAmt>
    <sshPrnamt>20592</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>20492</Sole>
    <Shared>0</Shared>
    <None>100</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Enterprise Products Partners L</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>293792107</cusip>
  <value>677</value>
  <shrsOrPrnAmt>
    <sshPrnamt>26237</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>25662</Sole>
    <Shared>0</Shared>
    <None>575</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Equinix Inc</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>29444U700</cusip>
  <value>26552</value>
  <shrsOrPrnAmt>
    <sshPrnamt>35802</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>35061</Sole>
    <Shared>0</Shared>
    <None>741</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Essential Utils Inc</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>29670G102</cusip>
  <value>227</value>
  <shrsOrPrnAmt>
    <sshPrnamt>4433</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>4433</Sole>
    <Shared>0</Shared>
    <None>0</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Exxon Mobil Corp</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>30231G102</cusip>
  <value>26157</value>
  <shrsOrPrnAmt>
    <sshPrnamt>316703</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>306488</Sole>
    <Shared>0</Shared>
    <None>10215</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Factset Research Systems Inc</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>303075105</cusip>
  <value>222</value>
  <shrsOrPrnAmt>
    <sshPrnamt>511</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>511</Sole>
    <Shared>0</Shared>
    <None>0</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Fastenal Co</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>311900104</cusip>
  <value>426</value>
  <shrsOrPrnAmt>
    <sshPrnamt>7164</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>7164</Sole>
    <Shared>0</Shared>
    <None>0</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Financial Select Sector SPDR E</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>81369Y605</cusip>
  <value>434</value>
  <shrsOrPrnAmt>
    <sshPrnamt>11315</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>11238</Sole>
    <Shared>0</Shared>
    <None>77</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>First Republic Bank</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>33616C100</cusip>
  <value>321</value>
  <shrsOrPrnAmt>
    <sshPrnamt>1980</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>1980</Sole>
    <Shared>0</Shared>
    <None>0</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Fox Corp A</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>35137L105</cusip>
  <value>1105</value>
  <shrsOrPrnAmt>
    <sshPrnamt>28010</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>27610</Sole>
    <Shared>0</Shared>
    <None>400</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Generac Holdings Inc</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>368736104</cusip>
  <value>571</value>
  <shrsOrPrnAmt>
    <sshPrnamt>1920</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>1845</Sole>
    <Shared>0</Shared>
    <None>75</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>General Dynamics Corp</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>369550108</cusip>
  <value>314</value>
  <shrsOrPrnAmt>
    <sshPrnamt>1304</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>1304</Sole>
    <Shared>0</Shared>
    <None>0</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>General Electric Co</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>369604301</cusip>
  <value>375</value>
  <shrsOrPrnAmt>
    <sshPrnamt>4100</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>4088</Sole>
    <Shared>0</Shared>
    <None>12</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Globe Life Inc</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>37959E102</cusip>
  <value>10292</value>
  <shrsOrPrnAmt>
    <sshPrnamt>102308</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>100478</Sole>
    <Shared>0</Shared>
    <None>1830</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Goldman Sachs Group Inc</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>38141G104</cusip>
  <value>392</value>
  <shrsOrPrnAmt>
    <sshPrnamt>1187</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>1187</Sole>
    <Shared>0</Shared>
    <None>0</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Henry Schein Inc</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>806407102</cusip>
  <value>1529</value>
  <shrsOrPrnAmt>
    <sshPrnamt>17541</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>17435</Sole>
    <Shared>0</Shared>
    <None>106</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Hershey Co</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>427866108</cusip>
  <value>28812</value>
  <shrsOrPrnAmt>
    <sshPrnamt>132999</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>131617</Sole>
    <Shared>0</Shared>
    <None>1382</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Hologic Inc</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>436440101</cusip>
  <value>645</value>
  <shrsOrPrnAmt>
    <sshPrnamt>8393</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>7908</Sole>
    <Shared>0</Shared>
    <None>485</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Home Depot Inc</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>437076102</cusip>
  <value>38959</value>
  <shrsOrPrnAmt>
    <sshPrnamt>130153</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>128001</Sole>
    <Shared>0</Shared>
    <None>2152</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Honeywell International Inc</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>438516106</cusip>
  <value>1690</value>
  <shrsOrPrnAmt>
    <sshPrnamt>8684</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>8274</Sole>
    <Shared>0</Shared>
    <None>410</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Idexx Labs Corp</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>45168D104</cusip>
  <value>48724</value>
  <shrsOrPrnAmt>
    <sshPrnamt>89065</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>87159</Sole>
    <Shared>0</Shared>
    <None>1906</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Illinois Tool Wks Inc</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>452308109</cusip>
  <value>1107</value>
  <shrsOrPrnAmt>
    <sshPrnamt>5288</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>5288</Sole>
    <Shared>0</Shared>
    <None>0</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Intel Corp</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>458140100</cusip>
  <value>1204</value>
  <shrsOrPrnAmt>
    <sshPrnamt>24296</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>24085</Sole>
    <Shared>0</Shared>
    <None>211</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Intl Business Machines Corp</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>459200101</cusip>
  <value>1131</value>
  <shrsOrPrnAmt>
    <sshPrnamt>8699</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>8599</Sole>
    <Shared>0</Shared>
    <None>100</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Intuit Inc</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>461202103</cusip>
  <value>79819</value>
  <shrsOrPrnAmt>
    <sshPrnamt>165999</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>164352</Sole>
    <Shared>0</Shared>
    <None>1647</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Intuitive Surgical Inc</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>46120E602</cusip>
  <value>408</value>
  <shrsOrPrnAmt>
    <sshPrnamt>1352</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>1352</Sole>
    <Shared>0</Shared>
    <None>0</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Invesco QQQ Trust Series 1 ETF</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>46090E103</cusip>
  <value>762</value>
  <shrsOrPrnAmt>
    <sshPrnamt>2103</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>1877</Sole>
    <Shared>0</Shared>
    <None>226</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Invesco S&amp;P 500 Equal Weight E</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>46137V357</cusip>
  <value>2006</value>
  <shrsOrPrnAmt>
    <sshPrnamt>12720</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>2200</Sole>
    <Shared>0</Shared>
    <None>10520</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>IQ Hedge Multi Strategy Tracke</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>45409B107</cusip>
  <value>238</value>
  <shrsOrPrnAmt>
    <sshPrnamt>7725</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>7725</Sole>
    <Shared>0</Shared>
    <None>0</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Iron Mountain Inc</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>46284V101</cusip>
  <value>356</value>
  <shrsOrPrnAmt>
    <sshPrnamt>6422</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>6422</Sole>
    <Shared>0</Shared>
    <None>0</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>iShares Core MSCI EAFE ETF</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>46432F842</cusip>
  <value>317</value>
  <shrsOrPrnAmt>
    <sshPrnamt>4560</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>4118</Sole>
    <Shared>0</Shared>
    <None>442</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>iShares Core MSCI EM ETF</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>46434G103</cusip>
  <value>255</value>
  <shrsOrPrnAmt>
    <sshPrnamt>4597</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>4386</Sole>
    <Shared>0</Shared>
    <None>211</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>iShares Core S&amp;P 500 ETF</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>464287200</cusip>
  <value>2241</value>
  <shrsOrPrnAmt>
    <sshPrnamt>4939</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>4607</Sole>
    <Shared>0</Shared>
    <None>332</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>iShares Core S&amp;P M/C ETF</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>464287507</cusip>
  <value>71475</value>
  <shrsOrPrnAmt>
    <sshPrnamt>266360</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>186964</Sole>
    <Shared>0</Shared>
    <None>79396</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>iShares Core S&amp;P S/C ETF</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>464287804</cusip>
  <value>2475</value>
  <shrsOrPrnAmt>
    <sshPrnamt>22946</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>20501</Sole>
    <Shared>0</Shared>
    <None>2445</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>iShares Gold Trust ETF</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>464285204</cusip>
  <value>486</value>
  <shrsOrPrnAmt>
    <sshPrnamt>13196</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>13196</Sole>
    <Shared>0</Shared>
    <None>0</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>iShares MSCI EM ETF</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>464287234</cusip>
  <value>313</value>
  <shrsOrPrnAmt>
    <sshPrnamt>6931</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>5621</Sole>
    <Shared>0</Shared>
    <None>1310</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>iShares Russell 1000 ETF</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>464287622</cusip>
  <value>18015</value>
  <shrsOrPrnAmt>
    <sshPrnamt>72040</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>55924</Sole>
    <Shared>0</Shared>
    <None>16116</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>iShares Russell 1000 Growth ET</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>464287614</cusip>
  <value>2028</value>
  <shrsOrPrnAmt>
    <sshPrnamt>7305</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>6835</Sole>
    <Shared>0</Shared>
    <None>470</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>iShares Russell 1000 Value ETF</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>464287598</cusip>
  <value>334</value>
  <shrsOrPrnAmt>
    <sshPrnamt>2015</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>1263</Sole>
    <Shared>0</Shared>
    <None>752</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>iShares Russell 2000 ETF</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>464287655</cusip>
  <value>2046</value>
  <shrsOrPrnAmt>
    <sshPrnamt>9970</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>3904</Sole>
    <Shared>0</Shared>
    <None>6066</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>iShares Russell 2000 Value ETF</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>464287630</cusip>
  <value>211</value>
  <shrsOrPrnAmt>
    <sshPrnamt>1305</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>1294</Sole>
    <Shared>0</Shared>
    <None>11</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>iShares Russell 3000 ETF</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>464287689</cusip>
  <value>46705</value>
  <shrsOrPrnAmt>
    <sshPrnamt>178014</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>177936</Sole>
    <Shared>0</Shared>
    <None>78</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>iShares Russell M/C ETF</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>464287499</cusip>
  <value>1514</value>
  <shrsOrPrnAmt>
    <sshPrnamt>19398</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>13846</Sole>
    <Shared>0</Shared>
    <None>5552</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>iShares Russell M/C Growth ETF</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>464287481</cusip>
  <value>519</value>
  <shrsOrPrnAmt>
    <sshPrnamt>5164</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>5164</Sole>
    <Shared>0</Shared>
    <None>0</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>iShares Russell M/C Value ETF</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>464287473</cusip>
  <value>422</value>
  <shrsOrPrnAmt>
    <sshPrnamt>3528</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>3509</Sole>
    <Shared>0</Shared>
    <None>19</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>iShares S&amp;P 500 Growth ETF</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>464287309</cusip>
  <value>336</value>
  <shrsOrPrnAmt>
    <sshPrnamt>4393</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>3793</Sole>
    <Shared>0</Shared>
    <None>600</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>iShares S&amp;P 500 Value ETF</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>464287408</cusip>
  <value>243</value>
  <shrsOrPrnAmt>
    <sshPrnamt>1560</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>1560</Sole>
    <Shared>0</Shared>
    <None>0</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>iShares S&amp;P GSCI Commodity ETF</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>46428R107</cusip>
  <value>435</value>
  <shrsOrPrnAmt>
    <sshPrnamt>19210</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>19210</Sole>
    <Shared>0</Shared>
    <None>0</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>iShares S&amp;P M/C 400 Gwth ETF</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>464287606</cusip>
  <value>214</value>
  <shrsOrPrnAmt>
    <sshPrnamt>2764</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>2584</Sole>
    <Shared>0</Shared>
    <None>180</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>iShares S&amp;P M/C 400 Value ETF</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>464287705</cusip>
  <value>272</value>
  <shrsOrPrnAmt>
    <sshPrnamt>2484</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>2484</Sole>
    <Shared>0</Shared>
    <None>0</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Johnson &amp; Johnson</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>478160104</cusip>
  <value>51474</value>
  <shrsOrPrnAmt>
    <sshPrnamt>290439</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>283112</Sole>
    <Shared>0</Shared>
    <None>7327</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Johnson Controls Intl Plc</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>G51502105</cusip>
  <value>393</value>
  <shrsOrPrnAmt>
    <sshPrnamt>6000</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>6000</Sole>
    <Shared>0</Shared>
    <None>0</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>JP Morgan Chase &amp; Co</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>46625H100</cusip>
  <value>53066</value>
  <shrsOrPrnAmt>
    <sshPrnamt>389276</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>382443</Sole>
    <Shared>0</Shared>
    <None>6833</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Kimberly Clark Corp</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>494368103</cusip>
  <value>733</value>
  <shrsOrPrnAmt>
    <sshPrnamt>5948</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>5948</Sole>
    <Shared>0</Shared>
    <None>0</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>L3 Harris Technologies Inc</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>502431109</cusip>
  <value>209</value>
  <shrsOrPrnAmt>
    <sshPrnamt>840</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>840</Sole>
    <Shared>0</Shared>
    <None>0</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Lam Research Corp</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>512807108</cusip>
  <value>251</value>
  <shrsOrPrnAmt>
    <sshPrnamt>466</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>466</Sole>
    <Shared>0</Shared>
    <None>0</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Linde Plc</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>G5494J103</cusip>
  <value>58941</value>
  <shrsOrPrnAmt>
    <sshPrnamt>184520</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>180848</Sole>
    <Shared>0</Shared>
    <None>3672</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Lockheed Martin Corp</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>539830109</cusip>
  <value>522</value>
  <shrsOrPrnAmt>
    <sshPrnamt>1183</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>1183</Sole>
    <Shared>0</Shared>
    <None>0</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Lowe&apos;s Companies Inc</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>548661107</cusip>
  <value>2894</value>
  <shrsOrPrnAmt>
    <sshPrnamt>14315</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>14295</Sole>
    <Shared>0</Shared>
    <None>20</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Magellan Midstream Partners LP</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>559080106</cusip>
  <value>279</value>
  <shrsOrPrnAmt>
    <sshPrnamt>5683</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>5683</Sole>
    <Shared>0</Shared>
    <None>0</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Mastercard Inc-A</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>57636Q104</cusip>
  <value>943</value>
  <shrsOrPrnAmt>
    <sshPrnamt>2639</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>2524</Sole>
    <Shared>0</Shared>
    <None>115</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>McCormick &amp; Co Inc</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>579780206</cusip>
  <value>20749</value>
  <shrsOrPrnAmt>
    <sshPrnamt>207907</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>205027</Sole>
    <Shared>0</Shared>
    <None>2880</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>McDonalds Corp</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>580135101</cusip>
  <value>4076</value>
  <shrsOrPrnAmt>
    <sshPrnamt>16484</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>15964</Sole>
    <Shared>0</Shared>
    <None>520</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Medtronic Plc</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>G5960L103</cusip>
  <value>32246</value>
  <shrsOrPrnAmt>
    <sshPrnamt>290639</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>286334</Sole>
    <Shared>0</Shared>
    <None>4305</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Merck &amp; Co Inc</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>58933Y105</cusip>
  <value>24950</value>
  <shrsOrPrnAmt>
    <sshPrnamt>304078</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>297251</Sole>
    <Shared>0</Shared>
    <None>6827</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Meta Platforms, Inc.</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>30303M102</cusip>
  <value>40065</value>
  <shrsOrPrnAmt>
    <sshPrnamt>180182</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>176477</Sole>
    <Shared>0</Shared>
    <None>3705</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Metlife Inc</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>59156R108</cusip>
  <value>276</value>
  <shrsOrPrnAmt>
    <sshPrnamt>3932</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>3932</Sole>
    <Shared>0</Shared>
    <None>0</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Mettler-Toledo Intl Inc</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>592688105</cusip>
  <value>56109</value>
  <shrsOrPrnAmt>
    <sshPrnamt>40860</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>40240</Sole>
    <Shared>0</Shared>
    <None>620</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Microchip Technology Inc</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>595017104</cusip>
  <value>80053</value>
  <shrsOrPrnAmt>
    <sshPrnamt>1065379</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>1046432</Sole>
    <Shared>0</Shared>
    <None>18947</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Microsoft Corp</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>594918104</cusip>
  <value>108980</value>
  <shrsOrPrnAmt>
    <sshPrnamt>353477</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>346630</Sole>
    <Shared>0</Shared>
    <None>6847</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Middleby Corp</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>596278101</cusip>
  <value>6294</value>
  <shrsOrPrnAmt>
    <sshPrnamt>38394</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>37494</Sole>
    <Shared>0</Shared>
    <None>900</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Mondelez Intl Inc-A</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>609207105</cusip>
  <value>349</value>
  <shrsOrPrnAmt>
    <sshPrnamt>5556</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>5556</Sole>
    <Shared>0</Shared>
    <None>0</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Moodys Corp</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>615369105</cusip>
  <value>213</value>
  <shrsOrPrnAmt>
    <sshPrnamt>630</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>630</Sole>
    <Shared>0</Shared>
    <None>0</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Morgan Stanley</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>617446448</cusip>
  <value>347</value>
  <shrsOrPrnAmt>
    <sshPrnamt>3971</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>3971</Sole>
    <Shared>0</Shared>
    <None>0</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>NextEra Energy Inc</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>65339F101</cusip>
  <value>65749</value>
  <shrsOrPrnAmt>
    <sshPrnamt>776166</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>761300</Sole>
    <Shared>0</Shared>
    <None>14866</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Nike Inc</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>654106103</cusip>
  <value>15160</value>
  <shrsOrPrnAmt>
    <sshPrnamt>112661</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>111356</Sole>
    <Shared>0</Shared>
    <None>1305</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Nordson Corp</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>655663102</cusip>
  <value>15946</value>
  <shrsOrPrnAmt>
    <sshPrnamt>70223</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>69233</Sole>
    <Shared>0</Shared>
    <None>990</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Norfolk Southern Corp</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>655844108</cusip>
  <value>2101</value>
  <shrsOrPrnAmt>
    <sshPrnamt>7367</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>6972</Sole>
    <Shared>0</Shared>
    <None>395</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Northern Trust Corp</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>665859104</cusip>
  <value>20635</value>
  <shrsOrPrnAmt>
    <sshPrnamt>177198</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>174060</Sole>
    <Shared>0</Shared>
    <None>3138</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Northrop Grumman Corp</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>666807102</cusip>
  <value>25426</value>
  <shrsOrPrnAmt>
    <sshPrnamt>56853</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>55921</Sole>
    <Shared>0</Shared>
    <None>932</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Novartis AG ADR</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>66987V109</cusip>
  <value>308</value>
  <shrsOrPrnAmt>
    <sshPrnamt>3514</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>3514</Sole>
    <Shared>0</Shared>
    <None>0</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Novo Nordisk A/S ADR</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>670100205</cusip>
  <value>461</value>
  <shrsOrPrnAmt>
    <sshPrnamt>4150</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>4150</Sole>
    <Shared>0</Shared>
    <None>0</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Nvidia Corp</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>67066G104</cusip>
  <value>29927</value>
  <shrsOrPrnAmt>
    <sshPrnamt>109680</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>105961</Sole>
    <Shared>0</Shared>
    <None>3719</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>NVR Inc</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>62944T105</cusip>
  <value>438</value>
  <shrsOrPrnAmt>
    <sshPrnamt>98</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>98</Sole>
    <Shared>0</Shared>
    <None>0</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Omnicom Group Inc</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>681919106</cusip>
  <value>282</value>
  <shrsOrPrnAmt>
    <sshPrnamt>3325</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>3175</Sole>
    <Shared>0</Shared>
    <None>150</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Oracle Corp</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>68389X105</cusip>
  <value>976</value>
  <shrsOrPrnAmt>
    <sshPrnamt>11802</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>11802</Sole>
    <Shared>0</Shared>
    <None>0</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Oshkosh Corp</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>688239201</cusip>
  <value>21003</value>
  <shrsOrPrnAmt>
    <sshPrnamt>208677</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>205423</Sole>
    <Shared>0</Shared>
    <None>3254</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Palo Alto Networks Inc</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>697435105</cusip>
  <value>96599</value>
  <shrsOrPrnAmt>
    <sshPrnamt>155177</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>151831</Sole>
    <Shared>0</Shared>
    <None>3346</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Paychex Inc</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>704326107</cusip>
  <value>390</value>
  <shrsOrPrnAmt>
    <sshPrnamt>2861</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>1361</Sole>
    <Shared>0</Shared>
    <None>1500</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Paypal Holdings Inc</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>70450Y103</cusip>
  <value>300</value>
  <shrsOrPrnAmt>
    <sshPrnamt>2595</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>2295</Sole>
    <Shared>0</Shared>
    <None>300</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Pentair Plc</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>G7S00T104</cusip>
  <value>272</value>
  <shrsOrPrnAmt>
    <sshPrnamt>5015</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>5015</Sole>
    <Shared>0</Shared>
    <None>0</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Pepsico Inc</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>713448108</cusip>
  <value>53029</value>
  <shrsOrPrnAmt>
    <sshPrnamt>316821</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>311813</Sole>
    <Shared>0</Shared>
    <None>5007</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Pfizer Inc</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>717081103</cusip>
  <value>16608</value>
  <shrsOrPrnAmt>
    <sshPrnamt>320806</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>312096</Sole>
    <Shared>0</Shared>
    <None>8710</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Philip Morris Intl Inc</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>718172109</cusip>
  <value>610</value>
  <shrsOrPrnAmt>
    <sshPrnamt>6496</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>6396</Sole>
    <Shared>0</Shared>
    <None>100</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Phillips 66</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>718546104</cusip>
  <value>31880</value>
  <shrsOrPrnAmt>
    <sshPrnamt>369026</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>362590</Sole>
    <Shared>0</Shared>
    <None>6436</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>PNC Financial Services Group</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>693475105</cusip>
  <value>441</value>
  <shrsOrPrnAmt>
    <sshPrnamt>2391</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>2391</Sole>
    <Shared>0</Shared>
    <None>0</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Polaris Inc</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>731068102</cusip>
  <value>18626</value>
  <shrsOrPrnAmt>
    <sshPrnamt>176852</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>172814</Sole>
    <Shared>0</Shared>
    <None>4038</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Procter &amp; Gamble Co</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>742718109</cusip>
  <value>23777</value>
  <shrsOrPrnAmt>
    <sshPrnamt>155611</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>147485</Sole>
    <Shared>0</Shared>
    <None>8126</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Proshares UltraShort S&amp;P500 ET</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>74347G416</cusip>
  <value>255</value>
  <shrsOrPrnAmt>
    <sshPrnamt>6800</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>6800</Sole>
    <Shared>0</Shared>
    <None>0</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Prudential Financial Inc</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>744320102</cusip>
  <value>455</value>
  <shrsOrPrnAmt>
    <sshPrnamt>3853</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>3853</Sole>
    <Shared>0</Shared>
    <None>0</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Quaker Houghton</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>747316107</cusip>
  <value>5312</value>
  <shrsOrPrnAmt>
    <sshPrnamt>30739</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>30169</Sole>
    <Shared>0</Shared>
    <None>570</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Qualcomm Inc</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>747525103</cusip>
  <value>65939</value>
  <shrsOrPrnAmt>
    <sshPrnamt>431481</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>421377</Sole>
    <Shared>0</Shared>
    <None>10104</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Raytheon Technologies Corp</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>75513E101</cusip>
  <value>35642</value>
  <shrsOrPrnAmt>
    <sshPrnamt>359761</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>351171</Sole>
    <Shared>0</Shared>
    <None>8590</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>RBC Bearings Inc</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>75524B104</cusip>
  <value>12057</value>
  <shrsOrPrnAmt>
    <sshPrnamt>62186</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>61381</Sole>
    <Shared>0</Shared>
    <None>805</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Rockwell Automation Corp</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>773903109</cusip>
  <value>24052</value>
  <shrsOrPrnAmt>
    <sshPrnamt>85892</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>84338</Sole>
    <Shared>0</Shared>
    <None>1554</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Roper Technologies Inc</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>776696106</cusip>
  <value>52417</value>
  <shrsOrPrnAmt>
    <sshPrnamt>111000</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>109105</Sole>
    <Shared>0</Shared>
    <None>1895</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Salesforce Inc</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>79466L302</cusip>
  <value>597</value>
  <shrsOrPrnAmt>
    <sshPrnamt>2813</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>2488</Sole>
    <Shared>0</Shared>
    <None>325</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Seagate Technology Holdings</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>G7997R103</cusip>
  <value>240</value>
  <shrsOrPrnAmt>
    <sshPrnamt>2668</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>2668</Sole>
    <Shared>0</Shared>
    <None>0</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>SEI Investments Co</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>784117103</cusip>
  <value>10387</value>
  <shrsOrPrnAmt>
    <sshPrnamt>172520</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>169630</Sole>
    <Shared>0</Shared>
    <None>2890</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Shell PLC ADR</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>780259305</cusip>
  <value>222</value>
  <shrsOrPrnAmt>
    <sshPrnamt>4050</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>4050</Sole>
    <Shared>0</Shared>
    <None>0</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Sherwin-Williams Co</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>824348106</cusip>
  <value>29198</value>
  <shrsOrPrnAmt>
    <sshPrnamt>116971</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>115414</Sole>
    <Shared>0</Shared>
    <None>1557</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Sirius XM Holdings Inc</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>82968B103</cusip>
  <value>77</value>
  <shrsOrPrnAmt>
    <sshPrnamt>11645</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>11645</Sole>
    <Shared>0</Shared>
    <None>0</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Smucker JM Co</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>832696405</cusip>
  <value>337</value>
  <shrsOrPrnAmt>
    <sshPrnamt>2491</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>2491</Sole>
    <Shared>0</Shared>
    <None>0</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Southern Co</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>842587107</cusip>
  <value>267</value>
  <shrsOrPrnAmt>
    <sshPrnamt>3677</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>3577</Sole>
    <Shared>0</Shared>
    <None>100</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>SPDR S&amp;P 500 ETF</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>78462F103</cusip>
  <value>69125</value>
  <shrsOrPrnAmt>
    <sshPrnamt>153053</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>101341</Sole>
    <Shared>0</Shared>
    <None>51712</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>SPDR S&amp;P Biotech ETF</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>78464A870</cusip>
  <value>7578</value>
  <shrsOrPrnAmt>
    <sshPrnamt>84312</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>81633</Sole>
    <Shared>0</Shared>
    <None>2679</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>SPDR S&amp;P M/C 400 ETF</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>78467Y107</cusip>
  <value>4051</value>
  <shrsOrPrnAmt>
    <sshPrnamt>8260</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>4188</Sole>
    <Shared>0</Shared>
    <None>4072</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Starbucks Corp</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>855244109</cusip>
  <value>4708</value>
  <shrsOrPrnAmt>
    <sshPrnamt>51751</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>51236</Sole>
    <Shared>0</Shared>
    <None>515</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>State Street Corp</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>857477103</cusip>
  <value>502</value>
  <shrsOrPrnAmt>
    <sshPrnamt>5759</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>5759</Sole>
    <Shared>0</Shared>
    <None>0</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>STERIS Plc</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>G8473T100</cusip>
  <value>16146</value>
  <shrsOrPrnAmt>
    <sshPrnamt>66781</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>65066</Sole>
    <Shared>0</Shared>
    <None>1715</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Stryker Corp</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>863667101</cusip>
  <value>26978</value>
  <shrsOrPrnAmt>
    <sshPrnamt>100909</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>99181</Sole>
    <Shared>0</Shared>
    <None>1728</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>SVB Financial Group</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>78486Q101</cusip>
  <value>242</value>
  <shrsOrPrnAmt>
    <sshPrnamt>432</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>432</Sole>
    <Shared>0</Shared>
    <None>0</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Sysco Corp</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>871829107</cusip>
  <value>341</value>
  <shrsOrPrnAmt>
    <sshPrnamt>4180</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>4180</Sole>
    <Shared>0</Shared>
    <None>0</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>T Rowe Price Group Inc</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>74144T108</cusip>
  <value>18835</value>
  <shrsOrPrnAmt>
    <sshPrnamt>124576</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>122498</Sole>
    <Shared>0</Shared>
    <None>2078</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Target Corp</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>87612E106</cusip>
  <value>755</value>
  <shrsOrPrnAmt>
    <sshPrnamt>3557</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>3557</Sole>
    <Shared>0</Shared>
    <None>0</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>TE Connectivity Ltd</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>H84989104</cusip>
  <value>860</value>
  <shrsOrPrnAmt>
    <sshPrnamt>6568</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>6568</Sole>
    <Shared>0</Shared>
    <None>0</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Technology Select Sector SPDR </nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>81369Y803</cusip>
  <value>260</value>
  <shrsOrPrnAmt>
    <sshPrnamt>1635</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>1616</Sole>
    <Shared>0</Shared>
    <None>19</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Teleflex Inc</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>879369106</cusip>
  <value>29391</value>
  <shrsOrPrnAmt>
    <sshPrnamt>82832</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>81423</Sole>
    <Shared>0</Shared>
    <None>1409</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Tesla Inc</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>88160R101</cusip>
  <value>2286</value>
  <shrsOrPrnAmt>
    <sshPrnamt>2121</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>1996</Sole>
    <Shared>0</Shared>
    <None>125</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Texas Instruments Inc</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>882508104</cusip>
  <value>533</value>
  <shrsOrPrnAmt>
    <sshPrnamt>2904</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>2904</Sole>
    <Shared>0</Shared>
    <None>0</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Thermo Fisher Scientific Inc</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>883556102</cusip>
  <value>85033</value>
  <shrsOrPrnAmt>
    <sshPrnamt>143964</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>141462</Sole>
    <Shared>0</Shared>
    <None>2502</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>TJX Companies Inc</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>872540109</cusip>
  <value>44386</value>
  <shrsOrPrnAmt>
    <sshPrnamt>732687</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>721471</Sole>
    <Shared>0</Shared>
    <None>11216</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Toll Brothers Inc</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>889478103</cusip>
  <value>17367</value>
  <shrsOrPrnAmt>
    <sshPrnamt>369360</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>363030</Sole>
    <Shared>0</Shared>
    <None>6330</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Toronto-Dominion Bank</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>891160509</cusip>
  <value>813</value>
  <shrsOrPrnAmt>
    <sshPrnamt>10231</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>8731</Sole>
    <Shared>0</Shared>
    <None>1500</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Tractor Supply Co</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>892356106</cusip>
  <value>26702</value>
  <shrsOrPrnAmt>
    <sshPrnamt>114419</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>111275</Sole>
    <Shared>0</Shared>
    <None>3144</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Trane Technologies Inc</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>G8994E103</cusip>
  <value>207</value>
  <shrsOrPrnAmt>
    <sshPrnamt>1355</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>175</Sole>
    <Shared>0</Shared>
    <None>1180</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Travelers Companies Inc</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>89417E109</cusip>
  <value>390</value>
  <shrsOrPrnAmt>
    <sshPrnamt>2137</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>2137</Sole>
    <Shared>0</Shared>
    <None>0</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Truist Financial Corp</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>89832Q109</cusip>
  <value>522</value>
  <shrsOrPrnAmt>
    <sshPrnamt>9213</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>9213</Sole>
    <Shared>0</Shared>
    <None>0</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Tyler Technologies Inc</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>902252105</cusip>
  <value>341</value>
  <shrsOrPrnAmt>
    <sshPrnamt>767</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>767</Sole>
    <Shared>0</Shared>
    <None>0</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Unilever Plc ADR</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>904767704</cusip>
  <value>3478</value>
  <shrsOrPrnAmt>
    <sshPrnamt>76327</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>74630</Sole>
    <Shared>0</Shared>
    <None>1697</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Union Pacific Corp</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>907818108</cusip>
  <value>35075</value>
  <shrsOrPrnAmt>
    <sshPrnamt>128382</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>125164</Sole>
    <Shared>0</Shared>
    <None>3218</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>United Parcel Service Inc</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>911312106</cusip>
  <value>460</value>
  <shrsOrPrnAmt>
    <sshPrnamt>2147</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>2087</Sole>
    <Shared>0</Shared>
    <None>60</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Unitedhealth Group Inc</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>91324P102</cusip>
  <value>35068</value>
  <shrsOrPrnAmt>
    <sshPrnamt>68764</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>67569</Sole>
    <Shared>0</Shared>
    <None>1195</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>US Bancorp</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>902973304</cusip>
  <value>34626</value>
  <shrsOrPrnAmt>
    <sshPrnamt>651473</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>637793</Sole>
    <Shared>0</Shared>
    <None>13680</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Vanguard Dividend Appreciation</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>921908844</cusip>
  <value>391</value>
  <shrsOrPrnAmt>
    <sshPrnamt>2412</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>2132</Sole>
    <Shared>0</Shared>
    <None>280</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Vanguard Financials ETF</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>92204A405</cusip>
  <value>253</value>
  <shrsOrPrnAmt>
    <sshPrnamt>2704</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>2704</Sole>
    <Shared>0</Shared>
    <None>0</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Vanguard Growth ETF</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>922908736</cusip>
  <value>721</value>
  <shrsOrPrnAmt>
    <sshPrnamt>2506</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>2506</Sole>
    <Shared>0</Shared>
    <None>0</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Vanguard High Dividend Yield E</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>921946406</cusip>
  <value>260</value>
  <shrsOrPrnAmt>
    <sshPrnamt>2318</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>2275</Sole>
    <Shared>0</Shared>
    <None>43</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Vanguard Information Technolog</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>92204A702</cusip>
  <value>333</value>
  <shrsOrPrnAmt>
    <sshPrnamt>800</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>800</Sole>
    <Shared>0</Shared>
    <None>0</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Vanguard M/C ETF</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>922908629</cusip>
  <value>205</value>
  <shrsOrPrnAmt>
    <sshPrnamt>860</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>669</Sole>
    <Shared>0</Shared>
    <None>191</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Vanguard M/C Growth ETF</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>922908538</cusip>
  <value>411</value>
  <shrsOrPrnAmt>
    <sshPrnamt>1846</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>1838</Sole>
    <Shared>0</Shared>
    <None>8</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Vanguard M/C Value ETF</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>922908512</cusip>
  <value>437</value>
  <shrsOrPrnAmt>
    <sshPrnamt>2919</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>2811</Sole>
    <Shared>0</Shared>
    <None>108</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Vanguard Real Estate ETF</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>922908553</cusip>
  <value>670</value>
  <shrsOrPrnAmt>
    <sshPrnamt>6179</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>5529</Sole>
    <Shared>0</Shared>
    <None>650</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Vanguard S&amp;P 500 ETF</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>922908363</cusip>
  <value>1241</value>
  <shrsOrPrnAmt>
    <sshPrnamt>2989</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>2614</Sole>
    <Shared>0</Shared>
    <None>375</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Vanguard S&amp;P M/C 400 ETF</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>921932885</cusip>
  <value>315</value>
  <shrsOrPrnAmt>
    <sshPrnamt>1734</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>1734</Sole>
    <Shared>0</Shared>
    <None>0</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Vanguard S/C ETF</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>922908751</cusip>
  <value>61762</value>
  <shrsOrPrnAmt>
    <sshPrnamt>290619</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>252917</Sole>
    <Shared>0</Shared>
    <None>37702</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Vanguard S/C Growth ETF</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>922908595</cusip>
  <value>366</value>
  <shrsOrPrnAmt>
    <sshPrnamt>1476</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>1472</Sole>
    <Shared>0</Shared>
    <None>4</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Vanguard S/C Value ETF</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>922908611</cusip>
  <value>227</value>
  <shrsOrPrnAmt>
    <sshPrnamt>1291</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>1278</Sole>
    <Shared>0</Shared>
    <None>13</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Vanguard Total Stock Market ET</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>922908769</cusip>
  <value>14019</value>
  <shrsOrPrnAmt>
    <sshPrnamt>61578</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>30501</Sole>
    <Shared>0</Shared>
    <None>31077</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Vanguard Value ETF</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>922908744</cusip>
  <value>439</value>
  <shrsOrPrnAmt>
    <sshPrnamt>2971</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>2971</Sole>
    <Shared>0</Shared>
    <None>0</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Verizon Communications Inc</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>92343V104</cusip>
  <value>2229</value>
  <shrsOrPrnAmt>
    <sshPrnamt>43765</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>41102</Sole>
    <Shared>0</Shared>
    <None>2663</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>VF Corp</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>918204108</cusip>
  <value>765</value>
  <shrsOrPrnAmt>
    <sshPrnamt>13450</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>13450</Sole>
    <Shared>0</Shared>
    <None>0</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Visa Inc-A</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>92826C839</cusip>
  <value>62216</value>
  <shrsOrPrnAmt>
    <sshPrnamt>280542</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>276520</Sole>
    <Shared>0</Shared>
    <None>4022</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Walmart Inc</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>931142103</cusip>
  <value>962</value>
  <shrsOrPrnAmt>
    <sshPrnamt>6460</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>6342</Sole>
    <Shared>0</Shared>
    <None>118</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Walt Disney Co</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>254687106</cusip>
  <value>63727</value>
  <shrsOrPrnAmt>
    <sshPrnamt>464614</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>455584</Sole>
    <Shared>0</Shared>
    <None>9030</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Waste Connections Inc</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>94106B101</cusip>
  <value>65274</value>
  <shrsOrPrnAmt>
    <sshPrnamt>467247</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>460334</Sole>
    <Shared>0</Shared>
    <None>6913</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Waste Management Inc</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>94106L109</cusip>
  <value>407</value>
  <shrsOrPrnAmt>
    <sshPrnamt>2566</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>2566</Sole>
    <Shared>0</Shared>
    <None>0</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>WEC Energy Group Inc.</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>92939U106</cusip>
  <value>216</value>
  <shrsOrPrnAmt>
    <sshPrnamt>2161</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>2161</Sole>
    <Shared>0</Shared>
    <None>0</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Wells Fargo &amp; Co</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>949746101</cusip>
  <value>292</value>
  <shrsOrPrnAmt>
    <sshPrnamt>6018</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>6018</Sole>
    <Shared>0</Shared>
    <None>0</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>West Pharmaceutical Services</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>955306105</cusip>
  <value>667</value>
  <shrsOrPrnAmt>
    <sshPrnamt>1624</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>1624</Sole>
    <Shared>0</Shared>
    <None>0</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Yum Brands Inc</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>988498101</cusip>
  <value>523</value>
  <shrsOrPrnAmt>
    <sshPrnamt>4416</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>4416</Sole>
    <Shared>0</Shared>
    <None>0</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Yum China Holdings Inc</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>98850P109</cusip>
  <value>289</value>
  <shrsOrPrnAmt>
    <sshPrnamt>6947</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>6947</Sole>
    <Shared>0</Shared>
    <None>0</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Zoetis Inc</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>98978V103</cusip>
  <value>11966</value>
  <shrsOrPrnAmt>
    <sshPrnamt>63449</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>62204</Sole>
    <Shared>0</Shared>
    <None>1245</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>iShares MSCI EAFE ETF</nameOfIssuer>
  <titleOfClass>INTL</titleOfClass>
  <cusip>464287465</cusip>
  <value>2041</value>
  <shrsOrPrnAmt>
    <sshPrnamt>27731</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>27346</Sole>
    <Shared>0</Shared>
    <None>385</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Vanguard ESG Intl Stock ETF</nameOfIssuer>
  <titleOfClass>INTL</titleOfClass>
  <cusip>921910725</cusip>
  <value>1023</value>
  <shrsOrPrnAmt>
    <sshPrnamt>17879</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>17614</Sole>
    <Shared>0</Shared>
    <None>265</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Vanguard FTSE All-World Ex-US </nameOfIssuer>
  <titleOfClass>INTL</titleOfClass>
  <cusip>922042775</cusip>
  <value>36372</value>
  <shrsOrPrnAmt>
    <sshPrnamt>631567</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>592676</Sole>
    <Shared>0</Shared>
    <None>38891</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Vanguard FTSE DM ETF</nameOfIssuer>
  <titleOfClass>INTL</titleOfClass>
  <cusip>921943858</cusip>
  <value>32082</value>
  <shrsOrPrnAmt>
    <sshPrnamt>667953</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>632918</Sole>
    <Shared>0</Shared>
    <None>35035</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Vanguard FTSE EM ETF</nameOfIssuer>
  <titleOfClass>INTL</titleOfClass>
  <cusip>922042858</cusip>
  <value>21491</value>
  <shrsOrPrnAmt>
    <sshPrnamt>465880</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>430152</Sole>
    <Shared>0</Shared>
    <None>35727</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Bank of America Corp</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>060505682</cusip>
  <value>407</value>
  <shrsOrPrnAmt>
    <sshPrnamt>310</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>310</Sole>
    <Shared>0</Shared>
    <None>0</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Invesco BulletShares 2022 Corp</nameOfIssuer>
  <titleOfClass>BOND FUND</titleOfClass>
  <cusip>46138J882</cusip>
  <value>16499</value>
  <shrsOrPrnAmt>
    <sshPrnamt>776056</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>620827</Sole>
    <Shared>0</Shared>
    <None>155229</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Invesco BulletShares 2023 Corp</nameOfIssuer>
  <titleOfClass>BOND FUND</titleOfClass>
  <cusip>46138J866</cusip>
  <value>16322</value>
  <shrsOrPrnAmt>
    <sshPrnamt>773549</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>607896</Sole>
    <Shared>0</Shared>
    <None>165653</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Invesco BulletShares 2024 Corp</nameOfIssuer>
  <titleOfClass>BOND FUND</titleOfClass>
  <cusip>46138J841</cusip>
  <value>14028</value>
  <shrsOrPrnAmt>
    <sshPrnamt>665785</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>523405</Sole>
    <Shared>0</Shared>
    <None>142380</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Invesco BulletShares 2025 Corp</nameOfIssuer>
  <titleOfClass>BOND FUND</titleOfClass>
  <cusip>46138J825</cusip>
  <value>10242</value>
  <shrsOrPrnAmt>
    <sshPrnamt>489831</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>374508</Sole>
    <Shared>0</Shared>
    <None>115323</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Invesco BulletShares 2026 Corp</nameOfIssuer>
  <titleOfClass>BOND FUND</titleOfClass>
  <cusip>46138J791</cusip>
  <value>7246</value>
  <shrsOrPrnAmt>
    <sshPrnamt>362855</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>282883</Sole>
    <Shared>0</Shared>
    <None>79972</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Invesco BulletShares 2027 Corp</nameOfIssuer>
  <titleOfClass>BOND FUND</titleOfClass>
  <cusip>46138J783</cusip>
  <value>3686</value>
  <shrsOrPrnAmt>
    <sshPrnamt>182382</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>144845</Sole>
    <Shared>0</Shared>
    <None>37537</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Invesco BulletShares 2028 Corp</nameOfIssuer>
  <titleOfClass>BOND FUND</titleOfClass>
  <cusip>46138J643</cusip>
  <value>974</value>
  <shrsOrPrnAmt>
    <sshPrnamt>46173</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>31748</Sole>
    <Shared>0</Shared>
    <None>14425</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>iShares 1-3 Yr Treasury Bond E</nameOfIssuer>
  <titleOfClass>BOND FUND</titleOfClass>
  <cusip>464287457</cusip>
  <value>235</value>
  <shrsOrPrnAmt>
    <sshPrnamt>2815</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>2815</Sole>
    <Shared>0</Shared>
    <None>0</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>iShares 1-5 Year IG Corporate </nameOfIssuer>
  <titleOfClass>BOND FUND</titleOfClass>
  <cusip>464288646</cusip>
  <value>46080</value>
  <shrsOrPrnAmt>
    <sshPrnamt>890951</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>833690</Sole>
    <Shared>0</Shared>
    <None>57261</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>iShares 5-10 Year IG Corporate</nameOfIssuer>
  <titleOfClass>BOND FUND</titleOfClass>
  <cusip>464288638</cusip>
  <value>11917</value>
  <shrsOrPrnAmt>
    <sshPrnamt>217178</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>171523</Sole>
    <Shared>0</Shared>
    <None>45655</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>iShares Core US Aggregate Bond</nameOfIssuer>
  <titleOfClass>BOND FUND</titleOfClass>
  <cusip>464287226</cusip>
  <value>260</value>
  <shrsOrPrnAmt>
    <sshPrnamt>2425</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>2176</Sole>
    <Shared>0</Shared>
    <None>249</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>iShares iBoxx IG Corp Bond ETF</nameOfIssuer>
  <titleOfClass>BOND FUND</titleOfClass>
  <cusip>464287242</cusip>
  <value>823</value>
  <shrsOrPrnAmt>
    <sshPrnamt>6806</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>6560</Sole>
    <Shared>0</Shared>
    <None>246</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>iShares TIPS Bond ETF</nameOfIssuer>
  <titleOfClass>BOND FUND</titleOfClass>
  <cusip>464287176</cusip>
  <value>7459</value>
  <shrsOrPrnAmt>
    <sshPrnamt>59878</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>58188</Sole>
    <Shared>0</Shared>
    <None>1690</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>PIMCO Intermediate Muni Bond E</nameOfIssuer>
  <titleOfClass>BOND FUND</titleOfClass>
  <cusip>72201R866</cusip>
  <value>3345</value>
  <shrsOrPrnAmt>
    <sshPrnamt>63117</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>62567</Sole>
    <Shared>0</Shared>
    <None>550</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Pimco Municipal Income Fd III</nameOfIssuer>
  <titleOfClass>BOND FUND</titleOfClass>
  <cusip>72201A103</cusip>
  <value>136</value>
  <shrsOrPrnAmt>
    <sshPrnamt>13147</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>13147</Sole>
    <Shared>0</Shared>
    <None>0</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>PIMCO S/T Muni Bond Active ETF</nameOfIssuer>
  <titleOfClass>BOND FUND</titleOfClass>
  <cusip>72201R874</cusip>
  <value>9296</value>
  <shrsOrPrnAmt>
    <sshPrnamt>186004</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>185504</Sole>
    <Shared>0</Shared>
    <None>500</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Schwab US Aggregate Bond ETF</nameOfIssuer>
  <titleOfClass>BOND FUND</titleOfClass>
  <cusip>808524839</cusip>
  <value>303</value>
  <shrsOrPrnAmt>
    <sshPrnamt>6000</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>6000</Sole>
    <Shared>0</Shared>
    <None>0</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Vanguard Intermediate Term Cor</nameOfIssuer>
  <titleOfClass>BOND FUND</titleOfClass>
  <cusip>92206C870</cusip>
  <value>564</value>
  <shrsOrPrnAmt>
    <sshPrnamt>6557</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>6372</Sole>
    <Shared>0</Shared>
    <None>185</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Vanguard MBS ETF</nameOfIssuer>
  <titleOfClass>BOND FUND</titleOfClass>
  <cusip>92206C771</cusip>
  <value>1326</value>
  <shrsOrPrnAmt>
    <sshPrnamt>26476</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>25176</Sole>
    <Shared>0</Shared>
    <None>1300</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Vanguard S/T Treasury ETF</nameOfIssuer>
  <titleOfClass>BOND FUND</titleOfClass>
  <cusip>92206C102</cusip>
  <value>1767</value>
  <shrsOrPrnAmt>
    <sshPrnamt>29824</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>27310</Sole>
    <Shared>0</Shared>
    <None>2514</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Vanguard Total Bond Mkt ETF</nameOfIssuer>
  <titleOfClass>BOND FUND</titleOfClass>
  <cusip>921937835</cusip>
  <value>1821</value>
  <shrsOrPrnAmt>
    <sshPrnamt>22889</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>15609</Sole>
    <Shared>0</Shared>
    <None>7280</None>
  </votingAuthority>
</infoTable>
</informationTable>
