From mboxrd@z Thu Jan 1 00:00:00 1970 From: Anthony PERARD Subject: [PATCH v7 06/14] libxl_qmp: Implementation of libxl__ev_qmp_* Date: Fri, 23 Nov 2018 13:53:47 +0000 Message-ID: <20181123135355.6001-7-anthony.perard@citrix.com> References: <20181123135355.6001-1-anthony.perard@citrix.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from us1-rack-dfw2.inumbo.com ([104.130.134.6]) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1gQBuE-0003SR-Aa for xen-devel@lists.xenproject.org; Fri, 23 Nov 2018 13:54:02 +0000 In-Reply-To: <20181123135355.6001-1-anthony.perard@citrix.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" To: xen-devel@lists.xenproject.org Cc: Anthony PERARD , Ian Jackson , Wei Liu List-Id: xen-devel@lists.xenproject.org VGhpcyBwYXRjaCBpbXBsZW1lbnQgdGhlIEFQSSBsaWJ4bF9fZXZfcW1wIGRvY3VtZW50ZWQgaW4g dGhlIHByZXZpb3VzCnBhdGNoLCAibGlieGw6IERlc2lnbiBvZiBhbiBhc3luYyBBUEkgdG8gaXNz dWUgUU1QIGNvbW1hbmRzIHRvIFFFTVUiLgoKU2luY2UgdGhpcyBBUEkgaXMgdG8gaW50ZXJhY3Qg d2l0aCBRRU1VIHZpYSB0aGUgUU1QIHByb3RvY29sLCBpdCBhbHNvCmltcGxlbWVudCBhIFFNUCBj bGllbnQuIFRoZSBzcGVjaWZpY2F0aW9uIGZvciB0aGUgUUVNVSBNYWNoaW5lIFByb3RvY29sCihR TVApIGNhbiBiZSBmb3VuZCBpbiB0aGUgUUVNVSByZXBvc2l0b3J5IGF0OgpodHRwczovL2dpdC5x ZW11Lm9yZy8/cD1xZW11LmdpdDthPWJsb2JfcGxhaW47Zj1kb2NzL2ludGVyb3AvcW1wLXNwZWMu dHh0CgpTaWduZWQtb2ZmLWJ5OiBBbnRob255IFBFUkFSRCA8YW50aG9ueS5wZXJhcmRAY2l0cml4 LmNvbT4KLS0tCgpOb3RlczoKICAgIHY3OgogICAgLSBNYWtlIHVzZSBvZiB0aGUgbmV3IGBhb2Ag ZmllbGQgZmlsbGVkIGJ5IHRoZSBjYWxsZXIKICAgICAgKG5vIG1vcmUgZnJlZSh0eF9idWYpKQog ICAgLSBIYXZlIHJld29ya2VkIHRoZSBzdGF0ZSB0YWJsZSB0byBiZSBtb3JlIGFjY3VyYXRlLCBl YXNpZXIgdG8gcmVhZCBhbmQKICAgICAgd2l0aCBiZXR0ZXIgZGVzYyBvZiB0aGUgd2FpdGluZ19y ZXBseSBzdGF0ZSB3aXRoIHN1Yi1zdGF0ZXMgYXMgd2VsbCBhcwogICAgICBiZXR0ZXIgZGVzY3Jp cHRpb24gb2YgdGhlIHN0YXRlIG9mIHRoZSBldl9mZCBgZWZkYC4KICAgIC0gVGhlcmUgaXMgc3Rh dGUgdHJhbnNpdGlvbiBjaGFuZ2VzLCBub3cgd2UgaGF2ZSBjYXAubmVnIC0+CiAgICAgIHdhaXRp bmdfcmVwbHkgKGJlZm9yZSBpdCB3YXMgY2FwLm5lZyAtPiBjb25uZWN0ZWQgLT4gd2FpdGluZ19y ZXBseSksCiAgICAgIHRoYXQgbWFrZXMgdGhlIGludGVybmFsIGNvbm5lY3RlZCBzdGF0ZSB0aGUg c2FtZSBhcyB0aGUgZXh0ZXJuYWwKICAgICAgQ29ubmVjdGVkIHN0YXRlLgogICAgLSB0aGVyZSBh cmUgbm93IDMgZGlmZmVyZW50IGlkIHZhcmlhYmxlIGluc3RlYWQgb2YgYSBzaW5nbGUgb25lLCB0 aGUKICAgICAgY3VycmVudGx5IHNlbnQgb25lIGBpZGAsIHRoZSBuZXh0IG9uZSBgbmV4dF9pZGAs IGFuZCB0aGUgb25lCiAgICAgIGFzc29jaWF0ZWQgd2l0aCB0aGUgY2FsbGVyJ3MgY29tbWFuZCBg bXNnX2lkYCwgYGlkYCB3aWxsIGFsd2F5cyBiZSB0aGUKICAgICAgZm9yIHRoZSBuZXh0IGV4cGVj dGVkIG1lc3NhZ2UgZnJvbSBRRU1VLgogICAgLSBxbXBfZXZfZmRfY2FsbGJhY2sgbm93IGNoZWNr IGZvciBQT0xMRVJSLCBhbmQgcmVhZCBhc3luYyBlcnJvciB3aXRoCiAgICAgIGdldHNvY2tvcHQo U09fRVJST1IpLgogICAgLSBxbXBfZXZfY2FsbGJhY2tfcmVhZGFibGUgdGFrZXMgY2FyZSBvbmNl IGFnYWluIHRvIGFsc28gcGFyc2UgbWVzc2FnZXMuCiAgICAgIEJ1dCBpdCBub3cgZmlyc3QgYXR0 ZW1wdCB0byByZWFkIG1lc3NhZ2VzIHRoYXQgd291bGQgYmUgaW4gdGhlIHJ4X2J1ZgogICAgICBi ZWZvcmUgcmVhZGluZyBmcm9tIHRoZSBzb2NrZXQuCiAgICAtIFNvbWUgZnVuY3Rpb25zIHN0YXRl IGNoYW5nZXMgaGF2ZSBiZWVuIHVwZGF0ZWQsCiAgICAgIHFtcF9ldl9lbnN1cmVfcmVhZGluZ193 cml0aW5nLCBxbXBfZXZfc2V0X3N0YXRlLAogICAgICBxbXBfZXZfY2FsbGJhY2tfd3JpdGFibGUs IHFtcF9ldl9jYWxsYmFja19yZWFkYWJsZQogICAgLSBIYXZlIGNsZWFuZWQgdXAgcW1wX2V2X2Vu c3VyZV9yZWFkaW5nX3dyaXRpbmcKICAgIC0gSGF2ZSBjbGVhbmVkIHVwIHFtcF9lcnJvcl9jbGFz c190b19saWJ4bF9lcnJvcl9jb2RlLCBhbmQgbG9nIHVua25vd24KICAgICAgZXJyb3IgY2xhc3Nl cy4KICAgIC0gSW4gcW1wX2V2X2NhbGxiYWNrX3JlYWRhYmxlLCB0aGUgc2l6ZSBpbmNyZWFzZSBv ZiB0aGUgYnVmZmVyIGhhdmUgYmVlbgogICAgICByZXdvcmtlZCB0byB1cGRhdGUgYm90aCByeF9i dWZfc2l6ZSBhbmQgcnhfYnVmIGF0IHRoZSBzYW1lIHRpbWUsIGFuZAogICAgICByZW1vdmUgdGhl IHVzZSBvZiBtYXgoKQogICAgLSBSZXR1cm4gdmFsdWUgb2YgcW1wX3ByZXBhcmVfY21kIGNhbGxl cyBpcyBjaGVja2VkIGFuZCBsb2dnZWQgb24gZXJyb3IuCiAgICAtIGNvbW1lbnRzIGluIFJIUyBv ZiBzdHJ1Y3QKICAgIC0gTmV3IHFtcF9ldl90eF9idWZfY2xlYXIgZnVuYwogICAgLSBBZGQgYSBs aW5rIHRvIHRoZSBRTVAgc3BlYy4KICAgIC0gdXBkYXRlIGNhbGxlcnMgb2YgcW1wX3ByZXBhcmVf Y21kLCB3aGljaCBkb2Vzbid0IHByb3ZpZGUgdGhlIHN0cmluZwogICAgICBsZW5naHQgYW55bW9y ZSBhbHNvIHJlbW92ZSBldi0+bXNnX2xlbgogICAgLSByZW5hbWUgaW50ZXJuYWwgZmllbGRzIHFt cF9jZmQsIHFtcF9lZmQsIHFtcF9zdGF0ZSB0byBjZmQsIGVmZCBhbmQKICAgICAgc3RhdGUuCiAg ICAtIGNoYW5nZSBxbXBfZXZfY29ubmVjdCB0byBvbmx5IGFsbG93IGRpc2Nvbm5lY3Qgb24gZW50 cnkKICAgIC0gc3F1YXNoIHFtcF9ldl9wcmVwYXJlX2NtZCBpbnRvIGxpYnhsX19ldl9xbXBfc2Vu ZAogICAgLSByZWR1Y2UgbWF4IHJ4IGJ1ZmZlciBzaXplIHRvIDFNCiAgICAgIHF1ZXJ5LXZjcHVz IHdpdGggNzEgY3B1cyBhY3RpdmUgeWllbGQgMTQ0ODQgYnl0ZXMuCiAgICAtIHVzZSBKU09OIHRv IHByaW50IGxpYnhsX19qc29uX29iamVjdAogICAgCiAgICB2Ni4yOgogICAgICAgIEFkZCBkZWZp bml0aW9uIG9mIHRoZSBpbnRlcm5hbCBicm9rZW4gc3RhdGUKICAgICAgICB1cGRhdGVkIGNvbW1l bnRzIGFib3V0IHN0YXRlcwogICAgdjYuMToKICAgICAgICBBZGRpbmcgc29tZSBjb21tZW50IGFi b3V0IHBvc3NpYmxlIGludGVybmFsIHN0YXRlIGNoYW5nZXMKICAgIAogICAgdjY6CiAgICAgICAg VGhpcyBpcyBhIHNxdWFzaCBvZiA3IGNvbW1pdHMgb24gdGhlIHByZXZpb3VzIHZlcnNpb246CiAg ICAgICAgLSBsaWJ4bF9xbXA6IENvbm5lY3QgdG8gUU1QIHNvY2tldAogICAgICAgIC0gbGlieGxf cW1wOiBJbXBsZW1lbnQgZmQgY2FsbGJhY2sgYW5kIHJlYWQgZGF0YQogICAgICAgIC0gbGlieGxf cW1wOiBQYXJzZSBKU09OIGlucHV0IGZyb20gUU1QCiAgICAgICAgLSBsaWJ4bF9xbXA6IFByZXBh cmUgdGhlIGNvbW1hbmQgdG8gYmUgc2VudAogICAgICAgIC0gbGlieGxfcW1wOiBIYW5kbGUgd3Jp dGUgdG8gUU1QIHNvY2tldAogICAgICAgIC0gbGlieGxfcW1wOiBIYW5kbGUgbWVzc2FnZXMgZnJv bSBRRU1VCiAgICAgICAgLSBsaWJ4bF9xbXA6IFJlc3BvbmQgdG8gUU1QIGdyZWV0aW5nCiAgICAK ICAgICAgICBHZW5lcmFsIHJld29yayBvZiB0aGUgaW1wbGVtZW50YXRpb24uCiAgICAgICAgQWRk ZWQgbW9yZSBjb21tZW50LCB3aXRoIGEgZGVzY3JpcHRpb24gb2YgYWxsb3dlZCBpbnRlcm5hbCBz dGF0ZXMuCiAgICAgICAgQ2hlY2sgZm9yIEVJTlBST0dSRVNTIGFmdGVyIGNvbm5lY3QoKS4KICAg ICAgICBSZWFkIHVudGlsIEVXT1VMREJMT0NLLgogICAgICAgIEhhbmRsZSBFV09VTERCTE9DSyBv biB3cml0ZSBhbmQgc2VuZG1zZy4KICAgICAgICBVc2luZyBtZW1tZW0gaW5zdGVhZCBvZiBzdHJz dHIuCiAgICAgICAgVXNpbmcgbWVtbW92ZSBpbnN0ZWFkIG9mIGhhdmluZyBhbiBvZmZzZXQgaW4g cnhfYnVmLgogICAgICAgIFJld29yayBidWZmZXIgYWxsb2NhdGlvbgogICAgICAgIERvbid0IGZl ZWQgXHIgaW50byBqc29uIHBhcnNlciBhbnltb3JlCiAgICAgICAgQWRkIGEgY2hlY2sgZm9yIGEg bWF4aW11bSBSWCBidWZmZXIgc2l6ZQogICAgICAgIEFkZGVkIG1vcmUgZXJyb3IgbWVzc2FnZXMK ICAgICAgICBOZXcgZXJyb3IgY29kZSBFUlJPUl9QUk9UT0NPTF9FUlJPUl9RTVAKICAgICAgICBS ZXdyaXRlIGNvbnZlcnNpb24gb2YgUU1QIEVycm9yQ2xhc3MgdG8gbGlieGxfZXJyb3IgY29kZQog ICAgICAgIEFkZGVkIGhlbHBlcnM6IHFtcF9ldl9lbnN1cmVfcmVhZGluZ193cml0aW5nLCBxbXBf ZXZfc2V0X3N0YXRlCiAgICAgICAgU3BsaXQgc29tZSBmdW5jdGlvbnMsIHNxdWFzaCBvdGhlcnMK ICAgICAgICBBZGRlZCBldi0+bXNnKiB0byBzdG9yZSBnZW5lcmF0ZWQgdXNlciBjb21tYW5kIGFz IHR4X2J1ZiBpcyB1c2VkIGR1cmluZwogICAgICAgICAgICBjb25uZWN0aW9uIChmb3IgcW1wX2Nh cGFiaWxpdGllcykKICAgICAgICBSZW1vdmUgcW1wX3N0YXRlX2dyZWV0aW5nCiAgICAgICAgQWRk ZWQgcW1wX3N0YXRlX3dhaXRpbmdfcmVwbHkKICAgIAogICAgdjU6CiAgICAgICAgbml0cwogICAg ICAgIHVzZSBhIGRlZmluZSBpbnN0ZWFkIG9mIGEgc3RhdGljIGludCBmb3IgUU1QX0NBUEFCSUxJ VFlfTkVHT0NJQVRJT05fTVNHSUQKICAgICAgICB1c2UgYSBzd2l0Y2ggaW4gcW1wX2V2X2NhbGxi YWNrX3dyaXRhYmxlIHRvIGNoZWNrIHFtcF9zdGF0ZQogICAgICAgIEFkZCBhIGRlc2NyaXB0aW9u IG9mIHRoZSBkaWZmZXJlbnQgdmFsdWUgb2YgbGlieGxfX3FtcF9zdGF0ZSBlbnVtLgogICAgICAg IHNvbWUgY2xlYW51cAogICAgICAgIHJlbW92ZSByZWFkIGxvb3AgdGhhdCBvbmx5IGhhbmRsZWQg RUlOVFIsIHNpbXBseSByZXR1cm4KICAgICAgICBpbml0aWFsaXplIGxlbiBhbmQgcyBhdCBkZWNs YXJhdGlvbiB0aW1lCiAgICAgICAgcmVtb3ZlIG9sZCBjb21tZW50CiAgICAgICAgcmVuYW1lIGJ1 Zl9mZCB0byBzZW5kX2ZkCiAgICAgICAgQWRkaW5nIGRlZmF1bHQ6YWJvcnQoKSBpbiBxbXBfZXZf aGFuZGxlX21lc3NhZ2UuCiAgICAKICAgIHY0OgogICAgICAgIHJlbW92ZSB1c2Ugb2YgYSBsaW5r ZWQgbGlzdCBvZiByZWNlaXZlIGJ1ZmZlciwgYW5kIHVzZSByZWFsbG9jIGluc3RlYWQuCiAgICAg ICAgc2ltcGxpZmljYXRpb24gb2YgdGhlIHBhdGNoIGR1ZSB0byB1c2Ugb2YgYSBzaW5nbGUgYWxs b2NhdGVkIHNwYWNlIGZvciB0aGUKICAgICAgICByZWNlaXZlIGJ1ZmZlci4KCiB0b29scy9saWJ4 bC9saWJ4bF9pbnRlcm5hbC5oIHwgIDM0ICsrCiB0b29scy9saWJ4bC9saWJ4bF9xbXAuYyAgICAg IHwgNzQwICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiB0b29scy9saWJ4bC9s aWJ4bF90eXBlcy5pZGwgIHwgICA2ICsKIDMgZmlsZXMgY2hhbmdlZCwgNzgwIGluc2VydGlvbnMo KykKCmRpZmYgLS1naXQgYS90b29scy9saWJ4bC9saWJ4bF9pbnRlcm5hbC5oIGIvdG9vbHMvbGli eGwvbGlieGxfaW50ZXJuYWwuaAppbmRleCAxYzdhM2IyMmY0Li4wNTZkZTlkZTJmIDEwMDY0NAot LS0gYS90b29scy9saWJ4bC9saWJ4bF9pbnRlcm5hbC5oCisrKyBiL3Rvb2xzL2xpYnhsL2xpYnhs X2ludGVybmFsLmgKQEAgLTQxMiw2ICs0MTIsMTkgQEAgX2hpZGRlbiBpbnQgbGlieGxfX2V2X3Ft cF9zZW5kKGxpYnhsX19nYyAqZ2MsIGxpYnhsX19ldl9xbXAgKmV2LAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmNtZCwgbGlieGxfX2pzb25fb2JqZWN0ICphcmdz KTsKIF9oaWRkZW4gdm9pZCBsaWJ4bF9fZXZfcW1wX2Rpc3Bvc2UobGlieGxfX2djICpnYywgbGli eGxfX2V2X3FtcCAqZXYpOwogCit0eXBlZGVmIGVudW0geworICAgIC8qIGluaXRpYWwgc3RhdGUg Ki8KKyAgICBxbXBfc3RhdGVfZGlzY29ubmVjdGVkID0gMSwKKyAgICAvKiBjb25uZWN0ZWQgdG8g UU1QIHNvY2tldCwgd2FpdGluZyBmb3IgZ3JlZXRpbmcgbWVzc2FnZSAqLworICAgIHFtcF9zdGF0 ZV9jb25uZWN0aW5nLAorICAgIC8qIHFtcF9jYXBhYmlsaXRpZXMgY29tbWFuZCBzZW50LCB3YWl0 aW5nIGZvciByZXBseSAqLworICAgIHFtcF9zdGF0ZV9jYXBhYmlsaXR5X25lZ290aWF0aW9uLAor ICAgIC8qIHNlbmRpbmcgdXNlcidzIGNtZCBhbmQgd2FpdGluZyBmb3IgcmVwbHkgKi8KKyAgICBx bXBfc3RhdGVfd2FpdGluZ19yZXBseSwKKyAgICAvKiByZWFkeSB0byBzZW5kIGNvbW1hbmRzICov CisgICAgcW1wX3N0YXRlX2Nvbm5lY3RlZCwKK30gbGlieGxfX3FtcF9zdGF0ZTsKKwogc3RydWN0 IGxpYnhsX19ldl9xbXAgewogICAgIC8qIGNhbGxlciBzaG91bGQgaW5jbHVkZSB0aGlzIGluIHRo ZWlyIG93biBzdHJ1Y3QgKi8KICAgICAvKiBjYWxsZXIgbXVzdCBmaWxsIHRoZXNlIGluLCBhbmQg dGhleSBtdXN0IGFsbCByZW1haW4gdmFsaWQgKi8KQEAgLTQxOSw2ICs0MzIsMjcgQEAgc3RydWN0 IGxpYnhsX19ldl9xbXAgewogICAgIGxpYnhsX2RvbWlkIGRvbWlkOwogICAgIGxpYnhsX19ldl9x bXBfY2FsbGJhY2sgKmNhbGxiYWNrOwogICAgIGludCBwYXlsb2FkX2ZkOyAvKiBzZXQgdG8gc2Vu ZCBhIGZkIHdpdGggdGhlIGNvbW1hbmQsIC0xIG90aGVyd2lzZSAqLworCisgICAgLyoKKyAgICAg KiByZW1haW5pbmcgZmllbGRzIGFyZSBwcml2YXRlIHRvIGxpYnhsX2V2X3FtcF8qCisgICAgICov CisKKyAgICBsaWJ4bF9fY2FyZWZkICpjZmQ7CisgICAgbGlieGxfX2V2X2ZkIGVmZDsKKyAgICBs aWJ4bF9fcW1wX3N0YXRlIHN0YXRlOworICAgIGludCBpZDsKKyAgICBpbnQgbmV4dF9pZDsgICAg ICAgIC8qIG5leHQgaWQgdG8gdXNlICovCisgICAgLyogcmVjZWl2ZSBidWZmZXIgKi8KKyAgICBj aGFyICpyeF9idWY7CisgICAgc2l6ZV90IHJ4X2J1Zl9zaXplOyAvKiBjdXJyZW50IGFsbG9jYXRl ZCBzaXplICovCisgICAgc2l6ZV90IHJ4X2J1Zl91c2VkOyAvKiBhY3R1YWwgZGF0YSBpbiB0aGUg YnVmZmVyICovCisgICAgLyogc2VuZGluZyBidWZmZXIgKi8KKyAgICBjaGFyICp0eF9idWY7Cisg ICAgc2l6ZV90IHR4X2J1Zl9sZW47ICAvKiB0eF9idWYgc2l6ZSAqLworICAgIHNpemVfdCB0eF9i dWZfb2ZmOyAgLyogYWxyZWFkeSBzZW50ICovCisgICAgLyogVGhlIG1lc3NhZ2UgdG8gc2VuZCB3 aGVuIHJlYWR5ICovCisgICAgY2hhciAqbXNnOworICAgIGludCBtc2dfaWQ7CiB9OwogCiAKZGlm ZiAtLWdpdCBhL3Rvb2xzL2xpYnhsL2xpYnhsX3FtcC5jIGIvdG9vbHMvbGlieGwvbGlieGxfcW1w LmMKaW5kZXggNzNmMjIwMmI0Zi4uM2MyNTQ1OTIyZSAxMDA2NDQKLS0tIGEvdG9vbHMvbGlieGwv bGlieGxfcW1wLmMKKysrIGIvdG9vbHMvbGlieGwvbGlieGxfcW1wLmMKQEAgLTc1LDExICs3NSwx OCBAQAogIyAgZGVmaW5lIERFQlVHX1JFUE9SVF9SRUNFSVZFRChkb20sIGJ1ZiwgbGVuKSAoKHZv aWQpMCkKICNlbmRpZgogCisjaWZkZWYgREVCVUdfUU1QX0NMSUVOVAorIyAgZGVmaW5lIExPR19R TVAoZiwgLi4uKSBMT0dEKERFQlVHLCBldi0+ZG9taWQsIGYsICMjX19WQV9BUkdTX18pCisjZWxz ZQorIyAgZGVmaW5lIExPR19RTVAoZiwgLi4uKQorI2VuZGlmCisKIC8qCiAgKiBRTVAgdHlwZXMg JiBjb25zdGFudAogICovCiAKICNkZWZpbmUgUU1QX1JFQ0VJVkVfQlVGRkVSX1NJWkUgNDA5Ngor I2RlZmluZSBRTVBfTUFYX1NJWkVfUlhfQlVGIE1CKDEpCiAjZGVmaW5lIFBDSV9QVF9RREVWX0lE ICJwY2ktcHQtJTAyeF8lMDJ4LiUwMXgiCiAKIC8qCkBAIC0xMzA3LDYgKzEzMTQsNzM5IEBAIGlu dCBsaWJ4bF9fcW1wX2luaXRpYWxpemF0aW9ucyhsaWJ4bF9fZ2MgKmdjLCB1aW50MzJfdCBkb21p ZCwKICAgICByZXR1cm4gcmV0OwogfQogCisvKiAtLS0tLS0tLS0tLS0gSW1wbGVtZW50YXRpb24g b2YgbGlieGxfX2V2X3FtcCAtLS0tLS0tLS0tLS0tLS0tICovCisKKy8qCisgKiBQb3NzaWJsZSBp bnRlcm5hbCBzdGF0ZSBjb21wYXJlZCB0byBxbXBfc3RhdGU6CisgKgorICogcW1wX3N0YXRlICAg ICBFeHRlcm5hbCAgIGNmZCAgICBlZmQgICAgIGlkICAgICByeF9idWYqIHR4X2J1ZiogbXNnKgor ICogZGlzY29ubmVjdGVkICAgSWRsZSAgICAgICBOVUxMICAgSWRsZSAgICByZXNldCAgZnJlZSAg ICBmcmVlICAgIGZyZWUKKyAqIGNvbm5lY3RpbmcgICAgIEFjdGl2ZSAgICAgb3BlbiAgIElOICAg ICAgcmVzZXQgIHVzZWQgICAgZnJlZSAgICBzZXQKKyAqIGNhcC5uZWcgICAgICAgIEFjdGl2ZSAg ICAgb3BlbiAgIElOfE9VVCAgc2VudCAgIHVzZWQgICAgY2FwX25lZyBzZXQKKyAqIGNhcC5uZWcg ICAgICAgIEFjdGl2ZSAgICAgb3BlbiAgIElOICAgICAgc2VudCAgIHVzZWQgICAgZnJlZSAgICBz ZXQKKyAqIGNvbm5lY3RlZCAgICAgIENvbm5lY3RlZCAgb3BlbiAgIElOICAgICAgYW55ICAgIHVz ZWQgICAgZnJlZSAgICBmcmVlCisgKiB3YWl0aW5nX3JlcGx5ICBBY3RpdmUgICAgIG9wZW4gICBJ TnxPVVQgIHNlbnQgICB1c2VkICAgIGZyZWUgICAgc2V0CisgKiB3YWl0aW5nX3JlcGx5ICBBY3Rp dmUgICAgIG9wZW4gICBJTnxPVVQgIHNlbnQgICB1c2VkICAgIHVzZXIncyAgZnJlZQorICogd2Fp dGluZ19yZXBseSAgQWN0aXZlICAgICBvcGVuICAgSU4gICAgICBzZW50ICAgdXNlZCAgICBmcmVl ICAgIGZyZWUKKyAqIGJyb2tlblsxXSAgICAgIG5vbmVbMl0gICAgYW55ICAgIEFjdGl2ZSAgYW55 ICAgIGFueSAgICAgYW55ICAgICBhbnkKKyAqCisgKiBbMV0gV2hlbiBhbiBpbnRlcm5hbCBmdW5j dGlvbiByZXR1cm4gYW4gZXJyb3IsIGl0IGNhbiBsZWF2ZSBldl9xbXAgaW4gYQorICogYGJyb2tl bmAgc3RhdGUgYnV0IG9ubHkgaWYgdGhlIGNhbGxlciBpcyBhbm90aGVyIGludGVybmFsIGZ1bmN0 aW9uLgorICogVGhhdCBgYnJva2VuYCBuZWVkcyB0byBiZSBjbGVhbmVkIHVwLCBlLmkuIHRyYW5z aXRpb25uZWQgdG8gdGhlCisgKiBgZGlzY29ubmVjdGVkYCBzdGF0ZSwgYmVmb3JlIHRoZSBjb250 cm9sIG9mIGV2X3FtcCBpcyByZWxlYXNlZCBvdXRzaWRlcworICogb2YgZXZfcW1wIGltcGxlbWVu dGF0aW9uLgorICoKKyAqIFsyXSBUaGlzIGludGVybmFsIHN0YXRlIHNob3VsZCBub3QgYmUgdmlz aWJsZSBleHRlcm5hbGx5LCBzZWUgWzFdLgorICoKKyAqIFBvc3NpYmxlIGJ1ZmZlcnMgc3RhdGVz OgorICogLSByZWNlaXZpbmcgYnVmZmVyOgorICogICAgICAgICAgICAgICAgICAgICBmcmVlICAg dXNlZAorICogICAgIHJ4X2J1ZiAgICAgICAgICAgTlVMTCAgIGFsbG9jYXRlZAorICogICAgIHJ4 X2J1Zl9zaXplICAgICAgMCAgICAgIGFsbG9jYXRpb24gc2l6ZSBvZiBgcnhfYnVmYAorICogICAg IHJ4X2J1Zl91c2VkICAgICAgMCAgICAgIDw9IHJ4X2J1Zl9zaXplLCBhY3R1YWwgZGF0YSBpbiB0 aGUgYnVmZmVyCisgKiAtIHRyYW5zbWl0dGluZyBidWZmZXI6CisgKiAgICAgICAgICAgICAgICAg ICAgIGZyZWUgICB1c2VkCisgKiAgICAgdHhfYnVmICAgICAgICAgICBOVUxMICAgY29udGFpbnMg ZGF0YQorICogICAgIHR4X2J1Zl9sZW4gICAgICAgMCAgICAgIHNpemUgb2YgZGF0YQorICogICAg IHR4X2J1Zl9vZmYgICAgICAgMCAgICAgIDw9IHR4X2J1Zl9sZW4sIGRhdGEgYWxyZWFkeSBzZW50 CisgKiAtIHF1ZXVlZCB1c2VyIGNvbW1hbmQ6CisgKiAgICAgICAgICAgICAgICAgICAgIGZyZWUg IHNldAorICogICAgIG1zZyAgICAgICAgICAgICAgTlVMTCAgY29udGFpbnMgZGF0YQorICogICAg IG1zZ19pZCAgICAgICAgICAgMCAgICAgaWQgYXNzb2N0aWF0ZWQgd2l0aCB0aGUgY29tbWFuZCBp biBgbXNnYAorICoKKyAqIC0gQWxsb3dlZCBpbnRlcm5hbCBzdGF0ZSB0cmFuc2l0aW9uOgorICog ZGlzY29ubmVjdGVkICAgICAgICAgICAgICAgICAgICAgLT4gY29ubmVjdGluZworICogY29ubmVj dGlvbiAgICAgICAgICAgICAgICAgICAgICAgLT4gY2FwYWJpbGl0eV9uZWdvdGlhdGlvbgorICog Y2FwYWJpbGl0eV9uZWdvdGlhdGlvbi9jb25uZWN0ZWQgLT4gd2FpdGluZ19yZXBseQorICogd2Fp dGluZ19yZXBseSAgICAgICAgICAgICAgICAgICAgLT4gY29ubmVjdGVkCisgKiBhbnkgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAtPiBicm9rZW4KKyAqIGJyb2tlbiAgICAgICAgICAgICAg ICAgICAgICAgICAgIC0+IGRpc2Nvbm5lY3RlZAorICogYW55ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgLT4gZGlzY29ubmVjdGVkCisgKgorICogVGhlIFFFTVUgTWFjaGluZSBQcm90b2Nv bCAoUU1QKSBzcGVjaWZpY2F0aW9uIGNhbiBiZSBmb3VuZCBpbiB0aGUgUUVNVQorICogcmVwb3Np dG9yeToKKyAqIGh0dHBzOi8vZ2l0LnFlbXUub3JnLz9wPXFlbXUuZ2l0O2E9YmxvYl9wbGFpbjtm PWRvY3MvaW50ZXJvcC9xbXAtc3BlYy50eHQKKyAqLworCisvKiBwcm90b3R5cGVzICovCisKK3N0 YXRpYyB2b2lkIHFtcF9ldl9mZF9jYWxsYmFjayhsaWJ4bF9fZWdjICplZ2MsIGxpYnhsX19ldl9m ZCAqZXZfZmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGZkLCBzaG9ydCBl dmVudHMsIHNob3J0IHJldmVudHMpOworc3RhdGljIGludCBxbXBfZXZfY2FsbGJhY2tfd3JpdGFi bGUobGlieGxfX2djICpnYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxp YnhsX19ldl9xbXAgKmV2LCBpbnQgZmQpOworc3RhdGljIGludCBxbXBfZXZfY2FsbGJhY2tfcmVh ZGFibGUobGlieGxfX2VnYyAqZWdjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgbGlieGxfX2V2X3FtcCAqZXYsIGludCBmZCk7CitzdGF0aWMgaW50IHFtcF9ldl9nZXRfbmV4 dF9tc2cobGlieGxfX2VnYyAqZWdjLCBsaWJ4bF9fZXZfcW1wICpldiwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBsaWJ4bF9fanNvbl9vYmplY3QgKipvX3IpOworc3RhdGljIGludCBx bXBfZXZfaGFuZGxlX21lc3NhZ2UobGlieGxfX2VnYyAqZWdjLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgbGlieGxfX2V2X3FtcCAqZXYsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBjb25zdCBsaWJ4bF9fanNvbl9vYmplY3QgKnJlc3ApOworCisvKiBoZWxwZXJz ICovCisKK3N0YXRpYyB2b2lkIHFtcF9ldl9lbnN1cmVfcmVhZGluZ193cml0aW5nKGxpYnhsX19n YyAqZ2MsIGxpYnhsX19ldl9xbXAgKmV2KQorICAgIC8qIFVwZGF0ZSB0aGUgc3RhdGUgb2YgYGVm ZGAgdG8gbWF0Y2ggdGhlIHBlcm1pdGVkIHN0YXRlICovCit7CisgICAgc2hvcnQgZXZlbnRzID0g UE9MTElOOworCisgICAgaWYgKGV2LT50eF9idWYpCisgICAgICAgIGV2ZW50cyB8PSBQT0xMT1VU OworICAgIGVsc2UgaWYgKChldi0+c3RhdGUgPT0gcW1wX3N0YXRlX3dhaXRpbmdfcmVwbHkpICYm IGV2LT5tc2cpCisgICAgICAgIGV2ZW50cyB8PSBQT0xMT1VUOworCisgICAgbGlieGxfX2V2X2Zk X21vZGlmeShnYywgJmV2LT5lZmQsIGV2ZW50cyk7Cit9CisKK3N0YXRpYyB2b2lkIHFtcF9ldl9z ZXRfc3RhdGUobGlieGxfX2djICpnYywgbGlieGxfX2V2X3FtcCAqZXYsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGxpYnhsX19xbXBfc3RhdGUgbmV3X3N0YXRlKQorICAgIC8qIG9uIGVu dHJ5OiAhYnJva2VuIGFuZCAhZGlzY29ubmVjdGVkICovCit7CisgICAgc3dpdGNoIChuZXdfc3Rh dGUpIHsKKyAgICBjYXNlIHFtcF9zdGF0ZV9kaXNjb25uZWN0ZWQ6CisgICAgICAgIGJyZWFrOwor ICAgIGNhc2UgcW1wX3N0YXRlX2Nvbm5lY3Rpbmc6CisgICAgICAgIGFzc2VydChldi0+c3RhdGUg PT0gcW1wX3N0YXRlX2Rpc2Nvbm5lY3RlZCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgcW1w X3N0YXRlX2NhcGFiaWxpdHlfbmVnb3RpYXRpb246CisgICAgICAgIGFzc2VydChldi0+c3RhdGUg PT0gcW1wX3N0YXRlX2Nvbm5lY3RpbmcpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIHFtcF9z dGF0ZV93YWl0aW5nX3JlcGx5OgorICAgICAgICBhc3NlcnQoZXYtPnN0YXRlID09IHFtcF9zdGF0 ZV9jYXBhYmlsaXR5X25lZ290aWF0aW9uIHx8CisgICAgICAgICAgICAgICBldi0+c3RhdGUgPT0g cW1wX3N0YXRlX2Nvbm5lY3RlZCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgcW1wX3N0YXRl X2Nvbm5lY3RlZDoKKyAgICAgICAgYXNzZXJ0KGV2LT5zdGF0ZSA9PSBxbXBfc3RhdGVfd2FpdGlu Z19yZXBseSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGV2LT5zdGF0ZSA9IG5ld19z dGF0ZTsKK30KKworc3RhdGljIHZvaWQgcW1wX2V2X3R4X2J1Zl9jbGVhcihsaWJ4bF9fZXZfcW1w ICpldikKK3sKKyAgICBldi0+dHhfYnVmID0gTlVMTDsKKyAgICBldi0+dHhfYnVmX2xlbiA9IDA7 CisgICAgZXYtPnR4X2J1Zl9vZmYgPSAwOworfQorCitzdGF0aWMgaW50IHFtcF9lcnJvcl9jbGFz c190b19saWJ4bF9lcnJvcl9jb2RlKGxpYnhsX19nYyAqZ2MsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmVjbGFzcykKK3sKKyAgICBj b25zdCBsaWJ4bF9lbnVtX3N0cmluZ190YWJsZSAqdCA9IGxpYnhsX2Vycm9yX3N0cmluZ190YWJs ZTsKKyAgICBjb25zdCBjaGFyIHNraXBbXSA9ICJRTVBfIjsKKyAgICBjb25zdCBzaXplX3Qgc2tp cGwgPSBzaXplb2Yoc2tpcCkgLSAxOworCisgICAgLyogY29tcGFyZSAiUU1QX0dFTkVSSUNfRVJS T1IiIGZyb20gbGlieGxfZXJyb3IgdG8gIkdlbmVyaWNFcnJvciIKKyAgICAgKiBnZW5lcmF0ZWQg YnkgdGhlIFFNUCBzZXJ2ZXIgKi8KKworICAgIGZvciAoOyB0LT5zOyB0KyspIHsKKyAgICAgICAg ICAgIGNvbnN0IGNoYXIgKnMgPSBlY2xhc3M7CisgICAgICAgICAgICBjb25zdCBjaGFyICpzZSA9 IHQtPnM7CisgICAgICAgIGlmIChzdHJuY2FzZWNtcCh0LT5zLCBza2lwLCBza2lwbCkpCisgICAg ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgc2UgKz0gc2tpcGw7CisgICAgICAgIHdoaWxlICgq cyAmJiAqc2UpIHsKKyAgICAgICAgICAgIC8qIHNraXAgdW5kZXJzY29yZXMgKi8KKyAgICAgICAg ICAgIGlmICgqc2UgPT0gJ18nKSB7CisgICAgICAgICAgICAgICAgc2UrKzsKKyAgICAgICAgICAg ICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICh0b2xvd2VyKCpz KSAhPSB0b2xvd2VyKCpzZSkpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBz KyssIHNlKys7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCEqcyAmJiAhKnNlKQorICAgICAgICAg ICAgcmV0dXJuIHQtPnY7CisgICAgfQorCisgICAgTE9HKEVSUk9SLCAiVW5rbm93biBRTVAgZXJy b3IgY2xhc3MgJyVzJyIsIGVjbGFzcyk7CisgICAgcmV0dXJuIEVSUk9SX1VOS05PV05fUU1QX0VS Uk9SOworfQorCisvKiBTZXR1cCBjb25uZWN0aW9uICovCisKK3N0YXRpYyBpbnQgcW1wX2V2X2Nv bm5lY3QobGlieGxfX2djICpnYywgbGlieGxfX2V2X3FtcCAqZXYpCisgICAgLyogZGlzY29ubmVj dGVkIC0+IGNvbm5lY3RpbmcgYnV0IHdpdGggYG1zZ2AgZnJlZQorICAgICAqIG9uIGVycm9yOiBi cm9rZW4gKi8KK3sKKyAgICBpbnQgZmQ7CisgICAgaW50IHJjLCByOworICAgIHN0cnVjdCBzb2Nr YWRkcl91biB1bjsKKyAgICBjb25zdCBjaGFyICpxbXBfc29ja2V0X3BhdGg7CisKKyAgICBhc3Nl cnQoZXYtPnN0YXRlID09IHFtcF9zdGF0ZV9kaXNjb25uZWN0ZWQpOworCisgICAgcW1wX3NvY2tl dF9wYXRoID0gbGlieGxfX3FlbXVfcW1wX3BhdGgoZ2MsIGV2LT5kb21pZCk7CisKKyAgICBMT0dE KERFQlVHLCBldi0+ZG9taWQsICJDb25uZWN0aW5nIHRvICVzIiwgcW1wX3NvY2tldF9wYXRoKTsK KworICAgIGxpYnhsX19jYXJlZmRfYmVnaW4oKTsKKyAgICBmZCA9IHNvY2tldChBRl9VTklYLCBT T0NLX1NUUkVBTSwgMCk7CisgICAgZXYtPmNmZCA9IGxpYnhsX19jYXJlZmRfb3BlbmVkKENUWCwg ZmQpOworICAgIGlmICghZXYtPmNmZCkgeworICAgICAgICBMT0dFRChFUlJPUiwgZXYtPmRvbWlk LCAic29ja2V0KCkgZmFpbGVkIik7CisgICAgICAgIHJjID0gRVJST1JfRkFJTDsKKyAgICAgICAg Z290byBvdXQ7CisgICAgfQorICAgIHJjID0gbGlieGxfZmRfc2V0X25vbmJsb2NrKENUWCwgbGli eGxfX2NhcmVmZF9mZChldi0+Y2ZkKSwgMSk7CisgICAgaWYgKHJjKQorICAgICAgICBnb3RvIG91 dDsKKworICAgIHJjID0gbGlieGxfX3ByZXBhcmVfc29ja2FkZHJfdW4oZ2MsICZ1biwgcW1wX3Nv Y2tldF9wYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlFNUCBzb2Nr ZXQiKTsKKyAgICBpZiAocmMpCisgICAgICAgIGdvdG8gb3V0OworCisgICAgciA9IGNvbm5lY3Qo bGlieGxfX2NhcmVmZF9mZChldi0+Y2ZkKSwKKyAgICAgICAgICAgICAgICAoc3RydWN0IHNvY2th ZGRyICopICZ1biwgc2l6ZW9mKHVuKSk7CisgICAgaWYgKHIgJiYgZXJybm8gIT0gRUlOUFJPR1JF U1MpIHsKKyAgICAgICAgTE9HRUQoRVJST1IsIGV2LT5kb21pZCwgIkZhaWxlZCB0byBjb25uZWN0 IHRvIFFNUCBzb2NrZXQgJXMiLAorICAgICAgICAgICAgICBxbXBfc29ja2V0X3BhdGgpOworICAg ICAgICByYyA9IEVSUk9SX0ZBSUw7CisgICAgICAgIGdvdG8gb3V0OworICAgIH0KKworICAgIHJj ID0gbGlieGxfX2V2X2ZkX3JlZ2lzdGVyKGdjLCAmZXYtPmVmZCwgcW1wX2V2X2ZkX2NhbGxiYWNr LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX19jYXJlZmRfZmQoZXYtPmNm ZCksIFBPTExJTik7CisgICAgaWYgKHJjKQorICAgICAgICBnb3RvIG91dDsKKworICAgIHFtcF9l dl9zZXRfc3RhdGUoZ2MsIGV2LCBxbXBfc3RhdGVfY29ubmVjdGluZyk7CisKKyAgICByZXR1cm4g MDsKKworb3V0OgorICAgIHJldHVybiByYzsKK30KKworLyogUU1QIEZEIGNhbGxiYWNrcyAqLwor CitzdGF0aWMgdm9pZCBxbXBfZXZfZmRfY2FsbGJhY2sobGlieGxfX2VnYyAqZWdjLCBsaWJ4bF9f ZXZfZmQgKmV2X2ZkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBmZCwgc2hv cnQgZXZlbnRzLCBzaG9ydCByZXZlbnRzKQorICAgIC8qIE9uIGVudHJ5LCBldl9mZCBpcyAob2Yg Y291cnNlKSBBY3RpdmUuICBUaGUgZXZfcW1wIG1heSBiZSBpbiBhbnkKKyAgICAgKiBzdGF0ZSB3 aGVyZSB0aGlzIGlzIHBlcm1pdHRlZC4gIHFtcF9ldl9mZF9jYWxsYmFjayB3aWxsIGRvIHRoZSB3 b3JrCisgICAgICogbmVjZXNzYXJ5IHRvIG1ha2UgcHJvZ3Jlc3MsIGRlcGVuZGluZyBvbiB0aGUg Y3VycmVudCBzdGF0ZSwgYW5kIG1ha2UKKyAgICAgKiB0aGUgYXBwcm9wcmlhdGUgc3RhdGUgdHJh bnNpdGlvbnMgYW5kIGNhbGxiYWNrcy4gICovCit7CisgICAgRUdDX0dDOworICAgIGludCByYzsK KyAgICBsaWJ4bF9fZXZfcW1wICpldiA9IENPTlRBSU5FUl9PRihldl9mZCwgKmV2LCBlZmQpOwor CisgICAgaWYgKHJldmVudHMgJiAoUE9MTEhVUHxQT0xMRVJSKSkgeworICAgICAgICBpbnQgcjsK KyAgICAgICAgaW50IGVycm9yX3ZhbCA9IDA7CisgICAgICAgIHNvY2tsZW5fdCBvcHRfbGVuID0g c2l6ZW9mKGVycm9yX3ZhbCk7CisKKyAgICAgICAgciA9IGdldHNvY2tvcHQoZmQsIFNPTF9TT0NL RVQsIFNPX0VSUk9SLCAmZXJyb3JfdmFsLCAmb3B0X2xlbik7CisgICAgICAgIGlmIChyKQorICAg ICAgICAgICAgTE9HRUQoRVJST1IsIGV2LT5kb21pZCwgImdldHNvY2tvcHQgZmFpbGVkIik7Cisg ICAgICAgIGlmICghciAmJiBlcnJvcl92YWwpIHsKKyAgICAgICAgICAgIGVycm5vID0gZXJyb3Jf dmFsOworICAgICAgICAgICAgTE9HRUQoRVJST1IsIGV2LT5kb21pZCwgImVycm9yIG9uIFFNUCBz b2NrZXQiKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIExPR0QoRVJST1IsIGV2LT5k b21pZCwKKyAgICAgICAgICAgICAgICAgInJlY2VpdmVkIFBPTExIVVB8UE9MTEVSUiBmcm9tIFFN UCBzb2NrZXQiKTsKKyAgICAgICAgfQorICAgICAgICByYyA9IEVSUk9SX1BST1RPQ09MX0VSUk9S X1FNUDsKKyAgICAgICAgZ290byBlcnJvcjsKKyAgICB9CisKKyAgICBpZiAocmV2ZW50cyAmIH4o UE9MTElOfFBPTExPVVQpKSB7CisgICAgICAgIExPR0QoRVJST1IsIGV2LT5kb21pZCwKKyAgICAg ICAgICAgICAidW5leHBlY3RlZCBwb2xsIGV2ZW50IDB4JXggb24gUU1QIHNvY2tldCAoZXhwZWN0 ZWQgUE9MTElOICIKKyAgICAgICAgICAgICAiYW5kL29yIFBPTExPVVQpIiwKKyAgICAgICAgICAg IHJldmVudHMpOworICAgICAgICByYyA9IEVSUk9SX0ZBSUw7CisgICAgICAgIGdvdG8gZXJyb3I7 CisgICAgfQorCisgICAgaWYgKHJldmVudHMgJiBQT0xMT1VUKSB7CisgICAgICAgIHJjID0gcW1w X2V2X2NhbGxiYWNrX3dyaXRhYmxlKGdjLCBldiwgZmQpOworICAgICAgICBpZiAocmMpCisgICAg ICAgICAgICBnb3RvIGVycm9yOworICAgIH0KKworICAgIGlmIChyZXZlbnRzICYgUE9MTElOKSB7 CisgICAgICAgIHJjID0gcW1wX2V2X2NhbGxiYWNrX3JlYWRhYmxlKGVnYywgZXYsIGZkKTsKKyAg ICAgICAgaWYgKHJjIDwgMCkKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgIGlmIChy YyA9PSAxKSB7CisgICAgICAgICAgICAvKiB1c2VyIGNhbGxiYWNrIGhhcyBiZWVuIGNhbGxlZCAq LworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorCisgICAgcW1wX2V2X2Vu c3VyZV9yZWFkaW5nX3dyaXRpbmcoZ2MsIGV2KTsKKworICAgIHJldHVybjsKKworZXJyb3I6Cisg ICAgYXNzZXJ0KHJjKTsKKworICAgIExPR0QoRVJST1IsIGV2LT5kb21pZCwKKyAgICAgICAgICJF cnJvciBoYXBwZW5lZCB3aXRoIHRoZSBRTVAgY29ubmVjdGlvbiB0byBRRU1VIik7CisKKyAgICAv KiBPbiBlcnJvciwgZGVhbGxvY2F0ZSBhbGwgcHJpdmF0ZSByZXNzb3VyY2VzICovCisgICAgbGli eGxfX2V2X3FtcF9kaXNwb3NlKGdjLCBldik7CisKKyAgICAvKiBBbmQgdGVsbCBsaWJ4bF9fZXZf cW1wIHVzZXIgYWJvdXQgdGhlIGVycm9yICovCisgICAgZXYtPmNhbGxiYWNrKGVnYywgZXYsIE5V TEwsIHJjKTsgLyogbXVzdCBiZSBsYXN0ICovCit9CisKK3N0YXRpYyBpbnQgcW1wX2V2X2NhbGxi YWNrX3dyaXRhYmxlKGxpYnhsX19nYyAqZ2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBsaWJ4bF9fZXZfcW1wICpldiwgaW50IGZkKQorICAgIC8qIG9uIGVudHJ5OiAhZGlz Y29ubmVjdGVkCisgICAgICogb24gcmV0dXJuLCBvbmUgb2YgdGhlc2Ugc3RhdGUgdHJhbnNpdGlv bjoKKyAgICAgKiAgIHdhaXRpbmdfcmVwbHkgKHdpdGggbXNnIHNldCkgLT4gd2FpdGluZ19yZXBs eSAod2l0aCBtc2cgZnJlZSkKKyAgICAgKiAgIHR4X2J1ZiBzZXQgLT4gc2FtZSBzdGF0ZSBvciB0 eF9idWYgZnJlZQorICAgICAqICAgdHhfYnVmIGZyZWUgLT4gbm8gc3RhdGUgY2hhbmdlCisgICAg ICogb24gZXJyb3I6IGJyb2tlbiAqLworeworICAgIGludCByYzsKKyAgICBzc2l6ZV90IHI7CisK KyAgICBpZiAoZXYtPnN0YXRlID09IHFtcF9zdGF0ZV93YWl0aW5nX3JlcGx5KSB7CisgICAgICAg IGlmIChldi0+bXNnKSB7CisgICAgICAgICAgICBhc3NlcnQoIWV2LT50eF9idWYpOworICAgICAg ICAgICAgZXYtPnR4X2J1ZiA9IGV2LT5tc2c7CisgICAgICAgICAgICBldi0+dHhfYnVmX2xlbiA9 IHN0cmxlbihldi0+bXNnKTsKKyAgICAgICAgICAgIGV2LT50eF9idWZfb2ZmID0gMDsKKyAgICAg ICAgICAgIGV2LT5pZCA9IGV2LT5tc2dfaWQ7CisgICAgICAgICAgICBldi0+bXNnID0gTlVMTDsK KyAgICAgICAgICAgIGV2LT5tc2dfaWQgPSAwOworICAgICAgICB9CisgICAgfQorCisgICAgYXNz ZXJ0KGV2LT50eF9idWYpOworICAgIGlmICghZXYtPnR4X2J1ZikKKyAgICAgICAgcmV0dXJuIDA7 CisKKyAgICBMT0dfUU1QKCJzZW5kaW5nOiAnJS4qcyciLCAoaW50KWV2LT50eF9idWZfbGVuLCBl di0+dHhfYnVmKTsKKworICAgIC8qCisgICAgICogV2Ugd2lsbCBzZW5kIGEgZmlsZSBkZXNjcmlw dG9yIGFzc29jaWF0ZWQgd2l0aCBhIGNvbW1hbmQgb24gdGhlCisgICAgICogZmlyc3QgYnl0ZSBv ZiB0aGlzIGNvbW1hbmQuCisgICAgICovCisgICAgaWYgKGV2LT5zdGF0ZSA9PSBxbXBfc3RhdGVf d2FpdGluZ19yZXBseSAmJgorICAgICAgICBldi0+cGF5bG9hZF9mZCA+PSAwICYmCisgICAgICAg IGV2LT50eF9idWZfb2ZmID09IDApIHsKKworICAgICAgICByYyA9IGxpYnhsX19zZW5kbXNnX2Zk cyhnYywgZmQsIGV2LT50eF9idWYsIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IDEsICZldi0+cGF5bG9hZF9mZCwgIlFNUCBzb2NrZXQiKTsKKyAgICAgICAgLyogQ2hlY2sgZm9y IEVXT1VMREJMT0NLLCBhbmQgcmV0dXJuIHRvIHRyeSBhZ2FpbiBsYXRlciAqLworICAgICAgICBp ZiAocmMgPT0gRVJST1JfTk9UX1JFQURZKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAg IGlmIChyYykKKyAgICAgICAgICAgIHJldHVybiByYzsKKyAgICAgICAgZXYtPnR4X2J1Zl9vZmYr KzsKKyAgICB9CisKKyAgICB3aGlsZSAoZXYtPnR4X2J1Zl9vZmYgPCBldi0+dHhfYnVmX2xlbikg eworICAgICAgICByID0gd3JpdGUoZmQsIGV2LT50eF9idWYgKyBldi0+dHhfYnVmX29mZiwKKyAg ICAgICAgICAgICAgICAgIGV2LT50eF9idWZfbGVuIC0gZXYtPnR4X2J1Zl9vZmYpOworICAgICAg ICBpZiAociA8IDApIHsKKyAgICAgICAgICAgIGlmIChlcnJubyA9PSBFSU5UUikKKyAgICAgICAg ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGlmIChlcnJubyA9PSBFV09VTERCTE9DSykK KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIExPR0VEKEVSUk9SLCBldi0+ZG9t aWQsICJmYWlsZWQgdG8gd3JpdGUgdG8gUU1QIHNvY2tldCIpOworICAgICAgICAgICAgcmV0dXJu IEVSUk9SX0ZBSUw7CisgICAgICAgIH0KKyAgICAgICAgZXYtPnR4X2J1Zl9vZmYgKz0gcjsKKyAg ICB9CisKKyAgICBpZiAoZXYtPnR4X2J1Zl9vZmYgPT0gZXYtPnR4X2J1Zl9sZW4pCisgICAgICAg IHFtcF9ldl90eF9idWZfY2xlYXIoZXYpOworCisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBp bnQgcW1wX2V2X2NhbGxiYWNrX3JlYWRhYmxlKGxpYnhsX19lZ2MgKmVnYywKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX19ldl9xbXAgKmV2LCBpbnQgZmQpCisgICAg LyoKKyAgICAgKiBSZXR1cm4gdmFsdWVzOgorICAgICAqICAgPCAwICAgIGxpYnhsIGVycm9yIGNv ZGUKKyAgICAgKiAgIDAgICAgICBzdWNjZXNzCisgICAgICogICAxICAgICAgc3VjY2VzcywgYnV0 IGEgdXNlciBjYWxsYmFjayBoYXMgYmVlbiBjYWxsZWQsCisgICAgICogICAgICAgICAgYGV2YCBz aG91bGQgbm90IGJlIHVzZWQgYW55bW9yZS4KKyAgICAgKgorICAgICAqIFRoaXMgZnVuY3Rpb24g d2lsbCB1cGRhdGUgdGhlIHJ4IGJ1ZmZlciBhbmQgcG9zc2libHkgdXBkYXRlCisgICAgICogZXYt PnN0YXRlOgorICAgICAqICBjb25uZWN0aW5nICAgICAgICAgICAgIC0+IGNhcGFiaWxpdHlfbmVn b3RpYXRpb24KKyAgICAgKiAgY2FwYWJpbGl0eV9uZWdvdGlhdGlvbiAtPiB3YWl0aW5nX3JlcGx5 CisgICAgICogIHdhaXRpbmdfcmVwbHkgICAgICAgICAgLT4gY29ubmVjdGVkCisgICAgICogb24g ZXJyb3I6IGJyb2tlbgorICAgICAqLworeworICAgIEVHQ19HQzsKKyAgICBpbnQgcmM7CisgICAg c3NpemVfdCByOworCisgICAgd2hpbGUgKDEpIHsKKyAgICAgICAgd2hpbGUgKDEpIHsKKyAgICAg ICAgICAgIGxpYnhsX19qc29uX29iamVjdCAqbyA9IE5VTEw7CisKKyAgICAgICAgICAgIC8qIHBh cnNlIHJ4IGJ1ZmZlciB0byBmaW5kIG9uZSBqc29uIG9iamVjdCAqLworICAgICAgICAgICAgcmMg PSBxbXBfZXZfZ2V0X25leHRfbXNnKGVnYywgZXYsICZvKTsKKyAgICAgICAgICAgIGlmIChyYyA9 PSBFUlJPUl9OT1RGT1VORCkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGVs c2UgaWYgKHJjKQorICAgICAgICAgICAgICAgIHJldHVybiByYzsKKworICAgICAgICAgICAgLyog TXVzdCBiZSBsYXN0IGFuZCByZXR1cm4gd2hlbiB0aGUgdXNlciBjYWxsYmFjayBpcyBjYWxsZWQg Ki8KKyAgICAgICAgICAgIHJjID0gcW1wX2V2X2hhbmRsZV9tZXNzYWdlKGVnYywgZXYsIG8pOwor ICAgICAgICAgICAgaWYgKHJjKQorICAgICAgICAgICAgICAgIC8qIHJldHVybnMgYm90aCByYyB2 YWx1ZXMgLUVSUk9SXyogYW5kIDEgKi8KKyAgICAgICAgICAgICAgICByZXR1cm4gcmM7CisgICAg ICAgIH0KKworICAgICAgICAvKiBDaGVjayBpZiB0aGUgYnVmZmVyIHN0aWxsIGhhdmUgc3BhY2Us IG9yIGluY3JlYXNlIHNpemUgKi8KKyAgICAgICAgaWYgKGV2LT5yeF9idWZfc2l6ZSAtIGV2LT5y eF9idWZfdXNlZCA8IFFNUF9SRUNFSVZFX0JVRkZFUl9TSVpFKSB7CisgICAgICAgICAgICBzaXpl X3QgbmV3c2l6ZSA9IGV2LT5yeF9idWZfc2l6ZSAqIDIgKyBRTVBfUkVDRUlWRV9CVUZGRVJfU0la RTsKKworICAgICAgICAgICAgaWYgKG5ld3NpemUgPiBRTVBfTUFYX1NJWkVfUlhfQlVGKSB7Cisg ICAgICAgICAgICAgICAgTE9HRChFUlJPUiwgZXYtPmRvbWlkLAorICAgICAgICAgICAgICAgICAg ICAgIlFNUCByZWNlaXZlIGJ1ZmZlciBpcyB0b28gYmlnICglbGQgPiAlbGxkKSIsCisgICAgICAg ICAgICAgICAgICAgICBuZXdzaXplLCBRTVBfTUFYX1NJWkVfUlhfQlVGKTsKKyAgICAgICAgICAg ICAgICByZXR1cm4gRVJST1JfQlVGRkVSRlVMTDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg IGV2LT5yeF9idWZfc2l6ZSA9IG5ld3NpemU7CisgICAgICAgICAgICBldi0+cnhfYnVmID0gbGli eGxfX3JlYWxsb2MoTk9HQywgZXYtPnJ4X2J1ZiwgZXYtPnJ4X2J1Zl9zaXplKTsKKyAgICAgICAg fQorCisgICAgICAgIHIgPSByZWFkKGZkLCBldi0+cnhfYnVmICsgZXYtPnJ4X2J1Zl91c2VkLAor ICAgICAgICAgICAgICAgICBldi0+cnhfYnVmX3NpemUgLSBldi0+cnhfYnVmX3VzZWQpOworICAg ICAgICBpZiAociA8IDApIHsKKyAgICAgICAgICAgIGlmIChlcnJubyA9PSBFSU5UUikKKyAgICAg ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGlmIChlcnJubyA9PSBFV09VTERCTE9D SykKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIExPR0VEKEVSUk9SLCBldi0+ ZG9taWQsICJlcnJvciByZWFkaW5nIFFNUCBzb2NrZXQiKTsKKyAgICAgICAgICAgIHJldHVybiBF UlJPUl9GQUlMOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHIgPT0gMCkgeworICAgICAgICAg ICAgTE9HRChFUlJPUiwgZXYtPmRvbWlkLCAiVW5leHBlY3RlZCBFT0Ygb24gUU1QIHNvY2tldCIp OworICAgICAgICAgICAgcmV0dXJuIEVSUk9SX1BST1RPQ09MX0VSUk9SX1FNUDsKKyAgICAgICAg fQorCisgICAgICAgIExPR19RTVAoInJlY2VpdmVkICVsZEI6ICclLipzJyIsIHIsCisgICAgICAg ICAgICAgICAgKGludClyLCBldi0+cnhfYnVmICsgZXYtPnJ4X2J1Zl91c2VkKTsKKworICAgICAg ICBldi0+cnhfYnVmX3VzZWQgKz0gcjsKKyAgICAgICAgYXNzZXJ0KGV2LT5yeF9idWZfdXNlZCA8 PSBldi0+cnhfYnVmX3NpemUpOworICAgIH0KKworICAgIHJldHVybiAwOworfQorCisvKiBIYW5k bGUgbWVzc2FnZXMgcmVjZWl2ZWQgZnJvbSBRTVAgc2VydmVyICovCisKK3N0YXRpYyBpbnQgcW1w X2V2X2dldF9uZXh0X21zZyhsaWJ4bF9fZWdjICplZ2MsIGxpYnhsX19ldl9xbXAgKmV2LAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX19qc29uX29iamVjdCAqKm9fcikKKyAg ICAvKiBGaW5kIGEgSlNPTiBvYmplY3QgYW5kIHN0b3JlIGl0IGluIG9fci4KKyAgICAgKiByZXR1 cm4gRVJST1JfTk9URk9VTkQgaWYgbm8gb2JqZWN0IGlzIGZvdW5kLgorICAgICAqIGBvX3JgIGlz IGFsbG9jYXRlZCB3aXRoaW4gYGVnY2AuCisgICAgICoKKyAgICAgKiAhZGlzY29ubmVjdGVkIC0+ IHNhbWUgc3RhdGUgKHdpdGggcnggYnVmZmVyIHVwZGF0ZWQpCisgICAgICovCit7CisgICAgRUdD X0dDOworICAgIHNpemVfdCBsZW47CisgICAgY2hhciAqZW5kID0gTlVMTDsKKyAgICBjb25zdCBj aGFyIGVvbVtdID0gIlxyXG4iOworICAgIGNvbnN0IHNpemVfdCBlb21sID0gc2l6ZW9mKGVvbSkg LSAxOworICAgIGxpYnhsX19qc29uX29iamVjdCAqbyA9IE5VTEw7CisKKyAgICBpZiAoIWV2LT5y eF9idWZfdXNlZCkKKyAgICAgICAgcmV0dXJuIEVSUk9SX05PVEZPVU5EOworCisgICAgLyogU2Vh cmNoIGZvciB0aGUgZW5kIG9mIGEgUU1QIG1lc3NhZ2U6ICJcclxuIiAqLworICAgIGVuZCA9IG1l bW1lbShldi0+cnhfYnVmLCBldi0+cnhfYnVmX3VzZWQsIGVvbSwgZW9tbCk7CisgICAgaWYgKCFl bmQpCisgICAgICAgIHJldHVybiBFUlJPUl9OT1RGT1VORDsKKyAgICBsZW4gPSAoZW5kIC0gZXYt PnJ4X2J1ZikgKyBlb21sOworCisgICAgTE9HX1FNUCgicGFyc2luZyAlbHVCOiAnJS4qcyciLCBs ZW4sIChpbnQpbGVuLCBldi0+cnhfYnVmKTsKKworICAgIC8qIFJlcGxhY2UgXHIgYnkgXDAgc28g dGhhdCBsaWJ4bF9fanNvbl9wYXJzZSBjYW4gdXNlIHN0cmxlbiAqLworICAgIGV2LT5yeF9idWZb bGVuIC0gZW9tbF0gPSAnXDAnOworICAgIG8gPSBsaWJ4bF9fanNvbl9wYXJzZShnYywgZXYtPnJ4 X2J1Zik7CisKKyAgICBpZiAoIW8pIHsKKyAgICAgICAgTE9HRChFUlJPUiwgZXYtPmRvbWlkLCAi UGFyc2UgZXJyb3IiKTsKKyAgICAgICAgcmV0dXJuIEVSUk9SX1BST1RPQ09MX0VSUk9SX1FNUDsK KyAgICB9CisKKyAgICBldi0+cnhfYnVmX3VzZWQgLT0gbGVuOworICAgIG1lbW1vdmUoZXYtPnJ4 X2J1ZiwgZXYtPnJ4X2J1ZiArIGxlbiwgZXYtPnJ4X2J1Zl91c2VkKTsKKworICAgIExPR19RTVAo IkpTT04gb2JqZWN0IHJlY2VpdmVkOiAlcyIsIEpTT04obykpOworCisgICAgKm9fciA9IG87CisK KyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludCBxbXBfZXZfcGFyc2VfZXJyb3JfbWVzc2Fn ZXMobGlieGxfX2VnYyAqZWdjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgbGlieGxfX2V2X3FtcCAqZXYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBjb25zdCBsaWJ4bF9fanNvbl9vYmplY3QgKnJlc3ApCisgICAgLyogbm8gc3RhdGUgY2hh bmdlICovCit7CisgICAgRUdDX0dDOworICAgIGludCByYzsKKyAgICBjb25zdCBjaGFyICpzOwor ICAgIGNvbnN0IGxpYnhsX19qc29uX29iamVjdCAqbzsKKyAgICBjb25zdCBsaWJ4bF9fanNvbl9v YmplY3QgKmVycjsKKworICAgIC8qCisgICAgICogeyAiZXJyb3IiOiB7ICJjbGFzcyI6IHN0cmlu ZywgImRlc2MiOiBzdHJpbmcgfSB9CisgICAgICovCisKKyAgICBlcnIgPSBsaWJ4bF9fanNvbl9t YXBfZ2V0KCJlcnJvciIsIHJlc3AsIEpTT05fTUFQKTsKKworICAgIG8gPSBsaWJ4bF9fanNvbl9t YXBfZ2V0KCJjbGFzcyIsIGVyciwgSlNPTl9TVFJJTkcpOworICAgIGlmICghbykgeworICAgICAg ICBMT0dEKEVSUk9SLCBldi0+ZG9taWQsCisgICAgICAgICAgICAgIlByb3RvY29sIGVycm9yOiBt aXNzaW5nICdjbGFzcycgbWVtYmVyIGluIGVycm9yIG1lc3NhZ2UiKTsKKyAgICAgICAgcmV0dXJu IEVSUk9SX1BST1RPQ09MX0VSUk9SX1FNUDsKKyAgICB9CisgICAgcyA9IGxpYnhsX19qc29uX29i amVjdF9nZXRfc3RyaW5nKG8pOworICAgIGlmIChzKQorICAgICAgICByYyA9IHFtcF9lcnJvcl9j bGFzc190b19saWJ4bF9lcnJvcl9jb2RlKGdjLCBzKTsKKyAgICBlbHNlCisgICAgICAgIHJjID0g RVJST1JfUFJPVE9DT0xfRVJST1JfUU1QOworCisgICAgbyA9IGxpYnhsX19qc29uX21hcF9nZXQo ImRlc2MiLCBlcnIsIEpTT05fU1RSSU5HKTsKKyAgICBpZiAoIW8pIHsKKyAgICAgICAgTE9HRChF UlJPUiwgZXYtPmRvbWlkLAorICAgICAgICAgICAgICJQcm90b2NvbCBlcnJvcjogbWlzc2luZyAn ZGVzYycgbWVtYmVyIGluIGVycm9yIG1lc3NhZ2UiKTsKKyAgICAgICAgcmV0dXJuIEVSUk9SX1BS T1RPQ09MX0VSUk9SX1FNUDsKKyAgICB9CisgICAgcyA9IGxpYnhsX19qc29uX29iamVjdF9nZXRf c3RyaW5nKG8pOworICAgIGlmIChzKQorICAgICAgICBMT0dEKEVSUk9SLCBldi0+ZG9taWQsICIl cyIsIHMpOworICAgIGVsc2UKKyAgICAgICAgTE9HRChFUlJPUiwgZXYtPmRvbWlkLCAiUmVjZWl2 ZWQgdW5leHBlY3RlZCBlcnJvcjogJXMiLAorICAgICAgICAgICAgIEpTT04ocmVzcCkpOworICAg IHJldHVybiByYzsKK30KKworc3RhdGljIGludCBxbXBfZXZfaGFuZGxlX21lc3NhZ2UobGlieGxf X2VnYyAqZWdjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlieGxfX2V2X3Ft cCAqZXYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBsaWJ4bF9fanNv bl9vYmplY3QgKnJlc3ApCisgICAgLyoKKyAgICAgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgaGFuZGxl IGV2ZXJ5IG1lc3NhZ2VzIHNlbnQgYnkgdGhlIFFNUCBzZXJ2ZXIuCisgICAgICogUmV0dXJuIHZh bHVlczoKKyAgICAgKiAgIDwgMCAgICBsaWJ4bCBlcnJvciBjb2RlCisgICAgICogICAwICAgICAg c3VjY2VzcworICAgICAqICAgMSAgICAgIHN1Y2Nlc3MsIGJ1dCBhIHVzZXIgY2FsbGJhY2sgaGFz IGJlZW4gY2FsbGVkLAorICAgICAqICAgICAgICAgIGBldmAgc2hvdWxkIG5vdCBiZSB1c2VkIGFu eW1vcmUuCisgICAgICoKKyAgICAgKiBQb3NzaWJsZSBzdGF0ZSBjaGFuZ2VzOgorICAgICAqIGNv bm5lY3RpbmcgLT4gY2FwYWJpbGl0eV9uZWdvdGlhdGlvbgorICAgICAqIGNhcGFiaWxpdHlfbmVn b3RpYXRpb24gLT4gd2FpdGluZ19yZXBseQorICAgICAqIHdhaXRpbmdfcmVwbHkgLT4gd2FpdGlu Z19yZXBseS9jb25uZWN0ZWQKKyAgICAgKgorICAgICAqIG9uIGVycm9yOiBicm9rZW4KKyAgICAg Ki8KK3sKKyAgICBFR0NfR0M7CisgICAgaW50IGlkOworICAgIGNoYXIgKmJ1ZjsKKyAgICBpbnQg cmMgPSAwOworICAgIGNvbnN0IGxpYnhsX19qc29uX29iamVjdCAqbzsKKyAgICBjb25zdCBsaWJ4 bF9fanNvbl9vYmplY3QgKnJlc3BvbnNlOworICAgIGxpYnhsX19xbXBfbWVzc2FnZV90eXBlIHR5 cGUgPSBxbXBfcmVzcG9uc2VfdHlwZShyZXNwKTsKKworICAgIHN3aXRjaCAodHlwZSkgeworICAg IGNhc2UgTElCWExfX1FNUF9NRVNTQUdFX1RZUEVfUU1QOgorICAgICAgICAvKiBncmVldGluZyBt ZXNzYWdlICovCisKKyAgICAgICAgaWYgKGV2LT5zdGF0ZSAhPSBxbXBfc3RhdGVfY29ubmVjdGlu ZykgeworICAgICAgICAgICAgTE9HRChFUlJPUiwgZXYtPmRvbWlkLAorICAgICAgICAgICAgICAg ICAiVW5leHBlY3RlZCBncmVldGluZyBtZXNzYWdlIHJlY2VpdmVkIik7CisgICAgICAgICAgICBy ZXR1cm4gRVJST1JfUFJPVE9DT0xfRVJST1JfUU1QOworICAgICAgICB9CisKKyAgICAgICAgLyog UHJlcGFyZSBuZXh0IG1lc3NhZ2UgdG8gc2VuZCAqLworICAgICAgICBhc3NlcnQoIWV2LT50eF9i dWYpOworICAgICAgICBldi0+aWQgPSBldi0+bmV4dF9pZCsrOworICAgICAgICBidWYgPSBxbXBf cHJlcGFyZV9jbWQobGlieGxfX2FvX2lucHJvZ3Jlc3NfZ2MoZXYtPmFvKSwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICJxbXBfY2FwYWJpbGl0aWVzIiwgTlVMTCwgZXYtPmlkKTsKKyAg ICAgICAgaWYgKCFidWYpIHsKKyAgICAgICAgICAgIExPR0QoRVJST1IsIGV2LT5kb21pZCwKKyAg ICAgICAgICAgICAgICAgIkZhaWxlZCB0byBnZW5lcmF0ZSBxbXBfY2FwYWJpbGl0aWVzIGNvbW1h bmQiKTsKKyAgICAgICAgICAgIHJldHVybiBFUlJPUl9GQUlMOworICAgICAgICB9CisgICAgICAg IGV2LT50eF9idWYgPSBidWY7CisgICAgICAgIGV2LT50eF9idWZfbGVuID0gc3RybGVuKGJ1Zik7 CisgICAgICAgIGV2LT50eF9idWZfb2ZmID0gMDsKKyAgICAgICAgcW1wX2V2X3NldF9zdGF0ZShn YywgZXYsIHFtcF9zdGF0ZV9jYXBhYmlsaXR5X25lZ290aWF0aW9uKTsKKworICAgICAgICByZXR1 cm4gMDsKKworICAgIGNhc2UgTElCWExfX1FNUF9NRVNTQUdFX1RZUEVfUkVUVVJOOgorICAgIGNh c2UgTElCWExfX1FNUF9NRVNTQUdFX1RZUEVfRVJST1I6CisgICAgICAgIC8qCisgICAgICAgICAq IFJlcGx5IHRvIGEgY29tbWFuZCAoc3VjY2Vzcy9lcnJvcikgb3Igc2VydmVyIGVycm9yCisgICAg ICAgICAqCisgICAgICAgICAqIEluIHRoaXMgY2FzZXMsIHdlIGFyZSBwYXJzaW5nIHR3byBwb3Nz aWJsZXMgcmVzcG9uc2VzOgorICAgICAgICAgKiAtIHN1Y2Nlc3M6CisgICAgICAgICAqIHsgInJl dHVybiI6IGpzb24tdmFsdWUsICJpZCI6IGludCB9CisgICAgICAgICAqIC0gZXJyb3I6CisgICAg ICAgICAqIHsgImVycm9yIjogeyAiY2xhc3MiOiBzdHJpbmcsICJkZXNjIjogc3RyaW5nIH0sICJp ZCI6IGludCB9CisgICAgICAgICAqLworCisgICAgICAgIG8gPSBsaWJ4bF9fanNvbl9tYXBfZ2V0 KCJpZCIsIHJlc3AsIEpTT05fSU5URUdFUik7CisgICAgICAgIGlmICghbykgeworICAgICAgICAg ICAgLyoKKyAgICAgICAgICAgICAqIElmICJpZCIgaXNuJ3QgcHJlc2VudCwgYW4gZXJyb3Igb2Nj dXIgb24gdGhlIHNlcnZlciBiZWZvcmUKKyAgICAgICAgICAgICAqIGl0IGhhcyByZWFkIHRoZSAi aWQiIHByb3ZpZGVkIGJ5IGxpYnhsLgorICAgICAgICAgICAgICoKKyAgICAgICAgICAgICAqIFdl IGRlbGliZXJhdGVseSBzcXVhc2ggYWxsIGVycm9ycyBpbnRvCisgICAgICAgICAgICAgKiBFUlJP Ul9QUk9UT0NPTF9FUlJPUl9RTVAgYXMgcW1wX2V2X3BhcnNlX2Vycm9yX21lc3NhZ2VzIG1heQor ICAgICAgICAgICAgICogYWxzbyByZXR1cm4gRVJST1JfUU1QXyogYnV0IHRob3NlIGFyZSByZXNl cnZlZCBmb3IgZXJyb3JzCisgICAgICAgICAgICAgKiByZXR1cm4gYnkgdGhlIGNhbGxlcidzIGNv bW1hbmQuCisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIHFtcF9ldl9wYXJzZV9lcnJvcl9t ZXNzYWdlcyhlZ2MsIGV2LCByZXNwKTsKKyAgICAgICAgICAgIHJldHVybiBFUlJPUl9QUk9UT0NP TF9FUlJPUl9RTVA7CisgICAgICAgIH0KKworICAgICAgICBpZCA9IGxpYnhsX19qc29uX29iamVj dF9nZXRfaW50ZWdlcihvKTsKKworICAgICAgICBpZiAoaWQgIT0gZXYtPmlkKSB7CisgICAgICAg ICAgICBMT0dEKEVSUk9SLCBldi0+ZG9taWQsCisgICAgICAgICAgICAgICAgICJNZXNzYWdlIGZy b20gUUVNVSB3aXRoIHVuZXhwZWN0ZWQgaWQgJWQ6ICVzIiwKKyAgICAgICAgICAgICAgICAgaWQs IEpTT04ocmVzcCkpOworICAgICAgICAgICAgcmV0dXJuIEVSUk9SX1BST1RPQ09MX0VSUk9SX1FN UDsKKyAgICAgICAgfQorCisgICAgICAgIHN3aXRjaCAoZXYtPnN0YXRlKSB7CisgICAgICAgIGNh c2UgcW1wX3N0YXRlX2NhcGFiaWxpdHlfbmVnb3RpYXRpb246CisgICAgICAgICAgICBpZiAodHlw ZSAhPSBMSUJYTF9fUU1QX01FU1NBR0VfVFlQRV9SRVRVUk4pIHsKKyAgICAgICAgICAgICAgICBM T0dEKEVSUk9SLCBldi0+ZG9taWQsCisgICAgICAgICAgICAgICAgICAgICAiRXJyb3IgZHVyaW5n IGNhcGFiaWxpdHkgbmVnb3RpYXRpb246ICVzIiwKKyAgICAgICAgICAgICAgICAgICAgIEpTT04o cmVzcCkpOworICAgICAgICAgICAgICAgIHJldHVybiBFUlJPUl9QUk9UT0NPTF9FUlJPUl9RTVA7 CisgICAgICAgICAgICB9CisgICAgICAgICAgICBxbXBfZXZfc2V0X3N0YXRlKGdjLCBldiwgcW1w X3N0YXRlX3dhaXRpbmdfcmVwbHkpOworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIGNh c2UgcW1wX3N0YXRlX3dhaXRpbmdfcmVwbHk6CisgICAgICAgICAgICBpZiAodHlwZSA9PSBMSUJY TF9fUU1QX01FU1NBR0VfVFlQRV9SRVRVUk4pIHsKKyAgICAgICAgICAgICAgICByZXNwb25zZSA9 IGxpYnhsX19qc29uX21hcF9nZXQoInJldHVybiIsIHJlc3AsIEpTT05fQU5ZKTsKKyAgICAgICAg ICAgICAgICByYyA9IDA7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIC8q IGVycm9yIG1lc3NhZ2UgKi8KKyAgICAgICAgICAgICAgICByZXNwb25zZSA9IE5VTEw7CisgICAg ICAgICAgICAgICAgcmMgPSBxbXBfZXZfcGFyc2VfZXJyb3JfbWVzc2FnZXMoZWdjLCBldiwgcmVz cCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBxbXBfZXZfc2V0X3N0YXRlKGdjLCBldiwg cW1wX3N0YXRlX2Nvbm5lY3RlZCk7CisgICAgICAgICAgICBldi0+Y2FsbGJhY2soZWdjLCBldiwg cmVzcG9uc2UsIHJjKTsgLyogbXVzdCBiZSBsYXN0ICovCisgICAgICAgICAgICByZXR1cm4gMTsK KyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIExPR0QoRVJST1IsIGV2LT5kb21pZCwgIlVu ZXhwZWN0ZWQgbWVzc2FnZTogJXMiLCBKU09OKHJlc3ApKTsKKyAgICAgICAgICAgIHJldHVybiBF UlJPUl9QUk9UT0NPTF9FUlJPUl9RTVA7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIDA7CisK KyAgICBjYXNlIExJQlhMX19RTVBfTUVTU0FHRV9UWVBFX0VWRU5UOgorICAgICAgICAvKiBFdmVu dHMgYXJlIGlnbm9yZWQgKi8KKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBjYXNlIExJQlhMX19R TVBfTUVTU0FHRV9UWVBFX0lOVkFMSUQ6CisgICAgICAgIExPR0QoRVJST1IsIGV2LT5kb21pZCwg IlVuZXhwZWN0ZWQgbWVzc2FnZSByZWNlaXZlZDogJXMiLAorICAgICAgICAgICAgIEpTT04ocmVz cCkpOworICAgICAgICByZXR1cm4gRVJST1JfUFJPVE9DT0xfRVJST1JfUU1QOworCisgICAgZGVm YXVsdDoKKyAgICAgICAgYWJvcnQoKTsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworLyoK KyAqIGxpYnhsX19ldl9xbXBfKgorICovCisKK3ZvaWQgbGlieGxfX2V2X3FtcF9pbml0KGxpYnhs X19ldl9xbXAgKmV2KQorICAgIC8qIGRpc2Nvbm5lY3RlZCAtPiBkaXNjb25uZWN0ZWQgKi8KK3sK KyAgICAvKiBTdGFydCB3aXRoIGFuIG1lc3NhZ2UgSUQgdGhhdCBpcyBvYnZpb3VzbHkgZ2VuZXJh dGVkIGJ5IGxpYnhsCisgICAgICogInhscVwwIiAqLworICAgIGV2LT5uZXh0X2lkID0gMHg3ODZj NzEwMDsKKworICAgIGV2LT5jZmQgPSBOVUxMOworICAgIGxpYnhsX19ldl9mZF9pbml0KCZldi0+ ZWZkKTsKKyAgICBldi0+c3RhdGUgPSBxbXBfc3RhdGVfZGlzY29ubmVjdGVkOworICAgIGV2LT5p ZCA9IDA7CisKKyAgICBldi0+cnhfYnVmID0gTlVMTDsKKyAgICBldi0+cnhfYnVmX3NpemUgPSBl di0+cnhfYnVmX3VzZWQgPSAwOworICAgIHFtcF9ldl90eF9idWZfY2xlYXIoZXYpOworCisgICAg ZXYtPm1zZyA9IE5VTEw7CisgICAgZXYtPm1zZ19pZCA9IDA7Cit9CisKK2ludCBsaWJ4bF9fZXZf cW1wX3NlbmQobGlieGxfX2djICpnYywgbGlieGxfX2V2X3FtcCAqZXYsCisgICAgICAgICAgICAg ICAgICAgICAgIGNvbnN0IGNoYXIgKmNtZCwgbGlieGxfX2pzb25fb2JqZWN0ICphcmdzKQorICAg IC8qIGRpc2Nvbm5lY3RlZCAtPiBjb25uZWN0aW5nCisgICAgICogY29ubmVjdGVkIC0+IHdhaXRp bmdfcmVwbHkgKHdpdGggbXNnIHNldCkKKyAgICAgKiBvbiBlcnJvcjogZGlzY29ubmVjdGVkICov Cit7CisgICAgaW50IHJjOworCisgICAgTE9HRChERUJVRywgZXYtPmRvbWlkLCAiIGV2ICVwLCBj bWQgJyVzJyIsIGV2LCBjbWQpOworCisgICAgYXNzZXJ0KGV2LT5zdGF0ZSA9PSBxbXBfc3RhdGVf ZGlzY29ubmVjdGVkIHx8CisgICAgICAgICAgIGV2LT5zdGF0ZSA9PSBxbXBfc3RhdGVfY29ubmVj dGVkKTsKKyAgICBhc3NlcnQoY21kKTsKKworICAgIC8qIENvbm5lY3QgdG8gUUVNVSBpZiBub3Qg YWxyZWFkeSBjb25uZWN0ZWQgKi8KKyAgICBpZiAoZXYtPnN0YXRlID09IHFtcF9zdGF0ZV9kaXNj b25uZWN0ZWQpIHsKKyAgICAgICAgcmMgPSBxbXBfZXZfY29ubmVjdChnYywgZXYpOworICAgICAg ICBpZiAocmMpCisgICAgICAgICAgICBnb3RvIGVycm9yOworICAgIH0KKworICAgIC8qIFByZXBh cmUgdXNlciBjb21tYW5kICovCisgICAgZXYtPm1zZ19pZCA9IGV2LT5uZXh0X2lkKys7CisgICAg ZXYtPm1zZyA9IHFtcF9wcmVwYXJlX2NtZChsaWJ4bF9fYW9faW5wcm9ncmVzc19nYyhldi0+YW8p LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21kLCBhcmdzLCBldi0+bXNnX2lkKTsK KyAgICBpZiAoIWV2LT5tc2cpIHsKKyAgICAgICAgTE9HRChFUlJPUiwgZXYtPmRvbWlkLCAiRmFp bGVkIHRvIGdlbmVyYXRlIGNhbGxlcidzIGNvbW1hbmQgJXMiLAorICAgICAgICAgICAgIGNtZCk7 CisgICAgICAgIHJjID0gRVJST1JfRkFJTDsKKyAgICAgICAgZ290byBlcnJvcjsKKyAgICB9Cisg ICAgaWYgKGV2LT5zdGF0ZSA9PSBxbXBfc3RhdGVfY29ubmVjdGVkKSB7CisgICAgICAgIHFtcF9l dl9zZXRfc3RhdGUoZ2MsIGV2LCBxbXBfc3RhdGVfd2FpdGluZ19yZXBseSk7CisgICAgfQorCisg ICAgcW1wX2V2X2Vuc3VyZV9yZWFkaW5nX3dyaXRpbmcoZ2MsIGV2KTsKKworICAgIHJldHVybiAw OworCitlcnJvcjoKKyAgICBsaWJ4bF9fZXZfcW1wX2Rpc3Bvc2UoZ2MsIGV2KTsKKyAgICByZXR1 cm4gcmM7Cit9CisKK3ZvaWQgbGlieGxfX2V2X3FtcF9kaXNwb3NlKGxpYnhsX19nYyAqZ2MsIGxp YnhsX19ldl9xbXAgKmV2KQorICAgIC8qICogLT4gZGlzY29ubmVjdGVkICovCit7CisgICAgTE9H RChERUJVRywgZXYtPmRvbWlkLCAiIGV2ICVwIiwgZXYpOworCisgICAgZnJlZShldi0+cnhfYnVm KTsKKworICAgIGxpYnhsX19ldl9mZF9kZXJlZ2lzdGVyKGdjLCAmZXYtPmVmZCk7CisgICAgbGli eGxfX2NhcmVmZF9jbG9zZShldi0+Y2ZkKTsKKworICAgIGxpYnhsX19ldl9xbXBfaW5pdChldik7 Cit9CisKIC8qCiAgKiBMb2NhbCB2YXJpYWJsZXM6CiAgKiBtb2RlOiBDCmRpZmYgLS1naXQgYS90 b29scy9saWJ4bC9saWJ4bF90eXBlcy5pZGwgYi90b29scy9saWJ4bC9saWJ4bF90eXBlcy5pZGwK aW5kZXggNTFjZjA2YTNhMi4uOTAzNDBhYjFiYiAxMDA2NDQKLS0tIGEvdG9vbHMvbGlieGwvbGli eGxfdHlwZXMuaWRsCisrKyBiL3Rvb2xzL2xpYnhsL2xpYnhsX3R5cGVzLmlkbApAQCAtNjksNiAr NjksMTIgQEAgbGlieGxfZXJyb3IgPSBFbnVtZXJhdGlvbigiZXJyb3IiLCBbCiAgICAgKC0yMywg Ik5PVEZPVU5EIiksCiAgICAgKC0yNCwgIkRPTUFJTl9ERVNUUk9ZRUQiKSwgIyBUYXJnZXQgZG9t YWluIGNlYXNlZCB0byBleGlzdCBkdXJpbmcgb3AKICAgICAoLTI1LCAiRkVBVFVSRV9SRU1PVkVE IiksICMgRm9yIGZ1bmN0aW9uYWxpdHkgdGhhdCBoYXMgYmVlbiByZW1vdmVkCisgICAgKC0yNiwg IlBST1RPQ09MX0VSUk9SX1FNUCIpLAorICAgICgtMjcsICJVTktOT1dOX1FNUF9FUlJPUiIpLAor ICAgICgtMjgsICJRTVBfR0VORVJJQ19FUlJPUiIpLCAjIHVuc3BlY2lmaWVkIHFtcCBlcnJvcgor ICAgICgtMjksICJRTVBfQ09NTUFORF9OT1RfRk9VTkQiKSwgIyB0aGUgcmVxdWVzdGVkIGNvbW1h bmQgaGFzIG5vdCBiZWVuIGZvdW5kCisgICAgKC0zMCwgIlFNUF9ERVZJQ0VfTk9UX0FDVElWRSIp LCAjIGEgZGV2aWNlIGhhcyBmYWlsZWQgdG8gYmUgYmVjb21lIGFjdGl2ZQorICAgICgtMzEsICJR TVBfREVWSUNFX05PVF9GT1VORCIpLCAjIHRoZSByZXF1ZXN0ZWQgZGV2aWNlIGhhcyBub3QgYmVl biBmb3VuZAogICAgIF0sIHZhbHVlX25hbWVzcGFjZSA9ICIiKQogCiBsaWJ4bF9kb21haW5fdHlw ZSA9IEVudW1lcmF0aW9uKCJkb21haW5fdHlwZSIsIFsKLS0gCkFudGhvbnkgUEVSQVJECgoKX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KWGVuLWRldmVsIG1h aWxpbmcgbGlzdApYZW4tZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6Ly9saXN0cy54 ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL3hlbi1kZXZlbA==