From mboxrd@z Thu Jan 1 00:00:00 1970 From: Juergen Gross Subject: [PATCH 6/6] libxl: move common nic stuff into one source Date: Tue, 12 Jul 2016 17:30:44 +0200 Message-ID: <1468337444-24108-7-git-send-email-jgross@suse.com> References: <1468337444-24108-1-git-send-email-jgross@suse.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1468337444-24108-1-git-send-email-jgross@suse.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: xen-devel@lists.xen.org Cc: Juergen Gross , wei.liu2@citrix.com, ian.jackson@eu.citrix.com List-Id: xen-devel@lists.xenproject.org UHV0IGFsbCBuaWMgcmVsYXRlZCBzdHVmZiBvZiBsaWJ4bCBmb3JtIGNvbW1vbiBmaWxlcyBpbnRv IGEgZGVkaWNhdGVkCnNvdXJjZSBmaWxlLgoKU2lnbmVkLW9mZi1ieTogSnVlcmdlbiBHcm9zcyA8 amdyb3NzQHN1c2UuY29tPgotLS0KIHRvb2xzL2xpYnhsL01ha2VmaWxlICAgICAgICAgfCAgIDIg Ky0KIHRvb2xzL2xpYnhsL2xpYnhsLmMgICAgICAgICAgfCA0NzQgKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCiB0b29scy9saWJ4bC9saWJ4bF9jcmVhdGUuYyAgIHwgIDIzICst CiB0b29scy9saWJ4bC9saWJ4bF9pbnRlcm5hbC5oIHwgICA1ICstCiB0b29scy9saWJ4bC9saWJ4 bF9uaWMuYyAgICAgIHwgNTU0ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysKIHRvb2xzL2xpYnhsL2xpYnhsX3V0aWxzLmMgICAgfCAgMzUgLS0tCiA2IGZpbGVzIGNo YW5nZWQsIDU3MyBpbnNlcnRpb25zKCspLCA1MjAgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAx MDA2NDQgdG9vbHMvbGlieGwvbGlieGxfbmljLmMKCmRpZmYgLS1naXQgYS90b29scy9saWJ4bC9N YWtlZmlsZSBiL3Rvb2xzL2xpYnhsL01ha2VmaWxlCmluZGV4IDg2YzExYmYuLjE0YTFhOGUgMTAw NjQ0Ci0tLSBhL3Rvb2xzL2xpYnhsL01ha2VmaWxlCisrKyBiL3Rvb2xzL2xpYnhsL01ha2VmaWxl CkBAIC0xMTUsNyArMTE1LDcgQEAgTElCWExfT0JKUyA9IGZsZXhhcnJheS5vIGxpYnhsLm8gbGli eGxfY3JlYXRlLm8gbGlieGxfZG0ubyBsaWJ4bF9wY2kubyBcCiAJCQlsaWJ4bF9zYXZlX2NhbGxv dXQubyBfbGlieGxfc2F2ZV9tc2dzX2NhbGxvdXQubyBcCiAJCQlsaWJ4bF9xbXAubyBsaWJ4bF9l dmVudC5vIGxpYnhsX2ZvcmsubyBcCiAJCQlsaWJ4bF9kb21fc3VzcGVuZC5vIGxpYnhsX2RvbV9z YXZlLm8gbGlieGxfcHZ1c2IubyBcCi0JCQlsaWJ4bF92dHBtLm8gXAorCQkJbGlieGxfdnRwbS5v IGxpYnhsX25pYy5vIFwKICAgICAgICAgICAgICAgICAgICAgICAgICQoTElCWExfT0JKUy15KQog TElCWExfT0JKUyArPSBsaWJ4bF9nZW5pZC5vCiBMSUJYTF9PQkpTICs9IF9saWJ4bF90eXBlcy5v IGxpYnhsX2ZsYXNrLm8gX2xpYnhsX3R5cGVzX2ludGVybmFsLm8KZGlmZiAtLWdpdCBhL3Rvb2xz L2xpYnhsL2xpYnhsLmMgYi90b29scy9saWJ4bC9saWJ4bC5jCmluZGV4IDAzZTVhNTguLjU4ZDgw YjcgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2xpYnhsL2xpYnhsLmMKKysrIGIvdG9vbHMvbGlieGwvbGli eGwuYwpAQCAtMjEsMTUgKzIxLDYgQEAKICNkZWZpbmUgUEFHRV9UT19NRU1LQihwYWdlcykgKChw YWdlcykgKiA0KQogI2RlZmluZSBCQUNLRU5EX1NUUklOR19TSVpFIDUKIAotLyogVXRpbGl0eSB0 byByZWFkIC9saWJ4bCB4ZW5zdG9yZSBrZXlzLCBmcm9tIGxpYnhsX3BhdGggKi8KLSNkZWZpbmUg UkVBRF9MSUJYTERFVih0Z2MsIHN1YnBhdGgpICh7ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFwKLSAgICAgICAgcmMgPSBsaWJ4bF9feHNfcmVhZF9jaGVja2VkKHRnYywgWEJUX05V TEwsICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIEdDU1BSSU5URigiJXMvIiBzdWJwYXRoLCBsaWJ4bF9wYXRoKSwgIFwKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ0bXApOyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFwKLSAgICAgICAgaWYgKHJjKSBnb3RvIG91dDsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgKGNoYXIqKXRtcDsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB9KTsKLQog aW50IGxpYnhsX2N0eF9hbGxvYyhsaWJ4bF9jdHggKipwY3R4LCBpbnQgdmVyc2lvbiwKICAgICAg ICAgICAgICAgICAgICAgdW5zaWduZWQgZmxhZ3MsIHhlbnRvb2xsb2dfbG9nZ2VyICogbGcpCiB7 CkBAIC0zMDY5LDQzMyArMzA2MCw2IEBAIG91dDoKIH0KIAogLyoqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq Ki8KLQotaW50IGxpYnhsX19kZXZpY2VfbmljX3NldGRlZmF1bHQobGlieGxfX2djICpnYywgbGli eGxfZGV2aWNlX25pYyAqbmljLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWlu dDMyX3QgZG9taWQsIGJvb2wgaG90cGx1ZykKLXsKLSAgICBpbnQgcmM7Ci0KLSAgICBpZiAoIW5p Yy0+bXR1KQotICAgICAgICBuaWMtPm10dSA9IDE0OTI7Ci0gICAgaWYgKCFuaWMtPm1vZGVsKSB7 Ci0gICAgICAgIG5pYy0+bW9kZWwgPSBzdHJkdXAoInJ0bDgxMzkiKTsKLSAgICAgICAgaWYgKCFu aWMtPm1vZGVsKSByZXR1cm4gRVJST1JfTk9NRU07Ci0gICAgfQotICAgIGlmIChsaWJ4bF9fbWFj X2lzX2RlZmF1bHQoJm5pYy0+bWFjKSkgewotICAgICAgICBjb25zdCB1aW50OF90ICpyOwotICAg ICAgICBsaWJ4bF91dWlkIHV1aWQ7Ci0KLSAgICAgICAgbGlieGxfdXVpZF9nZW5lcmF0ZSgmdXVp ZCk7Ci0gICAgICAgIHIgPSBsaWJ4bF91dWlkX2J5dGVhcnJheSgmdXVpZCk7Ci0KLSAgICAgICAg bmljLT5tYWNbMF0gPSAweDAwOwotICAgICAgICBuaWMtPm1hY1sxXSA9IDB4MTY7Ci0gICAgICAg IG5pYy0+bWFjWzJdID0gMHgzZTsKLSAgICAgICAgbmljLT5tYWNbM10gPSByWzBdICYgMHg3ZjsK LSAgICAgICAgbmljLT5tYWNbNF0gPSByWzFdOwotICAgICAgICBuaWMtPm1hY1s1XSA9IHJbMl07 Ci0gICAgfQotICAgIGlmICghbmljLT5icmlkZ2UpIHsKLSAgICAgICAgbmljLT5icmlkZ2UgPSBz dHJkdXAoInhlbmJyMCIpOwotICAgICAgICBpZiAoIW5pYy0+YnJpZGdlKSByZXR1cm4gRVJST1Jf Tk9NRU07Ci0gICAgfQotICAgIGlmICggIW5pYy0+c2NyaXB0ICYmIGFzcHJpbnRmKCZuaWMtPnNj cmlwdCwgIiVzL3ZpZi1icmlkZ2UiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGxpYnhsX194ZW5fc2NyaXB0X2Rpcl9wYXRoKCkpIDwgMCApCi0gICAgICAgIHJldHVybiBFUlJP Ul9GQUlMOwotCi0gICAgcmMgPSBsaWJ4bF9fcmVzb2x2ZV9kb21pZChnYywgbmljLT5iYWNrZW5k X2RvbW5hbWUsICZuaWMtPmJhY2tlbmRfZG9taWQpOwotICAgIGlmIChyYyA8IDApIHJldHVybiBy YzsKLQotICAgIHN3aXRjaCAobGlieGxfX2RvbWFpbl90eXBlKGdjLCBkb21pZCkpIHsKLSAgICBj YXNlIExJQlhMX0RPTUFJTl9UWVBFX0hWTToKLSAgICAgICAgaWYgKCFuaWMtPm5pY3R5cGUpIHsK LSAgICAgICAgICAgIGlmIChob3RwbHVnIHx8Ci0gICAgICAgICAgICAgICAgKGxpYnhsX19kZXZp Y2VfbW9kZWxfdmVyc2lvbl9ydW5uaW5nKGdjLCBkb21pZCkgPT0KLSAgICAgICAgICAgICAgICAg TElCWExfREVWSUNFX01PREVMX1ZFUlNJT05fTk9ORSkpCi0gICAgICAgICAgICAgICAgbmljLT5u aWN0eXBlID0gTElCWExfTklDX1RZUEVfVklGOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAg ICAgICAgIG5pYy0+bmljdHlwZSA9IExJQlhMX05JQ19UWVBFX1ZJRl9JT0VNVTsKLSAgICAgICAg fQotICAgICAgICBicmVhazsKLSAgICBjYXNlIExJQlhMX0RPTUFJTl9UWVBFX1BWOgotICAgICAg ICBpZiAobmljLT5uaWN0eXBlID09IExJQlhMX05JQ19UWVBFX1ZJRl9JT0VNVSkgewotICAgICAg ICAgICAgTE9HKEVSUk9SLCAidHJ5aW5nIHRvIGNyZWF0ZSBQViBndWVzdCB3aXRoIGFuIGVtdWxh dGVkIGludGVyZmFjZSIpOwotICAgICAgICAgICAgcmV0dXJuIEVSUk9SX0lOVkFMOwotICAgICAg ICB9Ci0gICAgICAgIG5pYy0+bmljdHlwZSA9IExJQlhMX05JQ19UWVBFX1ZJRjsKLSAgICAgICAg YnJlYWs7Ci0gICAgY2FzZSBMSUJYTF9ET01BSU5fVFlQRV9JTlZBTElEOgotICAgICAgICByZXR1 cm4gRVJST1JfRkFJTDsKLSAgICBkZWZhdWx0OgotICAgICAgICBhYm9ydCgpOwotICAgIH0KLQot ICAgIHJldHVybiByYzsKLX0KLQotc3RhdGljIGludCBsaWJ4bF9fZGV2aWNlX2Zyb21fbmljKGxp YnhsX19nYyAqZ2MsIHVpbnQzMl90IGRvbWlkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGxpYnhsX2RldmljZV9uaWMgKm5pYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBsaWJ4bF9fZGV2aWNlICpkZXZpY2UpCi17Ci0gICAgZGV2aWNlLT5iYWNrZW5kX2Rl dmlkICAgID0gbmljLT5kZXZpZDsKLSAgICBkZXZpY2UtPmJhY2tlbmRfZG9taWQgICAgPSBuaWMt PmJhY2tlbmRfZG9taWQ7Ci0gICAgZGV2aWNlLT5iYWNrZW5kX2tpbmQgICAgID0gTElCWExfX0RF VklDRV9LSU5EX1ZJRjsKLSAgICBkZXZpY2UtPmRldmlkICAgICAgICAgICAgPSBuaWMtPmRldmlk OwotICAgIGRldmljZS0+ZG9taWQgICAgICAgICAgICA9IGRvbWlkOwotICAgIGRldmljZS0+a2lu ZCAgICAgICAgICAgICA9IExJQlhMX19ERVZJQ0VfS0lORF9WSUY7Ci0KLSAgICByZXR1cm4gMDsK LX0KLQotc3RhdGljIHZvaWQgbGlieGxfX3VwZGF0ZV9jb25maWdfbmljKGxpYnhsX19nYyAqZ2Ms IGxpYnhsX2RldmljZV9uaWMgKmRzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBjb25zdCBsaWJ4bF9kZXZpY2VfbmljICpzcmMpCi17Ci0gICAgZHN0LT5kZXZpZCA9IHNy Yy0+ZGV2aWQ7Ci0gICAgZHN0LT5uaWN0eXBlID0gc3JjLT5uaWN0eXBlOwotICAgIGxpYnhsX21h Y19jb3B5KENUWCwgJmRzdC0+bWFjLCAmc3JjLT5tYWMpOwotfQotCi1zdGF0aWMgdm9pZCBsaWJ4 bF9fZGV2aWNlX25pY19hZGQobGlieGxfX2VnYyAqZWdjLCB1aW50MzJfdCBkb21pZCwKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJ4bF9kZXZpY2VfbmljICpuaWMsCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlieGxfX2FvX2RldmljZSAqYW9kZXYpCi17 Ci0gICAgU1RBVEVfQU9fR0MoYW9kZXYtPmFvKTsKLSAgICBmbGV4YXJyYXlfdCAqZnJvbnQ7Ci0g ICAgZmxleGFycmF5X3QgKmJhY2s7Ci0gICAgbGlieGxfX2RldmljZSAqZGV2aWNlOwotICAgIGlu dCByYzsKLSAgICB4c190cmFuc2FjdGlvbl90IHQgPSBYQlRfTlVMTDsKLSAgICBsaWJ4bF9kb21h aW5fY29uZmlnIGRfY29uZmlnOwotICAgIGxpYnhsX2RldmljZV9uaWMgbmljX3NhdmVkOwotICAg IGxpYnhsX19kb21haW5fdXNlcmRhdGFfbG9jayAqbG9jayA9IE5VTEw7Ci0KLSAgICBsaWJ4bF9k b21haW5fY29uZmlnX2luaXQoJmRfY29uZmlnKTsKLSAgICBsaWJ4bF9kZXZpY2VfbmljX2luaXQo Jm5pY19zYXZlZCk7Ci0gICAgbGlieGxfZGV2aWNlX25pY19jb3B5KENUWCwgJm5pY19zYXZlZCwg bmljKTsKLQotICAgIHJjID0gbGlieGxfX2RldmljZV9uaWNfc2V0ZGVmYXVsdChnYywgbmljLCBk b21pZCwgYW9kZXYtPnVwZGF0ZV9qc29uKTsKLSAgICBpZiAocmMpIGdvdG8gb3V0OwotCi0gICAg ZnJvbnQgPSBmbGV4YXJyYXlfbWFrZShnYywgMTYsIDEpOwotICAgIGJhY2sgPSBmbGV4YXJyYXlf bWFrZShnYywgMTgsIDEpOwotCi0gICAgaWYgKG5pYy0+ZGV2aWQgPT0gLTEpIHsKLSAgICAgICAg aWYgKChuaWMtPmRldmlkID0gbGlieGxfX2RldmljZV9uZXh0aWQoZ2MsIGRvbWlkLCAidmlmIikp IDwgMCkgewotICAgICAgICAgICAgcmMgPSBFUlJPUl9GQUlMOwotICAgICAgICAgICAgZ290byBv dXQ7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBsaWJ4bF9fdXBkYXRlX2NvbmZpZ19uaWMoZ2Ms ICZuaWNfc2F2ZWQsIG5pYyk7Ci0KLSAgICBHQ05FVyhkZXZpY2UpOwotICAgIHJjID0gbGlieGxf X2RldmljZV9mcm9tX25pYyhnYywgZG9taWQsIG5pYywgZGV2aWNlKTsKLSAgICBpZiAoIHJjICE9 IDAgKSBnb3RvIG91dDsKLQotICAgIGZsZXhhcnJheV9hcHBlbmQoYmFjaywgImZyb250ZW5kLWlk Iik7Ci0gICAgZmxleGFycmF5X2FwcGVuZChiYWNrLCBHQ1NQUklOVEYoIiVkIiwgZG9taWQpKTsK LSAgICBmbGV4YXJyYXlfYXBwZW5kKGJhY2ssICJvbmxpbmUiKTsKLSAgICBmbGV4YXJyYXlfYXBw ZW5kKGJhY2ssICIxIik7Ci0gICAgZmxleGFycmF5X2FwcGVuZChiYWNrLCAic3RhdGUiKTsKLSAg ICBmbGV4YXJyYXlfYXBwZW5kKGJhY2ssIEdDU1BSSU5URigiJWQiLCBYZW5idXNTdGF0ZUluaXRp YWxpc2luZykpOwotICAgIGlmIChuaWMtPnNjcmlwdCkKLSAgICAgICAgZmxleGFycmF5X2FwcGVu ZF9wYWlyKGJhY2ssICJzY3JpcHQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGli eGxfX2Fic19wYXRoKGdjLCBuaWMtPnNjcmlwdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBsaWJ4bF9feGVuX3NjcmlwdF9kaXJfcGF0aCgpKSk7Ci0KLSAg ICBpZiAobmljLT5pZm5hbWUpIHsKLSAgICAgICAgZmxleGFycmF5X2FwcGVuZChiYWNrLCAidmlm bmFtZSIpOwotICAgICAgICBmbGV4YXJyYXlfYXBwZW5kKGJhY2ssIG5pYy0+aWZuYW1lKTsKLSAg ICB9Ci0KLSAgICBpZiAobmljLT5jb2xvZnRfZm9yd2FyZGRldikgewotICAgICAgICBmbGV4YXJy YXlfYXBwZW5kKGJhY2ssICJmb3J3YXJkZGV2Iik7Ci0gICAgICAgIGZsZXhhcnJheV9hcHBlbmQo YmFjaywgbmljLT5jb2xvZnRfZm9yd2FyZGRldik7Ci0gICAgfQotCi0gICAgZmxleGFycmF5X2Fw cGVuZChiYWNrLCAibWFjIik7Ci0gICAgZmxleGFycmF5X2FwcGVuZChiYWNrLEdDU1BSSU5URihM SUJYTF9NQUNfRk1ULCBMSUJYTF9NQUNfQllURVMobmljLT5tYWMpKSk7Ci0gICAgaWYgKG5pYy0+ aXApIHsKLSAgICAgICAgZmxleGFycmF5X2FwcGVuZChiYWNrLCAiaXAiKTsKLSAgICAgICAgZmxl eGFycmF5X2FwcGVuZChiYWNrLCBsaWJ4bF9fc3RyZHVwKGdjLCBuaWMtPmlwKSk7Ci0gICAgfQot ICAgIGlmIChuaWMtPmdhdGV3YXlkZXYpIHsKLSAgICAgICAgZmxleGFycmF5X2FwcGVuZChiYWNr LCAiZ2F0ZXdheWRldiIpOwotICAgICAgICBmbGV4YXJyYXlfYXBwZW5kKGJhY2ssIGxpYnhsX19z dHJkdXAoZ2MsIG5pYy0+Z2F0ZXdheWRldikpOwotICAgIH0KLQotICAgIGlmIChuaWMtPnJhdGVf aW50ZXJ2YWxfdXNlY3MgPiAwKSB7Ci0gICAgICAgIGZsZXhhcnJheV9hcHBlbmQoYmFjaywgInJh dGUiKTsKLSAgICAgICAgZmxleGFycmF5X2FwcGVuZChiYWNrLCBHQ1NQUklOVEYoIiUiUFJJdTY0 IiwlIlBSSXUzMiIiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5pYy0+cmF0ZV9ieXRl c19wZXJfaW50ZXJ2YWwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmljLT5yYXRlX2lu dGVydmFsX3VzZWNzKSk7Ci0gICAgfQotCi0gICAgZmxleGFycmF5X2FwcGVuZChiYWNrLCAiYnJp ZGdlIik7Ci0gICAgZmxleGFycmF5X2FwcGVuZChiYWNrLCBsaWJ4bF9fc3RyZHVwKGdjLCBuaWMt PmJyaWRnZSkpOwotICAgIGZsZXhhcnJheV9hcHBlbmQoYmFjaywgImhhbmRsZSIpOwotICAgIGZs ZXhhcnJheV9hcHBlbmQoYmFjaywgR0NTUFJJTlRGKCIlZCIsIG5pYy0+ZGV2aWQpKTsKLSAgICBm bGV4YXJyYXlfYXBwZW5kKGJhY2ssICJ0eXBlIik7Ci0gICAgZmxleGFycmF5X2FwcGVuZChiYWNr LCBsaWJ4bF9fc3RyZHVwKGdjLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGxpYnhsX25pY190eXBlX3RvX3N0cmluZyhuaWMtPm5pY3R5cGUpKSk7Ci0KLSAgICBmbGV4YXJy YXlfYXBwZW5kKGZyb250LCAiYmFja2VuZC1pZCIpOwotICAgIGZsZXhhcnJheV9hcHBlbmQoZnJv bnQsIEdDU1BSSU5URigiJWQiLCBuaWMtPmJhY2tlbmRfZG9taWQpKTsKLSAgICBmbGV4YXJyYXlf YXBwZW5kKGZyb250LCAic3RhdGUiKTsKLSAgICBmbGV4YXJyYXlfYXBwZW5kKGZyb250LCBHQ1NQ UklOVEYoIiVkIiwgWGVuYnVzU3RhdGVJbml0aWFsaXNpbmcpKTsKLSAgICBmbGV4YXJyYXlfYXBw ZW5kKGZyb250LCAiaGFuZGxlIik7Ci0gICAgZmxleGFycmF5X2FwcGVuZChmcm9udCwgR0NTUFJJ TlRGKCIlZCIsIG5pYy0+ZGV2aWQpKTsKLSAgICBmbGV4YXJyYXlfYXBwZW5kKGZyb250LCAibWFj Iik7Ci0gICAgZmxleGFycmF5X2FwcGVuZChmcm9udCwgR0NTUFJJTlRGKAotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgTElCWExfTUFDX0ZNVCwgTElCWExfTUFDX0JZVEVTKG5p Yy0+bWFjKSkpOwotCi0gICAgaWYgKGFvZGV2LT51cGRhdGVfanNvbikgewotICAgICAgICBsb2Nr ID0gbGlieGxfX2xvY2tfZG9tYWluX3VzZXJkYXRhKGdjLCBkb21pZCk7Ci0gICAgICAgIGlmICgh bG9jaykgewotICAgICAgICAgICAgcmMgPSBFUlJPUl9MT0NLX0ZBSUw7Ci0gICAgICAgICAgICBn b3RvIG91dDsKLSAgICAgICAgfQotCi0gICAgICAgIHJjID0gbGlieGxfX2dldF9kb21haW5fY29u ZmlndXJhdGlvbihnYywgZG9taWQsICZkX2NvbmZpZyk7Ci0gICAgICAgIGlmIChyYykgZ290byBv dXQ7Ci0KLSAgICAgICAgREVWSUNFX0FERChuaWMsIG5pY3MsIGRvbWlkLCAmbmljX3NhdmVkLCBD T01QQVJFX0RFVklELCAmZF9jb25maWcpOwotCi0gICAgICAgIHJjID0gbGlieGxfX2RtX2NoZWNr X3N0YXJ0KGdjLCAmZF9jb25maWcsIGRvbWlkKTsKLSAgICAgICAgaWYgKHJjKSBnb3RvIG91dDsK LSAgICB9Ci0KLSAgICBmb3IgKDs7KSB7Ci0gICAgICAgIHJjID0gbGlieGxfX3hzX3RyYW5zYWN0 aW9uX3N0YXJ0KGdjLCAmdCk7Ci0gICAgICAgIGlmIChyYykgZ290byBvdXQ7Ci0KLSAgICAgICAg cmMgPSBsaWJ4bF9fZGV2aWNlX2V4aXN0cyhnYywgdCwgZGV2aWNlKTsKLSAgICAgICAgaWYgKHJj IDwgMCkgZ290byBvdXQ7Ci0gICAgICAgIGlmIChyYyA9PSAxKSB7ICAgICAgICAgICAgICAvKiBh bHJlYWR5IGV4aXN0cyBpbiB4ZW5zdG9yZSAqLwotICAgICAgICAgICAgTE9HKEVSUk9SLCAiZGV2 aWNlIGFscmVhZHkgZXhpc3RzIGluIHhlbnN0b3JlIik7Ci0gICAgICAgICAgICBhb2Rldi0+YWN0 aW9uID0gTElCWExfX0RFVklDRV9BQ1RJT05fQUREOyAvKiBmb3IgZXJyb3IgbWVzc2FnZSAqLwot ICAgICAgICAgICAgcmMgPSBFUlJPUl9ERVZJQ0VfRVhJU1RTOwotICAgICAgICAgICAgZ290byBv dXQ7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoYW9kZXYtPnVwZGF0ZV9qc29uKSB7Ci0gICAg ICAgICAgICByYyA9IGxpYnhsX19zZXRfZG9tYWluX2NvbmZpZ3VyYXRpb24oZ2MsIGRvbWlkLCAm ZF9jb25maWcpOwotICAgICAgICAgICAgaWYgKHJjKSBnb3RvIG91dDsKLSAgICAgICAgfQotCi0g ICAgICAgIGxpYnhsX19kZXZpY2VfZ2VuZXJpY19hZGQoZ2MsIHQsIGRldmljZSwKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJ4bF9feHNfa3ZzX29mX2ZsZXhhcnJheShnYywg YmFjaywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBiYWNrLT5jb3VudCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgbGlieGxfX3hzX2t2c19vZl9mbGV4YXJyYXkoZ2MsIGZyb250LAotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb250LT5jb3Vu dCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7Ci0KLSAgICAgICAg cmMgPSBsaWJ4bF9feHNfdHJhbnNhY3Rpb25fY29tbWl0KGdjLCAmdCk7Ci0gICAgICAgIGlmICgh cmMpIGJyZWFrOwotICAgICAgICBpZiAocmMgPCAwKSBnb3RvIG91dDsKLSAgICB9Ci0KLSAgICBh b2Rldi0+ZGV2ID0gZGV2aWNlOwotICAgIGFvZGV2LT5hY3Rpb24gPSBMSUJYTF9fREVWSUNFX0FD VElPTl9BREQ7Ci0gICAgbGlieGxfX3dhaXRfZGV2aWNlX2Nvbm5lY3Rpb24oZWdjLCBhb2Rldik7 Ci0KLSAgICByYyA9IDA7Ci1vdXQ6Ci0gICAgbGlieGxfX3hzX3RyYW5zYWN0aW9uX2Fib3J0KGdj LCAmdCk7Ci0gICAgaWYgKGxvY2spIGxpYnhsX191bmxvY2tfZG9tYWluX3VzZXJkYXRhKGxvY2sp OwotICAgIGxpYnhsX2RldmljZV9uaWNfZGlzcG9zZSgmbmljX3NhdmVkKTsKLSAgICBsaWJ4bF9k b21haW5fY29uZmlnX2Rpc3Bvc2UoJmRfY29uZmlnKTsKLSAgICBhb2Rldi0+cmMgPSByYzsKLSAg ICBpZiAocmMpIGFvZGV2LT5jYWxsYmFjayhlZ2MsIGFvZGV2KTsKLSAgICByZXR1cm47Ci19Ci0K LXN0YXRpYyBpbnQgbGlieGxfX2RldmljZV9uaWNfZnJvbV94ZW5zdG9yZShsaWJ4bF9fZ2MgKmdj LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmxp YnhsX3BhdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlieGxf ZGV2aWNlX25pYyAqbmljKQotewotICAgIGNvbnN0IGNoYXIgKnRtcDsKLSAgICBpbnQgcmM7Ci0K LSAgICBsaWJ4bF9kZXZpY2VfbmljX2luaXQobmljKTsKLQotICAgIHRtcCA9IFJFQURfTElCWExE RVYoZ2MsICJoYW5kbGUiKTsKLSAgICBpZiAodG1wKQotICAgICAgICBuaWMtPmRldmlkID0gYXRv aSh0bXApOwotICAgIGVsc2UKLSAgICAgICAgbmljLT5kZXZpZCA9IDA7Ci0KLSAgICAvKiBuaWMt Pm10dSA9ICovCi0KLSAgICB0bXAgPSBSRUFEX0xJQlhMREVWKGdjLCAibWFjIik7Ci0gICAgaWYg KHRtcCkgewotICAgICAgICByYyA9IGxpYnhsX19wYXJzZV9tYWModG1wLCBuaWMtPm1hYyk7Ci0g ICAgICAgIGlmIChyYykgZ290byBvdXQ7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgbWVtc2V0KG5p Yy0+bWFjLCAwLCBzaXplb2YobmljLT5tYWMpKTsKLSAgICB9Ci0KLSAgICBuaWMtPmlwID0gUkVB RF9MSUJYTERFVihOT0dDLCAiaXAiKTsKLSAgICBuaWMtPmJyaWRnZSA9IFJFQURfTElCWExERVYo Tk9HQywgImJyaWRnZSIpOwotICAgIG5pYy0+c2NyaXB0ID0gUkVBRF9MSUJYTERFVihOT0dDLCAi c2NyaXB0Iik7Ci0gICAgbmljLT5jb2xvZnRfZm9yd2FyZGRldiA9IFJFQURfTElCWExERVYoTk9H QywgImZvcndhcmRkZXYiKTsKLQotICAgIC8qIHZpZl9pb2VtdSBuaWNzIHVzZSB0aGUgc2FtZSB4 ZW5zdG9yZSBlbnRyaWVzIGFzIHZpZiBpbnRlcmZhY2VzICovCi0gICAgdG1wID0gUkVBRF9MSUJY TERFVihnYywgInR5cGUiKTsKLSAgICBpZiAodG1wKSB7Ci0gICAgICAgIHJjID0gbGlieGxfbmlj X3R5cGVfZnJvbV9zdHJpbmcodG1wLCAmbmljLT5uaWN0eXBlKTsKLSAgICAgICAgaWYgKHJjKSBn b3RvIG91dDsKLSAgICB9IGVsc2UgewotICAgICAgICBuaWMtPm5pY3R5cGUgPSBMSUJYTF9OSUNf VFlQRV9WSUY7Ci0gICAgfQotICAgIG5pYy0+bW9kZWwgPSBOVUxMOyAvKiBYWFggT25seSBmb3Ig VFlQRV9JT0VNVSAqLwotICAgIG5pYy0+aWZuYW1lID0gTlVMTDsgLyogWFhYIE9ubHkgZm9yIFRZ UEVfSU9FTVUgKi8KLQotICAgIHJjID0gMDsKLSBvdXQ6Ci0gICAgcmV0dXJuIHJjOwotfQotCi1p bnQgbGlieGxfZGV2aWRfdG9fZGV2aWNlX25pYyhsaWJ4bF9jdHggKmN0eCwgdWludDMyX3QgZG9t aWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZGV2aWQsIGxpYnhsX2Rldmlj ZV9uaWMgKm5pYykKLXsKLSAgICBHQ19JTklUKGN0eCk7Ci0gICAgY2hhciAqbGlieGxfZG9tX3Bh dGgsICpsaWJ4bF9wYXRoOwotICAgIGludCByYyA9IEVSUk9SX0ZBSUw7Ci0KLSAgICBsaWJ4bF9k ZXZpY2VfbmljX2luaXQobmljKTsKLSAgICBsaWJ4bF9kb21fcGF0aCA9IGxpYnhsX194c19saWJ4 bF9wYXRoKGdjLCBkb21pZCk7Ci0gICAgaWYgKCFsaWJ4bF9kb21fcGF0aCkKLSAgICAgICAgZ290 byBvdXQ7Ci0KLSAgICBsaWJ4bF9wYXRoID0gR0NTUFJJTlRGKCIlcy9kZXZpY2UvdmlmLyVkIiwg bGlieGxfZG9tX3BhdGgsIGRldmlkKTsKLQotICAgIHJjID0gbGlieGxfX2RldmljZV9uaWNfZnJv bV94ZW5zdG9yZShnYywgbGlieGxfcGF0aCwgbmljKTsKLSAgICBpZiAocmMpIGdvdG8gb3V0Owot Ci0gICAgcmMgPSAwOwotb3V0OgotICAgIEdDX0ZSRUU7Ci0gICAgcmV0dXJuIHJjOwotfQotCi1z dGF0aWMgaW50IGxpYnhsX19hcHBlbmRfbmljX2xpc3QobGlieGxfX2djICpnYywKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBkb21pZCwKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJ4bF9kZXZpY2VfbmljICoq bmljcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKm5u aWNzKQotewotICAgIGNoYXIgKmxpYnhsX2Rpcl9wYXRoID0gTlVMTDsKLSAgICBjaGFyICoqZGly ID0gTlVMTDsKLSAgICB1bnNpZ25lZCBpbnQgbiA9IDA7Ci0gICAgbGlieGxfZGV2aWNlX25pYyAq cG5pYyA9IE5VTEwsICpwbmljX2VuZCA9IE5VTEw7Ci0gICAgaW50IHJjOwotCi0gICAgbGlieGxf ZGlyX3BhdGggPSBHQ1NQUklOVEYoIiVzL2RldmljZS92aWYiLAotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGxpYnhsX194c19saWJ4bF9wYXRoKGdjLCBkb21pZCkpOwotICAgIGRpciA9 IGxpYnhsX194c19kaXJlY3RvcnkoZ2MsIFhCVF9OVUxMLCBsaWJ4bF9kaXJfcGF0aCwgJm4pOwot ICAgIGlmIChkaXIgJiYgbikgewotICAgICAgICBsaWJ4bF9kZXZpY2VfbmljICp0bXA7Ci0gICAg ICAgIHRtcCA9IHJlYWxsb2MoKm5pY3MsIHNpemVvZiAobGlieGxfZGV2aWNlX25pYykgKiAoKm5u aWNzICsgbikpOwotICAgICAgICBpZiAodG1wID09IE5VTEwpCi0gICAgICAgICAgICByZXR1cm4g RVJST1JfTk9NRU07Ci0gICAgICAgICpuaWNzID0gdG1wOwotICAgICAgICBwbmljID0gKm5pY3Mg KyAqbm5pY3M7Ci0gICAgICAgIHBuaWNfZW5kID0gKm5pY3MgKyAqbm5pY3MgKyBuOwotICAgICAg ICBmb3IgKDsgcG5pYyA8IHBuaWNfZW5kOyBwbmljKyssIGRpcisrKSB7Ci0gICAgICAgICAgICBj b25zdCBjaGFyICpwOwotICAgICAgICAgICAgcCA9IEdDU1BSSU5URigiJXMvJXMiLCBsaWJ4bF9k aXJfcGF0aCwgKmRpcik7Ci0gICAgICAgICAgICByYyA9IGxpYnhsX19kZXZpY2VfbmljX2Zyb21f eGVuc3RvcmUoZ2MsIHAsIHBuaWMpOwotICAgICAgICAgICAgaWYgKHJjKSBnb3RvIG91dDsKLSAg ICAgICAgfQotICAgICAgICAqbm5pY3MgKz0gbjsKLSAgICB9Ci0gICAgcmV0dXJuIDA7Ci0KLSBv dXQ6Ci0gICAgcmV0dXJuIHJjOwotfQotCi1saWJ4bF9kZXZpY2VfbmljICpsaWJ4bF9kZXZpY2Vf bmljX2xpc3QobGlieGxfY3R4ICpjdHgsIHVpbnQzMl90IGRvbWlkLCBpbnQgKm51bSkKLXsKLSAg ICBHQ19JTklUKGN0eCk7Ci0gICAgbGlieGxfZGV2aWNlX25pYyAqbmljcyA9IE5VTEw7Ci0gICAg aW50IHJjOwotCi0gICAgKm51bSA9IDA7Ci0KLSAgICByYyA9IGxpYnhsX19hcHBlbmRfbmljX2xp c3QoZ2MsIGRvbWlkLCAmbmljcywgbnVtKTsKLSAgICBpZiAocmMpIGdvdG8gb3V0X2VycjsKLQot ICAgIEdDX0ZSRUU7Ci0gICAgcmV0dXJuIG5pY3M7Ci0KLW91dF9lcnI6Ci0gICAgTE9HKEVSUk9S LCAiVW5hYmxlIHRvIGxpc3QgbmljcyIpOwotICAgIHdoaWxlICgqbnVtKSB7Ci0gICAgICAgICgq bnVtKS0tOwotICAgICAgICBsaWJ4bF9kZXZpY2VfbmljX2Rpc3Bvc2UoJm5pY3NbKm51bV0pOwot ICAgIH0KLSAgICBmcmVlKG5pY3MpOwotICAgIHJldHVybiBOVUxMOwotfQotCi1pbnQgbGlieGxf ZGV2aWNlX25pY19nZXRpbmZvKGxpYnhsX2N0eCAqY3R4LCB1aW50MzJfdCBkb21pZCwKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX2RldmljZV9uaWMgKm5pYywgbGlieGxfbmlj aW5mbyAqbmljaW5mbykKLXsKLSAgICBHQ19JTklUKGN0eCk7Ci0gICAgY2hhciAqZG9tcGF0aCwg Km5pY3BhdGgsICpsaWJ4bF9wYXRoOwotICAgIGNoYXIgKnZhbDsKLSAgICBpbnQgcmM7Ci0KLSAg ICBkb21wYXRoID0gbGlieGxfX3hzX2dldF9kb21wYXRoKGdjLCBkb21pZCk7Ci0gICAgbmljaW5m by0+ZGV2aWQgPSBuaWMtPmRldmlkOwotCi0gICAgbmljcGF0aCA9IEdDU1BSSU5URigiJXMvZGV2 aWNlL3ZpZi8lZCIsIGRvbXBhdGgsIG5pY2luZm8tPmRldmlkKTsKLSAgICBsaWJ4bF9wYXRoID0g R0NTUFJJTlRGKCIlcy9kZXZpY2UvdmlmLyVkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg IGxpYnhsX194c19saWJ4bF9wYXRoKGdjLCBkb21pZCksIG5pY2luZm8tPmRldmlkKTsKLSAgICBu aWNpbmZvLT5iYWNrZW5kID0geHNfcmVhZChjdHgtPnhzaCwgWEJUX05VTEwsCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIEdDU1BSSU5URigiJXMvYmFja2VuZCIsIGxpYnhsX3BhdGgp LCBOVUxMKTsKLSAgICBpZiAoIW5pY2luZm8tPmJhY2tlbmQpIHsKLSAgICAgICAgR0NfRlJFRTsK LSAgICAgICAgcmV0dXJuIEVSUk9SX0ZBSUw7Ci0gICAgfQotICAgIHJjID0gbGlieGxfX2JhY2tl bmRwYXRoX3BhcnNlX2RvbWlkKGdjLCBuaWNpbmZvLT5iYWNrZW5kLAotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICZuaWNpbmZvLT5iYWNrZW5kX2lkKTsKLSAgICBpZiAo cmMpIGdvdG8gb3V0OwotCi0gICAgdmFsID0gbGlieGxfX3hzX3JlYWQoZ2MsIFhCVF9OVUxMLCBH Q1NQUklOVEYoIiVzL3N0YXRlIiwgbmljcGF0aCkpOwotICAgIG5pY2luZm8tPnN0YXRlID0gdmFs ID8gc3RydG91bCh2YWwsIE5VTEwsIDEwKSA6IC0xOwotICAgIHZhbCA9IGxpYnhsX194c19yZWFk KGdjLCBYQlRfTlVMTCwgR0NTUFJJTlRGKCIlcy9ldmVudC1jaGFubmVsIiwgbmljcGF0aCkpOwot ICAgIG5pY2luZm8tPmV2dGNoID0gdmFsID8gc3RydG91bCh2YWwsIE5VTEwsIDEwKSA6IC0xOwot ICAgIHZhbCA9IGxpYnhsX194c19yZWFkKGdjLCBYQlRfTlVMTCwgR0NTUFJJTlRGKCIlcy90eC1y aW5nLXJlZiIsIG5pY3BhdGgpKTsKLSAgICBuaWNpbmZvLT5ycmVmX3R4ID0gdmFsID8gc3RydG91 bCh2YWwsIE5VTEwsIDEwKSA6IC0xOwotICAgIHZhbCA9IGxpYnhsX194c19yZWFkKGdjLCBYQlRf TlVMTCwgR0NTUFJJTlRGKCIlcy9yeC1yaW5nLXJlZiIsIG5pY3BhdGgpKTsKLSAgICBuaWNpbmZv LT5ycmVmX3J4ID0gdmFsID8gc3RydG91bCh2YWwsIE5VTEwsIDEwKSA6IC0xOwotICAgIG5pY2lu Zm8tPmZyb250ZW5kID0gbGlieGxfX3N0cmR1cChOT0dDLCBuaWNwYXRoKTsKLSAgICBuaWNpbmZv LT5mcm9udGVuZF9pZCA9IGRvbWlkOwotCi0gICAgcmMgPSAwOwotIG91dDoKLSAgICBHQ19GUkVF OwotICAgIHJldHVybiByYzsKLX0KLQotY29uc3QgY2hhciAqbGlieGxfX2RldmljZV9uaWNfZGV2 bmFtZShsaWJ4bF9fZ2MgKmdjLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB1aW50MzJfdCBkb21pZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg dWludDMyX3QgZGV2aWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxp YnhsX25pY190eXBlIHR5cGUpCi17Ci0gICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgY2FzZSBMSUJY TF9OSUNfVFlQRV9WSUY6Ci0gICAgICAgIHJldHVybiBHQ1NQUklOVEYoTkVUQkFDS19OSUNfTkFN RSwgZG9taWQsIGRldmlkKTsKLSAgICBjYXNlIExJQlhMX05JQ19UWVBFX1ZJRl9JT0VNVToKLSAg ICAgICAgcmV0dXJuIEdDU1BSSU5URihORVRCQUNLX05JQ19OQU1FIFRBUF9ERVZJQ0VfU1VGRklY LCBkb21pZCwgZGV2aWQpOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGFib3J0KCk7Ci0gICAgfQot fQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqLwogaW50IGxpYnhsX19kZXZpY2VfY29uc29sZV9h ZGQobGlieGxfX2djICpnYywgdWludDMyX3QgZG9taWQsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBsaWJ4bF9fZGV2aWNlX2NvbnNvbGUgKmNvbnNvbGUsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBsaWJ4bF9fZG9tYWluX2J1aWxkX3N0YXRlICpzdGF0ZSwKQEAgLTM2NjAs MTQgKzMyMjQsMjEgQEAgc3RhdGljIGludCBsaWJ4bF9fZGV2aWNlX2NoYW5uZWxfZnJvbV94ZW5z dG9yZShsaWJ4bF9fZ2MgKmdjLAogCiAgICAgbGlieGxfZGV2aWNlX2NoYW5uZWxfaW5pdChjaGFu bmVsKTsKIAotICAgIC8qIFJFQURfQkFDS0VORCBpcyBmcm9tIGxpYnhsX19kZXZpY2VfbmljX2Zy b21feGVuc3RvcmUgYWJvdmUgKi8KLSAgICBjaGFubmVsLT5uYW1lID0gUkVBRF9MSUJYTERFVihO T0dDLCAibmFtZSIpOwotICAgIHRtcCA9IFJFQURfTElCWExERVYoZ2MsICJjb25uZWN0aW9uIik7 CisgICAgcmMgPSBsaWJ4bF9feHNfcmVhZF9jaGVja2VkKE5PR0MsIFhCVF9OVUxMLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBHQ1NQUklOVEYoIiVzL25hbWUiLCBsaWJ4bF9wYXRo KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IGNoYXIgKiopKCZjaGFu bmVsLT5uYW1lKSk7CisgICAgaWYgKHJjKSBnb3RvIG91dDsKKyAgICByYyA9IGxpYnhsX194c19y ZWFkX2NoZWNrZWQoTk9HQywgWEJUX05VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIEdDU1BSSU5URigiJXMvY29ubmVjdGlvbiIsIGxpYnhsX3BhdGgpLCAmdG1wKTsKKyAgICBp ZiAocmMpIGdvdG8gb3V0OwogICAgIGlmICghc3RyY21wKHRtcCwgInB0eSIpKSB7CiAgICAgICAg IGNoYW5uZWwtPmNvbm5lY3Rpb24gPSBMSUJYTF9DSEFOTkVMX0NPTk5FQ1RJT05fUFRZOwogICAg IH0gZWxzZSBpZiAoIXN0cmNtcCh0bXAsICJzb2NrZXQiKSkgewogICAgICAgICBjaGFubmVsLT5j b25uZWN0aW9uID0gTElCWExfQ0hBTk5FTF9DT05ORUNUSU9OX1NPQ0tFVDsKLSAgICAgICAgY2hh bm5lbC0+dS5zb2NrZXQucGF0aCA9IFJFQURfTElCWExERVYoTk9HQywgInBhdGgiKTsKKyAgICAg ICAgcmMgPSBsaWJ4bF9feHNfcmVhZF9jaGVja2VkKE5PR0MsIFhCVF9OVUxMLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgR0NTUFJJTlRGKCIlcy9wYXRoIiwgbGlieGxfcGF0 aCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3QgY2hhciAqKiko JmNoYW5uZWwtPnUuc29ja2V0LnBhdGgpKTsKKyAgICAgICAgaWYgKHJjKSBnb3RvIG91dDsKICAg ICB9IGVsc2UgewogICAgICAgICByYyA9IEVSUk9SX0lOVkFMOwogICAgICAgICBnb3RvIG91dDsK QEAgLTQwMjcsMTAgKzM1OTgsNiBAQCBvdXQ6CiAgKiBsaWJ4bF9fYWRkX2Rpc2tzCiAgKiBsaWJ4 bF9kZXZpY2VfZGlza19yZW1vdmUKICAqIGxpYnhsX2RldmljZV9kaXNrX2Rlc3Ryb3kKLSAqIGxp YnhsX2RldmljZV9uaWNfYWRkCi0gKiBsaWJ4bF9fYWRkX25pY3MKLSAqIGxpYnhsX2RldmljZV9u aWNfcmVtb3ZlCi0gKiBsaWJ4bF9kZXZpY2VfbmljX2Rlc3Ryb3kKICAqIGxpYnhsX2RldmljZV92 a2JfcmVtb3ZlCiAgKiBsaWJ4bF9kZXZpY2VfdmtiX2Rlc3Ryb3kKICAqIGxpYnhsX2RldmljZV92 ZmJfcmVtb3ZlCkBAIC00MDQ2LDExICszNjEzLDYgQEAgTElCWExfREVGSU5FX0RFVklDRV9BREQo ZGlzaykKIExJQlhMX0RFRklORV9ERVZJQ0VTX0FERChkaXNrKQogTElCWExfREVGSU5FX0RFVklD RV9SRU1PVkUoZGlzaykKIAotLyogbmljICovCi1MSUJYTF9ERUZJTkVfREVWSUNFX0FERChuaWMp Ci1MSUJYTF9ERUZJTkVfREVWSUNFU19BREQobmljKQotTElCWExfREVGSU5FX0RFVklDRV9SRU1P VkUobmljKQotCiAvKiB2a2IgKi8KIExJQlhMX0RFRklORV9ERVZJQ0VfUkVNT1ZFKHZrYikKIApA QCAtNzE5OSwyNSArNjc2MSwxMSBAQCBzdGF0aWMgaW50IGxpYnhsX2RldmljZV9kaXNrX2RtX25l ZWRlZCh2b2lkICplLCB1bnNpZ25lZCBkb21pZCkKICAgICAgICAgICAgZWxlbS0+YmFja2VuZF9k b21pZCA9PSBkb21pZDsKIH0KIAotc3RhdGljIGludCBsaWJ4bF9kZXZpY2VfbmljX2NvbXBhcmUo bGlieGxfZGV2aWNlX25pYyAqZDEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBsaWJ4bF9kZXZpY2VfbmljICpkMikKLXsKLSAgICByZXR1cm4gQ09NUEFSRV9ERVZJRChkMSwg ZDIpOwotfQotCi1zdGF0aWMgdm9pZCBsaWJ4bF9kZXZpY2VfbmljX3VwZGF0ZV9jb25maWcobGli eGxfX2djICpnYywgdm9pZCAqZCwgdm9pZCAqcykKLXsKLSAgICBsaWJ4bF9fdXBkYXRlX2NvbmZp Z19uaWMoZ2MsIGQsIHMpOwotfQotCiBERUZJTkVfREVWSUNFX1RZUEVfU1RSVUNUKGRpc2ssCiAg ICAgLm1lcmdlICAgICAgID0gbGlieGxfZGV2aWNlX2Rpc2tfbWVyZ2UsCiAgICAgLmRtX25lZWRl ZCAgID0gbGlieGxfZGV2aWNlX2Rpc2tfZG1fbmVlZGVkLAogICAgIC5za2lwX2F0dGFjaCA9IDEK ICk7Ci1ERUZJTkVfREVWSUNFX1RZUEVfU1RSVUNUKG5pYywKLSAgICAudXBkYXRlX2NvbmZpZyA9 IGxpYnhsX2RldmljZV9uaWNfdXBkYXRlX2NvbmZpZwotKTsKIAogLyoKICAqIExvY2FsIHZhcmlh YmxlczoKZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYnhsL2xpYnhsX2NyZWF0ZS5jIGIvdG9vbHMvbGli eGwvbGlieGxfY3JlYXRlLmMKaW5kZXggMjNiODJlOS4uZDdkYjllOSAxMDA2NDQKLS0tIGEvdG9v bHMvbGlieGwvbGlieGxfY3JlYXRlLmMKKysrIGIvdG9vbHMvbGlieGwvbGlieGxfY3JlYXRlLmMK QEAgLTc3Miw3ICs3NzIsNiBAQCBzdGF0aWMgdm9pZCBpbml0aWF0ZV9kb21haW5fY3JlYXRlKGxp YnhsX19lZ2MgKmVnYywKICAgICBsaWJ4bF9jdHggKmN0eCA9IGxpYnhsX19nY19vd25lcihnYyk7 CiAgICAgdWludDMyX3QgZG9taWQ7CiAgICAgaW50IGksIHJldDsKLSAgICBzaXplX3QgbGFzdF9k ZXZpZCA9IC0xOwogICAgIGJvb2wgcG9kX2VuYWJsZWQgPSBmYWxzZTsKIAogICAgIC8qIGNvbnZl bmllbmNlIGFsaWFzZXMgKi8KQEAgLTkzMiwyNSArOTMxLDkgQEAgc3RhdGljIHZvaWQgaW5pdGlh dGVfZG9tYWluX2NyZWF0ZShsaWJ4bF9fZWdjICplZ2MsCiAgICAgICogTWFrZSB0d28gcnVucyBv dmVyIGNvbmZpZ3VyZWQgTklDcyBpbiBvcmRlciB0byBhdm9pZCBkdXBsaWNhdGUgSURzCiAgICAg ICogaW4gY2FzZSB0aGUgY2FsbGVyIHBhcnRpYWxseSBhc3NpZ25lZCBJRHMuCiAgICAgICovCi0g ICAgZm9yIChpID0gMDsgaSA8IGRfY29uZmlnLT5udW1fbmljczsgaSsrKSB7Ci0gICAgICAgIC8q IFdlIGhhdmUgdG8gaW5pdCB0aGUgbmljIGhlcmUsIGJlY2F1c2Ugd2Ugc3RpbGwgaGF2ZW4ndAot ICAgICAgICAgKiBjYWxsZWQgbGlieGxfZGV2aWNlX25pY19hZGQgd2hlbiBkb21jcmVhdGVfbGF1 bmNoX2RtIGdldHMgY2FsbGVkLAotICAgICAgICAgKiBidXQgcWVtdSBuZWVkcyB0aGUgbmljIGlu Zm9ybWF0aW9uIHRvIGJlIGNvbXBsZXRlLgotICAgICAgICAgKi8KLSAgICAgICAgcmV0ID0gbGli eGxfX2RldmljZV9uaWNfc2V0ZGVmYXVsdChnYywgJmRfY29uZmlnLT5uaWNzW2ldLCBkb21pZCwK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSk7Ci0gICAg ICAgIGlmIChyZXQpIHsKLSAgICAgICAgICAgIExPRyhFUlJPUiwgIlVuYWJsZSB0byBzZXQgbmlj IGRlZmF1bHRzIGZvciBuaWMgJWQiLCBpKTsKLSAgICAgICAgICAgIGdvdG8gZXJyb3Jfb3V0Owot ICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGRfY29uZmlnLT5uaWNzW2ldLmRldmlkID4gbGFzdF9k ZXZpZCkKLSAgICAgICAgICAgIGxhc3RfZGV2aWQgPSBkX2NvbmZpZy0+bmljc1tpXS5kZXZpZDsK LSAgICB9Ci0gICAgZm9yIChpID0gMDsgaSA8IGRfY29uZmlnLT5udW1fbmljczsgaSsrKSB7Ci0g ICAgICAgIGlmIChkX2NvbmZpZy0+bmljc1tpXS5kZXZpZCA8IDApCi0gICAgICAgICAgICBkX2Nv bmZpZy0+bmljc1tpXS5kZXZpZCA9ICsrbGFzdF9kZXZpZDsKLSAgICB9CisgICAgcmV0ID0gbGli eGxfX2RldmljZV9uaWNfc2V0X2RldmlkcyhnYywgZF9jb25maWcsIGRvbWlkKTsKKyAgICBpZiAo cmV0KQorICAgICAgICBnb3RvIGVycm9yX291dDsKIAogICAgIGlmIChyZXN0b3JlX2ZkID49IDAg fHwgZGNzLT5kb21pZF9zb2Z0X3Jlc2V0ICE9IElOVkFMSURfRE9NSUQpIHsKICAgICAgICAgTE9H KERFQlVHLCAicmVzdG9yaW5nLCBub3QgcnVubmluZyBib290bG9hZGVyIik7CmRpZmYgLS1naXQg YS90b29scy9saWJ4bC9saWJ4bF9pbnRlcm5hbC5oIGIvdG9vbHMvbGlieGwvbGlieGxfaW50ZXJu YWwuaAppbmRleCBjZGMyM2UyLi4wZTc4YzEyIDEwMDY0NAotLS0gYS90b29scy9saWJ4bC9saWJ4 bF9pbnRlcm5hbC5oCisrKyBiL3Rvb2xzL2xpYnhsL2xpYnhsX2ludGVybmFsLmgKQEAgLTEyODgs NyArMTI4OCw2IEBAIGJvb2wgbGlieGxfX3hzd2FpdF9pbnVzZShjb25zdCBsaWJ4bF9feHN3YWl0 X3N0YXRlICpzcyk7CiAKIGludCBsaWJ4bF9feHN3YWl0X3N0YXJ0KGxpYnhsX19nYyosIGxpYnhs X194c3dhaXRfc3RhdGUqKTsKIAotCiAvKgogICogbGlieGxfX2V2X2RldnN0YXRlIC0gd2FpdHMg YSBnaXZlbiB0aW1lIGZvciBhIGRldmljZSB0bwogICogcmVhY2ggYSBnaXZlbiBzdGF0ZS4gIEZv bGxvd3MgdGhlIGxpYnhsX2V2XyogY29udmVudGlvbnMuCkBAIC0zNjc5LDYgKzM2NzgsMTAgQEAg c3RydWN0IGxpYnhsX19kb21haW5fY3JlYXRlX3N0YXRlIHsKICAgICBsaWJ4bF9fbXVsdGlkZXYg bXVsdGlkZXY7CiB9OwogCitfaGlkZGVuIGludCBsaWJ4bF9fZGV2aWNlX25pY19zZXRfZGV2aWRz KGxpYnhsX19nYyAqZ2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGxpYnhsX2RvbWFpbl9jb25maWcgKmRfY29uZmlnLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB1aW50MzJfdCBkb21pZCk7CisKIC8qLS0tLS0gRG9tYWluIHN1c3Bl bmQgKHNhdmUpIGZ1bmN0aW9ucyAtLS0tLSovCiAKIC8qIGNhbGxzIGRzcy0+Y2FsbGJhY2sgd2hl biBkb25lICovCmRpZmYgLS1naXQgYS90b29scy9saWJ4bC9saWJ4bF9uaWMuYyBiL3Rvb2xzL2xp YnhsL2xpYnhsX25pYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmMTgz NGYKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9saWJ4bC9saWJ4bF9uaWMuYwpAQCAtMCwwICsx LDU1NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiAgICAgIFNVU0UgTGludXggR21iSAor ICogQXV0aG9yIEp1ZXJnZW4gR3Jvc3MgPGpncm9zc0BzdXNlLmNvbT4KKyAqCisgKiBUaGlzIHBy b2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1v ZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVi bGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCisgKiBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0 aW9uOyB2ZXJzaW9uIDIuMSBvbmx5LiB3aXRoIHRoZSBzcGVjaWFsCisgKiBleGNlcHRpb24gb24g bGlua2luZyBkZXNjcmliZWQgaW4gZmlsZSBMSUNFTlNFLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBp cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0 IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg b2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T RS4gIFNlZSB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y ZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlICJsaWJ4bF9vc2RlcHMuaCIKKworI2luY2x1ZGUg ImxpYnhsX2ludGVybmFsLmgiCisKK2ludCBsaWJ4bF9tYWNfdG9fZGV2aWNlX25pYyhsaWJ4bF9j dHggKmN0eCwgdWludDMyX3QgZG9taWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u c3QgY2hhciAqbWFjLCBsaWJ4bF9kZXZpY2VfbmljICpuaWMpCit7CisgICAgbGlieGxfZGV2aWNl X25pYyAqbmljczsKKyAgICBpbnQgbmIsIHJjLCBpOworICAgIGxpYnhsX21hYyBtYWNfbjsKKwor ICAgIHJjID0gbGlieGxfX3BhcnNlX21hYyhtYWMsIG1hY19uKTsKKyAgICBpZiAocmMpCisgICAg ICAgIHJldHVybiByYzsKKworICAgIG5pY3MgPSBsaWJ4bF9kZXZpY2VfbmljX2xpc3QoY3R4LCBk b21pZCwgJm5iKTsKKyAgICBpZiAoIW5pY3MpCisgICAgICAgIHJldHVybiBFUlJPUl9GQUlMOwor CisgICAgbWVtc2V0KG5pYywgMCwgc2l6ZW9mIChsaWJ4bF9kZXZpY2VfbmljKSk7CisKKyAgICBy YyA9IEVSUk9SX0lOVkFMOworICAgIGZvciAoaSA9IDA7IGkgPCBuYjsgKytpKSB7CisgICAgICAg IGlmICghbGlieGxfX2NvbXBhcmVfbWFjcygmbWFjX24sICZuaWNzW2ldLm1hYykpIHsKKyAgICAg ICAgICAgICpuaWMgPSBuaWNzW2ldOworICAgICAgICAgICAgcmMgPSAwOworICAgICAgICAgICAg aSsrOyAvKiBEbyBub3QgZGlzcG9zZSB0aGlzIE5JQyBvbiBleGl0IHBhdGggKi8KKyAgICAgICAg ICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGxpYnhsX2RldmljZV9uaWNfZGlzcG9zZSgm bmljc1tpXSk7CisgICAgfQorCisgICAgZm9yICg7IGk8bmI7IGkrKykKKyAgICAgICAgbGlieGxf ZGV2aWNlX25pY19kaXNwb3NlKCZuaWNzW2ldKTsKKworICAgIGZyZWUobmljcyk7CisgICAgcmV0 dXJuIHJjOworfQorCitpbnQgbGlieGxfX2RldmljZV9uaWNfc2V0ZGVmYXVsdChsaWJ4bF9fZ2Mg KmdjLCBsaWJ4bF9kZXZpY2VfbmljICpuaWMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB1aW50MzJfdCBkb21pZCwgYm9vbCBob3RwbHVnKQoreworICAgIGludCByYzsKKworICAg IGlmICghbmljLT5tdHUpCisgICAgICAgIG5pYy0+bXR1ID0gMTQ5MjsKKyAgICBpZiAoIW5pYy0+ bW9kZWwpIHsKKyAgICAgICAgbmljLT5tb2RlbCA9IHN0cmR1cCgicnRsODEzOSIpOworICAgICAg ICBpZiAoIW5pYy0+bW9kZWwpIHJldHVybiBFUlJPUl9OT01FTTsKKyAgICB9CisgICAgaWYgKGxp YnhsX19tYWNfaXNfZGVmYXVsdCgmbmljLT5tYWMpKSB7CisgICAgICAgIGNvbnN0IHVpbnQ4X3Qg KnI7CisgICAgICAgIGxpYnhsX3V1aWQgdXVpZDsKKworICAgICAgICBsaWJ4bF91dWlkX2dlbmVy YXRlKCZ1dWlkKTsKKyAgICAgICAgciA9IGxpYnhsX3V1aWRfYnl0ZWFycmF5KCZ1dWlkKTsKKwor ICAgICAgICBuaWMtPm1hY1swXSA9IDB4MDA7CisgICAgICAgIG5pYy0+bWFjWzFdID0gMHgxNjsK KyAgICAgICAgbmljLT5tYWNbMl0gPSAweDNlOworICAgICAgICBuaWMtPm1hY1szXSA9IHJbMF0g JiAweDdmOworICAgICAgICBuaWMtPm1hY1s0XSA9IHJbMV07CisgICAgICAgIG5pYy0+bWFjWzVd ID0gclsyXTsKKyAgICB9CisgICAgaWYgKCFuaWMtPmJyaWRnZSkgeworICAgICAgICBuaWMtPmJy aWRnZSA9IHN0cmR1cCgieGVuYnIwIik7CisgICAgICAgIGlmICghbmljLT5icmlkZ2UpIHJldHVy biBFUlJPUl9OT01FTTsKKyAgICB9CisgICAgaWYgKCAhbmljLT5zY3JpcHQgJiYgYXNwcmludGYo Jm5pYy0+c2NyaXB0LCAiJXMvdmlmLWJyaWRnZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgbGlieGxfX3hlbl9zY3JpcHRfZGlyX3BhdGgoKSkgPCAwICkKKyAgICAgICAgcmV0 dXJuIEVSUk9SX0ZBSUw7CisKKyAgICByYyA9IGxpYnhsX19yZXNvbHZlX2RvbWlkKGdjLCBuaWMt PmJhY2tlbmRfZG9tbmFtZSwgJm5pYy0+YmFja2VuZF9kb21pZCk7CisgICAgaWYgKHJjIDwgMCkg cmV0dXJuIHJjOworCisgICAgc3dpdGNoIChsaWJ4bF9fZG9tYWluX3R5cGUoZ2MsIGRvbWlkKSkg eworICAgIGNhc2UgTElCWExfRE9NQUlOX1RZUEVfSFZNOgorICAgICAgICBpZiAoIW5pYy0+bmlj dHlwZSkgeworICAgICAgICAgICAgaWYgKGhvdHBsdWcgfHwKKyAgICAgICAgICAgICAgICAobGli eGxfX2RldmljZV9tb2RlbF92ZXJzaW9uX3J1bm5pbmcoZ2MsIGRvbWlkKSA9PQorICAgICAgICAg ICAgICAgICBMSUJYTF9ERVZJQ0VfTU9ERUxfVkVSU0lPTl9OT05FKSkKKyAgICAgICAgICAgICAg ICBuaWMtPm5pY3R5cGUgPSBMSUJYTF9OSUNfVFlQRV9WSUY7CisgICAgICAgICAgICBlbHNlCisg ICAgICAgICAgICAgICAgbmljLT5uaWN0eXBlID0gTElCWExfTklDX1RZUEVfVklGX0lPRU1VOwor ICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTElCWExfRE9NQUlOX1RZUEVfUFY6 CisgICAgICAgIGlmIChuaWMtPm5pY3R5cGUgPT0gTElCWExfTklDX1RZUEVfVklGX0lPRU1VKSB7 CisgICAgICAgICAgICBMT0coRVJST1IsICJ0cnlpbmcgdG8gY3JlYXRlIFBWIGd1ZXN0IHdpdGgg YW4gZW11bGF0ZWQgaW50ZXJmYWNlIik7CisgICAgICAgICAgICByZXR1cm4gRVJST1JfSU5WQUw7 CisgICAgICAgIH0KKyAgICAgICAgbmljLT5uaWN0eXBlID0gTElCWExfTklDX1RZUEVfVklGOwor ICAgICAgICBicmVhazsKKyAgICBjYXNlIExJQlhMX0RPTUFJTl9UWVBFX0lOVkFMSUQ6CisgICAg ICAgIHJldHVybiBFUlJPUl9GQUlMOworICAgIGRlZmF1bHQ6CisgICAgICAgIGFib3J0KCk7Cisg ICAgfQorCisgICAgcmV0dXJuIHJjOworfQorCitzdGF0aWMgaW50IGxpYnhsX19kZXZpY2VfZnJv bV9uaWMobGlieGxfX2djICpnYywgdWludDMyX3QgZG9taWQsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgbGlieGxfZGV2aWNlX25pYyAqbmljLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGxpYnhsX19kZXZpY2UgKmRldmljZSkKK3sKKyAgICBkZXZpY2UtPmJh Y2tlbmRfZGV2aWQgICAgPSBuaWMtPmRldmlkOworICAgIGRldmljZS0+YmFja2VuZF9kb21pZCAg ICA9IG5pYy0+YmFja2VuZF9kb21pZDsKKyAgICBkZXZpY2UtPmJhY2tlbmRfa2luZCAgICAgPSBM SUJYTF9fREVWSUNFX0tJTkRfVklGOworICAgIGRldmljZS0+ZGV2aWQgICAgICAgICAgICA9IG5p Yy0+ZGV2aWQ7CisgICAgZGV2aWNlLT5kb21pZCAgICAgICAgICAgID0gZG9taWQ7CisgICAgZGV2 aWNlLT5raW5kICAgICAgICAgICAgID0gTElCWExfX0RFVklDRV9LSU5EX1ZJRjsKKworICAgIHJl dHVybiAwOworfQorCitzdGF0aWMgdm9pZCBsaWJ4bF9fdXBkYXRlX2NvbmZpZ19uaWMobGlieGxf X2djICpnYywgbGlieGxfZGV2aWNlX25pYyAqZHN0LAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGNvbnN0IGxpYnhsX2RldmljZV9uaWMgKnNyYykKK3sKKyAgICBkc3QtPmRl dmlkID0gc3JjLT5kZXZpZDsKKyAgICBkc3QtPm5pY3R5cGUgPSBzcmMtPm5pY3R5cGU7CisgICAg bGlieGxfbWFjX2NvcHkoQ1RYLCAmZHN0LT5tYWMsICZzcmMtPm1hYyk7Cit9CisKK3N0YXRpYyB2 b2lkIGxpYnhsX19kZXZpY2VfbmljX2FkZChsaWJ4bF9fZWdjICplZ2MsIHVpbnQzMl90IGRvbWlk LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX2RldmljZV9uaWMgKm5p YywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJ4bF9fYW9fZGV2aWNlICph b2RldikKK3sKKyAgICBTVEFURV9BT19HQyhhb2Rldi0+YW8pOworICAgIGZsZXhhcnJheV90ICpm cm9udDsKKyAgICBmbGV4YXJyYXlfdCAqYmFjazsKKyAgICBsaWJ4bF9fZGV2aWNlICpkZXZpY2U7 CisgICAgaW50IHJjOworICAgIHhzX3RyYW5zYWN0aW9uX3QgdCA9IFhCVF9OVUxMOworICAgIGxp YnhsX2RvbWFpbl9jb25maWcgZF9jb25maWc7CisgICAgbGlieGxfZGV2aWNlX25pYyBuaWNfc2F2 ZWQ7CisgICAgbGlieGxfX2RvbWFpbl91c2VyZGF0YV9sb2NrICpsb2NrID0gTlVMTDsKKworICAg IGxpYnhsX2RvbWFpbl9jb25maWdfaW5pdCgmZF9jb25maWcpOworICAgIGxpYnhsX2RldmljZV9u aWNfaW5pdCgmbmljX3NhdmVkKTsKKyAgICBsaWJ4bF9kZXZpY2VfbmljX2NvcHkoQ1RYLCAmbmlj X3NhdmVkLCBuaWMpOworCisgICAgcmMgPSBsaWJ4bF9fZGV2aWNlX25pY19zZXRkZWZhdWx0KGdj LCBuaWMsIGRvbWlkLCBhb2Rldi0+dXBkYXRlX2pzb24pOworICAgIGlmIChyYykgZ290byBvdXQ7 CisKKyAgICBmcm9udCA9IGZsZXhhcnJheV9tYWtlKGdjLCAxNiwgMSk7CisgICAgYmFjayA9IGZs ZXhhcnJheV9tYWtlKGdjLCAxOCwgMSk7CisKKyAgICBpZiAobmljLT5kZXZpZCA9PSAtMSkgewor ICAgICAgICBpZiAoKG5pYy0+ZGV2aWQgPSBsaWJ4bF9fZGV2aWNlX25leHRpZChnYywgZG9taWQs ICJ2aWYiKSkgPCAwKSB7CisgICAgICAgICAgICByYyA9IEVSUk9SX0ZBSUw7CisgICAgICAgICAg ICBnb3RvIG91dDsKKyAgICAgICAgfQorICAgIH0KKworICAgIGxpYnhsX191cGRhdGVfY29uZmln X25pYyhnYywgJm5pY19zYXZlZCwgbmljKTsKKworICAgIEdDTkVXKGRldmljZSk7CisgICAgcmMg PSBsaWJ4bF9fZGV2aWNlX2Zyb21fbmljKGdjLCBkb21pZCwgbmljLCBkZXZpY2UpOworICAgIGlm ICggcmMgIT0gMCApIGdvdG8gb3V0OworCisgICAgZmxleGFycmF5X2FwcGVuZChiYWNrLCAiZnJv bnRlbmQtaWQiKTsKKyAgICBmbGV4YXJyYXlfYXBwZW5kKGJhY2ssIEdDU1BSSU5URigiJWQiLCBk b21pZCkpOworICAgIGZsZXhhcnJheV9hcHBlbmQoYmFjaywgIm9ubGluZSIpOworICAgIGZsZXhh cnJheV9hcHBlbmQoYmFjaywgIjEiKTsKKyAgICBmbGV4YXJyYXlfYXBwZW5kKGJhY2ssICJzdGF0 ZSIpOworICAgIGZsZXhhcnJheV9hcHBlbmQoYmFjaywgR0NTUFJJTlRGKCIlZCIsIFhlbmJ1c1N0 YXRlSW5pdGlhbGlzaW5nKSk7CisgICAgaWYgKG5pYy0+c2NyaXB0KQorICAgICAgICBmbGV4YXJy YXlfYXBwZW5kX3BhaXIoYmFjaywgInNjcmlwdCIsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBsaWJ4bF9fYWJzX3BhdGgoZ2MsIG5pYy0+c2NyaXB0LAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX194ZW5fc2NyaXB0X2Rpcl9wYXRoKCkp KTsKKworICAgIGlmIChuaWMtPmlmbmFtZSkgeworICAgICAgICBmbGV4YXJyYXlfYXBwZW5kKGJh Y2ssICJ2aWZuYW1lIik7CisgICAgICAgIGZsZXhhcnJheV9hcHBlbmQoYmFjaywgbmljLT5pZm5h bWUpOworICAgIH0KKworICAgIGlmIChuaWMtPmNvbG9mdF9mb3J3YXJkZGV2KSB7CisgICAgICAg IGZsZXhhcnJheV9hcHBlbmQoYmFjaywgImZvcndhcmRkZXYiKTsKKyAgICAgICAgZmxleGFycmF5 X2FwcGVuZChiYWNrLCBuaWMtPmNvbG9mdF9mb3J3YXJkZGV2KTsKKyAgICB9CisKKyAgICBmbGV4 YXJyYXlfYXBwZW5kKGJhY2ssICJtYWMiKTsKKyAgICBmbGV4YXJyYXlfYXBwZW5kKGJhY2ssR0NT UFJJTlRGKExJQlhMX01BQ19GTVQsIExJQlhMX01BQ19CWVRFUyhuaWMtPm1hYykpKTsKKyAgICBp ZiAobmljLT5pcCkgeworICAgICAgICBmbGV4YXJyYXlfYXBwZW5kKGJhY2ssICJpcCIpOworICAg ICAgICBmbGV4YXJyYXlfYXBwZW5kKGJhY2ssIGxpYnhsX19zdHJkdXAoZ2MsIG5pYy0+aXApKTsK KyAgICB9CisgICAgaWYgKG5pYy0+Z2F0ZXdheWRldikgeworICAgICAgICBmbGV4YXJyYXlfYXBw ZW5kKGJhY2ssICJnYXRld2F5ZGV2Iik7CisgICAgICAgIGZsZXhhcnJheV9hcHBlbmQoYmFjaywg bGlieGxfX3N0cmR1cChnYywgbmljLT5nYXRld2F5ZGV2KSk7CisgICAgfQorCisgICAgaWYgKG5p Yy0+cmF0ZV9pbnRlcnZhbF91c2VjcyA+IDApIHsKKyAgICAgICAgZmxleGFycmF5X2FwcGVuZChi YWNrLCAicmF0ZSIpOworICAgICAgICBmbGV4YXJyYXlfYXBwZW5kKGJhY2ssIEdDU1BSSU5URigi JSJQUkl1NjQiLCUiUFJJdTMyIiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmljLT5y YXRlX2J5dGVzX3Blcl9pbnRlcnZhbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBuaWMt PnJhdGVfaW50ZXJ2YWxfdXNlY3MpKTsKKyAgICB9CisKKyAgICBmbGV4YXJyYXlfYXBwZW5kKGJh Y2ssICJicmlkZ2UiKTsKKyAgICBmbGV4YXJyYXlfYXBwZW5kKGJhY2ssIGxpYnhsX19zdHJkdXAo Z2MsIG5pYy0+YnJpZGdlKSk7CisgICAgZmxleGFycmF5X2FwcGVuZChiYWNrLCAiaGFuZGxlIik7 CisgICAgZmxleGFycmF5X2FwcGVuZChiYWNrLCBHQ1NQUklOVEYoIiVkIiwgbmljLT5kZXZpZCkp OworICAgIGZsZXhhcnJheV9hcHBlbmQoYmFjaywgInR5cGUiKTsKKyAgICBmbGV4YXJyYXlfYXBw ZW5kKGJhY2ssIGxpYnhsX19zdHJkdXAoZ2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgbGlieGxfbmljX3R5cGVfdG9fc3RyaW5nKG5pYy0+bmljdHlwZSkpKTsKKworICAg IGZsZXhhcnJheV9hcHBlbmQoZnJvbnQsICJiYWNrZW5kLWlkIik7CisgICAgZmxleGFycmF5X2Fw cGVuZChmcm9udCwgR0NTUFJJTlRGKCIlZCIsIG5pYy0+YmFja2VuZF9kb21pZCkpOworICAgIGZs ZXhhcnJheV9hcHBlbmQoZnJvbnQsICJzdGF0ZSIpOworICAgIGZsZXhhcnJheV9hcHBlbmQoZnJv bnQsIEdDU1BSSU5URigiJWQiLCBYZW5idXNTdGF0ZUluaXRpYWxpc2luZykpOworICAgIGZsZXhh cnJheV9hcHBlbmQoZnJvbnQsICJoYW5kbGUiKTsKKyAgICBmbGV4YXJyYXlfYXBwZW5kKGZyb250 LCBHQ1NQUklOVEYoIiVkIiwgbmljLT5kZXZpZCkpOworICAgIGZsZXhhcnJheV9hcHBlbmQoZnJv bnQsICJtYWMiKTsKKyAgICBmbGV4YXJyYXlfYXBwZW5kKGZyb250LCBHQ1NQUklOVEYoCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMSUJYTF9NQUNfRk1ULCBMSUJYTF9NQUNf QllURVMobmljLT5tYWMpKSk7CisKKyAgICBpZiAoYW9kZXYtPnVwZGF0ZV9qc29uKSB7CisgICAg ICAgIGxvY2sgPSBsaWJ4bF9fbG9ja19kb21haW5fdXNlcmRhdGEoZ2MsIGRvbWlkKTsKKyAgICAg ICAgaWYgKCFsb2NrKSB7CisgICAgICAgICAgICByYyA9IEVSUk9SX0xPQ0tfRkFJTDsKKyAgICAg ICAgICAgIGdvdG8gb3V0OworICAgICAgICB9CisKKyAgICAgICAgcmMgPSBsaWJ4bF9fZ2V0X2Rv bWFpbl9jb25maWd1cmF0aW9uKGdjLCBkb21pZCwgJmRfY29uZmlnKTsKKyAgICAgICAgaWYgKHJj KSBnb3RvIG91dDsKKworICAgICAgICBERVZJQ0VfQUREKG5pYywgbmljcywgZG9taWQsICZuaWNf c2F2ZWQsIENPTVBBUkVfREVWSUQsICZkX2NvbmZpZyk7CisKKyAgICAgICAgcmMgPSBsaWJ4bF9f ZG1fY2hlY2tfc3RhcnQoZ2MsICZkX2NvbmZpZywgZG9taWQpOworICAgICAgICBpZiAocmMpIGdv dG8gb3V0OworICAgIH0KKworICAgIGZvciAoOzspIHsKKyAgICAgICAgcmMgPSBsaWJ4bF9feHNf dHJhbnNhY3Rpb25fc3RhcnQoZ2MsICZ0KTsKKyAgICAgICAgaWYgKHJjKSBnb3RvIG91dDsKKwor ICAgICAgICByYyA9IGxpYnhsX19kZXZpY2VfZXhpc3RzKGdjLCB0LCBkZXZpY2UpOworICAgICAg ICBpZiAocmMgPCAwKSBnb3RvIG91dDsKKyAgICAgICAgaWYgKHJjID09IDEpIHsgICAgICAgICAg ICAgIC8qIGFscmVhZHkgZXhpc3RzIGluIHhlbnN0b3JlICovCisgICAgICAgICAgICBMT0coRVJS T1IsICJkZXZpY2UgYWxyZWFkeSBleGlzdHMgaW4geGVuc3RvcmUiKTsKKyAgICAgICAgICAgIGFv ZGV2LT5hY3Rpb24gPSBMSUJYTF9fREVWSUNFX0FDVElPTl9BREQ7IC8qIGZvciBlcnJvciBtZXNz YWdlICovCisgICAgICAgICAgICByYyA9IEVSUk9SX0RFVklDRV9FWElTVFM7CisgICAgICAgICAg ICBnb3RvIG91dDsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChhb2Rldi0+dXBkYXRlX2pzb24p IHsKKyAgICAgICAgICAgIHJjID0gbGlieGxfX3NldF9kb21haW5fY29uZmlndXJhdGlvbihnYywg ZG9taWQsICZkX2NvbmZpZyk7CisgICAgICAgICAgICBpZiAocmMpIGdvdG8gb3V0OworICAgICAg ICB9CisKKyAgICAgICAgbGlieGxfX2RldmljZV9nZW5lcmljX2FkZChnYywgdCwgZGV2aWNlLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX194c19rdnNfb2ZfZmxleGFy cmF5KGdjLCBiYWNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGJhY2stPmNvdW50KSwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBsaWJ4bF9feHNfa3ZzX29mX2ZsZXhhcnJheShnYywgZnJvbnQsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJv bnQtPmNvdW50KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsKKwor ICAgICAgICByYyA9IGxpYnhsX194c190cmFuc2FjdGlvbl9jb21taXQoZ2MsICZ0KTsKKyAgICAg ICAgaWYgKCFyYykgYnJlYWs7CisgICAgICAgIGlmIChyYyA8IDApIGdvdG8gb3V0OworICAgIH0K KworICAgIGFvZGV2LT5kZXYgPSBkZXZpY2U7CisgICAgYW9kZXYtPmFjdGlvbiA9IExJQlhMX19E RVZJQ0VfQUNUSU9OX0FERDsKKyAgICBsaWJ4bF9fd2FpdF9kZXZpY2VfY29ubmVjdGlvbihlZ2Ms IGFvZGV2KTsKKworICAgIHJjID0gMDsKK291dDoKKyAgICBsaWJ4bF9feHNfdHJhbnNhY3Rpb25f YWJvcnQoZ2MsICZ0KTsKKyAgICBpZiAobG9jaykgbGlieGxfX3VubG9ja19kb21haW5fdXNlcmRh dGEobG9jayk7CisgICAgbGlieGxfZGV2aWNlX25pY19kaXNwb3NlKCZuaWNfc2F2ZWQpOworICAg IGxpYnhsX2RvbWFpbl9jb25maWdfZGlzcG9zZSgmZF9jb25maWcpOworICAgIGFvZGV2LT5yYyA9 IHJjOworICAgIGlmIChyYykgYW9kZXYtPmNhbGxiYWNrKGVnYywgYW9kZXYpOworICAgIHJldHVy bjsKK30KKworc3RhdGljIGludCBsaWJ4bF9fZGV2aWNlX25pY19mcm9tX3hlbnN0b3JlKGxpYnhs X19nYyAqZ2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u c3QgY2hhciAqbGlieGxfcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBsaWJ4bF9kZXZpY2VfbmljICpuaWMpCit7CisgICAgY29uc3QgY2hhciAqdG1wOwor ICAgIGludCByYzsKKworICAgIGxpYnhsX2RldmljZV9uaWNfaW5pdChuaWMpOworCisgICAgcmMg PSBsaWJ4bF9feHNfcmVhZF9jaGVja2VkKGdjLCBYQlRfTlVMTCwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgR0NTUFJJTlRGKCIlcy9oYW5kbGUiLCBsaWJ4bF9wYXRoKSwgJnRtcCk7 CisgICAgaWYgKHJjKSBnb3RvIG91dDsKKyAgICBpZiAodG1wKQorICAgICAgICBuaWMtPmRldmlk ID0gYXRvaSh0bXApOworICAgIGVsc2UKKyAgICAgICAgbmljLT5kZXZpZCA9IDA7CisKKyAgICAv KiBuaWMtPm10dSA9ICovCisKKyAgICByYyA9IGxpYnhsX194c19yZWFkX2NoZWNrZWQoZ2MsIFhC VF9OVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQ1NQUklOVEYoIiVzL21h YyIsIGxpYnhsX3BhdGgpLCAmdG1wKTsKKyAgICBpZiAocmMpIGdvdG8gb3V0OworICAgIGlmICh0 bXApIHsKKyAgICAgICAgcmMgPSBsaWJ4bF9fcGFyc2VfbWFjKHRtcCwgbmljLT5tYWMpOworICAg ICAgICBpZiAocmMpIGdvdG8gb3V0OworICAgIH0gZWxzZSB7CisgICAgICAgIG1lbXNldChuaWMt Pm1hYywgMCwgc2l6ZW9mKG5pYy0+bWFjKSk7CisgICAgfQorCisgICAgcmMgPSBsaWJ4bF9feHNf cmVhZF9jaGVja2VkKGdjLCBYQlRfTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgR0NTUFJJTlRGKCIlcy9pcCIsIGxpYnhsX3BhdGgpLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAoY29uc3QgY2hhciAqKikoJm5pYy0+aXApKTsKKyAgICBpZiAocmMpIGdvdG8g b3V0OworICAgIHJjID0gbGlieGxfX3hzX3JlYWRfY2hlY2tlZChnYywgWEJUX05VTEwsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDU1BSSU5URigiJXMvYnJpZGdlIiwgbGlieGxf cGF0aCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCBjaGFyICoqKSgm bmljLT5icmlkZ2UpKTsKKyAgICBpZiAocmMpIGdvdG8gb3V0OworICAgIHJjID0gbGlieGxfX3hz X3JlYWRfY2hlY2tlZChnYywgWEJUX05VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIEdDU1BSSU5URigiJXMvc2NyaXB0IiwgbGlieGxfcGF0aCksCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIChjb25zdCBjaGFyICoqKSgmbmljLT5zY3JpcHQpKTsKKyAgICBpZiAo cmMpIGdvdG8gb3V0OworICAgIHJjID0gbGlieGxfX3hzX3JlYWRfY2hlY2tlZChnYywgWEJUX05V TEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDU1BSSU5URigiJXMvZm9yd2Fy ZGRldiIsIGxpYnhsX3BhdGgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29u c3QgY2hhciAqKikoJm5pYy0+Y29sb2Z0X2ZvcndhcmRkZXYpKTsKKyAgICBpZiAocmMpIGdvdG8g b3V0OworCisgICAgLyogdmlmX2lvZW11IG5pY3MgdXNlIHRoZSBzYW1lIHhlbnN0b3JlIGVudHJp ZXMgYXMgdmlmIGludGVyZmFjZXMgKi8KKyAgICByYyA9IGxpYnhsX194c19yZWFkX2NoZWNrZWQo Z2MsIFhCVF9OVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQ1NQUklOVEYo IiVzL3R5cGUiLCBsaWJ4bF9wYXRoKSwgJnRtcCk7CisgICAgaWYgKHJjKSBnb3RvIG91dDsKKyAg ICBpZiAodG1wKSB7CisgICAgICAgIHJjID0gbGlieGxfbmljX3R5cGVfZnJvbV9zdHJpbmcodG1w LCAmbmljLT5uaWN0eXBlKTsKKyAgICAgICAgaWYgKHJjKSBnb3RvIG91dDsKKyAgICB9IGVsc2Ug eworICAgICAgICBuaWMtPm5pY3R5cGUgPSBMSUJYTF9OSUNfVFlQRV9WSUY7CisgICAgfQorICAg IG5pYy0+bW9kZWwgPSBOVUxMOyAvKiBYWFggT25seSBmb3IgVFlQRV9JT0VNVSAqLworICAgIG5p Yy0+aWZuYW1lID0gTlVMTDsgLyogWFhYIE9ubHkgZm9yIFRZUEVfSU9FTVUgKi8KKworICAgIHJj ID0gMDsKKyBvdXQ6CisgICAgcmV0dXJuIHJjOworfQorCitpbnQgbGlieGxfZGV2aWRfdG9fZGV2 aWNlX25pYyhsaWJ4bF9jdHggKmN0eCwgdWludDMyX3QgZG9taWQsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBpbnQgZGV2aWQsIGxpYnhsX2RldmljZV9uaWMgKm5pYykKK3sKKyAgICBH Q19JTklUKGN0eCk7CisgICAgY2hhciAqbGlieGxfZG9tX3BhdGgsICpsaWJ4bF9wYXRoOworICAg IGludCByYyA9IEVSUk9SX0ZBSUw7CisKKyAgICBsaWJ4bF9kZXZpY2VfbmljX2luaXQobmljKTsK KyAgICBsaWJ4bF9kb21fcGF0aCA9IGxpYnhsX194c19saWJ4bF9wYXRoKGdjLCBkb21pZCk7Cisg ICAgaWYgKCFsaWJ4bF9kb21fcGF0aCkKKyAgICAgICAgZ290byBvdXQ7CisKKyAgICBsaWJ4bF9w YXRoID0gR0NTUFJJTlRGKCIlcy9kZXZpY2UvdmlmLyVkIiwgbGlieGxfZG9tX3BhdGgsIGRldmlk KTsKKworICAgIHJjID0gbGlieGxfX2RldmljZV9uaWNfZnJvbV94ZW5zdG9yZShnYywgbGlieGxf cGF0aCwgbmljKTsKKyAgICBpZiAocmMpIGdvdG8gb3V0OworCisgICAgcmMgPSAwOworb3V0Ogor ICAgIEdDX0ZSRUU7CisgICAgcmV0dXJuIHJjOworfQorCitzdGF0aWMgaW50IGxpYnhsX19hcHBl bmRfbmljX2xpc3QobGlieGxfX2djICpnYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB1aW50MzJfdCBkb21pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBsaWJ4bF9kZXZpY2VfbmljICoqbmljcywKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKm5uaWNzKQoreworICAgIGNoYXIgKmxp YnhsX2Rpcl9wYXRoID0gTlVMTDsKKyAgICBjaGFyICoqZGlyID0gTlVMTDsKKyAgICB1bnNpZ25l ZCBpbnQgbiA9IDA7CisgICAgbGlieGxfZGV2aWNlX25pYyAqcG5pYyA9IE5VTEwsICpwbmljX2Vu ZCA9IE5VTEw7CisgICAgaW50IHJjOworCisgICAgbGlieGxfZGlyX3BhdGggPSBHQ1NQUklOVEYo IiVzL2RldmljZS92aWYiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX194 c19saWJ4bF9wYXRoKGdjLCBkb21pZCkpOworICAgIGRpciA9IGxpYnhsX194c19kaXJlY3Rvcnko Z2MsIFhCVF9OVUxMLCBsaWJ4bF9kaXJfcGF0aCwgJm4pOworICAgIGlmIChkaXIgJiYgbikgewor ICAgICAgICBsaWJ4bF9kZXZpY2VfbmljICp0bXA7CisgICAgICAgIHRtcCA9IHJlYWxsb2MoKm5p Y3MsIHNpemVvZiAobGlieGxfZGV2aWNlX25pYykgKiAoKm5uaWNzICsgbikpOworICAgICAgICBp ZiAodG1wID09IE5VTEwpCisgICAgICAgICAgICByZXR1cm4gRVJST1JfTk9NRU07CisgICAgICAg ICpuaWNzID0gdG1wOworICAgICAgICBwbmljID0gKm5pY3MgKyAqbm5pY3M7CisgICAgICAgIHBu aWNfZW5kID0gKm5pY3MgKyAqbm5pY3MgKyBuOworICAgICAgICBmb3IgKDsgcG5pYyA8IHBuaWNf ZW5kOyBwbmljKyssIGRpcisrKSB7CisgICAgICAgICAgICBjb25zdCBjaGFyICpwOworICAgICAg ICAgICAgcCA9IEdDU1BSSU5URigiJXMvJXMiLCBsaWJ4bF9kaXJfcGF0aCwgKmRpcik7CisgICAg ICAgICAgICByYyA9IGxpYnhsX19kZXZpY2VfbmljX2Zyb21feGVuc3RvcmUoZ2MsIHAsIHBuaWMp OworICAgICAgICAgICAgaWYgKHJjKSBnb3RvIG91dDsKKyAgICAgICAgfQorICAgICAgICAqbm5p Y3MgKz0gbjsKKyAgICB9CisgICAgcmV0dXJuIDA7CisKKyBvdXQ6CisgICAgcmV0dXJuIHJjOwor fQorCitsaWJ4bF9kZXZpY2VfbmljICpsaWJ4bF9kZXZpY2VfbmljX2xpc3QobGlieGxfY3R4ICpj dHgsIHVpbnQzMl90IGRvbWlkLCBpbnQgKm51bSkKK3sKKyAgICBHQ19JTklUKGN0eCk7CisgICAg bGlieGxfZGV2aWNlX25pYyAqbmljcyA9IE5VTEw7CisgICAgaW50IHJjOworCisgICAgKm51bSA9 IDA7CisKKyAgICByYyA9IGxpYnhsX19hcHBlbmRfbmljX2xpc3QoZ2MsIGRvbWlkLCAmbmljcywg bnVtKTsKKyAgICBpZiAocmMpIGdvdG8gb3V0X2VycjsKKworICAgIEdDX0ZSRUU7CisgICAgcmV0 dXJuIG5pY3M7CisKK291dF9lcnI6CisgICAgTE9HKEVSUk9SLCAiVW5hYmxlIHRvIGxpc3Qgbmlj cyIpOworICAgIHdoaWxlICgqbnVtKSB7CisgICAgICAgICgqbnVtKS0tOworICAgICAgICBsaWJ4 bF9kZXZpY2VfbmljX2Rpc3Bvc2UoJm5pY3NbKm51bV0pOworICAgIH0KKyAgICBmcmVlKG5pY3Mp OworICAgIHJldHVybiBOVUxMOworfQorCitpbnQgbGlieGxfZGV2aWNlX25pY19nZXRpbmZvKGxp YnhsX2N0eCAqY3R4LCB1aW50MzJfdCBkb21pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGxpYnhsX2RldmljZV9uaWMgKm5pYywgbGlieGxfbmljaW5mbyAqbmljaW5mbykKK3sKKyAg ICBHQ19JTklUKGN0eCk7CisgICAgY2hhciAqZG9tcGF0aCwgKm5pY3BhdGgsICpsaWJ4bF9wYXRo OworICAgIGNoYXIgKnZhbDsKKyAgICBpbnQgcmM7CisKKyAgICBkb21wYXRoID0gbGlieGxfX3hz X2dldF9kb21wYXRoKGdjLCBkb21pZCk7CisgICAgbmljaW5mby0+ZGV2aWQgPSBuaWMtPmRldmlk OworCisgICAgbmljcGF0aCA9IEdDU1BSSU5URigiJXMvZGV2aWNlL3ZpZi8lZCIsIGRvbXBhdGgs IG5pY2luZm8tPmRldmlkKTsKKyAgICBsaWJ4bF9wYXRoID0gR0NTUFJJTlRGKCIlcy9kZXZpY2Uv dmlmLyVkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX194c19saWJ4bF9wYXRo KGdjLCBkb21pZCksIG5pY2luZm8tPmRldmlkKTsKKyAgICBuaWNpbmZvLT5iYWNrZW5kID0geHNf cmVhZChjdHgtPnhzaCwgWEJUX05VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IEdDU1BSSU5URigiJXMvYmFja2VuZCIsIGxpYnhsX3BhdGgpLCBOVUxMKTsKKyAgICBpZiAoIW5p Y2luZm8tPmJhY2tlbmQpIHsKKyAgICAgICAgR0NfRlJFRTsKKyAgICAgICAgcmV0dXJuIEVSUk9S X0ZBSUw7CisgICAgfQorICAgIHJjID0gbGlieGxfX2JhY2tlbmRwYXRoX3BhcnNlX2RvbWlkKGdj LCBuaWNpbmZvLT5iYWNrZW5kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICZuaWNpbmZvLT5iYWNrZW5kX2lkKTsKKyAgICBpZiAocmMpIGdvdG8gb3V0OworCisgICAg dmFsID0gbGlieGxfX3hzX3JlYWQoZ2MsIFhCVF9OVUxMLCBHQ1NQUklOVEYoIiVzL3N0YXRlIiwg bmljcGF0aCkpOworICAgIG5pY2luZm8tPnN0YXRlID0gdmFsID8gc3RydG91bCh2YWwsIE5VTEws IDEwKSA6IC0xOworICAgIHZhbCA9IGxpYnhsX194c19yZWFkKGdjLCBYQlRfTlVMTCwgR0NTUFJJ TlRGKCIlcy9ldmVudC1jaGFubmVsIiwgbmljcGF0aCkpOworICAgIG5pY2luZm8tPmV2dGNoID0g dmFsID8gc3RydG91bCh2YWwsIE5VTEwsIDEwKSA6IC0xOworICAgIHZhbCA9IGxpYnhsX194c19y ZWFkKGdjLCBYQlRfTlVMTCwgR0NTUFJJTlRGKCIlcy90eC1yaW5nLXJlZiIsIG5pY3BhdGgpKTsK KyAgICBuaWNpbmZvLT5ycmVmX3R4ID0gdmFsID8gc3RydG91bCh2YWwsIE5VTEwsIDEwKSA6IC0x OworICAgIHZhbCA9IGxpYnhsX194c19yZWFkKGdjLCBYQlRfTlVMTCwgR0NTUFJJTlRGKCIlcy9y eC1yaW5nLXJlZiIsIG5pY3BhdGgpKTsKKyAgICBuaWNpbmZvLT5ycmVmX3J4ID0gdmFsID8gc3Ry dG91bCh2YWwsIE5VTEwsIDEwKSA6IC0xOworICAgIG5pY2luZm8tPmZyb250ZW5kID0gbGlieGxf X3N0cmR1cChOT0dDLCBuaWNwYXRoKTsKKyAgICBuaWNpbmZvLT5mcm9udGVuZF9pZCA9IGRvbWlk OworCisgICAgcmMgPSAwOworIG91dDoKKyAgICBHQ19GUkVFOworICAgIHJldHVybiByYzsKK30K KworY29uc3QgY2hhciAqbGlieGxfX2RldmljZV9uaWNfZGV2bmFtZShsaWJ4bF9fZ2MgKmdjLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBkb21pZCwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgZGV2aWQsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX25pY190eXBlIHR5cGUpCit7 CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBMSUJYTF9OSUNfVFlQRV9WSUY6CisgICAg ICAgIHJldHVybiBHQ1NQUklOVEYoTkVUQkFDS19OSUNfTkFNRSwgZG9taWQsIGRldmlkKTsKKyAg ICBjYXNlIExJQlhMX05JQ19UWVBFX1ZJRl9JT0VNVToKKyAgICAgICAgcmV0dXJuIEdDU1BSSU5U RihORVRCQUNLX05JQ19OQU1FIFRBUF9ERVZJQ0VfU1VGRklYLCBkb21pZCwgZGV2aWQpOworICAg IGRlZmF1bHQ6CisgICAgICAgIGFib3J0KCk7CisgICAgfQorfQorCitzdGF0aWMgaW50IGxpYnhs X2RldmljZV9uaWNfY29tcGFyZShsaWJ4bF9kZXZpY2VfbmljICpkMSwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX2RldmljZV9uaWMgKmQyKQoreworICAgIHJldHVy biBDT01QQVJFX0RFVklEKGQxLCBkMik7Cit9CisKK3N0YXRpYyB2b2lkIGxpYnhsX2RldmljZV9u aWNfdXBkYXRlX2NvbmZpZyhsaWJ4bF9fZ2MgKmdjLCB2b2lkICpkLCB2b2lkICpzKQoreworICAg IGxpYnhsX191cGRhdGVfY29uZmlnX25pYyhnYywgZCwgcyk7Cit9CisKK2ludCBsaWJ4bF9fZGV2 aWNlX25pY19zZXRfZGV2aWRzKGxpYnhsX19nYyAqZ2MsIGxpYnhsX2RvbWFpbl9jb25maWcgKmRf Y29uZmlnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgZG9taWQp Cit7CisgICAgaW50IHJldCA9IDA7CisgICAgaW50IGk7CisgICAgc2l6ZV90IGxhc3RfZGV2aWQg PSAtMTsKKworICAgIGZvciAoaSA9IDA7IGkgPCBkX2NvbmZpZy0+bnVtX25pY3M7IGkrKykgewor ICAgICAgICAvKiBXZSBoYXZlIHRvIGluaXQgdGhlIG5pYyBoZXJlLCBiZWNhdXNlIHdlIHN0aWxs IGhhdmVuJ3QKKyAgICAgICAgICogY2FsbGVkIGxpYnhsX2RldmljZV9uaWNfYWRkIHdoZW4gZG9t Y3JlYXRlX2xhdW5jaF9kbSBnZXRzIGNhbGxlZCwKKyAgICAgICAgICogYnV0IHFlbXUgbmVlZHMg dGhlIG5pYyBpbmZvcm1hdGlvbiB0byBiZSBjb21wbGV0ZS4KKyAgICAgICAgICovCisgICAgICAg IHJldCA9IGxpYnhsX19kZXZpY2VfbmljX3NldGRlZmF1bHQoZ2MsICZkX2NvbmZpZy0+bmljc1tp XSwgZG9taWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFs c2UpOworICAgICAgICBpZiAocmV0KSB7CisgICAgICAgICAgICBMT0coRVJST1IsICJVbmFibGUg dG8gc2V0IG5pYyBkZWZhdWx0cyBmb3IgbmljICVkIiwgaSk7CisgICAgICAgICAgICBnb3RvIG91 dDsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChkX2NvbmZpZy0+bmljc1tpXS5kZXZpZCA+IGxh c3RfZGV2aWQpCisgICAgICAgICAgICBsYXN0X2RldmlkID0gZF9jb25maWctPm5pY3NbaV0uZGV2 aWQ7CisgICAgfQorICAgIGZvciAoaSA9IDA7IGkgPCBkX2NvbmZpZy0+bnVtX25pY3M7IGkrKykg eworICAgICAgICBpZiAoZF9jb25maWctPm5pY3NbaV0uZGV2aWQgPCAwKQorICAgICAgICAgICAg ZF9jb25maWctPm5pY3NbaV0uZGV2aWQgPSArK2xhc3RfZGV2aWQ7CisgICAgfQorCitvdXQ6Cisg ICAgcmV0dXJuIHJldDsKK30KKworTElCWExfREVGSU5FX0RFVklDRV9BREQobmljKQorTElCWExf REVGSU5FX0RFVklDRVNfQUREKG5pYykKK0xJQlhMX0RFRklORV9ERVZJQ0VfUkVNT1ZFKG5pYykK KworREVGSU5FX0RFVklDRV9UWVBFX1NUUlVDVChuaWMsCisgICAgLnVwZGF0ZV9jb25maWcgPSBs aWJ4bF9kZXZpY2VfbmljX3VwZGF0ZV9jb25maWcKKyk7CisKKy8qCisgKiBMb2NhbCB2YXJpYWJs ZXM6CisgKiBtb2RlOiBDCisgKiBjLWJhc2ljLW9mZnNldDogNAorICogaW5kZW50LXRhYnMtbW9k ZTogbmlsCisgKiBFbmQ6CisgKi8KZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYnhsL2xpYnhsX3V0aWxz LmMgYi90b29scy9saWJ4bC9saWJ4bF91dGlscy5jCmluZGV4IGI3NDg1NTUuLjQ5Y2JhYTUgMTAw NjQ0Ci0tLSBhL3Rvb2xzL2xpYnhsL2xpYnhsX3V0aWxzLmMKKysrIGIvdG9vbHMvbGlieGwvbGli eGxfdXRpbHMuYwpAQCAtNTk4LDQxICs1OTgsNiBAQCBpbnQgbGlieGxfcGlwZShsaWJ4bF9jdHgg KmN0eCwgaW50IHBpcGVzWzJdKQogICAgIHJldHVybiByZXQ7CiB9CiAKLWludCBsaWJ4bF9tYWNf dG9fZGV2aWNlX25pYyhsaWJ4bF9jdHggKmN0eCwgdWludDMyX3QgZG9taWQsCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqbWFjLCBsaWJ4bF9kZXZpY2VfbmljICpuaWMp Ci17Ci0gICAgbGlieGxfZGV2aWNlX25pYyAqbmljczsKLSAgICBpbnQgbmIsIHJjLCBpOwotICAg IGxpYnhsX21hYyBtYWNfbjsKLQotICAgIHJjID0gbGlieGxfX3BhcnNlX21hYyhtYWMsIG1hY19u KTsKLSAgICBpZiAocmMpCi0gICAgICAgIHJldHVybiByYzsKLQotICAgIG5pY3MgPSBsaWJ4bF9k ZXZpY2VfbmljX2xpc3QoY3R4LCBkb21pZCwgJm5iKTsKLSAgICBpZiAoIW5pY3MpCi0gICAgICAg IHJldHVybiBFUlJPUl9GQUlMOwotCi0gICAgbWVtc2V0KG5pYywgMCwgc2l6ZW9mIChsaWJ4bF9k ZXZpY2VfbmljKSk7Ci0KLSAgICByYyA9IEVSUk9SX0lOVkFMOwotICAgIGZvciAoaSA9IDA7IGkg PCBuYjsgKytpKSB7Ci0gICAgICAgIGlmICghbGlieGxfX2NvbXBhcmVfbWFjcygmbWFjX24sICZu aWNzW2ldLm1hYykpIHsKLSAgICAgICAgICAgICpuaWMgPSBuaWNzW2ldOwotICAgICAgICAgICAg cmMgPSAwOwotICAgICAgICAgICAgaSsrOyAvKiBEbyBub3QgZGlzcG9zZSB0aGlzIE5JQyBvbiBl eGl0IHBhdGggKi8KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGxpYnhs X2RldmljZV9uaWNfZGlzcG9zZSgmbmljc1tpXSk7Ci0gICAgfQotCi0gICAgZm9yICg7IGk8bmI7 IGkrKykKLSAgICAgICAgbGlieGxfZGV2aWNlX25pY19kaXNwb3NlKCZuaWNzW2ldKTsKLQotICAg IGZyZWUobmljcyk7Ci0gICAgcmV0dXJuIHJjOwotfQotCiBpbnQgbGlieGxfYml0bWFwX2FsbG9j KGxpYnhsX2N0eCAqY3R4LCBsaWJ4bF9iaXRtYXAgKmJpdG1hcCwgaW50IG5fYml0cykKIHsKICAg ICBHQ19JTklUKGN0eCk7Ci0tIAoyLjYuNgoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fClhlbi1kZXZlbCBtYWlsaW5nIGxpc3QKWGVuLWRldmVsQGxpc3Rz Lnhlbi5vcmcKaHR0cHM6Ly9saXN0cy54ZW4ub3JnL3hlbi1kZXZlbAo=