From mboxrd@z Thu Jan 1 00:00:00 1970 From: John.C.Harrison@Intel.com Subject: [PATCH 08/40] drm/i915: Start of GPU scheduler Date: Fri, 11 Dec 2015 13:16:55 +0000 Message-ID: <1449839815-22223-1-git-send-email-John.C.Harrison@Intel.com> References: <1448278774-31376-8-git-send-email-John.C.Harrison@Intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga03.intel.com (mga03.intel.com [134.134.136.65]) by gabe.freedesktop.org (Postfix) with ESMTP id 717A56EFC4 for ; Fri, 11 Dec 2015 05:17:07 -0800 (PST) In-Reply-To: <1448278774-31376-8-git-send-email-John.C.Harrison@Intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Intel-GFX@Lists.FreeDesktop.Org List-Id: intel-gfx@lists.freedesktop.org RnJvbTogSm9obiBIYXJyaXNvbiA8Sm9obi5DLkhhcnJpc29uQEludGVsLmNvbT4KCkluaXRpYWwg Y3JlYXRpb24gb2Ygc2NoZWR1bGVyIHNvdXJjZSBmaWxlcy4gTm90ZSB0aGF0IHRoaXMgcGF0Y2gK aW1wbGVtZW50cyBtb3N0IG9mIHRoZSBzY2hlZHVsZXIgZnVuY3Rpb25hbGl0eSBidXQgZG9lcyBu b3QgaG9vayBpdCBpbgp0byB0aGUgZHJpdmVyIHlldC4gSXQgYWxzbyBsZWF2ZXMgdGhlIHNjaGVk dWxlciBjb2RlIGluICdwYXNzIHRocm91Z2gnCm1vZGUgc28gdGhhdCBldmVuIHdoZW4gaXQgaXMg aG9va2VkIGluLCBpdCB3aWxsIG5vdCBhY3R1YWxseSBkbyB2ZXJ5Cm11Y2guIFRoaXMgYWxsb3dz IHRoZSBob29rcyB0byBiZSBhZGRlZCBvbmUgYXQgYSB0aW1lIGluIGJ5dGUgc2l6ZQpjaHVua3Mg YW5kIG9ubHkgd2hlbiB0aGUgc2NoZWR1bGVyIGlzIGZpbmFsbHkgZW5hYmxlZCBhdCB0aGUgZW5k IGRvZXMKYW55dGhpbmcgc3RhcnQgaGFwcGVuaW5nLgoKVGhlIGdlbmVyYWwgdGhlb3J5IG9mIG9w ZXJhdGlvbiBpcyB0aGF0IHdoZW4gYmF0Y2ggYnVmZmVycyBhcmUKc3VibWl0dGVkIHRvIHRoZSBk cml2ZXIsIHRoZSBleGVjYnVmZmVyKCkgY29kZSBhc3NpZ25zIGEgdW5pcXVlCnJlcXVlc3QgYW5k IHRoZW4gcGFja2FnZXMgdXAgYWxsIHRoZSBpbmZvcm1hdGlvbiByZXF1aXJlZCB0byBleGVjdXRl CnRoZSBiYXRjaCBidWZmZXIgYXQgYSBsYXRlciB0aW1lLiBUaGlzIHBhY2thZ2UgaXMgZ2l2ZW4g b3ZlciB0byB0aGUKc2NoZWR1bGVyIHdoaWNoIGFkZHMgaXQgdG8gYW4gaW50ZXJuYWwgbm9kZSBs aXN0LiBUaGUgc2NoZWR1bGVyIGFsc28Kc2NhbnMgdGhlIGxpc3Qgb2Ygb2JqZWN0cyBhc3NvY2lh dGVkIHdpdGggdGhlIGJhdGNoIGJ1ZmZlciBhbmQKY29tcGFyZXMgdGhlbSBhZ2FpbnN0IHRoZSBv YmplY3RzIGFscmVhZHkgaW4gdXNlIGJ5IG90aGVyIGJ1ZmZlcnMgaW4KdGhlIG5vZGUgbGlzdC4g SWYgbWF0Y2hlcyBhcmUgZm91bmQgdGhlbiB0aGUgbmV3IGJhdGNoIGJ1ZmZlciBub2RlIGlzCm1h cmtlZCBhcyBiZWluZyBkZXBlbmRlbnQgdXBvbiB0aGUgbWF0Y2hpbmcgbm9kZS4gVGhlIHNhbWUg aXMgZG9uZSBmb3IKdGhlIGNvbnRleHQgb2JqZWN0LiBUaGUgc2NoZWR1bGVyIGFsc28gYnVtcHMg dXAgdGhlIHByaW9yaXR5IG9mIHN1Y2gKbWF0Y2hpbmcgbm9kZXMgb24gdGhlIGdyb3VuZHMgdGhh dCB0aGUgbW9yZSBkZXBlbmRlbmNpZXMgYSBnaXZlbiBiYXRjaApidWZmZXIgaGFzIHRoZSBtb3Jl IGltcG9ydGFudCBpdCBpcyBsaWtlbHkgdG8gYmUuCgpUaGUgc2NoZWR1bGVyIGFpbXMgdG8gaGF2 ZSBhIGdpdmVuICh0dW5lYWJsZSkgbnVtYmVyIG9mIGJhdGNoIGJ1ZmZlcnMKaW4gZmxpZ2h0IG9u IHRoZSBoYXJkd2FyZSBhdCBhbnkgZ2l2ZW4gdGltZS4gSWYgZmV3ZXIgdGhhbiB0aGlzIGFyZQpj dXJyZW50bHkgZXhlY3V0aW5nIHdoZW4gYSBuZXcgbm9kZSBpcyBxdWV1ZWQsIHRoZW4gdGhlIG5v ZGUgaXMgcGFzc2VkCnN0cmFpZ2h0IHRocm91Z2ggdG8gdGhlIHN1Ym1pdCBmdW5jdGlvbi4gT3Ro ZXJ3aXNlIGl0IGlzIHNpbXBseSBhZGRlZAp0byB0aGUgcXVldWUgYW5kIHRoZSBkcml2ZXIgcmV0 dXJucyBiYWNrIHRvIHVzZXIgbGFuZC4KCkFzIGVhY2ggYmF0Y2ggYnVmZmVyIGNvbXBsZXRlcywg aXQgcmFpc2VzIGFuIGludGVycnVwdCB3aGljaCB3YWtlcyB1cAp0aGUgc2NoZWR1bGVyLiBOb3Rl IHRoYXQgaXQgaXMgcG9zc2libGUgZm9yIG11bHRpcGxlIGJ1ZmZlcnMgdG8KY29tcGxldGUgYmVm b3JlIHRoZSBJUlEgaGFuZGxlciBnZXRzIHRvIHJ1bi4gRnVydGhlciwgaXQgaXMgcG9zc2libGUK Zm9yIHRoZSBzZXFubyB2YWx1ZXMgdG8gYmUgdW4tb3JkZXJlZCAocGFydGljdWxhcmx5IG9uY2Ug cHJlLWVtcHRpb24KaXMgZW5hYmxlZCkuIEhvd2V2ZXIsIHRoZSBzY2hlZHVsZXIga2VlcHMgdGhl IGxpc3Qgb2YgZXhlY3V0aW5nCmJ1ZmZlcnMgaW4gb3JkZXIgb2YgaGFyZHdhcmUgc3VibWlzc2lv bi4gVGh1cyBpdCBjYW4gc2NhbiB0aHJvdWdoIHRoZQpsaXN0IHVudGlsIGEgbWF0Y2hpbmcgc2Vx bm8gaXMgZm91bmQgYW5kIHRoZW4gbWFyayBhbGwgaW4gZmxpZ2h0IG5vZGVzCmZyb20gdGhhdCBw b2ludCBvbiBhcyBjb21wbGV0ZWQuCgpBIGRlZmVycmVkIHdvcmsgcXVldWUgaXMgYWxzbyBwb2tl ZCBieSB0aGUgaW50ZXJydXB0IGhhbmRsZXIuIFdoZW4KdGhpcyB3YWtlcyB1cCBpdCBjYW4gZG8g bW9yZSBpbnZvbHZlZCBwcm9jZXNzaW5nIHN1Y2ggYXMgYWN0dWFsbHkKcmVtb3ZpbmcgY29tcGxl dGVkIG5vZGVzIGZyb20gdGhlIHF1ZXVlIGFuZCBmcmVlaW5nIHVwIHRoZSByZXNvdXJjZXMKYXNz b2NpYXRlZCB3aXRoIHRoZW0gKGludGVybmFsIG1lbW9yeSBhbGxvY2F0aW9ucywgRFJNIG9iamVj dApyZWZlcmVuY2VzLCBjb250ZXh0IHJlZmVyZW5jZSwgZXRjLikuIFRoZSB3b3JrIGhhbmRsZXIg YWxzbyBjaGVja3MgdGhlCmluIGZsaWdodCBjb3VudCBhbmQgY2FsbHMgdGhlIHN1Ym1pc3Npb24g Y29kZSBpZiBhIG5ldyBzbG90IGhhcwphcHBlYXJlZC4KCldoZW4gdGhlIHNjaGVkdWxlcidzIHN1 Ym1pdCBjb2RlIGlzIGNhbGxlZCwgaXQgc2NhbnMgdGhlIHF1ZXVlZCBub2RlCmxpc3QgZm9yIHRo ZSBoaWdoZXN0IHByaW9yaXR5IG5vZGUgdGhhdCBoYXMgbm8gdW5tZXQgZGVwZW5kZW5jaWVzLgpO b3RlIHRoYXQgdGhlIGRlcGVuZGVuY3kgY2FsY3VsYXRpb24gaXMgY29tcGxleCBhcyBpdCBtdXN0 IHRha2UKaW50ZXItcmluZyBkZXBlbmRlbmNpZXMgYW5kIHBvdGVudGlhbCBwcmVlbXB0aW9ucyBp bnRvIGFjY291bnQuIE5vdGUKYWxzbyB0aGF0IGluIHRoZSBmdXR1cmUgdGhpcyB3aWxsIGJlIGV4 dGVuZGVkIHRvIGluY2x1ZGUgZXh0ZXJuYWwKZGVwZW5kZW5jaWVzIHN1Y2ggYXMgdGhlIEFuZHJv aWQgTmF0aXZlIFN5bmMgZmlsZSBkZXNjcmlwdG9ycyBhbmQvb3IKdGhlIGxpbnV4IGRtYS1idWZm IHN5bmNocm9uaXNhdGlvbiBzY2hlbWUuCgpJZiBhIHN1aXRhYmxlIG5vZGUgaXMgZm91bmQgdGhl biBpdCBpcyBzZW50IHRvIGV4ZWNidWZmX2ZpbmFsKCkgZm9yCnN1Ym1pc3Npb24gdG8gdGhlIGhh cmR3YXJlLiBUaGUgaW4gZmxpZ2h0IGNvdW50IGlzIHRoZW4gcmUtY2hlY2tlZCBhbmQKYSBuZXcg bm9kZSBwb3BwZWQgZnJvbSB0aGUgbGlzdCBpZiBhcHByb3ByaWF0ZS4KCk5vdGUgdGhhdCB0aGlz IHBhdGNoIGRvZXMgbm90IGltcGxlbWVudCBwcmUtZW1wdGl2ZSBzY2hlZHVsaW5nLiBPbmx5CmJh c2ljIHNjaGVkdWxpbmcgYnkgcmUtb3JkZXJpbmcgYmF0Y2ggYnVmZmVyIHN1Ym1pc3Npb24gaXMg Y3VycmVudGx5CmltcGxlbWVudGVkLgoKdjI6IENoYW5nZWQgcHJpb3JpdHkgbGV2ZWxzIHRvICsv LTEwMjMgZHVlIHRvIGZlZWRiYWNrIGZyb20gQ2hyaXMKV2lsc29uLgoKUmVtb3ZlZCByZWR1bmRh bnQgaW5kZXggZnJvbSBzY2hlZHVsZXIgbm9kZS4KCkNoYW5nZWQgdGltZSBzdGFtcHMgdG8gdXNl IGppZmZpZXMgaW5zdGVhZCBvZiByYXcgbW9ub3RvbmljLiBUaGlzCnByb3ZpZGVzIGxvd2VyIHJl c29sdXRpb24gYnV0IGltcHJvdmVkIGNvbXBhdGliaWxpdHkgd2l0aCBvdGhlciBpOTE1CmNvZGUu CgpNYWpvciByZS13cml0ZSBvZiBjb21wbGV0aW9uIHRyYWNraW5nIGNvZGUgZHVlIHRvIHN0cnVj dCBmZW5jZQpjb252ZXJzaW9uLiBUaGUgc2NoZWR1bGVyIG5vIGxvbmdlciBoYXMgaXQncyBvd24g cHJpdmF0ZSBJUlEgaGFuZGxlcgpidXQganVzdCBsZXRzIHRoZSBleGlzdGluZyByZXF1ZXN0IGNv ZGUgaGFuZGxlIGNvbXBsZXRpb24gZXZlbnRzLgpJbnN0ZWFkLCB0aGUgc2NoZWR1bGVyIG5vdyBo b29rcyBpbnRvIHRoZSByZXF1ZXN0IG5vdGlmeSBjb2RlIHRvIGJlCnRvbGQgd2hlbiBhIHJlcXVl c3QgaGFzIGNvbXBsZXRlZC4KClJlZHVjZWQgZHJpdmVyIG11dGV4IGxvY2tpbmcgc2NvcGUuIFJl bW92YWwgb2Ygc2NoZWR1bGVyIG5vZGVzIG5vCmxvbmdlciBncmFicyB0aGUgbXV0ZXggbG9jay4K CnYzOiBSZWZhY3RvciBvZiBkZXBlbmRlbmN5IGdlbmVyYXRpb24gdG8gbWFrZSB0aGUgY29kZSBt b3JlIHJlYWRhYmxlLgpBbHNvIGFkZGVkIGluIHJlYWQtcmVhZCBvcHRpbWlzYXRpb24gc3VwcG9y dCAtIGkuZS4sIGRvbid0IHRyZWF0IGEKc2hhcmVkIHJlYWQtb25seSBidWZmZXIgYXMgYmVpbmcg YSBkZXBlbmRlbmN5LgoKQWxsb3dlZCB0aGUga2lsbGluZyBvZiBxdWV1ZWQgbm9kZXMgcmF0aGVy IHRoYW4gb25seSBmbHlpbmcgb25lcy4KCkNoYW5nZS1JZDogSTFlMDhmNTllNjUwYTNjMmJiYWFh OWRlNzYyN2RhMzM4NDliMDYxMDYKRm9yOiBWSVotMTU4NwpTaWduZWQtb2ZmLWJ5OiBKb2huIEhh cnJpc29uIDxKb2huLkMuSGFycmlzb25ASW50ZWwuY29tPgotLS0KIGRyaXZlcnMvZ3B1L2RybS9p OTE1L01ha2VmaWxlICAgICAgICAgfCAgIDEgKwogZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9k cnYuaCAgICAgICB8ICAgNCArCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jICAgICAg IHwgICA1ICsKIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfc2NoZWR1bGVyLmMgfCA3NjMgKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkx NV9zY2hlZHVsZXIuaCB8ICA5MSArKysrCiA1IGZpbGVzIGNoYW5nZWQsIDg2NCBpbnNlcnRpb25z KCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9zY2hlZHVs ZXIuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfc2NoZWR1 bGVyLmgKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZSBiL2RyaXZl cnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlCmluZGV4IDE1Mzk4YzUuLjc5Y2IzOGIgMTAwNjQ0Ci0t LSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9p OTE1L01ha2VmaWxlCkBAIC0xMCw2ICsxMCw3IEBAIGNjZmxhZ3MteSA6PSAtV2Vycm9yCiBpOTE1 LXkgOj0gaTkxNV9kcnYubyBcCiAJICBpOTE1X2lycS5vIFwKIAkgIGk5MTVfcGFyYW1zLm8gXAor CSAgaTkxNV9zY2hlZHVsZXIubyBcCiAgICAgICAgICAgaTkxNV9zdXNwZW5kLm8gXAogCSAgaTkx NV9zeXNmcy5vIFwKIAkgIGludGVsX2Nzci5vIFwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2k5MTVfZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCmluZGV4 IDVkMzkwZDkuLjIzYWVkMzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVf ZHJ2LmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaApAQCAtMTY5NSw2ICsx Njk1LDggQEAgc3RydWN0IGk5MTVfZXhlY2J1ZmZlcl9wYXJhbXMgewogCXN0cnVjdCBkcm1faTkx NV9nZW1fcmVxdWVzdCAgICAgKnJlcXVlc3Q7CiB9OwogCitzdHJ1Y3QgaTkxNV9zY2hlZHVsZXI7 CisKIC8qIHVzZWQgaW4gY29tcHV0aW5nIHRoZSBuZXcgd2F0ZXJtYXJrcyBzdGF0ZSAqLwogc3Ry dWN0IGludGVsX3dtX2NvbmZpZyB7CiAJdW5zaWduZWQgaW50IG51bV9waXBlc19hY3RpdmU7CkBA IC0xOTQ3LDYgKzE5NDksOCBAQCBzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSB7CiAKIAlzdHJ1Y3Qg aTkxNV9ydW50aW1lX3BtIHBtOwogCisJc3RydWN0IGk5MTVfc2NoZWR1bGVyICpzY2hlZHVsZXI7 CisKIAkvKiBBYnN0cmFjdCB0aGUgc3VibWlzc2lvbiBtZWNoYW5pc20gKGxlZ2FjeSByaW5nYnVm ZmVyIG9yIGV4ZWNsaXN0cykgYXdheSAqLwogCXN0cnVjdCB7CiAJCWludCAoKmV4ZWNidWZfc3Vi bWl0KShzdHJ1Y3QgaTkxNV9leGVjYnVmZmVyX3BhcmFtcyAqcGFyYW1zLApkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5 MTVfZ2VtLmMKaW5kZXggMjgwY2ZmMC4uMzZhMTFkMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaTkxNV9nZW0uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5j CkBAIC0zOCw2ICszOCw3IEBACiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8bGlu dXgvZG1hLWJ1Zi5oPgogI2luY2x1ZGUgPC4uL2RyaXZlcnMvYW5kcm9pZC9zeW5jLmg+CisjaW5j bHVkZSAiaTkxNV9zY2hlZHVsZXIuaCIKIAogI2RlZmluZSBSUV9CVUdfT04oZXhwcikKIApAQCAt NTI3OCw2ICs1Mjc5LDEwIEBAIGludCBpOTE1X2dlbV9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpk ZXYpCiAJICovCiAJaW50ZWxfdW5jb3JlX2ZvcmNld2FrZV9nZXQoZGV2X3ByaXYsIEZPUkNFV0FL RV9BTEwpOwogCisJcmV0ID0gaTkxNV9zY2hlZHVsZXJfaW5pdChkZXYpOworCWlmIChyZXQpCisJ CWdvdG8gb3V0X3VubG9jazsKKwogCXJldCA9IGk5MTVfZ2VtX2luaXRfdXNlcnB0cihkZXYpOwog CWlmIChyZXQpCiAJCWdvdG8gb3V0X3VubG9jazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2k5MTVfc2NoZWR1bGVyLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3NjaGVk dWxlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlMmM1OTAKLS0tIC9k ZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3NjaGVkdWxlci5jCkBAIC0w LDAgKzEsNzYzIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE0IEludGVsIENvcnBvcmF0aW9u CisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRv IGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNz b2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFs IGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBs aW1pdGF0aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVi bGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0 aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogU29mdHdh cmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0 aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNz aW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0CisgKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGlu Y2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlCisgKiBT b2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9V VCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5H IEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisg KiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAg SU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJF IExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdI RVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lO RworICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1Ig VEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUworICogSU4gVEhFIFNPRlRXQVJFLgorICoKKyAqLwor CisjaW5jbHVkZSAiaTkxNV9kcnYuaCIKKyNpbmNsdWRlICJpbnRlbF9kcnYuaCIKKyNpbmNsdWRl ICJpOTE1X3NjaGVkdWxlci5oIgorCitzdGF0aWMgaW50ICAgICAgICAgaTkxNV9zY2hlZHVsZXJf Zmx5X25vZGUoc3RydWN0IGk5MTVfc2NoZWR1bGVyX3F1ZXVlX2VudHJ5ICpub2RlKTsKK3N0YXRp YyBpbnQgICAgICAgICBpOTE1X3NjaGVkdWxlcl9yZW1vdmVfZGVwZW5kZW50KHN0cnVjdCBpOTE1 X3NjaGVkdWxlciAqc2NoZWR1bGVyLAorCQkJCQkJICAgc3RydWN0IGk5MTVfc2NoZWR1bGVyX3F1 ZXVlX2VudHJ5ICpyZW1vdmUpOworc3RhdGljIGludCAgICAgICAgIGk5MTVfc2NoZWR1bGVyX3N1 Ym1pdChzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpyaW5nLAorCQkJCQkgYm9vbCBpc19sb2NrZWQp Oworc3RhdGljIHVpbnQzMl90ICAgIGk5MTVfc2NoZWR1bGVyX2NvdW50X2ZseWluZyhzdHJ1Y3Qg aTkxNV9zY2hlZHVsZXIgKnNjaGVkdWxlciwKKwkJCQkJICAgICAgIHN0cnVjdCBpbnRlbF9lbmdp bmVfY3MgKnJpbmcpOworc3RhdGljIHZvaWQgICAgICAgIGk5MTVfc2NoZWR1bGVyX3ByaW9yaXR5 X2J1bXBfY2xlYXIoc3RydWN0IGk5MTVfc2NoZWR1bGVyICpzY2hlZHVsZXIpOworc3RhdGljIGlu dCAgICAgICAgIGk5MTVfc2NoZWR1bGVyX3ByaW9yaXR5X2J1bXAoc3RydWN0IGk5MTVfc2NoZWR1 bGVyICpzY2hlZHVsZXIsCisJCQkJCQlzdHJ1Y3QgaTkxNV9zY2hlZHVsZXJfcXVldWVfZW50cnkg KnRhcmdldCwKKwkJCQkJCXVpbnQzMl90IGJ1bXApOworCitpbnQgaTkxNV9zY2hlZHVsZXJfaW5p dChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpk ZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IGk5MTVfc2NoZWR1bGVyICAgKnNj aGVkdWxlciA9IGRldl9wcml2LT5zY2hlZHVsZXI7CisJaW50ICAgICAgICAgICAgICAgICAgICAg cjsKKworCWlmIChzY2hlZHVsZXIpCisJCXJldHVybiAwOworCisJc2NoZWR1bGVyID0ga3phbGxv YyhzaXplb2YoKnNjaGVkdWxlciksIEdGUF9LRVJORUwpOworCWlmICghc2NoZWR1bGVyKQorCQly ZXR1cm4gLUVOT01FTTsKKworCXNwaW5fbG9ja19pbml0KCZzY2hlZHVsZXItPmxvY2spOworCisJ Zm9yIChyID0gMDsgciA8IEk5MTVfTlVNX1JJTkdTOyByKyspCisJCUlOSVRfTElTVF9IRUFEKCZz Y2hlZHVsZXItPm5vZGVfcXVldWVbcl0pOworCisJLyogRGVmYXVsdCB0dW5pbmcgdmFsdWVzOiAq LworCXNjaGVkdWxlci0+cHJpb3JpdHlfbGV2ZWxfbWluICAgICA9IC0xMDIzOworCXNjaGVkdWxl ci0+cHJpb3JpdHlfbGV2ZWxfbWF4ICAgICA9IDEwMjM7CisJc2NoZWR1bGVyLT5wcmlvcml0eV9s ZXZlbF9wcmVlbXB0ID0gOTAwOworCXNjaGVkdWxlci0+bWluX2ZseWluZyAgICAgICAgICAgICA9 IDI7CisKKwlkZXZfcHJpdi0+c2NoZWR1bGVyID0gc2NoZWR1bGVyOworCisJcmV0dXJuIDA7Cit9 CisKK3N0YXRpYyB2b2lkIGk5MTVfZ2VuZXJhdGVfZGVwZW5kZW5jaWVzKHN0cnVjdCBpOTE1X3Nj aGVkdWxlciAqc2NoZWR1bGVyLAorCQkJCSAgICAgICBzdHJ1Y3QgaTkxNV9zY2hlZHVsZXJfcXVl dWVfZW50cnkgKm5vZGUsCisJCQkJICAgICAgIHVpbnQzMl90IHJpbmcpCit7CisJc3RydWN0IGk5 MTVfc2NoZWR1bGVyX29ial9lbnRyeSAqdGhpcywgKnRoYXQ7CisJc3RydWN0IGk5MTVfc2NoZWR1 bGVyX3F1ZXVlX2VudHJ5ICAqdGVzdDsKKwlpbnQgICAgICAgICAgICAgICAgIGksIGo7CisJYm9v bCAgICAgICAgICAgICAgICBmb3VuZDsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkodGVzdCwgJnNj aGVkdWxlci0+bm9kZV9xdWV1ZVtyaW5nXSwgbGluaykgeworCQlpZiAoSTkxNV9TUVNfSVNfQ09N UExFVEUodGVzdCkpCisJCQljb250aW51ZTsKKworCQkvKgorCQkgKiBCYXRjaGVzIG9uIHRoZSBz YW1lIHJpbmcgZm9yIHRoZSBzYW1lCisJCSAqIGNvbnRleHQgbXVzdCBiZSBrZXB0IGluIG9yZGVy LgorCQkgKi8KKwkJZm91bmQgPSAobm9kZS0+cGFyYW1zLmN0eCA9PSB0ZXN0LT5wYXJhbXMuY3R4 KSAmJgorCQkJKG5vZGUtPnBhcmFtcy5yaW5nID09IHRlc3QtPnBhcmFtcy5yaW5nKTsKKworCQlp ZiAoZm91bmQpCisJCQlnb3RvIGRlcGVuZHM7CisKKwkJLyoKKwkJICogQmF0Y2hlcyB3b3JraW5n IG9uIHRoZSBzYW1lIG9iamVjdHMgbXVzdAorCQkgKiBiZSBrZXB0IGluIG9yZGVyLgorCQkgKi8K KwkJZm9yIChpID0gMDsgKGkgPCBub2RlLT5udW1fb2JqcykgJiYgIWZvdW5kOyBpKyspIHsKKwkJ CXRoaXMgPSBub2RlLT5zYXZlZF9vYmplY3RzICsgaTsKKworCQkJZm9yIChqID0gMDsgaiA8IHRl c3QtPm51bV9vYmpzOyBqKyspIHsKKwkJCQl0aGF0ID0gdGVzdC0+c2F2ZWRfb2JqZWN0cyArIGo7 CisKKwkJCQlpZiAodGhpcy0+b2JqICE9IHRoYXQtPm9iaikKKwkJCQkJY29udGludWU7CisKKwkJ CQkvKiBPbmx5IG5lZWQgdG8gd29ycnkgYWJvdXQgd3JpdGVzICovCisJCQkJaWYgKHRoaXMtPnJl YWRfb25seSAmJiB0aGF0LT5yZWFkX29ubHkpCisJCQkJCWNvbnRpbnVlOworCisJCQkJZm91bmQg PSB0cnVlOworCQkJCWJyZWFrOworCQkJfQorCQl9CisKKwkJaWYgKCFmb3VuZCkKKwkJCWNvbnRp bnVlOworCitkZXBlbmRzOgorCQlub2RlLT5kZXBfbGlzdFtub2RlLT5udW1fZGVwc10gPSB0ZXN0 OworCQlub2RlLT5udW1fZGVwcysrOworCX0KK30KKworaW50IGk5MTVfc2NoZWR1bGVyX3F1ZXVl X2V4ZWNidWZmZXIoc3RydWN0IGk5MTVfc2NoZWR1bGVyX3F1ZXVlX2VudHJ5ICpxZSkKK3sKKwlz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBxZS0+cGFyYW1zLmRldi0+ZGV2X3By aXZhdGU7CisJc3RydWN0IGk5MTVfc2NoZWR1bGVyICAgKnNjaGVkdWxlciA9IGRldl9wcml2LT5z Y2hlZHVsZXI7CisJc3RydWN0IGludGVsX2VuZ2luZV9jcyAgKnJpbmcgPSBxZS0+cGFyYW1zLnJp bmc7CisJc3RydWN0IGk5MTVfc2NoZWR1bGVyX3F1ZXVlX2VudHJ5ICAqbm9kZTsKKwlzdHJ1Y3Qg aTkxNV9zY2hlZHVsZXJfcXVldWVfZW50cnkgICp0ZXN0OworCXVuc2lnbmVkIGxvbmcgICAgICAg ZmxhZ3M7CisJYm9vbCAgICAgICAgICAgICAgICBub3RfZmx5aW5nOworCWludCAgICAgICAgICAg ICAgICAgaSwgcjsKKwlpbnQgICAgICAgICAgICAgICAgIGluY29tcGxldGUgPSAwOworCisJQlVH X09OKCFzY2hlZHVsZXIpOworCisJaWYgKDEvKmk5MTUuc2NoZWR1bGVyX292ZXJyaWRlICYgaTkx NV9zb19kaXJlY3Rfc3VibWl0Ki8pIHsKKwkJaW50IHJldDsKKworCQlzY2hlZHVsZXItPmZsYWdz W3FlLT5wYXJhbXMucmluZy0+aWRdIHw9IGk5MTVfc2Zfc3VibWl0dGluZzsKKwkJcmV0ID0gZGV2 X3ByaXYtPmd0LmV4ZWNidWZfZmluYWwoJnFlLT5wYXJhbXMpOworCQlzY2hlZHVsZXItPmZsYWdz W3FlLT5wYXJhbXMucmluZy0+aWRdICY9IH5pOTE1X3NmX3N1Ym1pdHRpbmc7CisKKwkJLyoKKwkJ ICogRG9uJ3QgZG8gYW55IGNsZWFuIHVwIG9uIGZhaWx1cmUgYmVjYXVzZSB0aGUgY2FsbGVyIHdp bGwKKwkJICogZG8gaXQgYWxsIGFueXdheS4KKwkJICovCisJCWlmIChyZXQpCisJCQlyZXR1cm4g cmV0OworCisJCS8qIEZyZWUgZXZlcnl0aGluZyB0aGF0IGlzIG93bmVkIGJ5IHRoZSBRRSBzdHJ1 Y3R1cmU6ICovCisJCWtmcmVlKHFlLT5wYXJhbXMuY2xpcHJlY3RzKTsKKwkJaWYgKHFlLT5wYXJh bXMuZGlzcGF0Y2hfZmxhZ3MgJiBJOTE1X0RJU1BBVENIX1NFQ1VSRSkKKwkJCWk5MTVfZ2VtX2V4 ZWNidWZmX3JlbGVhc2VfYmF0Y2hfb2JqKHFlLT5wYXJhbXMuYmF0Y2hfb2JqKTsKKworCQlyZXR1 cm4gMDsKKwl9CisKKwlub2RlID0ga21hbGxvYyhzaXplb2YoKm5vZGUpLCBHRlBfS0VSTkVMKTsK KwlpZiAoIW5vZGUpCisJCXJldHVybiAtRU5PTUVNOworCisJKm5vZGUgPSAqcWU7CisJSU5JVF9M SVNUX0hFQUQoJm5vZGUtPmxpbmspOworCW5vZGUtPnN0YXR1cyA9IGk5MTVfc3FzX3F1ZXVlZDsK Kwlub2RlLT5zdGFtcCAgPSBqaWZmaWVzOworCWk5MTVfZ2VtX3JlcXVlc3RfcmVmZXJlbmNlKG5v ZGUtPnBhcmFtcy5yZXF1ZXN0KTsKKworCS8qIE5lZWQgdG8gZGV0ZXJtaW5lIHRoZSBudW1iZXIg b2YgaW5jb21wbGV0ZSBlbnRyaWVzIGluIHRoZSBsaXN0IGFzCisJICogdGhhdCB3aWxsIGJlIHRo ZSBtYXhpbXVtIHNpemUgb2YgdGhlIGRlcGVuZGVuY3kgbGlzdC4KKwkgKgorCSAqIE5vdGUgdGhh dCB0aGUgYWxsb2NhdGlvbiBtdXN0IG5vdCBiZSBtYWRlIHdpdGggdGhlIHNwaW5sb2NrIGFjcXVp cmVkCisJICogYXMga21hbGxvYyBjYW4gc2xlZXAuIEhvd2V2ZXIsIHRoZSB1bmxvY2svcmVsb2Nr IGlzIHNhZmUgYmVjYXVzZSBubworCSAqIG5ldyBlbnRyaWVzIGNhbiBiZSBxdWV1ZWQgdXAgZHVy aW5nIHRoZSB1bmxvY2sgYXMgdGhlIGk5MTUgZHJpdmVyCisJICogbXV0ZXggaXMgc3RpbGwgaGVs ZC4gRW50cmllcyBjb3VsZCBiZSByZW1vdmVkIGZyb20gdGhlIGxpc3QgYnV0IHRoYXQKKwkgKiBq dXN0IG1lYW5zIHRoZSBkZXBfbGlzdCB3aWxsIGJlIG92ZXItYWxsb2NhdGVkIHdoaWNoIGlzIGZp bmUuCisJICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJnNjaGVkdWxlci0+bG9jaywgZmxhZ3MpOwor CWZvciAociA9IDA7IHIgPCBJOTE1X05VTV9SSU5HUzsgcisrKSB7CisJCWxpc3RfZm9yX2VhY2hf ZW50cnkodGVzdCwgJnNjaGVkdWxlci0+bm9kZV9xdWV1ZVtyXSwgbGluaykgeworCQkJaWYgKEk5 MTVfU1FTX0lTX0NPTVBMRVRFKHRlc3QpKQorCQkJCWNvbnRpbnVlOworCisJCQlpbmNvbXBsZXRl Kys7CisJCX0KKwl9CisKKwkvKiBUZW1wb3JhcmlseSB1bmxvY2sgdG8gYWxsb2NhdGUgbWVtb3J5 OiAqLworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNjaGVkdWxlci0+bG9jaywgZmxhZ3MpOwor CWlmIChpbmNvbXBsZXRlKSB7CisJCW5vZGUtPmRlcF9saXN0ID0ga21hbGxvYyhzaXplb2Yobm9k ZS0+ZGVwX2xpc3RbMF0pICogaW5jb21wbGV0ZSwKKwkJCQkJIEdGUF9LRVJORUwpOworCQlpZiAo IW5vZGUtPmRlcF9saXN0KSB7CisJCQlrZnJlZShub2RlKTsKKwkJCXJldHVybiAtRU5PTUVNOwor CQl9CisJfSBlbHNlCisJCW5vZGUtPmRlcF9saXN0ID0gTlVMTDsKKworCXNwaW5fbG9ja19pcnFz YXZlKCZzY2hlZHVsZXItPmxvY2ssIGZsYWdzKTsKKwlub2RlLT5udW1fZGVwcyA9IDA7CisKKwlp ZiAobm9kZS0+ZGVwX2xpc3QpIHsKKwkJZm9yIChyID0gMDsgciA8IEk5MTVfTlVNX1JJTkdTOyBy KyspCisJCQlpOTE1X2dlbmVyYXRlX2RlcGVuZGVuY2llcyhzY2hlZHVsZXIsIG5vZGUsIHIpOwor CisJCUJVR19PTihub2RlLT5udW1fZGVwcyA+IGluY29tcGxldGUpOworCX0KKworCWlmIChub2Rl LT5wcmlvcml0eSA+IHNjaGVkdWxlci0+cHJpb3JpdHlfbGV2ZWxfbWF4KQorCQlub2RlLT5wcmlv cml0eSA9IHNjaGVkdWxlci0+cHJpb3JpdHlfbGV2ZWxfbWF4OworCWVsc2UgaWYgKG5vZGUtPnBy aW9yaXR5IDwgc2NoZWR1bGVyLT5wcmlvcml0eV9sZXZlbF9taW4pCisJCW5vZGUtPnByaW9yaXR5 ID0gc2NoZWR1bGVyLT5wcmlvcml0eV9sZXZlbF9taW47CisKKwlpZiAoKG5vZGUtPnByaW9yaXR5 ID4gMCkgJiYgbm9kZS0+bnVtX2RlcHMpIHsKKwkJaTkxNV9zY2hlZHVsZXJfcHJpb3JpdHlfYnVt cF9jbGVhcihzY2hlZHVsZXIpOworCisJCWZvciAoaSA9IDA7IGkgPCBub2RlLT5udW1fZGVwczsg aSsrKQorCQkJaTkxNV9zY2hlZHVsZXJfcHJpb3JpdHlfYnVtcChzY2hlZHVsZXIsCisJCQkJCW5v ZGUtPmRlcF9saXN0W2ldLCBub2RlLT5wcmlvcml0eSk7CisJfQorCisJbGlzdF9hZGRfdGFpbCgm bm9kZS0+bGluaywgJnNjaGVkdWxlci0+bm9kZV9xdWV1ZVtyaW5nLT5pZF0pOworCisJbm90X2Zs eWluZyA9IGk5MTVfc2NoZWR1bGVyX2NvdW50X2ZseWluZyhzY2hlZHVsZXIsIHJpbmcpIDwKKwkJ CQkJCSBzY2hlZHVsZXItPm1pbl9mbHlpbmc7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZz Y2hlZHVsZXItPmxvY2ssIGZsYWdzKTsKKworCWlmIChub3RfZmx5aW5nKQorCQlpOTE1X3NjaGVk dWxlcl9zdWJtaXQocmluZywgdHJ1ZSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBp OTE1X3NjaGVkdWxlcl9mbHlfbm9kZShzdHJ1Y3QgaTkxNV9zY2hlZHVsZXJfcXVldWVfZW50cnkg Km5vZGUpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gbm9kZS0+cGFy YW1zLmRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IGk5MTVfc2NoZWR1bGVyICAgKnNjaGVkdWxl ciA9IGRldl9wcml2LT5zY2hlZHVsZXI7CisJc3RydWN0IGludGVsX2VuZ2luZV9jcyAgKnJpbmc7 CisKKwlCVUdfT04oIXNjaGVkdWxlcik7CisJQlVHX09OKCFub2RlKTsKKwlCVUdfT04obm9kZS0+ c3RhdHVzICE9IGk5MTVfc3FzX3BvcHBlZCk7CisKKwlyaW5nID0gbm9kZS0+cGFyYW1zLnJpbmc7 CisKKwkvKiBBZGQgdGhlIG5vZGUgKHdoaWNoIHNob3VsZCBjdXJyZW50bHkgYmUgaW4gc3RhdGUg bm9uZSkgdG8gdGhlIGZyb250CisJICogb2YgdGhlIHF1ZXVlLiBUaGlzIGVuc3VyZSB0aGF0IGZs eWluZyBub2RlcyBhcmUgYWx3YXlzIGhlbGQgaW4KKwkgKiBoYXJkd2FyZSBzdWJtaXNzaW9uIG9y ZGVyLiAqLworCWxpc3RfYWRkKCZub2RlLT5saW5rLCAmc2NoZWR1bGVyLT5ub2RlX3F1ZXVlW3Jp bmctPmlkXSk7CisKKwlub2RlLT5zdGF0dXMgPSBpOTE1X3Nxc19mbHlpbmc7CisKKwlpZiAoIShz Y2hlZHVsZXItPmZsYWdzW3JpbmctPmlkXSAmIGk5MTVfc2ZfaW50ZXJydXB0c19lbmFibGVkKSkg eworCQlib29sICAgIHN1Y2Nlc3MgPSB0cnVlOworCisJCXN1Y2Nlc3MgPSByaW5nLT5pcnFfZ2V0 KHJpbmcpOworCQlpZiAoc3VjY2VzcykKKwkJCXNjaGVkdWxlci0+ZmxhZ3NbcmluZy0+aWRdIHw9 IGk5MTVfc2ZfaW50ZXJydXB0c19lbmFibGVkOworCQllbHNlCisJCQlyZXR1cm4gLUVJTlZBTDsK Kwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIE5vZGVzIGFyZSBjb25zaWRlcmVkIHZhbGlk IGRlcGVuZGVuY2llcyBpZiB0aGV5IGFyZSBxdWV1ZWQgb24gYW55IHJpbmcgb3IKKyAqIGlmIHRo ZXkgYXJlIGluIGZsaWdodCBvbiBhIGRpZmZlcmVudCByaW5nLiBJbiBmbGlnaHQgb24gdGhlIHNh bWUgcmluZyBpcyBubworICogbG9uZ2VyIGludGVyZXN0aW5nIGZvciBub24tcHJlbXB0aXZlIG5v ZGVzIGFzIHRoZSByaW5nIHNlcmlhbGlzZXMgZXhlY3V0aW9uLgorICogRm9yIHByZS1lbXB0aW5n IG5vZGVzLCBhbGwgaW4gZmxpZ2h0IGRlcGVuZGVuY2llcyBhcmUgdmFsaWQgYXMgdGhleSBtdXN0 IG5vdAorICogYmUganVtcGVkIGJ5IHRoZSBhY3Qgb2YgcHJlLWVtcHRpbmcuCisgKgorICogQW55 dGhpbmcgdGhhdCBpcyBuZWl0aGVyIHF1ZXVlZCBub3IgZmx5aW5nIGlzIHVuaW50ZXJlc3Rpbmcu CisgKi8KK3N0YXRpYyBpbmxpbmUgYm9vbCBpOTE1X3NjaGVkdWxlcl9pc19kZXBlbmRlbmN5X3Zh bGlkKAorCQkJc3RydWN0IGk5MTVfc2NoZWR1bGVyX3F1ZXVlX2VudHJ5ICpub2RlLCB1aW50MzJf dCBpZHgpCit7CisJc3RydWN0IGk5MTVfc2NoZWR1bGVyX3F1ZXVlX2VudHJ5ICpkZXA7CisKKwlk ZXAgPSBub2RlLT5kZXBfbGlzdFtpZHhdOworCWlmICghZGVwKQorCQlyZXR1cm4gZmFsc2U7CisK KwlpZiAoSTkxNV9TUVNfSVNfUVVFVUVEKGRlcCkpCisJCXJldHVybiB0cnVlOworCisJaWYgKEk5 MTVfU1FTX0lTX0ZMWUlORyhkZXApKSB7CisJCWlmIChub2RlLT5wYXJhbXMucmluZyAhPSBkZXAt PnBhcmFtcy5yaW5nKQorCQkJcmV0dXJuIHRydWU7CisJfQorCisJcmV0dXJuIGZhbHNlOworfQor CitzdGF0aWMgdWludDMyX3QgaTkxNV9zY2hlZHVsZXJfY291bnRfZmx5aW5nKHN0cnVjdCBpOTE1 X3NjaGVkdWxlciAqc2NoZWR1bGVyLAorCQkJCQkgICAgc3RydWN0IGludGVsX2VuZ2luZV9jcyAq cmluZykKK3sKKwlzdHJ1Y3QgaTkxNV9zY2hlZHVsZXJfcXVldWVfZW50cnkgKm5vZGU7CisJdWlu dDMyX3QgICAgICAgICAgICAgICAgICAgICAgICAgIGZseWluZyA9IDA7CisKKwlsaXN0X2Zvcl9l YWNoX2VudHJ5KG5vZGUsICZzY2hlZHVsZXItPm5vZGVfcXVldWVbcmluZy0+aWRdLCBsaW5rKQor CQlpZiAoSTkxNV9TUVNfSVNfRkxZSU5HKG5vZGUpKQorCQkJZmx5aW5nKys7CisKKwlyZXR1cm4g Zmx5aW5nOworfQorCisvKiBBZGQgYSBwb3BwZWQgbm9kZSBiYWNrIGluIHRvIHRoZSBxdWV1ZS4g Rm9yIGV4YW1wbGUsIGJlY2F1c2UgdGhlIHJpbmcgd2FzCisgKiBodW5nIHdoZW4gZXhlY2ZpbmFs KCkgd2FzIGNhbGxlZCBhbmQgdGh1cyB0aGUgcmluZyBzdWJtaXNzaW9uIG5lZWRzIHRvIGJlCisg KiByZXRyaWVkIGxhdGVyLiAqLworc3RhdGljIHZvaWQgaTkxNV9zY2hlZHVsZXJfbm9kZV9yZXF1 ZXVlKHN0cnVjdCBpOTE1X3NjaGVkdWxlcl9xdWV1ZV9lbnRyeSAqbm9kZSkKK3sKKwlCVUdfT04o IW5vZGUpOworCUJVR19PTighSTkxNV9TUVNfSVNfRkxZSU5HKG5vZGUpKTsKKworCW5vZGUtPnN0 YXR1cyA9IGk5MTVfc3FzX3F1ZXVlZDsKKwlub2RlLT5wYXJhbXMucmVxdWVzdC0+c2Vxbm8gPSAw OworfQorCisvKiBHaXZlIHVwIG9uIGEgbm9kZSBjb21wbGV0ZWx5LiBGb3IgZXhhbXBsZSwgYmVj YXVzZSBpdCBpcyBjYXVzaW5nIHRoZQorICogcmluZyB0byBoYW5nIG9yIGlzIHVzaW5nIHNvbWUg cmVzb3VyY2UgdGhhdCBubyBsb25nZXIgZXhpc3RzLiAqLworc3RhdGljIHZvaWQgaTkxNV9zY2hl ZHVsZXJfbm9kZV9raWxsKHN0cnVjdCBpOTE1X3NjaGVkdWxlcl9xdWV1ZV9lbnRyeSAqbm9kZSkK K3sKKwlCVUdfT04oIW5vZGUpOworCUJVR19PTihJOTE1X1NRU19JU19DT01QTEVURShub2RlKSk7 CisKKwlub2RlLT5zdGF0dXMgPSBpOTE1X3Nxc19kZWFkOworfQorCisvKgorICogQSBzZXF1ZW5j ZSBudW1iZXIgaGFzIHBvcHBlZCBvdXQgb2YgdGhlIGhhcmR3YXJlIGFuZCB0aGUgcmVxdWVzdCBo YW5kbGluZworICogY29kZSBoYXMgbWFwcGVkIGl0IGJhY2sgdG8gYSByZXF1ZXN0IGFuZCB3aWxs IG1hcmsgdGhhdCByZXF1ZXN0IGNvbXBsZXRlLgorICogSXQgYWxzbyBjYWxscyB0aGlzIGZ1bmN0 aW9uIHRvIG5vdGlmeSB0aGUgc2NoZWR1bGVyIGFib3V0IHRoZSBjb21wbGV0aW9uCisgKiBzbyB0 aGUgc2NoZWR1bGVyJ3Mgbm9kZSBjYW4gYmUgdXBkYXRlZCBhcHByb3ByaWF0ZWx5LgorICogUmV0 dXJucyB0cnVlIGlmIHRoZSByZXF1ZXN0IGlzIHNjaGVkdWxlciBtYW5hZ2VkLCBmYWxzZSBpZiBu b3QuCisgKi8KK2Jvb2wgaTkxNV9zY2hlZHVsZXJfbm90aWZ5X3JlcXVlc3Qoc3RydWN0IGRybV9p OTE1X2dlbV9yZXF1ZXN0ICpyZXEpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9w cml2ICA9IHRvX2k5MTUocmVxLT5yaW5nLT5kZXYpOworCXN0cnVjdCBpOTE1X3NjaGVkdWxlciAg ICpzY2hlZHVsZXIgPSBkZXZfcHJpdi0+c2NoZWR1bGVyOworCS8qIFhYWDogTmVlZCB0byBtYXAg YmFjayBmcm9tIHJlcXVlc3QgdG8gbm9kZSAqLworCXN0cnVjdCBpOTE1X3NjaGVkdWxlcl9xdWV1 ZV9lbnRyeSAqbm9kZSA9IE5VTEw7CisJdW5zaWduZWQgbG9uZyAgICAgICBmbGFnczsKKworCWlm ICghbm9kZSkKKwkJcmV0dXJuIGZhbHNlOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnNjaGVkdWxl ci0+bG9jaywgZmxhZ3MpOworCisJV0FSTl9PTighSTkxNV9TUVNfSVNfRkxZSU5HKG5vZGUpKTsK KworCS8qIE5vZGUgd2FzIGluIGZsaWdodCBzbyBtYXJrIGl0IGFzIGNvbXBsZXRlLiAqLworCWlm IChyZXEtPmNhbmNlbGxlZCkKKwkJbm9kZS0+c3RhdHVzID0gaTkxNV9zcXNfZGVhZDsKKwllbHNl CisJCW5vZGUtPnN0YXR1cyA9IGk5MTVfc3FzX2NvbXBsZXRlOworCisJc3Bpbl91bmxvY2tfaXJx cmVzdG9yZSgmc2NoZWR1bGVyLT5sb2NrLCBmbGFncyk7CisKKwkvKgorCSAqIFhYWDogSWYgdGhl IGluLWZsaWdodCBsaXN0IGlzIG5vdyBlbXB0eSB0aGVuIG5ldyB3b3JrIHNob3VsZCBiZQorCSAq IHN1Ym1pdHRlZC4gSG93ZXZlciwgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbSBpbnRlcnJ1 cHQgY29udGV4dAorCSAqIGFuZCB0aHVzIGNhbm5vdCBhY3F1aXJlIG11dGV4IGxvY2tzIGFuZCBv dGhlciBzdWNoIHRoaW5ncyB0aGF0IGFyZQorCSAqIG5lY2Vzc2FyeSBmb3IgZnJlc2ggc3VibWlz c2lvbi4KKwkgKi8KKworCXJldHVybiB0cnVlOworfQorCitpbnQgaTkxNV9zY2hlZHVsZXJfcmVt b3ZlKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKnJpbmcpCit7CisJc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmRldl9wcml2ID0gcmluZy0+ZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3QgaTkxNV9z Y2hlZHVsZXIgICAqc2NoZWR1bGVyID0gZGV2X3ByaXYtPnNjaGVkdWxlcjsKKwlzdHJ1Y3QgaTkx NV9zY2hlZHVsZXJfcXVldWVfZW50cnkgICpub2RlLCAqbm9kZV9uZXh0OworCXVuc2lnbmVkIGxv bmcgICAgICAgZmxhZ3M7CisJaW50ICAgICAgICAgICAgICAgICBmbHlpbmcgPSAwLCBxdWV1ZWQg PSAwOworCWludCAgICAgICAgICAgICAgICAgcmV0ID0gMDsKKwlib29sICAgICAgICAgICAgICAg IGRvX3N1Ym1pdDsKKwl1aW50MzJfdCAgICAgICAgICAgIG1pbl9zZXFubzsKKwlzdHJ1Y3QgbGlz dF9oZWFkICAgIHJlbW92ZTsKKworCWlmIChsaXN0X2VtcHR5KCZzY2hlZHVsZXItPm5vZGVfcXVl dWVbcmluZy0+aWRdKSkKKwkJcmV0dXJuIDA7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmc2NoZWR1 bGVyLT5sb2NrLCBmbGFncyk7CisKKwkvKiAvaTkxNV9zY2hlZHVsZXJfZHVtcF9sb2NrZWQocmlu ZywgInJlbW92ZS9wcmUiKTsvICovCisKKwkvKgorCSAqIEluIHRoZSBjYXNlIHdoZXJlIHRoZSBz eXN0ZW0gaXMgaWRsZSwgc3RhcnRpbmcgJ21pbl9zZXFubycgZnJvbSBhIGJpZworCSAqIG51bWJl ciB3aWxsIGNhdXNlIGFsbCBub2RlcyB0byBiZSByZW1vdmVkIGFzIHRoZXkgYXJlIG5vdyBiYWNr IHRvCisJICogYmVpbmcgaW4tb3JkZXIuIEhvd2V2ZXIsIHRoaXMgd2lsbCBiZSBhIHByb2JsZW0g aWYgdGhlIGxhc3Qgb25lIHRvCisJICogY29tcGxldGUgd2FzIGFjdHVhbGx5IG91dC1vZi1vcmRl ciBhcyB0aGUgcmluZyBzZXFubyB2YWx1ZSB3aWxsIGJlCisJICogbG93ZXIgdGhhbiBvbmUgb3Ig bW9yZSBjb21wbGV0ZWQgYnVmZmVycy4gVGh1cyBjb2RlIGxvb2tpbmcgZm9yIHRoZQorCSAqIGNv bXBsZXRpb24gb2Ygc2FpZCBidWZmZXJzIHdpbGwgd2FpdCBmb3JldmVyLgorCSAqIEluc3RlYWQs IHVzZSB0aGUgaGFyZHdhcmUgc2Vxbm8gYXMgdGhlIHN0YXJ0aW5nIHBvaW50LiBUaGlzIG1lYW5z CisJICogdGhhdCBzb21lIGJ1ZmZlcnMgbWlnaHQgYmUga2VwdCBhcm91bmQgZXZlbiBpbiBhIGNv bXBsZXRlbHkgaWRsZQorCSAqIHN5c3RlbSBidXQgaXQgc2hvdWxkIGd1YXJhbnRlZSB0aGF0IG5v LW9uZSBldmVyIGdldHMgY29uZnVzZWQgd2hlbgorCSAqIHdhaXRpbmcgZm9yIGJ1ZmZlciBjb21w bGV0aW9uLgorCSAqLworCW1pbl9zZXFubyA9IHJpbmctPmdldF9zZXFubyhyaW5nLCB0cnVlKTsK KworCWxpc3RfZm9yX2VhY2hfZW50cnkobm9kZSwgJnNjaGVkdWxlci0+bm9kZV9xdWV1ZVtyaW5n LT5pZF0sIGxpbmspIHsKKwkJaWYgKEk5MTVfU1FTX0lTX1FVRVVFRChub2RlKSkKKwkJCXF1ZXVl ZCsrOworCQllbHNlIGlmIChJOTE1X1NRU19JU19GTFlJTkcobm9kZSkpCisJCQlmbHlpbmcrKzsK KwkJZWxzZSBpZiAoSTkxNV9TUVNfSVNfQ09NUExFVEUobm9kZSkpCisJCQljb250aW51ZTsKKwor CQlpZiAobm9kZS0+cGFyYW1zLnJlcXVlc3QtPnNlcW5vID09IDApCisJCQljb250aW51ZTsKKwor CQlpZiAoIWk5MTVfc2Vxbm9fcGFzc2VkKG5vZGUtPnBhcmFtcy5yZXF1ZXN0LT5zZXFubywgbWlu X3NlcW5vKSkKKwkJCW1pbl9zZXFubyA9IG5vZGUtPnBhcmFtcy5yZXF1ZXN0LT5zZXFubzsKKwl9 CisKKwlJTklUX0xJU1RfSEVBRCgmcmVtb3ZlKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUo bm9kZSwgbm9kZV9uZXh0LCAmc2NoZWR1bGVyLT5ub2RlX3F1ZXVlW3JpbmctPmlkXSwgbGluaykg eworCQkvKgorCQkgKiBPbmx5IHJlbW92ZSBjb21wbGV0ZWQgbm9kZXMgd2hpY2ggaGF2ZSBhIGxv d2VyIHNlcW5vIHRoYW4KKwkJICogYWxsIHBlbmRpbmcgbm9kZXMuIFdoaWxlIHRoZXJlIGlzIHRo ZSBwb3NzaWJpbGl0eSBvZiB0aGUKKwkJICogcmluZydzIHNlcW5vIGNvdW50aW5nIGJhY2t3YXJk cywgYWxsIGhpZ2hlciBidWZmZXJzIG11c3QKKwkJICogYmUgcmVtZW1iZXJlZCBzbyB0aGF0IHRo ZSAnaTkxNV9zZXFub19wYXNzZWQoKScgdGVzdCBjYW4KKwkJICogcmVwb3J0IHRoYXQgdGhleSBo YXZlIGluIGZhY3QgcGFzc2VkLgorCQkgKgorCQkgKiBOQjogVGhpcyBpcyBub3QgdHJ1ZSBmb3Ig J2RlYWQnIG5vZGVzLiBUaGUgR1BVIHJlc2V0IGNhdXNlcworCQkgKiB0aGUgc29mdHdhcmUgc2Vx bm8gdG8gcmVzdGFydCBmcm9tIGl0cyBpbml0aWFsIHZhbHVlLiBUaHVzCisJCSAqIHRoZSBkZWFk IG5vZGVzIG11c3QgYmUgcmVtb3ZlZCBldmVuIHRob3VnaCB0aGVpciBzZXFubyB2YWx1ZXMKKwkJ ICogYXJlIHBvdGVudGlhbGx5IHZhc3RseSBncmVhdGVyIHRoYW4gdGhlIGN1cnJlbnQgcmluZyBz ZXFuby4KKwkJICovCisJCWlmICghSTkxNV9TUVNfSVNfQ09NUExFVEUobm9kZSkpCisJCQljb250 aW51ZTsKKworCQlpZiAobm9kZS0+c3RhdHVzICE9IGk5MTVfc3FzX2RlYWQpIHsKKwkJCWlmIChp OTE1X3NlcW5vX3Bhc3NlZChub2RlLT5wYXJhbXMucmVxdWVzdC0+c2Vxbm8sIG1pbl9zZXFubykg JiYKKwkJCSAgICAobm9kZS0+cGFyYW1zLnJlcXVlc3QtPnNlcW5vICE9IG1pbl9zZXFubykpCisJ CQkJY29udGludWU7CisJCX0KKworCQlsaXN0X2RlbCgmbm9kZS0+bGluayk7CisJCWxpc3RfYWRk KCZub2RlLT5saW5rLCAmcmVtb3ZlKTsKKworCQkvKiBTdHJpcCB0aGUgZGVwZW5kZW5jeSBpbmZv IHdoaWxlIHRoZSBtdXRleCBpcyBzdGlsbCBsb2NrZWQgKi8KKwkJaTkxNV9zY2hlZHVsZXJfcmVt b3ZlX2RlcGVuZGVudChzY2hlZHVsZXIsIG5vZGUpOworCisJCWNvbnRpbnVlOworCX0KKworCS8q CisJICogTm8gaWRlYSB3aHkgYnV0IHRoaXMgc2VlbXMgdG8gY2F1c2UgcHJvYmxlbXMgb2NjYXNp b25hbGx5LgorCSAqIE5vdGUgdGhhdCB0aGUgJ2lycV9wdXQnIGNvZGUgaXMgaW50ZXJuYWxseSBy ZWZlcmVuY2UgY291bnRlZAorCSAqIGFuZCBzcGluX2xvY2tlZCBzbyBpdCBzaG91bGQgYmUgc2Fm ZSB0byBjYWxsLgorCSAqLworCS8qaWYgKChzY2hlZHVsZXItPmZsYWdzW3JpbmctPmlkXSAmIGk5 MTVfc2ZfaW50ZXJydXB0c19lbmFibGVkKSAmJgorCSAgICAoZmlyc3RfZmxpZ2h0W3JpbmctPmlk XSA9PSBOVUxMKSkgeworCQlyaW5nLT5pcnFfcHV0KHJpbmcpOworCQlzY2hlZHVsZXItPmZsYWdz W3JpbmctPmlkXSAmPSB+aTkxNV9zZl9pbnRlcnJ1cHRzX2VuYWJsZWQ7CisJfSovCisKKwkvKiBM YXVuY2ggbW9yZSBwYWNrZXRzIG5vdz8gKi8KKwlkb19zdWJtaXQgPSAocXVldWVkID4gMCkgJiYg KGZseWluZyA8IHNjaGVkdWxlci0+bWluX2ZseWluZyk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0 b3JlKCZzY2hlZHVsZXItPmxvY2ssIGZsYWdzKTsKKworCWlmICghZG9fc3VibWl0ICYmIGxpc3Rf ZW1wdHkoJnJlbW92ZSkpCisJCXJldHVybiByZXQ7CisKKwltdXRleF9sb2NrKCZyaW5nLT5kZXYt PnN0cnVjdF9tdXRleCk7CisKKwlpZiAoZG9fc3VibWl0KQorCQlyZXQgPSBpOTE1X3NjaGVkdWxl cl9zdWJtaXQocmluZywgdHJ1ZSk7CisKKwl3aGlsZSAoIWxpc3RfZW1wdHkoJnJlbW92ZSkpIHsK KwkJbm9kZSA9IGxpc3RfZmlyc3RfZW50cnkoJnJlbW92ZSwgdHlwZW9mKCpub2RlKSwgbGluayk7 CisJCWxpc3RfZGVsKCZub2RlLT5saW5rKTsKKworCQkvKiBUaGUgYmF0Y2ggYnVmZmVyIG11c3Qg YmUgdW5waW5uZWQgYmVmb3JlIGl0IGlzIHVucmVmZXJlbmNlZAorCQkgKiBvdGhlcndpc2UgdGhl IHVucGluIGZhaWxzIHdpdGggYSBtaXNzaW5nIHZtYSE/ICovCisJCWlmIChub2RlLT5wYXJhbXMu ZGlzcGF0Y2hfZmxhZ3MgJiBJOTE1X0RJU1BBVENIX1NFQ1VSRSkKKwkJCWk5MTVfZ2VtX2V4ZWNi dWZmX3JlbGVhc2VfYmF0Y2hfb2JqKG5vZGUtPnBhcmFtcy5iYXRjaF9vYmopOworCisJCS8qIEZy ZWUgZXZlcnl0aGluZyB0aGF0IGlzIG93bmVkIGJ5IHRoZSBub2RlOiAqLworCQlpOTE1X2dlbV9y ZXF1ZXN0X3VucmVmZXJlbmNlKG5vZGUtPnBhcmFtcy5yZXF1ZXN0KTsKKwkJa2ZyZWUobm9kZS0+ cGFyYW1zLmNsaXByZWN0cyk7CisJCWtmcmVlKG5vZGUtPmRlcF9saXN0KTsKKwkJa2ZyZWUobm9k ZSk7CisJfQorCisJbXV0ZXhfdW5sb2NrKCZyaW5nLT5kZXYtPnN0cnVjdF9tdXRleCk7CisKKwly ZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBpOTE1X3NjaGVkdWxlcl9wcmlvcml0eV9idW1w X2NsZWFyKHN0cnVjdCBpOTE1X3NjaGVkdWxlciAqc2NoZWR1bGVyKQoreworCXN0cnVjdCBpOTE1 X3NjaGVkdWxlcl9xdWV1ZV9lbnRyeSAqbm9kZTsKKwlpbnQgaTsKKworCS8qCisJICogRW5zdXJl IGNpcmN1bGFyIGRlcGVuZGVuY2llcyBkb24ndCBjYXVzZSBwcm9ibGVtcyBhbmQgdGhhdCBhIGJ1 bXAKKwkgKiBieSBvYmplY3QgdXNhZ2Ugb25seSBidW1wcyBlYWNoIHVzaW5nIGJ1ZmZlciBvbmNl OgorCSAqLworCWZvciAoaSA9IDA7IGkgPCBJOTE1X05VTV9SSU5HUzsgaSsrKSB7CisJCWxpc3Rf Zm9yX2VhY2hfZW50cnkobm9kZSwgJnNjaGVkdWxlci0+bm9kZV9xdWV1ZVtpXSwgbGluaykKKwkJ CW5vZGUtPmJ1bXBlZCA9IGZhbHNlOworCX0KK30KKworc3RhdGljIGludCBpOTE1X3NjaGVkdWxl cl9wcmlvcml0eV9idW1wKHN0cnVjdCBpOTE1X3NjaGVkdWxlciAqc2NoZWR1bGVyLAorCQkJCQlz dHJ1Y3QgaTkxNV9zY2hlZHVsZXJfcXVldWVfZW50cnkgKnRhcmdldCwKKwkJCQkJdWludDMyX3Qg YnVtcCkKK3sKKwl1aW50MzJfdCBuZXdfcHJpb3JpdHk7CisJaW50ICAgICAgaSwgY291bnQ7CisK KwlpZiAodGFyZ2V0LT5wcmlvcml0eSA+PSBzY2hlZHVsZXItPnByaW9yaXR5X2xldmVsX21heCkK KwkJcmV0dXJuIDE7CisKKwlpZiAodGFyZ2V0LT5idW1wZWQpCisJCXJldHVybiAwOworCisJbmV3 X3ByaW9yaXR5ID0gdGFyZ2V0LT5wcmlvcml0eSArIGJ1bXA7CisJaWYgKChuZXdfcHJpb3JpdHkg PD0gdGFyZ2V0LT5wcmlvcml0eSkgfHwKKwkgICAgKG5ld19wcmlvcml0eSA+IHNjaGVkdWxlci0+ cHJpb3JpdHlfbGV2ZWxfbWF4KSkKKwkJdGFyZ2V0LT5wcmlvcml0eSA9IHNjaGVkdWxlci0+cHJp b3JpdHlfbGV2ZWxfbWF4OworCWVsc2UKKwkJdGFyZ2V0LT5wcmlvcml0eSA9IG5ld19wcmlvcml0 eTsKKworCWNvdW50ID0gMTsKKwl0YXJnZXQtPmJ1bXBlZCA9IHRydWU7CisKKwlmb3IgKGkgPSAw OyBpIDwgdGFyZ2V0LT5udW1fZGVwczsgaSsrKSB7CisJCWlmICghdGFyZ2V0LT5kZXBfbGlzdFtp XSkKKwkJCWNvbnRpbnVlOworCisJCWlmICh0YXJnZXQtPmRlcF9saXN0W2ldLT5idW1wZWQpCisJ CQljb250aW51ZTsKKworCQljb3VudCArPSBpOTE1X3NjaGVkdWxlcl9wcmlvcml0eV9idW1wKHNj aGVkdWxlciwKKwkJCQkJCSAgICAgIHRhcmdldC0+ZGVwX2xpc3RbaV0sCisJCQkJCQkgICAgICBi dW1wKTsKKwl9CisKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBpbnQgaTkxNV9zY2hlZHVs ZXJfcG9wX2Zyb21fcXVldWVfbG9ja2VkKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKnJpbmcsCisJ CQkJICAgIHN0cnVjdCBpOTE1X3NjaGVkdWxlcl9xdWV1ZV9lbnRyeSAqKnBvcF9ub2RlLAorCQkJ CSAgICB1bnNpZ25lZCBsb25nICpmbGFncykKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAg ICAgICAgICAgICpkZXZfcHJpdiA9IHJpbmctPmRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IGk5 MTVfc2NoZWR1bGVyICAgICAgICAgICAgICAqc2NoZWR1bGVyID0gZGV2X3ByaXYtPnNjaGVkdWxl cjsKKwlzdHJ1Y3QgaTkxNV9zY2hlZHVsZXJfcXVldWVfZW50cnkgICpiZXN0OworCXN0cnVjdCBp OTE1X3NjaGVkdWxlcl9xdWV1ZV9lbnRyeSAgKm5vZGU7CisJaW50ICAgICByZXQ7CisJaW50ICAg ICBpOworCWJvb2wJYW55X3F1ZXVlZDsKKwlib29sCWhhc19sb2NhbCwgaGFzX3JlbW90ZSwgb25s eV9yZW1vdGU7CisKKwkqcG9wX25vZGUgPSBOVUxMOworCXJldCA9IC1FTk9EQVRBOworCisJYW55 X3F1ZXVlZCA9IGZhbHNlOworCW9ubHlfcmVtb3RlID0gZmFsc2U7CisJYmVzdCA9IE5VTEw7CisK KwlsaXN0X2Zvcl9lYWNoX2VudHJ5KG5vZGUsICZzY2hlZHVsZXItPm5vZGVfcXVldWVbcmluZy0+ aWRdLCBsaW5rKSB7CisJCWlmICghSTkxNV9TUVNfSVNfUVVFVUVEKG5vZGUpKQorCQkJY29udGlu dWU7CisJCWFueV9xdWV1ZWQgPSB0cnVlOworCisJCWhhc19sb2NhbCAgPSBmYWxzZTsKKwkJaGFz X3JlbW90ZSA9IGZhbHNlOworCQlmb3IgKGkgPSAwOyBpIDwgbm9kZS0+bnVtX2RlcHM7IGkrKykg eworCQkJaWYgKCFpOTE1X3NjaGVkdWxlcl9pc19kZXBlbmRlbmN5X3ZhbGlkKG5vZGUsIGkpKQor CQkJCWNvbnRpbnVlOworCisJCQlpZiAobm9kZS0+ZGVwX2xpc3RbaV0tPnBhcmFtcy5yaW5nID09 IG5vZGUtPnBhcmFtcy5yaW5nKQorCQkJCWhhc19sb2NhbCA9IHRydWU7CisJCQllbHNlCisJCQkJ aGFzX3JlbW90ZSA9IHRydWU7CisJCX0KKworCQlpZiAoaGFzX3JlbW90ZSAmJiAhaGFzX2xvY2Fs KQorCQkJb25seV9yZW1vdGUgPSB0cnVlOworCisJCWlmICghaGFzX2xvY2FsICYmICFoYXNfcmVt b3RlKSB7CisJCQlpZiAoIWJlc3QgfHwKKwkJCSAgICAobm9kZS0+cHJpb3JpdHkgPiBiZXN0LT5w cmlvcml0eSkpCisJCQkJYmVzdCA9IG5vZGU7CisJCX0KKwl9CisKKwlpZiAoYmVzdCkgeworCQls aXN0X2RlbCgmYmVzdC0+bGluayk7CisKKwkJSU5JVF9MSVNUX0hFQUQoJmJlc3QtPmxpbmspOwor CQliZXN0LT5zdGF0dXMgID0gaTkxNV9zcXNfcG9wcGVkOworCisJCXJldCA9IDA7CisJfSBlbHNl IHsKKwkJLyogQ2FuIG9ubHkgZ2V0IGhlcmUgaWY6CisJCSAqIChhKSB0aGVyZSBhcmUgbm8gYnVm ZmVycyBpbiB0aGUgcXVldWUKKwkJICogKGIpIGFsbCBxdWV1ZWQgYnVmZmVycyBhcmUgZGVwZW5k ZW50IG9uIG90aGVyIGJ1ZmZlcnMKKwkJICogICAgIGUuZy4gb24gYSBidWZmZXIgdGhhdCBpcyBp biBmbGlnaHQgb24gYSBkaWZmZXJlbnQgcmluZworCQkgKi8KKwkJaWYgKG9ubHlfcmVtb3RlKSB7 CisJCQkvKiBUaGUgb25seSBkZXBlbmRlbnQgYnVmZmVycyBhcmUgb24gYW5vdGhlciByaW5nLiAq LworCQkJcmV0ID0gLUVBR0FJTjsKKwkJfSBlbHNlIGlmIChhbnlfcXVldWVkKSB7CisJCQkvKiBJ dCBzZWVtcyB0aGF0IHNvbWV0aGluZyBoYXMgZ29uZSBob3JyaWJseSB3cm9uZyEgKi8KKwkJCURS TV9FUlJPUigiQnJva2VuIGRlcGVuZGVuY3kgdHJhY2tpbmcgb24gcmluZyAlZCFcbiIsCisJCQkJ ICAoaW50KSByaW5nLT5pZCk7CisJCX0KKwl9CisKKwkvKiBpOTE1X3NjaGVkdWxlcl9kdW1wX3F1 ZXVlX3BvcChyaW5nLCBiZXN0KTsgKi8KKworCSpwb3Bfbm9kZSA9IGJlc3Q7CisJcmV0dXJuIHJl dDsKK30KKworc3RhdGljIGludCBpOTE1X3NjaGVkdWxlcl9zdWJtaXQoc3RydWN0IGludGVsX2Vu Z2luZV9jcyAqcmluZywgYm9vbCB3YXNfbG9ja2VkKQoreworCXN0cnVjdCBkcm1fZGV2aWNlICAg KmRldiA9IHJpbmctPmRldjsKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBk ZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBpOTE1X3NjaGVkdWxlciAgICpzY2hlZHVsZXIgPSBk ZXZfcHJpdi0+c2NoZWR1bGVyOworCXN0cnVjdCBpOTE1X3NjaGVkdWxlcl9xdWV1ZV9lbnRyeSAg Km5vZGU7CisJdW5zaWduZWQgbG9uZyAgICAgICBmbGFnczsKKwlpbnQgICAgICAgICAgICAgICAg IHJldCA9IDAsIGNvdW50ID0gMDsKKworCWlmICghd2FzX2xvY2tlZCkgeworCQlyZXQgPSBpOTE1 X211dGV4X2xvY2tfaW50ZXJydXB0aWJsZShkZXYpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJl dDsKKwl9CisKKwlCVUdfT04oIW11dGV4X2lzX2xvY2tlZCgmZGV2LT5zdHJ1Y3RfbXV0ZXgpKTsK KworCXNwaW5fbG9ja19pcnFzYXZlKCZzY2hlZHVsZXItPmxvY2ssIGZsYWdzKTsKKworCS8qIEZp cnN0IHRpbWUgYXJvdW5kLCBjb21wbGFpbiBpZiBhbnl0aGluZyB1bmV4cGVjdGVkIG9jY3Vyczog Ki8KKwlyZXQgPSBpOTE1X3NjaGVkdWxlcl9wb3BfZnJvbV9xdWV1ZV9sb2NrZWQocmluZywgJm5v ZGUsICZmbGFncyk7CisJaWYgKHJldCkgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzY2hl ZHVsZXItPmxvY2ssIGZsYWdzKTsKKworCQlpZiAoIXdhc19sb2NrZWQpCisJCQltdXRleF91bmxv Y2soJmRldi0+c3RydWN0X211dGV4KTsKKworCQlyZXR1cm4gcmV0OworCX0KKworCWRvIHsKKwkJ QlVHX09OKCFub2RlKTsKKwkJQlVHX09OKG5vZGUtPnBhcmFtcy5yaW5nICE9IHJpbmcpOworCQlC VUdfT04obm9kZS0+c3RhdHVzICE9IGk5MTVfc3FzX3BvcHBlZCk7CisJCWNvdW50Kys7CisKKwkJ LyogVGhlIGNhbGwgdG8gcG9wIGFib3ZlIHdpbGwgaGF2ZSByZW1vdmVkIHRoZSBub2RlIGZyb20g dGhlCisJCSAqIGxpc3QuIFNvIGFkZCBpdCBiYWNrIGluIGFuZCBtYXJrIGl0IGFzIGluIGZsaWdo dC4gKi8KKwkJaTkxNV9zY2hlZHVsZXJfZmx5X25vZGUobm9kZSk7CisKKwkJc2NoZWR1bGVyLT5m bGFnc1tyaW5nLT5pZF0gfD0gaTkxNV9zZl9zdWJtaXR0aW5nOworCQlzcGluX3VubG9ja19pcnFy ZXN0b3JlKCZzY2hlZHVsZXItPmxvY2ssIGZsYWdzKTsKKwkJcmV0ID0gZGV2X3ByaXYtPmd0LmV4 ZWNidWZfZmluYWwoJm5vZGUtPnBhcmFtcyk7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZzY2hlZHVs ZXItPmxvY2ssIGZsYWdzKTsKKwkJc2NoZWR1bGVyLT5mbGFnc1tyaW5nLT5pZF0gJj0gfmk5MTVf c2Zfc3VibWl0dGluZzsKKworCQlpZiAocmV0KSB7CisJCQlpbnQgcmVxdWV1ZSA9IDE7CisKKwkJ CS8qIE9oIGRlYXIhIEVpdGhlciB0aGUgbm9kZSBpcyBicm9rZW4gb3IgdGhlIHJpbmcgaXMKKwkJ CSAqIGJ1c3kuIFNvIG5lZWQgdG8ga2lsbCB0aGUgbm9kZSBvciByZXF1ZXVlIGl0IGFuZCB0cnkK KwkJCSAqIGFnYWluIGxhdGVyIGFzIGFwcHJvcHJpYXRlLiAqLworCisJCQlzd2l0Y2ggKC1yZXQp IHsKKwkJCWNhc2UgRU5PREVWOgorCQkJY2FzZSBFTk9FTlQ6CisJCQkJLyogRmF0YWwgZXJyb3Jz LiBLaWxsIHRoZSBub2RlLiAqLworCQkJCXJlcXVldWUgPSAtMTsKKwkJCWJyZWFrOworCisJCQlj YXNlIEVBR0FJTjoKKwkJCWNhc2UgRUJVU1k6CisJCQljYXNlIEVJTzoKKwkJCWNhc2UgRU5PTUVN OgorCQkJY2FzZSBFUkVTVEFSVFNZUzoKKwkJCWNhc2UgRUlOVFI6CisJCQkJLyogU3VwcG9zZWRs eSByZWNvdmVyYWJsZSBlcnJvcnMuICovCisJCQlicmVhazsKKworCQkJZGVmYXVsdDoKKwkJCQlE Uk1fREVCVUdfRFJJVkVSKCI8JXM+IEdvdCB1bmV4cGVjdGVkIGVycm9yIGZyb20gZXhlY2ZpbmFs KCk6ICVkIVxuIiwKKwkJCQkJCSByaW5nLT5uYW1lLCByZXQpOworCQkJCS8qIEFzc3VtZSBpdCBp cyByZWNvdmVyYWJsZSBhbmQgaG9wZSBmb3IgdGhlIGJlc3QuICovCisJCQlicmVhazsKKwkJCX0K KworCQkJLyogQ2hlY2sgdGhhdCB0aGUgd2F0Y2hkb2cvcmVzZXQgY29kZSBoYXMgbm90IG51a2Vk CisJCQkgKiB0aGUgbm9kZSB3aGlsZSB3ZSB3ZXJlbid0IGxvb2tpbmc6ICovCisJCQlpZiAobm9k ZS0+c3RhdHVzID09IGk5MTVfc3FzX2RlYWQpCisJCQkJcmVxdWV1ZSA9IDA7CisKKwkJCWlmIChy ZXF1ZXVlID09IDEpIHsKKwkJCQlpOTE1X3NjaGVkdWxlcl9ub2RlX3JlcXVldWUobm9kZSk7CisJ CQkJLyogTm8gcG9pbnQgc3Bpbm5pbmcgaWYgdGhlIHJpbmcgaXMgY3VycmVudGx5CisJCQkJICog dW5hdmFpbGFibGUgc28ganVzdCBnaXZlIHVwIGFuZCBjb21lIGJhY2sKKwkJCQkgKiBsYXRlci4g Ki8KKwkJCQlicmVhazsKKwkJCX0gZWxzZSBpZiAocmVxdWV1ZSA9PSAtMSkKKwkJCQlpOTE1X3Nj aGVkdWxlcl9ub2RlX2tpbGwobm9kZSk7CisJCX0KKworCQkvKiBLZWVwIGxhdW5jaGluZyB1bnRp bCB0aGUgc2t5IGlzIHN1ZmZpY2llbnRseSBmdWxsLiAqLworCQlpZiAoaTkxNV9zY2hlZHVsZXJf Y291bnRfZmx5aW5nKHNjaGVkdWxlciwgcmluZykgPj0KKwkJCQkJCXNjaGVkdWxlci0+bWluX2Zs eWluZykKKwkJCWJyZWFrOworCisJCXJldCA9IGk5MTVfc2NoZWR1bGVyX3BvcF9mcm9tX3F1ZXVl X2xvY2tlZChyaW5nLCAmbm9kZSwgJmZsYWdzKTsKKwl9IHdoaWxlIChyZXQgPT0gMCk7CisKKwlz cGluX3VubG9ja19pcnFyZXN0b3JlKCZzY2hlZHVsZXItPmxvY2ssIGZsYWdzKTsKKworCWlmICgh d2FzX2xvY2tlZCkKKwkJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CisKKwkvKiBE b24ndCBjb21wbGFpbiBhYm91dCBub3QgYmVpbmcgYWJsZSB0byBzdWJtaXQgZXh0cmEgZW50cmll cyAqLworCWlmIChyZXQgPT0gLUVOT0RBVEEpCisJCXJldCA9IDA7CisKKwlyZXR1cm4gKHJldCA8 IDApID8gcmV0IDogY291bnQ7Cit9CisKK3N0YXRpYyBpbnQgaTkxNV9zY2hlZHVsZXJfcmVtb3Zl X2RlcGVuZGVudChzdHJ1Y3QgaTkxNV9zY2hlZHVsZXIgKnNjaGVkdWxlciwKKwkJCQkJICAgc3Ry dWN0IGk5MTVfc2NoZWR1bGVyX3F1ZXVlX2VudHJ5ICpyZW1vdmUpCit7CisJc3RydWN0IGk5MTVf c2NoZWR1bGVyX3F1ZXVlX2VudHJ5ICAqbm9kZTsKKwlpbnQgICAgIGksIHI7CisJaW50ICAgICBj b3VudCA9IDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgcmVtb3ZlLT5udW1fZGVwczsgaSsrKQorCQlp ZiAoKHJlbW92ZS0+ZGVwX2xpc3RbaV0pICYmCisJCSAgICAoIUk5MTVfU1FTX0lTX0NPTVBMRVRF KHJlbW92ZS0+ZGVwX2xpc3RbaV0pKSkKKwkJCWNvdW50Kys7CisJQlVHX09OKGNvdW50KTsKKwor CWZvciAociA9IDA7IHIgPCBJOTE1X05VTV9SSU5HUzsgcisrKSB7CisJCWxpc3RfZm9yX2VhY2hf ZW50cnkobm9kZSwgJnNjaGVkdWxlci0+bm9kZV9xdWV1ZVtyXSwgbGluaykgeworCQkJZm9yIChp ID0gMDsgaSA8IG5vZGUtPm51bV9kZXBzOyBpKyspIHsKKwkJCQlpZiAobm9kZS0+ZGVwX2xpc3Rb aV0gIT0gcmVtb3ZlKQorCQkJCQljb250aW51ZTsKKworCQkJCW5vZGUtPmRlcF9saXN0W2ldID0g TlVMTDsKKwkJCX0KKwkJfQorCX0KKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaTkxNV9zY2hlZHVsZXIuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5 MTVfc2NoZWR1bGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDBkYzdm MwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfc2NoZWR1bGVy LmgKQEAgLTAsMCArMSw5MSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNCBJbnRlbCBDb3Jw b3JhdGlvbgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hh cmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUg YW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICog dG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdp dGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVy Z2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3Bp ZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAq IFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5n IGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMg cGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAorICogcGFyYWdyYXBoKSBzaGFs bCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRo ZQorICogU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIs IFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElO Q0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM SVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdF TUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9M REVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklM SVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0Us IEFSSVNJTkcKKyAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRX QVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MKKyAqIElOIFRIRSBTT0ZUV0FSRS4KKyAq CisgKi8KKworI2lmbmRlZiBfSTkxNV9TQ0hFRFVMRVJfSF8KKyNkZWZpbmUgX0k5MTVfU0NIRURV TEVSX0hfCisKK2VudW0gaTkxNV9zY2hlZHVsZXJfcXVldWVfc3RhdHVzIHsKKwkvKiBMaW1ibzog Ki8KKwlpOTE1X3Nxc19ub25lID0gMCwKKwkvKiBOb3QgeWV0IHN1Ym1pdHRlZCB0byBoYXJkd2Fy ZTogKi8KKwlpOTE1X3Nxc19xdWV1ZWQsCisJLyogUG9wcGVkIGZyb20gcXVldWUsIHJlYWR5IHRv IGZseTogKi8KKwlpOTE1X3Nxc19wb3BwZWQsCisJLyogU2VudCB0byBoYXJkd2FyZSBmb3IgcHJv Y2Vzc2luZzogKi8KKwlpOTE1X3Nxc19mbHlpbmcsCisJLyogRmluaXNoZWQgcHJvY2Vzc2luZyBv biB0aGUgaGFyZHdhcmU6ICovCisJaTkxNV9zcXNfY29tcGxldGUsCisJLyogS2lsbGVkIGJ5IHdh dGNoZG9nIG9yIGNhdGFzdHJvcGhpYyBzdWJtaXNzaW9uIGZhaWx1cmU6ICovCisJaTkxNV9zcXNf ZGVhZCwKKwkvKiBMaW1pdCB2YWx1ZSBmb3IgdXNlIHdpdGggYXJyYXlzL2xvb3BzICovCisJaTkx NV9zcXNfTUFYCit9OworCisjZGVmaW5lIEk5MTVfU1FTX0lTX1FVRVVFRChub2RlKQkoKChub2Rl KS0+c3RhdHVzID09IGk5MTVfc3FzX3F1ZXVlZCkpCisjZGVmaW5lIEk5MTVfU1FTX0lTX0ZMWUlO Ryhub2RlKQkoKChub2RlKS0+c3RhdHVzID09IGk5MTVfc3FzX2ZseWluZykpCisjZGVmaW5lIEk5 MTVfU1FTX0lTX0NPTVBMRVRFKG5vZGUpCSgoKG5vZGUpLT5zdGF0dXMgPT0gaTkxNV9zcXNfY29t cGxldGUpIHx8IFwKKwkJCQkJICgobm9kZSktPnN0YXR1cyA9PSBpOTE1X3Nxc19kZWFkKSkKKwor c3RydWN0IGk5MTVfc2NoZWR1bGVyX29ial9lbnRyeSB7CisJc3RydWN0IGRybV9pOTE1X2dlbV9v YmplY3QgICAgICAgICAgKm9iajsKKwlib29sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICByZWFkX29ubHk7Cit9OworCitzdHJ1Y3QgaTkxNV9zY2hlZHVsZXJfcXVldWVfZW50cnkgewor CXN0cnVjdCBpOTE1X2V4ZWNidWZmZXJfcGFyYW1zICAgICAgIHBhcmFtczsKKwkvKiAtMTAyMyA9 IGxvd2VzdCBwcmlvcml0eSwgMCA9IGRlZmF1bHQsIDEwMjMgPSBoaWdoZXN0ICovCisJaW50MzJf dCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpb3JpdHk7CisJc3RydWN0IGk5MTVfc2No ZWR1bGVyX29ial9lbnRyeSAgICAgKnNhdmVkX29iamVjdHM7CisJaW50ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgbnVtX29ianM7CisJYm9vbCAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgYnVtcGVkOworCXN0cnVjdCBpOTE1X3NjaGVkdWxlcl9xdWV1ZV9lbnRyeSAgICoq ZGVwX2xpc3Q7CisJaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtX2RlcHM7 CisJZW51bSBpOTE1X3NjaGVkdWxlcl9xdWV1ZV9zdGF0dXMgICAgc3RhdHVzOworCXVuc2lnbmVk IGxvbmcgICAgICAgICAgICAgICAgICAgICAgIHN0YW1wOworCXN0cnVjdCBsaXN0X2hlYWQgICAg ICAgICAgICAgICAgICAgIGxpbms7Cit9OworCitzdHJ1Y3QgaTkxNV9zY2hlZHVsZXIgeworCXN0 cnVjdCBsaXN0X2hlYWQgICAgbm9kZV9xdWV1ZVtJOTE1X05VTV9SSU5HU107CisJdWludDMyX3Qg ICAgICAgICAgICBmbGFnc1tJOTE1X05VTV9SSU5HU107CisJc3BpbmxvY2tfdCAgICAgICAgICBs b2NrOworCisJLyogVHVuaW5nIHBhcmFtZXRlcnM6ICovCisJaW50MzJfdCAgICAgICAgICAgICBw cmlvcml0eV9sZXZlbF9taW47CisJaW50MzJfdCAgICAgICAgICAgICBwcmlvcml0eV9sZXZlbF9t YXg7CisJaW50MzJfdCAgICAgICAgICAgICBwcmlvcml0eV9sZXZlbF9wcmVlbXB0OworCXVpbnQz Ml90ICAgICAgICAgICAgbWluX2ZseWluZzsKK307CisKKy8qIEZsYWcgYml0cyBmb3IgaTkxNV9z Y2hlZHVsZXI6OmZsYWdzICovCitlbnVtIHsKKwlpOTE1X3NmX2ludGVycnVwdHNfZW5hYmxlZCAg PSAoMSA8PCAwKSwKKwlpOTE1X3NmX3N1Ym1pdHRpbmcgICAgICAgICAgPSAoMSA8PCAxKSwKK307 CisKK2ludCAgICAgICAgIGk5MTVfc2NoZWR1bGVyX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRl dik7CitpbnQgICAgICAgICBpOTE1X3NjaGVkdWxlcl9xdWV1ZV9leGVjYnVmZmVyKHN0cnVjdCBp OTE1X3NjaGVkdWxlcl9xdWV1ZV9lbnRyeSAqcWUpOworYm9vbCAgICAgICAgaTkxNV9zY2hlZHVs ZXJfbm90aWZ5X3JlcXVlc3Qoc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpyZXEpOworCisj ZW5kaWYgIC8qIF9JOTE1X1NDSEVEVUxFUl9IXyAqLwotLSAKMS45LjEKCl9fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QK SW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwOi8vbGlzdHMuZnJlZWRlc2t0b3Au b3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==