From mboxrd@z Thu Jan 1 00:00:00 1970 From: Michal Wajdeczko Subject: [PATCH v2 6/6] drm/i915/guc: Move GuC declarations and functions into dedicated files Date: Mon, 2 Oct 2017 14:01:09 +0000 Message-ID: <20171002140109.52844-7-michal.wajdeczko@intel.com> References: <20171002140109.52844-1-michal.wajdeczko@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga06.intel.com (mga06.intel.com [134.134.136.31]) by gabe.freedesktop.org (Postfix) with ESMTPS id 19A0C6E32A for ; Mon, 2 Oct 2017 14:01:35 +0000 (UTC) In-Reply-To: <20171002140109.52844-1-michal.wajdeczko@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org V2Ugd2FudCB0byBrZWVwIEd1QyBzcGVjaWZpYyBjb2RlIGluIHNlcGFyYXRlZCBmaWxlcy4KCnYy OiBtb3ZlIGFsbCBmdW5jdGlvbnMgaW4gc2luZ2xlIHBhdGNoIChKb29uYXMpCiAgICBmaXggb2xk IGNoZWNrcGF0Y2ggaXNzdWVzIChTYWdhcikKClNpZ25lZC1vZmYtYnk6IE1pY2hhbCBXYWpkZWN6 a28gPG1pY2hhbC53YWpkZWN6a29AaW50ZWwuY29tPgpDYzogSm9vbmFzIExhaHRpbmVuIDxqb29u YXMubGFodGluZW5AbGludXguaW50ZWwuY29tPgpDYzogQ2hyaXMgV2lsc29uIDxjaHJpc0BjaHJp cy13aWxzb24uY28udWs+CkNjOiBTYWdhciBBcnVuIEthbWJsZSA8c2FnYXIuYS5rYW1ibGVAaW50 ZWwuY29tPgpSZXZpZXdlZC1ieTogU2FnYXIgQXJ1biBLYW1ibGUgPHNhZ2FyLmEua2FtYmxlQGlu dGVsLmNvbT4gIzEKLS0tCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZSAgICAgICAgICAg ICAgfCAgIDEgKwogZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9ndWNfc3VibWlzc2lvbi5jIHwg IDk0IC0tLS0tLS0tLS0tCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9ndWMuYyAgICAgICAg ICAgfCAyNjIgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIGRyaXZlcnMvZ3B1L2RybS9p OTE1L2ludGVsX2d1Yy5oICAgICAgICAgICB8IDE3OCArKysrKysrKysrKysrKysrKysrKwogZHJp dmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfdWMuYyAgICAgICAgICAgIHwgMTQ2ICstLS0tLS0tLS0t LS0tLS0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3VjLmggICAgICAgICAgICB8IDE0NiAr LS0tLS0tLS0tLS0tLS0tCiA2IGZpbGVzIGNoYW5nZWQsIDQ0NCBpbnNlcnRpb25zKCspLCAzODMg ZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50 ZWxfZ3VjLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9n dWMuaAoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlIGIvZHJpdmVy cy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUKaW5kZXggNDg1MGYyNi4uNTFkMGQyOSAxMDA2NDQKLS0t IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5 MTUvTWFrZWZpbGUKQEAgLTYwLDYgKzYwLDcgQEAgaTkxNS15ICs9IGk5MTVfY21kX3BhcnNlci5v IFwKICMgZ2VuZXJhbC1wdXJwb3NlIG1pY3JvY29udHJvbGxlciAoR3VDKSBzdXBwb3J0CiBpOTE1 LXkgKz0gaW50ZWxfdWMubyBcCiAJICBpbnRlbF91Y19mdy5vIFwKKwkgIGludGVsX2d1Yy5vIFwK IAkgIGludGVsX2d1Y19jdC5vIFwKIAkgIGludGVsX2d1Y19sb2cubyBcCiAJICBpbnRlbF9ndWNf bG9hZGVyLm8gXApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9ndWNfc3Vi bWlzc2lvbi5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9ndWNfc3VibWlzc2lvbi5jCmlu ZGV4IDA0ZjEyODEuLjg5ZTJhOWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5 MTVfZ3VjX3N1Ym1pc3Npb24uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2d1Y19z dWJtaXNzaW9uLmMKQEAgLTY0Myw0OCArNjQzLDYgQEAgc3RhdGljIHZvaWQgaTkxNV9ndWNfaXJx X2hhbmRsZXIodW5zaWduZWQgbG9uZyBkYXRhKQogICogcGF0aCBvZiBpOTE1X2d1Y19zdWJtaXQo KSBhYm92ZS4KICAqLwogCi0vKioKLSAqIGludGVsX2d1Y19hbGxvY2F0ZV92bWEoKSAtIEFsbG9j YXRlIGEgR0dUVCBWTUEgZm9yIEd1QyB1c2FnZQotICogQGd1YzoJdGhlIGd1YwotICogQHNpemU6 CXNpemUgb2YgYXJlYSB0byBhbGxvY2F0ZSAoYm90aCB2aXJ0dWFsIHNwYWNlIGFuZCBtZW1vcnkp Ci0gKgotICogVGhpcyBpcyBhIHdyYXBwZXIgdG8gY3JlYXRlIGFuIG9iamVjdCBmb3IgdXNlIHdp dGggdGhlIEd1Qy4gSW4gb3JkZXIgdG8KLSAqIHVzZSBpdCBpbnNpZGUgdGhlIEd1QywgYW4gb2Jq ZWN0IG5lZWRzIHRvIGJlIHBpbm5lZCBsaWZldGltZSwgc28gd2UgYWxsb2NhdGUKLSAqIGJvdGgg c29tZSBiYWNraW5nIHN0b3JhZ2UgYW5kIGEgcmFuZ2UgaW5zaWRlIHRoZSBHbG9iYWwgR1RULiBX ZSBtdXN0IHBpbgotICogaXQgaW4gdGhlIEdHVFQgc29tZXdoZXJlIG90aGVyIHRoYW4gdGhhbiBb MCwgR1VDX1dPUENNX1RPUCkgYmVjYXVzZSB0aGF0Ci0gKiByYW5nZSBpcyByZXNlcnZlZCBpbnNp ZGUgR3VDLgotICoKLSAqIFJldHVybjoJQSBpOTE1X3ZtYSBpZiBzdWNjZXNzZnVsLCBvdGhlcndp c2UgYW4gRVJSX1BUUi4KLSAqLwotc3RydWN0IGk5MTVfdm1hICppbnRlbF9ndWNfYWxsb2NhdGVf dm1hKHN0cnVjdCBpbnRlbF9ndWMgKmd1YywgdTMyIHNpemUpCi17Ci0Jc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmRldl9wcml2ID0gZ3VjX3RvX2k5MTUoZ3VjKTsKLQlzdHJ1Y3QgZHJtX2k5MTVf Z2VtX29iamVjdCAqb2JqOwotCXN0cnVjdCBpOTE1X3ZtYSAqdm1hOwotCWludCByZXQ7Ci0KLQlv YmogPSBpOTE1X2dlbV9vYmplY3RfY3JlYXRlKGRldl9wcml2LCBzaXplKTsKLQlpZiAoSVNfRVJS KG9iaikpCi0JCXJldHVybiBFUlJfQ0FTVChvYmopOwotCi0Jdm1hID0gaTkxNV92bWFfaW5zdGFu Y2Uob2JqLCAmZGV2X3ByaXYtPmdndHQuYmFzZSwgTlVMTCk7Ci0JaWYgKElTX0VSUih2bWEpKQot CQlnb3RvIGVycjsKLQotCXJldCA9IGk5MTVfdm1hX3Bpbih2bWEsIDAsIFBBR0VfU0laRSwKLQkJ CSAgIFBJTl9HTE9CQUwgfCBQSU5fT0ZGU0VUX0JJQVMgfCBHVUNfV09QQ01fVE9QKTsKLQlpZiAo cmV0KSB7Ci0JCXZtYSA9IEVSUl9QVFIocmV0KTsKLQkJZ290byBlcnI7Ci0JfQotCi0JcmV0dXJu IHZtYTsKLQotZXJyOgotCWk5MTVfZ2VtX29iamVjdF9wdXQob2JqKTsKLQlyZXR1cm4gdm1hOwot fQotCiAvKiBDaGVjayB0aGF0IGEgZG9vcmJlbGwgcmVnaXN0ZXIgaXMgaW4gdGhlIGV4cGVjdGVk IHN0YXRlICovCiBzdGF0aWMgYm9vbCBkb29yYmVsbF9vayhzdHJ1Y3QgaW50ZWxfZ3VjICpndWMs IHUxNiBkYl9pZCkKIHsKQEAgLTEyMTIsNTUgKzExNzAsMyBAQCB2b2lkIGk5MTVfZ3VjX3N1Ym1p c3Npb25fZGlzYWJsZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCiAJZ3VjX2Ns aWVudF9mcmVlKGd1Yy0+ZXhlY2J1Zl9jbGllbnQpOwogCWd1Yy0+ZXhlY2J1Zl9jbGllbnQgPSBO VUxMOwogfQotCi0vKioKLSAqIGludGVsX2d1Y19zdXNwZW5kKCkgLSBub3RpZnkgR3VDIGVudGVy aW5nIHN1c3BlbmQgc3RhdGUKLSAqIEBkZXZfcHJpdjoJaTkxNSBkZXZpY2UgcHJpdmF0ZQotICov Ci1pbnQgaW50ZWxfZ3VjX3N1c3BlbmQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2 KQotewotCXN0cnVjdCBpbnRlbF9ndWMgKmd1YyA9ICZkZXZfcHJpdi0+Z3VjOwotCXN0cnVjdCBp OTE1X2dlbV9jb250ZXh0ICpjdHg7Ci0JdTMyIGRhdGFbM107Ci0KLQlpZiAoZ3VjLT5mdy5sb2Fk X3N0YXR1cyAhPSBJTlRFTF9VQ19GSVJNV0FSRV9TVUNDRVNTKQotCQlyZXR1cm4gMDsKLQotCWdl bjlfZGlzYWJsZV9ndWNfaW50ZXJydXB0cyhkZXZfcHJpdik7Ci0KLQljdHggPSBkZXZfcHJpdi0+ a2VybmVsX2NvbnRleHQ7Ci0KLQlkYXRhWzBdID0gSU5URUxfR1VDX0FDVElPTl9FTlRFUl9TX1NU QVRFOwotCS8qIGFueSB2YWx1ZSBncmVhdGVyIHRoYW4gR1VDX1BPV0VSX0QwICovCi0JZGF0YVsx XSA9IEdVQ19QT1dFUl9EMTsKLQkvKiBmaXJzdCBwYWdlIGlzIHNoYXJlZCBkYXRhIHdpdGggR3VD ICovCi0JZGF0YVsyXSA9IGd1Y19nZ3R0X29mZnNldChjdHgtPmVuZ2luZVtSQ1NdLnN0YXRlKSAr IExSQ19HVUNTSFJfUE4gKiBQQUdFX1NJWkU7Ci0KLQlyZXR1cm4gaW50ZWxfZ3VjX3NlbmQoZ3Vj LCBkYXRhLCBBUlJBWV9TSVpFKGRhdGEpKTsKLX0KLQotLyoqCi0gKiBpbnRlbF9ndWNfcmVzdW1l KCkgLSBub3RpZnkgR3VDIHJlc3VtaW5nIGZyb20gc3VzcGVuZCBzdGF0ZQotICogQGRldl9wcml2 OglpOTE1IGRldmljZSBwcml2YXRlCi0gKi8KLWludCBpbnRlbF9ndWNfcmVzdW1lKHN0cnVjdCBk cm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKLXsKLQlzdHJ1Y3QgaW50ZWxfZ3VjICpndWMgPSAm ZGV2X3ByaXYtPmd1YzsKLQlzdHJ1Y3QgaTkxNV9nZW1fY29udGV4dCAqY3R4OwotCXUzMiBkYXRh WzNdOwotCi0JaWYgKGd1Yy0+ZncubG9hZF9zdGF0dXMgIT0gSU5URUxfVUNfRklSTVdBUkVfU1VD Q0VTUykKLQkJcmV0dXJuIDA7Ci0KLQlpZiAoaTkxNV9tb2RwYXJhbXMuZ3VjX2xvZ19sZXZlbCA+ PSAwKQotCQlnZW45X2VuYWJsZV9ndWNfaW50ZXJydXB0cyhkZXZfcHJpdik7Ci0KLQljdHggPSBk ZXZfcHJpdi0+a2VybmVsX2NvbnRleHQ7Ci0KLQlkYXRhWzBdID0gSU5URUxfR1VDX0FDVElPTl9F WElUX1NfU1RBVEU7Ci0JZGF0YVsxXSA9IEdVQ19QT1dFUl9EMDsKLQkvKiBmaXJzdCBwYWdlIGlz IHNoYXJlZCBkYXRhIHdpdGggR3VDICovCi0JZGF0YVsyXSA9IGd1Y19nZ3R0X29mZnNldChjdHgt PmVuZ2luZVtSQ1NdLnN0YXRlKSArIExSQ19HVUNTSFJfUE4gKiBQQUdFX1NJWkU7Ci0KLQlyZXR1 cm4gaW50ZWxfZ3VjX3NlbmQoZ3VjLCBkYXRhLCBBUlJBWV9TSVpFKGRhdGEpKTsKLX0KZGlmZiAt LWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2d1Yy5jIGIvZHJpdmVycy9ncHUvZHJt L2k5MTUvaW50ZWxfZ3VjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjc3 ZTUwYgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2d1Yy5j CkBAIC0wLDAgKzEsMjYyIEBACisvKgorICogQ29weXJpZ2h0IMKpIDIwMTQtMjAxNyBJbnRlbCBD b3Jwb3JhdGlvbgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2Yg Y2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdh cmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAor ICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5n IHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwg bWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBj b3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUK KyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93 aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRo aXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAorICogcGFyYWdyYXBoKSBz aGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9m IHRoZQorICogU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJ UyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQs IElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB QklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJ TkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQg SE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElB QklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJ U0UsIEFSSVNJTkcKKyAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNP RlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MKKyAqIElOIFRIRSBTT0ZUV0FSRS4K KyAqCisgKi8KKyNpbmNsdWRlICJpOTE1X2Rydi5oIgorCitzdGF0aWMgdm9pZCBnZW44X2d1Y19y YWlzZV9pcnEoc3RydWN0IGludGVsX2d1YyAqZ3VjKQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICpkZXZfcHJpdiA9IGd1Y190b19pOTE1KGd1Yyk7CisKKwlJOTE1X1dSSVRFKEdVQ19TRU5E X0lOVEVSUlVQVCwgR1VDX1NFTkRfVFJJR0dFUik7Cit9CisKK3N0YXRpYyBpbmxpbmUgaTkxNV9y ZWdfdCBndWNfc2VuZF9yZWcoc3RydWN0IGludGVsX2d1YyAqZ3VjLCB1MzIgaSkKK3sKKwlHRU1f QlVHX09OKCFndWMtPnNlbmRfcmVncy5iYXNlKTsKKwlHRU1fQlVHX09OKCFndWMtPnNlbmRfcmVn cy5jb3VudCk7CisJR0VNX0JVR19PTihpID49IGd1Yy0+c2VuZF9yZWdzLmNvdW50KTsKKworCXJl dHVybiBfTU1JTyhndWMtPnNlbmRfcmVncy5iYXNlICsgNCAqIGkpOworfQorCit2b2lkIGludGVs X2d1Y19pbml0X3NlbmRfcmVncyhzdHJ1Y3QgaW50ZWxfZ3VjICpndWMpCit7CisJc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZ3VjX3RvX2k5MTUoZ3VjKTsKKwllbnVtIGZvcmNl d2FrZV9kb21haW5zIGZ3X2RvbWFpbnMgPSAwOworCXVuc2lnbmVkIGludCBpOworCisJZ3VjLT5z ZW5kX3JlZ3MuYmFzZSA9IGk5MTVfbW1pb19yZWdfb2Zmc2V0KFNPRlRfU0NSQVRDSCgwKSk7CisJ Z3VjLT5zZW5kX3JlZ3MuY291bnQgPSBTT0ZUX1NDUkFUQ0hfQ09VTlQgLSAxOworCisJZm9yIChp ID0gMDsgaSA8IGd1Yy0+c2VuZF9yZWdzLmNvdW50OyBpKyspIHsKKwkJZndfZG9tYWlucyB8PSBp bnRlbF91bmNvcmVfZm9yY2V3YWtlX2Zvcl9yZWcoZGV2X3ByaXYsCisJCQkJCWd1Y19zZW5kX3Jl ZyhndWMsIGkpLAorCQkJCQlGV19SRUdfUkVBRCB8IEZXX1JFR19XUklURSk7CisJfQorCWd1Yy0+ c2VuZF9yZWdzLmZ3X2RvbWFpbnMgPSBmd19kb21haW5zOworfQorCit2b2lkIGludGVsX2d1Y19p bml0X2Vhcmx5KHN0cnVjdCBpbnRlbF9ndWMgKmd1YykKK3sKKwlpbnRlbF9ndWNfY3RfaW5pdF9l YXJseSgmZ3VjLT5jdCk7CisKKwltdXRleF9pbml0KCZndWMtPnNlbmRfbXV0ZXgpOworCWd1Yy0+ c2VuZCA9IGludGVsX2d1Y19zZW5kX25vcDsKKwlndWMtPm5vdGlmeSA9IGdlbjhfZ3VjX3JhaXNl X2lycTsKK30KKworaW50IGludGVsX2d1Y19zZW5kX25vcChzdHJ1Y3QgaW50ZWxfZ3VjICpndWMs IGNvbnN0IHUzMiAqYWN0aW9uLCB1MzIgbGVuKQoreworCVdBUk4oMSwgIlVuZXhwZWN0ZWQgc2Vu ZDogYWN0aW9uPSUjeFxuIiwgKmFjdGlvbik7CisJcmV0dXJuIC1FTk9ERVY7Cit9CisKKy8qCisg KiBUaGlzIGZ1bmN0aW9uIGltcGxlbWVudHMgdGhlIE1NSU8gYmFzZWQgaG9zdCB0byBHdUMgaW50 ZXJmYWNlLgorICovCitpbnQgaW50ZWxfZ3VjX3NlbmRfbW1pbyhzdHJ1Y3QgaW50ZWxfZ3VjICpn dWMsIGNvbnN0IHUzMiAqYWN0aW9uLCB1MzIgbGVuKQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICpkZXZfcHJpdiA9IGd1Y190b19pOTE1KGd1Yyk7CisJdTMyIHN0YXR1czsKKwlpbnQgaTsK KwlpbnQgcmV0OworCisJR0VNX0JVR19PTighbGVuKTsKKwlHRU1fQlVHX09OKGxlbiA+IGd1Yy0+ c2VuZF9yZWdzLmNvdW50KTsKKworCS8qIElmIENUIGlzIGF2YWlsYWJsZSwgd2UgZXhwZWN0IHRv IHVzZSBNTUlPIG9ubHkgZHVyaW5nIGluaXQvZmluaSAqLworCUdFTV9CVUdfT04oSEFTX0dVQ19D VChkZXZfcHJpdikgJiYKKwkJKmFjdGlvbiAhPSBJTlRFTF9HVUNfQUNUSU9OX1JFR0lTVEVSX0NP TU1BTkRfVFJBTlNQT1JUX0JVRkZFUiAmJgorCQkqYWN0aW9uICE9IElOVEVMX0dVQ19BQ1RJT05f REVSRUdJU1RFUl9DT01NQU5EX1RSQU5TUE9SVF9CVUZGRVIpOworCisJbXV0ZXhfbG9jaygmZ3Vj LT5zZW5kX211dGV4KTsKKwlpbnRlbF91bmNvcmVfZm9yY2V3YWtlX2dldChkZXZfcHJpdiwgZ3Vj LT5zZW5kX3JlZ3MuZndfZG9tYWlucyk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspCisJ CUk5MTVfV1JJVEUoZ3VjX3NlbmRfcmVnKGd1YywgaSksIGFjdGlvbltpXSk7CisKKwlQT1NUSU5H X1JFQUQoZ3VjX3NlbmRfcmVnKGd1YywgaSAtIDEpKTsKKworCWludGVsX2d1Y19ub3RpZnkoZ3Vj KTsKKworCS8qCisJICogTm8gR3VDIGNvbW1hbmQgc2hvdWxkIGV2ZXIgdGFrZSBsb25nZXIgdGhh biAxMG1zLgorCSAqIEZhc3QgY29tbWFuZHMgc2hvdWxkIHN0aWxsIGNvbXBsZXRlIGluIDEwdXMu CisJICovCisJcmV0ID0gX19pbnRlbF93YWl0X2Zvcl9yZWdpc3Rlcl9mdyhkZXZfcHJpdiwKKwkJ CQkJICAgZ3VjX3NlbmRfcmVnKGd1YywgMCksCisJCQkJCSAgIElOVEVMX0dVQ19SRUNWX01BU0ss CisJCQkJCSAgIElOVEVMX0dVQ19SRUNWX01BU0ssCisJCQkJCSAgIDEwLCAxMCwgJnN0YXR1cyk7 CisJaWYgKHN0YXR1cyAhPSBJTlRFTF9HVUNfU1RBVFVTX1NVQ0NFU1MpIHsKKwkJLyoKKwkJICog RWl0aGVyIHRoZSBHdUMgZXhwbGljaXRseSByZXR1cm5lZCBhbiBlcnJvciAod2hpY2gKKwkJICog d2UgY29udmVydCB0byAtRUlPIGhlcmUpIG9yIG5vIHJlc3BvbnNlIGF0IGFsbCB3YXMKKwkJICog cmVjZWl2ZWQgd2l0aGluIHRoZSB0aW1lb3V0IGxpbWl0ICgtRVRJTUVET1VUKQorCQkgKi8KKwkJ aWYgKHJldCAhPSAtRVRJTUVET1VUKQorCQkJcmV0ID0gLUVJTzsKKworCQlEUk1fV0FSTigiSU5U RUxfR1VDX1NFTkQ6IEFjdGlvbiAweCVYIGZhaWxlZDsiCisJCQkgIiByZXQ9JWQgc3RhdHVzPTB4 JTA4WCByZXNwb25zZT0weCUwOFhcbiIsCisJCQkgYWN0aW9uWzBdLCByZXQsIHN0YXR1cywgSTkx NV9SRUFEKFNPRlRfU0NSQVRDSCgxNSkpKTsKKwl9CisKKwlpbnRlbF91bmNvcmVfZm9yY2V3YWtl X3B1dChkZXZfcHJpdiwgZ3VjLT5zZW5kX3JlZ3MuZndfZG9tYWlucyk7CisJbXV0ZXhfdW5sb2Nr KCZndWMtPnNlbmRfbXV0ZXgpOworCisJcmV0dXJuIHJldDsKK30KKworaW50IGludGVsX2d1Y19z YW1wbGVfZm9yY2V3YWtlKHN0cnVjdCBpbnRlbF9ndWMgKmd1YykKK3sKKwlzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBndWNfdG9faTkxNShndWMpOworCXUzMiBhY3Rpb25bMl07 CisKKwlhY3Rpb25bMF0gPSBJTlRFTF9HVUNfQUNUSU9OX1NBTVBMRV9GT1JDRVdBS0U7CisJLyog V2FSc0Rpc2FibGVDb2Fyc2VQb3dlckdhdGluZzpza2wsYnh0ICovCisJaWYgKCFpbnRlbF9lbmFi bGVfcmM2KCkgfHwgTkVFRFNfV2FSc0Rpc2FibGVDb2Fyc2VQb3dlckdhdGluZyhkZXZfcHJpdikp CisJCWFjdGlvblsxXSA9IDA7CisJZWxzZQorCQkvKiBiaXQgMCBhbmQgMSBhcmUgZm9yIFJlbmRl ciBhbmQgTWVkaWEgZG9tYWluIHNlcGFyYXRlbHkgKi8KKwkJYWN0aW9uWzFdID0gR1VDX0ZPUkNF V0FLRV9SRU5ERVIgfCBHVUNfRk9SQ0VXQUtFX01FRElBOworCisJcmV0dXJuIGludGVsX2d1Y19z ZW5kKGd1YywgYWN0aW9uLCBBUlJBWV9TSVpFKGFjdGlvbikpOworfQorCisvKioKKyAqIGludGVs X2d1Y19hdXRoX2h1YygpIC0gU2VuZCBhY3Rpb24gdG8gR3VDIHRvIGF1dGhlbnRpY2F0ZSBIdUMg dWNvZGUKKyAqIEBndWM6IGludGVsX2d1YyBzdHJ1Y3R1cmUKKyAqIEByc2Ffb2Zmc2V0OiByc2Eg b2Zmc2V0IHcuci50IGdndHQgYmFzZSBvZiBodWMgdm1hCisgKgorICogVHJpZ2dlcnMgYSBIdUMg ZmlybXdhcmUgYXV0aGVudGljYXRpb24gcmVxdWVzdCB0byB0aGUgR3VDIHZpYSBpbnRlbF9ndWNf c2VuZAorICogSU5URUxfR1VDX0FDVElPTl9BVVRIRU5USUNBVEVfSFVDIGludGVyZmFjZS4gVGhp cyBmdW5jdGlvbiBpcyBpbnZva2VkIGJ5CisgKiBpbnRlbF9odWNfYXV0aCgpLgorICoKKyAqIFJl dHVybjoJbm9uLXplcm8gY29kZSBvbiBlcnJvcgorICovCitpbnQgaW50ZWxfZ3VjX2F1dGhfaHVj KHN0cnVjdCBpbnRlbF9ndWMgKmd1YywgdTMyIHJzYV9vZmZzZXQpCit7CisJdTMyIGFjdGlvbltd ID0geworCQlJTlRFTF9HVUNfQUNUSU9OX0FVVEhFTlRJQ0FURV9IVUMsCisJCXJzYV9vZmZzZXQK Kwl9OworCisJcmV0dXJuIGludGVsX2d1Y19zZW5kKGd1YywgYWN0aW9uLCBBUlJBWV9TSVpFKGFj dGlvbikpOworfQorCisvKioKKyAqIGludGVsX2d1Y19zdXNwZW5kKCkgLSBub3RpZnkgR3VDIGVu dGVyaW5nIHN1c3BlbmQgc3RhdGUKKyAqIEBkZXZfcHJpdjoJaTkxNSBkZXZpY2UgcHJpdmF0ZQor ICovCitpbnQgaW50ZWxfZ3VjX3N1c3BlbmQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9w cml2KQoreworCXN0cnVjdCBpbnRlbF9ndWMgKmd1YyA9ICZkZXZfcHJpdi0+Z3VjOworCXN0cnVj dCBpOTE1X2dlbV9jb250ZXh0ICpjdHg7CisJdTMyIGRhdGFbM107CisKKwlpZiAoZ3VjLT5mdy5s b2FkX3N0YXR1cyAhPSBJTlRFTF9VQ19GSVJNV0FSRV9TVUNDRVNTKQorCQlyZXR1cm4gMDsKKwor CWdlbjlfZGlzYWJsZV9ndWNfaW50ZXJydXB0cyhkZXZfcHJpdik7CisKKwljdHggPSBkZXZfcHJp di0+a2VybmVsX2NvbnRleHQ7CisKKwlkYXRhWzBdID0gSU5URUxfR1VDX0FDVElPTl9FTlRFUl9T X1NUQVRFOworCS8qIGFueSB2YWx1ZSBncmVhdGVyIHRoYW4gR1VDX1BPV0VSX0QwICovCisJZGF0 YVsxXSA9IEdVQ19QT1dFUl9EMTsKKwkvKiBmaXJzdCBwYWdlIGlzIHNoYXJlZCBkYXRhIHdpdGgg R3VDICovCisJZGF0YVsyXSA9IGd1Y19nZ3R0X29mZnNldChjdHgtPmVuZ2luZVtSQ1NdLnN0YXRl KSArCisJCSAgTFJDX0dVQ1NIUl9QTiAqIFBBR0VfU0laRTsKKworCXJldHVybiBpbnRlbF9ndWNf c2VuZChndWMsIGRhdGEsIEFSUkFZX1NJWkUoZGF0YSkpOworfQorCisvKioKKyAqIGludGVsX2d1 Y19yZXN1bWUoKSAtIG5vdGlmeSBHdUMgcmVzdW1pbmcgZnJvbSBzdXNwZW5kIHN0YXRlCisgKiBA ZGV2X3ByaXY6CWk5MTUgZGV2aWNlIHByaXZhdGUKKyAqLworaW50IGludGVsX2d1Y19yZXN1bWUo c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQoreworCXN0cnVjdCBpbnRlbF9ndWMg Kmd1YyA9ICZkZXZfcHJpdi0+Z3VjOworCXN0cnVjdCBpOTE1X2dlbV9jb250ZXh0ICpjdHg7CisJ dTMyIGRhdGFbM107CisKKwlpZiAoZ3VjLT5mdy5sb2FkX3N0YXR1cyAhPSBJTlRFTF9VQ19GSVJN V0FSRV9TVUNDRVNTKQorCQlyZXR1cm4gMDsKKworCWlmIChpOTE1X21vZHBhcmFtcy5ndWNfbG9n X2xldmVsID49IDApCisJCWdlbjlfZW5hYmxlX2d1Y19pbnRlcnJ1cHRzKGRldl9wcml2KTsKKwor CWN0eCA9IGRldl9wcml2LT5rZXJuZWxfY29udGV4dDsKKworCWRhdGFbMF0gPSBJTlRFTF9HVUNf QUNUSU9OX0VYSVRfU19TVEFURTsKKwlkYXRhWzFdID0gR1VDX1BPV0VSX0QwOworCS8qIGZpcnN0 IHBhZ2UgaXMgc2hhcmVkIGRhdGEgd2l0aCBHdUMgKi8KKwlkYXRhWzJdID0gZ3VjX2dndHRfb2Zm c2V0KGN0eC0+ZW5naW5lW1JDU10uc3RhdGUpICsKKwkJICBMUkNfR1VDU0hSX1BOICogUEFHRV9T SVpFOworCisJcmV0dXJuIGludGVsX2d1Y19zZW5kKGd1YywgZGF0YSwgQVJSQVlfU0laRShkYXRh KSk7Cit9CisKKy8qKgorICogaW50ZWxfZ3VjX2FsbG9jYXRlX3ZtYSgpIC0gQWxsb2NhdGUgYSBH R1RUIFZNQSBmb3IgR3VDIHVzYWdlCisgKiBAZ3VjOgl0aGUgZ3VjCisgKiBAc2l6ZToJc2l6ZSBv ZiBhcmVhIHRvIGFsbG9jYXRlIChib3RoIHZpcnR1YWwgc3BhY2UgYW5kIG1lbW9yeSkKKyAqCisg KiBUaGlzIGlzIGEgd3JhcHBlciB0byBjcmVhdGUgYW4gb2JqZWN0IGZvciB1c2Ugd2l0aCB0aGUg R3VDLiBJbiBvcmRlciB0bworICogdXNlIGl0IGluc2lkZSB0aGUgR3VDLCBhbiBvYmplY3QgbmVl ZHMgdG8gYmUgcGlubmVkIGxpZmV0aW1lLCBzbyB3ZSBhbGxvY2F0ZQorICogYm90aCBzb21lIGJh Y2tpbmcgc3RvcmFnZSBhbmQgYSByYW5nZSBpbnNpZGUgdGhlIEdsb2JhbCBHVFQuIFdlIG11c3Qg cGluCisgKiBpdCBpbiB0aGUgR0dUVCBzb21ld2hlcmUgb3RoZXIgdGhhbiB0aGFuIFswLCBHVUNf V09QQ01fVE9QKSBiZWNhdXNlIHRoYXQKKyAqIHJhbmdlIGlzIHJlc2VydmVkIGluc2lkZSBHdUMu CisgKgorICogUmV0dXJuOglBIGk5MTVfdm1hIGlmIHN1Y2Nlc3NmdWwsIG90aGVyd2lzZSBhbiBF UlJfUFRSLgorICovCitzdHJ1Y3QgaTkxNV92bWEgKmludGVsX2d1Y19hbGxvY2F0ZV92bWEoc3Ry dWN0IGludGVsX2d1YyAqZ3VjLCB1MzIgc2l6ZSkKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0 ZSAqZGV2X3ByaXYgPSBndWNfdG9faTkxNShndWMpOworCXN0cnVjdCBkcm1faTkxNV9nZW1fb2Jq ZWN0ICpvYmo7CisJc3RydWN0IGk5MTVfdm1hICp2bWE7CisJaW50IHJldDsKKworCW9iaiA9IGk5 MTVfZ2VtX29iamVjdF9jcmVhdGUoZGV2X3ByaXYsIHNpemUpOworCWlmIChJU19FUlIob2JqKSkK KwkJcmV0dXJuIEVSUl9DQVNUKG9iaik7CisKKwl2bWEgPSBpOTE1X3ZtYV9pbnN0YW5jZShvYmos ICZkZXZfcHJpdi0+Z2d0dC5iYXNlLCBOVUxMKTsKKwlpZiAoSVNfRVJSKHZtYSkpCisJCWdvdG8g ZXJyOworCisJcmV0ID0gaTkxNV92bWFfcGluKHZtYSwgMCwgUEFHRV9TSVpFLAorCQkJICAgUElO X0dMT0JBTCB8IFBJTl9PRkZTRVRfQklBUyB8IEdVQ19XT1BDTV9UT1ApOworCWlmIChyZXQpIHsK KwkJdm1hID0gRVJSX1BUUihyZXQpOworCQlnb3RvIGVycjsKKwl9CisKKwlyZXR1cm4gdm1hOwor CitlcnI6CisJaTkxNV9nZW1fb2JqZWN0X3B1dChvYmopOworCXJldHVybiB2bWE7Cit9CmRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9ndWMuaCBiL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2ludGVsX2d1Yy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFm OTFmMGYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9ndWMu aApAQCAtMCwwICsxLDE3OCBAQAorLyoKKyAqIENvcHlyaWdodCDCqSAyMDE0LTIwMTcgSW50ZWwg Q29ycG9yYXRpb24KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9m IGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3 YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwK KyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGlu ZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnks IG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwg Y29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhl CisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxv d2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0 aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKKyAqIHBhcmFncmFwaCkg c2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBv ZiB0aGUKKyAqIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMg SVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVE LCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5U QUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZS SU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hU IEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJ QUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJX SVNFLCBBUklTSU5HCisgKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBT T0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTCisgKiBJTiBUSEUgU09GVFdBUkUu CisgKgorICovCisjaWZuZGVmIF9JTlRFTF9HVUNfSF8KKyNkZWZpbmUgX0lOVEVMX0dVQ19IXwor CisjaW5jbHVkZSAiaW50ZWxfZ3VjX2Z3aWYuaCIKKyNpbmNsdWRlICJpbnRlbF9ndWNfY3QuaCIK KyNpbmNsdWRlICJpOTE1X2d1Y19yZWcuaCIKKyNpbmNsdWRlICJpOTE1X3ZtYS5oIgorCisvKgor ICogVGhpcyBzdHJ1Y3R1cmUgcHJpbWFyaWx5IGRlc2NyaWJlcyB0aGUgR0VNIG9iamVjdCBzaGFy ZWQgd2l0aCB0aGUgR3VDLgorICogVGhlIHNwZWNzIHNvbWV0aW1lcyByZWZlciB0byB0aGlzIG9i amVjdCBhcyBhICJHdUMgY29udGV4dCIsIGJ1dCB3ZSB1c2UKKyAqIHRoZSB0ZXJtICJjbGllbnQi IHRvIGF2b2lkIGNvbmZ1c2lvbiB3aXRoIGhhcmR3YXJlIGNvbnRleHRzLiBUaGlzCisgKiBHRU0g b2JqZWN0IGlzIGhlbGQgZm9yIHRoZSBlbnRpcmUgbGlmZXRpbWUgb2Ygb3VyIGludGVyYWN0aW9u IHdpdGgKKyAqIHRoZSBHdUMsIGJlaW5nIGFsbG9jYXRlZCBiZWZvcmUgdGhlIEd1QyBpcyBsb2Fk ZWQgd2l0aCBpdHMgZmlybXdhcmUuCisgKiBCZWNhdXNlIHRoZXJlJ3Mgbm8gd2F5IHRvIHVwZGF0 ZSB0aGUgYWRkcmVzcyB1c2VkIGJ5IHRoZSBHdUMgYWZ0ZXIKKyAqIGluaXRpYWxpc2F0aW9uLCB0 aGUgc2hhcmVkIG9iamVjdCBtdXN0IHN0YXkgcGlubmVkIGludG8gdGhlIEdHVFQgYXMKKyAqIGxv bmcgYXMgdGhlIEd1QyBpcyBpbiB1c2UuIFdlIGFsc28ga2VlcCB0aGUgZmlyc3QgcGFnZSAob25s eSkgbWFwcGVkCisgKiBpbnRvIGtlcm5lbCBhZGRyZXNzIHNwYWNlLCBhcyBpdCBpbmNsdWRlcyBz aGFyZWQgZGF0YSB0aGF0IG11c3QgYmUKKyAqIHVwZGF0ZWQgb24gZXZlcnkgcmVxdWVzdCBzdWJt aXNzaW9uLgorICoKKyAqIFRoZSBzaW5nbGUgR0VNIG9iamVjdCBkZXNjcmliZWQgaGVyZSBpcyBh Y3R1YWxseSBtYWRlIHVwIG9mIHNldmVyYWwKKyAqIHNlcGFyYXRlIGFyZWFzLCBhcyBmYXIgYXMg dGhlIEd1QyBpcyBjb25jZXJuZWQuIFRoZSBmaXJzdCBwYWdlIChrZXB0CisgKiBrbWFwJ2QpIGlu Y2x1ZGVzIHRoZSAicHJvY2VzcyBkZXNjcmlwdG9yIiB3aGljaCBob2xkcyBzZXF1ZW5jZSBkYXRh IGZvcgorICogdGhlIGRvb3JiZWxsLCBhbmQgb25lIGNhY2hlbGluZSB3aGljaCBhY3R1YWxseSAq aXMqIHRoZSBkb29yYmVsbDsgYQorICogd3JpdGUgdG8gdGhpcyB3aWxsICJyaW5nIHRoZSBkb29y YmVsbCIgKGkuZS4gc2VuZCBhbiBpbnRlcnJ1cHQgdG8gdGhlCisgKiBHdUMpLiBUaGUgc3Vic2Vx dWVudCAgcGFnZXMgb2YgdGhlIGNsaWVudCBvYmplY3QgY29uc3RpdHV0ZSB0aGUgd29yaworICog cXVldWUgKGEgY2lyY3VsYXIgYXJyYXkgb2Ygd29yayBpdGVtcyksIGFnYWluIGRlc2NyaWJlZCBp biB0aGUgcHJvY2VzcworICogZGVzY3JpcHRvci4gV29yayBxdWV1ZSBwYWdlcyBhcmUgbWFwcGVk IG1vbWVudGFyaWx5IGFzIHJlcXVpcmVkLgorICovCitzdHJ1Y3QgaTkxNV9ndWNfY2xpZW50IHsK KwlzdHJ1Y3QgaTkxNV92bWEgKnZtYTsKKwl2b2lkICp2YWRkcjsKKwlzdHJ1Y3QgaTkxNV9nZW1f Y29udGV4dCAqb3duZXI7CisJc3RydWN0IGludGVsX2d1YyAqZ3VjOworCisJdWludDMyX3QgZW5n aW5lczsJCS8qIGJpdG1hcCBvZiAoaG9zdCkgZW5naW5lIGlkcwkqLworCXVpbnQzMl90IHByaW9y aXR5OworCXUzMiBzdGFnZV9pZDsKKwl1aW50MzJfdCBwcm9jX2Rlc2Nfb2Zmc2V0OworCisJdTE2 IGRvb3JiZWxsX2lkOworCXVuc2lnbmVkIGxvbmcgZG9vcmJlbGxfb2Zmc2V0OworCisJc3Bpbmxv Y2tfdCB3cV9sb2NrOworCS8qIFBlci1lbmdpbmUgY291bnRzIG9mIEd1QyBzdWJtaXNzaW9ucyAq LworCXVpbnQ2NF90IHN1Ym1pc3Npb25zW0k5MTVfTlVNX0VOR0lORVNdOworfTsKKworc3RydWN0 IGludGVsX2d1Y19sb2cgeworCXVpbnQzMl90IGZsYWdzOworCXN0cnVjdCBpOTE1X3ZtYSAqdm1h OworCS8qIFRoZSBydW50aW1lIHN0dWZmIGdldHMgY3JlYXRlZCBvbmx5IHdoZW4gR3VDIGxvZ2dp bmcgZ2V0cyBlbmFibGVkICovCisJc3RydWN0IHsKKwkJdm9pZCAqYnVmX2FkZHI7CisJCXN0cnVj dCB3b3JrcXVldWVfc3RydWN0ICpmbHVzaF93cTsKKwkJc3RydWN0IHdvcmtfc3RydWN0IGZsdXNo X3dvcms7CisJCXN0cnVjdCByY2hhbiAqcmVsYXlfY2hhbjsKKwl9IHJ1bnRpbWU7CisJLyogbG9n Z2luZyByZWxhdGVkIHN0YXRzICovCisJdTMyIGNhcHR1cmVfbWlzc19jb3VudDsKKwl1MzIgZmx1 c2hfaW50ZXJydXB0X2NvdW50OworCXUzMiBwcmV2X292ZXJmbG93X2NvdW50W0dVQ19NQVhfTE9H X0JVRkZFUl07CisJdTMyIHRvdGFsX292ZXJmbG93X2NvdW50W0dVQ19NQVhfTE9HX0JVRkZFUl07 CisJdTMyIGZsdXNoX2NvdW50W0dVQ19NQVhfTE9HX0JVRkZFUl07Cit9OworCitzdHJ1Y3QgaW50 ZWxfZ3VjIHsKKwlzdHJ1Y3QgaW50ZWxfdWNfZncgZnc7CisJc3RydWN0IGludGVsX2d1Y19sb2cg bG9nOworCXN0cnVjdCBpbnRlbF9ndWNfY3QgY3Q7CisKKwkvKiBMb2cgc25hcHNob3QgaWYgR3VD IGVycm9ycyBkdXJpbmcgbG9hZCAqLworCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpsb2Fk X2Vycl9sb2c7CisKKwkvKiBpbnRlbF9ndWNfcmVjdiBpbnRlcnJ1cHQgcmVsYXRlZCBzdGF0ZSAq LworCWJvb2wgaW50ZXJydXB0c19lbmFibGVkOworCisJc3RydWN0IGk5MTVfdm1hICphZHNfdm1h OworCXN0cnVjdCBpOTE1X3ZtYSAqc3RhZ2VfZGVzY19wb29sOworCXZvaWQgKnN0YWdlX2Rlc2Nf cG9vbF92YWRkcjsKKwlzdHJ1Y3QgaWRhIHN0YWdlX2lkczsKKworCXN0cnVjdCBpOTE1X2d1Y19j bGllbnQgKmV4ZWNidWZfY2xpZW50OworCisJREVDTEFSRV9CSVRNQVAoZG9vcmJlbGxfYml0bWFw LCBHVUNfTlVNX0RPT1JCRUxMUyk7CisJdWludDMyX3QgZGJfY2FjaGVsaW5lOwkJLyogQ3ljbGlj IGNvdW50ZXIgbW9kIHBhZ2VzaXplCSovCisKKwkvKiBHdUMncyBGVyBzcGVjaWZpYyByZWdpc3Rl cnMgdXNlZCBpbiBNTUlPIHNlbmQgKi8KKwlzdHJ1Y3QgeworCQl1MzIgYmFzZTsKKwkJdW5zaWdu ZWQgaW50IGNvdW50OworCQllbnVtIGZvcmNld2FrZV9kb21haW5zIGZ3X2RvbWFpbnM7CisJfSBz ZW5kX3JlZ3M7CisKKwkvKiBUbyBzZXJpYWxpemUgdGhlIGludGVsX2d1Y19zZW5kIGFjdGlvbnMg Ki8KKwlzdHJ1Y3QgbXV0ZXggc2VuZF9tdXRleDsKKworCS8qIEd1QydzIEZXIHNwZWNpZmljIHNl bmQgZnVuY3Rpb24gKi8KKwlpbnQgKCpzZW5kKShzdHJ1Y3QgaW50ZWxfZ3VjICpndWMsIGNvbnN0 IHUzMiAqZGF0YSwgdTMyIGxlbik7CisKKwkvKiBHdUMncyBGVyBzcGVjaWZpYyBub3RpZnkgZnVu Y3Rpb24gKi8KKwl2b2lkICgqbm90aWZ5KShzdHJ1Y3QgaW50ZWxfZ3VjICpndWMpOworfTsKKwor c3RhdGljCitpbmxpbmUgaW50IGludGVsX2d1Y19zZW5kKHN0cnVjdCBpbnRlbF9ndWMgKmd1Yywg Y29uc3QgdTMyICphY3Rpb24sIHUzMiBsZW4pCit7CisJcmV0dXJuIGd1Yy0+c2VuZChndWMsIGFj dGlvbiwgbGVuKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGludGVsX2d1Y19ub3RpZnkoc3Ry dWN0IGludGVsX2d1YyAqZ3VjKQoreworCWd1Yy0+bm90aWZ5KGd1Yyk7Cit9CisKK3N0YXRpYyBp bmxpbmUgdTMyIGd1Y19nZ3R0X29mZnNldChzdHJ1Y3QgaTkxNV92bWEgKnZtYSkKK3sKKwl1MzIg b2Zmc2V0ID0gaTkxNV9nZ3R0X29mZnNldCh2bWEpOworCisJR0VNX0JVR19PTihvZmZzZXQgPCBH VUNfV09QQ01fVE9QKTsKKwlHRU1fQlVHX09OKHJhbmdlX292ZXJmbG93c190KHU2NCwgb2Zmc2V0 LCB2bWEtPnNpemUsIEdVQ19HR1RUX1RPUCkpOworCisJcmV0dXJuIG9mZnNldDsKK30KKworLyog aW50ZWxfZ3VjLmMgKi8KK3ZvaWQgaW50ZWxfZ3VjX2luaXRfZWFybHkoc3RydWN0IGludGVsX2d1 YyAqZ3VjKTsKK3ZvaWQgaW50ZWxfZ3VjX2luaXRfc2VuZF9yZWdzKHN0cnVjdCBpbnRlbF9ndWMg Kmd1Yyk7CitpbnQgaW50ZWxfZ3VjX3NlbmRfbm9wKHN0cnVjdCBpbnRlbF9ndWMgKmd1YywgY29u c3QgdTMyICphY3Rpb24sIHUzMiBsZW4pOworaW50IGludGVsX2d1Y19zZW5kX21taW8oc3RydWN0 IGludGVsX2d1YyAqZ3VjLCBjb25zdCB1MzIgKmFjdGlvbiwgdTMyIGxlbik7CitpbnQgaW50ZWxf Z3VjX3NhbXBsZV9mb3JjZXdha2Uoc3RydWN0IGludGVsX2d1YyAqZ3VjKTsKK2ludCBpbnRlbF9n dWNfYXV0aF9odWMoc3RydWN0IGludGVsX2d1YyAqZ3VjLCB1MzIgcnNhX29mZnNldCk7CitpbnQg aW50ZWxfZ3VjX3N1c3BlbmQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KTsKK2lu dCBpbnRlbF9ndWNfcmVzdW1lKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdik7Citz dHJ1Y3QgaTkxNV92bWEgKmludGVsX2d1Y19hbGxvY2F0ZV92bWEoc3RydWN0IGludGVsX2d1YyAq Z3VjLCB1MzIgc2l6ZSk7CisKKy8qIGludGVsX2d1Y19sb2FkZXIuYyAqLworaW50IGludGVsX2d1 Y19zZWxlY3RfZncoc3RydWN0IGludGVsX2d1YyAqZ3VjKTsKK2ludCBpbnRlbF9ndWNfaW5pdF9o dyhzdHJ1Y3QgaW50ZWxfZ3VjICpndWMpOwordTMyIGludGVsX2d1Y193b3BjbV9zaXplKHN0cnVj dCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdik7CisKKy8qIGk5MTVfZ3VjX3N1Ym1pc3Npb24u YyAqLworaW50IGk5MTVfZ3VjX3N1Ym1pc3Npb25faW5pdChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0 ZSAqZGV2X3ByaXYpOworaW50IGk5MTVfZ3VjX3N1Ym1pc3Npb25fZW5hYmxlKHN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICpkZXZfcHJpdik7Cit2b2lkIGk5MTVfZ3VjX3N1Ym1pc3Npb25fZGlzYWJs ZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpOwordm9pZCBpOTE1X2d1Y19zdWJt aXNzaW9uX2Zpbmkoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KTsKKworLyogaW50 ZWxfZ3VjX2xvZy5jICovCitpbnQgaW50ZWxfZ3VjX2xvZ19jcmVhdGUoc3RydWN0IGludGVsX2d1 YyAqZ3VjKTsKK3ZvaWQgaW50ZWxfZ3VjX2xvZ19kZXN0cm95KHN0cnVjdCBpbnRlbF9ndWMgKmd1 Yyk7CitpbnQgaTkxNV9ndWNfbG9nX2NvbnRyb2woc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRl dl9wcml2LCB1NjQgY29udHJvbF92YWwpOwordm9pZCBpOTE1X2d1Y19sb2dfcmVnaXN0ZXIoc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KTsKK3ZvaWQgaTkxNV9ndWNfbG9nX3VucmVn aXN0ZXIoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KTsKKworI2VuZGlmCmRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF91Yy5jIGIvZHJpdmVycy9ncHUvZHJt L2k5MTUvaW50ZWxfdWMuYwppbmRleCA2MTZlMGYxLi4xZTg0Y2Q1IDEwMDY0NAotLS0gYS9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF91Yy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2lu dGVsX3VjLmMKQEAgLTgxLDI1ICs4MSw5IEBAIHZvaWQgaW50ZWxfdWNfc2FuaXRpemVfb3B0aW9u cyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCiAJCWk5MTVfbW9kcGFyYW1zLmVu YWJsZV9ndWNfc3VibWlzc2lvbiA9IEhBU19HVUNfU0NIRUQoZGV2X3ByaXYpOwogfQogCi1zdGF0 aWMgdm9pZCBnZW44X2d1Y19yYWlzZV9pcnEoc3RydWN0IGludGVsX2d1YyAqZ3VjKQotewotCXN0 cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGd1Y190b19pOTE1KGd1Yyk7Ci0KLQlJ OTE1X1dSSVRFKEdVQ19TRU5EX0lOVEVSUlVQVCwgR1VDX1NFTkRfVFJJR0dFUik7Ci19Ci0KLXN0 YXRpYyB2b2lkIGd1Y19pbml0X2Vhcmx5KHN0cnVjdCBpbnRlbF9ndWMgKmd1YykKLXsKLQlpbnRl bF9ndWNfY3RfaW5pdF9lYXJseSgmZ3VjLT5jdCk7Ci0KLQltdXRleF9pbml0KCZndWMtPnNlbmRf bXV0ZXgpOwotCWd1Yy0+c2VuZCA9IGludGVsX2d1Y19zZW5kX25vcDsKLQlndWMtPm5vdGlmeSA9 IGdlbjhfZ3VjX3JhaXNlX2lycTsKLX0KLQogdm9pZCBpbnRlbF91Y19pbml0X2Vhcmx5KHN0cnVj dCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKIHsKLQlndWNfaW5pdF9lYXJseSgmZGV2X3By aXYtPmd1Yyk7CisJaW50ZWxfZ3VjX2luaXRfZWFybHkoJmRldl9wcml2LT5ndWMpOwogfQogCiB2 b2lkIGludGVsX3VjX2luaXRfZncoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQpA QCAtMTE0LDM1ICs5OCw5IEBAIHZvaWQgaW50ZWxfdWNfZmluaV9mdyhzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSAqZGV2X3ByaXYpCiAJaW50ZWxfdWNfZndfZmluaSgmZGV2X3ByaXYtPmh1Yy5mdyk7 CiB9CiAKLXN0YXRpYyBpbmxpbmUgaTkxNV9yZWdfdCBndWNfc2VuZF9yZWcoc3RydWN0IGludGVs X2d1YyAqZ3VjLCB1MzIgaSkKLXsKLQlHRU1fQlVHX09OKCFndWMtPnNlbmRfcmVncy5iYXNlKTsK LQlHRU1fQlVHX09OKCFndWMtPnNlbmRfcmVncy5jb3VudCk7Ci0JR0VNX0JVR19PTihpID49IGd1 Yy0+c2VuZF9yZWdzLmNvdW50KTsKLQotCXJldHVybiBfTU1JTyhndWMtPnNlbmRfcmVncy5iYXNl ICsgNCAqIGkpOwotfQotCi1zdGF0aWMgdm9pZCBndWNfaW5pdF9zZW5kX3JlZ3Moc3RydWN0IGlu dGVsX2d1YyAqZ3VjKQotewotCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGd1 Y190b19pOTE1KGd1Yyk7Ci0JZW51bSBmb3JjZXdha2VfZG9tYWlucyBmd19kb21haW5zID0gMDsK LQl1bnNpZ25lZCBpbnQgaTsKLQotCWd1Yy0+c2VuZF9yZWdzLmJhc2UgPSBpOTE1X21taW9fcmVn X29mZnNldChTT0ZUX1NDUkFUQ0goMCkpOwotCWd1Yy0+c2VuZF9yZWdzLmNvdW50ID0gU09GVF9T Q1JBVENIX0NPVU5UIC0gMTsKLQotCWZvciAoaSA9IDA7IGkgPCBndWMtPnNlbmRfcmVncy5jb3Vu dDsgaSsrKSB7Ci0JCWZ3X2RvbWFpbnMgfD0gaW50ZWxfdW5jb3JlX2ZvcmNld2FrZV9mb3JfcmVn KGRldl9wcml2LAotCQkJCQlndWNfc2VuZF9yZWcoZ3VjLCBpKSwKLQkJCQkJRldfUkVHX1JFQUQg fCBGV19SRUdfV1JJVEUpOwotCX0KLQlndWMtPnNlbmRfcmVncy5md19kb21haW5zID0gZndfZG9t YWluczsKLX0KLQogdm9pZCBpbnRlbF91Y19pbml0X21taW8oc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmRldl9wcml2KQogewotCWd1Y19pbml0X3NlbmRfcmVncygmZGV2X3ByaXYtPmd1Yyk7CisJ aW50ZWxfZ3VjX2luaXRfc2VuZF9yZWdzKCZkZXZfcHJpdi0+Z3VjKTsKIH0KIAogc3RhdGljIHZv aWQgZ3VjX2NhcHR1cmVfbG9hZF9lcnJfbG9nKHN0cnVjdCBpbnRlbF9ndWMgKmd1YykKQEAgLTE4 MywyNyArMTQxLDYgQEAgc3RhdGljIHZvaWQgZ3VjX2Rpc2FibGVfY29tbXVuaWNhdGlvbihzdHJ1 Y3QgaW50ZWxfZ3VjICpndWMpCiAJZ3VjLT5zZW5kID0gaW50ZWxfZ3VjX3NlbmRfbm9wOwogfQog Ci0vKioKLSAqIGludGVsX2d1Y19hdXRoX2h1YygpIC0gU2VuZCBhY3Rpb24gdG8gR3VDIHRvIGF1 dGhlbnRpY2F0ZSBIdUMgdWNvZGUKLSAqIEBndWM6IGludGVsX2d1YyBzdHJ1Y3R1cmUKLSAqIEBy c2Ffb2Zmc2V0OiByc2Egb2Zmc2V0IHcuci50IGdndHQgYmFzZSBvZiBodWMgdm1hCi0gKgotICog VHJpZ2dlcnMgYSBIdUMgZmlybXdhcmUgYXV0aGVudGljYXRpb24gcmVxdWVzdCB0byB0aGUgR3VD IHZpYSBpbnRlbF9ndWNfc2VuZAotICogSU5URUxfR1VDX0FDVElPTl9BVVRIRU5USUNBVEVfSFVD IGludGVyZmFjZS4gVGhpcyBmdW5jdGlvbiBpcyBpbnZva2VkIGJ5Ci0gKiBpbnRlbF9odWNfYXV0 aCgpLgotICoKLSAqIFJldHVybjoJbm9uLXplcm8gY29kZSBvbiBlcnJvcgotICovCi1pbnQgaW50 ZWxfZ3VjX2F1dGhfaHVjKHN0cnVjdCBpbnRlbF9ndWMgKmd1YywgdTMyIHJzYV9vZmZzZXQpCi17 Ci0JdTMyIGFjdGlvbltdID0gewotCQlJTlRFTF9HVUNfQUNUSU9OX0FVVEhFTlRJQ0FURV9IVUMs Ci0JCXJzYV9vZmZzZXQKLQl9OwotCi0JcmV0dXJuIGludGVsX2d1Y19zZW5kKGd1YywgYWN0aW9u LCBBUlJBWV9TSVpFKGFjdGlvbikpOwotfQotCiBpbnQgaW50ZWxfdWNfaW5pdF9odyhzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCiB7CiAJc3RydWN0IGludGVsX2d1YyAqZ3VjID0g JmRldl9wcml2LT5ndWM7CkBAIC0zMzUsODIgKzI3MiwzIEBAIHZvaWQgaW50ZWxfdWNfZmluaV9o dyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCiAKIAlpOTE1X2dndHRfZGlzYWJs ZV9ndWMoZGV2X3ByaXYpOwogfQotCi1pbnQgaW50ZWxfZ3VjX3NlbmRfbm9wKHN0cnVjdCBpbnRl bF9ndWMgKmd1YywgY29uc3QgdTMyICphY3Rpb24sIHUzMiBsZW4pCi17Ci0JV0FSTigxLCAiVW5l eHBlY3RlZCBzZW5kOiBhY3Rpb249JSN4XG4iLCAqYWN0aW9uKTsKLQlyZXR1cm4gLUVOT0RFVjsK LX0KLQotLyoKLSAqIFRoaXMgZnVuY3Rpb24gaW1wbGVtZW50cyB0aGUgTU1JTyBiYXNlZCBob3N0 IHRvIEd1QyBpbnRlcmZhY2UuCi0gKi8KLWludCBpbnRlbF9ndWNfc2VuZF9tbWlvKHN0cnVjdCBp bnRlbF9ndWMgKmd1YywgY29uc3QgdTMyICphY3Rpb24sIHUzMiBsZW4pCi17Ci0Jc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZ3VjX3RvX2k5MTUoZ3VjKTsKLQl1MzIgc3RhdHVz OwotCWludCBpOwotCWludCByZXQ7Ci0KLQlHRU1fQlVHX09OKCFsZW4pOwotCUdFTV9CVUdfT04o bGVuID4gZ3VjLT5zZW5kX3JlZ3MuY291bnQpOwotCi0JLyogSWYgQ1QgaXMgYXZhaWxhYmxlLCB3 ZSBleHBlY3QgdG8gdXNlIE1NSU8gb25seSBkdXJpbmcgaW5pdC9maW5pICovCi0JR0VNX0JVR19P TihIQVNfR1VDX0NUKGRldl9wcml2KSAmJgotCQkqYWN0aW9uICE9IElOVEVMX0dVQ19BQ1RJT05f UkVHSVNURVJfQ09NTUFORF9UUkFOU1BPUlRfQlVGRkVSICYmCi0JCSphY3Rpb24gIT0gSU5URUxf R1VDX0FDVElPTl9ERVJFR0lTVEVSX0NPTU1BTkRfVFJBTlNQT1JUX0JVRkZFUik7Ci0KLQltdXRl eF9sb2NrKCZndWMtPnNlbmRfbXV0ZXgpOwotCWludGVsX3VuY29yZV9mb3JjZXdha2VfZ2V0KGRl dl9wcml2LCBndWMtPnNlbmRfcmVncy5md19kb21haW5zKTsKLQotCWZvciAoaSA9IDA7IGkgPCBs ZW47IGkrKykKLQkJSTkxNV9XUklURShndWNfc2VuZF9yZWcoZ3VjLCBpKSwgYWN0aW9uW2ldKTsK LQotCVBPU1RJTkdfUkVBRChndWNfc2VuZF9yZWcoZ3VjLCBpIC0gMSkpOwotCi0JaW50ZWxfZ3Vj X25vdGlmeShndWMpOwotCi0JLyoKLQkgKiBObyBHdUMgY29tbWFuZCBzaG91bGQgZXZlciB0YWtl IGxvbmdlciB0aGFuIDEwbXMuCi0JICogRmFzdCBjb21tYW5kcyBzaG91bGQgc3RpbGwgY29tcGxl dGUgaW4gMTB1cy4KLQkgKi8KLQlyZXQgPSBfX2ludGVsX3dhaXRfZm9yX3JlZ2lzdGVyX2Z3KGRl dl9wcml2LAotCQkJCQkgICBndWNfc2VuZF9yZWcoZ3VjLCAwKSwKLQkJCQkJICAgSU5URUxfR1VD X1JFQ1ZfTUFTSywKLQkJCQkJICAgSU5URUxfR1VDX1JFQ1ZfTUFTSywKLQkJCQkJICAgMTAsIDEw LCAmc3RhdHVzKTsKLQlpZiAoc3RhdHVzICE9IElOVEVMX0dVQ19TVEFUVVNfU1VDQ0VTUykgewot CQkvKgotCQkgKiBFaXRoZXIgdGhlIEd1QyBleHBsaWNpdGx5IHJldHVybmVkIGFuIGVycm9yICh3 aGljaAotCQkgKiB3ZSBjb252ZXJ0IHRvIC1FSU8gaGVyZSkgb3Igbm8gcmVzcG9uc2UgYXQgYWxs IHdhcwotCQkgKiByZWNlaXZlZCB3aXRoaW4gdGhlIHRpbWVvdXQgbGltaXQgKC1FVElNRURPVVQp Ci0JCSAqLwotCQlpZiAocmV0ICE9IC1FVElNRURPVVQpCi0JCQlyZXQgPSAtRUlPOwotCi0JCURS TV9XQVJOKCJJTlRFTF9HVUNfU0VORDogQWN0aW9uIDB4JVggZmFpbGVkOyIKLQkJCSAiIHJldD0l ZCBzdGF0dXM9MHglMDhYIHJlc3BvbnNlPTB4JTA4WFxuIiwKLQkJCSBhY3Rpb25bMF0sIHJldCwg c3RhdHVzLCBJOTE1X1JFQUQoU09GVF9TQ1JBVENIKDE1KSkpOwotCX0KLQotCWludGVsX3VuY29y ZV9mb3JjZXdha2VfcHV0KGRldl9wcml2LCBndWMtPnNlbmRfcmVncy5md19kb21haW5zKTsKLQlt dXRleF91bmxvY2soJmd1Yy0+c2VuZF9tdXRleCk7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1pbnQg aW50ZWxfZ3VjX3NhbXBsZV9mb3JjZXdha2Uoc3RydWN0IGludGVsX2d1YyAqZ3VjKQotewotCXN0 cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGd1Y190b19pOTE1KGd1Yyk7Ci0JdTMy IGFjdGlvblsyXTsKLQotCWFjdGlvblswXSA9IElOVEVMX0dVQ19BQ1RJT05fU0FNUExFX0ZPUkNF V0FLRTsKLQkvKiBXYVJzRGlzYWJsZUNvYXJzZVBvd2VyR2F0aW5nOnNrbCxieHQgKi8KLQlpZiAo IWludGVsX2VuYWJsZV9yYzYoKSB8fCBORUVEU19XYVJzRGlzYWJsZUNvYXJzZVBvd2VyR2F0aW5n KGRldl9wcml2KSkKLQkJYWN0aW9uWzFdID0gMDsKLQllbHNlCi0JCS8qIGJpdCAwIGFuZCAxIGFy ZSBmb3IgUmVuZGVyIGFuZCBNZWRpYSBkb21haW4gc2VwYXJhdGVseSAqLwotCQlhY3Rpb25bMV0g PSBHVUNfRk9SQ0VXQUtFX1JFTkRFUiB8IEdVQ19GT1JDRVdBS0VfTUVESUE7Ci0KLQlyZXR1cm4g aW50ZWxfZ3VjX3NlbmQoZ3VjLCBhY3Rpb24sIEFSUkFZX1NJWkUoYWN0aW9uKSk7Ci19CmRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF91Yy5oIGIvZHJpdmVycy9ncHUvZHJt L2k5MTUvaW50ZWxfdWMuaAppbmRleCA0ZmEwOTFlLi5lNmYwMDk0IDEwMDY0NAotLS0gYS9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF91Yy5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2lu dGVsX3VjLmgKQEAgLTI1LDExMCArMjUsOSBAQAogI2RlZmluZSBfSU5URUxfVUNfSF8KIAogI2lu Y2x1ZGUgImludGVsX3VjX2Z3LmgiCi0jaW5jbHVkZSAiaW50ZWxfZ3VjX2Z3aWYuaCIKLSNpbmNs dWRlICJpOTE1X2d1Y19yZWcuaCIKLSNpbmNsdWRlICJpbnRlbF9yaW5nYnVmZmVyLmgiCi0jaW5j bHVkZSAiaW50ZWxfZ3VjX2N0LmgiCi0jaW5jbHVkZSAiaTkxNV92bWEuaCIKKyNpbmNsdWRlICJp bnRlbF9ndWMuaCIKICNpbmNsdWRlICJpbnRlbF9odWMuaCIKIAotLyoKLSAqIFRoaXMgc3RydWN0 dXJlIHByaW1hcmlseSBkZXNjcmliZXMgdGhlIEdFTSBvYmplY3Qgc2hhcmVkIHdpdGggdGhlIEd1 Qy4KLSAqIFRoZSBzcGVjcyBzb21ldGltZXMgcmVmZXIgdG8gdGhpcyBvYmplY3QgYXMgYSAiR3VD IGNvbnRleHQiLCBidXQgd2UgdXNlCi0gKiB0aGUgdGVybSAiY2xpZW50IiB0byBhdm9pZCBjb25m dXNpb24gd2l0aCBoYXJkd2FyZSBjb250ZXh0cy4gVGhpcwotICogR0VNIG9iamVjdCBpcyBoZWxk IGZvciB0aGUgZW50aXJlIGxpZmV0aW1lIG9mIG91ciBpbnRlcmFjdGlvbiB3aXRoCi0gKiB0aGUg R3VDLCBiZWluZyBhbGxvY2F0ZWQgYmVmb3JlIHRoZSBHdUMgaXMgbG9hZGVkIHdpdGggaXRzIGZp cm13YXJlLgotICogQmVjYXVzZSB0aGVyZSdzIG5vIHdheSB0byB1cGRhdGUgdGhlIGFkZHJlc3Mg dXNlZCBieSB0aGUgR3VDIGFmdGVyCi0gKiBpbml0aWFsaXNhdGlvbiwgdGhlIHNoYXJlZCBvYmpl Y3QgbXVzdCBzdGF5IHBpbm5lZCBpbnRvIHRoZSBHR1RUIGFzCi0gKiBsb25nIGFzIHRoZSBHdUMg aXMgaW4gdXNlLiBXZSBhbHNvIGtlZXAgdGhlIGZpcnN0IHBhZ2UgKG9ubHkpIG1hcHBlZAotICog aW50byBrZXJuZWwgYWRkcmVzcyBzcGFjZSwgYXMgaXQgaW5jbHVkZXMgc2hhcmVkIGRhdGEgdGhh dCBtdXN0IGJlCi0gKiB1cGRhdGVkIG9uIGV2ZXJ5IHJlcXVlc3Qgc3VibWlzc2lvbi4KLSAqCi0g KiBUaGUgc2luZ2xlIEdFTSBvYmplY3QgZGVzY3JpYmVkIGhlcmUgaXMgYWN0dWFsbHkgbWFkZSB1 cCBvZiBzZXZlcmFsCi0gKiBzZXBhcmF0ZSBhcmVhcywgYXMgZmFyIGFzIHRoZSBHdUMgaXMgY29u Y2VybmVkLiBUaGUgZmlyc3QgcGFnZSAoa2VwdAotICoga21hcCdkKSBpbmNsdWRlcyB0aGUgInBy b2Nlc3MgZGVzY3JpcHRvciIgd2hpY2ggaG9sZHMgc2VxdWVuY2UgZGF0YSBmb3IKLSAqIHRoZSBk b29yYmVsbCwgYW5kIG9uZSBjYWNoZWxpbmUgd2hpY2ggYWN0dWFsbHkgKmlzKiB0aGUgZG9vcmJl bGw7IGEKLSAqIHdyaXRlIHRvIHRoaXMgd2lsbCAicmluZyB0aGUgZG9vcmJlbGwiIChpLmUuIHNl bmQgYW4gaW50ZXJydXB0IHRvIHRoZQotICogR3VDKS4gVGhlIHN1YnNlcXVlbnQgIHBhZ2VzIG9m IHRoZSBjbGllbnQgb2JqZWN0IGNvbnN0aXR1dGUgdGhlIHdvcmsKLSAqIHF1ZXVlIChhIGNpcmN1 bGFyIGFycmF5IG9mIHdvcmsgaXRlbXMpLCBhZ2FpbiBkZXNjcmliZWQgaW4gdGhlIHByb2Nlc3MK LSAqIGRlc2NyaXB0b3IuIFdvcmsgcXVldWUgcGFnZXMgYXJlIG1hcHBlZCBtb21lbnRhcmlseSBh cyByZXF1aXJlZC4KLSAqLwotc3RydWN0IGk5MTVfZ3VjX2NsaWVudCB7Ci0Jc3RydWN0IGk5MTVf dm1hICp2bWE7Ci0Jdm9pZCAqdmFkZHI7Ci0Jc3RydWN0IGk5MTVfZ2VtX2NvbnRleHQgKm93bmVy OwotCXN0cnVjdCBpbnRlbF9ndWMgKmd1YzsKLQotCXVpbnQzMl90IGVuZ2luZXM7CQkvKiBiaXRt YXAgb2YgKGhvc3QpIGVuZ2luZSBpZHMJKi8KLQl1aW50MzJfdCBwcmlvcml0eTsKLQl1MzIgc3Rh Z2VfaWQ7Ci0JdWludDMyX3QgcHJvY19kZXNjX29mZnNldDsKLQotCXUxNiBkb29yYmVsbF9pZDsK LQl1bnNpZ25lZCBsb25nIGRvb3JiZWxsX29mZnNldDsKLQotCXNwaW5sb2NrX3Qgd3FfbG9jazsK LQkvKiBQZXItZW5naW5lIGNvdW50cyBvZiBHdUMgc3VibWlzc2lvbnMgKi8KLQl1aW50NjRfdCBz dWJtaXNzaW9uc1tJOTE1X05VTV9FTkdJTkVTXTsKLX07Ci0KLXN0cnVjdCBpbnRlbF9ndWNfbG9n IHsKLQl1aW50MzJfdCBmbGFnczsKLQlzdHJ1Y3QgaTkxNV92bWEgKnZtYTsKLQkvKiBUaGUgcnVu dGltZSBzdHVmZiBnZXRzIGNyZWF0ZWQgb25seSB3aGVuIEd1QyBsb2dnaW5nIGdldHMgZW5hYmxl ZCAqLwotCXN0cnVjdCB7Ci0JCXZvaWQgKmJ1Zl9hZGRyOwotCQlzdHJ1Y3Qgd29ya3F1ZXVlX3N0 cnVjdCAqZmx1c2hfd3E7Ci0JCXN0cnVjdCB3b3JrX3N0cnVjdCBmbHVzaF93b3JrOwotCQlzdHJ1 Y3QgcmNoYW4gKnJlbGF5X2NoYW47Ci0JfSBydW50aW1lOwotCS8qIGxvZ2dpbmcgcmVsYXRlZCBz dGF0cyAqLwotCXUzMiBjYXB0dXJlX21pc3NfY291bnQ7Ci0JdTMyIGZsdXNoX2ludGVycnVwdF9j b3VudDsKLQl1MzIgcHJldl9vdmVyZmxvd19jb3VudFtHVUNfTUFYX0xPR19CVUZGRVJdOwotCXUz MiB0b3RhbF9vdmVyZmxvd19jb3VudFtHVUNfTUFYX0xPR19CVUZGRVJdOwotCXUzMiBmbHVzaF9j b3VudFtHVUNfTUFYX0xPR19CVUZGRVJdOwotfTsKLQotc3RydWN0IGludGVsX2d1YyB7Ci0Jc3Ry dWN0IGludGVsX3VjX2Z3IGZ3OwotCXN0cnVjdCBpbnRlbF9ndWNfbG9nIGxvZzsKLQlzdHJ1Y3Qg aW50ZWxfZ3VjX2N0IGN0OwotCi0JLyogTG9nIHNuYXBzaG90IGlmIEd1QyBlcnJvcnMgZHVyaW5n IGxvYWQgKi8KLQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqbG9hZF9lcnJfbG9nOwotCi0J LyogaW50ZWxfZ3VjX3JlY3YgaW50ZXJydXB0IHJlbGF0ZWQgc3RhdGUgKi8KLQlib29sIGludGVy cnVwdHNfZW5hYmxlZDsKLQotCXN0cnVjdCBpOTE1X3ZtYSAqYWRzX3ZtYTsKLQlzdHJ1Y3QgaTkx NV92bWEgKnN0YWdlX2Rlc2NfcG9vbDsKLQl2b2lkICpzdGFnZV9kZXNjX3Bvb2xfdmFkZHI7Ci0J c3RydWN0IGlkYSBzdGFnZV9pZHM7Ci0KLQlzdHJ1Y3QgaTkxNV9ndWNfY2xpZW50ICpleGVjYnVm X2NsaWVudDsKLQotCURFQ0xBUkVfQklUTUFQKGRvb3JiZWxsX2JpdG1hcCwgR1VDX05VTV9ET09S QkVMTFMpOwotCXVpbnQzMl90IGRiX2NhY2hlbGluZTsJCS8qIEN5Y2xpYyBjb3VudGVyIG1vZCBw YWdlc2l6ZQkqLwotCi0JLyogR3VDJ3MgRlcgc3BlY2lmaWMgcmVnaXN0ZXJzIHVzZWQgaW4gTU1J TyBzZW5kICovCi0Jc3RydWN0IHsKLQkJdTMyIGJhc2U7Ci0JCXVuc2lnbmVkIGludCBjb3VudDsK LQkJZW51bSBmb3JjZXdha2VfZG9tYWlucyBmd19kb21haW5zOwotCX0gc2VuZF9yZWdzOwotCi0J LyogVG8gc2VyaWFsaXplIHRoZSBpbnRlbF9ndWNfc2VuZCBhY3Rpb25zICovCi0Jc3RydWN0IG11 dGV4IHNlbmRfbXV0ZXg7Ci0KLQkvKiBHdUMncyBGVyBzcGVjaWZpYyBzZW5kIGZ1bmN0aW9uICov Ci0JaW50ICgqc2VuZCkoc3RydWN0IGludGVsX2d1YyAqZ3VjLCBjb25zdCB1MzIgKmRhdGEsIHUz MiBsZW4pOwotCi0JLyogR3VDJ3MgRlcgc3BlY2lmaWMgbm90aWZ5IGZ1bmN0aW9uICovCi0Jdm9p ZCAoKm5vdGlmeSkoc3RydWN0IGludGVsX2d1YyAqZ3VjKTsKLX07Ci0KLS8qIGludGVsX3VjLmMg Ki8KIHZvaWQgaW50ZWxfdWNfc2FuaXRpemVfb3B0aW9ucyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0 ZSAqZGV2X3ByaXYpOwogdm9pZCBpbnRlbF91Y19pbml0X2Vhcmx5KHN0cnVjdCBkcm1faTkxNV9w cml2YXRlICpkZXZfcHJpdik7CiB2b2lkIGludGVsX3VjX2luaXRfbW1pbyhzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqZGV2X3ByaXYpOwpAQCAtMTM2LDQ4ICszNSw1IEBAIHZvaWQgaW50ZWxfdWNf aW5pdF9mdyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpOwogdm9pZCBpbnRlbF91 Y19maW5pX2Z3KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdik7CiBpbnQgaW50ZWxf dWNfaW5pdF9odyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpOwogdm9pZCBpbnRl bF91Y19maW5pX2h3KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdik7Ci1pbnQgaW50 ZWxfZ3VjX3NhbXBsZV9mb3JjZXdha2Uoc3RydWN0IGludGVsX2d1YyAqZ3VjKTsKLWludCBpbnRl bF9ndWNfc2VuZF9ub3Aoc3RydWN0IGludGVsX2d1YyAqZ3VjLCBjb25zdCB1MzIgKmFjdGlvbiwg dTMyIGxlbik7Ci1pbnQgaW50ZWxfZ3VjX3NlbmRfbW1pbyhzdHJ1Y3QgaW50ZWxfZ3VjICpndWMs IGNvbnN0IHUzMiAqYWN0aW9uLCB1MzIgbGVuKTsKLWludCBpbnRlbF9ndWNfYXV0aF9odWMoc3Ry dWN0IGludGVsX2d1YyAqZ3VjLCB1MzIgcnNhX29mZnNldCk7Ci0KLXN0YXRpYyBpbmxpbmUgaW50 IGludGVsX2d1Y19zZW5kKHN0cnVjdCBpbnRlbF9ndWMgKmd1YywgY29uc3QgdTMyICphY3Rpb24s IHUzMiBsZW4pCi17Ci0JcmV0dXJuIGd1Yy0+c2VuZChndWMsIGFjdGlvbiwgbGVuKTsKLX0KLQot c3RhdGljIGlubGluZSB2b2lkIGludGVsX2d1Y19ub3RpZnkoc3RydWN0IGludGVsX2d1YyAqZ3Vj KQotewotCWd1Yy0+bm90aWZ5KGd1Yyk7Ci19Ci0KLS8qIGludGVsX2d1Y19sb2FkZXIuYyAqLwot aW50IGludGVsX2d1Y19zZWxlY3RfZncoc3RydWN0IGludGVsX2d1YyAqZ3VjKTsKLWludCBpbnRl bF9ndWNfaW5pdF9odyhzdHJ1Y3QgaW50ZWxfZ3VjICpndWMpOwotaW50IGludGVsX2d1Y19zdXNw ZW5kKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdik7Ci1pbnQgaW50ZWxfZ3VjX3Jl c3VtZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpOwotdTMyIGludGVsX2d1Y193 b3BjbV9zaXplKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdik7Ci0KLS8qIGk5MTVf Z3VjX3N1Ym1pc3Npb24uYyAqLwotaW50IGk5MTVfZ3VjX3N1Ym1pc3Npb25faW5pdChzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpOwotaW50IGk5MTVfZ3VjX3N1Ym1pc3Npb25fZW5h YmxlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdik7Ci12b2lkIGk5MTVfZ3VjX3N1 Ym1pc3Npb25fZGlzYWJsZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpOwotdm9p ZCBpOTE1X2d1Y19zdWJtaXNzaW9uX2Zpbmkoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9w cml2KTsKLXN0cnVjdCBpOTE1X3ZtYSAqaW50ZWxfZ3VjX2FsbG9jYXRlX3ZtYShzdHJ1Y3QgaW50 ZWxfZ3VjICpndWMsIHUzMiBzaXplKTsKLQotLyogaW50ZWxfZ3VjX2xvZy5jICovCi1pbnQgaW50 ZWxfZ3VjX2xvZ19jcmVhdGUoc3RydWN0IGludGVsX2d1YyAqZ3VjKTsKLXZvaWQgaW50ZWxfZ3Vj X2xvZ19kZXN0cm95KHN0cnVjdCBpbnRlbF9ndWMgKmd1Yyk7Ci1pbnQgaTkxNV9ndWNfbG9nX2Nv bnRyb2woc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LCB1NjQgY29udHJvbF92YWwp Owotdm9pZCBpOTE1X2d1Y19sb2dfcmVnaXN0ZXIoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRl dl9wcml2KTsKLXZvaWQgaTkxNV9ndWNfbG9nX3VucmVnaXN0ZXIoc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmRldl9wcml2KTsKLQotc3RhdGljIGlubGluZSB1MzIgZ3VjX2dndHRfb2Zmc2V0KHN0 cnVjdCBpOTE1X3ZtYSAqdm1hKQotewotCXUzMiBvZmZzZXQgPSBpOTE1X2dndHRfb2Zmc2V0KHZt YSk7Ci0JR0VNX0JVR19PTihvZmZzZXQgPCBHVUNfV09QQ01fVE9QKTsKLQlHRU1fQlVHX09OKHJh bmdlX292ZXJmbG93c190KHU2NCwgb2Zmc2V0LCB2bWEtPnNpemUsIEdVQ19HR1RUX1RPUCkpOwot CXJldHVybiBvZmZzZXQ7Ci19CiAKICNlbmRpZgotLSAKMi43LjQKCl9fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50 ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9y Zy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAo=