From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by sourceware.org (Postfix) with ESMTP id 237FF3857340 for ; Wed, 20 Dec 2023 16:54:44 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 237FF3857340 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=arm.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=arm.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 237FF3857340 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=217.140.110.172 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1703091291; cv=none; b=c2rYofNueLWNXFo9mPC6AkE/XOWbqL0y3eqhzeKemM7+Cvm2MmCDGGxx1/r52Y+0rMspGuneXs8hxLdjZBezbS8vGonDSKl0QvI9CKXlY38dIXm73KtNTEJcXrJccnlxufSTjJ43HwNlZieX2oyrWFJaeNMLlfi3wKiLItt1JeQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1703091291; c=relaxed/simple; bh=7C49CcgT4dkoI/fNMKXwZTXBldK5kbtMh3k7xua7chI=; h=Message-ID:Date:MIME-Version:Subject:From:To; b=FejxBhllg8sbIWolXNhVqE79r/wfFP/3LHUZrRD/sSc09WGYw315EpwnHo1mXMDqY29oRD6WqMf2mMt8ZL8P71yjW5SiM9tx01WXlpEY1LgMEMLEdBjN/3VRdrQmPJYKmJf7tYvazBIMJ/HYEkINZKXvsWzpws44WSmAfw072/w= ARC-Authentication-Results: i=1; server2.sourceware.org Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 8710C2F4; Wed, 20 Dec 2023 08:55:28 -0800 (PST) Received: from [10.57.74.123] (unknown [10.57.74.123]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id F168F3F64C; Wed, 20 Dec 2023 08:54:42 -0800 (PST) Content-Type: multipart/mixed; boundary="------------TPGGCryF4Q0QjZOTyQ3fUljO" Message-ID: <8356d21a-85e1-4c84-a420-bd15835ee107@arm.com> Date: Wed, 20 Dec 2023 16:54:41 +0000 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH 2/2] arm: Add support for MVE Tail-Predicated Low Overhead Loops Content-Language: en-US From: "Andre Vieira (lists)" To: gcc-patches@gcc.gnu.org Cc: Richard.Earnshaw@arm.com, Stam Markianos-Wright References: <20231218115323.15980-1-andre.simoesdiasvieira@arm.com> <20231218115323.15980-3-andre.simoesdiasvieira@arm.com> In-Reply-To: <20231218115323.15980-3-andre.simoesdiasvieira@arm.com> X-Spam-Status: No, score=-13.1 required=5.0 tests=BAYES_00,GIT_PATCH_0,KAM_DMARC_NONE,KAM_DMARC_STATUS,KAM_LAZY_DOMAIN_SECURITY,KAM_LOTSOFHASH,KAM_SHORT,SPF_HELO_NONE,SPF_NONE,TXREP,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: This is a multi-part message in MIME format. --------------TPGGCryF4Q0QjZOTyQ3fUljO Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Squashed the definition and changes to predicated_doloop_end_internal and dlstp*_insn into this patch to make sure the first patch builds independently On 18/12/2023 11:53, Andre Vieira wrote: > > Reworked Stam's patch after comments in: > https://gcc.gnu.org/pipermail/gcc-patches/2023-December/640362.html > > The original gcc ChangeLog remains unchanged, but I did split up some tests so > here is the testsuite ChangeLog. > > > gcc/testsuite/ChangeLog: > > * gcc.target/arm/lob.h: Update framework. > * gcc.target/arm/lob1.c: Likewise. > * gcc.target/arm/lob6.c: Likewise. > * gcc.target/arm/mve/dlstp-compile-asm.c: New test. > * gcc.target/arm/mve/dlstp-int16x8.c: New test. > * gcc.target/arm/mve/dlstp-int16x8-run.c: New test. > * gcc.target/arm/mve/dlstp-int32x4.c: New test. > * gcc.target/arm/mve/dlstp-int32x4-run.c: New test. > * gcc.target/arm/mve/dlstp-int64x2.c: New test. > * gcc.target/arm/mve/dlstp-int64x2-run.c: New test. > * gcc.target/arm/mve/dlstp-int8x16.c: New test. > * gcc.target/arm/mve/dlstp-int8x16-run.c: New test. > * gcc.target/arm/mve/dlstp-invalid-asm.c: New test. > --------------TPGGCryF4Q0QjZOTyQ3fUljO Content-Type: text/plain; charset=UTF-8; name="0002-arm-Add-support-for-MVE-Tail-Predicated-Low-Overhead_v2.patch" Content-Disposition: attachment; filename*0="0002-arm-Add-support-for-MVE-Tail-Predicated-Low-Overhead_v2"; filename*1=".patch" Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL2djYy9jb25maWcvYXJtL2FybS1wcm90b3MuaCBiL2djYy9jb25maWcv YXJtL2FybS1wcm90b3MuaAppbmRleCAyZjVjYTc5ZWQ4ZGRkNjQ3YjIxMjc4MmEwNDU0ZWU0 ZmVmYzA3MjU3Li40ZjE2NGM1NDc0MDZjNDMyMTk5MDBjMTExNDAxNTQwYzdlZjlkN2QxIDEw MDY0NAotLS0gYS9nY2MvY29uZmlnL2FybS9hcm0tcHJvdG9zLmgKKysrIGIvZ2NjL2NvbmZp Zy9hcm0vYXJtLXByb3Rvcy5oCkBAIC02NSw4ICs2NSw4IEBAIGV4dGVybiB2b2lkIGFybV9l bWl0X3NwZWN1bGF0aW9uX2JhcnJpZXJfZnVuY3Rpb24gKHZvaWQpOwogZXh0ZXJuIHZvaWQg YXJtX2RlY29tcG9zZV9kaV9iaW5vcCAocnR4LCBydHgsIHJ0eCAqLCBydHggKiwgcnR4ICos IHJ0eCAqKTsKIGV4dGVybiBib29sIGFybV9xX2JpdF9hY2Nlc3MgKHZvaWQpOwogZXh0ZXJu IGJvb2wgYXJtX2dlX2JpdHNfYWNjZXNzICh2b2lkKTsKLWV4dGVybiBib29sIGFybV90YXJn ZXRfaW5zbl9va19mb3JfbG9iIChydHgpOwotCitleHRlcm4gYm9vbCBhcm1fdGFyZ2V0X2Ji X29rX2Zvcl9sb2IgKGJhc2ljX2Jsb2NrKTsKK2V4dGVybiBydHggYXJtX2F0dGVtcHRfZGxz dHBfdHJhbnNmb3JtIChydHgpOwogI2lmZGVmIFJUWF9DT0RFCiBlbnVtIHJlZ19jbGFzcwog YXJtX21vZGVfYmFzZV9yZWdfY2xhc3MgKG1hY2hpbmVfbW9kZSk7CmRpZmYgLS1naXQgYS9n Y2MvY29uZmlnL2FybS9hcm0uY2MgYi9nY2MvY29uZmlnL2FybS9hcm0uY2MKaW5kZXggMGMw Y2IxNGE4YTRmMDQzMzU3YjhhY2Q3MDQyYTlmOTM4NmFmMWViMS4uMWVlNzJiY2I3ZWM0YmVh NWZlZWE4NDUzY2VlZjc3MDJiMDA4OGE3MyAxMDA2NDQKLS0tIGEvZ2NjL2NvbmZpZy9hcm0v YXJtLmNjCisrKyBiL2djYy9jb25maWcvYXJtL2FybS5jYwpAQCAtNjY4LDYgKzY2OCwxMiBA QCBzdGF0aWMgY29uc3Qgc2NvcGVkX2F0dHJpYnV0ZV9zcGVjcyAqY29uc3QgYXJtX2F0dHJp YnV0ZV90YWJsZVtdID0KICN1bmRlZiBUQVJHRVRfSEFWRV9DT05ESVRJT05BTF9FWEVDVVRJ T04KICNkZWZpbmUgVEFSR0VUX0hBVkVfQ09ORElUSU9OQUxfRVhFQ1VUSU9OIGFybV9oYXZl X2NvbmRpdGlvbmFsX2V4ZWN1dGlvbgogCisjdW5kZWYgVEFSR0VUX0xPT1BfVU5ST0xMX0FE SlVTVAorI2RlZmluZSBUQVJHRVRfTE9PUF9VTlJPTExfQURKVVNUIGFybV9sb29wX3Vucm9s bF9hZGp1c3QKKworI3VuZGVmIFRBUkdFVF9QUkVESUNUX0RPTE9PUF9QCisjZGVmaW5lIFRB UkdFVF9QUkVESUNUX0RPTE9PUF9QIGFybV9wcmVkaWN0X2RvbG9vcF9wCisKICN1bmRlZiBU QVJHRVRfTEVHSVRJTUFURV9DT05TVEFOVF9QCiAjZGVmaW5lIFRBUkdFVF9MRUdJVElNQVRF X0NPTlNUQU5UX1AgYXJtX2xlZ2l0aW1hdGVfY29uc3RhbnRfcAogCkBAIC0zNDQ4MywxOSAr MzQ0ODksMTE0NyBAQCBhcm1faW52YWxpZF93aXRoaW5fZG9sb29wIChjb25zdCBydHhfaW5z biAqaW5zbikKIH0KIAogYm9vbAotYXJtX3RhcmdldF9pbnNuX29rX2Zvcl9sb2IgKHJ0eCBp bnNuKQorYXJtX3RhcmdldF9iYl9va19mb3JfbG9iIChiYXNpY19ibG9jayBiYikKIHsKLSAg YmFzaWNfYmxvY2sgYmIgPSBCTE9DS19GT1JfSU5TTiAoaW5zbik7CiAgIC8qIE1ha2Ugc3Vy ZSB0aGUgYmFzaWMgYmxvY2sgb2YgdGhlIHRhcmdldCBpbnNuIGlzIGEgc2ltcGxlIGxhdGNo CiAgICAgIGhhdmluZyBhcyBzaW5nbGUgcHJlZGVjZXNzb3IgYW5kIHN1Y2Nlc3NvciB0aGUg Ym9keSBvZiB0aGUgbG9vcAogICAgICBpdHNlbGYuICBPbmx5IHNpbXBsZSBsb29wcyB3aXRo IGEgc2luZ2xlIGJhc2ljIGJsb2NrIGFzIGJvZHkgYXJlCiAgICAgIHN1cHBvcnRlZCBmb3Ig J2xvdyBvdmVyIGhlYWQgbG9vcCcgbWFraW5nIHN1cmUgdGhhdCBMRSB0YXJnZXQgaXMKICAg ICAgYWJvdmUgTEUgaXRzZWxmIGluIHRoZSBnZW5lcmF0ZWQgY29kZS4gICovCi0KICAgcmV0 dXJuIHNpbmdsZV9zdWNjX3AgKGJiKQotICAgICYmIHNpbmdsZV9wcmVkX3AgKGJiKQotICAg ICYmIHNpbmdsZV9zdWNjX2VkZ2UgKGJiKS0+ZGVzdCA9PSBzaW5nbGVfcHJlZF9lZGdlIChi YiktPnNyYwotICAgICYmIGNvbnRhaW5zX25vX2FjdGl2ZV9pbnNuX3AgKGJiKTsKKwkgJiYg c2luZ2xlX3ByZWRfcCAoYmIpCisJICYmIHNpbmdsZV9zdWNjX2VkZ2UgKGJiKS0+ZGVzdCA9 PSBzaW5nbGVfcHJlZF9lZGdlIChiYiktPnNyYzsKK30KKworLyogVXRpbGl0eSBmdWN0aW9u OiBHaXZlbiBhIFZDVFAgb3IgYSBWQ1RQX00gaW5zbiwgcmV0dXJuIHRoZSBudW1iZXIgb2Yg TVZFCisgICBsYW5lcyBiYXNlZCBvbiB0aGUgbWFjaGluZSBtb2RlIGJlaW5nIHVzZWQuICAq LworCitzdGF0aWMgaW50Cithcm1fbXZlX2dldF92Y3RwX2xhbmVzIChydHhfaW5zbiAqaW5z bikKK3sKKyAgcnR4IGluc25fc2V0ID0gc2luZ2xlX3NldCAoaW5zbik7CisgIGlmIChpbnNu X3NldAorICAgICAgJiYgR0VUX0NPREUgKFNFVF9TUkMgKGluc25fc2V0KSkgPT0gVU5TUEVD CisgICAgICAmJiAoWElOVCAoU0VUX1NSQyAoaW5zbl9zZXQpLCAxKSA9PSBWQ1RQCisJICB8 fCBYSU5UIChTRVRfU1JDIChpbnNuX3NldCksIDEpID09IFZDVFBfTSkpCisgICAgeworICAg ICAgbWFjaGluZV9tb2RlIG1vZGUgPSBHRVRfTU9ERSAoU0VUX1NSQyAoaW5zbl9zZXQpKTsK KyAgICAgIHJldHVybiAoVkVDVE9SX01PREVfUCAobW9kZSkgJiYgVkFMSURfTVZFX1BSRURf TU9ERSAobW9kZSkpCisJICAgICA/IEdFVF9NT0RFX05VTklUUyAobW9kZSkgOiAwOworICAg IH0KKyAgcmV0dXJuIDA7Cit9CisKKy8qIENoZWNrIGlmIElOU04gcmVxdWlyZXMgdGhlIHVz ZSBvZiB0aGUgVlBSIHJlZywgaWYgaXQgZG9lcywgcmV0dXJuIHRoZQorICAgc3ViLXJ0eCBv ZiB0aGUgVlBSIHJlZy4gIFRoZSBUWVBFIGFyZ3VtZW50IGNvbnRyb2xzIHdoZXRoZXIKKyAg IHRoaXMgZnVuY3Rpb24gc2hvdWxkOgorICAgKiBGb3IgVFlQRSA9PSAwLCBjaGVjayBhbGwg b3BlcmFuZHMsIGluY2x1ZGluZyB0aGUgT1VUIG9wZXJhbmRzLAorICAgICBhbmQgcmV0dXJu IHRoZSBmaXJzdCBvY2N1cnJlbmNlIG9mIHRoZSBWUFIgcmVnLgorICAgKiBGb3IgVFlQRSA9 PSAxLCBvbmx5IGNoZWNrIHRoZSBpbnB1dCBvcGVyYW5kcy4KKyAgICogRm9yIFRZUEUgPT0g Miwgb25seSBjaGVjayB0aGUgb3V0cHV0IG9wZXJhbmRzLgorICAgKElOT1VUIG9wZXJhbmRz IGFyZSBjb25zaWRlcmVkIGJvdGggYXMgaW5wdXQgYW5kIG91dHB1dCBvcGVyYW5kcykKKyov CitzdGF0aWMgcnR4Cithcm1fZ2V0X3JlcXVpcmVkX3Zwcl9yZWcgKHJ0eF9pbnNuICppbnNu LCB1bnNpZ25lZCBpbnQgdHlwZSA9IDApCit7CisgIGdjY19hc3NlcnQgKHR5cGUgPCAzKTsK KyAgaWYgKCFOT05KVU1QX0lOU05fUCAoaW5zbikpCisgICAgcmV0dXJuIE5VTExfUlRYOwor CisgIGJvb2wgcmVxdWlyZXNfdnByOworICBleHRyYWN0X2NvbnN0cmFpbl9pbnNuIChpbnNu KTsKKyAgaW50IG5fb3BlcmFuZHMgPSByZWNvZ19kYXRhLm5fb3BlcmFuZHM7CisgIGlmIChy ZWNvZ19kYXRhLm5fYWx0ZXJuYXRpdmVzID09IDApCisgICAgcmV0dXJuIE5VTExfUlRYOwor CisgIC8qIEZpbGwgaW4gcmVjb2dfb3BfYWx0IHdpdGggaW5mb3JtYXRpb24gYWJvdXQgdGhl IGNvbnN0cmFpbnRzIG9mCisgICAgIHRoaXMgaW5zbi4gICovCisgIHByZXByb2Nlc3NfY29u c3RyYWludHMgKGluc24pOworCisgIGZvciAoaW50IG9wID0gMDsgb3AgPCBuX29wZXJhbmRz OyBvcCsrKQorICAgIHsKKyAgICAgIHJlcXVpcmVzX3ZwciA9IHRydWU7CisgICAgICBpZiAo dHlwZSA9PSAxICYmIHJlY29nX2RhdGEub3BlcmFuZF90eXBlW29wXSA9PSBPUF9PVVQpCisJ Y29udGludWU7CisgICAgICBlbHNlIGlmICh0eXBlID09IDIgJiYgcmVjb2dfZGF0YS5vcGVy YW5kX3R5cGVbb3BdID09IE9QX0lOKQorCWNvbnRpbnVlOworCisgICAgICAvKiBJdGVyYXRl IHRocm91Z2ggYWx0ZXJuYXRpdmVzIG9mIG9wZXJhbmQgIm9wIiBpbiByZWNvZ19vcF9hbHQg YW5kCisJIGlkZW50aWZ5IGlmIHRoZSBvcGVyYW5kIGlzIHJlcXVpcmVkIHRvIGJlIHRoZSBW UFIuICAqLworICAgICAgZm9yIChpbnQgYWx0ID0gMDsgYWx0IDwgcmVjb2dfZGF0YS5uX2Fs dGVybmF0aXZlczsgYWx0KyspCisJeworCSAgY29uc3Qgb3BlcmFuZF9hbHRlcm5hdGl2ZSAq b3BfYWx0CisJICAgICAgPSAmcmVjb2dfb3BfYWx0W2FsdCAqIG5fb3BlcmFuZHNdOworCSAg LyogRmV0Y2ggdGhlIHJlZ19jbGFzcyBmb3IgZWFjaCBlbnRyeSBhbmQgY2hlY2sgaXQgYWdh aW5zdCB0aGUKKwkgICAgIFZQUl9SRUcgcmVnX2NsYXNzLiAgKi8KKwkgIGlmIChhbHRlcm5h dGl2ZV9jbGFzcyAob3BfYWx0LCBvcCkgIT0gVlBSX1JFRykKKwkgICAgcmVxdWlyZXNfdnBy ID0gZmFsc2U7CisJfQorICAgICAgLyogSWYgYWxsIGFsdGVybmF0aXZlcyBvZiB0aGUgaW5z biByZXF1aXJlIHRoZSBWUFIgcmVnIGZvciB0aGlzIG9wZXJhbmQsCisJIGl0IG1lYW5zIHRo YXQgZWl0aGVyIHRoaXMgaXMgVlBSLWdlbmVyYXRpbmcgaW5zdHJ1Y3Rpb24sIGxpa2UgYSB2 Y3RwLAorCSB2Y21wLCBldGMuLCBvciBpdCBpcyBhIFZQVC1wcmVkaWNhdGVkIGluc3J1Y3Rp b24uICBSZXR1cm4gdGhlIHN1YnJ0eAorCSBvZiB0aGUgVlBSIHJlZyBvcGVyYW5kLiAgKi8K KyAgICAgIGlmIChyZXF1aXJlc192cHIpCisJcmV0dXJuIHJlY29nX2RhdGEub3BlcmFuZFtv cF07CisgICAgfQorICByZXR1cm4gTlVMTF9SVFg7Cit9CisKKy8qIFdyYXBwZXIgZnVuY3Rp b24gb2YgYXJtX2dldF9yZXF1aXJlZF92cHJfcmVnIHdpdGggVFlQRSA9PSAxLCBzbyByZXR1 cm4KKyAgIHNvbWV0aGluZyBvbmx5IGlmIHRoZSBWUFIgcmVnIGlzIGFuIGlucHV0IG9wZXJh bmQgdG8gdGhlIGluc24uICAqLworCitzdGF0aWMgcnR4Cithcm1fZ2V0X3JlcXVpcmVkX3Zw cl9yZWdfcGFyYW0gKHJ0eF9pbnNuICppbnNuKQoreworICByZXR1cm4gYXJtX2dldF9yZXF1 aXJlZF92cHJfcmVnIChpbnNuLCAxKTsKK30KKworLyogV3JhcHBlciBmdW5jdGlvbiBvZiBh cm1fZ2V0X3JlcXVpcmVkX3Zwcl9yZWcgd2l0aCBUWVBFID09IDIsIHNvIHJldHVybgorICAg c29tZXRoaW5nIG9ubHkgaWYgdGhlIFZQUiByZWcgaXMgdGhlIHJldHVybiB2YWx1ZSwgYW4g b3V0cHV0IG9mLCBvciBpcworICAgY2xvYmJlcmVkIGJ5IHRoZSBpbnNuLiAgKi8KKworc3Rh dGljIHJ0eAorYXJtX2dldF9yZXF1aXJlZF92cHJfcmVnX3JldF92YWwgKHJ0eF9pbnNuICpp bnNuKQoreworICByZXR1cm4gYXJtX2dldF9yZXF1aXJlZF92cHJfcmVnIChpbnNuLCAyKTsK K30KKworLyogU2NhbiB0aGUgYmFzaWMgYmxvY2sgb2YgYSBsb29wIGJvZHkgZm9yIGEgdmN0 cCBpbnN0cnVjdGlvbi4gIElmIHRoZXJlIGlzCisgICBhdCBsZWFzdCB2Y3RwIGluc3RydWN0 aW9uLCByZXR1cm4gdGhlIGZpcnN0IHJ0eF9pbnNuICouICAqLworCitzdGF0aWMgcnR4X2lu c24gKgorYXJtX212ZV9nZXRfbG9vcF92Y3RwIChiYXNpY19ibG9jayBiYikKK3sKKyAgcnR4 X2luc24gKmluc24gPSBCQl9IRUFEIChiYik7CisKKyAgLyogTm93IHNjYW4gdGhyb3VnaCBh bGwgdGhlIGluc3RydWN0aW9uIHBhdHRlcm5zIGFuZCBwaWNrIG91dCB0aGUgVkNUUAorICAg ICBpbnN0cnVjdGlvbi4gIFdlIHJlcXVpcmUgYXJtX2dldF9yZXF1aXJlZF92cHJfcmVnX3Bh cmFtIHRvIGJlIGZhbHNlCisgICAgIHRvIG1ha2Ugc3VyZSB3ZSBwaWNrIHVwIGEgVkNUUCwg cmF0aGVyIHRoYW4gYSBWQ1RQX00uICAqLworICBGT1JfQkJfSU5TTlMgKGJiLCBpbnNuKQor ICAgIGlmIChOT05ERUJVR19JTlNOX1AgKGluc24pKQorICAgICAgaWYgKGFybV9nZXRfcmVx dWlyZWRfdnByX3JlZ19yZXRfdmFsIChpbnNuKQorCSAgJiYgKGFybV9tdmVfZ2V0X3ZjdHBf bGFuZXMgKGluc24pICE9IDApCisJICAmJiAhYXJtX2dldF9yZXF1aXJlZF92cHJfcmVnX3Bh cmFtIChpbnNuKSkKKwlyZXR1cm4gaW5zbjsKKyAgcmV0dXJuIE5VTEw7Cit9CisKKy8qIFJl dHVybiB0cnVlIGlmIElOU04gaXMgYSBNVkUgaW5zdHJ1Y3Rpb24gdGhhdCBpcyBWUFQtcHJl ZGljYWJsZSwgYnV0IGluCisgICBpdHMgdW5wcmVkaWNhdGVkIGZvcm0sIG9yIGlmIGl0IGlz IHByZWRpY2F0ZWQsIGJ1dCBvbiBhIHByZWRpY2F0ZSBvdGhlcgorICAgdGhhbiBWUFJfUkVH LiAgKi8KKworc3RhdGljIGJvb2wKK2FybV9tdmVfdmVjX2luc25faXNfdW5wcmVkaWNhdGVk X29yX3VzZXNfb3RoZXJfcHJlZGljYXRlIChydHhfaW5zbiAqaW5zbiwKKwkJCQkJCQkgIHJ0 eCB2cHJfcmVnKQoreworICBydHggaW5zbl92cHJfcmVnX29wZXJhbmQ7CisgIGlmIChNVkVf VlBUX1VOUFJFRElDQVRFRF9JTlNOX1AgKGluc24pCisgICAgICB8fCAoTVZFX1ZQVF9QUkVE SUNBVEVEX0lOU05fUCAoaW5zbikKKwkgICYmIChpbnNuX3Zwcl9yZWdfb3BlcmFuZCA9IGFy bV9nZXRfcmVxdWlyZWRfdnByX3JlZ19wYXJhbSAoaW5zbikpCisJICAmJiAhcnR4X2VxdWFs X3AgKHZwcl9yZWcsIGluc25fdnByX3JlZ19vcGVyYW5kKSkpCisgICAgcmV0dXJuIHRydWU7 CisgIGVsc2UKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKKy8qIFJldHVybiB0cnVlIGlmIElO U04gaXMgYSBNVkUgaW5zdHJ1Y3Rpb24gdGhhdCBpcyBWUFQtcHJlZGljYWJsZSBhbmQgaXMK KyAgIHByZWRpY2F0ZWQgb24gVlBSX1JFRy4gICovCisKK3N0YXRpYyBib29sCithcm1fbXZl X3ZlY19pbnNuX2lzX3ByZWRpY2F0ZWRfd2l0aF90aGlzX3ByZWRpY2F0ZSAocnR4X2luc24g Kmluc24sCisJCQkJCQkgICAgcnR4IHZwcl9yZWcpCit7CisgIHJ0eCBpbnNuX3Zwcl9yZWdf b3BlcmFuZDsKKyAgaWYgKE1WRV9WUFRfUFJFRElDQVRFRF9JTlNOX1AgKGluc24pCisgICAg ICAmJiAoaW5zbl92cHJfcmVnX29wZXJhbmQgPSBhcm1fZ2V0X3JlcXVpcmVkX3Zwcl9yZWdf cGFyYW0gKGluc24pKQorICAgICAgJiYgcnR4X2VxdWFsX3AgKHZwcl9yZWcsIGluc25fdnBy X3JlZ19vcGVyYW5kKSkKKyAgICByZXR1cm4gdHJ1ZTsKKyAgZWxzZQorICAgIHJldHVybiBm YWxzZTsKK30KKworLyogVXRpbGl0eSBmdW5jdGlvbiB0byBpZGVudGlmeSBpZiBJTlNOIGlz IGFuIE1WRSBpbnN0cnVjdGlvbiB0aGF0IHBlcmZvcm1zCisgICBzb21lIGFjcm9zcy12ZWN0 b3Igb3BlcmF0aW9uIChhbmQgYXMgYSByZXN1bHQgZG9lcyBub3QgYWxpZ24gd2l0aCBub3Jt YWwKKyAgIGxhbmUgcHJlZGljYXRpb24gcnVsZXMpLiAgQWxsIHN1Y2ggaW5zdHJ1Y3Rpb25z IGdpdmUgb25lIG9ubHkgc2NhbGFyCisgICBvdXRwdXQsIGV4Y2VwdCBmb3IgdnNobGNxIHdo aWNoIGdpdmVzIGEgUEFSQUxMRUwgb2YgYSB2ZWN0b3IgYW5kIGEgc2NhbGFyCisgICAob25l IHZlY3RvciByZXN1bHQgYW5kIG9uZSBjYXJyeSBvdXRwdXQpLiAgKi8KKworc3RhdGljIGJv b2wKK2FybV9pc19tdmVfYWNyb3NzX3ZlY3Rvcl9pbnNuIChydHhfaW5zbiogaW5zbikKK3sK KyAgZGZfcmVmIGluc25fZGVmcyA9IE5VTEw7CisgIGlmICghTVZFX1ZQVF9QUkVESUNBQkxF X0lOU05fUCAoaW5zbikpCisgICAgcmV0dXJuIGZhbHNlOworCisgIGJvb2wgaXNfYWNyb3Nz X3ZlY3RvciA9IGZhbHNlOworICBGT1JfRUFDSF9JTlNOX0RFRiAoaW5zbl9kZWZzLCBpbnNu KQorICAgIGlmICghVkFMSURfTVZFX01PREUgKEdFVF9NT0RFIChERl9SRUZfUkVHIChpbnNu X2RlZnMpKSkKKwkmJiAhYXJtX2dldF9yZXF1aXJlZF92cHJfcmVnX3JldF92YWwgKGluc24p KQorICAgICAgaXNfYWNyb3NzX3ZlY3RvciA9IHRydWU7CisKKyAgcmV0dXJuIGlzX2Fjcm9z c192ZWN0b3I7Cit9CisKKy8qIFV0aWxpdHkgZnVuY3Rpb24gdG8gaWRlbnRpZnkgaWYgSU5T TiBpcyBhbiBNVkUgbG9hZCBvciBzdG9yZSBpbnN0cnVjdGlvbi4KKyAgICogRm9yIFRZUEUg PT0gMCwgY2hlY2sgYWxsIG9wZXJhbmRzLiAgSWYgdGhlIGZ1bmN0aW9uIHJldHVybnMgdHJ1 ZSwKKyAgICAgSU5TTiBpcyBhIGxvYWQgb3IgYSBzdG9yZSBpbnNuLgorICAgKiBGb3IgVFlQ RSA9PSAxLCBvbmx5IGNoZWNrIHRoZSBpbnB1dCBvcGVyYW5kcy4gIElmIHRoZSBmdW5jdGlv biByZXR1cm5zCisgICAgIHRydWUsIElOU04gaXMgYSBsb2FkIGluc24uCisgICAqIEZvciBU WVBFID09IDIsIG9ubHkgY2hlY2sgdGhlIG91dHB1dCBvcGVyYW5kcy4gIElmIHRoZSBmdW5j dGlvbiByZXR1cm5zCisgICAgIHRydWUsIElOU04gaXMgYSBzdG9yZSBpbnNuLiAgKi8KKwor c3RhdGljIGJvb2wKK2FybV9pc19tdmVfbG9hZF9zdG9yZV9pbnNuIChydHhfaW5zbiogaW5z biwgaW50IHR5cGUgPSAwKQoreworICBpbnQgbl9vcGVyYW5kcyA9IHJlY29nX2RhdGEubl9v cGVyYW5kczsKKyAgZXh0cmFjdF9pbnNuIChpbnNuKTsKKworICBmb3IgKGludCBvcCA9IDA7 IG9wIDwgbl9vcGVyYW5kczsgb3ArKykKKyAgICB7CisgICAgICBpZiAodHlwZSA9PSAxICYm IHJlY29nX2RhdGEub3BlcmFuZF90eXBlW29wXSA9PSBPUF9PVVQpCisJY29udGludWU7Cisg ICAgICBlbHNlIGlmICh0eXBlID09IDIgJiYgcmVjb2dfZGF0YS5vcGVyYW5kX3R5cGVbb3Bd ID09IE9QX0lOKQorCWNvbnRpbnVlOworICAgICAgaWYgKG12ZV9tZW1vcnlfb3BlcmFuZCAo cmVjb2dfZGF0YS5vcGVyYW5kW29wXSwKKwkJCSAgICAgIEdFVF9NT0RFIChyZWNvZ19kYXRh Lm9wZXJhbmRbb3BdKSkpCisgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgIHJldHVybiBm YWxzZTsKK30KKworLyogV2hlbiB0cmFuc2Zvcm1pbmcgYW4gTVZFIGludHJpbnNpYyBsb29w IGludG8gYW4gTVZFIFRhaWwgUHJlZGljYXRlZCBMb3cKKyAgIE92ZXJoZWFkIExvb3AsIHRo ZXJlIGFyZSBhIG51bWJlciBvZiBpbnN0cnVjdGlvbnMgdGhhdCwgaWYgaW4gdGhlaXIKKyAg IHVucHJlZGljYXRlZCBmb3JtLCBhY3QgYWNyb3NzIHZlY3RvciBsYW5lcywgYnV0IGFyZSBz dGlsbCBzYWZlIHRvIGluY2x1ZGUKKyAgIHdpdGhpbiB0aGUgbG9vcCwgZGVzcGl0ZSB0aGUg aW1wbGljaXQgcHJlZGljYXRpb24gYWRkZWQgdG8gdGhlIHZlY3RvciBsYW5lcy4KKyAgIFRo aXMgbGlzdCBoYXMgYmVlbiBjb21waWxlZCBieSBjYXJlZnVsbHkgYW5hbHl6aW5nIHRoZSBp bnN0cnVjdGlvbgorICAgcHNldWRvY29kZSBpbiB0aGUgQXJtLUFSTS4KKyAgIEFsbCBvdGhl ciBhY3Jvc3MtdmVjdG9yIGluc3RydWN0aW9ucyBhcmVuJ3QgYWxsb3dlZCwgYmVjYXVzZSB0 aGUgYWRkaXRpb24KKyAgIG9mIGltcGxpY2l0IHByZWRpY2F0aW9uIGNvdWxkIGluZmx1bmNl IHRoZSByZXN1bHQgb2YgdGhlIG9wZXJhdGlvbi4KKyAgIEFueSBuZXcgYWNyb3NzLXZlY3Rv ciBpbnN0cnVjdGlvbnMgdG8gdGhlIE1WRSBJU0Egd2lsbCBoYXZlIHRvIGFzc2Vzc2VkIGZv cgorICAgaW5jbHVzaW9uIHRvIHRoaXMgbGlzdC4gICovCisKK3N0YXRpYyBib29sCithcm1f bXZlX2lzX2FsbG93ZWRfdW5wcmVkaWNfYWNyb3NzX3ZlY3Rvcl9pbnNuIChydHhfaW5zbiog aW5zbikKK3sKKyAgZ2NjX2Fzc2VydCAoTVZFX1ZQVF9VTlBSRURJQ0FURURfSU5TTl9QIChp bnNuKQorCSAgICAgICYmIGFybV9pc19tdmVfYWNyb3NzX3ZlY3Rvcl9pbnNuIChpbnNuKSk7 CisgIHJ0eCBpbnNuX3NldCA9IHNpbmdsZV9zZXQgKGluc24pOworICBpZiAoIWluc25fc2V0 KQorICAgIHJldHVybiBmYWxzZTsKKyAgcnR4IHVuc3BlYyA9IFNFVF9TUkMgKGluc25fc2V0 KTsKKyAgaWYgKEdFVF9DT0RFICh1bnNwZWMpICE9IFVOU1BFQykKKyAgICByZXR1cm4gZmFs c2U7CisgIHN3aXRjaCAoWElOVCAodW5zcGVjLCAxKSkKKyAgICB7CisgICAgY2FzZSBWQURE VlFfVToKKyAgICBjYXNlIFZBRERWUV9TOgorICAgIGNhc2UgVkFERFZBUV9VOgorICAgIGNh c2UgVkFERFZBUV9TOgorICAgIGNhc2UgVk1MQURBVlFfVToKKyAgICBjYXNlIFZNTEFEQVZR X1M6CisgICAgY2FzZSBWTUxBREFWWFFfUzoKKyAgICBjYXNlIFZNTEFEQVZBUV9VOgorICAg IGNhc2UgVk1MQURBVkFRX1M6CisgICAgY2FzZSBWTUxBREFWQVhRX1M6CisgICAgY2FzZSBW QUJBVlFfUzoKKyAgICBjYXNlIFZBQkFWUV9VOgorICAgIGNhc2UgVkFERExWUV9TOgorICAg IGNhc2UgVkFERExWUV9VOgorICAgIGNhc2UgVkFERExWQVFfUzoKKyAgICBjYXNlIFZBRERM VkFRX1U6CisgICAgY2FzZSBWTUFYVlFfVToKKyAgICBjYXNlIFZNQVhBVlFfUzoKKyAgICBj YXNlIFZNTEFMREFWUV9VOgorICAgIGNhc2UgVk1MQUxEQVZYUV9VOgorICAgIGNhc2UgVk1M QUxEQVZYUV9TOgorICAgIGNhc2UgVk1MQUxEQVZRX1M6CisgICAgY2FzZSBWTUxBTERBVkFR X1M6CisgICAgY2FzZSBWTUxBTERBVkFRX1U6CisgICAgY2FzZSBWTUxBTERBVkFYUV9TOgor ICAgIGNhc2UgVk1MQUxEQVZBWFFfVToKKyAgICBjYXNlIFZNTFNEQVZRX1M6CisgICAgY2Fz ZSBWTUxTREFWWFFfUzoKKyAgICBjYXNlIFZNTFNEQVZBWFFfUzoKKyAgICBjYXNlIFZNTFNE QVZBUV9TOgorICAgIGNhc2UgVk1MU0xEQVZRX1M6CisgICAgY2FzZSBWTUxTTERBVlhRX1M6 CisgICAgY2FzZSBWTUxTTERBVkFRX1M6CisgICAgY2FzZSBWTUxTTERBVkFYUV9TOgorICAg IGNhc2UgVlJNTEFMREFWSFhRX1M6CisgICAgY2FzZSBWUk1MQUxEQVZIUV9VOgorICAgIGNh c2UgVlJNTEFMREFWSFFfUzoKKyAgICBjYXNlIFZSTUxBTERBVkhBUV9TOgorICAgIGNhc2Ug VlJNTEFMREFWSEFRX1U6CisgICAgY2FzZSBWUk1MQUxEQVZIQVhRX1M6CisgICAgY2FzZSBW Uk1MU0xEQVZIUV9TOgorICAgIGNhc2UgVlJNTFNMREFWSFhRX1M6CisgICAgY2FzZSBWUk1M U0xEQVZIQVFfUzoKKyAgICBjYXNlIFZSTUxTTERBVkhBWFFfUzoKKyAgICAgIHJldHVybiB0 cnVlOworICAgIGRlZmF1bHQ6CisgICAgICBicmVhazsKKyAgICB9CisgIHJldHVybiBmYWxz ZTsKK30KKworLyogU2NhbiB0aHJvdWdoIHRoZSBERiBjaGFpbiBiYWNrd2FyZHMgd2l0aGlu IHRoZSBiYXNpYyBibG9jayBhbmQKKyAgIGRldGVybWluZSBpZiBhbnkgb2YgdGhlIFVTRXMg b2YgdGhlIG9yaWdpbmFsIGluc24gKG9yIHRoZSBVU0VzIG9mIHRoZSBpbnNucworICAgd2hl cmUgdGh5IHdlcmUgREVGLWVkLCBldGMuKSB3ZXJlIGFmZmVjdGVkIGJ5IGltcGxpY2l0IFZQ VAorICAgcHJlZGljYXRpb24gb2YgYW4gTVZFX1ZQVF9VTlBSRURJQ0FURURfSU5TTl9QIGlu IGEgZGxzdHAvbGV0cCBsb29wLgorICAgVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRydWUgaWYg dGhlIGluc24gaXMgYWZmZWN0ZWQgaW1wbGljaXQgcHJlZGljYXRpb24KKyAgIGFuZCBmYWxz ZSBvdGhlcndpc2UuCisgICBIYXZpbmcgc3VjaCBpbXBsaWNpdCBwcmVkaWNhdGlvbiBvbiBh biB1bnByZWRpY2F0ZWQgaW5zbiB3b3VsZG4ndCBpbiBpdHNlbGYKKyAgIGJsb2NrIHRhaWwg cHJlZGljYXRpb24sIGJlY2F1c2UgdGhlIG91dHB1dCBvZiB0aGF0IGluc24gbWlnaHQgdGhl biBiZSB1c2VkCisgICBpbiBhIGNvcnJlY3RseSBwcmVkaWNhdGVkIHN0b3JlIGluc24sIHdo ZXJlIHRoZSBkaXNhYmxlZCBsYW5lcyB3aWxsIGJlCisgICBpZ25vcmVkLiAgVG8gdmVyaWZ5 IHRoaXMgd2UgbGF0ZXIgY2FsbDoKKyAgIGBhcm1fbXZlX2NoZWNrX2RmX2NoYWluX2Z3ZF9m b3JfaW1wbGljX3ByZWRpY19pbXBhY3RgLCB3aGljaCB3aWxsIGNoZWNrIHRoZQorICAgREYg Y2hhaW5zIGZvcndhcmQgdG8gc2VlIGlmIGFueSBpbXBsaWNpdGx5LXByZWRpY2F0ZWQgb3Bl cmFuZCBnZXRzIHVzZWQgaW4KKyAgIGFuIGltcHJvcGVyIHdheS4gICovCisKK3N0YXRpYyBi b29sCithcm1fbXZlX2NoZWNrX2RmX2NoYWluX2JhY2tfZm9yX2ltcGxpY19wcmVkaWMKKyAg KGhhc2hfbWFwIDxydHhfaW5zbiAqLCBib29sPiAqc2FmZV9pbnNuX21hcCwgcnR4X2luc24g Kmluc25faW4sCisgICBydHggdmN0cF92cHJfZ2VuZXJhdGVkKQoreworCisgIGF1dG9fdmVj PHJ0eF9pbnNuICo+IHdvcmtsaXN0OworICB3b3JrbGlzdC5zYWZlX3B1c2ggKGluc25faW4p OworCisgIGJvb2wgKnRlbXAgPSBOVUxMOworCisgIHdoaWxlICh3b3JrbGlzdC5sZW5ndGgg KCkgPiAwKQorICAgIHsKKyAgICAgIHJ0eF9pbnNuICppbnNuID0gd29ya2xpc3QucG9wICgp OworCisgICAgICBpZiAoKHRlbXAgPSBzYWZlX2luc25fbWFwLT5nZXQgKGluc24pKSkKKwly ZXR1cm4gKnRlbXA7CisKKyAgICAgIGJhc2ljX2Jsb2NrIGJvZHkgPSBCTE9DS19GT1JfSU5T TiAoaW5zbik7CisKKyAgICAgIC8qIFRoZSBjaXJjdW1zdGFuY2VzIHVuZGVyIHdoaWNoIGFu IGluc3RydWN0aW9uIGlzIGFmZmVjdGVkIGJ5ICJpbXBsaWNpdAorCSBwcmVkaWNhdGlvbiIg YXJlIGFzIGZvbGxvd3M6CisJICAqIEl0IGlzIGFuIFVOUFJFRElDQVRFRF9JTlNOX1A6CisJ ICAgICogVGhhdCBsb2Fkcy9zdG9yZXMgZnJvbS90byBtZW1vcnkuCisJICAgICogV2hlcmUg YW55IG9uZSBvZiBpdHMgb3BlcmFuZHMgaXMgYW4gTVZFIHZlY3RvciBmcm9tIG91dHNpZGUg dGhlCisJICAgICAgbG9vcCBib2R5IGJiLgorCSBPcjoKKwkgICogQW55IG9mIGl0J3Mgb3Bl cmFuZHMgd2VyZSBhZmZlY3RlZCBlYXJsaWVyIGluIHRoZSBpbnNuIGNoYWluLiAgKi8KKyAg ICAgIGlmIChNVkVfVlBUX1VOUFJFRElDQVRFRF9JTlNOX1AgKGluc24pCisJICAmJiAoYXJt X2lzX212ZV9sb2FkX3N0b3JlX2luc24gKGluc24pCisJICAgICAgfHwgKGFybV9pc19tdmVf YWNyb3NzX3ZlY3Rvcl9pbnNuIChpbnNuKQorCQkgICYmICFhcm1fbXZlX2lzX2FsbG93ZWRf dW5wcmVkaWNfYWNyb3NzX3ZlY3Rvcl9pbnNuIChpbnNuKSkpKQorCXsKKwkgIHNhZmVfaW5z bl9tYXAtPnB1dCAoaW5zbiwgdHJ1ZSk7CisJICByZXR1cm4gdHJ1ZTsKKwl9CisKKyAgICAg IGRmX3JlZiBpbnNuX3VzZXMgPSBOVUxMOworICAgICAgRk9SX0VBQ0hfSU5TTl9VU0UgKGlu c25fdXNlcywgaW5zbikKKyAgICAgIHsKKwkvKiBJZiB0aGUgb3BlcmFuZCBpcyBpbiB0aGUg aW5wdXQgcmVnIHNldCB0byB0aGUgdGhlIGJhc2ljIGJsb2NrLAorCSAgIChpLmUuIGl0IGhh cyBjb21lIGZyb20gb3V0c2lkZSB0aGUgbG9vcCEpLCBjb25zaWRlciBpdCB1bnNhZmUgaWY6 CisJICAgICAqIEl0J3MgYmVpbmcgdXNlZCBpbiBhbiB1bnByZWRpY2F0ZWQgaW5zbi4KKwkg ICAgICogSXQgaXMgYSBwcmVkaWNhYmxlIE1WRSB2ZWN0b3IuICAqLworCWlmIChNVkVfVlBU X1VOUFJFRElDQVRFRF9JTlNOX1AgKGluc24pCisJICAgICYmIFZBTElEX01WRV9NT0RFIChH RVRfTU9ERSAoREZfUkVGX1JFRyAoaW5zbl91c2VzKSkpCisJICAgICYmIFJFR05PX1JFR19T RVRfUCAoREZfTFJfSU4gKGJvZHkpLCBERl9SRUZfUkVHTk8gKGluc25fdXNlcykpKQorCSAg eworCSAgICBzYWZlX2luc25fbWFwLT5wdXQgKGluc24sIHRydWUpOworCSAgICByZXR1cm4g dHJ1ZTsKKwkgIH0KKworCS8qIFNjYW4gYmFja3dhcmRzIGZyb20gdGhlIGN1cnJlbnQgSU5T TiB0aHJvdWdoIHRoZSBpbnN0cnVjdGlvbiBjaGFpbgorCSAgIHVudGlsIHRoZSBzdGFydCBv ZiB0aGUgYmFzaWMgYmxvY2suICAqLworCWZvciAocnR4X2luc24gKnByZXZfaW5zbiA9IFBS RVZfSU5TTiAoaW5zbik7CisJICAgICBwcmV2X2luc24gJiYgcHJldl9pbnNuICE9IFBSRVZf SU5TTiAoQkJfSEVBRCAoYm9keSkpOworCSAgICAgcHJldl9pbnNuID0gUFJFVl9JTlNOIChw cmV2X2luc24pKQorCSAgeworCSAgICAvKiBJZiBhIHByZXZpb3VzIGluc24gZGVmaW5lcyBh IHJlZ2lzdGVyIHRoYXQgSU5TTiB1c2VzLCB0aGVuCisJICAgICAgIGFkZCB0byB0aGUgd29y a2xpc3QgdG8gY2hlY2sgdGhhdCBpbnNuJ3MgVVNFcy4gIElmIGFueSBvZiB0aGVzZQorCSAg ICAgICBpbnNucyByZXR1cm4gdHJ1ZSBhcyBNVkVfVlBUX1VOUFJFRElDQVRFRF9JTlNOX1Bz LCB0aGVuIHRoZQorCSAgICAgICB3aG9sZSBjaGFpbiBpcyBhZmZlY3RlZCBieSB0aGUgY2hh bmdlIGluIGJlaGF2aW91ciBmcm9tIGJlaW5nCisJICAgICAgIHBsYWNlZCBpbiBkbHN0cC9s ZXRwIGxvb3AuICAqLworCSAgICBkZl9yZWYgcHJldl9pbnNuX2RlZnMgPSBOVUxMOworCSAg ICBGT1JfRUFDSF9JTlNOX0RFRiAocHJldl9pbnNuX2RlZnMsIHByZXZfaW5zbikKKwkgICAg eworCSAgICAgIGlmIChERl9SRUZfUkVHTk8gKGluc25fdXNlcykgPT0gREZfUkVGX1JFR05P IChwcmV2X2luc25fZGVmcykKKwkJICAmJiAhYXJtX212ZV92ZWNfaW5zbl9pc19wcmVkaWNh dGVkX3dpdGhfdGhpc19wcmVkaWNhdGUKKwkJICAgICAgIChpbnNuLCB2Y3RwX3Zwcl9nZW5l cmF0ZWQpKQorCQl3b3JrbGlzdC5zYWZlX3B1c2ggKHByZXZfaW5zbik7CisJICAgIH0KKwkg IH0KKyAgICAgIH0KKyAgICB9CisgIHNhZmVfaW5zbl9tYXAtPnB1dCAoaW5zbl9pbiwgZmFs c2UpOworICByZXR1cm4gZmFsc2U7Cit9CisKKy8qIElmIHdlIGhhdmUgaWRlbnRpZmllZCB0 aGF0IHRoZSBjdXJyZW50IERFRiB3aWxsIGJlIG1vZGlmaWVkCisgICBieSBzdWNoIGltcGxp Y2l0IHByZWRpY2F0aW9uLCBzY2FuIHRocm91Z2ggYWxsIHRoZQorICAgaW5zbnMgdGhhdCBV U0UgaXQgYW5kIGJhaWwgb3V0IGlmIGFueSBvbmUgaXMgb3V0c2lkZSB0aGUKKyAgIGN1cnJl bnQgYmFzaWMgYmxvY2sgKGkuZS4gdGhlIHJlZyBpcyBsaXZlIGFmdGVyIHRoZSBsb29wKQor ICAgb3IgaWYgYW55IGFyZSBzdG9yZSBpbnNucyB0aGF0IGFyZSB1bnByZWRpY2F0ZWQgb3Ig dXNpbmcgYQorICAgcHJlZGljYXRlIG90aGVyIHRoYW4gdGhlIGxvb3AgVlBSLgorICAgVGhp cyBmdW5jdGlvbiByZXR1cm5zIHRydWUgaWYgdGhlIGluc24gaXMgbm90IHN1aXRhYmxlIGZv cgorICAgaW1wbGljaXQgcHJlZGljYXRpb24gYW5kIGZhbHNlIG90aGVyd2lzZS4qLworCitz dGF0aWMgYm9vbAorYXJtX212ZV9jaGVja19kZl9jaGFpbl9md2RfZm9yX2ltcGxpY19wcmVk aWNfaW1wYWN0IChydHhfaW5zbiAqaW5zbiwKKwkJCQkJCSAgICAgcnR4IHZjdHBfdnByX2dl bmVyYXRlZCkKK3sKKworICAvKiBJZiB0aGlzIGluc24gaXMgaW5kZWVkIGFuIHVucHJlZGlj YXRlZCBzdG9yZSB0byBtZW1vcnksIGJhaWwgb3V0LiAgKi8KKyAgaWYgKGFybV9tdmVfdmVj X2luc25faXNfdW5wcmVkaWNhdGVkX29yX3VzZXNfb3RoZXJfcHJlZGljYXRlCisJKGluc24s IHZjdHBfdnByX2dlbmVyYXRlZCkKKyAgICAgICYmIChhcm1faXNfbXZlX2xvYWRfc3RvcmVf aW5zbiAoaW5zbiwgMikKKwkgIHx8IGFybV9pc19tdmVfYWNyb3NzX3ZlY3Rvcl9pbnNuIChp bnNuKSkpCisgICAgcmV0dXJuIHRydWU7CisKKyAgLyogTmV4dCwgc2NhbiBmb3J3YXJkIHRv IHRoZSB2YXJpb3VzIFVTRXMgb2YgdGhlIERFRnMgaW4gdGhpcyBpbnNuLiAgKi8KKyAgZGZf cmVmIGluc25fZGVmID0gTlVMTDsKKyAgRk9SX0VBQ0hfSU5TTl9ERUYgKGluc25fZGVmLCBp bnNuKQorICAgIHsKKyAgICAgIGZvciAoZGZfcmVmIHVzZSA9IERGX1JFR19VU0VfQ0hBSU4g KERGX1JFRl9SRUdOTyAoaW5zbl9kZWYpKTsgdXNlOworCSAgIHVzZSA9IERGX1JFRl9ORVhU X1JFRyAodXNlKSkKKwl7CisJICBydHhfaW5zbiAqbmV4dF91c2VfaW5zbiA9IERGX1JFRl9J TlNOICh1c2UpOworCSAgaWYgKG5leHRfdXNlX2luc24gIT0gaW5zbgorCSAgICAgICYmIE5P TkRFQlVHX0lOU05fUCAobmV4dF91c2VfaW5zbikpCisJICAgIHsKKwkgICAgICAvKiBJZiB0 aGUgVVNFIGlzIG91dHNpZGUgdGhlIGxvb3AgYm9keSBiYiwgb3IgaXQgaXMgaW5zaWRlLCBi dXQKKwkJIGlzIGFuIGRpZmZlcmVudGx5LXByZWRpY2F0ZWQgc3RvcmUgdG8gbWVtb3J5IG9y IGl0IGlzIGFueQorCQkgYWNyb3NzLXZlY3RvciBpbnN0cnVjdGlvbi4gICovCisJICAgICAg aWYgKEJMT0NLX0ZPUl9JTlNOIChpbnNuKSAhPSBCTE9DS19GT1JfSU5TTiAobmV4dF91c2Vf aW5zbikKKwkJICB8fCAoYXJtX212ZV92ZWNfaW5zbl9pc191bnByZWRpY2F0ZWRfb3JfdXNl c19vdGhlcl9wcmVkaWNhdGUKKwkJICAgICAgIChuZXh0X3VzZV9pbnNuLCB2Y3RwX3Zwcl9n ZW5lcmF0ZWQpCisJCSAgICAgJiYgKGFybV9pc19tdmVfbG9hZF9zdG9yZV9pbnNuIChuZXh0 X3VzZV9pbnNuLCAyKQorCQkJIHx8IGFybV9pc19tdmVfYWNyb3NzX3ZlY3Rvcl9pbnNuIChu ZXh0X3VzZV9pbnNuKSkpKQorCQlyZXR1cm4gdHJ1ZTsKKwkgICAgfQorCX0KKyAgICB9Cisg IHJldHVybiBmYWxzZTsKK30KKworLyogSGVscGVyIGZ1bmN0aW9uIHRvIGBhcm1fbXZlX2Rs c3RwX2NoZWNrX2luY19jb3VudGVyYCBhbmQgdG8KKyAgIGBhcm1fbXZlX2Rsc3RwX2NoZWNr X2RlY19jb3VudGVyYC4gIEluIHRoZSBzaXR1YXRpb25zIHdoZXJlIHRoZSBsb29wIGNvdW50 ZXIKKyAgIGlzIGluY3JlbWVudGluZyBieSAxIG9yIGRlY3JlbWVudGluZyBieSAxIGluIGVh Y2ggaXRlcmF0aW9uLCBlbnN1cmUgdGhhdCB0aGUKKyAgIHRhcmdldCB2YWx1ZSBvciB0aGUg aW5pdGlhbGlzYXRpb24gdmFsdWUsIHJlc3BlY3RpdmVseSwgd2FzIGEgY2FsY3VsYXRpb24K KyAgIG9mIHRoZSBudW1iZXIgb2YgaXRlcmF0aW9ucyBvZiB0aGUgbG9vcCwgd2hpY2ggaXMg ZXhwZWN0ZWQgdG8gYmUgYW4gQVNISUZUUlQKKyAgIGJ5IFZDVFBfU1RFUC4gICovCisKK3N0 YXRpYyBib29sCithcm1fbXZlX2NoZWNrX3JlZ19vcmlnaW5faXNfbnVtX2VsZW1zIChiYXNp Y19ibG9jayBib2R5LCBydHggcmVnLCBydHggdmN0cF9zdGVwKQoreworICAvKiBPaywgd2Ug bm93IGtub3cgdGhlIGxvb3Agc3RhcnRzIGZyb20gemVybyBhbmQgaW5jcmVtZW50cyBieSBv bmUuCisgICAgIE5vdyBqdXN0IHNob3cgdGhhdCB0aGUgbWF4IHZhbHVlIG9mIHRoZSBjb3Vu dGVyIGNhbWUgZnJvbSBhbgorICAgICBhcHByb3ByaWF0ZSBBU0hJRlJUIGV4cHIgb2YgdGhl IGNvcnJlY3QgYW1vdW50LiAgKi8KKyAgYmFzaWNfYmxvY2sgcHJlX2xvb3BfYmIgPSBib2R5 LT5wcmV2X2JiOworICB3aGlsZSAocHJlX2xvb3BfYmIgJiYgQkJfRU5EIChwcmVfbG9vcF9i YikKKwkgJiYgIWRmX2JiX3JlZ25vX29ubHlfZGVmX2ZpbmQgKHByZV9sb29wX2JiLCBSRUdO TyAocmVnKSkpCisgICAgcHJlX2xvb3BfYmIgPSBwcmVfbG9vcF9iYi0+cHJldl9iYjsKKwor ICBkZl9yZWYgY291bnRlcl9tYXhfbGFzdF9kZWYgPSBkZl9iYl9yZWdub19vbmx5X2RlZl9m aW5kIChwcmVfbG9vcF9iYiwgUkVHTk8gKHJlZykpOworICBpZiAoIWNvdW50ZXJfbWF4X2xh c3RfZGVmKQorICAgIHJldHVybiBmYWxzZTsKKyAgcnR4IGNvdW50ZXJfbWF4X2xhc3Rfc2V0 ID0gc2luZ2xlX3NldCAoREZfUkVGX0lOU04gKGNvdW50ZXJfbWF4X2xhc3RfZGVmKSk7Cisg IGlmICghY291bnRlcl9tYXhfbGFzdF9zZXQpCisgICAgcmV0dXJuIGZhbHNlOworCisgIC8q IElmIHdlIGVuY291bnRlciBhIHNpbXBsZSBTRVQgZnJvbSBhIFJFRywgZm9sbG93IGl0IHRo cm91Z2guICAqLworICBpZiAoUkVHX1AgKFNFVF9TUkMgKGNvdW50ZXJfbWF4X2xhc3Rfc2V0 KSkpCisgICAgcmV0dXJuIGFybV9tdmVfY2hlY2tfcmVnX29yaWdpbl9pc19udW1fZWxlbXMK KwkgICAgIChwcmVfbG9vcF9iYi0+bmV4dF9iYiwgU0VUX1NSQyAoY291bnRlcl9tYXhfbGFz dF9zZXQpLCB2Y3RwX3N0ZXApOworCisgIC8qIElmIHdlIGVuY291bnRlciBhIFNFVCBmcm9t IGFuIElGX1RIRU5fRUxTRSB3aGVyZSBvbmUgb2YgdGhlIG9wZXJhbmRzIGlzIGEKKyAgICAg Y29uc3RhbnQgYW5kIHRoZSBvdGhlciBpcyBhIFJFRywgZm9sbG93IHRocm91Z2ggdG8gdGhh dCBSRUcuICAqLworICBpZiAoR0VUX0NPREUgKFNFVF9TUkMgKGNvdW50ZXJfbWF4X2xhc3Rf c2V0KSkgPT0gSUZfVEhFTl9FTFNFCisgICAgICAmJiBSRUdfUCAoWEVYUCAoU0VUX1NSQyAo Y291bnRlcl9tYXhfbGFzdF9zZXQpLCAxKSkKKyAgICAgICYmIENPTlNUX0lOVF9QIChYRVhQ IChTRVRfU1JDIChjb3VudGVyX21heF9sYXN0X3NldCksIDIpKSkKKyAgICByZXR1cm4gYXJt X212ZV9jaGVja19yZWdfb3JpZ2luX2lzX251bV9lbGVtcworCSAgICAgKHByZV9sb29wX2Ji LT5uZXh0X2JiLCBYRVhQIChTRVRfU1JDIChjb3VudGVyX21heF9sYXN0X3NldCksIDEpLCB2 Y3RwX3N0ZXApOworCisgIGlmIChHRVRfQ09ERSAoU0VUX1NSQyAoY291bnRlcl9tYXhfbGFz dF9zZXQpKSA9PSBBU0hJRlRSVAorICAgICAgJiYgQ09OU1RfSU5UX1AgKFhFWFAgKFNFVF9T UkMgKGNvdW50ZXJfbWF4X2xhc3Rfc2V0KSwgMSkpCisgICAgICAmJiAoKDEgPDwgSU5UVkFM IChYRVhQIChTRVRfU1JDIChjb3VudGVyX21heF9sYXN0X3NldCksIDEpKSkKKwkgICA9PSBh YnMgKElOVFZBTCAodmN0cF9zdGVwKSkpKQorICAgIHJldHVybiB0cnVlOworCisgIHJldHVy biBmYWxzZTsKK30KKworLyogSWYgd2UgaGF2ZSBpZGVudGlmaWVkIHRoZSBsb29wIHRvIGhh dmUgYW4gaW5jcmVtZW50aW5nIGNvdW50ZXIsIHdlIG5lZWQgdG8KKyAgIG1ha2Ugc3VyZSB0 aGF0IGl0IGluY3JlbWVudHMgYnkgMSBhbmQgdGhhdCB0aGUgbG9vcCBpcyBzdHJ1Y3R1cmVk IGNvcnJlY3RseToKKyAgICAqIFRoZSBjb3VudGVyIHN0YXJ0cyBmcm9tIDAKKyAgICAqIFRo ZSBjb3VudGVyIHRlcm1pbmF0ZXMgYXQgKG51bV9vZl9lbGVtICsgbnVtX29mX2xhbmVzIC0g MSkgLyBudW1fb2ZfbGFuZXMKKyAgICAqIFRoZSB2Y3RwIGluc24gdXNlcyBhIHJlZyB0aGF0 IGRlY3JlbWVudHMgYXBwcm9wcmlhdGVseSBpbiBlYWNoIGl0ZXJhdGlvbi4KKyovCisKK3N0 YXRpYyBydHhfaW5zbioKK2FybV9tdmVfZGxzdHBfY2hlY2tfaW5jX2NvdW50ZXIgKGJhc2lj X2Jsb2NrIGJvZHksIHJ0eF9pbnNuKiB2Y3RwX2luc24sCisJCQkJIHJ0eCBjb25kY29uc3Qs IHJ0eCBjb25kY291bnQpCit7CisgIHJ0eCB2Y3RwX3JlZyA9IFhWRUNFWFAgKFhFWFAgKFBB VFRFUk4gKHZjdHBfaW5zbiksIDEpLCAwLCAwKTsKKyAgLyogVGhlIGxvb3AgbGF0Y2ggaGFz IHRvIGJlIGVtcHR5LiAgV2hlbiBjb21waWxpbmcgYWxsIHRoZSBrbm93biBNVkUgTG9McyBp bgorICAgICB1c2VyIGFwcGxpY2F0aW9ucywgbm9uZSBvZiB0aG9zZSB3aXRoIGluY3JlbWVu dGluZyBjb3VudGVycyBoYWQgYW55IHJlYWwKKyAgICAgaW5zbnMgaW4gdGhlIGxvb3AgbGF0 Y2guICBBcyBzdWNoLCB0aGlzIGZ1bmN0aW9uIGhhcyBvbmx5IGJlZW4gdGVzdGVkIHdpdGgK KyAgICAgYW4gZW1wdHkgbGF0Y2ggYW5kIG1heSBtaXNiZWhhdmUgb3IgSUNFIGlmIHdlIHNv bWVob3cgZ2V0IGhlcmUgd2l0aCBhbgorICAgICBpbmNyZW1lbnQgaW4gdGhlIGxhdGNoLCBz bywgZm9yIGNvcnJlY3RuZXNzLCBlcnJvciBvdXQgZWFybHkuICAqLworICBpZiAoIWVtcHR5 X2Jsb2NrX3AgKGJvZHktPmxvb3BfZmF0aGVyLT5sYXRjaCkpCisgICAgcmV0dXJuIE5VTEw7 CisKKyAgY2xhc3MgcnR4X2l2IHZjdHBfcmVnX2l2OworICAvKiBGb3IgbG9vcHMgb2YgdHlw ZSBCKSB0aGUgbG9vcCBjb3VudGVyIGlzIGluZGVwZW5kZW50IG9mIHRoZSBkZWNyZW1lbnQK KyAgICAgb2YgdGhlIHJlZyB1c2VkIGluIHRoZSB2Y3RwX2luc24uIFNvIHJ1biBpdiBhbmFs eXNpcyBvbiB0aGF0IHJlZy4gIFRoaXMKKyAgICAgaGFzIHRvIHN1Y2NlZWQgZm9yIHN1Y2gg bG9vcHMgdG8gYmUgc3VwcG9ydGVkLiAgKi8KKyAgaWYgKCFpdl9hbmFseXplICh2Y3RwX2lu c24sIGFzX2E8c2NhbGFyX2ludF9tb2RlPiAoR0VUX01PREUgKHZjdHBfcmVnKSksCisgICAg ICB2Y3RwX3JlZywgJnZjdHBfcmVnX2l2KSkKKyAgICByZXR1cm4gTlVMTDsKKworICAvKiBF eHRyYWN0IHRoZSBkZWNyZW1lbnRudW0gb2YgdGhlIHZjdHAgcmVnIGZyb20gdGhlIGl2LiAg VGhpcyBkZWNyZW1lbnRudW0KKyAgICAgaXMgdGhlIG51bWJlciBvZiBsYW5lcy9lbGVtZW50 cyBpdCBkZWNyZW1lbnRzIGZyb20gdGhlIHJlbWFpbmluZyBudW1iZXIgb2YKKyAgICAgbGFu ZXMvZWxlbWVudHMgdG8gcHJvY2VzcyBpbiB0aGUgbG9vcCwgZm9yIHRoaXMgcmVhc29uIHRo aXMgaXMgYWx3YXlzIGEKKyAgICAgbmVnYXRpdmUgbnVtYmVyLCBidXQgdG8gc2ltcGxpZnkg bGF0ZXIgY2hlY2tzIHdlIHVzZSBpdCdzIGFic29sdXRlIHZhbHVlLiAgKi8KKyAgaW50IGRl Y3JlbWVudG51bSA9IElOVFZBTCAodmN0cF9yZWdfaXYuc3RlcCk7CisgIGlmIChkZWNyZW1l bnRudW0gPj0gMCkKKyAgICByZXR1cm4gTlVMTDsKKyAgZGVjcmVtZW50bnVtID0gYWJzIChk ZWNyZW1lbnRudW0pOworCisgIC8qIEZpbmQgd2hlcmUgYm90aCBvZiB0aG9zZSBhcmUgbW9k aWZpZWQgaW4gdGhlIGxvb3AgYm9keSBiYi4gICovCisgIGRmX3JlZiBjb25kY291bnRfcmVn X3NldF9kZiA9IGRmX2JiX3JlZ25vX29ubHlfZGVmX2ZpbmQgKGJvZHksIFJFR05PIChjb25k Y291bnQpKTsKKyAgZGZfcmVmIHZjdHBfcmVnX3NldF9kZiA9IGRmX2JiX3JlZ25vX29ubHlf ZGVmX2ZpbmQgKGJvZHksIFJFR05PICh2Y3RwX3JlZykpOworICBpZiAoIWNvbmRjb3VudF9y ZWdfc2V0X2RmIHx8ICF2Y3RwX3JlZ19zZXRfZGYpCisgICAgcmV0dXJuIE5VTEw7CisgIHJ0 eCBjb25kY291bnRfcmVnX3NldCA9IHNpbmdsZV9zZXQgKERGX1JFRl9JTlNOIChjb25kY291 bnRfcmVnX3NldF9kZikpOworICBydHggdmN0cF9yZWdfc2V0ID0gc2luZ2xlX3NldCAoREZf UkVGX0lOU04gKHZjdHBfcmVnX3NldF9kZikpOworICBpZiAoIWNvbmRjb3VudF9yZWdfc2V0 IHx8ICF2Y3RwX3JlZ19zZXQpCisgICAgcmV0dXJuIE5VTEw7CisKKyAgLyogRW5zdXJlIHRo ZSBtb2RpZmljYXRpb24gb2YgdGhlIHZjdHAgcmVnIGZyb20gZGYgaXMgY29uc2lzdGVudCB3 aXRoCisgICAgIHRoZSBpdiBhbmQgdGhlIG51bWJlciBvZiBsYW5lcyBvbiB0aGUgdmN0cCBp bnNuLiAgKi8KKyAgaWYgKEdFVF9DT0RFIChTRVRfU1JDICh2Y3RwX3JlZ19zZXQpKSAhPSBQ TFVTCisgICAgICB8fCAhUkVHX1AgKFNFVF9ERVNUICh2Y3RwX3JlZ19zZXQpKQorICAgICAg fHwgIVJFR19QIChYRVhQIChTRVRfU1JDICh2Y3RwX3JlZ19zZXQpLCAwKSkKKyAgICAgIHx8 IFJFR05PIChTRVRfREVTVCAodmN0cF9yZWdfc2V0KSkKKwkgICE9IFJFR05PIChYRVhQIChT RVRfU1JDICh2Y3RwX3JlZ19zZXQpLCAwKSkKKyAgICAgIHx8ICFDT05TVF9JTlRfUCAoWEVY UCAoU0VUX1NSQyAodmN0cF9yZWdfc2V0KSwgMSkpCisgICAgICB8fCBJTlRWQUwgKFhFWFAg KFNFVF9TUkMgKHZjdHBfcmVnX3NldCksIDEpKSA+PSAwCisgICAgICB8fCBkZWNyZW1lbnRu dW0gIT0gYWJzIChJTlRWQUwgKFhFWFAgKFNFVF9TUkMgKHZjdHBfcmVnX3NldCksIDEpKSkK KyAgICAgIHx8IGRlY3JlbWVudG51bSAhPSBhcm1fbXZlX2dldF92Y3RwX2xhbmVzICh2Y3Rw X2luc24pKQorICAgIHJldHVybiBOVUxMOworCisgIGlmIChSRUdfUCAoY29uZGNvdW50KSAm JiBSRUdfUCAoY29uZGNvbnN0KSkKKyAgICB7CisgICAgICAvKiBGaXJzdCB3ZSBuZWVkIHRv IHByb3ZlIHRoYXQgdGhlIGxvb3AgaXMgZ29pbmcgMC4uY29uZGNvbnN0IHdpdGggYW4KKwkg aW5jIG9mIDEgaW4gZWFjaCBpdGVyYXRpb24uICAqLworICAgICAgaWYgKEdFVF9DT0RFIChT RVRfU1JDIChjb25kY291bnRfcmVnX3NldCkpID09IFBMVVMKKwkgICYmIENPTlNUX0lOVF9Q IChYRVhQIChTRVRfU1JDIChjb25kY291bnRfcmVnX3NldCksIDEpKQorCSAgJiYgSU5UVkFM IChYRVhQIChTRVRfU1JDIChjb25kY291bnRfcmVnX3NldCksIDEpKSA9PSAxKQorCXsKKwkg ICAgcnR4IGNvdW50ZXJfcmVnID0gU0VUX0RFU1QgKGNvbmRjb3VudF9yZWdfc2V0KTsKKwkg ICAgLyogQ2hlY2sgdGhhdCB0aGUgY291bnRlciBkaWQgaW5kZWVkIHN0YXJ0IGZyb20gemVy by4gICovCisJICAgIGRmX3JlZiB0aGlzX3NldCA9IERGX1JFR19ERUZfQ0hBSU4gKFJFR05P IChjb3VudGVyX3JlZykpOworCSAgICBpZiAoIXRoaXNfc2V0KQorCSAgICAgIHJldHVybiBO VUxMOworCSAgICBkZl9yZWYgbGFzdF9zZXRfZGVmID0gREZfUkVGX05FWFRfUkVHICh0aGlz X3NldCk7CisJICAgIGlmICghbGFzdF9zZXRfZGVmKQorCSAgICAgIHJldHVybiBOVUxMOwor CSAgICBydHhfaW5zbiogbGFzdF9zZXRfaW5zbiA9IERGX1JFRl9JTlNOIChsYXN0X3NldF9k ZWYpOworCSAgICBydHggbGFzdF9zZXQgPSBzaW5nbGVfc2V0IChsYXN0X3NldF9pbnNuKTsK KwkgICAgaWYgKCFsYXN0X3NldCkKKwkgICAgICByZXR1cm4gTlVMTDsKKwkgICAgcnR4IGNv dW50ZXJfb3JpZ19zZXQ7CisJICAgIGNvdW50ZXJfb3JpZ19zZXQgPSBTRVRfU1JDIChsYXN0 X3NldCk7CisJICAgIGlmICghQ09OU1RfSU5UX1AgKGNvdW50ZXJfb3JpZ19zZXQpCisJCXx8 IChJTlRWQUwgKGNvdW50ZXJfb3JpZ19zZXQpICE9IDApKQorCSAgICAgIHJldHVybiBOVUxM OworCSAgICAvKiBBbmQgZmluYWxseSBjaGVjayB0aGF0IHRoZSB0YXJnZXQgdmFsdWUgb2Yg dGhlIGNvdW50ZXIsCisJICAgICAgIGNvbmRjb25zdCwgaXMgb2YgdGhlIGNvcnJlY3Qgc2hh cGUuICAqLworCSAgICBpZiAoIWFybV9tdmVfY2hlY2tfcmVnX29yaWdpbl9pc19udW1fZWxl bXMgKGJvZHksIGNvbmRjb25zdCwKKwkJCQkJCQl2Y3RwX3JlZ19pdi5zdGVwKSkKKwkgICAg ICByZXR1cm4gTlVMTDsKKwl9CisgICAgICBlbHNlCisJcmV0dXJuIE5VTEw7CisgICAgfQor ICBlbHNlCisgICAgcmV0dXJuIE5VTEw7CisKKyAgLyogRXZlcnl0aGluZyBsb29rcyB2YWxp ZC4gICovCisgIHJldHVybiB2Y3RwX2luc247Cit9CisKKy8qIEhlbHBlciBmdW5jdGlvbiB0 byBgYXJtX212ZV9sb29wX3ZhbGlkX2Zvcl9kbHN0cGAuICBJbiB0aGUgY2FzZSBvZiBhCisg ICBjb3VudGVyIHRoYXQgaXMgZGVjcmVtZW50aW5nLCBlbnN1cmUgdGhhdCBpdCBpcyBkZWNy ZW1lbnRpbmcgYnkgdGhlCisgICByaWdodCBhbW91bnQgaW4gZWFjaCBpdGVyYXRpb24gYW5k IHRoYXQgdGhlIHRhcmdldCBjb25kaXRpb24gaXMgd2hhdAorICAgd2UgZXhwZWN0LiAgKi8K Kworc3RhdGljIHJ0eF9pbnNuKgorYXJtX212ZV9kbHN0cF9jaGVja19kZWNfY291bnRlciAo YmFzaWNfYmxvY2sgYm9keSwgcnR4X2luc24qIHZjdHBfaW5zbiwKKwkJCQkgcnR4IGNvbmRj b25zdCwgcnR4IGNvbmRjb3VudCkKK3sKKyAgcnR4IHZjdHBfcmVnID0gWFZFQ0VYUCAoWEVY UCAoUEFUVEVSTiAodmN0cF9pbnNuKSwgMSksIDAsIDApOworICBjbGFzcyBydHhfaXYgdmN0 cF9yZWdfaXY7CisgIGludCBkZWNyZW1lbnRudW07CisgIC8qIEZvciBkZWNyZW1lbnRpbmcg bG9vcHMgb2YgdHlwZSBBKSwgdGhlIGNvdW50ZXIgaXMgdXN1YWxseSBwcmVzZW50IGluIHRo ZQorICAgICBsb29wIGxhdGNoLiAgSGVyZSB3ZSBzaW1wbHkgbmVlZCB0byB2ZXJpZnkgdGhh dCB0aGlzIGNvdW50ZXIgaXMgdGhlIHNhbWUKKyAgICAgcmVnIHRoYXQgaXMgYWxzbyB1c2Vk IGluIHRoZSB2Y3RwX2luc24gYW5kIHRoYXQgaXQgaXMgbm90IG90aGVyd2lzZQorICAgICBt b2RpZmllZC4gICovCisgIHJ0eF9pbnNuICpkZWNfaW5zbiA9IEJCX0VORCAoYm9keS0+bG9v cF9mYXRoZXItPmxhdGNoKTsKKyAgLyogSWYgbm90IGluIHRoZSBsb29wIGxhdGNoLCB0cnkg dG8gZmluZCB0aGUgZGVjcmVtZW50IGluIHRoZSBsb29wIGJvZHkuICAqLworICBpZiAoIU5P TkRFQlVHX0lOU05fUCAoZGVjX2luc24pKQorICB7CisgICAgZGZfcmVmIHRlbXAgPSBkZl9i Yl9yZWdub19vbmx5X2RlZl9maW5kIChib2R5LCBSRUdOTyAoY29uZGNvdW50KSk7CisgICAg LyogSWYgd2UgaGF2ZW4ndCBiZWVuIGFibGUgdG8gZmluZCB0aGUgZGVjcmVtZW50LCBiYWls IG91dC4gICovCisgICAgaWYgKCF0ZW1wKQorICAgICAgcmV0dXJuIE5VTEw7CisgICAgZGVj X2luc24gPSBERl9SRUZfSU5TTiAodGVtcCk7CisgIH0KKworICBydHggZGVjX3NldCA9IHNp bmdsZV9zZXQgKGRlY19pbnNuKTsKKworICAvKiBOZXh0LCBlbnN1cmUgdGhhdCBpdCBpcyBh IFBMVVMgb2YgdGhlIGZvcm06CisgICAgIChzZXQgKHJlZyBhKSAocGx1cyAocmVnIGEpIChj b25zdF9pbnQpKSkKKyAgICAgd2hlcmUgKHJlZyBhKSBpcyB0aGUgc2FtZSBhcyBjb25kY291 bnQuICAqLworICBpZiAoIWRlY19zZXQKKyAgICAgIHx8ICFSRUdfUCAoU0VUX0RFU1QgKGRl Y19zZXQpKQorICAgICAgfHwgIVJFR19QIChYRVhQIChTRVRfU1JDIChkZWNfc2V0KSwgMCkp CisgICAgICB8fCAhQ09OU1RfSU5UX1AgKFhFWFAgKFNFVF9TUkMgKGRlY19zZXQpLCAxKSkK KyAgICAgIHx8IFJFR05PIChTRVRfREVTVCAoZGVjX3NldCkpCisJICAhPSBSRUdOTyAoWEVY UCAoU0VUX1NSQyAoZGVjX3NldCksIDApKQorICAgICAgfHwgUkVHTk8gKFNFVF9ERVNUIChk ZWNfc2V0KSkgIT0gUkVHTk8gKGNvbmRjb3VudCkpCisgICAgcmV0dXJuIE5VTEw7CisKKyAg ZGVjcmVtZW50bnVtID0gSU5UVkFMIChYRVhQIChTRVRfU1JDIChkZWNfc2V0KSwgMSkpOwor CisgIC8qIFRoaXMgZGVjcmVtZW50bnVtIGlzIHRoZSBudW1iZXIgb2YgbGFuZXMvZWxlbWVu dHMgaXQgZGVjcmVtZW50cyBmcm9tIHRoZQorICAgICByZW1haW5pbmcgbnVtYmVyIG9mIGxh bmVzL2VsZW1lbnRzIHRvIHByb2Nlc3MgaW4gdGhlIGxvb3AsIGZvciB0aGlzIHJlYXNvbgor ICAgICB0aGlzIGlzIGFsd2F5cyBhIG5lZ2F0aXZlIG51bWJlciwgYnV0IHRvIHNpbXBsaWZ5 IGxhdGVyIGNoZWNrcyB3ZSB1c2UgaXQncworICAgICBhYnNvbHV0ZSB2YWx1ZS4gICovCisg IGlmIChkZWNyZW1lbnRudW0gPj0gMCkKKyAgICByZXR1cm4gTlVMTDsKKyAgZGVjcmVtZW50 bnVtID0gYWJzIChkZWNyZW1lbnRudW0pOworCisgIC8qIE9rLCBzbyB3ZSBub3cga25vdyB0 aGUgbG9vcCBkZWNyZW1lbnQuICBJZiBpdCBpcyBhIDEsIHRoZW4gd2UgbmVlZCB0bworICAg ICBsb29rIGF0IHRoZSBsb29wIHZjdHBfcmVnIGFuZCB2ZXJpZnkgdGhhdCBpdCBhbHNvIGRl Y3JlbWVudHMgY29ycmVjdGx5LgorICAgICBUaGVuLCB3ZSBuZWVkIHRvIGVzdGFibGlzaCB0 aGF0IHRoZSBzdGFydGluZyB2YWx1ZSBvZiB0aGUgbG9vcCBkZWNyZW1lbnQKKyAgICAgb3Jp Z2luYXRlcyBmcm9tIHRoZSBzdGFydGluZyB2YWx1ZSBvZiB0aGUgdmN0cCBkZWNyZW1lbnQu ICAqLworICBpZiAoZGVjcmVtZW50bnVtID09IDEpCisgICAgeworICAgICAgY2xhc3MgcnR4 X2l2IHZjdHBfcmVnX2l2OworICAgICAgLyogVGhlIGxvb3AgY291bnRlciBpcyBmb3VuZCB0 byBiZSBpbmRlcGVuZGVudCBvZiB0aGUgZGVjcmVtZW50CisJIG9mIHRoZSByZWcgdXNlZCBp biB0aGUgdmN0cF9pbnNuLCBhZ2Fpbi4gIEVuc3VyZSB0aGF0IElWIGFuYWx5c2lzCisJIHN1 Y2NlZWRzIGFuZCBjaGVjayB0aGUgc3RlcC4gICovCisgICAgICBpZiAoIWl2X2FuYWx5emUg KHZjdHBfaW5zbiwgYXNfYTxzY2FsYXJfaW50X21vZGU+IChHRVRfTU9ERSAodmN0cF9yZWcp KSwKKwkJICAgICAgIHZjdHBfcmVnLCAmdmN0cF9yZWdfaXYpKQorCXJldHVybiBOVUxMOwor ICAgICAgLyogRW5zdXJlIGl0IG1hdGNoZXMgdGhlIG51bWJlciBvZiBsYW5lcyBvZiB0aGUg dmN0cCBpbnN0cnVjdGlvbi4gICovCisgICAgICBpZiAoYWJzIChJTlRWQUwgKHZjdHBfcmVn X2l2LnN0ZXApKQorCSAgIT0gYXJtX212ZV9nZXRfdmN0cF9sYW5lcyAodmN0cF9pbnNuKSkK KwlyZXR1cm4gTlVMTDsKKyAgICAgIGlmICghYXJtX212ZV9jaGVja19yZWdfb3JpZ2luX2lz X251bV9lbGVtcyAoYm9keSwgY29uZGNvdW50LCB2Y3RwX3JlZ19pdi5zdGVwKSkKKwlyZXR1 cm4gTlVMTDsKKyAgICB9CisgIC8qIElmIHRoZSBkZWNyZW1lbnRzIGFyZSB0aGUgc2FtZSwg dGhlbiB0aGUgc2l0dWF0aW9uIGlzIHNpbXBsZTogZWl0aGVyIHRoZXkKKyAgICAgYXJlIGFs c28gdGhlIHNhbWUgcmVnLCB3aGljaCBpcyBzYWZlLCBvciB0aGV5IGFyZSBkaWZmZXJlbnQg cmVnaXN0ZXJzLCBpbgorICAgICB3aGljaCBjYXNlIG1ha3NlIHN1cmUgdGhhdCB0aGVyZSBp cyBhIG9ubHkgc2ltcGxlIFNFVCBmcm9tIG9uZSB0byB0aGUKKyAgICAgb3RoZXIgaW5zaWRl IHRoZSBsb29wLiovCisgIGVsc2UgaWYgKGRlY3JlbWVudG51bSA9PSBhcm1fbXZlX2dldF92 Y3RwX2xhbmVzICh2Y3RwX2luc24pKQorICAgIHsKKyAgICAgIGlmIChSRUdOTyAoY29uZGNv dW50KSAhPSBSRUdOTyAodmN0cF9yZWcpKQorCXsKKwkgIC8qIEl0IHdhc24ndCB0aGUgc2Ft ZSByZWcsIGJ1dCBpdCBjb3VsZCBiZSBiZWhpbGQgYQorCSAgICAgKHNldCAodmN0cF9yZWcp IChjb25kY291bnQpKSwgc28gaW5zdGVhZCBmaW5kIHdoZXJlCisJICAgICB0aGUgVkNUUCBp bnNuIGlzIERFRidkIGluc2lkZSB0aGUgbG9vcC4gICovCisJICBydHhfaW5zbiAqdmN0cF9y ZWdfaW5zbgorCSAgICA9IERGX1JFRl9JTlNOIChkZl9iYl9yZWdub19vbmx5X2RlZl9maW5k IChib2R5LCBSRUdOTyAodmN0cF9yZWcpKSk7CisJICBydHggdmN0cF9yZWdfc2V0ID0gc2lu Z2xlX3NldCAodmN0cF9yZWdfaW5zbik7CisJICAvKiBUaGlzIG11c3QganVzdCBiZSBhIHNp bXBsZSBTRVQgZnJvbSB0aGUgY29uZGNvdW50LiAgKi8KKwkgIGlmICghdmN0cF9yZWdfc2V0 CisJICAgICAgfHwgIVJFR19QIChTRVRfREVTVCAodmN0cF9yZWdfc2V0KSkKKwkgICAgICB8 fCAhUkVHX1AgKFNFVF9TUkMgKHZjdHBfcmVnX3NldCkpCisJICAgICAgfHwgUkVHTk8gKFNF VF9TUkMgKHZjdHBfcmVnX3NldCkpICE9IFJFR05PIChjb25kY291bnQpKQorCSAgICByZXR1 cm4gTlVMTDsKKwl9CisgICAgfQorICBlbHNlCisgICAgcmV0dXJuIE5VTEw7CisKKyAgLyog V2Ugbm93IG9ubHkgbmVlZCB0byBmaW5kIG91dCB0aGF0IHRoZSBsb29wIHRlcm1pbmF0ZXMg d2l0aCBhIExFCisgICAgIHplcm8gY29uZGl0aW9uLiAgSWYgY29uZGNvbnN0IGlzIGEgY29u c3RfaW50LCB0aGVuIHRoaXMgaXMgZWFzeS4KKyAgICAgSWYgaXRzIGEgUkVHLCBsb29rIGF0 IHRoZSBsYXN0IGNvbmRpdGlvbitqdW1wIGluIGEgYmIgYmVmb3JlCisgICAgIHRoZSBsb29w LCBiZWNhdXNlIHRoYXQgdXN1YWxseSB3aWxsIGhhdmUgYSBicmFuY2gganVtcGluZyBvdmVy CisgICAgIHRoZSBsb29wIGJvZHkuICAqLworICBpZiAoQ09OU1RfSU5UX1AgKGNvbmRjb25z dCkKKyAgICAgICYmICEoSU5UVkFMIChjb25kY29uc3QpID09IDAgJiYgSlVNUF9QIChCQl9F TkQgKGJvZHkpKQorCSAgICYmIEdFVF9DT0RFIChYRVhQIChQQVRURVJOIChCQl9FTkQgKGJv ZHkpKSwgMSkpID09IElGX1RIRU5fRUxTRQorCSAgICYmIChHRVRfQ09ERSAoWEVYUCAoWEVY UCAoUEFUVEVSTiAoQkJfRU5EIChib2R5KSksIDEpLCAwKSkgPT0gTkUKKwkgICAgICAgfHxH RVRfQ09ERSAoWEVYUCAoWEVYUCAoUEFUVEVSTiAoQkJfRU5EIChib2R5KSksIDEpLCAwKSkg PT0gR1QpKSkKKyAgICByZXR1cm4gTlVMTDsKKyAgZWxzZSBpZiAoUkVHX1AgKGNvbmRjb25z dCkpCisgICAgeworICAgICAgYmFzaWNfYmxvY2sgcHJlX2xvb3BfYmIgPSBib2R5OworICAg ICAgd2hpbGUgKHByZV9sb29wX2JiLT5wcmV2X2JiICYmIEJCX0VORCAocHJlX2xvb3BfYmIt PnByZXZfYmIpCisJICAgICAmJiAhSlVNUF9QIChCQl9FTkQgKHByZV9sb29wX2JiLT5wcmV2 X2JiKSkpCisJcHJlX2xvb3BfYmIgPSBwcmVfbG9vcF9iYi0+cHJldl9iYjsKKyAgICAgIGlm IChwcmVfbG9vcF9iYiAmJiBCQl9FTkQgKHByZV9sb29wX2JiKSkKKwlwcmVfbG9vcF9iYiA9 IHByZV9sb29wX2JiLT5wcmV2X2JiOworICAgICAgZWxzZQorCXJldHVybiBOVUxMOworICAg ICAgcnR4IGluaXRpYWxfY29tcGFyZSA9IE5VTExfUlRYOworICAgICAgaWYgKCEocHJldl9u b25ub3RlX25vbmRlYnVnX2luc25fYmIgKEJCX0VORCAocHJlX2xvb3BfYmIpKQorCSAgICAm JiBJTlNOX1AgKHByZXZfbm9ubm90ZV9ub25kZWJ1Z19pbnNuX2JiIChCQl9FTkQgKHByZV9s b29wX2JiKSkpKSkKKwlyZXR1cm4gTlVMTDsKKyAgICAgIGVsc2UKKwlpbml0aWFsX2NvbXBh cmUKKwkgICAgPSBzaW5nbGVfc2V0IChwcmV2X25vbm5vdGVfbm9uZGVidWdfaW5zbl9iYiAo QkJfRU5EIChwcmVfbG9vcF9iYikpKTsKKyAgICAgIGlmICghKGluaXRpYWxfY29tcGFyZQor CSAgICAmJiBjY19yZWdpc3RlciAoU0VUX0RFU1QgKGluaXRpYWxfY29tcGFyZSksIFZPSURt b2RlKQorCSAgICAmJiBHRVRfQ09ERSAoU0VUX1NSQyAoaW5pdGlhbF9jb21wYXJlKSkgPT0g Q09NUEFSRQorCSAgICAmJiBDT05TVF9JTlRfUCAoWEVYUCAoU0VUX1NSQyAoaW5pdGlhbF9j b21wYXJlKSwgMSkpCisJICAgICYmIElOVFZBTCAoWEVYUCAoU0VUX1NSQyAoaW5pdGlhbF9j b21wYXJlKSwgMSkpID09IDApKQorCXJldHVybiBOVUxMOworCisgICAgICAvKiBVc3VhbGx5 IHRoaXMgaXMgYSBMRSBjb25kaXRpb24sIGJ1dCBpdCBjYW4gYWxzbyBqdXN0IGJlIGEgR1Qg b3IgYW4gRVEKKwkgY29uZGl0aW9uIChpZiB0aGUgdmFsdWUgaXMgdW5zaWduZWQgb3IgdGhl IGNvbXBpbGVyIGtub3dzIGl0cyBub3QgbmVnYXRpdmUpICAqLworICAgICAgcnR4X2luc24g Kmxvb3BfanVtcG92ZXIgPSBCQl9FTkQgKHByZV9sb29wX2JiKTsKKyAgICAgIGlmICghKEpV TVBfUCAobG9vcF9qdW1wb3ZlcikKKwkgICAgJiYgR0VUX0NPREUgKFhFWFAgKFBBVFRFUk4g KGxvb3BfanVtcG92ZXIpLCAxKSkgPT0gSUZfVEhFTl9FTFNFCisJICAgICYmIChHRVRfQ09E RSAoWEVYUCAoWEVYUCAoUEFUVEVSTiAobG9vcF9qdW1wb3ZlciksIDEpLCAwKSkgPT0gTEUK KwkJfHwgR0VUX0NPREUgKFhFWFAgKFhFWFAgKFBBVFRFUk4gKGxvb3BfanVtcG92ZXIpLCAx KSwgMCkpID09IEdUCisJCXx8IEdFVF9DT0RFIChYRVhQIChYRVhQIChQQVRURVJOIChsb29w X2p1bXBvdmVyKSwgMSksIDApKSA9PSBFUSkpKQorCXJldHVybiBOVUxMOworICAgIH0KKwor ICAvKiBFdmVyeXRoaW5nIGxvb2tzIHZhbGlkLiAgKi8KKyAgcmV0dXJuIHZjdHBfaW5zbjsK K30KKworLyogRnVuY3Rpb24gdG8gY2hlY2sgYSBsb29wJ3Mgc3RydWN0dXJlIHRvIHNlZSBp ZiBpdCBpcyBhIHZhbGlkIGNhbmRpZGF0ZSBmb3IKKyAgIGFuIE1WRSBUYWlsIFByZWRpY2F0 ZWQgTG93LU92ZXJoZWFkIExvb3AuICBSZXR1cm5zIHRoZSBsb29wJ3MgVkNUUF9JTlNOIGlm CisgICBpdCBpcyB2YWxpZCwgb3IgTlVMTCBpZiBpdCBpc24ndC4gICovCisKK3N0YXRpYyBy dHhfaW5zbioKK2FybV9tdmVfbG9vcF92YWxpZF9mb3JfZGxzdHAgKGJhc2ljX2Jsb2NrIGJv ZHkpCit7CisgIC8qIERvbG9vcCBjYW4gb25seSBiZSBkb25lICJlbGVtZW50d2lzZSIgd2l0 aCBwcmVkaWNhdGVkIGRsc3RwL2xldHAgaWYgaXQKKyAgICAgY29udGFpbnMgYSBWQ1RQIG9u IHRoZSBudW1iZXIgb2YgZWxlbWVudHMgcHJvY2Vzc2VkIGJ5IHRoZSBsb29wLgorICAgICBG aW5kIHRoZSBWQ1RQIHByZWRpY2F0ZSBnZW5lcmF0aW9uIGluc2lkZSB0aGUgbG9vcCBib2R5 IEJCLiAgKi8KKyAgcnR4X2luc24gKnZjdHBfaW5zbiA9IGFybV9tdmVfZ2V0X2xvb3BfdmN0 cCAoYm9keSk7CisgIGlmICghdmN0cF9pbnNuKQorICAgIHJldHVybiBOVUxMOworCisgIC8q IFRoZXJlIGFyZSBvbmx5IHR3byB0eXBlcyBvZiBsb29wcyB0aGF0IGNhbiBiZSB0dXJuZWQg aW50byBkbHN0cC9sZXRwCisgICAgIGxvb3BzOgorICAgICAgQSkgTG9vcHMgb2YgdGhlIGZv cm06CisJICB3aGlsZSAobnVtX29mX2VsZW0gPiAwKQorCSAgICB7CisJICAgICAgcCA9IHZj dHA8c2l6ZT4gKG51bV9vZl9lbGVtKQorCSAgICAgIG4gLT0gbnVtX29mX2xhbmVzOworCSAg ICB9CisgICAgICBCKSBMb29wcyBvZiB0aGUgZm9ybToKKwkgIGludCBudW1fb2ZfaXRlcnMg PSAobnVtX29mX2VsZW0gKyBudW1fb2ZfbGFuZXMgLSAxKSAvIG51bV9vZl9sYW5lcworCSAg Zm9yIChpID0gMDsgaSA8IG51bV9vZl9pdGVyczsgaSsrKQorCSAgICB7CisJICAgICAgcCA9 IHZjdHA8c2l6ZT4gKG51bV9vZl9lbGVtKQorCSAgICAgIG4gLT0gbnVtX29mX2xhbmVzOwor CSAgICB9CisKKyAgICBUaGVuLCBkZXBlbmRpbmcgb24gdGhlIHR5cGUgb2YgbG9vcCBhYm92 ZSB3ZSBuZWVkIHdpbGwgbmVlZCB0byBkbworICAgIGRpZmZlcmVudCBzZXRzIG9mIGNoZWNr cy4gICovCisgIGl2X2FuYWx5c2lzX2xvb3BfaW5pdCAoYm9keS0+bG9vcF9mYXRoZXIpOwor CisgIC8qIEluIG9yZGVyIHRvIGZpbmQgb3V0IGlmIHRoZSBsb29wIGlzIG9mIHR5cGUgQSBv ciBCIGFib3ZlIGxvb2sgZm9yIHRoZQorICAgICBsb29wIGNvdW50ZXI6IGl0IHdpbGwgZWl0 aGVyIGJlIGluY3JlbWVudGluZyBieSBvbmUgcGVyIGl0ZXJhdGlvbiBvcgorICAgICBpdCB3 aWxsIGJlIGRlY3JlbWVudGluZyBieSBudW1fb2ZfbGFuZXMuICBXZSBjYW4gZmluZCB0aGUg bG9vcCBjb3VudGVyCisgICAgIGluIHRoZSBjb25kaXRpb24gYXQgdGhlIGVuZCBvZiB0aGUg bG9vcC4gICovCisgIHJ0eF9pbnNuICpsb29wX2NvbmQgPSBwcmV2X25vbm5vdGVfbm9uZGVi dWdfaW5zbl9iYiAoQkJfRU5EIChib2R5KSk7CisgIGlmICghKGNjX3JlZ2lzdGVyIChYRVhQ IChQQVRURVJOIChsb29wX2NvbmQpLCAwKSwgVk9JRG1vZGUpCisJJiYgR0VUX0NPREUgKFhF WFAgKFBBVFRFUk4gKGxvb3BfY29uZCksIDEpKSA9PSBDT01QQVJFKSkKKyAgICByZXR1cm4g TlVMTDsKKworICAvKiBUaGUgb3BlcmFuZHMgaW4gdGhlIGNvbmRpdGlvbjogIFRyeSB0byBp ZGVudGlmeSB3aGljaCBvbmUgaXMgdGhlCisgICAgIGNvbnN0YW50IGFuZCB3aGljaCBpcyB0 aGUgY291bnRlciBhbmQgcnVuIElWIGFuYWx5c2lzIG9uIHRoZSBsYXR0ZXIuICAqLworICBy dHggY29uZF9hcmdfMSA9IFhFWFAgKFhFWFAgKFBBVFRFUk4gKGxvb3BfY29uZCksIDEpLCAw KTsKKyAgcnR4IGNvbmRfYXJnXzIgPSBYRVhQIChYRVhQIChQQVRURVJOIChsb29wX2NvbmQp LCAxKSwgMSk7CisKKyAgcnR4IGxvb3BfY29uZF9jb25zdGFudDsKKyAgcnR4IGxvb3BfY291 bnRlcjsKKyAgY2xhc3MgcnR4X2l2IGNvbmRfY291bnRlcl9pdiwgY29uZF90ZW1wX2l2Owor CisgIGlmIChDT05TVF9JTlRfUCAoY29uZF9hcmdfMSkpCisgICAgeworICAgICAgLyogY29u ZF9hcmdfMSBpcyB0aGUgY29uc3RhbnQgYW5kIGNvbmRfYXJnXzIgaXMgdGhlIGNvdW50ZXIu ICAqLworICAgICAgbG9vcF9jb25kX2NvbnN0YW50ID0gY29uZF9hcmdfMTsKKyAgICAgIGxv b3BfY291bnRlciA9IGNvbmRfYXJnXzI7CisgICAgICBpdl9hbmFseXplIChsb29wX2NvbmQs IGFzX2E8c2NhbGFyX2ludF9tb2RlPiAoR0VUX01PREUgKGNvbmRfYXJnXzIpKSwKKwkJICBj b25kX2FyZ18yLCAmY29uZF9jb3VudGVyX2l2KTsKKyAgICB9CisgIGVsc2UgaWYgKENPTlNU X0lOVF9QIChjb25kX2FyZ18yKSkKKyAgICB7CisgICAgICAvKiBjb25kX2FyZ18yIGlzIHRo ZSBjb25zdGFudCBhbmQgY29uZF9hcmdfMSBpcyB0aGUgY291bnRlci4gICovCisgICAgICBs b29wX2NvbmRfY29uc3RhbnQgPSBjb25kX2FyZ18yOworICAgICAgbG9vcF9jb3VudGVyID0g Y29uZF9hcmdfMTsKKyAgICAgIGl2X2FuYWx5emUgKGxvb3BfY29uZCwgYXNfYTxzY2FsYXJf aW50X21vZGU+IChHRVRfTU9ERSAoY29uZF9hcmdfMSkpLAorCQkgIGNvbmRfYXJnXzEsICZj b25kX2NvdW50ZXJfaXYpOworICAgIH0KKyAgZWxzZSBpZiAoUkVHX1AgKGNvbmRfYXJnXzEp ICYmIFJFR19QIChjb25kX2FyZ18yKSkKKyAgICB7CisgICAgICAvKiBJZiBib3RoIG9wZXJh bmRzIHRvIHRoZSBjb21wYXJlIGFyZSBSRUdzLCB3ZSBjYW4gc2FmZWx5CisJIHJ1biBJViBh bmFseXNpcyBvbiBib3RoIGFuZCB0aGVuIGRldGVybWluZSB3aGljaCBpcyB0aGUKKwkgY29u c3RhbnQgYnkgbG9va2luZyBhdCB0aGUgc3RlcC4KKwkgRmlyc3QgYXNzdW1lIGNvbmRfYXJn XzEgaXMgdGhlIGNvdW50ZXIuICAqLworICAgICAgbG9vcF9jb3VudGVyID0gY29uZF9hcmdf MTsKKyAgICAgIGxvb3BfY29uZF9jb25zdGFudCA9IGNvbmRfYXJnXzI7CisgICAgICBpdl9h bmFseXplIChsb29wX2NvbmQsIGFzX2E8c2NhbGFyX2ludF9tb2RlPiAoR0VUX01PREUgKGNv bmRfYXJnXzEpKSwKKwkJICBjb25kX2FyZ18xLCAmY29uZF9jb3VudGVyX2l2KTsKKyAgICAg IGl2X2FuYWx5emUgKGxvb3BfY29uZCwgYXNfYTxzY2FsYXJfaW50X21vZGU+IChHRVRfTU9E RSAoY29uZF9hcmdfMikpLAorCQkgIGNvbmRfYXJnXzIsICZjb25kX3RlbXBfaXYpOworCisg ICAgICAvKiBMb29rIGF0IHRoZSBzdGVwcyBhbmQgc3dhcCBhcm91bmQgdGhlIHJ0eCdzIGlm IG5lZWRlZC4gIEVycm9yIG91dCBpZgorCSBvbmUgb2YgdGhlbSBjYW5ub3QgYmUgaWRlbnRp ZmllZCBhcyBjb25zdGFudC4gICovCisgICAgICBpZiAoIUNPTlNUX0lOVF9QIChjb25kX2Nv dW50ZXJfaXYuc3RlcCkgfHwgIUNPTlNUX0lOVF9QIChjb25kX3RlbXBfaXYuc3RlcCkpCisJ cmV0dXJuIE5VTEw7CisgICAgICBpZiAoSU5UVkFMIChjb25kX2NvdW50ZXJfaXYuc3RlcCkg IT0gMCAmJiBJTlRWQUwgKGNvbmRfdGVtcF9pdi5zdGVwKSAhPSAwKQorCXJldHVybiBOVUxM OworICAgICAgaWYgKElOVFZBTCAoY29uZF9jb3VudGVyX2l2LnN0ZXApID09IDAgJiYgSU5U VkFMIChjb25kX3RlbXBfaXYuc3RlcCkgIT0gMCkKKwl7CisJICBsb29wX2NvdW50ZXIgPSBj b25kX2FyZ18yOworCSAgbG9vcF9jb25kX2NvbnN0YW50ID0gY29uZF9hcmdfMTsKKwkgIGNv bmRfY291bnRlcl9pdiA9IGNvbmRfdGVtcF9pdjsKKwl9CisgICAgfQorICBlbHNlCisgICAg cmV0dXJuIE5VTEw7CisKKyAgaWYgKCFSRUdfUCAobG9vcF9jb3VudGVyKSkKKyAgICByZXR1 cm4gTlVMTDsKKyAgaWYgKCEoUkVHX1AgKGxvb3BfY29uZF9jb25zdGFudCkgfHwgQ09OU1Rf SU5UX1AgKGxvb3BfY29uZF9jb25zdGFudCkpKQorICAgIHJldHVybiBOVUxMOworCisgIC8q IE5vdyB3ZSBoYXZlIGV4dHJhY3RlZCB0aGUgSVYgc3RlcCBvZiB0aGUgbG9vcCBjb3VudGVy LCBjYWxsIHRoZQorICAgICBhcHByb3ByaWF0ZSBjaGVja2luZyBmdW5jdGlvbi4gICovCisg IGlmIChJTlRWQUwgKGNvbmRfY291bnRlcl9pdi5zdGVwKSA+IDApCisgICAgcmV0dXJuIGFy bV9tdmVfZGxzdHBfY2hlY2tfaW5jX2NvdW50ZXIgKGJvZHksIHZjdHBfaW5zbiwKKwkJCQkJ ICAgIGxvb3BfY29uZF9jb25zdGFudCwgbG9vcF9jb3VudGVyKTsKKyAgZWxzZSBpZiAoSU5U VkFMIChjb25kX2NvdW50ZXJfaXYuc3RlcCkgPCAwKQorICAgIHJldHVybiBhcm1fbXZlX2Rs c3RwX2NoZWNrX2RlY19jb3VudGVyIChib2R5LCB2Y3RwX2luc24sCisJCQkJCSAgICBsb29w X2NvbmRfY29uc3RhbnQsIGxvb3BfY291bnRlcik7CisgIGVsc2UKKyAgICByZXR1cm4gTlVM TDsKK30KKworLyogUHJlZGljdCB3aGV0aGVyIHRoZSBnaXZlbiBsb29wIGluIGdpbXBsZSB3 aWxsIGJlIHRyYW5zZm9ybWVkIGluIHRoZSBSVEwKKyAgIGRvbG9vcF9vcHRpbWl6ZSBwYXNz LiAgSXQgY291bGQgYmUgYXJndWVkIHRoYXQgdHVybmluZyBsYXJnZSBlbm91Z2ggbG9vcHMK KyAgIGludG8gbG93LW92ZXJoZWFkIGxvb3BzIHdvdWxkIG5vdCBzaG93IGEgc2lnbmZpY2Fu dCBwZXJmb3JtYW5jZSBib29zdC4KKyAgIEhvd2VlciwgaW4gdGhlIGNhc2Ugb2YgdGFpbCBw cmVkaWNhdGlvbiB3ZSB3b3VsZCBzdGlsbCBhdm9pZCB1c2luZyBWUFQvVlBTVAorICAgaW5z dHJ1Y3Rpb25zIGluc2lkZSB0aGUgbG9vcCwgYW5kIGluIGVpdGhlciBjYXNlIHVzaW5nIGxv dy1vdmVyaGVhZCBsb29wcworICAgd291bGQgbm90IGJlIGRldHJpbWVudGFsLCBzbyB3ZSBk ZWNpZGVkIHRvIG5vdCBjb25zaWRlciBzaXplLCBhdm9pZGluZyB0aGUKKyAgIG5lZWQgb2Yg YSBoZXVyaXN0aWMgdG8gZGV0ZXJtaW5lIHdoYXQgYW4gYXBwcm9wcmlhdGUgc2l6ZSBib3Vu ZGFyeSBpcy4gICovCisKK3N0YXRpYyBib29sCithcm1fcHJlZGljdF9kb2xvb3BfcCAoc3Ry dWN0IGxvb3AgKmxvb3ApCit7CisgIGdjY19hc3NlcnQgKGxvb3ApOworICAvKiBPbiBhcm0s IHRhcmdldG0uY2FuX3VzZV9kb2xvb3BfcCBpcyBhY3R1YWxseQorICAgICBjYW5fdXNlX2Rv bG9vcF9pZl9pbm5lcm1vc3QuICBFbnN1cmUgdGhlIGxvb3AgaXMgaW5uZXJtb3N0LAorICAg ICBpdCBpcyB2YWxpZCBhbmQgYXMgcGVyIGFybV90YXJnZXRfYmJfb2tfZm9yX2xvYiBhbmQg dGhlCisgICAgIGNvcnJlY3QgYXJjaGl0ZWN0dXJlIGZsYWdzIGFyZSBlbmFibGVkLiAgKi8K KyAgaWYgKCEoVEFSR0VUX0hBVkVfTE9CICYmIG9wdGltaXplID4gMCkpCisgICAgeworICAg ICAgaWYgKGR1bXBfZmlsZSAmJiAoZHVtcF9mbGFncyAmIFRERl9ERVRBSUxTKSkKKwlmcHJp bnRmIChkdW1wX2ZpbGUsICJQcmVkaWN0IGRvbG9vcCBmYWlsdXJlIGR1ZSB0byIKKwkJCSAg ICAiIHRhcmdldCBhcmNoaXRlY3R1cmUgb3Igb3B0aW1pc2F0aW9uIGZsYWdzLlxuIik7Cisg ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICBlbHNlIGlmIChsb29wLT5pbm5lciAhPSBO VUxMKQorICAgIHsKKyAgICAgIGlmIChkdW1wX2ZpbGUgJiYgKGR1bXBfZmxhZ3MgJiBUREZf REVUQUlMUykpCisJZnByaW50ZiAoZHVtcF9maWxlLCAiUHJlZGljdCBkb2xvb3AgZmFpbHVy ZSBkdWUgdG8iCisJCQkgICAgIiBsb29wIG5lc3RpbmcuXG4iKTsKKyAgICAgIHJldHVybiBm YWxzZTsKKyAgICB9CisgIGVsc2UgaWYgKCFhcm1fdGFyZ2V0X2JiX29rX2Zvcl9sb2IgKGxv b3AtPmhlYWRlci0+bmV4dF9iYikpCisgICAgeworICAgICAgaWYgKGR1bXBfZmlsZSAmJiAo ZHVtcF9mbGFncyAmIFRERl9ERVRBSUxTKSkKKwlmcHJpbnRmIChkdW1wX2ZpbGUsICJQcmVk aWN0IGRvbG9vcCBmYWlsdXJlIGR1ZSB0byIKKwkJCSAgICAiIGxvb3AgYmIgY29tcGxleGl0 eS5cbiIpOworICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICByZXR1cm4gdHJ1ZTsK K30KKworLyogSW1wbGVtZW50IHRhcmdldG0ubG9vcF91bnJvbGxfYWRqdXN0LiAgVXNlIHRo aXMgdG8gYmxvY2sgdW5yb2xsaW5nIG9mIGxvb3BzCisgICB0aGF0IG1heSBsYXRlciBiZSB0 dXJuZWQgaW50byBNVkUgVGFpbCBQcmVkaWNhdGVkIExvdyBPdmVyaGVhZCBMb29wcy4gIFRo ZQorICAgcGVyZm9ybWFuY2UgYmVuZWZpdCBvZiBhbiBNVkUgTG9MIGlzIGxpa2VseSB0byBi ZSBtdWNoIGhpZ2hlciB0aGFuIHRoYXQgb2YKKyAgIHRoZSB1bnJvbGxpbmcuICAqLworCit1 bnNpZ25lZAorYXJtX2xvb3BfdW5yb2xsX2FkanVzdCAodW5zaWduZWQgbnVucm9sbCwgc3Ry dWN0IGxvb3AgKmxvb3ApCit7CisgIGlmIChUQVJHRVRfSEFWRV9NVkUKKyAgICAgICYmIGFy bV90YXJnZXRfYmJfb2tfZm9yX2xvYiAobG9vcC0+bGF0Y2gpCisgICAgICAmJiBhcm1fbXZl X2xvb3BfdmFsaWRfZm9yX2Rsc3RwIChsb29wLT5oZWFkZXIpKQorICAgIHJldHVybiAwOwor ICBlbHNlCisgICAgcmV0dXJuIG51bnJvbGw7Cit9CisKKy8qIEZ1bmN0aW9uIHRvIGhhZGxl IGVtaXR0aW5nIGEgVlBULXVucHJlZGljYXRlZCB2ZXJzaW9uIG9mIGEgVlBULXByZWRpY2F0 ZWQKKyAgIGluc24gdG8gYSBzZXF1ZW5jZS4gICovCisKK3N0YXRpYyBib29sCithcm1fZW1p dF9tdmVfdW5wcmVkaWNhdGVkX2luc25fdG9fc2VxIChydHhfaW5zbiogaW5zbikKK3sKKyAg cnR4IGluc25fdnByX3JlZ19vcGVyYW5kID0gYXJtX2dldF9yZXF1aXJlZF92cHJfcmVnX3Bh cmFtIChpbnNuKTsKKyAgaW50IG5ld19pY29kZSA9IGdldF9hdHRyX212ZV91bnByZWRpY2F0 ZWRfaW5zbiAoaW5zbik7CisgIGlmICghaW5fc2VxdWVuY2VfcCAoKQorICAgICAgfHwgIU1W RV9WUFRfUFJFRElDQVRFRF9JTlNOX1AgKGluc24pCisgICAgICB8fCAoIWluc25fdnByX3Jl Z19vcGVyYW5kKQorICAgICAgfHwgKCFuZXdfaWNvZGUpKQorICAgIHJldHVybiBmYWxzZTsK KworICBleHRyYWN0X2luc24gKGluc24pOworICBydHggYXJyWzhdOworICBpbnQgaiA9IDA7 CisKKyAgLyogV2hlbiB0cmFuc2Zvcm1pbmcgYSBWUFQtcHJlZGljYXRlZCBpbnN0cnVjdGlv bgorICAgICBpbnRvIGl0cyB1bnByZWRpY2F0ZWQgZXF1aXZhbGVudCB3ZSBuZWVkIHRvIGRy b3AKKyAgICAgdGhlIFZQUiBvcGVyYW5kIGFuZCB3ZSBtYXkgbmVlZCB0byBhbHNvIGRyb3Ag YQorICAgICBtZXJnZSAidnVuaW5pdCIgaW5wdXQgb3BlcmFuZCwgZGVwZW5kaW5nIG9uIHRo ZQorICAgICBpbnN0cnVjdGlvbiBwYXR0ZXJuLiAgSGVyZSBlbnN1cmUgdGhhdCB3ZSBoYXZl IGF0CisgICAgIG1vc3QgYSB0d28tb3BlcmFuZCBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIHR3 bworICAgICBpbnN0cnVuY3Rpb25zLiAgKi8KKyAgaW50IG5fb3BlcmFuZHNfZGlmZgorICAg ICAgPSByZWNvZ19kYXRhLm5fb3BlcmFuZHMgLSBpbnNuX2RhdGFbbmV3X2ljb2RlXS5uX29w ZXJhbmRzOworICBpZiAoIShuX29wZXJhbmRzX2RpZmYgPiAwICYmIG5fb3BlcmFuZHNfZGlm ZiA8PSAyKSkKKyAgICByZXR1cm4gZmFsc2U7CisKKyAgLyogVGhlbiwgbG9vcCB0aHJvdWdo IHRoZSBvcGVyYW5kcyBvZiB0aGUgcHJlZGljYXRlZAorICAgICBpbnN0cnVjdGlvbiwgYW5k IHJldGFpbiB0aGUgb25lcyB0aGF0IG1hcCB0byB0aGUKKyAgICAgdW5wcmVkaWNhdGVkIGlu c3RydWN0aW9uLiAgKi8KKyAgZm9yIChpbnQgaSA9IDA7IGkgPCByZWNvZ19kYXRhLm5fb3Bl cmFuZHM7IGkrKykKKyAgICB7CisgICAgICAvKiBJZ25vcmUgdGhlIFZQUiBhbmQsIGlmIG5l ZWRlZCwgdGhlIHZ1bmluaXQKKwkgb3BlcmFuZC4gICovCisgICAgICBpZiAoaW5zbl92cHJf cmVnX29wZXJhbmQgPT0gcmVjb2dfZGF0YS5vcGVyYW5kW2ldCisJICB8fCAobl9vcGVyYW5k c19kaWZmID09IDIKKwkgICAgICAmJiAhc3RyY21wIChyZWNvZ19kYXRhLmNvbnN0cmFpbnRz W2ldLCAiMCIpKSkKKwljb250aW51ZTsKKyAgICAgIGVsc2UKKwl7CisJICBhcnJbal0gPSBy ZWNvZ19kYXRhLm9wZXJhbmRbaV07CisJICBqKys7CisJfQorICAgIH0KKworICAvKiBGaW5h bGx5LCBlbWl0IHRoZSB1cHJlZGljYXRlZCBpbnN0cnVjdGlvbi4gICovCisgIHJ0eF9pbnNu ICpuZXdfaW5zbjsKKyAgc3dpdGNoIChqKQorICAgIHsKKyAgICAgIGNhc2UgMToKKwluZXdf aW5zbiA9IGVtaXRfaW5zbiAoR0VOX0ZDTiAobmV3X2ljb2RlKSAoYXJyWzBdKSk7CisJYnJl YWs7CisgICAgICBjYXNlIDI6CisJbmV3X2luc24gPSBlbWl0X2luc24gKEdFTl9GQ04gKG5l d19pY29kZSkgKGFyclswXSwgYXJyWzFdKSk7CisJYnJlYWs7CisgICAgICBjYXNlIDM6CisJ bmV3X2luc24gPSBlbWl0X2luc24gKEdFTl9GQ04gKG5ld19pY29kZSkgKGFyclswXSwgYXJy WzFdLCBhcnJbMl0pKTsKKwlicmVhazsKKyAgICAgIGNhc2UgNDoKKwluZXdfaW5zbiA9IGVt aXRfaW5zbiAoR0VOX0ZDTiAobmV3X2ljb2RlKSAoYXJyWzBdLCBhcnJbMV0sIGFyclsyXSwK KwkJCQkJCSAgIGFyclszXSkpOworCWJyZWFrOworICAgICAgY2FzZSA1OgorCW5ld19pbnNu ID0gZW1pdF9pbnNuIChHRU5fRkNOIChuZXdfaWNvZGUpIChhcnJbMF0sIGFyclsxXSwgYXJy WzJdLAorCQkJCQkJICAgYXJyWzNdLCBhcnJbNF0pKTsKKwlicmVhazsKKyAgICAgIGNhc2Ug NjoKKwluZXdfaW5zbiA9IGVtaXRfaW5zbiAoR0VOX0ZDTiAobmV3X2ljb2RlKSAoYXJyWzBd LCBhcnJbMV0sIGFyclsyXSwKKwkJCQkJCSAgIGFyclszXSwgYXJyWzRdLCBhcnJbNV0pKTsK KwlicmVhazsKKyAgICAgIGNhc2UgNzoKKwluZXdfaW5zbiA9IGVtaXRfaW5zbiAoR0VOX0ZD TiAobmV3X2ljb2RlKSAoYXJyWzBdLCBhcnJbMV0sIGFyclsyXSwKKwkJCQkJCSAgIGFyclsz XSwgYXJyWzRdLCBhcnJbNV0sCisJCQkJCQkgICBhcnJbNl0pKTsKKwlicmVhazsKKyAgICAg IGRlZmF1bHQ6CisJZ2NjX3VucmVhY2hhYmxlICgpOworICAgIH0KKyAgSU5TTl9MT0NBVElP TiAobmV3X2luc24pID0gSU5TTl9MT0NBVElPTiAoaW5zbik7CisgIHJldHVybiB0cnVlOwor fQorCisvKiBXaGVuIGEgdmN0cCBpbnNuIGlzIHVzZWQsIGl0cyBvdXQgaXMgb2Z0ZW4gZm9s bG93ZWQgYnkKKyAgIGEgemVyby1leHRlbmQgaW5zbiB0byBTSW1vZGUsIHdoaWNoIGlzIHRo ZW4gU1VCUkVHJ2QgaW50byBhCisgICB2ZWN0b3IgZm9ybSBvZiBtb2RlIFZBTElEX01WRV9Q UkVEX01PREU6IHRoaXMgdmVjdG9yIGZvcm0gaXMKKyAgIHdoYXQgaXMgdGhlbiB1c2VkIGFz IGFuIGlucHV0IHRvIHRoZSBpbnN0cnVjdGlvbnMgd2l0aGluIHRoZQorICAgbG9vcC4gIEhl bmNlLCBzdG9yZSB0aGF0IHZlY3RvciBmb3JtIG9mIHRoZSBWUFIgcmVnIGludG8KKyAgIHZj dHBfdnByX2dlbmVyYXRlZCwgc28gdGhhdCB3ZSBjYW4gbWF0Y2ggaXQgd2l0aCBpbnN0cnVj dGlvbnMKKyAgIGluIHRoZSBsb29wIHRvIGRldGVybWluZSBpZiB0aGV5IGFyZSBwcmVkaWNh dGVkIG9uIHRoaXMgc2FtZQorICAgVlBSLiAgSWYgdGhlcmUgaXMgbm8gemVyby1leHRlbmQg YW5kIHN1YnJlZyBvciBpdCBpcyBvdGhlcndpc2UKKyAgIGludmFsaWQsIHRoZW4gcmV0dXJu IE5VTEwgdG8gY2FuY2VsIHRoZSBkbHN0cCB0cmFuc2Zvcm0uICAqLworCitzdGF0aWMgcnR4 Cithcm1fbXZlX2dldF92Y3RwX3ZlY19mb3JtIChydHhfaW5zbiAqaW5zbikKK3sKKyAgcnR4 IHZjdHBfdnByX2dlbmVyYXRlZCA9IE5VTExfUlRYOworICBydHhfaW5zbiAqbmV4dF91c2Ux ID0gTlVMTDsKKyAgZGZfcmVmIHVzZTsKKyAgZm9yICh1c2UKKwk9IERGX1JFR19VU0VfQ0hB SU4KKwkgICAoREZfUkVGX1JFR05PIChERl9JTlNOX0lORk9fREVGUyAoREZfSU5TTl9JTkZP X0dFVCAoaW5zbikpKSk7CisgICAgICAgdXNlOyB1c2UgPSBERl9SRUZfTkVYVF9SRUcgKHVz ZSkpCisgICAgaWYgKCFuZXh0X3VzZTEgJiYgTk9OREVCVUdfSU5TTl9QIChERl9SRUZfSU5T TiAodXNlKSkpCisgICAgICBuZXh0X3VzZTEgPSBERl9SRUZfSU5TTiAodXNlKTsKKworICBy dHggbmV4dF91c2UxX3NldCA9IHNpbmdsZV9zZXQgKG5leHRfdXNlMSk7CisgIGlmIChuZXh0 X3VzZTFfc2V0CisgICAgICAmJiBHRVRfQ09ERSAoU0VUX1NSQyAobmV4dF91c2UxX3NldCkp ID09IFpFUk9fRVhURU5EKQorICAgIHsKKyAgICAgIHJ0eF9pbnNuICpuZXh0X3VzZTIgPSBO VUxMOworICAgICAgZm9yICh1c2UKKwkgICAgPSBERl9SRUdfVVNFX0NIQUlOCisJICAgICAg IChERl9SRUZfUkVHTk8KKwkJIChERl9JTlNOX0lORk9fREVGUyAoREZfSU5TTl9JTkZPX0dF VCAobmV4dF91c2UxKSkpKTsKKwkgICB1c2U7IHVzZSA9IERGX1JFRl9ORVhUX1JFRyAodXNl KSkKKwlpZiAoIW5leHRfdXNlMiAmJiBOT05ERUJVR19JTlNOX1AgKERGX1JFRl9JTlNOICh1 c2UpKSkKKwkgIG5leHRfdXNlMiA9IERGX1JFRl9JTlNOICh1c2UpOworCisgICAgICBydHgg bmV4dF91c2UyX3NldCA9IHNpbmdsZV9zZXQgKG5leHRfdXNlMik7CisgICAgICBpZiAobmV4 dF91c2UyX3NldAorCSAgJiYgR0VUX0NPREUgKFNFVF9TUkMgKG5leHRfdXNlMl9zZXQpKSA9 PSBTVUJSRUcpCisJdmN0cF92cHJfZ2VuZXJhdGVkID0gU0VUX0RFU1QgKG5leHRfdXNlMl9z ZXQpOworICAgIH0KKworICBpZiAoIXZjdHBfdnByX2dlbmVyYXRlZCB8fCAhUkVHX1AgKHZj dHBfdnByX2dlbmVyYXRlZCkKKyAgICAgIHx8ICFWQUxJRF9NVkVfUFJFRF9NT0RFIChHRVRf TU9ERSAodmN0cF92cHJfZ2VuZXJhdGVkKSkpCisgICAgcmV0dXJuIE5VTExfUlRYOworCisg IHJldHVybiB2Y3RwX3Zwcl9nZW5lcmF0ZWQ7Cit9CisKKy8qIEF0dGVtcHQgdG8gdHJhbnNm b3JtIHRoZSBsb29wIGNvbnRlbnRzIG9mIGxvb3AgYmFzaWMgYmxvY2sgZnJvbSBWUFQKKyAg IHByZWRpY2F0ZWQgaW5zbnMgaW50byB1bnByZWRpY2F0ZWQgaW5zbnMgZm9yIGEgZGxzdHAv bGV0cCBsb29wLiAgUmV0dXJucworICAgcnR4IGNvbnN0YW50IHZhbHVlIHRvIGRlY3JlbWVu dCBmcm9tIHRoZSB0b3RhbCBudW1iZXIgb2YgZWxlbWVudHMuICBSZXR1cm4KKyAgIChjb25z dF9pbnQgMSkgaWYgd2UgY2FuJ3QgdXNlIHRhaWwgcHJlZGljYXRpb24gYW5kIGZhbGxiYWNr IHRvIHNjYWxhcgorICAgbG93LW92ZXJoZWFkIGxvb3BzLiAgKi8KKworcnR4Cithcm1fYXR0 ZW1wdF9kbHN0cF90cmFuc2Zvcm0gKHJ0eCBsYWJlbCkKK3sKKyAgYmFzaWNfYmxvY2sgYm9k eSA9IEJMT0NLX0ZPUl9JTlNOIChsYWJlbCktPnByZXZfYmI7CisKKyAgLyogRW5zdXJlIHRo YXQgdGhlIGJiIGlzIHdpdGhpbiBhIGxvb3AgdGhhdCBoYXMgYWxsIHJlcXVpcmVkIG1ldGFk YXRhLiAgKi8KKyAgaWYgKCFib2R5LT5sb29wX2ZhdGhlciB8fCAhYm9keS0+bG9vcF9mYXRo ZXItPmhlYWRlcgorICAgICAgfHwgIWJvZHktPmxvb3BfZmF0aGVyLT5zaW1wbGVfbG9vcF9k ZXNjKQorICAgIHJldHVybiBjb25zdDFfcnR4OworCisgIHJ0eF9pbnNuICp2Y3RwX2luc24g PSBhcm1fbXZlX2xvb3BfdmFsaWRfZm9yX2Rsc3RwIChib2R5KTsKKyAgaWYgKCF2Y3RwX2lu c24pCisgICAgcmV0dXJuIGNvbnN0MV9ydHg7CisKKyAgZ2NjX2Fzc2VydCAoc2luZ2xlX3Nl dCAodmN0cF9pbnNuKSk7CisKKyAgcnR4IHZjdHBfdnByX2dlbmVyYXRlZCA9IGFybV9tdmVf Z2V0X3ZjdHBfdmVjX2Zvcm0gKHZjdHBfaW5zbik7CisgIGlmICghdmN0cF92cHJfZ2VuZXJh dGVkKQorICAgIHJldHVybiBjb25zdDFfcnR4OworCisgIC8qIGRlY3JlbWVudHVudW0gaXMg YWxyZWFkeSBrbm93biB0byBiZSB2YWxpZCBhdCB0aGlzIHBvaW50LiAgKi8KKyAgaW50IGRl Y3JlbWVudG51bSA9IGFybV9tdmVfZ2V0X3ZjdHBfbGFuZXMgKHZjdHBfaW5zbik7CisKKyAg cnR4X2luc24gKmluc24gPSAwOworICBydHhfaW5zbiAqY3VyX2luc24gPSAwOworICBydHhf aW5zbiAqc2VxOworICBoYXNoX21hcCA8cnR4X2luc24gKiwgYm9vbD4gKnNhZmVfaW5zbl9t YXAKKyAgICAgID0gbmV3IGhhc2hfbWFwIDxydHhfaW5zbiAqLCBib29sPjsKKworICAvKiBT Y2FuIHRocm91Z2ggdGhlIGluc25zIGluIHRoZSBsb29wIGJiIGFuZCBlbWl0IHRoZSB0cmFu c2Zvcm1lZCBiYgorICAgICBpbnNucyB0byBhIHNlcXVlbmNlLiAgKi8KKyAgc3RhcnRfc2Vx dWVuY2UgKCk7CisgIEZPUl9CQl9JTlNOUyAoYm9keSwgaW5zbikKKyAgICB7CisgICAgICBp ZiAoR0VUX0NPREUgKGluc24pID09IENPREVfTEFCRUwgfHwgTk9URV9JTlNOX0JBU0lDX0JM T0NLX1AgKGluc24pKQorCWNvbnRpbnVlOworICAgICAgZWxzZSBpZiAoTk9URV9QIChpbnNu KSkKKwllbWl0X25vdGUgKChlbnVtIGluc25fbm90ZSlOT1RFX0tJTkQgKGluc24pKTsKKyAg ICAgIGVsc2UgaWYgKERFQlVHX0lOU05fUCAoaW5zbikpCisJZW1pdF9kZWJ1Z19pbnNuIChQ QVRURVJOIChpbnNuKSk7CisgICAgICBlbHNlIGlmICghSU5TTl9QIChpbnNuKSkKKwl7CisJ ICBlbmRfc2VxdWVuY2UgKCk7CisJICByZXR1cm4gY29uc3QxX3J0eDsKKwl9CisgICAgICAv KiBXaGVuIHdlIGZpbmQgdGhlIHZjdHAgaW5zdHJ1Y3Rpb246IGNvbnRpbnVlLiAgKi8KKyAg ICAgIGVsc2UgaWYgKGluc24gPT0gdmN0cF9pbnNuKQorCWNvbnRpbnVlOworICAgICAgIC8q IElmIHRoZSBpbnNuIHBhdHRlcm4gcmVxdWlyZXMgdGhlIHVzZSBvZiB0aGUgVlBSIHZhbHVl IGZyb20gdGhlCisJICB2Y3RwIGFzIGFuIGlucHV0IHBhcmFtZXRlciBmb3IgcHJlZGljYXRp b24uICAqLworICAgICAgZWxzZSBpZiAoYXJtX212ZV92ZWNfaW5zbl9pc19wcmVkaWNhdGVk X3dpdGhfdGhpc19wcmVkaWNhdGUKKwkJKGluc24sIHZjdHBfdnByX2dlbmVyYXRlZCkpCisJ eworCSAgYm9vbCBzdWNjZXNzID0gYXJtX2VtaXRfbXZlX3VucHJlZGljYXRlZF9pbnNuX3Rv X3NlcSAoaW5zbik7CisJICBpZiAoIXN1Y2Nlc3MpCisJICAgIHsKKwkgICAgICBlbmRfc2Vx dWVuY2UgKCk7CisJICAgICAgcmV0dXJuIGNvbnN0MV9ydHg7CisJICAgIH0KKwl9CisgICAg ICAvKiBJZiB0aGUgaW5zbiBpc24ndCBWUFQgcHJlZGljYXRlZCBvbiB2Y3RwX3Zwcl9nZW5l cmF0ZWQsIHdlIG5lZWQgdG8KKwkgbWFrZSBzdXJlIHRoYXQgaXQgaXMgc3RpbGwgdmFsaWQg d2l0aGluIHRoZSBkbHN0cC9sZXRwIGxvb3AuICAqLworICAgICAgZWxzZQorCXsKKwkgIC8q IElmIHRoaXMgaW5zdHJ1Y3Rpb24gVVNFLXMgdGhlIHZjdHBfdnByX2dlbmVyYXRlZCBvdGhl ciB0aGFuIGZvcgorCSAgICAgcHJlZGljYXRpb24sIHRoaXMgYmxvY2tzIHRoZSB0cmFuc2Zv cm1hdGlvbiBhcyB3ZSBhcmUgbm90IGFsbG93ZWQKKwkgICAgIHRvIG9wdGltaXNlIHRoZSBW UFIgdmFsdWUgYXdheS4gICovCisJICBkZl9yZWYgaW5zbl91c2VzID0gTlVMTDsKKwkgIEZP Ul9FQUNIX0lOU05fVVNFIChpbnNuX3VzZXMsIGluc24pCisJICB7CisJICAgIGlmIChydHhf ZXF1YWxfcCAodmN0cF92cHJfZ2VuZXJhdGVkLCBERl9SRUZfUkVHIChpbnNuX3VzZXMpKSkK KwkgICAgICB7CisJCWVuZF9zZXF1ZW5jZSAoKTsKKwkJcmV0dXJuIGNvbnN0MV9ydHg7CisJ ICAgICAgfQorCSAgfQorCSAgLyogSWYgd2l0aGluIHRoZSBsb29wIHdlIGhhdmUgYW4gTVZF IHZlY3RvciBpbnN0cnVjdGlvbiB0aGF0IGlzCisJICAgICB1bnByZWRpY2F0ZWQsIHRoZSBk bHN0cC9sZXRwIGxvb3Bpbmcgd2lsbCBhZGQgaW1wbGljaXQKKwkgICAgIHByZWRpY2F0aW9u IHRvIGl0LiAgVGhpcyB3aWxsIHJlc3VsdCBpbiBhIGNoYW5nZSBpbiBiZWhhdmlvdXIKKwkg ICAgIG9mIHRoZSBpbnN0cnVjdGlvbiwgc28gd2UgbmVlZCB0byBmaW5kIG91dCBpZiBhbnkg aW5zdHJ1Y3Rpb25zCisJICAgICB0aGF0IGZlZWQgaW50byB0aGUgY3VycmVudCBpbnN0cnVj dGlvbiB3ZXJlIGltcGxpY2l0bHkKKwkgICAgIHByZWRpY2F0ZWQuICAqLworCSAgaWYgKGFy bV9tdmVfY2hlY2tfZGZfY2hhaW5fYmFja19mb3JfaW1wbGljX3ByZWRpYworCSAgICAgICAo c2FmZV9pbnNuX21hcCwgaW5zbiwgdmN0cF92cHJfZ2VuZXJhdGVkKSkKKwkgICAgeworCSAg ICAgIGlmIChhcm1fbXZlX2NoZWNrX2RmX2NoYWluX2Z3ZF9mb3JfaW1wbGljX3ByZWRpY19p bXBhY3QKKwkJICAgIChpbnNuLCB2Y3RwX3Zwcl9nZW5lcmF0ZWQpKQorCQl7CisJCSAgZW5k X3NlcXVlbmNlICgpOworCQkgIHJldHVybiBjb25zdDFfcnR4OworCQl9CisJICAgIH0KKwkg IGVtaXRfaW5zbiAoUEFUVEVSTiAoaW5zbikpOworCX0KKyAgICB9CisgIHNlcSA9IGdldF9p bnNucyAoKTsKKyAgZW5kX3NlcXVlbmNlICgpOworCisgIC8qIFJlLXdyaXRlIHRoZSBlbnRp cmUgQkIgY29udGVudHMgd2l0aCB0aGUgdHJhbnNmb3JtZWQKKyAgICAgc2VxdWVuY2UuICAq LworICBGT1JfQkJfSU5TTlNfU0FGRSAoYm9keSwgaW5zbiwgY3VyX2luc24pCisgICAgaWYg KCEoR0VUX0NPREUgKGluc24pID09IENPREVfTEFCRUwgfHwgTk9URV9JTlNOX0JBU0lDX0JM T0NLX1AgKGluc24pKSkKKyAgICAgIGRlbGV0ZV9pbnNuIChpbnNuKTsKKworICBlbWl0X2lu c25fYWZ0ZXIgKHNlcSwgQkJfRU5EIChib2R5KSk7CisKKyAgLyogVGhlIHRyYW5zZm9ybWF0 aW9uIGhhcyBzdWNjZWVkZWQsIHNvIG5vdyBtb2RpZnkgdGhlICJjb3VudCIKKyAgICAgKGEu ay5hLiBuaXRlcl9leHByKSBmb3IgdGhlIG1pZGRsZS1lbmQuICBBbHNvIHNldCBub2xvb3Bf YXNzdW1wdGlvbnMKKyAgICAgdG8gTlVMTCB0byBzdG9wIHRoZSBtaWRkbGUtZW5kIGZyb20g bWFraW5nIGFzc3VtcHRpb25zIGFib3V0IHRoZQorICAgICBudW1iZXIgb2YgaXRlcmF0aW9u cy4gICovCisgIHNpbXBsZV9sb29wX2Rlc2MgKGJvZHktPmxvb3BfZmF0aGVyKS0+bml0ZXJf ZXhwcgorICAgID0gWFZFQ0VYUCAoU0VUX1NSQyAoUEFUVEVSTiAodmN0cF9pbnNuKSksIDAs IDApOworICBzaW1wbGVfbG9vcF9kZXNjIChib2R5LT5sb29wX2ZhdGhlciktPm5vbG9vcF9h c3N1bXB0aW9ucyA9IE5VTExfUlRYOworICByZXR1cm4gR0VOX0lOVCAoZGVjcmVtZW50bnVt KTsKIH0KIAogI2lmIENIRUNLSU5HX1AKZGlmZiAtLWdpdCBhL2djYy9jb25maWcvYXJtL2l0 ZXJhdG9ycy5tZCBiL2djYy9jb25maWcvYXJtL2l0ZXJhdG9ycy5tZAppbmRleCA1ZWEyZDll ODY2ODkxYmRiM2RjNzNmY2Y2Y2JkNmNkZDJmOTg5OTUxLi45Mzk4NzAyY2RkZDA3NmE3ZWFj ZjFjYTZlYWM2YzVhMWZiZDlhM2QwIDEwMDY0NAotLS0gYS9nY2MvY29uZmlnL2FybS9pdGVy YXRvcnMubWQKKysrIGIvZ2NjL2NvbmZpZy9hcm0vaXRlcmF0b3JzLm1kCkBAIC0yNjczLDYg KzI2NzMsMTcgQEAgKGRlZmluZV9pbnRfaXRlcmF0b3IgTVJSQ0kgW1ZVTlNQRUNfTVJSQyBW VU5TUEVDX01SUkMyXSkKIChkZWZpbmVfaW50X2F0dHIgbXJyYyBbKFZVTlNQRUNfTVJSQyAi bXJyYyIpIChWVU5TUEVDX01SUkMyICJtcnJjMiIpXSkKIChkZWZpbmVfaW50X2F0dHIgTVJS QyBbKFZVTlNQRUNfTVJSQyAiTVJSQyIpIChWVU5TUEVDX01SUkMyICJNUlJDMiIpXSkKIAor KGRlZmluZV9pbnRfYXR0ciBkbHN0cF9lbGVtc2l6ZSBbKERMU1RQOCAiOCIpIChETFNUUDE2 ICIxNiIpIChETFNUUDMyICIzMiIpCisJCQkJIChETFNUUDY0ICI2NCIpXSkKKworKGRlZmlu ZV9pbnRfYXR0ciBsZXRwX251bV9sYW5lcyBbKExFVFA4ICIxNiIpIChMRVRQMTYgIjgiKSAo TEVUUDMyICI0IikKKwkJCQkgKExFVFA2NCAiMiIpXSkKKyhkZWZpbmVfaW50X2F0dHIgbGV0 cF9udW1fbGFuZXNfbmVnIFsoTEVUUDggIi0xNiIpIChMRVRQMTYgIi04IikgKExFVFAzMiAi LTQiKQorCQkJCSAgICAgKExFVFA2NCAiLTIiKV0pCisKKyhkZWZpbmVfaW50X2F0dHIgbGV0 cF9udW1fbGFuZXNfbWludXNfMSBbKExFVFA4ICIxNSIpIChMRVRQMTYgIjciKSAoTEVUUDMy ICIzIikKKwkJCQkJIChMRVRQNjQgIjEiKV0pCisKIChkZWZpbmVfaW50X2F0dHIgb3BzdWZm aXggWyhVTlNQRUNfRE9UX1MgInM4IikKIAkJCSAgIChVTlNQRUNfRE9UX1UgInU4IikKIAkJ CSAgIChVTlNQRUNfRE9UX1VTICJzOCIpCkBAIC0yOTE2LDYgKzI5MjcsMTAgQEAgKGRlZmlu ZV9pbnRfaXRlcmF0b3IgU1FSU0hSTFEgW1NRUlNIUkxfNjQgU1FSU0hSTF80OF0pCiAoZGVm aW5lX2ludF9pdGVyYXRvciBWU0hMQ1FfTSBbVlNITENRX01fUyBWU0hMQ1FfTV9VXSkKIChk ZWZpbmVfaW50X2l0ZXJhdG9yIFZRU0hMVVFfTV9OIFtWUVNITFVRX01fTl9TXSkKIChkZWZp bmVfaW50X2l0ZXJhdG9yIFZRU0hMVVFfTiBbVlFTSExVUV9OX1NdKQorKGRlZmluZV9pbnRf aXRlcmF0b3IgRExTVFAgW0RMU1RQOCBETFNUUDE2IERMU1RQMzIKKwkJCQkgICBETFNUUDY0 XSkKKyhkZWZpbmVfaW50X2l0ZXJhdG9yIExFVFAgW0xFVFA4IExFVFAxNiBMRVRQMzIKKwkJ CSAgIExFVFA2NF0pCiAKIDs7IERlZmluZSBpdGVyYXRvcnMgZm9yIFZDTUxBIG9wZXJhdGlv bnMKIChkZWZpbmVfaW50X2l0ZXJhdG9yIFZDTUxBX09QIFtVTlNQRUNfVkNNTEEKZGlmZiAt LWdpdCBhL2djYy9jb25maWcvYXJtL212ZS5tZCBiL2djYy9jb25maWcvYXJtL212ZS5tZApp bmRleCBiMTg2MmQ3OTc3ZTkxNjA1Y2Q5NzFlNjM0MTA1YmVkM2ZhNmU3NWNiLi41NzQ4ZTIz MzNlYjNhODhkNjU5ODkyZjJiY2M3Mjg0OWJjZjM4OGI1IDEwMDY0NAotLS0gYS9nY2MvY29u ZmlnL2FybS9tdmUubWQKKysrIGIvZ2NjL2NvbmZpZy9hcm0vbXZlLm1kCkBAIC02OTE4LDMg KzY5MTgsNDEgQEAgKGRlZmluZV9leHBhbmQgIkBhcm1fbXZlX3JlaW50ZXJwcmV0PG1vZGU+ IgogICAgICAgfQogICB9CiApCisKKzs7IE9yaWdpbmFsbHkgZXhwYW5kZWQgYnkgJ3ByZWRp Y2F0ZWRfZG9sb29wX2VuZCcuCis7OyBJbiB0aGUgcmFyZSBzaXR1YXRpb24gd2hlcmUgdGhl IGJyYW5jaCBpcyB0b28gZmFyLCB3ZSBkbyBhbHNvIG5lZWQgdG8KKzs7IHJldmVydCBGUFND Ui5MVFBTSVpFIGJhY2sgdG8gMHgxMDAgYWZ0ZXIgdGhlIGxhc3QgaXRlcmF0aW9uLgorKGRl ZmluZV9pbnNuICJwcmVkaWNhdGVkX2RvbG9vcF9lbmRfaW50ZXJuYWw8bGV0cF9udW1fbGFu ZXM+IgorICBbKHNldCAocGMpCisJKGlmX3RoZW5fZWxzZQorCSAgIChndHUgKHVuc3BlYzpT SSBbKHBsdXM6U0kgKG1hdGNoX29wZXJhbmQ6U0kgMCAic19yZWdpc3Rlcl9vcGVyYW5kIiAi PXIiKQorCQkJCSAgICAgKGNvbnN0X2ludCA8bGV0cF9udW1fbGFuZXNfbmVnPikpXQorCQlM RVRQKQorCQkoY29uc3RfaW50IDxsZXRwX251bV9sYW5lc19taW51c18xPikpCisJIChtYXRj aF9vcGVyYW5kIDEgIiIgIiIpCisJIChwYykpKQorICAgKHNldCAobWF0Y2hfZHVwIDApCisJ KHBsdXM6U0kgKG1hdGNoX2R1cCAwKSAoY29uc3RfaW50IDxsZXRwX251bV9sYW5lc19uZWc+ KSkpCisgICAoY2xvYmJlciAocmVnOkNDIENDX1JFR05VTSkpXQorICAiVEFSR0VUX0hBVkVf TVZFIgorICB7CisgICAgaWYgKGdldF9hdHRyX2xlbmd0aCAoaW5zbikgPT0gNCkKKyAgICAg IHJldHVybiAibGV0cFx0JXxsciwgJWwxIjsKKyAgICBlbHNlCisgICAgICByZXR1cm4gInN1 YnNcdCV8bHIsICM8bGV0cF9udW1fbGFuZXM+XG5cdGJoaVx0JWwxXG5cdGxjdHAiOworICB9 CisgIFsoc2V0IChhdHRyICJsZW5ndGgiKQorCShpZl90aGVuX2Vsc2UKKwkgICAobHR1ICht aW51cyAocGMpIChtYXRjaF9kdXAgMSkpIChjb25zdF9pbnQgMTAyNCkpCisJICAgIChjb25z dF9pbnQgNCkKKwkgICAgKGNvbnN0X2ludCA2KSkpCisgICAoc2V0X2F0dHIgInR5cGUiICJi cmFuY2giKV0pCisKKyhkZWZpbmVfaW5zbiAiZGxzdHA8ZGxzdHBfZWxlbXNpemU+X2luc24i CisgIFsKKyAgICAoc2V0IChyZWc6U0kgTFJfUkVHTlVNKQorCSAodW5zcGVjOlNJIFsobWF0 Y2hfb3BlcmFuZDpTSSAwICJzX3JlZ2lzdGVyX29wZXJhbmQiICJyIildCisJICBETFNUUCkp CisgIF0KKyAgIlRBUkdFVF9IQVZFX01WRSIKKyAgImRsc3RwLjxkbHN0cF9lbGVtc2l6ZT5c dCV8bHIsICUwIikKZGlmZiAtLWdpdCBhL2djYy9jb25maWcvYXJtL3RodW1iMi5tZCBiL2dj Yy9jb25maWcvYXJtL3RodW1iMi5tZAppbmRleCBlMWUwMTNiZWZhN2E2N2RkYmY1MTdiZjIy Nzk3YmRhZWViOTZiOTRmLi5mMjgwMWNlYTM2YTM0ZDMyNmZkNmYzYTIxM2UwZTE0OWMzZTA3 ODRmIDEwMDY0NAotLS0gYS9nY2MvY29uZmlnL2FybS90aHVtYjIubWQKKysrIGIvZ2NjL2Nv bmZpZy9hcm0vdGh1bWIyLm1kCkBAIC0xNjEzLDcgKzE2MTMsNyBAQCAoZGVmaW5lX2V4cGFu ZCAiZG9sb29wX2VuZCIKICAgICh1c2UgKG1hdGNoX29wZXJhbmQgMSAiIiAiIikpXSAgICAg OyBsYWJlbAogICAiVEFSR0VUXzMyQklUIgogICAiCi0geworewogICAgLyogQ3VycmVudGx5 IFNNUyByZWxpZXMgb24gdGhlIGRvLWxvb3AgcGF0dGVybiB0byByZWNvZ25pemUgbG9vcHMK ICAgICAgIHdoZXJlICgxKSB0aGUgY29udHJvbCBwYXJ0IGNvbnNpc3RzIG9mIGFsbCBpbnNu cyBkZWZpbmluZyBhbmQvb3IKICAgICAgIHVzaW5nIGEgY2VydGFpbiAnY291bnQnIHJlZ2lz dGVyIGFuZCAoMikgdGhlIGxvb3AgY291bnQgY2FuIGJlCkBAIC0xNjIzLDQxICsxNjIzLDc3 IEBAIChkZWZpbmVfZXhwYW5kICJkb2xvb3BfZW5kIgogCiAgICAgICBBbHNvIHVzZWQgdG8g aW1wbGVtZW50IHRoZSBsb3cgb3ZlciBoZWFkIGxvb3BzIGZlYXR1cmUsIHdoaWNoIGlzIHBh cnQgb2YKICAgICAgIHRoZSBBcm12OC4xLU0gTWFpbmxpbmUgTG93IE92ZXJoZWFkIEJyYW5j aCAoTE9CKSBleHRlbnNpb24uICAqLwotICAgaWYgKG9wdGltaXplID4gMCAmJiAoZmxhZ19t b2R1bG9fc2NoZWQgfHwgVEFSR0VUX0hBVkVfTE9CKSkKLSAgIHsKLSAgICAgcnR4IHMwOwot ICAgICBydHggYmNvbXA7Ci0gICAgIHJ0eCBsb2NfcmVmOwotICAgICBydHggY2NfcmVnOwot ICAgICBydHggaW5zbjsKLSAgICAgcnR4IGNtcDsKLQotICAgICBpZiAoR0VUX01PREUgKG9w ZXJhbmRzWzBdKSAhPSBTSW1vZGUpCi0gICAgICAgRkFJTDsKLQotICAgICBzMCA9IG9wZXJh bmRzIFswXTsKLQotICAgICAvKiBMb3cgb3ZlciBoZWFkIGxvb3AgaW5zdHJ1Y3Rpb25zIHJl cXVpcmUgdGhlIGZpcnN0IG9wZXJhbmQgdG8gYmUgTFIuICAqLwotICAgICBpZiAoVEFSR0VU X0hBVkVfTE9CICYmIGFybV90YXJnZXRfaW5zbl9va19mb3JfbG9iIChvcGVyYW5kcyBbMV0p KQotICAgICAgIHMwID0gZ2VuX3J0eF9SRUcgKFNJbW9kZSwgTFJfUkVHTlVNKTsKLQotICAg ICBpZiAoVEFSR0VUX1RIVU1CMikKLSAgICAgICBpbnNuID0gZW1pdF9pbnNuIChnZW5fdGh1 bWIyX2FkZHNpM19jb21wYXJlMCAoczAsIHMwLCBHRU5fSU5UICgtMSkpKTsKLSAgICAgZWxz ZQotICAgICAgIGluc24gPSBlbWl0X2luc24gKGdlbl9hZGRzaTNfY29tcGFyZTAgKHMwLCBz MCwgR0VOX0lOVCAoLTEpKSk7Ci0KLSAgICAgY21wID0gWFZFQ0VYUCAoUEFUVEVSTiAoaW5z biksIDAsIDApOwotICAgICBjY19yZWcgPSBTRVRfREVTVCAoY21wKTsKLSAgICAgYmNvbXAg PSBnZW5fcnR4X05FIChWT0lEbW9kZSwgY2NfcmVnLCBjb25zdDBfcnR4KTsKLSAgICAgbG9j X3JlZiA9IGdlbl9ydHhfTEFCRUxfUkVGIChWT0lEbW9kZSwgb3BlcmFuZHMgWzFdKTsKLSAg ICAgZW1pdF9qdW1wX2luc24gKGdlbl9ydHhfU0VUIChwY19ydHgsCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgZ2VuX3J0eF9JRl9USEVOX0VMU0UgKFZPSURtb2RlLCBi Y29tcCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgbG9jX3JlZiwgcGNfcnR4KSkpOwotICAgICBET05FOwotICAgfQotIGVsc2UK LSAgIEZBSUw7Ci0gfSIpCisgIGlmIChvcHRpbWl6ZSA+IDAgJiYgKGZsYWdfbW9kdWxvX3Nj aGVkIHx8IFRBUkdFVF9IQVZFX0xPQikpCisgICAgeworICAgICAgcnR4IHMwOworICAgICAg cnR4IGJjb21wOworICAgICAgcnR4IGxvY19yZWY7CisgICAgICBydHggY2NfcmVnOworICAg ICAgcnR4IGluc247CisgICAgICBydHggY21wOworICAgICAgcnR4IGRlY3JlbWVudF9udW07 CisKKyAgICAgIGlmIChHRVRfTU9ERSAob3BlcmFuZHNbMF0pICE9IFNJbW9kZSkKKwlGQUlM OworCisgICAgICBzMCA9IG9wZXJhbmRzWzBdOworCisgICAgICAgaWYgKFRBUkdFVF9IQVZF X0xPQiAmJiBhcm1fdGFyZ2V0X2JiX29rX2Zvcl9sb2IgKEJMT0NLX0ZPUl9JTlNOIChvcGVy YW5kc1sxXSkpKQorCXsKKwkgIHMwID0gZ2VuX3J0eF9SRUcgKFNJbW9kZSwgTFJfUkVHTlVN KTsKKworCSAgLyogSWYgd2UgaGF2ZSBhIGNvbXBhdGlibGUgTVZFIHRhcmdldCwgdHJ5IGFu ZCBhbmFseXNlIHRoZSBsb29wCisJICAgICBjb250ZW50cyB0byBkZXRlcm1pbmUgaWYgd2Ug Y2FuIHVzZSBwcmVkaWNhdGVkIGRsc3RwL2xldHAKKwkgICAgIGxvb3BpbmcuICAqLworCSAg aWYgKFRBUkdFVF9IQVZFX01WRQorCSAgICAgICYmIChkZWNyZW1lbnRfbnVtID0gYXJtX2F0 dGVtcHRfZGxzdHBfdHJhbnNmb3JtIChvcGVyYW5kc1sxXSkpCisJICAgICAgJiYgKElOVFZB TCAoZGVjcmVtZW50X251bSkgIT0gMSkpCisJICAgIHsKKwkgICAgICBsb2NfcmVmID0gZ2Vu X3J0eF9MQUJFTF9SRUYgKFZPSURtb2RlLCBvcGVyYW5kc1sxXSk7CisJICAgICAgc3dpdGNo IChJTlRWQUwgKGRlY3JlbWVudF9udW0pKQorCQl7CisJCSAgY2FzZSAyOgorCQkgICAgaW5z biA9IGVtaXRfanVtcF9pbnNuIChnZW5fcHJlZGljYXRlZF9kb2xvb3BfZW5kX2ludGVybmFs MgorCQkJCQkgICAgKHMwLCBsb2NfcmVmKSk7CisJCSAgICBicmVhazsKKwkJICBjYXNlIDQ6 CisJCSAgICBpbnNuID0gZW1pdF9qdW1wX2luc24gKGdlbl9wcmVkaWNhdGVkX2RvbG9vcF9l bmRfaW50ZXJuYWw0CisJCQkJCSAgICAoczAsIGxvY19yZWYpKTsKKwkJICAgIGJyZWFrOwor CQkgIGNhc2UgODoKKwkJICAgIGluc24gPSBlbWl0X2p1bXBfaW5zbiAoZ2VuX3ByZWRpY2F0 ZWRfZG9sb29wX2VuZF9pbnRlcm5hbDgKKwkJCQkJICAgIChzMCwgbG9jX3JlZikpOworCQkg ICAgYnJlYWs7CisJCSAgY2FzZSAxNjoKKwkJICAgIGluc24gPSBlbWl0X2p1bXBfaW5zbiAo Z2VuX3ByZWRpY2F0ZWRfZG9sb29wX2VuZF9pbnRlcm5hbDE2CisJCQkJCSAgICAoczAsIGxv Y19yZWYpKTsKKwkJICAgIGJyZWFrOworCQkgIGRlZmF1bHQ6CisJCSAgICBnY2NfdW5yZWFj aGFibGUgKCk7CisJCX0KKwkgICAgICBET05FOworCSAgICB9CisJfQorCisJLyogT3RoZXJ3 aXNlLCB0cnkgc3RhbmRhcmQgZGVjcmVtZW50LWJ5LW9uZSBkbHMvbGUgbG9vcGluZy4gICov CisJaWYgKFRBUkdFVF9USFVNQjIpCisJICBpbnNuID0gZW1pdF9pbnNuIChnZW5fdGh1bWIy X2FkZHNpM19jb21wYXJlMCAoczAsIHMwLAorCQkJCQkJCUdFTl9JTlQgKC0xKSkpOworCWVs c2UKKwkgIGluc24gPSBlbWl0X2luc24gKGdlbl9hZGRzaTNfY29tcGFyZTAgKHMwLCBzMCwg R0VOX0lOVCAoLTEpKSk7CisKKwljbXAgPSBYVkVDRVhQIChQQVRURVJOIChpbnNuKSwgMCwg MCk7CisJY2NfcmVnID0gU0VUX0RFU1QgKGNtcCk7CisJYmNvbXAgPSBnZW5fcnR4X05FIChW T0lEbW9kZSwgY2NfcmVnLCBjb25zdDBfcnR4KTsKKwlsb2NfcmVmID0gZ2VuX3J0eF9MQUJF TF9SRUYgKFZPSURtb2RlLCBvcGVyYW5kc1sxXSk7CisJZW1pdF9qdW1wX2luc24gKGdlbl9y dHhfU0VUIChwY19ydHgsCisJCQkJICAgICBnZW5fcnR4X0lGX1RIRU5fRUxTRSAoVk9JRG1v ZGUsIGJjb21wLAorCQkJCQkJCSAgIGxvY19yZWYsIHBjX3J0eCkpKTsKKwlET05FOworICAg IH0KKyAgZWxzZQorICAgIEZBSUw7Cit9IikKIAogKGRlZmluZV9pbnNuICIqY2xlYXJfYXBz ciIKICAgWyh1bnNwZWNfdm9sYXRpbGU6U0kgWyhjb25zdF9pbnQgMCldIFZVTlNQRUNfQ0xS TV9BUFNSKQpAQCAtMTc1NSw3ICsxNzkxLDM3IEBAIChkZWZpbmVfZXhwYW5kICJkb2xvb3Bf YmVnaW4iCiAgIHsKICAgICBpZiAoUkVHTk8gKG9wZXJhbmRzWzBdKSA9PSBMUl9SRUdOVU0p CiAgICAgICB7Ci0JZW1pdF9pbnNuIChnZW5fZGxzX2luc24gKG9wZXJhbmRzWzBdKSk7CisJ LyogUGljayBvdXQgdGhlIG51bWJlciBieSB3aGljaCB3ZSBhcmUgZGVjcmVtZW50aW5nIHRo ZSBsb29wIGNvdW50ZXIKKwkgICBpbiBldmVyeSBpdGVyYXRpb24uICBJZiBpdCdzID4gMSwg dGhlbiB1c2UgZGxzdHAuICAqLworCWludCBjb25zdF9pbnRfZGVjX251bQorCSAgICAgPSBh YnMgKElOVFZBTCAoWEVYUCAoWEVYUCAoWFZFQ0VYUCAoUEFUVEVSTiAob3BlcmFuZHNbMV0p LCAwLCAxKSwKKwkJCQkgIDEpLAorCQkJICAgIDEpKSk7CisJc3dpdGNoIChjb25zdF9pbnRf ZGVjX251bSkKKwkgIHsKKwkgICAgY2FzZSAxNjoKKwkgICAgICBlbWl0X2luc24gKGdlbl9k bHN0cDhfaW5zbiAob3BlcmFuZHNbMF0pKTsKKwkgICAgICBicmVhazsKKworCSAgICBjYXNl IDg6CisJICAgICAgZW1pdF9pbnNuIChnZW5fZGxzdHAxNl9pbnNuIChvcGVyYW5kc1swXSkp OworCSAgICAgIGJyZWFrOworCisJICAgIGNhc2UgNDoKKwkgICAgICBlbWl0X2luc24gKGdl bl9kbHN0cDMyX2luc24gKG9wZXJhbmRzWzBdKSk7CisJICAgICAgYnJlYWs7CisKKwkgICAg Y2FzZSAyOgorCSAgICAgIGVtaXRfaW5zbiAoZ2VuX2Rsc3RwNjRfaW5zbiAob3BlcmFuZHNb MF0pKTsKKwkgICAgICBicmVhazsKKworCSAgICBjYXNlIDE6CisJICAgICAgZW1pdF9pbnNu IChnZW5fZGxzX2luc24gKG9wZXJhbmRzWzBdKSk7CisJICAgICAgYnJlYWs7CisKKwkgICAg ZGVmYXVsdDoKKwkgICAgICBnY2NfdW5yZWFjaGFibGUgKCk7CisJICB9CiAJRE9ORTsKICAg ICAgIH0KICAgICBlbHNlCmRpZmYgLS1naXQgYS9nY2MvY29uZmlnL2FybS91bnNwZWNzLm1k IGIvZ2NjL2NvbmZpZy9hcm0vdW5zcGVjcy5tZAppbmRleCA0NzEzZWM4NDBhYmFlNDhjYTcw ZjQxOGRiYzBkNDAyOGFkNGFkNTI3Li4yZDZmMjdjMTRmNGExZTdkYjA1Yjk2ODRhODk1OGE3 NmExYzc5ZWYyIDEwMDY0NAotLS0gYS9nY2MvY29uZmlnL2FybS91bnNwZWNzLm1kCisrKyBi L2djYy9jb25maWcvYXJtL3Vuc3BlY3MubWQKQEAgLTU4Myw2ICs1ODMsMTQgQEAgKGRlZmlu ZV9jX2VudW0gInVuc3BlYyIgWwogICBWQURETFZRX1UKICAgVkNUUAogICBWQ1RQX00KKyAg RExTVFA4CisgIERMU1RQMTYKKyAgRExTVFAzMgorICBETFNUUDY0CisgIExFVFA4CisgIExF VFAxNgorICBMRVRQMzIKKyAgTEVUUDY0CiAgIFZQTk9UCiAgIFZDUkVBVEVRX0YKICAgVkNW VFFfTl9UT19GX1MKZGlmZiAtLWdpdCBhL2djYy9kZi1jb3JlLmNjIGIvZ2NjL2RmLWNvcmUu Y2MKaW5kZXggZDQ4MTJiMDRhN2NiOTdlYTE2MDYwODJlMjZlOTEwNDcyZGE1YmNjMS4uNGZj YzE0YmY3OTBkNDNlNzkyYjNjOTI2ZmUxZjgwMDczZDkwOGMxNyAxMDA2NDQKLS0tIGEvZ2Nj L2RmLWNvcmUuY2MKKysrIGIvZ2NjL2RmLWNvcmUuY2MKQEAgLTE5NjQsNiArMTk2NCwyMSBA QCBkZl9iYl9yZWdub19sYXN0X2RlZl9maW5kIChiYXNpY19ibG9jayBiYiwgdW5zaWduZWQg aW50IHJlZ25vKQogICByZXR1cm4gTlVMTDsKIH0KIAorLyogUmV0dXJuIHRoZSBvbmUgYW5k IG9ubHkgZGVmIG9mIFJFR05PIHdpdGhpbiBCQi4gIElmIHRoZXJlIGlzIG5vIGRlZiBvcgor ICAgdGhlcmUgYXJlIG11bHRpcGxlIGRlZnMsIHJldHVybiBOVUxMLiAgKi8KKworZGZfcmVm CitkZl9iYl9yZWdub19vbmx5X2RlZl9maW5kIChiYXNpY19ibG9jayBiYiwgdW5zaWduZWQg aW50IHJlZ25vKQoreworICBkZl9yZWYgdGVtcCA9IGRmX2JiX3JlZ25vX2ZpcnN0X2RlZl9m aW5kIChiYiwgcmVnbm8pOworICBpZiAoIXRlbXApCisgICAgcmV0dXJuIE5VTEw7CisgIGVs c2UgaWYgKHRlbXAgPT0gZGZfYmJfcmVnbm9fbGFzdF9kZWZfZmluZCAoYmIsIHJlZ25vKSkK KyAgICByZXR1cm4gdGVtcDsKKyAgZWxzZQorICAgIHJldHVybiBOVUxMOworfQorCiAvKiBG aW5kcyB0aGUgcmVmZXJlbmNlIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGRlZmluaXRpb24gb2Yg UkVHIGluIElOU04uCiAgICBERiBpcyB0aGUgZGF0YWZsb3cgb2JqZWN0LiAgKi8KIApkaWZm IC0tZ2l0IGEvZ2NjL2RmLmggYi9nY2MvZGYuaAppbmRleCA0MDI2NTdhNzA3NmYxYmNhZDI0 ZTljNTA2ODJlMDMzZTU3ZjQzMmY5Li45ODYyMzYzN2Y5YzgzOWM3OTkyMjJlOTlkZjJhNzE3 M2E3NzBiMmFjIDEwMDY0NAotLS0gYS9nY2MvZGYuaAorKysgYi9nY2MvZGYuaApAQCAtOTg3 LDYgKzk4Nyw3IEBAIGV4dGVybiB2b2lkIGRmX2NoZWNrX2NmZ19jbGVhbiAodm9pZCk7CiAj ZW5kaWYKIGV4dGVybiBkZl9yZWYgZGZfYmJfcmVnbm9fZmlyc3RfZGVmX2ZpbmQgKGJhc2lj X2Jsb2NrLCB1bnNpZ25lZCBpbnQpOwogZXh0ZXJuIGRmX3JlZiBkZl9iYl9yZWdub19sYXN0 X2RlZl9maW5kIChiYXNpY19ibG9jaywgdW5zaWduZWQgaW50KTsKK2V4dGVybiBkZl9yZWYg ZGZfYmJfcmVnbm9fb25seV9kZWZfZmluZCAoYmFzaWNfYmxvY2ssIHVuc2lnbmVkIGludCk7 CiBleHRlcm4gZGZfcmVmIGRmX2ZpbmRfZGVmIChydHhfaW5zbiAqLCBydHgpOwogZXh0ZXJu IGJvb2wgZGZfcmVnX2RlZmluZWQgKHJ0eF9pbnNuICosIHJ0eCk7CiBleHRlcm4gZGZfcmVm IGRmX2ZpbmRfdXNlIChydHhfaW5zbiAqLCBydHgpOwpkaWZmIC0tZ2l0IGEvZ2NjL2xvb3At ZG9sb29wLmNjIGIvZ2NjL2xvb3AtZG9sb29wLmNjCmluZGV4IDRmZWIwYTI1YWI5MzMxYjcx MjRkZjkwMGY3M2M5ZmM2ZmIzZWIxMGIuLmQ5MTkyMDc1MDVjNDcyYzhhNTRhMmM5Yzk4MmEw OTA2MTU4NDE3N2IgMTAwNjQ0Ci0tLSBhL2djYy9sb29wLWRvbG9vcC5jYworKysgYi9nY2Mv bG9vcC1kb2xvb3AuY2MKQEAgLTg1LDEwICs4NSwxMCBAQCBkb2xvb3BfY29uZGl0aW9uX2dl dCAocnR4X2luc24gKmRvbG9vcF9wYXQpCiAgICAgIGZvcm1zOgogCiAgICAgIDEpICAocGFy YWxsZWwgWyhzZXQgKHBjKSAoaWZfdGhlbl9lbHNlIChjb25kaXRpb24pCi0JICAJCQkgICAg ICAgICAgICAobGFiZWxfcmVmIChsYWJlbCkpCi0JCQkJICAgICAgICAgICAgKHBjKSkpCi0J ICAgICAgICAgICAgIChzZXQgKHJlZykgKHBsdXMgKHJlZykgKGNvbnN0X2ludCAtMSkpKQot CSAgICAgICAgICAgICAoYWRkaXRpb25hbCBjbG9iYmVycyBhbmQgdXNlcyldKQorCQkJCQkg ICAgKGxhYmVsX3JlZiAobGFiZWwpKQorCQkJCQkgICAgKHBjKSkpCisJCSAgICAgKHNldCAo cmVnKSAocGx1cyAocmVnKSAoY29uc3RfaW50IC0xKSkpCisJCSAgICAgKGFkZGl0aW9uYWwg Y2xvYmJlcnMgYW5kIHVzZXMpXSkKIAogICAgICBUaGUgYnJhbmNoIG11c3QgYmUgdGhlIGZp cnN0IGVudHJ5IG9mIHRoZSBwYXJhbGxlbCAoYWxzbyByZXF1aXJlZAogICAgICBieSBqdW1w LmNjKSwgYW5kIHRoZSBzZWNvbmQgZW50cnkgb2YgdGhlIHBhcmFsbGVsIG11c3QgYmUgYSBz ZXQgb2YKQEAgLTk2LDE5ICs5NiwzNCBAQCBkb2xvb3BfY29uZGl0aW9uX2dldCAocnR4X2lu c24gKmRvbG9vcF9wYXQpCiAgICAgIHRoZSBsb29wIGNvdW50ZXIgaW4gYW4gaWZfdGhlbl9l bHNlIHRvby4KIAogICAgICAyKSAgKHNldCAocmVnKSAocGx1cyAocmVnKSAoY29uc3RfaW50 IC0xKSkKLSAgICAgICAgIChzZXQgKHBjKSAoaWZfdGhlbl9lbHNlIChyZWcgIT0gMCkKLQkg ICAgICAgICAgICAgICAgICAgICAgICAgKGxhYmVsX3JlZiAobGFiZWwpKQotCQkJICAgICAg ICAgKHBjKSkpLiAgCisJIChzZXQgKHBjKSAoaWZfdGhlbl9lbHNlIChyZWcgIT0gMCkKKwkJ CQkgKGxhYmVsX3JlZiAobGFiZWwpKQorCQkJCSAocGMpKSkuCiAKICAgICAgU29tZSB0YXJn ZXRzIChBUk0pIGRvIHRoZSBjb21wYXJpc29uIGJlZm9yZSB0aGUgYnJhbmNoLCBhcyBpbiB0 aGUKICAgICAgZm9sbG93aW5nIGZvcm06CiAKLSAgICAgMykgKHBhcmFsbGVsIFsoc2V0IChj YykgKGNvbXBhcmUgKChwbHVzIChyZWcpIChjb25zdF9pbnQgLTEpLCAwKSkpCi0gICAgICAg ICAgICAgICAgICAgKHNldCAocmVnKSAocGx1cyAocmVnKSAoY29uc3RfaW50IC0xKSkpXSkK LSAgICAgICAgKHNldCAocGMpIChpZl90aGVuX2Vsc2UgKGNjID09IE5FKQotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAobGFiZWxfcmVmIChsYWJlbCkpCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIChwYykpKSAqLwotCisgICAgIDMpIChwYXJhbGxlbCBb KHNldCAoY2MpIChjb21wYXJlIChwbHVzIChyZWcpIChjb25zdF9pbnQgLTEpKSAwKSkKKwkJ ICAgKHNldCAocmVnKSAocGx1cyAocmVnKSAoY29uc3RfaW50IC0xKSkpXSkKKwkoc2V0IChw YykgKGlmX3RoZW5fZWxzZSAoY2MgPT0gTkUpCisJCQkJKGxhYmVsX3JlZiAobGFiZWwpKQor CQkJCShwYykpKQorCisgICAgICBUaGUgQVJNIHRhcmdldCBhbHNvIHN1cHBvcnRzIGEgc3Bl Y2lhbCBjYXNlIG9mIGEgY291bnRlciB0aGF0IGRlY3JlbWVudHMKKyAgICAgIGJ5IGBuYCBh bmQgdGVybWluYXRpbmcgaW4gYSBHVFUgY29uZGl0aW9uLiAgSW4gdGhhdCBjYXNlLCB0aGUg Y29tcGFyZSBhbmQKKyAgICAgIGJyYW5jaCBhcmUgYWxsIHBhcnQgb2Ygb25lIGluc24sIGNv bnRhaW5pbmcgYW4gVU5TUEVDOgorCisgICAgICA0KSAocGFyYWxsZWwgWworCSAgICAoc2V0 IChwYykKKwkJKGlmX3RoZW5fZWxzZSAoZ3R1ICh1bnNwZWM6U0kgWyhwbHVzOlNJIChyZWc6 U0kgMTQgbHIpCisJCQkJCQkJKGNvbnN0X2ludCAtbikpXSkKKwkJCQkgICAoY29uc3RfaW50 IG4tMV0pKQorCQkgICAgKGxhYmVsX3JlZikKKwkJICAgIChwYykpKQorCSAgICAoc2V0IChy ZWc6U0kgMTQgbHIpCisJCSAocGx1czpTSSAocmVnOlNJIDE0IGxyKQorCQkJICAoY29uc3Rf aW50IC1uKSkpCisgICAgICovCiAgIHBhdHRlcm4gPSBQQVRURVJOIChkb2xvb3BfcGF0KTsK IAogICBpZiAoR0VUX0NPREUgKHBhdHRlcm4pICE9IFBBUkFMTEVMKQpAQCAtMTQzLDcgKzE1 OCw3IEBAIGRvbG9vcF9jb25kaXRpb25fZ2V0IChydHhfaW5zbiAqZG9sb29wX3BhdCkKIAkg ICAgICB8fCBHRVRfQ09ERSAoY21wX2FyZzEpICE9IFBMVVMpCiAJICAgIHJldHVybiAwOwog CSAgcmVnX29yaWcgPSBYRVhQIChjbXBfYXJnMSwgMCk7Ci0JICBpZiAoWEVYUCAoY21wX2Fy ZzEsIDEpICE9IEdFTl9JTlQgKC0xKSAKKwkgIGlmIChYRVhQIChjbXBfYXJnMSwgMSkgIT0g R0VOX0lOVCAoLTEpCiAJICAgICAgfHwgIVJFR19QIChyZWdfb3JpZykpCiAJICAgIHJldHVy biAwOwogCSAgY2NfcmVnID0gU0VUX0RFU1QgKGNtcF9vcmlnKTsKQEAgLTE3MywxNSArMTg4 LDE3IEBAIGRvbG9vcF9jb25kaXRpb25fZ2V0IChydHhfaW5zbiAqZG9sb29wX3BhdCkKICAg aWYgKCEgUkVHX1AgKHJlZykpCiAgICAgcmV0dXJuIDA7CiAKLSAgLyogQ2hlY2sgaWYgc29t ZXRoaW5nID0gKHBsdXMgKHJlZykgKGNvbnN0X2ludCAtMSkpLgorICAvKiBDaGVjayBpZiBz b21ldGhpbmcgPSAocGx1cyAocmVnKSAoY29uc3RfaW50IC1uKSkuCiAgICAgIE9uIElBLTY0 LCB0aGlzIGRlY3JlbWVudCBpcyB3cmFwcGVkIGluIGFuIGlmX3RoZW5fZWxzZS4gICovCiAg IGluY19zcmMgPSBTRVRfU1JDIChpbmMpOwogICBpZiAoR0VUX0NPREUgKGluY19zcmMpID09 IElGX1RIRU5fRUxTRSkKICAgICBpbmNfc3JjID0gWEVYUCAoaW5jX3NyYywgMSk7CiAgIGlm IChHRVRfQ09ERSAoaW5jX3NyYykgIT0gUExVUwogICAgICAgfHwgWEVYUCAoaW5jX3NyYywg MCkgIT0gcmVnCi0gICAgICB8fCBYRVhQIChpbmNfc3JjLCAxKSAhPSBjb25zdG0xX3J0eCkK KyAgICAgIHx8ICFDT05TVF9JTlRfUCAoWEVYUCAoaW5jX3NyYywgMSkpCisgICAgICB8fCBJ TlRWQUwgKFhFWFAgKGluY19zcmMsIDEpKSA+PSAwKQogICAgIHJldHVybiAwOworICBpbnQg ZGVjX251bSA9IGFicyAoSU5UVkFMIChYRVhQIChpbmNfc3JjLCAxKSkpOwogCiAgIC8qIENo ZWNrIGZvciAoc2V0IChwYykgKGlmX3RoZW5fZWxzZSAoY29uZGl0aW9uKQogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxhYmVsX3JlZiAobGFiZWwpKQpAQCAt MTk2LDYwICsyMTMsNzEgQEAgZG9sb29wX2NvbmRpdGlvbl9nZXQgKHJ0eF9pbnNuICpkb2xv b3BfcGF0KQogICAvKiBFeHRyYWN0IGxvb3AgdGVybWluYXRpb24gY29uZGl0aW9uLiAgKi8K ICAgY29uZGl0aW9uID0gWEVYUCAoU0VUX1NSQyAoY21wKSwgMCk7CiAKLSAgLyogV2UgZXhw ZWN0IGEgR0Ugb3IgTkUgY29tcGFyaXNvbiB3aXRoIDAgb3IgMS4gICovCi0gIGlmICgoR0VU X0NPREUgKGNvbmRpdGlvbikgIT0gR0UKLSAgICAgICAmJiBHRVRfQ09ERSAoY29uZGl0aW9u KSAhPSBORSkKLSAgICAgIHx8IChYRVhQIChjb25kaXRpb24sIDEpICE9IGNvbnN0MF9ydHgK LSAgICAgICAgICAmJiBYRVhQIChjb25kaXRpb24sIDEpICE9IGNvbnN0MV9ydHgpKQorICAv KiBXZSBleHBlY3QgYSBHRSBvciBORSBjb21wYXJpc29uIHdpdGggMCBvciAxLCBvciBhIEdU VSBjb21wYXJpc29uIHdpdGgKKyAgICAgZGVjX251bSAtIDEuICAqLworICBpZiAoISgoR0VU X0NPREUgKGNvbmRpdGlvbikgPT0gR0UKKwkgfHwgR0VUX0NPREUgKGNvbmRpdGlvbikgPT0g TkUpCisJJiYgKFhFWFAgKGNvbmRpdGlvbiwgMSkgPT0gY29uc3QwX3J0eAorCSAgICB8fCBY RVhQIChjb25kaXRpb24sIDEpID09IGNvbnN0MV9ydHggKSkKKyAgICAgICYmIShHRVRfQ09E RSAoY29uZGl0aW9uKSA9PSBHVFUKKwkgICYmICgoSU5UVkFMIChYRVhQIChjb25kaXRpb24s IDEpKSkgPT0gKGRlY19udW0gLSAxKSkpKQogICAgIHJldHVybiAwOwogCi0gIGlmICgoWEVY UCAoY29uZGl0aW9uLCAwKSA9PSByZWcpCisgIC8qIEZvciB0aGUgQVJNIHNwZWNpYWwgY2Fz ZSBvZiBoYXZpbmcgYSBHVFU6IHJlLWZvcm0gdGhlIGNvbmRpdGlvbiB3aXRob3V0CisgICAg IHRoZSB1bnNwZWMgZm9yIHRoZSBiZW5lZml0IG9mIHRoZSBtaWRkbGUtZW5kLiAgKi8KKyAg aWYgKEdFVF9DT0RFIChjb25kaXRpb24pID09IEdUVSkKKyAgICB7CisgICAgICBjb25kaXRp b24gPSBnZW5fcnR4X2ZtdF9lZSAoR1RVLCBWT0lEbW9kZSwgaW5jX3NyYywKKwkJCQkgIEdF Tl9JTlQgKGRlY19udW0gLSAxKSk7CisgICAgICByZXR1cm4gY29uZGl0aW9uOworICAgIH0K KyAgZWxzZSBpZiAoKFhFWFAgKGNvbmRpdGlvbiwgMCkgPT0gcmVnKQogICAgICAgLyogRm9y IHRoZSB0aGlyZCBjYXNlOiAgKi8gIAogICAgICAgfHwgKChjY19yZWcgIT0gTlVMTF9SVFgp CiAJICAmJiAoWEVYUCAoY29uZGl0aW9uLCAwKSA9PSBjY19yZWcpCiAJICAmJiAocmVnX29y aWcgPT0gcmVnKSkKICAgICAgIHx8IChHRVRfQ09ERSAoWEVYUCAoY29uZGl0aW9uLCAwKSkg PT0gUExVUwogCSAgJiYgWEVYUCAoWEVYUCAoY29uZGl0aW9uLCAwKSwgMCkgPT0gcmVnKSkK LSAgIHsKKyAgICB7CiAgICAgIGlmIChHRVRfQ09ERSAocGF0dGVybikgIT0gUEFSQUxMRUwp CiAgICAgIC8qICBGb3IgdGhlIHNlY29uZCBmb3JtIHdlIGV4cGVjdDoKIAotICAgICAgICAg KHNldCAocmVnKSAocGx1cyAocmVnKSAoY29uc3RfaW50IC0xKSkKLSAgICAgICAgIChzZXQg KHBjKSAoaWZfdGhlbl9lbHNlIChyZWcgIT0gMCkKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIChsYWJlbF9yZWYgKGxhYmVsKSkKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIChwYykpKS4KKwkgKHNldCAocmVnKSAocGx1cyAocmVnKSAoY29uc3RfaW50 IC0xKSkKKwkgKHNldCAocGMpIChpZl90aGVuX2Vsc2UgKHJlZyAhPSAwKQorCQkJCSAobGFi ZWxfcmVmIChsYWJlbCkpCisJCQkJIChwYykpKS4KIAotICAgICAgICAgaXMgZXF1aXZhbGVu dCB0byB0aGUgZm9sbG93aW5nOgorCSBpcyBlcXVpdmFsZW50IHRvIHRoZSBmb2xsb3dpbmc6 CiAKLSAgICAgICAgIChwYXJhbGxlbCBbKHNldCAocGMpIChpZl90aGVuX2Vsc2UgKHJlZyAh PSAxKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGFi ZWxfcmVmIChsYWJlbCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIChwYykpKQotICAgICAgICAgICAgICAgICAgICAgKHNldCAocmVnKSAocGx1cyAo cmVnKSAoY29uc3RfaW50IC0xKSkpCi0gICAgICAgICAgICAgICAgICAgICAoYWRkaXRpb25h bCBjbG9iYmVycyBhbmQgdXNlcyldKQorCSAocGFyYWxsZWwgWyhzZXQgKHBjKSAoaWZfdGhl bl9lbHNlIChyZWcgIT0gMSkKKwkJCQkJICAgIChsYWJlbF9yZWYgKGxhYmVsKSkKKwkJCQkJ ICAgIChwYykpKQorCQkgICAgIChzZXQgKHJlZykgKHBsdXMgKHJlZykgKGNvbnN0X2ludCAt MSkpKQorCQkgICAgIChhZGRpdGlvbmFsIGNsb2JiZXJzIGFuZCB1c2VzKV0pCiAKLSAgICAg ICAgRm9yIHRoZSB0aGlyZCBmb3JtIHdlIGV4cGVjdDoKKwlGb3IgdGhlIHRoaXJkIGZvcm0g d2UgZXhwZWN0OgogCi0gICAgICAgIChwYXJhbGxlbCBbKHNldCAoY2MpIChjb21wYXJlICgo cGx1cyAocmVnKSAoY29uc3RfaW50IC0xKSksIDApKQotICAgICAgICAgICAgICAgICAgIChz ZXQgKHJlZykgKHBsdXMgKHJlZykgKGNvbnN0X2ludCAtMSkpKV0pCi0gICAgICAgIChzZXQg KHBjKSAoaWZfdGhlbl9lbHNlIChjYyA9PSBORSkKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKGxhYmVsX3JlZiAobGFiZWwpKQotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAocGMpKSkgCisJKHBhcmFsbGVsIFsoc2V0IChjYykgKGNvbXBhcmUgKChwbHVz IChyZWcpIChjb25zdF9pbnQgLTEpKSwgMCkpCisJCSAgIChzZXQgKHJlZykgKHBsdXMgKHJl ZykgKGNvbnN0X2ludCAtMSkpKV0pCisJKHNldCAocGMpIChpZl90aGVuX2Vsc2UgKGNjID09 IE5FKQorCQkJCShsYWJlbF9yZWYgKGxhYmVsKSkKKwkJCQkocGMpKSkgCiAKLSAgICAgICAg d2hpY2ggaXMgZXF1aXZhbGVudCB0byB0aGUgZm9sbG93aW5nOgorCXdoaWNoIGlzIGVxdWl2 YWxlbnQgdG8gdGhlIGZvbGxvd2luZzoKIAotICAgICAgICAocGFyYWxsZWwgWyhzZXQgKGNj KSAoY29tcGFyZSAocmVnLCAgMSkpCi0gICAgICAgICAgICAgICAgICAgKHNldCAocmVnKSAo cGx1cyAocmVnKSAoY29uc3RfaW50IC0xKSkpCi0gICAgICAgICAgICAgICAgICAgKHNldCAo cGMpIChpZl90aGVuX2Vsc2UgKE5FID09IGNjKQotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIChsYWJlbF9yZWYgKGxhYmVsKSkKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocGMpKSkpXSkKKwkocGFyYWxsZWwgWyhz ZXQgKGNjKSAoY29tcGFyZSAocmVnLCAgMSkpCisJCSAgIChzZXQgKHJlZykgKHBsdXMgKHJl ZykgKGNvbnN0X2ludCAtMSkpKQorCQkgICAoc2V0IChwYykgKGlmX3RoZW5fZWxzZSAoTkUg PT0gY2MpCisJCQkJCSAgIChsYWJlbF9yZWYgKGxhYmVsKSkKKwkJCQkJICAgKHBjKSkpKV0p CiAKLSAgICAgICAgU28gd2UgcmV0dXJuIHRoZSBzZWNvbmQgZm9ybSBpbnN0ZWFkIGZvciB0 aGUgdHdvIGNhc2VzLgorCVNvIHdlIHJldHVybiB0aGUgc2Vjb25kIGZvcm0gaW5zdGVhZCBm b3IgdGhlIHR3byBjYXNlcy4KIAogICAgICAqLwotICAgICAgICBjb25kaXRpb24gPSBnZW5f cnR4X2ZtdF9lZSAoTkUsIFZPSURtb2RlLCBpbmNfc3JjLCBjb25zdDFfcnR4KTsKKwljb25k aXRpb24gPSBnZW5fcnR4X2ZtdF9lZSAoTkUsIFZPSURtb2RlLCBpbmNfc3JjLCBjb25zdDFf cnR4KTsKIAogICAgIHJldHVybiBjb25kaXRpb247Ci0gICB9CisgICAgfQogCiAgIC8qID8/ PyBJZiBhIG1hY2hpbmUgdXNlcyBhIGZ1bm55IGNvbXBhcmlzb24sIHdlIGNvdWxkIHJldHVy biBhCiAgICAgIGNhbm9uaWNhbGl6ZWQgZm9ybSBoZXJlLiAgKi8KQEAgLTUwNyw2ICs1MzUs MTEgQEAgZG9sb29wX21vZGlmeSAoY2xhc3MgbG9vcCAqbG9vcCwgY2xhc3Mgbml0ZXJfZGVz YyAqZGVzYywKIAlub25uZWcgPSAxOwogICAgICAgYnJlYWs7CiAKKyAgICBjYXNlIEdUVToK KyAgICAgIC8qIFRoZSBpdGVyYXRpb24gY291bnQgZG9lcyBub3QgbmVlZCBpbmNyZW1lbnRp bmcgZm9yIGEgR1RVIHRlc3QuICAqLworICAgICAgaW5jcmVtZW50X2NvdW50ID0gZmFsc2U7 CisgICAgICBicmVhazsKKwogICAgICAgLyogQWJvcnQgaWYgYW4gaW52YWxpZCBkb2xvb3Ag cGF0dGVybiBoYXMgYmVlbiBnZW5lcmF0ZWQuICAqLwogICAgIGRlZmF1bHQ6CiAgICAgICBn Y2NfdW5yZWFjaGFibGUgKCk7CkBAIC01MjksNiArNTYyLDEwIEBAIGRvbG9vcF9tb2RpZnkg KGNsYXNzIGxvb3AgKmxvb3AsIGNsYXNzIG5pdGVyX2Rlc2MgKmRlc2MsCiAKICAgaWYgKGRl c2MtPm5vbG9vcF9hc3N1bXB0aW9ucykKICAgICB7CisgICAgICAvKiBUaGUgR1RVIGNhc2Ug aGFzIG9ubHkgYmVlbiBpbXBsZW1lbnRlZCBmb3IgdGhlIEFSTSB0YXJnZXQsIHdoZXJlCisJ IG5vbG9vcF9hc3N1bXB0aW9ucyBnZXRzIGV4cGxpY2l0bHkgc2V0IHRvIE5VTEwgZm9yIHRo YXQgY2FzZSwgc28KKwkgYXNzZXJ0IGhlcmUgZm9yIHNhZmV0eS4gICovCisgICAgICBnY2Nf YXNzZXJ0IChHRVRfQ09ERSAoY29uZGl0aW9uKSAhPSBHVFUpOwogICAgICAgcnR4IGFzcyA9 IGNvcHlfcnR4IChkZXNjLT5ub2xvb3BfYXNzdW1wdGlvbnMpOwogICAgICAgYmFzaWNfYmxv Y2sgcHJlaGVhZGVyID0gbG9vcF9wcmVoZWFkZXJfZWRnZSAobG9vcCktPnNyYzsKICAgICAg IGJhc2ljX2Jsb2NrIHNldF96ZXJvID0gc3BsaXRfZWRnZSAobG9vcF9wcmVoZWFkZXJfZWRn ZSAobG9vcCkpOwpAQCAtNjQyLDcgKzY3OSw3IEBAIGRvbG9vcF9vcHRpbWl6ZSAoY2xhc3Mg bG9vcCAqbG9vcCkKIHsKICAgc2NhbGFyX2ludF9tb2RlIG1vZGU7CiAgIHJ0eCBkb2xvb3Bf cmVnOwotICBydHggY291bnQ7CisgIHJ0eCBjb3VudCA9IE5VTExfUlRYOwogICB3aWRlc3Rf aW50IGl0ZXJhdGlvbnMsIGl0ZXJhdGlvbnNfbWF4OwogICBydHhfY29kZV9sYWJlbCAqc3Rh cnRfbGFiZWw7CiAgIHJ0eCBjb25kaXRpb247CkBAIC02ODUsMTcgKzcyMiw2IEBAIGRvbG9v cF9vcHRpbWl6ZSAoY2xhc3MgbG9vcCAqbG9vcCkKICAgICAgIHJldHVybiBmYWxzZTsKICAg ICB9CiAKLSAgbWF4X2Nvc3QKLSAgICA9IENPU1RTX05fSU5TTlMgKHBhcmFtX21heF9pdGVy YXRpb25zX2NvbXB1dGF0aW9uX2Nvc3QpOwotICBpZiAoc2V0X3NyY19jb3N0IChkZXNjLT5u aXRlcl9leHByLCBtb2RlLCBvcHRpbWl6ZV9sb29wX2Zvcl9zcGVlZF9wIChsb29wKSkKLSAg ICAgID4gbWF4X2Nvc3QpCi0gICAgewotICAgICAgaWYgKGR1bXBfZmlsZSkKLQlmcHJpbnRm IChkdW1wX2ZpbGUsCi0JCSAiRG9sb29wOiBudW1iZXIgb2YgaXRlcmF0aW9ucyB0b28gY29z dGx5IHRvIGNvbXB1dGUuXG4iKTsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KICAg aWYgKGRlc2MtPmNvbnN0X2l0ZXIpCiAgICAgaXRlcmF0aW9ucyA9IHdpZGVzdF9pbnQ6OmZy b20gKHJ0eF9tb2RlX3QgKGRlc2MtPm5pdGVyX2V4cHIsIG1vZGUpLAogCQkJCSAgIFVOU0lH TkVEKTsKQEAgLTcxNiwxMiArNzQyLDI1IEBAIGRvbG9vcF9vcHRpbWl6ZSAoY2xhc3MgbG9v cCAqbG9vcCkKIAogICAvKiBHZW5lcmF0ZSBsb29waW5nIGluc24uICBJZiB0aGUgcGF0dGVy biBGQUlMcyB0aGVuIGdpdmUgdXAgdHJ5aW5nCiAgICAgIHRvIG1vZGlmeSB0aGUgbG9vcCBz aW5jZSB0aGVyZSBpcyBzb21lIGFzcGVjdCB0aGUgYmFjay1lbmQgZG9lcwotICAgICBub3Qg bGlrZS4gICovCi0gIGNvdW50ID0gY29weV9ydHggKGRlc2MtPm5pdGVyX2V4cHIpOworICAg ICBub3QgbGlrZS4gIElmIHRoaXMgc3VjY2VlZHMsIHRoZXJlIGlzIGEgY2hhbmNlIHRoYXQg dGhlIGxvb3AKKyAgICAgZGVzYy0+bml0ZXJfZXhwciBoYXMgYmVlbiBhbHRlcmVkIGJ5IHRo ZSBiYWNrZW5kLCBzbyBvbmx5IGV4dHJhY3QKKyAgICAgdGhhdCBkYXRhIGFmdGVyIHRoZSBn ZW5fZG9sb29wX2VuZC4gICovCiAgIHN0YXJ0X2xhYmVsID0gYmxvY2tfbGFiZWwgKGRlc2Mt PmluX2VkZ2UtPmRlc3QpOwogICBkb2xvb3BfcmVnID0gZ2VuX3JlZ19ydHggKG1vZGUpOwog ICBydHhfaW5zbiAqZG9sb29wX3NlcSA9IHRhcmdldG0uZ2VuX2RvbG9vcF9lbmQgKGRvbG9v cF9yZWcsIHN0YXJ0X2xhYmVsKTsKIAorICBtYXhfY29zdAorICAgID0gQ09TVFNfTl9JTlNO UyAocGFyYW1fbWF4X2l0ZXJhdGlvbnNfY29tcHV0YXRpb25fY29zdCk7CisgIGlmIChzZXRf c3JjX2Nvc3QgKGRlc2MtPm5pdGVyX2V4cHIsIG1vZGUsIG9wdGltaXplX2xvb3BfZm9yX3Nw ZWVkX3AgKGxvb3ApKQorICAgICAgPiBtYXhfY29zdCkKKyAgICB7CisgICAgICBpZiAoZHVt cF9maWxlKQorCWZwcmludGYgKGR1bXBfZmlsZSwKKwkJICJEb2xvb3A6IG51bWJlciBvZiBp dGVyYXRpb25zIHRvbyBjb3N0bHkgdG8gY29tcHV0ZS5cbiIpOworICAgICAgcmV0dXJuIGZh bHNlOworICAgIH0KKworICBjb3VudCA9IGNvcHlfcnR4IChkZXNjLT5uaXRlcl9leHByKTsK ICAgd29yZF9tb2RlX3NpemUgPSBHRVRfTU9ERV9QUkVDSVNJT04gKHdvcmRfbW9kZSk7CiAg IHdvcmRfbW9kZV9tYXggPSAoSE9TVF9XSURFX0lOVF8xVSA8PCAod29yZF9tb2RlX3NpemUg LSAxKSA8PCAxKSAtIDE7CiAgIGlmICghIGRvbG9vcF9zZXEKZGlmZiAtLWdpdCBhL2djYy90 ZXN0c3VpdGUvZ2NjLnRhcmdldC9hcm0vbG9iLmggYi9nY2MvdGVzdHN1aXRlL2djYy50YXJn ZXQvYXJtL2xvYi5oCmluZGV4IGZlYWFlN2NjODk5NTliMzE0NzM2ODk4MDEyMDcwMGJiYzNl ODVlY2IuLjM5NDFmZTdhOGI2MjBlNjJhNWY3NDI3MjJiZTFiYTJkMDMxZjVhOGQgMTAwNjQ0 Ci0tLSBhL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9hcm0vbG9iLmgKKysrIGIvZ2NjL3Rl c3RzdWl0ZS9nY2MudGFyZ2V0L2FybS9sb2IuaApAQCAtMSwxNSArMSwxMzEgQEAKICNpbmNs dWRlIDxzdHJpbmcuaD4KLQorI2luY2x1ZGUgPHN0ZGludC5oPgogLyogQ29tbW9uIGNvZGUg Zm9yIGxvYiB0ZXN0cy4gICovCiAKICNkZWZpbmUgTk9fTE9CIGFzbSB2b2xhdGlsZSAoIkAg Y2xvYmJlciBsciIgOiA6IDogImxyIiApCiAKLSNkZWZpbmUgTiAxMDAwMAorI2RlZmluZSBO IDEwMAorCitzdGF0aWMgdm9pZAorcmVzZXRfZGF0YSAoaW50ICphLCBpbnQgKmIsIGludCAq YywgaW50IHgpCit7CisgIG1lbXNldCAoYSwgLTEsIHggKiBzaXplb2YgKCphKSk7CisgIG1l bXNldCAoYiwgLTEsIHggKiBzaXplb2YgKCpiKSk7CisgIG1lbXNldCAoYywgMCwgeCAqIHNp emVvZiAoKmMpKTsKK30KKworc3RhdGljIHZvaWQKK3Jlc2V0X2RhdGE4IChpbnQ4X3QgKmEs IGludDhfdCAqYiwgaW50OF90ICpjLCBpbnQgeCkKK3sKKyAgbWVtc2V0IChhLCAtMSwgeCAq IHNpemVvZiAoKmEpKTsKKyAgbWVtc2V0IChiLCAtMSwgeCAqIHNpemVvZiAoKmIpKTsKKyAg bWVtc2V0IChjLCAwLCB4ICogc2l6ZW9mICgqYykpOworfQorCitzdGF0aWMgdm9pZAorcmVz ZXRfZGF0YTE2IChpbnQxNl90ICphLCBpbnQxNl90ICpiLCBpbnQxNl90ICpjLCBpbnQgeCkK K3sKKyAgbWVtc2V0IChhLCAtMSwgeCAqIHNpemVvZiAoKmEpKTsKKyAgbWVtc2V0IChiLCAt MSwgeCAqIHNpemVvZiAoKmIpKTsKKyAgbWVtc2V0IChjLCAwLCB4ICogc2l6ZW9mICgqYykp OworfQorCitzdGF0aWMgdm9pZAorcmVzZXRfZGF0YTMyIChpbnQzMl90ICphLCBpbnQzMl90 ICpiLCBpbnQzMl90ICpjLCBpbnQgeCkKK3sKKyAgbWVtc2V0IChhLCAtMSwgeCAqIHNpemVv ZiAoKmEpKTsKKyAgbWVtc2V0IChiLCAtMSwgeCAqIHNpemVvZiAoKmIpKTsKKyAgbWVtc2V0 IChjLCAwLCB4ICogc2l6ZW9mICgqYykpOworfQorCitzdGF0aWMgdm9pZAorcmVzZXRfZGF0 YTY0IChpbnQ2NF90ICphLCBpbnQ2NF90ICpjLCBpbnQgeCkKK3sKKyAgbWVtc2V0IChhLCAt MSwgeCAqIHNpemVvZiAoKmEpKTsKKyAgbWVtc2V0IChjLCAwLCB4ICogc2l6ZW9mICgqYykp OworfQorCitzdGF0aWMgdm9pZAorY2hlY2tfcGx1cyAoaW50ICphLCBpbnQgKmIsIGludCAq YywgaW50IHgpCit7CisgIGZvciAoaW50IGkgPSAwOyBpIDwgTjsgaSsrKQorICAgIHsKKyAg ICAgIE5PX0xPQjsKKyAgICAgIGlmIChpIDwgeCkKKwl7CisJICBpZiAoY1tpXSAhPSAoYVtp XSArIGJbaV0pKSBhYm9ydCAoKTsKKwl9CisgICAgICBlbHNlCisJeworCSAgaWYgKGNbaV0g IT0gMCkgYWJvcnQgKCk7CisJfQorICAgIH0KK30KKworc3RhdGljIHZvaWQKK2NoZWNrX3Bs dXM4IChpbnQ4X3QgKmEsIGludDhfdCAqYiwgaW50OF90ICpjLCBpbnQgeCkKK3sKKyAgZm9y IChpbnQgaSA9IDA7IGkgPCBOOyBpKyspCisgICAgeworICAgICAgTk9fTE9COworICAgICAg aWYgKGkgPCB4KQorCXsKKwkgIGlmIChjW2ldICE9IChhW2ldICsgYltpXSkpIGFib3J0ICgp OworCX0KKyAgICAgIGVsc2UKKwl7CisJICBpZiAoY1tpXSAhPSAwKSBhYm9ydCAoKTsKKwl9 CisgICAgfQorfQorCitzdGF0aWMgdm9pZAorY2hlY2tfcGx1czE2IChpbnQxNl90ICphLCBp bnQxNl90ICpiLCBpbnQxNl90ICpjLCBpbnQgeCkKK3sKKyAgZm9yIChpbnQgaSA9IDA7IGkg PCBOOyBpKyspCisgICAgeworICAgICAgTk9fTE9COworICAgICAgaWYgKGkgPCB4KQorCXsK KwkgIGlmIChjW2ldICE9IChhW2ldICsgYltpXSkpIGFib3J0ICgpOworCX0KKyAgICAgIGVs c2UKKwl7CisJICBpZiAoY1tpXSAhPSAwKSBhYm9ydCAoKTsKKwl9CisgICAgfQorfQorCitz dGF0aWMgdm9pZAorY2hlY2tfcGx1czMyIChpbnQzMl90ICphLCBpbnQzMl90ICpiLCBpbnQz Ml90ICpjLCBpbnQgeCkKK3sKKyAgZm9yIChpbnQgaSA9IDA7IGkgPCBOOyBpKyspCisgICAg eworICAgICAgTk9fTE9COworICAgICAgaWYgKGkgPCB4KQorCXsKKwkgIGlmIChjW2ldICE9 IChhW2ldICsgYltpXSkpIGFib3J0ICgpOworCX0KKyAgICAgIGVsc2UKKwl7CisJICBpZiAo Y1tpXSAhPSAwKSBhYm9ydCAoKTsKKwl9CisgICAgfQorfQogCiBzdGF0aWMgdm9pZAotcmVz ZXRfZGF0YSAoaW50ICphLCBpbnQgKmIsIGludCAqYykKK2NoZWNrX21lbWNweTY0IChpbnQ2 NF90ICphLCBpbnQ2NF90ICpjLCBpbnQgeCkKIHsKLSAgbWVtc2V0IChhLCAtMSwgTiAqIHNp emVvZiAoKmEpKTsKLSAgbWVtc2V0IChiLCAtMSwgTiAqIHNpemVvZiAoKmIpKTsKLSAgbWVt c2V0IChjLCAtMSwgTiAqIHNpemVvZiAoKmMpKTsKKyAgZm9yIChpbnQgaSA9IDA7IGkgPCBO OyBpKyspCisgICAgeworICAgICAgTk9fTE9COworICAgICAgaWYgKGkgPCB4KQorCXsKKwkg IGlmIChjW2ldICE9IGFbaV0pIGFib3J0ICgpOworCX0KKyAgICAgIGVsc2UKKwl7CisJICBp ZiAoY1tpXSAhPSAwKSBhYm9ydCAoKTsKKwl9CisgICAgfQogfQpkaWZmIC0tZ2l0IGEvZ2Nj L3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2FybS9sb2IxLmMgYi9nY2MvdGVzdHN1aXRlL2djYy50 YXJnZXQvYXJtL2xvYjEuYwppbmRleCBiYTVjODJjZDU1YzU4MmM5NmExOGFkNDE3YTMwNDFl NDNkODQzNjEzLi5jOGNlNjUzYTVjMzlmYjFmZmNmODJhNmU1ODRkOWEwNDY3YTEzMGMwIDEw MDY0NAotLS0gYS9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvYXJtL2xvYjEuYworKysgYi9n Y2MvdGVzdHN1aXRlL2djYy50YXJnZXQvYXJtL2xvYjEuYwpAQCAtNTQsMjkgKzU0LDE4IEBA IGxvb3AzIChpbnQgKmEsIGludCAqYiwgaW50ICpjKQogICAgIH0gd2hpbGUgKGkgPCBOKTsK IH0KIAotdm9pZAotY2hlY2sgKGludCAqYSwgaW50ICpiLCBpbnQgKmMpCi17Ci0gIGZvciAo aW50IGkgPSAwOyBpIDwgTjsgaSsrKQotICAgIHsKLSAgICAgIE5PX0xPQjsKLSAgICAgIGlm IChjW2ldICE9IGFbaV0gKyBiW2ldKQotCWFib3J0ICgpOwotICAgIH0KLX0KLQogaW50CiBt YWluICh2b2lkKQogewotICByZXNldF9kYXRhIChhLCBiLCBjKTsKKyAgcmVzZXRfZGF0YSAo YSwgYiwgYywgTik7CiAgIGxvb3AxIChhLCBiICxjKTsKLSAgY2hlY2sgKGEsIGIgLGMpOwot ICByZXNldF9kYXRhIChhLCBiLCBjKTsKKyAgY2hlY2tfcGx1cyAoYSwgYiwgYywgTik7Cisg IHJlc2V0X2RhdGEgKGEsIGIsIGMsIE4pOwogICBsb29wMiAoYSwgYiAsYyk7Ci0gIGNoZWNr IChhLCBiICxjKTsKLSAgcmVzZXRfZGF0YSAoYSwgYiwgYyk7CisgIGNoZWNrX3BsdXMgKGEs IGIsIGMsIE4pOworICByZXNldF9kYXRhIChhLCBiLCBjLCBOKTsKICAgbG9vcDMgKGEsIGIg LGMpOwotICBjaGVjayAoYSwgYiAsYyk7CisgIGNoZWNrX3BsdXMgKGEsIGIsIGMsIE4pOwog CiAgIHJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0 L2FybS9sb2I2LmMgYi9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvYXJtL2xvYjYuYwppbmRl eCAxN2I2MTI0Mjk1ZThhZTllMWNiNTdlNDFmYTQzYTk1NGIzMzkwZWVjLi40ZmUxMTZlMmMy YmUzNzQ4ZDFiYjZkYTdiYjkwOTJkYjhmOTYyYWJjIDEwMDY0NAotLS0gYS9nY2MvdGVzdHN1 aXRlL2djYy50YXJnZXQvYXJtL2xvYjYuYworKysgYi9nY2MvdGVzdHN1aXRlL2djYy50YXJn ZXQvYXJtL2xvYjYuYwpAQCAtNzksMTQgKzc5LDE0IEBAIGNoZWNrICh2b2lkKQogaW50CiBt YWluICh2b2lkKQogewotICByZXNldF9kYXRhIChhMSwgYjEsIGMxKTsKLSAgcmVzZXRfZGF0 YSAoYTIsIGIyLCBjMik7CisgIHJlc2V0X2RhdGEgKGExLCBiMSwgYzEsIE4pOworICByZXNl dF9kYXRhIChhMiwgYjIsIGMyLCBOKTsKICAgbG9vcDEgKGExLCBiMSwgYzEpOwogICByZWYx IChhMiwgYjIsIGMyKTsKICAgY2hlY2sgKCk7CiAKLSAgcmVzZXRfZGF0YSAoYTEsIGIxLCBj MSk7Ci0gIHJlc2V0X2RhdGEgKGEyLCBiMiwgYzIpOworICByZXNldF9kYXRhIChhMSwgYjEs IGMxLCBOKTsKKyAgcmVzZXRfZGF0YSAoYTIsIGIyLCBjMiwgTik7CiAgIGxvb3AyIChhMSwg YjEsIGMxKTsKICAgcmVmMiAoYTIsIGIyLCBjMik7CiAgIGNoZWNrICgpOwpkaWZmIC0tZ2l0 IGEvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2FybS9tdmUvZGxzdHAtY29tcGlsZS1hc20u YyBiL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9hcm0vbXZlL2Rsc3RwLWNvbXBpbGUtYXNt LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMC4uNWRkZDk5NGU1M2Q1NWM3YjRkMDViZmI4NThlNjA3OGNlN2Rh NGNlNAotLS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9hcm0v bXZlL2Rsc3RwLWNvbXBpbGUtYXNtLmMKQEAgLTAsMCArMSw1NjEgQEAKKy8qIHsgZGctZG8g Y29tcGlsZSB7IHRhcmdldCB7IGFybSotKi0qIH0gfSB9ICovCisvKiB7IGRnLXJlcXVpcmUt ZWZmZWN0aXZlLXRhcmdldCBhcm1fdjhfMW1fbXZlX29rIH0gKi8KKy8qIHsgZGctb3B0aW9u cyAiLU8zIC1zYXZlLXRlbXBzIiB9ICovCisvKiB7IGRnLWFkZC1vcHRpb25zIGFybV92OF8x bV9tdmUgfSAqLworCisjaW5jbHVkZSA8YXJtX212ZS5oPgorCisjZGVmaW5lIElNTSA1CisK KyNkZWZpbmUgVEVTVF9DT01QSUxFX0lOX0RMU1RQX1RFUk5BUlkoQklUUywgTEFORVMsIExE UlNUUllUUEUsIFRZUEUsIFNJR04sIE5BTUUsIFBSRUQpCQkJCVwKK3ZvaWQgdGVzdF8jI05B TUUjI1BSRUQjI18jI1NJR04jI0JJVFMgKFRZUEUjI0JJVFMjI190ICphLCBUWVBFIyNCSVRT IyNfdCAqYiwgIFRZUEUjI0JJVFMjI190ICpjLCBpbnQgbikJXAorewkJCQkJCQkJCQkJXAor ICB3aGlsZSAobiA+IDApCQkJCQkJCQkJCVwKKyAgICB7CQkJCQkJCQkJCQlcCisgICAgICBt dmVfcHJlZDE2X3QgcCA9IHZjdHAjI0JJVFMjI3EgKG4pOwkJCQkJCVwKKyAgICAgIFRZUEUj I0JJVFMjI3gjI0xBTkVTIyNfdCB2YSA9IHZsZHIjI0xEUlNUUllUUEUjI3Ffel8jI1NJR04j I0JJVFMgKGEsIHApOwkJXAorICAgICAgVFlQRSMjQklUUyMjeCMjTEFORVMjI190IHZiID0g dmxkciMjTERSU1RSWVRQRSMjcV96XyMjU0lHTiMjQklUUyAoYiwgcCk7CQlcCisgICAgICBU WVBFIyNCSVRTIyN4IyNMQU5FUyMjX3QgdmMgPSBOQU1FIyNQUkVEIyNfIyNTSUdOIyNCSVRT ICh2YSwgdmIsIHApOwkJXAorICAgICAgdnN0ciMjTERSU1RSWVRQRSMjcV9wXyMjU0lHTiMj QklUUyAoYywgdmMsIHApOwkJCQkJXAorICAgICAgYyArPSBMQU5FUzsJCQkJCQkJCQlcCisg ICAgICBhICs9IExBTkVTOwkJCQkJCQkJCVwKKyAgICAgIGIgKz0gTEFORVM7CQkJCQkJCQkJ XAorICAgICAgbiAtPSBMQU5FUzsJCQkJCQkJCQlcCisgICAgfQkJCQkJCQkJCQkJXAorfQor CisjZGVmaW5lIFRFU1RfQ09NUElMRV9JTl9ETFNUUF9TSUdORURfVU5TSUdORURfVEVSTkFS WShCSVRTLCBMQU5FUywgTERSU1RSWVRQRSwgTkFNRSwgUFJFRCkJXAorVEVTVF9DT01QSUxF X0lOX0RMU1RQX1RFUk5BUlkgKEJJVFMsIExBTkVTLCBMRFJTVFJZVFBFLCBpbnQsIHMsIE5B TUUsIFBSRUQpCQkJXAorVEVTVF9DT01QSUxFX0lOX0RMU1RQX1RFUk5BUlkgKEJJVFMsIExB TkVTLCBMRFJTVFJZVFBFLCB1aW50LCB1LCBOQU1FLCBQUkVEKQorCisjZGVmaW5lIFRFU1Rf Q09NUElMRV9JTl9ETFNUUF9JTlRCSVRTX1NJR05FRF9VTlNJR05FRF9URVJOQVJZKE5BTUUs IFBSRUQpCQkJXAorVEVTVF9DT01QSUxFX0lOX0RMU1RQX1NJR05FRF9VTlNJR05FRF9URVJO QVJZICg4LCAxNiwgYiwgTkFNRSwgUFJFRCkJCQkJXAorVEVTVF9DT01QSUxFX0lOX0RMU1RQ X1NJR05FRF9VTlNJR05FRF9URVJOQVJZICgxNiwgOCwgaCwgTkFNRSwgUFJFRCkJCQkJXAor VEVTVF9DT01QSUxFX0lOX0RMU1RQX1NJR05FRF9VTlNJR05FRF9URVJOQVJZICgzMiwgNCwg dywgTkFNRSwgUFJFRCkKKworCitURVNUX0NPTVBJTEVfSU5fRExTVFBfSU5UQklUU19TSUdO RURfVU5TSUdORURfVEVSTkFSWSAodmFkZHEsIF94KQorVEVTVF9DT01QSUxFX0lOX0RMU1RQ X0lOVEJJVFNfU0lHTkVEX1VOU0lHTkVEX1RFUk5BUlkgKHZtdWxxLCBfeCkKK1RFU1RfQ09N UElMRV9JTl9ETFNUUF9JTlRCSVRTX1NJR05FRF9VTlNJR05FRF9URVJOQVJZICh2c3VicSwg X3gpCitURVNUX0NPTVBJTEVfSU5fRExTVFBfSU5UQklUU19TSUdORURfVU5TSUdORURfVEVS TkFSWSAodmhhZGRxLCBfeCkKK1RFU1RfQ09NUElMRV9JTl9ETFNUUF9JTlRCSVRTX1NJR05F RF9VTlNJR05FRF9URVJOQVJZICh2b3JycSwgX3gpCisKKworI2RlZmluZSBURVNUX0NPTVBJ TEVfSU5fRExTVFBfVEVSTkFSWV9NKEJJVFMsIExBTkVTLCBMRFJTVFJZVFBFLCBUWVBFLCBT SUdOLCBOQU1FLCBQUkVEKQkJCQlcCit2b2lkIHRlc3RfIyNOQU1FIyNQUkVEIyNfIyNTSUdO IyNCSVRTIChUWVBFIyNCSVRTIyN4IyNMQU5FUyMjX3QgX19pbmFjdGl2ZSwgVFlQRSMjQklU UyMjX3QgKmEsIFRZUEUjI0JJVFMjI190ICpiLCAgVFlQRSMjQklUUyMjX3QgKmMsIGludCBu KQlcCit7CQkJCQkJCQkJCQlcCisgIHdoaWxlIChuID4gMCkJCQkJCQkJCQkJXAorICAgIHsJ CQkJCQkJCQkJCVwKKyAgICAgIG12ZV9wcmVkMTZfdCBwID0gdmN0cCMjQklUUyMjcSAobik7 CQkJCQkJXAorICAgICAgVFlQRSMjQklUUyMjeCMjTEFORVMjI190IHZhID0gdmxkciMjTERS U1RSWVRQRSMjcV96XyMjU0lHTiMjQklUUyAoYSwgcCk7CQlcCisgICAgICBUWVBFIyNCSVRT IyN4IyNMQU5FUyMjX3QgdmIgPSB2bGRyIyNMRFJTVFJZVFBFIyNxX3pfIyNTSUdOIyNCSVRT IChiLCBwKTsJCVwKKyAgICAgIFRZUEUjI0JJVFMjI3gjI0xBTkVTIyNfdCB2YyA9IE5BTUUj I1BSRUQjI18jI1NJR04jI0JJVFMgKF9faW5hY3RpdmUsIHZhLCB2YiwgcCk7CQlcCisgICAg ICB2c3RyIyNMRFJTVFJZVFBFIyNxX3BfIyNTSUdOIyNCSVRTIChjLCB2YywgcCk7CQkJCQlc CisgICAgICBjICs9IExBTkVTOwkJCQkJCQkJCVwKKyAgICAgIGEgKz0gTEFORVM7CQkJCQkJ CQkJXAorICAgICAgYiArPSBMQU5FUzsJCQkJCQkJCQlcCisgICAgICBuIC09IExBTkVTOwkJ CQkJCQkJCVwKKyAgICB9CQkJCQkJCQkJCQlcCit9CisKKyNkZWZpbmUgVEVTVF9DT01QSUxF X0lOX0RMU1RQX1NJR05FRF9VTlNJR05FRF9URVJOQVJZX00oQklUUywgTEFORVMsIExEUlNU UllUUEUsIE5BTUUsIFBSRUQpCVwKK1RFU1RfQ09NUElMRV9JTl9ETFNUUF9URVJOQVJZX00g KEJJVFMsIExBTkVTLCBMRFJTVFJZVFBFLCBpbnQsIHMsIE5BTUUsIFBSRUQpCQkJXAorVEVT VF9DT01QSUxFX0lOX0RMU1RQX1RFUk5BUllfTSAoQklUUywgTEFORVMsIExEUlNUUllUUEUs IHVpbnQsIHUsIE5BTUUsIFBSRUQpCisKKyNkZWZpbmUgVEVTVF9DT01QSUxFX0lOX0RMU1RQ X0lOVEJJVFNfU0lHTkVEX1VOU0lHTkVEX1RFUk5BUllfTShOQU1FLCBQUkVEKQkJCVwKK1RF U1RfQ09NUElMRV9JTl9ETFNUUF9TSUdORURfVU5TSUdORURfVEVSTkFSWV9NICg4LCAxNiwg YiwgTkFNRSwgUFJFRCkJCQkJXAorVEVTVF9DT01QSUxFX0lOX0RMU1RQX1NJR05FRF9VTlNJ R05FRF9URVJOQVJZX00gKDE2LCA4LCBoLCBOQU1FLCBQUkVEKQkJCQlcCitURVNUX0NPTVBJ TEVfSU5fRExTVFBfU0lHTkVEX1VOU0lHTkVEX1RFUk5BUllfTSAoMzIsIDQsIHcsIE5BTUUs IFBSRUQpCisKKworVEVTVF9DT01QSUxFX0lOX0RMU1RQX0lOVEJJVFNfU0lHTkVEX1VOU0lH TkVEX1RFUk5BUllfTSAodmFkZHEsIF9tKQorVEVTVF9DT01QSUxFX0lOX0RMU1RQX0lOVEJJ VFNfU0lHTkVEX1VOU0lHTkVEX1RFUk5BUllfTSAodm11bHEsIF9tKQorVEVTVF9DT01QSUxF X0lOX0RMU1RQX0lOVEJJVFNfU0lHTkVEX1VOU0lHTkVEX1RFUk5BUllfTSAodnN1YnEsIF9t KQorVEVTVF9DT01QSUxFX0lOX0RMU1RQX0lOVEJJVFNfU0lHTkVEX1VOU0lHTkVEX1RFUk5B UllfTSAodmhhZGRxLCBfbSkKK1RFU1RfQ09NUElMRV9JTl9ETFNUUF9JTlRCSVRTX1NJR05F RF9VTlNJR05FRF9URVJOQVJZX00gKHZvcnJxLCBfbSkKKworI2RlZmluZSBURVNUX0NPTVBJ TEVfSU5fRExTVFBfVEVSTkFSWV9OKEJJVFMsIExBTkVTLCBMRFJTVFJZVFBFLCBUWVBFLCBT SUdOLCBOQU1FLCBQUkVEKQlcCit2b2lkIHRlc3RfIyNOQU1FIyNQUkVEIyNfbl8jI1NJR04j I0JJVFMgKFRZUEUjI0JJVFMjI190ICphLCAgVFlQRSMjQklUUyMjX3QgKmMsIGludCBuKQlc Cit7CQkJCQkJCQkJCQlcCisgIHdoaWxlIChuID4gMCkJCQkJCQkJCQkJXAorICAgIHsJCQkJ CQkJCQkJCVwKKyAgICAgIG12ZV9wcmVkMTZfdCBwID0gdmN0cCMjQklUUyMjcSAobik7CQkJ CQkJXAorICAgICAgVFlQRSMjQklUUyMjeCMjTEFORVMjI190IHZhID0gdmxkciMjTERSU1RS WVRQRSMjcV96XyMjU0lHTiMjQklUUyAoYSwgcCk7CQlcCisgICAgICBUWVBFIyNCSVRTIyN4 IyNMQU5FUyMjX3QgdmMgPSBOQU1FIyNQUkVEIyNfbl8jI1NJR04jI0JJVFMgKHZhLCBJTU0s IHApOwkJXAorICAgICAgdnN0ciMjTERSU1RSWVRQRSMjcV9wXyMjU0lHTiMjQklUUyAoYywg dmMsIHApOwkJCQkJXAorICAgICAgYyArPSBMQU5FUzsJCQkJCQkJCQlcCisgICAgICBhICs9 IExBTkVTOwkJCQkJCQkJCVwKKyAgICAgIG4gLT0gTEFORVM7CQkJCQkJCQkJXAorICAgIH0J CQkJCQkJCQkJCVwKK30KKworI2RlZmluZSBURVNUX0NPTVBJTEVfSU5fRExTVFBfU0lHTkVE X1VOU0lHTkVEX1RFUk5BUllfTihCSVRTLCBMQU5FUywgTERSU1RSWVRQRSwgTkFNRSwgUFJF RCkJXAorVEVTVF9DT01QSUxFX0lOX0RMU1RQX1RFUk5BUllfTiAoQklUUywgTEFORVMsIExE UlNUUllUUEUsIGludCwgcywgTkFNRSwgUFJFRCkJCQlcCitURVNUX0NPTVBJTEVfSU5fRExT VFBfVEVSTkFSWV9OIChCSVRTLCBMQU5FUywgTERSU1RSWVRQRSwgdWludCwgdSwgTkFNRSwg UFJFRCkKKworI2RlZmluZSBURVNUX0NPTVBJTEVfSU5fRExTVFBfSU5UQklUU19TSUdORURf VU5TSUdORURfVEVSTkFSWV9OKE5BTUUsIFBSRUQpCQkJXAorVEVTVF9DT01QSUxFX0lOX0RM U1RQX1NJR05FRF9VTlNJR05FRF9URVJOQVJZX04gKDgsIDE2LCBiLCBOQU1FLCBQUkVEKQkJ CQlcCitURVNUX0NPTVBJTEVfSU5fRExTVFBfU0lHTkVEX1VOU0lHTkVEX1RFUk5BUllfTiAo MTYsIDgsIGgsIE5BTUUsIFBSRUQpCQkJCVwKK1RFU1RfQ09NUElMRV9JTl9ETFNUUF9TSUdO RURfVU5TSUdORURfVEVSTkFSWV9OICgzMiwgNCwgdywgTkFNRSwgUFJFRCkKKworVEVTVF9D T01QSUxFX0lOX0RMU1RQX0lOVEJJVFNfU0lHTkVEX1VOU0lHTkVEX1RFUk5BUllfTiAodmFk ZHEsIF94KQorVEVTVF9DT01QSUxFX0lOX0RMU1RQX0lOVEJJVFNfU0lHTkVEX1VOU0lHTkVE X1RFUk5BUllfTiAodm11bHEsIF94KQorVEVTVF9DT01QSUxFX0lOX0RMU1RQX0lOVEJJVFNf U0lHTkVEX1VOU0lHTkVEX1RFUk5BUllfTiAodnN1YnEsIF94KQorVEVTVF9DT01QSUxFX0lO X0RMU1RQX0lOVEJJVFNfU0lHTkVEX1VOU0lHTkVEX1RFUk5BUllfTiAodmhhZGRxLCBfeCkK KworVEVTVF9DT01QSUxFX0lOX0RMU1RQX0lOVEJJVFNfU0lHTkVEX1VOU0lHTkVEX1RFUk5B UllfTiAodmJyc3JxLCBfeCkKK1RFU1RfQ09NUElMRV9JTl9ETFNUUF9JTlRCSVRTX1NJR05F RF9VTlNJR05FRF9URVJOQVJZX04gKHZzaGxxLCBfeCkKK1RFU1RfQ09NUElMRV9JTl9ETFNU UF9JTlRCSVRTX1NJR05FRF9VTlNJR05FRF9URVJOQVJZX04gKHZzaHJxLCBfeCkKKworI2Rl ZmluZSBURVNUX0NPTVBJTEVfSU5fRExTVFBfVEVSTkFSWV9NX04oQklUUywgTEFORVMsIExE UlNUUllUUEUsIFRZUEUsIFNJR04sIE5BTUUsIFBSRUQpCVwKK3ZvaWQgdGVzdF8jI05BTUUj I1BSRUQjI19uXyMjU0lHTiMjQklUUyAoVFlQRSMjQklUUyMjeCMjTEFORVMjI190IF9faW5h Y3RpdmUsIFRZUEUjI0JJVFMjI190ICphLCAgVFlQRSMjQklUUyMjX3QgKmMsIGludCBuKQlc Cit7CQkJCQkJCQkJCQlcCisgIHdoaWxlIChuID4gMCkJCQkJCQkJCQkJXAorICAgIHsJCQkJ CQkJCQkJCVwKKyAgICAgIG12ZV9wcmVkMTZfdCBwID0gdmN0cCMjQklUUyMjcSAobik7CQkJ CQkJXAorICAgICAgVFlQRSMjQklUUyMjeCMjTEFORVMjI190IHZhID0gdmxkciMjTERSU1RS WVRQRSMjcV96XyMjU0lHTiMjQklUUyAoYSwgcCk7CQlcCisgICAgICBUWVBFIyNCSVRTIyN4 IyNMQU5FUyMjX3QgdmMgPSBOQU1FIyNQUkVEIyNfbl8jI1NJR04jI0JJVFMgKF9faW5hY3Rp dmUsIHZhLCBJTU0sIHApOwkJXAorICAgICAgdnN0ciMjTERSU1RSWVRQRSMjcV9wXyMjU0lH TiMjQklUUyAoYywgdmMsIHApOwkJCQkJXAorICAgICAgYyArPSBMQU5FUzsJCQkJCQkJCQlc CisgICAgICBhICs9IExBTkVTOwkJCQkJCQkJCVwKKyAgICAgIG4gLT0gTEFORVM7CQkJCQkJ CQkJXAorICAgIH0JCQkJCQkJCQkJCVwKK30KKworI2RlZmluZSBURVNUX0NPTVBJTEVfSU5f RExTVFBfU0lHTkVEX1VOU0lHTkVEX1RFUk5BUllfTV9OKEJJVFMsIExBTkVTLCBMRFJTVFJZ VFBFLCBOQU1FLCBQUkVEKQlcCitURVNUX0NPTVBJTEVfSU5fRExTVFBfVEVSTkFSWV9NX04g KEJJVFMsIExBTkVTLCBMRFJTVFJZVFBFLCBpbnQsIHMsIE5BTUUsIFBSRUQpCQkJXAorVEVT VF9DT01QSUxFX0lOX0RMU1RQX1RFUk5BUllfTV9OIChCSVRTLCBMQU5FUywgTERSU1RSWVRQ RSwgdWludCwgdSwgTkFNRSwgUFJFRCkKKworI2RlZmluZSBURVNUX0NPTVBJTEVfSU5fRExT VFBfSU5UQklUU19TSUdORURfVU5TSUdORURfVEVSTkFSWV9NX04oTkFNRSwgUFJFRCkJCQlc CitURVNUX0NPTVBJTEVfSU5fRExTVFBfU0lHTkVEX1VOU0lHTkVEX1RFUk5BUllfTV9OICg4 LCAxNiwgYiwgTkFNRSwgUFJFRCkJCQkJXAorVEVTVF9DT01QSUxFX0lOX0RMU1RQX1NJR05F RF9VTlNJR05FRF9URVJOQVJZX01fTiAoMTYsIDgsIGgsIE5BTUUsIFBSRUQpCQkJCVwKK1RF U1RfQ09NUElMRV9JTl9ETFNUUF9TSUdORURfVU5TSUdORURfVEVSTkFSWV9NX04gKDMyLCA0 LCB3LCBOQU1FLCBQUkVEKQorCitURVNUX0NPTVBJTEVfSU5fRExTVFBfSU5UQklUU19TSUdO RURfVU5TSUdORURfVEVSTkFSWV9NX04gKHZhZGRxLCBfbSkKK1RFU1RfQ09NUElMRV9JTl9E TFNUUF9JTlRCSVRTX1NJR05FRF9VTlNJR05FRF9URVJOQVJZX01fTiAodm11bHEsIF9tKQor VEVTVF9DT01QSUxFX0lOX0RMU1RQX0lOVEJJVFNfU0lHTkVEX1VOU0lHTkVEX1RFUk5BUllf TV9OICh2c3VicSwgX20pCitURVNUX0NPTVBJTEVfSU5fRExTVFBfSU5UQklUU19TSUdORURf VU5TSUdORURfVEVSTkFSWV9NX04gKHZoYWRkcSwgX20pCisKK1RFU1RfQ09NUElMRV9JTl9E TFNUUF9JTlRCSVRTX1NJR05FRF9VTlNJR05FRF9URVJOQVJZX01fTiAodmJyc3JxLCBfbSkK K1RFU1RfQ09NUElMRV9JTl9ETFNUUF9JTlRCSVRTX1NJR05FRF9VTlNJR05FRF9URVJOQVJZ X01fTiAodnNobHEsIF9tKQorVEVTVF9DT01QSUxFX0lOX0RMU1RQX0lOVEJJVFNfU0lHTkVE X1VOU0lHTkVEX1RFUk5BUllfTV9OICh2c2hycSwgX20pCisKKy8qIE5vdyB0ZXN0IHNvbWUg bW9yZSBjb25maWd1cmF0aW9ucy4gICovCisKKy8qIFVzaW5nIGEgPj0xIGNvbmRpdGlvbi4g ICovCit2b2lkIHRlc3QxIChpbnQzMl90ICphLCBpbnQzMl90ICpiLCBpbnQzMl90ICpjLCBp bnQgbikKK3sKKyAgd2hpbGUgKG4gPj0gMSkKKyAgICB7CisgICAgICBtdmVfcHJlZDE2X3Qg cCA9IHZjdHAzMnEgKG4pOworICAgICAgaW50MzJ4NF90IHZhID0gdmxkcndxX3pfczMyIChh LCBwKTsKKyAgICAgIGludDMyeDRfdCB2YiA9IHZsZHJ3cV96X3MzMiAoYiwgcCk7CisgICAg ICBpbnQzMng0X3QgdmMgPSB2YWRkcV94X3MzMiAodmEsIHZiLCBwKTsKKyAgICAgIHZzdHJ3 cV9wX3MzMiAoYywgdmMsIHApOworICAgICAgYys9NDsKKyAgICAgIGErPTQ7CisgICAgICBi Kz00OworICAgICAgbi09NDsKKyAgICB9Cit9CisKKy8qIFRlc3QgYSBmb3IgbG9vcCBmb3Jt YXQgb2YgZGVjcmVtZW50aW5nIHRvIHplcm8gKi8KK2ludDMyX3QgYVtdID0gezAsIDEsIDIs IDMsIDQsIDUsIDYsIDd9Owordm9pZCB0ZXN0MiAoaW50MzJfdCAqYiwgaW50IG51bV9lbGVt cykKK3sKKyAgICBmb3IgKGludCBpID0gbnVtX2VsZW1zOyBpID4gMDsgaS09IDQpCisgICAg eworICAgICAgICBtdmVfcHJlZDE2X3QgcCA9IHZjdHAzMnEgKGkpOworICAgICAgICBpbnQz Mng0X3QgdmEgPSB2bGRyd3Ffel9zMzIgKCYoYVtpXSksIHApOworICAgICAgICB2c3Ryd3Ff cF9zMzIgKGIgKyBpLCB2YSwgcCk7CisgICAgfQorfQorCisvKiBJdGVyYXRpb24gY291bnRl ciBjb3VudGluZyB1cCB0byBudW1faXRlci4gICovCit2b2lkIHRlc3QzICh1aW50OF90ICph LCB1aW50OF90ICpiLCB1aW50OF90ICpjLCBpbnQgbikKK3sKKyAgICBpbnQgbnVtX2l0ZXIg PSAobiArIDE1KS8xNjsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bV9pdGVyOyBpKysp CisgICAgeworICAgICAgICBtdmVfcHJlZDE2X3QgcCA9IHZjdHA4cSAobik7CisgICAgICAg IHVpbnQ4eDE2X3QgdmEgPSB2bGRyYnFfel91OCAoYSwgcCk7CisgICAgICAgIHVpbnQ4eDE2 X3QgdmIgPSB2bGRyYnFfel91OCAoYiwgcCk7CisgICAgICAgIHVpbnQ4eDE2X3QgdmMgPSB2 YWRkcV94X3U4ICh2YSwgdmIsIHApOworICAgICAgICB2c3RyYnFfcF91OCAoYywgdmMsIHAp OworICAgICAgICBuLT0xNjsKKyAgICB9Cit9CisKKy8qIEl0ZXJhdGlvbiBjb3VudGVyIGNv dW50aW5nIGRvd24gZnJvbSBudW1faXRlci4gICovCit2b2lkIHRlc3Q0ICh1aW50OF90ICph LCB1aW50OF90ICpiLCB1aW50OF90ICpjLCBpbnQgbikKK3sKKyAgICBpbnQgbnVtX2l0ZXIg PSAobiArIDE1KS8xNjsKKyAgICBmb3IgKGludCBpID0gbnVtX2l0ZXI7IGkgPiAwOyBpLS0p CisgICAgeworICAgICAgICBtdmVfcHJlZDE2X3QgcCA9IHZjdHA4cSAobik7CisgICAgICAg IHVpbnQ4eDE2X3QgdmEgPSB2bGRyYnFfel91OCAoYSwgcCk7CisgICAgICAgIHVpbnQ4eDE2 X3QgdmIgPSB2bGRyYnFfel91OCAoYiwgcCk7CisgICAgICAgIHVpbnQ4eDE2X3QgdmMgPSB2 YWRkcV94X3U4ICh2YSwgdmIsIHApOworICAgICAgICB2c3RyYnFfcF91OCAoYywgdmMsIHAp OworICAgICAgICBuLT0xNjsKKyAgICB9Cit9CisKKy8qIFVzaW5nIGFuIHVucHJlZGljYXRl ZCBhcml0aG1ldGljIGluc3RydWN0aW9uIHdpdGhpbiB0aGUgbG9vcC4gICovCit2b2lkIHRl c3Q1ICh1aW50OF90ICphLCB1aW50OF90ICpiLCB1aW50OF90ICpjLCAgdWludDhfdCAqZCwg aW50IG4pCit7CisgICAgd2hpbGUgKG4gPiAwKQorICAgIHsKKyAgICAgICAgbXZlX3ByZWQx Nl90IHAgPSB2Y3RwOHEgKG4pOworICAgICAgICB1aW50OHgxNl90IHZhID0gdmxkcmJxX3pf dTggKGEsIHApOworICAgICAgICB1aW50OHgxNl90IHZiID0gdmxkcmJxX3U4IChiKTsKKwkv KiBJcyBhZmZlY3RlZCBieSBpbXBsaWNpdCBwcmVkaWNhdGlvbiwgYmVjYXVzZSB2YiBhbHNv CisJY2FtZSBmcm9tIGFuIHVucHJlZGljYXRlZCBsb2FkLCBidXQgdGhlcmUgaXMgbm8gZnVu Y3Rpb25hbAorCXByb2JsZW0sIGJlY2F1c2UgdGhlIHJlc3VsdCBpcyB1c2VkIGluIGEgcHJl ZGljYXRlZCBzdG9yZS4gICovIAorICAgICAgICB1aW50OHgxNl90IHZjID0gdmFkZHFfdTgg KHZhLCB2Yik7CisgICAgICAgIHVpbnQ4eDE2X3QgdmQgPSB2YWRkcV94X3U4ICh2YSwgdmIs IHApOworICAgICAgICB2c3RyYnFfcF91OCAoYywgdmMsIHApOworICAgICAgICB2c3RyYnFf cF91OCAoZCwgdmQsIHApOworICAgICAgICBuLT0xNjsKKyAgICB9Cit9CisKKy8qIFVzaW5n IGEgZGlmZmVyZW50IFZQUiB2YWx1ZSBmb3Igb25lIGluc3RydWN0aW9uIGluIHRoZSBsb29w LiAgKi8KK3ZvaWQgdGVzdDYgKGludDMyX3QgKmEsIGludDMyX3QgKmIsIGludDMyX3QgKmMs IGludCBuLCBtdmVfcHJlZDE2X3QgcDEpCit7CisgIHdoaWxlIChuID4gMCkKKyAgICB7Cisg ICAgICBtdmVfcHJlZDE2X3QgcCA9IHZjdHAzMnEgKG4pOworICAgICAgaW50MzJ4NF90IHZh ID0gdmxkcndxX3pfczMyIChhLCBwKTsKKyAgICAgIGludDMyeDRfdCB2YiA9IHZsZHJ3cV96 X3MzMiAoYiwgcDEpOworICAgICAgaW50MzJ4NF90IHZjID0gdmFkZHFfeF9zMzIgKHZhLCB2 YiwgcCk7CisgICAgICB2c3Ryd3FfcF9zMzIgKGMsIHZjLCBwKTsKKyAgICAgIGMgKz0gNDsK KyAgICAgIGEgKz0gNDsKKyAgICAgIGIgKz0gNDsKKyAgICAgIG4gLT0gNDsKKyAgICB9Cit9 CisKKy8qIEdlbmVyYXRpbmcgYW5kIHVzaW5nIGFub3RoZXIgVlBSIHZhbHVlIGluIHRoZSBs b29wLCB3aXRoIGEgdmN0cC4KKyAgIFRoZSBkb2xvb3AgbG9naWMgd2lsbCBhbHdheXMgdHJ5 IHRvIGRvIHRoZSB0cmFuc2Zvcm0gb24gdGhlIGZpcnN0CisgICB2Y3RwIGl0IGVuY291bnRl cnMsIHNvIHRoaXMgaXMgc3RpbGwgZXhwZWN0ZWQgdG8gd29yay4gICovCit2b2lkIHRlc3Q3 IChpbnQzMl90ICphLCBpbnQzMl90ICpiLCBpbnQzMl90ICpjLCBpbnQgbiwgaW50IGcpCit7 CisgIHdoaWxlIChuID4gMCkKKyAgICB7CisgICAgICBtdmVfcHJlZDE2X3QgcCA9IHZjdHAz MnEgKG4pOworICAgICAgaW50MzJ4NF90IHZhID0gdmxkcndxX3pfczMyIChhLCBwKTsKKyAg ICAgIG12ZV9wcmVkMTZfdCBwMSA9IHZjdHAzMnEgKGcpOworICAgICAgaW50MzJ4NF90IHZi ID0gdmxkcndxX3pfczMyIChiLCBwMSk7CisgICAgICBpbnQzMng0X3QgdmMgPSB2YWRkcV94 X3MzMiAodmEsIHZiLCBwKTsKKyAgICAgIHZzdHJ3cV9wX3MzMiAoYywgdmMsIHApOworICAg ICAgYyArPSA0OworICAgICAgYSArPSA0OworICAgICAgYiArPSA0OworICAgICAgbiAtPSA0 OworICAgIH0KK30KKworLyogR2VuZXJhdGluZyBhbmQgdXNpbmcgYSBkaWZmZXJlbnQgVlBS IHZhbHVlIGluIHRoZSBsb29wLCB3aXRoIGEgdmN0cCwKKyAgIGJ1dCB0aGlzIHRpbWUgdGhl IHAxIHdpbGwgYWxzbyBjaGFuZ2UgaW4gZXZlcnkgbG9vcCAoc3RpbGwgZmluZSkgICovCit2 b2lkIHRlc3Q4IChpbnQzMl90ICphLCBpbnQzMl90ICpiLCBpbnQzMl90ICpjLCBpbnQgbiwg aW50IGcpCit7CisgIHdoaWxlIChuID4gMCkKKyAgICB7CisgICAgICBtdmVfcHJlZDE2X3Qg cCA9IHZjdHAzMnEgKG4pOworICAgICAgaW50MzJ4NF90IHZhID0gdmxkcndxX3pfczMyIChh LCBwKTsKKyAgICAgIG12ZV9wcmVkMTZfdCBwMSA9IHZjdHAzMnEgKGcpOworICAgICAgaW50 MzJ4NF90IHZiID0gdmxkcndxX3pfczMyIChiLCBwMSk7CisgICAgICBpbnQzMng0X3QgdmMg PSB2YWRkcV94X3MzMiAodmEsIHZiLCBwKTsKKyAgICAgIHZzdHJ3cV9wX3MzMiAoYywgdmMs IHApOworICAgICAgYyArPSA0OworICAgICAgYSArPSA0OworICAgICAgYiArPSA0OworICAg ICAgbiAtPSA0OworICAgICAgZysrOworICAgIH0KK30KKworLyogR2VuZXJhdGluZyBhbmQg dXNpbmcgYSBkaWZmZXJlbnQgVlBSIHZhbHVlIGluIHRoZSBsb29wLCB3aXRoIGEgdmN0cF9t CisgICB0aGF0IGlzIGluZGVwZW5kZW50IG9mIHRoZSBsb29wIHZjdHAgVlBSLiAgKi8KK3Zv aWQgdGVzdDkgKGludDMyX3QgKmEsIGludDMyX3QgKmIsIGludDMyX3QgKmMsIGludCBuLCBt dmVfcHJlZDE2X3QgcDEpCit7CisgIHdoaWxlIChuID4gMCkKKyAgICB7CisgICAgICBtdmVf cHJlZDE2X3QgcCA9IHZjdHAzMnEgKG4pOworICAgICAgaW50MzJ4NF90IHZhID0gdmxkcndx X3pfczMyIChhLCBwKTsKKyAgICAgIG12ZV9wcmVkMTZfdCBwMiA9IHZjdHAzMnFfbSAobiwg cDEpOworICAgICAgaW50MzJ4NF90IHZiID0gdmxkcndxX3pfczMyIChiLCBwMSk7CisgICAg ICBpbnQzMng0X3QgdmMgPSB2YWRkcV94X3MzMiAodmEsIHZiLCBwMik7CisgICAgICB2c3Ry d3FfcF9zMzIgKGMsIHZjLCBwKTsKKyAgICAgIGMgKz0gNDsKKyAgICAgIGEgKz0gNDsKKyAg ICAgIGIgKz0gNDsKKyAgICAgIG4gLT0gNDsKKyAgICB9Cit9CisKKy8qIEdlbmVyYXRpbmcg YW5kIHVzaW5nIGEgZGlmZmVyZW50IFZQUiB2YWx1ZSBpbiB0aGUgbG9vcCwKKyAgIHdpdGgg YSB2Y3RwX20gdGhhdCBpcyB0aWVkIHRvIHRoZSBiYXNlIHZjdHAgVlBSLiAgVGhpcworICAg aXMgc3RpbGwgZmluZSwgYmVjYXVzZSB0aGUgdmN0cF9tIHdpbGwgYmUgdHJhbnNmb3JtZWQK KyAgIGludG8gYSB2Y3RwIGFuZCBiZSBpbXBsaWNpdGx5IHByZWRpY2F0ZWQuICAqLwordm9p ZCB0ZXN0MTAgKGludDMyX3QgKmEsIGludDMyX3QgKmIsIGludDMyX3QgKmMsIGludCBuKQor eworICB3aGlsZSAobiA+IDApCisgICAgeworICAgICAgbXZlX3ByZWQxNl90IHAgPSB2Y3Rw MzJxIChuKTsKKyAgICAgIGludDMyeDRfdCB2YSA9IHZsZHJ3cV96X3MzMiAoYSwgcCk7Cisg ICAgICBtdmVfcHJlZDE2X3QgcDEgPSB2Y3RwMzJxX20gKG4sIHApOworICAgICAgaW50MzJ4 NF90IHZiID0gdmxkcndxX3pfczMyIChiLCBwMSk7CisgICAgICBpbnQzMng0X3QgdmMgPSB2 YWRkcV94X3MzMiAodmEsIHZiLCBwMSk7CisgICAgICB2c3Ryd3FfcF9zMzIgKGMsIHZjLCBw KTsKKyAgICAgIGMgKz0gNDsKKyAgICAgIGEgKz0gNDsKKyAgICAgIGIgKz0gNDsKKyAgICAg IG4gLT0gNDsKKyAgICB9Cit9CisKKy8qIEdlbmVyYXRpbmcgYW5kIHVzaW5nIGEgZGlmZmVy ZW50IFZQUiB2YWx1ZSBpbiB0aGUgbG9vcCwgd2l0aCBhIHZjbXAuICAqLwordm9pZCB0ZXN0 MTEgKGludDMyX3QgKmEsIGludDMyX3QgKmIsIGludDMyX3QgKmMsIGludCBuKQoreworICB3 aGlsZSAobiA+IDApCisgICAgeworICAgICAgbXZlX3ByZWQxNl90IHAgPSB2Y3RwMzJxIChu KTsKKyAgICAgIGludDMyeDRfdCB2YSA9IHZsZHJ3cV96X3MzMiAoYSwgcCk7CisgICAgICBp bnQzMng0X3QgdmIgPSB2bGRyd3Ffel9zMzIgKGIsIHApOworICAgICAgbXZlX3ByZWQxNl90 IHAxID0gdmNtcGVxcV9zMzIgKHZhLCB2Yik7CisgICAgICBpbnQzMng0X3QgdmMgPSB2YWRk cV94X3MzMiAodmEsIHZiLCBwMSk7CisgICAgICB2c3Ryd3FfcF9zMzIgKGMsIHZjLCBwKTsK KyAgICAgIGMgKz0gNDsKKyAgICAgIGEgKz0gNDsKKyAgICAgIGIgKz0gNDsKKyAgICAgIG4g LT0gNDsKKyAgICB9Cit9CisKKy8qIEdlbmVyYXRpbmcgYW5kIHVzaW5nIGEgZGlmZmVyZW50 IFZQUiB2YWx1ZSBpbiB0aGUgbG9vcCwgd2l0aCBhIHZjbXBfbS4gICovCit2b2lkIHRlc3Qx MiAoaW50MzJfdCAqYSwgaW50MzJfdCAqYiwgaW50MzJfdCAqYywgaW50IG4sIG12ZV9wcmVk MTZfdCBwMSkKK3sKKyAgd2hpbGUgKG4gPiAwKQorICAgIHsKKyAgICAgIG12ZV9wcmVkMTZf dCBwID0gdmN0cDMycSAobik7CisgICAgICBpbnQzMng0X3QgdmEgPSB2bGRyd3Ffel9zMzIg KGEsIHApOworICAgICAgaW50MzJ4NF90IHZiID0gdmxkcndxX3pfczMyIChiLCBwKTsKKyAg ICAgIG12ZV9wcmVkMTZfdCBwMiA9IHZjbXBlcXFfbV9zMzIgKHZhLCB2YiwgcDEpOworICAg ICAgaW50MzJ4NF90IHZjID0gdmFkZHFfeF9zMzIgKHZhLCB2YiwgcDIpOworICAgICAgdnN0 cndxX3BfczMyIChjLCB2YywgcCk7CisgICAgICBjICs9IDQ7CisgICAgICBhICs9IDQ7Cisg ICAgICBiICs9IDQ7CisgICAgICBuIC09IDQ7CisgICAgfQorfQorCisvKiBHZW5lcmF0aW5n IGFuZCB1c2luZyBhIGRpZmZlcmVudCBWUFIgdmFsdWUgaW4gdGhlIGxvb3AsIHdpdGggYSB2 Y21wX20gCisgICB0aGF0IGlzIHRpZWQgdG8gdGhlIGJhc2UgdmN0cCBWUFIgKHNhbWUgYXMg YWJvdmUsIHRoaXMgd2lsbCBiZSB0dXJuZWQKKyAgIGludG8gYSB2Y21wIGFuZCBiZSBpbXBs aWNpdGx5IHByZWRpY2F0ZWQpLiAgKi8KK3ZvaWQgdGVzdDEzIChpbnQzMl90ICphLCBpbnQz Ml90ICpiLCBpbnQzMl90ICpjLCBpbnQgbiwgbXZlX3ByZWQxNl90IHAxKQoreworICB3aGls ZSAobiA+IDApCisgICAgeworICAgICAgbXZlX3ByZWQxNl90IHAgPSB2Y3RwMzJxIChuKTsK KyAgICAgIGludDMyeDRfdCB2YSA9IHZsZHJ3cV96X3MzMiAoYSwgcCk7CisgICAgICBpbnQz Mng0X3QgdmIgPSB2bGRyd3Ffel9zMzIgKGIsIHApOworICAgICAgbXZlX3ByZWQxNl90IHAy ID0gdmNtcGVxcV9tX3MzMiAodmEsIHZiLCBwKTsKKyAgICAgIGludDMyeDRfdCB2YyA9IHZh ZGRxX3hfczMyICh2YSwgdmIsIHAyKTsKKyAgICAgIHZzdHJ3cV9wX3MzMiAoYywgdmMsIHAp OworICAgICAgYyArPSA0OworICAgICAgYSArPSA0OworICAgICAgYiArPSA0OworICAgICAg biAtPSA0OworICAgIH0KK30KKworLyogVXNpbmcgYW4gdW5wcmVkaWNhdGVkIG9wIHdpdGgg YSBzY2FsYXIgb3V0cHV0LCB3aGVyZSB0aGUgcmVzdWx0IGlzIHZhbGlkCisgICBvdXRzaWRl IHRoZSBiYi4gIFRoaXMgaXMgdmFsaWQsIGJlY2F1c2UgYWxsIHRoZSBpbnB1dHMgdG8gdGhl IHVucHJlZGljYXRlZAorICAgb3AgYXJlIGNvcnJlY3RseSBwcmVkaWNhdGVkLiAgKi8KK3Vp bnQ4X3QgdGVzdDE0ICh1aW50OF90ICphLCB1aW50OF90ICpiLCB1aW50OF90ICpjLCBpbnQg biwgdWludDh4MTZfdCB2eCkKK3sKKyAgICB1aW50OF90IHN1bSA9IDA7CisgICAgd2hpbGUg KG4gPiAwKQorICAgIHsKKyAgICAgICBtdmVfcHJlZDE2X3QgcCA9IHZjdHA4cSAobik7Cisg ICAgICAgdWludDh4MTZfdCB2YSA9IHZsZHJicV96X3U4IChhLCBwKTsKKyAgICAgICB1aW50 OHgxNl90IHZiID0gdmxkcmJxX3pfdTggKGIsIHApOworICAgICAgIHVpbnQ4eDE2X3QgdmMg PSB2YWRkcV9tX3U4ICh2eCwgdmEsIHZiLCBwKTsKKyAgICAgICBzdW0gKz0gdmFkZHZxX3U4 ICh2Yyk7CisgICAgICAgYSArPSAxNjsKKyAgICAgICBiICs9IDE2OworICAgICAgIG4gLT0g MTY7CisgICAgfQorICAgIHJldHVybiBzdW07Cit9CisKKy8qIFNhbWUgYXMgYWJvdmUsIGJ1 dCB3aXRoIGFub3RoZXIgc2NhbGFyIG9wIGJldHdlZW4gdGhlIHVucHJlZGljYXRlZCBvcCBh bmQKKyAgIHRoZSBzY2FsYXIgb3Agb3V0c2lkZSB0aGUgbG9vcC4gICovCit1aW50OF90IHRl c3QxNSAodWludDhfdCAqYSwgdWludDhfdCAqYiwgdWludDhfdCAqYywgaW50IG4sIHVpbnQ4 eDE2X3QgdngsIGludCBnKQoreworICAgIHVpbnQ4X3Qgc3VtID0gMDsKKyAgICB3aGlsZSAo biA+IDApCisgICAgeworICAgICAgIG12ZV9wcmVkMTZfdCBwID0gdmN0cDhxIChuKTsKKyAg ICAgICB1aW50OHgxNl90IHZhID0gdmxkcmJxX3pfdTggKGEsIHApOworICAgICAgIHVpbnQ4 eDE2X3QgdmIgPSB2bGRyYnFfel91OCAoYiwgcCk7CisgICAgICAgdWludDh4MTZfdCB2YyA9 IHZhZGRxX21fdTggKHZ4LCB2YSwgdmIsIHApOworICAgICAgIHN1bSArPSB2YWRkdnFfdTgg KHZjKTsKKyAgICAgICBzdW0gKz0gZzsKKyAgICAgICBhICs9IDE2OworICAgICAgIGIgKz0g MTY7CisgICAgICAgbiAtPSAxNjsKKyAgICB9CisgICAgcmV0dXJuIHN1bTsKK30KKworLyog VXNpbmcgYW4gdW5wcmVkaWNhdGVkIHZjbXAgdG8gZ2VuZXJhdGUgYSBuZXcgcHJlZGljYXRl IHZhbHVlIGluIHRoZQorICAgbG9vcCBhbmQgdGhlbiB1c2luZyBpdCBpbiBhIHByZWRpY2F0 ZWQgc3RvcmUgaW5zbi4gICovCit2b2lkIHRlc3QxNiAoaW50MzJfdCAqYSwgaW50MzJfdCAq YiwgaW50MzJfdCAqYywgaW50IG4pCit7CisgIHdoaWxlIChuID4gMCkKKyAgICB7CisgICAg ICBtdmVfcHJlZDE2X3QgcCA9IHZjdHAzMnEgKG4pOworICAgICAgaW50MzJ4NF90IHZhID0g dmxkcndxX3pfczMyIChhLCBwKTsKKyAgICAgIGludDMyeDRfdCB2YiA9IHZsZHJ3cV9zMzIg KGIpOworICAgICAgaW50MzJ4NF90IHZjID0gdmFkZHFfeF9zMzIgKHZhLCB2YiwgcCk7Cisg ICAgICBtdmVfcHJlZDE2X3QgcDEgPSB2Y21wZXFxX3MzMiAodmEsIHZjKTsKKyAgICAgIHZz dHJ3cV9wX3MzMiAoYywgdmMsIHAxKTsKKyAgICAgIGMgKz0gNDsKKyAgICAgIGEgKz0gNDsK KyAgICAgIGIgKz0gNDsKKyAgICAgIG4gLT0gNDsKKyAgICB9Cit9CisKKy8qIFVzaW5nIGEg cHJlZGljYXRlZCB2Y21wIHRvIGdlbmVyYXRlIGEgbmV3IHByZWRpY2F0ZSB2YWx1ZSBpbiB0 aGUKKyAgIGxvb3AgYW5kIHRoZW4gdXNpbmcgaXQgaW4gYSBwcmVkaWNhdGVkIHN0b3JlIGlu c24uICAqLwordm9pZCB0ZXN0MTcgKGludDMyX3QgKmEsIGludDMyX3QgKmIsIGludDMyX3Qg KmMsIGludCBuKQoreworICB3aGlsZSAobiA+IDApCisgICAgeworICAgICAgbXZlX3ByZWQx Nl90IHAgPSB2Y3RwMzJxIChuKTsKKyAgICAgIGludDMyeDRfdCB2YSA9IHZsZHJ3cV96X3Mz MiAoYSwgcCk7CisgICAgICBpbnQzMng0X3QgdmIgPSB2bGRyd3Ffel9zMzIgKGIsIHApOwor ICAgICAgaW50MzJ4NF90IHZjID0gdmFkZHFfczMyICh2YSwgdmIpOworICAgICAgbXZlX3By ZWQxNl90IHAxID0gdmNtcGVxcV9tX3MzMiAodmEsIHZjLCBwKTsKKyAgICAgIHZzdHJ3cV9w X3MzMiAoYywgdmMsIHAxKTsKKyAgICAgIGMgKz0gNDsKKyAgICAgIGEgKz0gNDsKKyAgICAg IGIgKz0gNDsKKyAgICAgIG4gLT0gNDsKKyAgICB9Cit9CisKKy8qIFVzaW5nIGFuIGFjcm9z cy12ZWN0b3IgdW5wcmVkaWNhdGVkIGluc3RydWN0aW9uIGluIGEgdmFsaWQgd2F5LgorICAg VGhpcyB0ZXN0cyB0aGF0ICJ2YyIgaGFzIGNvcnJlY3RseSBtYXNrZWQgdGhlIHJpc2t5ICJ2 YiIuICAqLwordWludDE2X3QgdGVzdDE4ICh1aW50MTZfdCAqYSwgdWludDE2X3QgKmIsICB1 aW50MTZfdCAqYywgaW50IG4pCit7CisgIHVpbnQxNng4X3QgdmIgPSB2bGRyaHFfdTE2IChi KTsKKyAgdWludDE2X3QgcmVzID0gMDsKKyAgd2hpbGUgKG4gPiAwKQorICAgIHsKKyAgICAg IG12ZV9wcmVkMTZfdCBwID0gdmN0cDE2cSAobik7CisgICAgICB1aW50MTZ4OF90IHZhID0g dmxkcmhxX3pfdTE2IChhLCBwKTsKKyAgICAgIHVpbnQxNng4X3QgdmMgPSB2YWRkcV94X3Ux NiAodmEsIHZiLCBwKTsKKyAgICAgIHJlcyA9IHZhZGR2cV91MTYgKHZjKTsKKyAgICAgIGMg Kz0gODsKKyAgICAgIGEgKz0gODsKKyAgICAgIGIgKz0gODsKKyAgICAgIG4gLT0gODsKKyAg ICB9CisgIHJldHVybiByZXM7Cit9CisKKy8qIFVzaW5nIGFuIGFjcm9zcy12ZWN0b3IgdW5w cmVkaWNhdGVkIGluc3RydWN0aW9uIHdpdGggYSBzY2FsYXIgZnJvbSBvdXRzaWRlIHRoZSBs b29wLiAgKi8KK3VpbnQxNl90IHRlc3QxOSAodWludDE2X3QgKmEsIHVpbnQxNl90ICpiLCAg dWludDE2X3QgKmMsIGludCBuKQoreworICB1aW50MTZ4OF90IHZiID0gdmxkcmhxX3UxNiAo Yik7CisgIHVpbnQxNl90IHJlcyA9IDA7CisgIHdoaWxlIChuID4gMCkKKyAgICB7CisgICAg ICBtdmVfcHJlZDE2X3QgcCA9IHZjdHAxNnEgKG4pOworICAgICAgdWludDE2eDhfdCB2YSA9 IHZsZHJocV96X3UxNiAoYSwgcCk7CisgICAgICB1aW50MTZ4OF90IHZjID0gdmFkZHFfeF91 MTYgKHZhLCB2YiwgcCk7CisgICAgICByZXMgPSB2YWRkdmFxX3UxNiAocmVzLCB2Yyk7Cisg ICAgICBjICs9IDg7CisgICAgICBhICs9IDg7CisgICAgICBiICs9IDg7CisgICAgICBuIC09 IDg7CisgICAgfQorICByZXR1cm4gcmVzOworfQorCisvKiBVc2luZyBhbiBhY3Jvc3MtdmVj dG9yIHByZWRpY2F0ZWQgaW5zdHJ1Y3Rpb24gaW4gYSB2YWxpZCB3YXkuICAqLwordWludDE2 X3QgIHRlc3QyMCAodWludDE2X3QgKmEsIHVpbnQxNl90ICpiLCAgdWludDE2X3QgKmMsIGlu dCBuKQoreworICB1aW50MTZfdCByZXMgPSAwOworICB3aGlsZSAobiA+IDApCisgICAgewor ICAgICAgbXZlX3ByZWQxNl90IHAgPSB2Y3RwMTZxIChuKTsKKyAgICAgIHVpbnQxNng4X3Qg dmIgPSB2bGRyaHFfdTE2IChiKTsKKyAgICAgIHVpbnQxNng4X3QgdmEgPSB2bGRyaHFfel91 MTYgKGEsIHApOworICAgICAgcmVzID0gdmFkZHZhcV9wX3UxNiAocmVzLCB2YiwgcCk7Cisg ICAgICBjICs9IDg7CisgICAgICBhICs9IDg7CisgICAgICBiICs9IDg7CisgICAgICBuIC09 IDg7CisgICAgfQorICByZXR1cm4gcmVzOworfQorCisvKiBVc2luZyBhbiBhY3Jvc3MtdmVj dG9yIHByZWRpY2F0ZWQgaW5zdHJ1Y3Rpb24gaW4gYSB2YWxpZCB3YXkuICAqLwordWludDE2 X3QgIHRlc3QyMSAodWludDE2X3QgKmEsIHVpbnQxNl90ICpiLCAgdWludDE2X3QgKmMsIGlu dCBuKQoreworICB1aW50MTZfdCByZXMgPSAwOworICB3aGlsZSAobiA+IDApCisgICAgewor ICAgICAgbXZlX3ByZWQxNl90IHAgPSB2Y3RwMTZxIChuKTsKKyAgICAgIHVpbnQxNng4X3Qg dmIgPSB2bGRyaHFfdTE2IChiKTsKKyAgICAgIHVpbnQxNng4X3QgdmEgPSB2bGRyaHFfel91 MTYgKGEsIHApOworICAgICAgcmVzKys7CisgICAgICByZXMgPSB2YWRkdmFxX3BfdTE2IChy ZXMsIHZiLCBwKTsKKyAgICAgIGMgKz0gODsKKyAgICAgIGEgKz0gODsKKyAgICAgIGIgKz0g ODsKKyAgICAgIG4gLT0gODsKKyAgICB9CisgIHJldHVybiByZXM7Cit9CisKK2ludCB0ZXN0 MjIgKHVpbnQ4X3QgKmEsIHVpbnQ4X3QgKmIsIHVpbnQ4X3QgKmMsIGludCBuKQoreworICAg IGludCByZXMgPSAwOworICAgIHdoaWxlIChuID4gMCkKKyAgICB7CisgICAgICAgIG12ZV9w cmVkMTZfdCBwID0gdmN0cDhxIChuKTsKKyAgICAgICAgdWludDh4MTZfdCB2YSA9IHZsZHJi cV96X3U4IChhLCBwKTsKKyAgICAgICAgcmVzID0gdm1heHZxIChyZXMsIHZhKTsKKyAgICAg ICAgbi09MTY7CisgICAgICAgIGErPTE2OworICAgIH0KKyAgICByZXR1cm4gcmVzOworfQor CitpbnQgdGVzdDIzIChpbnQ4X3QgKmEsIGludDhfdCAqYiwgaW50OF90ICpjLCBpbnQgbikK K3sKKyAgICBpbnQgcmVzID0gMDsKKyAgICB3aGlsZSAobiA+IDApCisgICAgeworICAgICAg ICBtdmVfcHJlZDE2X3QgcCA9IHZjdHA4cSAobik7CisgICAgICAgIGludDh4MTZfdCB2YSA9 IHZsZHJicV96X3M4IChhLCBwKTsKKyAgICAgICAgcmVzID0gdm1heGF2cSAocmVzLCB2YSk7 CisgICAgICAgIG4tPTE2OworICAgICAgICBhKz0xNjsKKyAgICB9CisgICAgcmV0dXJuIHJl czsKK30KKworLyogVGhlIGZpbmFsIG51bWJlciBvZiBETFNUUHMgY3VycmVudGx5IGlzIGNh bGN1bGF0ZWQgYnkgdGhlIG51bWJlciBvZgorICBgVEVTVF9DT01QSUxFX0lOX0RMU1RQX0lO VEJJVFNfU0lHTkVEX1VOU0lHTkVEX1RFUk5BUlkuKmAgbWFjcm9zICogNiArIDIzLiAgKi8K Ky8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlci10aW1lcyB7XHRkbHN0cH0gMTY3IH0g fSAqLworLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyLXRpbWVzIHtcdGxldHB9IDE2 NyB9IH0gKi8KZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9hcm0vbXZl L2Rsc3RwLWludDE2eDgtcnVuLmMgYi9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvYXJtL212 ZS9kbHN0cC1pbnQxNng4LXJ1bi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjY5NjZhMzk2NjA0NmZjZTU5 YmRhYmRhNjM5YzA0OGVkMzk4Y2FjMjAKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1 aXRlL2djYy50YXJnZXQvYXJtL212ZS9kbHN0cC1pbnQxNng4LXJ1bi5jCkBAIC0wLDAgKzEs NDQgQEAKKy8qIHsgZGctZG8gcnVuIHsgdGFyZ2V0IHsgYXJtKi0qLSogfSB9IH0gKi8KKy8q IHsgZGctcmVxdWlyZS1lZmZlY3RpdmUtdGFyZ2V0IGFybV92OF8xbV9tdmVfb2sgfSAqLwor LyogeyBkZy1yZXF1aXJlLWVmZmVjdGl2ZS10YXJnZXQgYXJtX212ZV9odyB9ICovCisvKiB7 IGRnLW9wdGlvbnMgIi1PMiAtc2F2ZS10ZW1wcyIgfSAqLworLyogeyBkZy1hZGQtb3B0aW9u cyBhcm1fdjhfMW1fbXZlIH0gKi8KKyNpbmNsdWRlICJkbHN0cC1pbnQxNng4LmMiCisKK2lu dCBtYWluICgpCit7CisgIGludCBpOworICBpbnQxNl90IHRlbXAxW05dOworICBpbnQxNl90 IHRlbXAyW05dOworICBpbnQxNl90IHRlbXAzW05dOworICByZXNldF9kYXRhMTYgKHRlbXAx LCB0ZW1wMiwgdGVtcDMsIE4pOworICB0ZXN0ICh0ZW1wMSwgdGVtcDIsIHRlbXAzLCAwKTsK KyAgY2hlY2tfcGx1czE2ICh0ZW1wMSwgdGVtcDIsIHRlbXAzLCAwKTsKKworICByZXNldF9k YXRhMTYgKHRlbXAxLCB0ZW1wMiwgdGVtcDMsIE4pOworICB0ZXN0ICh0ZW1wMSwgdGVtcDIs IHRlbXAzLCAxKTsKKyAgY2hlY2tfcGx1czE2ICh0ZW1wMSwgdGVtcDIsIHRlbXAzLCAxKTsK KworICByZXNldF9kYXRhMTYgKHRlbXAxLCB0ZW1wMiwgdGVtcDMsIE4pOworICB0ZXN0ICh0 ZW1wMSwgdGVtcDIsIHRlbXAzLCA3KTsKKyAgY2hlY2tfcGx1czE2ICh0ZW1wMSwgdGVtcDIs IHRlbXAzLCA3KTsKKworICByZXNldF9kYXRhMTYgKHRlbXAxLCB0ZW1wMiwgdGVtcDMsIE4p OworICB0ZXN0ICh0ZW1wMSwgdGVtcDIsIHRlbXAzLCA4KTsKKyAgY2hlY2tfcGx1czE2ICh0 ZW1wMSwgdGVtcDIsIHRlbXAzLCA4KTsKKworICByZXNldF9kYXRhMTYgKHRlbXAxLCB0ZW1w MiwgdGVtcDMsIE4pOworICB0ZXN0ICh0ZW1wMSwgdGVtcDIsIHRlbXAzLCA5KTsKKyAgY2hl Y2tfcGx1czE2ICh0ZW1wMSwgdGVtcDIsIHRlbXAzLCA5KTsKKworICByZXNldF9kYXRhMTYg KHRlbXAxLCB0ZW1wMiwgdGVtcDMsIE4pOworICB0ZXN0ICh0ZW1wMSwgdGVtcDIsIHRlbXAz LCAxNik7CisgIGNoZWNrX3BsdXMxNiAodGVtcDEsIHRlbXAyLCB0ZW1wMywgMTYpOworCisg IHJlc2V0X2RhdGExNiAodGVtcDEsIHRlbXAyLCB0ZW1wMywgTik7CisgIHRlc3QgKHRlbXAx LCB0ZW1wMiwgdGVtcDMsIDE3KTsKKyAgY2hlY2tfcGx1czE2ICh0ZW1wMSwgdGVtcDIsIHRl bXAzLCAxNyk7CisKKyAgcmVzZXRfZGF0YTE2ICh0ZW1wMSwgdGVtcDIsIHRlbXAzLCBOKTsK K30KKwpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2FybS9tdmUvZGxz dHAtaW50MTZ4OC5jIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2FybS9tdmUvZGxzdHAt aW50MTZ4OC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjMzNjMyYzVmMTRkYzY2MDNkNTY5MzRkZmRkMDA3 MmE5ODBmYmQwMWUKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRlL2djYy50YXJn ZXQvYXJtL212ZS9kbHN0cC1pbnQxNng4LmMKQEAgLTAsMCArMSwzMSBAQAorLyogeyBkZy1k byBjb21waWxlIHsgdGFyZ2V0IHsgYXJtKi0qLSogfSB9IH0gKi8KKy8qIHsgZGctcmVxdWly ZS1lZmZlY3RpdmUtdGFyZ2V0IGFybV92OF8xbV9tdmVfb2sgfSAqLworLyogeyBkZy1vcHRp b25zICItTzIgLXNhdmUtdGVtcHMiIH0gKi8KKy8qIHsgZGctYWRkLW9wdGlvbnMgYXJtX3Y4 XzFtX212ZSB9ICovCisKKyNpbmNsdWRlIDxhcm1fbXZlLmg+CisjaW5jbHVkZSA8c3RkaW8u aD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlICIuLi9sb2IuaCIKKwordm9pZCAg X19hdHRyaWJ1dGVfXyAoKG5vaW5saW5lKSkgdGVzdCAoaW50MTZfdCAqYSwgaW50MTZfdCAq YiwgaW50MTZfdCAqYywgaW50IG4pCit7CisgIHdoaWxlIChuID4gMCkKKyAgICB7CisgICAg ICBtdmVfcHJlZDE2X3QgcCA9IHZjdHAxNnEgKG4pOworICAgICAgaW50MTZ4OF90IHZhID0g dmxkcmhxX3pfczE2IChhLCBwKTsKKyAgICAgIGludDE2eDhfdCB2YiA9IHZsZHJocV96X3Mx NiAoYiwgcCk7CisgICAgICBpbnQxNng4X3QgdmMgPSB2YWRkcV94X3MxNiAodmEsIHZiLCBw KTsKKyAgICAgIHZzdHJocV9wX3MxNiAoYywgdmMsIHApOworICAgICAgYys9ODsKKyAgICAg IGErPTg7CisgICAgICBiKz04OworICAgICAgbi09ODsKKyAgICB9Cit9CisKKy8qIHsgZGct ZmluYWwgeyBzY2FuLWFzc2VtYmxlci10aW1lcyB7XHRkbHN0cC4xNn0gMSB9IH0gKi8KKy8q IHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlci10aW1lcyB7XHRsZXRwfSAxIH0gfSAqLwor LyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyLW5vdCAiXHR2Y3RwIiB9IH0gKi8KKy8q IHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlci1ub3QgIlx0dnBzdCIgfSB9ICovCisvKiB7 IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItbm90ICJwMCIgfSB9ICovCmRpZmYgLS1naXQg YS9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvYXJtL212ZS9kbHN0cC1pbnQzMng0LXJ1bi5j IGIvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2FybS9tdmUvZGxzdHAtaW50MzJ4NC1ydW4u YwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwLi42ODMzZGRkZGU5MmI3Y2YxNmExOGQ0MmMwMDNlZTViZDJiOWRh ODQ3Ci0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2FybS9t dmUvZGxzdHAtaW50MzJ4NC1ydW4uYwpAQCAtMCwwICsxLDQ1IEBACisvKiB7IGRnLWRvIHJ1 biB7IHRhcmdldCB7IGFybSotKi0qIH0gfSB9ICovCisvKiB7IGRnLXJlcXVpcmUtZWZmZWN0 aXZlLXRhcmdldCBhcm1fdjhfMW1fbXZlX29rIH0gKi8KKy8qIHsgZGctcmVxdWlyZS1lZmZl Y3RpdmUtdGFyZ2V0IGFybV9tdmVfaHcgfSAqLworLyogeyBkZy1vcHRpb25zICItTzIgLXNh dmUtdGVtcHMiIH0gKi8KKy8qIHsgZGctYWRkLW9wdGlvbnMgYXJtX3Y4XzFtX212ZSB9ICov CisKKyNpbmNsdWRlICJkbHN0cC1pbnQzMng0LmMiCisKK2ludCBtYWluICgpCit7CisgIGlu dCBpOworICBpbnQzMl90IHRlbXAxW05dOworICBpbnQzMl90IHRlbXAyW05dOworICBpbnQz Ml90IHRlbXAzW05dOworICByZXNldF9kYXRhMzIgKHRlbXAxLCB0ZW1wMiwgdGVtcDMsIE4p OworICB0ZXN0ICh0ZW1wMSwgdGVtcDIsIHRlbXAzLCAwKTsKKyAgY2hlY2tfcGx1czMyICh0 ZW1wMSwgdGVtcDIsIHRlbXAzLCAwKTsKKworICByZXNldF9kYXRhMzIgKHRlbXAxLCB0ZW1w MiwgdGVtcDMsIE4pOworICB0ZXN0ICh0ZW1wMSwgdGVtcDIsIHRlbXAzLCAxKTsKKyAgY2hl Y2tfcGx1czMyICh0ZW1wMSwgdGVtcDIsIHRlbXAzLCAxKTsKKworICByZXNldF9kYXRhMzIg KHRlbXAxLCB0ZW1wMiwgdGVtcDMsIE4pOworICB0ZXN0ICh0ZW1wMSwgdGVtcDIsIHRlbXAz LCAzKTsKKyAgY2hlY2tfcGx1czMyICh0ZW1wMSwgdGVtcDIsIHRlbXAzLCAzKTsKKworICBy ZXNldF9kYXRhMzIgKHRlbXAxLCB0ZW1wMiwgdGVtcDMsIE4pOworICB0ZXN0ICh0ZW1wMSwg dGVtcDIsIHRlbXAzLCA0KTsKKyAgY2hlY2tfcGx1czMyICh0ZW1wMSwgdGVtcDIsIHRlbXAz LCA0KTsKKworICByZXNldF9kYXRhMzIgKHRlbXAxLCB0ZW1wMiwgdGVtcDMsIE4pOworICB0 ZXN0ICh0ZW1wMSwgdGVtcDIsIHRlbXAzLCA1KTsKKyAgY2hlY2tfcGx1czMyICh0ZW1wMSwg dGVtcDIsIHRlbXAzLCA1KTsKKworICByZXNldF9kYXRhMzIgKHRlbXAxLCB0ZW1wMiwgdGVt cDMsIE4pOworICB0ZXN0ICh0ZW1wMSwgdGVtcDIsIHRlbXAzLCA4KTsKKyAgY2hlY2tfcGx1 czMyICh0ZW1wMSwgdGVtcDIsIHRlbXAzLCA4KTsKKworICByZXNldF9kYXRhMzIgKHRlbXAx LCB0ZW1wMiwgdGVtcDMsIE4pOworICB0ZXN0ICh0ZW1wMSwgdGVtcDIsIHRlbXAzLCA5KTsK KyAgY2hlY2tfcGx1czMyICh0ZW1wMSwgdGVtcDIsIHRlbXAzLCA5KTsKKworICByZXNldF9k YXRhMzIgKHRlbXAxLCB0ZW1wMiwgdGVtcDMsIE4pOworfQorCmRpZmYgLS1naXQgYS9nY2Mv dGVzdHN1aXRlL2djYy50YXJnZXQvYXJtL212ZS9kbHN0cC1pbnQzMng0LmMgYi9nY2MvdGVz dHN1aXRlL2djYy50YXJnZXQvYXJtL212ZS9kbHN0cC1pbnQzMng0LmMKbmV3IGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MC4uNWQwOWY3ODRiNzcxNmMxNGU1NjA4NmI3ZTY2ZWIxMmIzMTc3MmE0NQotLS0gL2Rldi9u dWxsCisrKyBiL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9hcm0vbXZlL2Rsc3RwLWludDMy eDQuYwpAQCAtMCwwICsxLDMxIEBACisvKiB7IGRnLWRvIGNvbXBpbGUgeyB0YXJnZXQgeyBh cm0qLSotKiB9IH0gfSAqLworLyogeyBkZy1yZXF1aXJlLWVmZmVjdGl2ZS10YXJnZXQgYXJt X3Y4XzFtX212ZV9vayB9ICovCisvKiB7IGRnLW9wdGlvbnMgIi1PMiAtc2F2ZS10ZW1wcyIg fSAqLworLyogeyBkZy1hZGQtb3B0aW9ucyBhcm1fdjhfMW1fbXZlIH0gKi8KKworI2luY2x1 ZGUgPGFybV9tdmUuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5o PgorI2luY2x1ZGUgIi4uL2xvYi5oIgorCit2b2lkICBfX2F0dHJpYnV0ZV9fICgobm9pbmxp bmUpKSB0ZXN0IChpbnQzMl90ICphLCBpbnQzMl90ICpiLCBpbnQzMl90ICpjLCBpbnQgbikK K3sKKyAgd2hpbGUgKG4gPiAwKQorICAgIHsKKyAgICAgIG12ZV9wcmVkMTZfdCBwID0gdmN0 cDMycSAobik7CisgICAgICBpbnQzMng0X3QgdmEgPSB2bGRyd3Ffel9zMzIgKGEsIHApOwor ICAgICAgaW50MzJ4NF90IHZiID0gdmxkcndxX3pfczMyIChiLCBwKTsKKyAgICAgIGludDMy eDRfdCB2YyA9IHZhZGRxX3hfczMyICh2YSwgdmIsIHApOworICAgICAgdnN0cndxX3BfczMy IChjLCB2YywgcCk7CisgICAgICBjKz00OworICAgICAgYSs9NDsKKyAgICAgIGIrPTQ7Cisg ICAgICBuLT00OworICAgIH0KK30KKworLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVy LXRpbWVzIHtcdGRsc3RwLjMyfSAxIH0gfSAqLworLyogeyBkZy1maW5hbCB7IHNjYW4tYXNz ZW1ibGVyLXRpbWVzIHtcdGxldHB9IDEgfSB9ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1h c3NlbWJsZXItbm90ICJcdHZjdHAiIH0gfSAqLworLyogeyBkZy1maW5hbCB7IHNjYW4tYXNz ZW1ibGVyLW5vdCAiXHR2cHN0IiB9IH0gKi8KKy8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2Vt Ymxlci1ub3QgInAwIiB9IH0gKi8KZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLnRh cmdldC9hcm0vbXZlL2Rsc3RwLWludDY0eDItcnVuLmMgYi9nY2MvdGVzdHN1aXRlL2djYy50 YXJnZXQvYXJtL212ZS9kbHN0cC1pbnQ2NHgyLXJ1bi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmNjMGI5 Y2U3ZWU5YTVhODQwMGIxOGY1MzlmZjk2YjhlNjc1NDE0Y2IKLS0tIC9kZXYvbnVsbAorKysg Yi9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvYXJtL212ZS9kbHN0cC1pbnQ2NHgyLXJ1bi5j CkBAIC0wLDAgKzEsNDggQEAKKy8qIHsgZGctZG8gcnVuIHsgdGFyZ2V0IHsgYXJtKi0qLSog fSB9IH0gKi8KKy8qIHsgZGctcmVxdWlyZS1lZmZlY3RpdmUtdGFyZ2V0IGFybV92OF8xbV9t dmVfb2sgfSAqLworLyogeyBkZy1yZXF1aXJlLWVmZmVjdGl2ZS10YXJnZXQgYXJtX212ZV9o dyB9ICovCisvKiB7IGRnLW9wdGlvbnMgIi1PMiAtc2F2ZS10ZW1wcyIgfSAqLworLyogeyBk Zy1hZGQtb3B0aW9ucyBhcm1fdjhfMW1fbXZlIH0gKi8KKworI2luY2x1ZGUgImRsc3RwLWlu dDY0eDIuYyIKKworaW50IG1haW4gKCkKK3sKKyAgaW50IGk7CisgIGludDY0X3QgdGVtcDFb Tl07CisgIGludDY0X3QgdGVtcDNbTl07CisgIHJlc2V0X2RhdGE2NCAgKHRlbXAxLCB0ZW1w MywgTik7CisgIHRlc3QgKHRlbXAxLCB0ZW1wMywgMCk7CisgIGNoZWNrX21lbWNweTY0ICh0 ZW1wMSwgdGVtcDMsIDApOworCisgIHJlc2V0X2RhdGE2NCAgKHRlbXAxLCB0ZW1wMywgTik7 CisgIHRlc3QgKHRlbXAxLCB0ZW1wMywgMSk7CisgIGNoZWNrX21lbWNweTY0ICh0ZW1wMSwg dGVtcDMsIDEpOworCisgIHJlc2V0X2RhdGE2NCAgKHRlbXAxLCB0ZW1wMywgTik7CisgIHRl c3QgKHRlbXAxLCB0ZW1wMywgMik7CisgIGNoZWNrX21lbWNweTY0ICh0ZW1wMSwgdGVtcDMs IDIpOworCisgIHJlc2V0X2RhdGE2NCAgKHRlbXAxLCB0ZW1wMywgTik7CisgIHRlc3QgKHRl bXAxLCB0ZW1wMywgMyk7CisgIGNoZWNrX21lbWNweTY0ICh0ZW1wMSwgdGVtcDMsIDMpOwor CisgIHJlc2V0X2RhdGE2NCAgKHRlbXAxLCB0ZW1wMywgTik7CisgIHRlc3QgKHRlbXAxLCB0 ZW1wMywgNCk7CisgIGNoZWNrX21lbWNweTY0ICh0ZW1wMSwgdGVtcDMsIDQpOworCisgIHJl c2V0X2RhdGE2NCAgKHRlbXAxLCB0ZW1wMywgTik7CisgIHRlc3QgKHRlbXAxLCB0ZW1wMywg NSk7CisgIGNoZWNrX21lbWNweTY0ICh0ZW1wMSwgdGVtcDMsIDUpOworCisgIHJlc2V0X2Rh dGE2NCAgKHRlbXAxLCB0ZW1wMywgTik7CisgIHRlc3QgKHRlbXAxLCB0ZW1wMywgNik7Cisg IGNoZWNrX21lbWNweTY0ICh0ZW1wMSwgdGVtcDMsIDYpOworCisgIHJlc2V0X2RhdGE2NCAg KHRlbXAxLCB0ZW1wMywgTik7CisgIHRlc3QgKHRlbXAxLCB0ZW1wMywgNyk7CisgIGNoZWNr X21lbWNweTY0ICh0ZW1wMSwgdGVtcDMsIDcpOworCisgIHJlc2V0X2RhdGE2NCAgKHRlbXAx LCB0ZW1wMywgTik7Cit9CisKZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdl dC9hcm0vbXZlL2Rsc3RwLWludDY0eDIuYyBiL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9h cm0vbXZlL2Rsc3RwLWludDY0eDIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yMWU4ODI0MjRlYzNiYTRl N2ExNDFlYWRiMGY0ZTU5MzE0NmU4MWFkCi0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3Rz dWl0ZS9nY2MudGFyZ2V0L2FybS9tdmUvZGxzdHAtaW50NjR4Mi5jCkBAIC0wLDAgKzEsMjgg QEAKKy8qIHsgZGctZG8gY29tcGlsZSB7IHRhcmdldCB7IGFybSotKi0qIH0gfSB9ICovCisv KiB7IGRnLXJlcXVpcmUtZWZmZWN0aXZlLXRhcmdldCBhcm1fdjhfMW1fbXZlX29rIH0gKi8K Ky8qIHsgZGctb3B0aW9ucyAiLU8yIC1zYXZlLXRlbXBzIiB9ICovCisvKiB7IGRnLWFkZC1v cHRpb25zIGFybV92OF8xbV9tdmUgfSAqLworCisjaW5jbHVkZSA8YXJtX212ZS5oPgorI2lu Y2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSAiLi4vbG9i LmgiCisKK3ZvaWQgIF9fYXR0cmlidXRlX18gKChub2lubGluZSkpIHRlc3QgKGludDY0X3Qg KmEsIGludDY0X3QgKmMsIGludCBuKQoreworICB3aGlsZSAobiA+IDApCisgICAgeworICAg ICAgbXZlX3ByZWQxNl90IHAgPSB2Y3RwNjRxIChuKTsKKyAgICAgIGludDY0eDJfdCB2YSA9 IHZsZHJkcV9nYXRoZXJfb2Zmc2V0X3pfczY0IChhLCB2Y3JlYXRlcV91NjQgKDAsIDgpLCBw KTsKKyAgICAgIHZzdHJkcV9zY2F0dGVyX29mZnNldF9wX3M2NCAoYywgdmNyZWF0ZXFfdTY0 ICgwLCA4KSwgdmEsIHApOworICAgICAgYys9MjsKKyAgICAgIGErPTI7CisgICAgICBuLT0y OworICAgIH0KK30KKworLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyLXRpbWVzIHtc dGRsc3RwLjY0fSAxIH0gfSAqLworLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyLXRp bWVzIHtcdGxldHB9IDEgfSB9ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXIt bm90ICJcdHZjdHAiIH0gfSAqLworLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyLW5v dCAiXHR2cHN0IiB9IH0gKi8KKy8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlci1ub3Qg InAwIiB9IH0gKi8KZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9hcm0v bXZlL2Rsc3RwLWludDh4MTYuYyBiL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9hcm0vbXZl L2Rsc3RwLWludDh4MTYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44ZWExODFjODJkNDVhMDA4ZDYwYTY2 YzFmOWU5YjI4OWM1ZjA1NjExCi0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9n Y2MudGFyZ2V0L2FybS9tdmUvZGxzdHAtaW50OHgxNi5jCkBAIC0wLDAgKzEsNjkgQEAKKy8q IHsgZGctZG8gcnVuIHsgdGFyZ2V0IHsgYXJtKi0qLSogfSB9IH0gKi8KKy8qIHsgZGctcmVx dWlyZS1lZmZlY3RpdmUtdGFyZ2V0IGFybV92OF8xbV9tdmVfb2sgfSAqLworLyogeyBkZy1y ZXF1aXJlLWVmZmVjdGl2ZS10YXJnZXQgYXJtX212ZV9odyB9ICovCisvKiB7IGRnLW9wdGlv bnMgIi1PMiAtc2F2ZS10ZW1wcyIgfSAqLworLyogeyBkZy1hZGQtb3B0aW9ucyBhcm1fdjhf MW1fbXZlIH0gKi8KKworI2luY2x1ZGUgPGFybV9tdmUuaD4KKyNpbmNsdWRlIDxzdGRpby5o PgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgIi4uL2xvYi5oIgorCit2b2lkICBf X2F0dHJpYnV0ZV9fICgobm9pbmxpbmUpKSB0ZXN0IChpbnQ4X3QgKmEsIGludDhfdCAqYiwg aW50OF90ICpjLCBpbnQgbikKK3sKKyAgd2hpbGUgKG4gPiAwKQorICAgIHsKKyAgICAgIG12 ZV9wcmVkMTZfdCBwID0gdmN0cDhxIChuKTsKKyAgICAgIGludDh4MTZfdCB2YSA9IHZsZHJi cV96X3M4IChhLCBwKTsKKyAgICAgIGludDh4MTZfdCB2YiA9IHZsZHJicV96X3M4IChiLCBw KTsKKyAgICAgIGludDh4MTZfdCB2YyA9IHZhZGRxX3hfczggKHZhLCB2YiwgcCk7CisgICAg ICB2c3RyYnFfcF9zOCAoYywgdmMsIHApOworICAgICAgYys9MTY7CisgICAgICBhKz0xNjsK KyAgICAgIGIrPTE2OworICAgICAgbi09MTY7CisgICAgfQorfQorCitpbnQgbWFpbiAoKQor eworICBpbnQgaTsKKyAgaW50OF90IHRlbXAxW05dOworICBpbnQ4X3QgdGVtcDJbTl07Cisg IGludDhfdCB0ZW1wM1tOXTsKKyAgcmVzZXRfZGF0YTggKHRlbXAxLCB0ZW1wMiwgdGVtcDMs IE4pOworICB0ZXN0ICh0ZW1wMSwgdGVtcDIsIHRlbXAzLCAwKTsKKyAgY2hlY2tfcGx1czgg KHRlbXAxLCB0ZW1wMiwgdGVtcDMsIDApOworCisgIHJlc2V0X2RhdGE4ICh0ZW1wMSwgdGVt cDIsIHRlbXAzLCBOKTsKKyAgdGVzdCAodGVtcDEsIHRlbXAyLCB0ZW1wMywgMSk7CisgIGNo ZWNrX3BsdXM4ICh0ZW1wMSwgdGVtcDIsIHRlbXAzLCAxKTsKKworICByZXNldF9kYXRhOCAo dGVtcDEsIHRlbXAyLCB0ZW1wMywgTik7CisgIHRlc3QgKHRlbXAxLCB0ZW1wMiwgdGVtcDMs IDE1KTsKKyAgY2hlY2tfcGx1czggKHRlbXAxLCB0ZW1wMiwgdGVtcDMsIDE1KTsKKworICBy ZXNldF9kYXRhOCAodGVtcDEsIHRlbXAyLCB0ZW1wMywgTik7CisgIHRlc3QgKHRlbXAxLCB0 ZW1wMiwgdGVtcDMsIDE2KTsKKyAgY2hlY2tfcGx1czggKHRlbXAxLCB0ZW1wMiwgdGVtcDMs IDE2KTsKKworICByZXNldF9kYXRhOCAodGVtcDEsIHRlbXAyLCB0ZW1wMywgTik7CisgIHRl c3QgKHRlbXAxLCB0ZW1wMiwgdGVtcDMsIDE3KTsKKyAgY2hlY2tfcGx1czggKHRlbXAxLCB0 ZW1wMiwgdGVtcDMsIDE3KTsKKworICByZXNldF9kYXRhOCAodGVtcDEsIHRlbXAyLCB0ZW1w MywgTik7CisgIHRlc3QgKHRlbXAxLCB0ZW1wMiwgdGVtcDMsIDMyKTsKKyAgY2hlY2tfcGx1 czggKHRlbXAxLCB0ZW1wMiwgdGVtcDMsIDMyKTsKKworICByZXNldF9kYXRhOCAodGVtcDEs IHRlbXAyLCB0ZW1wMywgTik7CisgIHRlc3QgKHRlbXAxLCB0ZW1wMiwgdGVtcDMsIDMzKTsK KyAgY2hlY2tfcGx1czggKHRlbXAxLCB0ZW1wMiwgdGVtcDMsIDMzKTsKKworICByZXNldF9k YXRhOCAodGVtcDEsIHRlbXAyLCB0ZW1wMywgTik7Cit9CisKKy8qIHsgZGctZmluYWwgeyBz Y2FuLWFzc2VtYmxlci10aW1lcyB7XHRkbHN0cC44fSAxIH0gfSAqLworLyogeyBkZy1maW5h bCB7IHNjYW4tYXNzZW1ibGVyLXRpbWVzIHtcdGxldHB9IDEgfSB9ICovCisvKiB7IGRnLWZp bmFsIHsgc2Nhbi1hc3NlbWJsZXItbm90ICJcdHZjdHAiIH0gfSAqLworLyogeyBkZy1maW5h bCB7IHNjYW4tYXNzZW1ibGVyLW5vdCAiXHR2cHN0IiB9IH0gKi8KKy8qIHsgZGctZmluYWwg eyBzY2FuLWFzc2VtYmxlci1ub3QgInAwIiB9IH0gKi8KZGlmZiAtLWdpdCBhL2djYy90ZXN0 c3VpdGUvZ2NjLnRhcmdldC9hcm0vbXZlL2Rsc3RwLWludmFsaWQtYXNtLmMgYi9nY2MvdGVz dHN1aXRlL2djYy50YXJnZXQvYXJtL212ZS9kbHN0cC1pbnZhbGlkLWFzbS5jCm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAuLmY3YzNlMDRmODgzMWU2YjZlYjcwOWM4ZjNiMGEwYTg5NjMxM2NhNjQKLS0tIC9k ZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvYXJtL212ZS9kbHN0cC1p bnZhbGlkLWFzbS5jCkBAIC0wLDAgKzEsMzkxIEBACisvKiB7IGRnLWRvIGNvbXBpbGUgeyB0 YXJnZXQgeyBhcm0qLSotKiB9IH0gfSAqLworLyogeyBkZy1yZXF1aXJlLWVmZmVjdGl2ZS10 YXJnZXQgYXJtX3Y4XzFtX212ZV9vayB9ICovCisvKiB7IGRnLW9wdGlvbnMgIi1PMyAtc2F2 ZS10ZW1wcyIgfSAqLworLyogeyBkZy1hZGQtb3B0aW9ucyBhcm1fdjhfMW1fbXZlIH0gKi8K KworI2luY2x1ZGUgPGxpbWl0cy5oPgorI2luY2x1ZGUgPGFybV9tdmUuaD4KKworLyogVGVy bWluYXRpbmcgb24gYSBub24temVybyBudW1iZXIgb2YgZWxlbWVudHMuICAqLwordm9pZCB0 ZXN0MCAodWludDhfdCAqYSwgdWludDhfdCAqYiwgdWludDhfdCAqYywgaW50IG4pCit7Cisg ICAgd2hpbGUgKG4gPiAxKQorICAgIHsKKyAgICAgICBtdmVfcHJlZDE2X3QgcCA9IHZjdHA4 cSAobik7CisgICAgICAgdWludDh4MTZfdCB2YSA9IHZsZHJicV96X3U4IChhLCBwKTsKKyAg ICAgICB1aW50OHgxNl90IHZiID0gdmxkcmJxX3pfdTggKGIsIHApOworICAgICAgIHVpbnQ4 eDE2X3QgdmMgPSB2YWRkcV94X3U4ICh2YSwgdmIsIHApOworICAgICAgIHZzdHJicV9wX3U4 IChjLCB2YywgcCk7CisgICAgICAgbiAtPSAxNjsKKyAgICB9Cit9CisKKy8qIFRlcm1pbmF0 aW5nIG9uIG4gPj0gMC4gICovCit2b2lkIHRlc3QxICh1aW50OF90ICphLCB1aW50OF90ICpi LCB1aW50OF90ICpjLCBpbnQgbikKK3sKKyAgICB3aGlsZSAobiA+PSAwKQorICAgIHsKKyAg ICAgICBtdmVfcHJlZDE2X3QgcCA9IHZjdHA4cSAobik7CisgICAgICAgdWludDh4MTZfdCB2 YSA9IHZsZHJicV96X3U4IChhLCBwKTsKKyAgICAgICB1aW50OHgxNl90IHZiID0gdmxkcmJx X3pfdTggKGIsIHApOworICAgICAgIHVpbnQ4eDE2X3QgdmMgPSB2YWRkcV94X3U4ICh2YSwg dmIsIHApOworICAgICAgIHZzdHJicV9wX3U4IChjLCB2YywgcCk7CisgICAgICAgbiAtPSAx NjsKKyAgICB9Cit9CisKKy8qIFNpbWlsYXIsIHRlcm1pbmF0aW5nIG9uIGEgbm9uLXplcm8g bnVtYmVyIG9mIGVsZW1lbnRzLCBidXQgaW4gYSBmb3IgbG9vcAorICAgZm9ybWF0LiAgKi8K K2ludDMyX3QgYVtdID0gezAsIDEsIDIsIDMsIDQsIDUsIDYsIDd9Owordm9pZCB0ZXN0MiAo aW50MzJfdCAqYiwgaW50IG51bV9lbGVtcykKK3sKKyAgICBmb3IgKGludCBpID0gbnVtX2Vs ZW1zOyBpID49IDI7IGktPSA0KQorICAgIHsKKyAgICAgICBtdmVfcHJlZDE2X3QgcCA9IHZj dHAzMnEgKGkpOworICAgICAgIGludDMyeDRfdCB2YSA9IHZsZHJ3cV96X3MzMiAoJihhW2ld KSwgcCk7CisgICAgICAgdnN0cndxX3BfczMyIChiICsgaSwgdmEsIHApOworICAgIH0KK30K KworLyogSXRlcmF0aW9uIGNvdW50ZXIgY291bnRpbmcgdXAgdG8gbnVtX2l0ZXIsIHdpdGgg YSBub24temVybyBzdGFydGluZyBudW0uICAqLwordm9pZCB0ZXN0MyAodWludDhfdCAqYSwg dWludDhfdCAqYiwgdWludDhfdCAqYywgaW50IG4pCit7CisgICAgaW50IG51bV9pdGVyID0g KG4gKyAxNSkvMTY7CisgICAgZm9yIChpbnQgaSA9IDE7IGkgPCBudW1faXRlcjsgaSsrKQor ICAgIHsKKyAgICAgICBtdmVfcHJlZDE2X3QgcCA9IHZjdHA4cSAobik7CisgICAgICAgdWlu dDh4MTZfdCB2YSA9IHZsZHJicV96X3U4IChhLCBwKTsKKyAgICAgICB1aW50OHgxNl90IHZi ID0gdmxkcmJxX3pfdTggKGIsIHApOworICAgICAgIHVpbnQ4eDE2X3QgdmMgPSB2YWRkcV94 X3U4ICh2YSwgdmIsIHApOworICAgICAgIHZzdHJicV9wX3U4IChjLCB2YywgcCk7CisgICAg ICAgbiAtPSAxNjsKKyAgICB9Cit9CisKKy8qIEl0ZXJhdGlvbiBjb3VudGVyIGNvdW50aW5n IHVwIHRvIG51bV9pdGVyLCB3aXRoIGEgbGFyZ2VyIGluY3JlbWVudCAgKi8KK3ZvaWQgdGVz dDQgKHVpbnQ4X3QgKmEsIHVpbnQ4X3QgKmIsIHVpbnQ4X3QgKmMsIGludCBuKQoreworICAg IGludCBudW1faXRlciA9IChuICsgMTUpLzE2OworICAgIGZvciAoaW50IGkgPSAwOyBpIDwg bnVtX2l0ZXI7IGkrPTIpCisgICAgeworICAgICAgIG12ZV9wcmVkMTZfdCBwID0gdmN0cDhx IChuKTsKKyAgICAgICB1aW50OHgxNl90IHZhID0gdmxkcmJxX3pfdTggKGEsIHApOworICAg ICAgIHVpbnQ4eDE2X3QgdmIgPSB2bGRyYnFfel91OCAoYiwgcCk7CisgICAgICAgdWludDh4 MTZfdCB2YyA9IHZhZGRxX3hfdTggKHZhLCB2YiwgcCk7CisgICAgICAgdnN0cmJxX3BfdTgg KGMsIHZjLCBwKTsKKyAgICAgICBuIC09IDE2OworICAgIH0KK30KKworLyogVXNpbmcgYW4g dW5wcmVkaWNhdGVkIHN0b3JlIGluc3RydWN0aW9uIHdpdGhpbiB0aGUgbG9vcC4gICovCit2 b2lkIHRlc3Q1ICh1aW50OF90ICphLCB1aW50OF90ICpiLCB1aW50OF90ICpjLCAgdWludDhf dCAqZCwgaW50IG4pCit7CisgICAgd2hpbGUgKG4gPiAwKQorICAgIHsKKyAgICAgICBtdmVf cHJlZDE2X3QgcCA9IHZjdHA4cSAobik7CisgICAgICAgdWludDh4MTZfdCB2YSA9IHZsZHJi cV96X3U4IChhLCBwKTsKKyAgICAgICB1aW50OHgxNl90IHZiID0gdmxkcmJxX3pfdTggKGIs IHApOworICAgICAgIHVpbnQ4eDE2X3QgdmMgPSB2YWRkcV91OCAodmEsIHZiKTsKKyAgICAg ICB1aW50OHgxNl90IHZkID0gdmFkZHFfeF91OCAodmEsIHZiLCBwKTsKKyAgICAgICB2c3Ry YnFfdTggKGQsIHZkKTsKKyAgICAgICBuIC09IDE2OworICAgIH0KK30KKworLyogVXNpbmcg YW4gdW5wcmVkaWNhdGVkIHN0b3JlIG91dHNpZGUgdGhlIGxvb3AuICAqLwordm9pZCB0ZXN0 NiAodWludDhfdCAqYSwgdWludDhfdCAqYiwgdWludDhfdCAqYywgaW50IG4sIHVpbnQ4eDE2 X3QgdngpCit7CisgICAgd2hpbGUgKG4gPiAwKQorICAgIHsKKyAgICAgICBtdmVfcHJlZDE2 X3QgcCA9IHZjdHA4cSAobik7CisgICAgICAgdWludDh4MTZfdCB2YSA9IHZsZHJicV96X3U4 IChhLCBwKTsKKyAgICAgICB1aW50OHgxNl90IHZiID0gdmxkcmJxX3pfdTggKGIsIHApOwor ICAgICAgIHVpbnQ4eDE2X3QgdmMgPSB2YWRkcV9tX3U4ICh2eCwgdmEsIHZiLCBwKTsKKyAg ICAgICB2eCA9IHZhZGRxX3U4ICh2eCwgdmMpOworICAgICAgIGEgKz0gMTY7CisgICAgICAg YiArPSAxNjsKKyAgICAgICBuIC09IDE2OworICAgIH0KKyAgICB2c3RyYnFfdTggKGMsIHZ4 KTsKK30KKworLyogVXNpbmcgYSBWUFIgdGhhdCBnZXRzIG1vZGlmaWVkIHdpdGhpbiB0aGUg bG9vcC4gICovCit2b2lkIHRlc3Q5IChpbnQzMl90ICphLCBpbnQzMl90ICpiLCBpbnQzMl90 ICpjLCBpbnQgbikKK3sKKyAgd2hpbGUgKG4gPiAwKQorICAgIHsKKyAgICAgIG12ZV9wcmVk MTZfdCBwID0gdmN0cDMycSAobik7CisgICAgICBpbnQzMng0X3QgdmEgPSB2bGRyd3Ffel9z MzIgKGEsIHApOworICAgICAgcCsrOworICAgICAgaW50MzJ4NF90IHZiID0gdmxkcndxX3pf czMyIChiLCBwKTsKKyAgICAgIGludDMyeDRfdCB2YyA9IHZhZGRxX3hfczMyICh2YSwgdmIs IHApOworICAgICAgdnN0cndxX3BfczMyIChjLCB2YywgcCk7CisgICAgICBjICs9IDQ7Cisg ICAgICBhICs9IDQ7CisgICAgICBiICs9IDQ7CisgICAgICBuIC09IDQ7CisgICAgfQorfQor CisvKiBVc2luZyBhIFZQUiB0aGF0IGdldHMgcmUtZ2VuZXJhdGVkIHdpdGhpbiB0aGUgbG9v cC4gICovCit2b2lkIHRlc3QxMCAoaW50MzJfdCAqYSwgaW50MzJfdCAqYiwgaW50MzJfdCAq YywgaW50IG4pCit7CisgIG12ZV9wcmVkMTZfdCBwID0gdmN0cDMycSAobik7CisgIHdoaWxl IChuID4gMCkKKyAgICB7CisgICAgICBpbnQzMng0X3QgdmEgPSB2bGRyd3Ffel9zMzIgKGEs IHApOworICAgICAgcCA9IHZjdHAzMnEgKG4pOworICAgICAgaW50MzJ4NF90IHZiID0gdmxk cndxX3pfczMyIChiLCBwKTsKKyAgICAgIGludDMyeDRfdCB2YyA9IHZhZGRxX3hfczMyICh2 YSwgdmIsIHApOworICAgICAgdnN0cndxX3BfczMyIChjLCB2YywgcCk7CisgICAgICBjICs9 IDQ7CisgICAgICBhICs9IDQ7CisgICAgICBiICs9IDQ7CisgICAgICBuIC09IDQ7CisgICAg fQorfQorCisvKiBVc2luZyB2Y3RwMzJxX20gaW5zdGVhZCBvZiB2Y3RwMzJxLiAgKi8KK3Zv aWQgdGVzdDExIChpbnQzMl90ICphLCBpbnQzMl90ICpiLCBpbnQzMl90ICpjLCBpbnQgbiwg bXZlX3ByZWQxNl90IHAwKQoreworICB3aGlsZSAobiA+IDApCisgICAgeworICAgICAgbXZl X3ByZWQxNl90IHAgPSB2Y3RwMzJxX20gKG4sIHAwKTsKKyAgICAgIGludDMyeDRfdCB2YSA9 IHZsZHJ3cV96X3MzMiAoYSwgcCk7CisgICAgICBpbnQzMng0X3QgdmIgPSB2bGRyd3Ffel9z MzIgKGIsIHApOworICAgICAgaW50MzJ4NF90IHZjID0gdmFkZHFfeF9zMzIgKHZhLCB2Yiwg cCk7CisgICAgICB2c3Ryd3FfcF9zMzIgKGMsIHZjLCBwKTsKKyAgICAgIGMgKz0gNDsKKyAg ICAgIGEgKz0gNDsKKyAgICAgIGIgKz0gNDsKKyAgICAgIG4gLT0gNDsKKyAgICB9Cit9CisK Ky8qIFVzaW5nIGFuIHVucHJlZGljYXRlZCBvcCB3aXRoIGEgc2NhbGFyIG91dHB1dCwgd2hl cmUgdGhlIHJlc3VsdCBpcyB2YWxpZAorICAgb3V0c2lkZSB0aGUgYmIuICBUaGlzIGlzIGlu dmFsaWQsIGJlY2F1c2Ugb25lIG9mIHRoZSBpbnB1dHMgdG8gdGhlCisgICB1bnByZWRpY2F0 ZWQgb3AgaXMgYWxzbyB1bnByZWRpY2F0ZWQuICAqLwordWludDhfdCB0ZXN0MTIgKHVpbnQ4 X3QgKmEsIHVpbnQ4X3QgKmIsIHVpbnQ4X3QgKmMsIGludCBuLCB1aW50OHgxNl90IHZ4KQor eworICAgIHVpbnQ4X3Qgc3VtID0gMDsKKyAgICB3aGlsZSAobiA+IDApCisgICAgeworICAg ICAgIG12ZV9wcmVkMTZfdCBwID0gdmN0cDhxIChuKTsKKyAgICAgICB1aW50OHgxNl90IHZh ID0gdmxkcmJxX3pfdTggKGEsIHApOworICAgICAgIHVpbnQ4eDE2X3QgdmIgPSB2bGRyYnFf dTggKGIpOworICAgICAgIHVpbnQ4eDE2X3QgdmMgPSB2YWRkcV91OCAodmEsIHZiKTsKKyAg ICAgICBzdW0gKz0gdmFkZHZxX3U4ICh2Yyk7CisgICAgICAgYSArPSAxNjsKKyAgICAgICBi ICs9IDE2OworICAgICAgIG4gLT0gMTY7CisgICAgfQorICAgIHJldHVybiBzdW07Cit9CisK Ky8qIFVzaW5nIGFuIHVucHJlZGljYXRlZCB2Y21wIHRvIGdlbmVyYXRlIGEgbmV3IHByZWRp Y2F0ZSB2YWx1ZSBpbiB0aGUKKyAgIGxvb3AgYW5kIHRoZW4gdXNpbmcgdGhhdCBWUFIgdG8g cHJlZGljYXRlIGEgc3RvcmUgaW5zbi4gICovCit2b2lkIHRlc3QxMyAoaW50MzJfdCAqYSwg aW50MzJfdCAqYiwgaW50MzJ4NF90IHZjLCBpbnQzMl90ICpjLCBpbnQgbikKK3sKKyAgd2hp bGUgKG4gPiAwKQorICAgIHsKKyAgICAgIG12ZV9wcmVkMTZfdCBwID0gdmN0cDMycSAobik7 CisgICAgICBpbnQzMng0X3QgdmEgPSB2bGRyd3FfczMyIChhKTsKKyAgICAgIGludDMyeDRf dCB2YiA9IHZsZHJ3cV96X3MzMiAoYiwgcCk7CisgICAgICBpbnQzMng0X3QgdmMgPSB2YWRk cV9zMzIgKHZhLCB2Yik7CisgICAgICBtdmVfcHJlZDE2X3QgcDEgPSB2Y21wZXFxX3MzMiAo dmEsIHZjKTsKKyAgICAgIHZzdHJ3cV9wX3MzMiAoYywgdmMsIHAxKTsKKyAgICAgIGMgKz0g NDsKKyAgICAgIGEgKz0gNDsKKyAgICAgIGIgKz0gNDsKKyAgICAgIG4gLT0gNDsKKyAgICB9 Cit9CisKKy8qIFVzaW5nIGFuIGFjcm9zcy12ZWN0b3IgdW5wcmVkaWNhdGVkIGluc3RydWN0 aW9uLiAidmIiIGlzIHRoZSByaXNrLiAgKi8KK3VpbnQxNl90IHRlc3QxNCAodWludDE2X3Qg KmEsIHVpbnQxNl90ICpiLCAgdWludDE2X3QgKmMsIGludCBuKQoreworICB1aW50MTZ4OF90 IHZiID0gdmxkcmhxX3UxNiAoYik7CisgIHVpbnQxNl90IHJlcyA9IDA7CisgIHdoaWxlIChu ID4gMCkKKyAgICB7CisgICAgICBtdmVfcHJlZDE2X3QgcCA9IHZjdHAxNnEgKG4pOworICAg ICAgdWludDE2eDhfdCB2YSA9IHZsZHJocV96X3UxNiAoYSwgcCk7CisgICAgICB2YiA9IHZh ZGRxX3UxNiAodmEsIHZiKTsKKyAgICAgIHJlcyA9IHZhZGR2cV91MTYgKHZiKTsKKyAgICAg IGMgKz0gODsKKyAgICAgIGEgKz0gODsKKyAgICAgIGIgKz0gODsKKyAgICAgIG4gLT0gODsK KyAgICB9CisgIHJldHVybiByZXM7Cit9CisKKy8qIFVzaW5nIGFuIGFjcm9zcy12ZWN0b3Ig dW5wcmVkaWNhdGVkIGluc3RydWN0aW9uLiAidmMiIGlzIHRoZSByaXNrLiAqLwordWludDE2 X3QgdGVzdDE1ICh1aW50MTZfdCAqYSwgdWludDE2X3QgKmIsICB1aW50MTZfdCAqYywgaW50 IG4pCit7CisgIHVpbnQxNng4X3QgdmIgPSB2bGRyaHFfdTE2IChiKTsKKyAgdWludDE2X3Qg cmVzID0gMDsKKyAgd2hpbGUgKG4gPiAwKQorICAgIHsKKyAgICAgIG12ZV9wcmVkMTZfdCBw ID0gdmN0cDE2cSAobik7CisgICAgICB1aW50MTZ4OF90IHZhID0gdmxkcmhxX3pfdTE2IChh LCBwKTsKKyAgICAgIHVpbnQxNng4X3QgdmMgPSB2YWRkcV91MTYgKHZhLCB2Yik7CisgICAg ICByZXMgPSB2YWRkdmFxX3UxNiAocmVzLCB2Yyk7CisgICAgICBjICs9IDg7CisgICAgICBh ICs9IDg7CisgICAgICBiICs9IDg7CisgICAgICBuIC09IDg7CisgICAgfQorICByZXR1cm4g cmVzOworfQorCit1aW50MTZfdCB0ZXN0MTYgKHVpbnQxNl90ICphLCB1aW50MTZfdCAqYiwg IHVpbnQxNl90ICpjLCBpbnQgbikKK3sKKyAgdWludDE2X3QgcmVzID0wOworICB3aGlsZSAo biA+IDApCisgICAgeworICAgICAgbXZlX3ByZWQxNl90IHAgPSB2Y3RwMTZxIChuKTsKKyAg ICAgIHVpbnQxNng4X3QgdmIgPSB2bGRyaHFfdTE2IChiKTsKKyAgICAgIHVpbnQxNng4X3Qg dmEgPSB2bGRyaHFfel91MTYgKGEsIHApOworICAgICAgcmVzID0gdmFkZHZhcV91MTYgKHJl cywgdmIpOworICAgICAgcmVzID0gdmFkZHZhcV9wX3UxNiAocmVzLCB2YSwgcCk7CisgICAg ICBjICs9IDg7CisgICAgICBhICs9IDg7CisgICAgICBiICs9IDg7CisgICAgICBuIC09IDg7 CisgICAgfQorICByZXR1cm4gcmVzOworfQorCitpbnQgdGVzdDE3IChpbnQ4X3QgKmEsIGlu dDhfdCAqYiwgaW50OF90ICpjLCBpbnQgbikKK3sKKyAgICBpbnQgcmVzID0gMDsKKyAgICB3 aGlsZSAobiA+IDApCisgICAgeworICAgICAgICBtdmVfcHJlZDE2X3QgcCA9IHZjdHA4cSAo bik7CisgICAgICAgIGludDh4MTZfdCB2YSA9IHZsZHJicV96X3M4IChhLCBwKTsKKyAgICAg ICAgcmVzID0gdm1heHZxIChyZXMsIHZhKTsKKyAgICAgICAgbi09MTY7CisgICAgICAgIGEr PTE2OworICAgIH0KKyAgICByZXR1cm4gcmVzOworfQorCisKKworaW50IHRlc3QxOCAoaW50 OF90ICphLCBpbnQ4X3QgKmIsIGludDhfdCAqYywgaW50IG4pCit7CisgICAgaW50IHJlcyA9 IDA7CisgICAgd2hpbGUgKG4gPiAwKQorICAgIHsKKyAgICAgICAgbXZlX3ByZWQxNl90IHAg PSB2Y3RwOHEgKG4pOworICAgICAgICBpbnQ4eDE2X3QgdmEgPSB2bGRyYnFfel9zOCAoYSwg cCk7CisgICAgICAgIHJlcyA9IHZtaW52cSAocmVzLCB2YSk7CisgICAgICAgIG4tPTE2Owor ICAgICAgICBhKz0xNjsKKyAgICB9CisgICAgcmV0dXJuIHJlczsKK30KKworaW50IHRlc3Qx OSAoaW50OF90ICphLCBpbnQ4X3QgKmIsIGludDhfdCAqYywgaW50IG4pCit7CisgICAgaW50 IHJlcyA9IDA7CisgICAgd2hpbGUgKG4gPiAwKQorICAgIHsKKyAgICAgICAgbXZlX3ByZWQx Nl90IHAgPSB2Y3RwOHEgKG4pOworICAgICAgICBpbnQ4eDE2X3QgdmEgPSB2bGRyYnFfel9z OCAoYSwgcCk7CisgICAgICAgIHJlcyA9IHZtaW5hdnEgKHJlcywgdmEpOworICAgICAgICBu LT0xNjsKKyAgICAgICAgYSs9MTY7CisgICAgfQorICAgIHJldHVybiByZXM7Cit9CisKK2lu dCB0ZXN0MjAgKHVpbnQ4X3QgKmEsIHVpbnQ4X3QgKmIsIHVpbnQ4X3QgKmMsIGludCBuKQor eworICAgIGludCByZXMgPSAwOworICAgIHdoaWxlIChuID4gMCkKKyAgICB7CisgICAgICAg IG12ZV9wcmVkMTZfdCBwID0gdmN0cDhxIChuKTsKKyAgICAgICAgdWludDh4MTZfdCB2YSA9 IHZsZHJicV96X3U4IChhLCBwKTsKKyAgICAgICAgcmVzID0gdm1pbnZxIChyZXMsIHZhKTsK KyAgICAgICAgbi09MTY7CisgICAgICAgIGErPTE2OworICAgIH0KKyAgICByZXR1cm4gcmVz OworfQorCit1aW50OHgxNl90IHRlc3QyMSAodWludDhfdCAqYSwgdWludDMyX3QgKmIsIGlu dCBuLCB1aW50OHgxNl90IHJlcykKK3sKKyAgICB3aGlsZSAobiA+IDApCisgICAgeworICAg ICAgICBtdmVfcHJlZDE2X3QgcCA9IHZjdHA4cSAobik7CisgICAgICAgIHVpbnQ4eDE2X3Qg dmEgPSB2bGRyYnFfel91OCAoYSwgcCk7CisgICAgICAgIHJlcyA9IHZzaGxjcV91OCAodmEs IGIsIDEpOworICAgICAgICBuLT0xNjsKKyAgICAgICAgYSs9MTY7CisgICAgfQorICAgIHJl dHVybiByZXM7Cit9CisKK2ludDh4MTZfdCB0ZXN0MjIgKGludDhfdCAqYSwgaW50MzJfdCAq YiwgaW50IG4sIGludDh4MTZfdCByZXMpCit7CisgICAgd2hpbGUgKG4gPiAwKQorICAgIHsK KyAgICAgICAgbXZlX3ByZWQxNl90IHAgPSB2Y3RwOHEgKG4pOworICAgICAgICBpbnQ4eDE2 X3QgdmEgPSB2bGRyYnFfel9zOCAoYSwgcCk7CisgICAgICAgIHJlcyA9IHZzaGxjcV9zOCAo dmEsIGIsIDEpOworICAgICAgICBuLT0xNjsKKyAgICAgICAgYSs9MTY7CisgICAgfQorICAg IHJldHVybiByZXM7Cit9CisKKy8qIFVzaW5nIGFuIHVuc2lnbmVkIG51bWJlciBvZiBlbGVt ZW50cyB0byBjb3VudCBkb3duIGZyb20sIHdpdGggYSA+MCovCit2b2lkIHRlc3QyMyAoaW50 MzJfdCAqYSwgaW50MzJfdCAqYiwgaW50MzJfdCAqYywgdW5zaWduZWQgaW50IG4pCit7Cisg IHdoaWxlIChuID4gMCkKKyAgICB7CisgICAgICBtdmVfcHJlZDE2X3QgcCA9IHZjdHAzMnEg KG4pOworICAgICAgaW50MzJ4NF90IHZhID0gdmxkcndxX3pfczMyIChhLCBwKTsKKyAgICAg IGludDMyeDRfdCB2YiA9IHZsZHJ3cV96X3MzMiAoYiwgcCk7CisgICAgICBpbnQzMng0X3Qg dmMgPSB2YWRkcV94X3MzMiAodmEsIHZiLCBwKTsKKyAgICAgIHZzdHJ3cV9wX3MzMiAoYywg dmMsIHApOworICAgICAgYys9NDsKKyAgICAgIGErPTQ7CisgICAgICBiKz00OworICAgICAg bi09NDsKKyAgICB9Cit9CisKKy8qIFVzaW5nIGFuIHVuc2lnbmVkIG51bWJlciBvZiBlbGVt ZW50cyB0byBjb3VudCB1cCB0bywgd2l0aCBhIDxuKi8KK3ZvaWQgdGVzdDI0ICh1aW50OF90 ICphLCB1aW50OF90ICpiLCB1aW50OF90ICpjLCB1bnNpZ25lZCBpbnQgbikKK3sKKyAgICBm b3IgKGludCBpID0gMDsgaSA8IG47IGkrPTE2KQorICAgIHsKKyAgICAgICAgbXZlX3ByZWQx Nl90IHAgPSB2Y3RwOHEgKG4taSk7CisgICAgICAgIHVpbnQ4eDE2X3QgdmEgPSB2bGRyYnFf el91OCAoYSwgcCk7CisgICAgICAgIHVpbnQ4eDE2X3QgdmIgPSB2bGRyYnFfel91OCAoYiwg cCk7CisgICAgICAgIHVpbnQ4eDE2X3QgdmMgPSB2YWRkcV94X3U4ICh2YSwgdmIsIHApOwor ICAgICAgICB2c3RyYnFfcF91OCAoYywgdmMsIHApOworICAgICAgICBuLT0xNjsKKyAgICB9 Cit9CisKKworLyogVXNpbmcgYW4gdW5zaWduZWQgbnVtYmVyIG9mIGVsZW1lbnRzIHRvIGNv dW50IHVwIHRvLCB3aXRoIGEgPD1uKi8KK3ZvaWQgdGVzdDI1ICh1aW50OF90ICphLCB1aW50 OF90ICpiLCB1aW50OF90ICpjLCB1bnNpZ25lZCBpbnQgbikKK3sKKyAgICBmb3IgKGludCBp ID0gMTsgaSA8PSBuOyBpKz0xNikKKyAgICB7CisgICAgICAgIG12ZV9wcmVkMTZfdCBwID0g dmN0cDhxIChuLWkrMSk7CisgICAgICAgIHVpbnQ4eDE2X3QgdmEgPSB2bGRyYnFfel91OCAo YSwgcCk7CisgICAgICAgIHVpbnQ4eDE2X3QgdmIgPSB2bGRyYnFfel91OCAoYiwgcCk7Cisg ICAgICAgIHVpbnQ4eDE2X3QgdmMgPSB2YWRkcV94X3U4ICh2YSwgdmIsIHApOworICAgICAg ICB2c3RyYnFfcF91OCAoYywgdmMsIHApOworICAgICAgICBuLT0xNjsKKyAgICB9Cit9CisK Ky8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlci1ub3QgIlx0ZGxzdHAiIH0gfSAqLwor LyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyLW5vdCAiXHRsZXRwIiB9IH0gKi8KXCBO byBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCg== --------------TPGGCryF4Q0QjZOTyQ3fUljO--