From mboxrd@z Thu Jan 1 00:00:00 1970 From: AKASHI Takahiro Date: Fri, 11 Oct 2019 16:41:58 +0900 Subject: [U-Boot] [PATCH v1 09/11] lib: crypto: add x509 parser In-Reply-To: <20191011074200.30269-1-takahiro.akashi@linaro.org> References: <20191011074200.30269-1-takahiro.akashi@linaro.org> Message-ID: <20191011074200.30269-10-takahiro.akashi@linaro.org> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="tis-620" Content-Transfer-Encoding: base64 To: u-boot@lists.denx.de SW1wb3J0ZWQgZnJvbSBsaW51eCBrZXJuZWwgdjUuMy4KClNpZ25lZC1vZmYtYnk6IEFLQVNISSBU YWthaGlybyA8dGFrYWhpcm8uYWthc2hpQGxpbmFyby5vcmc+Ci0tLQogbGliL0tjb25maWcgICAg ICAgICAgICAgICAgICAgfCAgIDEgKwogbGliL01ha2VmaWxlICAgICAgICAgICAgICAgICAgfCAg IDEgKwogbGliL2NyeXB0by9LY29uZmlnICAgICAgICAgICAgfCAgMTAgKwogbGliL2NyeXB0by9N YWtlZmlsZSAgICAgICAgICAgfCAgMTcgKwogbGliL2NyeXB0by94NTA5LmFzbjEgICAgICAgICAg fCAgNjAgKysrCiBsaWIvY3J5cHRvL3g1MDlfYWtpZC5hc24xICAgICB8ICAzNSArKwogbGliL2Ny eXB0by94NTA5X2NlcnRfcGFyc2VyLmMgfCA2OTcgKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKwogbGliL2NyeXB0by94NTA5X3BhcnNlci5oICAgICAgfCAgNTcgKysrCiBsaWIvY3J5 cHRvL3g1MDlfcHVibGljX2tleS5jICB8IDI5MiArKysrKysrKysrKysrKwogOSBmaWxlcyBjaGFu Z2VkLCAxMTcwIGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWIvY3J5cHRvL3g1 MDkuYXNuMQogY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYi9jcnlwdG8veDUwOV9ha2lkLmFzbjEKIGNy ZWF0ZSBtb2RlIDEwMDY0NCBsaWIvY3J5cHRvL3g1MDlfY2VydF9wYXJzZXIuYwogY3JlYXRlIG1v ZGUgMTAwNjQ0IGxpYi9jcnlwdG8veDUwOV9wYXJzZXIuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGxp Yi9jcnlwdG8veDUwOV9wdWJsaWNfa2V5LmMKCmRpZmYgLS1naXQgYS9saWIvS2NvbmZpZyBiL2xp Yi9LY29uZmlnCmluZGV4IGQyOTU1YzhmZWIwZS4uYWE0NGY1MmQ5MTgxIDEwMDY0NAotLS0gYS9s aWIvS2NvbmZpZworKysgYi9saWIvS2NvbmZpZwpAQCAtMjUzLDYgKzI1Myw3IEBAIGNvbmZpZyBB RVMKIAkgIHByZXNlbnQuCiAKIHNvdXJjZSBsaWIvcnNhL0tjb25maWcKK3NvdXJjZSBsaWIvY3J5 cHRvL0tjb25maWcKIAogY29uZmlnIFRQTQogCWJvb2wgIlRydXN0ZWQgUGxhdGZvcm0gTW9kdWxl IChUUE0pIFN1cHBvcnQiCmRpZmYgLS1naXQgYS9saWIvTWFrZWZpbGUgYi9saWIvTWFrZWZpbGUK aW5kZXggNjc3ZWMzM2ExY2UxLi42NGZmMTA1OTQ1YjMgMTAwNjQ0Ci0tLSBhL2xpYi9NYWtlZmls ZQorKysgYi9saWIvTWFrZWZpbGUKQEAgLTE4LDYgKzE4LDcgQEAgb2JqLSQoQ09ORklHX0NNRF9E SFJZU1RPTkUpICs9IGRocnkvCiBvYmotJChDT05GSUdfQVJDSF9BVDkxKSArPSBhdDkxLwogb2Jq LSQoQ09ORklHX09QVEVFKSArPSBvcHRlZS8KIG9iai0kKENPTkZJR19CVUlMRF9BU04xKSArPSBh c24xX2RlY29kZXIubworb2JqLXkgKz0gY3J5cHRvLwogCiBvYmotJChDT05GSUdfQUVTKSArPSBh ZXMubwogCmRpZmYgLS1naXQgYS9saWIvY3J5cHRvL0tjb25maWcgYi9saWIvY3J5cHRvL0tjb25m aWcKaW5kZXggYjhlODI4OGQyZjgwLi5hODdjZjYxMDdmYzEgMTAwNjQ0Ci0tLSBhL2xpYi9jcnlw dG8vS2NvbmZpZworKysgYi9saWIvY3J5cHRvL0tjb25maWcKQEAgLTE2LDQgKzE2LDE0IEBAIGNv bmZpZyBBU1lNTUVUUklDX1BVQkxJQ19LRVlfU1VCVFlQRQogCSAgYXBwcm9wcmlhdGUgaGFzaCBh bGdvcml0aG1zIChzdWNoIGFzIFNIQS0xKSBtdXN0IGJlIGF2YWlsYWJsZS4KIAkgIEVOT1BLRyB3 aWxsIGJlIHJlcG9ydGVkIGlmIHRoZSByZXF1aXNpdGUgYWxnb3JpdGhtIGlzIHVuYXZhaWxhYmxl LgogCitjb25maWcgWDUwOV9DRVJUSUZJQ0FURV9QQVJTRVIKKwlib29sICJYLjUwOSBjZXJ0aWZp Y2F0ZSBwYXJzZXIiCisJZGVwZW5kcyBvbiBBU1lNTUVUUklDX1BVQkxJQ19LRVlfU1VCVFlQRQor CXNlbGVjdCBBU04xCisJc2VsZWN0IE9JRF9SRUdJU1RSWQorCWhlbHAKKwkgIFRoaXMgb3B0aW9u IHByb3ZpZGVzIHN1cHBvcnQgZm9yIHBhcnNpbmcgWC41MDkgZm9ybWF0IGJsb2JzIGZvciBrZXkK KwkgIGRhdGEgYW5kIHByb3ZpZGVzIHRoZSBhYmlsaXR5IHRvIGluc3RhbnRpYXRlIGEgY3J5cHRv IGtleSBmcm9tIGEKKwkgIHB1YmxpYyBrZXkgcGFja2V0IGZvdW5kIGluc2lkZSB0aGUgY2VydGlm aWNhdGUuCisKIGVuZGlmICMgQVNZTU1FVFJJQ19LRVlfVFlQRQpkaWZmIC0tZ2l0IGEvbGliL2Ny eXB0by9NYWtlZmlsZSBiL2xpYi9jcnlwdG8vTWFrZWZpbGUKaW5kZXggYTI4NGRlOWUwNDExLi4y ZWMyZDgxYTFmM2MgMTAwNjQ0Ci0tLSBhL2xpYi9jcnlwdG8vTWFrZWZpbGUKKysrIGIvbGliL2Ny eXB0by9NYWtlZmlsZQpAQCAtOCwzICs4LDIwIEBAIG9iai0kKENPTkZJR19BU1lNTUVUUklDX0tF WV9UWVBFKSArPSBhc3ltbWV0cmljX2tleXMubwogYXN5bW1ldHJpY19rZXlzLXkgOj0gYXN5bW1l dHJpY190eXBlLm8KIAogb2JqLSQoQ09ORklHX0FTWU1NRVRSSUNfUFVCTElDX0tFWV9TVUJUWVBF KSArPSBwdWJsaWNfa2V5Lm8KKworIworIyBYLjUwOSBDZXJ0aWZpY2F0ZSBoYW5kbGluZworIwor b2JqLSQoQ09ORklHX1g1MDlfQ0VSVElGSUNBVEVfUEFSU0VSKSArPSB4NTA5X2tleV9wYXJzZXIu bworeDUwOV9rZXlfcGFyc2VyLXkgOj0gXAorCXg1MDkuYXNuMS5vIFwKKwl4NTA5X2FraWQuYXNu MS5vIFwKKwl4NTA5X2NlcnRfcGFyc2VyLm8gXAorCXg1MDlfcHVibGljX2tleS5vCisKKyQob2Jq KS94NTA5X2NlcnRfcGFyc2VyLm86IFwKKwkkKG9iaikveDUwOS5hc24xLmggXAorCSQob2JqKS94 NTA5X2FraWQuYXNuMS5oCisKKyQob2JqKS94NTA5LmFzbjEubzogJChvYmopL3g1MDkuYXNuMS5j ICQob2JqKS94NTA5LmFzbjEuaAorJChvYmopL3g1MDlfYWtpZC5hc24xLm86ICQob2JqKS94NTA5 X2FraWQuYXNuMS5jICQob2JqKS94NTA5X2FraWQuYXNuMS5oCmRpZmYgLS1naXQgYS9saWIvY3J5 cHRvL3g1MDkuYXNuMSBiL2xpYi9jcnlwdG8veDUwOS5hc24xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAwMDAwMC4uNWM5ZjRlNGE1MjMxCi0tLSAvZGV2L251bGwKKysrIGIvbGli L2NyeXB0by94NTA5LmFzbjEKQEAgLTAsMCArMSw2MCBAQAorQ2VydGlmaWNhdGUgOjo9IFNFUVVF TkNFIHsKKwl0YnNDZXJ0aWZpY2F0ZQkJVEJTQ2VydGlmaWNhdGUgKHsgeDUwOV9ub3RlX3Ric19j ZXJ0aWZpY2F0ZSB9KSwKKwlzaWduYXR1cmVBbGdvcml0aG0JQWxnb3JpdGhtSWRlbnRpZmllciwK KwlzaWduYXR1cmUJCUJJVCBTVFJJTkcgKHsgeDUwOV9ub3RlX3NpZ25hdHVyZSB9KQorCX0KKwor VEJTQ2VydGlmaWNhdGUgOjo9IFNFUVVFTkNFIHsKKwl2ZXJzaW9uICAgICAgICAgICBbIDAgXQlW ZXJzaW9uIERFRkFVTFQsCisJc2VyaWFsTnVtYmVyCQlDZXJ0aWZpY2F0ZVNlcmlhbE51bWJlciAo eyB4NTA5X25vdGVfc2VyaWFsIH0pLAorCXNpZ25hdHVyZQkJQWxnb3JpdGhtSWRlbnRpZmllciAo eyB4NTA5X25vdGVfcGtleV9hbGdvIH0pLAorCWlzc3VlcgkJCU5hbWUgKHsgeDUwOV9ub3RlX2lz c3VlciB9KSwKKwl2YWxpZGl0eQkJVmFsaWRpdHksCisJc3ViamVjdAkJCU5hbWUgKHsgeDUwOV9u b3RlX3N1YmplY3QgfSksCisJc3ViamVjdFB1YmxpY0tleUluZm8JU3ViamVjdFB1YmxpY0tleUlu Zm8sCisJaXNzdWVyVW5pcXVlSUQgICAgWyAxIF0JSU1QTElDSVQgVW5pcXVlSWRlbnRpZmllciBP UFRJT05BTCwKKwlzdWJqZWN0VW5pcXVlSUQgICBbIDIgXQlJTVBMSUNJVCBVbmlxdWVJZGVudGlm aWVyIE9QVElPTkFMLAorCWV4dGVuc2lvbnMgICAgICAgIFsgMyBdCUV4dGVuc2lvbnMgT1BUSU9O QUwKKwl9CisKK1ZlcnNpb24gOjo9IElOVEVHRVIKK0NlcnRpZmljYXRlU2VyaWFsTnVtYmVyIDo6 PSBJTlRFR0VSCisKK0FsZ29yaXRobUlkZW50aWZpZXIgOjo9IFNFUVVFTkNFIHsKKwlhbGdvcml0 aG0JCU9CSkVDVCBJREVOVElGSUVSICh7IHg1MDlfbm90ZV9PSUQgfSksCisJcGFyYW1ldGVycwkJ QU5ZIE9QVElPTkFMICh7IHg1MDlfbm90ZV9wYXJhbXMgfSkKK30KKworTmFtZSA6Oj0gU0VRVUVO Q0UgT0YgUmVsYXRpdmVEaXN0aW5ndWlzaGVkTmFtZQorCitSZWxhdGl2ZURpc3Rpbmd1aXNoZWRO YW1lIDo6PSBTRVQgT0YgQXR0cmlidXRlVmFsdWVBc3NlcnRpb24KKworQXR0cmlidXRlVmFsdWVB c3NlcnRpb24gOjo9IFNFUVVFTkNFIHsKKwlhdHRyaWJ1dGVUeXBlCQlPQkpFQ1QgSURFTlRJRklF UiAoeyB4NTA5X25vdGVfT0lEIH0pLAorCWF0dHJpYnV0ZVZhbHVlCQlBTlkgKHsgeDUwOV9leHRy YWN0X25hbWVfc2VnbWVudCB9KQorCX0KKworVmFsaWRpdHkgOjo9IFNFUVVFTkNFIHsKKwlub3RC ZWZvcmUJCVRpbWUgKHsgeDUwOV9ub3RlX25vdF9iZWZvcmUgfSksCisJbm90QWZ0ZXIJCVRpbWUg KHsgeDUwOV9ub3RlX25vdF9hZnRlciB9KQorCX0KKworVGltZSA6Oj0gQ0hPSUNFIHsKKwl1dGNU aW1lCQkJVVRDVGltZSwKKwlnZW5lcmFsVGltZQkJR2VuZXJhbGl6ZWRUaW1lCisJfQorCitTdWJq ZWN0UHVibGljS2V5SW5mbyA6Oj0gU0VRVUVOQ0UgeworCWFsZ29yaXRobQkJQWxnb3JpdGhtSWRl bnRpZmllciwKKwlzdWJqZWN0UHVibGljS2V5CUJJVCBTVFJJTkcgKHsgeDUwOV9leHRyYWN0X2tl eV9kYXRhIH0pCisJfQorCitVbmlxdWVJZGVudGlmaWVyIDo6PSBCSVQgU1RSSU5HCisKK0V4dGVu c2lvbnMgOjo9IFNFUVVFTkNFIE9GIEV4dGVuc2lvbgorCitFeHRlbnNpb24gOjo9IFNFUVVFTkNF IHsKKwlleHRuaWQJCQlPQkpFQ1QgSURFTlRJRklFUiAoeyB4NTA5X25vdGVfT0lEIH0pLAorCWNy aXRpY2FsCQlCT09MRUFOIERFRkFVTFQsCisJZXh0blZhbHVlCQlPQ1RFVCBTVFJJTkcgKHsgeDUw OV9wcm9jZXNzX2V4dGVuc2lvbiB9KQorCX0KZGlmZiAtLWdpdCBhL2xpYi9jcnlwdG8veDUwOV9h a2lkLmFzbjEgYi9saWIvY3J5cHRvL3g1MDlfYWtpZC5hc24xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAwMDAwMC4uMWEzMzIzMWE3NWE4Ci0tLSAvZGV2L251bGwKKysrIGIvbGli L2NyeXB0by94NTA5X2FraWQuYXNuMQpAQCAtMCwwICsxLDM1IEBACistLSBYLjUwOSBBdXRob3Jp dHlLZXlJZGVudGlmaWVyCistLSByZmM1MjgwIHNlY3Rpb24gNC4yLjEuMQorCitBdXRob3JpdHlL ZXlJZGVudGlmaWVyIDo6PSBTRVFVRU5DRSB7CisJa2V5SWRlbnRpZmllcgkJCVswXSBJTVBMSUNJ VCBLZXlJZGVudGlmaWVyCQlPUFRJT05BTCwKKwlhdXRob3JpdHlDZXJ0SXNzdWVyCQlbMV0gSU1Q TElDSVQgR2VuZXJhbE5hbWVzCQlPUFRJT05BTCwKKwlhdXRob3JpdHlDZXJ0U2VyaWFsTnVtYmVy CVsyXSBJTVBMSUNJVCBDZXJ0aWZpY2F0ZVNlcmlhbE51bWJlcglPUFRJT05BTAorCX0KKworS2V5 SWRlbnRpZmllciA6Oj0gT0NURVQgU1RSSU5HICh7IHg1MDlfYWtpZF9ub3RlX2tpZCB9KQorCitD ZXJ0aWZpY2F0ZVNlcmlhbE51bWJlciA6Oj0gSU5URUdFUiAoeyB4NTA5X2FraWRfbm90ZV9zZXJp YWwgfSkKKworR2VuZXJhbE5hbWVzIDo6PSBTRVFVRU5DRSBPRiBHZW5lcmFsTmFtZQorCitHZW5l cmFsTmFtZSA6Oj0gQ0hPSUNFIHsKKwlvdGhlck5hbWUJCQlbMF0gQU5ZLAorCXJmYzgyMk5hbWUJ CQlbMV0gSUE1U3RyaW5nLAorCWROU05hbWUJCQkJWzJdIElBNVN0cmluZywKKwl4NDAwQWRkcmVz cwkJCVszXSBBTlksCisJZGlyZWN0b3J5TmFtZQkJCVs0XSBOYW1lICh7IHg1MDlfYWtpZF9ub3Rl X25hbWUgfSksCisJZWRpUGFydHlOYW1lCQkJWzVdIEFOWSwKKwl1bmlmb3JtUmVzb3VyY2VJZGVu dGlmaWVyCVs2XSBJQTVTdHJpbmcsCisJaVBBZGRyZXNzCQkJWzddIE9DVEVUIFNUUklORywKKwly ZWdpc3RlcmVkSUQJCQlbOF0gT0JKRUNUIElERU5USUZJRVIKKwl9CisKK05hbWUgOjo9IFNFUVVF TkNFIE9GIFJlbGF0aXZlRGlzdGluZ3Vpc2hlZE5hbWUKKworUmVsYXRpdmVEaXN0aW5ndWlzaGVk TmFtZSA6Oj0gU0VUIE9GIEF0dHJpYnV0ZVZhbHVlQXNzZXJ0aW9uCisKK0F0dHJpYnV0ZVZhbHVl QXNzZXJ0aW9uIDo6PSBTRVFVRU5DRSB7CisJYXR0cmlidXRlVHlwZQkJT0JKRUNUIElERU5USUZJ RVIgKHsgeDUwOV9ub3RlX09JRCB9KSwKKwlhdHRyaWJ1dGVWYWx1ZQkJQU5ZICh7IHg1MDlfZXh0 cmFjdF9uYW1lX3NlZ21lbnQgfSkKKwl9CmRpZmYgLS1naXQgYS9saWIvY3J5cHRvL3g1MDlfY2Vy dF9wYXJzZXIuYyBiL2xpYi9jcnlwdG8veDUwOV9jZXJ0X3BhcnNlci5jCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uZTZkMmE0MjZhMGJjCi0tLSAvZGV2L251bGwKKysr IGIvbGliL2NyeXB0by94NTA5X2NlcnRfcGFyc2VyLmMKQEAgLTAsMCArMSw2OTcgQEAKKy8vIFNQ RFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyCisvKiBYLjUwOSBjZXJ0aWZp Y2F0ZSBwYXJzZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgUmVkIEhhdCwgSW5jLiBBbGwg UmlnaHRzIFJlc2VydmVkLgorICogV3JpdHRlbiBieSBEYXZpZCBIb3dlbGxzIChkaG93ZWxscyBh dCByZWRoYXQuY29tKQorICovCisKKyNkZWZpbmUgcHJfZm10KGZtdCkgIlguNTA5OiAiZm10Cisj aW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaWZuZGVmIF9fVUJPT1RfXworI2luY2x1ZGUgPGxp bnV4L2V4cG9ydC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNlbmRpZgorI2luY2x1ZGUg PGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGxpbnV4L29pZF9yZWdpc3RyeS5oPgorI2lmZGVmIF9f VUJPT1RfXworI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2VuZGlmCisjaW5jbHVkZSA8Y3J5 cHRvL3B1YmxpY19rZXkuaD4KKyNpbmNsdWRlICJ4NTA5X3BhcnNlci5oIgorI2luY2x1ZGUgIng1 MDkuYXNuMS5oIgorI2luY2x1ZGUgIng1MDlfYWtpZC5hc24xLmgiCisKK3N0cnVjdCB4NTA5X3Bh cnNlX2NvbnRleHQgeworCXN0cnVjdCB4NTA5X2NlcnRpZmljYXRlCSpjZXJ0OwkJLyogQ2VydGlm aWNhdGUgYmVpbmcgY29uc3RydWN0ZWQgKi8KKwl1bnNpZ25lZCBsb25nCWRhdGE7CQkJLyogU3Rh cnQgb2YgZGF0YSAqLworCWNvbnN0IHZvaWQJKmNlcnRfc3RhcnQ7CQkvKiBTdGFydCBvZiBjZXJ0 IGNvbnRlbnQgKi8KKwljb25zdCB2b2lkCSprZXk7CQkJLyogS2V5IGRhdGEgKi8KKwlzaXplX3QJ CWtleV9zaXplOwkJLyogU2l6ZSBvZiBrZXkgZGF0YSAqLworCWNvbnN0IHZvaWQJKnBhcmFtczsJ CS8qIEtleSBwYXJhbWV0ZXJzICovCisJc2l6ZV90CQlwYXJhbXNfc2l6ZTsJCS8qIFNpemUgb2Yg a2V5IHBhcmFtZXRlcnMgKi8KKwllbnVtIE9JRAlrZXlfYWxnbzsJCS8qIFB1YmxpYyBrZXkgYWxn b3JpdGhtICovCisJZW51bSBPSUQJbGFzdF9vaWQ7CQkvKiBMYXN0IE9JRCBlbmNvdW50ZXJlZCAq LworCWVudW0gT0lECWFsZ29fb2lkOwkJLyogQWxnb3JpdGhtIE9JRCAqLworCXVuc2lnbmVkIGNo YXIJbnJfbXBpOwkJCS8qIE51bWJlciBvZiBNUElzIHN0b3JlZCAqLworCXU4CQlvX3NpemU7CQkJ LyogU2l6ZSBvZiBvcmdhbml6YXRpb25OYW1lIChPKSAqLworCXU4CQljbl9zaXplOwkJLyogU2l6 ZSBvZiBjb21tb25OYW1lIChDTikgKi8KKwl1OAkJZW1haWxfc2l6ZTsJCS8qIFNpemUgb2YgZW1h aWxBZGRyZXNzICovCisJdTE2CQlvX29mZnNldDsJCS8qIE9mZnNldCBvZiBvcmdhbml6YXRpb25O YW1lIChPKSAqLworCXUxNgkJY25fb2Zmc2V0OwkJLyogT2Zmc2V0IG9mIGNvbW1vbk5hbWUgKENO KSAqLworCXUxNgkJZW1haWxfb2Zmc2V0OwkJLyogT2Zmc2V0IG9mIGVtYWlsQWRkcmVzcyAqLwor CXVuc2lnbmVkCXJhd19ha2lkX3NpemU7CisJY29uc3Qgdm9pZAkqcmF3X2FraWQ7CQkvKiBSYXcg YXV0aG9yaXR5S2V5SWQgaW4gQVNOLjEgKi8KKwljb25zdCB2b2lkCSpha2lkX3Jhd19pc3N1ZXI7 CS8qIFJhdyBkaXJlY3RvcnlOYW1lIGluIGF1dGhvcml0eUtleUlkICovCisJdW5zaWduZWQJYWtp ZF9yYXdfaXNzdWVyX3NpemU7Cit9OworCisvKgorICogRnJlZSBhbiBYLjUwOSBjZXJ0aWZpY2F0 ZQorICovCit2b2lkIHg1MDlfZnJlZV9jZXJ0aWZpY2F0ZShzdHJ1Y3QgeDUwOV9jZXJ0aWZpY2F0 ZSAqY2VydCkKK3sKKwlpZiAoY2VydCkgeworCQlwdWJsaWNfa2V5X2ZyZWUoY2VydC0+cHViKTsK KwkJcHVibGljX2tleV9zaWduYXR1cmVfZnJlZShjZXJ0LT5zaWcpOworCQlrZnJlZShjZXJ0LT5p c3N1ZXIpOworCQlrZnJlZShjZXJ0LT5zdWJqZWN0KTsKKwkJa2ZyZWUoY2VydC0+aWQpOworCQlr ZnJlZShjZXJ0LT5za2lkKTsKKwkJa2ZyZWUoY2VydCk7CisJfQorfQorRVhQT1JUX1NZTUJPTF9H UEwoeDUwOV9mcmVlX2NlcnRpZmljYXRlKTsKKworLyoKKyAqIFBhcnNlIGFuIFguNTA5IGNlcnRp ZmljYXRlCisgKi8KK3N0cnVjdCB4NTA5X2NlcnRpZmljYXRlICp4NTA5X2NlcnRfcGFyc2UoY29u c3Qgdm9pZCAqZGF0YSwgc2l6ZV90IGRhdGFsZW4pCit7CisJc3RydWN0IHg1MDlfY2VydGlmaWNh dGUgKmNlcnQ7CisJc3RydWN0IHg1MDlfcGFyc2VfY29udGV4dCAqY3R4OworCXN0cnVjdCBhc3lt bWV0cmljX2tleV9pZCAqa2lkOworCWxvbmcgcmV0OworCisJcmV0ID0gLUVOT01FTTsKKwljZXJ0 ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHg1MDlfY2VydGlmaWNhdGUpLCBHRlBfS0VSTkVMKTsK KwlpZiAoIWNlcnQpCisJCWdvdG8gZXJyb3Jfbm9fY2VydDsKKwljZXJ0LT5wdWIgPSBremFsbG9j KHNpemVvZihzdHJ1Y3QgcHVibGljX2tleSksIEdGUF9LRVJORUwpOworCWlmICghY2VydC0+cHVi KQorCQlnb3RvIGVycm9yX25vX2N0eDsKKwljZXJ0LT5zaWcgPSBremFsbG9jKHNpemVvZihzdHJ1 Y3QgcHVibGljX2tleV9zaWduYXR1cmUpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWNlcnQtPnNpZykK KwkJZ290byBlcnJvcl9ub19jdHg7CisJY3R4ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHg1MDlf cGFyc2VfY29udGV4dCksIEdGUF9LRVJORUwpOworCWlmICghY3R4KQorCQlnb3RvIGVycm9yX25v X2N0eDsKKworCWN0eC0+Y2VydCA9IGNlcnQ7CisJY3R4LT5kYXRhID0gKHVuc2lnbmVkIGxvbmcp ZGF0YTsKKworCS8qIEF0dGVtcHQgdG8gZGVjb2RlIHRoZSBjZXJ0aWZpY2F0ZSAqLworCXJldCA9 IGFzbjFfYmVyX2RlY29kZXIoJng1MDlfZGVjb2RlciwgY3R4LCBkYXRhLCBkYXRhbGVuKTsKKwlp ZiAocmV0IDwgMCkKKwkJZ290byBlcnJvcl9kZWNvZGU7CisKKwkvKiBEZWNvZGUgdGhlIEF1dGhv cml0eUtleUlkZW50aWZpZXIgKi8KKwlpZiAoY3R4LT5yYXdfYWtpZCkgeworCQlwcl9kZXZlbCgi QUtJRDogJXUgJSpwaE5cbiIsCisJCQkgY3R4LT5yYXdfYWtpZF9zaXplLCBjdHgtPnJhd19ha2lk X3NpemUsIGN0eC0+cmF3X2FraWQpOworCQlyZXQgPSBhc24xX2Jlcl9kZWNvZGVyKCZ4NTA5X2Fr aWRfZGVjb2RlciwgY3R4LAorCQkJCSAgICAgICBjdHgtPnJhd19ha2lkLCBjdHgtPnJhd19ha2lk X3NpemUpOworCQlpZiAocmV0IDwgMCkgeworCQkJcHJfd2FybigiQ291bGRuJ3QgZGVjb2RlIEF1 dGhLZXlJZGVudGlmaWVyXG4iKTsKKwkJCWdvdG8gZXJyb3JfZGVjb2RlOworCQl9CisJfQorCisJ cmV0ID0gLUVOT01FTTsKKwljZXJ0LT5wdWItPmtleSA9IGttZW1kdXAoY3R4LT5rZXksIGN0eC0+ a2V5X3NpemUsIEdGUF9LRVJORUwpOworCWlmICghY2VydC0+cHViLT5rZXkpCisJCWdvdG8gZXJy b3JfZGVjb2RlOworCisJY2VydC0+cHViLT5rZXlsZW4gPSBjdHgtPmtleV9zaXplOworCisJY2Vy dC0+cHViLT5wYXJhbXMgPSBrbWVtZHVwKGN0eC0+cGFyYW1zLCBjdHgtPnBhcmFtc19zaXplLCBH RlBfS0VSTkVMKTsKKwlpZiAoIWNlcnQtPnB1Yi0+cGFyYW1zKQorCQlnb3RvIGVycm9yX2RlY29k ZTsKKworCWNlcnQtPnB1Yi0+cGFyYW1sZW4gPSBjdHgtPnBhcmFtc19zaXplOworCWNlcnQtPnB1 Yi0+YWxnbyA9IGN0eC0+a2V5X2FsZ287CisKKwkvKiBHcmFiIHRoZSBzaWduYXR1cmUgYml0cyAq LworCXJldCA9IHg1MDlfZ2V0X3NpZ19wYXJhbXMoY2VydCk7CisJaWYgKHJldCA8IDApCisJCWdv dG8gZXJyb3JfZGVjb2RlOworCisJLyogR2VuZXJhdGUgY2VydCBpc3N1ZXIgKyBzZXJpYWwgbnVt YmVyIGtleSBJRCAqLworCWtpZCA9IGFzeW1tZXRyaWNfa2V5X2dlbmVyYXRlX2lkKGNlcnQtPnJh d19zZXJpYWwsCisJCQkJCSBjZXJ0LT5yYXdfc2VyaWFsX3NpemUsCisJCQkJCSBjZXJ0LT5yYXdf aXNzdWVyLAorCQkJCQkgY2VydC0+cmF3X2lzc3Vlcl9zaXplKTsKKwlpZiAoSVNfRVJSKGtpZCkp IHsKKwkJcmV0ID0gUFRSX0VSUihraWQpOworCQlnb3RvIGVycm9yX2RlY29kZTsKKwl9CisJY2Vy dC0+aWQgPSBraWQ7CisKKyNpZm5kZWYgX19VQk9PVF9fCisJLyogRGV0ZWN0IHNlbGYtc2lnbmVk IGNlcnRpZmljYXRlcyAqLworCXJldCA9IHg1MDlfY2hlY2tfZm9yX3NlbGZfc2lnbmVkKGNlcnQp OworCWlmIChyZXQgPCAwKQorCQlnb3RvIGVycm9yX2RlY29kZTsKKyNlbmRpZgorCisJa2ZyZWUo Y3R4KTsKKwlyZXR1cm4gY2VydDsKKworZXJyb3JfZGVjb2RlOgorCWtmcmVlKGN0eCk7CitlcnJv cl9ub19jdHg6CisJeDUwOV9mcmVlX2NlcnRpZmljYXRlKGNlcnQpOworZXJyb3Jfbm9fY2VydDoK KwlyZXR1cm4gRVJSX1BUUihyZXQpOworfQorRVhQT1JUX1NZTUJPTF9HUEwoeDUwOV9jZXJ0X3Bh cnNlKTsKKworLyoKKyAqIE5vdGUgYW4gT0lEIHdoZW4gd2UgZmluZCBvbmUgZm9yIGxhdGVyIHBy b2Nlc3Npbmcgd2hlbiB3ZSBrbm93IGhvdworICogdG8gaW50ZXJwcmV0IGl0LgorICovCitpbnQg eDUwOV9ub3RlX09JRCh2b2lkICpjb250ZXh0LCBzaXplX3QgaGRybGVuLAorCSAgICAgdW5zaWdu ZWQgY2hhciB0YWcsCisJICAgICBjb25zdCB2b2lkICp2YWx1ZSwgc2l6ZV90IHZsZW4pCit7CisJ c3RydWN0IHg1MDlfcGFyc2VfY29udGV4dCAqY3R4ID0gY29udGV4dDsKKworCWN0eC0+bGFzdF9v aWQgPSBsb29rX3VwX09JRCh2YWx1ZSwgdmxlbik7CisJaWYgKGN0eC0+bGFzdF9vaWQgPT0gT0lE X19OUikgeworCQljaGFyIGJ1ZmZlcls1MF07CisJCXNwcmludF9vaWQodmFsdWUsIHZsZW4sIGJ1 ZmZlciwgc2l6ZW9mKGJ1ZmZlcikpOworCQlwcl9kZWJ1ZygiVW5rbm93biBPSUQ6IFslbHVdICVz XG4iLAorCQkJICh1bnNpZ25lZCBsb25nKXZhbHVlIC0gY3R4LT5kYXRhLCBidWZmZXIpOworCX0K KwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFNhdmUgdGhlIHBvc2l0aW9uIG9mIHRoZSBUQlMgZGF0 YSBzbyB0aGF0IHdlIGNhbiBjaGVjayB0aGUgc2lnbmF0dXJlIG92ZXIgaXQKKyAqIGxhdGVyLgor ICovCitpbnQgeDUwOV9ub3RlX3Ric19jZXJ0aWZpY2F0ZSh2b2lkICpjb250ZXh0LCBzaXplX3Qg aGRybGVuLAorCQkJICAgICAgdW5zaWduZWQgY2hhciB0YWcsCisJCQkgICAgICBjb25zdCB2b2lk ICp2YWx1ZSwgc2l6ZV90IHZsZW4pCit7CisJc3RydWN0IHg1MDlfcGFyc2VfY29udGV4dCAqY3R4 ID0gY29udGV4dDsKKworCXByX2RlYnVnKCJ4NTA5X25vdGVfdGJzX2NlcnRpZmljYXRlKCwlenUs JTAyeCwlbGQsJXp1KSFcbiIsCisJCSBoZHJsZW4sIHRhZywgKHVuc2lnbmVkIGxvbmcpdmFsdWUg LSBjdHgtPmRhdGEsIHZsZW4pOworCisJY3R4LT5jZXJ0LT50YnMgPSB2YWx1ZSAtIGhkcmxlbjsK KwljdHgtPmNlcnQtPnRic19zaXplID0gdmxlbiArIGhkcmxlbjsKKwlyZXR1cm4gMDsKK30KKwor LyoKKyAqIFJlY29yZCB0aGUgcHVibGljIGtleSBhbGdvcml0aG0KKyAqLworaW50IHg1MDlfbm90 ZV9wa2V5X2FsZ28odm9pZCAqY29udGV4dCwgc2l6ZV90IGhkcmxlbiwKKwkJCXVuc2lnbmVkIGNo YXIgdGFnLAorCQkJY29uc3Qgdm9pZCAqdmFsdWUsIHNpemVfdCB2bGVuKQoreworCXN0cnVjdCB4 NTA5X3BhcnNlX2NvbnRleHQgKmN0eCA9IGNvbnRleHQ7CisKKwlwcl9kZWJ1ZygiUHViS2V5IEFs Z286ICV1XG4iLCBjdHgtPmxhc3Rfb2lkKTsKKworCXN3aXRjaCAoY3R4LT5sYXN0X29pZCkgewor CWNhc2UgT0lEX21kMldpdGhSU0FFbmNyeXB0aW9uOgorCWNhc2UgT0lEX21kM1dpdGhSU0FFbmNy eXB0aW9uOgorCWRlZmF1bHQ6CisJCXJldHVybiAtRU5PUEtHOyAvKiBVbnN1cHBvcnRlZCBjb21i aW5hdGlvbiAqLworCisJY2FzZSBPSURfbWQ0V2l0aFJTQUVuY3J5cHRpb246CisJCWN0eC0+Y2Vy dC0+c2lnLT5oYXNoX2FsZ28gPSAibWQ0IjsKKwkJZ290byByc2FfcGtjczE7CisKKwljYXNlIE9J RF9zaGExV2l0aFJTQUVuY3J5cHRpb246CisJCWN0eC0+Y2VydC0+c2lnLT5oYXNoX2FsZ28gPSAi c2hhMSI7CisJCWdvdG8gcnNhX3BrY3MxOworCisJY2FzZSBPSURfc2hhMjU2V2l0aFJTQUVuY3J5 cHRpb246CisJCWN0eC0+Y2VydC0+c2lnLT5oYXNoX2FsZ28gPSAic2hhMjU2IjsKKwkJZ290byBy c2FfcGtjczE7CisKKwljYXNlIE9JRF9zaGEzODRXaXRoUlNBRW5jcnlwdGlvbjoKKwkJY3R4LT5j ZXJ0LT5zaWctPmhhc2hfYWxnbyA9ICJzaGEzODQiOworCQlnb3RvIHJzYV9wa2NzMTsKKworCWNh c2UgT0lEX3NoYTUxMldpdGhSU0FFbmNyeXB0aW9uOgorCQljdHgtPmNlcnQtPnNpZy0+aGFzaF9h bGdvID0gInNoYTUxMiI7CisJCWdvdG8gcnNhX3BrY3MxOworCisJY2FzZSBPSURfc2hhMjI0V2l0 aFJTQUVuY3J5cHRpb246CisJCWN0eC0+Y2VydC0+c2lnLT5oYXNoX2FsZ28gPSAic2hhMjI0IjsK KwkJZ290byByc2FfcGtjczE7CisKKwljYXNlIE9JRF9nb3N0MjAxMlNpZ25hdHVyZTI1NjoKKwkJ Y3R4LT5jZXJ0LT5zaWctPmhhc2hfYWxnbyA9ICJzdHJlZWJvZzI1NiI7CisJCWdvdG8gZWNyZHNh OworCisJY2FzZSBPSURfZ29zdDIwMTJTaWduYXR1cmU1MTI6CisJCWN0eC0+Y2VydC0+c2lnLT5o YXNoX2FsZ28gPSAic3RyZWVib2c1MTIiOworCQlnb3RvIGVjcmRzYTsKKwl9CisKK3JzYV9wa2Nz MToKKwljdHgtPmNlcnQtPnNpZy0+cGtleV9hbGdvID0gInJzYSI7CisJY3R4LT5jZXJ0LT5zaWct PmVuY29kaW5nID0gInBrY3MxIjsKKwljdHgtPmFsZ29fb2lkID0gY3R4LT5sYXN0X29pZDsKKwly ZXR1cm4gMDsKK2VjcmRzYToKKwljdHgtPmNlcnQtPnNpZy0+cGtleV9hbGdvID0gImVjcmRzYSI7 CisJY3R4LT5jZXJ0LT5zaWctPmVuY29kaW5nID0gInJhdyI7CisJY3R4LT5hbGdvX29pZCA9IGN0 eC0+bGFzdF9vaWQ7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBOb3RlIHRoZSB3aGVyZWFib3V0 cyBhbmQgdHlwZSBvZiB0aGUgc2lnbmF0dXJlLgorICovCitpbnQgeDUwOV9ub3RlX3NpZ25hdHVy ZSh2b2lkICpjb250ZXh0LCBzaXplX3QgaGRybGVuLAorCQkJdW5zaWduZWQgY2hhciB0YWcsCisJ CQljb25zdCB2b2lkICp2YWx1ZSwgc2l6ZV90IHZsZW4pCit7CisJc3RydWN0IHg1MDlfcGFyc2Vf Y29udGV4dCAqY3R4ID0gY29udGV4dDsKKworCXByX2RlYnVnKCJTaWduYXR1cmUgdHlwZTogJXUg c2l6ZSAlenVcbiIsIGN0eC0+bGFzdF9vaWQsIHZsZW4pOworCisJaWYgKGN0eC0+bGFzdF9vaWQg IT0gY3R4LT5hbGdvX29pZCkgeworCQlwcl93YXJuKCJHb3QgY2VydCB3aXRoIHBrZXkgKCV1KSBh bmQgc2lnICgldSkgYWxnb3JpdGhtIE9JRHNcbiIsCisJCQljdHgtPmFsZ29fb2lkLCBjdHgtPmxh c3Rfb2lkKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKHN0cmNtcChjdHgtPmNlcnQt PnNpZy0+cGtleV9hbGdvLCAicnNhIikgPT0gMCB8fAorCSAgICBzdHJjbXAoY3R4LT5jZXJ0LT5z aWctPnBrZXlfYWxnbywgImVjcmRzYSIpID09IDApIHsKKwkJLyogRGlzY2FyZCB0aGUgQklUIFNU UklORyBtZXRhZGF0YSAqLworCQlpZiAodmxlbiA8IDEgfHwgKihjb25zdCB1OCAqKXZhbHVlICE9 IDApCisJCQlyZXR1cm4gLUVCQURNU0c7CisKKwkJdmFsdWUrKzsKKwkJdmxlbi0tOworCX0KKwor CWN0eC0+Y2VydC0+cmF3X3NpZyA9IHZhbHVlOworCWN0eC0+Y2VydC0+cmF3X3NpZ19zaXplID0g dmxlbjsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIE5vdGUgdGhlIGNlcnRpZmljYXRlIHNlcmlh bCBudW1iZXIKKyAqLworaW50IHg1MDlfbm90ZV9zZXJpYWwodm9pZCAqY29udGV4dCwgc2l6ZV90 IGhkcmxlbiwKKwkJICAgICB1bnNpZ25lZCBjaGFyIHRhZywKKwkJICAgICBjb25zdCB2b2lkICp2 YWx1ZSwgc2l6ZV90IHZsZW4pCit7CisJc3RydWN0IHg1MDlfcGFyc2VfY29udGV4dCAqY3R4ID0g Y29udGV4dDsKKwljdHgtPmNlcnQtPnJhd19zZXJpYWwgPSB2YWx1ZTsKKwljdHgtPmNlcnQtPnJh d19zZXJpYWxfc2l6ZSA9IHZsZW47CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBOb3RlIHNvbWUg b2YgdGhlIG5hbWUgc2VnbWVudHMgZnJvbSB3aGljaCB3ZSdsbCBmYWJyaWNhdGUgYSBuYW1lLgor ICovCitpbnQgeDUwOV9leHRyYWN0X25hbWVfc2VnbWVudCh2b2lkICpjb250ZXh0LCBzaXplX3Qg aGRybGVuLAorCQkJICAgICAgdW5zaWduZWQgY2hhciB0YWcsCisJCQkgICAgICBjb25zdCB2b2lk ICp2YWx1ZSwgc2l6ZV90IHZsZW4pCit7CisJc3RydWN0IHg1MDlfcGFyc2VfY29udGV4dCAqY3R4 ID0gY29udGV4dDsKKworCXN3aXRjaCAoY3R4LT5sYXN0X29pZCkgeworCWNhc2UgT0lEX2NvbW1v bk5hbWU6CisJCWN0eC0+Y25fc2l6ZSA9IHZsZW47CisJCWN0eC0+Y25fb2Zmc2V0ID0gKHVuc2ln bmVkIGxvbmcpdmFsdWUgLSBjdHgtPmRhdGE7CisJCWJyZWFrOworCWNhc2UgT0lEX29yZ2FuaXph dGlvbk5hbWU6CisJCWN0eC0+b19zaXplID0gdmxlbjsKKwkJY3R4LT5vX29mZnNldCA9ICh1bnNp Z25lZCBsb25nKXZhbHVlIC0gY3R4LT5kYXRhOworCQlicmVhazsKKwljYXNlIE9JRF9lbWFpbF9h ZGRyZXNzOgorCQljdHgtPmVtYWlsX3NpemUgPSB2bGVuOworCQljdHgtPmVtYWlsX29mZnNldCA9 ICh1bnNpZ25lZCBsb25nKXZhbHVlIC0gY3R4LT5kYXRhOworCQlicmVhazsKKwlkZWZhdWx0Ogor CQlicmVhazsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIEZhYnJpY2F0ZSBhbmQgc2F2 ZSB0aGUgaXNzdWVyIGFuZCBzdWJqZWN0IG5hbWVzCisgKi8KK3N0YXRpYyBpbnQgeDUwOV9mYWJy aWNhdGVfbmFtZShzdHJ1Y3QgeDUwOV9wYXJzZV9jb250ZXh0ICpjdHgsIHNpemVfdCBoZHJsZW4s CisJCQkgICAgICAgdW5zaWduZWQgY2hhciB0YWcsCisJCQkgICAgICAgY2hhciAqKl9uYW1lLCBz aXplX3QgdmxlbikKK3sKKwljb25zdCB2b2lkICpuYW1lLCAqZGF0YSA9IChjb25zdCB2b2lkICop Y3R4LT5kYXRhOworCXNpemVfdCBuYW1lc2l6ZTsKKwljaGFyICpidWZmZXI7CisKKwlpZiAoKl9u YW1lKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qIEVtcHR5IG5hbWUgc3RyaW5nIGlmIG5vIG1h dGVyaWFsICovCisJaWYgKCFjdHgtPmNuX3NpemUgJiYgIWN0eC0+b19zaXplICYmICFjdHgtPmVt YWlsX3NpemUpIHsKKwkJYnVmZmVyID0ga21hbGxvYygxLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFi dWZmZXIpCisJCQlyZXR1cm4gLUVOT01FTTsKKwkJYnVmZmVyWzBdID0gMDsKKwkJZ290byBkb25l OworCX0KKworCWlmIChjdHgtPmNuX3NpemUgJiYgY3R4LT5vX3NpemUpIHsKKwkJLyogQ29uc2lk ZXIgY29tYmluaW5nIE8gYW5kIENOLCBidXQgdXNlIG9ubHkgdGhlIENOIGlmIGl0IGlzCisJCSAq IHByZWZpeGVkIGJ5IHRoZSBPLCBvciBhIHNpZ25pZmljYW50IHBvcnRpb24gdGhlcmVvZi4KKwkJ ICovCisJCW5hbWVzaXplID0gY3R4LT5jbl9zaXplOworCQluYW1lID0gZGF0YSArIGN0eC0+Y25f b2Zmc2V0OworCQlpZiAoY3R4LT5jbl9zaXplID49IGN0eC0+b19zaXplICYmCisJCSAgICBtZW1j bXAoZGF0YSArIGN0eC0+Y25fb2Zmc2V0LCBkYXRhICsgY3R4LT5vX29mZnNldCwKKwkJCSAgIGN0 eC0+b19zaXplKSA9PSAwKQorCQkJZ290byBzaW5nbGVfY29tcG9uZW50OworCQlpZiAoY3R4LT5j bl9zaXplID49IDcgJiYKKwkJICAgIGN0eC0+b19zaXplID49IDcgJiYKKwkJICAgIG1lbWNtcChk YXRhICsgY3R4LT5jbl9vZmZzZXQsIGRhdGEgKyBjdHgtPm9fb2Zmc2V0LCA3KSA9PSAwKQorCQkJ Z290byBzaW5nbGVfY29tcG9uZW50OworCisJCWJ1ZmZlciA9IGttYWxsb2MoY3R4LT5vX3NpemUg KyAyICsgY3R4LT5jbl9zaXplICsgMSwKKwkJCQkgR0ZQX0tFUk5FTCk7CisJCWlmICghYnVmZmVy KQorCQkJcmV0dXJuIC1FTk9NRU07CisKKwkJbWVtY3B5KGJ1ZmZlciwKKwkJICAgICAgIGRhdGEg KyBjdHgtPm9fb2Zmc2V0LCBjdHgtPm9fc2l6ZSk7CisJCWJ1ZmZlcltjdHgtPm9fc2l6ZSArIDBd ID0gJzonOworCQlidWZmZXJbY3R4LT5vX3NpemUgKyAxXSA9ICcgJzsKKwkJbWVtY3B5KGJ1ZmZl ciArIGN0eC0+b19zaXplICsgMiwKKwkJICAgICAgIGRhdGEgKyBjdHgtPmNuX29mZnNldCwgY3R4 LT5jbl9zaXplKTsKKwkJYnVmZmVyW2N0eC0+b19zaXplICsgMiArIGN0eC0+Y25fc2l6ZV0gPSAw OworCQlnb3RvIGRvbmU7CisKKwl9IGVsc2UgaWYgKGN0eC0+Y25fc2l6ZSkgeworCQluYW1lc2l6 ZSA9IGN0eC0+Y25fc2l6ZTsKKwkJbmFtZSA9IGRhdGEgKyBjdHgtPmNuX29mZnNldDsKKwl9IGVs c2UgaWYgKGN0eC0+b19zaXplKSB7CisJCW5hbWVzaXplID0gY3R4LT5vX3NpemU7CisJCW5hbWUg PSBkYXRhICsgY3R4LT5vX29mZnNldDsKKwl9IGVsc2UgeworCQluYW1lc2l6ZSA9IGN0eC0+ZW1h aWxfc2l6ZTsKKwkJbmFtZSA9IGRhdGEgKyBjdHgtPmVtYWlsX29mZnNldDsKKwl9CisKK3Npbmds ZV9jb21wb25lbnQ6CisJYnVmZmVyID0ga21hbGxvYyhuYW1lc2l6ZSArIDEsIEdGUF9LRVJORUwp OworCWlmICghYnVmZmVyKQorCQlyZXR1cm4gLUVOT01FTTsKKwltZW1jcHkoYnVmZmVyLCBuYW1l LCBuYW1lc2l6ZSk7CisJYnVmZmVyW25hbWVzaXplXSA9IDA7CisKK2RvbmU6CisJKl9uYW1lID0g YnVmZmVyOworCWN0eC0+Y25fc2l6ZSA9IDA7CisJY3R4LT5vX3NpemUgPSAwOworCWN0eC0+ZW1h aWxfc2l6ZSA9IDA7CisJcmV0dXJuIDA7Cit9CisKK2ludCB4NTA5X25vdGVfaXNzdWVyKHZvaWQg KmNvbnRleHQsIHNpemVfdCBoZHJsZW4sCisJCSAgICAgdW5zaWduZWQgY2hhciB0YWcsCisJCSAg ICAgY29uc3Qgdm9pZCAqdmFsdWUsIHNpemVfdCB2bGVuKQoreworCXN0cnVjdCB4NTA5X3BhcnNl X2NvbnRleHQgKmN0eCA9IGNvbnRleHQ7CisJY3R4LT5jZXJ0LT5yYXdfaXNzdWVyID0gdmFsdWU7 CisJY3R4LT5jZXJ0LT5yYXdfaXNzdWVyX3NpemUgPSB2bGVuOworCXJldHVybiB4NTA5X2ZhYnJp Y2F0ZV9uYW1lKGN0eCwgaGRybGVuLCB0YWcsICZjdHgtPmNlcnQtPmlzc3Vlciwgdmxlbik7Cit9 CisKK2ludCB4NTA5X25vdGVfc3ViamVjdCh2b2lkICpjb250ZXh0LCBzaXplX3QgaGRybGVuLAor CQkgICAgICB1bnNpZ25lZCBjaGFyIHRhZywKKwkJICAgICAgY29uc3Qgdm9pZCAqdmFsdWUsIHNp emVfdCB2bGVuKQoreworCXN0cnVjdCB4NTA5X3BhcnNlX2NvbnRleHQgKmN0eCA9IGNvbnRleHQ7 CisJY3R4LT5jZXJ0LT5yYXdfc3ViamVjdCA9IHZhbHVlOworCWN0eC0+Y2VydC0+cmF3X3N1Ympl Y3Rfc2l6ZSA9IHZsZW47CisJcmV0dXJuIHg1MDlfZmFicmljYXRlX25hbWUoY3R4LCBoZHJsZW4s IHRhZywgJmN0eC0+Y2VydC0+c3ViamVjdCwgdmxlbik7Cit9CisKKy8qCisgKiBFeHRyYWN0IHRo ZSBwYXJhbWV0ZXJzIGZvciB0aGUgcHVibGljIGtleQorICovCitpbnQgeDUwOV9ub3RlX3BhcmFt cyh2b2lkICpjb250ZXh0LCBzaXplX3QgaGRybGVuLAorCQkgICAgIHVuc2lnbmVkIGNoYXIgdGFn LAorCQkgICAgIGNvbnN0IHZvaWQgKnZhbHVlLCBzaXplX3QgdmxlbikKK3sKKwlzdHJ1Y3QgeDUw OV9wYXJzZV9jb250ZXh0ICpjdHggPSBjb250ZXh0OworCisJLyoKKwkgKiBBbGdvcml0aG1JZGVu dGlmaWVyIGlzIHVzZWQgdGhyZWUgdGltZXMgaW4gdGhlIHg1MDksIHdlIHNob3VsZCBza2lwCisJ ICogZmlyc3QgYW5kIGlnbm9yZSB0aGlyZCwgdXNpbmcgc2Vjb25kIG9uZSB3aGljaCBpcyBhZnRl ciBzdWJqZWN0IGFuZAorCSAqIGJlZm9yZSBzdWJqZWN0UHVibGljS2V5LgorCSAqLworCWlmICgh Y3R4LT5jZXJ0LT5yYXdfc3ViamVjdCB8fCBjdHgtPmtleSkKKwkJcmV0dXJuIDA7CisJY3R4LT5w YXJhbXMgPSB2YWx1ZSAtIGhkcmxlbjsKKwljdHgtPnBhcmFtc19zaXplID0gdmxlbiArIGhkcmxl bjsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIEV4dHJhY3QgdGhlIGRhdGEgZm9yIHRoZSBwdWJs aWMga2V5IGFsZ29yaXRobQorICovCitpbnQgeDUwOV9leHRyYWN0X2tleV9kYXRhKHZvaWQgKmNv bnRleHQsIHNpemVfdCBoZHJsZW4sCisJCQkgIHVuc2lnbmVkIGNoYXIgdGFnLAorCQkJICBjb25z dCB2b2lkICp2YWx1ZSwgc2l6ZV90IHZsZW4pCit7CisJc3RydWN0IHg1MDlfcGFyc2VfY29udGV4 dCAqY3R4ID0gY29udGV4dDsKKworCWN0eC0+a2V5X2FsZ28gPSBjdHgtPmxhc3Rfb2lkOworCWlm IChjdHgtPmxhc3Rfb2lkID09IE9JRF9yc2FFbmNyeXB0aW9uKQorCQljdHgtPmNlcnQtPnB1Yi0+ cGtleV9hbGdvID0gInJzYSI7CisJZWxzZSBpZiAoY3R4LT5sYXN0X29pZCA9PSBPSURfZ29zdDIw MTJQS2V5MjU2IHx8CisJCSBjdHgtPmxhc3Rfb2lkID09IE9JRF9nb3N0MjAxMlBLZXk1MTIpCisJ CWN0eC0+Y2VydC0+cHViLT5wa2V5X2FsZ28gPSAiZWNyZHNhIjsKKwllbHNlCisJCXJldHVybiAt RU5PUEtHOworCisJLyogRGlzY2FyZCB0aGUgQklUIFNUUklORyBtZXRhZGF0YSAqLworCWlmICh2 bGVuIDwgMSB8fCAqKGNvbnN0IHU4ICopdmFsdWUgIT0gMCkKKwkJcmV0dXJuIC1FQkFETVNHOwor CWN0eC0+a2V5ID0gdmFsdWUgKyAxOworCWN0eC0+a2V5X3NpemUgPSB2bGVuIC0gMTsKKwlyZXR1 cm4gMDsKK30KKworLyogVGhlIGtleUlkZW50aWZpZXIgaW4gQXV0aG9yaXR5S2V5SWRlbnRpZmll ciBTRVFVRU5DRSBpcyB0YWcoQ09OVCxQUklNLDApICovCisjZGVmaW5lIFNFUV9UQUdfS0VZSUQg KEFTTjFfQ09OVCA8PCA2KQorCisvKgorICogUHJvY2VzcyBjZXJ0aWZpY2F0ZSBleHRlbnNpb25z IHRoYXQgYXJlIHVzZWQgdG8gcXVhbGlmeSB0aGUgY2VydGlmaWNhdGUuCisgKi8KK2ludCB4NTA5 X3Byb2Nlc3NfZXh0ZW5zaW9uKHZvaWQgKmNvbnRleHQsIHNpemVfdCBoZHJsZW4sCisJCQkgICB1 bnNpZ25lZCBjaGFyIHRhZywKKwkJCSAgIGNvbnN0IHZvaWQgKnZhbHVlLCBzaXplX3QgdmxlbikK K3sKKwlzdHJ1Y3QgeDUwOV9wYXJzZV9jb250ZXh0ICpjdHggPSBjb250ZXh0OworCXN0cnVjdCBh c3ltbWV0cmljX2tleV9pZCAqa2lkOworCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnYgPSB2YWx1ZTsK KworCXByX2RlYnVnKCJFeHRlbnNpb246ICV1XG4iLCBjdHgtPmxhc3Rfb2lkKTsKKworCWlmIChj dHgtPmxhc3Rfb2lkID09IE9JRF9zdWJqZWN0S2V5SWRlbnRpZmllcikgeworCQkvKiBHZXQgaG9s ZCBvZiB0aGUga2V5IGZpbmdlcnByaW50ICovCisJCWlmIChjdHgtPmNlcnQtPnNraWQgfHwgdmxl biA8IDMpCisJCQlyZXR1cm4gLUVCQURNU0c7CisJCWlmICh2WzBdICE9IEFTTjFfT1RTIHx8IHZb MV0gIT0gdmxlbiAtIDIpCisJCQlyZXR1cm4gLUVCQURNU0c7CisJCXYgKz0gMjsKKwkJdmxlbiAt PSAyOworCisJCWN0eC0+Y2VydC0+cmF3X3NraWRfc2l6ZSA9IHZsZW47CisJCWN0eC0+Y2VydC0+ cmF3X3NraWQgPSB2OworCQlraWQgPSBhc3ltbWV0cmljX2tleV9nZW5lcmF0ZV9pZCh2LCB2bGVu LCAiIiwgMCk7CisJCWlmIChJU19FUlIoa2lkKSkKKwkJCXJldHVybiBQVFJfRVJSKGtpZCk7CisJ CWN0eC0+Y2VydC0+c2tpZCA9IGtpZDsKKwkJcHJfZGVidWcoInN1YmprZXlpZCAlKnBoTlxuIiwg a2lkLT5sZW4sIGtpZC0+ZGF0YSk7CisJCXJldHVybiAwOworCX0KKworCWlmIChjdHgtPmxhc3Rf b2lkID09IE9JRF9hdXRob3JpdHlLZXlJZGVudGlmaWVyKSB7CisJCS8qIEdldCBob2xkIG9mIHRo ZSBDQSBrZXkgZmluZ2VycHJpbnQgKi8KKwkJY3R4LT5yYXdfYWtpZCA9IHY7CisJCWN0eC0+cmF3 X2FraWRfc2l6ZSA9IHZsZW47CisJCXJldHVybiAwOworCX0KKworCXJldHVybiAwOworfQorCisv KioKKyAqIHg1MDlfZGVjb2RlX3RpbWUgLSBEZWNvZGUgYW4gWC41MDkgdGltZSBBU04uMSBvYmpl Y3QKKyAqIEBfdDogVGhlIHRpbWUgdG8gZmlsbCBpbgorICogQGhkcmxlbjogVGhlIGxlbmd0aCBv ZiB0aGUgb2JqZWN0IGhlYWRlcgorICogQHRhZzogVGhlIG9iamVjdCB0YWcKKyAqIEB2YWx1ZTog VGhlIG9iamVjdCB2YWx1ZQorICogQHZsZW46IFRoZSBzaXplIG9mIHRoZSBvYmplY3QgdmFsdWUK KyAqCisgKiBEZWNvZGUgYW4gQVNOLjEgdW5pdmVyc2FsIHRpbWUgb3IgZ2VuZXJhbGlzZWQgdGlt ZSBmaWVsZCBpbnRvIGEgc3RydWN0IHRoZQorICoga2VybmVsIGNhbiBoYW5kbGUgYW5kIGNoZWNr IGl0IGZvciB2YWxpZGl0eS4gIFRoZSB0aW1lIGlzIGRlY29kZWQgdGh1czoKKyAqCisgKglbUkZD NTI4MCDCpzQuMS4yLjVdCisgKglDQXMgY29uZm9ybWluZyB0byB0aGlzIHByb2ZpbGUgTVVTVCBh bHdheXMgZW5jb2RlIGNlcnRpZmljYXRlIHZhbGlkaXR5CisgKglkYXRlcyB0aHJvdWdoIHRoZSB5 ZWFyIDIwNDkgYXMgVVRDVGltZTsgY2VydGlmaWNhdGUgdmFsaWRpdHkgZGF0ZXMgaW4KKyAqCTIw NTAgb3IgbGF0ZXIgTVVTVCBiZSBlbmNvZGVkIGFzIEdlbmVyYWxpemVkVGltZS4gIENvbmZvcm1p bmcKKyAqCWFwcGxpY2F0aW9ucyBNVVNUIGJlIGFibGUgdG8gcHJvY2VzcyB2YWxpZGl0eSBkYXRl cyB0aGF0IGFyZSBlbmNvZGVkIGluCisgKgllaXRoZXIgVVRDVGltZSBvciBHZW5lcmFsaXplZFRp bWUuCisgKi8KK2ludCB4NTA5X2RlY29kZV90aW1lKHRpbWU2NF90ICpfdCwgIHNpemVfdCBoZHJs ZW4sCisJCSAgICAgdW5zaWduZWQgY2hhciB0YWcsCisJCSAgICAgY29uc3QgdW5zaWduZWQgY2hh ciAqdmFsdWUsIHNpemVfdCB2bGVuKQoreworCXN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIG1v bnRoX2xlbmd0aHNbXSA9IHsgMzEsIDI4LCAzMSwgMzAsIDMxLCAzMCwKKwkJCQkJCSAgICAgICAz MSwgMzEsIDMwLCAzMSwgMzAsIDMxIH07CisJY29uc3QgdW5zaWduZWQgY2hhciAqcCA9IHZhbHVl OworCXVuc2lnbmVkIHllYXIsIG1vbiwgZGF5LCBob3VyLCBtaW4sIHNlYywgbW9uX2xlbjsKKwor I2RlZmluZSBkZWMyYmluKFgpICh7IHVuc2lnbmVkIGNoYXIgeCA9IChYKSAtICcwJzsgaWYgKHgg PiA5KSBnb3RvIGludmFsaWRfdGltZTsgeDsgfSkKKyNkZWZpbmUgREQyYmluKFApICh7IHVuc2ln bmVkIHggPSBkZWMyYmluKFBbMF0pICogMTAgKyBkZWMyYmluKFBbMV0pOyBQICs9IDI7IHg7IH0p CisKKwlpZiAodGFnID09IEFTTjFfVU5JVElNKSB7CisJCS8qIFVUQ1RpbWU6IFlZTU1EREhITU1T U1ogKi8KKwkJaWYgKHZsZW4gIT0gMTMpCisJCQlnb3RvIHVuc3VwcG9ydGVkX3RpbWU7CisJCXll YXIgPSBERDJiaW4ocCk7CisJCWlmICh5ZWFyID49IDUwKQorCQkJeWVhciArPSAxOTAwOworCQll bHNlCisJCQl5ZWFyICs9IDIwMDA7CisJfSBlbHNlIGlmICh0YWcgPT0gQVNOMV9HRU5USU0pIHsK KwkJLyogR2VuVGltZTogWVlZWU1NRERISE1NU1NaICovCisJCWlmICh2bGVuICE9IDE1KQorCQkJ Z290byB1bnN1cHBvcnRlZF90aW1lOworCQl5ZWFyID0gREQyYmluKHApICogMTAwICsgREQyYmlu KHApOworCQlpZiAoeWVhciA+PSAxOTUwICYmIHllYXIgPD0gMjA0OSkKKwkJCWdvdG8gaW52YWxp ZF90aW1lOworCX0gZWxzZSB7CisJCWdvdG8gdW5zdXBwb3J0ZWRfdGltZTsKKwl9CisKKwltb24g ID0gREQyYmluKHApOworCWRheSA9IEREMmJpbihwKTsKKwlob3VyID0gREQyYmluKHApOworCW1p biAgPSBERDJiaW4ocCk7CisJc2VjICA9IEREMmJpbihwKTsKKworCWlmICgqcCAhPSAnWicpCisJ CWdvdG8gdW5zdXBwb3J0ZWRfdGltZTsKKworCWlmICh5ZWFyIDwgMTk3MCB8fAorCSAgICBtb24g PCAxIHx8IG1vbiA+IDEyKQorCQlnb3RvIGludmFsaWRfdGltZTsKKworCW1vbl9sZW4gPSBtb250 aF9sZW5ndGhzW21vbiAtIDFdOworCWlmIChtb24gPT0gMikgeworCQlpZiAoeWVhciAlIDQgPT0g MCkgeworCQkJbW9uX2xlbiA9IDI5OworCQkJaWYgKHllYXIgJSAxMDAgPT0gMCkgeworCQkJCW1v bl9sZW4gPSAyODsKKwkJCQlpZiAoeWVhciAlIDQwMCA9PSAwKQorCQkJCQltb25fbGVuID0gMjk7 CisJCQl9CisJCX0KKwl9CisKKwlpZiAoZGF5IDwgMSB8fCBkYXkgPiBtb25fbGVuIHx8CisJICAg IGhvdXIgPiAyNCB8fCAvKiBJU08gODYwMSBwZXJtaXRzIDI0OjAwOjAwIGFzIG1pZG5pZ2h0IHRv bW9ycm93ICovCisJICAgIG1pbiA+IDU5IHx8CisJICAgIHNlYyA+IDYwKSAvKiBJU08gODYwMSBw ZXJtaXRzIGxlYXAgc2Vjb25kcyBbWC42ODAgNDYuM10gKi8KKwkJZ290byBpbnZhbGlkX3RpbWU7 CisKKwkqX3QgPSBta3RpbWU2NCh5ZWFyLCBtb24sIGRheSwgaG91ciwgbWluLCBzZWMpOworCXJl dHVybiAwOworCit1bnN1cHBvcnRlZF90aW1lOgorCXByX2RlYnVnKCJHb3QgdW5zdXBwb3J0ZWQg dGltZSBbdGFnICUwMnhdOiAnJSpwaE4nXG4iLAorCQkgdGFnLCAoaW50KXZsZW4sIHZhbHVlKTsK KwlyZXR1cm4gLUVCQURNU0c7CitpbnZhbGlkX3RpbWU6CisJcHJfZGVidWcoIkdvdCBpbnZhbGlk IHRpbWUgW3RhZyAlMDJ4XTogJyUqcGhOJ1xuIiwKKwkJIHRhZywgKGludCl2bGVuLCB2YWx1ZSk7 CisJcmV0dXJuIC1FQkFETVNHOworfQorRVhQT1JUX1NZTUJPTF9HUEwoeDUwOV9kZWNvZGVfdGlt ZSk7CisKK2ludCB4NTA5X25vdGVfbm90X2JlZm9yZSh2b2lkICpjb250ZXh0LCBzaXplX3QgaGRy bGVuLAorCQkJIHVuc2lnbmVkIGNoYXIgdGFnLAorCQkJIGNvbnN0IHZvaWQgKnZhbHVlLCBzaXpl X3QgdmxlbikKK3sKKwlzdHJ1Y3QgeDUwOV9wYXJzZV9jb250ZXh0ICpjdHggPSBjb250ZXh0Owor CXJldHVybiB4NTA5X2RlY29kZV90aW1lKCZjdHgtPmNlcnQtPnZhbGlkX2Zyb20sIGhkcmxlbiwg dGFnLCB2YWx1ZSwgdmxlbik7Cit9CisKK2ludCB4NTA5X25vdGVfbm90X2FmdGVyKHZvaWQgKmNv bnRleHQsIHNpemVfdCBoZHJsZW4sCisJCQl1bnNpZ25lZCBjaGFyIHRhZywKKwkJCWNvbnN0IHZv aWQgKnZhbHVlLCBzaXplX3QgdmxlbikKK3sKKwlzdHJ1Y3QgeDUwOV9wYXJzZV9jb250ZXh0ICpj dHggPSBjb250ZXh0OworCXJldHVybiB4NTA5X2RlY29kZV90aW1lKCZjdHgtPmNlcnQtPnZhbGlk X3RvLCBoZHJsZW4sIHRhZywgdmFsdWUsIHZsZW4pOworfQorCisvKgorICogTm90ZSBhIGtleSBp ZGVudGlmaWVyLWJhc2VkIEF1dGhvcml0eUtleUlkZW50aWZpZXIKKyAqLworaW50IHg1MDlfYWtp ZF9ub3RlX2tpZCh2b2lkICpjb250ZXh0LCBzaXplX3QgaGRybGVuLAorCQkgICAgICAgdW5zaWdu ZWQgY2hhciB0YWcsCisJCSAgICAgICBjb25zdCB2b2lkICp2YWx1ZSwgc2l6ZV90IHZsZW4pCit7 CisJc3RydWN0IHg1MDlfcGFyc2VfY29udGV4dCAqY3R4ID0gY29udGV4dDsKKwlzdHJ1Y3QgYXN5 bW1ldHJpY19rZXlfaWQgKmtpZDsKKworCXByX2RlYnVnKCJBS0lEOiBrZXlpZDogJSpwaE5cbiIs IChpbnQpdmxlbiwgdmFsdWUpOworCisJaWYgKGN0eC0+Y2VydC0+c2lnLT5hdXRoX2lkc1sxXSkK KwkJcmV0dXJuIDA7CisKKwlraWQgPSBhc3ltbWV0cmljX2tleV9nZW5lcmF0ZV9pZCh2YWx1ZSwg dmxlbiwgIiIsIDApOworCWlmIChJU19FUlIoa2lkKSkKKwkJcmV0dXJuIFBUUl9FUlIoa2lkKTsK Kwlwcl9kZWJ1ZygiYXV0aGtleWlkICUqcGhOXG4iLCBraWQtPmxlbiwga2lkLT5kYXRhKTsKKwlj dHgtPmNlcnQtPnNpZy0+YXV0aF9pZHNbMV0gPSBraWQ7CisJcmV0dXJuIDA7Cit9CisKKy8qCisg KiBOb3RlIGEgZGlyZWN0b3J5TmFtZSBpbiBhbiBBdXRob3JpdHlLZXlJZGVudGlmaWVyCisgKi8K K2ludCB4NTA5X2FraWRfbm90ZV9uYW1lKHZvaWQgKmNvbnRleHQsIHNpemVfdCBoZHJsZW4sCisJ CQl1bnNpZ25lZCBjaGFyIHRhZywKKwkJCWNvbnN0IHZvaWQgKnZhbHVlLCBzaXplX3QgdmxlbikK K3sKKwlzdHJ1Y3QgeDUwOV9wYXJzZV9jb250ZXh0ICpjdHggPSBjb250ZXh0OworCisJcHJfZGVi dWcoIkFLSUQ6IG5hbWU6ICUqcGhOXG4iLCAoaW50KXZsZW4sIHZhbHVlKTsKKworCWN0eC0+YWtp ZF9yYXdfaXNzdWVyID0gdmFsdWU7CisJY3R4LT5ha2lkX3Jhd19pc3N1ZXJfc2l6ZSA9IHZsZW47 CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBOb3RlIGEgc2VyaWFsIG51bWJlciBpbiBhbiBBdXRo b3JpdHlLZXlJZGVudGlmaWVyCisgKi8KK2ludCB4NTA5X2FraWRfbm90ZV9zZXJpYWwodm9pZCAq Y29udGV4dCwgc2l6ZV90IGhkcmxlbiwKKwkJCSAgdW5zaWduZWQgY2hhciB0YWcsCisJCQkgIGNv bnN0IHZvaWQgKnZhbHVlLCBzaXplX3QgdmxlbikKK3sKKwlzdHJ1Y3QgeDUwOV9wYXJzZV9jb250 ZXh0ICpjdHggPSBjb250ZXh0OworCXN0cnVjdCBhc3ltbWV0cmljX2tleV9pZCAqa2lkOworCisJ cHJfZGVidWcoIkFLSUQ6IHNlcmlhbDogJSpwaE5cbiIsIChpbnQpdmxlbiwgdmFsdWUpOworCisJ aWYgKCFjdHgtPmFraWRfcmF3X2lzc3VlciB8fCBjdHgtPmNlcnQtPnNpZy0+YXV0aF9pZHNbMF0p CisJCXJldHVybiAwOworCisJa2lkID0gYXN5bW1ldHJpY19rZXlfZ2VuZXJhdGVfaWQodmFsdWUs CisJCQkJCSB2bGVuLAorCQkJCQkgY3R4LT5ha2lkX3Jhd19pc3N1ZXIsCisJCQkJCSBjdHgtPmFr aWRfcmF3X2lzc3Vlcl9zaXplKTsKKwlpZiAoSVNfRVJSKGtpZCkpCisJCXJldHVybiBQVFJfRVJS KGtpZCk7CisKKwlwcl9kZWJ1ZygiYXV0aGtleWlkICUqcGhOXG4iLCBraWQtPmxlbiwga2lkLT5k YXRhKTsKKwljdHgtPmNlcnQtPnNpZy0+YXV0aF9pZHNbMF0gPSBraWQ7CisJcmV0dXJuIDA7Cit9 CmRpZmYgLS1naXQgYS9saWIvY3J5cHRvL3g1MDlfcGFyc2VyLmggYi9saWIvY3J5cHRvL3g1MDlf cGFyc2VyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5jMjMzZjEz NmZiMzUKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3J5cHRvL3g1MDlfcGFyc2VyLmgKQEAgLTAs MCArMSw1NyBAQAorLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXIg Ki8KKy8qIFguNTA5IGNlcnRpZmljYXRlIHBhcnNlciBpbnRlcm5hbCBkZWZpbml0aW9ucworICoK KyAqIENvcHlyaWdodCAoQykgMjAxMiBSZWQgSGF0LCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQu CisgKiBXcml0dGVuIGJ5IERhdmlkIEhvd2VsbHMgKGRob3dlbGxzIGF0IHJlZGhhdC5jb20pCisg Ki8KKworI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KKyNpbmNsdWRlIDxjcnlwdG8vcHVibGljX2tl eS5oPgorI2luY2x1ZGUgPGtleXMvYXN5bW1ldHJpYy10eXBlLmg+CisKK3N0cnVjdCB4NTA5X2Nl cnRpZmljYXRlIHsKKwlzdHJ1Y3QgeDUwOV9jZXJ0aWZpY2F0ZSAqbmV4dDsKKwlzdHJ1Y3QgeDUw OV9jZXJ0aWZpY2F0ZSAqc2lnbmVyOwkvKiBDZXJ0aWZpY2F0ZSB0aGF0IHNpZ25lZCB0aGlzIG9u ZSAqLworCXN0cnVjdCBwdWJsaWNfa2V5ICpwdWI7CQkJLyogUHVibGljIGtleSBkZXRhaWxzICov CisJc3RydWN0IHB1YmxpY19rZXlfc2lnbmF0dXJlICpzaWc7CS8qIFNpZ25hdHVyZSBwYXJhbWV0 ZXJzICovCisJY2hhcgkJKmlzc3VlcjsJCS8qIE5hbWUgb2YgY2VydGlmaWNhdGUgaXNzdWVyICov CisJY2hhcgkJKnN1YmplY3Q7CQkvKiBOYW1lIG9mIGNlcnRpZmljYXRlIHN1YmplY3QgKi8KKwlz dHJ1Y3QgYXN5bW1ldHJpY19rZXlfaWQgKmlkOwkJLyogSXNzdWVyICsgU2VyaWFsIG51bWJlciAq LworCXN0cnVjdCBhc3ltbWV0cmljX2tleV9pZCAqc2tpZDsJCS8qIFN1YmplY3QgKyBzdWJqZWN0 S2V5SWQgKG9wdGlvbmFsKSAqLworCXRpbWU2NF90CXZhbGlkX2Zyb207CisJdGltZTY0X3QJdmFs aWRfdG87CisJY29uc3Qgdm9pZAkqdGJzOwkJCS8qIFNpZ25lZCBkYXRhICovCisJdW5zaWduZWQJ dGJzX3NpemU7CQkvKiBTaXplIG9mIHNpZ25lZCBkYXRhICovCisJdW5zaWduZWQJcmF3X3NpZ19z aXplOwkJLyogU2l6ZSBvZiBzaWdhdHVyZSAqLworCWNvbnN0IHZvaWQJKnJhd19zaWc7CQkvKiBT aWduYXR1cmUgZGF0YSAqLworCWNvbnN0IHZvaWQJKnJhd19zZXJpYWw7CQkvKiBSYXcgc2VyaWFs IG51bWJlciBpbiBBU04uMSAqLworCXVuc2lnbmVkCXJhd19zZXJpYWxfc2l6ZTsKKwl1bnNpZ25l ZAlyYXdfaXNzdWVyX3NpemU7CisJY29uc3Qgdm9pZAkqcmF3X2lzc3VlcjsJCS8qIFJhdyBpc3N1 ZXIgbmFtZSBpbiBBU04uMSAqLworCWNvbnN0IHZvaWQJKnJhd19zdWJqZWN0OwkJLyogUmF3IHN1 YmplY3QgbmFtZSBpbiBBU04uMSAqLworCXVuc2lnbmVkCXJhd19zdWJqZWN0X3NpemU7CisJdW5z aWduZWQJcmF3X3NraWRfc2l6ZTsKKwljb25zdCB2b2lkCSpyYXdfc2tpZDsJCS8qIFJhdyBzdWJq ZWN0S2V5SWQgaW4gQVNOLjEgKi8KKwl1bnNpZ25lZAlpbmRleDsKKwlib29sCQlzZWVuOwkJCS8q IEluZmluaXRlIHJlY3Vyc2lvbiBwcmV2ZW50aW9uICovCisJYm9vbAkJdmVyaWZpZWQ7CisJYm9v bAkJc2VsZl9zaWduZWQ7CQkvKiBUIGlmIHNlbGYtc2lnbmVkIChjaGVjayB1bnN1cHBvcnRlZF9z aWcgdG9vKSAqLworCWJvb2wJCXVuc3VwcG9ydGVkX2tleTsJLyogVCBpZiBrZXkgdXNlcyB1bnN1 cHBvcnRlZCBjcnlwdG8gKi8KKwlib29sCQl1bnN1cHBvcnRlZF9zaWc7CS8qIFQgaWYgc2lnbmF0 dXJlIHVzZXMgdW5zdXBwb3J0ZWQgY3J5cHRvICovCisJYm9vbAkJYmxhY2tsaXN0ZWQ7Cit9Owor CisvKgorICogeDUwOV9jZXJ0X3BhcnNlci5jCisgKi8KK2V4dGVybiB2b2lkIHg1MDlfZnJlZV9j ZXJ0aWZpY2F0ZShzdHJ1Y3QgeDUwOV9jZXJ0aWZpY2F0ZSAqY2VydCk7CitleHRlcm4gc3RydWN0 IHg1MDlfY2VydGlmaWNhdGUgKng1MDlfY2VydF9wYXJzZShjb25zdCB2b2lkICpkYXRhLCBzaXpl X3QgZGF0YWxlbik7CitleHRlcm4gaW50IHg1MDlfZGVjb2RlX3RpbWUodGltZTY0X3QgKl90LCAg c2l6ZV90IGhkcmxlbiwKKwkJCSAgICB1bnNpZ25lZCBjaGFyIHRhZywKKwkJCSAgICBjb25zdCB1 bnNpZ25lZCBjaGFyICp2YWx1ZSwgc2l6ZV90IHZsZW4pOworCisvKgorICogeDUwOV9wdWJsaWNf a2V5LmMKKyAqLworZXh0ZXJuIGludCB4NTA5X2dldF9zaWdfcGFyYW1zKHN0cnVjdCB4NTA5X2Nl cnRpZmljYXRlICpjZXJ0KTsKK2V4dGVybiBpbnQgeDUwOV9jaGVja19mb3Jfc2VsZl9zaWduZWQo c3RydWN0IHg1MDlfY2VydGlmaWNhdGUgKmNlcnQpOwpkaWZmIC0tZ2l0IGEvbGliL2NyeXB0by94 NTA5X3B1YmxpY19rZXkuYyBiL2xpYi9jcnlwdG8veDUwOV9wdWJsaWNfa2V5LmMKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi4wNGJkYjY3MmI0OTYKLS0tIC9kZXYvbnVs bAorKysgYi9saWIvY3J5cHRvL3g1MDlfcHVibGljX2tleS5jCkBAIC0wLDAgKzEsMjkyIEBACisv LyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlcgorLyogSW5zdGFudGlh dGUgYSBwdWJsaWMga2V5IGNyeXB0byBrZXkgZnJvbSBhbiBYLjUwOSBDZXJ0aWZpY2F0ZQorICoK KyAqIENvcHlyaWdodCAoQykgMjAxMiBSZWQgSGF0LCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQu CisgKiBXcml0dGVuIGJ5IERhdmlkIEhvd2VsbHMgKGRob3dlbGxzIGF0IHJlZGhhdC5jb20pCisg Ki8KKworI2RlZmluZSBwcl9mbXQoZm10KSAiWC41MDk6ICJmbXQKKyNpZmRlZiBfX1VCT09UX18K KyNpbmNsdWRlIDxjb21tb24uaD4KKyNpbmNsdWRlIDxsaW51eC9jb21wYXQuaD4KKyNpbmNsdWRl IDxsaW51eC9lcnJuby5oPgorI2Vsc2UKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNlbmRp ZgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2lmbmRlZiBfX1VCT09UX18KKyNpbmNsdWRl IDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8a2V5cy9hc3ltbWV0cmljLXN1YnR5cGUuaD4KKyNp bmNsdWRlIDxrZXlzL2FzeW1tZXRyaWMtcGFyc2VyLmg+CisjaW5jbHVkZSA8a2V5cy9zeXN0ZW1f a2V5cmluZy5oPgorI2luY2x1ZGUgPGNyeXB0by9oYXNoLmg+CisjaW5jbHVkZSAiYXN5bW1ldHJp Y19rZXlzLmgiCisjZW5kaWYKKyNpbmNsdWRlICJ4NTA5X3BhcnNlci5oIgorCisvKgorICogU2V0 IHVwIHRoZSBzaWduYXR1cmUgcGFyYW1ldGVycyBpbiBhbiBYLjUwOSBjZXJ0aWZpY2F0ZS4gIFRo aXMgaW52b2x2ZXMKKyAqIGRpZ2VzdGluZyB0aGUgc2lnbmVkIGRhdGEgYW5kIGV4dHJhY3Rpbmcg dGhlIHNpZ25hdHVyZS4KKyAqLworaW50IHg1MDlfZ2V0X3NpZ19wYXJhbXMoc3RydWN0IHg1MDlf Y2VydGlmaWNhdGUgKmNlcnQpCit7CisJc3RydWN0IHB1YmxpY19rZXlfc2lnbmF0dXJlICpzaWcg PSBjZXJ0LT5zaWc7CisjaWZuZGVmIF9fVUJPT1RfXworCXN0cnVjdCBjcnlwdG9fc2hhc2ggKnRm bTsKKwlzdHJ1Y3Qgc2hhc2hfZGVzYyAqZGVzYzsKKwlzaXplX3QgZGVzY19zaXplOworI2VuZGlm CisJaW50IHJldDsKKworCXByX2RldmVsKCI9PT4lcygpXG4iLCBfX2Z1bmNfXyk7CisKKwlpZiAo IWNlcnQtPnB1Yi0+cGtleV9hbGdvKQorCQljZXJ0LT51bnN1cHBvcnRlZF9rZXkgPSB0cnVlOwor CisJaWYgKCFzaWctPnBrZXlfYWxnbykKKwkJY2VydC0+dW5zdXBwb3J0ZWRfc2lnID0gdHJ1ZTsK KworCS8qIFdlIGNoZWNrIHRoZSBoYXNoIGlmIHdlIGNhbiAtIGV2ZW4gaWYgd2UgY2FuJ3QgdGhl biB2ZXJpZnkgaXQgKi8KKwlpZiAoIXNpZy0+aGFzaF9hbGdvKSB7CisJCWNlcnQtPnVuc3VwcG9y dGVkX3NpZyA9IHRydWU7CisJCXJldHVybiAwOworCX0KKworCXNpZy0+cyA9IGttZW1kdXAoY2Vy dC0+cmF3X3NpZywgY2VydC0+cmF3X3NpZ19zaXplLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXNpZy0+ cykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlzaWctPnNfc2l6ZSA9IGNlcnQtPnJhd19zaWdfc2l6 ZTsKKworI2lmZGVmIF9fVUJPT1RfXworCS8qCisJICogTm90ZToKKwkgKiBUaGlzIHBhcnQgKGZp bGxpbmcgc2lnLT5kaWdlc3QpIHNob3VsZCBiZSBpbXBsZW1lbnRlZCBpZgorCSAqIHg1MDlfY2hl Y2tfZm9yX3NlbGZfc2lnbmVkKCkgaXMgZW5hYmxlZCB4NTA5X2NlcnRfcGFyc2UoKS4KKwkgKiBD dXJyZW50bHksIHRoaXMgY2hlY2sgd29uJ3QgYWZmZWN0IFVFRkkgc2VjdXJlIGJvb3QuCisJICov CisJcmV0ID0gMDsKKyNlbHNlCisJLyogQWxsb2NhdGUgdGhlIGhhc2hpbmcgYWxnb3JpdGhtIHdl J3JlIGdvaW5nIHRvIG5lZWQgYW5kIGZpbmQgb3V0IGhvdworCSAqIGJpZyB0aGUgaGFzaCBvcGVy YXRpb25hbCBkYXRhIHdpbGwgYmUuCisJICovCisJdGZtID0gY3J5cHRvX2FsbG9jX3NoYXNoKHNp Zy0+aGFzaF9hbGdvLCAwLCAwKTsKKwlpZiAoSVNfRVJSKHRmbSkpIHsKKwkJaWYgKFBUUl9FUlIo dGZtKSA9PSAtRU5PRU5UKSB7CisJCQljZXJ0LT51bnN1cHBvcnRlZF9zaWcgPSB0cnVlOworCQkJ cmV0dXJuIDA7CisJCX0KKwkJcmV0dXJuIFBUUl9FUlIodGZtKTsKKwl9CisKKwlkZXNjX3NpemUg PSBjcnlwdG9fc2hhc2hfZGVzY3NpemUodGZtKSArIHNpemVvZigqZGVzYyk7CisJc2lnLT5kaWdl c3Rfc2l6ZSA9IGNyeXB0b19zaGFzaF9kaWdlc3RzaXplKHRmbSk7CisKKwlyZXQgPSAtRU5PTUVN OworCXNpZy0+ZGlnZXN0ID0ga21hbGxvYyhzaWctPmRpZ2VzdF9zaXplLCBHRlBfS0VSTkVMKTsK KwlpZiAoIXNpZy0+ZGlnZXN0KQorCQlnb3RvIGVycm9yOworCisJZGVzYyA9IGt6YWxsb2MoZGVz Y19zaXplLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRlc2MpCisJCWdvdG8gZXJyb3I7CisKKwlkZXNj LT50Zm0gPSB0Zm07CisKKwlyZXQgPSBjcnlwdG9fc2hhc2hfZGlnZXN0KGRlc2MsIGNlcnQtPnRi cywgY2VydC0+dGJzX3NpemUsIHNpZy0+ZGlnZXN0KTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBl cnJvcl8yOworCisJcmV0ID0gaXNfaGFzaF9ibGFja2xpc3RlZChzaWctPmRpZ2VzdCwgc2lnLT5k aWdlc3Rfc2l6ZSwgInRicyIpOworCWlmIChyZXQgPT0gLUVLRVlSRUpFQ1RFRCkgeworCQlwcl9l cnIoIkNlcnQgJSpwaE4gaXMgYmxhY2tsaXN0ZWRcbiIsCisJCSAgICAgICBzaWctPmRpZ2VzdF9z aXplLCBzaWctPmRpZ2VzdCk7CisJCWNlcnQtPmJsYWNrbGlzdGVkID0gdHJ1ZTsKKwkJcmV0ID0g MDsKKwl9CisKK2Vycm9yXzI6CisJa2ZyZWUoZGVzYyk7CitlcnJvcjoKKwljcnlwdG9fZnJlZV9z aGFzaCh0Zm0pOworI2VuZGlmIC8qIF9fVUJPT1RfXyAqLworCXByX2RldmVsKCI8PT0lcygpID0g JWRcbiIsIF9fZnVuY19fLCByZXQpOworCXJldHVybiByZXQ7Cit9CisKKyNpZm5kZWYgX19VQk9P VF9fCisvKgorICogQ2hlY2sgZm9yIHNlbGYtc2lnbmVkbmVzcyBpbiBhbiBYLjUwOSBjZXJ0IGFu ZCBpZiBmb3VuZCwgY2hlY2sgdGhlIHNpZ25hdHVyZQorICogaW1tZWRpYXRlbHkgaWYgd2UgY2Fu LgorICovCitpbnQgeDUwOV9jaGVja19mb3Jfc2VsZl9zaWduZWQoc3RydWN0IHg1MDlfY2VydGlm aWNhdGUgKmNlcnQpCit7CisJaW50IHJldCA9IDA7CisKKwlwcl9kZXZlbCgiPT0+JXMoKVxuIiwg X19mdW5jX18pOworCisJaWYgKGNlcnQtPnJhd19zdWJqZWN0X3NpemUgIT0gY2VydC0+cmF3X2lz c3Vlcl9zaXplIHx8CisJICAgIG1lbWNtcChjZXJ0LT5yYXdfc3ViamVjdCwgY2VydC0+cmF3X2lz c3VlciwKKwkJICAgY2VydC0+cmF3X2lzc3Vlcl9zaXplKSAhPSAwKQorCQlnb3RvIG5vdF9zZWxm X3NpZ25lZDsKKworCWlmIChjZXJ0LT5zaWctPmF1dGhfaWRzWzBdIHx8IGNlcnQtPnNpZy0+YXV0 aF9pZHNbMV0pIHsKKwkJLyogSWYgdGhlIEFLSUQgaXMgcHJlc2VudCBpdCBtYXkgaGF2ZSBvbmUg b3IgdHdvIHBhcnRzLiAgSWYKKwkJICogYm90aCBhcmUgc3VwcGxpZWQsIGJvdGggbXVzdCBtYXRj aC4KKwkJICovCisJCWJvb2wgYSA9IGFzeW1tZXRyaWNfa2V5X2lkX3NhbWUoY2VydC0+c2tpZCwg Y2VydC0+c2lnLT5hdXRoX2lkc1sxXSk7CisJCWJvb2wgYiA9IGFzeW1tZXRyaWNfa2V5X2lkX3Nh bWUoY2VydC0+aWQsIGNlcnQtPnNpZy0+YXV0aF9pZHNbMF0pOworCisJCWlmICghYSAmJiAhYikK KwkJCWdvdG8gbm90X3NlbGZfc2lnbmVkOworCisJCXJldCA9IC1FS0VZUkVKRUNURUQ7CisJCWlm ICgoKGEgJiYgIWIpIHx8IChiICYmICFhKSkgJiYKKwkJICAgIGNlcnQtPnNpZy0+YXV0aF9pZHNb MF0gJiYgY2VydC0+c2lnLT5hdXRoX2lkc1sxXSkKKwkJCWdvdG8gb3V0OworCX0KKworCXJldCA9 IC1FS0VZUkVKRUNURUQ7CisJaWYgKHN0cmNtcChjZXJ0LT5wdWItPnBrZXlfYWxnbywgY2VydC0+ c2lnLT5wa2V5X2FsZ28pICE9IDApCisJCWdvdG8gb3V0OworCisJcmV0ID0gcHVibGljX2tleV92 ZXJpZnlfc2lnbmF0dXJlKGNlcnQtPnB1YiwgY2VydC0+c2lnKTsKKwlpZiAocmV0IDwgMCkgewor CQlpZiAocmV0ID09IC1FTk9QS0cpIHsKKwkJCWNlcnQtPnVuc3VwcG9ydGVkX3NpZyA9IHRydWU7 CisJCQlyZXQgPSAwOworCQl9CisJCWdvdG8gb3V0OworCX0KKworCXByX2RldmVsKCJDZXJ0IFNl bGYtc2lnbmF0dXJlIHZlcmlmaWVkIik7CisJY2VydC0+c2VsZl9zaWduZWQgPSB0cnVlOworCitv dXQ6CisJcHJfZGV2ZWwoIjw9PSVzKCkgPSAlZFxuIiwgX19mdW5jX18sIHJldCk7CisJcmV0dXJu IHJldDsKKworbm90X3NlbGZfc2lnbmVkOgorCXByX2RldmVsKCI8PT0lcygpID0gMCBbbm90XVxu IiwgX19mdW5jX18pOworCXJldHVybiAwOworfQorCisvKgorICogQXR0ZW1wdCB0byBwYXJzZSBh IGRhdGEgYmxvYiBmb3IgYSBrZXkgYXMgYW4gWDUwOSBjZXJ0aWZpY2F0ZS4KKyAqLworc3RhdGlj IGludCB4NTA5X2tleV9wcmVwYXJzZShzdHJ1Y3Qga2V5X3ByZXBhcnNlZF9wYXlsb2FkICpwcmVw KQoreworCXN0cnVjdCBhc3ltbWV0cmljX2tleV9pZHMgKmtpZHM7CisJc3RydWN0IHg1MDlfY2Vy dGlmaWNhdGUgKmNlcnQ7CisJY29uc3QgY2hhciAqcTsKKwlzaXplX3Qgc3JsZW4sIHN1bGVuOwor CWNoYXIgKmRlc2MgPSBOVUxMLCAqcDsKKwlpbnQgcmV0OworCisJY2VydCA9IHg1MDlfY2VydF9w YXJzZShwcmVwLT5kYXRhLCBwcmVwLT5kYXRhbGVuKTsKKwlpZiAoSVNfRVJSKGNlcnQpKQorCQly ZXR1cm4gUFRSX0VSUihjZXJ0KTsKKworCXByX2RldmVsKCJDZXJ0IElzc3VlcjogJXNcbiIsIGNl cnQtPmlzc3Vlcik7CisJcHJfZGV2ZWwoIkNlcnQgU3ViamVjdDogJXNcbiIsIGNlcnQtPnN1Ympl Y3QpOworCisJaWYgKGNlcnQtPnVuc3VwcG9ydGVkX2tleSkgeworCQlyZXQgPSAtRU5PUEtHOwor CQlnb3RvIGVycm9yX2ZyZWVfY2VydDsKKwl9CisKKwlwcl9kZXZlbCgiQ2VydCBLZXkgQWxnbzog JXNcbiIsIGNlcnQtPnB1Yi0+cGtleV9hbGdvKTsKKwlwcl9kZXZlbCgiQ2VydCBWYWxpZCBwZXJp b2Q6ICVsbGQtJWxsZFxuIiwgY2VydC0+dmFsaWRfZnJvbSwgY2VydC0+dmFsaWRfdG8pOworCisJ Y2VydC0+cHViLT5pZF90eXBlID0gIlg1MDkiOworCisJaWYgKGNlcnQtPnVuc3VwcG9ydGVkX3Np ZykgeworCQlwdWJsaWNfa2V5X3NpZ25hdHVyZV9mcmVlKGNlcnQtPnNpZyk7CisJCWNlcnQtPnNp ZyA9IE5VTEw7CisJfSBlbHNlIHsKKwkJcHJfZGV2ZWwoIkNlcnQgU2lnbmF0dXJlOiAlcyArICVz XG4iLAorCQkJIGNlcnQtPnNpZy0+cGtleV9hbGdvLCBjZXJ0LT5zaWctPmhhc2hfYWxnbyk7CisJ fQorCisJLyogRG9uJ3QgcGVybWl0IGFkZGl0aW9uIG9mIGJsYWNrbGlzdGVkIGtleXMgKi8KKwly ZXQgPSAtRUtFWVJFSkVDVEVEOworCWlmIChjZXJ0LT5ibGFja2xpc3RlZCkKKwkJZ290byBlcnJv cl9mcmVlX2NlcnQ7CisKKwkvKiBQcm9wb3NlIGEgZGVzY3JpcHRpb24gKi8KKwlzdWxlbiA9IHN0 cmxlbihjZXJ0LT5zdWJqZWN0KTsKKwlpZiAoY2VydC0+cmF3X3NraWQpIHsKKwkJc3JsZW4gPSBj ZXJ0LT5yYXdfc2tpZF9zaXplOworCQlxID0gY2VydC0+cmF3X3NraWQ7CisJfSBlbHNlIHsKKwkJ c3JsZW4gPSBjZXJ0LT5yYXdfc2VyaWFsX3NpemU7CisJCXEgPSBjZXJ0LT5yYXdfc2VyaWFsOwor CX0KKworCXJldCA9IC1FTk9NRU07CisJZGVzYyA9IGttYWxsb2Moc3VsZW4gKyAyICsgc3JsZW4g KiAyICsgMSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkZXNjKQorCQlnb3RvIGVycm9yX2ZyZWVfY2Vy dDsKKwlwID0gbWVtY3B5KGRlc2MsIGNlcnQtPnN1YmplY3QsIHN1bGVuKTsKKwlwICs9IHN1bGVu OworCSpwKysgPSAnOic7CisJKnArKyA9ICcgJzsKKwlwID0gYmluMmhleChwLCBxLCBzcmxlbik7 CisJKnAgPSAwOworCisJa2lkcyA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBhc3ltbWV0cmljX2tl eV9pZHMpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWtpZHMpCisJCWdvdG8gZXJyb3JfZnJlZV9kZXNj OworCWtpZHMtPmlkWzBdID0gY2VydC0+aWQ7CisJa2lkcy0+aWRbMV0gPSBjZXJ0LT5za2lkOwor CisJLyogV2UncmUgcGlubmluZyB0aGUgbW9kdWxlIGJ5IGJlaW5nIGxpbmtlZCBhZ2FpbnN0IGl0 ICovCisJX19tb2R1bGVfZ2V0KHB1YmxpY19rZXlfc3VidHlwZS5vd25lcik7CisJcHJlcC0+cGF5 bG9hZC5kYXRhW2FzeW1fc3VidHlwZV0gPSAmcHVibGljX2tleV9zdWJ0eXBlOworCXByZXAtPnBh eWxvYWQuZGF0YVthc3ltX2tleV9pZHNdID0ga2lkczsKKwlwcmVwLT5wYXlsb2FkLmRhdGFbYXN5 bV9jcnlwdG9dID0gY2VydC0+cHViOworCXByZXAtPnBheWxvYWQuZGF0YVthc3ltX2F1dGhdID0g Y2VydC0+c2lnOworCXByZXAtPmRlc2NyaXB0aW9uID0gZGVzYzsKKwlwcmVwLT5xdW90YWxlbiA9 IDEwMDsKKworCS8qIFdlJ3ZlIGZpbmlzaGVkIHdpdGggdGhlIGNlcnRpZmljYXRlICovCisJY2Vy dC0+cHViID0gTlVMTDsKKwljZXJ0LT5pZCA9IE5VTEw7CisJY2VydC0+c2tpZCA9IE5VTEw7CisJ Y2VydC0+c2lnID0gTlVMTDsKKwlkZXNjID0gTlVMTDsKKwlyZXQgPSAwOworCitlcnJvcl9mcmVl X2Rlc2M6CisJa2ZyZWUoZGVzYyk7CitlcnJvcl9mcmVlX2NlcnQ6CisJeDUwOV9mcmVlX2NlcnRp ZmljYXRlKGNlcnQpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgYXN5bW1ldHJp Y19rZXlfcGFyc2VyIHg1MDlfa2V5X3BhcnNlciA9IHsKKwkub3duZXIJPSBUSElTX01PRFVMRSwK KwkubmFtZQk9ICJ4NTA5IiwKKwkucGFyc2UJPSB4NTA5X2tleV9wcmVwYXJzZSwKK307CisKKy8q CisgKiBNb2R1bGUgc3R1ZmYKKyAqLworc3RhdGljIGludCBfX2luaXQgeDUwOV9rZXlfaW5pdCh2 b2lkKQoreworCXJldHVybiByZWdpc3Rlcl9hc3ltbWV0cmljX2tleV9wYXJzZXIoJng1MDlfa2V5 X3BhcnNlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCB4NTA5X2tleV9leGl0KHZvaWQpCit7 CisJdW5yZWdpc3Rlcl9hc3ltbWV0cmljX2tleV9wYXJzZXIoJng1MDlfa2V5X3BhcnNlcik7Cit9 CisKK21vZHVsZV9pbml0KHg1MDlfa2V5X2luaXQpOworbW9kdWxlX2V4aXQoeDUwOV9rZXlfZXhp dCk7CisjZW5kaWYgLyogIV9fVUJPT1RfXyAqLworCitNT0RVTEVfREVTQ1JJUFRJT04oIlguNTA5 IGNlcnRpZmljYXRlIHBhcnNlciIpOworTU9EVUxFX0FVVEhPUigiUmVkIEhhdCwgSW5jLiIpOwor TU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotLSAKMi4yMS4wCgo=