<?xml version="1.0" encoding="utf-8"?>
<xbrl
  xml:lang="en-US"
  xmlns="http://www.xbrl.org/2003/instance"
  xmlns:dei="http://xbrl.sec.gov/dei/2022"
  xmlns:iso4217="http://www.xbrl.org/2003/iso4217"
  xmlns:link="http://www.xbrl.org/2003/linkbase"
  xmlns:spsc="http://www.spscommerce.com/20221231"
  xmlns:srt="http://fasb.org/srt/2022"
  xmlns:us-gaap="http://fasb.org/us-gaap/2022"
  xmlns:utr="http://www.xbrl.org/2009/utr"
  xmlns:xbrldi="http://xbrl.org/2006/xbrldi"
  xmlns:xlink="http://www.w3.org/1999/xlink"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <link:schemaRef xlink:href="spsc-20221231.xsd" xlink:type="simple"/>
    <context id="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
        </entity>
        <period>
            <startDate>2022-01-01</startDate>
            <endDate>2022-12-31</endDate>
        </period>
    </context>
    <context id="ic16735f1f26d45439f3866edfd6b4d89_I20220630">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
        </entity>
        <period>
            <instant>2022-06-30</instant>
        </period>
    </context>
    <context id="i7da9cead03f04c6895126b7b0cd3adf7_I20230210">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
        </entity>
        <period>
            <instant>2023-02-10</instant>
        </period>
    </context>
    <context id="ibbc2d589a09c46368d9dd3e9ea8996c6_I20221231">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
        </entity>
        <period>
            <instant>2022-12-31</instant>
        </period>
    </context>
    <context id="i62ba0be1fd094d818a1f7d0d5504d1e2_I20211231">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
        </entity>
        <period>
            <instant>2021-12-31</instant>
        </period>
    </context>
    <context id="id1c92335c6ab47f7bbbe749172adbece_I20221231">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:StatementEquityComponentsAxis">us-gaap:CommonStockMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <instant>2022-12-31</instant>
        </period>
    </context>
    <context id="i1d2ef0c68a994638b58d2de08612c97e_I20221231">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:StatementEquityComponentsAxis">us-gaap:TreasuryStockMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <instant>2022-12-31</instant>
        </period>
    </context>
    <context id="ie07f2822175c48edbb8d5559ceb82e6f_D20210101-20211231">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
        </entity>
        <period>
            <startDate>2021-01-01</startDate>
            <endDate>2021-12-31</endDate>
        </period>
    </context>
    <context id="i4751184d7e5948509cd8893fd49fb821_D20200101-20201231">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
        </entity>
        <period>
            <startDate>2020-01-01</startDate>
            <endDate>2020-12-31</endDate>
        </period>
    </context>
    <context id="i9ea0388b253f49c38957f40d08028afb_I20191231">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:StatementEquityComponentsAxis">us-gaap:CommonStockMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <instant>2019-12-31</instant>
        </period>
    </context>
    <context id="i72c3e3741fda45f4a532612ab8784a69_I20191231">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:StatementEquityComponentsAxis">us-gaap:TreasuryStockMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <instant>2019-12-31</instant>
        </period>
    </context>
    <context id="i12162a7cc6e447bf9cea2634f80b45b4_I20191231">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:StatementEquityComponentsAxis">us-gaap:AdditionalPaidInCapitalMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <instant>2019-12-31</instant>
        </period>
    </context>
    <context id="ia3a864f52fd04e9e8fca197829fc3b9e_I20191231">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:StatementEquityComponentsAxis">us-gaap:RetainedEarningsMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <instant>2019-12-31</instant>
        </period>
    </context>
    <context id="i7b59dfa694bc47e084788f6fd33fd251_I20191231">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:StatementEquityComponentsAxis">us-gaap:AccumulatedOtherComprehensiveIncomeMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <instant>2019-12-31</instant>
        </period>
    </context>
    <context id="i489b2464c80746b9ae7427577897ad3e_I20191231">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
        </entity>
        <period>
            <instant>2019-12-31</instant>
        </period>
    </context>
    <context id="i5fedfd22c1844e8288575273058c346b_D20200101-20201231">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:StatementEquityComponentsAxis">us-gaap:AdditionalPaidInCapitalMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2020-01-01</startDate>
            <endDate>2020-12-31</endDate>
        </period>
    </context>
    <context id="icadb613605f14558958b2da4ce68e897_D20200101-20201231">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:StatementEquityComponentsAxis">us-gaap:CommonStockMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2020-01-01</startDate>
            <endDate>2020-12-31</endDate>
        </period>
    </context>
    <context id="i8f83899cb6ef4a1fb402400c585f8ee2_D20200101-20201231">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:StatementEquityComponentsAxis">us-gaap:TreasuryStockMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2020-01-01</startDate>
            <endDate>2020-12-31</endDate>
        </period>
    </context>
    <context id="i409a5f53ee614c1384a84a161a7fb458_D20200101-20201231">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:StatementEquityComponentsAxis">us-gaap:RetainedEarningsMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2020-01-01</startDate>
            <endDate>2020-12-31</endDate>
        </period>
    </context>
    <context id="i4a51c705cf0145b2858e53bcb3fb664a_D20200101-20201231">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:StatementEquityComponentsAxis">us-gaap:AccumulatedOtherComprehensiveIncomeMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2020-01-01</startDate>
            <endDate>2020-12-31</endDate>
        </period>
    </context>
    <context id="i7b7f3bd982e646e1b0de13517459040c_I20191231">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="srt:CumulativeEffectPeriodOfAdoptionAxis">srt:CumulativeEffectPeriodOfAdoptionAdjustmentMember</xbrldi:explicitMember>
                <xbrldi:explicitMember dimension="us-gaap:StatementEquityComponentsAxis">us-gaap:RetainedEarningsMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <instant>2019-12-31</instant>
        </period>
    </context>
    <context id="i231dd878fe454b65ba1516ed9f0f775b_I20191231">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="srt:CumulativeEffectPeriodOfAdoptionAxis">srt:CumulativeEffectPeriodOfAdoptionAdjustmentMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <instant>2019-12-31</instant>
        </period>
    </context>
    <context id="i2b1c715af20a4a82a25faa6852e8ae9f_I20201231">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:StatementEquityComponentsAxis">us-gaap:CommonStockMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <instant>2020-12-31</instant>
        </period>
    </context>
    <context id="ib6d596086dec4dbc81675ef228af0d6b_I20201231">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:StatementEquityComponentsAxis">us-gaap:TreasuryStockMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <instant>2020-12-31</instant>
        </period>
    </context>
    <context id="ia028190683f04293ba664c62114f438d_I20201231">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:StatementEquityComponentsAxis">us-gaap:AdditionalPaidInCapitalMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <instant>2020-12-31</instant>
        </period>
    </context>
    <context id="ie66762cea639479fb95be6d04ab5e129_I20201231">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:StatementEquityComponentsAxis">us-gaap:RetainedEarningsMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <instant>2020-12-31</instant>
        </period>
    </context>
    <context id="i01543a1f934d48929661fd5aa9b977dd_I20201231">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:StatementEquityComponentsAxis">us-gaap:AccumulatedOtherComprehensiveIncomeMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <instant>2020-12-31</instant>
        </period>
    </context>
    <context id="i3ead637906154a2bab043152edc06771_I20201231">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
        </entity>
        <period>
            <instant>2020-12-31</instant>
        </period>
    </context>
    <context id="i9fbe11ac357a46d1949e2e1f6f69244b_D20210101-20211231">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:StatementEquityComponentsAxis">us-gaap:AdditionalPaidInCapitalMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2021-01-01</startDate>
            <endDate>2021-12-31</endDate>
        </period>
    </context>
    <context id="ib518a7e0364f40418060f776f36842db_D20210101-20211231">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:StatementEquityComponentsAxis">us-gaap:CommonStockMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2021-01-01</startDate>
            <endDate>2021-12-31</endDate>
        </period>
    </context>
    <context id="i15d2786853d94f4ba1288bfdc26e3969_D20210101-20211231">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:StatementEquityComponentsAxis">us-gaap:TreasuryStockMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2021-01-01</startDate>
            <endDate>2021-12-31</endDate>
        </period>
    </context>
    <context id="i0b550c6c6f924c9e81c52b16a31c5acb_D20210101-20211231">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:StatementEquityComponentsAxis">us-gaap:RetainedEarningsMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2021-01-01</startDate>
            <endDate>2021-12-31</endDate>
        </period>
    </context>
    <context id="ic1c0c3ebe0be4293887fbf9bbec15db7_D20210101-20211231">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:StatementEquityComponentsAxis">us-gaap:AccumulatedOtherComprehensiveIncomeMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2021-01-01</startDate>
            <endDate>2021-12-31</endDate>
        </period>
    </context>
    <context id="i58a2c0464fbe4f0281abc01621932200_I20211231">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:StatementEquityComponentsAxis">us-gaap:CommonStockMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <instant>2021-12-31</instant>
        </period>
    </context>
    <context id="i8f022975d343482ca526a176397071a8_I20211231">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:StatementEquityComponentsAxis">us-gaap:TreasuryStockMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <instant>2021-12-31</instant>
        </period>
    </context>
    <context id="ibccc4602e57c43c3a07820a4544404f1_I20211231">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:StatementEquityComponentsAxis">us-gaap:AdditionalPaidInCapitalMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <instant>2021-12-31</instant>
        </period>
    </context>
    <context id="i0d67760894dc47f78a0146b5ade16468_I20211231">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:StatementEquityComponentsAxis">us-gaap:RetainedEarningsMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <instant>2021-12-31</instant>
        </period>
    </context>
    <context id="i903700d1636747d6aba38df00068e04d_I20211231">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:StatementEquityComponentsAxis">us-gaap:AccumulatedOtherComprehensiveIncomeMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <instant>2021-12-31</instant>
        </period>
    </context>
    <context id="i4495795978324e00a5897641e4a18c6c_D20220101-20221231">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:StatementEquityComponentsAxis">us-gaap:AdditionalPaidInCapitalMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2022-01-01</startDate>
            <endDate>2022-12-31</endDate>
        </period>
    </context>
    <context id="i9ffba95c94d84178b9a75c1d2dfbe90f_D20220101-20221231">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:StatementEquityComponentsAxis">us-gaap:CommonStockMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2022-01-01</startDate>
            <endDate>2022-12-31</endDate>
        </period>
    </context>
    <context id="i3c0eb8595b204c2aa4cfcddad03e3f46_D20220101-20221231">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:StatementEquityComponentsAxis">us-gaap:TreasuryStockMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2022-01-01</startDate>
            <endDate>2022-12-31</endDate>
        </period>
    </context>
    <context id="ib939d0c039e943a29f716bd2783b371f_D20220101-20221231">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:StatementEquityComponentsAxis">us-gaap:RetainedEarningsMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2022-01-01</startDate>
            <endDate>2022-12-31</endDate>
        </period>
    </context>
    <context id="i033bc8f6a61a4737ac09c882ae096965_D20220101-20221231">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:StatementEquityComponentsAxis">us-gaap:AccumulatedOtherComprehensiveIncomeMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2022-01-01</startDate>
            <endDate>2022-12-31</endDate>
        </period>
    </context>
    <context id="ic96744fdf9bf44e3937b961d2e68dc70_I20221231">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:StatementEquityComponentsAxis">us-gaap:AdditionalPaidInCapitalMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <instant>2022-12-31</instant>
        </period>
    </context>
    <context id="i66a237a8b97c482fb637417ecbd21480_I20221231">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:StatementEquityComponentsAxis">us-gaap:RetainedEarningsMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <instant>2022-12-31</instant>
        </period>
    </context>
    <context id="id070347e01214feea4c9790d3fdb3dee_I20221231">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:StatementEquityComponentsAxis">us-gaap:AccumulatedOtherComprehensiveIncomeMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <instant>2022-12-31</instant>
        </period>
    </context>
    <context id="ia3e892e9e9c74cd1b106db5a2559b64d_D20220101-20221231">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:PropertyPlantAndEquipmentByTypeAxis">spsc:InternallyDevelopedSoftwareMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2022-01-01</startDate>
            <endDate>2022-12-31</endDate>
        </period>
    </context>
    <context id="i8933861cb9f54e038451ec0679c6b0b3_D20220101-20221231">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="srt:RangeAxis">srt:MinimumMember</xbrldi:explicitMember>
                <xbrldi:explicitMember dimension="us-gaap:PropertyPlantAndEquipmentByTypeAxis">spsc:ComputerEquipmentAndSoftwareMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2022-01-01</startDate>
            <endDate>2022-12-31</endDate>
        </period>
    </context>
    <context id="i02e371aa8621497d9e2e3005b7d1ffa5_D20220101-20221231">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="srt:RangeAxis">srt:MaximumMember</xbrldi:explicitMember>
                <xbrldi:explicitMember dimension="us-gaap:PropertyPlantAndEquipmentByTypeAxis">spsc:ComputerEquipmentAndSoftwareMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2022-01-01</startDate>
            <endDate>2022-12-31</endDate>
        </period>
    </context>
    <context id="i10e8722104024381b068cb2b06a67eaa_D20220101-20221231">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="srt:RangeAxis">srt:MinimumMember</xbrldi:explicitMember>
                <xbrldi:explicitMember dimension="us-gaap:PropertyPlantAndEquipmentByTypeAxis">spsc:OfficeEquipmentAndFurnitureMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2022-01-01</startDate>
            <endDate>2022-12-31</endDate>
        </period>
    </context>
    <context id="i7b16c64967a244cb967c6df24ca93515_D20220101-20221231">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="srt:RangeAxis">srt:MaximumMember</xbrldi:explicitMember>
                <xbrldi:explicitMember dimension="us-gaap:PropertyPlantAndEquipmentByTypeAxis">spsc:OfficeEquipmentAndFurnitureMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2022-01-01</startDate>
            <endDate>2022-12-31</endDate>
        </period>
    </context>
    <context id="i016074f3b4b3412e87e54bd0cf5c2088_D20220101-20221231">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="srt:RangeAxis">srt:MinimumMember</xbrldi:explicitMember>
                <xbrldi:explicitMember dimension="us-gaap:FiniteLivedIntangibleAssetsByMajorClassAxis">us-gaap:CustomerRelationshipsMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2022-01-01</startDate>
            <endDate>2022-12-31</endDate>
        </period>
    </context>
    <context id="icdff609690dd4618ae56db380dca3f96_D20220101-20221231">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="srt:RangeAxis">srt:MaximumMember</xbrldi:explicitMember>
                <xbrldi:explicitMember dimension="us-gaap:FiniteLivedIntangibleAssetsByMajorClassAxis">us-gaap:CustomerRelationshipsMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2022-01-01</startDate>
            <endDate>2022-12-31</endDate>
        </period>
    </context>
    <context id="ia697426b5781427dba6616252cc052f1_D20220101-20221231">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="srt:RangeAxis">srt:MinimumMember</xbrldi:explicitMember>
                <xbrldi:explicitMember dimension="us-gaap:FiniteLivedIntangibleAssetsByMajorClassAxis">us-gaap:TechnologyBasedIntangibleAssetsMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2022-01-01</startDate>
            <endDate>2022-12-31</endDate>
        </period>
    </context>
    <context id="i001f3eb48d06455b954608a733a617c8_D20220101-20221231">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="srt:RangeAxis">srt:MaximumMember</xbrldi:explicitMember>
                <xbrldi:explicitMember dimension="us-gaap:FiniteLivedIntangibleAssetsByMajorClassAxis">us-gaap:TechnologyBasedIntangibleAssetsMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2022-01-01</startDate>
            <endDate>2022-12-31</endDate>
        </period>
    </context>
    <context id="i495a0b29cafe4a9eb414b4140e84bec1_D20220719-20220719">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:BusinessAcquisitionAxis">spsc:GCommerceIncMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2022-07-19</startDate>
            <endDate>2022-07-19</endDate>
        </period>
    </context>
    <context id="i1dcba61a15a04284bad3af3962698338_D20221004-20221004">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:BusinessAcquisitionAxis">spsc:InterTradeSystemsIncMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2022-10-04</startDate>
            <endDate>2022-10-04</endDate>
        </period>
    </context>
    <context id="ibdac1ca745604d6e8840a0f0c1c23bf0_I20221004">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:BusinessAcquisitionAxis">spsc:InterTradeSystemsIncMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <instant>2022-10-04</instant>
        </period>
    </context>
    <context id="i0f16e266da3b4333ac471989e36cbe61_I20221231">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:BusinessAcquisitionAxis">spsc:InterTradeSystemsIncMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <instant>2022-12-31</instant>
        </period>
    </context>
    <context id="ibc96b247713e457094d75ab57c020e51_D20220930-20220930">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="srt:RestatementAxis">srt:ScenarioPreviouslyReportedMember</xbrldi:explicitMember>
                <xbrldi:explicitMember dimension="us-gaap:BusinessAcquisitionAxis">spsc:GCommerceIncMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2022-09-30</startDate>
            <endDate>2022-09-30</endDate>
        </period>
    </context>
    <context id="i5b472de518c04d73aca2e3dbd0a13a9e_D20220101-20220930">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="srt:RestatementAxis">srt:RestatementAdjustmentMember</xbrldi:explicitMember>
                <xbrldi:explicitMember dimension="us-gaap:BusinessAcquisitionAxis">spsc:GCommerceIncMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2022-01-01</startDate>
            <endDate>2022-09-30</endDate>
        </period>
    </context>
    <context id="i0207b01ae2e644489c3a15e769ae5534_D20220101-20221231">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:BusinessAcquisitionAxis">spsc:GCommerceIncMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2022-01-01</startDate>
            <endDate>2022-12-31</endDate>
        </period>
    </context>
    <context id="id2ea5b1f234b490b9f01582feb98ffff_D20220101-20221231">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:BusinessAcquisitionAxis">spsc:InterTradeSystemsIncMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2022-01-01</startDate>
            <endDate>2022-12-31</endDate>
        </period>
    </context>
    <context id="iaa977065ec534554be0e1f2e9d97d659_I20220930">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="srt:RestatementAxis">srt:ScenarioPreviouslyReportedMember</xbrldi:explicitMember>
                <xbrldi:explicitMember dimension="us-gaap:BusinessAcquisitionAxis">spsc:GCommerceIncMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <instant>2022-09-30</instant>
        </period>
    </context>
    <context id="i451b6df984f54b95b575f545928ea3d9_I20220930">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="srt:RestatementAxis">srt:RestatementAdjustmentMember</xbrldi:explicitMember>
                <xbrldi:explicitMember dimension="us-gaap:BusinessAcquisitionAxis">spsc:GCommerceIncMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <instant>2022-09-30</instant>
        </period>
    </context>
    <context id="i5326af3d5d33421e8a6e271c600b7a15_I20221231">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:BusinessAcquisitionAxis">spsc:GCommerceIncMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <instant>2022-12-31</instant>
        </period>
    </context>
    <context id="i14501a691778485d8b657bef0d08dc8a_I20220930">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="srt:RestatementAxis">srt:ScenarioPreviouslyReportedMember</xbrldi:explicitMember>
                <xbrldi:explicitMember dimension="us-gaap:BusinessAcquisitionAxis">spsc:GCommerceIncMember</xbrldi:explicitMember>
                <xbrldi:explicitMember dimension="us-gaap:FiniteLivedIntangibleAssetsByMajorClassAxis">us-gaap:CustomerRelationshipsMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <instant>2022-09-30</instant>
        </period>
    </context>
    <context id="i2cf2c413d31248bdb80e2effb23be03b_I20220930">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="srt:RestatementAxis">srt:RestatementAdjustmentMember</xbrldi:explicitMember>
                <xbrldi:explicitMember dimension="us-gaap:BusinessAcquisitionAxis">spsc:GCommerceIncMember</xbrldi:explicitMember>
                <xbrldi:explicitMember dimension="us-gaap:FiniteLivedIntangibleAssetsByMajorClassAxis">us-gaap:CustomerRelationshipsMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <instant>2022-09-30</instant>
        </period>
    </context>
    <context id="i05ee805b24664d85bbcae6b65e806a98_I20221231">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:BusinessAcquisitionAxis">spsc:GCommerceIncMember</xbrldi:explicitMember>
                <xbrldi:explicitMember dimension="us-gaap:FiniteLivedIntangibleAssetsByMajorClassAxis">us-gaap:CustomerRelationshipsMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <instant>2022-12-31</instant>
        </period>
    </context>
    <context id="i1f3f2ed6bc02435da64df16c76ee7e1a_I20221231">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:BusinessAcquisitionAxis">spsc:InterTradeSystemsIncMember</xbrldi:explicitMember>
                <xbrldi:explicitMember dimension="us-gaap:FiniteLivedIntangibleAssetsByMajorClassAxis">us-gaap:CustomerRelationshipsMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <instant>2022-12-31</instant>
        </period>
    </context>
    <context id="i359d007b1436486580588eb1bc9e132f_I20220930">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="srt:RestatementAxis">srt:ScenarioPreviouslyReportedMember</xbrldi:explicitMember>
                <xbrldi:explicitMember dimension="us-gaap:BusinessAcquisitionAxis">spsc:GCommerceIncMember</xbrldi:explicitMember>
                <xbrldi:explicitMember dimension="us-gaap:FiniteLivedIntangibleAssetsByMajorClassAxis">us-gaap:DevelopedTechnologyRightsMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <instant>2022-09-30</instant>
        </period>
    </context>
    <context id="icdcff980db954023b7a10ca92f1abc58_I20220930">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="srt:RestatementAxis">srt:RestatementAdjustmentMember</xbrldi:explicitMember>
                <xbrldi:explicitMember dimension="us-gaap:BusinessAcquisitionAxis">spsc:GCommerceIncMember</xbrldi:explicitMember>
                <xbrldi:explicitMember dimension="us-gaap:FiniteLivedIntangibleAssetsByMajorClassAxis">us-gaap:DevelopedTechnologyRightsMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <instant>2022-09-30</instant>
        </period>
    </context>
    <context id="i738817c4be0e4b52afcbdf103d2cd075_I20221231">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:BusinessAcquisitionAxis">spsc:GCommerceIncMember</xbrldi:explicitMember>
                <xbrldi:explicitMember dimension="us-gaap:FiniteLivedIntangibleAssetsByMajorClassAxis">us-gaap:DevelopedTechnologyRightsMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <instant>2022-12-31</instant>
        </period>
    </context>
    <context id="i96f8ea5781aa4137b30268dd4f88f825_I20221231">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:BusinessAcquisitionAxis">spsc:InterTradeSystemsIncMember</xbrldi:explicitMember>
                <xbrldi:explicitMember dimension="us-gaap:FiniteLivedIntangibleAssetsByMajorClassAxis">us-gaap:DevelopedTechnologyRightsMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <instant>2022-12-31</instant>
        </period>
    </context>
    <context id="i1774a1bf39cd4414ae0d2736f5524d06_D20220101-20221231">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:BusinessAcquisitionAxis">spsc:GCommerceIncMember</xbrldi:explicitMember>
                <xbrldi:explicitMember dimension="us-gaap:FiniteLivedIntangibleAssetsByMajorClassAxis">us-gaap:CustomerRelationshipsMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2022-01-01</startDate>
            <endDate>2022-12-31</endDate>
        </period>
    </context>
    <context id="ic5b6b06556d9410396ebfed5e272f0a4_D20220101-20221231">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:BusinessAcquisitionAxis">spsc:InterTradeSystemsIncMember</xbrldi:explicitMember>
                <xbrldi:explicitMember dimension="us-gaap:FiniteLivedIntangibleAssetsByMajorClassAxis">us-gaap:CustomerRelationshipsMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2022-01-01</startDate>
            <endDate>2022-12-31</endDate>
        </period>
    </context>
    <context id="i7f56ddf6c6924254afa6aeacef26901f_D20220101-20221231">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:BusinessAcquisitionAxis">spsc:GCommerceIncMember</xbrldi:explicitMember>
                <xbrldi:explicitMember dimension="us-gaap:FiniteLivedIntangibleAssetsByMajorClassAxis">us-gaap:DevelopedTechnologyRightsMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2022-01-01</startDate>
            <endDate>2022-12-31</endDate>
        </period>
    </context>
    <context id="idcdd08b28a1f4f6da78fbc9d262fc603_D20220101-20221231">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:BusinessAcquisitionAxis">spsc:InterTradeSystemsIncMember</xbrldi:explicitMember>
                <xbrldi:explicitMember dimension="us-gaap:FiniteLivedIntangibleAssetsByMajorClassAxis">us-gaap:DevelopedTechnologyRightsMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2022-01-01</startDate>
            <endDate>2022-12-31</endDate>
        </period>
    </context>
    <context id="i4212edfd7a864b77a9aa4959da75c1b0_D20220101-20221231">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="srt:ProductOrServiceAxis">spsc:FulfillmentMember</xbrldi:explicitMember>
                <xbrldi:explicitMember dimension="us-gaap:ContractWithCustomerDurationAxis">spsc:RecurringRevenuesMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2022-01-01</startDate>
            <endDate>2022-12-31</endDate>
        </period>
    </context>
    <context id="i0c9c0efdb6234df4b8e7b3f8a733980f_D20210101-20211231">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="srt:ProductOrServiceAxis">spsc:FulfillmentMember</xbrldi:explicitMember>
                <xbrldi:explicitMember dimension="us-gaap:ContractWithCustomerDurationAxis">spsc:RecurringRevenuesMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2021-01-01</startDate>
            <endDate>2021-12-31</endDate>
        </period>
    </context>
    <context id="ie71fa42c601d4431aee81b0075fab5ec_D20200101-20201231">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="srt:ProductOrServiceAxis">spsc:FulfillmentMember</xbrldi:explicitMember>
                <xbrldi:explicitMember dimension="us-gaap:ContractWithCustomerDurationAxis">spsc:RecurringRevenuesMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2020-01-01</startDate>
            <endDate>2020-12-31</endDate>
        </period>
    </context>
    <context id="idbdad8eabbc44a3aaefc7bd6f5b7db1b_D20220101-20221231">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="srt:ProductOrServiceAxis">spsc:AnalyticsMember</xbrldi:explicitMember>
                <xbrldi:explicitMember dimension="us-gaap:ContractWithCustomerDurationAxis">spsc:RecurringRevenuesMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2022-01-01</startDate>
            <endDate>2022-12-31</endDate>
        </period>
    </context>
    <context id="id055b691debe48869fc6c8223dec99b9_D20210101-20211231">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="srt:ProductOrServiceAxis">spsc:AnalyticsMember</xbrldi:explicitMember>
                <xbrldi:explicitMember dimension="us-gaap:ContractWithCustomerDurationAxis">spsc:RecurringRevenuesMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2021-01-01</startDate>
            <endDate>2021-12-31</endDate>
        </period>
    </context>
    <context id="i4b8e4dc876b0490c9d54336bfcfb1027_D20200101-20201231">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="srt:ProductOrServiceAxis">spsc:AnalyticsMember</xbrldi:explicitMember>
                <xbrldi:explicitMember dimension="us-gaap:ContractWithCustomerDurationAxis">spsc:RecurringRevenuesMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2020-01-01</startDate>
            <endDate>2020-12-31</endDate>
        </period>
    </context>
    <context id="i58ffff905229495ab08e4387fdc27ec2_D20220101-20221231">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="srt:ProductOrServiceAxis">spsc:OtherMember</xbrldi:explicitMember>
                <xbrldi:explicitMember dimension="us-gaap:ContractWithCustomerDurationAxis">spsc:RecurringRevenuesMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2022-01-01</startDate>
            <endDate>2022-12-31</endDate>
        </period>
    </context>
    <context id="i6c6de697a5e24ceeab18177f841af1ad_D20210101-20211231">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="srt:ProductOrServiceAxis">spsc:OtherMember</xbrldi:explicitMember>
                <xbrldi:explicitMember dimension="us-gaap:ContractWithCustomerDurationAxis">spsc:RecurringRevenuesMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2021-01-01</startDate>
            <endDate>2021-12-31</endDate>
        </period>
    </context>
    <context id="i3efe40a3002946b6ab235465d1aa1e5e_D20200101-20201231">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="srt:ProductOrServiceAxis">spsc:OtherMember</xbrldi:explicitMember>
                <xbrldi:explicitMember dimension="us-gaap:ContractWithCustomerDurationAxis">spsc:RecurringRevenuesMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2020-01-01</startDate>
            <endDate>2020-12-31</endDate>
        </period>
    </context>
    <context id="i32be3a5fb91a49e296af046718b70cbe_D20220101-20221231">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:ContractWithCustomerDurationAxis">spsc:RecurringRevenuesMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2022-01-01</startDate>
            <endDate>2022-12-31</endDate>
        </period>
    </context>
    <context id="iac417330a9a245118d5b3aa20458be07_D20210101-20211231">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:ContractWithCustomerDurationAxis">spsc:RecurringRevenuesMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2021-01-01</startDate>
            <endDate>2021-12-31</endDate>
        </period>
    </context>
    <context id="ib6d2f3bc651b4a22a5912b82457639ec_D20200101-20201231">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:ContractWithCustomerDurationAxis">spsc:RecurringRevenuesMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2020-01-01</startDate>
            <endDate>2020-12-31</endDate>
        </period>
    </context>
    <context id="iceb7ad52dc2b4e2c80b47336a7ad3681_D20220101-20221231">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:ContractWithCustomerDurationAxis">spsc:OneTimeRevenuesMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2022-01-01</startDate>
            <endDate>2022-12-31</endDate>
        </period>
    </context>
    <context id="ie2bab9310f864aa88b034feb066c6646_D20210101-20211231">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:ContractWithCustomerDurationAxis">spsc:OneTimeRevenuesMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2021-01-01</startDate>
            <endDate>2021-12-31</endDate>
        </period>
    </context>
    <context id="idc1f3645927f4f25b51cfa342e2f2d54_D20200101-20201231">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:ContractWithCustomerDurationAxis">spsc:OneTimeRevenuesMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2020-01-01</startDate>
            <endDate>2020-12-31</endDate>
        </period>
    </context>
    <context id="icda5178f340747d384f10560c6bb2a83_D20220101-20221231">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="srt:RangeAxis">srt:MinimumMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2022-01-01</startDate>
            <endDate>2022-12-31</endDate>
        </period>
    </context>
    <context id="i9b3042d480284024b1d772a96be2ed30_D20220101-20221231">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="srt:RangeAxis">srt:MaximumMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2022-01-01</startDate>
            <endDate>2022-12-31</endDate>
        </period>
    </context>
    <context id="id750e9f5ae1640e7bda3c097ab31c000_I20211231">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:TypeOfArrangementAxis">spsc:SetUpFeesMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <instant>2021-12-31</instant>
        </period>
    </context>
    <context id="i0e574c890a2147cca802ea186acf400b_I20201231">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:TypeOfArrangementAxis">spsc:SetUpFeesMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <instant>2020-12-31</instant>
        </period>
    </context>
    <context id="i407cf284506d40d6b5c0b06c107835f4_D20220101-20221231">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:TypeOfArrangementAxis">spsc:SetUpFeesMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2022-01-01</startDate>
            <endDate>2022-12-31</endDate>
        </period>
    </context>
    <context id="i026f2218b6f54f9c89c3fe0e0c2e7ce3_D20210101-20211231">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:TypeOfArrangementAxis">spsc:SetUpFeesMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2021-01-01</startDate>
            <endDate>2021-12-31</endDate>
        </period>
    </context>
    <context id="ic5c4c5ed9974471888b75dc59a490415_I20221231">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:TypeOfArrangementAxis">spsc:SetUpFeesMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <instant>2022-12-31</instant>
        </period>
    </context>
    <context id="i45200f1c16a340328b74ea0932d68140_I20221231">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:FairValueByFairValueHierarchyLevelAxis">us-gaap:FairValueInputsLevel1Member</xbrldi:explicitMember>
                <xbrldi:explicitMember dimension="us-gaap:FinancialInstrumentAxis">us-gaap:MoneyMarketFundsMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <instant>2022-12-31</instant>
        </period>
    </context>
    <context id="i2ef78a8c406c4b0a891e193f1db00034_I20211231">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:FairValueByFairValueHierarchyLevelAxis">us-gaap:FairValueInputsLevel1Member</xbrldi:explicitMember>
                <xbrldi:explicitMember dimension="us-gaap:FinancialInstrumentAxis">us-gaap:MoneyMarketFundsMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <instant>2021-12-31</instant>
        </period>
    </context>
    <context id="idc799120b0fb4546bf79ec6cba7ff0a9_I20221231">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:FairValueByFairValueHierarchyLevelAxis">us-gaap:FairValueInputsLevel1Member</xbrldi:explicitMember>
                <xbrldi:explicitMember dimension="us-gaap:FinancialInstrumentAxis">us-gaap:CertificatesOfDepositMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <instant>2022-12-31</instant>
        </period>
    </context>
    <context id="ifc51842e1332459cb554d8b00d356c5f_I20211231">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:FairValueByFairValueHierarchyLevelAxis">us-gaap:FairValueInputsLevel1Member</xbrldi:explicitMember>
                <xbrldi:explicitMember dimension="us-gaap:FinancialInstrumentAxis">us-gaap:CertificatesOfDepositMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <instant>2021-12-31</instant>
        </period>
    </context>
    <context id="ic47e9e54da5e4ea0a54425fedab8b863_I20221231">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:FairValueByFairValueHierarchyLevelAxis">us-gaap:FairValueInputsLevel2Member</xbrldi:explicitMember>
                <xbrldi:explicitMember dimension="us-gaap:FinancialInstrumentAxis">us-gaap:CommercialPaperMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <instant>2022-12-31</instant>
        </period>
    </context>
    <context id="i446296b17c5e4c75961e059921edd1c2_I20211231">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:FairValueByFairValueHierarchyLevelAxis">us-gaap:FairValueInputsLevel2Member</xbrldi:explicitMember>
                <xbrldi:explicitMember dimension="us-gaap:FinancialInstrumentAxis">us-gaap:CommercialPaperMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <instant>2021-12-31</instant>
        </period>
    </context>
    <context id="i656035537314412686548f55a139a888_I20221231">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:FairValueByFairValueHierarchyLevelAxis">us-gaap:FairValueInputsLevel2Member</xbrldi:explicitMember>
                <xbrldi:explicitMember dimension="us-gaap:FinancialInstrumentAxis">us-gaap:USTreasurySecuritiesMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <instant>2022-12-31</instant>
        </period>
    </context>
    <context id="i64946dfcd9eb463d935303bab1508633_I20211231">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:FairValueByFairValueHierarchyLevelAxis">us-gaap:FairValueInputsLevel2Member</xbrldi:explicitMember>
                <xbrldi:explicitMember dimension="us-gaap:FinancialInstrumentAxis">us-gaap:USTreasurySecuritiesMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <instant>2021-12-31</instant>
        </period>
    </context>
    <context id="ia6248027df024357953f14d57770c7dd_I20221231">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:PropertyPlantAndEquipmentByTypeAxis">spsc:InternallyDevelopedSoftwareMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <instant>2022-12-31</instant>
        </period>
    </context>
    <context id="i883102fa43d2478db24333b3dc34f866_I20211231">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:PropertyPlantAndEquipmentByTypeAxis">spsc:InternallyDevelopedSoftwareMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <instant>2021-12-31</instant>
        </period>
    </context>
    <context id="ia9b9f64115b04255b2120c7af146c0b3_I20221231">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:PropertyPlantAndEquipmentByTypeAxis">us-gaap:ComputerEquipmentMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <instant>2022-12-31</instant>
        </period>
    </context>
    <context id="icc0b00ffde2c4e2ea9ea11d04beaabf0_I20211231">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:PropertyPlantAndEquipmentByTypeAxis">us-gaap:ComputerEquipmentMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <instant>2021-12-31</instant>
        </period>
    </context>
    <context id="i3665584868bc4b61bad23683a6378887_I20221231">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:PropertyPlantAndEquipmentByTypeAxis">spsc:OfficeEquipmentAndFurnitureMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <instant>2022-12-31</instant>
        </period>
    </context>
    <context id="iac4e0b91b81c43149d42886e15b7b242_I20211231">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:PropertyPlantAndEquipmentByTypeAxis">spsc:OfficeEquipmentAndFurnitureMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <instant>2021-12-31</instant>
        </period>
    </context>
    <context id="i8e670d49be774e20bd7dc3f62750bd25_I20221231">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:PropertyPlantAndEquipmentByTypeAxis">us-gaap:LeaseholdImprovementsMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <instant>2022-12-31</instant>
        </period>
    </context>
    <context id="i7ad160030cb44bf6b209e0329a0894be_I20211231">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:PropertyPlantAndEquipmentByTypeAxis">us-gaap:LeaseholdImprovementsMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <instant>2021-12-31</instant>
        </period>
    </context>
    <context id="ic14a747d62e84b648c0389c9f29a03bf_I20221231">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:FiniteLivedIntangibleAssetsByMajorClassAxis">us-gaap:CustomerRelationshipsMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <instant>2022-12-31</instant>
        </period>
    </context>
    <context id="i19e2dba10c3f4780bc27deba91a3a045_D20220101-20221231">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:FiniteLivedIntangibleAssetsByMajorClassAxis">us-gaap:CustomerRelationshipsMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2022-01-01</startDate>
            <endDate>2022-12-31</endDate>
        </period>
    </context>
    <context id="i6521ccd8c6e9482a9c9e770a8fd1c2bb_I20221231">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:FiniteLivedIntangibleAssetsByMajorClassAxis">us-gaap:TechnologyBasedIntangibleAssetsMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <instant>2022-12-31</instant>
        </period>
    </context>
    <context id="i0c09fdabd02240e0adc2d875556ca9ac_D20220101-20221231">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:FiniteLivedIntangibleAssetsByMajorClassAxis">us-gaap:TechnologyBasedIntangibleAssetsMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2022-01-01</startDate>
            <endDate>2022-12-31</endDate>
        </period>
    </context>
    <context id="icc5441e4c3574014b14020cc9718dff8_I20211231">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:FiniteLivedIntangibleAssetsByMajorClassAxis">us-gaap:CustomerRelationshipsMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <instant>2021-12-31</instant>
        </period>
    </context>
    <context id="i2e1d71c3cae54755ae18f64906f8dedd_D20210101-20211231">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:FiniteLivedIntangibleAssetsByMajorClassAxis">us-gaap:CustomerRelationshipsMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2021-01-01</startDate>
            <endDate>2021-12-31</endDate>
        </period>
    </context>
    <context id="i2187e53e534d4e24b9f09861efa71c24_I20211231">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:FiniteLivedIntangibleAssetsByMajorClassAxis">us-gaap:TechnologyBasedIntangibleAssetsMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <instant>2021-12-31</instant>
        </period>
    </context>
    <context id="i66e50f5267924824a1c6a06fdfa2bb11_D20210101-20211231">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:FiniteLivedIntangibleAssetsByMajorClassAxis">us-gaap:TechnologyBasedIntangibleAssetsMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2021-01-01</startDate>
            <endDate>2021-12-31</endDate>
        </period>
    </context>
    <context id="i265d8aadcae84460a7b07108166cb766_I20221231">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:ShareRepurchaseProgramAxis">spsc:TwoThousandAndSeventeenStockRepurchaseProgramMember</xbrldi:explicitMember>
                <xbrldi:explicitMember dimension="us-gaap:StatementEquityComponentsAxis">us-gaap:CommonStockMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <instant>2022-12-31</instant>
        </period>
    </context>
    <context id="iec31b088c12b47cd8e01b344b46161a1_D20220101-20221231">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:ShareRepurchaseProgramAxis">spsc:TwoThousandAndSeventeenStockRepurchaseProgramMember</xbrldi:explicitMember>
                <xbrldi:explicitMember dimension="us-gaap:StatementEquityComponentsAxis">us-gaap:CommonStockMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2022-01-01</startDate>
            <endDate>2022-12-31</endDate>
        </period>
    </context>
    <context id="iedafa139758e40efb5f271b1b60d62f9_I20221231">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:ShareRepurchaseProgramAxis">spsc:TwoThousandAndNineteenStockRepurchaseProgramMember</xbrldi:explicitMember>
                <xbrldi:explicitMember dimension="us-gaap:StatementEquityComponentsAxis">us-gaap:CommonStockMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <instant>2022-12-31</instant>
        </period>
    </context>
    <context id="ife231283bec94f44a1d2d2e9678dc964_D20220101-20221231">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:ShareRepurchaseProgramAxis">spsc:TwoThousandAndNineteenStockRepurchaseProgramMember</xbrldi:explicitMember>
                <xbrldi:explicitMember dimension="us-gaap:StatementEquityComponentsAxis">us-gaap:CommonStockMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2022-01-01</startDate>
            <endDate>2022-12-31</endDate>
        </period>
    </context>
    <context id="i9add5ce9a45d400c9dbf0e37a45fb8b8_I20221231">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:ShareRepurchaseProgramAxis">spsc:TwoThousandAndTwentyOneStockRepurchaseProgramMember</xbrldi:explicitMember>
                <xbrldi:explicitMember dimension="us-gaap:StatementEquityComponentsAxis">us-gaap:CommonStockMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <instant>2022-12-31</instant>
        </period>
    </context>
    <context id="i4ada863318db4a4bb76fafad54af1c82_D20220101-20221231">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:ShareRepurchaseProgramAxis">spsc:TwoThousandAndTwentyOneStockRepurchaseProgramMember</xbrldi:explicitMember>
                <xbrldi:explicitMember dimension="us-gaap:StatementEquityComponentsAxis">us-gaap:CommonStockMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2022-01-01</startDate>
            <endDate>2022-12-31</endDate>
        </period>
    </context>
    <context id="idce35aa18867405aacec6a16ce30f7dd_D20220101-20221231">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:IncomeStatementLocationAxis">us-gaap:CostOfSalesMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2022-01-01</startDate>
            <endDate>2022-12-31</endDate>
        </period>
    </context>
    <context id="i9b00d2838d714d2386868e7a75b6bf5f_D20210101-20211231">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:IncomeStatementLocationAxis">us-gaap:CostOfSalesMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2021-01-01</startDate>
            <endDate>2021-12-31</endDate>
        </period>
    </context>
    <context id="i762308989bd249588efbfff52ddd9fe2_D20200101-20201231">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:IncomeStatementLocationAxis">us-gaap:CostOfSalesMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2020-01-01</startDate>
            <endDate>2020-12-31</endDate>
        </period>
    </context>
    <context id="ia8a7eb5e3bc040a5aee6568395ca8fe1_D20220101-20221231">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:IncomeStatementLocationAxis">us-gaap:SellingAndMarketingExpenseMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2022-01-01</startDate>
            <endDate>2022-12-31</endDate>
        </period>
    </context>
    <context id="i27d32ff076004f7c91a42d7b4cb21a8c_D20210101-20211231">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:IncomeStatementLocationAxis">us-gaap:SellingAndMarketingExpenseMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2021-01-01</startDate>
            <endDate>2021-12-31</endDate>
        </period>
    </context>
    <context id="iaee36edf7cc0455fa469c65bc4085b2e_D20200101-20201231">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:IncomeStatementLocationAxis">us-gaap:SellingAndMarketingExpenseMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2020-01-01</startDate>
            <endDate>2020-12-31</endDate>
        </period>
    </context>
    <context id="i04d06c3581834f50a66026e4e4ffbdcd_D20220101-20221231">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:IncomeStatementLocationAxis">us-gaap:ResearchAndDevelopmentExpenseMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2022-01-01</startDate>
            <endDate>2022-12-31</endDate>
        </period>
    </context>
    <context id="if1d2bc4c2f0f4f3bb8edd8165b6aae03_D20210101-20211231">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:IncomeStatementLocationAxis">us-gaap:ResearchAndDevelopmentExpenseMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2021-01-01</startDate>
            <endDate>2021-12-31</endDate>
        </period>
    </context>
    <context id="i8aec879eeef942509d9bc5a6b47db151_D20200101-20201231">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:IncomeStatementLocationAxis">us-gaap:ResearchAndDevelopmentExpenseMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2020-01-01</startDate>
            <endDate>2020-12-31</endDate>
        </period>
    </context>
    <context id="i4997ed8305204f0490ffb283f8db3b0e_D20220101-20221231">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:IncomeStatementLocationAxis">us-gaap:GeneralAndAdministrativeExpenseMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2022-01-01</startDate>
            <endDate>2022-12-31</endDate>
        </period>
    </context>
    <context id="i07ad3540e0b04d04b2c92a1baea22a79_D20210101-20211231">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:IncomeStatementLocationAxis">us-gaap:GeneralAndAdministrativeExpenseMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2021-01-01</startDate>
            <endDate>2021-12-31</endDate>
        </period>
    </context>
    <context id="iedc8bf5007d441268ab8c28e9080ce6a_D20200101-20201231">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:IncomeStatementLocationAxis">us-gaap:GeneralAndAdministrativeExpenseMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2020-01-01</startDate>
            <endDate>2020-12-31</endDate>
        </period>
    </context>
    <context id="i668697b955824364acb4410659743786_D20220101-20221231">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:AwardTypeAxis">us-gaap:EmployeeStockOptionMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2022-01-01</startDate>
            <endDate>2022-12-31</endDate>
        </period>
    </context>
    <context id="ib55a3b1782e14202bb90ddb50425a4c5_D20210101-20211231">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:AwardTypeAxis">us-gaap:EmployeeStockOptionMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2021-01-01</startDate>
            <endDate>2021-12-31</endDate>
        </period>
    </context>
    <context id="i920943d4f9864f5a842c6357663b91d3_D20200101-20201231">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:AwardTypeAxis">us-gaap:EmployeeStockOptionMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2020-01-01</startDate>
            <endDate>2020-12-31</endDate>
        </period>
    </context>
    <context id="ibfd28c67afa246bca4469928aa2fd201_D20220101-20221231">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:AwardTypeAxis">us-gaap:PerformanceSharesMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2022-01-01</startDate>
            <endDate>2022-12-31</endDate>
        </period>
    </context>
    <context id="i84af72d294b94d2c9e63260f4d02e6af_D20210101-20211231">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:AwardTypeAxis">us-gaap:PerformanceSharesMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2021-01-01</startDate>
            <endDate>2021-12-31</endDate>
        </period>
    </context>
    <context id="ia458266eacef419e8f4b7a9d97fe7fdc_D20200101-20201231">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:AwardTypeAxis">us-gaap:PerformanceSharesMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2020-01-01</startDate>
            <endDate>2020-12-31</endDate>
        </period>
    </context>
    <context id="i7f3127aa3db047ad8db0a96d621098d1_D20220101-20221231">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:AwardTypeAxis">us-gaap:RestrictedStockUnitsRSUMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2022-01-01</startDate>
            <endDate>2022-12-31</endDate>
        </period>
    </context>
    <context id="ia9a3c40bfb044faeb2e91c32e70fa2cc_D20210101-20211231">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:AwardTypeAxis">us-gaap:RestrictedStockUnitsRSUMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2021-01-01</startDate>
            <endDate>2021-12-31</endDate>
        </period>
    </context>
    <context id="iad98557feb7042c89b407853499c7c4a_D20200101-20201231">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:AwardTypeAxis">us-gaap:RestrictedStockUnitsRSUMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2020-01-01</startDate>
            <endDate>2020-12-31</endDate>
        </period>
    </context>
    <context id="i20c962b96d4849ddb3e69a9c24bfa32f_D20220101-20221231">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:AwardTypeAxis">spsc:RestrictedStockUnitsAndDeferredStockUnitsMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2022-01-01</startDate>
            <endDate>2022-12-31</endDate>
        </period>
    </context>
    <context id="i641598f08577458996b92d29d9622d44_D20210101-20211231">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:AwardTypeAxis">spsc:RestrictedStockUnitsAndDeferredStockUnitsMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2021-01-01</startDate>
            <endDate>2021-12-31</endDate>
        </period>
    </context>
    <context id="i9b1cc08455374af99fd20959559723dc_D20200101-20201231">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:AwardTypeAxis">spsc:RestrictedStockUnitsAndDeferredStockUnitsMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2020-01-01</startDate>
            <endDate>2020-12-31</endDate>
        </period>
    </context>
    <context id="id5d6f83a0ed34c2ab8f823b100a1c6eb_D20220101-20221231">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:AwardTypeAxis">spsc:EmployeeStockPurchasePlanMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2022-01-01</startDate>
            <endDate>2022-12-31</endDate>
        </period>
    </context>
    <context id="ie45c4a5ad28946d8be95c94cc114cf3d_D20210101-20211231">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:AwardTypeAxis">spsc:EmployeeStockPurchasePlanMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2021-01-01</startDate>
            <endDate>2021-12-31</endDate>
        </period>
    </context>
    <context id="i5ef319fb8eda482b83965c8f8b790b98_D20200101-20201231">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:AwardTypeAxis">spsc:EmployeeStockPurchasePlanMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2020-01-01</startDate>
            <endDate>2020-12-31</endDate>
        </period>
    </context>
    <context id="i7b8ba74850364d55b1e5575a9dff1933_D20220101-20221231">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:AwardTypeAxis">spsc:FourZeroOneKStockMatchMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2022-01-01</startDate>
            <endDate>2022-12-31</endDate>
        </period>
    </context>
    <context id="iecef4f6182e64fd4bc9f87bb1bfc9f20_D20210101-20211231">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:AwardTypeAxis">spsc:FourZeroOneKStockMatchMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2021-01-01</startDate>
            <endDate>2021-12-31</endDate>
        </period>
    </context>
    <context id="ife10a6b0b96f44e6a9a9c7a01676007f_D20200101-20201231">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:AwardTypeAxis">spsc:FourZeroOneKStockMatchMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2020-01-01</startDate>
            <endDate>2020-12-31</endDate>
        </period>
    </context>
    <context id="i40ef60b6644a4ef784d4e278c4730286_I20221231">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:AwardTypeAxis">us-gaap:EmployeeStockOptionMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <instant>2022-12-31</instant>
        </period>
    </context>
    <context id="i7adcb87dd5a64ede8a1a1fdb2ed5249c_D20220101-20221231">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:AwardTypeAxis">us-gaap:RestrictedStockMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2022-01-01</startDate>
            <endDate>2022-12-31</endDate>
        </period>
    </context>
    <context id="idd93ad7da3684ef8a482684f78a4c398_D20220101-20221231">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:AwardTypeAxis">spsc:DeferredStockUnitsMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2022-01-01</startDate>
            <endDate>2022-12-31</endDate>
        </period>
    </context>
    <context id="i93f4250296734b3daa16e2e1a98529e1_I20191231">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:AwardTypeAxis">spsc:PerformanceShareUnitsRestrictedStockUnitsRestrictedStockAwardsAndDeferredStockUnitsMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <instant>2019-12-31</instant>
        </period>
    </context>
    <context id="ia2f6ad9f292e4946b9b4d8defe2de4ca_D20200101-20201231">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:AwardTypeAxis">spsc:PerformanceShareUnitsRestrictedStockUnitsRestrictedStockAwardsAndDeferredStockUnitsMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2020-01-01</startDate>
            <endDate>2020-12-31</endDate>
        </period>
    </context>
    <context id="i8cf8e7b12f5e4aab8628360924e5765c_I20201231">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:AwardTypeAxis">spsc:PerformanceShareUnitsRestrictedStockUnitsRestrictedStockAwardsAndDeferredStockUnitsMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <instant>2020-12-31</instant>
        </period>
    </context>
    <context id="i3efe46f18cef49ff9ea1f7025516328b_D20210101-20211231">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:AwardTypeAxis">spsc:PerformanceShareUnitsRestrictedStockUnitsRestrictedStockAwardsAndDeferredStockUnitsMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2021-01-01</startDate>
            <endDate>2021-12-31</endDate>
        </period>
    </context>
    <context id="i45a3404e520b4fa3ae3507b1d7d564ac_I20211231">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:AwardTypeAxis">spsc:PerformanceShareUnitsRestrictedStockUnitsRestrictedStockAwardsAndDeferredStockUnitsMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <instant>2021-12-31</instant>
        </period>
    </context>
    <context id="i85c0dfe8fb5c4b8e9ea871b559e35156_D20220101-20221231">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:AwardTypeAxis">spsc:PerformanceShareUnitsRestrictedStockUnitsRestrictedStockAwardsAndDeferredStockUnitsMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2022-01-01</startDate>
            <endDate>2022-12-31</endDate>
        </period>
    </context>
    <context id="i33424d94ff144bd5b36f3b0970257e14_I20221231">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:AwardTypeAxis">spsc:PerformanceShareUnitsRestrictedStockUnitsRestrictedStockAwardsAndDeferredStockUnitsMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <instant>2022-12-31</instant>
        </period>
    </context>
    <context id="i91d4f7c1beed472aa2b61cd57299c320_I20221231">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="srt:RangeAxis">srt:MaximumMember</xbrldi:explicitMember>
                <xbrldi:explicitMember dimension="us-gaap:AwardTypeAxis">spsc:PerformanceShareUnitsRestrictedStockUnitsRestrictedStockAwardsAndDeferredStockUnitsMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <instant>2022-12-31</instant>
        </period>
    </context>
    <context id="i331c92f0ff404ce48d0292134aaf6abd_D20220101-20221231">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:SubsidiarySaleOfStockAxis">us-gaap:EmployeeStockMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2022-01-01</startDate>
            <endDate>2022-12-31</endDate>
        </period>
    </context>
    <context id="i3e865a2d9f164593955686e10738f095_D20210101-20211231">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:SubsidiarySaleOfStockAxis">us-gaap:EmployeeStockMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2021-01-01</startDate>
            <endDate>2021-12-31</endDate>
        </period>
    </context>
    <context id="id1243a41f69043efac5c8ad76e73c4c6_D20200101-20201231">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:SubsidiarySaleOfStockAxis">us-gaap:EmployeeStockMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2020-01-01</startDate>
            <endDate>2020-12-31</endDate>
        </period>
    </context>
    <context id="idc46905802ff4c72a58a6c46869391f4_I20221231">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:SubsidiarySaleOfStockAxis">us-gaap:EmployeeStockMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <instant>2022-12-31</instant>
        </period>
    </context>
    <context id="if67db197d6074863b7181a1a2ca41ac1_I20221231">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:IncomeTaxAuthorityAxis">us-gaap:DomesticCountryMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <instant>2022-12-31</instant>
        </period>
    </context>
    <context id="i203b709d20e34196ad7cc9840424ac39_I20221231">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:IncomeTaxAuthorityAxis">us-gaap:StateAndLocalJurisdictionMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <instant>2022-12-31</instant>
        </period>
    </context>
    <context id="i185a39aaa67b4911aa880cfb6865cb8c_I20221231">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:IncomeTaxAuthorityAxis">us-gaap:DomesticCountryMember</xbrldi:explicitMember>
                <xbrldi:explicitMember dimension="us-gaap:IncomeTaxAuthorityNameAxis">us-gaap:InternalRevenueServiceIRSMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <instant>2022-12-31</instant>
        </period>
    </context>
    <context id="i64d6e65ea7274556b9b3190995c816ba_D20220101-20221231">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:ConcentrationRiskByBenchmarkAxis">us-gaap:SalesRevenueNetMember</xbrldi:explicitMember>
                <xbrldi:explicitMember dimension="us-gaap:ConcentrationRiskByTypeAxis">us-gaap:GeographicConcentrationRiskMember</xbrldi:explicitMember>
                <xbrldi:explicitMember dimension="us-gaap:GeographicDistributionAxis">us-gaap:GeographicDistributionDomesticMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2022-01-01</startDate>
            <endDate>2022-12-31</endDate>
        </period>
    </context>
    <context id="i96b2a811af8246a8b813dc20d6593bde_D20210101-20211231">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:ConcentrationRiskByBenchmarkAxis">us-gaap:SalesRevenueNetMember</xbrldi:explicitMember>
                <xbrldi:explicitMember dimension="us-gaap:ConcentrationRiskByTypeAxis">us-gaap:GeographicConcentrationRiskMember</xbrldi:explicitMember>
                <xbrldi:explicitMember dimension="us-gaap:GeographicDistributionAxis">us-gaap:GeographicDistributionDomesticMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2021-01-01</startDate>
            <endDate>2021-12-31</endDate>
        </period>
    </context>
    <context id="i149518aa1d114f82be8a800c837e5f8b_D20200101-20201231">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:ConcentrationRiskByBenchmarkAxis">us-gaap:SalesRevenueNetMember</xbrldi:explicitMember>
                <xbrldi:explicitMember dimension="us-gaap:ConcentrationRiskByTypeAxis">us-gaap:GeographicConcentrationRiskMember</xbrldi:explicitMember>
                <xbrldi:explicitMember dimension="us-gaap:GeographicDistributionAxis">us-gaap:GeographicDistributionDomesticMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2020-01-01</startDate>
            <endDate>2020-12-31</endDate>
        </period>
    </context>
    <context id="i03d119929d7f4e5790ea6dca7da771f8_D20220101-20221231">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:ConcentrationRiskByBenchmarkAxis">us-gaap:SalesRevenueNetMember</xbrldi:explicitMember>
                <xbrldi:explicitMember dimension="us-gaap:ConcentrationRiskByTypeAxis">us-gaap:GeographicConcentrationRiskMember</xbrldi:explicitMember>
                <xbrldi:explicitMember dimension="us-gaap:FairValueByAssetClassAxis">us-gaap:PropertyPlantAndEquipmentMember</xbrldi:explicitMember>
                <xbrldi:explicitMember dimension="us-gaap:GeographicDistributionAxis">us-gaap:GeographicDistributionForeignMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2022-01-01</startDate>
            <endDate>2022-12-31</endDate>
        </period>
    </context>
    <context id="ie46d059532824c39b875028f03a2835f_D20210101-20211231">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:ConcentrationRiskByBenchmarkAxis">us-gaap:SalesRevenueNetMember</xbrldi:explicitMember>
                <xbrldi:explicitMember dimension="us-gaap:ConcentrationRiskByTypeAxis">us-gaap:GeographicConcentrationRiskMember</xbrldi:explicitMember>
                <xbrldi:explicitMember dimension="us-gaap:FairValueByAssetClassAxis">us-gaap:PropertyPlantAndEquipmentMember</xbrldi:explicitMember>
                <xbrldi:explicitMember dimension="us-gaap:GeographicDistributionAxis">us-gaap:GeographicDistributionForeignMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2021-01-01</startDate>
            <endDate>2021-12-31</endDate>
        </period>
    </context>
    <unit id="usd">
        <measure>iso4217:USD</measure>
    </unit>
    <unit id="shares">
        <measure>shares</measure>
    </unit>
    <unit id="usdPerShare">
        <divide>
            <unitNumerator>
                <measure>iso4217:USD</measure>
            </unitNumerator>
            <unitDenominator>
                <measure>shares</measure>
            </unitDenominator>
        </divide>
    </unit>
    <unit id="segment">
        <measure>spsc:Segment</measure>
    </unit>
    <unit id="period">
        <measure>spsc:period</measure>
    </unit>
    <unit id="sqft">
        <measure>utr:sqft</measure>
    </unit>
    <unit id="option">
        <measure>spsc:option</measure>
    </unit>
    <unit id="number">
        <measure>pure</measure>
    </unit>
    <dei:EntityCentralIndexKey
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl80L2ZyYWc6YzhjYjBlZWJlM2QxNGRkNjljMzUyMDY5NmE0YTE0NTQvdGFibGU6N2JhMjYxNDZmYmY3NDg0NDhjNjhhYzA3NmE5NDM0MDYvdGFibGVyYW5nZTo3YmEyNjE0NmZiZjc0ODQ0OGM2OGFjMDc2YTk0MzQwNl8yLTEtMS0xLTMwMTQw_12af8ea9-5f33-485a-a0e3-78e3123e9b00">0001092699</dei:EntityCentralIndexKey>
    <dei:DocumentFiscalYearFocus
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl80L2ZyYWc6YzhjYjBlZWJlM2QxNGRkNjljMzUyMDY5NmE0YTE0NTQvdGFibGU6N2JhMjYxNDZmYmY3NDg0NDhjNjhhYzA3NmE5NDM0MDYvdGFibGVyYW5nZTo3YmEyNjE0NmZiZjc0ODQ0OGM2OGFjMDc2YTk0MzQwNl8zLTEtMS0xLTMwMTQw_d0f0a522-63fe-4c4a-a346-506fde30775e">2022</dei:DocumentFiscalYearFocus>
    <dei:DocumentFiscalPeriodFocus
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl80L2ZyYWc6YzhjYjBlZWJlM2QxNGRkNjljMzUyMDY5NmE0YTE0NTQvdGFibGU6N2JhMjYxNDZmYmY3NDg0NDhjNjhhYzA3NmE5NDM0MDYvdGFibGVyYW5nZTo3YmEyNjE0NmZiZjc0ODQ0OGM2OGFjMDc2YTk0MzQwNl80LTEtMS0xLTMwMTQw_53a3fcd8-3baa-458f-b0dc-9a5e0c511a2d">FY</dei:DocumentFiscalPeriodFocus>
    <dei:AmendmentFlag
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl80L2ZyYWc6YzhjYjBlZWJlM2QxNGRkNjljMzUyMDY5NmE0YTE0NTQvdGFibGU6N2JhMjYxNDZmYmY3NDg0NDhjNjhhYzA3NmE5NDM0MDYvdGFibGVyYW5nZTo3YmEyNjE0NmZiZjc0ODQ0OGM2OGFjMDc2YTk0MzQwNl81LTEtMS0xLTMwMTQw_d2dc1987-35ba-4527-ab2e-ef671a047b4c">false</dei:AmendmentFlag>
    <us-gaap:AccountingStandardsUpdateExtensibleList
      contextRef="i4751184d7e5948509cd8893fd49fb821_D20200101-20201231"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83Ni9mcmFnOjI2YTZmZGNiZDgwYzQyNjdiOTA4YjI1OWRjZjU4OTJkL3RhYmxlOmI4NzM5ZWM0NWVmZTQ5ZDQ5ODNiYWUzMWYzNGY3YmNiL3RhYmxlcmFuZ2U6Yjg3MzllYzQ1ZWZlNDlkNDk4M2JhZTMxZjM0ZjdiY2JfMTItMC0xLTEtMzAxNDAvdGV4dHJlZ2lvbjo2OThhYmVkOGJjNjk0MDlmOTExZmMwOTcyOTE1YjE0YV8yNzQ4Nzc5MDY5NDc4_89cb7549-03e8-48a5-a0e7-fcbb6a429506">http://fasb.org/us-gaap/2022#AccountingStandardsUpdate201613Member</us-gaap:AccountingStandardsUpdateExtensibleList>
    <dei:DocumentType
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xL2ZyYWc6MzM5OTRlM2EwOTk3NGJhOWFlNzI5MjQ2NzE5ZTQ1Y2YvdGV4dHJlZ2lvbjozMzk5NGUzYTA5OTc0YmE5YWU3MjkyNDY3MTllNDVjZl8zNDY2_63b8f01f-3a06-463d-a4bc-a88f4ea3b8a5">10-K</dei:DocumentType>
    <dei:DocumentAnnualReport
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xL2ZyYWc6MzM5OTRlM2EwOTk3NGJhOWFlNzI5MjQ2NzE5ZTQ1Y2YvdGFibGU6N2IzYTRhZDMzOWFhNDM0MmFmMzUyYjlkYmU1MzU5NDAvdGFibGVyYW5nZTo3YjNhNGFkMzM5YWE0MzQyYWYzNTJiOWRiZTUzNTk0MF8wLTAtMS0xLTMwMTQw_b3ee7c09-f762-465d-9fd3-b6becb1ca9c0">true</dei:DocumentAnnualReport>
    <dei:DocumentPeriodEndDate
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xL2ZyYWc6MzM5OTRlM2EwOTk3NGJhOWFlNzI5MjQ2NzE5ZTQ1Y2YvdGV4dHJlZ2lvbjozMzk5NGUzYTA5OTc0YmE5YWU3MjkyNDY3MTllNDVjZl8yNzQ4Nzc5MDczMDkx_5313bbfc-442f-457d-a890-a53ca1f0fc1c">2022-12-31</dei:DocumentPeriodEndDate>
    <dei:CurrentFiscalYearEndDate
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xL2ZyYWc6MzM5OTRlM2EwOTk3NGJhOWFlNzI5MjQ2NzE5ZTQ1Y2YvdGV4dHJlZ2lvbjozMzk5NGUzYTA5OTc0YmE5YWU3MjkyNDY3MTllNDVjZl8yNzQ4Nzc5MDczMDkx_ff5e08cc-e755-4c48-a397-f77537fac45f">--12-31</dei:CurrentFiscalYearEndDate>
    <dei:DocumentTransitionReport
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xL2ZyYWc6MzM5OTRlM2EwOTk3NGJhOWFlNzI5MjQ2NzE5ZTQ1Y2YvdGFibGU6MTY0YTc2OGFmMzYzNGRmYjg4ZTQyNTdmMWM0NzQ2MjgvdGFibGVyYW5nZToxNjRhNzY4YWYzNjM0ZGZiODhlNDI1N2YxYzQ3NDYyOF8wLTAtMS0xLTMwMTQw_77682cbe-b58c-409d-9937-03385dfbebc2">false</dei:DocumentTransitionReport>
    <dei:EntityFileNumber
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xL2ZyYWc6MzM5OTRlM2EwOTk3NGJhOWFlNzI5MjQ2NzE5ZTQ1Y2YvdGV4dHJlZ2lvbjozMzk5NGUzYTA5OTc0YmE5YWU3MjkyNDY3MTllNDVjZl8zNDcx_8bd45089-e976-46a9-93f3-cee9838ad30a">001-34702</dei:EntityFileNumber>
    <dei:EntityRegistrantName
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xL2ZyYWc6MzM5OTRlM2EwOTk3NGJhOWFlNzI5MjQ2NzE5ZTQ1Y2YvdGV4dHJlZ2lvbjozMzk5NGUzYTA5OTc0YmE5YWU3MjkyNDY3MTllNDVjZl8zNDY1_6c8612d0-fa5e-485b-a84e-f560b3f72dba">SPS COMMERCE, INC.</dei:EntityRegistrantName>
    <dei:EntityIncorporationStateCountryCode
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xL2ZyYWc6MzM5OTRlM2EwOTk3NGJhOWFlNzI5MjQ2NzE5ZTQ1Y2YvdGFibGU6OTgzMWY4ZGM1NzJkNGI4NGEwMjgwNzRlZWY5NDJlNTMvdGFibGVyYW5nZTo5ODMxZjhkYzU3MmQ0Yjg0YTAyODA3NGVlZjk0MmU1M18wLTAtMS0xLTMwMTQw_2ba1f581-7e43-40d1-b4f0-e7a865e03608">DE</dei:EntityIncorporationStateCountryCode>
    <dei:EntityTaxIdentificationNumber
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xL2ZyYWc6MzM5OTRlM2EwOTk3NGJhOWFlNzI5MjQ2NzE5ZTQ1Y2YvdGFibGU6OTgzMWY4ZGM1NzJkNGI4NGEwMjgwNzRlZWY5NDJlNTMvdGFibGVyYW5nZTo5ODMxZjhkYzU3MmQ0Yjg0YTAyODA3NGVlZjk0MmU1M18wLTItMS0xLTMwMTQw_22338401-2c43-42fe-b98a-bbab55be00fe">41-2015127</dei:EntityTaxIdentificationNumber>
    <dei:EntityAddressAddressLine1
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xL2ZyYWc6MzM5OTRlM2EwOTk3NGJhOWFlNzI5MjQ2NzE5ZTQ1Y2YvdGV4dHJlZ2lvbjozMzk5NGUzYTA5OTc0YmE5YWU3MjkyNDY3MTllNDVjZl8zMTM_1ff147c8-138c-4542-8442-1a527b93d087">333 South Seventh Street</dei:EntityAddressAddressLine1>
    <dei:EntityAddressAddressLine2
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xL2ZyYWc6MzM5OTRlM2EwOTk3NGJhOWFlNzI5MjQ2NzE5ZTQ1Y2YvdGV4dHJlZ2lvbjozMzk5NGUzYTA5OTc0YmE5YWU3MjkyNDY3MTllNDVjZl8zMTc_94009c73-fd2d-4e24-ba9e-3b1dfe443c2e">Suite 1000</dei:EntityAddressAddressLine2>
    <dei:EntityAddressCityOrTown
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xL2ZyYWc6MzM5OTRlM2EwOTk3NGJhOWFlNzI5MjQ2NzE5ZTQ1Y2YvdGV4dHJlZ2lvbjozMzk5NGUzYTA5OTc0YmE5YWU3MjkyNDY3MTllNDVjZl8zMjE_56185854-2c1d-4c13-9f52-b0d9c3564f4d">Minneapolis</dei:EntityAddressCityOrTown>
    <dei:EntityAddressStateOrProvince
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xL2ZyYWc6MzM5OTRlM2EwOTk3NGJhOWFlNzI5MjQ2NzE5ZTQ1Y2YvdGV4dHJlZ2lvbjozMzk5NGUzYTA5OTc0YmE5YWU3MjkyNDY3MTllNDVjZl8zNDc0_441e1f9a-249e-4bde-b576-028481acebdb">MN</dei:EntityAddressStateOrProvince>
    <dei:EntityAddressPostalZipCode
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xL2ZyYWc6MzM5OTRlM2EwOTk3NGJhOWFlNzI5MjQ2NzE5ZTQ1Y2YvdGV4dHJlZ2lvbjozMzk5NGUzYTA5OTc0YmE5YWU3MjkyNDY3MTllNDVjZl8zNDYx_1177ff00-ccd2-445a-a403-c4a71566909a">55402</dei:EntityAddressPostalZipCode>
    <dei:CityAreaCode
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xL2ZyYWc6MzM5OTRlM2EwOTk3NGJhOWFlNzI5MjQ2NzE5ZTQ1Y2YvdGV4dHJlZ2lvbjozMzk5NGUzYTA5OTc0YmE5YWU3MjkyNDY3MTllNDVjZl8zNDYy_7084af6f-64c5-4c14-846a-c8d79c92606d">612</dei:CityAreaCode>
    <dei:LocalPhoneNumber
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xL2ZyYWc6MzM5OTRlM2EwOTk3NGJhOWFlNzI5MjQ2NzE5ZTQ1Y2YvdGV4dHJlZ2lvbjozMzk5NGUzYTA5OTc0YmE5YWU3MjkyNDY3MTllNDVjZl8zNDc1_0dd86e13-1a25-41dd-bea4-1ce63a609c86">435-9400</dei:LocalPhoneNumber>
    <dei:Security12bTitle
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xL2ZyYWc6MzM5OTRlM2EwOTk3NGJhOWFlNzI5MjQ2NzE5ZTQ1Y2YvdGFibGU6NjVlZDQ2NjhlYTljNGYzZjhmYTc3ZTljZjU3ZGRmMzgvdGFibGVyYW5nZTo2NWVkNDY2OGVhOWM0ZjNmOGZhNzdlOWNmNTdkZGYzOF8xLTAtMS0xLTMwMTQw_75f4b655-3398-450e-b939-da61f592bb48">Common Stock, par value $0.001 per share</dei:Security12bTitle>
    <dei:TradingSymbol
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xL2ZyYWc6MzM5OTRlM2EwOTk3NGJhOWFlNzI5MjQ2NzE5ZTQ1Y2YvdGFibGU6NjVlZDQ2NjhlYTljNGYzZjhmYTc3ZTljZjU3ZGRmMzgvdGFibGVyYW5nZTo2NWVkNDY2OGVhOWM0ZjNmOGZhNzdlOWNmNTdkZGYzOF8xLTItMS0xLTMwMTQwL3RleHRyZWdpb246NjIzMjQ4YjZmNDliNDcwZDk1ZTI4MmM2YjIwMDNkOWFfNA_4e57672c-24d2-405f-939c-2b5de980e2c9">SPSC</dei:TradingSymbol>
    <dei:SecurityExchangeName
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xL2ZyYWc6MzM5OTRlM2EwOTk3NGJhOWFlNzI5MjQ2NzE5ZTQ1Y2YvdGFibGU6NjVlZDQ2NjhlYTljNGYzZjhmYTc3ZTljZjU3ZGRmMzgvdGFibGVyYW5nZTo2NWVkNDY2OGVhOWM0ZjNmOGZhNzdlOWNmNTdkZGYzOF8xLTQtMS0xLTMwMTQwL3RleHRyZWdpb246MmE2MDI3NWRkNTgxNDdkODk0MTI1ODMxODRjZWI1MWVfMzM_3a6f7bcd-7e6c-4667-a876-629d3bd11297">NASDAQ</dei:SecurityExchangeName>
    <dei:EntityWellKnownSeasonedIssuer
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xL2ZyYWc6MzM5OTRlM2EwOTk3NGJhOWFlNzI5MjQ2NzE5ZTQ1Y2YvdGV4dHJlZ2lvbjozMzk5NGUzYTA5OTc0YmE5YWU3MjkyNDY3MTllNDVjZl80OTQ3ODAyMzI4NjEx_03615db8-020d-4c91-b1d4-d0cd57d26964">Yes</dei:EntityWellKnownSeasonedIssuer>
    <dei:EntityVoluntaryFilers
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xL2ZyYWc6MzM5OTRlM2EwOTk3NGJhOWFlNzI5MjQ2NzE5ZTQ1Y2YvdGV4dHJlZ2lvbjozMzk5NGUzYTA5OTc0YmE5YWU3MjkyNDY3MTllNDVjZl8zNDcy_4096591d-9298-44f2-a155-d0c91bfdb566">No</dei:EntityVoluntaryFilers>
    <dei:EntityCurrentReportingStatus
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xL2ZyYWc6MzM5OTRlM2EwOTk3NGJhOWFlNzI5MjQ2NzE5ZTQ1Y2YvdGV4dHJlZ2lvbjozMzk5NGUzYTA5OTc0YmE5YWU3MjkyNDY3MTllNDVjZl8zNDY4_573db943-1866-4ddc-b5cf-f3b84c595f2a">Yes</dei:EntityCurrentReportingStatus>
    <dei:EntityInteractiveDataCurrent
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xL2ZyYWc6MzM5OTRlM2EwOTk3NGJhOWFlNzI5MjQ2NzE5ZTQ1Y2YvdGV4dHJlZ2lvbjozMzk5NGUzYTA5OTc0YmE5YWU3MjkyNDY3MTllNDVjZl8zNDY5_695b99af-4570-4ac8-815b-751a52136837">Yes</dei:EntityInteractiveDataCurrent>
    <dei:EntityFilerCategory
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xL2ZyYWc6MzM5OTRlM2EwOTk3NGJhOWFlNzI5MjQ2NzE5ZTQ1Y2YvdGFibGU6NmY0YmE0MmUxZTVkNDM0MGI4OGUzNWNjZjE0MGU1MjQvdGFibGVyYW5nZTo2ZjRiYTQyZTFlNWQ0MzQwYjg4ZTM1Y2NmMTQwZTUyNF8wLTAtMS0xLTMwMTQwL3RleHRyZWdpb246NzVmM2I3NjcxZGFlNDFmNmI5MmQ3NzRkOWViOTM3YzRfNA_8c59d8b4-8b82-4d11-b5f1-7d100db8920f">Large Accelerated Filer</dei:EntityFilerCategory>
    <dei:EntitySmallBusiness
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xL2ZyYWc6MzM5OTRlM2EwOTk3NGJhOWFlNzI5MjQ2NzE5ZTQ1Y2YvdGFibGU6NmY0YmE0MmUxZTVkNDM0MGI4OGUzNWNjZjE0MGU1MjQvdGFibGVyYW5nZTo2ZjRiYTQyZTFlNWQ0MzQwYjg4ZTM1Y2NmMTQwZTUyNF8xLTMtMS0xLTMwMTQw_51f37b64-b347-4174-9bec-d78f1c0f9bf4">false</dei:EntitySmallBusiness>
    <dei:EntityEmergingGrowthCompany
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xL2ZyYWc6MzM5OTRlM2EwOTk3NGJhOWFlNzI5MjQ2NzE5ZTQ1Y2YvdGFibGU6NmY0YmE0MmUxZTVkNDM0MGI4OGUzNWNjZjE0MGU1MjQvdGFibGVyYW5nZTo2ZjRiYTQyZTFlNWQ0MzQwYjg4ZTM1Y2NmMTQwZTUyNF8yLTMtMS0xLTMwMTQw_eb476c96-30a8-42c3-ae3a-e67d4c3a7cfa">false</dei:EntityEmergingGrowthCompany>
    <dei:IcfrAuditorAttestationFlag
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xL2ZyYWc6MzM5OTRlM2EwOTk3NGJhOWFlNzI5MjQ2NzE5ZTQ1Y2YvdGV4dHJlZ2lvbjozMzk5NGUzYTA5OTc0YmE5YWU3MjkyNDY3MTllNDVjZl8zNDcw_73a67bea-582b-4004-834e-9122e69005af">true</dei:IcfrAuditorAttestationFlag>
    <dei:EntityShellCompany
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xL2ZyYWc6MzM5OTRlM2EwOTk3NGJhOWFlNzI5MjQ2NzE5ZTQ1Y2YvdGV4dHJlZ2lvbjozMzk5NGUzYTA5OTc0YmE5YWU3MjkyNDY3MTllNDVjZl8zNDYz_e889a4da-6747-4cce-8462-e1a9e5b8833a">false</dei:EntityShellCompany>
    <dei:EntityPublicFloat
      contextRef="ic16735f1f26d45439f3866edfd6b4d89_I20220630"
      decimals="-8"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xL2ZyYWc6MzM5OTRlM2EwOTk3NGJhOWFlNzI5MjQ2NzE5ZTQ1Y2YvdGV4dHJlZ2lvbjozMzk5NGUzYTA5OTc0YmE5YWU3MjkyNDY3MTllNDVjZl81NDk3NTU4MTc1OTI_2e162dc4-117c-430f-b54f-07e38e6d7f57"
      unitRef="usd">4100000000</dei:EntityPublicFloat>
    <dei:EntityCommonStockSharesOutstanding
      contextRef="i7da9cead03f04c6895126b7b0cd3adf7_I20230210"
      decimals="INF"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xL2ZyYWc6MzM5OTRlM2EwOTk3NGJhOWFlNzI5MjQ2NzE5ZTQ1Y2YvdGV4dHJlZ2lvbjozMzk5NGUzYTA5OTc0YmE5YWU3MjkyNDY3MTllNDVjZl8xNjQ5MjY3NDQ1MjIy_8d5a8daf-dfd2-43c4-9c17-4ab48c0f9c48"
      unitRef="shares">36312238</dei:EntityCommonStockSharesOutstanding>
    <dei:DocumentsIncorporatedByReferenceTextBlock
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xL2ZyYWc6MzM5OTRlM2EwOTk3NGJhOWFlNzI5MjQ2NzE5ZTQ1Y2YvdGV4dHJlZ2lvbjozMzk5NGUzYTA5OTc0YmE5YWU3MjkyNDY3MTllNDVjZl8zNDY3_229669cb-57ed-44ff-9e43-60be85f73a0d">DOCUMENTS INCORPORATED BY REFERENCEPortions of the Company&#x2019;s definitive Proxy Statement for the Annual Meeting of Stockholders to be held on May&#160;12, 2023 (the &#x201c;2023 Proxy Statement&#x201d;), which is expected to be filed within 120 days after the end of the fiscal year covered by this Annual Report on Form 10-K, are incorporated by reference in Part III of this Annual Report on Form 10-K.</dei:DocumentsIncorporatedByReferenceTextBlock>
    <dei:AuditorFirmId
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xL2ZyYWc6MzM5OTRlM2EwOTk3NGJhOWFlNzI5MjQ2NzE5ZTQ1Y2YvdGFibGU6NTJiMWYxMDRlMTgzNDY4N2I5MzhhYThjMTNkMzc2OTYvdGFibGVyYW5nZTo1MmIxZjEwNGUxODM0Njg3YjkzOGFhOGMxM2QzNzY5Nl8wLTEtMS0xLTMwMTQw_40044eaa-bfb1-478c-b327-66177a95c093">185</dei:AuditorFirmId>
    <dei:AuditorName
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xL2ZyYWc6MzM5OTRlM2EwOTk3NGJhOWFlNzI5MjQ2NzE5ZTQ1Y2YvdGFibGU6NTJiMWYxMDRlMTgzNDY4N2I5MzhhYThjMTNkMzc2OTYvdGFibGVyYW5nZTo1MmIxZjEwNGUxODM0Njg3YjkzOGFhOGMxM2QzNzY5Nl8wLTMtMS0xLTMwMTQw_cbf19f45-3a7f-40e8-9dd6-d3b0e08b8855">KPMG, LLP</dei:AuditorName>
    <dei:AuditorLocation
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xL2ZyYWc6MzM5OTRlM2EwOTk3NGJhOWFlNzI5MjQ2NzE5ZTQ1Y2YvdGFibGU6NTJiMWYxMDRlMTgzNDY4N2I5MzhhYThjMTNkMzc2OTYvdGFibGVyYW5nZTo1MmIxZjEwNGUxODM0Njg3YjkzOGFhOGMxM2QzNzY5Nl8wLTUtMS0xLTMwMTQw_30006c94-7894-41de-904a-da0db039b91f">Minneapolis, MN</dei:AuditorLocation>
    <us-gaap:CashAndCashEquivalentsAtCarryingValue
      contextRef="ibbc2d589a09c46368d9dd3e9ea8996c6_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83NjUvZnJhZzoyNzlmMmM5ZDEyNWM0YTE0OTFhNDkwZWUyY2FmN2M2OC90YWJsZTo4YmJlOGIyZWNhMGQ0MzcxODE4MmJhZjZmY2U0OGIxOC90YWJsZXJhbmdlOjhiYmU4YjJlY2EwZDQzNzE4MTgyYmFmNmZjZTQ4YjE4XzQtMS0xLTEtNzEyMDQ_3e45f3c9-bb11-4304-bfc2-58c7a402fd23"
      unitRef="usd">162893000</us-gaap:CashAndCashEquivalentsAtCarryingValue>
    <us-gaap:CashAndCashEquivalentsAtCarryingValue
      contextRef="i62ba0be1fd094d818a1f7d0d5504d1e2_I20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83NjUvZnJhZzoyNzlmMmM5ZDEyNWM0YTE0OTFhNDkwZWUyY2FmN2M2OC90YWJsZTo4YmJlOGIyZWNhMGQ0MzcxODE4MmJhZjZmY2U0OGIxOC90YWJsZXJhbmdlOjhiYmU4YjJlY2EwZDQzNzE4MTgyYmFmNmZjZTQ4YjE4XzQtMy0xLTEtNzEyMDQ_af5d8ca5-636a-482b-ba0e-f16430d2860c"
      unitRef="usd">207552000</us-gaap:CashAndCashEquivalentsAtCarryingValue>
    <us-gaap:ShortTermInvestments
      contextRef="ibbc2d589a09c46368d9dd3e9ea8996c6_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83NjUvZnJhZzoyNzlmMmM5ZDEyNWM0YTE0OTFhNDkwZWUyY2FmN2M2OC90YWJsZTo4YmJlOGIyZWNhMGQ0MzcxODE4MmJhZjZmY2U0OGIxOC90YWJsZXJhbmdlOjhiYmU4YjJlY2EwZDQzNzE4MTgyYmFmNmZjZTQ4YjE4XzUtMS0xLTEtNzEyMDQ_730cd4e7-1d4d-4433-82de-1ca140ff48c7"
      unitRef="usd">51412000</us-gaap:ShortTermInvestments>
    <us-gaap:ShortTermInvestments
      contextRef="i62ba0be1fd094d818a1f7d0d5504d1e2_I20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83NjUvZnJhZzoyNzlmMmM5ZDEyNWM0YTE0OTFhNDkwZWUyY2FmN2M2OC90YWJsZTo4YmJlOGIyZWNhMGQ0MzcxODE4MmJhZjZmY2U0OGIxOC90YWJsZXJhbmdlOjhiYmU4YjJlY2EwZDQzNzE4MTgyYmFmNmZjZTQ4YjE4XzUtMy0xLTEtNzEyMDQ_3cefe3d7-d82a-4571-9347-18a7cc2d0c15"
      unitRef="usd">49758000</us-gaap:ShortTermInvestments>
    <us-gaap:AccountsReceivableGrossCurrent
      contextRef="ibbc2d589a09c46368d9dd3e9ea8996c6_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83NjUvZnJhZzoyNzlmMmM5ZDEyNWM0YTE0OTFhNDkwZWUyY2FmN2M2OC90YWJsZTo4YmJlOGIyZWNhMGQ0MzcxODE4MmJhZjZmY2U0OGIxOC90YWJsZXJhbmdlOjhiYmU4YjJlY2EwZDQzNzE4MTgyYmFmNmZjZTQ4YjE4XzYtMS0xLTEtNzEyMDQ_6cc51789-baca-43ae-8458-6a9b5ee9dcea"
      unitRef="usd">42501000</us-gaap:AccountsReceivableGrossCurrent>
    <us-gaap:AccountsReceivableGrossCurrent
      contextRef="i62ba0be1fd094d818a1f7d0d5504d1e2_I20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83NjUvZnJhZzoyNzlmMmM5ZDEyNWM0YTE0OTFhNDkwZWUyY2FmN2M2OC90YWJsZTo4YmJlOGIyZWNhMGQ0MzcxODE4MmJhZjZmY2U0OGIxOC90YWJsZXJhbmdlOjhiYmU4YjJlY2EwZDQzNzE4MTgyYmFmNmZjZTQ4YjE4XzYtMy0xLTEtNzEyMDQ_e57d78f8-da27-45e7-98d2-41d3e74fc953"
      unitRef="usd">38811000</us-gaap:AccountsReceivableGrossCurrent>
    <us-gaap:AllowanceForDoubtfulAccountsReceivableCurrent
      contextRef="ibbc2d589a09c46368d9dd3e9ea8996c6_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83NjUvZnJhZzoyNzlmMmM5ZDEyNWM0YTE0OTFhNDkwZWUyY2FmN2M2OC90YWJsZTo4YmJlOGIyZWNhMGQ0MzcxODE4MmJhZjZmY2U0OGIxOC90YWJsZXJhbmdlOjhiYmU4YjJlY2EwZDQzNzE4MTgyYmFmNmZjZTQ4YjE4XzctMS0xLTEtNzEyMDQ_5b2d3817-7837-4939-a7b2-52443a9b68b5"
      unitRef="usd">3066000</us-gaap:AllowanceForDoubtfulAccountsReceivableCurrent>
    <us-gaap:AllowanceForDoubtfulAccountsReceivableCurrent
      contextRef="i62ba0be1fd094d818a1f7d0d5504d1e2_I20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83NjUvZnJhZzoyNzlmMmM5ZDEyNWM0YTE0OTFhNDkwZWUyY2FmN2M2OC90YWJsZTo4YmJlOGIyZWNhMGQ0MzcxODE4MmJhZjZmY2U0OGIxOC90YWJsZXJhbmdlOjhiYmU4YjJlY2EwZDQzNzE4MTgyYmFmNmZjZTQ4YjE4XzctMy0xLTEtNzEyMDQ_5037347f-33df-4471-b00e-8b6e4180ec41"
      unitRef="usd">4249000</us-gaap:AllowanceForDoubtfulAccountsReceivableCurrent>
    <us-gaap:AccountsReceivableNetCurrent
      contextRef="ibbc2d589a09c46368d9dd3e9ea8996c6_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83NjUvZnJhZzoyNzlmMmM5ZDEyNWM0YTE0OTFhNDkwZWUyY2FmN2M2OC90YWJsZTo4YmJlOGIyZWNhMGQ0MzcxODE4MmJhZjZmY2U0OGIxOC90YWJsZXJhbmdlOjhiYmU4YjJlY2EwZDQzNzE4MTgyYmFmNmZjZTQ4YjE4XzgtMS0xLTEtNzEyMDQ_295aced1-d1a1-4c33-a2c2-17ca337aa9cb"
      unitRef="usd">39435000</us-gaap:AccountsReceivableNetCurrent>
    <us-gaap:AccountsReceivableNetCurrent
      contextRef="i62ba0be1fd094d818a1f7d0d5504d1e2_I20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83NjUvZnJhZzoyNzlmMmM5ZDEyNWM0YTE0OTFhNDkwZWUyY2FmN2M2OC90YWJsZTo4YmJlOGIyZWNhMGQ0MzcxODE4MmJhZjZmY2U0OGIxOC90YWJsZXJhbmdlOjhiYmU4YjJlY2EwZDQzNzE4MTgyYmFmNmZjZTQ4YjE4XzgtMy0xLTEtNzEyMDQ_46bf0abe-a004-4077-a0be-b11c070f6cef"
      unitRef="usd">34562000</us-gaap:AccountsReceivableNetCurrent>
    <us-gaap:DeferredCostsCurrent
      contextRef="ibbc2d589a09c46368d9dd3e9ea8996c6_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83NjUvZnJhZzoyNzlmMmM5ZDEyNWM0YTE0OTFhNDkwZWUyY2FmN2M2OC90YWJsZTo4YmJlOGIyZWNhMGQ0MzcxODE4MmJhZjZmY2U0OGIxOC90YWJsZXJhbmdlOjhiYmU4YjJlY2EwZDQzNzE4MTgyYmFmNmZjZTQ4YjE4XzktMS0xLTEtNzEyMDQ_8579a80c-fc59-4964-9b5f-81d0f0f846bb"
      unitRef="usd">52755000</us-gaap:DeferredCostsCurrent>
    <us-gaap:DeferredCostsCurrent
      contextRef="i62ba0be1fd094d818a1f7d0d5504d1e2_I20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83NjUvZnJhZzoyNzlmMmM5ZDEyNWM0YTE0OTFhNDkwZWUyY2FmN2M2OC90YWJsZTo4YmJlOGIyZWNhMGQ0MzcxODE4MmJhZjZmY2U0OGIxOC90YWJsZXJhbmdlOjhiYmU4YjJlY2EwZDQzNzE4MTgyYmFmNmZjZTQ4YjE4XzktMy0xLTEtNzEyMDQ_01ed85f7-3fac-4a54-9536-1631c4031c1d"
      unitRef="usd">44529000</us-gaap:DeferredCostsCurrent>
    <us-gaap:OtherAssetsCurrent
      contextRef="ibbc2d589a09c46368d9dd3e9ea8996c6_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83NjUvZnJhZzoyNzlmMmM5ZDEyNWM0YTE0OTFhNDkwZWUyY2FmN2M2OC90YWJsZTo4YmJlOGIyZWNhMGQ0MzcxODE4MmJhZjZmY2U0OGIxOC90YWJsZXJhbmdlOjhiYmU4YjJlY2EwZDQzNzE4MTgyYmFmNmZjZTQ4YjE4XzEwLTEtMS0xLTcxMjA0_c3bc78f4-4f89-4e87-a46e-03043b1562d3"
      unitRef="usd">16319000</us-gaap:OtherAssetsCurrent>
    <us-gaap:OtherAssetsCurrent
      contextRef="i62ba0be1fd094d818a1f7d0d5504d1e2_I20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83NjUvZnJhZzoyNzlmMmM5ZDEyNWM0YTE0OTFhNDkwZWUyY2FmN2M2OC90YWJsZTo4YmJlOGIyZWNhMGQ0MzcxODE4MmJhZjZmY2U0OGIxOC90YWJsZXJhbmdlOjhiYmU4YjJlY2EwZDQzNzE4MTgyYmFmNmZjZTQ4YjE4XzEwLTMtMS0xLTcxMjA0_2ca7b820-1bd0-4201-a449-ef62fd638481"
      unitRef="usd">16042000</us-gaap:OtherAssetsCurrent>
    <us-gaap:AssetsCurrent
      contextRef="ibbc2d589a09c46368d9dd3e9ea8996c6_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83NjUvZnJhZzoyNzlmMmM5ZDEyNWM0YTE0OTFhNDkwZWUyY2FmN2M2OC90YWJsZTo4YmJlOGIyZWNhMGQ0MzcxODE4MmJhZjZmY2U0OGIxOC90YWJsZXJhbmdlOjhiYmU4YjJlY2EwZDQzNzE4MTgyYmFmNmZjZTQ4YjE4XzExLTEtMS0xLTcxMjA0_f52b0e69-d03e-4086-a5f0-4c8324e72aa4"
      unitRef="usd">322814000</us-gaap:AssetsCurrent>
    <us-gaap:AssetsCurrent
      contextRef="i62ba0be1fd094d818a1f7d0d5504d1e2_I20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83NjUvZnJhZzoyNzlmMmM5ZDEyNWM0YTE0OTFhNDkwZWUyY2FmN2M2OC90YWJsZTo4YmJlOGIyZWNhMGQ0MzcxODE4MmJhZjZmY2U0OGIxOC90YWJsZXJhbmdlOjhiYmU4YjJlY2EwZDQzNzE4MTgyYmFmNmZjZTQ4YjE4XzExLTMtMS0xLTcxMjA0_a987e39c-ea37-4168-a09d-4cc66bf91c9f"
      unitRef="usd">352443000</us-gaap:AssetsCurrent>
    <us-gaap:PropertyPlantAndEquipmentNet
      contextRef="ibbc2d589a09c46368d9dd3e9ea8996c6_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83NjUvZnJhZzoyNzlmMmM5ZDEyNWM0YTE0OTFhNDkwZWUyY2FmN2M2OC90YWJsZTo4YmJlOGIyZWNhMGQ0MzcxODE4MmJhZjZmY2U0OGIxOC90YWJsZXJhbmdlOjhiYmU4YjJlY2EwZDQzNzE4MTgyYmFmNmZjZTQ4YjE4XzEyLTEtMS0xLTcxMjA0_87bd532a-5c2e-48fe-b33e-19e0e56592e2"
      unitRef="usd">35458000</us-gaap:PropertyPlantAndEquipmentNet>
    <us-gaap:PropertyPlantAndEquipmentNet
      contextRef="i62ba0be1fd094d818a1f7d0d5504d1e2_I20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83NjUvZnJhZzoyNzlmMmM5ZDEyNWM0YTE0OTFhNDkwZWUyY2FmN2M2OC90YWJsZTo4YmJlOGIyZWNhMGQ0MzcxODE4MmJhZjZmY2U0OGIxOC90YWJsZXJhbmdlOjhiYmU4YjJlY2EwZDQzNzE4MTgyYmFmNmZjZTQ4YjE4XzEyLTMtMS0xLTcxMjA0_3199af2e-7b81-46a0-9461-838d9a8e1452"
      unitRef="usd">31901000</us-gaap:PropertyPlantAndEquipmentNet>
    <us-gaap:OperatingLeaseRightOfUseAsset
      contextRef="ibbc2d589a09c46368d9dd3e9ea8996c6_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83NjUvZnJhZzoyNzlmMmM5ZDEyNWM0YTE0OTFhNDkwZWUyY2FmN2M2OC90YWJsZTo4YmJlOGIyZWNhMGQ0MzcxODE4MmJhZjZmY2U0OGIxOC90YWJsZXJhbmdlOjhiYmU4YjJlY2EwZDQzNzE4MTgyYmFmNmZjZTQ4YjE4XzEzLTEtMS0xLTcxMjA0_77320b5f-4846-4c80-bf42-3de0f5f3d206"
      unitRef="usd">9170000</us-gaap:OperatingLeaseRightOfUseAsset>
    <us-gaap:OperatingLeaseRightOfUseAsset
      contextRef="i62ba0be1fd094d818a1f7d0d5504d1e2_I20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83NjUvZnJhZzoyNzlmMmM5ZDEyNWM0YTE0OTFhNDkwZWUyY2FmN2M2OC90YWJsZTo4YmJlOGIyZWNhMGQ0MzcxODE4MmJhZjZmY2U0OGIxOC90YWJsZXJhbmdlOjhiYmU4YjJlY2EwZDQzNzE4MTgyYmFmNmZjZTQ4YjE4XzEzLTMtMS0xLTcxMjA0_d236418c-2a58-437f-8b63-9b90d4ea9479"
      unitRef="usd">10851000</us-gaap:OperatingLeaseRightOfUseAsset>
    <us-gaap:Goodwill
      contextRef="ibbc2d589a09c46368d9dd3e9ea8996c6_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83NjUvZnJhZzoyNzlmMmM5ZDEyNWM0YTE0OTFhNDkwZWUyY2FmN2M2OC90YWJsZTo4YmJlOGIyZWNhMGQ0MzcxODE4MmJhZjZmY2U0OGIxOC90YWJsZXJhbmdlOjhiYmU4YjJlY2EwZDQzNzE4MTgyYmFmNmZjZTQ4YjE4XzE0LTEtMS0xLTcxMjA0_d67bc7d0-4088-4fbf-bf22-7c0f3e7461fd"
      unitRef="usd">197284000</us-gaap:Goodwill>
    <us-gaap:Goodwill
      contextRef="i62ba0be1fd094d818a1f7d0d5504d1e2_I20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83NjUvZnJhZzoyNzlmMmM5ZDEyNWM0YTE0OTFhNDkwZWUyY2FmN2M2OC90YWJsZTo4YmJlOGIyZWNhMGQ0MzcxODE4MmJhZjZmY2U0OGIxOC90YWJsZXJhbmdlOjhiYmU4YjJlY2EwZDQzNzE4MTgyYmFmNmZjZTQ4YjE4XzE0LTMtMS0xLTcxMjA0_a2b5c283-23ce-402f-a386-be1074c13c0f"
      unitRef="usd">143663000</us-gaap:Goodwill>
    <us-gaap:FiniteLivedIntangibleAssetsNet
      contextRef="ibbc2d589a09c46368d9dd3e9ea8996c6_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83NjUvZnJhZzoyNzlmMmM5ZDEyNWM0YTE0OTFhNDkwZWUyY2FmN2M2OC90YWJsZTo4YmJlOGIyZWNhMGQ0MzcxODE4MmJhZjZmY2U0OGIxOC90YWJsZXJhbmdlOjhiYmU4YjJlY2EwZDQzNzE4MTgyYmFmNmZjZTQ4YjE4XzE1LTEtMS0xLTcxMjA0_13f79a4a-288f-4e04-bf9b-e68acd29e282"
      unitRef="usd">88352000</us-gaap:FiniteLivedIntangibleAssetsNet>
    <us-gaap:FiniteLivedIntangibleAssetsNet
      contextRef="i62ba0be1fd094d818a1f7d0d5504d1e2_I20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83NjUvZnJhZzoyNzlmMmM5ZDEyNWM0YTE0OTFhNDkwZWUyY2FmN2M2OC90YWJsZTo4YmJlOGIyZWNhMGQ0MzcxODE4MmJhZjZmY2U0OGIxOC90YWJsZXJhbmdlOjhiYmU4YjJlY2EwZDQzNzE4MTgyYmFmNmZjZTQ4YjE4XzE1LTMtMS0xLTcxMjA0_abe75833-6132-4e33-8a94-64ec724a7aab"
      unitRef="usd">58587000</us-gaap:FiniteLivedIntangibleAssetsNet>
    <us-gaap:DeferredCosts
      contextRef="ibbc2d589a09c46368d9dd3e9ea8996c6_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83NjUvZnJhZzoyNzlmMmM5ZDEyNWM0YTE0OTFhNDkwZWUyY2FmN2M2OC90YWJsZTo4YmJlOGIyZWNhMGQ0MzcxODE4MmJhZjZmY2U0OGIxOC90YWJsZXJhbmdlOjhiYmU4YjJlY2EwZDQzNzE4MTgyYmFmNmZjZTQ4YjE4XzE3LTEtMS0xLTcxMjA0_feaaca75-c006-46bd-8c24-1e8eecde484e"
      unitRef="usd">17424000</us-gaap:DeferredCosts>
    <us-gaap:DeferredCosts
      contextRef="i62ba0be1fd094d818a1f7d0d5504d1e2_I20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83NjUvZnJhZzoyNzlmMmM5ZDEyNWM0YTE0OTFhNDkwZWUyY2FmN2M2OC90YWJsZTo4YmJlOGIyZWNhMGQ0MzcxODE4MmJhZjZmY2U0OGIxOC90YWJsZXJhbmdlOjhiYmU4YjJlY2EwZDQzNzE4MTgyYmFmNmZjZTQ4YjE4XzE3LTMtMS0xLTcxMjA0_86820a49-9338-4dd9-afd0-7ee9ef3b9b15"
      unitRef="usd">15191000</us-gaap:DeferredCosts>
    <us-gaap:DeferredIncomeTaxAssetsNet
      contextRef="ibbc2d589a09c46368d9dd3e9ea8996c6_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83NjUvZnJhZzoyNzlmMmM5ZDEyNWM0YTE0OTFhNDkwZWUyY2FmN2M2OC90YWJsZTo4YmJlOGIyZWNhMGQ0MzcxODE4MmJhZjZmY2U0OGIxOC90YWJsZXJhbmdlOjhiYmU4YjJlY2EwZDQzNzE4MTgyYmFmNmZjZTQ4YjE4XzE4LTEtMS0xLTcxMjA0_ce1a5a50-d927-4739-8440-4833e15987af"
      unitRef="usd">227000</us-gaap:DeferredIncomeTaxAssetsNet>
    <us-gaap:DeferredIncomeTaxAssetsNet
      contextRef="i62ba0be1fd094d818a1f7d0d5504d1e2_I20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83NjUvZnJhZzoyNzlmMmM5ZDEyNWM0YTE0OTFhNDkwZWUyY2FmN2M2OC90YWJsZTo4YmJlOGIyZWNhMGQ0MzcxODE4MmJhZjZmY2U0OGIxOC90YWJsZXJhbmdlOjhiYmU4YjJlY2EwZDQzNzE4MTgyYmFmNmZjZTQ4YjE4XzE4LTMtMS0xLTcxMjA0_bd76a05c-e1c1-4c18-9b29-441923767830"
      unitRef="usd">182000</us-gaap:DeferredIncomeTaxAssetsNet>
    <us-gaap:OtherAssetsNoncurrent
      contextRef="ibbc2d589a09c46368d9dd3e9ea8996c6_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83NjUvZnJhZzoyNzlmMmM5ZDEyNWM0YTE0OTFhNDkwZWUyY2FmN2M2OC90YWJsZTo4YmJlOGIyZWNhMGQ0MzcxODE4MmJhZjZmY2U0OGIxOC90YWJsZXJhbmdlOjhiYmU4YjJlY2EwZDQzNzE4MTgyYmFmNmZjZTQ4YjE4XzE5LTEtMS0xLTcxMjA0_66473497-0eb7-4566-ac03-4875c10cf17d"
      unitRef="usd">2185000</us-gaap:OtherAssetsNoncurrent>
    <us-gaap:OtherAssetsNoncurrent
      contextRef="i62ba0be1fd094d818a1f7d0d5504d1e2_I20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83NjUvZnJhZzoyNzlmMmM5ZDEyNWM0YTE0OTFhNDkwZWUyY2FmN2M2OC90YWJsZTo4YmJlOGIyZWNhMGQ0MzcxODE4MmJhZjZmY2U0OGIxOC90YWJsZXJhbmdlOjhiYmU4YjJlY2EwZDQzNzE4MTgyYmFmNmZjZTQ4YjE4XzE5LTMtMS0xLTcxMjA0_caa8c92f-e4d9-4230-abe1-3c3248308140"
      unitRef="usd">3028000</us-gaap:OtherAssetsNoncurrent>
    <us-gaap:Assets
      contextRef="ibbc2d589a09c46368d9dd3e9ea8996c6_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83NjUvZnJhZzoyNzlmMmM5ZDEyNWM0YTE0OTFhNDkwZWUyY2FmN2M2OC90YWJsZTo4YmJlOGIyZWNhMGQ0MzcxODE4MmJhZjZmY2U0OGIxOC90YWJsZXJhbmdlOjhiYmU4YjJlY2EwZDQzNzE4MTgyYmFmNmZjZTQ4YjE4XzIwLTEtMS0xLTcxMjA0_69404d6c-7433-435e-abb4-3f26e439cfee"
      unitRef="usd">672914000</us-gaap:Assets>
    <us-gaap:Assets
      contextRef="i62ba0be1fd094d818a1f7d0d5504d1e2_I20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83NjUvZnJhZzoyNzlmMmM5ZDEyNWM0YTE0OTFhNDkwZWUyY2FmN2M2OC90YWJsZTo4YmJlOGIyZWNhMGQ0MzcxODE4MmJhZjZmY2U0OGIxOC90YWJsZXJhbmdlOjhiYmU4YjJlY2EwZDQzNzE4MTgyYmFmNmZjZTQ4YjE4XzIwLTMtMS0xLTcxMjA0_d432b632-dec0-4fa5-b485-25dcbd502c03"
      unitRef="usd">615846000</us-gaap:Assets>
    <us-gaap:AccountsPayableCurrent
      contextRef="ibbc2d589a09c46368d9dd3e9ea8996c6_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83NjUvZnJhZzoyNzlmMmM5ZDEyNWM0YTE0OTFhNDkwZWUyY2FmN2M2OC90YWJsZTo4YmJlOGIyZWNhMGQ0MzcxODE4MmJhZjZmY2U0OGIxOC90YWJsZXJhbmdlOjhiYmU4YjJlY2EwZDQzNzE4MTgyYmFmNmZjZTQ4YjE4XzIzLTEtMS0xLTcxMjA0_b9267458-d3cd-4adc-8159-454197a705c0"
      unitRef="usd">11256000</us-gaap:AccountsPayableCurrent>
    <us-gaap:AccountsPayableCurrent
      contextRef="i62ba0be1fd094d818a1f7d0d5504d1e2_I20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83NjUvZnJhZzoyNzlmMmM5ZDEyNWM0YTE0OTFhNDkwZWUyY2FmN2M2OC90YWJsZTo4YmJlOGIyZWNhMGQ0MzcxODE4MmJhZjZmY2U0OGIxOC90YWJsZXJhbmdlOjhiYmU4YjJlY2EwZDQzNzE4MTgyYmFmNmZjZTQ4YjE4XzIzLTMtMS0xLTcxMjA0_07dfc303-7ed2-46fb-8728-e3ec99b9fbe8"
      unitRef="usd">8330000</us-gaap:AccountsPayableCurrent>
    <us-gaap:EmployeeRelatedLiabilitiesCurrent
      contextRef="ibbc2d589a09c46368d9dd3e9ea8996c6_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83NjUvZnJhZzoyNzlmMmM5ZDEyNWM0YTE0OTFhNDkwZWUyY2FmN2M2OC90YWJsZTo4YmJlOGIyZWNhMGQ0MzcxODE4MmJhZjZmY2U0OGIxOC90YWJsZXJhbmdlOjhiYmU4YjJlY2EwZDQzNzE4MTgyYmFmNmZjZTQ4YjE4XzI0LTEtMS0xLTcxMjA0_041e472d-d6a5-4a1a-84dc-ff650949d4a4"
      unitRef="usd">30235000</us-gaap:EmployeeRelatedLiabilitiesCurrent>
    <us-gaap:EmployeeRelatedLiabilitiesCurrent
      contextRef="i62ba0be1fd094d818a1f7d0d5504d1e2_I20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83NjUvZnJhZzoyNzlmMmM5ZDEyNWM0YTE0OTFhNDkwZWUyY2FmN2M2OC90YWJsZTo4YmJlOGIyZWNhMGQ0MzcxODE4MmJhZjZmY2U0OGIxOC90YWJsZXJhbmdlOjhiYmU4YjJlY2EwZDQzNzE4MTgyYmFmNmZjZTQ4YjE4XzI0LTMtMS0xLTcxMjA0_28b83fbe-dacf-4ee8-ab9d-1de28dbd8304"
      unitRef="usd">31661000</us-gaap:EmployeeRelatedLiabilitiesCurrent>
    <us-gaap:AccruedLiabilitiesCurrent
      contextRef="ibbc2d589a09c46368d9dd3e9ea8996c6_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83NjUvZnJhZzoyNzlmMmM5ZDEyNWM0YTE0OTFhNDkwZWUyY2FmN2M2OC90YWJsZTo4YmJlOGIyZWNhMGQ0MzcxODE4MmJhZjZmY2U0OGIxOC90YWJsZXJhbmdlOjhiYmU4YjJlY2EwZDQzNzE4MTgyYmFmNmZjZTQ4YjE4XzI1LTEtMS0xLTcxMjA0_a1ee586a-173a-49f4-a4af-ae0fc3098836"
      unitRef="usd">7451000</us-gaap:AccruedLiabilitiesCurrent>
    <us-gaap:AccruedLiabilitiesCurrent
      contextRef="i62ba0be1fd094d818a1f7d0d5504d1e2_I20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83NjUvZnJhZzoyNzlmMmM5ZDEyNWM0YTE0OTFhNDkwZWUyY2FmN2M2OC90YWJsZTo4YmJlOGIyZWNhMGQ0MzcxODE4MmJhZjZmY2U0OGIxOC90YWJsZXJhbmdlOjhiYmU4YjJlY2EwZDQzNzE4MTgyYmFmNmZjZTQ4YjE4XzI1LTMtMS0xLTcxMjA0_e442ab93-c900-476e-9e9d-b2bdbf815267"
      unitRef="usd">8345000</us-gaap:AccruedLiabilitiesCurrent>
    <us-gaap:ContractWithCustomerLiabilityCurrent
      contextRef="ibbc2d589a09c46368d9dd3e9ea8996c6_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83NjUvZnJhZzoyNzlmMmM5ZDEyNWM0YTE0OTFhNDkwZWUyY2FmN2M2OC90YWJsZTo4YmJlOGIyZWNhMGQ0MzcxODE4MmJhZjZmY2U0OGIxOC90YWJsZXJhbmdlOjhiYmU4YjJlY2EwZDQzNzE4MTgyYmFmNmZjZTQ4YjE4XzI2LTEtMS0xLTcxMjA0_f1829b28-0109-4ea8-9ad6-0ed5086fa6a3"
      unitRef="usd">57423000</us-gaap:ContractWithCustomerLiabilityCurrent>
    <us-gaap:ContractWithCustomerLiabilityCurrent
      contextRef="i62ba0be1fd094d818a1f7d0d5504d1e2_I20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83NjUvZnJhZzoyNzlmMmM5ZDEyNWM0YTE0OTFhNDkwZWUyY2FmN2M2OC90YWJsZTo4YmJlOGIyZWNhMGQ0MzcxODE4MmJhZjZmY2U0OGIxOC90YWJsZXJhbmdlOjhiYmU4YjJlY2EwZDQzNzE4MTgyYmFmNmZjZTQ4YjE4XzI2LTMtMS0xLTcxMjA0_c8428ea1-5315-406a-9455-b757d3f1f797"
      unitRef="usd">50428000</us-gaap:ContractWithCustomerLiabilityCurrent>
    <us-gaap:OperatingLeaseLiabilityCurrent
      contextRef="ibbc2d589a09c46368d9dd3e9ea8996c6_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83NjUvZnJhZzoyNzlmMmM5ZDEyNWM0YTE0OTFhNDkwZWUyY2FmN2M2OC90YWJsZTo4YmJlOGIyZWNhMGQ0MzcxODE4MmJhZjZmY2U0OGIxOC90YWJsZXJhbmdlOjhiYmU4YjJlY2EwZDQzNzE4MTgyYmFmNmZjZTQ4YjE4XzI3LTEtMS0xLTcxMjA0_73ba9494-a70a-4494-906f-16b351e89090"
      unitRef="usd">4277000</us-gaap:OperatingLeaseLiabilityCurrent>
    <us-gaap:OperatingLeaseLiabilityCurrent
      contextRef="i62ba0be1fd094d818a1f7d0d5504d1e2_I20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83NjUvZnJhZzoyNzlmMmM5ZDEyNWM0YTE0OTFhNDkwZWUyY2FmN2M2OC90YWJsZTo4YmJlOGIyZWNhMGQ0MzcxODE4MmJhZjZmY2U0OGIxOC90YWJsZXJhbmdlOjhiYmU4YjJlY2EwZDQzNzE4MTgyYmFmNmZjZTQ4YjE4XzI3LTMtMS0xLTcxMjA0_cf265f42-2402-4881-9123-0f25c35f8002"
      unitRef="usd">4108000</us-gaap:OperatingLeaseLiabilityCurrent>
    <us-gaap:LiabilitiesCurrent
      contextRef="ibbc2d589a09c46368d9dd3e9ea8996c6_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83NjUvZnJhZzoyNzlmMmM5ZDEyNWM0YTE0OTFhNDkwZWUyY2FmN2M2OC90YWJsZTo4YmJlOGIyZWNhMGQ0MzcxODE4MmJhZjZmY2U0OGIxOC90YWJsZXJhbmdlOjhiYmU4YjJlY2EwZDQzNzE4MTgyYmFmNmZjZTQ4YjE4XzI4LTEtMS0xLTcxMjA0_3d84bf0b-e166-4412-b86e-ea1c675b0392"
      unitRef="usd">110642000</us-gaap:LiabilitiesCurrent>
    <us-gaap:LiabilitiesCurrent
      contextRef="i62ba0be1fd094d818a1f7d0d5504d1e2_I20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83NjUvZnJhZzoyNzlmMmM5ZDEyNWM0YTE0OTFhNDkwZWUyY2FmN2M2OC90YWJsZTo4YmJlOGIyZWNhMGQ0MzcxODE4MmJhZjZmY2U0OGIxOC90YWJsZXJhbmdlOjhiYmU4YjJlY2EwZDQzNzE4MTgyYmFmNmZjZTQ4YjE4XzI4LTMtMS0xLTcxMjA0_e384b2ac-8bb0-44ec-9d69-109ccc77de5a"
      unitRef="usd">102872000</us-gaap:LiabilitiesCurrent>
    <us-gaap:ContractWithCustomerLiabilityNoncurrent
      contextRef="ibbc2d589a09c46368d9dd3e9ea8996c6_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83NjUvZnJhZzoyNzlmMmM5ZDEyNWM0YTE0OTFhNDkwZWUyY2FmN2M2OC90YWJsZTo4YmJlOGIyZWNhMGQ0MzcxODE4MmJhZjZmY2U0OGIxOC90YWJsZXJhbmdlOjhiYmU4YjJlY2EwZDQzNzE4MTgyYmFmNmZjZTQ4YjE4XzMwLTEtMS0xLTcxMjA0_ceb94c0d-cd23-4950-9608-4483ee552804"
      unitRef="usd">4771000</us-gaap:ContractWithCustomerLiabilityNoncurrent>
    <us-gaap:ContractWithCustomerLiabilityNoncurrent
      contextRef="i62ba0be1fd094d818a1f7d0d5504d1e2_I20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83NjUvZnJhZzoyNzlmMmM5ZDEyNWM0YTE0OTFhNDkwZWUyY2FmN2M2OC90YWJsZTo4YmJlOGIyZWNhMGQ0MzcxODE4MmJhZjZmY2U0OGIxOC90YWJsZXJhbmdlOjhiYmU4YjJlY2EwZDQzNzE4MTgyYmFmNmZjZTQ4YjE4XzMwLTMtMS0xLTcxMjA0_a12f18cc-1a0b-4ef0-ab26-a48629037911"
      unitRef="usd">5144000</us-gaap:ContractWithCustomerLiabilityNoncurrent>
    <us-gaap:OperatingLeaseLiabilityNoncurrent
      contextRef="ibbc2d589a09c46368d9dd3e9ea8996c6_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83NjUvZnJhZzoyNzlmMmM5ZDEyNWM0YTE0OTFhNDkwZWUyY2FmN2M2OC90YWJsZTo4YmJlOGIyZWNhMGQ0MzcxODE4MmJhZjZmY2U0OGIxOC90YWJsZXJhbmdlOjhiYmU4YjJlY2EwZDQzNzE4MTgyYmFmNmZjZTQ4YjE4XzMxLTEtMS0xLTcxMjA0_7c1464c6-b2f4-45bc-8232-5e0c59d80549"
      unitRef="usd">13009000</us-gaap:OperatingLeaseLiabilityNoncurrent>
    <us-gaap:OperatingLeaseLiabilityNoncurrent
      contextRef="i62ba0be1fd094d818a1f7d0d5504d1e2_I20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83NjUvZnJhZzoyNzlmMmM5ZDEyNWM0YTE0OTFhNDkwZWUyY2FmN2M2OC90YWJsZTo4YmJlOGIyZWNhMGQ0MzcxODE4MmJhZjZmY2U0OGIxOC90YWJsZXJhbmdlOjhiYmU4YjJlY2EwZDQzNzE4MTgyYmFmNmZjZTQ4YjE4XzMxLTMtMS0xLTcxMjA0_228e7f0f-5ef2-41c5-962c-1f29949eab66"
      unitRef="usd">16426000</us-gaap:OperatingLeaseLiabilityNoncurrent>
    <us-gaap:DeferredIncomeTaxLiabilitiesNet
      contextRef="ibbc2d589a09c46368d9dd3e9ea8996c6_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83NjUvZnJhZzoyNzlmMmM5ZDEyNWM0YTE0OTFhNDkwZWUyY2FmN2M2OC90YWJsZTo4YmJlOGIyZWNhMGQ0MzcxODE4MmJhZjZmY2U0OGIxOC90YWJsZXJhbmdlOjhiYmU4YjJlY2EwZDQzNzE4MTgyYmFmNmZjZTQ4YjE4XzMyLTEtMS0xLTcxMjA0_f2ba771e-6e34-4769-8b00-1369f4bdc97f"
      unitRef="usd">7419000</us-gaap:DeferredIncomeTaxLiabilitiesNet>
    <us-gaap:DeferredIncomeTaxLiabilitiesNet
      contextRef="i62ba0be1fd094d818a1f7d0d5504d1e2_I20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83NjUvZnJhZzoyNzlmMmM5ZDEyNWM0YTE0OTFhNDkwZWUyY2FmN2M2OC90YWJsZTo4YmJlOGIyZWNhMGQ0MzcxODE4MmJhZjZmY2U0OGIxOC90YWJsZXJhbmdlOjhiYmU4YjJlY2EwZDQzNzE4MTgyYmFmNmZjZTQ4YjE4XzMyLTMtMS0xLTcxMjA0_151f4083-30a1-44a4-aa48-f136d2265a2c"
      unitRef="usd">7145000</us-gaap:DeferredIncomeTaxLiabilitiesNet>
    <us-gaap:Liabilities
      contextRef="ibbc2d589a09c46368d9dd3e9ea8996c6_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83NjUvZnJhZzoyNzlmMmM5ZDEyNWM0YTE0OTFhNDkwZWUyY2FmN2M2OC90YWJsZTo4YmJlOGIyZWNhMGQ0MzcxODE4MmJhZjZmY2U0OGIxOC90YWJsZXJhbmdlOjhiYmU4YjJlY2EwZDQzNzE4MTgyYmFmNmZjZTQ4YjE4XzMzLTEtMS0xLTcxMjA0_fd7505c1-8670-45d0-82bd-1d5976a8c2e4"
      unitRef="usd">135841000</us-gaap:Liabilities>
    <us-gaap:Liabilities
      contextRef="i62ba0be1fd094d818a1f7d0d5504d1e2_I20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83NjUvZnJhZzoyNzlmMmM5ZDEyNWM0YTE0OTFhNDkwZWUyY2FmN2M2OC90YWJsZTo4YmJlOGIyZWNhMGQ0MzcxODE4MmJhZjZmY2U0OGIxOC90YWJsZXJhbmdlOjhiYmU4YjJlY2EwZDQzNzE4MTgyYmFmNmZjZTQ4YjE4XzMzLTMtMS0xLTcxMjA0_0e3183a9-38ad-4dfe-93e2-0fd944542e37"
      unitRef="usd">131587000</us-gaap:Liabilities>
    <us-gaap:CommitmentsAndContingencies
      contextRef="ibbc2d589a09c46368d9dd3e9ea8996c6_I20221231"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83NjUvZnJhZzoyNzlmMmM5ZDEyNWM0YTE0OTFhNDkwZWUyY2FmN2M2OC90YWJsZTo4YmJlOGIyZWNhMGQ0MzcxODE4MmJhZjZmY2U0OGIxOC90YWJsZXJhbmdlOjhiYmU4YjJlY2EwZDQzNzE4MTgyYmFmNmZjZTQ4YjE4XzM0LTEtMS0xLTc5MjYz_97bda2d0-c7a5-445f-a708-b4f77ca5f402"
      unitRef="usd"
      xsi:nil="true"/>
    <us-gaap:CommitmentsAndContingencies
      contextRef="i62ba0be1fd094d818a1f7d0d5504d1e2_I20211231"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83NjUvZnJhZzoyNzlmMmM5ZDEyNWM0YTE0OTFhNDkwZWUyY2FmN2M2OC90YWJsZTo4YmJlOGIyZWNhMGQ0MzcxODE4MmJhZjZmY2U0OGIxOC90YWJsZXJhbmdlOjhiYmU4YjJlY2EwZDQzNzE4MTgyYmFmNmZjZTQ4YjE4XzM0LTMtMS0xLTc5MjYz_6bd31e44-7ce5-4e19-84c9-84a65e191654"
      unitRef="usd"
      xsi:nil="true"/>
    <us-gaap:PreferredStockParOrStatedValuePerShare
      contextRef="ibbc2d589a09c46368d9dd3e9ea8996c6_I20221231"
      decimals="INF"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83NjUvZnJhZzoyNzlmMmM5ZDEyNWM0YTE0OTFhNDkwZWUyY2FmN2M2OC90YWJsZTo4YmJlOGIyZWNhMGQ0MzcxODE4MmJhZjZmY2U0OGIxOC90YWJsZXJhbmdlOjhiYmU4YjJlY2EwZDQzNzE4MTgyYmFmNmZjZTQ4YjE4XzM2LTAtMS0xLTcxMjA0L3RleHRyZWdpb246YTcyODQ2N2UwZTNhNDMzYmI1NzAwZTgwN2Y4MWRiMjZfMjE_3c592777-bea6-441f-93a0-3a8f6a89480d"
      unitRef="usdPerShare">0.001</us-gaap:PreferredStockParOrStatedValuePerShare>
    <us-gaap:PreferredStockParOrStatedValuePerShare
      contextRef="i62ba0be1fd094d818a1f7d0d5504d1e2_I20211231"
      decimals="INF"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83NjUvZnJhZzoyNzlmMmM5ZDEyNWM0YTE0OTFhNDkwZWUyY2FmN2M2OC90YWJsZTo4YmJlOGIyZWNhMGQ0MzcxODE4MmJhZjZmY2U0OGIxOC90YWJsZXJhbmdlOjhiYmU4YjJlY2EwZDQzNzE4MTgyYmFmNmZjZTQ4YjE4XzM2LTAtMS0xLTcxMjA0L3RleHRyZWdpb246YTcyODQ2N2UwZTNhNDMzYmI1NzAwZTgwN2Y4MWRiMjZfMjE_be9e837b-848a-42a0-a8cf-99aa481a1a0d"
      unitRef="usdPerShare">0.001</us-gaap:PreferredStockParOrStatedValuePerShare>
    <us-gaap:PreferredStockSharesAuthorized
      contextRef="ibbc2d589a09c46368d9dd3e9ea8996c6_I20221231"
      decimals="INF"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83NjUvZnJhZzoyNzlmMmM5ZDEyNWM0YTE0OTFhNDkwZWUyY2FmN2M2OC90YWJsZTo4YmJlOGIyZWNhMGQ0MzcxODE4MmJhZjZmY2U0OGIxOC90YWJsZXJhbmdlOjhiYmU4YjJlY2EwZDQzNzE4MTgyYmFmNmZjZTQ4YjE4XzM2LTAtMS0xLTcxMjA0L3RleHRyZWdpb246YTcyODQ2N2UwZTNhNDMzYmI1NzAwZTgwN2Y4MWRiMjZfMzU_90c90d64-3d7d-496b-8069-83bef39d1258"
      unitRef="shares">5000000</us-gaap:PreferredStockSharesAuthorized>
    <us-gaap:PreferredStockSharesAuthorized
      contextRef="i62ba0be1fd094d818a1f7d0d5504d1e2_I20211231"
      decimals="INF"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83NjUvZnJhZzoyNzlmMmM5ZDEyNWM0YTE0OTFhNDkwZWUyY2FmN2M2OC90YWJsZTo4YmJlOGIyZWNhMGQ0MzcxODE4MmJhZjZmY2U0OGIxOC90YWJsZXJhbmdlOjhiYmU4YjJlY2EwZDQzNzE4MTgyYmFmNmZjZTQ4YjE4XzM2LTAtMS0xLTcxMjA0L3RleHRyZWdpb246YTcyODQ2N2UwZTNhNDMzYmI1NzAwZTgwN2Y4MWRiMjZfMzU_a5c085ea-a5ae-4351-ae17-eb1cf19c4d23"
      unitRef="shares">5000000</us-gaap:PreferredStockSharesAuthorized>
    <us-gaap:PreferredStockSharesIssued
      contextRef="ibbc2d589a09c46368d9dd3e9ea8996c6_I20221231"
      decimals="INF"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83NjUvZnJhZzoyNzlmMmM5ZDEyNWM0YTE0OTFhNDkwZWUyY2FmN2M2OC90YWJsZTo4YmJlOGIyZWNhMGQ0MzcxODE4MmJhZjZmY2U0OGIxOC90YWJsZXJhbmdlOjhiYmU4YjJlY2EwZDQzNzE4MTgyYmFmNmZjZTQ4YjE4XzM2LTAtMS0xLTcxMjA0L3RleHRyZWdpb246YTcyODQ2N2UwZTNhNDMzYmI1NzAwZTgwN2Y4MWRiMjZfNTc_75a3d54e-54e7-4b9c-b3ca-015ba0f2bcc2"
      unitRef="shares">0</us-gaap:PreferredStockSharesIssued>
    <us-gaap:PreferredStockSharesOutstanding
      contextRef="i62ba0be1fd094d818a1f7d0d5504d1e2_I20211231"
      decimals="INF"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83NjUvZnJhZzoyNzlmMmM5ZDEyNWM0YTE0OTFhNDkwZWUyY2FmN2M2OC90YWJsZTo4YmJlOGIyZWNhMGQ0MzcxODE4MmJhZjZmY2U0OGIxOC90YWJsZXJhbmdlOjhiYmU4YjJlY2EwZDQzNzE4MTgyYmFmNmZjZTQ4YjE4XzM2LTAtMS0xLTcxMjA0L3RleHRyZWdpb246YTcyODQ2N2UwZTNhNDMzYmI1NzAwZTgwN2Y4MWRiMjZfNTc_985151ab-d08a-49f9-b777-dbf0c27e65e5"
      unitRef="shares">0</us-gaap:PreferredStockSharesOutstanding>
    <us-gaap:PreferredStockSharesIssued
      contextRef="i62ba0be1fd094d818a1f7d0d5504d1e2_I20211231"
      decimals="INF"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83NjUvZnJhZzoyNzlmMmM5ZDEyNWM0YTE0OTFhNDkwZWUyY2FmN2M2OC90YWJsZTo4YmJlOGIyZWNhMGQ0MzcxODE4MmJhZjZmY2U0OGIxOC90YWJsZXJhbmdlOjhiYmU4YjJlY2EwZDQzNzE4MTgyYmFmNmZjZTQ4YjE4XzM2LTAtMS0xLTcxMjA0L3RleHRyZWdpb246YTcyODQ2N2UwZTNhNDMzYmI1NzAwZTgwN2Y4MWRiMjZfNTc_c7a671bf-8776-4217-9862-c3d6d312995e"
      unitRef="shares">0</us-gaap:PreferredStockSharesIssued>
    <us-gaap:PreferredStockSharesOutstanding
      contextRef="ibbc2d589a09c46368d9dd3e9ea8996c6_I20221231"
      decimals="INF"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83NjUvZnJhZzoyNzlmMmM5ZDEyNWM0YTE0OTFhNDkwZWUyY2FmN2M2OC90YWJsZTo4YmJlOGIyZWNhMGQ0MzcxODE4MmJhZjZmY2U0OGIxOC90YWJsZXJhbmdlOjhiYmU4YjJlY2EwZDQzNzE4MTgyYmFmNmZjZTQ4YjE4XzM2LTAtMS0xLTcxMjA0L3RleHRyZWdpb246YTcyODQ2N2UwZTNhNDMzYmI1NzAwZTgwN2Y4MWRiMjZfNTc_fa281433-3ffb-4009-a85b-80b88b25f449"
      unitRef="shares">0</us-gaap:PreferredStockSharesOutstanding>
    <us-gaap:PreferredStockValue
      contextRef="ibbc2d589a09c46368d9dd3e9ea8996c6_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83NjUvZnJhZzoyNzlmMmM5ZDEyNWM0YTE0OTFhNDkwZWUyY2FmN2M2OC90YWJsZTo4YmJlOGIyZWNhMGQ0MzcxODE4MmJhZjZmY2U0OGIxOC90YWJsZXJhbmdlOjhiYmU4YjJlY2EwZDQzNzE4MTgyYmFmNmZjZTQ4YjE4XzM2LTEtMS0xLTcxMjA0_f945de09-6230-4d93-8e15-9e086a1d60b1"
      unitRef="usd">0</us-gaap:PreferredStockValue>
    <us-gaap:PreferredStockValue
      contextRef="i62ba0be1fd094d818a1f7d0d5504d1e2_I20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83NjUvZnJhZzoyNzlmMmM5ZDEyNWM0YTE0OTFhNDkwZWUyY2FmN2M2OC90YWJsZTo4YmJlOGIyZWNhMGQ0MzcxODE4MmJhZjZmY2U0OGIxOC90YWJsZXJhbmdlOjhiYmU4YjJlY2EwZDQzNzE4MTgyYmFmNmZjZTQ4YjE4XzM2LTMtMS0xLTcxMjA0_748734b8-46ff-4af6-802e-a97c1df0ceda"
      unitRef="usd">0</us-gaap:PreferredStockValue>
    <us-gaap:CommonStockParOrStatedValuePerShare
      contextRef="ibbc2d589a09c46368d9dd3e9ea8996c6_I20221231"
      decimals="INF"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83NjUvZnJhZzoyNzlmMmM5ZDEyNWM0YTE0OTFhNDkwZWUyY2FmN2M2OC90YWJsZTo4YmJlOGIyZWNhMGQ0MzcxODE4MmJhZjZmY2U0OGIxOC90YWJsZXJhbmdlOjhiYmU4YjJlY2EwZDQzNzE4MTgyYmFmNmZjZTQ4YjE4XzM3LTAtMS0xLTcxMjA0L3RleHRyZWdpb246Y2MzNDQzZjRjYmI5NDhkMzkzYjYyNTEwNWMyYTY3OTdfMTg_80d019b9-6dc3-4b25-8baa-e658d5d0a61c"
      unitRef="usdPerShare">0.001</us-gaap:CommonStockParOrStatedValuePerShare>
    <us-gaap:CommonStockParOrStatedValuePerShare
      contextRef="i62ba0be1fd094d818a1f7d0d5504d1e2_I20211231"
      decimals="INF"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83NjUvZnJhZzoyNzlmMmM5ZDEyNWM0YTE0OTFhNDkwZWUyY2FmN2M2OC90YWJsZTo4YmJlOGIyZWNhMGQ0MzcxODE4MmJhZjZmY2U0OGIxOC90YWJsZXJhbmdlOjhiYmU4YjJlY2EwZDQzNzE4MTgyYmFmNmZjZTQ4YjE4XzM3LTAtMS0xLTcxMjA0L3RleHRyZWdpb246Y2MzNDQzZjRjYmI5NDhkMzkzYjYyNTEwNWMyYTY3OTdfMTg_95ee40c3-9a68-4a7d-95f4-d57aaa52ae30"
      unitRef="usdPerShare">0.001</us-gaap:CommonStockParOrStatedValuePerShare>
    <us-gaap:CommonStockSharesAuthorized
      contextRef="i62ba0be1fd094d818a1f7d0d5504d1e2_I20211231"
      decimals="INF"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83NjUvZnJhZzoyNzlmMmM5ZDEyNWM0YTE0OTFhNDkwZWUyY2FmN2M2OC90YWJsZTo4YmJlOGIyZWNhMGQ0MzcxODE4MmJhZjZmY2U0OGIxOC90YWJsZXJhbmdlOjhiYmU4YjJlY2EwZDQzNzE4MTgyYmFmNmZjZTQ4YjE4XzM3LTAtMS0xLTcxMjA0L3RleHRyZWdpb246Y2MzNDQzZjRjYmI5NDhkMzkzYjYyNTEwNWMyYTY3OTdfMzI_337e9e06-1f52-4b7a-aae5-f1fd8b652c24"
      unitRef="shares">110000000</us-gaap:CommonStockSharesAuthorized>
    <us-gaap:CommonStockSharesAuthorized
      contextRef="ibbc2d589a09c46368d9dd3e9ea8996c6_I20221231"
      decimals="INF"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83NjUvZnJhZzoyNzlmMmM5ZDEyNWM0YTE0OTFhNDkwZWUyY2FmN2M2OC90YWJsZTo4YmJlOGIyZWNhMGQ0MzcxODE4MmJhZjZmY2U0OGIxOC90YWJsZXJhbmdlOjhiYmU4YjJlY2EwZDQzNzE4MTgyYmFmNmZjZTQ4YjE4XzM3LTAtMS0xLTcxMjA0L3RleHRyZWdpb246Y2MzNDQzZjRjYmI5NDhkMzkzYjYyNTEwNWMyYTY3OTdfMzI_f32633eb-5dc3-4ef7-8ed5-a8450b44f155"
      unitRef="shares">110000000</us-gaap:CommonStockSharesAuthorized>
    <us-gaap:CommonStockSharesIssued
      contextRef="ibbc2d589a09c46368d9dd3e9ea8996c6_I20221231"
      decimals="INF"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83NjUvZnJhZzoyNzlmMmM5ZDEyNWM0YTE0OTFhNDkwZWUyY2FmN2M2OC90YWJsZTo4YmJlOGIyZWNhMGQ0MzcxODE4MmJhZjZmY2U0OGIxOC90YWJsZXJhbmdlOjhiYmU4YjJlY2EwZDQzNzE4MTgyYmFmNmZjZTQ4YjE4XzM3LTAtMS0xLTcxMjA0L3RleHRyZWdpb246Y2MzNDQzZjRjYmI5NDhkMzkzYjYyNTEwNWMyYTY3OTdfNTQ_f5e1ed21-0a5a-47ec-83b8-88dfdb1902e9"
      unitRef="shares">38309144</us-gaap:CommonStockSharesIssued>
    <us-gaap:CommonStockSharesIssued
      contextRef="i62ba0be1fd094d818a1f7d0d5504d1e2_I20211231"
      decimals="INF"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83NjUvZnJhZzoyNzlmMmM5ZDEyNWM0YTE0OTFhNDkwZWUyY2FmN2M2OC90YWJsZTo4YmJlOGIyZWNhMGQ0MzcxODE4MmJhZjZmY2U0OGIxOC90YWJsZXJhbmdlOjhiYmU4YjJlY2EwZDQzNzE4MTgyYmFmNmZjZTQ4YjE4XzM3LTAtMS0xLTcxMjA0L3RleHRyZWdpb246Y2MzNDQzZjRjYmI5NDhkMzkzYjYyNTEwNWMyYTY3OTdfNjE_3a5216d5-af69-4330-995c-18a939813128"
      unitRef="shares">37798610</us-gaap:CommonStockSharesIssued>
    <us-gaap:CommonStockSharesOutstanding
      contextRef="id1c92335c6ab47f7bbbe749172adbece_I20221231"
      decimals="INF"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83NjUvZnJhZzoyNzlmMmM5ZDEyNWM0YTE0OTFhNDkwZWUyY2FmN2M2OC90YWJsZTo4YmJlOGIyZWNhMGQ0MzcxODE4MmJhZjZmY2U0OGIxOC90YWJsZXJhbmdlOjhiYmU4YjJlY2EwZDQzNzE4MTgyYmFmNmZjZTQ4YjE4XzM3LTAtMS0xLTcxMjA0L3RleHRyZWdpb246Y2MzNDQzZjRjYmI5NDhkMzkzYjYyNTEwNWMyYTY3OTdfODM_c6b19683-2188-4d3e-bb09-7bb6fd1194bc"
      unitRef="shares">36158046</us-gaap:CommonStockSharesOutstanding>
    <us-gaap:CommonStockSharesOutstanding
      contextRef="i62ba0be1fd094d818a1f7d0d5504d1e2_I20211231"
      decimals="INF"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83NjUvZnJhZzoyNzlmMmM5ZDEyNWM0YTE0OTFhNDkwZWUyY2FmN2M2OC90YWJsZTo4YmJlOGIyZWNhMGQ0MzcxODE4MmJhZjZmY2U0OGIxOC90YWJsZXJhbmdlOjhiYmU4YjJlY2EwZDQzNzE4MTgyYmFmNmZjZTQ4YjE4XzM3LTAtMS0xLTcxMjA0L3RleHRyZWdpb246Y2MzNDQzZjRjYmI5NDhkMzkzYjYyNTEwNWMyYTY3OTdfOTA_f3ff6a92-cfb0-4e0d-8952-34446546333d"
      unitRef="shares">36009257</us-gaap:CommonStockSharesOutstanding>
    <us-gaap:CommonStockValue
      contextRef="ibbc2d589a09c46368d9dd3e9ea8996c6_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83NjUvZnJhZzoyNzlmMmM5ZDEyNWM0YTE0OTFhNDkwZWUyY2FmN2M2OC90YWJsZTo4YmJlOGIyZWNhMGQ0MzcxODE4MmJhZjZmY2U0OGIxOC90YWJsZXJhbmdlOjhiYmU4YjJlY2EwZDQzNzE4MTgyYmFmNmZjZTQ4YjE4XzM3LTEtMS0xLTcxMjA0_bd7b164f-7483-4677-80ec-d43d8a5970b7"
      unitRef="usd">38000</us-gaap:CommonStockValue>
    <us-gaap:CommonStockValue
      contextRef="i62ba0be1fd094d818a1f7d0d5504d1e2_I20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83NjUvZnJhZzoyNzlmMmM5ZDEyNWM0YTE0OTFhNDkwZWUyY2FmN2M2OC90YWJsZTo4YmJlOGIyZWNhMGQ0MzcxODE4MmJhZjZmY2U0OGIxOC90YWJsZXJhbmdlOjhiYmU4YjJlY2EwZDQzNzE4MTgyYmFmNmZjZTQ4YjE4XzM3LTMtMS0xLTcxMjA0_843b9592-b3b1-4cc2-9909-f8d1cfc3270e"
      unitRef="usd">38000</us-gaap:CommonStockValue>
    <us-gaap:TreasuryStockCommonShares
      contextRef="i1d2ef0c68a994638b58d2de08612c97e_I20221231"
      decimals="INF"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83NjUvZnJhZzoyNzlmMmM5ZDEyNWM0YTE0OTFhNDkwZWUyY2FmN2M2OC90YWJsZTo4YmJlOGIyZWNhMGQ0MzcxODE4MmJhZjZmY2U0OGIxOC90YWJsZXJhbmdlOjhiYmU4YjJlY2EwZDQzNzE4MTgyYmFmNmZjZTQ4YjE4XzM4LTAtMS0xLTcxMjA0L3RleHRyZWdpb246M2ZmMzM1Y2FmMTE2NDdmMDg5NmNkMjIwNTNmZmE1ZmVfMjk_c6dc23ef-1918-41e9-9a2f-7b0eccb9a736"
      unitRef="shares">2151098</us-gaap:TreasuryStockCommonShares>
    <us-gaap:TreasuryStockCommonShares
      contextRef="i62ba0be1fd094d818a1f7d0d5504d1e2_I20211231"
      decimals="INF"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83NjUvZnJhZzoyNzlmMmM5ZDEyNWM0YTE0OTFhNDkwZWUyY2FmN2M2OC90YWJsZTo4YmJlOGIyZWNhMGQ0MzcxODE4MmJhZjZmY2U0OGIxOC90YWJsZXJhbmdlOjhiYmU4YjJlY2EwZDQzNzE4MTgyYmFmNmZjZTQ4YjE4XzM4LTAtMS0xLTcxMjA0L3RleHRyZWdpb246M2ZmMzM1Y2FmMTE2NDdmMDg5NmNkMjIwNTNmZmE1ZmVfMzY_18da2b8f-637b-4142-ba21-646abd438760"
      unitRef="shares">1789353</us-gaap:TreasuryStockCommonShares>
    <us-gaap:TreasuryStockCommonValue
      contextRef="ibbc2d589a09c46368d9dd3e9ea8996c6_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83NjUvZnJhZzoyNzlmMmM5ZDEyNWM0YTE0OTFhNDkwZWUyY2FmN2M2OC90YWJsZTo4YmJlOGIyZWNhMGQ0MzcxODE4MmJhZjZmY2U0OGIxOC90YWJsZXJhbmdlOjhiYmU4YjJlY2EwZDQzNzE4MTgyYmFmNmZjZTQ4YjE4XzM4LTEtMS0xLTcxMjA0_b3003e94-c3a0-46bd-8a33-668f6c0ac7fc"
      unitRef="usd">128892000</us-gaap:TreasuryStockCommonValue>
    <us-gaap:TreasuryStockCommonValue
      contextRef="i62ba0be1fd094d818a1f7d0d5504d1e2_I20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83NjUvZnJhZzoyNzlmMmM5ZDEyNWM0YTE0OTFhNDkwZWUyY2FmN2M2OC90YWJsZTo4YmJlOGIyZWNhMGQ0MzcxODE4MmJhZjZmY2U0OGIxOC90YWJsZXJhbmdlOjhiYmU4YjJlY2EwZDQzNzE4MTgyYmFmNmZjZTQ4YjE4XzM4LTMtMS0xLTcxMjA0_73d84625-5ef8-4217-8cb0-4ea624e35b74"
      unitRef="usd">85677000</us-gaap:TreasuryStockCommonValue>
    <us-gaap:AdditionalPaidInCapitalCommonStock
      contextRef="ibbc2d589a09c46368d9dd3e9ea8996c6_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83NjUvZnJhZzoyNzlmMmM5ZDEyNWM0YTE0OTFhNDkwZWUyY2FmN2M2OC90YWJsZTo4YmJlOGIyZWNhMGQ0MzcxODE4MmJhZjZmY2U0OGIxOC90YWJsZXJhbmdlOjhiYmU4YjJlY2EwZDQzNzE4MTgyYmFmNmZjZTQ4YjE4XzM5LTEtMS0xLTcxMjA0_63704b03-4eda-4536-abff-fe6a8eb1465f"
      unitRef="usd">476117000</us-gaap:AdditionalPaidInCapitalCommonStock>
    <us-gaap:AdditionalPaidInCapitalCommonStock
      contextRef="i62ba0be1fd094d818a1f7d0d5504d1e2_I20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83NjUvZnJhZzoyNzlmMmM5ZDEyNWM0YTE0OTFhNDkwZWUyY2FmN2M2OC90YWJsZTo4YmJlOGIyZWNhMGQ0MzcxODE4MmJhZjZmY2U0OGIxOC90YWJsZXJhbmdlOjhiYmU4YjJlY2EwZDQzNzE4MTgyYmFmNmZjZTQ4YjE4XzM5LTMtMS0xLTcxMjA0_e0e1da86-21df-439e-9865-db7194a22150"
      unitRef="usd">433258000</us-gaap:AdditionalPaidInCapitalCommonStock>
    <us-gaap:RetainedEarningsAccumulatedDeficit
      contextRef="ibbc2d589a09c46368d9dd3e9ea8996c6_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83NjUvZnJhZzoyNzlmMmM5ZDEyNWM0YTE0OTFhNDkwZWUyY2FmN2M2OC90YWJsZTo4YmJlOGIyZWNhMGQ0MzcxODE4MmJhZjZmY2U0OGIxOC90YWJsZXJhbmdlOjhiYmU4YjJlY2EwZDQzNzE4MTgyYmFmNmZjZTQ4YjE4XzQwLTEtMS0xLTcxMjA0_9babf814-e716-4bb5-b1c8-549d710436a5"
      unitRef="usd">193221000</us-gaap:RetainedEarningsAccumulatedDeficit>
    <us-gaap:RetainedEarningsAccumulatedDeficit
      contextRef="i62ba0be1fd094d818a1f7d0d5504d1e2_I20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83NjUvZnJhZzoyNzlmMmM5ZDEyNWM0YTE0OTFhNDkwZWUyY2FmN2M2OC90YWJsZTo4YmJlOGIyZWNhMGQ0MzcxODE4MmJhZjZmY2U0OGIxOC90YWJsZXJhbmdlOjhiYmU4YjJlY2EwZDQzNzE4MTgyYmFmNmZjZTQ4YjE4XzQwLTMtMS0xLTcxMjA0_a6478362-29c6-4003-be57-9092b8a3060e"
      unitRef="usd">138087000</us-gaap:RetainedEarningsAccumulatedDeficit>
    <us-gaap:AccumulatedOtherComprehensiveIncomeLossNetOfTax
      contextRef="ibbc2d589a09c46368d9dd3e9ea8996c6_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83NjUvZnJhZzoyNzlmMmM5ZDEyNWM0YTE0OTFhNDkwZWUyY2FmN2M2OC90YWJsZTo4YmJlOGIyZWNhMGQ0MzcxODE4MmJhZjZmY2U0OGIxOC90YWJsZXJhbmdlOjhiYmU4YjJlY2EwZDQzNzE4MTgyYmFmNmZjZTQ4YjE4XzQxLTEtMS0xLTcxMjA0_878fa7e9-efe9-4ef5-a6c1-1c14fc15f8f7"
      unitRef="usd">-3411000</us-gaap:AccumulatedOtherComprehensiveIncomeLossNetOfTax>
    <us-gaap:AccumulatedOtherComprehensiveIncomeLossNetOfTax
      contextRef="i62ba0be1fd094d818a1f7d0d5504d1e2_I20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83NjUvZnJhZzoyNzlmMmM5ZDEyNWM0YTE0OTFhNDkwZWUyY2FmN2M2OC90YWJsZTo4YmJlOGIyZWNhMGQ0MzcxODE4MmJhZjZmY2U0OGIxOC90YWJsZXJhbmdlOjhiYmU4YjJlY2EwZDQzNzE4MTgyYmFmNmZjZTQ4YjE4XzQxLTMtMS0xLTcxMjA0_ab4670da-446e-4931-bdb7-d88bb57a54da"
      unitRef="usd">-1447000</us-gaap:AccumulatedOtherComprehensiveIncomeLossNetOfTax>
    <us-gaap:StockholdersEquity
      contextRef="ibbc2d589a09c46368d9dd3e9ea8996c6_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83NjUvZnJhZzoyNzlmMmM5ZDEyNWM0YTE0OTFhNDkwZWUyY2FmN2M2OC90YWJsZTo4YmJlOGIyZWNhMGQ0MzcxODE4MmJhZjZmY2U0OGIxOC90YWJsZXJhbmdlOjhiYmU4YjJlY2EwZDQzNzE4MTgyYmFmNmZjZTQ4YjE4XzQyLTEtMS0xLTcxMjA0_1399425d-ecc5-4e24-92d4-627f9f5826bc"
      unitRef="usd">537073000</us-gaap:StockholdersEquity>
    <us-gaap:StockholdersEquity
      contextRef="i62ba0be1fd094d818a1f7d0d5504d1e2_I20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83NjUvZnJhZzoyNzlmMmM5ZDEyNWM0YTE0OTFhNDkwZWUyY2FmN2M2OC90YWJsZTo4YmJlOGIyZWNhMGQ0MzcxODE4MmJhZjZmY2U0OGIxOC90YWJsZXJhbmdlOjhiYmU4YjJlY2EwZDQzNzE4MTgyYmFmNmZjZTQ4YjE4XzQyLTMtMS0xLTcxMjA0_cb6b95e4-85ba-430c-85d6-00462f99bc0f"
      unitRef="usd">484259000</us-gaap:StockholdersEquity>
    <us-gaap:LiabilitiesAndStockholdersEquity
      contextRef="ibbc2d589a09c46368d9dd3e9ea8996c6_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83NjUvZnJhZzoyNzlmMmM5ZDEyNWM0YTE0OTFhNDkwZWUyY2FmN2M2OC90YWJsZTo4YmJlOGIyZWNhMGQ0MzcxODE4MmJhZjZmY2U0OGIxOC90YWJsZXJhbmdlOjhiYmU4YjJlY2EwZDQzNzE4MTgyYmFmNmZjZTQ4YjE4XzQzLTEtMS0xLTcxMjA0_8e6656cf-46b9-4058-a095-d1a052ba7aae"
      unitRef="usd">672914000</us-gaap:LiabilitiesAndStockholdersEquity>
    <us-gaap:LiabilitiesAndStockholdersEquity
      contextRef="i62ba0be1fd094d818a1f7d0d5504d1e2_I20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83NjUvZnJhZzoyNzlmMmM5ZDEyNWM0YTE0OTFhNDkwZWUyY2FmN2M2OC90YWJsZTo4YmJlOGIyZWNhMGQ0MzcxODE4MmJhZjZmY2U0OGIxOC90YWJsZXJhbmdlOjhiYmU4YjJlY2EwZDQzNzE4MTgyYmFmNmZjZTQ4YjE4XzQzLTMtMS0xLTcxMjA0_e2a79135-a566-4f4a-989b-1332098fafe7"
      unitRef="usd">615846000</us-gaap:LiabilitiesAndStockholdersEquity>
    <us-gaap:RevenueFromContractWithCustomerExcludingAssessedTax
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83My9mcmFnOjZlNzY5MDQyM2QyYjRlYTE4NWNmZjA2OGE0ZjkwYmNmL3RhYmxlOmY5NDhkYzgyOTZiOTQxODRiYjhhYTA0MjM4MjVlMTJiL3RhYmxlcmFuZ2U6Zjk0OGRjODI5NmI5NDE4NGJiOGFhMDQyMzgyNWUxMmJfMi0xLTEtMS0zMDE0MA_0fdb23fa-c2dd-483a-a90f-3c897d7ec69f"
      unitRef="usd">450875000</us-gaap:RevenueFromContractWithCustomerExcludingAssessedTax>
    <us-gaap:RevenueFromContractWithCustomerExcludingAssessedTax
      contextRef="ie07f2822175c48edbb8d5559ceb82e6f_D20210101-20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83My9mcmFnOjZlNzY5MDQyM2QyYjRlYTE4NWNmZjA2OGE0ZjkwYmNmL3RhYmxlOmY5NDhkYzgyOTZiOTQxODRiYjhhYTA0MjM4MjVlMTJiL3RhYmxlcmFuZ2U6Zjk0OGRjODI5NmI5NDE4NGJiOGFhMDQyMzgyNWUxMmJfMi0zLTEtMS0zMDE0MA_12fc5b92-a597-40b5-ad3c-a8fdc724d056"
      unitRef="usd">385276000</us-gaap:RevenueFromContractWithCustomerExcludingAssessedTax>
    <us-gaap:RevenueFromContractWithCustomerExcludingAssessedTax
      contextRef="i4751184d7e5948509cd8893fd49fb821_D20200101-20201231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83My9mcmFnOjZlNzY5MDQyM2QyYjRlYTE4NWNmZjA2OGE0ZjkwYmNmL3RhYmxlOmY5NDhkYzgyOTZiOTQxODRiYjhhYTA0MjM4MjVlMTJiL3RhYmxlcmFuZ2U6Zjk0OGRjODI5NmI5NDE4NGJiOGFhMDQyMzgyNWUxMmJfMi01LTEtMS0zMDE0MA_3ffbfb5c-89ad-4023-8814-ccf26ffa58d1"
      unitRef="usd">312630000</us-gaap:RevenueFromContractWithCustomerExcludingAssessedTax>
    <us-gaap:CostOfRevenue
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83My9mcmFnOjZlNzY5MDQyM2QyYjRlYTE4NWNmZjA2OGE0ZjkwYmNmL3RhYmxlOmY5NDhkYzgyOTZiOTQxODRiYjhhYTA0MjM4MjVlMTJiL3RhYmxlcmFuZ2U6Zjk0OGRjODI5NmI5NDE4NGJiOGFhMDQyMzgyNWUxMmJfMy0xLTEtMS0zMDE0MA_3bf9f8d8-5767-40e7-a6ca-3e70b7d30bf3"
      unitRef="usd">153065000</us-gaap:CostOfRevenue>
    <us-gaap:CostOfRevenue
      contextRef="ie07f2822175c48edbb8d5559ceb82e6f_D20210101-20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83My9mcmFnOjZlNzY5MDQyM2QyYjRlYTE4NWNmZjA2OGE0ZjkwYmNmL3RhYmxlOmY5NDhkYzgyOTZiOTQxODRiYjhhYTA0MjM4MjVlMTJiL3RhYmxlcmFuZ2U6Zjk0OGRjODI5NmI5NDE4NGJiOGFhMDQyMzgyNWUxMmJfMy0zLTEtMS0zMDE0MA_7ab46802-c617-4e9b-bb09-17aa7f3fd2be"
      unitRef="usd">131678000</us-gaap:CostOfRevenue>
    <us-gaap:CostOfRevenue
      contextRef="i4751184d7e5948509cd8893fd49fb821_D20200101-20201231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83My9mcmFnOjZlNzY5MDQyM2QyYjRlYTE4NWNmZjA2OGE0ZjkwYmNmL3RhYmxlOmY5NDhkYzgyOTZiOTQxODRiYjhhYTA0MjM4MjVlMTJiL3RhYmxlcmFuZ2U6Zjk0OGRjODI5NmI5NDE4NGJiOGFhMDQyMzgyNWUxMmJfMy01LTEtMS0zMDE0MA_880eab6f-6bec-4539-80d3-dbeb3b083b55"
      unitRef="usd">99836000</us-gaap:CostOfRevenue>
    <us-gaap:GrossProfit
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83My9mcmFnOjZlNzY5MDQyM2QyYjRlYTE4NWNmZjA2OGE0ZjkwYmNmL3RhYmxlOmY5NDhkYzgyOTZiOTQxODRiYjhhYTA0MjM4MjVlMTJiL3RhYmxlcmFuZ2U6Zjk0OGRjODI5NmI5NDE4NGJiOGFhMDQyMzgyNWUxMmJfNC0xLTEtMS0zMDE0MA_556243f1-b5fc-4808-b02f-1727b2f11b4f"
      unitRef="usd">297810000</us-gaap:GrossProfit>
    <us-gaap:GrossProfit
      contextRef="ie07f2822175c48edbb8d5559ceb82e6f_D20210101-20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83My9mcmFnOjZlNzY5MDQyM2QyYjRlYTE4NWNmZjA2OGE0ZjkwYmNmL3RhYmxlOmY5NDhkYzgyOTZiOTQxODRiYjhhYTA0MjM4MjVlMTJiL3RhYmxlcmFuZ2U6Zjk0OGRjODI5NmI5NDE4NGJiOGFhMDQyMzgyNWUxMmJfNC0zLTEtMS0zMDE0MA_17c535e5-e0a8-4fcd-8073-a0bdc9c1c38a"
      unitRef="usd">253598000</us-gaap:GrossProfit>
    <us-gaap:GrossProfit
      contextRef="i4751184d7e5948509cd8893fd49fb821_D20200101-20201231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83My9mcmFnOjZlNzY5MDQyM2QyYjRlYTE4NWNmZjA2OGE0ZjkwYmNmL3RhYmxlOmY5NDhkYzgyOTZiOTQxODRiYjhhYTA0MjM4MjVlMTJiL3RhYmxlcmFuZ2U6Zjk0OGRjODI5NmI5NDE4NGJiOGFhMDQyMzgyNWUxMmJfNC01LTEtMS0zMDE0MA_09d82863-bb57-4472-bc62-d0c6c2cd0a8f"
      unitRef="usd">212794000</us-gaap:GrossProfit>
    <us-gaap:SellingAndMarketingExpense
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83My9mcmFnOjZlNzY5MDQyM2QyYjRlYTE4NWNmZjA2OGE0ZjkwYmNmL3RhYmxlOmY5NDhkYzgyOTZiOTQxODRiYjhhYTA0MjM4MjVlMTJiL3RhYmxlcmFuZ2U6Zjk0OGRjODI5NmI5NDE4NGJiOGFhMDQyMzgyNWUxMmJfNi0xLTEtMS0zMDE0MA_57c8e50c-ea8f-4672-ab43-2ffae1052ee0"
      unitRef="usd">101772000</us-gaap:SellingAndMarketingExpense>
    <us-gaap:SellingAndMarketingExpense
      contextRef="ie07f2822175c48edbb8d5559ceb82e6f_D20210101-20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83My9mcmFnOjZlNzY5MDQyM2QyYjRlYTE4NWNmZjA2OGE0ZjkwYmNmL3RhYmxlOmY5NDhkYzgyOTZiOTQxODRiYjhhYTA0MjM4MjVlMTJiL3RhYmxlcmFuZ2U6Zjk0OGRjODI5NmI5NDE4NGJiOGFhMDQyMzgyNWUxMmJfNi0zLTEtMS0zMDE0MA_437480eb-8c81-44e8-a68a-d1f34df38050"
      unitRef="usd">88044000</us-gaap:SellingAndMarketingExpense>
    <us-gaap:SellingAndMarketingExpense
      contextRef="i4751184d7e5948509cd8893fd49fb821_D20200101-20201231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83My9mcmFnOjZlNzY5MDQyM2QyYjRlYTE4NWNmZjA2OGE0ZjkwYmNmL3RhYmxlOmY5NDhkYzgyOTZiOTQxODRiYjhhYTA0MjM4MjVlMTJiL3RhYmxlcmFuZ2U6Zjk0OGRjODI5NmI5NDE4NGJiOGFhMDQyMzgyNWUxMmJfNi01LTEtMS0zMDE0MA_641f88d4-0424-4840-a906-5e19de06b809"
      unitRef="usd">75955000</us-gaap:SellingAndMarketingExpense>
    <us-gaap:ResearchAndDevelopmentExpense
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83My9mcmFnOjZlNzY5MDQyM2QyYjRlYTE4NWNmZjA2OGE0ZjkwYmNmL3RhYmxlOmY5NDhkYzgyOTZiOTQxODRiYjhhYTA0MjM4MjVlMTJiL3RhYmxlcmFuZ2U6Zjk0OGRjODI5NmI5NDE4NGJiOGFhMDQyMzgyNWUxMmJfNy0xLTEtMS0zMDE0MA_35ee20fe-cee6-4db6-ad12-ab1c001f200d"
      unitRef="usd">45748000</us-gaap:ResearchAndDevelopmentExpense>
    <us-gaap:ResearchAndDevelopmentExpense
      contextRef="ie07f2822175c48edbb8d5559ceb82e6f_D20210101-20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83My9mcmFnOjZlNzY5MDQyM2QyYjRlYTE4NWNmZjA2OGE0ZjkwYmNmL3RhYmxlOmY5NDhkYzgyOTZiOTQxODRiYjhhYTA0MjM4MjVlMTJiL3RhYmxlcmFuZ2U6Zjk0OGRjODI5NmI5NDE4NGJiOGFhMDQyMzgyNWUxMmJfNy0zLTEtMS0zMDE0MA_3140f93d-7a4d-4713-a731-720d6ae6bc05"
      unitRef="usd">39038000</us-gaap:ResearchAndDevelopmentExpense>
    <us-gaap:ResearchAndDevelopmentExpense
      contextRef="i4751184d7e5948509cd8893fd49fb821_D20200101-20201231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83My9mcmFnOjZlNzY5MDQyM2QyYjRlYTE4NWNmZjA2OGE0ZjkwYmNmL3RhYmxlOmY5NDhkYzgyOTZiOTQxODRiYjhhYTA0MjM4MjVlMTJiL3RhYmxlcmFuZ2U6Zjk0OGRjODI5NmI5NDE4NGJiOGFhMDQyMzgyNWUxMmJfNy01LTEtMS0zMDE0MA_cde53dd7-966d-4b8d-bcdf-82d8860483d0"
      unitRef="usd">31024000</us-gaap:ResearchAndDevelopmentExpense>
    <us-gaap:GeneralAndAdministrativeExpense
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83My9mcmFnOjZlNzY5MDQyM2QyYjRlYTE4NWNmZjA2OGE0ZjkwYmNmL3RhYmxlOmY5NDhkYzgyOTZiOTQxODRiYjhhYTA0MjM4MjVlMTJiL3RhYmxlcmFuZ2U6Zjk0OGRjODI5NmI5NDE4NGJiOGFhMDQyMzgyNWUxMmJfOC0xLTEtMS0zMDE0MA_3628a9b4-8e4d-43e1-bbd4-d87d20929bcf"
      unitRef="usd">67340000</us-gaap:GeneralAndAdministrativeExpense>
    <us-gaap:GeneralAndAdministrativeExpense
      contextRef="ie07f2822175c48edbb8d5559ceb82e6f_D20210101-20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83My9mcmFnOjZlNzY5MDQyM2QyYjRlYTE4NWNmZjA2OGE0ZjkwYmNmL3RhYmxlOmY5NDhkYzgyOTZiOTQxODRiYjhhYTA0MjM4MjVlMTJiL3RhYmxlcmFuZ2U6Zjk0OGRjODI5NmI5NDE4NGJiOGFhMDQyMzgyNWUxMmJfOC0zLTEtMS0zMDE0MA_d811c563-2726-447b-88ff-340854c131e2"
      unitRef="usd">61305000</us-gaap:GeneralAndAdministrativeExpense>
    <us-gaap:GeneralAndAdministrativeExpense
      contextRef="i4751184d7e5948509cd8893fd49fb821_D20200101-20201231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83My9mcmFnOjZlNzY5MDQyM2QyYjRlYTE4NWNmZjA2OGE0ZjkwYmNmL3RhYmxlOmY5NDhkYzgyOTZiOTQxODRiYjhhYTA0MjM4MjVlMTJiL3RhYmxlcmFuZ2U6Zjk0OGRjODI5NmI5NDE4NGJiOGFhMDQyMzgyNWUxMmJfOC01LTEtMS0zMDE0MA_45ac658f-c9dc-4de2-b745-b17d35317540"
      unitRef="usd">50119000</us-gaap:GeneralAndAdministrativeExpense>
    <us-gaap:AmortizationOfIntangibleAssets
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83My9mcmFnOjZlNzY5MDQyM2QyYjRlYTE4NWNmZjA2OGE0ZjkwYmNmL3RhYmxlOmY5NDhkYzgyOTZiOTQxODRiYjhhYTA0MjM4MjVlMTJiL3RhYmxlcmFuZ2U6Zjk0OGRjODI5NmI5NDE4NGJiOGFhMDQyMzgyNWUxMmJfOS0xLTEtMS0zMDE0MA_15e37acb-e320-44c6-bd44-1f4a4ec680ba"
      unitRef="usd">11768000</us-gaap:AmortizationOfIntangibleAssets>
    <us-gaap:AmortizationOfIntangibleAssets
      contextRef="ie07f2822175c48edbb8d5559ceb82e6f_D20210101-20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83My9mcmFnOjZlNzY5MDQyM2QyYjRlYTE4NWNmZjA2OGE0ZjkwYmNmL3RhYmxlOmY5NDhkYzgyOTZiOTQxODRiYjhhYTA0MjM4MjVlMTJiL3RhYmxlcmFuZ2U6Zjk0OGRjODI5NmI5NDE4NGJiOGFhMDQyMzgyNWUxMmJfOS0zLTEtMS0zMDE0MA_55e4abee-98fc-45d9-bac6-aa19a57c5c0f"
      unitRef="usd">10126000</us-gaap:AmortizationOfIntangibleAssets>
    <us-gaap:AmortizationOfIntangibleAssets
      contextRef="i4751184d7e5948509cd8893fd49fb821_D20200101-20201231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83My9mcmFnOjZlNzY5MDQyM2QyYjRlYTE4NWNmZjA2OGE0ZjkwYmNmL3RhYmxlOmY5NDhkYzgyOTZiOTQxODRiYjhhYTA0MjM4MjVlMTJiL3RhYmxlcmFuZ2U6Zjk0OGRjODI5NmI5NDE4NGJiOGFhMDQyMzgyNWUxMmJfOS01LTEtMS0zMDE0MA_3a5ac91d-c7ea-418c-89ac-5f9e91e021cd"
      unitRef="usd">5538000</us-gaap:AmortizationOfIntangibleAssets>
    <us-gaap:OperatingExpenses
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83My9mcmFnOjZlNzY5MDQyM2QyYjRlYTE4NWNmZjA2OGE0ZjkwYmNmL3RhYmxlOmY5NDhkYzgyOTZiOTQxODRiYjhhYTA0MjM4MjVlMTJiL3RhYmxlcmFuZ2U6Zjk0OGRjODI5NmI5NDE4NGJiOGFhMDQyMzgyNWUxMmJfMTAtMS0xLTEtMzAxNDA_eef022f9-48ce-495d-a028-94984ccd0360"
      unitRef="usd">226628000</us-gaap:OperatingExpenses>
    <us-gaap:OperatingExpenses
      contextRef="ie07f2822175c48edbb8d5559ceb82e6f_D20210101-20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83My9mcmFnOjZlNzY5MDQyM2QyYjRlYTE4NWNmZjA2OGE0ZjkwYmNmL3RhYmxlOmY5NDhkYzgyOTZiOTQxODRiYjhhYTA0MjM4MjVlMTJiL3RhYmxlcmFuZ2U6Zjk0OGRjODI5NmI5NDE4NGJiOGFhMDQyMzgyNWUxMmJfMTAtMy0xLTEtMzAxNDA_28b5642d-00ce-4d64-bd07-54db3e75900f"
      unitRef="usd">198513000</us-gaap:OperatingExpenses>
    <us-gaap:OperatingExpenses
      contextRef="i4751184d7e5948509cd8893fd49fb821_D20200101-20201231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83My9mcmFnOjZlNzY5MDQyM2QyYjRlYTE4NWNmZjA2OGE0ZjkwYmNmL3RhYmxlOmY5NDhkYzgyOTZiOTQxODRiYjhhYTA0MjM4MjVlMTJiL3RhYmxlcmFuZ2U6Zjk0OGRjODI5NmI5NDE4NGJiOGFhMDQyMzgyNWUxMmJfMTAtNS0xLTEtMzAxNDA_4b8228d8-2032-4e12-9531-38e8896eefc6"
      unitRef="usd">162636000</us-gaap:OperatingExpenses>
    <us-gaap:OperatingIncomeLoss
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83My9mcmFnOjZlNzY5MDQyM2QyYjRlYTE4NWNmZjA2OGE0ZjkwYmNmL3RhYmxlOmY5NDhkYzgyOTZiOTQxODRiYjhhYTA0MjM4MjVlMTJiL3RhYmxlcmFuZ2U6Zjk0OGRjODI5NmI5NDE4NGJiOGFhMDQyMzgyNWUxMmJfMTEtMS0xLTEtMzAxNDA_8cc5d122-473c-45e4-874d-04f42b8eb6fa"
      unitRef="usd">71182000</us-gaap:OperatingIncomeLoss>
    <us-gaap:OperatingIncomeLoss
      contextRef="ie07f2822175c48edbb8d5559ceb82e6f_D20210101-20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83My9mcmFnOjZlNzY5MDQyM2QyYjRlYTE4NWNmZjA2OGE0ZjkwYmNmL3RhYmxlOmY5NDhkYzgyOTZiOTQxODRiYjhhYTA0MjM4MjVlMTJiL3RhYmxlcmFuZ2U6Zjk0OGRjODI5NmI5NDE4NGJiOGFhMDQyMzgyNWUxMmJfMTEtMy0xLTEtMzAxNDA_c1242ce0-49dd-4b15-8593-3785bfc4c093"
      unitRef="usd">55085000</us-gaap:OperatingIncomeLoss>
    <us-gaap:OperatingIncomeLoss
      contextRef="i4751184d7e5948509cd8893fd49fb821_D20200101-20201231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83My9mcmFnOjZlNzY5MDQyM2QyYjRlYTE4NWNmZjA2OGE0ZjkwYmNmL3RhYmxlOmY5NDhkYzgyOTZiOTQxODRiYjhhYTA0MjM4MjVlMTJiL3RhYmxlcmFuZ2U6Zjk0OGRjODI5NmI5NDE4NGJiOGFhMDQyMzgyNWUxMmJfMTEtNS0xLTEtMzAxNDA_e8370300-3376-4756-89d3-fc9d46084bd5"
      unitRef="usd">50158000</us-gaap:OperatingIncomeLoss>
    <us-gaap:NonoperatingIncomeExpense
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83My9mcmFnOjZlNzY5MDQyM2QyYjRlYTE4NWNmZjA2OGE0ZjkwYmNmL3RhYmxlOmY5NDhkYzgyOTZiOTQxODRiYjhhYTA0MjM4MjVlMTJiL3RhYmxlcmFuZ2U6Zjk0OGRjODI5NmI5NDE4NGJiOGFhMDQyMzgyNWUxMmJfMTItMS0xLTEtMzAxNDA_f0d9b291-3a78-4bf4-87e3-d13dd30c8163"
      unitRef="usd">142000</us-gaap:NonoperatingIncomeExpense>
    <us-gaap:NonoperatingIncomeExpense
      contextRef="ie07f2822175c48edbb8d5559ceb82e6f_D20210101-20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83My9mcmFnOjZlNzY5MDQyM2QyYjRlYTE4NWNmZjA2OGE0ZjkwYmNmL3RhYmxlOmY5NDhkYzgyOTZiOTQxODRiYjhhYTA0MjM4MjVlMTJiL3RhYmxlcmFuZ2U6Zjk0OGRjODI5NmI5NDE4NGJiOGFhMDQyMzgyNWUxMmJfMTItMy0xLTEtMzAxNDA_ec49fb59-cfc2-4dcf-a64f-251f144ac2d4"
      unitRef="usd">-1544000</us-gaap:NonoperatingIncomeExpense>
    <us-gaap:NonoperatingIncomeExpense
      contextRef="i4751184d7e5948509cd8893fd49fb821_D20200101-20201231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83My9mcmFnOjZlNzY5MDQyM2QyYjRlYTE4NWNmZjA2OGE0ZjkwYmNmL3RhYmxlOmY5NDhkYzgyOTZiOTQxODRiYjhhYTA0MjM4MjVlMTJiL3RhYmxlcmFuZ2U6Zjk0OGRjODI5NmI5NDE4NGJiOGFhMDQyMzgyNWUxMmJfMTItNS0xLTEtMzAxNDA_be9e7e53-34c6-407e-89c6-fcfd216a8b15"
      unitRef="usd">2522000</us-gaap:NonoperatingIncomeExpense>
    <us-gaap:IncomeLossFromContinuingOperationsBeforeIncomeTaxesExtraordinaryItemsNoncontrollingInterest
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83My9mcmFnOjZlNzY5MDQyM2QyYjRlYTE4NWNmZjA2OGE0ZjkwYmNmL3RhYmxlOmY5NDhkYzgyOTZiOTQxODRiYjhhYTA0MjM4MjVlMTJiL3RhYmxlcmFuZ2U6Zjk0OGRjODI5NmI5NDE4NGJiOGFhMDQyMzgyNWUxMmJfMTMtMS0xLTEtMzAxNDA_8cab75ac-0abc-4c88-b8b1-60b07dc83862"
      unitRef="usd">71324000</us-gaap:IncomeLossFromContinuingOperationsBeforeIncomeTaxesExtraordinaryItemsNoncontrollingInterest>
    <us-gaap:IncomeLossFromContinuingOperationsBeforeIncomeTaxesExtraordinaryItemsNoncontrollingInterest
      contextRef="ie07f2822175c48edbb8d5559ceb82e6f_D20210101-20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83My9mcmFnOjZlNzY5MDQyM2QyYjRlYTE4NWNmZjA2OGE0ZjkwYmNmL3RhYmxlOmY5NDhkYzgyOTZiOTQxODRiYjhhYTA0MjM4MjVlMTJiL3RhYmxlcmFuZ2U6Zjk0OGRjODI5NmI5NDE4NGJiOGFhMDQyMzgyNWUxMmJfMTMtMy0xLTEtMzAxNDA_39ee4fd6-d540-49d8-8669-c4ec421b96ad"
      unitRef="usd">53541000</us-gaap:IncomeLossFromContinuingOperationsBeforeIncomeTaxesExtraordinaryItemsNoncontrollingInterest>
    <us-gaap:IncomeLossFromContinuingOperationsBeforeIncomeTaxesExtraordinaryItemsNoncontrollingInterest
      contextRef="i4751184d7e5948509cd8893fd49fb821_D20200101-20201231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83My9mcmFnOjZlNzY5MDQyM2QyYjRlYTE4NWNmZjA2OGE0ZjkwYmNmL3RhYmxlOmY5NDhkYzgyOTZiOTQxODRiYjhhYTA0MjM4MjVlMTJiL3RhYmxlcmFuZ2U6Zjk0OGRjODI5NmI5NDE4NGJiOGFhMDQyMzgyNWUxMmJfMTMtNS0xLTEtMzAxNDA_ce4f7bd7-31cb-49a3-976a-c26ba550a1bb"
      unitRef="usd">52680000</us-gaap:IncomeLossFromContinuingOperationsBeforeIncomeTaxesExtraordinaryItemsNoncontrollingInterest>
    <us-gaap:IncomeTaxExpenseBenefit
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83My9mcmFnOjZlNzY5MDQyM2QyYjRlYTE4NWNmZjA2OGE0ZjkwYmNmL3RhYmxlOmY5NDhkYzgyOTZiOTQxODRiYjhhYTA0MjM4MjVlMTJiL3RhYmxlcmFuZ2U6Zjk0OGRjODI5NmI5NDE4NGJiOGFhMDQyMzgyNWUxMmJfMTQtMS0xLTEtMzAxNDA_1ac2ab31-e5a3-4319-a074-e119f0da93cb"
      unitRef="usd">16190000</us-gaap:IncomeTaxExpenseBenefit>
    <us-gaap:IncomeTaxExpenseBenefit
      contextRef="ie07f2822175c48edbb8d5559ceb82e6f_D20210101-20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83My9mcmFnOjZlNzY5MDQyM2QyYjRlYTE4NWNmZjA2OGE0ZjkwYmNmL3RhYmxlOmY5NDhkYzgyOTZiOTQxODRiYjhhYTA0MjM4MjVlMTJiL3RhYmxlcmFuZ2U6Zjk0OGRjODI5NmI5NDE4NGJiOGFhMDQyMzgyNWUxMmJfMTQtMy0xLTEtMzAxNDA_bc8d622f-a8af-4d9a-b542-1ed14a268009"
      unitRef="usd">8944000</us-gaap:IncomeTaxExpenseBenefit>
    <us-gaap:IncomeTaxExpenseBenefit
      contextRef="i4751184d7e5948509cd8893fd49fb821_D20200101-20201231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83My9mcmFnOjZlNzY5MDQyM2QyYjRlYTE4NWNmZjA2OGE0ZjkwYmNmL3RhYmxlOmY5NDhkYzgyOTZiOTQxODRiYjhhYTA0MjM4MjVlMTJiL3RhYmxlcmFuZ2U6Zjk0OGRjODI5NmI5NDE4NGJiOGFhMDQyMzgyNWUxMmJfMTQtNS0xLTEtMzAxNDA_0fa5d42f-adc5-4b9a-8888-a52546671299"
      unitRef="usd">7094000</us-gaap:IncomeTaxExpenseBenefit>
    <us-gaap:NetIncomeLoss
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83My9mcmFnOjZlNzY5MDQyM2QyYjRlYTE4NWNmZjA2OGE0ZjkwYmNmL3RhYmxlOmY5NDhkYzgyOTZiOTQxODRiYjhhYTA0MjM4MjVlMTJiL3RhYmxlcmFuZ2U6Zjk0OGRjODI5NmI5NDE4NGJiOGFhMDQyMzgyNWUxMmJfMTUtMS0xLTEtMzAxNDA_16d4b192-6f77-4364-b561-939b7670c929"
      unitRef="usd">55134000</us-gaap:NetIncomeLoss>
    <us-gaap:NetIncomeLoss
      contextRef="ie07f2822175c48edbb8d5559ceb82e6f_D20210101-20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83My9mcmFnOjZlNzY5MDQyM2QyYjRlYTE4NWNmZjA2OGE0ZjkwYmNmL3RhYmxlOmY5NDhkYzgyOTZiOTQxODRiYjhhYTA0MjM4MjVlMTJiL3RhYmxlcmFuZ2U6Zjk0OGRjODI5NmI5NDE4NGJiOGFhMDQyMzgyNWUxMmJfMTUtMy0xLTEtMzAxNDA_8d08a294-a5ef-48a0-8330-849743d82c95"
      unitRef="usd">44597000</us-gaap:NetIncomeLoss>
    <us-gaap:NetIncomeLoss
      contextRef="i4751184d7e5948509cd8893fd49fb821_D20200101-20201231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83My9mcmFnOjZlNzY5MDQyM2QyYjRlYTE4NWNmZjA2OGE0ZjkwYmNmL3RhYmxlOmY5NDhkYzgyOTZiOTQxODRiYjhhYTA0MjM4MjVlMTJiL3RhYmxlcmFuZ2U6Zjk0OGRjODI5NmI5NDE4NGJiOGFhMDQyMzgyNWUxMmJfMTUtNS0xLTEtMzAxNDA_f1f6386e-64f8-44c5-aaa0-3ad9d3beb2ee"
      unitRef="usd">45586000</us-gaap:NetIncomeLoss>
    <us-gaap:OtherComprehensiveIncomeLossForeignCurrencyTransactionAndTranslationAdjustmentBeforeTax
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83My9mcmFnOjZlNzY5MDQyM2QyYjRlYTE4NWNmZjA2OGE0ZjkwYmNmL3RhYmxlOmY5NDhkYzgyOTZiOTQxODRiYjhhYTA0MjM4MjVlMTJiL3RhYmxlcmFuZ2U6Zjk0OGRjODI5NmI5NDE4NGJiOGFhMDQyMzgyNWUxMmJfMTctMS0xLTEtMzAxNDA_7b8e6fdd-1275-41cf-a63d-b9cdfe2dd821"
      unitRef="usd">-2240000</us-gaap:OtherComprehensiveIncomeLossForeignCurrencyTransactionAndTranslationAdjustmentBeforeTax>
    <us-gaap:OtherComprehensiveIncomeLossForeignCurrencyTransactionAndTranslationAdjustmentBeforeTax
      contextRef="ie07f2822175c48edbb8d5559ceb82e6f_D20210101-20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83My9mcmFnOjZlNzY5MDQyM2QyYjRlYTE4NWNmZjA2OGE0ZjkwYmNmL3RhYmxlOmY5NDhkYzgyOTZiOTQxODRiYjhhYTA0MjM4MjVlMTJiL3RhYmxlcmFuZ2U6Zjk0OGRjODI5NmI5NDE4NGJiOGFhMDQyMzgyNWUxMmJfMTctMy0xLTEtMzAxNDA_e1e1a15a-dce3-4cbb-910c-a245f35d4d88"
      unitRef="usd">-514000</us-gaap:OtherComprehensiveIncomeLossForeignCurrencyTransactionAndTranslationAdjustmentBeforeTax>
    <us-gaap:OtherComprehensiveIncomeLossForeignCurrencyTransactionAndTranslationAdjustmentBeforeTax
      contextRef="i4751184d7e5948509cd8893fd49fb821_D20200101-20201231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83My9mcmFnOjZlNzY5MDQyM2QyYjRlYTE4NWNmZjA2OGE0ZjkwYmNmL3RhYmxlOmY5NDhkYzgyOTZiOTQxODRiYjhhYTA0MjM4MjVlMTJiL3RhYmxlcmFuZ2U6Zjk0OGRjODI5NmI5NDE4NGJiOGFhMDQyMzgyNWUxMmJfMTctNS0xLTEtMzAxNDA_2c2a1e8e-1b3f-4af8-97fe-19817d2436dc"
      unitRef="usd">1097000</us-gaap:OtherComprehensiveIncomeLossForeignCurrencyTransactionAndTranslationAdjustmentBeforeTax>
    <us-gaap:OtherComprehensiveIncomeUnrealizedHoldingGainLossOnSecuritiesArisingDuringPeriodTax
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83My9mcmFnOjZlNzY5MDQyM2QyYjRlYTE4NWNmZjA2OGE0ZjkwYmNmL3RhYmxlOmY5NDhkYzgyOTZiOTQxODRiYjhhYTA0MjM4MjVlMTJiL3RhYmxlcmFuZ2U6Zjk0OGRjODI5NmI5NDE4NGJiOGFhMDQyMzgyNWUxMmJfMTgtMC0xLTEtMzAxNDAvdGV4dHJlZ2lvbjo1ZjE5Zjg4YTA0MjM0ZmFjYWNkZjM0NTQwMTMzZWJlZF81Nw_53efa573-790d-4c06-b7a6-d1685df2cc13"
      unitRef="usd">147000</us-gaap:OtherComprehensiveIncomeUnrealizedHoldingGainLossOnSecuritiesArisingDuringPeriodTax>
    <us-gaap:OtherComprehensiveIncomeUnrealizedHoldingGainLossOnSecuritiesArisingDuringPeriodTax
      contextRef="ie07f2822175c48edbb8d5559ceb82e6f_D20210101-20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83My9mcmFnOjZlNzY5MDQyM2QyYjRlYTE4NWNmZjA2OGE0ZjkwYmNmL3RhYmxlOmY5NDhkYzgyOTZiOTQxODRiYjhhYTA0MjM4MjVlMTJiL3RhYmxlcmFuZ2U6Zjk0OGRjODI5NmI5NDE4NGJiOGFhMDQyMzgyNWUxMmJfMTgtMC0xLTEtMzAxNDAvdGV4dHJlZ2lvbjo1ZjE5Zjg4YTA0MjM0ZmFjYWNkZjM0NTQwMTMzZWJlZF82MQ_f3887b71-b830-409c-8a78-bb98456a452a"
      unitRef="usd">-34000</us-gaap:OtherComprehensiveIncomeUnrealizedHoldingGainLossOnSecuritiesArisingDuringPeriodTax>
    <us-gaap:OtherComprehensiveIncomeUnrealizedHoldingGainLossOnSecuritiesArisingDuringPeriodTax
      contextRef="i4751184d7e5948509cd8893fd49fb821_D20200101-20201231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83My9mcmFnOjZlNzY5MDQyM2QyYjRlYTE4NWNmZjA2OGE0ZjkwYmNmL3RhYmxlOmY5NDhkYzgyOTZiOTQxODRiYjhhYTA0MjM4MjVlMTJiL3RhYmxlcmFuZ2U6Zjk0OGRjODI5NmI5NDE4NGJiOGFhMDQyMzgyNWUxMmJfMTgtMC0xLTEtMzAxNDAvdGV4dHJlZ2lvbjo1ZjE5Zjg4YTA0MjM0ZmFjYWNkZjM0NTQwMTMzZWJlZF82OQ_b6611d44-8c79-43d1-b6b6-f55c1bb0eeca"
      unitRef="usd">-3000</us-gaap:OtherComprehensiveIncomeUnrealizedHoldingGainLossOnSecuritiesArisingDuringPeriodTax>
    <us-gaap:OtherComprehensiveIncomeUnrealizedHoldingGainLossOnSecuritiesArisingDuringPeriodNetOfTax
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83My9mcmFnOjZlNzY5MDQyM2QyYjRlYTE4NWNmZjA2OGE0ZjkwYmNmL3RhYmxlOmY5NDhkYzgyOTZiOTQxODRiYjhhYTA0MjM4MjVlMTJiL3RhYmxlcmFuZ2U6Zjk0OGRjODI5NmI5NDE4NGJiOGFhMDQyMzgyNWUxMmJfMTgtMS0xLTEtMzAxNDA_df910fc1-3aeb-442d-af37-ef1e5d51f573"
      unitRef="usd">441000</us-gaap:OtherComprehensiveIncomeUnrealizedHoldingGainLossOnSecuritiesArisingDuringPeriodNetOfTax>
    <us-gaap:OtherComprehensiveIncomeUnrealizedHoldingGainLossOnSecuritiesArisingDuringPeriodNetOfTax
      contextRef="ie07f2822175c48edbb8d5559ceb82e6f_D20210101-20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83My9mcmFnOjZlNzY5MDQyM2QyYjRlYTE4NWNmZjA2OGE0ZjkwYmNmL3RhYmxlOmY5NDhkYzgyOTZiOTQxODRiYjhhYTA0MjM4MjVlMTJiL3RhYmxlcmFuZ2U6Zjk0OGRjODI5NmI5NDE4NGJiOGFhMDQyMzgyNWUxMmJfMTgtMy0xLTEtMzAxNDA_64c4eebe-66dd-478c-b81d-9825838834cf"
      unitRef="usd">-102000</us-gaap:OtherComprehensiveIncomeUnrealizedHoldingGainLossOnSecuritiesArisingDuringPeriodNetOfTax>
    <us-gaap:OtherComprehensiveIncomeUnrealizedHoldingGainLossOnSecuritiesArisingDuringPeriodNetOfTax
      contextRef="i4751184d7e5948509cd8893fd49fb821_D20200101-20201231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83My9mcmFnOjZlNzY5MDQyM2QyYjRlYTE4NWNmZjA2OGE0ZjkwYmNmL3RhYmxlOmY5NDhkYzgyOTZiOTQxODRiYjhhYTA0MjM4MjVlMTJiL3RhYmxlcmFuZ2U6Zjk0OGRjODI5NmI5NDE4NGJiOGFhMDQyMzgyNWUxMmJfMTgtNS0xLTEtMzAxNDA_bb8d653f-9ae3-4586-9151-1ec9409fac56"
      unitRef="usd">-10000</us-gaap:OtherComprehensiveIncomeUnrealizedHoldingGainLossOnSecuritiesArisingDuringPeriodNetOfTax>
    <us-gaap:OtherComprehensiveIncomeLossReclassificationAdjustmentFromAOCIForSaleOfSecuritiesTax
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83My9mcmFnOjZlNzY5MDQyM2QyYjRlYTE4NWNmZjA2OGE0ZjkwYmNmL3RhYmxlOmY5NDhkYzgyOTZiOTQxODRiYjhhYTA0MjM4MjVlMTJiL3RhYmxlcmFuZ2U6Zjk0OGRjODI5NmI5NDE4NGJiOGFhMDQyMzgyNWUxMmJfMTktMC0xLTEtMzAxNDAvdGV4dHJlZ2lvbjpmNmQxZjNmMTNkYzA0MWY3OTFjMDAzZjIzNmEyNDg2Y184MA_7736c4cb-77a2-4db9-b25c-239f068be4c8"
      unitRef="usd">-55000</us-gaap:OtherComprehensiveIncomeLossReclassificationAdjustmentFromAOCIForSaleOfSecuritiesTax>
    <us-gaap:OtherComprehensiveIncomeLossReclassificationAdjustmentFromAOCIForSaleOfSecuritiesTax
      contextRef="ie07f2822175c48edbb8d5559ceb82e6f_D20210101-20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83My9mcmFnOjZlNzY5MDQyM2QyYjRlYTE4NWNmZjA2OGE0ZjkwYmNmL3RhYmxlOmY5NDhkYzgyOTZiOTQxODRiYjhhYTA0MjM4MjVlMTJiL3RhYmxlcmFuZ2U6Zjk0OGRjODI5NmI5NDE4NGJiOGFhMDQyMzgyNWUxMmJfMTktMC0xLTEtMzAxNDAvdGV4dHJlZ2lvbjpmNmQxZjNmMTNkYzA0MWY3OTFjMDAzZjIzNmEyNDg2Y184NA_2f00e790-7377-4f4c-bf02-e70e9329f8e4"
      unitRef="usd">63000</us-gaap:OtherComprehensiveIncomeLossReclassificationAdjustmentFromAOCIForSaleOfSecuritiesTax>
    <us-gaap:OtherComprehensiveIncomeLossReclassificationAdjustmentFromAOCIForSaleOfSecuritiesTax
      contextRef="i4751184d7e5948509cd8893fd49fb821_D20200101-20201231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83My9mcmFnOjZlNzY5MDQyM2QyYjRlYTE4NWNmZjA2OGE0ZjkwYmNmL3RhYmxlOmY5NDhkYzgyOTZiOTQxODRiYjhhYTA0MjM4MjVlMTJiL3RhYmxlcmFuZ2U6Zjk0OGRjODI5NmI5NDE4NGJiOGFhMDQyMzgyNWUxMmJfMTktMC0xLTEtMzAxNDAvdGV4dHJlZ2lvbjpmNmQxZjNmMTNkYzA0MWY3OTFjMDAzZjIzNmEyNDg2Y185Mg_9e70cfbb-2a50-493b-8223-f44674f04d08"
      unitRef="usd">-52000</us-gaap:OtherComprehensiveIncomeLossReclassificationAdjustmentFromAOCIForSaleOfSecuritiesTax>
    <us-gaap:OtherComprehensiveIncomeLossReclassificationAdjustmentFromAOCIForSaleOfSecuritiesNetOfTax
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83My9mcmFnOjZlNzY5MDQyM2QyYjRlYTE4NWNmZjA2OGE0ZjkwYmNmL3RhYmxlOmY5NDhkYzgyOTZiOTQxODRiYjhhYTA0MjM4MjVlMTJiL3RhYmxlcmFuZ2U6Zjk0OGRjODI5NmI5NDE4NGJiOGFhMDQyMzgyNWUxMmJfMTktMS0xLTEtMzAxNDA_ab1efe19-ea70-444e-9c0c-22923c19e6f7"
      unitRef="usd">165000</us-gaap:OtherComprehensiveIncomeLossReclassificationAdjustmentFromAOCIForSaleOfSecuritiesNetOfTax>
    <us-gaap:OtherComprehensiveIncomeLossReclassificationAdjustmentFromAOCIForSaleOfSecuritiesNetOfTax
      contextRef="ie07f2822175c48edbb8d5559ceb82e6f_D20210101-20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83My9mcmFnOjZlNzY5MDQyM2QyYjRlYTE4NWNmZjA2OGE0ZjkwYmNmL3RhYmxlOmY5NDhkYzgyOTZiOTQxODRiYjhhYTA0MjM4MjVlMTJiL3RhYmxlcmFuZ2U6Zjk0OGRjODI5NmI5NDE4NGJiOGFhMDQyMzgyNWUxMmJfMTktMy0xLTEtMzAxNDA_c343fb2e-5121-4f88-9c74-63194134afa2"
      unitRef="usd">-190000</us-gaap:OtherComprehensiveIncomeLossReclassificationAdjustmentFromAOCIForSaleOfSecuritiesNetOfTax>
    <us-gaap:OtherComprehensiveIncomeLossReclassificationAdjustmentFromAOCIForSaleOfSecuritiesNetOfTax
      contextRef="i4751184d7e5948509cd8893fd49fb821_D20200101-20201231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83My9mcmFnOjZlNzY5MDQyM2QyYjRlYTE4NWNmZjA2OGE0ZjkwYmNmL3RhYmxlOmY5NDhkYzgyOTZiOTQxODRiYjhhYTA0MjM4MjVlMTJiL3RhYmxlcmFuZ2U6Zjk0OGRjODI5NmI5NDE4NGJiOGFhMDQyMzgyNWUxMmJfMTktNS0xLTEtMzAxNDA_f8aa9c78-0bf0-4b37-99b6-ea6b9eb41a24"
      unitRef="usd">157000</us-gaap:OtherComprehensiveIncomeLossReclassificationAdjustmentFromAOCIForSaleOfSecuritiesNetOfTax>
    <us-gaap:OtherComprehensiveIncomeLossNetOfTaxPortionAttributableToParent
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83My9mcmFnOjZlNzY5MDQyM2QyYjRlYTE4NWNmZjA2OGE0ZjkwYmNmL3RhYmxlOmY5NDhkYzgyOTZiOTQxODRiYjhhYTA0MjM4MjVlMTJiL3RhYmxlcmFuZ2U6Zjk0OGRjODI5NmI5NDE4NGJiOGFhMDQyMzgyNWUxMmJfMjAtMS0xLTEtMzAxNDA_a1603d87-5f61-4ea2-aa74-23f22143a49f"
      unitRef="usd">-1964000</us-gaap:OtherComprehensiveIncomeLossNetOfTaxPortionAttributableToParent>
    <us-gaap:OtherComprehensiveIncomeLossNetOfTaxPortionAttributableToParent
      contextRef="ie07f2822175c48edbb8d5559ceb82e6f_D20210101-20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83My9mcmFnOjZlNzY5MDQyM2QyYjRlYTE4NWNmZjA2OGE0ZjkwYmNmL3RhYmxlOmY5NDhkYzgyOTZiOTQxODRiYjhhYTA0MjM4MjVlMTJiL3RhYmxlcmFuZ2U6Zjk0OGRjODI5NmI5NDE4NGJiOGFhMDQyMzgyNWUxMmJfMjAtMy0xLTEtMzAxNDA_897ee980-f06b-4eb4-865c-65325ad2152d"
      unitRef="usd">-426000</us-gaap:OtherComprehensiveIncomeLossNetOfTaxPortionAttributableToParent>
    <us-gaap:OtherComprehensiveIncomeLossNetOfTaxPortionAttributableToParent
      contextRef="i4751184d7e5948509cd8893fd49fb821_D20200101-20201231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83My9mcmFnOjZlNzY5MDQyM2QyYjRlYTE4NWNmZjA2OGE0ZjkwYmNmL3RhYmxlOmY5NDhkYzgyOTZiOTQxODRiYjhhYTA0MjM4MjVlMTJiL3RhYmxlcmFuZ2U6Zjk0OGRjODI5NmI5NDE4NGJiOGFhMDQyMzgyNWUxMmJfMjAtNS0xLTEtMzAxNDA_30cbf76a-adc2-48ec-be78-cdcd77b70508"
      unitRef="usd">930000</us-gaap:OtherComprehensiveIncomeLossNetOfTaxPortionAttributableToParent>
    <us-gaap:ComprehensiveIncomeNetOfTax
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83My9mcmFnOjZlNzY5MDQyM2QyYjRlYTE4NWNmZjA2OGE0ZjkwYmNmL3RhYmxlOmY5NDhkYzgyOTZiOTQxODRiYjhhYTA0MjM4MjVlMTJiL3RhYmxlcmFuZ2U6Zjk0OGRjODI5NmI5NDE4NGJiOGFhMDQyMzgyNWUxMmJfMjEtMS0xLTEtMzAxNDA_6d9de40e-4a63-4a7e-9e84-c5f04e16eb61"
      unitRef="usd">53170000</us-gaap:ComprehensiveIncomeNetOfTax>
    <us-gaap:ComprehensiveIncomeNetOfTax
      contextRef="ie07f2822175c48edbb8d5559ceb82e6f_D20210101-20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83My9mcmFnOjZlNzY5MDQyM2QyYjRlYTE4NWNmZjA2OGE0ZjkwYmNmL3RhYmxlOmY5NDhkYzgyOTZiOTQxODRiYjhhYTA0MjM4MjVlMTJiL3RhYmxlcmFuZ2U6Zjk0OGRjODI5NmI5NDE4NGJiOGFhMDQyMzgyNWUxMmJfMjEtMy0xLTEtMzAxNDA_5c5634b2-34d0-4bde-a922-28fc14928e3f"
      unitRef="usd">44171000</us-gaap:ComprehensiveIncomeNetOfTax>
    <us-gaap:ComprehensiveIncomeNetOfTax
      contextRef="i4751184d7e5948509cd8893fd49fb821_D20200101-20201231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83My9mcmFnOjZlNzY5MDQyM2QyYjRlYTE4NWNmZjA2OGE0ZjkwYmNmL3RhYmxlOmY5NDhkYzgyOTZiOTQxODRiYjhhYTA0MjM4MjVlMTJiL3RhYmxlcmFuZ2U6Zjk0OGRjODI5NmI5NDE4NGJiOGFhMDQyMzgyNWUxMmJfMjEtNS0xLTEtMzAxNDA_a593be00-de5e-4f9c-91bd-684d4a3b6469"
      unitRef="usd">46516000</us-gaap:ComprehensiveIncomeNetOfTax>
    <us-gaap:EarningsPerShareBasic
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      decimals="2"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83My9mcmFnOjZlNzY5MDQyM2QyYjRlYTE4NWNmZjA2OGE0ZjkwYmNmL3RhYmxlOmY5NDhkYzgyOTZiOTQxODRiYjhhYTA0MjM4MjVlMTJiL3RhYmxlcmFuZ2U6Zjk0OGRjODI5NmI5NDE4NGJiOGFhMDQyMzgyNWUxMmJfMjQtMS0xLTEtMzAxNDA_5bdf670d-90b7-4c37-a633-030324af6762"
      unitRef="usdPerShare">1.53</us-gaap:EarningsPerShareBasic>
    <us-gaap:EarningsPerShareBasic
      contextRef="ie07f2822175c48edbb8d5559ceb82e6f_D20210101-20211231"
      decimals="2"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83My9mcmFnOjZlNzY5MDQyM2QyYjRlYTE4NWNmZjA2OGE0ZjkwYmNmL3RhYmxlOmY5NDhkYzgyOTZiOTQxODRiYjhhYTA0MjM4MjVlMTJiL3RhYmxlcmFuZ2U6Zjk0OGRjODI5NmI5NDE4NGJiOGFhMDQyMzgyNWUxMmJfMjQtMy0xLTEtMzAxNDA_bd751d35-8916-4dc7-9e30-56588221d4f2"
      unitRef="usdPerShare">1.24</us-gaap:EarningsPerShareBasic>
    <us-gaap:EarningsPerShareBasic
      contextRef="i4751184d7e5948509cd8893fd49fb821_D20200101-20201231"
      decimals="2"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83My9mcmFnOjZlNzY5MDQyM2QyYjRlYTE4NWNmZjA2OGE0ZjkwYmNmL3RhYmxlOmY5NDhkYzgyOTZiOTQxODRiYjhhYTA0MjM4MjVlMTJiL3RhYmxlcmFuZ2U6Zjk0OGRjODI5NmI5NDE4NGJiOGFhMDQyMzgyNWUxMmJfMjQtNS0xLTEtMzAxNDA_1f5e03d3-d7e5-4e80-9119-883eb14404d6"
      unitRef="usdPerShare">1.29</us-gaap:EarningsPerShareBasic>
    <us-gaap:EarningsPerShareDiluted
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      decimals="2"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83My9mcmFnOjZlNzY5MDQyM2QyYjRlYTE4NWNmZjA2OGE0ZjkwYmNmL3RhYmxlOmY5NDhkYzgyOTZiOTQxODRiYjhhYTA0MjM4MjVlMTJiL3RhYmxlcmFuZ2U6Zjk0OGRjODI5NmI5NDE4NGJiOGFhMDQyMzgyNWUxMmJfMjUtMS0xLTEtMzAxNDA_a647bb24-f6de-4980-9744-bb3a98752829"
      unitRef="usdPerShare">1.49</us-gaap:EarningsPerShareDiluted>
    <us-gaap:EarningsPerShareDiluted
      contextRef="ie07f2822175c48edbb8d5559ceb82e6f_D20210101-20211231"
      decimals="2"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83My9mcmFnOjZlNzY5MDQyM2QyYjRlYTE4NWNmZjA2OGE0ZjkwYmNmL3RhYmxlOmY5NDhkYzgyOTZiOTQxODRiYjhhYTA0MjM4MjVlMTJiL3RhYmxlcmFuZ2U6Zjk0OGRjODI5NmI5NDE4NGJiOGFhMDQyMzgyNWUxMmJfMjUtMy0xLTEtMzAxNDA_95647979-5c35-45a5-a223-e5be0ea1f4ba"
      unitRef="usdPerShare">1.21</us-gaap:EarningsPerShareDiluted>
    <us-gaap:EarningsPerShareDiluted
      contextRef="i4751184d7e5948509cd8893fd49fb821_D20200101-20201231"
      decimals="2"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83My9mcmFnOjZlNzY5MDQyM2QyYjRlYTE4NWNmZjA2OGE0ZjkwYmNmL3RhYmxlOmY5NDhkYzgyOTZiOTQxODRiYjhhYTA0MjM4MjVlMTJiL3RhYmxlcmFuZ2U6Zjk0OGRjODI5NmI5NDE4NGJiOGFhMDQyMzgyNWUxMmJfMjUtNS0xLTEtMzAxNDA_33486c27-cfc3-4414-9c4c-6cf187065a37"
      unitRef="usdPerShare">1.26</us-gaap:EarningsPerShareDiluted>
    <us-gaap:WeightedAverageNumberOfSharesOutstandingBasic
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83My9mcmFnOjZlNzY5MDQyM2QyYjRlYTE4NWNmZjA2OGE0ZjkwYmNmL3RhYmxlOmY5NDhkYzgyOTZiOTQxODRiYjhhYTA0MjM4MjVlMTJiL3RhYmxlcmFuZ2U6Zjk0OGRjODI5NmI5NDE4NGJiOGFhMDQyMzgyNWUxMmJfMjgtMS0xLTEtMzAxNDA_2c23a2cd-138e-4b05-bebd-1311858b8966"
      unitRef="shares">36117000</us-gaap:WeightedAverageNumberOfSharesOutstandingBasic>
    <us-gaap:WeightedAverageNumberOfSharesOutstandingBasic
      contextRef="ie07f2822175c48edbb8d5559ceb82e6f_D20210101-20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83My9mcmFnOjZlNzY5MDQyM2QyYjRlYTE4NWNmZjA2OGE0ZjkwYmNmL3RhYmxlOmY5NDhkYzgyOTZiOTQxODRiYjhhYTA0MjM4MjVlMTJiL3RhYmxlcmFuZ2U6Zjk0OGRjODI5NmI5NDE4NGJiOGFhMDQyMzgyNWUxMmJfMjgtMy0xLTEtMzAxNDA_045a8b8d-8a02-4a6e-80c7-db537db4ac87"
      unitRef="shares">35928000</us-gaap:WeightedAverageNumberOfSharesOutstandingBasic>
    <us-gaap:WeightedAverageNumberOfSharesOutstandingBasic
      contextRef="i4751184d7e5948509cd8893fd49fb821_D20200101-20201231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83My9mcmFnOjZlNzY5MDQyM2QyYjRlYTE4NWNmZjA2OGE0ZjkwYmNmL3RhYmxlOmY5NDhkYzgyOTZiOTQxODRiYjhhYTA0MjM4MjVlMTJiL3RhYmxlcmFuZ2U6Zjk0OGRjODI5NmI5NDE4NGJiOGFhMDQyMzgyNWUxMmJfMjgtNS0xLTEtMzAxNDA_dc360ab6-55cf-416a-bf2d-a390ee84a447"
      unitRef="shares">35226000</us-gaap:WeightedAverageNumberOfSharesOutstandingBasic>
    <us-gaap:WeightedAverageNumberOfDilutedSharesOutstanding
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83My9mcmFnOjZlNzY5MDQyM2QyYjRlYTE4NWNmZjA2OGE0ZjkwYmNmL3RhYmxlOmY5NDhkYzgyOTZiOTQxODRiYjhhYTA0MjM4MjVlMTJiL3RhYmxlcmFuZ2U6Zjk0OGRjODI5NmI5NDE4NGJiOGFhMDQyMzgyNWUxMmJfMjktMS0xLTEtMzAxNDA_0388a7ce-b12a-4da9-8b3c-8168af1c6242"
      unitRef="shares">36953000</us-gaap:WeightedAverageNumberOfDilutedSharesOutstanding>
    <us-gaap:WeightedAverageNumberOfDilutedSharesOutstanding
      contextRef="ie07f2822175c48edbb8d5559ceb82e6f_D20210101-20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83My9mcmFnOjZlNzY5MDQyM2QyYjRlYTE4NWNmZjA2OGE0ZjkwYmNmL3RhYmxlOmY5NDhkYzgyOTZiOTQxODRiYjhhYTA0MjM4MjVlMTJiL3RhYmxlcmFuZ2U6Zjk0OGRjODI5NmI5NDE4NGJiOGFhMDQyMzgyNWUxMmJfMjktMy0xLTEtMzAxNDA_73fe4600-3bd0-4175-89b9-3da92fceba10"
      unitRef="shares">36962000</us-gaap:WeightedAverageNumberOfDilutedSharesOutstanding>
    <us-gaap:WeightedAverageNumberOfDilutedSharesOutstanding
      contextRef="i4751184d7e5948509cd8893fd49fb821_D20200101-20201231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83My9mcmFnOjZlNzY5MDQyM2QyYjRlYTE4NWNmZjA2OGE0ZjkwYmNmL3RhYmxlOmY5NDhkYzgyOTZiOTQxODRiYjhhYTA0MjM4MjVlMTJiL3RhYmxlcmFuZ2U6Zjk0OGRjODI5NmI5NDE4NGJiOGFhMDQyMzgyNWUxMmJfMjktNS0xLTEtMzAxNDA_77e5c101-bad9-4969-96f4-c8f6151e6cca"
      unitRef="shares">36285000</us-gaap:WeightedAverageNumberOfDilutedSharesOutstanding>
    <us-gaap:CommonStockSharesOutstanding
      contextRef="i9ea0388b253f49c38957f40d08028afb_I20191231"
      decimals="INF"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83Ni9mcmFnOjI2YTZmZGNiZDgwYzQyNjdiOTA4YjI1OWRjZjU4OTJkL3RhYmxlOmI4NzM5ZWM0NWVmZTQ5ZDQ5ODNiYWUzMWYzNGY3YmNiL3RhYmxlcmFuZ2U6Yjg3MzllYzQ1ZWZlNDlkNDk4M2JhZTMxZjM0ZjdiY2JfMi0xLTEtMS0zMDE0MA_5ea91764-6285-4acf-bb0a-2acff156b97f"
      unitRef="shares">34863271</us-gaap:CommonStockSharesOutstanding>
    <us-gaap:StockholdersEquity
      contextRef="i9ea0388b253f49c38957f40d08028afb_I20191231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83Ni9mcmFnOjI2YTZmZGNiZDgwYzQyNjdiOTA4YjI1OWRjZjU4OTJkL3RhYmxlOmI4NzM5ZWM0NWVmZTQ5ZDQ5ODNiYWUzMWYzNGY3YmNiL3RhYmxlcmFuZ2U6Yjg3MzllYzQ1ZWZlNDlkNDk4M2JhZTMxZjM0ZjdiY2JfMi0zLTEtMS0zMDE0MA_5b6c0d30-7db7-4a1d-8893-8b4e190f380d"
      unitRef="usd">36000</us-gaap:StockholdersEquity>
    <us-gaap:TreasuryStockCommonShares
      contextRef="i72c3e3741fda45f4a532612ab8784a69_I20191231"
      decimals="INF"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83Ni9mcmFnOjI2YTZmZGNiZDgwYzQyNjdiOTA4YjI1OWRjZjU4OTJkL3RhYmxlOmI4NzM5ZWM0NWVmZTQ5ZDQ5ODNiYWUzMWYzNGY3YmNiL3RhYmxlcmFuZ2U6Yjg3MzllYzQ1ZWZlNDlkNDk4M2JhZTMxZjM0ZjdiY2JfMi01LTEtMS0zMDE0MA_445891ca-af0c-4cfb-898e-04f15a8c517c"
      unitRef="shares">1241348</us-gaap:TreasuryStockCommonShares>
    <us-gaap:StockholdersEquity
      contextRef="i72c3e3741fda45f4a532612ab8784a69_I20191231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83Ni9mcmFnOjI2YTZmZGNiZDgwYzQyNjdiOTA4YjI1OWRjZjU4OTJkL3RhYmxlOmI4NzM5ZWM0NWVmZTQ5ZDQ5ODNiYWUzMWYzNGY3YmNiL3RhYmxlcmFuZ2U6Yjg3MzllYzQ1ZWZlNDlkNDk4M2JhZTMxZjM0ZjdiY2JfMi03LTEtMS0zMDE0MA_8dc01ca6-5593-4520-88a3-eb1136cf8021"
      unitRef="usd">-46297000</us-gaap:StockholdersEquity>
    <us-gaap:StockholdersEquity
      contextRef="i12162a7cc6e447bf9cea2634f80b45b4_I20191231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83Ni9mcmFnOjI2YTZmZGNiZDgwYzQyNjdiOTA4YjI1OWRjZjU4OTJkL3RhYmxlOmI4NzM5ZWM0NWVmZTQ5ZDQ5ODNiYWUzMWYzNGY3YmNiL3RhYmxlcmFuZ2U6Yjg3MzllYzQ1ZWZlNDlkNDk4M2JhZTMxZjM0ZjdiY2JfMi05LTEtMS0zMDE0MA_e737972b-1ed0-4458-85f2-52f1f0f8a2a3"
      unitRef="usd">354115000</us-gaap:StockholdersEquity>
    <us-gaap:StockholdersEquity
      contextRef="ia3a864f52fd04e9e8fca197829fc3b9e_I20191231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83Ni9mcmFnOjI2YTZmZGNiZDgwYzQyNjdiOTA4YjI1OWRjZjU4OTJkL3RhYmxlOmI4NzM5ZWM0NWVmZTQ5ZDQ5ODNiYWUzMWYzNGY3YmNiL3RhYmxlcmFuZ2U6Yjg3MzllYzQ1ZWZlNDlkNDk4M2JhZTMxZjM0ZjdiY2JfMi0xMS0xLTEtMzAxNDA_999afd9b-829e-4282-862f-1e89ab765a43"
      unitRef="usd">48973000</us-gaap:StockholdersEquity>
    <us-gaap:StockholdersEquity
      contextRef="i7b59dfa694bc47e084788f6fd33fd251_I20191231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83Ni9mcmFnOjI2YTZmZGNiZDgwYzQyNjdiOTA4YjI1OWRjZjU4OTJkL3RhYmxlOmI4NzM5ZWM0NWVmZTQ5ZDQ5ODNiYWUzMWYzNGY3YmNiL3RhYmxlcmFuZ2U6Yjg3MzllYzQ1ZWZlNDlkNDk4M2JhZTMxZjM0ZjdiY2JfMi0xMy0xLTEtMzAxNDA_4de7836a-4453-4da0-9936-f4fa5a4e4be0"
      unitRef="usd">-1951000</us-gaap:StockholdersEquity>
    <us-gaap:StockholdersEquity
      contextRef="i489b2464c80746b9ae7427577897ad3e_I20191231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83Ni9mcmFnOjI2YTZmZGNiZDgwYzQyNjdiOTA4YjI1OWRjZjU4OTJkL3RhYmxlOmI4NzM5ZWM0NWVmZTQ5ZDQ5ODNiYWUzMWYzNGY3YmNiL3RhYmxlcmFuZ2U6Yjg3MzllYzQ1ZWZlNDlkNDk4M2JhZTMxZjM0ZjdiY2JfMi0xNS0xLTEtMzAxNDA_b1a864ab-fb92-4a31-8613-a29dab32d9fb"
      unitRef="usd">354876000</us-gaap:StockholdersEquity>
    <us-gaap:AdjustmentsToAdditionalPaidInCapitalSharebasedCompensationRequisiteServicePeriodRecognitionValue
      contextRef="i5fedfd22c1844e8288575273058c346b_D20200101-20201231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83Ni9mcmFnOjI2YTZmZGNiZDgwYzQyNjdiOTA4YjI1OWRjZjU4OTJkL3RhYmxlOmI4NzM5ZWM0NWVmZTQ5ZDQ5ODNiYWUzMWYzNGY3YmNiL3RhYmxlcmFuZ2U6Yjg3MzllYzQ1ZWZlNDlkNDk4M2JhZTMxZjM0ZjdiY2JfMy05LTEtMS0zMDE0MA_bdfb354e-fa50-4e4d-840a-17d4b211456c"
      unitRef="usd">17382000</us-gaap:AdjustmentsToAdditionalPaidInCapitalSharebasedCompensationRequisiteServicePeriodRecognitionValue>
    <us-gaap:AdjustmentsToAdditionalPaidInCapitalSharebasedCompensationRequisiteServicePeriodRecognitionValue
      contextRef="i4751184d7e5948509cd8893fd49fb821_D20200101-20201231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83Ni9mcmFnOjI2YTZmZGNiZDgwYzQyNjdiOTA4YjI1OWRjZjU4OTJkL3RhYmxlOmI4NzM5ZWM0NWVmZTQ5ZDQ5ODNiYWUzMWYzNGY3YmNiL3RhYmxlcmFuZ2U6Yjg3MzllYzQ1ZWZlNDlkNDk4M2JhZTMxZjM0ZjdiY2JfMy0xNS0xLTEtMzAxNDA_720afdd5-3077-4f70-82a5-74c81e9dba0b"
      unitRef="usd">17382000</us-gaap:AdjustmentsToAdditionalPaidInCapitalSharebasedCompensationRequisiteServicePeriodRecognitionValue>
    <spsc:StockIssuedDuringPeriodSharesPursuantToStockAwards
      contextRef="icadb613605f14558958b2da4ce68e897_D20200101-20201231"
      decimals="INF"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83Ni9mcmFnOjI2YTZmZGNiZDgwYzQyNjdiOTA4YjI1OWRjZjU4OTJkL3RhYmxlOmI4NzM5ZWM0NWVmZTQ5ZDQ5ODNiYWUzMWYzNGY3YmNiL3RhYmxlcmFuZ2U6Yjg3MzllYzQ1ZWZlNDlkNDk4M2JhZTMxZjM0ZjdiY2JfNC0xLTEtMS0zMDE0MA_4fd02559-5d37-41db-a7d3-378cb40203c0"
      unitRef="shares">934015</spsc:StockIssuedDuringPeriodSharesPursuantToStockAwards>
    <spsc:StockIssuedDuringPeriodValuePursuantToStockAwards
      contextRef="icadb613605f14558958b2da4ce68e897_D20200101-20201231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83Ni9mcmFnOjI2YTZmZGNiZDgwYzQyNjdiOTA4YjI1OWRjZjU4OTJkL3RhYmxlOmI4NzM5ZWM0NWVmZTQ5ZDQ5ODNiYWUzMWYzNGY3YmNiL3RhYmxlcmFuZ2U6Yjg3MzllYzQ1ZWZlNDlkNDk4M2JhZTMxZjM0ZjdiY2JfNC0zLTEtMS0zMDE0MA_298c4153-c22f-4f51-82c8-31d136f652ee"
      unitRef="usd">1000</spsc:StockIssuedDuringPeriodValuePursuantToStockAwards>
    <spsc:StockIssuedDuringPeriodValuePursuantToStockAwards
      contextRef="i5fedfd22c1844e8288575273058c346b_D20200101-20201231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83Ni9mcmFnOjI2YTZmZGNiZDgwYzQyNjdiOTA4YjI1OWRjZjU4OTJkL3RhYmxlOmI4NzM5ZWM0NWVmZTQ5ZDQ5ODNiYWUzMWYzNGY3YmNiL3RhYmxlcmFuZ2U6Yjg3MzllYzQ1ZWZlNDlkNDk4M2JhZTMxZjM0ZjdiY2JfNC05LTEtMS0zMDE0MA_f9d52443-0274-48e1-90ea-fa466e99d092"
      unitRef="usd">18591000</spsc:StockIssuedDuringPeriodValuePursuantToStockAwards>
    <spsc:StockIssuedDuringPeriodValuePursuantToStockAwards
      contextRef="i4751184d7e5948509cd8893fd49fb821_D20200101-20201231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83Ni9mcmFnOjI2YTZmZGNiZDgwYzQyNjdiOTA4YjI1OWRjZjU4OTJkL3RhYmxlOmI4NzM5ZWM0NWVmZTQ5ZDQ5ODNiYWUzMWYzNGY3YmNiL3RhYmxlcmFuZ2U6Yjg3MzllYzQ1ZWZlNDlkNDk4M2JhZTMxZjM0ZjdiY2JfNC0xNS0xLTEtMzAxNDA_4887ba38-0886-4abc-9559-41333f8a462e"
      unitRef="usd">18592000</spsc:StockIssuedDuringPeriodValuePursuantToStockAwards>
    <us-gaap:StockIssuedDuringPeriodSharesEmployeeStockPurchasePlans
      contextRef="icadb613605f14558958b2da4ce68e897_D20200101-20201231"
      decimals="INF"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83Ni9mcmFnOjI2YTZmZGNiZDgwYzQyNjdiOTA4YjI1OWRjZjU4OTJkL3RhYmxlOmI4NzM5ZWM0NWVmZTQ5ZDQ5ODNiYWUzMWYzNGY3YmNiL3RhYmxlcmFuZ2U6Yjg3MzllYzQ1ZWZlNDlkNDk4M2JhZTMxZjM0ZjdiY2JfNS0xLTEtMS0zMDE0MA_18d120d3-c7cb-4fa7-bae4-05380915acda"
      unitRef="shares">61833</us-gaap:StockIssuedDuringPeriodSharesEmployeeStockPurchasePlans>
    <us-gaap:StockIssuedDuringPeriodValueEmployeeStockPurchasePlan
      contextRef="i5fedfd22c1844e8288575273058c346b_D20200101-20201231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83Ni9mcmFnOjI2YTZmZGNiZDgwYzQyNjdiOTA4YjI1OWRjZjU4OTJkL3RhYmxlOmI4NzM5ZWM0NWVmZTQ5ZDQ5ODNiYWUzMWYzNGY3YmNiL3RhYmxlcmFuZ2U6Yjg3MzllYzQ1ZWZlNDlkNDk4M2JhZTMxZjM0ZjdiY2JfNS05LTEtMS0zMDE0MA_d9d81e8a-e3d0-4785-94fd-6b70d773bbfb"
      unitRef="usd">3374000</us-gaap:StockIssuedDuringPeriodValueEmployeeStockPurchasePlan>
    <us-gaap:StockIssuedDuringPeriodValueEmployeeStockPurchasePlan
      contextRef="i4751184d7e5948509cd8893fd49fb821_D20200101-20201231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83Ni9mcmFnOjI2YTZmZGNiZDgwYzQyNjdiOTA4YjI1OWRjZjU4OTJkL3RhYmxlOmI4NzM5ZWM0NWVmZTQ5ZDQ5ODNiYWUzMWYzNGY3YmNiL3RhYmxlcmFuZ2U6Yjg3MzllYzQ1ZWZlNDlkNDk4M2JhZTMxZjM0ZjdiY2JfNS0xNS0xLTEtMzAxNDA_781a2f04-ba16-4303-93a1-db23e7fbadd0"
      unitRef="usd">3374000</us-gaap:StockIssuedDuringPeriodValueEmployeeStockPurchasePlan>
    <us-gaap:TreasuryStockSharesAcquired
      contextRef="icadb613605f14558958b2da4ce68e897_D20200101-20201231"
      decimals="INF"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83Ni9mcmFnOjI2YTZmZGNiZDgwYzQyNjdiOTA4YjI1OWRjZjU4OTJkL3RhYmxlOmI4NzM5ZWM0NWVmZTQ5ZDQ5ODNiYWUzMWYzNGY3YmNiL3RhYmxlcmFuZ2U6Yjg3MzllYzQ1ZWZlNDlkNDk4M2JhZTMxZjM0ZjdiY2JfNi0xLTEtMS0zMDE0MA_4a7fe8b5-b4f9-4d9c-a106-e5185bac560a"
      unitRef="shares">371902</us-gaap:TreasuryStockSharesAcquired>
    <us-gaap:TreasuryStockSharesAcquired
      contextRef="i8f83899cb6ef4a1fb402400c585f8ee2_D20200101-20201231"
      decimals="INF"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83Ni9mcmFnOjI2YTZmZGNiZDgwYzQyNjdiOTA4YjI1OWRjZjU4OTJkL3RhYmxlOmI4NzM5ZWM0NWVmZTQ5ZDQ5ODNiYWUzMWYzNGY3YmNiL3RhYmxlcmFuZ2U6Yjg3MzllYzQ1ZWZlNDlkNDk4M2JhZTMxZjM0ZjdiY2JfNi01LTEtMS0zMDE0MA_fe691945-6891-4e66-a01f-a88d68ad8c48"
      unitRef="shares">371902</us-gaap:TreasuryStockSharesAcquired>
    <us-gaap:TreasuryStockValueAcquiredCostMethod
      contextRef="i8f83899cb6ef4a1fb402400c585f8ee2_D20200101-20201231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83Ni9mcmFnOjI2YTZmZGNiZDgwYzQyNjdiOTA4YjI1OWRjZjU4OTJkL3RhYmxlOmI4NzM5ZWM0NWVmZTQ5ZDQ5ODNiYWUzMWYzNGY3YmNiL3RhYmxlcmFuZ2U6Yjg3MzllYzQ1ZWZlNDlkNDk4M2JhZTMxZjM0ZjdiY2JfNi03LTEtMS0zMDE0MA_7f8ab874-2863-45f3-ab7c-fc839575a46d"
      unitRef="usd">18950000</us-gaap:TreasuryStockValueAcquiredCostMethod>
    <us-gaap:TreasuryStockValueAcquiredCostMethod
      contextRef="i4751184d7e5948509cd8893fd49fb821_D20200101-20201231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83Ni9mcmFnOjI2YTZmZGNiZDgwYzQyNjdiOTA4YjI1OWRjZjU4OTJkL3RhYmxlOmI4NzM5ZWM0NWVmZTQ5ZDQ5ODNiYWUzMWYzNGY3YmNiL3RhYmxlcmFuZ2U6Yjg3MzllYzQ1ZWZlNDlkNDk4M2JhZTMxZjM0ZjdiY2JfNi0xNS0xLTEtMzAxNDA_fffd8b72-6e20-4486-8db4-82644bd53354"
      unitRef="usd">18950000</us-gaap:TreasuryStockValueAcquiredCostMethod>
    <us-gaap:NetIncomeLoss
      contextRef="i409a5f53ee614c1384a84a161a7fb458_D20200101-20201231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83Ni9mcmFnOjI2YTZmZGNiZDgwYzQyNjdiOTA4YjI1OWRjZjU4OTJkL3RhYmxlOmI4NzM5ZWM0NWVmZTQ5ZDQ5ODNiYWUzMWYzNGY3YmNiL3RhYmxlcmFuZ2U6Yjg3MzllYzQ1ZWZlNDlkNDk4M2JhZTMxZjM0ZjdiY2JfOC0xMS0xLTEtMzAxNDA_b4bac01f-a12e-4b4c-93d7-81ab3f2de022"
      unitRef="usd">45586000</us-gaap:NetIncomeLoss>
    <us-gaap:NetIncomeLoss
      contextRef="i4751184d7e5948509cd8893fd49fb821_D20200101-20201231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83Ni9mcmFnOjI2YTZmZGNiZDgwYzQyNjdiOTA4YjI1OWRjZjU4OTJkL3RhYmxlOmI4NzM5ZWM0NWVmZTQ5ZDQ5ODNiYWUzMWYzNGY3YmNiL3RhYmxlcmFuZ2U6Yjg3MzllYzQ1ZWZlNDlkNDk4M2JhZTMxZjM0ZjdiY2JfOC0xNS0xLTEtMzAxNDA_bbfa9071-c92c-450c-a14e-2279cc7af503"
      unitRef="usd">45586000</us-gaap:NetIncomeLoss>
    <us-gaap:OtherComprehensiveIncomeLossForeignCurrencyTransactionAndTranslationAdjustmentNetOfTax
      contextRef="i4a51c705cf0145b2858e53bcb3fb664a_D20200101-20201231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83Ni9mcmFnOjI2YTZmZGNiZDgwYzQyNjdiOTA4YjI1OWRjZjU4OTJkL3RhYmxlOmI4NzM5ZWM0NWVmZTQ5ZDQ5ODNiYWUzMWYzNGY3YmNiL3RhYmxlcmFuZ2U6Yjg3MzllYzQ1ZWZlNDlkNDk4M2JhZTMxZjM0ZjdiY2JfOS0xMy0xLTEtMzAxNDA_c66b8dd7-6c7f-41fc-85c0-620ae73338d5"
      unitRef="usd">1097000</us-gaap:OtherComprehensiveIncomeLossForeignCurrencyTransactionAndTranslationAdjustmentNetOfTax>
    <us-gaap:OtherComprehensiveIncomeLossForeignCurrencyTransactionAndTranslationAdjustmentNetOfTax
      contextRef="i4751184d7e5948509cd8893fd49fb821_D20200101-20201231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83Ni9mcmFnOjI2YTZmZGNiZDgwYzQyNjdiOTA4YjI1OWRjZjU4OTJkL3RhYmxlOmI4NzM5ZWM0NWVmZTQ5ZDQ5ODNiYWUzMWYzNGY3YmNiL3RhYmxlcmFuZ2U6Yjg3MzllYzQ1ZWZlNDlkNDk4M2JhZTMxZjM0ZjdiY2JfOS0xNS0xLTEtMzAxNDA_ad9e5173-bdcd-40e5-8394-9c0e7500a82e"
      unitRef="usd">1097000</us-gaap:OtherComprehensiveIncomeLossForeignCurrencyTransactionAndTranslationAdjustmentNetOfTax>
    <us-gaap:OtherComprehensiveIncomeLossAvailableForSaleSecuritiesAdjustmentNetOfTax
      contextRef="i4a51c705cf0145b2858e53bcb3fb664a_D20200101-20201231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83Ni9mcmFnOjI2YTZmZGNiZDgwYzQyNjdiOTA4YjI1OWRjZjU4OTJkL3RhYmxlOmI4NzM5ZWM0NWVmZTQ5ZDQ5ODNiYWUzMWYzNGY3YmNiL3RhYmxlcmFuZ2U6Yjg3MzllYzQ1ZWZlNDlkNDk4M2JhZTMxZjM0ZjdiY2JfMTAtMTMtMS0xLTMwMTQw_a58dba08-470f-4782-aa3b-7db56807ccff"
      unitRef="usd">-10000</us-gaap:OtherComprehensiveIncomeLossAvailableForSaleSecuritiesAdjustmentNetOfTax>
    <us-gaap:OtherComprehensiveIncomeLossAvailableForSaleSecuritiesAdjustmentNetOfTax
      contextRef="i4751184d7e5948509cd8893fd49fb821_D20200101-20201231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83Ni9mcmFnOjI2YTZmZGNiZDgwYzQyNjdiOTA4YjI1OWRjZjU4OTJkL3RhYmxlOmI4NzM5ZWM0NWVmZTQ5ZDQ5ODNiYWUzMWYzNGY3YmNiL3RhYmxlcmFuZ2U6Yjg3MzllYzQ1ZWZlNDlkNDk4M2JhZTMxZjM0ZjdiY2JfMTAtMTUtMS0xLTMwMTQw_f92a25f0-7d1b-4b10-9543-833a1e7ab62b"
      unitRef="usd">-10000</us-gaap:OtherComprehensiveIncomeLossAvailableForSaleSecuritiesAdjustmentNetOfTax>
    <spsc:ReclassificationOfGainLossOnInvestmentsInToEarningsNetOfTax
      contextRef="i4a51c705cf0145b2858e53bcb3fb664a_D20200101-20201231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83Ni9mcmFnOjI2YTZmZGNiZDgwYzQyNjdiOTA4YjI1OWRjZjU4OTJkL3RhYmxlOmI4NzM5ZWM0NWVmZTQ5ZDQ5ODNiYWUzMWYzNGY3YmNiL3RhYmxlcmFuZ2U6Yjg3MzllYzQ1ZWZlNDlkNDk4M2JhZTMxZjM0ZjdiY2JfMTEtMTMtMS0xLTMwMTQw_4759b59e-d9c5-4837-83a6-a2cba093329f"
      unitRef="usd">-157000</spsc:ReclassificationOfGainLossOnInvestmentsInToEarningsNetOfTax>
    <spsc:ReclassificationOfGainLossOnInvestmentsInToEarningsNetOfTax
      contextRef="i4751184d7e5948509cd8893fd49fb821_D20200101-20201231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83Ni9mcmFnOjI2YTZmZGNiZDgwYzQyNjdiOTA4YjI1OWRjZjU4OTJkL3RhYmxlOmI4NzM5ZWM0NWVmZTQ5ZDQ5ODNiYWUzMWYzNGY3YmNiL3RhYmxlcmFuZ2U6Yjg3MzllYzQ1ZWZlNDlkNDk4M2JhZTMxZjM0ZjdiY2JfMTEtMTUtMS0xLTMwMTQw_f1ef5fdf-bcb9-4926-93fb-4e05968d3dd3"
      unitRef="usd">-157000</spsc:ReclassificationOfGainLossOnInvestmentsInToEarningsNetOfTax>
    <us-gaap:StockholdersEquity
      contextRef="i7b7f3bd982e646e1b0de13517459040c_I20191231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83Ni9mcmFnOjI2YTZmZGNiZDgwYzQyNjdiOTA4YjI1OWRjZjU4OTJkL3RhYmxlOmI4NzM5ZWM0NWVmZTQ5ZDQ5ODNiYWUzMWYzNGY3YmNiL3RhYmxlcmFuZ2U6Yjg3MzllYzQ1ZWZlNDlkNDk4M2JhZTMxZjM0ZjdiY2JfMTItMTEtMS0xLTMwMTQw_1080665d-eea6-44ca-b33c-327b833e688d"
      unitRef="usd">-1069000</us-gaap:StockholdersEquity>
    <us-gaap:StockholdersEquity
      contextRef="i231dd878fe454b65ba1516ed9f0f775b_I20191231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83Ni9mcmFnOjI2YTZmZGNiZDgwYzQyNjdiOTA4YjI1OWRjZjU4OTJkL3RhYmxlOmI4NzM5ZWM0NWVmZTQ5ZDQ5ODNiYWUzMWYzNGY3YmNiL3RhYmxlcmFuZ2U6Yjg3MzllYzQ1ZWZlNDlkNDk4M2JhZTMxZjM0ZjdiY2JfMTItMTUtMS0xLTMwMTQw_ca697210-046b-4daf-9f8a-735b7062f898"
      unitRef="usd">-1069000</us-gaap:StockholdersEquity>
    <us-gaap:CommonStockSharesOutstanding
      contextRef="i2b1c715af20a4a82a25faa6852e8ae9f_I20201231"
      decimals="INF"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83Ni9mcmFnOjI2YTZmZGNiZDgwYzQyNjdiOTA4YjI1OWRjZjU4OTJkL3RhYmxlOmI4NzM5ZWM0NWVmZTQ5ZDQ5ODNiYWUzMWYzNGY3YmNiL3RhYmxlcmFuZ2U6Yjg3MzllYzQ1ZWZlNDlkNDk4M2JhZTMxZjM0ZjdiY2JfMTMtMS0xLTEtMzAxNDA_8b0adf6e-5a0e-4205-8ed9-c05b26c1b36e"
      unitRef="shares">35487217</us-gaap:CommonStockSharesOutstanding>
    <us-gaap:StockholdersEquity
      contextRef="i2b1c715af20a4a82a25faa6852e8ae9f_I20201231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83Ni9mcmFnOjI2YTZmZGNiZDgwYzQyNjdiOTA4YjI1OWRjZjU4OTJkL3RhYmxlOmI4NzM5ZWM0NWVmZTQ5ZDQ5ODNiYWUzMWYzNGY3YmNiL3RhYmxlcmFuZ2U6Yjg3MzllYzQ1ZWZlNDlkNDk4M2JhZTMxZjM0ZjdiY2JfMTMtMy0xLTEtMzAxNDA_f0c995d6-d247-46fc-b46e-8e349fc8a2a1"
      unitRef="usd">37000</us-gaap:StockholdersEquity>
    <us-gaap:TreasuryStockCommonShares
      contextRef="ib6d596086dec4dbc81675ef228af0d6b_I20201231"
      decimals="INF"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83Ni9mcmFnOjI2YTZmZGNiZDgwYzQyNjdiOTA4YjI1OWRjZjU4OTJkL3RhYmxlOmI4NzM5ZWM0NWVmZTQ5ZDQ5ODNiYWUzMWYzNGY3YmNiL3RhYmxlcmFuZ2U6Yjg3MzllYzQ1ZWZlNDlkNDk4M2JhZTMxZjM0ZjdiY2JfMTMtNS0xLTEtMzAxNDA_25b5a6a3-7cf1-4c79-87de-a9c471645c4d"
      unitRef="shares">1613250</us-gaap:TreasuryStockCommonShares>
    <us-gaap:StockholdersEquity
      contextRef="ib6d596086dec4dbc81675ef228af0d6b_I20201231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83Ni9mcmFnOjI2YTZmZGNiZDgwYzQyNjdiOTA4YjI1OWRjZjU4OTJkL3RhYmxlOmI4NzM5ZWM0NWVmZTQ5ZDQ5ODNiYWUzMWYzNGY3YmNiL3RhYmxlcmFuZ2U6Yjg3MzllYzQ1ZWZlNDlkNDk4M2JhZTMxZjM0ZjdiY2JfMTMtNy0xLTEtMzAxNDA_c1e7c04d-08de-4511-adba-34e977f5bfa0"
      unitRef="usd">-65247000</us-gaap:StockholdersEquity>
    <us-gaap:StockholdersEquity
      contextRef="ia028190683f04293ba664c62114f438d_I20201231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83Ni9mcmFnOjI2YTZmZGNiZDgwYzQyNjdiOTA4YjI1OWRjZjU4OTJkL3RhYmxlOmI4NzM5ZWM0NWVmZTQ5ZDQ5ODNiYWUzMWYzNGY3YmNiL3RhYmxlcmFuZ2U6Yjg3MzllYzQ1ZWZlNDlkNDk4M2JhZTMxZjM0ZjdiY2JfMTMtOS0xLTEtMzAxNDA_a468dea0-ff8c-44b2-8c53-08a48eabeae0"
      unitRef="usd">393462000</us-gaap:StockholdersEquity>
    <us-gaap:StockholdersEquity
      contextRef="ie66762cea639479fb95be6d04ab5e129_I20201231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83Ni9mcmFnOjI2YTZmZGNiZDgwYzQyNjdiOTA4YjI1OWRjZjU4OTJkL3RhYmxlOmI4NzM5ZWM0NWVmZTQ5ZDQ5ODNiYWUzMWYzNGY3YmNiL3RhYmxlcmFuZ2U6Yjg3MzllYzQ1ZWZlNDlkNDk4M2JhZTMxZjM0ZjdiY2JfMTMtMTEtMS0xLTMwMTQw_72d65970-eb2b-45a0-a11b-d05795083134"
      unitRef="usd">93490000</us-gaap:StockholdersEquity>
    <us-gaap:StockholdersEquity
      contextRef="i01543a1f934d48929661fd5aa9b977dd_I20201231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83Ni9mcmFnOjI2YTZmZGNiZDgwYzQyNjdiOTA4YjI1OWRjZjU4OTJkL3RhYmxlOmI4NzM5ZWM0NWVmZTQ5ZDQ5ODNiYWUzMWYzNGY3YmNiL3RhYmxlcmFuZ2U6Yjg3MzllYzQ1ZWZlNDlkNDk4M2JhZTMxZjM0ZjdiY2JfMTMtMTMtMS0xLTMwMTQw_50f1368a-4f40-43a2-b321-0867dffb9e81"
      unitRef="usd">-1021000</us-gaap:StockholdersEquity>
    <us-gaap:StockholdersEquity
      contextRef="i3ead637906154a2bab043152edc06771_I20201231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83Ni9mcmFnOjI2YTZmZGNiZDgwYzQyNjdiOTA4YjI1OWRjZjU4OTJkL3RhYmxlOmI4NzM5ZWM0NWVmZTQ5ZDQ5ODNiYWUzMWYzNGY3YmNiL3RhYmxlcmFuZ2U6Yjg3MzllYzQ1ZWZlNDlkNDk4M2JhZTMxZjM0ZjdiY2JfMTMtMTUtMS0xLTMwMTQw_03209e03-c282-4124-91e6-0dc91a44930a"
      unitRef="usd">420721000</us-gaap:StockholdersEquity>
    <us-gaap:AdjustmentsToAdditionalPaidInCapitalSharebasedCompensationRequisiteServicePeriodRecognitionValue
      contextRef="i9fbe11ac357a46d1949e2e1f6f69244b_D20210101-20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83Ni9mcmFnOjI2YTZmZGNiZDgwYzQyNjdiOTA4YjI1OWRjZjU4OTJkL3RhYmxlOmI4NzM5ZWM0NWVmZTQ5ZDQ5ODNiYWUzMWYzNGY3YmNiL3RhYmxlcmFuZ2U6Yjg3MzllYzQ1ZWZlNDlkNDk4M2JhZTMxZjM0ZjdiY2JfMTQtOS0xLTEtMzAxNDA_8aac0820-13db-42e8-be0a-959777b86543"
      unitRef="usd">25686000</us-gaap:AdjustmentsToAdditionalPaidInCapitalSharebasedCompensationRequisiteServicePeriodRecognitionValue>
    <us-gaap:AdjustmentsToAdditionalPaidInCapitalSharebasedCompensationRequisiteServicePeriodRecognitionValue
      contextRef="ie07f2822175c48edbb8d5559ceb82e6f_D20210101-20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83Ni9mcmFnOjI2YTZmZGNiZDgwYzQyNjdiOTA4YjI1OWRjZjU4OTJkL3RhYmxlOmI4NzM5ZWM0NWVmZTQ5ZDQ5ODNiYWUzMWYzNGY3YmNiL3RhYmxlcmFuZ2U6Yjg3MzllYzQ1ZWZlNDlkNDk4M2JhZTMxZjM0ZjdiY2JfMTQtMTUtMS0xLTMwMTQw_41b41613-0c53-4b62-b3f6-16fd77bd92e4"
      unitRef="usd">25686000</us-gaap:AdjustmentsToAdditionalPaidInCapitalSharebasedCompensationRequisiteServicePeriodRecognitionValue>
    <spsc:StockIssuedDuringPeriodSharesPursuantToStockAwards
      contextRef="ib518a7e0364f40418060f776f36842db_D20210101-20211231"
      decimals="INF"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83Ni9mcmFnOjI2YTZmZGNiZDgwYzQyNjdiOTA4YjI1OWRjZjU4OTJkL3RhYmxlOmI4NzM5ZWM0NWVmZTQ5ZDQ5ODNiYWUzMWYzNGY3YmNiL3RhYmxlcmFuZ2U6Yjg3MzllYzQ1ZWZlNDlkNDk4M2JhZTMxZjM0ZjdiY2JfMTUtMS0xLTEtMzAxNDA_7b44702b-93f4-4fd9-94cf-e8550a52e486"
      unitRef="shares">642417</spsc:StockIssuedDuringPeriodSharesPursuantToStockAwards>
    <spsc:StockIssuedDuringPeriodValuePursuantToStockAwards
      contextRef="ib518a7e0364f40418060f776f36842db_D20210101-20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83Ni9mcmFnOjI2YTZmZGNiZDgwYzQyNjdiOTA4YjI1OWRjZjU4OTJkL3RhYmxlOmI4NzM5ZWM0NWVmZTQ5ZDQ5ODNiYWUzMWYzNGY3YmNiL3RhYmxlcmFuZ2U6Yjg3MzllYzQ1ZWZlNDlkNDk4M2JhZTMxZjM0ZjdiY2JfMTUtMy0xLTEtMzAxNDA_7a13b973-d104-4f52-a1bd-1bf0da7529c3"
      unitRef="usd">1000</spsc:StockIssuedDuringPeriodValuePursuantToStockAwards>
    <spsc:StockIssuedDuringPeriodValuePursuantToStockAwards
      contextRef="i9fbe11ac357a46d1949e2e1f6f69244b_D20210101-20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83Ni9mcmFnOjI2YTZmZGNiZDgwYzQyNjdiOTA4YjI1OWRjZjU4OTJkL3RhYmxlOmI4NzM5ZWM0NWVmZTQ5ZDQ5ODNiYWUzMWYzNGY3YmNiL3RhYmxlcmFuZ2U6Yjg3MzllYzQ1ZWZlNDlkNDk4M2JhZTMxZjM0ZjdiY2JfMTUtOS0xLTEtMzAxNDA_d0f71ea8-e2d1-4ff1-9afd-e1f4ab3be048"
      unitRef="usd">9373000</spsc:StockIssuedDuringPeriodValuePursuantToStockAwards>
    <spsc:StockIssuedDuringPeriodValuePursuantToStockAwards
      contextRef="ie07f2822175c48edbb8d5559ceb82e6f_D20210101-20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83Ni9mcmFnOjI2YTZmZGNiZDgwYzQyNjdiOTA4YjI1OWRjZjU4OTJkL3RhYmxlOmI4NzM5ZWM0NWVmZTQ5ZDQ5ODNiYWUzMWYzNGY3YmNiL3RhYmxlcmFuZ2U6Yjg3MzllYzQ1ZWZlNDlkNDk4M2JhZTMxZjM0ZjdiY2JfMTUtMTUtMS0xLTMwMTQw_5ae4bcf9-f742-4cb3-b6cd-addb762b7b22"
      unitRef="usd">9374000</spsc:StockIssuedDuringPeriodValuePursuantToStockAwards>
    <us-gaap:StockIssuedDuringPeriodSharesEmployeeStockPurchasePlans
      contextRef="ib518a7e0364f40418060f776f36842db_D20210101-20211231"
      decimals="INF"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83Ni9mcmFnOjI2YTZmZGNiZDgwYzQyNjdiOTA4YjI1OWRjZjU4OTJkL3RhYmxlOmI4NzM5ZWM0NWVmZTQ5ZDQ5ODNiYWUzMWYzNGY3YmNiL3RhYmxlcmFuZ2U6Yjg3MzllYzQ1ZWZlNDlkNDk4M2JhZTMxZjM0ZjdiY2JfMTYtMS0xLTEtMzAxNDA_b7318058-31e8-4246-8fb6-e3452b8b7819"
      unitRef="shares">55726</us-gaap:StockIssuedDuringPeriodSharesEmployeeStockPurchasePlans>
    <us-gaap:StockIssuedDuringPeriodValueEmployeeStockPurchasePlan
      contextRef="i9fbe11ac357a46d1949e2e1f6f69244b_D20210101-20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83Ni9mcmFnOjI2YTZmZGNiZDgwYzQyNjdiOTA4YjI1OWRjZjU4OTJkL3RhYmxlOmI4NzM5ZWM0NWVmZTQ5ZDQ5ODNiYWUzMWYzNGY3YmNiL3RhYmxlcmFuZ2U6Yjg3MzllYzQ1ZWZlNDlkNDk4M2JhZTMxZjM0ZjdiY2JfMTYtOS0xLTEtMzAxNDA_1eb5fd86-5b3a-4c2a-8cc9-16c731b4e9db"
      unitRef="usd">4737000</us-gaap:StockIssuedDuringPeriodValueEmployeeStockPurchasePlan>
    <us-gaap:StockIssuedDuringPeriodValueEmployeeStockPurchasePlan
      contextRef="ie07f2822175c48edbb8d5559ceb82e6f_D20210101-20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83Ni9mcmFnOjI2YTZmZGNiZDgwYzQyNjdiOTA4YjI1OWRjZjU4OTJkL3RhYmxlOmI4NzM5ZWM0NWVmZTQ5ZDQ5ODNiYWUzMWYzNGY3YmNiL3RhYmxlcmFuZ2U6Yjg3MzllYzQ1ZWZlNDlkNDk4M2JhZTMxZjM0ZjdiY2JfMTYtMTUtMS0xLTMwMTQw_97315632-8d6f-49a3-bcf4-b57142dffbd1"
      unitRef="usd">4737000</us-gaap:StockIssuedDuringPeriodValueEmployeeStockPurchasePlan>
    <us-gaap:TreasuryStockSharesAcquired
      contextRef="ib518a7e0364f40418060f776f36842db_D20210101-20211231"
      decimals="INF"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83Ni9mcmFnOjI2YTZmZGNiZDgwYzQyNjdiOTA4YjI1OWRjZjU4OTJkL3RhYmxlOmI4NzM5ZWM0NWVmZTQ5ZDQ5ODNiYWUzMWYzNGY3YmNiL3RhYmxlcmFuZ2U6Yjg3MzllYzQ1ZWZlNDlkNDk4M2JhZTMxZjM0ZjdiY2JfMTctMS0xLTEtMzAxNDA_7bc7bd95-f542-430e-963a-594f4fc9503d"
      unitRef="shares">176103</us-gaap:TreasuryStockSharesAcquired>
    <us-gaap:TreasuryStockSharesAcquired
      contextRef="i15d2786853d94f4ba1288bfdc26e3969_D20210101-20211231"
      decimals="INF"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83Ni9mcmFnOjI2YTZmZGNiZDgwYzQyNjdiOTA4YjI1OWRjZjU4OTJkL3RhYmxlOmI4NzM5ZWM0NWVmZTQ5ZDQ5ODNiYWUzMWYzNGY3YmNiL3RhYmxlcmFuZ2U6Yjg3MzllYzQ1ZWZlNDlkNDk4M2JhZTMxZjM0ZjdiY2JfMTctNS0xLTEtMzAxNDA_22717deb-d295-418a-9e2e-5130c8708210"
      unitRef="shares">176103</us-gaap:TreasuryStockSharesAcquired>
    <us-gaap:TreasuryStockValueAcquiredCostMethod
      contextRef="i15d2786853d94f4ba1288bfdc26e3969_D20210101-20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83Ni9mcmFnOjI2YTZmZGNiZDgwYzQyNjdiOTA4YjI1OWRjZjU4OTJkL3RhYmxlOmI4NzM5ZWM0NWVmZTQ5ZDQ5ODNiYWUzMWYzNGY3YmNiL3RhYmxlcmFuZ2U6Yjg3MzllYzQ1ZWZlNDlkNDk4M2JhZTMxZjM0ZjdiY2JfMTctNy0xLTEtMzAxNDA_8003a6b6-9b52-4ad5-889f-bc3773bc14fb"
      unitRef="usd">20430000</us-gaap:TreasuryStockValueAcquiredCostMethod>
    <us-gaap:TreasuryStockValueAcquiredCostMethod
      contextRef="ie07f2822175c48edbb8d5559ceb82e6f_D20210101-20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83Ni9mcmFnOjI2YTZmZGNiZDgwYzQyNjdiOTA4YjI1OWRjZjU4OTJkL3RhYmxlOmI4NzM5ZWM0NWVmZTQ5ZDQ5ODNiYWUzMWYzNGY3YmNiL3RhYmxlcmFuZ2U6Yjg3MzllYzQ1ZWZlNDlkNDk4M2JhZTMxZjM0ZjdiY2JfMTctMTUtMS0xLTMwMTQw_0494e296-b114-41af-a83f-74666a396d70"
      unitRef="usd">20430000</us-gaap:TreasuryStockValueAcquiredCostMethod>
    <us-gaap:NetIncomeLoss
      contextRef="i0b550c6c6f924c9e81c52b16a31c5acb_D20210101-20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83Ni9mcmFnOjI2YTZmZGNiZDgwYzQyNjdiOTA4YjI1OWRjZjU4OTJkL3RhYmxlOmI4NzM5ZWM0NWVmZTQ5ZDQ5ODNiYWUzMWYzNGY3YmNiL3RhYmxlcmFuZ2U6Yjg3MzllYzQ1ZWZlNDlkNDk4M2JhZTMxZjM0ZjdiY2JfMTgtMTEtMS0xLTMwMTQw_87745fd6-047f-4964-bac3-182bb2e0d9bb"
      unitRef="usd">44597000</us-gaap:NetIncomeLoss>
    <us-gaap:NetIncomeLoss
      contextRef="ie07f2822175c48edbb8d5559ceb82e6f_D20210101-20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83Ni9mcmFnOjI2YTZmZGNiZDgwYzQyNjdiOTA4YjI1OWRjZjU4OTJkL3RhYmxlOmI4NzM5ZWM0NWVmZTQ5ZDQ5ODNiYWUzMWYzNGY3YmNiL3RhYmxlcmFuZ2U6Yjg3MzllYzQ1ZWZlNDlkNDk4M2JhZTMxZjM0ZjdiY2JfMTgtMTUtMS0xLTMwMTQw_9072f883-3603-45df-8ef4-dcb5cfdc4ca8"
      unitRef="usd">44597000</us-gaap:NetIncomeLoss>
    <us-gaap:OtherComprehensiveIncomeLossForeignCurrencyTransactionAndTranslationAdjustmentNetOfTax
      contextRef="ic1c0c3ebe0be4293887fbf9bbec15db7_D20210101-20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83Ni9mcmFnOjI2YTZmZGNiZDgwYzQyNjdiOTA4YjI1OWRjZjU4OTJkL3RhYmxlOmI4NzM5ZWM0NWVmZTQ5ZDQ5ODNiYWUzMWYzNGY3YmNiL3RhYmxlcmFuZ2U6Yjg3MzllYzQ1ZWZlNDlkNDk4M2JhZTMxZjM0ZjdiY2JfMTktMTMtMS0xLTMwMTQw_aab2872f-a8f2-4381-963e-c5794ef81d6b"
      unitRef="usd">-514000</us-gaap:OtherComprehensiveIncomeLossForeignCurrencyTransactionAndTranslationAdjustmentNetOfTax>
    <us-gaap:OtherComprehensiveIncomeLossForeignCurrencyTransactionAndTranslationAdjustmentNetOfTax
      contextRef="ie07f2822175c48edbb8d5559ceb82e6f_D20210101-20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83Ni9mcmFnOjI2YTZmZGNiZDgwYzQyNjdiOTA4YjI1OWRjZjU4OTJkL3RhYmxlOmI4NzM5ZWM0NWVmZTQ5ZDQ5ODNiYWUzMWYzNGY3YmNiL3RhYmxlcmFuZ2U6Yjg3MzllYzQ1ZWZlNDlkNDk4M2JhZTMxZjM0ZjdiY2JfMTktMTUtMS0xLTMwMTQw_002acd1b-197c-44a8-b0e2-c8f129914fce"
      unitRef="usd">-514000</us-gaap:OtherComprehensiveIncomeLossForeignCurrencyTransactionAndTranslationAdjustmentNetOfTax>
    <us-gaap:OtherComprehensiveIncomeLossAvailableForSaleSecuritiesAdjustmentNetOfTax
      contextRef="ic1c0c3ebe0be4293887fbf9bbec15db7_D20210101-20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83Ni9mcmFnOjI2YTZmZGNiZDgwYzQyNjdiOTA4YjI1OWRjZjU4OTJkL3RhYmxlOmI4NzM5ZWM0NWVmZTQ5ZDQ5ODNiYWUzMWYzNGY3YmNiL3RhYmxlcmFuZ2U6Yjg3MzllYzQ1ZWZlNDlkNDk4M2JhZTMxZjM0ZjdiY2JfMjAtMTMtMS0xLTMwMTQw_ebd6bf75-0ab8-4ecd-a665-600db64751ba"
      unitRef="usd">-102000</us-gaap:OtherComprehensiveIncomeLossAvailableForSaleSecuritiesAdjustmentNetOfTax>
    <us-gaap:OtherComprehensiveIncomeLossAvailableForSaleSecuritiesAdjustmentNetOfTax
      contextRef="ie07f2822175c48edbb8d5559ceb82e6f_D20210101-20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83Ni9mcmFnOjI2YTZmZGNiZDgwYzQyNjdiOTA4YjI1OWRjZjU4OTJkL3RhYmxlOmI4NzM5ZWM0NWVmZTQ5ZDQ5ODNiYWUzMWYzNGY3YmNiL3RhYmxlcmFuZ2U6Yjg3MzllYzQ1ZWZlNDlkNDk4M2JhZTMxZjM0ZjdiY2JfMjAtMTUtMS0xLTMwMTQw_bab40403-c3ee-4143-af3b-759db956e4bd"
      unitRef="usd">-102000</us-gaap:OtherComprehensiveIncomeLossAvailableForSaleSecuritiesAdjustmentNetOfTax>
    <spsc:ReclassificationOfGainLossOnInvestmentsInToEarningsNetOfTax
      contextRef="ic1c0c3ebe0be4293887fbf9bbec15db7_D20210101-20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83Ni9mcmFnOjI2YTZmZGNiZDgwYzQyNjdiOTA4YjI1OWRjZjU4OTJkL3RhYmxlOmI4NzM5ZWM0NWVmZTQ5ZDQ5ODNiYWUzMWYzNGY3YmNiL3RhYmxlcmFuZ2U6Yjg3MzllYzQ1ZWZlNDlkNDk4M2JhZTMxZjM0ZjdiY2JfMjEtMTMtMS0xLTMwMTQw_8b180e25-e0ee-4a8e-a9ce-e127af015883"
      unitRef="usd">190000</spsc:ReclassificationOfGainLossOnInvestmentsInToEarningsNetOfTax>
    <spsc:ReclassificationOfGainLossOnInvestmentsInToEarningsNetOfTax
      contextRef="ie07f2822175c48edbb8d5559ceb82e6f_D20210101-20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83Ni9mcmFnOjI2YTZmZGNiZDgwYzQyNjdiOTA4YjI1OWRjZjU4OTJkL3RhYmxlOmI4NzM5ZWM0NWVmZTQ5ZDQ5ODNiYWUzMWYzNGY3YmNiL3RhYmxlcmFuZ2U6Yjg3MzllYzQ1ZWZlNDlkNDk4M2JhZTMxZjM0ZjdiY2JfMjEtMTUtMS0xLTMwMTQw_c5dabd14-f423-42da-9ced-d69bd4933762"
      unitRef="usd">190000</spsc:ReclassificationOfGainLossOnInvestmentsInToEarningsNetOfTax>
    <us-gaap:CommonStockSharesOutstanding
      contextRef="i58a2c0464fbe4f0281abc01621932200_I20211231"
      decimals="INF"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83Ni9mcmFnOjI2YTZmZGNiZDgwYzQyNjdiOTA4YjI1OWRjZjU4OTJkL3RhYmxlOmI4NzM5ZWM0NWVmZTQ5ZDQ5ODNiYWUzMWYzNGY3YmNiL3RhYmxlcmFuZ2U6Yjg3MzllYzQ1ZWZlNDlkNDk4M2JhZTMxZjM0ZjdiY2JfMjMtMS0xLTEtMzAxNDA_26472cdd-b169-4080-8260-3bebc84486b3"
      unitRef="shares">36009257</us-gaap:CommonStockSharesOutstanding>
    <us-gaap:StockholdersEquity
      contextRef="i58a2c0464fbe4f0281abc01621932200_I20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83Ni9mcmFnOjI2YTZmZGNiZDgwYzQyNjdiOTA4YjI1OWRjZjU4OTJkL3RhYmxlOmI4NzM5ZWM0NWVmZTQ5ZDQ5ODNiYWUzMWYzNGY3YmNiL3RhYmxlcmFuZ2U6Yjg3MzllYzQ1ZWZlNDlkNDk4M2JhZTMxZjM0ZjdiY2JfMjMtMy0xLTEtMzAxNDA_15d424a2-b960-4686-846c-e5096d5e64ec"
      unitRef="usd">38000</us-gaap:StockholdersEquity>
    <us-gaap:TreasuryStockCommonShares
      contextRef="i8f022975d343482ca526a176397071a8_I20211231"
      decimals="INF"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83Ni9mcmFnOjI2YTZmZGNiZDgwYzQyNjdiOTA4YjI1OWRjZjU4OTJkL3RhYmxlOmI4NzM5ZWM0NWVmZTQ5ZDQ5ODNiYWUzMWYzNGY3YmNiL3RhYmxlcmFuZ2U6Yjg3MzllYzQ1ZWZlNDlkNDk4M2JhZTMxZjM0ZjdiY2JfMjMtNS0xLTEtMzAxNDA_4c1afb48-9091-47a0-9789-2480ddc6cf91"
      unitRef="shares">1789353</us-gaap:TreasuryStockCommonShares>
    <us-gaap:StockholdersEquity
      contextRef="i8f022975d343482ca526a176397071a8_I20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83Ni9mcmFnOjI2YTZmZGNiZDgwYzQyNjdiOTA4YjI1OWRjZjU4OTJkL3RhYmxlOmI4NzM5ZWM0NWVmZTQ5ZDQ5ODNiYWUzMWYzNGY3YmNiL3RhYmxlcmFuZ2U6Yjg3MzllYzQ1ZWZlNDlkNDk4M2JhZTMxZjM0ZjdiY2JfMjMtNy0xLTEtMzAxNDA_01802384-64eb-4c64-848a-455199dd1915"
      unitRef="usd">-85677000</us-gaap:StockholdersEquity>
    <us-gaap:StockholdersEquity
      contextRef="ibccc4602e57c43c3a07820a4544404f1_I20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83Ni9mcmFnOjI2YTZmZGNiZDgwYzQyNjdiOTA4YjI1OWRjZjU4OTJkL3RhYmxlOmI4NzM5ZWM0NWVmZTQ5ZDQ5ODNiYWUzMWYzNGY3YmNiL3RhYmxlcmFuZ2U6Yjg3MzllYzQ1ZWZlNDlkNDk4M2JhZTMxZjM0ZjdiY2JfMjMtOS0xLTEtMzAxNDA_98f4ac98-8318-4e1d-851d-de3ad1c2a376"
      unitRef="usd">433258000</us-gaap:StockholdersEquity>
    <us-gaap:StockholdersEquity
      contextRef="i0d67760894dc47f78a0146b5ade16468_I20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83Ni9mcmFnOjI2YTZmZGNiZDgwYzQyNjdiOTA4YjI1OWRjZjU4OTJkL3RhYmxlOmI4NzM5ZWM0NWVmZTQ5ZDQ5ODNiYWUzMWYzNGY3YmNiL3RhYmxlcmFuZ2U6Yjg3MzllYzQ1ZWZlNDlkNDk4M2JhZTMxZjM0ZjdiY2JfMjMtMTEtMS0xLTMwMTQw_a23f099b-9415-4d2e-92ab-096200511aad"
      unitRef="usd">138087000</us-gaap:StockholdersEquity>
    <us-gaap:StockholdersEquity
      contextRef="i903700d1636747d6aba38df00068e04d_I20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83Ni9mcmFnOjI2YTZmZGNiZDgwYzQyNjdiOTA4YjI1OWRjZjU4OTJkL3RhYmxlOmI4NzM5ZWM0NWVmZTQ5ZDQ5ODNiYWUzMWYzNGY3YmNiL3RhYmxlcmFuZ2U6Yjg3MzllYzQ1ZWZlNDlkNDk4M2JhZTMxZjM0ZjdiY2JfMjMtMTMtMS0xLTMwMTQw_6a05b3c6-f6a0-4e8b-bb2f-46fa9658b55a"
      unitRef="usd">-1447000</us-gaap:StockholdersEquity>
    <us-gaap:StockholdersEquity
      contextRef="i62ba0be1fd094d818a1f7d0d5504d1e2_I20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83Ni9mcmFnOjI2YTZmZGNiZDgwYzQyNjdiOTA4YjI1OWRjZjU4OTJkL3RhYmxlOmI4NzM5ZWM0NWVmZTQ5ZDQ5ODNiYWUzMWYzNGY3YmNiL3RhYmxlcmFuZ2U6Yjg3MzllYzQ1ZWZlNDlkNDk4M2JhZTMxZjM0ZjdiY2JfMjMtMTUtMS0xLTMwMTQw_c083fd52-916a-4cf1-b32e-ee581e564676"
      unitRef="usd">484259000</us-gaap:StockholdersEquity>
    <us-gaap:AdjustmentsToAdditionalPaidInCapitalSharebasedCompensationRequisiteServicePeriodRecognitionValue
      contextRef="i4495795978324e00a5897641e4a18c6c_D20220101-20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83Ni9mcmFnOjI2YTZmZGNiZDgwYzQyNjdiOTA4YjI1OWRjZjU4OTJkL3RhYmxlOmI4NzM5ZWM0NWVmZTQ5ZDQ5ODNiYWUzMWYzNGY3YmNiL3RhYmxlcmFuZ2U6Yjg3MzllYzQ1ZWZlNDlkNDk4M2JhZTMxZjM0ZjdiY2JfMjQtOS0xLTEtMzAxNDA_898c9128-2a88-432d-9a03-f9561da79fcd"
      unitRef="usd">31275000</us-gaap:AdjustmentsToAdditionalPaidInCapitalSharebasedCompensationRequisiteServicePeriodRecognitionValue>
    <us-gaap:AdjustmentsToAdditionalPaidInCapitalSharebasedCompensationRequisiteServicePeriodRecognitionValue
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83Ni9mcmFnOjI2YTZmZGNiZDgwYzQyNjdiOTA4YjI1OWRjZjU4OTJkL3RhYmxlOmI4NzM5ZWM0NWVmZTQ5ZDQ5ODNiYWUzMWYzNGY3YmNiL3RhYmxlcmFuZ2U6Yjg3MzllYzQ1ZWZlNDlkNDk4M2JhZTMxZjM0ZjdiY2JfMjQtMTUtMS0xLTMwMTQw_18f47756-85fe-4744-ae34-d56eb254e0a5"
      unitRef="usd">31275000</us-gaap:AdjustmentsToAdditionalPaidInCapitalSharebasedCompensationRequisiteServicePeriodRecognitionValue>
    <spsc:StockIssuedDuringPeriodSharesPursuantToStockAwards
      contextRef="i9ffba95c94d84178b9a75c1d2dfbe90f_D20220101-20221231"
      decimals="INF"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83Ni9mcmFnOjI2YTZmZGNiZDgwYzQyNjdiOTA4YjI1OWRjZjU4OTJkL3RhYmxlOmI4NzM5ZWM0NWVmZTQ5ZDQ5ODNiYWUzMWYzNGY3YmNiL3RhYmxlcmFuZ2U6Yjg3MzllYzQ1ZWZlNDlkNDk4M2JhZTMxZjM0ZjdiY2JfMjUtMS0xLTEtMzAxNDA_542bef7d-62dd-4e6a-a94d-8ae7cae814e4"
      unitRef="shares">440427</spsc:StockIssuedDuringPeriodSharesPursuantToStockAwards>
    <spsc:StockIssuedDuringPeriodValuePursuantToStockAwards
      contextRef="i4495795978324e00a5897641e4a18c6c_D20220101-20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83Ni9mcmFnOjI2YTZmZGNiZDgwYzQyNjdiOTA4YjI1OWRjZjU4OTJkL3RhYmxlOmI4NzM5ZWM0NWVmZTQ5ZDQ5ODNiYWUzMWYzNGY3YmNiL3RhYmxlcmFuZ2U6Yjg3MzllYzQ1ZWZlNDlkNDk4M2JhZTMxZjM0ZjdiY2JfMjUtOS0xLTEtMzAxNDA_ff5bbac7-a1b8-45a4-9ae3-2643885a84fe"
      unitRef="usd">4908000</spsc:StockIssuedDuringPeriodValuePursuantToStockAwards>
    <spsc:StockIssuedDuringPeriodValuePursuantToStockAwards
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83Ni9mcmFnOjI2YTZmZGNiZDgwYzQyNjdiOTA4YjI1OWRjZjU4OTJkL3RhYmxlOmI4NzM5ZWM0NWVmZTQ5ZDQ5ODNiYWUzMWYzNGY3YmNiL3RhYmxlcmFuZ2U6Yjg3MzllYzQ1ZWZlNDlkNDk4M2JhZTMxZjM0ZjdiY2JfMjUtMTUtMS0xLTMwMTQw_15c2d189-0244-4455-b56f-4ada1ceaa675"
      unitRef="usd">4908000</spsc:StockIssuedDuringPeriodValuePursuantToStockAwards>
    <us-gaap:StockIssuedDuringPeriodSharesEmployeeStockPurchasePlans
      contextRef="i9ffba95c94d84178b9a75c1d2dfbe90f_D20220101-20221231"
      decimals="INF"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83Ni9mcmFnOjI2YTZmZGNiZDgwYzQyNjdiOTA4YjI1OWRjZjU4OTJkL3RhYmxlOmI4NzM5ZWM0NWVmZTQ5ZDQ5ODNiYWUzMWYzNGY3YmNiL3RhYmxlcmFuZ2U6Yjg3MzllYzQ1ZWZlNDlkNDk4M2JhZTMxZjM0ZjdiY2JfMjYtMS0xLTEtMzAxNDA_b75a69cc-d4d7-47cc-a154-50064b561fe6"
      unitRef="shares">70107</us-gaap:StockIssuedDuringPeriodSharesEmployeeStockPurchasePlans>
    <us-gaap:StockIssuedDuringPeriodValueEmployeeStockPurchasePlan
      contextRef="i4495795978324e00a5897641e4a18c6c_D20220101-20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83Ni9mcmFnOjI2YTZmZGNiZDgwYzQyNjdiOTA4YjI1OWRjZjU4OTJkL3RhYmxlOmI4NzM5ZWM0NWVmZTQ5ZDQ5ODNiYWUzMWYzNGY3YmNiL3RhYmxlcmFuZ2U6Yjg3MzllYzQ1ZWZlNDlkNDk4M2JhZTMxZjM0ZjdiY2JfMjYtOS0xLTEtMzAxNDA_6cce4e43-7e0b-456c-b912-7756405d75f4"
      unitRef="usd">6676000</us-gaap:StockIssuedDuringPeriodValueEmployeeStockPurchasePlan>
    <us-gaap:StockIssuedDuringPeriodValueEmployeeStockPurchasePlan
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83Ni9mcmFnOjI2YTZmZGNiZDgwYzQyNjdiOTA4YjI1OWRjZjU4OTJkL3RhYmxlOmI4NzM5ZWM0NWVmZTQ5ZDQ5ODNiYWUzMWYzNGY3YmNiL3RhYmxlcmFuZ2U6Yjg3MzllYzQ1ZWZlNDlkNDk4M2JhZTMxZjM0ZjdiY2JfMjYtMTUtMS0xLTMwMTQw_bff20332-62e1-419b-ae1b-472156534774"
      unitRef="usd">6676000</us-gaap:StockIssuedDuringPeriodValueEmployeeStockPurchasePlan>
    <us-gaap:TreasuryStockSharesAcquired
      contextRef="i9ffba95c94d84178b9a75c1d2dfbe90f_D20220101-20221231"
      decimals="INF"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83Ni9mcmFnOjI2YTZmZGNiZDgwYzQyNjdiOTA4YjI1OWRjZjU4OTJkL3RhYmxlOmI4NzM5ZWM0NWVmZTQ5ZDQ5ODNiYWUzMWYzNGY3YmNiL3RhYmxlcmFuZ2U6Yjg3MzllYzQ1ZWZlNDlkNDk4M2JhZTMxZjM0ZjdiY2JfMjctMS0xLTEtMzAxNDA_9baa5cb3-3957-4100-ae1b-2a535dc1d0ba"
      unitRef="shares">361745</us-gaap:TreasuryStockSharesAcquired>
    <us-gaap:TreasuryStockSharesAcquired
      contextRef="i3c0eb8595b204c2aa4cfcddad03e3f46_D20220101-20221231"
      decimals="INF"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83Ni9mcmFnOjI2YTZmZGNiZDgwYzQyNjdiOTA4YjI1OWRjZjU4OTJkL3RhYmxlOmI4NzM5ZWM0NWVmZTQ5ZDQ5ODNiYWUzMWYzNGY3YmNiL3RhYmxlcmFuZ2U6Yjg3MzllYzQ1ZWZlNDlkNDk4M2JhZTMxZjM0ZjdiY2JfMjctNS0xLTEtMzAxNDA_ec4fb9d2-23d1-4882-aa63-7547038a7243"
      unitRef="shares">361745</us-gaap:TreasuryStockSharesAcquired>
    <us-gaap:TreasuryStockValueAcquiredCostMethod
      contextRef="i3c0eb8595b204c2aa4cfcddad03e3f46_D20220101-20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83Ni9mcmFnOjI2YTZmZGNiZDgwYzQyNjdiOTA4YjI1OWRjZjU4OTJkL3RhYmxlOmI4NzM5ZWM0NWVmZTQ5ZDQ5ODNiYWUzMWYzNGY3YmNiL3RhYmxlcmFuZ2U6Yjg3MzllYzQ1ZWZlNDlkNDk4M2JhZTMxZjM0ZjdiY2JfMjctNy0xLTEtMzAxNDA_1f61978b-bae2-4bce-891c-88225ca7e509"
      unitRef="usd">43215000</us-gaap:TreasuryStockValueAcquiredCostMethod>
    <us-gaap:TreasuryStockValueAcquiredCostMethod
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83Ni9mcmFnOjI2YTZmZGNiZDgwYzQyNjdiOTA4YjI1OWRjZjU4OTJkL3RhYmxlOmI4NzM5ZWM0NWVmZTQ5ZDQ5ODNiYWUzMWYzNGY3YmNiL3RhYmxlcmFuZ2U6Yjg3MzllYzQ1ZWZlNDlkNDk4M2JhZTMxZjM0ZjdiY2JfMjctMTUtMS0xLTMwMTQw_cdf20b83-6b07-4101-a9f2-a7cf0c155cf7"
      unitRef="usd">43215000</us-gaap:TreasuryStockValueAcquiredCostMethod>
    <us-gaap:NetIncomeLoss
      contextRef="ib939d0c039e943a29f716bd2783b371f_D20220101-20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83Ni9mcmFnOjI2YTZmZGNiZDgwYzQyNjdiOTA4YjI1OWRjZjU4OTJkL3RhYmxlOmI4NzM5ZWM0NWVmZTQ5ZDQ5ODNiYWUzMWYzNGY3YmNiL3RhYmxlcmFuZ2U6Yjg3MzllYzQ1ZWZlNDlkNDk4M2JhZTMxZjM0ZjdiY2JfMjgtMTEtMS0xLTMwMTQw_12a87114-624c-4aca-878b-afd58c895912"
      unitRef="usd">55134000</us-gaap:NetIncomeLoss>
    <us-gaap:NetIncomeLoss
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83Ni9mcmFnOjI2YTZmZGNiZDgwYzQyNjdiOTA4YjI1OWRjZjU4OTJkL3RhYmxlOmI4NzM5ZWM0NWVmZTQ5ZDQ5ODNiYWUzMWYzNGY3YmNiL3RhYmxlcmFuZ2U6Yjg3MzllYzQ1ZWZlNDlkNDk4M2JhZTMxZjM0ZjdiY2JfMjgtMTUtMS0xLTMwMTQw_b24bca39-34d9-4bc0-953e-96d694fdd957"
      unitRef="usd">55134000</us-gaap:NetIncomeLoss>
    <us-gaap:OtherComprehensiveIncomeLossForeignCurrencyTransactionAndTranslationAdjustmentNetOfTax
      contextRef="i033bc8f6a61a4737ac09c882ae096965_D20220101-20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83Ni9mcmFnOjI2YTZmZGNiZDgwYzQyNjdiOTA4YjI1OWRjZjU4OTJkL3RhYmxlOmI4NzM5ZWM0NWVmZTQ5ZDQ5ODNiYWUzMWYzNGY3YmNiL3RhYmxlcmFuZ2U6Yjg3MzllYzQ1ZWZlNDlkNDk4M2JhZTMxZjM0ZjdiY2JfMjktMTMtMS0xLTMwMTQw_657170a3-c285-4adc-926f-489fbfa14f44"
      unitRef="usd">-2240000</us-gaap:OtherComprehensiveIncomeLossForeignCurrencyTransactionAndTranslationAdjustmentNetOfTax>
    <us-gaap:OtherComprehensiveIncomeLossForeignCurrencyTransactionAndTranslationAdjustmentNetOfTax
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83Ni9mcmFnOjI2YTZmZGNiZDgwYzQyNjdiOTA4YjI1OWRjZjU4OTJkL3RhYmxlOmI4NzM5ZWM0NWVmZTQ5ZDQ5ODNiYWUzMWYzNGY3YmNiL3RhYmxlcmFuZ2U6Yjg3MzllYzQ1ZWZlNDlkNDk4M2JhZTMxZjM0ZjdiY2JfMjktMTUtMS0xLTMwMTQw_be21335d-9d58-4656-8516-f7aa42fa9cf7"
      unitRef="usd">-2240000</us-gaap:OtherComprehensiveIncomeLossForeignCurrencyTransactionAndTranslationAdjustmentNetOfTax>
    <us-gaap:OtherComprehensiveIncomeLossAvailableForSaleSecuritiesAdjustmentNetOfTax
      contextRef="i033bc8f6a61a4737ac09c882ae096965_D20220101-20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83Ni9mcmFnOjI2YTZmZGNiZDgwYzQyNjdiOTA4YjI1OWRjZjU4OTJkL3RhYmxlOmI4NzM5ZWM0NWVmZTQ5ZDQ5ODNiYWUzMWYzNGY3YmNiL3RhYmxlcmFuZ2U6Yjg3MzllYzQ1ZWZlNDlkNDk4M2JhZTMxZjM0ZjdiY2JfMzAtMTMtMS0xLTMwMTQw_ff0ace45-bbe8-4a3e-a771-f39e09ac5f14"
      unitRef="usd">441000</us-gaap:OtherComprehensiveIncomeLossAvailableForSaleSecuritiesAdjustmentNetOfTax>
    <us-gaap:OtherComprehensiveIncomeLossAvailableForSaleSecuritiesAdjustmentNetOfTax
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83Ni9mcmFnOjI2YTZmZGNiZDgwYzQyNjdiOTA4YjI1OWRjZjU4OTJkL3RhYmxlOmI4NzM5ZWM0NWVmZTQ5ZDQ5ODNiYWUzMWYzNGY3YmNiL3RhYmxlcmFuZ2U6Yjg3MzllYzQ1ZWZlNDlkNDk4M2JhZTMxZjM0ZjdiY2JfMzAtMTUtMS0xLTMwMTQw_2f33893f-6f13-4149-ad88-6fd9fb8ea692"
      unitRef="usd">441000</us-gaap:OtherComprehensiveIncomeLossAvailableForSaleSecuritiesAdjustmentNetOfTax>
    <spsc:ReclassificationOfGainLossOnInvestmentsInToEarningsNetOfTax
      contextRef="i033bc8f6a61a4737ac09c882ae096965_D20220101-20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83Ni9mcmFnOjI2YTZmZGNiZDgwYzQyNjdiOTA4YjI1OWRjZjU4OTJkL3RhYmxlOmI4NzM5ZWM0NWVmZTQ5ZDQ5ODNiYWUzMWYzNGY3YmNiL3RhYmxlcmFuZ2U6Yjg3MzllYzQ1ZWZlNDlkNDk4M2JhZTMxZjM0ZjdiY2JfMzEtMTMtMS0xLTMwMTQw_3776f0ac-94b0-412e-bad4-753050142679"
      unitRef="usd">-165000</spsc:ReclassificationOfGainLossOnInvestmentsInToEarningsNetOfTax>
    <spsc:ReclassificationOfGainLossOnInvestmentsInToEarningsNetOfTax
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83Ni9mcmFnOjI2YTZmZGNiZDgwYzQyNjdiOTA4YjI1OWRjZjU4OTJkL3RhYmxlOmI4NzM5ZWM0NWVmZTQ5ZDQ5ODNiYWUzMWYzNGY3YmNiL3RhYmxlcmFuZ2U6Yjg3MzllYzQ1ZWZlNDlkNDk4M2JhZTMxZjM0ZjdiY2JfMzEtMTUtMS0xLTMwMTQw_e9abe5c7-7524-4553-839c-d29cb1b2ce59"
      unitRef="usd">-165000</spsc:ReclassificationOfGainLossOnInvestmentsInToEarningsNetOfTax>
    <us-gaap:CommonStockSharesOutstanding
      contextRef="id1c92335c6ab47f7bbbe749172adbece_I20221231"
      decimals="INF"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83Ni9mcmFnOjI2YTZmZGNiZDgwYzQyNjdiOTA4YjI1OWRjZjU4OTJkL3RhYmxlOmI4NzM5ZWM0NWVmZTQ5ZDQ5ODNiYWUzMWYzNGY3YmNiL3RhYmxlcmFuZ2U6Yjg3MzllYzQ1ZWZlNDlkNDk4M2JhZTMxZjM0ZjdiY2JfMzItMS0xLTEtMzAxNDA_c6b19683-2188-4d3e-bb09-7bb6fd1194bc"
      unitRef="shares">36158046</us-gaap:CommonStockSharesOutstanding>
    <us-gaap:StockholdersEquity
      contextRef="id1c92335c6ab47f7bbbe749172adbece_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83Ni9mcmFnOjI2YTZmZGNiZDgwYzQyNjdiOTA4YjI1OWRjZjU4OTJkL3RhYmxlOmI4NzM5ZWM0NWVmZTQ5ZDQ5ODNiYWUzMWYzNGY3YmNiL3RhYmxlcmFuZ2U6Yjg3MzllYzQ1ZWZlNDlkNDk4M2JhZTMxZjM0ZjdiY2JfMzItMy0xLTEtMzAxNDA_c0842325-2b34-47cf-a24a-5fd940b610be"
      unitRef="usd">38000</us-gaap:StockholdersEquity>
    <us-gaap:TreasuryStockCommonShares
      contextRef="i1d2ef0c68a994638b58d2de08612c97e_I20221231"
      decimals="INF"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83Ni9mcmFnOjI2YTZmZGNiZDgwYzQyNjdiOTA4YjI1OWRjZjU4OTJkL3RhYmxlOmI4NzM5ZWM0NWVmZTQ5ZDQ5ODNiYWUzMWYzNGY3YmNiL3RhYmxlcmFuZ2U6Yjg3MzllYzQ1ZWZlNDlkNDk4M2JhZTMxZjM0ZjdiY2JfMzItNS0xLTEtMzAxNDA_c6dc23ef-1918-41e9-9a2f-7b0eccb9a736"
      unitRef="shares">2151098</us-gaap:TreasuryStockCommonShares>
    <us-gaap:StockholdersEquity
      contextRef="i1d2ef0c68a994638b58d2de08612c97e_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83Ni9mcmFnOjI2YTZmZGNiZDgwYzQyNjdiOTA4YjI1OWRjZjU4OTJkL3RhYmxlOmI4NzM5ZWM0NWVmZTQ5ZDQ5ODNiYWUzMWYzNGY3YmNiL3RhYmxlcmFuZ2U6Yjg3MzllYzQ1ZWZlNDlkNDk4M2JhZTMxZjM0ZjdiY2JfMzItNy0xLTEtMzAxNDA_5de24d7a-337c-4890-a3bd-ae7592821ab6"
      unitRef="usd">-128892000</us-gaap:StockholdersEquity>
    <us-gaap:StockholdersEquity
      contextRef="ic96744fdf9bf44e3937b961d2e68dc70_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83Ni9mcmFnOjI2YTZmZGNiZDgwYzQyNjdiOTA4YjI1OWRjZjU4OTJkL3RhYmxlOmI4NzM5ZWM0NWVmZTQ5ZDQ5ODNiYWUzMWYzNGY3YmNiL3RhYmxlcmFuZ2U6Yjg3MzllYzQ1ZWZlNDlkNDk4M2JhZTMxZjM0ZjdiY2JfMzItOS0xLTEtMzAxNDA_0e042e96-e4a3-40b5-a928-39a6d12e4a3d"
      unitRef="usd">476117000</us-gaap:StockholdersEquity>
    <us-gaap:StockholdersEquity
      contextRef="i66a237a8b97c482fb637417ecbd21480_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83Ni9mcmFnOjI2YTZmZGNiZDgwYzQyNjdiOTA4YjI1OWRjZjU4OTJkL3RhYmxlOmI4NzM5ZWM0NWVmZTQ5ZDQ5ODNiYWUzMWYzNGY3YmNiL3RhYmxlcmFuZ2U6Yjg3MzllYzQ1ZWZlNDlkNDk4M2JhZTMxZjM0ZjdiY2JfMzItMTEtMS0xLTMwMTQw_27a49259-8d64-4dd7-a2a0-3df76e39fd3f"
      unitRef="usd">193221000</us-gaap:StockholdersEquity>
    <us-gaap:StockholdersEquity
      contextRef="id070347e01214feea4c9790d3fdb3dee_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83Ni9mcmFnOjI2YTZmZGNiZDgwYzQyNjdiOTA4YjI1OWRjZjU4OTJkL3RhYmxlOmI4NzM5ZWM0NWVmZTQ5ZDQ5ODNiYWUzMWYzNGY3YmNiL3RhYmxlcmFuZ2U6Yjg3MzllYzQ1ZWZlNDlkNDk4M2JhZTMxZjM0ZjdiY2JfMzItMTMtMS0xLTMwMTQw_a6a6c029-8a87-4743-afda-3ff480d2859f"
      unitRef="usd">-3411000</us-gaap:StockholdersEquity>
    <us-gaap:StockholdersEquity
      contextRef="ibbc2d589a09c46368d9dd3e9ea8996c6_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83Ni9mcmFnOjI2YTZmZGNiZDgwYzQyNjdiOTA4YjI1OWRjZjU4OTJkL3RhYmxlOmI4NzM5ZWM0NWVmZTQ5ZDQ5ODNiYWUzMWYzNGY3YmNiL3RhYmxlcmFuZ2U6Yjg3MzllYzQ1ZWZlNDlkNDk4M2JhZTMxZjM0ZjdiY2JfMzItMTUtMS0xLTMwMTQw_a90f0fcb-1440-4a2b-880a-0e105c240c94"
      unitRef="usd">537073000</us-gaap:StockholdersEquity>
    <us-gaap:NetIncomeLoss
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83OS9mcmFnOjVmODNkZDllNzM4ZjRiNjBhN2YwM2VkNmM1ZmJkMDQ3L3RhYmxlOjU3MGQxNjYxOWQxZDRiMzU5YTdlNWU4YjE0ZjRjMjc4L3RhYmxlcmFuZ2U6NTcwZDE2NjE5ZDFkNGIzNTlhN2U1ZThiMTRmNGMyNzhfMy0xLTEtMS0zMDE0MA_831f5301-0fd6-48b7-a080-43aeafc55217"
      unitRef="usd">55134000</us-gaap:NetIncomeLoss>
    <us-gaap:NetIncomeLoss
      contextRef="ie07f2822175c48edbb8d5559ceb82e6f_D20210101-20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83OS9mcmFnOjVmODNkZDllNzM4ZjRiNjBhN2YwM2VkNmM1ZmJkMDQ3L3RhYmxlOjU3MGQxNjYxOWQxZDRiMzU5YTdlNWU4YjE0ZjRjMjc4L3RhYmxlcmFuZ2U6NTcwZDE2NjE5ZDFkNGIzNTlhN2U1ZThiMTRmNGMyNzhfMy0zLTEtMS0zMDE0MA_b452fd16-3abf-4932-bfb5-97a078b4ddaf"
      unitRef="usd">44597000</us-gaap:NetIncomeLoss>
    <us-gaap:NetIncomeLoss
      contextRef="i4751184d7e5948509cd8893fd49fb821_D20200101-20201231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83OS9mcmFnOjVmODNkZDllNzM4ZjRiNjBhN2YwM2VkNmM1ZmJkMDQ3L3RhYmxlOjU3MGQxNjYxOWQxZDRiMzU5YTdlNWU4YjE0ZjRjMjc4L3RhYmxlcmFuZ2U6NTcwZDE2NjE5ZDFkNGIzNTlhN2U1ZThiMTRmNGMyNzhfMy01LTEtMS0zMDE0MA_82690af4-1338-4003-be2c-c1ea5f30d190"
      unitRef="usd">45586000</us-gaap:NetIncomeLoss>
    <us-gaap:DeferredIncomeTaxExpenseBenefit
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83OS9mcmFnOjVmODNkZDllNzM4ZjRiNjBhN2YwM2VkNmM1ZmJkMDQ3L3RhYmxlOjU3MGQxNjYxOWQxZDRiMzU5YTdlNWU4YjE0ZjRjMjc4L3RhYmxlcmFuZ2U6NTcwZDE2NjE5ZDFkNGIzNTlhN2U1ZThiMTRmNGMyNzhfNS0xLTEtMS0zMDE0MA_26163d1d-157d-456b-8072-42f4fc93c2b5"
      unitRef="usd">-3732000</us-gaap:DeferredIncomeTaxExpenseBenefit>
    <us-gaap:DeferredIncomeTaxExpenseBenefit
      contextRef="ie07f2822175c48edbb8d5559ceb82e6f_D20210101-20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83OS9mcmFnOjVmODNkZDllNzM4ZjRiNjBhN2YwM2VkNmM1ZmJkMDQ3L3RhYmxlOjU3MGQxNjYxOWQxZDRiMzU5YTdlNWU4YjE0ZjRjMjc4L3RhYmxlcmFuZ2U6NTcwZDE2NjE5ZDFkNGIzNTlhN2U1ZThiMTRmNGMyNzhfNS0zLTEtMS0zMDE0MA_ca3b160d-0067-41d6-bbf8-53d4256a9d63"
      unitRef="usd">3881000</us-gaap:DeferredIncomeTaxExpenseBenefit>
    <us-gaap:DeferredIncomeTaxExpenseBenefit
      contextRef="i4751184d7e5948509cd8893fd49fb821_D20200101-20201231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83OS9mcmFnOjVmODNkZDllNzM4ZjRiNjBhN2YwM2VkNmM1ZmJkMDQ3L3RhYmxlOjU3MGQxNjYxOWQxZDRiMzU5YTdlNWU4YjE0ZjRjMjc4L3RhYmxlcmFuZ2U6NTcwZDE2NjE5ZDFkNGIzNTlhN2U1ZThiMTRmNGMyNzhfNS01LTEtMS0zMDE0MA_cc3b2967-1b16-45ae-812c-5bc1d13f4b52"
      unitRef="usd">4241000</us-gaap:DeferredIncomeTaxExpenseBenefit>
    <us-gaap:BusinessCombinationContingentConsiderationArrangementsChangeInAmountOfContingentConsiderationLiability1
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83OS9mcmFnOjVmODNkZDllNzM4ZjRiNjBhN2YwM2VkNmM1ZmJkMDQ3L3RhYmxlOjU3MGQxNjYxOWQxZDRiMzU5YTdlNWU4YjE0ZjRjMjc4L3RhYmxlcmFuZ2U6NTcwZDE2NjE5ZDFkNGIzNTlhN2U1ZThiMTRmNGMyNzhfNi0xLTEtMS0zMDE0MA_4282f6a3-015c-4144-a8e8-b28107336546"
      unitRef="usd">0</us-gaap:BusinessCombinationContingentConsiderationArrangementsChangeInAmountOfContingentConsiderationLiability1>
    <us-gaap:BusinessCombinationContingentConsiderationArrangementsChangeInAmountOfContingentConsiderationLiability1
      contextRef="ie07f2822175c48edbb8d5559ceb82e6f_D20210101-20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83OS9mcmFnOjVmODNkZDllNzM4ZjRiNjBhN2YwM2VkNmM1ZmJkMDQ3L3RhYmxlOjU3MGQxNjYxOWQxZDRiMzU5YTdlNWU4YjE0ZjRjMjc4L3RhYmxlcmFuZ2U6NTcwZDE2NjE5ZDFkNGIzNTlhN2U1ZThiMTRmNGMyNzhfNi0zLTEtMS0zMDE0MA_f2545dff-4653-4326-88da-e06067915701"
      unitRef="usd">0</us-gaap:BusinessCombinationContingentConsiderationArrangementsChangeInAmountOfContingentConsiderationLiability1>
    <us-gaap:BusinessCombinationContingentConsiderationArrangementsChangeInAmountOfContingentConsiderationLiability1
      contextRef="i4751184d7e5948509cd8893fd49fb821_D20200101-20201231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83OS9mcmFnOjVmODNkZDllNzM4ZjRiNjBhN2YwM2VkNmM1ZmJkMDQ3L3RhYmxlOjU3MGQxNjYxOWQxZDRiMzU5YTdlNWU4YjE0ZjRjMjc4L3RhYmxlcmFuZ2U6NTcwZDE2NjE5ZDFkNGIzNTlhN2U1ZThiMTRmNGMyNzhfNi01LTEtMS0zMDE0MA_38f7f9af-295b-462e-8d3a-133ee03026cf"
      unitRef="usd">-85000</us-gaap:BusinessCombinationContingentConsiderationArrangementsChangeInAmountOfContingentConsiderationLiability1>
    <us-gaap:DepreciationDepletionAndAmortization
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83OS9mcmFnOjVmODNkZDllNzM4ZjRiNjBhN2YwM2VkNmM1ZmJkMDQ3L3RhYmxlOjU3MGQxNjYxOWQxZDRiMzU5YTdlNWU4YjE0ZjRjMjc4L3RhYmxlcmFuZ2U6NTcwZDE2NjE5ZDFkNGIzNTlhN2U1ZThiMTRmNGMyNzhfNy0xLTEtMS0zMDE0MA_77c42151-01db-42f8-8f71-132447bdccf8"
      unitRef="usd">16421000</us-gaap:DepreciationDepletionAndAmortization>
    <us-gaap:DepreciationDepletionAndAmortization
      contextRef="ie07f2822175c48edbb8d5559ceb82e6f_D20210101-20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83OS9mcmFnOjVmODNkZDllNzM4ZjRiNjBhN2YwM2VkNmM1ZmJkMDQ3L3RhYmxlOjU3MGQxNjYxOWQxZDRiMzU5YTdlNWU4YjE0ZjRjMjc4L3RhYmxlcmFuZ2U6NTcwZDE2NjE5ZDFkNGIzNTlhN2U1ZThiMTRmNGMyNzhfNy0zLTEtMS0zMDE0MA_18bcc1f6-f5ef-432d-90cc-a55350e6f960"
      unitRef="usd">14788000</us-gaap:DepreciationDepletionAndAmortization>
    <us-gaap:DepreciationDepletionAndAmortization
      contextRef="i4751184d7e5948509cd8893fd49fb821_D20200101-20201231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83OS9mcmFnOjVmODNkZDllNzM4ZjRiNjBhN2YwM2VkNmM1ZmJkMDQ3L3RhYmxlOjU3MGQxNjYxOWQxZDRiMzU5YTdlNWU4YjE0ZjRjMjc4L3RhYmxlcmFuZ2U6NTcwZDE2NjE5ZDFkNGIzNTlhN2U1ZThiMTRmNGMyNzhfNy01LTEtMS0zMDE0MA_f2101a8e-cc4f-41d3-ac99-a6463d426f85"
      unitRef="usd">13127000</us-gaap:DepreciationDepletionAndAmortization>
    <us-gaap:AmortizationOfIntangibleAssets
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83OS9mcmFnOjVmODNkZDllNzM4ZjRiNjBhN2YwM2VkNmM1ZmJkMDQ3L3RhYmxlOjU3MGQxNjYxOWQxZDRiMzU5YTdlNWU4YjE0ZjRjMjc4L3RhYmxlcmFuZ2U6NTcwZDE2NjE5ZDFkNGIzNTlhN2U1ZThiMTRmNGMyNzhfOC0xLTEtMS0zMDE0MA_796761a9-c62d-4247-8b0b-d9a176d4563a"
      unitRef="usd">11768000</us-gaap:AmortizationOfIntangibleAssets>
    <us-gaap:AmortizationOfIntangibleAssets
      contextRef="ie07f2822175c48edbb8d5559ceb82e6f_D20210101-20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83OS9mcmFnOjVmODNkZDllNzM4ZjRiNjBhN2YwM2VkNmM1ZmJkMDQ3L3RhYmxlOjU3MGQxNjYxOWQxZDRiMzU5YTdlNWU4YjE0ZjRjMjc4L3RhYmxlcmFuZ2U6NTcwZDE2NjE5ZDFkNGIzNTlhN2U1ZThiMTRmNGMyNzhfOC0zLTEtMS0zMDE0MA_6ec4debb-aebd-4de9-8554-f44e156c7e47"
      unitRef="usd">10126000</us-gaap:AmortizationOfIntangibleAssets>
    <us-gaap:AmortizationOfIntangibleAssets
      contextRef="i4751184d7e5948509cd8893fd49fb821_D20200101-20201231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83OS9mcmFnOjVmODNkZDllNzM4ZjRiNjBhN2YwM2VkNmM1ZmJkMDQ3L3RhYmxlOjU3MGQxNjYxOWQxZDRiMzU5YTdlNWU4YjE0ZjRjMjc4L3RhYmxlcmFuZ2U6NTcwZDE2NjE5ZDFkNGIzNTlhN2U1ZThiMTRmNGMyNzhfOC01LTEtMS0zMDE0MA_f5746ee9-1d18-4b77-a4fd-013bd5e095f7"
      unitRef="usd">5538000</us-gaap:AmortizationOfIntangibleAssets>
    <us-gaap:ProvisionForDoubtfulAccounts
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83OS9mcmFnOjVmODNkZDllNzM4ZjRiNjBhN2YwM2VkNmM1ZmJkMDQ3L3RhYmxlOjU3MGQxNjYxOWQxZDRiMzU5YTdlNWU4YjE0ZjRjMjc4L3RhYmxlcmFuZ2U6NTcwZDE2NjE5ZDFkNGIzNTlhN2U1ZThiMTRmNGMyNzhfOS0xLTEtMS0zMDE0MA_9cbc91d5-ac42-448b-a705-a26708c672bd"
      unitRef="usd">3359000</us-gaap:ProvisionForDoubtfulAccounts>
    <us-gaap:ProvisionForDoubtfulAccounts
      contextRef="ie07f2822175c48edbb8d5559ceb82e6f_D20210101-20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83OS9mcmFnOjVmODNkZDllNzM4ZjRiNjBhN2YwM2VkNmM1ZmJkMDQ3L3RhYmxlOjU3MGQxNjYxOWQxZDRiMzU5YTdlNWU4YjE0ZjRjMjc4L3RhYmxlcmFuZ2U6NTcwZDE2NjE5ZDFkNGIzNTlhN2U1ZThiMTRmNGMyNzhfOS0zLTEtMS0zMDE0MA_8a9cbff4-101c-4bba-99a6-57d786e69f3a"
      unitRef="usd">4717000</us-gaap:ProvisionForDoubtfulAccounts>
    <us-gaap:ProvisionForDoubtfulAccounts
      contextRef="i4751184d7e5948509cd8893fd49fb821_D20200101-20201231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83OS9mcmFnOjVmODNkZDllNzM4ZjRiNjBhN2YwM2VkNmM1ZmJkMDQ3L3RhYmxlOjU3MGQxNjYxOWQxZDRiMzU5YTdlNWU4YjE0ZjRjMjc4L3RhYmxlcmFuZ2U6NTcwZDE2NjE5ZDFkNGIzNTlhN2U1ZThiMTRmNGMyNzhfOS01LTEtMS0zMDE0MA_5de7730e-9a77-446f-8b74-31b0feae3fbf"
      unitRef="usd">5660000</us-gaap:ProvisionForDoubtfulAccounts>
    <us-gaap:ShareBasedCompensation
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83OS9mcmFnOjVmODNkZDllNzM4ZjRiNjBhN2YwM2VkNmM1ZmJkMDQ3L3RhYmxlOjU3MGQxNjYxOWQxZDRiMzU5YTdlNWU4YjE0ZjRjMjc4L3RhYmxlcmFuZ2U6NTcwZDE2NjE5ZDFkNGIzNTlhN2U1ZThiMTRmNGMyNzhfMTAtMS0xLTEtMzAxNDA_c55729c0-bef3-4c7e-9d72-f322afe2fa21"
      unitRef="usd">33399000</us-gaap:ShareBasedCompensation>
    <us-gaap:ShareBasedCompensation
      contextRef="ie07f2822175c48edbb8d5559ceb82e6f_D20210101-20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83OS9mcmFnOjVmODNkZDllNzM4ZjRiNjBhN2YwM2VkNmM1ZmJkMDQ3L3RhYmxlOjU3MGQxNjYxOWQxZDRiMzU5YTdlNWU4YjE0ZjRjMjc4L3RhYmxlcmFuZ2U6NTcwZDE2NjE5ZDFkNGIzNTlhN2U1ZThiMTRmNGMyNzhfMTAtMy0xLTEtMzAxNDA_1f0f52b7-c80f-43ba-ad1a-3e7f3218e7b0"
      unitRef="usd">27574000</us-gaap:ShareBasedCompensation>
    <us-gaap:ShareBasedCompensation
      contextRef="i4751184d7e5948509cd8893fd49fb821_D20200101-20201231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83OS9mcmFnOjVmODNkZDllNzM4ZjRiNjBhN2YwM2VkNmM1ZmJkMDQ3L3RhYmxlOjU3MGQxNjYxOWQxZDRiMzU5YTdlNWU4YjE0ZjRjMjc4L3RhYmxlcmFuZ2U6NTcwZDE2NjE5ZDFkNGIzNTlhN2U1ZThiMTRmNGMyNzhfMTAtNS0xLTEtMzAxNDA_1540981b-afc6-4adc-80d8-20cd66ab6473"
      unitRef="usd">18936000</us-gaap:ShareBasedCompensation>
    <us-gaap:OtherNoncashIncomeExpense
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83OS9mcmFnOjVmODNkZDllNzM4ZjRiNjBhN2YwM2VkNmM1ZmJkMDQ3L3RhYmxlOjU3MGQxNjYxOWQxZDRiMzU5YTdlNWU4YjE0ZjRjMjc4L3RhYmxlcmFuZ2U6NTcwZDE2NjE5ZDFkNGIzNTlhN2U1ZThiMTRmNGMyNzhfMTEtMS0xLTEtMzAxNDA_0b3a8186-4d7b-4b3f-85a8-fd2f7caf67eb"
      unitRef="usd">-220000</us-gaap:OtherNoncashIncomeExpense>
    <us-gaap:OtherNoncashIncomeExpense
      contextRef="ie07f2822175c48edbb8d5559ceb82e6f_D20210101-20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83OS9mcmFnOjVmODNkZDllNzM4ZjRiNjBhN2YwM2VkNmM1ZmJkMDQ3L3RhYmxlOjU3MGQxNjYxOWQxZDRiMzU5YTdlNWU4YjE0ZjRjMjc4L3RhYmxlcmFuZ2U6NTcwZDE2NjE5ZDFkNGIzNTlhN2U1ZThiMTRmNGMyNzhfMTEtMy0xLTEtMzAxNDA_68352b37-2c7c-4865-b0c3-ba4f4aec1da4"
      unitRef="usd">-323000</us-gaap:OtherNoncashIncomeExpense>
    <us-gaap:OtherNoncashIncomeExpense
      contextRef="i4751184d7e5948509cd8893fd49fb821_D20200101-20201231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83OS9mcmFnOjVmODNkZDllNzM4ZjRiNjBhN2YwM2VkNmM1ZmJkMDQ3L3RhYmxlOjU3MGQxNjYxOWQxZDRiMzU5YTdlNWU4YjE0ZjRjMjc4L3RhYmxlcmFuZ2U6NTcwZDE2NjE5ZDFkNGIzNTlhN2U1ZThiMTRmNGMyNzhfMTEtNS0xLTEtMzAxNDA_2012f9c3-2069-4594-a246-4aebede1babd"
      unitRef="usd">24000</us-gaap:OtherNoncashIncomeExpense>
    <us-gaap:IncreaseDecreaseInAccountsReceivable
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83OS9mcmFnOjVmODNkZDllNzM4ZjRiNjBhN2YwM2VkNmM1ZmJkMDQ3L3RhYmxlOjU3MGQxNjYxOWQxZDRiMzU5YTdlNWU4YjE0ZjRjMjc4L3RhYmxlcmFuZ2U6NTcwZDE2NjE5ZDFkNGIzNTlhN2U1ZThiMTRmNGMyNzhfMTMtMS0xLTEtMzAxNDA_f6d3be3a-8f6e-498e-8025-376be484267c"
      unitRef="usd">6435000</us-gaap:IncreaseDecreaseInAccountsReceivable>
    <us-gaap:IncreaseDecreaseInAccountsReceivable
      contextRef="ie07f2822175c48edbb8d5559ceb82e6f_D20210101-20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83OS9mcmFnOjVmODNkZDllNzM4ZjRiNjBhN2YwM2VkNmM1ZmJkMDQ3L3RhYmxlOjU3MGQxNjYxOWQxZDRiMzU5YTdlNWU4YjE0ZjRjMjc4L3RhYmxlcmFuZ2U6NTcwZDE2NjE5ZDFkNGIzNTlhN2U1ZThiMTRmNGMyNzhfMTMtMy0xLTEtMzAxNDA_6e715374-347f-467d-bb39-883994ae549b"
      unitRef="usd">4959000</us-gaap:IncreaseDecreaseInAccountsReceivable>
    <us-gaap:IncreaseDecreaseInAccountsReceivable
      contextRef="i4751184d7e5948509cd8893fd49fb821_D20200101-20201231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83OS9mcmFnOjVmODNkZDllNzM4ZjRiNjBhN2YwM2VkNmM1ZmJkMDQ3L3RhYmxlOjU3MGQxNjYxOWQxZDRiMzU5YTdlNWU4YjE0ZjRjMjc4L3RhYmxlcmFuZ2U6NTcwZDE2NjE5ZDFkNGIzNTlhN2U1ZThiMTRmNGMyNzhfMTMtNS0xLTEtMzAxNDA_d16d148b-40fa-4bae-84b7-a3c4745a611e"
      unitRef="usd">5922000</us-gaap:IncreaseDecreaseInAccountsReceivable>
    <us-gaap:IncreaseDecreaseInDeferredCharges
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83OS9mcmFnOjVmODNkZDllNzM4ZjRiNjBhN2YwM2VkNmM1ZmJkMDQ3L3RhYmxlOjU3MGQxNjYxOWQxZDRiMzU5YTdlNWU4YjE0ZjRjMjc4L3RhYmxlcmFuZ2U6NTcwZDE2NjE5ZDFkNGIzNTlhN2U1ZThiMTRmNGMyNzhfMTQtMS0xLTEtMzAxNDA_1375a0fa-7988-4525-a48f-731592602e31"
      unitRef="usd">10646000</us-gaap:IncreaseDecreaseInDeferredCharges>
    <us-gaap:IncreaseDecreaseInDeferredCharges
      contextRef="ie07f2822175c48edbb8d5559ceb82e6f_D20210101-20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83OS9mcmFnOjVmODNkZDllNzM4ZjRiNjBhN2YwM2VkNmM1ZmJkMDQ3L3RhYmxlOjU3MGQxNjYxOWQxZDRiMzU5YTdlNWU4YjE0ZjRjMjc4L3RhYmxlcmFuZ2U6NTcwZDE2NjE5ZDFkNGIzNTlhN2U1ZThiMTRmNGMyNzhfMTQtMy0xLTEtMzAxNDA_763478d3-ee75-4f77-a873-cfe10baccd7f"
      unitRef="usd">9299000</us-gaap:IncreaseDecreaseInDeferredCharges>
    <us-gaap:IncreaseDecreaseInDeferredCharges
      contextRef="i4751184d7e5948509cd8893fd49fb821_D20200101-20201231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83OS9mcmFnOjVmODNkZDllNzM4ZjRiNjBhN2YwM2VkNmM1ZmJkMDQ3L3RhYmxlOjU3MGQxNjYxOWQxZDRiMzU5YTdlNWU4YjE0ZjRjMjc4L3RhYmxlcmFuZ2U6NTcwZDE2NjE5ZDFkNGIzNTlhN2U1ZThiMTRmNGMyNzhfMTQtNS0xLTEtMzAxNDA_ffb4f4a1-305a-4a94-9de4-933aa47f079d"
      unitRef="usd">3414000</us-gaap:IncreaseDecreaseInDeferredCharges>
    <us-gaap:IncreaseDecreaseInOtherOperatingAssets
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83OS9mcmFnOjVmODNkZDllNzM4ZjRiNjBhN2YwM2VkNmM1ZmJkMDQ3L3RhYmxlOjU3MGQxNjYxOWQxZDRiMzU5YTdlNWU4YjE0ZjRjMjc4L3RhYmxlcmFuZ2U6NTcwZDE2NjE5ZDFkNGIzNTlhN2U1ZThiMTRmNGMyNzhfMTUtMS0xLTEtMzAxNDA_fbd94473-c38a-456a-9c33-453ffa8484d5"
      unitRef="usd">-2632000</us-gaap:IncreaseDecreaseInOtherOperatingAssets>
    <us-gaap:IncreaseDecreaseInOtherOperatingAssets
      contextRef="ie07f2822175c48edbb8d5559ceb82e6f_D20210101-20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83OS9mcmFnOjVmODNkZDllNzM4ZjRiNjBhN2YwM2VkNmM1ZmJkMDQ3L3RhYmxlOjU3MGQxNjYxOWQxZDRiMzU5YTdlNWU4YjE0ZjRjMjc4L3RhYmxlcmFuZ2U6NTcwZDE2NjE5ZDFkNGIzNTlhN2U1ZThiMTRmNGMyNzhfMTUtMy0xLTEtMzAxNDA_69b7ea08-989c-4cff-89f6-321ba588746f"
      unitRef="usd">6181000</us-gaap:IncreaseDecreaseInOtherOperatingAssets>
    <us-gaap:IncreaseDecreaseInOtherOperatingAssets
      contextRef="i4751184d7e5948509cd8893fd49fb821_D20200101-20201231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83OS9mcmFnOjVmODNkZDllNzM4ZjRiNjBhN2YwM2VkNmM1ZmJkMDQ3L3RhYmxlOjU3MGQxNjYxOWQxZDRiMzU5YTdlNWU4YjE0ZjRjMjc4L3RhYmxlcmFuZ2U6NTcwZDE2NjE5ZDFkNGIzNTlhN2U1ZThiMTRmNGMyNzhfMTUtNS0xLTEtMzAxNDA_5f94d0be-b4a6-4612-afe2-6ae92c57e7d2"
      unitRef="usd">-1201000</us-gaap:IncreaseDecreaseInOtherOperatingAssets>
    <us-gaap:IncreaseDecreaseInAccountsPayable
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83OS9mcmFnOjVmODNkZDllNzM4ZjRiNjBhN2YwM2VkNmM1ZmJkMDQ3L3RhYmxlOjU3MGQxNjYxOWQxZDRiMzU5YTdlNWU4YjE0ZjRjMjc4L3RhYmxlcmFuZ2U6NTcwZDE2NjE5ZDFkNGIzNTlhN2U1ZThiMTRmNGMyNzhfMTYtMS0xLTEtMzAxNDA_cbb3ff58-3c6b-4654-8027-e95267091628"
      unitRef="usd">144000</us-gaap:IncreaseDecreaseInAccountsPayable>
    <us-gaap:IncreaseDecreaseInAccountsPayable
      contextRef="ie07f2822175c48edbb8d5559ceb82e6f_D20210101-20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83OS9mcmFnOjVmODNkZDllNzM4ZjRiNjBhN2YwM2VkNmM1ZmJkMDQ3L3RhYmxlOjU3MGQxNjYxOWQxZDRiMzU5YTdlNWU4YjE0ZjRjMjc4L3RhYmxlcmFuZ2U6NTcwZDE2NjE5ZDFkNGIzNTlhN2U1ZThiMTRmNGMyNzhfMTYtMy0xLTEtMzAxNDA_34b4364f-a21a-4632-ba81-ba62a805e13e"
      unitRef="usd">2259000</us-gaap:IncreaseDecreaseInAccountsPayable>
    <us-gaap:IncreaseDecreaseInAccountsPayable
      contextRef="i4751184d7e5948509cd8893fd49fb821_D20200101-20201231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83OS9mcmFnOjVmODNkZDllNzM4ZjRiNjBhN2YwM2VkNmM1ZmJkMDQ3L3RhYmxlOjU3MGQxNjYxOWQxZDRiMzU5YTdlNWU4YjE0ZjRjMjc4L3RhYmxlcmFuZ2U6NTcwZDE2NjE5ZDFkNGIzNTlhN2U1ZThiMTRmNGMyNzhfMTYtNS0xLTEtMzAxNDA_d37c976b-52b1-48e8-97da-b1bca55e6c82"
      unitRef="usd">1214000</us-gaap:IncreaseDecreaseInAccountsPayable>
    <us-gaap:IncreaseDecreaseInEmployeeRelatedLiabilities
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83OS9mcmFnOjVmODNkZDllNzM4ZjRiNjBhN2YwM2VkNmM1ZmJkMDQ3L3RhYmxlOjU3MGQxNjYxOWQxZDRiMzU5YTdlNWU4YjE0ZjRjMjc4L3RhYmxlcmFuZ2U6NTcwZDE2NjE5ZDFkNGIzNTlhN2U1ZThiMTRmNGMyNzhfMTctMS0xLTEtMzAxNDA_cc623d94-74a9-4038-9df0-ed058680dddf"
      unitRef="usd">-3786000</us-gaap:IncreaseDecreaseInEmployeeRelatedLiabilities>
    <us-gaap:IncreaseDecreaseInEmployeeRelatedLiabilities
      contextRef="ie07f2822175c48edbb8d5559ceb82e6f_D20210101-20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83OS9mcmFnOjVmODNkZDllNzM4ZjRiNjBhN2YwM2VkNmM1ZmJkMDQ3L3RhYmxlOjU3MGQxNjYxOWQxZDRiMzU5YTdlNWU4YjE0ZjRjMjc4L3RhYmxlcmFuZ2U6NTcwZDE2NjE5ZDFkNGIzNTlhN2U1ZThiMTRmNGMyNzhfMTctMy0xLTEtMzAxNDA_f29a723f-c6a2-4ba5-bd85-75364d0d0373"
      unitRef="usd">6775000</us-gaap:IncreaseDecreaseInEmployeeRelatedLiabilities>
    <us-gaap:IncreaseDecreaseInEmployeeRelatedLiabilities
      contextRef="i4751184d7e5948509cd8893fd49fb821_D20200101-20201231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83OS9mcmFnOjVmODNkZDllNzM4ZjRiNjBhN2YwM2VkNmM1ZmJkMDQ3L3RhYmxlOjU3MGQxNjYxOWQxZDRiMzU5YTdlNWU4YjE0ZjRjMjc4L3RhYmxlcmFuZ2U6NTcwZDE2NjE5ZDFkNGIzNTlhN2U1ZThiMTRmNGMyNzhfMTctNS0xLTEtMzAxNDA_36828347-a08f-4e15-9a0a-6a2f1ce1bbec"
      unitRef="usd">-1257000</us-gaap:IncreaseDecreaseInEmployeeRelatedLiabilities>
    <us-gaap:IncreaseDecreaseInAccruedLiabilities
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83OS9mcmFnOjVmODNkZDllNzM4ZjRiNjBhN2YwM2VkNmM1ZmJkMDQ3L3RhYmxlOjU3MGQxNjYxOWQxZDRiMzU5YTdlNWU4YjE0ZjRjMjc4L3RhYmxlcmFuZ2U6NTcwZDE2NjE5ZDFkNGIzNTlhN2U1ZThiMTRmNGMyNzhfMTgtMS0xLTEtMzAxNDA_d665e54b-60e7-4a4f-9478-08fa8859d5e7"
      unitRef="usd">-2829000</us-gaap:IncreaseDecreaseInAccruedLiabilities>
    <us-gaap:IncreaseDecreaseInAccruedLiabilities
      contextRef="ie07f2822175c48edbb8d5559ceb82e6f_D20210101-20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83OS9mcmFnOjVmODNkZDllNzM4ZjRiNjBhN2YwM2VkNmM1ZmJkMDQ3L3RhYmxlOjU3MGQxNjYxOWQxZDRiMzU5YTdlNWU4YjE0ZjRjMjc4L3RhYmxlcmFuZ2U6NTcwZDE2NjE5ZDFkNGIzNTlhN2U1ZThiMTRmNGMyNzhfMTgtMy0xLTEtMzAxNDA_6b2c973c-68ba-4fe6-a5c6-4173d1cd67f7"
      unitRef="usd">1017000</us-gaap:IncreaseDecreaseInAccruedLiabilities>
    <us-gaap:IncreaseDecreaseInAccruedLiabilities
      contextRef="i4751184d7e5948509cd8893fd49fb821_D20200101-20201231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83OS9mcmFnOjVmODNkZDllNzM4ZjRiNjBhN2YwM2VkNmM1ZmJkMDQ3L3RhYmxlOjU3MGQxNjYxOWQxZDRiMzU5YTdlNWU4YjE0ZjRjMjc4L3RhYmxlcmFuZ2U6NTcwZDE2NjE5ZDFkNGIzNTlhN2U1ZThiMTRmNGMyNzhfMTgtNS0xLTEtMzAxNDA_4ccfe13a-7fe1-4c54-ba92-ad32dd398a51"
      unitRef="usd">563000</us-gaap:IncreaseDecreaseInAccruedLiabilities>
    <us-gaap:IncreaseDecreaseInContractWithCustomerLiability
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83OS9mcmFnOjVmODNkZDllNzM4ZjRiNjBhN2YwM2VkNmM1ZmJkMDQ3L3RhYmxlOjU3MGQxNjYxOWQxZDRiMzU5YTdlNWU4YjE0ZjRjMjc4L3RhYmxlcmFuZ2U6NTcwZDE2NjE5ZDFkNGIzNTlhN2U1ZThiMTRmNGMyNzhfMTktMS0xLTEtMzAxNDA_dac100cd-b57d-4fd5-b101-efc8bbf176ec"
      unitRef="usd">5965000</us-gaap:IncreaseDecreaseInContractWithCustomerLiability>
    <us-gaap:IncreaseDecreaseInContractWithCustomerLiability
      contextRef="ie07f2822175c48edbb8d5559ceb82e6f_D20210101-20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83OS9mcmFnOjVmODNkZDllNzM4ZjRiNjBhN2YwM2VkNmM1ZmJkMDQ3L3RhYmxlOjU3MGQxNjYxOWQxZDRiMzU5YTdlNWU4YjE0ZjRjMjc4L3RhYmxlcmFuZ2U6NTcwZDE2NjE5ZDFkNGIzNTlhN2U1ZThiMTRmNGMyNzhfMTktMy0xLTEtMzAxNDA_cc8f8ab8-2d49-42d8-b2fb-e1ba7c87317d"
      unitRef="usd">14483000</us-gaap:IncreaseDecreaseInContractWithCustomerLiability>
    <us-gaap:IncreaseDecreaseInContractWithCustomerLiability
      contextRef="i4751184d7e5948509cd8893fd49fb821_D20200101-20201231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83OS9mcmFnOjVmODNkZDllNzM4ZjRiNjBhN2YwM2VkNmM1ZmJkMDQ3L3RhYmxlOjU3MGQxNjYxOWQxZDRiMzU5YTdlNWU4YjE0ZjRjMjc4L3RhYmxlcmFuZ2U6NTcwZDE2NjE5ZDFkNGIzNTlhN2U1ZThiMTRmNGMyNzhfMTktNS0xLTEtMzAxNDA_c574109c-7c6d-461c-a501-2ba55f110165"
      unitRef="usd">4432000</us-gaap:IncreaseDecreaseInContractWithCustomerLiability>
    <spsc:IncreaseDecreaseInOperatingLeases
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83OS9mcmFnOjVmODNkZDllNzM4ZjRiNjBhN2YwM2VkNmM1ZmJkMDQ3L3RhYmxlOjU3MGQxNjYxOWQxZDRiMzU5YTdlNWU4YjE0ZjRjMjc4L3RhYmxlcmFuZ2U6NTcwZDE2NjE5ZDFkNGIzNTlhN2U1ZThiMTRmNGMyNzhfMjAtMS0xLTEtMzAxNDA_db4b8a68-2d75-4dc5-9b0b-2d98e2ace0f4"
      unitRef="usd">-1562000</spsc:IncreaseDecreaseInOperatingLeases>
    <spsc:IncreaseDecreaseInOperatingLeases
      contextRef="ie07f2822175c48edbb8d5559ceb82e6f_D20210101-20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83OS9mcmFnOjVmODNkZDllNzM4ZjRiNjBhN2YwM2VkNmM1ZmJkMDQ3L3RhYmxlOjU3MGQxNjYxOWQxZDRiMzU5YTdlNWU4YjE0ZjRjMjc4L3RhYmxlcmFuZ2U6NTcwZDE2NjE5ZDFkNGIzNTlhN2U1ZThiMTRmNGMyNzhfMjAtMy0xLTEtMzAxNDA_f35f5c0a-e8e5-44f2-a1d8-a74263e3468f"
      unitRef="usd">2792000</spsc:IncreaseDecreaseInOperatingLeases>
    <spsc:IncreaseDecreaseInOperatingLeases
      contextRef="i4751184d7e5948509cd8893fd49fb821_D20200101-20201231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83OS9mcmFnOjVmODNkZDllNzM4ZjRiNjBhN2YwM2VkNmM1ZmJkMDQ3L3RhYmxlOjU3MGQxNjYxOWQxZDRiMzU5YTdlNWU4YjE0ZjRjMjc4L3RhYmxlcmFuZ2U6NTcwZDE2NjE5ZDFkNGIzNTlhN2U1ZThiMTRmNGMyNzhfMjAtNS0xLTEtMzAxNDA_85b7b530-1b9f-44f8-a54a-2eede7afb971"
      unitRef="usd">-1234000</spsc:IncreaseDecreaseInOperatingLeases>
    <us-gaap:NetCashProvidedByUsedInOperatingActivities
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83OS9mcmFnOjVmODNkZDllNzM4ZjRiNjBhN2YwM2VkNmM1ZmJkMDQ3L3RhYmxlOjU3MGQxNjYxOWQxZDRiMzU5YTdlNWU4YjE0ZjRjMjc4L3RhYmxlcmFuZ2U6NTcwZDE2NjE5ZDFkNGIzNTlhN2U1ZThiMTRmNGMyNzhfMjEtMS0xLTEtMzAxNDA_87a10e62-7149-4b51-820d-dfcc1a9003b0"
      unitRef="usd">100052000</us-gaap:NetCashProvidedByUsedInOperatingActivities>
    <us-gaap:NetCashProvidedByUsedInOperatingActivities
      contextRef="ie07f2822175c48edbb8d5559ceb82e6f_D20210101-20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83OS9mcmFnOjVmODNkZDllNzM4ZjRiNjBhN2YwM2VkNmM1ZmJkMDQ3L3RhYmxlOjU3MGQxNjYxOWQxZDRiMzU5YTdlNWU4YjE0ZjRjMjc4L3RhYmxlcmFuZ2U6NTcwZDE2NjE5ZDFkNGIzNTlhN2U1ZThiMTRmNGMyNzhfMjEtMy0xLTEtMzAxNDA_3d8c3354-a2b8-4dce-b002-3b40172bad92"
      unitRef="usd">112893000</us-gaap:NetCashProvidedByUsedInOperatingActivities>
    <us-gaap:NetCashProvidedByUsedInOperatingActivities
      contextRef="i4751184d7e5948509cd8893fd49fb821_D20200101-20201231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83OS9mcmFnOjVmODNkZDllNzM4ZjRiNjBhN2YwM2VkNmM1ZmJkMDQ3L3RhYmxlOjU3MGQxNjYxOWQxZDRiMzU5YTdlNWU4YjE0ZjRjMjc4L3RhYmxlcmFuZ2U6NTcwZDE2NjE5ZDFkNGIzNTlhN2U1ZThiMTRmNGMyNzhfMjEtNS0xLTEtMzAxNDA_1a408d1c-a9d2-4d12-8ff4-3a67434c545e"
      unitRef="usd">88562000</us-gaap:NetCashProvidedByUsedInOperatingActivities>
    <us-gaap:PaymentsToAcquirePropertyPlantAndEquipment
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83OS9mcmFnOjVmODNkZDllNzM4ZjRiNjBhN2YwM2VkNmM1ZmJkMDQ3L3RhYmxlOjU3MGQxNjYxOWQxZDRiMzU5YTdlNWU4YjE0ZjRjMjc4L3RhYmxlcmFuZ2U6NTcwZDE2NjE5ZDFkNGIzNTlhN2U1ZThiMTRmNGMyNzhfMjMtMS0xLTEtMzAxNDA_eb44a891-ada7-4a80-a8f2-3f4330ab0353"
      unitRef="usd">19880000</us-gaap:PaymentsToAcquirePropertyPlantAndEquipment>
    <us-gaap:PaymentsToAcquirePropertyPlantAndEquipment
      contextRef="ie07f2822175c48edbb8d5559ceb82e6f_D20210101-20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83OS9mcmFnOjVmODNkZDllNzM4ZjRiNjBhN2YwM2VkNmM1ZmJkMDQ3L3RhYmxlOjU3MGQxNjYxOWQxZDRiMzU5YTdlNWU4YjE0ZjRjMjc4L3RhYmxlcmFuZ2U6NTcwZDE2NjE5ZDFkNGIzNTlhN2U1ZThiMTRmNGMyNzhfMjMtMy0xLTEtMzAxNDA_b7f2b22f-48e2-4266-b103-639ff5019e94"
      unitRef="usd">19588000</us-gaap:PaymentsToAcquirePropertyPlantAndEquipment>
    <us-gaap:PaymentsToAcquirePropertyPlantAndEquipment
      contextRef="i4751184d7e5948509cd8893fd49fb821_D20200101-20201231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83OS9mcmFnOjVmODNkZDllNzM4ZjRiNjBhN2YwM2VkNmM1ZmJkMDQ3L3RhYmxlOjU3MGQxNjYxOWQxZDRiMzU5YTdlNWU4YjE0ZjRjMjc4L3RhYmxlcmFuZ2U6NTcwZDE2NjE5ZDFkNGIzNTlhN2U1ZThiMTRmNGMyNzhfMjMtNS0xLTEtMzAxNDA_0bca0044-8ef1-4dd4-b84d-5d3df3c5e7b8"
      unitRef="usd">16467000</us-gaap:PaymentsToAcquirePropertyPlantAndEquipment>
    <us-gaap:PaymentsToAcquireOtherInvestments
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83OS9mcmFnOjVmODNkZDllNzM4ZjRiNjBhN2YwM2VkNmM1ZmJkMDQ3L3RhYmxlOjU3MGQxNjYxOWQxZDRiMzU5YTdlNWU4YjE0ZjRjMjc4L3RhYmxlcmFuZ2U6NTcwZDE2NjE5ZDFkNGIzNTlhN2U1ZThiMTRmNGMyNzhfMjQtMS0xLTEtMzAxNDA_e643f3a0-e2d3-46c9-a409-983708b3c875"
      unitRef="usd">160427000</us-gaap:PaymentsToAcquireOtherInvestments>
    <us-gaap:PaymentsToAcquireOtherInvestments
      contextRef="ie07f2822175c48edbb8d5559ceb82e6f_D20210101-20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83OS9mcmFnOjVmODNkZDllNzM4ZjRiNjBhN2YwM2VkNmM1ZmJkMDQ3L3RhYmxlOjU3MGQxNjYxOWQxZDRiMzU5YTdlNWU4YjE0ZjRjMjc4L3RhYmxlcmFuZ2U6NTcwZDE2NjE5ZDFkNGIzNTlhN2U1ZThiMTRmNGMyNzhfMjQtMy0xLTEtMzAxNDA_7fb0386f-9f23-4f29-a97a-3e83f5e07b97"
      unitRef="usd">121242000</us-gaap:PaymentsToAcquireOtherInvestments>
    <us-gaap:PaymentsToAcquireOtherInvestments
      contextRef="i4751184d7e5948509cd8893fd49fb821_D20200101-20201231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83OS9mcmFnOjVmODNkZDllNzM4ZjRiNjBhN2YwM2VkNmM1ZmJkMDQ3L3RhYmxlOjU3MGQxNjYxOWQxZDRiMzU5YTdlNWU4YjE0ZjRjMjc4L3RhYmxlcmFuZ2U6NTcwZDE2NjE5ZDFkNGIzNTlhN2U1ZThiMTRmNGMyNzhfMjQtNS0xLTEtMzAxNDA_3c98f00f-307b-40a4-be0a-0e82996b8603"
      unitRef="usd">74797000</us-gaap:PaymentsToAcquireOtherInvestments>
    <us-gaap:ProceedsFromSaleAndMaturityOfAvailableForSaleSecurities
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83OS9mcmFnOjVmODNkZDllNzM4ZjRiNjBhN2YwM2VkNmM1ZmJkMDQ3L3RhYmxlOjU3MGQxNjYxOWQxZDRiMzU5YTdlNWU4YjE0ZjRjMjc4L3RhYmxlcmFuZ2U6NTcwZDE2NjE5ZDFkNGIzNTlhN2U1ZThiMTRmNGMyNzhfMjUtMS0xLTEtMzAxNDA_7c8f5ddc-7d14-4298-883f-cecf92af072e"
      unitRef="usd">158937000</us-gaap:ProceedsFromSaleAndMaturityOfAvailableForSaleSecurities>
    <us-gaap:ProceedsFromSaleAndMaturityOfAvailableForSaleSecurities
      contextRef="ie07f2822175c48edbb8d5559ceb82e6f_D20210101-20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83OS9mcmFnOjVmODNkZDllNzM4ZjRiNjBhN2YwM2VkNmM1ZmJkMDQ3L3RhYmxlOjU3MGQxNjYxOWQxZDRiMzU5YTdlNWU4YjE0ZjRjMjc4L3RhYmxlcmFuZ2U6NTcwZDE2NjE5ZDFkNGIzNTlhN2U1ZThiMTRmNGMyNzhfMjUtMy0xLTEtMzAxNDA_bb6ffc1f-538f-4942-92c2-c2c188623be3"
      unitRef="usd">111193000</us-gaap:ProceedsFromSaleAndMaturityOfAvailableForSaleSecurities>
    <us-gaap:ProceedsFromSaleAndMaturityOfAvailableForSaleSecurities
      contextRef="i4751184d7e5948509cd8893fd49fb821_D20200101-20201231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83OS9mcmFnOjVmODNkZDllNzM4ZjRiNjBhN2YwM2VkNmM1ZmJkMDQ3L3RhYmxlOjU3MGQxNjYxOWQxZDRiMzU5YTdlNWU4YjE0ZjRjMjc4L3RhYmxlcmFuZ2U6NTcwZDE2NjE5ZDFkNGIzNTlhN2U1ZThiMTRmNGMyNzhfMjUtNS0xLTEtMzAxNDA_6b2a47c5-4379-4358-a61b-a980c3acfa91"
      unitRef="usd">69461000</us-gaap:ProceedsFromSaleAndMaturityOfAvailableForSaleSecurities>
    <spsc:PaymentsToAcquireBusinessesAndIntangibleAssetsNetOfCashAcquired
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83OS9mcmFnOjVmODNkZDllNzM4ZjRiNjBhN2YwM2VkNmM1ZmJkMDQ3L3RhYmxlOjU3MGQxNjYxOWQxZDRiMzU5YTdlNWU4YjE0ZjRjMjc4L3RhYmxlcmFuZ2U6NTcwZDE2NjE5ZDFkNGIzNTlhN2U1ZThiMTRmNGMyNzhfMjYtMS0xLTEtMzAxNDA_b2d23c7d-e779-45e0-9f7f-9417decfdb91"
      unitRef="usd">91420000</spsc:PaymentsToAcquireBusinessesAndIntangibleAssetsNetOfCashAcquired>
    <spsc:PaymentsToAcquireBusinessesAndIntangibleAssetsNetOfCashAcquired
      contextRef="ie07f2822175c48edbb8d5559ceb82e6f_D20210101-20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83OS9mcmFnOjVmODNkZDllNzM4ZjRiNjBhN2YwM2VkNmM1ZmJkMDQ3L3RhYmxlOjU3MGQxNjYxOWQxZDRiMzU5YTdlNWU4YjE0ZjRjMjc4L3RhYmxlcmFuZ2U6NTcwZDE2NjE5ZDFkNGIzNTlhN2U1ZThiMTRmNGMyNzhfMjYtMy0xLTEtMzAxNDA_9970d918-f569-4417-a28a-c9f40f38fc1a"
      unitRef="usd">17066000</spsc:PaymentsToAcquireBusinessesAndIntangibleAssetsNetOfCashAcquired>
    <spsc:PaymentsToAcquireBusinessesAndIntangibleAssetsNetOfCashAcquired
      contextRef="i4751184d7e5948509cd8893fd49fb821_D20200101-20201231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83OS9mcmFnOjVmODNkZDllNzM4ZjRiNjBhN2YwM2VkNmM1ZmJkMDQ3L3RhYmxlOjU3MGQxNjYxOWQxZDRiMzU5YTdlNWU4YjE0ZjRjMjc4L3RhYmxlcmFuZ2U6NTcwZDE2NjE5ZDFkNGIzNTlhN2U1ZThiMTRmNGMyNzhfMjYtNS0xLTEtMzAxNDA_858187e3-ddfc-4043-bfe7-8e683eca4625"
      unitRef="usd">98666000</spsc:PaymentsToAcquireBusinessesAndIntangibleAssetsNetOfCashAcquired>
    <us-gaap:NetCashProvidedByUsedInInvestingActivities
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83OS9mcmFnOjVmODNkZDllNzM4ZjRiNjBhN2YwM2VkNmM1ZmJkMDQ3L3RhYmxlOjU3MGQxNjYxOWQxZDRiMzU5YTdlNWU4YjE0ZjRjMjc4L3RhYmxlcmFuZ2U6NTcwZDE2NjE5ZDFkNGIzNTlhN2U1ZThiMTRmNGMyNzhfMjctMS0xLTEtMzAxNDA_5047d2a7-5c74-45f6-a1ed-3016500c9371"
      unitRef="usd">-112790000</us-gaap:NetCashProvidedByUsedInInvestingActivities>
    <us-gaap:NetCashProvidedByUsedInInvestingActivities
      contextRef="ie07f2822175c48edbb8d5559ceb82e6f_D20210101-20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83OS9mcmFnOjVmODNkZDllNzM4ZjRiNjBhN2YwM2VkNmM1ZmJkMDQ3L3RhYmxlOjU3MGQxNjYxOWQxZDRiMzU5YTdlNWU4YjE0ZjRjMjc4L3RhYmxlcmFuZ2U6NTcwZDE2NjE5ZDFkNGIzNTlhN2U1ZThiMTRmNGMyNzhfMjctMy0xLTEtMzAxNDA_ed6919d8-0dfc-49b2-9060-0cb6102e9979"
      unitRef="usd">-46703000</us-gaap:NetCashProvidedByUsedInInvestingActivities>
    <us-gaap:NetCashProvidedByUsedInInvestingActivities
      contextRef="i4751184d7e5948509cd8893fd49fb821_D20200101-20201231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83OS9mcmFnOjVmODNkZDllNzM4ZjRiNjBhN2YwM2VkNmM1ZmJkMDQ3L3RhYmxlOjU3MGQxNjYxOWQxZDRiMzU5YTdlNWU4YjE0ZjRjMjc4L3RhYmxlcmFuZ2U6NTcwZDE2NjE5ZDFkNGIzNTlhN2U1ZThiMTRmNGMyNzhfMjctNS0xLTEtMzAxNDA_c833e334-08e0-4ecc-894d-d65ef8eb042f"
      unitRef="usd">-120469000</us-gaap:NetCashProvidedByUsedInInvestingActivities>
    <us-gaap:PaymentsForRepurchaseOfCommonStock
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83OS9mcmFnOjVmODNkZDllNzM4ZjRiNjBhN2YwM2VkNmM1ZmJkMDQ3L3RhYmxlOjU3MGQxNjYxOWQxZDRiMzU5YTdlNWU4YjE0ZjRjMjc4L3RhYmxlcmFuZ2U6NTcwZDE2NjE5ZDFkNGIzNTlhN2U1ZThiMTRmNGMyNzhfMjktMS0xLTEtMzAxNDA_2d3b7e6a-249a-420b-88ce-f9efefc562f1"
      unitRef="usd">43215000</us-gaap:PaymentsForRepurchaseOfCommonStock>
    <us-gaap:PaymentsForRepurchaseOfCommonStock
      contextRef="ie07f2822175c48edbb8d5559ceb82e6f_D20210101-20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83OS9mcmFnOjVmODNkZDllNzM4ZjRiNjBhN2YwM2VkNmM1ZmJkMDQ3L3RhYmxlOjU3MGQxNjYxOWQxZDRiMzU5YTdlNWU4YjE0ZjRjMjc4L3RhYmxlcmFuZ2U6NTcwZDE2NjE5ZDFkNGIzNTlhN2U1ZThiMTRmNGMyNzhfMjktMy0xLTEtMzAxNDA_b447acc3-7179-4eb5-9d54-1b875be1a11f"
      unitRef="usd">20430000</us-gaap:PaymentsForRepurchaseOfCommonStock>
    <us-gaap:PaymentsForRepurchaseOfCommonStock
      contextRef="i4751184d7e5948509cd8893fd49fb821_D20200101-20201231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83OS9mcmFnOjVmODNkZDllNzM4ZjRiNjBhN2YwM2VkNmM1ZmJkMDQ3L3RhYmxlOjU3MGQxNjYxOWQxZDRiMzU5YTdlNWU4YjE0ZjRjMjc4L3RhYmxlcmFuZ2U6NTcwZDE2NjE5ZDFkNGIzNTlhN2U1ZThiMTRmNGMyNzhfMjktNS0xLTEtMzAxNDA_59243544-be8f-48a7-b728-bc47dbe1d6c5"
      unitRef="usd">18950000</us-gaap:PaymentsForRepurchaseOfCommonStock>
    <us-gaap:ProceedsFromStockOptionsExercised
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83OS9mcmFnOjVmODNkZDllNzM4ZjRiNjBhN2YwM2VkNmM1ZmJkMDQ3L3RhYmxlOjU3MGQxNjYxOWQxZDRiMzU5YTdlNWU4YjE0ZjRjMjc4L3RhYmxlcmFuZ2U6NTcwZDE2NjE5ZDFkNGIzNTlhN2U1ZThiMTRmNGMyNzhfMzAtMS0xLTEtMzAxNDA_adbfbe6c-bf26-4f4d-9d6d-eacc1f1f25fa"
      unitRef="usd">4908000</us-gaap:ProceedsFromStockOptionsExercised>
    <us-gaap:ProceedsFromStockOptionsExercised
      contextRef="ie07f2822175c48edbb8d5559ceb82e6f_D20210101-20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83OS9mcmFnOjVmODNkZDllNzM4ZjRiNjBhN2YwM2VkNmM1ZmJkMDQ3L3RhYmxlOjU3MGQxNjYxOWQxZDRiMzU5YTdlNWU4YjE0ZjRjMjc4L3RhYmxlcmFuZ2U6NTcwZDE2NjE5ZDFkNGIzNTlhN2U1ZThiMTRmNGMyNzhfMzAtMy0xLTEtMzAxNDA_e7584a45-0ee8-4700-9a93-dd2959607bf1"
      unitRef="usd">9374000</us-gaap:ProceedsFromStockOptionsExercised>
    <us-gaap:ProceedsFromStockOptionsExercised
      contextRef="i4751184d7e5948509cd8893fd49fb821_D20200101-20201231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83OS9mcmFnOjVmODNkZDllNzM4ZjRiNjBhN2YwM2VkNmM1ZmJkMDQ3L3RhYmxlOjU3MGQxNjYxOWQxZDRiMzU5YTdlNWU4YjE0ZjRjMjc4L3RhYmxlcmFuZ2U6NTcwZDE2NjE5ZDFkNGIzNTlhN2U1ZThiMTRmNGMyNzhfMzAtNS0xLTEtMzAxNDA_5d39a98a-f94f-49fd-be52-2468b7672443"
      unitRef="usd">18592000</us-gaap:ProceedsFromStockOptionsExercised>
    <us-gaap:ProceedsFromStockPlans
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83OS9mcmFnOjVmODNkZDllNzM4ZjRiNjBhN2YwM2VkNmM1ZmJkMDQ3L3RhYmxlOjU3MGQxNjYxOWQxZDRiMzU5YTdlNWU4YjE0ZjRjMjc4L3RhYmxlcmFuZ2U6NTcwZDE2NjE5ZDFkNGIzNTlhN2U1ZThiMTRmNGMyNzhfMzEtMS0xLTEtMzAxNDA_d60f6460-3ba9-4925-bfd0-9cef08ca9b76"
      unitRef="usd">6676000</us-gaap:ProceedsFromStockPlans>
    <us-gaap:ProceedsFromStockPlans
      contextRef="ie07f2822175c48edbb8d5559ceb82e6f_D20210101-20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83OS9mcmFnOjVmODNkZDllNzM4ZjRiNjBhN2YwM2VkNmM1ZmJkMDQ3L3RhYmxlOjU3MGQxNjYxOWQxZDRiMzU5YTdlNWU4YjE0ZjRjMjc4L3RhYmxlcmFuZ2U6NTcwZDE2NjE5ZDFkNGIzNTlhN2U1ZThiMTRmNGMyNzhfMzEtMy0xLTEtMzAxNDA_29a0d94c-2cd2-41a2-bdee-e80f8a5ca307"
      unitRef="usd">4737000</us-gaap:ProceedsFromStockPlans>
    <us-gaap:ProceedsFromStockPlans
      contextRef="i4751184d7e5948509cd8893fd49fb821_D20200101-20201231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83OS9mcmFnOjVmODNkZDllNzM4ZjRiNjBhN2YwM2VkNmM1ZmJkMDQ3L3RhYmxlOjU3MGQxNjYxOWQxZDRiMzU5YTdlNWU4YjE0ZjRjMjc4L3RhYmxlcmFuZ2U6NTcwZDE2NjE5ZDFkNGIzNTlhN2U1ZThiMTRmNGMyNzhfMzEtNS0xLTEtMzAxNDA_b33586e1-4cdf-4ef9-98d2-a79f02f7b1bb"
      unitRef="usd">3374000</us-gaap:ProceedsFromStockPlans>
    <us-gaap:PaymentForContingentConsiderationLiabilityFinancingActivities
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83OS9mcmFnOjVmODNkZDllNzM4ZjRiNjBhN2YwM2VkNmM1ZmJkMDQ3L3RhYmxlOjU3MGQxNjYxOWQxZDRiMzU5YTdlNWU4YjE0ZjRjMjc4L3RhYmxlcmFuZ2U6NTcwZDE2NjE5ZDFkNGIzNTlhN2U1ZThiMTRmNGMyNzhfMzItMS0xLTEtMzAxNDA_f4a264ab-7fec-411b-8203-f8645e85279f"
      unitRef="usd">0</us-gaap:PaymentForContingentConsiderationLiabilityFinancingActivities>
    <us-gaap:PaymentForContingentConsiderationLiabilityFinancingActivities
      contextRef="ie07f2822175c48edbb8d5559ceb82e6f_D20210101-20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83OS9mcmFnOjVmODNkZDllNzM4ZjRiNjBhN2YwM2VkNmM1ZmJkMDQ3L3RhYmxlOjU3MGQxNjYxOWQxZDRiMzU5YTdlNWU4YjE0ZjRjMjc4L3RhYmxlcmFuZ2U6NTcwZDE2NjE5ZDFkNGIzNTlhN2U1ZThiMTRmNGMyNzhfMzItMy0xLTEtMzAxNDA_20f22d28-9888-4635-9331-4fede63df848"
      unitRef="usd">2042000</us-gaap:PaymentForContingentConsiderationLiabilityFinancingActivities>
    <us-gaap:PaymentForContingentConsiderationLiabilityFinancingActivities
      contextRef="i4751184d7e5948509cd8893fd49fb821_D20200101-20201231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83OS9mcmFnOjVmODNkZDllNzM4ZjRiNjBhN2YwM2VkNmM1ZmJkMDQ3L3RhYmxlOjU3MGQxNjYxOWQxZDRiMzU5YTdlNWU4YjE0ZjRjMjc4L3RhYmxlcmFuZ2U6NTcwZDE2NjE5ZDFkNGIzNTlhN2U1ZThiMTRmNGMyNzhfMzItNS0xLTEtMzAxNDA_fde0ea34-a22f-4dd8-ba73-dac71e8cb29a"
      unitRef="usd">688000</us-gaap:PaymentForContingentConsiderationLiabilityFinancingActivities>
    <us-gaap:NetCashProvidedByUsedInFinancingActivities
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83OS9mcmFnOjVmODNkZDllNzM4ZjRiNjBhN2YwM2VkNmM1ZmJkMDQ3L3RhYmxlOjU3MGQxNjYxOWQxZDRiMzU5YTdlNWU4YjE0ZjRjMjc4L3RhYmxlcmFuZ2U6NTcwZDE2NjE5ZDFkNGIzNTlhN2U1ZThiMTRmNGMyNzhfMzMtMS0xLTEtMzAxNDA_a04e5609-3098-41b3-b13b-5a99e1f7e9af"
      unitRef="usd">-31631000</us-gaap:NetCashProvidedByUsedInFinancingActivities>
    <us-gaap:NetCashProvidedByUsedInFinancingActivities
      contextRef="ie07f2822175c48edbb8d5559ceb82e6f_D20210101-20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83OS9mcmFnOjVmODNkZDllNzM4ZjRiNjBhN2YwM2VkNmM1ZmJkMDQ3L3RhYmxlOjU3MGQxNjYxOWQxZDRiMzU5YTdlNWU4YjE0ZjRjMjc4L3RhYmxlcmFuZ2U6NTcwZDE2NjE5ZDFkNGIzNTlhN2U1ZThiMTRmNGMyNzhfMzMtMy0xLTEtMzAxNDA_2b19329d-b59e-4c09-8e56-e5e50c7ce009"
      unitRef="usd">-8361000</us-gaap:NetCashProvidedByUsedInFinancingActivities>
    <us-gaap:NetCashProvidedByUsedInFinancingActivities
      contextRef="i4751184d7e5948509cd8893fd49fb821_D20200101-20201231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83OS9mcmFnOjVmODNkZDllNzM4ZjRiNjBhN2YwM2VkNmM1ZmJkMDQ3L3RhYmxlOjU3MGQxNjYxOWQxZDRiMzU5YTdlNWU4YjE0ZjRjMjc4L3RhYmxlcmFuZ2U6NTcwZDE2NjE5ZDFkNGIzNTlhN2U1ZThiMTRmNGMyNzhfMzMtNS0xLTEtMzAxNDA_22590bd0-4e71-472c-babb-88d1535671c8"
      unitRef="usd">2328000</us-gaap:NetCashProvidedByUsedInFinancingActivities>
    <us-gaap:EffectOfExchangeRateOnCashCashEquivalentsRestrictedCashAndRestrictedCashEquivalentsIncludingDisposalGroupAndDiscontinuedOperations
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83OS9mcmFnOjVmODNkZDllNzM4ZjRiNjBhN2YwM2VkNmM1ZmJkMDQ3L3RhYmxlOjU3MGQxNjYxOWQxZDRiMzU5YTdlNWU4YjE0ZjRjMjc4L3RhYmxlcmFuZ2U6NTcwZDE2NjE5ZDFkNGIzNTlhN2U1ZThiMTRmNGMyNzhfMzQtMS0xLTEtMzAxNDA_148bf84a-f677-43e4-a367-725c81c7dffc"
      unitRef="usd">-290000</us-gaap:EffectOfExchangeRateOnCashCashEquivalentsRestrictedCashAndRestrictedCashEquivalentsIncludingDisposalGroupAndDiscontinuedOperations>
    <us-gaap:EffectOfExchangeRateOnCashCashEquivalentsRestrictedCashAndRestrictedCashEquivalentsIncludingDisposalGroupAndDiscontinuedOperations
      contextRef="ie07f2822175c48edbb8d5559ceb82e6f_D20210101-20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83OS9mcmFnOjVmODNkZDllNzM4ZjRiNjBhN2YwM2VkNmM1ZmJkMDQ3L3RhYmxlOjU3MGQxNjYxOWQxZDRiMzU5YTdlNWU4YjE0ZjRjMjc4L3RhYmxlcmFuZ2U6NTcwZDE2NjE5ZDFkNGIzNTlhN2U1ZThiMTRmNGMyNzhfMzQtMy0xLTEtMzAxNDA_698baeed-8882-47a1-a5b6-9d557be4f541"
      unitRef="usd">31000</us-gaap:EffectOfExchangeRateOnCashCashEquivalentsRestrictedCashAndRestrictedCashEquivalentsIncludingDisposalGroupAndDiscontinuedOperations>
    <us-gaap:EffectOfExchangeRateOnCashCashEquivalentsRestrictedCashAndRestrictedCashEquivalentsIncludingDisposalGroupAndDiscontinuedOperations
      contextRef="i4751184d7e5948509cd8893fd49fb821_D20200101-20201231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83OS9mcmFnOjVmODNkZDllNzM4ZjRiNjBhN2YwM2VkNmM1ZmJkMDQ3L3RhYmxlOjU3MGQxNjYxOWQxZDRiMzU5YTdlNWU4YjE0ZjRjMjc4L3RhYmxlcmFuZ2U6NTcwZDE2NjE5ZDFkNGIzNTlhN2U1ZThiMTRmNGMyNzhfMzQtNS0xLTEtMzAxNDA_2f10b8f5-f1b4-47fa-ab2a-0d5468fb124c"
      unitRef="usd">19000</us-gaap:EffectOfExchangeRateOnCashCashEquivalentsRestrictedCashAndRestrictedCashEquivalentsIncludingDisposalGroupAndDiscontinuedOperations>
    <us-gaap:CashCashEquivalentsRestrictedCashAndRestrictedCashEquivalentsPeriodIncreaseDecreaseIncludingExchangeRateEffect
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83OS9mcmFnOjVmODNkZDllNzM4ZjRiNjBhN2YwM2VkNmM1ZmJkMDQ3L3RhYmxlOjU3MGQxNjYxOWQxZDRiMzU5YTdlNWU4YjE0ZjRjMjc4L3RhYmxlcmFuZ2U6NTcwZDE2NjE5ZDFkNGIzNTlhN2U1ZThiMTRmNGMyNzhfMzUtMS0xLTEtMzAxNDA_85fda4dd-5e6f-4f41-b67f-af6c43875519"
      unitRef="usd">-44659000</us-gaap:CashCashEquivalentsRestrictedCashAndRestrictedCashEquivalentsPeriodIncreaseDecreaseIncludingExchangeRateEffect>
    <us-gaap:CashCashEquivalentsRestrictedCashAndRestrictedCashEquivalentsPeriodIncreaseDecreaseIncludingExchangeRateEffect
      contextRef="ie07f2822175c48edbb8d5559ceb82e6f_D20210101-20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83OS9mcmFnOjVmODNkZDllNzM4ZjRiNjBhN2YwM2VkNmM1ZmJkMDQ3L3RhYmxlOjU3MGQxNjYxOWQxZDRiMzU5YTdlNWU4YjE0ZjRjMjc4L3RhYmxlcmFuZ2U6NTcwZDE2NjE5ZDFkNGIzNTlhN2U1ZThiMTRmNGMyNzhfMzUtMy0xLTEtMzAxNDA_5da480c2-cd9b-4887-8007-b126864c05b4"
      unitRef="usd">57860000</us-gaap:CashCashEquivalentsRestrictedCashAndRestrictedCashEquivalentsPeriodIncreaseDecreaseIncludingExchangeRateEffect>
    <us-gaap:CashCashEquivalentsRestrictedCashAndRestrictedCashEquivalentsPeriodIncreaseDecreaseIncludingExchangeRateEffect
      contextRef="i4751184d7e5948509cd8893fd49fb821_D20200101-20201231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83OS9mcmFnOjVmODNkZDllNzM4ZjRiNjBhN2YwM2VkNmM1ZmJkMDQ3L3RhYmxlOjU3MGQxNjYxOWQxZDRiMzU5YTdlNWU4YjE0ZjRjMjc4L3RhYmxlcmFuZ2U6NTcwZDE2NjE5ZDFkNGIzNTlhN2U1ZThiMTRmNGMyNzhfMzUtNS0xLTEtMzAxNDA_f9c58710-befc-4124-b0d1-ebc5487090ea"
      unitRef="usd">-29560000</us-gaap:CashCashEquivalentsRestrictedCashAndRestrictedCashEquivalentsPeriodIncreaseDecreaseIncludingExchangeRateEffect>
    <us-gaap:CashCashEquivalentsRestrictedCashAndRestrictedCashEquivalentsIncludingDisposalGroupAndDiscontinuedOperations
      contextRef="i62ba0be1fd094d818a1f7d0d5504d1e2_I20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83OS9mcmFnOjVmODNkZDllNzM4ZjRiNjBhN2YwM2VkNmM1ZmJkMDQ3L3RhYmxlOjU3MGQxNjYxOWQxZDRiMzU5YTdlNWU4YjE0ZjRjMjc4L3RhYmxlcmFuZ2U6NTcwZDE2NjE5ZDFkNGIzNTlhN2U1ZThiMTRmNGMyNzhfMzYtMS0xLTEtMzAxNDA_e19ccea6-537f-46e0-bef4-b1096b524ec6"
      unitRef="usd">207552000</us-gaap:CashCashEquivalentsRestrictedCashAndRestrictedCashEquivalentsIncludingDisposalGroupAndDiscontinuedOperations>
    <us-gaap:CashCashEquivalentsRestrictedCashAndRestrictedCashEquivalentsIncludingDisposalGroupAndDiscontinuedOperations
      contextRef="i3ead637906154a2bab043152edc06771_I20201231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83OS9mcmFnOjVmODNkZDllNzM4ZjRiNjBhN2YwM2VkNmM1ZmJkMDQ3L3RhYmxlOjU3MGQxNjYxOWQxZDRiMzU5YTdlNWU4YjE0ZjRjMjc4L3RhYmxlcmFuZ2U6NTcwZDE2NjE5ZDFkNGIzNTlhN2U1ZThiMTRmNGMyNzhfMzYtMy0xLTEtMzAxNDA_ff70324c-e3d7-4732-a266-ebe60a47a215"
      unitRef="usd">149692000</us-gaap:CashCashEquivalentsRestrictedCashAndRestrictedCashEquivalentsIncludingDisposalGroupAndDiscontinuedOperations>
    <us-gaap:CashCashEquivalentsRestrictedCashAndRestrictedCashEquivalentsIncludingDisposalGroupAndDiscontinuedOperations
      contextRef="i489b2464c80746b9ae7427577897ad3e_I20191231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83OS9mcmFnOjVmODNkZDllNzM4ZjRiNjBhN2YwM2VkNmM1ZmJkMDQ3L3RhYmxlOjU3MGQxNjYxOWQxZDRiMzU5YTdlNWU4YjE0ZjRjMjc4L3RhYmxlcmFuZ2U6NTcwZDE2NjE5ZDFkNGIzNTlhN2U1ZThiMTRmNGMyNzhfMzYtNS0xLTEtMzAxNDA_f0f81150-cfb0-4f04-99a5-1fd075862b5b"
      unitRef="usd">179252000</us-gaap:CashCashEquivalentsRestrictedCashAndRestrictedCashEquivalentsIncludingDisposalGroupAndDiscontinuedOperations>
    <us-gaap:CashCashEquivalentsRestrictedCashAndRestrictedCashEquivalentsIncludingDisposalGroupAndDiscontinuedOperations
      contextRef="ibbc2d589a09c46368d9dd3e9ea8996c6_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83OS9mcmFnOjVmODNkZDllNzM4ZjRiNjBhN2YwM2VkNmM1ZmJkMDQ3L3RhYmxlOjU3MGQxNjYxOWQxZDRiMzU5YTdlNWU4YjE0ZjRjMjc4L3RhYmxlcmFuZ2U6NTcwZDE2NjE5ZDFkNGIzNTlhN2U1ZThiMTRmNGMyNzhfMzctMS0xLTEtMzAxNDA_3fb92cdf-54a2-404d-9c2b-82fa50362dc5"
      unitRef="usd">162893000</us-gaap:CashCashEquivalentsRestrictedCashAndRestrictedCashEquivalentsIncludingDisposalGroupAndDiscontinuedOperations>
    <us-gaap:CashCashEquivalentsRestrictedCashAndRestrictedCashEquivalentsIncludingDisposalGroupAndDiscontinuedOperations
      contextRef="i62ba0be1fd094d818a1f7d0d5504d1e2_I20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83OS9mcmFnOjVmODNkZDllNzM4ZjRiNjBhN2YwM2VkNmM1ZmJkMDQ3L3RhYmxlOjU3MGQxNjYxOWQxZDRiMzU5YTdlNWU4YjE0ZjRjMjc4L3RhYmxlcmFuZ2U6NTcwZDE2NjE5ZDFkNGIzNTlhN2U1ZThiMTRmNGMyNzhfMzctMy0xLTEtMzAxNDA_55264fb3-b362-4beb-8ce6-03b802e01dab"
      unitRef="usd">207552000</us-gaap:CashCashEquivalentsRestrictedCashAndRestrictedCashEquivalentsIncludingDisposalGroupAndDiscontinuedOperations>
    <us-gaap:CashCashEquivalentsRestrictedCashAndRestrictedCashEquivalentsIncludingDisposalGroupAndDiscontinuedOperations
      contextRef="i3ead637906154a2bab043152edc06771_I20201231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83OS9mcmFnOjVmODNkZDllNzM4ZjRiNjBhN2YwM2VkNmM1ZmJkMDQ3L3RhYmxlOjU3MGQxNjYxOWQxZDRiMzU5YTdlNWU4YjE0ZjRjMjc4L3RhYmxlcmFuZ2U6NTcwZDE2NjE5ZDFkNGIzNTlhN2U1ZThiMTRmNGMyNzhfMzctNS0xLTEtMzAxNDA_154d6bee-edbe-4435-a181-f937200a3914"
      unitRef="usd">149692000</us-gaap:CashCashEquivalentsRestrictedCashAndRestrictedCashEquivalentsIncludingDisposalGroupAndDiscontinuedOperations>
    <us-gaap:IncomeTaxesPaidNet
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83OS9mcmFnOjVmODNkZDllNzM4ZjRiNjBhN2YwM2VkNmM1ZmJkMDQ3L3RhYmxlOjU3MGQxNjYxOWQxZDRiMzU5YTdlNWU4YjE0ZjRjMjc4L3RhYmxlcmFuZ2U6NTcwZDE2NjE5ZDFkNGIzNTlhN2U1ZThiMTRmNGMyNzhfMzktMS0xLTEtMzAxNDA_0d339565-600e-4f0c-ae75-cb1f20a3c8c3"
      unitRef="usd">16076000</us-gaap:IncomeTaxesPaidNet>
    <us-gaap:IncomeTaxesPaidNet
      contextRef="ie07f2822175c48edbb8d5559ceb82e6f_D20210101-20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83OS9mcmFnOjVmODNkZDllNzM4ZjRiNjBhN2YwM2VkNmM1ZmJkMDQ3L3RhYmxlOjU3MGQxNjYxOWQxZDRiMzU5YTdlNWU4YjE0ZjRjMjc4L3RhYmxlcmFuZ2U6NTcwZDE2NjE5ZDFkNGIzNTlhN2U1ZThiMTRmNGMyNzhfMzktMy0xLTEtMzAxNDA_2c317de1-5ce0-4f3a-ad8c-4b81ce754f81"
      unitRef="usd">9979000</us-gaap:IncomeTaxesPaidNet>
    <us-gaap:IncomeTaxesPaidNet
      contextRef="i4751184d7e5948509cd8893fd49fb821_D20200101-20201231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83OS9mcmFnOjVmODNkZDllNzM4ZjRiNjBhN2YwM2VkNmM1ZmJkMDQ3L3RhYmxlOjU3MGQxNjYxOWQxZDRiMzU5YTdlNWU4YjE0ZjRjMjc4L3RhYmxlcmFuZ2U6NTcwZDE2NjE5ZDFkNGIzNTlhN2U1ZThiMTRmNGMyNzhfMzktNS0xLTEtMzAxNDA_d681dd10-3d2a-4dc0-ba60-fb6b7e785ed7"
      unitRef="usd">1656000</us-gaap:IncomeTaxesPaidNet>
    <spsc:NoncashOrPartNoncashAcquisitionContingentConsiderationLiability
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83OS9mcmFnOjVmODNkZDllNzM4ZjRiNjBhN2YwM2VkNmM1ZmJkMDQ3L3RhYmxlOjU3MGQxNjYxOWQxZDRiMzU5YTdlNWU4YjE0ZjRjMjc4L3RhYmxlcmFuZ2U6NTcwZDE2NjE5ZDFkNGIzNTlhN2U1ZThiMTRmNGMyNzhfNDEtMS0xLTEtOTc0NjM_f6b0e161-b8a9-4ed6-9843-9a1eda1e226f"
      unitRef="usd">2000000</spsc:NoncashOrPartNoncashAcquisitionContingentConsiderationLiability>
    <spsc:NoncashOrPartNoncashAcquisitionContingentConsiderationLiability
      contextRef="ie07f2822175c48edbb8d5559ceb82e6f_D20210101-20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83OS9mcmFnOjVmODNkZDllNzM4ZjRiNjBhN2YwM2VkNmM1ZmJkMDQ3L3RhYmxlOjU3MGQxNjYxOWQxZDRiMzU5YTdlNWU4YjE0ZjRjMjc4L3RhYmxlcmFuZ2U6NTcwZDE2NjE5ZDFkNGIzNTlhN2U1ZThiMTRmNGMyNzhfNDEtMy0xLTEtOTc0NjM_4b78137f-c899-4385-a9dc-e40033387dc1"
      unitRef="usd">0</spsc:NoncashOrPartNoncashAcquisitionContingentConsiderationLiability>
    <spsc:NoncashOrPartNoncashAcquisitionContingentConsiderationLiability
      contextRef="i4751184d7e5948509cd8893fd49fb821_D20200101-20201231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83OS9mcmFnOjVmODNkZDllNzM4ZjRiNjBhN2YwM2VkNmM1ZmJkMDQ3L3RhYmxlOjU3MGQxNjYxOWQxZDRiMzU5YTdlNWU4YjE0ZjRjMjc4L3RhYmxlcmFuZ2U6NTcwZDE2NjE5ZDFkNGIzNTlhN2U1ZThiMTRmNGMyNzhfNDEtNS0xLTEtOTc0NjM_7cb1aab3-a376-4327-a249-831fcb691651"
      unitRef="usd">0</spsc:NoncashOrPartNoncashAcquisitionContingentConsiderationLiability>
    <us-gaap:NoncashOrPartNoncashAcquisitionFixedAssetsAcquired1
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83OS9mcmFnOjVmODNkZDllNzM4ZjRiNjBhN2YwM2VkNmM1ZmJkMDQ3L3RhYmxlOjU3MGQxNjYxOWQxZDRiMzU5YTdlNWU4YjE0ZjRjMjc4L3RhYmxlcmFuZ2U6NTcwZDE2NjE5ZDFkNGIzNTlhN2U1ZThiMTRmNGMyNzhfNDEtMS0xLTEtMzAxNDA_25b56bed-06f0-4422-8a64-53c2d0b8203f"
      unitRef="usd">215000</us-gaap:NoncashOrPartNoncashAcquisitionFixedAssetsAcquired1>
    <us-gaap:NoncashOrPartNoncashAcquisitionFixedAssetsAcquired1
      contextRef="ie07f2822175c48edbb8d5559ceb82e6f_D20210101-20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83OS9mcmFnOjVmODNkZDllNzM4ZjRiNjBhN2YwM2VkNmM1ZmJkMDQ3L3RhYmxlOjU3MGQxNjYxOWQxZDRiMzU5YTdlNWU4YjE0ZjRjMjc4L3RhYmxlcmFuZ2U6NTcwZDE2NjE5ZDFkNGIzNTlhN2U1ZThiMTRmNGMyNzhfNDEtMy0xLTEtMzAxNDA_c92c1dff-8434-46c5-bda7-7edc273e6641"
      unitRef="usd">683000</us-gaap:NoncashOrPartNoncashAcquisitionFixedAssetsAcquired1>
    <us-gaap:NoncashOrPartNoncashAcquisitionFixedAssetsAcquired1
      contextRef="i4751184d7e5948509cd8893fd49fb821_D20200101-20201231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl83OS9mcmFnOjVmODNkZDllNzM4ZjRiNjBhN2YwM2VkNmM1ZmJkMDQ3L3RhYmxlOjU3MGQxNjYxOWQxZDRiMzU5YTdlNWU4YjE0ZjRjMjc4L3RhYmxlcmFuZ2U6NTcwZDE2NjE5ZDFkNGIzNTlhN2U1ZThiMTRmNGMyNzhfNDEtNS0xLTEtMzAxNDA_a099b665-0246-4272-bba2-61f9012cb526"
      unitRef="usd">551000</us-gaap:NoncashOrPartNoncashAcquisitionFixedAssetsAcquired1>
    <us-gaap:OrganizationConsolidationAndPresentationOfFinancialStatementsDisclosureTextBlock
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl84NS9mcmFnOmNjMDdhNjdkZTkzMTRiNTM4NTZmNzEwMmRhMDM4M2JkL3RleHRyZWdpb246Y2MwN2E2N2RlOTMxNGI1Mzg1NmY3MTAyZGEwMzgzYmRfMjA3MTE_4dd571b5-9bb4-49a0-a760-4ee9c3458c93">General&lt;div style="margin-top:6pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-style:italic;font-weight:700;line-height:120%"&gt;Business Description&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;SPS Commerce is a leading provider of cloud-based supply chain management services across our global retail network. Our products make it easier for retailers, grocers, distributors, suppliers, and logistics firms to communicate and collaborate by simplifying how they manage and share item, inventory, order and sales data across omnichannel retail channels. We deliver our products using a full-service model, which includes industry-leading technology and a team of experts that optimize, update, and operate the technology on customers' behalf.&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;Our products enable customers to increase supply chain performance, optimize inventory levels and sell-through, reduce operational costs, improve order visibility, and satisfy consumer demands for a seamless omnichannel experience.&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:18pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-style:italic;font-weight:700;line-height:120%"&gt;Basis of Presentation&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;The accompanying consolidated financial statements have been prepared in conformity with accounting principles generally accepted in the United States of America (&#x201c;GAAP&#x201d;) and include the accounts of SPS Commerce, Inc. and its subsidiaries. All intercompany accounts and transactions have been eliminated in the consolidated financial statements.&lt;/span&gt;&lt;span style="color:#000000;font-family:'Calibri',sans-serif;font-size:11pt;font-weight:400;line-height:120%"&gt; &lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:18pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-style:italic;font-weight:700;line-height:120%"&gt;Foreign Currency Translation&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;The functional currency of our foreign operations is generally the applicable local currency. The functional currency is translated into U.S. dollars for balance sheet accounts using current exchange rates in effect as of the balance sheet date and for revenue and expense accounts using an average exchange rate during the year. The translation adjustments are deferred as a component of other comprehensive income within the consolidated statements of comprehensive income and the consolidated statements of stockholders' equity. Gains or losses resulting from transactions denominated in foreign currencies are included in other income (expense), net in our consolidated statements of comprehensive income.&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:18pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-style:italic;font-weight:700;line-height:120%"&gt;Use of Estimates&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;Preparing financial statements in conformity with GAAP requires management to make estimates, judgments, and assumptions that affect the reported amounts of assets and liabilities, disclosure of contingent assets and liabilities at the date of the financial statements, and the reported amounts of revenues and expenses during the reporting periods. Actual results could differ from those estimates.&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:18pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-style:italic;font-weight:700;line-height:120%"&gt;Business Combinations&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;We allocate the fair value of purchase consideration to the tangible assets acquired, liabilities assumed, and intangible assets acquired based on their estimated fair values as of the acquisition date. The excess of the fair value of purchase consideration over the fair values of these identifiable assets and liabilities is recorded as goodwill. &lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;Assets acquired include tangible and intangible assets. We use estimates and assumptions that we believe are reasonable as a part of the purchase price allocation, which includes the process to determine the value and useful lives of purchased intangible assets and the process to determine the value of any contingent consideration liabilities. We record the acquisition-date fair value of any contingent liabilities, such as earn-out provisions, as part of the consideration transferred, if present. The unsettled earn-out liability, if any, is subsequently remeasured at each reporting date at fair value.&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;While we believe these estimates and assumptions are reasonable, they are inherently uncertain and subject to refinement. As a result, during the measurement period, which may be up to one year from the acquisition date, we may record adjustments to the fair value of the assets acquired and the liabilities assumed. Any such adjustments would be recorded as an offset to goodwill or a working capital purchase price adjustment as applicable. Upon the conclusion of the measurement period or final determination of the fair values, whichever comes first, any subsequent adjustments would be recorded in our consolidated statements of comprehensive income.&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:18pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-style:italic;font-weight:700;line-height:120%"&gt;Segment Information&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;Our Chief Executive Officer acts as the Company&#x2019;s chief operating decision maker and reviews financial information presented on a consolidated basis for purposes of allocating resources and evaluating financial performance. There are no segment managers who are held accountable by the chief operating decision maker, or anyone else, for operations, operating results and planning for levels or components below the consolidated unit level. Accordingly, we determined we have one operating and reportable segment, which is supply chain management products.&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:18pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-style:italic;font-weight:700;line-height:120%"&gt;Concentration of Credit Risk&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;Financial instruments that potentially subject us to concentrations of credit risk consist principally of cash and cash equivalents in financial institutions in excess of federally insured limits and accounts receivable. Cash and cash equivalents are held with financial institutions that we believe are subject to minimal risk.&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:18pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-style:italic;font-weight:700;line-height:120%"&gt;Cash and Cash Equivalents&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;Cash and cash equivalents consist of cash and highly liquid investments with original maturities of less than 90 days.&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:18pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-style:italic;font-weight:700;line-height:120%"&gt;Investments&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;From time to time, we invest in money market funds, certificates of deposit, and marketable securities such as commercial paper, highly liquid debt instruments of the U.S. government, and U.S. corporate debt securities. Investments with remaining maturities of less than one year from the balance sheet date are classified as short-term investments whereas those with remaining maturities of more than one year from the balance sheet date are classified as investments, non-current. &lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;Securities classified as available for sale are carried at fair value and the unrealized gains and losses on these investments, net of taxes, are included in accumulated other comprehensive loss in the consolidated balance sheets. Realized gains or losses are included in other income (expense), net in the consolidated statements of comprehensive income. Certain securities accrue interest that is included in other income (expense), net. When a determination has been made that the fair value of a marketable security is below its amortized cost basis, the portion of the unrealized loss that corresponds to a credit-related factor is realized through a credit allowance on the marketable security and the equivalent expense is realized in other income (expense), net in the consolidated statements of comprehensive income.&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:18pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-style:italic;font-weight:700;line-height:120%"&gt;Fair Value Measurements&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;The carrying amounts of our short-term financial instruments, which include cash, cash equivalents, accounts receivable, and accounts payable, approximates fair value due to their short-term nature. &lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-style:italic;font-weight:400;line-height:120%"&gt;Recurring Fair Value Measurements&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;We measure certain financial assets at fair value on a recurring basis based on a fair value hierarchy that requires us to maximize the use of observable inputs and minimize the use of unobservable inputs when measuring fair value. A financial instrument&#x2019;s categorization within the fair value hierarchy is based upon the lowest level of input that is significant to the fair value measurement. The three levels of inputs that are used to measure fair value are:&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;padding-left:54pt;text-indent:-27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;&#x2022;&lt;/span&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%;padding-left:23.5pt"&gt;Level 1 &#x2013; quoted prices in active markets for identical assets or liabilities.&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;padding-left:54pt;text-indent:-27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;&#x2022;&lt;/span&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%;padding-left:23.5pt"&gt;Level 2 &#x2013; observable inputs other than Level 1 prices, such as (a) quoted prices for similar assets or liabilities, (b) quoted prices in markets with insufficient volume or infrequent transactions (less active markets), or (c) model-derived valuations in which all significant inputs are observable or can be derived principally from or corroborated by observable market data for substantially the full term of the assets or liabilities. &lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;padding-left:54pt;text-indent:-27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;&#x2022;&lt;/span&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%;padding-left:23.5pt"&gt;Level 3 &#x2013; unobservable inputs to the valuation methodology that are significant to the measurement of fair value of assets or liabilities.&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:18pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-style:italic;font-weight:400;line-height:120%"&gt;Nonrecurring Fair Value Measurements&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;We measure certain assets and liabilities at fair value on a nonrecurring basis, including long-lived assets, goodwill, and indefinite-lived intangible assets.&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:18pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-style:italic;font-weight:700;line-height:120%"&gt;Accounts Receivable&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;Accounts receivable are initially recorded upon the sale and invoicing of products to customers. Credit is granted in the normal course of business without collateral. Accounts receivable are stated net of allowances for credit losses, which represent estimated losses resulting from customers not making required payments on accounts receivables. When determining the allowance, we pool our outstanding accounts receivable invoices based on the contractual due date of payment. We take several factors into consideration for estimated credit losses by pool, primarily our historical credit losses, with additional adjustments made for current and future macro-economic conditions and retail bankruptcy trends. We write-off accounts receivable when they are determined to be uncollectible. Changes in the allowance are recorded as bad debt expense and are included in general and administrative expense in our consolidated statements of comprehensive income.&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:18pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-style:italic;font-weight:700;line-height:120%"&gt;Property and Equipment&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;Property and equipment, including assets acquired under lease obligations, are stated at cost, net of accumulated depreciation and amortization. Depreciation and amortization expense is calculated using the straight-line method over the estimated useful lives when placed in service.&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;We capitalize and amortize eligible costs to acquire or generate internally developed software that are incurred during the application development stage. Costs incurred during the preliminary project stage and post-implementation stage are expensed as incurred. Amortization expense for internally developed software is calculated using the straight-line method over the estimated useful life, commencing on the date when the asset is ready for its intended use.&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;The estimated useful lives of property and equipment were as follows:&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-align:center"&gt;&lt;table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"&gt;&lt;tr&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:36.324%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:61.476%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="3" style="padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;Estimated Useful Life&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Internally developed software&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;3 years&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Computer equipment&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;div style="text-align:center"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;2-3 years&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Office equipment and furniture&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;div style="text-align:center"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;5-7 years&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Leasehold improvements&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Shorter of the useful life of the asset or the remaining term of the lease&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;Significant additions or improvements extending asset lives beyond one year are capitalized, while repairs and maintenance are charged to expense as incurred.&lt;/span&gt;&lt;span style="color:#000000;font-family:'Calibri',sans-serif;font-size:11pt;font-weight:400;line-height:120%"&gt; &lt;/span&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;The assets and related accumulated depreciation and amortization are adjusted for asset retirements and disposals with the resulting gain or loss included in our consolidated statements of comprehensive income.&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;Maintenance of internally developed software are expensed as incurred. The assets and related accumulated amortization are adjusted for abandoned internally developed software with the resulting loss included in our consolidated statements of comprehensive income.&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:18pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-style:italic;font-weight:700;line-height:120%"&gt;Leases&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;We determine if an arrangement is a lease at inception. Operating leases are included in operating lease right-of-use assets, current operating lease liabilities, and non-current operating lease liabilities in our consolidated balance sheets.&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;Right-of-use (&#x201c;ROU&#x201d;) assets represent our right to use an underlying asset for the lease term and lease liabilities represent our obligation to make lease payments arising from the lease. Operating lease ROU assets and liabilities are recognized at commencement date based on the present value of lease payments over the lease term. We use the implicit interest rate when readily determinable. We estimate the discount rate for a similar collateralized asset by estimating costs of borrowing. The operating lease ROU asset also includes any lease payments made and lease incentives that have been incurred. The options to extend our leases are not recognized as part of our ROU assets and lease liabilities unless it is reasonably certain that we will exercise that option. Lease expense for lease payments is recognized on a straight-line basis over the lease term. For all leases, we combine non-lease components with the related lease components and account for it as a single lease component. The ROU assets are subject to the same impairment process as our long-lived assets. Additionally, we review our lease liabilities for remeasurement whenever there is a triggering event or when relevant facts and circumstances change.&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:18pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-style:italic;font-weight:700;line-height:120%"&gt;Research and Development&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;Research and development costs primarily include development, maintenance, and data conversion activities related to our cloud-based supply chain management products and are expensed as incurred. Research and development costs are net of amounts capitalized as developed software.&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:18pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-style:italic;font-weight:700;line-height:120%"&gt;Goodwill&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;Goodwill represents the excess of the purchase price over the fair value of identifiable net assets acquired in business combinations. Goodwill is attributed to a trained workforce and other buyer-specific value resulting from expected synergies, including long-term cost savings, which are not included in the fair values of identifiable assets. &lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;We test goodwill for impairment annually at November 30, or more frequently if events or changes in circumstances indicate that the asset might be impaired. The impairment test is conducted by comparing the fair value of the net assets with the carrying amount of the reporting unit. We determine the fair value of the reporting unit based on our market capitalization at the testing date. If the carrying amount exceeds the fair value of the reporting unit, we would recognize an impairment loss in the consolidated statements of comprehensive income, to the extent that the carrying amount exceeds fair value. &lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:18pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-style:italic;font-weight:700;line-height:120%"&gt;Intangible Assets&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;Assets acquired in business combinations may include identifiable intangible assets such as subscriber relationships and developed technology. We recognize the fair value of the identifiable intangible assets acquired separately from goodwill. We have determined the fair value and useful lives of our purchased intangible assets using certain estimates and assumptions that we believe are reasonable.&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;The purchased intangible assets are being amortized on a straight-line basis over their estimated useful lives.&lt;/span&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:11pt;font-weight:400;line-height:120%"&gt; &lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;The estimated useful lives for intangible were as follows:&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-align:center"&gt;&lt;table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"&gt;&lt;tr&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:48.900%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:48.900%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="3" style="padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;Estimated Useful Life&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#CFF0FC;padding:2px 1pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Subscriber relationships&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cff0fc;border-top:0.75pt solid #000000;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;div style="text-align:center"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;7-10 years&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Developed technology&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;div style="text-align:center"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;3-10 years&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;div style="margin-top:18pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-style:italic;font-weight:700;line-height:120%"&gt;Impairment of Long-Lived Assets&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;We review our long-lived assets for impairment whenever events or changes in circumstances indicate that the carrying amount may not be recoverable. The carrying amount of a long-lived asset is not recoverable if the carrying amount of an asset group exceeds the sum of the undiscounted cash flows expected to result from the use and eventual disposition of the assets at the date it is tested for recoverability, whether in use or under development. An impairment loss is measured and recorded as an expense in the consolidated statements of comprehensive income as the amount by which the carrying amount of a long-lived asset exceeds its fair value.&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:18pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-style:italic;font-weight:700;line-height:120%"&gt;Revenue Recognition&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;Revenues are the amount that reflects the consideration we are contractually and legally entitled to, as well as the amount we expect to collect, in exchange for those services.&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;We determine revenue recognition through the following steps:&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;padding-left:54pt;text-indent:-27pt"&gt;&lt;span style="color:#000000;font-family:'Arial',sans-serif;font-size:12pt;font-weight:400;line-height:120%"&gt;&#x2022;&lt;/span&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%;padding-left:22.8pt"&gt;Identification of the contract, or contracts, with a customer &lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;padding-left:54pt;text-indent:-27pt"&gt;&lt;span style="color:#000000;font-family:'Arial',sans-serif;font-size:12pt;font-weight:400;line-height:120%"&gt;&#x2022;&lt;/span&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%;padding-left:22.8pt"&gt;Identification of the performance obligations in the contract &lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;padding-left:54pt;text-indent:-27pt"&gt;&lt;span style="color:#000000;font-family:'Arial',sans-serif;font-size:12pt;font-weight:400;line-height:120%"&gt;&#x2022;&lt;/span&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%;padding-left:22.8pt"&gt;Determination of the transaction price &lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;padding-left:54pt;text-indent:-27pt"&gt;&lt;span style="color:#000000;font-family:'Arial',sans-serif;font-size:12pt;font-weight:400;line-height:120%"&gt;&#x2022;&lt;/span&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%;padding-left:22.8pt"&gt;Allocation of the transaction price to the performance obligations in the contract &lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;padding-left:54pt;text-indent:-27pt"&gt;&lt;span style="color:#000000;font-family:'Arial',sans-serif;font-size:12pt;font-weight:400;line-height:120%"&gt;&#x2022;&lt;/span&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%;padding-left:22.8pt"&gt;Recognition of revenue when, or as, we satisfy a performance obligation&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;See Note C for further descriptions of our revenue recognition policy.&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:18pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-style:italic;font-weight:700;line-height:120%"&gt;Deferred Costs&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;Deferred costs are those that are incurred to fulfill or obtain customer contracts and that are considered incremental and recoverable costs. These consist primarily of customer implementation costs, commissions paid to sales personnel and referral partners, respectively. These costs are deferred and amortized over the expected period of benefit which we have determined to be two years.&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;Customer implementation costs are based on actual costs&lt;/span&gt;&lt;span style="color:#000000;font-family:'Calibri',sans-serif;font-size:11pt;font-weight:400;line-height:120%"&gt; &lt;/span&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;incurred. Related amortization expense is included in cost of revenues in the consolidated statements of comprehensive income.&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;Sales commissions are calculated based on estimated annual recurring revenue to be generated over the customer&#x2019;s initial contract period. Related amortization expense is included in sales and marketing expenses in the consolidated statements of comprehensive income.&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:18pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-style:italic;font-weight:700;line-height:120%"&gt;Stock-Based Compensation&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;Stock-based compensation includes grants of incentive and nonqualified stock options, performance share units (&#x201c;PSUs&#x201d;), restricted stock awards (&#x201c;RSAs&#x201d;), restricted stock units (&#x201c;RSUs&#x201d;), deferred stock units (&#x201c;DSUs&#x201d;), employee stock purchase plan (&#x201c;ESPP&#x201d;) activity, and 401(k) stock match and is used to compensate employees, executive officers, and non-employee directors. &lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;We recognize the cost of all stock-based payments based on the grant date fair value of those awards. This cost is recognized over the period for which an employee is required to provide service in exchange for the award or the award performance period,&lt;/span&gt;&lt;span style="color:#000000;font-family:'Calibri',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt; &lt;/span&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;except for expenses relating to retirement-eligible employees that have not given their required notice, which is recognized on a pro-rata basis over the notice period prior to retirement. For all awards, we recognize forfeitures as they occur.&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;RSAs result in the issuance of new shares when granted. For other stock-based awards, new shares are issued when the award is exercised, vested, or released according to the terms of the agreement.&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;Our ESPP allows participating employees to purchase shares of our common stock at a discount through payroll deductions. The plan is available to all employees subject to certain eligibility requirements. Participating employees may purchase common stock, on a voluntary after-tax basis, at a price that is the lower of 85% of the fair market value of our common stock at the beginning or end of each stock purchase period. The plan is a Type B plan, so the number of shares a participants can acquire is variable. Participants purchase more shares as the stock price decreases, up to the total amount originally elected to withhold at the beginning of the offering period. The plan consists of two six-month offering periods, beginning on January 1 and July 1 of each calendar year.&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;The fair value of stock options and ESPP activity is estimated using the Black-Scholes option valuation model. The fair value for RSAs, RSUs, and DSUs is the closing market value of the underlying stock on the date of grant less the purchase price (if any). The fair value of PSUs is estimated using a Monte Carlo simulation. &lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;Judgment is required in determining the expected volatility of common stock and the expected term individuals will hold their share-based awards prior to exercising. The expected volatility of the options is based on the historical volatility of our common stock. The expected term of the options is derived from historical data on option holder exercises and post-vesting employment termination behavior.&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;Additional valuation inputs include our expected non-issuance of future common stock dividends and the risk-free interest rate that is based on the U.S. Treasury rates at the date of grant with maturity dates approximately equaling the expected life at the grant date. For PSUs, the Monte Carlo simulation utilizes multiple input variables that determine the probability of satisfying the performance conditions stipulated in the award. &lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:18pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-style:italic;font-weight:700;line-height:120%"&gt;Income Taxes&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;We account for income taxes using the asset and liability method, which requires recognition of deferred tax assets and liabilities for the expected future tax consequences of events that have been included in the consolidated financial statements. Under this method, deferred tax assets and liabilities are determined based on the difference between the financial statement and tax basis of assets and liabilities using enacted tax rates in effect for the year in which the differences are expected to reverse. Deferred tax assets are reduced by a valuation allowance when, in our judgment, it is more likely than not that some or all of the deferred tax asset will not be realized. Deferred tax positions are net by jurisdiction on the consolidated balance sheet.&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;We assess our ability to realize our deferred tax assets at the end of each reporting period. Realization of our deferred tax assets is contingent upon future taxable earnings. Accordingly, this assessment requires estimates and judgment. If the estimates of future taxable income vary from actual results, our assessment regarding the realization of these deferred tax assets could change. Future changes in the estimated amount of deferred taxes expected to be realized will be reflected in our consolidated financial statements in the period the estimate is changed, with a corresponding adjustment to our operating results.&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;We recognize the financial statement benefit of a tax position only after determining that the relevant tax authority would &#x201c;more likely than not&#x201d; sustain the position following an audit. For tax positions meeting the &#x201c;more likely than not&#x201d; threshold, the amount recognized in the financial statements is the largest benefit that has a greater than 50% likelihood of being realized upon ultimate settlement with the relevant tax authority.&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;It is our practice to recognize interest and penalties accrued on any unrecognized tax benefits as a component of income tax expense.&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:18pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-style:italic;font-weight:700;line-height:120%"&gt;Net Income Per Share&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;Basic net income per share has been computed using the weighted average number of shares of common stock outstanding during each period. Diluted net income per share also includes the impact of our outstanding potential common shares, including options, RSAs, RSUs, PSUs, and DSUs. Potential common shares that are anti-dilutive are excluded from the calculation of diluted net income per share.&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:18pt"&gt;&lt;span style="background-color:#ffffff;color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-style:italic;font-weight:700;line-height:120%"&gt;Accounting Pronouncements Not Yet Adopted&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-align:center"&gt;&lt;table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"&gt;&lt;tr&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:22.081%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.081%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:26.172%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.081%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:22.085%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;Standard&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;Date of Issuance&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;Description&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;Date of Required Adoption&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;Effect on the Financial Statements&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt;text-align:left;vertical-align:top"&gt;&lt;div style="margin-top:0.75pt;text-align:center"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:700;line-height:115%"&gt;ASU 2021-08&lt;/span&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:115%"&gt;, Business Combinations (Topic 805) - Accounting for Contract Assets and Contract Liabilities from Contracts with Customers&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;October 2021&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt;text-align:left;vertical-align:top"&gt;&lt;div style="margin-top:0.75pt;text-align:center"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:115%"&gt;This amendment requires that an acquirer recognize and measure contract assets and contract liabilities acquired in a business combination in accordance with Topic 606, effective for all business combinations in the year of adoption and thereafter.&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;January 2023&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;The adoption of this standard may have a material impact on the purchase accounting for business combinations depending on the specific amount of contract assets and liabilities being acquired.&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;</us-gaap:OrganizationConsolidationAndPresentationOfFinancialStatementsDisclosureTextBlock>
    <spsc:BusinessDescriptionPolicyPolicyTextBlock
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl84NS9mcmFnOmNjMDdhNjdkZTkzMTRiNTM4NTZmNzEwMmRhMDM4M2JkL3RleHRyZWdpb246Y2MwN2E2N2RlOTMxNGI1Mzg1NmY3MTAyZGEwMzgzYmRfMjA3MTc_b5984ea6-407d-4ace-955e-92a6e1d12952">&lt;div style="margin-top:6pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-style:italic;font-weight:700;line-height:120%"&gt;Business Description&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;SPS Commerce is a leading provider of cloud-based supply chain management services across our global retail network. Our products make it easier for retailers, grocers, distributors, suppliers, and logistics firms to communicate and collaborate by simplifying how they manage and share item, inventory, order and sales data across omnichannel retail channels. We deliver our products using a full-service model, which includes industry-leading technology and a team of experts that optimize, update, and operate the technology on customers' behalf.&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;Our products enable customers to increase supply chain performance, optimize inventory levels and sell-through, reduce operational costs, improve order visibility, and satisfy consumer demands for a seamless omnichannel experience.&lt;/span&gt;&lt;/div&gt;</spsc:BusinessDescriptionPolicyPolicyTextBlock>
    <us-gaap:BasisOfAccountingPolicyPolicyTextBlock
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl84NS9mcmFnOmNjMDdhNjdkZTkzMTRiNTM4NTZmNzEwMmRhMDM4M2JkL3RleHRyZWdpb246Y2MwN2E2N2RlOTMxNGI1Mzg1NmY3MTAyZGEwMzgzYmRfMjc0ODc3OTExMDIwMQ_f3cb278c-caa9-4c49-bbb8-56ec8fb290ec">Basis of PresentationThe accompanying consolidated financial statements have been prepared in conformity with accounting principles generally accepted in the United States of America (&#x201c;GAAP&#x201d;) and include the accounts of SPS Commerce, Inc. and its subsidiaries. All intercompany accounts and transactions have been eliminated in the consolidated financial statements.</us-gaap:BasisOfAccountingPolicyPolicyTextBlock>
    <us-gaap:ForeignCurrencyTransactionsAndTranslationsPolicyTextBlock
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl84NS9mcmFnOmNjMDdhNjdkZTkzMTRiNTM4NTZmNzEwMmRhMDM4M2JkL3RleHRyZWdpb246Y2MwN2E2N2RlOTMxNGI1Mzg1NmY3MTAyZGEwMzgzYmRfMjA3MTg_4e851dd6-0304-4253-89d5-49dddc90c3f7">&lt;div style="margin-top:18pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-style:italic;font-weight:700;line-height:120%"&gt;Foreign Currency Translation&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;The functional currency of our foreign operations is generally the applicable local currency. The functional currency is translated into U.S. dollars for balance sheet accounts using current exchange rates in effect as of the balance sheet date and for revenue and expense accounts using an average exchange rate during the year. The translation adjustments are deferred as a component of other comprehensive income within the consolidated statements of comprehensive income and the consolidated statements of stockholders' equity. Gains or losses resulting from transactions denominated in foreign currencies are included in other income (expense), net in our consolidated statements of comprehensive income.&lt;/span&gt;&lt;/div&gt;</us-gaap:ForeignCurrencyTransactionsAndTranslationsPolicyTextBlock>
    <us-gaap:UseOfEstimates
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl84NS9mcmFnOmNjMDdhNjdkZTkzMTRiNTM4NTZmNzEwMmRhMDM4M2JkL3RleHRyZWdpb246Y2MwN2E2N2RlOTMxNGI1Mzg1NmY3MTAyZGEwMzgzYmRfMjA2OTc_84866cc2-a8ef-42d2-a875-3f4c58c49d57">&lt;div style="margin-top:18pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-style:italic;font-weight:700;line-height:120%"&gt;Use of Estimates&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;Preparing financial statements in conformity with GAAP requires management to make estimates, judgments, and assumptions that affect the reported amounts of assets and liabilities, disclosure of contingent assets and liabilities at the date of the financial statements, and the reported amounts of revenues and expenses during the reporting periods. Actual results could differ from those estimates.&lt;/span&gt;&lt;/div&gt;</us-gaap:UseOfEstimates>
    <us-gaap:BusinessCombinationsPolicy
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl84NS9mcmFnOmNjMDdhNjdkZTkzMTRiNTM4NTZmNzEwMmRhMDM4M2JkL3RleHRyZWdpb246Y2MwN2E2N2RlOTMxNGI1Mzg1NmY3MTAyZGEwMzgzYmRfMjA3MTI_7b7801c8-8e5d-4636-8396-ab6042afc04a">&lt;div style="margin-top:18pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-style:italic;font-weight:700;line-height:120%"&gt;Business Combinations&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;We allocate the fair value of purchase consideration to the tangible assets acquired, liabilities assumed, and intangible assets acquired based on their estimated fair values as of the acquisition date. The excess of the fair value of purchase consideration over the fair values of these identifiable assets and liabilities is recorded as goodwill. &lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;Assets acquired include tangible and intangible assets. We use estimates and assumptions that we believe are reasonable as a part of the purchase price allocation, which includes the process to determine the value and useful lives of purchased intangible assets and the process to determine the value of any contingent consideration liabilities. We record the acquisition-date fair value of any contingent liabilities, such as earn-out provisions, as part of the consideration transferred, if present. The unsettled earn-out liability, if any, is subsequently remeasured at each reporting date at fair value.&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;While we believe these estimates and assumptions are reasonable, they are inherently uncertain and subject to refinement. As a result, during the measurement period, which may be up to one year from the acquisition date, we may record adjustments to the fair value of the assets acquired and the liabilities assumed. Any such adjustments would be recorded as an offset to goodwill or a working capital purchase price adjustment as applicable. Upon the conclusion of the measurement period or final determination of the fair values, whichever comes first, any subsequent adjustments would be recorded in our consolidated statements of comprehensive income.&lt;/span&gt;&lt;/div&gt;</us-gaap:BusinessCombinationsPolicy>
    <us-gaap:SegmentReportingPolicyPolicyTextBlock
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl84NS9mcmFnOmNjMDdhNjdkZTkzMTRiNTM4NTZmNzEwMmRhMDM4M2JkL3RleHRyZWdpb246Y2MwN2E2N2RlOTMxNGI1Mzg1NmY3MTAyZGEwMzgzYmRfMjA3MDA_6e838a38-70b9-4530-b642-c6b1317ee23a">&lt;div style="margin-top:18pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-style:italic;font-weight:700;line-height:120%"&gt;Segment Information&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;Our Chief Executive Officer acts as the Company&#x2019;s chief operating decision maker and reviews financial information presented on a consolidated basis for purposes of allocating resources and evaluating financial performance. There are no segment managers who are held accountable by the chief operating decision maker, or anyone else, for operations, operating results and planning for levels or components below the consolidated unit level. Accordingly, we determined we have one operating and reportable segment, which is supply chain management products.&lt;/span&gt;&lt;/div&gt;</us-gaap:SegmentReportingPolicyPolicyTextBlock>
    <us-gaap:NumberOfOperatingSegments
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      decimals="INF"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl84NS9mcmFnOmNjMDdhNjdkZTkzMTRiNTM4NTZmNzEwMmRhMDM4M2JkL3RleHRyZWdpb246Y2MwN2E2N2RlOTMxNGI1Mzg1NmY3MTAyZGEwMzgzYmRfNTE1NA_8f649bdf-5182-4cc1-a23b-f80c50fc79cd"
      unitRef="segment">1</us-gaap:NumberOfOperatingSegments>
    <us-gaap:NumberOfReportableSegments
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      decimals="INF"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl84NS9mcmFnOmNjMDdhNjdkZTkzMTRiNTM4NTZmNzEwMmRhMDM4M2JkL3RleHRyZWdpb246Y2MwN2E2N2RlOTMxNGI1Mzg1NmY3MTAyZGEwMzgzYmRfNTE1NA_a0e34ade-e949-46b1-80eb-9c5e2d8c6ac9"
      unitRef="segment">1</us-gaap:NumberOfReportableSegments>
    <us-gaap:ConcentrationRiskCreditRisk
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl84NS9mcmFnOmNjMDdhNjdkZTkzMTRiNTM4NTZmNzEwMmRhMDM4M2JkL3RleHRyZWdpb246Y2MwN2E2N2RlOTMxNGI1Mzg1NmY3MTAyZGEwMzgzYmRfMjA3MTM_91a5971c-bfad-4469-b479-3cb5a3b419ed">&lt;div style="margin-top:18pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-style:italic;font-weight:700;line-height:120%"&gt;Concentration of Credit Risk&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;Financial instruments that potentially subject us to concentrations of credit risk consist principally of cash and cash equivalents in financial institutions in excess of federally insured limits and accounts receivable. Cash and cash equivalents are held with financial institutions that we believe are subject to minimal risk.&lt;/span&gt;&lt;/div&gt;</us-gaap:ConcentrationRiskCreditRisk>
    <us-gaap:CashAndCashEquivalentsPolicyTextBlock
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl84NS9mcmFnOmNjMDdhNjdkZTkzMTRiNTM4NTZmNzEwMmRhMDM4M2JkL3RleHRyZWdpb246Y2MwN2E2N2RlOTMxNGI1Mzg1NmY3MTAyZGEwMzgzYmRfMjA3MjI_1f8c8087-104b-437a-9ccf-12108b25532b">&lt;div style="margin-top:18pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-style:italic;font-weight:700;line-height:120%"&gt;Cash and Cash Equivalents&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;Cash and cash equivalents consist of cash and highly liquid investments with original maturities of less than 90 days.&lt;/span&gt;&lt;/div&gt;</us-gaap:CashAndCashEquivalentsPolicyTextBlock>
    <us-gaap:InvestmentPolicyTextBlock
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl84NS9mcmFnOmNjMDdhNjdkZTkzMTRiNTM4NTZmNzEwMmRhMDM4M2JkL3RleHRyZWdpb246Y2MwN2E2N2RlOTMxNGI1Mzg1NmY3MTAyZGEwMzgzYmRfMjA3MDk_eec5f186-057e-4c2d-8c81-50b06cebfc16">&lt;div style="margin-top:18pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-style:italic;font-weight:700;line-height:120%"&gt;Investments&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;From time to time, we invest in money market funds, certificates of deposit, and marketable securities such as commercial paper, highly liquid debt instruments of the U.S. government, and U.S. corporate debt securities. Investments with remaining maturities of less than one year from the balance sheet date are classified as short-term investments whereas those with remaining maturities of more than one year from the balance sheet date are classified as investments, non-current. &lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;Securities classified as available for sale are carried at fair value and the unrealized gains and losses on these investments, net of taxes, are included in accumulated other comprehensive loss in the consolidated balance sheets. Realized gains or losses are included in other income (expense), net in the consolidated statements of comprehensive income. Certain securities accrue interest that is included in other income (expense), net. When a determination has been made that the fair value of a marketable security is below its amortized cost basis, the portion of the unrealized loss that corresponds to a credit-related factor is realized through a credit allowance on the marketable security and the equivalent expense is realized in other income (expense), net in the consolidated statements of comprehensive income.&lt;/span&gt;&lt;/div&gt;</us-gaap:InvestmentPolicyTextBlock>
    <us-gaap:FairValueOfFinancialInstrumentsPolicy
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl84NS9mcmFnOmNjMDdhNjdkZTkzMTRiNTM4NTZmNzEwMmRhMDM4M2JkL3RleHRyZWdpb246Y2MwN2E2N2RlOTMxNGI1Mzg1NmY3MTAyZGEwMzgzYmRfMjA3MTk_fbaf84a8-1670-4b93-9d19-62f26b4bf16b">&lt;div style="margin-top:18pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-style:italic;font-weight:700;line-height:120%"&gt;Fair Value Measurements&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;The carrying amounts of our short-term financial instruments, which include cash, cash equivalents, accounts receivable, and accounts payable, approximates fair value due to their short-term nature. &lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-style:italic;font-weight:400;line-height:120%"&gt;Recurring Fair Value Measurements&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;We measure certain financial assets at fair value on a recurring basis based on a fair value hierarchy that requires us to maximize the use of observable inputs and minimize the use of unobservable inputs when measuring fair value. A financial instrument&#x2019;s categorization within the fair value hierarchy is based upon the lowest level of input that is significant to the fair value measurement. The three levels of inputs that are used to measure fair value are:&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;padding-left:54pt;text-indent:-27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;&#x2022;&lt;/span&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%;padding-left:23.5pt"&gt;Level 1 &#x2013; quoted prices in active markets for identical assets or liabilities.&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;padding-left:54pt;text-indent:-27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;&#x2022;&lt;/span&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%;padding-left:23.5pt"&gt;Level 2 &#x2013; observable inputs other than Level 1 prices, such as (a) quoted prices for similar assets or liabilities, (b) quoted prices in markets with insufficient volume or infrequent transactions (less active markets), or (c) model-derived valuations in which all significant inputs are observable or can be derived principally from or corroborated by observable market data for substantially the full term of the assets or liabilities. &lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;padding-left:54pt;text-indent:-27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;&#x2022;&lt;/span&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%;padding-left:23.5pt"&gt;Level 3 &#x2013; unobservable inputs to the valuation methodology that are significant to the measurement of fair value of assets or liabilities.&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:18pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-style:italic;font-weight:400;line-height:120%"&gt;Nonrecurring Fair Value Measurements&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;We measure certain assets and liabilities at fair value on a nonrecurring basis, including long-lived assets, goodwill, and indefinite-lived intangible assets.&lt;/span&gt;&lt;/div&gt;</us-gaap:FairValueOfFinancialInstrumentsPolicy>
    <us-gaap:TradeAndOtherAccountsReceivablePolicy
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl84NS9mcmFnOmNjMDdhNjdkZTkzMTRiNTM4NTZmNzEwMmRhMDM4M2JkL3RleHRyZWdpb246Y2MwN2E2N2RlOTMxNGI1Mzg1NmY3MTAyZGEwMzgzYmRfMjA3MDQ_64d855fa-b53d-427d-9215-f066f812bb72">&lt;div style="margin-top:18pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-style:italic;font-weight:700;line-height:120%"&gt;Accounts Receivable&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;Accounts receivable are initially recorded upon the sale and invoicing of products to customers. Credit is granted in the normal course of business without collateral. Accounts receivable are stated net of allowances for credit losses, which represent estimated losses resulting from customers not making required payments on accounts receivables. When determining the allowance, we pool our outstanding accounts receivable invoices based on the contractual due date of payment. We take several factors into consideration for estimated credit losses by pool, primarily our historical credit losses, with additional adjustments made for current and future macro-economic conditions and retail bankruptcy trends. We write-off accounts receivable when they are determined to be uncollectible. Changes in the allowance are recorded as bad debt expense and are included in general and administrative expense in our consolidated statements of comprehensive income.&lt;/span&gt;&lt;/div&gt;</us-gaap:TradeAndOtherAccountsReceivablePolicy>
    <us-gaap:PropertyPlantAndEquipmentPolicyTextBlock
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl84NS9mcmFnOmNjMDdhNjdkZTkzMTRiNTM4NTZmNzEwMmRhMDM4M2JkL3RleHRyZWdpb246Y2MwN2E2N2RlOTMxNGI1Mzg1NmY3MTAyZGEwMzgzYmRfMjA3MjA_b07dc956-697b-478f-80bc-e305f544c519">&lt;div style="margin-top:18pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-style:italic;font-weight:700;line-height:120%"&gt;Property and Equipment&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;Property and equipment, including assets acquired under lease obligations, are stated at cost, net of accumulated depreciation and amortization. Depreciation and amortization expense is calculated using the straight-line method over the estimated useful lives when placed in service.&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;We capitalize and amortize eligible costs to acquire or generate internally developed software that are incurred during the application development stage. Costs incurred during the preliminary project stage and post-implementation stage are expensed as incurred. Amortization expense for internally developed software is calculated using the straight-line method over the estimated useful life, commencing on the date when the asset is ready for its intended use.&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;The estimated useful lives of property and equipment were as follows:&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-align:center"&gt;&lt;table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"&gt;&lt;tr&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:36.324%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:61.476%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="3" style="padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;Estimated Useful Life&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Internally developed software&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;3 years&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Computer equipment&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;div style="text-align:center"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;2-3 years&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Office equipment and furniture&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;div style="text-align:center"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;5-7 years&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Leasehold improvements&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Shorter of the useful life of the asset or the remaining term of the lease&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;Significant additions or improvements extending asset lives beyond one year are capitalized, while repairs and maintenance are charged to expense as incurred.&lt;/span&gt;&lt;span style="color:#000000;font-family:'Calibri',sans-serif;font-size:11pt;font-weight:400;line-height:120%"&gt; &lt;/span&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;The assets and related accumulated depreciation and amortization are adjusted for asset retirements and disposals with the resulting gain or loss included in our consolidated statements of comprehensive income.&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;Maintenance of internally developed software are expensed as incurred. The assets and related accumulated amortization are adjusted for abandoned internally developed software with the resulting loss included in our consolidated statements of comprehensive income.&lt;/span&gt;&lt;/div&gt;</us-gaap:PropertyPlantAndEquipmentPolicyTextBlock>
    <us-gaap:PropertyPlantAndEquipmentTextBlock
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl84NS9mcmFnOmNjMDdhNjdkZTkzMTRiNTM4NTZmNzEwMmRhMDM4M2JkL3RleHRyZWdpb246Y2MwN2E2N2RlOTMxNGI1Mzg1NmY3MTAyZGEwMzgzYmRfMjA3MDI_b3509337-c981-4772-a211-89540dfcca06">&lt;div style="margin-top:6pt;text-indent:27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;The estimated useful lives of property and equipment were as follows:&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-align:center"&gt;&lt;table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"&gt;&lt;tr&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:36.324%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:61.476%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="3" style="padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;Estimated Useful Life&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Internally developed software&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;3 years&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Computer equipment&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;div style="text-align:center"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;2-3 years&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Office equipment and furniture&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;div style="text-align:center"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;5-7 years&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Leasehold improvements&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Shorter of the useful life of the asset or the remaining term of the lease&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;Property and equipment, net consisted of the following:&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-align:center"&gt;&lt;table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"&gt;&lt;tr&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:71.930%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.081%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.406%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.083%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="9" style="padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;December 31,&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;(in thousands)&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;2022&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;2021&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Internally developed software&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;49,994&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;44,981&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Computer equipment&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;30,310&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;29,329&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Leasehold improvements&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;16,531&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;16,685&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Office equipment and furniture&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;10,981&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;10,972&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 19pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Property and equipment, cost&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;107,816&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;101,967&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Less: accumulated depreciation and amortization&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;(72,358)&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;(70,066)&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 19pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Total property and equipment, net&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;35,458&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;31,901&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;</us-gaap:PropertyPlantAndEquipmentTextBlock>
    <us-gaap:PropertyPlantAndEquipmentUsefulLife
      contextRef="ia3e892e9e9c74cd1b106db5a2559b64d_D20220101-20221231"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl84NS9mcmFnOmNjMDdhNjdkZTkzMTRiNTM4NTZmNzEwMmRhMDM4M2JkL3RhYmxlOjBlOGIxZTE5ZjdiYjQyNThhMTNmMTM2N2NlNWRhYWI1L3RhYmxlcmFuZ2U6MGU4YjFlMTlmN2JiNDI1OGExM2YxMzY3Y2U1ZGFhYjVfMS0xLTEtMS0zMDE0MA_07539032-bbeb-411e-95e1-9db8ff37a545">P3Y</us-gaap:PropertyPlantAndEquipmentUsefulLife>
    <us-gaap:PropertyPlantAndEquipmentUsefulLife
      contextRef="i8933861cb9f54e038451ec0679c6b0b3_D20220101-20221231"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl84NS9mcmFnOmNjMDdhNjdkZTkzMTRiNTM4NTZmNzEwMmRhMDM4M2JkL3RhYmxlOjBlOGIxZTE5ZjdiYjQyNThhMTNmMTM2N2NlNWRhYWI1L3RhYmxlcmFuZ2U6MGU4YjFlMTlmN2JiNDI1OGExM2YxMzY3Y2U1ZGFhYjVfMi0xLTEtMS0zMDE0MC90ZXh0cmVnaW9uOjU5ZDdkYTc1ZjUzNzQzZTU4MDlmZjU0YTA5NDY1Y2RkXzQ_668069d0-58c2-4c02-a5fa-17ad2fba87a2">P2Y</us-gaap:PropertyPlantAndEquipmentUsefulLife>
    <us-gaap:PropertyPlantAndEquipmentUsefulLife
      contextRef="i02e371aa8621497d9e2e3005b7d1ffa5_D20220101-20221231"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl84NS9mcmFnOmNjMDdhNjdkZTkzMTRiNTM4NTZmNzEwMmRhMDM4M2JkL3RhYmxlOjBlOGIxZTE5ZjdiYjQyNThhMTNmMTM2N2NlNWRhYWI1L3RhYmxlcmFuZ2U6MGU4YjFlMTlmN2JiNDI1OGExM2YxMzY3Y2U1ZGFhYjVfMi0xLTEtMS0zMDE0MC90ZXh0cmVnaW9uOjU5ZDdkYTc1ZjUzNzQzZTU4MDlmZjU0YTA5NDY1Y2RkXzc_a3cb45e2-5cb8-497a-881c-084d127889c3">P3Y</us-gaap:PropertyPlantAndEquipmentUsefulLife>
    <us-gaap:PropertyPlantAndEquipmentUsefulLife
      contextRef="i10e8722104024381b068cb2b06a67eaa_D20220101-20221231"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl84NS9mcmFnOmNjMDdhNjdkZTkzMTRiNTM4NTZmNzEwMmRhMDM4M2JkL3RhYmxlOjBlOGIxZTE5ZjdiYjQyNThhMTNmMTM2N2NlNWRhYWI1L3RhYmxlcmFuZ2U6MGU4YjFlMTlmN2JiNDI1OGExM2YxMzY3Y2U1ZGFhYjVfMy0xLTEtMS0zMDE0MC90ZXh0cmVnaW9uOjc5ODZiYmJlY2JhYzQzMmNiMDg5ODZiMzY2MTllMjI5XzQ_800a5d4e-a039-4668-b727-20a721dcfd2a">P5Y</us-gaap:PropertyPlantAndEquipmentUsefulLife>
    <us-gaap:PropertyPlantAndEquipmentUsefulLife
      contextRef="i7b16c64967a244cb967c6df24ca93515_D20220101-20221231"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl84NS9mcmFnOmNjMDdhNjdkZTkzMTRiNTM4NTZmNzEwMmRhMDM4M2JkL3RhYmxlOjBlOGIxZTE5ZjdiYjQyNThhMTNmMTM2N2NlNWRhYWI1L3RhYmxlcmFuZ2U6MGU4YjFlMTlmN2JiNDI1OGExM2YxMzY3Y2U1ZGFhYjVfMy0xLTEtMS0zMDE0MC90ZXh0cmVnaW9uOjc5ODZiYmJlY2JhYzQzMmNiMDg5ODZiMzY2MTllMjI5Xzc_071f33e3-06cf-4190-9712-da040c4ce263">P7Y</us-gaap:PropertyPlantAndEquipmentUsefulLife>
    <us-gaap:LesseeLeasesPolicyTextBlock
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl84NS9mcmFnOmNjMDdhNjdkZTkzMTRiNTM4NTZmNzEwMmRhMDM4M2JkL3RleHRyZWdpb246Y2MwN2E2N2RlOTMxNGI1Mzg1NmY3MTAyZGEwMzgzYmRfMjA3MDU_cf507007-5bf4-47d1-922b-d480b753f2a3">&lt;div style="margin-top:18pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-style:italic;font-weight:700;line-height:120%"&gt;Leases&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;We determine if an arrangement is a lease at inception. Operating leases are included in operating lease right-of-use assets, current operating lease liabilities, and non-current operating lease liabilities in our consolidated balance sheets.&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;Right-of-use (&#x201c;ROU&#x201d;) assets represent our right to use an underlying asset for the lease term and lease liabilities represent our obligation to make lease payments arising from the lease. Operating lease ROU assets and liabilities are recognized at commencement date based on the present value of lease payments over the lease term. We use the implicit interest rate when readily determinable. We estimate the discount rate for a similar collateralized asset by estimating costs of borrowing. The operating lease ROU asset also includes any lease payments made and lease incentives that have been incurred. The options to extend our leases are not recognized as part of our ROU assets and lease liabilities unless it is reasonably certain that we will exercise that option. Lease expense for lease payments is recognized on a straight-line basis over the lease term. For all leases, we combine non-lease components with the related lease components and account for it as a single lease component. The ROU assets are subject to the same impairment process as our long-lived assets. Additionally, we review our lease liabilities for remeasurement whenever there is a triggering event or when relevant facts and circumstances change.&lt;/span&gt;&lt;/div&gt;</us-gaap:LesseeLeasesPolicyTextBlock>
    <us-gaap:ResearchAndDevelopmentExpensePolicy
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl84NS9mcmFnOmNjMDdhNjdkZTkzMTRiNTM4NTZmNzEwMmRhMDM4M2JkL3RleHRyZWdpb246Y2MwN2E2N2RlOTMxNGI1Mzg1NmY3MTAyZGEwMzgzYmRfMjA3MDM_47191e4e-6d79-4dc5-9dad-5e3675fad6ae">&lt;div style="margin-top:18pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-style:italic;font-weight:700;line-height:120%"&gt;Research and Development&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;Research and development costs primarily include development, maintenance, and data conversion activities related to our cloud-based supply chain management products and are expensed as incurred. Research and development costs are net of amounts capitalized as developed software.&lt;/span&gt;&lt;/div&gt;</us-gaap:ResearchAndDevelopmentExpensePolicy>
    <us-gaap:GoodwillAndIntangibleAssetsGoodwillPolicy
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl84NS9mcmFnOmNjMDdhNjdkZTkzMTRiNTM4NTZmNzEwMmRhMDM4M2JkL3RleHRyZWdpb246Y2MwN2E2N2RlOTMxNGI1Mzg1NmY3MTAyZGEwMzgzYmRfMjA3MTQ_f05c1c72-498d-4ffa-b2a1-5ceded46ccfb">&lt;div style="margin-top:18pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-style:italic;font-weight:700;line-height:120%"&gt;Goodwill&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;Goodwill represents the excess of the purchase price over the fair value of identifiable net assets acquired in business combinations. Goodwill is attributed to a trained workforce and other buyer-specific value resulting from expected synergies, including long-term cost savings, which are not included in the fair values of identifiable assets. &lt;/span&gt;&lt;/div&gt;We test goodwill for impairment annually at November 30, or more frequently if events or changes in circumstances indicate that the asset might be impaired. The impairment test is conducted by comparing the fair value of the net assets with the carrying amount of the reporting unit. We determine the fair value of the reporting unit based on our market capitalization at the testing date. If the carrying amount exceeds the fair value of the reporting unit, we would recognize an impairment loss in the consolidated statements of comprehensive income, to the extent that the carrying amount exceeds fair value.</us-gaap:GoodwillAndIntangibleAssetsGoodwillPolicy>
    <us-gaap:GoodwillAndIntangibleAssetsIntangibleAssetsPolicy
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl84NS9mcmFnOmNjMDdhNjdkZTkzMTRiNTM4NTZmNzEwMmRhMDM4M2JkL3RleHRyZWdpb246Y2MwN2E2N2RlOTMxNGI1Mzg1NmY3MTAyZGEwMzgzYmRfMjA2OTk_1c1eb385-dca7-447b-9e84-7fee457e21ba">&lt;div style="margin-top:18pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-style:italic;font-weight:700;line-height:120%"&gt;Intangible Assets&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;Assets acquired in business combinations may include identifiable intangible assets such as subscriber relationships and developed technology. We recognize the fair value of the identifiable intangible assets acquired separately from goodwill. We have determined the fair value and useful lives of our purchased intangible assets using certain estimates and assumptions that we believe are reasonable.&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;The purchased intangible assets are being amortized on a straight-line basis over their estimated useful lives.&lt;/span&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:11pt;font-weight:400;line-height:120%"&gt; &lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;The estimated useful lives for intangible were as follows:&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-align:center"&gt;&lt;table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"&gt;&lt;tr&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:48.900%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:48.900%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="3" style="padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;Estimated Useful Life&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#CFF0FC;padding:2px 1pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Subscriber relationships&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cff0fc;border-top:0.75pt solid #000000;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;div style="text-align:center"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;7-10 years&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Developed technology&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;div style="text-align:center"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;3-10 years&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;</us-gaap:GoodwillAndIntangibleAssetsIntangibleAssetsPolicy>
    <us-gaap:ScheduleOfIndefiniteLivedIntangibleAssetsTableTextBlock
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl84NS9mcmFnOmNjMDdhNjdkZTkzMTRiNTM4NTZmNzEwMmRhMDM4M2JkL3RleHRyZWdpb246Y2MwN2E2N2RlOTMxNGI1Mzg1NmY3MTAyZGEwMzgzYmRfMjA3MTU_98b75eb0-0513-4807-89d1-6c896ccaab9b">&lt;div style="margin-top:6pt;text-indent:27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;The estimated useful lives for intangible were as follows:&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-align:center"&gt;&lt;table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"&gt;&lt;tr&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:48.900%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:48.900%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="3" style="padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;Estimated Useful Life&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#CFF0FC;padding:2px 1pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Subscriber relationships&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cff0fc;border-top:0.75pt solid #000000;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;div style="text-align:center"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;7-10 years&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Developed technology&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;div style="text-align:center"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;3-10 years&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;</us-gaap:ScheduleOfIndefiniteLivedIntangibleAssetsTableTextBlock>
    <us-gaap:FiniteLivedIntangibleAssetUsefulLife
      contextRef="i016074f3b4b3412e87e54bd0cf5c2088_D20220101-20221231"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl84NS9mcmFnOmNjMDdhNjdkZTkzMTRiNTM4NTZmNzEwMmRhMDM4M2JkL3RhYmxlOjg3NThkMzQyNTA3MjQyOTI4ZGE2NjJhZmQxNmMyYjdmL3RhYmxlcmFuZ2U6ODc1OGQzNDI1MDcyNDI5MjhkYTY2MmFmZDE2YzJiN2ZfMS0xLTEtMS0zMDE0MC90ZXh0cmVnaW9uOjhjYzc2NzJmODc4MDQyNmQ5M2M5ODdmYjI1M2ZhNGU5XzQ_e9fe4cee-763d-4dfe-9c8e-6eb9573f6f34">P7Y</us-gaap:FiniteLivedIntangibleAssetUsefulLife>
    <us-gaap:FiniteLivedIntangibleAssetUsefulLife
      contextRef="icdff609690dd4618ae56db380dca3f96_D20220101-20221231"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl84NS9mcmFnOmNjMDdhNjdkZTkzMTRiNTM4NTZmNzEwMmRhMDM4M2JkL3RhYmxlOjg3NThkMzQyNTA3MjQyOTI4ZGE2NjJhZmQxNmMyYjdmL3RhYmxlcmFuZ2U6ODc1OGQzNDI1MDcyNDI5MjhkYTY2MmFmZDE2YzJiN2ZfMS0xLTEtMS0zMDE0MC90ZXh0cmVnaW9uOjhjYzc2NzJmODc4MDQyNmQ5M2M5ODdmYjI1M2ZhNGU5Xzc_b5d84b59-2c8f-4369-8ebd-5b9b1a595789">P10Y</us-gaap:FiniteLivedIntangibleAssetUsefulLife>
    <us-gaap:FiniteLivedIntangibleAssetUsefulLife
      contextRef="ia697426b5781427dba6616252cc052f1_D20220101-20221231"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl84NS9mcmFnOmNjMDdhNjdkZTkzMTRiNTM4NTZmNzEwMmRhMDM4M2JkL3RhYmxlOjg3NThkMzQyNTA3MjQyOTI4ZGE2NjJhZmQxNmMyYjdmL3RhYmxlcmFuZ2U6ODc1OGQzNDI1MDcyNDI5MjhkYTY2MmFmZDE2YzJiN2ZfMi0xLTEtMS0zMDE0MC90ZXh0cmVnaW9uOjVmN2UwYTQ0MzdkNTRjMWI5YjE3ZjdkZTUwYTQ2ZDBmXzQ_701b9763-b5fb-4318-b2ca-39bebbcf6d4d">P3Y</us-gaap:FiniteLivedIntangibleAssetUsefulLife>
    <us-gaap:FiniteLivedIntangibleAssetUsefulLife
      contextRef="i001f3eb48d06455b954608a733a617c8_D20220101-20221231"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl84NS9mcmFnOmNjMDdhNjdkZTkzMTRiNTM4NTZmNzEwMmRhMDM4M2JkL3RhYmxlOjg3NThkMzQyNTA3MjQyOTI4ZGE2NjJhZmQxNmMyYjdmL3RhYmxlcmFuZ2U6ODc1OGQzNDI1MDcyNDI5MjhkYTY2MmFmZDE2YzJiN2ZfMi0xLTEtMS0zMDE0MC90ZXh0cmVnaW9uOjVmN2UwYTQ0MzdkNTRjMWI5YjE3ZjdkZTUwYTQ2ZDBmXzc_3bd2d537-b526-4ecb-88f0-90d933e60709">P10Y</us-gaap:FiniteLivedIntangibleAssetUsefulLife>
    <us-gaap:ImpairmentOrDisposalOfLongLivedAssetsPolicyTextBlock
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl84NS9mcmFnOmNjMDdhNjdkZTkzMTRiNTM4NTZmNzEwMmRhMDM4M2JkL3RleHRyZWdpb246Y2MwN2E2N2RlOTMxNGI1Mzg1NmY3MTAyZGEwMzgzYmRfMjA3MTA_ddbf26a0-6f53-4fe2-85d7-cf8ecd8af598">&lt;div style="margin-top:18pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-style:italic;font-weight:700;line-height:120%"&gt;Impairment of Long-Lived Assets&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;We review our long-lived assets for impairment whenever events or changes in circumstances indicate that the carrying amount may not be recoverable. The carrying amount of a long-lived asset is not recoverable if the carrying amount of an asset group exceeds the sum of the undiscounted cash flows expected to result from the use and eventual disposition of the assets at the date it is tested for recoverability, whether in use or under development. An impairment loss is measured and recorded as an expense in the consolidated statements of comprehensive income as the amount by which the carrying amount of a long-lived asset exceeds its fair value.&lt;/span&gt;&lt;/div&gt;</us-gaap:ImpairmentOrDisposalOfLongLivedAssetsPolicyTextBlock>
    <us-gaap:RevenueRecognitionPolicyTextBlock
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl84NS9mcmFnOmNjMDdhNjdkZTkzMTRiNTM4NTZmNzEwMmRhMDM4M2JkL3RleHRyZWdpb246Y2MwN2E2N2RlOTMxNGI1Mzg1NmY3MTAyZGEwMzgzYmRfMjA3MjE_2a68ab6d-4e44-4a1b-8466-1c0afe4afbe1">&lt;div style="margin-top:18pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-style:italic;font-weight:700;line-height:120%"&gt;Revenue Recognition&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;Revenues are the amount that reflects the consideration we are contractually and legally entitled to, as well as the amount we expect to collect, in exchange for those services.&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;We determine revenue recognition through the following steps:&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;padding-left:54pt;text-indent:-27pt"&gt;&lt;span style="color:#000000;font-family:'Arial',sans-serif;font-size:12pt;font-weight:400;line-height:120%"&gt;&#x2022;&lt;/span&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%;padding-left:22.8pt"&gt;Identification of the contract, or contracts, with a customer &lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;padding-left:54pt;text-indent:-27pt"&gt;&lt;span style="color:#000000;font-family:'Arial',sans-serif;font-size:12pt;font-weight:400;line-height:120%"&gt;&#x2022;&lt;/span&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%;padding-left:22.8pt"&gt;Identification of the performance obligations in the contract &lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;padding-left:54pt;text-indent:-27pt"&gt;&lt;span style="color:#000000;font-family:'Arial',sans-serif;font-size:12pt;font-weight:400;line-height:120%"&gt;&#x2022;&lt;/span&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%;padding-left:22.8pt"&gt;Determination of the transaction price &lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;padding-left:54pt;text-indent:-27pt"&gt;&lt;span style="color:#000000;font-family:'Arial',sans-serif;font-size:12pt;font-weight:400;line-height:120%"&gt;&#x2022;&lt;/span&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%;padding-left:22.8pt"&gt;Allocation of the transaction price to the performance obligations in the contract &lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;padding-left:54pt;text-indent:-27pt"&gt;&lt;span style="color:#000000;font-family:'Arial',sans-serif;font-size:12pt;font-weight:400;line-height:120%"&gt;&#x2022;&lt;/span&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%;padding-left:22.8pt"&gt;Recognition of revenue when, or as, we satisfy a performance obligation&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;See Note C for further descriptions of our revenue recognition policy.&lt;/span&gt;&lt;/div&gt;</us-gaap:RevenueRecognitionPolicyTextBlock>
    <us-gaap:DeferredChargesPolicyTextBlock
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl84NS9mcmFnOmNjMDdhNjdkZTkzMTRiNTM4NTZmNzEwMmRhMDM4M2JkL3RleHRyZWdpb246Y2MwN2E2N2RlOTMxNGI1Mzg1NmY3MTAyZGEwMzgzYmRfMjA3MTY_3db0295c-2a7e-45b0-b78c-384f55a7a1af">&lt;div style="margin-top:18pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-style:italic;font-weight:700;line-height:120%"&gt;Deferred Costs&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;Deferred costs are those that are incurred to fulfill or obtain customer contracts and that are considered incremental and recoverable costs. These consist primarily of customer implementation costs, commissions paid to sales personnel and referral partners, respectively. These costs are deferred and amortized over the expected period of benefit which we have determined to be two years.&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;Customer implementation costs are based on actual costs&lt;/span&gt;&lt;span style="color:#000000;font-family:'Calibri',sans-serif;font-size:11pt;font-weight:400;line-height:120%"&gt; &lt;/span&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;incurred. Related amortization expense is included in cost of revenues in the consolidated statements of comprehensive income.&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;Sales commissions are calculated based on estimated annual recurring revenue to be generated over the customer&#x2019;s initial contract period. Related amortization expense is included in sales and marketing expenses in the consolidated statements of comprehensive income.&lt;/span&gt;&lt;/div&gt;</us-gaap:DeferredChargesPolicyTextBlock>
    <spsc:DeferredCommissionExpectedAmortizationPeriod
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl84NS9mcmFnOmNjMDdhNjdkZTkzMTRiNTM4NTZmNzEwMmRhMDM4M2JkL3RleHRyZWdpb246Y2MwN2E2N2RlOTMxNGI1Mzg1NmY3MTAyZGEwMzgzYmRfMTUzNzI_23283b80-400e-4d5b-bd89-604f20679b6e">P2Y</spsc:DeferredCommissionExpectedAmortizationPeriod>
    <us-gaap:ShareBasedCompensationOptionAndIncentivePlansPolicy
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl84NS9mcmFnOmNjMDdhNjdkZTkzMTRiNTM4NTZmNzEwMmRhMDM4M2JkL3RleHRyZWdpb246Y2MwN2E2N2RlOTMxNGI1Mzg1NmY3MTAyZGEwMzgzYmRfMjA2OTg_76966117-a54e-4f03-a174-90338b5e7d08">&lt;div style="margin-top:18pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-style:italic;font-weight:700;line-height:120%"&gt;Stock-Based Compensation&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;Stock-based compensation includes grants of incentive and nonqualified stock options, performance share units (&#x201c;PSUs&#x201d;), restricted stock awards (&#x201c;RSAs&#x201d;), restricted stock units (&#x201c;RSUs&#x201d;), deferred stock units (&#x201c;DSUs&#x201d;), employee stock purchase plan (&#x201c;ESPP&#x201d;) activity, and 401(k) stock match and is used to compensate employees, executive officers, and non-employee directors. &lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;We recognize the cost of all stock-based payments based on the grant date fair value of those awards. This cost is recognized over the period for which an employee is required to provide service in exchange for the award or the award performance period,&lt;/span&gt;&lt;span style="color:#000000;font-family:'Calibri',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt; &lt;/span&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;except for expenses relating to retirement-eligible employees that have not given their required notice, which is recognized on a pro-rata basis over the notice period prior to retirement. For all awards, we recognize forfeitures as they occur.&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;RSAs result in the issuance of new shares when granted. For other stock-based awards, new shares are issued when the award is exercised, vested, or released according to the terms of the agreement.&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;Our ESPP allows participating employees to purchase shares of our common stock at a discount through payroll deductions. The plan is available to all employees subject to certain eligibility requirements. Participating employees may purchase common stock, on a voluntary after-tax basis, at a price that is the lower of 85% of the fair market value of our common stock at the beginning or end of each stock purchase period. The plan is a Type B plan, so the number of shares a participants can acquire is variable. Participants purchase more shares as the stock price decreases, up to the total amount originally elected to withhold at the beginning of the offering period. The plan consists of two six-month offering periods, beginning on January 1 and July 1 of each calendar year.&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;The fair value of stock options and ESPP activity is estimated using the Black-Scholes option valuation model. The fair value for RSAs, RSUs, and DSUs is the closing market value of the underlying stock on the date of grant less the purchase price (if any). The fair value of PSUs is estimated using a Monte Carlo simulation. &lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;Judgment is required in determining the expected volatility of common stock and the expected term individuals will hold their share-based awards prior to exercising. The expected volatility of the options is based on the historical volatility of our common stock. The expected term of the options is derived from historical data on option holder exercises and post-vesting employment termination behavior.&lt;/span&gt;&lt;/div&gt;Additional valuation inputs include our expected non-issuance of future common stock dividends and the risk-free interest rate that is based on the U.S. Treasury rates at the date of grant with maturity dates approximately equaling the expected life at the grant date. For PSUs, the Monte Carlo simulation utilizes multiple input variables that determine the probability of satisfying the performance conditions stipulated in the award.</us-gaap:ShareBasedCompensationOptionAndIncentivePlansPolicy>
    <spsc:ShareBasedCompensationArrangementByShareBasedPaymentAwardNumberOfOfferingPeriods
      contextRef="ibbc2d589a09c46368d9dd3e9ea8996c6_I20221231"
      decimals="0"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl84NS9mcmFnOmNjMDdhNjdkZTkzMTRiNTM4NTZmNzEwMmRhMDM4M2JkL3RleHRyZWdpb246Y2MwN2E2N2RlOTMxNGI1Mzg1NmY3MTAyZGEwMzgzYmRfMjc0ODc3OTExMDIzOQ_c8026e0f-8ead-43be-9008-0726b53c7aa8"
      unitRef="period">2</spsc:ShareBasedCompensationArrangementByShareBasedPaymentAwardNumberOfOfferingPeriods>
    <spsc:ShareBasedCompensationArrangementByShareBasedPaymentAwardStockPlanOfferingPeriod
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl84NS9mcmFnOmNjMDdhNjdkZTkzMTRiNTM4NTZmNzEwMmRhMDM4M2JkL3RleHRyZWdpb246Y2MwN2E2N2RlOTMxNGI1Mzg1NmY3MTAyZGEwMzgzYmRfMjc0ODc3OTExMDI1Nw_1d3b8974-3830-4448-8e48-2ff628062b95">P6M</spsc:ShareBasedCompensationArrangementByShareBasedPaymentAwardStockPlanOfferingPeriod>
    <us-gaap:IncomeTaxPolicyTextBlock
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl84NS9mcmFnOmNjMDdhNjdkZTkzMTRiNTM4NTZmNzEwMmRhMDM4M2JkL3RleHRyZWdpb246Y2MwN2E2N2RlOTMxNGI1Mzg1NmY3MTAyZGEwMzgzYmRfMjA2OTY_6e9f60af-6641-45fe-9a1e-edd56db55a67">&lt;div style="margin-top:18pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-style:italic;font-weight:700;line-height:120%"&gt;Income Taxes&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;We account for income taxes using the asset and liability method, which requires recognition of deferred tax assets and liabilities for the expected future tax consequences of events that have been included in the consolidated financial statements. Under this method, deferred tax assets and liabilities are determined based on the difference between the financial statement and tax basis of assets and liabilities using enacted tax rates in effect for the year in which the differences are expected to reverse. Deferred tax assets are reduced by a valuation allowance when, in our judgment, it is more likely than not that some or all of the deferred tax asset will not be realized. Deferred tax positions are net by jurisdiction on the consolidated balance sheet.&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;We assess our ability to realize our deferred tax assets at the end of each reporting period. Realization of our deferred tax assets is contingent upon future taxable earnings. Accordingly, this assessment requires estimates and judgment. If the estimates of future taxable income vary from actual results, our assessment regarding the realization of these deferred tax assets could change. Future changes in the estimated amount of deferred taxes expected to be realized will be reflected in our consolidated financial statements in the period the estimate is changed, with a corresponding adjustment to our operating results.&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;We recognize the financial statement benefit of a tax position only after determining that the relevant tax authority would &#x201c;more likely than not&#x201d; sustain the position following an audit. For tax positions meeting the &#x201c;more likely than not&#x201d; threshold, the amount recognized in the financial statements is the largest benefit that has a greater than 50% likelihood of being realized upon ultimate settlement with the relevant tax authority.&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;It is our practice to recognize interest and penalties accrued on any unrecognized tax benefits as a component of income tax expense.&lt;/span&gt;&lt;/div&gt;</us-gaap:IncomeTaxPolicyTextBlock>
    <us-gaap:EarningsPerSharePolicyTextBlock
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl84NS9mcmFnOmNjMDdhNjdkZTkzMTRiNTM4NTZmNzEwMmRhMDM4M2JkL3RleHRyZWdpb246Y2MwN2E2N2RlOTMxNGI1Mzg1NmY3MTAyZGEwMzgzYmRfMjA3MDY_55ba2ef8-b43a-4138-99b1-724a33b401e4">&lt;div style="margin-top:18pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-style:italic;font-weight:700;line-height:120%"&gt;Net Income Per Share&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;Basic net income per share has been computed using the weighted average number of shares of common stock outstanding during each period. Diluted net income per share also includes the impact of our outstanding potential common shares, including options, RSAs, RSUs, PSUs, and DSUs. Potential common shares that are anti-dilutive are excluded from the calculation of diluted net income per share.&lt;/span&gt;&lt;/div&gt;</us-gaap:EarningsPerSharePolicyTextBlock>
    <us-gaap:NewAccountingPronouncementsPolicyPolicyTextBlock
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl84NS9mcmFnOmNjMDdhNjdkZTkzMTRiNTM4NTZmNzEwMmRhMDM4M2JkL3RleHRyZWdpb246Y2MwN2E2N2RlOTMxNGI1Mzg1NmY3MTAyZGEwMzgzYmRfMjA3MDg_1d4e68f2-0312-4eb2-82ab-76825a215607">&lt;div style="margin-top:18pt"&gt;&lt;span style="background-color:#ffffff;color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-style:italic;font-weight:700;line-height:120%"&gt;Accounting Pronouncements Not Yet Adopted&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-align:center"&gt;&lt;table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"&gt;&lt;tr&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:22.081%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.081%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:26.172%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.081%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:22.085%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;Standard&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;Date of Issuance&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;Description&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;Date of Required Adoption&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;Effect on the Financial Statements&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt;text-align:left;vertical-align:top"&gt;&lt;div style="margin-top:0.75pt;text-align:center"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:700;line-height:115%"&gt;ASU 2021-08&lt;/span&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:115%"&gt;, Business Combinations (Topic 805) - Accounting for Contract Assets and Contract Liabilities from Contracts with Customers&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;October 2021&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt;text-align:left;vertical-align:top"&gt;&lt;div style="margin-top:0.75pt;text-align:center"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:115%"&gt;This amendment requires that an acquirer recognize and measure contract assets and contract liabilities acquired in a business combination in accordance with Topic 606, effective for all business combinations in the year of adoption and thereafter.&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;January 2023&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;The adoption of this standard may have a material impact on the purchase accounting for business combinations depending on the specific amount of contract assets and liabilities being acquired.&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;</us-gaap:NewAccountingPronouncementsPolicyPolicyTextBlock>
    <us-gaap:BusinessCombinationDisclosureTextBlock
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl84OC9mcmFnOjc1MzBmMjg5MTFmNDQ0Nzg4OTVkYWNmMjIzMWQ3YTg3L3RleHRyZWdpb246NzUzMGYyODkxMWY0NDQ3ODg5NWRhY2YyMjMxZDdhODdfMTg2MQ_e55f6990-e86d-4ed7-bba1-44546a9ac33c">Business Acquisitions&lt;div style="margin-top:6pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:700;line-height:120%;text-decoration:underline"&gt;GCommerce&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;Effective July 19, 2022, we acquired all of the outstanding equity ownership interests of GCommerce, Inc. ("GCommerce"), a leading EDI provider within the automotive aftermarket industry. Pursuant to the definitive agreement, the purchase price was $45.1&#160;million, including post-closing adjustments. The purchase accounting for the acquisition has not been finalized as of December 31, 2022 due to various items including valuation modeling completion; provisional amounts are primarily related to intangible assets and tax components. We expect to finalize the allocation of the purchase price within the one-year measurement period following the acquisition. &lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:700;line-height:120%;text-decoration:underline"&gt;InterTrade&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;Effective October 4, 2022, we acquired all of the outstanding equity ownership interests of Canadian based InterTrade Systems Inc. ("InterTrade"), a leading EDI provider within the apparel and general merchandising markets. Pursuant to the definitive agreement, the purchase price was $49.1&#160;million, including estimated post-closing adjustments. The purchase accounting for the acquisition has not been finalized as of December 31, 2022 due to various items including valuation modeling completion; provisional amounts are primarily related to intangible assets, net working capital, and tax components. We expect to finalize the allocation of the purchase price within the one-year measurement period following the acquisition.&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;The definitive agreement included the potential for the seller to receive up to $2.0&#160;million in cash, contingent upon the completion of a technological infrastructure migration project within a specified time period. Given the status of the project, at the date of acquisition as well as at December 31, 2022, we expected to pay the full contingent consideration &lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;balance in 2023. As such, $2.0&#160;million was included in accrued expenses in the consolidated balance sheet at December 31, 2022.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;br/&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-style:italic;font-weight:700;line-height:120%"&gt;Purchase Price Allocations&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;We accounted for the acquisitions as business combinations. We allocated each purchase price to the tangible and identifiable intangible assets acquired and liabilities assumed based on their estimated fair values as of the acquisition date.&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;The following table summarizes the estimated fair values of the assets acquired and liabilities assumed at the acquisition dates:&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt"&gt;&lt;table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"&gt;&lt;tr&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:43.142%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:13.596%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.406%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:8.748%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.406%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:13.596%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.406%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:13.600%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="21" style="padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;2022 Acquisition Activity&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="15" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;GCommerce&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;InterTrade&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;(in thousands)&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;Acquisition Date Estimated Fair Value as of &lt;br/&gt;September 30, 2022&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7.5pt;font-weight:700;line-height:114%"&gt;Adjustments&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;Acquisition Date Estimated Fair Value as of &lt;br/&gt;December 31, 2022&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;Acquisition Date Estimated Fair Value as of &lt;br/&gt;December 31, 2022&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Cash paid at transaction date&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;45,153&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;&#x2014;&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;45,153&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;47,165&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Contingent consideration&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;&#x2014;&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;&#x2014;&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;&#x2014;&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;2,000&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Post-closing adjustments&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;(64)&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;&#x2014;&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;(64)&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;(93)&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Total consideration&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;45,089&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td style="background-color:#ffffff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;&#x2014;&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td style="background-color:#ffffff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;45,089&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td style="background-color:#ffffff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;49,072&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr style="height:15pt"&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Estimated fair value of assets and liabilities acquired:&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Cash&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;230&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;&#x2014;&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;230&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;668&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Accounts receivable&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;467&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;&#x2014;&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;467&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;1,302&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Other current assets&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;288&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;&#x2014;&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;288&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;1,903&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Operating lease right-of-use asset&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;934&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;&#x2014;&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;934&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;&#x2014;&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Intangible assets&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 25pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Subscriber relationships&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;18,225&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;(925)&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;17,300&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;17,640&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 25pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Developed technology&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;2,025&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;275&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;2,300&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;4,410&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Deferred income tax assets&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;5,291&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;1,440&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;6,731&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;101&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Accounts payable&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;(266)&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;&#x2014;&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;(266)&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;(2,337)&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Accrued compensation&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;(321)&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;&#x2014;&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;(321)&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;&#x2014;&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Deferred revenue&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;(262)&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;&#x2014;&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;(262)&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;(397)&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Operating lease liability&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;(934)&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;&#x2014;&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;(934)&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;&#x2014;&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Deferred income tax liabilities&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;(5,144)&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;537&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;(4,607)&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;(6,228)&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Total fair value of assets and liabilities acquired&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;20,533&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td style="background-color:#ffffff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;1,327&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td style="background-color:#ffffff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;21,860&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td style="background-color:#ffffff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;17,062&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr style="height:15pt"&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Goodwill&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;24,556&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;(1,327)&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;23,229&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;32,010&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:36pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;The following table summarizes the estimated useful lives for each acquired intangible asset, each of which are subject to finalization:&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt"&gt;&lt;table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"&gt;&lt;tr&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:64.657%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:15.718%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.406%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:15.719%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="9" style="padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;Estimated Useful Life&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;GCommerce&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;InterTrade&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Subscriber relationships&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;8.0 years&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;8.0 years&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Developed technology&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;5.0 years&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;6.0 years&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;</us-gaap:BusinessCombinationDisclosureTextBlock>
    <us-gaap:BusinessCombinationConsiderationTransferred1
      contextRef="i495a0b29cafe4a9eb414b4140e84bec1_D20220719-20220719"
      decimals="-5"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl84OC9mcmFnOjc1MzBmMjg5MTFmNDQ0Nzg4OTVkYWNmMjIzMWQ3YTg3L3RleHRyZWdpb246NzUzMGYyODkxMWY0NDQ3ODg5NWRhY2YyMjMxZDdhODdfMjc0ODc3OTA3OTYzMA_0bb79df4-55fb-4080-8d94-acee4d372d23"
      unitRef="usd">45100000</us-gaap:BusinessCombinationConsiderationTransferred1>
    <spsc:BusinessCombinationMeasurementPeriod
      contextRef="i495a0b29cafe4a9eb414b4140e84bec1_D20220719-20220719"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl84OC9mcmFnOjc1MzBmMjg5MTFmNDQ0Nzg4OTVkYWNmMjIzMWQ3YTg3L3RleHRyZWdpb246NzUzMGYyODkxMWY0NDQ3ODg5NWRhY2YyMjMxZDdhODdfMjc0ODc3OTA3OTY2Nw_2916c5d8-f340-4d72-9f25-1d7f4963c0cd">P1Y</spsc:BusinessCombinationMeasurementPeriod>
    <us-gaap:BusinessCombinationConsiderationTransferred1
      contextRef="i1dcba61a15a04284bad3af3962698338_D20221004-20221004"
      decimals="-5"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl84OC9mcmFnOjc1MzBmMjg5MTFmNDQ0Nzg4OTVkYWNmMjIzMWQ3YTg3L3RleHRyZWdpb246NzUzMGYyODkxMWY0NDQ3ODg5NWRhY2YyMjMxZDdhODdfMjc0ODc3OTA3OTY0Mw_137f4f28-309f-4df8-9f65-badaba88a211"
      unitRef="usd">49100000</us-gaap:BusinessCombinationConsiderationTransferred1>
    <spsc:BusinessCombinationMeasurementPeriod
      contextRef="i1dcba61a15a04284bad3af3962698338_D20221004-20221004"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl84OC9mcmFnOjc1MzBmMjg5MTFmNDQ0Nzg4OTVkYWNmMjIzMWQ3YTg3L3RleHRyZWdpb246NzUzMGYyODkxMWY0NDQ3ODg5NWRhY2YyMjMxZDdhODdfMjc0ODc3OTA3OTY3Ng_4c720b71-1700-423c-b928-7396eb2e997e">P1Y</spsc:BusinessCombinationMeasurementPeriod>
    <us-gaap:BusinessCombinationContingentConsiderationLiabilityCurrent
      contextRef="ibdac1ca745604d6e8840a0f0c1c23bf0_I20221004"
      decimals="-5"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl84OC9mcmFnOjc1MzBmMjg5MTFmNDQ0Nzg4OTVkYWNmMjIzMWQ3YTg3L3RleHRyZWdpb246NzUzMGYyODkxMWY0NDQ3ODg5NWRhY2YyMjMxZDdhODdfMjc0ODc3OTA4MDY4Mg_aa35aeb4-20b2-4a54-8cc4-04bcf78e9e02"
      unitRef="usd">2000000</us-gaap:BusinessCombinationContingentConsiderationLiabilityCurrent>
    <us-gaap:BusinessCombinationContingentConsiderationLiabilityCurrent
      contextRef="i0f16e266da3b4333ac471989e36cbe61_I20221231"
      decimals="-5"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl84OC9mcmFnOjc1MzBmMjg5MTFmNDQ0Nzg4OTVkYWNmMjIzMWQ3YTg3L3RleHRyZWdpb246NzUzMGYyODkxMWY0NDQ3ODg5NWRhY2YyMjMxZDdhODdfMjc0ODc3OTA4MDY5Nw_910e775f-9815-4723-9958-b356ff4afdc4"
      unitRef="usd">2000000</us-gaap:BusinessCombinationContingentConsiderationLiabilityCurrent>
    <us-gaap:ScheduleOfRecognizedIdentifiedAssetsAcquiredAndLiabilitiesAssumedTableTextBlock
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl84OC9mcmFnOjc1MzBmMjg5MTFmNDQ0Nzg4OTVkYWNmMjIzMWQ3YTg3L3RleHRyZWdpb246NzUzMGYyODkxMWY0NDQ3ODg5NWRhY2YyMjMxZDdhODdfMTg2Mg_6d8bddaf-32b7-4055-82f3-cccdc87eb02b">&lt;div style="margin-top:6pt;text-indent:27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;The following table summarizes the estimated fair values of the assets acquired and liabilities assumed at the acquisition dates:&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt"&gt;&lt;table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"&gt;&lt;tr&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:43.142%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:13.596%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.406%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:8.748%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.406%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:13.596%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.406%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:13.600%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="21" style="padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;2022 Acquisition Activity&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="15" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;GCommerce&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;InterTrade&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;(in thousands)&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;Acquisition Date Estimated Fair Value as of &lt;br/&gt;September 30, 2022&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7.5pt;font-weight:700;line-height:114%"&gt;Adjustments&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;Acquisition Date Estimated Fair Value as of &lt;br/&gt;December 31, 2022&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;Acquisition Date Estimated Fair Value as of &lt;br/&gt;December 31, 2022&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Cash paid at transaction date&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;45,153&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;&#x2014;&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;45,153&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;47,165&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Contingent consideration&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;&#x2014;&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;&#x2014;&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;&#x2014;&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;2,000&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Post-closing adjustments&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;(64)&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;&#x2014;&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;(64)&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;(93)&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Total consideration&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;45,089&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td style="background-color:#ffffff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;&#x2014;&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td style="background-color:#ffffff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;45,089&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td style="background-color:#ffffff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;49,072&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr style="height:15pt"&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Estimated fair value of assets and liabilities acquired:&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Cash&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;230&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;&#x2014;&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;230&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;668&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Accounts receivable&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;467&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;&#x2014;&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;467&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;1,302&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Other current assets&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;288&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;&#x2014;&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;288&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;1,903&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Operating lease right-of-use asset&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;934&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;&#x2014;&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;934&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;&#x2014;&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Intangible assets&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 25pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Subscriber relationships&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;18,225&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;(925)&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;17,300&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;17,640&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 25pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Developed technology&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;2,025&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;275&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;2,300&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;4,410&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Deferred income tax assets&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;5,291&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;1,440&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;6,731&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;101&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Accounts payable&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;(266)&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;&#x2014;&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;(266)&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;(2,337)&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Accrued compensation&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;(321)&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;&#x2014;&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;(321)&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;&#x2014;&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Deferred revenue&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;(262)&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;&#x2014;&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;(262)&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;(397)&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Operating lease liability&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;(934)&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;&#x2014;&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;(934)&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;&#x2014;&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Deferred income tax liabilities&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;(5,144)&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;537&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;(4,607)&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;(6,228)&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Total fair value of assets and liabilities acquired&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;20,533&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td style="background-color:#ffffff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;1,327&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td style="background-color:#ffffff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;21,860&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td style="background-color:#ffffff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;17,062&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr style="height:15pt"&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Goodwill&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;24,556&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;(1,327)&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;23,229&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;32,010&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;</us-gaap:ScheduleOfRecognizedIdentifiedAssetsAcquiredAndLiabilitiesAssumedTableTextBlock>
    <us-gaap:PaymentsToAcquireBusinessesGross
      contextRef="ibc96b247713e457094d75ab57c020e51_D20220930-20220930"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl84OC9mcmFnOjc1MzBmMjg5MTFmNDQ0Nzg4OTVkYWNmMjIzMWQ3YTg3L3RhYmxlOjI0OTc5OGIxYTZiMDRhZGU5MDU4MzliNjYzZTUyMWQ1L3RhYmxlcmFuZ2U6MjQ5Nzk4YjFhNmIwNGFkZTkwNTgzOWI2NjNlNTIxZDVfMy0xLTEtMS05NjY4MQ_d04ce784-6814-4547-89a6-be4f5e7086a6"
      unitRef="usd">45153000</us-gaap:PaymentsToAcquireBusinessesGross>
    <us-gaap:PaymentsToAcquireBusinessesGross
      contextRef="i5b472de518c04d73aca2e3dbd0a13a9e_D20220101-20220930"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl84OC9mcmFnOjc1MzBmMjg5MTFmNDQ0Nzg4OTVkYWNmMjIzMWQ3YTg3L3RhYmxlOjI0OTc5OGIxYTZiMDRhZGU5MDU4MzliNjYzZTUyMWQ1L3RhYmxlcmFuZ2U6MjQ5Nzk4YjFhNmIwNGFkZTkwNTgzOWI2NjNlNTIxZDVfMy0zLTEtMS05NjY4MQ_2dfe21f3-1767-420f-b7c3-8eca1b7edfda"
      unitRef="usd">0</us-gaap:PaymentsToAcquireBusinessesGross>
    <us-gaap:PaymentsToAcquireBusinessesGross
      contextRef="i0207b01ae2e644489c3a15e769ae5534_D20220101-20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl84OC9mcmFnOjc1MzBmMjg5MTFmNDQ0Nzg4OTVkYWNmMjIzMWQ3YTg3L3RhYmxlOjI0OTc5OGIxYTZiMDRhZGU5MDU4MzliNjYzZTUyMWQ1L3RhYmxlcmFuZ2U6MjQ5Nzk4YjFhNmIwNGFkZTkwNTgzOWI2NjNlNTIxZDVfMy01LTEtMS05NjY4MQ_3b360863-2944-47fe-97eb-a33c32ff8984"
      unitRef="usd">45153000</us-gaap:PaymentsToAcquireBusinessesGross>
    <us-gaap:PaymentsToAcquireBusinessesGross
      contextRef="id2ea5b1f234b490b9f01582feb98ffff_D20220101-20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl84OC9mcmFnOjc1MzBmMjg5MTFmNDQ0Nzg4OTVkYWNmMjIzMWQ3YTg3L3RhYmxlOjI0OTc5OGIxYTZiMDRhZGU5MDU4MzliNjYzZTUyMWQ1L3RhYmxlcmFuZ2U6MjQ5Nzk4YjFhNmIwNGFkZTkwNTgzOWI2NjNlNTIxZDVfMy03LTEtMS05NjY4MQ_98643c69-8bcb-4822-b27d-ebfab8a51e67"
      unitRef="usd">47165000</us-gaap:PaymentsToAcquireBusinessesGross>
    <us-gaap:BusinessCombinationConsiderationTransferredLiabilitiesIncurred
      contextRef="ibc96b247713e457094d75ab57c020e51_D20220930-20220930"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl84OC9mcmFnOjc1MzBmMjg5MTFmNDQ0Nzg4OTVkYWNmMjIzMWQ3YTg3L3RhYmxlOjI0OTc5OGIxYTZiMDRhZGU5MDU4MzliNjYzZTUyMWQ1L3RhYmxlcmFuZ2U6MjQ5Nzk4YjFhNmIwNGFkZTkwNTgzOWI2NjNlNTIxZDVfNC0xLTEtMS05NjY4MQ_381555eb-9a65-47bc-942b-15fe974a0383"
      unitRef="usd">0</us-gaap:BusinessCombinationConsiderationTransferredLiabilitiesIncurred>
    <us-gaap:BusinessCombinationConsiderationTransferredLiabilitiesIncurred
      contextRef="i5b472de518c04d73aca2e3dbd0a13a9e_D20220101-20220930"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl84OC9mcmFnOjc1MzBmMjg5MTFmNDQ0Nzg4OTVkYWNmMjIzMWQ3YTg3L3RhYmxlOjI0OTc5OGIxYTZiMDRhZGU5MDU4MzliNjYzZTUyMWQ1L3RhYmxlcmFuZ2U6MjQ5Nzk4YjFhNmIwNGFkZTkwNTgzOWI2NjNlNTIxZDVfNC0zLTEtMS05NjY4MQ_b77daea8-71a7-448b-ba3b-0c14bafca4e8"
      unitRef="usd">0</us-gaap:BusinessCombinationConsiderationTransferredLiabilitiesIncurred>
    <us-gaap:BusinessCombinationConsiderationTransferredLiabilitiesIncurred
      contextRef="i0207b01ae2e644489c3a15e769ae5534_D20220101-20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl84OC9mcmFnOjc1MzBmMjg5MTFmNDQ0Nzg4OTVkYWNmMjIzMWQ3YTg3L3RhYmxlOjI0OTc5OGIxYTZiMDRhZGU5MDU4MzliNjYzZTUyMWQ1L3RhYmxlcmFuZ2U6MjQ5Nzk4YjFhNmIwNGFkZTkwNTgzOWI2NjNlNTIxZDVfNC01LTEtMS05NjY4MQ_f1c04b09-fa35-478e-8d44-7e58b09815f9"
      unitRef="usd">0</us-gaap:BusinessCombinationConsiderationTransferredLiabilitiesIncurred>
    <us-gaap:BusinessCombinationConsiderationTransferredLiabilitiesIncurred
      contextRef="id2ea5b1f234b490b9f01582feb98ffff_D20220101-20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl84OC9mcmFnOjc1MzBmMjg5MTFmNDQ0Nzg4OTVkYWNmMjIzMWQ3YTg3L3RhYmxlOjI0OTc5OGIxYTZiMDRhZGU5MDU4MzliNjYzZTUyMWQ1L3RhYmxlcmFuZ2U6MjQ5Nzk4YjFhNmIwNGFkZTkwNTgzOWI2NjNlNTIxZDVfNC03LTEtMS05NjY4MQ_61ffed82-8a41-4ac2-bba6-d3f904484dd5"
      unitRef="usd">2000000</us-gaap:BusinessCombinationConsiderationTransferredLiabilitiesIncurred>
    <us-gaap:BusinessCombinationProvisionalInformationInitialAccountingIncompleteAdjustmentConsiderationTransferred
      contextRef="ibc96b247713e457094d75ab57c020e51_D20220930-20220930"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl84OC9mcmFnOjc1MzBmMjg5MTFmNDQ0Nzg4OTVkYWNmMjIzMWQ3YTg3L3RhYmxlOjI0OTc5OGIxYTZiMDRhZGU5MDU4MzliNjYzZTUyMWQ1L3RhYmxlcmFuZ2U6MjQ5Nzk4YjFhNmIwNGFkZTkwNTgzOWI2NjNlNTIxZDVfNS0xLTEtMS05NjY4MQ_e3a71428-5ad6-4808-9c25-8b736b3b277b"
      unitRef="usd">-64000</us-gaap:BusinessCombinationProvisionalInformationInitialAccountingIncompleteAdjustmentConsiderationTransferred>
    <us-gaap:BusinessCombinationProvisionalInformationInitialAccountingIncompleteAdjustmentConsiderationTransferred
      contextRef="i5b472de518c04d73aca2e3dbd0a13a9e_D20220101-20220930"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl84OC9mcmFnOjc1MzBmMjg5MTFmNDQ0Nzg4OTVkYWNmMjIzMWQ3YTg3L3RhYmxlOjI0OTc5OGIxYTZiMDRhZGU5MDU4MzliNjYzZTUyMWQ1L3RhYmxlcmFuZ2U6MjQ5Nzk4YjFhNmIwNGFkZTkwNTgzOWI2NjNlNTIxZDVfNS0zLTEtMS05NjY4MQ_e5466bed-97b4-4d7a-8f04-1bb07f02f144"
      unitRef="usd">0</us-gaap:BusinessCombinationProvisionalInformationInitialAccountingIncompleteAdjustmentConsiderationTransferred>
    <us-gaap:BusinessCombinationProvisionalInformationInitialAccountingIncompleteAdjustmentConsiderationTransferred
      contextRef="i0207b01ae2e644489c3a15e769ae5534_D20220101-20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl84OC9mcmFnOjc1MzBmMjg5MTFmNDQ0Nzg4OTVkYWNmMjIzMWQ3YTg3L3RhYmxlOjI0OTc5OGIxYTZiMDRhZGU5MDU4MzliNjYzZTUyMWQ1L3RhYmxlcmFuZ2U6MjQ5Nzk4YjFhNmIwNGFkZTkwNTgzOWI2NjNlNTIxZDVfNS01LTEtMS05NjY4MQ_f5516f71-7fff-4edf-9a52-3876cdaf5914"
      unitRef="usd">-64000</us-gaap:BusinessCombinationProvisionalInformationInitialAccountingIncompleteAdjustmentConsiderationTransferred>
    <us-gaap:BusinessCombinationProvisionalInformationInitialAccountingIncompleteAdjustmentConsiderationTransferred
      contextRef="id2ea5b1f234b490b9f01582feb98ffff_D20220101-20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl84OC9mcmFnOjc1MzBmMjg5MTFmNDQ0Nzg4OTVkYWNmMjIzMWQ3YTg3L3RhYmxlOjI0OTc5OGIxYTZiMDRhZGU5MDU4MzliNjYzZTUyMWQ1L3RhYmxlcmFuZ2U6MjQ5Nzk4YjFhNmIwNGFkZTkwNTgzOWI2NjNlNTIxZDVfNS03LTEtMS05NjY4MQ_2152a8e0-323f-4dc0-a275-f854b9d6d9ae"
      unitRef="usd">-93000</us-gaap:BusinessCombinationProvisionalInformationInitialAccountingIncompleteAdjustmentConsiderationTransferred>
    <us-gaap:BusinessCombinationConsiderationTransferred1
      contextRef="ibc96b247713e457094d75ab57c020e51_D20220930-20220930"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl84OC9mcmFnOjc1MzBmMjg5MTFmNDQ0Nzg4OTVkYWNmMjIzMWQ3YTg3L3RhYmxlOjI0OTc5OGIxYTZiMDRhZGU5MDU4MzliNjYzZTUyMWQ1L3RhYmxlcmFuZ2U6MjQ5Nzk4YjFhNmIwNGFkZTkwNTgzOWI2NjNlNTIxZDVfMy0xLTEtMS03MTk3OQ_5260683b-5451-4ae4-8048-b92886a27f84"
      unitRef="usd">45089000</us-gaap:BusinessCombinationConsiderationTransferred1>
    <us-gaap:BusinessCombinationConsiderationTransferred1
      contextRef="i5b472de518c04d73aca2e3dbd0a13a9e_D20220101-20220930"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl84OC9mcmFnOjc1MzBmMjg5MTFmNDQ0Nzg4OTVkYWNmMjIzMWQ3YTg3L3RhYmxlOjI0OTc5OGIxYTZiMDRhZGU5MDU4MzliNjYzZTUyMWQ1L3RhYmxlcmFuZ2U6MjQ5Nzk4YjFhNmIwNGFkZTkwNTgzOWI2NjNlNTIxZDVfMy0zLTEtMS03MTk3OQ_92699185-9a0e-4135-848f-309c7cd89a99"
      unitRef="usd">0</us-gaap:BusinessCombinationConsiderationTransferred1>
    <us-gaap:BusinessCombinationConsiderationTransferred1
      contextRef="i0207b01ae2e644489c3a15e769ae5534_D20220101-20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl84OC9mcmFnOjc1MzBmMjg5MTFmNDQ0Nzg4OTVkYWNmMjIzMWQ3YTg3L3RhYmxlOjI0OTc5OGIxYTZiMDRhZGU5MDU4MzliNjYzZTUyMWQ1L3RhYmxlcmFuZ2U6MjQ5Nzk4YjFhNmIwNGFkZTkwNTgzOWI2NjNlNTIxZDVfMy01LTEtMS03MTk3OQ_16080766-35a4-4998-9eae-5d1c76771952"
      unitRef="usd">45089000</us-gaap:BusinessCombinationConsiderationTransferred1>
    <us-gaap:BusinessCombinationConsiderationTransferred1
      contextRef="id2ea5b1f234b490b9f01582feb98ffff_D20220101-20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl84OC9mcmFnOjc1MzBmMjg5MTFmNDQ0Nzg4OTVkYWNmMjIzMWQ3YTg3L3RhYmxlOjI0OTc5OGIxYTZiMDRhZGU5MDU4MzliNjYzZTUyMWQ1L3RhYmxlcmFuZ2U6MjQ5Nzk4YjFhNmIwNGFkZTkwNTgzOWI2NjNlNTIxZDVfMy03LTEtMS03MTk3OQ_0e0375d0-6f20-4758-bd2d-e9ca16722d16"
      unitRef="usd">49072000</us-gaap:BusinessCombinationConsiderationTransferred1>
    <us-gaap:BusinessCombinationRecognizedIdentifiableAssetsAcquiredAndLiabilitiesAssumedCashAndEquivalents
      contextRef="iaa977065ec534554be0e1f2e9d97d659_I20220930"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl84OC9mcmFnOjc1MzBmMjg5MTFmNDQ0Nzg4OTVkYWNmMjIzMWQ3YTg3L3RhYmxlOjI0OTc5OGIxYTZiMDRhZGU5MDU4MzliNjYzZTUyMWQ1L3RhYmxlcmFuZ2U6MjQ5Nzk4YjFhNmIwNGFkZTkwNTgzOWI2NjNlNTIxZDVfNi0xLTEtMS03MTk3OQ_96160a1b-4b56-4748-9aca-9f1452b3ec5c"
      unitRef="usd">230000</us-gaap:BusinessCombinationRecognizedIdentifiableAssetsAcquiredAndLiabilitiesAssumedCashAndEquivalents>
    <us-gaap:BusinessCombinationRecognizedIdentifiableAssetsAcquiredAndLiabilitiesAssumedCashAndEquivalents
      contextRef="i451b6df984f54b95b575f545928ea3d9_I20220930"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl84OC9mcmFnOjc1MzBmMjg5MTFmNDQ0Nzg4OTVkYWNmMjIzMWQ3YTg3L3RhYmxlOjI0OTc5OGIxYTZiMDRhZGU5MDU4MzliNjYzZTUyMWQ1L3RhYmxlcmFuZ2U6MjQ5Nzk4YjFhNmIwNGFkZTkwNTgzOWI2NjNlNTIxZDVfNi0zLTEtMS03MTk3OQ_34891a4d-ae07-4eb0-90ca-572223ed719f"
      unitRef="usd">0</us-gaap:BusinessCombinationRecognizedIdentifiableAssetsAcquiredAndLiabilitiesAssumedCashAndEquivalents>
    <us-gaap:BusinessCombinationRecognizedIdentifiableAssetsAcquiredAndLiabilitiesAssumedCashAndEquivalents
      contextRef="i5326af3d5d33421e8a6e271c600b7a15_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl84OC9mcmFnOjc1MzBmMjg5MTFmNDQ0Nzg4OTVkYWNmMjIzMWQ3YTg3L3RhYmxlOjI0OTc5OGIxYTZiMDRhZGU5MDU4MzliNjYzZTUyMWQ1L3RhYmxlcmFuZ2U6MjQ5Nzk4YjFhNmIwNGFkZTkwNTgzOWI2NjNlNTIxZDVfNi01LTEtMS03MTk3OQ_b8d0e67b-49f5-4830-8393-2e630d1170bd"
      unitRef="usd">230000</us-gaap:BusinessCombinationRecognizedIdentifiableAssetsAcquiredAndLiabilitiesAssumedCashAndEquivalents>
    <us-gaap:BusinessCombinationRecognizedIdentifiableAssetsAcquiredAndLiabilitiesAssumedCashAndEquivalents
      contextRef="i0f16e266da3b4333ac471989e36cbe61_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl84OC9mcmFnOjc1MzBmMjg5MTFmNDQ0Nzg4OTVkYWNmMjIzMWQ3YTg3L3RhYmxlOjI0OTc5OGIxYTZiMDRhZGU5MDU4MzliNjYzZTUyMWQ1L3RhYmxlcmFuZ2U6MjQ5Nzk4YjFhNmIwNGFkZTkwNTgzOWI2NjNlNTIxZDVfNi03LTEtMS03MTk3OQ_8a1e2f83-14f1-461c-bd44-d4246676b2d6"
      unitRef="usd">668000</us-gaap:BusinessCombinationRecognizedIdentifiableAssetsAcquiredAndLiabilitiesAssumedCashAndEquivalents>
    <us-gaap:BusinessCombinationRecognizedIdentifiableAssetsAcquiredAndLiabilitiesAssumedCurrentAssetsReceivables
      contextRef="iaa977065ec534554be0e1f2e9d97d659_I20220930"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl84OC9mcmFnOjc1MzBmMjg5MTFmNDQ0Nzg4OTVkYWNmMjIzMWQ3YTg3L3RhYmxlOjI0OTc5OGIxYTZiMDRhZGU5MDU4MzliNjYzZTUyMWQ1L3RhYmxlcmFuZ2U6MjQ5Nzk4YjFhNmIwNGFkZTkwNTgzOWI2NjNlNTIxZDVfNy0xLTEtMS03MTk3OQ_4c1a124e-b6f8-4765-af42-aef742788f95"
      unitRef="usd">467000</us-gaap:BusinessCombinationRecognizedIdentifiableAssetsAcquiredAndLiabilitiesAssumedCurrentAssetsReceivables>
    <us-gaap:BusinessCombinationRecognizedIdentifiableAssetsAcquiredAndLiabilitiesAssumedCurrentAssetsReceivables
      contextRef="i451b6df984f54b95b575f545928ea3d9_I20220930"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl84OC9mcmFnOjc1MzBmMjg5MTFmNDQ0Nzg4OTVkYWNmMjIzMWQ3YTg3L3RhYmxlOjI0OTc5OGIxYTZiMDRhZGU5MDU4MzliNjYzZTUyMWQ1L3RhYmxlcmFuZ2U6MjQ5Nzk4YjFhNmIwNGFkZTkwNTgzOWI2NjNlNTIxZDVfNy0zLTEtMS03MTk3OQ_df65f02d-3f2e-4001-828c-4520378a5681"
      unitRef="usd">0</us-gaap:BusinessCombinationRecognizedIdentifiableAssetsAcquiredAndLiabilitiesAssumedCurrentAssetsReceivables>
    <us-gaap:BusinessCombinationRecognizedIdentifiableAssetsAcquiredAndLiabilitiesAssumedCurrentAssetsReceivables
      contextRef="i5326af3d5d33421e8a6e271c600b7a15_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl84OC9mcmFnOjc1MzBmMjg5MTFmNDQ0Nzg4OTVkYWNmMjIzMWQ3YTg3L3RhYmxlOjI0OTc5OGIxYTZiMDRhZGU5MDU4MzliNjYzZTUyMWQ1L3RhYmxlcmFuZ2U6MjQ5Nzk4YjFhNmIwNGFkZTkwNTgzOWI2NjNlNTIxZDVfNy01LTEtMS03MTk3OQ_7e077459-05ae-47af-a561-5b18ef50be53"
      unitRef="usd">467000</us-gaap:BusinessCombinationRecognizedIdentifiableAssetsAcquiredAndLiabilitiesAssumedCurrentAssetsReceivables>
    <us-gaap:BusinessCombinationRecognizedIdentifiableAssetsAcquiredAndLiabilitiesAssumedCurrentAssetsReceivables
      contextRef="i0f16e266da3b4333ac471989e36cbe61_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl84OC9mcmFnOjc1MzBmMjg5MTFmNDQ0Nzg4OTVkYWNmMjIzMWQ3YTg3L3RhYmxlOjI0OTc5OGIxYTZiMDRhZGU5MDU4MzliNjYzZTUyMWQ1L3RhYmxlcmFuZ2U6MjQ5Nzk4YjFhNmIwNGFkZTkwNTgzOWI2NjNlNTIxZDVfNy03LTEtMS03MTk3OQ_15851335-3cf5-4586-9547-8aa81c00ffd6"
      unitRef="usd">1302000</us-gaap:BusinessCombinationRecognizedIdentifiableAssetsAcquiredAndLiabilitiesAssumedCurrentAssetsReceivables>
    <us-gaap:BusinessCombinationRecognizedIdentifiableAssetsAcquiredAndLiabilitiesAssumedCurrentAssetsOther
      contextRef="iaa977065ec534554be0e1f2e9d97d659_I20220930"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl84OC9mcmFnOjc1MzBmMjg5MTFmNDQ0Nzg4OTVkYWNmMjIzMWQ3YTg3L3RhYmxlOjI0OTc5OGIxYTZiMDRhZGU5MDU4MzliNjYzZTUyMWQ1L3RhYmxlcmFuZ2U6MjQ5Nzk4YjFhNmIwNGFkZTkwNTgzOWI2NjNlNTIxZDVfOC0xLTEtMS03MTk3OQ_e1070cfb-5791-4845-a23f-c084fac1f4d3"
      unitRef="usd">288000</us-gaap:BusinessCombinationRecognizedIdentifiableAssetsAcquiredAndLiabilitiesAssumedCurrentAssetsOther>
    <us-gaap:BusinessCombinationRecognizedIdentifiableAssetsAcquiredAndLiabilitiesAssumedCurrentAssetsOther
      contextRef="i451b6df984f54b95b575f545928ea3d9_I20220930"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl84OC9mcmFnOjc1MzBmMjg5MTFmNDQ0Nzg4OTVkYWNmMjIzMWQ3YTg3L3RhYmxlOjI0OTc5OGIxYTZiMDRhZGU5MDU4MzliNjYzZTUyMWQ1L3RhYmxlcmFuZ2U6MjQ5Nzk4YjFhNmIwNGFkZTkwNTgzOWI2NjNlNTIxZDVfOC0zLTEtMS03MTk3OQ_cb66b243-25c1-4e26-91c0-1d80f3c148ac"
      unitRef="usd">0</us-gaap:BusinessCombinationRecognizedIdentifiableAssetsAcquiredAndLiabilitiesAssumedCurrentAssetsOther>
    <us-gaap:BusinessCombinationRecognizedIdentifiableAssetsAcquiredAndLiabilitiesAssumedCurrentAssetsOther
      contextRef="i5326af3d5d33421e8a6e271c600b7a15_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl84OC9mcmFnOjc1MzBmMjg5MTFmNDQ0Nzg4OTVkYWNmMjIzMWQ3YTg3L3RhYmxlOjI0OTc5OGIxYTZiMDRhZGU5MDU4MzliNjYzZTUyMWQ1L3RhYmxlcmFuZ2U6MjQ5Nzk4YjFhNmIwNGFkZTkwNTgzOWI2NjNlNTIxZDVfOC01LTEtMS03MTk3OQ_05dcde3a-290a-47eb-81fd-fd4716b5b7b5"
      unitRef="usd">288000</us-gaap:BusinessCombinationRecognizedIdentifiableAssetsAcquiredAndLiabilitiesAssumedCurrentAssetsOther>
    <us-gaap:BusinessCombinationRecognizedIdentifiableAssetsAcquiredAndLiabilitiesAssumedCurrentAssetsOther
      contextRef="i0f16e266da3b4333ac471989e36cbe61_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl84OC9mcmFnOjc1MzBmMjg5MTFmNDQ0Nzg4OTVkYWNmMjIzMWQ3YTg3L3RhYmxlOjI0OTc5OGIxYTZiMDRhZGU5MDU4MzliNjYzZTUyMWQ1L3RhYmxlcmFuZ2U6MjQ5Nzk4YjFhNmIwNGFkZTkwNTgzOWI2NjNlNTIxZDVfOC03LTEtMS03MTk3OQ_9ebe9854-83dd-4495-88b6-40dc4a53f516"
      unitRef="usd">1903000</us-gaap:BusinessCombinationRecognizedIdentifiableAssetsAcquiredAndLiabilitiesAssumedCurrentAssetsOther>
    <spsc:BusinessCombinationRecognizedIdentifiableAssetsAcquiredAndLiabilitiesAssumedOperatingLeaseRightOfUseAsset
      contextRef="iaa977065ec534554be0e1f2e9d97d659_I20220930"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl84OC9mcmFnOjc1MzBmMjg5MTFmNDQ0Nzg4OTVkYWNmMjIzMWQ3YTg3L3RhYmxlOjI0OTc5OGIxYTZiMDRhZGU5MDU4MzliNjYzZTUyMWQ1L3RhYmxlcmFuZ2U6MjQ5Nzk4YjFhNmIwNGFkZTkwNTgzOWI2NjNlNTIxZDVfOS0xLTEtMS03MTk3OQ_0d481d58-af25-4f31-8a24-57b32eb8591b"
      unitRef="usd">934000</spsc:BusinessCombinationRecognizedIdentifiableAssetsAcquiredAndLiabilitiesAssumedOperatingLeaseRightOfUseAsset>
    <spsc:BusinessCombinationRecognizedIdentifiableAssetsAcquiredAndLiabilitiesAssumedOperatingLeaseRightOfUseAsset
      contextRef="i451b6df984f54b95b575f545928ea3d9_I20220930"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl84OC9mcmFnOjc1MzBmMjg5MTFmNDQ0Nzg4OTVkYWNmMjIzMWQ3YTg3L3RhYmxlOjI0OTc5OGIxYTZiMDRhZGU5MDU4MzliNjYzZTUyMWQ1L3RhYmxlcmFuZ2U6MjQ5Nzk4YjFhNmIwNGFkZTkwNTgzOWI2NjNlNTIxZDVfOS0zLTEtMS03MTk3OQ_cd40c0d6-2844-4a19-9bd8-74994b26b217"
      unitRef="usd">0</spsc:BusinessCombinationRecognizedIdentifiableAssetsAcquiredAndLiabilitiesAssumedOperatingLeaseRightOfUseAsset>
    <spsc:BusinessCombinationRecognizedIdentifiableAssetsAcquiredAndLiabilitiesAssumedOperatingLeaseRightOfUseAsset
      contextRef="i5326af3d5d33421e8a6e271c600b7a15_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl84OC9mcmFnOjc1MzBmMjg5MTFmNDQ0Nzg4OTVkYWNmMjIzMWQ3YTg3L3RhYmxlOjI0OTc5OGIxYTZiMDRhZGU5MDU4MzliNjYzZTUyMWQ1L3RhYmxlcmFuZ2U6MjQ5Nzk4YjFhNmIwNGFkZTkwNTgzOWI2NjNlNTIxZDVfOS01LTEtMS03MTk3OQ_c0d1eb17-b8fd-4bec-9e36-37a5af6f4e71"
      unitRef="usd">934000</spsc:BusinessCombinationRecognizedIdentifiableAssetsAcquiredAndLiabilitiesAssumedOperatingLeaseRightOfUseAsset>
    <spsc:BusinessCombinationRecognizedIdentifiableAssetsAcquiredAndLiabilitiesAssumedOperatingLeaseRightOfUseAsset
      contextRef="i0f16e266da3b4333ac471989e36cbe61_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl84OC9mcmFnOjc1MzBmMjg5MTFmNDQ0Nzg4OTVkYWNmMjIzMWQ3YTg3L3RhYmxlOjI0OTc5OGIxYTZiMDRhZGU5MDU4MzliNjYzZTUyMWQ1L3RhYmxlcmFuZ2U6MjQ5Nzk4YjFhNmIwNGFkZTkwNTgzOWI2NjNlNTIxZDVfOS03LTEtMS03MTk3OQ_317a4b1d-c695-4790-a4b9-c0aac7fc7bd2"
      unitRef="usd">0</spsc:BusinessCombinationRecognizedIdentifiableAssetsAcquiredAndLiabilitiesAssumedOperatingLeaseRightOfUseAsset>
    <us-gaap:BusinessCombinationRecognizedIdentifiableAssetsAcquiredAndLiabilitiesAssumedIntangibleAssetsOtherThanGoodwill
      contextRef="i14501a691778485d8b657bef0d08dc8a_I20220930"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl84OC9mcmFnOjc1MzBmMjg5MTFmNDQ0Nzg4OTVkYWNmMjIzMWQ3YTg3L3RhYmxlOjI0OTc5OGIxYTZiMDRhZGU5MDU4MzliNjYzZTUyMWQ1L3RhYmxlcmFuZ2U6MjQ5Nzk4YjFhNmIwNGFkZTkwNTgzOWI2NjNlNTIxZDVfMTEtMS0xLTEtNzE5Nzk_d1c8e781-fa37-4764-93ff-7530c9b2edb1"
      unitRef="usd">18225000</us-gaap:BusinessCombinationRecognizedIdentifiableAssetsAcquiredAndLiabilitiesAssumedIntangibleAssetsOtherThanGoodwill>
    <us-gaap:BusinessCombinationRecognizedIdentifiableAssetsAcquiredAndLiabilitiesAssumedIntangibleAssetsOtherThanGoodwill
      contextRef="i2cf2c413d31248bdb80e2effb23be03b_I20220930"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl84OC9mcmFnOjc1MzBmMjg5MTFmNDQ0Nzg4OTVkYWNmMjIzMWQ3YTg3L3RhYmxlOjI0OTc5OGIxYTZiMDRhZGU5MDU4MzliNjYzZTUyMWQ1L3RhYmxlcmFuZ2U6MjQ5Nzk4YjFhNmIwNGFkZTkwNTgzOWI2NjNlNTIxZDVfMTEtMy0xLTEtNzE5Nzk_fb0a50fe-44fd-4146-a650-652c369ad3d2"
      unitRef="usd">-925000</us-gaap:BusinessCombinationRecognizedIdentifiableAssetsAcquiredAndLiabilitiesAssumedIntangibleAssetsOtherThanGoodwill>
    <us-gaap:BusinessCombinationRecognizedIdentifiableAssetsAcquiredAndLiabilitiesAssumedIntangibleAssetsOtherThanGoodwill
      contextRef="i05ee805b24664d85bbcae6b65e806a98_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl84OC9mcmFnOjc1MzBmMjg5MTFmNDQ0Nzg4OTVkYWNmMjIzMWQ3YTg3L3RhYmxlOjI0OTc5OGIxYTZiMDRhZGU5MDU4MzliNjYzZTUyMWQ1L3RhYmxlcmFuZ2U6MjQ5Nzk4YjFhNmIwNGFkZTkwNTgzOWI2NjNlNTIxZDVfMTEtNS0xLTEtNzE5Nzk_8f98deb0-1f70-4033-a957-3682919725f1"
      unitRef="usd">17300000</us-gaap:BusinessCombinationRecognizedIdentifiableAssetsAcquiredAndLiabilitiesAssumedIntangibleAssetsOtherThanGoodwill>
    <us-gaap:BusinessCombinationRecognizedIdentifiableAssetsAcquiredAndLiabilitiesAssumedIntangibleAssetsOtherThanGoodwill
      contextRef="i1f3f2ed6bc02435da64df16c76ee7e1a_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl84OC9mcmFnOjc1MzBmMjg5MTFmNDQ0Nzg4OTVkYWNmMjIzMWQ3YTg3L3RhYmxlOjI0OTc5OGIxYTZiMDRhZGU5MDU4MzliNjYzZTUyMWQ1L3RhYmxlcmFuZ2U6MjQ5Nzk4YjFhNmIwNGFkZTkwNTgzOWI2NjNlNTIxZDVfMTEtNy0xLTEtNzE5Nzk_21a59813-6b2c-4e27-b37d-70c9e430ea7d"
      unitRef="usd">17640000</us-gaap:BusinessCombinationRecognizedIdentifiableAssetsAcquiredAndLiabilitiesAssumedIntangibleAssetsOtherThanGoodwill>
    <us-gaap:BusinessCombinationRecognizedIdentifiableAssetsAcquiredAndLiabilitiesAssumedIntangibleAssetsOtherThanGoodwill
      contextRef="i359d007b1436486580588eb1bc9e132f_I20220930"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl84OC9mcmFnOjc1MzBmMjg5MTFmNDQ0Nzg4OTVkYWNmMjIzMWQ3YTg3L3RhYmxlOjI0OTc5OGIxYTZiMDRhZGU5MDU4MzliNjYzZTUyMWQ1L3RhYmxlcmFuZ2U6MjQ5Nzk4YjFhNmIwNGFkZTkwNTgzOWI2NjNlNTIxZDVfMTItMS0xLTEtNzE5Nzk_19069c75-6c1b-4791-a4b3-bc6951268f3e"
      unitRef="usd">2025000</us-gaap:BusinessCombinationRecognizedIdentifiableAssetsAcquiredAndLiabilitiesAssumedIntangibleAssetsOtherThanGoodwill>
    <us-gaap:BusinessCombinationRecognizedIdentifiableAssetsAcquiredAndLiabilitiesAssumedIntangibleAssetsOtherThanGoodwill
      contextRef="icdcff980db954023b7a10ca92f1abc58_I20220930"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl84OC9mcmFnOjc1MzBmMjg5MTFmNDQ0Nzg4OTVkYWNmMjIzMWQ3YTg3L3RhYmxlOjI0OTc5OGIxYTZiMDRhZGU5MDU4MzliNjYzZTUyMWQ1L3RhYmxlcmFuZ2U6MjQ5Nzk4YjFhNmIwNGFkZTkwNTgzOWI2NjNlNTIxZDVfMTItMy0xLTEtNzE5Nzk_37485c8e-4a00-4be1-88f0-fe118c18d4a2"
      unitRef="usd">275000</us-gaap:BusinessCombinationRecognizedIdentifiableAssetsAcquiredAndLiabilitiesAssumedIntangibleAssetsOtherThanGoodwill>
    <us-gaap:BusinessCombinationRecognizedIdentifiableAssetsAcquiredAndLiabilitiesAssumedIntangibleAssetsOtherThanGoodwill
      contextRef="i738817c4be0e4b52afcbdf103d2cd075_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl84OC9mcmFnOjc1MzBmMjg5MTFmNDQ0Nzg4OTVkYWNmMjIzMWQ3YTg3L3RhYmxlOjI0OTc5OGIxYTZiMDRhZGU5MDU4MzliNjYzZTUyMWQ1L3RhYmxlcmFuZ2U6MjQ5Nzk4YjFhNmIwNGFkZTkwNTgzOWI2NjNlNTIxZDVfMTItNS0xLTEtNzE5Nzk_912c1751-07f2-4cc2-b35a-7aeaa9dcf3a7"
      unitRef="usd">2300000</us-gaap:BusinessCombinationRecognizedIdentifiableAssetsAcquiredAndLiabilitiesAssumedIntangibleAssetsOtherThanGoodwill>
    <us-gaap:BusinessCombinationRecognizedIdentifiableAssetsAcquiredAndLiabilitiesAssumedIntangibleAssetsOtherThanGoodwill
      contextRef="i96f8ea5781aa4137b30268dd4f88f825_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl84OC9mcmFnOjc1MzBmMjg5MTFmNDQ0Nzg4OTVkYWNmMjIzMWQ3YTg3L3RhYmxlOjI0OTc5OGIxYTZiMDRhZGU5MDU4MzliNjYzZTUyMWQ1L3RhYmxlcmFuZ2U6MjQ5Nzk4YjFhNmIwNGFkZTkwNTgzOWI2NjNlNTIxZDVfMTItNy0xLTEtNzE5Nzk_52727ff7-3d54-47bc-9c42-c3d2ad69cc70"
      unitRef="usd">4410000</us-gaap:BusinessCombinationRecognizedIdentifiableAssetsAcquiredAndLiabilitiesAssumedIntangibleAssetsOtherThanGoodwill>
    <us-gaap:BusinessCombinationRecognizedIdentifiableAssetsAcquiredAndLiabilitiesAssumedDeferredTaxAssets
      contextRef="iaa977065ec534554be0e1f2e9d97d659_I20220930"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl84OC9mcmFnOjc1MzBmMjg5MTFmNDQ0Nzg4OTVkYWNmMjIzMWQ3YTg3L3RhYmxlOjI0OTc5OGIxYTZiMDRhZGU5MDU4MzliNjYzZTUyMWQ1L3RhYmxlcmFuZ2U6MjQ5Nzk4YjFhNmIwNGFkZTkwNTgzOWI2NjNlNTIxZDVfMTMtMS0xLTEtNzE5Nzk_110c98ab-f969-4179-8fa5-d2c296562361"
      unitRef="usd">5291000</us-gaap:BusinessCombinationRecognizedIdentifiableAssetsAcquiredAndLiabilitiesAssumedDeferredTaxAssets>
    <us-gaap:BusinessCombinationRecognizedIdentifiableAssetsAcquiredAndLiabilitiesAssumedDeferredTaxAssets
      contextRef="i451b6df984f54b95b575f545928ea3d9_I20220930"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl84OC9mcmFnOjc1MzBmMjg5MTFmNDQ0Nzg4OTVkYWNmMjIzMWQ3YTg3L3RhYmxlOjI0OTc5OGIxYTZiMDRhZGU5MDU4MzliNjYzZTUyMWQ1L3RhYmxlcmFuZ2U6MjQ5Nzk4YjFhNmIwNGFkZTkwNTgzOWI2NjNlNTIxZDVfMTMtMy0xLTEtNzE5Nzk_27762fa8-069b-45c9-972c-06a0b1265fdd"
      unitRef="usd">1440000</us-gaap:BusinessCombinationRecognizedIdentifiableAssetsAcquiredAndLiabilitiesAssumedDeferredTaxAssets>
    <us-gaap:BusinessCombinationRecognizedIdentifiableAssetsAcquiredAndLiabilitiesAssumedDeferredTaxAssets
      contextRef="i5326af3d5d33421e8a6e271c600b7a15_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl84OC9mcmFnOjc1MzBmMjg5MTFmNDQ0Nzg4OTVkYWNmMjIzMWQ3YTg3L3RhYmxlOjI0OTc5OGIxYTZiMDRhZGU5MDU4MzliNjYzZTUyMWQ1L3RhYmxlcmFuZ2U6MjQ5Nzk4YjFhNmIwNGFkZTkwNTgzOWI2NjNlNTIxZDVfMTMtNS0xLTEtNzE5Nzk_57c2c972-5ff2-4666-8be6-116934071cc0"
      unitRef="usd">6731000</us-gaap:BusinessCombinationRecognizedIdentifiableAssetsAcquiredAndLiabilitiesAssumedDeferredTaxAssets>
    <us-gaap:BusinessCombinationRecognizedIdentifiableAssetsAcquiredAndLiabilitiesAssumedDeferredTaxAssets
      contextRef="i0f16e266da3b4333ac471989e36cbe61_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl84OC9mcmFnOjc1MzBmMjg5MTFmNDQ0Nzg4OTVkYWNmMjIzMWQ3YTg3L3RhYmxlOjI0OTc5OGIxYTZiMDRhZGU5MDU4MzliNjYzZTUyMWQ1L3RhYmxlcmFuZ2U6MjQ5Nzk4YjFhNmIwNGFkZTkwNTgzOWI2NjNlNTIxZDVfMTMtNy0xLTEtNzE5Nzk_7cb7a382-ebe3-43f4-af28-e5371c9f8a36"
      unitRef="usd">101000</us-gaap:BusinessCombinationRecognizedIdentifiableAssetsAcquiredAndLiabilitiesAssumedDeferredTaxAssets>
    <us-gaap:BusinessCombinationRecognizedIdentifiableAssetsAcquiredAndLiabilitiesAssumedCurrentLiabilitiesAccountsPayable
      contextRef="iaa977065ec534554be0e1f2e9d97d659_I20220930"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl84OC9mcmFnOjc1MzBmMjg5MTFmNDQ0Nzg4OTVkYWNmMjIzMWQ3YTg3L3RhYmxlOjI0OTc5OGIxYTZiMDRhZGU5MDU4MzliNjYzZTUyMWQ1L3RhYmxlcmFuZ2U6MjQ5Nzk4YjFhNmIwNGFkZTkwNTgzOWI2NjNlNTIxZDVfMTQtMS0xLTEtNzE5Nzk_431a6882-7f11-4363-9d3a-b1ad8c4df44b"
      unitRef="usd">266000</us-gaap:BusinessCombinationRecognizedIdentifiableAssetsAcquiredAndLiabilitiesAssumedCurrentLiabilitiesAccountsPayable>
    <us-gaap:BusinessCombinationRecognizedIdentifiableAssetsAcquiredAndLiabilitiesAssumedCurrentLiabilitiesAccountsPayable
      contextRef="i451b6df984f54b95b575f545928ea3d9_I20220930"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl84OC9mcmFnOjc1MzBmMjg5MTFmNDQ0Nzg4OTVkYWNmMjIzMWQ3YTg3L3RhYmxlOjI0OTc5OGIxYTZiMDRhZGU5MDU4MzliNjYzZTUyMWQ1L3RhYmxlcmFuZ2U6MjQ5Nzk4YjFhNmIwNGFkZTkwNTgzOWI2NjNlNTIxZDVfMTQtMy0xLTEtNzE5Nzk_f6361502-da38-4862-b086-2f5c75a90965"
      unitRef="usd">0</us-gaap:BusinessCombinationRecognizedIdentifiableAssetsAcquiredAndLiabilitiesAssumedCurrentLiabilitiesAccountsPayable>
    <us-gaap:BusinessCombinationRecognizedIdentifiableAssetsAcquiredAndLiabilitiesAssumedCurrentLiabilitiesAccountsPayable
      contextRef="i5326af3d5d33421e8a6e271c600b7a15_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl84OC9mcmFnOjc1MzBmMjg5MTFmNDQ0Nzg4OTVkYWNmMjIzMWQ3YTg3L3RhYmxlOjI0OTc5OGIxYTZiMDRhZGU5MDU4MzliNjYzZTUyMWQ1L3RhYmxlcmFuZ2U6MjQ5Nzk4YjFhNmIwNGFkZTkwNTgzOWI2NjNlNTIxZDVfMTQtNS0xLTEtNzE5Nzk_aa0c7a73-03ea-4dea-92e6-4b3e1a64a132"
      unitRef="usd">266000</us-gaap:BusinessCombinationRecognizedIdentifiableAssetsAcquiredAndLiabilitiesAssumedCurrentLiabilitiesAccountsPayable>
    <us-gaap:BusinessCombinationRecognizedIdentifiableAssetsAcquiredAndLiabilitiesAssumedCurrentLiabilitiesAccountsPayable
      contextRef="i0f16e266da3b4333ac471989e36cbe61_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl84OC9mcmFnOjc1MzBmMjg5MTFmNDQ0Nzg4OTVkYWNmMjIzMWQ3YTg3L3RhYmxlOjI0OTc5OGIxYTZiMDRhZGU5MDU4MzliNjYzZTUyMWQ1L3RhYmxlcmFuZ2U6MjQ5Nzk4YjFhNmIwNGFkZTkwNTgzOWI2NjNlNTIxZDVfMTQtNy0xLTEtNzE5Nzk_b4247f8d-56ce-421c-bc9d-775bbfde34b7"
      unitRef="usd">2337000</us-gaap:BusinessCombinationRecognizedIdentifiableAssetsAcquiredAndLiabilitiesAssumedCurrentLiabilitiesAccountsPayable>
    <spsc:BusinessCombinationRecognizedIdentifiableAssetsAcquiredAndLiabilitiesAssumedAccruedLiabilities
      contextRef="iaa977065ec534554be0e1f2e9d97d659_I20220930"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl84OC9mcmFnOjc1MzBmMjg5MTFmNDQ0Nzg4OTVkYWNmMjIzMWQ3YTg3L3RhYmxlOjI0OTc5OGIxYTZiMDRhZGU5MDU4MzliNjYzZTUyMWQ1L3RhYmxlcmFuZ2U6MjQ5Nzk4YjFhNmIwNGFkZTkwNTgzOWI2NjNlNTIxZDVfMTYtMS0xLTEtNzE5Nzk_d3d8f9a7-5b08-43eb-bc2d-b8b3bca3d4c1"
      unitRef="usd">321000</spsc:BusinessCombinationRecognizedIdentifiableAssetsAcquiredAndLiabilitiesAssumedAccruedLiabilities>
    <spsc:BusinessCombinationRecognizedIdentifiableAssetsAcquiredAndLiabilitiesAssumedAccruedLiabilities
      contextRef="i451b6df984f54b95b575f545928ea3d9_I20220930"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl84OC9mcmFnOjc1MzBmMjg5MTFmNDQ0Nzg4OTVkYWNmMjIzMWQ3YTg3L3RhYmxlOjI0OTc5OGIxYTZiMDRhZGU5MDU4MzliNjYzZTUyMWQ1L3RhYmxlcmFuZ2U6MjQ5Nzk4YjFhNmIwNGFkZTkwNTgzOWI2NjNlNTIxZDVfMTYtMy0xLTEtNzE5Nzk_b680dd12-36ca-44b7-bdb2-40fb91a9d31e"
      unitRef="usd">0</spsc:BusinessCombinationRecognizedIdentifiableAssetsAcquiredAndLiabilitiesAssumedAccruedLiabilities>
    <spsc:BusinessCombinationRecognizedIdentifiableAssetsAcquiredAndLiabilitiesAssumedAccruedLiabilities
      contextRef="i5326af3d5d33421e8a6e271c600b7a15_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl84OC9mcmFnOjc1MzBmMjg5MTFmNDQ0Nzg4OTVkYWNmMjIzMWQ3YTg3L3RhYmxlOjI0OTc5OGIxYTZiMDRhZGU5MDU4MzliNjYzZTUyMWQ1L3RhYmxlcmFuZ2U6MjQ5Nzk4YjFhNmIwNGFkZTkwNTgzOWI2NjNlNTIxZDVfMTYtNS0xLTEtNzE5Nzk_ae71d197-b83b-4b4a-8bd6-5173a922c1a9"
      unitRef="usd">321000</spsc:BusinessCombinationRecognizedIdentifiableAssetsAcquiredAndLiabilitiesAssumedAccruedLiabilities>
    <spsc:BusinessCombinationRecognizedIdentifiableAssetsAcquiredAndLiabilitiesAssumedAccruedLiabilities
      contextRef="i0f16e266da3b4333ac471989e36cbe61_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl84OC9mcmFnOjc1MzBmMjg5MTFmNDQ0Nzg4OTVkYWNmMjIzMWQ3YTg3L3RhYmxlOjI0OTc5OGIxYTZiMDRhZGU5MDU4MzliNjYzZTUyMWQ1L3RhYmxlcmFuZ2U6MjQ5Nzk4YjFhNmIwNGFkZTkwNTgzOWI2NjNlNTIxZDVfMTYtNy0xLTEtNzE5Nzk_34882ef7-fcd0-4776-abee-823c11c96272"
      unitRef="usd">0</spsc:BusinessCombinationRecognizedIdentifiableAssetsAcquiredAndLiabilitiesAssumedAccruedLiabilities>
    <us-gaap:BusinessCombinationRecognizedIdentifiableAssetsAcquiredAndLiabilitiesAssumedCurrentLiabilitiesDeferredRevenue
      contextRef="iaa977065ec534554be0e1f2e9d97d659_I20220930"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl84OC9mcmFnOjc1MzBmMjg5MTFmNDQ0Nzg4OTVkYWNmMjIzMWQ3YTg3L3RhYmxlOjI0OTc5OGIxYTZiMDRhZGU5MDU4MzliNjYzZTUyMWQ1L3RhYmxlcmFuZ2U6MjQ5Nzk4YjFhNmIwNGFkZTkwNTgzOWI2NjNlNTIxZDVfMTctMS0xLTEtNzE5Nzk_bfe2fe59-4107-4521-862b-b68ab0b3f7d5"
      unitRef="usd">262000</us-gaap:BusinessCombinationRecognizedIdentifiableAssetsAcquiredAndLiabilitiesAssumedCurrentLiabilitiesDeferredRevenue>
    <us-gaap:BusinessCombinationRecognizedIdentifiableAssetsAcquiredAndLiabilitiesAssumedCurrentLiabilitiesDeferredRevenue
      contextRef="i451b6df984f54b95b575f545928ea3d9_I20220930"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl84OC9mcmFnOjc1MzBmMjg5MTFmNDQ0Nzg4OTVkYWNmMjIzMWQ3YTg3L3RhYmxlOjI0OTc5OGIxYTZiMDRhZGU5MDU4MzliNjYzZTUyMWQ1L3RhYmxlcmFuZ2U6MjQ5Nzk4YjFhNmIwNGFkZTkwNTgzOWI2NjNlNTIxZDVfMTctMy0xLTEtNzE5Nzk_c060da66-0720-4a65-8f76-38715cd1ed3b"
      unitRef="usd">0</us-gaap:BusinessCombinationRecognizedIdentifiableAssetsAcquiredAndLiabilitiesAssumedCurrentLiabilitiesDeferredRevenue>
    <us-gaap:BusinessCombinationRecognizedIdentifiableAssetsAcquiredAndLiabilitiesAssumedCurrentLiabilitiesDeferredRevenue
      contextRef="i5326af3d5d33421e8a6e271c600b7a15_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl84OC9mcmFnOjc1MzBmMjg5MTFmNDQ0Nzg4OTVkYWNmMjIzMWQ3YTg3L3RhYmxlOjI0OTc5OGIxYTZiMDRhZGU5MDU4MzliNjYzZTUyMWQ1L3RhYmxlcmFuZ2U6MjQ5Nzk4YjFhNmIwNGFkZTkwNTgzOWI2NjNlNTIxZDVfMTctNS0xLTEtNzE5Nzk_991315f0-01b6-4545-b6e3-2db3507ee025"
      unitRef="usd">262000</us-gaap:BusinessCombinationRecognizedIdentifiableAssetsAcquiredAndLiabilitiesAssumedCurrentLiabilitiesDeferredRevenue>
    <us-gaap:BusinessCombinationRecognizedIdentifiableAssetsAcquiredAndLiabilitiesAssumedCurrentLiabilitiesDeferredRevenue
      contextRef="i0f16e266da3b4333ac471989e36cbe61_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl84OC9mcmFnOjc1MzBmMjg5MTFmNDQ0Nzg4OTVkYWNmMjIzMWQ3YTg3L3RhYmxlOjI0OTc5OGIxYTZiMDRhZGU5MDU4MzliNjYzZTUyMWQ1L3RhYmxlcmFuZ2U6MjQ5Nzk4YjFhNmIwNGFkZTkwNTgzOWI2NjNlNTIxZDVfMTctNy0xLTEtNzE5Nzk_563f1a80-7670-4bc5-a5fe-49bd49f78d28"
      unitRef="usd">397000</us-gaap:BusinessCombinationRecognizedIdentifiableAssetsAcquiredAndLiabilitiesAssumedCurrentLiabilitiesDeferredRevenue>
    <us-gaap:BusinessCombinationRecognizedIdentifiableAssetsAcquiredAndLiabilitiesAssumedCapitalLeaseObligation
      contextRef="iaa977065ec534554be0e1f2e9d97d659_I20220930"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl84OC9mcmFnOjc1MzBmMjg5MTFmNDQ0Nzg4OTVkYWNmMjIzMWQ3YTg3L3RhYmxlOjI0OTc5OGIxYTZiMDRhZGU5MDU4MzliNjYzZTUyMWQ1L3RhYmxlcmFuZ2U6MjQ5Nzk4YjFhNmIwNGFkZTkwNTgzOWI2NjNlNTIxZDVfMTgtMS0xLTEtNzE5Nzk_ad8e3a81-2535-41d9-b8c9-3057a0315d52"
      unitRef="usd">934000</us-gaap:BusinessCombinationRecognizedIdentifiableAssetsAcquiredAndLiabilitiesAssumedCapitalLeaseObligation>
    <us-gaap:BusinessCombinationRecognizedIdentifiableAssetsAcquiredAndLiabilitiesAssumedCapitalLeaseObligation
      contextRef="i451b6df984f54b95b575f545928ea3d9_I20220930"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl84OC9mcmFnOjc1MzBmMjg5MTFmNDQ0Nzg4OTVkYWNmMjIzMWQ3YTg3L3RhYmxlOjI0OTc5OGIxYTZiMDRhZGU5MDU4MzliNjYzZTUyMWQ1L3RhYmxlcmFuZ2U6MjQ5Nzk4YjFhNmIwNGFkZTkwNTgzOWI2NjNlNTIxZDVfMTgtMy0xLTEtNzE5Nzk_96082c55-f6d2-4ebb-ad62-d24adc4620ee"
      unitRef="usd">0</us-gaap:BusinessCombinationRecognizedIdentifiableAssetsAcquiredAndLiabilitiesAssumedCapitalLeaseObligation>
    <us-gaap:BusinessCombinationRecognizedIdentifiableAssetsAcquiredAndLiabilitiesAssumedCapitalLeaseObligation
      contextRef="i5326af3d5d33421e8a6e271c600b7a15_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl84OC9mcmFnOjc1MzBmMjg5MTFmNDQ0Nzg4OTVkYWNmMjIzMWQ3YTg3L3RhYmxlOjI0OTc5OGIxYTZiMDRhZGU5MDU4MzliNjYzZTUyMWQ1L3RhYmxlcmFuZ2U6MjQ5Nzk4YjFhNmIwNGFkZTkwNTgzOWI2NjNlNTIxZDVfMTgtNS0xLTEtNzE5Nzk_effb002a-b7ad-48dd-861e-1d2aac19f53a"
      unitRef="usd">934000</us-gaap:BusinessCombinationRecognizedIdentifiableAssetsAcquiredAndLiabilitiesAssumedCapitalLeaseObligation>
    <us-gaap:BusinessCombinationRecognizedIdentifiableAssetsAcquiredAndLiabilitiesAssumedCapitalLeaseObligation
      contextRef="i0f16e266da3b4333ac471989e36cbe61_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl84OC9mcmFnOjc1MzBmMjg5MTFmNDQ0Nzg4OTVkYWNmMjIzMWQ3YTg3L3RhYmxlOjI0OTc5OGIxYTZiMDRhZGU5MDU4MzliNjYzZTUyMWQ1L3RhYmxlcmFuZ2U6MjQ5Nzk4YjFhNmIwNGFkZTkwNTgzOWI2NjNlNTIxZDVfMTgtNy0xLTEtNzE5Nzk_9ba69f2f-91ed-490d-b448-a610d93a2486"
      unitRef="usd">0</us-gaap:BusinessCombinationRecognizedIdentifiableAssetsAcquiredAndLiabilitiesAssumedCapitalLeaseObligation>
    <us-gaap:BusinessCombinationRecognizedIdentifiableAssetsAcquiredAndLiabilitiesAssumedDeferredTaxLiabilities
      contextRef="iaa977065ec534554be0e1f2e9d97d659_I20220930"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl84OC9mcmFnOjc1MzBmMjg5MTFmNDQ0Nzg4OTVkYWNmMjIzMWQ3YTg3L3RhYmxlOjI0OTc5OGIxYTZiMDRhZGU5MDU4MzliNjYzZTUyMWQ1L3RhYmxlcmFuZ2U6MjQ5Nzk4YjFhNmIwNGFkZTkwNTgzOWI2NjNlNTIxZDVfMTktMS0xLTEtNzE5Nzk_db2737a0-f3d9-42c9-a62a-e1c73bc246ec"
      unitRef="usd">5144000</us-gaap:BusinessCombinationRecognizedIdentifiableAssetsAcquiredAndLiabilitiesAssumedDeferredTaxLiabilities>
    <us-gaap:BusinessCombinationRecognizedIdentifiableAssetsAcquiredAndLiabilitiesAssumedDeferredTaxLiabilities
      contextRef="i451b6df984f54b95b575f545928ea3d9_I20220930"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl84OC9mcmFnOjc1MzBmMjg5MTFmNDQ0Nzg4OTVkYWNmMjIzMWQ3YTg3L3RhYmxlOjI0OTc5OGIxYTZiMDRhZGU5MDU4MzliNjYzZTUyMWQ1L3RhYmxlcmFuZ2U6MjQ5Nzk4YjFhNmIwNGFkZTkwNTgzOWI2NjNlNTIxZDVfMTktMy0xLTEtNzE5Nzk_f5245ae6-04e5-48fe-9639-18a726e153c6"
      unitRef="usd">-537000</us-gaap:BusinessCombinationRecognizedIdentifiableAssetsAcquiredAndLiabilitiesAssumedDeferredTaxLiabilities>
    <us-gaap:BusinessCombinationRecognizedIdentifiableAssetsAcquiredAndLiabilitiesAssumedDeferredTaxLiabilities
      contextRef="i5326af3d5d33421e8a6e271c600b7a15_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl84OC9mcmFnOjc1MzBmMjg5MTFmNDQ0Nzg4OTVkYWNmMjIzMWQ3YTg3L3RhYmxlOjI0OTc5OGIxYTZiMDRhZGU5MDU4MzliNjYzZTUyMWQ1L3RhYmxlcmFuZ2U6MjQ5Nzk4YjFhNmIwNGFkZTkwNTgzOWI2NjNlNTIxZDVfMTktNS0xLTEtNzE5Nzk_d9cce7ca-64ae-4e70-ada7-005b8a629810"
      unitRef="usd">4607000</us-gaap:BusinessCombinationRecognizedIdentifiableAssetsAcquiredAndLiabilitiesAssumedDeferredTaxLiabilities>
    <us-gaap:BusinessCombinationRecognizedIdentifiableAssetsAcquiredAndLiabilitiesAssumedDeferredTaxLiabilities
      contextRef="i0f16e266da3b4333ac471989e36cbe61_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl84OC9mcmFnOjc1MzBmMjg5MTFmNDQ0Nzg4OTVkYWNmMjIzMWQ3YTg3L3RhYmxlOjI0OTc5OGIxYTZiMDRhZGU5MDU4MzliNjYzZTUyMWQ1L3RhYmxlcmFuZ2U6MjQ5Nzk4YjFhNmIwNGFkZTkwNTgzOWI2NjNlNTIxZDVfMTktNy0xLTEtNzE5Nzk_cf8cef92-7e94-4c93-89e0-c1dde21ff363"
      unitRef="usd">6228000</us-gaap:BusinessCombinationRecognizedIdentifiableAssetsAcquiredAndLiabilitiesAssumedDeferredTaxLiabilities>
    <us-gaap:BusinessCombinationRecognizedIdentifiableAssetsAcquiredAndLiabilitiesAssumedNet
      contextRef="iaa977065ec534554be0e1f2e9d97d659_I20220930"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl84OC9mcmFnOjc1MzBmMjg5MTFmNDQ0Nzg4OTVkYWNmMjIzMWQ3YTg3L3RhYmxlOjI0OTc5OGIxYTZiMDRhZGU5MDU4MzliNjYzZTUyMWQ1L3RhYmxlcmFuZ2U6MjQ5Nzk4YjFhNmIwNGFkZTkwNTgzOWI2NjNlNTIxZDVfMjAtMS0xLTEtNzE5Nzk_b852501a-fa25-421e-816c-739e40e23338"
      unitRef="usd">20533000</us-gaap:BusinessCombinationRecognizedIdentifiableAssetsAcquiredAndLiabilitiesAssumedNet>
    <us-gaap:BusinessCombinationRecognizedIdentifiableAssetsAcquiredAndLiabilitiesAssumedNet
      contextRef="i451b6df984f54b95b575f545928ea3d9_I20220930"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl84OC9mcmFnOjc1MzBmMjg5MTFmNDQ0Nzg4OTVkYWNmMjIzMWQ3YTg3L3RhYmxlOjI0OTc5OGIxYTZiMDRhZGU5MDU4MzliNjYzZTUyMWQ1L3RhYmxlcmFuZ2U6MjQ5Nzk4YjFhNmIwNGFkZTkwNTgzOWI2NjNlNTIxZDVfMjAtMy0xLTEtNzE5Nzk_7d225027-c5fa-441b-acc9-8991ecf9ffd2"
      unitRef="usd">1327000</us-gaap:BusinessCombinationRecognizedIdentifiableAssetsAcquiredAndLiabilitiesAssumedNet>
    <us-gaap:BusinessCombinationRecognizedIdentifiableAssetsAcquiredAndLiabilitiesAssumedNet
      contextRef="i5326af3d5d33421e8a6e271c600b7a15_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl84OC9mcmFnOjc1MzBmMjg5MTFmNDQ0Nzg4OTVkYWNmMjIzMWQ3YTg3L3RhYmxlOjI0OTc5OGIxYTZiMDRhZGU5MDU4MzliNjYzZTUyMWQ1L3RhYmxlcmFuZ2U6MjQ5Nzk4YjFhNmIwNGFkZTkwNTgzOWI2NjNlNTIxZDVfMjAtNS0xLTEtNzE5Nzk_09fcd617-85ad-403f-9294-b9621cbaed3c"
      unitRef="usd">21860000</us-gaap:BusinessCombinationRecognizedIdentifiableAssetsAcquiredAndLiabilitiesAssumedNet>
    <us-gaap:BusinessCombinationRecognizedIdentifiableAssetsAcquiredAndLiabilitiesAssumedNet
      contextRef="i0f16e266da3b4333ac471989e36cbe61_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl84OC9mcmFnOjc1MzBmMjg5MTFmNDQ0Nzg4OTVkYWNmMjIzMWQ3YTg3L3RhYmxlOjI0OTc5OGIxYTZiMDRhZGU5MDU4MzliNjYzZTUyMWQ1L3RhYmxlcmFuZ2U6MjQ5Nzk4YjFhNmIwNGFkZTkwNTgzOWI2NjNlNTIxZDVfMjAtNy0xLTEtNzE5Nzk_4e93c56f-06b5-428f-b13b-40488c393fd6"
      unitRef="usd">17062000</us-gaap:BusinessCombinationRecognizedIdentifiableAssetsAcquiredAndLiabilitiesAssumedNet>
    <us-gaap:Goodwill
      contextRef="iaa977065ec534554be0e1f2e9d97d659_I20220930"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl84OC9mcmFnOjc1MzBmMjg5MTFmNDQ0Nzg4OTVkYWNmMjIzMWQ3YTg3L3RhYmxlOjI0OTc5OGIxYTZiMDRhZGU5MDU4MzliNjYzZTUyMWQ1L3RhYmxlcmFuZ2U6MjQ5Nzk4YjFhNmIwNGFkZTkwNTgzOWI2NjNlNTIxZDVfMjItMS0xLTEtNzE5Nzk_25899fb3-1987-485f-9a62-cc1e774f421f"
      unitRef="usd">24556000</us-gaap:Goodwill>
    <us-gaap:Goodwill
      contextRef="i451b6df984f54b95b575f545928ea3d9_I20220930"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl84OC9mcmFnOjc1MzBmMjg5MTFmNDQ0Nzg4OTVkYWNmMjIzMWQ3YTg3L3RhYmxlOjI0OTc5OGIxYTZiMDRhZGU5MDU4MzliNjYzZTUyMWQ1L3RhYmxlcmFuZ2U6MjQ5Nzk4YjFhNmIwNGFkZTkwNTgzOWI2NjNlNTIxZDVfMjItMy0xLTEtNzE5Nzk_768d580c-530d-4908-a078-11c772991a32"
      unitRef="usd">-1327000</us-gaap:Goodwill>
    <us-gaap:Goodwill
      contextRef="i5326af3d5d33421e8a6e271c600b7a15_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl84OC9mcmFnOjc1MzBmMjg5MTFmNDQ0Nzg4OTVkYWNmMjIzMWQ3YTg3L3RhYmxlOjI0OTc5OGIxYTZiMDRhZGU5MDU4MzliNjYzZTUyMWQ1L3RhYmxlcmFuZ2U6MjQ5Nzk4YjFhNmIwNGFkZTkwNTgzOWI2NjNlNTIxZDVfMjItNS0xLTEtNzE5Nzk_26c184af-8e27-4e00-80e0-1723bdb1efa7"
      unitRef="usd">23229000</us-gaap:Goodwill>
    <us-gaap:Goodwill
      contextRef="i0f16e266da3b4333ac471989e36cbe61_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl84OC9mcmFnOjc1MzBmMjg5MTFmNDQ0Nzg4OTVkYWNmMjIzMWQ3YTg3L3RhYmxlOjI0OTc5OGIxYTZiMDRhZGU5MDU4MzliNjYzZTUyMWQ1L3RhYmxlcmFuZ2U6MjQ5Nzk4YjFhNmIwNGFkZTkwNTgzOWI2NjNlNTIxZDVfMjItNy0xLTEtNzE5Nzk_c12b29de-9bae-40ee-ad6b-ceee7a41615d"
      unitRef="usd">32010000</us-gaap:Goodwill>
    <us-gaap:FiniteLivedAndIndefiniteLivedIntangibleAssetsAcquiredAsPartOfBusinessCombinationTableTextBlock
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl84OC9mcmFnOjc1MzBmMjg5MTFmNDQ0Nzg4OTVkYWNmMjIzMWQ3YTg3L3RleHRyZWdpb246NzUzMGYyODkxMWY0NDQ3ODg5NWRhY2YyMjMxZDdhODdfMjc0ODc3OTA3OTY1Ng_fd3f99c4-7f51-41d1-884c-68da626ee887">&lt;div style="margin-top:6pt;text-indent:36pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;The following table summarizes the estimated useful lives for each acquired intangible asset, each of which are subject to finalization:&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt"&gt;&lt;table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"&gt;&lt;tr&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:64.657%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:15.718%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.406%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:15.719%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="9" style="padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;Estimated Useful Life&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;GCommerce&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;InterTrade&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Subscriber relationships&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;8.0 years&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;8.0 years&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Developed technology&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;5.0 years&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;6.0 years&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;</us-gaap:FiniteLivedAndIndefiniteLivedIntangibleAssetsAcquiredAsPartOfBusinessCombinationTableTextBlock>
    <us-gaap:AcquiredFiniteLivedIntangibleAssetsWeightedAverageUsefulLife
      contextRef="i1774a1bf39cd4414ae0d2736f5524d06_D20220101-20221231"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl84OC9mcmFnOjc1MzBmMjg5MTFmNDQ0Nzg4OTVkYWNmMjIzMWQ3YTg3L3RhYmxlOjVlNzU2YjQ1ZThiODQ2OWVhZjhlMmQ4NzU3ZGYzMWNjL3RhYmxlcmFuZ2U6NWU3NTZiNDVlOGI4NDY5ZWFmOGUyZDg3NTdkZjMxY2NfMi0xLTEtMS03MjA1Mg_1aa23a78-4ffb-4008-a880-628d18a60aee">P8Y</us-gaap:AcquiredFiniteLivedIntangibleAssetsWeightedAverageUsefulLife>
    <us-gaap:AcquiredFiniteLivedIntangibleAssetsWeightedAverageUsefulLife
      contextRef="ic5b6b06556d9410396ebfed5e272f0a4_D20220101-20221231"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl84OC9mcmFnOjc1MzBmMjg5MTFmNDQ0Nzg4OTVkYWNmMjIzMWQ3YTg3L3RhYmxlOjVlNzU2YjQ1ZThiODQ2OWVhZjhlMmQ4NzU3ZGYzMWNjL3RhYmxlcmFuZ2U6NWU3NTZiNDVlOGI4NDY5ZWFmOGUyZDg3NTdkZjMxY2NfMi0zLTEtMS03MjA1Mg_2749e68d-a4db-4ae5-9207-49a1b044ecd9">P8Y</us-gaap:AcquiredFiniteLivedIntangibleAssetsWeightedAverageUsefulLife>
    <us-gaap:AcquiredFiniteLivedIntangibleAssetsWeightedAverageUsefulLife
      contextRef="i7f56ddf6c6924254afa6aeacef26901f_D20220101-20221231"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl84OC9mcmFnOjc1MzBmMjg5MTFmNDQ0Nzg4OTVkYWNmMjIzMWQ3YTg3L3RhYmxlOjVlNzU2YjQ1ZThiODQ2OWVhZjhlMmQ4NzU3ZGYzMWNjL3RhYmxlcmFuZ2U6NWU3NTZiNDVlOGI4NDY5ZWFmOGUyZDg3NTdkZjMxY2NfMy0xLTEtMS03MjA1Mg_333b6afe-f5cf-46bc-8e8a-4e210391827d">P5Y</us-gaap:AcquiredFiniteLivedIntangibleAssetsWeightedAverageUsefulLife>
    <us-gaap:AcquiredFiniteLivedIntangibleAssetsWeightedAverageUsefulLife
      contextRef="idcdd08b28a1f4f6da78fbc9d262fc603_D20220101-20221231"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl84OC9mcmFnOjc1MzBmMjg5MTFmNDQ0Nzg4OTVkYWNmMjIzMWQ3YTg3L3RhYmxlOjVlNzU2YjQ1ZThiODQ2OWVhZjhlMmQ4NzU3ZGYzMWNjL3RhYmxlcmFuZ2U6NWU3NTZiNDVlOGI4NDY5ZWFmOGUyZDg3NTdkZjMxY2NfMy0zLTEtMS03MjA1Mg_dd94b8eb-f081-40e9-b3ee-e466d751bac3">P6Y</us-gaap:AcquiredFiniteLivedIntangibleAssetsWeightedAverageUsefulLife>
    <us-gaap:RevenueFromContractWithCustomerTextBlock
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl85MS9mcmFnOjE0MThiNmVmYTRlZDRjZTk5YTc5ZmFhMDhkN2RlZWI1L3RleHRyZWdpb246MTQxOGI2ZWZhNGVkNGNlOTlhNzlmYWEwOGQ3ZGVlYjVfMjc0ODc3OTA3NTMxNg_530259ce-9579-4dd8-bc6e-34d74acb8a13">Revenue&lt;div style="margin-top:6pt;text-indent:27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;We derive our revenues from the following revenue streams:&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-align:center"&gt;&lt;table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"&gt;&lt;tr&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:58.142%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.081%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.406%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.081%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.406%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.084%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="15" style="padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;Year Ended December 31,&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;(in thousands)&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:0.75pt solid #000000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;2022&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:0.75pt solid #000000;padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:0.75pt solid #000000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;2021&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:0.75pt solid #000000;padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:0.75pt solid #000000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;2020&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Recurring revenues:&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;border-top:0.75pt solid #000000;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;border-top:0.75pt solid #000000;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;border-top:0.75pt solid #000000;padding:0 1pt"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 7pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Fulfillment&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;364,148&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;306,851&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;251,272&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 7pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Analytics&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;46,894&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;42,674&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;38,824&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 7pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Other&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;8,005&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;5,481&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;4,920&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Recurring Revenues&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#cceeff;border-top:0.75pt solid #000000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;419,047&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:0.75pt solid #000000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;border-top:0.75pt solid #000000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;355,006&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:0.75pt solid #000000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;border-top:0.75pt solid #000000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;295,016&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:0.75pt solid #000000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;One-time revenues&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;31,828&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;30,270&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;17,614&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Total revenue&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000000;border-top:0.75pt solid #000000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000000;border-top:0.75pt solid #000000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;450,875&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000000;border-top:0.75pt solid #000000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000000;border-top:0.75pt solid #000000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000000;border-top:0.75pt solid #000000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;385,276&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000000;border-top:0.75pt solid #000000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000000;border-top:0.75pt solid #000000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000000;border-top:0.75pt solid #000000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;312,630&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000000;border-top:0.75pt solid #000000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;Revenues are the amount that reflects the consideration we are contractually and legally entitled to, as well as the amount we expect to collect, in exchange for those services.&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:18pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-style:italic;font-weight:700;line-height:120%"&gt;Recurring Revenues&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;Recurring revenues consist of recurring subscriptions from customers that utilize our Fulfillment, Analytics, and Other supply chain management products. Revenue for these products is generally recognized on a ratable basis over the contract term beginning on the date that our service is made available to the customer. Our contracts with our recurring revenue customers are recurring in nature, generally ranging from monthly to annual, and generally allow the customer to cancel the contract for any reason with 30 to 90 days&#x2019; notice. Timing of billings varies by customer and by contract type and are either in advance or within 30 days of the service being performed.&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;Given that the recurring revenue contracts are for one year or less, we have applied the optional exemption to not disclose information about the remaining performance obligations for recurring revenue contracts.&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:18pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-style:italic;font-weight:700;line-height:120%"&gt;One-time Revenues&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;One-time revenues consist of set-up fees and miscellaneous fees from customers.&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:12pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-style:italic;font-weight:400;line-height:120%"&gt;Set- up revenues&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;Set-up fees are specific for each connection a customer has with a trading partner. These nonrefundable fees are necessary for our customers to utilize our services and do not provide any standalone value. Many of our customers have connections with numerous trading partners.&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;Set-up fees constitute a material renewal option right that provide customers a significant future incentive that would not be otherwise available to that customer unless they entered into the contract, as the set-up fees will not be incurred again upon contract renewal. As such, set-up fees and related costs are deferred and recognized ratably over two years which is the estimated period for which a material right is present for our customers.&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;The table below presents the activity of the portion of the deferred revenue liability relating to set-up fees: &lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-align:center"&gt;&lt;table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"&gt;&lt;tr&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:71.930%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.081%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.406%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.083%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="9" style="padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;Year Ended December 31,&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;(in thousands)&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;2022&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;2021&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Balance, beginning of year&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;14,459&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;11,118&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Invoiced set-up fees&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;15,457&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;15,931&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Recognized set-up fees&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;(14,917)&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;(12,590)&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Balance, end of year&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;14,999&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;14,459&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;The entire balance of deferred set-up fees will be recognized within two years. Those that will be recognized within the next year are classified as current, whereas the remainder are classified as non-current.&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:12pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-style:italic;font-weight:400;line-height:120%"&gt;Miscellaneous fees&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;Miscellaneous fees primarily consist of professional services and testing and certification. &lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;The contract period for these one-time fees is for one year or less and recognized at the time service is provided. We have applied the optional exemption to not disclose information about the remaining performance obligations for miscellaneous one-time fee contracts since they have original durations of one year or less.&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:18pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-style:italic;font-weight:700;line-height:120%"&gt;Deferred Revenue&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;In the year ended December&#160;31, 2022, we recognized revenue of $50.4&#160;million from amounts included in deferred revenue at December&#160;31, 2021.&lt;/span&gt;&lt;/div&gt;</us-gaap:RevenueFromContractWithCustomerTextBlock>
    <us-gaap:DisaggregationOfRevenueTableTextBlock
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl85MS9mcmFnOjE0MThiNmVmYTRlZDRjZTk5YTc5ZmFhMDhkN2RlZWI1L3RleHRyZWdpb246MTQxOGI2ZWZhNGVkNGNlOTlhNzlmYWEwOGQ3ZGVlYjVfMjkyNw_f5c1ca78-57b5-4fd4-8149-244b721d4830">&lt;div style="margin-top:6pt;text-indent:27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;We derive our revenues from the following revenue streams:&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-align:center"&gt;&lt;table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"&gt;&lt;tr&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:58.142%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.081%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.406%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.081%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.406%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.084%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="15" style="padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;Year Ended December 31,&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;(in thousands)&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:0.75pt solid #000000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;2022&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:0.75pt solid #000000;padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:0.75pt solid #000000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;2021&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:0.75pt solid #000000;padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:0.75pt solid #000000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;2020&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Recurring revenues:&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;border-top:0.75pt solid #000000;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;border-top:0.75pt solid #000000;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;border-top:0.75pt solid #000000;padding:0 1pt"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 7pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Fulfillment&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;364,148&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;306,851&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;251,272&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 7pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Analytics&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;46,894&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;42,674&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;38,824&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 7pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Other&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;8,005&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;5,481&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;4,920&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Recurring Revenues&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#cceeff;border-top:0.75pt solid #000000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;419,047&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:0.75pt solid #000000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;border-top:0.75pt solid #000000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;355,006&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:0.75pt solid #000000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;border-top:0.75pt solid #000000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;295,016&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:0.75pt solid #000000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;One-time revenues&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;31,828&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;30,270&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;17,614&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Total revenue&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000000;border-top:0.75pt solid #000000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000000;border-top:0.75pt solid #000000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;450,875&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000000;border-top:0.75pt solid #000000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000000;border-top:0.75pt solid #000000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000000;border-top:0.75pt solid #000000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;385,276&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000000;border-top:0.75pt solid #000000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000000;border-top:0.75pt solid #000000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000000;border-top:0.75pt solid #000000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;312,630&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000000;border-top:0.75pt solid #000000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;</us-gaap:DisaggregationOfRevenueTableTextBlock>
    <us-gaap:RevenueFromContractWithCustomerExcludingAssessedTax
      contextRef="i4212edfd7a864b77a9aa4959da75c1b0_D20220101-20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl85MS9mcmFnOjE0MThiNmVmYTRlZDRjZTk5YTc5ZmFhMDhkN2RlZWI1L3RhYmxlOjg1YTI1ZTFkZTVhYjQwYmRiOWY0MmFhZGYxMjYzMDA4L3RhYmxlcmFuZ2U6ODVhMjVlMWRlNWFiNDBiZGI5ZjQyYWFkZjEyNjMwMDhfMy0xLTEtMS0zMDE0MA_e7ffc8d2-df65-4c0b-949d-16387f2aada8"
      unitRef="usd">364148000</us-gaap:RevenueFromContractWithCustomerExcludingAssessedTax>
    <us-gaap:RevenueFromContractWithCustomerExcludingAssessedTax
      contextRef="i0c9c0efdb6234df4b8e7b3f8a733980f_D20210101-20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl85MS9mcmFnOjE0MThiNmVmYTRlZDRjZTk5YTc5ZmFhMDhkN2RlZWI1L3RhYmxlOjg1YTI1ZTFkZTVhYjQwYmRiOWY0MmFhZGYxMjYzMDA4L3RhYmxlcmFuZ2U6ODVhMjVlMWRlNWFiNDBiZGI5ZjQyYWFkZjEyNjMwMDhfMy0zLTEtMS0zMDE0MA_68c98ed3-e289-40f6-afcf-2d42cc4f76c1"
      unitRef="usd">306851000</us-gaap:RevenueFromContractWithCustomerExcludingAssessedTax>
    <us-gaap:RevenueFromContractWithCustomerExcludingAssessedTax
      contextRef="ie71fa42c601d4431aee81b0075fab5ec_D20200101-20201231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl85MS9mcmFnOjE0MThiNmVmYTRlZDRjZTk5YTc5ZmFhMDhkN2RlZWI1L3RhYmxlOjg1YTI1ZTFkZTVhYjQwYmRiOWY0MmFhZGYxMjYzMDA4L3RhYmxlcmFuZ2U6ODVhMjVlMWRlNWFiNDBiZGI5ZjQyYWFkZjEyNjMwMDhfMy01LTEtMS0zMDE0MA_76df3795-3bc4-4ed3-97c2-3717fd85302b"
      unitRef="usd">251272000</us-gaap:RevenueFromContractWithCustomerExcludingAssessedTax>
    <us-gaap:RevenueFromContractWithCustomerExcludingAssessedTax
      contextRef="idbdad8eabbc44a3aaefc7bd6f5b7db1b_D20220101-20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl85MS9mcmFnOjE0MThiNmVmYTRlZDRjZTk5YTc5ZmFhMDhkN2RlZWI1L3RhYmxlOjg1YTI1ZTFkZTVhYjQwYmRiOWY0MmFhZGYxMjYzMDA4L3RhYmxlcmFuZ2U6ODVhMjVlMWRlNWFiNDBiZGI5ZjQyYWFkZjEyNjMwMDhfNC0xLTEtMS0zMDE0MA_48c70521-b495-4d4d-bbfb-8aeda4342117"
      unitRef="usd">46894000</us-gaap:RevenueFromContractWithCustomerExcludingAssessedTax>
    <us-gaap:RevenueFromContractWithCustomerExcludingAssessedTax
      contextRef="id055b691debe48869fc6c8223dec99b9_D20210101-20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl85MS9mcmFnOjE0MThiNmVmYTRlZDRjZTk5YTc5ZmFhMDhkN2RlZWI1L3RhYmxlOjg1YTI1ZTFkZTVhYjQwYmRiOWY0MmFhZGYxMjYzMDA4L3RhYmxlcmFuZ2U6ODVhMjVlMWRlNWFiNDBiZGI5ZjQyYWFkZjEyNjMwMDhfNC0zLTEtMS0zMDE0MA_4d767c3a-ebbc-4d5a-a8a1-922ec10ed7db"
      unitRef="usd">42674000</us-gaap:RevenueFromContractWithCustomerExcludingAssessedTax>
    <us-gaap:RevenueFromContractWithCustomerExcludingAssessedTax
      contextRef="i4b8e4dc876b0490c9d54336bfcfb1027_D20200101-20201231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl85MS9mcmFnOjE0MThiNmVmYTRlZDRjZTk5YTc5ZmFhMDhkN2RlZWI1L3RhYmxlOjg1YTI1ZTFkZTVhYjQwYmRiOWY0MmFhZGYxMjYzMDA4L3RhYmxlcmFuZ2U6ODVhMjVlMWRlNWFiNDBiZGI5ZjQyYWFkZjEyNjMwMDhfNC01LTEtMS0zMDE0MA_1b00a291-0c1e-4f75-974d-0726b5d1f580"
      unitRef="usd">38824000</us-gaap:RevenueFromContractWithCustomerExcludingAssessedTax>
    <us-gaap:RevenueFromContractWithCustomerExcludingAssessedTax
      contextRef="i58ffff905229495ab08e4387fdc27ec2_D20220101-20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl85MS9mcmFnOjE0MThiNmVmYTRlZDRjZTk5YTc5ZmFhMDhkN2RlZWI1L3RhYmxlOjg1YTI1ZTFkZTVhYjQwYmRiOWY0MmFhZGYxMjYzMDA4L3RhYmxlcmFuZ2U6ODVhMjVlMWRlNWFiNDBiZGI5ZjQyYWFkZjEyNjMwMDhfNS0xLTEtMS0zMDE0MA_93b09bf4-fe4b-4099-8e24-c8dc38b1be9f"
      unitRef="usd">8005000</us-gaap:RevenueFromContractWithCustomerExcludingAssessedTax>
    <us-gaap:RevenueFromContractWithCustomerExcludingAssessedTax
      contextRef="i6c6de697a5e24ceeab18177f841af1ad_D20210101-20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl85MS9mcmFnOjE0MThiNmVmYTRlZDRjZTk5YTc5ZmFhMDhkN2RlZWI1L3RhYmxlOjg1YTI1ZTFkZTVhYjQwYmRiOWY0MmFhZGYxMjYzMDA4L3RhYmxlcmFuZ2U6ODVhMjVlMWRlNWFiNDBiZGI5ZjQyYWFkZjEyNjMwMDhfNS0zLTEtMS0zMDE0MA_eb53150e-bc07-4b80-adfc-8f82fa5d2946"
      unitRef="usd">5481000</us-gaap:RevenueFromContractWithCustomerExcludingAssessedTax>
    <us-gaap:RevenueFromContractWithCustomerExcludingAssessedTax
      contextRef="i3efe40a3002946b6ab235465d1aa1e5e_D20200101-20201231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl85MS9mcmFnOjE0MThiNmVmYTRlZDRjZTk5YTc5ZmFhMDhkN2RlZWI1L3RhYmxlOjg1YTI1ZTFkZTVhYjQwYmRiOWY0MmFhZGYxMjYzMDA4L3RhYmxlcmFuZ2U6ODVhMjVlMWRlNWFiNDBiZGI5ZjQyYWFkZjEyNjMwMDhfNS01LTEtMS0zMDE0MA_972359f7-8ec9-4c91-ac78-c594f1be78a8"
      unitRef="usd">4920000</us-gaap:RevenueFromContractWithCustomerExcludingAssessedTax>
    <us-gaap:RevenueFromContractWithCustomerExcludingAssessedTax
      contextRef="i32be3a5fb91a49e296af046718b70cbe_D20220101-20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl85MS9mcmFnOjE0MThiNmVmYTRlZDRjZTk5YTc5ZmFhMDhkN2RlZWI1L3RhYmxlOjg1YTI1ZTFkZTVhYjQwYmRiOWY0MmFhZGYxMjYzMDA4L3RhYmxlcmFuZ2U6ODVhMjVlMWRlNWFiNDBiZGI5ZjQyYWFkZjEyNjMwMDhfNi0xLTEtMS0zMDE0MA_1f1a45b6-edf7-4206-9994-42c9b72fafa6"
      unitRef="usd">419047000</us-gaap:RevenueFromContractWithCustomerExcludingAssessedTax>
    <us-gaap:RevenueFromContractWithCustomerExcludingAssessedTax
      contextRef="iac417330a9a245118d5b3aa20458be07_D20210101-20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl85MS9mcmFnOjE0MThiNmVmYTRlZDRjZTk5YTc5ZmFhMDhkN2RlZWI1L3RhYmxlOjg1YTI1ZTFkZTVhYjQwYmRiOWY0MmFhZGYxMjYzMDA4L3RhYmxlcmFuZ2U6ODVhMjVlMWRlNWFiNDBiZGI5ZjQyYWFkZjEyNjMwMDhfNi0zLTEtMS0zMDE0MA_62c39ad8-191e-4602-ace7-50e21f480279"
      unitRef="usd">355006000</us-gaap:RevenueFromContractWithCustomerExcludingAssessedTax>
    <us-gaap:RevenueFromContractWithCustomerExcludingAssessedTax
      contextRef="ib6d2f3bc651b4a22a5912b82457639ec_D20200101-20201231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl85MS9mcmFnOjE0MThiNmVmYTRlZDRjZTk5YTc5ZmFhMDhkN2RlZWI1L3RhYmxlOjg1YTI1ZTFkZTVhYjQwYmRiOWY0MmFhZGYxMjYzMDA4L3RhYmxlcmFuZ2U6ODVhMjVlMWRlNWFiNDBiZGI5ZjQyYWFkZjEyNjMwMDhfNi01LTEtMS0zMDE0MA_9023d79c-4632-4a5a-8c9f-0d9cb3caeadb"
      unitRef="usd">295016000</us-gaap:RevenueFromContractWithCustomerExcludingAssessedTax>
    <us-gaap:RevenueFromContractWithCustomerExcludingAssessedTax
      contextRef="iceb7ad52dc2b4e2c80b47336a7ad3681_D20220101-20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl85MS9mcmFnOjE0MThiNmVmYTRlZDRjZTk5YTc5ZmFhMDhkN2RlZWI1L3RhYmxlOjg1YTI1ZTFkZTVhYjQwYmRiOWY0MmFhZGYxMjYzMDA4L3RhYmxlcmFuZ2U6ODVhMjVlMWRlNWFiNDBiZGI5ZjQyYWFkZjEyNjMwMDhfNy0xLTEtMS0zMDE0MA_62f37665-df72-486a-aef9-5d8fbeda1624"
      unitRef="usd">31828000</us-gaap:RevenueFromContractWithCustomerExcludingAssessedTax>
    <us-gaap:RevenueFromContractWithCustomerExcludingAssessedTax
      contextRef="ie2bab9310f864aa88b034feb066c6646_D20210101-20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl85MS9mcmFnOjE0MThiNmVmYTRlZDRjZTk5YTc5ZmFhMDhkN2RlZWI1L3RhYmxlOjg1YTI1ZTFkZTVhYjQwYmRiOWY0MmFhZGYxMjYzMDA4L3RhYmxlcmFuZ2U6ODVhMjVlMWRlNWFiNDBiZGI5ZjQyYWFkZjEyNjMwMDhfNy0zLTEtMS0zMDE0MA_071d17ea-34c8-480c-b96a-0f0b451744e5"
      unitRef="usd">30270000</us-gaap:RevenueFromContractWithCustomerExcludingAssessedTax>
    <us-gaap:RevenueFromContractWithCustomerExcludingAssessedTax
      contextRef="idc1f3645927f4f25b51cfa342e2f2d54_D20200101-20201231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl85MS9mcmFnOjE0MThiNmVmYTRlZDRjZTk5YTc5ZmFhMDhkN2RlZWI1L3RhYmxlOjg1YTI1ZTFkZTVhYjQwYmRiOWY0MmFhZGYxMjYzMDA4L3RhYmxlcmFuZ2U6ODVhMjVlMWRlNWFiNDBiZGI5ZjQyYWFkZjEyNjMwMDhfNy01LTEtMS0zMDE0MA_2884c6a8-8e5a-4a31-94f9-6948551ae253"
      unitRef="usd">17614000</us-gaap:RevenueFromContractWithCustomerExcludingAssessedTax>
    <us-gaap:RevenueFromContractWithCustomerExcludingAssessedTax
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl85MS9mcmFnOjE0MThiNmVmYTRlZDRjZTk5YTc5ZmFhMDhkN2RlZWI1L3RhYmxlOjg1YTI1ZTFkZTVhYjQwYmRiOWY0MmFhZGYxMjYzMDA4L3RhYmxlcmFuZ2U6ODVhMjVlMWRlNWFiNDBiZGI5ZjQyYWFkZjEyNjMwMDhfOC0xLTEtMS0zMDE0MA_ee7f2fd5-f1d0-4e82-9667-94fe868a57ae"
      unitRef="usd">450875000</us-gaap:RevenueFromContractWithCustomerExcludingAssessedTax>
    <us-gaap:RevenueFromContractWithCustomerExcludingAssessedTax
      contextRef="ie07f2822175c48edbb8d5559ceb82e6f_D20210101-20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl85MS9mcmFnOjE0MThiNmVmYTRlZDRjZTk5YTc5ZmFhMDhkN2RlZWI1L3RhYmxlOjg1YTI1ZTFkZTVhYjQwYmRiOWY0MmFhZGYxMjYzMDA4L3RhYmxlcmFuZ2U6ODVhMjVlMWRlNWFiNDBiZGI5ZjQyYWFkZjEyNjMwMDhfOC0zLTEtMS0zMDE0MA_ae15f9f3-9512-4da8-89f3-1f41f6f611e2"
      unitRef="usd">385276000</us-gaap:RevenueFromContractWithCustomerExcludingAssessedTax>
    <us-gaap:RevenueFromContractWithCustomerExcludingAssessedTax
      contextRef="i4751184d7e5948509cd8893fd49fb821_D20200101-20201231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl85MS9mcmFnOjE0MThiNmVmYTRlZDRjZTk5YTc5ZmFhMDhkN2RlZWI1L3RhYmxlOjg1YTI1ZTFkZTVhYjQwYmRiOWY0MmFhZGYxMjYzMDA4L3RhYmxlcmFuZ2U6ODVhMjVlMWRlNWFiNDBiZGI5ZjQyYWFkZjEyNjMwMDhfOC01LTEtMS0zMDE0MA_5c0ab73f-3cbc-4b35-bcf5-5e23bc0c28ca"
      unitRef="usd">312630000</us-gaap:RevenueFromContractWithCustomerExcludingAssessedTax>
    <spsc:CustomerContractCancellationPeriod
      contextRef="icda5178f340747d384f10560c6bb2a83_D20220101-20221231"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl85MS9mcmFnOjE0MThiNmVmYTRlZDRjZTk5YTc5ZmFhMDhkN2RlZWI1L3RleHRyZWdpb246MTQxOGI2ZWZhNGVkNGNlOTlhNzlmYWEwOGQ3ZGVlYjVfMjc0ODc3OTA3NTMxOA_38badb77-0918-4959-8c9f-e33a8c4ae951">P30D</spsc:CustomerContractCancellationPeriod>
    <spsc:CustomerContractCancellationPeriod
      contextRef="i9b3042d480284024b1d772a96be2ed30_D20220101-20221231"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl85MS9mcmFnOjE0MThiNmVmYTRlZDRjZTk5YTc5ZmFhMDhkN2RlZWI1L3RleHRyZWdpb246MTQxOGI2ZWZhNGVkNGNlOTlhNzlmYWEwOGQ3ZGVlYjVfNzc2_71794eea-05aa-49ac-92da-730a25010301">P90D</spsc:CustomerContractCancellationPeriod>
    <spsc:RecurringRevenuesTimingOfBillingsLatestPeriod
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl85MS9mcmFnOjE0MThiNmVmYTRlZDRjZTk5YTc5ZmFhMDhkN2RlZWI1L3RleHRyZWdpb246MTQxOGI2ZWZhNGVkNGNlOTlhNzlmYWEwOGQ3ZGVlYjVfODgz_1cc33b0a-fa6e-40bd-85aa-40dc20e9976b">P30D</spsc:RecurringRevenuesTimingOfBillingsLatestPeriod>
    <us-gaap:ContractWithCustomerAssetAndLiabilityTableTextBlock
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl85MS9mcmFnOjE0MThiNmVmYTRlZDRjZTk5YTc5ZmFhMDhkN2RlZWI1L3RleHRyZWdpb246MTQxOGI2ZWZhNGVkNGNlOTlhNzlmYWEwOGQ3ZGVlYjVfMjkyOA_4104fca1-aae1-4372-88e7-cc3110037311">&lt;div style="margin-top:6pt;text-indent:27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;The table below presents the activity of the portion of the deferred revenue liability relating to set-up fees: &lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-align:center"&gt;&lt;table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"&gt;&lt;tr&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:71.930%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.081%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.406%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.083%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="9" style="padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;Year Ended December 31,&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;(in thousands)&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;2022&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;2021&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Balance, beginning of year&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;14,459&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;11,118&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Invoiced set-up fees&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;15,457&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;15,931&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Recognized set-up fees&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;(14,917)&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;(12,590)&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Balance, end of year&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;14,999&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;14,459&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;</us-gaap:ContractWithCustomerAssetAndLiabilityTableTextBlock>
    <us-gaap:ContractWithCustomerLiability
      contextRef="id750e9f5ae1640e7bda3c097ab31c000_I20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl85MS9mcmFnOjE0MThiNmVmYTRlZDRjZTk5YTc5ZmFhMDhkN2RlZWI1L3RhYmxlOjNmNzA2MDg5NmI3ZjRiOWRhODljNzNjOGZiMTQzZDJhL3RhYmxlcmFuZ2U6M2Y3MDYwODk2YjdmNGI5ZGE4OWM3M2M4ZmIxNDNkMmFfMi0xLTEtMS0zMDE0MA_3fb77c2d-8e90-43f2-aef0-c0276de3b441"
      unitRef="usd">14459000</us-gaap:ContractWithCustomerLiability>
    <us-gaap:ContractWithCustomerLiability
      contextRef="i0e574c890a2147cca802ea186acf400b_I20201231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl85MS9mcmFnOjE0MThiNmVmYTRlZDRjZTk5YTc5ZmFhMDhkN2RlZWI1L3RhYmxlOjNmNzA2MDg5NmI3ZjRiOWRhODljNzNjOGZiMTQzZDJhL3RhYmxlcmFuZ2U6M2Y3MDYwODk2YjdmNGI5ZGE4OWM3M2M4ZmIxNDNkMmFfMi0zLTEtMS0zMDE0MA_45588c48-cc34-4a4f-a63b-17565b9475d2"
      unitRef="usd">11118000</us-gaap:ContractWithCustomerLiability>
    <spsc:DeferredRevenueInvoicedSetUpFees
      contextRef="i407cf284506d40d6b5c0b06c107835f4_D20220101-20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl85MS9mcmFnOjE0MThiNmVmYTRlZDRjZTk5YTc5ZmFhMDhkN2RlZWI1L3RhYmxlOjNmNzA2MDg5NmI3ZjRiOWRhODljNzNjOGZiMTQzZDJhL3RhYmxlcmFuZ2U6M2Y3MDYwODk2YjdmNGI5ZGE4OWM3M2M4ZmIxNDNkMmFfMy0xLTEtMS0zMDE0MA_26af926f-1b8a-4ef7-9377-205d47976e0a"
      unitRef="usd">15457000</spsc:DeferredRevenueInvoicedSetUpFees>
    <spsc:DeferredRevenueInvoicedSetUpFees
      contextRef="i026f2218b6f54f9c89c3fe0e0c2e7ce3_D20210101-20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl85MS9mcmFnOjE0MThiNmVmYTRlZDRjZTk5YTc5ZmFhMDhkN2RlZWI1L3RhYmxlOjNmNzA2MDg5NmI3ZjRiOWRhODljNzNjOGZiMTQzZDJhL3RhYmxlcmFuZ2U6M2Y3MDYwODk2YjdmNGI5ZGE4OWM3M2M4ZmIxNDNkMmFfMy0zLTEtMS0zMDE0MA_ea581a5f-6100-48fd-a228-bda9e18b31a1"
      unitRef="usd">15931000</spsc:DeferredRevenueInvoicedSetUpFees>
    <spsc:DeferredRevenueRecognizedSetUpFees
      contextRef="i407cf284506d40d6b5c0b06c107835f4_D20220101-20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl85MS9mcmFnOjE0MThiNmVmYTRlZDRjZTk5YTc5ZmFhMDhkN2RlZWI1L3RhYmxlOjNmNzA2MDg5NmI3ZjRiOWRhODljNzNjOGZiMTQzZDJhL3RhYmxlcmFuZ2U6M2Y3MDYwODk2YjdmNGI5ZGE4OWM3M2M4ZmIxNDNkMmFfNC0xLTEtMS0zMDE0MA_22d2ab8a-544e-4c8c-8d8d-d0a8c0f5dc59"
      unitRef="usd">-14917000</spsc:DeferredRevenueRecognizedSetUpFees>
    <spsc:DeferredRevenueRecognizedSetUpFees
      contextRef="i026f2218b6f54f9c89c3fe0e0c2e7ce3_D20210101-20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl85MS9mcmFnOjE0MThiNmVmYTRlZDRjZTk5YTc5ZmFhMDhkN2RlZWI1L3RhYmxlOjNmNzA2MDg5NmI3ZjRiOWRhODljNzNjOGZiMTQzZDJhL3RhYmxlcmFuZ2U6M2Y3MDYwODk2YjdmNGI5ZGE4OWM3M2M4ZmIxNDNkMmFfNC0zLTEtMS0zMDE0MA_a65b2c00-5e8e-4635-b18b-40c9af9d894b"
      unitRef="usd">-12590000</spsc:DeferredRevenueRecognizedSetUpFees>
    <us-gaap:ContractWithCustomerLiability
      contextRef="ic5c4c5ed9974471888b75dc59a490415_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl85MS9mcmFnOjE0MThiNmVmYTRlZDRjZTk5YTc5ZmFhMDhkN2RlZWI1L3RhYmxlOjNmNzA2MDg5NmI3ZjRiOWRhODljNzNjOGZiMTQzZDJhL3RhYmxlcmFuZ2U6M2Y3MDYwODk2YjdmNGI5ZGE4OWM3M2M4ZmIxNDNkMmFfNS0xLTEtMS0zMDE0MA_7f69d1ab-17f7-4d6d-89a6-c85d23a870b4"
      unitRef="usd">14999000</us-gaap:ContractWithCustomerLiability>
    <us-gaap:ContractWithCustomerLiability
      contextRef="id750e9f5ae1640e7bda3c097ab31c000_I20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl85MS9mcmFnOjE0MThiNmVmYTRlZDRjZTk5YTc5ZmFhMDhkN2RlZWI1L3RhYmxlOjNmNzA2MDg5NmI3ZjRiOWRhODljNzNjOGZiMTQzZDJhL3RhYmxlcmFuZ2U6M2Y3MDYwODk2YjdmNGI5ZGE4OWM3M2M4ZmIxNDNkMmFfNS0zLTEtMS0zMDE0MA_2c5c7319-8f59-40bf-972f-6257fa4884b3"
      unitRef="usd">14459000</us-gaap:ContractWithCustomerLiability>
    <spsc:SetUpFeesRecognizedPeriod
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl85MS9mcmFnOjE0MThiNmVmYTRlZDRjZTk5YTc5ZmFhMDhkN2RlZWI1L3RleHRyZWdpb246MTQxOGI2ZWZhNGVkNGNlOTlhNzlmYWEwOGQ3ZGVlYjVfMjI0MQ_ea2c9df8-5aae-4af6-ab01-0d978d9868cb">P2Y</spsc:SetUpFeesRecognizedPeriod>
    <spsc:MaximumRecognitionPeriodForMiscellaneousOneTimeFee
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl85MS9mcmFnOjE0MThiNmVmYTRlZDRjZTk5YTc5ZmFhMDhkN2RlZWI1L3RleHRyZWdpb246MTQxOGI2ZWZhNGVkNGNlOTlhNzlmYWEwOGQ3ZGVlYjVfMjU1MQ_6f62681e-4a98-4215-bc82-2e2f3f0fdb16">P1Y</spsc:MaximumRecognitionPeriodForMiscellaneousOneTimeFee>
    <spsc:RevenueRemainingPerformanceObligationForContractsOriginalDurations
      contextRef="i9b3042d480284024b1d772a96be2ed30_D20220101-20221231"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl85MS9mcmFnOjE0MThiNmVmYTRlZDRjZTk5YTc5ZmFhMDhkN2RlZWI1L3RleHRyZWdpb246MTQxOGI2ZWZhNGVkNGNlOTlhNzlmYWEwOGQ3ZGVlYjVfMjgwMA_ee2627a0-e8c5-45b5-8ee4-142414508a94">P1Y</spsc:RevenueRemainingPerformanceObligationForContractsOriginalDurations>
    <us-gaap:ContractWithCustomerLiability
      contextRef="i62ba0be1fd094d818a1f7d0d5504d1e2_I20211231"
      decimals="-5"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl85MS9mcmFnOjE0MThiNmVmYTRlZDRjZTk5YTc5ZmFhMDhkN2RlZWI1L3RleHRyZWdpb246MTQxOGI2ZWZhNGVkNGNlOTlhNzlmYWEwOGQ3ZGVlYjVfMTA5OTUxMTYzMzY3Ng_d1b0f0da-4559-47fc-ac57-78fb5aa3a6c1"
      unitRef="usd">50400000</us-gaap:ContractWithCustomerLiability>
    <spsc:DeferredCostsDisclosureTextBlock
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl85NC9mcmFnOmZkODI1MGJiZTNlNTRjNDU4YmZhY2I0MmI5ODU5ZmU5L3RleHRyZWdpb246ZmQ4MjUwYmJlM2U1NGM0NThiZmFjYjQyYjk4NTlmZTlfNzM_c9048de0-2a30-477f-8c84-c29730fb45e7">Deferred Costs&lt;div style="margin-top:6pt;text-indent:27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;The deferred costs activity was as follows:&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-align:center"&gt;&lt;table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"&gt;&lt;tr&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:71.930%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.081%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.406%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.083%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="9" style="padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;Year Ended December 31,&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;(in thousands)&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;2022&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;2021&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Balance, beginning of year&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;59,720&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;50,595&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Incurred deferred costs&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;72,509&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;64,076&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Amortized deferred costs&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;(62,050)&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;(54,951)&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Balance, end of year&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;70,179&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;59,720&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;</spsc:DeferredCostsDisclosureTextBlock>
    <spsc:DeferredCostsAndAmortizationTableTextBlock
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl85NC9mcmFnOmZkODI1MGJiZTNlNTRjNDU4YmZhY2I0MmI5ODU5ZmU5L3RleHRyZWdpb246ZmQ4MjUwYmJlM2U1NGM0NThiZmFjYjQyYjk4NTlmZTlfNzQ_06c401b8-0770-408b-8328-00a385841381">&lt;div style="margin-top:6pt;text-indent:27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;The deferred costs activity was as follows:&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-align:center"&gt;&lt;table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"&gt;&lt;tr&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:71.930%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.081%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.406%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.083%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="9" style="padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;Year Ended December 31,&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;(in thousands)&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;2022&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;2021&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Balance, beginning of year&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;59,720&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;50,595&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Incurred deferred costs&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;72,509&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;64,076&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Amortized deferred costs&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;(62,050)&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;(54,951)&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Balance, end of year&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;70,179&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;59,720&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;</spsc:DeferredCostsAndAmortizationTableTextBlock>
    <us-gaap:DeferredCostsCurrentAndNoncurrent
      contextRef="i62ba0be1fd094d818a1f7d0d5504d1e2_I20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl85NC9mcmFnOmZkODI1MGJiZTNlNTRjNDU4YmZhY2I0MmI5ODU5ZmU5L3RhYmxlOmEzMDA0NjhiNDZmYzRmMTNiYmUzNGFkZDI2YjY5ZmQ3L3RhYmxlcmFuZ2U6YTMwMDQ2OGI0NmZjNGYxM2JiZTM0YWRkMjZiNjlmZDdfMi0xLTEtMS0zMDE0MA_60d2b2a9-6481-441b-88f3-cccebd49f8de"
      unitRef="usd">59720000</us-gaap:DeferredCostsCurrentAndNoncurrent>
    <us-gaap:DeferredCostsCurrentAndNoncurrent
      contextRef="i3ead637906154a2bab043152edc06771_I20201231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl85NC9mcmFnOmZkODI1MGJiZTNlNTRjNDU4YmZhY2I0MmI5ODU5ZmU5L3RhYmxlOmEzMDA0NjhiNDZmYzRmMTNiYmUzNGFkZDI2YjY5ZmQ3L3RhYmxlcmFuZ2U6YTMwMDQ2OGI0NmZjNGYxM2JiZTM0YWRkMjZiNjlmZDdfMi0zLTEtMS0zMDE0MA_c0f35482-b059-4be9-8359-dc0c46ec2fed"
      unitRef="usd">50595000</us-gaap:DeferredCostsCurrentAndNoncurrent>
    <spsc:DeferredCostsIncurred
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl85NC9mcmFnOmZkODI1MGJiZTNlNTRjNDU4YmZhY2I0MmI5ODU5ZmU5L3RhYmxlOmEzMDA0NjhiNDZmYzRmMTNiYmUzNGFkZDI2YjY5ZmQ3L3RhYmxlcmFuZ2U6YTMwMDQ2OGI0NmZjNGYxM2JiZTM0YWRkMjZiNjlmZDdfMy0xLTEtMS0zMDE0MA_67a138df-c04d-4d57-8a0e-c6688c69476e"
      unitRef="usd">72509000</spsc:DeferredCostsIncurred>
    <spsc:DeferredCostsIncurred
      contextRef="ie07f2822175c48edbb8d5559ceb82e6f_D20210101-20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl85NC9mcmFnOmZkODI1MGJiZTNlNTRjNDU4YmZhY2I0MmI5ODU5ZmU5L3RhYmxlOmEzMDA0NjhiNDZmYzRmMTNiYmUzNGFkZDI2YjY5ZmQ3L3RhYmxlcmFuZ2U6YTMwMDQ2OGI0NmZjNGYxM2JiZTM0YWRkMjZiNjlmZDdfMy0zLTEtMS0zMDE0MA_6027e523-ceec-4f77-be90-d9130d9addf6"
      unitRef="usd">64076000</spsc:DeferredCostsIncurred>
    <spsc:DeferredCostsAmortized
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl85NC9mcmFnOmZkODI1MGJiZTNlNTRjNDU4YmZhY2I0MmI5ODU5ZmU5L3RhYmxlOmEzMDA0NjhiNDZmYzRmMTNiYmUzNGFkZDI2YjY5ZmQ3L3RhYmxlcmFuZ2U6YTMwMDQ2OGI0NmZjNGYxM2JiZTM0YWRkMjZiNjlmZDdfNC0xLTEtMS0zMDE0MA_bd830d95-3ab4-48b6-ab3f-b6f51a490e1a"
      unitRef="usd">-62050000</spsc:DeferredCostsAmortized>
    <spsc:DeferredCostsAmortized
      contextRef="ie07f2822175c48edbb8d5559ceb82e6f_D20210101-20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl85NC9mcmFnOmZkODI1MGJiZTNlNTRjNDU4YmZhY2I0MmI5ODU5ZmU5L3RhYmxlOmEzMDA0NjhiNDZmYzRmMTNiYmUzNGFkZDI2YjY5ZmQ3L3RhYmxlcmFuZ2U6YTMwMDQ2OGI0NmZjNGYxM2JiZTM0YWRkMjZiNjlmZDdfNC0zLTEtMS0zMDE0MA_32a2051e-a8ac-4b8d-83fc-09530e790a2d"
      unitRef="usd">-54951000</spsc:DeferredCostsAmortized>
    <us-gaap:DeferredCostsCurrentAndNoncurrent
      contextRef="ibbc2d589a09c46368d9dd3e9ea8996c6_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl85NC9mcmFnOmZkODI1MGJiZTNlNTRjNDU4YmZhY2I0MmI5ODU5ZmU5L3RhYmxlOmEzMDA0NjhiNDZmYzRmMTNiYmUzNGFkZDI2YjY5ZmQ3L3RhYmxlcmFuZ2U6YTMwMDQ2OGI0NmZjNGYxM2JiZTM0YWRkMjZiNjlmZDdfNS0xLTEtMS0zMDE0MA_fb4927f8-b1f4-4c1d-ae56-28226a7b3527"
      unitRef="usd">70179000</us-gaap:DeferredCostsCurrentAndNoncurrent>
    <us-gaap:DeferredCostsCurrentAndNoncurrent
      contextRef="i62ba0be1fd094d818a1f7d0d5504d1e2_I20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl85NC9mcmFnOmZkODI1MGJiZTNlNTRjNDU4YmZhY2I0MmI5ODU5ZmU5L3RhYmxlOmEzMDA0NjhiNDZmYzRmMTNiYmUzNGFkZDI2YjY5ZmQ3L3RhYmxlcmFuZ2U6YTMwMDQ2OGI0NmZjNGYxM2JiZTM0YWRkMjZiNjlmZDdfNS0zLTEtMS0zMDE0MA_e4e5ad30-8450-4df8-b9a5-9334e17e37f2"
      unitRef="usd">59720000</us-gaap:DeferredCostsCurrentAndNoncurrent>
    <us-gaap:FinancialInstrumentsDisclosureTextBlock
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl85Ny9mcmFnOjgzMjNmN2UyZGE1MDRhNGZhNzI1MTEwM2EzODdmYWJmL3RleHRyZWdpb246ODMyM2Y3ZTJkYTUwNGE0ZmE3MjUxMTAzYTM4N2ZhYmZfMjExOA_24ccf325-23a7-4977-8d8a-1c7996aca5e6">Fair Value Measurements&lt;div style="margin-top:6pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-style:italic;font-weight:700;line-height:120%"&gt;Cash Equivalents and Investments&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt; Cash equivalents and investments, as measured at fair value on a recurring basis, consisted of the following:&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt"&gt;&lt;table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"&gt;&lt;tr&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:25.869%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.406%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:6.778%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.406%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:9.051%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.406%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:9.051%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.406%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:9.051%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.406%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:9.051%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.406%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:9.051%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.406%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:9.056%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="15" style="padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;December 31, 2022&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="15" style="padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;December 31, 2021&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:0 1pt 0 13pt"/&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="3" style="padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;Fair Value Level&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;Amortized Cost&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;Unrealized Gains (Losses), net&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;Fair Value&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;Amortized Cost&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;Unrealized Gains (Losses), net&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;Fair Value&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;(in thousands)&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:700;line-height:114%"&gt;Cash equivalents:&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Money market funds&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Level 1&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;73,368&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;&#x2014;&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;73,368&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;138,205&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;&#x2014;&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;138,205&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:700;line-height:114%"&gt;Investments:&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Certificates of deposit&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Level 1&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;6,813&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;&#x2014;&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;6,813&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;7,268&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;&#x2014;&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;7,268&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Marketable securities:&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 25pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Commercial paper&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Level 2&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;44,224&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;375&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;44,599&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;34,984&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;7&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;34,991&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 25pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;U.S. treasury securities&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Level 2&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;&#x2014;&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;&#x2014;&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;&#x2014;&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;7,500&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;(1)&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;7,499&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt 0 13pt"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;124,405&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;375&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;124,780&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;187,957&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;6&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;187,963&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;</us-gaap:FinancialInstrumentsDisclosureTextBlock>
    <us-gaap:ScheduleOfCashCashEquivalentsAndShortTermInvestmentsTableTextBlock
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl85Ny9mcmFnOjgzMjNmN2UyZGE1MDRhNGZhNzI1MTEwM2EzODdmYWJmL3RleHRyZWdpb246ODMyM2Y3ZTJkYTUwNGE0ZmE3MjUxMTAzYTM4N2ZhYmZfMjExOQ_978a7d4e-63e3-4d08-b22a-388c0b6ba934">Cash equivalents and investments, as measured at fair value on a recurring basis, consisted of the following:&lt;table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"&gt;&lt;tr&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:25.869%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.406%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:6.778%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.406%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:9.051%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.406%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:9.051%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.406%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:9.051%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.406%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:9.051%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.406%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:9.051%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.406%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:9.056%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="15" style="padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;December 31, 2022&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="15" style="padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;December 31, 2021&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:0 1pt 0 13pt"/&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="3" style="padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;Fair Value Level&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;Amortized Cost&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;Unrealized Gains (Losses), net&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;Fair Value&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;Amortized Cost&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;Unrealized Gains (Losses), net&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;Fair Value&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;(in thousands)&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:700;line-height:114%"&gt;Cash equivalents:&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Money market funds&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Level 1&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;73,368&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;&#x2014;&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;73,368&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;138,205&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;&#x2014;&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;138,205&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:700;line-height:114%"&gt;Investments:&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Certificates of deposit&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Level 1&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;6,813&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;&#x2014;&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;6,813&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;7,268&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;&#x2014;&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;7,268&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Marketable securities:&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 25pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Commercial paper&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Level 2&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;44,224&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;375&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;44,599&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;34,984&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;7&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;34,991&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 25pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;U.S. treasury securities&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Level 2&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;&#x2014;&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;&#x2014;&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;&#x2014;&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;7,500&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;(1)&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;7,499&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt 0 13pt"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;124,405&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;375&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;124,780&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;187,957&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;6&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;187,963&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;/table&gt;</us-gaap:ScheduleOfCashCashEquivalentsAndShortTermInvestmentsTableTextBlock>
    <spsc:FinancialInstrumentAmortizedCostBasis
      contextRef="i45200f1c16a340328b74ea0932d68140_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl85Ny9mcmFnOjgzMjNmN2UyZGE1MDRhNGZhNzI1MTEwM2EzODdmYWJmL3RhYmxlOjEyM2I4MDVmM2JmMjRmY2I5NGJlMjE0ZjMzODc1MjA3L3RhYmxlcmFuZ2U6MTIzYjgwNWYzYmYyNGZjYjk0YmUyMTRmMzM4NzUyMDdfNC00LTEtMS02NzE0MA_2e10de47-0082-4801-b932-b4ba84fbda95"
      unitRef="usd">73368000</spsc:FinancialInstrumentAmortizedCostBasis>
    <spsc:FinancialInstrumentNetUnrealizedGainLossBeforeTax
      contextRef="i45200f1c16a340328b74ea0932d68140_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl85Ny9mcmFnOjgzMjNmN2UyZGE1MDRhNGZhNzI1MTEwM2EzODdmYWJmL3RhYmxlOjEyM2I4MDVmM2JmMjRmY2I5NGJlMjE0ZjMzODc1MjA3L3RhYmxlcmFuZ2U6MTIzYjgwNWYzYmYyNGZjYjk0YmUyMTRmMzM4NzUyMDdfNC02LTEtMS02NzE0MA_f2f2726b-0ac0-45b5-936a-62fc71e8ba53"
      unitRef="usd">0</spsc:FinancialInstrumentNetUnrealizedGainLossBeforeTax>
    <spsc:FinancialInstrumentsFairValue
      contextRef="i45200f1c16a340328b74ea0932d68140_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl85Ny9mcmFnOjgzMjNmN2UyZGE1MDRhNGZhNzI1MTEwM2EzODdmYWJmL3RhYmxlOjEyM2I4MDVmM2JmMjRmY2I5NGJlMjE0ZjMzODc1MjA3L3RhYmxlcmFuZ2U6MTIzYjgwNWYzYmYyNGZjYjk0YmUyMTRmMzM4NzUyMDdfNC04LTEtMS02NzE0MA_b3cbe5b0-da1a-46b0-8ea5-8926d42739b0"
      unitRef="usd">73368000</spsc:FinancialInstrumentsFairValue>
    <spsc:FinancialInstrumentAmortizedCostBasis
      contextRef="i2ef78a8c406c4b0a891e193f1db00034_I20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl85Ny9mcmFnOjgzMjNmN2UyZGE1MDRhNGZhNzI1MTEwM2EzODdmYWJmL3RhYmxlOjEyM2I4MDVmM2JmMjRmY2I5NGJlMjE0ZjMzODc1MjA3L3RhYmxlcmFuZ2U6MTIzYjgwNWYzYmYyNGZjYjk0YmUyMTRmMzM4NzUyMDdfNC0xMC0xLTEtNjcxNDA_50d78905-52d8-4800-83c7-0e0fe0fec064"
      unitRef="usd">138205000</spsc:FinancialInstrumentAmortizedCostBasis>
    <spsc:FinancialInstrumentNetUnrealizedGainLossBeforeTax
      contextRef="i2ef78a8c406c4b0a891e193f1db00034_I20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl85Ny9mcmFnOjgzMjNmN2UyZGE1MDRhNGZhNzI1MTEwM2EzODdmYWJmL3RhYmxlOjEyM2I4MDVmM2JmMjRmY2I5NGJlMjE0ZjMzODc1MjA3L3RhYmxlcmFuZ2U6MTIzYjgwNWYzYmYyNGZjYjk0YmUyMTRmMzM4NzUyMDdfNC0xMi0xLTEtNjcxNDA_ff63d3c9-813f-49d2-941b-57aa325e76db"
      unitRef="usd">0</spsc:FinancialInstrumentNetUnrealizedGainLossBeforeTax>
    <spsc:FinancialInstrumentsFairValue
      contextRef="i2ef78a8c406c4b0a891e193f1db00034_I20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl85Ny9mcmFnOjgzMjNmN2UyZGE1MDRhNGZhNzI1MTEwM2EzODdmYWJmL3RhYmxlOjEyM2I4MDVmM2JmMjRmY2I5NGJlMjE0ZjMzODc1MjA3L3RhYmxlcmFuZ2U6MTIzYjgwNWYzYmYyNGZjYjk0YmUyMTRmMzM4NzUyMDdfNC0xNC0xLTEtNjcxNDA_ff7d33ad-0f11-47b6-a381-6325a583134f"
      unitRef="usd">138205000</spsc:FinancialInstrumentsFairValue>
    <spsc:FinancialInstrumentAmortizedCostBasis
      contextRef="idc799120b0fb4546bf79ec6cba7ff0a9_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl85Ny9mcmFnOjgzMjNmN2UyZGE1MDRhNGZhNzI1MTEwM2EzODdmYWJmL3RhYmxlOjEyM2I4MDVmM2JmMjRmY2I5NGJlMjE0ZjMzODc1MjA3L3RhYmxlcmFuZ2U6MTIzYjgwNWYzYmYyNGZjYjk0YmUyMTRmMzM4NzUyMDdfNi00LTEtMS02NzE0MA_9a917b32-a944-4498-a0c9-14f6c52dc952"
      unitRef="usd">6813000</spsc:FinancialInstrumentAmortizedCostBasis>
    <spsc:FinancialInstrumentNetUnrealizedGainLossBeforeTax
      contextRef="idc799120b0fb4546bf79ec6cba7ff0a9_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl85Ny9mcmFnOjgzMjNmN2UyZGE1MDRhNGZhNzI1MTEwM2EzODdmYWJmL3RhYmxlOjEyM2I4MDVmM2JmMjRmY2I5NGJlMjE0ZjMzODc1MjA3L3RhYmxlcmFuZ2U6MTIzYjgwNWYzYmYyNGZjYjk0YmUyMTRmMzM4NzUyMDdfNi02LTEtMS02NzE0MA_bec7fa71-f3a4-4deb-a5f1-3a5001d63f78"
      unitRef="usd">0</spsc:FinancialInstrumentNetUnrealizedGainLossBeforeTax>
    <spsc:FinancialInstrumentsFairValue
      contextRef="idc799120b0fb4546bf79ec6cba7ff0a9_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl85Ny9mcmFnOjgzMjNmN2UyZGE1MDRhNGZhNzI1MTEwM2EzODdmYWJmL3RhYmxlOjEyM2I4MDVmM2JmMjRmY2I5NGJlMjE0ZjMzODc1MjA3L3RhYmxlcmFuZ2U6MTIzYjgwNWYzYmYyNGZjYjk0YmUyMTRmMzM4NzUyMDdfNi04LTEtMS02NzE0MA_a12e0f9f-33f9-46e6-88e0-2015c8080df5"
      unitRef="usd">6813000</spsc:FinancialInstrumentsFairValue>
    <spsc:FinancialInstrumentAmortizedCostBasis
      contextRef="ifc51842e1332459cb554d8b00d356c5f_I20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl85Ny9mcmFnOjgzMjNmN2UyZGE1MDRhNGZhNzI1MTEwM2EzODdmYWJmL3RhYmxlOjEyM2I4MDVmM2JmMjRmY2I5NGJlMjE0ZjMzODc1MjA3L3RhYmxlcmFuZ2U6MTIzYjgwNWYzYmYyNGZjYjk0YmUyMTRmMzM4NzUyMDdfNi0xMC0xLTEtNjcxNDA_6a249b00-9348-42e4-ae11-bbac420f9a02"
      unitRef="usd">7268000</spsc:FinancialInstrumentAmortizedCostBasis>
    <spsc:FinancialInstrumentNetUnrealizedGainLossBeforeTax
      contextRef="ifc51842e1332459cb554d8b00d356c5f_I20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl85Ny9mcmFnOjgzMjNmN2UyZGE1MDRhNGZhNzI1MTEwM2EzODdmYWJmL3RhYmxlOjEyM2I4MDVmM2JmMjRmY2I5NGJlMjE0ZjMzODc1MjA3L3RhYmxlcmFuZ2U6MTIzYjgwNWYzYmYyNGZjYjk0YmUyMTRmMzM4NzUyMDdfNi0xMi0xLTEtNjcxNDA_149b3c97-71b7-4456-b789-5f89c887d730"
      unitRef="usd">0</spsc:FinancialInstrumentNetUnrealizedGainLossBeforeTax>
    <spsc:FinancialInstrumentsFairValue
      contextRef="ifc51842e1332459cb554d8b00d356c5f_I20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl85Ny9mcmFnOjgzMjNmN2UyZGE1MDRhNGZhNzI1MTEwM2EzODdmYWJmL3RhYmxlOjEyM2I4MDVmM2JmMjRmY2I5NGJlMjE0ZjMzODc1MjA3L3RhYmxlcmFuZ2U6MTIzYjgwNWYzYmYyNGZjYjk0YmUyMTRmMzM4NzUyMDdfNi0xNC0xLTEtNjcxNDA_00fcf907-0be8-4bb5-9f7a-4b1bca6b4b80"
      unitRef="usd">7268000</spsc:FinancialInstrumentsFairValue>
    <spsc:FinancialInstrumentAmortizedCostBasis
      contextRef="ic47e9e54da5e4ea0a54425fedab8b863_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl85Ny9mcmFnOjgzMjNmN2UyZGE1MDRhNGZhNzI1MTEwM2EzODdmYWJmL3RhYmxlOjEyM2I4MDVmM2JmMjRmY2I5NGJlMjE0ZjMzODc1MjA3L3RhYmxlcmFuZ2U6MTIzYjgwNWYzYmYyNGZjYjk0YmUyMTRmMzM4NzUyMDdfOC00LTEtMS02NzE0MA_2e23c772-d44c-45d9-8783-b52096cc3847"
      unitRef="usd">44224000</spsc:FinancialInstrumentAmortizedCostBasis>
    <spsc:FinancialInstrumentNetUnrealizedGainLossBeforeTax
      contextRef="ic47e9e54da5e4ea0a54425fedab8b863_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl85Ny9mcmFnOjgzMjNmN2UyZGE1MDRhNGZhNzI1MTEwM2EzODdmYWJmL3RhYmxlOjEyM2I4MDVmM2JmMjRmY2I5NGJlMjE0ZjMzODc1MjA3L3RhYmxlcmFuZ2U6MTIzYjgwNWYzYmYyNGZjYjk0YmUyMTRmMzM4NzUyMDdfOC02LTEtMS02NzE0MA_67e7cf3d-aac9-4cf9-9852-db19673fd1f3"
      unitRef="usd">375000</spsc:FinancialInstrumentNetUnrealizedGainLossBeforeTax>
    <spsc:FinancialInstrumentsFairValue
      contextRef="ic47e9e54da5e4ea0a54425fedab8b863_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl85Ny9mcmFnOjgzMjNmN2UyZGE1MDRhNGZhNzI1MTEwM2EzODdmYWJmL3RhYmxlOjEyM2I4MDVmM2JmMjRmY2I5NGJlMjE0ZjMzODc1MjA3L3RhYmxlcmFuZ2U6MTIzYjgwNWYzYmYyNGZjYjk0YmUyMTRmMzM4NzUyMDdfOC04LTEtMS02NzE0MA_3aa20301-bf4d-4863-ae23-76c3fdaaef60"
      unitRef="usd">44599000</spsc:FinancialInstrumentsFairValue>
    <spsc:FinancialInstrumentAmortizedCostBasis
      contextRef="i446296b17c5e4c75961e059921edd1c2_I20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl85Ny9mcmFnOjgzMjNmN2UyZGE1MDRhNGZhNzI1MTEwM2EzODdmYWJmL3RhYmxlOjEyM2I4MDVmM2JmMjRmY2I5NGJlMjE0ZjMzODc1MjA3L3RhYmxlcmFuZ2U6MTIzYjgwNWYzYmYyNGZjYjk0YmUyMTRmMzM4NzUyMDdfOC0xMC0xLTEtNjcxNDA_c1cd6f63-d500-4cca-acc4-143bcff6eeab"
      unitRef="usd">34984000</spsc:FinancialInstrumentAmortizedCostBasis>
    <spsc:FinancialInstrumentNetUnrealizedGainLossBeforeTax
      contextRef="i446296b17c5e4c75961e059921edd1c2_I20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl85Ny9mcmFnOjgzMjNmN2UyZGE1MDRhNGZhNzI1MTEwM2EzODdmYWJmL3RhYmxlOjEyM2I4MDVmM2JmMjRmY2I5NGJlMjE0ZjMzODc1MjA3L3RhYmxlcmFuZ2U6MTIzYjgwNWYzYmYyNGZjYjk0YmUyMTRmMzM4NzUyMDdfOC0xMi0xLTEtNjcxNDA_9522ee15-b6cf-42e8-8272-3a0e6f1cfd57"
      unitRef="usd">7000</spsc:FinancialInstrumentNetUnrealizedGainLossBeforeTax>
    <spsc:FinancialInstrumentsFairValue
      contextRef="i446296b17c5e4c75961e059921edd1c2_I20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl85Ny9mcmFnOjgzMjNmN2UyZGE1MDRhNGZhNzI1MTEwM2EzODdmYWJmL3RhYmxlOjEyM2I4MDVmM2JmMjRmY2I5NGJlMjE0ZjMzODc1MjA3L3RhYmxlcmFuZ2U6MTIzYjgwNWYzYmYyNGZjYjk0YmUyMTRmMzM4NzUyMDdfOC0xNC0xLTEtNjcxNDA_d9a58d54-7fd4-4c77-a2a2-31029ddb17eb"
      unitRef="usd">34991000</spsc:FinancialInstrumentsFairValue>
    <spsc:FinancialInstrumentAmortizedCostBasis
      contextRef="i656035537314412686548f55a139a888_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl85Ny9mcmFnOjgzMjNmN2UyZGE1MDRhNGZhNzI1MTEwM2EzODdmYWJmL3RhYmxlOjEyM2I4MDVmM2JmMjRmY2I5NGJlMjE0ZjMzODc1MjA3L3RhYmxlcmFuZ2U6MTIzYjgwNWYzYmYyNGZjYjk0YmUyMTRmMzM4NzUyMDdfOS00LTEtMS02NzE0MA_186b6642-f8bc-45fa-a71b-2ddba5d3d5f9"
      unitRef="usd">0</spsc:FinancialInstrumentAmortizedCostBasis>
    <spsc:FinancialInstrumentNetUnrealizedGainLossBeforeTax
      contextRef="i656035537314412686548f55a139a888_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl85Ny9mcmFnOjgzMjNmN2UyZGE1MDRhNGZhNzI1MTEwM2EzODdmYWJmL3RhYmxlOjEyM2I4MDVmM2JmMjRmY2I5NGJlMjE0ZjMzODc1MjA3L3RhYmxlcmFuZ2U6MTIzYjgwNWYzYmYyNGZjYjk0YmUyMTRmMzM4NzUyMDdfOS02LTEtMS02NzE0MA_7558b793-7a2e-4c30-83ad-11ddfe6efcb8"
      unitRef="usd">0</spsc:FinancialInstrumentNetUnrealizedGainLossBeforeTax>
    <spsc:FinancialInstrumentsFairValue
      contextRef="i656035537314412686548f55a139a888_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl85Ny9mcmFnOjgzMjNmN2UyZGE1MDRhNGZhNzI1MTEwM2EzODdmYWJmL3RhYmxlOjEyM2I4MDVmM2JmMjRmY2I5NGJlMjE0ZjMzODc1MjA3L3RhYmxlcmFuZ2U6MTIzYjgwNWYzYmYyNGZjYjk0YmUyMTRmMzM4NzUyMDdfOS04LTEtMS02NzE0MA_1e14d38c-e913-49a0-a5a2-84f8ad5efb2d"
      unitRef="usd">0</spsc:FinancialInstrumentsFairValue>
    <spsc:FinancialInstrumentAmortizedCostBasis
      contextRef="i64946dfcd9eb463d935303bab1508633_I20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl85Ny9mcmFnOjgzMjNmN2UyZGE1MDRhNGZhNzI1MTEwM2EzODdmYWJmL3RhYmxlOjEyM2I4MDVmM2JmMjRmY2I5NGJlMjE0ZjMzODc1MjA3L3RhYmxlcmFuZ2U6MTIzYjgwNWYzYmYyNGZjYjk0YmUyMTRmMzM4NzUyMDdfOS0xMC0xLTEtNjcxNDA_865d866b-ae79-4a96-a893-97ad8d5f8e1a"
      unitRef="usd">7500000</spsc:FinancialInstrumentAmortizedCostBasis>
    <spsc:FinancialInstrumentNetUnrealizedGainLossBeforeTax
      contextRef="i64946dfcd9eb463d935303bab1508633_I20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl85Ny9mcmFnOjgzMjNmN2UyZGE1MDRhNGZhNzI1MTEwM2EzODdmYWJmL3RhYmxlOjEyM2I4MDVmM2JmMjRmY2I5NGJlMjE0ZjMzODc1MjA3L3RhYmxlcmFuZ2U6MTIzYjgwNWYzYmYyNGZjYjk0YmUyMTRmMzM4NzUyMDdfOS0xMi0xLTEtNjcxNDA_e0f9559d-cd1a-4cf0-a1fb-5f37b7f4d033"
      unitRef="usd">-1000</spsc:FinancialInstrumentNetUnrealizedGainLossBeforeTax>
    <spsc:FinancialInstrumentsFairValue
      contextRef="i64946dfcd9eb463d935303bab1508633_I20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl85Ny9mcmFnOjgzMjNmN2UyZGE1MDRhNGZhNzI1MTEwM2EzODdmYWJmL3RhYmxlOjEyM2I4MDVmM2JmMjRmY2I5NGJlMjE0ZjMzODc1MjA3L3RhYmxlcmFuZ2U6MTIzYjgwNWYzYmYyNGZjYjk0YmUyMTRmMzM4NzUyMDdfOS0xNC0xLTEtNjcxNDA_4fdb0323-6505-4378-bca4-ca46aad0a442"
      unitRef="usd">7499000</spsc:FinancialInstrumentsFairValue>
    <spsc:FinancialInstrumentAmortizedCostBasis
      contextRef="ibbc2d589a09c46368d9dd3e9ea8996c6_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl85Ny9mcmFnOjgzMjNmN2UyZGE1MDRhNGZhNzI1MTEwM2EzODdmYWJmL3RhYmxlOjEyM2I4MDVmM2JmMjRmY2I5NGJlMjE0ZjMzODc1MjA3L3RhYmxlcmFuZ2U6MTIzYjgwNWYzYmYyNGZjYjk0YmUyMTRmMzM4NzUyMDdfMTAtNC0xLTEtNjcxNDA_c27546c0-ac3a-42af-8bee-489176137d55"
      unitRef="usd">124405000</spsc:FinancialInstrumentAmortizedCostBasis>
    <spsc:FinancialInstrumentNetUnrealizedGainLossBeforeTax
      contextRef="ibbc2d589a09c46368d9dd3e9ea8996c6_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl85Ny9mcmFnOjgzMjNmN2UyZGE1MDRhNGZhNzI1MTEwM2EzODdmYWJmL3RhYmxlOjEyM2I4MDVmM2JmMjRmY2I5NGJlMjE0ZjMzODc1MjA3L3RhYmxlcmFuZ2U6MTIzYjgwNWYzYmYyNGZjYjk0YmUyMTRmMzM4NzUyMDdfMTAtNi0xLTEtNjcxNDA_cd5074e0-ccfe-44f4-aec5-0ab5862f7c11"
      unitRef="usd">375000</spsc:FinancialInstrumentNetUnrealizedGainLossBeforeTax>
    <spsc:FinancialInstrumentsFairValue
      contextRef="ibbc2d589a09c46368d9dd3e9ea8996c6_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl85Ny9mcmFnOjgzMjNmN2UyZGE1MDRhNGZhNzI1MTEwM2EzODdmYWJmL3RhYmxlOjEyM2I4MDVmM2JmMjRmY2I5NGJlMjE0ZjMzODc1MjA3L3RhYmxlcmFuZ2U6MTIzYjgwNWYzYmYyNGZjYjk0YmUyMTRmMzM4NzUyMDdfMTAtOC0xLTEtNjcxNDA_407c37af-a955-461b-a60a-97d740acbd50"
      unitRef="usd">124780000</spsc:FinancialInstrumentsFairValue>
    <spsc:FinancialInstrumentAmortizedCostBasis
      contextRef="i62ba0be1fd094d818a1f7d0d5504d1e2_I20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl85Ny9mcmFnOjgzMjNmN2UyZGE1MDRhNGZhNzI1MTEwM2EzODdmYWJmL3RhYmxlOjEyM2I4MDVmM2JmMjRmY2I5NGJlMjE0ZjMzODc1MjA3L3RhYmxlcmFuZ2U6MTIzYjgwNWYzYmYyNGZjYjk0YmUyMTRmMzM4NzUyMDdfMTAtMTAtMS0xLTY3MTQw_dee5c081-e0bb-41fd-958b-f2b27202a9ad"
      unitRef="usd">187957000</spsc:FinancialInstrumentAmortizedCostBasis>
    <spsc:FinancialInstrumentNetUnrealizedGainLossBeforeTax
      contextRef="i62ba0be1fd094d818a1f7d0d5504d1e2_I20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl85Ny9mcmFnOjgzMjNmN2UyZGE1MDRhNGZhNzI1MTEwM2EzODdmYWJmL3RhYmxlOjEyM2I4MDVmM2JmMjRmY2I5NGJlMjE0ZjMzODc1MjA3L3RhYmxlcmFuZ2U6MTIzYjgwNWYzYmYyNGZjYjk0YmUyMTRmMzM4NzUyMDdfMTAtMTItMS0xLTY3MTQw_f6f5b934-baba-433f-8893-e475da331801"
      unitRef="usd">6000</spsc:FinancialInstrumentNetUnrealizedGainLossBeforeTax>
    <spsc:FinancialInstrumentsFairValue
      contextRef="i62ba0be1fd094d818a1f7d0d5504d1e2_I20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl85Ny9mcmFnOjgzMjNmN2UyZGE1MDRhNGZhNzI1MTEwM2EzODdmYWJmL3RhYmxlOjEyM2I4MDVmM2JmMjRmY2I5NGJlMjE0ZjMzODc1MjA3L3RhYmxlcmFuZ2U6MTIzYjgwNWYzYmYyNGZjYjk0YmUyMTRmMzM4NzUyMDdfMTAtMTQtMS0xLTY3MTQw_773fafba-3e1a-43bd-9b86-8e812280916b"
      unitRef="usd">187963000</spsc:FinancialInstrumentsFairValue>
    <us-gaap:AllowanceForCreditLossesTextBlock
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMDAvZnJhZzplMTllYTYxMDIxMmI0ZWFmYTVjMzExNzljYTAwYzRmYS90ZXh0cmVnaW9uOmUxOWVhNjEwMjEyYjRlYWZhNWMzMTE3OWNhMDBjNGZhXzEzOA_09763b88-9595-463e-8c21-2912e9df1988">Allowance for Credit Losses&lt;div style="margin-top:6pt;text-indent:27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;The allowance for credit losses activity, included in accounts receivable, net, was as follows:&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-align:center"&gt;&lt;table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"&gt;&lt;tr&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:58.142%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.081%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.406%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.081%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.406%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.084%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="15" style="padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;Year Ended December 31,&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;(in thousands)&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;2022&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;2021&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;2020&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Balance, beginning of year&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;4,249&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;4,233&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;1,469&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Provision for credit losses&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;3,359&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;4,717&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;5,660&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Write-offs, net of recoveries&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;(4,542)&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;(4,790)&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;(4,319)&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Initial allowance for business combination acquired receivables&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;&#x2014;&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;89&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;354&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Adoption of ASU 2016-13&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;&#x2014;&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;&#x2014;&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;1,069&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Balance, end of year&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;3,066&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;4,249&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;4,233&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;</us-gaap:AllowanceForCreditLossesTextBlock>
    <us-gaap:AllowanceForCreditLossesOnFinancingReceivablesTableTextBlock
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMDAvZnJhZzplMTllYTYxMDIxMmI0ZWFmYTVjMzExNzljYTAwYzRmYS90ZXh0cmVnaW9uOmUxOWVhNjEwMjEyYjRlYWZhNWMzMTE3OWNhMDBjNGZhXzEzOQ_e057aab9-e0bd-411a-b405-f5edd024b036">&lt;div style="margin-top:6pt;text-indent:27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;The allowance for credit losses activity, included in accounts receivable, net, was as follows:&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-align:center"&gt;&lt;table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"&gt;&lt;tr&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:58.142%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.081%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.406%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.081%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.406%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.084%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="15" style="padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;Year Ended December 31,&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;(in thousands)&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;2022&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;2021&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;2020&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Balance, beginning of year&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;4,249&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;4,233&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;1,469&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Provision for credit losses&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;3,359&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;4,717&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;5,660&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Write-offs, net of recoveries&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;(4,542)&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;(4,790)&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;(4,319)&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Initial allowance for business combination acquired receivables&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;&#x2014;&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;89&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;354&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Adoption of ASU 2016-13&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;&#x2014;&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;&#x2014;&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;1,069&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Balance, end of year&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;3,066&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;4,249&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;4,233&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;</us-gaap:AllowanceForCreditLossesOnFinancingReceivablesTableTextBlock>
    <us-gaap:AllowanceForDoubtfulAccountsReceivable
      contextRef="i62ba0be1fd094d818a1f7d0d5504d1e2_I20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMDAvZnJhZzplMTllYTYxMDIxMmI0ZWFmYTVjMzExNzljYTAwYzRmYS90YWJsZTpmMmQzOTFlZTJmODc0MmJlODU4N2UxMWU4YmM3MDU1Yi90YWJsZXJhbmdlOmYyZDM5MWVlMmY4NzQyYmU4NTg3ZTExZThiYzcwNTViXzItMS0xLTEtMzAxNDA_30865981-401e-4461-9450-cee2397b1418"
      unitRef="usd">4249000</us-gaap:AllowanceForDoubtfulAccountsReceivable>
    <us-gaap:AllowanceForDoubtfulAccountsReceivable
      contextRef="i3ead637906154a2bab043152edc06771_I20201231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMDAvZnJhZzplMTllYTYxMDIxMmI0ZWFmYTVjMzExNzljYTAwYzRmYS90YWJsZTpmMmQzOTFlZTJmODc0MmJlODU4N2UxMWU4YmM3MDU1Yi90YWJsZXJhbmdlOmYyZDM5MWVlMmY4NzQyYmU4NTg3ZTExZThiYzcwNTViXzItMy0xLTEtMzAxNDA_5c5bffd3-f174-4b3a-a1c4-496d10419b62"
      unitRef="usd">4233000</us-gaap:AllowanceForDoubtfulAccountsReceivable>
    <us-gaap:AllowanceForDoubtfulAccountsReceivable
      contextRef="i489b2464c80746b9ae7427577897ad3e_I20191231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMDAvZnJhZzplMTllYTYxMDIxMmI0ZWFmYTVjMzExNzljYTAwYzRmYS90YWJsZTpmMmQzOTFlZTJmODc0MmJlODU4N2UxMWU4YmM3MDU1Yi90YWJsZXJhbmdlOmYyZDM5MWVlMmY4NzQyYmU4NTg3ZTExZThiYzcwNTViXzItNS0xLTEtMzAxNDA_d6a7d216-146c-4a60-b785-3078a11db1c0"
      unitRef="usd">1469000</us-gaap:AllowanceForDoubtfulAccountsReceivable>
    <us-gaap:ProvisionForDoubtfulAccounts
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMDAvZnJhZzplMTllYTYxMDIxMmI0ZWFmYTVjMzExNzljYTAwYzRmYS90YWJsZTpmMmQzOTFlZTJmODc0MmJlODU4N2UxMWU4YmM3MDU1Yi90YWJsZXJhbmdlOmYyZDM5MWVlMmY4NzQyYmU4NTg3ZTExZThiYzcwNTViXzMtMS0xLTEtMzAxNDA_59d7e097-88d5-4d26-a0c7-346aefda9055"
      unitRef="usd">3359000</us-gaap:ProvisionForDoubtfulAccounts>
    <us-gaap:ProvisionForDoubtfulAccounts
      contextRef="ie07f2822175c48edbb8d5559ceb82e6f_D20210101-20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMDAvZnJhZzplMTllYTYxMDIxMmI0ZWFmYTVjMzExNzljYTAwYzRmYS90YWJsZTpmMmQzOTFlZTJmODc0MmJlODU4N2UxMWU4YmM3MDU1Yi90YWJsZXJhbmdlOmYyZDM5MWVlMmY4NzQyYmU4NTg3ZTExZThiYzcwNTViXzMtMy0xLTEtMzAxNDA_df9ab2f5-5013-44a1-a6d3-5fc1f91d319a"
      unitRef="usd">4717000</us-gaap:ProvisionForDoubtfulAccounts>
    <us-gaap:ProvisionForDoubtfulAccounts
      contextRef="i4751184d7e5948509cd8893fd49fb821_D20200101-20201231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMDAvZnJhZzplMTllYTYxMDIxMmI0ZWFmYTVjMzExNzljYTAwYzRmYS90YWJsZTpmMmQzOTFlZTJmODc0MmJlODU4N2UxMWU4YmM3MDU1Yi90YWJsZXJhbmdlOmYyZDM5MWVlMmY4NzQyYmU4NTg3ZTExZThiYzcwNTViXzMtNS0xLTEtMzAxNDA_bed054bd-a888-44d1-97cd-3a4eb81074e9"
      unitRef="usd">5660000</us-gaap:ProvisionForDoubtfulAccounts>
    <us-gaap:AllowanceForDoubtfulAccountsReceivableWriteOffs
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMDAvZnJhZzplMTllYTYxMDIxMmI0ZWFmYTVjMzExNzljYTAwYzRmYS90YWJsZTpmMmQzOTFlZTJmODc0MmJlODU4N2UxMWU4YmM3MDU1Yi90YWJsZXJhbmdlOmYyZDM5MWVlMmY4NzQyYmU4NTg3ZTExZThiYzcwNTViXzQtMS0xLTEtMzAxNDA_9e81eee1-5fb9-48b6-a887-69b3b2375376"
      unitRef="usd">4542000</us-gaap:AllowanceForDoubtfulAccountsReceivableWriteOffs>
    <us-gaap:AllowanceForDoubtfulAccountsReceivableWriteOffs
      contextRef="ie07f2822175c48edbb8d5559ceb82e6f_D20210101-20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMDAvZnJhZzplMTllYTYxMDIxMmI0ZWFmYTVjMzExNzljYTAwYzRmYS90YWJsZTpmMmQzOTFlZTJmODc0MmJlODU4N2UxMWU4YmM3MDU1Yi90YWJsZXJhbmdlOmYyZDM5MWVlMmY4NzQyYmU4NTg3ZTExZThiYzcwNTViXzQtMy0xLTEtMzAxNDA_14664b7d-4b7f-43c3-802c-d1b4c9ae8839"
      unitRef="usd">4790000</us-gaap:AllowanceForDoubtfulAccountsReceivableWriteOffs>
    <us-gaap:AllowanceForDoubtfulAccountsReceivableWriteOffs
      contextRef="i4751184d7e5948509cd8893fd49fb821_D20200101-20201231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMDAvZnJhZzplMTllYTYxMDIxMmI0ZWFmYTVjMzExNzljYTAwYzRmYS90YWJsZTpmMmQzOTFlZTJmODc0MmJlODU4N2UxMWU4YmM3MDU1Yi90YWJsZXJhbmdlOmYyZDM5MWVlMmY4NzQyYmU4NTg3ZTExZThiYzcwNTViXzQtNS0xLTEtMzAxNDA_613edc98-f2a0-4a20-88e5-dff941c96ccc"
      unitRef="usd">4319000</us-gaap:AllowanceForDoubtfulAccountsReceivableWriteOffs>
    <us-gaap:AllowanceForDoubtfulAccountsReceivablePeriodIncreaseDecrease
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMDAvZnJhZzplMTllYTYxMDIxMmI0ZWFmYTVjMzExNzljYTAwYzRmYS90YWJsZTpmMmQzOTFlZTJmODc0MmJlODU4N2UxMWU4YmM3MDU1Yi90YWJsZXJhbmdlOmYyZDM5MWVlMmY4NzQyYmU4NTg3ZTExZThiYzcwNTViXzUtMS0xLTEtMzAxNDA_88cd8dbd-ef67-43fd-9597-2e084c477f51"
      unitRef="usd">0</us-gaap:AllowanceForDoubtfulAccountsReceivablePeriodIncreaseDecrease>
    <us-gaap:AllowanceForDoubtfulAccountsReceivablePeriodIncreaseDecrease
      contextRef="ie07f2822175c48edbb8d5559ceb82e6f_D20210101-20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMDAvZnJhZzplMTllYTYxMDIxMmI0ZWFmYTVjMzExNzljYTAwYzRmYS90YWJsZTpmMmQzOTFlZTJmODc0MmJlODU4N2UxMWU4YmM3MDU1Yi90YWJsZXJhbmdlOmYyZDM5MWVlMmY4NzQyYmU4NTg3ZTExZThiYzcwNTViXzUtMy0xLTEtMzAxNDA_37c6356e-0a91-420a-8636-45ca3a8b0253"
      unitRef="usd">89000</us-gaap:AllowanceForDoubtfulAccountsReceivablePeriodIncreaseDecrease>
    <us-gaap:AllowanceForDoubtfulAccountsReceivablePeriodIncreaseDecrease
      contextRef="i4751184d7e5948509cd8893fd49fb821_D20200101-20201231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMDAvZnJhZzplMTllYTYxMDIxMmI0ZWFmYTVjMzExNzljYTAwYzRmYS90YWJsZTpmMmQzOTFlZTJmODc0MmJlODU4N2UxMWU4YmM3MDU1Yi90YWJsZXJhbmdlOmYyZDM5MWVlMmY4NzQyYmU4NTg3ZTExZThiYzcwNTViXzUtNS0xLTEtMzAxNDA_00550b96-1424-47d2-a5d2-96bbd1bb9010"
      unitRef="usd">354000</us-gaap:AllowanceForDoubtfulAccountsReceivablePeriodIncreaseDecrease>
    <us-gaap:AccountsReceivableChangeInMethodCreditLossExpenseReversal
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMDAvZnJhZzplMTllYTYxMDIxMmI0ZWFmYTVjMzExNzljYTAwYzRmYS90YWJsZTpmMmQzOTFlZTJmODc0MmJlODU4N2UxMWU4YmM3MDU1Yi90YWJsZXJhbmdlOmYyZDM5MWVlMmY4NzQyYmU4NTg3ZTExZThiYzcwNTViXzYtMS0xLTEtMzAxNDA_0afd425e-6901-48d0-b8d4-520d5930b777"
      unitRef="usd">0</us-gaap:AccountsReceivableChangeInMethodCreditLossExpenseReversal>
    <us-gaap:AccountsReceivableChangeInMethodCreditLossExpenseReversal
      contextRef="ie07f2822175c48edbb8d5559ceb82e6f_D20210101-20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMDAvZnJhZzplMTllYTYxMDIxMmI0ZWFmYTVjMzExNzljYTAwYzRmYS90YWJsZTpmMmQzOTFlZTJmODc0MmJlODU4N2UxMWU4YmM3MDU1Yi90YWJsZXJhbmdlOmYyZDM5MWVlMmY4NzQyYmU4NTg3ZTExZThiYzcwNTViXzYtMy0xLTEtMzAxNDA_172ba069-8095-4585-9c07-617755d051ec"
      unitRef="usd">0</us-gaap:AccountsReceivableChangeInMethodCreditLossExpenseReversal>
    <us-gaap:AccountsReceivableChangeInMethodCreditLossExpenseReversal
      contextRef="i4751184d7e5948509cd8893fd49fb821_D20200101-20201231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMDAvZnJhZzplMTllYTYxMDIxMmI0ZWFmYTVjMzExNzljYTAwYzRmYS90YWJsZTpmMmQzOTFlZTJmODc0MmJlODU4N2UxMWU4YmM3MDU1Yi90YWJsZXJhbmdlOmYyZDM5MWVlMmY4NzQyYmU4NTg3ZTExZThiYzcwNTViXzYtNS0xLTEtMzAxNDA_c3bb8ee7-d8be-4675-9b26-909291a2ee13"
      unitRef="usd">1069000</us-gaap:AccountsReceivableChangeInMethodCreditLossExpenseReversal>
    <us-gaap:AllowanceForDoubtfulAccountsReceivable
      contextRef="ibbc2d589a09c46368d9dd3e9ea8996c6_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMDAvZnJhZzplMTllYTYxMDIxMmI0ZWFmYTVjMzExNzljYTAwYzRmYS90YWJsZTpmMmQzOTFlZTJmODc0MmJlODU4N2UxMWU4YmM3MDU1Yi90YWJsZXJhbmdlOmYyZDM5MWVlMmY4NzQyYmU4NTg3ZTExZThiYzcwNTViXzctMS0xLTEtMzAxNDA_618f7cba-6b77-46d7-b8ae-256205a99c6b"
      unitRef="usd">3066000</us-gaap:AllowanceForDoubtfulAccountsReceivable>
    <us-gaap:AllowanceForDoubtfulAccountsReceivable
      contextRef="i62ba0be1fd094d818a1f7d0d5504d1e2_I20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMDAvZnJhZzplMTllYTYxMDIxMmI0ZWFmYTVjMzExNzljYTAwYzRmYS90YWJsZTpmMmQzOTFlZTJmODc0MmJlODU4N2UxMWU4YmM3MDU1Yi90YWJsZXJhbmdlOmYyZDM5MWVlMmY4NzQyYmU4NTg3ZTExZThiYzcwNTViXzctMy0xLTEtMzAxNDA_0eb79ec9-4476-4e54-bb4b-2f32c3ddc696"
      unitRef="usd">4249000</us-gaap:AllowanceForDoubtfulAccountsReceivable>
    <us-gaap:AllowanceForDoubtfulAccountsReceivable
      contextRef="i3ead637906154a2bab043152edc06771_I20201231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMDAvZnJhZzplMTllYTYxMDIxMmI0ZWFmYTVjMzExNzljYTAwYzRmYS90YWJsZTpmMmQzOTFlZTJmODc0MmJlODU4N2UxMWU4YmM3MDU1Yi90YWJsZXJhbmdlOmYyZDM5MWVlMmY4NzQyYmU4NTg3ZTExZThiYzcwNTViXzctNS0xLTEtMzAxNDA_97e78fce-af95-4b67-9976-930b53b4e953"
      unitRef="usd">4233000</us-gaap:AllowanceForDoubtfulAccountsReceivable>
    <us-gaap:PropertyPlantAndEquipmentDisclosureTextBlock
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMDMvZnJhZzo5N2U4MjY3MGMyN2Y0NGY0YTAxOGQ5N2JhOTE0OThlYi90ZXh0cmVnaW9uOjk3ZTgyNjcwYzI3ZjQ0ZjRhMDE4ZDk3YmE5MTQ5OGViXzE4MA_d0d0f415-5320-4fa6-b5a1-a87fa0a49c8c">Property and Equipment, net&lt;div style="margin-top:6pt;text-indent:27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;Property and equipment, net consisted of the following:&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-align:center"&gt;&lt;table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"&gt;&lt;tr&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:71.930%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.081%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.406%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.083%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="9" style="padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;December 31,&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;(in thousands)&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;2022&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;2021&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Internally developed software&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;49,994&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;44,981&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Computer equipment&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;30,310&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;29,329&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Leasehold improvements&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;16,531&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;16,685&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Office equipment and furniture&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;10,981&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;10,972&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 19pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Property and equipment, cost&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;107,816&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;101,967&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Less: accumulated depreciation and amortization&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;(72,358)&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;(70,066)&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 19pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Total property and equipment, net&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;35,458&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;31,901&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;Depreciation and amortization expense of property and equipment was as follows:&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-align:center"&gt;&lt;table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"&gt;&lt;tr&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:58.142%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.081%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.406%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.081%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.406%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.084%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="15" style="padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;Year Ended December 31,&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;(in thousands)&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;2022&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;2021&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;2020&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Depreciation and amortization expense&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;16,421&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;14,788&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;13,127&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;</us-gaap:PropertyPlantAndEquipmentDisclosureTextBlock>
    <us-gaap:PropertyPlantAndEquipmentGross
      contextRef="ia6248027df024357953f14d57770c7dd_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMDMvZnJhZzo5N2U4MjY3MGMyN2Y0NGY0YTAxOGQ5N2JhOTE0OThlYi90YWJsZToxYzIzY2Y3MzBhZDg0NTgwYTkyZWY2NTRhNDE2Yzg5ZS90YWJsZXJhbmdlOjFjMjNjZjczMGFkODQ1ODBhOTJlZjY1NGE0MTZjODllXzItMS0xLTEtMzAxNDA_e13bf185-c29a-4d2b-900b-4203c7e74a95"
      unitRef="usd">49994000</us-gaap:PropertyPlantAndEquipmentGross>
    <us-gaap:PropertyPlantAndEquipmentGross
      contextRef="i883102fa43d2478db24333b3dc34f866_I20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMDMvZnJhZzo5N2U4MjY3MGMyN2Y0NGY0YTAxOGQ5N2JhOTE0OThlYi90YWJsZToxYzIzY2Y3MzBhZDg0NTgwYTkyZWY2NTRhNDE2Yzg5ZS90YWJsZXJhbmdlOjFjMjNjZjczMGFkODQ1ODBhOTJlZjY1NGE0MTZjODllXzItMy0xLTEtMzAxNDA_867a23af-a7ca-4e1f-bad3-2fb283da2eb2"
      unitRef="usd">44981000</us-gaap:PropertyPlantAndEquipmentGross>
    <us-gaap:PropertyPlantAndEquipmentGross
      contextRef="ia9b9f64115b04255b2120c7af146c0b3_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMDMvZnJhZzo5N2U4MjY3MGMyN2Y0NGY0YTAxOGQ5N2JhOTE0OThlYi90YWJsZToxYzIzY2Y3MzBhZDg0NTgwYTkyZWY2NTRhNDE2Yzg5ZS90YWJsZXJhbmdlOjFjMjNjZjczMGFkODQ1ODBhOTJlZjY1NGE0MTZjODllXzMtMS0xLTEtMzAxNDA_b467a0cf-3c4c-437a-a00a-e761fba2d83f"
      unitRef="usd">30310000</us-gaap:PropertyPlantAndEquipmentGross>
    <us-gaap:PropertyPlantAndEquipmentGross
      contextRef="icc0b00ffde2c4e2ea9ea11d04beaabf0_I20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMDMvZnJhZzo5N2U4MjY3MGMyN2Y0NGY0YTAxOGQ5N2JhOTE0OThlYi90YWJsZToxYzIzY2Y3MzBhZDg0NTgwYTkyZWY2NTRhNDE2Yzg5ZS90YWJsZXJhbmdlOjFjMjNjZjczMGFkODQ1ODBhOTJlZjY1NGE0MTZjODllXzMtMy0xLTEtMzAxNDA_18976864-5be6-457c-8939-1dc6225f203d"
      unitRef="usd">29329000</us-gaap:PropertyPlantAndEquipmentGross>
    <us-gaap:PropertyPlantAndEquipmentGross
      contextRef="i3665584868bc4b61bad23683a6378887_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMDMvZnJhZzo5N2U4MjY3MGMyN2Y0NGY0YTAxOGQ5N2JhOTE0OThlYi90YWJsZToxYzIzY2Y3MzBhZDg0NTgwYTkyZWY2NTRhNDE2Yzg5ZS90YWJsZXJhbmdlOjFjMjNjZjczMGFkODQ1ODBhOTJlZjY1NGE0MTZjODllXzQtMS0xLTEtMzAxNDA_8fcbdb4c-ed2a-42c1-911f-e0c3e16fb61f"
      unitRef="usd">16531000</us-gaap:PropertyPlantAndEquipmentGross>
    <us-gaap:PropertyPlantAndEquipmentGross
      contextRef="iac4e0b91b81c43149d42886e15b7b242_I20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMDMvZnJhZzo5N2U4MjY3MGMyN2Y0NGY0YTAxOGQ5N2JhOTE0OThlYi90YWJsZToxYzIzY2Y3MzBhZDg0NTgwYTkyZWY2NTRhNDE2Yzg5ZS90YWJsZXJhbmdlOjFjMjNjZjczMGFkODQ1ODBhOTJlZjY1NGE0MTZjODllXzQtMy0xLTEtMzAxNDA_e3b11aed-221b-49f9-8d35-5d9bb16230e8"
      unitRef="usd">16685000</us-gaap:PropertyPlantAndEquipmentGross>
    <us-gaap:PropertyPlantAndEquipmentGross
      contextRef="i8e670d49be774e20bd7dc3f62750bd25_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMDMvZnJhZzo5N2U4MjY3MGMyN2Y0NGY0YTAxOGQ5N2JhOTE0OThlYi90YWJsZToxYzIzY2Y3MzBhZDg0NTgwYTkyZWY2NTRhNDE2Yzg5ZS90YWJsZXJhbmdlOjFjMjNjZjczMGFkODQ1ODBhOTJlZjY1NGE0MTZjODllXzUtMS0xLTEtMzAxNDA_88016e18-ea4f-44f3-9b06-5d805fd1dfea"
      unitRef="usd">10981000</us-gaap:PropertyPlantAndEquipmentGross>
    <us-gaap:PropertyPlantAndEquipmentGross
      contextRef="i7ad160030cb44bf6b209e0329a0894be_I20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMDMvZnJhZzo5N2U4MjY3MGMyN2Y0NGY0YTAxOGQ5N2JhOTE0OThlYi90YWJsZToxYzIzY2Y3MzBhZDg0NTgwYTkyZWY2NTRhNDE2Yzg5ZS90YWJsZXJhbmdlOjFjMjNjZjczMGFkODQ1ODBhOTJlZjY1NGE0MTZjODllXzUtMy0xLTEtMzAxNDA_4b44924b-a69c-4601-91bd-18fd222db875"
      unitRef="usd">10972000</us-gaap:PropertyPlantAndEquipmentGross>
    <us-gaap:PropertyPlantAndEquipmentGross
      contextRef="ibbc2d589a09c46368d9dd3e9ea8996c6_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMDMvZnJhZzo5N2U4MjY3MGMyN2Y0NGY0YTAxOGQ5N2JhOTE0OThlYi90YWJsZToxYzIzY2Y3MzBhZDg0NTgwYTkyZWY2NTRhNDE2Yzg5ZS90YWJsZXJhbmdlOjFjMjNjZjczMGFkODQ1ODBhOTJlZjY1NGE0MTZjODllXzYtMS0xLTEtMzAxNDA_9c7df776-d2df-44c6-8dfd-8043b977f25b"
      unitRef="usd">107816000</us-gaap:PropertyPlantAndEquipmentGross>
    <us-gaap:PropertyPlantAndEquipmentGross
      contextRef="i62ba0be1fd094d818a1f7d0d5504d1e2_I20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMDMvZnJhZzo5N2U4MjY3MGMyN2Y0NGY0YTAxOGQ5N2JhOTE0OThlYi90YWJsZToxYzIzY2Y3MzBhZDg0NTgwYTkyZWY2NTRhNDE2Yzg5ZS90YWJsZXJhbmdlOjFjMjNjZjczMGFkODQ1ODBhOTJlZjY1NGE0MTZjODllXzYtMy0xLTEtMzAxNDA_fe56f1d1-dda6-4416-9e94-4a66f90f0459"
      unitRef="usd">101967000</us-gaap:PropertyPlantAndEquipmentGross>
    <us-gaap:AccumulatedDepreciationDepletionAndAmortizationPropertyPlantAndEquipment
      contextRef="ibbc2d589a09c46368d9dd3e9ea8996c6_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMDMvZnJhZzo5N2U4MjY3MGMyN2Y0NGY0YTAxOGQ5N2JhOTE0OThlYi90YWJsZToxYzIzY2Y3MzBhZDg0NTgwYTkyZWY2NTRhNDE2Yzg5ZS90YWJsZXJhbmdlOjFjMjNjZjczMGFkODQ1ODBhOTJlZjY1NGE0MTZjODllXzctMS0xLTEtMzAxNDA_26dddcfb-fd06-44b9-a1b3-79987ca89bb1"
      unitRef="usd">72358000</us-gaap:AccumulatedDepreciationDepletionAndAmortizationPropertyPlantAndEquipment>
    <us-gaap:AccumulatedDepreciationDepletionAndAmortizationPropertyPlantAndEquipment
      contextRef="i62ba0be1fd094d818a1f7d0d5504d1e2_I20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMDMvZnJhZzo5N2U4MjY3MGMyN2Y0NGY0YTAxOGQ5N2JhOTE0OThlYi90YWJsZToxYzIzY2Y3MzBhZDg0NTgwYTkyZWY2NTRhNDE2Yzg5ZS90YWJsZXJhbmdlOjFjMjNjZjczMGFkODQ1ODBhOTJlZjY1NGE0MTZjODllXzctMy0xLTEtMzAxNDA_04574867-0018-49ca-9bc0-70339fb366b9"
      unitRef="usd">70066000</us-gaap:AccumulatedDepreciationDepletionAndAmortizationPropertyPlantAndEquipment>
    <us-gaap:PropertyPlantAndEquipmentNet
      contextRef="ibbc2d589a09c46368d9dd3e9ea8996c6_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMDMvZnJhZzo5N2U4MjY3MGMyN2Y0NGY0YTAxOGQ5N2JhOTE0OThlYi90YWJsZToxYzIzY2Y3MzBhZDg0NTgwYTkyZWY2NTRhNDE2Yzg5ZS90YWJsZXJhbmdlOjFjMjNjZjczMGFkODQ1ODBhOTJlZjY1NGE0MTZjODllXzgtMS0xLTEtMzAxNDA_2d1b438c-c68c-42af-8c7d-2b541d8e5c69"
      unitRef="usd">35458000</us-gaap:PropertyPlantAndEquipmentNet>
    <us-gaap:PropertyPlantAndEquipmentNet
      contextRef="i62ba0be1fd094d818a1f7d0d5504d1e2_I20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMDMvZnJhZzo5N2U4MjY3MGMyN2Y0NGY0YTAxOGQ5N2JhOTE0OThlYi90YWJsZToxYzIzY2Y3MzBhZDg0NTgwYTkyZWY2NTRhNDE2Yzg5ZS90YWJsZXJhbmdlOjFjMjNjZjczMGFkODQ1ODBhOTJlZjY1NGE0MTZjODllXzgtMy0xLTEtMzAxNDA_bdcfe025-9812-42fa-97f4-1f65a89f3f15"
      unitRef="usd">31901000</us-gaap:PropertyPlantAndEquipmentNet>
    <spsc:DepreciationAndAmortizationExpenseOfPropertyAndEquipmentTableTableTextBlock
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMDMvZnJhZzo5N2U4MjY3MGMyN2Y0NGY0YTAxOGQ5N2JhOTE0OThlYi90ZXh0cmVnaW9uOjk3ZTgyNjcwYzI3ZjQ0ZjRhMDE4ZDk3YmE5MTQ5OGViXzE4Mg_8bf9bc95-68b4-405b-b80b-ad125f9c381d">&lt;div style="margin-top:6pt;text-indent:27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;Depreciation and amortization expense of property and equipment was as follows:&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-align:center"&gt;&lt;table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"&gt;&lt;tr&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:58.142%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.081%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.406%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.081%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.406%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.084%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="15" style="padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;Year Ended December 31,&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;(in thousands)&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;2022&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;2021&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;2020&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Depreciation and amortization expense&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;16,421&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;14,788&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;13,127&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;</spsc:DepreciationAndAmortizationExpenseOfPropertyAndEquipmentTableTableTextBlock>
    <us-gaap:DepreciationDepletionAndAmortization
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMDMvZnJhZzo5N2U4MjY3MGMyN2Y0NGY0YTAxOGQ5N2JhOTE0OThlYi90YWJsZTpkZjVhMDgzMjlmOGE0MjFhODIyN2JlYTdkNzQxZDQ0Mi90YWJsZXJhbmdlOmRmNWEwODMyOWY4YTQyMWE4MjI3YmVhN2Q3NDFkNDQyXzItMS0xLTEtMzAxNDA_dcd558bd-2473-4132-bfb6-d8042565998c"
      unitRef="usd">16421000</us-gaap:DepreciationDepletionAndAmortization>
    <us-gaap:DepreciationDepletionAndAmortization
      contextRef="ie07f2822175c48edbb8d5559ceb82e6f_D20210101-20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMDMvZnJhZzo5N2U4MjY3MGMyN2Y0NGY0YTAxOGQ5N2JhOTE0OThlYi90YWJsZTpkZjVhMDgzMjlmOGE0MjFhODIyN2JlYTdkNzQxZDQ0Mi90YWJsZXJhbmdlOmRmNWEwODMyOWY4YTQyMWE4MjI3YmVhN2Q3NDFkNDQyXzItMy0xLTEtMzAxNDA_013359e6-1278-4d13-a8be-d59097ed4647"
      unitRef="usd">14788000</us-gaap:DepreciationDepletionAndAmortization>
    <us-gaap:DepreciationDepletionAndAmortization
      contextRef="i4751184d7e5948509cd8893fd49fb821_D20200101-20201231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMDMvZnJhZzo5N2U4MjY3MGMyN2Y0NGY0YTAxOGQ5N2JhOTE0OThlYi90YWJsZTpkZjVhMDgzMjlmOGE0MjFhODIyN2JlYTdkNzQxZDQ0Mi90YWJsZXJhbmdlOmRmNWEwODMyOWY4YTQyMWE4MjI3YmVhN2Q3NDFkNDQyXzItNS0xLTEtMzAxNDA_7e99918d-2a73-42e8-8b6e-34dbbd2825ac"
      unitRef="usd">13127000</us-gaap:DepreciationDepletionAndAmortization>
    <us-gaap:GoodwillAndIntangibleAssetsDisclosureTextBlock
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMDYvZnJhZzozMTMxMjI2ODgxNjM0OWVjYmRlZDE0OTU1NjBiYzNmZC90ZXh0cmVnaW9uOjMxMzEyMjY4ODE2MzQ5ZWNiZGVkMTQ5NTU2MGJjM2ZkXzI3MA_7bb8280e-9efc-4fc7-a1b7-d62d33e48f8e">Goodwill and Intangible Assets, net&lt;div style="margin-top:6pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-style:italic;font-weight:700;line-height:120%"&gt;Goodwill&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;The activity in goodwill was as follows:&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-align:center"&gt;&lt;table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"&gt;&lt;tr&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:71.930%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.081%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.406%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.083%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="9" style="padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;Year Ended December 31,&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;(in thousands)&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:0.75pt solid #000000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;2022&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:0.75pt solid #000000;padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:0.75pt solid #000000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;2021&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Balance, beginning of year&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:0.75pt solid #000000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:0.75pt solid #000000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;143,663&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:0.75pt solid #000000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;border-top:0.75pt solid #000000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:0.75pt solid #000000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;134,853&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:0.75pt solid #000000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Additions from business acquisitions&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;56,566&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;8,914&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Foreign currency translation&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;(1,618)&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;(372)&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Remeasurement from provisional purchase accounting amount&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;(1,327)&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;268&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Balance, end of year&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000000;border-top:0.75pt solid #000000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000000;border-top:0.75pt solid #000000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;197,284&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000000;border-top:0.75pt solid #000000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000000;border-top:0.75pt solid #000000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000000;border-top:0.75pt solid #000000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;143,663&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000000;border-top:0.75pt solid #000000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;div style="margin-top:18pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-style:italic;font-weight:700;line-height:120%"&gt;Intangible Assets&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;Intangible assets, net consisted of the following:&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-align:center"&gt;&lt;table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"&gt;&lt;tr&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:41.172%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:9.960%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.406%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:9.960%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.406%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:9.960%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.406%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:9.960%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.406%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:9.964%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="27" style="padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;December 31, 2022&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;($ in thousands)&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;div style="margin-top:0.75pt;text-align:center"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:115%"&gt;Gross&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:0.75pt;text-align:center"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:115%"&gt;Carrying&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:0.75pt;text-align:center"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:115%"&gt;Amount&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;div style="margin-top:0.75pt;text-align:center"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:115%"&gt;Accumulated&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:0.75pt;text-align:center"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:115%"&gt;Amortization&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;div style="margin-top:0.75pt;text-align:center"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:115%"&gt;Foreign&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:0.75pt;text-align:center"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:115%"&gt;Currency&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:0.75pt;text-align:center"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:115%"&gt;Translation&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;Net&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;Weighted Average Remaining &lt;br/&gt;Amortization Period&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Subscriber relationships&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;80,101&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;(22,255)&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;(171)&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;57,675&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;6.8 years&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Developed technology&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;40,610&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;(9,934)&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;1&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;30,677&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;5.4 years&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;120,711&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;(32,189)&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;(170)&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;88,352&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;6.4 years&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-align:center"&gt;&lt;table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"&gt;&lt;tr&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:41.172%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:9.960%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.406%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:9.960%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.406%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:9.960%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.406%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:9.960%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.406%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:9.964%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="27" style="padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;December 31, 2021&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;($ in thousands)&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;div style="margin-top:0.75pt;text-align:center"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:115%"&gt;Gross&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:0.75pt;text-align:center"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:115%"&gt;Carrying&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:0.75pt;text-align:center"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:115%"&gt;Amount&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;div style="margin-top:0.75pt;text-align:center"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:115%"&gt;Accumulated&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:0.75pt;text-align:center"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:115%"&gt;Amortization&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;div style="margin-top:0.75pt;text-align:center"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:115%"&gt;Foreign&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:0.75pt;text-align:center"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:115%"&gt;Currency&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:0.75pt;text-align:center"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:115%"&gt;Translation&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;Net&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;Weighted Average Remaining &lt;br/&gt;Amortization Period&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Subscriber relationships&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;61,270&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;(29,866)&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;(1,395)&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;30,009&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;6.4 years&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Developed technology&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;35,316&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;(6,738)&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;&#x2014;&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;28,578&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;6.8 years&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;96,586&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;(36,604)&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;(1,395)&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;58,587&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;6.6 years&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;The estimated future annual amortization expense related to intangible assets is as follows:&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-align:center"&gt;&lt;table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"&gt;&lt;tr&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:85.718%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.082%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;(in thousands)&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;2023&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;15,289&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;2024&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;14,098&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;2025&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;13,960&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;2026&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;12,956&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;2027&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;12,493&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Thereafter&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;19,556&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Total future amortization&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;88,352&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;</us-gaap:GoodwillAndIntangibleAssetsDisclosureTextBlock>
    <us-gaap:ScheduleOfGoodwillTextBlock
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMDYvZnJhZzozMTMxMjI2ODgxNjM0OWVjYmRlZDE0OTU1NjBiYzNmZC90ZXh0cmVnaW9uOjMxMzEyMjY4ODE2MzQ5ZWNiZGVkMTQ5NTU2MGJjM2ZkXzI3MQ_1cbcc873-0864-4639-955f-4003aab23204">&lt;div style="margin-top:6pt;text-indent:27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;The activity in goodwill was as follows:&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-align:center"&gt;&lt;table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"&gt;&lt;tr&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:71.930%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.081%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.406%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.083%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="9" style="padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;Year Ended December 31,&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;(in thousands)&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:0.75pt solid #000000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;2022&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:0.75pt solid #000000;padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:0.75pt solid #000000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;2021&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Balance, beginning of year&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:0.75pt solid #000000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:0.75pt solid #000000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;143,663&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:0.75pt solid #000000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;border-top:0.75pt solid #000000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:0.75pt solid #000000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;134,853&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:0.75pt solid #000000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Additions from business acquisitions&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;56,566&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;8,914&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Foreign currency translation&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;(1,618)&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;(372)&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Remeasurement from provisional purchase accounting amount&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;(1,327)&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;268&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Balance, end of year&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000000;border-top:0.75pt solid #000000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000000;border-top:0.75pt solid #000000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;197,284&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000000;border-top:0.75pt solid #000000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000000;border-top:0.75pt solid #000000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000000;border-top:0.75pt solid #000000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;143,663&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000000;border-top:0.75pt solid #000000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;</us-gaap:ScheduleOfGoodwillTextBlock>
    <us-gaap:Goodwill
      contextRef="i62ba0be1fd094d818a1f7d0d5504d1e2_I20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMDYvZnJhZzozMTMxMjI2ODgxNjM0OWVjYmRlZDE0OTU1NjBiYzNmZC90YWJsZTpkYzU4ZGY3ZmYxOTQ0MGQ0OTVkN2ViNzA0OTc1NWU4OC90YWJsZXJhbmdlOmRjNThkZjdmZjE5NDQwZDQ5NWQ3ZWI3MDQ5NzU1ZTg4XzItMS0xLTEtMzAxNDA_eeaa8e11-9943-4709-afdf-8795b411f567"
      unitRef="usd">143663000</us-gaap:Goodwill>
    <us-gaap:Goodwill
      contextRef="i3ead637906154a2bab043152edc06771_I20201231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMDYvZnJhZzozMTMxMjI2ODgxNjM0OWVjYmRlZDE0OTU1NjBiYzNmZC90YWJsZTpkYzU4ZGY3ZmYxOTQ0MGQ0OTVkN2ViNzA0OTc1NWU4OC90YWJsZXJhbmdlOmRjNThkZjdmZjE5NDQwZDQ5NWQ3ZWI3MDQ5NzU1ZTg4XzItMy0xLTEtMzAxNDA_4e5e1c19-4356-412d-a497-e9e7832cee68"
      unitRef="usd">134853000</us-gaap:Goodwill>
    <us-gaap:GoodwillAcquiredDuringPeriod
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMDYvZnJhZzozMTMxMjI2ODgxNjM0OWVjYmRlZDE0OTU1NjBiYzNmZC90YWJsZTpkYzU4ZGY3ZmYxOTQ0MGQ0OTVkN2ViNzA0OTc1NWU4OC90YWJsZXJhbmdlOmRjNThkZjdmZjE5NDQwZDQ5NWQ3ZWI3MDQ5NzU1ZTg4XzMtMS0xLTEtMzAxNDA_9d14286d-c2ab-4086-b3ad-867f470074e4"
      unitRef="usd">56566000</us-gaap:GoodwillAcquiredDuringPeriod>
    <us-gaap:GoodwillAcquiredDuringPeriod
      contextRef="ie07f2822175c48edbb8d5559ceb82e6f_D20210101-20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMDYvZnJhZzozMTMxMjI2ODgxNjM0OWVjYmRlZDE0OTU1NjBiYzNmZC90YWJsZTpkYzU4ZGY3ZmYxOTQ0MGQ0OTVkN2ViNzA0OTc1NWU4OC90YWJsZXJhbmdlOmRjNThkZjdmZjE5NDQwZDQ5NWQ3ZWI3MDQ5NzU1ZTg4XzMtMy0xLTEtMzAxNDA_d46a8567-9528-4b73-9b98-94e070ca258f"
      unitRef="usd">8914000</us-gaap:GoodwillAcquiredDuringPeriod>
    <us-gaap:GoodwillPurchaseAccountingAdjustments
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMDYvZnJhZzozMTMxMjI2ODgxNjM0OWVjYmRlZDE0OTU1NjBiYzNmZC90YWJsZTpkYzU4ZGY3ZmYxOTQ0MGQ0OTVkN2ViNzA0OTc1NWU4OC90YWJsZXJhbmdlOmRjNThkZjdmZjE5NDQwZDQ5NWQ3ZWI3MDQ5NzU1ZTg4XzQtMS0xLTEtMzAxNDA_d5f584a9-c6b4-448e-863d-652041a3b5b4"
      unitRef="usd">-1618000</us-gaap:GoodwillPurchaseAccountingAdjustments>
    <us-gaap:GoodwillPurchaseAccountingAdjustments
      contextRef="ie07f2822175c48edbb8d5559ceb82e6f_D20210101-20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMDYvZnJhZzozMTMxMjI2ODgxNjM0OWVjYmRlZDE0OTU1NjBiYzNmZC90YWJsZTpkYzU4ZGY3ZmYxOTQ0MGQ0OTVkN2ViNzA0OTc1NWU4OC90YWJsZXJhbmdlOmRjNThkZjdmZjE5NDQwZDQ5NWQ3ZWI3MDQ5NzU1ZTg4XzQtMy0xLTEtMzAxNDA_fc7f6157-1c34-4415-aea7-6563992df59e"
      unitRef="usd">-372000</us-gaap:GoodwillPurchaseAccountingAdjustments>
    <us-gaap:GoodwillForeignCurrencyTranslationGainLoss
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMDYvZnJhZzozMTMxMjI2ODgxNjM0OWVjYmRlZDE0OTU1NjBiYzNmZC90YWJsZTpkYzU4ZGY3ZmYxOTQ0MGQ0OTVkN2ViNzA0OTc1NWU4OC90YWJsZXJhbmdlOmRjNThkZjdmZjE5NDQwZDQ5NWQ3ZWI3MDQ5NzU1ZTg4XzUtMS0xLTEtMzAxNDA_7b0dc9fc-68ed-41c0-8286-e5202680e82f"
      unitRef="usd">-1327000</us-gaap:GoodwillForeignCurrencyTranslationGainLoss>
    <us-gaap:GoodwillForeignCurrencyTranslationGainLoss
      contextRef="ie07f2822175c48edbb8d5559ceb82e6f_D20210101-20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMDYvZnJhZzozMTMxMjI2ODgxNjM0OWVjYmRlZDE0OTU1NjBiYzNmZC90YWJsZTpkYzU4ZGY3ZmYxOTQ0MGQ0OTVkN2ViNzA0OTc1NWU4OC90YWJsZXJhbmdlOmRjNThkZjdmZjE5NDQwZDQ5NWQ3ZWI3MDQ5NzU1ZTg4XzUtMy0xLTEtMzAxNDA_ae555a0b-555a-4b5f-bfbf-893411cbf4bf"
      unitRef="usd">268000</us-gaap:GoodwillForeignCurrencyTranslationGainLoss>
    <us-gaap:Goodwill
      contextRef="ibbc2d589a09c46368d9dd3e9ea8996c6_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMDYvZnJhZzozMTMxMjI2ODgxNjM0OWVjYmRlZDE0OTU1NjBiYzNmZC90YWJsZTpkYzU4ZGY3ZmYxOTQ0MGQ0OTVkN2ViNzA0OTc1NWU4OC90YWJsZXJhbmdlOmRjNThkZjdmZjE5NDQwZDQ5NWQ3ZWI3MDQ5NzU1ZTg4XzYtMS0xLTEtMzAxNDA_a33e7449-223e-4c65-befd-61877273184e"
      unitRef="usd">197284000</us-gaap:Goodwill>
    <us-gaap:Goodwill
      contextRef="i62ba0be1fd094d818a1f7d0d5504d1e2_I20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMDYvZnJhZzozMTMxMjI2ODgxNjM0OWVjYmRlZDE0OTU1NjBiYzNmZC90YWJsZTpkYzU4ZGY3ZmYxOTQ0MGQ0OTVkN2ViNzA0OTc1NWU4OC90YWJsZXJhbmdlOmRjNThkZjdmZjE5NDQwZDQ5NWQ3ZWI3MDQ5NzU1ZTg4XzYtMy0xLTEtMzAxNDA_98637d64-5a60-4871-a90a-cbd81f5f93c8"
      unitRef="usd">143663000</us-gaap:Goodwill>
    <us-gaap:ScheduleOfFiniteLivedIntangibleAssetsTableTextBlock
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMDYvZnJhZzozMTMxMjI2ODgxNjM0OWVjYmRlZDE0OTU1NjBiYzNmZC90ZXh0cmVnaW9uOjMxMzEyMjY4ODE2MzQ5ZWNiZGVkMTQ5NTU2MGJjM2ZkXzI3Mg_53bfb9fb-288b-4084-8d2a-637ef324f28b">&lt;div style="margin-top:6pt;text-indent:27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;Intangible assets, net consisted of the following:&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-align:center"&gt;&lt;table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"&gt;&lt;tr&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:41.172%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:9.960%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.406%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:9.960%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.406%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:9.960%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.406%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:9.960%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.406%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:9.964%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="27" style="padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;December 31, 2022&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;($ in thousands)&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;div style="margin-top:0.75pt;text-align:center"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:115%"&gt;Gross&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:0.75pt;text-align:center"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:115%"&gt;Carrying&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:0.75pt;text-align:center"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:115%"&gt;Amount&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;div style="margin-top:0.75pt;text-align:center"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:115%"&gt;Accumulated&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:0.75pt;text-align:center"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:115%"&gt;Amortization&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;div style="margin-top:0.75pt;text-align:center"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:115%"&gt;Foreign&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:0.75pt;text-align:center"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:115%"&gt;Currency&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:0.75pt;text-align:center"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:115%"&gt;Translation&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;Net&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;Weighted Average Remaining &lt;br/&gt;Amortization Period&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Subscriber relationships&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;80,101&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;(22,255)&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;(171)&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;57,675&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;6.8 years&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Developed technology&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;40,610&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;(9,934)&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;1&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;30,677&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;5.4 years&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;120,711&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;(32,189)&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;(170)&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;88,352&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;6.4 years&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-align:center"&gt;&lt;table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"&gt;&lt;tr&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:41.172%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:9.960%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.406%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:9.960%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.406%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:9.960%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.406%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:9.960%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.406%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:9.964%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="27" style="padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;December 31, 2021&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;($ in thousands)&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;div style="margin-top:0.75pt;text-align:center"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:115%"&gt;Gross&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:0.75pt;text-align:center"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:115%"&gt;Carrying&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:0.75pt;text-align:center"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:115%"&gt;Amount&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;div style="margin-top:0.75pt;text-align:center"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:115%"&gt;Accumulated&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:0.75pt;text-align:center"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:115%"&gt;Amortization&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;div style="margin-top:0.75pt;text-align:center"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:115%"&gt;Foreign&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:0.75pt;text-align:center"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:115%"&gt;Currency&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:0.75pt;text-align:center"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:115%"&gt;Translation&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;Net&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;Weighted Average Remaining &lt;br/&gt;Amortization Period&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Subscriber relationships&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;61,270&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;(29,866)&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;(1,395)&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;30,009&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;6.4 years&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Developed technology&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;35,316&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;(6,738)&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;&#x2014;&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;28,578&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;6.8 years&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;96,586&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;(36,604)&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;(1,395)&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;58,587&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;6.6 years&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;</us-gaap:ScheduleOfFiniteLivedIntangibleAssetsTableTextBlock>
    <us-gaap:FiniteLivedIntangibleAssetsGross
      contextRef="ic14a747d62e84b648c0389c9f29a03bf_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMDYvZnJhZzozMTMxMjI2ODgxNjM0OWVjYmRlZDE0OTU1NjBiYzNmZC90YWJsZTplODgwYTRiMGNiM2Q0NzIyOTQ3ZmY0NDYxZjhkZjdmZC90YWJsZXJhbmdlOmU4ODBhNGIwY2IzZDQ3MjI5NDdmZjQ0NjFmOGRmN2ZkXzItMS0xLTEtMzAxNDA_4e315456-0434-4be9-88a7-a22304fb2aee"
      unitRef="usd">80101000</us-gaap:FiniteLivedIntangibleAssetsGross>
    <us-gaap:FiniteLivedIntangibleAssetsAccumulatedAmortization
      contextRef="ic14a747d62e84b648c0389c9f29a03bf_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMDYvZnJhZzozMTMxMjI2ODgxNjM0OWVjYmRlZDE0OTU1NjBiYzNmZC90YWJsZTplODgwYTRiMGNiM2Q0NzIyOTQ3ZmY0NDYxZjhkZjdmZC90YWJsZXJhbmdlOmU4ODBhNGIwY2IzZDQ3MjI5NDdmZjQ0NjFmOGRmN2ZkXzItMy0xLTEtMzAxNDA_4d2507fa-4df0-497a-aa80-a9f99e32d102"
      unitRef="usd">22255000</us-gaap:FiniteLivedIntangibleAssetsAccumulatedAmortization>
    <spsc:FiniteLivedIntangibleAssetsAccumulatedForeignCurrencyTranslationGainLoss
      contextRef="ic14a747d62e84b648c0389c9f29a03bf_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMDYvZnJhZzozMTMxMjI2ODgxNjM0OWVjYmRlZDE0OTU1NjBiYzNmZC90YWJsZTplODgwYTRiMGNiM2Q0NzIyOTQ3ZmY0NDYxZjhkZjdmZC90YWJsZXJhbmdlOmU4ODBhNGIwY2IzZDQ3MjI5NDdmZjQ0NjFmOGRmN2ZkXzItNS0xLTEtMzAxNDA_aa7b0d35-c6bc-4c89-9370-015f41c25e13"
      unitRef="usd">-171000</spsc:FiniteLivedIntangibleAssetsAccumulatedForeignCurrencyTranslationGainLoss>
    <us-gaap:FiniteLivedIntangibleAssetsNet
      contextRef="ic14a747d62e84b648c0389c9f29a03bf_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMDYvZnJhZzozMTMxMjI2ODgxNjM0OWVjYmRlZDE0OTU1NjBiYzNmZC90YWJsZTplODgwYTRiMGNiM2Q0NzIyOTQ3ZmY0NDYxZjhkZjdmZC90YWJsZXJhbmdlOmU4ODBhNGIwY2IzZDQ3MjI5NDdmZjQ0NjFmOGRmN2ZkXzItNy0xLTEtMzAxNDA_44849614-c721-4317-8c64-94e5e663d0fa"
      unitRef="usd">57675000</us-gaap:FiniteLivedIntangibleAssetsNet>
    <us-gaap:FiniteLivedIntangibleAssetsRemainingAmortizationPeriod1
      contextRef="i19e2dba10c3f4780bc27deba91a3a045_D20220101-20221231"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMDYvZnJhZzozMTMxMjI2ODgxNjM0OWVjYmRlZDE0OTU1NjBiYzNmZC90YWJsZTplODgwYTRiMGNiM2Q0NzIyOTQ3ZmY0NDYxZjhkZjdmZC90YWJsZXJhbmdlOmU4ODBhNGIwY2IzZDQ3MjI5NDdmZjQ0NjFmOGRmN2ZkXzItOS0xLTEtMzAxNDA_007fb2d7-c6eb-4378-a550-33e6eff70f48">P6Y9M18D</us-gaap:FiniteLivedIntangibleAssetsRemainingAmortizationPeriod1>
    <us-gaap:FiniteLivedIntangibleAssetsGross
      contextRef="i6521ccd8c6e9482a9c9e770a8fd1c2bb_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMDYvZnJhZzozMTMxMjI2ODgxNjM0OWVjYmRlZDE0OTU1NjBiYzNmZC90YWJsZTplODgwYTRiMGNiM2Q0NzIyOTQ3ZmY0NDYxZjhkZjdmZC90YWJsZXJhbmdlOmU4ODBhNGIwY2IzZDQ3MjI5NDdmZjQ0NjFmOGRmN2ZkXzMtMS0xLTEtMzAxNDA_77b34f14-8865-48aa-82aa-05c9312d1aa9"
      unitRef="usd">40610000</us-gaap:FiniteLivedIntangibleAssetsGross>
    <us-gaap:FiniteLivedIntangibleAssetsAccumulatedAmortization
      contextRef="i6521ccd8c6e9482a9c9e770a8fd1c2bb_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMDYvZnJhZzozMTMxMjI2ODgxNjM0OWVjYmRlZDE0OTU1NjBiYzNmZC90YWJsZTplODgwYTRiMGNiM2Q0NzIyOTQ3ZmY0NDYxZjhkZjdmZC90YWJsZXJhbmdlOmU4ODBhNGIwY2IzZDQ3MjI5NDdmZjQ0NjFmOGRmN2ZkXzMtMy0xLTEtMzAxNDA_2d6c5009-dfd1-4887-91eb-76ea5a646b0e"
      unitRef="usd">9934000</us-gaap:FiniteLivedIntangibleAssetsAccumulatedAmortization>
    <spsc:FiniteLivedIntangibleAssetsAccumulatedForeignCurrencyTranslationGainLoss
      contextRef="i6521ccd8c6e9482a9c9e770a8fd1c2bb_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMDYvZnJhZzozMTMxMjI2ODgxNjM0OWVjYmRlZDE0OTU1NjBiYzNmZC90YWJsZTplODgwYTRiMGNiM2Q0NzIyOTQ3ZmY0NDYxZjhkZjdmZC90YWJsZXJhbmdlOmU4ODBhNGIwY2IzZDQ3MjI5NDdmZjQ0NjFmOGRmN2ZkXzMtNS0xLTEtMzAxNDA_6f624cdc-e746-4612-a888-a4234651bf9f"
      unitRef="usd">1000</spsc:FiniteLivedIntangibleAssetsAccumulatedForeignCurrencyTranslationGainLoss>
    <us-gaap:FiniteLivedIntangibleAssetsNet
      contextRef="i6521ccd8c6e9482a9c9e770a8fd1c2bb_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMDYvZnJhZzozMTMxMjI2ODgxNjM0OWVjYmRlZDE0OTU1NjBiYzNmZC90YWJsZTplODgwYTRiMGNiM2Q0NzIyOTQ3ZmY0NDYxZjhkZjdmZC90YWJsZXJhbmdlOmU4ODBhNGIwY2IzZDQ3MjI5NDdmZjQ0NjFmOGRmN2ZkXzMtNy0xLTEtMzAxNDA_093114c8-7028-4f2a-918d-464c1b51bc80"
      unitRef="usd">30677000</us-gaap:FiniteLivedIntangibleAssetsNet>
    <us-gaap:FiniteLivedIntangibleAssetsRemainingAmortizationPeriod1
      contextRef="i0c09fdabd02240e0adc2d875556ca9ac_D20220101-20221231"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMDYvZnJhZzozMTMxMjI2ODgxNjM0OWVjYmRlZDE0OTU1NjBiYzNmZC90YWJsZTplODgwYTRiMGNiM2Q0NzIyOTQ3ZmY0NDYxZjhkZjdmZC90YWJsZXJhbmdlOmU4ODBhNGIwY2IzZDQ3MjI5NDdmZjQ0NjFmOGRmN2ZkXzMtOS0xLTEtMzAxNDA_6fc5c9a7-bc78-43be-9b4b-0a53757331dc">P5Y4M24D</us-gaap:FiniteLivedIntangibleAssetsRemainingAmortizationPeriod1>
    <us-gaap:FiniteLivedIntangibleAssetsGross
      contextRef="ibbc2d589a09c46368d9dd3e9ea8996c6_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMDYvZnJhZzozMTMxMjI2ODgxNjM0OWVjYmRlZDE0OTU1NjBiYzNmZC90YWJsZTplODgwYTRiMGNiM2Q0NzIyOTQ3ZmY0NDYxZjhkZjdmZC90YWJsZXJhbmdlOmU4ODBhNGIwY2IzZDQ3MjI5NDdmZjQ0NjFmOGRmN2ZkXzQtMS0xLTEtMzAxNDA_8651142d-a091-4126-9efa-ba33cce67d79"
      unitRef="usd">120711000</us-gaap:FiniteLivedIntangibleAssetsGross>
    <us-gaap:FiniteLivedIntangibleAssetsAccumulatedAmortization
      contextRef="ibbc2d589a09c46368d9dd3e9ea8996c6_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMDYvZnJhZzozMTMxMjI2ODgxNjM0OWVjYmRlZDE0OTU1NjBiYzNmZC90YWJsZTplODgwYTRiMGNiM2Q0NzIyOTQ3ZmY0NDYxZjhkZjdmZC90YWJsZXJhbmdlOmU4ODBhNGIwY2IzZDQ3MjI5NDdmZjQ0NjFmOGRmN2ZkXzQtMy0xLTEtMzAxNDA_5744e12f-8616-4a50-9f66-0992cfb29f6d"
      unitRef="usd">32189000</us-gaap:FiniteLivedIntangibleAssetsAccumulatedAmortization>
    <spsc:FiniteLivedIntangibleAssetsAccumulatedForeignCurrencyTranslationGainLoss
      contextRef="ibbc2d589a09c46368d9dd3e9ea8996c6_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMDYvZnJhZzozMTMxMjI2ODgxNjM0OWVjYmRlZDE0OTU1NjBiYzNmZC90YWJsZTplODgwYTRiMGNiM2Q0NzIyOTQ3ZmY0NDYxZjhkZjdmZC90YWJsZXJhbmdlOmU4ODBhNGIwY2IzZDQ3MjI5NDdmZjQ0NjFmOGRmN2ZkXzQtNS0xLTEtMzAxNDA_79cfd9dc-8944-4819-ad09-af40bf8c6f78"
      unitRef="usd">-170000</spsc:FiniteLivedIntangibleAssetsAccumulatedForeignCurrencyTranslationGainLoss>
    <us-gaap:FiniteLivedIntangibleAssetsNet
      contextRef="ibbc2d589a09c46368d9dd3e9ea8996c6_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMDYvZnJhZzozMTMxMjI2ODgxNjM0OWVjYmRlZDE0OTU1NjBiYzNmZC90YWJsZTplODgwYTRiMGNiM2Q0NzIyOTQ3ZmY0NDYxZjhkZjdmZC90YWJsZXJhbmdlOmU4ODBhNGIwY2IzZDQ3MjI5NDdmZjQ0NjFmOGRmN2ZkXzQtNy0xLTEtMzAxNDA_f1104de1-5540-49b4-9363-51e98d121d9c"
      unitRef="usd">88352000</us-gaap:FiniteLivedIntangibleAssetsNet>
    <us-gaap:FiniteLivedIntangibleAssetsRemainingAmortizationPeriod1
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMDYvZnJhZzozMTMxMjI2ODgxNjM0OWVjYmRlZDE0OTU1NjBiYzNmZC90YWJsZTplODgwYTRiMGNiM2Q0NzIyOTQ3ZmY0NDYxZjhkZjdmZC90YWJsZXJhbmdlOmU4ODBhNGIwY2IzZDQ3MjI5NDdmZjQ0NjFmOGRmN2ZkXzQtOS0xLTEtMzAxNDA_03772f46-3e59-4a84-8d20-f1c2736d1d02">P6Y4M24D</us-gaap:FiniteLivedIntangibleAssetsRemainingAmortizationPeriod1>
    <us-gaap:FiniteLivedIntangibleAssetsGross
      contextRef="icc5441e4c3574014b14020cc9718dff8_I20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMDYvZnJhZzozMTMxMjI2ODgxNjM0OWVjYmRlZDE0OTU1NjBiYzNmZC90YWJsZTowNWVhN2YwYzJiMjI0YjdkYmU5OTdhOGQ2NjUyNWNhYi90YWJsZXJhbmdlOjA1ZWE3ZjBjMmIyMjRiN2RiZTk5N2E4ZDY2NTI1Y2FiXzItMS0xLTEtMzAxNDA_b18bf2e8-febb-46bd-ba26-f8e6d3064bdb"
      unitRef="usd">61270000</us-gaap:FiniteLivedIntangibleAssetsGross>
    <us-gaap:FiniteLivedIntangibleAssetsAccumulatedAmortization
      contextRef="icc5441e4c3574014b14020cc9718dff8_I20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMDYvZnJhZzozMTMxMjI2ODgxNjM0OWVjYmRlZDE0OTU1NjBiYzNmZC90YWJsZTowNWVhN2YwYzJiMjI0YjdkYmU5OTdhOGQ2NjUyNWNhYi90YWJsZXJhbmdlOjA1ZWE3ZjBjMmIyMjRiN2RiZTk5N2E4ZDY2NTI1Y2FiXzItMy0xLTEtMzAxNDA_583bfb6b-c0e8-4a12-9020-02d71661bb0e"
      unitRef="usd">29866000</us-gaap:FiniteLivedIntangibleAssetsAccumulatedAmortization>
    <spsc:FiniteLivedIntangibleAssetsAccumulatedForeignCurrencyTranslationGainLoss
      contextRef="icc5441e4c3574014b14020cc9718dff8_I20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMDYvZnJhZzozMTMxMjI2ODgxNjM0OWVjYmRlZDE0OTU1NjBiYzNmZC90YWJsZTowNWVhN2YwYzJiMjI0YjdkYmU5OTdhOGQ2NjUyNWNhYi90YWJsZXJhbmdlOjA1ZWE3ZjBjMmIyMjRiN2RiZTk5N2E4ZDY2NTI1Y2FiXzItNS0xLTEtMzAxNDA_9489e9d9-43ba-435f-832b-6c05b64168a1"
      unitRef="usd">-1395000</spsc:FiniteLivedIntangibleAssetsAccumulatedForeignCurrencyTranslationGainLoss>
    <us-gaap:FiniteLivedIntangibleAssetsNet
      contextRef="icc5441e4c3574014b14020cc9718dff8_I20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMDYvZnJhZzozMTMxMjI2ODgxNjM0OWVjYmRlZDE0OTU1NjBiYzNmZC90YWJsZTowNWVhN2YwYzJiMjI0YjdkYmU5OTdhOGQ2NjUyNWNhYi90YWJsZXJhbmdlOjA1ZWE3ZjBjMmIyMjRiN2RiZTk5N2E4ZDY2NTI1Y2FiXzItNy0xLTEtMzAxNDA_8e8ca5fc-417d-4347-91b6-cc21a97d6a9b"
      unitRef="usd">30009000</us-gaap:FiniteLivedIntangibleAssetsNet>
    <us-gaap:FiniteLivedIntangibleAssetsRemainingAmortizationPeriod1
      contextRef="i2e1d71c3cae54755ae18f64906f8dedd_D20210101-20211231"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMDYvZnJhZzozMTMxMjI2ODgxNjM0OWVjYmRlZDE0OTU1NjBiYzNmZC90YWJsZTowNWVhN2YwYzJiMjI0YjdkYmU5OTdhOGQ2NjUyNWNhYi90YWJsZXJhbmdlOjA1ZWE3ZjBjMmIyMjRiN2RiZTk5N2E4ZDY2NTI1Y2FiXzItOS0xLTEtMzAxNDA_c884c39b-de7e-4b95-8a5d-94b99e182614">P6Y4M24D</us-gaap:FiniteLivedIntangibleAssetsRemainingAmortizationPeriod1>
    <us-gaap:FiniteLivedIntangibleAssetsGross
      contextRef="i2187e53e534d4e24b9f09861efa71c24_I20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMDYvZnJhZzozMTMxMjI2ODgxNjM0OWVjYmRlZDE0OTU1NjBiYzNmZC90YWJsZTowNWVhN2YwYzJiMjI0YjdkYmU5OTdhOGQ2NjUyNWNhYi90YWJsZXJhbmdlOjA1ZWE3ZjBjMmIyMjRiN2RiZTk5N2E4ZDY2NTI1Y2FiXzQtMS0xLTEtMzAxNDA_0876294f-8398-4d17-afd6-c2b138186ead"
      unitRef="usd">35316000</us-gaap:FiniteLivedIntangibleAssetsGross>
    <us-gaap:FiniteLivedIntangibleAssetsAccumulatedAmortization
      contextRef="i2187e53e534d4e24b9f09861efa71c24_I20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMDYvZnJhZzozMTMxMjI2ODgxNjM0OWVjYmRlZDE0OTU1NjBiYzNmZC90YWJsZTowNWVhN2YwYzJiMjI0YjdkYmU5OTdhOGQ2NjUyNWNhYi90YWJsZXJhbmdlOjA1ZWE3ZjBjMmIyMjRiN2RiZTk5N2E4ZDY2NTI1Y2FiXzQtMy0xLTEtMzAxNDA_71be3dbd-b472-4ac0-bab7-872c0dd1cd86"
      unitRef="usd">6738000</us-gaap:FiniteLivedIntangibleAssetsAccumulatedAmortization>
    <spsc:FiniteLivedIntangibleAssetsAccumulatedForeignCurrencyTranslationGainLoss
      contextRef="i2187e53e534d4e24b9f09861efa71c24_I20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMDYvZnJhZzozMTMxMjI2ODgxNjM0OWVjYmRlZDE0OTU1NjBiYzNmZC90YWJsZTowNWVhN2YwYzJiMjI0YjdkYmU5OTdhOGQ2NjUyNWNhYi90YWJsZXJhbmdlOjA1ZWE3ZjBjMmIyMjRiN2RiZTk5N2E4ZDY2NTI1Y2FiXzQtNS0xLTEtMzAxNDA_4d7a9afd-8bc2-4b17-8fc3-053871e634a8"
      unitRef="usd">0</spsc:FiniteLivedIntangibleAssetsAccumulatedForeignCurrencyTranslationGainLoss>
    <us-gaap:FiniteLivedIntangibleAssetsNet
      contextRef="i2187e53e534d4e24b9f09861efa71c24_I20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMDYvZnJhZzozMTMxMjI2ODgxNjM0OWVjYmRlZDE0OTU1NjBiYzNmZC90YWJsZTowNWVhN2YwYzJiMjI0YjdkYmU5OTdhOGQ2NjUyNWNhYi90YWJsZXJhbmdlOjA1ZWE3ZjBjMmIyMjRiN2RiZTk5N2E4ZDY2NTI1Y2FiXzQtNy0xLTEtMzAxNDA_79d3ae4c-8dec-44f1-8ca6-9759f1885331"
      unitRef="usd">28578000</us-gaap:FiniteLivedIntangibleAssetsNet>
    <us-gaap:FiniteLivedIntangibleAssetsRemainingAmortizationPeriod1
      contextRef="i66e50f5267924824a1c6a06fdfa2bb11_D20210101-20211231"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMDYvZnJhZzozMTMxMjI2ODgxNjM0OWVjYmRlZDE0OTU1NjBiYzNmZC90YWJsZTowNWVhN2YwYzJiMjI0YjdkYmU5OTdhOGQ2NjUyNWNhYi90YWJsZXJhbmdlOjA1ZWE3ZjBjMmIyMjRiN2RiZTk5N2E4ZDY2NTI1Y2FiXzQtOS0xLTEtMzAxNDA_5cc837af-7409-4010-a625-53e06181cb78">P6Y9M18D</us-gaap:FiniteLivedIntangibleAssetsRemainingAmortizationPeriod1>
    <us-gaap:FiniteLivedIntangibleAssetsGross
      contextRef="i62ba0be1fd094d818a1f7d0d5504d1e2_I20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMDYvZnJhZzozMTMxMjI2ODgxNjM0OWVjYmRlZDE0OTU1NjBiYzNmZC90YWJsZTowNWVhN2YwYzJiMjI0YjdkYmU5OTdhOGQ2NjUyNWNhYi90YWJsZXJhbmdlOjA1ZWE3ZjBjMmIyMjRiN2RiZTk5N2E4ZDY2NTI1Y2FiXzUtMS0xLTEtMzAxNDA_75719901-5a0f-4049-b97a-68e9b1d58faf"
      unitRef="usd">96586000</us-gaap:FiniteLivedIntangibleAssetsGross>
    <us-gaap:FiniteLivedIntangibleAssetsAccumulatedAmortization
      contextRef="i62ba0be1fd094d818a1f7d0d5504d1e2_I20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMDYvZnJhZzozMTMxMjI2ODgxNjM0OWVjYmRlZDE0OTU1NjBiYzNmZC90YWJsZTowNWVhN2YwYzJiMjI0YjdkYmU5OTdhOGQ2NjUyNWNhYi90YWJsZXJhbmdlOjA1ZWE3ZjBjMmIyMjRiN2RiZTk5N2E4ZDY2NTI1Y2FiXzUtMy0xLTEtMzAxNDA_16d95479-2710-474f-a08c-378184a613da"
      unitRef="usd">36604000</us-gaap:FiniteLivedIntangibleAssetsAccumulatedAmortization>
    <spsc:FiniteLivedIntangibleAssetsAccumulatedForeignCurrencyTranslationGainLoss
      contextRef="i62ba0be1fd094d818a1f7d0d5504d1e2_I20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMDYvZnJhZzozMTMxMjI2ODgxNjM0OWVjYmRlZDE0OTU1NjBiYzNmZC90YWJsZTowNWVhN2YwYzJiMjI0YjdkYmU5OTdhOGQ2NjUyNWNhYi90YWJsZXJhbmdlOjA1ZWE3ZjBjMmIyMjRiN2RiZTk5N2E4ZDY2NTI1Y2FiXzUtNS0xLTEtMzAxNDA_2c151a47-584b-4ac2-a7ec-48ff19ad2164"
      unitRef="usd">-1395000</spsc:FiniteLivedIntangibleAssetsAccumulatedForeignCurrencyTranslationGainLoss>
    <us-gaap:FiniteLivedIntangibleAssetsNet
      contextRef="i62ba0be1fd094d818a1f7d0d5504d1e2_I20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMDYvZnJhZzozMTMxMjI2ODgxNjM0OWVjYmRlZDE0OTU1NjBiYzNmZC90YWJsZTowNWVhN2YwYzJiMjI0YjdkYmU5OTdhOGQ2NjUyNWNhYi90YWJsZXJhbmdlOjA1ZWE3ZjBjMmIyMjRiN2RiZTk5N2E4ZDY2NTI1Y2FiXzUtNy0xLTEtMzAxNDA_e4577df4-0c7d-4caf-a781-4137004acac7"
      unitRef="usd">58587000</us-gaap:FiniteLivedIntangibleAssetsNet>
    <us-gaap:FiniteLivedIntangibleAssetsRemainingAmortizationPeriod1
      contextRef="ie07f2822175c48edbb8d5559ceb82e6f_D20210101-20211231"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMDYvZnJhZzozMTMxMjI2ODgxNjM0OWVjYmRlZDE0OTU1NjBiYzNmZC90YWJsZTowNWVhN2YwYzJiMjI0YjdkYmU5OTdhOGQ2NjUyNWNhYi90YWJsZXJhbmdlOjA1ZWE3ZjBjMmIyMjRiN2RiZTk5N2E4ZDY2NTI1Y2FiXzUtOS0xLTEtMzAxNDA_ebfbd06c-5bd7-4d56-aeec-2b6e6f345372">P6Y7M6D</us-gaap:FiniteLivedIntangibleAssetsRemainingAmortizationPeriod1>
    <us-gaap:ScheduleofFiniteLivedIntangibleAssetsFutureAmortizationExpenseTableTextBlock
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMDYvZnJhZzozMTMxMjI2ODgxNjM0OWVjYmRlZDE0OTU1NjBiYzNmZC90ZXh0cmVnaW9uOjMxMzEyMjY4ODE2MzQ5ZWNiZGVkMTQ5NTU2MGJjM2ZkXzI2OQ_22527a1f-c30f-4284-9253-b43214931982">&lt;div style="margin-top:6pt;text-indent:27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;The estimated future annual amortization expense related to intangible assets is as follows:&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-align:center"&gt;&lt;table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"&gt;&lt;tr&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:85.718%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.082%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;(in thousands)&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;2023&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;15,289&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;2024&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;14,098&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;2025&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;13,960&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;2026&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;12,956&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;2027&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;12,493&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Thereafter&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;19,556&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Total future amortization&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;88,352&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;</us-gaap:ScheduleofFiniteLivedIntangibleAssetsFutureAmortizationExpenseTableTextBlock>
    <us-gaap:FiniteLivedIntangibleAssetsAmortizationExpenseNextTwelveMonths
      contextRef="ibbc2d589a09c46368d9dd3e9ea8996c6_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMDYvZnJhZzozMTMxMjI2ODgxNjM0OWVjYmRlZDE0OTU1NjBiYzNmZC90YWJsZTo2ZDMyN2U2ZjI4Yzk0YjJkOGIwOWY1MjI0MmE1YWQ3YS90YWJsZXJhbmdlOjZkMzI3ZTZmMjhjOTRiMmQ4YjA5ZjUyMjQyYTVhZDdhXzEtMS0xLTEtMzAxNDA_5d993992-8dc5-498c-bef3-584d343fc22a"
      unitRef="usd">15289000</us-gaap:FiniteLivedIntangibleAssetsAmortizationExpenseNextTwelveMonths>
    <us-gaap:FiniteLivedIntangibleAssetsAmortizationExpenseYearTwo
      contextRef="ibbc2d589a09c46368d9dd3e9ea8996c6_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMDYvZnJhZzozMTMxMjI2ODgxNjM0OWVjYmRlZDE0OTU1NjBiYzNmZC90YWJsZTo2ZDMyN2U2ZjI4Yzk0YjJkOGIwOWY1MjI0MmE1YWQ3YS90YWJsZXJhbmdlOjZkMzI3ZTZmMjhjOTRiMmQ4YjA5ZjUyMjQyYTVhZDdhXzItMS0xLTEtMzAxNDA_218b5b6a-6f0f-453a-9eef-095cdf5be6f3"
      unitRef="usd">14098000</us-gaap:FiniteLivedIntangibleAssetsAmortizationExpenseYearTwo>
    <us-gaap:FiniteLivedIntangibleAssetsAmortizationExpenseYearThree
      contextRef="ibbc2d589a09c46368d9dd3e9ea8996c6_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMDYvZnJhZzozMTMxMjI2ODgxNjM0OWVjYmRlZDE0OTU1NjBiYzNmZC90YWJsZTo2ZDMyN2U2ZjI4Yzk0YjJkOGIwOWY1MjI0MmE1YWQ3YS90YWJsZXJhbmdlOjZkMzI3ZTZmMjhjOTRiMmQ4YjA5ZjUyMjQyYTVhZDdhXzMtMS0xLTEtMzAxNDA_3e7599df-2bc4-46a3-b57c-1d06f5d9a11f"
      unitRef="usd">13960000</us-gaap:FiniteLivedIntangibleAssetsAmortizationExpenseYearThree>
    <us-gaap:FiniteLivedIntangibleAssetsAmortizationExpenseYearFour
      contextRef="ibbc2d589a09c46368d9dd3e9ea8996c6_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMDYvZnJhZzozMTMxMjI2ODgxNjM0OWVjYmRlZDE0OTU1NjBiYzNmZC90YWJsZTo2ZDMyN2U2ZjI4Yzk0YjJkOGIwOWY1MjI0MmE1YWQ3YS90YWJsZXJhbmdlOjZkMzI3ZTZmMjhjOTRiMmQ4YjA5ZjUyMjQyYTVhZDdhXzQtMS0xLTEtMzAxNDA_973e5f26-ab18-4d74-af2a-b2e91da2db9f"
      unitRef="usd">12956000</us-gaap:FiniteLivedIntangibleAssetsAmortizationExpenseYearFour>
    <us-gaap:FiniteLivedIntangibleAssetsAmortizationExpenseYearFive
      contextRef="ibbc2d589a09c46368d9dd3e9ea8996c6_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMDYvZnJhZzozMTMxMjI2ODgxNjM0OWVjYmRlZDE0OTU1NjBiYzNmZC90YWJsZTo2ZDMyN2U2ZjI4Yzk0YjJkOGIwOWY1MjI0MmE1YWQ3YS90YWJsZXJhbmdlOjZkMzI3ZTZmMjhjOTRiMmQ4YjA5ZjUyMjQyYTVhZDdhXzUtMS0xLTEtMzAxNDA_3b218a03-2c16-44e1-a750-38e16751b9c2"
      unitRef="usd">12493000</us-gaap:FiniteLivedIntangibleAssetsAmortizationExpenseYearFive>
    <us-gaap:FiniteLivedIntangibleAssetsAmortizationExpenseAfterYearFive
      contextRef="ibbc2d589a09c46368d9dd3e9ea8996c6_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMDYvZnJhZzozMTMxMjI2ODgxNjM0OWVjYmRlZDE0OTU1NjBiYzNmZC90YWJsZTo2ZDMyN2U2ZjI4Yzk0YjJkOGIwOWY1MjI0MmE1YWQ3YS90YWJsZXJhbmdlOjZkMzI3ZTZmMjhjOTRiMmQ4YjA5ZjUyMjQyYTVhZDdhXzYtMS0xLTEtMzAxNDA_5d027cd6-4551-4e2d-8bd7-842294579b38"
      unitRef="usd">19556000</us-gaap:FiniteLivedIntangibleAssetsAmortizationExpenseAfterYearFive>
    <us-gaap:FiniteLivedIntangibleAssetsNet
      contextRef="ibbc2d589a09c46368d9dd3e9ea8996c6_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMDYvZnJhZzozMTMxMjI2ODgxNjM0OWVjYmRlZDE0OTU1NjBiYzNmZC90YWJsZTo2ZDMyN2U2ZjI4Yzk0YjJkOGIwOWY1MjI0MmE1YWQ3YS90YWJsZXJhbmdlOjZkMzI3ZTZmMjhjOTRiMmQ4YjA5ZjUyMjQyYTVhZDdhXzctMS0xLTEtMzAxNDA_d3b0a7d0-351a-4352-a305-fcb1aaee55f5"
      unitRef="usd">88352000</us-gaap:FiniteLivedIntangibleAssetsNet>
    <us-gaap:CommitmentsAndContingenciesDisclosureTextBlock
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMTIvZnJhZzo5NDViOTliMmQxNzE0NDY0YTU3MjAwMDYxYmRmZGI2Zi90ZXh0cmVnaW9uOjk0NWI5OWIyZDE3MTQ0NjRhNTcyMDAwNjFiZGZkYjZmXzE1MjI_5976881b-2b9e-4122-9632-e7a0ad9dea18">Commitments and Contingencies&lt;div style="margin-top:6pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-style:italic;font-weight:700;line-height:120%"&gt;Leases&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;We are engaged in a lease agreement for our current headquarters located in Minneapolis, Minnesota where we lease approximately 198,000 square feet under an agreement that expires in 2027. The lease also has two options to extend the term for five years each at a market rate determined in accordance with the lease. We lease other smaller facilities across the U.S. and international locations.&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;The components of lease expense were as follows:&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-align:center"&gt;&lt;table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"&gt;&lt;tr&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:58.142%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.081%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.406%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.081%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.406%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.084%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="15" style="padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;Year Ended December 31,&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;(in thousands)&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;2022&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;2021&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;2020&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Operating lease cost&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;3,087&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;3,089&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;2,719&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Variable lease cost&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;3,576&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;3,660&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;3,578&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;6,663&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;6,749&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;6,297&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;Supplemental cash flow information related to leases was as follows:&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-align:center"&gt;&lt;table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"&gt;&lt;tr&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:71.930%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.081%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.406%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.083%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="9" style="padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;December 31,&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;(in thousands)&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;2022&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;2021&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:middle"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Cash paid for amounts included in the measurement of lease liabilities&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:middle"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Operating cash flows from operating leases&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:left;vertical-align:middle"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 0;text-align:right;vertical-align:middle"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;4,639&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:middle"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:left;vertical-align:middle"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 0;text-align:right;vertical-align:middle"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;3,757&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:middle"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:middle"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Right-of-use assets obtained in exchange for operating lease liabilities&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:middle"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;934&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:middle"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:middle"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;992&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:middle"/&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;Supplemental balance sheet information related to operating leases was as follows: &lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-align:center"&gt;&lt;table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"&gt;&lt;tr&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:71.930%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.081%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.406%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.083%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="3" style="padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;December 31, 2022&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="3" style="padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;December 31, 2021&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Weighted-average remaining lease term&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;border-top:0.75pt solid #000000;padding:2px 7pt 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;3.9 years&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;border-top:0.75pt solid #000000;padding:2px 13pt 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;4.8 years&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Weighted-average discount rate&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;4.0&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;%&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;4.0&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;%&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;At December&#160;31, 2022, our future minimum payments under operating leases were as follows:&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-align:center"&gt;&lt;table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"&gt;&lt;tr&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:85.718%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.082%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;(in thousands)&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;2023&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 0;text-align:right;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;4,889&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:top"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;2024&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;4,485&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:top"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;2025&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;4,369&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:top"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;2026&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;3,764&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:top"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;2027&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;1,265&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:top"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Total future payments&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#ffffff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;18,772&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:top"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Less: imputed interest&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;(1,486)&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:top"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Total operating lease liabilities&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000000;border-top:0.75pt solid #000000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000000;border-top:0.75pt solid #000000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;17,286&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000000;border-top:0.75pt solid #000000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;div style="margin-top:18pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-style:italic;font-weight:700;line-height:120%"&gt;Purchase Commitments&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;We have entered into separate noncancelable agreements with computing infrastructure, customer relationship management, and performance and security data analytics vendors for services through 2025. At December&#160;31, 2022, the total remaining purchase commitments were $4.9 million.&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:18pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-style:italic;font-weight:700;line-height:120%"&gt;Contingencies&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;We may be involved in various claims and legal actions in the normal course of business. We believe that the outcome of any such claim or legal action is not expected to have a material effect on our financial position, results of operations, or cash flows.&lt;/span&gt;&lt;/div&gt;</us-gaap:CommitmentsAndContingenciesDisclosureTextBlock>
    <spsc:LesseeOperatingLeaseAreaOfLeasedSpace
      contextRef="ibbc2d589a09c46368d9dd3e9ea8996c6_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMTIvZnJhZzo5NDViOTliMmQxNzE0NDY0YTU3MjAwMDYxYmRmZGI2Zi90ZXh0cmVnaW9uOjk0NWI5OWIyZDE3MTQ0NjRhNTcyMDAwNjFiZGZkYjZmXzI3NDg3NzkwNzM1NDg_64575a4e-868a-4d56-bc35-f8848e451685"
      unitRef="sqft">198000</spsc:LesseeOperatingLeaseAreaOfLeasedSpace>
    <spsc:LesseeOperatingLeaseNumberOfExtensionOptions
      contextRef="ibbc2d589a09c46368d9dd3e9ea8996c6_I20221231"
      decimals="0"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMTIvZnJhZzo5NDViOTliMmQxNzE0NDY0YTU3MjAwMDYxYmRmZGI2Zi90ZXh0cmVnaW9uOjk0NWI5OWIyZDE3MTQ0NjRhNTcyMDAwNjFiZGZkYjZmXzI3NDg3NzkwNzM1NzM_d78162d4-b1ca-4d4b-8b1c-e3bf40856950"
      unitRef="option">2</spsc:LesseeOperatingLeaseNumberOfExtensionOptions>
    <us-gaap:LesseeOperatingLeaseRenewalTerm
      contextRef="ibbc2d589a09c46368d9dd3e9ea8996c6_I20221231"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMTIvZnJhZzo5NDViOTliMmQxNzE0NDY0YTU3MjAwMDYxYmRmZGI2Zi90ZXh0cmVnaW9uOjk0NWI5OWIyZDE3MTQ0NjRhNTcyMDAwNjFiZGZkYjZmXzI3NDg3NzkwNzM1NTY_d9b4d49c-6ff6-4649-8b64-67d98070ede4">P5Y</us-gaap:LesseeOperatingLeaseRenewalTerm>
    <us-gaap:LeaseCostTableTextBlock
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMTIvZnJhZzo5NDViOTliMmQxNzE0NDY0YTU3MjAwMDYxYmRmZGI2Zi90ZXh0cmVnaW9uOjk0NWI5OWIyZDE3MTQ0NjRhNTcyMDAwNjFiZGZkYjZmXzE1MjQ_42a23c8e-e1a9-46ff-853c-bee539a664b3">&lt;div style="margin-top:6pt;text-indent:27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;The components of lease expense were as follows:&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-align:center"&gt;&lt;table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"&gt;&lt;tr&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:58.142%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.081%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.406%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.081%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.406%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.084%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="15" style="padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;Year Ended December 31,&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;(in thousands)&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;2022&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;2021&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;2020&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Operating lease cost&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;3,087&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;3,089&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;2,719&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Variable lease cost&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;3,576&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;3,660&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;3,578&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;6,663&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;6,749&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;6,297&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;</us-gaap:LeaseCostTableTextBlock>
    <us-gaap:OperatingLeaseCost
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMTIvZnJhZzo5NDViOTliMmQxNzE0NDY0YTU3MjAwMDYxYmRmZGI2Zi90YWJsZTowMDc3NmU3NDY4MDU0YjMxOTExOGNjODZkZjg4YTJmMi90YWJsZXJhbmdlOjAwNzc2ZTc0NjgwNTRiMzE5MTE4Y2M4NmRmODhhMmYyXzItMS0xLTEtMzAxNDA_0cd7206b-491e-49ee-870b-28238c080211"
      unitRef="usd">3087000</us-gaap:OperatingLeaseCost>
    <us-gaap:OperatingLeaseCost
      contextRef="ie07f2822175c48edbb8d5559ceb82e6f_D20210101-20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMTIvZnJhZzo5NDViOTliMmQxNzE0NDY0YTU3MjAwMDYxYmRmZGI2Zi90YWJsZTowMDc3NmU3NDY4MDU0YjMxOTExOGNjODZkZjg4YTJmMi90YWJsZXJhbmdlOjAwNzc2ZTc0NjgwNTRiMzE5MTE4Y2M4NmRmODhhMmYyXzItMy0xLTEtMzAxNDA_dfd2cd22-6072-418e-93f6-e5e61da04a7b"
      unitRef="usd">3089000</us-gaap:OperatingLeaseCost>
    <us-gaap:OperatingLeaseCost
      contextRef="i4751184d7e5948509cd8893fd49fb821_D20200101-20201231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMTIvZnJhZzo5NDViOTliMmQxNzE0NDY0YTU3MjAwMDYxYmRmZGI2Zi90YWJsZTowMDc3NmU3NDY4MDU0YjMxOTExOGNjODZkZjg4YTJmMi90YWJsZXJhbmdlOjAwNzc2ZTc0NjgwNTRiMzE5MTE4Y2M4NmRmODhhMmYyXzItNS0xLTEtMzAxNDA_6fdd1a95-3083-481a-9d1d-094050814a42"
      unitRef="usd">2719000</us-gaap:OperatingLeaseCost>
    <us-gaap:VariableLeaseCost
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMTIvZnJhZzo5NDViOTliMmQxNzE0NDY0YTU3MjAwMDYxYmRmZGI2Zi90YWJsZTowMDc3NmU3NDY4MDU0YjMxOTExOGNjODZkZjg4YTJmMi90YWJsZXJhbmdlOjAwNzc2ZTc0NjgwNTRiMzE5MTE4Y2M4NmRmODhhMmYyXzMtMS0xLTEtMzAxNDA_6cd44c5b-6e60-481c-9a42-2f546808acc4"
      unitRef="usd">3576000</us-gaap:VariableLeaseCost>
    <us-gaap:VariableLeaseCost
      contextRef="ie07f2822175c48edbb8d5559ceb82e6f_D20210101-20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMTIvZnJhZzo5NDViOTliMmQxNzE0NDY0YTU3MjAwMDYxYmRmZGI2Zi90YWJsZTowMDc3NmU3NDY4MDU0YjMxOTExOGNjODZkZjg4YTJmMi90YWJsZXJhbmdlOjAwNzc2ZTc0NjgwNTRiMzE5MTE4Y2M4NmRmODhhMmYyXzMtMy0xLTEtMzAxNDA_c3fb0fc9-b7ed-4262-af41-d329ee0ddc05"
      unitRef="usd">3660000</us-gaap:VariableLeaseCost>
    <us-gaap:VariableLeaseCost
      contextRef="i4751184d7e5948509cd8893fd49fb821_D20200101-20201231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMTIvZnJhZzo5NDViOTliMmQxNzE0NDY0YTU3MjAwMDYxYmRmZGI2Zi90YWJsZTowMDc3NmU3NDY4MDU0YjMxOTExOGNjODZkZjg4YTJmMi90YWJsZXJhbmdlOjAwNzc2ZTc0NjgwNTRiMzE5MTE4Y2M4NmRmODhhMmYyXzMtNS0xLTEtMzAxNDA_92f52ed9-92ff-4fa5-9979-0405e6113be3"
      unitRef="usd">3578000</us-gaap:VariableLeaseCost>
    <us-gaap:LeaseCost
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMTIvZnJhZzo5NDViOTliMmQxNzE0NDY0YTU3MjAwMDYxYmRmZGI2Zi90YWJsZTowMDc3NmU3NDY4MDU0YjMxOTExOGNjODZkZjg4YTJmMi90YWJsZXJhbmdlOjAwNzc2ZTc0NjgwNTRiMzE5MTE4Y2M4NmRmODhhMmYyXzQtMS0xLTEtMzAxNDA_89de4250-6e8e-4eb3-9528-c7a8d0771e54"
      unitRef="usd">6663000</us-gaap:LeaseCost>
    <us-gaap:LeaseCost
      contextRef="ie07f2822175c48edbb8d5559ceb82e6f_D20210101-20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMTIvZnJhZzo5NDViOTliMmQxNzE0NDY0YTU3MjAwMDYxYmRmZGI2Zi90YWJsZTowMDc3NmU3NDY4MDU0YjMxOTExOGNjODZkZjg4YTJmMi90YWJsZXJhbmdlOjAwNzc2ZTc0NjgwNTRiMzE5MTE4Y2M4NmRmODhhMmYyXzQtMy0xLTEtMzAxNDA_50ba0139-dc24-40da-bbd5-6e8d8bd5ec2c"
      unitRef="usd">6749000</us-gaap:LeaseCost>
    <us-gaap:LeaseCost
      contextRef="i4751184d7e5948509cd8893fd49fb821_D20200101-20201231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMTIvZnJhZzo5NDViOTliMmQxNzE0NDY0YTU3MjAwMDYxYmRmZGI2Zi90YWJsZTowMDc3NmU3NDY4MDU0YjMxOTExOGNjODZkZjg4YTJmMi90YWJsZXJhbmdlOjAwNzc2ZTc0NjgwNTRiMzE5MTE4Y2M4NmRmODhhMmYyXzQtNS0xLTEtMzAxNDA_6ee392a7-6413-4cb3-8d7b-c1f857d5db0c"
      unitRef="usd">6297000</us-gaap:LeaseCost>
    <spsc:ScheduleOfSupplementalCashFlowInformationRelatedToLeasesTableTextBlock
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMTIvZnJhZzo5NDViOTliMmQxNzE0NDY0YTU3MjAwMDYxYmRmZGI2Zi90ZXh0cmVnaW9uOjk0NWI5OWIyZDE3MTQ0NjRhNTcyMDAwNjFiZGZkYjZmXzE1MjU_cada44af-014f-448b-9754-ecc7c840782f">&lt;div style="margin-top:6pt;text-indent:27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;Supplemental cash flow information related to leases was as follows:&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-align:center"&gt;&lt;table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"&gt;&lt;tr&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:71.930%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.081%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.406%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.083%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="9" style="padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;December 31,&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;(in thousands)&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;2022&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;2021&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:middle"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Cash paid for amounts included in the measurement of lease liabilities&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:middle"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Operating cash flows from operating leases&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:left;vertical-align:middle"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 0;text-align:right;vertical-align:middle"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;4,639&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:middle"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:left;vertical-align:middle"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 0;text-align:right;vertical-align:middle"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;3,757&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:middle"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:middle"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Right-of-use assets obtained in exchange for operating lease liabilities&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:middle"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;934&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:middle"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:middle"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;992&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:middle"/&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;</spsc:ScheduleOfSupplementalCashFlowInformationRelatedToLeasesTableTextBlock>
    <us-gaap:OperatingLeasePayments
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMTIvZnJhZzo5NDViOTliMmQxNzE0NDY0YTU3MjAwMDYxYmRmZGI2Zi90YWJsZToxNGY4Nzk1OWYxMDQ0ZTA1YTA3ZGJhYmM2MTQ4MDIwZS90YWJsZXJhbmdlOjE0Zjg3OTU5ZjEwNDRlMDVhMDdkYmFiYzYxNDgwMjBlXzMtMS0xLTEtMzAxNDA_8a6c9fb8-7686-45dc-9914-0549fb76c85b"
      unitRef="usd">4639000</us-gaap:OperatingLeasePayments>
    <us-gaap:OperatingLeasePayments
      contextRef="ie07f2822175c48edbb8d5559ceb82e6f_D20210101-20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMTIvZnJhZzo5NDViOTliMmQxNzE0NDY0YTU3MjAwMDYxYmRmZGI2Zi90YWJsZToxNGY4Nzk1OWYxMDQ0ZTA1YTA3ZGJhYmM2MTQ4MDIwZS90YWJsZXJhbmdlOjE0Zjg3OTU5ZjEwNDRlMDVhMDdkYmFiYzYxNDgwMjBlXzMtMy0xLTEtMzAxNDA_31984b1a-7799-4702-b1aa-326db28f3649"
      unitRef="usd">3757000</us-gaap:OperatingLeasePayments>
    <us-gaap:RightOfUseAssetObtainedInExchangeForOperatingLeaseLiability
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMTIvZnJhZzo5NDViOTliMmQxNzE0NDY0YTU3MjAwMDYxYmRmZGI2Zi90YWJsZToxNGY4Nzk1OWYxMDQ0ZTA1YTA3ZGJhYmM2MTQ4MDIwZS90YWJsZXJhbmdlOjE0Zjg3OTU5ZjEwNDRlMDVhMDdkYmFiYzYxNDgwMjBlXzQtMS0xLTEtMzAxNDA_e8089d70-55b1-4fa0-91c0-f71bdfae9d03"
      unitRef="usd">934000</us-gaap:RightOfUseAssetObtainedInExchangeForOperatingLeaseLiability>
    <us-gaap:RightOfUseAssetObtainedInExchangeForOperatingLeaseLiability
      contextRef="ie07f2822175c48edbb8d5559ceb82e6f_D20210101-20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMTIvZnJhZzo5NDViOTliMmQxNzE0NDY0YTU3MjAwMDYxYmRmZGI2Zi90YWJsZToxNGY4Nzk1OWYxMDQ0ZTA1YTA3ZGJhYmM2MTQ4MDIwZS90YWJsZXJhbmdlOjE0Zjg3OTU5ZjEwNDRlMDVhMDdkYmFiYzYxNDgwMjBlXzQtMy0xLTEtMzAxNDA_c77b40a7-0120-4718-bd5a-4eff1eb32562"
      unitRef="usd">992000</us-gaap:RightOfUseAssetObtainedInExchangeForOperatingLeaseLiability>
    <spsc:ScheduleOfSupplementalBalanceSheetInformationRelatedToLeasesTableTextBlock
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMTIvZnJhZzo5NDViOTliMmQxNzE0NDY0YTU3MjAwMDYxYmRmZGI2Zi90ZXh0cmVnaW9uOjk0NWI5OWIyZDE3MTQ0NjRhNTcyMDAwNjFiZGZkYjZmXzE1MjY_141194f9-b87f-46b1-bae9-2341d6a56f51">&lt;div style="margin-top:6pt;text-indent:27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;Supplemental balance sheet information related to operating leases was as follows: &lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-align:center"&gt;&lt;table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"&gt;&lt;tr&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:71.930%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.081%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.406%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.083%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="3" style="padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;December 31, 2022&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="3" style="padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;December 31, 2021&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Weighted-average remaining lease term&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;border-top:0.75pt solid #000000;padding:2px 7pt 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;3.9 years&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;border-top:0.75pt solid #000000;padding:2px 13pt 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;4.8 years&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Weighted-average discount rate&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;4.0&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;%&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;4.0&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;%&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;</spsc:ScheduleOfSupplementalBalanceSheetInformationRelatedToLeasesTableTextBlock>
    <us-gaap:OperatingLeaseWeightedAverageRemainingLeaseTerm1
      contextRef="ibbc2d589a09c46368d9dd3e9ea8996c6_I20221231"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMTIvZnJhZzo5NDViOTliMmQxNzE0NDY0YTU3MjAwMDYxYmRmZGI2Zi90YWJsZTo3MjUxYmExZWY0YzA0YjhlODRkNTYwYmNiOGRlZDQ2Ny90YWJsZXJhbmdlOjcyNTFiYTFlZjRjMDRiOGU4NGQ1NjBiY2I4ZGVkNDY3XzEtMS0xLTEtMzAxNDA_24fa6fa7-bfdd-4cdf-afcb-d122d80ee3bf">P3Y10M24D</us-gaap:OperatingLeaseWeightedAverageRemainingLeaseTerm1>
    <us-gaap:OperatingLeaseWeightedAverageRemainingLeaseTerm1
      contextRef="i62ba0be1fd094d818a1f7d0d5504d1e2_I20211231"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMTIvZnJhZzo5NDViOTliMmQxNzE0NDY0YTU3MjAwMDYxYmRmZGI2Zi90YWJsZTo3MjUxYmExZWY0YzA0YjhlODRkNTYwYmNiOGRlZDQ2Ny90YWJsZXJhbmdlOjcyNTFiYTFlZjRjMDRiOGU4NGQ1NjBiY2I4ZGVkNDY3XzEtMy0xLTEtMzAxNDA_726e5320-d8e5-4180-9ffb-d1193876e163">P4Y9M18D</us-gaap:OperatingLeaseWeightedAverageRemainingLeaseTerm1>
    <us-gaap:OperatingLeaseWeightedAverageDiscountRatePercent
      contextRef="ibbc2d589a09c46368d9dd3e9ea8996c6_I20221231"
      decimals="3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMTIvZnJhZzo5NDViOTliMmQxNzE0NDY0YTU3MjAwMDYxYmRmZGI2Zi90YWJsZTo3MjUxYmExZWY0YzA0YjhlODRkNTYwYmNiOGRlZDQ2Ny90YWJsZXJhbmdlOjcyNTFiYTFlZjRjMDRiOGU4NGQ1NjBiY2I4ZGVkNDY3XzItMS0xLTEtMzAxNDA_c5fe1771-24bb-491b-9016-6df729825322"
      unitRef="number">0.040</us-gaap:OperatingLeaseWeightedAverageDiscountRatePercent>
    <us-gaap:OperatingLeaseWeightedAverageDiscountRatePercent
      contextRef="i62ba0be1fd094d818a1f7d0d5504d1e2_I20211231"
      decimals="3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMTIvZnJhZzo5NDViOTliMmQxNzE0NDY0YTU3MjAwMDYxYmRmZGI2Zi90YWJsZTo3MjUxYmExZWY0YzA0YjhlODRkNTYwYmNiOGRlZDQ2Ny90YWJsZXJhbmdlOjcyNTFiYTFlZjRjMDRiOGU4NGQ1NjBiY2I4ZGVkNDY3XzItMy0xLTEtMzAxNDA_6b4de630-121e-4d28-8df2-8addeffbddd5"
      unitRef="number">0.040</us-gaap:OperatingLeaseWeightedAverageDiscountRatePercent>
    <us-gaap:LesseeOperatingLeaseLiabilityMaturityTableTextBlock
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMTIvZnJhZzo5NDViOTliMmQxNzE0NDY0YTU3MjAwMDYxYmRmZGI2Zi90ZXh0cmVnaW9uOjk0NWI5OWIyZDE3MTQ0NjRhNTcyMDAwNjFiZGZkYjZmXzE1Mjc_cecccf89-c37d-4793-9415-5f671649ab06">&lt;div style="margin-top:6pt;text-indent:27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;At December&#160;31, 2022, our future minimum payments under operating leases were as follows:&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-align:center"&gt;&lt;table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"&gt;&lt;tr&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:85.718%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.082%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;(in thousands)&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;2023&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 0;text-align:right;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;4,889&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:top"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;2024&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;4,485&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:top"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;2025&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;4,369&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:top"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;2026&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;3,764&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:top"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;2027&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;1,265&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:top"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Total future payments&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#ffffff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;18,772&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:top"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Less: imputed interest&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;(1,486)&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:top"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Total operating lease liabilities&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000000;border-top:0.75pt solid #000000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000000;border-top:0.75pt solid #000000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;17,286&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000000;border-top:0.75pt solid #000000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;</us-gaap:LesseeOperatingLeaseLiabilityMaturityTableTextBlock>
    <us-gaap:LesseeOperatingLeaseLiabilityPaymentsDueNextTwelveMonths
      contextRef="ibbc2d589a09c46368d9dd3e9ea8996c6_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMTIvZnJhZzo5NDViOTliMmQxNzE0NDY0YTU3MjAwMDYxYmRmZGI2Zi90YWJsZToxNTViZGFkZmMzZmI0N2FhYTY0YWUxM2YwMmQ0YzE3NC90YWJsZXJhbmdlOjE1NWJkYWRmYzNmYjQ3YWFhNjRhZTEzZjAyZDRjMTc0XzEtMS0xLTEtMzAxNDA_668b7195-bdbf-41dd-ae58-760190f27fdc"
      unitRef="usd">4889000</us-gaap:LesseeOperatingLeaseLiabilityPaymentsDueNextTwelveMonths>
    <us-gaap:LesseeOperatingLeaseLiabilityPaymentsDueYearTwo
      contextRef="ibbc2d589a09c46368d9dd3e9ea8996c6_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMTIvZnJhZzo5NDViOTliMmQxNzE0NDY0YTU3MjAwMDYxYmRmZGI2Zi90YWJsZToxNTViZGFkZmMzZmI0N2FhYTY0YWUxM2YwMmQ0YzE3NC90YWJsZXJhbmdlOjE1NWJkYWRmYzNmYjQ3YWFhNjRhZTEzZjAyZDRjMTc0XzItMS0xLTEtMzAxNDA_f79a99a6-8325-4964-a39d-c408c9e7e518"
      unitRef="usd">4485000</us-gaap:LesseeOperatingLeaseLiabilityPaymentsDueYearTwo>
    <us-gaap:LesseeOperatingLeaseLiabilityPaymentsDueYearThree
      contextRef="ibbc2d589a09c46368d9dd3e9ea8996c6_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMTIvZnJhZzo5NDViOTliMmQxNzE0NDY0YTU3MjAwMDYxYmRmZGI2Zi90YWJsZToxNTViZGFkZmMzZmI0N2FhYTY0YWUxM2YwMmQ0YzE3NC90YWJsZXJhbmdlOjE1NWJkYWRmYzNmYjQ3YWFhNjRhZTEzZjAyZDRjMTc0XzMtMS0xLTEtMzAxNDA_83d78650-e27b-48ea-9315-a36d4211addb"
      unitRef="usd">4369000</us-gaap:LesseeOperatingLeaseLiabilityPaymentsDueYearThree>
    <us-gaap:LesseeOperatingLeaseLiabilityPaymentsDueYearFour
      contextRef="ibbc2d589a09c46368d9dd3e9ea8996c6_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMTIvZnJhZzo5NDViOTliMmQxNzE0NDY0YTU3MjAwMDYxYmRmZGI2Zi90YWJsZToxNTViZGFkZmMzZmI0N2FhYTY0YWUxM2YwMmQ0YzE3NC90YWJsZXJhbmdlOjE1NWJkYWRmYzNmYjQ3YWFhNjRhZTEzZjAyZDRjMTc0XzQtMS0xLTEtMzAxNDA_bd327f15-c1aa-4dfb-92cb-2c5db577eee7"
      unitRef="usd">3764000</us-gaap:LesseeOperatingLeaseLiabilityPaymentsDueYearFour>
    <us-gaap:LesseeOperatingLeaseLiabilityPaymentsDueYearFive
      contextRef="ibbc2d589a09c46368d9dd3e9ea8996c6_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMTIvZnJhZzo5NDViOTliMmQxNzE0NDY0YTU3MjAwMDYxYmRmZGI2Zi90YWJsZToxNTViZGFkZmMzZmI0N2FhYTY0YWUxM2YwMmQ0YzE3NC90YWJsZXJhbmdlOjE1NWJkYWRmYzNmYjQ3YWFhNjRhZTEzZjAyZDRjMTc0XzUtMS0xLTEtMzAxNDA_bb61c858-969f-4768-8bf9-8385d87e8e2a"
      unitRef="usd">1265000</us-gaap:LesseeOperatingLeaseLiabilityPaymentsDueYearFive>
    <us-gaap:LesseeOperatingLeaseLiabilityPaymentsDue
      contextRef="ibbc2d589a09c46368d9dd3e9ea8996c6_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMTIvZnJhZzo5NDViOTliMmQxNzE0NDY0YTU3MjAwMDYxYmRmZGI2Zi90YWJsZToxNTViZGFkZmMzZmI0N2FhYTY0YWUxM2YwMmQ0YzE3NC90YWJsZXJhbmdlOjE1NWJkYWRmYzNmYjQ3YWFhNjRhZTEzZjAyZDRjMTc0XzctMS0xLTEtMzAxNDA_de1fe11c-9ea4-4602-b6bf-774baf1e3ee2"
      unitRef="usd">18772000</us-gaap:LesseeOperatingLeaseLiabilityPaymentsDue>
    <us-gaap:LesseeOperatingLeaseLiabilityUndiscountedExcessAmount
      contextRef="ibbc2d589a09c46368d9dd3e9ea8996c6_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMTIvZnJhZzo5NDViOTliMmQxNzE0NDY0YTU3MjAwMDYxYmRmZGI2Zi90YWJsZToxNTViZGFkZmMzZmI0N2FhYTY0YWUxM2YwMmQ0YzE3NC90YWJsZXJhbmdlOjE1NWJkYWRmYzNmYjQ3YWFhNjRhZTEzZjAyZDRjMTc0XzgtMS0xLTEtMzAxNDA_14aac31c-a449-48ff-84e1-d1aee26a7971"
      unitRef="usd">1486000</us-gaap:LesseeOperatingLeaseLiabilityUndiscountedExcessAmount>
    <us-gaap:OperatingLeaseLiability
      contextRef="ibbc2d589a09c46368d9dd3e9ea8996c6_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMTIvZnJhZzo5NDViOTliMmQxNzE0NDY0YTU3MjAwMDYxYmRmZGI2Zi90YWJsZToxNTViZGFkZmMzZmI0N2FhYTY0YWUxM2YwMmQ0YzE3NC90YWJsZXJhbmdlOjE1NWJkYWRmYzNmYjQ3YWFhNjRhZTEzZjAyZDRjMTc0XzktMS0xLTEtMzAxNDA_20c16a63-8461-465d-b010-869c85fde8d3"
      unitRef="usd">17286000</us-gaap:OperatingLeaseLiability>
    <us-gaap:PurchaseCommitmentRemainingMinimumAmountCommitted
      contextRef="ibbc2d589a09c46368d9dd3e9ea8996c6_I20221231"
      decimals="-5"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMTIvZnJhZzo5NDViOTliMmQxNzE0NDY0YTU3MjAwMDYxYmRmZGI2Zi90ZXh0cmVnaW9uOjk0NWI5OWIyZDE3MTQ0NjRhNTcyMDAwNjFiZGZkYjZmXzEwOTk1MTE2MzA0MjU_6067a2a8-714f-4129-b113-1e963fe0236a"
      unitRef="usd">4900000</us-gaap:PurchaseCommitmentRemainingMinimumAmountCommitted>
    <us-gaap:StockholdersEquityNoteDisclosureTextBlock
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMTUvZnJhZzplNDMyZDBmZTczZWI0YzgwODIzNGZjYTNiYWQxYzA4Ny90ZXh0cmVnaW9uOmU0MzJkMGZlNzNlYjRjODA4MjM0ZmNhM2JhZDFjMDg3XzI4Mg_f4b934e9-fdf4-4465-a5cc-4f346310fbf5">Stockholders&#x2019; Equity&lt;div style="margin-top:6pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-style:italic;font-weight:700;line-height:120%"&gt;Share Repurchase Program&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;Our board of directors has authorized multiple non-concurrent programs to repurchase our common stock. Details of the programs and activity thereunder through December&#160;31, 2022 were as follows:&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-align:center"&gt;&lt;table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:98.787%"&gt;&lt;tr&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:17.611%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:13.930%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:13.623%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.413%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:11.169%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.413%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:11.169%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.413%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:11.169%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.413%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:11.177%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;(in thousands)&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;Effective Date&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;Expiration Date&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="3" style="padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;Share Value Authorized for Repurchase&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="3" style="padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;Share Value Repurchased&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="3" style="padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;Unused &amp;amp; Expired Share Repurchase Value&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="3" style="padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;Share Value Available for Future Repurchase&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;2019 Program&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;November 2019&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;November 2021&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;50,000&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;29,611&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;20,389&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;N/A&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;2021 Program&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;November 2021&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;August 2022&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;50,000&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;49,992&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;8&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;N/A&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;2022 Program&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;August 2022&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;July 2024&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;50,000&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;2,992&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;N/A&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;47,008&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;The share repurchase activity by period was as follows:&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-align:center"&gt;&lt;table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"&gt;&lt;tr&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:58.142%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.081%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.406%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.081%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.406%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.084%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="15" style="padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;Year Ended December 31,&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;(in thousands, except shares and per share amounts)&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;2022&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;2021&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;2020&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Number of shares repurchased&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;361,745&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;176,103&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;371,902&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:middle"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Shares repurchased cost&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;43,215&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;20,430&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;18,950&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:middle"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Average price per repurchased share&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;119.46&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;116.01&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;50.95&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;</us-gaap:StockholdersEquityNoteDisclosureTextBlock>
    <us-gaap:ScheduleOfTreasuryStockByClassTextBlock
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMTUvZnJhZzplNDMyZDBmZTczZWI0YzgwODIzNGZjYTNiYWQxYzA4Ny90ZXh0cmVnaW9uOmU0MzJkMGZlNzNlYjRjODA4MjM0ZmNhM2JhZDFjMDg3XzI4MA_006131c9-36f5-41a7-b299-1787777ba960">&lt;div style="margin-top:6pt;text-indent:27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;Our board of directors has authorized multiple non-concurrent programs to repurchase our common stock. Details of the programs and activity thereunder through December&#160;31, 2022 were as follows:&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-align:center"&gt;&lt;table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:98.787%"&gt;&lt;tr&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:17.611%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:13.930%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:13.623%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.413%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:11.169%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.413%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:11.169%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.413%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:11.169%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.413%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:11.177%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;(in thousands)&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;Effective Date&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;Expiration Date&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="3" style="padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;Share Value Authorized for Repurchase&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="3" style="padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;Share Value Repurchased&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="3" style="padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;Unused &amp;amp; Expired Share Repurchase Value&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="3" style="padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;Share Value Available for Future Repurchase&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;2019 Program&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;November 2019&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;November 2021&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;50,000&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;29,611&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;20,389&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;N/A&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;2021 Program&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;November 2021&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;August 2022&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;50,000&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;49,992&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;8&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;N/A&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;2022 Program&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;August 2022&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;July 2024&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;50,000&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;2,992&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;N/A&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;47,008&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;The share repurchase activity by period was as follows:&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-align:center"&gt;&lt;table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"&gt;&lt;tr&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:58.142%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.081%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.406%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.081%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.406%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.084%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="15" style="padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;Year Ended December 31,&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;(in thousands, except shares and per share amounts)&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;2022&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;2021&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;2020&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Number of shares repurchased&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;361,745&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;176,103&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;371,902&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:middle"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Shares repurchased cost&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;43,215&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;20,430&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;18,950&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:middle"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Average price per repurchased share&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;119.46&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;116.01&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;50.95&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;</us-gaap:ScheduleOfTreasuryStockByClassTextBlock>
    <us-gaap:StockRepurchaseProgramAuthorizedAmount1
      contextRef="i265d8aadcae84460a7b07108166cb766_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMTUvZnJhZzplNDMyZDBmZTczZWI0YzgwODIzNGZjYTNiYWQxYzA4Ny90YWJsZTo4MGNiOWI3Y2I5YTk0OGRmYjYyZDRiYTA1NmRmNzQ1YS90YWJsZXJhbmdlOjgwY2I5YjdjYjlhOTQ4ZGZiNjJkNGJhMDU2ZGY3NDVhXzEtNC0xLTEtMzAxNDA_b4b69e9a-ccd9-4e0e-9d3d-7a4d5b8e0edf"
      unitRef="usd">50000000</us-gaap:StockRepurchaseProgramAuthorizedAmount1>
    <us-gaap:TreasuryStockValueAcquiredCostMethod
      contextRef="iec31b088c12b47cd8e01b344b46161a1_D20220101-20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMTUvZnJhZzplNDMyZDBmZTczZWI0YzgwODIzNGZjYTNiYWQxYzA4Ny90YWJsZTo4MGNiOWI3Y2I5YTk0OGRmYjYyZDRiYTA1NmRmNzQ1YS90YWJsZXJhbmdlOjgwY2I5YjdjYjlhOTQ4ZGZiNjJkNGJhMDU2ZGY3NDVhXzEtNi0xLTEtMzAxNDA_99403562-d96f-4667-86f8-e4b0500a61fa"
      unitRef="usd">29611000</us-gaap:TreasuryStockValueAcquiredCostMethod>
    <spsc:StockRepurchaseProgramUnusedAndExpiredShareRepurchaseAmount
      contextRef="i265d8aadcae84460a7b07108166cb766_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMTUvZnJhZzplNDMyZDBmZTczZWI0YzgwODIzNGZjYTNiYWQxYzA4Ny90YWJsZTo4MGNiOWI3Y2I5YTk0OGRmYjYyZDRiYTA1NmRmNzQ1YS90YWJsZXJhbmdlOjgwY2I5YjdjYjlhOTQ4ZGZiNjJkNGJhMDU2ZGY3NDVhXzEtOC0xLTEtMzAxNDA_f8461599-6e8d-415a-9f02-dffb8319186d"
      unitRef="usd">20389000</spsc:StockRepurchaseProgramUnusedAndExpiredShareRepurchaseAmount>
    <us-gaap:StockRepurchaseProgramAuthorizedAmount1
      contextRef="iedafa139758e40efb5f271b1b60d62f9_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMTUvZnJhZzplNDMyZDBmZTczZWI0YzgwODIzNGZjYTNiYWQxYzA4Ny90YWJsZTo4MGNiOWI3Y2I5YTk0OGRmYjYyZDRiYTA1NmRmNzQ1YS90YWJsZXJhbmdlOjgwY2I5YjdjYjlhOTQ4ZGZiNjJkNGJhMDU2ZGY3NDVhXzItNC0xLTEtMzAxNDA_ae23cfbc-8a1a-4262-976f-4d91a3c32d4c"
      unitRef="usd">50000000</us-gaap:StockRepurchaseProgramAuthorizedAmount1>
    <us-gaap:TreasuryStockValueAcquiredCostMethod
      contextRef="ife231283bec94f44a1d2d2e9678dc964_D20220101-20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMTUvZnJhZzplNDMyZDBmZTczZWI0YzgwODIzNGZjYTNiYWQxYzA4Ny90YWJsZTo4MGNiOWI3Y2I5YTk0OGRmYjYyZDRiYTA1NmRmNzQ1YS90YWJsZXJhbmdlOjgwY2I5YjdjYjlhOTQ4ZGZiNjJkNGJhMDU2ZGY3NDVhXzItNi0xLTEtMzAxNDA_4b1774ed-3538-4ad3-a3ec-7d3bce70db54"
      unitRef="usd">49992000</us-gaap:TreasuryStockValueAcquiredCostMethod>
    <spsc:StockRepurchaseProgramUnusedAndExpiredShareRepurchaseAmount
      contextRef="iedafa139758e40efb5f271b1b60d62f9_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMTUvZnJhZzplNDMyZDBmZTczZWI0YzgwODIzNGZjYTNiYWQxYzA4Ny90YWJsZTo4MGNiOWI3Y2I5YTk0OGRmYjYyZDRiYTA1NmRmNzQ1YS90YWJsZXJhbmdlOjgwY2I5YjdjYjlhOTQ4ZGZiNjJkNGJhMDU2ZGY3NDVhXzItOC0xLTEtMzAxNDA_2767690e-197a-49fe-aea8-c8692e91bc37"
      unitRef="usd">8000</spsc:StockRepurchaseProgramUnusedAndExpiredShareRepurchaseAmount>
    <us-gaap:StockRepurchaseProgramAuthorizedAmount1
      contextRef="i9add5ce9a45d400c9dbf0e37a45fb8b8_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMTUvZnJhZzplNDMyZDBmZTczZWI0YzgwODIzNGZjYTNiYWQxYzA4Ny90YWJsZTo4MGNiOWI3Y2I5YTk0OGRmYjYyZDRiYTA1NmRmNzQ1YS90YWJsZXJhbmdlOjgwY2I5YjdjYjlhOTQ4ZGZiNjJkNGJhMDU2ZGY3NDVhXzMtNC0xLTEtMzAxNDA_b017f30c-105b-43cb-999b-0db903ce4d95"
      unitRef="usd">50000000</us-gaap:StockRepurchaseProgramAuthorizedAmount1>
    <us-gaap:TreasuryStockValueAcquiredCostMethod
      contextRef="i4ada863318db4a4bb76fafad54af1c82_D20220101-20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMTUvZnJhZzplNDMyZDBmZTczZWI0YzgwODIzNGZjYTNiYWQxYzA4Ny90YWJsZTo4MGNiOWI3Y2I5YTk0OGRmYjYyZDRiYTA1NmRmNzQ1YS90YWJsZXJhbmdlOjgwY2I5YjdjYjlhOTQ4ZGZiNjJkNGJhMDU2ZGY3NDVhXzMtNi0xLTEtMzAxNDA_9108242a-8a73-4020-997a-b362473fe26e"
      unitRef="usd">2992000</us-gaap:TreasuryStockValueAcquiredCostMethod>
    <us-gaap:StockRepurchaseProgramRemainingAuthorizedRepurchaseAmount1
      contextRef="i9add5ce9a45d400c9dbf0e37a45fb8b8_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMTUvZnJhZzplNDMyZDBmZTczZWI0YzgwODIzNGZjYTNiYWQxYzA4Ny90YWJsZTo4MGNiOWI3Y2I5YTk0OGRmYjYyZDRiYTA1NmRmNzQ1YS90YWJsZXJhbmdlOjgwY2I5YjdjYjlhOTQ4ZGZiNjJkNGJhMDU2ZGY3NDVhXzMtMTAtMS0xLTMwMTQw_6e89db3e-8ae1-4531-8eba-a657cde44a99"
      unitRef="usd">47008000</us-gaap:StockRepurchaseProgramRemainingAuthorizedRepurchaseAmount1>
    <us-gaap:TreasuryStockSharesAcquired
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      decimals="INF"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMTUvZnJhZzplNDMyZDBmZTczZWI0YzgwODIzNGZjYTNiYWQxYzA4Ny90YWJsZTpiMTZjZTU0NDc5NGU0MTAwYTI3ZmQ2ZDkxMGYzYTcxMC90YWJsZXJhbmdlOmIxNmNlNTQ0Nzk0ZTQxMDBhMjdmZDZkOTEwZjNhNzEwXzItMS0xLTEtMzAxNDA_0c3b3d68-2533-4b6c-b43e-6c1e648d49ac"
      unitRef="shares">361745</us-gaap:TreasuryStockSharesAcquired>
    <us-gaap:TreasuryStockSharesAcquired
      contextRef="ie07f2822175c48edbb8d5559ceb82e6f_D20210101-20211231"
      decimals="INF"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMTUvZnJhZzplNDMyZDBmZTczZWI0YzgwODIzNGZjYTNiYWQxYzA4Ny90YWJsZTpiMTZjZTU0NDc5NGU0MTAwYTI3ZmQ2ZDkxMGYzYTcxMC90YWJsZXJhbmdlOmIxNmNlNTQ0Nzk0ZTQxMDBhMjdmZDZkOTEwZjNhNzEwXzItMy0xLTEtMzAxNDA_76deb914-23e6-438a-8ac9-1b6f409d0788"
      unitRef="shares">176103</us-gaap:TreasuryStockSharesAcquired>
    <us-gaap:TreasuryStockSharesAcquired
      contextRef="i4751184d7e5948509cd8893fd49fb821_D20200101-20201231"
      decimals="INF"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMTUvZnJhZzplNDMyZDBmZTczZWI0YzgwODIzNGZjYTNiYWQxYzA4Ny90YWJsZTpiMTZjZTU0NDc5NGU0MTAwYTI3ZmQ2ZDkxMGYzYTcxMC90YWJsZXJhbmdlOmIxNmNlNTQ0Nzk0ZTQxMDBhMjdmZDZkOTEwZjNhNzEwXzItNS0xLTEtMzAxNDA_3bfc91cb-1fce-425b-b479-7e673d19988c"
      unitRef="shares">371902</us-gaap:TreasuryStockSharesAcquired>
    <us-gaap:TreasuryStockValueAcquiredCostMethod
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      decimals="INF"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMTUvZnJhZzplNDMyZDBmZTczZWI0YzgwODIzNGZjYTNiYWQxYzA4Ny90YWJsZTpiMTZjZTU0NDc5NGU0MTAwYTI3ZmQ2ZDkxMGYzYTcxMC90YWJsZXJhbmdlOmIxNmNlNTQ0Nzk0ZTQxMDBhMjdmZDZkOTEwZjNhNzEwXzMtMS0xLTEtMzAxNDA_551065b7-4327-4db4-8845-95a9424fbe0e"
      unitRef="usd">43215000</us-gaap:TreasuryStockValueAcquiredCostMethod>
    <us-gaap:TreasuryStockValueAcquiredCostMethod
      contextRef="ie07f2822175c48edbb8d5559ceb82e6f_D20210101-20211231"
      decimals="INF"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMTUvZnJhZzplNDMyZDBmZTczZWI0YzgwODIzNGZjYTNiYWQxYzA4Ny90YWJsZTpiMTZjZTU0NDc5NGU0MTAwYTI3ZmQ2ZDkxMGYzYTcxMC90YWJsZXJhbmdlOmIxNmNlNTQ0Nzk0ZTQxMDBhMjdmZDZkOTEwZjNhNzEwXzMtMy0xLTEtMzAxNDA_26478e8d-b64b-4d49-b3db-249a4199607b"
      unitRef="usd">20430000</us-gaap:TreasuryStockValueAcquiredCostMethod>
    <us-gaap:TreasuryStockValueAcquiredCostMethod
      contextRef="i4751184d7e5948509cd8893fd49fb821_D20200101-20201231"
      decimals="INF"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMTUvZnJhZzplNDMyZDBmZTczZWI0YzgwODIzNGZjYTNiYWQxYzA4Ny90YWJsZTpiMTZjZTU0NDc5NGU0MTAwYTI3ZmQ2ZDkxMGYzYTcxMC90YWJsZXJhbmdlOmIxNmNlNTQ0Nzk0ZTQxMDBhMjdmZDZkOTEwZjNhNzEwXzMtNS0xLTEtMzAxNDA_6969daab-bb68-404d-b963-8db4a53c4156"
      unitRef="usd">18950000</us-gaap:TreasuryStockValueAcquiredCostMethod>
    <us-gaap:TreasuryStockAcquiredAverageCostPerShare
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      decimals="2"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMTUvZnJhZzplNDMyZDBmZTczZWI0YzgwODIzNGZjYTNiYWQxYzA4Ny90YWJsZTpiMTZjZTU0NDc5NGU0MTAwYTI3ZmQ2ZDkxMGYzYTcxMC90YWJsZXJhbmdlOmIxNmNlNTQ0Nzk0ZTQxMDBhMjdmZDZkOTEwZjNhNzEwXzQtMS0xLTEtNjg1NzM_51a688af-b049-4022-b88b-846c0ee5ac4e"
      unitRef="usdPerShare">119.46</us-gaap:TreasuryStockAcquiredAverageCostPerShare>
    <us-gaap:TreasuryStockAcquiredAverageCostPerShare
      contextRef="ie07f2822175c48edbb8d5559ceb82e6f_D20210101-20211231"
      decimals="2"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMTUvZnJhZzplNDMyZDBmZTczZWI0YzgwODIzNGZjYTNiYWQxYzA4Ny90YWJsZTpiMTZjZTU0NDc5NGU0MTAwYTI3ZmQ2ZDkxMGYzYTcxMC90YWJsZXJhbmdlOmIxNmNlNTQ0Nzk0ZTQxMDBhMjdmZDZkOTEwZjNhNzEwXzQtMy0xLTEtNjg2MDA_a299afd7-13b4-477e-a6f3-f3c60144f225"
      unitRef="usdPerShare">116.01</us-gaap:TreasuryStockAcquiredAverageCostPerShare>
    <us-gaap:TreasuryStockAcquiredAverageCostPerShare
      contextRef="i4751184d7e5948509cd8893fd49fb821_D20200101-20201231"
      decimals="2"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMTUvZnJhZzplNDMyZDBmZTczZWI0YzgwODIzNGZjYTNiYWQxYzA4Ny90YWJsZTpiMTZjZTU0NDc5NGU0MTAwYTI3ZmQ2ZDkxMGYzYTcxMC90YWJsZXJhbmdlOmIxNmNlNTQ0Nzk0ZTQxMDBhMjdmZDZkOTEwZjNhNzEwXzQtNS0xLTEtNjg2MDg_05d55199-7622-4eba-afdc-d73591ffaac0"
      unitRef="usdPerShare">50.95</us-gaap:TreasuryStockAcquiredAverageCostPerShare>
    <us-gaap:DisclosureOfCompensationRelatedCostsShareBasedPaymentsTextBlock
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjEvZnJhZzphOTIzM2I2NjNlZmM0OGFiODQyMzM5ZmQ1YmNlZGEyYi90ZXh0cmVnaW9uOmE5MjMzYjY2M2VmYzQ4YWI4NDIzMzlmZDViY2VkYTJiXzM5OTU_e7578274-7c44-4f80-8f79-ee484c0b18a6">Stock-Based Compensation&lt;div style="margin-top:6pt;text-indent:27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;Our equity compensation plans provide for the grant of incentive and nonqualified stock options, as well as other stock-based awards including PSUs, RSAs, RSUs, and DSUs, to employees, non-employee directors and other consultants who provide services to us. We also provide an ESPP and 401(k) stock match to eligible participants.&lt;/span&gt;&lt;span style="color:#000000;font-family:'Calibri',sans-serif;font-size:11pt;font-weight:400;line-height:120%"&gt; &lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;We recognize stock-based compensation expense based on grant date award fair value. This cost is recognized over the period for which the employee is required to provide service in exchange for the award or the award performance period, except for expenses relating to retirement-eligible employees that have not given their required notice, which is recognized on a pro-rata basis over the notice period prior to retirement. At December&#160;31, 2022 there were 13.2&#160;million shares available for grant under approved equity compensation plans.&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;Stock-based compensation expense was allocated in the consolidated statements of comprehensive income as follows:&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-align:center"&gt;&lt;table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"&gt;&lt;tr&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:58.142%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.081%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.406%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.081%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.406%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.084%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="15" style="padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;Year Ended December 31,&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;(in thousands)&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;2022&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;2021&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;2020&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Cost of revenues&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;8,684&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;6,760&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;3,948&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Operating expenses&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;&#160;&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;&#160;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Sales and marketing&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;7,590&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;6,248&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;4,119&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Research and development&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;5,634&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;4,384&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;3,626&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;General and administrative&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;11,491&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;10,182&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;7,243&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;33,399&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;27,574&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;18,936&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;Stock-based compensation expense by grant type or plan was as follows:&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-align:center"&gt;&lt;table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"&gt;&lt;tr&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:58.142%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.081%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.406%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.081%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.406%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.084%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="15" style="padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;Year Ended December 31,&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;(in thousands)&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:0.75pt solid #000000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;2022&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:0.75pt solid #000000;padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:0.75pt solid #000000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;2021&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:0.75pt solid #000000;padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:0.75pt solid #000000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;2020&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Stock options&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:0.75pt solid #000000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:0.75pt solid #000000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;1,903&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:0.75pt solid #000000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;border-top:0.75pt solid #000000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:0.75pt solid #000000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;2,057&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:0.75pt solid #000000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;border-top:0.75pt solid #000000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:0.75pt solid #000000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;2,232&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:0.75pt solid #000000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;PSUs&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;7,509&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;6,417&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;3,219&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;RSUs&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;19,282&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;15,388&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;10,367&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;RSAs &amp;amp; DSUs&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;437&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;434&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;446&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;ESPP&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;2,144&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;1,391&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;1,117&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;401(k) stock match&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;2,124&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;1,887&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;1,555&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000000;border-top:0.75pt solid #000000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000000;border-top:0.75pt solid #000000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;33,399&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000000;border-top:0.75pt solid #000000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000000;border-top:0.75pt solid #000000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000000;border-top:0.75pt solid #000000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;27,574&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000000;border-top:0.75pt solid #000000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000000;border-top:0.75pt solid #000000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000000;border-top:0.75pt solid #000000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;18,936&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000000;border-top:0.75pt solid #000000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;As of December&#160;31, 2022, there was $38.6 million of unrecognized stock-based compensation expense under our equity compensation plans, which is expected to be recognized on a primarily straight-line basis over a weighted-average period of 2.4 years.&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:18pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-style:italic;font-weight:700;line-height:120%"&gt;Stock Options&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;Options generally vest over four years and, upon vesting, the holder is given the option to purchase shares of common stock at a specific strike price until expiration, which is generally seven years from the grant date.&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;Our stock option activity was as follows:&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-align:center"&gt;&lt;table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"&gt;&lt;tr&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:71.930%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.081%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.406%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.083%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="3" style="padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;Options &lt;br/&gt;(#)&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="3" style="padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;Weighted Average&lt;br/&gt;Exercise Price&lt;br/&gt;($/share)&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Outstanding at December 31, 2019&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;1,543,912&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;30.03&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Granted&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;127,974&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;59.02&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Exercised&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;(712,074)&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;26.11&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Forfeited&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;(14,926)&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;43.14&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Outstanding at December 31, 2020&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;944,886&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;36.71&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Granted&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;53,223&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;105.53&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Exercised&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;(311,378)&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;30.10&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Forfeited&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;(8,081)&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;68.62&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Outstanding at December 31, 2021&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;678,650&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;44.76&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Granted&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;56,430&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;122.59&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Exercised&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;(164,393)&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;29.86&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Forfeited&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;(7,990)&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;92.48&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Outstanding at December 31, 2022&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;562,697&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;56.24&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;Of the total outstanding options at December&#160;31, 2022, 0.5 million&lt;/span&gt;&lt;span style="color:#000000;font-family:'Calibri',sans-serif;font-size:11pt;font-weight:400;line-height:120%"&gt; &lt;/span&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;were exercisable. The outstanding and exercisable options had a weighted average exercise price of $47.80&lt;/span&gt;&lt;span style="color:#000000;font-family:'Calibri',sans-serif;font-size:11pt;font-weight:400;line-height:120%"&gt; &lt;/span&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;per share and a weighted average remaining contractual life of 2.9 years.&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;The table below presents additional information related to our stock options:&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-align:center"&gt;&lt;table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"&gt;&lt;tr&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:58.142%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.081%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.406%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.081%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.406%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.084%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="15" style="padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;Year Ended December 31,&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;(in thousands, except per share data)&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;2022&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;2021&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;2020&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Fair value of options vested&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;1,996&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;2,509&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;3,000&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Intrinsic value of options exercised&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;16,705&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;27,713&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;31,737&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Intrinsic value of options outstanding&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;40,692&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;66,235&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;67,918&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Weighted-average fair value per share of options granted&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;41.34&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;31.31&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;16.18&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;The fair values of the options granted were estimated on the date of grant using the Black-Scholes option pricing model with the following weighted-average assumptions:&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-align:center"&gt;&lt;table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"&gt;&lt;tr&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:56.778%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.536%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.406%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.536%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.406%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.538%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="15" style="padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;Year Ended December 31,&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;2022&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;2021&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;2020&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Life (in years)&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;4.3&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;4.4&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;4.0&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Volatility&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;38&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;%&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;35&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;%&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;33&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;%&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Dividend yield&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;&#x2014;&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;&#x2014;&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;&#x2014;&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Risk-free interest rate&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;2.50&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;%&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;0.59&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;%&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;0.99&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;%&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;div style="margin-top:18pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-style:italic;font-weight:700;line-height:120%"&gt;Performance Share Units, Restricted Stock Units and Awards, and Deferred Stock Units&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;In 2022, 2021, and 2020 we granted PSU awards with certain target performance levels. These awards are earned based upon our Company&#x2019;s total shareholder return as compared to an indexed total shareholder return over the course of a fiscal based three-year performance period, starting in the year of grant. Earned awards vest in the quarter following the conclusion of the performance period. Expense is recognized on a straight-line basis over the performance period, regardless of whether the market condition is satisfied as the likelihood of the market condition being met is included in the fair-value measurement of the award. In 2022, PSU awards granted in 2019 were earned and vested at the maximum performance level and less than 0.1&#160;million shares of common stock were issued.&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;RSUs generally vest over four years and, upon vesting, the holder is entitled to receive shares of our common stock. &lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;RSAs vest over one year and, upon vesting, the holder is entitled to receive shares of our common stock. In lieu of RSAs, a participant may elect to receive DSUs with one year vesting, but the participant directs delayed receipt of common shares of up to ten years after the end of service to us. &lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;Activity for our PSUs, RSUs, RSAs, and DSUs in aggregate was as follows:&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-align:center"&gt;&lt;table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"&gt;&lt;tr&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:71.930%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.081%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.406%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.083%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="3" style="padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;(#) &lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="3" style="padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;Weighted Average&lt;br/&gt;Grant Date Fair&lt;br/&gt;Value ($/share)&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Outstanding at December 31, 2019&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;797,546&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;38.80&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Granted&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;331,264&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;62.78&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Vested and common stock issued&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;(222,606)&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;36.06&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Forfeited&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;(167,782)&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;30.09&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Outstanding at December 31, 2020&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;738,422&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;52.37&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Granted&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;314,290&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;101.85&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Vested and common stock issued&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;(331,669)&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;44.14&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Forfeited&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;(18,883)&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;66.35&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Outstanding at December 31, 2021&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;702,160&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;78.03&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Granted&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;312,880&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;126.44&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Vested and common stock issued&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;(276,872)&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;64.12&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Forfeited&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;(26,010)&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;99.37&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Outstanding at December 31, 2022&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;712,158&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;103.93&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;The number of PSUs, RSUs, RSAs, and DSUs outstanding at December&#160;31, 2022 included less than 0.1&#160;million units that have vested, but the shares of common stock have not yet been issued, pursuant to the terms of the agreements.&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:18pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-style:italic;font-weight:700;line-height:120%"&gt;Employee Stock Purchase Plan&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;Our ESPP activity was as follows: &lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-align:center"&gt;&lt;table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"&gt;&lt;tr&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:58.142%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.081%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.406%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.081%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.406%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.084%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="15" style="padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;Year Ended December 31,&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;(in thousands, except share data)&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;2022&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;2021&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;2020&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Amounts for shares purchased&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;6,676&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;4,737&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;3,374&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Shares purchased&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;70,107&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;55,726&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;61,833&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;A total of&lt;/span&gt;&lt;span style="color:#000000;font-family:'Calibri',sans-serif;font-size:11pt;font-weight:400;line-height:120%"&gt; &lt;/span&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;1.7&#160;million shares of common stock are remaining for issuance under the plan at December&#160;31, 2022.&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;The fair value was estimated based on the market price of our common stock at the beginning of the offering period using the following assumptions:&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-align:center"&gt;&lt;table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"&gt;&lt;tr&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:58.142%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.081%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.406%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.081%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.406%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.084%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="15" style="padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;Year Ended December 31,&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;2022&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;2021&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;2020&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Life (in years)&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;0.5&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;0.5&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;0.5&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Volatility&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;42&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;%&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;32&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;%&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;43&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;%&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Dividend yield&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 7pt 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;&#x2014;&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 7pt 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;&#x2014;&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 7pt 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;&#x2014;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Risk-free interest rate&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;1.27&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;%&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;0.07&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;%&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;0.96&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;%&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;</us-gaap:DisclosureOfCompensationRelatedCostsShareBasedPaymentsTextBlock>
    <us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardNumberOfSharesAvailableForGrant
      contextRef="ibbc2d589a09c46368d9dd3e9ea8996c6_I20221231"
      decimals="-5"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjEvZnJhZzphOTIzM2I2NjNlZmM0OGFiODQyMzM5ZmQ1YmNlZGEyYi90ZXh0cmVnaW9uOmE5MjMzYjY2M2VmYzQ4YWI4NDIzMzlmZDViY2VkYTJiXzEwOTk1MTE2MzYwMDc_b5c47e36-b481-484f-ab41-3c725ba7b310"
      unitRef="shares">13200000</us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardNumberOfSharesAvailableForGrant>
    <us-gaap:ScheduleOfEmployeeServiceShareBasedCompensationAllocationOfRecognizedPeriodCostsTextBlock
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjEvZnJhZzphOTIzM2I2NjNlZmM0OGFiODQyMzM5ZmQ1YmNlZGEyYi90ZXh0cmVnaW9uOmE5MjMzYjY2M2VmYzQ4YWI4NDIzMzlmZDViY2VkYTJiXzM5ODk_e7987bac-6a01-4bd3-8d84-d4590c31e22a">&lt;div style="margin-top:6pt;text-indent:27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;Stock-based compensation expense was allocated in the consolidated statements of comprehensive income as follows:&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-align:center"&gt;&lt;table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"&gt;&lt;tr&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:58.142%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.081%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.406%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.081%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.406%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.084%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="15" style="padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;Year Ended December 31,&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;(in thousands)&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;2022&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;2021&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;2020&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Cost of revenues&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;8,684&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;6,760&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;3,948&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Operating expenses&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;&#160;&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;&#160;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Sales and marketing&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;7,590&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;6,248&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;4,119&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Research and development&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;5,634&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;4,384&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;3,626&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;General and administrative&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;11,491&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;10,182&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;7,243&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;33,399&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;27,574&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;18,936&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;Stock-based compensation expense by grant type or plan was as follows:&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-align:center"&gt;&lt;table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"&gt;&lt;tr&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:58.142%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.081%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.406%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.081%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.406%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.084%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="15" style="padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;Year Ended December 31,&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;(in thousands)&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:0.75pt solid #000000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;2022&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:0.75pt solid #000000;padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:0.75pt solid #000000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;2021&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:0.75pt solid #000000;padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:0.75pt solid #000000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;2020&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Stock options&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:0.75pt solid #000000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:0.75pt solid #000000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;1,903&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:0.75pt solid #000000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;border-top:0.75pt solid #000000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:0.75pt solid #000000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;2,057&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:0.75pt solid #000000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;border-top:0.75pt solid #000000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:0.75pt solid #000000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;2,232&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:0.75pt solid #000000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;PSUs&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;7,509&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;6,417&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;3,219&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;RSUs&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;19,282&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;15,388&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;10,367&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;RSAs &amp;amp; DSUs&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;437&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;434&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;446&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;ESPP&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;2,144&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;1,391&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;1,117&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;401(k) stock match&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;2,124&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;1,887&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;1,555&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000000;border-top:0.75pt solid #000000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000000;border-top:0.75pt solid #000000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;33,399&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000000;border-top:0.75pt solid #000000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000000;border-top:0.75pt solid #000000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000000;border-top:0.75pt solid #000000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;27,574&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000000;border-top:0.75pt solid #000000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000000;border-top:0.75pt solid #000000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000000;border-top:0.75pt solid #000000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;18,936&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000000;border-top:0.75pt solid #000000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;</us-gaap:ScheduleOfEmployeeServiceShareBasedCompensationAllocationOfRecognizedPeriodCostsTextBlock>
    <us-gaap:AllocatedShareBasedCompensationExpense
      contextRef="idce35aa18867405aacec6a16ce30f7dd_D20220101-20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjEvZnJhZzphOTIzM2I2NjNlZmM0OGFiODQyMzM5ZmQ1YmNlZGEyYi90YWJsZTpiOGFjN2NmZjdhYzk0YjEyYjRjMDI1Yzk1N2E2ZmFiNC90YWJsZXJhbmdlOmI4YWM3Y2ZmN2FjOTRiMTJiNGMwMjVjOTU3YTZmYWI0XzItMS0xLTEtMzAxNDA_78b1f901-07ba-42f0-936e-d75e592ce3d1"
      unitRef="usd">8684000</us-gaap:AllocatedShareBasedCompensationExpense>
    <us-gaap:AllocatedShareBasedCompensationExpense
      contextRef="i9b00d2838d714d2386868e7a75b6bf5f_D20210101-20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjEvZnJhZzphOTIzM2I2NjNlZmM0OGFiODQyMzM5ZmQ1YmNlZGEyYi90YWJsZTpiOGFjN2NmZjdhYzk0YjEyYjRjMDI1Yzk1N2E2ZmFiNC90YWJsZXJhbmdlOmI4YWM3Y2ZmN2FjOTRiMTJiNGMwMjVjOTU3YTZmYWI0XzItMy0xLTEtMzAxNDA_d1f7a61c-bcb0-4048-9c95-809ab0c6f612"
      unitRef="usd">6760000</us-gaap:AllocatedShareBasedCompensationExpense>
    <us-gaap:AllocatedShareBasedCompensationExpense
      contextRef="i762308989bd249588efbfff52ddd9fe2_D20200101-20201231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjEvZnJhZzphOTIzM2I2NjNlZmM0OGFiODQyMzM5ZmQ1YmNlZGEyYi90YWJsZTpiOGFjN2NmZjdhYzk0YjEyYjRjMDI1Yzk1N2E2ZmFiNC90YWJsZXJhbmdlOmI4YWM3Y2ZmN2FjOTRiMTJiNGMwMjVjOTU3YTZmYWI0XzItNS0xLTEtMzAxNDA_39615f68-4c23-48d7-8fe7-942339b331a2"
      unitRef="usd">3948000</us-gaap:AllocatedShareBasedCompensationExpense>
    <us-gaap:AllocatedShareBasedCompensationExpense
      contextRef="ia8a7eb5e3bc040a5aee6568395ca8fe1_D20220101-20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjEvZnJhZzphOTIzM2I2NjNlZmM0OGFiODQyMzM5ZmQ1YmNlZGEyYi90YWJsZTpiOGFjN2NmZjdhYzk0YjEyYjRjMDI1Yzk1N2E2ZmFiNC90YWJsZXJhbmdlOmI4YWM3Y2ZmN2FjOTRiMTJiNGMwMjVjOTU3YTZmYWI0XzQtMS0xLTEtMzAxNDA_d2e73c36-953a-4010-9fd1-62123b42bd14"
      unitRef="usd">7590000</us-gaap:AllocatedShareBasedCompensationExpense>
    <us-gaap:AllocatedShareBasedCompensationExpense
      contextRef="i27d32ff076004f7c91a42d7b4cb21a8c_D20210101-20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjEvZnJhZzphOTIzM2I2NjNlZmM0OGFiODQyMzM5ZmQ1YmNlZGEyYi90YWJsZTpiOGFjN2NmZjdhYzk0YjEyYjRjMDI1Yzk1N2E2ZmFiNC90YWJsZXJhbmdlOmI4YWM3Y2ZmN2FjOTRiMTJiNGMwMjVjOTU3YTZmYWI0XzQtMy0xLTEtMzAxNDA_5b2b20d1-9e96-4c67-8b09-f7b2632be06d"
      unitRef="usd">6248000</us-gaap:AllocatedShareBasedCompensationExpense>
    <us-gaap:AllocatedShareBasedCompensationExpense
      contextRef="iaee36edf7cc0455fa469c65bc4085b2e_D20200101-20201231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjEvZnJhZzphOTIzM2I2NjNlZmM0OGFiODQyMzM5ZmQ1YmNlZGEyYi90YWJsZTpiOGFjN2NmZjdhYzk0YjEyYjRjMDI1Yzk1N2E2ZmFiNC90YWJsZXJhbmdlOmI4YWM3Y2ZmN2FjOTRiMTJiNGMwMjVjOTU3YTZmYWI0XzQtNS0xLTEtMzAxNDA_b8c9b783-28e7-447d-bf16-6d772c5e1e63"
      unitRef="usd">4119000</us-gaap:AllocatedShareBasedCompensationExpense>
    <us-gaap:AllocatedShareBasedCompensationExpense
      contextRef="i04d06c3581834f50a66026e4e4ffbdcd_D20220101-20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjEvZnJhZzphOTIzM2I2NjNlZmM0OGFiODQyMzM5ZmQ1YmNlZGEyYi90YWJsZTpiOGFjN2NmZjdhYzk0YjEyYjRjMDI1Yzk1N2E2ZmFiNC90YWJsZXJhbmdlOmI4YWM3Y2ZmN2FjOTRiMTJiNGMwMjVjOTU3YTZmYWI0XzUtMS0xLTEtMzAxNDA_65094831-e61a-4ce5-8afd-22b6a18515b3"
      unitRef="usd">5634000</us-gaap:AllocatedShareBasedCompensationExpense>
    <us-gaap:AllocatedShareBasedCompensationExpense
      contextRef="if1d2bc4c2f0f4f3bb8edd8165b6aae03_D20210101-20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjEvZnJhZzphOTIzM2I2NjNlZmM0OGFiODQyMzM5ZmQ1YmNlZGEyYi90YWJsZTpiOGFjN2NmZjdhYzk0YjEyYjRjMDI1Yzk1N2E2ZmFiNC90YWJsZXJhbmdlOmI4YWM3Y2ZmN2FjOTRiMTJiNGMwMjVjOTU3YTZmYWI0XzUtMy0xLTEtMzAxNDA_48786286-b89f-4cb9-8e05-95c3651914c3"
      unitRef="usd">4384000</us-gaap:AllocatedShareBasedCompensationExpense>
    <us-gaap:AllocatedShareBasedCompensationExpense
      contextRef="i8aec879eeef942509d9bc5a6b47db151_D20200101-20201231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjEvZnJhZzphOTIzM2I2NjNlZmM0OGFiODQyMzM5ZmQ1YmNlZGEyYi90YWJsZTpiOGFjN2NmZjdhYzk0YjEyYjRjMDI1Yzk1N2E2ZmFiNC90YWJsZXJhbmdlOmI4YWM3Y2ZmN2FjOTRiMTJiNGMwMjVjOTU3YTZmYWI0XzUtNS0xLTEtMzAxNDA_79ce8ab3-d648-46dd-b004-26fba140e33a"
      unitRef="usd">3626000</us-gaap:AllocatedShareBasedCompensationExpense>
    <us-gaap:AllocatedShareBasedCompensationExpense
      contextRef="i4997ed8305204f0490ffb283f8db3b0e_D20220101-20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjEvZnJhZzphOTIzM2I2NjNlZmM0OGFiODQyMzM5ZmQ1YmNlZGEyYi90YWJsZTpiOGFjN2NmZjdhYzk0YjEyYjRjMDI1Yzk1N2E2ZmFiNC90YWJsZXJhbmdlOmI4YWM3Y2ZmN2FjOTRiMTJiNGMwMjVjOTU3YTZmYWI0XzYtMS0xLTEtMzAxNDA_c96bcb31-de91-4fff-a5a4-d896703de9ec"
      unitRef="usd">11491000</us-gaap:AllocatedShareBasedCompensationExpense>
    <us-gaap:AllocatedShareBasedCompensationExpense
      contextRef="i07ad3540e0b04d04b2c92a1baea22a79_D20210101-20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjEvZnJhZzphOTIzM2I2NjNlZmM0OGFiODQyMzM5ZmQ1YmNlZGEyYi90YWJsZTpiOGFjN2NmZjdhYzk0YjEyYjRjMDI1Yzk1N2E2ZmFiNC90YWJsZXJhbmdlOmI4YWM3Y2ZmN2FjOTRiMTJiNGMwMjVjOTU3YTZmYWI0XzYtMy0xLTEtMzAxNDA_bb90ad24-8fd6-4536-a249-b7ecac6e6645"
      unitRef="usd">10182000</us-gaap:AllocatedShareBasedCompensationExpense>
    <us-gaap:AllocatedShareBasedCompensationExpense
      contextRef="iedc8bf5007d441268ab8c28e9080ce6a_D20200101-20201231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjEvZnJhZzphOTIzM2I2NjNlZmM0OGFiODQyMzM5ZmQ1YmNlZGEyYi90YWJsZTpiOGFjN2NmZjdhYzk0YjEyYjRjMDI1Yzk1N2E2ZmFiNC90YWJsZXJhbmdlOmI4YWM3Y2ZmN2FjOTRiMTJiNGMwMjVjOTU3YTZmYWI0XzYtNS0xLTEtMzAxNDA_c751280a-45f4-4b4b-8d23-ec66107d7372"
      unitRef="usd">7243000</us-gaap:AllocatedShareBasedCompensationExpense>
    <us-gaap:AllocatedShareBasedCompensationExpense
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjEvZnJhZzphOTIzM2I2NjNlZmM0OGFiODQyMzM5ZmQ1YmNlZGEyYi90YWJsZTpiOGFjN2NmZjdhYzk0YjEyYjRjMDI1Yzk1N2E2ZmFiNC90YWJsZXJhbmdlOmI4YWM3Y2ZmN2FjOTRiMTJiNGMwMjVjOTU3YTZmYWI0XzctMS0xLTEtMzAxNDA_ccb5230d-cb56-4caa-86ea-7d18a7c3ca5f"
      unitRef="usd">33399000</us-gaap:AllocatedShareBasedCompensationExpense>
    <us-gaap:AllocatedShareBasedCompensationExpense
      contextRef="ie07f2822175c48edbb8d5559ceb82e6f_D20210101-20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjEvZnJhZzphOTIzM2I2NjNlZmM0OGFiODQyMzM5ZmQ1YmNlZGEyYi90YWJsZTpiOGFjN2NmZjdhYzk0YjEyYjRjMDI1Yzk1N2E2ZmFiNC90YWJsZXJhbmdlOmI4YWM3Y2ZmN2FjOTRiMTJiNGMwMjVjOTU3YTZmYWI0XzctMy0xLTEtMzAxNDA_e3b54fbc-c1d0-41f6-8990-178cb77ad5e6"
      unitRef="usd">27574000</us-gaap:AllocatedShareBasedCompensationExpense>
    <us-gaap:AllocatedShareBasedCompensationExpense
      contextRef="i4751184d7e5948509cd8893fd49fb821_D20200101-20201231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjEvZnJhZzphOTIzM2I2NjNlZmM0OGFiODQyMzM5ZmQ1YmNlZGEyYi90YWJsZTpiOGFjN2NmZjdhYzk0YjEyYjRjMDI1Yzk1N2E2ZmFiNC90YWJsZXJhbmdlOmI4YWM3Y2ZmN2FjOTRiMTJiNGMwMjVjOTU3YTZmYWI0XzctNS0xLTEtMzAxNDA_d67b81f4-938f-49ca-b353-bc517be42559"
      unitRef="usd">18936000</us-gaap:AllocatedShareBasedCompensationExpense>
    <us-gaap:AllocatedShareBasedCompensationExpense
      contextRef="i668697b955824364acb4410659743786_D20220101-20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjEvZnJhZzphOTIzM2I2NjNlZmM0OGFiODQyMzM5ZmQ1YmNlZGEyYi90YWJsZTo5NDY3YWI5ZGQwMmQ0MzUwOThlZjExOWQxZDFkZDE5Yi90YWJsZXJhbmdlOjk0NjdhYjlkZDAyZDQzNTA5OGVmMTE5ZDFkMWRkMTliXzItMS0xLTEtMzAxNDA_fce398d3-feea-4b7c-bbe7-6e3a826e861e"
      unitRef="usd">1903000</us-gaap:AllocatedShareBasedCompensationExpense>
    <us-gaap:AllocatedShareBasedCompensationExpense
      contextRef="ib55a3b1782e14202bb90ddb50425a4c5_D20210101-20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjEvZnJhZzphOTIzM2I2NjNlZmM0OGFiODQyMzM5ZmQ1YmNlZGEyYi90YWJsZTo5NDY3YWI5ZGQwMmQ0MzUwOThlZjExOWQxZDFkZDE5Yi90YWJsZXJhbmdlOjk0NjdhYjlkZDAyZDQzNTA5OGVmMTE5ZDFkMWRkMTliXzItMy0xLTEtMzAxNDA_38898d54-f223-406b-bc59-052b55dc9519"
      unitRef="usd">2057000</us-gaap:AllocatedShareBasedCompensationExpense>
    <us-gaap:AllocatedShareBasedCompensationExpense
      contextRef="i920943d4f9864f5a842c6357663b91d3_D20200101-20201231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjEvZnJhZzphOTIzM2I2NjNlZmM0OGFiODQyMzM5ZmQ1YmNlZGEyYi90YWJsZTo5NDY3YWI5ZGQwMmQ0MzUwOThlZjExOWQxZDFkZDE5Yi90YWJsZXJhbmdlOjk0NjdhYjlkZDAyZDQzNTA5OGVmMTE5ZDFkMWRkMTliXzItNS0xLTEtMzAxNDA_f110bea9-6436-48ef-af65-770f8773bfa7"
      unitRef="usd">2232000</us-gaap:AllocatedShareBasedCompensationExpense>
    <us-gaap:AllocatedShareBasedCompensationExpense
      contextRef="ibfd28c67afa246bca4469928aa2fd201_D20220101-20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjEvZnJhZzphOTIzM2I2NjNlZmM0OGFiODQyMzM5ZmQ1YmNlZGEyYi90YWJsZTo5NDY3YWI5ZGQwMmQ0MzUwOThlZjExOWQxZDFkZDE5Yi90YWJsZXJhbmdlOjk0NjdhYjlkZDAyZDQzNTA5OGVmMTE5ZDFkMWRkMTliXzMtMS0xLTEtMzAxNDA_af025d20-26e2-421d-9a37-14cb2fee7a5f"
      unitRef="usd">7509000</us-gaap:AllocatedShareBasedCompensationExpense>
    <us-gaap:AllocatedShareBasedCompensationExpense
      contextRef="i84af72d294b94d2c9e63260f4d02e6af_D20210101-20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjEvZnJhZzphOTIzM2I2NjNlZmM0OGFiODQyMzM5ZmQ1YmNlZGEyYi90YWJsZTo5NDY3YWI5ZGQwMmQ0MzUwOThlZjExOWQxZDFkZDE5Yi90YWJsZXJhbmdlOjk0NjdhYjlkZDAyZDQzNTA5OGVmMTE5ZDFkMWRkMTliXzMtMy0xLTEtMzAxNDA_1c9a1ab6-49c1-4fab-9e30-8dd3fef8b574"
      unitRef="usd">6417000</us-gaap:AllocatedShareBasedCompensationExpense>
    <us-gaap:AllocatedShareBasedCompensationExpense
      contextRef="ia458266eacef419e8f4b7a9d97fe7fdc_D20200101-20201231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjEvZnJhZzphOTIzM2I2NjNlZmM0OGFiODQyMzM5ZmQ1YmNlZGEyYi90YWJsZTo5NDY3YWI5ZGQwMmQ0MzUwOThlZjExOWQxZDFkZDE5Yi90YWJsZXJhbmdlOjk0NjdhYjlkZDAyZDQzNTA5OGVmMTE5ZDFkMWRkMTliXzMtNS0xLTEtMzAxNDA_729b850f-e526-49e4-843b-8875dcf9bc73"
      unitRef="usd">3219000</us-gaap:AllocatedShareBasedCompensationExpense>
    <us-gaap:AllocatedShareBasedCompensationExpense
      contextRef="i7f3127aa3db047ad8db0a96d621098d1_D20220101-20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjEvZnJhZzphOTIzM2I2NjNlZmM0OGFiODQyMzM5ZmQ1YmNlZGEyYi90YWJsZTo5NDY3YWI5ZGQwMmQ0MzUwOThlZjExOWQxZDFkZDE5Yi90YWJsZXJhbmdlOjk0NjdhYjlkZDAyZDQzNTA5OGVmMTE5ZDFkMWRkMTliXzQtMS0xLTEtMzAxNDA_c032465f-1cfe-4dfe-9265-a11d1f9808ec"
      unitRef="usd">19282000</us-gaap:AllocatedShareBasedCompensationExpense>
    <us-gaap:AllocatedShareBasedCompensationExpense
      contextRef="ia9a3c40bfb044faeb2e91c32e70fa2cc_D20210101-20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjEvZnJhZzphOTIzM2I2NjNlZmM0OGFiODQyMzM5ZmQ1YmNlZGEyYi90YWJsZTo5NDY3YWI5ZGQwMmQ0MzUwOThlZjExOWQxZDFkZDE5Yi90YWJsZXJhbmdlOjk0NjdhYjlkZDAyZDQzNTA5OGVmMTE5ZDFkMWRkMTliXzQtMy0xLTEtMzAxNDA_8b3b9ee1-ed3b-4e03-b0e1-77928a1ef8e5"
      unitRef="usd">15388000</us-gaap:AllocatedShareBasedCompensationExpense>
    <us-gaap:AllocatedShareBasedCompensationExpense
      contextRef="iad98557feb7042c89b407853499c7c4a_D20200101-20201231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjEvZnJhZzphOTIzM2I2NjNlZmM0OGFiODQyMzM5ZmQ1YmNlZGEyYi90YWJsZTo5NDY3YWI5ZGQwMmQ0MzUwOThlZjExOWQxZDFkZDE5Yi90YWJsZXJhbmdlOjk0NjdhYjlkZDAyZDQzNTA5OGVmMTE5ZDFkMWRkMTliXzQtNS0xLTEtMzAxNDA_20085bed-3ad4-4e7d-8974-4651c4abb2de"
      unitRef="usd">10367000</us-gaap:AllocatedShareBasedCompensationExpense>
    <us-gaap:AllocatedShareBasedCompensationExpense
      contextRef="i20c962b96d4849ddb3e69a9c24bfa32f_D20220101-20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjEvZnJhZzphOTIzM2I2NjNlZmM0OGFiODQyMzM5ZmQ1YmNlZGEyYi90YWJsZTo5NDY3YWI5ZGQwMmQ0MzUwOThlZjExOWQxZDFkZDE5Yi90YWJsZXJhbmdlOjk0NjdhYjlkZDAyZDQzNTA5OGVmMTE5ZDFkMWRkMTliXzUtMS0xLTEtMzAxNDA_98d5bdaa-0626-4833-a214-4ec8327a5bce"
      unitRef="usd">437000</us-gaap:AllocatedShareBasedCompensationExpense>
    <us-gaap:AllocatedShareBasedCompensationExpense
      contextRef="i641598f08577458996b92d29d9622d44_D20210101-20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjEvZnJhZzphOTIzM2I2NjNlZmM0OGFiODQyMzM5ZmQ1YmNlZGEyYi90YWJsZTo5NDY3YWI5ZGQwMmQ0MzUwOThlZjExOWQxZDFkZDE5Yi90YWJsZXJhbmdlOjk0NjdhYjlkZDAyZDQzNTA5OGVmMTE5ZDFkMWRkMTliXzUtMy0xLTEtMzAxNDA_dea4df27-a60b-4920-97a2-0d57c16a2fc6"
      unitRef="usd">434000</us-gaap:AllocatedShareBasedCompensationExpense>
    <us-gaap:AllocatedShareBasedCompensationExpense
      contextRef="i9b1cc08455374af99fd20959559723dc_D20200101-20201231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjEvZnJhZzphOTIzM2I2NjNlZmM0OGFiODQyMzM5ZmQ1YmNlZGEyYi90YWJsZTo5NDY3YWI5ZGQwMmQ0MzUwOThlZjExOWQxZDFkZDE5Yi90YWJsZXJhbmdlOjk0NjdhYjlkZDAyZDQzNTA5OGVmMTE5ZDFkMWRkMTliXzUtNS0xLTEtMzAxNDA_784a67fb-fb24-46e8-be92-c0c72bff07bc"
      unitRef="usd">446000</us-gaap:AllocatedShareBasedCompensationExpense>
    <us-gaap:AllocatedShareBasedCompensationExpense
      contextRef="id5d6f83a0ed34c2ab8f823b100a1c6eb_D20220101-20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjEvZnJhZzphOTIzM2I2NjNlZmM0OGFiODQyMzM5ZmQ1YmNlZGEyYi90YWJsZTo5NDY3YWI5ZGQwMmQ0MzUwOThlZjExOWQxZDFkZDE5Yi90YWJsZXJhbmdlOjk0NjdhYjlkZDAyZDQzNTA5OGVmMTE5ZDFkMWRkMTliXzYtMS0xLTEtMzAxNDA_e8332610-4710-4d93-9c7f-f2c4f40b7b29"
      unitRef="usd">2144000</us-gaap:AllocatedShareBasedCompensationExpense>
    <us-gaap:AllocatedShareBasedCompensationExpense
      contextRef="ie45c4a5ad28946d8be95c94cc114cf3d_D20210101-20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjEvZnJhZzphOTIzM2I2NjNlZmM0OGFiODQyMzM5ZmQ1YmNlZGEyYi90YWJsZTo5NDY3YWI5ZGQwMmQ0MzUwOThlZjExOWQxZDFkZDE5Yi90YWJsZXJhbmdlOjk0NjdhYjlkZDAyZDQzNTA5OGVmMTE5ZDFkMWRkMTliXzYtMy0xLTEtMzAxNDA_9b09de4a-d0bb-4ceb-8fcc-2b64267d8d4a"
      unitRef="usd">1391000</us-gaap:AllocatedShareBasedCompensationExpense>
    <us-gaap:AllocatedShareBasedCompensationExpense
      contextRef="i5ef319fb8eda482b83965c8f8b790b98_D20200101-20201231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjEvZnJhZzphOTIzM2I2NjNlZmM0OGFiODQyMzM5ZmQ1YmNlZGEyYi90YWJsZTo5NDY3YWI5ZGQwMmQ0MzUwOThlZjExOWQxZDFkZDE5Yi90YWJsZXJhbmdlOjk0NjdhYjlkZDAyZDQzNTA5OGVmMTE5ZDFkMWRkMTliXzYtNS0xLTEtMzAxNDA_e91e6452-8d78-41d9-9b4a-6713e2bb5115"
      unitRef="usd">1117000</us-gaap:AllocatedShareBasedCompensationExpense>
    <us-gaap:AllocatedShareBasedCompensationExpense
      contextRef="i7b8ba74850364d55b1e5575a9dff1933_D20220101-20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjEvZnJhZzphOTIzM2I2NjNlZmM0OGFiODQyMzM5ZmQ1YmNlZGEyYi90YWJsZTo5NDY3YWI5ZGQwMmQ0MzUwOThlZjExOWQxZDFkZDE5Yi90YWJsZXJhbmdlOjk0NjdhYjlkZDAyZDQzNTA5OGVmMTE5ZDFkMWRkMTliXzctMS0xLTEtMzAxNDA_42299d98-0813-4159-b95b-69d145f16639"
      unitRef="usd">2124000</us-gaap:AllocatedShareBasedCompensationExpense>
    <us-gaap:AllocatedShareBasedCompensationExpense
      contextRef="iecef4f6182e64fd4bc9f87bb1bfc9f20_D20210101-20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjEvZnJhZzphOTIzM2I2NjNlZmM0OGFiODQyMzM5ZmQ1YmNlZGEyYi90YWJsZTo5NDY3YWI5ZGQwMmQ0MzUwOThlZjExOWQxZDFkZDE5Yi90YWJsZXJhbmdlOjk0NjdhYjlkZDAyZDQzNTA5OGVmMTE5ZDFkMWRkMTliXzctMy0xLTEtMzAxNDA_d1141b12-3c3f-482c-9ae3-0dd9d56c01e3"
      unitRef="usd">1887000</us-gaap:AllocatedShareBasedCompensationExpense>
    <us-gaap:AllocatedShareBasedCompensationExpense
      contextRef="ife10a6b0b96f44e6a9a9c7a01676007f_D20200101-20201231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjEvZnJhZzphOTIzM2I2NjNlZmM0OGFiODQyMzM5ZmQ1YmNlZGEyYi90YWJsZTo5NDY3YWI5ZGQwMmQ0MzUwOThlZjExOWQxZDFkZDE5Yi90YWJsZXJhbmdlOjk0NjdhYjlkZDAyZDQzNTA5OGVmMTE5ZDFkMWRkMTliXzctNS0xLTEtMzAxNDA_fcfbf4cb-6b46-4014-b3c7-79df25837c2b"
      unitRef="usd">1555000</us-gaap:AllocatedShareBasedCompensationExpense>
    <us-gaap:AllocatedShareBasedCompensationExpense
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjEvZnJhZzphOTIzM2I2NjNlZmM0OGFiODQyMzM5ZmQ1YmNlZGEyYi90YWJsZTo5NDY3YWI5ZGQwMmQ0MzUwOThlZjExOWQxZDFkZDE5Yi90YWJsZXJhbmdlOjk0NjdhYjlkZDAyZDQzNTA5OGVmMTE5ZDFkMWRkMTliXzgtMS0xLTEtMzAxNDA_5e87fd34-9b18-4346-9372-9d2fe9854459"
      unitRef="usd">33399000</us-gaap:AllocatedShareBasedCompensationExpense>
    <us-gaap:AllocatedShareBasedCompensationExpense
      contextRef="ie07f2822175c48edbb8d5559ceb82e6f_D20210101-20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjEvZnJhZzphOTIzM2I2NjNlZmM0OGFiODQyMzM5ZmQ1YmNlZGEyYi90YWJsZTo5NDY3YWI5ZGQwMmQ0MzUwOThlZjExOWQxZDFkZDE5Yi90YWJsZXJhbmdlOjk0NjdhYjlkZDAyZDQzNTA5OGVmMTE5ZDFkMWRkMTliXzgtMy0xLTEtMzAxNDA_55f547a8-33be-41fd-8edd-561a38fc10ef"
      unitRef="usd">27574000</us-gaap:AllocatedShareBasedCompensationExpense>
    <us-gaap:AllocatedShareBasedCompensationExpense
      contextRef="i4751184d7e5948509cd8893fd49fb821_D20200101-20201231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjEvZnJhZzphOTIzM2I2NjNlZmM0OGFiODQyMzM5ZmQ1YmNlZGEyYi90YWJsZTo5NDY3YWI5ZGQwMmQ0MzUwOThlZjExOWQxZDFkZDE5Yi90YWJsZXJhbmdlOjk0NjdhYjlkZDAyZDQzNTA5OGVmMTE5ZDFkMWRkMTliXzgtNS0xLTEtMzAxNDA_751e02a2-36cb-4460-84e1-ea2e13cdb249"
      unitRef="usd">18936000</us-gaap:AllocatedShareBasedCompensationExpense>
    <us-gaap:EmployeeServiceShareBasedCompensationNonvestedAwardsTotalCompensationCostNotYetRecognized
      contextRef="ibbc2d589a09c46368d9dd3e9ea8996c6_I20221231"
      decimals="-5"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjEvZnJhZzphOTIzM2I2NjNlZmM0OGFiODQyMzM5ZmQ1YmNlZGEyYi90ZXh0cmVnaW9uOmE5MjMzYjY2M2VmYzQ4YWI4NDIzMzlmZDViY2VkYTJiXzEwOTk1MTE2MzQ0MjA_04014771-38da-4bb2-99df-fbf72c764bbb"
      unitRef="usd">38600000</us-gaap:EmployeeServiceShareBasedCompensationNonvestedAwardsTotalCompensationCostNotYetRecognized>
    <us-gaap:EmployeeServiceShareBasedCompensationNonvestedAwardsTotalCompensationCostNotYetRecognizedPeriodForRecognition1
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjEvZnJhZzphOTIzM2I2NjNlZmM0OGFiODQyMzM5ZmQ1YmNlZGEyYi90ZXh0cmVnaW9uOmE5MjMzYjY2M2VmYzQ4YWI4NDIzMzlmZDViY2VkYTJiXzEwOTk1MTE2MzQ0MjU_2776a767-7415-496f-9d23-22b1636077ea">P2Y4M24D</us-gaap:EmployeeServiceShareBasedCompensationNonvestedAwardsTotalCompensationCostNotYetRecognizedPeriodForRecognition1>
    <us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardAwardVestingPeriod1
      contextRef="i668697b955824364acb4410659743786_D20220101-20221231"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjEvZnJhZzphOTIzM2I2NjNlZmM0OGFiODQyMzM5ZmQ1YmNlZGEyYi90ZXh0cmVnaW9uOmE5MjMzYjY2M2VmYzQ4YWI4NDIzMzlmZDViY2VkYTJiXzI3NDg3NzkwNzg4ODg_14085401-d889-45b3-b64a-0d207cbb4ab2">P4Y</us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardAwardVestingPeriod1>
    <us-gaap:SharebasedCompensationArrangementBySharebasedPaymentAwardExpirationPeriod
      contextRef="i668697b955824364acb4410659743786_D20220101-20221231"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjEvZnJhZzphOTIzM2I2NjNlZmM0OGFiODQyMzM5ZmQ1YmNlZGEyYi90ZXh0cmVnaW9uOmE5MjMzYjY2M2VmYzQ4YWI4NDIzMzlmZDViY2VkYTJiXzI3NDg3NzkwNzg4ODk_66e48157-66e8-450d-a879-d212be1d7123">P7Y</us-gaap:SharebasedCompensationArrangementBySharebasedPaymentAwardExpirationPeriod>
    <us-gaap:ScheduleOfShareBasedCompensationStockOptionsActivityTableTextBlock
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjEvZnJhZzphOTIzM2I2NjNlZmM0OGFiODQyMzM5ZmQ1YmNlZGEyYi90ZXh0cmVnaW9uOmE5MjMzYjY2M2VmYzQ4YWI4NDIzMzlmZDViY2VkYTJiXzM5OTA_66ce5135-fe20-405e-9c98-ab7292ccd9f7">&lt;div style="margin-top:6pt;text-indent:27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;Our stock option activity was as follows:&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-align:center"&gt;&lt;table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"&gt;&lt;tr&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:71.930%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.081%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.406%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.083%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="3" style="padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;Options &lt;br/&gt;(#)&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="3" style="padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;Weighted Average&lt;br/&gt;Exercise Price&lt;br/&gt;($/share)&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Outstanding at December 31, 2019&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;1,543,912&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;30.03&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Granted&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;127,974&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;59.02&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Exercised&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;(712,074)&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;26.11&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Forfeited&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;(14,926)&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;43.14&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Outstanding at December 31, 2020&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;944,886&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;36.71&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Granted&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;53,223&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;105.53&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Exercised&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;(311,378)&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;30.10&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Forfeited&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;(8,081)&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;68.62&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Outstanding at December 31, 2021&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;678,650&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;44.76&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Granted&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;56,430&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;122.59&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Exercised&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;(164,393)&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;29.86&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Forfeited&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;(7,990)&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;92.48&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Outstanding at December 31, 2022&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;562,697&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;56.24&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;</us-gaap:ScheduleOfShareBasedCompensationStockOptionsActivityTableTextBlock>
    <us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsOutstandingNumber
      contextRef="i489b2464c80746b9ae7427577897ad3e_I20191231"
      decimals="INF"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjEvZnJhZzphOTIzM2I2NjNlZmM0OGFiODQyMzM5ZmQ1YmNlZGEyYi90YWJsZToxZmExMGNlNDk3ODc0MGJkOWQ1NjI0ZTkyNDY5YTZhZS90YWJsZXJhbmdlOjFmYTEwY2U0OTc4NzQwYmQ5ZDU2MjRlOTI0NjlhNmFlXzEtMS0xLTEtMzAxNDA_9c7cf159-136e-403c-a0ca-6ff035980598"
      unitRef="shares">1543912</us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsOutstandingNumber>
    <us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsOutstandingWeightedAverageExercisePrice
      contextRef="i489b2464c80746b9ae7427577897ad3e_I20191231"
      decimals="2"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjEvZnJhZzphOTIzM2I2NjNlZmM0OGFiODQyMzM5ZmQ1YmNlZGEyYi90YWJsZToxZmExMGNlNDk3ODc0MGJkOWQ1NjI0ZTkyNDY5YTZhZS90YWJsZXJhbmdlOjFmYTEwY2U0OTc4NzQwYmQ5ZDU2MjRlOTI0NjlhNmFlXzEtMy0xLTEtMzAxNDA_85fa0f5f-7634-40d4-a538-72181fe451e5"
      unitRef="usdPerShare">30.03</us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsOutstandingWeightedAverageExercisePrice>
    <us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsGrantsInPeriodGross
      contextRef="i4751184d7e5948509cd8893fd49fb821_D20200101-20201231"
      decimals="INF"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjEvZnJhZzphOTIzM2I2NjNlZmM0OGFiODQyMzM5ZmQ1YmNlZGEyYi90YWJsZToxZmExMGNlNDk3ODc0MGJkOWQ1NjI0ZTkyNDY5YTZhZS90YWJsZXJhbmdlOjFmYTEwY2U0OTc4NzQwYmQ5ZDU2MjRlOTI0NjlhNmFlXzItMS0xLTEtMzAxNDA_bce78f6c-6a61-4680-857b-372f308e1b0c"
      unitRef="shares">127974</us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsGrantsInPeriodGross>
    <us-gaap:ShareBasedCompensationArrangementsByShareBasedPaymentAwardOptionsGrantsInPeriodWeightedAverageExercisePrice
      contextRef="i4751184d7e5948509cd8893fd49fb821_D20200101-20201231"
      decimals="2"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjEvZnJhZzphOTIzM2I2NjNlZmM0OGFiODQyMzM5ZmQ1YmNlZGEyYi90YWJsZToxZmExMGNlNDk3ODc0MGJkOWQ1NjI0ZTkyNDY5YTZhZS90YWJsZXJhbmdlOjFmYTEwY2U0OTc4NzQwYmQ5ZDU2MjRlOTI0NjlhNmFlXzItMy0xLTEtMzAxNDA_3454e45a-8e03-42a0-aba0-9d4eb4e782cc"
      unitRef="usdPerShare">59.02</us-gaap:ShareBasedCompensationArrangementsByShareBasedPaymentAwardOptionsGrantsInPeriodWeightedAverageExercisePrice>
    <us-gaap:StockIssuedDuringPeriodSharesStockOptionsExercised
      contextRef="i4751184d7e5948509cd8893fd49fb821_D20200101-20201231"
      decimals="INF"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjEvZnJhZzphOTIzM2I2NjNlZmM0OGFiODQyMzM5ZmQ1YmNlZGEyYi90YWJsZToxZmExMGNlNDk3ODc0MGJkOWQ1NjI0ZTkyNDY5YTZhZS90YWJsZXJhbmdlOjFmYTEwY2U0OTc4NzQwYmQ5ZDU2MjRlOTI0NjlhNmFlXzMtMS0xLTEtMzAxNDA_ff8f5240-4322-4299-b0d1-90e4ebd09a07"
      unitRef="shares">712074</us-gaap:StockIssuedDuringPeriodSharesStockOptionsExercised>
    <us-gaap:ShareBasedCompensationArrangementsByShareBasedPaymentAwardOptionsExercisesInPeriodWeightedAverageExercisePrice
      contextRef="i4751184d7e5948509cd8893fd49fb821_D20200101-20201231"
      decimals="2"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjEvZnJhZzphOTIzM2I2NjNlZmM0OGFiODQyMzM5ZmQ1YmNlZGEyYi90YWJsZToxZmExMGNlNDk3ODc0MGJkOWQ1NjI0ZTkyNDY5YTZhZS90YWJsZXJhbmdlOjFmYTEwY2U0OTc4NzQwYmQ5ZDU2MjRlOTI0NjlhNmFlXzMtMy0xLTEtMzAxNDA_e0ff77d2-dde7-4ee5-b9de-d08e3001f9f3"
      unitRef="usdPerShare">26.11</us-gaap:ShareBasedCompensationArrangementsByShareBasedPaymentAwardOptionsExercisesInPeriodWeightedAverageExercisePrice>
    <us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsForfeituresInPeriod
      contextRef="i4751184d7e5948509cd8893fd49fb821_D20200101-20201231"
      decimals="INF"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjEvZnJhZzphOTIzM2I2NjNlZmM0OGFiODQyMzM5ZmQ1YmNlZGEyYi90YWJsZToxZmExMGNlNDk3ODc0MGJkOWQ1NjI0ZTkyNDY5YTZhZS90YWJsZXJhbmdlOjFmYTEwY2U0OTc4NzQwYmQ5ZDU2MjRlOTI0NjlhNmFlXzQtMS0xLTEtMzAxNDA_6c846f41-5360-4070-bc04-98ccdc6c309c"
      unitRef="shares">14926</us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsForfeituresInPeriod>
    <us-gaap:ShareBasedCompensationArrangementsByShareBasedPaymentAwardOptionsForfeituresInPeriodWeightedAverageExercisePrice
      contextRef="i4751184d7e5948509cd8893fd49fb821_D20200101-20201231"
      decimals="2"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjEvZnJhZzphOTIzM2I2NjNlZmM0OGFiODQyMzM5ZmQ1YmNlZGEyYi90YWJsZToxZmExMGNlNDk3ODc0MGJkOWQ1NjI0ZTkyNDY5YTZhZS90YWJsZXJhbmdlOjFmYTEwY2U0OTc4NzQwYmQ5ZDU2MjRlOTI0NjlhNmFlXzQtMy0xLTEtMzAxNDA_516be861-a905-4ded-9a7f-a01fbc5ce224"
      unitRef="usdPerShare">43.14</us-gaap:ShareBasedCompensationArrangementsByShareBasedPaymentAwardOptionsForfeituresInPeriodWeightedAverageExercisePrice>
    <us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsOutstandingNumber
      contextRef="i3ead637906154a2bab043152edc06771_I20201231"
      decimals="INF"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjEvZnJhZzphOTIzM2I2NjNlZmM0OGFiODQyMzM5ZmQ1YmNlZGEyYi90YWJsZToxZmExMGNlNDk3ODc0MGJkOWQ1NjI0ZTkyNDY5YTZhZS90YWJsZXJhbmdlOjFmYTEwY2U0OTc4NzQwYmQ5ZDU2MjRlOTI0NjlhNmFlXzUtMS0xLTEtMzAxNDA_88854044-8d20-4727-91c8-9a8d31088d97"
      unitRef="shares">944886</us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsOutstandingNumber>
    <us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsOutstandingWeightedAverageExercisePrice
      contextRef="i3ead637906154a2bab043152edc06771_I20201231"
      decimals="2"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjEvZnJhZzphOTIzM2I2NjNlZmM0OGFiODQyMzM5ZmQ1YmNlZGEyYi90YWJsZToxZmExMGNlNDk3ODc0MGJkOWQ1NjI0ZTkyNDY5YTZhZS90YWJsZXJhbmdlOjFmYTEwY2U0OTc4NzQwYmQ5ZDU2MjRlOTI0NjlhNmFlXzUtMy0xLTEtMzAxNDA_eeb1e6a6-b82a-40a6-9b16-19b2c750e4b8"
      unitRef="usdPerShare">36.71</us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsOutstandingWeightedAverageExercisePrice>
    <us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsGrantsInPeriodGross
      contextRef="ie07f2822175c48edbb8d5559ceb82e6f_D20210101-20211231"
      decimals="INF"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjEvZnJhZzphOTIzM2I2NjNlZmM0OGFiODQyMzM5ZmQ1YmNlZGEyYi90YWJsZToxZmExMGNlNDk3ODc0MGJkOWQ1NjI0ZTkyNDY5YTZhZS90YWJsZXJhbmdlOjFmYTEwY2U0OTc4NzQwYmQ5ZDU2MjRlOTI0NjlhNmFlXzYtMS0xLTEtMzAxNDA_a4a795f7-1ec7-45e9-90a0-48d7cd0d162d"
      unitRef="shares">53223</us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsGrantsInPeriodGross>
    <us-gaap:ShareBasedCompensationArrangementsByShareBasedPaymentAwardOptionsGrantsInPeriodWeightedAverageExercisePrice
      contextRef="ie07f2822175c48edbb8d5559ceb82e6f_D20210101-20211231"
      decimals="2"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjEvZnJhZzphOTIzM2I2NjNlZmM0OGFiODQyMzM5ZmQ1YmNlZGEyYi90YWJsZToxZmExMGNlNDk3ODc0MGJkOWQ1NjI0ZTkyNDY5YTZhZS90YWJsZXJhbmdlOjFmYTEwY2U0OTc4NzQwYmQ5ZDU2MjRlOTI0NjlhNmFlXzYtMy0xLTEtMzAxNDA_02c10d3e-8d72-4cc1-bd8e-9405752e8620"
      unitRef="usdPerShare">105.53</us-gaap:ShareBasedCompensationArrangementsByShareBasedPaymentAwardOptionsGrantsInPeriodWeightedAverageExercisePrice>
    <us-gaap:StockIssuedDuringPeriodSharesStockOptionsExercised
      contextRef="ie07f2822175c48edbb8d5559ceb82e6f_D20210101-20211231"
      decimals="INF"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjEvZnJhZzphOTIzM2I2NjNlZmM0OGFiODQyMzM5ZmQ1YmNlZGEyYi90YWJsZToxZmExMGNlNDk3ODc0MGJkOWQ1NjI0ZTkyNDY5YTZhZS90YWJsZXJhbmdlOjFmYTEwY2U0OTc4NzQwYmQ5ZDU2MjRlOTI0NjlhNmFlXzctMS0xLTEtMzAxNDA_3096b15a-890d-4a04-9bac-a910445a0d11"
      unitRef="shares">311378</us-gaap:StockIssuedDuringPeriodSharesStockOptionsExercised>
    <us-gaap:ShareBasedCompensationArrangementsByShareBasedPaymentAwardOptionsExercisesInPeriodWeightedAverageExercisePrice
      contextRef="ie07f2822175c48edbb8d5559ceb82e6f_D20210101-20211231"
      decimals="2"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjEvZnJhZzphOTIzM2I2NjNlZmM0OGFiODQyMzM5ZmQ1YmNlZGEyYi90YWJsZToxZmExMGNlNDk3ODc0MGJkOWQ1NjI0ZTkyNDY5YTZhZS90YWJsZXJhbmdlOjFmYTEwY2U0OTc4NzQwYmQ5ZDU2MjRlOTI0NjlhNmFlXzctMy0xLTEtMzAxNDA_c4217c65-3e28-4101-b74c-72922c4347e2"
      unitRef="usdPerShare">30.10</us-gaap:ShareBasedCompensationArrangementsByShareBasedPaymentAwardOptionsExercisesInPeriodWeightedAverageExercisePrice>
    <us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsForfeituresInPeriod
      contextRef="ie07f2822175c48edbb8d5559ceb82e6f_D20210101-20211231"
      decimals="INF"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjEvZnJhZzphOTIzM2I2NjNlZmM0OGFiODQyMzM5ZmQ1YmNlZGEyYi90YWJsZToxZmExMGNlNDk3ODc0MGJkOWQ1NjI0ZTkyNDY5YTZhZS90YWJsZXJhbmdlOjFmYTEwY2U0OTc4NzQwYmQ5ZDU2MjRlOTI0NjlhNmFlXzgtMS0xLTEtMzAxNDA_db55ebad-f2fb-4830-bea6-2e62f9498386"
      unitRef="shares">8081</us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsForfeituresInPeriod>
    <us-gaap:ShareBasedCompensationArrangementsByShareBasedPaymentAwardOptionsForfeituresInPeriodWeightedAverageExercisePrice
      contextRef="ie07f2822175c48edbb8d5559ceb82e6f_D20210101-20211231"
      decimals="2"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjEvZnJhZzphOTIzM2I2NjNlZmM0OGFiODQyMzM5ZmQ1YmNlZGEyYi90YWJsZToxZmExMGNlNDk3ODc0MGJkOWQ1NjI0ZTkyNDY5YTZhZS90YWJsZXJhbmdlOjFmYTEwY2U0OTc4NzQwYmQ5ZDU2MjRlOTI0NjlhNmFlXzgtMy0xLTEtMzAxNDA_44bd2269-cb85-4f6f-9f0a-01a59dd87c6f"
      unitRef="usdPerShare">68.62</us-gaap:ShareBasedCompensationArrangementsByShareBasedPaymentAwardOptionsForfeituresInPeriodWeightedAverageExercisePrice>
    <us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsOutstandingNumber
      contextRef="i62ba0be1fd094d818a1f7d0d5504d1e2_I20211231"
      decimals="INF"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjEvZnJhZzphOTIzM2I2NjNlZmM0OGFiODQyMzM5ZmQ1YmNlZGEyYi90YWJsZToxZmExMGNlNDk3ODc0MGJkOWQ1NjI0ZTkyNDY5YTZhZS90YWJsZXJhbmdlOjFmYTEwY2U0OTc4NzQwYmQ5ZDU2MjRlOTI0NjlhNmFlXzktMS0xLTEtMzAxNDA_ac6ab028-ac35-4c01-94a5-8329d360128e"
      unitRef="shares">678650</us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsOutstandingNumber>
    <us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsOutstandingWeightedAverageExercisePrice
      contextRef="i62ba0be1fd094d818a1f7d0d5504d1e2_I20211231"
      decimals="2"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjEvZnJhZzphOTIzM2I2NjNlZmM0OGFiODQyMzM5ZmQ1YmNlZGEyYi90YWJsZToxZmExMGNlNDk3ODc0MGJkOWQ1NjI0ZTkyNDY5YTZhZS90YWJsZXJhbmdlOjFmYTEwY2U0OTc4NzQwYmQ5ZDU2MjRlOTI0NjlhNmFlXzktMy0xLTEtMzAxNDA_41356214-25fe-4fee-ab73-aa1248579964"
      unitRef="usdPerShare">44.76</us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsOutstandingWeightedAverageExercisePrice>
    <us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsGrantsInPeriodGross
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      decimals="INF"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjEvZnJhZzphOTIzM2I2NjNlZmM0OGFiODQyMzM5ZmQ1YmNlZGEyYi90YWJsZToxZmExMGNlNDk3ODc0MGJkOWQ1NjI0ZTkyNDY5YTZhZS90YWJsZXJhbmdlOjFmYTEwY2U0OTc4NzQwYmQ5ZDU2MjRlOTI0NjlhNmFlXzEwLTEtMS0xLTMwMTQw_078f6242-1e93-41a8-956d-737eed8588c0"
      unitRef="shares">56430</us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsGrantsInPeriodGross>
    <us-gaap:ShareBasedCompensationArrangementsByShareBasedPaymentAwardOptionsGrantsInPeriodWeightedAverageExercisePrice
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      decimals="2"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjEvZnJhZzphOTIzM2I2NjNlZmM0OGFiODQyMzM5ZmQ1YmNlZGEyYi90YWJsZToxZmExMGNlNDk3ODc0MGJkOWQ1NjI0ZTkyNDY5YTZhZS90YWJsZXJhbmdlOjFmYTEwY2U0OTc4NzQwYmQ5ZDU2MjRlOTI0NjlhNmFlXzEwLTMtMS0xLTMwMTQw_a94f01c0-c03d-420c-96df-fcc3a646766f"
      unitRef="usdPerShare">122.59</us-gaap:ShareBasedCompensationArrangementsByShareBasedPaymentAwardOptionsGrantsInPeriodWeightedAverageExercisePrice>
    <us-gaap:StockIssuedDuringPeriodSharesStockOptionsExercised
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      decimals="INF"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjEvZnJhZzphOTIzM2I2NjNlZmM0OGFiODQyMzM5ZmQ1YmNlZGEyYi90YWJsZToxZmExMGNlNDk3ODc0MGJkOWQ1NjI0ZTkyNDY5YTZhZS90YWJsZXJhbmdlOjFmYTEwY2U0OTc4NzQwYmQ5ZDU2MjRlOTI0NjlhNmFlXzExLTEtMS0xLTMwMTQw_4f83f7d5-1613-4307-bada-fcd5320b62f9"
      unitRef="shares">164393</us-gaap:StockIssuedDuringPeriodSharesStockOptionsExercised>
    <us-gaap:ShareBasedCompensationArrangementsByShareBasedPaymentAwardOptionsExercisesInPeriodWeightedAverageExercisePrice
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      decimals="2"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjEvZnJhZzphOTIzM2I2NjNlZmM0OGFiODQyMzM5ZmQ1YmNlZGEyYi90YWJsZToxZmExMGNlNDk3ODc0MGJkOWQ1NjI0ZTkyNDY5YTZhZS90YWJsZXJhbmdlOjFmYTEwY2U0OTc4NzQwYmQ5ZDU2MjRlOTI0NjlhNmFlXzExLTMtMS0xLTMwMTQw_093dbb73-7b6d-4752-aae8-3367ed610ce5"
      unitRef="usdPerShare">29.86</us-gaap:ShareBasedCompensationArrangementsByShareBasedPaymentAwardOptionsExercisesInPeriodWeightedAverageExercisePrice>
    <us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsForfeituresInPeriod
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      decimals="INF"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjEvZnJhZzphOTIzM2I2NjNlZmM0OGFiODQyMzM5ZmQ1YmNlZGEyYi90YWJsZToxZmExMGNlNDk3ODc0MGJkOWQ1NjI0ZTkyNDY5YTZhZS90YWJsZXJhbmdlOjFmYTEwY2U0OTc4NzQwYmQ5ZDU2MjRlOTI0NjlhNmFlXzEyLTEtMS0xLTMwMTQw_dcdcbc85-46e3-4d11-a973-ffdae0421334"
      unitRef="shares">7990</us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsForfeituresInPeriod>
    <us-gaap:ShareBasedCompensationArrangementsByShareBasedPaymentAwardOptionsForfeituresInPeriodWeightedAverageExercisePrice
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      decimals="2"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjEvZnJhZzphOTIzM2I2NjNlZmM0OGFiODQyMzM5ZmQ1YmNlZGEyYi90YWJsZToxZmExMGNlNDk3ODc0MGJkOWQ1NjI0ZTkyNDY5YTZhZS90YWJsZXJhbmdlOjFmYTEwY2U0OTc4NzQwYmQ5ZDU2MjRlOTI0NjlhNmFlXzEyLTMtMS0xLTMwMTQw_f881fb2d-3264-44d7-83a0-3bafe78663dd"
      unitRef="usdPerShare">92.48</us-gaap:ShareBasedCompensationArrangementsByShareBasedPaymentAwardOptionsForfeituresInPeriodWeightedAverageExercisePrice>
    <us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsOutstandingNumber
      contextRef="ibbc2d589a09c46368d9dd3e9ea8996c6_I20221231"
      decimals="INF"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjEvZnJhZzphOTIzM2I2NjNlZmM0OGFiODQyMzM5ZmQ1YmNlZGEyYi90YWJsZToxZmExMGNlNDk3ODc0MGJkOWQ1NjI0ZTkyNDY5YTZhZS90YWJsZXJhbmdlOjFmYTEwY2U0OTc4NzQwYmQ5ZDU2MjRlOTI0NjlhNmFlXzEzLTEtMS0xLTMwMTQw_cedfb7b9-ddb2-4777-b2b2-d9387c474c63"
      unitRef="shares">562697</us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsOutstandingNumber>
    <us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsOutstandingWeightedAverageExercisePrice
      contextRef="ibbc2d589a09c46368d9dd3e9ea8996c6_I20221231"
      decimals="2"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjEvZnJhZzphOTIzM2I2NjNlZmM0OGFiODQyMzM5ZmQ1YmNlZGEyYi90YWJsZToxZmExMGNlNDk3ODc0MGJkOWQ1NjI0ZTkyNDY5YTZhZS90YWJsZXJhbmdlOjFmYTEwY2U0OTc4NzQwYmQ5ZDU2MjRlOTI0NjlhNmFlXzEzLTMtMS0xLTMwMTQw_304c4515-68d5-41ba-a0cb-54e4058e7973"
      unitRef="usdPerShare">56.24</us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsOutstandingWeightedAverageExercisePrice>
    <us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsExercisableNumber
      contextRef="i40ef60b6644a4ef784d4e278c4730286_I20221231"
      decimals="-5"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjEvZnJhZzphOTIzM2I2NjNlZmM0OGFiODQyMzM5ZmQ1YmNlZGEyYi90ZXh0cmVnaW9uOmE5MjMzYjY2M2VmYzQ4YWI4NDIzMzlmZDViY2VkYTJiXzEwOTk1MTE2MzQ3Njg_f4d1f705-3e91-49d7-a7e6-505f56978f42"
      unitRef="shares">500000</us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsExercisableNumber>
    <us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsExercisableWeightedAverageExercisePrice
      contextRef="i40ef60b6644a4ef784d4e278c4730286_I20221231"
      decimals="2"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjEvZnJhZzphOTIzM2I2NjNlZmM0OGFiODQyMzM5ZmQ1YmNlZGEyYi90ZXh0cmVnaW9uOmE5MjMzYjY2M2VmYzQ4YWI4NDIzMzlmZDViY2VkYTJiXzEwOTk1MTE2MzQ3NzM_21faea88-fef6-42a7-96b4-de603a5021cd"
      unitRef="usdPerShare">47.80</us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsExercisableWeightedAverageExercisePrice>
    <us-gaap:SharebasedCompensationArrangementBySharebasedPaymentAwardOptionsOutstandingWeightedAverageRemainingContractualTerm2
      contextRef="i668697b955824364acb4410659743786_D20220101-20221231"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjEvZnJhZzphOTIzM2I2NjNlZmM0OGFiODQyMzM5ZmQ1YmNlZGEyYi90ZXh0cmVnaW9uOmE5MjMzYjY2M2VmYzQ4YWI4NDIzMzlmZDViY2VkYTJiXzEyMDk_b9a037be-6431-46dd-af92-cc56b35f1db2">P2Y10M24D</us-gaap:SharebasedCompensationArrangementBySharebasedPaymentAwardOptionsOutstandingWeightedAverageRemainingContractualTerm2>
    <us-gaap:ScheduleOfShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsGrantsInPeriodGrantDateIntrinsicValueTableTextBlock
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjEvZnJhZzphOTIzM2I2NjNlZmM0OGFiODQyMzM5ZmQ1YmNlZGEyYi90ZXh0cmVnaW9uOmE5MjMzYjY2M2VmYzQ4YWI4NDIzMzlmZDViY2VkYTJiXzM5OTE_d9f5c58f-8913-40ec-8056-415dddeb7db1">&lt;div style="margin-top:6pt;text-indent:27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;The table below presents additional information related to our stock options:&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-align:center"&gt;&lt;table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"&gt;&lt;tr&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:58.142%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.081%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.406%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.081%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.406%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.084%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="15" style="padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;Year Ended December 31,&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;(in thousands, except per share data)&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;2022&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;2021&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;2020&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Fair value of options vested&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;1,996&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;2,509&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;3,000&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Intrinsic value of options exercised&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;16,705&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;27,713&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;31,737&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Intrinsic value of options outstanding&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;40,692&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;66,235&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;67,918&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Weighted-average fair value per share of options granted&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;41.34&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;31.31&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;16.18&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;</us-gaap:ScheduleOfShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsGrantsInPeriodGrantDateIntrinsicValueTableTextBlock>
    <us-gaap:SharebasedCompensationArrangementBySharebasedPaymentAwardOptionsVestedInPeriodFairValue1
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjEvZnJhZzphOTIzM2I2NjNlZmM0OGFiODQyMzM5ZmQ1YmNlZGEyYi90YWJsZTplYmZjN2VlMzFkMDI0YWVlOTViMmY2YzgyMWRlZjE0NC90YWJsZXJhbmdlOmViZmM3ZWUzMWQwMjRhZWU5NWIyZjZjODIxZGVmMTQ0XzItMS0xLTEtMzAxNDA_de80d229-45d4-4019-81db-946784536348"
      unitRef="usd">1996000</us-gaap:SharebasedCompensationArrangementBySharebasedPaymentAwardOptionsVestedInPeriodFairValue1>
    <us-gaap:SharebasedCompensationArrangementBySharebasedPaymentAwardOptionsVestedInPeriodFairValue1
      contextRef="ie07f2822175c48edbb8d5559ceb82e6f_D20210101-20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjEvZnJhZzphOTIzM2I2NjNlZmM0OGFiODQyMzM5ZmQ1YmNlZGEyYi90YWJsZTplYmZjN2VlMzFkMDI0YWVlOTViMmY2YzgyMWRlZjE0NC90YWJsZXJhbmdlOmViZmM3ZWUzMWQwMjRhZWU5NWIyZjZjODIxZGVmMTQ0XzItMy0xLTEtMzAxNDA_a22c47d1-5011-4a81-83fe-b3e6372aa0cc"
      unitRef="usd">2509000</us-gaap:SharebasedCompensationArrangementBySharebasedPaymentAwardOptionsVestedInPeriodFairValue1>
    <us-gaap:SharebasedCompensationArrangementBySharebasedPaymentAwardOptionsVestedInPeriodFairValue1
      contextRef="i4751184d7e5948509cd8893fd49fb821_D20200101-20201231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjEvZnJhZzphOTIzM2I2NjNlZmM0OGFiODQyMzM5ZmQ1YmNlZGEyYi90YWJsZTplYmZjN2VlMzFkMDI0YWVlOTViMmY2YzgyMWRlZjE0NC90YWJsZXJhbmdlOmViZmM3ZWUzMWQwMjRhZWU5NWIyZjZjODIxZGVmMTQ0XzItNS0xLTEtMzAxNDA_5479134c-a2b5-4da9-85b4-4dc602738cee"
      unitRef="usd">3000000</us-gaap:SharebasedCompensationArrangementBySharebasedPaymentAwardOptionsVestedInPeriodFairValue1>
    <us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsExercisesInPeriodTotalIntrinsicValue
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjEvZnJhZzphOTIzM2I2NjNlZmM0OGFiODQyMzM5ZmQ1YmNlZGEyYi90YWJsZTplYmZjN2VlMzFkMDI0YWVlOTViMmY2YzgyMWRlZjE0NC90YWJsZXJhbmdlOmViZmM3ZWUzMWQwMjRhZWU5NWIyZjZjODIxZGVmMTQ0XzMtMS0xLTEtMzAxNDA_2683c75c-da42-424f-a18b-0310f29dc45f"
      unitRef="usd">16705000</us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsExercisesInPeriodTotalIntrinsicValue>
    <us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsExercisesInPeriodTotalIntrinsicValue
      contextRef="ie07f2822175c48edbb8d5559ceb82e6f_D20210101-20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjEvZnJhZzphOTIzM2I2NjNlZmM0OGFiODQyMzM5ZmQ1YmNlZGEyYi90YWJsZTplYmZjN2VlMzFkMDI0YWVlOTViMmY2YzgyMWRlZjE0NC90YWJsZXJhbmdlOmViZmM3ZWUzMWQwMjRhZWU5NWIyZjZjODIxZGVmMTQ0XzMtMy0xLTEtMzAxNDA_80a221fe-2820-4cd6-bda2-2e52b5ecb567"
      unitRef="usd">27713000</us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsExercisesInPeriodTotalIntrinsicValue>
    <us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsExercisesInPeriodTotalIntrinsicValue
      contextRef="i4751184d7e5948509cd8893fd49fb821_D20200101-20201231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjEvZnJhZzphOTIzM2I2NjNlZmM0OGFiODQyMzM5ZmQ1YmNlZGEyYi90YWJsZTplYmZjN2VlMzFkMDI0YWVlOTViMmY2YzgyMWRlZjE0NC90YWJsZXJhbmdlOmViZmM3ZWUzMWQwMjRhZWU5NWIyZjZjODIxZGVmMTQ0XzMtNS0xLTEtMzAxNDA_d3567090-7746-4824-8b04-79d7181adbdb"
      unitRef="usd">31737000</us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsExercisesInPeriodTotalIntrinsicValue>
    <us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsOutstandingIntrinsicValue
      contextRef="ibbc2d589a09c46368d9dd3e9ea8996c6_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjEvZnJhZzphOTIzM2I2NjNlZmM0OGFiODQyMzM5ZmQ1YmNlZGEyYi90YWJsZTplYmZjN2VlMzFkMDI0YWVlOTViMmY2YzgyMWRlZjE0NC90YWJsZXJhbmdlOmViZmM3ZWUzMWQwMjRhZWU5NWIyZjZjODIxZGVmMTQ0XzQtMS0xLTEtMzAxNDA_df51a36c-de03-4ac2-b2f6-484a7d71cef1"
      unitRef="usd">40692000</us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsOutstandingIntrinsicValue>
    <us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsOutstandingIntrinsicValue
      contextRef="i62ba0be1fd094d818a1f7d0d5504d1e2_I20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjEvZnJhZzphOTIzM2I2NjNlZmM0OGFiODQyMzM5ZmQ1YmNlZGEyYi90YWJsZTplYmZjN2VlMzFkMDI0YWVlOTViMmY2YzgyMWRlZjE0NC90YWJsZXJhbmdlOmViZmM3ZWUzMWQwMjRhZWU5NWIyZjZjODIxZGVmMTQ0XzQtMy0xLTEtMzAxNDA_01d101b5-b6e8-4dd3-935c-fd9acf05123b"
      unitRef="usd">66235000</us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsOutstandingIntrinsicValue>
    <us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsOutstandingIntrinsicValue
      contextRef="i3ead637906154a2bab043152edc06771_I20201231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjEvZnJhZzphOTIzM2I2NjNlZmM0OGFiODQyMzM5ZmQ1YmNlZGEyYi90YWJsZTplYmZjN2VlMzFkMDI0YWVlOTViMmY2YzgyMWRlZjE0NC90YWJsZXJhbmdlOmViZmM3ZWUzMWQwMjRhZWU5NWIyZjZjODIxZGVmMTQ0XzQtNS0xLTEtMzAxNDA_b2073938-78bc-4f1f-ab7b-bd1d8de00d58"
      unitRef="usd">67918000</us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsOutstandingIntrinsicValue>
    <us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsGrantsInPeriodWeightedAverageGrantDateFairValue
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      decimals="2"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjEvZnJhZzphOTIzM2I2NjNlZmM0OGFiODQyMzM5ZmQ1YmNlZGEyYi90YWJsZTplYmZjN2VlMzFkMDI0YWVlOTViMmY2YzgyMWRlZjE0NC90YWJsZXJhbmdlOmViZmM3ZWUzMWQwMjRhZWU5NWIyZjZjODIxZGVmMTQ0XzUtMS0xLTEtMzAxNDA_567b8e83-388e-4b4a-a192-03e38b9a9617"
      unitRef="usdPerShare">41.34</us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsGrantsInPeriodWeightedAverageGrantDateFairValue>
    <us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsGrantsInPeriodWeightedAverageGrantDateFairValue
      contextRef="ie07f2822175c48edbb8d5559ceb82e6f_D20210101-20211231"
      decimals="2"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjEvZnJhZzphOTIzM2I2NjNlZmM0OGFiODQyMzM5ZmQ1YmNlZGEyYi90YWJsZTplYmZjN2VlMzFkMDI0YWVlOTViMmY2YzgyMWRlZjE0NC90YWJsZXJhbmdlOmViZmM3ZWUzMWQwMjRhZWU5NWIyZjZjODIxZGVmMTQ0XzUtMy0xLTEtMzAxNDA_bd9a2798-6d37-45fd-bdee-0adfead81a5c"
      unitRef="usdPerShare">31.31</us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsGrantsInPeriodWeightedAverageGrantDateFairValue>
    <us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsGrantsInPeriodWeightedAverageGrantDateFairValue
      contextRef="i4751184d7e5948509cd8893fd49fb821_D20200101-20201231"
      decimals="2"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjEvZnJhZzphOTIzM2I2NjNlZmM0OGFiODQyMzM5ZmQ1YmNlZGEyYi90YWJsZTplYmZjN2VlMzFkMDI0YWVlOTViMmY2YzgyMWRlZjE0NC90YWJsZXJhbmdlOmViZmM3ZWUzMWQwMjRhZWU5NWIyZjZjODIxZGVmMTQ0XzUtNS0xLTEtMzAxNDA_1ffd101c-462c-4ee7-9908-2b98005ba443"
      unitRef="usdPerShare">16.18</us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsGrantsInPeriodWeightedAverageGrantDateFairValue>
    <us-gaap:ScheduleOfShareBasedPaymentAwardStockOptionsValuationAssumptionsTableTextBlock
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjEvZnJhZzphOTIzM2I2NjNlZmM0OGFiODQyMzM5ZmQ1YmNlZGEyYi90ZXh0cmVnaW9uOmE5MjMzYjY2M2VmYzQ4YWI4NDIzMzlmZDViY2VkYTJiXzM5OTY_bdf57c03-6f42-4976-89d2-cf419078587e">&lt;div style="margin-top:6pt;text-indent:27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;The fair values of the options granted were estimated on the date of grant using the Black-Scholes option pricing model with the following weighted-average assumptions:&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-align:center"&gt;&lt;table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"&gt;&lt;tr&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:56.778%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.536%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.406%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.536%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.406%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.538%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="15" style="padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;Year Ended December 31,&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;2022&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;2021&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;2020&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Life (in years)&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;4.3&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;4.4&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;4.0&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Volatility&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;38&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;%&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;35&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;%&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;33&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;%&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Dividend yield&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;&#x2014;&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;&#x2014;&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;&#x2014;&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Risk-free interest rate&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;2.50&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;%&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;0.59&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;%&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;0.99&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;%&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;</us-gaap:ScheduleOfShareBasedPaymentAwardStockOptionsValuationAssumptionsTableTextBlock>
    <us-gaap:SharebasedCompensationArrangementBySharebasedPaymentAwardFairValueAssumptionsExpectedTerm1
      contextRef="i668697b955824364acb4410659743786_D20220101-20221231"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjEvZnJhZzphOTIzM2I2NjNlZmM0OGFiODQyMzM5ZmQ1YmNlZGEyYi90YWJsZTo3ZWNjZjc3NzAyMjU0YjAxODQyZTRiMzk5YWMzZDhhYS90YWJsZXJhbmdlOjdlY2NmNzc3MDIyNTRiMDE4NDJlNGIzOTlhYzNkOGFhXzItMS0xLTEtMzAxNDA_c34ef6f7-035c-4182-863e-69cadcaed6b4">P4Y3M18D</us-gaap:SharebasedCompensationArrangementBySharebasedPaymentAwardFairValueAssumptionsExpectedTerm1>
    <us-gaap:SharebasedCompensationArrangementBySharebasedPaymentAwardFairValueAssumptionsExpectedTerm1
      contextRef="ib55a3b1782e14202bb90ddb50425a4c5_D20210101-20211231"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjEvZnJhZzphOTIzM2I2NjNlZmM0OGFiODQyMzM5ZmQ1YmNlZGEyYi90YWJsZTo3ZWNjZjc3NzAyMjU0YjAxODQyZTRiMzk5YWMzZDhhYS90YWJsZXJhbmdlOjdlY2NmNzc3MDIyNTRiMDE4NDJlNGIzOTlhYzNkOGFhXzItMy0xLTEtMzAxNDA_61fa1ab4-3a4a-4a25-b7fa-e7dd1563dc3d">P4Y4M24D</us-gaap:SharebasedCompensationArrangementBySharebasedPaymentAwardFairValueAssumptionsExpectedTerm1>
    <us-gaap:SharebasedCompensationArrangementBySharebasedPaymentAwardFairValueAssumptionsExpectedTerm1
      contextRef="i920943d4f9864f5a842c6357663b91d3_D20200101-20201231"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjEvZnJhZzphOTIzM2I2NjNlZmM0OGFiODQyMzM5ZmQ1YmNlZGEyYi90YWJsZTo3ZWNjZjc3NzAyMjU0YjAxODQyZTRiMzk5YWMzZDhhYS90YWJsZXJhbmdlOjdlY2NmNzc3MDIyNTRiMDE4NDJlNGIzOTlhYzNkOGFhXzItNS0xLTEtMzAxNDA_14517465-dce8-4274-bb3d-33c49d092e18">P4Y</us-gaap:SharebasedCompensationArrangementBySharebasedPaymentAwardFairValueAssumptionsExpectedTerm1>
    <us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardFairValueAssumptionsWeightedAverageVolatilityRate
      contextRef="i668697b955824364acb4410659743786_D20220101-20221231"
      decimals="2"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjEvZnJhZzphOTIzM2I2NjNlZmM0OGFiODQyMzM5ZmQ1YmNlZGEyYi90YWJsZTo3ZWNjZjc3NzAyMjU0YjAxODQyZTRiMzk5YWMzZDhhYS90YWJsZXJhbmdlOjdlY2NmNzc3MDIyNTRiMDE4NDJlNGIzOTlhYzNkOGFhXzMtMS0xLTEtMzAxNDA_b425677e-afd7-4357-94aa-1f97efb9387e"
      unitRef="number">0.38</us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardFairValueAssumptionsWeightedAverageVolatilityRate>
    <us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardFairValueAssumptionsWeightedAverageVolatilityRate
      contextRef="ib55a3b1782e14202bb90ddb50425a4c5_D20210101-20211231"
      decimals="2"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjEvZnJhZzphOTIzM2I2NjNlZmM0OGFiODQyMzM5ZmQ1YmNlZGEyYi90YWJsZTo3ZWNjZjc3NzAyMjU0YjAxODQyZTRiMzk5YWMzZDhhYS90YWJsZXJhbmdlOjdlY2NmNzc3MDIyNTRiMDE4NDJlNGIzOTlhYzNkOGFhXzMtMy0xLTEtMzAxNDA_a464ebca-4ba1-487c-85e0-f61a4883d68d"
      unitRef="number">0.35</us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardFairValueAssumptionsWeightedAverageVolatilityRate>
    <us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardFairValueAssumptionsWeightedAverageVolatilityRate
      contextRef="i920943d4f9864f5a842c6357663b91d3_D20200101-20201231"
      decimals="2"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjEvZnJhZzphOTIzM2I2NjNlZmM0OGFiODQyMzM5ZmQ1YmNlZGEyYi90YWJsZTo3ZWNjZjc3NzAyMjU0YjAxODQyZTRiMzk5YWMzZDhhYS90YWJsZXJhbmdlOjdlY2NmNzc3MDIyNTRiMDE4NDJlNGIzOTlhYzNkOGFhXzMtNS0xLTEtMzAxNDA_7b71f1c7-77bc-42e6-8d43-fe10ba065610"
      unitRef="number">0.33</us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardFairValueAssumptionsWeightedAverageVolatilityRate>
    <us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardFairValueAssumptionsExpectedDividendRate
      contextRef="i668697b955824364acb4410659743786_D20220101-20221231"
      decimals="2"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjEvZnJhZzphOTIzM2I2NjNlZmM0OGFiODQyMzM5ZmQ1YmNlZGEyYi90YWJsZTo3ZWNjZjc3NzAyMjU0YjAxODQyZTRiMzk5YWMzZDhhYS90YWJsZXJhbmdlOjdlY2NmNzc3MDIyNTRiMDE4NDJlNGIzOTlhYzNkOGFhXzQtMS0xLTEtMzAxNDA_ac207a3d-dec4-4dc6-9474-1d18d26f5d3f"
      unitRef="number">0</us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardFairValueAssumptionsExpectedDividendRate>
    <us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardFairValueAssumptionsExpectedDividendRate
      contextRef="ib55a3b1782e14202bb90ddb50425a4c5_D20210101-20211231"
      decimals="2"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjEvZnJhZzphOTIzM2I2NjNlZmM0OGFiODQyMzM5ZmQ1YmNlZGEyYi90YWJsZTo3ZWNjZjc3NzAyMjU0YjAxODQyZTRiMzk5YWMzZDhhYS90YWJsZXJhbmdlOjdlY2NmNzc3MDIyNTRiMDE4NDJlNGIzOTlhYzNkOGFhXzQtMy0xLTEtMzAxNDA_0b194d69-8c5d-45b3-bd54-b9e9a8d34756"
      unitRef="number">0</us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardFairValueAssumptionsExpectedDividendRate>
    <us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardFairValueAssumptionsExpectedDividendRate
      contextRef="i920943d4f9864f5a842c6357663b91d3_D20200101-20201231"
      decimals="2"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjEvZnJhZzphOTIzM2I2NjNlZmM0OGFiODQyMzM5ZmQ1YmNlZGEyYi90YWJsZTo3ZWNjZjc3NzAyMjU0YjAxODQyZTRiMzk5YWMzZDhhYS90YWJsZXJhbmdlOjdlY2NmNzc3MDIyNTRiMDE4NDJlNGIzOTlhYzNkOGFhXzQtNS0xLTEtMzAxNDA_592ae93e-e1aa-49c2-9862-696478365f5d"
      unitRef="number">0</us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardFairValueAssumptionsExpectedDividendRate>
    <us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardFairValueAssumptionsRiskFreeInterestRate
      contextRef="i668697b955824364acb4410659743786_D20220101-20221231"
      decimals="4"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjEvZnJhZzphOTIzM2I2NjNlZmM0OGFiODQyMzM5ZmQ1YmNlZGEyYi90YWJsZTo3ZWNjZjc3NzAyMjU0YjAxODQyZTRiMzk5YWMzZDhhYS90YWJsZXJhbmdlOjdlY2NmNzc3MDIyNTRiMDE4NDJlNGIzOTlhYzNkOGFhXzUtMS0xLTEtMzAxNDA_f77a8ecd-19b2-4f82-9737-f6d913347f88"
      unitRef="number">0.0250</us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardFairValueAssumptionsRiskFreeInterestRate>
    <us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardFairValueAssumptionsRiskFreeInterestRate
      contextRef="ib55a3b1782e14202bb90ddb50425a4c5_D20210101-20211231"
      decimals="4"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjEvZnJhZzphOTIzM2I2NjNlZmM0OGFiODQyMzM5ZmQ1YmNlZGEyYi90YWJsZTo3ZWNjZjc3NzAyMjU0YjAxODQyZTRiMzk5YWMzZDhhYS90YWJsZXJhbmdlOjdlY2NmNzc3MDIyNTRiMDE4NDJlNGIzOTlhYzNkOGFhXzUtMy0xLTEtMzAxNDA_fccf5d7d-b997-4a77-ae02-118c3af29efd"
      unitRef="number">0.0059</us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardFairValueAssumptionsRiskFreeInterestRate>
    <us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardFairValueAssumptionsRiskFreeInterestRate
      contextRef="i920943d4f9864f5a842c6357663b91d3_D20200101-20201231"
      decimals="4"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjEvZnJhZzphOTIzM2I2NjNlZmM0OGFiODQyMzM5ZmQ1YmNlZGEyYi90YWJsZTo3ZWNjZjc3NzAyMjU0YjAxODQyZTRiMzk5YWMzZDhhYS90YWJsZXJhbmdlOjdlY2NmNzc3MDIyNTRiMDE4NDJlNGIzOTlhYzNkOGFhXzUtNS0xLTEtMzAxNDA_276220ea-2568-49c4-8909-c0aedd302257"
      unitRef="number">0.0099</us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardFairValueAssumptionsRiskFreeInterestRate>
    <us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardAwardVestingPeriod1
      contextRef="ibfd28c67afa246bca4469928aa2fd201_D20220101-20221231"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjEvZnJhZzphOTIzM2I2NjNlZmM0OGFiODQyMzM5ZmQ1YmNlZGEyYi90ZXh0cmVnaW9uOmE5MjMzYjY2M2VmYzQ4YWI4NDIzMzlmZDViY2VkYTJiXzI3NDg3NzkwNzc4OTc_c75c6e90-596e-448a-af94-6c3036140339">P3Y</us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardAwardVestingPeriod1>
    <us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardAwardVestingPeriod1
      contextRef="ia458266eacef419e8f4b7a9d97fe7fdc_D20200101-20201231"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjEvZnJhZzphOTIzM2I2NjNlZmM0OGFiODQyMzM5ZmQ1YmNlZGEyYi90ZXh0cmVnaW9uOmE5MjMzYjY2M2VmYzQ4YWI4NDIzMzlmZDViY2VkYTJiXzI3NDg3NzkwNzc4OTc_d8ea91f0-4bc9-4fbd-894e-2679d2d29fb6">P3Y</us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardAwardVestingPeriod1>
    <us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardAwardVestingPeriod1
      contextRef="i84af72d294b94d2c9e63260f4d02e6af_D20210101-20211231"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjEvZnJhZzphOTIzM2I2NjNlZmM0OGFiODQyMzM5ZmQ1YmNlZGEyYi90ZXh0cmVnaW9uOmE5MjMzYjY2M2VmYzQ4YWI4NDIzMzlmZDViY2VkYTJiXzI3NDg3NzkwNzc4OTc_e6d6c7a5-66ea-4d2b-a834-6c0f899f41e0">P3Y</us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardAwardVestingPeriod1>
    <us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardSharesIssuedInPeriod
      contextRef="ibfd28c67afa246bca4469928aa2fd201_D20220101-20221231"
      decimals="-5"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjEvZnJhZzphOTIzM2I2NjNlZmM0OGFiODQyMzM5ZmQ1YmNlZGEyYi90ZXh0cmVnaW9uOmE5MjMzYjY2M2VmYzQ4YWI4NDIzMzlmZDViY2VkYTJiXzI3NDg3NzkwNzc4NzE_def993d8-d834-4f94-8fbc-6776af5ec957"
      unitRef="shares">100000</us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardSharesIssuedInPeriod>
    <us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardAwardVestingPeriod1
      contextRef="i7f3127aa3db047ad8db0a96d621098d1_D20220101-20221231"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjEvZnJhZzphOTIzM2I2NjNlZmM0OGFiODQyMzM5ZmQ1YmNlZGEyYi90ZXh0cmVnaW9uOmE5MjMzYjY2M2VmYzQ4YWI4NDIzMzlmZDViY2VkYTJiXzI3NDg3NzkwNzc4OTg_3c3805a1-a6b5-4694-a4e4-75f6e8698a17">P4Y</us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardAwardVestingPeriod1>
    <us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardAwardVestingPeriod1
      contextRef="i7adcb87dd5a64ede8a1a1fdb2ed5249c_D20220101-20221231"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjEvZnJhZzphOTIzM2I2NjNlZmM0OGFiODQyMzM5ZmQ1YmNlZGEyYi90ZXh0cmVnaW9uOmE5MjMzYjY2M2VmYzQ4YWI4NDIzMzlmZDViY2VkYTJiXzI3NDg3NzkwNzc5MjE_1b4b54f1-21e6-4865-9eea-5d8c78e6f05b">P1Y</us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardAwardVestingPeriod1>
    <us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardAwardVestingPeriod1
      contextRef="idd93ad7da3684ef8a482684f78a4c398_D20220101-20221231"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjEvZnJhZzphOTIzM2I2NjNlZmM0OGFiODQyMzM5ZmQ1YmNlZGEyYi90ZXh0cmVnaW9uOmE5MjMzYjY2M2VmYzQ4YWI4NDIzMzlmZDViY2VkYTJiXzI3NDg3NzkwNzc5MjI_a4f91351-7e8c-4f99-ae68-367917e57b76">P1Y</us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardAwardVestingPeriod1>
    <spsc:ShareBasedCompensationArrangementByShareBasedPaymentAwardAwardReceiptDelay
      contextRef="idd93ad7da3684ef8a482684f78a4c398_D20220101-20221231"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjEvZnJhZzphOTIzM2I2NjNlZmM0OGFiODQyMzM5ZmQ1YmNlZGEyYi90ZXh0cmVnaW9uOmE5MjMzYjY2M2VmYzQ4YWI4NDIzMzlmZDViY2VkYTJiXzI3NDg3NzkwNzc5MjM_0b3fa66f-a2a6-4e17-9252-e0af5132cea7">P10Y</spsc:ShareBasedCompensationArrangementByShareBasedPaymentAwardAwardReceiptDelay>
    <us-gaap:ScheduleOfSharebasedCompensationRestrictedStockAndRestrictedStockUnitsActivityTableTextBlock
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjEvZnJhZzphOTIzM2I2NjNlZmM0OGFiODQyMzM5ZmQ1YmNlZGEyYi90ZXh0cmVnaW9uOmE5MjMzYjY2M2VmYzQ4YWI4NDIzMzlmZDViY2VkYTJiXzM5OTM_b2de6dec-c42d-42a4-8c78-701c51a874db">&lt;div style="margin-top:6pt;text-indent:27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;Activity for our PSUs, RSUs, RSAs, and DSUs in aggregate was as follows:&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-align:center"&gt;&lt;table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"&gt;&lt;tr&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:71.930%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.081%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.406%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.083%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="3" style="padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;(#) &lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="3" style="padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;Weighted Average&lt;br/&gt;Grant Date Fair&lt;br/&gt;Value ($/share)&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Outstanding at December 31, 2019&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;797,546&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;38.80&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Granted&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;331,264&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;62.78&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Vested and common stock issued&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;(222,606)&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;36.06&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Forfeited&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;(167,782)&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;30.09&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Outstanding at December 31, 2020&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;738,422&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;52.37&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Granted&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;314,290&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;101.85&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Vested and common stock issued&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;(331,669)&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;44.14&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Forfeited&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;(18,883)&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;66.35&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Outstanding at December 31, 2021&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;702,160&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;78.03&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Granted&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;312,880&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;126.44&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Vested and common stock issued&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;(276,872)&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;64.12&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Forfeited&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;(26,010)&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;99.37&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Outstanding at December 31, 2022&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;712,158&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;103.93&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;</us-gaap:ScheduleOfSharebasedCompensationRestrictedStockAndRestrictedStockUnitsActivityTableTextBlock>
    <us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsNonvestedNumber
      contextRef="i93f4250296734b3daa16e2e1a98529e1_I20191231"
      decimals="INF"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjEvZnJhZzphOTIzM2I2NjNlZmM0OGFiODQyMzM5ZmQ1YmNlZGEyYi90YWJsZTpmNWI5MDY0ZDM2YTQ0MDA4OTcyMDVmZTE0NWE0ZjI2Yy90YWJsZXJhbmdlOmY1YjkwNjRkMzZhNDQwMDg5NzIwNWZlMTQ1YTRmMjZjXzEtMS0xLTEtMzAxNDA_b2ac774e-2380-41c1-91e8-965285f9b6a1"
      unitRef="shares">797546</us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsNonvestedNumber>
    <us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsNonvestedWeightedAverageGrantDateFairValue
      contextRef="i93f4250296734b3daa16e2e1a98529e1_I20191231"
      decimals="2"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjEvZnJhZzphOTIzM2I2NjNlZmM0OGFiODQyMzM5ZmQ1YmNlZGEyYi90YWJsZTpmNWI5MDY0ZDM2YTQ0MDA4OTcyMDVmZTE0NWE0ZjI2Yy90YWJsZXJhbmdlOmY1YjkwNjRkMzZhNDQwMDg5NzIwNWZlMTQ1YTRmMjZjXzEtMy0xLTEtMzAxNDA_4a4b5345-0cf8-4692-b1b2-e246b90817b6"
      unitRef="usdPerShare">38.80</us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsNonvestedWeightedAverageGrantDateFairValue>
    <us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsGrantsInPeriod
      contextRef="ia2f6ad9f292e4946b9b4d8defe2de4ca_D20200101-20201231"
      decimals="INF"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjEvZnJhZzphOTIzM2I2NjNlZmM0OGFiODQyMzM5ZmQ1YmNlZGEyYi90YWJsZTpmNWI5MDY0ZDM2YTQ0MDA4OTcyMDVmZTE0NWE0ZjI2Yy90YWJsZXJhbmdlOmY1YjkwNjRkMzZhNDQwMDg5NzIwNWZlMTQ1YTRmMjZjXzItMS0xLTEtMzAxNDA_796a7b2a-2e10-4c00-9bd5-dfd94c517395"
      unitRef="shares">331264</us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsGrantsInPeriod>
    <us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsGrantsInPeriodWeightedAverageGrantDateFairValue
      contextRef="ia2f6ad9f292e4946b9b4d8defe2de4ca_D20200101-20201231"
      decimals="2"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjEvZnJhZzphOTIzM2I2NjNlZmM0OGFiODQyMzM5ZmQ1YmNlZGEyYi90YWJsZTpmNWI5MDY0ZDM2YTQ0MDA4OTcyMDVmZTE0NWE0ZjI2Yy90YWJsZXJhbmdlOmY1YjkwNjRkMzZhNDQwMDg5NzIwNWZlMTQ1YTRmMjZjXzItMy0xLTEtMzAxNDA_d0dae6e7-3bae-45af-b7a1-15aaa9a2e4b3"
      unitRef="usdPerShare">62.78</us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsGrantsInPeriodWeightedAverageGrantDateFairValue>
    <us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsVestedInPeriod
      contextRef="ia2f6ad9f292e4946b9b4d8defe2de4ca_D20200101-20201231"
      decimals="INF"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjEvZnJhZzphOTIzM2I2NjNlZmM0OGFiODQyMzM5ZmQ1YmNlZGEyYi90YWJsZTpmNWI5MDY0ZDM2YTQ0MDA4OTcyMDVmZTE0NWE0ZjI2Yy90YWJsZXJhbmdlOmY1YjkwNjRkMzZhNDQwMDg5NzIwNWZlMTQ1YTRmMjZjXzMtMS0xLTEtMzAxNDA_32d09d1c-641f-4103-8010-0b43be9451a8"
      unitRef="shares">222606</us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsVestedInPeriod>
    <us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsVestedInPeriodWeightedAverageGrantDateFairValue
      contextRef="ia2f6ad9f292e4946b9b4d8defe2de4ca_D20200101-20201231"
      decimals="2"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjEvZnJhZzphOTIzM2I2NjNlZmM0OGFiODQyMzM5ZmQ1YmNlZGEyYi90YWJsZTpmNWI5MDY0ZDM2YTQ0MDA4OTcyMDVmZTE0NWE0ZjI2Yy90YWJsZXJhbmdlOmY1YjkwNjRkMzZhNDQwMDg5NzIwNWZlMTQ1YTRmMjZjXzMtMy0xLTEtMzAxNDA_e742e521-8cec-4280-8ae1-9f2578a781e3"
      unitRef="usdPerShare">36.06</us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsVestedInPeriodWeightedAverageGrantDateFairValue>
    <us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsForfeitedInPeriod
      contextRef="ia2f6ad9f292e4946b9b4d8defe2de4ca_D20200101-20201231"
      decimals="INF"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjEvZnJhZzphOTIzM2I2NjNlZmM0OGFiODQyMzM5ZmQ1YmNlZGEyYi90YWJsZTpmNWI5MDY0ZDM2YTQ0MDA4OTcyMDVmZTE0NWE0ZjI2Yy90YWJsZXJhbmdlOmY1YjkwNjRkMzZhNDQwMDg5NzIwNWZlMTQ1YTRmMjZjXzQtMS0xLTEtMzAxNDA_178bf464-5248-45c8-a560-cf0589106c17"
      unitRef="shares">167782</us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsForfeitedInPeriod>
    <us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsForfeituresWeightedAverageGrantDateFairValue
      contextRef="ia2f6ad9f292e4946b9b4d8defe2de4ca_D20200101-20201231"
      decimals="2"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjEvZnJhZzphOTIzM2I2NjNlZmM0OGFiODQyMzM5ZmQ1YmNlZGEyYi90YWJsZTpmNWI5MDY0ZDM2YTQ0MDA4OTcyMDVmZTE0NWE0ZjI2Yy90YWJsZXJhbmdlOmY1YjkwNjRkMzZhNDQwMDg5NzIwNWZlMTQ1YTRmMjZjXzQtMy0xLTEtMzAxNDA_462cec0c-31d9-4fe2-8fb6-a054fcec593a"
      unitRef="usdPerShare">30.09</us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsForfeituresWeightedAverageGrantDateFairValue>
    <us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsNonvestedNumber
      contextRef="i8cf8e7b12f5e4aab8628360924e5765c_I20201231"
      decimals="INF"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjEvZnJhZzphOTIzM2I2NjNlZmM0OGFiODQyMzM5ZmQ1YmNlZGEyYi90YWJsZTpmNWI5MDY0ZDM2YTQ0MDA4OTcyMDVmZTE0NWE0ZjI2Yy90YWJsZXJhbmdlOmY1YjkwNjRkMzZhNDQwMDg5NzIwNWZlMTQ1YTRmMjZjXzUtMS0xLTEtMzAxNDA_fcb25b06-957d-4885-a346-a9e78224267e"
      unitRef="shares">738422</us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsNonvestedNumber>
    <us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsNonvestedWeightedAverageGrantDateFairValue
      contextRef="i8cf8e7b12f5e4aab8628360924e5765c_I20201231"
      decimals="2"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjEvZnJhZzphOTIzM2I2NjNlZmM0OGFiODQyMzM5ZmQ1YmNlZGEyYi90YWJsZTpmNWI5MDY0ZDM2YTQ0MDA4OTcyMDVmZTE0NWE0ZjI2Yy90YWJsZXJhbmdlOmY1YjkwNjRkMzZhNDQwMDg5NzIwNWZlMTQ1YTRmMjZjXzUtMy0xLTEtMzAxNDA_3705aa10-0724-4a7f-82a7-cf8eec5b0180"
      unitRef="usdPerShare">52.37</us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsNonvestedWeightedAverageGrantDateFairValue>
    <us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsGrantsInPeriod
      contextRef="i3efe46f18cef49ff9ea1f7025516328b_D20210101-20211231"
      decimals="INF"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjEvZnJhZzphOTIzM2I2NjNlZmM0OGFiODQyMzM5ZmQ1YmNlZGEyYi90YWJsZTpmNWI5MDY0ZDM2YTQ0MDA4OTcyMDVmZTE0NWE0ZjI2Yy90YWJsZXJhbmdlOmY1YjkwNjRkMzZhNDQwMDg5NzIwNWZlMTQ1YTRmMjZjXzYtMS0xLTEtMzAxNDA_b2086316-475a-4b34-a380-c75c08546888"
      unitRef="shares">314290</us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsGrantsInPeriod>
    <us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsGrantsInPeriodWeightedAverageGrantDateFairValue
      contextRef="i3efe46f18cef49ff9ea1f7025516328b_D20210101-20211231"
      decimals="2"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjEvZnJhZzphOTIzM2I2NjNlZmM0OGFiODQyMzM5ZmQ1YmNlZGEyYi90YWJsZTpmNWI5MDY0ZDM2YTQ0MDA4OTcyMDVmZTE0NWE0ZjI2Yy90YWJsZXJhbmdlOmY1YjkwNjRkMzZhNDQwMDg5NzIwNWZlMTQ1YTRmMjZjXzYtMy0xLTEtMzAxNDA_62deece7-9ce0-47d9-91cd-ac4ec9bd2d39"
      unitRef="usdPerShare">101.85</us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsGrantsInPeriodWeightedAverageGrantDateFairValue>
    <us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsVestedInPeriod
      contextRef="i3efe46f18cef49ff9ea1f7025516328b_D20210101-20211231"
      decimals="INF"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjEvZnJhZzphOTIzM2I2NjNlZmM0OGFiODQyMzM5ZmQ1YmNlZGEyYi90YWJsZTpmNWI5MDY0ZDM2YTQ0MDA4OTcyMDVmZTE0NWE0ZjI2Yy90YWJsZXJhbmdlOmY1YjkwNjRkMzZhNDQwMDg5NzIwNWZlMTQ1YTRmMjZjXzctMS0xLTEtMzAxNDA_ccb6880d-0036-405e-8b0b-062b5d839282"
      unitRef="shares">331669</us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsVestedInPeriod>
    <us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsVestedInPeriodWeightedAverageGrantDateFairValue
      contextRef="i3efe46f18cef49ff9ea1f7025516328b_D20210101-20211231"
      decimals="2"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjEvZnJhZzphOTIzM2I2NjNlZmM0OGFiODQyMzM5ZmQ1YmNlZGEyYi90YWJsZTpmNWI5MDY0ZDM2YTQ0MDA4OTcyMDVmZTE0NWE0ZjI2Yy90YWJsZXJhbmdlOmY1YjkwNjRkMzZhNDQwMDg5NzIwNWZlMTQ1YTRmMjZjXzctMy0xLTEtMzAxNDA_83517891-508e-4e59-bc09-eea574aa9142"
      unitRef="usdPerShare">44.14</us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsVestedInPeriodWeightedAverageGrantDateFairValue>
    <us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsForfeitedInPeriod
      contextRef="i3efe46f18cef49ff9ea1f7025516328b_D20210101-20211231"
      decimals="INF"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjEvZnJhZzphOTIzM2I2NjNlZmM0OGFiODQyMzM5ZmQ1YmNlZGEyYi90YWJsZTpmNWI5MDY0ZDM2YTQ0MDA4OTcyMDVmZTE0NWE0ZjI2Yy90YWJsZXJhbmdlOmY1YjkwNjRkMzZhNDQwMDg5NzIwNWZlMTQ1YTRmMjZjXzgtMS0xLTEtMzAxNDA_7eb1b1e0-038a-4757-8499-4fd00cdfe32a"
      unitRef="shares">18883</us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsForfeitedInPeriod>
    <us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsForfeituresWeightedAverageGrantDateFairValue
      contextRef="i3efe46f18cef49ff9ea1f7025516328b_D20210101-20211231"
      decimals="2"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjEvZnJhZzphOTIzM2I2NjNlZmM0OGFiODQyMzM5ZmQ1YmNlZGEyYi90YWJsZTpmNWI5MDY0ZDM2YTQ0MDA4OTcyMDVmZTE0NWE0ZjI2Yy90YWJsZXJhbmdlOmY1YjkwNjRkMzZhNDQwMDg5NzIwNWZlMTQ1YTRmMjZjXzgtMy0xLTEtMzAxNDA_c01210ea-d0ad-4738-a142-abf0bb9717ae"
      unitRef="usdPerShare">66.35</us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsForfeituresWeightedAverageGrantDateFairValue>
    <us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsNonvestedNumber
      contextRef="i45a3404e520b4fa3ae3507b1d7d564ac_I20211231"
      decimals="INF"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjEvZnJhZzphOTIzM2I2NjNlZmM0OGFiODQyMzM5ZmQ1YmNlZGEyYi90YWJsZTpmNWI5MDY0ZDM2YTQ0MDA4OTcyMDVmZTE0NWE0ZjI2Yy90YWJsZXJhbmdlOmY1YjkwNjRkMzZhNDQwMDg5NzIwNWZlMTQ1YTRmMjZjXzktMS0xLTEtMzAxNDA_f3cea864-8dcf-4463-9a7f-f807bfbefd64"
      unitRef="shares">702160</us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsNonvestedNumber>
    <us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsNonvestedWeightedAverageGrantDateFairValue
      contextRef="i45a3404e520b4fa3ae3507b1d7d564ac_I20211231"
      decimals="2"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjEvZnJhZzphOTIzM2I2NjNlZmM0OGFiODQyMzM5ZmQ1YmNlZGEyYi90YWJsZTpmNWI5MDY0ZDM2YTQ0MDA4OTcyMDVmZTE0NWE0ZjI2Yy90YWJsZXJhbmdlOmY1YjkwNjRkMzZhNDQwMDg5NzIwNWZlMTQ1YTRmMjZjXzktMy0xLTEtMzAxNDA_9dd05b68-f1df-4847-a499-da97ad84b21a"
      unitRef="usdPerShare">78.03</us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsNonvestedWeightedAverageGrantDateFairValue>
    <us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsGrantsInPeriod
      contextRef="i85c0dfe8fb5c4b8e9ea871b559e35156_D20220101-20221231"
      decimals="INF"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjEvZnJhZzphOTIzM2I2NjNlZmM0OGFiODQyMzM5ZmQ1YmNlZGEyYi90YWJsZTpmNWI5MDY0ZDM2YTQ0MDA4OTcyMDVmZTE0NWE0ZjI2Yy90YWJsZXJhbmdlOmY1YjkwNjRkMzZhNDQwMDg5NzIwNWZlMTQ1YTRmMjZjXzEwLTEtMS0xLTMwMTQw_9d3db479-9105-419d-b711-bf750a098015"
      unitRef="shares">312880</us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsGrantsInPeriod>
    <us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsGrantsInPeriodWeightedAverageGrantDateFairValue
      contextRef="i85c0dfe8fb5c4b8e9ea871b559e35156_D20220101-20221231"
      decimals="2"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjEvZnJhZzphOTIzM2I2NjNlZmM0OGFiODQyMzM5ZmQ1YmNlZGEyYi90YWJsZTpmNWI5MDY0ZDM2YTQ0MDA4OTcyMDVmZTE0NWE0ZjI2Yy90YWJsZXJhbmdlOmY1YjkwNjRkMzZhNDQwMDg5NzIwNWZlMTQ1YTRmMjZjXzEwLTMtMS0xLTMwMTQw_fe765a7f-326d-49be-8446-aeb3f1840d3e"
      unitRef="usdPerShare">126.44</us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsGrantsInPeriodWeightedAverageGrantDateFairValue>
    <us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsVestedInPeriod
      contextRef="i85c0dfe8fb5c4b8e9ea871b559e35156_D20220101-20221231"
      decimals="INF"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjEvZnJhZzphOTIzM2I2NjNlZmM0OGFiODQyMzM5ZmQ1YmNlZGEyYi90YWJsZTpmNWI5MDY0ZDM2YTQ0MDA4OTcyMDVmZTE0NWE0ZjI2Yy90YWJsZXJhbmdlOmY1YjkwNjRkMzZhNDQwMDg5NzIwNWZlMTQ1YTRmMjZjXzExLTEtMS0xLTMwMTQw_b099d9b9-7c8d-4243-82fa-dc4403a80d20"
      unitRef="shares">276872</us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsVestedInPeriod>
    <us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsVestedInPeriodWeightedAverageGrantDateFairValue
      contextRef="i85c0dfe8fb5c4b8e9ea871b559e35156_D20220101-20221231"
      decimals="2"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjEvZnJhZzphOTIzM2I2NjNlZmM0OGFiODQyMzM5ZmQ1YmNlZGEyYi90YWJsZTpmNWI5MDY0ZDM2YTQ0MDA4OTcyMDVmZTE0NWE0ZjI2Yy90YWJsZXJhbmdlOmY1YjkwNjRkMzZhNDQwMDg5NzIwNWZlMTQ1YTRmMjZjXzExLTMtMS0xLTMwMTQw_db313e82-247c-457b-b2fc-bdfb9fc666b3"
      unitRef="usdPerShare">64.12</us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsVestedInPeriodWeightedAverageGrantDateFairValue>
    <us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsForfeitedInPeriod
      contextRef="i85c0dfe8fb5c4b8e9ea871b559e35156_D20220101-20221231"
      decimals="INF"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjEvZnJhZzphOTIzM2I2NjNlZmM0OGFiODQyMzM5ZmQ1YmNlZGEyYi90YWJsZTpmNWI5MDY0ZDM2YTQ0MDA4OTcyMDVmZTE0NWE0ZjI2Yy90YWJsZXJhbmdlOmY1YjkwNjRkMzZhNDQwMDg5NzIwNWZlMTQ1YTRmMjZjXzEyLTEtMS0xLTMwMTQw_87c60618-6ba0-44ce-a3f2-d11a0bd71e7a"
      unitRef="shares">26010</us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsForfeitedInPeriod>
    <us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsForfeituresWeightedAverageGrantDateFairValue
      contextRef="i85c0dfe8fb5c4b8e9ea871b559e35156_D20220101-20221231"
      decimals="2"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjEvZnJhZzphOTIzM2I2NjNlZmM0OGFiODQyMzM5ZmQ1YmNlZGEyYi90YWJsZTpmNWI5MDY0ZDM2YTQ0MDA4OTcyMDVmZTE0NWE0ZjI2Yy90YWJsZXJhbmdlOmY1YjkwNjRkMzZhNDQwMDg5NzIwNWZlMTQ1YTRmMjZjXzEyLTMtMS0xLTMwMTQw_13555bd2-315d-464d-9f70-423e273b1aec"
      unitRef="usdPerShare">99.37</us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsForfeituresWeightedAverageGrantDateFairValue>
    <us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsNonvestedNumber
      contextRef="i33424d94ff144bd5b36f3b0970257e14_I20221231"
      decimals="INF"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjEvZnJhZzphOTIzM2I2NjNlZmM0OGFiODQyMzM5ZmQ1YmNlZGEyYi90YWJsZTpmNWI5MDY0ZDM2YTQ0MDA4OTcyMDVmZTE0NWE0ZjI2Yy90YWJsZXJhbmdlOmY1YjkwNjRkMzZhNDQwMDg5NzIwNWZlMTQ1YTRmMjZjXzEzLTEtMS0xLTMwMTQw_eabe602c-fbaa-4b90-bace-794ba957fc9f"
      unitRef="shares">712158</us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsNonvestedNumber>
    <us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsNonvestedWeightedAverageGrantDateFairValue
      contextRef="i33424d94ff144bd5b36f3b0970257e14_I20221231"
      decimals="2"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjEvZnJhZzphOTIzM2I2NjNlZmM0OGFiODQyMzM5ZmQ1YmNlZGEyYi90YWJsZTpmNWI5MDY0ZDM2YTQ0MDA4OTcyMDVmZTE0NWE0ZjI2Yy90YWJsZXJhbmdlOmY1YjkwNjRkMzZhNDQwMDg5NzIwNWZlMTQ1YTRmMjZjXzEzLTMtMS0xLTMwMTQw_47b96595-71ce-4773-99ca-5f0362d98504"
      unitRef="usdPerShare">103.93</us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsNonvestedWeightedAverageGrantDateFairValue>
    <spsc:ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsVestedAtPeriodEnd
      contextRef="i91d4f7c1beed472aa2b61cd57299c320_I20221231"
      decimals="-5"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjEvZnJhZzphOTIzM2I2NjNlZmM0OGFiODQyMzM5ZmQ1YmNlZGEyYi90ZXh0cmVnaW9uOmE5MjMzYjY2M2VmYzQ4YWI4NDIzMzlmZDViY2VkYTJiXzEwOTk1MTE2MzUyNDQ_a42e774a-0861-4ac7-8f91-e4d4df8b1318"
      unitRef="shares">100000</spsc:ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsVestedAtPeriodEnd>
    <us-gaap:ScheduleOfShareBasedCompensationEmployeeStockPurchasePlanActivityTableTextBlock
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjEvZnJhZzphOTIzM2I2NjNlZmM0OGFiODQyMzM5ZmQ1YmNlZGEyYi90ZXh0cmVnaW9uOmE5MjMzYjY2M2VmYzQ4YWI4NDIzMzlmZDViY2VkYTJiXzM5OTg_3d2f3f1b-fea2-49c6-9bc1-3f067a0248a6">&lt;div style="margin-top:6pt;text-indent:27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;Our ESPP activity was as follows: &lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-align:center"&gt;&lt;table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"&gt;&lt;tr&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:58.142%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.081%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.406%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.081%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.406%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.084%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="15" style="padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;Year Ended December 31,&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;(in thousands, except share data)&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;2022&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;2021&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;2020&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Amounts for shares purchased&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;6,676&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;4,737&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;3,374&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Shares purchased&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;70,107&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;55,726&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;61,833&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;</us-gaap:ScheduleOfShareBasedCompensationEmployeeStockPurchasePlanActivityTableTextBlock>
    <spsc:ShareBasedCompensationArrangementByShareBasedPaymentAwardValuePurchasedForAward
      contextRef="i331c92f0ff404ce48d0292134aaf6abd_D20220101-20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjEvZnJhZzphOTIzM2I2NjNlZmM0OGFiODQyMzM5ZmQ1YmNlZGEyYi90YWJsZTo5N2Q5OGJmMjgzOTY0YzgyOGFlMTk0MDAyYTAzZDcyOS90YWJsZXJhbmdlOjk3ZDk4YmYyODM5NjRjODI4YWUxOTQwMDJhMDNkNzI5XzItMS0xLTEtMzAxNDA_6e8f49b4-023d-4eaf-aca9-6f79d3315d8b"
      unitRef="usd">6676000</spsc:ShareBasedCompensationArrangementByShareBasedPaymentAwardValuePurchasedForAward>
    <spsc:ShareBasedCompensationArrangementByShareBasedPaymentAwardValuePurchasedForAward
      contextRef="i3e865a2d9f164593955686e10738f095_D20210101-20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjEvZnJhZzphOTIzM2I2NjNlZmM0OGFiODQyMzM5ZmQ1YmNlZGEyYi90YWJsZTo5N2Q5OGJmMjgzOTY0YzgyOGFlMTk0MDAyYTAzZDcyOS90YWJsZXJhbmdlOjk3ZDk4YmYyODM5NjRjODI4YWUxOTQwMDJhMDNkNzI5XzItMy0xLTEtMzAxNDA_8ab4cd57-b529-41c0-b06c-94301eb374ee"
      unitRef="usd">4737000</spsc:ShareBasedCompensationArrangementByShareBasedPaymentAwardValuePurchasedForAward>
    <spsc:ShareBasedCompensationArrangementByShareBasedPaymentAwardValuePurchasedForAward
      contextRef="id1243a41f69043efac5c8ad76e73c4c6_D20200101-20201231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjEvZnJhZzphOTIzM2I2NjNlZmM0OGFiODQyMzM5ZmQ1YmNlZGEyYi90YWJsZTo5N2Q5OGJmMjgzOTY0YzgyOGFlMTk0MDAyYTAzZDcyOS90YWJsZXJhbmdlOjk3ZDk4YmYyODM5NjRjODI4YWUxOTQwMDJhMDNkNzI5XzItNS0xLTEtMzAxNDA_bcc9b5ec-3a81-4f10-bc3f-524f9bee3ec5"
      unitRef="usd">3374000</spsc:ShareBasedCompensationArrangementByShareBasedPaymentAwardValuePurchasedForAward>
    <us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardSharesPurchasedForAward
      contextRef="i331c92f0ff404ce48d0292134aaf6abd_D20220101-20221231"
      decimals="INF"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjEvZnJhZzphOTIzM2I2NjNlZmM0OGFiODQyMzM5ZmQ1YmNlZGEyYi90YWJsZTo5N2Q5OGJmMjgzOTY0YzgyOGFlMTk0MDAyYTAzZDcyOS90YWJsZXJhbmdlOjk3ZDk4YmYyODM5NjRjODI4YWUxOTQwMDJhMDNkNzI5XzMtMS0xLTEtMzAxNDA_fce44897-542c-4dc9-abf5-d23c4c108a5c"
      unitRef="shares">70107</us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardSharesPurchasedForAward>
    <us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardSharesPurchasedForAward
      contextRef="i3e865a2d9f164593955686e10738f095_D20210101-20211231"
      decimals="INF"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjEvZnJhZzphOTIzM2I2NjNlZmM0OGFiODQyMzM5ZmQ1YmNlZGEyYi90YWJsZTo5N2Q5OGJmMjgzOTY0YzgyOGFlMTk0MDAyYTAzZDcyOS90YWJsZXJhbmdlOjk3ZDk4YmYyODM5NjRjODI4YWUxOTQwMDJhMDNkNzI5XzMtMy0xLTEtMzAxNDA_4e2497b5-0360-4728-b90e-f0133d85b2b5"
      unitRef="shares">55726</us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardSharesPurchasedForAward>
    <us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardSharesPurchasedForAward
      contextRef="id1243a41f69043efac5c8ad76e73c4c6_D20200101-20201231"
      decimals="INF"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjEvZnJhZzphOTIzM2I2NjNlZmM0OGFiODQyMzM5ZmQ1YmNlZGEyYi90YWJsZTo5N2Q5OGJmMjgzOTY0YzgyOGFlMTk0MDAyYTAzZDcyOS90YWJsZXJhbmdlOjk3ZDk4YmYyODM5NjRjODI4YWUxOTQwMDJhMDNkNzI5XzMtNS0xLTEtMzAxNDA_bed99d55-5692-42be-90bc-fad765bb8b77"
      unitRef="shares">61833</us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardSharesPurchasedForAward>
    <us-gaap:DeferredCompensationArrangementWithIndividualCommonStockReservedForFutureIssuance
      contextRef="idc46905802ff4c72a58a6c46869391f4_I20221231"
      decimals="-5"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjEvZnJhZzphOTIzM2I2NjNlZmM0OGFiODQyMzM5ZmQ1YmNlZGEyYi90ZXh0cmVnaW9uOmE5MjMzYjY2M2VmYzQ4YWI4NDIzMzlmZDViY2VkYTJiXzEwOTk1MTE2MzU5ODQ_6a0646b7-5a48-4eaa-87f5-744060b0046a"
      unitRef="shares">1700000</us-gaap:DeferredCompensationArrangementWithIndividualCommonStockReservedForFutureIssuance>
    <us-gaap:ScheduleOfShareBasedPaymentAwardEmployeeStockPurchasePlanValuationAssumptionsTableTextBlock
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjEvZnJhZzphOTIzM2I2NjNlZmM0OGFiODQyMzM5ZmQ1YmNlZGEyYi90ZXh0cmVnaW9uOmE5MjMzYjY2M2VmYzQ4YWI4NDIzMzlmZDViY2VkYTJiXzM5OTk_3bf182a8-baea-4a32-868a-5178ec7e72b7">&lt;div style="margin-top:6pt;text-indent:27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;The fair value was estimated based on the market price of our common stock at the beginning of the offering period using the following assumptions:&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-align:center"&gt;&lt;table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"&gt;&lt;tr&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:58.142%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.081%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.406%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.081%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.406%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.084%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="15" style="padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;Year Ended December 31,&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;2022&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;2021&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;2020&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Life (in years)&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;0.5&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;0.5&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;0.5&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Volatility&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;42&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;%&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;32&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;%&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;43&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;%&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Dividend yield&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 7pt 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;&#x2014;&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 7pt 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;&#x2014;&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 7pt 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;&#x2014;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Risk-free interest rate&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;1.27&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;%&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;0.07&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;%&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;0.96&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;%&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;</us-gaap:ScheduleOfShareBasedPaymentAwardEmployeeStockPurchasePlanValuationAssumptionsTableTextBlock>
    <us-gaap:SharebasedCompensationArrangementBySharebasedPaymentAwardFairValueAssumptionsExpectedTerm1
      contextRef="i331c92f0ff404ce48d0292134aaf6abd_D20220101-20221231"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjEvZnJhZzphOTIzM2I2NjNlZmM0OGFiODQyMzM5ZmQ1YmNlZGEyYi90YWJsZTo3NGQwNzQxZGNhYmQ0MzBkYmJkY2YwZmMyY2U3Y2YxYy90YWJsZXJhbmdlOjc0ZDA3NDFkY2FiZDQzMGRiYmRjZjBmYzJjZTdjZjFjXzItMS0xLTEtMzAxNDA_3ed13cad-803f-423c-954e-8fdd96282bd7">P0Y6M</us-gaap:SharebasedCompensationArrangementBySharebasedPaymentAwardFairValueAssumptionsExpectedTerm1>
    <us-gaap:SharebasedCompensationArrangementBySharebasedPaymentAwardFairValueAssumptionsExpectedTerm1
      contextRef="i3e865a2d9f164593955686e10738f095_D20210101-20211231"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjEvZnJhZzphOTIzM2I2NjNlZmM0OGFiODQyMzM5ZmQ1YmNlZGEyYi90YWJsZTo3NGQwNzQxZGNhYmQ0MzBkYmJkY2YwZmMyY2U3Y2YxYy90YWJsZXJhbmdlOjc0ZDA3NDFkY2FiZDQzMGRiYmRjZjBmYzJjZTdjZjFjXzItMy0xLTEtMzAxNDA_bba5a7e8-48df-4f81-8544-6b9619d4cb1f">P0Y6M</us-gaap:SharebasedCompensationArrangementBySharebasedPaymentAwardFairValueAssumptionsExpectedTerm1>
    <us-gaap:SharebasedCompensationArrangementBySharebasedPaymentAwardFairValueAssumptionsExpectedTerm1
      contextRef="id1243a41f69043efac5c8ad76e73c4c6_D20200101-20201231"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjEvZnJhZzphOTIzM2I2NjNlZmM0OGFiODQyMzM5ZmQ1YmNlZGEyYi90YWJsZTo3NGQwNzQxZGNhYmQ0MzBkYmJkY2YwZmMyY2U3Y2YxYy90YWJsZXJhbmdlOjc0ZDA3NDFkY2FiZDQzMGRiYmRjZjBmYzJjZTdjZjFjXzItNS0xLTEtMzAxNDA_45415133-076e-4c0e-8f7d-feba952fac64">P0Y6M</us-gaap:SharebasedCompensationArrangementBySharebasedPaymentAwardFairValueAssumptionsExpectedTerm1>
    <us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardFairValueAssumptionsExpectedVolatilityRate
      contextRef="i331c92f0ff404ce48d0292134aaf6abd_D20220101-20221231"
      decimals="2"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjEvZnJhZzphOTIzM2I2NjNlZmM0OGFiODQyMzM5ZmQ1YmNlZGEyYi90YWJsZTo3NGQwNzQxZGNhYmQ0MzBkYmJkY2YwZmMyY2U3Y2YxYy90YWJsZXJhbmdlOjc0ZDA3NDFkY2FiZDQzMGRiYmRjZjBmYzJjZTdjZjFjXzMtMS0xLTEtMzAxNDA_778007eb-35d0-4a68-a451-06562a752a38"
      unitRef="number">0.42</us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardFairValueAssumptionsExpectedVolatilityRate>
    <us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardFairValueAssumptionsExpectedVolatilityRate
      contextRef="i3e865a2d9f164593955686e10738f095_D20210101-20211231"
      decimals="2"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjEvZnJhZzphOTIzM2I2NjNlZmM0OGFiODQyMzM5ZmQ1YmNlZGEyYi90YWJsZTo3NGQwNzQxZGNhYmQ0MzBkYmJkY2YwZmMyY2U3Y2YxYy90YWJsZXJhbmdlOjc0ZDA3NDFkY2FiZDQzMGRiYmRjZjBmYzJjZTdjZjFjXzMtMy0xLTEtMzAxNDA_249c98a5-006f-42a2-a47f-d9f1657741d1"
      unitRef="number">0.32</us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardFairValueAssumptionsExpectedVolatilityRate>
    <us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardFairValueAssumptionsExpectedVolatilityRate
      contextRef="id1243a41f69043efac5c8ad76e73c4c6_D20200101-20201231"
      decimals="2"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjEvZnJhZzphOTIzM2I2NjNlZmM0OGFiODQyMzM5ZmQ1YmNlZGEyYi90YWJsZTo3NGQwNzQxZGNhYmQ0MzBkYmJkY2YwZmMyY2U3Y2YxYy90YWJsZXJhbmdlOjc0ZDA3NDFkY2FiZDQzMGRiYmRjZjBmYzJjZTdjZjFjXzMtNS0xLTEtMzAxNDA_18396b62-334b-43b5-a870-5d4c272a56ef"
      unitRef="number">0.43</us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardFairValueAssumptionsExpectedVolatilityRate>
    <us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardFairValueAssumptionsExpectedDividendRate
      contextRef="i331c92f0ff404ce48d0292134aaf6abd_D20220101-20221231"
      decimals="2"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjEvZnJhZzphOTIzM2I2NjNlZmM0OGFiODQyMzM5ZmQ1YmNlZGEyYi90YWJsZTo3NGQwNzQxZGNhYmQ0MzBkYmJkY2YwZmMyY2U3Y2YxYy90YWJsZXJhbmdlOjc0ZDA3NDFkY2FiZDQzMGRiYmRjZjBmYzJjZTdjZjFjXzQtMS0xLTEtMzAxNDA_5e52d19c-07cf-4284-86f7-7524190b96c2"
      unitRef="number">0</us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardFairValueAssumptionsExpectedDividendRate>
    <us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardFairValueAssumptionsExpectedDividendRate
      contextRef="i3e865a2d9f164593955686e10738f095_D20210101-20211231"
      decimals="2"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjEvZnJhZzphOTIzM2I2NjNlZmM0OGFiODQyMzM5ZmQ1YmNlZGEyYi90YWJsZTo3NGQwNzQxZGNhYmQ0MzBkYmJkY2YwZmMyY2U3Y2YxYy90YWJsZXJhbmdlOjc0ZDA3NDFkY2FiZDQzMGRiYmRjZjBmYzJjZTdjZjFjXzQtMy0xLTEtMzAxNDA_a53ccf55-ec00-4944-90e4-c0871af06468"
      unitRef="number">0</us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardFairValueAssumptionsExpectedDividendRate>
    <us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardFairValueAssumptionsExpectedDividendRate
      contextRef="id1243a41f69043efac5c8ad76e73c4c6_D20200101-20201231"
      decimals="2"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjEvZnJhZzphOTIzM2I2NjNlZmM0OGFiODQyMzM5ZmQ1YmNlZGEyYi90YWJsZTo3NGQwNzQxZGNhYmQ0MzBkYmJkY2YwZmMyY2U3Y2YxYy90YWJsZXJhbmdlOjc0ZDA3NDFkY2FiZDQzMGRiYmRjZjBmYzJjZTdjZjFjXzQtNS0xLTEtMzAxNDA_0f2f927a-da91-45f6-a92a-cd671760fe14"
      unitRef="number">0</us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardFairValueAssumptionsExpectedDividendRate>
    <us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardFairValueAssumptionsRiskFreeInterestRate
      contextRef="i331c92f0ff404ce48d0292134aaf6abd_D20220101-20221231"
      decimals="4"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjEvZnJhZzphOTIzM2I2NjNlZmM0OGFiODQyMzM5ZmQ1YmNlZGEyYi90YWJsZTo3NGQwNzQxZGNhYmQ0MzBkYmJkY2YwZmMyY2U3Y2YxYy90YWJsZXJhbmdlOjc0ZDA3NDFkY2FiZDQzMGRiYmRjZjBmYzJjZTdjZjFjXzUtMS0xLTEtMzAxNDA_a239fc52-4eea-4553-94aa-32c1221fb230"
      unitRef="number">0.0127</us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardFairValueAssumptionsRiskFreeInterestRate>
    <us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardFairValueAssumptionsRiskFreeInterestRate
      contextRef="i3e865a2d9f164593955686e10738f095_D20210101-20211231"
      decimals="4"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjEvZnJhZzphOTIzM2I2NjNlZmM0OGFiODQyMzM5ZmQ1YmNlZGEyYi90YWJsZTo3NGQwNzQxZGNhYmQ0MzBkYmJkY2YwZmMyY2U3Y2YxYy90YWJsZXJhbmdlOjc0ZDA3NDFkY2FiZDQzMGRiYmRjZjBmYzJjZTdjZjFjXzUtMy0xLTEtMzAxNDA_6303586b-cffe-4d45-a433-ef85f4e383c3"
      unitRef="number">0.0007</us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardFairValueAssumptionsRiskFreeInterestRate>
    <us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardFairValueAssumptionsRiskFreeInterestRate
      contextRef="id1243a41f69043efac5c8ad76e73c4c6_D20200101-20201231"
      decimals="4"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjEvZnJhZzphOTIzM2I2NjNlZmM0OGFiODQyMzM5ZmQ1YmNlZGEyYi90YWJsZTo3NGQwNzQxZGNhYmQ0MzBkYmJkY2YwZmMyY2U3Y2YxYy90YWJsZXJhbmdlOjc0ZDA3NDFkY2FiZDQzMGRiYmRjZjBmYzJjZTdjZjFjXzUtNS0xLTEtMzAxNDA_4d76ae67-4595-4be0-8cba-c7a69656268c"
      unitRef="number">0.0096</us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardFairValueAssumptionsRiskFreeInterestRate>
    <us-gaap:IncomeTaxDisclosureTextBlock
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjQvZnJhZzpkYzQzZDFiNTQ4YWQ0NjRkOGIyOTU0ZmRhZjdjNzc4Mi90ZXh0cmVnaW9uOmRjNDNkMWI1NDhhZDQ2NGQ4YjI5NTRmZGFmN2M3NzgyXzE2NDg_e02950c2-636e-4780-b03e-30515f07c2a0">Income Taxes&lt;div style="margin-top:6pt;text-indent:27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;Our provision for income taxes was comprised of the following components:&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-align:center"&gt;&lt;table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"&gt;&lt;tr&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:58.142%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.081%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.406%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.081%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.406%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.084%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="15" style="padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;Year Ended December 31,&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;(in thousands)&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;2022&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;2021&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;2020&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Current&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;&#160;&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;&#160;&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;&#160;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Federal&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;13,881&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;1,559&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;&#x2014;&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;State&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;4,149&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;1,890&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;1,249&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Foreign&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;1,990&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;1,610&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;1,608&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Deferred&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;&#160;&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;&#160;&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;&#160;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Federal&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;(2,530)&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;4,294&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;4,462&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;State&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;(751)&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;(88)&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;244&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Foreign&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;(549)&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;(321)&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;(469)&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;16,190&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;8,944&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;7,094&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;Our income tax expense differed from the amounts computed by applying the U.S. federal income tax rate to pretax income as a result of the following:&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-align:center"&gt;&lt;table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"&gt;&lt;tr&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:58.142%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.081%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.406%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.081%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.406%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.084%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:400;line-height:100%"&gt;&#160;&lt;/span&gt;&lt;/td&gt;&lt;td colspan="15" style="padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;Year Ended December 31,&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:400;line-height:100%"&gt;&#160;&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;2022&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;2021&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;2020&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;U.S. statutory federal income tax rate&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;21.0&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;%&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;21.0&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;%&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;21.0&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;%&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Increase (decrease) resulting from:&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;&#160;&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;&#160;&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;&#160;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;U.S. state income taxes, net of federal tax effect&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;4.6&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;4.5&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;4.5&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Tax impact of stock activity&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;(4.7)&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;(12.8)&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;(12.9)&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Nondeductible compensation&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;3.5&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;5.0&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;1.8&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Research and development credit&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;(1.5)&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;(1.1)&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;(0.6)&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Foreign derived intangible income&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;(1.4)&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;(1.3)&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;(1.3)&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Other&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;1.2&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;1.4&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;1.0&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Effective tax rate&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;22.7&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;%&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;16.7&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;%&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;13.5&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;%&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;The significant components of our deferred tax assets and liabilities were as follows:&lt;/span&gt;&lt;table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"&gt;&lt;tr&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:71.930%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.081%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.406%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.083%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="9" style="padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;December 31,&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;(in thousands)&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;2022&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;2021&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Deferred tax assets&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Net operating loss and credit carryforwards&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;9,970&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;4,828&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Stock-based compensation expense&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;5,084&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;3,934&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Accrued expenses&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;4,469&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;5,174&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Operating lease liabilities&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;4,384&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;5,235&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Research and development capitalized&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;9,591&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;&#x2014;&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Other deferred tax assets&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;2,408&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;2,778&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Gross deferred tax assets&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#ffffff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;35,906&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;21,949&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Less: valuation allowance&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;(1,873)&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;(1,815)&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Total net deferred tax assets&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;34,033&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td style="background-color:#ffffff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;20,134&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;&#160;&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;&#160;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Deferred tax liabilities&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;&#160;&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;&#160;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Deferred costs&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;(17,696)&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;(15,126)&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Right-of-use assets&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;(2,338)&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;(2,787)&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Depreciation and amortization&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;(20,282)&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;(8,820)&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Other deferred tax liabilities&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;(909)&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;(364)&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Total deferred tax liabilities&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;(41,225)&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;(27,097)&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Net deferred tax liabilities&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;(7,192)&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;(6,963)&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;Amounts for the year ended December 31, 2021 have been reclassified to be consistent with the current classification.&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;As of December&#160;31, 2022, we had net operating loss carryforwards of $40.9 million for U.S. federal tax purposes and $4.5 million for state tax purposes. If not utilized, the loss carryforwards will expire between 2023 and 2036 for federal tax purposes and between 2026 and 2042 for state tax purposes.&lt;/span&gt;&lt;span style="color:#000000;font-family:'Calibri',sans-serif;font-size:11pt;font-weight:400;line-height:120%"&gt; &lt;/span&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;Section 382 of the U.S. Internal Revenue Code generally imposes an annual limitation on the amount of net operating loss carryforwards that might be used to offset taxable income when a corporation has undergone significant changes in stock ownership. As of December&#160;31, 2022, all $40.9 million of our net operating loss carryforwards are subject to Section 382 limitations, of which we believe $6.8 million of federal losses will expire unused due to Section 382 limitations. Accordingly, our deferred tax assets are reported net of the Section 382 limitations. &lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;We are subject to income taxes for U.S. federal and various state and international jurisdictions. We are generally subject to U.S. federal and state tax examinations for most prior tax years due to our net operating loss and R&amp;amp;D credit carryforwards and the utilization of the carryforwards in years still open under statute.&lt;/span&gt;&lt;/div&gt;</us-gaap:IncomeTaxDisclosureTextBlock>
    <us-gaap:ScheduleOfComponentsOfIncomeTaxExpenseBenefitTableTextBlock
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjQvZnJhZzpkYzQzZDFiNTQ4YWQ0NjRkOGIyOTU0ZmRhZjdjNzc4Mi90ZXh0cmVnaW9uOmRjNDNkMWI1NDhhZDQ2NGQ4YjI5NTRmZGFmN2M3NzgyXzE2NDk_08d55e26-6007-4644-97c8-efed3b054f03">&lt;div style="margin-top:6pt;text-indent:27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;Our provision for income taxes was comprised of the following components:&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-align:center"&gt;&lt;table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"&gt;&lt;tr&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:58.142%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.081%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.406%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.081%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.406%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.084%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="15" style="padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;Year Ended December 31,&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;(in thousands)&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;2022&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;2021&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;2020&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Current&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;&#160;&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;&#160;&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;&#160;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Federal&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;13,881&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;1,559&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;&#x2014;&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;State&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;4,149&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;1,890&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;1,249&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Foreign&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;1,990&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;1,610&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;1,608&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Deferred&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;&#160;&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;&#160;&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;&#160;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Federal&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;(2,530)&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;4,294&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;4,462&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;State&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;(751)&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;(88)&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;244&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Foreign&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;(549)&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;(321)&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;(469)&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;16,190&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;8,944&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;7,094&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;</us-gaap:ScheduleOfComponentsOfIncomeTaxExpenseBenefitTableTextBlock>
    <us-gaap:CurrentFederalTaxExpenseBenefit
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjQvZnJhZzpkYzQzZDFiNTQ4YWQ0NjRkOGIyOTU0ZmRhZjdjNzc4Mi90YWJsZTpkYzczZTgxYmI1OGQ0NWU2OTk1NjdlMDRjY2FjMDA1Mi90YWJsZXJhbmdlOmRjNzNlODFiYjU4ZDQ1ZTY5OTU2N2UwNGNjYWMwMDUyXzMtMS0xLTEtMzAxNDA_9ff6361c-ebc7-4cc3-b4a8-19dee76dd61d"
      unitRef="usd">13881000</us-gaap:CurrentFederalTaxExpenseBenefit>
    <us-gaap:CurrentFederalTaxExpenseBenefit
      contextRef="ie07f2822175c48edbb8d5559ceb82e6f_D20210101-20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjQvZnJhZzpkYzQzZDFiNTQ4YWQ0NjRkOGIyOTU0ZmRhZjdjNzc4Mi90YWJsZTpkYzczZTgxYmI1OGQ0NWU2OTk1NjdlMDRjY2FjMDA1Mi90YWJsZXJhbmdlOmRjNzNlODFiYjU4ZDQ1ZTY5OTU2N2UwNGNjYWMwMDUyXzMtMy0xLTEtMzAxNDA_9d06fe0b-9e9b-45d6-857d-d80c15fe61d4"
      unitRef="usd">1559000</us-gaap:CurrentFederalTaxExpenseBenefit>
    <us-gaap:CurrentFederalTaxExpenseBenefit
      contextRef="i4751184d7e5948509cd8893fd49fb821_D20200101-20201231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjQvZnJhZzpkYzQzZDFiNTQ4YWQ0NjRkOGIyOTU0ZmRhZjdjNzc4Mi90YWJsZTpkYzczZTgxYmI1OGQ0NWU2OTk1NjdlMDRjY2FjMDA1Mi90YWJsZXJhbmdlOmRjNzNlODFiYjU4ZDQ1ZTY5OTU2N2UwNGNjYWMwMDUyXzMtNS0xLTEtMzAxNDA_81adc7db-67ee-4356-b6d0-2f734d9bf2ae"
      unitRef="usd">0</us-gaap:CurrentFederalTaxExpenseBenefit>
    <us-gaap:CurrentStateAndLocalTaxExpenseBenefit
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjQvZnJhZzpkYzQzZDFiNTQ4YWQ0NjRkOGIyOTU0ZmRhZjdjNzc4Mi90YWJsZTpkYzczZTgxYmI1OGQ0NWU2OTk1NjdlMDRjY2FjMDA1Mi90YWJsZXJhbmdlOmRjNzNlODFiYjU4ZDQ1ZTY5OTU2N2UwNGNjYWMwMDUyXzQtMS0xLTEtMzAxNDA_7289907b-9d22-4055-a6a6-687220888ea0"
      unitRef="usd">4149000</us-gaap:CurrentStateAndLocalTaxExpenseBenefit>
    <us-gaap:CurrentStateAndLocalTaxExpenseBenefit
      contextRef="ie07f2822175c48edbb8d5559ceb82e6f_D20210101-20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjQvZnJhZzpkYzQzZDFiNTQ4YWQ0NjRkOGIyOTU0ZmRhZjdjNzc4Mi90YWJsZTpkYzczZTgxYmI1OGQ0NWU2OTk1NjdlMDRjY2FjMDA1Mi90YWJsZXJhbmdlOmRjNzNlODFiYjU4ZDQ1ZTY5OTU2N2UwNGNjYWMwMDUyXzQtMy0xLTEtMzAxNDA_00ffa446-3a85-4a16-a343-c67151809685"
      unitRef="usd">1890000</us-gaap:CurrentStateAndLocalTaxExpenseBenefit>
    <us-gaap:CurrentStateAndLocalTaxExpenseBenefit
      contextRef="i4751184d7e5948509cd8893fd49fb821_D20200101-20201231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjQvZnJhZzpkYzQzZDFiNTQ4YWQ0NjRkOGIyOTU0ZmRhZjdjNzc4Mi90YWJsZTpkYzczZTgxYmI1OGQ0NWU2OTk1NjdlMDRjY2FjMDA1Mi90YWJsZXJhbmdlOmRjNzNlODFiYjU4ZDQ1ZTY5OTU2N2UwNGNjYWMwMDUyXzQtNS0xLTEtMzAxNDA_5107d019-58dc-4a41-a08e-9e1195763a0e"
      unitRef="usd">1249000</us-gaap:CurrentStateAndLocalTaxExpenseBenefit>
    <us-gaap:CurrentForeignTaxExpenseBenefit
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjQvZnJhZzpkYzQzZDFiNTQ4YWQ0NjRkOGIyOTU0ZmRhZjdjNzc4Mi90YWJsZTpkYzczZTgxYmI1OGQ0NWU2OTk1NjdlMDRjY2FjMDA1Mi90YWJsZXJhbmdlOmRjNzNlODFiYjU4ZDQ1ZTY5OTU2N2UwNGNjYWMwMDUyXzUtMS0xLTEtMzAxNDA_a883d0c1-5e7b-4ab0-aff0-cb17a7723820"
      unitRef="usd">1990000</us-gaap:CurrentForeignTaxExpenseBenefit>
    <us-gaap:CurrentForeignTaxExpenseBenefit
      contextRef="ie07f2822175c48edbb8d5559ceb82e6f_D20210101-20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjQvZnJhZzpkYzQzZDFiNTQ4YWQ0NjRkOGIyOTU0ZmRhZjdjNzc4Mi90YWJsZTpkYzczZTgxYmI1OGQ0NWU2OTk1NjdlMDRjY2FjMDA1Mi90YWJsZXJhbmdlOmRjNzNlODFiYjU4ZDQ1ZTY5OTU2N2UwNGNjYWMwMDUyXzUtMy0xLTEtMzAxNDA_5c70dcb0-de8f-4fe1-859c-f8b80245565d"
      unitRef="usd">1610000</us-gaap:CurrentForeignTaxExpenseBenefit>
    <us-gaap:CurrentForeignTaxExpenseBenefit
      contextRef="i4751184d7e5948509cd8893fd49fb821_D20200101-20201231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjQvZnJhZzpkYzQzZDFiNTQ4YWQ0NjRkOGIyOTU0ZmRhZjdjNzc4Mi90YWJsZTpkYzczZTgxYmI1OGQ0NWU2OTk1NjdlMDRjY2FjMDA1Mi90YWJsZXJhbmdlOmRjNzNlODFiYjU4ZDQ1ZTY5OTU2N2UwNGNjYWMwMDUyXzUtNS0xLTEtMzAxNDA_04afa3aa-1901-41f3-8d4a-d8bfc23ee540"
      unitRef="usd">1608000</us-gaap:CurrentForeignTaxExpenseBenefit>
    <us-gaap:DeferredFederalIncomeTaxExpenseBenefit
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjQvZnJhZzpkYzQzZDFiNTQ4YWQ0NjRkOGIyOTU0ZmRhZjdjNzc4Mi90YWJsZTpkYzczZTgxYmI1OGQ0NWU2OTk1NjdlMDRjY2FjMDA1Mi90YWJsZXJhbmdlOmRjNzNlODFiYjU4ZDQ1ZTY5OTU2N2UwNGNjYWMwMDUyXzctMS0xLTEtMzAxNDA_53b2c5fe-58dd-419d-88dc-3513c015074d"
      unitRef="usd">-2530000</us-gaap:DeferredFederalIncomeTaxExpenseBenefit>
    <us-gaap:DeferredFederalIncomeTaxExpenseBenefit
      contextRef="ie07f2822175c48edbb8d5559ceb82e6f_D20210101-20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjQvZnJhZzpkYzQzZDFiNTQ4YWQ0NjRkOGIyOTU0ZmRhZjdjNzc4Mi90YWJsZTpkYzczZTgxYmI1OGQ0NWU2OTk1NjdlMDRjY2FjMDA1Mi90YWJsZXJhbmdlOmRjNzNlODFiYjU4ZDQ1ZTY5OTU2N2UwNGNjYWMwMDUyXzctMy0xLTEtMzAxNDA_0d5704a5-8b68-4dd9-b6d8-b764e564e593"
      unitRef="usd">4294000</us-gaap:DeferredFederalIncomeTaxExpenseBenefit>
    <us-gaap:DeferredFederalIncomeTaxExpenseBenefit
      contextRef="i4751184d7e5948509cd8893fd49fb821_D20200101-20201231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjQvZnJhZzpkYzQzZDFiNTQ4YWQ0NjRkOGIyOTU0ZmRhZjdjNzc4Mi90YWJsZTpkYzczZTgxYmI1OGQ0NWU2OTk1NjdlMDRjY2FjMDA1Mi90YWJsZXJhbmdlOmRjNzNlODFiYjU4ZDQ1ZTY5OTU2N2UwNGNjYWMwMDUyXzctNS0xLTEtMzAxNDA_fa299057-bd03-4e0a-9b89-e54ef3f63af9"
      unitRef="usd">4462000</us-gaap:DeferredFederalIncomeTaxExpenseBenefit>
    <us-gaap:DeferredStateAndLocalIncomeTaxExpenseBenefit
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjQvZnJhZzpkYzQzZDFiNTQ4YWQ0NjRkOGIyOTU0ZmRhZjdjNzc4Mi90YWJsZTpkYzczZTgxYmI1OGQ0NWU2OTk1NjdlMDRjY2FjMDA1Mi90YWJsZXJhbmdlOmRjNzNlODFiYjU4ZDQ1ZTY5OTU2N2UwNGNjYWMwMDUyXzgtMS0xLTEtMzAxNDA_798fcce1-5c96-4dc7-86c2-b12a3850a805"
      unitRef="usd">-751000</us-gaap:DeferredStateAndLocalIncomeTaxExpenseBenefit>
    <us-gaap:DeferredStateAndLocalIncomeTaxExpenseBenefit
      contextRef="ie07f2822175c48edbb8d5559ceb82e6f_D20210101-20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjQvZnJhZzpkYzQzZDFiNTQ4YWQ0NjRkOGIyOTU0ZmRhZjdjNzc4Mi90YWJsZTpkYzczZTgxYmI1OGQ0NWU2OTk1NjdlMDRjY2FjMDA1Mi90YWJsZXJhbmdlOmRjNzNlODFiYjU4ZDQ1ZTY5OTU2N2UwNGNjYWMwMDUyXzgtMy0xLTEtMzAxNDA_dbf48841-aeb9-412c-90b6-5895b9f64438"
      unitRef="usd">-88000</us-gaap:DeferredStateAndLocalIncomeTaxExpenseBenefit>
    <us-gaap:DeferredStateAndLocalIncomeTaxExpenseBenefit
      contextRef="i4751184d7e5948509cd8893fd49fb821_D20200101-20201231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjQvZnJhZzpkYzQzZDFiNTQ4YWQ0NjRkOGIyOTU0ZmRhZjdjNzc4Mi90YWJsZTpkYzczZTgxYmI1OGQ0NWU2OTk1NjdlMDRjY2FjMDA1Mi90YWJsZXJhbmdlOmRjNzNlODFiYjU4ZDQ1ZTY5OTU2N2UwNGNjYWMwMDUyXzgtNS0xLTEtMzAxNDA_03016e0d-51fb-4fea-a6f9-490407e48020"
      unitRef="usd">244000</us-gaap:DeferredStateAndLocalIncomeTaxExpenseBenefit>
    <us-gaap:DeferredForeignIncomeTaxExpenseBenefit
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjQvZnJhZzpkYzQzZDFiNTQ4YWQ0NjRkOGIyOTU0ZmRhZjdjNzc4Mi90YWJsZTpkYzczZTgxYmI1OGQ0NWU2OTk1NjdlMDRjY2FjMDA1Mi90YWJsZXJhbmdlOmRjNzNlODFiYjU4ZDQ1ZTY5OTU2N2UwNGNjYWMwMDUyXzktMS0xLTEtMzAxNDA_2bd8fd22-5892-41ad-8120-f7a68c3cbefa"
      unitRef="usd">-549000</us-gaap:DeferredForeignIncomeTaxExpenseBenefit>
    <us-gaap:DeferredForeignIncomeTaxExpenseBenefit
      contextRef="ie07f2822175c48edbb8d5559ceb82e6f_D20210101-20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjQvZnJhZzpkYzQzZDFiNTQ4YWQ0NjRkOGIyOTU0ZmRhZjdjNzc4Mi90YWJsZTpkYzczZTgxYmI1OGQ0NWU2OTk1NjdlMDRjY2FjMDA1Mi90YWJsZXJhbmdlOmRjNzNlODFiYjU4ZDQ1ZTY5OTU2N2UwNGNjYWMwMDUyXzktMy0xLTEtMzAxNDA_d07ae281-8b54-4e02-8f75-be3083609d08"
      unitRef="usd">-321000</us-gaap:DeferredForeignIncomeTaxExpenseBenefit>
    <us-gaap:DeferredForeignIncomeTaxExpenseBenefit
      contextRef="i4751184d7e5948509cd8893fd49fb821_D20200101-20201231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjQvZnJhZzpkYzQzZDFiNTQ4YWQ0NjRkOGIyOTU0ZmRhZjdjNzc4Mi90YWJsZTpkYzczZTgxYmI1OGQ0NWU2OTk1NjdlMDRjY2FjMDA1Mi90YWJsZXJhbmdlOmRjNzNlODFiYjU4ZDQ1ZTY5OTU2N2UwNGNjYWMwMDUyXzktNS0xLTEtMzAxNDA_a2b34dbb-237b-41f3-8422-88d6a038292b"
      unitRef="usd">-469000</us-gaap:DeferredForeignIncomeTaxExpenseBenefit>
    <us-gaap:IncomeTaxExpenseBenefit
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjQvZnJhZzpkYzQzZDFiNTQ4YWQ0NjRkOGIyOTU0ZmRhZjdjNzc4Mi90YWJsZTpkYzczZTgxYmI1OGQ0NWU2OTk1NjdlMDRjY2FjMDA1Mi90YWJsZXJhbmdlOmRjNzNlODFiYjU4ZDQ1ZTY5OTU2N2UwNGNjYWMwMDUyXzEwLTEtMS0xLTMwMTQw_e0e1d8b0-aef7-400a-9f1e-84dfcedd53e3"
      unitRef="usd">16190000</us-gaap:IncomeTaxExpenseBenefit>
    <us-gaap:IncomeTaxExpenseBenefit
      contextRef="ie07f2822175c48edbb8d5559ceb82e6f_D20210101-20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjQvZnJhZzpkYzQzZDFiNTQ4YWQ0NjRkOGIyOTU0ZmRhZjdjNzc4Mi90YWJsZTpkYzczZTgxYmI1OGQ0NWU2OTk1NjdlMDRjY2FjMDA1Mi90YWJsZXJhbmdlOmRjNzNlODFiYjU4ZDQ1ZTY5OTU2N2UwNGNjYWMwMDUyXzEwLTMtMS0xLTMwMTQw_9dbd0c0c-2ff4-4639-952b-4f98457af579"
      unitRef="usd">8944000</us-gaap:IncomeTaxExpenseBenefit>
    <us-gaap:IncomeTaxExpenseBenefit
      contextRef="i4751184d7e5948509cd8893fd49fb821_D20200101-20201231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjQvZnJhZzpkYzQzZDFiNTQ4YWQ0NjRkOGIyOTU0ZmRhZjdjNzc4Mi90YWJsZTpkYzczZTgxYmI1OGQ0NWU2OTk1NjdlMDRjY2FjMDA1Mi90YWJsZXJhbmdlOmRjNzNlODFiYjU4ZDQ1ZTY5OTU2N2UwNGNjYWMwMDUyXzEwLTUtMS0xLTMwMTQw_051dfe35-832b-4d14-b561-396a6fe457b0"
      unitRef="usd">7094000</us-gaap:IncomeTaxExpenseBenefit>
    <us-gaap:ScheduleOfEffectiveIncomeTaxRateReconciliationTableTextBlock
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjQvZnJhZzpkYzQzZDFiNTQ4YWQ0NjRkOGIyOTU0ZmRhZjdjNzc4Mi90ZXh0cmVnaW9uOmRjNDNkMWI1NDhhZDQ2NGQ4YjI5NTRmZGFmN2M3NzgyXzE2NTA_caf0a5dd-7e30-45a7-a9ca-e20be4a88ff2">&lt;div style="margin-top:6pt;text-indent:27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;Our income tax expense differed from the amounts computed by applying the U.S. federal income tax rate to pretax income as a result of the following:&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-align:center"&gt;&lt;table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"&gt;&lt;tr&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:58.142%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.081%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.406%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.081%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.406%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.084%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:400;line-height:100%"&gt;&#160;&lt;/span&gt;&lt;/td&gt;&lt;td colspan="15" style="padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;Year Ended December 31,&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:400;line-height:100%"&gt;&#160;&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;2022&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;2021&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;2020&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;U.S. statutory federal income tax rate&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;21.0&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;%&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;21.0&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;%&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;21.0&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;%&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Increase (decrease) resulting from:&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;&#160;&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;&#160;&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;&#160;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;U.S. state income taxes, net of federal tax effect&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;4.6&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;4.5&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;4.5&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Tax impact of stock activity&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;(4.7)&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;(12.8)&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;(12.9)&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Nondeductible compensation&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;3.5&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;5.0&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;1.8&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Research and development credit&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;(1.5)&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;(1.1)&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;(0.6)&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Foreign derived intangible income&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;(1.4)&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;(1.3)&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;(1.3)&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Other&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;1.2&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;1.4&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;1.0&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Effective tax rate&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;22.7&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;%&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;16.7&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;%&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;13.5&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;%&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;</us-gaap:ScheduleOfEffectiveIncomeTaxRateReconciliationTableTextBlock>
    <us-gaap:EffectiveIncomeTaxRateReconciliationAtFederalStatutoryIncomeTaxRate
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      decimals="3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjQvZnJhZzpkYzQzZDFiNTQ4YWQ0NjRkOGIyOTU0ZmRhZjdjNzc4Mi90YWJsZToyMTY0MWU2OTc1ODQ0YTc3OWMwMmQ0ZWQ5YTg5M2ZjMi90YWJsZXJhbmdlOjIxNjQxZTY5NzU4NDRhNzc5YzAyZDRlZDlhODkzZmMyXzItMS0xLTEtMzAxNDA_5a43e146-2ff2-4b97-922d-a3024282a712"
      unitRef="number">0.210</us-gaap:EffectiveIncomeTaxRateReconciliationAtFederalStatutoryIncomeTaxRate>
    <us-gaap:EffectiveIncomeTaxRateReconciliationAtFederalStatutoryIncomeTaxRate
      contextRef="ie07f2822175c48edbb8d5559ceb82e6f_D20210101-20211231"
      decimals="3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjQvZnJhZzpkYzQzZDFiNTQ4YWQ0NjRkOGIyOTU0ZmRhZjdjNzc4Mi90YWJsZToyMTY0MWU2OTc1ODQ0YTc3OWMwMmQ0ZWQ5YTg5M2ZjMi90YWJsZXJhbmdlOjIxNjQxZTY5NzU4NDRhNzc5YzAyZDRlZDlhODkzZmMyXzItMy0xLTEtMzAxNDA_1d7d5bf1-5eb8-4548-9680-33d616636f2f"
      unitRef="number">0.210</us-gaap:EffectiveIncomeTaxRateReconciliationAtFederalStatutoryIncomeTaxRate>
    <us-gaap:EffectiveIncomeTaxRateReconciliationAtFederalStatutoryIncomeTaxRate
      contextRef="i4751184d7e5948509cd8893fd49fb821_D20200101-20201231"
      decimals="3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjQvZnJhZzpkYzQzZDFiNTQ4YWQ0NjRkOGIyOTU0ZmRhZjdjNzc4Mi90YWJsZToyMTY0MWU2OTc1ODQ0YTc3OWMwMmQ0ZWQ5YTg5M2ZjMi90YWJsZXJhbmdlOjIxNjQxZTY5NzU4NDRhNzc5YzAyZDRlZDlhODkzZmMyXzItNS0xLTEtMzAxNDA_5cb19d7b-c866-4829-8e46-d1de5c1ce10a"
      unitRef="number">0.210</us-gaap:EffectiveIncomeTaxRateReconciliationAtFederalStatutoryIncomeTaxRate>
    <us-gaap:EffectiveIncomeTaxRateReconciliationStateAndLocalIncomeTaxes
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      decimals="3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjQvZnJhZzpkYzQzZDFiNTQ4YWQ0NjRkOGIyOTU0ZmRhZjdjNzc4Mi90YWJsZToyMTY0MWU2OTc1ODQ0YTc3OWMwMmQ0ZWQ5YTg5M2ZjMi90YWJsZXJhbmdlOjIxNjQxZTY5NzU4NDRhNzc5YzAyZDRlZDlhODkzZmMyXzQtMS0xLTEtMzAxNDA_e4e14f07-0fb3-4f12-89a1-80cb545cd278"
      unitRef="number">0.046</us-gaap:EffectiveIncomeTaxRateReconciliationStateAndLocalIncomeTaxes>
    <us-gaap:EffectiveIncomeTaxRateReconciliationStateAndLocalIncomeTaxes
      contextRef="ie07f2822175c48edbb8d5559ceb82e6f_D20210101-20211231"
      decimals="3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjQvZnJhZzpkYzQzZDFiNTQ4YWQ0NjRkOGIyOTU0ZmRhZjdjNzc4Mi90YWJsZToyMTY0MWU2OTc1ODQ0YTc3OWMwMmQ0ZWQ5YTg5M2ZjMi90YWJsZXJhbmdlOjIxNjQxZTY5NzU4NDRhNzc5YzAyZDRlZDlhODkzZmMyXzQtMy0xLTEtMzAxNDA_acf26c92-3699-4de8-b487-74e7b38f676e"
      unitRef="number">0.045</us-gaap:EffectiveIncomeTaxRateReconciliationStateAndLocalIncomeTaxes>
    <us-gaap:EffectiveIncomeTaxRateReconciliationStateAndLocalIncomeTaxes
      contextRef="i4751184d7e5948509cd8893fd49fb821_D20200101-20201231"
      decimals="3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjQvZnJhZzpkYzQzZDFiNTQ4YWQ0NjRkOGIyOTU0ZmRhZjdjNzc4Mi90YWJsZToyMTY0MWU2OTc1ODQ0YTc3OWMwMmQ0ZWQ5YTg5M2ZjMi90YWJsZXJhbmdlOjIxNjQxZTY5NzU4NDRhNzc5YzAyZDRlZDlhODkzZmMyXzQtNS0xLTEtMzAxNDA_469bee85-1ad3-4731-b829-4dc36d8fdd90"
      unitRef="number">0.045</us-gaap:EffectiveIncomeTaxRateReconciliationStateAndLocalIncomeTaxes>
    <spsc:EffectiveIncomeTaxRateReconciliationTaxBenefitsForExcessTaxDeductionFromStockActivity
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      decimals="3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjQvZnJhZzpkYzQzZDFiNTQ4YWQ0NjRkOGIyOTU0ZmRhZjdjNzc4Mi90YWJsZToyMTY0MWU2OTc1ODQ0YTc3OWMwMmQ0ZWQ5YTg5M2ZjMi90YWJsZXJhbmdlOjIxNjQxZTY5NzU4NDRhNzc5YzAyZDRlZDlhODkzZmMyXzUtMS0xLTEtMzAxNDA_822fcf2f-16c6-49bc-8b56-ac562ba45019"
      unitRef="number">0.047</spsc:EffectiveIncomeTaxRateReconciliationTaxBenefitsForExcessTaxDeductionFromStockActivity>
    <spsc:EffectiveIncomeTaxRateReconciliationTaxBenefitsForExcessTaxDeductionFromStockActivity
      contextRef="ie07f2822175c48edbb8d5559ceb82e6f_D20210101-20211231"
      decimals="3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjQvZnJhZzpkYzQzZDFiNTQ4YWQ0NjRkOGIyOTU0ZmRhZjdjNzc4Mi90YWJsZToyMTY0MWU2OTc1ODQ0YTc3OWMwMmQ0ZWQ5YTg5M2ZjMi90YWJsZXJhbmdlOjIxNjQxZTY5NzU4NDRhNzc5YzAyZDRlZDlhODkzZmMyXzUtMy0xLTEtMzAxNDA_b4dfa6c7-5590-4549-b576-32f38e2ba54f"
      unitRef="number">0.128</spsc:EffectiveIncomeTaxRateReconciliationTaxBenefitsForExcessTaxDeductionFromStockActivity>
    <spsc:EffectiveIncomeTaxRateReconciliationTaxBenefitsForExcessTaxDeductionFromStockActivity
      contextRef="i4751184d7e5948509cd8893fd49fb821_D20200101-20201231"
      decimals="3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjQvZnJhZzpkYzQzZDFiNTQ4YWQ0NjRkOGIyOTU0ZmRhZjdjNzc4Mi90YWJsZToyMTY0MWU2OTc1ODQ0YTc3OWMwMmQ0ZWQ5YTg5M2ZjMi90YWJsZXJhbmdlOjIxNjQxZTY5NzU4NDRhNzc5YzAyZDRlZDlhODkzZmMyXzUtNS0xLTEtMzAxNDA_9ddede4d-cce4-4488-a8a6-5f3ca57a3984"
      unitRef="number">0.129</spsc:EffectiveIncomeTaxRateReconciliationTaxBenefitsForExcessTaxDeductionFromStockActivity>
    <spsc:EffectiveIncomeTaxRateReconciliationNondeductibleExpenseForCompensation
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      decimals="3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjQvZnJhZzpkYzQzZDFiNTQ4YWQ0NjRkOGIyOTU0ZmRhZjdjNzc4Mi90YWJsZToyMTY0MWU2OTc1ODQ0YTc3OWMwMmQ0ZWQ5YTg5M2ZjMi90YWJsZXJhbmdlOjIxNjQxZTY5NzU4NDRhNzc5YzAyZDRlZDlhODkzZmMyXzYtMS0xLTEtMzAxNDA_3989c8d5-d83f-4c5d-b29b-f1bc764a200a"
      unitRef="number">0.035</spsc:EffectiveIncomeTaxRateReconciliationNondeductibleExpenseForCompensation>
    <spsc:EffectiveIncomeTaxRateReconciliationNondeductibleExpenseForCompensation
      contextRef="ie07f2822175c48edbb8d5559ceb82e6f_D20210101-20211231"
      decimals="3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjQvZnJhZzpkYzQzZDFiNTQ4YWQ0NjRkOGIyOTU0ZmRhZjdjNzc4Mi90YWJsZToyMTY0MWU2OTc1ODQ0YTc3OWMwMmQ0ZWQ5YTg5M2ZjMi90YWJsZXJhbmdlOjIxNjQxZTY5NzU4NDRhNzc5YzAyZDRlZDlhODkzZmMyXzYtMy0xLTEtMzAxNDA_4f7d544b-50c3-437b-842b-51555daf7a59"
      unitRef="number">0.050</spsc:EffectiveIncomeTaxRateReconciliationNondeductibleExpenseForCompensation>
    <spsc:EffectiveIncomeTaxRateReconciliationNondeductibleExpenseForCompensation
      contextRef="i4751184d7e5948509cd8893fd49fb821_D20200101-20201231"
      decimals="3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjQvZnJhZzpkYzQzZDFiNTQ4YWQ0NjRkOGIyOTU0ZmRhZjdjNzc4Mi90YWJsZToyMTY0MWU2OTc1ODQ0YTc3OWMwMmQ0ZWQ5YTg5M2ZjMi90YWJsZXJhbmdlOjIxNjQxZTY5NzU4NDRhNzc5YzAyZDRlZDlhODkzZmMyXzYtNS0xLTEtMzAxNDA_2b33c56c-734e-46e2-89a3-b9f7731046bf"
      unitRef="number">0.018</spsc:EffectiveIncomeTaxRateReconciliationNondeductibleExpenseForCompensation>
    <us-gaap:EffectiveIncomeTaxRateReconciliationTaxCreditsResearch
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      decimals="3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjQvZnJhZzpkYzQzZDFiNTQ4YWQ0NjRkOGIyOTU0ZmRhZjdjNzc4Mi90YWJsZToyMTY0MWU2OTc1ODQ0YTc3OWMwMmQ0ZWQ5YTg5M2ZjMi90YWJsZXJhbmdlOjIxNjQxZTY5NzU4NDRhNzc5YzAyZDRlZDlhODkzZmMyXzctMS0xLTEtMzAxNDA_d92efa65-fdae-439e-95cd-c5d82e0149d3"
      unitRef="number">0.015</us-gaap:EffectiveIncomeTaxRateReconciliationTaxCreditsResearch>
    <us-gaap:EffectiveIncomeTaxRateReconciliationTaxCreditsResearch
      contextRef="ie07f2822175c48edbb8d5559ceb82e6f_D20210101-20211231"
      decimals="3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjQvZnJhZzpkYzQzZDFiNTQ4YWQ0NjRkOGIyOTU0ZmRhZjdjNzc4Mi90YWJsZToyMTY0MWU2OTc1ODQ0YTc3OWMwMmQ0ZWQ5YTg5M2ZjMi90YWJsZXJhbmdlOjIxNjQxZTY5NzU4NDRhNzc5YzAyZDRlZDlhODkzZmMyXzctMy0xLTEtMzAxNDA_b84a000d-6e88-4557-b714-a9a9fdb7fb6a"
      unitRef="number">0.011</us-gaap:EffectiveIncomeTaxRateReconciliationTaxCreditsResearch>
    <us-gaap:EffectiveIncomeTaxRateReconciliationTaxCreditsResearch
      contextRef="i4751184d7e5948509cd8893fd49fb821_D20200101-20201231"
      decimals="3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjQvZnJhZzpkYzQzZDFiNTQ4YWQ0NjRkOGIyOTU0ZmRhZjdjNzc4Mi90YWJsZToyMTY0MWU2OTc1ODQ0YTc3OWMwMmQ0ZWQ5YTg5M2ZjMi90YWJsZXJhbmdlOjIxNjQxZTY5NzU4NDRhNzc5YzAyZDRlZDlhODkzZmMyXzctNS0xLTEtMzAxNDA_0676e00c-3cad-43db-bdfa-2a92217e0023"
      unitRef="number">0.006</us-gaap:EffectiveIncomeTaxRateReconciliationTaxCreditsResearch>
    <spsc:EffectiveIncomeTaxRateReconciliationForeignDerivedIntangibleIncome
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      decimals="3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjQvZnJhZzpkYzQzZDFiNTQ4YWQ0NjRkOGIyOTU0ZmRhZjdjNzc4Mi90YWJsZToyMTY0MWU2OTc1ODQ0YTc3OWMwMmQ0ZWQ5YTg5M2ZjMi90YWJsZXJhbmdlOjIxNjQxZTY5NzU4NDRhNzc5YzAyZDRlZDlhODkzZmMyXzgtMS0xLTEtMzAxNDA_86e26c56-bafa-43d7-9e17-db068f3ff914"
      unitRef="number">0.014</spsc:EffectiveIncomeTaxRateReconciliationForeignDerivedIntangibleIncome>
    <spsc:EffectiveIncomeTaxRateReconciliationForeignDerivedIntangibleIncome
      contextRef="ie07f2822175c48edbb8d5559ceb82e6f_D20210101-20211231"
      decimals="3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjQvZnJhZzpkYzQzZDFiNTQ4YWQ0NjRkOGIyOTU0ZmRhZjdjNzc4Mi90YWJsZToyMTY0MWU2OTc1ODQ0YTc3OWMwMmQ0ZWQ5YTg5M2ZjMi90YWJsZXJhbmdlOjIxNjQxZTY5NzU4NDRhNzc5YzAyZDRlZDlhODkzZmMyXzgtMy0xLTEtMzAxNDA_8a5683ed-676e-4ca1-b9a0-000f8ca259b9"
      unitRef="number">0.013</spsc:EffectiveIncomeTaxRateReconciliationForeignDerivedIntangibleIncome>
    <spsc:EffectiveIncomeTaxRateReconciliationForeignDerivedIntangibleIncome
      contextRef="i4751184d7e5948509cd8893fd49fb821_D20200101-20201231"
      decimals="3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjQvZnJhZzpkYzQzZDFiNTQ4YWQ0NjRkOGIyOTU0ZmRhZjdjNzc4Mi90YWJsZToyMTY0MWU2OTc1ODQ0YTc3OWMwMmQ0ZWQ5YTg5M2ZjMi90YWJsZXJhbmdlOjIxNjQxZTY5NzU4NDRhNzc5YzAyZDRlZDlhODkzZmMyXzgtNS0xLTEtNzE0ODg_1a178201-beab-4a75-bea4-eeb6806934e2"
      unitRef="number">0.013</spsc:EffectiveIncomeTaxRateReconciliationForeignDerivedIntangibleIncome>
    <us-gaap:EffectiveIncomeTaxRateReconciliationOtherAdjustments
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      decimals="3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjQvZnJhZzpkYzQzZDFiNTQ4YWQ0NjRkOGIyOTU0ZmRhZjdjNzc4Mi90YWJsZToyMTY0MWU2OTc1ODQ0YTc3OWMwMmQ0ZWQ5YTg5M2ZjMi90YWJsZXJhbmdlOjIxNjQxZTY5NzU4NDRhNzc5YzAyZDRlZDlhODkzZmMyXzktMS0xLTEtMzAxNDA_a684609b-82ce-4d4a-b40c-19d49de3b615"
      unitRef="number">0.012</us-gaap:EffectiveIncomeTaxRateReconciliationOtherAdjustments>
    <us-gaap:EffectiveIncomeTaxRateReconciliationOtherAdjustments
      contextRef="ie07f2822175c48edbb8d5559ceb82e6f_D20210101-20211231"
      decimals="3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjQvZnJhZzpkYzQzZDFiNTQ4YWQ0NjRkOGIyOTU0ZmRhZjdjNzc4Mi90YWJsZToyMTY0MWU2OTc1ODQ0YTc3OWMwMmQ0ZWQ5YTg5M2ZjMi90YWJsZXJhbmdlOjIxNjQxZTY5NzU4NDRhNzc5YzAyZDRlZDlhODkzZmMyXzktMy0xLTEtMzAxNDA_c49706d3-929a-48e8-8c2e-87ac05c87954"
      unitRef="number">0.014</us-gaap:EffectiveIncomeTaxRateReconciliationOtherAdjustments>
    <us-gaap:EffectiveIncomeTaxRateReconciliationOtherAdjustments
      contextRef="i4751184d7e5948509cd8893fd49fb821_D20200101-20201231"
      decimals="3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjQvZnJhZzpkYzQzZDFiNTQ4YWQ0NjRkOGIyOTU0ZmRhZjdjNzc4Mi90YWJsZToyMTY0MWU2OTc1ODQ0YTc3OWMwMmQ0ZWQ5YTg5M2ZjMi90YWJsZXJhbmdlOjIxNjQxZTY5NzU4NDRhNzc5YzAyZDRlZDlhODkzZmMyXzktNS0xLTEtMzAxNDA_9fe12150-be74-47e6-8ac1-a56cab71fb82"
      unitRef="number">0.010</us-gaap:EffectiveIncomeTaxRateReconciliationOtherAdjustments>
    <us-gaap:EffectiveIncomeTaxRateContinuingOperations
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      decimals="3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjQvZnJhZzpkYzQzZDFiNTQ4YWQ0NjRkOGIyOTU0ZmRhZjdjNzc4Mi90YWJsZToyMTY0MWU2OTc1ODQ0YTc3OWMwMmQ0ZWQ5YTg5M2ZjMi90YWJsZXJhbmdlOjIxNjQxZTY5NzU4NDRhNzc5YzAyZDRlZDlhODkzZmMyXzEwLTEtMS0xLTMwMTQw_5587eabd-af4b-4d45-9f67-711dc4fa1fe4"
      unitRef="number">0.227</us-gaap:EffectiveIncomeTaxRateContinuingOperations>
    <us-gaap:EffectiveIncomeTaxRateContinuingOperations
      contextRef="ie07f2822175c48edbb8d5559ceb82e6f_D20210101-20211231"
      decimals="3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjQvZnJhZzpkYzQzZDFiNTQ4YWQ0NjRkOGIyOTU0ZmRhZjdjNzc4Mi90YWJsZToyMTY0MWU2OTc1ODQ0YTc3OWMwMmQ0ZWQ5YTg5M2ZjMi90YWJsZXJhbmdlOjIxNjQxZTY5NzU4NDRhNzc5YzAyZDRlZDlhODkzZmMyXzEwLTMtMS0xLTMwMTQw_88434d4a-3669-4070-82f7-b7dc97ad9418"
      unitRef="number">0.167</us-gaap:EffectiveIncomeTaxRateContinuingOperations>
    <us-gaap:EffectiveIncomeTaxRateContinuingOperations
      contextRef="i4751184d7e5948509cd8893fd49fb821_D20200101-20201231"
      decimals="3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjQvZnJhZzpkYzQzZDFiNTQ4YWQ0NjRkOGIyOTU0ZmRhZjdjNzc4Mi90YWJsZToyMTY0MWU2OTc1ODQ0YTc3OWMwMmQ0ZWQ5YTg5M2ZjMi90YWJsZXJhbmdlOjIxNjQxZTY5NzU4NDRhNzc5YzAyZDRlZDlhODkzZmMyXzEwLTUtMS0xLTMwMTQw_2ee64228-d18a-4fad-933b-2956c9ffad54"
      unitRef="number">0.135</us-gaap:EffectiveIncomeTaxRateContinuingOperations>
    <us-gaap:ScheduleOfDeferredTaxAssetsAndLiabilitiesTableTextBlock
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjQvZnJhZzpkYzQzZDFiNTQ4YWQ0NjRkOGIyOTU0ZmRhZjdjNzc4Mi90ZXh0cmVnaW9uOmRjNDNkMWI1NDhhZDQ2NGQ4YjI5NTRmZGFmN2M3NzgyXzE2NTE_8554edb3-cc40-4351-9c72-9dadd097b263">&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;The significant components of our deferred tax assets and liabilities were as follows:&lt;/span&gt;&lt;table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"&gt;&lt;tr&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:71.930%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.081%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.406%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.083%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="9" style="padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;December 31,&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;(in thousands)&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;2022&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;2021&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Deferred tax assets&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Net operating loss and credit carryforwards&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;9,970&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;4,828&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Stock-based compensation expense&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;5,084&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;3,934&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Accrued expenses&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;4,469&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;5,174&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Operating lease liabilities&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;4,384&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;5,235&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Research and development capitalized&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;9,591&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;&#x2014;&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Other deferred tax assets&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;2,408&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;2,778&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Gross deferred tax assets&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#ffffff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;35,906&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;21,949&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Less: valuation allowance&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;(1,873)&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;(1,815)&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Total net deferred tax assets&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;34,033&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td style="background-color:#ffffff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;20,134&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;&#160;&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;&#160;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Deferred tax liabilities&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;&#160;&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;&#160;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Deferred costs&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;(17,696)&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;(15,126)&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Right-of-use assets&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;(2,338)&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;(2,787)&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Depreciation and amortization&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;(20,282)&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;(8,820)&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Other deferred tax liabilities&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;(909)&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;(364)&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Total deferred tax liabilities&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;(41,225)&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;(27,097)&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Net deferred tax liabilities&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;(7,192)&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;(6,963)&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;/table&gt;</us-gaap:ScheduleOfDeferredTaxAssetsAndLiabilitiesTableTextBlock>
    <spsc:DeferredTaxAssetsOperatingLossAndTaxCreditCarryforwards
      contextRef="ibbc2d589a09c46368d9dd3e9ea8996c6_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjQvZnJhZzpkYzQzZDFiNTQ4YWQ0NjRkOGIyOTU0ZmRhZjdjNzc4Mi90YWJsZTpmMWE2ZmJhNDc0Yzc0Y2Q0YThjZTEwMGU4ZmI5YjMwNy90YWJsZXJhbmdlOmYxYTZmYmE0NzRjNzRjZDRhOGNlMTAwZThmYjliMzA3XzMtMS0xLTEtMzAxNDA_98c5e1ce-aeed-44e5-bd1b-2e8a7e94d408"
      unitRef="usd">9970000</spsc:DeferredTaxAssetsOperatingLossAndTaxCreditCarryforwards>
    <spsc:DeferredTaxAssetsOperatingLossAndTaxCreditCarryforwards
      contextRef="i62ba0be1fd094d818a1f7d0d5504d1e2_I20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjQvZnJhZzpkYzQzZDFiNTQ4YWQ0NjRkOGIyOTU0ZmRhZjdjNzc4Mi90YWJsZTpmMWE2ZmJhNDc0Yzc0Y2Q0YThjZTEwMGU4ZmI5YjMwNy90YWJsZXJhbmdlOmYxYTZmYmE0NzRjNzRjZDRhOGNlMTAwZThmYjliMzA3XzMtMy0xLTEtMzAxNDA_98f882f2-958f-4b18-91a0-4566c7901dc8"
      unitRef="usd">4828000</spsc:DeferredTaxAssetsOperatingLossAndTaxCreditCarryforwards>
    <us-gaap:DeferredTaxAssetsTaxDeferredExpenseCompensationAndBenefitsShareBasedCompensationCost
      contextRef="ibbc2d589a09c46368d9dd3e9ea8996c6_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjQvZnJhZzpkYzQzZDFiNTQ4YWQ0NjRkOGIyOTU0ZmRhZjdjNzc4Mi90YWJsZTpmMWE2ZmJhNDc0Yzc0Y2Q0YThjZTEwMGU4ZmI5YjMwNy90YWJsZXJhbmdlOmYxYTZmYmE0NzRjNzRjZDRhOGNlMTAwZThmYjliMzA3XzQtMS0xLTEtMzAxNDA_80313932-cbdc-439c-98ea-e1d892828d7e"
      unitRef="usd">5084000</us-gaap:DeferredTaxAssetsTaxDeferredExpenseCompensationAndBenefitsShareBasedCompensationCost>
    <us-gaap:DeferredTaxAssetsTaxDeferredExpenseCompensationAndBenefitsShareBasedCompensationCost
      contextRef="i62ba0be1fd094d818a1f7d0d5504d1e2_I20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjQvZnJhZzpkYzQzZDFiNTQ4YWQ0NjRkOGIyOTU0ZmRhZjdjNzc4Mi90YWJsZTpmMWE2ZmJhNDc0Yzc0Y2Q0YThjZTEwMGU4ZmI5YjMwNy90YWJsZXJhbmdlOmYxYTZmYmE0NzRjNzRjZDRhOGNlMTAwZThmYjliMzA3XzQtMy0xLTEtMzAxNDA_5a316a5a-ca72-4e11-a306-a3f91d9d75fe"
      unitRef="usd">3934000</us-gaap:DeferredTaxAssetsTaxDeferredExpenseCompensationAndBenefitsShareBasedCompensationCost>
    <us-gaap:DeferredTaxAssetsTaxDeferredExpenseReservesAndAccrualsAccruedLiabilities
      contextRef="ibbc2d589a09c46368d9dd3e9ea8996c6_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjQvZnJhZzpkYzQzZDFiNTQ4YWQ0NjRkOGIyOTU0ZmRhZjdjNzc4Mi90YWJsZTpmMWE2ZmJhNDc0Yzc0Y2Q0YThjZTEwMGU4ZmI5YjMwNy90YWJsZXJhbmdlOmYxYTZmYmE0NzRjNzRjZDRhOGNlMTAwZThmYjliMzA3XzYtMS0xLTEtMzAxNDA_c73c155e-0f15-43a3-aca6-14e0e5e347cc"
      unitRef="usd">4469000</us-gaap:DeferredTaxAssetsTaxDeferredExpenseReservesAndAccrualsAccruedLiabilities>
    <us-gaap:DeferredTaxAssetsTaxDeferredExpenseReservesAndAccrualsAccruedLiabilities
      contextRef="i62ba0be1fd094d818a1f7d0d5504d1e2_I20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjQvZnJhZzpkYzQzZDFiNTQ4YWQ0NjRkOGIyOTU0ZmRhZjdjNzc4Mi90YWJsZTpmMWE2ZmJhNDc0Yzc0Y2Q0YThjZTEwMGU4ZmI5YjMwNy90YWJsZXJhbmdlOmYxYTZmYmE0NzRjNzRjZDRhOGNlMTAwZThmYjliMzA3XzYtMy0xLTEtMzAxNDA_64716fff-e89b-4857-ab7f-922ebcdd9e9b"
      unitRef="usd">5174000</us-gaap:DeferredTaxAssetsTaxDeferredExpenseReservesAndAccrualsAccruedLiabilities>
    <spsc:DeferredTaxAssetsOperatingLeaseLiabilities
      contextRef="ibbc2d589a09c46368d9dd3e9ea8996c6_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjQvZnJhZzpkYzQzZDFiNTQ4YWQ0NjRkOGIyOTU0ZmRhZjdjNzc4Mi90YWJsZTpmMWE2ZmJhNDc0Yzc0Y2Q0YThjZTEwMGU4ZmI5YjMwNy90YWJsZXJhbmdlOmYxYTZmYmE0NzRjNzRjZDRhOGNlMTAwZThmYjliMzA3XzgtMS0xLTEtMzAxNDA_50bf103b-707e-429f-9d82-67a1a476d377"
      unitRef="usd">4384000</spsc:DeferredTaxAssetsOperatingLeaseLiabilities>
    <spsc:DeferredTaxAssetsOperatingLeaseLiabilities
      contextRef="i62ba0be1fd094d818a1f7d0d5504d1e2_I20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjQvZnJhZzpkYzQzZDFiNTQ4YWQ0NjRkOGIyOTU0ZmRhZjdjNzc4Mi90YWJsZTpmMWE2ZmJhNDc0Yzc0Y2Q0YThjZTEwMGU4ZmI5YjMwNy90YWJsZXJhbmdlOmYxYTZmYmE0NzRjNzRjZDRhOGNlMTAwZThmYjliMzA3XzgtMy0xLTEtMzAxNDA_53197054-0faf-468e-98da-4144a2e31603"
      unitRef="usd">5235000</spsc:DeferredTaxAssetsOperatingLeaseLiabilities>
    <us-gaap:DeferredTaxAssetsInProcessResearchAndDevelopment
      contextRef="ibbc2d589a09c46368d9dd3e9ea8996c6_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjQvZnJhZzpkYzQzZDFiNTQ4YWQ0NjRkOGIyOTU0ZmRhZjdjNzc4Mi90YWJsZTpmMWE2ZmJhNDc0Yzc0Y2Q0YThjZTEwMGU4ZmI5YjMwNy90YWJsZXJhbmdlOmYxYTZmYmE0NzRjNzRjZDRhOGNlMTAwZThmYjliMzA3XzctMS0xLTEtMTAxNjc2_d6218671-d2f9-4ca0-9d49-d3bdccae4cbd"
      unitRef="usd">9591000</us-gaap:DeferredTaxAssetsInProcessResearchAndDevelopment>
    <us-gaap:DeferredTaxAssetsInProcessResearchAndDevelopment
      contextRef="i62ba0be1fd094d818a1f7d0d5504d1e2_I20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjQvZnJhZzpkYzQzZDFiNTQ4YWQ0NjRkOGIyOTU0ZmRhZjdjNzc4Mi90YWJsZTpmMWE2ZmJhNDc0Yzc0Y2Q0YThjZTEwMGU4ZmI5YjMwNy90YWJsZXJhbmdlOmYxYTZmYmE0NzRjNzRjZDRhOGNlMTAwZThmYjliMzA3XzctMy0xLTEtMTAxNjc2_40f76683-cbc8-40f4-b751-e90bc80cc446"
      unitRef="usd">0</us-gaap:DeferredTaxAssetsInProcessResearchAndDevelopment>
    <us-gaap:DeferredTaxAssetsOther
      contextRef="ibbc2d589a09c46368d9dd3e9ea8996c6_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjQvZnJhZzpkYzQzZDFiNTQ4YWQ0NjRkOGIyOTU0ZmRhZjdjNzc4Mi90YWJsZTpmMWE2ZmJhNDc0Yzc0Y2Q0YThjZTEwMGU4ZmI5YjMwNy90YWJsZXJhbmdlOmYxYTZmYmE0NzRjNzRjZDRhOGNlMTAwZThmYjliMzA3XzktMS0xLTEtMzAxNDA_2d25d354-26ac-4ddb-a71b-9a03abd9ae7e"
      unitRef="usd">2408000</us-gaap:DeferredTaxAssetsOther>
    <us-gaap:DeferredTaxAssetsOther
      contextRef="i62ba0be1fd094d818a1f7d0d5504d1e2_I20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjQvZnJhZzpkYzQzZDFiNTQ4YWQ0NjRkOGIyOTU0ZmRhZjdjNzc4Mi90YWJsZTpmMWE2ZmJhNDc0Yzc0Y2Q0YThjZTEwMGU4ZmI5YjMwNy90YWJsZXJhbmdlOmYxYTZmYmE0NzRjNzRjZDRhOGNlMTAwZThmYjliMzA3XzktMy0xLTEtMzAxNDA_0e8c3b3e-9ac0-434f-bf33-f6fc698c7240"
      unitRef="usd">2778000</us-gaap:DeferredTaxAssetsOther>
    <us-gaap:DeferredTaxAssetsGross
      contextRef="ibbc2d589a09c46368d9dd3e9ea8996c6_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjQvZnJhZzpkYzQzZDFiNTQ4YWQ0NjRkOGIyOTU0ZmRhZjdjNzc4Mi90YWJsZTpmMWE2ZmJhNDc0Yzc0Y2Q0YThjZTEwMGU4ZmI5YjMwNy90YWJsZXJhbmdlOmYxYTZmYmE0NzRjNzRjZDRhOGNlMTAwZThmYjliMzA3XzEwLTEtMS0xLTMwMTQw_878ff48d-bb4c-4a91-8b22-e35a7aa94270"
      unitRef="usd">35906000</us-gaap:DeferredTaxAssetsGross>
    <us-gaap:DeferredTaxAssetsGross
      contextRef="i62ba0be1fd094d818a1f7d0d5504d1e2_I20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjQvZnJhZzpkYzQzZDFiNTQ4YWQ0NjRkOGIyOTU0ZmRhZjdjNzc4Mi90YWJsZTpmMWE2ZmJhNDc0Yzc0Y2Q0YThjZTEwMGU4ZmI5YjMwNy90YWJsZXJhbmdlOmYxYTZmYmE0NzRjNzRjZDRhOGNlMTAwZThmYjliMzA3XzEwLTMtMS0xLTMwMTQw_944d5e7f-362f-4d4d-a4a0-80fad12cb2d8"
      unitRef="usd">21949000</us-gaap:DeferredTaxAssetsGross>
    <us-gaap:DeferredTaxAssetsValuationAllowance
      contextRef="ibbc2d589a09c46368d9dd3e9ea8996c6_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjQvZnJhZzpkYzQzZDFiNTQ4YWQ0NjRkOGIyOTU0ZmRhZjdjNzc4Mi90YWJsZTpmMWE2ZmJhNDc0Yzc0Y2Q0YThjZTEwMGU4ZmI5YjMwNy90YWJsZXJhbmdlOmYxYTZmYmE0NzRjNzRjZDRhOGNlMTAwZThmYjliMzA3XzExLTEtMS0xLTMwMTQw_6cfe3351-b453-4f50-bd98-7a6631e0ee44"
      unitRef="usd">1873000</us-gaap:DeferredTaxAssetsValuationAllowance>
    <us-gaap:DeferredTaxAssetsValuationAllowance
      contextRef="i62ba0be1fd094d818a1f7d0d5504d1e2_I20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjQvZnJhZzpkYzQzZDFiNTQ4YWQ0NjRkOGIyOTU0ZmRhZjdjNzc4Mi90YWJsZTpmMWE2ZmJhNDc0Yzc0Y2Q0YThjZTEwMGU4ZmI5YjMwNy90YWJsZXJhbmdlOmYxYTZmYmE0NzRjNzRjZDRhOGNlMTAwZThmYjliMzA3XzExLTMtMS0xLTMwMTQw_a1c34c21-0657-42bd-9747-64777ffc6c87"
      unitRef="usd">1815000</us-gaap:DeferredTaxAssetsValuationAllowance>
    <us-gaap:DeferredTaxAssetsNet
      contextRef="ibbc2d589a09c46368d9dd3e9ea8996c6_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjQvZnJhZzpkYzQzZDFiNTQ4YWQ0NjRkOGIyOTU0ZmRhZjdjNzc4Mi90YWJsZTpmMWE2ZmJhNDc0Yzc0Y2Q0YThjZTEwMGU4ZmI5YjMwNy90YWJsZXJhbmdlOmYxYTZmYmE0NzRjNzRjZDRhOGNlMTAwZThmYjliMzA3XzEyLTEtMS0xLTMwMTQw_740e6489-a444-4a15-8300-af186d77137c"
      unitRef="usd">34033000</us-gaap:DeferredTaxAssetsNet>
    <us-gaap:DeferredTaxAssetsNet
      contextRef="i62ba0be1fd094d818a1f7d0d5504d1e2_I20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjQvZnJhZzpkYzQzZDFiNTQ4YWQ0NjRkOGIyOTU0ZmRhZjdjNzc4Mi90YWJsZTpmMWE2ZmJhNDc0Yzc0Y2Q0YThjZTEwMGU4ZmI5YjMwNy90YWJsZXJhbmdlOmYxYTZmYmE0NzRjNzRjZDRhOGNlMTAwZThmYjliMzA3XzEyLTMtMS0xLTMwMTQw_9f8e9e44-32d7-44c4-b73c-720a692ece23"
      unitRef="usd">20134000</us-gaap:DeferredTaxAssetsNet>
    <spsc:DeferredTaxLiabilitiesDeferredRevenueAndExpense
      contextRef="ibbc2d589a09c46368d9dd3e9ea8996c6_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjQvZnJhZzpkYzQzZDFiNTQ4YWQ0NjRkOGIyOTU0ZmRhZjdjNzc4Mi90YWJsZTpmMWE2ZmJhNDc0Yzc0Y2Q0YThjZTEwMGU4ZmI5YjMwNy90YWJsZXJhbmdlOmYxYTZmYmE0NzRjNzRjZDRhOGNlMTAwZThmYjliMzA3XzE1LTEtMS0xLTMwMTQw_0368da9c-506c-4b56-9820-d7925a1b9900"
      unitRef="usd">17696000</spsc:DeferredTaxLiabilitiesDeferredRevenueAndExpense>
    <spsc:DeferredTaxLiabilitiesDeferredRevenueAndExpense
      contextRef="i62ba0be1fd094d818a1f7d0d5504d1e2_I20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjQvZnJhZzpkYzQzZDFiNTQ4YWQ0NjRkOGIyOTU0ZmRhZjdjNzc4Mi90YWJsZTpmMWE2ZmJhNDc0Yzc0Y2Q0YThjZTEwMGU4ZmI5YjMwNy90YWJsZXJhbmdlOmYxYTZmYmE0NzRjNzRjZDRhOGNlMTAwZThmYjliMzA3XzE1LTMtMS0xLTMwMTQw_264cd173-05fd-46d6-a7f0-f0759af60603"
      unitRef="usd">15126000</spsc:DeferredTaxLiabilitiesDeferredRevenueAndExpense>
    <spsc:DeferredTaxLiabilitiesRightOfUseAssets
      contextRef="ibbc2d589a09c46368d9dd3e9ea8996c6_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjQvZnJhZzpkYzQzZDFiNTQ4YWQ0NjRkOGIyOTU0ZmRhZjdjNzc4Mi90YWJsZTpmMWE2ZmJhNDc0Yzc0Y2Q0YThjZTEwMGU4ZmI5YjMwNy90YWJsZXJhbmdlOmYxYTZmYmE0NzRjNzRjZDRhOGNlMTAwZThmYjliMzA3XzE2LTEtMS0xLTMwMTQw_d292cf48-7edb-4cf1-8c82-0cd0509a4e21"
      unitRef="usd">2338000</spsc:DeferredTaxLiabilitiesRightOfUseAssets>
    <spsc:DeferredTaxLiabilitiesRightOfUseAssets
      contextRef="i62ba0be1fd094d818a1f7d0d5504d1e2_I20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjQvZnJhZzpkYzQzZDFiNTQ4YWQ0NjRkOGIyOTU0ZmRhZjdjNzc4Mi90YWJsZTpmMWE2ZmJhNDc0Yzc0Y2Q0YThjZTEwMGU4ZmI5YjMwNy90YWJsZXJhbmdlOmYxYTZmYmE0NzRjNzRjZDRhOGNlMTAwZThmYjliMzA3XzE2LTMtMS0xLTMwMTQw_e9c40873-39a5-4fdd-bee0-192c8a6bc62f"
      unitRef="usd">2787000</spsc:DeferredTaxLiabilitiesRightOfUseAssets>
    <spsc:DeferredTaxLiabilitiesPropertyPlantAndEquipmentAndOtherFiniteLivedAssets
      contextRef="ibbc2d589a09c46368d9dd3e9ea8996c6_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjQvZnJhZzpkYzQzZDFiNTQ4YWQ0NjRkOGIyOTU0ZmRhZjdjNzc4Mi90YWJsZTpmMWE2ZmJhNDc0Yzc0Y2Q0YThjZTEwMGU4ZmI5YjMwNy90YWJsZXJhbmdlOmYxYTZmYmE0NzRjNzRjZDRhOGNlMTAwZThmYjliMzA3XzE4LTEtMS0xLTMwMTQw_033ad3fc-b361-443b-ab68-d3c0fe76bad3"
      unitRef="usd">20282000</spsc:DeferredTaxLiabilitiesPropertyPlantAndEquipmentAndOtherFiniteLivedAssets>
    <spsc:DeferredTaxLiabilitiesPropertyPlantAndEquipmentAndOtherFiniteLivedAssets
      contextRef="i62ba0be1fd094d818a1f7d0d5504d1e2_I20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjQvZnJhZzpkYzQzZDFiNTQ4YWQ0NjRkOGIyOTU0ZmRhZjdjNzc4Mi90YWJsZTpmMWE2ZmJhNDc0Yzc0Y2Q0YThjZTEwMGU4ZmI5YjMwNy90YWJsZXJhbmdlOmYxYTZmYmE0NzRjNzRjZDRhOGNlMTAwZThmYjliMzA3XzE4LTMtMS0xLTMwMTQw_af179ebb-01a3-4309-ae72-8b0b27c12213"
      unitRef="usd">8820000</spsc:DeferredTaxLiabilitiesPropertyPlantAndEquipmentAndOtherFiniteLivedAssets>
    <us-gaap:DeferredTaxLiabilitiesOther
      contextRef="ibbc2d589a09c46368d9dd3e9ea8996c6_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjQvZnJhZzpkYzQzZDFiNTQ4YWQ0NjRkOGIyOTU0ZmRhZjdjNzc4Mi90YWJsZTpmMWE2ZmJhNDc0Yzc0Y2Q0YThjZTEwMGU4ZmI5YjMwNy90YWJsZXJhbmdlOmYxYTZmYmE0NzRjNzRjZDRhOGNlMTAwZThmYjliMzA3XzE5LTEtMS0xLTMwMTQw_698615c3-28a4-4466-8a90-a0427cad6d82"
      unitRef="usd">909000</us-gaap:DeferredTaxLiabilitiesOther>
    <us-gaap:DeferredTaxLiabilitiesOther
      contextRef="i62ba0be1fd094d818a1f7d0d5504d1e2_I20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjQvZnJhZzpkYzQzZDFiNTQ4YWQ0NjRkOGIyOTU0ZmRhZjdjNzc4Mi90YWJsZTpmMWE2ZmJhNDc0Yzc0Y2Q0YThjZTEwMGU4ZmI5YjMwNy90YWJsZXJhbmdlOmYxYTZmYmE0NzRjNzRjZDRhOGNlMTAwZThmYjliMzA3XzE5LTMtMS0xLTMwMTQw_7c5c98ec-03e8-42c7-9424-74c9e64f4a82"
      unitRef="usd">364000</us-gaap:DeferredTaxLiabilitiesOther>
    <us-gaap:DeferredIncomeTaxLiabilities
      contextRef="ibbc2d589a09c46368d9dd3e9ea8996c6_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjQvZnJhZzpkYzQzZDFiNTQ4YWQ0NjRkOGIyOTU0ZmRhZjdjNzc4Mi90YWJsZTpmMWE2ZmJhNDc0Yzc0Y2Q0YThjZTEwMGU4ZmI5YjMwNy90YWJsZXJhbmdlOmYxYTZmYmE0NzRjNzRjZDRhOGNlMTAwZThmYjliMzA3XzIwLTEtMS0xLTMwMTQw_e9b30a80-cb1e-4afb-8e73-8240b2fc324d"
      unitRef="usd">41225000</us-gaap:DeferredIncomeTaxLiabilities>
    <us-gaap:DeferredIncomeTaxLiabilities
      contextRef="i62ba0be1fd094d818a1f7d0d5504d1e2_I20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjQvZnJhZzpkYzQzZDFiNTQ4YWQ0NjRkOGIyOTU0ZmRhZjdjNzc4Mi90YWJsZTpmMWE2ZmJhNDc0Yzc0Y2Q0YThjZTEwMGU4ZmI5YjMwNy90YWJsZXJhbmdlOmYxYTZmYmE0NzRjNzRjZDRhOGNlMTAwZThmYjliMzA3XzIwLTMtMS0xLTMwMTQw_3bc69698-bbe3-494b-a2a1-6d40249806ab"
      unitRef="usd">27097000</us-gaap:DeferredIncomeTaxLiabilities>
    <us-gaap:DeferredTaxLiabilities
      contextRef="ibbc2d589a09c46368d9dd3e9ea8996c6_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjQvZnJhZzpkYzQzZDFiNTQ4YWQ0NjRkOGIyOTU0ZmRhZjdjNzc4Mi90YWJsZTpmMWE2ZmJhNDc0Yzc0Y2Q0YThjZTEwMGU4ZmI5YjMwNy90YWJsZXJhbmdlOmYxYTZmYmE0NzRjNzRjZDRhOGNlMTAwZThmYjliMzA3XzIxLTEtMS0xLTMwMTQw_74abe9c1-615e-4c52-9392-5de365cdf0ff"
      unitRef="usd">7192000</us-gaap:DeferredTaxLiabilities>
    <us-gaap:DeferredTaxLiabilities
      contextRef="i62ba0be1fd094d818a1f7d0d5504d1e2_I20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjQvZnJhZzpkYzQzZDFiNTQ4YWQ0NjRkOGIyOTU0ZmRhZjdjNzc4Mi90YWJsZTpmMWE2ZmJhNDc0Yzc0Y2Q0YThjZTEwMGU4ZmI5YjMwNy90YWJsZXJhbmdlOmYxYTZmYmE0NzRjNzRjZDRhOGNlMTAwZThmYjliMzA3XzIxLTMtMS0xLTMwMTQw_a17338af-507b-48c1-b179-b32b49f2a1af"
      unitRef="usd">6963000</us-gaap:DeferredTaxLiabilities>
    <us-gaap:OperatingLossCarryforwards
      contextRef="if67db197d6074863b7181a1a2ca41ac1_I20221231"
      decimals="-5"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjQvZnJhZzpkYzQzZDFiNTQ4YWQ0NjRkOGIyOTU0ZmRhZjdjNzc4Mi90ZXh0cmVnaW9uOmRjNDNkMWI1NDhhZDQ2NGQ4YjI5NTRmZGFmN2M3NzgyXzM5Nw_01c67711-f83b-42f7-bad8-f7fd9f47c7d3"
      unitRef="usd">40900000</us-gaap:OperatingLossCarryforwards>
    <us-gaap:OperatingLossCarryforwards
      contextRef="i203b709d20e34196ad7cc9840424ac39_I20221231"
      decimals="-5"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjQvZnJhZzpkYzQzZDFiNTQ4YWQ0NjRkOGIyOTU0ZmRhZjdjNzc4Mi90ZXh0cmVnaW9uOmRjNDNkMWI1NDhhZDQ2NGQ4YjI5NTRmZGFmN2M3NzgyXzQzNA_c03e0621-48b3-471b-b959-f5434df7a72d"
      unitRef="usd">4500000</us-gaap:OperatingLossCarryforwards>
    <us-gaap:OperatingLossCarryforwards
      contextRef="i185a39aaa67b4911aa880cfb6865cb8c_I20221231"
      decimals="-5"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjQvZnJhZzpkYzQzZDFiNTQ4YWQ0NjRkOGIyOTU0ZmRhZjdjNzc4Mi90ZXh0cmVnaW9uOmRjNDNkMWI1NDhhZDQ2NGQ4YjI5NTRmZGFmN2M3NzgyXzc3OA_6ddc3e6c-ad6b-44b0-8c58-2183b629e769"
      unitRef="usd">40900000</us-gaap:OperatingLossCarryforwards>
    <spsc:OperatingLossCarryforwardExpirableUnusedAmount
      contextRef="if67db197d6074863b7181a1a2ca41ac1_I20221231"
      decimals="-5"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjQvZnJhZzpkYzQzZDFiNTQ4YWQ0NjRkOGIyOTU0ZmRhZjdjNzc4Mi90ZXh0cmVnaW9uOmRjNDNkMWI1NDhhZDQ2NGQ4YjI5NTRmZGFmN2M3NzgyXzg4MQ_f8f54606-42bd-44af-ba06-4de8c807f604"
      unitRef="usd">6800000</spsc:OperatingLossCarryforwardExpirableUnusedAmount>
    <us-gaap:OtherNonoperatingIncomeAndExpenseTextBlock
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjcvZnJhZzpkY2I1ODRkZDM5Y2Y0OGM0YTcyZmM1MzEzMGJhMTJiMC90ZXh0cmVnaW9uOmRjYjU4NGRkMzljZjQ4YzRhNzJmYzUzMTMwYmExMmIwXzYyMg_f0bde791-3a8a-4f97-834b-4af595f8e675">Other Income and Expense&lt;div style="margin-top:6pt;text-indent:27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;Other income (expense), net included the following:&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-align:center"&gt;&lt;table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"&gt;&lt;tr&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:58.142%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.081%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.406%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.081%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.406%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.084%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="15" style="padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;Year Ended December 31,&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;(in thousands)&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;2022&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;2021&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;2020&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Investment income&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;1,670&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;278&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;1,208&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Realized gain (loss) from foreign currency on cash and investments held&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;(1,026)&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;(1,456)&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;1,753&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Change in earn-out liability&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;&#x2014;&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;&#x2014;&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;(85)&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Other expense, net&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;(502)&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;(366)&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;(354)&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 19pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Total other income (expense), net&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;142&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;(1,544)&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;2,522&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;Effective January 1, 2021, all realized gains or losses and interest income on our investments are included in investment income. Previously, realized gains and losses were included in other income (expense), net and interest income was included in interest income, net. Additionally, realized gains or losses from foreign currency on cash and investments &lt;/span&gt;&lt;/div&gt;held were previously included in other income (expense), net. Amounts for the year ended December 31, 2020 have been reclassified to be consistent with the current classification.</us-gaap:OtherNonoperatingIncomeAndExpenseTextBlock>
    <us-gaap:ScheduleOfOtherNonoperatingIncomeExpenseTableTextBlock
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjcvZnJhZzpkY2I1ODRkZDM5Y2Y0OGM0YTcyZmM1MzEzMGJhMTJiMC90ZXh0cmVnaW9uOmRjYjU4NGRkMzljZjQ4YzRhNzJmYzUzMTMwYmExMmIwXzYyMw_cea36854-a171-404e-aa4a-748694ffe670">&lt;div style="margin-top:6pt;text-indent:27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;Other income (expense), net included the following:&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-align:center"&gt;&lt;table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"&gt;&lt;tr&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:58.142%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.081%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.406%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.081%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.406%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.084%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="15" style="padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;Year Ended December 31,&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;(in thousands)&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;2022&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;2021&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;2020&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Investment income&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;1,670&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;278&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;1,208&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Realized gain (loss) from foreign currency on cash and investments held&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;(1,026)&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;(1,456)&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;1,753&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Change in earn-out liability&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;&#x2014;&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;&#x2014;&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;(85)&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Other expense, net&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;(502)&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;(366)&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;(354)&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 19pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Total other income (expense), net&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;142&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;(1,544)&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;2,522&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;</us-gaap:ScheduleOfOtherNonoperatingIncomeExpenseTableTextBlock>
    <us-gaap:InvestmentIncomeNet
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjcvZnJhZzpkY2I1ODRkZDM5Y2Y0OGM0YTcyZmM1MzEzMGJhMTJiMC90YWJsZTo4MTM5MzNhNTljMzA0MDk0ODc5ZDU3NWQ1NDdjODJlMi90YWJsZXJhbmdlOjgxMzkzM2E1OWMzMDQwOTQ4NzlkNTc1ZDU0N2M4MmUyXzItMS0xLTEtMzAxNDA_408b48d1-518b-4707-8258-3267dc0c171b"
      unitRef="usd">1670000</us-gaap:InvestmentIncomeNet>
    <us-gaap:InvestmentIncomeNet
      contextRef="ie07f2822175c48edbb8d5559ceb82e6f_D20210101-20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjcvZnJhZzpkY2I1ODRkZDM5Y2Y0OGM0YTcyZmM1MzEzMGJhMTJiMC90YWJsZTo4MTM5MzNhNTljMzA0MDk0ODc5ZDU3NWQ1NDdjODJlMi90YWJsZXJhbmdlOjgxMzkzM2E1OWMzMDQwOTQ4NzlkNTc1ZDU0N2M4MmUyXzItMy0xLTEtMzAxNDA_3b8b845e-a15d-460e-8630-078a1f6d68dd"
      unitRef="usd">278000</us-gaap:InvestmentIncomeNet>
    <us-gaap:InvestmentIncomeNet
      contextRef="i4751184d7e5948509cd8893fd49fb821_D20200101-20201231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjcvZnJhZzpkY2I1ODRkZDM5Y2Y0OGM0YTcyZmM1MzEzMGJhMTJiMC90YWJsZTo4MTM5MzNhNTljMzA0MDk0ODc5ZDU3NWQ1NDdjODJlMi90YWJsZXJhbmdlOjgxMzkzM2E1OWMzMDQwOTQ4NzlkNTc1ZDU0N2M4MmUyXzItNS0xLTEtMzAxNDA_739fed0b-6b14-4820-828f-df92023717b8"
      unitRef="usd">1208000</us-gaap:InvestmentIncomeNet>
    <us-gaap:ForeignCurrencyTransactionGainLossBeforeTax
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjcvZnJhZzpkY2I1ODRkZDM5Y2Y0OGM0YTcyZmM1MzEzMGJhMTJiMC90YWJsZTo4MTM5MzNhNTljMzA0MDk0ODc5ZDU3NWQ1NDdjODJlMi90YWJsZXJhbmdlOjgxMzkzM2E1OWMzMDQwOTQ4NzlkNTc1ZDU0N2M4MmUyXzMtMS0xLTEtMzAxNDA_0158102a-07a0-4d3e-aed3-b4479c753817"
      unitRef="usd">-1026000</us-gaap:ForeignCurrencyTransactionGainLossBeforeTax>
    <us-gaap:ForeignCurrencyTransactionGainLossBeforeTax
      contextRef="ie07f2822175c48edbb8d5559ceb82e6f_D20210101-20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjcvZnJhZzpkY2I1ODRkZDM5Y2Y0OGM0YTcyZmM1MzEzMGJhMTJiMC90YWJsZTo4MTM5MzNhNTljMzA0MDk0ODc5ZDU3NWQ1NDdjODJlMi90YWJsZXJhbmdlOjgxMzkzM2E1OWMzMDQwOTQ4NzlkNTc1ZDU0N2M4MmUyXzMtMy0xLTEtMzAxNDA_7cf7c642-7b40-49f8-8331-56eb368e50ef"
      unitRef="usd">-1456000</us-gaap:ForeignCurrencyTransactionGainLossBeforeTax>
    <us-gaap:ForeignCurrencyTransactionGainLossBeforeTax
      contextRef="i4751184d7e5948509cd8893fd49fb821_D20200101-20201231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjcvZnJhZzpkY2I1ODRkZDM5Y2Y0OGM0YTcyZmM1MzEzMGJhMTJiMC90YWJsZTo4MTM5MzNhNTljMzA0MDk0ODc5ZDU3NWQ1NDdjODJlMi90YWJsZXJhbmdlOjgxMzkzM2E1OWMzMDQwOTQ4NzlkNTc1ZDU0N2M4MmUyXzMtNS0xLTEtMzAxNDA_ddd6de8e-5217-4efd-8f78-25b3c8d23100"
      unitRef="usd">1753000</us-gaap:ForeignCurrencyTransactionGainLossBeforeTax>
    <spsc:BusinessCombinationContingentConsiderationArrangementsChangeInAmountOfContingentEarnOutLiability
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjcvZnJhZzpkY2I1ODRkZDM5Y2Y0OGM0YTcyZmM1MzEzMGJhMTJiMC90YWJsZTo4MTM5MzNhNTljMzA0MDk0ODc5ZDU3NWQ1NDdjODJlMi90YWJsZXJhbmdlOjgxMzkzM2E1OWMzMDQwOTQ4NzlkNTc1ZDU0N2M4MmUyXzQtMS0xLTEtMzAxNDA_6232e970-6327-47f5-bfbb-b4efdf658dea"
      unitRef="usd">0</spsc:BusinessCombinationContingentConsiderationArrangementsChangeInAmountOfContingentEarnOutLiability>
    <spsc:BusinessCombinationContingentConsiderationArrangementsChangeInAmountOfContingentEarnOutLiability
      contextRef="ie07f2822175c48edbb8d5559ceb82e6f_D20210101-20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjcvZnJhZzpkY2I1ODRkZDM5Y2Y0OGM0YTcyZmM1MzEzMGJhMTJiMC90YWJsZTo4MTM5MzNhNTljMzA0MDk0ODc5ZDU3NWQ1NDdjODJlMi90YWJsZXJhbmdlOjgxMzkzM2E1OWMzMDQwOTQ4NzlkNTc1ZDU0N2M4MmUyXzQtMy0xLTEtMzAxNDA_552776c0-ce0e-4437-8ec9-0290a0b1a950"
      unitRef="usd">0</spsc:BusinessCombinationContingentConsiderationArrangementsChangeInAmountOfContingentEarnOutLiability>
    <spsc:BusinessCombinationContingentConsiderationArrangementsChangeInAmountOfContingentEarnOutLiability
      contextRef="i4751184d7e5948509cd8893fd49fb821_D20200101-20201231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjcvZnJhZzpkY2I1ODRkZDM5Y2Y0OGM0YTcyZmM1MzEzMGJhMTJiMC90YWJsZTo4MTM5MzNhNTljMzA0MDk0ODc5ZDU3NWQ1NDdjODJlMi90YWJsZXJhbmdlOjgxMzkzM2E1OWMzMDQwOTQ4NzlkNTc1ZDU0N2M4MmUyXzQtNS0xLTEtMzAxNDA_4eefa792-b81c-418d-b9aa-53f62f9fccfb"
      unitRef="usd">-85000</spsc:BusinessCombinationContingentConsiderationArrangementsChangeInAmountOfContingentEarnOutLiability>
    <us-gaap:OtherNonoperatingIncomeExpense
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjcvZnJhZzpkY2I1ODRkZDM5Y2Y0OGM0YTcyZmM1MzEzMGJhMTJiMC90YWJsZTo4MTM5MzNhNTljMzA0MDk0ODc5ZDU3NWQ1NDdjODJlMi90YWJsZXJhbmdlOjgxMzkzM2E1OWMzMDQwOTQ4NzlkNTc1ZDU0N2M4MmUyXzUtMS0xLTEtMzAxNDA_84cce2b9-64a3-423c-bbba-3cf62d38b2d4"
      unitRef="usd">-502000</us-gaap:OtherNonoperatingIncomeExpense>
    <us-gaap:OtherNonoperatingIncomeExpense
      contextRef="ie07f2822175c48edbb8d5559ceb82e6f_D20210101-20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjcvZnJhZzpkY2I1ODRkZDM5Y2Y0OGM0YTcyZmM1MzEzMGJhMTJiMC90YWJsZTo4MTM5MzNhNTljMzA0MDk0ODc5ZDU3NWQ1NDdjODJlMi90YWJsZXJhbmdlOjgxMzkzM2E1OWMzMDQwOTQ4NzlkNTc1ZDU0N2M4MmUyXzUtMy0xLTEtMzAxNDA_8e07f9b6-20b9-48d7-a015-f3d0cdf2cf45"
      unitRef="usd">-366000</us-gaap:OtherNonoperatingIncomeExpense>
    <us-gaap:OtherNonoperatingIncomeExpense
      contextRef="i4751184d7e5948509cd8893fd49fb821_D20200101-20201231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjcvZnJhZzpkY2I1ODRkZDM5Y2Y0OGM0YTcyZmM1MzEzMGJhMTJiMC90YWJsZTo4MTM5MzNhNTljMzA0MDk0ODc5ZDU3NWQ1NDdjODJlMi90YWJsZXJhbmdlOjgxMzkzM2E1OWMzMDQwOTQ4NzlkNTc1ZDU0N2M4MmUyXzUtNS0xLTEtMzAxNDA_e3ad7975-4605-44ee-86cf-39d0e7eb3da5"
      unitRef="usd">-354000</us-gaap:OtherNonoperatingIncomeExpense>
    <us-gaap:NonoperatingIncomeExpense
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjcvZnJhZzpkY2I1ODRkZDM5Y2Y0OGM0YTcyZmM1MzEzMGJhMTJiMC90YWJsZTo4MTM5MzNhNTljMzA0MDk0ODc5ZDU3NWQ1NDdjODJlMi90YWJsZXJhbmdlOjgxMzkzM2E1OWMzMDQwOTQ4NzlkNTc1ZDU0N2M4MmUyXzYtMS0xLTEtMzAxNDA_177b3032-cd35-428e-b66e-22e66f69e75a"
      unitRef="usd">142000</us-gaap:NonoperatingIncomeExpense>
    <us-gaap:NonoperatingIncomeExpense
      contextRef="ie07f2822175c48edbb8d5559ceb82e6f_D20210101-20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjcvZnJhZzpkY2I1ODRkZDM5Y2Y0OGM0YTcyZmM1MzEzMGJhMTJiMC90YWJsZTo4MTM5MzNhNTljMzA0MDk0ODc5ZDU3NWQ1NDdjODJlMi90YWJsZXJhbmdlOjgxMzkzM2E1OWMzMDQwOTQ4NzlkNTc1ZDU0N2M4MmUyXzYtMy0xLTEtMzAxNDA_7194d6e7-5c5f-4c5b-9fc7-e210ff993952"
      unitRef="usd">-1544000</us-gaap:NonoperatingIncomeExpense>
    <us-gaap:NonoperatingIncomeExpense
      contextRef="i4751184d7e5948509cd8893fd49fb821_D20200101-20201231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMjcvZnJhZzpkY2I1ODRkZDM5Y2Y0OGM0YTcyZmM1MzEzMGJhMTJiMC90YWJsZTo4MTM5MzNhNTljMzA0MDk0ODc5ZDU3NWQ1NDdjODJlMi90YWJsZXJhbmdlOjgxMzkzM2E1OWMzMDQwOTQ4NzlkNTc1ZDU0N2M4MmUyXzYtNS0xLTEtMzAxNDA_2b3d062e-48ef-4120-8611-b4264f8cbe66"
      unitRef="usd">2522000</us-gaap:NonoperatingIncomeExpense>
    <us-gaap:EarningsPerShareTextBlock
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMzAvZnJhZzpmM2RmZjUxNzVkMDU0M2M0ODNkMDcxZGZlZDFkYjliYS90ZXh0cmVnaW9uOmYzZGZmNTE3NWQwNTQzYzQ4M2QwNzFkZmVkMWRiOWJhXzI5OA_91e818f1-01fb-49ec-b092-1d020dd7c238">Net Income Per Share&lt;div style="margin-top:6pt;text-indent:27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;The components and computation of basic and diluted net income per share were as follows:&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-align:center"&gt;&lt;table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"&gt;&lt;tr&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:58.142%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.081%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.406%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.081%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.406%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.084%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="15" style="padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;Year Ended December 31,&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;(in thousands, except per share amounts)&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;2022&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;2021&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;2020&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Numerator&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Net income&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;55,134&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;44,597&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;45,586&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Denominator&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;&#160;&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;&#160;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Weighted average common shares outstanding, basic&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;36,117&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;35,928&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;35,226&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 25pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Options to purchase common stock&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;382&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;529&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;611&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 25pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;PSUs, RSUs, RSAs, and DSUs&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;454&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;505&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;448&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Weighted average common shares outstanding, diluted&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;36,953&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;36,962&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;36,285&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Net income per share&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#ffffff;border-top:3pt double #000;padding:2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;&#160;&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#ffffff;border-top:3pt double #000;padding:2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;&#160;&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#ffffff;border-top:3pt double #000;padding:2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;&#160;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Basic&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;1.53&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;1.24&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;1.29&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Diluted&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;1.49&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;1.21&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;1.26&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;/table&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:6pt;font-weight:400;line-height:120%"&gt; &lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;The number of outstanding potential common shares that were excluded from the calculation of diluted net income per share as they were anti-dilutive was as follows:&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-align:center"&gt;&lt;table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"&gt;&lt;tr&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:58.142%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.081%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.406%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.081%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.406%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.084%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="15" style="padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;Year Ended December 31,&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;(in thousands)&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;2022&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;2021&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;2020&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Anti-dilutive shares&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;75&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;31&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;26&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;</us-gaap:EarningsPerShareTextBlock>
    <us-gaap:ScheduleOfEarningsPerShareBasicAndDilutedTableTextBlock
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMzAvZnJhZzpmM2RmZjUxNzVkMDU0M2M0ODNkMDcxZGZlZDFkYjliYS90ZXh0cmVnaW9uOmYzZGZmNTE3NWQwNTQzYzQ4M2QwNzFkZmVkMWRiOWJhXzI5OQ_1f73c4f0-29cc-4f48-a778-6c1fec5b65d0">The components and computation of basic and diluted net income per share were as follows:&lt;table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"&gt;&lt;tr&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:58.142%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.081%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.406%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.081%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.406%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.084%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="15" style="padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;Year Ended December 31,&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;(in thousands, except per share amounts)&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;2022&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;2021&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;2020&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Numerator&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Net income&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;55,134&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;44,597&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;45,586&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Denominator&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;&#160;&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;&#160;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Weighted average common shares outstanding, basic&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;36,117&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;35,928&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;35,226&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 25pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Options to purchase common stock&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;382&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;529&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;611&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 25pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;PSUs, RSUs, RSAs, and DSUs&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;454&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;505&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;448&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Weighted average common shares outstanding, diluted&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;36,953&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;36,962&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;36,285&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Net income per share&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#ffffff;border-top:3pt double #000;padding:2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;&#160;&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#ffffff;border-top:3pt double #000;padding:2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;&#160;&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#ffffff;border-top:3pt double #000;padding:2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;&#160;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Basic&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;1.53&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;1.24&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;1.29&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Diluted&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;1.49&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;1.21&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;1.26&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;/table&gt;</us-gaap:ScheduleOfEarningsPerShareBasicAndDilutedTableTextBlock>
    <us-gaap:NetIncomeLoss
      contextRef="ib939d0c039e943a29f716bd2783b371f_D20220101-20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMzAvZnJhZzpmM2RmZjUxNzVkMDU0M2M0ODNkMDcxZGZlZDFkYjliYS90YWJsZTo5MjE0Yzk4ZjczMjU0NDI2YmEyZmE5ZjdjZTQyNzk0MC90YWJsZXJhbmdlOjkyMTRjOThmNzMyNTQ0MjZiYTJmYTlmN2NlNDI3OTQwXzMtMS0xLTEtMzAxNDA_12a87114-624c-4aca-878b-afd58c895912"
      unitRef="usd">55134000</us-gaap:NetIncomeLoss>
    <us-gaap:NetIncomeLoss
      contextRef="ie07f2822175c48edbb8d5559ceb82e6f_D20210101-20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMzAvZnJhZzpmM2RmZjUxNzVkMDU0M2M0ODNkMDcxZGZlZDFkYjliYS90YWJsZTo5MjE0Yzk4ZjczMjU0NDI2YmEyZmE5ZjdjZTQyNzk0MC90YWJsZXJhbmdlOjkyMTRjOThmNzMyNTQ0MjZiYTJmYTlmN2NlNDI3OTQwXzMtMy0xLTEtMzAxNDA_8d08a294-a5ef-48a0-8330-849743d82c95"
      unitRef="usd">44597000</us-gaap:NetIncomeLoss>
    <us-gaap:NetIncomeLoss
      contextRef="i4751184d7e5948509cd8893fd49fb821_D20200101-20201231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMzAvZnJhZzpmM2RmZjUxNzVkMDU0M2M0ODNkMDcxZGZlZDFkYjliYS90YWJsZTo5MjE0Yzk4ZjczMjU0NDI2YmEyZmE5ZjdjZTQyNzk0MC90YWJsZXJhbmdlOjkyMTRjOThmNzMyNTQ0MjZiYTJmYTlmN2NlNDI3OTQwXzMtNS0xLTEtMzAxNDA_f1f6386e-64f8-44c5-aaa0-3ad9d3beb2ee"
      unitRef="usd">45586000</us-gaap:NetIncomeLoss>
    <us-gaap:WeightedAverageNumberOfSharesOutstandingBasic
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMzAvZnJhZzpmM2RmZjUxNzVkMDU0M2M0ODNkMDcxZGZlZDFkYjliYS90YWJsZTo5MjE0Yzk4ZjczMjU0NDI2YmEyZmE5ZjdjZTQyNzk0MC90YWJsZXJhbmdlOjkyMTRjOThmNzMyNTQ0MjZiYTJmYTlmN2NlNDI3OTQwXzUtMS0xLTEtMzAxNDA_2c23a2cd-138e-4b05-bebd-1311858b8966"
      unitRef="shares">36117000</us-gaap:WeightedAverageNumberOfSharesOutstandingBasic>
    <us-gaap:WeightedAverageNumberOfSharesOutstandingBasic
      contextRef="ie07f2822175c48edbb8d5559ceb82e6f_D20210101-20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMzAvZnJhZzpmM2RmZjUxNzVkMDU0M2M0ODNkMDcxZGZlZDFkYjliYS90YWJsZTo5MjE0Yzk4ZjczMjU0NDI2YmEyZmE5ZjdjZTQyNzk0MC90YWJsZXJhbmdlOjkyMTRjOThmNzMyNTQ0MjZiYTJmYTlmN2NlNDI3OTQwXzUtMy0xLTEtMzAxNDA_7e8003a1-9bdf-4942-863a-da8b3c40e496"
      unitRef="shares">35928000</us-gaap:WeightedAverageNumberOfSharesOutstandingBasic>
    <us-gaap:WeightedAverageNumberOfSharesOutstandingBasic
      contextRef="i4751184d7e5948509cd8893fd49fb821_D20200101-20201231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMzAvZnJhZzpmM2RmZjUxNzVkMDU0M2M0ODNkMDcxZGZlZDFkYjliYS90YWJsZTo5MjE0Yzk4ZjczMjU0NDI2YmEyZmE5ZjdjZTQyNzk0MC90YWJsZXJhbmdlOjkyMTRjOThmNzMyNTQ0MjZiYTJmYTlmN2NlNDI3OTQwXzUtNS0xLTEtMzAxNDA_711eea6b-76f0-463b-a498-d83c12c2d0dd"
      unitRef="shares">35226000</us-gaap:WeightedAverageNumberOfSharesOutstandingBasic>
    <us-gaap:IncrementalCommonSharesAttributableToShareBasedPaymentArrangements
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMzAvZnJhZzpmM2RmZjUxNzVkMDU0M2M0ODNkMDcxZGZlZDFkYjliYS90YWJsZTo5MjE0Yzk4ZjczMjU0NDI2YmEyZmE5ZjdjZTQyNzk0MC90YWJsZXJhbmdlOjkyMTRjOThmNzMyNTQ0MjZiYTJmYTlmN2NlNDI3OTQwXzYtMS0xLTEtMzAxNDA_9387811b-cff4-4d2e-bcb2-cf9b86711201"
      unitRef="shares">382000</us-gaap:IncrementalCommonSharesAttributableToShareBasedPaymentArrangements>
    <us-gaap:IncrementalCommonSharesAttributableToShareBasedPaymentArrangements
      contextRef="ie07f2822175c48edbb8d5559ceb82e6f_D20210101-20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMzAvZnJhZzpmM2RmZjUxNzVkMDU0M2M0ODNkMDcxZGZlZDFkYjliYS90YWJsZTo5MjE0Yzk4ZjczMjU0NDI2YmEyZmE5ZjdjZTQyNzk0MC90YWJsZXJhbmdlOjkyMTRjOThmNzMyNTQ0MjZiYTJmYTlmN2NlNDI3OTQwXzYtMy0xLTEtMzAxNDA_92a4375c-7668-4acf-9a21-95301d05df09"
      unitRef="shares">529000</us-gaap:IncrementalCommonSharesAttributableToShareBasedPaymentArrangements>
    <us-gaap:IncrementalCommonSharesAttributableToShareBasedPaymentArrangements
      contextRef="i4751184d7e5948509cd8893fd49fb821_D20200101-20201231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMzAvZnJhZzpmM2RmZjUxNzVkMDU0M2M0ODNkMDcxZGZlZDFkYjliYS90YWJsZTo5MjE0Yzk4ZjczMjU0NDI2YmEyZmE5ZjdjZTQyNzk0MC90YWJsZXJhbmdlOjkyMTRjOThmNzMyNTQ0MjZiYTJmYTlmN2NlNDI3OTQwXzYtNS0xLTEtMzAxNDA_e0606010-1afc-493c-aabf-9aec6442f589"
      unitRef="shares">611000</us-gaap:IncrementalCommonSharesAttributableToShareBasedPaymentArrangements>
    <us-gaap:IncrementalCommonSharesAttributableToContingentlyIssuableShares
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMzAvZnJhZzpmM2RmZjUxNzVkMDU0M2M0ODNkMDcxZGZlZDFkYjliYS90YWJsZTo5MjE0Yzk4ZjczMjU0NDI2YmEyZmE5ZjdjZTQyNzk0MC90YWJsZXJhbmdlOjkyMTRjOThmNzMyNTQ0MjZiYTJmYTlmN2NlNDI3OTQwXzctMS0xLTEtMzAxNDA_0f3aeb05-ea0f-4154-a2cd-14e9172b86cf"
      unitRef="shares">454000</us-gaap:IncrementalCommonSharesAttributableToContingentlyIssuableShares>
    <us-gaap:IncrementalCommonSharesAttributableToContingentlyIssuableShares
      contextRef="ie07f2822175c48edbb8d5559ceb82e6f_D20210101-20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMzAvZnJhZzpmM2RmZjUxNzVkMDU0M2M0ODNkMDcxZGZlZDFkYjliYS90YWJsZTo5MjE0Yzk4ZjczMjU0NDI2YmEyZmE5ZjdjZTQyNzk0MC90YWJsZXJhbmdlOjkyMTRjOThmNzMyNTQ0MjZiYTJmYTlmN2NlNDI3OTQwXzctMy0xLTEtMzAxNDA_330a14e4-a45a-4c2e-91d8-c50f269220bf"
      unitRef="shares">505000</us-gaap:IncrementalCommonSharesAttributableToContingentlyIssuableShares>
    <us-gaap:IncrementalCommonSharesAttributableToContingentlyIssuableShares
      contextRef="i4751184d7e5948509cd8893fd49fb821_D20200101-20201231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMzAvZnJhZzpmM2RmZjUxNzVkMDU0M2M0ODNkMDcxZGZlZDFkYjliYS90YWJsZTo5MjE0Yzk4ZjczMjU0NDI2YmEyZmE5ZjdjZTQyNzk0MC90YWJsZXJhbmdlOjkyMTRjOThmNzMyNTQ0MjZiYTJmYTlmN2NlNDI3OTQwXzctNS0xLTEtMzAxNDA_b242a586-c1d6-454c-a8e9-cbadc3ea9101"
      unitRef="shares">448000</us-gaap:IncrementalCommonSharesAttributableToContingentlyIssuableShares>
    <us-gaap:WeightedAverageNumberOfDilutedSharesOutstanding
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMzAvZnJhZzpmM2RmZjUxNzVkMDU0M2M0ODNkMDcxZGZlZDFkYjliYS90YWJsZTo5MjE0Yzk4ZjczMjU0NDI2YmEyZmE5ZjdjZTQyNzk0MC90YWJsZXJhbmdlOjkyMTRjOThmNzMyNTQ0MjZiYTJmYTlmN2NlNDI3OTQwXzgtMS0xLTEtMzAxNDA_0388a7ce-b12a-4da9-8b3c-8168af1c6242"
      unitRef="shares">36953000</us-gaap:WeightedAverageNumberOfDilutedSharesOutstanding>
    <us-gaap:WeightedAverageNumberOfDilutedSharesOutstanding
      contextRef="ie07f2822175c48edbb8d5559ceb82e6f_D20210101-20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMzAvZnJhZzpmM2RmZjUxNzVkMDU0M2M0ODNkMDcxZGZlZDFkYjliYS90YWJsZTo5MjE0Yzk4ZjczMjU0NDI2YmEyZmE5ZjdjZTQyNzk0MC90YWJsZXJhbmdlOjkyMTRjOThmNzMyNTQ0MjZiYTJmYTlmN2NlNDI3OTQwXzgtMy0xLTEtMzAxNDA_1880ad20-e209-4697-9e0e-784fc30ea6cd"
      unitRef="shares">36962000</us-gaap:WeightedAverageNumberOfDilutedSharesOutstanding>
    <us-gaap:WeightedAverageNumberOfDilutedSharesOutstanding
      contextRef="i4751184d7e5948509cd8893fd49fb821_D20200101-20201231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMzAvZnJhZzpmM2RmZjUxNzVkMDU0M2M0ODNkMDcxZGZlZDFkYjliYS90YWJsZTo5MjE0Yzk4ZjczMjU0NDI2YmEyZmE5ZjdjZTQyNzk0MC90YWJsZXJhbmdlOjkyMTRjOThmNzMyNTQ0MjZiYTJmYTlmN2NlNDI3OTQwXzgtNS0xLTEtMzAxNDA_ff320435-c466-40d6-b486-8986707a38e3"
      unitRef="shares">36285000</us-gaap:WeightedAverageNumberOfDilutedSharesOutstanding>
    <us-gaap:EarningsPerShareBasic
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      decimals="2"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMzAvZnJhZzpmM2RmZjUxNzVkMDU0M2M0ODNkMDcxZGZlZDFkYjliYS90YWJsZTo5MjE0Yzk4ZjczMjU0NDI2YmEyZmE5ZjdjZTQyNzk0MC90YWJsZXJhbmdlOjkyMTRjOThmNzMyNTQ0MjZiYTJmYTlmN2NlNDI3OTQwXzEwLTEtMS0xLTMwMTQw_0f5723dd-f7a6-4231-8d50-e29fc679e166"
      unitRef="usdPerShare">1.53</us-gaap:EarningsPerShareBasic>
    <us-gaap:EarningsPerShareBasic
      contextRef="ie07f2822175c48edbb8d5559ceb82e6f_D20210101-20211231"
      decimals="2"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMzAvZnJhZzpmM2RmZjUxNzVkMDU0M2M0ODNkMDcxZGZlZDFkYjliYS90YWJsZTo5MjE0Yzk4ZjczMjU0NDI2YmEyZmE5ZjdjZTQyNzk0MC90YWJsZXJhbmdlOjkyMTRjOThmNzMyNTQ0MjZiYTJmYTlmN2NlNDI3OTQwXzEwLTMtMS0xLTMwMTQw_06d41e9f-a0eb-4270-b9d0-e420b3202481"
      unitRef="usdPerShare">1.24</us-gaap:EarningsPerShareBasic>
    <us-gaap:EarningsPerShareBasic
      contextRef="i4751184d7e5948509cd8893fd49fb821_D20200101-20201231"
      decimals="2"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMzAvZnJhZzpmM2RmZjUxNzVkMDU0M2M0ODNkMDcxZGZlZDFkYjliYS90YWJsZTo5MjE0Yzk4ZjczMjU0NDI2YmEyZmE5ZjdjZTQyNzk0MC90YWJsZXJhbmdlOjkyMTRjOThmNzMyNTQ0MjZiYTJmYTlmN2NlNDI3OTQwXzEwLTUtMS0xLTMwMTQw_fe0db31f-b18d-46a5-b8a9-c9d2a6bdde6f"
      unitRef="usdPerShare">1.29</us-gaap:EarningsPerShareBasic>
    <us-gaap:EarningsPerShareDiluted
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      decimals="2"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMzAvZnJhZzpmM2RmZjUxNzVkMDU0M2M0ODNkMDcxZGZlZDFkYjliYS90YWJsZTo5MjE0Yzk4ZjczMjU0NDI2YmEyZmE5ZjdjZTQyNzk0MC90YWJsZXJhbmdlOjkyMTRjOThmNzMyNTQ0MjZiYTJmYTlmN2NlNDI3OTQwXzExLTEtMS0xLTMwMTQw_c79cb622-7b6a-4c0b-bf56-5a95a8c671ad"
      unitRef="usdPerShare">1.49</us-gaap:EarningsPerShareDiluted>
    <us-gaap:EarningsPerShareDiluted
      contextRef="ie07f2822175c48edbb8d5559ceb82e6f_D20210101-20211231"
      decimals="2"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMzAvZnJhZzpmM2RmZjUxNzVkMDU0M2M0ODNkMDcxZGZlZDFkYjliYS90YWJsZTo5MjE0Yzk4ZjczMjU0NDI2YmEyZmE5ZjdjZTQyNzk0MC90YWJsZXJhbmdlOjkyMTRjOThmNzMyNTQ0MjZiYTJmYTlmN2NlNDI3OTQwXzExLTMtMS0xLTMwMTQw_33f862e4-40b6-4029-95b9-7be69c06eb90"
      unitRef="usdPerShare">1.21</us-gaap:EarningsPerShareDiluted>
    <us-gaap:EarningsPerShareDiluted
      contextRef="i4751184d7e5948509cd8893fd49fb821_D20200101-20201231"
      decimals="2"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMzAvZnJhZzpmM2RmZjUxNzVkMDU0M2M0ODNkMDcxZGZlZDFkYjliYS90YWJsZTo5MjE0Yzk4ZjczMjU0NDI2YmEyZmE5ZjdjZTQyNzk0MC90YWJsZXJhbmdlOjkyMTRjOThmNzMyNTQ0MjZiYTJmYTlmN2NlNDI3OTQwXzExLTUtMS0xLTMwMTQw_3291443f-54b0-4328-84cd-0ea443da276e"
      unitRef="usdPerShare">1.26</us-gaap:EarningsPerShareDiluted>
    <us-gaap:ScheduleOfAntidilutiveSecuritiesExcludedFromComputationOfEarningsPerShareTextBlock
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMzAvZnJhZzpmM2RmZjUxNzVkMDU0M2M0ODNkMDcxZGZlZDFkYjliYS90ZXh0cmVnaW9uOmYzZGZmNTE3NWQwNTQzYzQ4M2QwNzFkZmVkMWRiOWJhXzMwMA_36478cd1-0a4e-435a-8329-237e5e527a36">&lt;div style="margin-top:6pt;text-indent:27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;The number of outstanding potential common shares that were excluded from the calculation of diluted net income per share as they were anti-dilutive was as follows:&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-align:center"&gt;&lt;table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"&gt;&lt;tr&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:58.142%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.081%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.406%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.081%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.406%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.084%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="15" style="padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;Year Ended December 31,&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;(in thousands)&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;2022&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;2021&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;2020&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Anti-dilutive shares&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;75&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;31&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;26&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;</us-gaap:ScheduleOfAntidilutiveSecuritiesExcludedFromComputationOfEarningsPerShareTextBlock>
    <us-gaap:AntidilutiveSecuritiesExcludedFromComputationOfEarningsPerShareAmount
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMzAvZnJhZzpmM2RmZjUxNzVkMDU0M2M0ODNkMDcxZGZlZDFkYjliYS90YWJsZTpiNTNkYWFmMjNmYzc0YmE3YmMwMWIyN2Y1MTA3ZGUzNS90YWJsZXJhbmdlOmI1M2RhYWYyM2ZjNzRiYTdiYzAxYjI3ZjUxMDdkZTM1XzItMS0xLTEtMzAxNDA_527cb3f1-5808-491f-a9ee-6b971754c240"
      unitRef="shares">75000</us-gaap:AntidilutiveSecuritiesExcludedFromComputationOfEarningsPerShareAmount>
    <us-gaap:AntidilutiveSecuritiesExcludedFromComputationOfEarningsPerShareAmount
      contextRef="ie07f2822175c48edbb8d5559ceb82e6f_D20210101-20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMzAvZnJhZzpmM2RmZjUxNzVkMDU0M2M0ODNkMDcxZGZlZDFkYjliYS90YWJsZTpiNTNkYWFmMjNmYzc0YmE3YmMwMWIyN2Y1MTA3ZGUzNS90YWJsZXJhbmdlOmI1M2RhYWYyM2ZjNzRiYTdiYzAxYjI3ZjUxMDdkZTM1XzItMy0xLTEtMzAxNDA_28f4ccde-df83-4b34-b48f-9d073eaff641"
      unitRef="shares">31000</us-gaap:AntidilutiveSecuritiesExcludedFromComputationOfEarningsPerShareAmount>
    <us-gaap:AntidilutiveSecuritiesExcludedFromComputationOfEarningsPerShareAmount
      contextRef="i4751184d7e5948509cd8893fd49fb821_D20200101-20201231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMzAvZnJhZzpmM2RmZjUxNzVkMDU0M2M0ODNkMDcxZGZlZDFkYjliYS90YWJsZTpiNTNkYWFmMjNmYzc0YmE3YmMwMWIyN2Y1MTA3ZGUzNS90YWJsZXJhbmdlOmI1M2RhYWYyM2ZjNzRiYTdiYzAxYjI3ZjUxMDdkZTM1XzItNS0xLTEtMzAxNDA_6917df65-dac6-4fa0-8531-b2688c291090"
      unitRef="shares">26000</us-gaap:AntidilutiveSecuritiesExcludedFromComputationOfEarningsPerShareAmount>
    <us-gaap:PensionAndOtherPostretirementBenefitsDisclosureTextBlock
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMzMvZnJhZzo2ZTY4MTNiMzM1OGQ0OTZmYjQ1NjllZTA0N2U5NmE1MS90ZXh0cmVnaW9uOjZlNjgxM2IzMzU4ZDQ5NmZiNDU2OWVlMDQ3ZTk2YTUxXzYzNw_f2982d39-35b4-4be2-9eca-29ad0211f44f">Retirement Savings Plan&lt;div style="margin-top:6pt;text-indent:27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;We sponsor a 401(k) retirement savings plan for our employees. Employees can contribute up to 80% of their compensation, subject to the limits established by law, and we match 50% of the employee&#x2019;s contribution up to the first 6% of pre-tax annual compensation. A portion of our match is in Company stock, which is purchased from the open market by our plan provider and immediately deposited into the employee&#x2019;s 401(k) account.&lt;/span&gt;&lt;span style="color:#000000;font-family:'Calibri',sans-serif;font-size:11pt;font-weight:400;line-height:120%"&gt; &lt;/span&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;Additionally, we make statutory contributions to retirement plans as required by local foreign government regulations.&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;Our total contributions to the plan were as follows:&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-align:center"&gt;&lt;table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"&gt;&lt;tr&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:58.142%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.081%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.406%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.081%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.406%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.084%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="15" style="padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;Year Ended December 31,&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;(in thousands)&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:0.75pt solid #000000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;2022&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:0.75pt solid #000000;padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:0.75pt solid #000000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;2021&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:0.75pt solid #000000;padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:0.75pt solid #000000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;2020&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Retirement contributions&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:0.75pt solid #000000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:0.75pt solid #000000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;5,386&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:0.75pt solid #000000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;border-top:0.75pt solid #000000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:0.75pt solid #000000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;4,790&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:0.75pt solid #000000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;border-top:0.75pt solid #000000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:0.75pt solid #000000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;3,889&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:0.75pt solid #000000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;</us-gaap:PensionAndOtherPostretirementBenefitsDisclosureTextBlock>
    <us-gaap:DefinedContributionPlanMaximumAnnualContributionsPerEmployeePercent
      contextRef="ie07f2822175c48edbb8d5559ceb82e6f_D20210101-20211231"
      decimals="2"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMzMvZnJhZzo2ZTY4MTNiMzM1OGQ0OTZmYjQ1NjllZTA0N2U5NmE1MS90ZXh0cmVnaW9uOjZlNjgxM2IzMzU4ZDQ5NmZiNDU2OWVlMDQ3ZTk2YTUxXzEzMg_52f17d4b-daa6-4752-9ace-f56c151f240d"
      unitRef="number">0.80</us-gaap:DefinedContributionPlanMaximumAnnualContributionsPerEmployeePercent>
    <us-gaap:DefinedContributionPlanMaximumAnnualContributionsPerEmployeePercent
      contextRef="i4751184d7e5948509cd8893fd49fb821_D20200101-20201231"
      decimals="2"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMzMvZnJhZzo2ZTY4MTNiMzM1OGQ0OTZmYjQ1NjllZTA0N2U5NmE1MS90ZXh0cmVnaW9uOjZlNjgxM2IzMzU4ZDQ5NmZiNDU2OWVlMDQ3ZTk2YTUxXzEzMg_62c9e8b0-51da-4343-8921-fa9559143a7d"
      unitRef="number">0.80</us-gaap:DefinedContributionPlanMaximumAnnualContributionsPerEmployeePercent>
    <us-gaap:DefinedContributionPlanMaximumAnnualContributionsPerEmployeePercent
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      decimals="2"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMzMvZnJhZzo2ZTY4MTNiMzM1OGQ0OTZmYjQ1NjllZTA0N2U5NmE1MS90ZXh0cmVnaW9uOjZlNjgxM2IzMzU4ZDQ5NmZiNDU2OWVlMDQ3ZTk2YTUxXzEzMg_8ff0db89-61fe-4fa5-823b-37428f4961b5"
      unitRef="number">0.80</us-gaap:DefinedContributionPlanMaximumAnnualContributionsPerEmployeePercent>
    <us-gaap:DefinedContributionPlanEmployerMatchingContributionPercentOfMatch
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      decimals="2"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMzMvZnJhZzo2ZTY4MTNiMzM1OGQ0OTZmYjQ1NjllZTA0N2U5NmE1MS90ZXh0cmVnaW9uOjZlNjgxM2IzMzU4ZDQ5NmZiNDU2OWVlMDQ3ZTk2YTUxXzIxMw_02809e42-321b-4119-8d1c-ce71b031c63b"
      unitRef="number">0.50</us-gaap:DefinedContributionPlanEmployerMatchingContributionPercentOfMatch>
    <us-gaap:DefinedContributionPlanEmployerMatchingContributionPercentOfMatch
      contextRef="ie07f2822175c48edbb8d5559ceb82e6f_D20210101-20211231"
      decimals="2"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMzMvZnJhZzo2ZTY4MTNiMzM1OGQ0OTZmYjQ1NjllZTA0N2U5NmE1MS90ZXh0cmVnaW9uOjZlNjgxM2IzMzU4ZDQ5NmZiNDU2OWVlMDQ3ZTk2YTUxXzIxMw_a9ef91dc-7dc8-412e-95b7-2be922293385"
      unitRef="number">0.50</us-gaap:DefinedContributionPlanEmployerMatchingContributionPercentOfMatch>
    <us-gaap:DefinedContributionPlanEmployerMatchingContributionPercent
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      decimals="2"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMzMvZnJhZzo2ZTY4MTNiMzM1OGQ0OTZmYjQ1NjllZTA0N2U5NmE1MS90ZXh0cmVnaW9uOjZlNjgxM2IzMzU4ZDQ5NmZiNDU2OWVlMDQ3ZTk2YTUxXzI2Mw_0c2fb53c-484f-4a4b-804d-467c463b8595"
      unitRef="number">0.06</us-gaap:DefinedContributionPlanEmployerMatchingContributionPercent>
    <us-gaap:DefinedContributionPlanDisclosuresTableTextBlock
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMzMvZnJhZzo2ZTY4MTNiMzM1OGQ0OTZmYjQ1NjllZTA0N2U5NmE1MS90ZXh0cmVnaW9uOjZlNjgxM2IzMzU4ZDQ5NmZiNDU2OWVlMDQ3ZTk2YTUxXzYzOA_6a7713a8-b362-403d-9db3-1b797ba9d67c">&lt;div style="margin-top:6pt;text-indent:27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;Our total contributions to the plan were as follows:&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-align:center"&gt;&lt;table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"&gt;&lt;tr&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:58.142%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.081%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.406%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.081%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.406%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.084%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="15" style="padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;Year Ended December 31,&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;(in thousands)&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:0.75pt solid #000000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;2022&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:0.75pt solid #000000;padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:0.75pt solid #000000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;2021&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:0.75pt solid #000000;padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:0.75pt solid #000000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;2020&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Retirement contributions&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:0.75pt solid #000000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:0.75pt solid #000000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;5,386&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:0.75pt solid #000000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;border-top:0.75pt solid #000000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:0.75pt solid #000000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;4,790&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:0.75pt solid #000000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;border-top:0.75pt solid #000000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:0.75pt solid #000000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;3,889&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:0.75pt solid #000000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;</us-gaap:DefinedContributionPlanDisclosuresTableTextBlock>
    <spsc:DefinedContributionPlanEmployerNotNoteDiscretionaryContributionAmount
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMzMvZnJhZzo2ZTY4MTNiMzM1OGQ0OTZmYjQ1NjllZTA0N2U5NmE1MS90YWJsZTpmMWJjMDg0N2Q0MTM0MTE2YTkwZTM2NTBkYzRlYzk1Ny90YWJsZXJhbmdlOmYxYmMwODQ3ZDQxMzQxMTZhOTBlMzY1MGRjNGVjOTU3XzItMS0xLTEtMzAxNDA_1d225002-7a90-4860-a03c-5590d70cdf1a"
      unitRef="usd">5386000</spsc:DefinedContributionPlanEmployerNotNoteDiscretionaryContributionAmount>
    <spsc:DefinedContributionPlanEmployerNotNoteDiscretionaryContributionAmount
      contextRef="ie07f2822175c48edbb8d5559ceb82e6f_D20210101-20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMzMvZnJhZzo2ZTY4MTNiMzM1OGQ0OTZmYjQ1NjllZTA0N2U5NmE1MS90YWJsZTpmMWJjMDg0N2Q0MTM0MTE2YTkwZTM2NTBkYzRlYzk1Ny90YWJsZXJhbmdlOmYxYmMwODQ3ZDQxMzQxMTZhOTBlMzY1MGRjNGVjOTU3XzItMy0xLTEtMzAxNDA_6f19c4e2-f710-4944-8dba-7e481dd74e9e"
      unitRef="usd">4790000</spsc:DefinedContributionPlanEmployerNotNoteDiscretionaryContributionAmount>
    <spsc:DefinedContributionPlanEmployerNotNoteDiscretionaryContributionAmount
      contextRef="i4751184d7e5948509cd8893fd49fb821_D20200101-20201231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMzMvZnJhZzo2ZTY4MTNiMzM1OGQ0OTZmYjQ1NjllZTA0N2U5NmE1MS90YWJsZTpmMWJjMDg0N2Q0MTM0MTE2YTkwZTM2NTBkYzRlYzk1Ny90YWJsZXJhbmdlOmYxYmMwODQ3ZDQxMzQxMTZhOTBlMzY1MGRjNGVjOTU3XzItNS0xLTEtMzAxNDA_514a481d-85da-423d-86c1-cbc22129e2df"
      unitRef="usd">3889000</spsc:DefinedContributionPlanEmployerNotNoteDiscretionaryContributionAmount>
    <spsc:GeographicInformationTextBlock
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMzYvZnJhZzpmOWJiNWM1NzUxZmQ0ZDk4YTZkMGIzNzgwN2QyZDE5Yy90ZXh0cmVnaW9uOmY5YmI1YzU3NTFmZDRkOThhNmQwYjM3ODA3ZDJkMTljXzQ0NQ_d4ea2962-54be-4d71-82a0-6218a2981d6e">Geographic Information&lt;div style="margin-top:6pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-style:italic;font-weight:700;line-height:120%"&gt;Revenue&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;The percentage of domestic revenue, which we define as the percentage of consolidated revenue that was attributable to customers based within the U.S., was as follows:&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-align:center"&gt;&lt;table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"&gt;&lt;tr&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:58.142%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.081%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.406%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.081%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.406%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.084%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="15" style="padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;Year Ended December 31,&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;2022&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;2021&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;2020&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#CFF0FC;padding:2px 1pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Domestic revenue&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#CFF0FC;border-top:0.75pt solid #000000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;84&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#CFF0FC;border-top:0.75pt solid #000000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;%&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#CFF0FC;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#CFF0FC;border-top:0.75pt solid #000000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;84&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#CFF0FC;border-top:0.75pt solid #000000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;%&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#CFF0FC;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#CFF0FC;border-top:0.75pt solid #000000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;85&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#CFF0FC;border-top:0.75pt solid #000000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;%&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;No single jurisdiction outside of the U.S. had revenues in excess of 10%.&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:18pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-style:italic;font-weight:700;line-height:120%"&gt;Property and Equipment&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;The percentage of property and equipment, net located at subsidiary and office locations outside of the U.S. was as follows:&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-align:center"&gt;&lt;table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"&gt;&lt;tr&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:71.930%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.081%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.406%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.083%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="9" style="padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;December 31,&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:0.75pt solid #000000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;2022&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:0.75pt solid #000000;padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:0.75pt solid #000000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;2021&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;International property and equipment&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#cceeff;border-top:0.75pt solid #000000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;13&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:0.75pt solid #000000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;%&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;border-top:0.75pt solid #000000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;12&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:0.75pt solid #000000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;%&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;</spsc:GeographicInformationTextBlock>
    <us-gaap:ScheduleOfProductInformationTableTextBlock
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMzYvZnJhZzpmOWJiNWM1NzUxZmQ0ZDk4YTZkMGIzNzgwN2QyZDE5Yy90ZXh0cmVnaW9uOmY5YmI1YzU3NTFmZDRkOThhNmQwYjM3ODA3ZDJkMTljXzQ0Ng_1e9dcfaf-f8cb-461b-8221-ac01348287f7">&lt;div style="margin-top:6pt;text-indent:27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;The percentage of domestic revenue, which we define as the percentage of consolidated revenue that was attributable to customers based within the U.S., was as follows:&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-align:center"&gt;&lt;table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"&gt;&lt;tr&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:58.142%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.081%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.406%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.081%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.406%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.084%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="15" style="padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;Year Ended December 31,&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;2022&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;2021&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;2020&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#CFF0FC;padding:2px 1pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Domestic revenue&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#CFF0FC;border-top:0.75pt solid #000000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;84&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#CFF0FC;border-top:0.75pt solid #000000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;%&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#CFF0FC;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#CFF0FC;border-top:0.75pt solid #000000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;84&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#CFF0FC;border-top:0.75pt solid #000000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;%&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#CFF0FC;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#CFF0FC;border-top:0.75pt solid #000000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;85&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#CFF0FC;border-top:0.75pt solid #000000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;%&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;</us-gaap:ScheduleOfProductInformationTableTextBlock>
    <us-gaap:ConcentrationRiskPercentage1
      contextRef="i64d6e65ea7274556b9b3190995c816ba_D20220101-20221231"
      decimals="2"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMzYvZnJhZzpmOWJiNWM1NzUxZmQ0ZDk4YTZkMGIzNzgwN2QyZDE5Yy90YWJsZTphOTI3NGE0YTRmNGQ0M2RhODE4MzI5YzQ0NTQxZDQ2Yy90YWJsZXJhbmdlOmE5Mjc0YTRhNGY0ZDQzZGE4MTgzMjljNDQ1NDFkNDZjXzItMS0xLTEtMzAxNDA_ebcb79ab-6d4c-41b3-995f-0f1579dd3f3d"
      unitRef="number">0.84</us-gaap:ConcentrationRiskPercentage1>
    <us-gaap:ConcentrationRiskPercentage1
      contextRef="i96b2a811af8246a8b813dc20d6593bde_D20210101-20211231"
      decimals="2"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMzYvZnJhZzpmOWJiNWM1NzUxZmQ0ZDk4YTZkMGIzNzgwN2QyZDE5Yy90YWJsZTphOTI3NGE0YTRmNGQ0M2RhODE4MzI5YzQ0NTQxZDQ2Yy90YWJsZXJhbmdlOmE5Mjc0YTRhNGY0ZDQzZGE4MTgzMjljNDQ1NDFkNDZjXzItMy0xLTEtMzAxNDA_41387fe7-2965-46d4-8706-c1c8ee99b0e2"
      unitRef="number">0.84</us-gaap:ConcentrationRiskPercentage1>
    <us-gaap:ConcentrationRiskPercentage1
      contextRef="i149518aa1d114f82be8a800c837e5f8b_D20200101-20201231"
      decimals="2"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMzYvZnJhZzpmOWJiNWM1NzUxZmQ0ZDk4YTZkMGIzNzgwN2QyZDE5Yy90YWJsZTphOTI3NGE0YTRmNGQ0M2RhODE4MzI5YzQ0NTQxZDQ2Yy90YWJsZXJhbmdlOmE5Mjc0YTRhNGY0ZDQzZGE4MTgzMjljNDQ1NDFkNDZjXzItNS0xLTEtMzAxNDA_cf58508e-111c-428b-88ea-9ff511df089a"
      unitRef="number">0.85</us-gaap:ConcentrationRiskPercentage1>
    <spsc:ScheduleOfPercentageOfPropertyAndEquipmentNetTableTableTextBlock
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMzYvZnJhZzpmOWJiNWM1NzUxZmQ0ZDk4YTZkMGIzNzgwN2QyZDE5Yy90ZXh0cmVnaW9uOmY5YmI1YzU3NTFmZDRkOThhNmQwYjM3ODA3ZDJkMTljXzQ0Nw_54ae31b4-fa66-43b2-b2b3-339b632598ae">&lt;div style="margin-top:6pt;text-indent:27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;The percentage of property and equipment, net located at subsidiary and office locations outside of the U.S. was as follows:&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-align:center"&gt;&lt;table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"&gt;&lt;tr&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:71.930%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.081%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.406%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.083%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="9" style="padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;December 31,&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:0.75pt solid #000000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;2022&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:0.75pt solid #000000;padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:0.75pt solid #000000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;2021&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;International property and equipment&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#cceeff;border-top:0.75pt solid #000000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;13&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:0.75pt solid #000000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;%&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;border-top:0.75pt solid #000000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;12&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:0.75pt solid #000000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;%&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;</spsc:ScheduleOfPercentageOfPropertyAndEquipmentNetTableTableTextBlock>
    <us-gaap:ConcentrationRiskPercentage1
      contextRef="i03d119929d7f4e5790ea6dca7da771f8_D20220101-20221231"
      decimals="2"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMzYvZnJhZzpmOWJiNWM1NzUxZmQ0ZDk4YTZkMGIzNzgwN2QyZDE5Yy90YWJsZTphYjY0OGNkNjU3ZDk0ZGNjYjI2MTNiODFjNjI1MTBjMS90YWJsZXJhbmdlOmFiNjQ4Y2Q2NTdkOTRkY2NiMjYxM2I4MWM2MjUxMGMxXzItMS0xLTEtMzAxNDA_b14d9069-7459-4990-8756-721cb4943c4f"
      unitRef="number">0.13</us-gaap:ConcentrationRiskPercentage1>
    <us-gaap:ConcentrationRiskPercentage1
      contextRef="ie46d059532824c39b875028f03a2835f_D20210101-20211231"
      decimals="2"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMzYvZnJhZzpmOWJiNWM1NzUxZmQ0ZDk4YTZkMGIzNzgwN2QyZDE5Yy90YWJsZTphYjY0OGNkNjU3ZDk0ZGNjYjI2MTNiODFjNjI1MTBjMS90YWJsZXJhbmdlOmFiNjQ4Y2Q2NTdkOTRkY2NiMjYxM2I4MWM2MjUxMGMxXzItMy0xLTEtMzAxNDA_688262b7-34fd-4bf5-9d84-11d95e9fe40c"
      unitRef="number">0.12</us-gaap:ConcentrationRiskPercentage1>
    <us-gaap:RelatedPartyTransactionsDisclosureTextBlock
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMzkvZnJhZzpiYzdlNmYzNTI5ZTA0YjJhYmU2M2RhMzFmMmUxNTQyOC90ZXh0cmVnaW9uOmJjN2U2ZjM1MjllMDRiMmFiZTYzZGEzMWYyZTE1NDI4Xzc3Nw_c20dad6c-06e1-467c-b9ea-8c31999ce050">Related Party Transactions&lt;div style="margin-top:6pt;text-indent:27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;The SPS Commerce Foundation (the &#x201c;Foundation&#x201d;) is a Minnesota non-profit organization exempt from federal taxation under Section 501(c)(3) of the Internal Revenue Code. The Foundation was formed in 2015 to engage in, advance, support, promote and administer charitable activities. The directors of the Foundation are also our corporate officers. These directors receive no compensation from the Foundation or us for the management services performed for the Foundation. The Foundation is not a subsidiary of ours and the financial results of the Foundation are not consolidated with our financial statements. We have no current legal obligations for future commitments to the Foundation. Our contributions to the Foundation were as follows:&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-align:center"&gt;&lt;table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"&gt;&lt;tr&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:58.142%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.081%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.406%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.081%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.406%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.084%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="15" style="padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;Year Ended December 31,&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;(in thousands)&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;2022&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;2021&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;2020&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Foundation contributions&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;2,750&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;2,400&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;1,800&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;</us-gaap:RelatedPartyTransactionsDisclosureTextBlock>
    <us-gaap:ScheduleOfRelatedPartyTransactionsTableTextBlock
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMzkvZnJhZzpiYzdlNmYzNTI5ZTA0YjJhYmU2M2RhMzFmMmUxNTQyOC90ZXh0cmVnaW9uOmJjN2U2ZjM1MjllMDRiMmFiZTYzZGEzMWYyZTE1NDI4Xzc3OA_8688c184-bc7e-4951-b415-3759e49fd3dc">Our contributions to the Foundation were as follows:&lt;table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"&gt;&lt;tr&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:58.142%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.081%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.406%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.081%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.406%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.084%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="15" style="padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;Year Ended December 31,&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;(in thousands)&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;2022&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;2021&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;2020&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Foundation contributions&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;2,750&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;2,400&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;1,800&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;/table&gt;</us-gaap:ScheduleOfRelatedPartyTransactionsTableTextBlock>
    <us-gaap:RelatedPartyTransactionAmountsOfTransaction
      contextRef="i9e4cf77145ba4851922387166f6508ab_D20220101-20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMzkvZnJhZzpiYzdlNmYzNTI5ZTA0YjJhYmU2M2RhMzFmMmUxNTQyOC90YWJsZTo2OTEyMWQwOTMyZDY0MmQ1YTkxMmE2Nzg5ZGJmY2MzYS90YWJsZXJhbmdlOjY5MTIxZDA5MzJkNjQyZDVhOTEyYTY3ODlkYmZjYzNhXzItMS0xLTEtMzAxNDA_a7a9b2f9-32b7-44bb-9c1a-c9b9ca2033c0"
      unitRef="usd">2750000</us-gaap:RelatedPartyTransactionAmountsOfTransaction>
    <us-gaap:RelatedPartyTransactionAmountsOfTransaction
      contextRef="ie07f2822175c48edbb8d5559ceb82e6f_D20210101-20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMzkvZnJhZzpiYzdlNmYzNTI5ZTA0YjJhYmU2M2RhMzFmMmUxNTQyOC90YWJsZTo2OTEyMWQwOTMyZDY0MmQ1YTkxMmE2Nzg5ZGJmY2MzYS90YWJsZXJhbmdlOjY5MTIxZDA5MzJkNjQyZDVhOTEyYTY3ODlkYmZjYzNhXzItMy0xLTEtMzAxNDA_e283192d-35d6-4f34-babd-b6d84e19a357"
      unitRef="usd">2400000</us-gaap:RelatedPartyTransactionAmountsOfTransaction>
    <us-gaap:RelatedPartyTransactionAmountsOfTransaction
      contextRef="i4751184d7e5948509cd8893fd49fb821_D20200101-20201231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOmNmODUwZTUwZjRjYTRkYTliNjU3OWY3MjUyNmU1NDk2L3NlYzpjZjg1MGU1MGY0Y2E0ZGE5YjY1NzlmNzI1MjZlNTQ5Nl8xMzkvZnJhZzpiYzdlNmYzNTI5ZTA0YjJhYmU2M2RhMzFmMmUxNTQyOC90YWJsZTo2OTEyMWQwOTMyZDY0MmQ1YTkxMmE2Nzg5ZGJmY2MzYS90YWJsZXJhbmdlOjY5MTIxZDA5MzJkNjQyZDVhOTEyYTY3ODlkYmZjYzNhXzItNS0xLTEtMzAxNDA_222e1eb5-f1cf-4773-95a4-9436afb3415b"
      unitRef="usd">1800000</us-gaap:RelatedPartyTransactionAmountsOfTransaction>
</xbrl>
