From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga14.intel.com (mga14.intel.com [192.55.52.115]) by gabe.freedesktop.org (Postfix) with ESMTPS id 8166F6E17E for ; Wed, 8 Jan 2020 07:54:34 +0000 (UTC) From: =?UTF-8?q?Zbigniew=20Kempczy=C5=84ski?= Date: Wed, 8 Jan 2020 08:54:09 +0100 Message-Id: <20200108075411.8943-2-zbigniew.kempczynski@intel.com> In-Reply-To: <20200108075411.8943-1-zbigniew.kempczynski@intel.com> References: <20200108075411.8943-1-zbigniew.kempczynski@intel.com> MIME-Version: 1.0 Subject: [igt-dev] [PATCH i-g-t v5 1/3] lib/intel_bufops: Introduce buffer operations List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: igt-dev-bounces@lists.freedesktop.org Sender: "igt-dev" To: igt-dev@lists.freedesktop.org List-ID: RGlmZmVyZW50IEdFTnMgc3VwcG9ydHMgZGlmZmVyZW50IHRpbGUgc3VyZmFjZXMuIE9sZGVyIEdF TnMKaGF2ZSBIVyBmZW5jZXMgdG8gYWxsb3cgWCAvIFkgc3VyZmFjZSB0aWxpbmcgLyBkZXRpbGlu Zy4KTmV3ZXIgR0VOcyBoYXZlIHRvIHRpbGUgLyBkZXRpbGUgc3VjaCBzdXJmYWNlIGluIHNvZnR3 YXJlLgoKVG8gbWFrZSB0ZXN0IGRldmVsb3BlciBsaWZlIGVhc2llciB0aGlzIGNvZGUgYWRkcyBi dWZmZXIKb3BlcmF0aW9ucyAoc2hvcnQgYnVmX29wcykgdG8gdXNlIGFwcHJvcHJpYXRlIGZ1bmN0 aW9ucyBhbGxvd2luZwpjb3B5aW5nIGxpbmVhciBidWZmZXIgdG8gQk8gYW5kIGZyb20gQk8gdG8g bGluZWFyIGJ1ZmZlcgpyZWdhcmRsZXNzIEdQVSBnZW5lcmF0aW9uIGFuZCB0aWxpbmcvc3dpenps aW5nIHdpdGhpbiBCTy4gRm9yIEdFTnMKaGF2aW5nIGZlbmNlcyBzdXBwb3J0IHByZWZlcmVuY2Ug aXMgdG8gdXNlIHRoZW0gaWYgdGhleSBhcmUgYXZhaWxhYmxlCihYIC8gWSB0aWxpbmcgaXMgcHJv YmVkIG9uIGJ1Zl9vcHMgaW5pdGlhbGl6YXRpb24pLgoKTm90ZTogb24gR2VuMiBjb2RlIHN1cHBv cnRzIG9ubHkgSFcgdGlsaW5nIGF0IHRoZSBtb21lbnQuCgpTaWduZWQtb2ZmLWJ5OiBaYmlnbmll dyBLZW1wY3p5xYRza2kgPHpiaWduaWV3LmtlbXBjenluc2tpQGludGVsLmNvbT4KQ2M6IENocmlz IFdpbHNvbiA8Y2hyaXNAY2hyaXMtd2lsc29uLmNvLnVrPgpDYzogS2F0YXJ6eW5hIERlYyA8a2F0 YXJ6eW5hLmRlY0BpbnRlbC5jb20+Ci0tLQogLi4uL2lndC1ncHUtdG9vbHMvaWd0LWdwdS10b29s cy1kb2NzLnhtbCAgICAgIHwgICAgMSArCiBsaWIvTWFrZWZpbGUuc291cmNlcyAgICAgICAgICAg ICAgICAgICAgICAgICAgfCAgICAyICsKIGxpYi9pbnRlbF9idWZvcHMuYyAgICAgICAgICAgICAg ICAgICAgICAgICAgICB8IDExMjAgKysrKysrKysrKysrKysrKysKIGxpYi9pbnRlbF9idWZvcHMu aCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgODQgKysKIGxpYi9tZXNvbi5idWlsZCAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDEgKwogNSBmaWxlcyBjaGFuZ2VkLCAx MjA4IGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWIvaW50ZWxfYnVmb3BzLmMK IGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWIvaW50ZWxfYnVmb3BzLmgKCmRpZmYgLS1naXQgYS9kb2Nz L3JlZmVyZW5jZS9pZ3QtZ3B1LXRvb2xzL2lndC1ncHUtdG9vbHMtZG9jcy54bWwgYi9kb2NzL3Jl ZmVyZW5jZS9pZ3QtZ3B1LXRvb2xzL2lndC1ncHUtdG9vbHMtZG9jcy54bWwKaW5kZXggNDU0ZDY0 ZTUuLmFhOWZlZjIwIDEwMDY0NAotLS0gYS9kb2NzL3JlZmVyZW5jZS9pZ3QtZ3B1LXRvb2xzL2ln dC1ncHUtdG9vbHMtZG9jcy54bWwKKysrIGIvZG9jcy9yZWZlcmVuY2UvaWd0LWdwdS10b29scy9p Z3QtZ3B1LXRvb2xzLWRvY3MueG1sCkBAIC00Miw2ICs0Miw3IEBACiAgICAgPHhpOmluY2x1ZGUg aHJlZj0ieG1sL2lndF92Z2VtLnhtbCIvPgogICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9pZ3Rf eDg2LnhtbCIvPgogICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9pbnRlbF9iYXRjaGJ1ZmZlci54 bWwiLz4KKyAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvaW50ZWxfYnVmb3BzLnhtbCIvPgogICAg IDx4aTppbmNsdWRlIGhyZWY9InhtbC9pbnRlbF9jaGlwc2V0LnhtbCIvPgogICAgIDx4aTppbmNs dWRlIGhyZWY9InhtbC9pbnRlbF9pby54bWwiLz4KICAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwv aW9jdGxfd3JhcHBlcnMueG1sIi8+CmRpZmYgLS1naXQgYS9saWIvTWFrZWZpbGUuc291cmNlcyBi L2xpYi9NYWtlZmlsZS5zb3VyY2VzCmluZGV4IDVkZDM5NjJlLi5kYTM0ZWFlNyAxMDA2NDQKLS0t IGEvbGliL01ha2VmaWxlLnNvdXJjZXMKKysrIGIvbGliL01ha2VmaWxlLnNvdXJjZXMKQEAgLTY3 LDYgKzY3LDggQEAgbGliX3NvdXJjZV9saXN0ID0JIAlcCiAJaW50ZWxfYXViLmgJCVwKIAlpbnRl bF9iYXRjaGJ1ZmZlci5jCVwKIAlpbnRlbF9iYXRjaGJ1ZmZlci5oCVwKKwlpbnRlbF9idWZvcHMu YwkJXAorCWludGVsX2J1Zm9wcy5oCQlcCiAJaW50ZWxfY2hpcHNldC5jCQlcCiAJaW50ZWxfY2hp cHNldC5oCQlcCiAJaW50ZWxfZGV2aWNlX2luZm8uYwlcCmRpZmYgLS1naXQgYS9saWIvaW50ZWxf YnVmb3BzLmMgYi9saWIvaW50ZWxfYnVmb3BzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMDAuLmZmZDM0OTRhCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2ludGVsX2J1Zm9wcy5j CkBAIC0wLDAgKzEsMTEyMCBAQAorLyoKKyAqIENvcHlyaWdodCDCqSAyMDIwIEludGVsIENvcnBv cmF0aW9uCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFy Z2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBh bmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0 byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0 aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJn ZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGll cyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICog U29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcg Y29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBw ZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0CisgKiBwYXJhZ3JhcGgpIHNoYWxs IGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhl CisgKiBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwg V0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5D TFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ VFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VN RU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xE RVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJ VFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwg QVJJU0lORworICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdB UkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUworICogSU4gVEhFIFNPRlRXQVJFLgorICoK KyAqLworCisjaW5jbHVkZSA8c3lzL2lvY3RsLmg+CisjaW5jbHVkZSAiaWd0LmgiCisjaW5jbHVk ZSAiaWd0X3g4Ni5oIgorI2luY2x1ZGUgImludGVsX2J1Zm9wcy5oIgorCisvKioKKyAqIFNFQ1RJ T046aW50ZWxfYnVmb3BzCisgKiBAc2hvcnRfZGVzY3JpcHRpb246IEJ1ZmZlciBvcGVyYXRpb24g b24gdGlsZWQgc3VyZmFjZXMKKyAqIEB0aXRsZTogQnVmZmVyIG9wZXJhdGlvbnMKKyAqIEBpbmNs dWRlOiBpZ3QuaAorICoKKyAqICMgQnVmZmVyIG9wZXJhdGlvbnMKKyAqCisgKiBJbnRlbCBHUFUg ZGV2aWNlcyBzdXBwb3J0cyBkaWZmZXJlbnQgc2V0IG9mIHRpbGVkIHN1cmZhY2VzLgorICogQ2hl Y2tpbmcgZWFjaCB0aW1lIHdoYXQgdGlsZSBmb3JtYXRzIGFyZSBzdXBwb3J0cyBpcyBjdW1iZXJz b21lIGFuZAorICogZXJyb3IgcHJvbmUuCisgKgorICogQnVmZmVyIG9wZXJhdGlvbiAoYnVmX29w cykgcHJvdmlkZSBhIHdyYXBwZXIgdG8gY29uZGl0aW9uYWwgY29kZSB3aGljaAorICogY2FuIGJl IHVzZWQgd2l0aG91dCB3b3JyeWluZyBvZiBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIGdpdmluZzoK KyAqIC0gY29weSBsaW5lYXIgdG8gdGlsZWQgYnVmZmVyCisgKiAtIGNvcHkgdGlsZWQgYnVmZmVy IHRvIGxpbmVhcgorICoKKyAqIEZvbGxvd2luZyBjb2RlIG9yZGVyIHNob3VsZCBiZSB1c2VkIChs aW5lYXIgaXMgcGxhaW4gbWVtb3J5IHdpdGggc29tZQorICogaW1hZ2UgZGF0YSk6CisgKgorICog fFs8IS0tIGxhbmd1YWdlPSJjIiAtLT4KKyAqIHN0cnVjdCBidWZfb3BzICpib3BzOworICogc3Ry dWN0IGludGVsX2J1ZiBpYnVmOworICogLi4uCisgKiBib3BzID0gYnVmX29wc19jcmVhdGUoZmQp OworICogaW50ZWxfYnVmX2luaXQoYm9wcywgJmlidWYsIDUxMiwgNTEyLCAzMiwgSTkxNV9USUxJ TkdfWCwgZmFsc2UpOworICogLi4uCisgKiBsaW5lYXJfdG9faW50ZWxfYnVmKGJvcHMsICZpYnVm LCBsaW5lYXIpOworICogLi4uCisgKiBpbnRlbF9idWZfdG9fbGluZWFyKGJvcHMsICZpYnVmLCBs aW5lYXIpOworICogLi4uCisgKiBpbnRlbF9idWZfY2xvc2UoYm9wcywgJmlidWYpOworICogLi4u CisgKiBidWZfb3BzX2Rlc3Ryb3koYm9wcyk7CisgKiBdfAorICoKKyAqIENhbGxpbmcgYnVmX29w c19jcmVhdGUoZmQpIHByb2JlcyBoYXJkd2FyZSBjYXBhYmlsaXRpZXMgKHN1cHBvcnRlZCBmZW5j ZXMsCisgKiBzd2l6emxpbmcpIGFuZCByZXR1cm5zIG9wYXF1ZSBwb2ludGVyIHRvIGJ1Zl9vcHMu IEZyb20gbm93IG9uCisgKiBpbnRlbF9idWZfdG9fbGluZWFyKCkgYW5kIGxpbmVhcl90b19pbnRl bF9idWYoKSB3aWxsIGNob29zZSBhcHByb3ByaWF0ZQorICogZnVuY3Rpb24gdG8gZG8gdGhlIGpv Yi4KKyAqCisgKiBOb3RlOiBidWZvcHMgZG9lc24ndCBzdXBwb3J0IFNXIHRpbGluZyBjb2RlIHll dC4KKyAqLworCisvLyNkZWZpbmUgQlVGT1BTX0RFQlVHR0lORworI2lmZGVmIEJVRk9QU19ERUJV R0dJTkcKKyNkZWZpbmUgREVCVUcoLi4uKSBwcmludGYoX19WQV9BUkdTX18pCisjZGVmaW5lIERF QlVHRk4oKSBERUJVRygiXHQgLT4gJXMoKVxuIiwgX19GVU5DVElPTl9fKQorI2Vsc2UKKyNkZWZp bmUgREVCVUcoLi4uKQorI2RlZmluZSBERUJVR0ZOKCkKKyNlbmRpZgorCisjZGVmaW5lIFRJTEVf REVGKHgpICgxIDw8ICh4KSkKKyNkZWZpbmUgVElMRV9OT05FICAgVElMRV9ERUYoSTkxNV9USUxJ TkdfTk9ORSkKKyNkZWZpbmUgVElMRV9YICAgICAgVElMRV9ERUYoSTkxNV9USUxJTkdfWCkKKyNk ZWZpbmUgVElMRV9ZICAgICAgVElMRV9ERUYoSTkxNV9USUxJTkdfWSkKKyNkZWZpbmUgVElMRV9Z ZiAgICAgVElMRV9ERUYoSTkxNV9USUxJTkdfWWYpCisjZGVmaW5lIFRJTEVfWXMgICAgIFRJTEVf REVGKEk5MTVfVElMSU5HX1lzKQorCit0eXBlZGVmIHZvaWQgKCpib19jb3B5KShzdHJ1Y3QgYnVm X29wcyAqLCBzdHJ1Y3QgaW50ZWxfYnVmICosIHVpbnQzMl90ICopOworCitzdHJ1Y3QgYnVmX29w cyB7CisJaW50IGZkOworCWludCBnZW5fc3RhcnQ7CisJaW50IGdlbl9lbmQ7CisJaW50IGludGVs X2dlbjsKKwl1aW50MzJfdCBzdXBwb3J0ZWRfdGlsZXM7CisJdWludDMyX3Qgc3VwcG9ydGVkX2h3 X3RpbGVzOworCXVpbnQzMl90IHN3aXp6bGVfeDsKKwl1aW50MzJfdCBzd2l6emxlX3k7CisJYm9f Y29weSBsaW5lYXJfdG87CisJYm9fY29weSBsaW5lYXJfdG9feDsKKwlib19jb3B5IGxpbmVhcl90 b195OworCWJvX2NvcHkgbGluZWFyX3RvX3lmOworCWJvX2NvcHkgbGluZWFyX3RvX3lzOworCWJv X2NvcHkgdG9fbGluZWFyOworCWJvX2NvcHkgeF90b19saW5lYXI7CisJYm9fY29weSB5X3RvX2xp bmVhcjsKKwlib19jb3B5IHlmX3RvX2xpbmVhcjsKKwlib19jb3B5IHlzX3RvX2xpbmVhcjsKK307 CisKK3N0YXRpYyBjb25zdCBjaGFyICp0aWxpbmdfc3RyKHVpbnQzMl90IHRpbGluZykKK3sKKwlz d2l0Y2ggKHRpbGluZykgeworCWNhc2UgSTkxNV9USUxJTkdfTk9ORTogcmV0dXJuICJOT05FIjsK KwljYXNlIEk5MTVfVElMSU5HX1g6ICAgIHJldHVybiAiWCI7CisJY2FzZSBJOTE1X1RJTElOR19Z OiAgICByZXR1cm4gIlkiOworCWNhc2UgSTkxNV9USUxJTkdfWWY6ICAgcmV0dXJuICJZZiI7CisJ Y2FzZSBJOTE1X1RJTElOR19ZczogICByZXR1cm4gIllzIjsKKwlkZWZhdWx0OiAgICAgICAgICAg ICAgIHJldHVybiAiVU5LTk9XTiI7CisJfQorfQorCitzdGF0aWMgY29uc3QgY2hhciAqYm9vbF9z dHIoYm9vbCB2KQoreworCXJldHVybiB2ID8gInllcyIgOiAibm8iOworfQorCitzdGF0aWMgaW5s aW5lIGJvb2wgaXNfaHdfdGlsaW5nX3N1cHBvcnRlZChzdHJ1Y3QgYnVmX29wcyAqYm9wcywgdWlu dDMyX3QgdGlsaW5nKQoreworCXJldHVybiBib3BzLT5zdXBwb3J0ZWRfaHdfdGlsZXMgJiBUSUxF X0RFRih0aWxpbmcpOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgaXNfdGlsaW5nX3N1cHBvcnRl ZChzdHJ1Y3QgYnVmX29wcyAqYm9wcywgdWludDMyX3QgdGlsaW5nKQoreworCXJldHVybiBib3Bz LT5zdXBwb3J0ZWRfdGlsZXMgJiBUSUxFX0RFRih0aWxpbmcpOworfQorCitzdGF0aWMgaW50IF9f Z2VtX2dldF90aWxpbmcoaW50IGZkLCBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2dldF90aWxpbmcgKmFy ZykKK3sKKwlpbnQgZXJyOworCisJZXJyID0gMDsKKwlpZiAoaWd0X2lvY3RsKGZkLCBEUk1fSU9D VExfSTkxNV9HRU1fR0VUX1RJTElORywgYXJnKSkKKwkJZXJyID0gLWVycm5vOworCWVycm5vID0g MDsKKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBib29sIF9fZ2V0X3RpbGluZyhpbnQgZmQs IHVpbnQzMl90IGhhbmRsZSwgdWludDMyX3QgKnRpbGluZywKKwkJCSB1aW50MzJfdCAqc3dpenps ZSkKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2dldF90aWxpbmcgZ2V0X3RpbGluZzsKKworCW1l bXNldCgmZ2V0X3RpbGluZywgMCwgc2l6ZW9mKGdldF90aWxpbmcpKTsKKwlnZXRfdGlsaW5nLmhh bmRsZSA9IGhhbmRsZTsKKworCWlmIChfX2dlbV9nZXRfdGlsaW5nKGZkLCAmZ2V0X3RpbGluZykg IT0gMCkKKwkJcmV0dXJuIGZhbHNlOworCisJKnRpbGluZyA9IGdldF90aWxpbmcudGlsaW5nX21v ZGU7CisJKnN3aXp6bGUgPSBnZXRfdGlsaW5nLnN3aXp6bGVfbW9kZTsKKwlpZ3RfZGVidWcoImJ1 ZiB0aWxpbmc6ICVzLCBzd2l6emxlOiAleCwgcGh5c19zd2l6emxlOiAleFxuIiwKKwkJICB0aWxp bmdfc3RyKGdldF90aWxpbmcudGlsaW5nX21vZGUpLAorCQkgIGdldF90aWxpbmcuc3dpenpsZV9t b2RlLAorCQkgIGdldF90aWxpbmcucGh5c19zd2l6emxlX21vZGUpOworCisJcmV0dXJuIGdldF90 aWxpbmcucGh5c19zd2l6emxlX21vZGUgPT0gZ2V0X3RpbGluZy5zd2l6emxlX21vZGU7Cit9CisK K3N0YXRpYyBpbnQgX19zZXRfdGlsaW5nKGludCBmZCwgdWludDMyX3QgaGFuZGxlLCB1aW50MzJf dCB0aWxpbmcsCisJCQl1aW50MzJfdCBzdHJpZGUpCit7CisJc3RydWN0IGRybV9pOTE1X2dlbV9z ZXRfdGlsaW5nIHN0OworCisJc3QuaGFuZGxlID0gaGFuZGxlOworCXN0LnRpbGluZ19tb2RlID0g dGlsaW5nOworCXN0LnN0cmlkZSA9IHRpbGluZyA/IHN0cmlkZSA6IDA7CisKKwlyZXR1cm4gaW9j dGwoZmQsIERSTV9JT0NUTF9JOTE1X0dFTV9TRVRfVElMSU5HLCAmc3QpOworfQorCitzdGF0aWMg dm9pZCBzZXRfaHdfdGlsZWQoc3RydWN0IGJ1Zl9vcHMgKmJvcHMsIHN0cnVjdCBpbnRlbF9idWYg KmJ1ZikKK3sKKwlpbnQgcmV0OworCisJaWYgKGJ1Zi0+dGlsaW5nICE9IEk5MTVfVElMSU5HX1gg JiYgYnVmLT50aWxpbmcgIT0gSTkxNV9USUxJTkdfWSkKKwkJcmV0dXJuOworCisJaWYgKCFidWZf b3BzX2hhc19od19mZW5jZShib3BzLCBidWYtPnRpbGluZykpCisJCXJldHVybjsKKworCXJldCA9 IF9fc2V0X3RpbGluZyhib3BzLT5mZCwgYnVmLT5oYW5kbGUsIGJ1Zi0+dGlsaW5nLCBidWYtPnN0 cmlkZSk7CisJaWd0X2Fzc2VydChyZXQgPT0gMCk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25n IHN3aXp6bGVfYml0KHVuc2lnbmVkIGludCBiaXQsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0KQorewor CXJldHVybiAob2Zmc2V0ICYgKDF1bCA8PCBiaXQpKSA+PiAoYml0IC0gNik7Cit9CisKK3N0YXRp YyB1bnNpZ25lZCBsb25nIHN3aXp6bGVfYWRkcih2b2lkICpwdHIsIHVpbnQzMl90IHN3aXp6bGUp Cit7CisJdW5zaWduZWQgbG9uZyBhZGRyID0gdG9fdXNlcl9wb2ludGVyKHB0cik7CisKKwlzd2l0 Y2ggKHN3aXp6bGUpIHsKKwljYXNlIEk5MTVfQklUXzZfU1dJWlpMRV9OT05FOgorCQlyZXR1cm4g YWRkcjsKKwljYXNlIEk5MTVfQklUXzZfU1dJWlpMRV85OgorCQlyZXR1cm4gYWRkciBeIHN3aXp6 bGVfYml0KDksIGFkZHIpOworCWNhc2UgSTkxNV9CSVRfNl9TV0laWkxFXzlfMTA6CisJCXJldHVy biBhZGRyIF4gc3dpenpsZV9iaXQoOSwgYWRkcikgXiBzd2l6emxlX2JpdCgxMCwgYWRkcik7CisJ Y2FzZSBJOTE1X0JJVF82X1NXSVpaTEVfOV8xMToKKwkJcmV0dXJuIGFkZHIgXiBzd2l6emxlX2Jp dCg5LCBhZGRyKSBeIHN3aXp6bGVfYml0KDExLCBhZGRyKTsKKwljYXNlIEk5MTVfQklUXzZfU1dJ WlpMRV85XzEwXzExOgorCQlyZXR1cm4gKGFkZHIgXgorCQkJc3dpenpsZV9iaXQoOSwgYWRkcikg XgorCQkJc3dpenpsZV9iaXQoMTAsIGFkZHIpIF4KKwkJCXN3aXp6bGVfYml0KDExLCBhZGRyKSk7 CisKKwljYXNlIEk5MTVfQklUXzZfU1dJWlpMRV9VTktOT1dOOgorCWNhc2UgSTkxNV9CSVRfNl9T V0laWkxFXzlfMTc6CisJY2FzZSBJOTE1X0JJVF82X1NXSVpaTEVfOV8xMF8xNzoKKwlkZWZhdWx0 OgorCQkvKiBJZiB3ZSBoaXQgdGhpcyBjYXNlLCB3ZSBuZWVkIHRvIGltcGxlbWVudCBzdXBwb3J0 IGZvciB0aGUKKwkJICogYXBwcm9wcmlhdGUgc3dpenpsaW5nIG1ldGhvZC4gKi8KKwkJaWd0X3Jl cXVpcmUoZmFsc2UpOworCQlyZXR1cm4gYWRkcjsKKwl9Cit9CisKK3N0YXRpYyB2b2lkICp4X3B0 cih2b2lkICpwdHIsCisJCSAgIHVuc2lnbmVkIGludCB4LCB1bnNpZ25lZCBpbnQgeSwKKwkJICAg dW5zaWduZWQgaW50IHN0cmlkZSwgdW5zaWduZWQgaW50IGNwcCkKK3sKKwljb25zdCBpbnQgdGls ZV93aWR0aCA9IDUxMjsKKwljb25zdCBpbnQgdGlsZV9oZWlnaHQgPSA4OworCWNvbnN0IGludCB0 aWxlX3NpemUgPSB0aWxlX3dpZHRoICogdGlsZV9oZWlnaHQ7CisJaW50IHRpbGVfeCwgdGlsZV95 OworCWludCBvZmZzZXRfeCwgb2Zmc2V0X3ksIHBvczsKKworCXggKj0gY3BwOworCXRpbGVfeCA9 IHggLyB0aWxlX3dpZHRoOworCXRpbGVfeSA9IHkgLyB0aWxlX2hlaWdodDsKKwlvZmZzZXRfeCA9 ICh0aWxlX3ggKiB0aWxlX3NpemUpOworCW9mZnNldF95ID0gKHRpbGVfeSAqIHN0cmlkZSAqIHRp bGVfaGVpZ2h0KTsKKworCXBvcyA9IG9mZnNldF95ICsgb2Zmc2V0X3ggKworCQkJKHkgJSB0aWxl X2hlaWdodCAqIHRpbGVfd2lkdGgpICsgKHggJSB0aWxlX3dpZHRoKTsKKworCXJldHVybiBwdHIg KyBwb3M7Cit9CisKK3N0YXRpYyB2b2lkICp5X3B0cih2b2lkICpwdHIsCisJCSAgIHVuc2lnbmVk IGludCB4LCB1bnNpZ25lZCBpbnQgeSwKKwkJICAgdW5zaWduZWQgaW50IHN0cmlkZSwgdW5zaWdu ZWQgaW50IGNwcCkKK3sKKwljb25zdCBpbnQgdGlsZV93aWR0aCA9IDEyODsKKwljb25zdCBpbnQg dGlsZV9oZWlnaHQgPSAzMjsKKwljb25zdCBpbnQgb3dvcmRzID0gMTY7CisJY29uc3QgaW50IHRp bGVfc2l6ZSA9IHRpbGVfd2lkdGggKiB0aWxlX2hlaWdodDsKKwlpbnQgdGlsZV94LCB0aWxlX3k7 CisJaW50IG9mZnNldF94LCBvZmZzZXRfeSwgcG9zOworCWludCBzaGlmdF94LCBzaGlmdF95Owor CisJeCAqPSBjcHA7CisJdGlsZV94ID0geCAvIHRpbGVfd2lkdGg7CisJdGlsZV95ID0geSAvIHRp bGVfaGVpZ2h0OworCW9mZnNldF94ID0gdGlsZV94ICogdGlsZV9zaXplOworCW9mZnNldF95ID0g dGlsZV95ICogc3RyaWRlICogdGlsZV9oZWlnaHQ7CisJc2hpZnRfeCA9IHggJSBvd29yZHMgKyAo eCAlIHRpbGVfd2lkdGgpIC8gb3dvcmRzICogdGlsZV93aWR0aCAqIGNwcDsKKwlzaGlmdF95ID0g eSAlIHRpbGVfaGVpZ2h0ICogb3dvcmRzOworCisJcG9zID0gb2Zmc2V0X3kgKyBvZmZzZXRfeCAr IHNoaWZ0X3ggKyBzaGlmdF95OworCisJcmV0dXJuIHB0ciArIHBvczsKK30KKworc3RhdGljIHZv aWQgKnlmX3B0cih2b2lkICpwdHIsCisJCSAgICB1bnNpZ25lZCBpbnQgeCwgdW5zaWduZWQgaW50 IHksCisJCSAgICB1bnNpZ25lZCBpbnQgc3RyaWRlLCB1bnNpZ25lZCBpbnQgY3BwKQoreworCWNv bnN0IGludCB0aWxlX3NpemUgPSA0ICogMTAyNDsKKwljb25zdCBpbnQgdGlsZV93aWR0aCA9IDEy ODsKKwlpbnQgcm93X3NpemUgPSAoc3RyaWRlIC8gdGlsZV93aWR0aCkgKiB0aWxlX3NpemU7CisK Kwl4ICo9IGNwcDsgLyogY29udmVydCB0byBCeXRlIG9mZnNldCAqLworCisKKwkvKgorCSAqIFdp dGhpbiBhIDRrIFlmIHRpbGUsIHRoZSBieXRlIHN3aXp6bGluZyBwYXR0ZXJuIGlzCisJICogbXNi Li4uLi4ubHNiCisJICogeHl4eXh5eXl4eHh4CisJICogVGhlIHRpbGVzIHRoZW1zZWx2ZXMgYXJl IGxhaWQgb3V0IGluIHJvdyBtYWpvciBvcmRlci4KKwkgKi8KKwlyZXR1cm4gcHRyICsKKwkJCSgo eCAmIDB4ZikgKiAxKSArIC8qIDR4MSBwaXhlbHMoMzJicHApID0gMTZCICovCisJCQkoKHkgJiAw eDMpICogMTYpICsgLyogNHg0IHBpeGVscyA9IDY0QiAqLworCQkJKCgoeSAmIDB4NCkgPj4gMikg KiA2NCkgKyAvKiAxeDIgNjRCIGJsb2NrcyAqLworCQkJKCgoeCAmIDB4MTApID4+IDQpICogMTI4 KSArIC8qIDJ4MiA2NEIgYmxvY2tzID0gMjU2QiBibG9jayAqLworCQkJKCgoeSAmIDB4OCkgPj4g MykgKiAyNTYpICsgLyogMngxIDI1NkIgYmxvY2tzICovCisJCQkoKCh4ICYgMHgyMCkgPj4gNSkg KiA1MTIpICsgLyogMngyIDI1NkIgYmxvY2tzICovCisJCQkoKCh5ICYgMHgxMCkgPj4gNCkgKiAx MDI0KSArIC8qIDR4MiAyNTYgYmxvY2tzICovCisJCQkoKCh4ICYgMHg0MCkgPj4gNikgKiAyMDQ4 KSArIC8qIDR4NCAyNTZCIGJsb2NrcyA9IDRrIHRpbGUgKi8KKwkJCSgoKHggJiB+MHg3ZikgPj4g NykgKiB0aWxlX3NpemUpICsgLyogcm93IG9mIHRpbGVzICovCisJCQkoKCh5ICYgfjB4MWYpID4+ IDUpICogcm93X3NpemUpOworfQorCit0eXBlZGVmIHZvaWQgKigqZm5fcHRyKSh2b2lkICosIHVu c2lnbmVkIGludCwgdW5zaWduZWQgaW50LAorCQkJdW5zaWduZWQgaW50LCB1bnNpZ25lZCBpbnQp Oworc3RhdGljIGZuX3B0ciBfX2dldF90aWxlX2ZuX3B0cihpbnQgdGlsaW5nKQoreworCWZuX3B0 ciBmbiA9IE5VTEw7CisKKwlzd2l0Y2ggKHRpbGluZykgeworCWNhc2UgSTkxNV9USUxJTkdfWDoK KwkJZm4gPSB4X3B0cjsKKwkJYnJlYWs7CisJY2FzZSBJOTE1X1RJTElOR19ZOgorCQlmbiA9IHlf cHRyOworCQlicmVhazsKKwljYXNlIEk5MTVfVElMSU5HX1lmOgorCQlmbiA9IHlmX3B0cjsKKwkJ YnJlYWs7CisJY2FzZSBJOTE1X1RJTElOR19ZczoKKwkJLyogVG8gYmUgaW1wbGVtZW50ZWQgKi8K KwkJYnJlYWs7CisJfQorCisJaWd0X2Fzc2VydF9mKGZuLCAiQ2FuJ3QgZmluZCB0aWxlIGZ1bmN0 aW9uIGZvciB0aWxpbmc6ICVkXG4iLCB0aWxpbmcpOworCisJcmV0dXJuIGZuOworfQorCitzdGF0 aWMgdm9pZCBfX2NvcHlfbGluZWFyX3RvKGludCBmZCwgc3RydWN0IGludGVsX2J1ZiAqYnVmLAor CQkJICAgICBjb25zdCB1aW50MzJfdCAqbGluZWFyLAorCQkJICAgICBpbnQgdGlsaW5nLCB1aW50 MzJfdCBzd2l6emxlKQoreworCWludCBoZWlnaHQgPSBpbnRlbF9idWZfaGVpZ2h0KGJ1Zik7CisJ aW50IHdpZHRoID0gaW50ZWxfYnVmX3dpZHRoKGJ1Zik7CisJZm5fcHRyIGZuID0gX19nZXRfdGls ZV9mbl9wdHIodGlsaW5nKTsKKwl2b2lkICptYXA7CisKKwlnZW1fc2V0X2RvbWFpbihmZCwgYnVm LT5oYW5kbGUsCisJCSAgICAgICBJOTE1X0dFTV9ET01BSU5fQ1BVLCBJOTE1X0dFTV9ET01BSU5f Q1BVKTsKKworCW1hcCA9IF9fZ2VtX21tYXBfb2Zmc2V0X19jcHUoZmQsIGJ1Zi0+aGFuZGxlLCAw LAorCQkJCSAgICAgYnVmLT5zaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFKTsKKwlpZiAoIW1h cCkKKwkJbWFwID0gZ2VtX21tYXBfX2NwdShmZCwgYnVmLT5oYW5kbGUsIDAsCisJCQkJICAgIGJ1 Zi0+c2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSk7CisKKwlmb3IgKGludCB5ID0gMDsgeSA8 IGhlaWdodDsgeSsrKSB7CisJCWZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykgeworCQkJ dWludDMyX3QgKnB0ciA9IGZuKG1hcCwgeCwgeSwgYnVmLT5zdHJpZGUsIGJ1Zi0+YnBwLzgpOwor CisJCQlpZiAoc3dpenpsZSkKKwkJCQlwdHIgPSBmcm9tX3VzZXJfcG9pbnRlcihzd2l6emxlX2Fk ZHIocHRyLAorCQkJCQkJCQkgICAgIHN3aXp6bGUpKTsKKwkJCSpwdHIgPSBsaW5lYXJbeSAqIHdp ZHRoICsgeF07CisJCX0KKwl9CisKKwltdW5tYXAobWFwLCBidWYtPnNpemUpOworfQorCitzdGF0 aWMgdm9pZCBjb3B5X2xpbmVhcl90b194KHN0cnVjdCBidWZfb3BzICpib3BzLCBzdHJ1Y3QgaW50 ZWxfYnVmICpidWYsCisJCQkgICAgIHVpbnQzMl90ICpsaW5lYXIpCit7CisJREVCVUdGTigpOwor CV9fY29weV9saW5lYXJfdG8oYm9wcy0+ZmQsIGJ1ZiwgbGluZWFyLCBJOTE1X1RJTElOR19YLCBi b3BzLT5zd2l6emxlX3gpOworfQorCitzdGF0aWMgdm9pZCBjb3B5X2xpbmVhcl90b195KHN0cnVj dCBidWZfb3BzICpib3BzLCBzdHJ1Y3QgaW50ZWxfYnVmICpidWYsCisJCQkgICAgIHVpbnQzMl90 ICpsaW5lYXIpCit7CisJREVCVUdGTigpOworCV9fY29weV9saW5lYXJfdG8oYm9wcy0+ZmQsIGJ1 ZiwgbGluZWFyLCBJOTE1X1RJTElOR19ZLCBib3BzLT5zd2l6emxlX3kpOworfQorCitzdGF0aWMg dm9pZCBjb3B5X2xpbmVhcl90b195ZihzdHJ1Y3QgYnVmX29wcyAqYm9wcywgc3RydWN0IGludGVs X2J1ZiAqYnVmLAorCQkJICAgICAgdWludDMyX3QgKmxpbmVhcikKK3sKKwlERUJVR0ZOKCk7CisJ X19jb3B5X2xpbmVhcl90byhib3BzLT5mZCwgYnVmLCBsaW5lYXIsIEk5MTVfVElMSU5HX1lmLCAw KTsKK30KKworc3RhdGljIHZvaWQgY29weV9saW5lYXJfdG9feXMoc3RydWN0IGJ1Zl9vcHMgKmJv cHMsIHN0cnVjdCBpbnRlbF9idWYgKmJ1ZiwKKwkJCSAgICAgIHVpbnQzMl90ICpsaW5lYXIpCit7 CisJREVCVUdGTigpOworCV9fY29weV9saW5lYXJfdG8oYm9wcy0+ZmQsIGJ1ZiwgbGluZWFyLCBJ OTE1X1RJTElOR19ZcywgMCk7Cit9CisKK3N0YXRpYyB2b2lkIF9fY29weV90b19saW5lYXIoaW50 IGZkLCBzdHJ1Y3QgaW50ZWxfYnVmICpidWYsCisJCQkgICAgIHVpbnQzMl90ICpsaW5lYXIsIGlu dCB0aWxpbmcsIHVpbnQzMl90IHN3aXp6bGUpCit7CisJaW50IGhlaWdodCA9IGludGVsX2J1Zl9o ZWlnaHQoYnVmKTsKKwlpbnQgd2lkdGggPSBpbnRlbF9idWZfd2lkdGgoYnVmKTsKKwlmbl9wdHIg Zm4gPSBfX2dldF90aWxlX2ZuX3B0cih0aWxpbmcpOworCXZvaWQgKm1hcDsKKworCWdlbV9zZXRf ZG9tYWluKGZkLCBidWYtPmhhbmRsZSwgSTkxNV9HRU1fRE9NQUlOX0NQVSwgMCk7CisKKwltYXAg PSBfX2dlbV9tbWFwX29mZnNldF9fY3B1KGZkLCBidWYtPmhhbmRsZSwgMCwgYnVmLT5zaXplLCBQ Uk9UX1JFQUQpOworCWlmICghbWFwKQorCQltYXAgPSBnZW1fbW1hcF9fY3B1KGZkLCBidWYtPmhh bmRsZSwgMCwgYnVmLT5zaXplLCBQUk9UX1JFQUQpOworCisJZm9yIChpbnQgeSA9IDA7IHkgPCBo ZWlnaHQ7IHkrKykgeworCQlmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspIHsKKwkJCXVp bnQzMl90ICpwdHIgPSBmbihtYXAsIHgsIHksIGJ1Zi0+c3RyaWRlLCBidWYtPmJwcC84KTsKKwor CQkJaWYgKHN3aXp6bGUpCisJCQkJcHRyID0gZnJvbV91c2VyX3BvaW50ZXIoc3dpenpsZV9hZGRy KHB0ciwKKwkJCQkJCQkJICAgICBzd2l6emxlKSk7CisJCQlsaW5lYXJbeSAqIHdpZHRoICsgeF0g PSAqcHRyOworCQl9CisJfQorCisJbXVubWFwKG1hcCwgYnVmLT5zaXplKTsKK30KKworc3RhdGlj IHZvaWQgY29weV94X3RvX2xpbmVhcihzdHJ1Y3QgYnVmX29wcyAqYm9wcywgc3RydWN0IGludGVs X2J1ZiAqYnVmLAorCQkJICAgICB1aW50MzJfdCAqbGluZWFyKQoreworCURFQlVHRk4oKTsKKwlf X2NvcHlfdG9fbGluZWFyKGJvcHMtPmZkLCBidWYsIGxpbmVhciwgSTkxNV9USUxJTkdfWCwgYm9w cy0+c3dpenpsZV94KTsKK30KKworc3RhdGljIHZvaWQgY29weV95X3RvX2xpbmVhcihzdHJ1Y3Qg YnVmX29wcyAqYm9wcywgc3RydWN0IGludGVsX2J1ZiAqYnVmLAorCQkJICAgICB1aW50MzJfdCAq bGluZWFyKQoreworCURFQlVHRk4oKTsKKwlfX2NvcHlfdG9fbGluZWFyKGJvcHMtPmZkLCBidWYs IGxpbmVhciwgSTkxNV9USUxJTkdfWSwgYm9wcy0+c3dpenpsZV95KTsKK30KKworc3RhdGljIHZv aWQgY29weV95Zl90b19saW5lYXIoc3RydWN0IGJ1Zl9vcHMgKmJvcHMsIHN0cnVjdCBpbnRlbF9i dWYgKmJ1ZiwKKwkJCSAgICAgIHVpbnQzMl90ICpsaW5lYXIpCit7CisJREVCVUdGTigpOworCV9f Y29weV90b19saW5lYXIoYm9wcy0+ZmQsIGJ1ZiwgbGluZWFyLCBJOTE1X1RJTElOR19ZZiwgMCk7 Cit9CisKK3N0YXRpYyB2b2lkIGNvcHlfeXNfdG9fbGluZWFyKHN0cnVjdCBidWZfb3BzICpib3Bz LCBzdHJ1Y3QgaW50ZWxfYnVmICpidWYsCisJCQkgICAgICB1aW50MzJfdCAqbGluZWFyKQorewor CURFQlVHRk4oKTsKKwlfX2NvcHlfdG9fbGluZWFyKGJvcHMtPmZkLCBidWYsIGxpbmVhciwgSTkx NV9USUxJTkdfWXMsIDApOworfQorCitzdGF0aWMgdm9pZCBjb3B5X2xpbmVhcl90b19ndHQoc3Ry dWN0IGJ1Zl9vcHMgKmJvcHMsIHN0cnVjdCBpbnRlbF9idWYgKmJ1ZiwKKwkJCSAgICAgICB1aW50 MzJfdCAqbGluZWFyKQoreworCXZvaWQgKm1hcDsKKworCURFQlVHRk4oKTsKKworCWdlbV9zZXRf ZG9tYWluKGJvcHMtPmZkLCBidWYtPmhhbmRsZSwKKwkJICAgICAgIEk5MTVfR0VNX0RPTUFJTl9H VFQsIEk5MTVfR0VNX0RPTUFJTl9HVFQpOworCisJbWFwID0gZ2VtX21tYXBfX2d0dChib3BzLT5m ZCwgYnVmLT5oYW5kbGUsCisJCQkgICAgYnVmLT5zaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRF KTsKKworCW1lbWNweShtYXAsIGxpbmVhciwgYnVmLT5zaXplKTsKKworCW11bm1hcChtYXAsIGJ1 Zi0+c2l6ZSk7Cit9CisKK3N0YXRpYyB2b2lkIGNvcHlfZ3R0X3RvX2xpbmVhcihzdHJ1Y3QgYnVm X29wcyAqYm9wcywgc3RydWN0IGludGVsX2J1ZiAqYnVmLAorCQkJICAgICAgIHVpbnQzMl90ICps aW5lYXIpCit7CisJdm9pZCAqbWFwOworCisJREVCVUdGTigpOworCisJZ2VtX3NldF9kb21haW4o Ym9wcy0+ZmQsIGJ1Zi0+aGFuZGxlLAorCQkgICAgICAgSTkxNV9HRU1fRE9NQUlOX0dUVCwgMCk7 CisKKwltYXAgPSBnZW1fbW1hcF9fZ3R0KGJvcHMtPmZkLCBidWYtPmhhbmRsZSwKKwkJCSAgICBi dWYtPnNpemUsIFBST1RfUkVBRCk7CisKKwlpZ3RfbWVtY3B5X2Zyb21fd2MobGluZWFyLCBtYXAs IGJ1Zi0+c2l6ZSk7CisKKwltdW5tYXAobWFwLCBidWYtPnNpemUpOworfQorCitzdGF0aWMgdm9p ZCBjb3B5X2xpbmVhcl90b193YyhzdHJ1Y3QgYnVmX29wcyAqYm9wcywgc3RydWN0IGludGVsX2J1 ZiAqYnVmLAorCQkJICAgICAgdWludDMyX3QgKmxpbmVhcikKK3sKKwl2b2lkICptYXA7CisKKwlE RUJVR0ZOKCk7CisKKwlnZW1fc2V0X2RvbWFpbihib3BzLT5mZCwgYnVmLT5oYW5kbGUsCisJCSAg ICAgICBJOTE1X0dFTV9ET01BSU5fR1RULCBJOTE1X0dFTV9ET01BSU5fR1RUKTsKKworCW1hcCA9 IF9fZ2VtX21tYXBfb2Zmc2V0X193Yyhib3BzLT5mZCwgYnVmLT5oYW5kbGUsIDAsCisJCQkJICAg IGJ1Zi0+c2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSk7CisJaWYgKCFtYXApCisJCW1hcCA9 IGdlbV9tbWFwX193Yyhib3BzLT5mZCwgYnVmLT5oYW5kbGUsIDAsCisJCQkJICAgYnVmLT5zaXpl LCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFKTsKKworCW1lbWNweShtYXAsIGxpbmVhciwgYnVmLT5z aXplKTsKKworCW11bm1hcChtYXAsIGJ1Zi0+c2l6ZSk7Cit9CisKK3N0YXRpYyB2b2lkIGNvcHlf d2NfdG9fbGluZWFyKHN0cnVjdCBidWZfb3BzICpib3BzLCBzdHJ1Y3QgaW50ZWxfYnVmICpidWYs CisJCQkgICAgICB1aW50MzJfdCAqbGluZWFyKQoreworCXZvaWQgKm1hcDsKKworCURFQlVHRk4o KTsKKworCWdlbV9zZXRfZG9tYWluKGJvcHMtPmZkLCBidWYtPmhhbmRsZSwKKwkJICAgICAgIEk5 MTVfR0VNX0RPTUFJTl9HVFQsIDApOworCisJbWFwID0gX19nZW1fbW1hcF9vZmZzZXRfX3djKGJv cHMtPmZkLCBidWYtPmhhbmRsZSwgMCwKKwkJCQkgICAgYnVmLT5zaXplLCBQUk9UX1JFQUQpOwor CWlmICghbWFwKQorCQltYXAgPSBnZW1fbW1hcF9fd2MoYm9wcy0+ZmQsIGJ1Zi0+aGFuZGxlLCAw LAorCQkJCSAgIGJ1Zi0+c2l6ZSwgUFJPVF9SRUFEKTsKKworCWlndF9tZW1jcHlfZnJvbV93Yyhs aW5lYXIsIG1hcCwgYnVmLT5zaXplKTsKKworCW11bm1hcChtYXAsIGJ1Zi0+c2l6ZSk7Cit9CisK K3N0YXRpYyB2b2lkIGNvcHlfbGluZWFyX3RvX2NwdShzdHJ1Y3QgYnVmX29wcyAqYm9wcywgc3Ry dWN0IGludGVsX2J1ZiAqYnVmLAorCQkJICAgICAgIHVpbnQzMl90ICpsaW5lYXIpCit7CisJdm9p ZCAqbWFwOworCisJREVCVUdGTigpOworCisJZ2VtX3NldF9kb21haW4oYm9wcy0+ZmQsIGJ1Zi0+ aGFuZGxlLAorCQkgICAgICAgSTkxNV9HRU1fRE9NQUlOX0NQVSwgSTkxNV9HRU1fRE9NQUlOX0NQ VSk7CisKKwltYXAgPSBfX2dlbV9tbWFwX29mZnNldF9fY3B1KGJvcHMtPmZkLCBidWYtPmhhbmRs ZSwgMCwKKwkJCQkgICAgIGJ1Zi0+c2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSk7CisJaWYg KCFtYXApCisJCW1hcCA9IGdlbV9tbWFwX19jcHUoYm9wcy0+ZmQsIGJ1Zi0+aGFuZGxlLCAwLAor CQkJCSAgICBidWYtPnNpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUpOworCisJbWVtY3B5KG1h cCwgbGluZWFyLCBidWYtPnNpemUpOworCisJbXVubWFwKG1hcCwgYnVmLT5zaXplKTsKK30KKwor c3RhdGljIHZvaWQgY29weV9jcHVfdG9fbGluZWFyKHN0cnVjdCBidWZfb3BzICpib3BzLCBzdHJ1 Y3QgaW50ZWxfYnVmICpidWYsCisJCQkgICAgICAgdWludDMyX3QgKmxpbmVhcikKK3sKKwl2b2lk ICptYXA7CisKKwlERUJVR0ZOKCk7CisKKwlnZW1fc2V0X2RvbWFpbihib3BzLT5mZCwgYnVmLT5o YW5kbGUsCisJCSAgICAgICBJOTE1X0dFTV9ET01BSU5fQ1BVLCAwKTsKKworCW1hcCA9IF9fZ2Vt X21tYXBfb2Zmc2V0X19jcHUoYm9wcy0+ZmQsIGJ1Zi0+aGFuZGxlLCAwLAorCQkJCSAgICAgYnVm LT5zaXplLCBQUk9UX1JFQUQpOworCWlmICghbWFwKQorCQltYXAgPSBnZW1fbW1hcF9fY3B1KGJv cHMtPmZkLCBidWYtPmhhbmRsZSwgMCwKKwkJCQkgICAgYnVmLT5zaXplLCBQUk9UX1JFQUQpOwor CisJbWVtY3B5KGxpbmVhciwgbWFwLCBidWYtPnNpemUpOworCisJbXVubWFwKG1hcCwgYnVmLT5z aXplKTsKK30KKwordm9pZCBpbnRlbF9idWZfdG9fbGluZWFyKHN0cnVjdCBidWZfb3BzICpib3Bz LCBzdHJ1Y3QgaW50ZWxfYnVmICpidWYsCisJCQkgdWludDMyX3QgKmxpbmVhcikKK3sKKwlpZ3Rf YXNzZXJ0KGJvcHMpOworCisJc3dpdGNoIChidWYtPnRpbGluZykgeworCWNhc2UgSTkxNV9USUxJ TkdfTk9ORToKKwkJaWd0X2Fzc2VydChib3BzLT50b19saW5lYXIpOworCQlib3BzLT50b19saW5l YXIoYm9wcywgYnVmLCBsaW5lYXIpOworCQlicmVhazsKKwljYXNlIEk5MTVfVElMSU5HX1g6CisJ CWlndF9hc3NlcnQoYm9wcy0+eF90b19saW5lYXIpOworCQlib3BzLT54X3RvX2xpbmVhcihib3Bz LCBidWYsIGxpbmVhcik7CisJCWJyZWFrOworCWNhc2UgSTkxNV9USUxJTkdfWToKKwkJaWd0X2Fz c2VydChib3BzLT55X3RvX2xpbmVhcik7CisJCWJvcHMtPnlfdG9fbGluZWFyKGJvcHMsIGJ1Ziwg bGluZWFyKTsKKwkJYnJlYWs7CisJY2FzZSBJOTE1X1RJTElOR19ZZjoKKwkJaWd0X2Fzc2VydChi b3BzLT55Zl90b19saW5lYXIpOworCQlib3BzLT55Zl90b19saW5lYXIoYm9wcywgYnVmLCBsaW5l YXIpOworCQlicmVhazsKKwljYXNlIEk5MTVfVElMSU5HX1lzOgorCQlpZ3RfYXNzZXJ0KGJvcHMt PnlzX3RvX2xpbmVhcik7CisJCWJvcHMtPnlzX3RvX2xpbmVhcihib3BzLCBidWYsIGxpbmVhcik7 CisJCWJyZWFrOworCX0KK30KKwordm9pZCBsaW5lYXJfdG9faW50ZWxfYnVmKHN0cnVjdCBidWZf b3BzICpib3BzLCBzdHJ1Y3QgaW50ZWxfYnVmICpidWYsCisJCQkgdWludDMyX3QgKmxpbmVhcikK K3sKKwlpZ3RfYXNzZXJ0KGJvcHMpOworCisJc3dpdGNoIChidWYtPnRpbGluZykgeworCWNhc2Ug STkxNV9USUxJTkdfTk9ORToKKwkJaWd0X2Fzc2VydChib3BzLT5saW5lYXJfdG8pOworCQlib3Bz LT5saW5lYXJfdG8oYm9wcywgYnVmLCBsaW5lYXIpOworCQlicmVhazsKKwljYXNlIEk5MTVfVElM SU5HX1g6CisJCWlndF9hc3NlcnQoYm9wcy0+bGluZWFyX3RvX3gpOworCQlib3BzLT5saW5lYXJf dG9feChib3BzLCBidWYsIGxpbmVhcik7CisJCWJyZWFrOworCWNhc2UgSTkxNV9USUxJTkdfWToK KwkJaWd0X2Fzc2VydChib3BzLT5saW5lYXJfdG9feSk7CisJCWJvcHMtPmxpbmVhcl90b195KGJv cHMsIGJ1ZiwgbGluZWFyKTsKKwkJYnJlYWs7CisJY2FzZSBJOTE1X1RJTElOR19ZZjoKKwkJaWd0 X2Fzc2VydChib3BzLT5saW5lYXJfdG9feWYpOworCQlib3BzLT5saW5lYXJfdG9feWYoYm9wcywg YnVmLCBsaW5lYXIpOworCQlicmVhazsKKwljYXNlIEk5MTVfVElMSU5HX1lzOgorCQlpZ3RfYXNz ZXJ0KGJvcHMtPmxpbmVhcl90b195cyk7CisJCWJvcHMtPmxpbmVhcl90b195cyhib3BzLCBidWYs IGxpbmVhcik7CisJCWJyZWFrOworCX0KK30KKworc3RhdGljIHZvaWQgX19pbnRlbF9idWZfaW5p dChzdHJ1Y3QgYnVmX29wcyAqYm9wcywKKwkJCSAgICAgdWludDMyX3QgaGFuZGxlLAorCQkJICAg ICBzdHJ1Y3QgaW50ZWxfYnVmICpidWYsCisJCQkgICAgIGludCB3aWR0aCwgaW50IGhlaWdodCwg aW50IGJwcCwKKwkJCSAgICAgdWludDMyX3QgcmVxX3RpbGluZywgYm9vbCBjb21wcmVzc2lvbikK K3sKKwl1aW50MzJfdCB0aWxpbmcgPSByZXFfdGlsaW5nOworCXVpbnQzMl90IHNpemU7CisKKwlp Z3RfYXNzZXJ0KGJvcHMpOworCWlndF9hc3NlcnQoYnVmKTsKKwlpZ3RfYXNzZXJ0KHdpZHRoID4g MCAmJiBoZWlnaHQgPiAwKTsKKwlpZ3RfYXNzZXJ0KGJwcCA9PSA4IHx8IGJwcCA9PSAxNiB8fCBi cHAgPT0gMzIpOworCisJbWVtc2V0KGJ1ZiwgMCwgc2l6ZW9mKCpidWYpKTsKKworCWlmIChjb21w cmVzc2lvbikgeworCQlpbnQgYXV4X3dpZHRoLCBhdXhfaGVpZ2h0OworCisJCWlndF9yZXF1aXJl KGJvcHMtPmludGVsX2dlbiA+PSA5KTsKKwkJaWd0X2Fzc2VydChyZXFfdGlsaW5nID09IEk5MTVf VElMSU5HX1kgfHwKKwkJCSAgIHJlcV90aWxpbmcgPT0gSTkxNV9USUxJTkdfWWYpOworCisJCS8q CisJCSAqIE9uIEdFTjEyKyB3ZSBhbGlnbiB0aGUgbWFpbiBzdXJmYWNlIHRvIDQgKiA0IG1haW4g c3VyZmFjZQorCQkgKiB0aWxlcywgd2hpY2ggaXMgNjRrQi4gVGhlc2UgMTYgdGlsZXMgYXJlIG1h cHBlZCBieSA0IEFVWAorCQkgKiBDQ1MgdW5pdHMsIHRoYXQgaXMgNCAqIDY0IGJ5dGVzLiBUaGVz ZSA0IENDUyB1bml0cyBhcmUgaW4KKwkJICogdHVybiBtYXBwZWQgYnkgb25lIEwxIEFVWCBwYWdl IHRhYmxlIGVudHJ5LgorCQkgKi8KKwkJaWYgKGJvcHMtPmludGVsX2dlbiA+PSAxMikKKwkJCWJ1 Zi0+c3RyaWRlID0gQUxJR04od2lkdGggKiAoYnBwIC8gOCksIDEyOCAqIDQpOworCQllbHNlCisJ CQlidWYtPnN0cmlkZSA9IEFMSUdOKHdpZHRoICogKGJwcCAvIDgpLCAxMjgpOworCisJCWlmIChi b3BzLT5pbnRlbF9nZW4gPj0gMTIpCisJCQloZWlnaHQgPSBBTElHTihoZWlnaHQsIDQgKiAzMik7 CisKKwkJYnVmLT5zaXplID0gYnVmLT5zdHJpZGUgKiBoZWlnaHQ7CisJCWJ1Zi0+dGlsaW5nID0g dGlsaW5nOworCQlidWYtPmJwcCA9IGJwcDsKKwkJYnVmLT5jb21wcmVzc2lvbiA9IGNvbXByZXNz aW9uOworCisJCWF1eF93aWR0aCA9IGludGVsX2J1Zl9hdXhfd2lkdGgoYm9wcy0+aW50ZWxfZ2Vu LCBidWYpOworCQlhdXhfaGVpZ2h0ID0gaW50ZWxfYnVmX2F1eF9oZWlnaHQoYm9wcy0+aW50ZWxf Z2VuLCBidWYpOworCisJCWJ1Zi0+YXV4Lm9mZnNldCA9IGJ1Zi0+c3RyaWRlICogQUxJR04oaGVp Z2h0LCAzMik7CisJCWJ1Zi0+YXV4LnN0cmlkZSA9IGF1eF93aWR0aDsKKworCQlzaXplID0gYnVm LT5hdXgub2Zmc2V0ICsgYXV4X3dpZHRoICogYXV4X2hlaWdodDsKKworCX0gZWxzZSB7CisJCWJ1 Zi0+c3RyaWRlID0gQUxJR04od2lkdGggKiAoYnBwIC8gOCksIDEyOCk7CisJCWJ1Zi0+c2l6ZSA9 IGJ1Zi0+c3RyaWRlICogaGVpZ2h0OworCQlidWYtPnRpbGluZyA9IHRpbGluZzsKKwkJYnVmLT5i cHAgPSBicHA7CisKKwkJc2l6ZSA9IGJ1Zi0+c3RyaWRlICogQUxJR04oaGVpZ2h0LCAzMik7CisJ fQorCisJaWYgKGhhbmRsZSkKKwkJYnVmLT5oYW5kbGUgPSBoYW5kbGU7CisJZWxzZQorCQlidWYt PmhhbmRsZSA9IGdlbV9jcmVhdGUoYm9wcy0+ZmQsIHNpemUpOworCisJc2V0X2h3X3RpbGVkKGJv cHMsIGJ1Zik7Cit9CisKKy8qKgorICogaW50ZWxfYnVmX2luaXQKKyAqIEBib3BzOiBwb2ludGVy IHRvIGJ1Zl9vcHMKKyAqIEBidWY6IHBvaW50ZXIgdG8gaW50ZWxfYnVmIHN0cnVjdHVyZSB0byBi ZSBmaWxsZWQKKyAqIEB3aWR0aDogc3VyZmFjZSB3aWR0aAorICogQGhlaWdodDogc3VyZmFjZSBo ZWlnaHQKKyAqIEBicHA6IGJpdHMtcGVyLXBpeGVsICg4IC8gMTYgLyAzMikKKyAqIEB0aWxpbmc6 IHN1cmZhY2UgdGlsaW5nCisgKiBAY29tcHJlc3Npb246IHN1cmZhY2UgY29tcHJlc3Npb24gZmxh ZyBvbiAvIG9mZgorICoKKyAqIEZ1bmN0aW9uIGNyZWF0ZXMgbmV3IEJPIHdpdGhpbiBpbnRlbF9i dWYgc3RydWN0dXJlIGFuZCBmaWxscyBhbGwKKyAqIHN0cnVjdHVyZSBmaWVsZHMuCisgKgorICog Tm90ZS4gRm9yIFggLyBZIGlmIEdQVSBzdXBwb3J0cyBmZW5jZXMgSFcgdGlsaW5nIGlzIGNvbmZp Z3VyZWQuCisgKi8KK3ZvaWQgaW50ZWxfYnVmX2luaXQoc3RydWN0IGJ1Zl9vcHMgKmJvcHMsCisJ CSAgICBzdHJ1Y3QgaW50ZWxfYnVmICpidWYsCisJCSAgICBpbnQgd2lkdGgsIGludCBoZWlnaHQs IGludCBicHAsCisJCSAgICB1aW50MzJfdCB0aWxpbmcsIGJvb2wgY29tcHJlc3Npb24pCit7CisJ X19pbnRlbF9idWZfaW5pdChib3BzLCAwLCBidWYsIHdpZHRoLCBoZWlnaHQsIGJwcCwgdGlsaW5n LAorCQkJIGNvbXByZXNzaW9uKTsKK30KKworLyoqCisgKiBpbnRlbF9idWZfY2xvc2UKKyAqIEBi b3BzOiBwb2ludGVyIHRvIGJ1Zl9vcHMKKyAqIEBidWY6IHBvaW50ZXIgdG8gaW50ZWxfYnVmIHN0 cnVjdHVyZQorICoKKyAqIEZ1bmN0aW9uIGNsb3NlcyBnZW0gQk8gaW5zaWRlIGludGVsX2J1Zi4K KyAqLwordm9pZCBpbnRlbF9idWZfY2xvc2Uoc3RydWN0IGJ1Zl9vcHMgKmJvcHMsIHN0cnVjdCBp bnRlbF9idWYgKmJ1ZikKK3sKKwlpZ3RfYXNzZXJ0KGJvcHMpOworCWlndF9hc3NlcnQoYnVmKTsK KworCWdlbV9jbG9zZShib3BzLT5mZCwgYnVmLT5oYW5kbGUpOworfQorCisvKioKKyAqIGludGVs X2J1Zl9pbml0X3VzaW5nX2hhbmRsZQorICogQGJvcHM6IHBvaW50ZXIgdG8gYnVmX29wcworICog QGhhbmRsZTogQk8gaGFuZGxlIGNyZWF0ZWQgYnkgdGhlIGNhbGxlcgorICogQGJ1ZjogcG9pbnRl ciB0byBpbnRlbF9idWYgc3RydWN0dXJlIHRvIGJlIGZpbGxlZAorICogQHdpZHRoOiBzdXJmYWNl IHdpZHRoCisgKiBAaGVpZ2h0OiBzdXJmYWNlIGhlaWdodAorICogQGJwcDogYml0cy1wZXItcGl4 ZWwgKDggLyAxNiAvIDMyKQorICogQHRpbGluZzogc3VyZmFjZSB0aWxpbmcKKyAqIEBjb21wcmVz c2lvbjogc3VyZmFjZSBjb21wcmVzc2lvbiBmbGFnIG9uIC8gb2ZmCisgKgorICogRnVuY3Rpb24g Y29uZmlndXJlcyBCTyBoYW5kbGUgd2l0aGluIGludGVsX2J1ZiBzdHJ1Y3R1cmUgcGFzc2VkIGJ5 IHRoZSBjYWxsZXIKKyAqICh3aXRoIGFsbCBpdHMgbWV0YWRhdGEgLSB3aWR0aCwgaGVpZ2h0LCAu Li4pLiBVc2VmdWwgaWYgQk8gd2FzIGNyZWF0ZWQKKyAqIG91dHNpZGUuCisgKgorICogTm90ZTog aW50ZWxfYnVmX2Nsb3NlKCkgY2FuIGJlIHVzZWQgdG8gY2xvc2UgdGhlIEJPIGhhbmRsZSwgYnV0 IGNhbGxlcgorICogbXVzdCBiZSBhd2FyZSB0byBub3QgY2xvc2UgdGhlIEJPIHR3aWNlLgorICov Cit2b2lkIGludGVsX2J1Zl9pbml0X3VzaW5nX2hhbmRsZShzdHJ1Y3QgYnVmX29wcyAqYm9wcywK KwkJCQkgdWludDMyX3QgaGFuZGxlLAorCQkJCSBzdHJ1Y3QgaW50ZWxfYnVmICpidWYsCisJCQkJ IGludCB3aWR0aCwgaW50IGhlaWdodCwgaW50IGJwcCwKKwkJCQkgdWludDMyX3QgcmVxX3RpbGlu ZywgYm9vbCBjb21wcmVzc2lvbikKK3sKKwlfX2ludGVsX2J1Zl9pbml0KGJvcHMsIGhhbmRsZSwg YnVmLCB3aWR0aCwgaGVpZ2h0LCBicHAsIHJlcV90aWxpbmcsCisJCQkgY29tcHJlc3Npb24pOwor fQorCisjZGVmaW5lIERFRkFVTFRfQlVGT1BTKF9fZ2VuX3N0YXJ0LCBfX2dlbl9lbmQpIFwKKwku Z2VuX3N0YXJ0ICAgICAgICAgID0gX19nZW5fc3RhcnQsIFwKKwkuZ2VuX2VuZCAgICAgICAgICAg ID0gX19nZW5fZW5kLCBcCisJLnN1cHBvcnRlZF9od190aWxlcyA9IFRJTEVfWCB8IFRJTEVfWSwg XAorCS5saW5lYXJfdG9feCAgICAgICAgPSBjb3B5X2xpbmVhcl90b19ndHQsIFwKKwkubGluZWFy X3RvX3kgICAgICAgID0gY29weV9saW5lYXJfdG9fZ3R0LCBcCisJLmxpbmVhcl90b195ZiAgICAg ICA9IGNvcHlfbGluZWFyX3RvX3lmLCBcCisJLmxpbmVhcl90b195cyAgICAgICA9IGNvcHlfbGlu ZWFyX3RvX3lzLCBcCisJLnhfdG9fbGluZWFyICAgICAgICA9IGNvcHlfZ3R0X3RvX2xpbmVhciwg XAorCS55X3RvX2xpbmVhciAgICAgICAgPSBjb3B5X2d0dF90b19saW5lYXIsIFwKKwkueWZfdG9f bGluZWFyICAgICAgID0gY29weV95Zl90b19saW5lYXIsIFwKKwkueXNfdG9fbGluZWFyICAgICAg ID0gY29weV95c190b19saW5lYXIKKworc3RydWN0IGJ1Zl9vcHMgYnVmX29wc19hcnJbXSA9IHsK KwkvKiBHZW5lcmF0aW9ucyAyIC0gOCAqLworeworCURFRkFVTFRfQlVGT1BTKDIsIDgpLAorCS5z dXBwb3J0ZWRfdGlsZXMgICAgPSBUSUxFX05PTkUgfCBUSUxFX1ggfCBUSUxFX1ksCisJLmxpbmVh cl90byAgICAgICAgICA9IGNvcHlfbGluZWFyX3RvX2NwdSwKKwkudG9fbGluZWFyICAgICAgICAg ID0gY29weV9jcHVfdG9fbGluZWFyLAorfSwKKy8qIEdlbmVyYXRpb25zIDkgLSAxMSAqLworewor CURFRkFVTFRfQlVGT1BTKDksIDExKSwKKwkuc3VwcG9ydGVkX3RpbGVzICAgID0gVElMRV9OT05F IHwgVElMRV9YIHwgVElMRV9ZIHwgVElMRV9ZZiwKKwkubGluZWFyX3RvICAgICAgICAgID0gY29w eV9saW5lYXJfdG9fY3B1LAorCS50b19saW5lYXIgICAgICAgICAgPSBjb3B5X2NwdV90b19saW5l YXIsCit9LAorLyogR2VuZXJhdGlvbiAxMiAqLworeworCURFRkFVTFRfQlVGT1BTKDEyLCAxMiks CisJLnN1cHBvcnRlZF90aWxlcyAgID0gVElMRV9OT05FIHwgVElMRV9YIHwgVElMRV9ZIHwgVElM RV9ZZiB8IFRJTEVfWXMsCisJLmxpbmVhcl90byAgICAgICAgID0gY29weV9saW5lYXJfdG9fd2Ms CisJLnRvX2xpbmVhciAgICAgICAgID0gY29weV93Y190b19saW5lYXIsCit9LAorfTsKKworc3Rh dGljIGJvb2wgcHJvYmVfaHdfdGlsaW5nKHN0cnVjdCBidWZfb3BzICpib3BzLCB1aW50MzJfdCB0 aWxpbmcpCit7CisJdWludDY0X3Qgc2l6ZSA9IDI1NiAqIDI1NjsKKwl1aW50MzJfdCBoYW5kbGUs IGJ1Zl90aWxpbmcsIGJ1Zl9zd2l6emxlOworCXVpbnQzMl90IHN0cmlkZTsKKwlpbnQgcmV0Owor CWJvb2wgaXNfc2V0ID0gZmFsc2U7CisKKwlpZiAodGlsaW5nID09IEk5MTVfVElMSU5HX1gpCisJ CXN0cmlkZSA9IDUxMjsKKwllbHNlIGlmICh0aWxpbmcgPT0gSTkxNV9USUxJTkdfWSkKKwkJc3Ry aWRlID0gMTI4OworCWVsc2UKKwkJcmV0dXJuIGZhbHNlOworCisJaGFuZGxlID0gZ2VtX2NyZWF0 ZShib3BzLT5mZCwgc2l6ZSk7CisKKwkvKiBTaW5nbGUgc2hvdCwgaWYgbm8gZmVuY2VzIGFyZSBh dmFpbGFibGUgd2UgZmFpbCBpbW1lZGlhdGVseSAqLworCXJldCA9IF9fc2V0X3RpbGluZyhib3Bz LT5mZCwgaGFuZGxlLCB0aWxpbmcsIHN0cmlkZSk7CisJaWYgKHJldCkKKwkJZ290byBlbmQ7CisK Kwlpc19zZXQgPSBfX2dldF90aWxpbmcoYm9wcy0+ZmQsIGhhbmRsZSwgJmJ1Zl90aWxpbmcsICZi dWZfc3dpenpsZSk7CisJaWYgKGlzX3NldCkgeworCQlpZiAodGlsaW5nID09IEk5MTVfVElMSU5H X1gpCisJCQlib3BzLT5zd2l6emxlX3ggPSBidWZfc3dpenpsZTsKKwkJZWxzZSBpZiAodGlsaW5n ID09IEk5MTVfVElMSU5HX1kpCisJCQlib3BzLT5zd2l6emxlX3kgPSBidWZfc3dpenpsZTsKKwl9 CitlbmQ6CisJZ2VtX2Nsb3NlKGJvcHMtPmZkLCBoYW5kbGUpOworCisJcmV0dXJuIGlzX3NldDsK K30KKworc3RhdGljIHZvaWQgKmFsbG9jX2FsaWduZWQodWludDY0X3Qgc2l6ZSkKK3sKKwl2b2lk ICpwOworCisJaWd0X2Fzc2VydF9lcShwb3NpeF9tZW1hbGlnbigmcCwgMTYsIHNpemUpLCAwKTsK KworCXJldHVybiBwOworfQorCisvKgorICogU2ltcGxlIGlkZW1wb3RlbmN5IHRlc3QgYmV0d2Vl biBIVyAtPiBTVyBhbmQgU1cgLT4gSFcgQk8uCisgKi8KK3N0YXRpYyB2b2lkIGlkZW1wb3RlbmN5 X3NlbGZ0ZXN0KHN0cnVjdCBidWZfb3BzICpib3BzLCB1aW50MzJfdCB0aWxpbmcpCit7CisJc3Ry dWN0IGludGVsX2J1ZiBidWY7CisJdWludDhfdCAqbGluZWFyX2luLCAqbGluZWFyX291dCwgKm1h cDsKKwlpbnQgaTsKKwljb25zdCBpbnQgd2lkdGggPSA1MTI7CisJY29uc3QgaW50IGhlaWdodCA9 IDUxMjsKKwljb25zdCBpbnQgYnBwID0gMzI7CisJY29uc3QgaW50IHNpemUgPSB3aWR0aCAqIGhl aWdodCAqIGJwcCAvIDg7CisJYm9vbCBzb2Z0d2FyZV90aWxpbmcgPSBmYWxzZTsKKworCWlmICgh aXNfaHdfdGlsaW5nX3N1cHBvcnRlZChib3BzLCB0aWxpbmcpKQorCQlyZXR1cm47CisKKwlsaW5l YXJfaW4gPSBhbGxvY19hbGlnbmVkKHNpemUpOworCWxpbmVhcl9vdXQgPSBhbGxvY19hbGlnbmVk KHNpemUpOworCisJZm9yIChpID0gMDsgaSA8IHNpemU7IGkrKykKKwkJbGluZWFyX2luW2ldID0g aSAlIDI1MzsgLyogcHJpbWUgY2hvc2VuIGludGVudGlvbmFsbHkgKi8KKworCWRvIHsKKwkJaWd0 X2RlYnVnKCJDaGVja2luZyBpZGVtcG90ZW5jeSwgU1c6ICVzLCBIVzogJXMsIHRpbGluZzogJXNc biIsCisJCQkgIGJvb2xfc3RyKHNvZnR3YXJlX3RpbGluZyksCisJCQkgIGJvb2xfc3RyKCFzb2Z0 d2FyZV90aWxpbmcpLAorCQkJICB0aWxpbmdfc3RyKHRpbGluZykpOworCQlpbnRlbF9idWZfaW5p dChib3BzLCAmYnVmLCB3aWR0aCwgaGVpZ2h0LCBicHAsIHRpbGluZywgZmFsc2UpOworCQlidWZf b3BzX3NldF9zb2Z0d2FyZV90aWxpbmcoYm9wcywgdGlsaW5nLCBzb2Z0d2FyZV90aWxpbmcpOwor CisJCWxpbmVhcl90b19pbnRlbF9idWYoYm9wcywgJmJ1ZiwgKHVpbnQzMl90ICopIGxpbmVhcl9p bik7CisJCW1hcCA9IF9fZ2VtX21tYXBfb2Zmc2V0X19jcHUoYm9wcy0+ZmQsIGJ1Zi5oYW5kbGUs IDAsCisJCQkJCSAgIGJ1Zi5zaXplLCBQUk9UX1JFQUQpOworCQlpZiAoIW1hcCkKKwkJCW1hcCA9 IGdlbV9tbWFwX19jcHUoYm9wcy0+ZmQsIGJ1Zi5oYW5kbGUsIDAsCisJCQkJCSAgICBidWYuc2l6 ZSwgUFJPVF9SRUFEKTsKKwkJaWd0X2Fzc2VydChtYXApOworCQlpZ3RfYXNzZXJ0KG1lbWNtcChs aW5lYXJfaW4sIG1hcCwgc2l6ZSkpOworCisJCWJ1Zl9vcHNfc2V0X3NvZnR3YXJlX3RpbGluZyhi b3BzLCB0aWxpbmcsICFzb2Z0d2FyZV90aWxpbmcpOworCQlpbnRlbF9idWZfdG9fbGluZWFyKGJv cHMsICZidWYsICh1aW50MzJfdCAqKSBsaW5lYXJfb3V0KTsKKwkJaWd0X2Fzc2VydCghbWVtY21w KGxpbmVhcl9pbiwgbGluZWFyX291dCwgc2l6ZSkpOworCisJCW11bm1hcChtYXAsIHNpemUpOwor CQlpbnRlbF9idWZfY2xvc2UoYm9wcywgJmJ1Zik7CisKKwkJc29mdHdhcmVfdGlsaW5nID0gIXNv ZnR3YXJlX3RpbGluZzsKKwl9IHdoaWxlIChzb2Z0d2FyZV90aWxpbmcpOworCisJaWd0X2RlYnVn KCJJZGVtcG90ZW5jeSBmb3IgJXMgdGlsaW5nIE9LXG4iLCB0aWxpbmdfc3RyKHRpbGluZykpOwor CWJ1Zl9vcHNfc2V0X3NvZnR3YXJlX3RpbGluZyhib3BzLCB0aWxpbmcsIGZhbHNlKTsKK30KKwor LyoqCisgKiBidWZfb3BzX2NyZWF0ZQorICogQGZkOiBkZXZpY2UgZmlsZWRlc2NyaXB0b3IKKyAq CisgKiBDcmVhdGUgYnVmX29wcyBzdHJ1Y3R1cmUgZGVwZW5kaW5nIG9uIGZkLWRldmljZSBjYXBh YmlsaXRpZXMuCisgKgorICogUmV0dXJuczogb3BhcXVlIHBvaW50ZXIgdG8gYnVmX29wcy4KKyAq CisgKi8KK3N0cnVjdCBidWZfb3BzICpidWZfb3BzX2NyZWF0ZShpbnQgZmQpCit7CisJc3RydWN0 IGJ1Zl9vcHMgKmJvcHMgPSBjYWxsb2MoMSwgc2l6ZW9mKCpib3BzKSk7CisJdWludDMyX3QgZGV2 aWQ7CisJaW50IGdlbmVyYXRpb247CisKKwlpZ3RfYXNzZXJ0KGJvcHMpOworCisJZGV2aWQgPSBp bnRlbF9nZXRfZHJtX2RldmlkKGZkKTsKKwlnZW5lcmF0aW9uID0gaW50ZWxfZ2VuKGRldmlkKTsK KworCS8qIFByZWRlZmluZWQgc2V0dGluZ3MgKi8KKwlmb3IgKGludCBpID0gMDsgaSA8IEFSUkFZ X1NJWkUoYnVmX29wc19hcnIpOyBpKyspIHsKKwkJaWYgKGdlbmVyYXRpb24gPj0gYnVmX29wc19h cnJbaV0uZ2VuX3N0YXJ0ICYmCisJCQkJZ2VuZXJhdGlvbiA8PSBidWZfb3BzX2FycltpXS5nZW5f ZW5kKSB7CisJCQltZW1jcHkoYm9wcywgJmJ1Zl9vcHNfYXJyW2ldLCBzaXplb2YoKmJvcHMpKTsK KwkJCWJvcHMtPmZkID0gZmQ7CisJCQlib3BzLT5pbnRlbF9nZW4gPSBnZW5lcmF0aW9uOworCQkJ aWd0X2RlYnVnKCJnZW5lcmF0aW9uOiAlZCwgc3VwcG9ydGVkIHRpbGVzOiAweCUwMnhcbiIsCisJ CQkJICBnZW5lcmF0aW9uLCBib3BzLT5zdXBwb3J0ZWRfdGlsZXMpOworCQkJYnJlYWs7CisJCX0K Kwl9CisKKwlpZ3RfYXNzZXJ0KGJvcHMtPmludGVsX2dlbik7CisKKwkvKgorCSAqIFdhcm5pbmch CisJICoKKwkgKiBHZW4yIHNvZnR3YXJlIHRpbGluZy9kZXRpbGluZyBpcyBub3Qgc3VwcG9ydGVk ISAoeWV0KS4KKwkgKgorCSAqIElmIHlvdSBhcmUgYnJhdmUgaGVybyB3aXRoIGFuIGFjY2VzcyB0 byBHZW4yIHlvdSBjYW4gc2F2ZSB0aGUgd29ybGQuCisJICogVW50aWwgdGhlbiB3ZSdyZSBkb29t ZWQgdG8gdXNlIG9ubHkgaGFyZHdhcmUgKGRlKXRpbGluZy4KKwkgKgorCSAqIE9rLCB5b3UgaGF2 ZSBiZWVuIHdhcm5lZC4KKwkgKi8KKwlpZiAoYm9wcy0+aW50ZWxfZ2VuID09IDIpIHsKKwkJaWd0 X3dhcm4oIkdlbjIgZGV0ZWN0ZWQuIEhXIChkZSl0aWxpbmcgc3VwcG9ydCBvbmx5LiIpOworCQly ZXR1cm4gYm9wczsKKwl9CisKKwkvKiBMZXQncyBwcm9iZSBYIGFuZCBZIGh3IHRpbGluZyBzdXBw b3J0ICovCisJaWYgKGlzX2h3X3RpbGluZ19zdXBwb3J0ZWQoYm9wcywgSTkxNV9USUxJTkdfWCkp IHsKKwkJYm9vbCBzdXBwb3J0ZWQgPSBwcm9iZV9od190aWxpbmcoYm9wcywgSTkxNV9USUxJTkdf WCk7CisKKwkJaWd0X2RlYnVnKCJYIGZlbmNlIHN1cHBvcnQ6ICVzXG4iLCBib29sX3N0cihzdXBw b3J0ZWQpKTsKKwkJaWYgKCFzdXBwb3J0ZWQpIHsKKwkJCWJvcHMtPnN1cHBvcnRlZF9od190aWxl cyAmPSB+VElMRV9YOworCQkJYm9wcy0+bGluZWFyX3RvX3ggPSBjb3B5X2xpbmVhcl90b194Owor CQkJYm9wcy0+eF90b19saW5lYXIgPSBjb3B5X3hfdG9fbGluZWFyOworCQl9CisJfQorCisJaWYg KGlzX2h3X3RpbGluZ19zdXBwb3J0ZWQoYm9wcywgSTkxNV9USUxJTkdfWSkpIHsKKwkJYm9vbCBz dXBwb3J0ZWQgPSBwcm9iZV9od190aWxpbmcoYm9wcywgSTkxNV9USUxJTkdfWSk7CisKKwkJaWd0 X2RlYnVnKCJZIGZlbmNlIHN1cHBvcnQ6ICVzXG4iLCBib29sX3N0cihzdXBwb3J0ZWQpKTsKKwkJ aWYgKCFzdXBwb3J0ZWQpIHsKKwkJCWJvcHMtPnN1cHBvcnRlZF9od190aWxlcyAmPSB+VElMRV9Z OworCQkJYm9wcy0+bGluZWFyX3RvX3kgPSBjb3B5X2xpbmVhcl90b195OworCQkJYm9wcy0+eV90 b19saW5lYXIgPSBjb3B5X3lfdG9fbGluZWFyOworCQl9CisJfQorCisJLyogRGlzYWJsZSBvdGhl ciB0aWxpbmcgZm9ybWF0IGZ1bmN0aW9ucyBpZiBub3Qgc3VwcG9ydGVkICovCisJaWYgKCFpc190 aWxpbmdfc3VwcG9ydGVkKGJvcHMsIEk5MTVfVElMSU5HX1lmKSkgeworCQlpZ3RfZGVidWcoIllm IGZvcm1hdCBub3Qgc3VwcG9ydGVkXG4iKTsKKwkJYm9wcy0+bGluZWFyX3RvX3lmID0gTlVMTDsK KwkJYm9wcy0+eWZfdG9fbGluZWFyID0gTlVMTDsKKwl9CisKKwlpZiAoIWlzX3RpbGluZ19zdXBw b3J0ZWQoYm9wcywgSTkxNV9USUxJTkdfWXMpKSB7CisJCWlndF9kZWJ1ZygiWXMgZm9ybWF0IG5v dCBzdXBwb3J0ZWRcbiIpOworCQlib3BzLT5saW5lYXJfdG9feXMgPSBOVUxMOworCQlib3BzLT55 c190b19saW5lYXIgPSBOVUxMOworCX0KKworCWlkZW1wb3RlbmN5X3NlbGZ0ZXN0KGJvcHMsIEk5 MTVfVElMSU5HX1gpOworCWlkZW1wb3RlbmN5X3NlbGZ0ZXN0KGJvcHMsIEk5MTVfVElMSU5HX1kp OworCisJcmV0dXJuIGJvcHM7Cit9CisKKy8qKgorICogYnVmX29wc19kZXN0cm95CisgKiBAYm9w czogcG9pbnRlciB0byBidWZfb3BzCisgKgorICogRnVuY3Rpb24gZnJlZXMgYnVmX29wcyBzdHJ1 Y3R1cmUuCisgKi8KK3ZvaWQgYnVmX29wc19kZXN0cm95KHN0cnVjdCBidWZfb3BzICpib3BzKQor eworCWlndF9hc3NlcnQoYm9wcyk7CisJZnJlZShib3BzKTsKK30KKworLyoqCisgKiBidWZfb3Bz X3NldF9zb2Z0d2FyZV90aWxpbmcKKyAqIEBib3BzOiBwb2ludGVyIHRvIGJ1Zl9vcHMKKyAqIEB0 aWxpbmc6IHN1cmZhY2UgdGlsaW5nCisgKiBAdXNlX3NvZnR3YXJlX3RpbGluZzogaWYgdHJ1ZSB1 c2Ugc29mdHdhcmUgY29weWluZyBtZXRob2RzLCBvdGhlcndpc2UKKyAqIHVzZSBoYXJkd2FyZSAo dmlhIGd0dCkKKyAqCisgKiBGdW5jdGlvbiBhbGxvd3Mgc3dpdGNoIFggLyBZIHN1cmZhY2VzIHRv IHNvZnR3YXJlIC8gaGFyZHdhcmUgY29weWluZyBtZXRob2RzCisgKiB3aGljaCBob25vcnMgdGls aW5nIGFuZCBzd2l6emxpbmcuCisgKgorICogUmV0dXJuczoKKyAqIGZhbHNlIC0gc3dpdGNoIHdh c24ndCBwb3NzaWJsZS4KKyAqIHRydWUgLSBzd2l0Y2ggdG8gc29mdHdhcmUgLyBoYXJkd2FyZSBt ZXRob2Qgc3VjY2VlZC4KKyAqLworYm9vbCBidWZfb3BzX3NldF9zb2Z0d2FyZV90aWxpbmcoc3Ry dWN0IGJ1Zl9vcHMgKmJvcHMsCisJCQkJIHVpbnQzMl90IHRpbGluZywKKwkJCQkgYm9vbCB1c2Vf c29mdHdhcmVfdGlsaW5nKQoreworCWJvb2wgd2FzX2NoYW5nZWQgPSB0cnVlOworCisJaWd0X2Fz c2VydChib3BzKTsKKworCS8qIFVudGlsIGFwcHJvcHJpYXRlIGNvZGUgaXMgYWRkZWQgd2UgZG9u J3Qgc3VwcG9ydCBTVyB0aWxpbmcgb24gR2VuMiAqLworCWlmIChib3BzLT5pbnRlbF9nZW4gPT0g MikgeworCQlpZ3Rfd2FybigiQ2hhbmdlIHRvIHNvZnR3YXJlIHRpbGluZyBvbiBHZW4yIGlzIG5v dCBzdXBwb3J0ZWQhIik7CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwlzd2l0Y2ggKHRpbGluZykg eworCWNhc2UgSTkxNV9USUxJTkdfWDoKKwkJaWYgKHVzZV9zb2Z0d2FyZV90aWxpbmcpIHsKKwkJ CWlndF9kZWJ1ZygiLT4gY2hhbmdlIFggdG8gU1dcbiIpOworCQkJYm9wcy0+bGluZWFyX3RvX3gg PSBjb3B5X2xpbmVhcl90b194OworCQkJYm9wcy0+eF90b19saW5lYXIgPSBjb3B5X3hfdG9fbGlu ZWFyOworCQl9IGVsc2UgeworCQkJaWYgKGlzX2h3X3RpbGluZ19zdXBwb3J0ZWQoYm9wcywgSTkx NV9USUxJTkdfWCkpIHsKKwkJCQlpZ3RfZGVidWcoIi0+IGNoYW5nZSBYIHRvIEhXXG4iKTsKKwkJ CQlib3BzLT5saW5lYXJfdG9feCA9IGNvcHlfbGluZWFyX3RvX2d0dDsKKwkJCQlib3BzLT54X3Rv X2xpbmVhciA9IGNvcHlfZ3R0X3RvX2xpbmVhcjsKKwkJCX0gZWxzZSB7CisJCQkJaWd0X2RlYnVn KCItPiBYIGNhbm5vdCBiZSBjaGFuZ2VkIHRvIEhXXG4iKTsKKwkJCQl3YXNfY2hhbmdlZCA9IGZh bHNlOworCQkJfQorCQl9CisJCWJyZWFrOworCisJY2FzZSBJOTE1X1RJTElOR19ZOgorCQlpZiAo dXNlX3NvZnR3YXJlX3RpbGluZykgeworCQkJaWd0X2RlYnVnKCItPiBjaGFuZ2UgWSB0byBTV1xu Iik7CisJCQlib3BzLT5saW5lYXJfdG9feSA9IGNvcHlfbGluZWFyX3RvX3k7CisJCQlib3BzLT55 X3RvX2xpbmVhciA9IGNvcHlfeV90b19saW5lYXI7CisJCX0gZWxzZSB7CisJCQlpZiAoaXNfaHdf dGlsaW5nX3N1cHBvcnRlZChib3BzLCBJOTE1X1RJTElOR19ZKSkgeworCQkJCWlndF9kZWJ1Zygi LT4gY2hhbmdlIFkgdG8gSFdcbiIpOworCQkJCWJvcHMtPmxpbmVhcl90b195ID0gY29weV9saW5l YXJfdG9fZ3R0OworCQkJCWJvcHMtPnlfdG9fbGluZWFyID0gY29weV9ndHRfdG9fbGluZWFyOwor CQkJfSBlbHNlIHsKKwkJCQlpZ3RfZGVidWcoIi0+IFkgY2Fubm90IGJlIGNoYW5nZWQgdG8gSFdc biIpOworCQkJCXdhc19jaGFuZ2VkID0gZmFsc2U7CisJCQl9CisJCX0KKwkJYnJlYWs7CisKKwlk ZWZhdWx0OgorCQlpZ3Rfd2FybigiSW52YWxpZCB0aWxpbmc6ICVkXG4iLCB0aWxpbmcpOworCQl3 YXNfY2hhbmdlZCA9IGZhbHNlOworCX0KKworCXJldHVybiB3YXNfY2hhbmdlZDsKK30KKworLyoq CisgKiBidWZfb3BzX2hhc19od19mZW5jZQorICogQGJvcHM6IHBvaW50ZXIgdG8gYnVmX29wcwor ICogQHRpbGluZzogc3VyZmFjZSB0aWxpbmcKKyAqCisgKiBGdW5jdGlvbiBjaGVja3MgaWYgc3Vy ZmFjZSB3aXRoIHRpbGluZyBoYXMgSFcgZmVuY2VzIHdoaWNoIGNhbiBiZSB1c2VkCisgKiB0byBj b3B5IGl0IHZpYSBndHQuCisgKgorICogUmV0dXJuczoKKyAqIGZhbHNlIC0gZmVuY2UgZm9yIHRp bGluZyBpcyBub3Qgc3VwcG9ydGVkLgorICogdHJ1ZSAtIGZlbmNlIGZvciB0aWxpbmcgaXMgc3Vw cG9ydGVkLgorICovCitib29sIGJ1Zl9vcHNfaGFzX2h3X2ZlbmNlKHN0cnVjdCBidWZfb3BzICpi b3BzLCB1aW50MzJfdCB0aWxpbmcpCit7CisJdWludDMyX3QgdGlsZV9tYXNrID0gVElMRV9ERUYo dGlsaW5nKTsKKworCWlndF9hc3NlcnQoYm9wcyk7CisKKwlpZiAodGlsZV9tYXNrICYgYm9wcy0+ c3VwcG9ydGVkX2h3X3RpbGVzKQorCQlyZXR1cm4gdHJ1ZTsKKworCXJldHVybiBmYWxzZTsKK30K KworLyoqCisgKiBidWZfb3BzX2hhc190aWxpbmdfc3VwcG9ydAorICogQGJvcHM6IHBvaW50ZXIg dG8gYnVmX29wcworICogQHRpbGluZzogc3VyZmFjZSB0aWxpbmcKKyAqCisgKiBGdW5jdGlvbiBj aGVja3MgY2FwYWJpbGl0aWVzIHRvIGhhbmRsZSBzdXJmYWNlcyB3aXRoIHRpbGluZyBpbiBHUFUu CisgKgorICogUmV0dXJuczoKKyAqIGZhbHNlIC0gR1BVIGRvZXMgbm90IHN1cHBvcnQgdGlsaW5n LgorICogdHJ1ZSAtIEdQVSBzdXBwb3J0cyB0aWxpbmcuCisgKi8KK2Jvb2wgYnVmX29wc19oYXNf dGlsaW5nX3N1cHBvcnQoc3RydWN0IGJ1Zl9vcHMgKmJvcHMsIHVpbnQzMl90IHRpbGluZykKK3sK Kwl1aW50MzJfdCB0aWxlX21hc2sgPSBUSUxFX0RFRih0aWxpbmcpOworCisJaWd0X2Fzc2VydChi b3BzKTsKKworCWlmICh0aWxlX21hc2sgJiBib3BzLT5zdXBwb3J0ZWRfdGlsZXMpCisJCXJldHVy biB0cnVlOworCisJcmV0dXJuIGZhbHNlOworfQpkaWZmIC0tZ2l0IGEvbGliL2ludGVsX2J1Zm9w cy5oIGIvbGliL2ludGVsX2J1Zm9wcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAwLi5jMWQxZTkyZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9pbnRlbF9idWZvcHMuaApAQCAt MCwwICsxLDg0IEBACisjaWZuZGVmIF9fSU5URUxfQlVGT1BTX0hfXworI2RlZmluZSBfX0lOVEVM X0JVRk9QU19IX18KKworI2luY2x1ZGUgPHN0ZGludC5oPgorCitzdHJ1Y3QgYnVmX29wczsKKwor c3RydWN0IGludGVsX2J1ZiB7CisJdWludDMyX3QgaGFuZGxlOworCXVpbnQzMl90IHN0cmlkZTsK Kwl1aW50MzJfdCB0aWxpbmc7CisJdWludDMyX3QgYnBwOworCXVpbnQzMl90IHNpemU7CisJdWlu dDMyX3QgY29tcHJlc3Npb247CisJc3RydWN0IHsKKwkJdWludDMyX3Qgb2Zmc2V0OworCQl1aW50 MzJfdCBzdHJpZGU7CisJfSBhdXg7Cit9OworCitpbmxpbmUgdW5zaWduZWQgaW50IGludGVsX2J1 Zl93aWR0aChjb25zdCBzdHJ1Y3QgaW50ZWxfYnVmICpidWYpCit7CisJcmV0dXJuIGJ1Zi0+c3Ry aWRlLyhidWYtPmJwcCAvIDgpOworfQorCitpbmxpbmUgdW5zaWduZWQgaW50IGludGVsX2J1Zl9o ZWlnaHQoY29uc3Qgc3RydWN0IGludGVsX2J1ZiAqYnVmKQoreworCXJldHVybiBidWYtPnNpemUv YnVmLT5zdHJpZGU7Cit9CisKK2lubGluZSB1bnNpZ25lZCBpbnQgaW50ZWxfYnVmX2F1eF93aWR0 aChpbnQgZ2VuLCBjb25zdCBzdHJ1Y3QgaW50ZWxfYnVmICpidWYpCit7CisJLyoKKwkgKiBHRU4x Mis6IFRoZSBBVVggQ0NTIHVuaXQgc2l6ZSBpcyA2NCBieXRlcyBtYXBwaW5nIDQgbWFpbiBzdXJm YWNlCisJICogdGlsZXMuIFRodXMgdGhlIHdpZHRoIG9mIHRoZSBDQ1MgdW5pdCBpcyA0KjMyPTEy OCBwaXhlbHMgb24gdGhlCisJICogbWFpbiBzdXJmYWNlLgorCSAqLworCWlmIChnZW4gPj0gMTIp CisJCXJldHVybiBESVZfUk9VTkRfVVAoaW50ZWxfYnVmX3dpZHRoKGJ1ZiksIDEyOCkgKiA2NDsK KworCXJldHVybiBESVZfUk9VTkRfVVAoaW50ZWxfYnVmX3dpZHRoKGJ1ZiksIDEwMjQpICogMTI4 OworfQorCitpbmxpbmUgdW5zaWduZWQgaW50IGludGVsX2J1Zl9hdXhfaGVpZ2h0KGludCBnZW4s IGNvbnN0IHN0cnVjdCBpbnRlbF9idWYgKmJ1ZikKK3sKKwkvKgorCSAqIEdFTjEyKzogVGhlIEFV WCBDQ1MgdW5pdCBzaXplIGlzIDY0IGJ5dGVzIG1hcHBpbmcgNCBtYWluIHN1cmZhY2UKKwkgKiB0 aWxlcy4gVGh1cyB0aGUgaGVpZ2h0IG9mIHRoZSBDQ1MgdW5pdCBpcyAzMiBwaXhlbCByb3dzIG9u IHRoZSBtYWluCisJICogc3VyZmFjZS4KKwkgKi8KKwlpZiAoZ2VuID49IDEyKQorCQlyZXR1cm4g RElWX1JPVU5EX1VQKGludGVsX2J1Zl9oZWlnaHQoYnVmKSwgMzIpOworCisJcmV0dXJuIERJVl9S T1VORF9VUChpbnRlbF9idWZfaGVpZ2h0KGJ1ZiksIDUxMikgKiAzMjsKK30KKworc3RydWN0IGJ1 Zl9vcHMgKmJ1Zl9vcHNfY3JlYXRlKGludCBmZCk7Cit2b2lkIGJ1Zl9vcHNfZGVzdHJveShzdHJ1 Y3QgYnVmX29wcyAqYm9wcyk7CisKK2Jvb2wgYnVmX29wc19zZXRfc29mdHdhcmVfdGlsaW5nKHN0 cnVjdCBidWZfb3BzICpib3BzLAorCQkJCSB1aW50MzJfdCB0aWxpbmcsCisJCQkJIGJvb2wgdXNl X3NvZnR3YXJlX3RpbGluZyk7CisKK3ZvaWQgaW50ZWxfYnVmX3RvX2xpbmVhcihzdHJ1Y3QgYnVm X29wcyAqYm9wcywgc3RydWN0IGludGVsX2J1ZiAqYnVmLAorCQkJIHVpbnQzMl90ICpsaW5lYXIp OworCit2b2lkIGxpbmVhcl90b19pbnRlbF9idWYoc3RydWN0IGJ1Zl9vcHMgKmJvcHMsIHN0cnVj dCBpbnRlbF9idWYgKmJ1ZiwKKwkJCSB1aW50MzJfdCAqbGluZWFyKTsKKworYm9vbCBidWZfb3Bz X2hhc19od19mZW5jZShzdHJ1Y3QgYnVmX29wcyAqYm9wcywgdWludDMyX3QgdGlsaW5nKTsKK2Jv b2wgYnVmX29wc19oYXNfdGlsaW5nX3N1cHBvcnQoc3RydWN0IGJ1Zl9vcHMgKmJvcHMsIHVpbnQz Ml90IHRpbGluZyk7CisKK3ZvaWQgaW50ZWxfYnVmX2luaXQoc3RydWN0IGJ1Zl9vcHMgKmJvcHMs IHN0cnVjdCBpbnRlbF9idWYgKmJ1ZiwKKwkJICAgIGludCB3aWR0aCwgaW50IGhlaWdodCwgaW50 IGJwcCwKKwkJICAgIHVpbnQzMl90IHRpbGluZywgYm9vbCBjb21wcmVzc2lvbik7Cit2b2lkIGlu dGVsX2J1Zl9jbG9zZShzdHJ1Y3QgYnVmX29wcyAqYm9wcywgc3RydWN0IGludGVsX2J1ZiAqYnVm KTsKKwordm9pZCBpbnRlbF9idWZfaW5pdF91c2luZ19oYW5kbGUoc3RydWN0IGJ1Zl9vcHMgKmJv cHMsCisJCQkJIHVpbnQzMl90IGhhbmRsZSwKKwkJCQkgc3RydWN0IGludGVsX2J1ZiAqYnVmLAor CQkJCSBpbnQgd2lkdGgsIGludCBoZWlnaHQsIGludCBicHAsCisJCQkJIHVpbnQzMl90IHJlcV90 aWxpbmcsIGJvb2wgY29tcHJlc3Npb24pOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYi9tZXNv bi5idWlsZCBiL2xpYi9tZXNvbi5idWlsZAppbmRleCA1N2ViN2Q5My4uY2YzZTM1ZGEgMTAwNjQ0 Ci0tLSBhL2xpYi9tZXNvbi5idWlsZAorKysgYi9saWIvbWVzb24uYnVpbGQKQEAgLTI3LDYgKzI3 LDcgQEAgbGliX3NvdXJjZXMgPSBbCiAJJ2lndF94ODYuYycsCiAJJ2luc3Rkb25lLmMnLAogCSdp bnRlbF9iYXRjaGJ1ZmZlci5jJywKKwknaW50ZWxfYnVmb3BzLmMnLAogCSdpbnRlbF9jaGlwc2V0 LmMnLAogCSdpbnRlbF9kZXZpY2VfaW5mby5jJywKIAknaW50ZWxfb3MuYycsCi0tIAoyLjIzLjAK Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmlndC1kZXYg bWFpbGluZyBsaXN0CmlndC1kZXZAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMu ZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaWd0LWRldgo=