From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jaegeuk Kim Subject: Re: [PATCH v7] F2FS support Date: Mon, 22 Feb 2016 10:25:25 -0800 Message-ID: <20160222182525.GD10875@jaegeuk.gateway> References: <1427185140-41120-1-git-send-email-jaegeuk@kernel.org> <20150403224908.GB25673@jaegeuk-mac02.mot.com> <20151119212824.GA11666@jaegeuk.local> <566E7DAA.4010202@gmail.com> <20151215003421.GD48918@jaegeuk.local> <20151215181439.GA60773@jaegeuk.local> <20160108194132.GA17464@jaegeuk.aosp> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from sog-mx-2.v43.ch3.sourceforge.com ([172.29.43.192] helo=mx.sourceforge.net) by sfs-ml-2.v29.ch3.sourceforge.com with esmtp (Exim 4.76) (envelope-from ) id 1aXvAr-0003nB-05 for linux-f2fs-devel@lists.sourceforge.net; Mon, 22 Feb 2016 18:25:33 +0000 Received: from mail.kernel.org ([198.145.29.136]) by sog-mx-2.v43.ch3.sourceforge.com with esmtps (TLSv1:AES256-SHA:256) (Exim 4.76) id 1aXvAn-0003GI-Pi for linux-f2fs-devel@lists.sourceforge.net; Mon, 22 Feb 2016 18:25:32 +0000 Content-Disposition: inline In-Reply-To: <20160108194132.GA17464@jaegeuk.aosp> List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: linux-f2fs-devel-bounces@lists.sourceforge.net To: Andrei Borzenkov Cc: The development of GNU GRUB , linux-f2fs-devel@lists.sourceforge.net Q2hhbmcgbG9nIGZyb20gdjY6CiBvIHJlbW92ZSByZWR1bmRhbnQgZmlsZXNpemUgY2hlY2sgaW4g LT5yZWFkCiBvIGNoZWNrIGNvbnNpc3RlbmN5IGluIC0+b3BlbiByZWdhcmRpbmcgdG8gaW5saW5l X2RhdGEKCi0tID44IC0tCkZyb20gNTFjMTIwNjEyZmRiYzRiYzMxNWU5YzRjNmU5MWNhODg4YzNm MzU5NiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKRnJvbTogSmFlZ2V1ayBLaW0gPGphZWdldWtA a2VybmVsLm9yZz4KRGF0ZTogVHVlLCAxNyBOb3YgMjAxNSAxMjo0NToxMyAtMDgwMApTdWJqZWN0 OiBbUEFUQ0hdIEYyRlMgc3VwcG9ydAoKIkYyRlMgKEZsYXNoLUZyaWVuZGx5IEZpbGUgU3lzdGVt KSBpcyBmbGFzaC1mcmllbmRseSBmaWxlIHN5c3RlbSB3aGljaCB3YXMgbWVyZ2VkCmludG8gTGlu dXgga2VybmVsIHYzLjggaW4gMjAxMy4KClRoZSBtb3RpdmUgZm9yIEYyRlMgd2FzIHRvIGJ1aWxk IGEgZmlsZSBzeXN0ZW0gdGhhdCBmcm9tIHRoZSBzdGFydCwgdGFrZXMgaW50bwphY2NvdW50IHRo ZSBjaGFyYWN0ZXJpc3RpY3Mgb2YgTkFORCBmbGFzaCBtZW1vcnktYmFzZWQgc3RvcmFnZSBkZXZp Y2VzIChzdWNoIGFzCnNvbGlkLXN0YXRlIGRpc2tzLCBlTU1DLCBhbmQgU0QgY2FyZHMpLgoKRjJG UyB3YXMgZGVzaWduZWQgb24gYSBiYXNpcyBvZiBhIGxvZy1zdHJ1Y3R1cmVkIGZpbGUgc3lzdGVt IGFwcHJvYWNoLCB3aGljaApyZW1lZGllcyBzb21lIGtub3duIGlzc3VlcyBvZiB0aGUgb2xkZXIg bG9nIHN0cnVjdHVyZWQgZmlsZSBzeXN0ZW1zLCBzdWNoIGFzCnRoZSBzbm93YmFsbCBlZmZlY3Qg b2Ygd2FuZGVyaW5nIHRyZWVzIGFuZCBoaWdoIGNsZWFuaW5nIG92ZXJoZWFkLiBJbiBhZGRpdGlv biwKc2luY2UgYSBOQU5ELWJhc2VkIHN0b3JhZ2UgZGV2aWNlIHNob3dzIGRpZmZlcmVudCBjaGFy YWN0ZXJpc3RpY3MgYWNjb3JkaW5nIHRvCml0cyBpbnRlcm5hbCBnZW9tZXRyeSBvciBmbGFzaCBt ZW1vcnkgbWFuYWdlbWVudCBzY2hlbWUgKHN1Y2ggYXMgdGhlIEZsYXNoClRyYW5zbGF0aW9uIExh eWVyIG9yIEZUTCksIGl0IHN1cHBvcnRzIHZhcmlvdXMgcGFyYW1ldGVycyBub3Qgb25seSBmb3IK Y29uZmlndXJpbmcgb24tZGlzayBsYXlvdXQsIGJ1dCBhbHNvIGZvciBzZWxlY3RpbmcgYWxsb2Nh dGlvbiBhbmQgY2xlYW5pbmcKYWxnb3JpdGhtLiIsIHF1b3RlIGJ5IGh0dHBzOi8vZW4ud2lraXBl ZGlhLm9yZy93aWtpL0YyRlMuCgpUaGUgc291cmNlIGNvZGVzIGZvciBGMkZTIGFyZSBhdmFpbGFi bGUgZnJvbToKCmh0dHA6Ly9naXQua2VybmVsLm9yZy9jZ2l0L2xpbnV4L2tlcm5lbC9naXQvamFl Z2V1ay9mMmZzLmdpdApodHRwOi8vZ2l0Lmtlcm5lbC5vcmcvY2dpdC9saW51eC9rZXJuZWwvZ2l0 L2phZWdldWsvZjJmcy10b29scy5naXQKClNpZ25lZC1vZmYtYnk6IEphZWdldWsgS2ltIDxqYWVn ZXVrQGtlcm5lbC5vcmc+Ci0tLQogTWFrZWZpbGUudXRpbC5kZWYgICAgICAgICAgICB8ICAgIDcg KwogZG9jcy9ncnViLnRleGkgICAgICAgICAgICAgICB8ICAgIDUgKy0KIGdydWItY29yZS9NYWtl ZmlsZS5jb3JlLmRlZiAgfCAgICA1ICsKIGdydWItY29yZS9mcy9mMmZzLmMgICAgICAgICAgfCAx Mjg5ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogcG8vZXhjbHVk ZS5wb3QgICAgICAgICAgICAgICB8ICAgIDEgKwogdGVzdHMvZjJmc190ZXN0LmluICAgICAgICAg ICB8ICAgMTkgKwogdGVzdHMvdXRpbC9ncnViLWZzLXRlc3Rlci5pbiB8ICAgMTAgKy0KIDcgZmls ZXMgY2hhbmdlZCwgMTMzMiBpbnNlcnRpb25zKCspLCA0IGRlbGV0aW9ucygtKQogY3JlYXRlIG1v ZGUgMTAwNjQ0IGdydWItY29yZS9mcy9mMmZzLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCB0ZXN0cy9m MmZzX3Rlc3QuaW4KCmRpZmYgLS1naXQgYS9NYWtlZmlsZS51dGlsLmRlZiBiL01ha2VmaWxlLnV0 aWwuZGVmCmluZGV4IGRiN2U4ZWMuLjg0NjI3YmIgMTAwNjQ0Ci0tLSBhL01ha2VmaWxlLnV0aWwu ZGVmCisrKyBiL01ha2VmaWxlLnV0aWwuZGVmCkBAIC05OSw2ICs5OSw3IEBAIGxpYnJhcnkgPSB7 CiAgIGNvbW1vbiA9IGdydWItY29yZS9mcy9leHQyLmM7CiAgIGNvbW1vbiA9IGdydWItY29yZS9m cy9mYXQuYzsKICAgY29tbW9uID0gZ3J1Yi1jb3JlL2ZzL2V4ZmF0LmM7CisgIGNvbW1vbiA9IGdy dWItY29yZS9mcy9mMmZzLmM7CiAgIGNvbW1vbiA9IGdydWItY29yZS9mcy9mc2hlbHAuYzsKICAg Y29tbW9uID0gZ3J1Yi1jb3JlL2ZzL2hmcy5jOwogICBjb21tb24gPSBncnViLWNvcmUvZnMvaGZz cGx1cy5jOwpAQCAtNzY2LDYgKzc2NywxMiBAQCBzY3JpcHQgPSB7CiAKIHNjcmlwdCA9IHsKICAg dGVzdGNhc2U7CisgIG5hbWUgPSBmMmZzX3Rlc3Q7CisgIGNvbW1vbiA9IHRlc3RzL2YyZnNfdGVz dC5pbjsKK307CisKK3NjcmlwdCA9IHsKKyAgdGVzdGNhc2U7CiAgIG5hbWUgPSBuaWxmczJfdGVz dDsKICAgY29tbW9uID0gdGVzdHMvbmlsZnMyX3Rlc3QuaW47CiB9OwpkaWZmIC0tZ2l0IGEvZG9j cy9ncnViLnRleGkgYi9kb2NzL2dydWIudGV4aQppbmRleCAxZGYzZGIyLi5lNWE4MGYzIDEwMDY0 NAotLS0gYS9kb2NzL2dydWIudGV4aQorKysgYi9kb2NzL2dydWIudGV4aQpAQCAtMzYwLDcgKzM2 MCw4IEBAIGJsb2NrbGlzdCBub3RhdGlvbi4gVGhlIGN1cnJlbnRseSBzdXBwb3J0ZWQgZmlsZXN5 c3RlbSB0eXBlcyBhcmUgQGRmbntBbWlnYQogRmFzdCBGaWxlU3lzdGVtIChBRkZTKX0sIEBkZm57 QXRoZU9TIGZzfSwgQGRmbntCZUZTfSwKIEBkZm57QnRyRlN9IChpbmNsdWRpbmcgcmFpZDAsIHJh aWQxLCByYWlkMTAsIGd6aXAgYW5kIGx6byksCiBAZGZue2NwaW99IChsaXR0bGUtIGFuZCBiaWct ZW5kaWFuIGJpbiwgb2RjIGFuZCBuZXdjIHZhcmlhbnRzKSwKLUBkZm57TGludXggZXh0Mi9leHQz L2V4dDR9LCBAZGZue0RPUyBGQVQxMi9GQVQxNi9GQVQzMn0sIEBkZm57ZXhGQVR9LCBAZGZue0hG U30sCitAZGZue0xpbnV4IGV4dDIvZXh0My9leHQ0fSwgQGRmbntET1MgRkFUMTIvRkFUMTYvRkFU MzJ9LCBAZGZue2V4RkFUfSwKK0BkZm57ZjJmc30sIEBkZm57SEZTfSwKIEBkZm57SEZTK30sIEBk Zm57SVNPOTY2MH0gKGluY2x1ZGluZyBKb2xpZXQsIFJvY2stcmlkZ2UgYW5kIG11bHRpLWNodW5r IGZpbGVzKSwKIEBkZm57SkZTfSwgQGRmbntNaW5peCBmc30gKHZlcnNpb25zIDEsIDIgYW5kIDMp LCBAZGZue25pbGZzMn0sCiBAZGZue05URlN9IChpbmNsdWRpbmcgY29tcHJlc3Npb24pLCBAZGZu e1JlaXNlckZTfSwgQGRmbntST01GU30sCkBAIC01MzQ3LDcgKzUzNDgsNyBAQCBOVEZTLCBKRlMs IFVERiwgSEZTKywgZXhGQVQsIGxvbmcgZmlsZW5hbWVzIGluIEZBVCwgSm9saWV0IHBhcnQgb2YK IElTTzk2NjAgYXJlIHRyZWF0ZWQgYXMgVVRGLTE2IGFzIHBlciBzcGVjaWZpY2F0aW9uLiBBRlMg YW5kIEJGUyBhcmUgcmVhZAogYXMgVVRGLTgsIGFnYWluIGFjY29yZGluZyB0byBzcGVjaWZpY2F0 aW9uLiBCdHJGUywgY3BpbywgdGFyLCBzcXVhc2g0LCBtaW5peCwKIG1pbml4MiwgbWluaXgzLCBS T01GUywgUmVpc2VyRlMsIFhGUywgZXh0MiwgZXh0MywgZXh0NCwgRkFUIChzaG9ydCBuYW1lcyks Ci1Sb2NrUmlkZ2UgcGFydCBvZiBJU085NjYwLCBuaWxmczIsIFVGUzEsIFVGUzIgYW5kIFpGUyBh cmUgYXNzdW1lZAorZjJmcywgUm9ja1JpZGdlIHBhcnQgb2YgSVNPOTY2MCwgbmlsZnMyLCBVRlMx LCBVRlMyIGFuZCBaRlMgYXJlIGFzc3VtZWQKIHRvIGJlIFVURi04LiBUaGlzIG1pZ2h0IGJlIGZh bHNlIG9uIHN5c3RlbXMgY29uZmlndXJlZCB3aXRoIGxlZ2FjeSBjaGFyc2V0CiBidXQgYXMgbG9u ZyBhcyB0aGUgY2hhcnNldCB1c2VkIGlzIHN1cGVyc2V0IG9mIEFTQ0lJIHlvdSBzaG91bGQgYmUg YWJsZSB0bwogYWNjZXNzIEFTQ0lJLW5hbWVkIGZpbGVzLiBBbmQgaXQncyByZWNvbW1lbmRlZCB0 byBjb25maWd1cmUgeW91ciBzeXN0ZW0gdG8gdXNlCmRpZmYgLS1naXQgYS9ncnViLWNvcmUvTWFr ZWZpbGUuY29yZS5kZWYgYi9ncnViLWNvcmUvTWFrZWZpbGUuY29yZS5kZWYKaW5kZXggZDlmYTBl My4uYjU4NWFkZSAxMDA2NDQKLS0tIGEvZ3J1Yi1jb3JlL01ha2VmaWxlLmNvcmUuZGVmCisrKyBi L2dydWItY29yZS9NYWtlZmlsZS5jb3JlLmRlZgpAQCAtMTI3OCw2ICsxMjc4LDExIEBAIG1vZHVs ZSA9IHsKIH07CiAKIG1vZHVsZSA9IHsKKyAgbmFtZSA9IGYyZnM7CisgIGNvbW1vbiA9IGZzL2Yy ZnMuYzsKK307CisKK21vZHVsZSA9IHsKICAgbmFtZSA9IGZzaGVscDsKICAgY29tbW9uID0gZnMv ZnNoZWxwLmM7CiB9OwpkaWZmIC0tZ2l0IGEvZ3J1Yi1jb3JlL2ZzL2YyZnMuYyBiL2dydWItY29y ZS9mcy9mMmZzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2IzMTJiMwot LS0gL2Rldi9udWxsCisrKyBiL2dydWItY29yZS9mcy9mMmZzLmMKQEAgLTAsMCArMSwxMjg5IEBA CisvKgorICogIGYyZnMuYyAtIEZsYXNoLUZyaWVuZGx5IEZpbGUgU3lzdGVtCisgKgorICogIFdy aXR0ZW4gYnkgSmFlZ2V1ayBLaW0gPGphZWdldWtAa2VybmVsLm9yZz4KKyAqCisgKiAgQ29weXJp Z2h0IChDKSAyMDE1ICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAqCisgKiAgR1JV QiBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5 CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5z ZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRo ZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorICogIChhdCB5b3VyIG9wdGlvbikgYW55 IGxhdGVyIHZlcnNpb24uCisgKgorICogIEdSVUIgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBv ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICBHTlUgR2Vu ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxk IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQor ICogIGFsb25nIHdpdGggR1JVQi4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGlj ZW5zZXMvPi4KKyAqLworI2luY2x1ZGUgPGdydWIvZXJyLmg+CisjaW5jbHVkZSA8Z3J1Yi9maWxl Lmg+CisjaW5jbHVkZSA8Z3J1Yi9tbS5oPgorI2luY2x1ZGUgPGdydWIvbWlzYy5oPgorI2luY2x1 ZGUgPGdydWIvZGlzay5oPgorI2luY2x1ZGUgPGdydWIvZGwuaD4KKyNpbmNsdWRlIDxncnViL3R5 cGVzLmg+CisjaW5jbHVkZSA8Z3J1Yi9jaGFyc2V0Lmg+CisjaW5jbHVkZSA8Z3J1Yi9mc2hlbHAu aD4KKworR1JVQl9NT0RfTElDRU5TRSAoIkdQTHYzKyIpOworCisvKiBGMkZTIE1hZ2ljIE51bWJl ciAqLworI2RlZmluZSBGMkZTX1NVUEVSX01BR0lDCTB4RjJGNTIwMTAKKyNkZWZpbmUgQ0hFQ0tT VU1fT0ZGU0VUCQk0MDkyCQkvKiBtdXN0IGJlIGFsaWduZWQgNCBieXRlcyAqLworI2RlZmluZSBV MzJfQ0hFQ0tTVU1fT0ZGU0VUCShDSEVDS1NVTV9PRkZTRVQgPj4gMikKKworLyogYnl0ZS1zaXpl IG9mZnNldCAqLworI2RlZmluZSBGMkZTX1NVUEVSX09GRlNFVAkoKGdydWJfZGlza19hZGRyX3Qp MTAyNCkKKyNkZWZpbmUgRjJGU19TVVBFUl9PRkZTRVQwCShGMkZTX1NVUEVSX09GRlNFVCA+PiBH UlVCX0RJU0tfU0VDVE9SX0JJVFMpCisjZGVmaW5lIEYyRlNfU1VQRVJfT0ZGU0VUMQkoKEYyRlNf U1VQRVJfT0ZGU0VUICsgRjJGU19CTEtTSVpFKSA+PglcCisJCQkJCQlHUlVCX0RJU0tfU0VDVE9S X0JJVFMpCisKKy8qIDkgYml0cyBmb3IgNTEyIGJ5dGVzICovCisjZGVmaW5lIEYyRlNfTUlOX0xP R19TRUNUT1JfU0laRQk5CisKKy8qIHN1cHBvcnQgb25seSA0S0IgYmxvY2sgKi8KKyNkZWZpbmUg RjJGU19CTEtfQklUUwkxMgorI2RlZmluZSBGMkZTX0JMS1NJWkUJKDEgPDwgRjJGU19CTEtfQklU UykKKyNkZWZpbmUgRjJGU19CTEtfU0VDX0JJVFMJKEYyRlNfQkxLX0JJVFMgLSBHUlVCX0RJU0tf U0VDVE9SX0JJVFMpCisKKyNkZWZpbmUgVkVSU0lPTl9MRU4JMjU2CisjZGVmaW5lIEYyRlNfTUFY X0VYVEVOU0lPTgk2NAorCisjZGVmaW5lIENQX0NPTVBBQ1RfU1VNX0ZMQUcJMHgwMDAwMDAwNAor I2RlZmluZSBDUF9VTU9VTlRfRkxBRwkweDAwMDAwMDAxCisKKyNkZWZpbmUgTUFYX0FDVElWRV9M T0dTCTE2CisjZGVmaW5lIE1BWF9BQ1RJVkVfTk9ERV9MT0dTCTgKKyNkZWZpbmUgTUFYX0FDVElW RV9EQVRBX0xPR1MJOAorI2RlZmluZQlOUl9DVVJTRUdfREFUQV9UWVBFCTMKKyNkZWZpbmUgTlJf Q1VSU0VHX05PREVfVFlQRQkzCisjZGVmaW5lIE5SX0NVUlNFR19UWVBFCShOUl9DVVJTRUdfREFU QV9UWVBFICsgTlJfQ1VSU0VHX05PREVfVFlQRSkKKworI2RlZmluZSBFTlRSSUVTX0lOX1NVTQk1 MTIKKyNkZWZpbmUJU1VNTUFSWV9TSVpFCTcKKyNkZWZpbmUJU1VNX0ZPT1RFUl9TSVpFCTUKKyNk ZWZpbmUgSkVOVFJZX1NJWkUJKHNpemVvZihzdHJ1Y3QgZ3J1Yl9mMmZzX25hdF9qZW50KSkKKyNk ZWZpbmUgU1VNX0VOVFJJRVNfU0laRQkoU1VNTUFSWV9TSVpFICogRU5UUklFU19JTl9TVU0pCisj ZGVmaW5lIFNVTV9KT1VSTkFMX1NJWkUJKEYyRlNfQkxLU0laRSAtIFNVTV9GT09URVJfU0laRSAt XAorCQkJCVNVTV9FTlRSSUVTX1NJWkUpCisjZGVmaW5lIE5BVF9KT1VSTkFMX0VOVFJJRVMJKChT VU1fSk9VUk5BTF9TSVpFIC0gMikgLyBKRU5UUllfU0laRSkKKyNkZWZpbmUgTkFUX0pPVVJOQUxf UkVTRVJWRUQJKChTVU1fSk9VUk5BTF9TSVpFIC0gMikgJSBKRU5UUllfU0laRSkKKworI2RlZmlu ZSBOQVRfRU5UUllfU0laRSAoc2l6ZW9mKHN0cnVjdCBncnViX2YyZnNfbmF0X2VudHJ5KSkKKyNk ZWZpbmUgTkFUX0VOVFJZX1BFUl9CTE9DSyAoRjJGU19CTEtTSVpFIC8gTkFUX0VOVFJZX1NJWkUp CisKKyNkZWZpbmUgRjJGU19OQU1FX0xFTgkyNTUKKyNkZWZpbmUgRjJGU19TTE9UX0xFTgk4Cisj ZGVmaW5lIE5SX0RFTlRSWV9JTl9CTE9DSwkyMTQKKyNkZWZpbmUgU0laRV9PRl9ESVJfRU5UUlkJ MTEJLyogYnkgYnl0ZSAqLworI2RlZmluZSBCSVRTX1BFUl9CWVRFCTgKKyNkZWZpbmUgU0laRV9P Rl9ERU5UUllfQklUTUFQCSgoTlJfREVOVFJZX0lOX0JMT0NLICsgQklUU19QRVJfQllURSAtIDEp IC8gXAorCQkJCUJJVFNfUEVSX0JZVEUpCisjZGVmaW5lIFNJWkVfT0ZfUkVTRVJWRUQJKEYyRlNf QkxLU0laRSAtICgoU0laRV9PRl9ESVJfRU5UUlkgKyBcCisJCQkJRjJGU19TTE9UX0xFTikgKiBc CisJCQkJTlJfREVOVFJZX0lOX0JMT0NLICsgU0laRV9PRl9ERU5UUllfQklUTUFQKSkKKworI2Rl ZmluZSBGMkZTX0lOTElORV9YQVRUUl9BRERSUwk1MAkvKiAyMDAgYnl0ZXMgZm9yIGlubGluZSB4 YXR0cnMgKi8KKyNkZWZpbmUgREVGX0FERFJTX1BFUl9JTk9ERQk5MjMJLyogQWRkcmVzcyBQb2lu dGVycyBpbiBhbiBJbm9kZSAqLworCisjZGVmaW5lIEFERFJTX1BFUl9CTE9DSwkxMDE4CS8qIEFk ZHJlc3MgUG9pbnRlcnMgaW4gYSBEaXJlY3QgQmxvY2sgKi8KKyNkZWZpbmUgTklEU19QRVJfQkxP Q0sJMTAxOAkvKiBOb2RlIElEcyBpbiBhbiBJbmRpcmVjdCBCbG9jayAqLworI2RlZmluZQlOT0RF X0RJUjFfQkxPQ0sJKERFRl9BRERSU19QRVJfSU5PREUgKyAxKQorI2RlZmluZQlOT0RFX0RJUjJf QkxPQ0sJKERFRl9BRERSU19QRVJfSU5PREUgKyAyKQorI2RlZmluZQlOT0RFX0lORDFfQkxPQ0sJ KERFRl9BRERSU19QRVJfSU5PREUgKyAzKQorI2RlZmluZQlOT0RFX0lORDJfQkxPQ0sJKERFRl9B RERSU19QRVJfSU5PREUgKyA0KQorI2RlZmluZQlOT0RFX0RJTkRfQkxPQ0sJKERFRl9BRERSU19Q RVJfSU5PREUgKyA1KQorCisjZGVmaW5lIE1BWF9JTkxJTkVfREFUQQkoNCAqIChERUZfQUREUlNf UEVSX0lOT0RFIC0gXAorCQkJRjJGU19JTkxJTkVfWEFUVFJfQUREUlMgLSAxKSkKKyNkZWZpbmUg TlJfSU5MSU5FX0RFTlRSWQkoTUFYX0lOTElORV9EQVRBICogQklUU19QRVJfQllURSAvIFwKKwkJ CSgoU0laRV9PRl9ESVJfRU5UUlkgKyBGMkZTX1NMT1RfTEVOKSAqIFwKKwkJCSBCSVRTX1BFUl9C WVRFICsgMSkpCisjZGVmaW5lIElOTElORV9ERU5UUllfQklUTUFQX1NJWkUJKChOUl9JTkxJTkVf REVOVFJZICsgXAorCQkJQklUU19QRVJfQllURSAtIDEpIC8gQklUU19QRVJfQllURSkKKyNkZWZp bmUgSU5MSU5FX1JFU0VSVkVEX1NJWkUJKE1BWF9JTkxJTkVfREFUQSAtIFwKKwkJCSgoU0laRV9P Rl9ESVJfRU5UUlkgKyBGMkZTX1NMT1RfTEVOKSAqIFwKKwkJCSBOUl9JTkxJTkVfREVOVFJZICsg SU5MSU5FX0RFTlRSWV9CSVRNQVBfU0laRSkpCisjZGVmaW5lIENVUlNFR19IT1RfREFUQQkwCisK KyNkZWZpbmUgQ0tQVF9GTEFHX1NFVChja3B0LCBmKQlcCisJCShja3B0KS0+Y2twdF9mbGFncyAm IGdydWJfY3B1X3RvX2xlMzJfY29tcGlsZV90aW1lIChmKQorCisjZGVmaW5lIEYyRlNfSU5MSU5F X1hBVFRSCTB4MDEJLyogZmlsZSBpbmxpbmUgeGF0dHIgZmxhZyAqLworI2RlZmluZSBGMkZTX0lO TElORV9EQVRBCTB4MDIJLyogZmlsZSBpbmxpbmUgZGF0YSBmbGFnICovCisjZGVmaW5lIEYyRlNf SU5MSU5FX0RFTlRSWQkweDA0CS8qIGZpbGUgaW5saW5lIGRlbnRyeSBmbGFnICovCisjZGVmaW5l IEYyRlNfREFUQV9FWElTVAkJMHgwOAkvKiBmaWxlIGlubGluZSBkYXRhIGV4aXN0IGZsYWcgKi8K KyNkZWZpbmUgRjJGU19JTkxJTkVfRE9UUwkweDEwCS8qIGZpbGUgaGF2aW5nIGltcGxpY2l0IGRv dCBkZW50cmllcyAqLworCitlbnVtIEZJTEVfVFlQRQoreworICBGMkZTX0ZUX1VOS05PV04sCisg IEYyRlNfRlRfUkVHX0ZJTEUgPSAxLAorICBGMkZTX0ZUX0RJUiA9IDIsCisgIEYyRlNfRlRfU1lN TElOSyA9IDcsCit9OworCisjZGVmaW5lIE1BWF9WT0xVTUVfTkFNRQkJNTEyCisKK3N0cnVjdCBn cnViX2YyZnNfc3VwZXJibG9jaworeworICBncnViX3VpbnQzMl90IG1hZ2ljOworICBncnViX3Vp bnQxNl90IGR1bW15MVsyXTsKKyAgZ3J1Yl91aW50MzJfdCBsb2dfc2VjdG9yc2l6ZTsKKyAgZ3J1 Yl91aW50MzJfdCBsb2dfc2VjdG9yc19wZXJfYmxvY2s7CisgIGdydWJfdWludDMyX3QgbG9nX2Js b2Nrc2l6ZTsKKyAgZ3J1Yl91aW50MzJfdCBsb2dfYmxvY2tzX3Blcl9zZWc7CisgIGdydWJfdWlu dDMyX3Qgc2Vnc19wZXJfc2VjOworICBncnViX3VpbnQzMl90IHNlY3NfcGVyX3pvbmU7CisgIGdy dWJfdWludDMyX3QgY2hlY2tzdW1fb2Zmc2V0OworICBncnViX3VpbnQ4X3QgZHVtbXkyWzQwXTsK KyAgZ3J1Yl91aW50MzJfdCBjcF9ibGthZGRyOworICBncnViX3VpbnQzMl90IHNpdF9ibGthZGRy OworICBncnViX3VpbnQzMl90IG5hdF9ibGthZGRyOworICBncnViX3VpbnQzMl90IHNzYV9ibGth ZGRyOworICBncnViX3VpbnQzMl90IG1haW5fYmxrYWRkcjsKKyAgZ3J1Yl91aW50MzJfdCByb290 X2lubzsKKyAgZ3J1Yl91aW50MzJfdCBub2RlX2lubzsKKyAgZ3J1Yl91aW50MzJfdCBtZXRhX2lu bzsKKyAgZ3J1Yl91aW50OF90IHV1aWRbMTZdOworICBncnViX3VpbnQxNl90IHZvbHVtZV9uYW1l W01BWF9WT0xVTUVfTkFNRV07CisgIGdydWJfdWludDMyX3QgZXh0ZW5zaW9uX2NvdW50OworICBn cnViX3VpbnQ4X3QgZXh0ZW5zaW9uX2xpc3RbRjJGU19NQVhfRVhURU5TSU9OXVs4XTsKKyAgZ3J1 Yl91aW50MzJfdCBjcF9wYXlsb2FkOworICBncnViX3VpbnQ4X3QgdmVyc2lvbltWRVJTSU9OX0xF Tl07CisgIGdydWJfdWludDhfdCBpbml0X3ZlcnNpb25bVkVSU0lPTl9MRU5dOworfSBHUlVCX1BB Q0tFRDsKKworc3RydWN0IGdydWJfZjJmc19jaGVja3BvaW50Cit7CisgIGdydWJfdWludDY0X3Qg Y2hlY2twb2ludF92ZXI7CisgIGdydWJfdWludDY0X3QgdXNlcl9ibG9ja19jb3VudDsKKyAgZ3J1 Yl91aW50NjRfdCB2YWxpZF9ibG9ja19jb3VudDsKKyAgZ3J1Yl91aW50MzJfdCByc3ZkX3NlZ21l bnRfY291bnQ7CisgIGdydWJfdWludDMyX3Qgb3ZlcnByb3Zfc2VnbWVudF9jb3VudDsKKyAgZ3J1 Yl91aW50MzJfdCBmcmVlX3NlZ21lbnRfY291bnQ7CisgIGdydWJfdWludDMyX3QgY3VyX25vZGVf c2Vnbm9bTUFYX0FDVElWRV9OT0RFX0xPR1NdOworICBncnViX3VpbnQxNl90IGN1cl9ub2RlX2Js a29mZltNQVhfQUNUSVZFX05PREVfTE9HU107CisgIGdydWJfdWludDMyX3QgY3VyX2RhdGFfc2Vn bm9bTUFYX0FDVElWRV9EQVRBX0xPR1NdOworICBncnViX3VpbnQxNl90IGN1cl9kYXRhX2Jsa29m ZltNQVhfQUNUSVZFX0RBVEFfTE9HU107CisgIGdydWJfdWludDMyX3QgY2twdF9mbGFnczsKKyAg Z3J1Yl91aW50MzJfdCBjcF9wYWNrX3RvdGFsX2Jsb2NrX2NvdW50OworICBncnViX3VpbnQzMl90 IGNwX3BhY2tfc3RhcnRfc3VtOworICBncnViX3VpbnQzMl90IHZhbGlkX25vZGVfY291bnQ7Cisg IGdydWJfdWludDMyX3QgdmFsaWRfaW5vZGVfY291bnQ7CisgIGdydWJfdWludDMyX3QgbmV4dF9m cmVlX25pZDsKKyAgZ3J1Yl91aW50MzJfdCBzaXRfdmVyX2JpdG1hcF9ieXRlc2l6ZTsKKyAgZ3J1 Yl91aW50MzJfdCBuYXRfdmVyX2JpdG1hcF9ieXRlc2l6ZTsKKyAgZ3J1Yl91aW50MzJfdCBjaGVj a3N1bV9vZmZzZXQ7CisgIGdydWJfdWludDY0X3QgZWxhcHNlZF90aW1lOworICBncnViX3VpbnQ4 X3QgYWxsb2NfdHlwZVtNQVhfQUNUSVZFX0xPR1NdOworICBncnViX3VpbnQ4X3Qgc2l0X25hdF92 ZXJzaW9uX2JpdG1hcFszOTAwXTsKKyAgZ3J1Yl91aW50MzJfdCBjaGVja3N1bTsKK30gR1JVQl9Q QUNLRUQ7CisKK3N0cnVjdCBncnViX2YyZnNfbmF0X2VudHJ5IHsKKyAgZ3J1Yl91aW50OF90IHZl cnNpb247CisgIGdydWJfdWludDMyX3QgaW5vOworICBncnViX3VpbnQzMl90IGJsb2NrX2FkZHI7 Cit9IEdSVUJfUEFDS0VEOworCitzdHJ1Y3QgZ3J1Yl9mMmZzX25hdF9qZW50Cit7CisgIGdydWJf dWludDMyX3QgbmlkOworICBzdHJ1Y3QgZ3J1Yl9mMmZzX25hdF9lbnRyeSBuZTsKK30gR1JVQl9Q QUNLRUQ7CisKK3N0cnVjdCBncnViX2YyZnNfbmF0X2pvdXJuYWwgeworICBncnViX3VpbnQxNl90 IG5fbmF0czsKKyAgc3RydWN0IGdydWJfZjJmc19uYXRfamVudCBlbnRyaWVzW05BVF9KT1VSTkFM X0VOVFJJRVNdOworICBncnViX3VpbnQ4X3QgcmVzZXJ2ZWRbTkFUX0pPVVJOQUxfUkVTRVJWRURd OworfSBHUlVCX1BBQ0tFRDsKKworc3RydWN0IGdydWJfZjJmc19uYXRfYmxvY2sgeworICBzdHJ1 Y3QgZ3J1Yl9mMmZzX25hdF9lbnRyeSBuZVtOQVRfRU5UUllfUEVSX0JMT0NLXTsKK30gR1JVQl9Q QUNLRUQ7CisKK3N0cnVjdCBncnViX2YyZnNfZGlyX2VudHJ5Cit7CisgIGdydWJfdWludDMyX3Qg aGFzaF9jb2RlOworICBncnViX3VpbnQzMl90IGlubzsKKyAgZ3J1Yl91aW50MTZfdCBuYW1lX2xl bjsKKyAgZ3J1Yl91aW50OF90IGZpbGVfdHlwZTsKK30gR1JVQl9QQUNLRUQ7CisKK3N0cnVjdCBn cnViX2YyZnNfaW5saW5lX2RlbnRyeQoreworICBncnViX3VpbnQ4X3QgZGVudHJ5X2JpdG1hcFtJ TkxJTkVfREVOVFJZX0JJVE1BUF9TSVpFXTsKKyAgZ3J1Yl91aW50OF90IHJlc2VydmVkW0lOTElO RV9SRVNFUlZFRF9TSVpFXTsKKyAgc3RydWN0IGdydWJfZjJmc19kaXJfZW50cnkgZGVudHJ5W05S X0lOTElORV9ERU5UUlldOworICBncnViX3VpbnQ4X3QgZmlsZW5hbWVbTlJfSU5MSU5FX0RFTlRS WV1bRjJGU19TTE9UX0xFTl07Cit9IEdSVUJfUEFDS0VEOworCitzdHJ1Y3QgZ3J1Yl9mMmZzX2Rl bnRyeV9ibG9jayB7CisgIGdydWJfdWludDhfdCBkZW50cnlfYml0bWFwW1NJWkVfT0ZfREVOVFJZ X0JJVE1BUF07CisgIGdydWJfdWludDhfdCByZXNlcnZlZFtTSVpFX09GX1JFU0VSVkVEXTsKKyAg c3RydWN0IGdydWJfZjJmc19kaXJfZW50cnkgZGVudHJ5W05SX0RFTlRSWV9JTl9CTE9DS107Cisg IGdydWJfdWludDhfdCBmaWxlbmFtZVtOUl9ERU5UUllfSU5fQkxPQ0tdW0YyRlNfU0xPVF9MRU5d OworfSBHUlVCX1BBQ0tFRDsKKworc3RydWN0IGdydWJfZjJmc19pbm9kZQoreworICBncnViX3Vp bnQxNl90IGlfbW9kZTsKKyAgZ3J1Yl91aW50OF90IGlfYWR2aXNlOworICBncnViX3VpbnQ4X3Qg aV9pbmxpbmU7CisgIGdydWJfdWludDMyX3QgaV91aWQ7CisgIGdydWJfdWludDMyX3QgaV9naWQ7 CisgIGdydWJfdWludDMyX3QgaV9saW5rczsKKyAgZ3J1Yl91aW50NjRfdCBpX3NpemU7CisgIGdy dWJfdWludDY0X3QgaV9ibG9ja3M7CisgIGdydWJfdWludDY0X3QgaV9hdGltZTsKKyAgZ3J1Yl91 aW50NjRfdCBpX2N0aW1lOworICBncnViX3VpbnQ2NF90IGlfbXRpbWU7CisgIGdydWJfdWludDMy X3QgaV9hdGltZV9uc2VjOworICBncnViX3VpbnQzMl90IGlfY3RpbWVfbnNlYzsKKyAgZ3J1Yl91 aW50MzJfdCBpX210aW1lX25zZWM7CisgIGdydWJfdWludDMyX3QgaV9nZW5lcmF0aW9uOworICBn cnViX3VpbnQzMl90IGlfY3VycmVudF9kZXB0aDsKKyAgZ3J1Yl91aW50MzJfdCBpX3hhdHRyX25p ZDsKKyAgZ3J1Yl91aW50MzJfdCBpX2ZsYWdzOworICBncnViX3VpbnQzMl90IGlfcGlubzsKKyAg Z3J1Yl91aW50MzJfdCBpX25hbWVsZW47CisgIGdydWJfdWludDhfdCBpX25hbWVbRjJGU19OQU1F X0xFTl07CisgIGdydWJfdWludDhfdCBpX2Rpcl9sZXZlbDsKKyAgZ3J1Yl91aW50OF90IGlfZXh0 WzEyXTsKKyAgZ3J1Yl91aW50MzJfdCBpX2FkZHJbREVGX0FERFJTX1BFUl9JTk9ERV07CisgIGdy dWJfdWludDMyX3QgaV9uaWRbNV07Cit9IEdSVUJfUEFDS0VEOworCitzdHJ1Y3QgZ3J1Yl9kaXJl Y3Rfbm9kZSB7CisgIGdydWJfdWludDMyX3QgYWRkcltBRERSU19QRVJfQkxPQ0tdOworfSBHUlVC X1BBQ0tFRDsKKworc3RydWN0IGdydWJfaW5kaXJlY3Rfbm9kZSB7CisgIGdydWJfdWludDMyX3Qg bmlkW05JRFNfUEVSX0JMT0NLXTsKK30gR1JVQl9QQUNLRUQ7CisKK3N0cnVjdCBncnViX2YyZnNf bm9kZQoreworICB1bmlvbgorICB7CisgICAgc3RydWN0IGdydWJfZjJmc19pbm9kZSBpOworICAg IHN0cnVjdCBncnViX2RpcmVjdF9ub2RlIGRuOworICAgIHN0cnVjdCBncnViX2luZGlyZWN0X25v ZGUgaW47CisgICAgY2hhciBidWZbRjJGU19CTEtTSVpFIC0gNDBdOwkvKiBTaG91bGQgb2NjdXB5 IEYyRlNfQkxLU0laRSB0b3RhbGx5ICovCisgIH07CisgIGdydWJfdWludDhfdCBkdW1teVs0MF07 Cit9IEdSVUJfUEFDS0VEOworCitzdHJ1Y3QgZ3J1Yl9mc2hlbHBfbm9kZQoreworICBzdHJ1Y3Qg Z3J1Yl9mMmZzX2RhdGEgKmRhdGE7CisgIHN0cnVjdCBncnViX2YyZnNfbm9kZSBpbm9kZTsKKyAg Z3J1Yl91aW50MzJfdCBpbm87CisgIGludCBpbm9kZV9yZWFkOworfTsKKworc3RydWN0IGdydWJf ZjJmc19kYXRhCit7CisgIHN0cnVjdCBncnViX2YyZnNfc3VwZXJibG9jayBzYmxvY2s7CisgIHN0 cnVjdCBncnViX2YyZnNfY2hlY2twb2ludCBja3B0OworCisgIGdydWJfdWludDMyX3Qgcm9vdF9p bm87CisgIGdydWJfdWludDMyX3QgYmxvY2tzX3Blcl9zZWc7CisgIGdydWJfdWludDMyX3QgY3Bf YmxrYWRkcjsKKyAgZ3J1Yl91aW50MzJfdCBuYXRfYmxrYWRkcjsKKworICBzdHJ1Y3QgZ3J1Yl9m MmZzX25hdF9qb3VybmFsIG5hdF9qOworICBjaGFyICpuYXRfYml0bWFwOworCisgIGdydWJfZGlz a190IGRpc2s7CisgIHN0cnVjdCBncnViX2YyZnNfbm9kZSAqaW5vZGU7CisgIHN0cnVjdCBncnVi X2ZzaGVscF9ub2RlIGRpcm9wZW47Cit9OworCitzdHJ1Y3QgZ3J1Yl9mMmZzX2Rpcl9pdGVyX2N0 eAoreworICBzdHJ1Y3QgZ3J1Yl9mMmZzX2RhdGEgKmRhdGE7CisgIGdydWJfZnNoZWxwX2l0ZXJh dGVfZGlyX2hvb2tfdCBob29rOworICB2b2lkICpob29rX2RhdGE7CisgIGdydWJfdWludDhfdCAq Yml0bWFwOworICBncnViX3VpbnQ4X3QgKCpmaWxlbmFtZSlbRjJGU19TTE9UX0xFTl07CisgIHN0 cnVjdCBncnViX2YyZnNfZGlyX2VudHJ5ICpkZW50cnk7CisgIGludCBtYXg7Cit9OworCitzdHJ1 Y3QgZ3J1Yl9mMmZzX2Rpcl9jdHgKK3sKKyAgZ3J1Yl9mc19kaXJfaG9va190IGhvb2s7CisgIHZv aWQgKmhvb2tfZGF0YTsKKyAgc3RydWN0IGdydWJfZjJmc19kYXRhICpkYXRhOworfTsKKworc3Rh dGljIGdydWJfZGxfdCBteV9tb2Q7CisKK3N0YXRpYyBpbmxpbmUgaW50CitncnViX2YyZnNfdGVz dF9iaXRfbGUgKGludCBuciwgY29uc3QgZ3J1Yl91aW50OF90ICphZGRyKQoreworICByZXR1cm4g YWRkcltuciA+PiAzXSAmICgxIDw8IChuciAmIDcpKTsKK30KKworc3RhdGljIGlubGluZSBjaGFy ICoKK19faW5saW5lX2FkZHIgKHN0cnVjdCBncnViX2YyZnNfaW5vZGUgKmlub2RlKQoreworICBy ZXR1cm4gKGNoYXIgKikmaW5vZGUtPmlfYWRkclsxXTsKK30KKworc3RhdGljIGlubGluZSBncnVi X3VpbnQ2NF90CitncnViX2YyZnNfZmlsZV9zaXplIChzdHJ1Y3QgZ3J1Yl9mMmZzX2lub2RlICpp bm9kZSkKK3sKKyAgcmV0dXJuIGdydWJfbGVfdG9fY3B1NjQgKGlub2RlLT5pX3NpemUpOworfQor CitzdGF0aWMgaW5saW5lIGdydWJfdWludDMyX3QKK19fc3RhcnRfY3BfYWRkciAoc3RydWN0IGdy dWJfZjJmc19kYXRhICpkYXRhKQoreworICBzdHJ1Y3QgZ3J1Yl9mMmZzX2NoZWNrcG9pbnQgKmNr cHQgPSAmZGF0YS0+Y2twdDsKKyAgZ3J1Yl91aW50MzJfdCBzdGFydF9hZGRyID0gZGF0YS0+Y3Bf YmxrYWRkcjsKKworICBpZiAoIShja3B0LT5jaGVja3BvaW50X3ZlciAmIGdydWJfY3B1X3RvX2xl NjRfY29tcGlsZV90aW1lKDEpKSkKKyAgICByZXR1cm4gc3RhcnRfYWRkciArIGRhdGEtPmJsb2Nr c19wZXJfc2VnOworICByZXR1cm4gc3RhcnRfYWRkcjsKK30KKworc3RhdGljIGlubGluZSBncnVi X3VpbnQzMl90CitfX3N0YXJ0X3N1bV9ibG9jayAoc3RydWN0IGdydWJfZjJmc19kYXRhICpkYXRh KQoreworICBzdHJ1Y3QgZ3J1Yl9mMmZzX2NoZWNrcG9pbnQgKmNrcHQgPSAmZGF0YS0+Y2twdDsK KworICByZXR1cm4gX19zdGFydF9jcF9hZGRyIChkYXRhKSArIGdydWJfbGVfdG9fY3B1MzIgKGNr cHQtPmNwX3BhY2tfc3RhcnRfc3VtKTsKK30KKworc3RhdGljIGlubGluZSBncnViX3VpbnQzMl90 CitfX3N1bV9ibGtfYWRkciAoc3RydWN0IGdydWJfZjJmc19kYXRhICpkYXRhLCBpbnQgYmFzZSwg aW50IHR5cGUpCit7CisgIHN0cnVjdCBncnViX2YyZnNfY2hlY2twb2ludCAqY2twdCA9ICZkYXRh LT5ja3B0OworCisgIHJldHVybiBfX3N0YXJ0X2NwX2FkZHIgKGRhdGEpICsKKwlncnViX2xlX3Rv X2NwdTMyIChja3B0LT5jcF9wYWNrX3RvdGFsX2Jsb2NrX2NvdW50KQorCS0gKGJhc2UgKyAxKSAr IHR5cGU7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCAqCitfX25hdF9iaXRtYXBfcHRyIChzdHJ1 Y3QgZ3J1Yl9mMmZzX2RhdGEgKmRhdGEpCit7CisgIHN0cnVjdCBncnViX2YyZnNfY2hlY2twb2lu dCAqY2twdCA9ICZkYXRhLT5ja3B0OworICBncnViX3VpbnQzMl90IG9mZnNldDsKKworICBpZiAo Z3J1Yl9sZV90b19jcHUzMiAoZGF0YS0+c2Jsb2NrLmNwX3BheWxvYWQpID4gMCkKKyAgICByZXR1 cm4gY2twdC0+c2l0X25hdF92ZXJzaW9uX2JpdG1hcDsKKworICBvZmZzZXQgPSBncnViX2xlX3Rv X2NwdTMyIChja3B0LT5zaXRfdmVyX2JpdG1hcF9ieXRlc2l6ZSk7CisgIHJldHVybiBja3B0LT5z aXRfbmF0X3ZlcnNpb25fYml0bWFwICsgb2Zmc2V0OworfQorCitzdGF0aWMgaW5saW5lIGdydWJf dWludDMyX3QKK19fZ2V0X25vZGVfaWQgKHN0cnVjdCBncnViX2YyZnNfbm9kZSAqcm4sIGludCBv ZmYsIGludCBpbm9kZV9ibG9jaykKK3sKKyAgaWYgKGlub2RlX2Jsb2NrKQorICAgIHJldHVybiBn cnViX2xlX3RvX2NwdTMyIChybi0+aS5pX25pZFtvZmYgLSBOT0RFX0RJUjFfQkxPQ0tdKTsKKyAg cmV0dXJuIGdydWJfbGVfdG9fY3B1MzIgKHJuLT5pbi5uaWRbb2ZmXSk7Cit9CisKK3N0YXRpYyBp bmxpbmUgZ3J1Yl9lcnJfdAorZ3J1Yl9mMmZzX2Jsb2NrX3JlYWQgKHN0cnVjdCBncnViX2YyZnNf ZGF0YSAqZGF0YSwgZ3J1Yl91aW50MzJfdCBibGthZGRyLCB2b2lkICpidWYpCit7CisgIHJldHVy biBncnViX2Rpc2tfcmVhZCAoZGF0YS0+ZGlzaywKKwkJKChncnViX2Rpc2tfYWRkcl90KWJsa2Fk ZHIpIDw8IEYyRlNfQkxLX1NFQ19CSVRTLAorCQkwLCBGMkZTX0JMS1NJWkUsIGJ1Zik7Cit9CisK Ky8qCisgKiBDUkMzMgorKi8KKyNkZWZpbmUgQ1JDUE9MWV9MRSAweGVkYjg4MzIwCisKK3N0YXRp YyBpbmxpbmUgZ3J1Yl91aW50MzJfdAorZ3J1Yl9mMmZzX2NhbF9jcmMzMiAoY29uc3Qgdm9pZCAq YnVmLCBjb25zdCBncnViX3VpbnQzMl90IGxlbikKK3sKKyAgZ3J1Yl91aW50MzJfdCBjcmMgPSBG MkZTX1NVUEVSX01BR0lDOworICB1bnNpZ25lZCBjaGFyICpwID0gKHVuc2lnbmVkIGNoYXIgKili dWY7CisgIGdydWJfdWludDMyX3QgdG1wID0gbGVuOworICBpbnQgaTsKKworICB3aGlsZSAodG1w LS0pCisgICAgeworICAgICAgY3JjIF49ICpwKys7CisgICAgICBmb3IgKGkgPSAwOyBpIDwgODsg aSsrKQorICAgICAgICBjcmMgPSAoY3JjID4+IDEpIF4gKChjcmMgJiAxKSA/IENSQ1BPTFlfTEUg OiAwKTsKKyAgICB9CisgIHJldHVybiBjcmM7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50CitncnVi X2YyZnNfY3JjX3ZhbGlkIChncnViX3VpbnQzMl90IGJsa19jcmMsIHZvaWQgKmJ1ZiwgY29uc3Qg Z3J1Yl91aW50MzJfdCBsZW4pCit7CisgIGdydWJfdWludDMyX3QgY2FsX2NyYyA9IDA7CisKKyAg Y2FsX2NyYyA9IGdydWJfZjJmc19jYWxfY3JjMzIgKGJ1ZiwgbGVuKTsKKworICByZXR1cm4gKGNh bF9jcmMgPT0gYmxrX2NyYykgPyAxIDogMDsKK30KKworc3RhdGljIGlubGluZSBpbnQKK2dydWJf ZjJmc190ZXN0X2JpdCAoZ3J1Yl91aW50MzJfdCBuciwgY29uc3QgY2hhciAqcCkKK3sKKyAgaW50 IG1hc2s7CisKKyAgcCArPSAobnIgPj4gMyk7CisgIG1hc2sgPSAxIDw8ICg3IC0gKG5yICYgMHgw NykpOworICByZXR1cm4gbWFzayAmICpwOworfQorCitzdGF0aWMgaW50CitncnViX2YyZnNfc2Fu aXR5X2NoZWNrX3NiIChzdHJ1Y3QgZ3J1Yl9mMmZzX3N1cGVyYmxvY2sgKnNiKQoreworICBncnVi X3VpbnQzMl90IGxvZ19zZWN0b3JzaXplLCBsb2dfc2VjdG9yc19wZXJfYmxvY2s7CisKKyAgaWYg KHNiLT5tYWdpYyAhPSBncnViX2NwdV90b19sZTMyX2NvbXBpbGVfdGltZSAoRjJGU19TVVBFUl9N QUdJQykpCisgICAgcmV0dXJuIC0xOworCisgIGlmIChzYi0+bG9nX2Jsb2Nrc2l6ZSAhPSBncnVi X2NwdV90b19sZTMyX2NvbXBpbGVfdGltZSAoRjJGU19CTEtfQklUUykpCisgICAgcmV0dXJuIC0x OworCisgIGxvZ19zZWN0b3JzaXplID0gZ3J1Yl9sZV90b19jcHUzMiAoc2ItPmxvZ19zZWN0b3Jz aXplKTsKKyAgbG9nX3NlY3RvcnNfcGVyX2Jsb2NrID0gZ3J1Yl9sZV90b19jcHUzMiAoc2ItPmxv Z19zZWN0b3JzX3Blcl9ibG9jayk7CisKKyAgaWYgKGxvZ19zZWN0b3JzaXplID4gRjJGU19CTEtf QklUUykKKyAgICByZXR1cm4gLTE7CisKKyAgaWYgKGxvZ19zZWN0b3JzaXplIDwgRjJGU19NSU5f TE9HX1NFQ1RPUl9TSVpFKQorICAgIHJldHVybiAtMTsKKworICBpZiAobG9nX3NlY3RvcnNfcGVy X2Jsb2NrICsgbG9nX3NlY3RvcnNpemUgIT0gRjJGU19CTEtfQklUUykKKyAgICByZXR1cm4gLTE7 CisKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK2dydWJfZjJmc19yZWFkX3NiIChzdHJ1 Y3QgZ3J1Yl9mMmZzX2RhdGEgKmRhdGEsIGdydWJfZGlza19hZGRyX3Qgb2Zmc2V0KQoreworICBn cnViX2Rpc2tfdCBkaXNrID0gZGF0YS0+ZGlzazsKKyAgZ3J1Yl9lcnJfdCBlcnI7CisKKyAgLyog UmVhZCBmaXJzdCBzdXBlciBibG9jay4gKi8KKyAgZXJyID0gZ3J1Yl9kaXNrX3JlYWQgKGRpc2ss IG9mZnNldCwgMCwgc2l6ZW9mIChkYXRhLT5zYmxvY2spLCAmZGF0YS0+c2Jsb2NrKTsKKyAgaWYg KGVycikKKyAgICByZXR1cm4gLTE7CisKKyAgcmV0dXJuIGdydWJfZjJmc19zYW5pdHlfY2hlY2tf c2IgKCZkYXRhLT5zYmxvY2spOworfQorCitzdGF0aWMgdm9pZCAqCit2YWxpZGF0ZV9jaGVja3Bv aW50IChzdHJ1Y3QgZ3J1Yl9mMmZzX2RhdGEgKmRhdGEsIGdydWJfdWludDMyX3QgY3BfYWRkciwK KwlncnViX3VpbnQ2NF90ICp2ZXJzaW9uKQoreworICBncnViX3VpbnQzMl90ICpjcF9wYWdlXzEs ICpjcF9wYWdlXzI7CisgIHN0cnVjdCBncnViX2YyZnNfY2hlY2twb2ludCAqY3BfYmxvY2s7Cisg IGdydWJfdWludDY0X3QgY3VyX3ZlcnNpb24gPSAwLCBwcmVfdmVyc2lvbiA9IDA7CisgIGdydWJf dWludDMyX3QgY3JjID0gMDsKKyAgZ3J1Yl91aW50MzJfdCBjcmNfb2Zmc2V0OworICBncnViX2Vy cl90IGVycjsKKworICAvKiBSZWFkIHRoZSAxc3QgY3AgYmxvY2sgaW4gdGhpcyBDUCBwYWNrICov CisgIGNwX3BhZ2VfMSA9IGdydWJfbWFsbG9jIChGMkZTX0JMS1NJWkUpOworICBpZiAoIWNwX3Bh Z2VfMSkKKyAgICByZXR1cm4gTlVMTDsKKworICBlcnIgPSBncnViX2YyZnNfYmxvY2tfcmVhZCAo ZGF0YSwgY3BfYWRkciwgY3BfcGFnZV8xKTsKKyAgaWYgKGVycikKKyAgICBnb3RvIGludmFsaWRf Y3AxOworCisgIGNwX2Jsb2NrID0gKHN0cnVjdCBncnViX2YyZnNfY2hlY2twb2ludCAqKWNwX3Bh Z2VfMTsKKyAgY3JjX29mZnNldCA9IGdydWJfbGVfdG9fY3B1MzIgKGNwX2Jsb2NrLT5jaGVja3N1 bV9vZmZzZXQpOworICBpZiAoY3JjX29mZnNldCAhPSBDSEVDS1NVTV9PRkZTRVQpCisgICAgZ290 byBpbnZhbGlkX2NwMTsKKworICBjcmMgPSBncnViX2xlX3RvX2NwdTMyICgqKGNwX3BhZ2VfMSAr IFUzMl9DSEVDS1NVTV9PRkZTRVQpKTsKKyAgaWYgKCFncnViX2YyZnNfY3JjX3ZhbGlkIChjcmMs IGNwX2Jsb2NrLCBjcmNfb2Zmc2V0KSkKKyAgICBnb3RvIGludmFsaWRfY3AxOworCisgIHByZV92 ZXJzaW9uID0gZ3J1Yl9sZV90b19jcHU2NCAoY3BfYmxvY2stPmNoZWNrcG9pbnRfdmVyKTsKKwor ICAvKiBSZWFkIHRoZSAybmQgY3AgYmxvY2sgaW4gdGhpcyBDUCBwYWNrICovCisgIGNwX3BhZ2Vf MiA9IGdydWJfbWFsbG9jIChGMkZTX0JMS1NJWkUpOworICBpZiAoIWNwX3BhZ2VfMikKKyAgICBn b3RvIGludmFsaWRfY3AxOworCisgIGNwX2FkZHIgKz0gZ3J1Yl9sZV90b19jcHUzMiAoY3BfYmxv Y2stPmNwX3BhY2tfdG90YWxfYmxvY2tfY291bnQpIC0gMTsKKworICBlcnIgPSBncnViX2YyZnNf YmxvY2tfcmVhZCAoZGF0YSwgY3BfYWRkciwgY3BfcGFnZV8yKTsKKyAgaWYgKGVycikKKyAgICBn b3RvIGludmFsaWRfY3AyOworCisgIGNwX2Jsb2NrID0gKHN0cnVjdCBncnViX2YyZnNfY2hlY2tw b2ludCAqKWNwX3BhZ2VfMjsKKyAgY3JjX29mZnNldCA9IGdydWJfbGVfdG9fY3B1MzIgKGNwX2Js b2NrLT5jaGVja3N1bV9vZmZzZXQpOworICBpZiAoY3JjX29mZnNldCAhPSBDSEVDS1NVTV9PRkZT RVQpCisgICAgZ290byBpbnZhbGlkX2NwMjsKKworICBjcmMgPSBncnViX2xlX3RvX2NwdTMyICgq KGNwX3BhZ2VfMiArIFUzMl9DSEVDS1NVTV9PRkZTRVQpKTsKKyAgaWYgKCFncnViX2YyZnNfY3Jj X3ZhbGlkIChjcmMsIGNwX2Jsb2NrLCBjcmNfb2Zmc2V0KSkKKyAgICBnb3RvIGludmFsaWRfY3Ay OworCisgIGN1cl92ZXJzaW9uID0gZ3J1Yl9sZV90b19jcHU2NCAoY3BfYmxvY2stPmNoZWNrcG9p bnRfdmVyKTsKKyAgaWYgKGN1cl92ZXJzaW9uID09IHByZV92ZXJzaW9uKQorICAgIHsKKyAgICAg ICp2ZXJzaW9uID0gY3VyX3ZlcnNpb247CisgICAgICBncnViX2ZyZWUgKGNwX3BhZ2VfMik7Cisg ICAgICByZXR1cm4gY3BfcGFnZV8xOworICAgIH0KKworaW52YWxpZF9jcDI6CisgIGdydWJfZnJl ZSAoY3BfcGFnZV8yKTsKK2ludmFsaWRfY3AxOgorICBncnViX2ZyZWUgKGNwX3BhZ2VfMSk7Cisg IHJldHVybiBOVUxMOworfQorCitzdGF0aWMgZ3J1Yl9lcnJfdAorZ3J1Yl9mMmZzX3JlYWRfY3Ag KHN0cnVjdCBncnViX2YyZnNfZGF0YSAqZGF0YSkKK3sKKyAgdm9pZCAqY3AxLCAqY3AyLCAqY3Vy X3BhZ2U7CisgIGdydWJfdWludDY0X3QgY3AxX3ZlcnNpb24gPSAwLCBjcDJfdmVyc2lvbiA9IDA7 CisgIGdydWJfdWludDY0X3QgY3Bfc3RhcnRfYmxrX25vOworCisgIC8qCisgICAqIEZpbmRpbmcg b3V0IHZhbGlkIGNwIGJsb2NrIGludm9sdmVzIHJlYWQgYm90aAorICAgKiBzZXRzIChjcCBwYWNr MSBhbmQgY3AgcGFjayAyKQorICAgKi8KKyAgY3Bfc3RhcnRfYmxrX25vID0gZGF0YS0+Y3BfYmxr YWRkcjsKKyAgY3AxID0gdmFsaWRhdGVfY2hlY2twb2ludCAoZGF0YSwgY3Bfc3RhcnRfYmxrX25v LCAmY3AxX3ZlcnNpb24pOworICBpZiAoIWNwMSAmJiBncnViX2Vycm5vKQorICAgIHJldHVybiBn cnViX2Vycm5vOworCisgIC8qIFRoZSBzZWNvbmQgY2hlY2twb2ludCBwYWNrIHNob3VsZCBzdGFy dCBhdCB0aGUgbmV4dCBzZWdtZW50ICovCisgIGNwX3N0YXJ0X2Jsa19ubyArPSBkYXRhLT5ibG9j a3NfcGVyX3NlZzsKKyAgY3AyID0gdmFsaWRhdGVfY2hlY2twb2ludCAoZGF0YSwgY3Bfc3RhcnRf YmxrX25vLCAmY3AyX3ZlcnNpb24pOworICBpZiAoIWNwMiAmJiBncnViX2Vycm5vKQorICAgIHsK KyAgICAgIGdydWJfZnJlZSAoY3AxKTsKKyAgICAgIHJldHVybiBncnViX2Vycm5vOworICAgIH0K KworICBpZiAoY3AxICYmIGNwMikKKyAgICBjdXJfcGFnZSA9IChjcDJfdmVyc2lvbiA+IGNwMV92 ZXJzaW9uKSA/IGNwMiA6IGNwMTsKKyAgZWxzZSBpZiAoY3AxKQorICAgIGN1cl9wYWdlID0gY3Ax OworICBlbHNlIGlmIChjcDIpCisgICAgY3VyX3BhZ2UgPSBjcDI7CisgIGVsc2UKKyAgICByZXR1 cm4gZ3J1Yl9lcnJvciAoR1JVQl9FUlJfQkFEX0ZTLCAibm8gY2hlY2twb2ludHMiKTsKKworICBn cnViX21lbWNweSAoJmRhdGEtPmNrcHQsIGN1cl9wYWdlLCBGMkZTX0JMS1NJWkUpOworCisgIGdy dWJfZnJlZSAoY3AxKTsKKyAgZ3J1Yl9mcmVlIChjcDIpOworICByZXR1cm4gMDsKK30KKworc3Rh dGljIGdydWJfZXJyX3QKK2dldF9uYXRfam91cm5hbCAoc3RydWN0IGdydWJfZjJmc19kYXRhICpk YXRhKQoreworICBncnViX3VpbnQzMl90IGJsb2NrOworICBjaGFyICpidWY7CisgIGdydWJfZXJy X3QgZXJyOworCisgIGJ1ZiA9IGdydWJfbWFsbG9jIChGMkZTX0JMS1NJWkUpOworICBpZiAoIWJ1 ZikKKyAgICByZXR1cm4gZ3J1Yl9lcnJubzsKKworICBpZiAoQ0tQVF9GTEFHX1NFVCgmZGF0YS0+ Y2twdCwgQ1BfQ09NUEFDVF9TVU1fRkxBRykpCisgICAgYmxvY2sgPSBfX3N0YXJ0X3N1bV9ibG9j ayAoZGF0YSk7CisgIGVsc2UgaWYgKENLUFRfRkxBR19TRVQgKCZkYXRhLT5ja3B0LCBDUF9VTU9V TlRfRkxBRykpCisgICAgYmxvY2sgPSBfX3N1bV9ibGtfYWRkciAoZGF0YSwgTlJfQ1VSU0VHX1RZ UEUsIENVUlNFR19IT1RfREFUQSk7CisgIGVsc2UKKyAgICBibG9jayA9IF9fc3VtX2Jsa19hZGRy IChkYXRhLCBOUl9DVVJTRUdfREFUQV9UWVBFLCBDVVJTRUdfSE9UX0RBVEEpOworCisgIGVyciA9 IGdydWJfZjJmc19ibG9ja19yZWFkIChkYXRhLCBibG9jaywgYnVmKTsKKyAgaWYgKGVycikKKyAg ICBnb3RvIGZhaWw7CisKKyAgaWYgKENLUFRfRkxBR19TRVQgKCZkYXRhLT5ja3B0LCBDUF9DT01Q QUNUX1NVTV9GTEFHKSkKKyAgICBncnViX21lbWNweSAoJmRhdGEtPm5hdF9qLCBidWYsIFNVTV9K T1VSTkFMX1NJWkUpOworICBlbHNlCisgICAgZ3J1Yl9tZW1jcHkgKCZkYXRhLT5uYXRfaiwgYnVm ICsgU1VNX0VOVFJJRVNfU0laRSwgU1VNX0pPVVJOQUxfU0laRSk7CisKK2ZhaWw6CisgIGdydWJf ZnJlZSAoYnVmKTsKKyAgcmV0dXJuIGVycjsKK30KKworc3RhdGljIGdydWJfdWludDMyX3QKK2dl dF9ibGthZGRyX2Zyb21fbmF0X2pvdXJuYWwgKHN0cnVjdCBncnViX2YyZnNfZGF0YSAqZGF0YSwg Z3J1Yl91aW50MzJfdCBuaWQpCit7CisgIGdydWJfdWludDE2X3QgbiA9IGdydWJfbGVfdG9fY3B1 MTYgKGRhdGEtPm5hdF9qLm5fbmF0cyk7CisgIGdydWJfdWludDMyX3QgYmxrYWRkciA9IDA7Cisg IGdydWJfdWludDE2X3QgaTsKKworICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKQorICAgIHsKKyAg ICAgIGlmIChncnViX2xlX3RvX2NwdTMyIChkYXRhLT5uYXRfai5lbnRyaWVzW2ldLm5pZCkgPT0g bmlkKQorICAgICAgICB7CisgICAgICAgICAgYmxrYWRkciA9IGdydWJfbGVfdG9fY3B1MzIgKGRh dGEtPm5hdF9qLmVudHJpZXNbaV0ubmUuYmxvY2tfYWRkcik7CisgICAgICAgICAgYnJlYWs7Cisg ICAgICAgIH0KKyAgICB9CisgIHJldHVybiBibGthZGRyOworfQorCitzdGF0aWMgZ3J1Yl91aW50 MzJfdAorZ2V0X25vZGVfYmxrYWRkciAoc3RydWN0IGdydWJfZjJmc19kYXRhICpkYXRhLCBncnVi X3VpbnQzMl90IG5pZCkKK3sKKyAgc3RydWN0IGdydWJfZjJmc19uYXRfYmxvY2sgKm5hdF9ibG9j azsKKyAgZ3J1Yl91aW50MzJfdCBzZWdfb2ZmLCBibG9ja19vZmYsIGVudHJ5X29mZiwgYmxvY2tf YWRkcjsKKyAgZ3J1Yl91aW50MzJfdCBibGthZGRyOworICBncnViX2Vycl90IGVycjsKKworICBi bGthZGRyID0gZ2V0X2Jsa2FkZHJfZnJvbV9uYXRfam91cm5hbCAoZGF0YSwgbmlkKTsKKyAgaWYg KGJsa2FkZHIpCisgICAgcmV0dXJuIGJsa2FkZHI7CisKKyAgbmF0X2Jsb2NrID0gZ3J1Yl9tYWxs b2MgKEYyRlNfQkxLU0laRSk7CisgIGlmICghbmF0X2Jsb2NrKQorICAgIHJldHVybiAwOworCisg IGJsb2NrX29mZiA9IG5pZCAvIE5BVF9FTlRSWV9QRVJfQkxPQ0s7CisgIGVudHJ5X29mZiA9IG5p ZCAlIE5BVF9FTlRSWV9QRVJfQkxPQ0s7CisKKyAgc2VnX29mZiA9IGJsb2NrX29mZiAvIGRhdGEt PmJsb2Nrc19wZXJfc2VnOworICBibG9ja19hZGRyID0gZGF0YS0+bmF0X2Jsa2FkZHIgKworCSgo c2VnX29mZiAqIGRhdGEtPmJsb2Nrc19wZXJfc2VnKSA8PCAxKSArCisJKGJsb2NrX29mZiAmIChk YXRhLT5ibG9ja3NfcGVyX3NlZyAtIDEpKTsKKworICBpZiAoZ3J1Yl9mMmZzX3Rlc3RfYml0IChi bG9ja19vZmYsIGRhdGEtPm5hdF9iaXRtYXApKQorICAgIGJsb2NrX2FkZHIgKz0gZGF0YS0+Ymxv Y2tzX3Blcl9zZWc7CisKKyAgZXJyID0gZ3J1Yl9mMmZzX2Jsb2NrX3JlYWQgKGRhdGEsIGJsb2Nr X2FkZHIsIG5hdF9ibG9jayk7CisgIGlmIChlcnIpCisgICAgeworICAgICAgZ3J1Yl9mcmVlIChu YXRfYmxvY2spOworICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgIGJsa2FkZHIgPSBncnViX2xl X3RvX2NwdTMyIChuYXRfYmxvY2stPm5lW2VudHJ5X29mZl0uYmxvY2tfYWRkcik7CisKKyAgZ3J1 Yl9mcmVlIChuYXRfYmxvY2spOworCisgIHJldHVybiBibGthZGRyOworfQorCitzdGF0aWMgaW50 CitncnViX2dldF9ub2RlX3BhdGggKHN0cnVjdCBncnViX2YyZnNfaW5vZGUgKmlub2RlLCBncnVi X3VpbnQzMl90IGJsb2NrLAorCWdydWJfdWludDMyX3Qgb2Zmc2V0WzRdLCBncnViX3VpbnQzMl90 IG5vZmZzZXRbNF0pCit7CisgIGdydWJfdWludDMyX3QgZGlyZWN0X2Jsa3MgPSBBRERSU19QRVJf QkxPQ0s7CisgIGdydWJfdWludDMyX3QgZHB0cnNfcGVyX2JsayA9IE5JRFNfUEVSX0JMT0NLOwor ICBncnViX3VpbnQzMl90IGluZGlyZWN0X2Jsa3MgPSBBRERSU19QRVJfQkxPQ0sgKiBOSURTX1BF Ul9CTE9DSzsKKyAgZ3J1Yl91aW50MzJfdCBkaW5kaXJlY3RfYmxrcyA9IGluZGlyZWN0X2Jsa3Mg KiBOSURTX1BFUl9CTE9DSzsKKyAgZ3J1Yl91aW50MzJfdCBkaXJlY3RfaW5kZXggPSBERUZfQURE UlNfUEVSX0lOT0RFOworICBpbnQgbiA9IDA7CisgIGludCBsZXZlbCA9IDA7CisKKyAgaWYgKGlu b2RlLT5pX2lubGluZSAmIEYyRlNfSU5MSU5FX1hBVFRSKQorICAgIGRpcmVjdF9pbmRleCAtPSBG MkZTX0lOTElORV9YQVRUUl9BRERSUzsKKworICBub2Zmc2V0WzBdID0gMDsKKworICBpZiAoYmxv Y2sgPCBkaXJlY3RfaW5kZXgpCisgICAgeworICAgICAgb2Zmc2V0W25dID0gYmxvY2s7CisgICAg ICBnb3RvIGdvdDsKKyAgICB9CisKKyAgYmxvY2sgLT0gZGlyZWN0X2luZGV4OworICBpZiAoYmxv Y2sgPCBkaXJlY3RfYmxrcykKKyAgICB7CisgICAgICBvZmZzZXRbbisrXSA9IE5PREVfRElSMV9C TE9DSzsKKyAgICAgIG5vZmZzZXRbbl0gPSAxOworICAgICAgb2Zmc2V0W25dID0gYmxvY2s7Cisg ICAgICBsZXZlbCA9IDE7CisgICAgICBnb3RvIGdvdDsKKyAgICB9CisKKyAgYmxvY2sgLT0gZGly ZWN0X2Jsa3M7CisgIGlmIChibG9jayA8IGRpcmVjdF9ibGtzKQorICAgIHsKKyAgICAgIG9mZnNl dFtuKytdID0gTk9ERV9ESVIyX0JMT0NLOworICAgICAgbm9mZnNldFtuXSA9IDI7CisgICAgICBv ZmZzZXRbbl0gPSBibG9jazsKKyAgICAgIGxldmVsID0gMTsKKyAgICAgIGdvdG8gZ290OworICAg IH0KKworICBibG9jayAtPSBkaXJlY3RfYmxrczsKKyAgaWYgKGJsb2NrIDwgaW5kaXJlY3RfYmxr cykKKyAgICB7CisgICAgICBvZmZzZXRbbisrXSA9IE5PREVfSU5EMV9CTE9DSzsKKyAgICAgIG5v ZmZzZXRbbl0gPSAzOworICAgICAgb2Zmc2V0W24rK10gPSBibG9jayAvIGRpcmVjdF9ibGtzOwor ICAgICAgbm9mZnNldFtuXSA9IDQgKyBvZmZzZXRbbiAtIDFdOworICAgICAgb2Zmc2V0W25dID0g YmxvY2sgJSBkaXJlY3RfYmxrczsKKyAgICAgIGxldmVsID0gMjsKKyAgICAgIGdvdG8gZ290Owor ICAgIH0KKworICBibG9jayAtPSBpbmRpcmVjdF9ibGtzOworICBpZiAoYmxvY2sgPCBpbmRpcmVj dF9ibGtzKQorICAgIHsKKyAgICAgIG9mZnNldFtuKytdID0gTk9ERV9JTkQyX0JMT0NLOworICAg ICAgbm9mZnNldFtuXSA9IDQgKyBkcHRyc19wZXJfYmxrOworICAgICAgb2Zmc2V0W24rK10gPSBi bG9jayAvIGRpcmVjdF9ibGtzOworICAgICAgbm9mZnNldFtuXSA9IDUgKyBkcHRyc19wZXJfYmxr ICsgb2Zmc2V0W24gLSAxXTsKKyAgICAgIG9mZnNldFtuXSA9IGJsb2NrICUgZGlyZWN0X2Jsa3M7 CisgICAgICBsZXZlbCA9IDI7CisgICAgICBnb3RvIGdvdDsKKyAgICB9CisKKyAgYmxvY2sgLT0g aW5kaXJlY3RfYmxrczsKKyAgaWYgKGJsb2NrIDwgZGluZGlyZWN0X2Jsa3MpCisgICAgeworICAg ICAgb2Zmc2V0W24rK10gPSBOT0RFX0RJTkRfQkxPQ0s7CisgICAgICBub2Zmc2V0W25dID0gNSAr IChkcHRyc19wZXJfYmxrICogMik7CisgICAgICBvZmZzZXRbbisrXSA9IGJsb2NrIC8gaW5kaXJl Y3RfYmxrczsKKyAgICAgIG5vZmZzZXRbbl0gPSA2ICsgKGRwdHJzX3Blcl9ibGsgKiAyKSArCisg ICAgICBvZmZzZXRbbiAtIDFdICogKGRwdHJzX3Blcl9ibGsgKyAxKTsKKyAgICAgIG9mZnNldFtu KytdID0gKGJsb2NrIC8gZGlyZWN0X2Jsa3MpICUgZHB0cnNfcGVyX2JsazsKKyAgICAgIG5vZmZz ZXRbbl0gPSA3ICsgKGRwdHJzX3Blcl9ibGsgKiAyKSArCisJCW9mZnNldFtuIC0gMl0gKiAoZHB0 cnNfcGVyX2JsayArIDEpICsgb2Zmc2V0W24gLSAxXTsKKyAgICAgIG9mZnNldFtuXSA9IGJsb2Nr ICUgZGlyZWN0X2Jsa3M7CisgICAgICBsZXZlbCA9IDM7CisgICAgICBnb3RvIGdvdDsKKyAgICB9 Citnb3Q6CisgIHJldHVybiBsZXZlbDsKK30KKworc3RhdGljIGdydWJfZXJyX3QKK2dydWJfZjJm c19yZWFkX25vZGUgKHN0cnVjdCBncnViX2YyZnNfZGF0YSAqZGF0YSwKKwlncnViX3VpbnQzMl90 IG5pZCwgc3RydWN0IGdydWJfZjJmc19ub2RlICpucCkKK3sKKyAgZ3J1Yl91aW50MzJfdCBibGth ZGRyOworCisgIGJsa2FkZHIgPSBnZXRfbm9kZV9ibGthZGRyIChkYXRhLCBuaWQpOworICBpZiAo IWJsa2FkZHIpCisgICAgcmV0dXJuIGdydWJfZXJybm87CisKKyAgcmV0dXJuIGdydWJfZjJmc19i bG9ja19yZWFkIChkYXRhLCBibGthZGRyLCBucCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZ3J1Yl9m MmZzX2RhdGEgKgorZ3J1Yl9mMmZzX21vdW50IChncnViX2Rpc2tfdCBkaXNrKQoreworICBzdHJ1 Y3QgZ3J1Yl9mMmZzX2RhdGEgKmRhdGE7CisgIGdydWJfZXJyX3QgZXJyOworCisgIGRhdGEgPSBn cnViX21hbGxvYyAoc2l6ZW9mICgqZGF0YSkpOworICBpZiAoIWRhdGEpCisgICAgcmV0dXJuIE5V TEw7CisKKyAgZGF0YS0+ZGlzayA9IGRpc2s7CisKKyAgaWYgKGdydWJfZjJmc19yZWFkX3NiIChk YXRhLCBGMkZTX1NVUEVSX09GRlNFVDApKQorICAgIHsKKyAgICAgIGlmIChncnViX2YyZnNfcmVh ZF9zYiAoZGF0YSwgRjJGU19TVVBFUl9PRkZTRVQxKSkKKyAgICAgICAgeworICAgICAgICAgIGlm IChncnViX2Vycm5vID09IEdSVUJfRVJSX05PTkUpCisgICAgICAgICAgICBncnViX2Vycm9yIChH UlVCX0VSUl9CQURfRlMsCisJCQkibm90IGEgRjJGUyBmaWxlc3lzdGVtIChubyBzdXBlcmJsb2Nr KSIpOworICAgICAgICAgIGdvdG8gZmFpbDsKKyAgICAgICAgfQorICAgIH0KKworICBkYXRhLT5y b290X2lubyA9IGdydWJfbGVfdG9fY3B1MzIgKGRhdGEtPnNibG9jay5yb290X2lubyk7CisgIGRh dGEtPmNwX2Jsa2FkZHIgPSBncnViX2xlX3RvX2NwdTMyIChkYXRhLT5zYmxvY2suY3BfYmxrYWRk cik7CisgIGRhdGEtPm5hdF9ibGthZGRyID0gZ3J1Yl9sZV90b19jcHUzMiAoZGF0YS0+c2Jsb2Nr Lm5hdF9ibGthZGRyKTsKKyAgZGF0YS0+YmxvY2tzX3Blcl9zZWcgPSAxIDw8CisJZ3J1Yl9sZV90 b19jcHUzMiAoZGF0YS0+c2Jsb2NrLmxvZ19ibG9ja3NfcGVyX3NlZyk7CisKKyAgZXJyID0gZ3J1 Yl9mMmZzX3JlYWRfY3AgKGRhdGEpOworICBpZiAoZXJyKQorICAgIGdvdG8gZmFpbDsKKworICBk YXRhLT5uYXRfYml0bWFwID0gX19uYXRfYml0bWFwX3B0ciAoZGF0YSk7CisKKyAgZXJyID0gZ2V0 X25hdF9qb3VybmFsIChkYXRhKTsKKyAgaWYgKGVycikKKyAgICBnb3RvIGZhaWw7CisKKyAgZGF0 YS0+ZGlyb3Blbi5kYXRhID0gZGF0YTsKKyAgZGF0YS0+ZGlyb3Blbi5pbm8gPSBkYXRhLT5yb290 X2lubzsKKyAgZGF0YS0+ZGlyb3Blbi5pbm9kZV9yZWFkID0gMTsKKyAgZGF0YS0+aW5vZGUgPSAm ZGF0YS0+ZGlyb3Blbi5pbm9kZTsKKworICBlcnIgPSBncnViX2YyZnNfcmVhZF9ub2RlIChkYXRh LCBkYXRhLT5yb290X2lubywgZGF0YS0+aW5vZGUpOworICBpZiAoZXJyKQorICAgIGdvdG8gZmFp bDsKKworICByZXR1cm4gZGF0YTsKKworZmFpbDoKKyAgZ3J1Yl9mcmVlIChkYXRhKTsKKyAgcmV0 dXJuIE5VTEw7Cit9CisKKy8qIGd1YXJhbnRlZSBpbmxpbmVfZGF0YSB3YXMgaGFuZGxlZCBieSBj YWxsZXIgKi8KK3N0YXRpYyBncnViX2Rpc2tfYWRkcl90CitncnViX2YyZnNfZ2V0X2Jsb2NrIChn cnViX2ZzaGVscF9ub2RlX3Qgbm9kZSwgZ3J1Yl9kaXNrX2FkZHJfdCBibG9ja19vZnMpCit7Cisg IHN0cnVjdCBncnViX2YyZnNfZGF0YSAqZGF0YSA9IG5vZGUtPmRhdGE7CisgIHN0cnVjdCBncnVi X2YyZnNfaW5vZGUgKmlub2RlID0gJm5vZGUtPmlub2RlLmk7CisgIGdydWJfdWludDMyX3Qgb2Zm c2V0WzRdLCBub2Zmc2V0WzRdLCBuaWRzWzRdOworICBzdHJ1Y3QgZ3J1Yl9mMmZzX25vZGUgKm5v ZGVfYmxvY2s7CisgIGdydWJfdWludDMyX3QgYmxvY2tfYWRkciA9IC0xOworICBpbnQgbGV2ZWws IGk7CisKKyAgbGV2ZWwgPSBncnViX2dldF9ub2RlX3BhdGggKGlub2RlLCBibG9ja19vZnMsIG9m ZnNldCwgbm9mZnNldCk7CisgIGlmIChsZXZlbCA9PSAwKQorICAgIHJldHVybiBncnViX2xlX3Rv X2NwdTMyIChpbm9kZS0+aV9hZGRyW29mZnNldFswXV0pOworCisgIG5vZGVfYmxvY2sgPSBncnVi X21hbGxvYyAoRjJGU19CTEtTSVpFKTsKKyAgaWYgKCFub2RlX2Jsb2NrKQorICAgIHJldHVybiAt MTsKKworICBuaWRzWzFdID0gX19nZXRfbm9kZV9pZCAoJm5vZGUtPmlub2RlLCBvZmZzZXRbMF0s IDEpOworCisgIC8qIGdldCBpbmRpcmVjdCBvciBkaXJlY3Qgbm9kZXMgKi8KKyAgZm9yIChpID0g MTsgaSA8PSBsZXZlbDsgaSsrKQorICAgIHsKKyAgICAgIGdydWJfZjJmc19yZWFkX25vZGUgKGRh dGEsIG5pZHNbaV0sIG5vZGVfYmxvY2spOworICAgICAgaWYgKGdydWJfZXJybm8pCisgICAgICAg IGdvdG8gZmFpbDsKKworICAgICAgaWYgKGkgPCBsZXZlbCkKKyAgICAgICAgbmlkc1tpICsgMV0g PSBfX2dldF9ub2RlX2lkIChub2RlX2Jsb2NrLCBvZmZzZXRbaV0sIDApOworICAgIH0KKworICBi bG9ja19hZGRyID0gZ3J1Yl9sZV90b19jcHUzMiAobm9kZV9ibG9jay0+ZG4uYWRkcltvZmZzZXRb bGV2ZWxdXSk7CitmYWlsOgorICBncnViX2ZyZWUgKG5vZGVfYmxvY2spOworICByZXR1cm4gYmxv Y2tfYWRkcjsKK30KKworc3RhdGljIGdydWJfc3NpemVfdAorZ3J1Yl9mMmZzX3JlYWRfZmlsZSAo Z3J1Yl9mc2hlbHBfbm9kZV90IG5vZGUsCisJCWdydWJfZGlza19yZWFkX2hvb2tfdCByZWFkX2hv b2ssIHZvaWQgKnJlYWRfaG9va19kYXRhLAorCQlncnViX29mZl90IHBvcywgZ3J1Yl9zaXplX3Qg bGVuLCBjaGFyICpidWYpCit7CisgIHN0cnVjdCBncnViX2YyZnNfaW5vZGUgKmlub2RlID0gJm5v ZGUtPmlub2RlLmk7CisgIGdydWJfb2ZmX3QgZmlsZXNpemUgPSBncnViX2YyZnNfZmlsZV9zaXpl IChpbm9kZSk7CisgIGNoYXIgKmlubGluZV9hZGRyID0gX19pbmxpbmVfYWRkciAoaW5vZGUpOwor CisgIGlmIChpbm9kZS0+aV9pbmxpbmUgJiBGMkZTX0lOTElORV9EQVRBKQorICAgIHsKKyAgICAg IGlmIChmaWxlc2l6ZSA+IE1BWF9JTkxJTkVfREFUQSkKKyAgICAgICAgcmV0dXJuIC0xOworICAg ICAgaWYgKGxlbiA+IGZpbGVzaXplIC0gcG9zKQorICAgICAgICBsZW4gPSBmaWxlc2l6ZSAtIHBv czsKKworICAgICAgZ3J1Yl9tZW1jcHkgKGJ1ZiArIHBvcywgaW5saW5lX2FkZHIgKyBwb3MsIGxl bik7CisgICAgICByZXR1cm4gbGVuOworICAgIH0KKworICByZXR1cm4gZ3J1Yl9mc2hlbHBfcmVh ZF9maWxlIChub2RlLT5kYXRhLT5kaXNrLCBub2RlLAorCQkJcmVhZF9ob29rLCByZWFkX2hvb2tf ZGF0YSwKKwkJCXBvcywgbGVuLCBidWYsIGdydWJfZjJmc19nZXRfYmxvY2ssCisJCQlmaWxlc2l6 ZSwKKwkJCUYyRlNfQkxLX1NFQ19CSVRTLCAwKTsKK30KKworc3RhdGljIGNoYXIgKgorZ3J1Yl9m MmZzX3JlYWRfc3ltbGluayAoZ3J1Yl9mc2hlbHBfbm9kZV90IG5vZGUpCit7CisgIGNoYXIgKnN5 bWxpbms7CisgIHN0cnVjdCBncnViX2ZzaGVscF9ub2RlICpkaXJvID0gbm9kZTsKKyAgZ3J1Yl91 aW50NjRfdCBmaWxlc2l6ZTsKKworICBpZiAoIWRpcm8tPmlub2RlX3JlYWQpCisgICAgeworICAg ICAgZ3J1Yl9mMmZzX3JlYWRfbm9kZSAoZGlyby0+ZGF0YSwgZGlyby0+aW5vLCAmZGlyby0+aW5v ZGUpOworICAgICAgaWYgKGdydWJfZXJybm8pCisgICAgICAgIHJldHVybiAwOworICAgIH0KKwor ICBmaWxlc2l6ZSA9IGdydWJfZjJmc19maWxlX3NpemUoJmRpcm8tPmlub2RlLmkpOworCisgIHN5 bWxpbmsgPSBncnViX21hbGxvYyAoZmlsZXNpemUgKyAxKTsKKyAgaWYgKCFzeW1saW5rKQorICAg IHJldHVybiAwOworCisgIGdydWJfZjJmc19yZWFkX2ZpbGUgKGRpcm8sIDAsIDAsIDAsIGZpbGVz aXplLCBzeW1saW5rKTsKKyAgaWYgKGdydWJfZXJybm8pCisgICAgeworICAgICAgZ3J1Yl9mcmVl IChzeW1saW5rKTsKKyAgICAgIHJldHVybiAwOworICAgIH0KKworICBzeW1saW5rW2ZpbGVzaXpl XSA9ICdcMCc7CisgIHJldHVybiBzeW1saW5rOworfQorCitzdGF0aWMgaW50CitncnViX2YyZnNf Y2hlY2tfZGVudHJpZXMgKHN0cnVjdCBncnViX2YyZnNfZGlyX2l0ZXJfY3R4ICpjdHgpCit7Cisg IHN0cnVjdCBncnViX2ZzaGVscF9ub2RlICpmZGlybzsKKyAgaW50IGk7CisKKyAgZm9yIChpID0g MDsgaSA8IGN0eC0+bWF4OykKKyAgICB7CisgICAgICBjaGFyICpmaWxlbmFtZTsKKyAgICAgIGVu dW0gZ3J1Yl9mc2hlbHBfZmlsZXR5cGUgdHlwZSA9IEdSVUJfRlNIRUxQX1VOS05PV047CisgICAg ICBlbnVtIEZJTEVfVFlQRSBmdHlwZTsKKyAgICAgIGludCBuYW1lX2xlbjsKKyAgICAgIGludCBy ZXQ7CisKKyAgICAgIGlmIChncnViX2YyZnNfdGVzdF9iaXRfbGUgKGksIGN0eC0+Yml0bWFwKSA9 PSAwKQorICAgICAgICB7CisgICAgICAgICAgaSsrOworICAgICAgICAgIGNvbnRpbnVlOworICAg ICAgICB9CisKKyAgICAgIGZ0eXBlID0gY3R4LT5kZW50cnlbaV0uZmlsZV90eXBlOworICAgICAg bmFtZV9sZW4gPSBncnViX2xlX3RvX2NwdTE2IChjdHgtPmRlbnRyeVtpXS5uYW1lX2xlbik7Cisg ICAgICBmaWxlbmFtZSA9IGdydWJfbWFsbG9jIChuYW1lX2xlbiArIDEpOworICAgICAgaWYgKCFm aWxlbmFtZSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICAgIGdydWJfbWVtY3B5IChmaWxlbmFt ZSwgY3R4LT5maWxlbmFtZVtpXSwgbmFtZV9sZW4pOworICAgICAgZmlsZW5hbWVbbmFtZV9sZW5d ID0gMDsKKworICAgICAgZmRpcm8gPSBncnViX21hbGxvYyAoc2l6ZW9mIChzdHJ1Y3QgZ3J1Yl9m c2hlbHBfbm9kZSkpOworICAgICAgaWYgKCFmZGlybykKKyAgICAgICAgeworICAgICAgICAgIGdy dWJfZnJlZShmaWxlbmFtZSk7CisgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKworICAg ICAgaWYgKGZ0eXBlID09IEYyRlNfRlRfRElSKQorICAgICAgICB0eXBlID0gR1JVQl9GU0hFTFBf RElSOworICAgICAgZWxzZSBpZiAoZnR5cGUgPT0gRjJGU19GVF9TWU1MSU5LKQorICAgICAgICB0 eXBlID0gR1JVQl9GU0hFTFBfU1lNTElOSzsKKyAgICAgIGVsc2UgaWYgKGZ0eXBlID09IEYyRlNf RlRfUkVHX0ZJTEUpCisgICAgICAgIHR5cGUgPSBHUlVCX0ZTSEVMUF9SRUc7CisKKyAgICAgIGZk aXJvLT5kYXRhID0gY3R4LT5kYXRhOworICAgICAgZmRpcm8tPmlubyA9IGdydWJfbGVfdG9fY3B1 MzIgKGN0eC0+ZGVudHJ5W2ldLmlubyk7CisgICAgICBmZGlyby0+aW5vZGVfcmVhZCA9IDA7CisK KyAgICAgIHJldCA9IGN0eC0+aG9vayAoZmlsZW5hbWUsIHR5cGUsIGZkaXJvLCBjdHgtPmhvb2tf ZGF0YSk7CisgICAgICBncnViX2ZyZWUoZmlsZW5hbWUpOworICAgICAgaWYgKHJldCkKKyAgICAg ICAgcmV0dXJuIDE7CisKKyAgICAgIGkgKz0gKG5hbWVfbGVuICsgRjJGU19TTE9UX0xFTiAtIDEp IC8gRjJGU19TTE9UX0xFTjsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQK K2dydWJfZjJmc19pdGVyYXRlX2lubGluZV9kaXIgKHN0cnVjdCBncnViX2YyZnNfaW5vZGUgKmRp ciwKKwlzdHJ1Y3QgZ3J1Yl9mMmZzX2Rpcl9pdGVyX2N0eCAqY3R4KQoreworICBzdHJ1Y3QgZ3J1 Yl9mMmZzX2lubGluZV9kZW50cnkgKmRlX2JsazsKKworICBkZV9ibGsgPSAoc3RydWN0IGdydWJf ZjJmc19pbmxpbmVfZGVudHJ5ICopIF9faW5saW5lX2FkZHIgKGRpcik7CisKKyAgY3R4LT5iaXRt YXAgPSBkZV9ibGstPmRlbnRyeV9iaXRtYXA7CisgIGN0eC0+ZGVudHJ5ID0gZGVfYmxrLT5kZW50 cnk7CisgIGN0eC0+ZmlsZW5hbWUgPSBkZV9ibGstPmZpbGVuYW1lOworICBjdHgtPm1heCA9IE5S X0lOTElORV9ERU5UUlk7CisKKyAgcmV0dXJuIGdydWJfZjJmc19jaGVja19kZW50cmllcyAoY3R4 KTsKK30KKworc3RhdGljIGludAorZ3J1Yl9mMmZzX2l0ZXJhdGVfZGlyIChncnViX2ZzaGVscF9u b2RlX3QgZGlyLAorCWdydWJfZnNoZWxwX2l0ZXJhdGVfZGlyX2hvb2tfdCBob29rLCB2b2lkICpo b29rX2RhdGEpCit7CisgIHN0cnVjdCBncnViX2ZzaGVscF9ub2RlICpkaXJvID0gKHN0cnVjdCBn cnViX2ZzaGVscF9ub2RlICopIGRpcjsKKyAgc3RydWN0IGdydWJfZjJmc19pbm9kZSAqaW5vZGU7 CisgIHN0cnVjdCBncnViX2YyZnNfZGlyX2l0ZXJfY3R4IGN0eCA9IHsKKyAgICAuZGF0YSA9IGRp cm8tPmRhdGEsCisgICAgLmhvb2sgPSBob29rLAorICAgIC5ob29rX2RhdGEgPSBob29rX2RhdGEK KyAgfTsKKyAgZ3J1Yl9vZmZfdCBmcG9zID0gMDsKKworICBpZiAoIWRpcm8tPmlub2RlX3JlYWQp CisgICAgeworICAgICAgZ3J1Yl9mMmZzX3JlYWRfbm9kZSAoZGlyby0+ZGF0YSwgZGlyby0+aW5v LCAmZGlyby0+aW5vZGUpOworICAgICAgaWYgKGdydWJfZXJybm8pCisJcmV0dXJuIDA7CisgICAg fQorCisgIGlub2RlID0gJmRpcm8tPmlub2RlLmk7CisKKyAgaWYgKGlub2RlLT5pX2lubGluZSAm IEYyRlNfSU5MSU5FX0RFTlRSWSkKKyAgICByZXR1cm4gZ3J1Yl9mMmZzX2l0ZXJhdGVfaW5saW5l X2RpciAoaW5vZGUsICZjdHgpOworCisgIHdoaWxlIChmcG9zIDwgZ3J1Yl9mMmZzX2ZpbGVfc2l6 ZSAoaW5vZGUpKQorICAgIHsKKyAgICAgIHN0cnVjdCBncnViX2YyZnNfZGVudHJ5X2Jsb2NrICpk ZV9ibGs7CisgICAgICBjaGFyICpidWY7CisgICAgICBpbnQgcmV0OworCisgICAgICBidWYgPSBn cnViX3phbGxvYyAoRjJGU19CTEtTSVpFKTsKKyAgICAgIGlmICghYnVmKQorICAgICAgICByZXR1 cm4gMDsKKworICAgICAgZ3J1Yl9mMmZzX3JlYWRfZmlsZSAoZGlybywgMCwgMCwgZnBvcywgRjJG U19CTEtTSVpFLCBidWYpOworICAgICAgaWYgKGdydWJfZXJybm8pCisgICAgICAgIHsKKyAgICAg ICAgICBncnViX2ZyZWUgKGJ1Zik7CisgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKwor ICAgICAgZGVfYmxrID0gKHN0cnVjdCBncnViX2YyZnNfZGVudHJ5X2Jsb2NrICopIGJ1ZjsKKwor ICAgICAgY3R4LmJpdG1hcCA9IGRlX2Jsay0+ZGVudHJ5X2JpdG1hcDsKKyAgICAgIGN0eC5kZW50 cnkgPSBkZV9ibGstPmRlbnRyeTsKKyAgICAgIGN0eC5maWxlbmFtZSA9IGRlX2Jsay0+ZmlsZW5h bWU7CisgICAgICBjdHgubWF4ID0gTlJfREVOVFJZX0lOX0JMT0NLOworCisgICAgICByZXQgPSBn cnViX2YyZnNfY2hlY2tfZGVudHJpZXMgKCZjdHgpOworICAgICAgZ3J1Yl9mcmVlIChidWYpOwor ICAgICAgaWYgKHJldCkKKyAgICAgICAgcmV0dXJuIDE7CisKKyAgICAgIGZwb3MgKz0gRjJGU19C TEtTSVpFOworICAgIH0KKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK2dydWJfZjJmc19k aXJfaXRlciAoY29uc3QgY2hhciAqZmlsZW5hbWUsIGVudW0gZ3J1Yl9mc2hlbHBfZmlsZXR5cGUg ZmlsZXR5cGUsCisJICAgICAgZ3J1Yl9mc2hlbHBfbm9kZV90IG5vZGUsIHZvaWQgKmRhdGEpCit7 CisgIHN0cnVjdCBncnViX2YyZnNfZGlyX2N0eCAqY3R4ID0gZGF0YTsKKyAgc3RydWN0IGdydWJf ZGlyaG9va19pbmZvIGluZm87CisKKyAgZ3J1Yl9tZW1zZXQgKCZpbmZvLCAwLCBzaXplb2YgKGlu Zm8pKTsKKyAgaWYgKCFub2RlLT5pbm9kZV9yZWFkKQorICAgIHsKKyAgICAgIGdydWJfZjJmc19y ZWFkX25vZGUgKGN0eC0+ZGF0YSwgbm9kZS0+aW5vLCAmbm9kZS0+aW5vZGUpOworICAgICAgaWYg KCFncnViX2Vycm5vKQorICAgICAgICBub2RlLT5pbm9kZV9yZWFkID0gMTsKKyAgICAgIGdydWJf ZXJybm8gPSBHUlVCX0VSUl9OT05FOworICAgIH0KKyAgaWYgKG5vZGUtPmlub2RlX3JlYWQpCisg ICAgeworICAgICAgaW5mby5tdGltZXNldCA9IDE7CisgICAgICBpbmZvLm10aW1lID0gZ3J1Yl9s ZV90b19jcHU2NCAobm9kZS0+aW5vZGUuaS5pX210aW1lKTsKKyAgICB9CisKKyAgaW5mby5kaXIg PSAoKGZpbGV0eXBlICYgR1JVQl9GU0hFTFBfVFlQRV9NQVNLKSA9PSBHUlVCX0ZTSEVMUF9ESVIp OworICBncnViX2ZyZWUgKG5vZGUpOworICByZXR1cm4gY3R4LT5ob29rIChmaWxlbmFtZSwgJmlu Zm8sIGN0eC0+aG9va19kYXRhKTsKK30KKworc3RhdGljIGdydWJfZXJyX3QKK2dydWJfZjJmc19k aXIgKGdydWJfZGV2aWNlX3QgZGV2aWNlLCBjb25zdCBjaGFyICpwYXRoLAorCWdydWJfZnNfZGly X2hvb2tfdCBob29rLCB2b2lkICpob29rX2RhdGEpCit7CisgIHN0cnVjdCBncnViX2YyZnNfZGly X2N0eCBjdHggPSB7CisgICAgLmhvb2sgPSBob29rLAorICAgIC5ob29rX2RhdGEgPSBob29rX2Rh dGEKKyAgfTsKKyAgc3RydWN0IGdydWJfZnNoZWxwX25vZGUgKmZkaXJvID0gMDsKKworICBncnVi X2RsX3JlZiAobXlfbW9kKTsKKworICBjdHguZGF0YSA9IGdydWJfZjJmc19tb3VudCAoZGV2aWNl LT5kaXNrKTsKKyAgaWYgKCFjdHguZGF0YSkKKyAgICBnb3RvIGZhaWw7CisKKyAgZ3J1Yl9mc2hl bHBfZmluZF9maWxlIChwYXRoLCAmY3R4LmRhdGEtPmRpcm9wZW4sICZmZGlybywKKwkJZ3J1Yl9m MmZzX2l0ZXJhdGVfZGlyLCBncnViX2YyZnNfcmVhZF9zeW1saW5rLAorCQlHUlVCX0ZTSEVMUF9E SVIpOworICBpZiAoZ3J1Yl9lcnJubykKKyAgICBnb3RvIGZhaWw7CisKKyAgZ3J1Yl9mMmZzX2l0 ZXJhdGVfZGlyIChmZGlybywgZ3J1Yl9mMmZzX2Rpcl9pdGVyLCAmY3R4KTsKKworZmFpbDoKKyAg aWYgKGZkaXJvICE9ICZjdHguZGF0YS0+ZGlyb3BlbikKKyAgICBncnViX2ZyZWUgKGZkaXJvKTsK KyBncnViX2ZyZWUgKGN0eC5kYXRhKTsKKyBncnViX2RsX3VucmVmIChteV9tb2QpOworIHJldHVy biBncnViX2Vycm5vOworfQorCisKKy8qIE9wZW4gYSBmaWxlIG5hbWVkIE5BTUUgYW5kIGluaXRp YWxpemUgRklMRS4gICovCitzdGF0aWMgZ3J1Yl9lcnJfdAorZ3J1Yl9mMmZzX29wZW4gKHN0cnVj dCBncnViX2ZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgKm5hbWUpCit7CisgIHN0cnVjdCBncnViX2Yy ZnNfZGF0YSAqZGF0YSA9IE5VTEw7CisgIHN0cnVjdCBncnViX2ZzaGVscF9ub2RlICpmZGlybyA9 IDA7CisgIHN0cnVjdCBncnViX2YyZnNfaW5vZGUgKmlub2RlOworCisgIGdydWJfZGxfcmVmICht eV9tb2QpOworCisgIGRhdGEgPSBncnViX2YyZnNfbW91bnQgKGZpbGUtPmRldmljZS0+ZGlzayk7 CisgIGlmICghZGF0YSkKKyAgICBnb3RvIGZhaWw7CisKKyAgZ3J1Yl9mc2hlbHBfZmluZF9maWxl IChuYW1lLCAmZGF0YS0+ZGlyb3BlbiwgJmZkaXJvLAorCQkJZ3J1Yl9mMmZzX2l0ZXJhdGVfZGly LCBncnViX2YyZnNfcmVhZF9zeW1saW5rLAorCQkJR1JVQl9GU0hFTFBfUkVHKTsKKyAgaWYgKGdy dWJfZXJybm8pCisgICAgZ290byBmYWlsOworCisgIGlmICghZmRpcm8tPmlub2RlX3JlYWQpCisg ICAgeworICAgICAgZ3J1Yl9mMmZzX3JlYWRfbm9kZSAoZGF0YSwgZmRpcm8tPmlubywgJmZkaXJv LT5pbm9kZSk7CisgICAgICBpZiAoZ3J1Yl9lcnJubykKKwlnb3RvIGZhaWw7CisgICAgfQorCisg IGdydWJfbWVtY3B5IChkYXRhLT5pbm9kZSwgJmZkaXJvLT5pbm9kZSwgc2l6ZW9mICgqZGF0YS0+ aW5vZGUpKTsKKyAgZ3J1Yl9mcmVlIChmZGlybyk7CisKKyAgaW5vZGUgPSAmKGRhdGEtPmlub2Rl LT5pKTsKKyAgZmlsZS0+c2l6ZSA9IGdydWJfZjJmc19maWxlX3NpemUgKGlub2RlKTsKKyAgZmls ZS0+ZGF0YSA9IGRhdGE7CisgIGZpbGUtPm9mZnNldCA9IDA7CisKKyAgaWYgKGlub2RlLT5pX2lu bGluZSAmIEYyRlNfSU5MSU5FX0RBVEEgJiYgZmlsZS0+c2l6ZSA+IE1BWF9JTkxJTkVfREFUQSkK KyAgICBncnViX2Vycm9yIChHUlVCX0VSUl9CQURfRlMsICJjb3JydXB0ZWQgaW5saW5lX2RhdGE6 IG5lZWQgZnNjayIpOworICByZXR1cm4gMDsKKworZmFpbDoKKyAgaWYgKGZkaXJvICE9ICZkYXRh LT5kaXJvcGVuKQorICAgIGdydWJfZnJlZSAoZmRpcm8pOworICBncnViX2ZyZWUgKGRhdGEpOwor CisgIGdydWJfZGxfdW5yZWYgKG15X21vZCk7CisKKyAgcmV0dXJuIGdydWJfZXJybm87Cit9CisK K3N0YXRpYyBncnViX3NzaXplX3QKK2dydWJfZjJmc19yZWFkIChncnViX2ZpbGVfdCBmaWxlLCBj aGFyICpidWYsIGdydWJfc2l6ZV90IGxlbikKK3sKKyAgc3RydWN0IGdydWJfZjJmc19kYXRhICpk YXRhID0gKHN0cnVjdCBncnViX2YyZnNfZGF0YSAqKSBmaWxlLT5kYXRhOworCisgIHJldHVybiBn cnViX2YyZnNfcmVhZF9maWxlICgmZGF0YS0+ZGlyb3BlbiwKKwkJZmlsZS0+cmVhZF9ob29rLCBm aWxlLT5yZWFkX2hvb2tfZGF0YSwKKwkJZmlsZS0+b2Zmc2V0LCBsZW4sIGJ1Zik7Cit9CisKK3N0 YXRpYyBncnViX2Vycl90CitncnViX2YyZnNfY2xvc2UgKGdydWJfZmlsZV90IGZpbGUpCit7Cisg IHN0cnVjdCBncnViX2YyZnNfZGF0YSAqZGF0YSA9IChzdHJ1Y3QgZ3J1Yl9mMmZzX2RhdGEgKikg ZmlsZS0+ZGF0YTsKKworICBncnViX2ZyZWUgKGRhdGEpOworCisgIGdydWJfZGxfdW5yZWYgKG15 X21vZCk7CisKKyAgcmV0dXJuIEdSVUJfRVJSX05PTkU7Cit9CisKK3N0YXRpYyBncnViX3VpbnQ4 X3QgKgorZ3J1Yl9mMmZzX3V0ZjE2X3RvX3V0ZjggKGdydWJfdWludDE2X3QgKmluX2J1Zl9sZSkK K3sKKyAgZ3J1Yl91aW50MTZfdCBpbl9idWZbTUFYX1ZPTFVNRV9OQU1FXTsKKyAgZ3J1Yl91aW50 OF90ICpvdXRfYnVmOworICBpbnQgbGVuID0gMDsKKworICBvdXRfYnVmID0gZ3J1Yl9tYWxsb2Mg KE1BWF9WT0xVTUVfTkFNRSAqIEdSVUJfTUFYX1VURjhfUEVSX1VURjE2ICsgMSk7CisgIGlmICgh b3V0X2J1ZikKKyAgICByZXR1cm4gTlVMTDsKKworICB3aGlsZSAoKmluX2J1Zl9sZSAhPSAwICYm IGxlbiA8IE1BWF9WT0xVTUVfTkFNRSkgeworICAgIGluX2J1ZltsZW5dID0gZ3J1Yl9sZV90b19j cHUxNiAoaW5fYnVmX2xlW2xlbl0pOworICAgIGxlbisrOworICB9CisKKyAgKmdydWJfdXRmMTZf dG9fdXRmOCAob3V0X2J1ZiwgaW5fYnVmLCBsZW4pID0gJ1wwJzsKKyAgcmV0dXJuIG91dF9idWY7 Cit9CisKK3N0YXRpYyBncnViX2Vycl90CitncnViX2YyZnNfbGFiZWwgKGdydWJfZGV2aWNlX3Qg ZGV2aWNlLCBjaGFyICoqbGFiZWwpCit7CisgIHN0cnVjdCBncnViX2YyZnNfZGF0YSAqZGF0YTsK KyAgZ3J1Yl9kaXNrX3QgZGlzayA9IGRldmljZS0+ZGlzazsKKworICBncnViX2RsX3JlZiAobXlf bW9kKTsKKworICBkYXRhID0gZ3J1Yl9mMmZzX21vdW50IChkaXNrKTsKKyAgaWYgKGRhdGEpCisg ICAgKmxhYmVsID0gKGNoYXIgKikgZ3J1Yl9mMmZzX3V0ZjE2X3RvX3V0ZjggKGRhdGEtPnNibG9j ay52b2x1bWVfbmFtZSk7CisgIGVsc2UKKyAgICAqbGFiZWwgPSBOVUxMOworCisgIGdydWJfZnJl ZSAoZGF0YSk7CisgIGdydWJfZGxfdW5yZWYgKG15X21vZCk7CisgIHJldHVybiBncnViX2Vycm5v OworfQorCitzdGF0aWMgZ3J1Yl9lcnJfdAorZ3J1Yl9mMmZzX3V1aWQgKGdydWJfZGV2aWNlX3Qg ZGV2aWNlLCBjaGFyICoqdXVpZCkKK3sKKyAgc3RydWN0IGdydWJfZjJmc19kYXRhICpkYXRhOwor ICBncnViX2Rpc2tfdCBkaXNrID0gZGV2aWNlLT5kaXNrOworCisgIGdydWJfZGxfcmVmIChteV9t b2QpOworCisgIGRhdGEgPSBncnViX2YyZnNfbW91bnQgKGRpc2spOworICBpZiAoZGF0YSkKKyAg ICB7CisgICAgICAqdXVpZCA9CisJZ3J1Yl94YXNwcmludGYKKwkoIiUwMnglMDJ4JTAyeCUwMngt JTAyeCUwMngtJTAyeCUwMngtJTAyeCUwMngtJTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4IiwKKwkJ ZGF0YS0+c2Jsb2NrLnV1aWRbMF0sIGRhdGEtPnNibG9jay51dWlkWzFdLAorCQlkYXRhLT5zYmxv Y2sudXVpZFsyXSwgZGF0YS0+c2Jsb2NrLnV1aWRbM10sCisJCWRhdGEtPnNibG9jay51dWlkWzRd LCBkYXRhLT5zYmxvY2sudXVpZFs1XSwKKwkJZGF0YS0+c2Jsb2NrLnV1aWRbNl0sIGRhdGEtPnNi bG9jay51dWlkWzddLAorCQlkYXRhLT5zYmxvY2sudXVpZFs4XSwgZGF0YS0+c2Jsb2NrLnV1aWRb OV0sCisJCWRhdGEtPnNibG9jay51dWlkWzEwXSwgZGF0YS0+c2Jsb2NrLnV1aWRbMTFdLAorCQlk YXRhLT5zYmxvY2sudXVpZFsxMl0sIGRhdGEtPnNibG9jay51dWlkWzEzXSwKKwkJZGF0YS0+c2Js b2NrLnV1aWRbMTRdLCBkYXRhLT5zYmxvY2sudXVpZFsxNV0pOworICAgIH0KKyAgZWxzZQorICAg ICp1dWlkID0gTlVMTDsKKworICBncnViX2ZyZWUgKGRhdGEpOworICBncnViX2RsX3VucmVmICht eV9tb2QpOworICByZXR1cm4gZ3J1Yl9lcnJubzsKK30KKworc3RhdGljIHN0cnVjdCBncnViX2Zz IGdydWJfZjJmc19mcyA9IHsKKyAgLm5hbWUgPSAiZjJmcyIsCisgIC5kaXIgPSBncnViX2YyZnNf ZGlyLAorICAub3BlbiA9IGdydWJfZjJmc19vcGVuLAorICAucmVhZCA9IGdydWJfZjJmc19yZWFk LAorICAuY2xvc2UgPSBncnViX2YyZnNfY2xvc2UsCisgIC5sYWJlbCA9IGdydWJfZjJmc19sYWJl bCwKKyAgLnV1aWQgPSBncnViX2YyZnNfdXVpZCwKKyNpZmRlZiBHUlVCX1VUSUwKKyAgLnJlc2Vy dmVkX2ZpcnN0X3NlY3RvciA9IDEsCisgIC5ibG9ja2xpc3RfaW5zdGFsbCA9IDAsCisjZW5kaWYK KyAgLm5leHQgPSAwCit9OworCitHUlVCX01PRF9JTklUIChmMmZzKQoreworICBncnViX2ZzX3Jl Z2lzdGVyICgmZ3J1Yl9mMmZzX2ZzKTsKKyAgbXlfbW9kID0gbW9kOworfQorCitHUlVCX01PRF9G SU5JIChmMmZzKQoreworICBncnViX2ZzX3VucmVnaXN0ZXIgKCZncnViX2YyZnNfZnMpOworfQpk aWZmIC0tZ2l0IGEvcG8vZXhjbHVkZS5wb3QgYi9wby9leGNsdWRlLnBvdAppbmRleCAwYTliMjE1 Li44MTYwODljIDEwMDY0NAotLS0gYS9wby9leGNsdWRlLnBvdAorKysgYi9wby9leGNsdWRlLnBv dApAQCAtMTIxNCw2ICsxMjE0LDcgQEAgbXNnc3RyICIiCiAKICM6IGdydWItY29yZS9jb21tYW5k cy94bnVfdXVpZC5jOjc1IGdydWItY29yZS9mcy9qZnMuYzo5MjQKICM6IGdydWItY29yZS9mcy9u aWxmczIuYzoxMTM1CisjOiBncnViLWNvcmUvZnMvZjJmcy5jOjEyNTkKICMsIGMtZm9ybWF0CiBt c2dpZCAiJTAyeCUwMnglMDJ4JTAyeC0lMDJ4JTAyeC0lMDJ4JTAyeC0lMDJ4JTAyeC0lMDJ4JTAy eCUwMnglMDJ4JTAyeCUwMngiCiBtc2dzdHIgIiIKZGlmZiAtLWdpdCBhL3Rlc3RzL2YyZnNfdGVz dC5pbiBiL3Rlc3RzL2YyZnNfdGVzdC5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwLi4xZWE3N2M4Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZjJmc190ZXN0LmluCkBAIC0w LDAgKzEsMTkgQEAKKyMhL2Jpbi9zaAorCitzZXQgLWUKKworaWYgWyAieCRFVUlEIiA9ICJ4IiBd IDsgdGhlbgorIEVVSUQ9YGlkIC11YAorZmkKKworaWYgWyAiJEVVSUQiICE9IDAgXSA7IHRoZW4K KyBleGl0IDc3CitmaQorCitpZiAhIHdoaWNoIG1rZnMuZjJmcyA+L2Rldi9udWxsIDI+JjE7IHRo ZW4KKyBlY2hvICJta2ZzLmYyZnMgbm90IGluc3RhbGxlZDsgY2Fubm90IHRlc3QgZjJmcy4iCisg ZXhpdCA3NworZmkKKworCisiQGJ1aWxkZGlyQC9ncnViLWZzLXRlc3RlciIgZjJmcwpkaWZmIC0t Z2l0IGEvdGVzdHMvdXRpbC9ncnViLWZzLXRlc3Rlci5pbiBiL3Rlc3RzL3V0aWwvZ3J1Yi1mcy10 ZXN0ZXIuaW4KaW5kZXggNDI0ZGUyMi4uZTNlNDEwOSAxMDA2NDQKLS0tIGEvdGVzdHMvdXRpbC9n cnViLWZzLXRlc3Rlci5pbgorKysgYi90ZXN0cy91dGlsL2dydWItZnMtdGVzdGVyLmluCkBAIC0x NDIsNyArMTQyLDcgQEAgZm9yICgoTE9HU0VDU0laRT1NSU5MT0dTRUNTSVpFO0xPR1NFQ1NJWkU8 PU1BWExPR1NFQ1NJWkU7TE9HU0VDU0laRT1MT0dTRUNTSVpFICsKIAl4c3F1YXNoKikKIAkgICAg TUlOQkxLU0laRT00MDk2CiAJICAgIE1BWEJMS1NJWkU9MTA0ODU3Njs7Ci0JeHhmcykKKwl4eGZz fHhmMmZzKQogCSAgICBNSU5CTEtTSVpFPSRTRUNTSVpFCiAJCSMgT1MgTGltaXRhdGlvbjogR05V L0xpbnV4IGRvZXNuJ3QgYWNjZXB0ID4gNDA5NgogCSAgICBNQVhCTEtTSVpFPTQwOTY7OwpAQCAt MjY1LDYgKzI2NSwxMCBAQCBmb3IgKChMT0dTRUNTSVpFPU1JTkxPR1NFQ1NJWkU7TE9HU0VDU0la RTw9TUFYTE9HU0VDU0laRTtMT0dTRUNTSVpFPUxPR1NFQ1NJWkUgKwogCQl4ImJ0cmZzIiopCiAJ CSAgICBGU0xBQkVMPSJncnViXzsvdGVzdMOp8K+mm/Cvpp3wn5iB0LrQuNGA0LjRgmkgdXJld2Zj ZW5pdWV3cnVldnJld251dWlyZXVyZXZ1ZXVybmlldnJld2ZuZXJmY25ldmlyaXZpbnJld3ZuaXJl d25pdnJld2l1dmNyZXd2bnVld3ZycnJld25pdWVyd3JlaXV2aXVyZXdpdXZpdXJld251dmV3bnZy ZW51cm51bnV2cmV2dXVyZXJlamlyZW12cmVpam52Y3JlaXZpcmUgbnZlcml2bnJlaXZyZXZudXJl aW9yZm5mcnZvZW9pcm9pcmVvaXJlb2lmcmVmb2llcm9pZm9pcmVvaWYiOzsKIAorCSAgICAjIEZT IExJTUlUQVRJT046IGYyZnMgbGFiZWwgaXMgYXQgbW9zdCA1MTIgVVRGLTE2IGNoYXJzCisJCXgi ZjJmcyIpCisJCSAgICBGU0xBQkVMPSJncnViXzsvdGVzdMOp5I+M5JCT5I+V0LrQuNGA0LjRgml1 cmV3ZmNlbml1ZXdydWV3bnV1aXJldXJldnVldXJuaWV2cmV3Zm5lcmZjbmV2aXJpdmlucmV3dm5p cmV3bml2cmV3aXV2Y3Jld3ZudWV3dnJycmV3bml1ZXJ3cmVpdXZpdXJld2l1dml1cmV3bnV2ZXdu dnJlbnVybnVudXZyZXZ1dXJlcmVqaXJlbXZyZWlqbnZ2Y3JlaXZpcmUgbnZlcml2bnJlaXZyZXZu dXJlaW9yZm5mcnZvZW9pcm9pcmVvaXJlb2lmcmVmb2llcm9pZm9pcnZjcmVpdmlyZSBudmVyaXZu cmVpdnJldm51cmVpb3JmbmZydm9lb2lyb2lyZW9pcmVvaWZyZWZvaWVyb2lmb2lyY3JlaXZpcmUg bnZlcml2bnJlaXZyZXZudXJlaW9yZm5mcnZvZW9pcm9pcmVvaXJlb2lmcmVmb2llcm9pZm9pcmVv aWZvaXEiOzsKKwogCSAgICAjIEZTIExJTUlUQVRJT046IGV4ZmF0IGlzIGF0IG1vc3QgMTUgVVRG LTE2IGNoYXJzCiAJCXgiZXhmYXQiKQogCQkgICAgRlNMQUJFTD0iZ8Op0YIgOy/wr6ab8K+mnfCf mIHQutC40YAiOzsKQEAgLTQ3NCw3ICs0NzgsNyBAQCBmb3IgKChMT0dTRUNTSVpFPU1JTkxPR1NF Q1NJWkU7TE9HU0VDU0laRTw9TUFYTE9HU0VDU0laRTtMT0dTRUNTSVpFPUxPR1NFQ1NJWkUgKwog CSAgICAjIEZJWE1FOiBOb3Qgc3VyZSBhYm91dCBCdHJGUywgTlRGUywgSkZTLCBBRlMsIFVERiBh bmQgU0ZTLiBDaGVjayBpdC4KIAkjIEZTIExJTUlUQVRJT046IGFzIGZhciBhcyBJIGtub3cgdGhv c2UgRlMgZG9uJ3Qgc3RvcmUgdGhlaXIgbGFzdCBtb2RpZmljYXRpb24gZGF0ZS4KIAkJeCJqZnNf Y2FzZWlucyIgfCB4ImpmcyIgfCB4InhmcyIgfCB4Inhmc19jcmMiIHwgeCJidHJmcyIqIHwgeCJy ZWlzZXJmc19vbGQiIHwgeCJyZWlzZXJmcyIgXAotCQkgICAgfCB4ImJmcyIgfCB4ImFmcyIgXAor CQkgICAgfCB4ImJmcyIgfCB4ImFmcyIgfCB4ImYyZnMiIFwKIAkJICAgIHwgeCJ0YXJmcyIgfCB4 ImNwaW9fIiogfCB4Im1pbml4IiB8IHgibWluaXgyIiBcCiAJCSAgICB8IHgibWluaXgzIiB8IHgi bnRmcyIqIHwgeCJ1ZGYiIHwgeCJzZnMiKikKIAkJICAgIE5PRlNUSU1FPXk7OwpAQCAtNzUzLDYg Kzc1Nyw4IEBAIGZvciAoKExPR1NFQ1NJWkU9TUlOTE9HU0VDU0laRTtMT0dTRUNTSVpFPD1NQVhM T0dTRUNTSVpFO0xPR1NFQ1NJWkU9TE9HU0VDU0laRSArCiAJCSAgICBNT1VOVERFVklDRT0iL2Rl di9tYXBwZXIvZ3J1Yl90ZXN0LXRlc3R2b2wiCiAJCSAgICBNT1VOVEZTPWV4dDIKIAkJICAgICJt a2ZzLmV4dDIiIC1MICIkRlNMQUJFTCIgLXEgIiR7TU9VTlRERVZJQ0V9IiAgOzsKKwkJeGYyZnMp CisJCSAgICAibWtmcy5mMmZzIiAtbCAiJEZTTEFCRUwiIC1xICIke0xPREVWSUNFU1swXX0iIDs7 CiAJCXhuaWxmczIpCiAJCSAgICAibWtmcy5uaWxmczIiIC1MICIkRlNMQUJFTCIgLWIgJEJMS1NJ WkUgIC1xICIke0xPREVWSUNFU1swXX0iIDs7CiAJCXhleHQyX29sZCkKLS0gCjIuNi4zCgoKLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tClNpdGUyNHg3IEFQTSBJbnNpZ2h0OiBHZXQgRGVlcCBWaXNpYmls aXR5IGludG8gQXBwbGljYXRpb24gUGVyZm9ybWFuY2UKQVBNICsgTW9iaWxlIEFQTSArIFJVTTog TW9uaXRvciAzIEFwcCBpbnN0YW5jZXMgYXQganVzdCAkMzUvTW9udGgKTW9uaXRvciBlbmQtdG8t ZW5kIHdlYiB0cmFuc2FjdGlvbnMgYW5kIHRha2UgY29ycmVjdGl2ZSBhY3Rpb25zIG5vdwpUcm91 Ymxlc2hvb3QgZmFzdGVyIGFuZCBpbXByb3ZlIGVuZC11c2VyIGV4cGVyaWVuY2UuIFNpZ251cCBO b3chCmh0dHA6Ly9wdWJhZHMuZy5kb3VibGVjbGljay5uZXQvZ2FtcGFkL2Nsaz9pZD0yNzI0ODcx NTEmaXU9LzQxNDAKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X18KTGludXgtZjJmcy1kZXZlbCBtYWlsaW5nIGxpc3QKTGludXgtZjJmcy1kZXZlbEBsaXN0cy5z b3VyY2Vmb3JnZS5uZXQKaHR0cHM6Ly9saXN0cy5zb3VyY2Vmb3JnZS5uZXQvbGlzdHMvbGlzdGlu Zm8vbGludXgtZjJmcy1kZXZlbAo=