From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-9.8 required=3.0 tests=DKIM_INVALID,DKIM_SIGNED, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY, SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 27808ECDE20 for ; Wed, 11 Sep 2019 20:05:58 +0000 (UTC) Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id D682B20578 for ; Wed, 11 Sep 2019 20:05:57 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=citrix.com header.i=@citrix.com header.b="Nm73tg88" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org D682B20578 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=citrix.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=xen-devel-bounces@lists.xenproject.org Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1i88rp-00032W-PL; Wed, 11 Sep 2019 20:05:29 +0000 Received: from all-amaz-eas1.inumbo.com ([34.197.232.57] helo=us1-amaz-eas2.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1i88ro-00031l-4w for xen-devel@lists.xenproject.org; Wed, 11 Sep 2019 20:05:28 +0000 X-Inumbo-ID: 77eb7678-d4cf-11e9-83dd-12813bfff9fa Received: from esa1.hc3370-68.iphmx.com (unknown [216.71.145.142]) by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS id 77eb7678-d4cf-11e9-83dd-12813bfff9fa; Wed, 11 Sep 2019 20:05:14 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=citrix.com; s=securemail; t=1568232315; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=GlV4lkCRyDHeXhLWqes45S1ALyFSuCNDXCGmddoW7LU=; b=Nm73tg88JszplMdPIiE5xRgo+BRSv3/ahFt08urFW9StiUX7kCN8zUAx 1c60xTMI7c8/tD+rRkrGftJXUFzk9bU6BroZ5FFFY0yhnhzhIaNkwKY0M i7Ql0aobpxQgOgbfHRrY9Gfwagn6v9Cbc+thM+RsYppmMXXDAjbzTFsQS U=; Authentication-Results: esa1.hc3370-68.iphmx.com; dkim=none (message not signed) header.i=none; spf=None smtp.pra=andrew.cooper3@citrix.com; spf=Pass smtp.mailfrom=Andrew.Cooper3@citrix.com; spf=None smtp.helo=postmaster@mail.citrix.com Received-SPF: None (esa1.hc3370-68.iphmx.com: no sender authenticity information available from domain of andrew.cooper3@citrix.com) identity=pra; client-ip=162.221.158.21; receiver=esa1.hc3370-68.iphmx.com; envelope-from="Andrew.Cooper3@citrix.com"; x-sender="andrew.cooper3@citrix.com"; x-conformance=sidf_compatible Received-SPF: Pass (esa1.hc3370-68.iphmx.com: domain of Andrew.Cooper3@citrix.com designates 162.221.158.21 as permitted sender) identity=mailfrom; client-ip=162.221.158.21; receiver=esa1.hc3370-68.iphmx.com; envelope-from="Andrew.Cooper3@citrix.com"; x-sender="Andrew.Cooper3@citrix.com"; x-conformance=sidf_compatible; x-record-type="v=spf1"; x-record-text="v=spf1 ip4:209.167.231.154 ip4:178.63.86.133 ip4:195.66.111.40/30 ip4:85.115.9.32/28 ip4:199.102.83.4 ip4:192.28.146.160 ip4:192.28.146.107 ip4:216.52.6.88 ip4:216.52.6.188 ip4:162.221.158.21 ip4:162.221.156.83 ~all" Received-SPF: None (esa1.hc3370-68.iphmx.com: no sender authenticity information available from domain of postmaster@mail.citrix.com) identity=helo; client-ip=162.221.158.21; receiver=esa1.hc3370-68.iphmx.com; envelope-from="Andrew.Cooper3@citrix.com"; x-sender="postmaster@mail.citrix.com"; x-conformance=sidf_compatible IronPort-SDR: sB2upHIq7COupJ7AdIKNAWIp8qwjNY5AULf5XRGRUDzpU8k5caTFT3/Vw7EaL8QaDWQhoYbQfD 44vuCleTaTRTHFzuOAdbbw5LIWTLHyfbBVOnSiSif0GOOogtWhnXfS8hgVGMH8ksfuzuRM8+0l 8KdtuVB+PTVKOnq5YcLmV/GcjSq6bgCkY6iXRe3a2XkaClo+hEFqMuI/Jmqq8mC6bxUS/+tTZX 9qaGpjSUlMPi+xmj4rsaPLZOZhENiwAngyHT5VpAxQne2+xXwCj9LZdV6NeSa/Dg2N0KfVIqLA Io4= X-SBRS: 2.7 X-MesageID: 5506247 X-Ironport-Server: esa1.hc3370-68.iphmx.com X-Remote-IP: 162.221.158.21 X-Policy: $RELAYED X-IronPort-AV: E=Sophos;i="5.64,494,1559534400"; d="scan'208";a="5506247" From: Andrew Cooper To: Xen-devel Date: Wed, 11 Sep 2019 21:05:02 +0100 Message-ID: <20190911200504.5693-7-andrew.cooper3@citrix.com> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20190911200504.5693-1-andrew.cooper3@citrix.com> References: <20190911200504.5693-1-andrew.cooper3@citrix.com> MIME-Version: 1.0 Subject: [Xen-devel] [PATCH 6/8] tools/libxc: Rework xc_cpuid_apply_policy() to use {get, set}_cpu_policy() X-BeenThere: xen-devel@lists.xenproject.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Cc: Andrew Cooper , Ian Jackson , Wei Liu , Jan Beulich , =?UTF-8?q?Roger=20Pau=20Monn=C3=A9?= Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" VGhlIHB1cnBvc2Ugb2YgdGhpcyBjaGFuZ2UgaXMgdG8gc3RvcCB1c2luZyB4Y19jcHVpZF9kb19k b21jdGwoKSwgYW5kIHRvIHN0b3AKYmFzaW5nIGRlY2lzaW9ucyBvbiBhIGxvY2FsIENQVUlEIGlu c3RydWN0aW9uLiAgVGhpcyBpcyBub3QgYSBjb3JyZWN0IG9yCmFwcHJvcHJpYXRlIHdheSB0byBj b25zdHJ1Y3QgcG9saWN5IGluZm9ybWF0aW9uIGZvciBvdGhlciBkb21haW5zLgoKVGhlIG92ZXJ3 aGVsbWluZyBtYWpvcml0eSBvZiB0aGlzIGxvZ2ljIGlzIHJlZHVuZGFudCB3aXRoIHRoZSBwb2xp Y3kgbG9naWMgaW4KWGVuLCBidXQgaGFzIGEgaGFiaXQgb2YgYmVjb21pbmcgc3RhbGUgKGUuZy4g Yy9zIDk3ZTRlYmRjZDc2IHJlc3VsdGluZyBpbgpBVlg1MTJfQkYxNiBub3QgZXZlciBhY3R1YWxs eSBiZWluZyBvZmZlcmVkIHRvIGd1ZXN0cykuCgpUaGVyZSBhcmUgYSBmZXcgc3VidGxlIHNpZGUg ZWZmZWN0cyB3aGljaCBuZWVkIHRvIHJlbWFpbiBpbiBwbGFjZS4gIEEKc3VjY2Vzc2Z1bCBjYWxs IHRvIHhjX2NwdWlkX2FwcGx5X3BvbGljeSgpIG11c3QgcmVzdWx0IGluIGEgY2FsbCB0bwp4Y19z ZXRfZG9tYWluX2NwdV9wb2xpY3koKSBiZWNhdXNlIHRoYXQgaXMgY3VycmVudGx5IHRoZSBvbmx5 IHdheSB0aGUKSVRTQy9WTVgvU1ZNIGJpdHMgYmVjb21lIHJlZmxlY3RlZCBpbiB0aGUgZ3Vlc3Rz IENQVUlEIHZpZXcuICBGdXR1cmUgY2xlYW51cAp3aWxsIHJlbW92ZSB0aGlzIHNpZGUgZWZmZWN0 LgoKVGhlIHRvcG9sb2d5IHR3ZWFrcyBhcmUgbG9jYWwgdG8gbGlieGMuICBFeHRlbmQgc3RydWN0 IGNwdWlkX3BvbGljeSB3aXRoCmVub3VnaCBuYW1lZCBmaWVsZHMgdG8gZXhwcmVzcyB0aGUgbG9n aWMsIGJ1dCBrZWVwIGl0IGlkZW50aWNhbCB0byBiZWZvcmUuCkZpeGluZyB0b3BvbG9neSByZXBy ZXNlbnRhdGlvbiBpcyBhbm90aGVyIGZ1dHVyZSBhcmVhIG9mIHdvcmsuCgpObyAoZXhwZWN0ZWQp IGNoYW5nZSBpbiBiZWhhdmlvdXIuCgpTaWduZWQtb2ZmLWJ5OiBBbmRyZXcgQ29vcGVyIDxhbmRy ZXcuY29vcGVyM0BjaXRyaXguY29tPgotLS0KQ0M6IEphbiBCZXVsaWNoIDxKQmV1bGljaEBzdXNl LmNvbT4KQ0M6IFdlaSBMaXUgPHdsQHhlbi5vcmc+CkNDOiBSb2dlciBQYXUgTW9ubsOpIDxyb2dl ci5wYXVAY2l0cml4LmNvbT4KQ0M6IElhbiBKYWNrc29uIDxJYW4uSmFja3NvbkBjaXRyaXguY29t PgoKVGhlIHJlcG9zaXRpb25pbmcgb2YgeGNfY3B1aWRfYXBwbHlfcG9saWN5KCkgcmVsYXRpdmUg dG8geGNfY3B1aWRfc2V0KCkgaXMKc2ltcGx5IHRvIG1ha2UgdGhlIGRpZmYgcmVhZGFibGUuICBJ dCBpcyBjb21wbGV0ZWx5IGlsbGVnaWJsZSBvdGhlcndpc2UuCi0tLQogdG9vbHMvbGlieGMveGNf Y3B1aWRfeDg2LmMgICAgICB8IDc5OCArKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCiB4ZW4vaW5jbHVkZS94ZW4vbGliL3g4Ni9jcHVpZC5oIHwgIDExICstCiAyIGZpbGVz IGNoYW5nZWQsIDE5NyBpbnNlcnRpb25zKCspLCA2MTIgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0 IGEvdG9vbHMvbGlieGMveGNfY3B1aWRfeDg2LmMgYi90b29scy9saWJ4Yy94Y19jcHVpZF94ODYu YwppbmRleCBkMWEyYjYxMjE0Li5jODhhY2JhYzllIDEwMDY0NAotLS0gYS90b29scy9saWJ4Yy94 Y19jcHVpZF94ODYuYworKysgYi90b29scy9saWJ4Yy94Y19jcHVpZF94ODYuYwpAQCAtMzQsMTgg KzM0LDEzIEBAIGVudW0gewogCiAjaW5jbHVkZSA8eGVuL2FzbS94ODYtdmVuZG9ycy5oPgogCi0j aW5jbHVkZSA8eGVuL2xpYi94ODYvY3B1aWQuaD4KLSNpbmNsdWRlIDx4ZW4vbGliL3g4Ni9tc3Iu aD4KKyNpbmNsdWRlIDx4ZW4vbGliL3g4Ni9jcHUtcG9saWN5Lmg+CiAKICNkZWZpbmUgYml0bWFz a29mKGlkeCkgICAgICAoMXUgPDwgKChpZHgpICYgMzEpKQogI2RlZmluZSBmZWF0dXJld29yZF9v ZihpZHgpICgoaWR4KSA+PiA1KQogI2RlZmluZSBjbGVhcl9mZWF0dXJlKGlkeCwgZHN0KSAoKGRz dCkgJj0gfmJpdG1hc2tvZihpZHgpKQogI2RlZmluZSBzZXRfZmVhdHVyZShpZHgsIGRzdCkgICAo KGRzdCkgfD0gIGJpdG1hc2tvZihpZHgpKQogCi0jZGVmaW5lIERFRl9NQVhfQkFTRSAweDAwMDAw MDBkdQotI2RlZmluZSBERUZfTUFYX0lOVEVMRVhUICAweDgwMDAwMDA4dQotI2RlZmluZSBERUZf TUFYX0FNREVYVCAgICAweDgwMDAwMDFjdQotCiBpbnQgeGNfZ2V0X2NwdV9sZXZlbGxpbmdfY2Fw cyh4Y19pbnRlcmZhY2UgKnhjaCwgdWludDMyX3QgKmNhcHMpCiB7CiAgICAgREVDTEFSRV9TWVND VEw7CkBAIC0yNzgsNjA5ICsyNzMsNiBAQCBpbnQgeGNfc2V0X2RvbWFpbl9jcHVfcG9saWN5KHhj X2ludGVyZmFjZSAqeGNoLCB1aW50MzJfdCBkb21pZCwKICAgICByZXR1cm4gcmV0OwogfQogCi1z dHJ1Y3QgY3B1aWRfZG9tYWluX2luZm8KLXsKLSAgICB1bnNpZ25lZCBpbnQgdmVuZG9yOyAvKiBY ODZfVkVORE9SXyogKi8KLQotICAgIGJvb2wgaHZtOwotICAgIHVpbnQ2NF90IHhmZWF0dXJlX21h c2s7Ci0KLSAgICAvKgotICAgICAqIENhcmVmdWwgd2l0aCBmZWF0dXJlc2V0IGxlbmd0aHMuCi0g ICAgICoKLSAgICAgKiBDb2RlIGluIHRoaXMgZmlsZSByZXF1aXJlcyBmZWF0dXJlc2V0IHRvIGhh dmUgYXQgbGVhc3QKLSAgICAgKiB4Y19nZXRfY3B1X2ZlYXR1cmVzZXRfc2l6ZSgpIGVudHJpZXMu ICBUaGlzIGlzIGEgbGlieGMgY29tcGlsZXRpbWUKLSAgICAgKiBjb25zdGFudC4KLSAgICAgKgot ICAgICAqIFRoZSBmZWF0dXJlc2V0IGxlbmd0aCB1c2VkIGJ5IHRoZSBoeXBlcnZpc29yIG1heSBi ZSBkaWZmZXJlbnQuICBJZiB0aGUKLSAgICAgKiBoeXBlcnZpc29yIHZlcnNpb24gaXMgbG9uZ2Vy LCBYRU5fU1lTQ1RMX2dldF9jcHVfZmVhdHVyZXNldCB3aWxsIGZhaWwKLSAgICAgKiB3aXRoIC1F Tk9CVUZTLCBhbmQgbGlieGMgcmVhbGx5IGRvZXMgbmVlZCByZWJ1aWxkaW5nLiAgSWYgdGhlCi0g ICAgICogaHlwZXJ2aXNvciB2ZXJzaW9uIGlzIHNob3J0ZXIsIGl0IGlzIHNhZmUgdG8gemVyby1l eHRlbmQuCi0gICAgICovCi0gICAgdWludDMyX3QgKmZlYXR1cmVzZXQ7Ci0gICAgdW5zaWduZWQg aW50IG5yX2ZlYXR1cmVzOwotCi0gICAgLyogUFYtb25seSBpbmZvcm1hdGlvbi4gKi8KLSAgICBi b29sIHB2NjQ7Ci0KLSAgICAvKiBIVk0tb25seSBpbmZvcm1hdGlvbi4gKi8KLSAgICBib29sIHBh ZTsKLSAgICBib29sIG5lc3RlZGh2bTsKLX07Ci0KLXN0YXRpYyB2b2lkIGNwdWlkKGNvbnN0IHVu c2lnbmVkIGludCAqaW5wdXQsIHVuc2lnbmVkIGludCAqcmVncykKLXsKLSAgICB1bnNpZ25lZCBp bnQgY291bnQgPSAoaW5wdXRbMV0gPT0gWEVOX0NQVUlEX0lOUFVUX1VOVVNFRCkgPyAwIDogaW5w dXRbMV07Ci0jaWZkZWYgX19pMzg2X18KLSAgICAvKiBVc2UgdGhlIHN0YWNrIHRvIGF2b2lkIHJl ZyBjb25zdHJhaW50IGZhaWx1cmVzIHdpdGggc29tZSBnY2MgZmxhZ3MgKi8KLSAgICBhc20gKAot ICAgICAgICAicHVzaCAlJWVieDsgcHVzaCAlJWVkeFxuXHQiCi0gICAgICAgICJjcHVpZFxuXHQi Ci0gICAgICAgICJtb3YgJSVlYngsNCglNClcblx0IgotICAgICAgICAibW92ICUlZWR4LDEyKCU0 KVxuXHQiCi0gICAgICAgICJwb3AgJSVlZHg7IHBvcCAlJWVieFxuXHQiCi0gICAgICAgIDogIj1h IiAocmVnc1swXSksICI9YyIgKHJlZ3NbMl0pCi0gICAgICAgIDogIjAiIChpbnB1dFswXSksICIx IiAoY291bnQpLCAiUyIgKHJlZ3MpCi0gICAgICAgIDogIm1lbW9yeSIgKTsKLSNlbHNlCi0gICAg YXNtICgKLSAgICAgICAgImNwdWlkIgotICAgICAgICA6ICI9YSIgKHJlZ3NbMF0pLCAiPWIiIChy ZWdzWzFdKSwgIj1jIiAocmVnc1syXSksICI9ZCIgKHJlZ3NbM10pCi0gICAgICAgIDogIjAiIChp bnB1dFswXSksICIyIiAoY291bnQpICk7Ci0jZW5kaWYKLX0KLQotc3RhdGljIGludCBnZXRfY3B1 aWRfZG9tYWluX2luZm8oeGNfaW50ZXJmYWNlICp4Y2gsIHVpbnQzMl90IGRvbWlkLAotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNwdWlkX2RvbWFpbl9pbmZvICppbmZv LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDMyX3QgKmZlYXR1 cmVzZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbnJf ZmVhdHVyZXMpCi17Ci0gICAgc3RydWN0IHhlbl9kb21jdGwgZG9tY3RsID0ge307Ci0gICAgeGNf ZG9taW5mb190IGRpOwotICAgIHVuc2lnbmVkIGludCBpblsyXSA9IHsgMCwgfjBVIH0sIHJlZ3Nb NF07Ci0gICAgdW5zaWduZWQgaW50IGksIGhvc3RfbnJfZmVhdHVyZXMgPSB4Y19nZXRfY3B1X2Zl YXR1cmVzZXRfc2l6ZSgpOwotICAgIGludCByYzsKLQotICAgIGNwdWlkKGluLCByZWdzKTsKLSAg ICBpbmZvLT52ZW5kb3IgPSB4ODZfY3B1aWRfbG9va3VwX3ZlbmRvcihyZWdzWzFdLCByZWdzWzJd LCByZWdzWzNdKTsKLQotICAgIGlmICggeGNfZG9tYWluX2dldGluZm8oeGNoLCBkb21pZCwgMSwg JmRpKSAhPSAxIHx8Ci0gICAgICAgICBkaS5kb21pZCAhPSBkb21pZCApCi0gICAgICAgIHJldHVy biAtRVNSQ0g7Ci0KLSAgICBpbmZvLT5odm0gPSBkaS5odm07Ci0KLSAgICBpbmZvLT5mZWF0dXJl c2V0ID0gY2FsbG9jKGhvc3RfbnJfZmVhdHVyZXMsIHNpemVvZigqaW5mby0+ZmVhdHVyZXNldCkp OwotICAgIGlmICggIWluZm8tPmZlYXR1cmVzZXQgKQotICAgICAgICByZXR1cm4gLUVOT01FTTsK LQotICAgIGluZm8tPm5yX2ZlYXR1cmVzID0gaG9zdF9ucl9mZWF0dXJlczsKLQotICAgIGlmICgg ZmVhdHVyZXNldCApCi0gICAgewotICAgICAgICAvKgotICAgICAgICAgKiBUaGUgdXNlciBzdXBw bGllZCBmZWF0dXJlc2V0IG1heSBiZSBzaG9ydGVyIG9yIGxvbmdlciB0aGFuCi0gICAgICAgICAq IGhvc3RfbnJfZmVhdHVyZXMuICBTaG9ydGVyIGlzIGZpbmUsIGFuZCB3ZSB3aWxsIHplcm8tZXh0 ZW5kLgotICAgICAgICAgKiBMb25nZXIgaXMgZmluZSwgc28gbG9uZyBhcyBpdCBvbmx5IHBhZGRl ZCB3aXRoIHplcm9zLgotICAgICAgICAgKi8KLSAgICAgICAgdW5zaWduZWQgaW50IGZzbGVuID0g bWluKGhvc3RfbnJfZmVhdHVyZXMsIG5yX2ZlYXR1cmVzKTsKLQotICAgICAgICBtZW1jcHkoaW5m by0+ZmVhdHVyZXNldCwgZmVhdHVyZXNldCwKLSAgICAgICAgICAgICAgIGZzbGVuICogc2l6ZW9m KCppbmZvLT5mZWF0dXJlc2V0KSk7Ci0KLSAgICAgICAgLyogQ2hlY2sgZm9yIHRydW5jYXRlZCBz ZXQgYml0cy4gKi8KLSAgICAgICAgZm9yICggaSA9IGZzbGVuOyBpIDwgbnJfZmVhdHVyZXM7ICsr aSApCi0gICAgICAgICAgICBpZiAoIGZlYXR1cmVzZXRbaV0gIT0gMCApCi0gICAgICAgICAgICAg ICAgcmV0dXJuIC1FT1BOT1RTVVBQOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICBy YyA9IHhjX2dldF9jcHVfZmVhdHVyZXNldCh4Y2gsIChpbmZvLT5odm0KLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBYRU5fU1lTQ1RMX2NwdV9mZWF0dXJlc2V0X2h2 bQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IFhFTl9TWVNDVExf Y3B1X2ZlYXR1cmVzZXRfcHYpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAm aG9zdF9ucl9mZWF0dXJlcywgaW5mby0+ZmVhdHVyZXNldCk7Ci0gICAgICAgIGlmICggcmMgKQot ICAgICAgICAgICAgcmV0dXJuIC1lcnJubzsKLSAgICB9Ci0KLSAgICAvKiBHZXQgeHN0YXRlIGlu Zm9ybWF0aW9uLiAqLwotICAgIGRvbWN0bC5jbWQgPSBYRU5fRE9NQ1RMX2dldHZjcHVleHRzdGF0 ZTsKLSAgICBkb21jdGwuZG9tYWluID0gZG9taWQ7Ci0gICAgcmMgPSBkb19kb21jdGwoeGNoLCAm ZG9tY3RsKTsKLSAgICBpZiAoIHJjICkKLSAgICAgICAgcmV0dXJuIC1lcnJubzsKLQotICAgIGlu Zm8tPnhmZWF0dXJlX21hc2sgPSBkb21jdGwudS52Y3B1ZXh0c3RhdGUueGZlYXR1cmVfbWFzazsK LQotICAgIGlmICggZGkuaHZtICkKLSAgICB7Ci0gICAgICAgIHVpbnQ2NF90IHZhbDsKLQotICAg ICAgICByYyA9IHhjX2h2bV9wYXJhbV9nZXQoeGNoLCBkb21pZCwgSFZNX1BBUkFNX1BBRV9FTkFC TEVELCAmdmFsKTsKLSAgICAgICAgaWYgKCByYyApCi0gICAgICAgICAgICByZXR1cm4gLWVycm5v OwotCi0gICAgICAgIGluZm8tPnBhZSA9ICEhdmFsOwotCi0gICAgICAgIHJjID0geGNfaHZtX3Bh cmFtX2dldCh4Y2gsIGRvbWlkLCBIVk1fUEFSQU1fTkVTVEVESFZNLCAmdmFsKTsKLSAgICAgICAg aWYgKCByYyApCi0gICAgICAgICAgICByZXR1cm4gLWVycm5vOwotCi0gICAgICAgIGluZm8tPm5l c3RlZGh2bSA9ICEhdmFsOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICB1bnNpZ25l ZCBpbnQgd2lkdGg7Ci0KLSAgICAgICAgcmMgPSB4Y19kb21haW5fZ2V0X2d1ZXN0X3dpZHRoKHhj aCwgZG9taWQsICZ3aWR0aCk7Ci0gICAgICAgIGlmICggcmMgKQotICAgICAgICAgICAgcmV0dXJu IC1lcnJubzsKLQotICAgICAgICBpbmZvLT5wdjY0ID0gKHdpZHRoID09IDgpOwotICAgIH0KLQot ICAgIHJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBmcmVlX2NwdWlkX2RvbWFpbl9pbmZvKHN0 cnVjdCBjcHVpZF9kb21haW5faW5mbyAqaW5mbykKLXsKLSAgICBmcmVlKGluZm8tPmZlYXR1cmVz ZXQpOwotfQotCi1zdGF0aWMgdm9pZCBhbWRfeGNfY3B1aWRfcG9saWN5KGNvbnN0IHN0cnVjdCBj cHVpZF9kb21haW5faW5mbyAqaW5mbywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Y29uc3QgdW5zaWduZWQgaW50ICppbnB1dCwgdW5zaWduZWQgaW50ICpyZWdzKQotewotICAgIHN3 aXRjaCAoIGlucHV0WzBdICkKLSAgICB7Ci0gICAgY2FzZSAweDAwMDAwMDAyOgotICAgIGNhc2Ug MHgwMDAwMDAwNDoKLSAgICAgICAgcmVnc1swXSA9IHJlZ3NbMV0gPSByZWdzWzJdID0gMDsKLSAg ICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIDB4ODAwMDAwMDA6Ci0gICAgICAgIGlmICggcmVnc1sw XSA+IERFRl9NQVhfQU1ERVhUICkKLSAgICAgICAgICAgIHJlZ3NbMF0gPSBERUZfTUFYX0FNREVY VDsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIDB4ODAwMDAwMDg6Ci0gICAgICAgIC8qCi0g ICAgICAgICAqIEVDWFsxNToxMl0gaXMgQXBpY0lkQ29yZVNpemU6IEVDWFs3OjBdIGlzIE51bWJl ck9mQ29yZXMgKG1pbnVzIG9uZSkuCi0gICAgICAgICAqIFVwZGF0ZSB0byByZWZsZWN0IHZMQVBJ Q19JRCA9IHZDUFVfSUQgKiAyLgotICAgICAgICAgKi8KLSAgICAgICAgcmVnc1syXSA9ICgocmVn c1syXSArICgxdSA8PCAxMikpICYgMHhmMDAwdSkgfAotICAgICAgICAgICAgICAgICAgKChyZWdz WzJdICYgMHhmZnUpIDw8IDEpIHwgMXU7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSAweDgw MDAwMDBhOiB7Ci0gICAgICAgIGlmICggIWluZm8tPm5lc3RlZGh2bSApCi0gICAgICAgIHsKLSAg ICAgICAgICAgIHJlZ3NbMF0gPSByZWdzWzFdID0gcmVnc1syXSA9IHJlZ3NbM10gPSAwOwotICAg ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotI2RlZmluZSBTVk1fRkVBVFVSRV9OUFQgICAg ICAgICAgICAweDAwMDAwMDAxIC8qIE5lc3RlZCBwYWdlIHRhYmxlIHN1cHBvcnQgKi8KLSNkZWZp bmUgU1ZNX0ZFQVRVUkVfTEJSViAgICAgICAgICAgMHgwMDAwMDAwMiAvKiBMQlIgdmlydHVhbGl6 YXRpb24gc3VwcG9ydCAqLwotI2RlZmluZSBTVk1fRkVBVFVSRV9TVk1MICAgICAgICAgICAweDAw MDAwMDA0IC8qIFNWTSBsb2NraW5nIE1TUiBzdXBwb3J0ICovCi0jZGVmaW5lIFNWTV9GRUFUVVJF X05SSVBTICAgICAgICAgIDB4MDAwMDAwMDggLyogTmV4dCBSSVAgc2F2ZSBvbiBWTUVYSVQgKi8K LSNkZWZpbmUgU1ZNX0ZFQVRVUkVfVFNDUkFURU1TUiAgICAgMHgwMDAwMDAxMCAvKiBUU0MgcmF0 aW8gTVNSIHN1cHBvcnQgKi8KLSNkZWZpbmUgU1ZNX0ZFQVRVUkVfVk1DQkNMRUFOICAgICAgMHgw MDAwMDAyMCAvKiBWTUNCIGNsZWFuIGJpdHMgc3VwcG9ydCAqLwotI2RlZmluZSBTVk1fRkVBVFVS RV9GTFVTSEJZQVNJRCAgICAweDAwMDAwMDQwIC8qIFRMQiBmbHVzaCBieSBBU0lEIHN1cHBvcnQg Ki8KLSNkZWZpbmUgU1ZNX0ZFQVRVUkVfREVDT0RFQVNTSVNUUyAgMHgwMDAwMDA4MCAvKiBEZWNv ZGUgYXNzaXN0cyBzdXBwb3J0ICovCi0jZGVmaW5lIFNWTV9GRUFUVVJFX1BBVVNFRklMVEVSICAg IDB4MDAwMDA0MDAgLyogUGF1c2UgaW50ZXJjZXB0IGZpbHRlciAqLwotCi0gICAgICAgIC8qIFBh c3MgMTogT25seSBwYXNzdGhyb3VnaCBTVk0gZmVhdHVyZXMgd2hpY2ggYXJlCi0gICAgICAgICAq IGF2YWlsYWJsZSBpbiBodyBhbmQgd2hpY2ggYXJlIGltcGxlbWVudGVkCi0gICAgICAgICAqLwot ICAgICAgICByZWdzWzNdICY9IChTVk1fRkVBVFVSRV9OUFQgfCBTVk1fRkVBVFVSRV9MQlJWIHwg XAotICAgICAgICAgICAgU1ZNX0ZFQVRVUkVfTlJJUFMgfCBTVk1fRkVBVFVSRV9QQVVTRUZJTFRF UiB8IFwKLSAgICAgICAgICAgIFNWTV9GRUFUVVJFX0RFQ09ERUFTU0lTVFMpOwotCi0gICAgICAg IC8qIFBhc3MgMjogQWx3YXlzIGVuYWJsZSBTVk0gZmVhdHVyZXMgd2hpY2ggYXJlIGVtdWxhdGVk ICovCi0gICAgICAgIHJlZ3NbM10gfD0gU1ZNX0ZFQVRVUkVfVk1DQkNMRUFOIHwgU1ZNX0ZFQVRV UkVfVFNDUkFURU1TUjsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgfQotfQotCi1zdGF0 aWMgdm9pZCBpbnRlbF94Y19jcHVpZF9wb2xpY3koY29uc3Qgc3RydWN0IGNwdWlkX2RvbWFpbl9p bmZvICppbmZvLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2ln bmVkIGludCAqaW5wdXQsIHVuc2lnbmVkIGludCAqcmVncykKLXsKLSAgICBzd2l0Y2ggKCBpbnB1 dFswXSApCi0gICAgewotICAgIGNhc2UgMHgwMDAwMDAwNDoKLSAgICAgICAgLyoKLSAgICAgICAg ICogRUFYWzMxOjI2XSBpcyBNYXhpbXVtIENvcmVzIFBlciBQYWNrYWdlIChtaW51cyBvbmUpLgot ICAgICAgICAgKiBVcGRhdGUgdG8gcmVmbGVjdCB2TEFQSUNfSUQgPSB2Q1BVX0lEICogMi4KLSAg ICAgICAgICovCi0gICAgICAgIHJlZ3NbMF0gPSAoKChyZWdzWzBdICYgMHg3YzAwMDAwMHUpIDw8 IDEpIHwgMHgwNDAwMDAwMHUgfAotICAgICAgICAgICAgICAgICAgIChyZWdzWzBdICYgMHgzZmZ1 KSk7Ci0gICAgICAgIHJlZ3NbM10gJj0gMHgzZmZ1OwotICAgICAgICBicmVhazsKLQotICAgIGNh c2UgMHg4MDAwMDAwMDoKLSAgICAgICAgaWYgKCByZWdzWzBdID4gREVGX01BWF9JTlRFTEVYVCAp Ci0gICAgICAgICAgICByZWdzWzBdID0gREVGX01BWF9JTlRFTEVYVDsKLSAgICAgICAgYnJlYWs7 Ci0KLSAgICBjYXNlIDB4ODAwMDAwMDU6Ci0gICAgICAgIHJlZ3NbMF0gPSByZWdzWzFdID0gcmVn c1syXSA9IDA7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSAweDgwMDAwMDA4OgotICAgICAg ICAvKiBNYXNrIEFNRCBOdW1iZXIgb2YgQ29yZXMgaW5mb3JtYXRpb24uICovCi0gICAgICAgIHJl Z3NbMl0gPSAwOwotICAgICAgICBicmVhazsKLSAgICB9Ci19Ci0KLXN0YXRpYyB2b2lkIHhjX2Nw dWlkX2h2bV9wb2xpY3koY29uc3Qgc3RydWN0IGNwdWlkX2RvbWFpbl9pbmZvICppbmZvLAotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgKmlucHV0LCB1 bnNpZ25lZCBpbnQgKnJlZ3MpCi17Ci0gICAgc3dpdGNoICggaW5wdXRbMF0gKQotICAgIHsKLSAg ICBjYXNlIDB4MDAwMDAwMDA6Ci0gICAgICAgIGlmICggcmVnc1swXSA+IERFRl9NQVhfQkFTRSAp Ci0gICAgICAgICAgICByZWdzWzBdID0gREVGX01BWF9CQVNFOwotICAgICAgICBicmVhazsKLQot ICAgIGNhc2UgMHgwMDAwMDAwMToKLSAgICAgICAgLyoKLSAgICAgICAgICogRUJYWzIzOjE2XSBp cyBNYXhpbXVtIExvZ2ljYWwgUHJvY2Vzc29ycyBQZXIgUGFja2FnZS4KLSAgICAgICAgICogVXBk YXRlIHRvIHJlZmxlY3QgdkxBUElDX0lEID0gdkNQVV9JRCAqIDIuCi0gICAgICAgICAqLwotICAg ICAgICByZWdzWzFdID0gKHJlZ3NbMV0gJiAweDAwMDBmZmZmdSkgfCAoKHJlZ3NbMV0gJiAweDAw N2YwMDAwdSkgPDwgMSk7Ci0KLSAgICAgICAgcmVnc1syXSA9IGluZm8tPmZlYXR1cmVzZXRbZmVh dHVyZXdvcmRfb2YoWDg2X0ZFQVRVUkVfU1NFMyldOwotICAgICAgICByZWdzWzNdID0gKGluZm8t PmZlYXR1cmVzZXRbZmVhdHVyZXdvcmRfb2YoWDg2X0ZFQVRVUkVfRlBVKV0gfAotICAgICAgICAg ICAgICAgICAgIGJpdG1hc2tvZihYODZfRkVBVFVSRV9IVFQpKTsKLSAgICAgICAgYnJlYWs7Ci0K LSAgICBjYXNlIDB4MDAwMDAwMDc6IC8qIEludGVsLWRlZmluZWQgQ1BVIGZlYXR1cmVzICovCi0g ICAgICAgIGlmICggaW5wdXRbMV0gPT0gMCApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJlZ3Nb MV0gPSBpbmZvLT5mZWF0dXJlc2V0W2ZlYXR1cmV3b3JkX29mKFg4Nl9GRUFUVVJFX0ZTR1NCQVNF KV07Ci0gICAgICAgICAgICByZWdzWzJdID0gaW5mby0+ZmVhdHVyZXNldFtmZWF0dXJld29yZF9v ZihYODZfRkVBVFVSRV9QUkVGRVRDSFdUMSldOwotICAgICAgICAgICAgcmVnc1szXSA9IGluZm8t PmZlYXR1cmVzZXRbZmVhdHVyZXdvcmRfb2YoWDg2X0ZFQVRVUkVfQVZYNTEyXzRWTk5JVyldOwot ICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgcmVnc1sxXSA9 IDA7Ci0gICAgICAgICAgICByZWdzWzJdID0gMDsKLSAgICAgICAgICAgIHJlZ3NbM10gPSAwOwot ICAgICAgICB9Ci0gICAgICAgIHJlZ3NbMF0gPSAwOwotICAgICAgICBicmVhazsKLQotICAgIGNh c2UgMHgwMDAwMDAwZDogLyogWGVuIGF1dG9tYXRpY2FsbHkgY2FsY3VsYXRlcyBhbG1vc3QgZXZl cnl0aGluZy4gKi8KLSAgICAgICAgaWYgKCBpbnB1dFsxXSA9PSAxICkKLSAgICAgICAgICAgIHJl Z3NbMF0gPSBpbmZvLT5mZWF0dXJlc2V0W2ZlYXR1cmV3b3JkX29mKFg4Nl9GRUFUVVJFX1hTQVZF T1BUKV07Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJlZ3NbMF0gPSAwOwotICAgICAgICBy ZWdzWzFdID0gcmVnc1syXSA9IHJlZ3NbM10gPSAwOwotICAgICAgICBicmVhazsKLQotICAgIGNh c2UgMHg4MDAwMDAwMDoKLSAgICAgICAgLyogUGFzc3Rocm91Z2ggdG8gY3B1IHZlbmRvciBzcGVj aWZpYyBmdW5jdGlvbnMgKi8KLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIDB4ODAwMDAwMDE6 Ci0gICAgICAgIHJlZ3NbMl0gPSAoaW5mby0+ZmVhdHVyZXNldFtmZWF0dXJld29yZF9vZihYODZf RkVBVFVSRV9MQUhGX0xNKV0gJgotICAgICAgICAgICAgICAgICAgIH5iaXRtYXNrb2YoWDg2X0ZF QVRVUkVfQ01QX0xFR0FDWSkpOwotICAgICAgICByZWdzWzNdID0gaW5mby0+ZmVhdHVyZXNldFtm ZWF0dXJld29yZF9vZihYODZfRkVBVFVSRV9TWVNDQUxMKV07Ci0gICAgICAgIGJyZWFrOwotCi0g ICAgY2FzZSAweDgwMDAwMDA3OgotICAgICAgICAvKgotICAgICAgICAgKiBLZWVwIG9ubHkgVFND SW52YXJpYW50LiBUaGlzIG1heSBiZSBjbGVhcmVkIGJ5IHRoZSBoeXBlcnZpc29yCi0gICAgICAg ICAqIGRlcGVuZGluZyBvbiBndWVzdCBUU0MgYW5kIG1pZ3JhdGlvbiBzZXR0aW5ncy4KLSAgICAg ICAgICovCi0gICAgICAgIHJlZ3NbMF0gPSByZWdzWzFdID0gcmVnc1syXSA9IDA7Ci0gICAgICAg IHJlZ3NbM10gJj0gMXU8PDg7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSAweDgwMDAwMDA4 OgotICAgICAgICByZWdzWzBdICY9IDB4MDAwMGZmZmZ1OwotICAgICAgICByZWdzWzFdID0gaW5m by0+ZmVhdHVyZXNldFtmZWF0dXJld29yZF9vZihYODZfRkVBVFVSRV9DTFpFUk8pXTsKLSAgICAg ICAgLyogcmVnc1syXSBoYW5kbGVkIGluIHRoZSBwZXItdmVuZG9yIGxvZ2ljLiAqLwotICAgICAg ICByZWdzWzNdID0gMDsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIDB4MDAwMDAwMDI6IC8q IEludGVsIGNhY2hlIGluZm8gKGR1bXBlZCBieSBBTUQgcG9saWN5KSAqLwotICAgIGNhc2UgMHgw MDAwMDAwNDogLyogSW50ZWwgY2FjaGUgaW5mbyAoZHVtcGVkIGJ5IEFNRCBwb2xpY3kpICovCi0g ICAgY2FzZSAweDAwMDAwMDBhOiAvKiBBcmNoaXRlY3R1cmFsIFBlcmZvcm1hbmNlIE1vbml0b3Ig RmVhdHVyZXMgKi8KLSAgICBjYXNlIDB4ODAwMDAwMDI6IC8qIFByb2Nlc3NvciBuYW1lIHN0cmlu ZyAqLwotICAgIGNhc2UgMHg4MDAwMDAwMzogLyogLi4uIGNvbnRpbnVlZCAgICAgICAgICovCi0g ICAgY2FzZSAweDgwMDAwMDA0OiAvKiAuLi4gY29udGludWVkICAgICAgICAgKi8KLSAgICBjYXNl IDB4ODAwMDAwMDU6IC8qIEFNRCBMMSBjYWNoZS9UTEIgaW5mbyAoZHVtcGVkIGJ5IEludGVsIHBv bGljeSkgKi8KLSAgICBjYXNlIDB4ODAwMDAwMDY6IC8qIEFNRCBMMi8zIGNhY2hlL1RMQiBpbmZv IDsgSW50ZWwgTDIgY2FjaGUgZmVhdHVyZXMgKi8KLSAgICBjYXNlIDB4ODAwMDAwMGE6IC8qIEFN RCBTVk0gZmVhdHVyZSBiaXRzICovCi0gICAgY2FzZSAweDgwMDAwMDE5OiAvKiBBTUQgMUcgVExC ICovCi0gICAgY2FzZSAweDgwMDAwMDFhOiAvKiBBTUQgcGVyZiBoaW50cyAqLwotICAgIGNhc2Ug MHg4MDAwMDAxYzogLyogQU1EIGxpZ2h0d2VpZ2h0IHByb2ZpbGluZyAqLwotICAgICAgICBicmVh azsKLQotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJlZ3NbMF0gPSByZWdzWzFdID0gcmVnc1syXSA9 IHJlZ3NbM10gPSAwOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBpZiAoIGluZm8tPnZl bmRvciAmIChYODZfVkVORE9SX0FNRCB8IFg4Nl9WRU5ET1JfSFlHT04pICkKLSAgICAgICAgYW1k X3hjX2NwdWlkX3BvbGljeShpbmZvLCBpbnB1dCwgcmVncyk7Ci0gICAgZWxzZQotICAgICAgICBp bnRlbF94Y19jcHVpZF9wb2xpY3koaW5mbywgaW5wdXQsIHJlZ3MpOwotfQotCi1zdGF0aWMgdm9p ZCB4Y19jcHVpZF9wdl9wb2xpY3koY29uc3Qgc3RydWN0IGNwdWlkX2RvbWFpbl9pbmZvICppbmZv LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCAqaW5w dXQsIHVuc2lnbmVkIGludCAqcmVncykKLXsKLSAgICBzd2l0Y2ggKCBpbnB1dFswXSApCi0gICAg ewotICAgIGNhc2UgMHgwMDAwMDAwMDoKLSAgICAgICAgaWYgKCByZWdzWzBdID4gREVGX01BWF9C QVNFICkKLSAgICAgICAgICAgIHJlZ3NbMF0gPSBERUZfTUFYX0JBU0U7Ci0gICAgICAgIGJyZWFr OwotCi0gICAgY2FzZSAweDAwMDAwMDAxOgotICAgIHsKLSAgICAgICAgLyogSG9zdCB0b3BvbG9n eSBleHBvc2VkIHRvIFBWIGd1ZXN0LiAgUHJvdmlkZSBob3N0IHZhbHVlLiAqLwotICAgICAgICBi b29sIGhvc3RfaHR0ID0gcmVnc1szXSAmIGJpdG1hc2tvZihYODZfRkVBVFVSRV9IVFQpOwotCi0g ICAgICAgIC8qCi0gICAgICAgICAqIERvbid0IHBpY2sgaG9zdCdzIEluaXRpYWwgQVBJQyBJRCB3 aGljaCBjYW4gY2hhbmdlIGZyb20gcnVuCi0gICAgICAgICAqIHRvIHJ1bi4KLSAgICAgICAgICov Ci0gICAgICAgIHJlZ3NbMV0gJj0gMHgwMGZmZmZmZnU7Ci0KLSAgICAgICAgcmVnc1syXSA9IGlu Zm8tPmZlYXR1cmVzZXRbZmVhdHVyZXdvcmRfb2YoWDg2X0ZFQVRVUkVfU1NFMyldOwotICAgICAg ICByZWdzWzNdID0gKGluZm8tPmZlYXR1cmVzZXRbZmVhdHVyZXdvcmRfb2YoWDg2X0ZFQVRVUkVf RlBVKV0gJgotICAgICAgICAgICAgICAgICAgIH5iaXRtYXNrb2YoWDg2X0ZFQVRVUkVfSFRUKSk7 Ci0KLSAgICAgICAgaWYgKCBob3N0X2h0dCApCi0gICAgICAgICAgICByZWdzWzNdIHw9IGJpdG1h c2tvZihYODZfRkVBVFVSRV9IVFQpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBjYXNl IDB4MDAwMDAwMDc6Ci0gICAgICAgIGlmICggaW5wdXRbMV0gPT0gMCApCi0gICAgICAgIHsKLSAg ICAgICAgICAgIHJlZ3NbMV0gPSBpbmZvLT5mZWF0dXJlc2V0W2ZlYXR1cmV3b3JkX29mKFg4Nl9G RUFUVVJFX0ZTR1NCQVNFKV07Ci0gICAgICAgICAgICByZWdzWzJdID0gaW5mby0+ZmVhdHVyZXNl dFtmZWF0dXJld29yZF9vZihYODZfRkVBVFVSRV9QUkVGRVRDSFdUMSldOwotICAgICAgICAgICAg cmVnc1szXSA9IGluZm8tPmZlYXR1cmVzZXRbZmVhdHVyZXdvcmRfb2YoWDg2X0ZFQVRVUkVfQVZY NTEyXzRWTk5JVyldOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAg ICAgICAgcmVnc1sxXSA9IDA7Ci0gICAgICAgICAgICByZWdzWzJdID0gMDsKLSAgICAgICAgICAg IHJlZ3NbM10gPSAwOwotICAgICAgICB9Ci0gICAgICAgIHJlZ3NbMF0gPSAwOwotICAgICAgICBi cmVhazsKLQotICAgIGNhc2UgMHgwMDAwMDAwZDogLyogWGVuIGF1dG9tYXRpY2FsbHkgY2FsY3Vs YXRlcyBhbG1vc3QgZXZlcnl0aGluZy4gKi8KLSAgICAgICAgaWYgKCBpbnB1dFsxXSA9PSAxICkK LSAgICAgICAgICAgIHJlZ3NbMF0gPSBpbmZvLT5mZWF0dXJlc2V0W2ZlYXR1cmV3b3JkX29mKFg4 Nl9GRUFUVVJFX1hTQVZFT1BUKV07Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJlZ3NbMF0g PSAwOwotICAgICAgICByZWdzWzFdID0gcmVnc1syXSA9IHJlZ3NbM10gPSAwOwotICAgICAgICBi cmVhazsKLQotICAgIGNhc2UgMHg4MDAwMDAwMDoKLSAgICB7Ci0gICAgICAgIHVuc2lnbmVkIGlu dCBtYXggPSAoaW5mby0+dmVuZG9yICYgKFg4Nl9WRU5ET1JfQU1EIHwgWDg2X1ZFTkRPUl9IWUdP TikpCi0gICAgICAgICAgICA/IERFRl9NQVhfQU1ERVhUIDogREVGX01BWF9JTlRFTEVYVDsKLQot ICAgICAgICBpZiAoIHJlZ3NbMF0gPiBtYXggKQotICAgICAgICAgICAgcmVnc1swXSA9IG1heDsK LSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgY2FzZSAweDgwMDAwMDAxOgotICAgIHsKLSAg ICAgICAgLyogSG9zdCB0b3BvbG9neSBleHBvc2VkIHRvIFBWIGd1ZXN0LiAgUHJvdmlkZSBob3N0 IENNUF9MRUdBQ1kgdmFsdWUuICovCi0gICAgICAgIGJvb2wgaG9zdF9jbXBfbGVnYWN5ID0gcmVn c1syXSAmIGJpdG1hc2tvZihYODZfRkVBVFVSRV9DTVBfTEVHQUNZKTsKLQotICAgICAgICByZWdz WzJdID0gKGluZm8tPmZlYXR1cmVzZXRbZmVhdHVyZXdvcmRfb2YoWDg2X0ZFQVRVUkVfTEFIRl9M TSldICYKLSAgICAgICAgICAgICAgICAgICB+Yml0bWFza29mKFg4Nl9GRUFUVVJFX0NNUF9MRUdB Q1kpKTsKLSAgICAgICAgcmVnc1szXSA9IGluZm8tPmZlYXR1cmVzZXRbZmVhdHVyZXdvcmRfb2Yo WDg2X0ZFQVRVUkVfU1lTQ0FMTCldOwotCi0gICAgICAgIGlmICggaG9zdF9jbXBfbGVnYWN5ICkK LSAgICAgICAgICAgIHJlZ3NbMl0gfD0gYml0bWFza29mKFg4Nl9GRUFUVVJFX0NNUF9MRUdBQ1kp OwotCi0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIGNhc2UgMHg4MDAwMDAwODoKLSAgICAg ICAgcmVnc1swXSAmPSAweDAwMDBmZmZmdTsKLSAgICAgICAgcmVnc1sxXSA9IGluZm8tPmZlYXR1 cmVzZXRbZmVhdHVyZXdvcmRfb2YoWDg2X0ZFQVRVUkVfQ0xaRVJPKV07Ci0gICAgICAgIHJlZ3Nb Ml0gPSByZWdzWzNdID0gMDsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIDB4MDAwMDAwMDU6 IC8qIE1PTklUT1IvTVdBSVQgKi8KLSAgICBjYXNlIDB4MDAwMDAwMGI6IC8qIEV4dGVuZGVkIFRv cG9sb2d5IEVudW1lcmF0aW9uICovCi0gICAgY2FzZSAweDgwMDAwMDBhOiAvKiBTVk0gcmV2aXNp b24gYW5kIGZlYXR1cmVzICovCi0gICAgY2FzZSAweDgwMDAwMDFiOiAvKiBJbnN0cnVjdGlvbiBC YXNlZCBTYW1wbGluZyAqLwotICAgIGNhc2UgMHg4MDAwMDAxYzogLyogTGlnaHQgV2VpZ2h0IFBy b2ZpbGluZyAqLwotICAgIGNhc2UgMHg4MDAwMDAxZTogLyogRXh0ZW5kZWQgdG9wb2xvZ3kgcmVw b3J0aW5nICovCi0gICAgICAgIHJlZ3NbMF0gPSByZWdzWzFdID0gcmVnc1syXSA9IHJlZ3NbM10g PSAwOwotICAgICAgICBicmVhazsKLSAgICB9Ci19Ci0KLXN0YXRpYyB2b2lkIHhjX2NwdWlkX3Bv bGljeShjb25zdCBzdHJ1Y3QgY3B1aWRfZG9tYWluX2luZm8gKmluZm8sCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgaW50ICppbnB1dCwgdW5zaWduZWQgaW50ICpy ZWdzKQotewotICAgIC8qCi0gICAgICogRm9yIGh5cGVydmlzb3IgbGVhdmVzICgweDQwMDBYWFhY KSBvbmx5IDB4NDAwMHh4MDAuRUFYWzc6MF0gYml0cyAobWF4Ci0gICAgICogbnVtYmVyIG9mIGxl YXZlcykgY2FuIGJlIHNldCBieSB1c2VyLiBIeXBlcnZpc29yIHdpbGwgZW5mb3JjZSB0aGlzIHNv Ci0gICAgICogYWxsIG90aGVyIGJpdHMgYXJlIGRvbid0LWNhcmUgYW5kIHdlIGNhbiBzZXQgdGhl bSB0byB6ZXJvLgotICAgICAqLwotICAgIGlmICggKGlucHV0WzBdICYgMHhmZmZmMDAwMCkgPT0g MHg0MDAwMDAwMCApCi0gICAgewotICAgICAgICByZWdzWzBdID0gcmVnc1sxXSA9IHJlZ3NbMl0g PSByZWdzWzNdID0gMDsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICggaW5mby0+ aHZtICkKLSAgICAgICAgeGNfY3B1aWRfaHZtX3BvbGljeShpbmZvLCBpbnB1dCwgcmVncyk7Ci0g ICAgZWxzZQotICAgICAgICB4Y19jcHVpZF9wdl9wb2xpY3koaW5mbywgaW5wdXQsIHJlZ3MpOwot fQotCi1zdGF0aWMgaW50IHhjX2NwdWlkX2RvX2RvbWN0bCgKLSAgICB4Y19pbnRlcmZhY2UgKnhj aCwgdWludDMyX3QgZG9taWQsCi0gICAgY29uc3QgdW5zaWduZWQgaW50ICppbnB1dCwgY29uc3Qg dW5zaWduZWQgaW50ICpyZWdzKQotewotICAgIERFQ0xBUkVfRE9NQ1RMOwotCi0gICAgbWVtc2V0 KCZkb21jdGwsIDAsIHNpemVvZiAoZG9tY3RsKSk7Ci0gICAgZG9tY3RsLmRvbWFpbiA9IGRvbWlk OwotICAgIGRvbWN0bC5jbWQgPSBYRU5fRE9NQ1RMX3NldF9jcHVpZDsKLSAgICBkb21jdGwudS5j cHVpZC5pbnB1dFswXSA9IGlucHV0WzBdOwotICAgIGRvbWN0bC51LmNwdWlkLmlucHV0WzFdID0g aW5wdXRbMV07Ci0gICAgZG9tY3RsLnUuY3B1aWQuZWF4ID0gcmVnc1swXTsKLSAgICBkb21jdGwu dS5jcHVpZC5lYnggPSByZWdzWzFdOwotICAgIGRvbWN0bC51LmNwdWlkLmVjeCA9IHJlZ3NbMl07 Ci0gICAgZG9tY3RsLnUuY3B1aWQuZWR4ID0gcmVnc1szXTsKLQotICAgIHJldHVybiBkb19kb21j dGwoeGNoLCAmZG9tY3RsKTsKLX0KLQotc3RhdGljIHZvaWQgc2FuaXRpc2VfZmVhdHVyZXNldChz dHJ1Y3QgY3B1aWRfZG9tYWluX2luZm8gKmluZm8pCi17Ci0gICAgY29uc3QgdWludDMyX3QgZnNf c2l6ZSA9IHhjX2dldF9jcHVfZmVhdHVyZXNldF9zaXplKCk7Ci0gICAgdWludDMyX3QgZGlzYWJs ZWRfZmVhdHVyZXNbZnNfc2l6ZV07Ci0gICAgc3RhdGljIGNvbnN0IHVpbnQzMl90IGRlZXBfZmVh dHVyZXNbXSA9IElOSVRfREVFUF9GRUFUVVJFUzsKLSAgICB1bnNpZ25lZCBpbnQgaSwgYjsKLQot ICAgIGlmICggaW5mby0+aHZtICkKLSAgICB7Ci0gICAgICAgIC8qIEhWTSBvciBQVkggR3Vlc3Qg Ki8KLQotICAgICAgICBpZiAoICFpbmZvLT5wYWUgKQotICAgICAgICAgICAgY2xlYXJfYml0KFg4 Nl9GRUFUVVJFX1BBRSwgaW5mby0+ZmVhdHVyZXNldCk7Ci0KLSAgICAgICAgaWYgKCAhaW5mby0+ bmVzdGVkaHZtICkKLSAgICAgICAgewotICAgICAgICAgICAgY2xlYXJfYml0KFg4Nl9GRUFUVVJF X1NWTSwgaW5mby0+ZmVhdHVyZXNldCk7Ci0gICAgICAgICAgICBjbGVhcl9iaXQoWDg2X0ZFQVRV UkVfVk1YLCBpbmZvLT5mZWF0dXJlc2V0KTsKLSAgICAgICAgfQotICAgIH0KLSAgICBlbHNlCi0g ICAgewotICAgICAgICAvKiBQViBHdWVzdCAqLwotCi0gICAgICAgIGlmICggIWluZm8tPnB2NjQg KQotICAgICAgICB7Ci0gICAgICAgICAgICBjbGVhcl9iaXQoWDg2X0ZFQVRVUkVfTE0sIGluZm8t PmZlYXR1cmVzZXQpOwotICAgICAgICAgICAgaWYgKCAhKGluZm8tPnZlbmRvciAmIChYODZfVkVO RE9SX0FNRCB8IFg4Nl9WRU5ET1JfSFlHT04pKSApCi0gICAgICAgICAgICAgICAgY2xlYXJfYml0 KFg4Nl9GRUFUVVJFX1NZU0NBTEwsIGluZm8tPmZlYXR1cmVzZXQpOwotICAgICAgICB9Ci0KLSAg ICAgICAgY2xlYXJfYml0KFg4Nl9GRUFUVVJFX1BTRSwgaW5mby0+ZmVhdHVyZXNldCk7Ci0gICAg ICAgIGNsZWFyX2JpdChYODZfRkVBVFVSRV9QU0UzNiwgaW5mby0+ZmVhdHVyZXNldCk7Ci0gICAg ICAgIGNsZWFyX2JpdChYODZfRkVBVFVSRV9QR0UsIGluZm8tPmZlYXR1cmVzZXQpOwotICAgICAg ICBjbGVhcl9iaXQoWDg2X0ZFQVRVUkVfUEFHRTFHQiwgaW5mby0+ZmVhdHVyZXNldCk7Ci0gICAg fQotCi0gICAgaWYgKCBpbmZvLT54ZmVhdHVyZV9tYXNrID09IDAgKQotICAgICAgICBjbGVhcl9i aXQoWDg2X0ZFQVRVUkVfWFNBVkUsIGluZm8tPmZlYXR1cmVzZXQpOwotCi0gICAgLyogRGlzYWJs ZSBkZWVwIGRlcGVuZGVuY2llcyBvZiBkaXNhYmxlZCBmZWF0dXJlcy4gKi8KLSAgICBmb3IgKCBp ID0gMDsgaSA8IEFSUkFZX1NJWkUoZGlzYWJsZWRfZmVhdHVyZXMpOyArK2kgKQotICAgICAgICBk aXNhYmxlZF9mZWF0dXJlc1tpXSA9IH5pbmZvLT5mZWF0dXJlc2V0W2ldICYgZGVlcF9mZWF0dXJl c1tpXTsKLQotICAgIGZvciAoIGIgPSAwOyBiIDwgc2l6ZW9mKGRpc2FibGVkX2ZlYXR1cmVzKSAq IENIQVJfQklUOyArK2IgKQotICAgIHsKLSAgICAgICAgY29uc3QgdWludDMyX3QgKmRmczsKLQot ICAgICAgICBpZiAoICF0ZXN0X2JpdChiLCBkaXNhYmxlZF9mZWF0dXJlcykgfHwKLSAgICAgICAg ICAgICAhKGRmcyA9IHg4Nl9jcHVpZF9sb29rdXBfZGVlcF9kZXBzKGIpKSApCi0gICAgICAgICAg ICAgY29udGludWU7Ci0KLSAgICAgICAgZm9yICggaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGRpc2Fi bGVkX2ZlYXR1cmVzKTsgKytpICkKLSAgICAgICAgewotICAgICAgICAgICAgaW5mby0+ZmVhdHVy ZXNldFtpXSAmPSB+ZGZzW2ldOwotICAgICAgICAgICAgZGlzYWJsZWRfZmVhdHVyZXNbaV0gJj0g fmRmc1tpXTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotaW50IHhjX2NwdWlkX2FwcGx5X3BvbGlj eSh4Y19pbnRlcmZhY2UgKnhjaCwgdWludDMyX3QgZG9taWQsCi0gICAgICAgICAgICAgICAgICAg ICAgICAgIGNvbnN0IHVpbnQzMl90ICpmZWF0dXJlc2V0LCB1bnNpZ25lZCBpbnQgbnJfZmVhdHVy ZXMpCi17Ci0gICAgc3RydWN0IGNwdWlkX2RvbWFpbl9pbmZvIGluZm8gPSB7fTsKLSAgICB1bnNp Z25lZCBpbnQgaW5wdXRbMl0gPSB7IDAsIDAgfSwgcmVnc1s0XTsKLSAgICB1bnNpZ25lZCBpbnQg YmFzZV9tYXgsIGV4dF9tYXg7Ci0gICAgaW50IHJjOwotCi0gICAgcmMgPSBnZXRfY3B1aWRfZG9t YWluX2luZm8oeGNoLCBkb21pZCwgJmluZm8sIGZlYXR1cmVzZXQsIG5yX2ZlYXR1cmVzKTsKLSAg ICBpZiAoIHJjICkKLSAgICAgICAgZ290byBvdXQ7Ci0KLSAgICBjcHVpZChpbnB1dCwgcmVncyk7 Ci0gICAgYmFzZV9tYXggPSAocmVnc1swXSA8PSBERUZfTUFYX0JBU0UpID8gcmVnc1swXSA6IERF Rl9NQVhfQkFTRTsKLSAgICBpbnB1dFswXSA9IDB4ODAwMDAwMDA7Ci0gICAgY3B1aWQoaW5wdXQs IHJlZ3MpOwotCi0gICAgaWYgKCBpbmZvLnZlbmRvciA9PSBYODZfVkVORE9SX0FNRCB8fCBpbmZv LnZlbmRvciA9PSBYODZfVkVORE9SX0hZR09OICkKLSAgICAgICAgZXh0X21heCA9IChyZWdzWzBd IDw9IERFRl9NQVhfQU1ERVhUKSA/IHJlZ3NbMF0gOiBERUZfTUFYX0FNREVYVDsKLSAgICBlbHNl Ci0gICAgICAgIGV4dF9tYXggPSAocmVnc1swXSA8PSBERUZfTUFYX0lOVEVMRVhUKSA/IHJlZ3Nb MF0gOiBERUZfTUFYX0lOVEVMRVhUOwotCi0gICAgc2FuaXRpc2VfZmVhdHVyZXNldCgmaW5mbyk7 Ci0KLSAgICBpbnB1dFswXSA9IDA7Ci0gICAgaW5wdXRbMV0gPSBYRU5fQ1BVSURfSU5QVVRfVU5V U0VEOwotICAgIGZvciAoIDsgOyApCi0gICAgewotICAgICAgICBjcHVpZChpbnB1dCwgcmVncyk7 Ci0gICAgICAgIHhjX2NwdWlkX3BvbGljeSgmaW5mbywgaW5wdXQsIHJlZ3MpOwotCi0gICAgICAg IGlmICggcmVnc1swXSB8fCByZWdzWzFdIHx8IHJlZ3NbMl0gfHwgcmVnc1szXSApCi0gICAgICAg IHsKLSAgICAgICAgICAgIHJjID0geGNfY3B1aWRfZG9fZG9tY3RsKHhjaCwgZG9taWQsIGlucHV0 LCByZWdzKTsKLSAgICAgICAgICAgIGlmICggcmMgKQotICAgICAgICAgICAgICAgIGdvdG8gb3V0 OwotICAgICAgICB9Ci0KLSAgICAgICAgLyogSW50ZWwgY2FjaGUgZGVzY3JpcHRvciBsZWF2ZXMu ICovCi0gICAgICAgIGlmICggaW5wdXRbMF0gPT0gNCApCi0gICAgICAgIHsKLSAgICAgICAgICAg IGlucHV0WzFdKys7Ci0gICAgICAgICAgICAvKiBNb3JlIHRvIGRvPyBUaGVuIGxvb3Aga2VlcGlu ZyAlJWVheD09MHgwMDAwMDAwNC4gKi8KLSAgICAgICAgICAgIGlmICggKHJlZ3NbMF0gJiAweDFm KSAhPSAwICkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotICAgICAgICAv KiBFeHRlbmRlZCBUb3BvbG9neSBsZWF2ZXMuICovCi0gICAgICAgIGVsc2UgaWYgKCBpbnB1dFsw XSA9PSAweGIgKQotICAgICAgICB7Ci0gICAgICAgICAgICB1aW50OF90IGxldmVsX3R5cGUgPSBy ZWdzWzJdID4+IDg7Ci0KLSAgICAgICAgICAgIGlucHV0WzFdKys7Ci0gICAgICAgICAgICBpZiAo IGxldmVsX3R5cGUgPj0gMSAmJiBsZXZlbF90eXBlIDw9IDIgKQotICAgICAgICAgICAgICAgIGNv bnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgaW5wdXRbMF0rKzsKLSAgICAgICAgaWYgKCAh KGlucHV0WzBdICYgMHg4MDAwMDAwMHUpICYmIChpbnB1dFswXSA+IGJhc2VfbWF4ICkgKQotICAg ICAgICAgICAgaW5wdXRbMF0gPSAweDgwMDAwMDAwdTsKLQotICAgICAgICBpbnB1dFsxXSA9IFhF Tl9DUFVJRF9JTlBVVF9VTlVTRUQ7Ci0gICAgICAgIGlmICggKGlucHV0WzBdID09IDQpIHx8IChp bnB1dFswXSA9PSA3KSB8fCAoaW5wdXRbMF0gPT0gMHhiKSApCi0gICAgICAgICAgICBpbnB1dFsx XSA9IDA7Ci0gICAgICAgIGVsc2UgaWYgKCBpbnB1dFswXSA9PSAweGQgKQotICAgICAgICAgICAg aW5wdXRbMV0gPSAxOyAvKiBYZW4gYXV0b21hdGljYWxseSBjYWxjdWxhdGVzIGFsbW9zdCBldmVy eXRoaW5nLiAqLwotCi0gICAgICAgIGlmICggKGlucHV0WzBdICYgMHg4MDAwMDAwMHUpICYmIChp bnB1dFswXSA+IGV4dF9tYXgpICkKLSAgICAgICAgICAgIGJyZWFrOwotICAgIH0KLQotIG91dDoK LSAgICBmcmVlX2NwdWlkX2RvbWFpbl9pbmZvKCZpbmZvKTsKLSAgICByZXR1cm4gcmM7Ci19Ci0K IC8qCiAgKiBDb25maWd1cmUgYSBzaW5nbGUgaW5wdXQgd2l0aCB0aGUgaW5mb3JtYXRpb20gZnJv bSBjb25maWcuCiAgKgpAQCAtMTA1NywzICs0NDksMTkxIEBAIGludCB4Y19jcHVpZF9zZXQoCiAK ICAgICByZXR1cm4gcmM7CiB9CisKK2ludCB4Y19jcHVpZF9hcHBseV9wb2xpY3koeGNfaW50ZXJm YWNlICp4Y2gsIHVpbnQzMl90IGRvbWlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z dCB1aW50MzJfdCAqZmVhdHVyZXNldCwgdW5zaWduZWQgaW50IG5yX2ZlYXR1cmVzKQoreworICAg IGludCByYzsKKyAgICB4Y19kb21pbmZvX3QgZGk7CisgICAgdW5zaWduZWQgaW50IGksIG5yX2xl YXZlcywgbnJfbXNyczsKKyAgICB4ZW5fY3B1aWRfbGVhZl90ICpsZWF2ZXMgPSBOVUxMOworICAg IHN0cnVjdCBjcHVpZF9wb2xpY3kgKnAgPSBOVUxMOworICAgIHVpbnQzMl90IGVycl9sZWFmID0g LTEsIGVycl9zdWJsZWFmID0gLTEsIGVycl9tc3IgPSAtMTsKKworICAgIGlmICggeGNfZG9tYWlu X2dldGluZm8oeGNoLCBkb21pZCwgMSwgJmRpKSAhPSAxIHx8CisgICAgICAgICBkaS5kb21pZCAh PSBkb21pZCApCisgICAgeworICAgICAgICBFUlJPUigiRmFpbGVkIHRvIG9idGFpbiBkJWQgaW5m byIsIGRvbWlkKTsKKyAgICAgICAgcmMgPSAtRVNSQ0g7CisgICAgICAgIGdvdG8gb3V0OworICAg IH0KKworICAgIHJjID0geGNfZ2V0X2NwdV9wb2xpY3lfc2l6ZSh4Y2gsICZucl9sZWF2ZXMsICZu cl9tc3JzKTsKKyAgICBpZiAoIHJjICkKKyAgICB7CisgICAgICAgIFBFUlJPUigiRmFpbGVkIHRv IG9idGFpbiBwb2xpY3kgaW5mbyBzaXplIik7CisgICAgICAgIHJjID0gLWVycm5vOworICAgICAg ICBnb3RvIG91dDsKKyAgICB9CisKKyAgICByYyA9IC1FTk9NRU07CisgICAgaWYgKCAobGVhdmVz ID0gY2FsbG9jKG5yX2xlYXZlcywgc2l6ZW9mKCpsZWF2ZXMpKSkgPT0gTlVMTCB8fAorICAgICAg ICAgKHAgPSBjYWxsb2MoMSwgc2l6ZW9mKCpwKSkpID09IE5VTEwgKQorICAgICAgICBnb3RvIG91 dDsKKworICAgIG5yX21zcnMgPSAwOworICAgIHJjID0geGNfZ2V0X2RvbWFpbl9jcHVfcG9saWN5 KHhjaCwgZG9taWQsICZucl9sZWF2ZXMsIGxlYXZlcywKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAmbnJfbXNycywgTlVMTCk7CisgICAgaWYgKCByYyApCisgICAgeworICAgICAg ICBQRVJST1IoIkZhaWxlZCB0byBvYnRhaW4gZCVkJ3MgcG9saWN5IiwgZG9taWQpOworICAgICAg ICByYyA9IC1lcnJubzsKKyAgICAgICAgZ290byBvdXQ7CisgICAgfQorCisgICAgcmMgPSB4ODZf Y3B1aWRfY29weV9mcm9tX2J1ZmZlcihwLCBsZWF2ZXMsIG5yX2xlYXZlcywKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICZlcnJfbGVhZiwgJmVycl9zdWJsZWFmKTsKKyAgICBp ZiAoIHJjICkKKyAgICB7CisgICAgICAgIEVSUk9SKCJGYWlsZWQgdG8gZGVzZXJpYWxpc2UgQ1BV SUQgKGVyciBsZWFmICUjeCwgc3VibGVhZiAlI3gpICglZCA9ICVzKSIsCisgICAgICAgICAgICAg IGVycl9sZWFmLCBlcnJfc3VibGVhZiwgLXJjLCBzdHJlcnJvcigtcmMpKTsKKyAgICAgICAgZ290 byBvdXQ7CisgICAgfQorCisgICAgaWYgKCBmZWF0dXJlc2V0ICkKKyAgICB7CisgICAgICAgIHVp bnQzMl90IGRpc2FibGVkX2ZlYXR1cmVzW0ZFQVRVUkVTRVRfTlJfRU5UUklFU10sCisgICAgICAg ICAgICBmZWF0W0ZFQVRVUkVTRVRfTlJfRU5UUklFU10gPSB7fTsKKyAgICAgICAgc3RhdGljIGNv bnN0IHVpbnQzMl90IGRlZXBfZmVhdHVyZXNbXSA9IElOSVRfREVFUF9GRUFUVVJFUzsKKyAgICAg ICAgdW5zaWduZWQgaW50IGksIGI7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogVGhlIHVzZXIg c3VwcGxpZWQgZmVhdHVyZXNldCBtYXkgYmUgc2hvcnRlciBvciBsb25nZXIgdGhhbgorICAgICAg ICAgKiBGRUFUVVJFU0VUX05SX0VOVFJJRVMuICBTaG9ydGVyIGlzIGZpbmUsIGFuZCB3ZSB3aWxs IHplcm8tZXh0ZW5kLgorICAgICAgICAgKiBMb25nZXIgaXMgZmluZSwgc28gbG9uZyBhcyBpdCBv bmx5IHBhZGRlZCB3aXRoIHplcm9zLgorICAgICAgICAgKi8KKyAgICAgICAgdW5zaWduZWQgaW50 IHVzZXJfbGVuID0gbWluKEZFQVRVUkVTRVRfTlJfRU5UUklFUyArIDB1LCBucl9mZWF0dXJlcyk7 CisKKyAgICAgICAgLyogQ2hlY2sgZm9yIHRydW5jYXRlZCBzZXQgYml0cy4gKi8KKyAgICAgICAg cmMgPSAtRU9QTk9UU1VQUDsKKyAgICAgICAgZm9yICggaSA9IHVzZXJfbGVuOyBpIDwgbnJfZmVh dHVyZXM7ICsraSApCisgICAgICAgICAgICBpZiAoIGZlYXR1cmVzZXRbaV0gIT0gMCApCisgICAg ICAgICAgICAgICAgZ290byBvdXQ7CisKKyAgICAgICAgbWVtY3B5KGZlYXQsIGZlYXR1cmVzZXQs IHNpemVvZigqZmVhdHVyZXNldCkgKiB1c2VyX2xlbik7CisKKyAgICAgICAgLyogRGlzYWJsZSBk ZWVwIGRlcGVuZGVuY2llcyBvZiBkaXNhYmxlZCBmZWF0dXJlcy4gKi8KKyAgICAgICAgZm9yICgg aSA9IDA7IGkgPCBBUlJBWV9TSVpFKGRpc2FibGVkX2ZlYXR1cmVzKTsgKytpICkKKyAgICAgICAg ICAgIGRpc2FibGVkX2ZlYXR1cmVzW2ldID0gfmZlYXRbaV0gJiBkZWVwX2ZlYXR1cmVzW2ldOwor CisgICAgICAgIGZvciAoIGIgPSAwOyBiIDwgc2l6ZW9mKGRpc2FibGVkX2ZlYXR1cmVzKSAqIENI QVJfQklUOyArK2IgKQorICAgICAgICB7CisgICAgICAgICAgICBjb25zdCB1aW50MzJfdCAqZGZz OworCisgICAgICAgICAgICBpZiAoICF0ZXN0X2JpdChiLCBkaXNhYmxlZF9mZWF0dXJlcykgfHwK KyAgICAgICAgICAgICAgICAgIShkZnMgPSB4ODZfY3B1aWRfbG9va3VwX2RlZXBfZGVwcyhiKSkg KQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICBmb3IgKCBpID0gMDsg aSA8IEFSUkFZX1NJWkUoZGlzYWJsZWRfZmVhdHVyZXMpOyArK2kgKQorICAgICAgICAgICAgewor ICAgICAgICAgICAgICAgIGZlYXRbaV0gJj0gfmRmc1tpXTsKKyAgICAgICAgICAgICAgICBkaXNh YmxlZF9mZWF0dXJlc1tpXSAmPSB+ZGZzW2ldOworICAgICAgICAgICAgfQorICAgICAgICB9CisK KyAgICAgICAgY3B1aWRfZmVhdHVyZXNldF90b19wb2xpY3koZmVhdCwgcCk7CisgICAgfQorCisg ICAgaWYgKCAhZGkuaHZtICkKKyAgICB7CisgICAgICAgIHVpbnQzMl90IGhvc3RfZmVhdHVyZXNl dFtGRUFUVVJFU0VUX05SX0VOVFJJRVNdOworICAgICAgICB1aW50MzJfdCBsZW4gPSBBUlJBWV9T SVpFKGhvc3RfZmVhdHVyZXNldCk7CisKKyAgICAgICAgcmMgPSB4Y19nZXRfY3B1X2ZlYXR1cmVz ZXQoeGNoLCBYRU5fU1lTQ1RMX2NwdV9mZWF0dXJlc2V0X2hvc3QsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICZsZW4sIGhvc3RfZmVhdHVyZXNldCk7CisgICAgICAgIGlmICgg cmMgKQorICAgICAgICB7CisgICAgICAgICAgICAvKiBUb2xlcmF0ZSAiYnVmZmVyIHRvbyBzbWFs bCIsIGFzIHdlJ3ZlIGdvdCB0aGUgYml0cyB3ZSBuZWVkLiAqLworICAgICAgICAgICAgaWYgKCBl cnJubyA9PSBFTk9CVUZTICkKKyAgICAgICAgICAgICAgICByYyA9IDA7CisgICAgICAgICAgICBl bHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgUEVSUk9SKCJGYWlsZWQgdG8gb2J0 YWluIGhvc3QgZmVhdHVyZXNldCIpOworICAgICAgICAgICAgICAgIHJjID0gLWVycm5vOworICAg ICAgICAgICAgICAgIGdvdG8gb3V0OworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAg ICAgLyoKKyAgICAgICAgICogT24gaGFyZHdhcmUgd2l0aG91dCBDUFVJRCBGYXVsdGluZywgUFYg Z3Vlc3RzIHNlZSByZWFsIHRvcG9sb2d5LgorICAgICAgICAgKiBBcyBhIGNvbnNlcXVlbmNlLCB0 aGV5IGFsc28gbmVlZCB0byBzZWUgdGhlIGhvc3QgaHR0L2NtcCBmaWVsZHMuCisgICAgICAgICAq LworICAgICAgICBwLT5iYXNpYy5odHQgICAgICAgPSB0ZXN0X2JpdChYODZfRkVBVFVSRV9IVFQs IGhvc3RfZmVhdHVyZXNldCk7CisgICAgICAgIHAtPmV4dGQuY21wX2xlZ2FjeSA9IHRlc3RfYml0 KFg4Nl9GRUFUVVJFX0NNUF9MRUdBQ1ksIGhvc3RfZmVhdHVyZXNldCk7CisgICAgfQorICAgIGVs c2UKKyAgICB7CisgICAgICAgIC8qCisgICAgICAgICAqIFRvcG9sb2d5IGZvciBIVk0gZ3Vlc3Rz IGlzIGVudGlyZWx5IGNvbnRyb2xsZWQgYnkgWGVuLiAgRm9yIG5vdywgd2UKKyAgICAgICAgICog aGFyZGNvZGUgQVBJQ19JRCA9IHZjcHVfaWQgKiAyIHRvIGdpdmUgdGhlIGlsbHVzaW9uIG9mIG5v IFNNVC4KKyAgICAgICAgICovCisgICAgICAgIHAtPmJhc2ljLmh0dCA9IHRydWU7CisgICAgICAg IHAtPmV4dGQuY21wX2xlZ2FjeSA9IGZhbHNlOworCisgICAgICAgIHAtPmJhc2ljLmxwcHAgKj0g MjsKKworICAgICAgICBzd2l0Y2ggKCBwLT54ODZfdmVuZG9yICkKKyAgICAgICAgeworICAgICAg ICBjYXNlIFg4Nl9WRU5ET1JfSU5URUw6CisgICAgICAgICAgICBmb3IgKCBpID0gMDsgKHAtPmNh Y2hlLnN1YmxlYWZbaV0udHlwZSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICBpIDwgQVJS QVlfU0laRShwLT5jYWNoZS5yYXcpKTsgKytpICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg ICAgICBwLT5jYWNoZS5zdWJsZWFmW2ldLmNvcmVzX3Blcl9wYWNrYWdlID0KKyAgICAgICAgICAg ICAgICAgICAgKHAtPmNhY2hlLnN1YmxlYWZbaV0uY29yZXNfcGVyX3BhY2thZ2UgPDwgMSkgfCAx OworICAgICAgICAgICAgICAgIHAtPmNhY2hlLnN1YmxlYWZbaV0udGhyZWFkc19wZXJfY2FjaGUg PSAwOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBY ODZfVkVORE9SX0FNRDoKKyAgICAgICAgY2FzZSBYODZfVkVORE9SX0hZR09OOgorICAgICAgICAg ICAgcC0+ZXh0ZC5uYyA9IChwLT5leHRkLm5jIDw8IDEpIHwgMTsKKyAgICAgICAgICAgIHAtPmV4 dGQuYXBpY19pZF9zaXplKys7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAg ICAgIC8qCisgICAgICAgICAqIFRoZXNlIHNldHRpbmdzIGFyZSBuZWNlc3NhcnkgdG8gY2F1c2Ug ZWFybGllciBIVk1fUEFSQU1fTkVTVEVESFZNIC8KKyAgICAgICAgICogWEVOX0RPTUNUTF9kaXNh YmxlX21pZ3JhdGUgc2V0dGluZ3MgdG8gYmUgcmVmbGVjdGVkIGNvcnJlY3RseSBpbgorICAgICAg ICAgKiBDUFVJRC4gIFhlbiB3aWxsIGRpc2NhcmQgdGhlc2UgYml0cyBpZiBjb25maWd1cmF0aW9u IGhhc24ndCBiZWVuCisgICAgICAgICAqIHNldCBmb3IgdGhlIGRvbWFpbi4KKyAgICAgICAgICov CisgICAgICAgIHAtPmV4dGQuaXRzYyA9IHRydWU7CisgICAgICAgIHAtPmJhc2ljLnZteCA9IHRy dWU7CisgICAgICAgIHAtPmV4dGQuc3ZtID0gdHJ1ZTsKKyAgICB9CisKKyAgICByYyA9IHg4Nl9j cHVpZF9jb3B5X3RvX2J1ZmZlcihwLCBsZWF2ZXMsICZucl9sZWF2ZXMpOworICAgIGlmICggcmMg KQorICAgIHsKKyAgICAgICAgRVJST1IoIkZhaWxlZCB0byBzZXJpYWxpc2UgQ1BVSUQgKCVkID0g JXMpIiwgLXJjLCBzdHJlcnJvcigtcmMpKTsKKyAgICAgICAgZ290byBvdXQ7CisgICAgfQorCisg ICAgcmMgPSB4Y19zZXRfZG9tYWluX2NwdV9wb2xpY3koeGNoLCBkb21pZCwgbnJfbGVhdmVzLCBs ZWF2ZXMsIDAsIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmVycl9s ZWFmLCAmZXJyX3N1YmxlYWYsICZlcnJfbXNyKTsKKyAgICBpZiAoIHJjICkKKyAgICB7CisgICAg ICAgIFBFUlJPUigiRmFpbGVkIHRvIHNldCBkJWQncyBwb2xpY3kgKGVyciBsZWFmICUjeCwgc3Vi bGVhZiAlI3gsIG1zciAlI3gpIiwKKyAgICAgICAgICAgICAgIGRvbWlkLCBlcnJfbGVhZiwgZXJy X3N1YmxlYWYsIGVycl9tc3IpOworICAgICAgICByYyA9IC1lcnJubzsKKyAgICAgICAgZ290byBv dXQ7CisgICAgfQorCisgICAgcmMgPSAwOworCitvdXQ6CisgICAgZnJlZShwKTsKKyAgICBmcmVl KGxlYXZlcyk7CisKKyAgICByZXR1cm4gcmM7Cit9CmRpZmYgLS1naXQgYS94ZW4vaW5jbHVkZS94 ZW4vbGliL3g4Ni9jcHVpZC5oIGIveGVuL2luY2x1ZGUveGVuL2xpYi94ODYvY3B1aWQuaAppbmRl eCBkZjU5NDZiNmIxLi42Yzg2YzFhMGQwIDEwMDY0NAotLS0gYS94ZW4vaW5jbHVkZS94ZW4vbGli L3g4Ni9jcHVpZC5oCisrKyBiL3hlbi9pbmNsdWRlL3hlbi9saWIveDg2L2NwdWlkLmgKQEAgLTE1 NCw4ICsxNTQsMTIgQEAgc3RydWN0IGNwdWlkX3BvbGljeQogICAgIHVuaW9uIHsKICAgICAgICAg c3RydWN0IGNwdWlkX2xlYWYgcmF3W0NQVUlEX0dVRVNUX05SX0NBQ0hFXTsKICAgICAgICAgc3Ry dWN0IGNwdWlkX2NhY2hlX2xlYWYgewotICAgICAgICAgICAgdWludDMyX3QgdHlwZTo1LAotICAg ICAgICAgICAgICAgIDoyNywgOjMyLCA6MzIsIDozMjsKKyAgICAgICAgICAgIHVpbnQzMl90IC8q IGEgKi8gdHlwZTo1LCBsZXZlbDozOworICAgICAgICAgICAgYm9vbCBzZWxmX2luaXQ6MSwgZnVs bHlfYXNzb2M6MTsKKyAgICAgICAgICAgIHVpbnQzMl90IDo0LCB0aHJlYWRzX3Blcl9jYWNoZTox MiwgY29yZXNfcGVyX3BhY2thZ2U6NjsKKyAgICAgICAgICAgIHVpbnQzMl90IC8qIGIgKi8gbGlu ZV9zaXplOjEyLCBwYXJ0aXRpb25zOjEwLCB3YXlzOjEwOworICAgICAgICAgICAgdWludDMyX3Qg LyogYyAqLyBzZXRzOworICAgICAgICAgICAgYm9vbCAvKiBkICovIHdiaW52ZDoxLCBpbmNsdXNp dmU6MSwgY29tcGxleDoxOwogICAgICAgICB9IHN1YmxlYWZbQ1BVSURfR1VFU1RfTlJfQ0FDSEVd OwogICAgIH0gY2FjaGU7CiAKQEAgLTI1OSw3ICsyNjMsOCBAQCBzdHJ1Y3QgY3B1aWRfcG9saWN5 CiAgICAgICAgICAgICAgICAgdWludDMyX3QgZThiOwogICAgICAgICAgICAgICAgIHN0cnVjdCB7 IERFQ0xfQklURklFTEQoZThiKTsgfTsKICAgICAgICAgICAgIH07Ci0gICAgICAgICAgICB1aW50 MzJfdCAvKiBjICovOjMyLCAvKiBkICovOjMyOworICAgICAgICAgICAgdWludDMyX3QgbmM6OCwg OjQsIGFwaWNfaWRfc2l6ZTo0LCA6MTY7CisgICAgICAgICAgICB1aW50MzJfdCAvKiBkICovOjMy OwogICAgICAgICB9OwogICAgIH0gZXh0ZDsKIAotLSAKMi4xMS4wCgoKX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KWGVuLWRldmVsIG1haWxpbmcgbGlzdApY ZW4tZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9y Zy9tYWlsbWFuL2xpc3RpbmZvL3hlbi1kZXZlbA==