From mboxrd@z Thu Jan 1 00:00:00 1970 From: Chris Wilson Subject: [PATCH 28/32] drm/i915: Load balancing across a virtual engine Date: Wed, 17 Apr 2019 08:56:53 +0100 Message-ID: <20190417075657.19456-28-chris@chris-wilson.co.uk> References: <20190417075657.19456-1-chris@chris-wilson.co.uk> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from fireflyinternet.com (mail.fireflyinternet.com [109.228.58.192]) by gabe.freedesktop.org (Postfix) with ESMTPS id BDEE989FDE for ; Wed, 17 Apr 2019 07:57:12 +0000 (UTC) In-Reply-To: <20190417075657.19456-1-chris@chris-wilson.co.uk> 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 SGF2aW5nIGFsbG93ZWQgdGhlIHVzZXIgdG8gZGVmaW5lIGEgc2V0IG9mIGVuZ2luZXMgdGhhdCB0 aGV5IHdpbGwgd2FudAp0byBvbmx5IHVzZSwgd2UgZ28gb25lIHN0ZXAgZnVydGhlciBhbmQgYWxs b3cgdGhlbSB0byBiaW5kIHRob3NlIGVuZ2luZXMKaW50byBhIHNpbmdsZSB2aXJ0dWFsIGluc3Rh bmNlLiBTdWJtaXR0aW5nIGEgYmF0Y2ggdG8gdGhlIHZpcnR1YWwgZW5naW5lCndpbGwgdGhlbiBm b3J3YXJkIGl0IHRvIGFueSBvbmUgb2YgdGhlIHNldCBpbiBhIG1hbm5lciBhcyBiZXN0IHRvCmRp c3RyaWJ1dGUgbG9hZC4gIFRoZSB2aXJ0dWFsIGVuZ2luZSBoYXMgYSBzaW5nbGUgdGltZWxpbmUg YWNyb3NzIGFsbAplbmdpbmVzIChpdCBvcGVyYXRlcyBhcyBhIHNpbmdsZSBxdWV1ZSksIHNvIGl0 IGlzIG5vdCBhYmxlIHRvIGNvbmN1cnJlbnRseQpydW4gYmF0Y2hlcyBhY3Jvc3MgbXVsdGlwbGUg ZW5naW5lcyBieSBpdHNlbGY7IHRoYXQgaXMgbGVmdCB1cCB0byB0aGUgdXNlcgp0byBzdWJtaXQg bXVsdGlwbGUgY29uY3VycmVudCBiYXRjaGVzIHRvIG11bHRpcGxlIHF1ZXVlcy4gTXVsdGlwbGUg dXNlcnMKd2lsbCBiZSBsb2FkIGJhbGFuY2VkIGFjcm9zcyB0aGUgc3lzdGVtLgoKVGhlIG1lY2hh bmlzbSB1c2VkIGZvciBsb2FkIGJhbGFuY2luZyBpbiB0aGlzIHBhdGNoIGlzIGEgbGF0ZSBncmVl ZHkKYmFsYW5jZXIuIFdoZW4gYSByZXF1ZXN0IGlzIHJlYWR5IGZvciBleGVjdXRpb24sIGl0IGlz IGFkZGVkIHRvIGVhY2gKZW5naW5lJ3MgcXVldWUsIGFuZCB3aGVuIGFuIGVuZ2luZSBpcyByZWFk eSBmb3IgaXRzIG5leHQgcmVxdWVzdCBpdApjbGFpbXMgaXQgZnJvbSB0aGUgdmlydHVhbCBlbmdp bmUuIFRoZSBmaXJzdCBlbmdpbmUgdG8gZG8gc28sIHdpbnMsIGkuZS4KdGhlIHJlcXVlc3QgaXMg ZXhlY3V0ZWQgYXQgdGhlIGVhcmxpZXN0IG9wcG9ydHVuaXR5IChpZGxlIG1vbWVudCkgaW4gdGhl CnN5c3RlbS4KCkFzIG5vdCBhbGwgSFcgaXMgY3JlYXRlZCBlcXVhbCwgdGhlIHVzZXIgaXMgc3Rp bGwgYWJsZSB0byBza2lwIHRoZQp2aXJ0dWFsIGVuZ2luZSBhbmQgZXhlY3V0ZSB0aGUgYmF0Y2gg b24gYSBzcGVjaWZpYyBlbmdpbmUsIGFsbCB3aXRoaW4gdGhlCnNhbWUgcXVldWUuIEl0IHdpbGwg dGhlbiBiZSBleGVjdXRlZCBpbiBvcmRlciBvbiB0aGUgY29ycmVjdCBlbmdpbmUsCndpdGggZXhl Y3V0aW9uIG9uIG90aGVyIHZpcnR1YWwgZW5naW5lcyBiZWluZyBtb3ZlZCBhd2F5IGR1ZSB0byB0 aGUgbG9hZApkZXRlY3Rpb24uCgpBIGNvdXBsZSBvZiBhcmVhcyBmb3IgcG90ZW50aWFsIGltcHJv dmVtZW50IGxlZnQhCgotIFRoZSB2aXJ0dWFsIGVuZ2luZSBhbHdheXMgdGFrZSBwcmlvcml0eSBv dmVyIGVxdWFsLXByaW9yaXR5IHRhc2tzLgpNb3N0bHkgYnJva2VuIHVwIGJ5IGFwcGx5aW5nIEZR X0NPREVMIHJ1bGVzIGZvciBwcmlvcml0aXNpbmcgbmV3IGNsaWVudHMsCmFuZCBob3BlZnVsbHkg dGhlIHZpcnR1YWwgYW5kIHJlYWwgZW5naW5lcyBhcmUgbm90IHRoZW4gY29uZ2VzdGVkIChpLmUu CmFsbCB3b3JrIGlzIHZpYSB2aXJ0dWFsIGVuZ2luZXMsIG9yIGFsbCB3b3JrIGlzIHRvIHRoZSBy ZWFsIGVuZ2luZSkuCgotIFdlIHJlcXVpcmUgdGhlIGJyZWFkY3J1bWIgaXJxIGFyb3VuZCBldmVy eSB2aXJ0dWFsIGVuZ2luZSByZXF1ZXN0LiBGb3IKbm9ybWFsIGVuZ2luZXMsIHdlIGVsaW1pbmF0 ZSB0aGUgbmVlZCBmb3IgdGhlIHNsb3cgcm91bmQgdHJpcCB2aWEKaW50ZXJydXB0IGJ5IHVzaW5n IHRoZSBzdWJtaXQgZmVuY2UgYW5kIHF1ZXVlaW5nIGluIG9yZGVyLiBGb3IgdmlydHVhbAplbmdp bmVzLCB3ZSBoYXZlIHRvIGFsbG93IGFueSBqb2IgdG8gdHJhbnNmZXIgdG8gYSBuZXcgcmluZywg YW5kIGNhbm5vdApjb2FsZXNjZSB0aGUgc3VibWlzc2lvbnMsIHNvIHJlcXVpcmUgdGhlIGNvbXBs ZXRpb24gZmVuY2UgaW5zdGVhZCwKZm9yY2luZyB0aGUgcGVyc2lzdGVudCB1c2Ugb2YgaW50ZXJy dXB0cy4KCi0gV2Ugb25seSBkcmlwIGZlZWQgc2luZ2xlIHJlcXVlc3RzIHRocm91Z2ggZWFjaCB2 aXJ0dWFsIGVuZ2luZSBhbmQgb250bwp0aGUgcGh5c2ljYWwgZW5naW5lcywgZXZlbiBpZiB0aGVy ZSB3YXMgZW5vdWdoIHdvcmsgdG8gZmlsbCBhbGwgRUxTUCwKbGVhdmluZyBzbWFsbCBzdGFsbHMg d2l0aCBhbiBpZGxlIENTIGV2ZW50IGF0IHRoZSBlbmQgb2YgZXZlcnkgcmVxdWVzdC4KQ291bGQg d2UgYmUgZ3JlZWR5IGFuZCBmaWxsIGJvdGggc2xvdHM/IEJlaW5nIGxhenkgaXMgdmlydHVvdXMg Zm9yIGxvYWQKZGlzdHJpYnV0aW9uIG9uIGxlc3MtdGhhbi1mdWxsIHdvcmtsb2FkcyB0aG91Z2gu CgpPdGhlciBhcmVhcyBvZiBpbXByb3ZlbWVudCBhcmUgbW9yZSBnZW5lcmFsLCBzdWNoIGFzIHJl ZHVjaW5nIGxvY2sKY29udGVudGlvbiwgcmVkdWNpbmcgZGlzcGF0Y2ggb3ZlcmhlYWQsIGxvb2tp bmcgYXQgZGlyZWN0IHN1Ym1pc3Npb24KcmF0aGVyIHRoYW4gYm91bmNpbmcgYXJvdW5kIHRhc2ts ZXRzIGV0Yy4KCnNzZXU6IExpZnQgdGhlIHJlc3RyaWN0aW9uIHRvIGFsbG93IHNzZXUgdG8gYmUg cmVjb25maWd1cmVkIG9uIHZpcnR1YWwKZW5naW5lcyBjb21wb3NlZCBvZiBSRU5ERVJfQ0xBU1Mg KHJjcykuCgp2MjogbWFjcm9pemUgY2hlY2tfdXNlcl9tYnooKQp2MzogQ2FuY2VsIHZpcnR1YWwg ZW5naW5lcyBvbiB3ZWRnaW5nCnY0OiBDb21tZW5jZSBjb21tZW50aW5nCnY1OiBSZXBsYWNlIDY0 YiBzaWJsaW5nX21hc2sgd2l0aCBhIGxpc3Qgb2YgY2xhc3M6aW5zdGFuY2UKClNpZ25lZC1vZmYt Ynk6IENocmlzIFdpbHNvbiA8Y2hyaXNAY2hyaXMtd2lsc29uLmNvLnVrPgpDYzogVHZydGtvIFVy c3VsaW4gPHR2cnRrby51cnN1bGluQGludGVsLmNvbT4KLS0tCiBkcml2ZXJzL2dwdS9kcm0vaTkx NS9ndC9pbnRlbF9icmVhZGNydW1icy5jICB8ICAgNiArLQogZHJpdmVycy9ncHUvZHJtL2k5MTUv Z3QvaW50ZWxfZW5naW5lX3R5cGVzLmggfCAgIDggKwogZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Qv aW50ZWxfbHJjLmMgICAgICAgICAgfCA2MTEgKysrKysrKysrKysrKysrKysrLQogZHJpdmVycy9n cHUvZHJtL2k5MTUvZ3QvaW50ZWxfbHJjLmggICAgICAgICAgfCAgIDkgKwogZHJpdmVycy9ncHUv ZHJtL2k5MTUvZ3Qvc2VsZnRlc3RfbHJjLmMgICAgICAgfCAxODAgKysrKysrCiBkcml2ZXJzL2dw dS9kcm0vaTkxNS9pOTE1X2dlbS5oICAgICAgICAgICAgICB8ICAgNSArCiBkcml2ZXJzL2dwdS9k cm0vaTkxNS9pOTE1X2dlbV9jb250ZXh0LmMgICAgICB8IDExOCArKystCiBkcml2ZXJzL2dwdS9k cm0vaTkxNS9pOTE1X3NjaGVkdWxlci5jICAgICAgICB8ICAxOCArLQogZHJpdmVycy9ncHUvZHJt L2k5MTUvaTkxNV90aW1lbGluZV90eXBlcy5oICAgfCAgIDEgKwogaW5jbHVkZS91YXBpL2RybS9p OTE1X2RybS5oICAgICAgICAgICAgICAgICAgfCAgMzkgKysKIDEwIGZpbGVzIGNoYW5nZWQsIDk3 OCBpbnNlcnRpb25zKCspLCAxNyBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vaTkxNS9ndC9pbnRlbF9icmVhZGNydW1icy5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUv Z3QvaW50ZWxfYnJlYWRjcnVtYnMuYwppbmRleCBlMTlmODRiMDA2Y2MuLmY5MDBmMDY4MDY0NyAx MDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfYnJlYWRjcnVtYnMuYwor KysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9icmVhZGNydW1icy5jCkBAIC0yOTAs OCArMjkwLDEyIEBAIGJvb2wgaTkxNV9yZXF1ZXN0X2VuYWJsZV9icmVhZGNydW1iKHN0cnVjdCBp OTE1X3JlcXVlc3QgKnJxKQogCQkJCWJyZWFrOwogCQl9CiAJCWxpc3RfYWRkKCZycS0+c2lnbmFs X2xpbmssIHBvcyk7Ci0JCWlmIChwb3MgPT0gJmNlLT5zaWduYWxzKSAvKiBjYXRjaCB0cmFuc2l0 aW9ucyBmcm9tIGVtcHR5IGxpc3QgKi8KKwkJaWYgKHBvcyA9PSAmY2UtPnNpZ25hbHMpIHsgLyog Y2F0Y2ggdHJhbnNpdGlvbnMgZnJvbSBlbXB0eSAqLwogCQkJbGlzdF9tb3ZlX3RhaWwoJmNlLT5z aWduYWxfbGluaywgJmItPnNpZ25hbGVycyk7CisJCX0gZWxzZSBpZiAoY2UtPmVuZ2luZSAhPSBy cS0+ZW5naW5lKSB7IC8qIHZpcnR1YWxpc2VkICovCisJCQlsaXN0X21vdmVfdGFpbCgmY2UtPnNp Z25hbF9saW5rLCAmYi0+c2lnbmFsZXJzKTsKKwkJCWludGVsX2VuZ2luZV9xdWV1ZV9icmVhZGNy dW1icyhycS0+ZW5naW5lKTsKKwkJfQogCiAJCXNldF9iaXQoSTkxNV9GRU5DRV9GTEFHX1NJR05B TCwgJnJxLT5mZW5jZS5mbGFncyk7CiAJCXNwaW5fdW5sb2NrKCZiLT5pcnFfbG9jayk7CmRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9lbmdpbmVfdHlwZXMuaCBiL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX2VuZ2luZV90eXBlcy5oCmluZGV4IGQ5NzJjMzM5 MzA5Yy4uNmRjZWI3OGU5NWQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9p bnRlbF9lbmdpbmVfdHlwZXMuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9l bmdpbmVfdHlwZXMuaApAQCAtMjI3LDYgKzIyNyw3IEBAIHN0cnVjdCBpbnRlbF9lbmdpbmVfZXhl Y2xpc3RzIHsKIAkgKiBAcXVldWU6IHF1ZXVlIG9mIHJlcXVlc3RzLCBpbiBwcmlvcml0eSBsaXN0 cwogCSAqLwogCXN0cnVjdCByYl9yb290X2NhY2hlZCBxdWV1ZTsKKwlzdHJ1Y3QgcmJfcm9vdF9j YWNoZWQgdmlydHVhbDsKIAogCS8qKgogCSAqIEBjc2Jfd3JpdGU6IGNvbnRyb2wgcmVnaXN0ZXIg Zm9yIENvbnRleHQgU3dpdGNoIGJ1ZmZlcgpAQCAtNDQ1LDYgKzQ0Niw3IEBAIHN0cnVjdCBpbnRl bF9lbmdpbmVfY3MgewogI2RlZmluZSBJOTE1X0VOR0lORV9IQVNfUFJFRU1QVElPTiAgIEJJVCgy KQogI2RlZmluZSBJOTE1X0VOR0lORV9IQVNfU0VNQVBIT1JFUyAgIEJJVCgzKQogI2RlZmluZSBJ OTE1X0VOR0lORV9ORUVEU19CUkVBRENSVU1CX1RBU0tMRVQgQklUKDQpCisjZGVmaW5lIEk5MTVf RU5HSU5FX0lTX1ZJUlRVQUwgICAgICAgQklUKDUpCiAJdW5zaWduZWQgaW50IGZsYWdzOwogCiAJ LyoKQEAgLTUzNCw2ICs1MzYsMTIgQEAgaW50ZWxfZW5naW5lX25lZWRzX2JyZWFkY3J1bWJfdGFz a2xldChjb25zdCBzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCiAJcmV0dXJuIGVuZ2lu ZS0+ZmxhZ3MgJiBJOTE1X0VOR0lORV9ORUVEU19CUkVBRENSVU1CX1RBU0tMRVQ7CiB9CiAKK3N0 YXRpYyBpbmxpbmUgYm9vbAoraW50ZWxfZW5naW5lX2lzX3ZpcnR1YWwoY29uc3Qgc3RydWN0IGlu dGVsX2VuZ2luZV9jcyAqZW5naW5lKQoreworCXJldHVybiBlbmdpbmUtPmZsYWdzICYgSTkxNV9F TkdJTkVfSVNfVklSVFVBTDsKK30KKwogI2RlZmluZSBpbnN0ZG9uZV9zbGljZV9tYXNrKGRldl9w cml2X18pIFwKIAkoSVNfR0VOKGRldl9wcml2X18sIDcpID8gXAogCSAxIDogUlVOVElNRV9JTkZP KGRldl9wcml2X18pLT5zc2V1LnNsaWNlX21hc2spCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0vaTkxNS9ndC9pbnRlbF9scmMuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX2xy Yy5jCmluZGV4IDAxZjU4YTE1MmE5ZS4uZDZlZmQ2YWE2N2NiIDEwMDY0NAotLS0gYS9kcml2ZXJz L2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9scmMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9n dC9pbnRlbF9scmMuYwpAQCAtMTM2LDYgKzEzNiw3IEBACiAjaW5jbHVkZSAiaTkxNV9kcnYuaCIK ICNpbmNsdWRlICJpOTE1X2dlbV9yZW5kZXJfc3RhdGUuaCIKICNpbmNsdWRlICJpOTE1X3ZncHUu aCIKKyNpbmNsdWRlICJpbnRlbF9lbmdpbmVfcG0uaCIKICNpbmNsdWRlICJpbnRlbF9scmNfcmVn LmgiCiAjaW5jbHVkZSAiaW50ZWxfbW9jcy5oIgogI2luY2x1ZGUgImludGVsX3Jlc2V0LmgiCkBA IC0xNjUsNiArMTY2LDQxIEBACiAKICNkZWZpbmUgQUNUSVZFX1BSSU9SSVRZIChJOTE1X1BSSU9S SVRZX05FV0NMSUVOVCB8IEk5MTVfUFJJT1JJVFlfTk9TRU1BUEhPUkUpCiAKK3N0cnVjdCB2aXJ0 dWFsX2VuZ2luZSB7CisJc3RydWN0IGludGVsX2VuZ2luZV9jcyBiYXNlOworCXN0cnVjdCBpbnRl bF9jb250ZXh0IGNvbnRleHQ7CisKKwkvKgorCSAqIFdlIGFsbG93IG9ubHkgYSBzaW5nbGUgcmVx dWVzdCB0aHJvdWdoIHRoZSB2aXJ0dWFsIGVuZ2luZSBhdCBhIHRpbWUKKwkgKiAoZWFjaCByZXF1 ZXN0IGluIHRoZSB0aW1lbGluZSB3YWl0cyBmb3IgdGhlIGNvbXBsZXRpb24gZmVuY2Ugb2YKKwkg KiB0aGUgcHJldmlvdXMgYmVmb3JlIGJlaW5nIHN1Ym1pdHRlZCkuIEJ5IHJlc3RyaWN0aW5nIG91 cnNlbHZlcyB0bworCSAqIG9ubHkgc3VibWl0dGluZyBhIHNpbmdsZSByZXF1ZXN0LCBlYWNoIHJl cXVlc3QgaXMgcGxhY2VkIG9uIHRvIGEKKwkgKiBwaHlzaWNhbCB0byBtYXhpbWlzZSBsb2FkIHNw cmVhZGluZyAoYnkgdmlydHVlIG9mIHRoZSBsYXRlIGdyZWVkeQorCSAqIHNjaGVkdWxpbmcgLS0g ZWFjaCByZWFsIGVuZ2luZSB0YWtlcyB0aGUgbmV4dCBhdmFpbGFibGUgcmVxdWVzdAorCSAqIHVw b24gaWRsaW5nKS4KKwkgKi8KKwlzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpyZXF1ZXN0OworCisJLyoK KwkgKiBXZSBrZWVwIGEgcmJ0cmVlIG9mIGF2YWlsYWJsZSB2aXJ0dWFsIGVuZ2luZXMgaW5zaWRl IGVhY2ggcGh5c2ljYWwKKwkgKiBlbmdpbmUsIHNvcnRlZCBieSBwcmlvcml0eS4gSGVyZSB3ZSBw cmVhbGxvY2F0ZSB0aGUgbm9kZXMgd2UgbmVlZAorCSAqIGZvciB0aGUgdmlydHVhbCBlbmdpbmUs IGluZGV4ZWQgYnkgcGh5c2ljYWxfZW5naW5lLT5pZC4KKwkgKi8KKwlzdHJ1Y3QgdmVfbm9kZSB7 CisJCXN0cnVjdCByYl9ub2RlIHJiOworCQlpbnQgcHJpbzsKKwl9IG5vZGVzW0k5MTVfTlVNX0VO R0lORVNdOworCisJLyogQW5kIGZpbmFsbHksIHdoaWNoIHBoeXNpY2FsIGVuZ2luZXMgdGhpcyB2 aXJ0dWFsIGVuZ2luZSBtYXBzIG9udG8uICovCisJdW5zaWduZWQgaW50IG51bV9zaWJsaW5nczsK KwlzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpzaWJsaW5nc1swXTsKK307CisKK3N0YXRpYyBzdHJ1 Y3QgdmlydHVhbF9lbmdpbmUgKnRvX3ZpcnR1YWxfZW5naW5lKHN0cnVjdCBpbnRlbF9lbmdpbmVf Y3MgKmVuZ2luZSkKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKGVuZ2luZSwgc3RydWN0IHZpcnR1 YWxfZW5naW5lLCBiYXNlKTsKK30KKwogc3RhdGljIGludCBleGVjbGlzdHNfY29udGV4dF9kZWZl cnJlZF9hbGxvYyhzdHJ1Y3QgaW50ZWxfY29udGV4dCAqY2UsCiAJCQkJCSAgICBzdHJ1Y3QgaW50 ZWxfZW5naW5lX2NzICplbmdpbmUpOwogc3RhdGljIHZvaWQgZXhlY2xpc3RzX2luaXRfcmVnX3N0 YXRlKHUzMiAqcmVnX3N0YXRlLApAQCAtMjI4LDcgKzI2NCw4IEBAIHN0YXRpYyBpbnQgcXVldWVf cHJpbyhjb25zdCBzdHJ1Y3QgaW50ZWxfZW5naW5lX2V4ZWNsaXN0cyAqZXhlY2xpc3RzKQogfQog CiBzdGF0aWMgaW5saW5lIGJvb2wgbmVlZF9wcmVlbXB0KGNvbnN0IHN0cnVjdCBpbnRlbF9lbmdp bmVfY3MgKmVuZ2luZSwKLQkJCQljb25zdCBzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycSkKKwkJCQlj b25zdCBzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycSwKKwkJCQlzdHJ1Y3QgcmJfbm9kZSAqcmIpCiB7 CiAJaW50IGxhc3RfcHJpbzsKIApAQCAtMjYzLDYgKzMwMCwyMiBAQCBzdGF0aWMgaW5saW5lIGJv b2wgbmVlZF9wcmVlbXB0KGNvbnN0IHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSwKIAkg ICAgcnFfcHJpbyhsaXN0X25leHRfZW50cnkocnEsIGxpbmspKSA+IGxhc3RfcHJpbykKIAkJcmV0 dXJuIHRydWU7CiAKKwlpZiAocmIpIHsgLyogWFhYIHZpcnR1YWwgcHJlY2VkZW5jZSAqLworCQlz dHJ1Y3QgdmlydHVhbF9lbmdpbmUgKnZlID0KKwkJCXJiX2VudHJ5KHJiLCB0eXBlb2YoKnZlKSwg bm9kZXNbZW5naW5lLT5pZF0ucmIpOworCQlib29sIHByZWVtcHQgPSBmYWxzZTsKKworCQlpZiAo ZW5naW5lID09IHZlLT5zaWJsaW5nc1swXSkgeyAvKiBvbmx5IHByZWVtcHQgb25lIHNpYmxpbmcg Ki8KKwkJCXNwaW5fbG9jaygmdmUtPmJhc2UudGltZWxpbmUubG9jayk7CisJCQlpZiAodmUtPnJl cXVlc3QpCisJCQkJcHJlZW1wdCA9IHJxX3ByaW8odmUtPnJlcXVlc3QpID4gbGFzdF9wcmlvOwor CQkJc3Bpbl91bmxvY2soJnZlLT5iYXNlLnRpbWVsaW5lLmxvY2spOworCQl9CisKKwkJaWYgKHBy ZWVtcHQpCisJCQlyZXR1cm4gcHJlZW1wdDsKKwl9CisKIAkvKgogCSAqIElmIHRoZSBpbmZsaWdo dCBjb250ZXh0IGRpZCBub3QgdHJpZ2dlciB0aGUgcHJlZW1wdGlvbiwgdGhlbiBtYXliZQogCSAq IGl0IHdhcyB0aGUgc2V0IG9mIHF1ZXVlZCByZXF1ZXN0cz8gUGljayB0aGUgaGlnaGVzdCBwcmlv cml0eSBpbgpAQCAtMzgxLDYgKzQzNCw4IEBAIF9fdW53aW5kX2luY29tcGxldGVfcmVxdWVzdHMo c3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2Fm ZV9yZXZlcnNlKHJxLCBybiwKIAkJCQkJICZlbmdpbmUtPnRpbWVsaW5lLnJlcXVlc3RzLAogCQkJ CQkgbGluaykgeworCQlzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpvd25lcjsKKwogCQlpZiAoaTkx NV9yZXF1ZXN0X2NvbXBsZXRlZChycSkpCiAJCQlicmVhazsKIApAQCAtMzg5LDE0ICs0NDQsMzAg QEAgX191bndpbmRfaW5jb21wbGV0ZV9yZXF1ZXN0cyhzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpl bmdpbmUpCiAKIAkJR0VNX0JVR19PTihycS0+aHdfY29udGV4dC0+YWN0aXZlKTsKIAotCQlHRU1f QlVHX09OKHJxX3ByaW8ocnEpID09IEk5MTVfUFJJT1JJVFlfSU5WQUxJRCk7Ci0JCWlmIChycV9w cmlvKHJxKSAhPSBwcmlvKSB7Ci0JCQlwcmlvID0gcnFfcHJpbyhycSk7Ci0JCQlwbCA9IGk5MTVf c2NoZWRfbG9va3VwX3ByaW9saXN0KGVuZ2luZSwgcHJpbyk7Ci0JCX0KLQkJR0VNX0JVR19PTihS Ql9FTVBUWV9ST09UKCZlbmdpbmUtPmV4ZWNsaXN0cy5xdWV1ZS5yYl9yb290KSk7CisJCS8qCisJ CSAqIFB1c2ggdGhlIHJlcXVlc3QgYmFjayBpbnRvIHRoZSBxdWV1ZSBmb3IgbGF0ZXIgcmVzdWJt aXNzaW9uLgorCQkgKiBJZiB0aGlzIHJlcXVlc3QgaXMgbm90IG5hdGl2ZSB0byB0aGlzIHBoeXNp Y2FsIGVuZ2luZSAoaS5lLgorCQkgKiBpdCBjYW1lIGZyb20gYSB2aXJ0dWFsIHNvdXJjZSksIHB1 c2ggaXQgYmFjayBvbnRvIHRoZSB2aXJ0dWFsCisJCSAqIGVuZ2luZSBzbyB0aGF0IGl0IGNhbiBi ZSBtb3ZlZCBhY3Jvc3Mgb250byBhbm90aGVyIHBoeXNpY2FsCisJCSAqIGVuZ2luZSBhcyBsb2Fk IGRpY3RhdGVzLgorCQkgKi8KKwkJb3duZXIgPSBycS0+aHdfY29udGV4dC0+ZW5naW5lOworCQlp ZiAobGlrZWx5KG93bmVyID09IGVuZ2luZSkpIHsKKwkJCUdFTV9CVUdfT04ocnFfcHJpbyhycSkg PT0gSTkxNV9QUklPUklUWV9JTlZBTElEKTsKKwkJCWlmIChycV9wcmlvKHJxKSAhPSBwcmlvKSB7 CisJCQkJcHJpbyA9IHJxX3ByaW8ocnEpOworCQkJCXBsID0gaTkxNV9zY2hlZF9sb29rdXBfcHJp b2xpc3QoZW5naW5lLCBwcmlvKTsKKwkJCX0KKwkJCUdFTV9CVUdfT04oUkJfRU1QVFlfUk9PVCgm ZW5naW5lLT5leGVjbGlzdHMucXVldWUucmJfcm9vdCkpOwogCi0JCWxpc3RfYWRkKCZycS0+c2No ZWQubGluaywgcGwpOworCQkJbGlzdF9hZGQoJnJxLT5zY2hlZC5saW5rLCBwbCk7CisJCX0gZWxz ZSB7CisJCQlpZiAoX19pOTE1X3JlcXVlc3RfaGFzX3N0YXJ0ZWQocnEpKQorCQkJCXJxLT5zY2hl ZC5hdHRyLnByaW9yaXR5IHw9IEFDVElWRV9QUklPUklUWTsKKworCQkJcnEtPmVuZ2luZSA9IG93 bmVyOworCQkJb3duZXItPnN1Ym1pdF9yZXF1ZXN0KHJxKTsKKwkJfQogCiAJCWFjdGl2ZSA9IHJx OwogCX0KQEAgLTY1OCw2ICs3MjksNzIgQEAgc3RhdGljIHZvaWQgY29tcGxldGVfcHJlZW1wdF9j b250ZXh0KHN0cnVjdCBpbnRlbF9lbmdpbmVfZXhlY2xpc3RzICpleGVjbGlzdHMpCiAJCQkJCQkg IGV4ZWNsaXN0cykpOwogfQogCitzdGF0aWMgdm9pZCB2aXJ0dWFsX3VwZGF0ZV9yZWdpc3Rlcl9v ZmZzZXRzKHUzMiAqcmVncywKKwkJCQkJICAgIHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2lu ZSkKK3sKKwl1MzIgYmFzZSA9IGVuZ2luZS0+bW1pb19iYXNlOworCisJcmVnc1tDVFhfQ09OVEVY VF9DT05UUk9MXSA9CisJCWk5MTVfbW1pb19yZWdfb2Zmc2V0KFJJTkdfQ09OVEVYVF9DT05UUk9M KGJhc2UpKTsKKwlyZWdzW0NUWF9SSU5HX0hFQURdID0gaTkxNV9tbWlvX3JlZ19vZmZzZXQoUklO R19IRUFEKGJhc2UpKTsKKwlyZWdzW0NUWF9SSU5HX1RBSUxdID0gaTkxNV9tbWlvX3JlZ19vZmZz ZXQoUklOR19UQUlMKGJhc2UpKTsKKwlyZWdzW0NUWF9SSU5HX0JVRkZFUl9TVEFSVF0gPSBpOTE1 X21taW9fcmVnX29mZnNldChSSU5HX1NUQVJUKGJhc2UpKTsKKwlyZWdzW0NUWF9SSU5HX0JVRkZF Ul9DT05UUk9MXSA9IGk5MTVfbW1pb19yZWdfb2Zmc2V0KFJJTkdfQ1RMKGJhc2UpKTsKKworCXJl Z3NbQ1RYX0JCX0hFQURfVV0gPSBpOTE1X21taW9fcmVnX29mZnNldChSSU5HX0JCQUREUl9VRFco YmFzZSkpOworCXJlZ3NbQ1RYX0JCX0hFQURfTF0gPSBpOTE1X21taW9fcmVnX29mZnNldChSSU5H X0JCQUREUihiYXNlKSk7CisJcmVnc1tDVFhfQkJfU1RBVEVdID0gaTkxNV9tbWlvX3JlZ19vZmZz ZXQoUklOR19CQlNUQVRFKGJhc2UpKTsKKwlyZWdzW0NUWF9TRUNPTkRfQkJfSEVBRF9VXSA9CisJ CWk5MTVfbW1pb19yZWdfb2Zmc2V0KFJJTkdfU0JCQUREUl9VRFcoYmFzZSkpOworCXJlZ3NbQ1RY X1NFQ09ORF9CQl9IRUFEX0xdID0gaTkxNV9tbWlvX3JlZ19vZmZzZXQoUklOR19TQkJBRERSKGJh c2UpKTsKKwlyZWdzW0NUWF9TRUNPTkRfQkJfU1RBVEVdID0gaTkxNV9tbWlvX3JlZ19vZmZzZXQo UklOR19TQkJTVEFURShiYXNlKSk7CisKKwlyZWdzW0NUWF9DVFhfVElNRVNUQU1QXSA9CisJCWk5 MTVfbW1pb19yZWdfb2Zmc2V0KFJJTkdfQ1RYX1RJTUVTVEFNUChiYXNlKSk7CisJcmVnc1tDVFhf UERQM19VRFddID0gaTkxNV9tbWlvX3JlZ19vZmZzZXQoR0VOOF9SSU5HX1BEUF9VRFcoYmFzZSwg MykpOworCXJlZ3NbQ1RYX1BEUDNfTERXXSA9IGk5MTVfbW1pb19yZWdfb2Zmc2V0KEdFTjhfUklO R19QRFBfTERXKGJhc2UsIDMpKTsKKwlyZWdzW0NUWF9QRFAyX1VEV10gPSBpOTE1X21taW9fcmVn X29mZnNldChHRU44X1JJTkdfUERQX1VEVyhiYXNlLCAyKSk7CisJcmVnc1tDVFhfUERQMl9MRFdd ID0gaTkxNV9tbWlvX3JlZ19vZmZzZXQoR0VOOF9SSU5HX1BEUF9MRFcoYmFzZSwgMikpOworCXJl Z3NbQ1RYX1BEUDFfVURXXSA9IGk5MTVfbW1pb19yZWdfb2Zmc2V0KEdFTjhfUklOR19QRFBfVURX KGJhc2UsIDEpKTsKKwlyZWdzW0NUWF9QRFAxX0xEV10gPSBpOTE1X21taW9fcmVnX29mZnNldChH RU44X1JJTkdfUERQX0xEVyhiYXNlLCAxKSk7CisJcmVnc1tDVFhfUERQMF9VRFddID0gaTkxNV9t bWlvX3JlZ19vZmZzZXQoR0VOOF9SSU5HX1BEUF9VRFcoYmFzZSwgMCkpOworCXJlZ3NbQ1RYX1BE UDBfTERXXSA9IGk5MTVfbW1pb19yZWdfb2Zmc2V0KEdFTjhfUklOR19QRFBfTERXKGJhc2UsIDAp KTsKKworCWlmIChlbmdpbmUtPmNsYXNzID09IFJFTkRFUl9DTEFTUykgeworCQlyZWdzW0NUWF9S Q1NfSU5ESVJFQ1RfQ1RYXSA9CisJCQlpOTE1X21taW9fcmVnX29mZnNldChSSU5HX0lORElSRUNU X0NUWChiYXNlKSk7CisJCXJlZ3NbQ1RYX1JDU19JTkRJUkVDVF9DVFhfT0ZGU0VUXSA9CisJCQlp OTE1X21taW9fcmVnX29mZnNldChSSU5HX0lORElSRUNUX0NUWF9PRkZTRVQoYmFzZSkpOworCQly ZWdzW0NUWF9CQl9QRVJfQ1RYX1BUUl0gPQorCQkJaTkxNV9tbWlvX3JlZ19vZmZzZXQoUklOR19C Ql9QRVJfQ1RYX1BUUihiYXNlKSk7CisKKwkJcmVnc1tDVFhfUl9QV1JfQ0xLX1NUQVRFXSA9CisJ CQlpOTE1X21taW9fcmVnX29mZnNldChHRU44X1JfUFdSX0NMS19TVEFURSk7CisJfQorfQorCitz dGF0aWMgYm9vbCB2aXJ0dWFsX21hdGNoZXMoY29uc3Qgc3RydWN0IHZpcnR1YWxfZW5naW5lICp2 ZSwKKwkJCSAgICBjb25zdCBzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycSwKKwkJCSAgICBjb25zdCBz dHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCit7CisJY29uc3Qgc3RydWN0IGludGVsX2Vu Z2luZV9jcyAqYWN0aXZlOworCisJLyoKKwkgKiBXZSB0cmFjayB3aGVuIHRoZSBIVyBoYXMgY29t cGxldGVkIHNhdmluZyB0aGUgY29udGV4dCBpbWFnZQorCSAqIChpLmUuIHdoZW4gd2UgaGF2ZSBz ZWVuIHRoZSBmaW5hbCBDUyBldmVudCBzd2l0Y2hpbmcgb3V0IG9mCisJICogdGhlIGNvbnRleHQp IGFuZCBtdXN0IG5vdCBvdmVyd3JpdGUgdGhlIGNvbnRleHQgaW1hZ2UgYmVmb3JlCisJICogdGhl bi4gVGhpcyByZXN0cmljdHMgdXMgdG8gb25seSB1c2luZyB0aGUgYWN0aXZlIGVuZ2luZQorCSAq IHdoaWxlIHRoZSBwcmV2aW91cyB2aXJ0dWFsaXplZCByZXF1ZXN0IGlzIGluZmxpZ2h0IChzbwor CSAqIHdlIHJldXNlIHRoZSByZWdpc3RlciBvZmZzZXRzKS4gVGhpcyBpcyBhIHZlcnkgc21hbGwK KwkgKiBoeXN0ZXJzaXMgb24gdGhlIGdyZWVkeSBzZWVsY3Rpb24gYWxnb3JpdGhtLgorCSAqLwor CWFjdGl2ZSA9IFJFQURfT05DRSh2ZS0+Y29udGV4dC5hY3RpdmUpOworCWlmIChhY3RpdmUgJiYg YWN0aXZlICE9IGVuZ2luZSkKKwkJcmV0dXJuIGZhbHNlOworCisJcmV0dXJuIHRydWU7Cit9CisK IHN0YXRpYyB2b2lkIGV4ZWNsaXN0c19kZXF1ZXVlKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVu Z2luZSkKIHsKIAlzdHJ1Y3QgaW50ZWxfZW5naW5lX2V4ZWNsaXN0cyAqIGNvbnN0IGV4ZWNsaXN0 cyA9ICZlbmdpbmUtPmV4ZWNsaXN0czsKQEAgLTY5MCw2ICs4MjcsMjYgQEAgc3RhdGljIHZvaWQg ZXhlY2xpc3RzX2RlcXVldWUoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQogCSAqIGFu ZCBjb250ZXh0IHN3aXRjaGVzKSBzdWJtaXNzaW9uLgogCSAqLwogCisJZm9yIChyYiA9IHJiX2Zp cnN0X2NhY2hlZCgmZXhlY2xpc3RzLT52aXJ0dWFsKTsgcmI7ICkgeworCQlzdHJ1Y3QgdmlydHVh bF9lbmdpbmUgKnZlID0KKwkJCXJiX2VudHJ5KHJiLCB0eXBlb2YoKnZlKSwgbm9kZXNbZW5naW5l LT5pZF0ucmIpOworCQlzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycSA9IFJFQURfT05DRSh2ZS0+cmVx dWVzdCk7CisKKwkJaWYgKCFycSkgeyAvKiBsYXppbHkgY2xlYW51cCBhZnRlciBhbm90aGVyIGVu Z2luZSBoYW5kbGVkIHJxICovCisJCQlyYl9lcmFzZV9jYWNoZWQocmIsICZleGVjbGlzdHMtPnZp cnR1YWwpOworCQkJUkJfQ0xFQVJfTk9ERShyYik7CisJCQlyYiA9IHJiX2ZpcnN0X2NhY2hlZCgm ZXhlY2xpc3RzLT52aXJ0dWFsKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKCF2aXJ0dWFs X21hdGNoZXModmUsIHJxLCBlbmdpbmUpKSB7CisJCQlyYiA9IHJiX25leHQocmIpOworCQkJY29u dGludWU7CisJCX0KKworCQlicmVhazsKKwl9CisKIAlpZiAobGFzdCkgewogCQkvKgogCQkgKiBE b24ndCByZXN1Ym1pdCBvciBzd2l0Y2ggdW50aWwgYWxsIG91dHN0YW5kaW5nCkBAIC03MTEsNyAr ODY4LDcgQEAgc3RhdGljIHZvaWQgZXhlY2xpc3RzX2RlcXVldWUoc3RydWN0IGludGVsX2VuZ2lu ZV9jcyAqZW5naW5lKQogCQlpZiAoIWV4ZWNsaXN0c19pc19hY3RpdmUoZXhlY2xpc3RzLCBFWEVD TElTVFNfQUNUSVZFX0hXQUNLKSkKIAkJCXJldHVybjsKIAotCQlpZiAobmVlZF9wcmVlbXB0KGVu Z2luZSwgbGFzdCkpIHsKKwkJaWYgKG5lZWRfcHJlZW1wdChlbmdpbmUsIGxhc3QsIHJiKSkgewog CQkJaW5qZWN0X3ByZWVtcHRfY29udGV4dChlbmdpbmUpOwogCQkJcmV0dXJuOwogCQl9CkBAIC03 NTEsNiArOTA4LDg5IEBAIHN0YXRpYyB2b2lkIGV4ZWNsaXN0c19kZXF1ZXVlKHN0cnVjdCBpbnRl bF9lbmdpbmVfY3MgKmVuZ2luZSkKIAkJbGFzdC0+dGFpbCA9IGxhc3QtPndhX3RhaWw7CiAJfQog CisJd2hpbGUgKHJiKSB7IC8qIFhYWCB2aXJ0dWFsIGlzIGFsd2F5cyB0YWtpbmcgcHJlY2VkZW5j ZSAqLworCQlzdHJ1Y3QgdmlydHVhbF9lbmdpbmUgKnZlID0KKwkJCXJiX2VudHJ5KHJiLCB0eXBl b2YoKnZlKSwgbm9kZXNbZW5naW5lLT5pZF0ucmIpOworCQlzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpy cTsKKworCQlzcGluX2xvY2soJnZlLT5iYXNlLnRpbWVsaW5lLmxvY2spOworCisJCXJxID0gdmUt PnJlcXVlc3Q7CisJCWlmICh1bmxpa2VseSghcnEpKSB7IC8qIGxvc3QgdGhlIHJhY2UgdG8gYSBz aWJsaW5nICovCisJCQlzcGluX3VubG9jaygmdmUtPmJhc2UudGltZWxpbmUubG9jayk7CisJCQly Yl9lcmFzZV9jYWNoZWQocmIsICZleGVjbGlzdHMtPnZpcnR1YWwpOworCQkJUkJfQ0xFQVJfTk9E RShyYik7CisJCQlyYiA9IHJiX2ZpcnN0X2NhY2hlZCgmZXhlY2xpc3RzLT52aXJ0dWFsKTsKKwkJ CWNvbnRpbnVlOworCQl9CisKKwkJR0VNX0JVR19PTihycSAhPSB2ZS0+cmVxdWVzdCk7CisJCUdF TV9CVUdfT04ocnEtPmVuZ2luZSAhPSAmdmUtPmJhc2UpOworCQlHRU1fQlVHX09OKHJxLT5od19j b250ZXh0ICE9ICZ2ZS0+Y29udGV4dCk7CisKKwkJaWYgKHJxX3ByaW8ocnEpID49IHF1ZXVlX3By aW8oZXhlY2xpc3RzKSkgeworCQkJaWYgKCF2aXJ0dWFsX21hdGNoZXModmUsIHJxLCBlbmdpbmUp KSB7CisJCQkJc3Bpbl91bmxvY2soJnZlLT5iYXNlLnRpbWVsaW5lLmxvY2spOworCQkJCXJiID0g cmJfbmV4dChyYik7CisJCQkJY29udGludWU7CisJCQl9CisKKwkJCWlmIChsYXN0ICYmICFjYW5f bWVyZ2VfcnEobGFzdCwgcnEpKSB7CisJCQkJc3Bpbl91bmxvY2soJnZlLT5iYXNlLnRpbWVsaW5l LmxvY2spOworCQkJCXJldHVybjsgLyogbGVhdmUgdGhpcyBycSBmb3IgYW5vdGhlciBlbmdpbmUg Ki8KKwkJCX0KKworCQkJR0VNX1RSQUNFKCIlczogdmlydHVhbCBycT0lbGx4OiVsbGQlcywgbmV3 IGVuZ2luZT8gJXNcbiIsCisJCQkJICBlbmdpbmUtPm5hbWUsCisJCQkJICBycS0+ZmVuY2UuY29u dGV4dCwKKwkJCQkgIHJxLT5mZW5jZS5zZXFubywKKwkJCQkgIGk5MTVfcmVxdWVzdF9jb21wbGV0 ZWQocnEpID8gIiEiIDoKKwkJCQkgIGk5MTVfcmVxdWVzdF9zdGFydGVkKHJxKSA/ICIqIiA6CisJ CQkJICAiIiwKKwkJCQkgIHllc25vKGVuZ2luZSAhPSB2ZS0+c2libGluZ3NbMF0pKTsKKworCQkJ dmUtPnJlcXVlc3QgPSBOVUxMOworCQkJdmUtPmJhc2UuZXhlY2xpc3RzLnF1ZXVlX3ByaW9yaXR5 X2hpbnQgPSBJTlRfTUlOOworCQkJcmJfZXJhc2VfY2FjaGVkKHJiLCAmZXhlY2xpc3RzLT52aXJ0 dWFsKTsKKwkJCVJCX0NMRUFSX05PREUocmIpOworCisJCQlycS0+ZW5naW5lID0gZW5naW5lOwor CisJCQlpZiAoZW5naW5lICE9IHZlLT5zaWJsaW5nc1swXSkgeworCQkJCXUzMiAqcmVncyA9IHZl LT5jb250ZXh0LmxyY19yZWdfc3RhdGU7CisJCQkJdW5zaWduZWQgaW50IG47CisKKwkJCQlHRU1f QlVHX09OKFJFQURfT05DRSh2ZS0+Y29udGV4dC5hY3RpdmUpKTsKKwkJCQl2aXJ0dWFsX3VwZGF0 ZV9yZWdpc3Rlcl9vZmZzZXRzKHJlZ3MsIGVuZ2luZSk7CisKKwkJCQkvKgorCQkJCSAqIE1vdmUg dGhlIGJvdW5kIGVuZ2luZSB0byB0aGUgdG9wIG9mIHRoZSBsaXN0CisJCQkJICogZm9yIGZ1dHVy ZSBleGVjdXRpb24uIFdlIHRoZW4ga2ljayB0aGlzCisJCQkJICogdGFza2xldCBmaXJzdCBiZWZv cmUgY2hlY2tpbmcgb3RoZXJzLCBzbyB0aGF0CisJCQkJICogd2UgcHJlZmVyZW50aWFsbHkgcmV1 c2UgdGhpcyBzZXQgb2YgYm91bmQKKwkJCQkgKiByZWdpc3RlcnMuCisJCQkJICovCisJCQkJZm9y IChuID0gMTsgbiA8IHZlLT5udW1fc2libGluZ3M7IG4rKykgeworCQkJCQlpZiAodmUtPnNpYmxp bmdzW25dID09IGVuZ2luZSkgeworCQkJCQkJc3dhcCh2ZS0+c2libGluZ3Nbbl0sCisJCQkJCQkg ICAgIHZlLT5zaWJsaW5nc1swXSk7CisJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCX0KKworCQkJ CUdFTV9CVUdfT04odmUtPnNpYmxpbmdzWzBdICE9IGVuZ2luZSk7CisJCQl9CisKKwkJCV9faTkx NV9yZXF1ZXN0X3N1Ym1pdChycSk7CisJCQl0cmFjZV9pOTE1X3JlcXVlc3RfaW4ocnEsIHBvcnRf aW5kZXgocG9ydCwgZXhlY2xpc3RzKSk7CisJCQlzdWJtaXQgPSB0cnVlOworCQkJbGFzdCA9IHJx OworCQl9CisKKwkJc3Bpbl91bmxvY2soJnZlLT5iYXNlLnRpbWVsaW5lLmxvY2spOworCQlicmVh azsKKwl9CisKIAl3aGlsZSAoKHJiID0gcmJfZmlyc3RfY2FjaGVkKCZleGVjbGlzdHMtPnF1ZXVl KSkpIHsKIAkJc3RydWN0IGk5MTVfcHJpb2xpc3QgKnAgPSB0b19wcmlvbGlzdChyYik7CiAJCXN0 cnVjdCBpOTE1X3JlcXVlc3QgKnJxLCAqcm47CkBAIC0yMDQzLDYgKzIyODMsMjYgQEAgc3RhdGlj IHZvaWQgZXhlY2xpc3RzX2NhbmNlbF9yZXF1ZXN0cyhzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpl bmdpbmUpCiAJCWk5MTVfcHJpb2xpc3RfZnJlZShwKTsKIAl9CiAKKwkvKiBDYW5jZWwgYWxsIGF0 dGFjaGVkIHZpcnR1YWwgZW5naW5lcyAqLworCXdoaWxlICgocmIgPSByYl9maXJzdF9jYWNoZWQo JmV4ZWNsaXN0cy0+dmlydHVhbCkpKSB7CisJCXN0cnVjdCB2aXJ0dWFsX2VuZ2luZSAqdmUgPQor CQkJcmJfZW50cnkocmIsIHR5cGVvZigqdmUpLCBub2Rlc1tlbmdpbmUtPmlkXS5yYik7CisKKwkJ cmJfZXJhc2VfY2FjaGVkKHJiLCAmZXhlY2xpc3RzLT52aXJ0dWFsKTsKKwkJUkJfQ0xFQVJfTk9E RShyYik7CisKKwkJc3Bpbl9sb2NrKCZ2ZS0+YmFzZS50aW1lbGluZS5sb2NrKTsKKwkJaWYgKHZl LT5yZXF1ZXN0KSB7CisJCQl2ZS0+cmVxdWVzdC0+ZW5naW5lID0gZW5naW5lOworCQkJX19pOTE1 X3JlcXVlc3Rfc3VibWl0KHZlLT5yZXF1ZXN0KTsKKwkJCWRtYV9mZW5jZV9zZXRfZXJyb3IoJnZl LT5yZXF1ZXN0LT5mZW5jZSwgLUVJTyk7CisJCQlpOTE1X3JlcXVlc3RfbWFya19jb21wbGV0ZSh2 ZS0+cmVxdWVzdCk7CisJCQl2ZS0+YmFzZS5leGVjbGlzdHMucXVldWVfcHJpb3JpdHlfaGludCA9 IElOVF9NSU47CisJCQl2ZS0+cmVxdWVzdCA9IE5VTEw7CisJCX0KKwkJc3Bpbl91bmxvY2soJnZl LT5iYXNlLnRpbWVsaW5lLmxvY2spOworCX0KKwogCS8qIFJlbWFpbmluZyBfdW5yZWFkeV8gcmVx dWVzdHMgd2lsbCBiZSBub3AnZWQgd2hlbiBzdWJtaXR0ZWQgKi8KIAogCWV4ZWNsaXN0cy0+cXVl dWVfcHJpb3JpdHlfaGludCA9IElOVF9NSU47CkBAIC0yNzc5LDYgKzMwMzksMzE2IEBAIHN0YXRp YyBpbnQgZXhlY2xpc3RzX2NvbnRleHRfZGVmZXJyZWRfYWxsb2Moc3RydWN0IGludGVsX2NvbnRl eHQgKmNlLAogCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyB2b2lkIHZpcnR1YWxfY29udGV4dF9k ZXN0cm95KHN0cnVjdCBrcmVmICprcmVmKQoreworCXN0cnVjdCB2aXJ0dWFsX2VuZ2luZSAqdmUg PQorCQljb250YWluZXJfb2Yoa3JlZiwgdHlwZW9mKCp2ZSksIGNvbnRleHQucmVmKTsKKwl1bnNp Z25lZCBpbnQgbjsKKworCUdFTV9CVUdfT04odmUtPnJlcXVlc3QpOworCUdFTV9CVUdfT04odmUt PmNvbnRleHQuYWN0aXZlKTsKKworCWZvciAobiA9IDA7IG4gPCB2ZS0+bnVtX3NpYmxpbmdzOyBu KyspIHsKKwkJc3RydWN0IGludGVsX2VuZ2luZV9jcyAqc2libGluZyA9IHZlLT5zaWJsaW5nc1tu XTsKKwkJc3RydWN0IHJiX25vZGUgKm5vZGUgPSAmdmUtPm5vZGVzW3NpYmxpbmctPmlkXS5yYjsK KworCQlpZiAoUkJfRU1QVFlfTk9ERShub2RlKSkKKwkJCWNvbnRpbnVlOworCisJCXNwaW5fbG9j a19pcnEoJnNpYmxpbmctPnRpbWVsaW5lLmxvY2spOworCisJCWlmICghUkJfRU1QVFlfTk9ERShu b2RlKSkKKwkJCXJiX2VyYXNlX2NhY2hlZChub2RlLCAmc2libGluZy0+ZXhlY2xpc3RzLnZpcnR1 YWwpOworCisJCXNwaW5fdW5sb2NrX2lycSgmc2libGluZy0+dGltZWxpbmUubG9jayk7CisJfQor CUdFTV9CVUdfT04oX190YXNrbGV0X2lzX3NjaGVkdWxlZCgmdmUtPmJhc2UuZXhlY2xpc3RzLnRh c2tsZXQpKTsKKworCWlmICh2ZS0+Y29udGV4dC5zdGF0ZSkKKwkJX19leGVjbGlzdHNfY29udGV4 dF9maW5pKCZ2ZS0+Y29udGV4dCk7CisKKwlpOTE1X3RpbWVsaW5lX2ZpbmkoJnZlLT5iYXNlLnRp bWVsaW5lKTsKKwlrZnJlZSh2ZSk7Cit9CisKK3N0YXRpYyB2b2lkIHZpcnR1YWxfZW5naW5lX2lu aXRpYWxfaGludChzdHJ1Y3QgdmlydHVhbF9lbmdpbmUgKnZlKQoreworCWludCBzd3A7CisKKwkv KgorCSAqIFBpY2sgYSByYW5kb20gc2libGluZyBvbiBzdGFydGluZyB0byBoZWxwIHNwcmVhZCB0 aGUgbG9hZCBhcm91bmQuCisJICoKKwkgKiBOZXcgY29udGV4dHMgYXJlIHR5cGljYWxseSBjcmVh dGVkIHdpdGggZXhhY3RseSB0aGUgc2FtZSBvcmRlcgorCSAqIG9mIHNpYmxpbmdzLCBhbmQgb2Z0 ZW4gc3RhcnRlZCBpbiBiYXRjaGVzLiBEdWUgdG8gdGhlIHdheSB3ZSBpdGVyYXRlCisJICogdGhl IGFycmF5IG9mIHNpYmxpbmcgd2hlbiBzdWJtaXR0aW5nIHJlcXVlc3RzLCBzaWJsaW5nWzBdIGlz CisJICogcHJpb3JpdGlzZWQgZm9yIGRlcXVldWluZy4gSWYgd2UgbWFrZSBzdXJlIHRoYXQgc2li bGluZ1swXSBpcyBmYWlybHkKKwkgKiByYW5kb21pc2VkIGFjcm9zcyB0aGUgc3lzdGVtLCB3ZSBh bHNvIGhlbHAgc3ByZWFkIHRoZSBsb2FkIGJ5IHRoZQorCSAqIGZpcnN0IGVuZ2luZSB3ZSBpbnNw ZWN0IGJlaW5nIGRpZmZlcmVudCBlYWNoIHRpbWUuCisJICoKKwkgKiBOQiBUaGlzIGRvZXMgbm90 IGZvcmNlIHVzIHRvIGV4ZWN1dGUgb24gdGhpcyBlbmdpbmUsIGl0IHdpbGwganVzdAorCSAqIHR5 cGljYWxseSBiZSB0aGUgZmlyc3Qgd2UgaW5zcGVjdCBmb3Igc3VibWlzc2lvbi4KKwkgKi8KKwlz d3AgPSBwcmFuZG9tX3UzMl9tYXgodmUtPm51bV9zaWJsaW5ncyk7CisJaWYgKCFzd3ApCisJCXJl dHVybjsKKworCXN3YXAodmUtPnNpYmxpbmdzW3N3cF0sIHZlLT5zaWJsaW5nc1swXSk7CisJdmly dHVhbF91cGRhdGVfcmVnaXN0ZXJfb2Zmc2V0cyh2ZS0+Y29udGV4dC5scmNfcmVnX3N0YXRlLAor CQkJCQl2ZS0+c2libGluZ3NbMF0pOworfQorCitzdGF0aWMgaW50IHZpcnR1YWxfY29udGV4dF9w aW4oc3RydWN0IGludGVsX2NvbnRleHQgKmNlKQoreworCXN0cnVjdCB2aXJ0dWFsX2VuZ2luZSAq dmUgPSBjb250YWluZXJfb2YoY2UsIHR5cGVvZigqdmUpLCBjb250ZXh0KTsKKwlpbnQgZXJyOwor CisJLyogTm90ZTogd2UgbXVzdCB1c2UgYSByZWFsIGVuZ2luZSBjbGFzcyBmb3Igc2V0dGluZyB1 cCByZWcgc3RhdGUgKi8KKwllcnIgPSBfX2V4ZWNsaXN0c19jb250ZXh0X3BpbihjZSwgdmUtPnNp YmxpbmdzWzBdKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJdmlydHVhbF9lbmdpbmVf aW5pdGlhbF9oaW50KHZlKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgdmlydHVhbF9j b250ZXh0X2VudGVyKHN0cnVjdCBpbnRlbF9jb250ZXh0ICpjZSkKK3sKKwlzdHJ1Y3QgdmlydHVh bF9lbmdpbmUgKnZlID0gY29udGFpbmVyX29mKGNlLCB0eXBlb2YoKnZlKSwgY29udGV4dCk7CisJ dW5zaWduZWQgaW50IG47CisKKwlmb3IgKG4gPSAwOyBuIDwgdmUtPm51bV9zaWJsaW5nczsgbisr KQorCQlpbnRlbF9lbmdpbmVfcG1fZ2V0KHZlLT5zaWJsaW5nc1tuXSk7Cit9CisKK3N0YXRpYyB2 b2lkIHZpcnR1YWxfY29udGV4dF9leGl0KHN0cnVjdCBpbnRlbF9jb250ZXh0ICpjZSkKK3sKKwlz dHJ1Y3QgdmlydHVhbF9lbmdpbmUgKnZlID0gY29udGFpbmVyX29mKGNlLCB0eXBlb2YoKnZlKSwg Y29udGV4dCk7CisJdW5zaWduZWQgaW50IG47CisKKwlmb3IgKG4gPSAwOyBuIDwgdmUtPm51bV9z aWJsaW5nczsgbisrKQorCQlpbnRlbF9lbmdpbmVfcG1fcHV0KHZlLT5zaWJsaW5nc1tuXSk7Cit9 CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaW50ZWxfY29udGV4dF9vcHMgdmlydHVhbF9jb250ZXh0 X29wcyA9IHsKKwkucGluID0gdmlydHVhbF9jb250ZXh0X3BpbiwKKwkudW5waW4gPSBleGVjbGlz dHNfY29udGV4dF91bnBpbiwKKworCS5lbnRlciA9IHZpcnR1YWxfY29udGV4dF9lbnRlciwKKwku ZXhpdCA9IHZpcnR1YWxfY29udGV4dF9leGl0LAorCisJLmRlc3Ryb3kgPSB2aXJ0dWFsX2NvbnRl eHRfZGVzdHJveSwKK307CisKK3N0YXRpYyB2b2lkIHZpcnR1YWxfc3VibWlzc2lvbl90YXNrbGV0 KHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwlzdHJ1Y3QgdmlydHVhbF9lbmdpbmUgKiBjb25zdCB2 ZSA9IChzdHJ1Y3QgdmlydHVhbF9lbmdpbmUgKilkYXRhOworCWNvbnN0IGludCBwcmlvID0gdmUt PmJhc2UuZXhlY2xpc3RzLnF1ZXVlX3ByaW9yaXR5X2hpbnQ7CisJdW5zaWduZWQgaW50IG47CisK Kwlsb2NhbF9pcnFfZGlzYWJsZSgpOworCWZvciAobiA9IDA7IFJFQURfT05DRSh2ZS0+cmVxdWVz dCkgJiYgbiA8IHZlLT5udW1fc2libGluZ3M7IG4rKykgeworCQlzdHJ1Y3QgaW50ZWxfZW5naW5l X2NzICpzaWJsaW5nID0gdmUtPnNpYmxpbmdzW25dOworCQlzdHJ1Y3QgdmVfbm9kZSAqIGNvbnN0 IG5vZGUgPSAmdmUtPm5vZGVzW3NpYmxpbmctPmlkXTsKKwkJc3RydWN0IHJiX25vZGUgKipwYXJl bnQsICpyYjsKKwkJYm9vbCBmaXJzdDsKKworCQlzcGluX2xvY2soJnNpYmxpbmctPnRpbWVsaW5l LmxvY2spOworCisJCWlmICghUkJfRU1QVFlfTk9ERSgmbm9kZS0+cmIpKSB7CisJCQkvKgorCQkJ ICogQ2hlYXQgYW5kIGF2b2lkIHJlYmFsYW5jaW5nIHRoZSB0cmVlIGlmIHdlIGNhbgorCQkJICog cmV1c2UgdGhpcyBub2RlIGluIHNpdHUuCisJCQkgKi8KKwkJCWZpcnN0ID0gcmJfZmlyc3RfY2Fj aGVkKCZzaWJsaW5nLT5leGVjbGlzdHMudmlydHVhbCkgPT0KKwkJCQkmbm9kZS0+cmI7CisJCQlp ZiAocHJpbyA9PSBub2RlLT5wcmlvIHx8IChwcmlvID4gbm9kZS0+cHJpbyAmJiBmaXJzdCkpCisJ CQkJZ290byBzdWJtaXRfZW5naW5lOworCisJCQlyYl9lcmFzZV9jYWNoZWQoJm5vZGUtPnJiLCAm c2libGluZy0+ZXhlY2xpc3RzLnZpcnR1YWwpOworCQl9CisKKwkJcmIgPSBOVUxMOworCQlmaXJz dCA9IHRydWU7CisJCXBhcmVudCA9ICZzaWJsaW5nLT5leGVjbGlzdHMudmlydHVhbC5yYl9yb290 LnJiX25vZGU7CisJCXdoaWxlICgqcGFyZW50KSB7CisJCQlzdHJ1Y3QgdmVfbm9kZSAqb3RoZXI7 CisKKwkJCXJiID0gKnBhcmVudDsKKwkJCW90aGVyID0gcmJfZW50cnkocmIsIHR5cGVvZigqb3Ro ZXIpLCByYik7CisJCQlpZiAocHJpbyA+IG90aGVyLT5wcmlvKSB7CisJCQkJcGFyZW50ID0gJnJi LT5yYl9sZWZ0OworCQkJfSBlbHNlIHsKKwkJCQlwYXJlbnQgPSAmcmItPnJiX3JpZ2h0OworCQkJ CWZpcnN0ID0gZmFsc2U7CisJCQl9CisJCX0KKworCQlyYl9saW5rX25vZGUoJm5vZGUtPnJiLCBy YiwgcGFyZW50KTsKKwkJcmJfaW5zZXJ0X2NvbG9yX2NhY2hlZCgmbm9kZS0+cmIsCisJCQkJICAg ICAgICZzaWJsaW5nLT5leGVjbGlzdHMudmlydHVhbCwKKwkJCQkgICAgICAgZmlyc3QpOworCitz dWJtaXRfZW5naW5lOgorCQlHRU1fQlVHX09OKFJCX0VNUFRZX05PREUoJm5vZGUtPnJiKSk7CisJ CW5vZGUtPnByaW8gPSBwcmlvOworCQlpZiAoZmlyc3QgJiYgcHJpbyA+IHNpYmxpbmctPmV4ZWNs aXN0cy5xdWV1ZV9wcmlvcml0eV9oaW50KSB7CisJCQlzaWJsaW5nLT5leGVjbGlzdHMucXVldWVf cHJpb3JpdHlfaGludCA9IHByaW87CisJCQl0YXNrbGV0X2hpX3NjaGVkdWxlKCZzaWJsaW5nLT5l eGVjbGlzdHMudGFza2xldCk7CisJCX0KKworCQlzcGluX3VubG9jaygmc2libGluZy0+dGltZWxp bmUubG9jayk7CisJfQorCWxvY2FsX2lycV9lbmFibGUoKTsKK30KKworc3RhdGljIHZvaWQgdmly dHVhbF9zdWJtaXRfcmVxdWVzdChzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycSkKK3sKKwlzdHJ1Y3Qg dmlydHVhbF9lbmdpbmUgKnZlID0gdG9fdmlydHVhbF9lbmdpbmUocnEtPmVuZ2luZSk7CisKKwlH RU1fVFJBQ0UoIiVzOiBycT0lbGx4OiVsbGRcbiIsCisJCSAgdmUtPmJhc2UubmFtZSwKKwkJICBy cS0+ZmVuY2UuY29udGV4dCwKKwkJICBycS0+ZmVuY2Uuc2Vxbm8pOworCisJR0VNX0JVR19PTih2 ZS0+YmFzZS5zdWJtaXRfcmVxdWVzdCAhPSB2aXJ0dWFsX3N1Ym1pdF9yZXF1ZXN0KTsKKworCUdF TV9CVUdfT04odmUtPnJlcXVlc3QpOworCXZlLT5iYXNlLmV4ZWNsaXN0cy5xdWV1ZV9wcmlvcml0 eV9oaW50ID0gcnFfcHJpbyhycSk7CisJV1JJVEVfT05DRSh2ZS0+cmVxdWVzdCwgcnEpOworCisJ dGFza2xldF9zY2hlZHVsZSgmdmUtPmJhc2UuZXhlY2xpc3RzLnRhc2tsZXQpOworfQorCitzdHJ1 Y3QgaW50ZWxfY29udGV4dCAqCitpbnRlbF9leGVjbGlzdHNfY3JlYXRlX3ZpcnR1YWwoc3RydWN0 IGk5MTVfZ2VtX2NvbnRleHQgKmN0eCwKKwkJCSAgICAgICBzdHJ1Y3QgaW50ZWxfZW5naW5lX2Nz ICoqc2libGluZ3MsCisJCQkgICAgICAgdW5zaWduZWQgaW50IGNvdW50KQoreworCXN0cnVjdCB2 aXJ0dWFsX2VuZ2luZSAqdmU7CisJdW5zaWduZWQgaW50IG47CisJaW50IGVycjsKKworCWlmIChj b3VudCA9PSAwKQorCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKKworCWlmIChjb3VudCA9PSAx KQorCQlyZXR1cm4gaW50ZWxfY29udGV4dF9jcmVhdGUoY3R4LCBzaWJsaW5nc1swXSk7CisKKwl2 ZSA9IGt6YWxsb2Moc3RydWN0X3NpemUodmUsIHNpYmxpbmdzLCBjb3VudCksIEdGUF9LRVJORUwp OworCWlmICghdmUpCisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCisJdmUtPmJhc2UuaTkx NSA9IGN0eC0+aTkxNTsKKwl2ZS0+YmFzZS5pZCA9IC0xOworCXZlLT5iYXNlLmNsYXNzID0gT1RI RVJfQ0xBU1M7CisJdmUtPmJhc2UudWFiaV9jbGFzcyA9IEk5MTVfRU5HSU5FX0NMQVNTX0lOVkFM SUQ7CisJdmUtPmJhc2UuaW5zdGFuY2UgPSBJOTE1X0VOR0lORV9DTEFTU19JTlZBTElEX1ZJUlRV QUw7CisJdmUtPmJhc2UuZmxhZ3MgPSBJOTE1X0VOR0lORV9JU19WSVJUVUFMOworCisJc25wcmlu dGYodmUtPmJhc2UubmFtZSwgc2l6ZW9mKHZlLT5iYXNlLm5hbWUpLCAidmlydHVhbCIpOworCisJ ZXJyID0gaTkxNV90aW1lbGluZV9pbml0KGN0eC0+aTkxNSwgJnZlLT5iYXNlLnRpbWVsaW5lLCBO VUxMKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl9wdXQ7CisJaTkxNV90aW1lbGluZV9zZXRfc3Vi Y2xhc3MoJnZlLT5iYXNlLnRpbWVsaW5lLCBUSU1FTElORV9WSVJUVUFMKTsKKworCXZlLT5iYXNl LmNvcHMgPSAmdmlydHVhbF9jb250ZXh0X29wczsKKwl2ZS0+YmFzZS5yZXF1ZXN0X2FsbG9jID0g ZXhlY2xpc3RzX3JlcXVlc3RfYWxsb2M7CisKKwl2ZS0+YmFzZS5zY2hlZHVsZSA9IGk5MTVfc2No ZWR1bGU7CisJdmUtPmJhc2Uuc3VibWl0X3JlcXVlc3QgPSB2aXJ0dWFsX3N1Ym1pdF9yZXF1ZXN0 OworCisJdmUtPmJhc2UuZXhlY2xpc3RzLnF1ZXVlX3ByaW9yaXR5X2hpbnQgPSBJTlRfTUlOOwor CXRhc2tsZXRfaW5pdCgmdmUtPmJhc2UuZXhlY2xpc3RzLnRhc2tsZXQsCisJCSAgICAgdmlydHVh bF9zdWJtaXNzaW9uX3Rhc2tsZXQsCisJCSAgICAgKHVuc2lnbmVkIGxvbmcpdmUpOworCisJaW50 ZWxfY29udGV4dF9pbml0KCZ2ZS0+Y29udGV4dCwgY3R4LCAmdmUtPmJhc2UpOworCisJZm9yIChu ID0gMDsgbiA8IGNvdW50OyBuKyspIHsKKwkJc3RydWN0IGludGVsX2VuZ2luZV9jcyAqc2libGlu ZyA9IHNpYmxpbmdzW25dOworCisJCUdFTV9CVUdfT04oIWlzX3Bvd2VyX29mXzIoc2libGluZy0+ bWFzaykpOworCQlpZiAoc2libGluZy0+bWFzayAmIHZlLT5iYXNlLm1hc2spIHsKKwkJCURSTV9E RUJVRygiZHVwbGljYXRlICVzIGVudHJ5IGluIGxvYWQgYmFsYW5jZXJcbiIsCisJCQkJICBzaWJs aW5nLT5uYW1lKTsKKwkJCWVyciA9IC1FSU5WQUw7CisJCQlnb3RvIGVycl9wdXQ7CisJCX0KKwor CQkvKgorCQkgKiBUaGUgdmlydHVhbCBlbmdpbmUgaW1wbGVtZW50YXRpb24gaXMgdGlnaHRseSBj b3VwbGVkIHRvCisJCSAqIHRoZSBleGVjbGlzdHMgYmFja2VuZCAtLSB3ZSBwdXNoIG91dCByZXF1 ZXN0IGRpcmVjdGx5CisJCSAqIGludG8gYSB0cmVlIGluc2lkZSBlYWNoIHBoeXNpY2FsIGVuZ2lu ZS4gV2UgY291bGQgc3VwcG9ydAorCQkgKiBsYXllcmluZyBpZiB3ZSBoYW5kbGUgY2xvbmluZyBv ZiB0aGUgcmVxdWVzdHMgYW5kCisJCSAqIHN1Ym1pdHRpbmcgYSBjb3B5IGludG8gZWFjaCBiYWNr ZW5kLgorCQkgKi8KKwkJaWYgKHNpYmxpbmctPmV4ZWNsaXN0cy50YXNrbGV0LmZ1bmMgIT0KKwkJ ICAgIGV4ZWNsaXN0c19zdWJtaXNzaW9uX3Rhc2tsZXQpIHsKKwkJCWVyciA9IC1FTk9ERVY7CisJ CQlnb3RvIGVycl9wdXQ7CisJCX0KKworCQlHRU1fQlVHX09OKFJCX0VNUFRZX05PREUoJnZlLT5u b2Rlc1tzaWJsaW5nLT5pZF0ucmIpKTsKKwkJUkJfQ0xFQVJfTk9ERSgmdmUtPm5vZGVzW3NpYmxp bmctPmlkXS5yYik7CisKKwkJdmUtPnNpYmxpbmdzW3ZlLT5udW1fc2libGluZ3MrK10gPSBzaWJs aW5nOworCQl2ZS0+YmFzZS5tYXNrIHw9IHNpYmxpbmctPm1hc2s7CisKKwkJLyoKKwkJICogQWxs IHBoeXNpY2FsIGVuZ2luZXMgbXVzdCBiZSBjb21wYXRpYmxlIGZvciB0aGVpciBlbWlzc2lvbgor CQkgKiBmdW5jdGlvbnMgKGFzIHdlIGJ1aWxkIHRoZSBpbnN0cnVjdGlvbnMgZHVyaW5nIHJlcXVl c3QKKwkJICogY29uc3RydWN0aW9uIGFuZCBkbyBub3QgYWx0ZXIgdGhlbSBiZWZvcmUgc3VibWlz c2lvbgorCQkgKiBvbiB0aGUgcGh5c2ljYWwgZW5naW5lKS4gV2UgdXNlIHRoZSBlbmdpbmUgY2xh c3MgYXMgYSBndWlkZQorCQkgKiBoZXJlLCBhbHRob3VnaCB0aGF0IGNvdWxkIGJlIHJlZmluZWQu CisJCSAqLworCQlpZiAodmUtPmJhc2UuY2xhc3MgIT0gT1RIRVJfQ0xBU1MpIHsKKwkJCWlmICh2 ZS0+YmFzZS5jbGFzcyAhPSBzaWJsaW5nLT5jbGFzcykgeworCQkJCURSTV9ERUJVRygiaW52YWxp ZCBtaXhpbmcgb2YgZW5naW5lIGNsYXNzLCBzaWJsaW5nICVkLCBhbHJlYWR5ICVkXG4iLAorCQkJ CQkgIHNpYmxpbmctPmNsYXNzLCB2ZS0+YmFzZS5jbGFzcyk7CisJCQkJZXJyID0gLUVJTlZBTDsK KwkJCQlnb3RvIGVycl9wdXQ7CisJCQl9CisJCQljb250aW51ZTsKKwkJfQorCisJCXZlLT5iYXNl LmNsYXNzID0gc2libGluZy0+Y2xhc3M7CisJCXZlLT5iYXNlLnVhYmlfY2xhc3MgPSBzaWJsaW5n LT51YWJpX2NsYXNzOworCQlzbnByaW50Zih2ZS0+YmFzZS5uYW1lLCBzaXplb2YodmUtPmJhc2Uu bmFtZSksCisJCQkgInYlZHglZCIsIHZlLT5iYXNlLmNsYXNzLCBjb3VudCk7CisJCXZlLT5iYXNl LmNvbnRleHRfc2l6ZSA9IHNpYmxpbmctPmNvbnRleHRfc2l6ZTsKKworCQl2ZS0+YmFzZS5lbWl0 X2JiX3N0YXJ0ID0gc2libGluZy0+ZW1pdF9iYl9zdGFydDsKKwkJdmUtPmJhc2UuZW1pdF9mbHVz aCA9IHNpYmxpbmctPmVtaXRfZmx1c2g7CisJCXZlLT5iYXNlLmVtaXRfaW5pdF9icmVhZGNydW1i ID0gc2libGluZy0+ZW1pdF9pbml0X2JyZWFkY3J1bWI7CisJCXZlLT5iYXNlLmVtaXRfZmluaV9i cmVhZGNydW1iID0gc2libGluZy0+ZW1pdF9maW5pX2JyZWFkY3J1bWI7CisJCXZlLT5iYXNlLmVt aXRfZmluaV9icmVhZGNydW1iX2R3ID0KKwkJCXNpYmxpbmctPmVtaXRfZmluaV9icmVhZGNydW1i X2R3OworCX0KKworCXJldHVybiAmdmUtPmNvbnRleHQ7CisKK2Vycl9wdXQ6CisJaW50ZWxfY29u dGV4dF9wdXQoJnZlLT5jb250ZXh0KTsKKwlyZXR1cm4gRVJSX1BUUihlcnIpOworfQorCitzdHJ1 Y3QgaW50ZWxfY29udGV4dCAqCitpbnRlbF9leGVjbGlzdHNfY2xvbmVfdmlydHVhbChzdHJ1Y3Qg aTkxNV9nZW1fY29udGV4dCAqY3R4LAorCQkJICAgICAgc3RydWN0IGludGVsX2VuZ2luZV9jcyAq c3JjKQoreworCXN0cnVjdCB2aXJ0dWFsX2VuZ2luZSAqc2UgPSB0b192aXJ0dWFsX2VuZ2luZShz cmMpOworCXN0cnVjdCBpbnRlbF9jb250ZXh0ICpkc3Q7CisKKwlkc3QgPSBpbnRlbF9leGVjbGlz dHNfY3JlYXRlX3ZpcnR1YWwoY3R4LAorCQkJCQkgICAgIHNlLT5zaWJsaW5ncywKKwkJCQkJICAg ICBzZS0+bnVtX3NpYmxpbmdzKTsKKwlpZiAoSVNfRVJSKGRzdCkpCisJCXJldHVybiBkc3Q7CisK KwlyZXR1cm4gZHN0OworfQorCiB2b2lkIGludGVsX2V4ZWNsaXN0c19zaG93X3JlcXVlc3RzKHN0 cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSwKIAkJCQkgICBzdHJ1Y3QgZHJtX3ByaW50ZXIg Km0sCiAJCQkJICAgdm9pZCAoKnNob3dfcmVxdWVzdCkoc3RydWN0IGRybV9wcmludGVyICptLApA QCAtMjgzNiw2ICszNDA2LDI5IEBAIHZvaWQgaW50ZWxfZXhlY2xpc3RzX3Nob3dfcmVxdWVzdHMo c3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLAogCQlzaG93X3JlcXVlc3QobSwgbGFzdCwg Ilx0XHRRICIpOwogCX0KIAorCWxhc3QgPSBOVUxMOworCWNvdW50ID0gMDsKKwlmb3IgKHJiID0g cmJfZmlyc3RfY2FjaGVkKCZleGVjbGlzdHMtPnZpcnR1YWwpOyByYjsgcmIgPSByYl9uZXh0KHJi KSkgeworCQlzdHJ1Y3QgdmlydHVhbF9lbmdpbmUgKnZlID0KKwkJCXJiX2VudHJ5KHJiLCB0eXBl b2YoKnZlKSwgbm9kZXNbZW5naW5lLT5pZF0ucmIpOworCQlzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpy cSA9IFJFQURfT05DRSh2ZS0+cmVxdWVzdCk7CisKKwkJaWYgKHJxKSB7CisJCQlpZiAoY291bnQr KyA8IG1heCAtIDEpCisJCQkJc2hvd19yZXF1ZXN0KG0sIHJxLCAiXHRcdFYgIik7CisJCQllbHNl CisJCQkJbGFzdCA9IHJxOworCQl9CisJfQorCWlmIChsYXN0KSB7CisJCWlmIChjb3VudCA+IG1h eCkgeworCQkJZHJtX3ByaW50ZihtLAorCQkJCSAgICJcdFx0Li4uc2tpcHBpbmcgJWQgdmlydHVh bCByZXF1ZXN0cy4uLlxuIiwKKwkJCQkgICBjb3VudCAtIG1heCk7CisJCX0KKwkJc2hvd19yZXF1 ZXN0KG0sIGxhc3QsICJcdFx0ViAiKTsKKwl9CisKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZl bmdpbmUtPnRpbWVsaW5lLmxvY2ssIGZsYWdzKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL2k5MTUvZ3QvaW50ZWxfbHJjLmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRl bF9scmMuaAppbmRleCBhMGRjOTA3YTcyNDkuLjU1MzA2MDYwNTJlNSAxMDA2NDQKLS0tIGEvZHJp dmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfbHJjLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5 MTUvZ3QvaW50ZWxfbHJjLmgKQEAgLTExNCw0ICsxMTQsMTMgQEAgdm9pZCBpbnRlbF9leGVjbGlz dHNfc2hvd19yZXF1ZXN0cyhzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUsCiAJCQkJCQkJ Y29uc3QgY2hhciAqcHJlZml4KSwKIAkJCQkgICB1bnNpZ25lZCBpbnQgbWF4KTsKIAorc3RydWN0 IGludGVsX2NvbnRleHQgKgoraW50ZWxfZXhlY2xpc3RzX2NyZWF0ZV92aXJ0dWFsKHN0cnVjdCBp OTE1X2dlbV9jb250ZXh0ICpjdHgsCisJCQkgICAgICAgc3RydWN0IGludGVsX2VuZ2luZV9jcyAq KnNpYmxpbmdzLAorCQkJICAgICAgIHVuc2lnbmVkIGludCBjb3VudCk7CisKK3N0cnVjdCBpbnRl bF9jb250ZXh0ICoKK2ludGVsX2V4ZWNsaXN0c19jbG9uZV92aXJ0dWFsKHN0cnVjdCBpOTE1X2dl bV9jb250ZXh0ICpjdHgsCisJCQkgICAgICBzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpzcmMpOwor CiAjZW5kaWYgLyogX0lOVEVMX0xSQ19IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJt L2k5MTUvZ3Qvc2VsZnRlc3RfbHJjLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9zZWxmdGVz dF9scmMuYwppbmRleCA4NDUzOGY2OTE4NWIuLmYzNGFhOWUwNDJhMyAxMDA2NDQKLS0tIGEvZHJp dmVycy9ncHUvZHJtL2k5MTUvZ3Qvc2VsZnRlc3RfbHJjLmMKKysrIGIvZHJpdmVycy9ncHUvZHJt L2k5MTUvZ3Qvc2VsZnRlc3RfbHJjLmMKQEAgLTEzMDEsNiArMTMwMSwxODUgQEAgc3RhdGljIGlu dCBsaXZlX3ByZWVtcHRfc21va2Uodm9pZCAqYXJnKQogCXJldHVybiBlcnI7CiB9CiAKK3N0YXRp YyBpbnQgbm9wX3ZpcnR1YWxfZW5naW5lKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1LAor CQkJICAgICAgc3RydWN0IGludGVsX2VuZ2luZV9jcyAqKnNpYmxpbmdzLAorCQkJICAgICAgdW5z aWduZWQgaW50IG5zaWJsaW5nLAorCQkJICAgICAgdW5zaWduZWQgaW50IG5jdHgsCisJCQkgICAg ICB1bnNpZ25lZCBpbnQgZmxhZ3MpCisjZGVmaW5lIENIQUlOIEJJVCgwKQoreworCUlHVF9USU1F T1VUKGVuZF90aW1lKTsKKwlzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpyZXF1ZXN0WzE2XTsKKwlzdHJ1 Y3QgaTkxNV9nZW1fY29udGV4dCAqY3R4WzE2XTsKKwlzdHJ1Y3QgaW50ZWxfY29udGV4dCAqdmVb MTZdOworCXVuc2lnbmVkIGxvbmcgbiwgcHJpbWUsIG5jOworCXN0cnVjdCBpZ3RfbGl2ZV90ZXN0 IHQ7CisJa3RpbWVfdCB0aW1lc1syXSA9IHt9OworCWludCBlcnI7CisKKwlHRU1fQlVHX09OKCFu Y3R4IHx8IG5jdHggPiBBUlJBWV9TSVpFKGN0eCkpOworCisJZm9yIChuID0gMDsgbiA8IG5jdHg7 IG4rKykgeworCQljdHhbbl0gPSBrZXJuZWxfY29udGV4dChpOTE1KTsKKwkJaWYgKCFjdHhbbl0p IHsKKwkJCWVyciA9IC1FTk9NRU07CisJCQluY3R4ID0gbjsKKwkJCWdvdG8gb3V0OworCQl9CisK KwkJdmVbbl0gPSBpbnRlbF9leGVjbGlzdHNfY3JlYXRlX3ZpcnR1YWwoY3R4W25dLAorCQkJCQkJ ICAgICAgIHNpYmxpbmdzLCBuc2libGluZyk7CisJCWlmIChJU19FUlIodmVbbl0pKSB7CisJCQlr ZXJuZWxfY29udGV4dF9jbG9zZShjdHhbbl0pOworCQkJZXJyID0gUFRSX0VSUih2ZVtuXSk7CisJ CQluY3R4ID0gbjsKKwkJCWdvdG8gb3V0OworCQl9CisKKwkJZXJyID0gaW50ZWxfY29udGV4dF9w aW4odmVbbl0pOworCQlpZiAoZXJyKSB7CisJCQlpbnRlbF9jb250ZXh0X3B1dCh2ZVtuXSk7CisJ CQlrZXJuZWxfY29udGV4dF9jbG9zZShjdHhbbl0pOworCQkJbmN0eCA9IG47CisJCQlnb3RvIG91 dDsKKwkJfQorCX0KKworCWVyciA9IGlndF9saXZlX3Rlc3RfYmVnaW4oJnQsIGk5MTUsIF9fZnVu Y19fLCB2ZVswXS0+ZW5naW5lLT5uYW1lKTsKKwlpZiAoZXJyKQorCQlnb3RvIG91dDsKKworCWZv cl9lYWNoX3ByaW1lX251bWJlcl9mcm9tKHByaW1lLCAxLCA4MTkyKSB7CisJCXRpbWVzWzFdID0g a3RpbWVfZ2V0X3JhdygpOworCisJCWlmIChmbGFncyAmIENIQUlOKSB7CisJCQlmb3IgKG5jID0g MDsgbmMgPCBuY3R4OyBuYysrKSB7CisJCQkJZm9yIChuID0gMDsgbiA8IHByaW1lOyBuKyspIHsK KwkJCQkJcmVxdWVzdFtuY10gPQorCQkJCQkJaTkxNV9yZXF1ZXN0X2NyZWF0ZSh2ZVtuY10pOwor CQkJCQlpZiAoSVNfRVJSKHJlcXVlc3RbbmNdKSkgeworCQkJCQkJZXJyID0gUFRSX0VSUihyZXF1 ZXN0W25jXSk7CisJCQkJCQlnb3RvIG91dDsKKwkJCQkJfQorCisJCQkJCWk5MTVfcmVxdWVzdF9h ZGQocmVxdWVzdFtuY10pOworCQkJCX0KKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWZvciAobiA9IDA7 IG4gPCBwcmltZTsgbisrKSB7CisJCQkJZm9yIChuYyA9IDA7IG5jIDwgbmN0eDsgbmMrKykgewor CQkJCQlyZXF1ZXN0W25jXSA9CisJCQkJCQlpOTE1X3JlcXVlc3RfY3JlYXRlKHZlW25jXSk7CisJ CQkJCWlmIChJU19FUlIocmVxdWVzdFtuY10pKSB7CisJCQkJCQllcnIgPSBQVFJfRVJSKHJlcXVl c3RbbmNdKTsKKwkJCQkJCWdvdG8gb3V0OworCQkJCQl9CisKKwkJCQkJaTkxNV9yZXF1ZXN0X2Fk ZChyZXF1ZXN0W25jXSk7CisJCQkJfQorCQkJfQorCQl9CisKKwkJZm9yIChuYyA9IDA7IG5jIDwg bmN0eDsgbmMrKykgeworCQkJaWYgKGk5MTVfcmVxdWVzdF93YWl0KHJlcXVlc3RbbmNdLAorCQkJ CQkgICAgICBJOTE1X1dBSVRfTE9DS0VELAorCQkJCQkgICAgICBIWiAvIDEwKSA8IDApIHsKKwkJ CQlwcl9lcnIoIiVzKCVzKTogd2FpdCBmb3IgJWxseDolbGxkIHRpbWVkIG91dFxuIiwKKwkJCQkg ICAgICAgX19mdW5jX18sIHZlWzBdLT5lbmdpbmUtPm5hbWUsCisJCQkJICAgICAgIHJlcXVlc3Rb bmNdLT5mZW5jZS5jb250ZXh0LAorCQkJCSAgICAgICByZXF1ZXN0W25jXS0+ZmVuY2Uuc2Vxbm8p OworCisJCQkJR0VNX1RSQUNFKCIlcyglcykgZmFpbGVkIGF0IHJlcXVlc3QgJWxseDolbGxkXG4i LAorCQkJCQkgIF9fZnVuY19fLCB2ZVswXS0+ZW5naW5lLT5uYW1lLAorCQkJCQkgIHJlcXVlc3Rb bmNdLT5mZW5jZS5jb250ZXh0LAorCQkJCQkgIHJlcXVlc3RbbmNdLT5mZW5jZS5zZXFubyk7CisJ CQkJR0VNX1RSQUNFX0RVTVAoKTsKKwkJCQlpOTE1X2dlbV9zZXRfd2VkZ2VkKGk5MTUpOworCQkJ CWJyZWFrOworCQkJfQorCQl9CisKKwkJdGltZXNbMV0gPSBrdGltZV9zdWIoa3RpbWVfZ2V0X3Jh dygpLCB0aW1lc1sxXSk7CisJCWlmIChwcmltZSA9PSAxKQorCQkJdGltZXNbMF0gPSB0aW1lc1sx XTsKKworCQlpZiAoX19pZ3RfdGltZW91dChlbmRfdGltZSwgTlVMTCkpCisJCQlicmVhazsKKwl9 CisKKwllcnIgPSBpZ3RfbGl2ZV90ZXN0X2VuZCgmdCk7CisJaWYgKGVycikKKwkJZ290byBvdXQ7 CisKKwlwcl9pbmZvKCJSZXF1ZXN0eCVkIGxhdGVuY2llcyBvbiAlczogMSA9ICVsbHVucywgJWx1 ID0gJWxsdW5zXG4iLAorCQluY3R4LCB2ZVswXS0+ZW5naW5lLT5uYW1lLCBrdGltZV90b19ucyh0 aW1lc1swXSksCisJCXByaW1lLCBkaXY2NF91NjQoa3RpbWVfdG9fbnModGltZXNbMV0pLCBwcmlt ZSkpOworCitvdXQ6CisJaWYgKGlndF9mbHVzaF90ZXN0KGk5MTUsIEk5MTVfV0FJVF9MT0NLRUQp KQorCQllcnIgPSAtRUlPOworCisJZm9yIChuYyA9IDA7IG5jIDwgbmN0eDsgbmMrKykgeworCQlp bnRlbF9jb250ZXh0X3VucGluKHZlW25jXSk7CisJCWludGVsX2NvbnRleHRfcHV0KHZlW25jXSk7 CisJCWtlcm5lbF9jb250ZXh0X2Nsb3NlKGN0eFtuY10pOworCX0KKwlyZXR1cm4gZXJyOworfQor CitzdGF0aWMgaW50IGxpdmVfdmlydHVhbF9lbmdpbmUodm9pZCAqYXJnKQoreworCXN0cnVjdCBk cm1faTkxNV9wcml2YXRlICppOTE1ID0gYXJnOworCXN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKnNp YmxpbmdzW01BWF9FTkdJTkVfSU5TVEFOQ0UgKyAxXTsKKwlzdHJ1Y3QgaW50ZWxfZW5naW5lX2Nz ICplbmdpbmU7CisJZW51bSBpbnRlbF9lbmdpbmVfaWQgaWQ7CisJdW5zaWduZWQgaW50IGNsYXNz LCBpbnN0OworCWludCBlcnIgPSAtRU5PREVWOworCisJaWYgKFVTRVNfR1VDX1NVQk1JU1NJT04o aTkxNSkpCisJCXJldHVybiAwOworCisJbXV0ZXhfbG9jaygmaTkxNS0+ZHJtLnN0cnVjdF9tdXRl eCk7CisKKwlmb3JfZWFjaF9lbmdpbmUoZW5naW5lLCBpOTE1LCBpZCkgeworCQllcnIgPSBub3Bf dmlydHVhbF9lbmdpbmUoaTkxNSwgJmVuZ2luZSwgMSwgMSwgMCk7CisJCWlmIChlcnIpIHsKKwkJ CXByX2VycigiRmFpbGVkIHRvIHdyYXAgZW5naW5lICVzOiBlcnI9JWRcbiIsCisJCQkgICAgICAg ZW5naW5lLT5uYW1lLCBlcnIpOworCQkJZ290byBvdXRfdW5sb2NrOworCQl9CisJfQorCisJZm9y IChjbGFzcyA9IDA7IGNsYXNzIDw9IE1BWF9FTkdJTkVfQ0xBU1M7IGNsYXNzKyspIHsKKwkJaW50 IG5zaWJsaW5nLCBuOworCisJCW5zaWJsaW5nID0gMDsKKwkJZm9yIChpbnN0ID0gMDsgaW5zdCA8 PSBNQVhfRU5HSU5FX0lOU1RBTkNFOyBpbnN0KyspIHsKKwkJCWlmICghaTkxNS0+ZW5naW5lX2Ns YXNzW2NsYXNzXVtpbnN0XSkKKwkJCQlicmVhazsKKworCQkJc2libGluZ3NbbnNpYmxpbmcrK10g PSBpOTE1LT5lbmdpbmVfY2xhc3NbY2xhc3NdW2luc3RdOworCQl9CisJCWlmIChuc2libGluZyA8 IDIpCisJCQljb250aW51ZTsKKworCQlmb3IgKG4gPSAxOyBuIDw9IG5zaWJsaW5nICsgMTsgbisr KSB7CisJCQllcnIgPSBub3BfdmlydHVhbF9lbmdpbmUoaTkxNSwgc2libGluZ3MsIG5zaWJsaW5n LAorCQkJCQkJIG4sIDApOworCQkJaWYgKGVycikKKwkJCQlnb3RvIG91dF91bmxvY2s7CisJCX0K KworCQllcnIgPSBub3BfdmlydHVhbF9lbmdpbmUoaTkxNSwgc2libGluZ3MsIG5zaWJsaW5nLCBu LCBDSEFJTik7CisJCWlmIChlcnIpCisJCQlnb3RvIG91dF91bmxvY2s7CisJfQorCitvdXRfdW5s b2NrOgorCW11dGV4X3VubG9jaygmaTkxNS0+ZHJtLnN0cnVjdF9tdXRleCk7CisJcmV0dXJuIGVy cjsKK30KKwogaW50IGludGVsX2V4ZWNsaXN0c19saXZlX3NlbGZ0ZXN0cyhzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqaTkxNSkKIHsKIAlzdGF0aWMgY29uc3Qgc3RydWN0IGk5MTVfc3VidGVzdCB0 ZXN0c1tdID0gewpAQCAtMTMxMyw2ICsxNDkyLDcgQEAgaW50IGludGVsX2V4ZWNsaXN0c19saXZl X3NlbGZ0ZXN0cyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSkKIAkJU1VCVEVTVChsaXZl X2NoYWluX3ByZWVtcHQpLAogCQlTVUJURVNUKGxpdmVfcHJlZW1wdF9oYW5nKSwKIAkJU1VCVEVT VChsaXZlX3ByZWVtcHRfc21va2UpLAorCQlTVUJURVNUKGxpdmVfdmlydHVhbF9lbmdpbmUpLAog CX07CiAKIAlpZiAoIUhBU19FWEVDTElTVFMoaTkxNSkpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vaTkxNS9pOTE1X2dlbS5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uaApp bmRleCA2N2Y4YTRhODA3YTAuLmZlODJkMzU3MTA3MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaTkxNV9nZW0uaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5o CkBAIC05MSw0ICs5MSw5IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBfX3Rhc2tsZXRfZW5hYmxlKHN0 cnVjdCB0YXNrbGV0X3N0cnVjdCAqdCkKIAlyZXR1cm4gYXRvbWljX2RlY19hbmRfdGVzdCgmdC0+ Y291bnQpOwogfQogCitzdGF0aWMgaW5saW5lIGJvb2wgX190YXNrbGV0X2lzX3NjaGVkdWxlZChz dHJ1Y3QgdGFza2xldF9zdHJ1Y3QgKnQpCit7CisJcmV0dXJuIHRlc3RfYml0KFRBU0tMRVRfU1RB VEVfU0NIRUQsICZ0LT5zdGF0ZSk7Cit9CisKICNlbmRpZiAvKiBfX0k5MTVfR0VNX0hfXyAqLwpk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fY29udGV4dC5jIGIvZHJp dmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fY29udGV4dC5jCmluZGV4IGJhNzU4MmQ5NTVkMS4u NTdiMDlmNjI0YmI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9j b250ZXh0LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fY29udGV4dC5jCkBA IC04Niw2ICs4Niw3IEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2xvZzIuaD4KKyNpbmNsdWRl IDxsaW51eC9ub3NwZWMuaD4KIAogI2luY2x1ZGUgPGRybS9pOTE1X2RybS5oPgogCkBAIC0xMjA5 LDcgKzEyMTAsNiBAQCBfX2ludGVsX2NvbnRleHRfcmVjb25maWd1cmVfc3NldShzdHJ1Y3QgaW50 ZWxfY29udGV4dCAqY2UsCiAJaW50IHJldDsKIAogCUdFTV9CVUdfT04oSU5URUxfR0VOKGNlLT5n ZW1fY29udGV4dC0+aTkxNSkgPCA4KTsKLQlHRU1fQlVHX09OKGNlLT5lbmdpbmUtPmlkICE9IFJD UzApOwogCiAJcmV0ID0gaW50ZWxfY29udGV4dF9sb2NrX3Bpbm5lZChjZSk7CiAJaWYgKHJldCkK QEAgLTEzOTcsNyArMTM5NywxMDIgQEAgc3RydWN0IHNldF9lbmdpbmVzIHsKIAlzdHJ1Y3QgaTkx NV9nZW1fZW5naW5lcyAqZW5naW5lczsKIH07CiAKK3N0YXRpYyBpbnQKK3NldF9lbmdpbmVzX19s b2FkX2JhbGFuY2Uoc3RydWN0IGk5MTVfdXNlcl9leHRlbnNpb24gX191c2VyICpiYXNlLCB2b2lk ICpkYXRhKQoreworCXN0cnVjdCBpOTE1X2NvbnRleHRfZW5naW5lc19sb2FkX2JhbGFuY2UgX191 c2VyICpleHQgPQorCQljb250YWluZXJfb2ZfdXNlcihiYXNlLCB0eXBlb2YoKmV4dCksIGJhc2Up OworCWNvbnN0IHN0cnVjdCBzZXRfZW5naW5lcyAqc2V0ID0gZGF0YTsKKwlzdHJ1Y3QgaW50ZWxf ZW5naW5lX2NzICpzdGFja1sxNl07CisJc3RydWN0IGludGVsX2VuZ2luZV9jcyAqKnNpYmxpbmdz OworCXN0cnVjdCBpbnRlbF9jb250ZXh0ICpjZTsKKwl1MTYgbnVtX3NpYmxpbmdzLCBpZHg7CisJ dW5zaWduZWQgaW50IG47CisJaW50IGVycjsKKworCWlmICghSEFTX0VYRUNMSVNUUyhzZXQtPmN0 eC0+aTkxNSkpCisJCXJldHVybiAtRU5PREVWOworCisJaWYgKFVTRVNfR1VDX1NVQk1JU1NJT04o c2V0LT5jdHgtPmk5MTUpKQorCQlyZXR1cm4gLUVOT0RFVjsgLyogbm90IGltcGxlbWVudCB5ZXQg Ki8KKworCWlmIChnZXRfdXNlcihpZHgsICZleHQtPmVuZ2luZV9pbmRleCkpCisJCXJldHVybiAt RUZBVUxUOworCisJaWYgKGlkeCA+PSBzZXQtPmVuZ2luZXMtPm51bV9lbmdpbmVzKSB7CisJCURS TV9ERUJVRygiSW52YWxpZCBwbGFjZW1lbnQgdmFsdWUsICVkID49ICVkXG4iLAorCQkJICBpZHgs IHNldC0+ZW5naW5lcy0+bnVtX2VuZ2luZXMpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlp ZHggPSBhcnJheV9pbmRleF9ub3NwZWMoaWR4LCBzZXQtPmVuZ2luZXMtPm51bV9lbmdpbmVzKTsK KwlpZiAoc2V0LT5lbmdpbmVzLT5lbmdpbmVzW2lkeF0pIHsKKwkJRFJNX0RFQlVHKCJJbnZhbGlk IHBsYWNlbWVudFslZF0sIGFscmVhZHkgb2NjdXBpZWRcbiIsIGlkeCk7CisJCXJldHVybiAtRUVY SVNUOworCX0KKworCWlmIChnZXRfdXNlcihudW1fc2libGluZ3MsICZleHQtPm51bV9zaWJsaW5n cykpCisJCXJldHVybiAtRUZBVUxUOworCisJZXJyID0gY2hlY2tfdXNlcl9tYnooJmV4dC0+Zmxh Z3MpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwlmb3IgKG4gPSAwOyBuIDwgQVJSQVlf U0laRShleHQtPm1iejY0KTsgbisrKSB7CisJCWVyciA9IGNoZWNrX3VzZXJfbWJ6KCZleHQtPm1i ejY0W25dKTsKKwkJaWYgKGVycikKKwkJCXJldHVybiBlcnI7CisJfQorCisJc2libGluZ3MgPSBz dGFjazsKKwlpZiAobnVtX3NpYmxpbmdzID4gQVJSQVlfU0laRShzdGFjaykpIHsKKwkJc2libGlu Z3MgPSBrbWFsbG9jX2FycmF5KG51bV9zaWJsaW5ncywKKwkJCQkJIHNpemVvZigqc2libGluZ3Mp LAorCQkJCQkgR0ZQX0tFUk5FTCk7CisJCWlmICghc2libGluZ3MpCisJCQlyZXR1cm4gLUVOT01F TTsKKwl9CisKKwlmb3IgKG4gPSAwOyBuIDwgbnVtX3NpYmxpbmdzOyBuKyspIHsKKwkJc3RydWN0 IGk5MTVfZW5naW5lX2NsYXNzX2luc3RhbmNlIGNpOworCisJCWlmIChjb3B5X2Zyb21fdXNlcigm Y2ksICZleHQtPmVuZ2luZXNbbl0sIHNpemVvZihjaSkpKSB7CisJCQllcnIgPSAtRUZBVUxUOwor CQkJZ290byBvdXRfc2libGluZ3M7CisJCX0KKworCQlzaWJsaW5nc1tuXSA9IGludGVsX2VuZ2lu ZV9sb29rdXBfdXNlcihzZXQtPmN0eC0+aTkxNSwKKwkJCQkJCSAgICAgICBjaS5lbmdpbmVfY2xh c3MsCisJCQkJCQkgICAgICAgY2kuZW5naW5lX2luc3RhbmNlKTsKKwkJaWYgKCFzaWJsaW5nc1tu XSkgeworCQkJRFJNX0RFQlVHKCJJbnZhbGlkIHNpYmxpbmdbJWRdOiB7IGNsYXNzOiVkLCBpbnN0 OiVkIH1cbiIsCisJCQkJICBuLCBjaS5lbmdpbmVfY2xhc3MsIGNpLmVuZ2luZV9pbnN0YW5jZSk7 CisJCQllcnIgPSAtRUlOVkFMOworCQkJZ290byBvdXRfc2libGluZ3M7CisJCX0KKwl9CisKKwlj ZSA9IGludGVsX2V4ZWNsaXN0c19jcmVhdGVfdmlydHVhbChzZXQtPmN0eCwgc2libGluZ3MsIG4p OworCWlmIChJU19FUlIoY2UpKSB7CisJCWVyciA9IFBUUl9FUlIoY2UpOworCQlnb3RvIG91dF9z aWJsaW5nczsKKwl9CisKKwlpZiAoY21weGNoZygmc2V0LT5lbmdpbmVzLT5lbmdpbmVzW2lkeF0s IE5VTEwsIGNlKSkgeworCQlpbnRlbF9jb250ZXh0X3B1dChjZSk7CisJCWVyciA9IC1FRVhJU1Q7 CisJCWdvdG8gb3V0X3NpYmxpbmdzOworCX0KKworb3V0X3NpYmxpbmdzOgorCWlmIChzaWJsaW5n cyAhPSBzdGFjaykKKwkJa2ZyZWUoc2libGluZ3MpOworCisJcmV0dXJuIGVycjsKK30KKwogc3Rh dGljIGNvbnN0IGk5MTVfdXNlcl9leHRlbnNpb25fZm4gc2V0X2VuZ2luZXNfX2V4dGVuc2lvbnNb XSA9IHsKKwlbSTkxNV9DT05URVhUX0VOR0lORVNfRVhUX0xPQURfQkFMQU5DRV0gPSBzZXRfZW5n aW5lc19fbG9hZF9iYWxhbmNlLAogfTsKIAogc3RhdGljIGludApAQCAtMTY5NiwxNCArMTc5MSwy OSBAQCBzdGF0aWMgaW50IGNsb25lX2VuZ2luZXMoc3RydWN0IGk5MTVfZ2VtX2NvbnRleHQgKmRz dCwKIAogCWNsb25lLT5pOTE1ID0gZHN0LT5pOTE1OwogCWZvciAobiA9IDA7IG4gPCBlLT5udW1f ZW5naW5lczsgbisrKSB7CisJCXN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZTsKKwogCQlp ZiAoIWUtPmVuZ2luZXNbbl0pIHsKIAkJCWNsb25lLT5lbmdpbmVzW25dID0gTlVMTDsKIAkJCWNv bnRpbnVlOwogCQl9CisJCWVuZ2luZSA9IGUtPmVuZ2luZXNbbl0tPmVuZ2luZTsKIAotCQljbG9u ZS0+ZW5naW5lc1tuXSA9Ci0JCQlpbnRlbF9jb250ZXh0X2NyZWF0ZShkc3QsIGUtPmVuZ2luZXNb bl0tPmVuZ2luZSk7Ci0JCWlmICghY2xvbmUtPmVuZ2luZXNbbl0pIHsKKwkJLyoKKwkJICogVmly dHVhbCBlbmdpbmVzIGFyZSBzaW5nbGV0b25zOyB0aGV5IGNhbiBvbmx5IGV4aXN0CisJCSAqIGlu c2lkZSBhIHNpbmdsZSBjb250ZXh0LCBiZWNhdXNlIHRoZXkgZW1iZWQgdGhlaXIKKwkJICogSFcg Y29udGV4dC4uLiBBcyBlYWNoIHZpcnR1YWwgY29udGV4dCBpbXBsaWVzIGEgc2luZ2xlCisJCSAq IHRpbWVsaW5lIChlYWNoIGVuZ2luZSBjYW4gb25seSBkZXF1ZXVlIGEgc2luZ2xlIHJlcXVlc3QK KwkJICogYXQgYW55IHRpbWUpLCBpdCB3b3VsZCBiZSBzdXJwcmlzaW5nIGZvciB0d28gY29udGV4 dHMKKwkJICogdG8gdXNlIHRoZSBzYW1lIGVuZ2luZS4gU28gbGV0J3MgY3JlYXRlIGEgY29weSBv ZgorCQkgKiB0aGUgdmlydHVhbCBlbmdpbmUgaW5zdGVhZC4KKwkJICovCisJCWlmIChpbnRlbF9l bmdpbmVfaXNfdmlydHVhbChlbmdpbmUpKQorCQkJY2xvbmUtPmVuZ2luZXNbbl0gPQorCQkJCWlu dGVsX2V4ZWNsaXN0c19jbG9uZV92aXJ0dWFsKGRzdCwgZW5naW5lKTsKKwkJZWxzZQorCQkJY2xv bmUtPmVuZ2luZXNbbl0gPSBpbnRlbF9jb250ZXh0X2NyZWF0ZShkc3QsIGVuZ2luZSk7CisJCWlm IChJU19FUlJfT1JfTlVMTChjbG9uZS0+ZW5naW5lc1tuXSkpIHsKIAkJCV9fZnJlZV9lbmdpbmVz KGNsb25lLCBuKTsKIAkJCWdvdG8gZXJyX3VubG9jazsKIAkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaTkxNV9zY2hlZHVsZXIuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5 MTVfc2NoZWR1bGVyLmMKaW5kZXggMzliYzRmNTRlMjcyLi5iNThkOWMyM2E4NzYgMTAwNjQ0Ci0t LSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfc2NoZWR1bGVyLmMKKysrIGIvZHJpdmVycy9n cHUvZHJtL2k5MTUvaTkxNV9zY2hlZHVsZXIuYwpAQCAtMjQ4LDE3ICsyNDgsMjYgQEAgc2NoZWRf bG9ja19lbmdpbmUoY29uc3Qgc3RydWN0IGk5MTVfc2NoZWRfbm9kZSAqbm9kZSwKIAkJICBzdHJ1 Y3QgaW50ZWxfZW5naW5lX2NzICpsb2NrZWQsCiAJCSAgc3RydWN0IHNjaGVkX2NhY2hlICpjYWNo ZSkKIHsKLQlzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUgPSBub2RlX3RvX3JlcXVlc3Qo bm9kZSktPmVuZ2luZTsKKwljb25zdCBzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycSA9IG5vZGVfdG9f cmVxdWVzdChub2RlKTsKKwlzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmU7CiAKIAlHRU1f QlVHX09OKCFsb2NrZWQpOwogCi0JaWYgKGVuZ2luZSAhPSBsb2NrZWQpIHsKKwkvKgorCSAqIFZp cnR1YWwgZW5naW5lcyBjb21wbGljYXRlIGFjcXVpcmluZyB0aGUgZW5naW5lIHRpbWVsaW5lIGxv Y2ssCisJICogYXMgdGhlaXIgcnEtPmVuZ2luZSBwb2ludGVyIGlzIG5vdCBzdGFibGUgdW50aWwg dW5kZXIgdGhhdAorCSAqIGVuZ2luZSBsb2NrLiBUaGUgc2ltcGxlIHBsb3kgd2UgdXNlIGlzIHRv IHRha2UgdGhlIGxvY2sgdGhlbgorCSAqIGNoZWNrIHRoYXQgdGhlIHJxIHN0aWxsIGJlbG9uZ3Mg dG8gdGhlIG5ld2x5IGxvY2tlZCBlbmdpbmUuCisJICovCisJd2hpbGUgKGxvY2tlZCAhPSAoZW5n aW5lID0gUkVBRF9PTkNFKHJxLT5lbmdpbmUpKSkgewogCQlzcGluX3VubG9jaygmbG9ja2VkLT50 aW1lbGluZS5sb2NrKTsKIAkJbWVtc2V0KGNhY2hlLCAwLCBzaXplb2YoKmNhY2hlKSk7CiAJCXNw aW5fbG9jaygmZW5naW5lLT50aW1lbGluZS5sb2NrKTsKKwkJbG9ja2VkID0gZW5naW5lOwogCX0K IAotCXJldHVybiBlbmdpbmU7CisJR0VNX0JVR19PTihsb2NrZWQgIT0gZW5naW5lKTsKKwlyZXR1 cm4gbG9ja2VkOwogfQogCiBzdGF0aWMgYm9vbCBpbmZsaWdodChjb25zdCBzdHJ1Y3QgaTkxNV9y ZXF1ZXN0ICpycSwKQEAgLTM3MSw4ICszODAsMTEgQEAgc3RhdGljIHZvaWQgX19pOTE1X3NjaGVk dWxlKHN0cnVjdCBpOTE1X3JlcXVlc3QgKnJxLAogCQlpZiAocHJpbyA8PSBub2RlLT5hdHRyLnBy aW9yaXR5IHx8IG5vZGVfc2lnbmFsZWQobm9kZSkpCiAJCQljb250aW51ZTsKIAorCQlHRU1fQlVH X09OKG5vZGVfdG9fcmVxdWVzdChub2RlKS0+ZW5naW5lICE9IGVuZ2luZSk7CisKIAkJbm9kZS0+ YXR0ci5wcmlvcml0eSA9IHByaW87CiAJCWlmICghbGlzdF9lbXB0eSgmbm9kZS0+bGluaykpIHsK KwkJCUdFTV9CVUdfT04oaW50ZWxfZW5naW5lX2lzX3ZpcnR1YWwoZW5naW5lKSk7CiAJCQlpZiAo IWNhY2hlLnByaW9saXN0KQogCQkJCWNhY2hlLnByaW9saXN0ID0KIAkJCQkJaTkxNV9zY2hlZF9s b29rdXBfcHJpb2xpc3QoZW5naW5lLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUv aTkxNV90aW1lbGluZV90eXBlcy5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV90aW1lbGlu ZV90eXBlcy5oCmluZGV4IDUyNTZhMGI1YzVmNy4uMTY4ODcwNWY0YTJiIDEwMDY0NAotLS0gYS9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3RpbWVsaW5lX3R5cGVzLmgKKysrIGIvZHJpdmVycy9n cHUvZHJtL2k5MTUvaTkxNV90aW1lbGluZV90eXBlcy5oCkBAIC0yNiw2ICsyNiw3IEBAIHN0cnVj dCBpOTE1X3RpbWVsaW5lIHsKIAlzcGlubG9ja190IGxvY2s7CiAjZGVmaW5lIFRJTUVMSU5FX0NM SUVOVCAwIC8qIGRlZmF1bHQgc3ViY2xhc3MgKi8KICNkZWZpbmUgVElNRUxJTkVfRU5HSU5FIDEK KyNkZWZpbmUgVElNRUxJTkVfVklSVFVBTCAyCiAJc3RydWN0IG11dGV4IG11dGV4OyAvKiBwcm90 ZWN0cyB0aGUgZmxvdyBvZiByZXF1ZXN0cyAqLwogCiAJdW5zaWduZWQgaW50IHBpbl9jb3VudDsK ZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9kcm0vaTkxNV9kcm0uaCBiL2luY2x1ZGUvdWFwaS9k cm0vaTkxNV9kcm0uaAppbmRleCA3Njk0MTEzMzYyZDQuLmZmMmFiYWJjMDk4NCAxMDA2NDQKLS0t IGEvaW5jbHVkZS91YXBpL2RybS9pOTE1X2RybS5oCisrKyBiL2luY2x1ZGUvdWFwaS9kcm0vaTkx NV9kcm0uaApAQCAtMTM3LDYgKzEzNyw3IEBAIHN0cnVjdCBpOTE1X2VuZ2luZV9jbGFzc19pbnN0 YW5jZSB7CiAJX191MTYgZW5naW5lX2NsYXNzOyAvKiBzZWUgZW51bSBkcm1faTkxNV9nZW1fZW5n aW5lX2NsYXNzICovCiAJX191MTYgZW5naW5lX2luc3RhbmNlOwogI2RlZmluZSBJOTE1X0VOR0lO RV9DTEFTU19JTlZBTElEX05PTkUgLTEKKyNkZWZpbmUgSTkxNV9FTkdJTkVfQ0xBU1NfSU5WQUxJ RF9WSVJUVUFMIC0yCiB9OwogCiAvKioKQEAgLTE2MDcsOCArMTYwOCw0NiBAQCBzdHJ1Y3QgZHJt X2k5MTVfZ2VtX2NvbnRleHRfcGFyYW1fc3NldSB7CiAJX191MzIgcnN2ZDsKIH07CiAKKy8qCisg KiBpOTE1X2NvbnRleHRfZW5naW5lc19sb2FkX2JhbGFuY2U6CisgKgorICogRW5hYmxlIGxvYWQg YmFsYW5jaW5nIGFjcm9zcyB0aGlzIHNldCBvZiBlbmdpbmVzLgorICoKKyAqIEludG8gdGhlIEk5 MTVfRVhFQ19ERUZBVUxUIHNsb3QgWzBdLCBhIHZpcnR1YWwgZW5naW5lIGlzIGNyZWF0ZWQgdGhh dCB3aGVuCisgKiB1c2VkIHdpbGwgcHJveHkgdGhlIGV4ZWNidWZmZXIgcmVxdWVzdCBvbnRvIG9u ZSBvZiB0aGUgc2V0IG9mIGVuZ2luZXMKKyAqIGluIHN1Y2ggYSB3YXkgYXMgdG8gZGlzdHJpYnV0 ZSB0aGUgbG9hZCBldmVubHkgYWNyb3NzIHRoZSBzZXQuCisgKgorICogVGhlIHNldCBvZiBlbmdp bmVzIG11c3QgYmUgY29tcGF0aWJsZSAoZS5nLiB0aGUgc2FtZSBIVyBjbGFzcykgYXMgdGhleQor ICogd2lsbCBzaGFyZSB0aGUgc2FtZSBsb2dpY2FsIEdQVSBjb250ZXh0IGFuZCByaW5nLgorICoK KyAqIFRvIGludGVybWl4IHJlbmRlcmluZyB3aXRoIHRoZSB2aXJ0dWFsIGVuZ2luZSBhbmQgZGly ZWN0IHJlbmRlcmluZyBvbnRvCisgKiB0aGUgYmFja2luZyBlbmdpbmVzIChieXBhc3NpbmcgdGhl IGxvYWQgYmFsYW5jaW5nIHByb3h5KSwgdGhlIGNvbnRleHQgbXVzdAorICogYmUgZGVmaW5lZCB0 byB1c2UgYSBzaW5nbGUgdGltZWxpbmUgZm9yIGFsbCBlbmdpbmVzLgorICovCitzdHJ1Y3QgaTkx NV9jb250ZXh0X2VuZ2luZXNfbG9hZF9iYWxhbmNlIHsKKwlzdHJ1Y3QgaTkxNV91c2VyX2V4dGVu c2lvbiBiYXNlOworCisJX191MTYgZW5naW5lX2luZGV4OworCV9fdTE2IG51bV9zaWJsaW5nczsK KwlfX3UzMiBmbGFnczsgLyogYWxsIHVuZGVmaW5lZCBmbGFncyBtdXN0IGJlIHplcm8gKi8KKwor CV9fdTY0IG1iejY0WzFdOyAvKiByZXNlcnZlZCBmb3IgZnV0dXJlIHVzZTsgbXVzdCBiZSB6ZXJv ICovCisKKwlzdHJ1Y3QgaTkxNV9lbmdpbmVfY2xhc3NfaW5zdGFuY2UgZW5naW5lc1swXTsKK30g X19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKyNkZWZpbmUgSTkxNV9ERUZJTkVfQ09OVEVYVF9F TkdJTkVTX0xPQURfQkFMQU5DRShuYW1lX18sIE5fXykgc3RydWN0IHsgXAorCXN0cnVjdCBpOTE1 X3VzZXJfZXh0ZW5zaW9uIGJhc2U7IFwKKwlfX3UxNiBlbmdpbmVfaW5kZXg7IFwKKwlfX3UxNiBu dW1fc2libGluZ3M7IFwKKwlfX3UzMiBmbGFnczsgXAorCV9fdTY0IG1iejY0WzFdOyBcCisJc3Ry dWN0IGk5MTVfZW5naW5lX2NsYXNzX2luc3RhbmNlIGVuZ2luZXNbTl9fXTsgXAorfSBfX2F0dHJp YnV0ZV9fKChwYWNrZWQpKSBuYW1lX18KKwogc3RydWN0IGk5MTVfY29udGV4dF9wYXJhbV9lbmdp bmVzIHsKIAlfX3U2NCBleHRlbnNpb25zOyAvKiBsaW5rZWQgY2hhaW4gb2YgZXh0ZW5zaW9uIGJs b2NrcywgMCB0ZXJtaW5hdGVzICovCisjZGVmaW5lIEk5MTVfQ09OVEVYVF9FTkdJTkVTX0VYVF9M T0FEX0JBTEFOQ0UgMCAvKiBzZWUgaTkxNV9jb250ZXh0X2VuZ2luZXNfbG9hZF9iYWxhbmNlICov CiAJc3RydWN0IGk5MTVfZW5naW5lX2NsYXNzX2luc3RhbmNlIGVuZ2luZXNbMF07CiB9IF9fYXR0 cmlidXRlX18oKHBhY2tlZCkpOwogCi0tIAoyLjIwLjEKCl9fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4 QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWls bWFuL2xpc3RpbmZvL2ludGVsLWdmeA==