From kde-kimageshop Thu May 21 14:38:52 2015 From: Dmitry Kazakov Date: Thu, 21 May 2015 14:38:52 +0000 To: kde-kimageshop Subject: [calligra/calligra/2.9] krita: [FEATURE] Implemented saving of layer styles into PSD Message-Id: X-MARC-Message: https://marc.info/?l=kde-kimageshop&m=143221933327421 R2l0IGNvbW1pdCA0MjdmNmRiYWMzZTM2YjliYzY0MjYxYTBhYzJlNGNhM2EwMDYxMGEyIGJ5IERt aXRyeSBLYXpha292LgpDb21taXR0ZWQgb24gMjEvMDUvMjAxNSBhdCAxMzoyNC4KUHVzaGVkIGJ5 IGRrYXpha292IGludG8gYnJhbmNoICdjYWxsaWdyYS8yLjknLgoKW0ZFQVRVUkVdIEltcGxlbWVu dGVkIHNhdmluZyBvZiBsYXllciBzdHlsZXMgaW50byBQU0QKCihpbmNsdWRpbmcgZW1iZWRkZWQg cGF0dGVybnMpCgpDQzpraW1hZ2VzaG9wQGtkZS5vcmcKCk0gICsxMyAgIC0wICAgIGtyaXRhL2lt YWdlL2tpc19kZWJ1Zy5jcHAKTSAgKzEwICAgLTAgICAga3JpdGEvaW1hZ2Uva2lzX2RlYnVnLmgK TSAgKzIxICAgLTAgICAga3JpdGEvaW1hZ2Uva2lzX2RvbV91dGlscy5jcHAKTSAgKzUgICAgLTAg ICAga3JpdGEvaW1hZ2Uva2lzX2RvbV91dGlscy5oCk0gICszICAgIC0xICAgIGtyaXRhL2xpYnBz ZC9hc2wva2lzX2FzbF9wYXR0ZXJuc193cml0ZXIuaApNICArNzUgICAtMjUgICBrcml0YS9saWJw c2QvYXNsL2tpc19hc2xfd3JpdGVyLmNwcApNICArMSAgICAtMCAgICBrcml0YS9saWJwc2QvYXNs L2tpc19hc2xfd3JpdGVyLmgKTSAgKzYwICAgLTEgICAga3JpdGEvcGx1Z2lucy9mb3JtYXRzL3Bz ZC9wc2RfYWRkaXRpb25hbF9sYXllcl9pbmZvX2Jsb2NrLmNwcApNICArNiAgICAtMCAgICBrcml0 YS9wbHVnaW5zL2Zvcm1hdHMvcHNkL3BzZF9hZGRpdGlvbmFsX2xheWVyX2luZm9fYmxvY2suaApN ICArMjMgICAtMzAgICBrcml0YS9wbHVnaW5zL2Zvcm1hdHMvcHNkL3BzZF9sYXllcl9yZWNvcmQu Y3BwCk0gICsyICAgIC0yICAgIGtyaXRhL3BsdWdpbnMvZm9ybWF0cy9wc2QvcHNkX2xheWVyX3Jl Y29yZC5oCk0gICsxNzYgIC0xMjYgIGtyaXRhL3BsdWdpbnMvZm9ybWF0cy9wc2QvcHNkX2xheWVy X3NlY3Rpb24uY3BwCk0gICsxICAgIC0xICAgIGtyaXRhL3BsdWdpbnMvZm9ybWF0cy9wc2QvcHNk X2xheWVyX3NlY3Rpb24uaApNICArNTQgICAtMSAgICBrcml0YS9wbHVnaW5zL2Zvcm1hdHMvcHNk L3Rlc3RzL2tpc19wc2RfdGVzdC5jcHAKTSAgKzIgICAgLTAgICAga3JpdGEvcGx1Z2lucy9mb3Jt YXRzL3BzZC90ZXN0cy9raXNfcHNkX3Rlc3QuaApNICArNTIgICAtNSAgICBrcml0YS91aS9raXNf YXNsX2xheWVyX3N0eWxlX3NlcmlhbGl6ZXIuY3BwCk0gICs1ICAgIC0xICAgIGtyaXRhL3VpL2tp c19hc2xfbGF5ZXJfc3R5bGVfc2VyaWFsaXplci5oCgpodHRwOi8vY29tbWl0cy5rZGUub3JnL2Nh bGxpZ3JhLzQyN2Y2ZGJhYzNlMzZiOWJjNjQyNjFhMGFjMmU0Y2EzYTAwNjEwYTIKCmRpZmYgLS1n aXQgYS9rcml0YS9pbWFnZS9raXNfZGVidWcuY3BwIGIva3JpdGEvaW1hZ2Uva2lzX2RlYnVnLmNw cAppbmRleCBmYTgzNTE1Li5jYjcwYmU5IDEwMDY0NAotLS0gYS9rcml0YS9pbWFnZS9raXNfZGVi dWcuY3BwCisrKyBiL2tyaXRhL2ltYWdlL2tpc19kZWJ1Zy5jcHAKQEAgLTE4LDYgKzE4LDggQEAK IAogI2luY2x1ZGUgImtpc19kZWJ1Zy5oIgogCisjaW5jbHVkZSA8c3RyaW5nPgorCiAjaW5jbHVk ZSA8UVJlY3Q+CiAjaW5jbHVkZSA8UVN0cmluZz4KICNpbmNsdWRlIDxRSW1hZ2U+CkBAIC00NSwz ICs0NywxNCBAQCB2b2lkIGtpc19kZWJ1Z19zYXZlX2RldmljZV9pbmNyZW1lbnRhbChLaXNQYWlu dERldmljZVNQIGRldmljZSwKICAgICBxRGVidWcoKSA8PCAiRHVtcGluZzoiIDw8IGZpbGVuYW1l OwogICAgIGRldmljZS0+Y29udmVydFRvUUltYWdlKDAsIHNhdmVSZWN0KS5zYXZlKGZpbGVuYW1l KTsKIH0KKworY29uc3QgY2hhciogX19tZXRob2ROYW1lKGNvbnN0IGNoYXIgKl9wcmV0dHlGdW5j dGlvbikKK3sKKyAgICBzdGQ6OnN0cmluZyBwcmV0dHlGdW5jdGlvbihfcHJldHR5RnVuY3Rpb24p OworCisgICAgc2l6ZV90IGNvbG9ucyA9IHByZXR0eUZ1bmN0aW9uLmZpbmQoIjo6Iik7CisgICAg c2l6ZV90IGJlZ2luID0gcHJldHR5RnVuY3Rpb24uc3Vic3RyKDAsY29sb25zKS5yZmluZCgiICIp ICsgMTsKKyAgICBzaXplX3QgZW5kID0gcHJldHR5RnVuY3Rpb24ucmZpbmQoIigiKSAtIGJlZ2lu OworCisgICAgcmV0dXJuIHN0ZDo6c3RyaW5nKHByZXR0eUZ1bmN0aW9uLnN1YnN0cihiZWdpbixl bmQpICsgIigpIikuY19zdHIoKTsKK30KZGlmZiAtLWdpdCBhL2tyaXRhL2ltYWdlL2tpc19kZWJ1 Zy5oIGIva3JpdGEvaW1hZ2Uva2lzX2RlYnVnLmgKaW5kZXggOGU5MzZhZC4uMDhkMTFjMSAxMDA2 NDQKLS0tIGEva3JpdGEvaW1hZ2Uva2lzX2RlYnVnLmgKKysrIGIva3JpdGEvaW1hZ2Uva2lzX2Rl YnVnLmgKQEAgLTEzNyw0ICsxMzcsMTQgQEAgdm9pZCBLUklUQUlNQUdFX0VYUE9SVCBraXNfZGVi dWdfc2F2ZV9kZXZpY2VfaW5jcmVtZW50YWwoS2lzUGFpbnREZXZpY2VTUCBkZXZpY2UKICAgICB9 IHdoaWxlKDApCiAKIAorCisjaWZkZWYgX19HTlVDX18KK0tSSVRBSU1BR0VfRVhQT1JUIGNvbnN0 IGNoYXIqIF9fbWV0aG9kTmFtZShjb25zdCBjaGFyICpwcmV0dHlGdW5jdGlvbik7CisjZGVmaW5l IF9fTUVUSE9EX05BTUVfXyBfX21ldGhvZE5hbWUoX19QUkVUVFlfRlVOQ1RJT05fXykKKyNlbHNl CisjZGVmaW5lIF9fTUVUSE9EX05BTUVfXyAiPHVua25vd24+Ojx1bmtub3duPiIKKyNlbmRpZgor CisjZGVmaW5lIFBSRVBFTkRfTUVUSE9EKG1zZykgUVN0cmluZygiJTE6ICUyIikuYXJnKF9fTUVU SE9EX05BTUVfXykuYXJnKG1zZykKKwogI2luY2x1ZGUgImtpc19hc3NlcnQuaCIKZGlmZiAtLWdp dCBhL2tyaXRhL2ltYWdlL2tpc19kb21fdXRpbHMuY3BwIGIva3JpdGEvaW1hZ2Uva2lzX2RvbV91 dGlscy5jcHAKaW5kZXggYTFiNzNjOC4uODhkNzcyNCAxMDA2NDQKLS0tIGEva3JpdGEvaW1hZ2Uv a2lzX2RvbV91dGlscy5jcHAKKysrIGIva3JpdGEvaW1hZ2Uva2lzX2RvbV91dGlscy5jcHAKQEAg LTIwOSw1ICsyMDksMjYgQEAgYm9vbCBsb2FkVmFsdWUoY29uc3QgUURvbUVsZW1lbnQgJmUsIFFU cmFuc2Zvcm0gKnQpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK1FEb21FbGVtZW50IGZpbmRFbGVt ZW50QnlBdHRpYnV0ZShRRG9tTm9kZSBwYXJlbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgY29uc3QgUVN0cmluZyAmdGFnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGNvbnN0IFFTdHJpbmcgJmF0dHJpYnV0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBjb25zdCBRU3RyaW5nICZrZXkpCit7CisgICAgUURvbU5vZGUgbm9kZSA9IHBh cmVudC5maXJzdENoaWxkKCk7CisKKyAgICB3aGlsZSAoIW5vZGUuaXNOdWxsKCkpIHsKKyAgICAg ICAgUURvbUVsZW1lbnQgZWwgPSBub2RlLnRvRWxlbWVudCgpOworCisgICAgICAgIGlmICghZWwu aXNOdWxsKCkgJiYgZWwudGFnTmFtZSgpID09IHRhZykgeworICAgICAgICAgICAgUVN0cmluZyB2 YWx1ZSA9IGVsLmF0dHJpYnV0ZShhdHRyaWJ1dGUsICI8dW5kZWZpbmVkPiIpOworICAgICAgICAg ICAgaWYgKHZhbHVlID09IGtleSkgcmV0dXJuIGVsOworICAgICAgICB9CisKKyAgICAgICAgbm9k ZSA9IG5vZGUubmV4dFNpYmxpbmcoKTsKKyAgICB9CisKKyAgICByZXR1cm4gUURvbUVsZW1lbnQo KTsKK30KKwogCiB9CmRpZmYgLS1naXQgYS9rcml0YS9pbWFnZS9raXNfZG9tX3V0aWxzLmggYi9r cml0YS9pbWFnZS9raXNfZG9tX3V0aWxzLmgKaW5kZXggYWU5NjgyNy4uMmQyOWJlNCAxMDA2NDQK LS0tIGEva3JpdGEvaW1hZ2Uva2lzX2RvbV91dGlscy5oCisrKyBiL2tyaXRhL2ltYWdlL2tpc19k b21fdXRpbHMuaApAQCAtMjI1LDYgKzIyNSwxMSBAQCBib29sIGxvYWRWYWx1ZShjb25zdCBRRG9t RWxlbWVudCAmcGFyZW50LCBjb25zdCBRU3RyaW5nICZ0YWcsIFQgKnZhbHVlKQogICAgIHJldHVy biBsb2FkVmFsdWUoZSwgdmFsdWUpOwogfQogCitLUklUQUlNQUdFX0VYUE9SVCBRRG9tRWxlbWVu dCBmaW5kRWxlbWVudEJ5QXR0aWJ1dGUoUURvbU5vZGUgcGFyZW50LAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFFTdHJpbmcgJnRhZywK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z dCBRU3RyaW5nICZhdHRyaWJ1dGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgY29uc3QgUVN0cmluZyAma2V5KTsKKwogfQogCiAjZW5kaWYgLyog X19LSVNfRE9NX1VUSUxTX0ggKi8KZGlmZiAtLWdpdCBhL2tyaXRhL2xpYnBzZC9hc2wva2lzX2Fz bF9wYXR0ZXJuc193cml0ZXIuaCBiL2tyaXRhL2xpYnBzZC9hc2wva2lzX2FzbF9wYXR0ZXJuc193 cml0ZXIuaAppbmRleCAyYTdhOWFlLi5hM2Q3ZWRmIDEwMDY0NAotLS0gYS9rcml0YS9saWJwc2Qv YXNsL2tpc19hc2xfcGF0dGVybnNfd3JpdGVyLmgKKysrIGIva3JpdGEvbGlicHNkL2FzbC9raXNf YXNsX3BhdHRlcm5zX3dyaXRlci5oCkBAIC0xOSwxMyArMTksMTUgQEAKICNpZm5kZWYgX19LSVNf QVNMX1BBVFRFUk5TX1dSSVRFUl9ICiAjZGVmaW5lIF9fS0lTX0FTTF9QQVRURVJOU19XUklURVJf SAogCisjaW5jbHVkZSAibGlia2lzcHNkX2V4cG9ydC5oIgorCiBjbGFzcyBRRG9tRG9jdW1lbnQ7 CiBjbGFzcyBRSU9EZXZpY2U7CiAKIGNsYXNzIEtvUGF0dGVybjsKIAogCi1jbGFzcyBLaXNBc2xQ YXR0ZXJuc1dyaXRlcgorY2xhc3MgTElCS0lTUFNEX0VYUE9SVCBLaXNBc2xQYXR0ZXJuc1dyaXRl cgogewogcHVibGljOgogICAgIEtpc0FzbFBhdHRlcm5zV3JpdGVyKGNvbnN0IFFEb21Eb2N1bWVu dCAmZG9jLCBRSU9EZXZpY2UgKmRldmljZSk7CmRpZmYgLS1naXQgYS9rcml0YS9saWJwc2QvYXNs L2tpc19hc2xfd3JpdGVyLmNwcCBiL2tyaXRhL2xpYnBzZC9hc2wva2lzX2FzbF93cml0ZXIuY3Bw CmluZGV4IGIxYWE0ZDguLjk1Mzg2NDYgMTAwNjQ0Ci0tLSBhL2tyaXRhL2xpYnBzZC9hc2wva2lz X2FzbF93cml0ZXIuY3BwCisrKyBiL2tyaXRhL2xpYnBzZC9hc2wva2lzX2FzbF93cml0ZXIuY3Bw CkBAIC0xNDMsNiArMTQzLDQ1IEBAIGludCBjYWxjdWxhdGVOdW1TdHlsZXMoY29uc3QgUURvbUVs ZW1lbnQgJnJvb3QpCiAgICAgcmV0dXJuIG51bVN0eWxlczsKIH0KIAordm9pZCB3cml0ZVNpbmds ZVN0eWxlKFFJT0RldmljZSAqZGV2aWNlLCBRRG9tTm9kZSBjaGlsZCkKK3sKKyAgICBLaXNBc2xX cml0ZXJVdGlsczo6T2Zmc2V0U3RyZWFtUHVzaGVyPHF1aW50MzI+IHRoZU9ubHlTdHlsZVNpemVG aWVsZChkZXZpY2UpOworCisgICAgS0lTX0FTU0VSVF9SRUNPVkVSX1JFVFVSTighY2hpbGQuaXNO dWxsKCkpOworCisgICAgeworICAgICAgICBxdWludDMyIHN0eWxlc0Zvcm1hdFZlcnNpb24gPSAx NjsKKyAgICAgICAgU0FGRV9XUklURV9FWChkZXZpY2UsIHN0eWxlc0Zvcm1hdFZlcnNpb24pOwor ICAgIH0KKworICAgIHdoaWxlICghY2hpbGQuaXNOdWxsKCkpIHsKKyAgICAgICAgUURvbUVsZW1l bnQgZWwgPSBjaGlsZC50b0VsZW1lbnQoKTsKKyAgICAgICAgUVN0cmluZyBrZXkgPSBlbC5hdHRy aWJ1dGUoImtleSIsICIiKTsKKworICAgICAgICBpZiAoa2V5ICE9ICJQYXR0ZXJucyIpIGJyZWFr OworCisgICAgICAgIGNoaWxkID0gY2hpbGQubmV4dFNpYmxpbmcoKTsKKyAgICB9CisKKyAgICBw YXJzZUVsZW1lbnQoY2hpbGQudG9FbGVtZW50KCksIGRldmljZSk7CisgICAgY2hpbGQgPSBjaGls ZC5uZXh0U2libGluZygpOworCisgICAgeworICAgICAgICBxdWludDMyIHN0eWxlc0Zvcm1hdFZl cnNpb24gPSAxNjsKKyAgICAgICAgU0FGRV9XUklURV9FWChkZXZpY2UsIHN0eWxlc0Zvcm1hdFZl cnNpb24pOworICAgIH0KKworICAgIHBhcnNlRWxlbWVudChjaGlsZC50b0VsZW1lbnQoKSwgZGV2 aWNlKTsKKyAgICBjaGlsZCA9IGNoaWxkLm5leHRTaWJsaW5nKCk7CisKKyAgICAvLyBBU0wgZmls ZXMnIHNpemUgc2hvdWxkIGJlIDQtYnl0ZXMgYWxpZ25lZAorICAgIGNvbnN0IHFpbnQ2NCBwYWRk aW5nU2l6ZSA9IDQgLSAoZGV2aWNlLT5wb3MoKSAmIDB4Myk7CisgICAgaWYgKHBhZGRpbmdTaXpl ICE9IDQpIHsKKyAgICAgICAgUUJ5dGVBcnJheSBwYWRkaW5nKHBhZGRpbmdTaXplLCAnXDAnKTsK KyAgICAgICAgZGV2aWNlLT53cml0ZShwYWRkaW5nKTsKKyAgICB9Cit9CisKIHZvaWQgd3JpdGVG aWxlSW1wbChRSU9EZXZpY2UgKmRldmljZSwgY29uc3QgUURvbURvY3VtZW50ICZkb2MpCiB7CiAg ICAgewpAQCAtMTgzLDQxICsyMjIsNDcgQEAgdm9pZCB3cml0ZUZpbGVJbXBsKFFJT0RldmljZSAq ZGV2aWNlLCBjb25zdCBRRG9tRG9jdW1lbnQgJmRvYykKICAgICBRRG9tTm9kZSBjaGlsZCA9IHJv b3QuZmlyc3RDaGlsZCgpOwogCiAgICAgZm9yIChpbnQgc3R5bGVJbmRleCA9IDA7IHN0eWxlSW5k ZXggPCBudW1TdHlsZXM7IHN0eWxlSW5kZXgrKykgewotICAgICAgICBLaXNBc2xXcml0ZXJVdGls czo6T2Zmc2V0U3RyZWFtUHVzaGVyPHF1aW50MzI+IHRoZU9ubHlTdHlsZVNpemVGaWVsZChkZXZp Y2UpOworICAgICAgICB3cml0ZVNpbmdsZVN0eWxlKGRldmljZSwgY2hpbGQpOworICAgIH0KK30K IAotICAgICAgICBLSVNfQVNTRVJUX1JFQ09WRVJfUkVUVVJOKCFjaGlsZC5pc051bGwoKSk7Cit2 b2lkIHdyaXRlUHNkTGZ4MlNlY3Rpb25JbXBsKFFJT0RldmljZSAqZGV2aWNlLCBjb25zdCBRRG9t RG9jdW1lbnQgJmRvYykKK3sKKyAgICBRRG9tRWxlbWVudCByb290ID0gZG9jLmRvY3VtZW50RWxl bWVudCgpOworICAgIEtJU19BU1NFUlRfUkVDT1ZFUl9SRVRVUk4ocm9vdC50YWdOYW1lKCkgPT0g ImFzbCIpOwogCi0gICAgICAgIHsKLSAgICAgICAgICAgIHF1aW50MzIgc3R5bGVzRm9ybWF0VmVy c2lvbiA9IDE2OwotICAgICAgICAgICAgU0FGRV9XUklURV9FWChkZXZpY2UsIHN0eWxlc0Zvcm1h dFZlcnNpb24pOwotICAgICAgICB9CisgICAgaW50IG51bVN0eWxlcyA9IGNhbGN1bGF0ZU51bVN0 eWxlcyhyb290KTsKKyAgICBLSVNfQVNTRVJUX1JFQ09WRVJfUkVUVVJOKG51bVN0eWxlcyA9PSAx KTsKIAotICAgICAgICB3aGlsZSAoIWNoaWxkLmlzTnVsbCgpKSB7Ci0gICAgICAgICAgICBRRG9t RWxlbWVudCBlbCA9IGNoaWxkLnRvRWxlbWVudCgpOwotICAgICAgICAgICAgUVN0cmluZyBrZXkg PSBlbC5hdHRyaWJ1dGUoImtleSIsICIiKTsKKyAgICB7CisgICAgICAgIHF1aW50MzIgb2JqZWN0 RWZmZWN0c1ZlcnNpb24gPSAwOworICAgICAgICBTQUZFX1dSSVRFX0VYKGRldmljZSwgb2JqZWN0 RWZmZWN0c1ZlcnNpb24pOworICAgIH0KIAotICAgICAgICAgICAgaWYgKGtleSAhPSAiUGF0dGVy bnMiKSBicmVhazsKKyAgICB7CisgICAgICAgIHF1aW50MzIgZGVzY3JpcHRvclZlcnNpb24gPSAx NjsKKyAgICAgICAgU0FGRV9XUklURV9FWChkZXZpY2UsIGRlc2NyaXB0b3JWZXJzaW9uKTsKKyAg ICB9CiAKLSAgICAgICAgICAgIGNoaWxkID0gY2hpbGQubmV4dFNpYmxpbmcoKTsKLSAgICAgICAg fQorICAgIFFEb21Ob2RlIGNoaWxkID0gcm9vdC5maXJzdENoaWxkKCk7CiAKLSAgICAgICAgcGFy c2VFbGVtZW50KGNoaWxkLnRvRWxlbWVudCgpLCBkZXZpY2UpOwotICAgICAgICBjaGlsZCA9IGNo aWxkLm5leHRTaWJsaW5nKCk7CisgICAgd2hpbGUgKCFjaGlsZC5pc051bGwoKSkgeworICAgICAg ICBRRG9tRWxlbWVudCBlbCA9IGNoaWxkLnRvRWxlbWVudCgpOworICAgICAgICBRU3RyaW5nIGtl eSA9IGVsLmF0dHJpYnV0ZSgia2V5IiwgIiIpOwogCi0gICAgICAgIHsKLSAgICAgICAgICAgIHF1 aW50MzIgc3R5bGVzRm9ybWF0VmVyc2lvbiA9IDE2OwotICAgICAgICAgICAgU0FGRV9XUklURV9F WChkZXZpY2UsIHN0eWxlc0Zvcm1hdFZlcnNpb24pOwotICAgICAgICB9CisgICAgICAgIGlmIChr ZXkgIT0gIlBhdHRlcm5zIikgYnJlYWs7CiAKLSAgICAgICAgcGFyc2VFbGVtZW50KGNoaWxkLnRv RWxlbWVudCgpLCBkZXZpY2UpOwogICAgICAgICBjaGlsZCA9IGNoaWxkLm5leHRTaWJsaW5nKCk7 CisgICAgfQogCi0gICAgICAgIC8vIEFTTCBmaWxlcycgc2l6ZSBzaG91bGQgYmUgNC1ieXRlcyBh bGlnbmVkCi0gICAgICAgIGNvbnN0IHFpbnQ2NCBwYWRkaW5nU2l6ZSA9IDQgLSAoZGV2aWNlLT5w b3MoKSAmIDB4Myk7Ci0gICAgICAgIGlmIChwYWRkaW5nU2l6ZSAhPSA0KSB7Ci0gICAgICAgICAg ICBRQnl0ZUFycmF5IHBhZGRpbmcocGFkZGluZ1NpemUsICdcMCcpOwotICAgICAgICAgICAgZGV2 aWNlLT53cml0ZShwYWRkaW5nKTsKLSAgICAgICAgfQorICAgIHBhcnNlRWxlbWVudChjaGlsZC50 b0VsZW1lbnQoKSwgZGV2aWNlKTsKKyAgICBjaGlsZCA9IGNoaWxkLm5leHRTaWJsaW5nKCk7CisK KyAgICAvLyBBU0wgZmlsZXMnIHNpemUgc2hvdWxkIGJlIDQtYnl0ZXMgYWxpZ25lZAorICAgIGNv bnN0IHFpbnQ2NCBwYWRkaW5nU2l6ZSA9IDQgLSAoZGV2aWNlLT5wb3MoKSAmIDB4Myk7CisgICAg aWYgKHBhZGRpbmdTaXplICE9IDQpIHsKKyAgICAgICAgUUJ5dGVBcnJheSBwYWRkaW5nKHBhZGRp bmdTaXplLCAnXDAnKTsKKyAgICAgICAgZGV2aWNlLT53cml0ZShwYWRkaW5nKTsKICAgICB9CiB9 CiAKQEAgLTIzMSwzICsyNzYsOCBAQCB2b2lkIEtpc0FzbFdyaXRlcjo6d3JpdGVGaWxlKFFJT0Rl dmljZSAqZGV2aWNlLCBjb25zdCBRRG9tRG9jdW1lbnQgJmRvYykKICAgICAgICAgcVdhcm5pbmco KSA8PCAiV0FSTklORzogQVNMOiIgPDwgZS53aGF0KCk7CiAgICAgfQogfQorCit2b2lkIEtpc0Fz bFdyaXRlcjo6d3JpdGVQc2RMZngyU2VjdGlvbkV4KFFJT0RldmljZSAqZGV2aWNlLCBjb25zdCBR RG9tRG9jdW1lbnQgJmRvYykKK3sKKyAgICBQcml2YXRlOjp3cml0ZVBzZExmeDJTZWN0aW9uSW1w bChkZXZpY2UsIGRvYyk7Cit9CmRpZmYgLS1naXQgYS9rcml0YS9saWJwc2QvYXNsL2tpc19hc2xf d3JpdGVyLmggYi9rcml0YS9saWJwc2QvYXNsL2tpc19hc2xfd3JpdGVyLmgKaW5kZXggZWQ3ZWYw Yy4uNzllM2UyMiAxMDA2NDQKLS0tIGEva3JpdGEvbGlicHNkL2FzbC9raXNfYXNsX3dyaXRlci5o CisrKyBiL2tyaXRhL2xpYnBzZC9hc2wva2lzX2FzbF93cml0ZXIuaApAQCAtMjksNiArMjksNyBA QCBjbGFzcyBMSUJLSVNQU0RfRVhQT1JUIEtpc0FzbFdyaXRlcgogewogcHVibGljOgogICAgIHZv aWQgd3JpdGVGaWxlKFFJT0RldmljZSAqZGV2aWNlLCBjb25zdCBRRG9tRG9jdW1lbnQgJmRvYyk7 CisgICAgdm9pZCB3cml0ZVBzZExmeDJTZWN0aW9uRXgoUUlPRGV2aWNlICpkZXZpY2UsIGNvbnN0 IFFEb21Eb2N1bWVudCAmZG9jKTsKIH07CiAKICNlbmRpZiAvKiBfX0tJU19BU0xfV1JJVEVSX0gg Ki8KZGlmZiAtLWdpdCBhL2tyaXRhL3BsdWdpbnMvZm9ybWF0cy9wc2QvcHNkX2FkZGl0aW9uYWxf bGF5ZXJfaW5mb19ibG9jay5jcHAgYi9rcml0YS9wbHVnaW5zL2Zvcm1hdHMvcHNkL3BzZF9hZGRp dGlvbmFsX2xheWVyX2luZm9fYmxvY2suY3BwCmluZGV4IDVmNWFhOWUuLjFjMDhkMDkgMTAwNjQ0 Ci0tLSBhL2tyaXRhL3BsdWdpbnMvZm9ybWF0cy9wc2QvcHNkX2FkZGl0aW9uYWxfbGF5ZXJfaW5m b19ibG9jay5jcHAKKysrIGIva3JpdGEvcGx1Z2lucy9mb3JtYXRzL3BzZC9wc2RfYWRkaXRpb25h bF9sYXllcl9pbmZvX2Jsb2NrLmNwcApAQCAtMjQsNiArMjQsOSBAQAogCiAjaW5jbHVkZSA8YXNs L2tpc19hc2xfcmVhZGVyX3V0aWxzLmg+CiAjaW5jbHVkZSA8YXNsL2tpc19hc2xfcmVhZGVyLmg+ CisjaW5jbHVkZSA8YXNsL2tpc19hc2xfd3JpdGVyX3V0aWxzLmg+CisjaW5jbHVkZSA8YXNsL2tp c19hc2xfd3JpdGVyLmg+CisjaW5jbHVkZSA8YXNsL2tpc19hc2xfcGF0dGVybnNfd3JpdGVyLmg+ CiAKIAogUHNkQWRkaXRpb25hbExheWVySW5mb0Jsb2NrOjpQc2RBZGRpdGlvbmFsTGF5ZXJJbmZv QmxvY2soY29uc3QgUFNESGVhZGVyJiBoZWFkZXIpCkBAIC0xNjcsNyArMTcwLDYgQEAgdm9pZCBQ c2RBZGRpdGlvbmFsTGF5ZXJJbmZvQmxvY2s6OnJlYWRJbXBsKFFJT0RldmljZSogaW8pCiAgICAg ICAgIGVsc2UgaWYgKGtleSA9PSAiUGF0dCIgfHwga2V5ID09ICJQYXQyIiB8fCBrZXkgPT0gIlBh dDMiKSB7CiAgICAgICAgICAgICBLaXNBc2xSZWFkZXIgcmVhZGVyOwogICAgICAgICAgICAgUURv bURvY3VtZW50IHBhdHRlcm4gPSByZWFkZXIucmVhZFBzZFNlY3Rpb25QYXR0ZXJuKGlvLCBibG9j a1NpemUpOwotCiAgICAgICAgICAgICBlbWJlZGRlZFBhdHRlcm5zIDw8IHBhdHRlcm47CiAgICAg ICAgIH0KICAgICAgICAgZWxzZSBpZiAoa2V5ID09ICJBbm5vIikgewpAQCAtMzM4LDMgKzM0MCw2 MCBAQCBib29sIFBzZEFkZGl0aW9uYWxMYXllckluZm9CbG9jazo6dmFsaWQoKQogCiAgICAgcmV0 dXJuIHRydWU7CiB9CisKK3ZvaWQgUHNkQWRkaXRpb25hbExheWVySW5mb0Jsb2NrOjp3cml0ZUx1 bmlCbG9ja0V4KFFJT0RldmljZSogaW8sIGNvbnN0IFFTdHJpbmcgJmxheWVyTmFtZSkKK3sKKyAg ICBLaXNBc2xXcml0ZXJVdGlsczo6d3JpdGVGaXhlZFN0cmluZygiOEJJTSIsIGlvKTsKKyAgICBL aXNBc2xXcml0ZXJVdGlsczo6d3JpdGVGaXhlZFN0cmluZygibHVuaSIsIGlvKTsKKyAgICBLaXNB c2xXcml0ZXJVdGlsczo6T2Zmc2V0U3RyZWFtUHVzaGVyPHF1aW50MzI+IGxheWVyTmFtZVNpemVU YWcoaW8sIDIpOworICAgIEtpc0FzbFdyaXRlclV0aWxzOjp3cml0ZVVuaWNvZGVTdHJpbmcobGF5 ZXJOYW1lLCBpbyk7Cit9CisKK3ZvaWQgUHNkQWRkaXRpb25hbExheWVySW5mb0Jsb2NrOjp3cml0 ZUxzY3RCbG9ja0V4KFFJT0RldmljZSogaW8sIHBzZF9zZWN0aW9uX3R5cGUgc2VjdGlvblR5cGUs IGJvb2wgaXNQYXNzVGhyb3VnaCwgY29uc3QgUVN0cmluZyAmYmxlbmRNb2RlS2V5KQoreworICAg IEtpc0FzbFdyaXRlclV0aWxzOjp3cml0ZUZpeGVkU3RyaW5nKCI4QklNIiwgaW8pOworICAgIEtp c0FzbFdyaXRlclV0aWxzOjp3cml0ZUZpeGVkU3RyaW5nKCJsc2N0IiwgaW8pOworICAgIEtpc0Fz bFdyaXRlclV0aWxzOjpPZmZzZXRTdHJlYW1QdXNoZXI8cXVpbnQzMj4gc2VjdGlvblR5cGVTaXpl VGFnKGlvLCAyKTsKKyAgICBTQUZFX1dSSVRFX0VYKGlvLCAocXVpbnQzMilzZWN0aW9uVHlwZSk7 CisKKyAgICBRU3RyaW5nIHJlYWxCbGVuZE1vZGVLZXkgPSBpc1Bhc3NUaHJvdWdoID8gUVN0cmlu ZygicGFzcyIpIDogYmxlbmRNb2RlS2V5OworCisgICAgS2lzQXNsV3JpdGVyVXRpbHM6OndyaXRl Rml4ZWRTdHJpbmcoIjhCSU0iLCBpbyk7CisgICAgS2lzQXNsV3JpdGVyVXRpbHM6OndyaXRlRml4 ZWRTdHJpbmcocmVhbEJsZW5kTW9kZUtleSwgaW8pOworfQorCit2b2lkIFBzZEFkZGl0aW9uYWxM YXllckluZm9CbG9jazo6d3JpdGVMZngyQmxvY2tFeChRSU9EZXZpY2UqIGlvLCBjb25zdCBRRG9t RG9jdW1lbnQgJnN0eWxlc1htbERvYykKK3sKKyAgICBLaXNBc2xXcml0ZXJVdGlsczo6d3JpdGVG aXhlZFN0cmluZygiOEJJTSIsIGlvKTsKKyAgICBLaXNBc2xXcml0ZXJVdGlsczo6d3JpdGVGaXhl ZFN0cmluZygibGZ4MiIsIGlvKTsKKyAgICBLaXNBc2xXcml0ZXJVdGlsczo6T2Zmc2V0U3RyZWFt UHVzaGVyPHF1aW50MzI+IGxmeDJTaXplVGFnKGlvLCAyKTsKKworICAgIHRyeSB7CisgICAgICAg IEtpc0FzbFdyaXRlciB3cml0ZXI7CisgICAgICAgIHdyaXRlci53cml0ZVBzZExmeDJTZWN0aW9u RXgoaW8sIHN0eWxlc1htbERvYyk7CisKKyAgICB9IGNhdGNoIChLaXNBc2xXcml0ZXJVdGlsczo6 QVNMV3JpdGVFeGNlcHRpb24gJmUpIHsKKyAgICAgICAgcVdhcm5pbmcoKSA8PCAiV0FSTklORzog Q291bGRuJ3Qgc2F2ZSBsYXllciBzdHlsZSBsZngyIGJsb2NrOiIgPDwgUFJFUEVORF9NRVRIT0Qo ZS53aGF0KCkpOworCisgICAgICAgIC8vIFRPRE86IG1ha2UgdGhpcyBlcnJvciByZWNvdmVyYWJs ZSEKKyAgICAgICAgdGhyb3cgZTsKKyAgICB9Cit9CisKK3ZvaWQgUHNkQWRkaXRpb25hbExheWVy SW5mb0Jsb2NrOjp3cml0ZVBhdHRCbG9ja0V4KFFJT0RldmljZSogaW8sIGNvbnN0IFFEb21Eb2N1 bWVudCAmcGF0dGVybnNYbWxEb2MpCit7CisgICAgS2lzQXNsV3JpdGVyVXRpbHM6OndyaXRlRml4 ZWRTdHJpbmcoIjhCSU0iLCBpbyk7CisgICAgS2lzQXNsV3JpdGVyVXRpbHM6OndyaXRlRml4ZWRT dHJpbmcoIlBhdHQiLCBpbyk7CisgICAgS2lzQXNsV3JpdGVyVXRpbHM6Ok9mZnNldFN0cmVhbVB1 c2hlcjxxdWludDMyPiBwYXR0U2l6ZVRhZyhpbywgMik7CisKKyAgICB0cnkgeworICAgICAgICBL aXNBc2xQYXR0ZXJuc1dyaXRlciB3cml0ZXIocGF0dGVybnNYbWxEb2MsIGlvKTsKKyAgICAgICAg d3JpdGVyLndyaXRlUGF0dGVybnMoKTsKKworICAgIH0gY2F0Y2ggKEtpc0FzbFdyaXRlclV0aWxz OjpBU0xXcml0ZUV4Y2VwdGlvbiAmZSkgeworICAgICAgICBxV2FybmluZygpIDw8ICJXQVJOSU5H OiBDb3VsZG4ndCBzYXZlIGxheWVyIHN0eWxlIHBhdHRlcm5zIGJsb2NrOiIgPDwgUFJFUEVORF9N RVRIT0QoZS53aGF0KCkpOworCisgICAgICAgIC8vIFRPRE86IG1ha2UgdGhpcyBlcnJvciByZWNv dmVyYWJsZSEKKyAgICAgICAgdGhyb3cgZTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9rcml0YS9w bHVnaW5zL2Zvcm1hdHMvcHNkL3BzZF9hZGRpdGlvbmFsX2xheWVyX2luZm9fYmxvY2suaCBiL2ty aXRhL3BsdWdpbnMvZm9ybWF0cy9wc2QvcHNkX2FkZGl0aW9uYWxfbGF5ZXJfaW5mb19ibG9jay5o CmluZGV4IDk4MDdiYjYuLmRmYThlNzMgMTAwNjQ0Ci0tLSBhL2tyaXRhL3BsdWdpbnMvZm9ybWF0 cy9wc2QvcHNkX2FkZGl0aW9uYWxfbGF5ZXJfaW5mb19ibG9jay5oCisrKyBiL2tyaXRhL3BsdWdp bnMvZm9ybWF0cy9wc2QvcHNkX2FkZGl0aW9uYWxfbGF5ZXJfaW5mb19ibG9jay5oCkBAIC0yNTgs NiArMjU4LDEyIEBAIHB1YmxpYzoKICAgICBib29sIHJlYWQoUUlPRGV2aWNlKiBpbyk7CiAgICAg Ym9vbCB3cml0ZShRSU9EZXZpY2UqIGlvLCBLaXNOb2RlU1Agbm9kZSk7CiAKKyAgICB2b2lkIHdy aXRlTHVuaUJsb2NrRXgoUUlPRGV2aWNlKiBpbywgY29uc3QgUVN0cmluZyAmbGF5ZXJOYW1lKTsK KyAgICB2b2lkIHdyaXRlTHNjdEJsb2NrRXgoUUlPRGV2aWNlKiBpbywgcHNkX3NlY3Rpb25fdHlw ZSBzZWN0aW9uVHlwZSwgYm9vbCBpc1Bhc3NUaHJvdWdoLCBjb25zdCBRU3RyaW5nICZibGVuZE1v ZGVLZXkpOworICAgIHZvaWQgd3JpdGVMZngyQmxvY2tFeChRSU9EZXZpY2UqIGlvLCBjb25zdCBR RG9tRG9jdW1lbnQgJnN0eWxlc1htbERvYyk7CisgICAgdm9pZCB3cml0ZVBhdHRCbG9ja0V4KFFJ T0RldmljZSogaW8sIGNvbnN0IFFEb21Eb2N1bWVudCAmcGF0dGVybnNYbWxEb2MpOworCisKICAg ICBib29sIHZhbGlkKCk7CiAKICAgICBjb25zdCBQU0RIZWFkZXIgJm1faGVhZGVyOwpkaWZmIC0t Z2l0IGEva3JpdGEvcGx1Z2lucy9mb3JtYXRzL3BzZC9wc2RfbGF5ZXJfcmVjb3JkLmNwcCBiL2ty aXRhL3BsdWdpbnMvZm9ybWF0cy9wc2QvcHNkX2xheWVyX3JlY29yZC5jcHAKaW5kZXggOGI4Y2E2 Ny4uNmJlNjEwNiAxMDA2NDQKLS0tIGEva3JpdGEvcGx1Z2lucy9mb3JtYXRzL3BzZC9wc2RfbGF5 ZXJfcmVjb3JkLmNwcAorKysgYi9rcml0YS9wbHVnaW5zL2Zvcm1hdHMvcHNkL3BzZF9sYXllcl9y ZWNvcmQuY3BwCkBAIC00NTIsNyArNDUyLDEyIEBAIGJvb2wgUFNETGF5ZXJSZWNvcmQ6OnJlYWQo UUlPRGV2aWNlKiBpbykKICAgICByZXR1cm4gdmFsaWQoKTsKIH0KIAotYm9vbCBQU0RMYXllclJl Y29yZDo6d3JpdGUoUUlPRGV2aWNlKiBpbywgS2lzUGFpbnREZXZpY2VTUCBsYXllckNvbnRlbnRE ZXZpY2UsIEtpc05vZGVTUCBvbmx5VHJhbnNwYXJlbmN5TWFzaywgY29uc3QgUVJlY3QgJm1hc2tS ZWN0LCBwc2Rfc2VjdGlvbl90eXBlIHNlY3Rpb25UeXBlKQordm9pZCBQU0RMYXllclJlY29yZDo6 d3JpdGUoUUlPRGV2aWNlKiBpbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEtpc1BhaW50 RGV2aWNlU1AgbGF5ZXJDb250ZW50RGV2aWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg S2lzTm9kZVNQIG9ubHlUcmFuc3BhcmVuY3lNYXNrLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgY29uc3QgUVJlY3QgJm1hc2tSZWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgcHNk X3NlY3Rpb25fdHlwZSBzZWN0aW9uVHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv bnN0IFFEb21Eb2N1bWVudCAmc3R5bGVzWG1sRG9jKQogewogICAgIGRiZ0ZpbGUgPDwgIndyaXRp bmcgbGF5ZXIgaW5mbyByZWNvcmQiIDw8ICJhdCIgPDwgaW8tPnBvcygpOwogCkBAIC01NTgsMzQg KzU2MywyNSBAQCBib29sIFBTRExheWVyUmVjb3JkOjp3cml0ZShRSU9EZXZpY2UqIGlvLCBLaXNQ YWludERldmljZVNQIGxheWVyQ29udGVudERldmljZSwgSwogICAgICAgICAgICAgLy8gbGF5ZXIg bmFtZTogUGFzY2FsIHN0cmluZywgcGFkZGVkIHRvIGEgbXVsdGlwbGUgb2YgNCBieXRlcy4KICAg ICAgICAgICAgIHBzZHdyaXRlX3Bhc2NhbHN0cmluZyhpbywgbGF5ZXJOYW1lLCA0KTsKIAorCisg ICAgICAgICAgICBQc2RBZGRpdGlvbmFsTGF5ZXJJbmZvQmxvY2sgYWRkaXRpb25hbEluZm9CbG9j ayhtX2hlYWRlcik7CisKICAgICAgICAgICAgIC8vIHdyaXRlICdsdW5pJyBkYXRhIGJsb2NrCi0g ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgS2lzQXNsV3JpdGVyVXRpbHM6OndyaXRlRml4 ZWRTdHJpbmcoIjhCSU0iLCBpbyk7Ci0gICAgICAgICAgICAgICAgS2lzQXNsV3JpdGVyVXRpbHM6 OndyaXRlRml4ZWRTdHJpbmcoImx1bmkiLCBpbyk7Ci0gICAgICAgICAgICAgICAgS2lzQXNsV3Jp dGVyVXRpbHM6Ok9mZnNldFN0cmVhbVB1c2hlcjxxdWludDMyPiBsYXllck5hbWVTaXplVGFnKGlv LCAyKTsKLSAgICAgICAgICAgICAgICBLaXNBc2xXcml0ZXJVdGlsczo6d3JpdGVVbmljb2RlU3Ry aW5nKGxheWVyTmFtZSwgaW8pOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgYWRkaXRpb25h bEluZm9CbG9jay53cml0ZUx1bmlCbG9ja0V4KGlvLCBsYXllck5hbWUpOwogCiAgICAgICAgICAg ICAvLyB3cml0ZSAnbHNjdCcgZGF0YSBibG9jawogICAgICAgICAgICAgaWYgKHNlY3Rpb25UeXBl ICE9IHBzZF9vdGhlcikgewotICAgICAgICAgICAgICAgIEtpc0FzbFdyaXRlclV0aWxzOjp3cml0 ZUZpeGVkU3RyaW5nKCI4QklNIiwgaW8pOwotICAgICAgICAgICAgICAgIEtpc0FzbFdyaXRlclV0 aWxzOjp3cml0ZUZpeGVkU3RyaW5nKCJsc2N0IiwgaW8pOwotICAgICAgICAgICAgICAgIEtpc0Fz bFdyaXRlclV0aWxzOjpPZmZzZXRTdHJlYW1QdXNoZXI8cXVpbnQzMj4gc2VjdGlvblR5cGVTaXpl VGFnKGlvLCAyKTsKLSAgICAgICAgICAgICAgICBTQUZFX1dSSVRFX0VYKGlvLCAocXVpbnQzMilz ZWN0aW9uVHlwZSk7Ci0KLSAgICAgICAgICAgICAgICBRU3RyaW5nIHJlYWxCbGVuZE1vZGVLZXkg PSBpc1Bhc3NUaHJvdWdoID8gUVN0cmluZygicGFzcyIpIDogYmxlbmRNb2RlS2V5OworICAgICAg ICAgICAgICAgIGFkZGl0aW9uYWxJbmZvQmxvY2sud3JpdGVMc2N0QmxvY2tFeChpbywgc2VjdGlv blR5cGUsIGlzUGFzc1Rocm91Z2gsIGJsZW5kTW9kZUtleSk7CisgICAgICAgICAgICB9CiAKLSAg ICAgICAgICAgICAgICBLaXNBc2xXcml0ZXJVdGlsczo6d3JpdGVGaXhlZFN0cmluZygiOEJJTSIs IGlvKTsKLSAgICAgICAgICAgICAgICBLaXNBc2xXcml0ZXJVdGlsczo6d3JpdGVGaXhlZFN0cmlu ZyhyZWFsQmxlbmRNb2RlS2V5LCBpbyk7CisgICAgICAgICAgICAvLyB3cml0ZSAnbGZ4MicgZGF0 YSBibG9jaworICAgICAgICAgICAgaWYgKCFzdHlsZXNYbWxEb2MuaXNOdWxsKCkpIHsKKyAgICAg ICAgICAgICAgICBhZGRpdGlvbmFsSW5mb0Jsb2NrLndyaXRlTGZ4MkJsb2NrRXgoaW8sIHN0eWxl c1htbERvYyk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9IGNhdGNoIChLaXNBc2xX cml0ZXJVdGlsczo6QVNMV3JpdGVFeGNlcHRpb24gJmUpIHsKLSAgICAgICAgcVdhcm5pbmcoKSA8 PCAiV0FSTklORzogUFNETGF5ZXJSZWNvcmQ6IiA8PCBlLndoYXQoKTsKLSAgICAgICAgcmV0dXJu IGZhbHNlOworICAgICAgICB0aHJvdyBLaXNBc2xXcml0ZXJVdGlsczo6QVNMV3JpdGVFeGNlcHRp b24oUFJFUEVORF9NRVRIT0QoZS53aGF0KCkpKTsKICAgICB9Ci0KLQotICAgIHJldHVybiB0cnVl OwogfQogCiB2b2lkIHdyaXRlQ2hhbm5lbERhdGFSTEUoUUlPRGV2aWNlICppbywgY29uc3QgcXVp bnQ4ICpwbGFuZSwgY29uc3QgaW50IGNoYW5uZWxTaXplLCBjb25zdCBRUmVjdCAmcmMsIGNvbnN0 IHFpbnQ2NCBzaXplRmllbGRPZmZzZXQpCkBAIC02MzEsMTAgKzYyNyw4IEBAIHZvaWQgUFNETGF5 ZXJSZWNvcmQ6OndyaXRlVHJhbnNwYXJlbmN5TWFza1BpeGVsRGF0YShRSU9EZXZpY2UgKmlvKQog ICAgIH0KIH0KIAotYm9vbCBQU0RMYXllclJlY29yZDo6d3JpdGVQaXhlbERhdGEoUUlPRGV2aWNl ICppbykKK3ZvaWQgUFNETGF5ZXJSZWNvcmQ6OndyaXRlUGl4ZWxEYXRhKFFJT0RldmljZSAqaW8p CiB7Ci0gICAgYm9vbCByZXR2YWwgPSB0cnVlOwotCiAgICAgZGJnRmlsZSA8PCAid3JpdGluZyBw aXhlbCBkYXRhIGZvciBsYXllciIgPDwgbGF5ZXJOYW1lIDw8ICJhdCIgPDwgaW8tPnBvcygpOwog CiAgICAgS2lzUGFpbnREZXZpY2VTUCBkZXYgPSBtX2xheWVyQ29udGVudERldmljZTsKQEAgLTY1 MywxMSArNjQ3LDEwIEBAIGJvb2wgUFNETGF5ZXJSZWNvcmQ6OndyaXRlUGl4ZWxEYXRhKFFJT0Rl dmljZSAqaW8pCiAgICAgICAgICAgICB3cml0ZVRyYW5zcGFyZW5jeU1hc2tQaXhlbERhdGEoaW8p OwogCiAgICAgICAgIH0gY2F0Y2ggKEtpc0FzbFdyaXRlclV0aWxzOjpBU0xXcml0ZUV4Y2VwdGlv biAmZSkgewotICAgICAgICAgICAgZXJyb3IgPSBlLndoYXQoKTsKLSAgICAgICAgICAgIHJldHZh bCA9IGZhbHNlOworICAgICAgICAgICAgdGhyb3cgS2lzQXNsV3JpdGVyVXRpbHM6OkFTTFdyaXRl RXhjZXB0aW9uKFBSRVBFTkRfTUVUSE9EKGUud2hhdCgpKSk7CiAgICAgICAgIH0KIAotICAgICAg ICByZXR1cm4gcmV0dmFsOworICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgLy8gbm93IHdy aXRlIGFsbCB0aGUgY2hhbm5lbHMgaW4gZGlzcGxheSBvcmRlcgpAQCAtNzIxLDE0ICs3MTQsMTQg QEAgYm9vbCBQU0RMYXllclJlY29yZDo6d3JpdGVQaXhlbERhdGEoUUlPRGV2aWNlICppbykKICAg ICAgICAgd3JpdGVUcmFuc3BhcmVuY3lNYXNrUGl4ZWxEYXRhKGlvKTsKIAogICAgIH0gY2F0Y2gg KEtpc0FzbFdyaXRlclV0aWxzOjpBU0xXcml0ZUV4Y2VwdGlvbiAmZSkgewotICAgICAgICBlcnJv ciA9IGUud2hhdCgpOwotICAgICAgICByZXR2YWwgPSBmYWxzZTsKKyAgICAgICAgcURlbGV0ZUFs bChwbGFuZXMpOworICAgICAgICBwbGFuZXMuY2xlYXIoKTsKKworICAgICAgICB0aHJvdyBLaXNB c2xXcml0ZXJVdGlsczo6QVNMV3JpdGVFeGNlcHRpb24oUFJFUEVORF9NRVRIT0QoZS53aGF0KCkp KTsKICAgICB9CiAKICAgICBxRGVsZXRlQWxsKHBsYW5lcyk7CiAgICAgcGxhbmVzLmNsZWFyKCk7 Ci0KLSAgICByZXR1cm4gcmV0dmFsOwogfQogCiBib29sIFBTRExheWVyUmVjb3JkOjp2YWxpZCgp CmRpZmYgLS1naXQgYS9rcml0YS9wbHVnaW5zL2Zvcm1hdHMvcHNkL3BzZF9sYXllcl9yZWNvcmQu aCBiL2tyaXRhL3BsdWdpbnMvZm9ybWF0cy9wc2QvcHNkX2xheWVyX3JlY29yZC5oCmluZGV4IDUx OGNlMWYuLmZjZWI1OWQgMTAwNjQ0Ci0tLSBhL2tyaXRhL3BsdWdpbnMvZm9ybWF0cy9wc2QvcHNk X2xheWVyX3JlY29yZC5oCisrKyBiL2tyaXRhL3BsdWdpbnMvZm9ybWF0cy9wc2QvcHNkX2xheWVy X3JlY29yZC5oCkBAIC05NCw4ICs5NCw4IEBAIHB1YmxpYzoKICAgICBib29sIHJlYWRQaXhlbERh dGEoUUlPRGV2aWNlKiBpbywgS2lzUGFpbnREZXZpY2VTUCBkZXZpY2UpOwogICAgIGJvb2wgcmVh ZE1hc2soUUlPRGV2aWNlKiBpbywgS2lzUGFpbnREZXZpY2VTUCBkZXYsIENoYW5uZWxJbmZvICpj aGFubmVsKTsKIAotICAgIGJvb2wgd3JpdGUoUUlPRGV2aWNlKiBpbywgS2lzUGFpbnREZXZpY2VT UCBsYXllckNvbnRlbnREZXZpY2UsIEtpc05vZGVTUCBvbmx5VHJhbnNwYXJlbmN5TWFzaywgY29u c3QgUVJlY3QgJm1hc2tSZWN0LCBwc2Rfc2VjdGlvbl90eXBlIHNlY3Rpb25UeXBlKTsKLSAgICBi b29sIHdyaXRlUGl4ZWxEYXRhKFFJT0RldmljZSogaW8pOworICAgIHZvaWQgd3JpdGUoUUlPRGV2 aWNlKiBpbywgS2lzUGFpbnREZXZpY2VTUCBsYXllckNvbnRlbnREZXZpY2UsIEtpc05vZGVTUCBv bmx5VHJhbnNwYXJlbmN5TWFzaywgY29uc3QgUVJlY3QgJm1hc2tSZWN0LCBwc2Rfc2VjdGlvbl90 eXBlIHNlY3Rpb25UeXBlLCBjb25zdCBRRG9tRG9jdW1lbnQgJnN0eWxlc1htbERvYyk7CisgICAg dm9pZCB3cml0ZVBpeGVsRGF0YShRSU9EZXZpY2UqIGlvKTsKIAogICAgIGJvb2wgdmFsaWQoKTsK IApkaWZmIC0tZ2l0IGEva3JpdGEvcGx1Z2lucy9mb3JtYXRzL3BzZC9wc2RfbGF5ZXJfc2VjdGlv bi5jcHAgYi9rcml0YS9wbHVnaW5zL2Zvcm1hdHMvcHNkL3BzZF9sYXllcl9zZWN0aW9uLmNwcApp bmRleCBkNzBiMjVhLi44YjBkMzQzIDEwMDY0NAotLS0gYS9rcml0YS9wbHVnaW5zL2Zvcm1hdHMv cHNkL3BzZF9sYXllcl9zZWN0aW9uLmNwcAorKysgYi9rcml0YS9wbHVnaW5zL2Zvcm1hdHMvcHNk L3BzZF9sYXllcl9zZWN0aW9uLmNwcApAQCAtMjcsNiArMjcsOCBAQAogI2luY2x1ZGUgPGtpc19n cm91cF9sYXllci5oPgogI2luY2x1ZGUgPGtpc19lZmZlY3RfbWFzay5oPgogCisjaW5jbHVkZSAi a2lzX2RvbV91dGlscy5oIgorCiAjaW5jbHVkZSAicHNkX2hlYWRlci5oIgogI2luY2x1ZGUgInBz ZF91dGlscy5oIgogCkBAIC0zNCw2ICszNiw4IEBACiAKICNpbmNsdWRlIDxhc2wva2lzX29mZnNl dF9vbl9leGl0X3ZlcmlmaWVyLmg+CiAjaW5jbHVkZSA8YXNsL2tpc19hc2xfcmVhZGVyX3V0aWxz Lmg+CisjaW5jbHVkZSA8a2lzX2FzbF9sYXllcl9zdHlsZV9zZXJpYWxpemVyLmg+CisjaW5jbHVk ZSA8YXNsL2tpc19hc2xfd3JpdGVyX3V0aWxzLmg+CiAKIAogUFNETGF5ZXJNYXNrU2VjdGlvbjo6 UFNETGF5ZXJNYXNrU2VjdGlvbihjb25zdCBQU0RIZWFkZXImIGhlYWRlcikKQEAgLTMyMSw4ICsz MjUsNjMgQEAgS2lzTm9kZVNQIGZpbmRPbmx5VHJhbnNwYXJlbmN5TWFzayhLaXNOb2RlU1Agbm9k ZSkKICAgICByZXR1cm4gb25seU1hc2stPmluaGVyaXRzKCJLaXNUcmFuc3BhcmVuY3lNYXNrIikg PyBvbmx5TWFzayA6IDA7CiB9CiAKK1FEb21Eb2N1bWVudCBmZXRjaExheWVyU3R5bGVYbWxEYXRh KEtpc05vZGVTUCBub2RlKQoreworICAgIGNvbnN0IEtpc0xheWVyICpsYXllciA9IHFvYmplY3Rf Y2FzdDxLaXNMYXllcio+KG5vZGUuZGF0YSgpKTsKKyAgICBLaXNQU0RMYXllclN0eWxlU1AgbGF5 ZXJTdHlsZSA9IGxheWVyLT5sYXllclN0eWxlKCk7CisKKyAgICBpZiAoIWxheWVyU3R5bGUpIHJl dHVybiBRRG9tRG9jdW1lbnQoKTsKKworICAgIEtpc0FzbExheWVyU3R5bGVTZXJpYWxpemVyIHNl cmlhbGl6ZXI7CisgICAgc2VyaWFsaXplci5zZXRTdHlsZXMoUVZlY3RvcjxLaXNQU0RMYXllclN0 eWxlU1A+KCkgPDwgbGF5ZXJTdHlsZSk7CisgICAgcmV0dXJuIHNlcmlhbGl6ZXIuZm9ybVBzZFht bERvY3VtZW50KCk7Cit9CisKK2lubGluZSBRRG9tTm9kZSBmaW5kTm9kZUJ5S2V5KGNvbnN0IFFT dHJpbmcgJmtleSwgUURvbU5vZGUgcGFyZW50KSB7CisgICAgcmV0dXJuIEtpc0RvbVV0aWxzOjpm aW5kRWxlbWVudEJ5QXR0aWJ1dGUocGFyZW50LCAibm9kZSIsICJrZXkiLCBrZXkpOworfQorCit2 b2lkIG1lcmdlUGF0dGVybnNYTUxTZWN0aW9uKGNvbnN0IFFEb21Eb2N1bWVudCAmc3JjLCBRRG9t RG9jdW1lbnQgJmRzdCkKK3sKKyAgICBRRG9tTm9kZSBzcmNQYXR0ZXJuc05vZGUgPSBmaW5kTm9k ZUJ5S2V5KCJQYXR0ZXJucyIsIHNyYy5kb2N1bWVudEVsZW1lbnQoKSk7CisgICAgUURvbU5vZGUg ZHN0UGF0dGVybnNOb2RlID0gZmluZE5vZGVCeUtleSgiUGF0dGVybnMiLCBkc3QuZG9jdW1lbnRF bGVtZW50KCkpOworCisgICAgaWYgKHNyY1BhdHRlcm5zTm9kZS5pc051bGwoKSkgcmV0dXJuOwor ICAgIGlmIChkc3RQYXR0ZXJuc05vZGUuaXNOdWxsKCkpIHsKKyAgICAgICAgZHN0ID0gc3JjOwor ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgS0lTX0FTU0VSVF9SRUNPVkVSX1JFVFVSTigh c3JjUGF0dGVybnNOb2RlLmlzTnVsbCgpKTsKKyAgICBLSVNfQVNTRVJUX1JFQ09WRVJfUkVUVVJO KCFkc3RQYXR0ZXJuc05vZGUuaXNOdWxsKCkpOworCisgICAgUURvbU5vZGUgbm9kZSA9IHNyY1Bh dHRlcm5zTm9kZS5maXJzdENoaWxkKCk7CisgICAgd2hpbGUoIW5vZGUuaXNOdWxsKCkpIHsKKyAg ICAgICAgUURvbU5vZGUgaW1wb3J0ZWROb2RlID0gZHN0LmltcG9ydE5vZGUobm9kZSwgdHJ1ZSk7 CisgICAgICAgIEtJU19BU1NFUlRfUkVDT1ZFUl9SRVRVUk4oIWltcG9ydGVkTm9kZS5pc051bGwo KSk7CisKKyAgICAgICAgZHN0UGF0dGVybnNOb2RlLmFwcGVuZENoaWxkKGltcG9ydGVkTm9kZSk7 CisgICAgICAgIG5vZGUgPSBub2RlLm5leHRTaWJsaW5nKCk7CisgICAgfQorCit9CisKIGJvb2wg UFNETGF5ZXJNYXNrU2VjdGlvbjo6d3JpdGUoUUlPRGV2aWNlKiBpbywgS2lzTm9kZVNQIHJvb3RM YXllcikKIHsKKyAgICBib29sIHJldHZhbCA9IHRydWU7CisKKyAgICB0cnkgeworICAgICAgICB3 cml0ZUltcGwoaW8sIHJvb3RMYXllcik7CisgICAgfSBjYXRjaCAoS2lzQXNsV3JpdGVyVXRpbHM6 OkFTTFdyaXRlRXhjZXB0aW9uICZlKSB7CisgICAgICAgIGVycm9yID0gUFJFUEVORF9NRVRIT0Qo ZS53aGF0KCkpOworICAgICAgICByZXR2YWwgPSBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4g cmV0dmFsOworfQorCit2b2lkIFBTRExheWVyTWFza1NlY3Rpb246OndyaXRlSW1wbChRSU9EZXZp Y2UqIGlvLCBLaXNOb2RlU1Agcm9vdExheWVyKQorewogICAgIGRiZ0ZpbGUgPDwgIldyaXRpbmcg bGF5ZXIgbGF5ZXIgc2VjdGlvbiI7CiAKICAgICAvLyBCdWlsZCB0aGUgd2hvbGUgbGF5ZXIgc3Ry dWN0dXJlCkBAIC0zMzAsMTU3ICszODksMTQ4IEBAIGJvb2wgUFNETGF5ZXJNYXNrU2VjdGlvbjo6 d3JpdGUoUUlPRGV2aWNlKiBpbywgS2lzTm9kZVNQIHJvb3RMYXllcikKICAgICBmbGF0dGVuTm9k ZXMocm9vdExheWVyLCBub2Rlcyk7CiAKICAgICBpZiAobm9kZXMuaXNFbXB0eSgpKSB7Ci0gICAg ICAgIGVycm9yID0gIkNvdWxkIG5vdCBmaW5kIHBhaW50IGxheWVycyB0byBzYXZlIjsKLSAgICAg ICAgcmV0dXJuIGZhbHNlOworICAgICAgICB0aHJvdyBLaXNBc2xXcml0ZXJVdGlsczo6QVNMV3Jp dGVFeGNlcHRpb24oIkNvdWxkIG5vdCBmaW5kIHBhaW50IGxheWVycyB0byBzYXZlIik7CiAgICAg fQogCi0gICAgcXVpbnQ2NCBsYXllck1hc2tQb3MgPSBpby0+cG9zKCk7Ci0gICAgLy8gbGVuZ3Ro IG9mIHRoZSBsYXllciBpbmZvIGFuZCBtYXNrIGluZm9ybWF0aW9uIHNlY3Rpb24KLSAgICBkYmdG aWxlIDw8ICJMZW5ndGggb2YgbGF5ZXIgaW5mbyBhbmQgbWFzayBpbmZvIHNlY3Rpb24gYXQiIDw8 IGxheWVyTWFza1BvczsKLSAgICBwc2R3cml0ZShpbywgKHF1aW50MzIpMCk7Ci0KLSAgICBxdWlu dDY0IGxheWVySW5mb1BvcyA9IGlvLT5wb3MoKTsKLSAgICBkYmdGaWxlIDw8ICJsZW5ndGggb2Yg dGhlIGxheWVyIGluZm8gc2VjdGlvbiwgcm91bmRlZCB1cCB0byBhIG11bHRpcGxlIG9mIHR3bywg YXQiIDw8IGxheWVySW5mb1BvczsKLSAgICBwc2R3cml0ZShpbywgKHF1aW50MzIpMCk7Ci0KLSAg ICAvLyBudW1iZXIgb2YgbGF5ZXJzIChuZWdhdGl2ZSwgYmVjYXVzZSBrcml0YSBhbHdheXMgaGFz IGFscGhhKQotICAgIGRiZ0ZpbGUgPDwgIm51bWJlciBvZiBsYXllcnMiIDw8IC1ub2Rlcy5zaXpl KCkgPDwgImF0IiA8PCBpby0+cG9zKCk7Ci0gICAgcHNkd3JpdGUoaW8sIChxaW50MTYpLW5vZGVz LnNpemUoKSk7Ci0KLSAgICAvLyBMYXllciByZWNvcmRzIHNlY3Rpb24KLSAgICBmb3JlYWNoKGNv bnN0IEZsYXR0ZW5lZE5vZGUgJml0ZW0sIG5vZGVzKSB7Ci0gICAgICAgIEtpc05vZGVTUCBub2Rl ID0gaXRlbS5ub2RlOwotCi0gICAgICAgIFBTRExheWVyUmVjb3JkICpsYXllclJlY29yZCA9IG5l dyBQU0RMYXllclJlY29yZChtX2hlYWRlcik7Ci0gICAgICAgIGxheWVycy5hcHBlbmQobGF5ZXJS ZWNvcmQpOwotCi0gICAgICAgIEtpc05vZGVTUCBvbmx5VHJhbnNwYXJlbmN5TWFzayA9IGZpbmRP bmx5VHJhbnNwYXJlbmN5TWFzayhub2RlKTsKLSAgICAgICAgY29uc3QgUVJlY3QgbWFza1JlY3Qg PSBvbmx5VHJhbnNwYXJlbmN5TWFzayA/IG9ubHlUcmFuc3BhcmVuY3lNYXNrLT5wYWludERldmlj ZSgpLT5leGFjdEJvdW5kcygpIDogUVJlY3QoKTsKLQotICAgICAgICBjb25zdCBib29sIG5vZGVW aXNpYmxlID0gbm9kZS0+dmlzaWJsZSgpOwotICAgICAgICBjb25zdCBLb0NvbG9yU3BhY2UgKmNv bG9yU3BhY2UgPSBub2RlLT5jb2xvclNwYWNlKCk7Ci0gICAgICAgIGNvbnN0IHF1aW50OCBub2Rl T3BhY2l0eSA9IG5vZGUtPm9wYWNpdHkoKTsKLSAgICAgICAgY29uc3QgcXVpbnQ4IG5vZGVDbGlw cGluZyA9IDA7Ci0gICAgICAgIGNvbnN0IEtpc1BhaW50TGF5ZXIgKnBhaW50TGF5ZXIgPSBxb2Jq ZWN0X2Nhc3Q8S2lzUGFpbnRMYXllcio+KG5vZGUuZGF0YSgpKTsKLSAgICAgICAgY29uc3QgYm9v bCBhbHBoYUxvY2tlZCA9IChwYWludExheWVyICYmIHBhaW50TGF5ZXItPmFscGhhTG9ja2VkKCkp OwotICAgICAgICBjb25zdCBRU3RyaW5nIG5vZGVDb21wb3NpdGVPcCA9IG5vZGUtPmNvbXBvc2l0 ZU9wSWQoKTsKLQotICAgICAgICBjb25zdCBLaXNHcm91cExheWVyICpncm91cExheWVyID0gcW9i amVjdF9jYXN0PEtpc0dyb3VwTGF5ZXIqPihub2RlLmRhdGEoKSk7Ci0gICAgICAgIGNvbnN0IGJv b2wgbm9kZUlzUGFzc1Rocm91Z2ggPSBncm91cExheWVyICYmIGdyb3VwTGF5ZXItPnBhc3NUaHJv dWdoTW9kZSgpOwotCi0gICAgICAgIGJvb2wgbm9kZUlycmVsZXZhbnQgPSBmYWxzZTsKLSAgICAg ICAgUVN0cmluZyBub2RlTmFtZTsKLSAgICAgICAgS2lzUGFpbnREZXZpY2VTUCBsYXllckNvbnRl bnREZXZpY2U7Ci0gICAgICAgIHBzZF9zZWN0aW9uX3R5cGUgc2VjdGlvblR5cGU7Ci0KLSAgICAg ICAgaWYgKGl0ZW0udHlwZSA9PSBGbGF0dGVuZWROb2RlOjpSQVNURVJfTEFZRVIpIHsKLSAgICAg ICAgICAgIG5vZGVJcnJlbGV2YW50ID0gZmFsc2U7Ci0gICAgICAgICAgICBub2RlTmFtZSA9IG5v ZGUtPm5hbWUoKTsKLSAgICAgICAgICAgIGxheWVyQ29udGVudERldmljZSA9IG9ubHlUcmFuc3Bh cmVuY3lNYXNrID8gbm9kZS0+b3JpZ2luYWwoKSA6IG5vZGUtPnByb2plY3Rpb24oKTsKLSAgICAg ICAgICAgIHNlY3Rpb25UeXBlID0gcHNkX290aGVyOwotICAgICAgICB9IGVsc2UgewotICAgICAg ICAgICAgbm9kZUlycmVsZXZhbnQgPSB0cnVlOwotICAgICAgICAgICAgbm9kZU5hbWUgPSBpdGVt LnR5cGUgPT0gRmxhdHRlbmVkTm9kZTo6U0VDVElPTl9ESVZJREVSID8KLSAgICAgICAgICAgICAg ICBRU3RyaW5nKCI8L0xheWVyIGdyb3VwPiIpIDoKLSAgICAgICAgICAgICAgICBub2RlLT5uYW1l KCk7Ci0gICAgICAgICAgICBsYXllckNvbnRlbnREZXZpY2UgPSAwOwotICAgICAgICAgICAgc2Vj dGlvblR5cGUgPQotICAgICAgICAgICAgICAgIGl0ZW0udHlwZSA9PSBGbGF0dGVuZWROb2RlOjpT RUNUSU9OX0RJVklERVIgPyBwc2RfYm91bmRpbmdfZGl2aWRlciA6Ci0gICAgICAgICAgICAgICAg aXRlbS50eXBlID09IEZsYXR0ZW5lZE5vZGU6OkZPTERFUl9PUEVOID8gcHNkX29wZW5fZm9sZGVy IDoKLSAgICAgICAgICAgICAgICBwc2RfY2xvc2VkX2ZvbGRlcjsKLSAgICAgICAgfQorICAgIHsK KyAgICAgICAgS2lzQXNsV3JpdGVyVXRpbHM6Ok9mZnNldFN0cmVhbVB1c2hlcjxxdWludDMyPiBs YXllckFuZE1hc2tTZWN0aW9uU2l6ZVRhZyhpbywgMik7CisgICAgICAgIFFEb21Eb2N1bWVudCBt ZXJnZWRQYXR0ZXJuc1htbERvYzsKIAorICAgICAgICB7CisgICAgICAgICAgICBLaXNBc2xXcml0 ZXJVdGlsczo6T2Zmc2V0U3RyZWFtUHVzaGVyPHF1aW50MzI+IGxheWVySW5mb1NpemVUYWcoaW8s IDQpOwogCi0gICAgICAgIC8vID09PSBubyBhY2Nlc3MgdG8gbm9kZSBhbnltb3JlCisgICAgICAg ICAgICB7CisgICAgICAgICAgICAgICAgLy8gbnVtYmVyIG9mIGxheWVycyAobmVnYXRpdmUsIGJl Y2F1c2Uga3JpdGEgYWx3YXlzIGhhcyBhbHBoYSkKKyAgICAgICAgICAgICAgICBjb25zdCBxaW50 MTYgbGF5ZXJzU2l6ZSA9IC1ub2Rlcy5zaXplKCk7CisgICAgICAgICAgICAgICAgU0FGRV9XUklU RV9FWChpbywgbGF5ZXJzU2l6ZSk7CiAKLSAgICAgICAgUVJlY3QgbGF5ZXJSZWN0OworICAgICAg ICAgICAgICAgIGRiZ0ZpbGUgPDwgIk51bWJlciBvZiBsYXllcnMiIDw8IGxheWVyc1NpemUgPDwg ImF0IiA8PCBpby0+cG9zKCk7CisgICAgICAgICAgICB9CiAKLSAgICAgICAgaWYgKGxheWVyQ29u dGVudERldmljZSkgewotICAgICAgICAgICAgUVJlY3QgcmMgPSBsYXllckNvbnRlbnREZXZpY2Ut PmV4dGVudCgpOwotICAgICAgICAgICAgcmMgPSByYy5ub3JtYWxpemVkKCk7CisgICAgICAgICAg ICAvLyBMYXllciByZWNvcmRzIHNlY3Rpb24KKyAgICAgICAgICAgIGZvcmVhY2goY29uc3QgRmxh dHRlbmVkTm9kZSAmaXRlbSwgbm9kZXMpIHsKKyAgICAgICAgICAgICAgICBLaXNOb2RlU1Agbm9k ZSA9IGl0ZW0ubm9kZTsKIAotICAgICAgICAgICAgLy8ga2VlcCB0byB0aGUgbWF4IG9mIHBob3Rv c2hvcCdzIGNhcGFiaWxpdGllcwotICAgICAgICAgICAgaWYgKHJjLndpZHRoKCkgPiAzMDAwMCkg cmMuc2V0V2lkdGgoMzAwMDApOwotICAgICAgICAgICAgaWYgKHJjLmhlaWdodCgpID4gMzAwMDAp IHJjLnNldEhlaWdodCgzMDAwMCk7CisgICAgICAgICAgICAgICAgUFNETGF5ZXJSZWNvcmQgKmxh eWVyUmVjb3JkID0gbmV3IFBTRExheWVyUmVjb3JkKG1faGVhZGVyKTsKKyAgICAgICAgICAgICAg ICBsYXllcnMuYXBwZW5kKGxheWVyUmVjb3JkKTsKIAotICAgICAgICAgICAgbGF5ZXJSZWN0ID0g cmM7Ci0gICAgICAgIH0KKyAgICAgICAgICAgICAgICBLaXNOb2RlU1Agb25seVRyYW5zcGFyZW5j eU1hc2sgPSBmaW5kT25seVRyYW5zcGFyZW5jeU1hc2sobm9kZSk7CisgICAgICAgICAgICAgICAg Y29uc3QgUVJlY3QgbWFza1JlY3QgPSBvbmx5VHJhbnNwYXJlbmN5TWFzayA/IG9ubHlUcmFuc3Bh cmVuY3lNYXNrLT5wYWludERldmljZSgpLT5leGFjdEJvdW5kcygpIDogUVJlY3QoKTsKIAotICAg ICAgICBsYXllclJlY29yZC0+dG9wID0gbGF5ZXJSZWN0LnkoKTsKLSAgICAgICAgbGF5ZXJSZWNv cmQtPmxlZnQgPSBsYXllclJlY3QueCgpOwotICAgICAgICBsYXllclJlY29yZC0+Ym90dG9tID0g bGF5ZXJSZWN0LnkoKSArIGxheWVyUmVjdC5oZWlnaHQoKTsKLSAgICAgICAgbGF5ZXJSZWNvcmQt PnJpZ2h0ID0gbGF5ZXJSZWN0LngoKSArIGxheWVyUmVjdC53aWR0aCgpOworICAgICAgICAgICAg ICAgIGNvbnN0IGJvb2wgbm9kZVZpc2libGUgPSBub2RlLT52aXNpYmxlKCk7CisgICAgICAgICAg ICAgICAgY29uc3QgS29Db2xvclNwYWNlICpjb2xvclNwYWNlID0gbm9kZS0+Y29sb3JTcGFjZSgp OworICAgICAgICAgICAgICAgIGNvbnN0IHF1aW50OCBub2RlT3BhY2l0eSA9IG5vZGUtPm9wYWNp dHkoKTsKKyAgICAgICAgICAgICAgICBjb25zdCBxdWludDggbm9kZUNsaXBwaW5nID0gMDsKKyAg ICAgICAgICAgICAgICBjb25zdCBLaXNQYWludExheWVyICpwYWludExheWVyID0gcW9iamVjdF9j YXN0PEtpc1BhaW50TGF5ZXIqPihub2RlLmRhdGEoKSk7CisgICAgICAgICAgICAgICAgY29uc3Qg Ym9vbCBhbHBoYUxvY2tlZCA9IChwYWludExheWVyICYmIHBhaW50TGF5ZXItPmFscGhhTG9ja2Vk KCkpOworICAgICAgICAgICAgICAgIGNvbnN0IFFTdHJpbmcgbm9kZUNvbXBvc2l0ZU9wID0gbm9k ZS0+Y29tcG9zaXRlT3BJZCgpOwogCi0gICAgICAgIC8vIGNvbG9ycyArIGFscGhhIGNoYW5uZWwK LSAgICAgICAgLy8gbm90ZTogdHJhbnNwYXJlbmN5IG1hc2sgbm90IGluY2x1ZGVkCi0gICAgICAg IGxheWVyUmVjb3JkLT5uQ2hhbm5lbHMgPSBjb2xvclNwYWNlLT5jb2xvckNoYW5uZWxDb3VudCgp ICsgMTsKKyAgICAgICAgICAgICAgICBjb25zdCBLaXNHcm91cExheWVyICpncm91cExheWVyID0g cW9iamVjdF9jYXN0PEtpc0dyb3VwTGF5ZXIqPihub2RlLmRhdGEoKSk7CisgICAgICAgICAgICAg ICAgY29uc3QgYm9vbCBub2RlSXNQYXNzVGhyb3VnaCA9IGdyb3VwTGF5ZXIgJiYgZ3JvdXBMYXll ci0+cGFzc1Rocm91Z2hNb2RlKCk7CiAKLSAgICAgICAgQ2hhbm5lbEluZm8gKmluZm8gPSBuZXcg Q2hhbm5lbEluZm87Ci0gICAgICAgIGluZm8tPmNoYW5uZWxJZCA9IC0xOyAvLyBGb3IgdGhlIGFs cGhhIGNoYW5uZWwsIHdoaWNoIHdlIGFsd2F5cyBoYXZlIGluIEtyaXRhLCBhbmQgc2hvdWxkIGJl IHNhdmVkIGZpcnN0IGluCi0gICAgICAgIGxheWVyUmVjb3JkLT5jaGFubmVsSW5mb1JlY29yZHMg PDwgaW5mbzsKKyAgICAgICAgICAgICAgICBRRG9tRG9jdW1lbnQgc3R5bGVzWG1sRG9jID0gZmV0 Y2hMYXllclN0eWxlWG1sRGF0YShub2RlKTsKIAotICAgICAgICAvLyB0aGUgcmVzdCBpcyBpbiBk aXNwbGF5IG9yZGVyOiByZ2IsIGNteWssIGxhYi4uLgotICAgICAgICBmb3IgKGludCBpID0gMDsg aSA8IChpbnQpY29sb3JTcGFjZS0+Y29sb3JDaGFubmVsQ291bnQoKTsgKytpKSB7Ci0gICAgICAg ICAgICBpbmZvID0gbmV3IENoYW5uZWxJbmZvOwotICAgICAgICAgICAgaW5mby0+Y2hhbm5lbElk ID0gaTsgLy8gMCBmb3IgcmVkLCAxID0gZ3JlZW4sIGV0YwotICAgICAgICAgICAgbGF5ZXJSZWNv cmQtPmNoYW5uZWxJbmZvUmVjb3JkcyA8PCBpbmZvOwotICAgICAgICB9CisgICAgICAgICAgICAg ICAgaWYgKG1lcmdlZFBhdHRlcm5zWG1sRG9jLmlzTnVsbCgpICYmICFzdHlsZXNYbWxEb2MuaXNO dWxsKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgbWVyZ2VkUGF0dGVybnNYbWxEb2MgPSBzdHls ZXNYbWxEb2M7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmICghbWVyZ2VkUGF0dGVybnNYbWxE b2MuaXNOdWxsKCkgJiYgIXN0eWxlc1htbERvYy5pc051bGwoKSkgeworICAgICAgICAgICAgICAg ICAgICBtZXJnZVBhdHRlcm5zWE1MU2VjdGlvbihzdHlsZXNYbWxEb2MsIG1lcmdlZFBhdHRlcm5z WG1sRG9jKTsKKyAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgbGF5ZXJSZWNvcmQtPmJsZW5k TW9kZUtleSA9IGNvbXBvc2l0ZV9vcF90b19wc2RfYmxlbmRtb2RlKG5vZGVDb21wb3NpdGVPcCk7 Ci0gICAgICAgIGxheWVyUmVjb3JkLT5pc1Bhc3NUaHJvdWdoID0gbm9kZUlzUGFzc1Rocm91Z2g7 Ci0gICAgICAgIGxheWVyUmVjb3JkLT5vcGFjaXR5ID0gbm9kZU9wYWNpdHk7Ci0gICAgICAgIGxh eWVyUmVjb3JkLT5jbGlwcGluZyA9IG5vZGVDbGlwcGluZzsKKyAgICAgICAgICAgICAgICBib29s IG5vZGVJcnJlbGV2YW50ID0gZmFsc2U7CisgICAgICAgICAgICAgICAgUVN0cmluZyBub2RlTmFt ZTsKKyAgICAgICAgICAgICAgICBLaXNQYWludERldmljZVNQIGxheWVyQ29udGVudERldmljZTsK KyAgICAgICAgICAgICAgICBwc2Rfc2VjdGlvbl90eXBlIHNlY3Rpb25UeXBlOworCisgICAgICAg ICAgICAgICAgaWYgKGl0ZW0udHlwZSA9PSBGbGF0dGVuZWROb2RlOjpSQVNURVJfTEFZRVIpIHsK KyAgICAgICAgICAgICAgICAgICAgbm9kZUlycmVsZXZhbnQgPSBmYWxzZTsKKyAgICAgICAgICAg ICAgICAgICAgbm9kZU5hbWUgPSBub2RlLT5uYW1lKCk7CisgICAgICAgICAgICAgICAgICAgIGxh eWVyQ29udGVudERldmljZSA9IG9ubHlUcmFuc3BhcmVuY3lNYXNrID8gbm9kZS0+b3JpZ2luYWwo KSA6IG5vZGUtPnByb2plY3Rpb24oKTsKKyAgICAgICAgICAgICAgICAgICAgc2VjdGlvblR5cGUg PSBwc2Rfb3RoZXI7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAg ICAgbm9kZUlycmVsZXZhbnQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICBub2RlTmFtZSA9 IGl0ZW0udHlwZSA9PSBGbGF0dGVuZWROb2RlOjpTRUNUSU9OX0RJVklERVIgPworICAgICAgICAg ICAgICAgICAgICAgICAgUVN0cmluZygiPC9MYXllciBncm91cD4iKSA6CisgICAgICAgICAgICAg ICAgICAgICAgICBub2RlLT5uYW1lKCk7CisgICAgICAgICAgICAgICAgICAgIGxheWVyQ29udGVu dERldmljZSA9IDA7CisgICAgICAgICAgICAgICAgICAgIHNlY3Rpb25UeXBlID0KKyAgICAgICAg ICAgICAgICAgICAgICAgIGl0ZW0udHlwZSA9PSBGbGF0dGVuZWROb2RlOjpTRUNUSU9OX0RJVklE RVIgPyBwc2RfYm91bmRpbmdfZGl2aWRlciA6CisgICAgICAgICAgICAgICAgICAgICAgICBpdGVt LnR5cGUgPT0gRmxhdHRlbmVkTm9kZTo6Rk9MREVSX09QRU4gPyBwc2Rfb3Blbl9mb2xkZXIgOgor ICAgICAgICAgICAgICAgICAgICAgICAgcHNkX2Nsb3NlZF9mb2xkZXI7CisgICAgICAgICAgICAg ICAgfQogCi0gICAgICAgIGxheWVyUmVjb3JkLT50cmFuc3BhcmVuY3lQcm90ZWN0ZWQgPSBhbHBo YUxvY2tlZDsKLSAgICAgICAgbGF5ZXJSZWNvcmQtPnZpc2libGUgPSBub2RlVmlzaWJsZTsKLSAg ICAgICAgbGF5ZXJSZWNvcmQtPmlycmVsZXZhbnQgPSBub2RlSXJyZWxldmFudDsKIAotICAgICAg ICBsYXllclJlY29yZC0+bGF5ZXJOYW1lID0gbm9kZU5hbWU7CisgICAgICAgICAgICAgICAgLy8g PT09IG5vIGFjY2VzcyB0byBub2RlIGFueW1vcmUKIAotICAgICAgICBpZiAoIWxheWVyUmVjb3Jk LT53cml0ZShpbywgbGF5ZXJDb250ZW50RGV2aWNlLCBvbmx5VHJhbnNwYXJlbmN5TWFzaywgbWFz a1JlY3QsIHNlY3Rpb25UeXBlKSkgewotICAgICAgICAgICAgZXJyb3IgPSBsYXllclJlY29yZC0+ ZXJyb3I7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9CisgICAg ICAgICAgICAgICAgUVJlY3QgbGF5ZXJSZWN0OwogCi0gICAgLy8gTm93IHNhdmUgdGhlIHBpeGVs IGRhdGEKLSAgICBkYmdGaWxlIDw8ICJzdGFydCB3cml0aW5nIGxheWVyIHBpeGVsIGRhdGEiIDw8 IGlvLT5wb3MoKTsKLSAgICBmb3JlYWNoKFBTRExheWVyUmVjb3JkICpsYXllclJlY29yZCwgbGF5 ZXJzKSB7Ci0gICAgICAgIGlmICghbGF5ZXJSZWNvcmQtPndyaXRlUGl4ZWxEYXRhKGlvKSkgewot ICAgICAgICAgICAgZXJyb3IgPSBsYXllclJlY29yZC0+ZXJyb3I7Ci0gICAgICAgICAgICByZXR1 cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9CisgICAgICAgICAgICAgICAgaWYgKGxheWVyQ29u dGVudERldmljZSkgeworICAgICAgICAgICAgICAgICAgICBRUmVjdCByYyA9IGxheWVyQ29udGVu dERldmljZS0+ZXh0ZW50KCk7CisgICAgICAgICAgICAgICAgICAgIHJjID0gcmMubm9ybWFsaXpl ZCgpOwogCi0gICAgLy8gV3JpdGUgdGhlIGZpbmFsIHNpemUgb2YgdGhlIGJsb2NrCi0gICAgZGJn RmlsZSA8PCAiRmluYWwgaW8gcG9zIGFmdGVyIHdyaXRpbmcgbGF5ZXIgcGl4ZWwgZGF0YSIgPDwg aW8tPnBvcygpOwotICAgIHF1aW50NjQgZW9mX3BvcyA9IGlvLT5wb3MoKTsKKyAgICAgICAgICAg ICAgICAgICAgLy8ga2VlcCB0byB0aGUgbWF4IG9mIHBob3Rvc2hvcCdzIGNhcGFiaWxpdGllcwor ICAgICAgICAgICAgICAgICAgICBpZiAocmMud2lkdGgoKSA+IDMwMDAwKSByYy5zZXRXaWR0aCgz MDAwMCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChyYy5oZWlnaHQoKSA+IDMwMDAwKSByYy5z ZXRIZWlnaHQoMzAwMDApOwogCi0gICAgaW8tPnNlZWsobGF5ZXJJbmZvUG9zKTsKKyAgICAgICAg ICAgICAgICAgICAgbGF5ZXJSZWN0ID0gcmM7CisgICAgICAgICAgICAgICAgfQogCi0gICAgLy8g bGVuZ3RoIG9mIHRoZSBsYXllciBpbmZvIGluZm9ybWF0aW9uIHNlY3Rpb24KLSAgICBxdWludDMy IGxheWVySW5mb1NpemUgPSBlb2ZfcG9zIC0gbGF5ZXJJbmZvUG9zIC0gc2l6ZW9mKHFpbnQzMik7 Ci0gICAgZGJnRmlsZSA8PCAiTGF5ZXIgSW5mbyBTZWN0aW9uIGxlbmd0aCIgPDwgbGF5ZXJJbmZv U2l6ZSA8PCAiYXQiICA8PCBpby0+cG9zKCk7Ci0gICAgcHNkd3JpdGUoaW8sIGxheWVySW5mb1Np emUpOworICAgICAgICAgICAgICAgIGxheWVyUmVjb3JkLT50b3AgPSBsYXllclJlY3QueSgpOwor ICAgICAgICAgICAgICAgIGxheWVyUmVjb3JkLT5sZWZ0ID0gbGF5ZXJSZWN0LngoKTsKKyAgICAg ICAgICAgICAgICBsYXllclJlY29yZC0+Ym90dG9tID0gbGF5ZXJSZWN0LnkoKSArIGxheWVyUmVj dC5oZWlnaHQoKTsKKyAgICAgICAgICAgICAgICBsYXllclJlY29yZC0+cmlnaHQgPSBsYXllclJl Y3QueCgpICsgbGF5ZXJSZWN0LndpZHRoKCk7CiAKLSAgICBpby0+c2Vlayhlb2ZfcG9zKTsKKyAg ICAgICAgICAgICAgICAvLyBjb2xvcnMgKyBhbHBoYSBjaGFubmVsCisgICAgICAgICAgICAgICAg Ly8gbm90ZTogdHJhbnNwYXJlbmN5IG1hc2sgbm90IGluY2x1ZGVkCisgICAgICAgICAgICAgICAg bGF5ZXJSZWNvcmQtPm5DaGFubmVscyA9IGNvbG9yU3BhY2UtPmNvbG9yQ2hhbm5lbENvdW50KCkg KyAxOwogCi0gICAgLy8gV3JpdGUgdGhlIGdsb2JhbCBsYXllciBtYXNrIGluZm8gLS0gd2hpY2gg aXMgZW1wdHkKLSAgICBwc2R3cml0ZShpbywgKHF1aW50MzIpMCk7CisgICAgICAgICAgICAgICAg Q2hhbm5lbEluZm8gKmluZm8gPSBuZXcgQ2hhbm5lbEluZm87CisgICAgICAgICAgICAgICAgaW5m by0+Y2hhbm5lbElkID0gLTE7IC8vIEZvciB0aGUgYWxwaGEgY2hhbm5lbCwgd2hpY2ggd2UgYWx3 YXlzIGhhdmUgaW4gS3JpdGEsIGFuZCBzaG91bGQgYmUgc2F2ZWQgZmlyc3QgaW4KKyAgICAgICAg ICAgICAgICBsYXllclJlY29yZC0+Y2hhbm5lbEluZm9SZWNvcmRzIDw8IGluZm87CiAKLSAgICAv LyBXcml0ZSB0aGUgZmluYWwgc2l6ZSBvZiB0aGUgYmxvY2sKLSAgICBkYmdGaWxlIDw8ICJGaW5h bCBpbyBwb3MgYWZ0ZXIgd3JpdGluZyBsYXllciBwaXhlbCBkYXRhIiA8PCBpby0+cG9zKCk7Ci0g ICAgZW9mX3BvcyA9IGlvLT5wb3MoKTsKKyAgICAgICAgICAgICAgICAvLyB0aGUgcmVzdCBpcyBp biBkaXNwbGF5IG9yZGVyOiByZ2IsIGNteWssIGxhYi4uLgorICAgICAgICAgICAgICAgIGZvciAo aW50IGkgPSAwOyBpIDwgKGludCljb2xvclNwYWNlLT5jb2xvckNoYW5uZWxDb3VudCgpOyArK2kp IHsKKyAgICAgICAgICAgICAgICAgICAgaW5mbyA9IG5ldyBDaGFubmVsSW5mbzsKKyAgICAgICAg ICAgICAgICAgICAgaW5mby0+Y2hhbm5lbElkID0gaTsgLy8gMCBmb3IgcmVkLCAxID0gZ3JlZW4s IGV0YworICAgICAgICAgICAgICAgICAgICBsYXllclJlY29yZC0+Y2hhbm5lbEluZm9SZWNvcmRz IDw8IGluZm87CisgICAgICAgICAgICAgICAgfQogCi0gICAgaW8tPnNlZWsobGF5ZXJJbmZvUG9z KTsKKyAgICAgICAgICAgICAgICBsYXllclJlY29yZC0+YmxlbmRNb2RlS2V5ID0gY29tcG9zaXRl X29wX3RvX3BzZF9ibGVuZG1vZGUobm9kZUNvbXBvc2l0ZU9wKTsKKyAgICAgICAgICAgICAgICBs YXllclJlY29yZC0+aXNQYXNzVGhyb3VnaCA9IG5vZGVJc1Bhc3NUaHJvdWdoOworICAgICAgICAg ICAgICAgIGxheWVyUmVjb3JkLT5vcGFjaXR5ID0gbm9kZU9wYWNpdHk7CisgICAgICAgICAgICAg ICAgbGF5ZXJSZWNvcmQtPmNsaXBwaW5nID0gbm9kZUNsaXBwaW5nOwogCi0gICAgLy8gbGVuZ3Ro IG9mIHRoZSBsYXllciBhbmQgbWFzayBpbmZvIHNlY3Rpb24sIHJvdW5kZWQgdXAgdG8gYSBtdWx0 aXBsZSBvZiB0d28KLSAgICBpby0+c2VlayhsYXllck1hc2tQb3MpOwotICAgIHF1aW50MzIgbGF5 ZXJNYXNrU2l6ZSA9IGVvZl9wb3MgLSBsYXllck1hc2tQb3MgLSBzaXplb2YocWludDMyKTsKLSAg ICBkYmdGaWxlIDw8ICJMYXllciBhbmQgTWFzayBpbmZvcm1hdGlvbiBsZW5ndGgiIDw8IGxheWVy TWFza1NpemUgPDwgImF0IiA8PCBpby0+cG9zKCk7Ci0gICAgcHNkd3JpdGUoaW8sIGxheWVyTWFz a1NpemUpOworICAgICAgICAgICAgICAgIGxheWVyUmVjb3JkLT50cmFuc3BhcmVuY3lQcm90ZWN0 ZWQgPSBhbHBoYUxvY2tlZDsKKyAgICAgICAgICAgICAgICBsYXllclJlY29yZC0+dmlzaWJsZSA9 IG5vZGVWaXNpYmxlOworICAgICAgICAgICAgICAgIGxheWVyUmVjb3JkLT5pcnJlbGV2YW50ID0g bm9kZUlycmVsZXZhbnQ7CiAKLSAgICBpby0+c2Vlayhlb2ZfcG9zKTsKKyAgICAgICAgICAgICAg ICBsYXllclJlY29yZC0+bGF5ZXJOYW1lID0gbm9kZU5hbWU7CiAKLSAgICByZXR1cm4gdHJ1ZTsK KyAgICAgICAgICAgICAgICBsYXllclJlY29yZC0+d3JpdGUoaW8sCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGxheWVyQ29udGVudERldmljZSwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgb25seVRyYW5zcGFyZW5jeU1hc2ssCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIG1hc2tSZWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBzZWN0aW9uVHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg c3R5bGVzWG1sRG9jKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZGJnRmlsZSA8PCAi c3RhcnQgd3JpdGluZyBsYXllciBwaXhlbCBkYXRhIiA8PCBpby0+cG9zKCk7CisKKyAgICAgICAg ICAgIC8vIE5vdyBzYXZlIHRoZSBwaXhlbCBkYXRhCisgICAgICAgICAgICBmb3JlYWNoKFBTRExh eWVyUmVjb3JkICpsYXllclJlY29yZCwgbGF5ZXJzKSB7CisgICAgICAgICAgICAgICAgbGF5ZXJS ZWNvcmQtPndyaXRlUGl4ZWxEYXRhKGlvKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICB9CisK KyAgICAgICAgeworICAgICAgICAgICAgLy8gd3JpdGUgdGhlIGdsb2JhbCBsYXllciBtYXNrIGlu Zm8gLS0gd2hpY2ggaXMgZW1wdHkKKyAgICAgICAgICAgIGNvbnN0IHF1aW50MzIgZ2xvYmFsTWFz a1NpemUgPSAwOworICAgICAgICAgICAgU0FGRV9XUklURV9FWChpbywgZ2xvYmFsTWFza1NpemUp OworICAgICAgICB9CisKKyAgICAgICAgeworICAgICAgICAgICAgUHNkQWRkaXRpb25hbExheWVy SW5mb0Jsb2NrIGdsb2JhbEluZm9TZWN0aW9uKG1faGVhZGVyKTsKKyAgICAgICAgICAgIGdsb2Jh bEluZm9TZWN0aW9uLndyaXRlUGF0dEJsb2NrRXgoaW8sIG1lcmdlZFBhdHRlcm5zWG1sRG9jKTsK KyAgICAgICAgfQorICAgIH0KIH0KZGlmZiAtLWdpdCBhL2tyaXRhL3BsdWdpbnMvZm9ybWF0cy9w c2QvcHNkX2xheWVyX3NlY3Rpb24uaCBiL2tyaXRhL3BsdWdpbnMvZm9ybWF0cy9wc2QvcHNkX2xh eWVyX3NlY3Rpb24uaAppbmRleCBkZGU4ZDU3Li5mNTk5ZjY0IDEwMDY0NAotLS0gYS9rcml0YS9w bHVnaW5zL2Zvcm1hdHMvcHNkL3BzZF9sYXllcl9zZWN0aW9uLmgKKysrIGIva3JpdGEvcGx1Z2lu cy9mb3JtYXRzL3BzZC9wc2RfbGF5ZXJfc2VjdGlvbi5oCkBAIC02MSw3ICs2MSw3IEBAIHB1Ymxp YzoKIAogcHJpdmF0ZToKICAgICBib29sIHJlYWRJbXBsKFFJT0RldmljZSogaW8pOwotCisgICAg dm9pZCB3cml0ZUltcGwoUUlPRGV2aWNlKiBpbywgS2lzTm9kZVNQIHJvb3RMYXllcik7CiBwcml2 YXRlOgogCiAgICAgY29uc3QgUFNESGVhZGVyIG1faGVhZGVyOwpkaWZmIC0tZ2l0IGEva3JpdGEv cGx1Z2lucy9mb3JtYXRzL3BzZC90ZXN0cy9raXNfcHNkX3Rlc3QuY3BwIGIva3JpdGEvcGx1Z2lu cy9mb3JtYXRzL3BzZC90ZXN0cy9raXNfcHNkX3Rlc3QuY3BwCmluZGV4IGMwZDMxOTYuLmI4MzMy NDEgMTAwNjQ0Ci0tLSBhL2tyaXRhL3BsdWdpbnMvZm9ybWF0cy9wc2QvdGVzdHMva2lzX3BzZF90 ZXN0LmNwcAorKysgYi9rcml0YS9wbHVnaW5zL2Zvcm1hdHMvcHNkL3Rlc3RzL2tpc19wc2RfdGVz dC5jcHAKQEAgLTkwLDcgKzkwLDcgQEAgdm9pZCBLaXNQU0RUZXN0Ojp0ZXN0VHJhbnNwYXJlbmN5 TWFzaygpCiAgICAgUVZFUklGWShyZXR2YWwpOwogCiAgICAgewotICAgICAgICBRU2hhcmVkUG9p bnRlcjxLaXNEb2N1bWVudD4gZG9jID0gb3BlblBzZERvY3VtZW50KHNvdXJjZUZpbGVJbmZvKTsK KyAgICAgICAgUVNoYXJlZFBvaW50ZXI8S2lzRG9jdW1lbnQ+IGRvYyA9IG9wZW5Qc2REb2N1bWVu dChkc3RGaWxlSW5mbyk7CiAgICAgICAgIFFWRVJJRlkoZG9jLT5pbWFnZSgpKTsKIAogICAgICAg ICBRSW1hZ2UgcmVzdWx0ID0gZG9jLT5pbWFnZSgpLT5wcm9qZWN0aW9uKCktPmNvbnZlcnRUb1FJ bWFnZSgwLCBkb2MtPmltYWdlKCktPmJvdW5kcygpKTsKQEAgLTE4NCw2ICsxODQsNTkgQEAgdm9p ZCBLaXNQU0RUZXN0Ojp0ZXN0T3BlbkxheWVyU3R5bGVzV2l0aFBhdHRlcm5NdWx0aSgpCiAgICAg UVZFUklGWShsYXllci0+bGF5ZXJTdHlsZSgpLT5zdHJva2UoKS0+cGF0dGVybigpLT52YWxpZCgp KTsKIH0KIAordm9pZCBLaXNQU0RUZXN0Ojp0ZXN0U2F2ZUxheWVyU3R5bGVzV2l0aFBhdHRlcm5N dWx0aSgpCit7CisgICAgUUZpbGVJbmZvIHNvdXJjZUZpbGVJbmZvKFFTdHJpbmcoRklMRVNfREFU QV9ESVIpICsgUURpcjo6c2VwYXJhdG9yKCkgKyAidGVzdF9sc19wYXR0ZXJuX211bHRpLnBzZCIp OworCisgICAgUV9BU1NFUlQoc291cmNlRmlsZUluZm8uZXhpc3RzKCkpOworCisgICAgUVNoYXJl ZFBvaW50ZXI8S2lzRG9jdW1lbnQ+IGRvYyA9IG9wZW5Qc2REb2N1bWVudChzb3VyY2VGaWxlSW5m byk7CisgICAgUVZFUklGWShkb2MtPmltYWdlKCkpOworCisgICAgS2lzTGF5ZXJTUCBsYXllciA9 IGR5bmFtaWNfY2FzdDxLaXNMYXllcio+KGRvYy0+aW1hZ2UoKS0+cm9vdCgpLT5sYXN0Q2hpbGQo KS5kYXRhKCkpOworICAgIFFWRVJJRlkobGF5ZXItPmxheWVyU3R5bGUoKSk7CisKKyAgICBRVkVS SUZZKGxheWVyLT5sYXllclN0eWxlKCktPnBhdHRlcm5PdmVybGF5KCkpOworICAgIFFWRVJJRlko bGF5ZXItPmxheWVyU3R5bGUoKS0+cGF0dGVybk92ZXJsYXkoKS0+ZWZmZWN0RW5hYmxlZCgpKTsK KyAgICBRVkVSSUZZKGxheWVyLT5sYXllclN0eWxlKCktPnBhdHRlcm5PdmVybGF5KCktPnBhdHRl cm4oKSk7CisgICAgUVZFUklGWShsYXllci0+bGF5ZXJTdHlsZSgpLT5wYXR0ZXJuT3ZlcmxheSgp LT5wYXR0ZXJuKCktPnZhbGlkKCkpOworCisgICAgUVZFUklGWShsYXllci0+bGF5ZXJTdHlsZSgp LT5zdHJva2UoKSk7CisgICAgUVZFUklGWShsYXllci0+bGF5ZXJTdHlsZSgpLT5zdHJva2UoKS0+ ZWZmZWN0RW5hYmxlZCgpKTsKKyAgICBRVkVSSUZZKGxheWVyLT5sYXllclN0eWxlKCktPnN0cm9r ZSgpLT5wYXR0ZXJuKCkpOworICAgIFFWRVJJRlkobGF5ZXItPmxheWVyU3R5bGUoKS0+c3Ryb2tl KCktPnBhdHRlcm4oKS0+dmFsaWQoKSk7CisKKworICAgIGRvYy0+c2V0QmFja3VwRmlsZShmYWxz ZSk7CisgICAgZG9jLT5zZXRPdXRwdXRNaW1lVHlwZSgiaW1hZ2Uvdm5kLmFkb2JlLnBob3Rvc2hv cCIpOworICAgIFFGaWxlSW5mbyBkc3RGaWxlSW5mbyhRRGlyOjpjdXJyZW50UGF0aCgpICsgUURp cjo6c2VwYXJhdG9yKCkgKyAidGVzdF9zYXZlX3N0eWxlcy5wc2QiKTsKKyAgICBib29sIHJldHZh bCA9IGRvYy0+c2F2ZUFzKEtVcmwoZHN0RmlsZUluZm8uYWJzb2x1dGVGaWxlUGF0aCgpKSk7Cisg ICAgUVZFUklGWShyZXR2YWwpOworCisgICAgeworICAgICAgICBRU2hhcmVkUG9pbnRlcjxLaXNE b2N1bWVudD4gZG9jID0gb3BlblBzZERvY3VtZW50KGRzdEZpbGVJbmZvKTsKKyAgICAgICAgUVZF UklGWShkb2MtPmltYWdlKCkpOworCisgICAgICAgIFFJbWFnZSByZXN1bHQgPSBkb2MtPmltYWdl KCktPnByb2plY3Rpb24oKS0+Y29udmVydFRvUUltYWdlKDAsIGRvYy0+aW1hZ2UoKS0+Ym91bmRz KCkpOworICAgICAgICAvL1FWRVJJRlkoVGVzdFV0aWw6OmNoZWNrUUltYWdlRXh0ZXJuYWwocmVz dWx0LCAicHNkX3Rlc3QiLCAidHJhbnNwYXJlbmN5X21hc2tzIiwgImtpa2lfc2luZ2xlIikpOwor CisgICAgICAgIEtpc0xheWVyU1AgbGF5ZXIgPSBkeW5hbWljX2Nhc3Q8S2lzTGF5ZXIqPihkb2Mt PmltYWdlKCktPnJvb3QoKS0+bGFzdENoaWxkKCkuZGF0YSgpKTsKKyAgICAgICAgUVZFUklGWShs YXllci0+bGF5ZXJTdHlsZSgpKTsKKworICAgICAgICBRVkVSSUZZKGxheWVyLT5sYXllclN0eWxl KCktPnBhdHRlcm5PdmVybGF5KCkpOworICAgICAgICBRVkVSSUZZKGxheWVyLT5sYXllclN0eWxl KCktPnBhdHRlcm5PdmVybGF5KCktPmVmZmVjdEVuYWJsZWQoKSk7CisgICAgICAgIFFWRVJJRlko bGF5ZXItPmxheWVyU3R5bGUoKS0+cGF0dGVybk92ZXJsYXkoKS0+cGF0dGVybigpKTsKKyAgICAg ICAgUVZFUklGWShsYXllci0+bGF5ZXJTdHlsZSgpLT5wYXR0ZXJuT3ZlcmxheSgpLT5wYXR0ZXJu KCktPnZhbGlkKCkpOworCisgICAgICAgIFFWRVJJRlkobGF5ZXItPmxheWVyU3R5bGUoKS0+c3Ry b2tlKCkpOworICAgICAgICBRVkVSSUZZKGxheWVyLT5sYXllclN0eWxlKCktPnN0cm9rZSgpLT5l ZmZlY3RFbmFibGVkKCkpOworICAgICAgICBRVkVSSUZZKGxheWVyLT5sYXllclN0eWxlKCktPnN0 cm9rZSgpLT5wYXR0ZXJuKCkpOworICAgICAgICBRVkVSSUZZKGxheWVyLT5sYXllclN0eWxlKCkt PnN0cm9rZSgpLT5wYXR0ZXJuKCktPnZhbGlkKCkpOworICAgIH0KKworfQorCisKIAogUVRFU1Rf S0RFTUFJTihLaXNQU0RUZXN0LCBHVUkpCiAKZGlmZiAtLWdpdCBhL2tyaXRhL3BsdWdpbnMvZm9y bWF0cy9wc2QvdGVzdHMva2lzX3BzZF90ZXN0LmggYi9rcml0YS9wbHVnaW5zL2Zvcm1hdHMvcHNk L3Rlc3RzL2tpc19wc2RfdGVzdC5oCmluZGV4IDliMDYyYzYuLjllODU0YWEgMTAwNjQ0Ci0tLSBh L2tyaXRhL3BsdWdpbnMvZm9ybWF0cy9wc2QvdGVzdHMva2lzX3BzZF90ZXN0LmgKKysrIGIva3Jp dGEvcGx1Z2lucy9mb3JtYXRzL3BzZC90ZXN0cy9raXNfcHNkX3Rlc3QuaApAQCAtMzQsNiArMzQs OCBAQCBwcml2YXRlIFFfU0xPVFM6CiAKICAgICB2b2lkIHRlc3RPcGVuTGF5ZXJTdHlsZXNXaXRo UGF0dGVybigpOwogICAgIHZvaWQgdGVzdE9wZW5MYXllclN0eWxlc1dpdGhQYXR0ZXJuTXVsdGko KTsKKworICAgIHZvaWQgdGVzdFNhdmVMYXllclN0eWxlc1dpdGhQYXR0ZXJuTXVsdGkoKTsKIH07 CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEva3JpdGEvdWkva2lzX2FzbF9sYXllcl9zdHlsZV9zZXJp YWxpemVyLmNwcCBiL2tyaXRhL3VpL2tpc19hc2xfbGF5ZXJfc3R5bGVfc2VyaWFsaXplci5jcHAK aW5kZXggN2I3MTExMC4uZGJmMzU0YiAxMDA2NDQKLS0tIGEva3JpdGEvdWkva2lzX2FzbF9sYXll cl9zdHlsZV9zZXJpYWxpemVyLmNwcAorKysgYi9rcml0YS91aS9raXNfYXNsX2xheWVyX3N0eWxl X3NlcmlhbGl6ZXIuY3BwCkBAIC0yOSw2ICsyOSw5IEBACiAjaW5jbHVkZSA8S29TdG9wR3JhZGll bnQuaD4KICNpbmNsdWRlIDxLb1BhdHRlcm4uaD4KIAorI2luY2x1ZGUgImtpc19kb21fdXRpbHMu aCIKKworCiAjaW5jbHVkZSAicHNkLmgiCiAjaW5jbHVkZSAia2lzX2dsb2JhbC5oIgogI2luY2x1 ZGUgImtpc19wc2RfbGF5ZXJfc3R5bGUuaCIKQEAgLTIzNiw3ICsyMzksNyBAQCBRU3RyaW5nIHN0 cm9rZUZpbGxUeXBlVG9TdHJpbmcocHNkX2ZpbGxfdHlwZSBwb3NpdGlvbikKICAgICByZXR1cm4g cmVzdWx0OwogfQogCi1RVmVjdG9yPEtvUGF0dGVybio+IEtpc0FzbExheWVyU3R5bGVTZXJpYWxp emVyOjpmZXRjaEFsbFBhdHRlcm5zKEtpc1BTRExheWVyU3R5bGUgKnN0eWxlKQorUVZlY3RvcjxL b1BhdHRlcm4qPiBLaXNBc2xMYXllclN0eWxlU2VyaWFsaXplcjo6ZmV0Y2hBbGxQYXR0ZXJucyhL aXNQU0RMYXllclN0eWxlICpzdHlsZSkgY29uc3QKIHsKICAgICBRVmVjdG9yIDxLb1BhdHRlcm4q PiBhbGxQYXR0ZXJuczsKIApAQCAtMjY5LDEwICsyNzIsOSBAQCBRU3RyaW5nIGZldGNoUGF0dGVy blV1aWRTYWZlKEtvUGF0dGVybiAqcGF0dGVybiwgUUhhc2g8S29QYXR0ZXJuKiwgUVN0cmluZz4g cGF0dAogICAgIH0KIH0KIAotCi12b2lkIEtpc0FzbExheWVyU3R5bGVTZXJpYWxpemVyOjpzYXZl VG9EZXZpY2UoUUlPRGV2aWNlICpkZXZpY2UpCitRRG9tRG9jdW1lbnQgS2lzQXNsTGF5ZXJTdHls ZVNlcmlhbGl6ZXI6OmZvcm1YbWxEb2N1bWVudCgpIGNvbnN0CiB7Ci0gICAgS0lTX0FTU0VSVF9S RUNPVkVSX1JFVFVSTighbV9zdHlsZXNWZWN0b3IuaXNFbXB0eSgpKTsKKyAgICBLSVNfQVNTRVJU X1JFQ09WRVIoIW1fc3R5bGVzVmVjdG9yLmlzRW1wdHkoKSkgeyByZXR1cm4gUURvbURvY3VtZW50 KCk7IH0KIAogICAgIFFWZWN0b3I8S29QYXR0ZXJuKj4gYWxsUGF0dGVybnM7CiAKQEAgLTY3Niw4 ICs2NzgsNTMgQEAgdm9pZCBLaXNBc2xMYXllclN0eWxlU2VyaWFsaXplcjo6c2F2ZVRvRGV2aWNl KFFJT0RldmljZSAqZGV2aWNlKQogICAgICAgICB3LmxlYXZlRGVzY3JpcHRvcigpOwogICAgIH0K IAorICAgIHJldHVybiB3LmRvY3VtZW50KCk7Cit9CisKK2lubGluZSBRRG9tTm9kZSBmaW5kTm9k ZUJ5Q2xhc3NJZChjb25zdCBRU3RyaW5nICZjbGFzc0lkLCBRRG9tTm9kZSBwYXJlbnQpIHsKKyAg ICByZXR1cm4gS2lzRG9tVXRpbHM6OmZpbmRFbGVtZW50QnlBdHRpYnV0ZShwYXJlbnQsICJub2Rl IiwgImNsYXNzSWQiLCBjbGFzc0lkKTsKK30KKwordm9pZCByZXBsYWNlQWxsQ2hpbGRyZW4oUURv bU5vZGUgc3JjLCBRRG9tTm9kZSBkc3QpCit7CisgICAgUURvbU5vZGUgbm9kZTsKKworICAgIGRv IHsKKyAgICAgICAgbm9kZSA9IGRzdC5sYXN0Q2hpbGQoKTsKKyAgICAgICAgZHN0LnJlbW92ZUNo aWxkKG5vZGUpOworCisgICAgfSB3aGlsZSghbm9kZS5pc051bGwoKSk7CisKKworICAgIG5vZGUg PSBzcmMuZmlyc3RDaGlsZCgpOworICAgIHdoaWxlKCFub2RlLmlzTnVsbCgpKSB7CisgICAgICAg IGRzdC5hcHBlbmRDaGlsZChub2RlKTsKKyAgICAgICAgbm9kZSA9IHNyYy5maXJzdENoaWxkKCk7 CisgICAgfQorCisgICAgc3JjLnBhcmVudE5vZGUoKS5yZW1vdmVDaGlsZChzcmMpOworfQorCitR RG9tRG9jdW1lbnQgS2lzQXNsTGF5ZXJTdHlsZVNlcmlhbGl6ZXI6OmZvcm1Qc2RYbWxEb2N1bWVu dCgpIGNvbnN0Cit7CisgICAgUURvbURvY3VtZW50IGRvYyA9IGZvcm1YbWxEb2N1bWVudCgpOwor CisgICAgUURvbU5vZGUgbnVsbE5vZGUgPSBmaW5kTm9kZUJ5Q2xhc3NJZCgibnVsbCIsIGRvYy5k b2N1bWVudEVsZW1lbnQoKSk7CisgICAgUURvbU5vZGUgc3R5bE5vZGUgPSBmaW5kTm9kZUJ5Q2xh c3NJZCgiU3R5bCIsIGRvYy5kb2N1bWVudEVsZW1lbnQoKSk7CisgICAgUURvbU5vZGUgbGVmeE5v ZGUgPSBmaW5kTm9kZUJ5Q2xhc3NJZCgiTGVmeCIsIHN0eWxOb2RlKTsKKworICAgIHJlcGxhY2VB bGxDaGlsZHJlbihsZWZ4Tm9kZSwgbnVsbE5vZGUpOworCisgICAgcmV0dXJuIGRvYzsKK30KKwor dm9pZCBLaXNBc2xMYXllclN0eWxlU2VyaWFsaXplcjo6c2F2ZVRvRGV2aWNlKFFJT0RldmljZSAq ZGV2aWNlKQoreworICAgIFFEb21Eb2N1bWVudCBkb2MgPSBmb3JtWG1sRG9jdW1lbnQoKTsKKyAg ICBpZiAoZG9jLmlzTnVsbCgpKSByZXR1cm4gOworCiAgICAgS2lzQXNsV3JpdGVyIHdyaXRlcjsK LSAgICB3cml0ZXIud3JpdGVGaWxlKGRldmljZSwgdy5kb2N1bWVudCgpKTsKKyAgICB3cml0ZXIu d3JpdGVGaWxlKGRldmljZSwgZG9jKTsKIH0KIAogdm9pZCBjb252ZXJ0QW5kU2V0QmxlbmRNb2Rl KGNvbnN0IFFTdHJpbmcgJm1vZGUsCmRpZmYgLS1naXQgYS9rcml0YS91aS9raXNfYXNsX2xheWVy X3N0eWxlX3NlcmlhbGl6ZXIuaCBiL2tyaXRhL3VpL2tpc19hc2xfbGF5ZXJfc3R5bGVfc2VyaWFs aXplci5oCmluZGV4IGZjYTdkYmEuLjc2YmU4MmQgMTAwNjQ0Ci0tLSBhL2tyaXRhL3VpL2tpc19h c2xfbGF5ZXJfc3R5bGVfc2VyaWFsaXplci5oCisrKyBiL2tyaXRhL3VpL2tpc19hc2xfbGF5ZXJf c3R5bGVfc2VyaWFsaXplci5oCkBAIC00Myw2ICs0MywxMCBAQCBwdWJsaWM6CiAgICAgdm9pZCBy ZWdpc3RlclBTRFBhdHRlcm4oY29uc3QgUURvbURvY3VtZW50ICZkb2MpOwogICAgIHZvaWQgcmVh ZEZyb21QU0RYTUwoY29uc3QgUURvbURvY3VtZW50ICZkb2MpOwogCisgICAgUURvbURvY3VtZW50 IGZvcm1YbWxEb2N1bWVudCgpIGNvbnN0OworICAgIFFEb21Eb2N1bWVudCBmb3JtUHNkWG1sRG9j dW1lbnQoKSBjb25zdDsKKworCiBwcml2YXRlOgogICAgIHZvaWQgcmVnaXN0ZXJQYXR0ZXJuT2Jq ZWN0KGNvbnN0IEtvUGF0dGVybiAqcGF0dGVybik7CiAKQEAgLTUwLDcgKzU0LDcgQEAgcHJpdmF0 ZToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUVN0cmluZyAmcGF0dGVybk5h bWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb3N0OjpmdW5jdGlvbjx2b2lkIChL b1BhdHRlcm4gKik+IHNldFBhdHRlcm4pOwogCi0gICAgUVZlY3RvcjxLb1BhdHRlcm4qPiBmZXRj aEFsbFBhdHRlcm5zKEtpc1BTRExheWVyU3R5bGUgKnN0eWxlKTsKKyAgICBRVmVjdG9yPEtvUGF0 dGVybio+IGZldGNoQWxsUGF0dGVybnMoS2lzUFNETGF5ZXJTdHlsZSAqc3R5bGUpIGNvbnN0Owog CiAgICAgdm9pZCBuZXdTdHlsZVN0YXJ0ZWQoYm9vbCBpc1BzZFN0cnVjdHVyZSk7CiAgICAgdm9p ZCBjb25uZWN0Q2F0Y2hlclRvU3R5bGUoS2lzUFNETGF5ZXJTdHlsZSAqc3R5bGUsIGNvbnN0IFFT dHJpbmcgJnByZWZpeCk7Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fCktyaXRhIG1haWxpbmcgbGlzdApraW1hZ2VzaG9wQGtkZS5vcmcKaHR0cHM6Ly9tYWls LmtkZS5vcmcvbWFpbG1hbi9saXN0aW5mby9raW1hZ2VzaG9wCg==