<?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>2927</value>
  <shrsOrPrnAmt>
    <sshPrnamt>22619</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>22231</Sole>
    <Shared>0</Shared>
    <None>388</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Abbott Laboratories</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>002824100</cusip>
  <value>3167</value>
  <shrsOrPrnAmt>
    <sshPrnamt>29151</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>28946</Sole>
    <Shared>0</Shared>
    <None>205</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Abbvie Inc</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>00287Y109</cusip>
  <value>3855</value>
  <shrsOrPrnAmt>
    <sshPrnamt>25169</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>25129</Sole>
    <Shared>0</Shared>
    <None>40</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Accenture Plc</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>G1151C101</cusip>
  <value>35453</value>
  <shrsOrPrnAmt>
    <sshPrnamt>127691</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>126265</Sole>
    <Shared>0</Shared>
    <None>1426</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Activision Blizzard Inc</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>00507V109</cusip>
  <value>22123</value>
  <shrsOrPrnAmt>
    <sshPrnamt>284138</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>278820</Sole>
    <Shared>0</Shared>
    <None>5318</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Adobe Systems Inc</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>00724F101</cusip>
  <value>357</value>
  <shrsOrPrnAmt>
    <sshPrnamt>976</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>976</Sole>
    <Shared>0</Shared>
    <None>0</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Air Products &amp; Chemicals Inc</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>009158106</cusip>
  <value>867</value>
  <shrsOrPrnAmt>
    <sshPrnamt>3607</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>3607</Sole>
    <Shared>0</Shared>
    <None>0</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Akamai Technologies Inc</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>00971T101</cusip>
  <value>39412</value>
  <shrsOrPrnAmt>
    <sshPrnamt>431536</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>423726</Sole>
    <Shared>0</Shared>
    <None>7810</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Allstate Corp</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>020002101</cusip>
  <value>254</value>
  <shrsOrPrnAmt>
    <sshPrnamt>2005</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>2005</Sole>
    <Shared>0</Shared>
    <None>0</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Alphabet Inc-A</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>02079K305</cusip>
  <value>99198</value>
  <shrsOrPrnAmt>
    <sshPrnamt>45519</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>44307</Sole>
    <Shared>0</Shared>
    <None>1212</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Alphabet Inc-C</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>02079K107</cusip>
  <value>17241</value>
  <shrsOrPrnAmt>
    <sshPrnamt>7882</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>7771</Sole>
    <Shared>0</Shared>
    <None>111</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Altria Group Inc</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>02209S103</cusip>
  <value>277</value>
  <shrsOrPrnAmt>
    <sshPrnamt>6635</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>6385</Sole>
    <Shared>0</Shared>
    <None>250</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Amazon.com Inc</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>023135106</cusip>
  <value>58797</value>
  <shrsOrPrnAmt>
    <sshPrnamt>553588</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>537709</Sole>
    <Shared>0</Shared>
    <None>15879</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>American Express Co</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>025816109</cusip>
  <value>203</value>
  <shrsOrPrnAmt>
    <sshPrnamt>1463</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>1463</Sole>
    <Shared>0</Shared>
    <None>0</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>American Tower Corp</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>03027X100</cusip>
  <value>74902</value>
  <shrsOrPrnAmt>
    <sshPrnamt>293057</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>286699</Sole>
    <Shared>0</Shared>
    <None>6358</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>American Water Works Co Inc</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>030420103</cusip>
  <value>55036</value>
  <shrsOrPrnAmt>
    <sshPrnamt>369942</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>362171</Sole>
    <Shared>0</Shared>
    <None>7771</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>AMETEK Inc</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>031100100</cusip>
  <value>42668</value>
  <shrsOrPrnAmt>
    <sshPrnamt>388282</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>380202</Sole>
    <Shared>0</Shared>
    <None>8080</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Amgen Inc</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>031162100</cusip>
  <value>1309</value>
  <shrsOrPrnAmt>
    <sshPrnamt>5381</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>4944</Sole>
    <Shared>0</Shared>
    <None>437</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Amphenol Corp</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>032095101</cusip>
  <value>54150</value>
  <shrsOrPrnAmt>
    <sshPrnamt>841101</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>824707</Sole>
    <Shared>0</Shared>
    <None>16394</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Ansys Inc</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>03662Q105</cusip>
  <value>15904</value>
  <shrsOrPrnAmt>
    <sshPrnamt>66464</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>65659</Sole>
    <Shared>0</Shared>
    <None>805</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Aon PLC</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>G0403H108</cusip>
  <value>37496</value>
  <shrsOrPrnAmt>
    <sshPrnamt>139038</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>136896</Sole>
    <Shared>0</Shared>
    <None>2142</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Apple Inc</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>037833100</cusip>
  <value>158107</value>
  <shrsOrPrnAmt>
    <sshPrnamt>1156427</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>1130054</Sole>
    <Shared>0</Shared>
    <None>26373</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Applied Materials Inc</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>038222105</cusip>
  <value>405</value>
  <shrsOrPrnAmt>
    <sshPrnamt>4451</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>4451</Sole>
    <Shared>0</Shared>
    <None>0</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>ASML Holding NV</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>N07059210</cusip>
  <value>8777</value>
  <shrsOrPrnAmt>
    <sshPrnamt>18443</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>17871</Sole>
    <Shared>0</Shared>
    <None>572</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Assurant Inc</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>04621X108</cusip>
  <value>356</value>
  <shrsOrPrnAmt>
    <sshPrnamt>2061</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>2061</Sole>
    <Shared>0</Shared>
    <None>0</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>AT&amp;T Inc</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>00206R102</cusip>
  <value>728</value>
  <shrsOrPrnAmt>
    <sshPrnamt>34735</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>32775</Sole>
    <Shared>0</Shared>
    <None>1960</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Automatic Data Processing Inc</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>053015103</cusip>
  <value>8237</value>
  <shrsOrPrnAmt>
    <sshPrnamt>39217</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>38561</Sole>
    <Shared>0</Shared>
    <None>656</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Bank of America Corp</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>060505104</cusip>
  <value>18072</value>
  <shrsOrPrnAmt>
    <sshPrnamt>580524</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>567984</Sole>
    <Shared>0</Shared>
    <None>12540</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Baxter Intl Inc</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>071813109</cusip>
  <value>219</value>
  <shrsOrPrnAmt>
    <sshPrnamt>3413</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>3413</Sole>
    <Shared>0</Shared>
    <None>0</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Becton Dickinson &amp; Co</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>075887109</cusip>
  <value>203</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>409</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>72807</value>
  <shrsOrPrnAmt>
    <sshPrnamt>266674</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>261198</Sole>
    <Shared>0</Shared>
    <None>5476</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>BlackRock Inc</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>09247X101</cusip>
  <value>882</value>
  <shrsOrPrnAmt>
    <sshPrnamt>1448</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>1448</Sole>
    <Shared>0</Shared>
    <None>0</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Blackstone Inc</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>09260D107</cusip>
  <value>526</value>
  <shrsOrPrnAmt>
    <sshPrnamt>5769</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>5769</Sole>
    <Shared>0</Shared>
    <None>0</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Boeing Co</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>097023105</cusip>
  <value>270</value>
  <shrsOrPrnAmt>
    <sshPrnamt>1977</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>1977</Sole>
    <Shared>0</Shared>
    <None>0</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Borgwarner Inc</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>099724106</cusip>
  <value>19313</value>
  <shrsOrPrnAmt>
    <sshPrnamt>578749</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>567824</Sole>
    <Shared>0</Shared>
    <None>10925</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Bristol-Myers Squibb Co</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>110122108</cusip>
  <value>758</value>
  <shrsOrPrnAmt>
    <sshPrnamt>9839</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>8870</Sole>
    <Shared>0</Shared>
    <None>969</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Broadcom Inc</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>11135F101</cusip>
  <value>1016</value>
  <shrsOrPrnAmt>
    <sshPrnamt>2091</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>2091</Sole>
    <Shared>0</Shared>
    <None>0</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Brown Forman Corp-B</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>115637209</cusip>
  <value>1544</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>249</value>
  <shrsOrPrnAmt>
    <sshPrnamt>5650</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>5350</Sole>
    <Shared>0</Shared>
    <None>300</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Canadian National Railway Co</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>136375102</cusip>
  <value>395</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>860</value>
  <shrsOrPrnAmt>
    <sshPrnamt>4810</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>4810</Sole>
    <Shared>0</Shared>
    <None>0</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Charles Schwab Corp</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>808513105</cusip>
  <value>532</value>
  <shrsOrPrnAmt>
    <sshPrnamt>8424</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>8408</Sole>
    <Shared>0</Shared>
    <None>16</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Chevron Corp</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>166764100</cusip>
  <value>3382</value>
  <shrsOrPrnAmt>
    <sshPrnamt>23359</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>22757</Sole>
    <Shared>0</Shared>
    <None>602</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Chubb Ltd</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>H1467J104</cusip>
  <value>52517</value>
  <shrsOrPrnAmt>
    <sshPrnamt>267154</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>262269</Sole>
    <Shared>0</Shared>
    <None>4885</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Church &amp; Dwight Inc</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>171340102</cusip>
  <value>692</value>
  <shrsOrPrnAmt>
    <sshPrnamt>7464</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>7464</Sole>
    <Shared>0</Shared>
    <None>0</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Cisco Systems Inc</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>17275R102</cusip>
  <value>944</value>
  <shrsOrPrnAmt>
    <sshPrnamt>22127</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>22064</Sole>
    <Shared>0</Shared>
    <None>63</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Clorox Co</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>189054109</cusip>
  <value>297</value>
  <shrsOrPrnAmt>
    <sshPrnamt>2110</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>2060</Sole>
    <Shared>0</Shared>
    <None>50</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>CME Group Inc</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>12572Q105</cusip>
  <value>21846</value>
  <shrsOrPrnAmt>
    <sshPrnamt>106720</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>104507</Sole>
    <Shared>0</Shared>
    <None>2213</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Coca Cola Co</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>191216100</cusip>
  <value>1496</value>
  <shrsOrPrnAmt>
    <sshPrnamt>23773</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>18973</Sole>
    <Shared>0</Shared>
    <None>4800</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Cognizant Tech Solutions Corp</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>192446102</cusip>
  <value>22524</value>
  <shrsOrPrnAmt>
    <sshPrnamt>333743</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>328314</Sole>
    <Shared>0</Shared>
    <None>5429</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Colgate Palmolive Co</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>194162103</cusip>
  <value>9912</value>
  <shrsOrPrnAmt>
    <sshPrnamt>123679</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>121368</Sole>
    <Shared>0</Shared>
    <None>2311</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Comcast Corp</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>20030N101</cusip>
  <value>4087</value>
  <shrsOrPrnAmt>
    <sshPrnamt>104155</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>103402</Sole>
    <Shared>0</Shared>
    <None>753</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>ConocoPhillips</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>20825C104</cusip>
  <value>30890</value>
  <shrsOrPrnAmt>
    <sshPrnamt>343952</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>337281</Sole>
    <Shared>0</Shared>
    <None>6671</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Constellation Brands Inc-A</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>21036P108</cusip>
  <value>27431</value>
  <shrsOrPrnAmt>
    <sshPrnamt>117698</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>114588</Sole>
    <Shared>0</Shared>
    <None>3110</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Consumer Discretionary Select </nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>81369Y407</cusip>
  <value>15798</value>
  <shrsOrPrnAmt>
    <sshPrnamt>114912</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>111491</Sole>
    <Shared>0</Shared>
    <None>3421</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Cooper Companies Inc</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>216648402</cusip>
  <value>736</value>
  <shrsOrPrnAmt>
    <sshPrnamt>2350</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>2328</Sole>
    <Shared>0</Shared>
    <None>22</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Copart Inc</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>217204106</cusip>
  <value>206</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>Corteva Inc</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>22052L104</cusip>
  <value>311</value>
  <shrsOrPrnAmt>
    <sshPrnamt>5738</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>5738</Sole>
    <Shared>0</Shared>
    <None>0</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Costco Wholesale Corp</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>22160K105</cusip>
  <value>49035</value>
  <shrsOrPrnAmt>
    <sshPrnamt>102309</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>100539</Sole>
    <Shared>0</Shared>
    <None>1770</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>CSX Corp</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>126408103</cusip>
  <value>398</value>
  <shrsOrPrnAmt>
    <sshPrnamt>13692</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>13692</Sole>
    <Shared>0</Shared>
    <None>0</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Cullen/Frost Bankers Inc</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>229899109</cusip>
  <value>4491</value>
  <shrsOrPrnAmt>
    <sshPrnamt>38562</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>37347</Sole>
    <Shared>0</Shared>
    <None>1215</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>CVS Health Corp</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>126650100</cusip>
  <value>524</value>
  <shrsOrPrnAmt>
    <sshPrnamt>5650</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>5350</Sole>
    <Shared>0</Shared>
    <None>300</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Danaher Corp</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>235851102</cusip>
  <value>87949</value>
  <shrsOrPrnAmt>
    <sshPrnamt>346912</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>340951</Sole>
    <Shared>0</Shared>
    <None>5961</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Deere &amp; Co</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>244199105</cusip>
  <value>8056</value>
  <shrsOrPrnAmt>
    <sshPrnamt>26900</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>26250</Sole>
    <Shared>0</Shared>
    <None>650</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Dimensional US Targeted Value </nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>25434V609</cusip>
  <value>201</value>
  <shrsOrPrnAmt>
    <sshPrnamt>4990</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>4990</Sole>
    <Shared>0</Shared>
    <None>0</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Dow Inc</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>260557103</cusip>
  <value>416</value>
  <shrsOrPrnAmt>
    <sshPrnamt>8066</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>8066</Sole>
    <Shared>0</Shared>
    <None>0</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Du Pont de Nemours Inc</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>26614N102</cusip>
  <value>340</value>
  <shrsOrPrnAmt>
    <sshPrnamt>6111</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>6111</Sole>
    <Shared>0</Shared>
    <None>0</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Duke Energy Corp</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>26441C204</cusip>
  <value>439</value>
  <shrsOrPrnAmt>
    <sshPrnamt>4091</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>4091</Sole>
    <Shared>0</Shared>
    <None>0</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Eaton Corp PLC</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>G29183103</cusip>
  <value>25151</value>
  <shrsOrPrnAmt>
    <sshPrnamt>199625</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>194472</Sole>
    <Shared>0</Shared>
    <None>5153</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Ecolab Inc</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>278865100</cusip>
  <value>26617</value>
  <shrsOrPrnAmt>
    <sshPrnamt>173107</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>169957</Sole>
    <Shared>0</Shared>
    <None>3150</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Edwards Lifesciences Cp</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>28176E108</cusip>
  <value>273</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>1966</value>
  <shrsOrPrnAmt>
    <sshPrnamt>6064</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>4944</Sole>
    <Shared>0</Shared>
    <None>1120</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Emerson Electric Co</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>291011104</cusip>
  <value>1599</value>
  <shrsOrPrnAmt>
    <sshPrnamt>20109</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>20009</Sole>
    <Shared>0</Shared>
    <None>100</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Enterprise Products Partners L</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>293792107</cusip>
  <value>528</value>
  <shrsOrPrnAmt>
    <sshPrnamt>21678</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>21103</Sole>
    <Shared>0</Shared>
    <None>575</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Equinix Inc</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>29444U700</cusip>
  <value>22829</value>
  <shrsOrPrnAmt>
    <sshPrnamt>34746</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>34055</Sole>
    <Shared>0</Shared>
    <None>691</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Essential Utils Inc</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>29670G102</cusip>
  <value>203</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>27448</value>
  <shrsOrPrnAmt>
    <sshPrnamt>320499</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>310290</Sole>
    <Shared>0</Shared>
    <None>10209</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Fastenal Co</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>311900104</cusip>
  <value>358</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>356</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>286</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>810</value>
  <shrsOrPrnAmt>
    <sshPrnamt>25200</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>24800</Sole>
    <Shared>0</Shared>
    <None>400</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Generac Holdings Inc</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>368736104</cusip>
  <value>1404</value>
  <shrsOrPrnAmt>
    <sshPrnamt>6667</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>6342</Sole>
    <Shared>0</Shared>
    <None>325</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>General Dynamics Corp</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>369550108</cusip>
  <value>289</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>258</value>
  <shrsOrPrnAmt>
    <sshPrnamt>4052</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>4040</Sole>
    <Shared>0</Shared>
    <None>12</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Globe Life Inc</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>37959E102</cusip>
  <value>10131</value>
  <shrsOrPrnAmt>
    <sshPrnamt>103935</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>102037</Sole>
    <Shared>0</Shared>
    <None>1898</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Goldman Sachs Group Inc</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>38141G104</cusip>
  <value>352</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>Health Care Select Sector SPDR</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>81369Y209</cusip>
  <value>228</value>
  <shrsOrPrnAmt>
    <sshPrnamt>1778</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>1778</Sole>
    <Shared>0</Shared>
    <None>0</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Henry Schein Inc</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>806407102</cusip>
  <value>1229</value>
  <shrsOrPrnAmt>
    <sshPrnamt>16021</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>15915</Sole>
    <Shared>0</Shared>
    <None>106</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Hershey Co</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>427866108</cusip>
  <value>28900</value>
  <shrsOrPrnAmt>
    <sshPrnamt>134318</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>132897</Sole>
    <Shared>0</Shared>
    <None>1421</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Hologic Inc</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>436440101</cusip>
  <value>571</value>
  <shrsOrPrnAmt>
    <sshPrnamt>8243</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>7758</Sole>
    <Shared>0</Shared>
    <None>485</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Home Depot Inc</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>437076102</cusip>
  <value>37034</value>
  <shrsOrPrnAmt>
    <sshPrnamt>135029</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>132748</Sole>
    <Shared>0</Shared>
    <None>2281</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Honeywell International Inc</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>438516106</cusip>
  <value>1592</value>
  <shrsOrPrnAmt>
    <sshPrnamt>9159</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>8749</Sole>
    <Shared>0</Shared>
    <None>410</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Idexx Labs Corp</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>45168D104</cusip>
  <value>33315</value>
  <shrsOrPrnAmt>
    <sshPrnamt>94987</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>92925</Sole>
    <Shared>0</Shared>
    <None>2062</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Illinois Tool Wks Inc</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>452308109</cusip>
  <value>955</value>
  <shrsOrPrnAmt>
    <sshPrnamt>5238</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>5238</Sole>
    <Shared>0</Shared>
    <None>0</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Intel Corp</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>458140100</cusip>
  <value>1261</value>
  <shrsOrPrnAmt>
    <sshPrnamt>33712</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>33501</Sole>
    <Shared>0</Shared>
    <None>211</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Intl Business Machines Corp</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>459200101</cusip>
  <value>1247</value>
  <shrsOrPrnAmt>
    <sshPrnamt>8835</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>8735</Sole>
    <Shared>0</Shared>
    <None>100</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Intuit Inc</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>461202103</cusip>
  <value>63245</value>
  <shrsOrPrnAmt>
    <sshPrnamt>164084</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>162258</Sole>
    <Shared>0</Shared>
    <None>1826</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Intuitive Surgical Inc</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>46120E602</cusip>
  <value>271</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>708</value>
  <shrsOrPrnAmt>
    <sshPrnamt>2527</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>2367</Sole>
    <Shared>0</Shared>
    <None>160</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Invesco S&amp;P 500 Equal Weight E</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>46137V357</cusip>
  <value>1795</value>
  <shrsOrPrnAmt>
    <sshPrnamt>13370</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>2850</Sole>
    <Shared>0</Shared>
    <None>10520</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>IQ Hedge Multi Strategy Tracke</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>45409B107</cusip>
  <value>269</value>
  <shrsOrPrnAmt>
    <sshPrnamt>9360</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>9360</Sole>
    <Shared>0</Shared>
    <None>0</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>iShares Core MSCI EAFE ETF</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>46432F842</cusip>
  <value>202</value>
  <shrsOrPrnAmt>
    <sshPrnamt>3439</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>2997</Sole>
    <Shared>0</Shared>
    <None>442</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>iShares Core S&amp;P 500 ETF</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>464287200</cusip>
  <value>2028</value>
  <shrsOrPrnAmt>
    <sshPrnamt>5348</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>4851</Sole>
    <Shared>0</Shared>
    <None>497</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>iShares Core S&amp;P M/C ETF</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>464287507</cusip>
  <value>70936</value>
  <shrsOrPrnAmt>
    <sshPrnamt>313555</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>221727</Sole>
    <Shared>0</Shared>
    <None>91828</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>iShares Core S&amp;P S/C ETF</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>464287804</cusip>
  <value>2205</value>
  <shrsOrPrnAmt>
    <sshPrnamt>23865</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>21145</Sole>
    <Shared>0</Shared>
    <None>2720</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>iShares Gold Trust ETF</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>464285204</cusip>
  <value>453</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>269</value>
  <shrsOrPrnAmt>
    <sshPrnamt>6716</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>5621</Sole>
    <Shared>0</Shared>
    <None>1095</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>iShares Russell 1000 ETF</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>464287622</cusip>
  <value>15043</value>
  <shrsOrPrnAmt>
    <sshPrnamt>72407</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>56779</Sole>
    <Shared>0</Shared>
    <None>15628</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>iShares Russell 1000 Growth ET</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>464287614</cusip>
  <value>1583</value>
  <shrsOrPrnAmt>
    <sshPrnamt>7239</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>6769</Sole>
    <Shared>0</Shared>
    <None>470</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>iShares Russell 1000 Value ETF</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>464287598</cusip>
  <value>286</value>
  <shrsOrPrnAmt>
    <sshPrnamt>1975</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>1263</Sole>
    <Shared>0</Shared>
    <None>712</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>iShares Russell 2000 ETF</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>464287655</cusip>
  <value>1583</value>
  <shrsOrPrnAmt>
    <sshPrnamt>9347</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>3772</Sole>
    <Shared>0</Shared>
    <None>5575</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>iShares Russell 3000 ETF</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>464287689</cusip>
  <value>38703</value>
  <shrsOrPrnAmt>
    <sshPrnamt>178034</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>177956</Sole>
    <Shared>0</Shared>
    <None>78</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>iShares Russell M/C ETF</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>464287499</cusip>
  <value>1216</value>
  <shrsOrPrnAmt>
    <sshPrnamt>18808</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>13256</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>449</value>
  <shrsOrPrnAmt>
    <sshPrnamt>5664</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>5664</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>441</value>
  <shrsOrPrnAmt>
    <sshPrnamt>4342</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>4323</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>241</value>
  <shrsOrPrnAmt>
    <sshPrnamt>3993</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>3393</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>222</value>
  <shrsOrPrnAmt>
    <sshPrnamt>1613</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>1613</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>444</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 Value ETF</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>464287705</cusip>
  <value>235</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>JM Smucker Co</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>832696405</cusip>
  <value>319</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>Johnson &amp; Johnson</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>478160104</cusip>
  <value>51145</value>
  <shrsOrPrnAmt>
    <sshPrnamt>288123</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>280794</Sole>
    <Shared>0</Shared>
    <None>7330</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Johnson Controls Intl Plc</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>G51502105</cusip>
  <value>287</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>44102</value>
  <shrsOrPrnAmt>
    <sshPrnamt>391632</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>384284</Sole>
    <Shared>0</Shared>
    <None>7348</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Kimberly Clark Corp</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>494368103</cusip>
  <value>2940</value>
  <shrsOrPrnAmt>
    <sshPrnamt>21751</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>21751</Sole>
    <Shared>0</Shared>
    <None>0</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>L3 Harris Technologies Inc</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>502431109</cusip>
  <value>203</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>Linde Plc</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>G5494J103</cusip>
  <value>52571</value>
  <shrsOrPrnAmt>
    <sshPrnamt>182836</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>178937</Sole>
    <Shared>0</Shared>
    <None>3899</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Lockheed Martin Corp</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>539830109</cusip>
  <value>514</value>
  <shrsOrPrnAmt>
    <sshPrnamt>1195</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>1195</Sole>
    <Shared>0</Shared>
    <None>0</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Lowe&apos;s Companies Inc</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>548661107</cusip>
  <value>2497</value>
  <shrsOrPrnAmt>
    <sshPrnamt>14295</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>14295</Sole>
    <Shared>0</Shared>
    <None>0</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Magellan Midstream Partners LP</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>559080106</cusip>
  <value>269</value>
  <shrsOrPrnAmt>
    <sshPrnamt>5636</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>5636</Sole>
    <Shared>0</Shared>
    <None>0</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Mastercard Inc-A</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>57636Q104</cusip>
  <value>827</value>
  <shrsOrPrnAmt>
    <sshPrnamt>2622</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>2507</Sole>
    <Shared>0</Shared>
    <None>115</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>McCormick &amp; Co Inc</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>579780206</cusip>
  <value>16765</value>
  <shrsOrPrnAmt>
    <sshPrnamt>201379</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>198499</Sole>
    <Shared>0</Shared>
    <None>2880</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>McDonalds Corp</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>580135101</cusip>
  <value>4057</value>
  <shrsOrPrnAmt>
    <sshPrnamt>16435</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>15915</Sole>
    <Shared>0</Shared>
    <None>520</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Medtronic Plc</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>G5960L103</cusip>
  <value>25748</value>
  <shrsOrPrnAmt>
    <sshPrnamt>286887</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>282435</Sole>
    <Shared>0</Shared>
    <None>4452</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Merck &amp; Co Inc</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>58933Y105</cusip>
  <value>27960</value>
  <shrsOrPrnAmt>
    <sshPrnamt>306681</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>299803</Sole>
    <Shared>0</Shared>
    <None>6878</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Meta Platforms, Inc.</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>30303M102</cusip>
  <value>28901</value>
  <shrsOrPrnAmt>
    <sshPrnamt>179231</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>175133</Sole>
    <Shared>0</Shared>
    <None>4098</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Metlife Inc</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>59156R108</cusip>
  <value>251</value>
  <shrsOrPrnAmt>
    <sshPrnamt>4004</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>4004</Sole>
    <Shared>0</Shared>
    <None>0</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Mettler-Toledo Intl Inc</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>592688105</cusip>
  <value>47950</value>
  <shrsOrPrnAmt>
    <sshPrnamt>41740</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>41117</Sole>
    <Shared>0</Shared>
    <None>623</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Microchip Technology Inc</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>595017104</cusip>
  <value>61629</value>
  <shrsOrPrnAmt>
    <sshPrnamt>1061099</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>1042019</Sole>
    <Shared>0</Shared>
    <None>19080</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Microsoft Corp</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>594918104</cusip>
  <value>92960</value>
  <shrsOrPrnAmt>
    <sshPrnamt>361952</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>354774</Sole>
    <Shared>0</Shared>
    <None>7178</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Middleby Corp</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>596278101</cusip>
  <value>3784</value>
  <shrsOrPrnAmt>
    <sshPrnamt>30189</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>29639</Sole>
    <Shared>0</Shared>
    <None>550</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Mondelez Intl Inc</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>609207105</cusip>
  <value>531</value>
  <shrsOrPrnAmt>
    <sshPrnamt>8556</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>8556</Sole>
    <Shared>0</Shared>
    <None>0</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Morgan Stanley</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>617446448</cusip>
  <value>302</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>National Grid Plc ADR</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>636274409</cusip>
  <value>236</value>
  <shrsOrPrnAmt>
    <sshPrnamt>3646</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>3646</Sole>
    <Shared>0</Shared>
    <None>0</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>NextEra Energy Inc</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>65339F101</cusip>
  <value>59406</value>
  <shrsOrPrnAmt>
    <sshPrnamt>766919</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>751301</Sole>
    <Shared>0</Shared>
    <None>15618</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Nike Inc</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>654106103</cusip>
  <value>11399</value>
  <shrsOrPrnAmt>
    <sshPrnamt>111539</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>110329</Sole>
    <Shared>0</Shared>
    <None>1210</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Nordson Corp</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>655663102</cusip>
  <value>14080</value>
  <shrsOrPrnAmt>
    <sshPrnamt>69551</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>68555</Sole>
    <Shared>0</Shared>
    <None>996</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Norfolk Southern Corp</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>655844108</cusip>
  <value>1788</value>
  <shrsOrPrnAmt>
    <sshPrnamt>7867</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>7472</Sole>
    <Shared>0</Shared>
    <None>395</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Northern Trust Corp</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>665859104</cusip>
  <value>17079</value>
  <shrsOrPrnAmt>
    <sshPrnamt>177020</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>173626</Sole>
    <Shared>0</Shared>
    <None>3394</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Northrop Grumman Corp</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>666807102</cusip>
  <value>26496</value>
  <shrsOrPrnAmt>
    <sshPrnamt>55365</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>54463</Sole>
    <Shared>0</Shared>
    <None>902</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Novartis AG ADR</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>66987V109</cusip>
  <value>297</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>475</value>
  <shrsOrPrnAmt>
    <sshPrnamt>4262</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>4262</Sole>
    <Shared>0</Shared>
    <None>0</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Nvidia Corp</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>67066G104</cusip>
  <value>20426</value>
  <shrsOrPrnAmt>
    <sshPrnamt>134745</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>130748</Sole>
    <Shared>0</Shared>
    <None>3997</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>NVR Inc</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>62944T105</cusip>
  <value>340</value>
  <shrsOrPrnAmt>
    <sshPrnamt>85</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>85</Sole>
    <Shared>0</Shared>
    <None>0</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Omnicom Group Inc</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>681919106</cusip>
  <value>212</value>
  <shrsOrPrnAmt>
    <sshPrnamt>3330</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>3180</Sole>
    <Shared>0</Shared>
    <None>150</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Oracle Corp</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>68389X105</cusip>
  <value>891</value>
  <shrsOrPrnAmt>
    <sshPrnamt>12754</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>12754</Sole>
    <Shared>0</Shared>
    <None>0</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Oshkosh Corp</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>688239201</cusip>
  <value>16908</value>
  <shrsOrPrnAmt>
    <sshPrnamt>205843</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>202639</Sole>
    <Shared>0</Shared>
    <None>3204</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Palo Alto Networks Inc</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>697435105</cusip>
  <value>75638</value>
  <shrsOrPrnAmt>
    <sshPrnamt>153132</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>149689</Sole>
    <Shared>0</Shared>
    <None>3443</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Paychex Inc</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>704326107</cusip>
  <value>326</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>Pentair Plc</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>G7S00T104</cusip>
  <value>229</value>
  <shrsOrPrnAmt>
    <sshPrnamt>5001</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>5001</Sole>
    <Shared>0</Shared>
    <None>0</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Pepsico Inc</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>713448108</cusip>
  <value>52007</value>
  <shrsOrPrnAmt>
    <sshPrnamt>312055</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>307078</Sole>
    <Shared>0</Shared>
    <None>4977</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Pfizer Inc</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>717081103</cusip>
  <value>16836</value>
  <shrsOrPrnAmt>
    <sshPrnamt>321123</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>310998</Sole>
    <Shared>0</Shared>
    <None>10125</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Philip Morris Intl Inc</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>718172109</cusip>
  <value>740</value>
  <shrsOrPrnAmt>
    <sshPrnamt>7496</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>7396</Sole>
    <Shared>0</Shared>
    <None>100</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Phillips 66</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>718546104</cusip>
  <value>30927</value>
  <shrsOrPrnAmt>
    <sshPrnamt>377210</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>370458</Sole>
    <Shared>0</Shared>
    <None>6752</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>PNC Financial Services Group</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>693475105</cusip>
  <value>296</value>
  <shrsOrPrnAmt>
    <sshPrnamt>1876</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>1876</Sole>
    <Shared>0</Shared>
    <None>0</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Polaris Inc</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>731068102</cusip>
  <value>16502</value>
  <shrsOrPrnAmt>
    <sshPrnamt>166212</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>162205</Sole>
    <Shared>0</Shared>
    <None>4007</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Procter &amp; Gamble Co</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>742718109</cusip>
  <value>23824</value>
  <shrsOrPrnAmt>
    <sshPrnamt>165686</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>157041</Sole>
    <Shared>0</Shared>
    <None>8645</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>ProShares UltraShort S&amp;P500 ET</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>74347G416</cusip>
  <value>342</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>362</value>
  <shrsOrPrnAmt>
    <sshPrnamt>3780</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>3780</Sole>
    <Shared>0</Shared>
    <None>0</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Quaker Houghton</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>747316107</cusip>
  <value>4341</value>
  <shrsOrPrnAmt>
    <sshPrnamt>29033</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>28498</Sole>
    <Shared>0</Shared>
    <None>535</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Qualcomm Inc</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>747525103</cusip>
  <value>54961</value>
  <shrsOrPrnAmt>
    <sshPrnamt>430255</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>419756</Sole>
    <Shared>0</Shared>
    <None>10499</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Raytheon Technologies Corp</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>75513E101</cusip>
  <value>34512</value>
  <shrsOrPrnAmt>
    <sshPrnamt>359091</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>350263</Sole>
    <Shared>0</Shared>
    <None>8828</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>RBC Bearings Inc</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>75524B104</cusip>
  <value>11408</value>
  <shrsOrPrnAmt>
    <sshPrnamt>61684</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>60954</Sole>
    <Shared>0</Shared>
    <None>730</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Rockwell Automation Corp</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>773903109</cusip>
  <value>17050</value>
  <shrsOrPrnAmt>
    <sshPrnamt>85543</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>83952</Sole>
    <Shared>0</Shared>
    <None>1591</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Roper Technologies Inc</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>776696106</cusip>
  <value>43892</value>
  <shrsOrPrnAmt>
    <sshPrnamt>111217</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>109333</Sole>
    <Shared>0</Shared>
    <None>1884</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Salesforce Inc</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>79466L302</cusip>
  <value>464</value>
  <shrsOrPrnAmt>
    <sshPrnamt>2811</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>2511</Sole>
    <Shared>0</Shared>
    <None>300</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>SEI Investments Co</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>784117103</cusip>
  <value>6988</value>
  <shrsOrPrnAmt>
    <sshPrnamt>129366</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>127526</Sole>
    <Shared>0</Shared>
    <None>1840</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Shell PLC ADR</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>780259305</cusip>
  <value>202</value>
  <shrsOrPrnAmt>
    <sshPrnamt>3867</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>3867</Sole>
    <Shared>0</Shared>
    <None>0</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Sherwin-Williams Co</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>824348106</cusip>
  <value>25628</value>
  <shrsOrPrnAmt>
    <sshPrnamt>114456</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>112922</Sole>
    <Shared>0</Shared>
    <None>1534</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Sirius XM Holdings Inc</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>82968B103</cusip>
  <value>71</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>Southern Co</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>842587107</cusip>
  <value>262</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 Gold Trust</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>78463V107</cusip>
  <value>252</value>
  <shrsOrPrnAmt>
    <sshPrnamt>1495</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>1443</Sole>
    <Shared>0</Shared>
    <None>52</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>SPDR S&amp;P 500 ETF</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>78462F103</cusip>
  <value>76354</value>
  <shrsOrPrnAmt>
    <sshPrnamt>202396</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>122883</Sole>
    <Shared>0</Shared>
    <None>79513</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>SPDR S&amp;P Biotech ETF</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>78464A870</cusip>
  <value>5277</value>
  <shrsOrPrnAmt>
    <sshPrnamt>71058</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>68552</Sole>
    <Shared>0</Shared>
    <None>2506</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>SPDR S&amp;P M/C 400 ETF</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>78467Y107</cusip>
  <value>3341</value>
  <shrsOrPrnAmt>
    <sshPrnamt>8080</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>4149</Sole>
    <Shared>0</Shared>
    <None>3931</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Starbucks Corp</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>855244109</cusip>
  <value>3830</value>
  <shrsOrPrnAmt>
    <sshPrnamt>50140</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>49625</Sole>
    <Shared>0</Shared>
    <None>515</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>State Street Corp</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>857477103</cusip>
  <value>460</value>
  <shrsOrPrnAmt>
    <sshPrnamt>7459</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>7459</Sole>
    <Shared>0</Shared>
    <None>0</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>STERIS Plc</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>G8473T100</cusip>
  <value>14200</value>
  <shrsOrPrnAmt>
    <sshPrnamt>68881</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>66916</Sole>
    <Shared>0</Shared>
    <None>1965</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Stryker Corp</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>863667101</cusip>
  <value>20136</value>
  <shrsOrPrnAmt>
    <sshPrnamt>101223</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>99486</Sole>
    <Shared>0</Shared>
    <None>1737</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Sysco Corp</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>871829107</cusip>
  <value>321</value>
  <shrsOrPrnAmt>
    <sshPrnamt>3794</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>3794</Sole>
    <Shared>0</Shared>
    <None>0</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>T Rowe Price Group Inc</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>74144T108</cusip>
  <value>15431</value>
  <shrsOrPrnAmt>
    <sshPrnamt>135822</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>133442</Sole>
    <Shared>0</Shared>
    <None>2380</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Target Corp</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>87612E106</cusip>
  <value>358</value>
  <shrsOrPrnAmt>
    <sshPrnamt>2538</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>2538</Sole>
    <Shared>0</Shared>
    <None>0</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>TE Connectivity Ltd</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>H84989104</cusip>
  <value>727</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>Technology Select Sector SPDR </nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>81369Y803</cusip>
  <value>208</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>19135</value>
  <shrsOrPrnAmt>
    <sshPrnamt>77831</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>76587</Sole>
    <Shared>0</Shared>
    <None>1244</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Tesla Inc</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>88160R101</cusip>
  <value>1673</value>
  <shrsOrPrnAmt>
    <sshPrnamt>2484</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>2105</Sole>
    <Shared>0</Shared>
    <None>379</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Texas Instruments Inc</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>882508104</cusip>
  <value>866</value>
  <shrsOrPrnAmt>
    <sshPrnamt>5638</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>5638</Sole>
    <Shared>0</Shared>
    <None>0</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Thermo Fisher Scientific Inc</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>883556102</cusip>
  <value>78627</value>
  <shrsOrPrnAmt>
    <sshPrnamt>144727</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>142238</Sole>
    <Shared>0</Shared>
    <None>2489</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>TJX Companies Inc</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>872540109</cusip>
  <value>41833</value>
  <shrsOrPrnAmt>
    <sshPrnamt>749023</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>735498</Sole>
    <Shared>0</Shared>
    <None>13525</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Toll Brothers Inc</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>889478103</cusip>
  <value>15560</value>
  <shrsOrPrnAmt>
    <sshPrnamt>348881</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>341357</Sole>
    <Shared>0</Shared>
    <None>7524</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Toronto-Dominion Bank</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>891160509</cusip>
  <value>674</value>
  <shrsOrPrnAmt>
    <sshPrnamt>10271</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>8771</Sole>
    <Shared>0</Shared>
    <None>1500</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Tractor Supply Co</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>892356106</cusip>
  <value>24884</value>
  <shrsOrPrnAmt>
    <sshPrnamt>128369</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>125179</Sole>
    <Shared>0</Shared>
    <None>3190</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Travelers Companies Inc</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>89417E109</cusip>
  <value>559</value>
  <shrsOrPrnAmt>
    <sshPrnamt>3303</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>3303</Sole>
    <Shared>0</Shared>
    <None>0</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Truist Financial Corp</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>89832Q109</cusip>
  <value>442</value>
  <shrsOrPrnAmt>
    <sshPrnamt>9311</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>9311</Sole>
    <Shared>0</Shared>
    <None>0</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Tyler Technologies Inc</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>902252105</cusip>
  <value>255</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>2056</value>
  <shrsOrPrnAmt>
    <sshPrnamt>44855</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>43523</Sole>
    <Shared>0</Shared>
    <None>1332</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Union Pacific Corp</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>907818108</cusip>
  <value>28404</value>
  <shrsOrPrnAmt>
    <sshPrnamt>133176</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>129643</Sole>
    <Shared>0</Shared>
    <None>3533</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>United Parcel Service Inc</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>911312106</cusip>
  <value>403</value>
  <shrsOrPrnAmt>
    <sshPrnamt>2208</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>2148</Sole>
    <Shared>0</Shared>
    <None>60</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Unitedhealth Group Inc</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>91324P102</cusip>
  <value>37651</value>
  <shrsOrPrnAmt>
    <sshPrnamt>73303</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>72057</Sole>
    <Shared>0</Shared>
    <None>1246</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>US Bancorp</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>902973304</cusip>
  <value>30067</value>
  <shrsOrPrnAmt>
    <sshPrnamt>653348</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>638868</Sole>
    <Shared>0</Shared>
    <None>14480</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Vanguard Dividend Appreciation</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>921908844</cusip>
  <value>347</value>
  <shrsOrPrnAmt>
    <sshPrnamt>2417</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>2137</Sole>
    <Shared>0</Shared>
    <None>280</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Vanguard ESG US Stock ETF</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>921910733</cusip>
  <value>257</value>
  <shrsOrPrnAmt>
    <sshPrnamt>3864</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>3864</Sole>
    <Shared>0</Shared>
    <None>0</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Vanguard Financials ETF</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>92204A405</cusip>
  <value>224</value>
  <shrsOrPrnAmt>
    <sshPrnamt>2908</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>2908</Sole>
    <Shared>0</Shared>
    <None>0</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Vanguard Growth ETF</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>922908736</cusip>
  <value>578</value>
  <shrsOrPrnAmt>
    <sshPrnamt>2591</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>2506</Sole>
    <Shared>0</Shared>
    <None>85</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Vanguard High Dividend Yield E</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>921946406</cusip>
  <value>327</value>
  <shrsOrPrnAmt>
    <sshPrnamt>3218</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>3175</Sole>
    <Shared>0</Shared>
    <None>43</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Vanguard M/C Growth ETF</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>922908538</cusip>
  <value>330</value>
  <shrsOrPrnAmt>
    <sshPrnamt>1884</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>1876</Sole>
    <Shared>0</Shared>
    <None>8</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Vanguard M/C Value ETF</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>922908512</cusip>
  <value>381</value>
  <shrsOrPrnAmt>
    <sshPrnamt>2941</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>2833</Sole>
    <Shared>0</Shared>
    <None>108</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Vanguard Real Estate ETF</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>922908553</cusip>
  <value>603</value>
  <shrsOrPrnAmt>
    <sshPrnamt>6619</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>5969</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>959</value>
  <shrsOrPrnAmt>
    <sshPrnamt>2764</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>2614</Sole>
    <Shared>0</Shared>
    <None>150</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Vanguard S&amp;P M/C 400 ETF</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>921932885</cusip>
  <value>266</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>55075</value>
  <shrsOrPrnAmt>
    <sshPrnamt>312732</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>271838</Sole>
    <Shared>0</Shared>
    <None>40894</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Vanguard S/C Growth ETF</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>922908595</cusip>
  <value>296</value>
  <shrsOrPrnAmt>
    <sshPrnamt>1503</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>1499</Sole>
    <Shared>0</Shared>
    <None>4</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Vanguard Total Stock Market ET</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>922908769</cusip>
  <value>11342</value>
  <shrsOrPrnAmt>
    <sshPrnamt>60129</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>31524</Sole>
    <Shared>0</Shared>
    <None>28605</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Vanguard Value ETF</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>922908744</cusip>
  <value>396</value>
  <shrsOrPrnAmt>
    <sshPrnamt>3004</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>3004</Sole>
    <Shared>0</Shared>
    <None>0</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Verizon Communications Inc</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>92343V104</cusip>
  <value>2296</value>
  <shrsOrPrnAmt>
    <sshPrnamt>45236</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>42658</Sole>
    <Shared>0</Shared>
    <None>2578</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>VF Corp</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>918204108</cusip>
  <value>572</value>
  <shrsOrPrnAmt>
    <sshPrnamt>12950</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>12950</Sole>
    <Shared>0</Shared>
    <None>0</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Visa Inc-A</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>92826C839</cusip>
  <value>54974</value>
  <shrsOrPrnAmt>
    <sshPrnamt>279213</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>274829</Sole>
    <Shared>0</Shared>
    <None>4384</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Walmart Inc</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>931142103</cusip>
  <value>890</value>
  <shrsOrPrnAmt>
    <sshPrnamt>7319</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>7201</Sole>
    <Shared>0</Shared>
    <None>118</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Walt Disney Co</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>254687106</cusip>
  <value>41332</value>
  <shrsOrPrnAmt>
    <sshPrnamt>437835</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>429696</Sole>
    <Shared>0</Shared>
    <None>8139</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Waste Connections Inc</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>94106B101</cusip>
  <value>57197</value>
  <shrsOrPrnAmt>
    <sshPrnamt>461416</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>454499</Sole>
    <Shared>0</Shared>
    <None>6917</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Waste Management Inc</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>94106L109</cusip>
  <value>385</value>
  <shrsOrPrnAmt>
    <sshPrnamt>2516</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>2516</Sole>
    <Shared>0</Shared>
    <None>0</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Wells Fargo &amp; Co</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>949746101</cusip>
  <value>226</value>
  <shrsOrPrnAmt>
    <sshPrnamt>5779</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>5779</Sole>
    <Shared>0</Shared>
    <None>0</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>West Pharmaceutical Services</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>955306105</cusip>
  <value>491</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>501</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>325</value>
  <shrsOrPrnAmt>
    <sshPrnamt>6696</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>6696</Sole>
    <Shared>0</Shared>
    <None>0</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Zoetis Inc</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>98978V103</cusip>
  <value>11623</value>
  <shrsOrPrnAmt>
    <sshPrnamt>67622</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>66305</Sole>
    <Shared>0</Shared>
    <None>1317</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>iShares MSCI EAFE ETF</nameOfIssuer>
  <titleOfClass>INTL</titleOfClass>
  <cusip>464287465</cusip>
  <value>1719</value>
  <shrsOrPrnAmt>
    <sshPrnamt>27510</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>27225</Sole>
    <Shared>0</Shared>
    <None>285</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Vanguard ESG Intl Stock ETF</nameOfIssuer>
  <titleOfClass>INTL</titleOfClass>
  <cusip>921910725</cusip>
  <value>991</value>
  <shrsOrPrnAmt>
    <sshPrnamt>20201</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>19936</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>31477</value>
  <shrsOrPrnAmt>
    <sshPrnamt>630053</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>590707</Sole>
    <Shared>0</Shared>
    <None>39346</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Vanguard FTSE DM ETF</nameOfIssuer>
  <titleOfClass>INTL</titleOfClass>
  <cusip>921943858</cusip>
  <value>29659</value>
  <shrsOrPrnAmt>
    <sshPrnamt>726944</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>691426</Sole>
    <Shared>0</Shared>
    <None>35518</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Vanguard FTSE EM ETF</nameOfIssuer>
  <titleOfClass>INTL</titleOfClass>
  <cusip>922042858</cusip>
  <value>18980</value>
  <shrsOrPrnAmt>
    <sshPrnamt>455695</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>420496</Sole>
    <Shared>0</Shared>
    <None>35199</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Bank of America Corp</nameOfIssuer>
  <titleOfClass>COM</titleOfClass>
  <cusip>060505682</cusip>
  <value>373</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>14514</value>
  <shrsOrPrnAmt>
    <sshPrnamt>684968</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>587232</Sole>
    <Shared>0</Shared>
    <None>97736</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Invesco BulletShares 2023 Corp</nameOfIssuer>
  <titleOfClass>BOND FUND</titleOfClass>
  <cusip>46138J866</cusip>
  <value>18558</value>
  <shrsOrPrnAmt>
    <sshPrnamt>885842</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>670778</Sole>
    <Shared>0</Shared>
    <None>215064</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Invesco BulletShares 2024 Corp</nameOfIssuer>
  <titleOfClass>BOND FUND</titleOfClass>
  <cusip>46138J841</cusip>
  <value>16085</value>
  <shrsOrPrnAmt>
    <sshPrnamt>775554</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>579263</Sole>
    <Shared>0</Shared>
    <None>196291</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Invesco BulletShares 2025 Corp</nameOfIssuer>
  <titleOfClass>BOND FUND</titleOfClass>
  <cusip>46138J825</cusip>
  <value>12583</value>
  <shrsOrPrnAmt>
    <sshPrnamt>615607</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>435498</Sole>
    <Shared>0</Shared>
    <None>180109</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Invesco BulletShares 2026 Corp</nameOfIssuer>
  <titleOfClass>BOND FUND</titleOfClass>
  <cusip>46138J791</cusip>
  <value>6658</value>
  <shrsOrPrnAmt>
    <sshPrnamt>345495</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>298153</Sole>
    <Shared>0</Shared>
    <None>47342</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Invesco BulletShares 2027 Corp</nameOfIssuer>
  <titleOfClass>BOND FUND</titleOfClass>
  <cusip>46138J783</cusip>
  <value>3297</value>
  <shrsOrPrnAmt>
    <sshPrnamt>170222</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>150865</Sole>
    <Shared>0</Shared>
    <None>19357</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Invesco BulletShares 2028 Corp</nameOfIssuer>
  <titleOfClass>BOND FUND</titleOfClass>
  <cusip>46138J643</cusip>
  <value>859</value>
  <shrsOrPrnAmt>
    <sshPrnamt>43058</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>33998</Sole>
    <Shared>0</Shared>
    <None>9060</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>iShares 1-3 Yr Treasury Bond E</nameOfIssuer>
  <titleOfClass>BOND FUND</titleOfClass>
  <cusip>464287457</cusip>
  <value>232</value>
  <shrsOrPrnAmt>
    <sshPrnamt>2800</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>2800</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>40884</value>
  <shrsOrPrnAmt>
    <sshPrnamt>808790</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>740927</Sole>
    <Shared>0</Shared>
    <None>67863</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>iShares 5-10 Year IG Corporate</nameOfIssuer>
  <titleOfClass>BOND FUND</titleOfClass>
  <cusip>464288638</cusip>
  <value>9573</value>
  <shrsOrPrnAmt>
    <sshPrnamt>187483</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>146328</Sole>
    <Shared>0</Shared>
    <None>41155</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>iShares TIPS Bond ETF</nameOfIssuer>
  <titleOfClass>BOND FUND</titleOfClass>
  <cusip>464287176</cusip>
  <value>9441</value>
  <shrsOrPrnAmt>
    <sshPrnamt>82878</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>81173</Sole>
    <Shared>0</Shared>
    <None>1705</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>PIMCO Intermediate Muni Bond E</nameOfIssuer>
  <titleOfClass>BOND FUND</titleOfClass>
  <cusip>72201R866</cusip>
  <value>3054</value>
  <shrsOrPrnAmt>
    <sshPrnamt>59317</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>58767</Sole>
    <Shared>0</Shared>
    <None>550</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>PIMCO S/T Muni Bond Active ETF</nameOfIssuer>
  <titleOfClass>BOND FUND</titleOfClass>
  <cusip>72201R874</cusip>
  <value>6800</value>
  <shrsOrPrnAmt>
    <sshPrnamt>137008</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>136508</Sole>
    <Shared>0</Shared>
    <None>500</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Vanguard Intermediate Term Cor</nameOfIssuer>
  <titleOfClass>BOND FUND</titleOfClass>
  <cusip>92206C870</cusip>
  <value>542</value>
  <shrsOrPrnAmt>
    <sshPrnamt>6769</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>6584</Sole>
    <Shared>0</Shared>
    <None>185</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Vanguard Limited Term Tax Exem</nameOfIssuer>
  <titleOfClass>BOND FUND</titleOfClass>
  <cusip>922907886</cusip>
  <value>552</value>
  <shrsOrPrnAmt>
    <sshPrnamt>51479</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>51479</Sole>
    <Shared>0</Shared>
    <None>0</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Vanguard MBS ETF</nameOfIssuer>
  <titleOfClass>BOND FUND</titleOfClass>
  <cusip>92206C771</cusip>
  <value>1239</value>
  <shrsOrPrnAmt>
    <sshPrnamt>25909</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>25509</Sole>
    <Shared>0</Shared>
    <None>400</None>
  </votingAuthority>
</infoTable>
<infoTable>
  <nameOfIssuer>Vanguard S/T Treasury ETF</nameOfIssuer>
  <titleOfClass>BOND FUND</titleOfClass>
  <cusip>92206C102</cusip>
  <value>1491</value>
  <shrsOrPrnAmt>
    <sshPrnamt>25339</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>22825</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>1400</value>
  <shrsOrPrnAmt>
    <sshPrnamt>18601</sshPrnamt>
    <sshPrnamtType>SH</sshPrnamtType>
  </shrsOrPrnAmt>
  <investmentDiscretion>SOLE</investmentDiscretion>
  <votingAuthority>
    <Sole>13305</Sole>
    <Shared>0</Shared>
    <None>5296</None>
  </votingAuthority>
</infoTable>
</informationTable>
