From mboxrd@z Thu Jan 1 00:00:00 1970 From: Stefano Stabellini Subject: [PATCH v5 25/25] xen/arm: split domain_build.c Date: Mon, 22 Oct 2018 19:03:04 -0700 Message-ID: <1540260184-11294-25-git-send-email-sstabellini@kernel.org> References: Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" To: julien.grall@arm.com Cc: Stefano Stabellini , Achin.Gupta@arm.com, sstabellini@kernel.org, andrii_anisov@epam.com, xen-devel@lists.xen.org List-Id: xen-devel@lists.xenproject.org ZG9tYWluX2J1aWxkLmMgaXMgdG9vIGxhcmdlLgoKTW92ZSBhbGwgdGhlIEFDUEkgc3BlY2lmaWMg ZGV2aWNlIHRyZWUgZ2VuZXJhdGluZyBmdW5jdGlvbnMgZnJvbQpkb21haW5fYnVpbGQuYyB0byBh Y3BpL2RvbWFpbl9idWlsZC5jLgoKU2lnbmVkLW9mZi1ieTogU3RlZmFubyBTdGFiZWxsaW5pIDxz dGVmYW5vc0B4aWxpbnguY29tPgoKLS0tCgpDaGFuZ2VzIGluIHY0OgotIHJlbmFtZSBhY3BpX2R0 X2J1aWxkIHRvIGRvbWFpbl9idWlsZC5jCi0gYWRkIGNvcHlyaWdodCBoZWFkZXIKLSByZW1vdmUg dXNlbGVzcyAjaW5jbHVkZQotIHJlbW92ZSBhY3BpX2R0X2J1aWxkLmgsIGFkZCBkb21haW5fYnVp bGQuaAotLS0KIHhlbi9hcmNoL2FybS9hY3BpL01ha2VmaWxlICAgICAgICAgfCAgIDEgKwogeGVu L2FyY2gvYXJtL2FjcGkvZG9tYWluX2J1aWxkLmMgICB8IDU5MiArKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrCiB4ZW4vYXJjaC9hcm0vZG9tYWluX2J1aWxkLmMgICAgICAgIHwg NTg1ICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogeGVuL2luY2x1ZGUvYXNt LWFybS9kb21haW5fYnVpbGQuaCB8ICAzMSArKwogNCBmaWxlcyBjaGFuZ2VkLCA2MjkgaW5zZXJ0 aW9ucygrKSwgNTgwIGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHhlbi9hcmNoL2Fy bS9hY3BpL2RvbWFpbl9idWlsZC5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgeGVuL2luY2x1ZGUvYXNt LWFybS9kb21haW5fYnVpbGQuaAoKZGlmZiAtLWdpdCBhL3hlbi9hcmNoL2FybS9hY3BpL01ha2Vm aWxlIGIveGVuL2FyY2gvYXJtL2FjcGkvTWFrZWZpbGUKaW5kZXggMjM5NjNmOC4uOTRhZTI0OSAx MDA2NDQKLS0tIGEveGVuL2FyY2gvYXJtL2FjcGkvTWFrZWZpbGUKKysrIGIveGVuL2FyY2gvYXJt L2FjcGkvTWFrZWZpbGUKQEAgLTEsMiArMSwzIEBACiBvYmoteSArPSBsaWIubworb2JqLXkgKz0g ZG9tYWluX2J1aWxkLm8KIG9iai15ICs9IGJvb3QuaW5pdC5vCmRpZmYgLS1naXQgYS94ZW4vYXJj aC9hcm0vYWNwaS9kb21haW5fYnVpbGQuYyBiL3hlbi9hcmNoL2FybS9hY3BpL2RvbWFpbl9idWls ZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0ZDNhZDEKLS0tIC9kZXYv bnVsbAorKysgYi94ZW4vYXJjaC9hcm0vYWNwaS9kb21haW5fYnVpbGQuYwpAQCAtMCwwICsxLDU5 MiBAQAorLyoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz dHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29m dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAq IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFt IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBi dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50 eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ T1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0 YWlscy4KKyAqLworCisjaW5jbHVkZSA8eGVuL21tLmg+CisjaW5jbHVkZSA8eGVuL3NjaGVkLmg+ CisjaW5jbHVkZSA8eGVuL2FjcGkuaD4KKyNpbmNsdWRlIDx4ZW4vZXZlbnQuaD4KKyNpbmNsdWRl IDx4ZW4vaW9jYXAuaD4KKyNpbmNsdWRlIDx4ZW4vZGV2aWNlX3RyZWUuaD4KKyNpbmNsdWRlIDx4 ZW4vbGliZmR0L2xpYmZkdC5oPgorI2luY2x1ZGUgPGFjcGkvYWN0YWJsZXMuaD4KKyNpbmNsdWRl IDxhc20va2VybmVsLmg+CisjaW5jbHVkZSA8YXNtL2RvbWFpbl9idWlsZC5oPgorCisvKiBPdmVy cmlkZSBtYWNyb3MgZnJvbSBhc20vcGFnZS5oIHRvIG1ha2UgdGhlbSB3b3JrIHdpdGggbWZuX3Qg Ki8KKyN1bmRlZiB2aXJ0X3RvX21mbgorI2RlZmluZSB2aXJ0X3RvX21mbih2YSkgX21mbihfX3Zp cnRfdG9fbWZuKHZhKSkKKworI2RlZmluZSBBQ1BJX0RPTTBfRkRUX01JTl9TSVpFIDQwOTYKKwor c3RhdGljIGludCBfX2luaXQgYWNwaV9pb21lbV9kZW55X2FjY2VzcyhzdHJ1Y3QgZG9tYWluICpk KQoreworICAgIGFjcGlfc3RhdHVzIHN0YXR1czsKKyAgICBzdHJ1Y3QgYWNwaV90YWJsZV9zcGNy ICpzcGNyID0gTlVMTDsKKyAgICB1bnNpZ25lZCBsb25nIG1mbjsKKyAgICBpbnQgcmM7CisKKyAg ICAvKiBGaXJzdGx5IHBlcm1pdCBmdWxsIE1NSU8gY2FwYWJpbGl0aWVzLiAqLworICAgIHJjID0g aW9tZW1fcGVybWl0X2FjY2VzcyhkLCAwVUwsIH4wVUwpOworICAgIGlmICggcmMgKQorICAgICAg ICByZXR1cm4gcmM7CisKKyAgICAvKiBUT0RPOiBEZW55IE1NSU8gYWNjZXNzIGZvciBTTU1VLCBH SUMgSVRTICovCisgICAgc3RhdHVzID0gYWNwaV9nZXRfdGFibGUoQUNQSV9TSUdfU1BDUiwgMCwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3RydWN0IGFjcGlfdGFibGVfaGVhZGVyICoq KSZzcGNyKTsKKworICAgIGlmICggQUNQSV9GQUlMVVJFKHN0YXR1cykgKQorICAgIHsKKyAgICAg ICAgcHJpbnRrKCJGYWlsZWQgdG8gZ2V0IFNQQ1IgdGFibGVcbiIpOworICAgICAgICByZXR1cm4g LUVJTlZBTDsKKyAgICB9CisKKyAgICBtZm4gPSBzcGNyLT5zZXJpYWxfcG9ydC5hZGRyZXNzID4+ IFBBR0VfU0hJRlQ7CisgICAgLyogRGVueSBNTUlPIGFjY2VzcyBmb3IgVUFSVCAqLworICAgIHJj ID0gaW9tZW1fZGVueV9hY2Nlc3MoZCwgbWZuLCBtZm4gKyAxKTsKKyAgICBpZiAoIHJjICkKKyAg ICAgICAgcmV0dXJuIHJjOworCisgICAgLyogRGVueSBNTUlPIGFjY2VzcyBmb3IgR0lDIHJlZ2lv bnMgKi8KKyAgICByZXR1cm4gZ2ljX2lvbWVtX2RlbnlfYWNjZXNzKGQpOworfQorCitzdGF0aWMg aW50IF9faW5pdCBhY3BpX3JvdXRlX3NwaXMoc3RydWN0IGRvbWFpbiAqZCkKK3sKKyAgICBpbnQg aSwgcmVzOworICAgIHN0cnVjdCBpcnFfZGVzYyAqZGVzYzsKKworICAgIC8qCisgICAgICogUm91 dGUgdGhlIElSUSB0byBoYXJkd2FyZSBkb21haW4gYW5kIHBlcm1pdCB0aGUgYWNjZXNzLgorICAg ICAqIFRoZSBpbnRlcnJ1cHQgdHlwZSB3aWxsIGJlIHNldCBieSBzZXQgYnkgdGhlIGhhcmR3YXJl IGRvbWFpbi4KKyAgICAgKi8KKyAgICBmb3IoIGkgPSBOUl9MT0NBTF9JUlFTOyBpIDwgdmdpY19u dW1faXJxcyhkKTsgaSsrICkKKyAgICB7CisgICAgICAgIC8qCisgICAgICAgICAqIFRPRE86IEV4 Y2x1ZGUgdGhlIFNQSXMgU01NVSB1c2VzIHdoaWNoIHNob3VsZCBub3QgYmUgcm91dGVkIHRvCisg ICAgICAgICAqIHRoZSBoYXJkd2FyZSBkb21haW4uCisgICAgICAgICAqLworICAgICAgICBkZXNj ID0gaXJxX3RvX2Rlc2MoaSk7CisgICAgICAgIGlmICggZGVzYy0+YWN0aW9uICE9IE5VTEwpCisg ICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAvKiBYWFg6IFNoYWxsIHdlIHVzZSBhIHBy b3BlciBkZXZuYW1lPyAqLworICAgICAgICByZXMgPSBtYXBfaXJxX3RvX2RvbWFpbihkLCBpLCB0 cnVlLCAiQUNQSSIpOworICAgICAgICBpZiAoIHJlcyApCisgICAgICAgICAgICByZXR1cm4gcmVz OworICAgIH0KKworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9faW5pdCBhY3BpX21h a2VfaHlwZXJ2aXNvcl9ub2RlKGNvbnN0IHN0cnVjdCBrZXJuZWxfaW5mbyAqa2luZm8sCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBtZW1iYW5rIHRi bF9hZGRbXSkKK3sKKyAgICBjb25zdCBjaGFyIGNvbXBhdFtdID0KKyAgICAgICAgInhlbix4ZW4t Il9fc3RyaW5naWZ5KFhFTl9WRVJTSU9OKSIuIl9fc3RyaW5naWZ5KFhFTl9TVUJWRVJTSU9OKSJc MCIKKyAgICAgICAgInhlbix4ZW4iOworICAgIGludCByZXM7CisgICAgLyogQ29udmVuaWVuY2Ug YWxpYXMgKi8KKyAgICB2b2lkICpmZHQgPSBraW5mby0+ZmR0OworCisgICAgZHRfZHByaW50aygi Q3JlYXRlIGh5cGVydmlzb3Igbm9kZVxuIik7CisKKyAgICAvKiBTZWUgbGludXggRG9jdW1lbnRh dGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2FybS94ZW4udHh0ICovCisgICAgcmVzID0gZmR0X2Jl Z2luX25vZGUoZmR0LCAiaHlwZXJ2aXNvciIpOworICAgIGlmICggcmVzICkKKyAgICAgICAgcmV0 dXJuIHJlczsKKworICAgIC8qIENhbm5vdCB1c2UgZmR0X3Byb3BlcnR5X3N0cmluZyBkdWUgdG8g ZW1iZWRkZWQgbnVsbHMgKi8KKyAgICByZXMgPSBmZHRfcHJvcGVydHkoZmR0LCAiY29tcGF0aWJs ZSIsIGNvbXBhdCwgc2l6ZW9mKGNvbXBhdCkpOworICAgIGlmICggcmVzICkKKyAgICAgICAgcmV0 dXJuIHJlczsKKworICAgIHJlcyA9IGFjcGlfbWFrZV9lZmlfbm9kZXMoZmR0LCB0YmxfYWRkKTsK KyAgICBpZiAoIHJlcyApCisgICAgICAgIHJldHVybiByZXM7CisKKyAgICByZXMgPSBmZHRfZW5k X25vZGUoZmR0KTsKKworICAgIHJldHVybiByZXM7Cit9CisKKy8qCisgKiBQcmVwYXJlIGEgbWlu aW1hbCBEVEIgZm9yIERvbTAgd2hpY2ggY29udGFpbnMgYm9vdGFyZ3MsIGluaXRyZCwgbWVtb3J5 CisgKiBpbmZvcm1hdGlvbiwgRUZJIHRhYmxlLgorICovCitzdGF0aWMgaW50IF9faW5pdCBjcmVh dGVfYWNwaV9kdGIoc3RydWN0IGtlcm5lbF9pbmZvICpraW5mbywKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBzdHJ1Y3QgbWVtYmFuayB0YmxfYWRkW10pCit7CisgICAgaW50IG5l d19zaXplOworICAgIGludCByZXQ7CisKKyAgICBkdF9kcHJpbnRrKCJQcmVwYXJlIGEgbWluIERU QiBmb3IgRE9NMFxuIik7CisKKyAgICAvKiBBbGxvY2F0ZSBtaW4gc2l6ZSBmb3IgRFQgKi8KKyAg ICBuZXdfc2l6ZSA9IEFDUElfRE9NMF9GRFRfTUlOX1NJWkU7CisgICAga2luZm8tPmZkdCA9IHht YWxsb2NfYnl0ZXMobmV3X3NpemUpOworCisgICAgaWYgKCBraW5mby0+ZmR0ID09IE5VTEwgKQor ICAgICAgICByZXR1cm4gLUVOT01FTTsKKworICAgIC8qIENyZWF0ZSBhIG5ldyBlbXB0eSBEVCBm b3IgRE9NMCAqLworICAgIHJldCA9IGZkdF9jcmVhdGUoa2luZm8tPmZkdCwgbmV3X3NpemUpOwor ICAgIGlmICggcmV0IDwgMCApCisgICAgICAgIGdvdG8gZXJyOworCisgICAgcmV0ID0gZmR0X2Zp bmlzaF9yZXNlcnZlbWFwKGtpbmZvLT5mZHQpOworICAgIGlmICggcmV0IDwgMCApCisgICAgICAg IGdvdG8gZXJyOworCisgICAgcmV0ID0gZmR0X2JlZ2luX25vZGUoa2luZm8tPmZkdCwgIi8iKTsK KyAgICBpZiAoIHJldCA8IDAgKQorICAgICAgICBnb3RvIGVycjsKKworICAgIHJldCA9IGZkdF9w cm9wZXJ0eV9jZWxsKGtpbmZvLT5mZHQsICIjYWRkcmVzcy1jZWxscyIsIDIpOworICAgIGlmICgg cmV0ICkKKyAgICAgICAgcmV0dXJuIHJldDsKKworICAgIHJldCA9IGZkdF9wcm9wZXJ0eV9jZWxs KGtpbmZvLT5mZHQsICIjc2l6ZS1jZWxscyIsIDEpOworICAgIGlmICggcmV0ICkKKyAgICAgICAg cmV0dXJuIHJldDsKKworICAgIC8qIENyZWF0ZSBhIGNob3NlbiBub2RlIGZvciBET00wICovCisg ICAgcmV0ID0gbWFrZV9jaG9zZW5fbm9kZShraW5mbyk7CisgICAgaWYgKCByZXQgKQorICAgICAg ICBnb3RvIGVycjsKKworICAgIHJldCA9IGFjcGlfbWFrZV9oeXBlcnZpc29yX25vZGUoa2luZm8s IHRibF9hZGQpOworICAgIGlmICggcmV0ICkKKyAgICAgICAgZ290byBlcnI7CisKKyAgICByZXQg PSBmZHRfZW5kX25vZGUoa2luZm8tPmZkdCk7CisgICAgaWYgKCByZXQgPCAwICkKKyAgICAgICAg Z290byBlcnI7CisKKyAgICByZXQgPSBmZHRfZmluaXNoKGtpbmZvLT5mZHQpOworICAgIGlmICgg cmV0IDwgMCApCisgICAgICAgIGdvdG8gZXJyOworCisgICAgcmV0dXJuIDA7CisKKyAgZXJyOgor ICAgIHByaW50aygiRGV2aWNlIHRyZWUgZ2VuZXJhdGlvbiBmYWlsZWQgKCVkKS5cbiIsIHJldCk7 CisgICAgeGZyZWUoa2luZm8tPmZkdCk7CisgICAgcmV0dXJuIC1FSU5WQUw7Cit9CisKK3N0YXRp YyB2b2lkIF9faW5pdCBhY3BpX21hcF9vdGhlcl90YWJsZXMoc3RydWN0IGRvbWFpbiAqZCkKK3sK KyAgICBpbnQgaTsKKyAgICB1bnNpZ25lZCBsb25nIHJlczsKKyAgICB1NjQgYWRkciwgc2l6ZTsK KworICAgIC8qIE1hcCBhbGwgQUNQSSB0YWJsZXMgdG8gRG9tMCB1c2luZyAxOjEgbWFwcGluZ3Mu ICovCisgICAgZm9yKCBpID0gMDsgaSA8IGFjcGlfZ2JsX3Jvb3RfdGFibGVfbGlzdC5jb3VudDsg aSsrICkKKyAgICB7CisgICAgICAgIGFkZHIgPSBhY3BpX2dibF9yb290X3RhYmxlX2xpc3QudGFi bGVzW2ldLmFkZHJlc3M7CisgICAgICAgIHNpemUgPSBhY3BpX2dibF9yb290X3RhYmxlX2xpc3Qu dGFibGVzW2ldLmxlbmd0aDsKKyAgICAgICAgcmVzID0gbWFwX3JlZ2lvbnNfcDJtdChkLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdhZGRyX3RvX2dmbihhZGRyKSwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBQRk5fVVAoc2l6ZSksCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgbWFkZHJfdG9fbWZuKGFkZHIpLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHAybV9tbWlvX2RpcmVjdF9jKTsKKyAgICAgICAgaWYgKCByZXMgKQorICAgICAgICB7 CisgICAgICAgICAgICAgcGFuaWMoWEVOTE9HX0VSUiAiVW5hYmxlIHRvIG1hcCBBQ1BJIHJlZ2lv biAweCUiUFJJeDY0CisgICAgICAgICAgICAgICAgICAgIiAtIDB4JSJQUkl4NjQiIGluIGRvbWFp blxuIiwKKyAgICAgICAgICAgICAgICAgICBhZGRyICYgUEFHRV9NQVNLLCBQQUdFX0FMSUdOKGFk ZHIgKyBzaXplKSAtIDEpOworICAgICAgICB9CisgICAgfQorfQorCitzdGF0aWMgaW50IF9faW5p dCBhY3BpX2NyZWF0ZV9yc2RwKHN0cnVjdCBkb21haW4gKmQsIHN0cnVjdCBtZW1iYW5rIHRibF9h ZGRbXSkKK3sKKworICAgIHN0cnVjdCBhY3BpX3RhYmxlX3JzZHAgKnJzZHAgPSBOVUxMOworICAg IHU2NCBhZGRyOworICAgIHU2NCB0YWJsZV9zaXplID0gc2l6ZW9mKHN0cnVjdCBhY3BpX3RhYmxl X3JzZHApOworICAgIHU4ICpiYXNlX3B0cjsKKyAgICB1OCBjaGVja3N1bTsKKworICAgIGFkZHIg PSBhY3BpX29zX2dldF9yb290X3BvaW50ZXIoKTsKKyAgICBpZiAoICFhZGRyICApCisgICAgewor ICAgICAgICBwcmludGsoIlVuYWJsZSB0byBnZXQgYWNwaSByb290IHBvaW50ZXJcbiIpOworICAg ICAgICByZXR1cm4gLUVJTlZBTDsKKyAgICB9CisgICAgcnNkcCA9IGFjcGlfb3NfbWFwX21lbW9y eShhZGRyLCB0YWJsZV9zaXplKTsKKyAgICBiYXNlX3B0ciA9IGQtPmFyY2guZWZpX2FjcGlfdGFi bGUKKyAgICAgICAgICAgICAgICsgYWNwaV9nZXRfdGFibGVfb2Zmc2V0KHRibF9hZGQsIFRCTF9S U0RQKTsKKyAgICBtZW1jcHkoYmFzZV9wdHIsIHJzZHAsIHRhYmxlX3NpemUpOworICAgIGFjcGlf b3NfdW5tYXBfbWVtb3J5KHJzZHAsIHRhYmxlX3NpemUpOworCisgICAgcnNkcCA9IChzdHJ1Y3Qg YWNwaV90YWJsZV9yc2RwICopYmFzZV9wdHI7CisgICAgLyogUmVwbGFjZSB4c2R0X3BoeXNpY2Fs X2FkZHJlc3MgKi8KKyAgICByc2RwLT54c2R0X3BoeXNpY2FsX2FkZHJlc3MgPSB0YmxfYWRkW1RC TF9YU0RUXS5zdGFydDsKKyAgICBjaGVja3N1bSA9IGFjcGlfdGJfY2hlY2tzdW0oQUNQSV9DQVNU X1BUUih1OCwgcnNkcCksIHRhYmxlX3NpemUpOworICAgIHJzZHAtPmNoZWNrc3VtID0gcnNkcC0+ Y2hlY2tzdW0gLSBjaGVja3N1bTsKKworICAgIHRibF9hZGRbVEJMX1JTRFBdLnN0YXJ0ID0gZC0+ YXJjaC5lZmlfYWNwaV9ncGEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgYWNwaV9n ZXRfdGFibGVfb2Zmc2V0KHRibF9hZGQsIFRCTF9SU0RQKTsKKyAgICB0YmxfYWRkW1RCTF9SU0RQ XS5zaXplID0gdGFibGVfc2l6ZTsKKworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBf X2luaXQgYWNwaV94c2R0X21vZGlmeV9lbnRyeSh1NjQgZW50cnlbXSwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgZW50cnlfY291bnQsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpzaWduYXR1cmUs IHU2NCBhZGRyKQoreworICAgIGludCBpOworICAgIHN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlciAq dGFibGU7CisgICAgdTY0IHNpemUgPSBzaXplb2Yoc3RydWN0IGFjcGlfdGFibGVfaGVhZGVyKTsK KworICAgIGZvciggaSA9IDA7IGkgPCBlbnRyeV9jb3VudDsgaSsrICkKKyAgICB7CisgICAgICAg IHRhYmxlID0gYWNwaV9vc19tYXBfbWVtb3J5KGVudHJ5W2ldLCBzaXplKTsKKyAgICAgICAgaWYg KCBBQ1BJX0NPTVBBUkVfTkFNRSh0YWJsZS0+c2lnbmF0dXJlLCBzaWduYXR1cmUpICkKKyAgICAg ICAgeworICAgICAgICAgICAgZW50cnlbaV0gPSBhZGRyOworICAgICAgICAgICAgYWNwaV9vc191 bm1hcF9tZW1vcnkodGFibGUsIHNpemUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K KyAgICAgICAgYWNwaV9vc191bm1hcF9tZW1vcnkodGFibGUsIHNpemUpOworICAgIH0KK30KKwor c3RhdGljIGludCBfX2luaXQgYWNwaV9jcmVhdGVfeHNkdChzdHJ1Y3QgZG9tYWluICpkLCBzdHJ1 Y3QgbWVtYmFuayB0YmxfYWRkW10pCit7CisgICAgc3RydWN0IGFjcGlfdGFibGVfaGVhZGVyICp0 YWJsZSA9IE5VTEw7CisgICAgc3RydWN0IGFjcGlfdGFibGVfcnNkcCAqcnNkcF90Ymw7CisgICAg c3RydWN0IGFjcGlfdGFibGVfeHNkdCAqeHNkdCA9IE5VTEw7CisgICAgdTY0IHRhYmxlX3NpemUs IGFkZHI7CisgICAgdW5zaWduZWQgbG9uZyBlbnRyeV9jb3VudDsKKyAgICB1OCAqYmFzZV9wdHI7 CisgICAgdTggY2hlY2tzdW07CisKKyAgICBhZGRyID0gYWNwaV9vc19nZXRfcm9vdF9wb2ludGVy KCk7CisgICAgaWYgKCAhYWRkciApCisgICAgeworICAgICAgICBwcmludGsoIlVuYWJsZSB0byBn ZXQgYWNwaSByb290IHBvaW50ZXJcbiIpOworICAgICAgICByZXR1cm4gLUVJTlZBTDsKKyAgICB9 CisgICAgcnNkcF90YmwgPSBhY3BpX29zX21hcF9tZW1vcnkoYWRkciwgc2l6ZW9mKHN0cnVjdCBh Y3BpX3RhYmxlX3JzZHApKTsKKyAgICB0YWJsZSA9IGFjcGlfb3NfbWFwX21lbW9yeShyc2RwX3Ri bC0+eHNkdF9waHlzaWNhbF9hZGRyZXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHNpemVvZihzdHJ1Y3QgYWNwaV90YWJsZV9oZWFkZXIpKTsKKworICAgIC8qIEFkZCBwbGFjZSBm b3IgU1RBTyB0YWJsZSBpbiBYU0RUIHRhYmxlICovCisgICAgdGFibGVfc2l6ZSA9IHRhYmxlLT5s ZW5ndGggKyBzaXplb2YodTY0KTsKKyAgICBlbnRyeV9jb3VudCA9ICh0YWJsZS0+bGVuZ3RoIC0g c2l6ZW9mKHN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlcikpCisgICAgICAgICAgICAgICAgICAvIHNp emVvZih1NjQpOworICAgIGJhc2VfcHRyID0gZC0+YXJjaC5lZmlfYWNwaV90YWJsZQorICAgICAg ICAgICAgICAgKyBhY3BpX2dldF90YWJsZV9vZmZzZXQodGJsX2FkZCwgVEJMX1hTRFQpOworICAg IG1lbWNweShiYXNlX3B0ciwgdGFibGUsIHRhYmxlLT5sZW5ndGgpOworICAgIGFjcGlfb3NfdW5t YXBfbWVtb3J5KHRhYmxlLCBzaXplb2Yoc3RydWN0IGFjcGlfdGFibGVfaGVhZGVyKSk7CisgICAg YWNwaV9vc191bm1hcF9tZW1vcnkocnNkcF90YmwsIHNpemVvZihzdHJ1Y3QgYWNwaV90YWJsZV9y c2RwKSk7CisKKyAgICB4c2R0ID0gKHN0cnVjdCBhY3BpX3RhYmxlX3hzZHQgKiliYXNlX3B0cjsK KyAgICBhY3BpX3hzZHRfbW9kaWZ5X2VudHJ5KHhzZHQtPnRhYmxlX29mZnNldF9lbnRyeSwgZW50 cnlfY291bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBBQ1BJX1NJR19GQURULCB0Ymxf YWRkW1RCTF9GQURUXS5zdGFydCk7CisgICAgYWNwaV94c2R0X21vZGlmeV9lbnRyeSh4c2R0LT50 YWJsZV9vZmZzZXRfZW50cnksIGVudHJ5X2NvdW50LAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgQUNQSV9TSUdfTUFEVCwgdGJsX2FkZFtUQkxfTUFEVF0uc3RhcnQpOworICAgIHhzZHQtPnRh YmxlX29mZnNldF9lbnRyeVtlbnRyeV9jb3VudF0gPSB0YmxfYWRkW1RCTF9TVEFPXS5zdGFydDsK KworICAgIHhzZHQtPmhlYWRlci5sZW5ndGggPSB0YWJsZV9zaXplOworICAgIGNoZWNrc3VtID0g YWNwaV90Yl9jaGVja3N1bShBQ1BJX0NBU1RfUFRSKHU4LCB4c2R0KSwgdGFibGVfc2l6ZSk7Cisg ICAgeHNkdC0+aGVhZGVyLmNoZWNrc3VtIC09IGNoZWNrc3VtOworCisgICAgdGJsX2FkZFtUQkxf WFNEVF0uc3RhcnQgPSBkLT5hcmNoLmVmaV9hY3BpX2dwYQorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKyBhY3BpX2dldF90YWJsZV9vZmZzZXQodGJsX2FkZCwgVEJMX1hTRFQpOworICAg IHRibF9hZGRbVEJMX1hTRFRdLnNpemUgPSB0YWJsZV9zaXplOworCisgICAgcmV0dXJuIDA7Cit9 CisKK3N0YXRpYyBpbnQgX19pbml0IGFjcGlfY3JlYXRlX3N0YW8oc3RydWN0IGRvbWFpbiAqZCwg c3RydWN0IG1lbWJhbmsgdGJsX2FkZFtdKQoreworICAgIHN0cnVjdCBhY3BpX3RhYmxlX2hlYWRl ciAqdGFibGUgPSBOVUxMOworICAgIHN0cnVjdCBhY3BpX3RhYmxlX3N0YW8gKnN0YW8gPSBOVUxM OworICAgIHUzMiB0YWJsZV9zaXplID0gc2l6ZW9mKHN0cnVjdCBhY3BpX3RhYmxlX3N0YW8pOwor ICAgIHUzMiBvZmZzZXQgPSBhY3BpX2dldF90YWJsZV9vZmZzZXQodGJsX2FkZCwgVEJMX1NUQU8p OworICAgIGFjcGlfc3RhdHVzIHN0YXR1czsKKyAgICB1OCAqYmFzZV9wdHIsIGNoZWNrc3VtOwor CisgICAgLyogQ29weSBPRU0gYW5kIEFTTCBjb21waWxlciBmaWVsZHMgZnJvbSBhbm90aGVyIHRh YmxlLCB1c2UgTUFEVCAqLworICAgIHN0YXR1cyA9IGFjcGlfZ2V0X3RhYmxlKEFDUElfU0lHX01B RFQsIDAsICZ0YWJsZSk7CisKKyAgICBpZiAoIEFDUElfRkFJTFVSRShzdGF0dXMpICkKKyAgICB7 CisgICAgICAgIGNvbnN0IGNoYXIgKm1zZyA9IGFjcGlfZm9ybWF0X2V4Y2VwdGlvbihzdGF0dXMp OworCisgICAgICAgIHByaW50aygiU1RBTzogRmFpbGVkIHRvIGdldCBNQURUIHRhYmxlLCAlc1xu IiwgbXNnKTsKKyAgICAgICAgcmV0dXJuIC1FSU5WQUw7CisgICAgfQorCisgICAgYmFzZV9wdHIg PSBkLT5hcmNoLmVmaV9hY3BpX3RhYmxlICsgb2Zmc2V0OworICAgIG1lbWNweShiYXNlX3B0ciwg dGFibGUsIHNpemVvZihzdHJ1Y3QgYWNwaV90YWJsZV9oZWFkZXIpKTsKKworICAgIHN0YW8gPSAo c3RydWN0IGFjcGlfdGFibGVfc3RhbyAqKWJhc2VfcHRyOworICAgIG1lbWNweShzdGFvLT5oZWFk ZXIuc2lnbmF0dXJlLCBBQ1BJX1NJR19TVEFPLCA0KTsKKyAgICBzdGFvLT5oZWFkZXIucmV2aXNp b24gPSAxOworICAgIHN0YW8tPmhlYWRlci5sZW5ndGggPSB0YWJsZV9zaXplOworICAgIHN0YW8t Pmlnbm9yZV91YXJ0ID0gMTsKKyAgICBjaGVja3N1bSA9IGFjcGlfdGJfY2hlY2tzdW0oQUNQSV9D QVNUX1BUUih1OCwgc3RhbyksIHRhYmxlX3NpemUpOworICAgIHN0YW8tPmhlYWRlci5jaGVja3N1 bSAtPSBjaGVja3N1bTsKKworICAgIHRibF9hZGRbVEJMX1NUQU9dLnN0YXJ0ID0gZC0+YXJjaC5l ZmlfYWNwaV9ncGEgKyBvZmZzZXQ7CisgICAgdGJsX2FkZFtUQkxfU1RBT10uc2l6ZSA9IHRhYmxl X3NpemU7CisKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludCBfX2luaXQgYWNwaV9jcmVh dGVfbWFkdChzdHJ1Y3QgZG9tYWluICpkLCBzdHJ1Y3QgbWVtYmFuayB0YmxfYWRkW10pCit7Cisg ICAgc3RydWN0IGFjcGlfdGFibGVfaGVhZGVyICp0YWJsZSA9IE5VTEw7CisgICAgc3RydWN0IGFj cGlfdGFibGVfbWFkdCAqbWFkdCA9IE5VTEw7CisgICAgc3RydWN0IGFjcGlfc3VidGFibGVfaGVh ZGVyICpoZWFkZXI7CisgICAgc3RydWN0IGFjcGlfbWFkdF9nZW5lcmljX2Rpc3RyaWJ1dG9yICpn aWNkOworICAgIHUzMiB0YWJsZV9zaXplID0gc2l6ZW9mKHN0cnVjdCBhY3BpX3RhYmxlX21hZHQp OworICAgIHUzMiBvZmZzZXQgPSBhY3BpX2dldF90YWJsZV9vZmZzZXQodGJsX2FkZCwgVEJMX01B RFQpOworICAgIGludCByZXQ7CisgICAgYWNwaV9zdGF0dXMgc3RhdHVzOworICAgIHU4ICpiYXNl X3B0ciwgY2hlY2tzdW07CisKKyAgICBzdGF0dXMgPSBhY3BpX2dldF90YWJsZShBQ1BJX1NJR19N QURULCAwLCAmdGFibGUpOworCisgICAgaWYgKCBBQ1BJX0ZBSUxVUkUoc3RhdHVzKSApCisgICAg eworICAgICAgICBjb25zdCBjaGFyICptc2cgPSBhY3BpX2Zvcm1hdF9leGNlcHRpb24oc3RhdHVz KTsKKworICAgICAgICBwcmludGsoIkZhaWxlZCB0byBnZXQgTUFEVCB0YWJsZSwgJXNcbiIsIG1z Zyk7CisgICAgICAgIHJldHVybiAtRUlOVkFMOworICAgIH0KKworICAgIGJhc2VfcHRyID0gZC0+ YXJjaC5lZmlfYWNwaV90YWJsZSArIG9mZnNldDsKKyAgICBtZW1jcHkoYmFzZV9wdHIsIHRhYmxl LCB0YWJsZV9zaXplKTsKKworICAgIC8qIEFkZCBHZW5lcmljIERpc3RyaWJ1dG9yLiAqLworICAg IGhlYWRlciA9IGFjcGlfdGFibGVfZ2V0X2VudHJ5X21hZHQoQUNQSV9NQURUX1RZUEVfR0VORVJJ Q19ESVNUUklCVVRPUiwgMCk7CisgICAgaWYgKCAhaGVhZGVyICkKKyAgICB7CisgICAgICAgIHBy aW50aygiQ2FuJ3QgZ2V0IEdJQ0QgZW50cnlcbiIpOworICAgICAgICByZXR1cm4gLUVJTlZBTDsK KyAgICB9CisgICAgZ2ljZCA9IGNvbnRhaW5lcl9vZihoZWFkZXIsIHN0cnVjdCBhY3BpX21hZHRf Z2VuZXJpY19kaXN0cmlidXRvciwgaGVhZGVyKTsKKyAgICBtZW1jcHkoYmFzZV9wdHIgKyB0YWJs ZV9zaXplLCBnaWNkLAorICAgICAgICAgICAgICAgIHNpemVvZihzdHJ1Y3QgYWNwaV9tYWR0X2dl bmVyaWNfZGlzdHJpYnV0b3IpKTsKKyAgICB0YWJsZV9zaXplICs9IHNpemVvZihzdHJ1Y3QgYWNw aV9tYWR0X2dlbmVyaWNfZGlzdHJpYnV0b3IpOworCisgICAgLyogQWRkIG90aGVyIHN1YnRhYmxl cy4gKi8KKyAgICByZXQgPSBnaWNfbWFrZV9od2RvbV9tYWR0KGQsIG9mZnNldCArIHRhYmxlX3Np emUpOworICAgIGlmICggcmV0IDwgMCApCisgICAgeworICAgICAgICBwcmludGsoIkZhaWxlZCB0 byBnZXQgb3RoZXIgc3VidGFibGVzXG4iKTsKKyAgICAgICAgcmV0dXJuIC1FSU5WQUw7CisgICAg fQorICAgIHRhYmxlX3NpemUgKz0gcmV0OworCisgICAgbWFkdCA9IChzdHJ1Y3QgYWNwaV90YWJs ZV9tYWR0ICopYmFzZV9wdHI7CisgICAgbWFkdC0+aGVhZGVyLmxlbmd0aCA9IHRhYmxlX3NpemU7 CisgICAgY2hlY2tzdW0gPSBhY3BpX3RiX2NoZWNrc3VtKEFDUElfQ0FTVF9QVFIodTgsIG1hZHQp LCB0YWJsZV9zaXplKTsKKyAgICBtYWR0LT5oZWFkZXIuY2hlY2tzdW0gLT0gY2hlY2tzdW07CisK KyAgICB0YmxfYWRkW1RCTF9NQURUXS5zdGFydCA9IGQtPmFyY2guZWZpX2FjcGlfZ3BhICsgb2Zm c2V0OworICAgIHRibF9hZGRbVEJMX01BRFRdLnNpemUgPSB0YWJsZV9zaXplOworCisgICAgcmV0 dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IGFjcGlfY3JlYXRlX2ZhZHQoc3RydWN0IGRv bWFpbiAqZCwgc3RydWN0IG1lbWJhbmsgdGJsX2FkZFtdKQoreworICAgIHN0cnVjdCBhY3BpX3Rh YmxlX2hlYWRlciAqdGFibGUgPSBOVUxMOworICAgIHN0cnVjdCBhY3BpX3RhYmxlX2ZhZHQgKmZh ZHQgPSBOVUxMOworICAgIHU2NCB0YWJsZV9zaXplOworICAgIGFjcGlfc3RhdHVzIHN0YXR1czsK KyAgICB1OCAqYmFzZV9wdHI7CisgICAgdTggY2hlY2tzdW07CisKKyAgICBzdGF0dXMgPSBhY3Bp X2dldF90YWJsZShBQ1BJX1NJR19GQURULCAwLCAmdGFibGUpOworCisgICAgaWYgKCBBQ1BJX0ZB SUxVUkUoc3RhdHVzKSApCisgICAgeworICAgICAgICBjb25zdCBjaGFyICptc2cgPSBhY3BpX2Zv cm1hdF9leGNlcHRpb24oc3RhdHVzKTsKKworICAgICAgICBwcmludGsoIkZhaWxlZCB0byBnZXQg RkFEVCB0YWJsZSwgJXNcbiIsIG1zZyk7CisgICAgICAgIHJldHVybiAtRUlOVkFMOworICAgIH0K KworICAgIHRhYmxlX3NpemUgPSB0YWJsZS0+bGVuZ3RoOworICAgIGJhc2VfcHRyID0gZC0+YXJj aC5lZmlfYWNwaV90YWJsZQorICAgICAgICAgICAgICAgKyBhY3BpX2dldF90YWJsZV9vZmZzZXQo dGJsX2FkZCwgVEJMX0ZBRFQpOworICAgIG1lbWNweShiYXNlX3B0ciwgdGFibGUsIHRhYmxlX3Np emUpOworICAgIGZhZHQgPSAoc3RydWN0IGFjcGlfdGFibGVfZmFkdCAqKWJhc2VfcHRyOworCisg ICAgLyogU2V0IFBTQ0lfQ09NUExJQU5UIGFuZCBQU0NJX1VTRV9IVkMgKi8KKyAgICBmYWR0LT5h cm1fYm9vdF9mbGFncyB8PSAoQUNQSV9GQURUX1BTQ0lfQ09NUExJQU5UIHwgQUNQSV9GQURUX1BT Q0lfVVNFX0hWQyk7CisgICAgY2hlY2tzdW0gPSBhY3BpX3RiX2NoZWNrc3VtKEFDUElfQ0FTVF9Q VFIodTgsIGZhZHQpLCB0YWJsZV9zaXplKTsKKyAgICBmYWR0LT5oZWFkZXIuY2hlY2tzdW0gLT0g Y2hlY2tzdW07CisKKyAgICB0YmxfYWRkW1RCTF9GQURUXS5zdGFydCA9IGQtPmFyY2guZWZpX2Fj cGlfZ3BhCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIGFjcGlfZ2V0X3RhYmxlX29m ZnNldCh0YmxfYWRkLCBUQkxfRkFEVCk7CisgICAgdGJsX2FkZFtUQkxfRkFEVF0uc2l6ZSA9IHRh YmxlX3NpemU7CisKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludCBfX2luaXQgZXN0aW1h dGVfYWNwaV9lZmlfc2l6ZShzdHJ1Y3QgZG9tYWluICpkLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qga2VybmVsX2luZm8gKmtpbmZvKQoreworICAgIHNp emVfdCBlZmlfc2l6ZSwgYWNwaV9zaXplLCBtYWR0X3NpemU7CisgICAgdTY0IGFkZHI7CisgICAg c3RydWN0IGFjcGlfdGFibGVfcnNkcCAqcnNkcF90Ymw7CisgICAgc3RydWN0IGFjcGlfdGFibGVf aGVhZGVyICp0YWJsZTsKKworICAgIGVmaV9zaXplID0gZXN0aW1hdGVfZWZpX3NpemUoa2luZm8t Pm1lbS5ucl9iYW5rcyk7CisKKyAgICBhY3BpX3NpemUgPSBST1VORFVQKHNpemVvZihzdHJ1Y3Qg YWNwaV90YWJsZV9mYWR0KSwgOCk7CisgICAgYWNwaV9zaXplICs9IFJPVU5EVVAoc2l6ZW9mKHN0 cnVjdCBhY3BpX3RhYmxlX3N0YW8pLCA4KTsKKworICAgIG1hZHRfc2l6ZSA9IGdpY19nZXRfaHdk b21fbWFkdF9zaXplKGQpOworICAgIGFjcGlfc2l6ZSArPSBST1VORFVQKG1hZHRfc2l6ZSwgOCk7 CisKKyAgICBhZGRyID0gYWNwaV9vc19nZXRfcm9vdF9wb2ludGVyKCk7CisgICAgaWYgKCAhYWRk ciApCisgICAgeworICAgICAgICBwcmludGsoIlVuYWJsZSB0byBnZXQgYWNwaSByb290IHBvaW50 ZXJcbiIpOworICAgICAgICByZXR1cm4gLUVJTlZBTDsKKyAgICB9CisKKyAgICByc2RwX3RibCA9 IGFjcGlfb3NfbWFwX21lbW9yeShhZGRyLCBzaXplb2Yoc3RydWN0IGFjcGlfdGFibGVfcnNkcCkp OworICAgIGlmICggIXJzZHBfdGJsICkKKyAgICB7CisgICAgICAgIHByaW50aygiVW5hYmxlIHRv IG1hcCBSU0RQIHRhYmxlXG4iKTsKKyAgICAgICAgcmV0dXJuIC1FSU5WQUw7CisgICAgfQorCisg ICAgdGFibGUgPSBhY3BpX29zX21hcF9tZW1vcnkocnNkcF90YmwtPnhzZHRfcGh5c2ljYWxfYWRk cmVzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yoc3RydWN0IGFjcGlf dGFibGVfaGVhZGVyKSk7CisgICAgYWNwaV9vc191bm1hcF9tZW1vcnkocnNkcF90YmwsIHNpemVv ZihzdHJ1Y3QgYWNwaV90YWJsZV9yc2RwKSk7CisgICAgaWYgKCAhdGFibGUgKQorICAgIHsKKyAg ICAgICAgcHJpbnRrKCJVbmFibGUgdG8gbWFwIFhTRFQgdGFibGVcbiIpOworICAgICAgICByZXR1 cm4gLUVJTlZBTDsKKyAgICB9CisKKyAgICAvKiBBZGQgcGxhY2UgZm9yIFNUQU8gdGFibGUgaW4g WFNEVCB0YWJsZSAqLworICAgIGFjcGlfc2l6ZSArPSBST1VORFVQKHRhYmxlLT5sZW5ndGggKyBz aXplb2YodTY0KSwgOCk7CisgICAgYWNwaV9vc191bm1hcF9tZW1vcnkodGFibGUsIHNpemVvZihz dHJ1Y3QgYWNwaV90YWJsZV9oZWFkZXIpKTsKKworICAgIGFjcGlfc2l6ZSArPSBST1VORFVQKHNp emVvZihzdHJ1Y3QgYWNwaV90YWJsZV9yc2RwKSwgOCk7CisgICAgZC0+YXJjaC5lZmlfYWNwaV9s ZW4gPSBQQUdFX0FMSUdOKFJPVU5EVVAoZWZpX3NpemUsIDgpCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICsgUk9VTkRVUChhY3BpX3NpemUsIDgpKTsKKworICAgIHJldHVy biAwOworfQorCitzdGF0aWMgaW50IF9faW5pdCBwcmVwYXJlX2FjcGkoc3RydWN0IGRvbWFpbiAq ZCwgc3RydWN0IGtlcm5lbF9pbmZvICpraW5mbykKK3sKKyAgICBpbnQgcmMgPSAwOworICAgIGlu dCBvcmRlcjsKKyAgICBzdHJ1Y3QgbWVtYmFuayB0YmxfYWRkW1RCTF9NTUFYXSA9IHt9OworCisg ICAgcmMgPSBlc3RpbWF0ZV9hY3BpX2VmaV9zaXplKGQsIGtpbmZvKTsKKyAgICBpZiAoIHJjICE9 IDAgKQorICAgICAgICByZXR1cm4gcmM7CisKKyAgICBvcmRlciA9IGdldF9vcmRlcl9mcm9tX2J5 dGVzKGQtPmFyY2guZWZpX2FjcGlfbGVuKTsKKyAgICBkLT5hcmNoLmVmaV9hY3BpX3RhYmxlID0g YWxsb2NfeGVuaGVhcF9wYWdlcyhvcmRlciwgMCk7CisgICAgaWYgKCBkLT5hcmNoLmVmaV9hY3Bp X3RhYmxlID09IE5VTEwgKQorICAgIHsKKyAgICAgICAgcHJpbnRrKCJ1bmFibGUgdG8gYWxsb2Nh dGUgbWVtb3J5IVxuIik7CisgICAgICAgIHJldHVybiAtRU5PTUVNOworICAgIH0KKyAgICBtZW1z ZXQoZC0+YXJjaC5lZmlfYWNwaV90YWJsZSwgMCwgZC0+YXJjaC5lZmlfYWNwaV9sZW4pOworCisg ICAgLyoKKyAgICAgKiBGb3IgQUNQSSwgRG9tMCBkb2Vzbid0IHVzZSBraW5mby0+Z250dGFiX3N0 YXJ0IHRvIGdldCB0aGUgZ3JhbnQgdGFibGUKKyAgICAgKiByZWdpb24uIFNvIHdlIHVzZSBpdCBh cyB0aGUgQUNQSSB0YWJsZSBtYXBwZWQgYWRkcmVzcy4gQWxzbyBpdCBuZWVkcyB0bworICAgICAq IGNoZWNrIGlmIHRoZSBzaXplIG9mIGdyYW50IHRhYmxlIHJlZ2lvbiBpcyBlbm91Z2ggZm9yIHRo b3NlIEFDUEkgdGFibGVzLgorICAgICAqLworICAgIGQtPmFyY2guZWZpX2FjcGlfZ3BhID0ga2lu Zm8tPmdudHRhYl9zdGFydDsKKyAgICBpZiAoIGtpbmZvLT5nbnR0YWJfc2l6ZSA8IGQtPmFyY2gu ZWZpX2FjcGlfbGVuICkKKyAgICB7CisgICAgICAgIHByaW50aygiVGhlIGdyYW50IHRhYmxlIHJl Z2lvbiBpcyBub3QgZW5vdWdoIHRvIGZpdCB0aGUgQUNQSSB0YWJsZXMhXG4iKTsKKyAgICAgICAg cmV0dXJuIC1FSU5WQUw7CisgICAgfQorCisgICAgcmMgPSBhY3BpX2NyZWF0ZV9mYWR0KGQsIHRi bF9hZGQpOworICAgIGlmICggcmMgIT0gMCApCisgICAgICAgIHJldHVybiByYzsKKworICAgIHJj ID0gYWNwaV9jcmVhdGVfbWFkdChkLCB0YmxfYWRkKTsKKyAgICBpZiAoIHJjICE9IDAgKQorICAg ICAgICByZXR1cm4gcmM7CisKKyAgICByYyA9IGFjcGlfY3JlYXRlX3N0YW8oZCwgdGJsX2FkZCk7 CisgICAgaWYgKCByYyAhPSAwICkKKyAgICAgICAgcmV0dXJuIHJjOworCisgICAgcmMgPSBhY3Bp X2NyZWF0ZV94c2R0KGQsIHRibF9hZGQpOworICAgIGlmICggcmMgIT0gMCApCisgICAgICAgIHJl dHVybiByYzsKKworICAgIHJjID0gYWNwaV9jcmVhdGVfcnNkcChkLCB0YmxfYWRkKTsKKyAgICBp ZiAoIHJjICE9IDAgKQorICAgICAgICByZXR1cm4gcmM7CisKKyAgICBhY3BpX21hcF9vdGhlcl90 YWJsZXMoZCk7CisgICAgYWNwaV9jcmVhdGVfZWZpX3N5c3RlbV90YWJsZShkLCB0YmxfYWRkKTsK KyAgICBhY3BpX2NyZWF0ZV9lZmlfbW1hcF90YWJsZShkLCAma2luZm8tPm1lbSwgdGJsX2FkZCk7 CisKKyAgICAvKiBNYXAgdGhlIEVGSSBhbmQgQUNQSSB0YWJsZXMgdG8gRG9tMCAqLworICAgIHJj ID0gbWFwX3JlZ2lvbnNfcDJtdChkLAorICAgICAgICAgICAgICAgICAgICAgICAgICBnYWRkcl90 b19nZm4oZC0+YXJjaC5lZmlfYWNwaV9ncGEpLAorICAgICAgICAgICAgICAgICAgICAgICAgICBQ Rk5fVVAoZC0+YXJjaC5lZmlfYWNwaV9sZW4pLAorICAgICAgICAgICAgICAgICAgICAgICAgICB2 aXJ0X3RvX21mbihkLT5hcmNoLmVmaV9hY3BpX3RhYmxlKSwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgcDJtX21taW9fZGlyZWN0X2MpOworICAgIGlmICggcmMgIT0gMCApCisgICAgeworICAg ICAgICBwcmludGsoWEVOTE9HX0VSUiAiVW5hYmxlIHRvIG1hcCBFRkkvQUNQSSB0YWJsZSAweCUi UFJJeDY0CisgICAgICAgICAgICAgICAiIC0gMHglIlBSSXg2NCIgaW4gZG9tYWluICVkXG4iLAor ICAgICAgICAgICAgICAgZC0+YXJjaC5lZmlfYWNwaV9ncGEgJiBQQUdFX01BU0ssCisgICAgICAg ICAgICAgICBQQUdFX0FMSUdOKGQtPmFyY2guZWZpX2FjcGlfZ3BhICsgZC0+YXJjaC5lZmlfYWNw aV9sZW4pIC0gMSwKKyAgICAgICAgICAgICAgIGQtPmRvbWFpbl9pZCk7CisgICAgICAgIHJldHVy biByYzsKKyAgICB9CisKKyAgICAvKgorICAgICAqIEZsdXNoIHRoZSBjYWNoZSBmb3IgdGhpcyBy ZWdpb24sIG90aGVyd2lzZSBET00wIG1heSByZWFkIHdyb25nIGRhdGEgd2hlbgorICAgICAqIHRo ZSBjYWNoZSBpcyBkaXNhYmxlZC4KKyAgICAgKi8KKyAgICBjbGVhbl9hbmRfaW52YWxpZGF0ZV9k Y2FjaGVfdmFfcmFuZ2UoZC0+YXJjaC5lZmlfYWNwaV90YWJsZSwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgZC0+YXJjaC5lZmlfYWNwaV9sZW4pOworCisgICAgcmMg PSBjcmVhdGVfYWNwaV9kdGIoa2luZm8sIHRibF9hZGQpOworICAgIGlmICggcmMgIT0gMCApCisg ICAgICAgIHJldHVybiByYzsKKworICAgIHJjID0gYWNwaV9yb3V0ZV9zcGlzKGQpOworICAgIGlm ICggcmMgIT0gMCApCisgICAgICAgIHJldHVybiByYzsKKworICAgIHJjID0gYWNwaV9pb21lbV9k ZW55X2FjY2VzcyhkKTsKKyAgICBpZiAoIHJjICE9IDAgKQorICAgICAgICByZXR1cm4gcmM7CisK KyAgICAvKgorICAgICAqIEFsbCBQUElzIGhhdmUgYmVlbiByZWdpc3RlcmVkLCBhbGxvY2F0ZSB0 aGUgZXZlbnQgY2hhbm5lbAorICAgICAqIGludGVycnVwdHMuCisgICAgICovCisgICAgZXZ0Y2hu X2FsbG9jYXRlKGQpOworCisgICAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS94ZW4vYXJjaC9h cm0vZG9tYWluX2J1aWxkLmMgYi94ZW4vYXJjaC9hcm0vZG9tYWluX2J1aWxkLmMKaW5kZXggNmY0 NzgzMi4uOWY4ZTM3YyAxMDA2NDQKLS0tIGEveGVuL2FyY2gvYXJtL2RvbWFpbl9idWlsZC5jCisr KyBiL3hlbi9hcmNoL2FybS9kb21haW5fYnVpbGQuYwpAQCAtMjMsNiArMjMsNyBAQAogI2luY2x1 ZGUgPGFzbS9wc2NpLmg+CiAjaW5jbHVkZSA8YXNtL3NldHVwLmg+CiAjaW5jbHVkZSA8YXNtL2Nw dWZlYXR1cmUuaD4KKyNpbmNsdWRlIDxhc20vZG9tYWluX2J1aWxkLmg+CiAKICNpbmNsdWRlIDx4 ZW4vaXJxLmg+CiAjaW5jbHVkZSA8eGVuL2dyYW50X3RhYmxlLmg+CkBAIC02NzYsOCArNjc3LDYg QEAgc3RhdGljIGludCBfX2luaXQgbWFrZV9tZW1vcnlfbm9kZShjb25zdCBzdHJ1Y3QgZG9tYWlu ICpkLAogICAgIHJldHVybiByZXM7CiB9CiAKLXN0YXRpYyB2b2lkIGV2dGNobl9hbGxvY2F0ZShz dHJ1Y3QgZG9tYWluICpkKTsKLQogc3RhdGljIGludCBfX2luaXQgbWFrZV9oeXBlcnZpc29yX25v ZGUoc3RydWN0IGRvbWFpbiAqZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGNvbnN0IHN0cnVjdCBrZXJuZWxfaW5mbyAqa2luZm8sCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBpbnQgYWRkcmNlbGxzLCBpbnQgc2l6ZWNlbGxzKQpAQCAtMTAz OCw3ICsxMDM3LDcgQEAgc3RhdGljIGludCBfX2luaXQgbWFrZV90aW1lcl9ub2RlKGNvbnN0IHN0 cnVjdCBkb21haW4gKmQsIHZvaWQgKmZkdCwKICAqIG9uIEFDUEkgc3lzdGVtcywgYW5kIERvbVVz IHN0YXJ0ZWQgZGlyZWN0bHkgZnJvbSBYZW4gYmFzZWQgb24gZGV2aWNlCiAgKiB0cmVlIGluZm9y bWF0aW9uLgogICovCi1zdGF0aWMgaW50IF9faW5pdCBtYWtlX2Nob3Nlbl9ub2RlKGNvbnN0IHN0 cnVjdCBrZXJuZWxfaW5mbyAqa2luZm8pCitpbnQgX19pbml0IG1ha2VfY2hvc2VuX25vZGUoY29u c3Qgc3RydWN0IGtlcm5lbF9pbmZvICpraW5mbykKIHsKICAgICBpbnQgcmVzOwogICAgIGNvbnN0 IGNoYXIgKmJvb3RhcmdzID0gTlVMTDsKQEAgLTEwNzksOCArMTA3OCw4IEBAIHN0YXRpYyBpbnQg X19pbml0IG1ha2VfY2hvc2VuX25vZGUoY29uc3Qgc3RydWN0IGtlcm5lbF9pbmZvICpraW5mbykK ICAgICByZXR1cm4gcmVzOwogfQogCi1zdGF0aWMgaW50IF9faW5pdCBtYXBfaXJxX3RvX2RvbWFp bihzdHJ1Y3QgZG9tYWluICpkLCB1bnNpZ25lZCBpbnQgaXJxLAotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgYm9vbCBuZWVkX21hcHBpbmcsIGNvbnN0IGNoYXIgKmRldm5hbWUp CitpbnQgX19pbml0IG1hcF9pcnFfdG9fZG9tYWluKHN0cnVjdCBkb21haW4gKmQsIHVuc2lnbmVk IGludCBpcnEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgbmVlZF9tYXBwaW5n LCBjb25zdCBjaGFyICpkZXZuYW1lKQogewogICAgIGludCByZXM7CiAKQEAgLTE3OTQsNTgwICsx NzkzLDYgQEAgc3RhdGljIGludCBfX2luaXQgcHJlcGFyZV9kdGJfaHdkb20oc3RydWN0IGRvbWFp biAqZCwgc3RydWN0IGtlcm5lbF9pbmZvICpraW5mbykKICAgICByZXR1cm4gLUVJTlZBTDsKIH0K IAotI2lmZGVmIENPTkZJR19BQ1BJCi0jZGVmaW5lIEFDUElfRE9NMF9GRFRfTUlOX1NJWkUgNDA5 NgotCi1zdGF0aWMgaW50IF9faW5pdCBhY3BpX2lvbWVtX2RlbnlfYWNjZXNzKHN0cnVjdCBkb21h aW4gKmQpCi17Ci0gICAgYWNwaV9zdGF0dXMgc3RhdHVzOwotICAgIHN0cnVjdCBhY3BpX3RhYmxl X3NwY3IgKnNwY3IgPSBOVUxMOwotICAgIHVuc2lnbmVkIGxvbmcgbWZuOwotICAgIGludCByYzsK LQotICAgIC8qIEZpcnN0bHkgcGVybWl0IGZ1bGwgTU1JTyBjYXBhYmlsaXRpZXMuICovCi0gICAg cmMgPSBpb21lbV9wZXJtaXRfYWNjZXNzKGQsIDBVTCwgfjBVTCk7Ci0gICAgaWYgKCByYyApCi0g ICAgICAgIHJldHVybiByYzsKLQotICAgIC8qIFRPRE86IERlbnkgTU1JTyBhY2Nlc3MgZm9yIFNN TVUsIEdJQyBJVFMgKi8KLSAgICBzdGF0dXMgPSBhY3BpX2dldF90YWJsZShBQ1BJX1NJR19TUENS LCAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdHJ1Y3QgYWNwaV90YWJsZV9oZWFk ZXIgKiopJnNwY3IpOwotCi0gICAgaWYgKCBBQ1BJX0ZBSUxVUkUoc3RhdHVzKSApCi0gICAgewot ICAgICAgICBwcmludGsoIkZhaWxlZCB0byBnZXQgU1BDUiB0YWJsZVxuIik7Ci0gICAgICAgIHJl dHVybiAtRUlOVkFMOwotICAgIH0KLQotICAgIG1mbiA9IHNwY3ItPnNlcmlhbF9wb3J0LmFkZHJl c3MgPj4gUEFHRV9TSElGVDsKLSAgICAvKiBEZW55IE1NSU8gYWNjZXNzIGZvciBVQVJUICovCi0g ICAgcmMgPSBpb21lbV9kZW55X2FjY2VzcyhkLCBtZm4sIG1mbiArIDEpOwotICAgIGlmICggcmMg KQotICAgICAgICByZXR1cm4gcmM7Ci0KLSAgICAvKiBEZW55IE1NSU8gYWNjZXNzIGZvciBHSUMg cmVnaW9ucyAqLwotICAgIHJldHVybiBnaWNfaW9tZW1fZGVueV9hY2Nlc3MoZCk7Ci19Ci0KLXN0 YXRpYyBpbnQgX19pbml0IGFjcGlfcm91dGVfc3BpcyhzdHJ1Y3QgZG9tYWluICpkKQotewotICAg IGludCBpLCByZXM7Ci0gICAgc3RydWN0IGlycV9kZXNjICpkZXNjOwotCi0gICAgLyoKLSAgICAg KiBSb3V0ZSB0aGUgSVJRIHRvIGhhcmR3YXJlIGRvbWFpbiBhbmQgcGVybWl0IHRoZSBhY2Nlc3Mu Ci0gICAgICogVGhlIGludGVycnVwdCB0eXBlIHdpbGwgYmUgc2V0IGJ5IHNldCBieSB0aGUgaGFy ZHdhcmUgZG9tYWluLgotICAgICAqLwotICAgIGZvciggaSA9IE5SX0xPQ0FMX0lSUVM7IGkgPCB2 Z2ljX251bV9pcnFzKGQpOyBpKysgKQotICAgIHsKLSAgICAgICAgLyoKLSAgICAgICAgICogVE9E TzogRXhjbHVkZSB0aGUgU1BJcyBTTU1VIHVzZXMgd2hpY2ggc2hvdWxkIG5vdCBiZSByb3V0ZWQg dG8KLSAgICAgICAgICogdGhlIGhhcmR3YXJlIGRvbWFpbi4KLSAgICAgICAgICovCi0gICAgICAg IGRlc2MgPSBpcnFfdG9fZGVzYyhpKTsKLSAgICAgICAgaWYgKCBkZXNjLT5hY3Rpb24gIT0gTlVM TCkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIC8qIFhYWDogU2hhbGwgd2UgdXNl IGEgcHJvcGVyIGRldm5hbWU/ICovCi0gICAgICAgIHJlcyA9IG1hcF9pcnFfdG9fZG9tYWluKGQs IGksIHRydWUsICJBQ1BJIik7Ci0gICAgICAgIGlmICggcmVzICkKLSAgICAgICAgICAgIHJldHVy biByZXM7Ci0gICAgfQotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgX19pbml0IGFj cGlfbWFrZV9oeXBlcnZpc29yX25vZGUoY29uc3Qgc3RydWN0IGtlcm5lbF9pbmZvICpraW5mbywK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IG1lbWJh bmsgdGJsX2FkZFtdKQotewotICAgIGNvbnN0IGNoYXIgY29tcGF0W10gPQotICAgICAgICAieGVu LHhlbi0iX19zdHJpbmdpZnkoWEVOX1ZFUlNJT04pIi4iX19zdHJpbmdpZnkoWEVOX1NVQlZFUlNJ T04pIlwwIgotICAgICAgICAieGVuLHhlbiI7Ci0gICAgaW50IHJlczsKLSAgICAvKiBDb252ZW5p ZW5jZSBhbGlhcyAqLwotICAgIHZvaWQgKmZkdCA9IGtpbmZvLT5mZHQ7Ci0KLSAgICBkdF9kcHJp bnRrKCJDcmVhdGUgaHlwZXJ2aXNvciBub2RlXG4iKTsKLQotICAgIC8qIFNlZSBsaW51eCBEb2N1 bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvYXJtL3hlbi50eHQgKi8KLSAgICByZXMgPSBm ZHRfYmVnaW5fbm9kZShmZHQsICJoeXBlcnZpc29yIik7Ci0gICAgaWYgKCByZXMgKQotICAgICAg ICByZXR1cm4gcmVzOwotCi0gICAgLyogQ2Fubm90IHVzZSBmZHRfcHJvcGVydHlfc3RyaW5nIGR1 ZSB0byBlbWJlZGRlZCBudWxscyAqLwotICAgIHJlcyA9IGZkdF9wcm9wZXJ0eShmZHQsICJjb21w YXRpYmxlIiwgY29tcGF0LCBzaXplb2YoY29tcGF0KSk7Ci0gICAgaWYgKCByZXMgKQotICAgICAg ICByZXR1cm4gcmVzOwotCi0gICAgcmVzID0gYWNwaV9tYWtlX2VmaV9ub2RlcyhmZHQsIHRibF9h ZGQpOwotICAgIGlmICggcmVzICkKLSAgICAgICAgcmV0dXJuIHJlczsKLQotICAgIHJlcyA9IGZk dF9lbmRfbm9kZShmZHQpOwotCi0gICAgcmV0dXJuIHJlczsKLX0KLQotLyoKLSAqIFByZXBhcmUg YSBtaW5pbWFsIERUQiBmb3IgRG9tMCB3aGljaCBjb250YWlucyBib290YXJncywgaW5pdHJkLCBt ZW1vcnkKLSAqIGluZm9ybWF0aW9uLCBFRkkgdGFibGUuCi0gKi8KLXN0YXRpYyBpbnQgX19pbml0 IGNyZWF0ZV9hY3BpX2R0YihzdHJ1Y3Qga2VybmVsX2luZm8gKmtpbmZvLAotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBtZW1iYW5rIHRibF9hZGRbXSkKLXsKLSAgICBp bnQgbmV3X3NpemU7Ci0gICAgaW50IHJldDsKLQotICAgIGR0X2RwcmludGsoIlByZXBhcmUgYSBt aW4gRFRCIGZvciBET00wXG4iKTsKLQotICAgIC8qIEFsbG9jYXRlIG1pbiBzaXplIGZvciBEVCAq LwotICAgIG5ld19zaXplID0gQUNQSV9ET00wX0ZEVF9NSU5fU0laRTsKLSAgICBraW5mby0+ZmR0 ID0geG1hbGxvY19ieXRlcyhuZXdfc2l6ZSk7Ci0KLSAgICBpZiAoIGtpbmZvLT5mZHQgPT0gTlVM TCApCi0gICAgICAgIHJldHVybiAtRU5PTUVNOwotCi0gICAgLyogQ3JlYXRlIGEgbmV3IGVtcHR5 IERUIGZvciBET00wICovCi0gICAgcmV0ID0gZmR0X2NyZWF0ZShraW5mby0+ZmR0LCBuZXdfc2l6 ZSk7Ci0gICAgaWYgKCByZXQgPCAwICkKLSAgICAgICAgZ290byBlcnI7Ci0KLSAgICByZXQgPSBm ZHRfZmluaXNoX3Jlc2VydmVtYXAoa2luZm8tPmZkdCk7Ci0gICAgaWYgKCByZXQgPCAwICkKLSAg ICAgICAgZ290byBlcnI7Ci0KLSAgICByZXQgPSBmZHRfYmVnaW5fbm9kZShraW5mby0+ZmR0LCAi LyIpOwotICAgIGlmICggcmV0IDwgMCApCi0gICAgICAgIGdvdG8gZXJyOwotCi0gICAgcmV0ID0g ZmR0X3Byb3BlcnR5X2NlbGwoa2luZm8tPmZkdCwgIiNhZGRyZXNzLWNlbGxzIiwgMik7Ci0gICAg aWYgKCByZXQgKQotICAgICAgICByZXR1cm4gcmV0OwotCi0gICAgcmV0ID0gZmR0X3Byb3BlcnR5 X2NlbGwoa2luZm8tPmZkdCwgIiNzaXplLWNlbGxzIiwgMSk7Ci0gICAgaWYgKCByZXQgKQotICAg ICAgICByZXR1cm4gcmV0OwotCi0gICAgLyogQ3JlYXRlIGEgY2hvc2VuIG5vZGUgZm9yIERPTTAg Ki8KLSAgICByZXQgPSBtYWtlX2Nob3Nlbl9ub2RlKGtpbmZvKTsKLSAgICBpZiAoIHJldCApCi0g ICAgICAgIGdvdG8gZXJyOwotCi0gICAgcmV0ID0gYWNwaV9tYWtlX2h5cGVydmlzb3Jfbm9kZShr aW5mbywgdGJsX2FkZCk7Ci0gICAgaWYgKCByZXQgKQotICAgICAgICBnb3RvIGVycjsKLQotICAg IHJldCA9IGZkdF9lbmRfbm9kZShraW5mby0+ZmR0KTsKLSAgICBpZiAoIHJldCA8IDAgKQotICAg ICAgICBnb3RvIGVycjsKLQotICAgIHJldCA9IGZkdF9maW5pc2goa2luZm8tPmZkdCk7Ci0gICAg aWYgKCByZXQgPCAwICkKLSAgICAgICAgZ290byBlcnI7Ci0KLSAgICByZXR1cm4gMDsKLQotICBl cnI6Ci0gICAgcHJpbnRrKCJEZXZpY2UgdHJlZSBnZW5lcmF0aW9uIGZhaWxlZCAoJWQpLlxuIiwg cmV0KTsKLSAgICB4ZnJlZShraW5mby0+ZmR0KTsKLSAgICByZXR1cm4gLUVJTlZBTDsKLX0KLQot c3RhdGljIHZvaWQgX19pbml0IGFjcGlfbWFwX290aGVyX3RhYmxlcyhzdHJ1Y3QgZG9tYWluICpk KQotewotICAgIGludCBpOwotICAgIHVuc2lnbmVkIGxvbmcgcmVzOwotICAgIHU2NCBhZGRyLCBz aXplOwotCi0gICAgLyogTWFwIGFsbCBBQ1BJIHRhYmxlcyB0byBEb20wIHVzaW5nIDE6MSBtYXBw aW5ncy4gKi8KLSAgICBmb3IoIGkgPSAwOyBpIDwgYWNwaV9nYmxfcm9vdF90YWJsZV9saXN0LmNv dW50OyBpKysgKQotICAgIHsKLSAgICAgICAgYWRkciA9IGFjcGlfZ2JsX3Jvb3RfdGFibGVfbGlz dC50YWJsZXNbaV0uYWRkcmVzczsKLSAgICAgICAgc2l6ZSA9IGFjcGlfZ2JsX3Jvb3RfdGFibGVf bGlzdC50YWJsZXNbaV0ubGVuZ3RoOwotICAgICAgICByZXMgPSBtYXBfcmVnaW9uc19wMm10KGQs Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2FkZHJfdG9fZ2ZuKGFkZHIpLAotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBGTl9VUChzaXplKSwKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBtYWRkcl90b19tZm4oYWRkciksCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgcDJtX21taW9fZGlyZWN0X2MpOwotICAgICAgICBpZiAoIHJlcyApCi0gICAg ICAgIHsKLSAgICAgICAgICAgICBwYW5pYyhYRU5MT0dfRVJSICJVbmFibGUgdG8gbWFwIEFDUEkg cmVnaW9uIDB4JSJQUkl4NjQKLSAgICAgICAgICAgICAgICAgICAiIC0gMHglIlBSSXg2NCIgaW4g ZG9tYWluXG4iLAotICAgICAgICAgICAgICAgICAgIGFkZHIgJiBQQUdFX01BU0ssIFBBR0VfQUxJ R04oYWRkciArIHNpemUpIC0gMSk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXN0YXRpYyBpbnQg X19pbml0IGFjcGlfY3JlYXRlX3JzZHAoc3RydWN0IGRvbWFpbiAqZCwgc3RydWN0IG1lbWJhbmsg dGJsX2FkZFtdKQotewotCi0gICAgc3RydWN0IGFjcGlfdGFibGVfcnNkcCAqcnNkcCA9IE5VTEw7 Ci0gICAgdTY0IGFkZHI7Ci0gICAgdTY0IHRhYmxlX3NpemUgPSBzaXplb2Yoc3RydWN0IGFjcGlf dGFibGVfcnNkcCk7Ci0gICAgdTggKmJhc2VfcHRyOwotICAgIHU4IGNoZWNrc3VtOwotCi0gICAg YWRkciA9IGFjcGlfb3NfZ2V0X3Jvb3RfcG9pbnRlcigpOwotICAgIGlmICggIWFkZHIgICkKLSAg ICB7Ci0gICAgICAgIHByaW50aygiVW5hYmxlIHRvIGdldCBhY3BpIHJvb3QgcG9pbnRlclxuIik7 Ci0gICAgICAgIHJldHVybiAtRUlOVkFMOwotICAgIH0KLSAgICByc2RwID0gYWNwaV9vc19tYXBf bWVtb3J5KGFkZHIsIHRhYmxlX3NpemUpOwotICAgIGJhc2VfcHRyID0gZC0+YXJjaC5lZmlfYWNw aV90YWJsZQotICAgICAgICAgICAgICAgKyBhY3BpX2dldF90YWJsZV9vZmZzZXQodGJsX2FkZCwg VEJMX1JTRFApOwotICAgIG1lbWNweShiYXNlX3B0ciwgcnNkcCwgdGFibGVfc2l6ZSk7Ci0gICAg YWNwaV9vc191bm1hcF9tZW1vcnkocnNkcCwgdGFibGVfc2l6ZSk7Ci0KLSAgICByc2RwID0gKHN0 cnVjdCBhY3BpX3RhYmxlX3JzZHAgKiliYXNlX3B0cjsKLSAgICAvKiBSZXBsYWNlIHhzZHRfcGh5 c2ljYWxfYWRkcmVzcyAqLwotICAgIHJzZHAtPnhzZHRfcGh5c2ljYWxfYWRkcmVzcyA9IHRibF9h ZGRbVEJMX1hTRFRdLnN0YXJ0OwotICAgIGNoZWNrc3VtID0gYWNwaV90Yl9jaGVja3N1bShBQ1BJ X0NBU1RfUFRSKHU4LCByc2RwKSwgdGFibGVfc2l6ZSk7Ci0gICAgcnNkcC0+Y2hlY2tzdW0gPSBy c2RwLT5jaGVja3N1bSAtIGNoZWNrc3VtOwotCi0gICAgdGJsX2FkZFtUQkxfUlNEUF0uc3RhcnQg PSBkLT5hcmNoLmVmaV9hY3BpX2dwYQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBh Y3BpX2dldF90YWJsZV9vZmZzZXQodGJsX2FkZCwgVEJMX1JTRFApOwotICAgIHRibF9hZGRbVEJM X1JTRFBdLnNpemUgPSB0YWJsZV9zaXplOwotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2 b2lkIF9faW5pdCBhY3BpX3hzZHRfbW9kaWZ5X2VudHJ5KHU2NCBlbnRyeVtdLAotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBlbnRyeV9jb3Vu dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKnNpZ25h dHVyZSwgdTY0IGFkZHIpCi17Ci0gICAgaW50IGk7Ci0gICAgc3RydWN0IGFjcGlfdGFibGVfaGVh ZGVyICp0YWJsZTsKLSAgICB1NjQgc2l6ZSA9IHNpemVvZihzdHJ1Y3QgYWNwaV90YWJsZV9oZWFk ZXIpOwotCi0gICAgZm9yKCBpID0gMDsgaSA8IGVudHJ5X2NvdW50OyBpKysgKQotICAgIHsKLSAg ICAgICAgdGFibGUgPSBhY3BpX29zX21hcF9tZW1vcnkoZW50cnlbaV0sIHNpemUpOwotICAgICAg ICBpZiAoIEFDUElfQ09NUEFSRV9OQU1FKHRhYmxlLT5zaWduYXR1cmUsIHNpZ25hdHVyZSkgKQot ICAgICAgICB7Ci0gICAgICAgICAgICBlbnRyeVtpXSA9IGFkZHI7Ci0gICAgICAgICAgICBhY3Bp X29zX3VubWFwX21lbW9yeSh0YWJsZSwgc2l6ZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg ICAgfQotICAgICAgICBhY3BpX29zX3VubWFwX21lbW9yeSh0YWJsZSwgc2l6ZSk7Ci0gICAgfQot fQotCi1zdGF0aWMgaW50IF9faW5pdCBhY3BpX2NyZWF0ZV94c2R0KHN0cnVjdCBkb21haW4gKmQs IHN0cnVjdCBtZW1iYW5rIHRibF9hZGRbXSkKLXsKLSAgICBzdHJ1Y3QgYWNwaV90YWJsZV9oZWFk ZXIgKnRhYmxlID0gTlVMTDsKLSAgICBzdHJ1Y3QgYWNwaV90YWJsZV9yc2RwICpyc2RwX3RibDsK LSAgICBzdHJ1Y3QgYWNwaV90YWJsZV94c2R0ICp4c2R0ID0gTlVMTDsKLSAgICB1NjQgdGFibGVf c2l6ZSwgYWRkcjsKLSAgICB1bnNpZ25lZCBsb25nIGVudHJ5X2NvdW50OwotICAgIHU4ICpiYXNl X3B0cjsKLSAgICB1OCBjaGVja3N1bTsKLQotICAgIGFkZHIgPSBhY3BpX29zX2dldF9yb290X3Bv aW50ZXIoKTsKLSAgICBpZiAoICFhZGRyICkKLSAgICB7Ci0gICAgICAgIHByaW50aygiVW5hYmxl IHRvIGdldCBhY3BpIHJvb3QgcG9pbnRlclxuIik7Ci0gICAgICAgIHJldHVybiAtRUlOVkFMOwot ICAgIH0KLSAgICByc2RwX3RibCA9IGFjcGlfb3NfbWFwX21lbW9yeShhZGRyLCBzaXplb2Yoc3Ry dWN0IGFjcGlfdGFibGVfcnNkcCkpOwotICAgIHRhYmxlID0gYWNwaV9vc19tYXBfbWVtb3J5KHJz ZHBfdGJsLT54c2R0X3BoeXNpY2FsX2FkZHJlc3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgc2l6ZW9mKHN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlcikpOwotCi0gICAgLyogQWRkIHBs YWNlIGZvciBTVEFPIHRhYmxlIGluIFhTRFQgdGFibGUgKi8KLSAgICB0YWJsZV9zaXplID0gdGFi bGUtPmxlbmd0aCArIHNpemVvZih1NjQpOwotICAgIGVudHJ5X2NvdW50ID0gKHRhYmxlLT5sZW5n dGggLSBzaXplb2Yoc3RydWN0IGFjcGlfdGFibGVfaGVhZGVyKSkKLSAgICAgICAgICAgICAgICAg IC8gc2l6ZW9mKHU2NCk7Ci0gICAgYmFzZV9wdHIgPSBkLT5hcmNoLmVmaV9hY3BpX3RhYmxlCi0g ICAgICAgICAgICAgICArIGFjcGlfZ2V0X3RhYmxlX29mZnNldCh0YmxfYWRkLCBUQkxfWFNEVCk7 Ci0gICAgbWVtY3B5KGJhc2VfcHRyLCB0YWJsZSwgdGFibGUtPmxlbmd0aCk7Ci0gICAgYWNwaV9v c191bm1hcF9tZW1vcnkodGFibGUsIHNpemVvZihzdHJ1Y3QgYWNwaV90YWJsZV9oZWFkZXIpKTsK LSAgICBhY3BpX29zX3VubWFwX21lbW9yeShyc2RwX3RibCwgc2l6ZW9mKHN0cnVjdCBhY3BpX3Rh YmxlX3JzZHApKTsKLQotICAgIHhzZHQgPSAoc3RydWN0IGFjcGlfdGFibGVfeHNkdCAqKWJhc2Vf cHRyOwotICAgIGFjcGlfeHNkdF9tb2RpZnlfZW50cnkoeHNkdC0+dGFibGVfb2Zmc2V0X2VudHJ5 LCBlbnRyeV9jb3VudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIEFDUElfU0lHX0ZBRFQs IHRibF9hZGRbVEJMX0ZBRFRdLnN0YXJ0KTsKLSAgICBhY3BpX3hzZHRfbW9kaWZ5X2VudHJ5KHhz ZHQtPnRhYmxlX29mZnNldF9lbnRyeSwgZW50cnlfY291bnQsCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICBBQ1BJX1NJR19NQURULCB0YmxfYWRkW1RCTF9NQURUXS5zdGFydCk7Ci0gICAgeHNk dC0+dGFibGVfb2Zmc2V0X2VudHJ5W2VudHJ5X2NvdW50XSA9IHRibF9hZGRbVEJMX1NUQU9dLnN0 YXJ0OwotCi0gICAgeHNkdC0+aGVhZGVyLmxlbmd0aCA9IHRhYmxlX3NpemU7Ci0gICAgY2hlY2tz dW0gPSBhY3BpX3RiX2NoZWNrc3VtKEFDUElfQ0FTVF9QVFIodTgsIHhzZHQpLCB0YWJsZV9zaXpl KTsKLSAgICB4c2R0LT5oZWFkZXIuY2hlY2tzdW0gLT0gY2hlY2tzdW07Ci0KLSAgICB0YmxfYWRk W1RCTF9YU0RUXS5zdGFydCA9IGQtPmFyY2guZWZpX2FjcGlfZ3BhCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICArIGFjcGlfZ2V0X3RhYmxlX29mZnNldCh0YmxfYWRkLCBUQkxfWFNEVCk7 Ci0gICAgdGJsX2FkZFtUQkxfWFNEVF0uc2l6ZSA9IHRhYmxlX3NpemU7Ci0KLSAgICByZXR1cm4g MDsKLX0KLQotc3RhdGljIGludCBfX2luaXQgYWNwaV9jcmVhdGVfc3RhbyhzdHJ1Y3QgZG9tYWlu ICpkLCBzdHJ1Y3QgbWVtYmFuayB0YmxfYWRkW10pCi17Ci0gICAgc3RydWN0IGFjcGlfdGFibGVf aGVhZGVyICp0YWJsZSA9IE5VTEw7Ci0gICAgc3RydWN0IGFjcGlfdGFibGVfc3RhbyAqc3RhbyA9 IE5VTEw7Ci0gICAgdTMyIHRhYmxlX3NpemUgPSBzaXplb2Yoc3RydWN0IGFjcGlfdGFibGVfc3Rh byk7Ci0gICAgdTMyIG9mZnNldCA9IGFjcGlfZ2V0X3RhYmxlX29mZnNldCh0YmxfYWRkLCBUQkxf U1RBTyk7Ci0gICAgYWNwaV9zdGF0dXMgc3RhdHVzOwotICAgIHU4ICpiYXNlX3B0ciwgY2hlY2tz dW07Ci0KLSAgICAvKiBDb3B5IE9FTSBhbmQgQVNMIGNvbXBpbGVyIGZpZWxkcyBmcm9tIGFub3Ro ZXIgdGFibGUsIHVzZSBNQURUICovCi0gICAgc3RhdHVzID0gYWNwaV9nZXRfdGFibGUoQUNQSV9T SUdfTUFEVCwgMCwgJnRhYmxlKTsKLQotICAgIGlmICggQUNQSV9GQUlMVVJFKHN0YXR1cykgKQot ICAgIHsKLSAgICAgICAgY29uc3QgY2hhciAqbXNnID0gYWNwaV9mb3JtYXRfZXhjZXB0aW9uKHN0 YXR1cyk7Ci0KLSAgICAgICAgcHJpbnRrKCJTVEFPOiBGYWlsZWQgdG8gZ2V0IE1BRFQgdGFibGUs ICVzXG4iLCBtc2cpOwotICAgICAgICByZXR1cm4gLUVJTlZBTDsKLSAgICB9Ci0KLSAgICBiYXNl X3B0ciA9IGQtPmFyY2guZWZpX2FjcGlfdGFibGUgKyBvZmZzZXQ7Ci0gICAgbWVtY3B5KGJhc2Vf cHRyLCB0YWJsZSwgc2l6ZW9mKHN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlcikpOwotCi0gICAgc3Rh byA9IChzdHJ1Y3QgYWNwaV90YWJsZV9zdGFvICopYmFzZV9wdHI7Ci0gICAgbWVtY3B5KHN0YW8t PmhlYWRlci5zaWduYXR1cmUsIEFDUElfU0lHX1NUQU8sIDQpOwotICAgIHN0YW8tPmhlYWRlci5y ZXZpc2lvbiA9IDE7Ci0gICAgc3Rhby0+aGVhZGVyLmxlbmd0aCA9IHRhYmxlX3NpemU7Ci0gICAg c3Rhby0+aWdub3JlX3VhcnQgPSAxOwotICAgIGNoZWNrc3VtID0gYWNwaV90Yl9jaGVja3N1bShB Q1BJX0NBU1RfUFRSKHU4LCBzdGFvKSwgdGFibGVfc2l6ZSk7Ci0gICAgc3Rhby0+aGVhZGVyLmNo ZWNrc3VtIC09IGNoZWNrc3VtOwotCi0gICAgdGJsX2FkZFtUQkxfU1RBT10uc3RhcnQgPSBkLT5h cmNoLmVmaV9hY3BpX2dwYSArIG9mZnNldDsKLSAgICB0YmxfYWRkW1RCTF9TVEFPXS5zaXplID0g dGFibGVfc2l6ZTsKLQotICAgIHJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IF9faW5pdCBhY3Bp X2NyZWF0ZV9tYWR0KHN0cnVjdCBkb21haW4gKmQsIHN0cnVjdCBtZW1iYW5rIHRibF9hZGRbXSkK LXsKLSAgICBzdHJ1Y3QgYWNwaV90YWJsZV9oZWFkZXIgKnRhYmxlID0gTlVMTDsKLSAgICBzdHJ1 Y3QgYWNwaV90YWJsZV9tYWR0ICptYWR0ID0gTlVMTDsKLSAgICBzdHJ1Y3QgYWNwaV9zdWJ0YWJs ZV9oZWFkZXIgKmhlYWRlcjsKLSAgICBzdHJ1Y3QgYWNwaV9tYWR0X2dlbmVyaWNfZGlzdHJpYnV0 b3IgKmdpY2Q7Ci0gICAgdTMyIHRhYmxlX3NpemUgPSBzaXplb2Yoc3RydWN0IGFjcGlfdGFibGVf bWFkdCk7Ci0gICAgdTMyIG9mZnNldCA9IGFjcGlfZ2V0X3RhYmxlX29mZnNldCh0YmxfYWRkLCBU QkxfTUFEVCk7Ci0gICAgaW50IHJldDsKLSAgICBhY3BpX3N0YXR1cyBzdGF0dXM7Ci0gICAgdTgg KmJhc2VfcHRyLCBjaGVja3N1bTsKLQotICAgIHN0YXR1cyA9IGFjcGlfZ2V0X3RhYmxlKEFDUElf U0lHX01BRFQsIDAsICZ0YWJsZSk7Ci0KLSAgICBpZiAoIEFDUElfRkFJTFVSRShzdGF0dXMpICkK LSAgICB7Ci0gICAgICAgIGNvbnN0IGNoYXIgKm1zZyA9IGFjcGlfZm9ybWF0X2V4Y2VwdGlvbihz dGF0dXMpOwotCi0gICAgICAgIHByaW50aygiRmFpbGVkIHRvIGdldCBNQURUIHRhYmxlLCAlc1xu IiwgbXNnKTsKLSAgICAgICAgcmV0dXJuIC1FSU5WQUw7Ci0gICAgfQotCi0gICAgYmFzZV9wdHIg PSBkLT5hcmNoLmVmaV9hY3BpX3RhYmxlICsgb2Zmc2V0OwotICAgIG1lbWNweShiYXNlX3B0ciwg dGFibGUsIHRhYmxlX3NpemUpOwotCi0gICAgLyogQWRkIEdlbmVyaWMgRGlzdHJpYnV0b3IuICov Ci0gICAgaGVhZGVyID0gYWNwaV90YWJsZV9nZXRfZW50cnlfbWFkdChBQ1BJX01BRFRfVFlQRV9H RU5FUklDX0RJU1RSSUJVVE9SLCAwKTsKLSAgICBpZiAoICFoZWFkZXIgKQotICAgIHsKLSAgICAg ICAgcHJpbnRrKCJDYW4ndCBnZXQgR0lDRCBlbnRyeVxuIik7Ci0gICAgICAgIHJldHVybiAtRUlO VkFMOwotICAgIH0KLSAgICBnaWNkID0gY29udGFpbmVyX29mKGhlYWRlciwgc3RydWN0IGFjcGlf bWFkdF9nZW5lcmljX2Rpc3RyaWJ1dG9yLCBoZWFkZXIpOwotICAgIG1lbWNweShiYXNlX3B0ciAr IHRhYmxlX3NpemUsIGdpY2QsCi0gICAgICAgICAgICAgICAgc2l6ZW9mKHN0cnVjdCBhY3BpX21h ZHRfZ2VuZXJpY19kaXN0cmlidXRvcikpOwotICAgIHRhYmxlX3NpemUgKz0gc2l6ZW9mKHN0cnVj dCBhY3BpX21hZHRfZ2VuZXJpY19kaXN0cmlidXRvcik7Ci0KLSAgICAvKiBBZGQgb3RoZXIgc3Vi dGFibGVzLiAqLwotICAgIHJldCA9IGdpY19tYWtlX2h3ZG9tX21hZHQoZCwgb2Zmc2V0ICsgdGFi bGVfc2l6ZSk7Ci0gICAgaWYgKCByZXQgPCAwICkKLSAgICB7Ci0gICAgICAgIHByaW50aygiRmFp bGVkIHRvIGdldCBvdGhlciBzdWJ0YWJsZXNcbiIpOwotICAgICAgICByZXR1cm4gLUVJTlZBTDsK LSAgICB9Ci0gICAgdGFibGVfc2l6ZSArPSByZXQ7Ci0KLSAgICBtYWR0ID0gKHN0cnVjdCBhY3Bp X3RhYmxlX21hZHQgKiliYXNlX3B0cjsKLSAgICBtYWR0LT5oZWFkZXIubGVuZ3RoID0gdGFibGVf c2l6ZTsKLSAgICBjaGVja3N1bSA9IGFjcGlfdGJfY2hlY2tzdW0oQUNQSV9DQVNUX1BUUih1OCwg bWFkdCksIHRhYmxlX3NpemUpOwotICAgIG1hZHQtPmhlYWRlci5jaGVja3N1bSAtPSBjaGVja3N1 bTsKLQotICAgIHRibF9hZGRbVEJMX01BRFRdLnN0YXJ0ID0gZC0+YXJjaC5lZmlfYWNwaV9ncGEg KyBvZmZzZXQ7Ci0gICAgdGJsX2FkZFtUQkxfTUFEVF0uc2l6ZSA9IHRhYmxlX3NpemU7Ci0KLSAg ICByZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBfX2luaXQgYWNwaV9jcmVhdGVfZmFkdChzdHJ1 Y3QgZG9tYWluICpkLCBzdHJ1Y3QgbWVtYmFuayB0YmxfYWRkW10pCi17Ci0gICAgc3RydWN0IGFj cGlfdGFibGVfaGVhZGVyICp0YWJsZSA9IE5VTEw7Ci0gICAgc3RydWN0IGFjcGlfdGFibGVfZmFk dCAqZmFkdCA9IE5VTEw7Ci0gICAgdTY0IHRhYmxlX3NpemU7Ci0gICAgYWNwaV9zdGF0dXMgc3Rh dHVzOwotICAgIHU4ICpiYXNlX3B0cjsKLSAgICB1OCBjaGVja3N1bTsKLQotICAgIHN0YXR1cyA9 IGFjcGlfZ2V0X3RhYmxlKEFDUElfU0lHX0ZBRFQsIDAsICZ0YWJsZSk7Ci0KLSAgICBpZiAoIEFD UElfRkFJTFVSRShzdGF0dXMpICkKLSAgICB7Ci0gICAgICAgIGNvbnN0IGNoYXIgKm1zZyA9IGFj cGlfZm9ybWF0X2V4Y2VwdGlvbihzdGF0dXMpOwotCi0gICAgICAgIHByaW50aygiRmFpbGVkIHRv IGdldCBGQURUIHRhYmxlLCAlc1xuIiwgbXNnKTsKLSAgICAgICAgcmV0dXJuIC1FSU5WQUw7Ci0g ICAgfQotCi0gICAgdGFibGVfc2l6ZSA9IHRhYmxlLT5sZW5ndGg7Ci0gICAgYmFzZV9wdHIgPSBk LT5hcmNoLmVmaV9hY3BpX3RhYmxlCi0gICAgICAgICAgICAgICArIGFjcGlfZ2V0X3RhYmxlX29m ZnNldCh0YmxfYWRkLCBUQkxfRkFEVCk7Ci0gICAgbWVtY3B5KGJhc2VfcHRyLCB0YWJsZSwgdGFi bGVfc2l6ZSk7Ci0gICAgZmFkdCA9IChzdHJ1Y3QgYWNwaV90YWJsZV9mYWR0ICopYmFzZV9wdHI7 Ci0KLSAgICAvKiBTZXQgUFNDSV9DT01QTElBTlQgYW5kIFBTQ0lfVVNFX0hWQyAqLwotICAgIGZh ZHQtPmFybV9ib290X2ZsYWdzIHw9IChBQ1BJX0ZBRFRfUFNDSV9DT01QTElBTlQgfCBBQ1BJX0ZB RFRfUFNDSV9VU0VfSFZDKTsKLSAgICBjaGVja3N1bSA9IGFjcGlfdGJfY2hlY2tzdW0oQUNQSV9D QVNUX1BUUih1OCwgZmFkdCksIHRhYmxlX3NpemUpOwotICAgIGZhZHQtPmhlYWRlci5jaGVja3N1 bSAtPSBjaGVja3N1bTsKLQotICAgIHRibF9hZGRbVEJMX0ZBRFRdLnN0YXJ0ID0gZC0+YXJjaC5l ZmlfYWNwaV9ncGEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgYWNwaV9nZXRfdGFi bGVfb2Zmc2V0KHRibF9hZGQsIFRCTF9GQURUKTsKLSAgICB0YmxfYWRkW1RCTF9GQURUXS5zaXpl ID0gdGFibGVfc2l6ZTsKLQotICAgIHJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IF9faW5pdCBl c3RpbWF0ZV9hY3BpX2VmaV9zaXplKHN0cnVjdCBkb21haW4gKmQsCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBrZXJuZWxfaW5mbyAqa2luZm8pCi17Ci0g ICAgc2l6ZV90IGVmaV9zaXplLCBhY3BpX3NpemUsIG1hZHRfc2l6ZTsKLSAgICB1NjQgYWRkcjsK LSAgICBzdHJ1Y3QgYWNwaV90YWJsZV9yc2RwICpyc2RwX3RibDsKLSAgICBzdHJ1Y3QgYWNwaV90 YWJsZV9oZWFkZXIgKnRhYmxlOwotCi0gICAgZWZpX3NpemUgPSBlc3RpbWF0ZV9lZmlfc2l6ZShr aW5mby0+bWVtLm5yX2JhbmtzKTsKLQotICAgIGFjcGlfc2l6ZSA9IFJPVU5EVVAoc2l6ZW9mKHN0 cnVjdCBhY3BpX3RhYmxlX2ZhZHQpLCA4KTsKLSAgICBhY3BpX3NpemUgKz0gUk9VTkRVUChzaXpl b2Yoc3RydWN0IGFjcGlfdGFibGVfc3RhbyksIDgpOwotCi0gICAgbWFkdF9zaXplID0gZ2ljX2dl dF9od2RvbV9tYWR0X3NpemUoZCk7Ci0gICAgYWNwaV9zaXplICs9IFJPVU5EVVAobWFkdF9zaXpl LCA4KTsKLQotICAgIGFkZHIgPSBhY3BpX29zX2dldF9yb290X3BvaW50ZXIoKTsKLSAgICBpZiAo ICFhZGRyICkKLSAgICB7Ci0gICAgICAgIHByaW50aygiVW5hYmxlIHRvIGdldCBhY3BpIHJvb3Qg cG9pbnRlclxuIik7Ci0gICAgICAgIHJldHVybiAtRUlOVkFMOwotICAgIH0KLQotICAgIHJzZHBf dGJsID0gYWNwaV9vc19tYXBfbWVtb3J5KGFkZHIsIHNpemVvZihzdHJ1Y3QgYWNwaV90YWJsZV9y c2RwKSk7Ci0gICAgaWYgKCAhcnNkcF90YmwgKQotICAgIHsKLSAgICAgICAgcHJpbnRrKCJVbmFi bGUgdG8gbWFwIFJTRFAgdGFibGVcbiIpOwotICAgICAgICByZXR1cm4gLUVJTlZBTDsKLSAgICB9 Ci0KLSAgICB0YWJsZSA9IGFjcGlfb3NfbWFwX21lbW9yeShyc2RwX3RibC0+eHNkdF9waHlzaWNh bF9hZGRyZXNzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihzdHJ1Y3Qg YWNwaV90YWJsZV9oZWFkZXIpKTsKLSAgICBhY3BpX29zX3VubWFwX21lbW9yeShyc2RwX3RibCwg c2l6ZW9mKHN0cnVjdCBhY3BpX3RhYmxlX3JzZHApKTsKLSAgICBpZiAoICF0YWJsZSApCi0gICAg ewotICAgICAgICBwcmludGsoIlVuYWJsZSB0byBtYXAgWFNEVCB0YWJsZVxuIik7Ci0gICAgICAg IHJldHVybiAtRUlOVkFMOwotICAgIH0KLQotICAgIC8qIEFkZCBwbGFjZSBmb3IgU1RBTyB0YWJs ZSBpbiBYU0RUIHRhYmxlICovCi0gICAgYWNwaV9zaXplICs9IFJPVU5EVVAodGFibGUtPmxlbmd0 aCArIHNpemVvZih1NjQpLCA4KTsKLSAgICBhY3BpX29zX3VubWFwX21lbW9yeSh0YWJsZSwgc2l6 ZW9mKHN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlcikpOwotCi0gICAgYWNwaV9zaXplICs9IFJPVU5E VVAoc2l6ZW9mKHN0cnVjdCBhY3BpX3RhYmxlX3JzZHApLCA4KTsKLSAgICBkLT5hcmNoLmVmaV9h Y3BpX2xlbiA9IFBBR0VfQUxJR04oUk9VTkRVUChlZmlfc2l6ZSwgOCkKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKyBST1VORFVQKGFjcGlfc2l6ZSwgOCkpOwotCi0gICAg cmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgX19pbml0IHByZXBhcmVfYWNwaShzdHJ1Y3QgZG9t YWluICpkLCBzdHJ1Y3Qga2VybmVsX2luZm8gKmtpbmZvKQotewotICAgIGludCByYyA9IDA7Ci0g ICAgaW50IG9yZGVyOwotICAgIHN0cnVjdCBtZW1iYW5rIHRibF9hZGRbVEJMX01NQVhdID0ge307 Ci0KLSAgICByYyA9IGVzdGltYXRlX2FjcGlfZWZpX3NpemUoZCwga2luZm8pOwotICAgIGlmICgg cmMgIT0gMCApCi0gICAgICAgIHJldHVybiByYzsKLQotICAgIG9yZGVyID0gZ2V0X29yZGVyX2Zy b21fYnl0ZXMoZC0+YXJjaC5lZmlfYWNwaV9sZW4pOwotICAgIGQtPmFyY2guZWZpX2FjcGlfdGFi bGUgPSBhbGxvY194ZW5oZWFwX3BhZ2VzKG9yZGVyLCAwKTsKLSAgICBpZiAoIGQtPmFyY2guZWZp X2FjcGlfdGFibGUgPT0gTlVMTCApCi0gICAgewotICAgICAgICBwcmludGsoInVuYWJsZSB0byBh bGxvY2F0ZSBtZW1vcnkhXG4iKTsKLSAgICAgICAgcmV0dXJuIC1FTk9NRU07Ci0gICAgfQotICAg IG1lbXNldChkLT5hcmNoLmVmaV9hY3BpX3RhYmxlLCAwLCBkLT5hcmNoLmVmaV9hY3BpX2xlbik7 Ci0KLSAgICAvKgotICAgICAqIEZvciBBQ1BJLCBEb20wIGRvZXNuJ3QgdXNlIGtpbmZvLT5nbnR0 YWJfc3RhcnQgdG8gZ2V0IHRoZSBncmFudCB0YWJsZQotICAgICAqIHJlZ2lvbi4gU28gd2UgdXNl IGl0IGFzIHRoZSBBQ1BJIHRhYmxlIG1hcHBlZCBhZGRyZXNzLiBBbHNvIGl0IG5lZWRzIHRvCi0g ICAgICogY2hlY2sgaWYgdGhlIHNpemUgb2YgZ3JhbnQgdGFibGUgcmVnaW9uIGlzIGVub3VnaCBm b3IgdGhvc2UgQUNQSSB0YWJsZXMuCi0gICAgICovCi0gICAgZC0+YXJjaC5lZmlfYWNwaV9ncGEg PSBraW5mby0+Z250dGFiX3N0YXJ0OwotICAgIGlmICgga2luZm8tPmdudHRhYl9zaXplIDwgZC0+ YXJjaC5lZmlfYWNwaV9sZW4gKQotICAgIHsKLSAgICAgICAgcHJpbnRrKCJUaGUgZ3JhbnQgdGFi bGUgcmVnaW9uIGlzIG5vdCBlbm91Z2ggdG8gZml0IHRoZSBBQ1BJIHRhYmxlcyFcbiIpOwotICAg ICAgICByZXR1cm4gLUVJTlZBTDsKLSAgICB9Ci0KLSAgICByYyA9IGFjcGlfY3JlYXRlX2ZhZHQo ZCwgdGJsX2FkZCk7Ci0gICAgaWYgKCByYyAhPSAwICkKLSAgICAgICAgcmV0dXJuIHJjOwotCi0g ICAgcmMgPSBhY3BpX2NyZWF0ZV9tYWR0KGQsIHRibF9hZGQpOwotICAgIGlmICggcmMgIT0gMCAp Ci0gICAgICAgIHJldHVybiByYzsKLQotICAgIHJjID0gYWNwaV9jcmVhdGVfc3RhbyhkLCB0Ymxf YWRkKTsKLSAgICBpZiAoIHJjICE9IDAgKQotICAgICAgICByZXR1cm4gcmM7Ci0KLSAgICByYyA9 IGFjcGlfY3JlYXRlX3hzZHQoZCwgdGJsX2FkZCk7Ci0gICAgaWYgKCByYyAhPSAwICkKLSAgICAg ICAgcmV0dXJuIHJjOwotCi0gICAgcmMgPSBhY3BpX2NyZWF0ZV9yc2RwKGQsIHRibF9hZGQpOwot ICAgIGlmICggcmMgIT0gMCApCi0gICAgICAgIHJldHVybiByYzsKLQotICAgIGFjcGlfbWFwX290 aGVyX3RhYmxlcyhkKTsKLSAgICBhY3BpX2NyZWF0ZV9lZmlfc3lzdGVtX3RhYmxlKGQsIHRibF9h ZGQpOwotICAgIGFjcGlfY3JlYXRlX2VmaV9tbWFwX3RhYmxlKGQsICZraW5mby0+bWVtLCB0Ymxf YWRkKTsKLQotICAgIC8qIE1hcCB0aGUgRUZJIGFuZCBBQ1BJIHRhYmxlcyB0byBEb20wICovCi0g ICAgcmMgPSBtYXBfcmVnaW9uc19wMm10KGQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGdh ZGRyX3RvX2dmbihkLT5hcmNoLmVmaV9hY3BpX2dwYSksCi0gICAgICAgICAgICAgICAgICAgICAg ICAgIFBGTl9VUChkLT5hcmNoLmVmaV9hY3BpX2xlbiksCi0gICAgICAgICAgICAgICAgICAgICAg ICAgIHZpcnRfdG9fbWZuKGQtPmFyY2guZWZpX2FjcGlfdGFibGUpLAotICAgICAgICAgICAgICAg ICAgICAgICAgICBwMm1fbW1pb19kaXJlY3RfYyk7Ci0gICAgaWYgKCByYyAhPSAwICkKLSAgICB7 Ci0gICAgICAgIHByaW50ayhYRU5MT0dfRVJSICJVbmFibGUgdG8gbWFwIEVGSS9BQ1BJIHRhYmxl IDB4JSJQUkl4NjQKLSAgICAgICAgICAgICAgICIgLSAweCUiUFJJeDY0IiBpbiBkb21haW4gJWRc biIsCi0gICAgICAgICAgICAgICBkLT5hcmNoLmVmaV9hY3BpX2dwYSAmIFBBR0VfTUFTSywKLSAg ICAgICAgICAgICAgIFBBR0VfQUxJR04oZC0+YXJjaC5lZmlfYWNwaV9ncGEgKyBkLT5hcmNoLmVm aV9hY3BpX2xlbikgLSAxLAotICAgICAgICAgICAgICAgZC0+ZG9tYWluX2lkKTsKLSAgICAgICAg cmV0dXJuIHJjOwotICAgIH0KLQotICAgIC8qCi0gICAgICogRmx1c2ggdGhlIGNhY2hlIGZvciB0 aGlzIHJlZ2lvbiwgb3RoZXJ3aXNlIERPTTAgbWF5IHJlYWQgd3JvbmcgZGF0YSB3aGVuCi0gICAg ICogdGhlIGNhY2hlIGlzIGRpc2FibGVkLgotICAgICAqLwotICAgIGNsZWFuX2FuZF9pbnZhbGlk YXRlX2RjYWNoZV92YV9yYW5nZShkLT5hcmNoLmVmaV9hY3BpX3RhYmxlLAotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkLT5hcmNoLmVmaV9hY3BpX2xlbik7Ci0KLSAg ICByYyA9IGNyZWF0ZV9hY3BpX2R0YihraW5mbywgdGJsX2FkZCk7Ci0gICAgaWYgKCByYyAhPSAw ICkKLSAgICAgICAgcmV0dXJuIHJjOwotCi0gICAgcmMgPSBhY3BpX3JvdXRlX3NwaXMoZCk7Ci0g ICAgaWYgKCByYyAhPSAwICkKLSAgICAgICAgcmV0dXJuIHJjOwotCi0gICAgcmMgPSBhY3BpX2lv bWVtX2RlbnlfYWNjZXNzKGQpOwotICAgIGlmICggcmMgIT0gMCApCi0gICAgICAgIHJldHVybiBy YzsKLQotICAgIC8qCi0gICAgICogQWxsIFBQSXMgaGF2ZSBiZWVuIHJlZ2lzdGVyZWQsIGFsbG9j YXRlIHRoZSBldmVudCBjaGFubmVsCi0gICAgICogaW50ZXJydXB0cy4KLSAgICAgKi8KLSAgICBl dnRjaG5fYWxsb2NhdGUoZCk7Ci0KLSAgICByZXR1cm4gMDsKLX0KLSNlbHNlCi1zdGF0aWMgaW50 IF9faW5pdCBwcmVwYXJlX2FjcGkoc3RydWN0IGRvbWFpbiAqZCwgc3RydWN0IGtlcm5lbF9pbmZv ICpraW5mbykKLXsKLSAgICAvKiBPbmx5IGJvb3Rpbmcgd2l0aCBBQ1BJIHdpbGwgaGl0IGhlcmUg Ki8KLSAgICBCVUcoKTsKLSAgICByZXR1cm4gLUVJTlZBTDsKLX0KLSNlbmRpZgogc3RhdGljIHZv aWQgX19pbml0IGR0Yl9sb2FkKHN0cnVjdCBrZXJuZWxfaW5mbyAqa2luZm8pCiB7CiAgICAgdW5z aWduZWQgbG9uZyBsZWZ0OwpAQCAtMjQ0MCw3ICsxODY1LDcgQEAgc3RhdGljIHZvaWQgX19pbml0 IGluaXRyZF9sb2FkKHN0cnVjdCBrZXJuZWxfaW5mbyAqa2luZm8pCiAgKiBOb3RlIHRoYXQgdGhp cyBzaG91bGQgb25seSBiZSBjYWxsZWQgb25jZSBhbGwgUFBJcyB1c2VkIGJ5IHRoZQogICogaGFy ZHdhcmUgZG9tYWluIGhhdmUgYmVlbiByZWdpc3RlcmVkLgogICovCi1zdGF0aWMgdm9pZCBfX2lu aXQgZXZ0Y2huX2FsbG9jYXRlKHN0cnVjdCBkb21haW4gKmQpCit2b2lkIF9faW5pdCBldnRjaG5f YWxsb2NhdGUoc3RydWN0IGRvbWFpbiAqZCkKIHsKICAgICBpbnQgcmVzOwogICAgIHU2NCB2YWw7 CmRpZmYgLS1naXQgYS94ZW4vaW5jbHVkZS9hc20tYXJtL2RvbWFpbl9idWlsZC5oIGIveGVuL2lu Y2x1ZGUvYXNtLWFybS9kb21haW5fYnVpbGQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwLi4zNGNlZGRjCi0tLSAvZGV2L251bGwKKysrIGIveGVuL2luY2x1ZGUvYXNtLWFybS9k b21haW5fYnVpbGQuaApAQCAtMCwwICsxLDMxIEBACisjaWZuZGVmIF9fQVNNX0RPTUFJTl9CVUlM RF9IX18KKyNkZWZpbmUgX19BU01fRE9NQUlOX0JVSUxEX0hfXworCisjaW5jbHVkZSA8eGVuL3Nj aGVkLmg+CisjaW5jbHVkZSA8YXNtL2tlcm5lbC5oPgorCitpbnQgbWFwX2lycV90b19kb21haW4o c3RydWN0IGRvbWFpbiAqZCwgdW5zaWduZWQgaW50IGlycSwKKyAgICAgICAgICAgICAgICAgICAg ICBib29sIG5lZWRfbWFwcGluZywgY29uc3QgY2hhciAqZGV2bmFtZSk7CitpbnQgbWFrZV9jaG9z ZW5fbm9kZShjb25zdCBzdHJ1Y3Qga2VybmVsX2luZm8gKmtpbmZvKTsKK3ZvaWQgZXZ0Y2huX2Fs bG9jYXRlKHN0cnVjdCBkb21haW4gKmQpOworCisjaWZuZGVmIENPTkZJR19BQ1BJCitzdGF0aWMg aW5saW5lIGludCBwcmVwYXJlX2FjcGkoc3RydWN0IGRvbWFpbiAqZCwgc3RydWN0IGtlcm5lbF9p bmZvICpraW5mbykKK3sKKyAgICAvKiBPbmx5IGJvb3Rpbmcgd2l0aCBBQ1BJIHdpbGwgaGl0IGhl cmUgKi8KKyAgICBCVUcoKTsKKyAgICByZXR1cm4gLUVJTlZBTDsKK30KKyNlbHNlCitpbnQgcHJl cGFyZV9hY3BpKHN0cnVjdCBkb21haW4gKmQsIHN0cnVjdCBrZXJuZWxfaW5mbyAqa2luZm8pOwor I2VuZGlmCisjZW5kaWYKKworLyoKKyAqIExvY2FsIHZhcmlhYmxlczoKKyAqIG1vZGU6IEMKKyAq IGMtZmlsZS1zdHlsZTogIkJTRCIKKyAqIGMtYmFzaWMtb2Zmc2V0OiA0CisgKiBpbmRlbnQtdGFi cy1tb2RlOiBuaWwKKyAqIEVuZDoKKyAqLwotLSAKMS45LjEKCgpfX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fXwpYZW4tZGV2ZWwgbWFpbGluZyBsaXN0Clhlbi1k ZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21h aWxtYW4vbGlzdGluZm8veGVuLWRldmVs