From mboxrd@z Thu Jan 1 00:00:00 1970 From: Huang Rui Subject: [PATCH 114/138] drm/amd/powerplay: implement pp_power_profile_mode sys inerface for SMU11 Date: Fri, 25 Jan 2019 18:25:21 +0800 Message-ID: <1548411945-12396-115-git-send-email-ray.huang@amd.com> References: <1548411945-12396-1-git-send-email-ray.huang@amd.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1548411945-12396-1-git-send-email-ray.huang-5C7GfCeVMHo@public.gmane.org> List-Id: Discussion list for AMD gfx List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: amd-gfx-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "amd-gfx" To: amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Cc: Likun Gao , Kevin Wang , Chengming Gui RnJvbTogQ2hlbmdtaW5nIEd1aSA8SmFjay5HdWlAYW1kLmNvbT4KCkFkZCBzZXQvZ2V0IHBvd2Vy IHByb2ZpbGUgbW9kZSBmdW5jdGlvbnMuCglBZGRlZCBkZXBlbmRlbmN5IGludGVyZmFjZXM6CgkJ MSkgdmVnYTIwX3NldF9hY3Rpdml0eV9tb25pdG9yX2NvZWZmCgkJMikgdmVnYTIwX2dldF9hY3Rp dml0eV9tb25pdG9yX2NvZWZmCgkJMykgY29udl9wb3dlcl9wcm9maWxlX3RvX3BwbGliX3dvcmts b2FkCgpTaWduZWQtb2ZmLWJ5OiBDaGVuZ21pbmcgR3VpIDxKYWNrLkd1aUBhbWQuY29tPgpSZXZp ZXdlZC1ieTogSHVhbmcgUnVpIDxyYXkuaHVhbmdAYW1kLmNvbT4KLS0tCiBkcml2ZXJzL2dwdS9k cm0vYW1kL2FtZGdwdS9hbWRncHVfcG0uYyAgICAgICAgIHwgICA5ICstCiBkcml2ZXJzL2dwdS9k cm0vYW1kL3Bvd2VycGxheS9hbWRncHVfc211LmMgICAgIHwgIDE5ICsrCiBkcml2ZXJzL2dwdS9k cm0vYW1kL3Bvd2VycGxheS9pbmMvYW1kZ3B1X3NtdS5oIHwgIDIyICsrCiBkcml2ZXJzL2dwdS9k cm0vYW1kL3Bvd2VycGxheS9zbXVfdjExXzAuYyAgICAgIHwgMjkzICsrKysrKysrKysrKysrKysr KysrKysrKysKIDQgZmlsZXMgY2hhbmdlZCwgMzQwIGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25z KC0pCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X3BtLmMg Yi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfcG0uYwppbmRleCBkNzQ4MjU2Li43 MDE1ZTAzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfcG0u YworKysgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfcG0uYwpAQCAtMTEzNiw3 ICsxMTM2LDkgQEAgc3RhdGljIHNzaXplX3QgYW1kZ3B1X2dldF9wcF9wb3dlcl9wcm9maWxlX21v ZGUoc3RydWN0IGRldmljZSAqZGV2LAogCXN0cnVjdCBkcm1fZGV2aWNlICpkZGV2ID0gZGV2X2dl dF9kcnZkYXRhKGRldik7CiAJc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYgPSBkZGV2LT5kZXZf cHJpdmF0ZTsKIAotCWlmIChhZGV2LT5wb3dlcnBsYXkucHBfZnVuY3MtPmdldF9wb3dlcl9wcm9m aWxlX21vZGUpCisJaWYgKGlzX3N1cHBvcnRfc3dfc211KGFkZXYpKQorCQlyZXR1cm4gc211X2dl dF9wb3dlcl9wcm9maWxlX21vZGUoJmFkZXYtPnNtdSwgYnVmKTsKKwllbHNlIGlmIChhZGV2LT5w b3dlcnBsYXkucHBfZnVuY3MtPmdldF9wb3dlcl9wcm9maWxlX21vZGUpCiAJCXJldHVybiBhbWRn cHVfZHBtX2dldF9wb3dlcl9wcm9maWxlX21vZGUoYWRldiwgYnVmKTsKIAogCXJldHVybiBzbnBy aW50ZihidWYsIFBBR0VfU0laRSwgIlxuIik7CkBAIC0xMTg2LDkgKzExODgsMTAgQEAgc3RhdGlj IHNzaXplX3QgYW1kZ3B1X3NldF9wcF9wb3dlcl9wcm9maWxlX21vZGUoc3RydWN0IGRldmljZSAq ZGV2LAogCQl9CiAJfQogCXBhcmFtZXRlcltwYXJhbWV0ZXJfc2l6ZV0gPSBwcm9maWxlX21vZGU7 Ci0JaWYgKGFkZXYtPnBvd2VycGxheS5wcF9mdW5jcy0+c2V0X3Bvd2VyX3Byb2ZpbGVfbW9kZSkK KwlpZiAoaXNfc3VwcG9ydF9zd19zbXUoYWRldikpCisJCXJldCA9IHNtdV9zZXRfcG93ZXJfcHJv ZmlsZV9tb2RlKCZhZGV2LT5zbXUsIHBhcmFtZXRlciwgcGFyYW1ldGVyX3NpemUpOworCWVsc2Ug aWYgKGFkZXYtPnBvd2VycGxheS5wcF9mdW5jcy0+c2V0X3Bvd2VyX3Byb2ZpbGVfbW9kZSkKIAkJ cmV0ID0gYW1kZ3B1X2RwbV9zZXRfcG93ZXJfcHJvZmlsZV9tb2RlKGFkZXYsIHBhcmFtZXRlciwg cGFyYW1ldGVyX3NpemUpOwotCiAJaWYgKCFyZXQpCiAJCXJldHVybiBjb3VudDsKIGZhaWw6CmRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1kL3Bvd2VycGxheS9hbWRncHVfc211LmMgYi9k cml2ZXJzL2dwdS9kcm0vYW1kL3Bvd2VycGxheS9hbWRncHVfc211LmMKaW5kZXggZWVkNmNiOS4u MTQ3ODhkNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2FtZC9wb3dlcnBsYXkvYW1kZ3B1 X3NtdS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvcG93ZXJwbGF5L2FtZGdwdV9zbXUuYwpA QCAtMzIzLDYgKzMyMywyNSBAQCBzdGF0aWMgaW50IHNtdV9zd19pbml0KHZvaWQgKmhhbmRsZSkK IAliaXRtYXBfemVybyhzbXUtPnNtdV9mZWF0dXJlLmVuYWJsZWQsIFNNVV9GRUFUVVJFX01BWCk7 CiAJYml0bWFwX3plcm8oc211LT5zbXVfZmVhdHVyZS5hbGxvd2VkLCBTTVVfRkVBVFVSRV9NQVgp OwogCXNtdS0+d2F0ZXJtYXJrc19iaXRtYXAgPSAwOworCXNtdS0+cG93ZXJfcHJvZmlsZV9tb2Rl ID0gUFBfU01DX1BPV0VSX1BST0ZJTEVfQk9PVFVQX0RFRkFVTFQ7CisJc211LT5kZWZhdWx0X3Bv d2VyX3Byb2ZpbGVfbW9kZSA9IFBQX1NNQ19QT1dFUl9QUk9GSUxFX0JPT1RVUF9ERUZBVUxUOwor CisJc211LT53b3JrbG9hZF9tYXNrID0gMSA8PCBzbXUtPndvcmtsb2FkX3Byb3JpdHlbUFBfU01D X1BPV0VSX1BST0ZJTEVfQk9PVFVQX0RFRkFVTFRdOworCXNtdS0+d29ya2xvYWRfcHJvcml0eVtQ UF9TTUNfUE9XRVJfUFJPRklMRV9CT09UVVBfREVGQVVMVF0gPSAwOworCXNtdS0+d29ya2xvYWRf cHJvcml0eVtQUF9TTUNfUE9XRVJfUFJPRklMRV9GVUxMU0NSRUVOM0RdID0gMTsKKwlzbXUtPndv cmtsb2FkX3Byb3JpdHlbUFBfU01DX1BPV0VSX1BST0ZJTEVfUE9XRVJTQVZJTkddID0gMjsKKwlz bXUtPndvcmtsb2FkX3Byb3JpdHlbUFBfU01DX1BPV0VSX1BST0ZJTEVfVklERU9dID0gMzsKKwlz bXUtPndvcmtsb2FkX3Byb3JpdHlbUFBfU01DX1BPV0VSX1BST0ZJTEVfVlJdID0gNDsKKwlzbXUt Pndvcmtsb2FkX3Byb3JpdHlbUFBfU01DX1BPV0VSX1BST0ZJTEVfQ09NUFVURV0gPSA1OworCXNt dS0+d29ya2xvYWRfcHJvcml0eVtQUF9TTUNfUE9XRVJfUFJPRklMRV9DVVNUT01dID0gNjsKKwor CXNtdS0+d29ya2xvYWRfc2V0dGluZ1swXSA9IFBQX1NNQ19QT1dFUl9QUk9GSUxFX0JPT1RVUF9E RUZBVUxUOworCXNtdS0+d29ya2xvYWRfc2V0dGluZ1sxXSA9IFBQX1NNQ19QT1dFUl9QUk9GSUxF X0ZVTExTQ1JFRU4zRDsKKwlzbXUtPndvcmtsb2FkX3NldHRpbmdbMl0gPSBQUF9TTUNfUE9XRVJf UFJPRklMRV9QT1dFUlNBVklORzsKKwlzbXUtPndvcmtsb2FkX3NldHRpbmdbM10gPSBQUF9TTUNf UE9XRVJfUFJPRklMRV9WSURFTzsKKwlzbXUtPndvcmtsb2FkX3NldHRpbmdbNF0gPSBQUF9TTUNf UE9XRVJfUFJPRklMRV9WUjsKKwlzbXUtPndvcmtsb2FkX3NldHRpbmdbNV0gPSBQUF9TTUNfUE9X RVJfUFJPRklMRV9DT01QVVRFOworCXNtdS0+d29ya2xvYWRfc2V0dGluZ1s2XSA9IFBQX1NNQ19Q T1dFUl9QUk9GSUxFX0NVU1RPTTsKIAogCXJldCA9IHNtdV9pbml0X21pY3JvY29kZShzbXUpOwog CWlmIChyZXQpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvcG93ZXJwbGF5L2lu Yy9hbWRncHVfc211LmggYi9kcml2ZXJzL2dwdS9kcm0vYW1kL3Bvd2VycGxheS9pbmMvYW1kZ3B1 X3NtdS5oCmluZGV4IDBiMDRiYjIuLjE5MWJmYzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2Ry bS9hbWQvcG93ZXJwbGF5L2luYy9hbWRncHVfc211LmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2Ft ZC9wb3dlcnBsYXkvaW5jL2FtZGdwdV9zbXUuaApAQCAtMzM1LDYgKzMzNSw3IEBAIHN0cnVjdCBz bXVfZmVhdHVyZQogCURFQ0xBUkVfQklUTUFQKGVuYWJsZWQsIFNNVV9GRUFUVVJFX01BWCk7CiB9 OwogCisjZGVmaW5lIFdPUktMT0FEX1BPTElDWV9NQVggNwogc3RydWN0IHNtdV9jb250ZXh0CiB7 CiAJc3RydWN0IGFtZGdwdV9kZXZpY2UgICAgICAgICAgICAqYWRldjsKQEAgLTM2MSw2ICszNjIs MTIgQEAgc3RydWN0IHNtdV9jb250ZXh0CiAjZGVmaW5lIFdBVEVSTUFSS1NfRVhJU1QJKDEgPDwg MCkKICNkZWZpbmUgV0FURVJNQVJLU19MT0FERUQJKDEgPDwgMSkKIAl1aW50MzJfdCB3YXRlcm1h cmtzX2JpdG1hcDsKKworCXVpbnQzMl90IHdvcmtsb2FkX21hc2s7CisJdWludDMyX3Qgd29ya2xv YWRfcHJvcml0eVtXT1JLTE9BRF9QT0xJQ1lfTUFYXTsKKwl1aW50MzJfdCB3b3JrbG9hZF9zZXR0 aW5nW1dPUktMT0FEX1BPTElDWV9NQVhdOworCXVpbnQzMl90IHBvd2VyX3Byb2ZpbGVfbW9kZTsK Kwl1aW50MzJfdCBkZWZhdWx0X3Bvd2VyX3Byb2ZpbGVfbW9kZTsKIH07CiAKIHN0cnVjdCBwcHRh YmxlX2Z1bmNzIHsKQEAgLTM4OSw2ICszOTYsOCBAQCBzdHJ1Y3QgcHB0YWJsZV9mdW5jcyB7CiAJ CQkJCSAgICAgIHN0cnVjdAogCQkJCQkgICAgICBwcF9jbG9ja19sZXZlbHNfd2l0aF92b2x0YWdl CiAJCQkJCSAgICAgICpjbG9ja3MpOworCWludCAoKmdldF9wb3dlcl9wcm9maWxlX21vZGUpKHN0 cnVjdCBzbXVfY29udGV4dCAqc211LCBjaGFyICpidWYpOworCWludCAoKnNldF9wb3dlcl9wcm9m aWxlX21vZGUpKHN0cnVjdCBzbXVfY29udGV4dCAqc211LCBsb25nICppbnB1dCwgdWludDMyX3Qg c2l6ZSk7CiB9OwogCiBzdHJ1Y3Qgc211X2Z1bmNzCkBAIC00NTMsNiArNDYyLDE1IEBAIHN0cnVj dCBzbXVfZnVuY3MKIAlpbnQgKCpzZXRfd2F0ZXJtYXJrc19mb3JfY2xvY2tfcmFuZ2VzKShzdHJ1 Y3Qgc211X2NvbnRleHQgKnNtdSwKIAkJCQkJICAgICAgIHN0cnVjdCBkbV9wcF93bV9zZXRzX3dp dGhfY2xvY2tfcmFuZ2VzX3NvYzE1ICpjbG9ja19yYW5nZXMpOwogCWludCAoKnNldF9vZDhfZGVm YXVsdF9zZXR0aW5ncykoc3RydWN0IHNtdV9jb250ZXh0ICpzbXUpOworCWludCAoKmdldF9hY3Rp dml0eV9tb25pdG9yX2NvZWZmKShzdHJ1Y3Qgc211X2NvbnRleHQgKnNtdSwKKwkJCQkgICAgICB1 aW50OF90ICp0YWJsZSwKKwkJCQkgICAgICB1aW50MTZfdCB3b3JrbG9hZF90eXBlKTsKKwlpbnQg KCpzZXRfYWN0aXZpdHlfbW9uaXRvcl9jb2VmZikoc3RydWN0IHNtdV9jb250ZXh0ICpzbXUsCisJ CQkJICAgICAgdWludDhfdCAqdGFibGUsCisJCQkJICAgICAgdWludDE2X3Qgd29ya2xvYWRfdHlw ZSk7CisJaW50ICgqY29udl9wb3dlcl9wcm9maWxlX3RvX3BwbGliX3dvcmtsb2FkKShpbnQgcG93 ZXJfcHJvZmlsZSk7CisJaW50ICgqZ2V0X3Bvd2VyX3Byb2ZpbGVfbW9kZSkoc3RydWN0IHNtdV9j b250ZXh0ICpzbXUsIGNoYXIgKmJ1Zik7CisJaW50ICgqc2V0X3Bvd2VyX3Byb2ZpbGVfbW9kZSko c3RydWN0IHNtdV9jb250ZXh0ICpzbXUsIGxvbmcgKmlucHV0LCB1aW50MzJfdCBzaXplKTsKIH07 CiAKICNkZWZpbmUgc211X2luaXRfbWljcm9jb2RlKHNtdSkgXApAQCAtNTQ3LDYgKzU2NSwxMCBA QCBzdHJ1Y3Qgc211X2Z1bmNzCiAJKChzbXUpLT5mdW5jcy0+c3RhcnRfdGhlcm1hbF9jb250cm9s PyAoc211KS0+ZnVuY3MtPnN0YXJ0X3RoZXJtYWxfY29udHJvbCgoc211KSkgOiAwKQogI2RlZmlu ZSBzbXVfcmVhZF9zZW5zb3Ioc211LCBzZW5zb3IsIGRhdGEsIHNpemUpIFwKIAkoKHNtdSktPmZ1 bmNzLT5yZWFkX3NlbnNvcj8gKHNtdSktPmZ1bmNzLT5yZWFkX3NlbnNvcigoc211KSwgKHNlbnNv ciksIChkYXRhKSwgKHNpemUpKSA6IDApCisjZGVmaW5lIHNtdV9nZXRfcG93ZXJfcHJvZmlsZV9t b2RlKHNtdSwgYnVmKSBcCisJKChzbXUpLT5mdW5jcy0+Z2V0X3Bvd2VyX3Byb2ZpbGVfbW9kZSA/ IChzbXUpLT5mdW5jcy0+Z2V0X3Bvd2VyX3Byb2ZpbGVfbW9kZSgoc211KSwgYnVmKSA6IDApCisj ZGVmaW5lIHNtdV9zZXRfcG93ZXJfcHJvZmlsZV9tb2RlKHNtdSwgcGFyYW0sIHBhcmFtX3NpemUp IFwKKwkoKHNtdSktPmZ1bmNzLT5zZXRfcG93ZXJfcHJvZmlsZV9tb2RlID8gKHNtdSktPmZ1bmNz LT5zZXRfcG93ZXJfcHJvZmlsZV9tb2RlKChzbXUpLCAocGFyYW0pLCAocGFyYW1fc2l6ZSkpIDog MCkKIAogI2RlZmluZSBzbXVfbXNnX2dldF9pbmRleChzbXUsIG1zZykgXAogCSgoc211KS0+cHB0 X2Z1bmNzPyAoKHNtdSktPnBwdF9mdW5jcy0+Z2V0X3NtdV9tc2dfaW5kZXg/IChzbXUpLT5wcHRf ZnVuY3MtPmdldF9zbXVfbXNnX2luZGV4KChzbXUpLCAobXNnKSkgOiAtRUlOVkFMKSA6IC1FSU5W QUwpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1kL3Bvd2VycGxheS9zbXVfdjExXzAu YyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvcG93ZXJwbGF5L3NtdV92MTFfMC5jCmluZGV4IDQwM2Iw ZjQuLjZjYWJjODcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvcG93ZXJwbGF5L3Nt dV92MTFfMC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvcG93ZXJwbGF5L3NtdV92MTFfMC5j CkBAIC0zMDgsNiArMzA4LDEwIEBAIHN0YXRpYyBpbnQgc211X3YxMV8wX2luaXRfc21jX3RhYmxl cyhzdHJ1Y3Qgc211X2NvbnRleHQgKnNtdSkKIAkJICAgICAgIFBBR0VfU0laRSwgQU1ER1BVX0dF TV9ET01BSU5fVlJBTSk7CiAJU01VX1RBQkxFX0lOSVQodGFibGVzLCBUQUJMRV9QTVNUQVRVU0xP RywgU01VMTFfVE9PTF9TSVpFLCBQQUdFX1NJWkUsCiAJCSAgICAgICBBTURHUFVfR0VNX0RPTUFJ Tl9WUkFNKTsKKwlTTVVfVEFCTEVfSU5JVCh0YWJsZXMsIFRBQkxFX0FDVElWSVRZX01PTklUT1Jf Q09FRkYsCisJCSAgICAgICBzaXplb2YoRHBtQWN0aXZpdHlNb25pdG9yQ29lZmZJbnRfdCksCisJ CSAgICAgICBQQUdFX1NJWkUsCisJCSAgICAgICBBTURHUFVfR0VNX0RPTUFJTl9WUkFNKTsKIAog CXJldCA9IHNtdV92MTFfMF9pbml0X2RwbV9jb250ZXh0KHNtdSk7CiAJaWYgKHJldCkKQEAgLTEy MzYsNiArMTI0MCwyOTAgQEAgc3RhdGljIGludCBzbXVfdjExXzBfc2V0X29kOF9kZWZhdWx0X3Nl dHRpbmdzKHN0cnVjdCBzbXVfY29udGV4dCAqc211KQogCXJldHVybiAwOwogfQogCitzdGF0aWMg aW50IHNtdV92MTFfMF9zZXRfYWN0aXZpdHlfbW9uaXRvcl9jb2VmZihzdHJ1Y3Qgc211X2NvbnRl eHQgKnNtdSwKKwkJCQkgICAgICB1aW50OF90ICp0YWJsZSwgdWludDE2X3Qgd29ya2xvYWRfdHlw ZSkKK3sKKwlpbnQgcmV0ID0gMDsKKwltZW1jcHkoc211LT5zbXVfdGFibGUudGFibGVzW1RBQkxF X0FDVElWSVRZX01PTklUT1JfQ09FRkZdLmNwdV9hZGRyLAorCSAgICAgICB0YWJsZSwgc211LT5z bXVfdGFibGUudGFibGVzW1RBQkxFX0FDVElWSVRZX01PTklUT1JfQ09FRkZdLnNpemUpOworCXJl dCA9IHNtdV9zZW5kX3NtY19tc2dfd2l0aF9wYXJhbShzbXUsIFNNVV9NU0dfU2V0RHJpdmVyRHJh bUFkZHJIaWdoLAorCQkJCQkgIHVwcGVyXzMyX2JpdHMoc211LT5zbXVfdGFibGUudGFibGVzW1RB QkxFX0FDVElWSVRZX01PTklUT1JfQ09FRkZdLm1jX2FkZHJlc3MpKTsKKwlpZiAocmV0KSB7CisJ CXByX2VycigiWyVzXSBBdHRlbXB0IHRvIFNldCBEcmFtIEFkZHIgSGlnaCBGYWlsZWQhIiwgX19m dW5jX18pOworCQlyZXR1cm4gcmV0OworCX0KKwlyZXQgPSBzbXVfc2VuZF9zbWNfbXNnX3dpdGhf cGFyYW0oc211LCBTTVVfTVNHX1NldERyaXZlckRyYW1BZGRyTG93LAorCQkJCQkgIGxvd2VyXzMy X2JpdHMoc211LT5zbXVfdGFibGUudGFibGVzW1RBQkxFX0FDVElWSVRZX01PTklUT1JfQ09FRkZd Lm1jX2FkZHJlc3MpKTsKKwlpZiAocmV0KSB7CisJCXByX2VycigiWyVzXSBBdHRlbXB0IHRvIFNl dCBEcmFtIEFkZHIgTG93IEZhaWxlZCEiLCBfX2Z1bmNfXyk7CisJCXJldHVybiByZXQ7CisJfQor CXJldCA9IHNtdV9zZW5kX3NtY19tc2dfd2l0aF9wYXJhbShzbXUsIFNNVV9NU0dfVHJhbnNmZXJU YWJsZVNtdTJEcmFtLAorCQkJCQkgIFRBQkxFX0FDVElWSVRZX01PTklUT1JfQ09FRkYgfCAod29y a2xvYWRfdHlwZSA8PCAxNikpOworCWlmIChyZXQpIHsKKwkJcHJfZXJyKCJbJXNdIEF0dGVtcHQg dG8gVHJhbnNmZXIgVGFibGUgRnJvbSBTTVUgRmFpbGVkISIsIF9fZnVuY19fKTsKKwkJcmV0dXJu IHJldDsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHNtdV92MTFfMF9nZXRf YWN0aXZpdHlfbW9uaXRvcl9jb2VmZihzdHJ1Y3Qgc211X2NvbnRleHQgKnNtdSwKKwkJCQkgICAg ICB1aW50OF90ICp0YWJsZSwgdWludDE2X3Qgd29ya2xvYWRfdHlwZSkKK3sKKwlpbnQgcmV0ID0g MDsKKwlyZXQgPSBzbXVfc2VuZF9zbWNfbXNnX3dpdGhfcGFyYW0oc211LCBTTVVfTVNHX1NldERy aXZlckRyYW1BZGRySGlnaCwKKwkJCQkJICB1cHBlcl8zMl9iaXRzKHNtdS0+c211X3RhYmxlLnRh Ymxlc1tUQUJMRV9BQ1RJVklUWV9NT05JVE9SX0NPRUZGXS5tY19hZGRyZXNzKSk7CisJaWYgKHJl dCkgeworCQlwcl9lcnIoIlslc10gQXR0ZW1wdCB0byBTZXQgRHJhbSBBZGRyIEhpZ2ggRmFpbGVk ISIsIF9fZnVuY19fKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXQgPSBzbXVfc2VuZF9zbWNf bXNnX3dpdGhfcGFyYW0oc211LCBTTVVfTVNHX1NldERyaXZlckRyYW1BZGRyTG93LAorCQkJCQkg IGxvd2VyXzMyX2JpdHMoc211LT5zbXVfdGFibGUudGFibGVzW1RBQkxFX0FDVElWSVRZX01PTklU T1JfQ09FRkZdLm1jX2FkZHJlc3MpKTsKKwlpZiAocmV0KSB7CisJCXByX2VycigiWyVzXSBBdHRl bXB0IHRvIFNldCBEcmFtIEFkZHIgTG93IEZhaWxlZCEiLCBfX2Z1bmNfXyk7CisJCXJldHVybiBy ZXQ7CisJfQorCisJcmV0ID0gc211X3NlbmRfc21jX21zZ193aXRoX3BhcmFtKHNtdSwgU01VX01T R19UcmFuc2ZlclRhYmxlU211MkRyYW0sCisJCQkJCSAgVEFCTEVfQUNUSVZJVFlfTU9OSVRPUl9D T0VGRiB8ICh3b3JrbG9hZF90eXBlIDw8IDE2KSk7CisJaWYgKHJldCkgeworCQlwcl9lcnIoIlsl c10gQXR0ZW1wdCB0byBUcmFuc2ZlciBUYWJsZSBGcm9tIFNNVSBGYWlsZWQhIiwgX19mdW5jX18p OworCQlyZXR1cm4gcmV0OworCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgc211 X3YxMV8wX2NvbnZfcG93ZXJfcHJvZmlsZV90b19wcGxpYl93b3JrbG9hZChpbnQgcG93ZXJfcHJv ZmlsZSkKK3sKKwlpbnQgcHBsaWJfd29ya2xvYWQgPSAwOworCisJc3dpdGNoIChwb3dlcl9wcm9m aWxlKSB7CisJY2FzZSBQUF9TTUNfUE9XRVJfUFJPRklMRV9CT09UVVBfREVGQVVMVDoKKwkgICAg IHBwbGliX3dvcmtsb2FkID0gV09SS0xPQURfREVGQVVMVF9CSVQ7CisJICAgICBicmVhazsKKwlj YXNlIFBQX1NNQ19QT1dFUl9QUk9GSUxFX0ZVTExTQ1JFRU4zRDoKKwkgICAgIHBwbGliX3dvcmts b2FkID0gV09SS0xPQURfUFBMSUJfRlVMTF9TQ1JFRU5fM0RfQklUOworCSAgICAgYnJlYWs7CisJ Y2FzZSBQUF9TTUNfUE9XRVJfUFJPRklMRV9QT1dFUlNBVklORzoKKwkgICAgIHBwbGliX3dvcmts b2FkID0gV09SS0xPQURfUFBMSUJfUE9XRVJfU0FWSU5HX0JJVDsKKwkgICAgIGJyZWFrOworCWNh c2UgUFBfU01DX1BPV0VSX1BST0ZJTEVfVklERU86CisJICAgICBwcGxpYl93b3JrbG9hZCA9IFdP UktMT0FEX1BQTElCX1ZJREVPX0JJVDsKKwkgICAgIGJyZWFrOworCWNhc2UgUFBfU01DX1BPV0VS X1BST0ZJTEVfVlI6CisJICAgICBwcGxpYl93b3JrbG9hZCA9IFdPUktMT0FEX1BQTElCX1ZSX0JJ VDsKKwkgICAgIGJyZWFrOworCWNhc2UgUFBfU01DX1BPV0VSX1BST0ZJTEVfQ09NUFVURToKKwkg ICAgIHBwbGliX3dvcmtsb2FkID0gV09SS0xPQURfUFBMSUJfQ09NUFVURV9CSVQ7CisJICAgICBi cmVhazsKKwljYXNlIFBQX1NNQ19QT1dFUl9QUk9GSUxFX0NVU1RPTToKKwkJcHBsaWJfd29ya2xv YWQgPSBXT1JLTE9BRF9QUExJQl9DVVNUT01fQklUOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4g cHBsaWJfd29ya2xvYWQ7Cit9CisKK3N0YXRpYyBpbnQgc211X3YxMV8wX2dldF9wb3dlcl9wcm9m aWxlX21vZGUoc3RydWN0IHNtdV9jb250ZXh0ICpzbXUsIGNoYXIgKmJ1ZikKK3sKKwlEcG1BY3Rp dml0eU1vbml0b3JDb2VmZkludF90IGFjdGl2aXR5X21vbml0b3I7CisJdWludDMyX3QgaSwgc2l6 ZSA9IDA7CisJdWludDE2X3Qgd29ya2xvYWRfdHlwZSA9IDA7CisJc3RhdGljIGNvbnN0IGNoYXIg KnByb2ZpbGVfbmFtZVtdID0geworCQkJCQkiQk9PVFVQX0RFRkFVTFQiLAorCQkJCQkiM0RfRlVM TF9TQ1JFRU4iLAorCQkJCQkiUE9XRVJfU0FWSU5HIiwKKwkJCQkJIlZJREVPIiwKKwkJCQkJIlZS IiwKKwkJCQkJIkNPTVBVVEUiLAorCQkJCQkiQ1VTVE9NIn07CisJc3RhdGljIGNvbnN0IGNoYXIg KnRpdGxlW10gPSB7CisJCQkiUFJPRklMRV9JTkRFWChOQU1FKSIsCisJCQkiQ0xPQ0tfVFlQRShO QU1FKSIsCisJCQkiRlBTIiwKKwkJCSJVc2VSbGNCdXN5IiwKKwkJCSJNaW5BY3RpdmVGcmVxVHlw ZSIsCisJCQkiTWluQWN0aXZlRnJlcSIsCisJCQkiQm9vc3RlckZyZXFUeXBlIiwKKwkJCSJCb29z dGVyRnJlcSIsCisJCQkiUERfRGF0YV9saW1pdF9jIiwKKwkJCSJQRF9EYXRhX2Vycm9yX2NvZWZm IiwKKwkJCSJQRF9EYXRhX2Vycm9yX3JhdGVfY29lZmYifTsKKwlpbnQgcmVzdWx0ID0gMDsKKwor CWlmICghYnVmKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXNpemUgKz0gc3ByaW50ZihidWYgKyBz aXplLCAiJTE2cyAlcyAlcyAlcyAlcyAlcyAlcyAlcyAlcyAlcyAlc1xuIiwKKwkJCXRpdGxlWzBd LCB0aXRsZVsxXSwgdGl0bGVbMl0sIHRpdGxlWzNdLCB0aXRsZVs0XSwgdGl0bGVbNV0sCisJCQl0 aXRsZVs2XSwgdGl0bGVbN10sIHRpdGxlWzhdLCB0aXRsZVs5XSwgdGl0bGVbMTBdKTsKKworCWZv ciAoaSA9IDA7IGkgPD0gUFBfU01DX1BPV0VSX1BST0ZJTEVfQ1VTVE9NOyBpKyspIHsKKwkJLyog Y29udiBQUF9TTUNfUE9XRVJfUFJPRklMRSogdG8gV09SS0xPQURfUFBMSUJfKl9CSVQgKi8KKwkJ d29ya2xvYWRfdHlwZSA9IHNtdV92MTFfMF9jb252X3Bvd2VyX3Byb2ZpbGVfdG9fcHBsaWJfd29y a2xvYWQoaSk7CisJCXJlc3VsdCA9IHNtdV92MTFfMF9nZXRfYWN0aXZpdHlfbW9uaXRvcl9jb2Vm ZihzbXUsCisJCQkJCQkJICAgICAgKHVpbnQ4X3QgKikoJmFjdGl2aXR5X21vbml0b3IpLAorCQkJ CQkJCSAgICAgIHdvcmtsb2FkX3R5cGUpOworCQlpZiAocmVzdWx0KSB7CisJCQlwcl9lcnIoIlsl c10gRmFpbGVkIHRvIGdldCBhY3Rpdml0eSBtb25pdG9yISIsIF9fZnVuY19fKTsKKwkJCXJldHVy biByZXN1bHQ7CisJCX0KKworCQlzaXplICs9IHNwcmludGYoYnVmICsgc2l6ZSwgIiUyZCAlMTRz JXM6XG4iLAorCQkJaSwgcHJvZmlsZV9uYW1lW2ldLCAoaSA9PSBzbXUtPnBvd2VyX3Byb2ZpbGVf bW9kZSkgPyAiKiIgOiAiICIpOworCisJCXNpemUgKz0gc3ByaW50ZihidWYgKyBzaXplLCAiJTE5 cyAlZCglMTNzKSAlN2QgJTdkICU3ZCAlN2QgJTdkICU3ZCAlN2QgJTdkICU3ZFxuIiwKKwkJCSIg IiwKKwkJCTAsCisJCQkiR0ZYQ0xLIiwKKwkJCWFjdGl2aXR5X21vbml0b3IuR2Z4X0ZQUywKKwkJ CWFjdGl2aXR5X21vbml0b3IuR2Z4X1VzZVJsY0J1c3ksCisJCQlhY3Rpdml0eV9tb25pdG9yLkdm eF9NaW5BY3RpdmVGcmVxVHlwZSwKKwkJCWFjdGl2aXR5X21vbml0b3IuR2Z4X01pbkFjdGl2ZUZy ZXEsCisJCQlhY3Rpdml0eV9tb25pdG9yLkdmeF9Cb29zdGVyRnJlcVR5cGUsCisJCQlhY3Rpdml0 eV9tb25pdG9yLkdmeF9Cb29zdGVyRnJlcSwKKwkJCWFjdGl2aXR5X21vbml0b3IuR2Z4X1BEX0Rh dGFfbGltaXRfYywKKwkJCWFjdGl2aXR5X21vbml0b3IuR2Z4X1BEX0RhdGFfZXJyb3JfY29lZmYs CisJCQlhY3Rpdml0eV9tb25pdG9yLkdmeF9QRF9EYXRhX2Vycm9yX3JhdGVfY29lZmYpOworCisJ CXNpemUgKz0gc3ByaW50ZihidWYgKyBzaXplLCAiJTE5cyAlZCglMTNzKSAlN2QgJTdkICU3ZCAl N2QgJTdkICU3ZCAlN2QgJTdkICU3ZFxuIiwKKwkJCSIgIiwKKwkJCTEsCisJCQkiU09DQ0xLIiwK KwkJCWFjdGl2aXR5X21vbml0b3IuU29jX0ZQUywKKwkJCWFjdGl2aXR5X21vbml0b3IuU29jX1Vz ZVJsY0J1c3ksCisJCQlhY3Rpdml0eV9tb25pdG9yLlNvY19NaW5BY3RpdmVGcmVxVHlwZSwKKwkJ CWFjdGl2aXR5X21vbml0b3IuU29jX01pbkFjdGl2ZUZyZXEsCisJCQlhY3Rpdml0eV9tb25pdG9y LlNvY19Cb29zdGVyRnJlcVR5cGUsCisJCQlhY3Rpdml0eV9tb25pdG9yLlNvY19Cb29zdGVyRnJl cSwKKwkJCWFjdGl2aXR5X21vbml0b3IuU29jX1BEX0RhdGFfbGltaXRfYywKKwkJCWFjdGl2aXR5 X21vbml0b3IuU29jX1BEX0RhdGFfZXJyb3JfY29lZmYsCisJCQlhY3Rpdml0eV9tb25pdG9yLlNv Y19QRF9EYXRhX2Vycm9yX3JhdGVfY29lZmYpOworCisJCXNpemUgKz0gc3ByaW50ZihidWYgKyBz aXplLCAiJTE5cyAlZCglMTNzKSAlN2QgJTdkICU3ZCAlN2QgJTdkICU3ZCAlN2QgJTdkICU3ZFxu IiwKKwkJCSIgIiwKKwkJCTIsCisJCQkiVUNMSyIsCisJCQlhY3Rpdml0eV9tb25pdG9yLk1lbV9G UFMsCisJCQlhY3Rpdml0eV9tb25pdG9yLk1lbV9Vc2VSbGNCdXN5LAorCQkJYWN0aXZpdHlfbW9u aXRvci5NZW1fTWluQWN0aXZlRnJlcVR5cGUsCisJCQlhY3Rpdml0eV9tb25pdG9yLk1lbV9NaW5B Y3RpdmVGcmVxLAorCQkJYWN0aXZpdHlfbW9uaXRvci5NZW1fQm9vc3RlckZyZXFUeXBlLAorCQkJ YWN0aXZpdHlfbW9uaXRvci5NZW1fQm9vc3RlckZyZXEsCisJCQlhY3Rpdml0eV9tb25pdG9yLk1l bV9QRF9EYXRhX2xpbWl0X2MsCisJCQlhY3Rpdml0eV9tb25pdG9yLk1lbV9QRF9EYXRhX2Vycm9y X2NvZWZmLAorCQkJYWN0aXZpdHlfbW9uaXRvci5NZW1fUERfRGF0YV9lcnJvcl9yYXRlX2NvZWZm KTsKKworCQlzaXplICs9IHNwcmludGYoYnVmICsgc2l6ZSwgIiUxOXMgJWQoJTEzcykgJTdkICU3 ZCAlN2QgJTdkICU3ZCAlN2QgJTdkICU3ZCAlN2RcbiIsCisJCQkiICIsCisJCQkzLAorCQkJIkZD TEsiLAorCQkJYWN0aXZpdHlfbW9uaXRvci5GY2xrX0ZQUywKKwkJCWFjdGl2aXR5X21vbml0b3Iu RmNsa19Vc2VSbGNCdXN5LAorCQkJYWN0aXZpdHlfbW9uaXRvci5GY2xrX01pbkFjdGl2ZUZyZXFU eXBlLAorCQkJYWN0aXZpdHlfbW9uaXRvci5GY2xrX01pbkFjdGl2ZUZyZXEsCisJCQlhY3Rpdml0 eV9tb25pdG9yLkZjbGtfQm9vc3RlckZyZXFUeXBlLAorCQkJYWN0aXZpdHlfbW9uaXRvci5GY2xr X0Jvb3N0ZXJGcmVxLAorCQkJYWN0aXZpdHlfbW9uaXRvci5GY2xrX1BEX0RhdGFfbGltaXRfYywK KwkJCWFjdGl2aXR5X21vbml0b3IuRmNsa19QRF9EYXRhX2Vycm9yX2NvZWZmLAorCQkJYWN0aXZp dHlfbW9uaXRvci5GY2xrX1BEX0RhdGFfZXJyb3JfcmF0ZV9jb2VmZik7CisJfQorCisJcmV0dXJu IHNpemU7Cit9CisKK3N0YXRpYyBpbnQgc211X3YxMV8wX3NldF9wb3dlcl9wcm9maWxlX21vZGUo c3RydWN0IHNtdV9jb250ZXh0ICpzbXUsIGxvbmcgKmlucHV0LCB1aW50MzJfdCBzaXplKQorewor CURwbUFjdGl2aXR5TW9uaXRvckNvZWZmSW50X3QgYWN0aXZpdHlfbW9uaXRvcjsKKwlpbnQgd29y a2xvYWRfdHlwZSwgcmV0ID0gMDsKKworCXNtdS0+cG93ZXJfcHJvZmlsZV9tb2RlID0gaW5wdXRb c2l6ZV07CisKKwlpZiAoc211LT5wb3dlcl9wcm9maWxlX21vZGUgPiBQUF9TTUNfUE9XRVJfUFJP RklMRV9DVVNUT00pIHsKKwkJcHJfZXJyKCJJbnZhbGlkIHBvd2VyIHByb2ZpbGUgbW9kZSAlZFxu Iiwgc211LT5wb3dlcl9wcm9maWxlX21vZGUpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlp ZiAoc211LT5wb3dlcl9wcm9maWxlX21vZGUgPT0gUFBfU01DX1BPV0VSX1BST0ZJTEVfQ1VTVE9N KSB7CisJCWlmIChzaXplIDwgMCkKKwkJCXJldHVybiAtRUlOVkFMOworCisJCXJldCA9IHNtdV92 MTFfMF9nZXRfYWN0aXZpdHlfbW9uaXRvcl9jb2VmZihzbXUsCisJCQkJCQkJICAgKHVpbnQ4X3Qg KikoJmFjdGl2aXR5X21vbml0b3IpLAorCQkJCQkJCSAgIFdPUktMT0FEX1BQTElCX0NVU1RPTV9C SVQpOworCQlpZiAocmV0KSB7CisJCQlwcl9lcnIoIlslc10gRmFpbGVkIHRvIGdldCBhY3Rpdml0 eSBtb25pdG9yISIsIF9fZnVuY19fKTsKKwkJCXJldHVybiByZXQ7CisJCX0KKworCQlzd2l0Y2gg KGlucHV0WzBdKSB7CisJCWNhc2UgMDogLyogR2Z4Y2xrICovCisJCQlhY3Rpdml0eV9tb25pdG9y LkdmeF9GUFMgPSBpbnB1dFsxXTsKKwkJCWFjdGl2aXR5X21vbml0b3IuR2Z4X1VzZVJsY0J1c3kg PSBpbnB1dFsyXTsKKwkJCWFjdGl2aXR5X21vbml0b3IuR2Z4X01pbkFjdGl2ZUZyZXFUeXBlID0g aW5wdXRbM107CisJCQlhY3Rpdml0eV9tb25pdG9yLkdmeF9NaW5BY3RpdmVGcmVxID0gaW5wdXRb NF07CisJCQlhY3Rpdml0eV9tb25pdG9yLkdmeF9Cb29zdGVyRnJlcVR5cGUgPSBpbnB1dFs1XTsK KwkJCWFjdGl2aXR5X21vbml0b3IuR2Z4X0Jvb3N0ZXJGcmVxID0gaW5wdXRbNl07CisJCQlhY3Rp dml0eV9tb25pdG9yLkdmeF9QRF9EYXRhX2xpbWl0X2MgPSBpbnB1dFs3XTsKKwkJCWFjdGl2aXR5 X21vbml0b3IuR2Z4X1BEX0RhdGFfZXJyb3JfY29lZmYgPSBpbnB1dFs4XTsKKwkJCWFjdGl2aXR5 X21vbml0b3IuR2Z4X1BEX0RhdGFfZXJyb3JfcmF0ZV9jb2VmZiA9IGlucHV0WzldOworCQkJYnJl YWs7CisJCWNhc2UgMTogLyogU29jY2xrICovCisJCQlhY3Rpdml0eV9tb25pdG9yLlNvY19GUFMg PSBpbnB1dFsxXTsKKwkJCWFjdGl2aXR5X21vbml0b3IuU29jX1VzZVJsY0J1c3kgPSBpbnB1dFsy XTsKKwkJCWFjdGl2aXR5X21vbml0b3IuU29jX01pbkFjdGl2ZUZyZXFUeXBlID0gaW5wdXRbM107 CisJCQlhY3Rpdml0eV9tb25pdG9yLlNvY19NaW5BY3RpdmVGcmVxID0gaW5wdXRbNF07CisJCQlh Y3Rpdml0eV9tb25pdG9yLlNvY19Cb29zdGVyRnJlcVR5cGUgPSBpbnB1dFs1XTsKKwkJCWFjdGl2 aXR5X21vbml0b3IuU29jX0Jvb3N0ZXJGcmVxID0gaW5wdXRbNl07CisJCQlhY3Rpdml0eV9tb25p dG9yLlNvY19QRF9EYXRhX2xpbWl0X2MgPSBpbnB1dFs3XTsKKwkJCWFjdGl2aXR5X21vbml0b3Iu U29jX1BEX0RhdGFfZXJyb3JfY29lZmYgPSBpbnB1dFs4XTsKKwkJCWFjdGl2aXR5X21vbml0b3Iu U29jX1BEX0RhdGFfZXJyb3JfcmF0ZV9jb2VmZiA9IGlucHV0WzldOworCQkJYnJlYWs7CisJCWNh c2UgMjogLyogVWNsayAqLworCQkJYWN0aXZpdHlfbW9uaXRvci5NZW1fRlBTID0gaW5wdXRbMV07 CisJCQlhY3Rpdml0eV9tb25pdG9yLk1lbV9Vc2VSbGNCdXN5ID0gaW5wdXRbMl07CisJCQlhY3Rp dml0eV9tb25pdG9yLk1lbV9NaW5BY3RpdmVGcmVxVHlwZSA9IGlucHV0WzNdOworCQkJYWN0aXZp dHlfbW9uaXRvci5NZW1fTWluQWN0aXZlRnJlcSA9IGlucHV0WzRdOworCQkJYWN0aXZpdHlfbW9u aXRvci5NZW1fQm9vc3RlckZyZXFUeXBlID0gaW5wdXRbNV07CisJCQlhY3Rpdml0eV9tb25pdG9y Lk1lbV9Cb29zdGVyRnJlcSA9IGlucHV0WzZdOworCQkJYWN0aXZpdHlfbW9uaXRvci5NZW1fUERf RGF0YV9saW1pdF9jID0gaW5wdXRbN107CisJCQlhY3Rpdml0eV9tb25pdG9yLk1lbV9QRF9EYXRh X2Vycm9yX2NvZWZmID0gaW5wdXRbOF07CisJCQlhY3Rpdml0eV9tb25pdG9yLk1lbV9QRF9EYXRh X2Vycm9yX3JhdGVfY29lZmYgPSBpbnB1dFs5XTsKKwkJCWJyZWFrOworCQljYXNlIDM6IC8qIEZj bGsgKi8KKwkJCWFjdGl2aXR5X21vbml0b3IuRmNsa19GUFMgPSBpbnB1dFsxXTsKKwkJCWFjdGl2 aXR5X21vbml0b3IuRmNsa19Vc2VSbGNCdXN5ID0gaW5wdXRbMl07CisJCQlhY3Rpdml0eV9tb25p dG9yLkZjbGtfTWluQWN0aXZlRnJlcVR5cGUgPSBpbnB1dFszXTsKKwkJCWFjdGl2aXR5X21vbml0 b3IuRmNsa19NaW5BY3RpdmVGcmVxID0gaW5wdXRbNF07CisJCQlhY3Rpdml0eV9tb25pdG9yLkZj bGtfQm9vc3RlckZyZXFUeXBlID0gaW5wdXRbNV07CisJCQlhY3Rpdml0eV9tb25pdG9yLkZjbGtf Qm9vc3RlckZyZXEgPSBpbnB1dFs2XTsKKwkJCWFjdGl2aXR5X21vbml0b3IuRmNsa19QRF9EYXRh X2xpbWl0X2MgPSBpbnB1dFs3XTsKKwkJCWFjdGl2aXR5X21vbml0b3IuRmNsa19QRF9EYXRhX2Vy cm9yX2NvZWZmID0gaW5wdXRbOF07CisJCQlhY3Rpdml0eV9tb25pdG9yLkZjbGtfUERfRGF0YV9l cnJvcl9yYXRlX2NvZWZmID0gaW5wdXRbOV07CisJCQlicmVhazsKKwkJfQorCisJCXJldCA9IHNt dV92MTFfMF9zZXRfYWN0aXZpdHlfbW9uaXRvcl9jb2VmZihzbXUsCisJCQkJCQkJICAgKHVpbnQ4 X3QgKikoJmFjdGl2aXR5X21vbml0b3IpLAorCQkJCQkJCSAgIFdPUktMT0FEX1BQTElCX0NVU1RP TV9CSVQpOworCQlpZiAocmV0KSB7CisJCQlwcl9lcnIoIlslc10gRmFpbGVkIHRvIHNldCBhY3Rp dml0eSBtb25pdG9yISIsIF9fZnVuY19fKTsKKwkJCXJldHVybiByZXQ7CisJCX0KKwl9CisKKwkv KiBjb252IFBQX1NNQ19QT1dFUl9QUk9GSUxFKiB0byBXT1JLTE9BRF9QUExJQl8qX0JJVCAqLwor CXdvcmtsb2FkX3R5cGUgPQorCQlzbXVfdjExXzBfY29udl9wb3dlcl9wcm9maWxlX3RvX3BwbGli X3dvcmtsb2FkKHNtdS0+cG93ZXJfcHJvZmlsZV9tb2RlKTsKKwlzbXVfc2VuZF9zbWNfbXNnX3dp dGhfcGFyYW0oc211LCBTTVVfTVNHX1NldFdvcmtsb2FkTWFzaywKKwkJCQkgICAgMSA8PCB3b3Jr bG9hZF90eXBlKTsKKworCXJldHVybiByZXQ7Cit9CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc211 X2Z1bmNzIHNtdV92MTFfMF9mdW5jcyA9IHsKIAkuaW5pdF9taWNyb2NvZGUgPSBzbXVfdjExXzBf aW5pdF9taWNyb2NvZGUsCiAJLmxvYWRfbWljcm9jb2RlID0gc211X3YxMV8wX2xvYWRfbWljcm9j b2RlLApAQCAtMTI3NCw2ICsxNTYyLDExIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc211X2Z1bmNz IHNtdV92MTFfMF9mdW5jcyA9IHsKIAkuZGlzcGxheV9jbG9ja192b2x0YWdlX3JlcXVlc3QgPSBz bXVfdjExXzBfZGlzcGxheV9jbG9ja192b2x0YWdlX3JlcXVlc3QsCiAJLnNldF93YXRlcm1hcmtz X2Zvcl9jbG9ja19yYW5nZXMgPSBzbXVfdjExXzBfc2V0X3dhdGVybWFya3NfZm9yX2Nsb2NrX3Jh bmdlcywKIAkuc2V0X29kOF9kZWZhdWx0X3NldHRpbmdzID0gc211X3YxMV8wX3NldF9vZDhfZGVm YXVsdF9zZXR0aW5ncywKKwkuZ2V0X2FjdGl2aXR5X21vbml0b3JfY29lZmYgPSBzbXVfdjExXzBf Z2V0X2FjdGl2aXR5X21vbml0b3JfY29lZmYsCisJLnNldF9hY3Rpdml0eV9tb25pdG9yX2NvZWZm ID0gc211X3YxMV8wX3NldF9hY3Rpdml0eV9tb25pdG9yX2NvZWZmLAorCS5jb252X3Bvd2VyX3By b2ZpbGVfdG9fcHBsaWJfd29ya2xvYWQgPSBzbXVfdjExXzBfY29udl9wb3dlcl9wcm9maWxlX3Rv X3BwbGliX3dvcmtsb2FkLAorCS5nZXRfcG93ZXJfcHJvZmlsZV9tb2RlID0gc211X3YxMV8wX2dl dF9wb3dlcl9wcm9maWxlX21vZGUsCisJLnNldF9wb3dlcl9wcm9maWxlX21vZGUgPSBzbXVfdjEx XzBfc2V0X3Bvd2VyX3Byb2ZpbGVfbW9kZSwKIH07CiAKIHZvaWQgc211X3YxMV8wX3NldF9zbXVf ZnVuY3Moc3RydWN0IHNtdV9jb250ZXh0ICpzbXUpCi0tIAoyLjcuNAoKX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KYW1kLWdmeCBtYWlsaW5nIGxpc3QKYW1k LWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcv bWFpbG1hbi9saXN0aW5mby9hbWQtZ2Z4Cg==