From mboxrd@z Thu Jan 1 00:00:00 1970 From: Sergej Proskurin Subject: [PATCH v6 12/14] arm/mem_access: Add long-descriptor based gpt Date: Thu, 6 Jul 2017 13:50:15 +0200 Message-ID: <20170706115017.23072-13-proskurin@sec.in.tum.de> References: <20170706115017.23072-1-proskurin@sec.in.tum.de> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail6.bemta5.messagelabs.com ([195.245.231.135]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1dT5Iy-00032s-Mn for xen-devel@lists.xenproject.org; Thu, 06 Jul 2017 11:50:44 +0000 In-Reply-To: <20170706115017.23072-1-proskurin@sec.in.tum.de> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: xen-devel@lists.xenproject.org Cc: Sergej Proskurin , Julien Grall , Stefano Stabellini List-Id: xen-devel@lists.xenproject.org VGhpcyBjb21taXQgYWRkcyBmdW5jdGlvbmFsaXR5IHRvIHdhbGsgdGhlIGd1ZXN0J3MgcGFnZSB0 YWJsZXMgdXNpbmcgdGhlCmxvbmctZGVzY3JpcHRvciB0cmFuc2xhdGlvbiB0YWJsZSBmb3JtYXQg Zm9yIGJvdGggQVJNdjcgYW5kIEFSTXY4LgpTaW1pbGFyIHRvIHRoZSBoYXJkd2FyZSBhcmNoaXRl Y3R1cmUsIHRoZSBpbXBsZW1lbnRhdGlvbiBzdXBwb3J0cwpkaWZmZXJlbnQgcGFnZSBncmFudWxh cml0aWVzICg0SywgMTZLLCBhbmQgNjRLKS4gVGhlIGltcGxlbWVudGF0aW9uIGlzCmJhc2VkIG9u IEFSTSBEREkgMDQ4N0IuYSBKMS01OTIyLCBKMS01OTk5LCBhbmQgQVJNIERESSAwNDA2Qy5iIEIz LTE1MTAuCgpOb3RlIHRoYXQgdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gbGFja3Mgc3VwcG9y dCBmb3IgTGFyZ2UgVkEvUEEgb24KQVJNdjguMiBhcmNoaXRlY3R1cmVzIChMVkEvTFBBLCA1Mi1i aXQgdmlydHVhbCBhbmQgcGh5c2ljYWwgYWRkcmVzcwpzaXplcykuIFRoZSBhc3NvY2lhdGVkIGxv Y2F0aW9uIGluIHRoZSBjb2RlIGlzIG1hcmtlZCBhcHByb3ByaWF0ZWx5LgoKU2lnbmVkLW9mZi1i eTogU2VyZ2VqIFByb3NrdXJpbiA8cHJvc2t1cmluQHNlYy5pbi50dW0uZGU+Ci0tLQpDYzogU3Rl ZmFubyBTdGFiZWxsaW5pIDxzc3RhYmVsbGluaUBrZXJuZWwub3JnPgpDYzogSnVsaWVuIEdyYWxs IDxqdWxpZW4uZ3JhbGxAYXJtLmNvbT4KLS0tCnYyOiBVc2UgVENSX1NaX01BU0sgaW5zdGVhZCBv ZiBUVEJDUl9TWl9NQVNLIGZvciBBUk0gMzItYml0IGd1ZXN0cyB1c2luZwogICAgdGhlIGxvbmct ZGVzY3JpcHRvciB0cmFuc2xhdGlvbiB0YWJsZSBmb3JtYXQuCgogICAgQ29zbWV0aWMgZml4ZXMu Cgp2MzogTW92ZSB0aGUgaW1wbGVtZW50YXRpb24gdG8gLi94ZW4vYXJjaC9hcm0vZ3Vlc3RfY29w eS5jLgoKICAgIFJlbW92ZSB0aGUgYXJyYXkgc3RyaWRlcyBhbmQgZGVjbGFyZSB0aGUgYXJyYXkg Z3JhaW5zaXplcyBhcyBzdGF0aWMKICAgIGNvbnN0IGluc3RlYWQgb2YganVzdCBjb25zdCB0byBy ZWR1Y2UgdGhlIGZ1bmN0aW9uIHN0YWNrIG92ZXJoZWFkLgoKICAgIE1vdmUgcGFydHMgb2YgdGhl IGZ1bnRpb24gZ3Vlc3Rfd2Fsa19sZCBpbnRvIHRoZSBzdGF0aWMgZnVuY3Rpb25zCiAgICBnZXRf dHRicl9hbmRfZ3Jhbl82NGJpdCBhbmQgZ2V0X3RvcF9iaXQgdG8gcmVkdWNlIGNvbXBsZXhpdHku CgogICAgVXNlIHRoZSBtYWNybyBCSVQoeCkgaW5zdGVhZCBvZiAoMVVMIDw8IHgpLgoKICAgIEFk ZCBtb3JlIGNvbW1lbnRzICYmIENvc21ldGljIGZpeGVzLgoKdjQ6IE1vdmUgZnVuY3Rpb25hbGl0 eSByZXNwb25zaWJsZSBmb3IgZGV0ZXJtaW5pbmcgdGhlIGNvbmZpZ3VyZWQgSVBBCiAgICBvdXRw dXQtc2l6ZSBpbnRvIGEgc2VwYXJhdGUgZnVuY3Rpb24gZ2V0X2lwYV9vdXRwdXRfc2l6ZS4gSW4g dGhpcwogICAgZnVuY3Rpb24sIHdlIHJlbW92ZSB0aGUgcHJldmlvdXNseSB1c2VkIHN3aXRjaCBz dGF0ZW1lbnQsIHdoaWNoIHdhcwogICAgcmVzcG9uc2libGUgZm9yIGRpc3Rpbmd1aXNoaW5nIGJl dHdlZW4gZGlmZmVyZW50IElQQSBvdXRwdXQtc2l6ZXMuCiAgICBJbnN0ZWFkLCB3ZSByZXRyaWV2 ZSB0aGUgaW5mb3JtYXRpb24gZnJvbSB0aGUgaW50cm9kdWNlZCBpcGFfc2l6ZXMKICAgIGFycmF5 LgoKICAgIFJlbW92ZSB0aGUgZGVmaW5lcyBHUkFOVUxFX1NJWkVfSU5ERVhfKiBhbmQgVFRCUjBf VkFMSUQgZnJvbQogICAgZ3Vlc3Rfd2Fsay5oLiBJbnN0ZWFkLCBpbnRyb2R1Y2UgdGhlIGVudW1z IGdyYW51bGVfc2l6ZV9pbmRleAogICAgYWN0aXZlX3R0YnIgZGlyZWN0bHkgaW5zaWRlIG9mIGd1 ZXN0X3dhbGsuYyBzbyB0aGF0IHRoZSBhc3NvY2lhdGVkCiAgICBmaWVsZHMgZG9uJ3QgZ2V0IGV4 cG9ydGVkLgoKICAgIEFkYXB0IHRoZSBmdW5jdGlvbiB0byB0aGUgbmV3IHBhcmFtZXRlciBvZiB0 eXBlICJzdHJ1Y3QgdmNwdSAqIi4KCiAgICBSZW1vdmUgc3VwcG9ydCBmb3IgNTJiaXQgSVBBIG91 dHB1dC1zaXplcyBlbnRpcmVseSBmcm9tIHRoaXMgY29tbWl0LgoKICAgIFVzZSBscGFlXyogaGVs cGVycyBpbnN0ZWFkIG9mIHAybV8qIGhlbHBlcnMuCgogICAgQ29zbWV0aWMgZml4ZXMgJiBBZGRp dGlvbmFsIGNvbW1lbnRzLgoKdjU6IE1ha2UgdXNlIG9mIHRoZSBmdW5jdGlvbiB2Z2ljX2FjY2Vz c19ndWVzdF9tZW1vcnkgdG8gcmVhZCBwYWdlIHRhYmxlCiAgICBlbnRyaWVzIGluIGd1ZXN0IG1l bW9yeS4KCiAgICBJbnZlcnQgdGhlIGluZGVjZXMgb2YgdGhlIGFycmF5cyAib2Zmc2V0cyIgYW5k ICJtYXNrcyIgYW5kIHNpbXBsaWZ5CiAgICByZWFkYWJpbGl0eSBieSB1c2luZyBhbiBhcHByb3By aWF0ZSBtYWNybyBmb3IgdGhlIGVudHJpZXMuCgogICAgUmVtb3ZlIHJlbWFpbmluZyBDT05GSUdf QVJNXzY0ICNpZmRlZnMuCgogICAgUmVtb3ZlIHRoZSB1c2Ugb2YgdGhlIG1hY3JvcyBCSVRTX1BF Ul9XT1JEIGFuZCBCSVRTX1BFUl9ET1VCTEVfV09SRC4KCiAgICBVc2UgR0VOTUFTS19VTEwgaW5z dGVhZCBvZiBtYW51YWxseSBjcmVhdGluZyBjb21wbGV4IG1hc2tzIHRvIGVhc2UKICAgIHJlYWRh YmlsaXR5LgoKICAgIEFsc28sIGNyZWF0ZSBhIG1hY3JvIENIRUNLX0JBU0VfU0laRSB3aGljaCBz aW1wbHkgcmVkdWNlcyB0aGUgY29kZQogICAgc2l6ZSBhbmQgc2ltcGxpZmllcyByZWFkYWJpbGl0 eS4KCiAgICBNYWtlIHVzZSBvZiB0aGUgbmV3bHkgaW50cm9kdWNlZCBscGFlX3BhZ2UgbWFjcm8g aW4gdGhlIGlmLXN0YXRlbWVudAogICAgdG8gdGVzdCBmb3IgaW52YWxpZC9yZXNlcnZlZCBtYXBw aW5ncyBpbiB0aGUgTDMgUFRFLgoKICAgIENvc21ldGljIGZpeGVzIGFuZCBhZGRpdGlvbmFsIGNv bW1lbnRzLgoKdjY6IENvbnZlcnQgdGhlIG1hY3JvIENIRUNLX0JBU0VfU0laRSBpbnRvIGEgaGVs cGVyIGZ1bmN0aW9uCiAgICBjaGVja19iYXNlX3NpemUuIFRoZSB1c2Ugb2YgdGhlIG9sZCBDSEVD S19CQVNFX1NJWkUgd2FzIGNvbmZ1c2luZyBhcwogICAgaXQgYWZmZWN0ZWQgdGhlIGNvbnRyb2wt ZmxvdyB0aHJvdWdoIGEgcmV0dXJuIGFzIHBhcnQgb2YgdGhlIG1hY3JvLgoKICAgIFJldHVybiB0 aGUgdmFsdWUgLUVGQVVMVCBpbnN0ZWFkIG9mIC1FSU5WQUwgaWYgYWNjZXNzIHRvIHRoZSBndWVz dCdzCiAgICBtZW1vcnkgZmFpbHMuCgogICAgU2ltcGxpZnkgdGhlIGNoZWNrIGluIHRoZSBlbmQg b2YgdGhlIHRhYmxlIHdhbGsgdGhhdCBlbnN1cmVzIHRoYXQKICAgIHRoZSBmb3VuZCBQVEUgaXMg YSBwYWdlIG9yIGEgc3VwZXJwYWdlLiBUaGUgbmV3IGltcGxlbWVudGF0aW9uCiAgICBjaGVja3Mg aWYgdGhlIHB0ZSBtYXBzIGEgdmFsaWQgcGFnZSBvciBhIHN1cGVycGFnZSBhbmQgcmV0dXJucyBh bgogICAgLUVGQVVMVCBvbmx5IGlmIGJvdGggY29uZGl0aW9ucyBhcmUgbm90IHRydWUuCgogICAg QWRqdXN0IHRoZSB0eXBlIG9mIHRoZSBhcnJheSBvZmZzZXRzIHRvIHBhZGRyX3QgaW5zdGVhZCBv ZiB2YWRkcl90CiAgICB0byBhbGxvdyB3b3JraW5nIHdpdGggdGhlIGNoYW5nZWQgKl90YWJsZV9v ZmZzZXRfKiBoZWxwZXJzLCB3aGljaAogICAgcmV0dXJuIG9mZnNldHMgb2YgdHlwZSBwYWRkcl90 LgoKICAgIE1ha2UgdXNlIG9mIHJlbmFtZWQgZnVuY3Rpb24gYWNjZXNzX2d1ZXN0X21lbW9yeV9i eV9pcGEgaW5zdGVhZCBvZgogICAgdmdpY19hY2Nlc3NfZ3Vlc3RfbWVtb3J5LgotLS0KIHhlbi9h cmNoL2FybS9ndWVzdF93YWxrLmMgfCAzOTYgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrLQogMSBmaWxlIGNoYW5nZWQsIDM5NCBpbnNlcnRpb25zKCspLCAyIGRl bGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3hlbi9hcmNoL2FybS9ndWVzdF93YWxrLmMgYi94ZW4v YXJjaC9hcm0vZ3Vlc3Rfd2Fsay5jCmluZGV4IDc4YmFkYzI5NDkuLjk2NTI2NGE5ZTYgMTAwNjQ0 Ci0tLSBhL3hlbi9hcmNoL2FybS9ndWVzdF93YWxrLmMKKysrIGIveGVuL2FyY2gvYXJtL2d1ZXN0 X3dhbGsuYwpAQCAtMTUsNyArMTUsMTAgQEAKICAqIHRoaXMgcHJvZ3JhbTsgSWYgbm90LCBzZWUg PGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgogICovCiAKKyNpbmNsdWRlIDx4ZW4vZG9t YWluX3BhZ2UuaD4KICNpbmNsdWRlIDx4ZW4vc2NoZWQuaD4KKyNpbmNsdWRlIDxhc20vZ3Vlc3Rf YWNjZXNzLmg+CisjaW5jbHVkZSA8YXNtL2d1ZXN0X3dhbGsuaD4KIAogLyoKICAqIFRoZSBmdW5j dGlvbiBndWVzdF93YWxrX3NkIHRyYW5zbGF0ZXMgYSBnaXZlbiBHVkEgaW50byBhbiBJUEEgdXNp bmcgdGhlCkBAIC0zMyw2ICszNiwxNzQgQEAgc3RhdGljIGludCBndWVzdF93YWxrX3NkKGNvbnN0 IHN0cnVjdCB2Y3B1ICp2LAogfQogCiAvKgorICogR2V0IHRoZSBJUEEgb3V0cHV0X3NpemUgKGNv bmZpZ3VyZWQgaW4gVENSX0VMMSkgdGhhdCBzaGFsbCBiZSB1c2VkIGZvciB0aGUKKyAqIGxvbmct ZGVzY3JpcHRvciBiYXNlZCB0cmFuc2xhdGlvbiB0YWJsZSB3YWxrLgorICovCitzdGF0aWMgaW50 IGdldF9pcGFfb3V0cHV0X3NpemUoc3RydWN0IGRvbWFpbiAqZCwgcmVnaXN0ZXJfdCB0Y3IsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICpvdXRwdXRfc2l6ZSkK K3sKKyAgICB1bnNpZ25lZCBpbnQgaXBzOworCisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGlu dCBpcGFfc2l6ZXNbN10gPSB7CisgICAgICAgIFRDUl9FTDFfSVBTXzMyX0JJVF9WQUwsCisgICAg ICAgIFRDUl9FTDFfSVBTXzM2X0JJVF9WQUwsCisgICAgICAgIFRDUl9FTDFfSVBTXzQwX0JJVF9W QUwsCisgICAgICAgIFRDUl9FTDFfSVBTXzQyX0JJVF9WQUwsCisgICAgICAgIFRDUl9FTDFfSVBT XzQ0X0JJVF9WQUwsCisgICAgICAgIFRDUl9FTDFfSVBTXzQ4X0JJVF9WQUwsCisgICAgICAgIFRD Ul9FTDFfSVBTXzUyX0JJVF9WQUwKKyAgICB9OworCisgICAgaWYgKCBpc182NGJpdF9kb21haW4o ZCkgKQorICAgIHsKKyAgICAgICAgLyogR2V0IHRoZSBpbnRlcm1lZGlhdGUgcGh5c2ljYWwgYWRk cmVzcyBzaXplLiAqLworICAgICAgICBpcHMgPSAodGNyICYgVENSX0VMMV9JUFNfTUFTSykgPj4g VENSX0VMMV9JUFNfU0hJRlQ7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogUmV0dXJuIGFuIGVy cm9yIG9uIHJlc2VydmVkIElQQSBvdXRwdXQtc2l6ZXMgYW5kIGlmIHRoZSBJUEEKKyAgICAgICAg ICogb3V0cHV0LXNpemUgaXMgNTJiaXQuCisgICAgICAgICAqCisgICAgICAgICAqIFhYWDogNTIg Yml0IG91dHB1dC1zaXplIGlzIG5vdCBzdXBwb3J0ZWQgeWV0LgorICAgICAgICAgKi8KKyAgICAg ICAgaWYgKCBpcHMgPiBUQ1JfRUwxX0lQU180OF9CSVQgKQorICAgICAgICAgICAgcmV0dXJuIC1F RkFVTFQ7CisKKyAgICAgICAgKm91dHB1dF9zaXplID0gaXBhX3NpemVzW2lwc107CisgICAgfQor ICAgIGVsc2UKKyAgICAgICAgKm91dHB1dF9zaXplID0gVENSX0VMMV9JUFNfNDBfQklUX1ZBTDsK KworICAgIHJldHVybiAwOworfQorCisvKiBOb3JtYWxpemVkIHBhZ2UgZ3JhbnVsZSBzaXplIGlu ZGljZXMuICovCitlbnVtIGdyYW51bGVfc2l6ZV9pbmRleCB7CisgICAgR1JBTlVMRV9TSVpFX0lO REVYXzRLLAorICAgIEdSQU5VTEVfU0laRV9JTkRFWF8xNkssCisgICAgR1JBTlVMRV9TSVpFX0lO REVYXzY0SworfTsKKworLyogUmVwcmVzZW50IHdoZXRoZXIgVFRCUjAgb3IgVFRCUjEgaXMgYWN0 aXZlLiAqLworZW51bSBhY3RpdmVfdHRiciB7CisgICAgVFRCUjBfQUNUSVZFLAorICAgIFRUQlIx X0FDVElWRQorfTsKKworLyoKKyAqIFNlbGVjdCB0aGUgVFRCUigwfDEpX0VMMSB0aGF0IHdpbGwg YmUgdXNlZCBmb3IgYWRkcmVzcyB0cmFuc2xhdGlvbiB1c2luZyB0aGUKKyAqIGxvbmctZGVzY3Jp cHRvciB0cmFuc2xhdGlvbiB0YWJsZSBmb3JtYXQgYW5kIHJldHVybiB0aGUgcGFnZSBncmFudWxh cml0eQorICogdGhhdCBpcyB1c2VkIGJ5IHRoZSBzZWxlY3RlZCBUVEJSLiBQbGVhc2Ugbm90ZSB0 aGF0IHRoZSBUQ1IuVEcwIGFuZCBUQ1IuVEcxCisgKiBlbmNvZGluZ3MgZGlmZmVyLgorICovCitz dGF0aWMgYm9vbCBnZXRfdHRicl9hbmRfZ3Jhbl82NGJpdCh1aW50NjRfdCAqdHRiciwgdW5zaWdu ZWQgaW50ICpncmFuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnaXN0 ZXJfdCB0Y3IsIGVudW0gYWN0aXZlX3R0YnIgdHRicngpCit7CisgICAgYm9vbCBkaXNhYmxlZDsK KworICAgIGlmICggdHRicnggPT0gVFRCUjBfQUNUSVZFICkKKyAgICB7CisgICAgICAgIC8qIE5v cm1hbGl6ZSBncmFudWxlIHNpemUuICovCisgICAgICAgIHN3aXRjaCAoIHRjciAmIFRDUl9URzBf TUFTSyApCisgICAgICAgIHsKKyAgICAgICAgY2FzZSBUQ1JfVEcwXzE2SzoKKyAgICAgICAgICAg ICpncmFuID0gR1JBTlVMRV9TSVpFX0lOREVYXzE2SzsKKyAgICAgICAgICAgIGJyZWFrOworICAg ICAgICBjYXNlIFRDUl9URzBfNjRLOgorICAgICAgICAgICAgKmdyYW4gPSBHUkFOVUxFX1NJWkVf SU5ERVhfNjRLOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAg ICAgICAvKgorICAgICAgICAgICAgICogQWNjb3JkaW5nIHRvIEFSTSBEREkgMDQ4N0IuYSBENy0y NDg3LCBpZiB0aGUgVENSX0VMMS5URzAgdmFsdWUKKyAgICAgICAgICAgICAqIGlzIHByb2dyYW1t ZWQgdG8gZWl0aGVyIGEgcmVzZXJ2ZWQgdmFsdWUsIG9yIGEgc2l6ZSB0aGF0IGhhcyBub3QKKyAg ICAgICAgICAgICAqIGJlZW4gaW1wbGVtZW50ZWQsIHRoZW4gdGhlIGhhcmR3YXJlIHdpbGwgdHJl YXQgdGhlIGZpZWxkIGFzIGlmCisgICAgICAgICAgICAgKiBpdCBoYXMgYmVlbiBwcm9ncmFtbWVk IHRvIGFuIElNUExFTUVOVEFUSU9OIERFRklORUQgY2hvaWNlLgorICAgICAgICAgICAgICoKKyAg ICAgICAgICAgICAqIFRoaXMgaW1wbGVtZW50YXRpb24gc3Ryb25nbHkgZm9sbG93cyB0aGUgcHNl dWRvLWNvZGUKKyAgICAgICAgICAgICAqIGltcGxlbWVudGF0aW9uIGZyb20gQVJNIERESSAwNDg3 Qi5hIEoxLTU5MjQgd2hpY2ggc3VnZ2VzdHMgdG8KKyAgICAgICAgICAgICAqIGZhbGwgYmFjayB0 byA0SyBieSBkZWZhdWx0LgorICAgICAgICAgICAgICovCisgICAgICAgICAgICAqZ3JhbiA9IEdS QU5VTEVfU0laRV9JTkRFWF80SzsKKyAgICAgICAgfQorCisgICAgICAgIC8qIFVzZSBUVEJSMCBm b3IgR1ZBIHRvIElQQSB0cmFuc2xhdGlvbi4gKi8KKyAgICAgICAgKnR0YnIgPSBSRUFEX1NZU1JF RzY0KFRUQlIwX0VMMSk7CisKKyAgICAgICAgLyogSWYgVENSLkVQRDAgaXMgc2V0LCB0cmFuc2xh dGlvbnMgdXNpbmcgVFRCUjAgYXJlIGRpc2FibGVkLiAqLworICAgICAgICBkaXNhYmxlZCA9IHRj ciAmIFRDUl9FUEQwOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICAvKiBOb3JtYWxp emUgZ3JhbnVsZSBzaXplLiAqLworICAgICAgICBzd2l0Y2ggKCB0Y3IgJiBUQ1JfRUwxX1RHMV9N QVNLICkKKyAgICAgICAgeworICAgICAgICBjYXNlIFRDUl9FTDFfVEcxXzE2SzoKKyAgICAgICAg ICAgICpncmFuID0gR1JBTlVMRV9TSVpFX0lOREVYXzE2SzsKKyAgICAgICAgICAgIGJyZWFrOwor ICAgICAgICBjYXNlIFRDUl9FTDFfVEcxXzY0SzoKKyAgICAgICAgICAgICpncmFuID0gR1JBTlVM RV9TSVpFX0lOREVYXzY0SzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0Ogor ICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAqIEFjY29yZGluZyB0byBBUk0gRERJIDA0ODdC LmEgRDctMjQ4NiwgaWYgdGhlIFRDUl9FTDEuVEcxIHZhbHVlCisgICAgICAgICAgICAgKiBpcyBw cm9ncmFtbWVkIHRvIGVpdGhlciBhIHJlc2VydmVkIHZhbHVlLCBvciBhIHNpemUgdGhhdCBoYXMg bm90CisgICAgICAgICAgICAgKiBiZWVuIGltcGxlbWVudGVkLCB0aGVuIHRoZSBoYXJkd2FyZSB3 aWxsIHRyZWF0IHRoZSBmaWVsZCBhcyBpZgorICAgICAgICAgICAgICogaXQgaGFzIGJlZW4gcHJv Z3JhbW1lZCB0byBhbiBJTVBMRU1FTlRBVElPTiBERUZJTkVEIGNob2ljZS4KKyAgICAgICAgICAg ICAqCisgICAgICAgICAgICAgKiBUaGlzIGltcGxlbWVudGF0aW9uIHN0cm9uZ2x5IGZvbGxvd3Mg dGhlIHBzZXVkby1jb2RlCisgICAgICAgICAgICAgKiBpbXBsZW1lbnRhdGlvbiBmcm9tIEFSTSBE REkgMDQ4N0IuYSBKMS01OTI0IHdoaWNoIHN1Z2dlc3RzIHRvCisgICAgICAgICAgICAgKiBmYWxs IGJhY2sgdG8gNEsgYnkgZGVmYXVsdC4KKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgKmdy YW4gPSBHUkFOVUxFX1NJWkVfSU5ERVhfNEs7CisgICAgICAgIH0KKworICAgICAgICAvKiBVc2Ug VFRCUjEgZm9yIEdWQSB0byBJUEEgdHJhbnNsYXRpb24uICovCisgICAgICAgICp0dGJyID0gUkVB RF9TWVNSRUc2NChUVEJSMV9FTDEpOworCisgICAgICAgIC8qIElmIFRDUi5FUEQxIGlzIHNldCwg dHJhbnNsYXRpb25zIHVzaW5nIFRUQlIxIGFyZSBkaXNhYmxlZC4gKi8KKyAgICAgICAgZGlzYWJs ZWQgPSB0Y3IgJiBUQ1JfRVBEMTsKKyAgICB9CisKKyAgICByZXR1cm4gZGlzYWJsZWQ7Cit9CisK Ky8qCisgKiBHZXQgdGhlIE1TQiBudW1iZXIgb2YgdGhlIEdWQSwgYWNjb3JkaW5nIHRvICJBZGRy VG9wIiBwc2V1ZG9jb2RlCisgKiBpbXBsZW1lbnRhdGlvbiBpbiBBUk0gRERJIDA0ODdCLmEgSjEt NjA2Ni4KKyAqLworc3RhdGljIHVuc2lnbmVkIGludCBnZXRfdG9wX2JpdChzdHJ1Y3QgZG9tYWlu ICpkLCB2YWRkcl90IGd2YSwgcmVnaXN0ZXJfdCB0Y3IpCit7CisgICAgdW5zaWduZWQgaW50IHRv cGJpdDsKKworICAgIC8qCisgICAgICogSUYgRUwxIGlzIHVzaW5nIEFBcmNoNjQgdGhlbiBhZGRy ZXNzZXMgZnJvbSBFTDAgdXNpbmcgQUFyY2gzMiBhcmUKKyAgICAgKiB6ZXJvLWV4dGVuZGVkIHRv IDY0IGJpdHMgKEFSTSBEREkgMDQ4N0IuYSBKMS02MDY2KS4KKyAgICAgKi8KKyAgICBpZiAoIGlz XzMyYml0X2RvbWFpbihkKSApCisgICAgICAgIHRvcGJpdCA9IDMxOworICAgIGVsc2UgaWYgKCBp c182NGJpdF9kb21haW4oZCkgKQorICAgIHsKKyAgICAgICAgaWYgKCAoKGd2YSAmIEJJVF9VTEwo NTUpKSAmJiAodGNyICYgVENSX0VMMV9UQkkxKSkgfHwKKyAgICAgICAgICAgICAoIShndmEgJiBC SVRfVUxMKDU1KSkgJiYgKHRjciAmIFRDUl9FTDFfVEJJMCkpICkKKyAgICAgICAgICAgIHRvcGJp dCA9IDU1OworICAgICAgICBlbHNlCisgICAgICAgICAgICB0b3BiaXQgPSA2MzsKKyAgICB9CisK KyAgICByZXR1cm4gdG9wYml0OworfQorCisvKiBNYWtlIHN1cmUgdGhlIGJhc2UgYWRkcmVzcyBk b2VzIG5vdCBleGNlZWQgaXRzIGNvbmZpZ3VyZWQgc2l6ZS4gKi8KK3N0YXRpYyBpbnQgY2hlY2tf YmFzZV9zaXplKHVuc2lnbmVkIGludCBvdXRwdXRfc2l6ZSwgdWludDY0X3QgYmFzZSkKK3sKKyAg ICBwYWRkcl90IG1hc2sgPSBHRU5NQVNLX1VMTCgoVENSX0VMMV9JUFNfNDhfQklUX1ZBTCAtIDEp LCBvdXRwdXRfc2l6ZSk7CisKKyAgICBpZiAoIChvdXRwdXRfc2l6ZSA8IFRDUl9FTDFfSVBTXzQ4 X0JJVF9WQUwpICYmIChiYXNlICYgbWFzaykgKQorICAgICAgICByZXR1cm4gLUVGQVVMVDsKKwor ICAgIHJldHVybiAwOworfQorCisvKgogICogVGhlIGZ1bmN0aW9uIGd1ZXN0X3dhbGtfbGQgdHJh bnNsYXRlcyBhIGdpdmVuIEdWQSBpbnRvIGFuIElQQSB1c2luZyB0aGUKICAqIGxvbmctZGVzY3Jp cHRvciB0cmFuc2xhdGlvbiB0YWJsZSBmb3JtYXQgaW4gc29mdHdhcmUuIFRoaXMgZnVuY3Rpb24g YXNzdW1lcwogICogdGhhdCB0aGUgZG9tYWluIGlzIHJ1bm5pbmcgb24gdGhlIGN1cnJlbnRseSBh Y3RpdmUgdkNQVS4gVG8gd2FsayB0aGUgZ3Vlc3QncwpAQCAtNDMsOCArMjE0LDIyOSBAQCBzdGF0 aWMgaW50IGd1ZXN0X3dhbGtfbGQoY29uc3Qgc3RydWN0IHZjcHUgKnYsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgdmFkZHJfdCBndmEsIHBhZGRyX3QgKmlwYSwKICAgICAgICAgICAgICAgICAg ICAgICAgICB1bnNpZ25lZCBpbnQgKnBlcm1zKQogewotICAgIC8qIE5vdCBpbXBsZW1lbnRlZCB5 ZXQuICovCi0gICAgcmV0dXJuIC1FRkFVTFQ7CisgICAgaW50IHJldDsKKyAgICBib29sIGRpc2Fi bGVkID0gdHJ1ZTsKKyAgICBib29sIHJvX3RhYmxlID0gZmFsc2UsIHhuX3RhYmxlID0gZmFsc2U7 CisgICAgdW5zaWduZWQgaW50IHQwX3N6LCB0MV9zejsKKyAgICB1bnNpZ25lZCBpbnQgbGV2ZWws IGdyYW47CisgICAgdW5zaWduZWQgaW50IHRvcGJpdCA9IDAsIGlucHV0X3NpemUgPSAwLCBvdXRw dXRfc2l6ZTsKKyAgICB1aW50NjRfdCB0dGJyID0gMDsKKyAgICBwYWRkcl90IG1hc2ssIHBhZGRy OworICAgIGxwYWVfdCBwdGU7CisgICAgcmVnaXN0ZXJfdCB0Y3IgPSBSRUFEX1NZU1JFRyhUQ1Jf RUwxKTsKKyAgICBzdHJ1Y3QgZG9tYWluICpkID0gdi0+ZG9tYWluOworCisjZGVmaW5lIE9GRlNF VFMoZ3ZhLCBncmFuKSAgICAgICAgICAgICAgXAoreyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFwKKyAgICB6ZXJvZXRoX3RhYmxlX29mZnNldF8jI2dyYW4oZ3ZhKSwgICBc CisgICAgZmlyc3RfdGFibGVfb2Zmc2V0XyMjZ3JhbihndmEpLCAgICAgXAorICAgIHNlY29uZF90 YWJsZV9vZmZzZXRfIyNncmFuKGd2YSksICAgIFwKKyAgICB0aGlyZF90YWJsZV9vZmZzZXRfIyNn cmFuKGd2YSkgICAgICBcCit9CisKKyAgICBjb25zdCBwYWRkcl90IG9mZnNldHNbM11bNF0gPSB7 CisgICAgICAgIE9GRlNFVFMoZ3ZhLCA0SyksCisgICAgICAgIE9GRlNFVFMoZ3ZhLCAxNkspLAor ICAgICAgICBPRkZTRVRTKGd2YSwgNjRLKQorICAgIH07CisKKyN1bmRlZiBPRkZTRVRTCisKKyNk ZWZpbmUgTUFTS1MoZ3JhbikgICAgICAgICAgICAgICAgICAgICBcCit7ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHplcm9ldGhfc2l6ZShncmFuKSAtIDEsICAg ICAgICAgICAgIFwKKyAgICBmaXJzdF9zaXplKGdyYW4pIC0gMSwgICAgICAgICAgICAgICBcCisg ICAgc2Vjb25kX3NpemUoZ3JhbikgLSAxLCAgICAgICAgICAgICAgXAorICAgIHRoaXJkX3NpemUo Z3JhbikgLSAxICAgICAgICAgICAgICAgIFwKK30KKworICAgIHN0YXRpYyBjb25zdCBwYWRkcl90 IG1hc2tzWzNdWzRdID0geworICAgICAgICBNQVNLUyg0SyksCisgICAgICAgIE1BU0tTKDE2Syks CisgICAgICAgIE1BU0tTKDY0SykKKyAgICB9OworCisjdW5kZWYgTUFTS1MKKworICAgIHN0YXRp YyBjb25zdCB1bnNpZ25lZCBpbnQgZ3JhaW5zaXplc1szXSA9IHsKKyAgICAgICAgUEFHRV9TSElG VF80SywKKyAgICAgICAgUEFHRV9TSElGVF8xNkssCisgICAgICAgIFBBR0VfU0hJRlRfNjRLCisg ICAgfTsKKworICAgIHQwX3N6ID0gKHRjciA+PiBUQ1JfVDBTWl9TSElGVCkgJiBUQ1JfU1pfTUFT SzsKKyAgICB0MV9zeiA9ICh0Y3IgPj4gVENSX1QxU1pfU0hJRlQpICYgVENSX1NaX01BU0s7CisK KyAgICAvKiBHZXQgdGhlIE1TQiBudW1iZXIgb2YgdGhlIEdWQS4gKi8KKyAgICB0b3BiaXQgPSBn ZXRfdG9wX2JpdChkLCBndmEsIHRjcik7CisKKyAgICBpZiAoIGlzXzY0Yml0X2RvbWFpbihkKSAp CisgICAgeworICAgICAgICAvKiBTZWxlY3QgdGhlIFRUQlIoMHwxKV9FTDEgdGhhdCB3aWxsIGJl IHVzZWQgZm9yIGFkZHJlc3MgdHJhbnNsYXRpb24uICovCisKKyAgICAgICAgaWYgKCAoZ3ZhICYg QklUX1VMTCh0b3BiaXQpKSA9PSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgaW5wdXRfc2l6 ZSA9IDY0IC0gdDBfc3o7CisKKyAgICAgICAgICAgIC8qIEdldCBUVEJSMCBhbmQgY29uZmlndXJl ZCBwYWdlIGdyYW51bGFyaXR5LiAqLworICAgICAgICAgICAgZGlzYWJsZWQgPSBnZXRfdHRicl9h bmRfZ3Jhbl82NGJpdCgmdHRiciwgJmdyYW4sIHRjciwgVFRCUjBfQUNUSVZFKTsKKyAgICAgICAg fQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIGlucHV0X3NpemUgPSA2NCAt IHQxX3N6OworCisgICAgICAgICAgICAvKiBHZXQgVFRCUjEgYW5kIGNvbmZpZ3VyZWQgcGFnZSBn cmFudWxhcml0eS4gKi8KKyAgICAgICAgICAgIGRpc2FibGVkID0gZ2V0X3R0YnJfYW5kX2dyYW5f NjRiaXQoJnR0YnIsICZncmFuLCB0Y3IsIFRUQlIxX0FDVElWRSk7CisgICAgICAgIH0KKworICAg ICAgICAvKgorICAgICAgICAgKiBUaGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiBzdXBwb3J0cyBp bnRlcm1lZGlhdGUgcGh5c2ljYWwgYWRkcmVzcworICAgICAgICAgKiBzaXplcyAoSVBTKSB1cCB0 byA0OCBiaXQuCisgICAgICAgICAqCisgICAgICAgICAqIFhYWDogRGV0ZXJtaW5lIHdoZXRoZXIg dGhlIElQU19NQVhfVkFMIGlzIDQ4IG9yIDUyIGluIHNvZnR3YXJlLgorICAgICAgICAgKi8KKyAg ICAgICAgaWYgKCAoaW5wdXRfc2l6ZSA+IFRDUl9FTDFfSVBTXzQ4X0JJVF9WQUwpIHx8CisgICAg ICAgICAgICAgKGlucHV0X3NpemUgPCBUQ1JfRUwxX0lQU19NSU5fVkFMKSApCisgICAgICAgICAg ICByZXR1cm4gLUVGQVVMVDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgLyogR3Jh bnVsZSBzaXplIG9mIEFBcmNoMzIgYXJjaGl0ZWN0dXJlcyBpcyBhbHdheXMgNEsuICovCisgICAg ICAgIGdyYW4gPSBHUkFOVUxFX1NJWkVfSU5ERVhfNEs7CisKKyAgICAgICAgLyogU2VsZWN0IHRo ZSBUVEJSKDB8MSlfRUwxIHRoYXQgd2lsbCBiZSB1c2VkIGZvciBhZGRyZXNzIHRyYW5zbGF0aW9u LiAqLworCisgICAgICAgIC8qCisgICAgICAgICAqIENoZWNrIGlmIHRoZSBiaXRzIDwzMTozMi10 MF9zej4gb2YgdGhlIEdWQSBhcmUgc2V0IHRvIDAgKERESSAwNDg3Qi5hCisgICAgICAgICAqIEox LTU5OTkpLiBJZiBzbywgVFRCUjAgc2hhbGwgYmUgdXNlZCBmb3IgYWRkcmVzcyB0cmFuc2xhdGlv bi4KKyAgICAgICAgICovCisgICAgICAgIG1hc2sgPSBHRU5NQVNLX1VMTCgzMSwgKDMyIC0gdDBf c3opKTsKKworICAgICAgICBpZiAoIHQwX3N6ID09IDAgfHwgIShndmEgJiBtYXNrKSApCisgICAg ICAgIHsKKyAgICAgICAgICAgIGlucHV0X3NpemUgPSAzMiAtIHQwX3N6OworCisgICAgICAgICAg ICAvKiBVc2UgVFRCUjAgZm9yIEdWQSB0byBJUEEgdHJhbnNsYXRpb24uICovCisgICAgICAgICAg ICB0dGJyID0gUkVBRF9TWVNSRUc2NChUVEJSMF9FTDEpOworCisgICAgICAgICAgICAvKiBJZiBU Q1IuRVBEMCBpcyBzZXQsIHRyYW5zbGF0aW9ucyB1c2luZyBUVEJSMCBhcmUgZGlzYWJsZWQuICov CisgICAgICAgICAgICBkaXNhYmxlZCA9IHRjciAmIFRDUl9FUEQwOworICAgICAgICB9CisKKyAg ICAgICAgLyoKKyAgICAgICAgICogQ2hlY2sgaWYgdGhlIGJpdHMgPDMxOjMyLXQxX3N6PiBvZiB0 aGUgR1ZBIGFyZSBzZXQgdG8gMSAoRERJIDA0ODdCLmEKKyAgICAgICAgICogSjEtNjAwMCkuIElm IHNvLCBUVEJSMSBzaGFsbCBiZSB1c2VkIGZvciBhZGRyZXNzIHRyYW5zbGF0aW9uLgorICAgICAg ICAgKi8KKyAgICAgICAgbWFzayA9IEdFTk1BU0tfVUxMKDMxLCAoMzIgLSB0MV9zeikpOworCisg ICAgICAgIGlmICggKCh0MV9zeiA9PSAwKSAmJiAhdHRicikgfHwgKHQxX3N6ICYmIChndmEgJiBt YXNrKSA9PSBtYXNrKSApCisgICAgICAgIHsKKyAgICAgICAgICAgIGlucHV0X3NpemUgPSAzMiAt IHQxX3N6OworCisgICAgICAgICAgICAvKiBVc2UgVFRCUjEgZm9yIEdWQSB0byBJUEEgdHJhbnNs YXRpb24uICovCisgICAgICAgICAgICB0dGJyID0gUkVBRF9TWVNSRUc2NChUVEJSMV9FTDEpOwor CisgICAgICAgICAgICAvKiBJZiBUQ1IuRVBEMSBpcyBzZXQsIHRyYW5zbGF0aW9ucyB1c2luZyBU VEJSMSBhcmUgZGlzYWJsZWQuICovCisgICAgICAgICAgICBkaXNhYmxlZCA9IHRjciAmIFRDUl9F UEQxOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKCBkaXNhYmxlZCApCisgICAgICAgIHJl dHVybiAtRUZBVUxUOworCisgICAgLyoKKyAgICAgKiBUaGUgc3RhcnRpbmcgbGV2ZWwgaXMgdGhl IG51bWJlciBvZiBzdHJpZGVzIChncmFpbnNpemVzW2dyYW5dIC0gMykKKyAgICAgKiBuZWVkZWQg dG8gY29uc3VtZSB0aGUgaW5wdXQgYWRkcmVzcyAoQVJNIERESSAwNDg3Qi5hIEoxLTU5MjQpLgor ICAgICAqLworICAgIGxldmVsID0gNCAtIERJVl9ST1VORF9VUCgoaW5wdXRfc2l6ZSAtIGdyYWlu c2l6ZXNbZ3Jhbl0pLCAoZ3JhaW5zaXplc1tncmFuXSAtIDMpKTsKKworICAgIC8qIEdldCB0aGUg SVBBIG91dHB1dF9zaXplLiAqLworICAgIHJldCA9IGdldF9pcGFfb3V0cHV0X3NpemUoZCwgdGNy LCAmb3V0cHV0X3NpemUpOworICAgIGlmICggcmV0ICkKKyAgICAgICAgcmV0dXJuIC1FRkFVTFQ7 CisKKyAgICAvKiBNYWtlIHN1cmUgdGhlIGJhc2UgYWRkcmVzcyBkb2VzIG5vdCBleGNlZWQgaXRz IGNvbmZpZ3VyZWQgc2l6ZS4gKi8KKyAgICByZXQgPSBjaGVja19iYXNlX3NpemUob3V0cHV0X3Np emUsIHR0YnIpOworICAgIGlmICggcmV0ICkKKyAgICAgICAgcmV0dXJuIC1FRkFVTFQ7CisKKyAg ICAvKgorICAgICAqIENvbXB1dGUgdGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgZmlyc3QgbGV2ZWwg dHJhbnNsYXRpb24gdGFibGUgdGhhdCBpcworICAgICAqIGdpdmVuIGJ5IFRUQlJ4X0VMMSAoQVJN IERESSAwNDg3Qi5hIEQ0LTIwMjQgYW5kIEoxLTU5MjYpLgorICAgICAqLworICAgIG1hc2sgPSBH RU5NQVNLX1VMTCg0NywgZ3JhaW5zaXplc1tncmFuXSk7CisgICAgcGFkZHIgPSAodHRiciAmIG1h c2spOworCisgICAgZm9yICggOyA7IGxldmVsKysgKQorICAgIHsKKyAgICAgICAgLyoKKyAgICAg ICAgICogQWRkIG9mZnNldCBnaXZlbiBieSB0aGUgR1ZBIHRvIHRoZSB0cmFuc2xhdGlvbiB0YWJs ZSBiYXNlIGFkZHJlc3MuCisgICAgICAgICAqIFNoaWZ0IHRoZSBvZmZzZXQgYnkgMyBhcyBpdCBp cyA4LWJ5dGUgYWxpZ25lZC4KKyAgICAgICAgICovCisgICAgICAgIHBhZGRyIHw9IG9mZnNldHNb Z3Jhbl1bbGV2ZWxdIDw8IDM7CisKKyAgICAgICAgLyogQWNjZXNzIHRoZSBndWVzdCdzIG1lbW9y eSB0byByZWFkIG9ubHkgb25lIFBURS4gKi8KKyAgICAgICAgcmV0ID0gYWNjZXNzX2d1ZXN0X21l bW9yeV9ieV9pcGEoZCwgcGFkZHIsICZwdGUsIHNpemVvZihscGFlX3QpLCBmYWxzZSk7CisgICAg ICAgIGlmICggcmV0ICkKKyAgICAgICAgICAgIHJldHVybiAtRUZBVUxUOworCisgICAgICAgIC8q IE1ha2Ugc3VyZSB0aGUgYmFzZSBhZGRyZXNzIGRvZXMgbm90IGV4Y2VlZCBpdHMgY29uZmlndXJl ZCBzaXplLiAqLworICAgICAgICByZXQgPSBjaGVja19iYXNlX3NpemUob3V0cHV0X3NpemUsIHBm bl90b19wYWRkcihwdGUud2Fsay5iYXNlKSk7CisgICAgICAgIGlmICggcmV0ICkKKyAgICAgICAg ICAgIHJldHVybiAtRUZBVUxUOworCisgICAgICAgIC8qCisgICAgICAgICAqIElmIHBhZ2UgZ3Jh bnVsYXJpdHkgaXMgNjRLLCBtYWtlIHN1cmUgdGhlIGFkZHJlc3MgaXMgYWxpZ25lZAorICAgICAg ICAgKiBhcHByb3ByaWF0ZWx5LgorICAgICAgICAgKi8KKyAgICAgICAgaWYgKCAob3V0cHV0X3Np emUgPCBUQ1JfRUwxX0lQU181Ml9CSVRfVkFMKSAmJgorICAgICAgICAgICAgIChncmFuID09IEdS QU5VTEVfU0laRV9JTkRFWF82NEspICYmCisgICAgICAgICAgICAgKHB0ZS53YWxrLmJhc2UgJiAw eGYpICkKKyAgICAgICAgICAgIHJldHVybiAtRUZBVUxUOworCisgICAgICAgIC8qCisgICAgICAg ICAqIEJyZWFrIGlmIG9uZSBvZiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgaXMgdHJ1ZToKKyAg ICAgICAgICoKKyAgICAgICAgICogLSBXZSBoYXZlIGZvdW5kIHRoZSBQVEUgaG9sZGluZyB0aGUg SVBBIChsZXZlbCA9PSAzKS4KKyAgICAgICAgICogLSBUaGUgUFRFIGlzIG5vdCB2YWxpZC4KKyAg ICAgICAgICogLSBJZiAobGV2ZWwgPCAzKSBhbmQgdGhlIFBURSBpcyB2YWxpZCwgd2UgZm91bmQg YSBibG9jayBkZXNjcmlwdG9yLgorICAgICAgICAgKi8KKyAgICAgICAgaWYgKCBsZXZlbCA9PSAz IHx8ICFscGFlX3ZhbGlkKHB0ZSkgfHwgbHBhZV9pc19zdXBlcnBhZ2UocHRlLCBsZXZlbCkgKQor ICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogVGVtcG9yYXJpbHkg c3RvcmUgcGVybWlzc2lvbnMgb2YgdGhlIHRhYmxlIGRlc2NyaXB0b3IgYXMgdGhleSBhcmUKKyAg ICAgICAgICogaW5oZXJpdGVkIGJ5IHBhZ2UgdGFibGUgYXR0cmlidXRlcyAoQVJNIERESSAwNDg3 Qi5hIEoxLTU5MjgpLgorICAgICAgICAgKi8KKyAgICAgICAgeG5fdGFibGUgfD0gcHRlLnB0Lnhu dDsgICAgICAgICAgICAgLyogRXhlY3V0ZS1OZXZlciAqLworICAgICAgICByb190YWJsZSB8PSBw dGUucHQuYXB0ICYgQklUKDEpOyAgICAvKiBSZWFkLU9ubHkgKi8KKworICAgICAgICAvKiBDb21w dXRlIHRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIG5leHQgbGV2ZWwgdHJhbnNsYXRpb24gdGFibGUu ICovCisgICAgICAgIG1hc2sgPSBHRU5NQVNLX1VMTCg0NywgZ3JhaW5zaXplc1tncmFuXSk7Cisg ICAgICAgIHBhZGRyID0gcGZuX3RvX3BhZGRyKHB0ZS53YWxrLmJhc2UpICYgbWFzazsKKyAgICB9 CisKKyAgICAvKgorICAgICAqIEFjY29yZGluZyB0byB0byBBUk0gRERJIDA0ODdCLmEgSjEtNTky Nywgd2UgcmV0dXJuIGFuIGVycm9yIGlmIHRoZSBmb3VuZAorICAgICAqIFBURSBpcyBpbnZhbGlk IG9yIGhvbGRzIGEgcmVzZXJ2ZWQgZW50cnkgKFBURTwxOjA+ID09IHgwKSkgb3IgaWYgdGhlIFBU RQorICAgICAqIG1hcHMgYSBtZW1vcnkgYmxvY2sgYXQgbGV2ZWwgMyAoUFRFPDE6MD4gPT0gMDEp LgorICAgICAqLworICAgIGlmICggIWxwYWVfaXNfcGFnZShwdGUsIGxldmVsKSAmJiAhbHBhZV9p c19zdXBlcnBhZ2UocHRlLCBsZXZlbCkgKQorICAgICAgICByZXR1cm4gLUVGQVVMVDsKKworICAg ICppcGEgPSBwZm5fdG9fcGFkZHIocHRlLndhbGsuYmFzZSkgfCAoZ3ZhICYgbWFza3NbZ3Jhbl1b bGV2ZWxdKTsKKworICAgIC8qCisgICAgICogU2V0IHBlcm1pc3Npb25zIHNvIHRoYXQgdGhlIGNh bGxlciBjYW4gY2hlY2sgdGhlIGZsYWdzIGJ5IGhlcnNlbGYuIE5vdGUKKyAgICAgKiB0aGF0IHN0 YWdlIDEgdHJhbnNsYXRpb25zIGFsc28gaW5oZXJpdCBhdHRyaWJ1dGVzIGZyb20gdGhlIHRhYmxl cworICAgICAqIChBUk0gRERJIDA0ODdCLmEgSjEtNTkyOCkuCisgICAgICovCisgICAgaWYgKCAh cHRlLnB0LnJvICYmICFyb190YWJsZSApCisgICAgICAgICpwZXJtcyB8PSBHVjJNX1dSSVRFOwor ICAgIGlmICggIXB0ZS5wdC54biAmJiAheG5fdGFibGUgKQorICAgICAgICAqcGVybXMgfD0gR1Yy TV9FWEVDOworCisgICAgcmV0dXJuIDA7CiB9CiAKIGludCBndWVzdF93YWxrX3RhYmxlcyhjb25z dCBzdHJ1Y3QgdmNwdSAqdiwgdmFkZHJfdCBndmEsCi0tIAoyLjEzLjIKCgpfX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpYZW4tZGV2ZWwgbWFpbGluZyBsaXN0 Clhlbi1kZXZlbEBsaXN0cy54ZW4ub3JnCmh0dHBzOi8vbGlzdHMueGVuLm9yZy94ZW4tZGV2ZWwK