<?xml version="1.0" encoding="utf-8"?>
<ns1:informationTable xmlns:ns1="http://www.sec.gov/edgar/document/thirteenf/informationtable">
  <ns1:infoTable>
    <ns1:nameOfIssuer>AAON INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM PAR $0.004</ns1:titleOfClass>
    <ns1:cusip>000360206</ns1:cusip>
    <ns1:figi>BBG001S6CZK0</ns1:figi>
    <ns1:value>147580663</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>1888912</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>1837753</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>51159</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>AGILYSYS INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>00847J105</ns1:cusip>
    <ns1:figi>BBG001S5V6V3</ns1:figi>
    <ns1:value>53029569</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>731039</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>715124</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>15915</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>ALPHA TEKNOVA INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>02080L102</ns1:cusip>
    <ns1:figi>BBG00201BVP4</ns1:figi>
    <ns1:value>997902</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>192274</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>192274</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>0</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>ALPHABET INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>CAP STK CL A</ns1:titleOfClass>
    <ns1:cusip>02079K305</ns1:cusip>
    <ns1:figi>BBG009S39JY5</ns1:figi>
    <ns1:value>460054</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>2975</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>2975</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>0</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>ALPHABET INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>CAP STK CL C</ns1:titleOfClass>
    <ns1:cusip>02079K107</ns1:cusip>
    <ns1:figi>BBG009S3NB21</ns1:figi>
    <ns1:value>345268</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>2210</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>2210</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>0</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>ANSYS INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>03662Q105</ns1:cusip>
    <ns1:figi>BBG001S926L8</ns1:figi>
    <ns1:value>815775</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>2577</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>2577</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>0</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>APPLE INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>037833100</ns1:cusip>
    <ns1:figi>BBG001S5N8V8</ns1:figi>
    <ns1:value>306539</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>1380</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>1380</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>0</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>AXON ENTERPRISE INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>05464C101</ns1:cusip>
    <ns1:figi>BBG001SB2HG5</ns1:figi>
    <ns1:value>15961531</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>30348</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>29308</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>1040</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>AZENTA INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>114340102</ns1:cusip>
    <ns1:figi>BBG001S8F1B8</ns1:figi>
    <ns1:value>66354860</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>1915556</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>1873426</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>42130</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>BALCHEM CORP</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>057665200</ns1:cusip>
    <ns1:figi>BBG001S5P2R4</ns1:figi>
    <ns1:value>193621509</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>1166395</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>1121603</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>44792</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>BENTLEY SYS INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM CL B</ns1:titleOfClass>
    <ns1:cusip>08265T208</ns1:cusip>
    <ns1:figi>BBG001SBWGV7</ns1:figi>
    <ns1:value>329866</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>8385</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>8385</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>0</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>BERKSHIRE HATHAWAY INC DEL</ns1:nameOfIssuer>
    <ns1:titleOfClass>CL B NEW</ns1:titleOfClass>
    <ns1:cusip>084670702</ns1:cusip>
    <ns1:figi>BBG001S90346</ns1:figi>
    <ns1:value>628444</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>1180</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>1180</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>0</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>BIOLIFE SOLUTIONS INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM NEW</ns1:titleOfClass>
    <ns1:cusip>09062W204</ns1:cusip>
    <ns1:figi>BBG001SFGWZ7</ns1:figi>
    <ns1:value>1484988</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>65017</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>65017</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>0</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>BIO-TECHNE CORP</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>09073M104</ns1:cusip>
    <ns1:figi>BBG001S66C28</ns1:figi>
    <ns1:value>19298182</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>329152</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>316632</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>12520</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>BLACKLINE INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>09239B109</ns1:cusip>
    <ns1:figi>BBG0029KJVD8</ns1:figi>
    <ns1:value>102198980</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>2110677</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>2066042</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>44635</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>BOWMAN CONSULTING GROUP LTD</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>103002101</ns1:cusip>
    <ns1:figi>BBG003BPV1R9</ns1:figi>
    <ns1:value>1236233</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>56630</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>56630</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>0</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>BRIGHT HORIZONS FAM SOL IN D</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>109194100</ns1:cusip>
    <ns1:figi>BBG003LFWPT4</ns1:figi>
    <ns1:value>40217053</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>316570</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>291765</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>24805</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>CASELLA WASTE SYS INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>CL A</ns1:titleOfClass>
    <ns1:cusip>147448104</ns1:cusip>
    <ns1:figi>BBG001SB5S05</ns1:figi>
    <ns1:value>321085462</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>2879432</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>2766092</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>113340</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>CCC INTELLIGENT SOLUTIONS HL</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>12510Q100</ns1:cusip>
    <ns1:figi>BBG00WNSJM58</ns1:figi>
    <ns1:value>112327466</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>12439365</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>12019150</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>420215</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>CLEARWATER ANALYTICS HLDGS I</ns1:nameOfIssuer>
    <ns1:titleOfClass>CL A</ns1:titleOfClass>
    <ns1:cusip>185123106</ns1:cusip>
    <ns1:figi>BBG012C765M3</ns1:figi>
    <ns1:value>180164394</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>6722552</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>6465697</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>256855</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>CONSTRUCTION PARTNERS INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM CL A</ns1:titleOfClass>
    <ns1:cusip>21044C107</ns1:cusip>
    <ns1:figi>BBG00KK0CFZ7</ns1:figi>
    <ns1:value>248267081</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>3454391</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>3320868</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>133523</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>COPART INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>217204106</ns1:cusip>
    <ns1:figi>BBG001S7MTB1</ns1:figi>
    <ns1:value>1069042</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>18891</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>18891</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>0</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>COSTAR GROUP INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>22160N109</ns1:cusip>
    <ns1:figi>BBG001SD3DY9</ns1:figi>
    <ns1:value>1227669</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>15495</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>15495</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>0</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>COSTCO WHSL CORP NEW</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>22160K105</ns1:cusip>
    <ns1:figi>BBG001S9KRQ7</ns1:figi>
    <ns1:value>1007256</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>1065</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>1065</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>0</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>CRANE NXT CO</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>224441105</ns1:cusip>
    <ns1:figi>BBG017BXPZ94</ns1:figi>
    <ns1:value>51048103</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>993154</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>971510</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>21644</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>CRYOPORT INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM PAR $0.001</ns1:titleOfClass>
    <ns1:cusip>229050307</ns1:cusip>
    <ns1:figi>BBG001SLKBJ3</ns1:figi>
    <ns1:value>431175</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>70917</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>70917</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>0</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>CSW INDUSTRIALS INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>126402106</ns1:cusip>
    <ns1:figi>BBG007NLG4M2</ns1:figi>
    <ns1:value>175867448</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>603277</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>583130</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>20147</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>DANAHER CORPORATION</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>235851102</ns1:cusip>
    <ns1:figi>BBG001S5QGT0</ns1:figi>
    <ns1:value>211150</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>1030</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>1030</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>0</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>DESCARTES SYS GROUP INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>249906108</ns1:cusip>
    <ns1:figi>BBG001SBJY34</ns1:figi>
    <ns1:value>280252145</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>2779452</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>2676287</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>103165</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>DIGI INTL INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>253798102</ns1:cusip>
    <ns1:figi>BBG001S5Z4V4</ns1:figi>
    <ns1:value>99505080</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>3575461</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>3503071</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>72390</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>ENERGY RECOVERY INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>29270J100</ns1:cusip>
    <ns1:figi>BBG001T28M86</ns1:figi>
    <ns1:value>1422552</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>89525</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>89525</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>0</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>ESCO TECHNOLOGIES INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>296315104</ns1:cusip>
    <ns1:figi>BBG001S6MFD1</ns1:figi>
    <ns1:value>166089836</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>1043802</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>1016386</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>27416</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>EVI INDS INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>26929N102</ns1:cusip>
    <ns1:figi>BBG001SDGWV6</ns1:figi>
    <ns1:value>13619655</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>811660</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>757911</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>53749</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>EXPONENT INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>30214U102</ns1:cusip>
    <ns1:figi>BBG001S9CG99</ns1:figi>
    <ns1:value>225025312</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>2776034</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>2674394</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>101640</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>EXXON MOBIL CORP</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>30231G102</ns1:cusip>
    <ns1:figi>BBG001S69V32</ns1:figi>
    <ns1:value>291260</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>2449</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>2449</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>0</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>FACTSET RESH SYS INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>303075105</ns1:cusip>
    <ns1:figi>BBG001S5XRL6</ns1:figi>
    <ns1:value>653318</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>1437</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>1437</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>0</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>FAIR ISAAC CORP</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>303250104</ns1:cusip>
    <ns1:figi>BBG001S8ZT61</ns1:figi>
    <ns1:value>7122146</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>3862</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>3742</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>120</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>FASTENAL CO</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>311900104</ns1:cusip>
    <ns1:figi>BBG001S5R1F7</ns1:figi>
    <ns1:value>720052</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>9285</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>9285</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>0</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>FEDERAL SIGNAL CORP</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>313855108</ns1:cusip>
    <ns1:figi>BBG001S5RD98</ns1:figi>
    <ns1:value>101386848</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>1378475</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>1342275</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>36200</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>FIRSTSERVICE CORP NEW</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>33767E202</ns1:cusip>
    <ns1:figi>BBG0093LLBP5</ns1:figi>
    <ns1:value>239568517</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>1443619</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>1386503</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>57116</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>FORTINET INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>34959E109</ns1:cusip>
    <ns1:figi>BBG001S77BL6</ns1:figi>
    <ns1:value>987531</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>10259</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>10259</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>0</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>GARMIN LTD</ns1:nameOfIssuer>
    <ns1:titleOfClass>SHS</ns1:titleOfClass>
    <ns1:cusip>H2906T109</ns1:cusip>
    <ns1:figi>BBG001SG0H12</ns1:figi>
    <ns1:value>264899</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>1220</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>1220</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>0</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>GARTNER INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>366651107</ns1:cusip>
    <ns1:figi>BBG001S5SD60</ns1:figi>
    <ns1:value>771902</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>1839</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>1839</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>0</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>GENERAC HLDGS INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>368736104</ns1:cusip>
    <ns1:figi>BBG001T5VGH6</ns1:figi>
    <ns1:value>20972860</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>165597</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>152307</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>13290</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>GRACO INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>384109104</ns1:cusip>
    <ns1:figi>BBG001S5RK56</ns1:figi>
    <ns1:value>38564417</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>461794</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>425849</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>35945</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>GUIDEWIRE SOFTWARE INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>40171V100</ns1:cusip>
    <ns1:figi>BBG001TWHGX5</ns1:figi>
    <ns1:value>47958539</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>255970</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>235555</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>20415</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>HEICO CORP NEW</ns1:nameOfIssuer>
    <ns1:titleOfClass>CL A</ns1:titleOfClass>
    <ns1:cusip>422806208</ns1:cusip>
    <ns1:figi>BBG001S96YM2</ns1:figi>
    <ns1:value>48958331</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>232063</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>223133</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>8930</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>HELIOS TECHNOLOGIES INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>42328H109</ns1:cusip>
    <ns1:figi>BBG001S99DF3</ns1:figi>
    <ns1:value>63264235</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>1971463</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>1928038</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>43425</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>HENRY JACK &amp; ASSOC INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>426281101</ns1:cusip>
    <ns1:figi>BBG001S5SHB5</ns1:figi>
    <ns1:value>36722686</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>201110</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>185305</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>15805</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>HILLMAN SOLUTIONS CORP</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>431636109</ns1:cusip>
    <ns1:figi>BBG00YC6W7C4</ns1:figi>
    <ns1:value>64927282</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>7386494</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>7231869</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>154625</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>HOME DEPOT INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>437076102</ns1:cusip>
    <ns1:figi>BBG001S5RTW7</ns1:figi>
    <ns1:value>238218</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>650</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>650</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>0</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>I3 VERTICALS INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM CL A</ns1:titleOfClass>
    <ns1:cusip>46571Y107</ns1:cusip>
    <ns1:figi>BBG00L32N3P6</ns1:figi>
    <ns1:value>1721275</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>69772</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>69772</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>0</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>IDEXX LABS INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>45168D104</ns1:cusip>
    <ns1:figi>BBG001S5S4Y9</ns1:figi>
    <ns1:value>711395</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>1694</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>1694</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>0</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>ILLINOIS TOOL WKS INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>452308109</ns1:cusip>
    <ns1:figi>BBG001S5SDX0</ns1:figi>
    <ns1:value>225689</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>910</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>910</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>0</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>INTUIT</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>461202103</ns1:cusip>
    <ns1:figi>BBG001S6TWR2</ns1:figi>
    <ns1:value>478912</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>780</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>780</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>0</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>IRADIMED CORP</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>46266A109</ns1:cusip>
    <ns1:figi>BBG006NM92Y1</ns1:figi>
    <ns1:value>1440838</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>27455</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>27455</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>0</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>JOHN BEAN TECHNOLOGIES CORP</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>477839104</ns1:cusip>
    <ns1:figi>BBG001SQLKR2</ns1:figi>
    <ns1:value>116957232</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>957097</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>926761</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>30336</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>JOHNSON &amp; JOHNSON</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>478160104</ns1:cusip>
    <ns1:figi>BBG001S5SHQ9</ns1:figi>
    <ns1:value>333338</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>2010</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>2010</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>0</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>KADANT INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>48282T104</ns1:cusip>
    <ns1:figi>BBG001S8PRM8</ns1:figi>
    <ns1:value>74527555</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>221209</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>213634</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>7575</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>LCI INDS</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>50189K103</ns1:cusip>
    <ns1:figi>BBG001S8G4D9</ns1:figi>
    <ns1:value>15537710</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>177716</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>163066</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>14650</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>LEMAITRE VASCULAR INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>525558201</ns1:cusip>
    <ns1:figi>BBG001SK6CX3</ns1:figi>
    <ns1:value>137702823</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>1641273</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>1595572</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>45701</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>LINDE PLC</ns1:nameOfIssuer>
    <ns1:titleOfClass>SHS</ns1:titleOfClass>
    <ns1:cusip>G54950103</ns1:cusip>
    <ns1:figi>BBG01FND0CH6</ns1:figi>
    <ns1:value>477281</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>1025</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>1025</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>0</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>MAMAS CREATIONS INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>56146T103</ns1:cusip>
    <ns1:figi>BBG001V1FNH5</ns1:figi>
    <ns1:value>1491701</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>229140</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>229140</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>0</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>MARKEL GROUP INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>570535104</ns1:cusip>
    <ns1:figi>BBG001S9ZK95</ns1:figi>
    <ns1:value>271093</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>145</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>145</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>0</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>MASTERCARD INCORPORATED</ns1:nameOfIssuer>
    <ns1:titleOfClass>CL A</ns1:titleOfClass>
    <ns1:cusip>57636Q104</ns1:cusip>
    <ns1:figi>BBG001SKNNS6</ns1:figi>
    <ns1:value>578267</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>1055</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>1055</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>0</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>MERCURY SYS INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>589378108</ns1:cusip>
    <ns1:figi>BBG001SBFLT8</ns1:figi>
    <ns1:value>97305235</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>2258186</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>2201906</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>56280</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>MERIT MED SYS INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>589889104</ns1:cusip>
    <ns1:figi>BBG001S6KLT3</ns1:figi>
    <ns1:value>239451438</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>2265173</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>2177151</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>88022</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>MESA LABS INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>59064R109</ns1:cusip>
    <ns1:figi>BBG001S5T762</ns1:figi>
    <ns1:value>67797346</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>571358</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>559754</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>11604</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>METTLER TOLEDO INTERNATIONAL</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>592688105</ns1:cusip>
    <ns1:figi>BBG001SB87G1</ns1:figi>
    <ns1:value>405052</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>343</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>343</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>0</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>MICROSOFT CORP</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>594918104</ns1:cusip>
    <ns1:figi>BBG001S5TD05</ns1:figi>
    <ns1:value>1018058</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>2712</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>2712</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>0</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>MONTROSE ENVIRONMENTAL GROUP</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>615111101</ns1:cusip>
    <ns1:figi>BBG005Q29V07</ns1:figi>
    <ns1:value>1001408</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>70225</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>70225</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>0</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>MSA SAFETY INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>553498106</ns1:cusip>
    <ns1:figi>BBG001S5TCN2</ns1:figi>
    <ns1:value>116022862</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>790939</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>759550</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>31389</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>N-ABLE INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COMMON STOCK</ns1:titleOfClass>
    <ns1:cusip>62878D100</ns1:cusip>
    <ns1:figi>BBG00YJKWXF6</ns1:figi>
    <ns1:value>960199</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>135430</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>135430</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>0</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>NCINO INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>63947X101</ns1:cusip>
    <ns1:figi>BBG014GJ8XJ0</ns1:figi>
    <ns1:value>59150739</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>2153285</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>2058600</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>94685</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>NEOGEN CORP</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>640491106</ns1:cusip>
    <ns1:figi>BBG001S67B47</ns1:figi>
    <ns1:value>74049248</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>8540859</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>8281607</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>259252</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>NOVANTA INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>67000B104</ns1:cusip>
    <ns1:figi>BBG001S6MRJ9</ns1:figi>
    <ns1:value>174574773</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>1365252</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>1315307</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>49945</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>NV5 GLOBAL INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>62945V109</ns1:cusip>
    <ns1:figi>BBG005BT61P6</ns1:figi>
    <ns1:value>1423513</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>73872</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>73872</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>0</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>OLD DOMINION FREIGHT LINE IN</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>679580100</ns1:cusip>
    <ns1:figi>BBG001S6WQT9</ns1:figi>
    <ns1:value>255455</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>1544</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>1544</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>0</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>OLO INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>CL A</ns1:titleOfClass>
    <ns1:cusip>68134L109</ns1:cusip>
    <ns1:figi>BBG00ZCX7044</ns1:figi>
    <ns1:value>1605945</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>265885</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>265885</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>0</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>ORTHOPEDIATRICS CORP</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>68752L100</ns1:cusip>
    <ns1:figi>BBG00HFFRW48</ns1:figi>
    <ns1:value>1324922</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>53793</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>53793</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>0</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>PALOMAR HLDGS INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>69753M105</ns1:cusip>
    <ns1:figi>BBG00NLMRYV9</ns1:figi>
    <ns1:value>1906097</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>13905</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>13905</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>0</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>PAYCOR HCM INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>70435P102</ns1:cusip>
    <ns1:figi>BBG010FNXN77</ns1:figi>
    <ns1:value>29620261</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>1319976</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>1201631</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>118345</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>PAYLOCITY HLDG CORP</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>70438V106</ns1:cusip>
    <ns1:figi>BBG006598YZ0</ns1:figi>
    <ns1:value>20105891</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>107323</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>98918</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>8405</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>PHREESIA INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>71944F106</ns1:cusip>
    <ns1:figi>BBG001TG2W25</ns1:figi>
    <ns1:value>1979750</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>77455</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>77455</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>0</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>PLANET LABS PBC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM CL A</ns1:titleOfClass>
    <ns1:cusip>72703X106</ns1:cusip>
    <ns1:figi>BBG00ZCV3Q27</ns1:figi>
    <ns1:value>1276795</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>377750</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>377750</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>0</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>POOL CORP</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>73278L105</ns1:cusip>
    <ns1:figi>BBG001S5VBK4</ns1:figi>
    <ns1:value>42624837</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>133893</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>123488</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>10405</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>PROCORE TECHNOLOGIES INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>74275K108</ns1:cusip>
    <ns1:figi>BBG0026ZJ313</ns1:figi>
    <ns1:value>14719951</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>222962</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>205412</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>17550</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>Q2 HLDGS INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>74736L109</ns1:cusip>
    <ns1:figi>BBG005ZVK9Q1</ns1:figi>
    <ns1:value>156651019</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>1957893</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>1888748</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>69145</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>RBC BEARINGS INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>75524B104</ns1:cusip>
    <ns1:figi>BBG001SNYTV1</ns1:figi>
    <ns1:value>235048802</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>730487</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>707717</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>22770</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>REPLIGEN CORP</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>759916109</ns1:cusip>
    <ns1:figi>BBG001S5VNT9</ns1:figi>
    <ns1:value>124726628</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>980247</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>942722</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>37525</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>ROLLINS INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>775711104</ns1:cusip>
    <ns1:figi>BBG001S5VRG4</ns1:figi>
    <ns1:value>59555918</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>1102275</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>1017633</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>84642</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>ROPER TECHNOLOGIES INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>776696106</ns1:cusip>
    <ns1:figi>BBG001S9B362</ns1:figi>
    <ns1:value>1034123</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>1754</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>1754</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>0</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>S&amp;P GLOBAL INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>78409V104</ns1:cusip>
    <ns1:figi>BBG001S5T5M8</ns1:figi>
    <ns1:value>760110</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>1496</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>1496</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>0</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>SIMPSON MFG INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>829073105</ns1:cusip>
    <ns1:figi>BBG001SB9QN0</ns1:figi>
    <ns1:value>177775320</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>1131750</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>1090853</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>40897</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>SIMULATIONS PLUS INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>829214105</ns1:cusip>
    <ns1:figi>BBG001S9TQV4</ns1:figi>
    <ns1:value>63982183</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>2609388</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>2550103</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>59285</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>SITEONE LANDSCAPE SUPPLY INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>82982L103</ns1:cusip>
    <ns1:figi>BBG009T22D67</ns1:figi>
    <ns1:value>143733227</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>1183574</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>1139414</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>44160</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>SMUCKER J M CO</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM NEW</ns1:titleOfClass>
    <ns1:cusip>832696405</ns1:cusip>
    <ns1:figi>BBG001S5W3H5</ns1:figi>
    <ns1:value>218466</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>1845</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>1845</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>0</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>SOUNDTHINKING INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>82536T107</ns1:cusip>
    <ns1:figi>BBG001SM2GR1</ns1:figi>
    <ns1:value>1273114</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>75110</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>75110</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>0</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>SPS COMM INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>78463M107</ns1:cusip>
    <ns1:figi>BBG001T65R07</ns1:figi>
    <ns1:value>167263957</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>1260182</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>1215902</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>44280</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>SPX TECHNOLOGIES INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>78473E103</ns1:cusip>
    <ns1:figi>BBG001S5W9N5</ns1:figi>
    <ns1:value>102920332</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>799195</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>771905</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>27290</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>STERIS PLC</ns1:nameOfIssuer>
    <ns1:titleOfClass>SHS USD</ns1:titleOfClass>
    <ns1:cusip>G8473T100</ns1:cusip>
    <ns1:figi>BBG00MRHG532</ns1:figi>
    <ns1:value>573198</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>2529</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>2529</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>0</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>STEVANATO GROUP S P A</ns1:nameOfIssuer>
    <ns1:titleOfClass>ORD SHS</ns1:titleOfClass>
    <ns1:cusip>T9224W109</ns1:cusip>
    <ns1:figi>BBG001V2NPF1</ns1:figi>
    <ns1:value>167238286</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>8189926</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>7892718</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>297208</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>TECSYS INC COM</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>878950104</ns1:cusip>
    <ns1:value>1815195</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>63720</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>63720</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>0</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>THUNDERBIRD ENTERTAINMENT GROU</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>88605U107</ns1:cusip>
    <ns1:value>965415</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>842105</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>842105</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>0</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>TRACTOR SUPPLY CO</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>892356106</ns1:cusip>
    <ns1:figi>BBG001S7K017</ns1:figi>
    <ns1:value>721534</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>13095</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>13095</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>0</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>TRANSCAT INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>893529107</ns1:cusip>
    <ns1:figi>BBG001S5WVW6</ns1:figi>
    <ns1:value>71267560</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>957254</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>938175</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>19079</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>TREX CO INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>89531P105</ns1:cusip>
    <ns1:figi>BBG001SB6TV8</ns1:figi>
    <ns1:value>116343391</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>2002468</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>1920743</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>81725</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>TYLER TECHNOLOGIES INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>902252105</ns1:cusip>
    <ns1:figi>BBG001S5WZB0</ns1:figi>
    <ns1:value>55686116</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>95781</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>88351</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>7430</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>U S PHYSICAL THERAPY</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>90337L108</ns1:cusip>
    <ns1:figi>BBG001S71ZL9</ns1:figi>
    <ns1:value>1082867</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>14965</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>14965</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>0</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>UL SOLUTIONS INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>CLASS A COM SHS</ns1:titleOfClass>
    <ns1:cusip>903731107</ns1:cusip>
    <ns1:figi>BBG007N72MB0</ns1:figi>
    <ns1:value>40061027</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>710302</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>695735</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>14567</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>UNIVERSAL TECHNICAL INST INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>913915104</ns1:cusip>
    <ns1:figi>BBG001SC4X67</ns1:figi>
    <ns1:value>2180746</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>84920</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>84920</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>0</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>VEEVA SYS INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>CL A COM</ns1:titleOfClass>
    <ns1:cusip>922475108</ns1:cusip>
    <ns1:figi>BBG001TX0CB4</ns1:figi>
    <ns1:value>712031</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>3074</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>3074</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>0</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>VERICEL CORP</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>92346J108</ns1:cusip>
    <ns1:figi>BBG001S6X9M3</ns1:figi>
    <ns1:value>91988592</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>2061600</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>2019530</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>42070</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>VERISK ANALYTICS INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>92345Y106</ns1:cusip>
    <ns1:figi>BBG001SBRX64</ns1:figi>
    <ns1:value>1629469</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>5475</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>5475</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>0</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>VERTEX INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>CL A</ns1:titleOfClass>
    <ns1:cusip>92538J106</ns1:cusip>
    <ns1:figi>BBG00VVT2FV3</ns1:figi>
    <ns1:value>103200377</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>2947740</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>2880395</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>67345</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>VITA COCO CO INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>92846Q107</ns1:cusip>
    <ns1:figi>BBG012QFVTF8</ns1:figi>
    <ns1:value>1089914</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>35560</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>35560</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>0</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>WASTE CONNECTIONS INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>94106B101</ns1:cusip>
    <ns1:figi>BBG001SKJ4K1</ns1:figi>
    <ns1:value>1265612</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>6484</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>6484</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>0</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>WATSCO INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>942622200</ns1:cusip>
    <ns1:figi>BBG001S82CQ2</ns1:figi>
    <ns1:value>53469094</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>105192</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>96982</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>8210</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>WD 40 CO</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>929236107</ns1:cusip>
    <ns1:figi>BBG001S5XD46</ns1:figi>
    <ns1:value>78031861</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>319803</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>313528</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>6275</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>WEST PHARMACEUTICAL SVSC INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>955306105</ns1:cusip>
    <ns1:figi>BBG001S5XK22</ns1:figi>
    <ns1:value>16120927</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>72007</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>66517</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>5490</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>WILLDAN GROUP INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>96924N100</ns1:cusip>
    <ns1:figi>BBG001SNM0H3</ns1:figi>
    <ns1:value>1795467</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>44093</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>44093</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>0</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>WORKIVA INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM CL A</ns1:titleOfClass>
    <ns1:cusip>98139A105</ns1:cusip>
    <ns1:figi>BBG007BVZ8J7</ns1:figi>
    <ns1:value>89511478</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>1179179</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>1139989</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>39190</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>XYLEM INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>98419M100</ns1:cusip>
    <ns1:figi>BBG001V05C73</ns1:figi>
    <ns1:value>570899</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>4779</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>4779</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>0</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
</ns1:informationTable>
